From 62d18e89fb65b6735a53fa211a2465a79d74e4f4 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 30 Oct 2015 13:40:16 -0400 Subject: [PATCH 001/650] Extended particle types to have CE and MG types, propogated changes necessary to rest of code so it works as it used to for CE .... at least its supposed to --- src/cross_section.F90 | 4 +- src/eigenvalue.F90 | 2 +- src/geometry.F90 | 39 +++---- src/mesh.F90 | 1 - src/output.F90 | 11 +- src/particle_header.F90 | 120 +++++++++++++++++--- src/particle_restart.F90 | 20 +++- src/particle_restart_write.F90 | 4 +- src/physics.F90 | 201 +++++++++++++++++---------------- src/plot.F90 | 16 +-- src/simulation.F90 | 10 +- src/source.F90 | 4 +- src/tally.F90 | 70 ++++++------ src/track_output.F90 | 6 +- src/tracking.F90 | 31 +++-- 15 files changed, 330 insertions(+), 209 deletions(-) diff --git a/src/cross_section.F90 b/src/cross_section.F90 index 1c56d961e1..1586912a96 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -8,7 +8,7 @@ module cross_section use global use list_header, only: ListElemInt use material_header, only: Material - use particle_header, only: Particle + use particle_header, only: Particle_Base, Particle_CE, Particle_MG use random_lcg, only: prn use search, only: binary_search @@ -27,7 +27,7 @@ contains subroutine calculate_xs(p) - type(Particle), intent(inout) :: p + type(Particle_CE), intent(in) :: p integer :: i ! loop index over nuclides integer :: i_nuclide ! index into nuclides array diff --git a/src/eigenvalue.F90 b/src/eigenvalue.F90 index 403347caa1..50d6cabc5e 100644 --- a/src/eigenvalue.F90 +++ b/src/eigenvalue.F90 @@ -10,7 +10,7 @@ module eigenvalue use math, only: t_percentile use mesh, only: count_bank_sites use mesh_header, only: RegularMesh - use particle_header, only: Particle + ! use particle_header, only: Particle_Base use random_lcg, only: prn, set_particle_seed, prn_skip use search, only: binary_search use string, only: to_str diff --git a/src/geometry.F90 b/src/geometry.F90 index e922479b1d..e3058d6e00 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -6,7 +6,8 @@ module geometry &RectLattice, HexLattice use global use output, only: write_message - use particle_header, only: LocalCoord, Particle + use particle_header, only: LocalCoord, Particle_Base, Particle_CE, & + Particle_MG use particle_restart_write, only: write_particle_restart use surface_header use string, only: to_str @@ -32,7 +33,7 @@ contains pure function cell_contains(c, p) result(in_cell) type(Cell), intent(in) :: c - type(Particle), intent(in) :: p + class(Particle_Base), intent(in) :: p logical :: in_cell if (c%simple) then @@ -44,7 +45,7 @@ contains pure function simple_cell_contains(c, p) result(in_cell) type(Cell), intent(in) :: c - type(Particle), intent(in) :: p + class(Particle_Base), intent(in) :: p logical :: in_cell integer :: i @@ -78,7 +79,7 @@ contains pure function complex_cell_contains(c, p) result(in_cell) type(Cell), intent(in) :: c - type(Particle), intent(in) :: p + class(Particle_Base), intent(in) :: p logical :: in_cell integer :: i @@ -139,7 +140,7 @@ contains subroutine check_cell_overlap(p) - type(Particle), intent(inout) :: p + class(Particle_Base), intent(inout) :: p integer :: i ! cell loop index on a level integer :: j ! coordinate level index @@ -187,9 +188,9 @@ contains recursive subroutine find_cell(p, found, search_cells) - type(Particle), intent(inout) :: p - logical, intent(inout) :: found - integer, optional :: search_cells(:) + class(Particle_Base), intent(inout) :: p + logical, intent(inout) :: found + integer, optional :: search_cells(:) integer :: i ! index over cells integer :: j ! coordinate level index integer :: i_xyz(3) ! indices in lattice @@ -339,8 +340,8 @@ contains !=============================================================================== subroutine cross_surface(p, last_cell) - type(Particle), intent(inout) :: p - integer, intent(in) :: last_cell ! last cell particle was in + class(Particle_Base), intent(inout) :: p + integer, intent(in) :: last_cell ! last cell particle was in real(8) :: u ! x-component of direction real(8) :: v ! y-component of direction @@ -501,8 +502,8 @@ contains subroutine cross_lattice(p, lattice_translation) - type(Particle), intent(inout) :: p - integer, intent(in) :: lattice_translation(3) + class(Particle_Base), intent(inout) :: p + integer, intent(in) :: lattice_translation(3) integer :: j integer :: i_xyz(3) ! indices in lattice logical :: found ! particle found in cell? @@ -574,11 +575,11 @@ contains subroutine distance_to_boundary(p, dist, surface_crossed, lattice_translation, & next_level) - type(Particle), intent(inout) :: p - real(8), intent(out) :: dist - integer, intent(out) :: surface_crossed - integer, intent(out) :: lattice_translation(3) - integer, intent(out) :: next_level + class(Particle_Base), intent(inout) :: p + real(8), intent(out) :: dist + integer, intent(out) :: surface_crossed + integer, intent(out) :: lattice_translation(3) + integer, intent(out) :: next_level integer :: i ! index for surface in cell integer :: j @@ -954,8 +955,8 @@ contains subroutine handle_lost_particle(p, message) - type(Particle), intent(inout) :: p - character(*) :: message + class(Particle_Base), intent(inout) :: p + character(*) :: message ! Print warning and write lost particle file call warning(message) diff --git a/src/mesh.F90 b/src/mesh.F90 index 3d0235d189..9cb8dc5969 100644 --- a/src/mesh.F90 +++ b/src/mesh.F90 @@ -3,7 +3,6 @@ module mesh use constants use global use mesh_header - use particle_header, only: Particle use search, only: binary_search #ifdef MPI diff --git a/src/output.F90 b/src/output.F90 index 55cd5b2a5b..5bb90343c4 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -12,7 +12,7 @@ module output use math, only: t_percentile use mesh_header, only: RegularMesh use mesh, only: mesh_indices_to_bin, bin_to_mesh_indices - use particle_header, only: LocalCoord, Particle + use particle_header, only: LocalCoord, Particle_Base, Particle_CE, Particle_MG use plot_header use string, only: to_upper, to_str use tally_header, only: TallyObject @@ -251,7 +251,7 @@ contains subroutine print_particle(p) - type(Particle), intent(in) :: p + class(Particle_Base), intent(in) :: p integer :: i ! index for coordinate levels type(Cell), pointer :: c @@ -308,7 +308,12 @@ contains ! Display weight, energy, grid index, and interpolation factor write(ou,*) ' Weight = ' // to_str(p % wgt) - write(ou,*) ' Energy = ' // to_str(p % E) + select type(p) + type is (Particle_CE) + write(ou,*) ' Energy = ' // to_str(p % E) + type is (Particle_MG) + write(ou,*) ' Energy Group = ' // to_str(p % g) + end select write(ou,*) ' Delayed Group = ' // to_str(p % delayed_group) write(ou,*) diff --git a/src/particle_header.F90 b/src/particle_header.F90 index 0b9b251ee5..6b4d38845a 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -38,7 +38,7 @@ module particle_header ! geometry !=============================================================================== - type Particle + type, abstract :: Particle_Base ! Basic data integer(8) :: id ! Unique ID integer :: type ! Particle type (n, p, e, etc) @@ -49,7 +49,6 @@ module particle_header ! Other physical data real(8) :: wgt ! particle weight - real(8) :: E ! energy real(8) :: mu ! angle of scatter logical :: alive ! is particle alive? @@ -57,7 +56,6 @@ module particle_header real(8) :: last_xyz(3) ! previous coordinates real(8) :: last_uvw(3) ! previous direction coordinates real(8) :: last_wgt ! pre-collision particle weight - real(8) :: last_E ! pre-collision energy real(8) :: absorb_wgt ! weight absorbed for survival biasing ! What event last took place @@ -92,9 +90,54 @@ module particle_header contains procedure :: initialize => initialize_particle procedure :: clear => clear_particle - procedure :: initialize_from_source - procedure :: create_secondary - end type Particle + procedure(initialize_from_source_), deferred, pass :: initialize_from_source + procedure(create_secondary_), deferred, pass :: create_secondary + end type Particle_Base + + type, extends(Particle_Base) :: Particle_CE + ! Energy Data + real(8) :: E ! post-collision energy + real(8) :: last_E ! pre-collision energy + + contains + procedure :: initialize_from_source => initialize_from_source_ce + procedure :: create_secondary => create_secondary_ce + end type Particle_CE + + type, extends(Particle_Base) :: Particle_MG + ! Energy Data + integer :: g ! post-collision energy group + integer :: last_g ! pre-collision energy group + + contains + procedure :: initialize_from_source => initialize_from_source_mg + procedure :: create_secondary => create_secondary_mg + end type Particle_MG + + abstract interface + +!=============================================================================== +! INITIALIZE_FROM_SOURCE_ returns .true. if the given lattice indices fit within the +! bounds of the lattice. Returns false otherwise. + + subroutine initialize_from_source_(this, src) + import Particle_Base + import Bank + class(Particle_Base), intent(inout) :: this + type(Bank), intent(in) :: src + end subroutine initialize_from_source_ + +!=============================================================================== +! CREATE_SECONDARY_ Generates a secondary particle from this + + subroutine create_secondary_(this, uvw, type) + import Particle_Base + class(Particle_Base), intent(inout) :: this + real(8), intent(in) :: uvw(3) + integer, intent(in) :: type + end subroutine create_secondary_ + + end interface contains @@ -105,7 +148,7 @@ contains subroutine initialize_particle(this) - class(Particle) :: this + class(Particle_Base) :: this ! Clear coordinate lists call this % clear() @@ -141,7 +184,7 @@ contains subroutine clear_particle(this) - class(Particle) :: this + class(Particle_Base) :: this integer :: i ! remove any coordinate levels @@ -174,9 +217,9 @@ contains ! fission, or simply as a secondary particle. !=============================================================================== - subroutine initialize_from_source(this, src) - class(Particle), intent(inout) :: this - type(Bank), intent(in) :: src + subroutine initialize_from_source_ce(this, src) + class(Particle_CE), intent(inout) :: this + type(Bank), intent(in) :: src ! set defaults call this % initialize() @@ -191,17 +234,37 @@ contains this % E = src % E this % last_E = src % E - end subroutine initialize_from_source + end subroutine initialize_from_source_ce + + subroutine initialize_from_source_mg(this, src) + class(Particle_MG), intent(inout) :: this + type(Bank), intent(in) :: src + + ! set defaults + call this % initialize() + + ! copy attributes from source bank site + this % wgt = src % wgt + this % last_wgt = src % wgt + this % coord(1) % xyz = src % xyz + this % coord(1) % uvw = src % uvw + this % last_xyz = src % xyz + this % last_uvw = src % uvw + !!! The following requires a MG version of Bank + this % g = src % E + this % last_g = src % E + + end subroutine initialize_from_source_mg !=============================================================================== ! CREATE_SECONDARY stores the current phase space attributes of the particle in ! the secondary bank and increments the number of sites in the secondary bank. !=============================================================================== - subroutine create_secondary(this, uvw, type) - class(Particle), intent(inout) :: this - real(8), intent(in) :: uvw(3) - integer, intent(in) :: type + subroutine create_secondary_ce(this, uvw, type) + class(Particle_CE), intent(inout) :: this + real(8), intent(in) :: uvw(3) + integer, intent(in) :: type integer :: n @@ -218,6 +281,29 @@ contains this % secondary_bank(n) % E = this % E this % n_secondary = n - end subroutine create_secondary + end subroutine create_secondary_ce + + subroutine create_secondary_mg(this, uvw, type) + class(Particle_MG), intent(inout) :: this + real(8), intent(in) :: uvw(3) + integer, intent(in) :: type + + integer :: n + + ! Check to make sure that the hard-limit on secondary particles is not + ! exceeded. + if (this % n_secondary == MAX_SECONDARY) then + call fatal_error("Too many secondary particles created.") + end if + + n = this % n_secondary + 1 + this % secondary_bank(n) % wgt = this % wgt + this % secondary_bank(n) % xyz(:) = this % coord(1) % xyz + this % secondary_bank(n) % uvw(:) = uvw + !!! The following requires a MG version of Bank + this % secondary_bank(n) % E = this % g + this % n_secondary = n + + end subroutine create_secondary_mg end module particle_header diff --git a/src/particle_restart.F90 b/src/particle_restart.F90 index 2e0523d484..fc3eb4393e 100644 --- a/src/particle_restart.F90 +++ b/src/particle_restart.F90 @@ -8,7 +8,7 @@ module particle_restart use global use hdf5_interface, only: file_open, file_close, read_dataset use output, only: write_message, print_particle - use particle_header, only: Particle + use particle_header, only: Particle_Base, Particle_CE, Particle_MG use random_lcg, only: set_particle_seed use tracking, only: transport @@ -28,7 +28,7 @@ contains integer(8) :: particle_seed integer :: previous_run_mode - type(Particle) :: p + class(Particle_Base), pointer :: p ! Set verbosity high verbosity = 10 @@ -66,7 +66,7 @@ contains !=============================================================================== subroutine read_particle_restart(p, previous_run_mode) - type(Particle), intent(inout) :: p + class(Particle_Base), intent(inout) :: p integer, intent(inout) :: previous_run_mode integer :: int_scalar @@ -96,7 +96,12 @@ contains end select call read_dataset(file_id, 'id', p%id) call read_dataset(file_id, 'weight', p%wgt) - call read_dataset(file_id, 'energy', p%E) + select type(p) + type is (Particle_CE) + call read_dataset(file_id, 'energy', p%E) + type is (Particle_MG) + call read_dataset(file_id, 'energy_group', p%g) + end select call read_dataset(file_id, 'xyz', p%coord(1)%xyz) call read_dataset(file_id, 'uvw', p%coord(1)%uvw) @@ -104,7 +109,12 @@ contains p%last_wgt = p%wgt p%last_xyz = p%coord(1)%xyz p%last_uvw = p%coord(1)%uvw - p%last_E = p%E + select type(p) + type is (Particle_CE) + p%last_E = p%E + type is (Particle_MG) + p%last_g = p%g + end select ! Close hdf5 file call file_close(file_id) diff --git a/src/particle_restart_write.F90 b/src/particle_restart_write.F90 index edd779df09..9dff7e5f3b 100644 --- a/src/particle_restart_write.F90 +++ b/src/particle_restart_write.F90 @@ -3,7 +3,7 @@ module particle_restart_write use bank_header, only: Bank use global use hdf5_interface - use particle_header, only: Particle + use particle_header, only: Particle_Base use string, only: to_str use hdf5 @@ -19,7 +19,7 @@ contains !=============================================================================== subroutine write_particle_restart(p) - type(Particle), intent(in) :: p + class(Particle_Base), intent(in) :: p integer(HID_T) :: file_id character(MAX_FILE_LEN) :: filename diff --git a/src/physics.F90 b/src/physics.F90 index 581cb04c9d..aae7027bae 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -12,7 +12,7 @@ module physics use math, only: maxwell_spectrum, watt_spectrum use mesh, only: get_mesh_indices use output, only: write_message - use particle_header, only: Particle + use particle_header, only: Particle_Base, Particle_CE, Particle_MG use particle_restart_write, only: write_particle_restart use random_lcg, only: prn use search, only: binary_search @@ -32,7 +32,7 @@ contains subroutine collision(p) - type(Particle), intent(inout) :: p + type(Particle_CE), intent(inout) :: p ! Store pre-collision particle properties p % last_wgt = p % wgt @@ -70,7 +70,7 @@ contains subroutine sample_reaction(p) - type(Particle), intent(inout) :: p + type(Particle_CE), intent(inout) :: p integer :: i_nuclide ! index in nuclides array integer :: i_reaction ! index in nuc % reactions array @@ -123,9 +123,9 @@ contains function sample_nuclide(p, base) result(i_nuclide) - type(Particle), intent(in) :: p - character(7), intent(in) :: base ! which reaction to sample based on - integer :: i_nuclide + class(Particle_Base), intent(in) :: p + character(7), intent(in) :: base ! which reaction to sample based on + integer :: i_nuclide integer :: i real(8) :: prob @@ -240,8 +240,8 @@ contains subroutine absorption(p, i_nuclide) - type(Particle), intent(inout) :: p - integer, intent(in) :: i_nuclide + class(Particle_Base), intent(inout) :: p + integer, intent(in) :: i_nuclide if (survival_biasing) then ! Determine weight absorbed in survival biasing @@ -281,7 +281,7 @@ contains subroutine russian_roulette(p) - type(Particle), intent(inout) :: p + class(Particle_Base), intent(inout) :: p if (p % wgt < weight_cutoff) then if (prn() < p % wgt / weight_survive) then @@ -302,8 +302,8 @@ contains subroutine scatter(p, i_nuclide) - type(Particle), intent(inout) :: p - integer, intent(in) :: i_nuclide + type(Particle_CE), intent(inout) :: p + integer, intent(in) :: i_nuclide integer :: i integer :: i_grid @@ -1059,9 +1059,9 @@ contains subroutine create_fission_sites(p, i_nuclide, i_reaction) - type(Particle), intent(inout) :: p - integer, intent(in) :: i_nuclide - integer, intent(in) :: i_reaction + class(Particle_Base), intent(inout) :: p + integer, intent(in) :: i_nuclide + integer, intent(in) :: i_reaction integer :: nu_d(MAX_DELAYED_GROUPS) ! number of delayed neutrons born integer :: i ! loop index @@ -1175,10 +1175,10 @@ contains function sample_fission_energy(nuc, rxn, p) result(E_out) - type(Nuclide), pointer :: nuc - type(Reaction), pointer :: rxn - type(Particle), intent(inout) :: p ! Particle causing fission - real(8) :: E_out ! outgoing energy of fission neutron + type(Nuclide), pointer :: nuc + type(Reaction), pointer :: rxn + class(Particle_Base), intent(inout) :: p ! Particle causing fission + real(8) :: E_out ! outgoing E of fission neutron integer :: j ! index on nu energy grid / precursor group integer :: lc ! index before start of energies/nu values @@ -1195,103 +1195,106 @@ contains real(8) :: prob ! cumulative probability type(DistEnergy), pointer :: edist - ! Determine total nu - nu_t = nu_total(nuc, p % E) + select type(p) + type is (Particle_CE) + ! Determine total nu + nu_t = nu_total(nuc, p % E) - ! Determine delayed nu - nu_d = nu_delayed(nuc, p % E) + ! Determine delayed nu + nu_d = nu_delayed(nuc, p % E) - ! Determine delayed neutron fraction - beta = nu_d / nu_t + ! Determine delayed neutron fraction + beta = nu_d / nu_t - if (prn() < beta) then - ! ==================================================================== - ! DELAYED NEUTRON SAMPLED + if (prn() < beta) then + ! ==================================================================== + ! DELAYED NEUTRON SAMPLED - ! sampled delayed precursor group - xi = prn() - lc = 1 - prob = ZERO - do j = 1, nuc % n_precursor - ! determine number of interpolation regions and energies - NR = int(nuc % nu_d_precursor_data(lc + 1)) - NE = int(nuc % nu_d_precursor_data(lc + 2 + 2*NR)) + ! sampled delayed precursor group + xi = prn() + lc = 1 + prob = ZERO + do j = 1, nuc % n_precursor + ! determine number of interpolation regions and energies + NR = int(nuc % nu_d_precursor_data(lc + 1)) + NE = int(nuc % nu_d_precursor_data(lc + 2 + 2*NR)) - ! determine delayed neutron precursor yield for group j - yield = interpolate_tab1(nuc % nu_d_precursor_data( & - lc+1:lc+2+2*NR+2*NE), p % E) + ! determine delayed neutron precursor yield for group j + yield = interpolate_tab1(nuc % nu_d_precursor_data( & + lc+1:lc+2+2*NR+2*NE), p % E) - ! Check if this group is sampled - prob = prob + yield - if (xi < prob) exit + ! Check if this group is sampled + prob = prob + yield + if (xi < prob) exit - ! advance pointer - lc = lc + 2 + 2*NR + 2*NE + 1 - end do + ! advance pointer + lc = lc + 2 + 2*NR + 2*NE + 1 + end do - ! if the sum of the probabilities is slightly less than one and the - ! random number is greater, j will be greater than nuc % - ! n_precursor -- check for this condition - j = min(j, nuc % n_precursor) + ! if the sum of the probabilities is slightly less than one and the + ! random number is greater, j will be greater than nuc % + ! n_precursor -- check for this condition + j = min(j, nuc % n_precursor) - ! set the delayed group for the particle born from fission - p % delayed_group = j + ! set the delayed group for the particle born from fission + p % delayed_group = j - ! select energy distribution for group j - law = nuc % nu_d_edist(j) % law - edist => nuc % nu_d_edist(j) + ! select energy distribution for group j + law = nuc % nu_d_edist(j) % law + edist => nuc % nu_d_edist(j) - ! sample from energy distribution - n_sample = 0 - do - if (law == 44 .or. law == 61) then - call sample_energy(edist, p % E, E_out, mu) - else - call sample_energy(edist, p % E, E_out) - end if + ! sample from energy distribution + n_sample = 0 + do + if (law == 44 .or. law == 61) then + call sample_energy(edist, p % E, E_out, mu) + else + call sample_energy(edist, p % E, E_out) + end if - ! resample if energy is greater than maximum neutron energy - if (E_out < energy_max_neutron) exit + ! resample if energy is greater than maximum neutron energy + if (E_out < energy_max_neutron) exit - ! check for large number of resamples - n_sample = n_sample + 1 - if (n_sample == MAX_SAMPLE) then - ! call write_particle_restart(p) - call fatal_error("Resampled energy distribution maximum number of " & - &// "times for nuclide " // nuc % name) - end if - end do + ! check for large number of resamples + n_sample = n_sample + 1 + if (n_sample == MAX_SAMPLE) then + ! call write_particle_restart(p) + call fatal_error("Resampled energy distribution maximum number of " & + &// "times for nuclide " // nuc % name) + end if + end do - else - ! ==================================================================== - ! PROMPT NEUTRON SAMPLED + else + ! ==================================================================== + ! PROMPT NEUTRON SAMPLED - ! set the delayed group for the particle born from fission to 0 - p % delayed_group = 0 + ! set the delayed group for the particle born from fission to 0 + p % delayed_group = 0 - ! sample from prompt neutron energy distribution - law = rxn % edist % law - n_sample = 0 - do - if (law == 44 .or. law == 61) then - call sample_energy(rxn%edist, p % E, E_out, prob) - else - call sample_energy(rxn%edist, p % E, E_out) - end if + ! sample from prompt neutron energy distribution + law = rxn % edist % law + n_sample = 0 + do + if (law == 44 .or. law == 61) then + call sample_energy(rxn%edist, p % E, E_out, prob) + else + call sample_energy(rxn%edist, p % E, E_out) + end if - ! resample if energy is greater than maximum neutron energy - if (E_out < energy_max_neutron) exit + ! resample if energy is greater than maximum neutron energy + if (E_out < energy_max_neutron) exit - ! check for large number of resamples - n_sample = n_sample + 1 - if (n_sample == MAX_SAMPLE) then - ! call write_particle_restart(p) - call fatal_error("Resampled energy distribution maximum number of " & - &// "times for nuclide " // nuc % name) - end if - end do + ! check for large number of resamples + n_sample = n_sample + 1 + if (n_sample == MAX_SAMPLE) then + ! call write_particle_restart(p) + call fatal_error("Resampled energy distribution maximum number of " & + &// "times for nuclide " // nuc % name) + end if + end do - end if + end if + end select end function sample_fission_energy @@ -1301,9 +1304,9 @@ contains !=============================================================================== subroutine inelastic_scatter(nuc, rxn, p) - type(Nuclide), pointer :: nuc - type(Reaction), pointer :: rxn - type(Particle), intent(inout) :: p + type(Nuclide), pointer :: nuc + type(Reaction), pointer :: rxn + type(Particle_CE), intent(inout) :: p integer :: i ! loop index integer :: law ! secondary energy distribution law diff --git a/src/plot.F90 b/src/plot.F90 index a5497bc203..6ac2da2c14 100644 --- a/src/plot.F90 +++ b/src/plot.F90 @@ -9,7 +9,7 @@ module plot use mesh, only: get_mesh_indices use mesh_header, only: RegularMesh use output, only: write_message - use particle_header, only: Particle, LocalCoord + use particle_header, only: LocalCoord, Particle_Base use plot_header use ppmlib, only: Image, init_image, allocate_image, & deallocate_image, set_pixel @@ -56,7 +56,7 @@ contains subroutine position_rgb(p, pl, rgb, id) - type(Particle), intent(inout) :: p + class(Particle_Base), intent(inout) :: p type(ObjectPlot), pointer, intent(in) :: pl integer, intent(out) :: rgb(3) integer, intent(out) :: id @@ -123,9 +123,9 @@ contains real(8) :: in_pixel real(8) :: out_pixel real(8) :: xyz(3) - type(Image) :: img - type(Particle) :: p - type(ProgressBar) :: progress + type(Image) :: img + class(Particle_Base), pointer :: p + type(ProgressBar) :: progress ! Initialize and allocate space for image call init_image(img) @@ -362,9 +362,9 @@ contains integer(HSIZE_T) :: offset(3) 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 - type(ProgressBar) :: progress - type(c_ptr) :: f_ptr + class(Particle_Base), pointer :: p + type(ProgressBar) :: progress + type(c_ptr) :: f_ptr ! compute voxel widths in each direction vox = pl % width/dble(pl % pixels) diff --git a/src/simulation.F90 b/src/simulation.F90 index cc230d645b..a674a18df4 100644 --- a/src/simulation.F90 +++ b/src/simulation.F90 @@ -15,7 +15,7 @@ module simulation use global use output, only: write_message, header, print_columns, & print_batch_keff, print_generation - use particle_header, only: Particle + use particle_header, only: Particle_Base use random_lcg, only: set_particle_seed use source, only: initialize_source use state_point, only: write_state_point, write_source_point @@ -39,8 +39,8 @@ contains subroutine run_simulation() - type(Particle) :: p - integer(8) :: i_work + class(Particle_Base), pointer :: p + integer(8) :: i_work if (.not. restart_run) call initialize_source() @@ -124,8 +124,8 @@ contains subroutine initialize_history(p, index_source) - type(Particle), intent(inout) :: p - integer(8), intent(in) :: index_source + class(Particle_Base), intent(inout) :: p + integer(8), intent(in) :: index_source integer(8) :: particle_seed ! unique index for particle integer :: i diff --git a/src/source.F90 b/src/source.F90 index 6226517f3e..e8cb420083 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -9,7 +9,7 @@ module source use hdf5_interface, only: file_create, file_open, file_close, read_dataset use math, only: maxwell_spectrum, watt_spectrum use output, only: write_message - use particle_header, only: Particle + use particle_header, only: Particle_Base, Particle_CE, Particle_MG use random_lcg, only: prn, set_particle_seed, prn_set_stream use state_point, only: read_source_bank, write_source_bank use string, only: to_str @@ -108,7 +108,7 @@ contains real(8) :: a ! Arbitrary parameter 'a' real(8) :: b ! Arbitrary parameter 'b' logical :: found ! Does the source particle exist within geometry? - type(Particle) :: p ! Temporary particle for using find_cell + class(Particle_Base), pointer :: p ! Temporary particle for using find_cell integer, save :: num_resamples = 0 ! Number of resamples encountered ! Set weight to one by default diff --git a/src/tally.F90 b/src/tally.F90 index 0586860191..248f87c6a7 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -11,7 +11,8 @@ module tally mesh_intersects_2d, mesh_intersects_3d use mesh_header, only: RegularMesh use output, only: header - use particle_header, only: LocalCoord, Particle + use particle_header, only: LocalCoord, Particle_Base, Particle_CE, & + Particle_MG use search, only: binary_search use string, only: to_str use tally_header, only: TallyResult, TallyMapItem, TallyMapElement @@ -37,7 +38,7 @@ contains subroutine score_general(p, t, start_index, filter_index, i_nuclide, & atom_density, flux) - type(Particle), intent(in) :: p + type(Particle_CE), intent(in) :: p type(TallyObject), pointer, intent(inout) :: t integer, intent(in) :: start_index integer, intent(in) :: i_nuclide @@ -837,10 +838,10 @@ contains subroutine score_all_nuclides(p, i_tally, flux, filter_index) - type(Particle), intent(in) :: p - integer, intent(in) :: i_tally - real(8), intent(in) :: flux - integer, intent(in) :: filter_index + type(Particle_CE), 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 :: i_nuclide ! index in nuclides array @@ -891,7 +892,7 @@ contains subroutine score_analog_tally(p) - type(Particle), intent(in) :: p + type(Particle_CE), intent(in) :: p integer :: i integer :: i_tally @@ -999,9 +1000,9 @@ contains 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 + type(Particle_CE), intent(in) :: p + type(TallyObject), pointer :: t + integer, intent(in) :: i_score ! index for score integer :: i ! index of outgoing energy filter integer :: n ! number of energies on filter @@ -1061,7 +1062,7 @@ contains subroutine score_fission_delayed_eout(p, t, i_score) - type(Particle), intent(in) :: p + type(Particle_CE), intent(in) :: p type(TallyObject), intent(inout) :: t integer, intent(in) :: i_score ! index for score @@ -1187,8 +1188,8 @@ contains subroutine score_tracklength_tally(p, distance) - type(Particle), intent(in) :: p - real(8), intent(in) :: distance + type(Particle_CE), intent(in) :: p + real(8), intent(in) :: distance integer :: i integer :: i_tally @@ -1300,9 +1301,9 @@ contains subroutine score_tl_on_mesh(p, i_tally, d_track) - type(Particle), intent(in) :: p - integer, intent(in) :: i_tally - real(8), intent(in) :: d_track + type(Particle_CE), 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 @@ -1585,7 +1586,7 @@ contains subroutine score_collision_tally(p) - type(Particle), intent(in) :: p + type(Particle_CE), intent(in) :: p integer :: i integer :: i_tally @@ -1694,9 +1695,9 @@ contains subroutine get_scoring_bins(p, i_tally, found_bin) - type(Particle), intent(in) :: p - integer, intent(in) :: i_tally - logical, intent(out) :: found_bin + type(Particle_CE), intent(in) :: p + integer, intent(in) :: i_tally + logical, intent(out) :: found_bin integer :: i ! loop index for filters integer :: j @@ -1902,7 +1903,7 @@ contains subroutine score_surface_current(p) - type(Particle), intent(in) :: p + class(Particle_Base), intent(in) :: p integer :: i integer :: i_tally @@ -1967,19 +1968,22 @@ contains uvw = p % coord(1) % uvw ! determine incoming energy bin - j = t % find_filter(FILTER_ENERGYIN) - if (j > 0) then - n = t % filters(j) % n_bins - ! check if energy of the particle is within energy bins - if (p % E < t % filters(j) % real_bins(1) .or. & - p % E > t % filters(j) % real_bins(n + 1)) then - cycle - end if + select type(p) + type is (Particle_CE) + j = t % find_filter(FILTER_ENERGYIN) + if (j > 0) then + n = t % filters(j) % n_bins + ! check if energy of the particle is within energy bins + if (p % E < t % filters(j) % real_bins(1) .or. & + p % E > t % filters(j) % real_bins(n + 1)) then + cycle + end if - ! search to find incoming energy bin - matching_bins(j) = binary_search(t % filters(j) % real_bins, & - n + 1, p % E) - end if + ! search to find incoming energy bin + matching_bins(j) = binary_search(t % filters(j) % real_bins, & + n + 1, p % E) + end if + end select ! ======================================================================= ! SPECIAL CASES WHERE TWO INDICES ARE THE SAME diff --git a/src/track_output.F90 b/src/track_output.F90 index 1665ac25ea..867cd4a787 100644 --- a/src/track_output.F90 +++ b/src/track_output.F90 @@ -7,7 +7,7 @@ module track_output use global use hdf5_interface - use particle_header, only: Particle + use particle_header, only: Particle_Base use string, only: to_str use hdf5 @@ -43,7 +43,7 @@ contains !=============================================================================== subroutine write_particle_track(p) - type(Particle), intent(in) :: p + class(Particle_Base), intent(in) :: p real(8), allocatable :: new_coords(:, :) integer :: i @@ -93,7 +93,7 @@ contains !=============================================================================== subroutine finalize_particle_track(p) - type(Particle), intent(in) :: p + class(Particle_Base), intent(in) :: p integer :: i integer :: n_particle_tracks diff --git a/src/tracking.F90 b/src/tracking.F90 index 2e4503e139..8dc8c7772e 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -8,7 +8,7 @@ module tracking use geometry_header, only: Universe, BASE_UNIVERSE use global use output, only: write_message - use particle_header, only: LocalCoord, Particle + use particle_header, only: LocalCoord, Particle_Base, Particle_CE, Particle_MG use physics, only: collision use random_lcg, only: prn use string, only: to_str @@ -27,7 +27,7 @@ contains subroutine transport(p) - type(Particle), intent(inout) :: p + class(Particle_Base), intent(inout) :: p integer :: j ! coordinate level integer :: next_level ! next coordinate level to check @@ -83,7 +83,10 @@ contains ! 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) + select type(p) + type is (Particle_CE) + if (p % material /= p % last_material) call calculate_xs(p) + end select ! Find the distance to the nearest boundary call distance_to_boundary(p, d_boundary, surface_crossed, & @@ -105,8 +108,13 @@ contains end do ! Score track-length tallies - if (active_tracklength_tallies % size() > 0) & - call score_tracklength_tally(p, distance) + if (active_tracklength_tallies % size() > 0) then + select type(p) + type is (Particle_CE) + call score_tracklength_tally(p, distance) + end select + end if + ! Score track-length estimate of k-eff if (run_mode == MODE_EIGENVALUE) then @@ -151,14 +159,19 @@ contains ! Clear surface component p % surface = NONE - call collision(p) + select type(p) + type is (Particle_CE) + call collision(p) + end select ! 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_collision_tallies % size() > 0) call score_collision_tally(p) - if (active_analog_tallies % size() > 0) call score_analog_tally(p) + select type(p) + type is (Particle_CE) + if (active_collision_tallies % size() > 0) call score_collision_tally(p) + if (active_analog_tallies % size() > 0) call score_analog_tally(p) + end select ! Reset banked weight during collision p % n_bank = 0 From 6ab37ed3b4a3390a1a19ccc67cae0a71c1acdce5 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 30 Oct 2015 16:22:41 -0400 Subject: [PATCH 002/650] MG-ified the Bank Type. Not happy with the way this is done - adding group attrib to normal class - but the BIND(C) attribute is really not allowing me to do extended types. The other fix is to create a completely separate type for Bank_MG, which in the end I suspect will result in way to much duplicated code --- src/bank_header.F90 | 3 ++- src/particle_header.F90 | 8 +++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/bank_header.F90 b/src/bank_header.F90 index 0cb49af35d..ad829341f0 100644 --- a/src/bank_header.F90 +++ b/src/bank_header.F90 @@ -5,7 +5,7 @@ module bank_header implicit none !=============================================================================== -! BANK is used for storing fission sites in eigenvalue calculations. Since all +! BANK* is used for storing fission sites in eigenvalue calculations. Since all ! the state information of a neutron is not needed, this type allows sites to be ! stored with less memory !=============================================================================== @@ -15,6 +15,7 @@ module bank_header real(C_DOUBLE) :: xyz(3) ! location of bank particle real(C_DOUBLE) :: uvw(3) ! diretional cosines real(C_DOUBLE) :: E ! energy + integer(C_INT) :: g ! energy group integer(C_INT) :: delayed_group ! delayed group end type Bank diff --git a/src/particle_header.F90 b/src/particle_header.F90 index 6b4d38845a..40d7499015 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -250,9 +250,8 @@ contains this % coord(1) % uvw = src % uvw this % last_xyz = src % xyz this % last_uvw = src % uvw - !!! The following requires a MG version of Bank - this % g = src % E - this % last_g = src % E + this % g = src % g + this % last_g = src % g end subroutine initialize_from_source_mg @@ -300,8 +299,7 @@ contains this % secondary_bank(n) % wgt = this % wgt this % secondary_bank(n) % xyz(:) = this % coord(1) % xyz this % secondary_bank(n) % uvw(:) = uvw - !!! The following requires a MG version of Bank - this % secondary_bank(n) % E = this % g + this % secondary_bank(n) % g = this % g this % n_secondary = n end subroutine create_secondary_mg From a2d7bb96a6c86cd334c187c0f37f514650e770d7 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 30 Oct 2015 16:52:56 -0400 Subject: [PATCH 003/650] Able to read in materials.xml file including new macroscopic identifier --- src/global.F90 | 6 +- src/input_xml.F90 | 251 +++++++++++++++++++++++++++++++--------------- 2 files changed, 173 insertions(+), 84 deletions(-) diff --git a/src/global.F90 b/src/global.F90 index a4c80daa79..98c3a6ed66 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -59,7 +59,11 @@ module global integer :: n_lost_particles ! ============================================================================ - ! CROSS SECTION RELATED VARIABLES + ! ENERGY TREATMENT RELATED VARIABLES + logical :: run_CE = .true. ! Run in CE mode? + + ! ============================================================================ + ! CONTINUOUS-ENERGY CROSS SECTION RELATED VARIABLES ! Cross section arrays type(Nuclide), allocatable, target :: nuclides(:) ! Nuclide cross-sections diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 58e4013355..dda1b90837 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -121,6 +121,17 @@ contains end if end if + ! Find if a multi-group or continuous-energy simulation is desired + if (check_for_node(doc, "energy_mode")) then + call get_node_value(doc, "energy_mode", temp_str) + temp_str = trim(to_lower(temp_str)) + if (temp_str == "mg" .or. temp_str == "multi-group") then + run_CE = .false. + else if (temp_str == "ce" .or. temp_str == "continuous") then + run_CE = .true. + end if + end if + ! Set output directory if a path has been specified on the ! element if (check_for_node(doc, "output_path")) then @@ -1784,6 +1795,7 @@ contains type(Node), pointer :: node_sab => null() type(NodeList), pointer :: node_mat_list => null() type(NodeList), pointer :: node_nuc_list => null() + type(NodeList), pointer :: node_macro_list => null() type(NodeList), pointer :: node_ele_list => null() type(NodeList), pointer :: node_sab_list => null() @@ -1841,6 +1853,7 @@ contains ! Copy material name if (check_for_node(node_mat, "name")) then call get_node_value(node_mat, "name", mat % name) + mat % name = to_lower(mat % name) end if if (run_mode == MODE_PLOTTING) then @@ -1873,6 +1886,19 @@ contains sum_density = .true. + else if (units == 'macro') then + if (check_for_node(node_dens, "value")) then + ! Copy value + call get_node_value(node_dens, "value", val) + else + val = ONE + end if + + ! Set density + mat % density = val + + sum_density = .false. + else ! Copy value call get_node_value(node_dens, "value", val) @@ -1904,66 +1930,122 @@ contains ! READ AND PARSE TAGS ! Check to ensure material has at least one nuclide - if (.not. check_for_node(node_mat, "nuclide") .and. & - .not. check_for_node(node_mat, "element")) then - call fatal_error("No nuclides or natural elements specified on & - &material " // trim(to_str(mat % id))) + if ((.not. check_for_node(node_mat, "nuclide") .and. & + .not. check_for_node(node_mat, "element")) .and. & + (.not. check_for_node(node_mat, "macroscopic"))) then + call fatal_error("No macroscopic data, nuclides or natural elements & + &specified on material " // trim(to_str(mat % id))) end if + ! Create list of macroscopic x/s based on those specified, just treat + ! them as nuclides. This is all really a facade so the user thinks they + ! are entering in macroscopic data but the code treats them the same + ! as nuclides internally. ! Get pointer list of XML - call get_node_list(node_mat, "nuclide", node_nuc_list) + call get_node_list(node_mat, "macroscopic", node_macro_list) + if (get_list_size(node_macro_list) > 1) then + call fatal_error("Only one macroscopic data permitted per material, " & + &// trim(to_str(mat % id))) + else if (get_list_size(node_macro_list) == 1) then - ! Create list of nuclides based on those specified plus natural elements - INDIVIDUAL_NUCLIDES: do j = 1, get_list_size(node_nuc_list) - ! Combine nuclide identifier and cross section and copy into names - call get_list_item(node_nuc_list, j, node_nuc) + call get_list_item(node_macro_list, 1, node_nuc) ! Check for empty name on nuclide if (.not.check_for_node(node_nuc, "name")) then - call fatal_error("No name specified on nuclide in material " & + call fatal_error("No name specified on macroscopic data in material " & &// trim(to_str(mat % id))) end if ! Check for cross section if (.not.check_for_node(node_nuc, "xs")) then if (default_xs == '') then - call fatal_error("No cross section specified for nuclide in & - &material " // trim(to_str(mat % id))) + call fatal_error("No cross section specified for macroscopic data & + & in material " // trim(to_str(mat % id))) else - name = trim(default_xs) + name = to_lower(trim(default_xs)) end if end if ! store full name call get_node_value(node_nuc, "name", temp_str) if (check_for_node(node_nuc, "xs")) & - call get_node_value(node_nuc, "xs", name) + call get_node_value(node_nuc, "xs", name) name = trim(temp_str) // "." // trim(name) + name = to_lower(name) ! save name and density to list call list_names % append(name) ! Check if no atom/weight percents were specified or if both atom and ! weight percents were specified - if (.not.check_for_node(node_nuc, "ao") .and. & - .not.check_for_node(node_nuc, "wo")) then - call fatal_error("No atom or weight percent specified for nuclide " & - &// trim(name)) - elseif (check_for_node(node_nuc, "ao") .and. & - check_for_node(node_nuc, "wo")) then - call fatal_error("Cannot specify both atom and weight percents for a & - &nuclide: " // trim(name)) - end if - - ! Copy atom/weight percents - if (check_for_node(node_nuc, "ao")) then - call get_node_value(node_nuc, "ao", temp_dble) - call list_density % append(temp_dble) + if (units == 'macro') then + call list_density % append(ONE) else - call get_node_value(node_nuc, "wo", temp_dble) - call list_density % append(-temp_dble) + call fatal_error("Units can only be macro for macroscopic data " & + &// trim(name)) end if - end do INDIVIDUAL_NUCLIDES + else + + ! Get pointer list of XML + call get_node_list(node_mat, "nuclide", node_nuc_list) + + ! Create list of nuclides based on those specified plus natural elements + INDIVIDUAL_NUCLIDES: do j = 1, get_list_size(node_nuc_list) + ! Combine nuclide identifier and cross section and copy into names + call get_list_item(node_nuc_list, j, node_nuc) + + ! Check for empty name on nuclide + if (.not.check_for_node(node_nuc, "name")) then + call fatal_error("No name specified on nuclide in material " & + &// trim(to_str(mat % id))) + end if + + ! Check for cross section + if (.not.check_for_node(node_nuc, "xs")) then + if (default_xs == '') then + call fatal_error("No cross section specified for nuclide in & + &material " // trim(to_str(mat % id))) + else + name = to_lower(trim(default_xs)) + end if + end if + + ! store full name + call get_node_value(node_nuc, "name", temp_str) + if (check_for_node(node_nuc, "xs")) & + call get_node_value(node_nuc, "xs", name) + name = trim(temp_str) // "." // trim(name) + name = to_lower(name) + + ! save name and density to list + call list_names % append(name) + + ! Check if no atom/weight percents were specified or if both atom and + ! weight percents were specified + if (units == 'macro') then + call list_density % append(ONE) + else + if (.not.check_for_node(node_nuc, "ao") .and. & + .not.check_for_node(node_nuc, "wo")) then + call fatal_error("No atom or weight percent specified for nuclide " & + &// trim(name)) + elseif (check_for_node(node_nuc, "ao") .and. & + check_for_node(node_nuc, "wo")) then + call fatal_error("Cannot specify both atom and weight percents for a & + &nuclide: " // trim(name)) + end if + + ! Copy atom/weight percents + if (check_for_node(node_nuc, "ao")) then + call get_node_value(node_nuc, "ao", temp_dble) + call list_density % append(temp_dble) + else + call get_node_value(node_nuc, "wo", temp_dble) + call list_density % append(-temp_dble) + end if + end if + end do INDIVIDUAL_NUCLIDES + end if ! ======================================================================= ! READ AND PARSE TAGS @@ -1989,7 +2071,7 @@ contains call fatal_error("No cross section specified for nuclide in & &material " // trim(to_str(mat % id))) else - temp_str = trim(default_xs) + temp_str = to_lower(trim(default_xs)) end if end if @@ -2031,14 +2113,16 @@ contains name = trim(list_names % get_item(j)) if (.not. xs_listing_dict % has_key(to_lower(name))) then call fatal_error("Could not find nuclide " // trim(name) & - &// " in cross_sections.xml file!") + &// " in cross_sections data file!") end if - ! Check to make sure cross-section is continuous energy neutron table - n = len_trim(name) - if (name(n:n) /= 'c') then - call fatal_error("Cross-section table " // trim(name) & - &// " is not a continuous-energy neutron table.") + if (run_CE) then + ! Check to make sure cross-section is continuous energy neutron table + n = len_trim(name) + if (name(n:n) /= 'c') then + call fatal_error("Cross-section table " // trim(name) & + &// " is not a continuous-energy neutron table.") + end if end if ! Find xs_listing and set the name/alias according to the listing @@ -2080,59 +2164,60 @@ contains ! ======================================================================= ! READ AND PARSE TAG FOR S(a,b) DATA + if (run_CE) then + ! Get pointer list to XML + call get_node_list(node_mat, "sab", node_sab_list) - ! Get pointer list to XML - call get_node_list(node_mat, "sab", node_sab_list) + n_sab = get_list_size(node_sab_list) + if (n_sab > 0) then + ! Set number of S(a,b) tables + mat % n_sab = n_sab - n_sab = get_list_size(node_sab_list) - if (n_sab > 0) then - ! Set number of S(a,b) tables - mat % n_sab = n_sab + ! Allocate names and indices for nuclides and tables + allocate(mat % sab_names(n_sab)) + allocate(mat % i_sab_nuclides(n_sab)) + allocate(mat % i_sab_tables(n_sab)) - ! Allocate names and indices for nuclides and tables - allocate(mat % sab_names(n_sab)) - allocate(mat % i_sab_nuclides(n_sab)) - allocate(mat % i_sab_tables(n_sab)) + ! Initialize i_sab_nuclides + mat % i_sab_nuclides = NONE - ! Initialize i_sab_nuclides - mat % i_sab_nuclides = NONE + do j = 1, n_sab + ! Get pointer to S(a,b) table + call get_list_item(node_sab_list, j, node_sab) - do j = 1, n_sab - ! Get pointer to S(a,b) table - call get_list_item(node_sab_list, j, node_sab) + ! Determine name of S(a,b) table + if (.not.check_for_node(node_sab, "name") .or. & + .not.check_for_node(node_sab, "xs")) then + call fatal_error("Need to specify and for S(a,b) & + &table.") + end if + call get_node_value(node_sab, "name", name) + call get_node_value(node_sab, "xs", temp_str) + name = trim(name) // "." // trim(temp_str) + mat % sab_names(j) = name - ! Determine name of S(a,b) table - if (.not.check_for_node(node_sab, "name") .or. & - .not.check_for_node(node_sab, "xs")) then - call fatal_error("Need to specify and for S(a,b) & - &table.") - end if - call get_node_value(node_sab, "name", name) - call get_node_value(node_sab, "xs", temp_str) - name = trim(name) // "." // trim(temp_str) - mat % sab_names(j) = name + ! Check that this nuclide is listed in the cross_sections.xml file + if (.not. xs_listing_dict % has_key(to_lower(name))) then + call fatal_error("Could not find S(a,b) table " // trim(name) & + &// " in cross_sections.xml file!") + end if - ! Check that this nuclide is listed in the cross_sections.xml file - if (.not. xs_listing_dict % has_key(to_lower(name))) then - call fatal_error("Could not find S(a,b) table " // trim(name) & - &// " in cross_sections.xml file!") - end if + ! Find index in xs_listing and set the name and alias according to the + ! listing + index_list = xs_listing_dict % get_key(to_lower(name)) + name = xs_listings(index_list) % name - ! Find index in xs_listing and set the name and alias according to the - ! listing - index_list = xs_listing_dict % get_key(to_lower(name)) - name = xs_listings(index_list) % name - - ! If this S(a,b) table hasn't been encountered yet, we need to add its - ! name and alias to the sab_dict - if (.not. sab_dict % has_key(to_lower(name))) then - index_sab = index_sab + 1 - mat % i_sab_tables(j) = index_sab - call sab_dict % add_key(to_lower(name), index_sab) - else - mat % i_sab_tables(j) = sab_dict % get_key(to_lower(name)) - end if - end do + ! If this S(a,b) table hasn't been encountered yet, we need to add its + ! name and alias to the sab_dict + if (.not. sab_dict % has_key(to_lower(name))) then + index_sab = index_sab + 1 + mat % i_sab_tables(j) = index_sab + call sab_dict % add_key(to_lower(name), index_sab) + else + mat % i_sab_tables(j) = sab_dict % get_key(to_lower(name)) + end if + end do + end if end if ! Add material to dictionary From 8ec4c917817f18a9683a2c068a599bd9ce8497d9 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 30 Oct 2015 20:25:32 -0400 Subject: [PATCH 004/650] Worked on the old ace_header and split it up into nuclide and sab_header to make more sense when the MGXS version of nuclide gets put in' --- src/ace.F90 | 23 ++-- src/ace_header.F90 | 263 ----------------------------------------- src/cross_section.F90 | 18 +-- src/energy_grid.F90 | 6 +- src/fission.F90 | 28 ++--- src/global.F90 | 6 +- src/nuclide_header.F90 | 248 ++++++++++++++++++++++++++++++++++++++ src/output.F90 | 10 +- src/physics.F90 | 21 ++-- src/sab_header.F90 | 62 ++++++++++ src/summary.F90 | 3 +- src/tally.F90 | 2 +- 12 files changed, 372 insertions(+), 318 deletions(-) create mode 100644 src/nuclide_header.F90 create mode 100644 src/sab_header.F90 diff --git a/src/ace.F90 b/src/ace.F90 index 22fcc6b3d5..a93f722958 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -1,7 +1,6 @@ module ace - use ace_header, only: Nuclide, Reaction, SAlphaBeta, XsListing, & - DistEnergy + use ace_header, only: Reaction, DistEnergy use constants use endf, only: reaction_name, is_fission, is_disappearance use error, only: fatal_error, warning @@ -9,7 +8,9 @@ module ace use global use list_header, only: ListInt use material_header, only: Material + use nuclide_header use output, only: write_message + use sab_header, only: SAlphaBeta use set_header, only: SetChar use string, only: to_str, to_lower @@ -46,7 +47,7 @@ contains character(12) :: name ! name of isotope, e.g. 92235.03c character(12) :: alias ! alias of nuclide, e.g. U-235.03c type(Material), pointer :: mat => null() - type(Nuclide), pointer :: nuc => null() + type(Nuclide_CE), pointer :: nuc => null() type(SAlphaBeta), pointer :: sab => null() type(SetChar) :: already_read @@ -258,7 +259,7 @@ contains character(10) :: mat ! material identifier character(70) :: comment ! comment for ACE table character(MAX_FILE_LEN) :: filename ! path to ACE cross section library - type(Nuclide), pointer :: nuc => null() + type(Nuclide_CE), pointer :: nuc => null() type(SAlphaBeta), pointer :: sab => null() type(XsListing), pointer :: listing => null() @@ -418,7 +419,7 @@ contains subroutine read_esz(nuc, data_0K) - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc logical :: data_0K ! are we reading 0K data? @@ -508,7 +509,7 @@ contains subroutine read_nu_data(nuc) - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc integer :: i ! loop index integer :: JXS2 ! location for fission nu data @@ -708,7 +709,7 @@ contains subroutine read_reactions(nuc) - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc integer :: i ! loop indices integer :: i_fission ! index in nuc % index_fission @@ -891,7 +892,7 @@ contains subroutine read_angular_dist(nuc) - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc integer :: JXS8 ! location of angular distribution locators integer :: JXS9 ! location of angular distributions @@ -986,7 +987,7 @@ contains subroutine read_energy_dist(nuc) - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc integer :: LED ! location of energy distribution locators integer :: LOCC ! location of energy distributions for given MT @@ -1302,7 +1303,7 @@ contains subroutine read_unr_res(nuc) - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc integer :: JXS23 ! location of URR data integer :: lc ! locator @@ -1391,7 +1392,7 @@ contains subroutine generate_nu_fission(nuc) - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc integer :: i ! index on nuclide energy grid real(8) :: E ! energy diff --git a/src/ace_header.F90 b/src/ace_header.F90 index 467887c193..1fb444b1ae 100644 --- a/src/ace_header.F90 +++ b/src/ace_header.F90 @@ -85,212 +85,6 @@ module ace_header procedure :: clear => urrdata_clear ! Deallocates UrrData end type UrrData -!=============================================================================== -! NUCLIDE contains all the data for an ACE-format continuous-energy cross -! section. The ACE format (A Compact ENDF format) is used in MCNP and several -! other Monte Carlo codes. -!=============================================================================== - - type Nuclide - character(10) :: name ! name of nuclide, e.g. 92235.03c - integer :: zaid ! Z and A identifier, e.g. 92235 - integer :: listing ! index in xs_listings - real(8) :: awr ! weight of nucleus in neutron masses - real(8) :: kT ! temperature in MeV (k*T) - - ! Linked list of indices in nuclides array of instances of this same nuclide - type(ListInt) :: nuc_list - - ! Energy grid information - integer :: n_grid ! # of nuclide grid points - integer, allocatable :: grid_index(:) ! log grid mapping indices - real(8), allocatable :: energy(:) ! energy values corresponding to xs - - ! Microscopic cross sections - real(8), allocatable :: total(:) ! total cross section - real(8), allocatable :: elastic(:) ! elastic scattering - real(8), allocatable :: fission(:) ! fission - real(8), allocatable :: nu_fission(:) ! neutron production - real(8), allocatable :: absorption(:) ! absorption (MT > 100) - real(8), allocatable :: heating(:) ! heating - - ! Resonance scattering info - logical :: resonant = .false. ! resonant scatterer? - character(10) :: name_0K = '' ! name of 0K nuclide, e.g. 92235.00c - character(16) :: scheme ! target velocity sampling scheme - integer :: n_grid_0K ! number of 0K energy grid points - real(8), allocatable :: energy_0K(:) ! energy grid for 0K xs - real(8), allocatable :: elastic_0K(:) ! Microscopic elastic cross section - real(8), allocatable :: xs_cdf(:) ! CDF of v_rel times cross section - real(8) :: E_min ! lower cutoff energy for res scattering - real(8) :: E_max ! upper cutoff energy for res scattering - - ! Fission information - logical :: fissionable ! nuclide is fissionable? - logical :: has_partial_fission ! nuclide has partial fission reactions? - integer :: n_fission ! # of fission reactions - integer, allocatable :: index_fission(:) ! indices in reactions - - ! Total fission neutron emission - integer :: nu_t_type - real(8), allocatable :: nu_t_data(:) - - ! Prompt fission neutron emission - integer :: nu_p_type - real(8), allocatable :: nu_p_data(:) - - ! Delayed fission neutron emission - integer :: nu_d_type - integer :: n_precursor ! # of delayed neutron precursors - real(8), allocatable :: nu_d_data(:) - real(8), allocatable :: nu_d_precursor_data(:) - type(DistEnergy), pointer :: nu_d_edist(:) => null() - - ! Unresolved resonance data - logical :: urr_present - integer :: urr_inelastic - type(UrrData), pointer :: urr_data => null() - - ! Reactions - integer :: n_reaction ! # of reactions - type(Reaction), pointer :: reactions(:) => null() - - ! Type-Bound procedures - contains - procedure :: clear => nuclide_clear ! Deallocates Nuclide - end type Nuclide - -!=============================================================================== -! NUCLIDE0K temporarily contains all 0K cross section data and other parameters -! needed to treat resonance scattering before transferring them to NUCLIDE -!=============================================================================== - - type Nuclide0K - - character(10) :: nuclide ! name of nuclide, e.g. U-238 - character(16) :: scheme = 'ares' ! target velocity sampling scheme - character(10) :: name ! name of nuclide, e.g. 92235.03c - character(10) :: name_0K ! name of 0K nuclide, e.g. 92235.00c - real(8) :: E_min = 0.01e-6_8 ! lower cutoff energy for res scattering - real(8) :: E_max = 1000.0e-6_8 ! upper cutoff energy for res scattering - - end type Nuclide0K - -!=============================================================================== -! DISTENERGYSAB contains the secondary energy/angle distributions for inelastic -! thermal scattering collisions which utilize a continuous secondary energy -! representation. -!=============================================================================== - - type DistEnergySab - integer :: n_e_out - real(8), allocatable :: e_out(:) - real(8), allocatable :: e_out_pdf(:) - real(8), allocatable :: e_out_cdf(:) - real(8), allocatable :: mu(:,:) - end type DistEnergySab - -!=============================================================================== -! SALPHABETA contains S(a,b) data for thermal neutron scattering, typically off -! of light isotopes such as water, graphite, Be, etc -!=============================================================================== - - type SAlphaBeta - character(10) :: name ! name of table, e.g. lwtr.10t - real(8) :: awr ! weight of nucleus in neutron masses - real(8) :: kT ! temperature in MeV (k*T) - integer :: n_zaid ! Number of valid zaids - integer, allocatable :: zaid(:) ! List of valid Z and A identifiers, e.g. 6012 - - ! threshold for S(a,b) treatment (usually ~4 eV) - real(8) :: threshold_inelastic - real(8) :: threshold_elastic = ZERO - - ! Inelastic scattering data - integer :: n_inelastic_e_in ! # of incoming E for inelastic - integer :: n_inelastic_e_out ! # of outgoing E for inelastic - integer :: n_inelastic_mu ! # of outgoing angles for inelastic - integer :: secondary_mode ! secondary mode (equal/skewed/continuous) - real(8), allocatable :: inelastic_e_in(:) - real(8), allocatable :: inelastic_sigma(:) - ! The following are used only if secondary_mode is 0 or 1 - real(8), allocatable :: inelastic_e_out(:,:) - real(8), allocatable :: inelastic_mu(:,:,:) - ! The following is used only if secondary_mode is 3 - ! The different implementation is necessary because the continuous - ! representation has a variable number of outgoing energy points for each - ! incoming energy - type(DistEnergySab), allocatable :: inelastic_data(:) ! One for each Ein - - ! Elastic scattering data - integer :: elastic_mode ! elastic mode (discrete/exact) - integer :: n_elastic_e_in ! # of incoming E for elastic - integer :: n_elastic_mu ! # of outgoing angles for elastic - real(8), allocatable :: elastic_e_in(:) - real(8), allocatable :: elastic_P(:) - real(8), allocatable :: elastic_mu(:,:) - end type SAlphaBeta - -!=============================================================================== -! XSLISTING contains data read from a cross_sections.xml file -!=============================================================================== - - type XsListing - character(12) :: name ! table name, e.g. 92235.70c - character(12) :: alias ! table alias, e.g. U-235.70c - integer :: type ! type of table (cont-E neutron, S(A,b), etc) - integer :: zaid ! ZAID identifier = 1000*Z + A - integer :: filetype ! ASCII or BINARY - integer :: location ! location of table within library - integer :: recl ! record length for library - integer :: entries ! number of entries per record - real(8) :: awr ! atomic weight ratio (# of neutron masses) - real(8) :: kT ! Boltzmann constant * temperature (MeV) - logical :: metastable ! is this nuclide metastable? - character(MAX_FILE_LEN) :: path ! path to library containing table - end type XsListing - -!=============================================================================== -! NUCLIDEMICROXS contains cached microscopic cross sections for a -! particular nuclide at the current energy -!=============================================================================== - - type NuclideMicroXS - integer :: index_grid ! index on nuclide energy grid - integer :: index_temp ! temperature index for nuclide - real(8) :: last_E = ZERO ! last evaluated energy - real(8) :: interp_factor ! interpolation factor on nuc. energy grid - real(8) :: total ! microscropic total xs - real(8) :: elastic ! microscopic elastic scattering xs - real(8) :: absorption ! microscopic absorption xs - real(8) :: fission ! microscopic fission xs - real(8) :: nu_fission ! microscopic production xs - real(8) :: kappa_fission ! microscopic energy-released from fission - - ! Information for S(a,b) use - integer :: index_sab ! index in sab_tables (zero means no table) - integer :: last_index_sab = 0 ! index in sab_tables last used by this nuclide - real(8) :: elastic_sab ! microscopic elastic scattering on S(a,b) table - - ! Information for URR probability table use - logical :: use_ptable ! in URR range with probability tables? - real(8) :: last_prn - end type NuclideMicroXS - -!=============================================================================== -! MATERIALMACROXS contains cached macroscopic cross sections for the material a -! particle is traveling through -!=============================================================================== - - type MaterialMacroXS - real(8) :: total ! macroscopic total xs - real(8) :: elastic ! macroscopic elastic scattering xs - real(8) :: absorption ! macroscopic absorption xs - real(8) :: fission ! macroscopic fission xs - real(8) :: nu_fission ! macroscopic production xs - real(8) :: kappa_fission ! macroscopic energy-released from fission - end type MaterialMacroXS - contains !=============================================================================== @@ -362,62 +156,5 @@ module ace_header end subroutine urrdata_clear -!=============================================================================== -! NUCLIDE_CLEAR resets and deallocates data in Nuclide. -!=============================================================================== - - subroutine nuclide_clear(this) - - class(Nuclide), intent(inout) :: this ! The Nuclide object to clear - - integer :: i ! Loop counter - - if (allocated(this % energy)) & - deallocate(this % energy, this % total, this % elastic, & - & this % fission, this % nu_fission, this % absorption) - - if (allocated(this % energy_0K)) & - deallocate(this % energy_0K) - - if (allocated(this % elastic_0K)) & - deallocate(this % elastic_0K) - - if (allocated(this % xs_cdf)) & - deallocate(this % xs_cdf) - - if (allocated(this % heating)) & - deallocate(this % heating) - - if (allocated(this % index_fission)) deallocate(this % index_fission) - - if (allocated(this % nu_t_data)) deallocate(this % nu_t_data) - if (allocated(this % nu_p_data)) deallocate(this % nu_p_data) - if (allocated(this % nu_d_data)) deallocate(this % nu_d_data) - - if (allocated(this % nu_d_precursor_data)) & - deallocate(this % nu_d_precursor_data) - - if (associated(this % nu_d_edist)) then - do i = 1, size(this % nu_d_edist) - call this % nu_d_edist(i) % clear() - end do - deallocate(this % nu_d_edist) - end if - - if (associated(this % urr_data)) then - call this % urr_data % clear() - deallocate(this % urr_data) - end if - - if (associated(this % reactions)) then - do i = 1, size(this % reactions) - call this % reactions(i) % clear() - end do - deallocate(this % reactions) - end if - - call this % nuc_list % clear() - - end subroutine nuclide_clear end module ace_header diff --git a/src/cross_section.F90 b/src/cross_section.F90 index 1586912a96..4e75970733 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -1,6 +1,6 @@ module cross_section - use ace_header, only: Nuclide, SAlphaBeta, Reaction, UrrData + use ace_header, only: Reaction, UrrData use constants use energy_grid, only: grid_method, log_spacing use error, only: fatal_error @@ -8,8 +8,10 @@ module cross_section use global use list_header, only: ListElemInt use material_header, only: Material + use nuclide_header use particle_header, only: Particle_Base, Particle_CE, Particle_MG use random_lcg, only: prn + use sab_header, only: SAlphaBeta use search, only: binary_search implicit none @@ -154,7 +156,7 @@ contains integer :: i_high ! upper logarithmic mapping index real(8), intent(in) :: E ! energy real(8) :: f ! interp factor on nuclide energy grid - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc type(Material), pointer :: mat ! Set pointer to nuclide and material @@ -381,7 +383,7 @@ contains real(8) :: inelastic ! inelastic cross section logical :: same_nuc ! do we know the xs for this nuclide at this energy? type(UrrData), pointer :: urr - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc type(Reaction), pointer :: rxn micro_xs(i_nuclide) % use_ptable = .true. @@ -553,11 +555,11 @@ contains function elastic_xs_0K(E, nuc) result(xs_out) - type(Nuclide), pointer :: nuc ! target nuclide at temperature - integer :: i_grid ! index on nuclide energy grid - real(8) :: f ! interp factor on nuclide energy grid - real(8), intent(inout) :: E ! trial energy - real(8) :: xs_out ! 0K xs at trial energy + type(Nuclide_CE), pointer :: nuc ! target nuclide at temperature + integer :: i_grid ! index on nuclide energy grid + real(8) :: f ! interp factor on nuclide energy grid + real(8), intent(inout) :: E ! trial energy + real(8) :: xs_out ! 0K xs at trial energy ! Determine index on nuclide energy grid if (E < nuc % energy_0K(1)) then diff --git a/src/energy_grid.F90 b/src/energy_grid.F90 index 66419f83cc..fa56b04956 100644 --- a/src/energy_grid.F90 +++ b/src/energy_grid.F90 @@ -27,7 +27,7 @@ contains integer :: i ! index in nuclides array integer :: j ! index in materials array type(ListReal) :: list - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc type(Material), pointer :: mat call write_message("Creating unionized energy grid...", 5) @@ -70,7 +70,7 @@ contains real(8) :: E_max ! Maximum energy in MeV real(8) :: E_min ! Minimum energy in MeV real(8), allocatable :: umesh(:) ! Equally log-spaced energy grid - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc ! Set minimum/maximum energies E_max = energy_max_neutron @@ -179,7 +179,7 @@ contains integer :: index_e ! index on union energy grid real(8) :: union_energy ! energy on union grid real(8) :: energy ! energy on nuclide grid - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc type(Material), pointer :: mat do k = 1, n_materials diff --git a/src/fission.F90 b/src/fission.F90 index 7b2911997b..5669080b75 100644 --- a/src/fission.F90 +++ b/src/fission.F90 @@ -1,10 +1,10 @@ module fission - use ace_header, only: Nuclide + use nuclide_header, only: Nuclide_CE use constants - use error, only: fatal_error - use interpolation, only: interpolate_tab1 - use search, only: binary_search + use error, only: fatal_error + use interpolation, only: interpolate_tab1 + use search, only: binary_search implicit none @@ -17,9 +17,9 @@ contains function nu_total(nuc, E) result(nu) - type(Nuclide), pointer :: nuc ! nuclide from which to find nu - real(8), intent(in) :: E ! energy of incoming neutron - real(8) :: nu ! number of total neutrons emitted per fission + type(Nuclide_CE), pointer :: nuc ! nuclide from which to find nu + real(8), intent(in) :: E ! energy of incoming neutron + real(8) :: nu ! number of total neutrons emitted per fission integer :: i ! loop index integer :: NC ! number of polynomial coefficients @@ -51,9 +51,9 @@ contains function nu_prompt(nuc, E) result(nu) - type(Nuclide), pointer :: nuc ! nuclide from which to find nu - real(8), intent(in) :: E ! energy of incoming neutron - real(8) :: nu ! number of prompt neutrons emitted per fission + type(Nuclide_CE), pointer :: nuc ! nuclide from which to find nu + real(8), intent(in) :: E ! energy of incoming neutron + real(8) :: nu ! number of prompt neutrons emitted per fission integer :: i ! loop index integer :: NC ! number of polynomial coefficients @@ -89,9 +89,9 @@ contains function nu_delayed(nuc, E) result(nu) - type(Nuclide), intent(in) :: nuc ! nuclide from which to find nu - real(8), intent(in) :: E ! energy of incoming neutron - real(8) :: nu ! number of delayed neutrons emitted per fission + type(Nuclide_CE) :: nuc ! nuclide from which to find nu + real(8), intent(in) :: E ! energy of incoming neutron + real(8) :: nu ! number of delayed neutrons emitted per fission if (nuc % nu_d_type == NU_NONE) then ! since no prompt or delayed data is present, this means all neutron @@ -113,7 +113,7 @@ contains function yield_delayed(nuc, E, g) result(yield) - type(Nuclide), intent(in) :: nuc ! nuclide from which to find nu + type(Nuclide_CE), pointer :: nuc ! nuclide from which to find nu real(8), intent(in) :: E ! energy of incoming neutron real(8) :: yield ! delayed neutron precursor yield integer, intent(in) :: g ! the delayed neutron precursor group diff --git a/src/global.F90 b/src/global.F90 index 98c3a6ed66..6ac5be3423 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -1,7 +1,5 @@ module global - use ace_header, only: Nuclide, SAlphaBeta, xsListing, NuclideMicroXS, & - MaterialMacroXS, Nuclide0K use bank_header, only: Bank use cmfd_header use constants @@ -9,7 +7,9 @@ module global use geometry_header, only: Cell, Universe, Lattice, LatticeContainer use material_header, only: Material use mesh_header, only: RegularMesh + use nuclide_header use plot_header, only: ObjectPlot + use sab_header, only: SAlphaBeta use set_header, only: SetInt use surface_header, only: SurfaceContainer use source_header, only: ExtSource @@ -66,7 +66,7 @@ module global ! CONTINUOUS-ENERGY CROSS SECTION RELATED VARIABLES ! Cross section arrays - type(Nuclide), allocatable, target :: nuclides(:) ! Nuclide cross-sections + type(Nuclide_CE), allocatable, target :: nuclides(:) ! Nuclide cross-sections type(SAlphaBeta), allocatable, target :: sab_tables(:) ! S(a,b) tables type(XsListing), allocatable, target :: xs_listings(:) ! cross_sections.xml listings diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 new file mode 100644 index 0000000000..47baf96e37 --- /dev/null +++ b/src/nuclide_header.F90 @@ -0,0 +1,248 @@ +module nuclide_header + + use ace_header + use constants + use list_header, only: ListInt + ! use math, only: calc_pn, calc_rn!, expand_harmonic + !use scattdata_header + ! use xml_interface + + implicit none + +!=============================================================================== +! NUCLIDE_BASE contains the base nuclidic data for a nuclide, which does not depend +! upon how the nuclear data is represented (i.e., CE, or any variant of MG). +! The extended types, Nuclide_CE and Nuclide_MG deal with the rest +!=============================================================================== + + type, abstract :: Nuclide_Base + character(12) :: name ! name of nuclide, e.g. 92235.03c + integer :: zaid ! Z and A identifier, e.g. 92235 + real(8) :: awr ! Atomic Weight Ratio + integer :: listing ! index in xs_listings + real(8) :: kT ! temperature in MeV (k*T) + + ! Linked list of indices in nuclides array of instances of this same nuclide + type(ListInt) :: nuc_list + + ! Fission information + logical :: fissionable ! nuclide is fissionable? + + contains + procedure(nuclide_base_clear_), deferred, pass :: clear ! Deallocates Nuclide + end type Nuclide_Base + + type, extends(Nuclide_Base) :: Nuclide_CE + ! Energy grid information + integer :: n_grid ! # of nuclide grid points + integer, allocatable :: grid_index(:) ! log grid mapping indices + real(8), allocatable :: energy(:) ! energy values corresponding to xs + + ! Microscopic cross sections + real(8), allocatable :: total(:) ! total cross section + real(8), allocatable :: elastic(:) ! elastic scattering + real(8), allocatable :: fission(:) ! fission + real(8), allocatable :: nu_fission(:) ! neutron production + real(8), allocatable :: absorption(:) ! absorption (MT > 100) + real(8), allocatable :: heating(:) ! heating + + ! Resonance scattering info + logical :: resonant = .false. ! resonant scatterer? + character(10) :: name_0K = '' ! name of 0K nuclide, e.g. 92235.00c + character(16) :: scheme ! target velocity sampling scheme + integer :: n_grid_0K ! number of 0K energy grid points + real(8), allocatable :: energy_0K(:) ! energy grid for 0K xs + real(8), allocatable :: elastic_0K(:) ! Microscopic elastic cross section + real(8), allocatable :: xs_cdf(:) ! CDF of v_rel times cross section + real(8) :: E_min ! lower cutoff energy for res scattering + real(8) :: E_max ! upper cutoff energy for res scattering + + ! Fission information + logical :: has_partial_fission ! nuclide has partial fission reactions? + integer :: n_fission ! # of fission reactions + integer, allocatable :: index_fission(:) ! indices in reactions + + ! Total fission neutron emission + integer :: nu_t_type + real(8), allocatable :: nu_t_data(:) + + ! Prompt fission neutron emission + integer :: nu_p_type + real(8), allocatable :: nu_p_data(:) + + ! Delayed fission neutron emission + integer :: nu_d_type + integer :: n_precursor ! # of delayed neutron precursors + real(8), allocatable :: nu_d_data(:) + real(8), allocatable :: nu_d_precursor_data(:) + type(DistEnergy), pointer :: nu_d_edist(:) => null() + + ! Unresolved resonance data + logical :: urr_present + integer :: urr_inelastic + type(UrrData), pointer :: urr_data => null() + + ! Reactions + integer :: n_reaction ! # of reactions + type(Reaction), pointer :: reactions(:) => null() + + ! Type-Bound procedures + contains + procedure, pass :: clear => nuclide_ce_clear + end type Nuclide_CE + +!=============================================================================== +! NUCLIDECONTAINER pointer array for storing Nuclides +!=============================================================================== + + type NuclideContainer + class(Nuclide_Base), pointer :: obj + end type NuclideContainer + +!=============================================================================== +! NUCLIDE0K temporarily contains all 0K cross section data and other parameters +! needed to treat resonance scattering before transferring them to NUCLIDE_CE +!=============================================================================== + + type Nuclide0K + + character(10) :: nuclide ! name of nuclide, e.g. U-238 + character(16) :: scheme = 'ares' ! target velocity sampling scheme + character(10) :: name ! name of nuclide, e.g. 92235.03c + character(10) :: name_0K ! name of 0K nuclide, e.g. 92235.00c + real(8) :: E_min = 0.01e-6_8 ! lower cutoff energy for res scattering + real(8) :: E_max = 1000.0e-6_8 ! upper cutoff energy for res scattering + + end type Nuclide0K + +!=============================================================================== +! NUCLIDEMICROXS contains cached microscopic cross sections for a +! particular nuclide at the current energy +!=============================================================================== + + type NuclideMicroXS + integer :: index_grid ! index on nuclide energy grid + integer :: index_temp ! temperature index for nuclide + real(8) :: last_E = ZERO ! last evaluated energy + real(8) :: interp_factor ! interpolation factor on nuc. energy grid + real(8) :: total ! microscropic total xs + real(8) :: elastic ! microscopic elastic scattering xs + real(8) :: absorption ! microscopic absorption xs + real(8) :: fission ! microscopic fission xs + real(8) :: nu_fission ! microscopic production xs + real(8) :: kappa_fission ! microscopic energy-released from fission + + ! Information for S(a,b) use + integer :: index_sab ! index in sab_tables (zero means no table) + integer :: last_index_sab = 0 ! index in sab_tables last used by this nuclide + real(8) :: elastic_sab ! microscopic elastic scattering on S(a,b) table + + ! Information for URR probability table use + logical :: use_ptable ! in URR range with probability tables? + real(8) :: last_prn + end type NuclideMicroXS + +!=============================================================================== +! MATERIALMACROXS contains cached macroscopic cross sections for the material a +! particle is traveling through +!=============================================================================== + + type MaterialMacroXS + real(8) :: total ! macroscopic total xs + real(8) :: elastic ! macroscopic elastic scattering xs + real(8) :: absorption ! macroscopic absorption xs + real(8) :: fission ! macroscopic fission xs + real(8) :: nu_fission ! macroscopic production xs + real(8) :: kappa_fission ! macroscopic energy-released from fission + end type MaterialMacroXS + +!=============================================================================== +! XSLISTING contains data read from a CE or MG cross_sections.xml file +! (or equivalent) +!=============================================================================== + + type XsListing + character(12) :: name ! table name, e.g. 92235.70c + character(12) :: alias ! table alias, e.g. U-235.70c + integer :: type ! type of table (cont-E neutron, S(A,b), etc) + integer :: zaid ! ZAID identifier = 1000*Z + A + integer :: filetype ! ASCII or BINARY + integer :: location ! location of table within library + integer :: recl ! record length for library + integer :: entries ! number of entries per record + real(8) :: awr ! atomic weight ratio (# of neutron masses) + real(8) :: kT ! Boltzmann constant * temperature (MeV) + logical :: metastable ! is this nuclide metastable? + character(MAX_FILE_LEN) :: path ! path to library containing table + end type XsListing + + contains + + +!=============================================================================== +! NUCLIDE_*_CLEAR resets and deallocates data in Nuclide_Base, Nuclide_Iso +! or Nuclide_Angle +!=============================================================================== + + subroutine nuclide_base_clear_(this) + + class(Nuclide_Base), intent(inout) :: this + + call this % nuc_list % clear() + end subroutine nuclide_base_clear_ + + subroutine nuclide_ce_clear(this) + + class(Nuclide_CE), intent(inout) :: this ! The Nuclide object to clear + + integer :: i ! Loop counter + + if (allocated(this % energy)) & + deallocate(this % energy, this % total, this % elastic, & + & this % fission, this % nu_fission, this % absorption) + + if (allocated(this % energy_0K)) & + deallocate(this % energy_0K) + + if (allocated(this % elastic_0K)) & + deallocate(this % elastic_0K) + + if (allocated(this % xs_cdf)) & + deallocate(this % xs_cdf) + + if (allocated(this % heating)) & + deallocate(this % heating) + + if (allocated(this % index_fission)) deallocate(this % index_fission) + + if (allocated(this % nu_t_data)) deallocate(this % nu_t_data) + if (allocated(this % nu_p_data)) deallocate(this % nu_p_data) + if (allocated(this % nu_d_data)) deallocate(this % nu_d_data) + + if (allocated(this % nu_d_precursor_data)) & + deallocate(this % nu_d_precursor_data) + + if (associated(this % nu_d_edist)) then + do i = 1, size(this % nu_d_edist) + call this % nu_d_edist(i) % clear() + end do + deallocate(this % nu_d_edist) + end if + + if (associated(this % urr_data)) then + call this % urr_data % clear() + deallocate(this % urr_data) + end if + + if (associated(this % reactions)) then + do i = 1, size(this % reactions) + call this % reactions(i) % clear() + end do + deallocate(this % reactions) + end if + + call nuclide_base_clear_(this) + + end subroutine nuclide_ce_clear + + end module nuclide_header \ No newline at end of file diff --git a/src/output.F90 b/src/output.F90 index 5bb90343c4..f933a2eb87 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -2,7 +2,7 @@ module output use, intrinsic :: ISO_FORTRAN_ENV - use ace_header, only: Nuclide, Reaction, UrrData + use ace_header, only: Reaction, UrrData use constants use endf, only: reaction_name use error, only: fatal_error, warning @@ -12,8 +12,10 @@ module output use math, only: t_percentile use mesh_header, only: RegularMesh use mesh, only: mesh_indices_to_bin, bin_to_mesh_indices + use nuclide_header use particle_header, only: LocalCoord, Particle_Base, Particle_CE, Particle_MG use plot_header + use sab_header, only: SAlphaBeta use string, only: to_upper, to_str use tally_header, only: TallyObject @@ -326,7 +328,7 @@ contains subroutine print_nuclide(nuc, unit) - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc integer, optional :: unit integer :: i ! loop index over nuclides @@ -531,8 +533,8 @@ contains integer :: i ! loop index integer :: unit_xs ! cross_sections.out file unit character(MAX_FILE_LEN) :: path ! path of summary file - type(Nuclide), pointer :: nuc => null() - type(SAlphaBeta), pointer :: sab => null() + type(Nuclide_CE), pointer :: nuc => null() + type(SAlphaBeta), pointer :: sab => null() ! Create filename for log file path = trim(path_output) // "cross_sections.out" diff --git a/src/physics.F90 b/src/physics.F90 index aae7027bae..b298fde9ce 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -1,6 +1,6 @@ module physics - use ace_header, only: Nuclide, Reaction, DistEnergy + use ace_header, only: Reaction, DistEnergy use constants use cross_section, only: elastic_xs_0K use endf, only: reaction_name @@ -11,6 +11,7 @@ module physics use material_header, only: Material use math, only: maxwell_spectrum, watt_spectrum use mesh, only: get_mesh_indices + use nuclide_header use output, only: write_message use particle_header, only: Particle_Base, Particle_CE, Particle_MG use particle_restart_write, only: write_particle_restart @@ -74,7 +75,7 @@ contains integer :: i_nuclide ! index in nuclides array integer :: i_reaction ! index in nuc % reactions array - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc i_nuclide = sample_nuclide(p, 'total ') @@ -193,7 +194,7 @@ contains real(8) :: f real(8) :: prob real(8) :: cutoff - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc type(Reaction), pointer :: rxn ! Get pointer to nuclide @@ -310,7 +311,7 @@ contains real(8) :: f real(8) :: prob real(8) :: cutoff - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc type(Reaction), pointer :: rxn ! Get pointer to nuclide and grid index/interpolation factor @@ -413,7 +414,7 @@ contains real(8) :: v_cm(3) ! velocity of center-of-mass real(8) :: v_t(3) ! velocity of target nucleus real(8) :: uvw_cm(3) ! directional cosines in center-of-mass - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc ! get pointer to nuclide nuc => nuclides(i_nuclide) @@ -738,7 +739,7 @@ contains subroutine sample_target_velocity(nuc, v_target, E, uvw, v_neut, wgt, xs_eff) - type(Nuclide), pointer :: nuc ! target nuclide at temperature T + type(Nuclide_CE), pointer :: nuc ! target nuclide at temperature T real(8), intent(out) :: v_target(3) ! target velocity real(8), intent(in) :: v_neut(3) ! neutron velocity @@ -985,7 +986,7 @@ contains subroutine sample_cxs_target_velocity(nuc, v_target, E, uvw) - type(Nuclide), pointer :: nuc ! target nuclide at temperature + type(Nuclide_CE), pointer :: nuc ! target nuclide at temperature real(8), intent(out) :: v_target(3) real(8), intent(in) :: E real(8), intent(in) :: uvw(3) @@ -1072,7 +1073,7 @@ contains real(8) :: phi ! fission neutron azimuthal angle real(8) :: weight ! weight adjustment for ufs method logical :: in_mesh ! source site in ufs mesh? - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc type(Reaction), pointer :: rxn ! Get pointers @@ -1175,7 +1176,7 @@ contains function sample_fission_energy(nuc, rxn, p) result(E_out) - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc type(Reaction), pointer :: rxn class(Particle_Base), intent(inout) :: p ! Particle causing fission real(8) :: E_out ! outgoing E of fission neutron @@ -1304,7 +1305,7 @@ contains !=============================================================================== subroutine inelastic_scatter(nuc, rxn, p) - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc type(Reaction), pointer :: rxn type(Particle_CE), intent(inout) :: p diff --git a/src/sab_header.F90 b/src/sab_header.F90 new file mode 100644 index 0000000000..99b5fb7843 --- /dev/null +++ b/src/sab_header.F90 @@ -0,0 +1,62 @@ +module sab_header + + use constants + + implicit none + +!=============================================================================== +! DISTENERGYSAB contains the secondary energy/angle distributions for inelastic +! thermal scattering collisions which utilize a continuous secondary energy +! representation. +!=============================================================================== + + type DistEnergySab + integer :: n_e_out + real(8), allocatable :: e_out(:) + real(8), allocatable :: e_out_pdf(:) + real(8), allocatable :: e_out_cdf(:) + real(8), allocatable :: mu(:,:) + end type DistEnergySab + +!=============================================================================== +! SALPHABETA contains S(a,b) data for thermal neutron scattering, typically off +! of light isotopes such as water, graphite, Be, etc +!=============================================================================== + + type SAlphaBeta + character(10) :: name ! name of table, e.g. lwtr.10t + real(8) :: awr ! weight of nucleus in neutron masses + real(8) :: kT ! temperature in MeV (k*T) + integer :: n_zaid ! Number of valid zaids + integer, allocatable :: zaid(:) ! List of valid Z and A identifiers, e.g. 6012 + + ! threshold for S(a,b) treatment (usually ~4 eV) + real(8) :: threshold_inelastic + real(8) :: threshold_elastic = ZERO + + ! Inelastic scattering data + integer :: n_inelastic_e_in ! # of incoming E for inelastic + integer :: n_inelastic_e_out ! # of outgoing E for inelastic + integer :: n_inelastic_mu ! # of outgoing angles for inelastic + integer :: secondary_mode ! secondary mode (equal/skewed/continuous) + real(8), allocatable :: inelastic_e_in(:) + real(8), allocatable :: inelastic_sigma(:) + ! The following are used only if secondary_mode is 0 or 1 + real(8), allocatable :: inelastic_e_out(:,:) + real(8), allocatable :: inelastic_mu(:,:,:) + ! The following is used only if secondary_mode is 3 + ! The different implementation is necessary because the continuous + ! representation has a variable number of outgoing energy points for each + ! incoming energy + type(DistEnergySab), allocatable :: inelastic_data(:) ! One for each Ein + + ! Elastic scattering data + integer :: elastic_mode ! elastic mode (discrete/exact) + integer :: n_elastic_e_in ! # of incoming E for elastic + integer :: n_elastic_mu ! # of outgoing angles for elastic + real(8), allocatable :: elastic_e_in(:) + real(8), allocatable :: elastic_P(:) + real(8), allocatable :: elastic_mu(:,:) + end type SAlphaBeta + +end module sab_header diff --git a/src/summary.F90 b/src/summary.F90 index f2c261ec75..0e5a591aa9 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -1,6 +1,6 @@ module summary - use ace_header, only: Reaction, UrrData, Nuclide + use ace_header, only: Reaction, UrrData use constants use endf, only: reaction_name use geometry_header, only: Cell, Universe, Lattice, RectLattice, & @@ -9,6 +9,7 @@ module summary use hdf5_interface use material_header, only: Material use mesh_header, only: RegularMesh + use nuclide_header use output, only: time_stamp use surface_header use string, only: to_str diff --git a/src/tally.F90 b/src/tally.F90 index 248f87c6a7..5336f69bda 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -68,7 +68,7 @@ contains real(8) :: uvw(3) ! particle direction type(Material), pointer :: mat type(Reaction), pointer :: rxn - type(Nuclide), pointer :: nuc + type(Nuclide_CE), pointer :: nuc i = 0 SCORE_LOOP: do q = 1, t % n_user_score_bins From 3310e84d0ae794a7db713cefc30ac706692ec0f0 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 30 Oct 2015 21:17:19 -0400 Subject: [PATCH 005/650] Separated string to simple_string and string; the former has no dependency on error which really reduces circular dependencies. Then, added ability to nuclide and salphabeta to print their own data. This will be useful when multiple nuclide types exist --- src/ace.F90 | 2 +- src/cmfd_data.F90 | 22 +-- src/cmfd_execute.F90 | 22 +-- src/cmfd_input.F90 | 6 +- src/eigenvalue.F90 | 16 +- src/endf.F90 | 2 +- src/geometry.F90 | 2 +- src/initialize.F90 | 3 +- src/input_xml.F90 | 4 +- src/interpolation.F90 | 8 +- src/nuclide_header.F90 | 135 +++++++++++++++- src/output.F90 | 206 +----------------------- src/particle_restart_write.F90 | 2 +- src/physics.F90 | 2 +- src/plot.F90 | 2 +- src/sab_header.F90 | 92 +++++++++++ src/simulation.F90 | 32 ++-- src/source.F90 | 2 +- src/state_point.F90 | 3 +- src/string.F90 | 281 +++------------------------------ src/summary.F90 | 2 +- src/tally.F90 | 2 +- src/track_output.F90 | 2 +- src/tracking.F90 | 2 +- src/trigger.F90 | 2 +- 25 files changed, 324 insertions(+), 530 deletions(-) diff --git a/src/ace.F90 b/src/ace.F90 index a93f722958..729b78b323 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -12,7 +12,7 @@ module ace use output, only: write_message use sab_header, only: SAlphaBeta use set_header, only: SetChar - use string, only: to_str, to_lower + use simple_string, only: to_str, to_lower implicit none diff --git a/src/cmfd_data.F90 b/src/cmfd_data.F90 index 19fe395728..b624e839d7 100644 --- a/src/cmfd_data.F90 +++ b/src/cmfd_data.F90 @@ -49,17 +49,17 @@ contains subroutine compute_xs() - use constants, only: FILTER_MESH, FILTER_ENERGYIN, FILTER_ENERGYOUT, & + use constants, only: FILTER_MESH, FILTER_ENERGYIN, FILTER_ENERGYOUT, & FILTER_SURFACE, IN_RIGHT, OUT_RIGHT, IN_FRONT, & OUT_FRONT, IN_TOP, OUT_TOP, CMFD_NOACCEL, ZERO, & ONE, TINY_BIT - use error, only: fatal_error - use global, only: cmfd, n_cmfd_tallies, cmfd_tallies, meshes,& + use error, only: fatal_error + use global, only: cmfd, n_cmfd_tallies, cmfd_tallies, meshes,& matching_bins - use mesh, only: mesh_indices_to_bin - use mesh_header, only: RegularMesh - use string, only: to_str - use tally_header, only: TallyObject + use mesh, only: mesh_indices_to_bin + use mesh_header, only: RegularMesh + use simple_string, only: to_str + use tally_header, only: TallyObject integer :: nx ! number of mesh cells in x direction integer :: ny ! number of mesh cells in y direction @@ -625,10 +625,10 @@ contains subroutine compute_dhat() - use constants, only: CMFD_NOACCEL, ZERO - use global, only: cmfd, cmfd_coremap, dhat_reset - use output, only: write_message - use string, only: to_str + use constants, only: CMFD_NOACCEL, ZERO + use global, only: cmfd, cmfd_coremap, dhat_reset + use output, only: write_message + use simple_string, only: to_str integer :: nx ! maximum number of cells in x direction integer :: ny ! maximum number of cells in y direction diff --git a/src/cmfd_execute.F90 b/src/cmfd_execute.F90 index 4dfe99d770..af6991e47d 100644 --- a/src/cmfd_execute.F90 +++ b/src/cmfd_execute.F90 @@ -89,9 +89,9 @@ contains subroutine calc_fission_source() - use constants, only: CMFD_NOACCEL, ZERO, TWO - use global, only: cmfd, cmfd_coremap, master, entropy_on, current_batch - use string, only: to_str + use constants, only: CMFD_NOACCEL, ZERO, TWO + use global, only: cmfd, cmfd_coremap, master, entropy_on, current_batch + use simple_string, only: to_str #ifdef MPI use global, only: mpi_err @@ -213,14 +213,14 @@ contains subroutine cmfd_reweight(new_weights) - use constants, only: ZERO, ONE - use error, only: warning, fatal_error - use global, only: meshes, source_bank, work, n_user_meshes, cmfd, & - master - use mesh_header, only: RegularMesh - use mesh, only: count_bank_sites, get_mesh_indices - use search, only: binary_search - use string, only: to_str + use constants, only: ZERO, ONE + use error, only: warning, fatal_error + use global, only: meshes, source_bank, work, n_user_meshes, cmfd, & + master + use mesh_header, only: RegularMesh + use mesh, only: count_bank_sites, get_mesh_indices + use search, only: binary_search + use simple_string, only: to_str #ifdef MPI use global, only: mpi_err diff --git a/src/cmfd_input.F90 b/src/cmfd_input.F90 index dac74c9c39..c15c250e64 100644 --- a/src/cmfd_input.F90 +++ b/src/cmfd_input.F90 @@ -45,10 +45,10 @@ contains subroutine read_cmfd_xml() use constants, only: ZERO, ONE - use error, only: fatal_error, warning + use error, only: fatal_error, warning use global - use output, only: write_message - use string, only: to_lower + use output, only: write_message + use simple_string, only: to_lower use xml_interface use, intrinsic :: ISO_FORTRAN_ENV diff --git a/src/eigenvalue.F90 b/src/eigenvalue.F90 index 50d6cabc5e..83f8989cc0 100644 --- a/src/eigenvalue.F90 +++ b/src/eigenvalue.F90 @@ -4,16 +4,16 @@ module eigenvalue use message_passing #endif - use constants, only: ZERO - use error, only: fatal_error, warning + use constants, only: ZERO + use error, only: fatal_error, warning use global - use math, only: t_percentile - use mesh, only: count_bank_sites - use mesh_header, only: RegularMesh + use math, only: t_percentile + use mesh, only: count_bank_sites + use mesh_header, only: RegularMesh ! use particle_header, only: Particle_Base - use random_lcg, only: prn, set_particle_seed, prn_skip - use search, only: binary_search - use string, only: to_str + use random_lcg, only: prn, set_particle_seed, prn_skip + use search, only: binary_search + use simple_string, only: to_str implicit none diff --git a/src/endf.F90 b/src/endf.F90 index fb85262b20..6251e989c6 100644 --- a/src/endf.F90 +++ b/src/endf.F90 @@ -1,7 +1,7 @@ module endf use constants - use string, only: to_str + use simple_string, only: to_str implicit none diff --git a/src/geometry.F90 b/src/geometry.F90 index e3058d6e00..ee23a4e36e 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -10,7 +10,7 @@ module geometry Particle_MG use particle_restart_write, only: write_particle_restart use surface_header - use string, only: to_str + use simple_string, only: to_str use tally, only: score_surface_current implicit none diff --git a/src/initialize.F90 b/src/initialize.F90 index 9d63eb4e93..44ec98a882 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -21,7 +21,8 @@ module initialize print_usage, write_xs_summary, print_plot use random_lcg, only: initialize_prng use state_point, only: load_state_point - use string, only: to_str, str_to_int, starts_with, ends_with + use simple_string, only: to_str, starts_with, ends_with + use string, only: str_to_int use summary, only: write_summary use tally_header, only: TallyObject, TallyResult, TallyFilter use tally_initialize, only: configure_tallies diff --git a/src/input_xml.F90 b/src/input_xml.F90 index dda1b90837..a9c5a8e221 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -14,8 +14,8 @@ module input_xml use random_lcg, only: prn use surface_header use stl_vector, only: VectorInt - use string, only: to_lower, to_str, str_to_int, str_to_real, & - starts_with, ends_with, tokenize + use simple_string, only: to_lower, to_str, starts_with, ends_with + use string, only: str_to_int, str_to_real, tokenize use tally_header, only: TallyObject, TallyFilter use tally_initialize, only: add_tallies use xml_interface diff --git a/src/interpolation.F90 b/src/interpolation.F90 index 5c44ed7c3d..03561ba13b 100644 --- a/src/interpolation.F90 +++ b/src/interpolation.F90 @@ -1,10 +1,10 @@ module interpolation use constants - use endf_header, only: Tab1 - use error, only: fatal_error - use search, only: binary_search - use string, only: to_str + use endf_header, only: Tab1 + use error, only: fatal_error + use search, only: binary_search + use simple_string, only: to_str implicit none diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 47baf96e37..cd83402a07 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -1,10 +1,14 @@ module nuclide_header + use, intrinsic :: ISO_FORTRAN_ENV + use ace_header use constants - use list_header, only: ListInt + use endf, only: reaction_name + use list_header, only: ListInt ! use math, only: calc_pn, calc_rn!, expand_harmonic !use scattdata_header + use simple_string ! use xml_interface implicit none @@ -30,8 +34,18 @@ module nuclide_header contains procedure(nuclide_base_clear_), deferred, pass :: clear ! Deallocates Nuclide + procedure(print_nuclide_), deferred, pass :: print ! Writes nuclide info end type Nuclide_Base + abstract interface + subroutine print_nuclide_(this, unit) + import Nuclide_Base + class(Nuclide_Base),intent(in) :: this + integer, optional, intent(in) :: unit + end subroutine print_nuclide_ + + end interface + type, extends(Nuclide_Base) :: Nuclide_CE ! Energy grid information integer :: n_grid ! # of nuclide grid points @@ -89,6 +103,7 @@ module nuclide_header ! Type-Bound procedures contains procedure, pass :: clear => nuclide_ce_clear + procedure, pass :: print => nuclide_ce_print end type Nuclide_CE !=============================================================================== @@ -245,4 +260,122 @@ module nuclide_header end subroutine nuclide_ce_clear +!=============================================================================== +! PRINT_NUCLIDE_* displays information about a continuous-energy neutron +! cross_section table and its reactions and secondary angle/energy distributions +!=============================================================================== + + subroutine nuclide_ce_print(this, unit) + + class(Nuclide_CE), intent(in) :: this + integer, optional, intent(in) :: unit + + integer :: i ! loop index over nuclides + integer :: unit_ ! unit to write to + integer :: size_total ! memory used by nuclide (bytes) + integer :: size_angle_total ! total memory used for angle dist. (bytes) + integer :: size_energy_total ! total memory used for energy dist. (bytes) + integer :: size_xs ! memory used for cross-sections (bytes) + integer :: size_angle ! memory used for an angle distribution (bytes) + integer :: size_energy ! memory used for a energy distributions (bytes) + integer :: size_urr ! memory used for probability tables (bytes) + character(11) :: law ! secondary energy distribution law + type(Reaction), pointer :: rxn => null() + type(UrrData), pointer :: urr => null() + + ! set default unit for writing information + if (present(unit)) then + unit_ = unit + else + unit_ = OUTPUT_UNIT + end if + + ! Initialize totals + size_angle_total = 0 + size_energy_total = 0 + size_urr = 0 + size_xs = 0 + + ! Basic nuclide information + write(unit_,*) 'Nuclide ' // trim(this % name) + write(unit_,*) ' zaid = ' // trim(to_str(this % zaid)) + write(unit_,*) ' awr = ' // trim(to_str(this % awr)) + write(unit_,*) ' kT = ' // trim(to_str(this % kT)) + write(unit_,*) ' # of grid points = ' // trim(to_str(this % n_grid)) + write(unit_,*) ' Fissionable = ', this % fissionable + write(unit_,*) ' # of fission reactions = ' // trim(to_str(this % n_fission)) + write(unit_,*) ' # of reactions = ' // trim(to_str(this % n_reaction)) + + ! Information on each reaction + write(unit_,*) ' Reaction Q-value COM Law IE size(angle) size(energy)' + do i = 1, this % n_reaction + rxn => this % reactions(i) + + ! Determine size of angle distribution + if (rxn % has_angle_dist) then + size_angle = rxn % adist % n_energy * 16 + size(rxn % adist % data) * 8 + else + size_angle = 0 + end if + + ! Determine size of energy distribution and law + if (rxn % has_energy_dist) then + size_energy = size(rxn % edist % data) * 8 + law = to_str(rxn % edist % law) + else + size_energy = 0 + law = 'None' + end if + + write(unit_,'(3X,A11,1X,F8.3,3X,L1,3X,A4,1X,I6,1X,I11,1X,I11)') & + reaction_name(rxn % MT), rxn % Q_value, rxn % scatter_in_cm, & + law(1:4), rxn % threshold, size_angle, size_energy + + ! Accumulate data size + size_xs = size_xs + (this % n_grid - rxn%threshold + 1) * 8 + size_angle_total = size_angle_total + size_angle + size_energy_total = size_energy_total + size_energy + end do + + ! Add memory required for summary reactions (total, absorption, fission, + ! nu-fission) + size_xs = 8 * this % n_grid * 4 + + ! Write information about URR probability tables + size_urr = 0 + if (this % urr_present) then + urr => this % urr_data + write(unit_,*) ' Unresolved resonance probability table:' + write(unit_,*) ' # of energies = ' // trim(to_str(urr % n_energy)) + write(unit_,*) ' # of probabilities = ' // trim(to_str(urr % n_prob)) + write(unit_,*) ' Interpolation = ' // trim(to_str(urr % interp)) + write(unit_,*) ' Inelastic flag = ' // trim(to_str(urr % inelastic_flag)) + write(unit_,*) ' Absorption flag = ' // trim(to_str(urr % absorption_flag)) + write(unit_,*) ' Multiply by smooth? ', urr % multiply_smooth + write(unit_,*) ' Min energy = ', trim(to_str(urr % energy(1))) + write(unit_,*) ' Max energy = ', trim(to_str(urr % energy(urr % n_energy))) + + ! Calculate memory used by probability tables and add to total + size_urr = urr % n_energy * (urr % n_prob * 6 + 1) * 8 + end if + + ! Calculate total memory + size_total = size_xs + size_angle_total + size_energy_total + size_urr + + ! Write memory used + write(unit_,*) ' Memory Requirements' + write(unit_,*) ' Cross sections = ' // trim(to_str(size_xs)) // ' bytes' + write(unit_,*) ' Secondary angle distributions = ' // & + trim(to_str(size_angle_total)) // ' bytes' + write(unit_,*) ' Secondary energy distributions = ' // & + trim(to_str(size_energy_total)) // ' bytes' + write(unit_,*) ' Probability Tables = ' // & + trim(to_str(size_urr)) // ' bytes' + write(unit_,*) ' Total = ' // trim(to_str(size_total)) // ' bytes' + + ! Blank line at end of nuclide + write(unit_,*) + + end subroutine nuclide_ce_print + end module nuclide_header \ No newline at end of file diff --git a/src/output.F90 b/src/output.F90 index f933a2eb87..3dba183148 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -16,7 +16,7 @@ module output use particle_header, only: LocalCoord, Particle_Base, Particle_CE, Particle_MG use plot_header use sab_header, only: SAlphaBeta - use string, only: to_upper, to_str + use simple_string, only: to_upper, to_str use tally_header, only: TallyObject implicit none @@ -321,206 +321,6 @@ contains end subroutine print_particle -!=============================================================================== -! PRINT_NUCLIDE displays information about a continuous-energy neutron -! cross_section table and its reactions and secondary angle/energy distributions -!=============================================================================== - - subroutine print_nuclide(nuc, unit) - - type(Nuclide_CE), pointer :: nuc - integer, optional :: unit - - integer :: i ! loop index over nuclides - integer :: unit_ ! unit to write to - integer :: size_total ! memory used by nuclide (bytes) - integer :: size_angle_total ! total memory used for angle dist. (bytes) - integer :: size_energy_total ! total memory used for energy dist. (bytes) - integer :: size_xs ! memory used for cross-sections (bytes) - integer :: size_angle ! memory used for an angle distribution (bytes) - integer :: size_energy ! memory used for a energy distributions (bytes) - integer :: size_urr ! memory used for probability tables (bytes) - character(11) :: law ! secondary energy distribution law - type(Reaction), pointer :: rxn => null() - type(UrrData), pointer :: urr => null() - - ! set default unit for writing information - if (present(unit)) then - unit_ = unit - else - unit_ = OUTPUT_UNIT - end if - - ! Initialize totals - size_angle_total = 0 - size_energy_total = 0 - size_urr = 0 - size_xs = 0 - - ! Basic nuclide information - write(unit_,*) 'Nuclide ' // trim(nuc % name) - write(unit_,*) ' zaid = ' // trim(to_str(nuc % zaid)) - write(unit_,*) ' awr = ' // trim(to_str(nuc % awr)) - write(unit_,*) ' kT = ' // trim(to_str(nuc % kT)) - write(unit_,*) ' # of grid points = ' // trim(to_str(nuc % n_grid)) - write(unit_,*) ' Fissionable = ', nuc % fissionable - write(unit_,*) ' # of fission reactions = ' // trim(to_str(nuc % n_fission)) - write(unit_,*) ' # of reactions = ' // trim(to_str(nuc % n_reaction)) - - ! Information on each reaction - write(unit_,*) ' Reaction Q-value COM Law IE size(angle) size(energy)' - do i = 1, nuc % n_reaction - rxn => nuc % reactions(i) - - ! Determine size of angle distribution - if (rxn % has_angle_dist) then - size_angle = rxn % adist % n_energy * 16 + size(rxn % adist % data) * 8 - else - size_angle = 0 - end if - - ! Determine size of energy distribution and law - if (rxn % has_energy_dist) then - size_energy = size(rxn % edist % data) * 8 - law = to_str(rxn % edist % law) - else - size_energy = 0 - law = 'None' - end if - - write(unit_,'(3X,A11,1X,F8.3,3X,L1,3X,A4,1X,I6,1X,I11,1X,I11)') & - reaction_name(rxn % MT), rxn % Q_value, rxn % scatter_in_cm, & - law(1:4), rxn % threshold, size_angle, size_energy - - ! Accumulate data size - size_xs = size_xs + (nuc % n_grid - rxn%threshold + 1) * 8 - size_angle_total = size_angle_total + size_angle - size_energy_total = size_energy_total + size_energy - end do - - ! Add memory required for summary reactions (total, absorption, fission, - ! nu-fission) - size_xs = 8 * nuc % n_grid * 4 - - ! Write information about URR probability tables - size_urr = 0 - if (nuc % urr_present) then - urr => nuc % urr_data - write(unit_,*) ' Unresolved resonance probability table:' - write(unit_,*) ' # of energies = ' // trim(to_str(urr % n_energy)) - write(unit_,*) ' # of probabilities = ' // trim(to_str(urr % n_prob)) - write(unit_,*) ' Interpolation = ' // trim(to_str(urr % interp)) - write(unit_,*) ' Inelastic flag = ' // trim(to_str(urr % inelastic_flag)) - write(unit_,*) ' Absorption flag = ' // trim(to_str(urr % absorption_flag)) - write(unit_,*) ' Multiply by smooth? ', urr % multiply_smooth - write(unit_,*) ' Min energy = ', trim(to_str(urr % energy(1))) - write(unit_,*) ' Max energy = ', trim(to_str(urr % energy(urr % n_energy))) - - ! Calculate memory used by probability tables and add to total - size_urr = urr % n_energy * (urr % n_prob * 6 + 1) * 8 - end if - - ! Calculate total memory - size_total = size_xs + size_angle_total + size_energy_total + size_urr - - ! Write memory used - write(unit_,*) ' Memory Requirements' - write(unit_,*) ' Cross sections = ' // trim(to_str(size_xs)) // ' bytes' - write(unit_,*) ' Secondary angle distributions = ' // & - trim(to_str(size_angle_total)) // ' bytes' - write(unit_,*) ' Secondary energy distributions = ' // & - trim(to_str(size_energy_total)) // ' bytes' - write(unit_,*) ' Probability Tables = ' // & - trim(to_str(size_urr)) // ' bytes' - write(unit_,*) ' Total = ' // trim(to_str(size_total)) // ' bytes' - - ! Blank line at end of nuclide - write(unit_,*) - - end subroutine print_nuclide - -!=============================================================================== -! PRINT_SAB_TABLE displays information about a S(a,b) table containing data -! describing thermal scattering from bound materials such as hydrogen in water. -!=============================================================================== - - subroutine print_sab_table(sab, unit) - - type(SAlphaBeta), pointer :: sab - integer, optional :: unit - - integer :: size_sab ! memory used by S(a,b) table - integer :: unit_ ! unit to write to - integer :: i ! Loop counter for parsing through sab % zaid - integer :: char_count ! Counter for the number of characters on a line - - ! set default unit for writing information - if (present(unit)) then - unit_ = unit - else - unit_ = OUTPUT_UNIT - end if - - ! Basic S(a,b) table information - write(unit_,*) 'S(a,b) Table ' // trim(sab % name) - write(unit_,'(A)',advance="no") ' zaids = ' - ! Initialize the counter based on the above string - char_count = 11 - do i = 1, sab % n_zaid - ! Deal with a line thats too long - if (char_count >= 73) then ! 73 = 80 - (5 ZAID chars + 1 space + 1 comma) - ! End the line - write(unit_,*) "" - ! Add 11 leading blanks - write(unit_,'(A)', advance="no") " " - ! reset the counter to 11 - char_count = 11 - end if - if (i < sab % n_zaid) then - ! Include a comma - write(unit_,'(A)',advance="no") trim(to_str(sab % zaid(i))) // ", " - char_count = char_count + len(trim(to_str(sab % zaid(i)))) + 2 - else - ! Don't include a comma, since we are all done - write(unit_,'(A)',advance="no") trim(to_str(sab % zaid(i))) - end if - - end do - write(unit_,*) "" ! Move to next line - write(unit_,*) ' awr = ' // trim(to_str(sab % awr)) - write(unit_,*) ' kT = ' // trim(to_str(sab % kT)) - - ! Inelastic data - write(unit_,*) ' # of Incoming Energies (Inelastic) = ' // & - trim(to_str(sab % n_inelastic_e_in)) - write(unit_,*) ' # of Outgoing Energies (Inelastic) = ' // & - trim(to_str(sab % n_inelastic_e_out)) - write(unit_,*) ' # of Outgoing Angles (Inelastic) = ' // & - trim(to_str(sab % n_inelastic_mu)) - write(unit_,*) ' Threshold for Inelastic = ' // & - trim(to_str(sab % threshold_inelastic)) - - ! Elastic data - if (sab % n_elastic_e_in > 0) then - write(unit_,*) ' # of Incoming Energies (Elastic) = ' // & - trim(to_str(sab % n_elastic_e_in)) - write(unit_,*) ' # of Outgoing Angles (Elastic) = ' // & - trim(to_str(sab % n_elastic_mu)) - write(unit_,*) ' Threshold for Elastic = ' // & - trim(to_str(sab % threshold_elastic)) - end if - - ! Determine memory used by S(a,b) table and write out - size_sab = 8 * (sab % n_inelastic_e_in * (2 + sab % n_inelastic_e_out * & - (1 + sab % n_inelastic_mu)) + sab % n_elastic_e_in * & - (2 + sab % n_elastic_mu)) - write(unit_,*) ' Memory Used = ' // trim(to_str(size_sab)) // ' bytes' - - ! Blank line at end - write(unit_,*) - - end subroutine print_sab_table - !=============================================================================== ! WRITE_XS_SUMMARY writes information about each nuclide and S(a,b) table to a ! file called cross_sections.out. This file shows the list of reactions as well @@ -550,7 +350,7 @@ contains nuc => nuclides(i) ! Print information about nuclide - call print_nuclide(nuc, unit=unit_xs) + call nuc % print(unit=unit_xs) end do NUCLIDE_LOOP SAB_TABLES_LOOP: do i = 1, n_sab_tables @@ -558,7 +358,7 @@ contains sab => sab_tables(i) ! Print information about S(a,b) table - call print_sab_table(sab, unit=unit_xs) + call sab % print(unit=unit_xs) end do SAB_TABLES_LOOP ! Close cross section summary file diff --git a/src/particle_restart_write.F90 b/src/particle_restart_write.F90 index 9dff7e5f3b..a7341d71ec 100644 --- a/src/particle_restart_write.F90 +++ b/src/particle_restart_write.F90 @@ -4,7 +4,7 @@ module particle_restart_write use global use hdf5_interface use particle_header, only: Particle_Base - use string, only: to_str + use simple_string, only: to_str use hdf5 diff --git a/src/physics.F90 b/src/physics.F90 index b298fde9ce..a24ab8de4d 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -17,7 +17,7 @@ module physics use particle_restart_write, only: write_particle_restart use random_lcg, only: prn use search, only: binary_search - use string, only: to_str + use simple_string, only: to_str implicit none diff --git a/src/plot.F90 b/src/plot.F90 index 6ac2da2c14..e46742ea1a 100644 --- a/src/plot.F90 +++ b/src/plot.F90 @@ -14,7 +14,7 @@ module plot use ppmlib, only: Image, init_image, allocate_image, & deallocate_image, set_pixel use progress_header, only: ProgressBar - use string, only: to_str + use simple_string, only: to_str use hdf5 diff --git a/src/sab_header.F90 b/src/sab_header.F90 index 99b5fb7843..a70a280cfb 100644 --- a/src/sab_header.F90 +++ b/src/sab_header.F90 @@ -1,6 +1,9 @@ module sab_header + use, intrinsic :: ISO_FORTRAN_ENV + use constants + use simple_string, only: to_str implicit none @@ -57,6 +60,95 @@ module sab_header real(8), allocatable :: elastic_e_in(:) real(8), allocatable :: elastic_P(:) real(8), allocatable :: elastic_mu(:,:) + contains + procedure, pass :: print => print_sab_table end type SAlphaBeta + contains + + +!=============================================================================== +! PRINT_SAB_TABLE displays information about a S(a,b) table containing data +! describing thermal scattering from bound materials such as hydrogen in water. +!=============================================================================== + + subroutine print_sab_table(this, unit) + + class(SAlphaBeta), intent(in) :: this + integer, optional, intent(in) :: unit + + integer :: size_sab ! memory used by S(a,b) table + integer :: unit_ ! unit to write to + integer :: i ! Loop counter for parsing through sab % zaid + integer :: char_count ! Counter for the number of characters on a line + + ! set default unit for writing information + if (present(unit)) then + unit_ = unit + else + unit_ = OUTPUT_UNIT + end if + + ! Basic S(a,b) table information + write(unit_,*) 'S(a,b) Table ' // trim(this % name) + write(unit_,'(A)',advance="no") ' zaids = ' + ! Initialize the counter based on the above string + char_count = 11 + do i = 1, this % n_zaid + ! Deal with a line thats too long + if (char_count >= 73) then ! 73 = 80 - (5 ZAID chars + 1 space + 1 comma) + ! End the line + write(unit_,*) "" + ! Add 11 leading blanks + write(unit_,'(A)', advance="no") " " + ! reset the counter to 11 + char_count = 11 + end if + if (i < this % n_zaid) then + ! Include a comma + write(unit_,'(A)',advance="no") trim(to_str(this % zaid(i))) // ", " + char_count = char_count + len(trim(to_str(this % zaid(i)))) + 2 + else + ! Don't include a comma, since we are all done + write(unit_,'(A)',advance="no") trim(to_str(this % zaid(i))) + end if + + end do + write(unit_,*) "" ! Move to next line + write(unit_,*) ' awr = ' // trim(to_str(this % awr)) + write(unit_,*) ' kT = ' // trim(to_str(this % kT)) + + ! Inelastic data + write(unit_,*) ' # of Incoming Energies (Inelastic) = ' // & + trim(to_str(this % n_inelastic_e_in)) + write(unit_,*) ' # of Outgoing Energies (Inelastic) = ' // & + trim(to_str(this % n_inelastic_e_out)) + write(unit_,*) ' # of Outgoing Angles (Inelastic) = ' // & + trim(to_str(this % n_inelastic_mu)) + write(unit_,*) ' Threshold for Inelastic = ' // & + trim(to_str(this % threshold_inelastic)) + + ! Elastic data + if (this % n_elastic_e_in > 0) then + write(unit_,*) ' # of Incoming Energies (Elastic) = ' // & + trim(to_str(this % n_elastic_e_in)) + write(unit_,*) ' # of Outgoing Angles (Elastic) = ' // & + trim(to_str(this % n_elastic_mu)) + write(unit_,*) ' Threshold for Elastic = ' // & + trim(to_str(this % threshold_elastic)) + end if + + ! Determine memory used by S(a,b) table and write out + size_sab = 8 * (this % n_inelastic_e_in * (2 + this % n_inelastic_e_out * & + (1 + this % n_inelastic_mu)) + this % n_elastic_e_in * & + (2 + this % n_elastic_mu)) + write(unit_,*) ' Memory Used = ' // trim(to_str(size_sab)) // ' bytes' + + ! Blank line at end + write(unit_,*) + + end subroutine print_sab_table + + + end module sab_header diff --git a/src/simulation.F90 b/src/simulation.F90 index a674a18df4..c31b1d6fa7 100644 --- a/src/simulation.F90 +++ b/src/simulation.F90 @@ -4,26 +4,26 @@ module simulation use mpi #endif - use cmfd_execute, only: cmfd_init_batch, execute_cmfd - use constants, only: ZERO - use eigenvalue, only: count_source_for_ufs, calculate_average_keff, & - calculate_combined_keff, calculate_generation_keff, & - shannon_entropy, synchronize_bank, keff_generation + use cmfd_execute, only: cmfd_init_batch, execute_cmfd + use constants, only: ZERO + use eigenvalue, only: count_source_for_ufs, calculate_average_keff, & + calculate_combined_keff, calculate_generation_keff, & + shannon_entropy, synchronize_bank, keff_generation #ifdef _OPENMP - use eigenvalue, only: join_bank_from_threads + use eigenvalue, only: join_bank_from_threads #endif use global - use output, only: write_message, header, print_columns, & - print_batch_keff, print_generation + use output, only: write_message, header, print_columns, & + print_batch_keff, print_generation use particle_header, only: Particle_Base - use random_lcg, only: set_particle_seed - use source, only: initialize_source - use state_point, only: write_state_point, write_source_point - use string, only: to_str - use tally, only: synchronize_tallies, setup_active_usertallies, & - reset_result - use trigger, only: check_triggers - use tracking, only: transport + use random_lcg, only: set_particle_seed + use source, only: initialize_source + use state_point, only: write_state_point, write_source_point + use simple_string, only: to_str + use tally, only: synchronize_tallies, setup_active_usertallies, & + reset_result + use trigger, only: check_triggers + use tracking, only: transport implicit none private diff --git a/src/source.F90 b/src/source.F90 index e8cb420083..b83bf766e6 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -12,7 +12,7 @@ module source use particle_header, only: Particle_Base, Particle_CE, Particle_MG use random_lcg, only: prn, set_particle_seed, prn_set_stream use state_point, only: read_source_bank, write_source_bank - use string, only: to_str + use simple_string, only: to_str #ifdef MPI use message_passing diff --git a/src/state_point.F90 b/src/state_point.F90 index 046e7e6669..7a414f4574 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -18,7 +18,8 @@ module state_point use global use hdf5_interface use output, only: write_message, time_stamp - use string, only: to_str, zero_padded, count_digits + use simple_string, only: to_str, count_digits + use string, only: zero_padded use tally_header, only: TallyObject use mesh_header, only: RegularMesh use dict_header, only: ElemKeyValueII, ElemKeyValueCI diff --git a/src/string.F90 b/src/string.F90 index 45db59c875..3fbc9e1d79 100644 --- a/src/string.F90 +++ b/src/string.F90 @@ -1,17 +1,14 @@ module string - use constants, only: MAX_WORDS, MAX_LINE_LEN, ERROR_INT, ERROR_REAL, & - OP_LEFT_PAREN, OP_RIGHT_PAREN, OP_COMPLEMENT, OP_INTERSECTION, OP_UNION - use error, only: fatal_error, warning - use global, only: master + use constants, only: MAX_WORDS, MAX_LINE_LEN, ERROR_INT, ERROR_REAL, & + OP_LEFT_PAREN, OP_RIGHT_PAREN, OP_COMPLEMENT, & + OP_INTERSECTION, OP_UNION + use error, only: fatal_error, warning + use global, only: master use stl_vector, only: VectorInt implicit none - interface to_str - module procedure int4_to_str, int8_to_str, real_to_str - end interface - contains !=============================================================================== @@ -182,51 +179,7 @@ contains end function concatenate -!=============================================================================== -! TO_LOWER converts a string to all lower case characters -!=============================================================================== - function to_lower(word) result(word_lower) - - character(*), intent(in) :: word - character(len=len(word)) :: word_lower - - integer :: i - integer :: ic - - do i = 1, len(word) - ic = ichar(word(i:i)) - if (ic >= 65 .and. ic <= 90) then - word_lower(i:i) = char(ic+32) - else - word_lower(i:i) = word(i:i) - end if - end do - - end function to_lower - -!=============================================================================== -! TO_UPPER converts a string to all upper case characters -!=============================================================================== - - function to_upper(word) result(word_upper) - - character(*), intent(in) :: word - character(len=len(word)) :: word_upper - - integer :: i - integer :: ic - - do i = 1, len(word) - ic = ichar(word(i:i)) - if (ic >= 97 .and. ic <= 122) then - word_upper(i:i) = char(ic-32) - else - word_upper(i:i) = word(i:i) - end if - end do - - end function to_upper !=============================================================================== ! ZERO_PADDED returns a string of the input integer padded with zeros to the @@ -234,163 +187,32 @@ contains ! integers. !=============================================================================== -function zero_padded(num, n_digits) result(str) - integer, intent(in) :: num - integer, intent(in) :: n_digits - character(11) :: str + function zero_padded(num, n_digits) result(str) + integer, intent(in) :: num + integer, intent(in) :: n_digits + character(11) :: str - character(8) :: zp_form + character(8) :: zp_form - ! Make sure n_digits is reasonable. 10 digits is the maximum needed for the - ! largest integer(4). - if (n_digits > 10) then - call fatal_error('zero_padded called with an unreasonably large & - &n_digits (>10)') - end if - - ! Write a format string of the form '(In.m)' where n is the max width and - ! m is the min width. If a sign is present, then n must be one greater - ! than m. - if (num < 0) then - write(zp_form, '("(I", I0, ".", I0, ")")') n_digits+1, n_digits - else - write(zp_form, '("(I", I0, ".", I0, ")")') n_digits, n_digits - end if - - ! Format the number. - write(str, zp_form) num -end function zero_padded - -!=============================================================================== -! IS_NUMBER determines whether a string of characters is all 0-9 characters -!=============================================================================== - - function is_number(word) result(number) - - character(*), intent(in) :: word - logical :: number - - integer :: i - integer :: ic - - number = .true. - do i = 1, len_trim(word) - ic = ichar(word(i:i)) - if (ic < 48 .or. ic >= 58) number = .false. - end do - - end function is_number - -!=============================================================================== -! STARTS_WITH determines whether a string starts with a certain -! sequence of characters -!=============================================================================== - - logical function starts_with(str, seq) - - character(*) :: str ! string to check - character(*) :: seq ! sequence of characters - - integer :: i - integer :: i_start - integer :: str_len - integer :: seq_len - - str_len = len_trim(str) - seq_len = len_trim(seq) - - ! determine how many spaces are at beginning of string - i_start = 0 - do i = 1, str_len - if (str(i:i) == ' ' .or. str(i:i) == achar(9)) cycle - i_start = i - exit - end do - - ! Check if string starts with sequence using INDEX intrinsic - if (index(str(1:str_len), seq(1:seq_len)) == i_start) then - starts_with = .true. - else - starts_with = .false. + ! Make sure n_digits is reasonable. 10 digits is the maximum needed for the + ! largest integer(4). + if (n_digits > 10) then + call fatal_error('zero_padded called with an unreasonably large & + &n_digits (>10)') end if - end function starts_with - -!=============================================================================== -! ENDS_WITH determines whether a string ends with a certain sequence -! of characters -!=============================================================================== - - logical function ends_with(str, seq) - - character(*) :: str ! string to check - character(*) :: seq ! sequence of characters - - integer :: i_start - integer :: str_len - integer :: seq_len - - str_len = len_trim(str) - seq_len = len_trim(seq) - - ! determine how many spaces are at beginning of string - i_start = str_len - seq_len + 1 - - ! Check if string starts with sequence using INDEX intrinsic - if (index(str(1:str_len), seq(1:seq_len), .true.) == i_start) then - ends_with = .true. + ! Write a format string of the form '(In.m)' where n is the max width and + ! m is the min width. If a sign is present, then n must be one greater + ! than m. + if (num < 0) then + write(zp_form, '("(I", I0, ".", I0, ")")') n_digits+1, n_digits else - ends_with = .false. + write(zp_form, '("(I", I0, ".", I0, ")")') n_digits, n_digits end if - end function ends_with - -!=============================================================================== -! COUNT_DIGITS returns the number of digits needed to represent the input -! integer. -!=============================================================================== - - function count_digits(num) result(n_digits) - integer, intent(in) :: num - integer :: n_digits - - n_digits = 1 - do while (num / 10**(n_digits) /= 0 .and. abs(num / 10 **(n_digits-1)) /= 1& - &.and. n_digits /= 10) - ! Note that 10 digits is the maximum needed to represent an integer(4) so - ! the loop automatically exits when n_digits = 10. - n_digits = n_digits + 1 - end do - - end function count_digits - -!=============================================================================== -! INT4_TO_STR converts an integer(4) to a string. -!=============================================================================== - - function int4_to_str(num) result(str) - - integer, intent(in) :: num - character(11) :: str - - write (str, '(I11)') num - str = adjustl(str) - - end function int4_to_str - -!=============================================================================== -! INT8_TO_STR converts an integer(8) to a string. -!=============================================================================== - - function int8_to_str(num) result(str) - - integer(8), intent(in) :: num - character(21) :: str - - write (str, '(I21)') num - str = adjustl(str) - - end function int8_to_str + ! Format the number. + write(str, zp_form) num + end function zero_padded !=============================================================================== ! STR_TO_INT converts a string to an integer. @@ -434,59 +256,4 @@ end function zero_padded end function str_to_real -!=============================================================================== -! REAL_TO_STR converts a real(8) to a string based on how large the value is and -! how many significant digits are desired. By default, six significants digits -! are used. -!=============================================================================== - - function real_to_str(num, sig_digits) result(string) - - real(8), intent(in) :: num ! number to convert - integer, optional, intent(in) :: sig_digits ! # of significant digits - character(15) :: string ! string returned - - integer :: decimal ! number of places after decimal - integer :: width ! total field width - real(8) :: num2 ! absolute value of number - character(9) :: fmt ! format specifier for writing number - - ! set default field width - width = 15 - - ! set number of places after decimal - if (present(sig_digits)) then - decimal = sig_digits - else - decimal = 6 - end if - - ! Create format specifier for writing character - num2 = abs(num) - if (num2 == 0.0_8) then - write(fmt, '("(F",I2,".",I2,")")') width, 1 - elseif (num2 < 1.0e-1_8) then - write(fmt, '("(ES",I2,".",I2,")")') width, decimal - 1 - elseif (num2 >= 1.0e-1_8 .and. num2 < 1.0_8) then - write(fmt, '("(F",I2,".",I2,")")') width, decimal - elseif (num2 >= 1.0_8 .and. num2 < 10.0_8) then - write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-1, 0) - elseif (num2 >= 10.0_8 .and. num2 < 100.0_8) then - write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-2, 0) - elseif (num2 >= 100.0_8 .and. num2 < 1000.0_8) then - write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-3, 0) - elseif (num2 >= 100.0_8 .and. num2 < 10000.0_8) then - write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-4, 0) - elseif (num2 >= 10000.0_8 .and. num2 < 100000.0_8) then - write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-5, 0) - else - write(fmt, '("(ES",I2,".",I2,")")') width, decimal - 1 - end if - - ! Write string and left adjust - write(string, fmt) num - string = adjustl(string) - - end function real_to_str - end module string diff --git a/src/summary.F90 b/src/summary.F90 index 0e5a591aa9..1b0797fc9b 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -12,7 +12,7 @@ module summary use nuclide_header use output, only: time_stamp use surface_header - use string, only: to_str + use simple_string, only: to_str use tally_header, only: TallyObject use hdf5 diff --git a/src/tally.F90 b/src/tally.F90 index 5336f69bda..1954aebb9d 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -14,7 +14,7 @@ module tally use particle_header, only: LocalCoord, Particle_Base, Particle_CE, & Particle_MG use search, only: binary_search - use string, only: to_str + use simple_string, only: to_str use tally_header, only: TallyResult, TallyMapItem, TallyMapElement use fission, only: nu_total, nu_delayed, yield_delayed use interpolation, only: interpolate_tab1 diff --git a/src/track_output.F90 b/src/track_output.F90 index 867cd4a787..ec09932758 100644 --- a/src/track_output.F90 +++ b/src/track_output.F90 @@ -8,7 +8,7 @@ module track_output use global use hdf5_interface use particle_header, only: Particle_Base - use string, only: to_str + use simple_string, only: to_str use hdf5 diff --git a/src/tracking.F90 b/src/tracking.F90 index 8dc8c7772e..fcb746ccc8 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -11,7 +11,7 @@ module tracking use particle_header, only: LocalCoord, Particle_Base, Particle_CE, Particle_MG use physics, only: collision use random_lcg, only: prn - use string, only: to_str + use simple_string, only: to_str use tally, only: score_analog_tally, score_tracklength_tally, & score_collision_tally, score_surface_current use track_output, only: initialize_particle_track, write_particle_track, & diff --git a/src/trigger.F90 b/src/trigger.F90 index 73cb0c7efe..967d74b14e 100644 --- a/src/trigger.F90 +++ b/src/trigger.F90 @@ -6,7 +6,7 @@ module trigger use constants use global - use string, only: to_str + use simple_string, only: to_str use output, only: warning, write_message use mesh, only: mesh_indices_to_bin use mesh_header, only: RegularMesh From 4e84c64620cf4ec9a4bb1acb18e2ed7ec9208a7d Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 30 Oct 2015 21:17:34 -0400 Subject: [PATCH 006/650] Helps if i add simple_string to the commit --- src/simple_string.F90 | 245 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 245 insertions(+) create mode 100644 src/simple_string.F90 diff --git a/src/simple_string.F90 b/src/simple_string.F90 new file mode 100644 index 0000000000..a2205ffbc3 --- /dev/null +++ b/src/simple_string.F90 @@ -0,0 +1,245 @@ +module simple_string + + use constants, only: ERROR_REAL, ERROR_INT + + implicit none + + interface to_str + module procedure int4_to_str, int8_to_str, real_to_str + end interface + +contains + +!=============================================================================== +! TO_LOWER converts a string to all lower case characters +!=============================================================================== + + function to_lower(word) result(word_lower) + + character(*), intent(in) :: word + character(len=len(word)) :: word_lower + + integer :: i + integer :: ic + + do i = 1, len(word) + ic = ichar(word(i:i)) + if (ic >= 65 .and. ic <= 90) then + word_lower(i:i) = char(ic+32) + else + word_lower(i:i) = word(i:i) + end if + end do + + end function to_lower + +!=============================================================================== +! TO_UPPER converts a string to all upper case characters +!=============================================================================== + + function to_upper(word) result(word_upper) + + character(*), intent(in) :: word + character(len=len(word)) :: word_upper + + integer :: i + integer :: ic + + do i = 1, len(word) + ic = ichar(word(i:i)) + if (ic >= 97 .and. ic <= 122) then + word_upper(i:i) = char(ic-32) + else + word_upper(i:i) = word(i:i) + end if + end do + + end function to_upper + +!=============================================================================== +! IS_NUMBER determines whether a string of characters is all 0-9 characters +!=============================================================================== + + function is_number(word) result(number) + + character(*), intent(in) :: word + logical :: number + + integer :: i + integer :: ic + + number = .true. + do i = 1, len_trim(word) + ic = ichar(word(i:i)) + if (ic < 48 .or. ic >= 58) number = .false. + end do + + end function is_number + +!=============================================================================== +! STARTS_WITH determines whether a string starts with a certain +! sequence of characters +!=============================================================================== + + logical function starts_with(str, seq) + + character(*) :: str ! string to check + character(*) :: seq ! sequence of characters + + integer :: i + integer :: i_start + integer :: str_len + integer :: seq_len + + str_len = len_trim(str) + seq_len = len_trim(seq) + + ! determine how many spaces are at beginning of string + i_start = 0 + do i = 1, str_len + if (str(i:i) == ' ' .or. str(i:i) == achar(9)) cycle + i_start = i + exit + end do + + ! Check if string starts with sequence using INDEX intrinsic + if (index(str(1:str_len), seq(1:seq_len)) == i_start) then + starts_with = .true. + else + starts_with = .false. + end if + + end function starts_with + +!=============================================================================== +! ENDS_WITH determines whether a string ends with a certain sequence +! of characters +!=============================================================================== + + logical function ends_with(str, seq) + + character(*) :: str ! string to check + character(*) :: seq ! sequence of characters + + integer :: i_start + integer :: str_len + integer :: seq_len + + str_len = len_trim(str) + seq_len = len_trim(seq) + + ! determine how many spaces are at beginning of string + i_start = str_len - seq_len + 1 + + ! Check if string starts with sequence using INDEX intrinsic + if (index(str(1:str_len), seq(1:seq_len), .true.) == i_start) then + ends_with = .true. + else + ends_with = .false. + end if + + end function ends_with + +!=============================================================================== +! COUNT_DIGITS returns the number of digits needed to represent the input +! integer. +!=============================================================================== + + function count_digits(num) result(n_digits) + integer, intent(in) :: num + integer :: n_digits + + n_digits = 1 + do while (num / 10**(n_digits) /= 0 .and. abs(num / 10 **(n_digits-1)) /= 1& + &.and. n_digits /= 10) + ! Note that 10 digits is the maximum needed to represent an integer(4) so + ! the loop automatically exits when n_digits = 10. + n_digits = n_digits + 1 + end do + + end function count_digits + +!=============================================================================== +! INT4_TO_STR converts an integer(4) to a string. +!=============================================================================== + + function int4_to_str(num) result(str) + + integer, intent(in) :: num + character(11) :: str + + write (str, '(I11)') num + str = adjustl(str) + + end function int4_to_str + +!=============================================================================== +! INT8_TO_STR converts an integer(8) to a string. +!=============================================================================== + + function int8_to_str(num) result(str) + + integer(8), intent(in) :: num + character(21) :: str + + write (str, '(I21)') num + str = adjustl(str) + + end function int8_to_str + +!=============================================================================== +! REAL_TO_STR converts a real(8) to a string based on how large the value is and +! how many significant digits are desired. By default, six significants digits +! are used. +!=============================================================================== + + function real_to_str(num, sig_digits) result(string) + + real(8), intent(in) :: num ! number to convert + integer, optional, intent(in) :: sig_digits ! # of significant digits + character(15) :: string ! string returned + + integer :: decimal ! number of places after decimal + integer :: width ! total field width + real(8) :: num2 ! absolute value of number + character(9) :: fmt ! format specifier for writing number + + ! set default field width + width = 15 + + ! set number of places after decimal + if (present(sig_digits)) then + decimal = sig_digits + else + decimal = 6 + end if + + ! Create format specifier for writing character + num2 = abs(num) + if (num2 == 0.0_8) then + write(fmt, '("(F",I2,".",I2,")")') width, 1 + elseif (num2 < 1.0e-1_8) then + write(fmt, '("(ES",I2,".",I2,")")') width, decimal - 1 + elseif (num2 >= 1.0e-1_8 .and. num2 < 1.0_8) then + write(fmt, '("(F",I2,".",I2,")")') width, decimal + elseif (num2 >= 1.0_8 .and. num2 < 10.0_8) then + write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-1, 0) + elseif (num2 >= 10.0_8 .and. num2 < 100.0_8) then + write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-2, 0) + elseif (num2 >= 100.0_8 .and. num2 < 1000.0_8) then + write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-3, 0) + elseif (num2 >= 100.0_8 .and. num2 < 10000.0_8) then + write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-4, 0) + elseif (num2 >= 10000.0_8 .and. num2 < 100000.0_8) then + write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-5, 0) + else + write(fmt, '("(ES",I2,".",I2,")")') width, decimal - 1 + end if + + ! Write string and left adjust + write(string, fmt) num + string = adjustl(string) + + end function real_to_str + +end module simple_string \ No newline at end of file From 478a2f4de842c885055d25c911a590b958d2451f Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 31 Oct 2015 12:42:49 -0400 Subject: [PATCH 007/650] Added ability to read the meta data for MG cross sections xml file --- src/global.F90 | 47 ++++++++++-- src/initialize.F90 | 3 +- src/input_xml.F90 | 181 +++++++++++++++++++++++++++++++++++++-------- 3 files changed, 192 insertions(+), 39 deletions(-) diff --git a/src/global.F90 b/src/global.F90 index 6ac5be3423..adc132e2c0 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -62,40 +62,71 @@ module global ! ENERGY TREATMENT RELATED VARIABLES logical :: run_CE = .true. ! Run in CE mode? + ! ============================================================================ + ! CROSS SECTION RELATED VARIABLES NEEDED REGARDLESS OF CE OR MG + + ! Cross section arrays + type(XsListing), allocatable, target :: xs_listings(:) ! cross_sections.xml listings + + integer :: n_nuclides_total ! Number of nuclide cross section tables + integer :: n_listings ! Number of listings in cross_sections.xml + + ! Dictionaries to look up cross sections and listings + type(DictCharInt) :: nuclide_dict + type(DictCharInt) :: xs_listing_dict + + ! Default xs identifier (e.g. 70c) + character(3):: default_xs + ! ============================================================================ ! CONTINUOUS-ENERGY CROSS SECTION RELATED VARIABLES ! Cross section arrays type(Nuclide_CE), allocatable, target :: nuclides(:) ! Nuclide cross-sections type(SAlphaBeta), allocatable, target :: sab_tables(:) ! S(a,b) tables - type(XsListing), allocatable, target :: xs_listings(:) ! cross_sections.xml listings ! Cross section caches type(NuclideMicroXS), allocatable :: micro_xs(:) ! Cache for each nuclide type(MaterialMacroXS) :: material_xs ! Cache for current material - integer :: n_nuclides_total ! Number of nuclide cross section tables integer :: n_sab_tables ! Number of S(a,b) thermal scattering tables - integer :: n_listings ! Number of listings in cross_sections.xml ! Minimum/maximum energies real(8) :: energy_min_neutron = ZERO real(8) :: energy_max_neutron = INFINITY ! Dictionaries to look up cross sections and listings - type(DictCharInt) :: nuclide_dict type(DictCharInt) :: sab_dict - type(DictCharInt) :: xs_listing_dict ! Unreoslved resonance probablity tables logical :: urr_ptables_on = .true. - ! Default xs identifier (e.g. 70c) - character(3):: default_xs - ! What to assume for expanding natural elements integer :: default_expand = ENDF_BVII1 + ! ============================================================================ + ! MULTI-GROUP CROSS SECTION RELATED VARIABLES + + ! Cross section arrays + ! type(Nuclide_MG), allocatable, target :: nuclides_MG(:) + + ! Number of energy groups + integer :: energy_groups + + ! Energy group structure + real(8), allocatable :: energy_bins(:) + + ! Maximum Data Order + integer :: max_order + + ! Scattering Treatment (if Legendre) + integer :: legendre_mu_points + + ! MGXS for current working particle (equivalent to material_xs, but simpler) + real(8) :: particle_xs(5) + +!$omp threadprivate(particle_xs) + ! ============================================================================ ! TALLY-RELATED VARIABLES diff --git a/src/initialize.F90 b/src/initialize.F90 index 44ec98a882..9a689455bb 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -14,8 +14,7 @@ module initialize use global use hdf5_interface, only: file_open, read_dataset, file_close, hdf5_bank_t,& hdf5_tallyresult_t, hdf5_integer8_t - use input_xml, only: read_input_xml, read_cross_sections_xml, & - cells_in_univ_dict, read_plots_xml + use input_xml, only: read_input_xml, cells_in_univ_dict, read_plots_xml use material_header, only: Material use output, only: title, header, print_version, write_message, & print_usage, write_xs_summary, print_plot diff --git a/src/input_xml.F90 b/src/input_xml.F90 index a9c5a8e221..29fdc11783 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -36,7 +36,13 @@ contains subroutine read_input_xml() call read_settings_xml() - if (run_mode /= MODE_PLOTTING) call read_cross_sections_xml() + if (run_mode /= MODE_PLOTTING) then + if (run_CE) then + call read_ce_cross_sections_xml() + else + call read_mg_cross_sections_xml() + end if + end if call read_geometry_xml() call read_materials_xml() call read_tallies_xml() @@ -97,30 +103,6 @@ contains ! Parse settings.xml file call open_xmldoc(doc, filename) - ! Find cross_sections.xml file -- the first place to look is the - ! settings.xml file. If no file is found there, then we check the - ! CROSS_SECTIONS environment variable - if (run_mode /= MODE_PLOTTING) then - if (.not. check_for_node(doc, "cross_sections") .and. & - run_mode /= MODE_PLOTTING) then - ! No cross_sections.xml file specified in settings.xml, check - ! environment variable - call get_environment_variable("CROSS_SECTIONS", env_variable) - if (len_trim(env_variable) == 0) then - call fatal_error("No cross_sections.xml file was specified in & - &settings.xml or in the CROSS_SECTIONS environment variable. & - &OpenMC needs a cross_sections.xml file to identify where to & - &find ACE cross section libraries. Please consult the user's & - &guide at http://mit-crpg.github.io/openmc for information on & - &how to set up ACE cross section libraries.") - else - path_cross_sections = trim(env_variable) - end if - else - call get_node_value(doc, "cross_sections", path_cross_sections) - end if - end if - ! Find if a multi-group or continuous-energy simulation is desired if (check_for_node(doc, "energy_mode")) then call get_node_value(doc, "energy_mode", temp_str) @@ -132,6 +114,44 @@ contains end if end if + ! Find cross_sections.xml file -- the first place to look is the + ! settings.xml file. If no file is found there, then we check the + ! CROSS_SECTIONS environment variable + if (run_mode /= MODE_PLOTTING) then + if (.not. check_for_node(doc, "cross_sections") .and. & + run_mode /= MODE_PLOTTING) then + ! No cross_sections.xml file specified in settings.xml, check + ! environment variable + if (run_CE) then + call get_environment_variable("CROSS_SECTIONS", env_variable) + if (len_trim(env_variable) == 0) then + call fatal_error("No cross_sections.xml file was specified in & + &settings.xml or in the CROSS_SECTIONS environment variable. & + &OpenMC needs such a file to identify where to & + &find ACE cross section libraries. Please consult the user's & + &guide at http://mit-crpg.github.io/openmc for information on & + &how to set up ACE cross section libraries.") + else + path_cross_sections = trim(env_variable) + end if + else + call get_environment_variable("MG_CROSS_SECTIONS", env_variable) + if (len_trim(env_variable) == 0) then + call fatal_error("No cross_sections.xml file was specified in & + &settings.xml or in the MG_CROSS_SECTIONS environment variable. & + &OpenMC needs such a file to identify where to & + &find the cross section libraries. Please consult the user's & + &guide at http://mit-crpg.github.io/openmc for information on & + &how to set up the cross section libraries.") + else + path_cross_sections = trim(env_variable) + end if + end if + else + call get_node_value(doc, "cross_sections", path_cross_sections) + end if + end if + ! Set output directory if a path has been specified on the ! element if (check_for_node(doc, "output_path")) then @@ -4084,11 +4104,11 @@ contains end subroutine read_plots_xml !=============================================================================== -! READ_CROSS_SECTIONS_XML reads information from a cross_sections.xml file. This -! file contains a listing of the ACE cross sections that may be used. +! READ_*_CROSS_SECTIONS_XML reads information from a cross_sections.xml file. This +! file contains a listing of the CE and MG cross sections that may be used. !=============================================================================== - subroutine read_cross_sections_xml() + subroutine read_ce_cross_sections_xml() integer :: i ! loop index integer :: filetype ! default file type @@ -4243,7 +4263,110 @@ contains ! Close cross sections XML file call close_xmldoc(doc) - end subroutine read_cross_sections_xml + end subroutine read_ce_cross_sections_xml + + subroutine read_mg_cross_sections_xml() + + integer :: i ! loop index + logical :: file_exists ! does cross_sections.xml exist? + type(XsListing), pointer :: listing => null() + type(Node), pointer :: doc => null() + type(Node), pointer :: node_xsdata => null() + type(NodeList), pointer :: node_xsdata_list => null() + ! character(MAX_LINE_LEN) :: temp_str + + ! Check if cross_sections.xml exists + inquire(FILE=path_cross_sections, EXIST=file_exists) + if (.not. file_exists) then + ! Could not find cross_sections.xml file + call fatal_error("Cross sections XML file '" & + &// trim(path_cross_sections) // "' does not exist!") + end if + + call write_message("Reading cross sections XML file...", 5) + + ! Parse cross_sections.xml file + call open_xmldoc(doc, path_cross_sections) + + if (check_for_node(doc, "groups")) then + ! Get neutron group count + call get_node_value(doc, "groups", energy_groups) + else + call fatal_error("groups element must exist!") + end if + + allocate(energy_bins(energy_groups + 1)) + if (check_for_node(doc, "group_structure")) then + ! Get neutron group structure + call get_node_array(doc, "group_structure", energy_bins) + else + call fatal_error("group_structures element must exist!") + end if + + if (check_for_node(doc, "legendre_mu_points")) then + ! Get scattering treatment + call get_node_value(doc, "legendre_mu_points", legendre_mu_points) + if (legendre_mu_points <= 0) then + call fatal_error("legendre_mu_points element must be positive and non-zero!") + end if + legendre_mu_points = -1 * legendre_mu_points + else + ! One will say 'dont do it' + legendre_mu_points = 1 + end if + + ! Get node list of all + call get_node_list(doc, "xsdata", node_xsdata_list) + n_listings = get_list_size(node_xsdata_list) + + ! Allocate xs_listings array + if (n_listings == 0) then + call fatal_error("No XSDATA listings present in cross_sections.xml & + &file!") + else + allocate(xs_listings(n_listings)) + end if + + do i = 1, n_listings + listing => xs_listings(i) + + ! Get pointer to xsdata table XML node + call get_list_item(node_xsdata_list, i, node_xsdata) + + ! copy a number of attributes + call get_node_value(node_xsdata, "name", listing % name) + listing % name = to_lower(listing % name) + listing % alias = listing % name + if (check_for_node(node_xsdata, "alias")) & + call get_node_value(node_xsdata, "alias", listing % alias) + listing % alias = to_lower(listing % alias) + if (check_for_node(node_xsdata, "zaid")) then + call get_node_value(node_xsdata, "zaid", listing % zaid) + else + listing % zaid = 100 + end if + if (check_for_node(node_xsdata, "kT")) & + call get_node_value(node_xsdata, "kT", listing % kT) + if (check_for_node(node_xsdata, "awr")) then + call get_node_value(node_xsdata, "awr", listing % awr) + else + listing % awr = ONE + end if + + ! determine type of cross section + if (ends_with(listing % name, 'c')) then + listing % type = NEUTRON + end if + + ! create dictionary entry for both name and alias + call xs_listing_dict % add_key(to_lower(listing % name), i) + call xs_listing_dict % add_key(to_lower(listing % alias), i) + end do + + ! Close cross sections XML file + call close_xmldoc(doc) + + end subroutine read_mg_cross_sections_xml !=============================================================================== ! EXPAND_NATURAL_ELEMENT converts natural elements specified using an From 52f472c99c9029f3301e2b7b05f26d3c9ed85934 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 1 Nov 2015 13:20:36 -0500 Subject: [PATCH 008/650] Moved maxwell and watt spectra to spectra.F90 from math.F90 to avoid math needing to pull in prn and all that entails (to avoid circular dependencies), added macroxs information for MG data, fixed memory leaks due to allocation of particle at to low a level --- src/ace.F90 | 4 +- src/constants.F90 | 24 +- src/global.F90 | 6 +- src/initialize.F90 | 45 +- src/macroxs_header.F90 | 969 +++++++++++++++++++++++++++++++++++++++ src/math.F90 | 65 ++- src/mgxs_data.F90 | 650 ++++++++++++++++++++++++++ src/nuclide_header.F90 | 465 ++++++++++++++----- src/particle_header.F90 | 95 ++-- src/physics.F90 | 2 +- src/scattdata_header.F90 | 355 ++++++++++++++ src/simulation.F90 | 15 +- src/source.F90 | 18 +- src/spectra.F90 | 58 +++ 14 files changed, 2545 insertions(+), 226 deletions(-) create mode 100644 src/macroxs_header.F90 create mode 100644 src/mgxs_data.F90 create mode 100644 src/scattdata_header.F90 create mode 100644 src/spectra.F90 diff --git a/src/ace.F90 b/src/ace.F90 index 729b78b323..e51c2b3a0e 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -32,7 +32,7 @@ contains ! nuclides and sab_tables arrays !=============================================================================== - subroutine read_xs() + subroutine read_ace_xs() integer :: i ! index in materials array integer :: j ! index over nuclides in material @@ -226,7 +226,7 @@ contains end if end do - end subroutine read_xs + end subroutine read_ace_xs !=============================================================================== ! READ_ACE_TABLE reads a single cross section table in either ASCII or binary diff --git a/src/constants.F90 b/src/constants.F90 index 375c517e76..9bb62f62eb 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -157,9 +157,22 @@ module constants ! Angular distribution type integer, parameter :: & - ANGLE_ISOTROPIC = 1, & ! Isotropic angular distribution - ANGLE_32_EQUI = 2, & ! 32 equiprobable bins - ANGLE_TABULAR = 3 ! Tabular angular distribution + ANGLE_ISOTROPIC = 1, & ! Isotropic angular distribution (CE) + ANGLE_32_EQUI = 2, & ! 32 equiprobable bins (CE) + ANGLE_TABULAR = 3, & ! Tabular angular distribution (CE or MG) + ANGLE_LEGENDRE = 4, & ! Legendre angular distribution (MG) + ANGLE_HISTOGRAM = 5 ! Histogram angular distribution (MG) + + ! Number of mu bins to use when converting Legendres to tabular type + integer, parameter :: DEFAULT_NMU = 33 + + ! Location within pre-computed cross section data (particle_xs) + integer, parameter :: & + TOTAL = 1, & + ABSORB = 2, & + NUFISS = 3, & + FISS = 4, & + SCATT = 5 ! Secondary energy mode for S(a,b) inelastic scattering integer, parameter :: & @@ -203,6 +216,11 @@ module constants ACE_THERMAL = 2, & ! thermal S(a,b) scattering data ACE_DOSIMETRY = 3 ! dosimetry cross sections + ! MGXS Table Types + integer, parameter :: & + ISOTROPIC = 1, & ! Isotropically Weighted Data + ANGLE = 2 ! Data by Angular Bins + ! Fission neutron emission (nu) type integer, parameter :: & NU_NONE = 0, & ! No nu values (non-fissionable) diff --git a/src/global.F90 b/src/global.F90 index adc132e2c0..c5dbec5da9 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -5,6 +5,7 @@ module global use constants use dict_header, only: DictCharInt, DictIntInt use geometry_header, only: Cell, Universe, Lattice, LatticeContainer + use macroxs_header, only: MacroXS_Base, MacroXSContainer use material_header, only: Material use mesh_header, only: RegularMesh use nuclide_header @@ -108,7 +109,10 @@ module global ! MULTI-GROUP CROSS SECTION RELATED VARIABLES ! Cross section arrays - ! type(Nuclide_MG), allocatable, target :: nuclides_MG(:) + type(NuclideMGContainer), allocatable, target :: nuclides_MG(:) + + ! Cross section caches + type(MacroXSContainer), target, allocatable :: macro_xs(:) ! Number of energy groups integer :: energy_groups diff --git a/src/initialize.F90 b/src/initialize.F90 index 9a689455bb..01a8038070 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -1,6 +1,6 @@ module initialize - use ace, only: read_xs, same_nuclide_list + use ace, only: read_ace_xs, same_nuclide_list use bank_header, only: Bank use constants use dict_header, only: DictIntInt, ElemKeyValueII @@ -16,6 +16,7 @@ module initialize hdf5_tallyresult_t, hdf5_integer8_t use input_xml, only: read_input_xml, cells_in_univ_dict, read_plots_xml use material_header, only: Material + use mgxs_data use output, only: title, header, print_version, write_message, & print_usage, write_xs_summary, print_plot use random_lcg, only: initialize_prng @@ -114,23 +115,37 @@ contains ! Read ACE-format cross sections call time_read_xs%start() - call read_xs() + if (run_CE) then + call read_ace_xs() + else + call read_mgxs() + end if call time_read_xs%stop() ! Create linked lists for multiple instances of the same nuclide - call same_nuclide_list() + if (run_CE) then + call same_nuclide_list() + else + call same_nuclide_mg_list() + end if - ! Construct unionized or log energy grid for cross-sections - select case (grid_method) - case (GRID_NUCLIDE) - continue - case (GRID_MAT_UNION) - call time_unionize%start() - call unionized_grid() - call time_unionize%stop() - case (GRID_LOGARITHM) - call logarithmic_grid() - end select + ! Construct information needed for nuclear data + if (run_CE) then + ! Construct unionized or log energy grid for cross-sections + select case (grid_method) + case (GRID_NUCLIDE) + continue + case (GRID_MAT_UNION) + call time_unionize%start() + call unionized_grid() + call time_unionize%stop() + case (GRID_LOGARITHM) + call logarithmic_grid() + end select + else + ! Create material macroscopic data for MGXS + call create_macro_xs() + end if ! Allocate and setup tally stride, matching_bins, and tally maps call configure_tallies() @@ -307,6 +322,8 @@ contains c_loc(tmpb(1)%uvw)), coordinates_t, hdf5_err) call h5tinsert_f(hdf5_bank_t, "E", h5offsetof(c_loc(tmpb(1)), & c_loc(tmpb(1)%E)), H5T_NATIVE_DOUBLE, hdf5_err) + call h5tinsert_f(hdf5_bank_t, "group", h5offsetof(c_loc(tmpb(1)), & + c_loc(tmpb(1)%group)), H5T_NATIVE_INTEGER, hdf5_err) call h5tinsert_f(hdf5_bank_t, "delayed_group", h5offsetof(c_loc(tmpb(1)), & c_loc(tmpb(1)%delayed_group)), H5T_NATIVE_INTEGER, hdf5_err) diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 new file mode 100644 index 0000000000..ed768b2430 --- /dev/null +++ b/src/macroxs_header.F90 @@ -0,0 +1,969 @@ +module macroxs_header + + use constants, only: MAX_FILE_LEN, ZERO, ONE, TWO, PI + use list_header, only: ListInt + use material_header, only: material + use math, only: calc_pn, calc_rn, expand_harmonic + use nuclide_header + use scattdata_header + + implicit none + +!=============================================================================== +! MACROXS_* contains cached macroscopic cross sections for the material a +! particle is traveling through +!=============================================================================== + + type, abstract :: MacroXS_Base + ! Data Order + integer :: order + + ! Type-Bound procedures + contains + procedure(macroxs_init_), deferred, pass :: init ! initializes object + procedure(macroxs_clear_), deferred, pass :: clear ! Deallocates object + procedure(macroxs_size_), deferred, pass :: get_size ! Finds size of object + procedure(macroxs_get_xs_), deferred, pass :: get_xs ! Return xs + end type MacroXS_Base + + abstract interface + subroutine macroxs_init_(this, mat, nuclides, groups, get_kfiss, & + max_order, scatt_type, legendre_mu_points, & + error_code, error_text) + + import MacroXS_Base + import Material + import NuclideMGContainer + import MAX_LINE_LEN + class(MacroXS_Base), intent(inout) :: this ! The MacroXS to initialize + type(Material), pointer, intent(in) :: mat ! base material + type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from + integer, intent(in) :: groups ! Number of E groups + logical, intent(in) :: get_kfiss ! Should we get kfiss data? + integer, intent(in) :: max_order ! Maximum requested order + integer, intent(in) :: scatt_type ! Legendre or Tabular Scatt? + integer, intent(in) :: legendre_mu_points ! Treat as Leg or Tabular? + integer, intent(inout) :: error_code ! Code signifying error + character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print + + end subroutine macroxs_init_ + + function macroxs_get_xs_(this, g, xstype, uvw) result(xs) + import MacroXS_Base + class(MacroXS_Base), intent(in) :: this ! The MacroXS to initialize + integer, intent(in) :: g ! Incoming Energy group + character(*) , intent(in) :: xstype ! Cross Section Type + real(8), optional, intent(in) :: uvw(3) ! Requested Angle + real(8) :: xs ! Resultant xs + + end function macroxs_get_xs_ + + subroutine macroxs_clear_(this) + + import MacroXS_Base + class(MacroXS_Base), intent(inout) :: this ! The MacroXS to clear + + end subroutine macroxs_clear_ + + subroutine macroxs_size_(this, size_total, size_scatt, size_fission) + import MacroXS_Base + class(MacroXS_Base), intent(in) :: this + integer, intent(out) :: size_total ! Total Data Size + integer, intent(out) :: size_scatt ! Scattering Data Size + integer, intent(out) :: size_fission ! Fission Data Size + + end subroutine macroxs_size_ + end interface + + type, extends(MacroXS_Base) :: MacroXS_Iso + ! Microscopic cross sections + real(8), allocatable :: total(:) ! total cross section + real(8), allocatable :: absorption(:) ! absorption cross section + class(ScattData_Base), allocatable :: scatter ! scattering information + real(8), allocatable :: nu_fission(:) ! nu-fission + real(8), allocatable :: k_fission(:) ! kappa-fission + real(8), allocatable :: fission(:) ! fission x/s + real(8), allocatable :: scattxs(:) ! scattering xs + real(8), allocatable :: chi(:,:) ! fission spectra + + ! Type-Bound procedures + contains + procedure, pass :: init => macroxs_iso_init ! inits object + procedure, pass :: clear => macroxs_iso_clear ! Deallocates object + procedure, pass :: get_size => macroxs_iso_size ! Finds size of object + procedure, pass :: get_xs => macroxs_iso_get_xs ! Returns xs + end type MacroXS_Iso + + type, extends(MacroXS_Base) :: MacroXS_Angle + ! Macroscopic cross sections + real(8), allocatable :: total(:,:,:) ! total cross section + real(8), allocatable :: absorption(:,:,:) ! absorption cross section + type(ScattDataContainer), allocatable :: scatter(:,:) ! scattering information + real(8), allocatable :: nu_fission(:,:,:) ! nu-fission + real(8), allocatable :: k_fission(:,:,:) ! kappa-fission + real(8), allocatable :: fission(:,:,:) ! fission x/s + real(8), allocatable :: chi(:,:,:,:) ! fission spectra + real(8), allocatable :: scattxs(:,:,:) ! scattering xs + real(8), allocatable :: polar(:) ! polar angles + real(8), allocatable :: azimuthal(:) ! azimuthal angles + + ! Type-Bound procedures + contains + procedure, pass :: init => macroxs_angle_init ! inits object + procedure, pass :: clear => macroxs_angle_clear ! Deallocates object + procedure, pass :: get_size => macroxs_angle_size ! Finds size of object + procedure, pass :: get_xs => macroxs_angle_get_xs ! Returns xs + end type MacroXS_Angle + +!=============================================================================== +! MACROXSCONTAINER pointer array for storing MacroXS objects. +!=============================================================================== + + type MacroXSContainer + class(MacroXS_Base), allocatable :: obj + end type MacroXSContainer + +contains + +!=============================================================================== +! MACROXS*_INIT sets the MacroXS Data +!=============================================================================== + + subroutine macroxs_iso_init(this, mat, nuclides, groups, get_kfiss, & + max_order, scatt_type, legendre_mu_points, error_code, error_text) + + class(MacroXS_Iso), intent(inout) :: this ! The MacroXS to initialize + type(Material), pointer, intent(in) :: mat ! base material + type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from + integer, intent(in) :: groups ! Number of E groups + logical, intent(in) :: get_kfiss ! Should we get kfiss data? + integer, intent(in) :: max_order ! Maximum requested order + integer, intent(in) :: scatt_type ! How is data presented + integer, intent(in) :: legendre_mu_points ! Treat as Leg or Tabular? + integer, intent(inout) :: error_code ! Code signifying error + character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print + + integer :: i ! loop index over nuclides + integer :: gin, gout ! group indices + real(8) :: atom_density ! atom density of a nuclide + ! class(Nuclide_Base), pointer :: nuc ! current nuclide + integer :: imu + real(8) :: norm + integer :: mat_max_order, order, l + real(8), allocatable :: temp_mult(:,:) + real(8), allocatable :: temp_energy(:,:) + real(8), allocatable :: scatt_coeffs(:,:,:) + + ! Initialize error data + error_code = 0 + error_text = '' + + ! If we have tabular only data, then make sure all datasets have same size + if (scatt_type == ANGLE_HISTOGRAM) then + ! Check all scattering data of same size + order = nuclides(mat % nuclide(1)) % obj % order + do i = 2, mat % n_nuclides + if (order /= nuclides(mat % nuclide(i)) % obj % order) then + error_code = 1 + error_text = "All Histogram Scattering Entries Must Be Same Length!" + return + end if + end do + ! Ok, got our order, store it + this % order = order + + ! Allocate stuff for later + allocate(scatt_coeffs(order, groups, groups)) + scatt_coeffs = ZERO + allocate(ScattData_Histogram :: this % scatter) + + else if (scatt_type == ANGLE_TABULAR) then + ! Check all scattering data of same size + order = nuclides(mat % nuclide(1)) % obj % order + do i = 2, mat % n_nuclides + if (order /= nuclides(mat % nuclide(i)) % obj % order) then + error_code = 1 + error_text = "All Tabular Scattering Entries Must Be Same Length!" + return + end if + end do + ! Ok, got our order, store it + this % order = order + + ! Allocate stuff for later + allocate(scatt_coeffs(order, groups, groups)) + scatt_coeffs = ZERO + allocate(ScattData_Histogram :: this % scatter) + + else if (scatt_type == ANGLE_LEGENDRE) then + ! Otherwise find the maximum scattering order + ! Need to determine the maximum scattering order of all data in this material + mat_max_order = 0 + do i = 1, mat % n_nuclides + if (nuclides(mat % nuclide(i)) % obj % order > mat_max_order) then + mat_max_order = nuclides(mat % nuclide(i)) % obj % order + end if + end do + + ! Now need to compare this material maximum scattering order with + ! the problem wide max scatt order and use whichever is lower + order = min(mat_max_order, max_order) + this % order = order + 1 + + ! Now we can allocate our scatt_coeffs object accordingly + allocate(scatt_coeffs(order + 1, groups, groups)) + scatt_coeffs = ZERO + if (legendre_mu_points == 1) then + allocate(ScattData_Legendre :: this % scatter) + else + allocate(ScattData_Tabular :: this % scatter) + end if + end if + + ! Allocate and initialize data within macro_xs(i_mat) object + allocate(this % total(groups)) + this % total = ZERO + allocate(this % absorption(groups)) + this % absorption = ZERO + allocate(this % fission(groups)) + this % fission = ZERO + if (get_kfiss) then + allocate(this % k_fission(groups)) + this % k_fission = ZERO + end if + allocate(this % nu_fission(groups)) + this % nu_fission = ZERO + allocate(this % chi(groups, groups)) + this % chi = ZERO + allocate(temp_energy(groups, groups)) + temp_energy = ZERO + allocate(temp_mult(groups, groups)) + temp_mult = ZERO + allocate(this % scattxs(groups)) + + ! Add contribution from each nuclide in material + do i = 1, mat % n_nuclides + ! Copy atom density of nuclide in material + atom_density = mat % atom_density(i) + + ! Perform our operations which depend upon the type + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (Nuclide_Iso) + + ! Add contributions to total, absorption, and fission data (if necessary) + this % total = this % total + atom_density * nuc % total + this % absorption = this % absorption + & + atom_density * nuc % absorption + if (nuc % fissionable) then + if (allocated(nuc % chi)) then + do gin = 1, groups + do gout = 1, groups + this % chi(gout,gin) = this % chi(gout,gin) + atom_density * & + nuc % chi(gout) * nuc % nu_fission(gin,1) + end do + end do + this % nu_fission = this % nu_fission + atom_density * & + nuc % nu_fission(:,1) + else + this % chi = this % chi + atom_density * nuc % nu_fission + do gin = 1, groups + this % nu_fission(gin) = this % nu_fission(gin) + atom_density * & + sum(nuc % nu_fission(:,gin)) + end do + end if + this % fission = this % fission + atom_density * nuc % fission + if (get_kfiss) then + this % k_fission = this % k_fission + atom_density * nuc % k_fission + end if + end if + + ! Now time to do the scattering + do gin = 1, groups + do gout = 1, groups + if (scatt_type == ANGLE_HISTOGRAM .or. scatt_type == ANGLE_TABULAR) then + ! Transfer matrix + temp_energy(gout,gin) = temp_energy(gout,gin) + atom_density * & + sum(nuc % scatter(gout,gin,:)) + + ! Determine the angular distribution + do imu = 1, order + scatt_coeffs(imu, gout, gin) = scatt_coeffs(imu, gout, gin) + & + nuc % scatter(gout,gin,imu) * & + atom_density + end do + + else if (scatt_type == ANGLE_LEGENDRE) then + ! Transfer matrix + temp_energy(gout,gin) = temp_energy(gout,gin) + atom_density * & + nuc % scatter(gout,gin,1) + + ! Determine the angular distribution coefficients so we can later + ! expand do the complete distribution + do l = 1, min(nuc % order, order) + 1 + scatt_coeffs(l, gout, gin) = scatt_coeffs(l, gout, gin) + & + nuc % scatter(gout,gin,l) * & + atom_density + end do + + end if + + ! Multiplicity matrix + temp_mult(gout,gin) = temp_mult(gout,gin) + atom_density * & + nuc % mult(gout,gin) + end do + end do + type is (Nuclide_Angle) + error_code = 1 + error_text = "Invalid Passing of Nuclide_Angle to MacroXS_Iso Object" + return + end select + end do + + ! Store the scattering xs + if (scatt_type == ANGLE_HISTOGRAM .or. scatt_type == ANGLE_TABULAR) then + this % scattxs(:) = sum(sum(scatt_coeffs(:,:,:),dim=1),dim=1) + else if (scatt_type == ANGLE_LEGENDRE) then + this % scattxs(:) = sum(scatt_coeffs(1,:,:),dim=1) + end if + + ! Normalize the scatt_coeffs + do gin = 1, groups + do gout = 1, groups + if (scatt_type == ANGLE_HISTOGRAM .or. scatt_type == ANGLE_TABULAR) then + norm = sum(scatt_coeffs(:,gout,gin)) + else if (scatt_type == ANGLE_LEGENDRE) then + norm = scatt_coeffs(1,gout,gin) + end if + if (norm /= ZERO) then + scatt_coeffs(:, gout, gin) = scatt_coeffs(:, gout,gin) / norm + end if + end do + ! Now normalize temp_energy (outgoing scattering energy probabilities) + norm = sum(temp_energy(:,gin)) + if (norm > ZERO) then + temp_energy(:,gin) = temp_energy(:,gin) / norm + end if + end do + + if (scatt_type == ANGLE_LEGENDRE .and. legendre_mu_points /= 1) then + call this % scatter % init(legendre_mu_points, temp_energy, temp_mult, & + scatt_coeffs) + else + call this % scatter % init(this % order, temp_energy, temp_mult, & + scatt_coeffs) + end if + + ! Now normalize chi + if (mat % fissionable) then + do gin = 1, groups + ! Normalize Chi + norm = sum(this % chi(:,gin)) + if (norm > ZERO) then + this % chi(:,gin) = this % chi(:,gin) / norm + end if + end do + end if + + ! Deallocate temporaries for the next material + deallocate(scatt_coeffs, temp_energy, temp_mult) + + end subroutine macroxs_iso_init + + subroutine macroxs_angle_init(this, mat, nuclides, groups, get_kfiss, & + max_order, scatt_type, legendre_mu_points, error_code, error_text) + + class(MacroXS_Angle), intent(inout) :: this ! The MacroXS to initialize + type(Material), pointer, intent(in) :: mat ! base material + type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from + integer, intent(in) :: groups ! Number of E groups + logical, intent(in) :: get_kfiss ! Should we get kfiss data? + integer, intent(in) :: max_order ! Maximum requested order + integer, intent(in) :: scatt_type ! Legendre or Tabular Scatt? + integer, intent(in) :: legendre_mu_points ! Treat as Leg or Tabular? + integer, intent(inout) :: error_code ! Code signifying error + character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print + + integer :: i ! loop index over nuclides + integer :: gin, gout ! group indices + real(8) :: atom_density ! atom density of a nuclide + integer :: ipol, iazi, npol, nazi + integer :: imu + real(8) :: norm + integer :: mat_max_order, order, l + real(8), allocatable :: temp_mult(:,:,:,:) + real(8), allocatable :: temp_energy(:,:,:,:) + real(8), allocatable :: scatt_coeffs(:,:,:,:,:) + + ! Initialize error data + error_code = 0 + error_text = '' + + ! Get the number of each polar and azi angles and make sure all the + ! Nuclide_Angle types have the same number of these angles + npol = -1 + nazi = -1 + do i = 1, mat % n_nuclides + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (Nuclide_Angle) + if (npol == -1) then + npol = nuc % Npol + nazi = nuc % Nazi + allocate(this % polar(npol)) + this % polar = nuc % polar + allocate(this % azimuthal(nazi)) + this % azimuthal = nuc % azimuthal + else + if ((npol /= nuc % Npol) .or. (nazi /= nuc % Nazi)) then + error_code = 1 + error_text = "All Angular Data Must Be Same Length!" + end if + end if + end select + end do + + ! If we have tabular only data, then make sure all datasets have same size + if (scatt_type == ANGLE_HISTOGRAM) then + ! Check all scattering data of same size + order = nuclides(mat % nuclide(1)) % obj % order + do i = 2, mat % n_nuclides + if (order /= nuclides(mat % nuclide(i)) % obj % order) then + error_code = 1 + error_text = "All Histogram Scattering Entries Must Be Same Length!" + return + end if + end do + ! Ok, got our order, store it + this % order = order + + ! Allocate stuff for later + allocate(scatt_coeffs(order, groups, groups, nazi, npol)) + scatt_coeffs = ZERO + allocate(this % scatter(nazi, npol)) + do ipol = 1, npol + do iazi = 1, nazi + allocate(ScattData_Histogram :: this % scatter(iazi, ipol) % obj) + end do + end do + + else if (scatt_type == ANGLE_TABULAR) then + ! Check all scattering data of same size + order = nuclides(mat % nuclide(1)) % obj % order + do i = 2, mat % n_nuclides + if (order /= nuclides(mat % nuclide(i)) % obj % order) then + error_code = 1 + error_text = "All Tabular Scattering Entries Must Be Same Length!" + return + end if + end do + ! Ok, got our order, store it + this % order = order + + ! Allocate stuff for later + allocate(scatt_coeffs(order, groups, groups, nazi, npol)) + scatt_coeffs = ZERO + allocate(this % scatter(nazi, npol)) + do ipol = 1, npol + do iazi = 1, nazi + allocate(ScattData_Tabular :: this % scatter(iazi, ipol) % obj) + end do + end do + + else if (scatt_type == ANGLE_LEGENDRE) then + ! Otherwise find the maximum scattering order + ! Need to determine the maximum scattering order of all data in this material + mat_max_order = 0 + do i = 1, mat % n_nuclides + if (nuclides(mat % nuclide(i)) % obj % order > mat_max_order) then + mat_max_order = nuclides(mat % nuclide(i)) % obj % order + end if + end do + + ! Now need to compare this material maximum scattering order with + ! the problem wide max scatt order and use whichever is lower + order = min(mat_max_order, max_order) + this % order = order + 1 + + ! Now we can allocate our scatt_coeffs object accordingly + allocate(scatt_coeffs(order + 1, groups, groups, nazi, npol)) + scatt_coeffs = ZERO + allocate(this % scatter(nazi, npol)) + do ipol = 1, npol + do iazi = 1, nazi + if (legendre_mu_points == 1) then + allocate(ScattData_Legendre :: this % scatter(iazi, ipol) % obj) + else + allocate(ScattData_Tabular :: this % scatter(iazi, ipol) % obj) + end if + end do + end do + end if + + ! Allocate and initialize data within macro_xs(i_mat) object + allocate(this % total(groups,nazi,npol)) + this % total = ZERO + allocate(this % absorption(groups,nazi,npol)) + this % absorption = ZERO + allocate(this % fission(groups,nazi,npol)) + this % fission = ZERO + if (get_kfiss) then + allocate(this % k_fission(groups,nazi,npol)) + this % k_fission = ZERO + end if + allocate(this % nu_fission(groups,nazi,npol)) + this % nu_fission = ZERO + allocate(this % chi(groups, groups, nazi, npol)) + this % chi = ZERO + allocate(temp_energy(groups,groups,nazi,npol)) + temp_energy = ZERO + allocate(temp_mult(groups,groups,nazi,npol)) + temp_mult = ZERO + allocate(this % scattxs(groups,nazi,npol)) + + ! Add contribution from each nuclide in material + do i = 1, mat % n_nuclides + ! Copy atom density of nuclide in material + atom_density = mat % atom_density(i) + + ! Perform our operations which depend upon the type + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (Nuclide_Iso) + error_code = 1 + error_text = "Invalid Passing of Nuclide_Iso to MacroXS_Angle Object" + return + type is (Nuclide_Angle) + ! Add contributions to total, absorption, and fission data (if necessary) + this % total = this % total + atom_density * nuc % total + this % absorption = this % absorption + & + atom_density * nuc % absorption + if (nuc % fissionable) then + if (allocated(nuc % chi)) then + do gin = 1, groups + do gout = 1, groups + this % chi(gout,gin,:,:) = this % chi(gout,gin,:,:) + atom_density * & + nuc % chi(gout,:,:) * nuc % nu_fission(gin,1,:,:) + end do + end do + this % nu_fission = this % nu_fission + atom_density * & + nuc % nu_fission(:,1,:,:) + else + this % chi = this % chi + atom_density * nuc % nu_fission + do gin = 1, groups + this % nu_fission(gin,:,:) = this % nu_fission(gin,:,:) + atom_density * & + sum(nuc % nu_fission(:,gin,:,:),dim=1) + end do + end if + this % fission = this % fission + atom_density * nuc % fission + if (get_kfiss) then + this % k_fission = this % k_fission + atom_density * nuc % k_fission + end if + end if + + ! Now time to do the scattering + do gin = 1, groups + do gout = 1, groups + if (scatt_type == ANGLE_HISTOGRAM .or. scatt_type == ANGLE_TABULAR) then + ! Transfer matrix + temp_energy(gout,gin,:,:) = temp_energy(gout,gin,:,:) + atom_density * & + sum(nuc % scatter(gout,gin,:,:,:),dim=1) + + ! Determine the angular distribution + do imu = 1, order + scatt_coeffs(imu,gout,gin,:,:) = scatt_coeffs(imu,gout,gin,:,:) + & + nuc % scatter(gout,gin,imu,:,:) * & + atom_density + end do + else if (scatt_type == ANGLE_LEGENDRE) then + ! Transfer matrix + temp_energy(gout,gin,:,:) = temp_energy(gout,gin,:,:) + atom_density * & + nuc % scatter(gout,gin,1,:,:) + + ! Determine the angular distribution coefficients so we can later + ! expand do the complete distribution + do l = 1, min(nuc % order, order) + 1 + scatt_coeffs(l, gout, gin,:,:) = scatt_coeffs(l, gout, gin,:,:) + & + nuc % scatter(gout,gin,l,:,:) * & + atom_density + end do + end if + + ! Multiplicity matrix + temp_mult(gout,gin,:,:) = temp_mult(gout,gin,:,:) + atom_density * & + nuc % mult(gout,gin,:,:) + end do + end do + end select + end do + + ! Store the scattering xs + if (scatt_type == ANGLE_HISTOGRAM .or. scatt_type == ANGLE_TABULAR) then + this % scattxs(:,:,:) = sum(sum(scatt_coeffs(:,:,:,:,:),dim=1),dim=1) + else if (scatt_type == ANGLE_LEGENDRE) then + this % scattxs(:,:,:) = sum(scatt_coeffs(1,:,:,:,:),dim=1) + end if + + ! Normalize the scatt_coeffs + do ipol = 1, npol + do iazi = 1, nazi + do gin = 1, groups + do gout = 1, groups + if (scatt_type == ANGLE_HISTOGRAM .or. scatt_type == ANGLE_TABULAR) then + norm = sum(scatt_coeffs(:,gout,gin,iazi,ipol)) + else if (scatt_type == ANGLE_LEGENDRE) then + norm = scatt_coeffs(1,gout,gin,iazi,ipol) + end if + if (norm /= ZERO) then + scatt_coeffs(:,gout,gin,iazi,ipol) = & + scatt_coeffs(:,gout,gin,iazi,ipol) / norm + end if + end do + ! Now normalize temp_energy (outgoing scattering energy probabilities) + norm = sum(temp_energy(:,gin,iazi,ipol)) + if (norm > ZERO) then + temp_energy(:,gin,iazi,ipol) = temp_energy(:,gin,iazi,ipol) / norm + end if + end do + + if (scatt_type == ANGLE_LEGENDRE .and. legendre_mu_points /= 1) then + call this % scatter(iazi, ipol) % obj % init(legendre_mu_points, & + temp_energy(:,:,iazi,ipol), temp_mult(:,:,iazi,ipol), & + scatt_coeffs(:,:,:,iazi,ipol)) + else + call this % scatter(iazi, ipol) % obj % init(this % order, & + temp_energy(:,:,iazi,ipol), temp_mult(:,:,iazi,ipol), & + scatt_coeffs(:,:,:,iazi,ipol)) + end if + + end do + end do + + ! Now go through and normalize chi + if (mat % fissionable) then + do ipol = 1, npol + do iazi = 1, nazi + do gin = 1, groups + ! Normalize Chi + norm = sum(this % chi(:,gin,iazi,ipol)) + if (norm > ZERO) then + this % chi(:,gin,iazi,ipol) = this % chi(:,gin,iazi,ipol) / norm + end if + end do + end do + end do + end if + + ! Deallocate temporaries for the next material + deallocate(scatt_coeffs, temp_energy, temp_mult) + + end subroutine macroxs_angle_init + +!=============================================================================== +! MACROXS*_CLEAR resets and deallocates data in MacroXS. +!=============================================================================== + + subroutine macroxs_iso_clear(this) + + class(MacroXS_Iso), intent(inout) :: this ! The MacroXS to clear + + if (allocated(this % total)) then + deallocate(this % total, this % absorption, & + this % nu_fission, this % fission) + end if + + if (allocated(this % k_fission)) then + deallocate(this % k_fission) + end if + + call this % scatter % clear() + + if (allocated(this % chi)) then + deallocate(this % chi) + end if + + end subroutine macroxs_iso_clear + + subroutine macroxs_angle_clear(this) + + class(MacroXS_Angle), intent(inout) :: this ! The MacroXS to clear + integer :: i, j + + if (allocated(this % total)) then + deallocate(this % total, this % absorption, & + this % nu_fission, this % fission) + end if + + if (allocated(this % k_fission)) then + deallocate(this % k_fission) + end if + + do i = 1, size(this % scatter,dim=2) + do j = 1, size(this % scatter,dim=1) + call this % scatter(j,i) % obj % clear() + end do + end do + if (allocated(this % scatter)) then + deallocate(this % scatter) + end if + + if (allocated(this % chi)) then + deallocate(this % chi) + end if + + end subroutine macroxs_angle_clear + +!=============================================================================== +! MACROXS_*_SIZE Finds the size of the data in MacroXS_Base, MacroXS_Iso, +! or MacroXS_Angle +!=============================================================================== + + subroutine macroxs_iso_size(this, size_total, size_scatt, size_fission) + class(MacroXS_Iso), intent(in) :: this + integer, intent(out) :: size_total ! Total Data Size + integer, intent(out) :: size_scatt ! Scattering Data Size + integer, intent(out) :: size_fission ! Fission Data Size + + integer :: groups + + groups = size(this % total, dim=1) + + ! Size Information On Each Reaction + ! Sum up for total, absorption, nu_scatter, nu_fission, fission + size_total = groups * 8 * (1 + 1 + 1 + 1 + 1) + ! Now do k_fission + ! Check k_fission + if (allocated (this % k_fission)) then + size_total = size_total + groups * 8 + end if + + ! Calculate chi data size + size_fission = 0 + if (allocated(this % chi)) then + size_fission = size_fission + 8 * size(this % chi) + end if + + ! Calculate Scatter Data Size + size_scatt = size(this % scatter % energy) + + ! Calculate Total Memory + size_total = size_total + size_fission + size_scatt + + end subroutine macroxs_iso_size + + subroutine macroxs_angle_size(this, size_total, size_scatt, size_fission) + class(MacroXS_Angle), intent(in) :: this + integer, intent(out) :: size_total ! Total Data Size + integer, intent(out) :: size_scatt ! Scattering Data Size + integer, intent(out) :: size_fission ! Fission Data Size + + integer :: groups + integer :: tot_angle + + groups = size(this % total, dim=2) + tot_angle = size(this % total, dim=1) + + ! Size Information On Each Reaction + ! Sum up for total, absorption, nu_scatter, nu_fission, fission + size_total = groups * 8 * (1 + 1 + 1 + 1 + 1) * tot_angle + ! Now do k_fission + ! Check k_fission + if (allocated (this % k_fission)) then + size_total = size_total + groups * 8 * tot_angle + end if + + ! Calculate chi data size + size_fission = 0 + if (allocated(this % chi)) then + size_fission = size_fission + 8 * size(this % chi) + end if + + ! Calculate Scatter Data Size + size_scatt = 0 + + ! Calculate Total Memory + size_total = size_total + size_fission + size_scatt + + end subroutine macroxs_angle_size + +!=============================================================================== +! MACROXS_*_GET_XS returns the requested data type +!=============================================================================== + + function macroxs_iso_get_xs(this, g, xstype, uvw) result(xs) + class(MacroXS_Iso), intent(in) :: this ! The MacroXS to initialize + integer, intent(in) :: g ! Incoming Energy group + character(*) , intent(in) :: xstype ! Type of xs requested + real(8), optional, intent(in) :: uvw(3) ! Requested Angle + real(8) :: xs ! Requested x/s + + select case(xstype) + case('total') + xs = this % total(g) + case('absorption') + xs = this % absorption(g) + case('fission') + xs = this % fission(g) + case('k_fission') + xs = this % k_fission(g) + case('nu_fission') + xs = this % nu_fission(g) + case('scatter') + xs = this % scattxs(g) + end select + + end function macroxs_iso_get_xs + + function macroxs_angle_get_xs(this, g, xstype, uvw) result(xs) + class(MacroXS_Angle), intent(in) :: this ! The MacroXS to initialize + integer, intent(in) :: g ! Incoming Energy group + character(*) , intent(in) :: xstype ! Type of xs requested + real(8), optional, intent(in) :: uvw(3) ! Requested Angle + real(8) :: xs ! Requested x/s + + integer :: iazi, ipol + + if (present(uvw)) then + call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) + select case(xstype) + case('total') + xs = this % total(g,iazi,ipol) + case('absorption') + xs = this % absorption(g,iazi,ipol) + case('fission') + xs = this % fission(g,iazi,ipol) + case('k_fission') + xs = this % k_fission(g,iazi,ipol) + case('nu_fission') + xs = this % nu_fission(g,iazi,ipol) + case('scatter') + xs = this % scattxs(g,iazi,ipol) + end select + end if + + end function macroxs_angle_get_xs + +!=============================================================================== +! THIN_GRID thins an (x,y) set while also thinning an associated y2 +!=============================================================================== + + subroutine thin_grid(xout, yout, yout2, tol, compression, maxerr) + real(8), allocatable, intent(inout) :: xout(:) ! Resultant x grid + real(8), allocatable, intent(inout) :: yout(:) ! Resultant y values + real(8), allocatable, intent(inout) :: yout2(:) ! Secondary y values + real(8), intent(in) :: tol ! Desired fractional error to maintain + real(8), intent(out) :: compression ! Data reduction fraction + real(8), intent(inout) :: maxerr ! Maximum error due to compression + + real(8), allocatable :: xin(:) ! Incoming x grid + real(8), allocatable :: yin(:) ! Incoming y values + real(8), allocatable :: yin2(:) ! Secondary Incoming y values + integer :: k, klo, khi + integer :: all_ok + real(8) :: x1, y1, x2, y2, x, y, testval + integer :: num_keep, remove_it + real(8) :: initial_size + real(8) :: error + real(8) :: x_frac + + initial_size = real(size(xout), 8) + + allocate(xin(size(xout))) + xin = xout + allocate(yin(size(yout))) + yin = yout + allocate(yin2(size(yout2))) + yin2 = yout2 + + all_ok = size(yin) + maxerr = 0.0_8 + + ! This loop will step through each entry in dim==3 and check to see if + ! all of the values in other 2 dims can be replaced with linear interp. + ! If not, the value will be saved to a new array, if so, it will be + ! skipped. + + xout = 0.0_8 + yout = 0.0_8 + + ! Keep first point's data + xout(1) = xin(1) + yout(1) = yin(1) + yout2(1) = yin2(1) + + ! Initialize data + num_keep = 1 + klo = 1 + khi = 3 + k = 2 + do while (khi <= size(xin)) + remove_it = 0 + x1 = xin(klo) + x2 = xin(khi) + x = xin(k) + x_frac = 1.0_8 / (x2 - x1) * (x - x1) ! Linear interp. + + ! Check for removal. Otherwise, it stays. This is accomplished by leaving + ! remove_it as 0, entering the else portion of if(remove_it==all_ok) + y1 = yin(klo) + y2 = yin(khi) + y = yin(k) + + testval = y1 + (y2 - y1) * x_frac + error = abs(testval - y) + if (y /= 0.0_8) then + error = error / y + end if + if (error <= tol) then + remove_it = remove_it + 1 + if (error > maxerr) then + maxerr = abs(testval - y) + end if + end if + ! Now place the point in to the proper bin and advance iterators. + if (remove_it /= 0) then + ! Then don't put it in the new grid but advance iterators + k = k + 1 + khi = khi + 1 + else + ! Put it in new grid and advance iterators accordingly + num_keep = num_keep + 1 + xout(num_keep) = xin(k) + yout(num_keep) = yin(k) + yout2(num_keep) = yin2(k) + klo = k + k = k + 1 + khi = khi + 1 + end if + end do + ! Save the last point's data + num_keep = num_keep + 1 + xout(num_keep) = xin(size(xin)) + yout(num_keep) = yin(size(xin)) + yout2(num_keep) = yin2(size(xin)) + + ! Finally, xout and yout were sized to match xin and yin since we knew + ! they would be no larger than those. Now we must resize these arrays + ! and copy only the useful data in. Will use xin/yin for temp arrays. + xin = xout(1:num_keep) + yin = yout(1:num_keep) + yin2 = yout2(1:num_keep) + + deallocate(xout) + deallocate(yout) + deallocate(yout2) + allocate(xout(num_keep)) + allocate(yout(size(yin))) + allocate(yout2(size(yin2))) + + xout = xin(1:num_keep) + yout = yin(1:num_keep) + yout2 = yin2(1:num_keep) + + ! Clean up + deallocate(xin) + deallocate(yin) + deallocate(yin2) + + compression = (initial_size - real(size(xout),8)) / initial_size + + end subroutine thin_grid + +end module macroxs_header diff --git a/src/math.F90 b/src/math.F90 index 6b96baa0d9..9ca7a30c7c 100644 --- a/src/math.F90 +++ b/src/math.F90 @@ -1,7 +1,6 @@ module math use constants - use random_lcg, only: prn implicit none @@ -558,51 +557,43 @@ contains end function calc_rn !=============================================================================== -! 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. +! EXPAND_HARMONIC expands a given series of harmonics !=============================================================================== + pure function expand_harmonic(data, order, uvw) result(val) + real(8), intent(in) :: data(:) + integer, intent(in) :: order + real(8), intent(in) :: uvw(3) + real(8) :: val - function maxwell_spectrum(T) result(E_out) + integer :: l, lm_lo, lm_hi - real(8), intent(in) :: T ! tabulated function of incoming E - real(8) :: E_out ! sampled energy + val = data(1) + lm_lo = 2 + lm_hi = 4 + do l = 1, order - 1 + val = val + sqrt(TWO * real(l,8) + ONE) * & + dot_product(calc_rn(l,uvw), data(lm_lo:lm_hi)) + lm_lo = lm_hi + 1 + lm_hi = lm_lo + 2 * (l + 1) + end do - 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 + end function expand_harmonic !=============================================================================== -! 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). +! EVALUATE_LEGENDRE !=============================================================================== + pure function evaluate_legendre(data, x) result(val) + real(8), intent(in) :: data(:) + real(8), intent(in) :: x + real(8) :: val - function watt_spectrum(a, b) result(E_out) + integer :: l - real(8), intent(in) :: a ! Watt parameter a - real(8), intent(in) :: b ! Watt parameter b - real(8) :: E_out ! energy of emitted neutron + val = 0.5_8 * data(1) + do l = 1, size(data) - 1 + val = val + (real(l,8) + 0.5_8) * data(l + 1) * calc_pn(l,x) + end do - 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 function evaluate_legendre end module math diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 new file mode 100644 index 0000000000..64c5dcce7d --- /dev/null +++ b/src/mgxs_data.F90 @@ -0,0 +1,650 @@ +module mgxs_data + +use constants + use error, only: fatal_error, warning + use global + use list_header, only: ListInt + use macroxs_header + use material_header, only: Material + use nuclide_header + use output, only: write_message + use set_header, only: SetChar + use simple_string, only: to_lower + use xml_interface + + implicit none + +contains + +!=============================================================================== +! READ_XS reads all the cross sections for the problem and stores them in +! nuclides and sab_tables arrays +!=============================================================================== + + subroutine read_mgxs() + + integer :: i ! index in materials array + integer :: j ! index over nuclides in material + integer :: i_listing ! index in xs_listings array + integer :: i_nuclide ! index in nuclides + character(12) :: name ! name of isotope, e.g. 92235.03c + character(12) :: alias ! alias of isotope, e.g. U-235.03c + integer :: representation ! Data representation + type(Material), pointer :: mat + class(Nuclide_MG), pointer :: nuc + type(SetChar) :: already_read + type(Node), pointer :: doc => null() + type(Node), pointer :: node_xsdata + type(NodeList), pointer :: node_xsdata_list => null() + logical :: file_exists + integer :: error_code + character(MAX_LINE_LEN) :: error_text, temp_str + logical :: get_kfiss + integer :: l + + ! Check if cross_sections.xml exists + inquire(FILE=path_cross_sections, EXIST=file_exists) + if (.not. file_exists) then + ! Could not find cross_sections.xml file + call fatal_error("Cross sections XML file '" & + &// trim(path_cross_sections) // "' does not exist!") + end if + + call write_message("Loading Cross Section Data...", 5) + + ! Parse cross_sections.xml file + call open_xmldoc(doc, path_cross_sections) + + ! Get node list of all + call get_node_list(doc, "xsdata", node_xsdata_list) + n_listings = get_list_size(node_xsdata_list) + + ! allocate arrays for ACE table storage and cross section cache + allocate(nuclides_MG(n_nuclides_total)) + + ! Find out if we need kappa fission (are there any k_fiss tallies?) + get_kfiss = .false. + do i = 1, n_tallies + do l = 1, tallies(i) % n_score_bins + if (tallies(i) % score_bins(l) == SCORE_KAPPA_FISSION) then + get_kfiss = .true. + exit + end if + end do + if (get_kfiss) & + exit + end do + + ! ========================================================================== + ! READ ALL ACE CROSS SECTION TABLES + + ! Loop over all files + MATERIAL_LOOP: do i = 1, n_materials + mat => materials(i) + + NUCLIDE_LOOP: do j = 1, mat % n_nuclides + name = mat % names(j) + + if (.not. already_read % contains(name)) then + i_listing = xs_listing_dict % get_key(to_lower(name)) + i_nuclide = mat % nuclide(j) + name = xs_listings(i_listing) % name + alias = xs_listings(i_listing) % alias + + ! Keep track of what listing is associated with this nuclide + nuc => nuclides_MG(i_nuclide) % obj + + ! Get pointer to xsdata table XML node + call get_list_item(node_xsdata_list, i_listing, node_xsdata) + + call write_message("Loading " // trim(name) // " Data...", 5) + + ! First find out the data representation + if (check_for_node(node_xsdata, "representation")) then + call get_node_value(node_xsdata, "representation", temp_str) + temp_str = trim(to_lower(temp_str)) + if (temp_str == 'isotropic' .or. temp_str == 'iso') then + representation = ISOTROPIC + else if (temp_str == 'angle') then + representation = ANGLE + else + call fatal_error("Invalid Data Representation!") + end if + else + ! Default to isotropic representation + representation = ISOTROPIC + end if + + ! Now allocate accordingly + select case(representation) + case(ISOTROPIC) + allocate(Nuclide_Iso :: nuclides_MG(i_nuclide) % obj) + case(ANGLE) + allocate(Nuclide_Angle :: nuclides_MG(i_nuclide) % obj) + end select + + ! Now read in the data specific to the type we just declared + call nuclide_mg_init(nuclides_MG(i_nuclide) % obj, node_xsdata, & + energy_groups, get_kfiss, error_code, & + error_text) + + ! Handle any errors + if (error_code /= 0) then + call fatal_error(trim(error_text)) + end if + + ! Add name and alias to dictionary + call already_read % add(name) + call already_read % add(alias) + end if + end do NUCLIDE_LOOP + end do MATERIAL_LOOP + + ! Avoid some valgrind leak errors + call already_read % clear() + + ! Loop around material + MATERIAL_LOOP3: do i = 1, n_materials + + ! Get material + mat => materials(i) + + ! Loop around nuclides in material + NUCLIDE_LOOP2: do j = 1, mat % n_nuclides + ! Get nuclide + nuc => nuclides_MG(mat % nuclide(j)) % obj + if (nuc % fissionable) then + mat % fissionable = .true. + end if + if (mat % fissionable) then + exit NUCLIDE_LOOP2 + end if + + end do NUCLIDE_LOOP2 + end do MATERIAL_LOOP3 + + end subroutine read_mgxs + +!=============================================================================== +! SAME_NUCLIDE_LIST creates a linked list for each nuclide containing the +! indices in the nuclides array of all other instances of that nuclide. For +! example, the same nuclide may exist at multiple temperatures resulting +! in multiple entries in the nuclides array for a single zaid number. +!=============================================================================== + + subroutine same_nuclide_mg_list() + + integer :: i ! index in nuclides array + integer :: j ! index in nuclides array + + do i = 1, n_nuclides_total + do j = 1, n_nuclides_total + if (nuclides_MG(i) % obj % zaid == nuclides_MG(j) % obj % zaid) then + call nuclides_MG(i) % obj % nuc_list % append(j) + end if + end do + end do + + end subroutine same_nuclide_mg_list + +!=============================================================================== +! NUCLIDE_*_INIT reads in the data from the XML file, as already accessed +!=============================================================================== + + subroutine nuclide_mg_init(this, node_xsdata, groups, get_kfiss, & + error_code, error_text) + class(Nuclide_MG), intent(inout) :: this ! Working Object + type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml + integer, intent(in) :: groups ! Number of Energy groups + logical, intent(in) :: get_kfiss ! Need Kappa-Fission? + integer, intent(inout) :: error_code ! Code signifying error + character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print + + character(MAX_LINE_LEN) :: temp_str + + ! Initialize error data + error_code = 0 + error_text = '' + + ! Load the data + if (check_for_node(node_xsdata, "awr")) then + call get_node_value(node_xsdata, "awr", this % awr) + else + this % awr = ONE + end if + if (check_for_node(node_xsdata, "zaid")) then + call get_node_value(node_xsdata, "zaid", this % zaid) + else + this % zaid = -1 + end if + if (check_for_node(node_xsdata, "scatt_type")) then + call get_node_value(node_xsdata, "scatt_type", temp_str) + temp_str = trim(to_lower(temp_str)) + if (temp_str == 'legendre') then + this % scatt_type = ANGLE_LEGENDRE + else if (temp_str == 'tabular') then + this % scatt_type = ANGLE_HISTOGRAM + else + error_code = 1 + error_text = "Invalid Scatt Type Option!" + return + end if + else + this % scatt_type = ANGLE_LEGENDRE + end if + if (check_for_node(node_xsdata, "order")) then + call get_node_value(node_xsdata, "order", this % order) + else + error_code = 1 + error_text = "Order Must Be Provided!" + return + end if + if (check_for_node(node_xsdata, "fissionable")) then + call get_node_value(node_xsdata, "fissionable", temp_str) + temp_str = to_lower(temp_str) + if (trim(temp_str) == 'true' .or. trim(temp_str) == '1') then + this % fissionable = .true. + else + this % fissionable = .false. + end if + else + error_code = 1 + error_text = "Fissionable element must be set!" + return + end if + + select type(this) + type is (Nuclide_Iso) + call nuclide_iso_init(this, node_xsdata, groups, get_kfiss, & + error_code, error_text) + type is (Nuclide_Angle) + call nuclide_angle_init(this, node_xsdata, groups, get_kfiss, & + error_code, error_text) + end select + + end subroutine nuclide_mg_init + + subroutine nuclide_iso_init(this, node_xsdata, groups, get_kfiss, & + error_code, error_text) + class(Nuclide_Iso), intent(inout) :: this ! Working Object + type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml + integer, intent(in) :: groups ! Number of Energy groups + logical, intent(in) :: get_kfiss ! Need Kappa-Fission? + integer, intent(inout) :: error_code ! Code signifying error + character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print + + real(8), allocatable :: temp_arr(:) + integer :: arr_len + integer :: order_dim + + ! Load the more specific data + if (this % fissionable) then + allocate(this % fission(groups)) + + if (check_for_node(node_xsdata, "chi")) then + ! Get chi + allocate(this % chi(groups)) + call get_node_array(node_xsdata, "chi", this % chi) + + ! Get nu_fission (as a vector) + if (check_for_node(node_xsdata, "nu_fission")) then + allocate(temp_arr(groups * 1)) + call get_node_array(node_xsdata, "nu_fission", temp_arr) + allocate(this % nu_fission(groups, 1)) + this % nu_fission = reshape(temp_arr, (/groups, 1/)) + deallocate(temp_arr) + else + error_code = 1 + error_text = "If fissionable, must provide nu_fission!" + return + end if + + else + ! Get nu_fission (as a matrix) + if (check_for_node(node_xsdata, "nu_fission")) then + + allocate(temp_arr(groups*groups)) + call get_node_array(node_xsdata, "nu_fission", temp_arr) + allocate(this % nu_fission(groups, groups)) + this % nu_fission = reshape(temp_arr, (/groups, groups/)) + deallocate(temp_arr) + else + error_code = 1 + error_text = "If fissionable, must provide nu_fission!" + return + end if + end if + if (check_for_node(node_xsdata, "fission")) then + call get_node_array(node_xsdata, "fission", this % fission) + else + error_code = 1 + error_text = "If fissionable, must provide fission!" + return + end if + if (get_kfiss) then + allocate(this % k_fission(groups)) + if (check_for_node(node_xsdata, "k_fission")) then + call get_node_array(node_xsdata, "k_fission", this % k_fission) + else + error_code = 1 + error_text = "k_fission data missing, required due to kappa-fission& + & tallies in tallies.xml file!" + return + end if + end if + end if + + allocate(this % absorption(groups)) + if (check_for_node(node_xsdata, "absorption")) then + call get_node_array(node_xsdata, "absorption", this % absorption) + else + error_code = 1 + error_text = "Must provide absorption!" + return + end if + + if (this % scatt_type == ANGLE_LEGENDRE) then + order_dim = this % order + 1 + else if (this % scatt_type == ANGLE_HISTOGRAM) then + order_dim = this % order + end if + + allocate(this % scatter(groups, groups, order_dim)) + if (check_for_node(node_xsdata, "scatter")) then + allocate(temp_arr(groups * groups * order_dim)) + call get_node_array(node_xsdata, "scatter", temp_arr) + this % scatter = reshape(temp_arr, (/groups, groups, order_dim/)) + deallocate(temp_arr) + else + error_code = 1 + error_text = "Must provide scatter!" + return + end if + + + allocate(this % total(groups)) + if (check_for_node(node_xsdata, "total")) then + call get_node_array(node_xsdata, "total", this % total) + else + this % total = this % absorption + sum(this%scatter(:,:,1),dim=1) + end if + + ! Get Mult Data + allocate(this % mult(groups, groups)) + if (check_for_node(node_xsdata, "multiplicity")) then + arr_len = get_arraysize_double(node_xsdata, "multiplicity") + if (arr_len == groups * groups) then + allocate(temp_arr(arr_len)) + call get_node_array(node_xsdata, "multiplicity", temp_arr) + this % mult = reshape(temp_arr, (/groups, groups/)) + deallocate(temp_arr) + else + error_code = 1 + error_text = "Multiplicity Length Not Same as number of groups squared!" + return + end if + else + this % mult = ONE + end if + + end subroutine nuclide_iso_init + + subroutine nuclide_angle_init(this, node_xsdata, groups, get_kfiss, & + error_code, error_text) + class(Nuclide_Angle), intent(inout) :: this ! Working Object + type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml + integer, intent(in) :: groups ! Number of Energy groups + logical, intent(in) :: get_kfiss ! Need Kappa-Fission? + integer, intent(inout) :: error_code ! Code signifying error + character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print + + real(8), allocatable :: temp_arr(:) + integer :: arr_len + real(8) :: dangle + integer :: iangle + integer :: order_dim + + if (this % scatt_type == ANGLE_LEGENDRE) then + order_dim = this % order + 1 + else if (this % scatt_type == ANGLE_HISTOGRAM) then + order_dim = this % order + end if + + if (check_for_node(node_xsdata, "num_polar")) then + call get_node_value(node_xsdata, "num_polar", this % Npol) + else + error_code = 1 + error_text = "num_polar Must Be Provided!" + return + end if + + if (check_for_node(node_xsdata, "num_azimuthal")) then + call get_node_value(node_xsdata, "num_azimuthal", this % Nazi) + else + error_code = 1 + error_text = "num_azimuthal Must Be Provided!" + return + end if + + ! Load angle data, if present (else equally spaced) + allocate(this % polar(this % Npol)) + allocate(this % azimuthal(this % Nazi)) + if (check_for_node(node_xsdata, "polar")) then + error_code = 1 + error_text = "User-Specified polar angle bins not yet supported!" + return + call get_node_array(node_xsdata, "polar", this % polar) + else + dangle = PI / (real(this % Npol,8)) + do iangle = 1, this % Npol + this % polar(iangle) = (real(iangle,8) - 0.5_8) * dangle + end do + end if + if (check_for_node(node_xsdata, "azimuthal")) then + error_code = 1 + error_text = "User-Specified azimuthal angle bins not yet supported!" + return + call get_node_array(node_xsdata, "azimuthal", this % azimuthal) + else + dangle = TWO * PI / (real(this % Nazi,8)) + do iangle = 1, this % Nazi + this % azimuthal(iangle) = -PI + (real(iangle,8) - 0.5_8) * dangle + end do + end if + + ! Load the more specific data + if (this % fissionable) then + + if (check_for_node(node_xsdata, "chi")) then + ! Get chi + allocate(temp_arr(groups * this % Nazi * this % Npol)) + call get_node_array(node_xsdata, "chi", temp_arr) + allocate(this % chi(groups, this % Nazi, this % Npol)) + this % chi = reshape(temp_arr, (/groups, this % Nazi, this % Npol/)) + deallocate(temp_arr) + + ! Get nu_fission (as a vector) + if (check_for_node(node_xsdata, "nu_fission")) then + allocate(temp_arr(groups * this % Nazi * this % Npol)) + call get_node_array(node_xsdata, "nu_fission", temp_arr) + allocate(this % nu_fission(groups, 1, this % Nazi, this % Npol)) + this % nu_fission = reshape(temp_arr, (/groups, 1, this % Nazi, & + this % Npol/)) + deallocate(temp_arr) + else + error_code = 1 + error_text = "If fissionable, must provide nu_fission!" + return + end if + + else + ! Get nu_fission (as a matrix) + if (check_for_node(node_xsdata, "nu_fission")) then + + allocate(temp_arr(groups * this % Nazi * this % Npol)) + call get_node_array(node_xsdata, "nu_fission", temp_arr) + allocate(this % nu_fission(groups, groups, this % Nazi, this % Npol)) + this % nu_fission = reshape(temp_arr, (/groups, groups, & + this % Nazi, this % Npol/)) + deallocate(temp_arr) + else + error_code = 1 + error_text = "If fissionable, must provide nu_fission!" + return + end if + end if + if (check_for_node(node_xsdata, "fission")) then + allocate(temp_arr(groups * this % Nazi * this % Npol)) + call get_node_array(node_xsdata, "fission", temp_arr) + allocate(this % fission(groups, this % Nazi, this % Npol)) + this % fission = reshape(temp_arr, (/groups, this % Nazi, this % Npol/)) + deallocate(temp_arr) + else + error_code = 1 + error_text = "If fissionable, must provide fission!" + return + end if + if (get_kfiss) then + if (check_for_node(node_xsdata, "k_fission")) then + allocate(temp_arr(groups * this % Nazi * this % Npol)) + call get_node_array(node_xsdata, "k_fission", temp_arr) + allocate(this % k_fission(groups, this % Nazi, this % Npol)) + this % k_fission = reshape(temp_arr, (/groups, this % Nazi, this % Npol/)) + deallocate(temp_arr) + else + error_code = 1 + error_text = "k_fission data missing, required due to kappa-fission& + & tallies in tallies.xml file!" + return + end if + end if + end if + + if (check_for_node(node_xsdata, "absorption")) then + allocate(temp_arr(groups * this % Nazi * this % Npol)) + call get_node_array(node_xsdata, "absorption", temp_arr) + allocate(this % absorption(groups, this % Nazi, this % Npol)) + this % absorption = reshape(temp_arr, (/groups, this % Nazi, this % Npol/)) + deallocate(temp_arr) + else + error_code = 1 + error_text = "Must provide absorption!" + return + end if + + allocate(this % scatter(groups, groups, order_dim, this % Nazi, this % Npol)) + if (check_for_node(node_xsdata, "scatter")) then + allocate(temp_arr(groups * groups * order_dim * this % Nazi * this%Npol)) + call get_node_array(node_xsdata, "scatter", temp_arr) + this % scatter = reshape(temp_arr, (/groups, groups, order_dim, & + this%Nazi,this%Npol/)) + deallocate(temp_arr) + else + error_code = 1 + error_text = "Must provide scatter!" + return + end if + + if (check_for_node(node_xsdata, "total")) then + allocate(temp_arr(groups * this % Nazi * this % Npol)) + call get_node_array(node_xsdata, "total", temp_arr) + allocate(this % total(groups, this % Nazi, this % Npol)) + this % total = reshape(temp_arr, (/groups, this % Nazi, this % Npol/)) + deallocate(temp_arr) + else + this % total = this % absorption + sum(this%scatter(:,:,1,:,:),dim=1) + end if + + ! Get Mult Data + allocate(this % mult(groups, groups, this % Nazi, this % Npol)) + if (check_for_node(node_xsdata, "multiplicity")) then + arr_len = get_arraysize_double(node_xsdata, "multiplicity") + if (arr_len == groups * groups * this % Nazi * this % Npol) then + allocate(temp_arr(arr_len)) + call get_node_array(node_xsdata, "multiplicity", temp_arr) + this % mult = reshape(temp_arr, (/groups, groups, this % Nazi, this % Npol/)) + deallocate(temp_arr) + else + error_code = 1 + error_text = "Multiplicity Length Does Not Match!" + return + end if + else + this % mult = ONE + end if + + end subroutine nuclide_angle_init + + +!=============================================================================== +! CREATE_MACRO_XS generates the macroscopic x/s from the microscopic input data +!=============================================================================== + + subroutine create_macro_xs() + integer :: i_mat ! index in materials array + integer :: i ! loop index over nuclides + integer :: l ! Loop over score bins + type(Material), pointer :: mat ! current material + logical :: get_kfiss + integer :: error_code + character(MAX_LINE_LEN) :: error_text + integer :: representation + integer :: scatt_type + + ! Find out if we need kappa fission (are there any k_fiss tallies?) + get_kfiss = .false. + do i = 1, n_tallies + do l = 1, tallies(i) % n_score_bins + if (tallies(i) % score_bins(l) == SCORE_KAPPA_FISSION) then + get_kfiss = .true. + exit + end if + end do + if (get_kfiss) & + exit + end do + + allocate(macro_xs(n_materials)) + + do i_mat = 1, n_materials + mat => materials(i_mat) + + ! Check to see how our nuclides are represented + ! For now assume all are the same type + ! Therefore type(nuclides(1) % obj) dictates type(macroxs) + ! At the same time, we will find the scattering type, as that will dictate + ! how we allocate the scatter object within macroxs + scatt_type = ANGLE_LEGENDRE + select type(nuc => nuclides_MG(1) % obj) + type is (Nuclide_Iso) + representation = ISOTROPIC + if (nuc % scatt_type == ANGLE_HISTOGRAM) then + scatt_type = ANGLE_HISTOGRAM + end if + type is (Nuclide_Angle) + representation = ANGLE + if (nuc % scatt_type == ANGLE_HISTOGRAM) then + scatt_type = ANGLE_HISTOGRAM + end if + end select + + ! Now allocate accordingly + select case(representation) + case(ISOTROPIC) + allocate(MacroXS_Iso :: macro_xs(i_mat) % obj) + case(ANGLE) + allocate(MacroXS_Angle :: macro_xs(i_mat) % obj) + end select + + call macro_xs(i_mat) % obj % init(mat, nuclides_MG, energy_groups, & + get_kfiss, max_order, scatt_type, & + legendre_mu_points, error_code, & + error_text) + ! Handle any errors + if (error_code /= 0) then + call fatal_error(trim(error_text)) + end if + end do + end subroutine create_macro_xs + +end module mgxs_data \ No newline at end of file diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index cd83402a07..2910f63b19 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -9,7 +9,6 @@ module nuclide_header ! use math, only: calc_pn, calc_rn!, expand_harmonic !use scattdata_header use simple_string - ! use xml_interface implicit none @@ -106,13 +105,90 @@ module nuclide_header procedure, pass :: print => nuclide_ce_print end type Nuclide_CE -!=============================================================================== -! NUCLIDECONTAINER pointer array for storing Nuclides + type, abstract, extends(Nuclide_Base) :: Nuclide_MG + ! Scattering Order Information + integer :: order ! Order of data (Scattering for Nuclide_Iso, + ! Number of angles for all in Nuclide_Angle) + integer :: scatt_type ! either legendre or tabular. + + ! Type-Bound procedures + contains + procedure(nuclide_mg_get_xs_), deferred, pass :: get_xs ! Get the xs + end type Nuclide_MG + + abstract interface + function nuclide_mg_get_xs_(this, g, xstype, gout, uvw) result(xs) + import Nuclide_MG + class(Nuclide_MG), intent(in) :: this + integer, intent(in) :: g ! Incoming Energy group + character(*), intent(in) :: xstype ! Cross Section Type + integer, optional, intent(in) :: gout ! Outgoing Group + real(8), optional, intent(in) :: uvw(3) ! Requested Angle + real(8) :: xs ! Resultant xs + end function nuclide_mg_get_xs_ + end interface + + !=============================================================================== +! NUCLIDE_ISO contains the base MGXS data for a nuclide specifically for +! isotropically weighted MGXS !=============================================================================== - type NuclideContainer - class(Nuclide_Base), pointer :: obj - end type NuclideContainer + type, extends(Nuclide_MG) :: Nuclide_Iso + + ! Microscopic cross sections + real(8), allocatable :: total(:) ! total cross section + real(8), allocatable :: absorption(:) ! absorption cross section + real(8), allocatable :: scatter(:,:,:) ! scattering information + real(8), allocatable :: nu_fission(:,:) ! fission matrix (Gout x Gin) + real(8), allocatable :: k_fission(:) ! kappa-fission + real(8), allocatable :: fission(:) ! neutron production + real(8), allocatable :: chi(:) ! Fission Spectra + real(8), allocatable :: mult(:,:) ! Scatter multiplicity (Gout x Gin) + + ! Type-Bound procedures + contains + procedure, pass :: clear => nuclide_iso_clear ! Deallocates Nuclide + procedure, pass :: print => nuclide_iso_print ! Writes nuclide info + procedure, pass :: get_xs => nuclide_iso_get_xs ! Gets Size of Data w/in Object + end type Nuclide_Iso + +!=============================================================================== +! NUCLIDE_ANGLE contains the base MGXS data for a nuclide specifically for +! explicit angle-dependent weighted MGXS +!=============================================================================== + + type, extends(Nuclide_MG) :: Nuclide_Angle + + ! Microscopic cross sections. Dimensions are: (Npol, Nazi, Nl, Ng, Ng) + real(8), allocatable :: total(:,:,:) ! total cross section + real(8), allocatable :: absorption(:,:,:) ! absorption cross section + real(8), allocatable :: scatter(:,:,:,:,:) ! scattering information + real(8), allocatable :: nu_fission(:,:,:,:) ! fission matrix (Gout x Gin) + real(8), allocatable :: k_fission(:,:,:) ! kappa-fission + real(8), allocatable :: fission(:,:,:) ! neutron production + real(8), allocatable :: chi(:,:,:) ! Fission Spectra + real(8), allocatable :: mult(:,:,:,:) ! Scatter multiplicity (Gout x Gin) + + ! In all cases, right-most indices are theta, phi + integer :: Npol ! Number of polar angles + integer :: Nazi ! Number of azimuthal angles + real(8), allocatable :: polar(:) ! polar angles + real(8), allocatable :: azimuthal(:) ! azimuthal angles + + ! Type-Bound procedures + contains + procedure, pass :: clear => nuclide_angle_clear ! Deallocates Nuclide + procedure, pass :: print => nuclide_angle_print ! Gets Size of Data w/in Object + procedure, pass :: get_xs => nuclide_angle_get_xs ! Gets Size of Data w/in Object + end type Nuclide_Angle + +!=============================================================================== +! NUCLIDEMGCONTAINER pointer array for storing Nuclides +!=============================================================================== + + type NuclideMGContainer + class(Nuclide_MG), pointer :: obj + end type NuclideMGContainer !=============================================================================== ! NUCLIDE0K temporarily contains all 0K cross section data and other parameters @@ -193,7 +269,6 @@ module nuclide_header contains - !=============================================================================== ! NUCLIDE_*_CLEAR resets and deallocates data in Nuclide_Base, Nuclide_Iso ! or Nuclide_Angle @@ -260,122 +335,304 @@ module nuclide_header end subroutine nuclide_ce_clear + subroutine nuclide_iso_clear(this) + + class(Nuclide_Iso), intent(inout) :: this ! The Nuclide object to clear + + ! Clear the base object + call nuclide_base_clear_(this) + + ! Cler the extended information + if (allocated(this % total)) then + deallocate(this % total, this % absorption, this % scatter) + end if + if (allocated(this % fission)) then + deallocate(this % fission, this % nu_fission) + end if + if (allocated(this % k_fission)) then + deallocate(this % k_fission) + end if + if (allocated(this % chi)) then + deallocate(this % chi) + end if + if (allocated(this % mult)) then + deallocate(this % mult) + end if + + end subroutine nuclide_iso_clear + + subroutine nuclide_angle_clear(this) + + class(Nuclide_Angle), intent(inout) :: this ! The Nuclide object to clear + + ! Clear the base object + call nuclide_base_clear_(this) + + ! Cler the extended information + if (allocated(this % total)) then + deallocate(this % total, this % absorption, this % scatter) + end if + if (allocated(this % fission)) then + deallocate(this % fission, this % nu_fission) + end if + if (allocated(this % k_fission)) then + deallocate(this % k_fission) + end if + if (allocated(this % chi)) then + deallocate(this % chi) + end if + + if (allocated(this % polar)) then + deallocate(this % polar) + end if + if (allocated(this % azimuthal)) then + deallocate(this % azimuthal) + end if + if (allocated(this % mult)) then + deallocate(this % mult) + end if + + end subroutine nuclide_angle_clear + !=============================================================================== ! PRINT_NUCLIDE_* displays information about a continuous-energy neutron ! cross_section table and its reactions and secondary angle/energy distributions !=============================================================================== - subroutine nuclide_ce_print(this, unit) + subroutine nuclide_ce_print(this, unit) - class(Nuclide_CE), intent(in) :: this - integer, optional, intent(in) :: unit + class(Nuclide_CE), intent(in) :: this + integer, optional, intent(in) :: unit - integer :: i ! loop index over nuclides - integer :: unit_ ! unit to write to - integer :: size_total ! memory used by nuclide (bytes) - integer :: size_angle_total ! total memory used for angle dist. (bytes) - integer :: size_energy_total ! total memory used for energy dist. (bytes) - integer :: size_xs ! memory used for cross-sections (bytes) - integer :: size_angle ! memory used for an angle distribution (bytes) - integer :: size_energy ! memory used for a energy distributions (bytes) - integer :: size_urr ! memory used for probability tables (bytes) - character(11) :: law ! secondary energy distribution law - type(Reaction), pointer :: rxn => null() - type(UrrData), pointer :: urr => null() + integer :: i ! loop index over nuclides + integer :: unit_ ! unit to write to + integer :: size_total ! memory used by nuclide (bytes) + integer :: size_angle_total ! total memory used for angle dist. (bytes) + integer :: size_energy_total ! total memory used for energy dist. (bytes) + integer :: size_xs ! memory used for cross-sections (bytes) + integer :: size_angle ! memory used for an angle distribution (bytes) + integer :: size_energy ! memory used for a energy distributions (bytes) + integer :: size_urr ! memory used for probability tables (bytes) + character(11) :: law ! secondary energy distribution law + type(Reaction), pointer :: rxn => null() + type(UrrData), pointer :: urr => null() - ! set default unit for writing information - if (present(unit)) then - unit_ = unit - else - unit_ = OUTPUT_UNIT - end if - - ! Initialize totals - size_angle_total = 0 - size_energy_total = 0 - size_urr = 0 - size_xs = 0 - - ! Basic nuclide information - write(unit_,*) 'Nuclide ' // trim(this % name) - write(unit_,*) ' zaid = ' // trim(to_str(this % zaid)) - write(unit_,*) ' awr = ' // trim(to_str(this % awr)) - write(unit_,*) ' kT = ' // trim(to_str(this % kT)) - write(unit_,*) ' # of grid points = ' // trim(to_str(this % n_grid)) - write(unit_,*) ' Fissionable = ', this % fissionable - write(unit_,*) ' # of fission reactions = ' // trim(to_str(this % n_fission)) - write(unit_,*) ' # of reactions = ' // trim(to_str(this % n_reaction)) - - ! Information on each reaction - write(unit_,*) ' Reaction Q-value COM Law IE size(angle) size(energy)' - do i = 1, this % n_reaction - rxn => this % reactions(i) - - ! Determine size of angle distribution - if (rxn % has_angle_dist) then - size_angle = rxn % adist % n_energy * 16 + size(rxn % adist % data) * 8 + ! set default unit for writing information + if (present(unit)) then + unit_ = unit else - size_angle = 0 + unit_ = OUTPUT_UNIT end if - ! Determine size of energy distribution and law - if (rxn % has_energy_dist) then - size_energy = size(rxn % edist % data) * 8 - law = to_str(rxn % edist % law) - else - size_energy = 0 - law = 'None' + ! Initialize totals + size_angle_total = 0 + size_energy_total = 0 + size_urr = 0 + size_xs = 0 + + ! Basic nuclide information + write(unit_,*) 'Nuclide ' // trim(this % name) + write(unit_,*) ' zaid = ' // trim(to_str(this % zaid)) + write(unit_,*) ' awr = ' // trim(to_str(this % awr)) + write(unit_,*) ' kT = ' // trim(to_str(this % kT)) + write(unit_,*) ' # of grid points = ' // trim(to_str(this % n_grid)) + write(unit_,*) ' Fissionable = ', this % fissionable + write(unit_,*) ' # of fission reactions = ' // trim(to_str(this % n_fission)) + write(unit_,*) ' # of reactions = ' // trim(to_str(this % n_reaction)) + + ! Information on each reaction + write(unit_,*) ' Reaction Q-value COM Law IE size(angle) size(energy)' + do i = 1, this % n_reaction + rxn => this % reactions(i) + + ! Determine size of angle distribution + if (rxn % has_angle_dist) then + size_angle = rxn % adist % n_energy * 16 + size(rxn % adist % data) * 8 + else + size_angle = 0 + end if + + ! Determine size of energy distribution and law + if (rxn % has_energy_dist) then + size_energy = size(rxn % edist % data) * 8 + law = to_str(rxn % edist % law) + else + size_energy = 0 + law = 'None' + end if + + write(unit_,'(3X,A11,1X,F8.3,3X,L1,3X,A4,1X,I6,1X,I11,1X,I11)') & + reaction_name(rxn % MT), rxn % Q_value, rxn % scatter_in_cm, & + law(1:4), rxn % threshold, size_angle, size_energy + + ! Accumulate data size + size_xs = size_xs + (this % n_grid - rxn%threshold + 1) * 8 + size_angle_total = size_angle_total + size_angle + size_energy_total = size_energy_total + size_energy + end do + + ! Add memory required for summary reactions (total, absorption, fission, + ! nu-fission) + size_xs = 8 * this % n_grid * 4 + + ! Write information about URR probability tables + size_urr = 0 + if (this % urr_present) then + urr => this % urr_data + write(unit_,*) ' Unresolved resonance probability table:' + write(unit_,*) ' # of energies = ' // trim(to_str(urr % n_energy)) + write(unit_,*) ' # of probabilities = ' // trim(to_str(urr % n_prob)) + write(unit_,*) ' Interpolation = ' // trim(to_str(urr % interp)) + write(unit_,*) ' Inelastic flag = ' // trim(to_str(urr % inelastic_flag)) + write(unit_,*) ' Absorption flag = ' // trim(to_str(urr % absorption_flag)) + write(unit_,*) ' Multiply by smooth? ', urr % multiply_smooth + write(unit_,*) ' Min energy = ', trim(to_str(urr % energy(1))) + write(unit_,*) ' Max energy = ', trim(to_str(urr % energy(urr % n_energy))) + + ! Calculate memory used by probability tables and add to total + size_urr = urr % n_energy * (urr % n_prob * 6 + 1) * 8 end if - write(unit_,'(3X,A11,1X,F8.3,3X,L1,3X,A4,1X,I6,1X,I11,1X,I11)') & - reaction_name(rxn % MT), rxn % Q_value, rxn % scatter_in_cm, & - law(1:4), rxn % threshold, size_angle, size_energy + ! Calculate total memory + size_total = size_xs + size_angle_total + size_energy_total + size_urr - ! Accumulate data size - size_xs = size_xs + (this % n_grid - rxn%threshold + 1) * 8 - size_angle_total = size_angle_total + size_angle - size_energy_total = size_energy_total + size_energy - end do + ! Write memory used + write(unit_,*) ' Memory Requirements' + write(unit_,*) ' Cross sections = ' // trim(to_str(size_xs)) // ' bytes' + write(unit_,*) ' Secondary angle distributions = ' // & + trim(to_str(size_angle_total)) // ' bytes' + write(unit_,*) ' Secondary energy distributions = ' // & + trim(to_str(size_energy_total)) // ' bytes' + write(unit_,*) ' Probability Tables = ' // & + trim(to_str(size_urr)) // ' bytes' + write(unit_,*) ' Total = ' // trim(to_str(size_total)) // ' bytes' - ! Add memory required for summary reactions (total, absorption, fission, - ! nu-fission) - size_xs = 8 * this % n_grid * 4 + ! Blank line at end of nuclide + write(unit_,*) - ! Write information about URR probability tables - size_urr = 0 - if (this % urr_present) then - urr => this % urr_data - write(unit_,*) ' Unresolved resonance probability table:' - write(unit_,*) ' # of energies = ' // trim(to_str(urr % n_energy)) - write(unit_,*) ' # of probabilities = ' // trim(to_str(urr % n_prob)) - write(unit_,*) ' Interpolation = ' // trim(to_str(urr % interp)) - write(unit_,*) ' Inelastic flag = ' // trim(to_str(urr % inelastic_flag)) - write(unit_,*) ' Absorption flag = ' // trim(to_str(urr % absorption_flag)) - write(unit_,*) ' Multiply by smooth? ', urr % multiply_smooth - write(unit_,*) ' Min energy = ', trim(to_str(urr % energy(1))) - write(unit_,*) ' Max energy = ', trim(to_str(urr % energy(urr % n_energy))) + end subroutine nuclide_ce_print - ! Calculate memory used by probability tables and add to total - size_urr = urr % n_energy * (urr % n_prob * 6 + 1) * 8 - end if + subroutine nuclide_iso_print(this, unit) - ! Calculate total memory - size_total = size_xs + size_angle_total + size_energy_total + size_urr + class(Nuclide_Iso), intent(in) :: this + integer, optional, intent(in) :: unit - ! Write memory used - write(unit_,*) ' Memory Requirements' - write(unit_,*) ' Cross sections = ' // trim(to_str(size_xs)) // ' bytes' - write(unit_,*) ' Secondary angle distributions = ' // & - trim(to_str(size_angle_total)) // ' bytes' - write(unit_,*) ' Secondary energy distributions = ' // & - trim(to_str(size_energy_total)) // ' bytes' - write(unit_,*) ' Probability Tables = ' // & - trim(to_str(size_urr)) // ' bytes' - write(unit_,*) ' Total = ' // trim(to_str(size_total)) // ' bytes' - ! Blank line at end of nuclide - write(unit_,*) + end subroutine nuclide_iso_print - end subroutine nuclide_ce_print + subroutine nuclide_angle_print(this, unit) - end module nuclide_header \ No newline at end of file + class(Nuclide_Angle), intent(in) :: this + integer, optional, intent(in) :: unit + + + end subroutine nuclide_angle_print + +!=============================================================================== +! NUCLIDE_*_GET_XS Returns the requested data type +!=============================================================================== + + function nuclide_iso_get_xs(this, g, xstype, gout, uvw) result(xs) + class(Nuclide_Iso), intent(in) :: this + integer, intent(in) :: g ! Incoming Energy group + character(*), intent(in) :: xstype ! Cross Section Type + integer, optional, intent(in) :: gout ! Outgoing Group + real(8), optional, intent(in) :: uvw(3) ! Requested Angle + real(8) :: xs ! Resultant xs + + if (present(gout)) then + select case(xstype) + case('mult') + xs = this % mult(gout,g) + case('nu_fission') + xs = this % nu_fission(gout,g) + end select + else + select case(xstype) + case('total') + xs = this % total(g) + case('absorption') + xs = this % absorption(g) + case('fission') + xs = this % fission(g) + case('k_fission') + xs = this % k_fission(g) + case('chi') + xs = this % chi(g) + case('scatter') + xs = this % total(g) - this % absorption(g) + end select + end if + end function nuclide_iso_get_xs + + function nuclide_angle_get_xs(this, g, xstype, gout, uvw) result(xs) + class(Nuclide_Angle), intent(in) :: this + integer, intent(in) :: g ! Incoming Energy group + character(*), intent(in) :: xstype ! Cross Section Type + integer, optional, intent(in) :: gout ! Outgoing Group + real(8), optional, intent(in) :: uvw(3) ! Requested Angle + real(8) :: xs ! Resultant xs + + integer :: i_pol, i_azi + + call find_angle(this % polar, this % azimuthal, uvw, i_azi, i_pol) + + if (present(gout)) then + select case(xstype) + case('mult') + xs = this % mult(gout,g,i_azi,i_pol) + case('nu_fission') + xs = this % nu_fission(gout,g,i_azi,i_pol) + case('chi') + xs = this % chi(gout,i_azi,i_pol) + end select + else + select case(xstype) + case('total') + xs = this % total(g,i_azi,i_pol) + case('absorption') + xs = this % absorption(g,i_azi,i_pol) + case('fission') + xs = this % fission(g,i_azi,i_pol) + case('k_fission') + xs = this % k_fission(g,i_azi,i_pol) + case('chi') + xs = this % chi(g,i_azi,i_pol) + case('scatter') + xs = this % total(g,i_azi,i_pol) - this % absorption(g,i_azi,i_pol) + end select + end if + + end function nuclide_angle_get_xs + +!=============================================================================== +! find_angle finds the closest angle on the data grid and returns that index +!=============================================================================== + + subroutine find_angle(polar, azimuthal, uvw, i_azi, i_pol) + real(8), intent(in) :: polar(:) ! Polar angles [0,pi] + real(8), intent(in) :: azimuthal(:) ! Azi. angles [-pi,pi] + real(8), intent(in) :: uvw(3) ! Direction of motion + integer, intent(inout) :: i_pol ! Closest polar bin + integer, intent(inout) :: i_azi ! Closest azi bin + + real(8) my_pol, my_azi, dangle + + ! Convert uvw to polar and azi + + my_pol = acos(uvw(3)) + my_azi = atan2(uvw(2), uvw(1)) + + ! Quick and clear (but slower): + ! i_pol = minloc(abs(polar - my_pol),dim=1) + ! i_azi = minloc(abs(azimuthal - my_azi),dim=1) + + ! Fast search for equi-binned angles + dangle = PI / (real(size(polar),8)) + i_pol = floor(my_pol / dangle + ONE) + dangle = TWO * PI / (real(size(azimuthal),8)) + i_azi = floor((my_azi + PI) / dangle + ONE) + + end subroutine find_angle + +end module nuclide_header \ No newline at end of file diff --git a/src/particle_header.F90 b/src/particle_header.F90 index 40d7499015..f661e73c14 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -88,10 +88,10 @@ module particle_header type(Bank) :: secondary_bank(MAX_SECONDARY) contains - procedure :: initialize => initialize_particle - procedure :: clear => clear_particle - procedure(initialize_from_source_), deferred, pass :: initialize_from_source - procedure(create_secondary_), deferred, pass :: create_secondary + procedure, pass :: initialize => initialize_particle + procedure, pass :: clear => clear_particle + procedure, pass :: initialize_from_source => initialize_from_source_base + procedure, pass :: create_secondary => create_secondary_base end type Particle_Base type, extends(Particle_Base) :: Particle_CE @@ -114,31 +114,6 @@ module particle_header procedure :: create_secondary => create_secondary_mg end type Particle_MG - abstract interface - -!=============================================================================== -! INITIALIZE_FROM_SOURCE_ returns .true. if the given lattice indices fit within the -! bounds of the lattice. Returns false otherwise. - - subroutine initialize_from_source_(this, src) - import Particle_Base - import Bank - class(Particle_Base), intent(inout) :: this - type(Bank), intent(in) :: src - end subroutine initialize_from_source_ - -!=============================================================================== -! CREATE_SECONDARY_ Generates a secondary particle from this - - subroutine create_secondary_(this, uvw, type) - import Particle_Base - class(Particle_Base), intent(inout) :: this - real(8), intent(in) :: uvw(3) - integer, intent(in) :: type - end subroutine create_secondary_ - - end interface - contains !=============================================================================== @@ -217,9 +192,9 @@ contains ! fission, or simply as a secondary particle. !=============================================================================== - subroutine initialize_from_source_ce(this, src) - class(Particle_CE), intent(inout) :: this - type(Bank), intent(in) :: src + subroutine initialize_from_source_base(this, src) + class(Particle_Base), intent(inout) :: this + type(Bank), intent(in) :: src ! set defaults call this % initialize() @@ -231,6 +206,17 @@ contains this % coord(1) % uvw = src % uvw this % last_xyz = src % xyz this % last_uvw = src % uvw + + end subroutine initialize_from_source_base + + subroutine initialize_from_source_ce(this, src) + class(Particle_CE), intent(inout) :: this + type(Bank), intent(in) :: src + + ! set defaults a nd init base + call initialize_from_source_base(this, src) + + ! copy attributes from source bank site this % E = src % E this % last_E = src % E @@ -240,16 +226,10 @@ contains class(Particle_MG), intent(inout) :: this type(Bank), intent(in) :: src - ! set defaults - call this % initialize() + ! set defaults and init base + call initialize_from_source_base(this, src) ! copy attributes from source bank site - this % wgt = src % wgt - this % last_wgt = src % wgt - this % coord(1) % xyz = src % xyz - this % coord(1) % uvw = src % uvw - this % last_xyz = src % xyz - this % last_uvw = src % uvw this % g = src % g this % last_g = src % g @@ -260,10 +240,10 @@ contains ! the secondary bank and increments the number of sites in the secondary bank. !=============================================================================== - subroutine create_secondary_ce(this, uvw, type) - class(Particle_CE), intent(inout) :: this - real(8), intent(in) :: uvw(3) - integer, intent(in) :: type + subroutine create_secondary_base(this, uvw, type) + class(Particle_Base), intent(inout) :: this + real(8), intent(in) :: uvw(3) + integer, intent(in) :: type integer :: n @@ -277,9 +257,19 @@ contains this % secondary_bank(n) % wgt = this % wgt this % secondary_bank(n) % xyz(:) = this % coord(1) % xyz this % secondary_bank(n) % uvw(:) = uvw - this % secondary_bank(n) % E = this % E this % n_secondary = n + end subroutine create_secondary_base + + subroutine create_secondary_ce(this, uvw, type) + class(Particle_CE), intent(inout) :: this + real(8), intent(in) :: uvw(3) + integer, intent(in) :: type + + call create_secondary_base(this, uvw, type) + + this % secondary_bank(this % n_secondary) % E = this % E + end subroutine create_secondary_ce subroutine create_secondary_mg(this, uvw, type) @@ -287,20 +277,9 @@ contains real(8), intent(in) :: uvw(3) integer, intent(in) :: type - integer :: n + call create_secondary_base(this, uvw, type) - ! Check to make sure that the hard-limit on secondary particles is not - ! exceeded. - if (this % n_secondary == MAX_SECONDARY) then - call fatal_error("Too many secondary particles created.") - end if - - n = this % n_secondary + 1 - this % secondary_bank(n) % wgt = this % wgt - this % secondary_bank(n) % xyz(:) = this % coord(1) % xyz - this % secondary_bank(n) % uvw(:) = uvw - this % secondary_bank(n) % g = this % g - this % n_secondary = n + this % secondary_bank(this % n_secondary) % g = this % g end subroutine create_secondary_mg diff --git a/src/physics.F90 b/src/physics.F90 index a24ab8de4d..9bbed576dc 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -9,7 +9,6 @@ module physics use global use interpolation, only: interpolate_tab1 use material_header, only: Material - use math, only: maxwell_spectrum, watt_spectrum use mesh, only: get_mesh_indices use nuclide_header use output, only: write_message @@ -18,6 +17,7 @@ module physics use random_lcg, only: prn use search, only: binary_search use simple_string, only: to_str + use spectra implicit none diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 new file mode 100644 index 0000000000..63a428717b --- /dev/null +++ b/src/scattdata_header.F90 @@ -0,0 +1,355 @@ +module scattdata_header + + use math + use constants + + implicit none + +!=============================================================================== +! SCATTDATA contains all the data to describe the scattering energy and +! angular distribution +!=============================================================================== + + type, abstract :: ScattData_Base + ! p0 matrix on its own for sampling energy + real(8), allocatable :: energy(:,:) ! (Gout x Gin) + real(8), allocatable :: mult(:,:) ! (Gout x Gin) + real(8), allocatable :: data(:,:,:) ! (Order/Nmu x Gout x Gin) + + ! Type-Bound procedures + contains + procedure(init_), deferred, pass :: init ! Initializes ScattData + procedure(calc_f_), deferred, pass :: calc_f ! Calculates f, given mu + procedure(clear_), deferred, pass :: clear ! Deallocates ScattData + end type ScattData_Base + + abstract interface + subroutine init_(this, order, energy, mult, coeffs) + import ScattData_Base + class(ScattData_Base), intent(inout) :: this ! Object to work on + integer, intent(in) :: order ! Data Order + real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix + real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix + real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use + end subroutine init_ + + pure function calc_f_(this, gin, gout, mu) result(f) + import ScattData_Base + class(ScattData_Base), intent(in) :: this ! The ScattData to evaluate + integer, intent(in) :: gin ! Incoming Energy Group + integer, intent(in) :: gout ! Outgoing Energy Group + real(8), intent(in) :: mu ! Angle of interest + real(8) :: f ! Return value of f(mu) + + end function calc_f_ + + subroutine clear_(this) + import ScattData_Base + class(ScattData_Base), intent(inout) :: this ! The ScattData to clear + end subroutine clear_ + end interface + + type, extends(ScattData_Base) :: ScattData_Legendre + contains + procedure, pass :: init => scattdata_legendre_init + procedure, pass :: calc_f => scattdata_legendre_calc_f + procedure, pass :: clear => scattdata_legendre_clear + end type ScattData_Legendre + + type, extends(ScattData_Base) :: ScattData_Histogram + real(8), allocatable :: mu(:) ! Mu bins + real(8) :: dmu ! Mu spacing + contains + procedure, pass :: init => scattdata_histogram_init + procedure, pass :: calc_f => scattdata_histogram_calc_f + procedure, pass :: clear => scattdata_histogram_clear + end type ScattData_Histogram + + type, extends(ScattData_Base) :: ScattData_Tabular + real(8), allocatable :: mu(:) ! Mu bins + real(8) :: dmu ! Mu spacing + real(8), allocatable :: fmu(:,:,:) ! PDF of f(mu) + contains + procedure, pass :: init => scattdata_tabular_init + procedure, pass :: calc_f => scattdata_tabular_calc_f + procedure, pass :: clear => scattdata_tabular_clear + end type ScattData_Tabular + +!=============================================================================== +! SCATTDATACONTAINER allocatable array for storing ScattData Objects (for angle) +!=============================================================================== + + type ScattDataContainer + class(ScattData_Base), allocatable :: obj + end type ScattDataContainer + +contains + +!=============================================================================== +! SCATTDATA_INIT builds the scattdata object +!=============================================================================== + + subroutine scattdata_base_init(this, order, energy, mult) + class(ScattData_Base), intent(inout) :: this ! Object to work on + integer, intent(in) :: order ! Data Order + real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix + real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix + + integer :: groups + + groups = size(energy, dim=1) + + allocate(this % energy(groups, groups)) + this % energy = energy + allocate(this % mult(groups, groups)) + this % mult = mult + allocate(this % data(order, groups, groups)) + this % data = ZERO + + end subroutine scattdata_base_init + + subroutine scattdata_legendre_init(this, order, energy, mult, coeffs) + class(ScattData_Legendre), intent(inout) :: this ! Object to work on + integer, intent(in) :: order ! Data Order + real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix + real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix + real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use + + call scattdata_base_init(this, order, energy, mult) + + this % data = coeffs + + end subroutine scattdata_legendre_init + + subroutine scattdata_histogram_init(this, order, energy, mult, coeffs) + class(ScattData_Histogram), intent(inout) :: this ! Object to work on + integer, intent(in) :: order ! Data Order + real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix + real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix + real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use + + integer :: imu, gin, gout, groups + real(8) :: norm + + groups = size(energy,dim=1) + + call scattdata_base_init(this, order, energy, mult) + + allocate(this % mu(order)) + this % dmu = TWO / (real(order,8)) + this % mu(1) = -ONE + do imu = 2, order + this % mu(imu) = -ONE + (imu - 1) * this % dmu + end do + + ! Best to integrate this histogram so we can avoid rejection sampling + do gin = 1, groups + do gout = 1, groups + if (energy(gout,gin) > ZERO) then + ! Integrate the histogram + this % data(1,gout,gin) = this % dmu * coeffs(1,gout,gin) + do imu = 2, order + this % data(imu,gout,gin) = this % dmu * coeffs(imu,gout,gin) + & + this % data(imu-1,gout,gin) + end do + ! Now make sure integral norms to zero + norm = this % data(order,gout,gin) + if (norm > ZERO) then + this % data(:,gout,gin) = this % data(:,gout,gin) / norm + end if + end if + end do + end do + + end subroutine scattdata_histogram_init + + subroutine scattdata_tabular_init(this, order, energy, mult, coeffs) + class(ScattData_Tabular), intent(inout) :: this ! Object to work on + integer, intent(in) :: order ! Data Order + real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix + real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix + real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use + + integer :: imu, gin, gout, groups + real(8) :: norm + logical :: legendre_flag + integer :: this_order + + if (order < 0) then + legendre_flag = .true. + this_order = -1 * order + else + legendre_flag = .false. + this_order = order + end if + + groups = size(energy,dim=1) + + call scattdata_base_init(this, this_order, energy, mult) + + allocate(this % mu(this_order)) + this % dmu = TWO / (real(this_order,8) - 1) + do imu = 1, this_order - 1 + this % mu(imu) = -ONE + real(imu - 1, 8) * this % dmu + end do + this % mu(this_order) = ONE + + ! Best to integrate this histogram so we can avoid rejection sampling + allocate(this % fmu(this_order,groups,groups)) + do gin = 1, groups + do gout = 1, groups + if (energy(gout,gin) > ZERO) then + if (legendre_flag) then + ! Coeffs are legendre coeffs. Need to build f(mu) then integrate + ! and store the integral in this % data + ! Ensure the coeffs are normalized + norm = ONE / coeffs(1,gout,gin) + do imu = 1, this_order + this % fmu(imu,gout,gin) = evaluate_legendre(norm * coeffs(:,gout,gin), this % mu(imu)) + ! Force positivity + if (this % fmu(imu,gout,gin) < ZERO) then + this % fmu(imu,gout,gin) = ZERO + end if + end do + else + ! Coeffs contain f(mu), put in f(mu) to save duplicate. + this % fmu(:,gout,gin) = this % data(:,gout,gin) + end if + + ! Re-normalize fmu for numerical integration issues and in case + ! the negative fix-up introduced un-normalized data + norm = ZERO + do imu = 2, this_order + norm = norm + 0.5_8 * this % dmu * (this % fmu(imu-1,gout,gin) + this % fmu(imu,gout,gin)) + end do + if (norm > ZERO) then + this % fmu(:,gout,gin) = this % fmu(:,gout,gin) / norm + end if + + ! Now create CDF from fmu with trapezoidal rule + this % data(1,gout,gin) = ZERO + do imu = 2, this_order - 1 + this % data(imu,gout,gin) = this % data(imu-1,gout,gin) + & + 0.5_8 * this % dmu * (this % fmu(imu-1,gout,gin) + this % fmu(imu,gout,gin)) + end do + this % data(this_order,gout,gin) = ONE + end if + end do + end do + + end subroutine scattdata_tabular_init + +!=============================================================================== +! SCATTDATA_CLEAR resets and deallocates data in ScattData. +!=============================================================================== + + subroutine scattdata_base_clear(this) + class(ScattData_Base), intent(inout) :: this + + if (allocated(this % energy)) then + deallocate(this % energy) + end if + + if (allocated(this % mult)) then + deallocate(this % mult) + end if + + if (allocated(this % data)) then + deallocate(this % data) + end if + + end subroutine scattdata_base_clear + + subroutine scattdata_legendre_clear(this) + class(ScattData_Legendre), intent(inout) :: this + + call scattdata_base_clear(this) + + end subroutine scattdata_legendre_clear + + subroutine scattdata_histogram_clear(this) + class(ScattData_Histogram), intent(inout) :: this + + call scattdata_base_clear(this) + + if (allocated(this % mu)) then + deallocate(this % mu) + end if + + end subroutine scattdata_histogram_clear + + subroutine scattdata_tabular_clear(this) + class(ScattData_Tabular), intent(inout) :: this + + call scattdata_base_clear(this) + + if (allocated(this % mu)) then + deallocate(this % mu) + end if + + end subroutine scattdata_tabular_clear + +!=============================================================================== +! SCATTDATA_*_CALC_F Calculates the value of f given mu (and gin,gout pair) +!=============================================================================== + + pure function scattdata_legendre_calc_f(this, gin, gout, mu) result(f) + class(ScattData_Legendre), intent(in) :: this ! The ScattData to evaluate + integer, intent(in) :: gin ! Incoming Energy Group + integer, intent(in) :: gout ! Outgoing Energy Group + real(8), intent(in) :: mu ! Angle of interest + real(8) :: f ! Return value of f(mu) + + ! Plug mu in to the legendre expansion and go from there + f = evaluate_legendre(this % data(:, gout, gin), mu) + + end function scattdata_legendre_calc_f + + pure function scattdata_histogram_calc_f(this, gin, gout, mu) result(f) + class(ScattData_Histogram), intent(in) :: this ! The ScattData to evaluate + integer, intent(in) :: gin ! Incoming Energy Group + integer, intent(in) :: gout ! Outgoing Energy Group + real(8), intent(in) :: mu ! Angle of interest + real(8) :: f ! Return value of f(mu) + + integer :: imu + + ! Find mu bin + imu = floor((mu + ONE)/ this % dmu + ONE) + ! Adjust so interpolation works on the last bin if necessary + if (imu == size(this % data, dim=1)) then + imu = imu - 1 + end if + + ! Use histogram interpolation to find f(mu) + f = this % data(imu, gout, gin) + + end function scattdata_histogram_calc_f + + pure function scattdata_tabular_calc_f(this, gin, gout, mu) result(f) + class(ScattData_Tabular), intent(in) :: this ! The ScattData to evaluate + integer, intent(in) :: gin ! Incoming Energy Group + integer, intent(in) :: gout ! Outgoing Energy Group + real(8), intent(in) :: mu ! Angle of interest + real(8) :: f ! Return value of f(mu) + + integer :: imu + real(8) :: r + + ! Find mu bin + imu = floor((mu + ONE)/ this % dmu + ONE) + ! Adjust so interpolation works on the last bin if necessary + if (imu == size(this % data, dim=1)) then + imu = imu - 1 + end if + + ! ! Now interpolate to find f(mu) + r = (mu - this % mu(imu)) / (this % mu(imu + 1) - this % mu(imu)) + f = (ONE - r) * this % data(imu, gout, gin) + & + r * this % data(imu + 1, gout, gin) + + end function scattdata_tabular_calc_f + + + +end module scattdata_header \ No newline at end of file diff --git a/src/simulation.F90 b/src/simulation.F90 index c31b1d6fa7..088a764f79 100644 --- a/src/simulation.F90 +++ b/src/simulation.F90 @@ -15,7 +15,7 @@ module simulation use global use output, only: write_message, header, print_columns, & print_batch_keff, print_generation - use particle_header, only: Particle_Base + use particle_header, only: Particle_Base, Particle_CE, Particle_MG use random_lcg, only: set_particle_seed use source, only: initialize_source use state_point, only: write_state_point, write_source_point @@ -42,6 +42,12 @@ contains class(Particle_Base), pointer :: p integer(8) :: i_work + if (run_CE) then + allocate(Particle_CE :: p) + else + allocate(Particle_MG :: p) + end if + if (.not. restart_run) call initialize_source() ! Display header @@ -116,6 +122,9 @@ contains ! Clear particle call p % clear() + if (associated(p)) & + deallocate(p) + end subroutine run_simulation !=============================================================================== @@ -124,8 +133,8 @@ contains subroutine initialize_history(p, index_source) - class(Particle_Base), intent(inout) :: p - integer(8), intent(in) :: index_source + class(Particle_Base), pointer, intent(inout) :: p + integer(8), intent(in) :: index_source integer(8) :: particle_seed ! unique index for particle integer :: i diff --git a/src/source.F90 b/src/source.F90 index b83bf766e6..53ed2e9a3d 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -7,12 +7,13 @@ module source use geometry_header, only: BASE_UNIVERSE use global use hdf5_interface, only: file_create, file_open, file_close, read_dataset - use math, only: maxwell_spectrum, watt_spectrum use output, only: write_message use particle_header, only: Particle_Base, Particle_CE, Particle_MG use random_lcg, only: prn, set_particle_seed, prn_set_stream - use state_point, only: read_source_bank, write_source_bank + use search, only: binary_search use simple_string, only: to_str + use spectra + use state_point, only: read_source_bank, write_source_bank #ifdef MPI use message_passing @@ -108,7 +109,7 @@ contains real(8) :: a ! Arbitrary parameter 'a' real(8) :: b ! Arbitrary parameter 'b' logical :: found ! Does the source particle exist within geometry? - class(Particle_Base), pointer :: p ! Temporary particle for using find_cell + type(Particle_CE) :: p ! Temporary particle for using find_cell integer, save :: num_resamples = 0 ! Number of resamples encountered ! Set weight to one by default @@ -241,6 +242,17 @@ contains call fatal_error("No energy distribution specified for external source!") end select + ! If running in MG, convert site%E to group + if (.not. run_CE) then + if (site%E <= energy_bins(1)) then + site%g = 1 + else if (site%E > energy_bins(energy_groups + 1)) then + site%g = energy_groups + else + site%g = binary_search(energy_bins, energy_groups + 1, site%E) + end if + end if + ! Set the random number generator back to the tracking stream. call prn_set_stream(STREAM_TRACKING) diff --git a/src/spectra.F90 b/src/spectra.F90 new file mode 100644 index 0000000000..acdde78206 --- /dev/null +++ b/src/spectra.F90 @@ -0,0 +1,58 @@ +module spectra + +use constants, only: ONE, TWO, PI +use random_lcg, only: prn + +implicit none + +contains + +!=============================================================================== +! 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.0_8 + (TWO*prn() - ONE)*sqrt(a*a*b*w) + + end function watt_spectrum + +end module spectra \ No newline at end of file From 76921b005ec810724603a0ef7f0032695aeeea62 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 1 Nov 2015 13:44:29 -0500 Subject: [PATCH 009/650] Got to the point where the physics needs to be differentiated. CE answer still consistent with develop branchs answer --- src/constants.F90 | 8 -- src/global.F90 | 13 +-- src/initialize.F90 | 4 +- src/macroxs.F90 | 243 +++++++++++++++++++++++++++++++++++++++++++++ src/tracking.F90 | 8 ++ 5 files changed, 257 insertions(+), 19 deletions(-) create mode 100644 src/macroxs.F90 diff --git a/src/constants.F90 b/src/constants.F90 index 9bb62f62eb..b7eb1d0bec 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -166,14 +166,6 @@ module constants ! Number of mu bins to use when converting Legendres to tabular type integer, parameter :: DEFAULT_NMU = 33 - ! Location within pre-computed cross section data (particle_xs) - integer, parameter :: & - TOTAL = 1, & - ABSORB = 2, & - NUFISS = 3, & - FISS = 4, & - SCATT = 5 - ! Secondary energy mode for S(a,b) inelastic scattering integer, parameter :: & SAB_SECONDARY_EQUAL = 0, & ! Equally-likely outgoing energy bins diff --git a/src/global.F90 b/src/global.F90 index c5dbec5da9..57b242ab22 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -72,6 +72,10 @@ module global integer :: n_nuclides_total ! Number of nuclide cross section tables integer :: n_listings ! Number of listings in cross_sections.xml + ! Cross section caches + type(NuclideMicroXS), allocatable :: micro_xs(:) ! Cache for each nuclide + type(MaterialMacroXS) :: material_xs ! Cache for current material + ! Dictionaries to look up cross sections and listings type(DictCharInt) :: nuclide_dict type(DictCharInt) :: xs_listing_dict @@ -86,10 +90,6 @@ module global type(Nuclide_CE), allocatable, target :: nuclides(:) ! Nuclide cross-sections type(SAlphaBeta), allocatable, target :: sab_tables(:) ! S(a,b) tables - ! Cross section caches - type(NuclideMicroXS), allocatable :: micro_xs(:) ! Cache for each nuclide - type(MaterialMacroXS) :: material_xs ! Cache for current material - integer :: n_sab_tables ! Number of S(a,b) thermal scattering tables ! Minimum/maximum energies @@ -126,11 +126,6 @@ module global ! Scattering Treatment (if Legendre) integer :: legendre_mu_points - ! MGXS for current working particle (equivalent to material_xs, but simpler) - real(8) :: particle_xs(5) - -!$omp threadprivate(particle_xs) - ! ============================================================================ ! TALLY-RELATED VARIABLES diff --git a/src/initialize.F90 b/src/initialize.F90 index 01a8038070..5793b67226 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -322,8 +322,8 @@ contains c_loc(tmpb(1)%uvw)), coordinates_t, hdf5_err) call h5tinsert_f(hdf5_bank_t, "E", h5offsetof(c_loc(tmpb(1)), & c_loc(tmpb(1)%E)), H5T_NATIVE_DOUBLE, hdf5_err) - call h5tinsert_f(hdf5_bank_t, "group", h5offsetof(c_loc(tmpb(1)), & - c_loc(tmpb(1)%group)), H5T_NATIVE_INTEGER, hdf5_err) + call h5tinsert_f(hdf5_bank_t, "g", h5offsetof(c_loc(tmpb(1)), & + c_loc(tmpb(1)%g)), H5T_NATIVE_INTEGER, hdf5_err) call h5tinsert_f(hdf5_bank_t, "delayed_group", h5offsetof(c_loc(tmpb(1)), & c_loc(tmpb(1)%delayed_group)), H5T_NATIVE_INTEGER, hdf5_err) diff --git a/src/macroxs.F90 b/src/macroxs.F90 new file mode 100644 index 0000000000..799d3115b8 --- /dev/null +++ b/src/macroxs.F90 @@ -0,0 +1,243 @@ +module macroxs + + use constants + use macroxs_header, only: MacroXS_Base, MacroXS_Iso, MacroXS_Angle, & + expand_harmonic + use math + use nuclide_header, only: find_angle, MaterialMacroXS + use random_lcg, only: prn + use scattdata_header + use search + + implicit none + +contains + +!=============================================================================== +! UPDATE_XS stores the xs to work with +!=============================================================================== + + subroutine calculate_mgxs(this, gin, uvw, xs) + class(MacroXS_Base), intent(in) :: this + integer, intent(in) :: gin ! Incoming neutron group + real(8), intent(in) :: uvw(3) ! Incoming neutron direction + type(MaterialMacroXS), intent(inout) :: xs + + integer :: iazi, ipol + + select type(this) + type is (MacroXS_Iso) + xs % total = this % total(gin) + xs % elastic = this % scattxs(gin) + xs % absorption = this % absorption(gin) + xs % fission = this % fission(gin) + xs % nu_fission = this % nu_fission(gin) + + type is (MacroXS_Angle) + call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) + xs % total = this % total(gin, iazi, ipol) + xs % elastic = this % scattxs(gin, iazi, ipol) + xs % absorption = this % absorption(gin, iazi, ipol) + xs % fission = this % fission(gin, iazi, ipol) + xs % nu_fission = this % nu_fission(gin, iazi, ipol) + end select + + end subroutine calculate_mgxs + + +!=============================================================================== +! SAMPLE_FISSION_ENERGY acts as a templating code for macroxs_*_sample_fission_energy +!=============================================================================== + + function sample_fission_energy(this, gin, uvw) result(gout) + class(MacroXS_Base), intent(in) :: this ! Data to work with + integer, intent(in) :: gin ! Incoming energy group + real(8), intent(in) :: uvw(3) ! Particle Direction + integer :: gout ! Sampled outgoing group + + select type(this) + type is (MacroXS_Iso) + gout = macroxs_iso_sample_fission_energy(this, gin, uvw) + type is (MacroXS_Angle) + gout = macroxs_angle_sample_fission_energy(this, gin, uvw) + end select + + end function sample_fission_energy + +!=============================================================================== +! MACROXS_*_SAMPLE_FISSION_ENERGY samples the outgoing energy and mu from a scatter event. +! Implemented as % scatter. +!=============================================================================== + + function macroxs_iso_sample_fission_energy(this, gin, uvw) result(gout) + class(MacroXS_Iso), intent(in) :: this ! Data to work with + integer, intent(in) :: gin ! Incoming energy group + real(8), intent(in) :: uvw(3) ! Particle Direction + integer :: gout ! Sampled outgoing group + real(8) :: xi ! Our random number + real(8) :: prob ! Running probability + + xi = prn() + prob = ZERO + gout = 0 + + do while (prob < xi) + gout = gout + 1 + prob = prob + this % chi(gout,gin) + end do + + end function macroxs_iso_sample_fission_energy + + function macroxs_angle_sample_fission_energy(this, gin, uvw) result(gout) + class(MacroXS_Angle), intent(in) :: this ! Data to work with + integer, intent(in) :: gin ! Incoming energy group + real(8), intent(in) :: uvw(3) ! Particle Direction + integer :: gout ! Sampled outgoing group + real(8) :: xi ! Our random number + real(8) :: prob ! Running probability + integer :: iazi, ipol + + call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) + + xi = prn() + prob = ZERO + gout = 0 + + do while (prob < xi) + gout = gout + 1 + prob = prob + this % chi(gout,gin,iazi,ipol) + end do + + end function macroxs_angle_sample_fission_energy + +!=============================================================================== +! SAMPLE_SCATTER acts as a templating code for macroxs_*_sample_scatter +!=============================================================================== + + subroutine sample_scatter(this, uvw, gin, gout, mu, wgt) + class(MacroXS_Base), intent(in) :: this + real(8), intent(in) :: uvw(3) ! Incoming neutron direction + integer, intent(in) :: gin ! Incoming neutron group + integer, intent(out) :: gout ! Sampled outgoin group + real(8), intent(out) :: mu ! Sampled change in angle + real(8), intent(inout) :: wgt ! Particle weight + + integer :: iazi, ipol ! Angular indices + + select type(this) + type is (MacroXS_Iso) + call macroxs_sample_scatter(this % scatter, gin, gout, mu, wgt) + type is (MacroXS_Angle) + call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) + call macroxs_sample_scatter(this % scatter(iazi,ipol) % obj,gin,gout,mu,wgt) + end select + + end subroutine sample_scatter + +!=============================================================================== +! MACROXS_SAMPLE_SCATTER performs the work with ScattData to sample outgoing +! energy and change in angle. +!=============================================================================== + + subroutine macroxs_sample_scatter(scatt, gin, gout, mu, wgt) + Class(ScattData_Base), intent(in) :: scatt ! Scattering Object to Use + integer, intent(in) :: gin ! Incoming neutron group + integer, intent(out) :: gout ! Sampled outgoin group + real(8), intent(out) :: mu ! Sampled change in angle + real(8), intent(inout) :: wgt ! Particle weight + + real(8) :: xi ! Our random number + real(8) :: prob ! Running probability + integer :: imu + real(8) :: u, f, M + real(8) :: mu0, frac, mu1 + real(8) :: c_k, c_k1, p0, p1 + integer :: k, NP, samples + + xi = prn() + prob = ZERO + gout = 0 + + do while (prob < xi) + gout = gout + 1 + prob = prob + scatt % energy(gout,gin) + end do + + select type (scatt) + type is (ScattData_Histogram) + xi = prn() + if (xi < scatt % data(1,gout,gin)) then + imu = 1 + else + imu = binary_search(scatt % data(:,gout,gin), & + size(scatt % data(:,gout,gin)), xi) + end if + + ! Randomly select a mu in this bin. + mu = prn() * scatt % dmu + scatt % mu(imu) + + type is (ScattData_Tabular) + ! determine outgoing cosine bin + NP = size(scatt % data(:,gout,gin)) + xi = prn() + + c_k = scatt % data(1,gout,gin) + do k = 1, NP - 1 + c_k1 = scatt % data(k+1,gout,gin) + if (xi < c_k1) exit + c_k = c_k1 + end do + + ! check to make sure k is <= NP - 1 + k = min(k, NP - 1) + + p0 = scatt % fmu(k,gout,gin) + mu0 = scatt % mu(k) + ! Linear-linear interpolation to find mu value w/in bin. + p1 = scatt % fmu(k+1,gout,gin) + mu1 = scatt % mu(k+1) + + frac = (p1 - p0)/(mu1 - mu0) + + if (frac == ZERO) then + mu = mu0 + (xi - c_k)/p0 + else + mu = mu0 + (sqrt(max(ZERO, p0*p0 + TWO*frac*(xi - c_k))) - p0)/frac + end if + + if (mu <= -ONE) then + mu = -ONE + else if (mu >= ONE) then + mu = ONE + end if + + type is (ScattData_Legendre) + ! Now we can sample mu using the legendre representation of the scattering + ! kernel in data(1:this % order) + + ! Do with rejection sampling + ! Set upper bound (instead of searching for max - though this is inefficient) + M = 4.0_8 + samples = 0 + do + mu = TWO * prn() - ONE + f = scatt % calc_f(gin,gout,mu) + if (f > ZERO) then + u = prn() * M + if (u <= f) then + exit + end if + end if + samples = samples + 1 + if (samples > MAX_SAMPLE) then + ! Exit with an isotropic event. + exit + end if + end do + end select + + wgt = wgt * scatt % mult(gout,gin) + + end subroutine macroxs_sample_scatter + +end module macroxs \ No newline at end of file diff --git a/src/tracking.F90 b/src/tracking.F90 index fcb746ccc8..2ffa45ee0d 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -7,6 +7,7 @@ module tracking cross_lattice, check_cell_overlap use geometry_header, only: Universe, BASE_UNIVERSE use global + use macroxs, only: calculate_mgxs use output, only: write_message use particle_header, only: LocalCoord, Particle_Base, Particle_CE, Particle_MG use physics, only: collision @@ -53,6 +54,8 @@ contains total_weight = total_weight + p % wgt ! Force calculation of cross-sections by setting last energy to zero + ! This is a penalty incurred by MG solver, but id rather have penalties + ! applied there over the CE Solver (i.e., by putting an if-block here) micro_xs % last_E = ZERO ! Prepare to write out particle track. @@ -86,6 +89,11 @@ contains select type(p) type is (Particle_CE) if (p % material /= p % last_material) call calculate_xs(p) + type is (Particle_MG) + if ((p % material /= p % last_material) .or. (p % g /= p % last_g)) then + call calculate_mgxs(macro_xs(p % material) % obj, p % g, & + p % coord(1) % uvw, material_xs) + end if end select ! Find the distance to the nearest boundary From 608aa3569fb90cb9abc0c72e70e9a4ff2775d299 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 1 Nov 2015 14:23:37 -0500 Subject: [PATCH 010/650] Added code for MG physics; included pulling out physics independent info from physics.f90 and putting in physics_common.F90 --- src/particle_header.F90 | 40 +++++++ src/physics.F90 | 253 ++++++++++++++------------------------- src/physics_common.F90 | 82 +++++++++++++ src/physics_mg.F90 | 254 ++++++++++++++++++++++++++++++++++++++++ src/tracking.F90 | 3 + 5 files changed, 470 insertions(+), 162 deletions(-) create mode 100644 src/physics_common.F90 create mode 100644 src/physics_mg.F90 diff --git a/src/particle_header.F90 b/src/particle_header.F90 index f661e73c14..85d83cd3d3 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -92,8 +92,16 @@ module particle_header procedure, pass :: clear => clear_particle procedure, pass :: initialize_from_source => initialize_from_source_base procedure, pass :: create_secondary => create_secondary_base + procedure(collision_), deferred, pass :: pre_collision end type Particle_Base + abstract interface + subroutine collision_(this) + import Particle_Base + class(Particle_Base), intent(inout) :: this + end subroutine collision_ + end interface + type, extends(Particle_Base) :: Particle_CE ! Energy Data real(8) :: E ! post-collision energy @@ -102,6 +110,7 @@ module particle_header contains procedure :: initialize_from_source => initialize_from_source_ce procedure :: create_secondary => create_secondary_ce + procedure :: pre_collision => pre_collision_ce end type Particle_CE type, extends(Particle_Base) :: Particle_MG @@ -112,6 +121,7 @@ module particle_header contains procedure :: initialize_from_source => initialize_from_source_mg procedure :: create_secondary => create_secondary_mg + procedure :: pre_collision => pre_collision_mg end type Particle_MG contains @@ -283,4 +293,34 @@ contains end subroutine create_secondary_mg +!=============================================================================== +! PRE_COLLISION_* Updates pre-collision particle properties +!=============================================================================== + + subroutine pre_collision_ce(this) + class(Particle_CE), intent(inout) :: this + + ! Store pre-collision particle properties + this % last_wgt = this % wgt + this % last_E = this % E + this % last_uvw = this % coord(1) % uvw + + ! Add to collision counter for particle + this % n_collision = this % n_collision + 1 + + end subroutine pre_collision_ce + + subroutine pre_collision_mg(this) + class(Particle_MG), intent(inout) :: this + + ! Store pre-collision particle properties + this % last_wgt = this % wgt + this % last_g = this % g + this % last_uvw = this % coord(1) % uvw + + ! Add to collision counter for particle + this % n_collision = this % n_collision + 1 + + end subroutine pre_collision_mg + end module particle_header diff --git a/src/physics.F90 b/src/physics.F90 index 9bbed576dc..0b0509e1c5 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -12,8 +12,9 @@ module physics use mesh, only: get_mesh_indices use nuclide_header use output, only: write_message - use particle_header, only: Particle_Base, Particle_CE, Particle_MG + use particle_header, only: Particle_CE use particle_restart_write, only: write_particle_restart + use physics_common use random_lcg, only: prn use search, only: binary_search use simple_string, only: to_str @@ -124,8 +125,8 @@ contains function sample_nuclide(p, base) result(i_nuclide) - class(Particle_Base), intent(in) :: p - character(7), intent(in) :: base ! which reaction to sample based on + type(Particle_CE), intent(in) :: p + character(7), intent(in) :: base ! which reaction to sample based on integer :: i_nuclide integer :: i @@ -241,8 +242,8 @@ contains subroutine absorption(p, i_nuclide) - class(Particle_Base), intent(inout) :: p - integer, intent(in) :: i_nuclide + type(Particle_CE), intent(inout) :: p + integer, intent(in) :: i_nuclide if (survival_biasing) then ! Determine weight absorbed in survival biasing @@ -276,27 +277,6 @@ contains end subroutine absorption -!=============================================================================== -! RUSSIAN_ROULETTE -!=============================================================================== - - subroutine russian_roulette(p) - - class(Particle_Base), intent(inout) :: p - - if (p % wgt < weight_cutoff) then - if (prn() < p % wgt / weight_survive) then - p % wgt = weight_survive - p % last_wgt = p % wgt - else - p % wgt = ZERO - p % last_wgt = ZERO - p % alive = .false. - end if - end if - - end subroutine russian_roulette - !=============================================================================== ! SCATTER !=============================================================================== @@ -1060,9 +1040,9 @@ contains subroutine create_fission_sites(p, i_nuclide, i_reaction) - class(Particle_Base), intent(inout) :: p - integer, intent(in) :: i_nuclide - integer, intent(in) :: i_reaction + type(Particle_CE), intent(inout) :: p + integer, intent(in) :: i_nuclide + integer, intent(in) :: i_reaction integer :: nu_d(MAX_DELAYED_GROUPS) ! number of delayed neutrons born integer :: i ! loop index @@ -1176,10 +1156,10 @@ contains function sample_fission_energy(nuc, rxn, p) result(E_out) - type(Nuclide_CE), pointer :: nuc - type(Reaction), pointer :: rxn - class(Particle_Base), intent(inout) :: p ! Particle causing fission - real(8) :: E_out ! outgoing E of fission neutron + type(Nuclide_CE), pointer :: nuc + type(Reaction), pointer :: rxn + type(Particle_CE), intent(inout) :: p ! Particle causing fission + real(8) :: E_out ! outgoing E of fission neutron integer :: j ! index on nu energy grid / precursor group integer :: lc ! index before start of energies/nu values @@ -1196,106 +1176,103 @@ contains real(8) :: prob ! cumulative probability type(DistEnergy), pointer :: edist - select type(p) - type is (Particle_CE) - ! Determine total nu - nu_t = nu_total(nuc, p % E) + ! Determine total nu + nu_t = nu_total(nuc, p % E) - ! Determine delayed nu - nu_d = nu_delayed(nuc, p % E) + ! Determine delayed nu + nu_d = nu_delayed(nuc, p % E) - ! Determine delayed neutron fraction - beta = nu_d / nu_t + ! Determine delayed neutron fraction + beta = nu_d / nu_t - if (prn() < beta) then - ! ==================================================================== - ! DELAYED NEUTRON SAMPLED + if (prn() < beta) then + ! ==================================================================== + ! DELAYED NEUTRON SAMPLED - ! sampled delayed precursor group - xi = prn() - lc = 1 - prob = ZERO - do j = 1, nuc % n_precursor - ! determine number of interpolation regions and energies - NR = int(nuc % nu_d_precursor_data(lc + 1)) - NE = int(nuc % nu_d_precursor_data(lc + 2 + 2*NR)) + ! sampled delayed precursor group + xi = prn() + lc = 1 + prob = ZERO + do j = 1, nuc % n_precursor + ! determine number of interpolation regions and energies + NR = int(nuc % nu_d_precursor_data(lc + 1)) + NE = int(nuc % nu_d_precursor_data(lc + 2 + 2*NR)) - ! determine delayed neutron precursor yield for group j - yield = interpolate_tab1(nuc % nu_d_precursor_data( & - lc+1:lc+2+2*NR+2*NE), p % E) + ! determine delayed neutron precursor yield for group j + yield = interpolate_tab1(nuc % nu_d_precursor_data( & + lc+1:lc+2+2*NR+2*NE), p % E) - ! Check if this group is sampled - prob = prob + yield - if (xi < prob) exit + ! Check if this group is sampled + prob = prob + yield + if (xi < prob) exit - ! advance pointer - lc = lc + 2 + 2*NR + 2*NE + 1 - end do + ! advance pointer + lc = lc + 2 + 2*NR + 2*NE + 1 + end do - ! if the sum of the probabilities is slightly less than one and the - ! random number is greater, j will be greater than nuc % - ! n_precursor -- check for this condition - j = min(j, nuc % n_precursor) + ! if the sum of the probabilities is slightly less than one and the + ! random number is greater, j will be greater than nuc % + ! n_precursor -- check for this condition + j = min(j, nuc % n_precursor) - ! set the delayed group for the particle born from fission - p % delayed_group = j + ! set the delayed group for the particle born from fission + p % delayed_group = j - ! select energy distribution for group j - law = nuc % nu_d_edist(j) % law - edist => nuc % nu_d_edist(j) + ! select energy distribution for group j + law = nuc % nu_d_edist(j) % law + edist => nuc % nu_d_edist(j) - ! sample from energy distribution - n_sample = 0 - do - if (law == 44 .or. law == 61) then - call sample_energy(edist, p % E, E_out, mu) - else - call sample_energy(edist, p % E, E_out) - end if + ! sample from energy distribution + n_sample = 0 + do + if (law == 44 .or. law == 61) then + call sample_energy(edist, p % E, E_out, mu) + else + call sample_energy(edist, p % E, E_out) + end if - ! resample if energy is greater than maximum neutron energy - if (E_out < energy_max_neutron) exit + ! resample if energy is greater than maximum neutron energy + if (E_out < energy_max_neutron) exit - ! check for large number of resamples - n_sample = n_sample + 1 - if (n_sample == MAX_SAMPLE) then - ! call write_particle_restart(p) - call fatal_error("Resampled energy distribution maximum number of " & - &// "times for nuclide " // nuc % name) - end if - end do + ! check for large number of resamples + n_sample = n_sample + 1 + if (n_sample == MAX_SAMPLE) then + ! call write_particle_restart(p) + call fatal_error("Resampled energy distribution maximum number of " & + &// "times for nuclide " // nuc % name) + end if + end do - else - ! ==================================================================== - ! PROMPT NEUTRON SAMPLED + else + ! ==================================================================== + ! PROMPT NEUTRON SAMPLED - ! set the delayed group for the particle born from fission to 0 - p % delayed_group = 0 + ! set the delayed group for the particle born from fission to 0 + p % delayed_group = 0 - ! sample from prompt neutron energy distribution - law = rxn % edist % law - n_sample = 0 - do - if (law == 44 .or. law == 61) then - call sample_energy(rxn%edist, p % E, E_out, prob) - else - call sample_energy(rxn%edist, p % E, E_out) - end if + ! sample from prompt neutron energy distribution + law = rxn % edist % law + n_sample = 0 + do + if (law == 44 .or. law == 61) then + call sample_energy(rxn%edist, p % E, E_out, prob) + else + call sample_energy(rxn%edist, p % E, E_out) + end if - ! resample if energy is greater than maximum neutron energy - if (E_out < energy_max_neutron) exit + ! resample if energy is greater than maximum neutron energy + if (E_out < energy_max_neutron) exit - ! check for large number of resamples - n_sample = n_sample + 1 - if (n_sample == MAX_SAMPLE) then - ! call write_particle_restart(p) - call fatal_error("Resampled energy distribution maximum number of " & - &// "times for nuclide " // nuc % name) - end if - end do + ! check for large number of resamples + n_sample = n_sample + 1 + if (n_sample == MAX_SAMPLE) then + ! call write_particle_restart(p) + call fatal_error("Resampled energy distribution maximum number of " & + &// "times for nuclide " // nuc % name) + end if + end do - end if - end select + end if end function sample_fission_energy @@ -1511,55 +1488,7 @@ contains end function sample_angle -!=============================================================================== -! ROTATE_ANGLE rotates direction cosines through a polar angle whose cosine is -! mu and through an azimuthal angle sampled uniformly. Note that this is done -! with direct sampling rather than rejection as is done in MCNP and SERPENT. -!=============================================================================== - function rotate_angle(uvw0, mu) result(uvw) - - real(8), intent(in) :: uvw0(3) ! directional cosine - real(8), intent(in) :: mu ! cosine of angle in lab or CM - real(8) :: uvw(3) ! rotated directional cosine - - real(8) :: phi ! azimuthal angle - real(8) :: sinphi ! sine of azimuthal angle - real(8) :: cosphi ! cosine of azimuthal angle - real(8) :: a ! sqrt(1 - mu^2) - real(8) :: b ! sqrt(1 - w^2) - real(8) :: u0 ! original cosine in x direction - real(8) :: v0 ! original cosine in y direction - real(8) :: w0 ! original cosine in z direction - - ! Copy original directional cosines - u0 = uvw0(1) - v0 = uvw0(2) - w0 = uvw0(3) - - ! Sample azimuthal angle in [0,2pi) - phi = TWO * PI * prn() - - ! Precompute factors to save flops - sinphi = sin(phi) - cosphi = cos(phi) - a = sqrt(max(ZERO, ONE - mu*mu)) - b = sqrt(max(ZERO, ONE - w0*w0)) - - ! Need to treat special case where sqrt(1 - w**2) is close to zero by - ! expanding about the v component rather than the w component - if (b > 1e-10) then - uvw(1) = mu*u0 + a*(u0*w0*cosphi - v0*sinphi)/b - uvw(2) = mu*v0 + a*(v0*w0*cosphi + u0*sinphi)/b - uvw(3) = mu*w0 - a*b*cosphi - else - b = sqrt(ONE - v0*v0) - uvw(1) = mu*u0 + a*(u0*v0*cosphi + w0*sinphi)/b - uvw(2) = mu*v0 - a*b*cosphi - uvw(3) = mu*w0 + a*(v0*w0*cosphi - u0*sinphi)/b - end if - - end function rotate_angle !=============================================================================== ! SAMPLE_ENERGY samples an outgoing energy distribution, either for a secondary diff --git a/src/physics_common.F90 b/src/physics_common.F90 new file mode 100644 index 0000000000..fbd85cc625 --- /dev/null +++ b/src/physics_common.F90 @@ -0,0 +1,82 @@ +module physics_common + + use constants + use global, only: weight_cutoff, weight_survive + use particle_header, only: Particle_Base, Particle_CE, Particle_MG + use random_lcg, only: prn + + implicit none + +contains + +!=============================================================================== +! RUSSIAN_ROULETTE +!=============================================================================== + + subroutine russian_roulette(p) + + class(Particle_Base), intent(inout) :: p + + if (p % wgt < weight_cutoff) then + if (prn() < p % wgt / weight_survive) then + p % wgt = weight_survive + p % last_wgt = p % wgt + else + p % wgt = ZERO + p % last_wgt = ZERO + p % alive = .false. + end if + end if + + end subroutine russian_roulette + +!=============================================================================== +! ROTATE_ANGLE rotates direction cosines through a polar angle whose cosine is +! mu and through an azimuthal angle sampled uniformly. Note that this is done +! with direct sampling rather than rejection as is done in MCNP and SERPENT. +!=============================================================================== + + function rotate_angle(uvw0, mu) result(uvw) + + real(8), intent(in) :: uvw0(3) ! directional cosine + real(8), intent(in) :: mu ! cosine of angle in lab or CM + real(8) :: uvw(3) ! rotated directional cosine + + real(8) :: phi ! azimuthal angle + real(8) :: sinphi ! sine of azimuthal angle + real(8) :: cosphi ! cosine of azimuthal angle + real(8) :: a ! sqrt(1 - mu^2) + real(8) :: b ! sqrt(1 - w^2) + real(8) :: u0 ! original cosine in x direction + real(8) :: v0 ! original cosine in y direction + real(8) :: w0 ! original cosine in z direction + + ! Copy original directional cosines + u0 = uvw0(1) + v0 = uvw0(2) + w0 = uvw0(3) + + ! Sample azimuthal angle in [0,2pi) + phi = TWO * PI * prn() + + ! Precompute factors to save flops + sinphi = sin(phi) + cosphi = cos(phi) + a = sqrt(max(ZERO, ONE - mu*mu)) + b = sqrt(max(ZERO, ONE - w0*w0)) + + ! Need to treat special case where sqrt(1 - w**2) is close to zero by + ! expanding about the v component rather than the w component + if (b > 1e-10) then + uvw(1) = mu*u0 + a*(u0*w0*cosphi - v0*sinphi)/b + uvw(2) = mu*v0 + a*(v0*w0*cosphi + u0*sinphi)/b + uvw(3) = mu*w0 - a*b*cosphi + else + b = sqrt(ONE - v0*v0) + uvw(1) = mu*u0 + a*(u0*v0*cosphi + w0*sinphi)/b + uvw(2) = mu*v0 - a*b*cosphi + uvw(3) = mu*w0 + a*(v0*w0*cosphi - u0*sinphi)/b + end if + + end function rotate_angle +end module physics_common \ No newline at end of file diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 new file mode 100644 index 0000000000..c53661086a --- /dev/null +++ b/src/physics_mg.F90 @@ -0,0 +1,254 @@ +module physics_mg + ! This module contains the multi-group specific physics routines so as to not + ! hinder performance of the CE versions with multiple if-thens. + + use constants + use error, only: fatal_error, warning + use global + use interpolation, only: interpolate_tab1 + use macroxs_header, only: MacroXS_Base, MacroXSContainer + use macroxs, only: sample_fission_energy, sample_scatter + use material_header, only: Material + use mesh, only: get_mesh_indices + ! use nuclide_header, only: Nuclide_MG, NuclideMGContainer + use output, only: write_message + use particle_header, only: Particle_Base, Particle_MG + use particle_restart_write, only: write_particle_restart + use physics_common + use random_lcg, only: prn + use scattdata_header + use search, only: binary_search + use simple_string, only: to_str + + implicit none + +contains + +!=============================================================================== +! COLLISION_MG samples a nuclide and reaction and then calls the appropriate +! routine for that reaction +!=============================================================================== + + subroutine collision_mg(p) + + type(Particle_MG), intent(inout) :: p + + ! Store pre-collision particle properties + p % last_wgt = p % wgt + p % last_g = p % g + p % last_uvw = p % coord(1) % uvw + + ! Add to collision counter for particle + p % n_collision = p % n_collision + 1 + + ! Sample nuclide/reaction for the material the particle is in + call sample_reaction(p) + + ! Display information about collision + if (verbosity >= 10 .or. trace) then + call write_message(" " // "Energy Group = " // trim(to_str(p % g))) + end if + + end subroutine collision_mg + +!=============================================================================== +! SAMPLE_REACTION samples a nuclide based on the macroscopic cross sections for +! each nuclide within a material and then samples a reaction for that nuclide +! and calls the appropriate routine to process the physics. Note that there is +! special logic when suvival biasing is turned on since fission and +! disappearance are treated implicitly. +!=============================================================================== + + subroutine sample_reaction(p) + + type(Particle_MG), intent(inout) :: p + + type(Material), pointer :: mat + + mat => materials(p % material) + + ! Create fission bank sites. Note that while a fission reaction is sampled, + ! it never actually "happens", i.e. the weight of the particle does not + ! change when sampling fission sites. The following block handles all + ! absorption (including fission) + + if (mat % fissionable .and. run_mode == MODE_EIGENVALUE) then + call create_fission_sites(p) + end if + + ! If survival biasing is being used, the following subroutine adjusts the + ! weight of the particle. Otherwise, it checks to see if absorption occurs + + if (material_xs % absorption > ZERO) then + call absorption(p) + else + p % absorb_wgt = ZERO + end if + if (.not. p % alive) return + + ! Sample a scattering reaction and determine the secondary energy of the + ! exiting neutron + call scatter(p) + + ! Play russian roulette if survival biasing is turned on + + if (survival_biasing) then + call russian_roulette(p) + if (.not. p % alive) return + end if + + end subroutine sample_reaction + +!=============================================================================== +! ABSORPTION +!=============================================================================== + + subroutine absorption(p) + + type(Particle_MG), intent(inout) :: p + + if (survival_biasing) then + ! Determine weight absorbed in survival biasing + p % absorb_wgt = (p % wgt * & + material_xs % absorption / material_xs % total) + + ! Adjust weight of particle by probability of absorption + p % wgt = p % wgt - p % absorb_wgt + p % last_wgt = p % wgt + + ! Score implicit absorption estimate of keff +!$omp atomic + global_tallies(K_ABSORPTION) % value = & + global_tallies(K_ABSORPTION) % value + p % absorb_wgt * & + material_xs % nu_fission / material_xs % absorption + else + ! See if disappearance reaction happens + if (material_xs % absorption > prn() * material_xs % total) then + ! Score absorption estimate of keff +!$omp atomic + global_tallies(K_ABSORPTION) % value = & + global_tallies(K_ABSORPTION) % value + p % wgt * & + material_xs % nu_fission / material_xs % absorption + + p % alive = .false. + p % event = EVENT_ABSORB + end if + end if + + end subroutine absorption + +!=============================================================================== +! SCATTER +!=============================================================================== + + subroutine scatter(p) + + type(Particle_MG), intent(inout) :: p + + call sample_scatter(macro_xs(p % material) % obj, p % coord(1) % uvw, & + p % last_g, p % g, p % mu, p % wgt) + + p % coord(1) % uvw = rotate_angle(p % coord(1) % uvw, p % mu) + + ! Set event component + p % event = EVENT_SCATTER + + end subroutine scatter + +!=============================================================================== +! CREATE_FISSION_SITES determines the average total, prompt, and delayed +! neutrons produced from fission and creates appropriate bank sites. +!=============================================================================== + + subroutine create_fission_sites(p) + + type(Particle_MG), intent(inout) :: p + + integer :: i ! loop index + integer :: nu ! actual number of neutrons produced + integer :: ijk(3) ! indices in ufs mesh + real(8) :: nu_t ! total nu + real(8) :: mu ! fission neutron angular cosine + real(8) :: phi ! fission neutron azimuthal angle + real(8) :: weight ! weight adjustment for ufs method + logical :: in_mesh ! source site in ufs mesh? + class(MacroXS_Base), pointer :: xs + + ! Get Pointers + xs => macro_xs(p % material) % obj + ! TODO: Heat generation from fission + + ! If uniform fission source weighting is turned on, we increase of decrease + ! the expected number of fission sites produced + + if (ufs) then + ! Determine indices on ufs mesh for current location + call get_mesh_indices(ufs_mesh, p % coord(1) % xyz, ijk, in_mesh) + if (.not. in_mesh) then + call write_particle_restart(p) + call fatal_error("Source site outside UFS mesh!") + end if + + if (source_frac(1,ijk(1),ijk(2),ijk(3)) /= ZERO) then + weight = ufs_mesh % volume_frac / source_frac(1,ijk(1),ijk(2),ijk(3)) + else + weight = ONE + end if + else + weight = ONE + end if + + ! Determine expected number of neutrons produced + nu_t = p % wgt / keff * weight * & + material_xs % nu_fission / material_xs % total + ! Sample number of neutrons produced + if (prn() > nu_t - int(nu_t)) then + nu = int(nu_t) + else + nu = int(nu_t) + 1 + end if + + ! Check for fission bank size getting hit + if (n_bank + nu > size(fission_bank)) then + if (master) call warning("Maximum number of sites in fission bank & + &reached. This can result in irreproducible results using different & + &numbers of processes/threads.") + end if + + ! Bank source neutrons + if (nu == 0 .or. n_bank == size(fission_bank)) return + p % fission = .true. ! Fission neutrons will be banked + do i = int(n_bank,4) + 1, int(min(n_bank + nu, int(size(fission_bank),8)),4) + ! Bank source neutrons by copying particle data + fission_bank(i) % xyz = p % coord(1) % xyz + + ! Set weight of fission bank site + fission_bank(i) % wgt = ONE/weight + + ! Sample cosine of angle -- fission neutrons are always emitted + ! isotropically. Sometimes in ACE data, fission reactions actually have + ! an angular distribution listed, but for those that do, it's simply just + ! a uniform distribution in mu + mu = TWO * prn() - ONE + + ! Sample azimuthal angle uniformly in [0,2*pi) + phi = TWO*PI*prn() + fission_bank(i) % uvw(1) = mu + fission_bank(i) % uvw(2) = sqrt(ONE - mu*mu) * cos(phi) + fission_bank(i) % uvw(3) = sqrt(ONE - mu*mu) * sin(phi) + + ! Sample secondary energy distribution for fission reaction and set energy + ! in fission bank + fission_bank(i) % g = sample_fission_energy(xs, p % g, fission_bank(i) % uvw) + end do + + ! increment number of bank sites + n_bank = min(n_bank + nu, int(size(fission_bank),8)) + + ! Store total weight banked for analog fission tallies + p % n_bank = nu + p % wgt_bank = nu/weight + + end subroutine create_fission_sites + +end module physics_mg diff --git a/src/tracking.F90 b/src/tracking.F90 index 2ffa45ee0d..3ca75e3381 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -11,6 +11,7 @@ module tracking use output, only: write_message use particle_header, only: LocalCoord, Particle_Base, Particle_CE, Particle_MG use physics, only: collision + use physics_mg, only: collision_mg use random_lcg, only: prn use simple_string, only: to_str use tally, only: score_analog_tally, score_tracklength_tally, & @@ -170,6 +171,8 @@ contains select type(p) type is (Particle_CE) call collision(p) + type is (Particle_MG) + call collision_mg(p) end select ! Score collision estimator tallies -- this is done after a collision From 9d2c3e283665dfde8f2fe5bb787697be8264f3a8 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 1 Nov 2015 14:44:17 -0500 Subject: [PATCH 011/650] Able to calculate MG version, not getting right answer yet. --- src/ace.F90 | 2 +- src/input_xml.F90 | 2 +- src/mgxs_data.F90 | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ace.F90 b/src/ace.F90 index e51c2b3a0e..917876556c 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -28,7 +28,7 @@ module ace contains !=============================================================================== -! READ_XS reads all the cross sections for the problem and stores them in +! READ_CE_XS reads all the cross sections for the problem and stores them in ! nuclides and sab_tables arrays !=============================================================================== diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 29fdc11783..1ed4cc01ee 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -4311,7 +4311,7 @@ contains end if legendre_mu_points = -1 * legendre_mu_points else - ! One will say 'dont do it' + ! One means 'don't expand scattering moments to a table, sample via legendre' legendre_mu_points = 1 end if diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 64c5dcce7d..3c80116c82 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -62,6 +62,8 @@ contains ! allocate arrays for ACE table storage and cross section cache allocate(nuclides_MG(n_nuclides_total)) + allocate(micro_xs(1)) + ! Find out if we need kappa fission (are there any k_fiss tallies?) get_kfiss = .false. do i = 1, n_tallies From d1b48a9a1f27817473309f6717a9d6c9a58b3ad5 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 1 Nov 2015 15:17:38 -0500 Subject: [PATCH 012/650] Oh, easy fix to get the right answer with MG code. Yay! Have one remaining problem before moving to the next stage. That is that I am having OpenMP issues with both the CE and MG versions. By the way, the next step is to implement the MG for tallies, and to move on to making sure all output is good to go. --- src/global.F90 | 16 ++++++++++++++++ src/input_xml.F90 | 12 ++++++++++++ src/mgxs_data.F90 | 2 -- src/physics_mg.F90 | 3 --- src/tracking.F90 | 6 +++--- 5 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/global.F90 b/src/global.F90 index 57b242ab22..37e442adc6 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -477,6 +477,22 @@ contains deallocate(nuclides_0K) end if + if (allocated(nuclides_MG)) then + ! First call the clear routines + do i = 1, size(nuclides_MG) + call nuclides_MG(i) % obj % clear() + end do + deallocate(nuclides_MG) + end if + + if (allocated(macro_xs)) then + ! First call the clear routines + do i = 1, size(macro_xs) + call macro_xs(i) % obj % clear() + end do + deallocate(macro_xs) + end if + if (allocated(sab_tables)) deallocate(sab_tables) if (allocated(xs_listings)) deallocate(xs_listings) if (allocated(micro_xs)) deallocate(micro_xs) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 1ed4cc01ee..64639b8941 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -152,6 +152,18 @@ contains end if end if + if (.not. run_CE) then + ! Scattering Treatments + if (check_for_node(doc, "max_order")) then + call get_node_value(doc, "max_order", max_order) + else + ! Set to default of largest int, which means to use whatever is contained in library + max_order = huge(0) + end if + else + max_order = 0 + end if + ! Set output directory if a path has been specified on the ! element if (check_for_node(doc, "output_path")) then diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 3c80116c82..64c5dcce7d 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -62,8 +62,6 @@ contains ! allocate arrays for ACE table storage and cross section cache allocate(nuclides_MG(n_nuclides_total)) - allocate(micro_xs(1)) - ! Find out if we need kappa fission (are there any k_fiss tallies?) get_kfiss = .false. do i = 1, n_tallies diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index c53661086a..2aa7e2ee28 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -5,19 +5,16 @@ module physics_mg use constants use error, only: fatal_error, warning use global - use interpolation, only: interpolate_tab1 use macroxs_header, only: MacroXS_Base, MacroXSContainer use macroxs, only: sample_fission_energy, sample_scatter use material_header, only: Material use mesh, only: get_mesh_indices - ! use nuclide_header, only: Nuclide_MG, NuclideMGContainer use output, only: write_message use particle_header, only: Particle_Base, Particle_MG use particle_restart_write, only: write_particle_restart use physics_common use random_lcg, only: prn use scattdata_header - use search, only: binary_search use simple_string, only: to_str implicit none diff --git a/src/tracking.F90 b/src/tracking.F90 index 3ca75e3381..5ba7eb0ac6 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -55,9 +55,9 @@ contains total_weight = total_weight + p % wgt ! Force calculation of cross-sections by setting last energy to zero - ! This is a penalty incurred by MG solver, but id rather have penalties - ! applied there over the CE Solver (i.e., by putting an if-block here) - micro_xs % last_E = ZERO + if (run_CE) then + micro_xs % last_E = ZERO + end if ! Prepare to write out particle track. if (p % write_track) then From a989df44c0925ab73efba56ecc5abcae8ee86931 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 1 Nov 2015 20:08:38 -0500 Subject: [PATCH 013/650] A few fixes related to MG and use of p % coord. Still have no idea whats up with the OpenMP issues --- src/physics_mg.F90 | 8 +++++--- src/simulation.F90 | 2 +- src/tracking.F90 | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index 2aa7e2ee28..ca7aebdb36 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -142,10 +142,12 @@ contains type(Particle_MG), intent(inout) :: p - call sample_scatter(macro_xs(p % material) % obj, p % coord(1) % uvw, & - p % last_g, p % g, p % mu, p % wgt) + call sample_scatter(macro_xs(p % material) % obj, & + p % coord(p % n_coord) % uvw, p % last_g, p % g, & + p % mu, p % wgt) - p % coord(1) % uvw = rotate_angle(p % coord(1) % uvw, p % mu) + p % coord(p % n_coord) % uvw = rotate_angle(p % coord(p % n_coord) % uvw, & + p % mu) ! Set event component p % event = EVENT_SCATTER diff --git a/src/simulation.F90 b/src/simulation.F90 index 088a764f79..41330858ff 100644 --- a/src/simulation.F90 +++ b/src/simulation.F90 @@ -40,7 +40,7 @@ contains subroutine run_simulation() class(Particle_Base), pointer :: p - integer(8) :: i_work + integer(8) :: i_work if (run_CE) then allocate(Particle_CE :: p) diff --git a/src/tracking.F90 b/src/tracking.F90 index 5ba7eb0ac6..17fc9ab3fa 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -93,7 +93,7 @@ contains type is (Particle_MG) if ((p % material /= p % last_material) .or. (p % g /= p % last_g)) then call calculate_mgxs(macro_xs(p % material) % obj, p % g, & - p % coord(1) % uvw, material_xs) + p % coord(p % n_coord) % uvw, material_xs) end if end select From abd227ba323aa2dc4ed549df66824fe321d5718c Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 2 Nov 2015 05:28:36 -0500 Subject: [PATCH 014/650] Added in generation of nuclidic xs to make tallying easier. It may end up being the case I need to have a separate tally routine, or at least score_general, for MG and CE. If that is the case, this new nuclidic xs info may not be needed. --- src/macroxs.F90 | 58 ++++++++++++++++++++++++++++++++---------- src/nuclide_header.F90 | 44 +++++++++++++++++++++----------- src/tracking.F90 | 16 +++++++----- 3 files changed, 82 insertions(+), 36 deletions(-) diff --git a/src/macroxs.F90 b/src/macroxs.F90 index 799d3115b8..bfbf83e5c9 100644 --- a/src/macroxs.F90 +++ b/src/macroxs.F90 @@ -3,8 +3,10 @@ module macroxs use constants use macroxs_header, only: MacroXS_Base, MacroXS_Iso, MacroXS_Angle, & expand_harmonic + use material_header, only: Material use math - use nuclide_header, only: find_angle, MaterialMacroXS + use nuclide_header, only: find_angle, MaterialMacroXS, NuclideMicroXS, & + Nuclide_MG, NuclideMGContainer use random_lcg, only: prn use scattdata_header use search @@ -17,31 +19,59 @@ contains ! UPDATE_XS stores the xs to work with !=============================================================================== - subroutine calculate_mgxs(this, gin, uvw, xs) + subroutine calculate_mgxs(this, mat, nuclides, gin, uvw, xs, micro_xs) class(MacroXS_Base), intent(in) :: this - integer, intent(in) :: gin ! Incoming neutron group - real(8), intent(in) :: uvw(3) ! Incoming neutron direction + type(Material), intent(in) :: mat ! Material of interest + type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides + integer, intent(in) :: gin ! Incoming neutron group + real(8), intent(in) :: uvw(3) ! Incoming neutron direction type(MaterialMacroXS), intent(inout) :: xs + type(NuclideMicroXS), intent(inout) :: micro_xs(:) integer :: iazi, ipol + integer :: i, i_nuclide + class(Nuclide_MG), pointer :: nuc select type(this) type is (MacroXS_Iso) - xs % total = this % total(gin) - xs % elastic = this % scattxs(gin) - xs % absorption = this % absorption(gin) - xs % fission = this % fission(gin) - xs % nu_fission = this % nu_fission(gin) + xs % total = this % total(gin) + xs % elastic = this % scattxs(gin) + xs % absorption = this % absorption(gin) + xs % fission = this % fission(gin) + xs % nu_fission = this % nu_fission(gin) + xs % kappa_fission = this % k_fission(gin) type is (MacroXS_Angle) call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) - xs % total = this % total(gin, iazi, ipol) - xs % elastic = this % scattxs(gin, iazi, ipol) - xs % absorption = this % absorption(gin, iazi, ipol) - xs % fission = this % fission(gin, iazi, ipol) - xs % nu_fission = this % nu_fission(gin, iazi, ipol) + xs % total = this % total(gin, iazi, ipol) + xs % elastic = this % scattxs(gin, iazi, ipol) + xs % absorption = this % absorption(gin, iazi, ipol) + xs % fission = this % fission(gin, iazi, ipol) + xs % nu_fission = this % nu_fission(gin, iazi, ipol) + xs % kappa_fission = this % k_fission(gin, iazi, ipol) end select + ! Place nuclidic xs in micro_xs for tallying purposes + do i = 1, mat % n_nuclides + ! Determine microscopic cross section for this nuclide + i_nuclide = mat % nuclide(i) + + nuc => nuclides(i_nuclide) % obj + micro_xs(i_nuclide) % total = nuc % get_xs(gin, 'total', & + I_AZI=iazi, I_POL=ipol) + micro_xs(i_nuclide) % elastic = nuc % get_xs(gin, 'scatter', & + I_AZI=iazi, I_POL=ipol) + micro_xs(i_nuclide) % absorption = nuc % get_xs(gin, 'absorption', & + I_AZI=iazi, I_POL=ipol) + micro_xs(i_nuclide) % fission = nuc % get_xs(gin, 'fission', & + I_AZI=iazi, I_POL=ipol) + micro_xs(i_nuclide) % nu_fission = nuc % get_xs(gin, 'nu_fission', & + I_AZI=iazi, I_POL=ipol) + micro_xs(i_nuclide) % kappa_fission = nuc % get_xs(gin, 'k_fission', & + I_AZI=iazi, I_POL=ipol) + + end do + end subroutine calculate_mgxs diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 2910f63b19..6f502c11ea 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -117,13 +117,16 @@ module nuclide_header end type Nuclide_MG abstract interface - function nuclide_mg_get_xs_(this, g, xstype, gout, uvw) result(xs) + function nuclide_mg_get_xs_(this, g, xstype, gout, uvw, i_azi, i_pol) & + result(xs) import Nuclide_MG class(Nuclide_MG), intent(in) :: this integer, intent(in) :: g ! Incoming Energy group character(*), intent(in) :: xstype ! Cross Section Type integer, optional, intent(in) :: gout ! Outgoing Group real(8), optional, intent(in) :: uvw(3) ! Requested Angle + integer, optional, intent(in) :: i_azi ! Azimuthal Index + integer, optional, intent(in) :: i_pol ! Polar Index real(8) :: xs ! Resultant xs end function nuclide_mg_get_xs_ end interface @@ -532,12 +535,15 @@ module nuclide_header ! NUCLIDE_*_GET_XS Returns the requested data type !=============================================================================== - function nuclide_iso_get_xs(this, g, xstype, gout, uvw) result(xs) + function nuclide_iso_get_xs(this, g, xstype, gout, uvw, i_azi, i_pol) & + result(xs) class(Nuclide_Iso), intent(in) :: this integer, intent(in) :: g ! Incoming Energy group - character(*), intent(in) :: xstype ! Cross Section Type + character(*), intent(in) :: xstype ! Cross Section Type integer, optional, intent(in) :: gout ! Outgoing Group real(8), optional, intent(in) :: uvw(3) ! Requested Angle + integer, optional, intent(in) :: i_azi ! Azimuthal Index + integer, optional, intent(in) :: i_pol ! Polar Index real(8) :: xs ! Resultant xs if (present(gout)) then @@ -565,41 +571,49 @@ module nuclide_header end if end function nuclide_iso_get_xs - function nuclide_angle_get_xs(this, g, xstype, gout, uvw) result(xs) + function nuclide_angle_get_xs(this, g, xstype, gout, uvw, i_azi, i_pol) & + result(xs) class(Nuclide_Angle), intent(in) :: this integer, intent(in) :: g ! Incoming Energy group character(*), intent(in) :: xstype ! Cross Section Type integer, optional, intent(in) :: gout ! Outgoing Group real(8), optional, intent(in) :: uvw(3) ! Requested Angle + integer, optional, intent(in) :: i_azi ! Azimuthal Index + integer, optional, intent(in) :: i_pol ! Polar Index real(8) :: xs ! Resultant xs - integer :: i_pol, i_azi + integer :: i_azi_, i_pol_ - call find_angle(this % polar, this % azimuthal, uvw, i_azi, i_pol) + if (present(i_azi) .and. present(i_pol)) then + i_azi_ = i_azi + i_pol_ = i_pol + else + call find_angle(this % polar, this % azimuthal, uvw, i_azi_, i_pol_) + end if if (present(gout)) then select case(xstype) case('mult') - xs = this % mult(gout,g,i_azi,i_pol) + xs = this % mult(gout,g,i_azi_,i_pol_) case('nu_fission') - xs = this % nu_fission(gout,g,i_azi,i_pol) + xs = this % nu_fission(gout,g,i_azi_,i_pol_) case('chi') - xs = this % chi(gout,i_azi,i_pol) + xs = this % chi(gout,i_azi_,i_pol_) end select else select case(xstype) case('total') - xs = this % total(g,i_azi,i_pol) + xs = this % total(g,i_azi_,i_pol_) case('absorption') - xs = this % absorption(g,i_azi,i_pol) + xs = this % absorption(g,i_azi_,i_pol_) case('fission') - xs = this % fission(g,i_azi,i_pol) + xs = this % fission(g,i_azi_,i_pol_) case('k_fission') - xs = this % k_fission(g,i_azi,i_pol) + xs = this % k_fission(g,i_azi_,i_pol_) case('chi') - xs = this % chi(g,i_azi,i_pol) + xs = this % chi(g,i_azi_,i_pol_) case('scatter') - xs = this % total(g,i_azi,i_pol) - this % absorption(g,i_azi,i_pol) + xs = this % total(g,i_azi_,i_pol_) - this % absorption(g,i_azi_,i_pol_) end select end if diff --git a/src/tracking.F90 b/src/tracking.F90 index 17fc9ab3fa..1960089c79 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -83,18 +83,20 @@ contains 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. + ! Calculate microscopic and macroscopic cross sections select type(p) type is (Particle_CE) + ! 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) type is (Particle_MG) - if ((p % material /= p % last_material) .or. (p % g /= p % last_g)) then - call calculate_mgxs(macro_xs(p % material) % obj, p % g, & - p % coord(p % n_coord) % uvw, material_xs) - end if + ! Since the MGXS can be angle dependent, this needs to be done + ! After every collision for the MGXS mode + call calculate_mgxs(macro_xs(p % material) % obj, & + materials(p % material), nuclides_MG, p % g, & + p % coord(p % n_coord) % uvw, material_xs, & + micro_xs) end select ! Find the distance to the nearest boundary From f2c3121c1c16319b70cd1ecec612a2692eb8df98 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 2 Nov 2015 21:10:41 -0500 Subject: [PATCH 015/650] Ok new strategy. Removed Particle_Base as abstract and Particle_CE and Particle_MG as extended types. Now, since the memory overhead is low (2 ints per thread), I combined Particle_CE and Particle_MG. This will make life significantly easier when I attack tally.F90, and also fixes my OpenMP issue. Whew. --- src/cross_section.F90 | 4 +- src/eigenvalue.F90 | 1 - src/geometry.F90 | 21 +++-- src/macroxs.F90 | 8 +- src/mgxs_data.F90 | 3 + src/nuclide_header.F90 | 28 ++++-- src/output.F90 | 11 ++- src/particle_header.F90 | 150 +++++++-------------------------- src/particle_restart.F90 | 22 ++--- src/particle_restart_write.F90 | 5 +- src/physics.F90 | 20 ++--- src/physics_common.F90 | 4 +- src/physics_mg.F90 | 12 +-- src/plot.F90 | 16 ++-- src/simulation.F90 | 21 ++--- src/source.F90 | 4 +- src/tally.F90 | 50 +++++------ src/track_output.F90 | 6 +- src/tracking.F90 | 34 +++----- 19 files changed, 160 insertions(+), 260 deletions(-) diff --git a/src/cross_section.F90 b/src/cross_section.F90 index 4e75970733..509fc71d5f 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -9,7 +9,7 @@ module cross_section use list_header, only: ListElemInt use material_header, only: Material use nuclide_header - use particle_header, only: Particle_Base, Particle_CE, Particle_MG + use particle_header, only: Particle use random_lcg, only: prn use sab_header, only: SAlphaBeta use search, only: binary_search @@ -29,7 +29,7 @@ contains subroutine calculate_xs(p) - type(Particle_CE), intent(in) :: p + type(Particle), intent(in) :: p integer :: i ! loop index over nuclides integer :: i_nuclide ! index into nuclides array diff --git a/src/eigenvalue.F90 b/src/eigenvalue.F90 index 83f8989cc0..7ed6c34f01 100644 --- a/src/eigenvalue.F90 +++ b/src/eigenvalue.F90 @@ -10,7 +10,6 @@ module eigenvalue use math, only: t_percentile use mesh, only: count_bank_sites use mesh_header, only: RegularMesh - ! use particle_header, only: Particle_Base use random_lcg, only: prn, set_particle_seed, prn_skip use search, only: binary_search use simple_string, only: to_str diff --git a/src/geometry.F90 b/src/geometry.F90 index ee23a4e36e..7675c70dc1 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -6,8 +6,7 @@ module geometry &RectLattice, HexLattice use global use output, only: write_message - use particle_header, only: LocalCoord, Particle_Base, Particle_CE, & - Particle_MG + use particle_header, only: LocalCoord, Particle use particle_restart_write, only: write_particle_restart use surface_header use simple_string, only: to_str @@ -33,7 +32,7 @@ contains pure function cell_contains(c, p) result(in_cell) type(Cell), intent(in) :: c - class(Particle_Base), intent(in) :: p + type(Particle), intent(in) :: p logical :: in_cell if (c%simple) then @@ -45,7 +44,7 @@ contains pure function simple_cell_contains(c, p) result(in_cell) type(Cell), intent(in) :: c - class(Particle_Base), intent(in) :: p + type(Particle), intent(in) :: p logical :: in_cell integer :: i @@ -79,7 +78,7 @@ contains pure function complex_cell_contains(c, p) result(in_cell) type(Cell), intent(in) :: c - class(Particle_Base), intent(in) :: p + type(Particle), intent(in) :: p logical :: in_cell integer :: i @@ -140,7 +139,7 @@ contains subroutine check_cell_overlap(p) - class(Particle_Base), intent(inout) :: p + type(Particle), intent(inout) :: p integer :: i ! cell loop index on a level integer :: j ! coordinate level index @@ -188,7 +187,7 @@ contains recursive subroutine find_cell(p, found, search_cells) - class(Particle_Base), intent(inout) :: p + type(Particle), intent(inout) :: p logical, intent(inout) :: found integer, optional :: search_cells(:) integer :: i ! index over cells @@ -340,7 +339,7 @@ contains !=============================================================================== subroutine cross_surface(p, last_cell) - class(Particle_Base), intent(inout) :: p + type(Particle), intent(inout) :: p integer, intent(in) :: last_cell ! last cell particle was in real(8) :: u ! x-component of direction @@ -502,7 +501,7 @@ contains subroutine cross_lattice(p, lattice_translation) - class(Particle_Base), intent(inout) :: p + type(Particle), intent(inout) :: p integer, intent(in) :: lattice_translation(3) integer :: j integer :: i_xyz(3) ! indices in lattice @@ -575,7 +574,7 @@ contains subroutine distance_to_boundary(p, dist, surface_crossed, lattice_translation, & next_level) - class(Particle_Base), intent(inout) :: p + type(Particle), intent(inout) :: p real(8), intent(out) :: dist integer, intent(out) :: surface_crossed integer, intent(out) :: lattice_translation(3) @@ -955,7 +954,7 @@ contains subroutine handle_lost_particle(p, message) - class(Particle_Base), intent(inout) :: p + type(Particle), intent(inout) :: p character(*) :: message ! Print warning and write lost particle file diff --git a/src/macroxs.F90 b/src/macroxs.F90 index bfbf83e5c9..14980cc6a7 100644 --- a/src/macroxs.F90 +++ b/src/macroxs.F90 @@ -39,7 +39,9 @@ contains xs % absorption = this % absorption(gin) xs % fission = this % fission(gin) xs % nu_fission = this % nu_fission(gin) - xs % kappa_fission = this % k_fission(gin) + if (allocated(this % k_fission)) then + xs % kappa_fission = this % k_fission(gin) + end if type is (MacroXS_Angle) call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) @@ -48,7 +50,9 @@ contains xs % absorption = this % absorption(gin, iazi, ipol) xs % fission = this % fission(gin, iazi, ipol) xs % nu_fission = this % nu_fission(gin, iazi, ipol) - xs % kappa_fission = this % k_fission(gin, iazi, ipol) + if (allocated(this % k_fission)) then + xs % kappa_fission = this % k_fission(gin, iazi, ipol) + end if end select ! Place nuclidic xs in micro_xs for tallying purposes diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 64c5dcce7d..d51dfd603e 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -61,6 +61,9 @@ contains ! allocate arrays for ACE table storage and cross section cache allocate(nuclides_MG(n_nuclides_total)) +!$omp parallel + allocate(micro_xs(n_nuclides_total)) +!$omp end parallel ! Find out if we need kappa fission (are there any k_fiss tallies?) get_kfiss = .false. diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 6f502c11ea..1a16c3f5ea 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -546,6 +546,13 @@ module nuclide_header integer, optional, intent(in) :: i_pol ! Polar Index real(8) :: xs ! Resultant xs + xs = ZERO + + if ((xstype == 'nu_fission' .or. xstype == 'fission' .or. xstype =='chi' & + .or. xstype =='k_fission') .and. (.not. this % fissionable)) then + return + end if + if (present(gout)) then select case(xstype) case('mult') @@ -562,7 +569,9 @@ module nuclide_header case('fission') xs = this % fission(g) case('k_fission') - xs = this % k_fission(g) + if (allocated(this % k_fission)) then + xs = this % k_fission(g) + end if case('chi') xs = this % chi(g) case('scatter') @@ -584,6 +593,13 @@ module nuclide_header integer :: i_azi_, i_pol_ + xs = ZERO + + if ((xstype == 'nu_fission' .or. xstype == 'fission' .or. xstype =='chi' & + .or. xstype =='k_fission') .and. (.not. this % fissionable)) then + return + end if + if (present(i_azi) .and. present(i_pol)) then i_azi_ = i_azi i_pol_ = i_pol @@ -609,7 +625,9 @@ module nuclide_header case('fission') xs = this % fission(g,i_azi_,i_pol_) case('k_fission') - xs = this % k_fission(g,i_azi_,i_pol_) + if (allocated(this % k_fission)) then + xs = this % k_fission(g,i_azi_,i_pol_) + end if case('chi') xs = this % chi(g,i_azi_,i_pol_) case('scatter') @@ -637,11 +655,7 @@ module nuclide_header my_pol = acos(uvw(3)) my_azi = atan2(uvw(2), uvw(1)) - ! Quick and clear (but slower): - ! i_pol = minloc(abs(polar - my_pol),dim=1) - ! i_azi = minloc(abs(azimuthal - my_azi),dim=1) - - ! Fast search for equi-binned angles + ! Search for equi-binned angles dangle = PI / (real(size(polar),8)) i_pol = floor(my_pol / dangle + ONE) dangle = TWO * PI / (real(size(azimuthal),8)) diff --git a/src/output.F90 b/src/output.F90 index 3dba183148..30039e1181 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -13,7 +13,7 @@ module output use mesh_header, only: RegularMesh use mesh, only: mesh_indices_to_bin, bin_to_mesh_indices use nuclide_header - use particle_header, only: LocalCoord, Particle_Base, Particle_CE, Particle_MG + use particle_header, only: LocalCoord, Particle use plot_header use sab_header, only: SAlphaBeta use simple_string, only: to_upper, to_str @@ -253,7 +253,7 @@ contains subroutine print_particle(p) - class(Particle_Base), intent(in) :: p + type(Particle), intent(in) :: p integer :: i ! index for coordinate levels type(Cell), pointer :: c @@ -310,12 +310,11 @@ contains ! Display weight, energy, grid index, and interpolation factor write(ou,*) ' Weight = ' // to_str(p % wgt) - select type(p) - type is (Particle_CE) + if (run_CE) then write(ou,*) ' Energy = ' // to_str(p % E) - type is (Particle_MG) + else write(ou,*) ' Energy Group = ' // to_str(p % g) - end select + end if write(ou,*) ' Delayed Group = ' // to_str(p % delayed_group) write(ou,*) diff --git a/src/particle_header.F90 b/src/particle_header.F90 index 85d83cd3d3..3acf02a4af 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -38,7 +38,7 @@ module particle_header ! geometry !=============================================================================== - type, abstract :: Particle_Base + type Particle ! Basic data integer(8) :: id ! Unique ID integer :: type ! Particle type (n, p, e, etc) @@ -47,6 +47,12 @@ module particle_header integer :: n_coord ! number of current coordinates type(LocalCoord) :: coord(MAX_COORD) ! coordinates for all levels + ! Energy Data + real(8) :: E ! post-collision energy + real(8) :: last_E ! pre-collision energy + integer :: g ! post-collision energy group (MG only) + integer :: last_g ! pre-collision energy group (MG only) + ! Other physical data real(8) :: wgt ! particle weight real(8) :: mu ! angle of scatter @@ -90,39 +96,9 @@ module particle_header contains procedure, pass :: initialize => initialize_particle procedure, pass :: clear => clear_particle - procedure, pass :: initialize_from_source => initialize_from_source_base - procedure, pass :: create_secondary => create_secondary_base - procedure(collision_), deferred, pass :: pre_collision - end type Particle_Base - - abstract interface - subroutine collision_(this) - import Particle_Base - class(Particle_Base), intent(inout) :: this - end subroutine collision_ - end interface - - type, extends(Particle_Base) :: Particle_CE - ! Energy Data - real(8) :: E ! post-collision energy - real(8) :: last_E ! pre-collision energy - - contains - procedure :: initialize_from_source => initialize_from_source_ce - procedure :: create_secondary => create_secondary_ce - procedure :: pre_collision => pre_collision_ce - end type Particle_CE - - type, extends(Particle_Base) :: Particle_MG - ! Energy Data - integer :: g ! post-collision energy group - integer :: last_g ! pre-collision energy group - - contains - procedure :: initialize_from_source => initialize_from_source_mg - procedure :: create_secondary => create_secondary_mg - procedure :: pre_collision => pre_collision_mg - end type Particle_MG + procedure, pass :: initialize_from_source => initialize_from_source + procedure, pass :: create_secondary => create_secondary + end type Particle contains @@ -133,7 +109,7 @@ contains subroutine initialize_particle(this) - class(Particle_Base) :: this + class(Particle) :: this ! Clear coordinate lists call this % clear() @@ -169,7 +145,7 @@ contains subroutine clear_particle(this) - class(Particle_Base) :: this + class(Particle) :: this integer :: i ! remove any coordinate levels @@ -202,9 +178,10 @@ contains ! fission, or simply as a secondary particle. !=============================================================================== - subroutine initialize_from_source_base(this, src) - class(Particle_Base), intent(inout) :: this - type(Bank), intent(in) :: src + subroutine initialize_from_source(this, src, run_CE) + class(Particle), intent(inout) :: this + type(Bank), intent(in) :: src + logical, intent(in) :: run_CE ! set defaults call this % initialize() @@ -216,44 +193,25 @@ contains this % coord(1) % uvw = src % uvw this % last_xyz = src % xyz this % last_uvw = src % uvw - - end subroutine initialize_from_source_base - - subroutine initialize_from_source_ce(this, src) - class(Particle_CE), intent(inout) :: this - type(Bank), intent(in) :: src - - ! set defaults a nd init base - call initialize_from_source_base(this, src) - - ! copy attributes from source bank site this % E = src % E this % last_E = src % E + if (.not. run_CE) then + this % g = src % g + this % last_g = src % g + end if - end subroutine initialize_from_source_ce - - subroutine initialize_from_source_mg(this, src) - class(Particle_MG), intent(inout) :: this - type(Bank), intent(in) :: src - - ! set defaults and init base - call initialize_from_source_base(this, src) - - ! copy attributes from source bank site - this % g = src % g - this % last_g = src % g - - end subroutine initialize_from_source_mg + end subroutine initialize_from_source !=============================================================================== ! CREATE_SECONDARY stores the current phase space attributes of the particle in ! the secondary bank and increments the number of sites in the secondary bank. !=============================================================================== - subroutine create_secondary_base(this, uvw, type) - class(Particle_Base), intent(inout) :: this - real(8), intent(in) :: uvw(3) - integer, intent(in) :: type + subroutine create_secondary(this, uvw, type, run_CE) + class(Particle), intent(inout) :: this + real(8), intent(in) :: uvw(3) + integer, intent(in) :: type + logical, intent(in) :: run_CE integer :: n @@ -268,59 +226,11 @@ contains this % secondary_bank(n) % xyz(:) = this % coord(1) % xyz this % secondary_bank(n) % uvw(:) = uvw this % n_secondary = n - - end subroutine create_secondary_base - - subroutine create_secondary_ce(this, uvw, type) - class(Particle_CE), intent(inout) :: this - real(8), intent(in) :: uvw(3) - integer, intent(in) :: type - - call create_secondary_base(this, uvw, type) - this % secondary_bank(this % n_secondary) % E = this % E + if (.not. run_CE) then + this % secondary_bank(this % n_secondary) % g = this % g + end if - end subroutine create_secondary_ce - - subroutine create_secondary_mg(this, uvw, type) - class(Particle_MG), intent(inout) :: this - real(8), intent(in) :: uvw(3) - integer, intent(in) :: type - - call create_secondary_base(this, uvw, type) - - this % secondary_bank(this % n_secondary) % g = this % g - - end subroutine create_secondary_mg - -!=============================================================================== -! PRE_COLLISION_* Updates pre-collision particle properties -!=============================================================================== - - subroutine pre_collision_ce(this) - class(Particle_CE), intent(inout) :: this - - ! Store pre-collision particle properties - this % last_wgt = this % wgt - this % last_E = this % E - this % last_uvw = this % coord(1) % uvw - - ! Add to collision counter for particle - this % n_collision = this % n_collision + 1 - - end subroutine pre_collision_ce - - subroutine pre_collision_mg(this) - class(Particle_MG), intent(inout) :: this - - ! Store pre-collision particle properties - this % last_wgt = this % wgt - this % last_g = this % g - this % last_uvw = this % coord(1) % uvw - - ! Add to collision counter for particle - this % n_collision = this % n_collision + 1 - - end subroutine pre_collision_mg + end subroutine create_secondary end module particle_header diff --git a/src/particle_restart.F90 b/src/particle_restart.F90 index fc3eb4393e..9d49a4f977 100644 --- a/src/particle_restart.F90 +++ b/src/particle_restart.F90 @@ -8,7 +8,7 @@ module particle_restart use global use hdf5_interface, only: file_open, file_close, read_dataset use output, only: write_message, print_particle - use particle_header, only: Particle_Base, Particle_CE, Particle_MG + use particle_header, only: Particle use random_lcg, only: set_particle_seed use tracking, only: transport @@ -28,7 +28,7 @@ contains integer(8) :: particle_seed integer :: previous_run_mode - class(Particle_Base), pointer :: p + type(Particle) :: p ! Set verbosity high verbosity = 10 @@ -66,7 +66,7 @@ contains !=============================================================================== subroutine read_particle_restart(p, previous_run_mode) - class(Particle_Base), intent(inout) :: p + type(Particle), intent(inout) :: p integer, intent(inout) :: previous_run_mode integer :: int_scalar @@ -96,12 +96,8 @@ contains end select call read_dataset(file_id, 'id', p%id) call read_dataset(file_id, 'weight', p%wgt) - select type(p) - type is (Particle_CE) - call read_dataset(file_id, 'energy', p%E) - type is (Particle_MG) - call read_dataset(file_id, 'energy_group', p%g) - end select + call read_dataset(file_id, 'energy', p%E) + call read_dataset(file_id, 'energy_group', p%g) call read_dataset(file_id, 'xyz', p%coord(1)%xyz) call read_dataset(file_id, 'uvw', p%coord(1)%uvw) @@ -109,12 +105,8 @@ contains p%last_wgt = p%wgt p%last_xyz = p%coord(1)%xyz p%last_uvw = p%coord(1)%uvw - select type(p) - type is (Particle_CE) - p%last_E = p%E - type is (Particle_MG) - p%last_g = p%g - end select + p%last_E = p%E + p%last_g = p%g ! Close hdf5 file call file_close(file_id) diff --git a/src/particle_restart_write.F90 b/src/particle_restart_write.F90 index a7341d71ec..324e96bc7a 100644 --- a/src/particle_restart_write.F90 +++ b/src/particle_restart_write.F90 @@ -3,7 +3,7 @@ module particle_restart_write use bank_header, only: Bank use global use hdf5_interface - use particle_header, only: Particle_Base + use particle_header, only: Particle use simple_string, only: to_str use hdf5 @@ -19,7 +19,7 @@ contains !=============================================================================== subroutine write_particle_restart(p) - class(Particle_Base), intent(in) :: p + type(Particle), intent(in) :: p integer(HID_T) :: file_id character(MAX_FILE_LEN) :: filename @@ -57,6 +57,7 @@ contains call write_dataset(file_id, 'id', p%id) call write_dataset(file_id, 'weight', src%wgt) call write_dataset(file_id, 'energy', src%E) + call write_dataset(file_id, 'energy_group', src%g) call write_dataset(file_id, 'xyz', src%xyz) call write_dataset(file_id, 'uvw', src%uvw) diff --git a/src/physics.F90 b/src/physics.F90 index 0b0509e1c5..3ea28c2281 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -12,7 +12,7 @@ module physics use mesh, only: get_mesh_indices use nuclide_header use output, only: write_message - use particle_header, only: Particle_CE + use particle_header, only: Particle use particle_restart_write, only: write_particle_restart use physics_common use random_lcg, only: prn @@ -34,7 +34,7 @@ contains subroutine collision(p) - type(Particle_CE), intent(inout) :: p + type(Particle), intent(inout) :: p ! Store pre-collision particle properties p % last_wgt = p % wgt @@ -72,7 +72,7 @@ contains subroutine sample_reaction(p) - type(Particle_CE), intent(inout) :: p + type(Particle), intent(inout) :: p integer :: i_nuclide ! index in nuclides array integer :: i_reaction ! index in nuc % reactions array @@ -125,7 +125,7 @@ contains function sample_nuclide(p, base) result(i_nuclide) - type(Particle_CE), intent(in) :: p + type(Particle), intent(in) :: p character(7), intent(in) :: base ! which reaction to sample based on integer :: i_nuclide @@ -242,7 +242,7 @@ contains subroutine absorption(p, i_nuclide) - type(Particle_CE), intent(inout) :: p + type(Particle), intent(inout) :: p integer, intent(in) :: i_nuclide if (survival_biasing) then @@ -283,7 +283,7 @@ contains subroutine scatter(p, i_nuclide) - type(Particle_CE), intent(inout) :: p + type(Particle), intent(inout) :: p integer, intent(in) :: i_nuclide integer :: i @@ -1040,7 +1040,7 @@ contains subroutine create_fission_sites(p, i_nuclide, i_reaction) - type(Particle_CE), intent(inout) :: p + type(Particle), intent(inout) :: p integer, intent(in) :: i_nuclide integer, intent(in) :: i_reaction @@ -1158,7 +1158,7 @@ contains type(Nuclide_CE), pointer :: nuc type(Reaction), pointer :: rxn - type(Particle_CE), intent(inout) :: p ! Particle causing fission + type(Particle), intent(inout) :: p ! Particle causing fission real(8) :: E_out ! outgoing E of fission neutron integer :: j ! index on nu energy grid / precursor group @@ -1284,7 +1284,7 @@ contains subroutine inelastic_scatter(nuc, rxn, p) type(Nuclide_CE), pointer :: nuc type(Reaction), pointer :: rxn - type(Particle_CE), intent(inout) :: p + type(Particle), intent(inout) :: p integer :: i ! loop index integer :: law ! secondary energy distribution law @@ -1355,7 +1355,7 @@ contains p % wgt = yield * p % wgt else do i = 1, rxn % multiplicity - 1 - call p % create_secondary(p % coord(1) % uvw, NEUTRON) + call p % create_secondary(p % coord(1) % uvw, NEUTRON, run_CE) end do end if diff --git a/src/physics_common.F90 b/src/physics_common.F90 index fbd85cc625..7d5b1cea8b 100644 --- a/src/physics_common.F90 +++ b/src/physics_common.F90 @@ -2,7 +2,7 @@ module physics_common use constants use global, only: weight_cutoff, weight_survive - use particle_header, only: Particle_Base, Particle_CE, Particle_MG + use particle_header, only: Particle use random_lcg, only: prn implicit none @@ -15,7 +15,7 @@ contains subroutine russian_roulette(p) - class(Particle_Base), intent(inout) :: p + type(Particle), intent(inout) :: p if (p % wgt < weight_cutoff) then if (prn() < p % wgt / weight_survive) then diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index ca7aebdb36..9866b48d20 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -10,7 +10,7 @@ module physics_mg use material_header, only: Material use mesh, only: get_mesh_indices use output, only: write_message - use particle_header, only: Particle_Base, Particle_MG + use particle_header, only: Particle use particle_restart_write, only: write_particle_restart use physics_common use random_lcg, only: prn @@ -28,7 +28,7 @@ contains subroutine collision_mg(p) - type(Particle_MG), intent(inout) :: p + type(Particle), intent(inout) :: p ! Store pre-collision particle properties p % last_wgt = p % wgt @@ -58,7 +58,7 @@ contains subroutine sample_reaction(p) - type(Particle_MG), intent(inout) :: p + type(Particle), intent(inout) :: p type(Material), pointer :: mat @@ -102,7 +102,7 @@ contains subroutine absorption(p) - type(Particle_MG), intent(inout) :: p + type(Particle), intent(inout) :: p if (survival_biasing) then ! Determine weight absorbed in survival biasing @@ -140,7 +140,7 @@ contains subroutine scatter(p) - type(Particle_MG), intent(inout) :: p + type(Particle), intent(inout) :: p call sample_scatter(macro_xs(p % material) % obj, & p % coord(p % n_coord) % uvw, p % last_g, p % g, & @@ -161,7 +161,7 @@ contains subroutine create_fission_sites(p) - type(Particle_MG), intent(inout) :: p + type(Particle), intent(inout) :: p integer :: i ! loop index integer :: nu ! actual number of neutrons produced diff --git a/src/plot.F90 b/src/plot.F90 index e46742ea1a..518cc4f0cf 100644 --- a/src/plot.F90 +++ b/src/plot.F90 @@ -9,7 +9,7 @@ module plot use mesh, only: get_mesh_indices use mesh_header, only: RegularMesh use output, only: write_message - use particle_header, only: LocalCoord, Particle_Base + use particle_header, only: LocalCoord, Particle use plot_header use ppmlib, only: Image, init_image, allocate_image, & deallocate_image, set_pixel @@ -56,7 +56,7 @@ contains subroutine position_rgb(p, pl, rgb, id) - class(Particle_Base), intent(inout) :: p + type(Particle), intent(inout) :: p type(ObjectPlot), pointer, intent(in) :: pl integer, intent(out) :: rgb(3) integer, intent(out) :: id @@ -123,9 +123,9 @@ contains real(8) :: in_pixel real(8) :: out_pixel real(8) :: xyz(3) - type(Image) :: img - class(Particle_Base), pointer :: p - type(ProgressBar) :: progress + type(Image) :: img + type(Particle) :: p + type(ProgressBar) :: progress ! Initialize and allocate space for image call init_image(img) @@ -362,9 +362,9 @@ contains integer(HSIZE_T) :: offset(3) real(8) :: vox(3) ! x, y, and z voxel widths real(8) :: ll(3) ! lower left starting point for each sweep direction - class(Particle_Base), pointer :: p - type(ProgressBar) :: progress - type(c_ptr) :: f_ptr + type(Particle) :: p + type(ProgressBar) :: progress + type(c_ptr) :: f_ptr ! compute voxel widths in each direction vox = pl % width/dble(pl % pixels) diff --git a/src/simulation.F90 b/src/simulation.F90 index 41330858ff..d1b96d8b08 100644 --- a/src/simulation.F90 +++ b/src/simulation.F90 @@ -15,7 +15,7 @@ module simulation use global use output, only: write_message, header, print_columns, & print_batch_keff, print_generation - use particle_header, only: Particle_Base, Particle_CE, Particle_MG + use particle_header, only: Particle use random_lcg, only: set_particle_seed use source, only: initialize_source use state_point, only: write_state_point, write_source_point @@ -39,14 +39,8 @@ contains subroutine run_simulation() - class(Particle_Base), pointer :: p - integer(8) :: i_work - - if (run_CE) then - allocate(Particle_CE :: p) - else - allocate(Particle_MG :: p) - end if + type(Particle) :: p + integer(8) :: i_work if (.not. restart_run) call initialize_source() @@ -122,9 +116,6 @@ contains ! Clear particle call p % clear() - if (associated(p)) & - deallocate(p) - end subroutine run_simulation !=============================================================================== @@ -133,14 +124,14 @@ contains subroutine initialize_history(p, index_source) - class(Particle_Base), pointer, intent(inout) :: p - 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 integer :: i ! set defaults - call p % initialize_from_source(source_bank(index_source)) + call p % initialize_from_source(source_bank(index_source), run_CE) ! set identifier for particle p % id = work_index(rank) + index_source diff --git a/src/source.F90 b/src/source.F90 index 53ed2e9a3d..38df80e8ce 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -8,7 +8,7 @@ module source use global use hdf5_interface, only: file_create, file_open, file_close, read_dataset use output, only: write_message - use particle_header, only: Particle_Base, Particle_CE, Particle_MG + use particle_header, only: Particle use random_lcg, only: prn, set_particle_seed, prn_set_stream use search, only: binary_search use simple_string, only: to_str @@ -109,7 +109,7 @@ contains real(8) :: a ! Arbitrary parameter 'a' real(8) :: b ! Arbitrary parameter 'b' logical :: found ! Does the source particle exist within geometry? - type(Particle_CE) :: p ! Temporary particle for using find_cell + type(Particle) :: p ! Temporary particle for using find_cell integer, save :: num_resamples = 0 ! Number of resamples encountered ! Set weight to one by default diff --git a/src/tally.F90 b/src/tally.F90 index 640cb9f58d..6ec0dee19c 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -11,8 +11,7 @@ module tally mesh_intersects_2d, mesh_intersects_3d use mesh_header, only: RegularMesh use output, only: header - use particle_header, only: LocalCoord, Particle_Base, Particle_CE, & - Particle_MG + use particle_header, only: LocalCoord, Particle use search, only: binary_search use simple_string, only: to_str use tally_header, only: TallyResult, TallyMapItem, TallyMapElement @@ -38,7 +37,7 @@ contains subroutine score_general(p, t, start_index, filter_index, i_nuclide, & atom_density, flux) - type(Particle_CE), intent(in) :: p + type(Particle), intent(in) :: p type(TallyObject), pointer, intent(inout) :: t integer, intent(in) :: start_index integer, intent(in) :: i_nuclide @@ -838,7 +837,7 @@ contains subroutine score_all_nuclides(p, i_tally, flux, filter_index) - type(Particle_CE), intent(in) :: p + type(Particle), intent(in) :: p integer, intent(in) :: i_tally real(8), intent(in) :: flux integer, intent(in) :: filter_index @@ -892,7 +891,7 @@ contains subroutine score_analog_tally(p) - type(Particle_CE), intent(in) :: p + type(Particle), intent(in) :: p integer :: i integer :: i_tally @@ -1000,7 +999,7 @@ contains subroutine score_fission_eout(p, t, i_score) - type(Particle_CE), intent(in) :: p + type(Particle), intent(in) :: p type(TallyObject), pointer :: t integer, intent(in) :: i_score ! index for score @@ -1062,7 +1061,7 @@ contains subroutine score_fission_delayed_eout(p, t, i_score) - type(Particle_CE), intent(in) :: p + type(Particle), intent(in) :: p type(TallyObject), intent(inout) :: t integer, intent(in) :: i_score ! index for score @@ -1188,7 +1187,7 @@ contains subroutine score_tracklength_tally(p, distance) - type(Particle_CE), intent(in) :: p + type(Particle), intent(in) :: p real(8), intent(in) :: distance integer :: i @@ -1301,7 +1300,7 @@ contains subroutine score_tl_on_mesh(p, i_tally, d_track) - type(Particle_CE), intent(in) :: p + type(Particle), intent(in) :: p integer, intent(in) :: i_tally real(8), intent(in) :: d_track @@ -1586,7 +1585,7 @@ contains subroutine score_collision_tally(p) - type(Particle_CE), intent(in) :: p + type(Particle), intent(in) :: p integer :: i integer :: i_tally @@ -1695,7 +1694,7 @@ contains subroutine get_scoring_bins(p, i_tally, found_bin) - type(Particle_CE), intent(in) :: p + type(Particle), intent(in) :: p integer, intent(in) :: i_tally logical, intent(out) :: found_bin @@ -1905,7 +1904,7 @@ contains subroutine score_surface_current(p) - class(Particle_Base), intent(in) :: p + type(Particle), intent(in) :: p integer :: i integer :: i_tally @@ -1970,22 +1969,19 @@ contains uvw = p % coord(1) % uvw ! determine incoming energy bin - select type(p) - type is (Particle_CE) - j = t % find_filter(FILTER_ENERGYIN) - if (j > 0) then - n = t % filters(j) % n_bins - ! check if energy of the particle is within energy bins - if (p % E < t % filters(j) % real_bins(1) .or. & - p % E > t % filters(j) % real_bins(n + 1)) then - cycle - end if - - ! search to find incoming energy bin - matching_bins(j) = binary_search(t % filters(j) % real_bins, & - n + 1, p % E) + j = t % find_filter(FILTER_ENERGYIN) + if (j > 0) then + n = t % filters(j) % n_bins + ! check if energy of the particle is within energy bins + if (p % E < t % filters(j) % real_bins(1) .or. & + p % E > t % filters(j) % real_bins(n + 1)) then + cycle end if - end select + + ! search to find incoming energy bin + matching_bins(j) = binary_search(t % filters(j) % real_bins, & + n + 1, p % E) + end if ! ======================================================================= ! SPECIAL CASES WHERE TWO INDICES ARE THE SAME diff --git a/src/track_output.F90 b/src/track_output.F90 index ec09932758..87dbfbfa44 100644 --- a/src/track_output.F90 +++ b/src/track_output.F90 @@ -7,7 +7,7 @@ module track_output use global use hdf5_interface - use particle_header, only: Particle_Base + use particle_header, only: Particle use simple_string, only: to_str use hdf5 @@ -43,7 +43,7 @@ contains !=============================================================================== subroutine write_particle_track(p) - class(Particle_Base), intent(in) :: p + type(Particle), intent(in) :: p real(8), allocatable :: new_coords(:, :) integer :: i @@ -93,7 +93,7 @@ contains !=============================================================================== subroutine finalize_particle_track(p) - class(Particle_Base), intent(in) :: p + type(Particle), intent(in) :: p integer :: i integer :: n_particle_tracks diff --git a/src/tracking.F90 b/src/tracking.F90 index 1960089c79..c761cd5337 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -9,7 +9,7 @@ module tracking use global use macroxs, only: calculate_mgxs use output, only: write_message - use particle_header, only: LocalCoord, Particle_Base, Particle_CE, Particle_MG + use particle_header, only: LocalCoord, Particle use physics, only: collision use physics_mg, only: collision_mg use random_lcg, only: prn @@ -29,7 +29,7 @@ contains subroutine transport(p) - class(Particle_Base), intent(inout) :: p + type(Particle), intent(inout) :: p integer :: j ! coordinate level integer :: next_level ! next coordinate level to check @@ -84,20 +84,18 @@ contains if (check_overlaps) call check_cell_overlap(p) ! Calculate microscopic and macroscopic cross sections - - select type(p) - type is (Particle_CE) + if (run_CE) then ! 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) - type is (Particle_MG) + else ! Since the MGXS can be angle dependent, this needs to be done ! After every collision for the MGXS mode call calculate_mgxs(macro_xs(p % material) % obj, & materials(p % material), nuclides_MG, p % g, & p % coord(p % n_coord) % uvw, material_xs, & micro_xs) - end select + end if ! Find the distance to the nearest boundary call distance_to_boundary(p, d_boundary, surface_crossed, & @@ -120,10 +118,7 @@ contains ! Score track-length tallies if (active_tracklength_tallies % size() > 0) then - select type(p) - type is (Particle_CE) - call score_tracklength_tally(p, distance) - end select + call score_tracklength_tally(p, distance) end if @@ -170,21 +165,17 @@ contains ! Clear surface component p % surface = NONE - select type(p) - type is (Particle_CE) + if (run_CE) then call collision(p) - type is (Particle_MG) + else call collision_mg(p) - end select + end if ! 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 - select type(p) - type is (Particle_CE) - if (active_collision_tallies % size() > 0) call score_collision_tally(p) - if (active_analog_tallies % size() > 0) call score_analog_tally(p) - end select + if (active_collision_tallies % size() > 0) call score_collision_tally(p) + if (active_analog_tallies % size() > 0) call score_analog_tally(p) ! Reset banked weight during collision p % n_bank = 0 @@ -226,7 +217,8 @@ contains ! Check for secondary particles if this particle is dead if (.not. p % alive) then if (p % n_secondary > 0) then - call p % initialize_from_source(p % secondary_bank(p % n_secondary)) + call p % initialize_from_source(p % secondary_bank(p % n_secondary), & + run_CE) p % n_secondary = p % n_secondary - 1 ! Enter new particle in particle track file From d7ee342b124a85251a4ad646b134d5002936af92 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 2 Nov 2015 21:18:27 -0500 Subject: [PATCH 016/650] Added code to apply an energy value to the particle when given a group (uses group energy midpoint). This will be useful so that I do not have to change lots of downstream code like CMFD and also will be a future compatability aid. --- src/global.F90 | 1 + src/input_xml.F90 | 5 +++++ src/particle_header.F90 | 2 ++ src/physics_mg.F90 | 4 ++++ 4 files changed, 12 insertions(+) diff --git a/src/global.F90 b/src/global.F90 index 37e442adc6..737aef51f8 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -119,6 +119,7 @@ module global ! Energy group structure real(8), allocatable :: energy_bins(:) + real(8), allocatable :: energy_bin_midpoints(:) ! Maximum Data Order integer :: max_order diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 64639b8941..fd8d5f50f5 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -4315,6 +4315,11 @@ contains call fatal_error("group_structures element must exist!") end if + allocate(energy_bin_midpoints(energy_groups)) + do i = 1, energy_groups + energy_bin_midpoints(i) = 0.5_8 * (energy_bins(i) + energy_bins(i + 1)) + end do + if (check_for_node(doc, "legendre_mu_points")) then ! Get scattering treatment call get_node_value(doc, "legendre_mu_points", legendre_mu_points) diff --git a/src/particle_header.F90 b/src/particle_header.F90 index 3acf02a4af..9c0ddfde0d 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -132,6 +132,8 @@ contains this % fission = .false. this % delayed_group = 0 this % n_delayed_bank(:) = 0 + ! Initialize this % g so there is always at least some initialized value + this % g = 1 ! Set up base level coordinates this % coord(1) % universe = BASE_UNIVERSE diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index 9866b48d20..7d3448aeaa 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -32,6 +32,7 @@ contains ! Store pre-collision particle properties p % last_wgt = p % wgt + p % last_E = p % E p % last_g = p % g p % last_uvw = p % coord(1) % uvw @@ -146,6 +147,9 @@ contains p % coord(p % n_coord) % uvw, p % last_g, p % g, & p % mu, p % wgt) + ! Update energy value for downstream compatability (in tallying) + p % E = energy_bin_midpoints(p % g) + p % coord(p % n_coord) % uvw = rotate_angle(p % coord(p % n_coord) % uvw, & p % mu) From 8870310492cc3cf32ec3107e7ca00307907bbea7 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Tue, 3 Nov 2015 05:06:46 -0500 Subject: [PATCH 017/650] Fine tuning tallies. Got nu-scatter guys to use correct data. Seems like last hurdle is to get the nu fission score done --- src/input_xml.F90 | 76 +++++++++++++++--- src/macroxs_header.F90 | 21 ++++- src/tally.F90 | 174 +++++++++++++++++++++++++---------------- 3 files changed, 192 insertions(+), 79 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index fd8d5f50f5..0c26b841a9 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -2573,6 +2573,15 @@ contains else n_words = get_arraysize_integer(node_filt, "bins") end if + else if (temp_str == 'energy' .or. temp_str == 'energyout' .and. & + .not. run_CE) then + ! For MG calculations, dont require the user to put in all the + ! group boundaries, as there could be many. Assume that if no & + ! bins are entered that that means they want group-wise results. + n_words = -1 + call warning("Energy bins not set in filter on tally " & + &// trim(to_str(t % id))) + else call fatal_error("Bins not set in filter on tally " & &// trim(to_str(t % id))) @@ -2683,28 +2692,55 @@ contains ! Set type of filter t % filters(j) % type = FILTER_ENERGYIN - ! Set number of bins - t % filters(j) % n_bins = n_words - 1 + if (n_words > 0) then + ! Set number of bins + t % filters(j) % n_bins = n_words - 1 - ! Allocate and store bins - allocate(t % filters(j) % real_bins(n_words)) - call get_node_array(node_filt, "bins", t % filters(j) % real_bins) + ! Allocate and store bins + allocate(t % filters(j) % real_bins(n_words)) + call get_node_array(node_filt, "bins", t % filters(j) % real_bins) + else if (n_words == -1) then + ! Set number of bins + t % filters(j) % n_bins = energy_groups + + ! Allocate and store bins + allocate(t % filters(j) % real_bins(energy_groups)) + t % filters(j) % real_bins = energy_bins + end if case ('energyout') ! Set type of filter t % filters(j) % type = FILTER_ENERGYOUT - ! Set number of bins - t % filters(j) % n_bins = n_words - 1 + if (n_words > 0) then + ! Set number of bins + t % filters(j) % n_bins = n_words - 1 - ! Allocate and store bins - allocate(t % filters(j) % real_bins(n_words)) - call get_node_array(node_filt, "bins", t % filters(j) % real_bins) + ! Allocate and store bins + allocate(t % filters(j) % real_bins(n_words)) + call get_node_array(node_filt, "bins", t % filters(j) % real_bins) + else if (n_words == -1) then + ! Set number of bins + t % filters(j) % n_bins = energy_groups + + ! Allocate and store bins + allocate(t % filters(j) % real_bins(energy_groups)) + t % filters(j) % real_bins = energy_bins + end if ! Set to analog estimator t % estimator = ESTIMATOR_ANALOG case ('delayedgroup') + ! Check to see if running in MG mode, because if so, the current + ! system isnt set up yet to support delayed group data and thus + ! these tallies + if (.not. run_CE) then + call fatal_error("delayedgroup filter on tally " & + // trim(to_str(t % id)) // " not yet supported& + & for multi-group mode.") + end if + ! Set type of filter t % filters(j) % type = FILTER_DELAYEDGROUP @@ -3219,6 +3255,12 @@ contains case ('n4n', '(n,4n)') t % score_bins(j) = N_4N + ! Disallow for MG mode since data not present + if (.not. run_CE) then + call fatal_error("Cannot tally (n,4n) reaction rate in & + &multi-group mode") + end if + case ('absorption') t % score_bins(j) = SCORE_ABSORPTION if (t % find_filter(FILTER_ENERGYOUT) > 0) then @@ -3243,6 +3285,12 @@ contains ! Set tally estimator to analog t % estimator = ESTIMATOR_ANALOG end if + + ! Disallow for MG mode since data not present + if (.not. run_CE) then + call fatal_error("Cannot tally delayed nu-fission rate in & + &multi-group mode") + end if case ('kappa-fission') t % score_bins(j) = SCORE_KAPPA_FISSION case ('inverse-velocity') @@ -3398,6 +3446,14 @@ contains end if end select + + ! Do a check at the end (instead of for every case) to make sure + ! the tallies are compatible with MG mode where we have less detailed + ! nuclear data + if (.not. run_CE .and. t % score_bins(j) > 0) then + call fatal_error("Cannot tally " // trim(score_name) // & + " reaction rate in multi-group mode") + end if end do t % n_score_bins = n_scores diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index ed768b2430..d33de9241f 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -48,11 +48,12 @@ module macroxs_header end subroutine macroxs_init_ - function macroxs_get_xs_(this, g, xstype, uvw) result(xs) + function macroxs_get_xs_(this, g, xstype, gout, uvw) result(xs) import MacroXS_Base class(MacroXS_Base), intent(in) :: this ! The MacroXS to initialize integer, intent(in) :: g ! Incoming Energy group character(*) , intent(in) :: xstype ! Cross Section Type + integer, optional, intent(in) :: gout ! Outgoing Energy group real(8), optional, intent(in) :: uvw(3) ! Requested Angle real(8) :: xs ! Resultant xs @@ -787,10 +788,11 @@ contains ! MACROXS_*_GET_XS returns the requested data type !=============================================================================== - function macroxs_iso_get_xs(this, g, xstype, uvw) result(xs) + function macroxs_iso_get_xs(this, g, xstype, gout, uvw) result(xs) class(MacroXS_Iso), intent(in) :: this ! The MacroXS to initialize integer, intent(in) :: g ! Incoming Energy group character(*) , intent(in) :: xstype ! Type of xs requested + integer, optional, intent(in) :: gout ! Outgoing Energy group real(8), optional, intent(in) :: uvw(3) ! Requested Angle real(8) :: xs ! Requested x/s @@ -807,14 +809,21 @@ contains xs = this % nu_fission(g) case('scatter') xs = this % scattxs(g) + case('mult') + if (present(gout)) then + xs = this % scatter % mult(gout,g) + else + xs = sum(this % scatter % mult(:,g)) + end if end select end function macroxs_iso_get_xs - function macroxs_angle_get_xs(this, g, xstype, uvw) result(xs) + function macroxs_angle_get_xs(this, g, xstype, gout,uvw) result(xs) class(MacroXS_Angle), intent(in) :: this ! The MacroXS to initialize integer, intent(in) :: g ! Incoming Energy group character(*) , intent(in) :: xstype ! Type of xs requested + integer, optional, intent(in) :: gout ! Outgoing Energy group real(8), optional, intent(in) :: uvw(3) ! Requested Angle real(8) :: xs ! Requested x/s @@ -835,6 +844,12 @@ contains xs = this % nu_fission(g,iazi,ipol) case('scatter') xs = this % scattxs(g,iazi,ipol) + case('mult') + if (present(gout)) then + xs = this % scatter(iazi,ipol) % obj % mult(gout,g) + else + xs = sum(this % scatter(iazi,ipol) % obj % mult(:,g)) + end if end select end if diff --git a/src/tally.F90 b/src/tally.F90 index 6ec0dee19c..3a258c9d3d 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -201,29 +201,43 @@ contains ! For scattering production, we need to use the pre-collision ! weight times the multiplicity as the estimate for the number of ! neutrons exiting a reaction with neutrons in the exit channel - if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & - (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then - ! Don't waste time on very common reactions we know have multiplicities - ! of one. - score = p % last_wgt - else - do m = 1, nuclides(p % event_nuclide) % n_reaction - ! Check if this is the desired MT - if (p % event_MT == nuclides(p % event_nuclide) % reactions(m) % MT) then - ! Found the reaction, set our pointer and move on with life - rxn => nuclides(p % event_nuclide) % reactions(m) - exit - end if - end do - - ! Get multiplicity and apply to score - if (rxn % multiplicity_with_E) then - ! Then the multiplicity was already incorporated in to p % wgt - ! per the scattering routine, - score = p % wgt + if (run_CE) then + if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & + (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then + ! Don't waste time on very common reactions we know have multiplicities + ! of one. + score = p % last_wgt else - ! Grab the multiplicity from the rxn - score = p % last_wgt * rxn % multiplicity + do m = 1, nuclides(p % event_nuclide) % n_reaction + ! Check if this is the desired MT + if (p % event_MT == nuclides(p % event_nuclide) % reactions(m) % MT) then + ! Found the reaction, set our pointer and move on with life + rxn => nuclides(p % event_nuclide) % reactions(m) + exit + end if + end do + + ! Get multiplicity and apply to score + if (rxn % multiplicity_with_E) then + ! Then the multiplicity was already incorporated in to p % wgt + ! per the scattering routine, + score = p % wgt + else + ! Grab the multiplicity from the rxn + score = p % last_wgt * rxn % multiplicity + end if + end if + else + if (i_nuclide > 0) then + score = p % last_wgt * & + nuclides_MG(p % event_nuclide) % obj % get_xs(p % g, 'mult', & + p % last_g, & + p % coord(1) % uvw) + else + score = p % last_wgt * & + macro_xs(p % material) % obj % get_xs(p % g, 'mult', & + p % last_g, & + p % coord(1) % uvw) end if end if @@ -238,29 +252,43 @@ contains ! For scattering production, we need to use the pre-collision ! weight times the multiplicity as the estimate for the number of ! neutrons exiting a reaction with neutrons in the exit channel - if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & - (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then - ! Don't waste time on very common reactions we know have multiplicities - ! of one. - score = p % last_wgt - else - do m = 1, nuclides(p % event_nuclide) % n_reaction - ! Check if this is the desired MT - if (p % event_MT == nuclides(p % event_nuclide) % reactions(m) % MT) then - ! Found the reaction, set our pointer and move on with life - rxn => nuclides(p % event_nuclide) % reactions(m) - exit - end if - end do - - ! Get multiplicity and apply to score - if (rxn % multiplicity_with_E) then - ! Then the multiplicity was already incorporated in to p % wgt - ! per the scattering routine, - score = p % wgt + if (run_CE) then + if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & + (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then + ! Don't waste time on very common reactions we know have multiplicities + ! of one. + score = p % last_wgt else - ! Grab the multiplicity from the rxn - score = p % last_wgt * rxn % multiplicity + do m = 1, nuclides(p % event_nuclide) % n_reaction + ! Check if this is the desired MT + if (p % event_MT == nuclides(p % event_nuclide) % reactions(m) % MT) then + ! Found the reaction, set our pointer and move on with life + rxn => nuclides(p % event_nuclide) % reactions(m) + exit + end if + end do + + ! Get multiplicity and apply to score + if (rxn % multiplicity_with_E) then + ! Then the multiplicity was already incorporated in to p % wgt + ! per the scattering routine, + score = p % wgt + else + ! Grab the multiplicity from the rxn + score = p % last_wgt * rxn % multiplicity + end if + end if + else + if (i_nuclide > 0) then + score = p % last_wgt * & + nuclides_MG(p % event_nuclide) % obj % get_xs(p % g, 'mult', & + p % last_g, & + p % coord(1) % uvw) + else + score = p % last_wgt * & + macro_xs(p % material) % obj % get_xs(p % g, 'mult', & + p % last_g, & + p % coord(1) % uvw) end if end if @@ -275,29 +303,43 @@ contains ! For scattering production, we need to use the pre-collision ! weight times the multiplicity as the estimate for the number of ! neutrons exiting a reaction with neutrons in the exit channel - if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & - (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then - ! Don't waste time on very common reactions we know have multiplicities - ! of one. - score = p % last_wgt - else - do m = 1, nuclides(p % event_nuclide) % n_reaction - ! Check if this is the desired MT - if (p % event_MT == nuclides(p % event_nuclide) % reactions(m) % MT) then - ! Found the reaction, set our pointer and move on with life - rxn => nuclides(p % event_nuclide) % reactions(m) - exit - end if - end do - - ! Get multiplicity and apply to score - if (rxn % multiplicity_with_E) then - ! Then the multiplicity was already incorporated in to p % wgt - ! per the scattering routine, - score = p % wgt + if (run_CE) then + if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & + (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then + ! Don't waste time on very common reactions we know have multiplicities + ! of one. + score = p % last_wgt else - ! Grab the multiplicity from the rxn - score = p % last_wgt * rxn % multiplicity + do m = 1, nuclides(p % event_nuclide) % n_reaction + ! Check if this is the desired MT + if (p % event_MT == nuclides(p % event_nuclide) % reactions(m) % MT) then + ! Found the reaction, set our pointer and move on with life + rxn => nuclides(p % event_nuclide) % reactions(m) + exit + end if + end do + + ! Get multiplicity and apply to score + if (rxn % multiplicity_with_E) then + ! Then the multiplicity was already incorporated in to p % wgt + ! per the scattering routine, + score = p % wgt + else + ! Grab the multiplicity from the rxn + score = p % last_wgt * rxn % multiplicity + end if + end if + else + if (i_nuclide > 0) then + score = p % last_wgt * & + nuclides_MG(p % event_nuclide) % obj % get_xs(p % g, 'mult', & + p % last_g, & + p % coord(1) % uvw) + else + score = p % last_wgt * & + macro_xs(p % material) % obj % get_xs(p % g, 'mult', & + p % last_g, & + p % coord(1) % uvw) end if end if From 8d736c7badaa97af957a2eea7a03fde3fecfc694 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 4 Nov 2015 21:09:24 -0500 Subject: [PATCH 018/650] Separated some tally routines, implemented function pointers, removed nuclidic micro_xs calculation for MG mode. made MG closer in speed to the versionof OpenMGMC. --- src/initialize.F90 | 4 + src/input_xml.F90 | 16 +- src/macroxs.F90 | 28 +- src/nuclide_header.F90 | 21 +- src/tally.F90 | 891 +++++++++++++++++++++++++++++++++++------ src/tracking.F90 | 6 +- 6 files changed, 807 insertions(+), 159 deletions(-) diff --git a/src/initialize.F90 b/src/initialize.F90 index 5793b67226..128759e429 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -26,6 +26,7 @@ module initialize use summary, only: write_summary use tally_header, only: TallyObject, TallyResult, TallyFilter use tally_initialize, only: configure_tallies + use tally, only: init_tally_routines #ifdef MPI use message_passing @@ -150,6 +151,9 @@ contains ! Allocate and setup tally stride, matching_bins, and tally maps call configure_tallies() + ! Set up tally procedure pointers + call init_tally_routines() + ! Determine how much work each processor should do call calculate_work() diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 0c26b841a9..65c840ce25 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -2569,18 +2569,24 @@ contains if (temp_str == 'energy' .or. temp_str == 'energyout' .or. & temp_str == 'mu' .or. temp_str == 'polar' .or. & temp_str == 'azimuthal') then - n_words = get_arraysize_double(node_filt, "bins") + ! If in MG mode, fail if user provides bins, as we are only + ! allowing for all groups + if (.not. run_CE .and. (temp_str == 'energy' .or. & + temp_str == 'energyout')) then + call fatal_error("No energy or energyout bins needed on tally " & + &// trim(to_str(t % id))) + else + n_words = get_arraysize_double(node_filt, "bins") + end if else n_words = get_arraysize_integer(node_filt, "bins") end if - else if (temp_str == 'energy' .or. temp_str == 'energyout' .and. & - .not. run_CE) then + else if (.not. run_CE .and. (temp_str == 'energy' .or. & + temp_str == 'energyout')) then ! For MG calculations, dont require the user to put in all the ! group boundaries, as there could be many. Assume that if no & ! bins are entered that that means they want group-wise results. n_words = -1 - call warning("Energy bins not set in filter on tally " & - &// trim(to_str(t % id))) else call fatal_error("Bins not set in filter on tally " & diff --git a/src/macroxs.F90 b/src/macroxs.F90 index 14980cc6a7..ac66d6b2ac 100644 --- a/src/macroxs.F90 +++ b/src/macroxs.F90 @@ -19,18 +19,13 @@ contains ! UPDATE_XS stores the xs to work with !=============================================================================== - subroutine calculate_mgxs(this, mat, nuclides, gin, uvw, xs, micro_xs) + subroutine calculate_mgxs(this, gin, uvw, xs) class(MacroXS_Base), intent(in) :: this - type(Material), intent(in) :: mat ! Material of interest - type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides integer, intent(in) :: gin ! Incoming neutron group real(8), intent(in) :: uvw(3) ! Incoming neutron direction type(MaterialMacroXS), intent(inout) :: xs - type(NuclideMicroXS), intent(inout) :: micro_xs(:) integer :: iazi, ipol - integer :: i, i_nuclide - class(Nuclide_MG), pointer :: nuc select type(this) type is (MacroXS_Iso) @@ -55,27 +50,6 @@ contains end if end select - ! Place nuclidic xs in micro_xs for tallying purposes - do i = 1, mat % n_nuclides - ! Determine microscopic cross section for this nuclide - i_nuclide = mat % nuclide(i) - - nuc => nuclides(i_nuclide) % obj - micro_xs(i_nuclide) % total = nuc % get_xs(gin, 'total', & - I_AZI=iazi, I_POL=ipol) - micro_xs(i_nuclide) % elastic = nuc % get_xs(gin, 'scatter', & - I_AZI=iazi, I_POL=ipol) - micro_xs(i_nuclide) % absorption = nuc % get_xs(gin, 'absorption', & - I_AZI=iazi, I_POL=ipol) - micro_xs(i_nuclide) % fission = nuc % get_xs(gin, 'fission', & - I_AZI=iazi, I_POL=ipol) - micro_xs(i_nuclide) % nu_fission = nuc % get_xs(gin, 'nu_fission', & - I_AZI=iazi, I_POL=ipol) - micro_xs(i_nuclide) % kappa_fission = nuc % get_xs(gin, 'k_fission', & - I_AZI=iazi, I_POL=ipol) - - end do - end subroutine calculate_mgxs diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 1a16c3f5ea..3e320ab273 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -6,7 +6,7 @@ module nuclide_header use constants use endf, only: reaction_name use list_header, only: ListInt - ! use math, only: calc_pn, calc_rn!, expand_harmonic + use math, only: evaluate_legendre !use scattdata_header use simple_string @@ -117,7 +117,7 @@ module nuclide_header end type Nuclide_MG abstract interface - function nuclide_mg_get_xs_(this, g, xstype, gout, uvw, i_azi, i_pol) & + function nuclide_mg_get_xs_(this, g, xstype, gout, uvw, mu, i_azi, i_pol) & result(xs) import Nuclide_MG class(Nuclide_MG), intent(in) :: this @@ -125,6 +125,7 @@ module nuclide_header character(*), intent(in) :: xstype ! Cross Section Type integer, optional, intent(in) :: gout ! Outgoing Group real(8), optional, intent(in) :: uvw(3) ! Requested Angle + real(8), optional, intent(in) :: mu ! Change in angle integer, optional, intent(in) :: i_azi ! Azimuthal Index integer, optional, intent(in) :: i_pol ! Polar Index real(8) :: xs ! Resultant xs @@ -535,13 +536,14 @@ module nuclide_header ! NUCLIDE_*_GET_XS Returns the requested data type !=============================================================================== - function nuclide_iso_get_xs(this, g, xstype, gout, uvw, i_azi, i_pol) & + function nuclide_iso_get_xs(this, g, xstype, gout, uvw, mu, i_azi, i_pol) & result(xs) class(Nuclide_Iso), intent(in) :: this integer, intent(in) :: g ! Incoming Energy group character(*), intent(in) :: xstype ! Cross Section Type integer, optional, intent(in) :: gout ! Outgoing Group real(8), optional, intent(in) :: uvw(3) ! Requested Angle + real(8), optional, intent(in) :: mu ! Change in angle integer, optional, intent(in) :: i_azi ! Azimuthal Index integer, optional, intent(in) :: i_pol ! Polar Index real(8) :: xs ! Resultant xs @@ -559,6 +561,11 @@ module nuclide_header xs = this % mult(gout,g) case('nu_fission') xs = this % nu_fission(gout,g) + case('f_mu') + xs = evaluate_legendre(this % scatter(gout,g,:), mu) + case('f_mu/mult') + xs = evaluate_legendre(this % scatter(gout,g,:), mu) / & + this % mult(gout,g) end select else select case(xstype) @@ -580,12 +587,13 @@ module nuclide_header end if end function nuclide_iso_get_xs - function nuclide_angle_get_xs(this, g, xstype, gout, uvw, i_azi, i_pol) & + function nuclide_angle_get_xs(this, g, xstype, gout, uvw, mu, i_azi, i_pol) & result(xs) class(Nuclide_Angle), intent(in) :: this integer, intent(in) :: g ! Incoming Energy group character(*), intent(in) :: xstype ! Cross Section Type integer, optional, intent(in) :: gout ! Outgoing Group + real(8), optional, intent(in) :: mu ! Change in angle real(8), optional, intent(in) :: uvw(3) ! Requested Angle integer, optional, intent(in) :: i_azi ! Azimuthal Index integer, optional, intent(in) :: i_pol ! Polar Index @@ -615,6 +623,11 @@ module nuclide_header xs = this % nu_fission(gout,g,i_azi_,i_pol_) case('chi') xs = this % chi(gout,i_azi_,i_pol_) + case('f_mu') + xs = evaluate_legendre(this % scatter(gout,g,:,i_azi_,i_pol_), mu) + case('f_mu/mult') + xs = evaluate_legendre(this % scatter(gout,g,:,i_azi_,i_pol_), mu) / & + this % mult(gout,g,i_azi_,i_pol_) end select else select case(xstype) diff --git a/src/tally.F90 b/src/tally.F90 index 3a258c9d3d..ed7165e1cd 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -5,7 +5,7 @@ module tally use error, only: fatal_error use geometry_header use global - use math, only: t_percentile, calc_pn, calc_rn + use math, only: t_percentile, calc_pn, calc_rn, evaluate_legendre use mesh, only: get_mesh_bin, bin_to_mesh_indices, & get_mesh_indices, mesh_indices_to_bin, & mesh_intersects_2d, mesh_intersects_3d @@ -25,17 +25,59 @@ module tally implicit none integer :: position(N_FILTER_TYPES - 3) = 0 ! Tally map positioning array + + procedure(score_general_intfc), pointer :: score_general => null() + procedure(get_scoring_bins_intfc), pointer :: get_scoring_bins => null() + + abstract interface + subroutine score_general_intfc(p, t, start_index, filter_index, i_nuclide, & + atom_density, flux) + import Particle + import TallyObject + type(Particle), intent(in) :: p + type(TallyObject), pointer, intent(inout) :: t + integer, intent(in) :: start_index + integer, intent(in) :: i_nuclide + integer, intent(in) :: filter_index ! for % results + real(8), intent(in) :: flux ! flux estimate + real(8), intent(in) :: atom_density ! atom/b-cm + end subroutine score_general_intfc + + subroutine get_scoring_bins_intfc(p, i_tally, found_bin) + import Particle + type(Particle), intent(in) :: p + integer, intent(in) :: i_tally + logical, intent(out) :: found_bin + end subroutine get_scoring_bins_intfc + + end interface + !$omp threadprivate(position) contains !=============================================================================== -! SCORE_GENERAL adds scores to the tally array for the given filter and nuclide. -! This will work for either analog or tracklength tallies. Note that +! INIT_TALLY_ROUTINES Sets the procedure pointers needed for minimizing code +! with the CE and MG modes. +!=============================================================================== + + subroutine init_tally_routines() + if (run_CE) then + score_general => score_general_ce + get_scoring_bins => get_scoring_bins_ce + else + score_general => score_general_mg + get_scoring_bins => get_scoring_bins_mg + end if + end subroutine init_tally_routines + +!=============================================================================== +! SCORE_GENERAL* adds scores to the tally array for the given filter and +! nuclide. This will work for either analog or tracklength tallies. Note that ! atom_density and flux are not used for analog tallies. !=============================================================================== - subroutine score_general(p, t, start_index, filter_index, i_nuclide, & + subroutine score_general_ce(p, t, start_index, filter_index, i_nuclide, & atom_density, flux) type(Particle), intent(in) :: p type(TallyObject), pointer, intent(inout) :: t @@ -48,8 +90,6 @@ contains integer :: i ! loop index for scoring bins integer :: l ! loop index for nuclides in material integer :: m ! loop index for reactions - integer :: n ! loop index for legendre order - integer :: num_nm ! Number of N,M orders in harmonic integer :: q ! loop index for scoring bins integer :: i_nuc ! index in nuclides array (from material) integer :: i_energy ! index in nuclide energy grid @@ -64,7 +104,6 @@ contains real(8) :: score ! analog tally score real(8) :: macro_total ! material macro total xs real(8) :: macro_scatt ! material macro scatt xs - real(8) :: uvw(3) ! particle direction type(Material), pointer :: mat type(Reaction), pointer :: rxn type(Nuclide_CE), pointer :: nuc @@ -201,43 +240,29 @@ contains ! For scattering production, we need to use the pre-collision ! weight times the multiplicity as the estimate for the number of ! neutrons exiting a reaction with neutrons in the exit channel - if (run_CE) then - if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & - (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then - ! Don't waste time on very common reactions we know have multiplicities - ! of one. - score = p % last_wgt - else - do m = 1, nuclides(p % event_nuclide) % n_reaction - ! Check if this is the desired MT - if (p % event_MT == nuclides(p % event_nuclide) % reactions(m) % MT) then - ! Found the reaction, set our pointer and move on with life - rxn => nuclides(p % event_nuclide) % reactions(m) - exit - end if - end do - - ! Get multiplicity and apply to score - if (rxn % multiplicity_with_E) then - ! Then the multiplicity was already incorporated in to p % wgt - ! per the scattering routine, - score = p % wgt - else - ! Grab the multiplicity from the rxn - score = p % last_wgt * rxn % multiplicity - end if - end if + if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & + (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then + ! Don't waste time on very common reactions we know have multiplicities + ! of one. + score = p % last_wgt else - if (i_nuclide > 0) then - score = p % last_wgt * & - nuclides_MG(p % event_nuclide) % obj % get_xs(p % g, 'mult', & - p % last_g, & - p % coord(1) % uvw) + do m = 1, nuclides(p % event_nuclide) % n_reaction + ! Check if this is the desired MT + if (p % event_MT == nuclides(p % event_nuclide) % reactions(m) % MT) then + ! Found the reaction, set our pointer and move on with life + rxn => nuclides(p % event_nuclide) % reactions(m) + exit + end if + end do + + ! Get multiplicity and apply to score + if (rxn % multiplicity_with_E) then + ! Then the multiplicity was already incorporated in to p % wgt + ! per the scattering routine, + score = p % wgt else - score = p % last_wgt * & - macro_xs(p % material) % obj % get_xs(p % g, 'mult', & - p % last_g, & - p % coord(1) % uvw) + ! Grab the multiplicity from the rxn + score = p % last_wgt * rxn % multiplicity end if end if @@ -252,43 +277,29 @@ contains ! For scattering production, we need to use the pre-collision ! weight times the multiplicity as the estimate for the number of ! neutrons exiting a reaction with neutrons in the exit channel - if (run_CE) then - if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & - (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then - ! Don't waste time on very common reactions we know have multiplicities - ! of one. - score = p % last_wgt - else - do m = 1, nuclides(p % event_nuclide) % n_reaction - ! Check if this is the desired MT - if (p % event_MT == nuclides(p % event_nuclide) % reactions(m) % MT) then - ! Found the reaction, set our pointer and move on with life - rxn => nuclides(p % event_nuclide) % reactions(m) - exit - end if - end do - - ! Get multiplicity and apply to score - if (rxn % multiplicity_with_E) then - ! Then the multiplicity was already incorporated in to p % wgt - ! per the scattering routine, - score = p % wgt - else - ! Grab the multiplicity from the rxn - score = p % last_wgt * rxn % multiplicity - end if - end if + if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & + (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then + ! Don't waste time on very common reactions we know have multiplicities + ! of one. + score = p % last_wgt else - if (i_nuclide > 0) then - score = p % last_wgt * & - nuclides_MG(p % event_nuclide) % obj % get_xs(p % g, 'mult', & - p % last_g, & - p % coord(1) % uvw) + do m = 1, nuclides(p % event_nuclide) % n_reaction + ! Check if this is the desired MT + if (p % event_MT == nuclides(p % event_nuclide) % reactions(m) % MT) then + ! Found the reaction, set our pointer and move on with life + rxn => nuclides(p % event_nuclide) % reactions(m) + exit + end if + end do + + ! Get multiplicity and apply to score + if (rxn % multiplicity_with_E) then + ! Then the multiplicity was already incorporated in to p % wgt + ! per the scattering routine, + score = p % wgt else - score = p % last_wgt * & - macro_xs(p % material) % obj % get_xs(p % g, 'mult', & - p % last_g, & - p % coord(1) % uvw) + ! Grab the multiplicity from the rxn + score = p % last_wgt * rxn % multiplicity end if end if @@ -303,43 +314,29 @@ contains ! For scattering production, we need to use the pre-collision ! weight times the multiplicity as the estimate for the number of ! neutrons exiting a reaction with neutrons in the exit channel - if (run_CE) then - if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & - (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then - ! Don't waste time on very common reactions we know have multiplicities - ! of one. - score = p % last_wgt - else - do m = 1, nuclides(p % event_nuclide) % n_reaction - ! Check if this is the desired MT - if (p % event_MT == nuclides(p % event_nuclide) % reactions(m) % MT) then - ! Found the reaction, set our pointer and move on with life - rxn => nuclides(p % event_nuclide) % reactions(m) - exit - end if - end do - - ! Get multiplicity and apply to score - if (rxn % multiplicity_with_E) then - ! Then the multiplicity was already incorporated in to p % wgt - ! per the scattering routine, - score = p % wgt - else - ! Grab the multiplicity from the rxn - score = p % last_wgt * rxn % multiplicity - end if - end if + if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & + (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then + ! Don't waste time on very common reactions we know have multiplicities + ! of one. + score = p % last_wgt else - if (i_nuclide > 0) then - score = p % last_wgt * & - nuclides_MG(p % event_nuclide) % obj % get_xs(p % g, 'mult', & - p % last_g, & - p % coord(1) % uvw) + do m = 1, nuclides(p % event_nuclide) % n_reaction + ! Check if this is the desired MT + if (p % event_MT == nuclides(p % event_nuclide) % reactions(m) % MT) then + ! Found the reaction, set our pointer and move on with life + rxn => nuclides(p % event_nuclide) % reactions(m) + exit + end if + end do + + ! Get multiplicity and apply to score + if (rxn % multiplicity_with_E) then + ! Then the multiplicity was already incorporated in to p % wgt + ! per the scattering routine, + score = p % wgt else - score = p % last_wgt * & - macro_xs(p % material) % obj % get_xs(p % g, 'mult', & - p % last_g, & - p % coord(1) % uvw) + ! Grab the multiplicity from the rxn + score = p % last_wgt * rxn % multiplicity end if end if @@ -431,7 +428,7 @@ contains ! neutrons were emitted with different energies, multiple ! outgoing energy bins may have been scored to. The following ! logic treats this special case and results to multiple bins - call score_fission_eout(p, t, score_index) + call score_fission_eout_ce(p, t, score_index) cycle SCORE_LOOP end if end if @@ -776,10 +773,430 @@ contains !######################################################################### ! Expand score if necessary and add to tally results. + call expand_and_score(p, t, score_index, filter_index, score_bin, & + score, i) + + end do SCORE_LOOP + end subroutine score_general_ce + + subroutine score_general_mg(p, t, start_index, filter_index, i_nuclide, & + atom_density, flux) + type(Particle), intent(in) :: p + type(TallyObject), pointer, intent(inout) :: t + integer, intent(in) :: start_index + integer, intent(in) :: i_nuclide + integer, intent(in) :: filter_index ! for % results + real(8), intent(in) :: flux ! flux estimate + real(8), intent(in) :: atom_density ! atom/b-cm + + integer :: i ! loop index for scoring bins + integer :: q ! loop index for scoring bins + integer :: score_bin ! scoring bin, e.g. SCORE_FLUX + integer :: score_index ! scoring bin index + real(8) :: score ! analog tally score + real(8) :: macro_total ! material macro total xs + real(8) :: macro_scatt ! material macro scatt xs + real(8) :: micro_abs ! nuclidic microscopic abs + class(Nuclide_MG), pointer :: nuc + + nuc => nuclides_MG(i_nuclide) % obj + + i = 0 + SCORE_LOOP: do q = 1, t % n_user_score_bins + i = i + 1 + + ! determine what type of score bin + score_bin = t % score_bins(i) + + ! determine scoring bin index + score_index = start_index + i + + !######################################################################### + ! Determine appropirate scoring value. select case(score_bin) + case (SCORE_FLUX, SCORE_FLUX_YN) + if (t % estimator == ESTIMATOR_ANALOG) then + ! All events score to a flux bin. We actually use a collision + ! estimator in place of an analog one since there is no way to count + ! 'events' exactly for the flux + if (survival_biasing) then + ! We need to account for the fact that some weight was already + ! absorbed + score = p % last_wgt + p % absorb_wgt + else + score = p % last_wgt + end if + score = score / material_xs % total + + else + ! For flux, we need no cross section + score = flux + end if + + + case (SCORE_TOTAL, SCORE_TOTAL_YN) + if (t % estimator == ESTIMATOR_ANALOG) then + ! All events will score to the total reaction rate. We can just + ! use the weight of the particle entering the collision as the + ! score + if (survival_biasing) then + ! We need to account for the fact that some weight was already + ! absorbed + score = p % last_wgt + p % absorb_wgt + else + score = p % last_wgt + end if + + else + if (i_nuclide > 0) then + score = nuc % get_xs(p % g, 'total', UVW=p % coord(i) % uvw) * & + atom_density * flux + else + score = material_xs % total * flux + end if + end if + + + case (SCORE_INVERSE_VELOCITY) + if (t % estimator == ESTIMATOR_ANALOG) then + ! All events score to an inverse velocity bin. We actually use a + ! collision estimator in place of an analog one since there is no way + ! to count 'events' exactly for the inverse velocity + if (survival_biasing) then + ! We need to account for the fact that some weight was already + ! absorbed + score = p % last_wgt + p % absorb_wgt + else + score = p % last_wgt + end if + score = score / material_xs % total & + / (sqrt(TWO * p % E / (MASS_NEUTRON_MEV)) * C_LIGHT) + + else + ! For inverse velocity, we need no cross section + score = flux / (sqrt(TWO * p % E / (MASS_NEUTRON_MEV)) * C_LIGHT) + end if + + + case (SCORE_SCATTER, SCORE_SCATTER_N) + if (t % estimator == ESTIMATOR_ANALOG) then + ! Skip any event where the particle didn't scatter + if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP + ! Since only scattering events make it here, again we can use + ! the weight entering the collision as the estimator for the + ! reaction rate + score = p % last_wgt + + else + ! Note SCORE_SCATTER_N not available for tracklength/collision. + if (i_nuclide > 0) then + score = nuc % get_xs(p % g, 'scatter', UVW=p % coord(i) % uvw) * & + atom_density * flux + else + ! Get the scattering x/s (stored in % elastic) + score = material_xs % elastic * flux + end if + end if + + if (i_nuclide > 0) then + score = score * nuc % get_xs(p % g, 'f_mu/mult', p % last_g, & + p % last_uvw, p % mu) + else + score = score / & + macro_xs(p % material) % obj % get_xs(p % g, 'mult', & + p % last_g, & + p % last_uvw) + end if + + + case (SCORE_SCATTER_PN) + ! Only analog estimators are available. + ! Skip any event where the particle didn't scatter + if (p % event /= EVENT_SCATTER) then + i = i + t % moment_order(i) + cycle SCORE_LOOP + end if + ! Since only scattering events make it here, again we can use + ! the weight entering the collision as the estimator for the + ! reaction rate + score = p % last_wgt + + if (i_nuclide > 0) then + score = score * nuc % get_xs(p % g, 'f_mu/mult', p % last_g, & + p % last_uvw, p % mu) + else + score = score / & + macro_xs(p % material) % obj % get_xs(p % g, 'mult', & + p % last_g, & + p % last_uvw) + end if + + + case (SCORE_SCATTER_YN) + ! Only analog estimators are available. + ! Skip any event where the particle didn't scatter + if (p % event /= EVENT_SCATTER) then + i = i + (t % moment_order(i) + 1)**2 - 1 + cycle SCORE_LOOP + end if + ! Since only scattering events make it here, again we can use + ! the weight entering the collision as the estimator for the + ! reaction rate + score = p % last_wgt + + if (i_nuclide > 0) then + score = score * nuc % get_xs(p % g, 'f_mu/mult', p % last_g, & + p % last_uvw, p % mu) + else + score = score / & + macro_xs(p % material) % obj % get_xs(p % g, 'mult', & + p % last_g, & + p % last_uvw) + end if + + + case (SCORE_NU_SCATTER, SCORE_NU_SCATTER_N) + ! Only analog estimators are available. + ! Skip any event where the particle didn't scatter + if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP + ! For scattering production, we need to use the pre-collision + ! weight times the multiplicity as the estimate for the number of + ! neutrons exiting a reaction with neutrons in the exit channel + score = p % wgt * nuc % get_xs(p % g, 'f_mu', p % last_g, & + p % last_uvw, p % mu) + + + case (SCORE_NU_SCATTER_PN) + ! Only analog estimators are available. + ! Skip any event where the particle didn't scatter + if (p % event /= EVENT_SCATTER) then + i = i + t % moment_order(i) + cycle SCORE_LOOP + end if + ! For scattering production, we need to use the pre-collision + ! weight times the multiplicity as the estimate for the number of + ! neutrons exiting a reaction with neutrons in the exit channel + score = p % wgt * nuc % get_xs(p % g, 'f_mu', p % last_g, & + p % last_uvw, p % mu) + + + case (SCORE_NU_SCATTER_YN) + ! Only analog estimators are available. + ! Skip any event where the particle didn't scatter + if (p % event /= EVENT_SCATTER) then + i = i + (t % moment_order(i) + 1)**2 - 1 + cycle SCORE_LOOP + end if + ! For scattering production, we need to use the pre-collision + ! weight times the multiplicity as the estimate for the number of + ! neutrons exiting a reaction with neutrons in the exit channel + score = p % wgt * nuc % get_xs(p % g, 'f_mu', p % last_g, & + p % last_uvw, p % mu) + + + case (SCORE_TRANSPORT) + ! Only analog estimators are available. + ! Skip any event where the particle didn't scatter + if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP + ! get material macros + macro_total = material_xs % total + macro_scatt = material_xs % elastic + ! Score total rate - p1 scatter rate Note estimator needs to be + ! adjusted since tallying is only occuring when a scatter has + ! happened. Effectively this means multiplying the estimator by + ! total/scatter macro + score = (macro_total - p % mu * macro_scatt) * (ONE / macro_scatt) + + + case (SCORE_N_1N) + ! Only analog estimators are available. + ! Skip any event where the particle didn't scatter + if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP + ! Skip any events where weight of particle changed + if (p % wgt /= p % last_wgt) cycle SCORE_LOOP + ! All events that reach this point are (n,1n) reactions + score = p % last_wgt + + + case (SCORE_ABSORPTION) + if (t % estimator == ESTIMATOR_ANALOG) then + if (survival_biasing) then + ! No absorption events actually occur if survival biasing is on -- + ! just use weight absorbed in survival biasing + score = p % absorb_wgt + else + ! Skip any event where the particle wasn't absorbed + if (p % event == EVENT_SCATTER) cycle SCORE_LOOP + ! All fission and absorption events will contribute here, so we + ! can just use the particle's weight entering the collision + score = p % last_wgt + end if + + else + if (i_nuclide > 0) then + score = nuc % get_xs(p % g, 'absorption', UVW=p % coord(1) % uvw) & + * atom_density * flux + else + score = material_xs % absorption * flux + end if + end if + + + case (SCORE_FISSION) + if (t % estimator == ESTIMATOR_ANALOG) then + if (survival_biasing) then + ! No fission events occur if survival biasing is on -- need to + ! calculate fraction of absorptions that would have resulted in + ! fission + micro_abs = nuc % get_xs(p % g, 'absorption', UVW=p % coord(1) % uvw) + if (micro_abs > ZERO) then + score = p % absorb_wgt * & + nuc % get_xs(p % g, 'fission', UVW=p % coord(1) % uvw) & + / micro_abs + else + score = ZERO + end if + else + ! Skip any non-absorption events + if (p % event == EVENT_SCATTER) cycle SCORE_LOOP + ! All fission events will contribute, so again we can use + ! particle's weight entering the collision as the estimate for the + ! fission reaction rate + score = p % last_wgt & + * nuc % get_xs(p % g, 'fission', UVW=p % coord(1) % uvw) & + / nuc % get_xs(p % g, 'absorption', UVW=p % coord(1) % uvw) + end if + + else + if (i_nuclide > 0) then + score = nuc % get_xs(p % g, 'fission', UVW=p % coord(1) % uvw) * & + atom_density * flux + else + score = material_xs % fission * flux + end if + end if + + + case (SCORE_NU_FISSION) + if (t % estimator == ESTIMATOR_ANALOG) then + if (survival_biasing .or. p % fission) then + if (t % find_filter(FILTER_ENERGYOUT) > 0) then + ! Normally, we only need to make contributions to one scoring + ! bin. However, in the case of fission, since multiple fission + ! neutrons were emitted with different energies, multiple + ! outgoing energy bins may have been scored to. The following + ! logic treats this special case and results to multiple bins + call score_fission_eout_mg(p, t, score_index) + cycle SCORE_LOOP + end if + end if + if (survival_biasing) then + ! No fission events occur if survival biasing is on -- need to + ! calculate fraction of absorptions that would have resulted in + ! nu-fission + if (micro_xs(p % event_nuclide) % absorption > ZERO) then + score = p % absorb_wgt * & + nuc % get_xs(p % g, 'fission', UVW=p % coord(1) % uvw) / & + nuc % get_xs(p % g, 'absorption', UVW=p % coord(1) % uvw) + else + score = ZERO + end if + else + ! Skip any non-fission events + if (.not. p % fission) cycle SCORE_LOOP + ! If there is no outgoing energy filter, than we only need to + ! score to one bin. For the score to be 'analog', we need to + ! score the number of particles that were banked in the fission + ! bank. Since this was weighted by 1/keff, we multiply by keff + ! to get the proper score. + score = keff * p % wgt_bank + end if + + else + if (i_nuclide > 0) then + score = nuc % get_xs(p % g, 'nu_fission', UVW=p % coord(1) % uvw) & + * atom_density * flux + else + score = material_xs % nu_fission * flux + end if + end if + + + case (SCORE_KAPPA_FISSION) + if (t % estimator == ESTIMATOR_ANALOG) then + if (survival_biasing) then + ! No fission events occur if survival biasing is on -- need to + ! calculate fraction of absorptions that would have resulted in + ! fission scale by kappa-fission + micro_abs = nuc % get_xs(p % g, 'absorption', UVW=p % coord(1) % uvw) + if (micro_abs > ZERO) then + score = p % absorb_wgt * & + nuc % get_xs(p % g, 'k_fission', UVW=p % coord(1) % uvw) / & + micro_abs + else + score = ZERO + end if + else + ! Skip any non-absorption events + if (p % event == EVENT_SCATTER) cycle SCORE_LOOP + ! All fission events will contribute, so again we can use + ! particle's weight entering the collision as the estimate for + ! the fission energy production rate + score = p % last_wgt * & + nuc % get_xs(p % g, 'k_fission', UVW=p % coord(1) % uvw) / & + nuc % get_xs(p % g, 'absorption', UVW=p % coord(1) % uvw) + end if + + else + if (i_nuclide > 0) then + score = nuc % get_xs(p % g, 'k_fission', UVW=p % coord(1) % uvw) & + * atom_density * flux + else + score = material_xs % kappa_fission * flux + end if + end if + + + case (SCORE_EVENTS) + ! Simply count number of scoring events + score = ONE + + end select + + !######################################################################### + ! Expand score if necessary and add to tally results. + call expand_and_score(p, t, score_index, filter_index, score_bin, & + score, i) + + end do SCORE_LOOP + end subroutine score_general_mg + +!=============================================================================== +! EXPAND_AND_SCORE takes a previously determined score value and adjusts it +! if necessary (for functional expansion weighting), and then adds the resultant +! value to the tally results array. +!=============================================================================== + + subroutine expand_and_score(p, t, score_index, filter_index, score_bin, & + score, i) + type(Particle), intent(in) :: p + type(TallyObject), pointer, intent(inout) :: t + integer, intent(inout) :: score_index + integer, intent(in) :: filter_index ! for % results + integer, intent(in) :: score_bin ! score of concern + real(8), intent(inout) :: score ! data to score + integer, intent(inout) :: i ! Working index + + integer :: num_nm ! Number of N,M orders in harmonic + integer :: n ! Moment loop index + real(8) :: uvw(3) + + select case(score_bin) + + case (SCORE_SCATTER_N, SCORE_NU_SCATTER_N) ! Find the scattering order for a singly requested moment, and ! store its moment contribution. @@ -869,8 +1286,8 @@ contains end select - end do SCORE_LOOP - end subroutine score_general + + end subroutine expand_and_score !=============================================================================== ! SCORE_ALL_NUCLIDES tallies individual nuclide reaction rates specifically when @@ -1039,7 +1456,7 @@ contains ! neutrons produced with different energies. !=============================================================================== - subroutine score_fission_eout(p, t, i_score) + subroutine score_fission_eout_ce(p, t, i_score) type(Particle), intent(in) :: p type(TallyObject), pointer :: t @@ -1092,7 +1509,58 @@ contains ! reset outgoing energy bin and score index matching_bins(i) = bin_energyout - end subroutine score_fission_eout + end subroutine score_fission_eout_ce + + subroutine score_fission_eout_mg(p, t, i_score) + + type(Particle), intent(in) :: p + type(TallyObject), pointer :: t + integer, intent(in) :: i_score ! index for score + + integer :: i ! index of outgoing energy filter + integer :: n ! number of energies on filter + integer :: k ! loop index for bank sites + integer :: bin_energyout ! original outgoing energy bin + integer :: i_filter ! index for matching filter bin combination + real(8) :: score ! actual score + integer :: gout ! energy group of fission bank site + + ! save original outgoing energy bin and score index + i = t % find_filter(FILTER_ENERGYOUT) + bin_energyout = matching_bins(i) + + ! Get number of energies on filter + n = size(t % filters(i) % int_bins) + + ! Since the creation of fission sites is weighted such that it is + ! expected to create n_particles sites, we need to multiply the + ! score by keff to get the true nu-fission rate. Otherwise, the sum + ! of all nu-fission rates would be ~1.0. + + ! loop over number of particles banked + do k = 1, p % n_bank + ! determine score based on bank site weight and keff + score = keff * fission_bank(n_bank - p % n_bank + k) % wgt + + ! determine outgoing energy from fission bank + gout = fission_bank(n_bank - p % n_bank + k) % g + + ! change outgoing energy bin + matching_bins(i) = gout + + ! determine scoring index + i_filter = sum((matching_bins(1:t%n_filters) - 1) * t % stride) + 1 + + ! Add score to tally +!$omp atomic + t % results(i_score, i_filter) % value = & + t % results(i_score, i_filter) % value + score + end do + + ! reset outgoing energy bin and score index + matching_bins(i) = bin_energyout + + end subroutine score_fission_eout_mg !=============================================================================== ! SCORE_FISSION_DELAYED_EOUT handles a special case where we need to store @@ -1734,7 +2202,7 @@ contains ! for a tally based on the particle's current attributes. !=============================================================================== - subroutine get_scoring_bins(p, i_tally, found_bin) + subroutine get_scoring_bins_ce(p, i_tally, found_bin) type(Particle), intent(in) :: p integer, intent(in) :: i_tally @@ -1937,7 +2405,192 @@ contains end do FILTER_LOOP - end subroutine get_scoring_bins + end subroutine get_scoring_bins_ce + + subroutine get_scoring_bins_mg(p, i_tally, found_bin) + + type(Particle), intent(in) :: p + integer, intent(in) :: i_tally + logical, intent(out) :: found_bin + + integer :: i ! loop index for filters + integer :: j + integer :: n ! number of bins for single filter + integer :: offset ! offset for distribcell + integer :: g ! particle energy group + real(8) :: theta, phi ! Polar and Azimuthal Angles, respectively + type(TallyObject), pointer :: t + type(RegularMesh), pointer :: m + + found_bin = .true. + t => tallies(i_tally) + matching_bins(1:t%n_filters) = 1 + + FILTER_LOOP: do i = 1, t % n_filters + + select case (t % filters(i) % type) + case (FILTER_MESH) + ! determine mesh bin + m => meshes(t % filters(i) % int_bins(1)) + + ! Determine if we're in the mesh first + call get_mesh_bin(m, p % coord(1) % xyz, matching_bins(i)) + + case (FILTER_UNIVERSE) + ! determine next universe bin + ! TODO: Account for multiple universes when performing this filter + matching_bins(i) = get_next_bin(FILTER_UNIVERSE, & + p % coord(p % n_coord) % universe, i_tally) + + case (FILTER_MATERIAL) + if (p % material == MATERIAL_VOID) then + matching_bins(i) = NO_BIN_FOUND + else + matching_bins(i) = get_next_bin(FILTER_MATERIAL, & + p % material, i_tally) + endif + + case (FILTER_CELL) + ! determine next cell bin + do j = 1, p % n_coord + position(FILTER_CELL) = 0 + matching_bins(i) = get_next_bin(FILTER_CELL, & + p % coord(j) % cell, i_tally) + if (matching_bins(i) /= NO_BIN_FOUND) exit + end do + + case (FILTER_DISTRIBCELL) + ! determine next distribcell bin + matching_bins(i) = NO_BIN_FOUND + offset = 0 + do j = 1, p % n_coord + if (cells(p % coord(j) % cell) % type == CELL_FILL) then + offset = offset + cells(p % coord(j) % cell) % & + offset(t % filters(i) % offset) + elseif(cells(p % coord(j) % cell) % type == CELL_LATTICE) then + if (lattices(p % coord(j + 1) % lattice) % obj & + % are_valid_indices([& + p % coord(j + 1) % lattice_x, & + p % coord(j + 1) % lattice_y, & + p % coord(j + 1) % lattice_z])) then + offset = offset + lattices(p % coord(j + 1) % lattice) % obj % & + offset(t % filters(i) % offset, & + p % coord(j + 1) % lattice_x, & + p % coord(j + 1) % lattice_y, & + p % coord(j + 1) % lattice_z) + end if + end if + if (t % filters(i) % int_bins(1) == p % coord(j) % cell) then + matching_bins(i) = offset + 1 + exit + end if + end do + + case (FILTER_CELLBORN) + ! determine next cellborn bin + matching_bins(i) = get_next_bin(FILTER_CELLBORN, & + p % cell_born, i_tally) + + case (FILTER_SURFACE) + ! determine next surface bin + matching_bins(i) = get_next_bin(FILTER_SURFACE, & + p % surface, i_tally) + + case (FILTER_ENERGYIN) + ! make sure the correct energy is used + if (t % estimator == ESTIMATOR_TRACKLENGTH) then + g = p % g + else + g = p % last_g + end if + + ! Since all groups are filters, the filter bin is the group + matching_bins(i) = g + + case (FILTER_ENERGYOUT) + ! Since all groups are filters, the filter bin is the group + matching_bins(i) = p % g + + case (FILTER_DELAYEDGROUP) + + if (survival_biasing .and. t % find_filter(FILTER_ENERGYOUT) <= 0) then + matching_bins(i) = 1 + elseif (active_tracklength_tallies % size() > 0) then + matching_bins(i) = 1 + else + if (p % delayed_group == 0) then + matching_bins = NO_BIN_FOUND + else + matching_bins(i) = p % delayed_group + end if + end if + + case (FILTER_MU) + ! determine mu bin + n = t % filters(i) % n_bins + + ! check if particle is within mu bins + if (p % mu < t % filters(i) % real_bins(1) .or. & + p % mu > t % filters(i) % real_bins(n + 1)) then + matching_bins(i) = NO_BIN_FOUND + else + ! search to find mu bin + matching_bins(i) = binary_search(t % filters(i) % real_bins, & + n + 1, p % mu) + end if + + case (FILTER_POLAR) + ! make sure the correct direction vector is used + if (t % estimator == ESTIMATOR_TRACKLENGTH) then + theta = acos(p % coord(1) % uvw(3)) + else + theta = acos(p % last_uvw(3)) + end if + + ! determine polar angle bin + n = t % filters(i) % n_bins + + ! check if particle is within polar angle bins + if (theta < t % filters(i) % real_bins(1) .or. & + theta > t % filters(i) % real_bins(n + 1)) then + matching_bins(i) = NO_BIN_FOUND + else + ! search to find polar angle bin + matching_bins(i) = binary_search(t % filters(i) % real_bins, & + n + 1, theta) + end if + + case (FILTER_AZIMUTHAL) + ! make sure the correct direction vector is used + if (t % estimator == ESTIMATOR_TRACKLENGTH) then + phi = atan2(p % coord(1) % uvw(2), p % coord(1) % uvw(1)) + else + phi = atan2(p % last_uvw(2), p % last_uvw(1)) + end if + ! determine mu bin + n = t % filters(i) % n_bins + + ! check if particle is within azimuthal angle bins + if (phi < t % filters(i) % real_bins(1) .or. & + phi > t % filters(i) % real_bins(n + 1)) then + matching_bins(i) = NO_BIN_FOUND + else + ! search to find azimuthal angle bin + matching_bins(i) = binary_search(t % filters(i) % real_bins, & + n + 1, phi) + end if + + end select + + ! If the current filter didn't match, exit this subroutine + if (matching_bins(i) == NO_BIN_FOUND) then + found_bin = .false. + return + end if + + end do FILTER_LOOP + + end subroutine get_scoring_bins_mg !=============================================================================== ! SCORE_SURFACE_CURRENT tallies surface crossings in a mesh tally by manually diff --git a/src/tracking.F90 b/src/tracking.F90 index c761cd5337..028ec3ee6c 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -91,10 +91,8 @@ contains else ! Since the MGXS can be angle dependent, this needs to be done ! After every collision for the MGXS mode - call calculate_mgxs(macro_xs(p % material) % obj, & - materials(p % material), nuclides_MG, p % g, & - p % coord(p % n_coord) % uvw, material_xs, & - micro_xs) + call calculate_mgxs(macro_xs(p % material) % obj, p % g, & + p % coord(p % n_coord) % uvw, material_xs) end if ! Find the distance to the nearest boundary From d32556fe89ccd79d954a144d4f2ff426a443c9eb Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Thu, 5 Nov 2015 04:47:51 -0500 Subject: [PATCH 019/650] Added support of tallying scatter-*n info with histogram based input. --- src/nuclide_header.F90 | 64 +++++++++++++++++++++++++++++++++++------- 1 file changed, 54 insertions(+), 10 deletions(-) diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 3e320ab273..9d79bbe22d 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -548,6 +548,9 @@ module nuclide_header integer, optional, intent(in) :: i_pol ! Polar Index real(8) :: xs ! Resultant xs + integer :: imu + real(8) :: dmu, r, f + xs = ZERO if ((xstype == 'nu_fission' .or. xstype == 'fission' .or. xstype =='chi' & @@ -561,11 +564,31 @@ module nuclide_header xs = this % mult(gout,g) case('nu_fission') xs = this % nu_fission(gout,g) - case('f_mu') - xs = evaluate_legendre(this % scatter(gout,g,:), mu) - case('f_mu/mult') - xs = evaluate_legendre(this % scatter(gout,g,:), mu) / & - this % mult(gout,g) + case('f_mu', 'f_mu/mult') + if (this % scatt_type == ANGLE_LEGENDRE) then + xs = evaluate_legendre(this % scatter(gout,g,:), mu) + else + dmu = TWO / real(this % order) + ! Find mu bin algebraically, knowing that the spacing is equal + f = (mu + ONE) / dmu + ONE + imu = floor(f) + ! But save the amount that mu is past the previous index + ! so we can use interpolation later. + f = f - real(imu) + ! Adjust so interpolation works on the last bin if necessary + if (imu == size(this % scatter, dim=3)) then + imu = imu - 1 + end if + + ! Now intepolate to find f(mu) + r = f / dmu + xs = (ONE - r) * this % scatter(gout, g, imu) + & + r * this % scatter(gout, g, imu+1) + end if + if (xstype == 'f_mu/mult') then + xs = xs / this % mult(gout,g) + end if + end select else select case(xstype) @@ -600,6 +623,8 @@ module nuclide_header real(8) :: xs ! Resultant xs integer :: i_azi_, i_pol_ + integer :: imu + real(8) :: dmu, r, f xs = ZERO @@ -623,11 +648,30 @@ module nuclide_header xs = this % nu_fission(gout,g,i_azi_,i_pol_) case('chi') xs = this % chi(gout,i_azi_,i_pol_) - case('f_mu') - xs = evaluate_legendre(this % scatter(gout,g,:,i_azi_,i_pol_), mu) - case('f_mu/mult') - xs = evaluate_legendre(this % scatter(gout,g,:,i_azi_,i_pol_), mu) / & - this % mult(gout,g,i_azi_,i_pol_) + case('f_mu', 'f_mu/mult') + if (this % scatt_type == ANGLE_LEGENDRE) then + xs = evaluate_legendre(this % scatter(gout,g,:,i_azi_,i_pol_), mu) + else + dmu = TWO / real(this % order) + ! Find mu bin algebraically, knowing that the spacing is equal + f = (mu + ONE) / dmu + ONE + imu = floor(f) + ! But save the amount that mu is past the previous index + ! so we can use interpolation later. + f = f - real(imu) + ! Adjust so interpolation works on the last bin if necessary + if (imu == size(this % scatter, dim=3)) then + imu = imu - 1 + end if + + ! Now intepolate to find f(mu) + r = f / dmu + xs = (ONE - r) * this % scatter(gout,g,imu,i_azi_,i_pol_) + & + r * this % scatter(gout,g,imu+1,i_azi_,i_pol_) + end if + if (xstype == 'f_mu/mult') then + xs = xs / this % mult(gout,g,i_azi_,i_pol_) + end if end select else select case(xstype) From 60d418adf07371dcc65d3ba2f671cfcd2c169413 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Thu, 5 Nov 2015 05:20:39 -0500 Subject: [PATCH 020/650] Added printing of xs data to mg types and fixed some summary bugs --- src/mgxs_data.F90 | 12 +++-- src/nuclide_header.F90 | 99 ++++++++++++++++++++++++++++++++++++++++++ src/output.F90 | 31 +++++++------ src/summary.F90 | 6 ++- src/tally.F90 | 3 +- 5 files changed, 126 insertions(+), 25 deletions(-) diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index d51dfd603e..39abff1b23 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -31,7 +31,6 @@ contains character(12) :: alias ! alias of isotope, e.g. U-235.03c integer :: representation ! Data representation type(Material), pointer :: mat - class(Nuclide_MG), pointer :: nuc type(SetChar) :: already_read type(Node), pointer :: doc => null() type(Node), pointer :: node_xsdata @@ -94,9 +93,6 @@ contains name = xs_listings(i_listing) % name alias = xs_listings(i_listing) % alias - ! Keep track of what listing is associated with this nuclide - nuc => nuclides_MG(i_nuclide) % obj - ! Get pointer to xsdata table XML node call get_list_item(node_xsdata_list, i_listing, node_xsdata) @@ -131,6 +127,9 @@ contains energy_groups, get_kfiss, error_code, & error_text) + ! Keep track of what listing is associated with this nuclide + nuclides_MG(i_nuclide) % obj % listing = i_listing + ! Handle any errors if (error_code /= 0) then call fatal_error(trim(error_text)) @@ -154,9 +153,8 @@ contains ! Loop around nuclides in material NUCLIDE_LOOP2: do j = 1, mat % n_nuclides - ! Get nuclide - nuc => nuclides_MG(mat % nuclide(j)) % obj - if (nuc % fissionable) then + ! Is this fissionable? + if (nuclides_MG(mat % nuclide(j)) % obj % fissionable) then mat % fissionable = .true. end if if (mat % fissionable) then diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 9d79bbe22d..910b2ecf39 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -516,11 +516,74 @@ module nuclide_header end subroutine nuclide_ce_print + subroutine nuclide_mg_print(this, unit_) + class(Nuclide_MG), intent(in) :: this + integer, intent(in) :: unit_ + + character(MAX_LINE_LEN) :: temp_str + + ! Basic nuclide information + write(unit_,*) 'Nuclide ' // trim(this % name) + write(unit_,*) ' zaid = ' // trim(to_str(this % zaid)) + write(unit_,*) ' awr = ' // trim(to_str(this % awr)) + write(unit_,*) ' kT = ' // trim(to_str(this % kT)) + if (this % scatt_type == ANGLE_LEGENDRE) then + temp_str = "Legendre" + write(unit_,*) ' Scattering Type = ' // trim(temp_str) + write(unit_,*) ' # of Scatter Moments = ' // & + trim(to_str(this % order - 1)) + else if (this % scatt_type == ANGLE_HISTOGRAM) then + temp_str = "Histogram" + write(unit_,*) ' Scattering Type = ' // trim(temp_str) + write(unit_,*) ' # of Scatter Bins = ' // & + trim(to_str(this % order)) + else if (this % scatt_type == ANGLE_TABULAR) then + temp_str = "Tabular" + write(unit_,*) ' Scattering Type = ' // trim(temp_str) + write(unit_,*) ' # of Scatter Points = ' // trim(to_str(this % order)) + end if + write(unit_,*) ' Fissionable = ', this % fissionable + + end subroutine nuclide_mg_print + subroutine nuclide_iso_print(this, unit) class(Nuclide_Iso), intent(in) :: this integer, optional, intent(in) :: unit + integer :: unit_ ! unit to write to + integer :: size_total, size_scattmat, size_mgxs + character(MAX_LINE_LEN) :: temp_str + + ! set default unit for writing information + if (present(unit)) then + unit_ = unit + else + unit_ = OUTPUT_UNIT + end if + + ! Write Basic Nuclide Information + call nuclide_mg_print(this, unit_) + + ! Determine size of mgxs and scattering matrices + size_scattmat = (size(this % scatter) + size(this % mult)) * 8 + size_mgxs = size(this % total) + size(this % absorption) + & + size(this % nu_fission) + size(this % k_fission) + & + size(this % fission) + size(this % chi) + size_mgxs = size_mgxs * 8 + + ! Calculate total memory + size_total = size_scattmat + size_mgxs + + ! Write memory used + write(unit_,*) ' Memory Requirements' + write(unit_,*) ' Cross sections = ' // trim(to_str(size_mgxs)) // ' bytes' + write(unit_,*) ' Scattering Matrices = ' // & + trim(to_str(size_scattmat)) // ' bytes' + write(unit_,*) ' Total = ' // trim(to_str(size_total)) // ' bytes' + + ! Blank line at end of nuclide + write(unit_,*) end subroutine nuclide_iso_print @@ -529,6 +592,42 @@ module nuclide_header class(Nuclide_Angle), intent(in) :: this integer, optional, intent(in) :: unit + integer :: unit_ ! unit to write to + integer :: size_total, size_scattmat, size_mgxs + character(MAX_LINE_LEN) :: temp_str + + ! set default unit for writing information + if (present(unit)) then + unit_ = unit + else + unit_ = OUTPUT_UNIT + end if + + ! Write Basic Nuclide Information + call nuclide_mg_print(this, unit_) + write(unit_,*) ' # of Polar Angles = ' // trim(to_str(this % Npol)) + write(unit_,*) ' # of Azimuthal Angles = ' // trim(to_str(this % Nazi)) + + ! Determine size of mgxs and scattering matrices + size_scattmat = (size(this % scatter) + size(this % mult)) * 8 + size_mgxs = size(this % total) + size(this % absorption) + & + size(this % nu_fission) + size(this % k_fission) + & + size(this % fission) + size(this % chi) + size_mgxs = size_mgxs * 8 + + ! Calculate total memory + size_total = size_scattmat + size_mgxs + + ! Write memory used + write(unit_,*) ' Memory Requirements' + write(unit_,*) ' Cross sections = ' // trim(to_str(size_mgxs)) // ' bytes' + write(unit_,*) ' Scattering Matrices = ' // & + trim(to_str(size_scattmat)) // ' bytes' + write(unit_,*) ' Total = ' // trim(to_str(size_total)) // ' bytes' + + ! Blank line at end of nuclide + write(unit_,*) + end subroutine nuclide_angle_print diff --git a/src/output.F90 b/src/output.F90 index 30039e1181..8076a91dfc 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -332,8 +332,6 @@ contains integer :: i ! loop index integer :: unit_xs ! cross_sections.out file unit character(MAX_FILE_LEN) :: path ! path of summary file - type(Nuclide_CE), pointer :: nuc => null() - type(SAlphaBeta), pointer :: sab => null() ! Create filename for log file path = trim(path_output) // "cross_sections.out" @@ -344,21 +342,22 @@ contains ! Write header call header("CROSS SECTION TABLES", unit=unit_xs) - NUCLIDE_LOOP: do i = 1, n_nuclides_total - ! Get pointer to nuclide - nuc => nuclides(i) + if (run_CE) then + NUCLIDE_LOOP: do i = 1, n_nuclides_total + ! Print information about nuclide + call nuclides(i) % print(unit=unit_xs) + end do NUCLIDE_LOOP - ! Print information about nuclide - call nuc % print(unit=unit_xs) - end do NUCLIDE_LOOP - - SAB_TABLES_LOOP: do i = 1, n_sab_tables - ! Get pointer to S(a,b) table - sab => sab_tables(i) - - ! Print information about S(a,b) table - call sab % print(unit=unit_xs) - end do SAB_TABLES_LOOP + SAB_TABLES_LOOP: do i = 1, n_sab_tables + ! Print information about S(a,b) table + call sab_tables(i) % print(unit=unit_xs) + end do SAB_TABLES_LOOP + else + NUCLIDE_MG_LOOP: do i = 1, n_nuclides_total + ! Print information about nuclide + call nuclides_mg(i) % obj % print(unit=unit_xs) + end do NUCLIDE_MG_LOOP + end if ! Close cross section summary file close(unit_xs) diff --git a/src/summary.F90 b/src/summary.F90 index 1b0797fc9b..078099dbd0 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -454,7 +454,11 @@ contains ! Copy ZAID for each nuclide to temporary array allocate(nucnames(m%n_nuclides)) do j = 1, m%n_nuclides - i_list = nuclides(m%nuclide(j))%listing + if (run_CE) then + i_list = nuclides(m%nuclide(j))%listing + else + i_list = nuclides_MG(m%nuclide(j))%obj%listing + end if nucnames(j) = xs_listings(i_list)%alias end do diff --git a/src/tally.F90 b/src/tally.F90 index ed7165e1cd..7ad701b168 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -799,7 +799,8 @@ contains real(8) :: micro_abs ! nuclidic microscopic abs class(Nuclide_MG), pointer :: nuc - nuc => nuclides_MG(i_nuclide) % obj + if (i_nuclide > 0) & + nuc => nuclides_MG(i_nuclide) % obj i = 0 SCORE_LOOP: do q = 1, t % n_user_score_bins From fdf0f78258f13f15f19e150e79b2868fa83b19e4 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Thu, 5 Nov 2015 06:49:09 -0500 Subject: [PATCH 021/650] Added in data like zaid and name to the mg nuclide itself --- src/mgxs_data.F90 | 11 ++++++----- src/nuclide_header.F90 | 6 ++++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 39abff1b23..086bc6b95d 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -1,9 +1,8 @@ module mgxs_data use constants - use error, only: fatal_error, warning + use error, only: fatal_error use global - use list_header, only: ListInt use macroxs_header use material_header, only: Material use nuclide_header @@ -208,10 +207,12 @@ contains error_text = '' ! Load the data - if (check_for_node(node_xsdata, "awr")) then - call get_node_value(node_xsdata, "awr", this % awr) + call get_node_value(node_xsdata, "name", this % name) + this % name = to_lower(this % name) + if (check_for_node(node_xsdata, "kT")) then + call get_node_value(node_xsdata, "kT", this % kT) else - this % awr = ONE + this % kT = ZERO end if if (check_for_node(node_xsdata, "zaid")) then call get_node_value(node_xsdata, "zaid", this % zaid) diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 910b2ecf39..e8c8eb13f5 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -524,8 +524,10 @@ module nuclide_header ! Basic nuclide information write(unit_,*) 'Nuclide ' // trim(this % name) - write(unit_,*) ' zaid = ' // trim(to_str(this % zaid)) - write(unit_,*) ' awr = ' // trim(to_str(this % awr)) + if (this % zaid > 0) then + ! Dont print if data was macroscopic and thus zaid would be nonsense + write(unit_,*) ' zaid = ' // trim(to_str(this % zaid)) + end if write(unit_,*) ' kT = ' // trim(to_str(this % kT)) if (this % scatt_type == ANGLE_LEGENDRE) then temp_str = "Legendre" From d26546001a50a8a6c05d49e6bf7998fd13be61d5 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 6 Nov 2015 05:29:27 -0500 Subject: [PATCH 022/650] Added tabular nuclide data inputting capability, revised legendre_mu_points input format, and added calc_f routine to nuclide_mg types --- src/global.F90 | 5 +- src/input_xml.F90 | 16 +--- src/macroxs_header.F90 | 86 +---------------- src/mgxs_data.F90 | 54 +++++++++-- src/nuclide_header.F90 | 193 ++++++++++++++++++++++++++++----------- src/physics_mg.F90 | 2 +- src/scattdata_header.F90 | 32 +++---- 7 files changed, 204 insertions(+), 184 deletions(-) diff --git a/src/global.F90 b/src/global.F90 index 737aef51f8..700f43ddc0 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -119,14 +119,11 @@ module global ! Energy group structure real(8), allocatable :: energy_bins(:) - real(8), allocatable :: energy_bin_midpoints(:) + real(8), allocatable :: energy_bin_avg(:) ! Maximum Data Order integer :: max_order - ! Scattering Treatment (if Legendre) - integer :: legendre_mu_points - ! ============================================================================ ! TALLY-RELATED VARIABLES diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 65c840ce25..3cf26b49b6 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -4377,23 +4377,11 @@ contains call fatal_error("group_structures element must exist!") end if - allocate(energy_bin_midpoints(energy_groups)) + allocate(energy_bin_avg(energy_groups)) do i = 1, energy_groups - energy_bin_midpoints(i) = 0.5_8 * (energy_bins(i) + energy_bins(i + 1)) + energy_bin_avg(i) = 0.5_8 * (energy_bins(i) + energy_bins(i + 1)) end do - if (check_for_node(doc, "legendre_mu_points")) then - ! Get scattering treatment - call get_node_value(doc, "legendre_mu_points", legendre_mu_points) - if (legendre_mu_points <= 0) then - call fatal_error("legendre_mu_points element must be positive and non-zero!") - end if - legendre_mu_points = -1 * legendre_mu_points - else - ! One means 'don't expand scattering moments to a table, sample via legendre' - legendre_mu_points = 1 - end if - ! Get node list of all call get_node_list(doc, "xsdata", node_xsdata_list) n_listings = get_list_size(node_xsdata_list) diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index d33de9241f..602db4a3b6 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -22,7 +22,6 @@ module macroxs_header contains procedure(macroxs_init_), deferred, pass :: init ! initializes object procedure(macroxs_clear_), deferred, pass :: clear ! Deallocates object - procedure(macroxs_size_), deferred, pass :: get_size ! Finds size of object procedure(macroxs_get_xs_), deferred, pass :: get_xs ! Return xs end type MacroXS_Base @@ -66,14 +65,6 @@ module macroxs_header end subroutine macroxs_clear_ - subroutine macroxs_size_(this, size_total, size_scatt, size_fission) - import MacroXS_Base - class(MacroXS_Base), intent(in) :: this - integer, intent(out) :: size_total ! Total Data Size - integer, intent(out) :: size_scatt ! Scattering Data Size - integer, intent(out) :: size_fission ! Fission Data Size - - end subroutine macroxs_size_ end interface type, extends(MacroXS_Base) :: MacroXS_Iso @@ -91,7 +82,6 @@ module macroxs_header contains procedure, pass :: init => macroxs_iso_init ! inits object procedure, pass :: clear => macroxs_iso_clear ! Deallocates object - procedure, pass :: get_size => macroxs_iso_size ! Finds size of object procedure, pass :: get_xs => macroxs_iso_get_xs ! Returns xs end type MacroXS_Iso @@ -112,7 +102,6 @@ module macroxs_header contains procedure, pass :: init => macroxs_angle_init ! inits object procedure, pass :: clear => macroxs_angle_clear ! Deallocates object - procedure, pass :: get_size => macroxs_angle_size ! Finds size of object procedure, pass :: get_xs => macroxs_angle_get_xs ! Returns xs end type MacroXS_Angle @@ -194,7 +183,7 @@ contains ! Allocate stuff for later allocate(scatt_coeffs(order, groups, groups)) scatt_coeffs = ZERO - allocate(ScattData_Histogram :: this % scatter) + allocate(ScattData_Tabular :: this % scatter) else if (scatt_type == ANGLE_LEGENDRE) then ! Otherwise find the maximum scattering order @@ -711,79 +700,6 @@ contains end subroutine macroxs_angle_clear -!=============================================================================== -! MACROXS_*_SIZE Finds the size of the data in MacroXS_Base, MacroXS_Iso, -! or MacroXS_Angle -!=============================================================================== - - subroutine macroxs_iso_size(this, size_total, size_scatt, size_fission) - class(MacroXS_Iso), intent(in) :: this - integer, intent(out) :: size_total ! Total Data Size - integer, intent(out) :: size_scatt ! Scattering Data Size - integer, intent(out) :: size_fission ! Fission Data Size - - integer :: groups - - groups = size(this % total, dim=1) - - ! Size Information On Each Reaction - ! Sum up for total, absorption, nu_scatter, nu_fission, fission - size_total = groups * 8 * (1 + 1 + 1 + 1 + 1) - ! Now do k_fission - ! Check k_fission - if (allocated (this % k_fission)) then - size_total = size_total + groups * 8 - end if - - ! Calculate chi data size - size_fission = 0 - if (allocated(this % chi)) then - size_fission = size_fission + 8 * size(this % chi) - end if - - ! Calculate Scatter Data Size - size_scatt = size(this % scatter % energy) - - ! Calculate Total Memory - size_total = size_total + size_fission + size_scatt - - end subroutine macroxs_iso_size - - subroutine macroxs_angle_size(this, size_total, size_scatt, size_fission) - class(MacroXS_Angle), intent(in) :: this - integer, intent(out) :: size_total ! Total Data Size - integer, intent(out) :: size_scatt ! Scattering Data Size - integer, intent(out) :: size_fission ! Fission Data Size - - integer :: groups - integer :: tot_angle - - groups = size(this % total, dim=2) - tot_angle = size(this % total, dim=1) - - ! Size Information On Each Reaction - ! Sum up for total, absorption, nu_scatter, nu_fission, fission - size_total = groups * 8 * (1 + 1 + 1 + 1 + 1) * tot_angle - ! Now do k_fission - ! Check k_fission - if (allocated (this % k_fission)) then - size_total = size_total + groups * 8 * tot_angle - end if - - ! Calculate chi data size - size_fission = 0 - if (allocated(this % chi)) then - size_fission = size_fission + 8 * size(this % chi) - end if - - ! Calculate Scatter Data Size - size_scatt = 0 - - ! Calculate Total Memory - size_total = size_total + size_fission + size_scatt - - end subroutine macroxs_angle_size - !=============================================================================== ! MACROXS_*_GET_XS returns the requested data type !=============================================================================== diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 086bc6b95d..e3ea314d6c 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -200,7 +200,9 @@ contains integer, intent(inout) :: error_code ! Code signifying error character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print + type(Node), pointer :: node_legendre_mu character(MAX_LINE_LEN) :: temp_str + logical :: enable_leg_mu ! Initialize error data error_code = 0 @@ -224,8 +226,10 @@ contains temp_str = trim(to_lower(temp_str)) if (temp_str == 'legendre') then this % scatt_type = ANGLE_LEGENDRE - else if (temp_str == 'tabular') then + else if (temp_str == 'histogram') then this % scatt_type = ANGLE_HISTOGRAM + else if (temp_str == 'tabular') then + this % scatt_type = ANGLE_TABULAR else error_code = 1 error_text = "Invalid Scatt Type Option!" @@ -234,6 +238,7 @@ contains else this % scatt_type = ANGLE_LEGENDRE end if + if (check_for_node(node_xsdata, "order")) then call get_node_value(node_xsdata, "order", this % order) else @@ -241,6 +246,37 @@ contains error_text = "Order Must Be Provided!" return end if + + ! Get scattering treatment + if (check_for_node(node_xsdata, "tabular_legendre")) then + call get_node_ptr(node_xsdata, "tabular_legendre", node_legendre_mu) + if (check_for_node(node_legendre_mu, "enable")) then + call get_node_value(node_legendre_mu, "enable", temp_str) + temp_str = trim(to_lower(temp_str)) + if (temp_str == 'true' .or. temp_str == '1') then + enable_leg_mu = .true. + elseif (temp_str == 'false' .or. temp_str == '0') then + enable_leg_mu = .false. + else + call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) + end if + else + enable_leg_mu = .false. + this % legendre_mu_points = 1 + end if + if (enable_leg_mu .and. & + check_for_node(node_legendre_mu, "num_points")) then + call get_node_value(node_legendre_mu, "num_points", & + this % legendre_mu_points) + if (this % legendre_mu_points <= 0) then + call fatal_error("num_points element must be positive and non-zero!") + end if + this % legendre_mu_points = -1 * this % legendre_mu_points + end if + else + this % legendre_mu_points = 1 + end if + if (check_for_node(node_xsdata, "fissionable")) then call get_node_value(node_xsdata, "fissionable", temp_str) temp_str = to_lower(temp_str) @@ -349,6 +385,8 @@ contains order_dim = this % order + 1 else if (this % scatt_type == ANGLE_HISTOGRAM) then order_dim = this % order + else if (this % scatt_type == ANGLE_TABULAR) then + order_dim = this % order end if allocate(this % scatter(groups, groups, order_dim)) @@ -410,6 +448,8 @@ contains order_dim = this % order + 1 else if (this % scatt_type == ANGLE_HISTOGRAM) then order_dim = this % order + else if (this % scatt_type == ANGLE_TABULAR) then + order_dim = this % order end if if (check_for_node(node_xsdata, "num_polar")) then @@ -592,6 +632,7 @@ contains character(MAX_LINE_LEN) :: error_text integer :: representation integer :: scatt_type + integer :: legendre_mu_points ! Find out if we need kappa fission (are there any k_fiss tallies?) get_kfiss = .false. @@ -612,23 +653,18 @@ contains mat => materials(i_mat) ! Check to see how our nuclides are represented - ! For now assume all are the same type + ! Assume all are the same type ! Therefore type(nuclides(1) % obj) dictates type(macroxs) ! At the same time, we will find the scattering type, as that will dictate ! how we allocate the scatter object within macroxs - scatt_type = ANGLE_LEGENDRE + legendre_mu_points = nuclides_MG(1) % obj % legendre_mu_points select type(nuc => nuclides_MG(1) % obj) type is (Nuclide_Iso) representation = ISOTROPIC - if (nuc % scatt_type == ANGLE_HISTOGRAM) then - scatt_type = ANGLE_HISTOGRAM - end if type is (Nuclide_Angle) representation = ANGLE - if (nuc % scatt_type == ANGLE_HISTOGRAM) then - scatt_type = ANGLE_HISTOGRAM - end if end select + scatt_type = nuclides_MG(1) % obj % scatt_type ! Now allocate accordingly select case(representation) diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index e8c8eb13f5..ad143facb9 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -107,13 +107,16 @@ module nuclide_header type, abstract, extends(Nuclide_Base) :: Nuclide_MG ! Scattering Order Information - integer :: order ! Order of data (Scattering for Nuclide_Iso, - ! Number of angles for all in Nuclide_Angle) - integer :: scatt_type ! either legendre or tabular. - - ! Type-Bound procedures + integer :: order ! Order of data (Scattering for Nuclide_Iso, + ! Number of angles for all in Nuclide_Angle) + integer :: scatt_type ! either legendre, histogram, or tabular. + integer :: legendre_mu_points ! Number of tabular points to use to represent + ! Legendre distribs, -1 if sample with the + ! Legendres themselves +! Type-Bound procedures contains - procedure(nuclide_mg_get_xs_), deferred, pass :: get_xs ! Get the xs + procedure(nuclide_mg_get_xs_), deferred, pass :: get_xs ! Get the xs + procedure(nuclide_calc_f_), deferred, pass :: calc_f ! Calculates f, given mu end type Nuclide_MG abstract interface @@ -130,6 +133,19 @@ module nuclide_header integer, optional, intent(in) :: i_pol ! Polar Index real(8) :: xs ! Resultant xs end function nuclide_mg_get_xs_ + + pure function nuclide_calc_f_(this, gin, gout, mu, uvw, i_azi, i_pol) result(f) + import Nuclide_MG + class(Nuclide_MG), intent(in) :: this + integer, intent(in) :: gin ! Incoming Energy Group + integer, intent(in) :: gout ! Outgoing Energy Group + real(8), intent(in) :: mu ! Angle of interest + real(8), intent(in), optional :: uvw(3) ! Direction vector + integer, intent(in), optional :: i_azi ! Incoming Energy Group + integer, intent(in), optional :: i_pol ! Outgoing Energy Group + real(8) :: f ! Return value of f(mu) + + end function nuclide_calc_f_ end interface !=============================================================================== @@ -151,9 +167,10 @@ module nuclide_header ! Type-Bound procedures contains - procedure, pass :: clear => nuclide_iso_clear ! Deallocates Nuclide - procedure, pass :: print => nuclide_iso_print ! Writes nuclide info - procedure, pass :: get_xs => nuclide_iso_get_xs ! Gets Size of Data w/in Object + procedure, pass :: clear => nuclide_iso_clear ! Deallocates Nuclide + procedure, pass :: print => nuclide_iso_print ! Writes nuclide info + procedure, pass :: get_xs => nuclide_iso_get_xs ! Gets Size of Data w/in Object + procedure, pass :: calc_f => nuclide_mg_iso_calc_f ! Calcs f given mu end type Nuclide_Iso !=============================================================================== @@ -181,9 +198,10 @@ module nuclide_header ! Type-Bound procedures contains - procedure, pass :: clear => nuclide_angle_clear ! Deallocates Nuclide - procedure, pass :: print => nuclide_angle_print ! Gets Size of Data w/in Object - procedure, pass :: get_xs => nuclide_angle_get_xs ! Gets Size of Data w/in Object + procedure, pass :: clear => nuclide_angle_clear ! Deallocates Nuclide + procedure, pass :: print => nuclide_angle_print ! Gets Size of Data w/in Object + procedure, pass :: get_xs => nuclide_angle_get_xs ! Gets Size of Data w/in Object + procedure, pass :: calc_f => nuclide_mg_angle_calc_f ! Calcs f given mu end type Nuclide_Angle !=============================================================================== @@ -533,7 +551,7 @@ module nuclide_header temp_str = "Legendre" write(unit_,*) ' Scattering Type = ' // trim(temp_str) write(unit_,*) ' # of Scatter Moments = ' // & - trim(to_str(this % order - 1)) + trim(to_str(this % order)) else if (this % scatt_type == ANGLE_HISTOGRAM) then temp_str = "Histogram" write(unit_,*) ' Scattering Type = ' // trim(temp_str) @@ -666,30 +684,10 @@ module nuclide_header case('nu_fission') xs = this % nu_fission(gout,g) case('f_mu', 'f_mu/mult') - if (this % scatt_type == ANGLE_LEGENDRE) then - xs = evaluate_legendre(this % scatter(gout,g,:), mu) - else - dmu = TWO / real(this % order) - ! Find mu bin algebraically, knowing that the spacing is equal - f = (mu + ONE) / dmu + ONE - imu = floor(f) - ! But save the amount that mu is past the previous index - ! so we can use interpolation later. - f = f - real(imu) - ! Adjust so interpolation works on the last bin if necessary - if (imu == size(this % scatter, dim=3)) then - imu = imu - 1 - end if - - ! Now intepolate to find f(mu) - r = f / dmu - xs = (ONE - r) * this % scatter(gout, g, imu) + & - r * this % scatter(gout, g, imu+1) - end if + xs = this % calc_f(g, gout, mu) if (xstype == 'f_mu/mult') then xs = xs / this % mult(gout,g) end if - end select else select case(xstype) @@ -750,26 +748,7 @@ module nuclide_header case('chi') xs = this % chi(gout,i_azi_,i_pol_) case('f_mu', 'f_mu/mult') - if (this % scatt_type == ANGLE_LEGENDRE) then - xs = evaluate_legendre(this % scatter(gout,g,:,i_azi_,i_pol_), mu) - else - dmu = TWO / real(this % order) - ! Find mu bin algebraically, knowing that the spacing is equal - f = (mu + ONE) / dmu + ONE - imu = floor(f) - ! But save the amount that mu is past the previous index - ! so we can use interpolation later. - f = f - real(imu) - ! Adjust so interpolation works on the last bin if necessary - if (imu == size(this % scatter, dim=3)) then - imu = imu - 1 - end if - - ! Now intepolate to find f(mu) - r = f / dmu - xs = (ONE - r) * this % scatter(gout,g,imu,i_azi_,i_pol_) + & - r * this % scatter(gout,g,imu+1,i_azi_,i_pol_) - end if + xs = this % calc_f(g, gout, mu, I_AZI=i_azi_, I_POL=i_pol_) if (xstype == 'f_mu/mult') then xs = xs / this % mult(gout,g,i_azi_,i_pol_) end if @@ -796,10 +775,114 @@ module nuclide_header end function nuclide_angle_get_xs !=============================================================================== +! NUCLIDE_*_CALC_F Finds the value of f(mu), the scattering probability, given mu +!=============================================================================== + + pure function nuclide_mg_iso_calc_f(this, gin, gout, mu, uvw, i_azi, i_pol) & + result(f) + class(Nuclide_Iso), intent(in) :: this + integer, intent(in) :: gin ! Incoming Energy Group + integer, intent(in) :: gout ! Outgoing Energy Group + real(8), intent(in) :: mu ! Angle of interest + real(8), intent(in), optional :: uvw(3) ! Direction vector + integer, intent(in), optional :: i_azi ! Incoming Energy Group + integer, intent(in), optional :: i_pol ! Outgoing Energy Group + real(8) :: f ! Return value of f(mu) + + real(8) :: dmu, r + integer :: imu + + if (this % scatt_type == ANGLE_LEGENDRE) then + f = evaluate_legendre(this % scatter(gout,gin,:), mu) + else if (this % scatt_type == ANGLE_TABULAR) then + dmu = TWO / (real(this % order) - 1) + ! Find mu bin algebraically, knowing that the spacing is equal + f = (mu + ONE) / dmu + ONE + imu = floor(f) + ! But save the amount that mu is past the previous index + ! so we can use interpolation later. + f = f - real(imu) + ! Adjust so interpolation works on the last bin if necessary + if (imu == size(this % scatter, dim=3)) then + imu = imu - 1 + end if + + ! Now intepolate to find f(mu) + r = f / dmu + f = (ONE - r) * this % scatter(gout,gin,imu) + & + r * this % scatter(gout,gin,imu+1) + else ! (ANGLE_HISTOGRAM) + dmu = TWO / real(this % order) + ! Find mu bin algebraically, knowing that the spacing is equal + imu = floor((mu + ONE) / dmu + ONE) + ! Adjust so interpolation works on the last bin if necessary + if (imu == size(this % scatter, dim=3)) then + imu = imu - 1 + end if + f = this % scatter(gout, gin, imu) + + end if + + end function nuclide_mg_iso_calc_f + + pure function nuclide_mg_angle_calc_f(this, gin, gout, mu, uvw, i_azi, & + i_pol) result(f) + class(Nuclide_Angle), intent(in) :: this + integer, intent(in) :: gin ! Incoming Energy Group + integer, intent(in) :: gout ! Outgoing Energy Group + real(8), intent(in) :: mu ! Angle of interest + real(8), intent(in), optional :: uvw(3) ! Direction vector + integer, intent(in), optional :: i_azi ! Incoming Energy Group + integer, intent(in), optional :: i_pol ! Outgoing Energy Group + real(8) :: f ! Return value of f(mu) + + real(8) :: dmu, r + integer :: imu + integer :: i_azi_, i_pol_ + if (present(i_azi) .and. present(i_pol)) then + i_azi_ = i_azi + i_pol_ = i_pol + else if (present(uvw)) then + call find_angle(this % polar, this % azimuthal, uvw, i_azi_, i_pol_) + end if + + if (this % scatt_type == ANGLE_LEGENDRE) then + f = evaluate_legendre(this % scatter(gout,gin,:,i_azi_,i_pol_), mu) + else if (this % scatt_type == ANGLE_TABULAR) then + dmu = TWO / (real(this % order) - 1) + ! Find mu bin algebraically, knowing that the spacing is equal + f = (mu + ONE) / dmu + ONE + imu = floor(f) + ! But save the amount that mu is past the previous index + ! so we can use interpolation later. + f = f - real(imu) + ! Adjust so interpolation works on the last bin if necessary + if (imu == size(this % scatter, dim=3)) then + imu = imu - 1 + end if + + ! Now intepolate to find f(mu) + r = f / dmu + f = (ONE - r) * this % scatter(gout,gin,imu,i_azi_,i_pol_) + & + r * this % scatter(gout,gin,imu+1,i_azi_,i_pol_) + else ! (ANGLE_HISTOGRAM) + dmu = TWO / real(this % order) + ! Find mu bin algebraically, knowing that the spacing is equal + imu = floor((mu + ONE) / dmu + ONE) + ! Adjust so interpolation works on the last bin if necessary + if (imu == size(this % scatter, dim=3)) then + imu = imu - 1 + end if + f = this % scatter(gout, gin, imu,i_azi_,i_pol_) + + end if + + end function nuclide_mg_angle_calc_f +!=============================================================================== ! find_angle finds the closest angle on the data grid and returns that index !=============================================================================== - subroutine find_angle(polar, azimuthal, uvw, i_azi, i_pol) + pure subroutine find_angle(polar, azimuthal, uvw, i_azi, i_pol) real(8), intent(in) :: polar(:) ! Polar angles [0,pi] real(8), intent(in) :: azimuthal(:) ! Azi. angles [-pi,pi] real(8), intent(in) :: uvw(3) ! Direction of motion diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index 7d3448aeaa..198dbf2cf5 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -148,7 +148,7 @@ contains p % mu, p % wgt) ! Update energy value for downstream compatability (in tallying) - p % E = energy_bin_midpoints(p % g) + p % E = energy_bin_avg(p % g) p % coord(p % n_coord) % uvw = rotate_angle(p % coord(p % n_coord) % uvw, & p % mu) diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index 63a428717b..29ab616e0a 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -188,9 +188,9 @@ contains call scattdata_base_init(this, this_order, energy, mult) allocate(this % mu(this_order)) - this % dmu = TWO / (real(this_order,8) - 1) + this % dmu = TWO / (real(this_order) - 1) do imu = 1, this_order - 1 - this % mu(imu) = -ONE + real(imu - 1, 8) * this % dmu + this % mu(imu) = -ONE + real(imu - 1) * this % dmu end do this % mu(this_order) = ONE @@ -220,7 +220,7 @@ contains ! the negative fix-up introduced un-normalized data norm = ZERO do imu = 2, this_order - norm = norm + 0.5_8 * this % dmu * (this % fmu(imu-1,gout,gin) + this % fmu(imu,gout,gin)) + norm = norm + HALF * this % dmu * (this % fmu(imu-1,gout,gin) + this % fmu(imu,gout,gin)) end do if (norm > ZERO) then this % fmu(:,gout,gin) = this % fmu(:,gout,gin) / norm @@ -230,7 +230,7 @@ contains this % data(1,gout,gin) = ZERO do imu = 2, this_order - 1 this % data(imu,gout,gin) = this % data(imu-1,gout,gin) + & - 0.5_8 * this % dmu * (this % fmu(imu-1,gout,gin) + this % fmu(imu,gout,gin)) + HALF * this % dmu * (this % fmu(imu-1,gout,gin) + this % fmu(imu,gout,gin)) end do this % data(this_order,gout,gin) = ONE end if @@ -295,10 +295,10 @@ contains pure function scattdata_legendre_calc_f(this, gin, gout, mu) result(f) class(ScattData_Legendre), intent(in) :: this ! The ScattData to evaluate - integer, intent(in) :: gin ! Incoming Energy Group - integer, intent(in) :: gout ! Outgoing Energy Group - real(8), intent(in) :: mu ! Angle of interest - real(8) :: f ! Return value of f(mu) + integer, intent(in) :: gin ! Incoming Energy Group + integer, intent(in) :: gout ! Outgoing Energy Group + real(8), intent(in) :: mu ! Angle of interest + real(8) :: f ! Return value of f(mu) ! Plug mu in to the legendre expansion and go from there f = evaluate_legendre(this % data(:, gout, gin), mu) @@ -307,10 +307,10 @@ contains pure function scattdata_histogram_calc_f(this, gin, gout, mu) result(f) class(ScattData_Histogram), intent(in) :: this ! The ScattData to evaluate - integer, intent(in) :: gin ! Incoming Energy Group - integer, intent(in) :: gout ! Outgoing Energy Group - real(8), intent(in) :: mu ! Angle of interest - real(8) :: f ! Return value of f(mu) + integer, intent(in) :: gin ! Incoming Energy Group + integer, intent(in) :: gout ! Outgoing Energy Group + real(8), intent(in) :: mu ! Angle of interest + real(8) :: f ! Return value of f(mu) integer :: imu @@ -328,10 +328,10 @@ contains pure function scattdata_tabular_calc_f(this, gin, gout, mu) result(f) class(ScattData_Tabular), intent(in) :: this ! The ScattData to evaluate - integer, intent(in) :: gin ! Incoming Energy Group - integer, intent(in) :: gout ! Outgoing Energy Group - real(8), intent(in) :: mu ! Angle of interest - real(8) :: f ! Return value of f(mu) + integer, intent(in) :: gin ! Incoming Energy Group + integer, intent(in) :: gout ! Outgoing Energy Group + real(8), intent(in) :: mu ! Angle of interest + real(8) :: f ! Return value of f(mu) integer :: imu real(8) :: r From 7497efb15359a0b225ae8c62c4098853a9425775 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 7 Nov 2015 12:33:10 -0500 Subject: [PATCH 023/650] Removed update to last_E since we dont need that in MG mode --- src/physics_mg.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index 198dbf2cf5..1da3619063 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -32,7 +32,6 @@ contains ! Store pre-collision particle properties p % last_wgt = p % wgt - p % last_E = p % E p % last_g = p % g p % last_uvw = p % coord(1) % uvw @@ -150,6 +149,7 @@ contains ! Update energy value for downstream compatability (in tallying) p % E = energy_bin_avg(p % g) + ! Convert change in angle (mu) to new direction p % coord(p % n_coord) % uvw = rotate_angle(p % coord(p % n_coord) % uvw, & p % mu) From 39445f059fa673d53ded657ab8cb83b7e1bddca1 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 7 Nov 2015 14:06:38 -0500 Subject: [PATCH 024/650] Fixed p%coord(?) bug where i had the wrong coordinate index, showed up in the c5g7 problems with their lattices and thus n_coord was not 1. Also added c5g7 example problems. --- examples/xml/multigroup/c5g7/2d/cmfd.xml | 20 + examples/xml/multigroup/c5g7/2d/geometry.xml | 118 ++++++ examples/xml/multigroup/c5g7/2d/materials.xml | 1 + examples/xml/multigroup/c5g7/2d/plots.xml | 29 ++ examples/xml/multigroup/c5g7/2d/settings.xml | 50 +++ examples/xml/multigroup/c5g7/2d/tallies.xml | 25 ++ examples/xml/multigroup/c5g7/3d/geometry.xml | 138 +++++++ examples/xml/multigroup/c5g7/3d/materials.xml | 1 + examples/xml/multigroup/c5g7/3d/plots.xml | 42 ++ examples/xml/multigroup/c5g7/3d/settings.xml | 49 +++ examples/xml/multigroup/c5g7/3d/tallies.xml | 33 ++ examples/xml/multigroup/c5g7/data.xml | 383 ++++++++++++++++++ examples/xml/multigroup/c5g7/materials.xml | 54 +++ examples/xml/multigroup/c5g7/pin/geometry.xml | 16 + .../xml/multigroup/c5g7/pin/materials.xml | 1 + examples/xml/multigroup/c5g7/pin/plots.xml | 28 ++ examples/xml/multigroup/c5g7/pin/settings.xml | 46 +++ examples/xml/multigroup/c5g7/pin/tallies.xml | 16 + src/mgxs_data.F90 | 4 +- src/physics_mg.F90 | 6 +- 20 files changed, 1054 insertions(+), 6 deletions(-) create mode 100644 examples/xml/multigroup/c5g7/2d/cmfd.xml create mode 100644 examples/xml/multigroup/c5g7/2d/geometry.xml create mode 120000 examples/xml/multigroup/c5g7/2d/materials.xml create mode 100644 examples/xml/multigroup/c5g7/2d/plots.xml create mode 100644 examples/xml/multigroup/c5g7/2d/settings.xml create mode 100644 examples/xml/multigroup/c5g7/2d/tallies.xml create mode 100644 examples/xml/multigroup/c5g7/3d/geometry.xml create mode 120000 examples/xml/multigroup/c5g7/3d/materials.xml create mode 100644 examples/xml/multigroup/c5g7/3d/plots.xml create mode 100644 examples/xml/multigroup/c5g7/3d/settings.xml create mode 100644 examples/xml/multigroup/c5g7/3d/tallies.xml create mode 100644 examples/xml/multigroup/c5g7/data.xml create mode 100644 examples/xml/multigroup/c5g7/materials.xml create mode 100644 examples/xml/multigroup/c5g7/pin/geometry.xml create mode 120000 examples/xml/multigroup/c5g7/pin/materials.xml create mode 100644 examples/xml/multigroup/c5g7/pin/plots.xml create mode 100644 examples/xml/multigroup/c5g7/pin/settings.xml create mode 100644 examples/xml/multigroup/c5g7/pin/tallies.xml diff --git a/examples/xml/multigroup/c5g7/2d/cmfd.xml b/examples/xml/multigroup/c5g7/2d/cmfd.xml new file mode 100644 index 0000000000..22b1e9042f --- /dev/null +++ b/examples/xml/multigroup/c5g7/2d/cmfd.xml @@ -0,0 +1,20 @@ + + + + 1 + true + jfnk + + 0.0 0.0 -100.0 + 64.26 64.26 100.0 + 6 6 1 + + 2 2 2 2 1 1 + 2 2 2 2 1 1 + 2 2 2 2 1 1 + 2 2 2 2 1 1 + 1 1 1 1 1 1 + 1 1 1 1 1 1 + + + diff --git a/examples/xml/multigroup/c5g7/2d/geometry.xml b/examples/xml/multigroup/c5g7/2d/geometry.xml new file mode 100644 index 0000000000..3b43562f37 --- /dev/null +++ b/examples/xml/multigroup/c5g7/2d/geometry.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 17 17 + -10.71 -10.71 + 1.26 1.26 + + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 6 1 1 6 1 1 6 1 1 1 1 1 + 1 1 1 6 1 1 1 1 1 1 1 1 1 6 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 6 1 1 6 1 1 6 1 1 6 1 1 6 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 6 1 1 6 1 1 5 1 1 6 1 1 6 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 6 1 1 6 1 1 6 1 1 6 1 1 6 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 6 1 1 1 1 1 1 1 1 1 6 1 1 1 + 1 1 1 1 1 6 1 1 6 1 1 6 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + + + + + + 0 + 17 17 + -10.71 -10.71 + 1.26 1.26 + + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 + 2 3 3 3 3 6 3 3 6 3 3 6 3 3 3 3 2 + 2 3 3 6 3 4 4 4 4 4 4 4 3 6 3 3 2 + 2 3 3 3 4 4 4 4 4 4 4 4 4 3 3 3 2 + 2 3 6 4 4 6 4 4 6 4 4 6 4 4 6 3 2 + 2 3 3 4 4 4 4 4 4 4 4 4 4 4 3 3 2 + 2 3 3 4 4 4 4 4 4 4 4 4 4 4 3 3 2 + 2 3 6 4 4 6 4 4 5 4 4 6 4 4 6 3 2 + 2 3 3 4 4 4 4 4 4 4 4 4 4 4 3 3 2 + 2 3 3 4 4 4 4 4 4 4 4 4 4 4 3 3 2 + 2 3 6 4 4 6 4 4 6 4 4 6 4 4 6 3 2 + 2 3 3 3 4 4 4 4 4 4 4 4 4 3 3 3 2 + 2 3 3 6 3 4 4 4 4 4 4 4 3 6 3 3 2 + 2 3 3 3 3 6 3 3 6 3 3 6 3 3 3 3 2 + 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + + + + + + + + + + + + + + + 0 + 3 3 + 0.0 0.0 + 21.42 21.42 + + 10 11 12 + 11 10 12 + 12 12 12 + + + + + + + diff --git a/examples/xml/multigroup/c5g7/2d/materials.xml b/examples/xml/multigroup/c5g7/2d/materials.xml new file mode 120000 index 0000000000..c3825cffc5 --- /dev/null +++ b/examples/xml/multigroup/c5g7/2d/materials.xml @@ -0,0 +1 @@ +/home/nelsonag/cases/c5g7/materials.xml \ No newline at end of file diff --git a/examples/xml/multigroup/c5g7/2d/plots.xml b/examples/xml/multigroup/c5g7/2d/plots.xml new file mode 100644 index 0000000000..a38f73f4e3 --- /dev/null +++ b/examples/xml/multigroup/c5g7/2d/plots.xml @@ -0,0 +1,29 @@ + + + + + 1 + mat + material + 32.13 32.13 0 + 64.26 64.26 + slice + 1000 1000 + + + + + 2 + cell + cell + 32.13 32.13 0 + 64.26 64.26 + slice + 1000 1000 + + + diff --git a/examples/xml/multigroup/c5g7/2d/settings.xml b/examples/xml/multigroup/c5g7/2d/settings.xml new file mode 100644 index 0000000000..189adc6c96 --- /dev/null +++ b/examples/xml/multigroup/c5g7/2d/settings.xml @@ -0,0 +1,50 @@ + + + multi-group + + + 2500 + 500 + 1000 + + + + 0.0 21.42 -100 + 42.84 64.26 100 + 34 34 1 + + + + + + + 0.0 21.42 -100 + 42.84 64.26 100 + + + + + + + 2000 + true + + + + true + true + true + + + false + + ../data.xml + + diff --git a/examples/xml/multigroup/c5g7/2d/tallies.xml b/examples/xml/multigroup/c5g7/2d/tallies.xml new file mode 100644 index 0000000000..8b21bf524a --- /dev/null +++ b/examples/xml/multigroup/c5g7/2d/tallies.xml @@ -0,0 +1,25 @@ + + + + + + + flux + + + + + fission + + + + 1 + regular + 0.0 0.0 -100.0 + 64.26 64.26 100.0 + 51 51 1 + + + false + + diff --git a/examples/xml/multigroup/c5g7/3d/geometry.xml b/examples/xml/multigroup/c5g7/3d/geometry.xml new file mode 100644 index 0000000000..b7766b32a0 --- /dev/null +++ b/examples/xml/multigroup/c5g7/3d/geometry.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 17 17 + -10.71 -10.71 + 1.26 1.26 + + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 6 1 1 6 1 1 6 1 1 1 1 1 + 1 1 1 6 1 1 1 1 1 1 1 1 1 6 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 6 1 1 6 1 1 6 1 1 6 1 1 6 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 6 1 1 6 1 1 5 1 1 6 1 1 6 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 6 1 1 6 1 1 6 1 1 6 1 1 6 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 6 1 1 1 1 1 1 1 1 1 6 1 1 1 + 1 1 1 1 1 6 1 1 6 1 1 6 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + + + + + + 0 + 17 17 + -10.71 -10.71 + 1.26 1.26 + + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 + 2 3 3 3 3 6 3 3 6 3 3 6 3 3 3 3 2 + 2 3 3 6 3 4 4 4 4 4 4 4 3 6 3 3 2 + 2 3 3 3 4 4 4 4 4 4 4 4 4 3 3 3 2 + 2 3 6 4 4 6 4 4 6 4 4 6 4 4 6 3 2 + 2 3 3 4 4 4 4 4 4 4 4 4 4 4 3 3 2 + 2 3 3 4 4 4 4 4 4 4 4 4 4 4 3 3 2 + 2 3 6 4 4 6 4 4 5 4 4 6 4 4 6 3 2 + 2 3 3 4 4 4 4 4 4 4 4 4 4 4 3 3 2 + 2 3 3 4 4 4 4 4 4 4 4 4 4 4 3 3 2 + 2 3 6 4 4 6 4 4 6 4 4 6 4 4 6 3 2 + 2 3 3 3 4 4 4 4 4 4 4 4 4 3 3 3 2 + 2 3 3 6 3 4 4 4 4 4 4 4 3 6 3 3 2 + 2 3 3 3 3 6 3 3 6 3 3 6 3 3 3 3 2 + 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + + + + + + + + + + + + + + + + 3 3 + 0.0 0.0 + 21.42 21.42 + + 10 11 12 + 11 10 12 + 12 12 12 + + + + + + + + + + + + 3 3 + 0.0 0.0 + 21.42 21.42 + + 13 13 13 + 13 13 13 + 13 13 13 + + + + + + + + \ No newline at end of file diff --git a/examples/xml/multigroup/c5g7/3d/materials.xml b/examples/xml/multigroup/c5g7/3d/materials.xml new file mode 120000 index 0000000000..c344223b66 --- /dev/null +++ b/examples/xml/multigroup/c5g7/3d/materials.xml @@ -0,0 +1 @@ +../materials.xml \ No newline at end of file diff --git a/examples/xml/multigroup/c5g7/3d/plots.xml b/examples/xml/multigroup/c5g7/3d/plots.xml new file mode 100644 index 0000000000..caab977866 --- /dev/null +++ b/examples/xml/multigroup/c5g7/3d/plots.xml @@ -0,0 +1,42 @@ + + + + + 1 + mat + material + 32.13 32.13 107.1 + 64.26 214.2 + slice + 1000 1000 + + xz + + + + 2 + cell + cell + 32.13 32.13 107.1 + 64.26 214.2 + slice + 1000 1000 + xz + + + + 3 + mat_xy + material + 32.13 32.13 107.1 + 64.26 64.26 + slice + 1000 1000 + xy + + + diff --git a/examples/xml/multigroup/c5g7/3d/settings.xml b/examples/xml/multigroup/c5g7/3d/settings.xml new file mode 100644 index 0000000000..b67b882908 --- /dev/null +++ b/examples/xml/multigroup/c5g7/3d/settings.xml @@ -0,0 +1,49 @@ + + + multi-group + + + 2000 + 500 + 1000 + + + + 0.0 21.42 0.0 + 42.84 64.26 192.78 + 34 34 54 + + + + + + + 0.0 21.42 0.0 + 42.84 64.26 192.78 + + + + + + + 2000 + + + + true + true + true + + + false + + ../data.xml + + diff --git a/examples/xml/multigroup/c5g7/3d/tallies.xml b/examples/xml/multigroup/c5g7/3d/tallies.xml new file mode 100644 index 0000000000..e3826ccb63 --- /dev/null +++ b/examples/xml/multigroup/c5g7/3d/tallies.xml @@ -0,0 +1,33 @@ + + + + + + + flux + + + + + fission + + + + 1 + rectangular + 0.0 0.0 0.0 + 64.26 64.26 214.2 + 51 51 60 + + + + 2 + rectangular + 0.0 21.42 0.0 + 42.84 64.26 192.78 + 34 34 54 + + + false + + diff --git a/examples/xml/multigroup/c5g7/data.xml b/examples/xml/multigroup/c5g7/data.xml new file mode 100644 index 0000000000..ec85d4b593 --- /dev/null +++ b/examples/xml/multigroup/c5g7/data.xml @@ -0,0 +1,383 @@ + + + + 7 + + 1E-11 0.0635E-6 10.0E-6 1.0E-4 1.0E-3 0.5 1.0 20.0 + + + + + + UO2.71c + UO2.71c + 2.53E-8 + 0 + true + + isotropic + + + + 8.0248E-03 3.7174E-03 2.6769E-02 9.6236E-02 3.0020E-02 1.1126E-01 2.8278E-01 + + + + 2.005998E-02 2.027303E-03 1.570599E-02 4.518301E-02 4.334208E-02 2.020901E-01 5.257105E-01 + + + + 5.8791E-01 4.1176E-01 3.3906E-04 1.1761E-07 0.0000E+00 0.0000E+00 0.0000E+00 + + + 7.21206E-03 8.19301E-04 6.45320E-03 1.85648E-02 1.78084E-02 8.30348E-02 2.16004E-01 + + + + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + + + + 0.1275370 0.0423780 0.0000094 0.0000000 0.0000000 0.0000000 0.0000000 + 0.0000000 0.3244560 0.0016314 0.0000000 0.0000000 0.0000000 0.0000000 + 0.0000000 0.0000000 0.4509400 0.0026792 0.0000000 0.0000000 0.0000000 + 0.0000000 0.0000000 0.0000000 0.4525650 0.0055664 0.0000000 0.0000000 + 0.0000000 0.0000000 0.0000000 0.0001253 0.2714010 0.0102550 0.0000000 + 0.0000000 0.0000000 0.0000000 0.0000000 0.0012968 0.2658020 0.0168090 + 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0085458 0.2730800 + + + + + 0.1779492 0.3298048 0.4803882 0.5543674000000001 0.3118013 0.39516779999999996 0.5644058 + + + + + + + MOX1.71c + MOX1.71c + 2.53E-8 + 0 + true + + + + 8.4339E-03 3.7577E-03 2.7970E-02 1.0421E-01 1.3994E-01 4.0918E-01 4.0935E-01 + + + + 1.27888062E-02 8.95701528E-03 7.37557218E-06 2.55837033E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.49041240E-03 1.04385401E-03 8.59552023E-07 2.98153464E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 9.56411400E-03 6.69850756E-03 5.51582469E-06 1.91327830E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 3.84928781E-02 2.69596154E-02 2.21996483E-05 7.70040890E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.80629998E-02 1.26509513E-02 1.04173100E-05 3.61346022E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 3.91930789E-01 2.74500216E-01 2.26034688E-04 7.84048241E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 4.19762096E-01 2.93992687E-01 2.42085585E-04 8.39724109E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00 + + + + 7.62704E-03 8.76898E-04 5.69835E-03 2.28872E-02 1.07635E-02 2.32757E-01 2.48968E-01 + + + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + + + + 1.27537000E-01 4.23780000E-02 9.43740000E-06 5.51630000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 3.24456000E-01 1.63140000E-03 3.14270000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 4.50940000E-01 2.67920000E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.52565000E-01 5.56640000E-03 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.25250000E-04 2.71401000E-01 1.02550000E-02 1.00210000E-08 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.29680000E-03 2.65802000E-01 1.68090000E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.54580000E-03 2.73080000E-01 + + + + 0.1783583429163 0.3298451031427 0.4815892 0.5623414 0.421721260021 0.6930878 0.6909757999999999 + + + + + + + MOX2.71c + MOX2.71c + 2.53E-8 + 0 + true + + + + 0.0090657 0.0042967 0.032881 0.12203 0.18298 0.56846 0.58521 + + + + 1.40004593E-02 9.80563205E-03 8.07435789E-06 2.80075866E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2.26856185E-03 1.58885378E-03 1.30832709E-06 4.53820413E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.41886199E-02 9.93741584E-03 8.18287404E-06 2.83839974E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 5.54788444E-02 3.88562347E-02 3.19958106E-05 1.10984111E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2.69085702E-02 1.88462058E-02 1.55187355E-05 5.38299559E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 5.45687127E-01 3.82187973E-01 3.14709185E-04 1.09163414E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 6.13307712E-01 4.29548032E-01 3.53707392E-04 1.22690752E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00 + + + + 0.00825446 0.00132565 0.00842156 0.032873 0.0159636 0.323794 0.362803 + + + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + + + + 1.30457000E-01 4.17920000E-02 8.51050000E-06 5.13290000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 3.28428000E-01 1.64360000E-03 2.20170000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 4.58371000E-01 2.53310000E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.63709000E-01 5.47660000E-03 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.76190000E-04 2.82313000E-01 8.72890000E-03 9.00160000E-09 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.27600000E-03 2.49751000E-01 1.31140000E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.86450000E-03 2.59529000E-01 + + + + 0.1813232156329 0.3343683022017 0.4937851 0.5912156 0.47419809900160004 0.833601 0.8536035 + + + + + + + MOX3.71c + MOX3.71c + 2.53E-8 + 0 + true + + + + 9.48620000E-03 4.65560000E-03 3.62400000E-02 1.32720000E-01 2.08400000E-01 6.58700000E-01 6.90170000E-01 + + + + 1.48071013E-02 1.03705874E-02 8.53956516E-06 2.96212546E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2.78640474E-03 1.95154023E-03 1.60697792E-06 5.57413653E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.73304404E-02 1.21378819E-02 9.99482763E-06 3.46691346E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 6.59928975E-02 4.62200600E-02 3.80594850E-05 1.32017225E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 3.25131926E-02 2.27715674E-02 1.87510386E-05 6.50418701E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 6.32002662E-01 4.42641588E-01 3.64489161E-04 1.26430632E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7.28595687E-01 5.10293344E-01 4.20196380E-04 1.45753838E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00 + + + + 8.67209000E-03 1.62426000E-03 1.02716000E-02 3.90447000E-02 1.92576000E-02 3.74888000E-01 4.30599000E-01 + + + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + + + + 1.31504000E-01 4.20460000E-02 8.69720000E-06 5.19380000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 3.30403000E-01 1.64630000E-03 2.60060000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 4.61792000E-01 2.47490000E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.68021000E-01 5.43300000E-03 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.85970000E-04 2.85771000E-01 8.39730000E-03 8.92800000E-09 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.39160000E-03 2.47614000E-01 1.23220000E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.96810000E-03 2.56093000E-01 + + + + 1.83044902E-01 3.36704903E-01 5.00506900E-01 6.06174000E-01 5.02754279E-01 9.21027600E-01 9.55231100E-01 + + + + + + + FC.71c + FC.71c + 2.53E-8 + 0 + true + + + + 5.1132E-04 7.5813E-05 3.1643E-04 1.1675E-03 3.3977E-03 9.1886E-03 2.3244E-02 + + + + 1.323401E-08 1.434500E-08 1.128599E-06 1.276299E-05 3.538502E-07 1.740099E-06 5.063302E-06 + + + + 5.8791E-01 4.1176E-01 3.3906E-04 1.1761E-07 0.0000E+00 0.0000E+00 0.0000E+00 + + + + 4.79002E-09 5.82564E-09 4.63719E-07 5.24406E-06 1.45390E-07 7.14972E-07 2.08041E-06 + + + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + + + + 6.61659000E-02 5.90700000E-02 2.83340000E-04 1.46220000E-06 2.06420000E-08 0.00000000E00 0.00000000E00 + 0.00000000E00 2.40377000E-01 5.24350000E-02 2.49900000E-04 1.92390000E-05 2.98750000E-06 4.21400000E-07 + 0.00000000E00 0.00000000E00 1.83425000E-01 9.22880000E-02 6.93650000E-03 1.07900000E-03 2.05430000E-04 + 0.00000000E00 0.00000000E00 0.00000000E00 7.90769000E-02 1.69990000E-01 2.58600000E-02 4.92560000E-03 + 0.00000000E00 0.00000000E00 0.00000000E00 3.73400000E-05 9.97570000E-02 2.06790000E-01 2.44780000E-02 + 0.00000000E00 0.00000000E00 0.00000000E00 0.00000000E00 9.17420000E-04 3.16774000E-01 2.38760000E-01 + 0.00000000E00 0.00000000E00 0.00000000E00 0.00000000E00 0.00000000E00 4.97930000E-02 1.09910000E00 + + + + 1.26032048E-01 2.93160367E-01 2.84250824E-01 2.81025244E-01 3.34460185E-01 5.65640735E-01 1.17213908E00 + + + + + + + GT.71c + GT.71c + 2.53E-8 + 0 + false + + + + 5.11320000E-04 7.58010000E-05 3.15720000E-04 1.15820000E-03 3.39750000E-03 9.18780000E-03 2.32420000E-02 + + + + + + 6.61659000E-02 5.90700000E-02 2.83340000E-04 1.46220000E-06 2.06420000E-08 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 2.40377000E-01 5.24350000E-02 2.49900000E-04 1.92390000E-05 2.98750000E-06 4.21400000E-07 + 0.00000000E+00 0.00000000E+00 1.83297000E-01 9.23970000E-02 6.94460000E-03 1.08030000E-03 2.05670000E-04 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.88511000E-02 1.70140000E-01 2.58810000E-02 4.92970000E-03 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.73330000E-05 9.97372000E-02 2.06790000E-01 2.44780000E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.17260000E-04 3.16765000E-01 2.38770000E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.97920000E-02 1.09912000E+00 + + + + 1.26032043E-01 2.93160349E-01 2.84240290E-01 2.80960000E-01 3.34440033E-01 5.65640060E-01 1.17215400E+00 + + + + + + LWTR.71c + LWTR.71c + 2.53E-8 + 0 + false + + + + 6.0105E-04 1.5793E-05 3.3716E-04 1.9406E-03 5.7416E-03 1.5001E-02 3.7239E-02 + + + + + + 0.0444777 0.1134000 0.0007235 0.0000037 0.0000001 0.0000000 0.0000000 + 0.0000000 0.2823340 0.1299400 0.0006234 0.0000480 0.0000074 0.0000010 + 0.0000000 0.0000000 0.3452560 0.2245700 0.0169990 0.0026443 0.0005034 + 0.0000000 0.0000000 0.0000000 0.0910284 0.4155100 0.0637320 0.0121390 + 0.0000000 0.0000000 0.0000000 0.0000714 0.1391380 0.5118200 0.0612290 + 0.0000000 0.0000000 0.0000000 0.0000000 0.0022157 0.6999130 0.5373200 + 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.1324400 2.4807000 + + + + 0.15920605 0.41296959299999997 0.59030986 0.5843499999999999 0.7180000000000001 1.2544497000000001 2.650379 + + + + + + + CR.71c + CR.71c + 2.53E-8 + 0 + false + + + + 1.70490000E-03 8.36224000E-03 8.37901000E-02 3.97797000E-01 6.98763000E-01 9.29508000E-01 1.17836000E+00 + + + + + + 1.70563000E-01 4.44012000E-02 9.83670000E-05 1.27786000E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 4.71050000E-01 6.85480000E-04 3.91395000E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 8.01859000E-01 7.20132000E-04 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.70752000E-01 1.46015000E-03 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.55562000E-05 2.07838000E-01 3.81486000E-03 3.69760000E-09 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.02427000E-03 2.02465000E-01 4.75290000E-03 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.53043000E-03 6.58597000E-01 + + + + 2.16767595E-01 4.80097720E-01 8.86369232E-01 9.70009150E-01 9.10481420E-01 1.13775017E+00 1.84048743E+00 + + + diff --git a/examples/xml/multigroup/c5g7/materials.xml b/examples/xml/multigroup/c5g7/materials.xml new file mode 100644 index 0000000000..930fc09085 --- /dev/null +++ b/examples/xml/multigroup/c5g7/materials.xml @@ -0,0 +1,54 @@ + + + + 71c + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/xml/multigroup/c5g7/pin/geometry.xml b/examples/xml/multigroup/c5g7/pin/geometry.xml new file mode 100644 index 0000000000..94c70cb340 --- /dev/null +++ b/examples/xml/multigroup/c5g7/pin/geometry.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/examples/xml/multigroup/c5g7/pin/materials.xml b/examples/xml/multigroup/c5g7/pin/materials.xml new file mode 120000 index 0000000000..c3825cffc5 --- /dev/null +++ b/examples/xml/multigroup/c5g7/pin/materials.xml @@ -0,0 +1 @@ +/home/nelsonag/cases/c5g7/materials.xml \ No newline at end of file diff --git a/examples/xml/multigroup/c5g7/pin/plots.xml b/examples/xml/multigroup/c5g7/pin/plots.xml new file mode 100644 index 0000000000..cbb8e532c1 --- /dev/null +++ b/examples/xml/multigroup/c5g7/pin/plots.xml @@ -0,0 +1,28 @@ + + + + + 1 + mat + material + 0 0 0 + 1.26 1.26 + slice + 1000 1000 + + + + + + + + 2 + cell + cell + 0 0 0 + 1.26 1.26 + slice + 1000 1000 + + + diff --git a/examples/xml/multigroup/c5g7/pin/settings.xml b/examples/xml/multigroup/c5g7/pin/settings.xml new file mode 100644 index 0000000000..46c0bd2264 --- /dev/null +++ b/examples/xml/multigroup/c5g7/pin/settings.xml @@ -0,0 +1,46 @@ + + + + multi-group + + + + 2000 + 500 + 1000 + + + + + + + -0.63 -0.63 -1E50 + 0.63 0.63 1E50 + + + + + + + 2000 + true + + + + true + true + true + + + false + + ../data.xml + + diff --git a/examples/xml/multigroup/c5g7/pin/tallies.xml b/examples/xml/multigroup/c5g7/pin/tallies.xml new file mode 100644 index 0000000000..727584a627 --- /dev/null +++ b/examples/xml/multigroup/c5g7/pin/tallies.xml @@ -0,0 +1,16 @@ + + + + + + + flux + + + + + + scatter + + + diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index e3ea314d6c..c9830f8d0f 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -261,8 +261,8 @@ contains call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) end if else - enable_leg_mu = .false. - this % legendre_mu_points = 1 + enable_leg_mu = .true. + this % legendre_mu_points = 33 end if if (enable_leg_mu .and. & check_for_node(node_legendre_mu, "num_points")) then diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index 1da3619063..6ac2b44464 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -88,7 +88,6 @@ contains call scatter(p) ! Play russian roulette if survival biasing is turned on - if (survival_biasing) then call russian_roulette(p) if (.not. p % alive) return @@ -143,15 +142,14 @@ contains type(Particle), intent(inout) :: p call sample_scatter(macro_xs(p % material) % obj, & - p % coord(p % n_coord) % uvw, p % last_g, p % g, & + p % coord(1) % uvw, p % last_g, p % g, & p % mu, p % wgt) ! Update energy value for downstream compatability (in tallying) p % E = energy_bin_avg(p % g) ! Convert change in angle (mu) to new direction - p % coord(p % n_coord) % uvw = rotate_angle(p % coord(p % n_coord) % uvw, & - p % mu) + p % coord(1) % uvw = rotate_angle(p % coord(1) % uvw, p % mu) ! Set event component p % event = EVENT_SCATTER From c571a4b12629699250f8c19c3a95f6ba2b15c6eb Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 7 Nov 2015 14:23:20 -0500 Subject: [PATCH 025/650] Got cmfd working, not sure about with feedback just yet --- examples/xml/multigroup/c5g7/2d/cmfd.xml | 6 +++--- examples/xml/multigroup/c5g7/2d/settings.xml | 4 ++-- src/tally.F90 | 15 ++++++++++++--- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/examples/xml/multigroup/c5g7/2d/cmfd.xml b/examples/xml/multigroup/c5g7/2d/cmfd.xml index 22b1e9042f..1b1e523b10 100644 --- a/examples/xml/multigroup/c5g7/2d/cmfd.xml +++ b/examples/xml/multigroup/c5g7/2d/cmfd.xml @@ -1,9 +1,9 @@ - 1 - true - jfnk + 2 + false + power 0.0 0.0 -100.0 64.26 64.26 100.0 diff --git a/examples/xml/multigroup/c5g7/2d/settings.xml b/examples/xml/multigroup/c5g7/2d/settings.xml index 189adc6c96..faed7cd7fc 100644 --- a/examples/xml/multigroup/c5g7/2d/settings.xml +++ b/examples/xml/multigroup/c5g7/2d/settings.xml @@ -33,7 +33,7 @@ - 2000 + 2500 true @@ -43,7 +43,7 @@ true - false + true ../data.xml diff --git a/src/tally.F90 b/src/tally.F90 index 7ad701b168..6b3e7a7934 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -966,8 +966,11 @@ contains ! For scattering production, we need to use the pre-collision ! weight times the multiplicity as the estimate for the number of ! neutrons exiting a reaction with neutrons in the exit channel - score = p % wgt * nuc % get_xs(p % g, 'f_mu', p % last_g, & + score = p % wgt + if (i_nuclide > 0) then + score = score * nuc % get_xs(p % g, 'f_mu', p % last_g, & p % last_uvw, p % mu) + end if case (SCORE_NU_SCATTER_PN) @@ -980,8 +983,11 @@ contains ! For scattering production, we need to use the pre-collision ! weight times the multiplicity as the estimate for the number of ! neutrons exiting a reaction with neutrons in the exit channel - score = p % wgt * nuc % get_xs(p % g, 'f_mu', p % last_g, & + score = p % wgt + if (i_nuclide > 0) then + score = score * nuc % get_xs(p % g, 'f_mu', p % last_g, & p % last_uvw, p % mu) + end if case (SCORE_NU_SCATTER_YN) @@ -994,8 +1000,11 @@ contains ! For scattering production, we need to use the pre-collision ! weight times the multiplicity as the estimate for the number of ! neutrons exiting a reaction with neutrons in the exit channel - score = p % wgt * nuc % get_xs(p % g, 'f_mu', p % last_g, & + score = p % wgt + if (i_nuclide > 0) then + score = score * nuc % get_xs(p % g, 'f_mu', p % last_g, & p % last_uvw, p % mu) + end if case (SCORE_TRANSPORT) From 2262045e633340dff9b05f185b4e66a91d22635a Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 8 Nov 2015 14:12:33 -0500 Subject: [PATCH 026/650] Changes to get tallying on better footing, moved C5G7 problem to higher subdir in examples --- .../xml/{multigroup => }/c5g7/2d/cmfd.xml | 5 +- .../xml/{multigroup => }/c5g7/2d/geometry.xml | 0 .../{multigroup => }/c5g7/2d/materials.xml | 0 .../xml/{multigroup => }/c5g7/2d/plots.xml | 0 .../xml/{multigroup => }/c5g7/2d/settings.xml | 12 +- .../xml/{multigroup => }/c5g7/2d/tallies.xml | 0 .../xml/{multigroup => }/c5g7/3d/geometry.xml | 0 .../{multigroup => }/c5g7/3d/materials.xml | 0 .../xml/{multigroup => }/c5g7/3d/plots.xml | 0 .../xml/{multigroup => }/c5g7/3d/settings.xml | 2 - .../xml/{multigroup => }/c5g7/3d/tallies.xml | 0 examples/xml/{multigroup => }/c5g7/data.xml | 0 .../xml/{multigroup => }/c5g7/materials.xml | 0 .../{multigroup => }/c5g7/pin/geometry.xml | 0 .../{multigroup => }/c5g7/pin/materials.xml | 0 .../xml/{multigroup => }/c5g7/pin/plots.xml | 0 .../{multigroup => }/c5g7/pin/settings.xml | 0 .../xml/{multigroup => }/c5g7/pin/tallies.xml | 0 src/cmfd_input.F90 | 19 ++- src/geometry.F90 | 4 +- src/input_xml.F90 | 8 ++ src/particle_header.F90 | 4 +- src/physics_mg.F90 | 1 + src/tally.F90 | 128 +++++++++++------- src/tally_header.F90 | 4 + 25 files changed, 123 insertions(+), 64 deletions(-) rename examples/xml/{multigroup => }/c5g7/2d/cmfd.xml (69%) rename examples/xml/{multigroup => }/c5g7/2d/geometry.xml (100%) rename examples/xml/{multigroup => }/c5g7/2d/materials.xml (100%) rename examples/xml/{multigroup => }/c5g7/2d/plots.xml (100%) rename examples/xml/{multigroup => }/c5g7/2d/settings.xml (76%) rename examples/xml/{multigroup => }/c5g7/2d/tallies.xml (100%) rename examples/xml/{multigroup => }/c5g7/3d/geometry.xml (100%) rename examples/xml/{multigroup => }/c5g7/3d/materials.xml (100%) rename examples/xml/{multigroup => }/c5g7/3d/plots.xml (100%) rename examples/xml/{multigroup => }/c5g7/3d/settings.xml (97%) rename examples/xml/{multigroup => }/c5g7/3d/tallies.xml (100%) rename examples/xml/{multigroup => }/c5g7/data.xml (100%) rename examples/xml/{multigroup => }/c5g7/materials.xml (100%) rename examples/xml/{multigroup => }/c5g7/pin/geometry.xml (100%) rename examples/xml/{multigroup => }/c5g7/pin/materials.xml (100%) rename examples/xml/{multigroup => }/c5g7/pin/plots.xml (100%) rename examples/xml/{multigroup => }/c5g7/pin/settings.xml (100%) rename examples/xml/{multigroup => }/c5g7/pin/tallies.xml (100%) diff --git a/examples/xml/multigroup/c5g7/2d/cmfd.xml b/examples/xml/c5g7/2d/cmfd.xml similarity index 69% rename from examples/xml/multigroup/c5g7/2d/cmfd.xml rename to examples/xml/c5g7/2d/cmfd.xml index 1b1e523b10..aa3deb4b67 100644 --- a/examples/xml/multigroup/c5g7/2d/cmfd.xml +++ b/examples/xml/c5g7/2d/cmfd.xml @@ -2,12 +2,12 @@ 2 - false - power + true 0.0 0.0 -100.0 64.26 64.26 100.0 6 6 1 + 2 2 2 2 1 1 2 2 2 2 1 1 @@ -16,5 +16,6 @@ 1 1 1 1 1 1 1 1 1 1 1 1 + 1 0 0 1 1 1 diff --git a/examples/xml/multigroup/c5g7/2d/geometry.xml b/examples/xml/c5g7/2d/geometry.xml similarity index 100% rename from examples/xml/multigroup/c5g7/2d/geometry.xml rename to examples/xml/c5g7/2d/geometry.xml diff --git a/examples/xml/multigroup/c5g7/2d/materials.xml b/examples/xml/c5g7/2d/materials.xml similarity index 100% rename from examples/xml/multigroup/c5g7/2d/materials.xml rename to examples/xml/c5g7/2d/materials.xml diff --git a/examples/xml/multigroup/c5g7/2d/plots.xml b/examples/xml/c5g7/2d/plots.xml similarity index 100% rename from examples/xml/multigroup/c5g7/2d/plots.xml rename to examples/xml/c5g7/2d/plots.xml diff --git a/examples/xml/multigroup/c5g7/2d/settings.xml b/examples/xml/c5g7/2d/settings.xml similarity index 76% rename from examples/xml/multigroup/c5g7/2d/settings.xml rename to examples/xml/c5g7/2d/settings.xml index faed7cd7fc..2ad738704a 100644 --- a/examples/xml/multigroup/c5g7/2d/settings.xml +++ b/examples/xml/c5g7/2d/settings.xml @@ -6,17 +6,11 @@ in an eigenvalue calculation mode --> - 2500 + 2000 500 - 1000 + 1000 - - 0.0 21.42 -100 - 42.84 64.26 100 - 34 34 1 - - - 2500 + 2000 true diff --git a/examples/xml/multigroup/c5g7/2d/tallies.xml b/examples/xml/c5g7/2d/tallies.xml similarity index 100% rename from examples/xml/multigroup/c5g7/2d/tallies.xml rename to examples/xml/c5g7/2d/tallies.xml diff --git a/examples/xml/multigroup/c5g7/3d/geometry.xml b/examples/xml/c5g7/3d/geometry.xml similarity index 100% rename from examples/xml/multigroup/c5g7/3d/geometry.xml rename to examples/xml/c5g7/3d/geometry.xml diff --git a/examples/xml/multigroup/c5g7/3d/materials.xml b/examples/xml/c5g7/3d/materials.xml similarity index 100% rename from examples/xml/multigroup/c5g7/3d/materials.xml rename to examples/xml/c5g7/3d/materials.xml diff --git a/examples/xml/multigroup/c5g7/3d/plots.xml b/examples/xml/c5g7/3d/plots.xml similarity index 100% rename from examples/xml/multigroup/c5g7/3d/plots.xml rename to examples/xml/c5g7/3d/plots.xml diff --git a/examples/xml/multigroup/c5g7/3d/settings.xml b/examples/xml/c5g7/3d/settings.xml similarity index 97% rename from examples/xml/multigroup/c5g7/3d/settings.xml rename to examples/xml/c5g7/3d/settings.xml index b67b882908..51241492d5 100644 --- a/examples/xml/multigroup/c5g7/3d/settings.xml +++ b/examples/xml/c5g7/3d/settings.xml @@ -42,8 +42,6 @@ true - false - ../data.xml diff --git a/examples/xml/multigroup/c5g7/3d/tallies.xml b/examples/xml/c5g7/3d/tallies.xml similarity index 100% rename from examples/xml/multigroup/c5g7/3d/tallies.xml rename to examples/xml/c5g7/3d/tallies.xml diff --git a/examples/xml/multigroup/c5g7/data.xml b/examples/xml/c5g7/data.xml similarity index 100% rename from examples/xml/multigroup/c5g7/data.xml rename to examples/xml/c5g7/data.xml diff --git a/examples/xml/multigroup/c5g7/materials.xml b/examples/xml/c5g7/materials.xml similarity index 100% rename from examples/xml/multigroup/c5g7/materials.xml rename to examples/xml/c5g7/materials.xml diff --git a/examples/xml/multigroup/c5g7/pin/geometry.xml b/examples/xml/c5g7/pin/geometry.xml similarity index 100% rename from examples/xml/multigroup/c5g7/pin/geometry.xml rename to examples/xml/c5g7/pin/geometry.xml diff --git a/examples/xml/multigroup/c5g7/pin/materials.xml b/examples/xml/c5g7/pin/materials.xml similarity index 100% rename from examples/xml/multigroup/c5g7/pin/materials.xml rename to examples/xml/c5g7/pin/materials.xml diff --git a/examples/xml/multigroup/c5g7/pin/plots.xml b/examples/xml/c5g7/pin/plots.xml similarity index 100% rename from examples/xml/multigroup/c5g7/pin/plots.xml rename to examples/xml/c5g7/pin/plots.xml diff --git a/examples/xml/multigroup/c5g7/pin/settings.xml b/examples/xml/c5g7/pin/settings.xml similarity index 100% rename from examples/xml/multigroup/c5g7/pin/settings.xml rename to examples/xml/c5g7/pin/settings.xml diff --git a/examples/xml/multigroup/c5g7/pin/tallies.xml b/examples/xml/c5g7/pin/tallies.xml similarity index 100% rename from examples/xml/multigroup/c5g7/pin/tallies.xml rename to examples/xml/c5g7/pin/tallies.xml diff --git a/src/cmfd_input.F90 b/src/cmfd_input.F90 index c15c250e64..4588444d05 100644 --- a/src/cmfd_input.F90 +++ b/src/cmfd_input.F90 @@ -52,7 +52,7 @@ contains use xml_interface use, intrinsic :: ISO_FORTRAN_ENV - integer :: i + integer :: i, g integer :: ng integer :: n_params integer, allocatable :: iarray(:) @@ -102,6 +102,23 @@ contains if(.not.allocated(cmfd%egrid)) allocate(cmfd%egrid(ng)) call get_node_array(node_mesh, "energy", cmfd%egrid) cmfd % indices(4) = ng - 1 ! sets energy group dimension + ! If using MG mode, check to see if these egrid points at least match + ! the MG Data breakpoints + if (.not. run_CE) then + do i = 1, ng + found = .false. + do g = 1, energy_groups + 1 + if (cmfd%egrid(i) == energy_bins(g)) then + found = .true. + exit + end if + end do + if (.not. found) then + call fatal_error("CMFD energy mesh boundaries must align with& + & boundaries of multi-group data!") + end if + end do + end if else if(.not.allocated(cmfd % egrid)) allocate(cmfd % egrid(2)) cmfd % egrid = [ ZERO, 20.0_8 ] diff --git a/src/geometry.F90 b/src/geometry.F90 index 7675c70dc1..a8348d4188 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -199,6 +199,7 @@ contains type(Cell), pointer :: c ! pointer to cell class(Lattice), pointer :: lat ! pointer to lattice type(Universe), pointer :: univ ! universe to search in + real(8) :: new_xyz(3) ! perturbed location used to look for cell do j = p % n_coord + 1, MAX_COORD call p % coord(j) % reset() @@ -285,7 +286,8 @@ contains lat => lattices(c % fill) % obj ! Determine lattice indices - i_xyz = lat % get_indices(p % coord(j) % xyz + TINY_BIT * p % coord(j) % uvw) + new_xyz = p % coord(j) % xyz + TINY_BIT * p % coord(j) % uvw + i_xyz = lat % get_indices(new_xyz) ! Store lower level coordinates p % coord(j + 1) % xyz = lat % get_local_xyz(p % coord(j) % xyz, i_xyz) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 3cf26b49b6..06e1c154e8 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -2705,6 +2705,8 @@ contains ! Allocate and store bins allocate(t % filters(j) % real_bins(n_words)) call get_node_array(node_filt, "bins", t % filters(j) % real_bins) + + if (.not. run_CE) t % energy_matches_groups = .false. else if (n_words == -1) then ! Set number of bins t % filters(j) % n_bins = energy_groups @@ -2712,6 +2714,8 @@ contains ! Allocate and store bins allocate(t % filters(j) % real_bins(energy_groups)) t % filters(j) % real_bins = energy_bins + + if (.not. run_CE) t % energy_matches_groups = .true. end if case ('energyout') @@ -2725,6 +2729,8 @@ contains ! Allocate and store bins allocate(t % filters(j) % real_bins(n_words)) call get_node_array(node_filt, "bins", t % filters(j) % real_bins) + + if (.not. run_CE) t % energyout_matches_groups = .false. else if (n_words == -1) then ! Set number of bins t % filters(j) % n_bins = energy_groups @@ -2732,6 +2738,8 @@ contains ! Allocate and store bins allocate(t % filters(j) % real_bins(energy_groups)) t % filters(j) % real_bins = energy_bins + + if (.not. run_CE) t % energyout_matches_groups = .true. end if ! Set to analog estimator diff --git a/src/particle_header.F90 b/src/particle_header.F90 index 9c0ddfde0d..ff6e4d15cc 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -198,8 +198,8 @@ contains this % E = src % E this % last_E = src % E if (.not. run_CE) then - this % g = src % g - this % last_g = src % g + this % g = src % g + this % last_g = src % g end if end subroutine initialize_from_source diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index 6ac2b44464..38e144e625 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -241,6 +241,7 @@ contains ! Sample secondary energy distribution for fission reaction and set energy ! in fission bank fission_bank(i) % g = sample_fission_energy(xs, p % g, fission_bank(i) % uvw) + fission_bank(i) % E = energy_bin_avg(fission_bank(i) % g) end do ! increment number of bank sites diff --git a/src/tally.F90 b/src/tally.F90 index 6b3e7a7934..848a6cb7eb 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -799,8 +799,7 @@ contains real(8) :: micro_abs ! nuclidic microscopic abs class(Nuclide_MG), pointer :: nuc - if (i_nuclide > 0) & - nuc => nuclides_MG(i_nuclide) % obj + if (i_nuclide > 0) nuc => nuclides_MG(i_nuclide) % obj i = 0 SCORE_LOOP: do q = 1, t % n_user_score_bins @@ -1047,7 +1046,7 @@ contains else if (i_nuclide > 0) then - score = nuc % get_xs(p % g, 'absorption', UVW=p % coord(1) % uvw) & + score = nuc % get_xs(p % g, 'absorption', UVW=p % coord(i) % uvw) & * atom_density * flux else score = material_xs % absorption * flux @@ -1061,10 +1060,10 @@ contains ! No fission events occur if survival biasing is on -- need to ! calculate fraction of absorptions that would have resulted in ! fission - micro_abs = nuc % get_xs(p % g, 'absorption', UVW=p % coord(1) % uvw) + micro_abs = nuc % get_xs(p % g, 'absorption', UVW=p % coord(i) % uvw) if (micro_abs > ZERO) then score = p % absorb_wgt * & - nuc % get_xs(p % g, 'fission', UVW=p % coord(1) % uvw) & + nuc % get_xs(p % g, 'fission', UVW=p % coord(i) % uvw) & / micro_abs else score = ZERO @@ -1076,13 +1075,13 @@ contains ! particle's weight entering the collision as the estimate for the ! fission reaction rate score = p % last_wgt & - * nuc % get_xs(p % g, 'fission', UVW=p % coord(1) % uvw) & - / nuc % get_xs(p % g, 'absorption', UVW=p % coord(1) % uvw) + * nuc % get_xs(p % g, 'fission', UVW=p % coord(i) % uvw) & + / nuc % get_xs(p % g, 'absorption', UVW=p % coord(i) % uvw) end if else if (i_nuclide > 0) then - score = nuc % get_xs(p % g, 'fission', UVW=p % coord(1) % uvw) * & + score = nuc % get_xs(p % g, 'fission', UVW=p % coord(i) % uvw) * & atom_density * flux else score = material_xs % fission * flux @@ -1107,10 +1106,11 @@ contains ! No fission events occur if survival biasing is on -- need to ! calculate fraction of absorptions that would have resulted in ! nu-fission - if (micro_xs(p % event_nuclide) % absorption > ZERO) then + micro_abs = nuc % get_xs(p % g, 'absorption', UVW=p % coord(i) % uvw) + if (micro_abs > ZERO) then score = p % absorb_wgt * & - nuc % get_xs(p % g, 'fission', UVW=p % coord(1) % uvw) / & - nuc % get_xs(p % g, 'absorption', UVW=p % coord(1) % uvw) + nuc % get_xs(p % g, 'fission', UVW=p % coord(i) % uvw) / & + micro_abs else score = ZERO end if @@ -1127,7 +1127,7 @@ contains else if (i_nuclide > 0) then - score = nuc % get_xs(p % g, 'nu_fission', UVW=p % coord(1) % uvw) & + score = nuc % get_xs(p % g, 'nu_fission', UVW=p % coord(i) % uvw) & * atom_density * flux else score = material_xs % nu_fission * flux @@ -1141,10 +1141,10 @@ contains ! No fission events occur if survival biasing is on -- need to ! calculate fraction of absorptions that would have resulted in ! fission scale by kappa-fission - micro_abs = nuc % get_xs(p % g, 'absorption', UVW=p % coord(1) % uvw) + micro_abs = nuc % get_xs(p % g, 'absorption', UVW=p % coord(i) % uvw) if (micro_abs > ZERO) then score = p % absorb_wgt * & - nuc % get_xs(p % g, 'k_fission', UVW=p % coord(1) % uvw) / & + nuc % get_xs(p % g, 'k_fission', UVW=p % coord(i) % uvw) / & micro_abs else score = ZERO @@ -1156,13 +1156,13 @@ contains ! particle's weight entering the collision as the estimate for ! the fission energy production rate score = p % last_wgt * & - nuc % get_xs(p % g, 'k_fission', UVW=p % coord(1) % uvw) / & - nuc % get_xs(p % g, 'absorption', UVW=p % coord(1) % uvw) + nuc % get_xs(p % g, 'k_fission', UVW=p % coord(i) % uvw) / & + nuc % get_xs(p % g, 'absorption', UVW=p % coord(i) % uvw) end if else if (i_nuclide > 0) then - score = nuc % get_xs(p % g, 'k_fission', UVW=p % coord(1) % uvw) & + score = nuc % get_xs(p % g, 'k_fission', UVW=p % coord(i) % uvw) & * atom_density * flux else score = material_xs % kappa_fission * flux @@ -1534,13 +1534,14 @@ contains integer :: i_filter ! index for matching filter bin combination real(8) :: score ! actual score integer :: gout ! energy group of fission bank site + real(8) :: E_out ! save original outgoing energy bin and score index i = t % find_filter(FILTER_ENERGYOUT) bin_energyout = matching_bins(i) ! Get number of energies on filter - n = size(t % filters(i) % int_bins) + n = size(t % filters(i) % real_bins) ! Since the creation of fission sites is weighted such that it is ! expected to create n_particles sites, we need to multiply the @@ -1552,11 +1553,23 @@ contains ! determine score based on bank site weight and keff score = keff * fission_bank(n_bank - p % n_bank + k) % wgt - ! determine outgoing energy from fission bank - gout = fission_bank(n_bank - p % n_bank + k) % g + if (t % energyout_matches_groups) then + ! determine outgoing energy from fission bank + gout = fission_bank(n_bank - p % n_bank + k) % g - ! change outgoing energy bin - matching_bins(i) = gout + ! change outgoing energy bin + matching_bins(i) = gout + else + ! determine outgoing energy from fission bank + E_out = fission_bank(n_bank - p % n_bank + k) % E + + ! check if outgoing energy is within specified range on filter + if (E_out < t % filters(i) % real_bins(1) .or. & + E_out > t % filters(i) % real_bins(n)) cycle + + ! change outgoing energy bin + matching_bins(i) = binary_search(t % filters(i) % real_bins, n, E_out) + end if ! determine scoring index i_filter = sum((matching_bins(1:t%n_filters) - 1) * t % stride) + 1 @@ -2427,8 +2440,8 @@ contains integer :: j integer :: n ! number of bins for single filter integer :: offset ! offset for distribcell - integer :: g ! particle energy group real(8) :: theta, phi ! Polar and Azimuthal Angles, respectively + real(8) :: E type(TallyObject), pointer :: t type(RegularMesh), pointer :: m @@ -2507,34 +2520,55 @@ contains p % surface, i_tally) case (FILTER_ENERGYIN) - ! make sure the correct energy is used - if (t % estimator == ESTIMATOR_TRACKLENGTH) then - g = p % g - else - g = p % last_g - end if - - ! Since all groups are filters, the filter bin is the group - matching_bins(i) = g - - case (FILTER_ENERGYOUT) - ! Since all groups are filters, the filter bin is the group - matching_bins(i) = p % g - - case (FILTER_DELAYEDGROUP) - - if (survival_biasing .and. t % find_filter(FILTER_ENERGYOUT) <= 0) then - matching_bins(i) = 1 - elseif (active_tracklength_tallies % size() > 0) then - matching_bins(i) = 1 - else - if (p % delayed_group == 0) then - matching_bins = NO_BIN_FOUND + if (t % energy_matches_groups) then + ! make sure the correct energy group is used + ! Since all groups are filters, the filter bin is the group + if (t % estimator == ESTIMATOR_TRACKLENGTH) then + matching_bins(i) = p % g else - matching_bins(i) = p % delayed_group + matching_bins(i) = p % last_g + end if + else + ! make sure the correct energy is used + if (t % estimator == ESTIMATOR_TRACKLENGTH) then + E = p % E + else + E = p % last_E + end if + n = t % filters(i) % n_bins + + ! check if energy of the particle is within energy bins + if (E < t % filters(i) % real_bins(1) .or. & + E > t % filters(i) % real_bins(n + 1)) then + matching_bins(i) = NO_BIN_FOUND + else + ! search to find incoming energy bin + matching_bins(i) = binary_search(t % filters(i) % real_bins, & + n + 1, E) end if end if + + case (FILTER_ENERGYOUT) + if (t % energyout_matches_groups) then + ! Since all groups are filters, the filter bin is the group + matching_bins(i) = p % g + else + ! determine outgoing energy bin + n = t % filters(i) % n_bins + + ! check if energy of the particle is within energy bins + if (p % E < t % filters(i) % real_bins(1) .or. & + p % E > t % filters(i) % real_bins(n + 1)) then + matching_bins(i) = NO_BIN_FOUND + else + ! search to find incoming energy bin + matching_bins(i) = binary_search(t % filters(i) % real_bins, & + n + 1, p % E) + end if + end if + + case (FILTER_MU) ! determine mu bin n = t % filters(i) % n_bins diff --git a/src/tally_header.F90 b/src/tally_header.F90 index 01dcd9bdb5..c592f80d70 100644 --- a/src/tally_header.F90 +++ b/src/tally_header.F90 @@ -130,6 +130,10 @@ module tally_header integer :: n_triggers = 0 ! # of triggers type(TriggerObject), allocatable :: triggers(:) ! Array of triggers + ! Multi-Group Specific Information To Enable Rapid Tallying + logical :: energy_matches_groups = .false. + logical :: energyout_matches_groups = .false. + ! Type-Bound procedures contains procedure :: clear => tallyobject_clear ! Deallocates TallyObject From 4561edfac7bfd6ea1a0fc6be5bd06bcbf6e766f5 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 8 Nov 2015 20:21:47 -0500 Subject: [PATCH 027/650] Fixed formatting issues --- src/input_xml.F90 | 50 +++++++++++++++++++++--------------------- src/macroxs_header.F90 | 40 ++++++++++++++++----------------- src/mesh.F90 | 10 ++++----- src/mgxs_data.F90 | 12 +++++----- src/nuclide_header.F90 | 4 ++-- src/physics_mg.F90 | 1 + 6 files changed, 59 insertions(+), 58 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 06e1c154e8..c75886b475 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -1963,8 +1963,8 @@ contains ! Check to ensure material has at least one nuclide if ((.not. check_for_node(node_mat, "nuclide") .and. & - .not. check_for_node(node_mat, "element")) .and. & - (.not. check_for_node(node_mat, "macroscopic"))) then + .not. check_for_node(node_mat, "element")) .and. & + (.not. check_for_node(node_mat, "macroscopic"))) then call fatal_error("No macroscopic data, nuclides or natural elements & &specified on material " // trim(to_str(mat % id))) end if @@ -2001,7 +2001,7 @@ contains ! store full name call get_node_value(node_nuc, "name", temp_str) if (check_for_node(node_nuc, "xs")) & - call get_node_value(node_nuc, "xs", name) + call get_node_value(node_nuc, "xs", name) name = trim(temp_str) // "." // trim(name) name = to_lower(name) @@ -2014,7 +2014,7 @@ contains call list_density % append(ONE) else call fatal_error("Units can only be macro for macroscopic data " & - &// trim(name)) + &// trim(name)) end if else @@ -2045,7 +2045,7 @@ contains ! store full name call get_node_value(node_nuc, "name", temp_str) if (check_for_node(node_nuc, "xs")) & - call get_node_value(node_nuc, "xs", name) + call get_node_value(node_nuc, "xs", name) name = trim(temp_str) // "." // trim(name) name = to_lower(name) @@ -2058,7 +2058,7 @@ contains call list_density % append(ONE) else if (.not.check_for_node(node_nuc, "ao") .and. & - .not.check_for_node(node_nuc, "wo")) then + .not.check_for_node(node_nuc, "wo")) then call fatal_error("No atom or weight percent specified for nuclide " & &// trim(name)) elseif (check_for_node(node_nuc, "ao") .and. & @@ -2572,7 +2572,7 @@ contains ! If in MG mode, fail if user provides bins, as we are only ! allowing for all groups if (.not. run_CE .and. (temp_str == 'energy' .or. & - temp_str == 'energyout')) then + temp_str == 'energyout')) then call fatal_error("No energy or energyout bins needed on tally " & &// trim(to_str(t % id))) else @@ -4360,9 +4360,9 @@ contains ! Check if cross_sections.xml exists inquire(FILE=path_cross_sections, EXIST=file_exists) if (.not. file_exists) then - ! Could not find cross_sections.xml file - call fatal_error("Cross sections XML file '" & - &// trim(path_cross_sections) // "' does not exist!") + ! Could not find cross_sections.xml file + call fatal_error("Cross sections XML file '" & + &// trim(path_cross_sections) // "' does not exist!") end if call write_message("Reading cross sections XML file...", 5) @@ -4371,18 +4371,18 @@ contains call open_xmldoc(doc, path_cross_sections) if (check_for_node(doc, "groups")) then - ! Get neutron group count - call get_node_value(doc, "groups", energy_groups) + ! Get neutron group count + call get_node_value(doc, "groups", energy_groups) else - call fatal_error("groups element must exist!") + call fatal_error("groups element must exist!") end if allocate(energy_bins(energy_groups + 1)) if (check_for_node(doc, "group_structure")) then - ! Get neutron group structure - call get_node_array(doc, "group_structure", energy_bins) + ! Get neutron group structure + call get_node_array(doc, "group_structure", energy_bins) else - call fatal_error("group_structures element must exist!") + call fatal_error("group_structures element must exist!") end if allocate(energy_bin_avg(energy_groups)) @@ -4396,10 +4396,10 @@ contains ! Allocate xs_listings array if (n_listings == 0) then - call fatal_error("No XSDATA listings present in cross_sections.xml & - &file!") + call fatal_error("No XSDATA listings present in cross_sections.xml & + &file!") else - allocate(xs_listings(n_listings)) + allocate(xs_listings(n_listings)) end if do i = 1, n_listings @@ -4413,7 +4413,7 @@ contains listing % name = to_lower(listing % name) listing % alias = listing % name if (check_for_node(node_xsdata, "alias")) & - call get_node_value(node_xsdata, "alias", listing % alias) + call get_node_value(node_xsdata, "alias", listing % alias) listing % alias = to_lower(listing % alias) if (check_for_node(node_xsdata, "zaid")) then call get_node_value(node_xsdata, "zaid", listing % zaid) @@ -4421,7 +4421,7 @@ contains listing % zaid = 100 end if if (check_for_node(node_xsdata, "kT")) & - call get_node_value(node_xsdata, "kT", listing % kT) + call get_node_value(node_xsdata, "kT", listing % kT) if (check_for_node(node_xsdata, "awr")) then call get_node_value(node_xsdata, "awr", listing % awr) else @@ -4430,12 +4430,12 @@ contains ! determine type of cross section if (ends_with(listing % name, 'c')) then - listing % type = NEUTRON + listing % type = NEUTRON end if - ! create dictionary entry for both name and alias - call xs_listing_dict % add_key(to_lower(listing % name), i) - call xs_listing_dict % add_key(to_lower(listing % alias), i) + ! create dictionary entry for both name and alias + call xs_listing_dict % add_key(to_lower(listing % name), i) + call xs_listing_dict % add_key(to_lower(listing % alias), i) end do ! Close cross sections XML file diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index 602db4a3b6..b2d9a5fde6 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -249,16 +249,16 @@ contains do gin = 1, groups do gout = 1, groups this % chi(gout,gin) = this % chi(gout,gin) + atom_density * & - nuc % chi(gout) * nuc % nu_fission(gin,1) + nuc % chi(gout) * nuc % nu_fission(gin,1) end do end do this % nu_fission = this % nu_fission + atom_density * & - nuc % nu_fission(:,1) + nuc % nu_fission(:,1) else this % chi = this % chi + atom_density * nuc % nu_fission do gin = 1, groups this % nu_fission(gin) = this % nu_fission(gin) + atom_density * & - sum(nuc % nu_fission(:,gin)) + sum(nuc % nu_fission(:,gin)) end do end if this % fission = this % fission + atom_density * nuc % fission @@ -273,33 +273,33 @@ contains if (scatt_type == ANGLE_HISTOGRAM .or. scatt_type == ANGLE_TABULAR) then ! Transfer matrix temp_energy(gout,gin) = temp_energy(gout,gin) + atom_density * & - sum(nuc % scatter(gout,gin,:)) + sum(nuc % scatter(gout,gin,:)) ! Determine the angular distribution do imu = 1, order scatt_coeffs(imu, gout, gin) = scatt_coeffs(imu, gout, gin) + & - nuc % scatter(gout,gin,imu) * & - atom_density + nuc % scatter(gout,gin,imu) * & + atom_density end do else if (scatt_type == ANGLE_LEGENDRE) then ! Transfer matrix temp_energy(gout,gin) = temp_energy(gout,gin) + atom_density * & - nuc % scatter(gout,gin,1) + nuc % scatter(gout,gin,1) ! Determine the angular distribution coefficients so we can later ! expand do the complete distribution do l = 1, min(nuc % order, order) + 1 scatt_coeffs(l, gout, gin) = scatt_coeffs(l, gout, gin) + & - nuc % scatter(gout,gin,l) * & - atom_density + nuc % scatter(gout,gin,l) * & + atom_density end do end if ! Multiplicity matrix temp_mult(gout,gin) = temp_mult(gout,gin) + atom_density * & - nuc % mult(gout,gin) + nuc % mult(gout,gin) end do end do type is (Nuclide_Angle) @@ -530,16 +530,16 @@ contains do gin = 1, groups do gout = 1, groups this % chi(gout,gin,:,:) = this % chi(gout,gin,:,:) + atom_density * & - nuc % chi(gout,:,:) * nuc % nu_fission(gin,1,:,:) + nuc % chi(gout,:,:) * nuc % nu_fission(gin,1,:,:) end do end do this % nu_fission = this % nu_fission + atom_density * & - nuc % nu_fission(:,1,:,:) + nuc % nu_fission(:,1,:,:) else this % chi = this % chi + atom_density * nuc % nu_fission do gin = 1, groups this % nu_fission(gin,:,:) = this % nu_fission(gin,:,:) + atom_density * & - sum(nuc % nu_fission(:,gin,:,:),dim=1) + sum(nuc % nu_fission(:,gin,:,:),dim=1) end do end if this % fission = this % fission + atom_density * nuc % fission @@ -554,31 +554,31 @@ contains if (scatt_type == ANGLE_HISTOGRAM .or. scatt_type == ANGLE_TABULAR) then ! Transfer matrix temp_energy(gout,gin,:,:) = temp_energy(gout,gin,:,:) + atom_density * & - sum(nuc % scatter(gout,gin,:,:,:),dim=1) + sum(nuc % scatter(gout,gin,:,:,:),dim=1) ! Determine the angular distribution do imu = 1, order scatt_coeffs(imu,gout,gin,:,:) = scatt_coeffs(imu,gout,gin,:,:) + & - nuc % scatter(gout,gin,imu,:,:) * & - atom_density + nuc % scatter(gout,gin,imu,:,:) * & + atom_density end do else if (scatt_type == ANGLE_LEGENDRE) then ! Transfer matrix temp_energy(gout,gin,:,:) = temp_energy(gout,gin,:,:) + atom_density * & - nuc % scatter(gout,gin,1,:,:) + nuc % scatter(gout,gin,1,:,:) ! Determine the angular distribution coefficients so we can later ! expand do the complete distribution do l = 1, min(nuc % order, order) + 1 scatt_coeffs(l, gout, gin,:,:) = scatt_coeffs(l, gout, gin,:,:) + & - nuc % scatter(gout,gin,l,:,:) * & - atom_density + nuc % scatter(gout,gin,l,:,:) * & + atom_density end do end if ! Multiplicity matrix temp_mult(gout,gin,:,:) = temp_mult(gout,gin,:,:) + atom_density * & - nuc % mult(gout,gin,:,:) + nuc % mult(gout,gin,:,:) end do end do end select diff --git a/src/mesh.F90 b/src/mesh.F90 index 9cb8dc5969..3704b9602c 100644 --- a/src/mesh.F90 +++ b/src/mesh.F90 @@ -163,12 +163,12 @@ contains sites_outside) type(RegularMesh), pointer :: m ! mesh to count sites - type(Bank), intent(in) :: bank_array(:) ! fission or source bank - real(8), intent(out) :: cnt(:,:,:,:) ! weight of sites in each + type(Bank), intent(in) :: bank_array(:) ! fission or source bank + real(8), intent(out) :: cnt(:,:,:,:) ! weight of sites in each ! cell and energy group - real(8), optional :: energies(:) ! energy grid to search - integer(8), optional :: size_bank ! # of bank sites (on each proc) - logical, optional :: sites_outside ! were there sites outside mesh? + real(8), optional :: energies(:) ! energy grid to search + integer(8), optional :: size_bank ! # of bank sites (on each proc) + logical, optional :: sites_outside ! were there sites outside mesh? integer :: i ! loop index for local fission sites integer :: n_sites ! size of bank array diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index c9830f8d0f..b89c73d51a 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -43,9 +43,9 @@ contains ! Check if cross_sections.xml exists inquire(FILE=path_cross_sections, EXIST=file_exists) if (.not. file_exists) then - ! Could not find cross_sections.xml file - call fatal_error("Cross sections XML file '" & - &// trim(path_cross_sections) // "' does not exist!") + ! Could not find cross_sections.xml file + call fatal_error("Cross sections XML file '" & + &// trim(path_cross_sections) // "' does not exist!") end if call write_message("Loading Cross Section Data...", 5) @@ -73,7 +73,7 @@ contains end if end do if (get_kfiss) & - exit + exit end do ! ========================================================================== @@ -265,7 +265,7 @@ contains this % legendre_mu_points = 33 end if if (enable_leg_mu .and. & - check_for_node(node_legendre_mu, "num_points")) then + check_for_node(node_legendre_mu, "num_points")) then call get_node_value(node_legendre_mu, "num_points", & this % legendre_mu_points) if (this % legendre_mu_points <= 0) then @@ -644,7 +644,7 @@ contains end if end do if (get_kfiss) & - exit + exit end do allocate(macro_xs(n_materials)) diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index ad143facb9..7786537db5 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -374,7 +374,7 @@ module nuclide_header if (allocated(this % k_fission)) then deallocate(this % k_fission) end if - if (allocated(this % chi)) then + if (allocated(this % chi)) then deallocate(this % chi) end if if (allocated(this % mult)) then @@ -400,7 +400,7 @@ module nuclide_header if (allocated(this % k_fission)) then deallocate(this % k_fission) end if - if (allocated(this % chi)) then + if (allocated(this % chi)) then deallocate(this % chi) end if diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index 38e144e625..a63b1ce134 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -33,6 +33,7 @@ contains ! Store pre-collision particle properties p % last_wgt = p % wgt p % last_g = p % g + p % last_E = p % E p % last_uvw = p % coord(1) % uvw ! Add to collision counter for particle From 6ca9949a915e9c4b25784b36b6cea55fe8d7f4de Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Tue, 10 Nov 2015 04:54:35 -0500 Subject: [PATCH 028/650] Updated docs to reflect MG usage, though I still have to add the MGXS data format somewhere. Corrected ace.F90 typo pointed out by @samuelshaner --- docs/source/index.rst | 7 +- docs/source/usersguide/beginners.rst | 2 +- docs/source/usersguide/input.rst | 112 ++++++++++++++++++++++++--- docs/source/usersguide/install.rst | 26 +++++-- examples/xml/c5g7/2d/cmfd.xml | 11 +-- examples/xml/c5g7/2d/settings.xml | 2 +- src/ace.F90 | 2 +- src/input_xml.F90 | 2 +- 8 files changed, 131 insertions(+), 33 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 8dba920161..54ba825e58 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -4,9 +4,10 @@ The OpenMC Monte Carlo Code OpenMC is a Monte Carlo particle transport simulation code focused on neutron criticality calculations. It is capable of simulating 3D models based on -constructive solid geometry with second-order surfaces. The particle interaction -data is based on ACE format cross sections, also used in the MCNP and Serpent -Monte Carlo codes. +constructive solid geometry with second-order surfaces. OpenMC supports either +continuous-energy or multi-group transport. The continuous-energy +particle interaction data is based on ACE format cross sections, also used +in the MCNP and Serpent Monte Carlo codes. OpenMC was originally developed by members of the `Computational Reactor Physics Group`_ at the `Massachusetts Institute of Technology`_ starting diff --git a/docs/source/usersguide/beginners.rst b/docs/source/usersguide/beginners.rst index d65ee1f831..9ecffe3f67 100644 --- a/docs/source/usersguide/beginners.rst +++ b/docs/source/usersguide/beginners.rst @@ -12,7 +12,7 @@ In a nutshell, OpenMC simulates neutrons moving around randomly in a `nuclear reactor`_ (or other fissile system). This is what's known as `Monte Carlo`_ simulation. Neutrons are important in nuclear reactors because they are the particles that induce `fission`_ in uranium and other nuclides. Knowing the -behavior of neutrons allows you to figure out how often and where fission +behavior of neutrons allows you to determine how often and where fission occurs. The amount of energy released is then directly proportional to the fission reaction rate since most heat is produced by fission. By simulating many neutrons (millions or billions), it is possible to determine the average diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index d05dcdf71b..3e7a6ec174 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -114,7 +114,8 @@ The ```` element has no attributes and simply indicates the path to an XML cross section listing file (usually named cross_sections.xml). If this element is absent from the settings.xml file, the :envvar:`CROSS_SECTIONS` environment variable will be used to find the path to the XML cross section -listing. +listing when in continuous-energy mode, and the :envvar:`MG_CROSS_SECTIONS` +environment variable will be used in multi-group mode. ```` Element -------------------- @@ -212,8 +213,21 @@ cross section values between. *Default*: logarithm + .. note:: This element is not used in the multi-group :ref:`energy_mode`. + .. _LA-UR-14-24530: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/la-ur-14-24530.pdf +.. _energy_mode: + +```` Element +------------------------- + +The ```` element tells OpenMC if the run-mode should be +continuous-energy or multi-group. Options for entry are: ``continuous-energy`` +or ``multi-group``. + + *Default*: continuous-energy + ```` Element --------------------- @@ -264,6 +278,20 @@ based on the recommended value in LA-UR-14-24530_. *Default*: 8000 + .. note:: This element is not used in the multi-group :ref:`energy_mode`. + +```` Element +--------------------------- + +The ```` element allows the user to set a maximum scattering order +to apply to every nuclide/material in the problem. That is, if the data +library has :math:`P_3` data available, but ```` was set to ``1``, +then, OpenMC will only use up to the :math:`P_1` data. + + *Default*: Use the maximum order in the data library + + .. note:: This element is not used in the continuous-energy :ref:`energy_mode`. + .. _natural_elements: ```` Element @@ -343,6 +371,8 @@ or sub-elements and can be set to either "false" or "true". *Default*: true + .. note:: This element is not used in the multi-group :ref:`energy_mode`. + ```` Element ---------------------------------- @@ -402,6 +432,8 @@ attributes or sub-elements: *Defaults*: None (scatterer), ARES (method), 0.01 eV (E_min), 1.0 keV (E_max) + .. note:: This element is not used in the multi-group :ref:`energy_mode`. + ```` Element ---------------------- @@ -514,6 +546,8 @@ attributes/sub-elements: *Default*: 0.988 2.249 + .. note:: The above format should be used even when using the multi-group :ref:`energy_mode`. + :write_initial: An element specifying whether to write out the initial source bank used at the beginning of the first batch. The output file is named @@ -1113,10 +1147,15 @@ Each ``material`` element can have the following attributes or sub-elements: :density: An element with attributes/sub-elements called ``value`` and ``units``. The ``value`` attribute is the numeric value of the density while the ``units`` - can be "g/cm3", "kg/m3", "atom/b-cm", "atom/cm3", or "sum". The "sum" unit - indicates that the density should be calculated as the sum of the atom - fractions for each nuclide in the material. This should not be used in - conjunction with weight percents. + can be "g/cm3", "kg/m3", "atom/b-cm", "atom/cm3", "sum", or "macro". + The "sum" unit indicates that the density should be calculated as the sum + of the atom fractions for each nuclide in the material. This should not be + used in conjunction with weight percents. The "macro" unit is used with + a ``macroscopic`` to indicate that the density is already included in the + library and thus not needed here. However, if a value is provided for the + ``value``, then this is treated as a number density multiplier on the + macroscopic cross sections in the multi-group data. This can be used, + for example, when perturbing the density slightly. *Default*: None @@ -1171,6 +1210,24 @@ Each ``material`` element can have the following attributes or sub-elements: *Default*: None + :macroscopic: + The ``macroscopic`` element is similar to the ``nuclide`` element, but, + recognizes that some multi-group libraries may be providing material + specific macroscopic cross sections instead of always providing nuclide + specific data like in the continuous-energy case. To that end, the + macroscopic element has attributes/sub-elements called ``name``, and ``xs``. + The ``name`` attribute is the name of the cross-section for a + desired nuclide while the ``xs`` attribute is the cross-section + identifier. One example would be as follows: + + .. code-block:: xml + + + + .. note:: This element is not used in the multi-group :ref:`energy_mode`. + + *Default*: None + .. _IUPAC Isotopic Compositions of the Elements 2009: http://pac.iupac.org/publications/pac/pdf/2011/pdf/8302x0397.pdf @@ -1257,7 +1314,8 @@ The ```` element accepts the following sub-elements: A list of universes for which the tally should be accumulated. :energy: - A monotonically increasing list of bounding **pre-collision** energies + In continuous-energy mode, this filter should be provided as a + monotonically increasing list of bounding **pre-collision** energies for a number of groups. For example, if this filter is specified as .. code-block:: xml @@ -1267,17 +1325,40 @@ The ```` element accepts the following sub-elements: then two energy bins will be created, one with energies between 0 and 1 MeV and the other with energies between 1 and 20 MeV. + In multi-group mode, however, the bounds of the filter are already + implied as being the same as the group boundaries of the problem. + Therefore no bins would be needed as they are implicitly applied by + the code. For example, the above filter example for continuous-energy + mode would look like the following for multi-group mode, but the + resultant tallies would still be done for every group in the library: + + .. code-block:: xml + + + :energyout: - A monotonically increasing list of bounding **post-collision** - energies for a number of groups. For example, if this filter is - specified as + In continuous-energy mode, this filter should be provided as a + monotonically increasing list of bounding **post-collision** energies + for a number of groups. For example, if this filter is specified as .. code-block:: xml - then two post-collision energy bins will be created, one with energies - between 0 and 1 MeV and the other with energies between 1 and 20 MeV. + then two post-collision energy bins will be created, one with + energies between 0 and 1 MeV and the other with energies between + 1 and 20 MeV. + + In multi-group mode, however, the bounds of the filter are already + implied as being the same as the group boundaries of the problem. + Therefore no bins would be needed as they are implicitly applied by + the code. For example, the above filter example for continuous-energy + mode would look like the following for multi-group mode, but the + resultant tallies would still be done for every group in the library: + + .. code-block:: xml + + :mu: A monotonically increasing list of bounding **post-collision** cosines @@ -1361,6 +1442,8 @@ The ```` element accepts the following sub-elements: + .. note:: This filter type is not used in the multi-group :ref:`energy_mode`. + :nuclides: If specified, the scores listed will be for particular nuclides, not the summation of reactions from all nuclides. The format for nuclides should be @@ -1424,6 +1507,8 @@ The ```` element accepts the following sub-elements: Total production of delayed neutrons due to fission. Units are neutrons produced per source neutron. + .. note:: This score type is not used in the multi-group :ref:`energy_mode`. + :kappa-fission: The recoverable energy production rate due to fission. The recoverable energy is defined as the fission product kinetic energy, prompt and @@ -1494,6 +1579,8 @@ The ```` element accepts the following sub-elements: The ``analog`` estimator is actually identical to the ``collision`` estimator for the inverse-velocity score. + .. note:: This score type is not used in the multi-group :ref:`energy_mode`. + :events: Number of scoring events. Units are events per source particle. @@ -1871,6 +1958,9 @@ attributes/sub-elements: automatically assumes a one energy group calculation over the entire energy range. + .. note:: When running in the multi-group :ref:`energy_mode`, these + energy bins must match the data library's group boundaries. + :albedo: Surface ratio of incoming to outgoing partial currents on global boundary conditions. They are listed in the following order: -x +x -y +y -z +z. diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst index dcf990bdad..246e343c1e 100644 --- a/docs/source/usersguide/install.rst +++ b/docs/source/usersguide/install.rst @@ -366,11 +366,17 @@ Cross Section Configuration --------------------------- In order to run a simulation with OpenMC, you will need cross section data for -each nuclide in your problem. Since OpenMC uses ACE format cross sections, you -can use nuclear data that was processed with NJOY_, such as that distributed -with MCNP_ or Serpent_. Several sources provide free processed ACE data as -described below. The TALYS-based evaluated nuclear data library, TENDL_, is also -openly available in ACE format. +each nuclide or material in your problem. OpenMC can be run in +continuous-energy or multi-group mode. + +In continuous-energy mode OpenMC uses ACE format cross sections; in this case +you can use nuclear data that was processed with NJOY_, such as that +distributed with MCNP_ or Serpent_. Several sources provide free processed +ACE data as described below. The TALYS-based evaluated nuclear data library, +TENDL_, is also openly available in ACE format. + +In multi-group mode, OpenMC utilizes an XML-based library format which can be +used to describe nuclidic- or material-specific quantities. Using ENDF/B-VII.1 Cross Sections from NNDC ------------------------------------------- @@ -435,6 +441,16 @@ distribution to the location of the Serpent cross sections. Then, either set the environment variable to the absolute path of the ``cross_sections_serpent.xml`` file. +Using Multi-Group Cross Sections +-------------------------------- + +Multi-group cross section libraries are generally tailored to the specific +calculation to be performed. Therefore, at this point in time, OpenMC is not +distributed with any pre-existing multi-group cross section libraries. +However, if the user has obtained or generated their own library, the user +should set the :envvar:`MG_CROSS_SECTIONS` environment variable +to the absolute path of the file library expected to used most frequently. + .. _NJOY: http://t2.lanl.gov/nis/codes.shtml .. _NNDC: http://www.nndc.bnl.gov/endf/b7.1/acefiles.html .. _NEA: http://www.oecd-nea.org diff --git a/examples/xml/c5g7/2d/cmfd.xml b/examples/xml/c5g7/2d/cmfd.xml index aa3deb4b67..8e8d77490c 100644 --- a/examples/xml/c5g7/2d/cmfd.xml +++ b/examples/xml/c5g7/2d/cmfd.xml @@ -1,21 +1,12 @@ - 2 + 10 true 0.0 0.0 -100.0 64.26 64.26 100.0 6 6 1 - - - 2 2 2 2 1 1 - 2 2 2 2 1 1 - 2 2 2 2 1 1 - 2 2 2 2 1 1 - 1 1 1 1 1 1 - 1 1 1 1 1 1 - 1 0 0 1 1 1 diff --git a/examples/xml/c5g7/2d/settings.xml b/examples/xml/c5g7/2d/settings.xml index 2ad738704a..038c80c303 100644 --- a/examples/xml/c5g7/2d/settings.xml +++ b/examples/xml/c5g7/2d/settings.xml @@ -8,7 +8,7 @@ 2000 500 - 1000 + 10000 - 2000 - 500 + 100 + 10 1000 diff --git a/openmc/__init__.py b/openmc/__init__.py index 397d9f3e27..5bdc3f089a 100644 --- a/openmc/__init__.py +++ b/openmc/__init__.py @@ -1,11 +1,13 @@ from openmc.element import * from openmc.geometry import * from openmc.nuclide import * +from openmc.macroscopic import * from openmc.material import * from openmc.plots import * from openmc.settings import * from openmc.surface import * from openmc.universe import * +from openmc.mgxs_library import * from openmc.mesh import * from openmc.filter import * from openmc.trigger import * diff --git a/openmc/checkvalue.py b/openmc/checkvalue.py index 787052f5d6..303f784078 100644 --- a/openmc/checkvalue.py +++ b/openmc/checkvalue.py @@ -127,7 +127,7 @@ def check_iterable_type(name, value, expected_type, min_depth=1, max_depth=1): # But first, have we exceeded the max depth? if len(tree) > max_depth: msg = 'Error setting {0}: Found an iterable at {1}, items '\ - 'in that iterable excceed the maximum depth of {2}' \ + 'in that iterable exceed the maximum depth of {2}' \ .format(name, ind_str, max_depth) raise ValueError(msg) diff --git a/openmc/material.py b/openmc/material.py index b8d13eb979..4ccc9485e0 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -325,17 +325,16 @@ class Material(object): """ - # Ensureno nuclides, elements, or sab are added since these would be + # Ensure no nuclides, elements, or sab are added since these would be # incompatible with macroscopics - if (not self._nuclides) and (not self._elements) and (not self._sab): + if ((len(self._nuclides.keys()) != 0) and + (len(self._elements.keys()) != 0) and (len(self._sab) != 0)): msg = 'Unable to add a Macroscopic data set to Material ID="{0}" ' \ 'with a macroscopic value "{1}" as an incompatible data ' \ 'member (i.e., nuclide, element, or S(a,b) table) ' \ 'has already been added'.format(self._id, macroscopic) raise ValueError(msg) - - if not isinstance(macroscopic, (openmc.Macroscopic, str)): msg = 'Unable to add a Macroscopic to Material ID="{0}" with a ' \ 'non-Macroscopic value "{1}"'.format(self._id, macroscopic) @@ -348,7 +347,7 @@ class Material(object): else: macroscopic = openmc.Macroscopic(macroscopic) - if self._macroscopic is not None: + if self._macroscopic is None: self._macroscopic = macroscopic else: msg = 'Unable to add a Macroscopic to Material ID="{0}", ' \ @@ -577,7 +576,7 @@ class Material(object): element.append(subelement) else: # Create macroscopic XML subelements - subelement = self._get_macroscopic_xml(self, self._macroscopic) + subelement = self._get_macroscopic_xml(self._macroscopic) element.append(subelement) else: diff --git a/openmc/mgxs/groups.py b/openmc/mgxs/groups.py index 3436c0e037..e6838b36ba 100644 --- a/openmc/mgxs/groups.py +++ b/openmc/mgxs/groups.py @@ -54,7 +54,7 @@ class EnergyGroups(object): def __eq__(self, other): if not isinstance(other, EnergyGroups): return False - elif self.group_edges != other.group_edges: + elif (self.group_edges != other.group_edges).all(): return False else: return True diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 70023c2c89..282997983b 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -10,7 +10,8 @@ import numpy as np import openmc from openmc.mgxs import EnergyGroups -from openmc.checkvalue import check_type, check_value, check_greater_than +from openmc.checkvalue import check_type, check_value, check_greater_than, \ + check_iterable_type from openmc.clean_xml import * # MGXS Representations supported by OpenMC @@ -114,6 +115,7 @@ class Xsdata(object): self._nu_fission = None self._k_fission = None self._chi = None + self._use_chi = None @property def name(self): @@ -123,6 +125,11 @@ class Xsdata(object): def energy_groups(self): return self._energy_groups + @property + def representation(self): + return self._representation + + @property def alias(self): return self._alias @@ -202,7 +209,9 @@ class Xsdata(object): check_type("energy_groups", energy_groups, EnergyGroups) # Check that there is one or more groups - if (energy_groups.num_energy_groups.num_group is None) or (energy_groups.num_energy_groups.num_group < 1): + if ((energy_groups.num_energy_groups.num_group is None) or + (energy_groups.num_energy_groups.num_group < 1)): + msg = 'energy_groups object incorrectly initialized.' raise ValueError(msg) @@ -262,13 +271,15 @@ class Xsdata(object): num_points = 33 self._tabular_legendre = {'enable': enable, 'num_points': num_points} - @num_polar.setter(self, num_polar): + @num_polar.setter + def num_polar(self, num_polar): # Make sure we have positive ints check_value("num_polar", num_polar, Integral) check_greater_than("num_polar", num_polar, 0) self._num_polar = num_polar - @num_azimuthal.setter(self, num_azimuthal): + @num_azimuthal.setter + def num_azimuthal(self, num_azimuthal): check_value("num_azimuthal", num_azimuthal, Integral) check_greater_than("num_azimuthal", num_azimuthal, 0) self._num_azimuthal = num_azimuthal @@ -276,10 +287,10 @@ class Xsdata(object): @total.setter def total(self, total): if self._representation is 'isotropic': - shape = (self._energy_groups.num_group) + shape = (self._energy_groups.num_groups,) elif self._representation is 'angle': shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_group) + self._energy_groups.num_groups) # check we have a numpy list check_type("total", total, np.ndarray, expected_iter_type=Real) if total.shape == shape: @@ -292,10 +303,10 @@ class Xsdata(object): @absorption.setter def absorption(self, absorption): if self._representation is 'isotropic': - shape = (self._energy_groups.num_group) + shape = (self._energy_groups.num_groups,) elif self._representation is 'angle': shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_group) + self._energy_groups.num_groups) # check we have a numpy list check_type("absorption", absorption, np.ndarray, expected_iter_type=Real) if absorption.shape == shape: @@ -308,10 +319,10 @@ class Xsdata(object): @fission.setter def fission(self, fission): if self._representation is 'isotropic': - shape = (self._energy_groups.num_group) + shape = (self._energy_groups.num_groups,) elif self._representation is 'angle': shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_group) + self._energy_groups.num_groups) # check we have a numpy list check_type("fission", fission, np.ndarray, expected_iter_type=Real) if fission.shape == shape: @@ -326,10 +337,10 @@ class Xsdata(object): @k_fission.setter def k_fission(self, k_fission): if self._representation is 'isotropic': - shape = (self._energy_groups.num_group) + shape = (self._energy_groups.num_groups,) elif self._representation is 'angle': shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_group) + self._energy_groups.num_groups) # check we have a numpy list check_type("k_fission", k_fission, np.ndarray, expected_iter_type=Real) if k_fission.shape == shape: @@ -343,14 +354,14 @@ class Xsdata(object): @chi.setter def chi(self, chi): - if self._use_chi is not None: + if not self._use_chi: msg = 'Providing chi when nu_fission already provided as matrix!' raise ValueError(msg) if self._representation is 'isotropic': - shape = (self._energy_groups.num_group) + shape = (self._energy_groups.num_groups,) elif self._representation is 'angle': shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_group) + self._energy_groups.num_groups) # check we have a numpy list check_type("chi", chi, np.ndarray, expected_iter_type=Real) if chi.shape == shape: @@ -365,14 +376,17 @@ class Xsdata(object): @scatter.setter def scatter(self, scatter): if self._representation is 'isotropic': - shape = (self.num_orders, self._energy_groups.num_group, - self._energy_groups.num_group) + shape = (self.num_orders, self._energy_groups.num_groups, + self._energy_groups.num_groups) + max_depth = 3 elif self._representation is 'angle': shape = (self._num_polar, self._num_azimuthal, self.num_orders, - self._energy_groups.num_group, - self._energy_groups.num_group) + self._energy_groups.num_groups, + self._energy_groups.num_groups) + max_depth = 5 # check we have a numpy list - check_type("scatter", scatter, np.ndarray, expected_iter_type=Real) + check_iterable_type("scatter", scatter, expected_type=Real, + max_depth=max_depth) if scatter.shape == shape: self._scatter = np.copy(scatter) else: @@ -384,14 +398,16 @@ class Xsdata(object): def multiplicity(self, multiplicity): if self._representation is 'isotropic': shape = (self._energy_groups.num_group, - self._energy_groups.num_group) + self._energy_groups.num_groups) + max_depth = 2 elif self._representation is 'angle': shape = (self._num_polar, self._num_azimuthal, self._energy_groups.num_group, - self._energy_groups.num_group) + self._energy_groups.num_groups) + max_depth = 4 # check we have a numpy list - check_type("multiplicity", multiplicity, np.ndarray, - expected_iter_type=Real) + check_iterable_type("multiplicity", multiplicity, expected_type=Real, + max_depth=max_depth) if multiplicity.shape == shape: self._multiplicity = np.copy(multiplicity) else: @@ -411,15 +427,15 @@ class Xsdata(object): # First lets set our dimensions here since they get used repeatedly # throughout this code. if self._representation is 'isotropic': - shape_vec = (self._energy_groups.num_group) - shape_mat = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_group) + shape_vec = (self._energy_groups.num_groups,) + shape_mat = (self._energy_groups.num_groups, + self._energy_groups.num_groups) elif self._representation is 'angle': shape_vec = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_group) + self._energy_groups.num_groups) shape_mat = (self._num_polar, self._num_azimuthal, self._energy_groups.num_group, - self._energy_groups.num_group) + self._energy_groups.num_groups) # Begin by checking the case when chi has already been given and thus # the rules for filling in nu_fission are set. @@ -428,7 +444,7 @@ class Xsdata(object): shape = shape_vec else: shape = shape_mat - if nu_fission.shape /= shape: + if nu_fission.shape != shape: msg = "Invalid Shape of Nu_fission!" raise ValueError(msg) else: @@ -436,7 +452,7 @@ class Xsdata(object): if nu_fission.shape == shape_vec: self._use_chi = True shape = shape_vec - elif nu_fission.shape = shape_mat: + elif nu_fission.shape == shape_mat: self._use_chi = False shape = shape_mat else: @@ -449,77 +465,77 @@ class Xsdata(object): def _get_xsdata_xml(self): element = ET.Element("xsdata") - element.set("name", xsdata._name) + element.set("name", self._name) - if xsdata._alias is not None: + if self._alias is not None: subelement = ET.SubElement(element, 'alias') - subelement.text(xsdata.alias) + subelement.text = self.alias - if xsdata._kT is not None: + if self._kT is not None: subelement = ET.SubElement(element, 'kT') - subelement.text(str(self._kT)) + subelement.text = str(self._kT) - if xsdata._fissionable is not None: + if self._fissionable is not None: subelement = ET.SubElement(element, 'fissionable') - subelement.text(str(self._fissionable)) + subelement.text = str(self._fissionable) - if xsdata._representation is not None: + if self._representation is not None: subelement = ET.SubElement(element, 'representation') - subelement.text(self._representation) + subelement.text = self._representation - if xsdata._representation == 'angle': - if xsdata._num_azimuthal is not None: + if self._representation == 'angle': + if self._num_azimuthal is not None: subelement = ET.SubElement(element, 'num_azimuthal') - subelement.text(str(self._num_azimuthal)) - if xsdata._num_polar is not None: + subelement.text = str(self._num_azimuthal) + if self._num_polar is not None: subelement = ET.SubElement(element, 'num_polar') - subelement.text(str(self._num_polar)) + subelement.text = str(self._num_polar) - if xsdata._scatt_type is not None: + if self._scatt_type is not None: subelement = ET.SubElement(element, 'scatt_type') - subelement.text(self._scatt_type) + subelement.text = self._scatt_type - if xsdata._order is not None: + if self._order is not None: subelement = ET.SubElement(element, 'order') - subelement.text(str(self._order)) + subelement.text = str(self._order) - if xsdata._tabular_legendre is not None: + if self._tabular_legendre is not None: subelement = ET.SubElement(element, 'tabular_legendre') - subelement.set('enable', str(xsdata._tabular_legendre['enable'])) - subelement.set('num_points', str(xsdata._tabular_legendre['num_points'])) + subelement.set('enable', str(self._tabular_legendre['enable'])) + subelement.set('num_points', str(self._tabular_legendre['num_points'])) if self._total is not None: subelement = ET.SubElement(element, 'total') - subelement.text(ndarray_to_string(self._total)) + subelement.text = ndarray_to_string(self._total) if self._absorption is not None: subelement = ET.SubElement(element, 'absorption') - subelement.text(ndarray_to_string(self._absorption)) + subelement.text = ndarray_to_string(self._absorption) if self._scatter is not None: subelement = ET.SubElement(element, 'scatter') - subelement.text(ndarray_to_string(self._scatter)) + subelement.text = ndarray_to_string(self._scatter) if self._multiplicity is not None: subelement = ET.SubElement(element, 'multiplicity') - subelement.text(ndarray_to_string(self._multiplicity)) + subelement.text = ndarray_to_string(self._multiplicity) if self._fissionable: if self._fission is not None: subelement = ET.SubElement(element, 'fission') - subelement.text(ndarray_to_string(self._fission)) + subelement.text = ndarray_to_string(self._fission) if self._k_fission is not None: subelement = ET.SubElement(element, 'k_fission') - subelement.text(ndarray_to_string(self._k_fission)) + subelement.text = ndarray_to_string(self._k_fission) if self._nu_fission is not None: subelement = ET.SubElement(element, 'nu_fission') - subelement.text(ndarray_to_string(self._nu_fission)) + subelement.text = ndarray_to_string(self._nu_fission) if self._chi is not None: subelement = ET.SubElement(element, 'chi') - subelement.text(ndarray_to_string(self._chi)) + subelement.text = ndarray_to_string(self._chi) return element @@ -581,7 +597,7 @@ class MGXSLibraryFile(object): raise ValueError(msg) # Make sure energy groups match. - if xsdata.energy_groups /= self._energy_groups: + if xsdata.energy_groups != self._energy_groups: msg = 'Energy groups of Xsdata do not match that of MGXSLibraryFile!' raise ValueError(msg) @@ -625,7 +641,7 @@ class MGXSLibraryFile(object): def _create_groups_subelement(self): if self._energy_groups is not None: element = ET.SubElement(self._cross_sections_file, "groups") - element.text = str(self._energy_groups.num_group) + element.text = str(self._energy_groups.num_groups) def _create_group_structure_subelement(self): if self._energy_groups is not None: @@ -641,7 +657,7 @@ class MGXSLibraryFile(object): def _create_xsdata_subelements(self): for xsdata in self._xsdatas: - xml_element = xsdata.get_xsdata_xml() + xml_element = xsdata._get_xsdata_xml() self._cross_sections_file.append(xml_element) From 5e788cdffb7f5ba836da4a9c5c114c19d0c3b8f6 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 16 Nov 2015 05:31:40 -0500 Subject: [PATCH 039/650] Whoops, forgot to add --- .../python/pincell_multigroup/build-xml.py | 185 ++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 examples/python/pincell_multigroup/build-xml.py diff --git a/examples/python/pincell_multigroup/build-xml.py b/examples/python/pincell_multigroup/build-xml.py new file mode 100644 index 0000000000..300f36ce01 --- /dev/null +++ b/examples/python/pincell_multigroup/build-xml.py @@ -0,0 +1,185 @@ +import openmc +import openmc.mgxs +import numpy as np + +############################################################################### +# Simulation Input File Parameters +############################################################################### + +# OpenMC simulation parameters +batches = 100 +inactive = 10 +particles = 1000 + +############################################################################### +# Exporting to OpenMC mg_cross_sections.xml File +############################################################################### + +# Instantiate the energy group data +groups = openmc.mgxs.EnergyGroups(group_edges=[1E-11, 0.0635E-6, 10.0E-6, + 1.0E-4, 1.0E-3, 0.5, 1.0, 20.0]) + +# Instantiate the 7-group (C5G7) cross section data +uo2_xsdata = openmc.Xsdata('UO2.300k', groups) +uo2_xsdata.order = 0 +uo2_xsdata.total = np.array([0.1779492, 0.3298048, 0.4803882, 0.5543674, + 0.3118013, 0.3951678, 0.5644058]) +uo2_xsdata.absorption = np.array([8.0248E-03, 3.7174E-03, 2.6769E-02, 9.6236E-02, + 3.0020E-02, 1.1126E-01, 2.8278E-01]) +scatter = [[[0.1275370, 0.0423780, 0.0000094, 0.0000000, 0.0000000, 0.0000000, 0.0000000], + [0.0000000, 0.3244560, 0.0016314, 0.0000000, 0.0000000, 0.0000000, 0.0000000], + [0.0000000, 0.0000000, 0.4509400, 0.0026792, 0.0000000, 0.0000000, 0.0000000], + [0.0000000, 0.0000000, 0.0000000, 0.4525650, 0.0055664, 0.0000000, 0.0000000], + [0.0000000, 0.0000000, 0.0000000, 0.0001253, 0.2714010, 0.0102550, 0.0000000], + [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0012968, 0.2658020, 0.0168090], + [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0085458, 0.2730800]]] +uo2_xsdata.scatter = np.array(scatter[:][:]) +uo2_xsdata.fission = np.array([7.21206E-03, 8.19301E-04, 6.45320E-03, + 1.85648E-02, 1.78084E-02, 8.30348E-02, + 2.16004E-01]) +uo2_xsdata.nu_fission = np.array([2.005998E-02, 2.027303E-03, 1.570599E-02, + 4.518301E-02, 4.334208E-02, 2.020901E-01, + 5.257105E-01]) +uo2_xsdata.chi = np.array([5.8791E-01, 4.1176E-01, 3.3906E-04, 1.1761E-07, + 0.0000E+00, 0.0000E+00, 0.0000E+00]) + +h2o_xsdata = openmc.Xsdata('LWTR.300k', groups) +h2o_xsdata.order = 0 +h2o_xsdata.total = np.array([0.15920605, 0.412969593, 0.59030986, 0.58435, + 0.718, 1.2544497, 2.650379]) +h2o_xsdata.absorption = np.array([6.0105E-04, 1.5793E-05, 3.3716E-04, + 1.9406E-03, 5.7416E-03, 1.5001E-02, + 3.7239E-02]) +scatter = [[[0.0444777, 0.1134000, 0.0007235, 0.0000037, 0.0000001, 0.0000000, 0.0000000], + [0.0000000, 0.2823340, 0.1299400, 0.0006234, 0.0000480, 0.0000074, 0.0000010], + [0.0000000, 0.0000000, 0.3452560, 0.2245700, 0.0169990, 0.0026443, 0.0005034], + [0.0000000, 0.0000000, 0.0000000, 0.0910284, 0.4155100, 0.0637320, 0.0121390], + [0.0000000, 0.0000000, 0.0000000, 0.0000714, 0.1391380, 0.5118200, 0.0612290], + [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0022157, 0.6999130, 0.5373200], + [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.1324400, 2.4807000]]] +h2o_xsdata.scatter = np.array(scatter[:][:]) + +mg_cross_sections_file = openmc.MGXSLibraryFile(groups) +mg_cross_sections_file.add_xsdatas([uo2_xsdata,h2o_xsdata]) +mg_cross_sections_file.export_to_xml() + + +############################################################################### +# Exporting to OpenMC materials.xml File +############################################################################### + +# Instantiate some Macroscopic Data +uo2_data = openmc.Macroscopic('UO2', '300k') +h2o_data = openmc.Macroscopic('LWTR', '300k') + +# Instantiate some Materials and register the appropriate Nuclides +uo2 = openmc.Material(material_id=1, name='UO2 fuel') +uo2.set_density('macro', 1.0) +uo2.add_macroscopic(uo2_data) + +water = openmc.Material(material_id=2, name='Water') +water.set_density('macro', 1.0) +water.add_macroscopic(h2o_data) + +# Instantiate a MaterialsFile, register all Materials, and export to XML +materials_file = openmc.MaterialsFile() +materials_file.default_xs = '300k' +materials_file.add_materials([uo2, water]) +materials_file.export_to_xml() + + +############################################################################### +# Exporting to OpenMC geometry.xml File +############################################################################### + +# Instantiate ZCylinder surfaces +fuel_or = openmc.ZCylinder(surface_id=1, x0=0, y0=0, R=0.54, name='Fuel OR') +left = openmc.XPlane(surface_id=4, x0=-0.63, name='left') +right = openmc.XPlane(surface_id=5, x0=0.63, name='right') +bottom = openmc.YPlane(surface_id=6, y0=-0.63, name='bottom') +top = openmc.YPlane(surface_id=7, y0=0.63, name='top') + +left.boundary_type = 'reflective' +right.boundary_type = 'reflective' +top.boundary_type = 'reflective' +bottom.boundary_type = 'reflective' + +# Instantiate Cells +fuel = openmc.Cell(cell_id=1, name='cell 1') +moderator = openmc.Cell(cell_id=2, name='cell 2') + +# Use surface half-spaces to define regions +fuel.region = -fuel_or +moderator.region = +fuel_or & +left & -right & +bottom & -top + +# Register Materials with Cells +fuel.fill = uo2 +moderator.fill = water + +# Instantiate Universe +root = openmc.Universe(universe_id=0, name='root universe') + +# Register Cells with Universe +root.add_cells([fuel, moderator]) + +# Instantiate a Geometry and register the root Universe +geometry = openmc.Geometry() +geometry.root_universe = root + +# Instantiate a GeometryFile, register Geometry, and export to XML +geometry_file = openmc.GeometryFile() +geometry_file.geometry = geometry +geometry_file.export_to_xml() + + +############################################################################### +# Exporting to OpenMC settings.xml File +############################################################################### + +# Instantiate a SettingsFile, set all runtime parameters, and export to XML +settings_file = openmc.SettingsFile() +settings_file.energy_mode = "multi-group" +settings_file.cross_sections = "./mg_cross_sections.xml" +settings_file.batches = batches +settings_file.inactive = inactive +settings_file.particles = particles +settings_file.set_source_space('box', [-0.63, -0.63, -1, \ + 0.63, 0.63, 1]) +settings_file.entropy_lower_left = [-0.54, -0.54, -1.e50] +settings_file.entropy_upper_right = [0.54, 0.54, 1.e50] +settings_file.entropy_dimension = [10, 10, 1] +settings_file.export_to_xml() + + +############################################################################### +# Exporting to OpenMC tallies.xml File +############################################################################### + +# Instantiate a tally mesh +mesh = openmc.Mesh(mesh_id=1) +mesh.type = 'regular' +mesh.dimension = [100, 100, 1] +mesh.lower_left = [-0.63, -0.63, -1.e50] +mesh.upper_right = [0.63, 0.63, 1.e50] + +# Instantiate some tally Filters +# energy_filter = openmc.Filter(type='energy', +# bins=[1E-11, 0.0635E-6, 10.0E-6, 1.0E-4, 1.0E-3, +# 0.5, 1.0, 20.0]) +energy_filter = openmc.Filter(type='energy') +mesh_filter = openmc.Filter() +mesh_filter.mesh = mesh + +# Instantiate the Tally +tally = openmc.Tally(tally_id=1, name='tally 1') +tally.add_filter(energy_filter) +tally.add_filter(mesh_filter) +tally.add_score('flux') +tally.add_score('fission') +tally.add_score('nu-fission') + +# Instantiate a TalliesFile, register all Tallies, and export to XML +tallies_file = openmc.TalliesFile() +tallies_file.add_mesh(mesh) +tallies_file.add_tally(tally) +tallies_file.export_to_xml() From 5965e92e46e6b12f0212220c8bcb105e7ac1344c Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 16 Nov 2015 20:33:42 -0500 Subject: [PATCH 040/650] fixed formatting of python api created mgxs library, added example pincell_multigroup to xml folder, and removed c5g7 as that will be pushed to benchmarks instead once this is complete. --- examples/xml/c5g7/2d/cmfd.xml | 12 -- examples/xml/c5g7/2d/geometry.xml | 118 --------------- examples/xml/c5g7/2d/materials.xml | 1 - examples/xml/c5g7/2d/plots.xml | 29 ---- examples/xml/c5g7/2d/settings.xml | 44 ------ examples/xml/c5g7/2d/tallies.xml | 25 ---- examples/xml/c5g7/3d/geometry.xml | 138 ------------------ examples/xml/c5g7/3d/materials.xml | 1 - examples/xml/c5g7/3d/plots.xml | 42 ------ examples/xml/c5g7/3d/settings.xml | 47 ------ examples/xml/c5g7/3d/tallies.xml | 33 ----- examples/xml/c5g7/pin/materials.xml | 1 - examples/xml/c5g7/pin/tallies.xml | 16 -- .../pin => pincell_multigroup}/geometry.xml | 0 .../materials.xml | 0 .../mg_cross_sections.xml} | 0 .../pin => pincell_multigroup}/plots.xml | 0 .../pin => pincell_multigroup}/settings.xml | 2 +- examples/xml/pincell_multigroup/tallies.xml | 13 ++ openmc/mgxs_library.py | 54 ++++--- 20 files changed, 47 insertions(+), 529 deletions(-) delete mode 100644 examples/xml/c5g7/2d/cmfd.xml delete mode 100644 examples/xml/c5g7/2d/geometry.xml delete mode 120000 examples/xml/c5g7/2d/materials.xml delete mode 100644 examples/xml/c5g7/2d/plots.xml delete mode 100644 examples/xml/c5g7/2d/settings.xml delete mode 100644 examples/xml/c5g7/2d/tallies.xml delete mode 100644 examples/xml/c5g7/3d/geometry.xml delete mode 120000 examples/xml/c5g7/3d/materials.xml delete mode 100644 examples/xml/c5g7/3d/plots.xml delete mode 100644 examples/xml/c5g7/3d/settings.xml delete mode 100644 examples/xml/c5g7/3d/tallies.xml delete mode 120000 examples/xml/c5g7/pin/materials.xml delete mode 100644 examples/xml/c5g7/pin/tallies.xml rename examples/xml/{c5g7/pin => pincell_multigroup}/geometry.xml (100%) rename examples/xml/{c5g7 => pincell_multigroup}/materials.xml (100%) rename examples/xml/{c5g7/data.xml => pincell_multigroup/mg_cross_sections.xml} (100%) rename examples/xml/{c5g7/pin => pincell_multigroup}/plots.xml (100%) rename examples/xml/{c5g7/pin => pincell_multigroup}/settings.xml (94%) create mode 100644 examples/xml/pincell_multigroup/tallies.xml diff --git a/examples/xml/c5g7/2d/cmfd.xml b/examples/xml/c5g7/2d/cmfd.xml deleted file mode 100644 index 8e8d77490c..0000000000 --- a/examples/xml/c5g7/2d/cmfd.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - 10 - true - - 0.0 0.0 -100.0 - 64.26 64.26 100.0 - 6 6 1 - 1 0 0 1 1 1 - - diff --git a/examples/xml/c5g7/2d/geometry.xml b/examples/xml/c5g7/2d/geometry.xml deleted file mode 100644 index 3b43562f37..0000000000 --- a/examples/xml/c5g7/2d/geometry.xml +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 17 17 - -10.71 -10.71 - 1.26 1.26 - - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 6 1 1 6 1 1 6 1 1 1 1 1 - 1 1 1 6 1 1 1 1 1 1 1 1 1 6 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 6 1 1 6 1 1 6 1 1 6 1 1 6 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 6 1 1 6 1 1 5 1 1 6 1 1 6 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 6 1 1 6 1 1 6 1 1 6 1 1 6 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 6 1 1 1 1 1 1 1 1 1 6 1 1 1 - 1 1 1 1 1 6 1 1 6 1 1 6 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - - - - - - 0 - 17 17 - -10.71 -10.71 - 1.26 1.26 - - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 - 2 3 3 3 3 6 3 3 6 3 3 6 3 3 3 3 2 - 2 3 3 6 3 4 4 4 4 4 4 4 3 6 3 3 2 - 2 3 3 3 4 4 4 4 4 4 4 4 4 3 3 3 2 - 2 3 6 4 4 6 4 4 6 4 4 6 4 4 6 3 2 - 2 3 3 4 4 4 4 4 4 4 4 4 4 4 3 3 2 - 2 3 3 4 4 4 4 4 4 4 4 4 4 4 3 3 2 - 2 3 6 4 4 6 4 4 5 4 4 6 4 4 6 3 2 - 2 3 3 4 4 4 4 4 4 4 4 4 4 4 3 3 2 - 2 3 3 4 4 4 4 4 4 4 4 4 4 4 3 3 2 - 2 3 6 4 4 6 4 4 6 4 4 6 4 4 6 3 2 - 2 3 3 3 4 4 4 4 4 4 4 4 4 3 3 3 2 - 2 3 3 6 3 4 4 4 4 4 4 4 3 6 3 3 2 - 2 3 3 3 3 6 3 3 6 3 3 6 3 3 3 3 2 - 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - - - - - - - - - - - - - - - 0 - 3 3 - 0.0 0.0 - 21.42 21.42 - - 10 11 12 - 11 10 12 - 12 12 12 - - - - - - - diff --git a/examples/xml/c5g7/2d/materials.xml b/examples/xml/c5g7/2d/materials.xml deleted file mode 120000 index c3825cffc5..0000000000 --- a/examples/xml/c5g7/2d/materials.xml +++ /dev/null @@ -1 +0,0 @@ -/home/nelsonag/cases/c5g7/materials.xml \ No newline at end of file diff --git a/examples/xml/c5g7/2d/plots.xml b/examples/xml/c5g7/2d/plots.xml deleted file mode 100644 index a38f73f4e3..0000000000 --- a/examples/xml/c5g7/2d/plots.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - 1 - mat - material - 32.13 32.13 0 - 64.26 64.26 - slice - 1000 1000 - - - - - 2 - cell - cell - 32.13 32.13 0 - 64.26 64.26 - slice - 1000 1000 - - - diff --git a/examples/xml/c5g7/2d/settings.xml b/examples/xml/c5g7/2d/settings.xml deleted file mode 100644 index 038c80c303..0000000000 --- a/examples/xml/c5g7/2d/settings.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - multi-group - - - 2000 - 500 - 10000 - - - - - - - 0.0 21.42 -100 - 42.84 64.26 100 - - - - - - - 2000 - true - - - - true - true - true - - - true - - ../data.xml - - diff --git a/examples/xml/c5g7/2d/tallies.xml b/examples/xml/c5g7/2d/tallies.xml deleted file mode 100644 index 8b21bf524a..0000000000 --- a/examples/xml/c5g7/2d/tallies.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - flux - - - - - fission - - - - 1 - regular - 0.0 0.0 -100.0 - 64.26 64.26 100.0 - 51 51 1 - - - false - - diff --git a/examples/xml/c5g7/3d/geometry.xml b/examples/xml/c5g7/3d/geometry.xml deleted file mode 100644 index b7766b32a0..0000000000 --- a/examples/xml/c5g7/3d/geometry.xml +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 17 17 - -10.71 -10.71 - 1.26 1.26 - - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 6 1 1 6 1 1 6 1 1 1 1 1 - 1 1 1 6 1 1 1 1 1 1 1 1 1 6 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 6 1 1 6 1 1 6 1 1 6 1 1 6 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 6 1 1 6 1 1 5 1 1 6 1 1 6 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 6 1 1 6 1 1 6 1 1 6 1 1 6 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 6 1 1 1 1 1 1 1 1 1 6 1 1 1 - 1 1 1 1 1 6 1 1 6 1 1 6 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - - - - - - 0 - 17 17 - -10.71 -10.71 - 1.26 1.26 - - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 - 2 3 3 3 3 6 3 3 6 3 3 6 3 3 3 3 2 - 2 3 3 6 3 4 4 4 4 4 4 4 3 6 3 3 2 - 2 3 3 3 4 4 4 4 4 4 4 4 4 3 3 3 2 - 2 3 6 4 4 6 4 4 6 4 4 6 4 4 6 3 2 - 2 3 3 4 4 4 4 4 4 4 4 4 4 4 3 3 2 - 2 3 3 4 4 4 4 4 4 4 4 4 4 4 3 3 2 - 2 3 6 4 4 6 4 4 5 4 4 6 4 4 6 3 2 - 2 3 3 4 4 4 4 4 4 4 4 4 4 4 3 3 2 - 2 3 3 4 4 4 4 4 4 4 4 4 4 4 3 3 2 - 2 3 6 4 4 6 4 4 6 4 4 6 4 4 6 3 2 - 2 3 3 3 4 4 4 4 4 4 4 4 4 3 3 3 2 - 2 3 3 6 3 4 4 4 4 4 4 4 3 6 3 3 2 - 2 3 3 3 3 6 3 3 6 3 3 6 3 3 3 3 2 - 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - - - - - - - - - - - - - - - - 3 3 - 0.0 0.0 - 21.42 21.42 - - 10 11 12 - 11 10 12 - 12 12 12 - - - - - - - - - - - - 3 3 - 0.0 0.0 - 21.42 21.42 - - 13 13 13 - 13 13 13 - 13 13 13 - - - - - - - - \ No newline at end of file diff --git a/examples/xml/c5g7/3d/materials.xml b/examples/xml/c5g7/3d/materials.xml deleted file mode 120000 index c344223b66..0000000000 --- a/examples/xml/c5g7/3d/materials.xml +++ /dev/null @@ -1 +0,0 @@ -../materials.xml \ No newline at end of file diff --git a/examples/xml/c5g7/3d/plots.xml b/examples/xml/c5g7/3d/plots.xml deleted file mode 100644 index caab977866..0000000000 --- a/examples/xml/c5g7/3d/plots.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - 1 - mat - material - 32.13 32.13 107.1 - 64.26 214.2 - slice - 1000 1000 - - xz - - - - 2 - cell - cell - 32.13 32.13 107.1 - 64.26 214.2 - slice - 1000 1000 - xz - - - - 3 - mat_xy - material - 32.13 32.13 107.1 - 64.26 64.26 - slice - 1000 1000 - xy - - - diff --git a/examples/xml/c5g7/3d/settings.xml b/examples/xml/c5g7/3d/settings.xml deleted file mode 100644 index 51241492d5..0000000000 --- a/examples/xml/c5g7/3d/settings.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - multi-group - - - 2000 - 500 - 1000 - - - - 0.0 21.42 0.0 - 42.84 64.26 192.78 - 34 34 54 - - - - - - - 0.0 21.42 0.0 - 42.84 64.26 192.78 - - - - - - - 2000 - - - - true - true - true - - - ../data.xml - - diff --git a/examples/xml/c5g7/3d/tallies.xml b/examples/xml/c5g7/3d/tallies.xml deleted file mode 100644 index e3826ccb63..0000000000 --- a/examples/xml/c5g7/3d/tallies.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - flux - - - - - fission - - - - 1 - rectangular - 0.0 0.0 0.0 - 64.26 64.26 214.2 - 51 51 60 - - - - 2 - rectangular - 0.0 21.42 0.0 - 42.84 64.26 192.78 - 34 34 54 - - - false - - diff --git a/examples/xml/c5g7/pin/materials.xml b/examples/xml/c5g7/pin/materials.xml deleted file mode 120000 index c3825cffc5..0000000000 --- a/examples/xml/c5g7/pin/materials.xml +++ /dev/null @@ -1 +0,0 @@ -/home/nelsonag/cases/c5g7/materials.xml \ No newline at end of file diff --git a/examples/xml/c5g7/pin/tallies.xml b/examples/xml/c5g7/pin/tallies.xml deleted file mode 100644 index 727584a627..0000000000 --- a/examples/xml/c5g7/pin/tallies.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - flux - - - - - - scatter - - - diff --git a/examples/xml/c5g7/pin/geometry.xml b/examples/xml/pincell_multigroup/geometry.xml similarity index 100% rename from examples/xml/c5g7/pin/geometry.xml rename to examples/xml/pincell_multigroup/geometry.xml diff --git a/examples/xml/c5g7/materials.xml b/examples/xml/pincell_multigroup/materials.xml similarity index 100% rename from examples/xml/c5g7/materials.xml rename to examples/xml/pincell_multigroup/materials.xml diff --git a/examples/xml/c5g7/data.xml b/examples/xml/pincell_multigroup/mg_cross_sections.xml similarity index 100% rename from examples/xml/c5g7/data.xml rename to examples/xml/pincell_multigroup/mg_cross_sections.xml diff --git a/examples/xml/c5g7/pin/plots.xml b/examples/xml/pincell_multigroup/plots.xml similarity index 100% rename from examples/xml/c5g7/pin/plots.xml rename to examples/xml/pincell_multigroup/plots.xml diff --git a/examples/xml/c5g7/pin/settings.xml b/examples/xml/pincell_multigroup/settings.xml similarity index 94% rename from examples/xml/c5g7/pin/settings.xml rename to examples/xml/pincell_multigroup/settings.xml index b11c328e5a..6bd27df3dd 100644 --- a/examples/xml/c5g7/pin/settings.xml +++ b/examples/xml/pincell_multigroup/settings.xml @@ -41,6 +41,6 @@ false - ../data.xml + ./mg_cross_sections.xml diff --git a/examples/xml/pincell_multigroup/tallies.xml b/examples/xml/pincell_multigroup/tallies.xml new file mode 100644 index 0000000000..ed9763be52 --- /dev/null +++ b/examples/xml/pincell_multigroup/tallies.xml @@ -0,0 +1,13 @@ + + + + 100 100 1 + -0.63 -0.63 -1e+50 + 0.63 0.63 1e+50 + + + + + flux fission nu-fission + + diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 282997983b..d1c1f4e05f 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -24,37 +24,49 @@ def ndarray_to_string(arr): shape = arr.shape ndim = arr.ndim - text = '' + tab = ' ' + indent = '\n' + tab + tab + text = indent if ndim == 1: - text += ' '.join(map(str, arr[:])) + text += tab + for i in range(shape[0]): + text += '{:.7E} '.format(arr[i]) + text += indent elif ndim == 2: - for i in xrange(shape[0]): - text += ' '.join(map(str, arr[i,:])) - text += '\n' + for i in range(shape[0]): + text += tab + for j in range(shape[1]): + text += '{:.7E} '.format(arr[i,j]) + text += indent elif ndim == 3: - for i in xrange(shape[0]): - for j in xrange(shape[1]): - text += ' '.join(map(str, arr[i,j,:])) - text += '\n' + for i in range(shape[0]): + for j in range(shape[1]): + text += tab + for k in range(shape[2]): + text += '{:.7E} '.format(arr[i,j,k]) + text += indent elif ndim == 4: - for i in xrange(shape[0]): - for j in xrange(shape[1]): - for k in xrange(shape[2]): - text += ' '.join(map(str, arr[i,j,k,:])) - text += '\n' + for i in range(shape[0]): + for j in range(shape[1]): + for k in range(shape[2]): + text += tab + for l in range(shape[3]): + text += '{:.7E} '.format(arr[i,j,k,l]) + text += indent elif ndim == 5: - for i in xrange(shape[0]): - for j in xrange(shape[1]): - for k in xrange(shape[2]): - for l in xrange(shape[3]): - text += ' '.join(map(str, arr[i,j,k,l,:])) - text += '\n' + for i in range(shape[0]): + for j in range(shape[1]): + for k in range(shape[2]): + for l in range(shape[3]): + text += tab + for m in range(shape[4]): + text += '{:.7E} '.format(arr[i,j,k,l,m]) + text += indent return text - class Xsdata(object): """A multi-group cross section data set (xsdata) providing all the multi-group data necessary for a multi-group OpenMC calculation. From 640409c412ad7cd1aa05bce4a7a942775bf58439 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 16 Nov 2015 20:56:07 -0500 Subject: [PATCH 041/650] Added back in requirement that user must input energy and energyout bins in MG mode --- docs/source/usersguide/input.rst | 24 +----- .../python/pincell_multigroup/build-xml.py | 7 +- examples/xml/pincell_multigroup/tallies.xml | 2 +- src/input_xml.F90 | 71 ++++++------------ src/relaxng/tallies.rnc | 2 +- src/relaxng/tallies.rng | 74 +++++++++---------- 6 files changed, 68 insertions(+), 112 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 0244b75fc3..069d483e36 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -1347,16 +1347,8 @@ The ```` element accepts the following sub-elements: then two energy bins will be created, one with energies between 0 and 1 MeV and the other with energies between 1 and 20 MeV. - In multi-group mode, however, the bounds of the filter are already - implied as being the same as the group boundaries of the problem. - Therefore no bins would be needed as they are implicitly applied by - the code. For example, the above filter example for continuous-energy - mode would look like the following for multi-group mode, but the - resultant tallies would still be done for every group in the library: - - .. code-block:: xml - - + In multi-group mode the bins provided must match group edges + defined in the multi-group library. :energyout: In continuous-energy mode, this filter should be provided as a @@ -1371,16 +1363,8 @@ The ```` element accepts the following sub-elements: energies between 0 and 1 MeV and the other with energies between 1 and 20 MeV. - In multi-group mode, however, the bounds of the filter are already - implied as being the same as the group boundaries of the problem. - Therefore no bins would be needed as they are implicitly applied by - the code. For example, the above filter example for continuous-energy - mode would look like the following for multi-group mode, but the - resultant tallies would still be done for every group in the library: - - .. code-block:: xml - - + In multi-group mode the bins provided must match group edges + defined in the multi-group library. :mu: A monotonically increasing list of bounding **post-collision** cosines diff --git a/examples/python/pincell_multigroup/build-xml.py b/examples/python/pincell_multigroup/build-xml.py index 300f36ce01..bb4c2db14f 100644 --- a/examples/python/pincell_multigroup/build-xml.py +++ b/examples/python/pincell_multigroup/build-xml.py @@ -163,10 +163,9 @@ mesh.lower_left = [-0.63, -0.63, -1.e50] mesh.upper_right = [0.63, 0.63, 1.e50] # Instantiate some tally Filters -# energy_filter = openmc.Filter(type='energy', -# bins=[1E-11, 0.0635E-6, 10.0E-6, 1.0E-4, 1.0E-3, -# 0.5, 1.0, 20.0]) -energy_filter = openmc.Filter(type='energy') +energy_filter = openmc.Filter(type='energy', + bins=[1E-11, 0.0635E-6, 10.0E-6, 1.0E-4, 1.0E-3, + 0.5, 1.0, 20.0]) mesh_filter = openmc.Filter() mesh_filter.mesh = mesh diff --git a/examples/xml/pincell_multigroup/tallies.xml b/examples/xml/pincell_multigroup/tallies.xml index ed9763be52..df65b461db 100644 --- a/examples/xml/pincell_multigroup/tallies.xml +++ b/examples/xml/pincell_multigroup/tallies.xml @@ -6,7 +6,7 @@ 0.63 0.63 1e+50 - + flux fission nu-fission diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 2cc829454d..8e3e8d8e9c 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -2623,25 +2623,10 @@ contains if (temp_str == 'energy' .or. temp_str == 'energyout' .or. & temp_str == 'mu' .or. temp_str == 'polar' .or. & temp_str == 'azimuthal') then - ! If in MG mode, fail if user provides bins, as we are only - ! allowing for all groups - if (.not. run_CE .and. (temp_str == 'energy' .or. & - temp_str == 'energyout')) then - call fatal_error("No energy or energyout bins needed on tally " & - &// trim(to_str(t % id))) - else - n_words = get_arraysize_double(node_filt, "bins") - end if + n_words = get_arraysize_double(node_filt, "bins") else n_words = get_arraysize_integer(node_filt, "bins") end if - else if (.not. run_CE .and. (temp_str == 'energy' .or. & - temp_str == 'energyout')) then - ! For MG calculations, dont require the user to put in all the - ! group boundaries, as there could be many. Assume that if no & - ! bins are entered that that means they want group-wise results. - n_words = -1 - else call fatal_error("Bins not set in filter on tally " & &// trim(to_str(t % id))) @@ -2752,48 +2737,38 @@ contains ! Set type of filter t % filters(j) % type = FILTER_ENERGYIN - if (n_words > 0) then - ! Set number of bins - t % filters(j) % n_bins = n_words - 1 + ! Set number of bins + t % filters(j) % n_bins = n_words - 1 - ! Allocate and store bins - allocate(t % filters(j) % real_bins(n_words)) - call get_node_array(node_filt, "bins", t % filters(j) % real_bins) + ! Allocate and store bins + allocate(t % filters(j) % real_bins(n_words)) + call get_node_array(node_filt, "bins", t % filters(j) % real_bins) - if (.not. run_CE) t % energy_matches_groups = .false. - else if (n_words == -1) then - ! Set number of bins - t % filters(j) % n_bins = energy_groups - - ! Allocate and store bins - allocate(t % filters(j) % real_bins(energy_groups)) - t % filters(j) % real_bins = energy_bins - - if (.not. run_CE) t % energy_matches_groups = .true. + if (.not. run_CE) then + if (n_words /= energy_groups + 1) then + t % energy_matches_groups = .false. + else if (all(t % filters(j) % real_bins == energy_bins)) then + t % energy_matches_groups = .false. + end if end if case ('energyout') ! Set type of filter t % filters(j) % type = FILTER_ENERGYOUT - if (n_words > 0) then - ! Set number of bins - t % filters(j) % n_bins = n_words - 1 + ! Set number of bins + t % filters(j) % n_bins = n_words - 1 - ! Allocate and store bins - allocate(t % filters(j) % real_bins(n_words)) - call get_node_array(node_filt, "bins", t % filters(j) % real_bins) + ! Allocate and store bins + allocate(t % filters(j) % real_bins(n_words)) + call get_node_array(node_filt, "bins", t % filters(j) % real_bins) - if (.not. run_CE) t % energyout_matches_groups = .false. - else if (n_words == -1) then - ! Set number of bins - t % filters(j) % n_bins = energy_groups - - ! Allocate and store bins - allocate(t % filters(j) % real_bins(energy_groups)) - t % filters(j) % real_bins = energy_bins - - if (.not. run_CE) t % energyout_matches_groups = .true. + if (.not. run_CE) then + if (n_words /= energy_groups + 1) then + t % energy_matches_groups = .false. + else if (all(t % filters(j) % real_bins == energy_bins)) then + t % energy_matches_groups = .false. + end if end if ! Set to analog estimator diff --git a/src/relaxng/tallies.rnc b/src/relaxng/tallies.rnc index 9efb6c4e2b..75afb0f231 100644 --- a/src/relaxng/tallies.rnc +++ b/src/relaxng/tallies.rnc @@ -27,7 +27,7 @@ element tallies { "polar" | "azimuthal" | "delayedgroup") } | attribute type { ( "cell" | "cellborn" | "material" | "universe" | "surface" | "distribcell" | "mesh" | "energy" | "energyout" | "mu" | - "polar" | "azimuthal" | "delayedgroup") })? & + "polar" | "azimuthal" | "delayedgroup") }) & (element bins { list { xsd:double+ } } | attribute bins { list { xsd:double+ } }) }* & diff --git a/src/relaxng/tallies.rng b/src/relaxng/tallies.rng index 8798efca33..ef55d21e4e 100644 --- a/src/relaxng/tallies.rng +++ b/src/relaxng/tallies.rng @@ -133,44 +133,42 @@ - - - - - cell - cellborn - material - universe - surface - distribcell - mesh - energy - energyout - mu - polar - azimuthal - delayedgroup - - - - - cell - cellborn - material - universe - surface - distribcell - mesh - energy - energyout - mu - polar - azimuthal - delayedgroup - - - - + + + + cell + cellborn + material + universe + surface + distribcell + mesh + energy + energyout + mu + polar + azimuthal + delayedgroup + + + + + cell + cellborn + material + universe + surface + distribcell + mesh + energy + energyout + mu + polar + azimuthal + delayedgroup + + + From 9141e2a00fbaf7afb7a87bfa4c74903d7414e560 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Tue, 17 Nov 2015 20:30:16 -0500 Subject: [PATCH 042/650] Updated testing harness and input_set for MG tests and added first MG test: test_mg_basic --- tests/c5g7_mgxs.xml | 383 +++++++++++++++++++++++++++ tests/input_set.py | 162 +++++++++++ tests/test_mg_basic/inputs_true.dat | 1 + tests/test_mg_basic/results_true.dat | 2 + tests/test_mg_basic/test_mg_basic.py | 17 ++ tests/testing_harness.py | 9 +- 6 files changed, 571 insertions(+), 3 deletions(-) create mode 100644 tests/c5g7_mgxs.xml create mode 100644 tests/test_mg_basic/inputs_true.dat create mode 100644 tests/test_mg_basic/results_true.dat create mode 100644 tests/test_mg_basic/test_mg_basic.py diff --git a/tests/c5g7_mgxs.xml b/tests/c5g7_mgxs.xml new file mode 100644 index 0000000000..ec85d4b593 --- /dev/null +++ b/tests/c5g7_mgxs.xml @@ -0,0 +1,383 @@ + + + + 7 + + 1E-11 0.0635E-6 10.0E-6 1.0E-4 1.0E-3 0.5 1.0 20.0 + + + + + + UO2.71c + UO2.71c + 2.53E-8 + 0 + true + + isotropic + + + + 8.0248E-03 3.7174E-03 2.6769E-02 9.6236E-02 3.0020E-02 1.1126E-01 2.8278E-01 + + + + 2.005998E-02 2.027303E-03 1.570599E-02 4.518301E-02 4.334208E-02 2.020901E-01 5.257105E-01 + + + + 5.8791E-01 4.1176E-01 3.3906E-04 1.1761E-07 0.0000E+00 0.0000E+00 0.0000E+00 + + + 7.21206E-03 8.19301E-04 6.45320E-03 1.85648E-02 1.78084E-02 8.30348E-02 2.16004E-01 + + + + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + + + + 0.1275370 0.0423780 0.0000094 0.0000000 0.0000000 0.0000000 0.0000000 + 0.0000000 0.3244560 0.0016314 0.0000000 0.0000000 0.0000000 0.0000000 + 0.0000000 0.0000000 0.4509400 0.0026792 0.0000000 0.0000000 0.0000000 + 0.0000000 0.0000000 0.0000000 0.4525650 0.0055664 0.0000000 0.0000000 + 0.0000000 0.0000000 0.0000000 0.0001253 0.2714010 0.0102550 0.0000000 + 0.0000000 0.0000000 0.0000000 0.0000000 0.0012968 0.2658020 0.0168090 + 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0085458 0.2730800 + + + + + 0.1779492 0.3298048 0.4803882 0.5543674000000001 0.3118013 0.39516779999999996 0.5644058 + + + + + + + MOX1.71c + MOX1.71c + 2.53E-8 + 0 + true + + + + 8.4339E-03 3.7577E-03 2.7970E-02 1.0421E-01 1.3994E-01 4.0918E-01 4.0935E-01 + + + + 1.27888062E-02 8.95701528E-03 7.37557218E-06 2.55837033E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.49041240E-03 1.04385401E-03 8.59552023E-07 2.98153464E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 9.56411400E-03 6.69850756E-03 5.51582469E-06 1.91327830E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 3.84928781E-02 2.69596154E-02 2.21996483E-05 7.70040890E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.80629998E-02 1.26509513E-02 1.04173100E-05 3.61346022E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 3.91930789E-01 2.74500216E-01 2.26034688E-04 7.84048241E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 4.19762096E-01 2.93992687E-01 2.42085585E-04 8.39724109E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00 + + + + 7.62704E-03 8.76898E-04 5.69835E-03 2.28872E-02 1.07635E-02 2.32757E-01 2.48968E-01 + + + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + + + + 1.27537000E-01 4.23780000E-02 9.43740000E-06 5.51630000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 3.24456000E-01 1.63140000E-03 3.14270000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 4.50940000E-01 2.67920000E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.52565000E-01 5.56640000E-03 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.25250000E-04 2.71401000E-01 1.02550000E-02 1.00210000E-08 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.29680000E-03 2.65802000E-01 1.68090000E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.54580000E-03 2.73080000E-01 + + + + 0.1783583429163 0.3298451031427 0.4815892 0.5623414 0.421721260021 0.6930878 0.6909757999999999 + + + + + + + MOX2.71c + MOX2.71c + 2.53E-8 + 0 + true + + + + 0.0090657 0.0042967 0.032881 0.12203 0.18298 0.56846 0.58521 + + + + 1.40004593E-02 9.80563205E-03 8.07435789E-06 2.80075866E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2.26856185E-03 1.58885378E-03 1.30832709E-06 4.53820413E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.41886199E-02 9.93741584E-03 8.18287404E-06 2.83839974E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 5.54788444E-02 3.88562347E-02 3.19958106E-05 1.10984111E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2.69085702E-02 1.88462058E-02 1.55187355E-05 5.38299559E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 5.45687127E-01 3.82187973E-01 3.14709185E-04 1.09163414E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 6.13307712E-01 4.29548032E-01 3.53707392E-04 1.22690752E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00 + + + + 0.00825446 0.00132565 0.00842156 0.032873 0.0159636 0.323794 0.362803 + + + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + + + + 1.30457000E-01 4.17920000E-02 8.51050000E-06 5.13290000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 3.28428000E-01 1.64360000E-03 2.20170000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 4.58371000E-01 2.53310000E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.63709000E-01 5.47660000E-03 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.76190000E-04 2.82313000E-01 8.72890000E-03 9.00160000E-09 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.27600000E-03 2.49751000E-01 1.31140000E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.86450000E-03 2.59529000E-01 + + + + 0.1813232156329 0.3343683022017 0.4937851 0.5912156 0.47419809900160004 0.833601 0.8536035 + + + + + + + MOX3.71c + MOX3.71c + 2.53E-8 + 0 + true + + + + 9.48620000E-03 4.65560000E-03 3.62400000E-02 1.32720000E-01 2.08400000E-01 6.58700000E-01 6.90170000E-01 + + + + 1.48071013E-02 1.03705874E-02 8.53956516E-06 2.96212546E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2.78640474E-03 1.95154023E-03 1.60697792E-06 5.57413653E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.73304404E-02 1.21378819E-02 9.99482763E-06 3.46691346E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 6.59928975E-02 4.62200600E-02 3.80594850E-05 1.32017225E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 3.25131926E-02 2.27715674E-02 1.87510386E-05 6.50418701E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 6.32002662E-01 4.42641588E-01 3.64489161E-04 1.26430632E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7.28595687E-01 5.10293344E-01 4.20196380E-04 1.45753838E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00 + + + + 8.67209000E-03 1.62426000E-03 1.02716000E-02 3.90447000E-02 1.92576000E-02 3.74888000E-01 4.30599000E-01 + + + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + + + + 1.31504000E-01 4.20460000E-02 8.69720000E-06 5.19380000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 3.30403000E-01 1.64630000E-03 2.60060000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 4.61792000E-01 2.47490000E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.68021000E-01 5.43300000E-03 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.85970000E-04 2.85771000E-01 8.39730000E-03 8.92800000E-09 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.39160000E-03 2.47614000E-01 1.23220000E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.96810000E-03 2.56093000E-01 + + + + 1.83044902E-01 3.36704903E-01 5.00506900E-01 6.06174000E-01 5.02754279E-01 9.21027600E-01 9.55231100E-01 + + + + + + + FC.71c + FC.71c + 2.53E-8 + 0 + true + + + + 5.1132E-04 7.5813E-05 3.1643E-04 1.1675E-03 3.3977E-03 9.1886E-03 2.3244E-02 + + + + 1.323401E-08 1.434500E-08 1.128599E-06 1.276299E-05 3.538502E-07 1.740099E-06 5.063302E-06 + + + + 5.8791E-01 4.1176E-01 3.3906E-04 1.1761E-07 0.0000E+00 0.0000E+00 0.0000E+00 + + + + 4.79002E-09 5.82564E-09 4.63719E-07 5.24406E-06 1.45390E-07 7.14972E-07 2.08041E-06 + + + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + + + + 6.61659000E-02 5.90700000E-02 2.83340000E-04 1.46220000E-06 2.06420000E-08 0.00000000E00 0.00000000E00 + 0.00000000E00 2.40377000E-01 5.24350000E-02 2.49900000E-04 1.92390000E-05 2.98750000E-06 4.21400000E-07 + 0.00000000E00 0.00000000E00 1.83425000E-01 9.22880000E-02 6.93650000E-03 1.07900000E-03 2.05430000E-04 + 0.00000000E00 0.00000000E00 0.00000000E00 7.90769000E-02 1.69990000E-01 2.58600000E-02 4.92560000E-03 + 0.00000000E00 0.00000000E00 0.00000000E00 3.73400000E-05 9.97570000E-02 2.06790000E-01 2.44780000E-02 + 0.00000000E00 0.00000000E00 0.00000000E00 0.00000000E00 9.17420000E-04 3.16774000E-01 2.38760000E-01 + 0.00000000E00 0.00000000E00 0.00000000E00 0.00000000E00 0.00000000E00 4.97930000E-02 1.09910000E00 + + + + 1.26032048E-01 2.93160367E-01 2.84250824E-01 2.81025244E-01 3.34460185E-01 5.65640735E-01 1.17213908E00 + + + + + + + GT.71c + GT.71c + 2.53E-8 + 0 + false + + + + 5.11320000E-04 7.58010000E-05 3.15720000E-04 1.15820000E-03 3.39750000E-03 9.18780000E-03 2.32420000E-02 + + + + + + 6.61659000E-02 5.90700000E-02 2.83340000E-04 1.46220000E-06 2.06420000E-08 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 2.40377000E-01 5.24350000E-02 2.49900000E-04 1.92390000E-05 2.98750000E-06 4.21400000E-07 + 0.00000000E+00 0.00000000E+00 1.83297000E-01 9.23970000E-02 6.94460000E-03 1.08030000E-03 2.05670000E-04 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.88511000E-02 1.70140000E-01 2.58810000E-02 4.92970000E-03 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.73330000E-05 9.97372000E-02 2.06790000E-01 2.44780000E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.17260000E-04 3.16765000E-01 2.38770000E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.97920000E-02 1.09912000E+00 + + + + 1.26032043E-01 2.93160349E-01 2.84240290E-01 2.80960000E-01 3.34440033E-01 5.65640060E-01 1.17215400E+00 + + + + + + LWTR.71c + LWTR.71c + 2.53E-8 + 0 + false + + + + 6.0105E-04 1.5793E-05 3.3716E-04 1.9406E-03 5.7416E-03 1.5001E-02 3.7239E-02 + + + + + + 0.0444777 0.1134000 0.0007235 0.0000037 0.0000001 0.0000000 0.0000000 + 0.0000000 0.2823340 0.1299400 0.0006234 0.0000480 0.0000074 0.0000010 + 0.0000000 0.0000000 0.3452560 0.2245700 0.0169990 0.0026443 0.0005034 + 0.0000000 0.0000000 0.0000000 0.0910284 0.4155100 0.0637320 0.0121390 + 0.0000000 0.0000000 0.0000000 0.0000714 0.1391380 0.5118200 0.0612290 + 0.0000000 0.0000000 0.0000000 0.0000000 0.0022157 0.6999130 0.5373200 + 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.1324400 2.4807000 + + + + 0.15920605 0.41296959299999997 0.59030986 0.5843499999999999 0.7180000000000001 1.2544497000000001 2.650379 + + + + + + + CR.71c + CR.71c + 2.53E-8 + 0 + false + + + + 1.70490000E-03 8.36224000E-03 8.37901000E-02 3.97797000E-01 6.98763000E-01 9.29508000E-01 1.17836000E+00 + + + + + + 1.70563000E-01 4.44012000E-02 9.83670000E-05 1.27786000E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 4.71050000E-01 6.85480000E-04 3.91395000E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 8.01859000E-01 7.20132000E-04 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.70752000E-01 1.46015000E-03 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.55562000E-05 2.07838000E-01 3.81486000E-03 3.69760000E-09 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.02427000E-03 2.02465000E-01 4.75290000E-03 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.53043000E-03 6.58597000E-01 + + + + 2.16767595E-01 4.80097720E-01 8.86369232E-01 9.70009150E-01 9.10481420E-01 1.13775017E+00 1.84048743E+00 + + + diff --git a/tests/input_set.py b/tests/input_set.py index 87b857f4a9..4e8974680e 100644 --- a/tests/input_set.py +++ b/tests/input_set.py @@ -569,3 +569,165 @@ class InputSet(object): plot.color = 'mat' self.plots.add_plot(plot) + +class MGInputSet(InputSet): + def build_default_materials_and_geometry(self): + # Define materials needed for C5G7 2-D UO2 Assembly + uo2_data = openmc.Macroscopic('UO2', '71c') + uo2 = openmc.Material(name='UO2', material_id=1) + uo2.set_density('macro', 1.0) + uo2.add_macroscopic(uo2_data) + + fiss_cham_data = openmc.Macroscopic('FC', '71c') + fiss_cham = openmc.Material(name='FC', material_id=2) + fiss_cham.set_density('macro', 1.0) + fiss_cham.add_macroscopic(fiss_cham_data) + + guide_tube_data = openmc.Macroscopic('GT', '71c') + guide_tube = openmc.Material(name='GT', material_id=3) + guide_tube.set_density('macro', 1.0) + guide_tube.add_macroscopic(guide_tube_data) + + water_data = openmc.Macroscopic('LWTR', '71c') + water = openmc.Material(name='LWTR', material_id=4) + water.set_density('macro', 1.0) + water.add_macroscopic(water_data) + + # Define the materials file. + self.materials.default_xs = '71c' + self.materials.add_materials((uo2, fiss_cham, guide_tube, water)) + + # Define surfaces. + + # Pin cell + s1 = openmc.ZCylinder(R=0.54, surface_id=1) + # Assembly/Problem Boundary + left = openmc.XPlane(x0=0.0, surface_id=20, + boundary_type='reflective') + right = openmc.XPlane(x0=21.42, surface_id=21, + boundary_type='reflective') + bottom = openmc.YPlane(y0=0.0, surface_id=22, + boundary_type='reflective') + top = openmc.YPlane(y0=21.42, surface_id=23, + boundary_type='reflective') + down = openmc.ZPlane(z0=0.0, surface_id=24, + boundary_type='reflective') + up = openmc.ZPlane(z0=21.42, surface_id=25, + boundary_type='reflective') + + # Define pin cells + # uo2 pin + c10 = openmc.Cell(cell_id=10) + c10.region = -s1 + c10.fill = uo2 + c11 = openmc.Cell(cell_id=11) + c11.region = +s1 + c11.fill = water + fuel_pin = openmc.Universe(name='Fuel pin', universe_id=1) + fuel_pin.add_cells((c10, c11)) + + # Fission chamber pin + c20 = openmc.Cell(cell_id=20) + c20.region = -s1 + c20.fill = fiss_cham + c21 = openmc.Cell(cell_id=21) + c21.region = +s1 + c21.fill = water + fiss_chamber_pin = openmc.Universe(name='Fission Chamber', universe_id=2) + fiss_chamber_pin.add_cells((c20, c21)) + + # Guide Tube pin + c30 = openmc.Cell(cell_id=30) + c30.region = -s1 + c30.fill = guide_tube + c31 = openmc.Cell(cell_id=31) + c31.region = +s1 + c31.fill = water + gt_pin = openmc.Universe(name='Guide Tube', universe_id=3) + gt_pin.add_cells((c30, c31)) + + # Define fuel lattice + l100 = openmc.RectLattice(name='UO2 assembly', lattice_id=100) + l100.dimension = (17, 17) + l100.lower_left = (-10.71, -10.71) + l100.pitch = (1.26, 1.26) + l100.universes = [ + [fuel_pin]*17, + [fuel_pin]*17, + [fuel_pin]*5 + [gt_pin] + [fuel_pin]*2 + [gt_pin] + + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*5, + [fuel_pin]*3 + [gt_pin] + [fuel_pin]*9 + [gt_pin] + + [fuel_pin]*3, + [fuel_pin]*17, + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*2 + [gt_pin] + + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*2 + [gt_pin] + + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*2, + [fuel_pin]*17, + [fuel_pin]*17, + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*2 + [gt_pin] + + [fuel_pin]*2 + [fiss_chamber_pin] + [fuel_pin]*2 + [gt_pin] + + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*2, + [fuel_pin]*17, + [fuel_pin]*17, + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*2 + [gt_pin] + + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*2 + [gt_pin] + + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*2, + [fuel_pin]*17, + [fuel_pin]*3 + [gt_pin] + [fuel_pin]*9 + [gt_pin] + + [fuel_pin]*3, + [fuel_pin]*5 + [gt_pin] + [fuel_pin]*2 + [gt_pin] + + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*5, + [fuel_pin]*17, + [fuel_pin]*17 ] + + # Define assemblies. + fa = openmc.Universe(name='Fuel assembly', universe_id=10) + c100 = openmc.Cell(cell_id=110) + c100.region = +down & -up + c100.fill = l100 + fa.add_cells((c100, )) + + # Define core lattices + l200 = openmc.RectLattice(name='Core lattice', lattice_id=200) + l200.dimension = (1, 1) + l200.lower_left = (0.0, 0.0) + l200.pitch = (21.42, 21.42) + l200.universes = [[fa]] + + # Define root universe. + root = openmc.Universe(universe_id=0, name='root universe') + c1 = openmc.Cell(cell_id=1) + c1.region = +left & -right & +bottom & -top & +down & -up + c1.fill = l200 + + root.add_cells((c1,)) + + # Define the geometry file. + geometry = openmc.Geometry() + geometry.root_universe = root + + self.geometry.geometry = geometry + + + def build_default_settings(self): + self.settings.batches = 10 + self.settings.inactive = 5 + self.settings.particles = 100 + self.settings.set_source_space('box', (0.0, 0.0, 0.0, 21.42, 21.42, 100.0)) + self.settings.energy_mode = "multi-group" + self.settings.cross_sections = "../c5g7_mgxs.xml" + + def build_defualt_plots(self): + plot = openmc.Plot() + plot.filename = 'mat' + plot.origin = (10.71, 10.71, 50.0) + plot.width = (21.42, 21.42) + plot.pixels = (3000, 3000) + plot.color = 'mat' + + self.plots.add_plot(plot) + + + + + diff --git a/tests/test_mg_basic/inputs_true.dat b/tests/test_mg_basic/inputs_true.dat new file mode 100644 index 0000000000..d576cd402a --- /dev/null +++ b/tests/test_mg_basic/inputs_true.dat @@ -0,0 +1 @@ +b41c9621e2f068dab8f44b4fbf29aa5f075c04e463543550b7d1324b75b4709db810808e64474d2400c8c36465814bcca095650b0e19d640860dd4a860bb40a3 \ No newline at end of file diff --git a/tests/test_mg_basic/results_true.dat b/tests/test_mg_basic/results_true.dat new file mode 100644 index 0000000000..93683d28bb --- /dev/null +++ b/tests/test_mg_basic/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +1.359283E+00 7.465863E-02 diff --git a/tests/test_mg_basic/test_mg_basic.py b/tests/test_mg_basic/test_mg_basic.py new file mode 100644 index 0000000000..1a49ee8a82 --- /dev/null +++ b/tests/test_mg_basic/test_mg_basic.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +import os +import sys +sys.path.insert(0, os.pardir) +from testing_harness import TestHarness, PyAPITestHarness +import openmc + + +class MGBasicTestHarness(PyAPITestHarness): + def _build_inputs(self): + super(MGBasicTestHarness, self)._build_inputs() + + +if __name__ == '__main__': + harness = MGBasicTestHarness('statepoint.10.*', False, mg=True) + harness.main() diff --git a/tests/testing_harness.py b/tests/testing_harness.py index ed89f76946..90f35078a6 100644 --- a/tests/testing_harness.py +++ b/tests/testing_harness.py @@ -12,7 +12,7 @@ import sys import numpy as np sys.path.insert(0, os.path.join(os.pardir, os.pardir)) -from input_set import InputSet +from input_set import InputSet, MGInputSet from openmc.statepoint import StatePoint from openmc.executor import Executor import openmc.particle_restart as pr @@ -273,9 +273,12 @@ class ParticleRestartTestHarness(TestHarness): class PyAPITestHarness(TestHarness): - def __init__(self, statepoint_name, tallies_present=False): + def __init__(self, statepoint_name, tallies_present=False, mg=False): TestHarness.__init__(self, statepoint_name, tallies_present) - self._input_set = InputSet() + if mg: + self._input_set = MGInputSet() + else: + self._input_set = InputSet() def execute_test(self): """Build input XMLs, run OpenMC, and verify correct results.""" From da76c2c8ff34d1fef5a2e71da91153f2560dc845 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Tue, 17 Nov 2015 20:49:22 -0500 Subject: [PATCH 043/650] Added test for MG tallying --- tests/test_mg_tallies/inputs_true.dat | 1 + tests/test_mg_tallies/results_true.dat | 3482 ++++++++++++++++++++++ tests/test_mg_tallies/test_mg_tallies.py | 61 + 3 files changed, 3544 insertions(+) create mode 100644 tests/test_mg_tallies/inputs_true.dat create mode 100644 tests/test_mg_tallies/results_true.dat create mode 100644 tests/test_mg_tallies/test_mg_tallies.py diff --git a/tests/test_mg_tallies/inputs_true.dat b/tests/test_mg_tallies/inputs_true.dat new file mode 100644 index 0000000000..44099dbd82 --- /dev/null +++ b/tests/test_mg_tallies/inputs_true.dat @@ -0,0 +1 @@ +87d5adff4c8d53f020baa25db59d9ad6eada791ef010577e3586c543a9ee6cee6022d99e7a27911a94560acddba3602570c0748a0b4cba48f630b726221f14dc \ No newline at end of file diff --git a/tests/test_mg_tallies/results_true.dat b/tests/test_mg_tallies/results_true.dat new file mode 100644 index 0000000000..920f5f3e36 --- /dev/null +++ b/tests/test_mg_tallies/results_true.dat @@ -0,0 +1,3482 @@ +k-combined: +1.359283E+00 7.465863E-02 +tally 1: +2.847813E-01 +2.025790E-02 +1.172423E-02 +4.616814E-05 +6.871019E-01 +1.096320E-01 +5.348095E-03 +1.062108E-05 +1.340369E-02 +6.465987E-05 +1.682119E-01 +7.397131E-03 +9.038916E-03 +2.581353E-05 +4.138462E-01 +3.732581E-02 +4.267302E-03 +6.286845E-06 +1.058944E-02 +3.804411E-05 +3.633299E-01 +3.976542E-02 +2.487014E-02 +2.126766E-04 +6.982763E-01 +1.317345E-01 +1.257758E-02 +6.051328E-05 +3.075036E-02 +3.600723E-04 +2.492313E-01 +1.682228E-02 +1.380182E-02 +6.570494E-05 +5.765551E-01 +9.181006E-02 +7.743475E-03 +2.727482E-05 +1.902781E-02 +1.627120E-04 +2.191122E-01 +1.298025E-02 +1.148883E-02 +4.334141E-05 +5.203670E-01 +7.022054E-02 +5.000169E-03 +7.803760E-06 +1.236816E-02 +4.736991E-05 +2.269064E-01 +2.056966E-02 +1.410446E-02 +1.199602E-04 +4.515464E-01 +7.417552E-02 +7.887256E-03 +4.708793E-05 +1.932915E-02 +2.805214E-04 +2.364191E-01 +1.654063E-02 +1.415339E-02 +1.415624E-04 +4.940050E-01 +6.265173E-02 +6.299407E-03 +3.280872E-05 +1.540495E-02 +1.953911E-04 +3.192689E-01 +2.306298E-02 +1.230781E-02 +6.401926E-05 +6.470467E-01 +9.154956E-02 +5.234535E-03 +1.578586E-05 +1.286806E-02 +9.375617E-05 +2.540069E-01 +1.409067E-02 +7.206254E-03 +1.691929E-05 +6.264964E-01 +8.583680E-02 +1.958907E-03 +1.137122E-06 +4.944068E-03 +7.184508E-06 +3.299226E-01 +2.361991E-02 +1.153904E-02 +3.398774E-05 +7.350880E-01 +1.172602E-01 +4.976946E-03 +7.515943E-06 +1.226957E-02 +4.522435E-05 +2.734191E-01 +1.823188E-02 +1.314351E-02 +4.883110E-05 +5.162639E-01 +5.997683E-02 +5.567315E-03 +1.116578E-05 +1.355695E-02 +6.620192E-05 +1.971066E-01 +8.872106E-03 +7.289937E-03 +1.482506E-05 +3.624107E-01 +2.788172E-02 +3.946019E-03 +4.911976E-06 +9.796252E-03 +2.939620E-05 +2.435676E-01 +1.550957E-02 +1.471975E-02 +6.447073E-05 +3.711107E-01 +3.097190E-02 +8.485525E-03 +2.418503E-05 +2.074995E-02 +1.440717E-04 +2.427633E-01 +1.927418E-02 +1.659082E-02 +9.533795E-05 +3.947070E-01 +4.039320E-02 +8.721245E-03 +3.472785E-05 +2.129433E-02 +2.058398E-04 +2.930833E-01 +3.717078E-02 +1.961320E-02 +2.361042E-04 +5.029290E-01 +7.452592E-02 +1.162396E-02 +9.544883E-05 +2.835116E-02 +5.654990E-04 +3.612968E-01 +3.626192E-02 +2.275737E-02 +2.915981E-04 +6.836531E-01 +1.007739E-01 +1.386251E-02 +1.308722E-04 +3.381273E-02 +7.755475E-04 +3.379726E-01 +3.059811E-02 +1.034847E-02 +2.508685E-05 +7.876015E-01 +1.626433E-01 +4.304432E-03 +4.836158E-06 +1.080846E-02 +3.049489E-05 +2.207527E-01 +1.480236E-02 +9.133299E-03 +4.378685E-05 +5.306469E-01 +6.883187E-02 +3.832635E-03 +7.385540E-06 +9.542013E-03 +4.429238E-05 +1.746455E-01 +7.365091E-03 +6.210077E-03 +1.980262E-05 +4.018765E-01 +3.788658E-02 +3.022816E-03 +4.602873E-06 +7.491747E-03 +2.745170E-05 +2.568492E-01 +1.811320E-02 +1.821423E-02 +2.069737E-04 +4.656788E-01 +5.401259E-02 +1.232525E-02 +1.058384E-04 +3.013811E-02 +6.273405E-04 +2.225493E-01 +1.562018E-02 +1.010014E-02 +5.040357E-05 +4.589131E-01 +6.663804E-02 +5.258730E-03 +1.491454E-05 +1.298284E-02 +9.047317E-05 +2.447664E-01 +1.706786E-02 +1.478729E-02 +6.497711E-05 +5.983362E-01 +1.049331E-01 +6.596398E-03 +1.524559E-05 +1.633146E-02 +9.299953E-05 +2.413969E-01 +2.116589E-02 +2.021668E-02 +2.024522E-04 +3.619973E-01 +4.122998E-02 +1.346912E-02 +9.583517E-05 +3.286803E-02 +5.685240E-04 +2.049752E-01 +8.601175E-03 +1.025940E-02 +2.514980E-05 +4.043912E-01 +3.463281E-02 +4.452720E-03 +6.434910E-06 +1.096850E-02 +3.904161E-05 +3.102820E-01 +2.045820E-02 +1.459368E-02 +5.241789E-05 +6.773052E-01 +9.567203E-02 +7.341203E-03 +1.649958E-05 +1.800485E-02 +9.887491E-05 +2.550379E-01 +1.497142E-02 +1.091961E-02 +3.974930E-05 +5.647093E-01 +7.433920E-02 +5.249459E-03 +1.177345E-05 +1.284826E-02 +7.017030E-05 +3.556052E-01 +2.703280E-02 +2.735992E-02 +1.564623E-04 +6.683707E-01 +1.040515E-01 +1.590490E-02 +6.014424E-05 +3.877604E-02 +3.576128E-04 +2.497863E-01 +1.507086E-02 +1.494719E-02 +1.025755E-04 +4.762993E-01 +5.549879E-02 +8.527272E-03 +4.579896E-05 +2.085262E-02 +2.725955E-04 +1.839365E-01 +8.369442E-03 +1.237838E-02 +7.164219E-05 +3.775826E-01 +3.190193E-02 +7.884508E-03 +3.507069E-05 +1.929540E-02 +2.080904E-04 +1.708555E-01 +9.399504E-03 +7.715238E-03 +2.292805E-05 +3.732199E-01 +4.315843E-02 +3.978302E-03 +6.440288E-06 +9.770196E-03 +3.826434E-05 +3.241297E-01 +2.680732E-02 +2.827721E-02 +2.383010E-04 +5.925440E-01 +7.572445E-02 +1.805046E-02 +9.773692E-05 +4.409968E-02 +5.812383E-04 +2.602482E-01 +1.672576E-02 +7.932620E-03 +1.561951E-05 +5.580855E-01 +6.844216E-02 +2.088329E-03 +9.313432E-07 +5.186486E-03 +5.737715E-06 +2.890696E-01 +2.384728E-02 +1.015490E-02 +3.717081E-05 +6.111526E-01 +8.518321E-02 +4.213456E-03 +7.925859E-06 +1.037122E-02 +4.719897E-05 +3.855713E-01 +3.814941E-02 +1.595567E-02 +1.026684E-04 +8.322980E-01 +1.786719E-01 +6.646130E-03 +1.662975E-05 +1.674159E-02 +1.022582E-04 +1.897658E-01 +1.150551E-02 +8.071193E-03 +3.172610E-05 +4.219179E-01 +4.854116E-02 +3.808837E-03 +8.709924E-06 +9.434346E-03 +5.203901E-05 +2.195178E-01 +1.516218E-02 +7.926578E-03 +2.639446E-05 +5.306593E-01 +7.568838E-02 +2.106381E-03 +1.749456E-06 +5.313752E-03 +1.093384E-05 +3.256867E-01 +4.534052E-02 +2.131147E-02 +2.570637E-04 +5.297378E-01 +1.136688E-01 +1.158918E-02 +7.267385E-05 +2.831750E-02 +4.331969E-04 +1.414992E-01 +5.003890E-03 +4.258013E-03 +7.891903E-06 +3.615210E-01 +3.145749E-02 +1.093412E-03 +3.546225E-07 +2.758486E-03 +2.166206E-06 +1.514116E-01 +6.201312E-03 +4.857451E-03 +6.866877E-06 +3.984685E-01 +3.930815E-02 +2.038032E-03 +1.261346E-06 +5.152722E-03 +7.792008E-06 +3.159334E-01 +3.379738E-02 +2.905400E-03 +4.164258E-06 +5.469766E-01 +9.022824E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.132668E-01 +1.056200E-02 +9.631005E-03 +2.427206E-05 +4.566464E-01 +5.683176E-02 +4.166599E-03 +5.882400E-06 +1.031031E-02 +3.580708E-05 +2.912415E-01 +2.272338E-02 +1.775965E-02 +1.443229E-04 +4.943869E-01 +5.913494E-02 +1.104606E-02 +6.433295E-05 +2.697987E-02 +3.816975E-04 +2.570902E-01 +1.798689E-02 +2.361267E-03 +2.378626E-06 +4.065439E-01 +4.281600E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.949017E-01 +2.326343E-02 +1.187639E-02 +4.961037E-05 +6.020356E-01 +9.395273E-02 +6.276821E-03 +1.931834E-05 +1.538205E-02 +1.153434E-04 +2.558511E-01 +1.698459E-02 +1.575580E-02 +8.651862E-05 +5.875503E-01 +8.849521E-02 +7.883870E-03 +3.015633E-05 +1.949261E-02 +1.802377E-04 +1.839277E-01 +8.799415E-03 +9.390667E-04 +4.683772E-07 +4.384277E-01 +4.401825E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.609130E-01 +1.523879E-02 +1.198704E-02 +4.620730E-05 +6.275273E-01 +8.589709E-02 +6.342769E-03 +1.539049E-05 +1.563218E-02 +9.287339E-05 +2.481956E-01 +1.445135E-02 +7.512217E-03 +2.578216E-05 +5.254869E-01 +6.462207E-02 +4.109411E-03 +1.008346E-05 +1.011567E-02 +5.994042E-05 +2.029184E-01 +9.361823E-03 +5.088961E-03 +6.279329E-06 +4.979684E-01 +5.589905E-02 +1.833935E-03 +7.843470E-07 +4.590978E-03 +4.909945E-06 +2.259899E-01 +1.904652E-02 +1.437025E-02 +1.402125E-04 +5.175625E-01 +7.750371E-02 +8.659314E-03 +5.998348E-05 +2.125004E-02 +3.556838E-04 +2.491821E-01 +1.416884E-02 +1.505865E-02 +1.184227E-04 +6.046546E-01 +7.493539E-02 +9.648000E-03 +5.809858E-05 +2.378233E-02 +3.456642E-04 +2.380529E-01 +1.543764E-02 +1.826271E-02 +8.884450E-05 +4.803110E-01 +5.846859E-02 +8.805950E-03 +2.475992E-05 +2.159062E-02 +1.489502E-04 +2.026084E-01 +1.110441E-02 +8.160845E-03 +1.785658E-05 +4.437692E-01 +5.639028E-02 +3.565175E-03 +3.302071E-06 +8.864014E-03 +2.024481E-05 +2.224558E-01 +1.680211E-02 +1.555273E-02 +1.869799E-04 +4.173737E-01 +6.228541E-02 +9.135566E-03 +7.133316E-05 +2.241062E-02 +4.286070E-04 +2.004042E-01 +1.095639E-02 +1.437370E-03 +8.849524E-07 +4.174469E-01 +4.395281E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.755714E-01 +6.756269E-03 +8.983808E-03 +1.906916E-05 +4.261288E-01 +3.852168E-02 +3.247612E-03 +3.858076E-06 +8.028951E-03 +2.337512E-05 +2.223071E-01 +1.353146E-02 +1.705765E-02 +1.245386E-04 +5.197542E-01 +6.518812E-02 +9.805805E-03 +4.604085E-05 +2.405033E-02 +2.748160E-04 +1.948532E-01 +9.221640E-03 +1.164060E-02 +3.726891E-05 +4.394449E-01 +4.772119E-02 +5.615780E-03 +1.145305E-05 +1.379554E-02 +6.876959E-05 +1.729605E-01 +7.269018E-03 +7.081459E-03 +1.086510E-05 +3.596419E-01 +3.677088E-02 +2.576810E-03 +2.237622E-06 +6.357471E-03 +1.343160E-05 +2.686943E-01 +2.027464E-02 +1.549158E-02 +1.119369E-04 +4.683049E-01 +6.133136E-02 +8.958022E-03 +4.362320E-05 +2.185541E-02 +2.586495E-04 +2.805365E-01 +1.741332E-02 +1.350305E-02 +4.115261E-05 +6.438641E-01 +9.350345E-02 +5.285236E-03 +6.082302E-06 +1.295017E-02 +3.639939E-05 +2.572894E-01 +1.557396E-02 +9.152971E-03 +2.187378E-05 +5.397672E-01 +6.947168E-02 +3.989601E-03 +5.329696E-06 +9.816007E-03 +3.199508E-05 +1.844650E-01 +6.889035E-03 +9.054549E-03 +2.388416E-05 +4.959347E-01 +5.022290E-02 +6.016437E-03 +1.166505E-05 +1.483958E-02 +6.985694E-05 +2.448423E-01 +1.383982E-02 +1.979087E-02 +1.017532E-04 +5.292703E-01 +7.138674E-02 +1.203905E-02 +3.777525E-05 +2.948865E-02 +2.261060E-04 +3.678431E-01 +4.444197E-02 +3.828158E-03 +8.237670E-06 +5.902793E-01 +7.688814E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.935423E-01 +7.592536E-03 +6.894656E-03 +1.790118E-05 +4.320616E-01 +3.963147E-02 +2.212586E-03 +1.758405E-06 +5.535114E-03 +1.077459E-05 +2.000222E-01 +8.790536E-03 +6.130353E-03 +1.084913E-05 +5.241401E-01 +6.739015E-02 +2.660110E-03 +2.912115E-06 +6.629933E-03 +1.756202E-05 +2.006222E-01 +1.191794E-02 +3.681584E-03 +4.563880E-06 +4.694831E-01 +5.256578E-02 +1.424456E-03 +6.817103E-07 +3.630744E-03 +4.291288E-06 +1.427746E-01 +5.192636E-03 +1.037189E-02 +4.055885E-05 +3.029633E-01 +2.157045E-02 +4.326032E-03 +8.614945E-06 +1.057731E-02 +5.155246E-05 +1.646414E-01 +6.623537E-03 +5.439480E-03 +7.768447E-06 +4.145907E-01 +4.057023E-02 +1.461466E-03 +5.282344E-07 +3.707510E-03 +3.392769E-06 +1.648802E-01 +7.366519E-03 +1.070584E-02 +7.721854E-05 +3.742934E-01 +3.508076E-02 +6.499009E-03 +3.696865E-05 +1.592990E-02 +2.222355E-04 +2.180319E-01 +9.923859E-03 +7.969510E-03 +1.700099E-05 +5.221346E-01 +5.681643E-02 +3.896242E-03 +5.553555E-06 +9.611215E-03 +3.391405E-05 +2.292243E-01 +1.349466E-02 +1.175536E-02 +6.134192E-05 +5.588849E-01 +7.531263E-02 +5.067123E-03 +1.484964E-05 +1.251725E-02 +8.896195E-05 +3.324146E-01 +2.547046E-02 +2.018340E-02 +1.567704E-04 +7.652357E-01 +1.207356E-01 +1.178472E-02 +6.216943E-05 +2.903536E-02 +3.717118E-04 +2.285590E-01 +1.197525E-02 +6.912934E-03 +1.203784E-05 +4.578967E-01 +5.011634E-02 +2.559431E-03 +2.572737E-06 +6.387641E-03 +1.570623E-05 +1.930700E-01 +1.057009E-02 +6.872837E-03 +2.126589E-05 +3.910460E-01 +4.649162E-02 +3.546523E-03 +6.380991E-06 +8.655793E-03 +3.783828E-05 +3.934470E-01 +3.734695E-02 +2.227825E-02 +1.453115E-04 +6.775238E-01 +1.033120E-01 +1.338820E-02 +5.501040E-05 +3.274687E-02 +3.279809E-04 +3.088799E-01 +2.873704E-02 +1.749960E-02 +1.305258E-04 +5.601385E-01 +8.645103E-02 +1.038254E-02 +5.085454E-05 +2.542701E-02 +3.023135E-04 +3.700473E-01 +3.161307E-02 +2.646517E-02 +1.740940E-04 +6.414793E-01 +8.696363E-02 +1.500269E-02 +5.967096E-05 +3.661756E-02 +3.551291E-04 +3.565351E-01 +2.588617E-02 +2.829818E-02 +2.379254E-04 +6.754679E-01 +9.310347E-02 +1.785149E-02 +1.083839E-04 +4.359723E-02 +6.452495E-04 +2.956875E-01 +2.095277E-02 +1.344873E-02 +5.606169E-05 +5.669819E-01 +6.817515E-02 +7.251551E-03 +1.703252E-05 +1.777118E-02 +1.016817E-04 +2.506887E-01 +1.299858E-02 +1.588362E-02 +7.727995E-05 +4.753313E-01 +5.001149E-02 +1.000924E-02 +3.700899E-05 +2.445351E-02 +2.204775E-04 +2.126121E-01 +1.123409E-02 +1.190127E-02 +3.832263E-05 +3.707959E-01 +3.067361E-02 +5.030198E-03 +9.080178E-06 +1.230610E-02 +5.408354E-05 +2.764143E-01 +1.563717E-02 +1.790747E-02 +9.078882E-05 +5.678500E-01 +6.620735E-02 +1.046412E-02 +3.855578E-05 +2.561249E-02 +2.296019E-04 +2.902769E-01 +2.046134E-02 +1.234799E-02 +6.085833E-05 +6.155753E-01 +8.929554E-02 +6.140705E-03 +2.104623E-05 +1.517340E-02 +1.267427E-04 +2.178843E-01 +1.129871E-02 +6.208339E-03 +9.542966E-06 +5.034079E-01 +6.194116E-02 +2.128719E-03 +1.227568E-06 +5.264120E-03 +7.484188E-06 +2.125960E-01 +9.351344E-03 +6.822592E-03 +1.025641E-05 +4.869649E-01 +4.997451E-02 +2.293340E-03 +1.145791E-06 +5.665763E-03 +6.954001E-06 +2.709614E-01 +1.628033E-02 +1.293964E-03 +6.917833E-07 +6.177875E-01 +8.137663E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.314443E-01 +2.391247E-02 +1.873938E-02 +1.577380E-04 +6.121093E-01 +8.135846E-02 +1.073229E-02 +7.334175E-05 +2.617620E-02 +4.348152E-04 +3.166995E-01 +2.320865E-02 +2.036524E-02 +1.279210E-04 +6.658781E-01 +9.649554E-02 +9.461128E-03 +3.244725E-05 +2.313190E-02 +1.926149E-04 +3.297678E-01 +2.820763E-02 +1.923411E-03 +1.900405E-06 +8.093044E-01 +1.549168E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.456076E-01 +1.494726E-02 +1.107664E-02 +5.262577E-05 +4.808813E-01 +5.271759E-02 +5.560675E-03 +1.646259E-05 +1.363247E-02 +9.798701E-05 +2.427021E-01 +1.432013E-02 +1.238222E-02 +4.787991E-05 +4.944297E-01 +5.130649E-02 +6.815175E-03 +1.474275E-05 +1.672131E-02 +8.786745E-05 +3.752437E-01 +4.854811E-02 +3.614564E-03 +7.655432E-06 +6.782217E-01 +1.182298E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.647096E-01 +3.545521E-02 +1.786012E-02 +1.465595E-04 +6.852491E-01 +1.194618E-01 +8.922910E-03 +5.271906E-05 +2.195699E-02 +3.131230E-04 +3.739088E-01 +3.265037E-02 +2.215242E-02 +1.812199E-04 +7.104581E-01 +1.100949E-01 +1.112087E-02 +4.919605E-05 +2.716623E-02 +2.917209E-04 +3.646148E-01 +3.098153E-02 +3.468938E-03 +3.673617E-06 +6.439522E-01 +8.790186E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.988792E-01 +3.585276E-02 +1.769735E-02 +7.190181E-05 +7.203928E-01 +1.136161E-01 +8.994571E-03 +1.910703E-05 +2.195114E-02 +1.134487E-04 +2.180681E-01 +1.069385E-02 +1.207089E-02 +3.821459E-05 +4.543812E-01 +4.676007E-02 +5.078523E-03 +7.405974E-06 +1.242019E-02 +4.429054E-05 +3.387204E-01 +3.973516E-02 +3.338763E-03 +5.743416E-06 +6.143123E-01 +9.874284E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.573709E-01 +1.674382E-02 +1.789150E-02 +8.268291E-05 +4.926442E-01 +5.444271E-02 +1.080063E-02 +3.171383E-05 +2.644879E-02 +1.900877E-04 +3.675868E-01 +3.260765E-02 +3.091945E-02 +3.382288E-04 +6.630012E-01 +9.843066E-02 +1.886091E-02 +1.405418E-04 +4.605866E-02 +8.347384E-04 +2.393729E-01 +1.348727E-02 +9.089783E-03 +2.427644E-05 +5.291297E-01 +7.168179E-02 +4.297079E-03 +6.989668E-06 +1.057952E-02 +4.186885E-05 +3.231612E-01 +2.306799E-02 +1.049737E-02 +2.683860E-05 +6.962022E-01 +1.052928E-01 +3.906472E-03 +4.558902E-06 +9.688302E-03 +2.762523E-05 +3.081575E-01 +2.418407E-02 +1.147679E-02 +3.854959E-05 +6.947453E-01 +1.227514E-01 +5.492866E-03 +1.250383E-05 +1.366407E-02 +7.575691E-05 +3.601378E-01 +3.119766E-02 +1.856683E-02 +1.137752E-04 +6.790405E-01 +1.110025E-01 +1.005459E-02 +3.495544E-05 +2.461545E-02 +2.087020E-04 +3.505867E-01 +3.343394E-02 +1.851972E-02 +1.598653E-04 +6.695596E-01 +9.510495E-02 +1.018052E-02 +5.221675E-05 +2.496525E-02 +3.096426E-04 +3.832686E-01 +3.148793E-02 +1.999211E-02 +1.215996E-04 +7.990637E-01 +1.345049E-01 +1.016673E-02 +4.022763E-05 +2.487451E-02 +2.398045E-04 +3.238454E-01 +2.516992E-02 +1.603342E-02 +7.138171E-05 +6.930200E-01 +1.094620E-01 +9.610453E-03 +2.882518E-05 +2.367498E-02 +1.737604E-04 +2.433247E-01 +1.382228E-02 +1.026348E-02 +3.722424E-05 +6.058218E-01 +8.021503E-02 +5.222456E-03 +1.425419E-05 +1.293486E-02 +8.486641E-05 +3.405008E-01 +2.926643E-02 +1.702379E-02 +9.214884E-05 +6.732747E-01 +1.123595E-01 +7.705730E-03 +2.518557E-05 +1.891328E-02 +1.517838E-04 +2.619123E-01 +1.659685E-02 +6.964887E-03 +1.698405E-05 +5.916662E-01 +8.408950E-02 +2.958893E-03 +5.202669E-06 +7.307355E-03 +3.175251E-05 +5.917279E-01 +8.427634E-02 +3.884610E-02 +4.129413E-04 +1.054440E+00 +2.468893E-01 +2.320189E-02 +1.593770E-04 +5.690805E-02 +9.561233E-04 +4.377758E-01 +4.319166E-02 +2.986805E-02 +2.393363E-04 +8.248635E-01 +1.512547E-01 +1.372568E-02 +4.799401E-05 +3.349029E-02 +2.857467E-04 +3.421089E-01 +2.979789E-02 +2.249013E-02 +1.559001E-04 +6.850890E-01 +1.290414E-01 +1.160224E-02 +4.302043E-05 +2.846348E-02 +2.591994E-04 +3.722540E-01 +2.904052E-02 +2.335195E-02 +1.699377E-04 +6.863934E-01 +1.046451E-01 +1.439649E-02 +7.569328E-05 +3.524469E-02 +4.513332E-04 +3.015492E-01 +2.688128E-02 +2.018127E-02 +2.032826E-04 +6.714661E-01 +1.187385E-01 +1.212713E-02 +8.198620E-05 +2.973564E-02 +4.888576E-04 +2.528792E-01 +1.477470E-02 +1.121978E-02 +3.087195E-05 +6.406078E-01 +9.017936E-02 +5.885821E-03 +9.181268E-06 +1.457639E-02 +5.584147E-05 +2.038650E-01 +9.623965E-03 +1.310712E-02 +5.593573E-05 +4.908799E-01 +5.902527E-02 +6.946389E-03 +2.251232E-05 +1.702889E-02 +1.340271E-04 +1.139788E-01 +4.277809E-03 +4.614286E-03 +1.120138E-05 +2.704042E-01 +2.220192E-02 +1.076409E-03 +5.608463E-07 +2.705241E-03 +3.490247E-06 +2.370973E-01 +1.305565E-02 +7.409820E-03 +1.519920E-05 +5.419723E-01 +6.833854E-02 +3.405550E-03 +3.330468E-06 +8.520273E-03 +2.078583E-05 +2.382071E-01 +1.383356E-02 +9.254640E-03 +2.398783E-05 +6.083591E-01 +8.592760E-02 +4.554881E-03 +6.539019E-06 +1.130393E-02 +3.971676E-05 +2.799334E-01 +1.704488E-02 +1.745706E-02 +7.748191E-05 +5.327410E-01 +6.309686E-02 +8.374890E-03 +2.219332E-05 +2.046374E-02 +1.322507E-04 +3.299989E-01 +2.500153E-02 +1.662220E-02 +9.214247E-05 +5.777125E-01 +7.504937E-02 +9.185426E-03 +3.401334E-05 +2.245932E-02 +2.018294E-04 +2.480945E-01 +1.409562E-02 +1.027283E-02 +2.736596E-05 +5.305733E-01 +7.019314E-02 +4.898185E-03 +5.923984E-06 +1.209377E-02 +3.598246E-05 +2.435916E-01 +1.296299E-02 +1.168450E-02 +5.994065E-05 +5.303919E-01 +5.892047E-02 +6.394644E-03 +2.573114E-05 +1.573948E-02 +1.534027E-04 +3.382910E-01 +3.158552E-02 +1.585392E-02 +1.113895E-04 +6.399010E-01 +1.083590E-01 +6.841954E-03 +2.411006E-05 +1.678550E-02 +1.439749E-04 +3.981095E-01 +3.726016E-02 +2.142413E-02 +1.284486E-04 +7.603821E-01 +1.209106E-01 +1.046497E-02 +4.179315E-05 +2.573004E-02 +2.505335E-04 +3.874363E-01 +3.575389E-02 +2.107756E-02 +1.052519E-04 +8.211656E-01 +1.924162E-01 +1.256245E-02 +3.945660E-05 +3.082654E-02 +2.380887E-04 +4.456573E-01 +4.237155E-02 +2.596764E-02 +1.687922E-04 +8.729138E-01 +1.545134E-01 +1.510275E-02 +6.265801E-05 +3.696609E-02 +3.740070E-04 +3.992793E-01 +3.296068E-02 +2.048068E-02 +9.504244E-05 +8.331278E-01 +1.470933E-01 +1.127453E-02 +3.432997E-05 +2.760806E-02 +2.054207E-04 +3.886517E-01 +3.801441E-02 +2.253407E-02 +1.768474E-04 +7.039271E-01 +1.249249E-01 +1.248570E-02 +6.126807E-05 +3.052526E-02 +3.644213E-04 +3.138763E-01 +2.242983E-02 +2.691593E-02 +3.776077E-04 +6.449202E-01 +8.943446E-02 +1.834857E-02 +2.003405E-04 +4.483992E-02 +1.189482E-03 +3.304662E-01 +2.601947E-02 +1.705125E-02 +1.093125E-04 +7.576247E-01 +1.316185E-01 +8.728845E-03 +2.691230E-05 +2.149655E-02 +1.614671E-04 +3.542477E-01 +2.702674E-02 +2.469817E-02 +1.455831E-04 +7.115078E-01 +1.026190E-01 +1.552045E-02 +5.994661E-05 +3.791483E-02 +3.569299E-04 +2.614009E-01 +1.471316E-02 +9.277502E-03 +2.274093E-05 +5.564657E-01 +6.496526E-02 +3.380006E-03 +2.763922E-06 +8.448047E-03 +1.692336E-05 +4.068252E-01 +3.446693E-02 +2.245360E-02 +1.722882E-04 +7.532457E-01 +1.251856E-01 +1.415713E-02 +8.327501E-05 +3.483023E-02 +4.989609E-04 +3.836239E-01 +3.481679E-02 +2.946278E-02 +2.273732E-04 +6.795627E-01 +1.096060E-01 +1.842353E-02 +9.338437E-05 +4.498328E-02 +5.557198E-04 +2.678688E-01 +1.982541E-02 +1.936290E-03 +1.603437E-06 +5.664033E-01 +7.235502E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.540894E-01 +2.828987E-02 +1.435174E-02 +5.674926E-05 +6.973646E-01 +1.020010E-01 +6.832777E-03 +1.519381E-05 +1.682126E-02 +9.113421E-05 +3.455532E-01 +2.525192E-02 +2.020162E-02 +9.765516E-05 +7.040136E-01 +1.093402E-01 +1.088099E-02 +3.831955E-05 +2.661063E-02 +2.277881E-04 +2.776016E-01 +1.920243E-02 +2.052713E-03 +1.376197E-06 +6.585464E-01 +9.903277E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.091116E-01 +2.801257E-02 +2.024177E-02 +1.487498E-04 +6.138896E-01 +9.760701E-02 +1.262011E-02 +5.893128E-05 +3.079776E-02 +3.500582E-04 +4.487706E-01 +4.623185E-02 +4.373194E-02 +6.227096E-04 +8.118881E-01 +1.430088E-01 +2.909097E-02 +2.931199E-04 +7.090335E-02 +1.741024E-03 +4.974461E-01 +7.638705E-02 +5.262803E-03 +9.305275E-06 +8.298919E-01 +1.867351E-01 +4.223383E-07 +5.157240E-14 +1.028071E-06 +3.055838E-13 +3.906825E-01 +3.395073E-02 +2.733734E-02 +2.244620E-04 +7.121951E-01 +1.102604E-01 +1.681025E-02 +9.894122E-05 +4.107934E-02 +5.893557E-04 +2.885297E-01 +1.780804E-02 +1.916292E-02 +1.071634E-04 +6.439592E-01 +8.863510E-02 +1.116822E-02 +3.755311E-05 +2.741619E-02 +2.250014E-04 +3.733478E-01 +2.968457E-02 +2.417235E-03 +1.601471E-06 +8.160636E-01 +1.392543E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.807050E-01 +3.567435E-02 +1.639520E-02 +8.976183E-05 +8.352591E-01 +1.618917E-01 +7.549384E-03 +2.052873E-05 +1.868571E-02 +1.237926E-04 +4.113785E-01 +4.105596E-02 +2.760797E-02 +3.224706E-04 +8.312520E-01 +1.593787E-01 +1.755904E-02 +1.501020E-04 +4.309969E-02 +8.945939E-04 +4.264452E-01 +3.725052E-02 +2.761193E-03 +2.435650E-06 +9.907602E-01 +1.997766E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.190564E-01 +2.211691E-02 +2.297586E-02 +1.527095E-04 +6.146814E-01 +8.438195E-02 +1.406876E-02 +6.039729E-05 +3.440408E-02 +3.599638E-04 +3.441464E-01 +2.721527E-02 +2.208497E-02 +2.084304E-04 +6.754061E-01 +9.588273E-02 +1.249467E-02 +7.294249E-05 +3.053834E-02 +4.341021E-04 +4.902348E-01 +5.753291E-02 +4.141899E-02 +4.944456E-04 +8.677723E-01 +1.834890E-01 +2.563835E-02 +1.920950E-04 +6.257208E-02 +1.139519E-03 +3.219458E-01 +2.681583E-02 +1.509759E-02 +7.089200E-05 +7.411535E-01 +1.399501E-01 +7.267619E-03 +2.195119E-05 +1.781703E-02 +1.304167E-04 +3.460861E-01 +3.062496E-02 +2.305587E-02 +1.686535E-04 +7.279411E-01 +1.156782E-01 +1.567573E-02 +7.910023E-05 +3.843848E-02 +4.721498E-04 +3.706413E-01 +4.607848E-02 +2.101789E-02 +2.205947E-04 +6.385961E-01 +1.004148E-01 +1.096358E-02 +6.216344E-05 +2.682421E-02 +3.692258E-04 +4.326697E-01 +4.048321E-02 +2.321371E-02 +1.359451E-04 +8.057041E-01 +1.359077E-01 +1.178456E-02 +4.532462E-05 +2.882484E-02 +2.702988E-04 +3.700813E-01 +3.145900E-02 +1.629352E-02 +7.752174E-05 +7.168661E-01 +1.142671E-01 +8.563032E-03 +2.424964E-05 +2.094203E-02 +1.448273E-04 +4.171696E-01 +4.090198E-02 +1.942144E-02 +1.387048E-04 +7.827435E-01 +1.320064E-01 +1.123721E-02 +5.225505E-05 +2.747262E-02 +3.113824E-04 +3.936452E-01 +3.863175E-02 +1.864453E-02 +1.426388E-04 +7.621977E-01 +1.259923E-01 +1.114507E-02 +5.649068E-05 +2.735223E-02 +3.374133E-04 +4.146463E-01 +4.565600E-02 +2.051099E-02 +1.708674E-04 +8.092070E-01 +1.483485E-01 +1.068128E-02 +5.635889E-05 +2.623860E-02 +3.368690E-04 +3.502918E-01 +2.962552E-02 +2.245539E-02 +1.353853E-04 +6.798743E-01 +1.244576E-01 +1.299645E-02 +5.263601E-05 +3.188515E-02 +3.178466E-04 +3.664319E-01 +3.762644E-02 +1.543591E-02 +6.786902E-05 +7.257390E-01 +1.308037E-01 +7.920735E-03 +2.010753E-05 +1.954092E-02 +1.209187E-04 +2.881558E-01 +2.091566E-02 +1.253893E-02 +4.874752E-05 +6.867849E-01 +1.142347E-01 +6.304481E-03 +1.195351E-05 +1.563357E-02 +7.346975E-05 +4.226989E-01 +3.731519E-02 +1.464919E-02 +5.381568E-05 +9.709527E-01 +1.979486E-01 +5.624028E-03 +7.623772E-06 +1.400491E-02 +4.711591E-05 +4.177322E-01 +4.315006E-02 +1.820553E-02 +1.147713E-04 +8.897521E-01 +1.764672E-01 +8.738022E-03 +3.234864E-05 +2.155239E-02 +1.941292E-04 +4.092607E-01 +3.530369E-02 +2.094863E-02 +1.698700E-04 +9.371798E-01 +1.782535E-01 +1.252469E-02 +6.937532E-05 +3.076548E-02 +4.148830E-04 +3.694768E-01 +3.810772E-02 +1.842214E-02 +1.102654E-04 +7.440566E-01 +1.378317E-01 +1.077497E-02 +3.938422E-05 +2.649591E-02 +2.371539E-04 +3.561758E-01 +3.892218E-02 +1.971769E-02 +1.829864E-04 +7.613019E-01 +1.474240E-01 +1.192622E-02 +7.156692E-05 +2.936758E-02 +4.300051E-04 +2.527416E-01 +1.830741E-02 +1.645432E-02 +1.267160E-04 +5.925996E-01 +9.467855E-02 +8.871453E-03 +5.348101E-05 +2.184328E-02 +3.189633E-04 +3.300644E-01 +2.928166E-02 +1.882410E-02 +1.436109E-04 +7.237383E-01 +1.333008E-01 +9.519880E-03 +4.704072E-05 +2.342545E-02 +2.806433E-04 +3.764914E-01 +3.641557E-02 +1.821370E-02 +1.541319E-04 +7.651976E-01 +1.295027E-01 +1.036579E-02 +6.438503E-05 +2.552774E-02 +3.859463E-04 +2.999858E-01 +2.596841E-02 +2.166579E-02 +2.610355E-04 +6.375460E-01 +1.048518E-01 +1.456288E-02 +1.290713E-04 +3.563700E-02 +7.694303E-04 +4.842591E-01 +6.171881E-02 +2.321959E-02 +1.668178E-04 +8.833362E-01 +1.695389E-01 +1.327201E-02 +5.801276E-05 +3.246066E-02 +3.448393E-04 +5.214507E-01 +7.645410E-02 +2.106712E-02 +1.794528E-04 +8.149268E-01 +1.497643E-01 +1.099539E-02 +6.388195E-05 +2.693654E-02 +3.799114E-04 +4.660026E-01 +5.353148E-02 +2.651479E-02 +2.310878E-04 +8.389665E-01 +1.518968E-01 +1.651906E-02 +9.356467E-05 +4.039371E-02 +5.572969E-04 +5.848474E-01 +9.288276E-02 +4.985330E-02 +1.127634E-03 +1.055201E+00 +2.709678E-01 +3.348026E-02 +5.556505E-04 +8.197497E-02 +3.315235E-03 +4.139721E-01 +3.782370E-02 +1.933292E-02 +1.125655E-04 +9.059089E-01 +1.795184E-01 +9.265770E-03 +3.682450E-05 +2.278990E-02 +2.207751E-04 +3.882528E-01 +4.110026E-02 +1.561145E-02 +6.509900E-05 +6.762051E-01 +9.661914E-02 +7.561172E-03 +1.586464E-05 +1.861326E-02 +9.601481E-05 +3.055549E-01 +2.290439E-02 +1.869038E-02 +1.012810E-04 +6.519604E-01 +9.557502E-02 +1.045342E-02 +3.401674E-05 +2.561909E-02 +2.031141E-04 +3.784039E-01 +3.540818E-02 +1.144663E-02 +3.747954E-05 +7.982030E-01 +1.492246E-01 +3.743861E-03 +3.826041E-06 +9.336060E-03 +2.375886E-05 +3.893167E-01 +3.224146E-02 +1.465378E-02 +5.640030E-05 +8.519576E-01 +1.546319E-01 +7.851346E-03 +2.140423E-05 +1.941671E-02 +1.297116E-04 +4.628352E-01 +4.648532E-02 +3.104209E-02 +2.927221E-04 +9.424350E-01 +1.848692E-01 +1.805340E-02 +1.259139E-04 +4.411679E-02 +7.489332E-04 +5.036437E-01 +6.329907E-02 +3.701287E-02 +4.293191E-04 +9.845647E-01 +2.302864E-01 +2.189511E-02 +1.860705E-04 +5.357155E-02 +1.113432E-03 +3.651286E-01 +3.372208E-02 +1.898638E-02 +1.788233E-04 +7.283966E-01 +1.166080E-01 +1.159586E-02 +7.325796E-05 +2.849437E-02 +4.369152E-04 +3.712514E-01 +3.312825E-02 +2.124449E-02 +1.626400E-04 +7.116233E-01 +1.089685E-01 +1.329424E-02 +6.857983E-05 +3.257383E-02 +4.067854E-04 +2.729718E-01 +2.308771E-02 +5.130628E-03 +8.219165E-06 +7.257857E-01 +1.711422E-01 +1.662698E-03 +9.477833E-07 +4.314077E-03 +6.608852E-06 +2.780491E-01 +2.511642E-02 +1.327468E-02 +1.125406E-04 +5.815634E-01 +9.937798E-02 +6.802535E-03 +3.433855E-05 +1.678587E-02 +2.048151E-04 +4.836173E-01 +6.301714E-02 +5.126877E-03 +7.676969E-06 +7.235761E-01 +1.309488E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.031875E-01 +4.115015E-02 +2.401570E-02 +1.884922E-04 +7.226240E-01 +1.246862E-01 +1.365997E-02 +6.483039E-05 +3.348484E-02 +3.878250E-04 +3.969397E-01 +3.388912E-02 +1.954568E-02 +1.484093E-04 +8.502161E-01 +1.499123E-01 +1.000927E-02 +5.813943E-05 +2.452378E-02 +3.457355E-04 +5.393064E-01 +7.598949E-02 +4.596848E-03 +8.271188E-06 +9.233647E-01 +1.837028E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.305005E-01 +3.980527E-02 +3.622333E-02 +2.714888E-04 +7.562019E-01 +1.251870E-01 +2.210501E-02 +1.044787E-04 +5.402135E-02 +6.242016E-04 +4.150253E-01 +4.310022E-02 +3.055341E-02 +3.204376E-04 +8.383810E-01 +1.598344E-01 +1.799260E-02 +1.186722E-04 +4.421143E-02 +7.098098E-04 +5.053663E-01 +6.741744E-02 +4.302548E-03 +5.486457E-06 +1.001508E+00 +2.499069E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.305404E-01 +9.168988E-02 +4.204388E-02 +6.233654E-04 +1.019287E+00 +2.883833E-01 +2.692540E-02 +2.702944E-04 +6.578499E-02 +1.604933E-03 +2.979429E-01 +2.557053E-02 +1.270971E-02 +6.086980E-05 +6.133144E-01 +9.302940E-02 +6.554631E-03 +2.408980E-05 +1.614693E-02 +1.437968E-04 +2.985643E-01 +2.168009E-02 +1.675518E-03 +6.853400E-07 +6.603013E-01 +1.039248E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.978111E-01 +3.476147E-02 +2.583972E-02 +1.494411E-04 +8.471730E-01 +1.545734E-01 +1.585722E-02 +6.154411E-05 +3.885738E-02 +3.693284E-04 +5.202672E-01 +6.063991E-02 +2.696218E-02 +2.266432E-04 +1.106648E+00 +2.681959E-01 +1.522211E-02 +8.625903E-05 +3.740299E-02 +5.175445E-04 +4.764994E-01 +7.395612E-02 +4.506348E-03 +1.035606E-05 +9.157662E-01 +2.118046E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.132742E-01 +4.146437E-02 +3.375089E-02 +4.225536E-04 +7.921867E-01 +1.381808E-01 +2.045881E-02 +1.753311E-04 +5.005367E-02 +1.042462E-03 +2.661077E-01 +1.751445E-02 +1.121639E-02 +3.636881E-05 +5.712386E-01 +7.771405E-02 +6.533439E-03 +1.250013E-05 +1.610362E-02 +7.471829E-05 +3.425750E-01 +3.408776E-02 +1.156146E-02 +5.411528E-05 +8.276841E-01 +1.940431E-01 +6.001009E-03 +2.103242E-05 +1.484593E-02 +1.276999E-04 +3.790958E-01 +5.528325E-02 +2.035138E-02 +2.087186E-04 +7.464973E-01 +1.698540E-01 +1.056382E-02 +7.655648E-05 +2.594266E-02 +4.578317E-04 +4.673249E-01 +5.113730E-02 +2.751426E-02 +1.816642E-04 +8.149126E-01 +1.677855E-01 +1.476997E-02 +5.736790E-05 +3.624040E-02 +3.439634E-04 +4.969678E-01 +6.703663E-02 +3.324010E-02 +4.839680E-04 +7.957816E-01 +1.402618E-01 +1.787791E-02 +1.889011E-04 +4.366390E-02 +1.122265E-03 +3.987041E-01 +3.319083E-02 +1.717610E-02 +7.614560E-05 +8.405362E-01 +1.455051E-01 +9.116726E-03 +2.731734E-05 +2.243998E-02 +1.635133E-04 +3.557016E-01 +2.733014E-02 +1.946614E-02 +9.722258E-05 +8.042289E-01 +1.325000E-01 +1.081675E-02 +3.317997E-05 +2.660183E-02 +1.988697E-04 +4.238750E-01 +5.071137E-02 +3.860553E-02 +4.907754E-04 +6.818241E-01 +1.059015E-01 +2.594551E-02 +2.253483E-04 +6.329673E-02 +1.337276E-03 +4.845466E-01 +4.739927E-02 +3.781105E-02 +3.188017E-04 +8.754691E-01 +1.592141E-01 +2.256002E-02 +1.269857E-04 +5.521664E-02 +7.580381E-04 +4.762135E-01 +5.411538E-02 +2.732678E-02 +2.310254E-04 +7.810833E-01 +1.311139E-01 +1.597068E-02 +8.360266E-05 +3.898613E-02 +4.967345E-04 +4.626499E-01 +6.385872E-02 +2.294200E-02 +1.768315E-04 +9.372052E-01 +2.270799E-01 +1.299342E-02 +6.187834E-05 +3.189449E-02 +3.716202E-04 +3.261518E-01 +3.233233E-02 +1.344996E-02 +7.296974E-05 +6.438319E-01 +1.139836E-01 +6.902941E-03 +2.347639E-05 +1.691710E-02 +1.400440E-04 +4.352336E-01 +5.775668E-02 +2.123686E-02 +1.661853E-04 +8.342632E-01 +1.707879E-01 +1.088157E-02 +4.787467E-05 +2.666381E-02 +2.851629E-04 +4.309663E-01 +3.819583E-02 +2.280285E-02 +1.438300E-04 +8.522076E-01 +1.478770E-01 +1.272222E-02 +4.969054E-05 +3.123456E-02 +2.971660E-04 +3.545417E-01 +3.176670E-02 +2.104462E-02 +1.973843E-04 +6.924468E-01 +1.084661E-01 +1.359515E-02 +9.318781E-05 +3.323698E-02 +5.537381E-04 +2.601793E-01 +1.854037E-02 +7.292982E-03 +2.119725E-05 +5.911869E-01 +8.786472E-02 +3.411247E-03 +4.494329E-06 +8.395279E-03 +2.694816E-05 +2.856586E-01 +1.974948E-02 +1.054334E-02 +2.769649E-05 +6.966115E-01 +1.097272E-01 +4.020408E-03 +5.909802E-06 +1.002274E-02 +3.621226E-05 +2.990262E-01 +2.895771E-02 +1.524669E-02 +1.075200E-04 +5.511247E-01 +7.221915E-02 +7.850283E-03 +4.154474E-05 +1.921607E-02 +2.483852E-04 +2.734313E-01 +2.247782E-02 +1.398383E-02 +1.162049E-04 +6.576619E-01 +1.210529E-01 +8.907424E-03 +5.814670E-05 +2.190592E-02 +3.497392E-04 +2.815363E-01 +1.901069E-02 +1.186929E-02 +3.364035E-05 +6.515902E-01 +9.851410E-02 +6.886950E-03 +1.323736E-05 +1.695569E-02 +7.940407E-05 +3.484143E-01 +2.809808E-02 +2.158706E-02 +1.746308E-04 +6.459834E-01 +9.326184E-02 +1.339059E-02 +7.862843E-05 +3.279132E-02 +4.674908E-04 +4.872293E-01 +6.299198E-02 +4.535678E-03 +8.886458E-06 +7.995378E-01 +1.391013E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.517270E-01 +4.298933E-02 +2.983900E-02 +2.534533E-04 +9.003348E-01 +1.639649E-01 +1.797753E-02 +1.058508E-04 +4.408492E-02 +6.323324E-04 +3.840449E-01 +3.048942E-02 +2.304747E-02 +1.451405E-04 +7.696800E-01 +1.200152E-01 +1.291566E-02 +4.856104E-05 +3.169233E-02 +2.900548E-04 +3.899986E-01 +4.842017E-02 +3.398750E-02 +5.012913E-04 +7.289300E-01 +1.213432E-01 +2.225136E-02 +2.225919E-04 +5.443442E-02 +1.322013E-03 +5.598647E-01 +7.209791E-02 +3.636258E-02 +2.972603E-04 +9.425990E-01 +1.980189E-01 +2.180409E-02 +1.030147E-04 +5.325326E-02 +6.135525E-04 +5.137462E-01 +5.449795E-02 +2.968013E-02 +2.213205E-04 +1.089121E+00 +2.416550E-01 +1.633665E-02 +8.162297E-05 +4.019388E-02 +4.875490E-04 +4.289801E-01 +4.093477E-02 +2.010221E-02 +9.125869E-05 +8.441503E-01 +1.577640E-01 +1.121134E-02 +3.076206E-05 +2.749358E-02 +1.837347E-04 +4.669049E-01 +4.985409E-02 +3.155885E-02 +2.843354E-04 +8.541836E-01 +1.586915E-01 +1.971407E-02 +1.199500E-04 +4.819514E-02 +7.142000E-04 +5.476118E-01 +7.964842E-02 +3.671613E-02 +5.048684E-04 +9.819505E-01 +2.224104E-01 +2.057791E-02 +1.723983E-04 +5.020646E-02 +1.023284E-03 +3.570430E-01 +3.236156E-02 +2.642812E-02 +2.499237E-04 +6.566192E-01 +1.028336E-01 +1.658528E-02 +1.090997E-04 +4.052667E-02 +6.501756E-04 +3.157944E-01 +2.754029E-02 +2.510614E-03 +2.597981E-06 +6.619048E-01 +1.052488E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.796550E-01 +1.863344E-02 +1.041219E-02 +5.191551E-05 +6.609168E-01 +1.042598E-01 +6.108228E-03 +2.425637E-05 +1.502705E-02 +1.442032E-04 +2.179231E-01 +1.148681E-02 +1.158771E-02 +5.115165E-05 +5.338009E-01 +6.387573E-02 +6.955519E-03 +2.069739E-05 +1.714723E-02 +1.242632E-04 +2.723379E-01 +1.612703E-02 +1.661668E-02 +8.393477E-05 +6.115831E-01 +7.762931E-02 +8.158618E-03 +2.912656E-05 +2.012066E-02 +1.734434E-04 +4.177079E-01 +5.021689E-02 +1.465133E-02 +8.170592E-05 +8.821701E-01 +2.073297E-01 +5.279873E-03 +1.131685E-05 +1.297780E-02 +6.813348E-05 +4.389866E-01 +5.718767E-02 +2.509233E-02 +2.986289E-04 +8.525743E-01 +1.748816E-01 +1.369565E-02 +1.018308E-04 +3.355369E-02 +6.079070E-04 +4.137349E-01 +4.314157E-02 +2.371796E-02 +2.559421E-04 +7.149288E-01 +1.144426E-01 +1.335685E-02 +1.050731E-04 +3.269465E-02 +6.277716E-04 +6.493181E-01 +8.850590E-02 +4.003436E-02 +4.029382E-04 +1.240508E+00 +3.254748E-01 +2.412272E-02 +1.510168E-04 +5.916870E-02 +9.052554E-04 +4.999253E-01 +5.822974E-02 +2.648913E-02 +2.036552E-04 +8.603421E-01 +1.542102E-01 +1.503446E-02 +7.780397E-05 +3.680872E-02 +4.627887E-04 +2.140322E-01 +1.009989E-02 +9.821979E-04 +2.888126E-07 +5.412641E-01 +6.614023E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.473664E-01 +1.445695E-02 +1.115793E-02 +4.639483E-05 +6.402572E-01 +1.087519E-01 +6.977317E-03 +2.012165E-05 +1.726283E-02 +1.209389E-04 +4.106842E-01 +4.252374E-02 +2.865498E-02 +2.625513E-04 +6.937372E-01 +1.072413E-01 +1.818386E-02 +1.104345E-04 +4.446846E-02 +6.595035E-04 +4.211497E-01 +4.077958E-02 +2.971575E-03 +2.487030E-06 +8.520797E-01 +1.481605E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.226188E-01 +5.944362E-02 +2.960968E-02 +2.245340E-04 +9.222348E-01 +1.736139E-01 +1.631529E-02 +7.908945E-05 +3.982616E-02 +4.708490E-04 +4.418421E-01 +4.437957E-02 +2.517739E-02 +1.907600E-04 +7.787605E-01 +1.249305E-01 +1.536054E-02 +7.917968E-05 +3.755245E-02 +4.723672E-04 +4.343976E-01 +4.457981E-02 +3.388911E-03 +3.822692E-06 +8.737430E-01 +1.764940E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.598455E-01 +2.729560E-02 +2.418740E-02 +2.378985E-04 +7.302175E-01 +1.135251E-01 +1.616906E-02 +1.246680E-04 +3.949063E-02 +7.402107E-04 +2.619461E-01 +1.513254E-02 +8.926754E-03 +1.978809E-05 +6.435721E-01 +9.157538E-02 +4.651147E-03 +7.139204E-06 +1.149560E-02 +4.303315E-05 +3.477772E-01 +3.056585E-02 +1.223437E-02 +5.499474E-05 +7.995504E-01 +1.386715E-01 +6.975627E-03 +1.888125E-05 +1.734787E-02 +1.146221E-04 +3.619349E-01 +3.702197E-02 +1.807440E-02 +1.270513E-04 +7.778669E-01 +1.474144E-01 +1.099124E-02 +4.917455E-05 +2.701829E-02 +2.940738E-04 +3.162191E-01 +2.268893E-02 +1.158071E-02 +3.480324E-05 +7.692808E-01 +1.327980E-01 +4.095665E-03 +5.158750E-06 +1.022758E-02 +3.212100E-05 +5.342532E-01 +8.478330E-02 +2.903573E-02 +3.357498E-04 +1.120085E+00 +3.408745E-01 +1.690122E-02 +1.279478E-04 +4.141172E-02 +7.637947E-04 +4.496065E-01 +6.505133E-02 +2.635557E-02 +3.323123E-04 +9.612470E-01 +2.510212E-01 +1.538003E-02 +1.327695E-04 +3.782149E-02 +7.945656E-04 +4.847046E-01 +5.967696E-02 +2.535687E-02 +2.173087E-04 +1.077043E+00 +2.811943E-01 +1.097101E-02 +3.799483E-05 +2.709062E-02 +2.304602E-04 +5.175767E-01 +5.719466E-02 +1.973241E-02 +8.575798E-05 +9.679612E-01 +2.056860E-01 +8.303999E-03 +1.805765E-05 +2.040361E-02 +1.089188E-04 +5.517001E-01 +6.994072E-02 +2.497158E-02 +1.771114E-04 +1.098639E+00 +2.726418E-01 +1.399598E-02 +6.099098E-05 +3.430186E-02 +3.665835E-04 +2.863207E-01 +1.857525E-02 +8.336069E-03 +1.649811E-05 +6.476326E-01 +9.010693E-02 +3.429198E-03 +3.106979E-06 +8.565244E-03 +1.898164E-05 +2.620263E-01 +1.413830E-02 +1.486260E-02 +6.016669E-05 +5.979318E-01 +7.637631E-02 +7.005392E-03 +1.590920E-05 +1.730862E-02 +9.593066E-05 +3.655323E-01 +3.067786E-02 +2.564543E-02 +2.165772E-04 +7.572344E-01 +1.217887E-01 +1.473507E-02 +8.140802E-05 +3.619562E-02 +4.852029E-04 +3.419278E-01 +2.642670E-02 +2.272345E-02 +1.520173E-04 +6.406916E-01 +8.632502E-02 +1.398347E-02 +6.589014E-05 +3.414144E-02 +3.923320E-04 +4.462443E-01 +4.882939E-02 +3.221856E-02 +4.381937E-04 +7.714529E-01 +1.298248E-01 +2.030822E-02 +2.050592E-04 +4.959466E-02 +1.221874E-03 +4.241623E-01 +4.238067E-02 +3.017189E-02 +3.192439E-04 +8.184443E-01 +1.472953E-01 +1.653484E-02 +9.828819E-05 +4.040308E-02 +5.837728E-04 +5.468649E-01 +6.932849E-02 +3.506986E-02 +3.414126E-04 +9.081801E-01 +1.955422E-01 +2.067323E-02 +1.252268E-04 +5.051840E-02 +7.466097E-04 +4.049238E-01 +3.619626E-02 +1.820878E-02 +8.370629E-05 +7.947251E-01 +1.471574E-01 +6.827689E-03 +1.877378E-05 +1.682488E-02 +1.119968E-04 +3.181706E-01 +2.312073E-02 +1.853503E-02 +9.670338E-05 +7.307830E-01 +1.165409E-01 +1.133833E-02 +4.507577E-05 +2.784164E-02 +2.700020E-04 +4.535053E-01 +4.781822E-02 +2.298094E-02 +1.379435E-04 +9.393810E-01 +1.913101E-01 +1.088324E-02 +3.746573E-05 +2.670626E-02 +2.245210E-04 +3.711608E-01 +3.011209E-02 +2.135571E-02 +1.326869E-04 +7.941852E-01 +1.316708E-01 +1.330360E-02 +5.321889E-05 +3.253974E-02 +3.167152E-04 +4.121174E-01 +3.478939E-02 +1.586472E-02 +6.068678E-05 +1.040216E+00 +2.214218E-01 +5.758712E-03 +1.002333E-05 +1.426440E-02 +6.037119E-05 +4.435090E-01 +4.161468E-02 +1.602560E-02 +5.789996E-05 +1.002899E+00 +2.058070E-01 +7.221739E-03 +1.233021E-05 +1.798457E-02 +7.523251E-05 +4.605997E-01 +5.734630E-02 +1.933007E-02 +1.409861E-04 +1.082221E+00 +2.959635E-01 +9.105646E-03 +3.669942E-05 +2.256185E-02 +2.209209E-04 +4.760643E-01 +5.548670E-02 +2.305845E-02 +1.988737E-04 +1.108307E+00 +2.819143E-01 +1.141829E-02 +5.438996E-05 +2.821950E-02 +3.289724E-04 +2.990870E-01 +2.614044E-02 +1.379131E-02 +6.530395E-05 +6.526311E-01 +1.174214E-01 +6.340014E-03 +1.465241E-05 +1.577489E-02 +8.917934E-05 +4.539651E-01 +5.989053E-02 +3.706059E-02 +7.451853E-04 +9.479066E-01 +2.087790E-01 +2.371011E-02 +3.624597E-04 +5.802863E-02 +2.153033E-03 +3.550875E-01 +3.154848E-02 +1.517370E-02 +6.019907E-05 +8.233200E-01 +1.604220E-01 +7.096967E-03 +1.239328E-05 +1.749843E-02 +7.496910E-05 +2.669672E-01 +1.655119E-02 +9.921355E-03 +2.850701E-05 +6.229281E-01 +9.065592E-02 +3.525996E-03 +3.622432E-06 +8.763114E-03 +2.217997E-05 +3.117641E-01 +2.706928E-02 +1.301318E-02 +6.380468E-05 +7.069278E-01 +1.223940E-01 +5.520667E-03 +1.450549E-05 +1.364327E-02 +8.705049E-05 +4.253175E-01 +4.226465E-02 +3.130303E-02 +2.892976E-04 +8.847586E-01 +1.831350E-01 +1.869718E-02 +1.080033E-04 +4.581100E-02 +6.437392E-04 +4.373877E-01 +4.563513E-02 +2.171789E-02 +1.852469E-04 +8.427752E-01 +1.639163E-01 +1.193320E-02 +6.904423E-05 +2.934222E-02 +4.124494E-04 +3.309335E-01 +2.360277E-02 +1.782689E-02 +7.495262E-05 +7.435456E-01 +1.161667E-01 +9.806683E-03 +2.456418E-05 +2.407241E-02 +1.471923E-04 +3.295651E-01 +2.892136E-02 +9.136199E-03 +2.751683E-05 +7.402491E-01 +1.444989E-01 +4.232396E-03 +6.593472E-06 +1.064377E-02 +4.140318E-05 +2.646177E-01 +1.820511E-02 +6.560072E-03 +1.355487E-05 +6.853657E-01 +1.299412E-01 +2.501821E-03 +2.093278E-06 +6.398968E-03 +1.362528E-05 +5.276217E-01 +6.992447E-02 +4.094462E-02 +5.970189E-04 +1.098251E+00 +3.357754E-01 +2.710360E-02 +2.943539E-04 +6.624993E-02 +1.748479E-03 +4.706582E-01 +4.760382E-02 +1.885346E-02 +7.652927E-05 +9.303306E-01 +1.833640E-01 +9.384721E-03 +2.029091E-05 +2.290445E-02 +1.208163E-04 +5.382357E-01 +6.759212E-02 +2.981285E-02 +2.571507E-04 +1.218516E+00 +3.361214E-01 +1.807366E-02 +9.486632E-05 +4.459288E-02 +5.717156E-04 +5.926040E-01 +7.178398E-02 +4.360128E-02 +5.324114E-04 +1.307820E+00 +3.690548E-01 +2.600218E-02 +2.365448E-04 +6.382907E-02 +1.415541E-03 +tally 2: +2.410000E+00 +1.233100E+00 +2.410000E+00 +1.233100E+00 +8.400000E-01 +1.434000E-01 +8.400000E-01 +1.434000E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.262000E+01 +3.207480E+01 +1.262000E+01 +3.207480E+01 +6.000000E-02 +1.800000E-03 +6.000000E-02 +1.800000E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.220000E+00 +1.365100E+01 +8.220000E+00 +1.365100E+01 +9.000000E-02 +2.300000E-03 +9.000000E-02 +2.300000E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.430000E+00 +2.409500E+00 +3.430000E+00 +2.409500E+00 +4.000000E-02 +4.000000E-04 +4.000000E-02 +4.000000E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.450000E+00 +4.253000E-01 +1.450000E+00 +4.253000E-01 +7.000000E-02 +1.900000E-03 +7.000000E-02 +1.900000E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-02 +1.000000E-04 +1.000000E-02 +1.000000E-04 +1.570000E+00 +5.095000E-01 +1.570000E+00 +5.095000E-01 +9.000000E-02 +2.300000E-03 +9.000000E-02 +2.300000E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.000000E-02 +1.900000E-03 +9.000000E-02 +1.900000E-03 +2.010000E+00 +8.355000E-01 +2.010000E+00 +8.355000E-01 +1.000000E-02 +1.000000E-04 +1.000000E-02 +1.000000E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-02 +1.000000E-04 +1.000000E-02 +1.000000E-04 +2.000000E-02 +2.000000E-04 +2.000000E-02 +2.000000E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.000000E-02 +6.000000E-04 +4.000000E-02 +6.000000E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-02 +1.000000E-04 +1.000000E-02 +1.000000E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-02 +1.000000E-04 +1.000000E-02 +1.000000E-04 +1.000000E-02 +1.000000E-04 +1.000000E-02 +1.000000E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.000000E-02 +4.000000E-04 +4.000000E-02 +4.000000E-04 +5.000000E-02 +5.000000E-04 +5.000000E-02 +5.000000E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-02 +1.000000E-04 +1.000000E-02 +1.000000E-04 +7.000000E-02 +2.100000E-03 +7.000000E-02 +2.100000E-03 +1.000000E-01 +2.600000E-03 +1.000000E-01 +2.600000E-03 +8.000000E-02 +1.600000E-03 +8.000000E-02 +1.600000E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.600000E-01 +1.528000E-01 +8.600000E-01 +1.528000E-01 +1.800000E-01 +8.000000E-03 +1.800000E-01 +8.000000E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.600000E-01 +1.420000E-02 +2.600000E-01 +1.420000E-02 +1.600000E-01 +6.200000E-03 +1.600000E-01 +6.200000E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.000000E-02 +9.000000E-04 +5.000000E-02 +9.000000E-04 +1.200000E-01 +3.800000E-03 +1.200000E-01 +3.800000E-03 +2.000000E-02 +2.000000E-04 +2.000000E-02 +2.000000E-04 +1.000000E-02 +1.000000E-04 +1.000000E-02 +1.000000E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.000000E-02 +2.300000E-03 +9.000000E-02 +2.300000E-03 +1.500000E-01 +7.300000E-03 +1.500000E-01 +7.300000E-03 +3.000000E-02 +5.000000E-04 +3.000000E-02 +5.000000E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.400000E-01 +4.000000E-03 +1.400000E-01 +4.000000E-03 +1.000000E-01 +2.400000E-03 +1.000000E-01 +2.400000E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.000000E-02 +6.000000E-04 +4.000000E-02 +6.000000E-04 +1.140000E+00 +2.858000E-01 +1.140000E+00 +2.858000E-01 diff --git a/tests/test_mg_tallies/test_mg_tallies.py b/tests/test_mg_tallies/test_mg_tallies.py new file mode 100644 index 0000000000..a9b1860c59 --- /dev/null +++ b/tests/test_mg_tallies/test_mg_tallies.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python + +import os +import sys +sys.path.insert(0, os.pardir) +from testing_harness import TestHarness, PyAPITestHarness +import openmc + + +class MGTalliesTestHarness(PyAPITestHarness): + def _build_inputs(self): + # Instantiate a tally mesh + mesh = openmc.Mesh(mesh_id=1) + mesh.type = 'regular' + mesh.dimension = [17, 17, 1] + mesh.lower_left = [0.0, 0.0, 0.0] + mesh.upper_right = [21.42, 21.42, 100.0] + + # Instantiate some tally filters + energy_filter = openmc.Filter(type='energy', + bins=[1E-11, 0.0635E-6, 10.0E-6, 1.0E-4, + 1.0E-3, 0.5, 1.0, 20.0]) + energyout_filter = openmc.Filter(type='energyout', + bins=[1E-11, 0.0635E-6, 10.0E-6, + 1.0E-4, 1.0E-3, 0.5, 1.0, 20.0]) + mesh_filter = openmc.Filter() + mesh_filter.mesh = mesh + + mat_filter = openmc.Filter(type='material', bins=[1,2,3]) + + tally1 = openmc.Tally(tally_id=1) + tally1.add_filter(mesh_filter) + tally1.add_score('total') + tally1.add_score('absorption') + tally1.add_score('flux') + tally1.add_score('fission') + tally1.add_score('nu-fission') + + tally2 = openmc.Tally(tally_id=2) + tally2.add_filter(mat_filter) + tally2.add_filter(energy_filter) + tally2.add_filter(energyout_filter) + tally2.add_score('scatter') + tally2.add_score('nu-scatter') + + self._input_set.tallies = openmc.TalliesFile() + self._input_set.tallies.add_mesh(mesh) + self._input_set.tallies.add_tally(tally1) + self._input_set.tallies.add_tally(tally2) + + super(MGTalliesTestHarness, self)._build_inputs() + + def _cleanup(self): + super(MGTalliesTestHarness, self)._cleanup() + f = os.path.join(os.getcwd(), 'tallies.xml') + if os.path.exists(f): os.remove(f) + + +if __name__ == '__main__': + harness = MGTalliesTestHarness('statepoint.10.*', True, mg=True) + harness.main() From a093d6fde8e4db4615f780356e9a9f4ea245b44b Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Tue, 17 Nov 2015 21:28:57 -0500 Subject: [PATCH 044/650] Added option tp print logfile for failing tests --- tests/run_tests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/run_tests.py b/tests/run_tests.py index 338732c142..e62629401a 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -470,6 +470,7 @@ for key in iter(tests): logfilename = os.path.splitext(logfilename)[0] logfilename = logfilename + '_{0}.log'.format(test.name) shutil.copy(logfile[0], logfilename) + with open(logfilename) as fh: print(fh.read()) # Clear build directory and remove binary and hdf5 files shutil.rmtree('build', ignore_errors=True) From bd39cbe59ec51ce66dd87e27d3bb14178e40002a Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 18 Nov 2015 04:52:38 -0500 Subject: [PATCH 045/650] Fixed failing MPI case - didnt update MPI_BANK type for addition of group - and cleaned up travis log dump change --- src/initialize.F90 | 18 ++++++++++-------- tests/run_tests.py | 1 - 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/initialize.F90 b/src/initialize.F90 index 128759e429..7aa351b498 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -202,17 +202,17 @@ contains subroutine initialize_mpi() - integer :: bank_blocks(5) ! Count for each datatype + integer :: bank_blocks(6) ! Count for each datatype #ifdef MPIF08 - type(MPI_Datatype) :: bank_types(5) + type(MPI_Datatype) :: bank_types(6) type(MPI_Datatype) :: result_types(1) type(MPI_Datatype) :: temp_type #else - integer :: bank_types(5) ! Datatypes + integer :: bank_types(6) ! Datatypes integer :: result_types(1) ! Datatypes integer :: temp_type ! temporary derived type #endif - integer(MPI_ADDRESS_KIND) :: bank_disp(5) ! Displacements + integer(MPI_ADDRESS_KIND) :: bank_disp(6) ! Displacements integer :: result_blocks(1) ! Count for each datatype integer(MPI_ADDRESS_KIND) :: result_disp(1) ! Displacements integer(MPI_ADDRESS_KIND) :: result_base_disp ! Base displacement @@ -246,15 +246,17 @@ contains call MPI_GET_ADDRESS(b % xyz, bank_disp(2), mpi_err) call MPI_GET_ADDRESS(b % uvw, bank_disp(3), mpi_err) call MPI_GET_ADDRESS(b % E, bank_disp(4), mpi_err) - call MPI_GET_ADDRESS(b % delayed_group, bank_disp(5), mpi_err) + call MPI_GET_ADDRESS(b % g, bank_disp(5), mpi_err) + call MPI_GET_ADDRESS(b % delayed_group, bank_disp(6), mpi_err) ! Adjust displacements bank_disp = bank_disp - bank_disp(1) ! Define MPI_BANK for fission sites - bank_blocks = (/ 1, 3, 3, 1, 1 /) - bank_types = (/ MPI_REAL8, MPI_REAL8, MPI_REAL8, MPI_REAL8, MPI_INTEGER /) - call MPI_TYPE_CREATE_STRUCT(5, bank_blocks, bank_disp, & + bank_blocks = (/ 1, 3, 3, 1, 1, 1 /) + bank_types = (/ MPI_REAL8, MPI_REAL8, MPI_REAL8, MPI_REAL8, & + MPI_INTEGER, MPI_INTEGER /) + call MPI_TYPE_CREATE_STRUCT(6, bank_blocks, bank_disp, & bank_types, MPI_BANK, mpi_err) call MPI_TYPE_COMMIT(MPI_BANK, mpi_err) diff --git a/tests/run_tests.py b/tests/run_tests.py index e62629401a..338732c142 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -470,7 +470,6 @@ for key in iter(tests): logfilename = os.path.splitext(logfilename)[0] logfilename = logfilename + '_{0}.log'.format(test.name) shutil.copy(logfile[0], logfilename) - with open(logfilename) as fh: print(fh.read()) # Clear build directory and remove binary and hdf5 files shutil.rmtree('build', ignore_errors=True) From d6f71ff6034af1e75f05cc613cb43934b19cbe52 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 18 Nov 2015 20:47:54 -0500 Subject: [PATCH 046/650] Revised existing MG tests to use my 1d problem since I had angular xs and tabular scattering kernels already generated; added tests for max_order and nuclidic data instead of macroscopic mgxs data. Fixed a bug related to doing the nuclidic data. --- src/input_xml.F90 | 7 + src/mgxs_data.F90 | 10 +- src/nuclide_header.F90 | 3 +- tests/1d_mgxs.xml | 9859 ++++++++++++++++++ tests/c5g7_mgxs.xml | 383 - tests/input_set.py | 144 +- tests/test_mg_basic/inputs_true.dat | 2 +- tests/test_mg_basic/results_true.dat | 2 +- tests/test_mg_max_order/inputs_true.dat | 1 + tests/test_mg_max_order/results_true.dat | 2 + tests/test_mg_max_order/test_mg_max_order.py | 85 + tests/test_mg_nuclide/inputs_true.dat | 1 + tests/test_mg_nuclide/results_true.dat | 2 + tests/test_mg_nuclide/test_mg_nuclide.py | 84 + tests/test_mg_tallies/inputs_true.dat | 2 +- tests/test_mg_tallies/results_true.dat | 6382 ++++++------ tests/test_mg_tallies/test_mg_tallies.py | 6 +- 17 files changed, 12991 insertions(+), 3984 deletions(-) create mode 100644 tests/1d_mgxs.xml delete mode 100644 tests/c5g7_mgxs.xml create mode 100644 tests/test_mg_max_order/inputs_true.dat create mode 100644 tests/test_mg_max_order/results_true.dat create mode 100644 tests/test_mg_max_order/test_mg_max_order.py create mode 100644 tests/test_mg_nuclide/inputs_true.dat create mode 100644 tests/test_mg_nuclide/results_true.dat create mode 100644 tests/test_mg_nuclide/test_mg_nuclide.py diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 8e3e8d8e9c..b3d85e4688 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -4463,6 +4463,13 @@ contains else listing % zaid = -1 end if + if (check_for_node(node_xsdata, "awr")) then + call get_node_value(node_xsdata, "awr", listing % awr) + else + ! Set to a default of 1; this allows a macroscopic library to still + ! be used with materials with atom/b-cm units for testing purposes + listing % awr = ONE + end if if (check_for_node(node_xsdata, "kT")) then call get_node_value(node_xsdata, "kT", listing % kT) else diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index b89c73d51a..10f66882fe 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -653,18 +653,18 @@ contains mat => materials(i_mat) ! Check to see how our nuclides are represented - ! Assume all are the same type - ! Therefore type(nuclides(1) % obj) dictates type(macroxs) + ! Force all to be the same type + ! Therefore type(nuclides(mat % nuclide(1)) % obj) dictates type(macroxs) ! At the same time, we will find the scattering type, as that will dictate ! how we allocate the scatter object within macroxs - legendre_mu_points = nuclides_MG(1) % obj % legendre_mu_points - select type(nuc => nuclides_MG(1) % obj) + legendre_mu_points = nuclides_MG(mat % nuclide(1)) % obj % legendre_mu_points + select type(nuc => nuclides_MG(mat % nuclide(1)) % obj) type is (Nuclide_Iso) representation = ISOTROPIC type is (Nuclide_Angle) representation = ANGLE end select - scatt_type = nuclides_MG(1) % obj % scatt_type + scatt_type = nuclides_MG(mat % nuclide(1)) % obj % scatt_type ! Now allocate accordingly select case(representation) diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 7786537db5..5102528d05 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -543,8 +543,9 @@ module nuclide_header ! Basic nuclide information write(unit_,*) 'Nuclide ' // trim(this % name) if (this % zaid > 0) then - ! Dont print if data was macroscopic and thus zaid would be nonsense + ! Dont print if data was macroscopic and thus zaid & AWR would be nonsense write(unit_,*) ' zaid = ' // trim(to_str(this % zaid)) + write(unit_,*) ' awr = ' // trim(to_str(this % awr)) end if write(unit_,*) ' kT = ' // trim(to_str(this % kT)) if (this % scatt_type == ANGLE_LEGENDRE) then diff --git a/tests/1d_mgxs.xml b/tests/1d_mgxs.xml new file mode 100644 index 0000000000..33b20464b6 --- /dev/null +++ b/tests/1d_mgxs.xml @@ -0,0 +1,9859 @@ + + + 1 + 0.0000000E+00 2.0000000E+01 + + + uo2_iso.71c + uo2_iso.71c + 2.5300000E-08 + 5 + true + isotropic + + 4.1022364E-01 + + + 3.4687432E-02 + + + 4.9631431E-02 + + + 1.0000000E+00 + + + 2.0019027E-02 + + + 3.7564339E-01 + + 4.4983802E-02 + + 2.2781624E-02 + + 1.1639469E-02 + + 7.1975833E-03 + + 3.5887673E-03 + + + 1.0002764E+00 + + + + + clad_iso.71c + clad_iso.71c + 2.5300000E-08 + 5 + false + isotropic + + 3.0736836E-01 + + + 1.7027907E-03 + + + 3.0566993E-01 + + 4.1625057E-02 + + 2.2287832E-02 + + 3.9580806E-03 + + 3.3420849E-03 + + 1.3963828E-03 + + + 1.0000372E+00 + + + + + lwtr_iso.71c + lwtr_iso.71c + 2.5300000E-08 + 5 + false + isotropic + + 9.6904862E-01 + + + 1.0230968E-02 + + + 9.5881780E-01 + + 3.9202760E-01 + + 1.2865356E-01 + + 9.5231115E-03 + + -1.9647208E-02 + + 5.9291968E-04 + + + 1.0000000E+00 + + + + + uo2_iso_mu.71c + uo2_iso_mu.71c + 2.5300000E-08 + 32 + true + isotropic + histogram + + 4.1022364E-01 + + + 3.4687432E-02 + + + 4.9631431E-02 + + + 1.0000000E+00 + + + 2.0019027E-02 + + + 9.7621928E-03 + + 9.6669975E-03 + + 9.6217012E-03 + + 9.6029285E-03 + + 9.6155223E-03 + + 9.6417022E-03 + + 9.6845888E-03 + + 9.7355785E-03 + + 9.7971852E-03 + + 9.8708684E-03 + + 9.9451996E-03 + + 1.0026273E-02 + + 1.0121536E-02 + + 1.0227606E-02 + + 1.0340467E-02 + + 1.0461281E-02 + + 1.0600371E-02 + + 1.0742182E-02 + + 1.0892295E-02 + + 1.1062409E-02 + + 1.1236639E-02 + + 1.1440302E-02 + + 1.1662283E-02 + + 1.1931512E-02 + + 1.2259589E-02 + + 1.2696194E-02 + + 1.3272953E-02 + + 1.4078939E-02 + + 1.5238289E-02 + + 1.6956791E-02 + + 1.9602217E-02 + + 2.3848802E-02 + + + 1.0002764E+00 + + + + + clad_iso_mu.71c + clad_iso_mu.71c + 2.5300000E-08 + 32 + false + isotropic + histogram + + 3.0736836E-01 + + + 1.7027907E-03 + + + 8.7275040E-03 + + 8.3252599E-03 + + 8.0120655E-03 + + 7.7711039E-03 + + 7.5947251E-03 + + 7.4705350E-03 + + 7.3804037E-03 + + 7.3241515E-03 + + 7.3010244E-03 + + 7.3107188E-03 + + 7.3487081E-03 + + 7.4144814E-03 + + 7.5104992E-03 + + 7.6438156E-03 + + 7.7974114E-03 + + 7.9812213E-03 + + 8.1816102E-03 + + 8.4284406E-03 + + 8.6892059E-03 + + 8.9675370E-03 + + 9.2626673E-03 + + 9.6121293E-03 + + 9.9669464E-03 + + 1.0354054E-02 + + 1.0794903E-02 + + 1.1296566E-02 + + 1.1883978E-02 + + 1.2592532E-02 + + 1.3494682E-02 + + 1.4666635E-02 + + 1.6229823E-02 + + 1.8334594E-02 + + + 1.0000372E+00 + + + + + lwtr_iso_mu.71c + lwtr_iso_mu.71c + 2.5300000E-08 + 32 + false + isotropic + histogram + + 9.6904862E-01 + + + 1.0230968E-02 + + + 5.8755233E-03 + + 1.0934725E-02 + + 1.1142414E-02 + + 1.0437139E-02 + + 1.0756915E-02 + + 1.0623054E-02 + + 1.1295335E-02 + + 1.1326212E-02 + + 1.1795885E-02 + + 1.2179916E-02 + + 1.2528003E-02 + + 1.3121696E-02 + + 1.3563685E-02 + + 1.4242846E-02 + + 1.4567732E-02 + + 1.5913317E-02 + + 1.6851680E-02 + + 2.0792196E-02 + + 2.4129531E-02 + + 2.8258248E-02 + + 3.2040957E-02 + + 3.6266761E-02 + + 4.0455247E-02 + + 4.4731350E-02 + + 4.8820583E-02 + + 5.3746086E-02 + + 5.7743648E-02 + + 6.3513540E-02 + + 6.7353451E-02 + + 7.2430683E-02 + + 8.0723820E-02 + + 8.0655621E-02 + + + 1.0000000E+00 + + + + + uo2_ang.71c + uo2_ang.71c + 2.5300000E-08 + 5 + true + 32 + 1 + angle + + 4.0734790E-01 + + 4.0709470E-01 + + 4.0665280E-01 + + 4.0605122E-01 + + 4.0509226E-01 + + 4.0399893E-01 + + 4.0264927E-01 + + 4.0112684E-01 + + 3.9937450E-01 + + 3.9743081E-01 + + 3.9533879E-01 + + 3.9307550E-01 + + 3.9084961E-01 + + 3.8878017E-01 + + 3.8751931E-01 + + 3.8693825E-01 + + 3.9039929E-01 + + 4.0037023E-01 + + 4.1057791E-01 + + 4.1924835E-01 + + 4.2629128E-01 + + 4.3202621E-01 + + 4.3673213E-01 + + 4.4062993E-01 + + 4.4385222E-01 + + 4.4647166E-01 + + 4.4861335E-01 + + 4.5026817E-01 + + 4.5165329E-01 + + 4.5255720E-01 + + 4.5310208E-01 + + 4.5337269E-01 + + + 3.1599020E-02 + + 3.1371085E-02 + + 3.1023091E-02 + + 3.0539250E-02 + + 2.9839460E-02 + + 2.9013479E-02 + + 2.8058288E-02 + + 2.7047229E-02 + + 2.5977776E-02 + + 2.4952391E-02 + + 2.4009896E-02 + + 2.3244570E-02 + + 2.2725200E-02 + + 2.2489873E-02 + + 2.2624168E-02 + + 2.3059735E-02 + + 2.4782557E-02 + + 2.8553081E-02 + + 3.3194318E-02 + + 3.8038660E-02 + + 4.2666012E-02 + + 4.6923885E-02 + + 5.0708283E-02 + + 5.3996846E-02 + + 5.6845491E-02 + + 5.9213445E-02 + + 6.1182604E-02 + + 6.2742563E-02 + + 6.3985293E-02 + + 6.4852148E-02 + + 6.5364227E-02 + + 6.5703785E-02 + + + 4.5146530E-02 + + 4.4766687E-02 + + 4.4155441E-02 + + 4.3323960E-02 + + 4.2141314E-02 + + 4.0739637E-02 + + 3.9143652E-02 + + 3.7465300E-02 + + 3.5735871E-02 + + 3.4113931E-02 + + 3.2678644E-02 + + 3.1591060E-02 + + 3.0966537E-02 + + 3.0821062E-02 + + 3.1238242E-02 + + 3.2075654E-02 + + 3.4603728E-02 + + 3.9898114E-02 + + 4.6725370E-02 + + 5.4142159E-02 + + 6.1436273E-02 + + 6.8238302E-02 + + 7.4365771E-02 + + 7.9727018E-02 + + 8.4398863E-02 + + 8.8315890E-02 + + 9.1574736E-02 + + 9.4183896E-02 + + 9.6266615E-02 + + 9.7706019E-02 + + 9.8564505E-02 + + 9.9171965E-02 + + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + + 1.8183034E-02 + + 1.8028751E-02 + + 1.7777081E-02 + + 1.7434939E-02 + + 1.6947918E-02 + + 1.6371445E-02 + + 1.5714505E-02 + + 1.5023310E-02 + + 1.4310527E-02 + + 1.3640363E-02 + + 1.3045308E-02 + + 1.2590537E-02 + + 1.2323486E-02 + + 1.2250235E-02 + + 1.2408325E-02 + + 1.2741816E-02 + + 1.3791905E-02 + + 1.6011218E-02 + + 1.8846275E-02 + + 2.1907807E-02 + + 2.4909120E-02 + + 2.7704245E-02 + + 3.0220623E-02 + + 3.2422114E-02 + + 3.4339614E-02 + + 3.5947934E-02 + + 3.7286018E-02 + + 3.8357139E-02 + + 3.9212858E-02 + + 3.9804080E-02 + + 4.0156625E-02 + + 4.0404918E-02 + + + 3.7585902E-01 + + 4.4872720E-02 + + 2.2814276E-02 + + 1.1556342E-02 + + 7.2018303E-03 + + 3.6175403E-03 + + + + 3.7582315E-01 + + 4.4995749E-02 + + 2.2725116E-02 + + 1.1466478E-02 + + 7.0875483E-03 + + 3.5308164E-03 + + + + 3.7572011E-01 + + 4.4992452E-02 + + 2.2759820E-02 + + 1.1516099E-02 + + 7.0323440E-03 + + 3.5020003E-03 + + + + 3.7562995E-01 + + 4.5132914E-02 + + 2.2777514E-02 + + 1.1548988E-02 + + 7.0831467E-03 + + 3.5299129E-03 + + + + 3.7536612E-01 + + 4.5293164E-02 + + 2.2890080E-02 + + 1.1675089E-02 + + 7.1438522E-03 + + 3.5771809E-03 + + + + 3.7510372E-01 + + 4.5594244E-02 + + 2.2986083E-02 + + 1.1616892E-02 + + 7.1593645E-03 + + 3.5827527E-03 + + + + 3.7471139E-01 + + 4.5893399E-02 + + 2.3129097E-02 + + 1.1710573E-02 + + 7.2294990E-03 + + 3.6035030E-03 + + + + 3.7417853E-01 + + 4.6212271E-02 + + 2.3407493E-02 + + 1.1803607E-02 + + 7.2768873E-03 + + 3.6185275E-03 + + + + 3.7350485E-01 + + 4.6653124E-02 + + 2.3603271E-02 + + 1.1928427E-02 + + 7.3368483E-03 + + 3.6311780E-03 + + + + 3.7257204E-01 + + 4.7127424E-02 + + 2.3927026E-02 + + 1.2138279E-02 + + 7.4376541E-03 + + 3.6855451E-03 + + + + 3.7144563E-01 + + 4.7675499E-02 + + 2.4252831E-02 + + 1.2320100E-02 + + 7.5749097E-03 + + 3.7669728E-03 + + + + 3.6996977E-01 + + 4.8300830E-02 + + 2.4647138E-02 + + 1.2560662E-02 + + 7.7886594E-03 + + 3.8654464E-03 + + + + 3.6821602E-01 + + 4.8824396E-02 + + 2.5017750E-02 + + 1.2840163E-02 + + 7.9274823E-03 + + 3.9779025E-03 + + + + 3.6638016E-01 + + 4.9306135E-02 + + 2.5474307E-02 + + 1.3192593E-02 + + 8.2112330E-03 + + 4.1160831E-03 + + + + 3.6503713E-01 + + 4.9560796E-02 + + 2.5756337E-02 + + 1.3455138E-02 + + 8.3858370E-03 + + 4.2114689E-03 + + + + 3.6400368E-01 + + 4.9633132E-02 + + 2.5987536E-02 + + 1.3659891E-02 + + 8.5714354E-03 + + 4.3181256E-03 + + + + 3.6576117E-01 + + 4.8863049E-02 + + 2.5525363E-02 + + 1.3370670E-02 + + 8.3567729E-03 + + 4.1905625E-03 + + + + 3.7192172E-01 + + 4.6844936E-02 + + 2.3959446E-02 + + 1.2270393E-02 + + 7.5751281E-03 + + 3.7309644E-03 + + + + 3.7748124E-01 + + 4.4748629E-02 + + 2.2514789E-02 + + 1.1348962E-02 + + 6.9297472E-03 + + 3.4104693E-03 + + + + 3.8128097E-01 + + 4.3075850E-02 + + 2.1398961E-02 + + 1.0675116E-02 + + 6.5306660E-03 + + 3.2210938E-03 + + + + 3.8373406E-01 + + 4.1672472E-02 + + 2.0547117E-02 + + 1.0330913E-02 + + 6.3048028E-03 + + 3.1386749E-03 + + + + 3.8520439E-01 + + 4.0681902E-02 + + 2.0057126E-02 + + 1.0056063E-02 + + 6.1829817E-03 + + 3.0802737E-03 + + + + 3.8614505E-01 + + 3.9879282E-02 + + 1.9626439E-02 + + 9.9375963E-03 + + 6.1229946E-03 + + 3.0426688E-03 + + + + 3.8675390E-01 + + 3.9278504E-02 + + 1.9339777E-02 + + 9.8184985E-03 + + 6.0956157E-03 + + 3.0580002E-03 + + + + 3.8705360E-01 + + 3.8883125E-02 + + 1.9159064E-02 + + 9.7301477E-03 + + 6.0595588E-03 + + 3.0225068E-03 + + + + 3.8731880E-01 + + 3.8576519E-02 + + 1.9045072E-02 + + 9.7127863E-03 + + 6.0463869E-03 + + 3.0519472E-03 + + + + 3.8756725E-01 + + 3.8382695E-02 + + 1.8916082E-02 + + 9.6925622E-03 + + 6.0590015E-03 + + 2.9913798E-03 + + + + 3.8761982E-01 + + 3.8249486E-02 + + 1.8841512E-02 + + 9.6699646E-03 + + 6.0488356E-03 + + 3.0212480E-03 + + + + 3.8779017E-01 + + 3.8052198E-02 + + 1.8815974E-02 + + 9.5833623E-03 + + 5.9965640E-03 + + 2.9751261E-03 + + + + 3.8780028E-01 + + 3.7931450E-02 + + 1.8735581E-02 + + 9.6072395E-03 + + 5.9416328E-03 + + 3.0080955E-03 + + + + 3.8782277E-01 + + 3.7963999E-02 + + 1.8776116E-02 + + 9.6491264E-03 + + 5.9087373E-03 + + 3.0066367E-03 + + + + 3.8767898E-01 + + 3.7876954E-02 + + 1.8837344E-02 + + 9.7088929E-03 + + 5.9136976E-03 + + 3.0171235E-03 + + + 1.0002763E+00 + + + 1.0002760E+00 + + + 1.0002658E+00 + + + 1.0002710E+00 + + + 1.0002776E+00 + + + 1.0002767E+00 + + + 1.0002833E+00 + + + 1.0002791E+00 + + + 1.0002788E+00 + + + 1.0002858E+00 + + + 1.0002884E+00 + + + 1.0002916E+00 + + + 1.0003039E+00 + + + 1.0003181E+00 + + + 1.0003365E+00 + + + 1.0003544E+00 + + + 1.0003372E+00 + + + 1.0002764E+00 + + + 1.0002508E+00 + + + 1.0002343E+00 + + + 1.0002360E+00 + + + 1.0002375E+00 + + + 1.0002331E+00 + + + 1.0002344E+00 + + + 1.0002385E+00 + + + 1.0002316E+00 + + + 1.0002360E+00 + + + 1.0002360E+00 + + + 1.0002354E+00 + + + 1.0002349E+00 + + + 1.0002325E+00 + + + 1.0002268E+00 + + + + + clad_ang.71c + clad_ang.71c + 2.5300000E-08 + 5 + false + 32 + 1 + angle + + 3.1005638E-01 + + 3.0999067E-01 + + 3.0994879E-01 + + 3.0987779E-01 + + 3.0961631E-01 + + 3.0948272E-01 + + 3.0913340E-01 + + 3.0868239E-01 + + 3.0799925E-01 + + 3.0712597E-01 + + 3.0590948E-01 + + 3.0432728E-01 + + 3.0235012E-01 + + 2.9996873E-01 + + 2.9743091E-01 + + 2.9739624E-01 + + 3.0835788E-01 + + 3.1305337E-01 + + 3.1379599E-01 + + 3.1314506E-01 + + 3.1216249E-01 + + 3.1129786E-01 + + 3.1059203E-01 + + 3.1009561E-01 + + 3.0977837E-01 + + 3.0951041E-01 + + 3.0930940E-01 + + 3.0929712E-01 + + 3.0925741E-01 + + 3.0917641E-01 + + 3.0919741E-01 + + 3.0912502E-01 + + + 1.3490691E-03 + + 1.3463259E-03 + + 1.3498512E-03 + + 1.3366347E-03 + + 1.3288899E-03 + + 1.3176269E-03 + + 1.3059971E-03 + + 1.2891508E-03 + + 1.2713136E-03 + + 1.2555332E-03 + + 1.2394055E-03 + + 1.2170158E-03 + + 1.1969201E-03 + + 1.1849620E-03 + + 1.1899173E-03 + + 1.2761137E-03 + + 1.6244505E-03 + + 1.9090551E-03 + + 2.0837409E-03 + + 2.1976011E-03 + + 2.2746911E-03 + + 2.3308251E-03 + + 2.3700744E-03 + + 2.3981231E-03 + + 2.4248079E-03 + + 2.4441792E-03 + + 2.4510541E-03 + + 2.4640212E-03 + + 2.4741885E-03 + + 2.4697219E-03 + + 2.4721421E-03 + + 2.4729172E-03 + + + 3.0860746E-01 + + 5.0621457E-02 + + 2.7347709E-02 + + 4.7204795E-03 + + 4.0838896E-03 + + 1.6974585E-03 + + + + 3.0865194E-01 + + 5.0806752E-02 + + 2.6916586E-02 + + 4.8439138E-03 + + 4.1728626E-03 + + 1.7130886E-03 + + + + 3.0861586E-01 + + 5.0757624E-02 + + 2.7196188E-02 + + 4.8679553E-03 + + 4.0626181E-03 + + 1.7815988E-03 + + + + 3.0850283E-01 + + 5.0925397E-02 + + 2.7204505E-02 + + 4.8109149E-03 + + 4.1177685E-03 + + 1.7500469E-03 + + + + 3.0831737E-01 + + 5.1138142E-02 + + 2.7308021E-02 + + 4.8683307E-03 + + 4.0620680E-03 + + 1.6728150E-03 + + + + 3.0815133E-01 + + 5.1220538E-02 + + 2.7286345E-02 + + 4.8715905E-03 + + 4.0963982E-03 + + 1.6783881E-03 + + + + 3.0777979E-01 + + 5.1536936E-02 + + 2.7522750E-02 + + 4.9751865E-03 + + 4.1461347E-03 + + 1.7481718E-03 + + + + 3.0740186E-01 + + 5.1745014E-02 + + 2.7548398E-02 + + 4.9705992E-03 + + 4.2128374E-03 + + 1.7852471E-03 + + + + 3.0674467E-01 + + 5.2102012E-02 + + 2.7721735E-02 + + 4.9326171E-03 + + 4.2065723E-03 + + 1.7520577E-03 + + + + 3.0588587E-01 + + 5.2410298E-02 + + 2.7935183E-02 + + 5.1068594E-03 + + 4.2771962E-03 + + 1.7875734E-03 + + + + 3.0465659E-01 + + 5.2543078E-02 + + 2.7962434E-02 + + 5.0839680E-03 + + 4.3050048E-03 + + 1.8499733E-03 + + + + 3.0312229E-01 + + 5.2483292E-02 + + 2.8137041E-02 + + 5.2734764E-03 + + 4.4574974E-03 + + 1.8578935E-03 + + + + 3.0117092E-01 + + 5.2332000E-02 + + 2.8003257E-02 + + 5.2432554E-03 + + 4.5485878E-03 + + 1.8980534E-03 + + + + 2.9880209E-01 + + 5.1679340E-02 + + 2.7750518E-02 + + 5.3056401E-03 + + 4.5878997E-03 + + 1.9401945E-03 + + + + 2.9627667E-01 + + 5.0169523E-02 + + 2.7059202E-02 + + 5.2026216E-03 + + 4.5921641E-03 + + 1.8856744E-03 + + + + 2.9609986E-01 + + 4.6032461E-02 + + 2.4630572E-02 + + 4.5841577E-03 + + 3.9297754E-03 + + 1.6420383E-03 + + + + 3.0675667E-01 + + 3.7400062E-02 + + 1.9426565E-02 + + 2.7294131E-03 + + 2.0654845E-03 + + 6.7157182E-04 + + + + 3.1112942E-01 + + 3.2514340E-02 + + 1.7042298E-02 + + 2.2975512E-03 + + 1.7171252E-03 + + 6.1586296E-04 + + + + 3.1168284E-01 + + 2.9994361E-02 + + 1.5982971E-02 + + 2.2082409E-03 + + 1.7621544E-03 + + 6.7848731E-04 + + + + 3.1094402E-01 + + 2.9043011E-02 + + 1.5559822E-02 + + 2.3867453E-03 + + 1.8805422E-03 + + 8.0257257E-04 + + + + 3.0988917E-01 + + 2.8642621E-02 + + 1.5527633E-02 + + 2.5363175E-03 + + 2.0667848E-03 + + 8.9512793E-04 + + + + 3.0900783E-01 + + 2.8683967E-02 + + 1.5531635E-02 + + 2.6907133E-03 + + 2.2374989E-03 + + 9.9838820E-04 + + + + 3.0823110E-01 + + 2.8772506E-02 + + 1.5617343E-02 + + 2.7855260E-03 + + 2.3324886E-03 + + 1.0334317E-03 + + + + 3.0768619E-01 + + 2.9118421E-02 + + 1.5860568E-02 + + 2.8469804E-03 + + 2.4600144E-03 + + 1.0754851E-03 + + + + 3.0729355E-01 + + 2.9429106E-02 + + 1.6138063E-02 + + 2.9901807E-03 + + 2.5154903E-03 + + 1.1139796E-03 + + + + 3.0707342E-01 + + 2.9773340E-02 + + 1.6110013E-02 + + 2.9606704E-03 + + 2.6433692E-03 + + 1.1310602E-03 + + + + 3.0685025E-01 + + 3.0055483E-02 + + 1.6246774E-02 + + 3.1035410E-03 + + 2.6316501E-03 + + 1.1158252E-03 + + + + 3.0681469E-01 + + 3.0238686E-02 + + 1.6524723E-02 + + 3.0402635E-03 + + 2.6108287E-03 + + 1.1691486E-03 + + + + 3.0690606E-01 + + 3.0618190E-02 + + 1.6493402E-02 + + 3.0268029E-03 + + 2.5956288E-03 + + 1.0751657E-03 + + + + 3.0676357E-01 + + 3.0613175E-02 + + 1.6679358E-02 + + 2.8764512E-03 + + 2.5398735E-03 + + 1.0482210E-03 + + + + 3.0676223E-01 + + 3.0798581E-02 + + 1.6764686E-02 + + 3.1471928E-03 + + 2.7160881E-03 + + 1.2265875E-03 + + + + 3.0687178E-01 + + 3.0702117E-02 + + 1.6628813E-02 + + 2.8692462E-03 + + 2.4997850E-03 + + 9.3974161E-04 + + + 1.0000416E+00 + + + 1.0000513E+00 + + + 1.0000397E+00 + + + 1.0000409E+00 + + + 1.0000455E+00 + + + 1.0000417E+00 + + + 1.0000452E+00 + + + 1.0000431E+00 + + + 1.0000455E+00 + + + 1.0000451E+00 + + + 1.0000445E+00 + + + 1.0000482E+00 + + + 1.0000507E+00 + + + 1.0000542E+00 + + + 1.0000545E+00 + + + 1.0000461E+00 + + + 1.0000114E+00 + + + 1.0000112E+00 + + + 1.0000195E+00 + + + 1.0000216E+00 + + + 1.0000279E+00 + + + 1.0000307E+00 + + + 1.0000302E+00 + + + 1.0000313E+00 + + + 1.0000334E+00 + + + 1.0000309E+00 + + + 1.0000325E+00 + + + 1.0000318E+00 + + + 1.0000346E+00 + + + 1.0000335E+00 + + + 1.0000285E+00 + + + 1.0000358E+00 + + + + + lwtr_ang.71c + lwtr_ang.71c + 2.5300000E-08 + 5 + false + 32 + 1 + angle + + 8.3129229E-01 + + 8.3203829E-01 + + 8.3332424E-01 + + 8.3539719E-01 + + 8.3799288E-01 + + 8.4156597E-01 + + 8.4594074E-01 + + 8.5122773E-01 + + 8.5788274E-01 + + 8.6633387E-01 + + 8.7719846E-01 + + 8.9195077E-01 + + 9.1326621E-01 + + 9.4469159E-01 + + 9.9368716E-01 + + 1.0616854E+00 + + 1.0982938E+00 + + 1.0997200E+00 + + 1.0855410E+00 + + 1.0676695E+00 + + 1.0508172E+00 + + 1.0369337E+00 + + 1.0255762E+00 + + 1.0162841E+00 + + 1.0086633E+00 + + 1.0025783E+00 + + 9.9737297E-01 + + 9.9326768E-01 + + 9.9030852E-01 + + 9.8792719E-01 + + 9.8610453E-01 + + 9.8540665E-01 + + + 7.7368065E-03 + + 7.7519393E-03 + + 7.7819449E-03 + + 7.8285240E-03 + + 7.8881877E-03 + + 7.9652685E-03 + + 8.0588251E-03 + + 8.1724303E-03 + + 8.3079937E-03 + + 8.4749946E-03 + + 8.6811506E-03 + + 8.9456784E-03 + + 9.3049336E-03 + + 9.8025199E-03 + + 1.0529992E-02 + + 1.1498571E-02 + + 1.2065971E-02 + + 1.2168395E-02 + + 1.2053690E-02 + + 1.1870414E-02 + + 1.1678759E-02 + + 1.1516371E-02 + + 1.1377145E-02 + + 1.1262809E-02 + + 1.1166687E-02 + + 1.1090107E-02 + + 1.1022668E-02 + + 1.0968772E-02 + + 1.0931381E-02 + + 1.0898236E-02 + + 1.0872094E-02 + + 1.0866295E-02 + + + 8.2371185E-01 + + 3.5234207E-01 + + 1.1927931E-01 + + 7.4555729E-03 + + -1.8093822E-02 + + 4.7584668E-04 + + + + 8.2420033E-01 + + 3.5255993E-01 + + 1.1937026E-01 + + 7.2853742E-03 + + -1.8313481E-02 + + 4.3042936E-04 + + + + 8.2554395E-01 + + 3.5269171E-01 + + 1.1923224E-01 + + 7.3701368E-03 + + -1.8272340E-02 + + 4.4800957E-04 + + + + 8.2759297E-01 + + 3.5316566E-01 + + 1.1927088E-01 + + 7.3660347E-03 + + -1.8328170E-02 + + 4.1130682E-04 + + + + 8.3010220E-01 + + 3.5369971E-01 + + 1.1938537E-01 + + 7.4104975E-03 + + -1.8303317E-02 + + 4.1953876E-04 + + + + 8.3343687E-01 + + 3.5441436E-01 + + 1.1949872E-01 + + 7.5322327E-03 + + -1.8306753E-02 + + 4.5747101E-04 + + + + 8.3787092E-01 + + 3.5551997E-01 + + 1.1969232E-01 + + 7.5811660E-03 + + -1.8329166E-02 + + 4.7852748E-04 + + + + 8.4310387E-01 + + 3.5672367E-01 + + 1.1987885E-01 + + 7.6564988E-03 + + -1.8365527E-02 + + 4.5067238E-04 + + + + 8.4958953E-01 + + 3.5843887E-01 + + 1.2018528E-01 + + 7.7892315E-03 + + -1.8386164E-02 + + 4.8596316E-04 + + + + 8.5783406E-01 + + 3.6063097E-01 + + 1.2066889E-01 + + 7.9351893E-03 + + -1.8471175E-02 + + 4.7399741E-04 + + + + 8.6863002E-01 + + 3.6377631E-01 + + 1.2139807E-01 + + 8.1733217E-03 + + -1.8540490E-02 + + 5.0406643E-04 + + + + 8.8306988E-01 + + 3.6819641E-01 + + 1.2250274E-01 + + 8.4479144E-03 + + -1.8664160E-02 + + 5.3786229E-04 + + + + 9.0387733E-01 + + 3.7488040E-01 + + 1.2420959E-01 + + 8.7500816E-03 + + -1.8976448E-02 + + 4.9664889E-04 + + + + 9.3478951E-01 + + 3.8530100E-01 + + 1.2704555E-01 + + 9.1818403E-03 + + -1.9402464E-02 + + 5.3777400E-04 + + + + 9.8306151E-01 + + 4.0212328E-01 + + 1.3182489E-01 + + 9.8420986E-03 + + -2.0147587E-02 + + 5.9236718E-04 + + + + 1.0501953E+00 + + 4.2587762E-01 + + 1.3867637E-01 + + 1.0689470E-02 + + -2.1155894E-02 + + 6.5005469E-04 + + + + 1.0862685E+00 + + 4.3797788E-01 + + 1.4197736E-01 + + 1.1172759E-02 + + -2.1737067E-02 + + 6.5599084E-04 + + + + 1.0874414E+00 + + 4.3717092E-01 + + 1.4142760E-01 + + 1.1235986E-02 + + -2.1646253E-02 + + 6.5585383E-04 + + + + 1.0736455E+00 + + 4.3084349E-01 + + 1.3933736E-01 + + 1.1186759E-02 + + -2.1309779E-02 + + 6.3989000E-04 + + + + 1.0558960E+00 + + 4.2321090E-01 + + 1.3684390E-01 + + 1.1034633E-02 + + -2.0842589E-02 + + 6.8339604E-04 + + + + 1.0391120E+00 + + 4.1635648E-01 + + 1.3463939E-01 + + 1.0869743E-02 + + -2.0503958E-02 + + 6.5877305E-04 + + + + 1.0254663E+00 + + 4.1079355E-01 + + 1.3288830E-01 + + 1.0692002E-02 + + -2.0222325E-02 + + 7.2411022E-04 + + + + 1.0142449E+00 + + 4.0621344E-01 + + 1.3145072E-01 + + 1.0526222E-02 + + -1.9995334E-02 + + 6.8891812E-04 + + + + 1.0049846E+00 + + 4.0236090E-01 + + 1.3022093E-01 + + 1.0429641E-02 + + -1.9811424E-02 + + 7.3287561E-04 + + + + 9.9758865E-01 + + 3.9933064E-01 + + 1.2934518E-01 + + 1.0285856E-02 + + -1.9735216E-02 + + 6.4095239E-04 + + + + 9.9137092E-01 + + 3.9669204E-01 + + 1.2850897E-01 + + 1.0180247E-02 + + -1.9595919E-02 + + 7.4239863E-04 + + + + 9.8633885E-01 + + 3.9464706E-01 + + 1.2782783E-01 + + 1.0115679E-02 + + -1.9489063E-02 + + 6.7732699E-04 + + + + 9.8241480E-01 + + 3.9293162E-01 + + 1.2725328E-01 + + 1.0076113E-02 + + -1.9411729E-02 + + 6.7080378E-04 + + + + 9.7912906E-01 + + 3.9164180E-01 + + 1.2687293E-01 + + 9.9947816E-03 + + -1.9390105E-02 + + 6.8484948E-04 + + + + 9.7702901E-01 + + 3.9079267E-01 + + 1.2678305E-01 + + 1.0006132E-02 + + -1.9296574E-02 + + 7.3827259E-04 + + + + 9.7553202E-01 + + 3.9010913E-01 + + 1.2644932E-01 + + 9.9292219E-03 + + -1.9314591E-02 + + 7.3482134E-04 + + + + 9.7483429E-01 + + 3.8985598E-01 + + 1.2640804E-01 + + 9.9206549E-03 + + -1.9266376E-02 + + 7.6472379E-04 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + + + uo2_ang_mu.71c + uo2_ang_mu.71c + 2.5300000E-08 + 32 + true + 32 + 1 + angle + histogram + + 4.0734790E-01 + + 4.0709470E-01 + + 4.0665280E-01 + + 4.0605122E-01 + + 4.0509226E-01 + + 4.0399893E-01 + + 4.0264927E-01 + + 4.0112684E-01 + + 3.9937450E-01 + + 3.9743081E-01 + + 3.9533879E-01 + + 3.9307550E-01 + + 3.9084961E-01 + + 3.8878017E-01 + + 3.8751931E-01 + + 3.8693825E-01 + + 3.9039929E-01 + + 4.0037023E-01 + + 4.1057791E-01 + + 4.1924835E-01 + + 4.2629128E-01 + + 4.3202621E-01 + + 4.3673213E-01 + + 4.4062993E-01 + + 4.4385222E-01 + + 4.4647166E-01 + + 4.4861335E-01 + + 4.5026817E-01 + + 4.5165329E-01 + + 4.5255720E-01 + + 4.5310208E-01 + + 4.5337269E-01 + + + 3.1599020E-02 + + 3.1371085E-02 + + 3.1023091E-02 + + 3.0539250E-02 + + 2.9839460E-02 + + 2.9013479E-02 + + 2.8058288E-02 + + 2.7047229E-02 + + 2.5977776E-02 + + 2.4952391E-02 + + 2.4009896E-02 + + 2.3244570E-02 + + 2.2725200E-02 + + 2.2489873E-02 + + 2.2624168E-02 + + 2.3059735E-02 + + 2.4782557E-02 + + 2.8553081E-02 + + 3.3194318E-02 + + 3.8038660E-02 + + 4.2666012E-02 + + 4.6923885E-02 + + 5.0708283E-02 + + 5.3996846E-02 + + 5.6845491E-02 + + 5.9213445E-02 + + 6.1182604E-02 + + 6.2742563E-02 + + 6.3985293E-02 + + 6.4852148E-02 + + 6.5364227E-02 + + 6.5703785E-02 + + + 4.5146530E-02 + + 4.4766687E-02 + + 4.4155441E-02 + + 4.3323960E-02 + + 4.2141314E-02 + + 4.0739637E-02 + + 3.9143652E-02 + + 3.7465300E-02 + + 3.5735871E-02 + + 3.4113931E-02 + + 3.2678644E-02 + + 3.1591060E-02 + + 3.0966537E-02 + + 3.0821062E-02 + + 3.1238242E-02 + + 3.2075654E-02 + + 3.4603728E-02 + + 3.9898114E-02 + + 4.6725370E-02 + + 5.4142159E-02 + + 6.1436273E-02 + + 6.8238302E-02 + + 7.4365771E-02 + + 7.9727018E-02 + + 8.4398863E-02 + + 8.8315890E-02 + + 9.1574736E-02 + + 9.4183896E-02 + + 9.6266615E-02 + + 9.7706019E-02 + + 9.8564505E-02 + + 9.9171965E-02 + + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + 1.0000000E+00 + + + 1.8183034E-02 + + 1.8028751E-02 + + 1.7777081E-02 + + 1.7434939E-02 + + 1.6947918E-02 + + 1.6371445E-02 + + 1.5714505E-02 + + 1.5023310E-02 + + 1.4310527E-02 + + 1.3640363E-02 + + 1.3045308E-02 + + 1.2590537E-02 + + 1.2323486E-02 + + 1.2250235E-02 + + 1.2408325E-02 + + 1.2741816E-02 + + 1.3791905E-02 + + 1.6011218E-02 + + 1.8846275E-02 + + 2.1907807E-02 + + 2.4909120E-02 + + 2.7704245E-02 + + 3.0220623E-02 + + 3.2422114E-02 + + 3.4339614E-02 + + 3.5947934E-02 + + 3.7286018E-02 + + 3.8357139E-02 + + 3.9212858E-02 + + 3.9804080E-02 + + 4.0156625E-02 + + 4.0404918E-02 + + + 9.8066123E-03 + + 9.6646401E-03 + + 9.6663597E-03 + + 9.6289590E-03 + + 9.6096138E-03 + + 9.6458323E-03 + + 9.7060173E-03 + + 9.7686742E-03 + + 9.7497590E-03 + + 9.8863575E-03 + + 9.9653503E-03 + + 1.0024461E-02 + + 1.0143433E-02 + + 1.0224038E-02 + + 1.0343441E-02 + + 1.0433289E-02 + + 1.0526146E-02 + + 1.0783759E-02 + + 1.0949268E-02 + + 1.1096291E-02 + + 1.1232675E-02 + + 1.1455467E-02 + + 1.1650746E-02 + + 1.1903201E-02 + + 1.2297735E-02 + + 1.2748370E-02 + + 1.3264457E-02 + + 1.4048689E-02 + + 1.5280440E-02 + + 1.6908123E-02 + + 1.9601832E-02 + + 2.3844984E-02 + + + + 9.7708240E-03 + + 9.6914019E-03 + + 9.6149267E-03 + + 9.5973173E-03 + + 9.6433893E-03 + + 9.6506128E-03 + + 9.7039801E-03 + + 9.6956785E-03 + + 9.7873194E-03 + + 9.8654118E-03 + + 9.9413480E-03 + + 1.0063248E-02 + + 1.0102923E-02 + + 1.0232802E-02 + + 1.0308882E-02 + + 1.0501651E-02 + + 1.0589986E-02 + + 1.0719182E-02 + + 1.0893048E-02 + + 1.1057750E-02 + + 1.1303383E-02 + + 1.1462120E-02 + + 1.1668725E-02 + + 1.1965138E-02 + + 1.2270967E-02 + + 1.2704483E-02 + + 1.3318045E-02 + + 1.4113776E-02 + + 1.5284443E-02 + + 1.6903540E-02 + + 1.9623766E-02 + + 2.3773086E-02 + + + + 9.7573912E-03 + + 9.6754767E-03 + + 9.6414920E-03 + + 9.5888776E-03 + + 9.6229707E-03 + + 9.6517720E-03 + + 9.7047117E-03 + + 9.7260741E-03 + + 9.8017859E-03 + + 9.8536413E-03 + + 9.9389825E-03 + + 1.0024606E-02 + + 1.0138509E-02 + + 1.0234629E-02 + + 1.0324330E-02 + + 1.0453936E-02 + + 1.0578467E-02 + + 1.0739823E-02 + + 1.0879319E-02 + + 1.1046986E-02 + + 1.1241981E-02 + + 1.1441204E-02 + + 1.1664457E-02 + + 1.1957610E-02 + + 1.2276940E-02 + + 1.2759947E-02 + + 1.3279607E-02 + + 1.4124886E-02 + + 1.5267698E-02 + + 1.6982394E-02 + + 1.9550155E-02 + + 2.3789453E-02 + + + + 9.7595941E-03 + + 9.6406785E-03 + + 9.6091241E-03 + + 9.6094212E-03 + + 9.6096714E-03 + + 9.6231813E-03 + + 9.6784094E-03 + + 9.7493834E-03 + + 9.7951671E-03 + + 9.8514115E-03 + + 9.9241369E-03 + + 1.0012170E-02 + + 1.0117529E-02 + + 1.0213412E-02 + + 1.0335767E-02 + + 1.0447944E-02 + + 1.0584231E-02 + + 1.0753231E-02 + + 1.0883138E-02 + + 1.1065663E-02 + + 1.1250080E-02 + + 1.1439297E-02 + + 1.1646700E-02 + + 1.1958053E-02 + + 1.2287514E-02 + + 1.2721568E-02 + + 1.3290189E-02 + + 1.4110041E-02 + + 1.5281715E-02 + + 1.6979118E-02 + + 1.9608566E-02 + + 2.3793845E-02 + + + + 9.7316881E-03 + + 9.6194631E-03 + + 9.6065192E-03 + + 9.5773341E-03 + + 9.6080573E-03 + + 9.6136679E-03 + + 9.6707217E-03 + + 9.7207622E-03 + + 9.7745677E-03 + + 9.8542855E-03 + + 9.9290325E-03 + + 1.0013807E-02 + + 1.0087705E-02 + + 1.0212493E-02 + + 1.0318553E-02 + + 1.0440413E-02 + + 1.0586043E-02 + + 1.0693482E-02 + + 1.0881032E-02 + + 1.1028668E-02 + + 1.1236016E-02 + + 1.1448039E-02 + + 1.1645248E-02 + + 1.1940864E-02 + + 1.2280554E-02 + + 1.2704859E-02 + + 1.3284908E-02 + + 1.4087561E-02 + + 1.5269781E-02 + + 1.6974160E-02 + + 1.9647654E-02 + + 2.3878185E-02 + + + + 9.7161201E-03 + + 9.6202380E-03 + + 9.5797790E-03 + + 9.5545189E-03 + + 9.5785124E-03 + + 9.5970413E-03 + + 9.6077970E-03 + + 9.7078158E-03 + + 9.7457417E-03 + + 9.8241572E-03 + + 9.9053715E-03 + + 9.9664533E-03 + + 1.0069700E-02 + + 1.0182303E-02 + + 1.0310258E-02 + + 1.0426742E-02 + + 1.0561490E-02 + + 1.0707708E-02 + + 1.0863937E-02 + + 1.1051125E-02 + + 1.1221704E-02 + + 1.1442069E-02 + + 1.1658848E-02 + + 1.1941489E-02 + + 1.2275743E-02 + + 1.2702110E-02 + + 1.3323051E-02 + + 1.4108176E-02 + + 1.5289516E-02 + + 1.6993392E-02 + + 1.9675117E-02 + + 2.3895695E-02 + + + + 9.6862964E-03 + + 9.6118860E-03 + + 9.5204994E-03 + + 9.5427943E-03 + + 9.5461966E-03 + + 9.5657839E-03 + + 9.5949449E-03 + + 9.6654696E-03 + + 9.7413833E-03 + + 9.7999604E-03 + + 9.8652718E-03 + + 9.9395415E-03 + + 1.0066252E-02 + + 1.0162957E-02 + + 1.0288525E-02 + + 1.0410136E-02 + + 1.0544012E-02 + + 1.0683294E-02 + + 1.0857487E-02 + + 1.1034643E-02 + + 1.1202400E-02 + + 1.1413244E-02 + + 1.1649707E-02 + + 1.1927823E-02 + + 1.2268032E-02 + + 1.2711207E-02 + + 1.3301163E-02 + + 1.4107114E-02 + + 1.5299888E-02 + + 1.7035047E-02 + + 1.9688248E-02 + + 2.3980184E-02 + + + + 9.6789320E-03 + + 9.5794368E-03 + + 9.5136834E-03 + + 9.4987637E-03 + + 9.5122403E-03 + + 9.5462846E-03 + + 9.5893599E-03 + + 9.6291844E-03 + + 9.6755880E-03 + + 9.7758823E-03 + + 9.8512097E-03 + + 9.9153183E-03 + + 1.0010492E-02 + + 1.0132751E-02 + + 1.0249082E-02 + + 1.0374304E-02 + + 1.0525789E-02 + + 1.0647590E-02 + + 1.0816183E-02 + + 1.1002705E-02 + + 1.1172733E-02 + + 1.1391942E-02 + + 1.1634015E-02 + + 1.1896152E-02 + + 1.2250313E-02 + + 1.2701494E-02 + + 1.3297953E-02 + + 1.4128277E-02 + + 1.5304878E-02 + + 1.7057822E-02 + + 1.9759949E-02 + + 2.4058227E-02 + + + + 9.6295658E-03 + + 9.5389047E-03 + + 9.4742925E-03 + + 9.4575039E-03 + + 9.4670086E-03 + + 9.5016333E-03 + + 9.5287576E-03 + + 9.5962610E-03 + + 9.6450345E-03 + + 9.7355000E-03 + + 9.8168240E-03 + + 9.8832939E-03 + + 9.9783337E-03 + + 1.0096077E-02 + + 1.0226691E-02 + + 1.0343925E-02 + + 1.0478576E-02 + + 1.0624400E-02 + + 1.0795052E-02 + + 1.0971506E-02 + + 1.1155210E-02 + + 1.1359948E-02 + + 1.1600072E-02 + + 1.1891155E-02 + + 1.2217464E-02 + + 1.2687949E-02 + + 1.3279851E-02 + + 1.4139232E-02 + + 1.5331088E-02 + + 1.7109049E-02 + + 1.9804341E-02 + + 2.4140346E-02 + + + + 9.5761863E-03 + + 9.4820918E-03 + + 9.4335419E-03 + + 9.4124923E-03 + + 9.4238881E-03 + + 9.4447526E-03 + + 9.4999957E-03 + + 9.5315541E-03 + + 9.6078277E-03 + + 9.7003335E-03 + + 9.7574525E-03 + + 9.8379436E-03 + + 9.9462733E-03 + + 1.0053971E-02 + + 1.0174903E-02 + + 1.0296178E-02 + + 1.0416178E-02 + + 1.0598338E-02 + + 1.0736969E-02 + + 1.0921999E-02 + + 1.1103049E-02 + + 1.1337535E-02 + + 1.1560952E-02 + + 1.1844754E-02 + + 1.2186109E-02 + + 1.2650980E-02 + + 1.3288356E-02 + + 1.4113781E-02 + + 1.5336174E-02 + + 1.7136757E-02 + + 1.9885917E-02 + + 2.4274812E-02 + + + + 9.5122168E-03 + + 9.4370370E-03 + + 9.3789842E-03 + + 9.3641793E-03 + + 9.3461446E-03 + + 9.3736151E-03 + + 9.4378621E-03 + + 9.4888307E-03 + + 9.5578870E-03 + + 9.6287585E-03 + + 9.7018579E-03 + + 9.7842398E-03 + + 9.8853931E-03 + + 9.9928939E-03 + + 1.0118830E-02 + + 1.0234335E-02 + + 1.0390558E-02 + + 1.0549529E-02 + + 1.0695492E-02 + + 1.0871300E-02 + + 1.1074656E-02 + + 1.1276285E-02 + + 1.1528116E-02 + + 1.1795259E-02 + + 1.2170410E-02 + + 1.2620687E-02 + + 1.3248447E-02 + + 1.4113310E-02 + + 1.5330992E-02 + + 1.7146317E-02 + + 1.9971083E-02 + + 2.4420125E-02 + + + + 9.4655965E-03 + + 9.3472543E-03 + + 9.3135845E-03 + + 9.2723897E-03 + + 9.2802062E-03 + + 9.3207904E-03 + + 9.3438769E-03 + + 9.4089282E-03 + + 9.4772470E-03 + + 9.5593066E-03 + + 9.6350349E-03 + + 9.7156422E-03 + + 9.8254749E-03 + + 9.9256153E-03 + + 1.0046422E-02 + + 1.0170127E-02 + + 1.0324109E-02 + + 1.0494779E-02 + + 1.0643991E-02 + + 1.0830850E-02 + + 1.1006031E-02 + + 1.1226896E-02 + + 1.1461160E-02 + + 1.1751421E-02 + + 1.2117075E-02 + + 1.2580807E-02 + + 1.3191655E-02 + + 1.4078045E-02 + + 1.5308284E-02 + + 1.7194422E-02 + + 2.0045307E-02 + + 2.4607445E-02 + + + + 9.3803794E-03 + + 9.2679518E-03 + + 9.2244314E-03 + + 9.2113545E-03 + + 9.2138570E-03 + + 9.2462589E-03 + + 9.2883856E-03 + + 9.3378797E-03 + + 9.4087558E-03 + + 9.4791189E-03 + + 9.5459849E-03 + + 9.6532937E-03 + + 9.7407231E-03 + + 9.8542750E-03 + + 9.9718785E-03 + + 1.0102253E-02 + + 1.0257191E-02 + + 1.0422947E-02 + + 1.0576154E-02 + + 1.0751370E-02 + + 1.0937694E-02 + + 1.1150504E-02 + + 1.1403363E-02 + + 1.1690271E-02 + + 1.2041631E-02 + + 1.2515941E-02 + + 1.3148002E-02 + + 1.4030663E-02 + + 1.5293666E-02 + + 1.7182409E-02 + + 2.0111404E-02 + + 2.4776028E-02 + + + + 9.3172617E-03 + + 9.2089569E-03 + + 9.1486659E-03 + + 9.1277777E-03 + + 9.1461098E-03 + + 9.1678665E-03 + + 9.2093270E-03 + + 9.2630599E-03 + + 9.3084731E-03 + + 9.4133582E-03 + + 9.4836368E-03 + + 9.5792942E-03 + + 9.6772510E-03 + + 9.7775420E-03 + + 9.9042034E-03 + + 1.0042269E-02 + + 1.0180349E-02 + + 1.0339342E-02 + + 1.0499500E-02 + + 1.0689206E-02 + + 1.0856780E-02 + + 1.1064872E-02 + + 1.1313606E-02 + + 1.1607748E-02 + + 1.1964604E-02 + + 1.2435691E-02 + + 1.3060461E-02 + + 1.3974178E-02 + + 1.5269813E-02 + + 1.7174181E-02 + + 2.0168154E-02 + + 2.5006625E-02 + + + + 9.2675186E-03 + + 9.1560947E-03 + + 9.1099682E-03 + + 9.0686023E-03 + + 9.0949282E-03 + + 9.1189359E-03 + + 9.1587135E-03 + + 9.2079644E-03 + + 9.2872523E-03 + + 9.3678425E-03 + + 9.4331971E-03 + + 9.5255074E-03 + + 9.6234797E-03 + + 9.7408756E-03 + + 9.8464228E-03 + + 9.9839770E-03 + + 1.0134229E-02 + + 1.0296950E-02 + + 1.0437157E-02 + + 1.0621205E-02 + + 1.0805038E-02 + + 1.1016214E-02 + + 1.1261528E-02 + + 1.1539985E-02 + + 1.1895722E-02 + + 1.2371092E-02 + + 1.3001136E-02 + + 1.3913205E-02 + + 1.5214879E-02 + + 1.7172526E-02 + + 2.0220324E-02 + + 2.5144658E-02 + + + + 9.2487420E-03 + + 9.1281258E-03 + + 9.0754703E-03 + + 9.0528962E-03 + + 9.0607826E-03 + + 9.0836186E-03 + + 9.1336267E-03 + + 9.1791302E-03 + + 9.2456080E-03 + + 9.3262261E-03 + + 9.3970635E-03 + + 9.4814471E-03 + + 9.5988170E-03 + + 9.7082444E-03 + + 9.8223867E-03 + + 9.9431245E-03 + + 1.0105918E-02 + + 1.0235908E-02 + + 1.0399441E-02 + + 1.0585520E-02 + + 1.0757015E-02 + + 1.0981562E-02 + + 1.1194196E-02 + + 1.1486474E-02 + + 1.1845432E-02 + + 1.2322129E-02 + + 1.2940763E-02 + + 1.3835543E-02 + + 1.5166292E-02 + + 1.7159569E-02 + + 2.0241404E-02 + + 2.5261208E-02 + + + + 9.3326963E-03 + + 9.2136145E-03 + + 9.1672115E-03 + + 9.1448034E-03 + + 9.1509378E-03 + + 9.1710414E-03 + + 9.2163629E-03 + + 9.2665486E-03 + + 9.3325121E-03 + + 9.4016396E-03 + + 9.5034088E-03 + + 9.5773816E-03 + + 9.6674816E-03 + + 9.7850853E-03 + + 9.9014422E-03 + + 1.0023693E-02 + + 1.0166562E-02 + + 1.0315995E-02 + + 1.0472398E-02 + + 1.0641203E-02 + + 1.0830711E-02 + + 1.1048828E-02 + + 1.1263336E-02 + + 1.1551095E-02 + + 1.1894787E-02 + + 1.2358496E-02 + + 1.2983340E-02 + + 1.3874895E-02 + + 1.5186930E-02 + + 1.7144384E-02 + + 2.0133533E-02 + + 2.5038814E-02 + + + + 9.5906528E-03 + + 9.4714149E-03 + + 9.4373276E-03 + + 9.4092245E-03 + + 9.4080878E-03 + + 9.4464166E-03 + + 9.4856267E-03 + + 9.5436808E-03 + + 9.6059463E-03 + + 9.6771305E-03 + + 9.7582049E-03 + + 9.8361595E-03 + + 9.9382461E-03 + + 1.0051079E-02 + + 1.0152805E-02 + + 1.0287101E-02 + + 1.0441087E-02 + + 1.0565078E-02 + + 1.0711502E-02 + + 1.0891178E-02 + + 1.1071184E-02 + + 1.1292859E-02 + + 1.1522246E-02 + + 1.1788324E-02 + + 1.2135266E-02 + + 1.2615017E-02 + + 1.3201487E-02 + + 1.4060330E-02 + + 1.5281894E-02 + + 1.7084038E-02 + + 1.9845860E-02 + + 2.4315267E-02 + + + + 9.8248104E-03 + + 9.7323237E-03 + + 9.6774360E-03 + + 9.6780777E-03 + + 9.6806071E-03 + + 9.7078157E-03 + + 9.7458638E-03 + + 9.8100671E-03 + + 9.8562275E-03 + + 9.9244575E-03 + + 1.0022233E-02 + + 1.0083426E-02 + + 1.0184960E-02 + + 1.0286955E-02 + + 1.0393298E-02 + + 1.0523934E-02 + + 1.0674383E-02 + + 1.0799950E-02 + + 1.0950769E-02 + + 1.1117330E-02 + + 1.1304368E-02 + + 1.1511486E-02 + + 1.1731876E-02 + + 1.2009368E-02 + + 1.2343059E-02 + + 1.2776813E-02 + + 1.3375541E-02 + + 1.4170942E-02 + + 1.5323633E-02 + + 1.7010159E-02 + + 1.9570530E-02 + + 2.3678539E-02 + + + + 1.0003922E-02 + + 9.9126090E-03 + + 9.8710015E-03 + + 9.8670066E-03 + + 9.8659781E-03 + + 9.8893674E-03 + + 9.9377144E-03 + + 9.9843851E-03 + + 1.0043716E-02 + + 1.0114248E-02 + + 1.0187530E-02 + + 1.0267347E-02 + + 1.0358552E-02 + + 1.0462167E-02 + + 1.0591882E-02 + + 1.0702606E-02 + + 1.0831901E-02 + + 1.0977238E-02 + + 1.1108339E-02 + + 1.1308120E-02 + + 1.1462407E-02 + + 1.1644185E-02 + + 1.1896695E-02 + + 1.2152261E-02 + + 1.2470909E-02 + + 1.2904242E-02 + + 1.3463705E-02 + + 1.4217800E-02 + + 1.5306830E-02 + + 1.6913123E-02 + + 1.9352840E-02 + + 2.3210338E-02 + + + + 1.0110150E-02 + + 1.0038689E-02 + + 1.0006487E-02 + + 9.9882512E-03 + + 1.0012465E-02 + + 1.0038003E-02 + + 1.0080385E-02 + + 1.0133099E-02 + + 1.0195776E-02 + + 1.0230495E-02 + + 1.0337794E-02 + + 1.0414378E-02 + + 1.0494026E-02 + + 1.0600307E-02 + + 1.0712290E-02 + + 1.0823942E-02 + + 1.0947285E-02 + + 1.1079870E-02 + + 1.1237336E-02 + + 1.1392659E-02 + + 1.1573008E-02 + + 1.1782567E-02 + + 1.1965944E-02 + + 1.2231191E-02 + + 1.2530296E-02 + + 1.2940908E-02 + + 1.3487030E-02 + + 1.4206747E-02 + + 1.5258559E-02 + + 1.6813287E-02 + + 1.9165344E-02 + + 2.2905494E-02 + + + + 1.0214736E-02 + + 1.0132229E-02 + + 1.0105238E-02 + + 1.0076016E-02 + + 1.0102342E-02 + + 1.0126079E-02 + + 1.0166649E-02 + + 1.0211271E-02 + + 1.0274414E-02 + + 1.0328594E-02 + + 1.0415141E-02 + + 1.0493084E-02 + + 1.0583179E-02 + + 1.0679080E-02 + + 1.0785554E-02 + + 1.0896861E-02 + + 1.1025180E-02 + + 1.1151734E-02 + + 1.1308616E-02 + + 1.1460250E-02 + + 1.1631030E-02 + + 1.1818829E-02 + + 1.2020589E-02 + + 1.2270878E-02 + + 1.2564608E-02 + + 1.2974969E-02 + + 1.3498179E-02 + + 1.4207601E-02 + + 1.5228538E-02 + + 1.6730509E-02 + + 1.9011440E-02 + + 2.2710972E-02 + + + + 1.0268267E-02 + + 1.0196885E-02 + + 1.0157361E-02 + + 1.0140649E-02 + + 1.0169437E-02 + + 1.0183304E-02 + + 1.0243979E-02 + + 1.0276945E-02 + + 1.0343732E-02 + + 1.0412311E-02 + + 1.0476453E-02 + + 1.0547309E-02 + + 1.0646659E-02 + + 1.0745962E-02 + + 1.0848409E-02 + + 1.0960759E-02 + + 1.1082990E-02 + + 1.1214082E-02 + + 1.1358598E-02 + + 1.1499661E-02 + + 1.1661477E-02 + + 1.1836025E-02 + + 1.2058652E-02 + + 1.2293116E-02 + + 1.2566338E-02 + + 1.2977505E-02 + + 1.3480636E-02 + + 1.4176526E-02 + + 1.5190195E-02 + + 1.6660100E-02 + + 1.8910243E-02 + + 2.2560488E-02 + + + + 1.0317792E-02 + + 1.0247350E-02 + + 1.0209518E-02 + + 1.0176974E-02 + + 1.0202003E-02 + + 1.0234569E-02 + + 1.0290041E-02 + + 1.0329819E-02 + + 1.0401460E-02 + + 1.0453530E-02 + + 1.0512745E-02 + + 1.0606160E-02 + + 1.0688319E-02 + + 1.0769020E-02 + + 1.0865579E-02 + + 1.0991642E-02 + + 1.1131957E-02 + + 1.1257621E-02 + + 1.1387433E-02 + + 1.1532542E-02 + + 1.1687029E-02 + + 1.1880598E-02 + + 1.2082924E-02 + + 1.2307513E-02 + + 1.2595319E-02 + + 1.2957554E-02 + + 1.3464867E-02 + + 1.4143088E-02 + + 1.5132042E-02 + + 1.6579665E-02 + + 1.8862731E-02 + + 2.2454495E-02 + + + + 1.0353436E-02 + + 1.0273106E-02 + + 1.0227967E-02 + + 1.0220784E-02 + + 1.0226684E-02 + + 1.0260876E-02 + + 1.0312588E-02 + + 1.0358157E-02 + + 1.0401938E-02 + + 1.0498406E-02 + + 1.0534029E-02 + + 1.0633113E-02 + + 1.0711786E-02 + + 1.0806930E-02 + + 1.0902341E-02 + + 1.1005862E-02 + + 1.1140903E-02 + + 1.1256190E-02 + + 1.1418216E-02 + + 1.1551704E-02 + + 1.1699315E-02 + + 1.1876316E-02 + + 1.2095791E-02 + + 1.2321059E-02 + + 1.2598778E-02 + + 1.2945785E-02 + + 1.3441410E-02 + + 1.4150310E-02 + + 1.5110707E-02 + + 1.6555004E-02 + + 1.8801362E-02 + + 2.2362745E-02 + + + + 1.0368488E-02 + + 1.0298130E-02 + + 1.0243651E-02 + + 1.0237480E-02 + + 1.0271825E-02 + + 1.0283702E-02 + + 1.0344999E-02 + + 1.0388950E-02 + + 1.0443402E-02 + + 1.0499057E-02 + + 1.0554275E-02 + + 1.0647638E-02 + + 1.0712690E-02 + + 1.0827382E-02 + + 1.0931601E-02 + + 1.1018556E-02 + + 1.1152881E-02 + + 1.1290059E-02 + + 1.1420028E-02 + + 1.1563732E-02 + + 1.1705467E-02 + + 1.1895794E-02 + + 1.2092710E-02 + + 1.2310135E-02 + + 1.2594991E-02 + + 1.2963713E-02 + + 1.3446042E-02 + + 1.4105472E-02 + + 1.5078624E-02 + + 1.6548015E-02 + + 1.8734322E-02 + + 2.2344993E-02 + + + + 1.0381081E-02 + + 1.0306858E-02 + + 1.0277150E-02 + + 1.0252664E-02 + + 1.0290401E-02 + + 1.0294657E-02 + + 1.0329546E-02 + + 1.0392619E-02 + + 1.0438626E-02 + + 1.0515024E-02 + + 1.0591864E-02 + + 1.0665572E-02 + + 1.0764627E-02 + + 1.0867664E-02 + + 1.0949159E-02 + + 1.1055591E-02 + + 1.1176115E-02 + + 1.1296618E-02 + + 1.1417920E-02 + + 1.1572450E-02 + + 1.1714864E-02 + + 1.1894815E-02 + + 1.2080388E-02 + + 1.2311306E-02 + + 1.2600200E-02 + + 1.2956245E-02 + + 1.3438289E-02 + + 1.4113577E-02 + + 1.5087407E-02 + + 1.6503410E-02 + + 1.8740374E-02 + + 2.2290166E-02 + + + + 1.0379499E-02 + + 1.0316828E-02 + + 1.0280998E-02 + + 1.0282758E-02 + + 1.0275605E-02 + + 1.0306117E-02 + + 1.0348208E-02 + + 1.0378745E-02 + + 1.0464787E-02 + + 1.0530463E-02 + + 1.0608232E-02 + + 1.0674147E-02 + + 1.0763998E-02 + + 1.0837280E-02 + + 1.0949195E-02 + + 1.1058508E-02 + + 1.1190589E-02 + + 1.1322242E-02 + + 1.1432422E-02 + + 1.1582770E-02 + + 1.1718207E-02 + + 1.1912632E-02 + + 1.2075287E-02 + + 1.2309263E-02 + + 1.2598203E-02 + + 1.2947275E-02 + + 1.3422204E-02 + + 1.4101792E-02 + + 1.5074531E-02 + + 1.6493963E-02 + + 1.8703917E-02 + + 2.2279156E-02 + + + + 1.0425160E-02 + + 1.0318223E-02 + + 1.0301788E-02 + + 1.0294047E-02 + + 1.0284686E-02 + + 1.0349566E-02 + + 1.0366017E-02 + + 1.0397170E-02 + + 1.0476721E-02 + + 1.0527169E-02 + + 1.0602826E-02 + + 1.0679945E-02 + + 1.0766188E-02 + + 1.0868516E-02 + + 1.0967919E-02 + + 1.1069388E-02 + + 1.1166089E-02 + + 1.1293657E-02 + + 1.1442396E-02 + + 1.1579055E-02 + + 1.1756181E-02 + + 1.1901153E-02 + + 1.2075228E-02 + + 1.2329489E-02 + + 1.2582177E-02 + + 1.2965246E-02 + + 1.3451596E-02 + + 1.4114325E-02 + + 1.5048259E-02 + + 1.6478843E-02 + + 1.8702139E-02 + + 2.2209013E-02 + + + + 1.0403120E-02 + + 1.0338330E-02 + + 1.0290627E-02 + + 1.0277361E-02 + + 1.0322671E-02 + + 1.0363565E-02 + + 1.0362094E-02 + + 1.0440786E-02 + + 1.0485173E-02 + + 1.0557958E-02 + + 1.0608779E-02 + + 1.0701287E-02 + + 1.0735526E-02 + + 1.0841760E-02 + + 1.0953485E-02 + + 1.1083460E-02 + + 1.1193252E-02 + + 1.1297597E-02 + + 1.1457508E-02 + + 1.1572681E-02 + + 1.1742409E-02 + + 1.1907920E-02 + + 1.2078022E-02 + + 1.2328222E-02 + + 1.2585186E-02 + + 1.2967887E-02 + + 1.3432333E-02 + + 1.4108413E-02 + + 1.5033330E-02 + + 1.6472418E-02 + + 1.8651936E-02 + + 2.2205180E-02 + + + + 1.0383972E-02 + + 1.0327340E-02 + + 1.0320447E-02 + + 1.0278943E-02 + + 1.0322805E-02 + + 1.0366993E-02 + + 1.0395218E-02 + + 1.0418111E-02 + + 1.0463460E-02 + + 1.0564171E-02 + + 1.0601357E-02 + + 1.0671268E-02 + + 1.0756633E-02 + + 1.0863620E-02 + + 1.0982943E-02 + + 1.1088262E-02 + + 1.1182298E-02 + + 1.1297412E-02 + + 1.1404871E-02 + + 1.1585288E-02 + + 1.1730768E-02 + + 1.1878353E-02 + + 1.2074551E-02 + + 1.2333404E-02 + + 1.2612428E-02 + + 1.2970577E-02 + + 1.3454326E-02 + + 1.4077858E-02 + + 1.5040384E-02 + + 1.6507810E-02 + + 1.8671362E-02 + + 2.2195534E-02 + + + + 1.0393621E-02 + + 1.0343827E-02 + + 1.0278122E-02 + + 1.0307024E-02 + + 1.0321853E-02 + + 1.0374136E-02 + + 1.0395136E-02 + + 1.0457919E-02 + + 1.0485306E-02 + + 1.0588898E-02 + + 1.0597124E-02 + + 1.0623537E-02 + + 1.0731134E-02 + + 1.0828231E-02 + + 1.0959209E-02 + + 1.1072327E-02 + + 1.1248877E-02 + + 1.1263490E-02 + + 1.1402046E-02 + + 1.1566689E-02 + + 1.1767919E-02 + + 1.1861445E-02 + + 1.2076314E-02 + + 1.2322575E-02 + + 1.2537228E-02 + + 1.2963070E-02 + + 1.3353083E-02 + + 1.4108968E-02 + + 1.5044977E-02 + + 1.6501651E-02 + + 1.8769742E-02 + + 2.2133504E-02 + + + 1.0002763E+00 + + + 1.0002760E+00 + + + 1.0002658E+00 + + + 1.0002710E+00 + + + 1.0002776E+00 + + + 1.0002767E+00 + + + 1.0002833E+00 + + + 1.0002791E+00 + + + 1.0002788E+00 + + + 1.0002858E+00 + + + 1.0002884E+00 + + + 1.0002916E+00 + + + 1.0003039E+00 + + + 1.0003181E+00 + + + 1.0003365E+00 + + + 1.0003544E+00 + + + 1.0003372E+00 + + + 1.0002764E+00 + + + 1.0002508E+00 + + + 1.0002343E+00 + + + 1.0002360E+00 + + + 1.0002375E+00 + + + 1.0002331E+00 + + + 1.0002344E+00 + + + 1.0002385E+00 + + + 1.0002316E+00 + + + 1.0002360E+00 + + + 1.0002360E+00 + + + 1.0002354E+00 + + + 1.0002349E+00 + + + 1.0002325E+00 + + + 1.0002268E+00 + + + + + clad_ang_mu.71c + clad_ang_mu.71c + 2.5300000E-08 + 32 + false + 32 + 1 + angle + histogram + + 3.1005638E-01 + + 3.0999067E-01 + + 3.0994879E-01 + + 3.0987779E-01 + + 3.0961631E-01 + + 3.0948272E-01 + + 3.0913340E-01 + + 3.0868239E-01 + + 3.0799925E-01 + + 3.0712597E-01 + + 3.0590948E-01 + + 3.0432728E-01 + + 3.0235012E-01 + + 2.9996873E-01 + + 2.9743091E-01 + + 2.9739624E-01 + + 3.0835788E-01 + + 3.1305337E-01 + + 3.1379599E-01 + + 3.1314506E-01 + + 3.1216249E-01 + + 3.1129786E-01 + + 3.1059203E-01 + + 3.1009561E-01 + + 3.0977837E-01 + + 3.0951041E-01 + + 3.0930940E-01 + + 3.0929712E-01 + + 3.0925741E-01 + + 3.0917641E-01 + + 3.0919741E-01 + + 3.0912502E-01 + + + 1.3490691E-03 + + 1.3463259E-03 + + 1.3498512E-03 + + 1.3366347E-03 + + 1.3288899E-03 + + 1.3176269E-03 + + 1.3059971E-03 + + 1.2891508E-03 + + 1.2713136E-03 + + 1.2555332E-03 + + 1.2394055E-03 + + 1.2170158E-03 + + 1.1969201E-03 + + 1.1849620E-03 + + 1.1899173E-03 + + 1.2761137E-03 + + 1.6244505E-03 + + 1.9090551E-03 + + 2.0837409E-03 + + 2.1976011E-03 + + 2.2746911E-03 + + 2.3308251E-03 + + 2.3700744E-03 + + 2.3981231E-03 + + 2.4248079E-03 + + 2.4441792E-03 + + 2.4510541E-03 + + 2.4640212E-03 + + 2.4741885E-03 + + 2.4697219E-03 + + 2.4721421E-03 + + 2.4729172E-03 + + + 8.6638893E-03 + + 8.2719674E-03 + + 7.8055649E-03 + + 7.4105610E-03 + + 7.2544086E-03 + + 7.0854147E-03 + + 6.9965517E-03 + + 7.0314805E-03 + + 6.8552954E-03 + + 6.9138525E-03 + + 6.9528906E-03 + + 7.0689776E-03 + + 7.0720596E-03 + + 7.2523539E-03 + + 7.5405167E-03 + + 7.7624175E-03 + + 7.9838046E-03 + + 8.1702629E-03 + + 8.4784584E-03 + + 8.8970906E-03 + + 9.3105862E-03 + + 9.7826390E-03 + + 1.0253151E-02 + + 1.0659455E-02 + + 1.1134076E-02 + + 1.1649276E-02 + + 1.2603655E-02 + + 1.3342297E-02 + + 1.4372697E-02 + + 1.5779610E-02 + + 1.7933383E-02 + + 2.0318816E-02 + + + + 8.6137649E-03 + + 8.0815773E-03 + + 7.7778880E-03 + + 7.4879636E-03 + + 7.2446680E-03 + + 7.0652074E-03 + + 6.9244607E-03 + + 6.9131046E-03 + + 6.9017486E-03 + + 6.9408066E-03 + + 6.9814132E-03 + + 7.0440438E-03 + + 7.1589812E-03 + + 7.3353447E-03 + + 7.5896522E-03 + + 7.7529390E-03 + + 8.0199791E-03 + + 8.3484454E-03 + + 8.5960425E-03 + + 8.9554799E-03 + + 9.2763754E-03 + + 9.7440398E-03 + + 1.0084034E-02 + + 1.0634976E-02 + + 1.1176800E-02 + + 1.1768004E-02 + + 1.2488944E-02 + + 1.3414293E-02 + + 1.4307639E-02 + + 1.5845012E-02 + + 1.7838866E-02 + + 2.0339442E-02 + + + + 8.6069286E-03 + + 8.1600584E-03 + + 7.7753343E-03 + + 7.5082514E-03 + + 7.2541589E-03 + + 7.1052368E-03 + + 7.0049508E-03 + + 6.9087178E-03 + + 6.8877253E-03 + + 6.9276318E-03 + + 6.9580813E-03 + + 7.0116019E-03 + + 7.1577180E-03 + + 7.3369857E-03 + + 7.5182280E-03 + + 7.7277374E-03 + + 7.9440018E-03 + + 8.2744779E-03 + + 8.6378977E-03 + + 8.8881451E-03 + + 9.2653867E-03 + + 9.6492794E-03 + + 1.0205685E-02 + + 1.0657959E-02 + + 1.1210208E-02 + + 1.1713716E-02 + + 1.2497402E-02 + + 1.3347079E-02 + + 1.4469243E-02 + + 1.5835834E-02 + + 1.7754882E-02 + + 2.0415319E-02 + + + + 8.6357058E-03 + + 8.1456937E-03 + + 7.7155413E-03 + + 7.4818571E-03 + + 7.2524325E-03 + + 7.0736756E-03 + + 7.0115740E-03 + + 6.8735456E-03 + + 6.8726489E-03 + + 6.9218219E-03 + + 6.9136015E-03 + + 7.0770385E-03 + + 7.1125358E-03 + + 7.2947303E-03 + + 7.5540473E-03 + + 7.7247333E-03 + + 7.9593143E-03 + + 8.2175104E-03 + + 8.5783123E-03 + + 8.9662416E-03 + + 9.2850446E-03 + + 9.7500218E-03 + + 1.0192206E-02 + + 1.0589252E-02 + + 1.1196518E-02 + + 1.1754610E-02 + + 1.2477858E-02 + + 1.3364244E-02 + + 1.4489097E-02 + + 1.5799582E-02 + + 1.7806262E-02 + + 2.0415575E-02 + + + + 8.6187094E-03 + + 8.1028888E-03 + + 7.7502930E-03 + + 7.4368288E-03 + + 7.2053294E-03 + + 7.0754195E-03 + + 6.9609624E-03 + + 6.9199506E-03 + + 6.8721819E-03 + + 6.9170716E-03 + + 6.9278240E-03 + + 7.0082024E-03 + + 7.1469258E-03 + + 7.2928174E-03 + + 7.4578635E-03 + + 7.7005853E-03 + + 7.9397817E-03 + + 8.2897923E-03 + + 8.5642424E-03 + + 8.9336425E-03 + + 9.2822429E-03 + + 9.6866617E-03 + + 1.0169638E-02 + + 1.0601319E-02 + + 1.1134062E-02 + + 1.1797713E-02 + + 1.2521413E-02 + + 1.3398584E-02 + + 1.4465948E-02 + + 1.5920693E-02 + + 1.7831503E-02 + + 2.0386280E-02 + + + + 8.5957828E-03 + + 8.0917421E-03 + + 7.7483058E-03 + + 7.4335661E-03 + + 7.2051598E-03 + + 7.0542832E-03 + + 6.9482999E-03 + + 6.8660522E-03 + + 6.8566650E-03 + + 6.8895446E-03 + + 6.9769966E-03 + + 7.0151292E-03 + + 7.1289919E-03 + + 7.2728159E-03 + + 7.4843447E-03 + + 7.6904746E-03 + + 7.9728210E-03 + + 8.2376090E-03 + + 8.5714149E-03 + + 8.9027889E-03 + + 9.2973443E-03 + + 9.6952072E-03 + + 1.0177798E-02 + + 1.0619290E-02 + + 1.1136220E-02 + + 1.1749356E-02 + + 1.2532485E-02 + + 1.3371645E-02 + + 1.4476030E-02 + + 1.5936887E-02 + + 1.7814576E-02 + + 2.0401706E-02 + + + + 8.5762717E-03 + + 8.0787798E-03 + + 7.6957274E-03 + + 7.4218081E-03 + + 7.1969403E-03 + + 7.0456914E-03 + + 6.9243998E-03 + + 6.8670339E-03 + + 6.8410876E-03 + + 6.8440959E-03 + + 6.9114894E-03 + + 6.9709444E-03 + + 7.1246584E-03 + + 7.2467020E-03 + + 7.4540634E-03 + + 7.6790984E-03 + + 7.9072251E-03 + + 8.2202101E-03 + + 8.5598098E-03 + + 8.9093117E-03 + + 9.2775317E-03 + + 9.6625479E-03 + + 1.0156279E-02 + + 1.0632045E-02 + + 1.1116292E-02 + + 1.1767916E-02 + + 1.2489983E-02 + + 1.3349302E-02 + + 1.4524155E-02 + + 1.5953415E-02 + + 1.7870641E-02 + + 2.0504336E-02 + + + + 8.5580155E-03 + + 8.0552826E-03 + + 7.6847006E-03 + + 7.3901486E-03 + + 7.1714794E-03 + + 6.9956094E-03 + + 6.8966894E-03 + + 6.8584904E-03 + + 6.8074847E-03 + + 6.8182305E-03 + + 6.8700458E-03 + + 6.9598760E-03 + + 7.0775275E-03 + + 7.2721659E-03 + + 7.4256244E-03 + + 7.6626570E-03 + + 7.8956048E-03 + + 8.2476025E-03 + + 8.5876768E-03 + + 8.8916497E-03 + + 9.2599869E-03 + + 9.6607086E-03 + + 1.0104818E-02 + + 1.0621057E-02 + + 1.1139577E-02 + + 1.1789513E-02 + + 1.2505652E-02 + + 1.3335138E-02 + + 1.4480446E-02 + + 1.5926378E-02 + + 1.7926012E-02 + + 2.0526011E-02 + + + + 8.5161659E-03 + + 8.0446298E-03 + + 7.6545410E-03 + + 7.3722009E-03 + + 7.1148071E-03 + + 6.9727284E-03 + + 6.8574133E-03 + + 6.7687628E-03 + + 6.7671107E-03 + + 6.8028617E-03 + + 6.8012426E-03 + + 6.9205557E-03 + + 7.0398688E-03 + + 7.2416867E-03 + + 7.3960899E-03 + + 7.6495518E-03 + + 7.9006016E-03 + + 8.1906074E-03 + + 8.4993478E-03 + + 8.8863636E-03 + + 9.2483009E-03 + + 9.6547452E-03 + + 1.0109959E-02 + + 1.0588004E-02 + + 1.1123575E-02 + + 1.1768480E-02 + + 1.2510924E-02 + + 1.3377043E-02 + + 1.4514862E-02 + + 1.5985046E-02 + + 1.7920853E-02 + + 2.0545741E-02 + + + + 8.4881904E-03 + + 8.0008968E-03 + + 7.5800933E-03 + + 7.3219921E-03 + + 7.0930406E-03 + + 6.9243759E-03 + + 6.8395166E-03 + + 6.7595356E-03 + + 6.7209304E-03 + + 6.7524289E-03 + + 6.7924495E-03 + + 6.8886916E-03 + + 7.0061035E-03 + + 7.1949742E-03 + + 7.3557793E-03 + + 7.6015942E-03 + + 7.8273839E-03 + + 8.1635087E-03 + + 8.4872268E-03 + + 8.8563257E-03 + + 9.1982925E-03 + + 9.6315629E-03 + + 1.0058991E-02 + + 1.0542942E-02 + + 1.1120245E-02 + + 1.1716127E-02 + + 1.2496242E-02 + + 1.3357995E-02 + + 1.4520670E-02 + + 1.5968277E-02 + + 1.7999571E-02 + + 2.0619911E-02 + + + + 8.4547550E-03 + + 7.9415583E-03 + + 7.5504996E-03 + + 7.2492760E-03 + + 7.0388623E-03 + + 6.9114334E-03 + + 6.7880701E-03 + + 6.7298137E-03 + + 6.6707776E-03 + + 6.6865113E-03 + + 6.7469676E-03 + + 6.8440431E-03 + + 6.9530093E-03 + + 7.1334872E-03 + + 7.3320937E-03 + + 7.5447909E-03 + + 7.7926035E-03 + + 8.1024597E-03 + + 8.4776176E-03 + + 8.7989469E-03 + + 9.1860513E-03 + + 9.6106103E-03 + + 1.0035921E-02 + + 1.0516926E-02 + + 1.1111883E-02 + + 1.1693054E-02 + + 1.2421315E-02 + + 1.3359879E-02 + + 1.4448956E-02 + + 1.5939312E-02 + + 1.7946680E-02 + + 2.0638422E-02 + + + + 8.4199682E-03 + + 7.9132357E-03 + + 7.5289024E-03 + + 7.2000914E-03 + + 6.9952420E-03 + + 6.8508371E-03 + + 6.7532303E-03 + + 6.6833325E-03 + + 6.6177839E-03 + + 6.6622382E-03 + + 6.7105208E-03 + + 6.7909136E-03 + + 6.9136513E-03 + + 7.0763901E-03 + + 7.2891302E-03 + + 7.5133811E-03 + + 7.7798727E-03 + + 8.0728234E-03 + + 8.3719982E-03 + + 8.7418259E-03 + + 9.0827206E-03 + + 9.5593221E-03 + + 9.9725625E-03 + + 1.0449294E-02 + + 1.0985324E-02 + + 1.1627712E-02 + + 1.2345830E-02 + + 1.3279892E-02 + + 1.4416720E-02 + + 1.5897541E-02 + + 1.7949472E-02 + + 2.0670535E-02 + + + + 8.3808798E-03 + + 7.8549469E-03 + + 7.4548947E-03 + + 7.1338816E-03 + + 6.9441484E-03 + + 6.7971643E-03 + + 6.6772004E-03 + + 6.6034372E-03 + + 6.5689962E-03 + + 6.6291014E-03 + + 6.6629260E-03 + + 6.7229080E-03 + + 6.8650107E-03 + + 7.0400011E-03 + + 7.2281319E-03 + + 7.4627838E-03 + + 7.7395439E-03 + + 8.0343750E-03 + + 8.3395359E-03 + + 8.6563579E-03 + + 9.0736921E-03 + + 9.4975103E-03 + + 9.9294641E-03 + + 1.0370071E-02 + + 1.0916688E-02 + + 1.1554450E-02 + + 1.2270239E-02 + + 1.3181629E-02 + + 1.4291357E-02 + + 1.5819158E-02 + + 1.7859062E-02 + + 2.0611377E-02 + + + + 8.3161285E-03 + + 7.8077760E-03 + + 7.3959293E-03 + + 7.1090603E-03 + + 6.8980291E-03 + + 6.7587447E-03 + + 6.6504860E-03 + + 6.5749792E-03 + + 6.5613818E-03 + + 6.5416597E-03 + + 6.6015118E-03 + + 6.7070747E-03 + + 6.8290963E-03 + + 7.0031900E-03 + + 7.1846853E-03 + + 7.4125063E-03 + + 7.6750420E-03 + + 7.9813021E-03 + + 8.2806571E-03 + + 8.6141119E-03 + + 8.9704813E-03 + + 9.3882871E-03 + + 9.8368112E-03 + + 1.0298412E-02 + + 1.0822136E-02 + + 1.1413491E-02 + + 1.2145337E-02 + + 1.3048321E-02 + + 1.4114237E-02 + + 1.5706737E-02 + + 1.7654188E-02 + + 2.0500295E-02 + + + + 8.3192873E-03 + + 7.7697531E-03 + + 7.3819594E-03 + + 7.0971817E-03 + + 6.8836908E-03 + + 6.7313952E-03 + + 6.6234836E-03 + + 6.5684539E-03 + + 6.5572540E-03 + + 6.5781759E-03 + + 6.6163018E-03 + + 6.6999200E-03 + + 6.8297696E-03 + + 6.9564324E-03 + + 7.1572917E-03 + + 7.4359960E-03 + + 7.6444528E-03 + + 7.9171531E-03 + + 8.2232683E-03 + + 8.5632604E-03 + + 8.9017284E-03 + + 9.3233527E-03 + + 9.7185361E-03 + + 1.0167756E-02 + + 1.0690318E-02 + + 1.1287654E-02 + + 1.1955699E-02 + + 1.2797701E-02 + + 1.3915636E-02 + + 1.5417831E-02 + + 1.7413631E-02 + + 2.0132344E-02 + + + + 8.3402366E-03 + + 7.8783074E-03 + + 7.5306252E-03 + + 7.2763123E-03 + + 7.0815582E-03 + + 6.9389151E-03 + + 6.8574149E-03 + + 6.7982581E-03 + + 6.7740232E-03 + + 6.7825822E-03 + + 6.8155653E-03 + + 6.8794036E-03 + + 7.0109342E-03 + + 7.1732489E-03 + + 7.3504593E-03 + + 7.5193707E-03 + + 7.7780813E-03 + + 8.0399365E-03 + + 8.3133536E-03 + + 8.6051891E-03 + + 8.9148994E-03 + + 9.3197524E-03 + + 9.7034206E-03 + + 1.0115863E-02 + + 1.0600845E-02 + + 1.1142903E-02 + + 1.1780624E-02 + + 1.2556047E-02 + + 1.3579729E-02 + + 1.4891180E-02 + + 1.6672103E-02 + + 1.9078712E-02 + + + + 8.8088395E-03 + + 8.4507679E-03 + + 8.1708811E-03 + + 7.9801672E-03 + + 7.8027326E-03 + + 7.7405325E-03 + + 7.6178992E-03 + + 7.5796349E-03 + + 7.5729815E-03 + + 7.5709385E-03 + + 7.6313441E-03 + + 7.6551420E-03 + + 7.7197992E-03 + + 7.8770525E-03 + + 7.9879526E-03 + + 8.1371998E-03 + + 8.3342910E-03 + + 8.5247565E-03 + + 8.7962504E-03 + + 9.0806648E-03 + + 9.3313150E-03 + + 9.6858805E-03 + + 1.0017311E-02 + + 1.0396502E-02 + + 1.0810783E-02 + + 1.1308495E-02 + + 1.1873348E-02 + + 1.2517849E-02 + + 1.3292300E-02 + + 1.4204872E-02 + + 1.5413040E-02 + + 1.6865149E-02 + + + + 9.0402122E-03 + + 8.7656934E-03 + + 8.5418137E-03 + + 8.3375574E-03 + + 8.2205328E-03 + + 8.0954859E-03 + + 8.0140696E-03 + + 7.9720195E-03 + + 7.9707073E-03 + + 7.9496524E-03 + + 7.9729738E-03 + + 8.0286530E-03 + + 8.0949490E-03 + + 8.2040408E-03 + + 8.3348436E-03 + + 8.4638271E-03 + + 8.5967473E-03 + + 8.8120082E-03 + + 9.0406595E-03 + + 9.2571730E-03 + + 9.4741636E-03 + + 9.7864082E-03 + + 1.0105154E-02 + + 1.0426882E-02 + + 1.0815324E-02 + + 1.1263114E-02 + + 1.1718090E-02 + + 1.2294266E-02 + + 1.2954841E-02 + + 1.3732023E-02 + + 1.4787929E-02 + + 1.6057604E-02 + + + + 9.1615425E-03 + + 8.8847745E-03 + + 8.6630839E-03 + + 8.4765570E-03 + + 8.3309009E-03 + + 8.2383585E-03 + + 8.1836800E-03 + + 8.1120640E-03 + + 8.1261785E-03 + + 8.0708249E-03 + + 8.1480561E-03 + + 8.1784637E-03 + + 8.2346151E-03 + + 8.3274337E-03 + + 8.4147598E-03 + + 8.5448285E-03 + + 8.7091710E-03 + + 8.8843142E-03 + + 9.0949279E-03 + + 9.2936363E-03 + + 9.5389840E-03 + + 9.7958383E-03 + + 1.0086138E-02 + + 1.0400309E-02 + + 1.0727798E-02 + + 1.1115580E-02 + + 1.1556966E-02 + + 1.2062390E-02 + + 1.2723933E-02 + + 1.3461879E-02 + + 1.4407800E-02 + + 1.5727050E-02 + + + + 9.1377654E-03 + + 8.8751018E-03 + + 8.6821226E-03 + + 8.4858221E-03 + + 8.3554460E-03 + + 8.2804350E-03 + + 8.2266991E-03 + + 8.1758459E-03 + + 8.1472390E-03 + + 8.1455783E-03 + + 8.1349878E-03 + + 8.1925776E-03 + + 8.2538648E-03 + + 8.3264317E-03 + + 8.4644531E-03 + + 8.6009391E-03 + + 8.7147401E-03 + + 8.9206598E-03 + + 9.1064325E-03 + + 9.2780740E-03 + + 9.4991589E-03 + + 9.7677443E-03 + + 1.0040842E-02 + + 1.0310399E-02 + + 1.0637483E-02 + + 1.1002699E-02 + + 1.1454957E-02 + + 1.1928711E-02 + + 1.2543618E-02 + + 1.3315003E-02 + + 1.4311921E-02 + + 1.5626273E-02 + + + + 9.1477964E-03 + + 8.8569131E-03 + + 8.6480911E-03 + + 8.4806682E-03 + + 8.3743826E-03 + + 8.2509863E-03 + + 8.2112855E-03 + + 8.1583830E-03 + + 8.1332616E-03 + + 8.1132990E-03 + + 8.1560439E-03 + + 8.1779291E-03 + + 8.2488074E-03 + + 8.3305803E-03 + + 8.4259072E-03 + + 8.5822114E-03 + + 8.7017305E-03 + + 8.8788944E-03 + + 9.0655429E-03 + + 9.2582475E-03 + + 9.4805275E-03 + + 9.7278007E-03 + + 9.9553998E-03 + + 1.0269546E-02 + + 1.0586672E-02 + + 1.0921006E-02 + + 1.1328973E-02 + + 1.1802691E-02 + + 1.2450626E-02 + + 1.3255698E-02 + + 1.4251456E-02 + + 1.5657809E-02 + + + + 9.0883340E-03 + + 8.8433984E-03 + + 8.6289182E-03 + + 8.4439323E-03 + + 8.3093188E-03 + + 8.2332632E-03 + + 8.1799745E-03 + + 8.1280446E-03 + + 8.0845653E-03 + + 8.1128997E-03 + + 8.1014997E-03 + + 8.1603558E-03 + + 8.2532133E-03 + + 8.3021938E-03 + + 8.4337253E-03 + + 8.5567067E-03 + + 8.6772027E-03 + + 8.8890649E-03 + + 9.0381936E-03 + + 9.2474046E-03 + + 9.4507499E-03 + + 9.7047326E-03 + + 9.9402566E-03 + + 1.0205441E-02 + + 1.0504990E-02 + + 1.0882385E-02 + + 1.1274627E-02 + + 1.1783289E-02 + + 1.2386232E-02 + + 1.3164784E-02 + + 1.4270026E-02 + + 1.5728107E-02 + + + + 9.0807708E-03 + + 8.8015024E-03 + + 8.5814276E-03 + + 8.4248165E-03 + + 8.2946254E-03 + + 8.2126919E-03 + + 8.1370075E-03 + + 8.0715301E-03 + + 8.0815288E-03 + + 8.0835771E-03 + + 8.1054492E-03 + + 8.1477700E-03 + + 8.2076231E-03 + + 8.2545960E-03 + + 8.4024583E-03 + + 8.5599026E-03 + + 8.6575633E-03 + + 8.8233051E-03 + + 9.0064404E-03 + + 9.2354725E-03 + + 9.4557209E-03 + + 9.6788857E-03 + + 9.8947250E-03 + + 1.0174410E-02 + + 1.0498117E-02 + + 1.0823664E-02 + + 1.1218924E-02 + + 1.1737640E-02 + + 1.2318916E-02 + + 1.3224386E-02 + + 1.4293237E-02 + + 1.5742419E-02 + + + + 9.0662532E-03 + + 8.7875937E-03 + + 8.5608939E-03 + + 8.3990606E-03 + + 8.2689578E-03 + + 8.1502455E-03 + + 8.0945876E-03 + + 8.0499873E-03 + + 8.0046473E-03 + + 8.0312744E-03 + + 8.0845285E-03 + + 8.0864516E-03 + + 8.1794243E-03 + + 8.2886692E-03 + + 8.3753921E-03 + + 8.5095259E-03 + + 8.6235784E-03 + + 8.8149234E-03 + + 9.0064533E-03 + + 9.1933604E-03 + + 9.4366281E-03 + + 9.6340012E-03 + + 9.8577424E-03 + + 1.0162178E-02 + + 1.0489950E-02 + + 1.0830480E-02 + + 1.1216758E-02 + + 1.1718234E-02 + + 1.2372964E-02 + + 1.3217004E-02 + + 1.4300060E-02 + + 1.5874384E-02 + + + + 9.0385593E-03 + + 8.7911739E-03 + + 8.5398942E-03 + + 8.3506015E-03 + + 8.2438909E-03 + + 8.1613890E-03 + + 8.0460870E-03 + + 8.0305903E-03 + + 8.0028889E-03 + + 8.0232434E-03 + + 8.0276194E-03 + + 8.1064278E-03 + + 8.1288298E-03 + + 8.2312446E-03 + + 8.3452218E-03 + + 8.4759402E-03 + + 8.6203085E-03 + + 8.7737100E-03 + + 8.9852040E-03 + + 9.1640184E-03 + + 9.3706145E-03 + + 9.6371098E-03 + + 9.8385671E-03 + + 1.0187163E-02 + + 1.0453859E-02 + + 1.0791575E-02 + + 1.1239213E-02 + + 1.1704998E-02 + + 1.2413952E-02 + + 1.3197580E-02 + + 1.4388298E-02 + + 1.5983777E-02 + + + + 9.0381972E-03 + + 8.7249421E-03 + + 8.5299403E-03 + + 8.3296610E-03 + + 8.1906552E-03 + + 8.0856852E-03 + + 8.0084895E-03 + + 7.9976213E-03 + + 7.9681027E-03 + + 7.9954298E-03 + + 8.0300023E-03 + + 8.0899341E-03 + + 8.1518784E-03 + + 8.2341280E-03 + + 8.3101161E-03 + + 8.4644180E-03 + + 8.6281121E-03 + + 8.7991411E-03 + + 8.9588100E-03 + + 9.1981791E-03 + + 9.3869641E-03 + + 9.6145258E-03 + + 9.9132005E-03 + + 1.0156461E-02 + + 1.0475933E-02 + + 1.0810611E-02 + + 1.1229999E-02 + + 1.1691965E-02 + + 1.2394061E-02 + + 1.3229214E-02 + + 1.4413895E-02 + + 1.6023151E-02 + + + + 8.9900779E-03 + + 8.7242101E-03 + + 8.4738461E-03 + + 8.3135886E-03 + + 8.1704723E-03 + + 8.0916227E-03 + + 8.0054050E-03 + + 7.9890825E-03 + + 7.9822260E-03 + + 7.9494275E-03 + + 8.0343148E-03 + + 8.0498187E-03 + + 8.1090198E-03 + + 8.2328458E-03 + + 8.3082672E-03 + + 8.4585469E-03 + + 8.6087756E-03 + + 8.8041342E-03 + + 8.9504229E-03 + + 9.1682953E-03 + + 9.3389911E-03 + + 9.6352014E-03 + + 9.8666333E-03 + + 1.0149489E-02 + + 1.0464017E-02 + + 1.0804437E-02 + + 1.1200629E-02 + + 1.1730829E-02 + + 1.2396625E-02 + + 1.3311556E-02 + + 1.4467897E-02 + + 1.6069551E-02 + + + + 9.0103050E-03 + + 8.7325667E-03 + + 8.5095225E-03 + + 8.3198922E-03 + + 8.1828827E-03 + + 8.0755069E-03 + + 7.9981914E-03 + + 7.9413633E-03 + + 7.9823990E-03 + + 7.9246563E-03 + + 7.9815454E-03 + + 8.0345931E-03 + + 8.0725191E-03 + + 8.2341012E-03 + + 8.3041608E-03 + + 8.3831836E-03 + + 8.6106789E-03 + + 8.7518346E-03 + + 8.9641474E-03 + + 9.0978032E-03 + + 9.3592003E-03 + + 9.5996223E-03 + + 9.9237621E-03 + + 1.0175830E-02 + + 1.0455459E-02 + + 1.0836548E-02 + + 1.1244650E-02 + + 1.1760188E-02 + + 1.2384627E-02 + + 1.3346254E-02 + + 1.4480133E-02 + + 1.6136563E-02 + + + + 9.0228604E-03 + + 8.6804828E-03 + + 8.4614534E-03 + + 8.2426545E-03 + + 8.1392111E-03 + + 8.0814949E-03 + + 7.9912702E-03 + + 7.9974952E-03 + + 7.9421615E-03 + + 7.9138029E-03 + + 7.9451587E-03 + + 8.0340001E-03 + + 8.0954821E-03 + + 8.1764077E-03 + + 8.3095930E-03 + + 8.4157262E-03 + + 8.6168490E-03 + + 8.7576427E-03 + + 8.9333274E-03 + + 9.1895534E-03 + + 9.3857577E-03 + + 9.6418300E-03 + + 9.8564788E-03 + + 1.0150132E-02 + + 1.0487898E-02 + + 1.0870470E-02 + + 1.1271947E-02 + + 1.1778020E-02 + + 1.2502739E-02 + + 1.3339816E-02 + + 1.4543555E-02 + + 1.6130789E-02 + + + + 9.0622003E-03 + + 8.7178702E-03 + + 8.4596226E-03 + + 8.2747360E-03 + + 8.1644825E-03 + + 8.0165944E-03 + + 7.9932716E-03 + + 7.9360246E-03 + + 7.9425974E-03 + + 7.9418553E-03 + + 7.9541528E-03 + + 8.0182907E-03 + + 8.0812624E-03 + + 8.0915456E-03 + + 8.2908500E-03 + + 8.4101146E-03 + + 8.5246086E-03 + + 8.7454336E-03 + + 8.9623361E-03 + + 9.1273983E-03 + + 9.3738784E-03 + + 9.6552369E-03 + + 9.8941901E-03 + + 1.0161555E-02 + + 1.0501008E-02 + + 1.0866011E-02 + + 1.1314128E-02 + + 1.1790338E-02 + + 1.2447300E-02 + + 1.3396964E-02 + + 1.4531939E-02 + + 1.6115773E-02 + + + + 8.9679455E-03 + + 8.7523346E-03 + + 8.4194831E-03 + + 8.2562897E-03 + + 8.2501744E-03 + + 8.0453964E-03 + + 7.9636250E-03 + + 7.9278064E-03 + + 7.9395130E-03 + + 7.8808053E-03 + + 7.8942591E-03 + + 7.9779525E-03 + + 8.1203535E-03 + + 8.1780129E-03 + + 8.2976996E-03 + + 8.3927501E-03 + + 8.5693973E-03 + + 8.7760972E-03 + + 8.9639268E-03 + + 9.1777904E-03 + + 9.3233365E-03 + + 9.6757573E-03 + + 9.8043550E-03 + + 1.0142972E-02 + + 1.0460099E-02 + + 1.0900581E-02 + + 1.1166513E-02 + + 1.1798843E-02 + + 1.2569032E-02 + + 1.3335377E-02 + + 1.4567713E-02 + + 1.6266042E-02 + + + + 9.0235493E-03 + + 8.7359753E-03 + + 8.4400355E-03 + + 8.2314136E-03 + + 8.1409585E-03 + + 8.0562549E-03 + + 8.0165174E-03 + + 7.9631855E-03 + + 7.9527283E-03 + + 7.9590026E-03 + + 7.9558654E-03 + + 7.9982172E-03 + + 7.9903743E-03 + + 8.1472328E-03 + + 8.3527175E-03 + + 8.3019999E-03 + + 8.5775481E-03 + + 8.8353190E-03 + + 8.9853803E-03 + + 9.0836784E-03 + + 9.4481131E-03 + + 9.5401367E-03 + + 9.8920227E-03 + + 1.0186917E-02 + + 1.0500634E-02 + + 1.0833697E-02 + + 1.1379042E-02 + + 1.1793671E-02 + + 1.2553389E-02 + + 1.3369577E-02 + + 1.4595165E-02 + + 1.6031466E-02 + + + 1.0000416E+00 + + + 1.0000513E+00 + + + 1.0000397E+00 + + + 1.0000409E+00 + + + 1.0000455E+00 + + + 1.0000417E+00 + + + 1.0000452E+00 + + + 1.0000431E+00 + + + 1.0000455E+00 + + + 1.0000451E+00 + + + 1.0000445E+00 + + + 1.0000482E+00 + + + 1.0000507E+00 + + + 1.0000542E+00 + + + 1.0000545E+00 + + + 1.0000461E+00 + + + 1.0000114E+00 + + + 1.0000112E+00 + + + 1.0000195E+00 + + + 1.0000216E+00 + + + 1.0000279E+00 + + + 1.0000307E+00 + + + 1.0000302E+00 + + + 1.0000313E+00 + + + 1.0000334E+00 + + + 1.0000309E+00 + + + 1.0000325E+00 + + + 1.0000318E+00 + + + 1.0000346E+00 + + + 1.0000335E+00 + + + 1.0000285E+00 + + + 1.0000358E+00 + + + + + lwtr_ang_mu.71c + lwtr_ang_mu.71c + 2.5300000E-08 + 32 + false + 32 + 1 + angle + histogram + + 8.3129229E-01 + + 8.3203829E-01 + + 8.3332424E-01 + + 8.3539719E-01 + + 8.3799288E-01 + + 8.4156597E-01 + + 8.4594074E-01 + + 8.5122773E-01 + + 8.5788274E-01 + + 8.6633387E-01 + + 8.7719846E-01 + + 8.9195077E-01 + + 9.1326621E-01 + + 9.4469159E-01 + + 9.9368716E-01 + + 1.0616854E+00 + + 1.0982938E+00 + + 1.0997200E+00 + + 1.0855410E+00 + + 1.0676695E+00 + + 1.0508172E+00 + + 1.0369337E+00 + + 1.0255762E+00 + + 1.0162841E+00 + + 1.0086633E+00 + + 1.0025783E+00 + + 9.9737297E-01 + + 9.9326768E-01 + + 9.9030852E-01 + + 9.8792719E-01 + + 9.8610453E-01 + + 9.8540665E-01 + + + 7.7368065E-03 + + 7.7519393E-03 + + 7.7819449E-03 + + 7.8285240E-03 + + 7.8881877E-03 + + 7.9652685E-03 + + 8.0588251E-03 + + 8.1724303E-03 + + 8.3079937E-03 + + 8.4749946E-03 + + 8.6811506E-03 + + 8.9456784E-03 + + 9.3049336E-03 + + 9.8025199E-03 + + 1.0529992E-02 + + 1.1498571E-02 + + 1.2065971E-02 + + 1.2168395E-02 + + 1.2053690E-02 + + 1.1870414E-02 + + 1.1678759E-02 + + 1.1516371E-02 + + 1.1377145E-02 + + 1.1262809E-02 + + 1.1166687E-02 + + 1.1090107E-02 + + 1.1022668E-02 + + 1.0968772E-02 + + 1.0931381E-02 + + 1.0898236E-02 + + 1.0872094E-02 + + 1.0866295E-02 + + + 5.0690953E-03 + + 8.8284325E-03 + + 9.0078067E-03 + + 8.3473577E-03 + + 8.6118779E-03 + + 8.5008333E-03 + + 9.0278160E-03 + + 9.0320024E-03 + + 9.3778370E-03 + + 9.6052477E-03 + + 9.9703821E-03 + + 1.0342612E-02 + + 1.0646441E-02 + + 1.1197549E-02 + + 1.1382812E-02 + + 1.2469275E-02 + + 1.3368771E-02 + + 1.7162734E-02 + + 2.0335842E-02 + + 2.4108518E-02 + + 2.7585384E-02 + + 3.1409361E-02 + + 3.5211839E-02 + + 3.9132244E-02 + + 4.2882641E-02 + + 4.7206070E-02 + + 5.1012876E-02 + + 5.6053305E-02 + + 5.9624825E-02 + + 6.4222850E-02 + + 7.1113785E-02 + + 7.1863425E-02 + + + + 5.0668773E-03 + + 8.8623444E-03 + + 8.9736897E-03 + + 8.4193826E-03 + + 8.6200366E-03 + + 8.5331711E-03 + + 9.0253536E-03 + + 9.0024868E-03 + + 9.3587966E-03 + + 9.6337679E-03 + + 9.9001048E-03 + + 1.0351369E-02 + + 1.0700823E-02 + + 1.1172796E-02 + + 1.1445656E-02 + + 1.2427412E-02 + + 1.3375674E-02 + + 1.7104580E-02 + + 2.0306601E-02 + + 2.4056263E-02 + + 2.7577305E-02 + + 3.1469932E-02 + + 3.5286392E-02 + + 3.9182103E-02 + + 4.2943152E-02 + + 4.7360483E-02 + + 5.1005109E-02 + + 5.6171187E-02 + + 5.9667108E-02 + + 6.4232789E-02 + + 7.1121280E-02 + + 7.1846306E-02 + + + + 5.0585819E-03 + + 8.8480548E-03 + + 9.0578095E-03 + + 8.4267843E-03 + + 8.6269032E-03 + + 8.5421136E-03 + + 9.0526837E-03 + + 9.0736449E-03 + + 9.4245294E-03 + + 9.6888060E-03 + + 9.9567766E-03 + + 1.0375670E-02 + + 1.0725481E-02 + + 1.1243110E-02 + + 1.1484936E-02 + + 1.2521826E-02 + + 1.3438046E-02 + + 1.7151864E-02 + + 2.0343472E-02 + + 2.4110251E-02 + + 2.7659343E-02 + + 3.1511614E-02 + + 3.5309076E-02 + + 3.9196826E-02 + + 4.3043312E-02 + + 4.7345488E-02 + + 5.1124137E-02 + + 5.6080519E-02 + + 5.9764341E-02 + + 6.4292466E-02 + + 7.1165161E-02 + + 7.1900319E-02 + + + + 5.0739533E-03 + + 8.8878014E-03 + + 9.0739746E-03 + + 8.4571184E-03 + + 8.6763187E-03 + + 8.5845734E-03 + + 9.0893274E-03 + + 9.1072493E-03 + + 9.4607350E-03 + + 9.7370233E-03 + + 1.0006337E-02 + + 1.0437546E-02 + + 1.0767301E-02 + + 1.1309766E-02 + + 1.1552543E-02 + + 1.2572863E-02 + + 1.3499221E-02 + + 1.7217227E-02 + + 2.0383163E-02 + + 2.4178222E-02 + + 2.7731888E-02 + + 3.1561770E-02 + + 3.5431417E-02 + + 3.9298803E-02 + + 4.3075219E-02 + + 4.7440921E-02 + + 5.1196928E-02 + + 5.6281715E-02 + + 5.9863517E-02 + + 6.4363763E-02 + + 7.1290039E-02 + + 7.1984722E-02 + + + + 5.0933569E-03 + + 8.9571748E-03 + + 9.1350789E-03 + + 8.5026806E-03 + + 8.7154122E-03 + + 8.6182850E-03 + + 9.1387403E-03 + + 9.1503576E-03 + + 9.5054271E-03 + + 9.8046510E-03 + + 1.0063015E-02 + + 1.0512898E-02 + + 1.0850976E-02 + + 1.1369711E-02 + + 1.1602210E-02 + + 1.2644534E-02 + + 1.3573331E-02 + + 1.7276147E-02 + + 2.0485160E-02 + + 2.4267827E-02 + + 2.7795345E-02 + + 3.1650606E-02 + + 3.5516413E-02 + + 3.9384282E-02 + + 4.3193261E-02 + + 4.7565933E-02 + + 5.1283045E-02 + + 5.6364736E-02 + + 5.9999740E-02 + + 6.4499325E-02 + + 7.1460960E-02 + + 7.2121578E-02 + + + + 5.1073627E-03 + + 9.0205393E-03 + + 9.1796662E-03 + + 8.5645656E-03 + + 8.7990379E-03 + + 8.7021912E-03 + + 9.2162069E-03 + + 9.2138958E-03 + + 9.5751521E-03 + + 9.8799162E-03 + + 1.0149817E-02 + + 1.0595940E-02 + + 1.0925157E-02 + + 1.1451227E-02 + + 1.1697295E-02 + + 1.2747125E-02 + + 1.3679064E-02 + + 1.7388258E-02 + + 2.0589616E-02 + + 2.4369432E-02 + + 2.7920510E-02 + + 3.1792267E-02 + + 3.5621878E-02 + + 3.9491661E-02 + + 4.3278532E-02 + + 4.7679951E-02 + + 5.1436615E-02 + + 5.6547886E-02 + + 6.0145268E-02 + + 6.4662138E-02 + + 7.1681806E-02 + + 7.2326892E-02 + + + + 5.1442091E-03 + + 9.0852521E-03 + + 9.2735609E-03 + + 8.6388628E-03 + + 8.8708740E-03 + + 8.7690933E-03 + + 9.2934119E-03 + + 9.3186161E-03 + + 9.6592707E-03 + + 9.9678700E-03 + + 1.0236163E-02 + + 1.0694734E-02 + + 1.1025890E-02 + + 1.1566030E-02 + + 1.1820104E-02 + + 1.2881706E-02 + + 1.3817409E-02 + + 1.7525018E-02 + + 2.0707299E-02 + + 2.4504049E-02 + + 2.8056398E-02 + + 3.1942086E-02 + + 3.5781215E-02 + + 3.9676732E-02 + + 4.3508487E-02 + + 4.7899374E-02 + + 5.1653601E-02 + + 5.6724194E-02 + + 6.0363176E-02 + + 6.4884496E-02 + + 7.1995314E-02 + + 7.2586420E-02 + + + + 5.1859947E-03 + + 9.1884111E-03 + + 9.3553722E-03 + + 8.7326674E-03 + + 8.9615831E-03 + + 8.8682756E-03 + + 9.3981872E-03 + + 9.4022342E-03 + + 9.7833217E-03 + + 1.0082626E-02 + + 1.0346345E-02 + + 1.0823172E-02 + + 1.1169852E-02 + + 1.1713674E-02 + + 1.1957780E-02 + + 1.3030310E-02 + + 1.3974055E-02 + + 1.7679518E-02 + + 2.0873339E-02 + + 2.4674002E-02 + + 2.8233633E-02 + + 3.2098518E-02 + + 3.5967409E-02 + + 3.9901149E-02 + + 4.3708564E-02 + + 4.8163155E-02 + + 5.1864987E-02 + + 5.6965609E-02 + + 6.0598955E-02 + + 6.5237827E-02 + + 7.2317026E-02 + + 7.2846315E-02 + + + + 5.2179276E-03 + + 9.2840460E-03 + + 9.4689692E-03 + + 8.8426310E-03 + + 9.0784020E-03 + + 8.9710561E-03 + + 9.5058449E-03 + + 9.5242525E-03 + + 9.8985438E-03 + + 1.0230104E-02 + + 1.0489612E-02 + + 1.0966586E-02 + + 1.1313882E-02 + + 1.1867051E-02 + + 1.2127596E-02 + + 1.3217267E-02 + + 1.4158489E-02 + + 1.7874095E-02 + + 2.1071639E-02 + + 2.4904630E-02 + + 2.8444961E-02 + + 3.2350782E-02 + + 3.6218293E-02 + + 4.0127228E-02 + + 4.3958446E-02 + + 4.8412743E-02 + + 5.2176893E-02 + + 5.7339635E-02 + + 6.0969984E-02 + + 6.5571180E-02 + + 7.2752295E-02 + + 7.3254466E-02 + + + + 5.2716442E-03 + + 9.4281164E-03 + + 9.6132026E-03 + + 8.9742401E-03 + + 9.2100433E-03 + + 9.1094424E-03 + + 9.6671272E-03 + + 9.6893875E-03 + + 1.0054424E-02 + + 1.0384782E-02 + + 1.0663088E-02 + + 1.1145331E-02 + + 1.1502660E-02 + + 1.2069220E-02 + + 1.2330654E-02 + + 1.3451168E-02 + + 1.4376732E-02 + + 1.8119744E-02 + + 2.1312268E-02 + + 2.5156150E-02 + + 2.8702855E-02 + + 3.2612605E-02 + + 3.6519082E-02 + + 4.0492357E-02 + + 4.4282144E-02 + + 4.8807320E-02 + + 5.2599863E-02 + + 5.7759050E-02 + + 6.1395630E-02 + + 6.6046712E-02 + + 7.3333461E-02 + + 7.3753560E-02 + + + + 5.3238344E-03 + + 9.5970913E-03 + + 9.7854600E-03 + + 9.1224140E-03 + + 9.3984166E-03 + + 9.2843910E-03 + + 9.8479041E-03 + + 9.8775712E-03 + + 1.0248815E-02 + + 1.0588076E-02 + + 1.0866467E-02 + + 1.1377201E-02 + + 1.1745016E-02 + + 1.2324752E-02 + + 1.2591933E-02 + + 1.3738942E-02 + + 1.4661945E-02 + + 1.8420789E-02 + + 2.1616210E-02 + + 2.5483933E-02 + + 2.9053296E-02 + + 3.3018657E-02 + + 3.6902567E-02 + + 4.0918920E-02 + + 4.4768920E-02 + + 4.9324206E-02 + + 5.3104469E-02 + + 5.8346792E-02 + + 6.2007342E-02 + + 6.6700912E-02 + + 7.4111114E-02 + + 7.4471661E-02 + + + + 5.4122500E-03 + + 9.8114809E-03 + + 9.9988824E-03 + + 9.3373137E-03 + + 9.6193550E-03 + + 9.5022652E-03 + + 1.0091629E-02 + + 1.0102292E-02 + + 1.0507181E-02 + + 1.0845994E-02 + + 1.1145961E-02 + + 1.1663724E-02 + + 1.2054675E-02 + + 1.2641320E-02 + + 1.2925378E-02 + + 1.4109631E-02 + + 1.5019788E-02 + + 1.8801255E-02 + + 2.2007215E-02 + + 2.5928762E-02 + + 2.9530128E-02 + + 3.3525210E-02 + + 3.7488914E-02 + + 4.1518826E-02 + + 4.5409731E-02 + + 5.0007891E-02 + + 5.3821041E-02 + + 5.9155539E-02 + + 6.2863258E-02 + + 6.7589912E-02 + + 7.5149452E-02 + + 7.5483624E-02 + + + + 5.5291381E-03 + + 1.0106920E-02 + + 1.0289680E-02 + + 9.6380580E-03 + + 9.9265277E-03 + + 9.8058620E-03 + + 1.0411771E-02 + + 1.0436031E-02 + + 1.0855919E-02 + + 1.1210324E-02 + + 1.1523264E-02 + + 1.2064653E-02 + + 1.2477020E-02 + + 1.3073068E-02 + + 1.3372106E-02 + + 1.4596687E-02 + + 1.5522669E-02 + + 1.9346144E-02 + + 2.2590235E-02 + + 2.6577078E-02 + + 3.0198519E-02 + + 3.4263702E-02 + + 3.8312940E-02 + + 4.2417033E-02 + + 4.6331184E-02 + + 5.1039786E-02 + + 5.4923952E-02 + + 6.0373272E-02 + + 6.4126997E-02 + + 6.8933518E-02 + + 7.6721947E-02 + + 7.6881324E-02 + + + + 5.7051926E-03 + + 1.0534340E-02 + + 1.0734999E-02 + + 1.0047973E-02 + + 1.0355258E-02 + + 1.0218464E-02 + + 1.0877782E-02 + + 1.0922582E-02 + + 1.1349348E-02 + + 1.1717445E-02 + + 1.2048634E-02 + + 1.2622834E-02 + + 1.3044209E-02 + + 1.3697572E-02 + + 1.4007429E-02 + + 1.5297796E-02 + + 1.6229092E-02 + + 2.0130646E-02 + + 2.3419720E-02 + + 2.7507372E-02 + + 3.1241243E-02 + + 3.5411821E-02 + + 3.9541855E-02 + + 4.3748213E-02 + + 4.7789294E-02 + + 5.2605069E-02 + + 5.6580575E-02 + + 6.2218120E-02 + + 6.6002923E-02 + + 7.0996802E-02 + + 7.9059610E-02 + + 7.9125302E-02 + + + + 5.9798621E-03 + + 1.1178770E-02 + + 1.1398960E-02 + + 1.0686315E-02 + + 1.1015007E-02 + + 1.0888426E-02 + + 1.1578312E-02 + + 1.1599595E-02 + + 1.2096215E-02 + + 1.2485774E-02 + + 1.2847301E-02 + + 1.3454293E-02 + + 1.3910042E-02 + + 1.4624946E-02 + + 1.4951480E-02 + + 1.6345303E-02 + + 1.7294576E-02 + + 2.1305917E-02 + + 2.4724135E-02 + + 2.8975117E-02 + + 3.2851405E-02 + + 3.7179235E-02 + + 4.1473071E-02 + + 4.5870569E-02 + + 5.0061541E-02 + + 5.5118747E-02 + + 5.9217709E-02 + + 6.5121185E-02 + + 6.9056004E-02 + + 7.4268036E-02 + + 8.2796332E-02 + + 8.2707329E-02 + + + + 6.3814382E-03 + + 1.2092503E-02 + + 1.2307256E-02 + + 1.1538828E-02 + + 1.1908080E-02 + + 1.1757836E-02 + + 1.2534374E-02 + + 1.2563508E-02 + + 1.3099926E-02 + + 1.3526120E-02 + + 1.3927022E-02 + + 1.4604411E-02 + + 1.5096848E-02 + + 1.5885767E-02 + + 1.6230507E-02 + + 1.7756050E-02 + + 1.8747181E-02 + + 2.2956423E-02 + + 2.6549953E-02 + + 3.1007445E-02 + + 3.5079178E-02 + + 3.9663485E-02 + + 4.4205438E-02 + + 4.8827182E-02 + + 5.3252335E-02 + + 5.8585422E-02 + + 6.2916830E-02 + + 6.9202743E-02 + + 7.3345048E-02 + + 7.8865458E-02 + + 8.8060504E-02 + + 8.7720181E-02 + + + + 6.5814203E-03 + + 1.2589556E-02 + + 1.2831098E-02 + + 1.2021990E-02 + + 1.2420962E-02 + + 1.2274328E-02 + + 1.3072229E-02 + + 1.3125790E-02 + + 1.3684984E-02 + + 1.4120320E-02 + + 1.4541810E-02 + + 1.5241834E-02 + + 1.5792664E-02 + + 1.6581300E-02 + + 1.6973815E-02 + + 1.8580511E-02 + + 1.9572617E-02 + + 2.3865583E-02 + + 2.7520381E-02 + + 3.2101383E-02 + + 3.6273771E-02 + + 4.0991031E-02 + + 4.5628107E-02 + + 5.0375712E-02 + + 5.4927552E-02 + + 6.0463390E-02 + + 6.4846891E-02 + + 7.1361573E-02 + + 7.5574981E-02 + + 8.1252683E-02 + + 9.0772914E-02 + + 9.0305344E-02 + + + + 6.5954047E-03 + + 1.2649872E-02 + + 1.2894758E-02 + + 1.2088299E-02 + + 1.2500706E-02 + + 1.2323868E-02 + + 1.3135140E-02 + + 1.3183877E-02 + + 1.3757540E-02 + + 1.4215358E-02 + + 1.4630076E-02 + + 1.5341576E-02 + + 1.5875377E-02 + + 1.6697400E-02 + + 1.7075964E-02 + + 1.8685615E-02 + + 1.9688554E-02 + + 2.3959638E-02 + + 2.7582865E-02 + + 3.2154359E-02 + + 3.6319478E-02 + + 4.0991674E-02 + + 4.5627244E-02 + + 5.0390376E-02 + + 5.4901681E-02 + + 6.0435636E-02 + + 6.4805706E-02 + + 7.1338882E-02 + + 7.5494665E-02 + + 8.1186566E-02 + + 9.0719563E-02 + + 9.0193680E-02 + + + + 6.5336047E-03 + + 1.2512090E-02 + + 1.2764479E-02 + + 1.1984145E-02 + + 1.2375802E-02 + + 1.2210337E-02 + + 1.3005945E-02 + + 1.3053548E-02 + + 1.3626485E-02 + + 1.4068961E-02 + + 1.4494598E-02 + + 1.5200428E-02 + + 1.5722617E-02 + + 1.6508783E-02 + + 1.6910525E-02 + + 1.8489314E-02 + + 1.9473998E-02 + + 2.3688731E-02 + + 2.7256893E-02 + + 3.1731269E-02 + + 3.5822276E-02 + + 4.0457390E-02 + + 4.5020879E-02 + + 4.9721896E-02 + + 5.4161674E-02 + + 5.9588663E-02 + + 6.3895979E-02 + + 7.0351683E-02 + + 7.4478980E-02 + + 8.0093110E-02 + + 8.9495166E-02 + + 8.8945256E-02 + + + + 6.4468824E-03 + + 1.2344191E-02 + + 1.2577769E-02 + + 1.1799198E-02 + + 1.2185250E-02 + + 1.2024671E-02 + + 1.2823561E-02 + + 1.2867050E-02 + + 1.3414223E-02 + + 1.3868383E-02 + + 1.4274902E-02 + + 1.4957665E-02 + + 1.5477639E-02 + + 1.6280478E-02 + + 1.6660201E-02 + + 1.8210099E-02 + + 1.9176459E-02 + + 2.3317865E-02 + + 2.6814611E-02 + + 3.1226187E-02 + + 3.5261695E-02 + + 3.9778054E-02 + + 4.4282066E-02 + + 4.8849080E-02 + + 5.3188035E-02 + + 5.8562223E-02 + + 6.2824222E-02 + + 6.9127893E-02 + + 7.3188187E-02 + + 7.8690046E-02 + + 8.7933862E-02 + + 8.7463314E-02 + + + + 6.3504172E-03 + + 1.2150642E-02 + + 1.2387727E-02 + + 1.1620660E-02 + + 1.2007755E-02 + + 1.1841239E-02 + + 1.2616226E-02 + + 1.2659354E-02 + + 1.3210608E-02 + + 1.3647237E-02 + + 1.4056090E-02 + + 1.4738601E-02 + + 1.5248667E-02 + + 1.6022604E-02 + + 1.6399027E-02 + + 1.7924821E-02 + + 1.8865800E-02 + + 2.2962104E-02 + + 2.6396869E-02 + + 3.0722714E-02 + + 3.4680261E-02 + + 3.9148700E-02 + + 4.3549586E-02 + + 4.8057389E-02 + + 5.2369847E-02 + + 5.7634643E-02 + + 6.1797568E-02 + + 6.8018235E-02 + + 7.1991375E-02 + + 7.7432633E-02 + + 8.6562066E-02 + + 8.6040544E-02 + + + + 6.2807225E-03 + + 1.2005102E-02 + + 1.2236833E-02 + + 1.1484849E-02 + + 1.1844265E-02 + + 1.1694745E-02 + + 1.2469442E-02 + + 1.2503258E-02 + + 1.3035750E-02 + + 1.3456731E-02 + + 1.3869786E-02 + + 1.4538788E-02 + + 1.5043345E-02 + + 1.5804904E-02 + + 1.6173155E-02 + + 1.7678967E-02 + + 1.8617817E-02 + + 2.2640680E-02 + + 2.6043512E-02 + + 3.0350793E-02 + + 3.4235767E-02 + + 3.8635112E-02 + + 4.3006209E-02 + + 4.7438737E-02 + + 5.1680206E-02 + + 5.6869882E-02 + + 6.0948428E-02 + + 6.7112720E-02 + + 7.1046470E-02 + + 7.6389984E-02 + + 8.5416908E-02 + + 8.4912400E-02 + + + + 6.2384011E-03 + + 1.1883626E-02 + + 1.2102819E-02 + + 1.1362792E-02 + + 1.1727085E-02 + + 1.1577991E-02 + + 1.2321572E-02 + + 1.2368887E-02 + + 1.2886627E-02 + + 1.3323476E-02 + + 1.3712662E-02 + + 1.4368905E-02 + + 1.4867001E-02 + + 1.5621404E-02 + + 1.6001770E-02 + + 1.7495457E-02 + + 1.8410484E-02 + + 2.2403739E-02 + + 2.5792442E-02 + + 3.0003874E-02 + + 3.3860219E-02 + + 3.8194472E-02 + + 4.2513447E-02 + + 4.6944801E-02 + + 5.1102508E-02 + + 5.6230364E-02 + + 6.0282905E-02 + + 6.6396185E-02 + + 7.0267237E-02 + + 7.5567209E-02 + + 8.4430462E-02 + + 8.3984117E-02 + + + + 6.1845926E-03 + + 1.1774745E-02 + + 1.2008907E-02 + + 1.1282463E-02 + + 1.1630642E-02 + + 1.1486008E-02 + + 1.2212483E-02 + + 1.2255192E-02 + + 1.2777462E-02 + + 1.3204562E-02 + + 1.3600398E-02 + + 1.4255316E-02 + + 1.4736561E-02 + + 1.5470029E-02 + + 1.5845176E-02 + + 1.7313807E-02 + + 1.8247178E-02 + + 2.2230316E-02 + + 2.5531152E-02 + + 2.9731972E-02 + + 3.3558284E-02 + + 3.7872884E-02 + + 4.2109048E-02 + + 4.6517240E-02 + + 5.0645413E-02 + + 5.5683251E-02 + + 5.9750465E-02 + + 6.5766931E-02 + + 6.9579667E-02 + + 7.4872290E-02 + + 8.3643239E-02 + + 8.3206968E-02 + + + + 6.1719734E-03 + + 1.1719545E-02 + + 1.1917909E-02 + + 1.1189341E-02 + + 1.1548606E-02 + + 1.1416064E-02 + + 1.2129643E-02 + + 1.2168083E-02 + + 1.2694983E-02 + + 1.3100793E-02 + + 1.3481593E-02 + + 1.4146417E-02 + + 1.4630389E-02 + + 1.5367839E-02 + + 1.5730917E-02 + + 1.7184516E-02 + + 1.8089440E-02 + + 2.2023196E-02 + + 2.5336832E-02 + + 2.9501303E-02 + + 3.3286048E-02 + + 3.7579302E-02 + + 4.1818920E-02 + + 4.6160226E-02 + + 5.0276169E-02 + + 5.5322377E-02 + + 5.9292479E-02 + + 6.5292838E-02 + + 6.9134443E-02 + + 7.4296625E-02 + + 8.3006295E-02 + + 8.2573545E-02 + + + + 6.1382782E-03 + + 1.1652027E-02 + + 1.1858603E-02 + + 1.1149474E-02 + + 1.1500153E-02 + + 1.1352538E-02 + + 1.2052433E-02 + + 1.2104328E-02 + + 1.2615826E-02 + + 1.3028027E-02 + + 1.3393814E-02 + + 1.4056119E-02 + + 1.4520800E-02 + + 1.5244525E-02 + + 1.5619872E-02 + + 1.7065448E-02 + + 1.7976677E-02 + + 2.1928655E-02 + + 2.5188600E-02 + + 2.9345474E-02 + + 3.3098490E-02 + + 3.7352890E-02 + + 4.1577882E-02 + + 4.5851588E-02 + + 4.9907550E-02 + + 5.5007580E-02 + + 5.8924848E-02 + + 6.4866195E-02 + + 6.8653679E-02 + + 7.3799695E-02 + + 8.2491620E-02 + + 8.2047228E-02 + + + + 6.1241006E-03 + + 1.1590726E-02 + + 1.1801215E-02 + + 1.1080585E-02 + + 1.1434054E-02 + + 1.1286311E-02 + + 1.2000496E-02 + + 1.2020032E-02 + + 1.2555074E-02 + + 1.2968561E-02 + + 1.3345040E-02 + + 1.3984260E-02 + + 1.4471501E-02 + + 1.5187071E-02 + + 1.5527587E-02 + + 1.6969733E-02 + + 1.7880430E-02 + + 2.1827072E-02 + + 2.5070882E-02 + + 2.9204178E-02 + + 3.2920367E-02 + + 3.7138445E-02 + + 4.1355200E-02 + + 4.5651496E-02 + + 4.9686415E-02 + + 5.4664866E-02 + + 5.8632525E-02 + + 6.4518086E-02 + + 6.8341097E-02 + + 7.3449748E-02 + + 8.2031901E-02 + + 8.1619798E-02 + + + + 6.1062727E-03 + + 1.1540200E-02 + + 1.1761046E-02 + + 1.1040109E-02 + + 1.1412932E-02 + + 1.1240736E-02 + + 1.1950046E-02 + + 1.1997678E-02 + + 1.2505989E-02 + + 1.2930265E-02 + + 1.3303213E-02 + + 1.3935054E-02 + + 1.4397122E-02 + + 1.5128867E-02 + + 1.5487202E-02 + + 1.6938379E-02 + + 1.7810772E-02 + + 2.1723430E-02 + + 2.4973244E-02 + + 2.9068452E-02 + + 3.2834028E-02 + + 3.7010997E-02 + + 4.1148015E-02 + + 4.5454526E-02 + + 4.9470264E-02 + + 5.4447102E-02 + + 5.8392796E-02 + + 6.4249338E-02 + + 6.8034422E-02 + + 7.3189468E-02 + + 8.1672467E-02 + + 8.1260364E-02 + + + + 6.0833777E-03 + + 1.1517436E-02 + + 1.1712978E-02 + + 1.1032819E-02 + + 1.1358893E-02 + + 1.1208870E-02 + + 1.1912352E-02 + + 1.1958737E-02 + + 1.2469851E-02 + + 1.2881147E-02 + + 1.3237414E-02 + + 1.3873203E-02 + + 1.4346868E-02 + + 1.5065060E-02 + + 1.5417558E-02 + + 1.6865782E-02 + + 1.7748238E-02 + + 2.1647065E-02 + + 2.4885779E-02 + + 2.8999390E-02 + + 3.2709869E-02 + + 3.6878634E-02 + + 4.1028900E-02 + + 4.5288735E-02 + + 4.9351482E-02 + + 5.4263443E-02 + + 5.8208019E-02 + + 6.4026596E-02 + + 6.7817431E-02 + + 7.2944166E-02 + + 8.1408951E-02 + + 8.0980011E-02 + + + + 6.0960595E-03 + + 1.1509277E-02 + + 1.1717750E-02 + + 1.1016084E-02 + + 1.1324287E-02 + + 1.1181299E-02 + + 1.1926512E-02 + + 1.1924795E-02 + + 1.2430825E-02 + + 1.2836520E-02 + + 1.3191644E-02 + + 1.3847845E-02 + + 1.4306693E-02 + + 1.5047376E-02 + + 1.5361189E-02 + + 1.6797970E-02 + + 1.7681035E-02 + + 2.1572902E-02 + + 2.4843981E-02 + + 2.8950004E-02 + + 3.2646669E-02 + + 3.6798605E-02 + + 4.0927881E-02 + + 4.5165770E-02 + + 4.9225435E-02 + + 5.4165928E-02 + + 5.8066998E-02 + + 6.3897046E-02 + + 6.7667188E-02 + + 7.2785603E-02 + + 8.1253392E-02 + + 8.0864443E-02 + + + + 6.0706294E-03 + + 1.1507691E-02 + + 1.1695334E-02 + + 1.0977998E-02 + + 1.1320263E-02 + + 1.1167309E-02 + + 1.1887145E-02 + + 1.1908635E-02 + + 1.2405259E-02 + + 1.2838152E-02 + + 1.3210507E-02 + + 1.3849960E-02 + + 1.4283591E-02 + + 1.5028182E-02 + + 1.5329706E-02 + + 1.6759635E-02 + + 1.7685388E-02 + + 2.1572849E-02 + + 2.4772494E-02 + + 2.8864133E-02 + + 3.2582677E-02 + + 3.6784719E-02 + + 4.0900801E-02 + + 4.5137865E-02 + + 4.9135372E-02 + + 5.4093178E-02 + + 5.8034149E-02 + + 6.3786244E-02 + + 6.7502120E-02 + + 7.2584553E-02 + + 8.1167082E-02 + + 8.0688398E-02 + + + + 6.0461907E-03 + + 1.1481547E-02 + + 1.1737058E-02 + + 1.0999643E-02 + + 1.1361089E-02 + + 1.1125441E-02 + + 1.1866202E-02 + + 1.1842566E-02 + + 1.2424994E-02 + + 1.2799184E-02 + + 1.3219862E-02 + + 1.3773742E-02 + + 1.4257782E-02 + + 1.4972557E-02 + + 1.5426839E-02 + + 1.6740630E-02 + + 1.7654390E-02 + + 2.1573482E-02 + + 2.4801577E-02 + + 2.8800263E-02 + + 3.2583876E-02 + + 3.6801622E-02 + + 4.0806074E-02 + + 4.5107401E-02 + + 4.9075545E-02 + + 5.3960225E-02 + + 5.7982974E-02 + + 6.3859228E-02 + + 6.7502946E-02 + + 7.2470281E-02 + + 8.1149466E-02 + + 8.0629616E-02 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + 1.0000000E+00 + + + + + \ No newline at end of file diff --git a/tests/c5g7_mgxs.xml b/tests/c5g7_mgxs.xml deleted file mode 100644 index ec85d4b593..0000000000 --- a/tests/c5g7_mgxs.xml +++ /dev/null @@ -1,383 +0,0 @@ - - - - 7 - - 1E-11 0.0635E-6 10.0E-6 1.0E-4 1.0E-3 0.5 1.0 20.0 - - - - - - UO2.71c - UO2.71c - 2.53E-8 - 0 - true - - isotropic - - - - 8.0248E-03 3.7174E-03 2.6769E-02 9.6236E-02 3.0020E-02 1.1126E-01 2.8278E-01 - - - - 2.005998E-02 2.027303E-03 1.570599E-02 4.518301E-02 4.334208E-02 2.020901E-01 5.257105E-01 - - - - 5.8791E-01 4.1176E-01 3.3906E-04 1.1761E-07 0.0000E+00 0.0000E+00 0.0000E+00 - - - 7.21206E-03 8.19301E-04 6.45320E-03 1.85648E-02 1.78084E-02 8.30348E-02 2.16004E-01 - - - - - - 1.0 1.0 1.0 1.0 1.0 1.0 1.0 - - - - - - 0.1275370 0.0423780 0.0000094 0.0000000 0.0000000 0.0000000 0.0000000 - 0.0000000 0.3244560 0.0016314 0.0000000 0.0000000 0.0000000 0.0000000 - 0.0000000 0.0000000 0.4509400 0.0026792 0.0000000 0.0000000 0.0000000 - 0.0000000 0.0000000 0.0000000 0.4525650 0.0055664 0.0000000 0.0000000 - 0.0000000 0.0000000 0.0000000 0.0001253 0.2714010 0.0102550 0.0000000 - 0.0000000 0.0000000 0.0000000 0.0000000 0.0012968 0.2658020 0.0168090 - 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0085458 0.2730800 - - - - - 0.1779492 0.3298048 0.4803882 0.5543674000000001 0.3118013 0.39516779999999996 0.5644058 - - - - - - - MOX1.71c - MOX1.71c - 2.53E-8 - 0 - true - - - - 8.4339E-03 3.7577E-03 2.7970E-02 1.0421E-01 1.3994E-01 4.0918E-01 4.0935E-01 - - - - 1.27888062E-02 8.95701528E-03 7.37557218E-06 2.55837033E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 1.49041240E-03 1.04385401E-03 8.59552023E-07 2.98153464E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 9.56411400E-03 6.69850756E-03 5.51582469E-06 1.91327830E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 3.84928781E-02 2.69596154E-02 2.21996483E-05 7.70040890E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 1.80629998E-02 1.26509513E-02 1.04173100E-05 3.61346022E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 3.91930789E-01 2.74500216E-01 2.26034688E-04 7.84048241E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 4.19762096E-01 2.93992687E-01 2.42085585E-04 8.39724109E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00 - - - - 7.62704E-03 8.76898E-04 5.69835E-03 2.28872E-02 1.07635E-02 2.32757E-01 2.48968E-01 - - - - - 1.0 1.0 1.0 1.0 1.0 1.0 1.0 - - - - - - 1.27537000E-01 4.23780000E-02 9.43740000E-06 5.51630000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 3.24456000E-01 1.63140000E-03 3.14270000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 4.50940000E-01 2.67920000E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.52565000E-01 5.56640000E-03 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.25250000E-04 2.71401000E-01 1.02550000E-02 1.00210000E-08 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.29680000E-03 2.65802000E-01 1.68090000E-02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.54580000E-03 2.73080000E-01 - - - - 0.1783583429163 0.3298451031427 0.4815892 0.5623414 0.421721260021 0.6930878 0.6909757999999999 - - - - - - - MOX2.71c - MOX2.71c - 2.53E-8 - 0 - true - - - - 0.0090657 0.0042967 0.032881 0.12203 0.18298 0.56846 0.58521 - - - - 1.40004593E-02 9.80563205E-03 8.07435789E-06 2.80075866E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 2.26856185E-03 1.58885378E-03 1.30832709E-06 4.53820413E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 1.41886199E-02 9.93741584E-03 8.18287404E-06 2.83839974E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 5.54788444E-02 3.88562347E-02 3.19958106E-05 1.10984111E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 2.69085702E-02 1.88462058E-02 1.55187355E-05 5.38299559E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 5.45687127E-01 3.82187973E-01 3.14709185E-04 1.09163414E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 6.13307712E-01 4.29548032E-01 3.53707392E-04 1.22690752E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00 - - - - 0.00825446 0.00132565 0.00842156 0.032873 0.0159636 0.323794 0.362803 - - - - - 1.0 1.0 1.0 1.0 1.0 1.0 1.0 - - - - - - 1.30457000E-01 4.17920000E-02 8.51050000E-06 5.13290000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 3.28428000E-01 1.64360000E-03 2.20170000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 4.58371000E-01 2.53310000E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.63709000E-01 5.47660000E-03 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.76190000E-04 2.82313000E-01 8.72890000E-03 9.00160000E-09 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.27600000E-03 2.49751000E-01 1.31140000E-02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.86450000E-03 2.59529000E-01 - - - - 0.1813232156329 0.3343683022017 0.4937851 0.5912156 0.47419809900160004 0.833601 0.8536035 - - - - - - - MOX3.71c - MOX3.71c - 2.53E-8 - 0 - true - - - - 9.48620000E-03 4.65560000E-03 3.62400000E-02 1.32720000E-01 2.08400000E-01 6.58700000E-01 6.90170000E-01 - - - - 1.48071013E-02 1.03705874E-02 8.53956516E-06 2.96212546E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 2.78640474E-03 1.95154023E-03 1.60697792E-06 5.57413653E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 1.73304404E-02 1.21378819E-02 9.99482763E-06 3.46691346E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 6.59928975E-02 4.62200600E-02 3.80594850E-05 1.32017225E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 3.25131926E-02 2.27715674E-02 1.87510386E-05 6.50418701E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 6.32002662E-01 4.42641588E-01 3.64489161E-04 1.26430632E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 7.28595687E-01 5.10293344E-01 4.20196380E-04 1.45753838E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00 - - - - 8.67209000E-03 1.62426000E-03 1.02716000E-02 3.90447000E-02 1.92576000E-02 3.74888000E-01 4.30599000E-01 - - - - - 1.0 1.0 1.0 1.0 1.0 1.0 1.0 - - - - - - 1.31504000E-01 4.20460000E-02 8.69720000E-06 5.19380000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 3.30403000E-01 1.64630000E-03 2.60060000E-09 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 4.61792000E-01 2.47490000E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.68021000E-01 5.43300000E-03 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.85970000E-04 2.85771000E-01 8.39730000E-03 8.92800000E-09 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.39160000E-03 2.47614000E-01 1.23220000E-02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.96810000E-03 2.56093000E-01 - - - - 1.83044902E-01 3.36704903E-01 5.00506900E-01 6.06174000E-01 5.02754279E-01 9.21027600E-01 9.55231100E-01 - - - - - - - FC.71c - FC.71c - 2.53E-8 - 0 - true - - - - 5.1132E-04 7.5813E-05 3.1643E-04 1.1675E-03 3.3977E-03 9.1886E-03 2.3244E-02 - - - - 1.323401E-08 1.434500E-08 1.128599E-06 1.276299E-05 3.538502E-07 1.740099E-06 5.063302E-06 - - - - 5.8791E-01 4.1176E-01 3.3906E-04 1.1761E-07 0.0000E+00 0.0000E+00 0.0000E+00 - - - - 4.79002E-09 5.82564E-09 4.63719E-07 5.24406E-06 1.45390E-07 7.14972E-07 2.08041E-06 - - - - - 1.0 1.0 1.0 1.0 1.0 1.0 1.0 - - - - - - 6.61659000E-02 5.90700000E-02 2.83340000E-04 1.46220000E-06 2.06420000E-08 0.00000000E00 0.00000000E00 - 0.00000000E00 2.40377000E-01 5.24350000E-02 2.49900000E-04 1.92390000E-05 2.98750000E-06 4.21400000E-07 - 0.00000000E00 0.00000000E00 1.83425000E-01 9.22880000E-02 6.93650000E-03 1.07900000E-03 2.05430000E-04 - 0.00000000E00 0.00000000E00 0.00000000E00 7.90769000E-02 1.69990000E-01 2.58600000E-02 4.92560000E-03 - 0.00000000E00 0.00000000E00 0.00000000E00 3.73400000E-05 9.97570000E-02 2.06790000E-01 2.44780000E-02 - 0.00000000E00 0.00000000E00 0.00000000E00 0.00000000E00 9.17420000E-04 3.16774000E-01 2.38760000E-01 - 0.00000000E00 0.00000000E00 0.00000000E00 0.00000000E00 0.00000000E00 4.97930000E-02 1.09910000E00 - - - - 1.26032048E-01 2.93160367E-01 2.84250824E-01 2.81025244E-01 3.34460185E-01 5.65640735E-01 1.17213908E00 - - - - - - - GT.71c - GT.71c - 2.53E-8 - 0 - false - - - - 5.11320000E-04 7.58010000E-05 3.15720000E-04 1.15820000E-03 3.39750000E-03 9.18780000E-03 2.32420000E-02 - - - - - - 6.61659000E-02 5.90700000E-02 2.83340000E-04 1.46220000E-06 2.06420000E-08 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 2.40377000E-01 5.24350000E-02 2.49900000E-04 1.92390000E-05 2.98750000E-06 4.21400000E-07 - 0.00000000E+00 0.00000000E+00 1.83297000E-01 9.23970000E-02 6.94460000E-03 1.08030000E-03 2.05670000E-04 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.88511000E-02 1.70140000E-01 2.58810000E-02 4.92970000E-03 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.73330000E-05 9.97372000E-02 2.06790000E-01 2.44780000E-02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.17260000E-04 3.16765000E-01 2.38770000E-01 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.97920000E-02 1.09912000E+00 - - - - 1.26032043E-01 2.93160349E-01 2.84240290E-01 2.80960000E-01 3.34440033E-01 5.65640060E-01 1.17215400E+00 - - - - - - LWTR.71c - LWTR.71c - 2.53E-8 - 0 - false - - - - 6.0105E-04 1.5793E-05 3.3716E-04 1.9406E-03 5.7416E-03 1.5001E-02 3.7239E-02 - - - - - - 0.0444777 0.1134000 0.0007235 0.0000037 0.0000001 0.0000000 0.0000000 - 0.0000000 0.2823340 0.1299400 0.0006234 0.0000480 0.0000074 0.0000010 - 0.0000000 0.0000000 0.3452560 0.2245700 0.0169990 0.0026443 0.0005034 - 0.0000000 0.0000000 0.0000000 0.0910284 0.4155100 0.0637320 0.0121390 - 0.0000000 0.0000000 0.0000000 0.0000714 0.1391380 0.5118200 0.0612290 - 0.0000000 0.0000000 0.0000000 0.0000000 0.0022157 0.6999130 0.5373200 - 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.1324400 2.4807000 - - - - 0.15920605 0.41296959299999997 0.59030986 0.5843499999999999 0.7180000000000001 1.2544497000000001 2.650379 - - - - - - - CR.71c - CR.71c - 2.53E-8 - 0 - false - - - - 1.70490000E-03 8.36224000E-03 8.37901000E-02 3.97797000E-01 6.98763000E-01 9.29508000E-01 1.17836000E+00 - - - - - - 1.70563000E-01 4.44012000E-02 9.83670000E-05 1.27786000E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 4.71050000E-01 6.85480000E-04 3.91395000E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 8.01859000E-01 7.20132000E-04 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.70752000E-01 1.46015000E-03 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.55562000E-05 2.07838000E-01 3.81486000E-03 3.69760000E-09 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.02427000E-03 2.02465000E-01 4.75290000E-03 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.53043000E-03 6.58597000E-01 - - - - 2.16767595E-01 4.80097720E-01 8.86369232E-01 9.70009150E-01 9.10481420E-01 1.13775017E+00 1.84048743E+00 - - - diff --git a/tests/input_set.py b/tests/input_set.py index 4e8974680e..c0bf2b0951 100644 --- a/tests/input_set.py +++ b/tests/input_set.py @@ -572,135 +572,60 @@ class InputSet(object): class MGInputSet(InputSet): def build_default_materials_and_geometry(self): - # Define materials needed for C5G7 2-D UO2 Assembly - uo2_data = openmc.Macroscopic('UO2', '71c') + # Define materials needed for 1D/1G slab problem + uo2_data = openmc.Macroscopic('uo2_iso', '71c') uo2 = openmc.Material(name='UO2', material_id=1) uo2.set_density('macro', 1.0) uo2.add_macroscopic(uo2_data) - fiss_cham_data = openmc.Macroscopic('FC', '71c') - fiss_cham = openmc.Material(name='FC', material_id=2) - fiss_cham.set_density('macro', 1.0) - fiss_cham.add_macroscopic(fiss_cham_data) + clad_data = openmc.Macroscopic('clad_ang_mu', '71c') + clad = openmc.Material(name='Clad', material_id=2) + clad.set_density('macro', 1.0) + clad.add_macroscopic(clad_data) - guide_tube_data = openmc.Macroscopic('GT', '71c') - guide_tube = openmc.Material(name='GT', material_id=3) - guide_tube.set_density('macro', 1.0) - guide_tube.add_macroscopic(guide_tube_data) - - water_data = openmc.Macroscopic('LWTR', '71c') - water = openmc.Material(name='LWTR', material_id=4) + water_data = openmc.Macroscopic('lwtr_iso_mu', '71c') + water = openmc.Material(name='LWTR', material_id=3) water.set_density('macro', 1.0) water.add_macroscopic(water_data) # Define the materials file. self.materials.default_xs = '71c' - self.materials.add_materials((uo2, fiss_cham, guide_tube, water)) + self.materials.add_materials((uo2, clad, water)) # Define surfaces. - # Pin cell - s1 = openmc.ZCylinder(R=0.54, surface_id=1) # Assembly/Problem Boundary - left = openmc.XPlane(x0=0.0, surface_id=20, + left = openmc.XPlane(x0=0.0, surface_id=200, boundary_type='reflective') - right = openmc.XPlane(x0=21.42, surface_id=21, + right = openmc.XPlane(x0=10.0, surface_id=201, boundary_type='reflective') - bottom = openmc.YPlane(y0=0.0, surface_id=22, + bottom = openmc.YPlane(y0=0.0, surface_id=300, boundary_type='reflective') - top = openmc.YPlane(y0=21.42, surface_id=23, - boundary_type='reflective') - down = openmc.ZPlane(z0=0.0, surface_id=24, - boundary_type='reflective') - up = openmc.ZPlane(z0=21.42, surface_id=25, + top = openmc.YPlane(y0=10.0, surface_id=301, boundary_type='reflective') - # Define pin cells - # uo2 pin - c10 = openmc.Cell(cell_id=10) - c10.region = -s1 - c10.fill = uo2 - c11 = openmc.Cell(cell_id=11) - c11.region = +s1 - c11.fill = water - fuel_pin = openmc.Universe(name='Fuel pin', universe_id=1) - fuel_pin.add_cells((c10, c11)) + down = openmc.ZPlane(z0=0.0, surface_id=0, + boundary_type='reflective') + fuel_clad_intfc = openmc.ZPlane(z0=2.0, surface_id=1) + clad_lwtr_intfc = openmc.ZPlane(z0=2.4, surface_id=2) + up = openmc.ZPlane(z0=5.0, surface_id=3, + boundary_type='reflective') - # Fission chamber pin - c20 = openmc.Cell(cell_id=20) - c20.region = -s1 - c20.fill = fiss_cham - c21 = openmc.Cell(cell_id=21) - c21.region = +s1 - c21.fill = water - fiss_chamber_pin = openmc.Universe(name='Fission Chamber', universe_id=2) - fiss_chamber_pin.add_cells((c20, c21)) - - # Guide Tube pin - c30 = openmc.Cell(cell_id=30) - c30.region = -s1 - c30.fill = guide_tube - c31 = openmc.Cell(cell_id=31) - c31.region = +s1 - c31.fill = water - gt_pin = openmc.Universe(name='Guide Tube', universe_id=3) - gt_pin.add_cells((c30, c31)) - - # Define fuel lattice - l100 = openmc.RectLattice(name='UO2 assembly', lattice_id=100) - l100.dimension = (17, 17) - l100.lower_left = (-10.71, -10.71) - l100.pitch = (1.26, 1.26) - l100.universes = [ - [fuel_pin]*17, - [fuel_pin]*17, - [fuel_pin]*5 + [gt_pin] + [fuel_pin]*2 + [gt_pin] - + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*5, - [fuel_pin]*3 + [gt_pin] + [fuel_pin]*9 + [gt_pin] - + [fuel_pin]*3, - [fuel_pin]*17, - [fuel_pin]*2 + [gt_pin] + [fuel_pin]*2 + [gt_pin] - + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*2 + [gt_pin] - + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*2, - [fuel_pin]*17, - [fuel_pin]*17, - [fuel_pin]*2 + [gt_pin] + [fuel_pin]*2 + [gt_pin] - + [fuel_pin]*2 + [fiss_chamber_pin] + [fuel_pin]*2 + [gt_pin] - + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*2, - [fuel_pin]*17, - [fuel_pin]*17, - [fuel_pin]*2 + [gt_pin] + [fuel_pin]*2 + [gt_pin] - + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*2 + [gt_pin] - + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*2, - [fuel_pin]*17, - [fuel_pin]*3 + [gt_pin] + [fuel_pin]*9 + [gt_pin] - + [fuel_pin]*3, - [fuel_pin]*5 + [gt_pin] + [fuel_pin]*2 + [gt_pin] - + [fuel_pin]*2 + [gt_pin] + [fuel_pin]*5, - [fuel_pin]*17, - [fuel_pin]*17 ] - - # Define assemblies. - fa = openmc.Universe(name='Fuel assembly', universe_id=10) - c100 = openmc.Cell(cell_id=110) - c100.region = +down & -up - c100.fill = l100 - fa.add_cells((c100, )) - - # Define core lattices - l200 = openmc.RectLattice(name='Core lattice', lattice_id=200) - l200.dimension = (1, 1) - l200.lower_left = (0.0, 0.0) - l200.pitch = (21.42, 21.42) - l200.universes = [[fa]] + # Define cells + c1 = openmc.Cell(cell_id=1) + c1.region = +left & -right & +bottom & -top & +down & -fuel_clad_intfc + c1.fill = uo2 + c2 = openmc.Cell(cell_id=2) + c2.region = +left & -right & +bottom & -top & +fuel_clad_intfc & -clad_lwtr_intfc + c2.fill = clad + c3 = openmc.Cell(cell_id=3) + c3.region = +left & -right & +bottom & -top & +clad_lwtr_intfc & -up + c3.fill = water # Define root universe. root = openmc.Universe(universe_id=0, name='root universe') - c1 = openmc.Cell(cell_id=1) - c1.region = +left & -right & +bottom & -top & +down & -up - c1.fill = l200 - root.add_cells((c1,)) + root.add_cells((c1,c2,c3)) # Define the geometry file. geometry = openmc.Geometry() @@ -713,15 +638,16 @@ class MGInputSet(InputSet): self.settings.batches = 10 self.settings.inactive = 5 self.settings.particles = 100 - self.settings.set_source_space('box', (0.0, 0.0, 0.0, 21.42, 21.42, 100.0)) + self.settings.set_source_space('box', (0.0, 0.0, 0.0, 10.0, 10.0, 2.0)) self.settings.energy_mode = "multi-group" - self.settings.cross_sections = "../c5g7_mgxs.xml" + self.settings.cross_sections = "../1d_mgxs.xml" def build_defualt_plots(self): plot = openmc.Plot() plot.filename = 'mat' - plot.origin = (10.71, 10.71, 50.0) - plot.width = (21.42, 21.42) + plot.origin = (5.0, 5.0, 2.5) + plot.width = (2.5, 2.5) + plot.basis = 'xz' plot.pixels = (3000, 3000) plot.color = 'mat' diff --git a/tests/test_mg_basic/inputs_true.dat b/tests/test_mg_basic/inputs_true.dat index d576cd402a..549172b1a9 100644 --- a/tests/test_mg_basic/inputs_true.dat +++ b/tests/test_mg_basic/inputs_true.dat @@ -1 +1 @@ -b41c9621e2f068dab8f44b4fbf29aa5f075c04e463543550b7d1324b75b4709db810808e64474d2400c8c36465814bcca095650b0e19d640860dd4a860bb40a3 \ No newline at end of file +be47096ff6382e07c58c67870eb1c77402c961ee8cb9a4671b52627f6432fe282403e70f5825c90764758fcabe5a480653a961e24d7a0349929283848e79667d \ No newline at end of file diff --git a/tests/test_mg_basic/results_true.dat b/tests/test_mg_basic/results_true.dat index 93683d28bb..35e2af7c06 100644 --- a/tests/test_mg_basic/results_true.dat +++ b/tests/test_mg_basic/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.359283E+00 7.465863E-02 +1.035488E+00 4.058903E-02 diff --git a/tests/test_mg_max_order/inputs_true.dat b/tests/test_mg_max_order/inputs_true.dat new file mode 100644 index 0000000000..3529d50921 --- /dev/null +++ b/tests/test_mg_max_order/inputs_true.dat @@ -0,0 +1 @@ +7bd8b00b5aaad3913e0022269cf6ef92dfd0051bd79fb136838ea5a65d322d9711b454e62ef03dcf2b9dd75e31a4febcc633f968d7d07dcb6da2e0d36daf45db \ No newline at end of file diff --git a/tests/test_mg_max_order/results_true.dat b/tests/test_mg_max_order/results_true.dat new file mode 100644 index 0000000000..dfb1c02d79 --- /dev/null +++ b/tests/test_mg_max_order/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +1.106635E+00 4.503267E-02 diff --git a/tests/test_mg_max_order/test_mg_max_order.py b/tests/test_mg_max_order/test_mg_max_order.py new file mode 100644 index 0000000000..423f068f71 --- /dev/null +++ b/tests/test_mg_max_order/test_mg_max_order.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python + +import os +import sys +sys.path.insert(0, os.pardir) +from testing_harness import TestHarness, PyAPITestHarness +from input_set import MGInputSet +import openmc + +class MGNuclideInputSet(MGInputSet): + def build_default_materials_and_geometry(self): + # Define materials needed for 1D/1G slab problem + uo2_data = openmc.Macroscopic('uo2_iso', '71c') + uo2 = openmc.Material(name='UO2', material_id=1) + uo2.set_density('macro', 1.0) + uo2.add_macroscopic(uo2_data) + + clad_data = openmc.Macroscopic('clad_iso', '71c') + clad = openmc.Material(name='Clad', material_id=2) + clad.set_density('macro', 1.0) + clad.add_macroscopic(clad_data) + + water_data = openmc.Macroscopic('lwtr_iso', '71c') + water = openmc.Material(name='LWTR', material_id=3) + water.set_density('macro', 1.0) + water.add_macroscopic(water_data) + + # Define the materials file. + self.materials.default_xs = '71c' + self.materials.add_materials((uo2, clad, water)) + + # Define surfaces. + + # Assembly/Problem Boundary + left = openmc.XPlane(x0=0.0, surface_id=200, + boundary_type='reflective') + right = openmc.XPlane(x0=10.0, surface_id=201, + boundary_type='reflective') + bottom = openmc.YPlane(y0=0.0, surface_id=300, + boundary_type='reflective') + top = openmc.YPlane(y0=10.0, surface_id=301, + boundary_type='reflective') + + down = openmc.ZPlane(z0=0.0, surface_id=0, + boundary_type='reflective') + fuel_clad_intfc = openmc.ZPlane(z0=2.0, surface_id=1) + clad_lwtr_intfc = openmc.ZPlane(z0=2.4, surface_id=2) + up = openmc.ZPlane(z0=5.0, surface_id=3, + boundary_type='reflective') + + # Define cells + c1 = openmc.Cell(cell_id=1) + c1.region = +left & -right & +bottom & -top & +down & -fuel_clad_intfc + c1.fill = uo2 + c2 = openmc.Cell(cell_id=2) + c2.region = +left & -right & +bottom & -top & +fuel_clad_intfc & -clad_lwtr_intfc + c2.fill = clad + c3 = openmc.Cell(cell_id=3) + c3.region = +left & -right & +bottom & -top & +clad_lwtr_intfc & -up + c3.fill = water + + # Define root universe. + root = openmc.Universe(universe_id=0, name='root universe') + + root.add_cells((c1,c2,c3)) + + # Define the geometry file. + geometry = openmc.Geometry() + geometry.root_universe = root + + self.geometry.geometry = geometry + +class MGNuclideTestHarness(PyAPITestHarness): + def __init__(self, statepoint_name, tallies_present, mg=False): + TestHarness.__init__(self, statepoint_name, tallies_present) + self._input_set = MGNuclideInputSet() + + def _build_inputs(self): + super(MGNuclideTestHarness, self)._build_inputs() + # Set P1 scattering + self._input_set.settings.max_order = 1 + +if __name__ == '__main__': + harness = MGNuclideTestHarness('statepoint.10.*', False, mg=True) + harness.main() diff --git a/tests/test_mg_nuclide/inputs_true.dat b/tests/test_mg_nuclide/inputs_true.dat new file mode 100644 index 0000000000..ea61b92221 --- /dev/null +++ b/tests/test_mg_nuclide/inputs_true.dat @@ -0,0 +1 @@ +f3d614294177f34186bf0d439330d144438ac6a2402af9b5433efb7bf6a311043140c487c86f4d3cae9d51742f5042823d224c9da6365da6c8972b44edb7fb71 \ No newline at end of file diff --git a/tests/test_mg_nuclide/results_true.dat b/tests/test_mg_nuclide/results_true.dat new file mode 100644 index 0000000000..26a41ade87 --- /dev/null +++ b/tests/test_mg_nuclide/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +1.271009E-01 6.377851E-03 diff --git a/tests/test_mg_nuclide/test_mg_nuclide.py b/tests/test_mg_nuclide/test_mg_nuclide.py new file mode 100644 index 0000000000..736473bd9f --- /dev/null +++ b/tests/test_mg_nuclide/test_mg_nuclide.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python + +import os +import sys +sys.path.insert(0, os.pardir) +from testing_harness import TestHarness, PyAPITestHarness +from input_set import MGInputSet +import openmc + +class MGNuclideInputSet(MGInputSet): + def build_default_materials_and_geometry(self): + # Define materials needed for 1D/1G slab problem + # This time do using nuclide, not macroscopic + uo2 = openmc.Material(name='UO2', material_id=1) + uo2.set_density('g/cm3', 1.0) + uo2.add_nuclide("uo2_iso", 1.0) + + clad = openmc.Material(name='Clad', material_id=2) + clad.set_density('g/cm3', 1.0) + clad.add_nuclide("clad_ang_mu", 1.0) + + water_data = openmc.Nuclide('lwtr_iso_mu', '71c') + water = openmc.Material(name='LWTR', material_id=3) + water.set_density('g/cm3', 1.0) + water.add_nuclide("lwtr_iso_mu", 1.0) + + # Define the materials file. + self.materials.default_xs = '71c' + self.materials.add_materials((uo2, clad, water)) + + # Define surfaces. + + # Assembly/Problem Boundary + left = openmc.XPlane(x0=0.0, surface_id=200, + boundary_type='reflective') + right = openmc.XPlane(x0=10.0, surface_id=201, + boundary_type='reflective') + bottom = openmc.YPlane(y0=0.0, surface_id=300, + boundary_type='reflective') + top = openmc.YPlane(y0=10.0, surface_id=301, + boundary_type='reflective') + + down = openmc.ZPlane(z0=0.0, surface_id=0, + boundary_type='reflective') + fuel_clad_intfc = openmc.ZPlane(z0=2.0, surface_id=1) + clad_lwtr_intfc = openmc.ZPlane(z0=2.4, surface_id=2) + up = openmc.ZPlane(z0=5.0, surface_id=3, + boundary_type='reflective') + + # Define cells + c1 = openmc.Cell(cell_id=1) + c1.region = +left & -right & +bottom & -top & +down & -fuel_clad_intfc + c1.fill = uo2 + c2 = openmc.Cell(cell_id=2) + c2.region = +left & -right & +bottom & -top & +fuel_clad_intfc & -clad_lwtr_intfc + c2.fill = clad + c3 = openmc.Cell(cell_id=3) + c3.region = +left & -right & +bottom & -top & +clad_lwtr_intfc & -up + c3.fill = water + + # Define root universe. + root = openmc.Universe(universe_id=0, name='root universe') + + root.add_cells((c1,c2,c3)) + + # Define the geometry file. + geometry = openmc.Geometry() + geometry.root_universe = root + + self.geometry.geometry = geometry + +class MGNuclideTestHarness(PyAPITestHarness): + def __init__(self, statepoint_name, tallies_present, mg=False): + TestHarness.__init__(self, statepoint_name, tallies_present) + self._input_set = MGNuclideInputSet() + + def _build_inputs(self): + super(MGNuclideTestHarness, self)._build_inputs() + + + +if __name__ == '__main__': + harness = MGNuclideTestHarness('statepoint.10.*', False, mg=True) + harness.main() diff --git a/tests/test_mg_tallies/inputs_true.dat b/tests/test_mg_tallies/inputs_true.dat index 44099dbd82..063b36923d 100644 --- a/tests/test_mg_tallies/inputs_true.dat +++ b/tests/test_mg_tallies/inputs_true.dat @@ -1 +1 @@ -87d5adff4c8d53f020baa25db59d9ad6eada791ef010577e3586c543a9ee6cee6022d99e7a27911a94560acddba3602570c0748a0b4cba48f630b726221f14dc \ No newline at end of file +dcde495bd5d0ace409154be3529ae91d454e92f7060e38f00bc0880350d53c889b87edcfd481e6c8bcec2450bdf780e6fdc52240978eb1c67a6ef290ad85442d \ No newline at end of file diff --git a/tests/test_mg_tallies/results_true.dat b/tests/test_mg_tallies/results_true.dat index 920f5f3e36..4e27ab66b9 100644 --- a/tests/test_mg_tallies/results_true.dat +++ b/tests/test_mg_tallies/results_true.dat @@ -1,3482 +1,2906 @@ k-combined: -1.359283E+00 7.465863E-02 +1.035488E+00 4.058903E-02 tally 1: -2.847813E-01 -2.025790E-02 -1.172423E-02 -4.616814E-05 -6.871019E-01 -1.096320E-01 -5.348095E-03 -1.062108E-05 -1.340369E-02 -6.465987E-05 -1.682119E-01 -7.397131E-03 -9.038916E-03 -2.581353E-05 -4.138462E-01 -3.732581E-02 -4.267302E-03 -6.286845E-06 -1.058944E-02 -3.804411E-05 -3.633299E-01 -3.976542E-02 -2.487014E-02 -2.126766E-04 -6.982763E-01 -1.317345E-01 -1.257758E-02 -6.051328E-05 -3.075036E-02 -3.600723E-04 -2.492313E-01 -1.682228E-02 -1.380182E-02 -6.570494E-05 -5.765551E-01 -9.181006E-02 -7.743475E-03 -2.727482E-05 -1.902781E-02 -1.627120E-04 -2.191122E-01 -1.298025E-02 -1.148883E-02 -4.334141E-05 -5.203670E-01 -7.022054E-02 -5.000169E-03 -7.803760E-06 -1.236816E-02 -4.736991E-05 -2.269064E-01 -2.056966E-02 -1.410446E-02 -1.199602E-04 -4.515464E-01 -7.417552E-02 -7.887256E-03 -4.708793E-05 -1.932915E-02 -2.805214E-04 -2.364191E-01 -1.654063E-02 -1.415339E-02 -1.415624E-04 -4.940050E-01 -6.265173E-02 -6.299407E-03 -3.280872E-05 -1.540495E-02 -1.953911E-04 -3.192689E-01 -2.306298E-02 -1.230781E-02 -6.401926E-05 -6.470467E-01 -9.154956E-02 -5.234535E-03 -1.578586E-05 -1.286806E-02 -9.375617E-05 -2.540069E-01 -1.409067E-02 -7.206254E-03 -1.691929E-05 -6.264964E-01 -8.583680E-02 -1.958907E-03 -1.137122E-06 -4.944068E-03 -7.184508E-06 -3.299226E-01 -2.361991E-02 -1.153904E-02 -3.398774E-05 -7.350880E-01 -1.172602E-01 -4.976946E-03 -7.515943E-06 -1.226957E-02 -4.522435E-05 -2.734191E-01 -1.823188E-02 -1.314351E-02 -4.883110E-05 -5.162639E-01 -5.997683E-02 -5.567315E-03 -1.116578E-05 -1.355695E-02 -6.620192E-05 -1.971066E-01 -8.872106E-03 -7.289937E-03 -1.482506E-05 -3.624107E-01 -2.788172E-02 -3.946019E-03 -4.911976E-06 -9.796252E-03 -2.939620E-05 -2.435676E-01 -1.550957E-02 -1.471975E-02 -6.447073E-05 -3.711107E-01 -3.097190E-02 -8.485525E-03 -2.418503E-05 -2.074995E-02 -1.440717E-04 -2.427633E-01 -1.927418E-02 -1.659082E-02 -9.533795E-05 -3.947070E-01 -4.039320E-02 -8.721245E-03 -3.472785E-05 -2.129433E-02 -2.058398E-04 -2.930833E-01 -3.717078E-02 -1.961320E-02 -2.361042E-04 -5.029290E-01 -7.452592E-02 -1.162396E-02 -9.544883E-05 -2.835116E-02 -5.654990E-04 -3.612968E-01 -3.626192E-02 -2.275737E-02 -2.915981E-04 -6.836531E-01 -1.007739E-01 -1.386251E-02 -1.308722E-04 -3.381273E-02 -7.755475E-04 -3.379726E-01 -3.059811E-02 -1.034847E-02 -2.508685E-05 -7.876015E-01 -1.626433E-01 -4.304432E-03 -4.836158E-06 -1.080846E-02 -3.049489E-05 -2.207527E-01 -1.480236E-02 -9.133299E-03 -4.378685E-05 -5.306469E-01 -6.883187E-02 -3.832635E-03 -7.385540E-06 -9.542013E-03 -4.429238E-05 -1.746455E-01 -7.365091E-03 -6.210077E-03 -1.980262E-05 -4.018765E-01 -3.788658E-02 -3.022816E-03 -4.602873E-06 -7.491747E-03 -2.745170E-05 -2.568492E-01 -1.811320E-02 -1.821423E-02 -2.069737E-04 -4.656788E-01 -5.401259E-02 -1.232525E-02 -1.058384E-04 -3.013811E-02 -6.273405E-04 -2.225493E-01 -1.562018E-02 -1.010014E-02 -5.040357E-05 -4.589131E-01 -6.663804E-02 -5.258730E-03 -1.491454E-05 -1.298284E-02 -9.047317E-05 -2.447664E-01 -1.706786E-02 -1.478729E-02 -6.497711E-05 -5.983362E-01 -1.049331E-01 -6.596398E-03 -1.524559E-05 -1.633146E-02 -9.299953E-05 -2.413969E-01 -2.116589E-02 -2.021668E-02 -2.024522E-04 -3.619973E-01 -4.122998E-02 -1.346912E-02 -9.583517E-05 -3.286803E-02 -5.685240E-04 -2.049752E-01 -8.601175E-03 -1.025940E-02 -2.514980E-05 -4.043912E-01 -3.463281E-02 -4.452720E-03 -6.434910E-06 -1.096850E-02 -3.904161E-05 -3.102820E-01 -2.045820E-02 -1.459368E-02 -5.241789E-05 -6.773052E-01 -9.567203E-02 -7.341203E-03 -1.649958E-05 -1.800485E-02 -9.887491E-05 -2.550379E-01 -1.497142E-02 -1.091961E-02 -3.974930E-05 -5.647093E-01 -7.433920E-02 -5.249459E-03 -1.177345E-05 -1.284826E-02 -7.017030E-05 -3.556052E-01 -2.703280E-02 -2.735992E-02 -1.564623E-04 -6.683707E-01 -1.040515E-01 -1.590490E-02 -6.014424E-05 -3.877604E-02 -3.576128E-04 -2.497863E-01 -1.507086E-02 -1.494719E-02 -1.025755E-04 -4.762993E-01 -5.549879E-02 -8.527272E-03 -4.579896E-05 -2.085262E-02 -2.725955E-04 -1.839365E-01 -8.369442E-03 -1.237838E-02 -7.164219E-05 -3.775826E-01 -3.190193E-02 -7.884508E-03 -3.507069E-05 -1.929540E-02 -2.080904E-04 -1.708555E-01 -9.399504E-03 -7.715238E-03 -2.292805E-05 -3.732199E-01 -4.315843E-02 -3.978302E-03 -6.440288E-06 -9.770196E-03 -3.826434E-05 -3.241297E-01 -2.680732E-02 -2.827721E-02 -2.383010E-04 -5.925440E-01 -7.572445E-02 -1.805046E-02 -9.773692E-05 -4.409968E-02 -5.812383E-04 -2.602482E-01 -1.672576E-02 -7.932620E-03 -1.561951E-05 -5.580855E-01 -6.844216E-02 -2.088329E-03 -9.313432E-07 -5.186486E-03 -5.737715E-06 -2.890696E-01 -2.384728E-02 -1.015490E-02 -3.717081E-05 -6.111526E-01 -8.518321E-02 -4.213456E-03 -7.925859E-06 -1.037122E-02 -4.719897E-05 -3.855713E-01 -3.814941E-02 -1.595567E-02 -1.026684E-04 -8.322980E-01 -1.786719E-01 -6.646130E-03 -1.662975E-05 -1.674159E-02 -1.022582E-04 -1.897658E-01 -1.150551E-02 -8.071193E-03 -3.172610E-05 -4.219179E-01 -4.854116E-02 -3.808837E-03 -8.709924E-06 -9.434346E-03 -5.203901E-05 -2.195178E-01 -1.516218E-02 -7.926578E-03 -2.639446E-05 -5.306593E-01 -7.568838E-02 -2.106381E-03 -1.749456E-06 -5.313752E-03 -1.093384E-05 -3.256867E-01 -4.534052E-02 -2.131147E-02 -2.570637E-04 -5.297378E-01 -1.136688E-01 -1.158918E-02 -7.267385E-05 -2.831750E-02 -4.331969E-04 -1.414992E-01 -5.003890E-03 -4.258013E-03 -7.891903E-06 -3.615210E-01 -3.145749E-02 -1.093412E-03 -3.546225E-07 -2.758486E-03 -2.166206E-06 -1.514116E-01 -6.201312E-03 -4.857451E-03 -6.866877E-06 -3.984685E-01 -3.930815E-02 -2.038032E-03 -1.261346E-06 -5.152722E-03 -7.792008E-06 -3.159334E-01 -3.379738E-02 -2.905400E-03 -4.164258E-06 -5.469766E-01 -9.022824E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.132668E-01 -1.056200E-02 -9.631005E-03 -2.427206E-05 -4.566464E-01 -5.683176E-02 -4.166599E-03 -5.882400E-06 -1.031031E-02 -3.580708E-05 -2.912415E-01 -2.272338E-02 -1.775965E-02 -1.443229E-04 -4.943869E-01 -5.913494E-02 -1.104606E-02 -6.433295E-05 -2.697987E-02 -3.816975E-04 -2.570902E-01 -1.798689E-02 -2.361267E-03 -2.378626E-06 -4.065439E-01 -4.281600E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.949017E-01 -2.326343E-02 -1.187639E-02 -4.961037E-05 -6.020356E-01 -9.395273E-02 -6.276821E-03 -1.931834E-05 -1.538205E-02 -1.153434E-04 -2.558511E-01 -1.698459E-02 -1.575580E-02 -8.651862E-05 -5.875503E-01 -8.849521E-02 -7.883870E-03 -3.015633E-05 -1.949261E-02 -1.802377E-04 -1.839277E-01 -8.799415E-03 -9.390667E-04 -4.683772E-07 -4.384277E-01 -4.401825E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.609130E-01 -1.523879E-02 -1.198704E-02 -4.620730E-05 -6.275273E-01 -8.589709E-02 -6.342769E-03 -1.539049E-05 -1.563218E-02 -9.287339E-05 -2.481956E-01 -1.445135E-02 -7.512217E-03 -2.578216E-05 -5.254869E-01 -6.462207E-02 -4.109411E-03 -1.008346E-05 -1.011567E-02 -5.994042E-05 -2.029184E-01 -9.361823E-03 -5.088961E-03 -6.279329E-06 -4.979684E-01 -5.589905E-02 -1.833935E-03 -7.843470E-07 -4.590978E-03 -4.909945E-06 -2.259899E-01 -1.904652E-02 -1.437025E-02 -1.402125E-04 -5.175625E-01 -7.750371E-02 -8.659314E-03 -5.998348E-05 -2.125004E-02 -3.556838E-04 -2.491821E-01 -1.416884E-02 -1.505865E-02 -1.184227E-04 -6.046546E-01 -7.493539E-02 -9.648000E-03 -5.809858E-05 -2.378233E-02 -3.456642E-04 -2.380529E-01 -1.543764E-02 -1.826271E-02 -8.884450E-05 -4.803110E-01 -5.846859E-02 -8.805950E-03 -2.475992E-05 -2.159062E-02 -1.489502E-04 -2.026084E-01 -1.110441E-02 -8.160845E-03 -1.785658E-05 -4.437692E-01 -5.639028E-02 -3.565175E-03 -3.302071E-06 -8.864014E-03 -2.024481E-05 -2.224558E-01 -1.680211E-02 -1.555273E-02 -1.869799E-04 -4.173737E-01 -6.228541E-02 -9.135566E-03 -7.133316E-05 -2.241062E-02 -4.286070E-04 -2.004042E-01 -1.095639E-02 -1.437370E-03 -8.849524E-07 -4.174469E-01 -4.395281E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.755714E-01 -6.756269E-03 -8.983808E-03 -1.906916E-05 -4.261288E-01 -3.852168E-02 -3.247612E-03 -3.858076E-06 -8.028951E-03 -2.337512E-05 -2.223071E-01 -1.353146E-02 -1.705765E-02 -1.245386E-04 -5.197542E-01 -6.518812E-02 -9.805805E-03 -4.604085E-05 -2.405033E-02 -2.748160E-04 -1.948532E-01 -9.221640E-03 -1.164060E-02 -3.726891E-05 -4.394449E-01 -4.772119E-02 -5.615780E-03 -1.145305E-05 -1.379554E-02 -6.876959E-05 -1.729605E-01 -7.269018E-03 -7.081459E-03 -1.086510E-05 -3.596419E-01 -3.677088E-02 -2.576810E-03 -2.237622E-06 -6.357471E-03 -1.343160E-05 -2.686943E-01 -2.027464E-02 -1.549158E-02 -1.119369E-04 -4.683049E-01 -6.133136E-02 -8.958022E-03 -4.362320E-05 -2.185541E-02 -2.586495E-04 -2.805365E-01 -1.741332E-02 -1.350305E-02 -4.115261E-05 -6.438641E-01 -9.350345E-02 -5.285236E-03 -6.082302E-06 -1.295017E-02 -3.639939E-05 -2.572894E-01 -1.557396E-02 -9.152971E-03 -2.187378E-05 -5.397672E-01 -6.947168E-02 -3.989601E-03 -5.329696E-06 -9.816007E-03 -3.199508E-05 -1.844650E-01 -6.889035E-03 -9.054549E-03 -2.388416E-05 -4.959347E-01 -5.022290E-02 -6.016437E-03 -1.166505E-05 -1.483958E-02 -6.985694E-05 -2.448423E-01 -1.383982E-02 -1.979087E-02 -1.017532E-04 -5.292703E-01 -7.138674E-02 -1.203905E-02 -3.777525E-05 -2.948865E-02 -2.261060E-04 -3.678431E-01 -4.444197E-02 -3.828158E-03 -8.237670E-06 -5.902793E-01 -7.688814E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.935423E-01 -7.592536E-03 -6.894656E-03 -1.790118E-05 -4.320616E-01 -3.963147E-02 -2.212586E-03 -1.758405E-06 -5.535114E-03 -1.077459E-05 -2.000222E-01 -8.790536E-03 -6.130353E-03 -1.084913E-05 -5.241401E-01 -6.739015E-02 -2.660110E-03 -2.912115E-06 -6.629933E-03 -1.756202E-05 -2.006222E-01 -1.191794E-02 -3.681584E-03 -4.563880E-06 -4.694831E-01 -5.256578E-02 -1.424456E-03 -6.817103E-07 -3.630744E-03 -4.291288E-06 -1.427746E-01 -5.192636E-03 -1.037189E-02 -4.055885E-05 -3.029633E-01 -2.157045E-02 -4.326032E-03 -8.614945E-06 -1.057731E-02 -5.155246E-05 -1.646414E-01 -6.623537E-03 -5.439480E-03 -7.768447E-06 -4.145907E-01 -4.057023E-02 -1.461466E-03 -5.282344E-07 -3.707510E-03 -3.392769E-06 -1.648802E-01 -7.366519E-03 -1.070584E-02 -7.721854E-05 -3.742934E-01 -3.508076E-02 -6.499009E-03 -3.696865E-05 -1.592990E-02 -2.222355E-04 -2.180319E-01 -9.923859E-03 -7.969510E-03 -1.700099E-05 -5.221346E-01 -5.681643E-02 -3.896242E-03 -5.553555E-06 -9.611215E-03 -3.391405E-05 -2.292243E-01 -1.349466E-02 -1.175536E-02 -6.134192E-05 -5.588849E-01 -7.531263E-02 -5.067123E-03 -1.484964E-05 -1.251725E-02 -8.896195E-05 -3.324146E-01 -2.547046E-02 -2.018340E-02 -1.567704E-04 -7.652357E-01 -1.207356E-01 -1.178472E-02 -6.216943E-05 -2.903536E-02 -3.717118E-04 -2.285590E-01 -1.197525E-02 -6.912934E-03 -1.203784E-05 -4.578967E-01 -5.011634E-02 -2.559431E-03 -2.572737E-06 -6.387641E-03 -1.570623E-05 -1.930700E-01 -1.057009E-02 -6.872837E-03 -2.126589E-05 -3.910460E-01 -4.649162E-02 -3.546523E-03 -6.380991E-06 -8.655793E-03 -3.783828E-05 -3.934470E-01 -3.734695E-02 -2.227825E-02 -1.453115E-04 -6.775238E-01 -1.033120E-01 -1.338820E-02 -5.501040E-05 -3.274687E-02 -3.279809E-04 -3.088799E-01 -2.873704E-02 -1.749960E-02 -1.305258E-04 -5.601385E-01 -8.645103E-02 -1.038254E-02 -5.085454E-05 -2.542701E-02 -3.023135E-04 -3.700473E-01 -3.161307E-02 -2.646517E-02 -1.740940E-04 -6.414793E-01 -8.696363E-02 -1.500269E-02 -5.967096E-05 -3.661756E-02 -3.551291E-04 -3.565351E-01 -2.588617E-02 -2.829818E-02 -2.379254E-04 -6.754679E-01 -9.310347E-02 -1.785149E-02 -1.083839E-04 -4.359723E-02 -6.452495E-04 -2.956875E-01 -2.095277E-02 -1.344873E-02 -5.606169E-05 -5.669819E-01 -6.817515E-02 -7.251551E-03 -1.703252E-05 -1.777118E-02 -1.016817E-04 -2.506887E-01 -1.299858E-02 -1.588362E-02 -7.727995E-05 -4.753313E-01 -5.001149E-02 -1.000924E-02 -3.700899E-05 -2.445351E-02 -2.204775E-04 -2.126121E-01 -1.123409E-02 -1.190127E-02 -3.832263E-05 -3.707959E-01 -3.067361E-02 -5.030198E-03 -9.080178E-06 -1.230610E-02 -5.408354E-05 -2.764143E-01 -1.563717E-02 -1.790747E-02 -9.078882E-05 -5.678500E-01 -6.620735E-02 -1.046412E-02 -3.855578E-05 -2.561249E-02 -2.296019E-04 -2.902769E-01 -2.046134E-02 -1.234799E-02 -6.085833E-05 -6.155753E-01 -8.929554E-02 -6.140705E-03 -2.104623E-05 -1.517340E-02 -1.267427E-04 -2.178843E-01 -1.129871E-02 -6.208339E-03 -9.542966E-06 -5.034079E-01 -6.194116E-02 -2.128719E-03 -1.227568E-06 -5.264120E-03 -7.484188E-06 -2.125960E-01 -9.351344E-03 -6.822592E-03 -1.025641E-05 -4.869649E-01 -4.997451E-02 -2.293340E-03 -1.145791E-06 -5.665763E-03 -6.954001E-06 -2.709614E-01 -1.628033E-02 -1.293964E-03 -6.917833E-07 -6.177875E-01 -8.137663E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.314443E-01 -2.391247E-02 -1.873938E-02 -1.577380E-04 -6.121093E-01 -8.135846E-02 -1.073229E-02 -7.334175E-05 -2.617620E-02 -4.348152E-04 -3.166995E-01 -2.320865E-02 -2.036524E-02 -1.279210E-04 -6.658781E-01 -9.649554E-02 -9.461128E-03 -3.244725E-05 -2.313190E-02 -1.926149E-04 -3.297678E-01 -2.820763E-02 -1.923411E-03 -1.900405E-06 -8.093044E-01 -1.549168E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.456076E-01 -1.494726E-02 -1.107664E-02 -5.262577E-05 -4.808813E-01 -5.271759E-02 -5.560675E-03 -1.646259E-05 -1.363247E-02 -9.798701E-05 -2.427021E-01 -1.432013E-02 -1.238222E-02 -4.787991E-05 -4.944297E-01 -5.130649E-02 -6.815175E-03 -1.474275E-05 -1.672131E-02 -8.786745E-05 -3.752437E-01 -4.854811E-02 -3.614564E-03 -7.655432E-06 -6.782217E-01 -1.182298E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.647096E-01 -3.545521E-02 -1.786012E-02 -1.465595E-04 -6.852491E-01 -1.194618E-01 -8.922910E-03 -5.271906E-05 -2.195699E-02 -3.131230E-04 -3.739088E-01 -3.265037E-02 -2.215242E-02 -1.812199E-04 -7.104581E-01 -1.100949E-01 -1.112087E-02 -4.919605E-05 -2.716623E-02 -2.917209E-04 -3.646148E-01 -3.098153E-02 -3.468938E-03 -3.673617E-06 -6.439522E-01 -8.790186E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.988792E-01 -3.585276E-02 -1.769735E-02 -7.190181E-05 -7.203928E-01 -1.136161E-01 -8.994571E-03 -1.910703E-05 -2.195114E-02 -1.134487E-04 -2.180681E-01 -1.069385E-02 -1.207089E-02 -3.821459E-05 -4.543812E-01 -4.676007E-02 -5.078523E-03 -7.405974E-06 -1.242019E-02 -4.429054E-05 -3.387204E-01 -3.973516E-02 -3.338763E-03 -5.743416E-06 -6.143123E-01 -9.874284E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.573709E-01 -1.674382E-02 -1.789150E-02 -8.268291E-05 -4.926442E-01 -5.444271E-02 -1.080063E-02 -3.171383E-05 -2.644879E-02 -1.900877E-04 -3.675868E-01 -3.260765E-02 -3.091945E-02 -3.382288E-04 -6.630012E-01 -9.843066E-02 -1.886091E-02 -1.405418E-04 -4.605866E-02 -8.347384E-04 -2.393729E-01 -1.348727E-02 -9.089783E-03 -2.427644E-05 -5.291297E-01 -7.168179E-02 -4.297079E-03 -6.989668E-06 -1.057952E-02 -4.186885E-05 -3.231612E-01 -2.306799E-02 -1.049737E-02 -2.683860E-05 -6.962022E-01 -1.052928E-01 -3.906472E-03 -4.558902E-06 -9.688302E-03 -2.762523E-05 -3.081575E-01 -2.418407E-02 -1.147679E-02 -3.854959E-05 -6.947453E-01 -1.227514E-01 -5.492866E-03 -1.250383E-05 -1.366407E-02 -7.575691E-05 -3.601378E-01 -3.119766E-02 -1.856683E-02 -1.137752E-04 -6.790405E-01 -1.110025E-01 -1.005459E-02 -3.495544E-05 -2.461545E-02 -2.087020E-04 -3.505867E-01 -3.343394E-02 -1.851972E-02 -1.598653E-04 -6.695596E-01 -9.510495E-02 -1.018052E-02 -5.221675E-05 -2.496525E-02 -3.096426E-04 -3.832686E-01 -3.148793E-02 -1.999211E-02 -1.215996E-04 -7.990637E-01 -1.345049E-01 -1.016673E-02 -4.022763E-05 -2.487451E-02 -2.398045E-04 -3.238454E-01 -2.516992E-02 -1.603342E-02 -7.138171E-05 -6.930200E-01 -1.094620E-01 -9.610453E-03 -2.882518E-05 -2.367498E-02 -1.737604E-04 -2.433247E-01 -1.382228E-02 -1.026348E-02 -3.722424E-05 -6.058218E-01 -8.021503E-02 -5.222456E-03 -1.425419E-05 -1.293486E-02 -8.486641E-05 -3.405008E-01 -2.926643E-02 -1.702379E-02 -9.214884E-05 -6.732747E-01 -1.123595E-01 -7.705730E-03 -2.518557E-05 -1.891328E-02 -1.517838E-04 -2.619123E-01 -1.659685E-02 -6.964887E-03 -1.698405E-05 -5.916662E-01 -8.408950E-02 -2.958893E-03 -5.202669E-06 -7.307355E-03 -3.175251E-05 -5.917279E-01 -8.427634E-02 -3.884610E-02 -4.129413E-04 -1.054440E+00 -2.468893E-01 -2.320189E-02 -1.593770E-04 -5.690805E-02 -9.561233E-04 -4.377758E-01 -4.319166E-02 -2.986805E-02 -2.393363E-04 -8.248635E-01 -1.512547E-01 -1.372568E-02 -4.799401E-05 -3.349029E-02 -2.857467E-04 -3.421089E-01 -2.979789E-02 -2.249013E-02 -1.559001E-04 -6.850890E-01 -1.290414E-01 -1.160224E-02 -4.302043E-05 -2.846348E-02 -2.591994E-04 -3.722540E-01 -2.904052E-02 -2.335195E-02 -1.699377E-04 -6.863934E-01 -1.046451E-01 -1.439649E-02 -7.569328E-05 -3.524469E-02 -4.513332E-04 -3.015492E-01 -2.688128E-02 -2.018127E-02 -2.032826E-04 -6.714661E-01 -1.187385E-01 -1.212713E-02 -8.198620E-05 -2.973564E-02 -4.888576E-04 -2.528792E-01 -1.477470E-02 -1.121978E-02 -3.087195E-05 -6.406078E-01 -9.017936E-02 -5.885821E-03 -9.181268E-06 -1.457639E-02 -5.584147E-05 -2.038650E-01 -9.623965E-03 -1.310712E-02 -5.593573E-05 -4.908799E-01 -5.902527E-02 -6.946389E-03 -2.251232E-05 -1.702889E-02 -1.340271E-04 -1.139788E-01 -4.277809E-03 -4.614286E-03 -1.120138E-05 -2.704042E-01 -2.220192E-02 -1.076409E-03 -5.608463E-07 -2.705241E-03 -3.490247E-06 -2.370973E-01 -1.305565E-02 -7.409820E-03 -1.519920E-05 -5.419723E-01 -6.833854E-02 -3.405550E-03 -3.330468E-06 -8.520273E-03 -2.078583E-05 -2.382071E-01 -1.383356E-02 -9.254640E-03 -2.398783E-05 -6.083591E-01 -8.592760E-02 -4.554881E-03 -6.539019E-06 -1.130393E-02 -3.971676E-05 -2.799334E-01 -1.704488E-02 -1.745706E-02 -7.748191E-05 -5.327410E-01 -6.309686E-02 -8.374890E-03 -2.219332E-05 -2.046374E-02 -1.322507E-04 -3.299989E-01 -2.500153E-02 -1.662220E-02 -9.214247E-05 -5.777125E-01 -7.504937E-02 -9.185426E-03 -3.401334E-05 -2.245932E-02 -2.018294E-04 -2.480945E-01 -1.409562E-02 -1.027283E-02 -2.736596E-05 -5.305733E-01 -7.019314E-02 -4.898185E-03 -5.923984E-06 -1.209377E-02 -3.598246E-05 -2.435916E-01 -1.296299E-02 -1.168450E-02 -5.994065E-05 -5.303919E-01 -5.892047E-02 -6.394644E-03 -2.573114E-05 -1.573948E-02 -1.534027E-04 -3.382910E-01 -3.158552E-02 -1.585392E-02 -1.113895E-04 -6.399010E-01 -1.083590E-01 -6.841954E-03 -2.411006E-05 -1.678550E-02 -1.439749E-04 -3.981095E-01 -3.726016E-02 -2.142413E-02 -1.284486E-04 -7.603821E-01 -1.209106E-01 -1.046497E-02 -4.179315E-05 -2.573004E-02 -2.505335E-04 -3.874363E-01 -3.575389E-02 -2.107756E-02 -1.052519E-04 -8.211656E-01 -1.924162E-01 -1.256245E-02 -3.945660E-05 -3.082654E-02 -2.380887E-04 -4.456573E-01 -4.237155E-02 -2.596764E-02 -1.687922E-04 -8.729138E-01 -1.545134E-01 -1.510275E-02 -6.265801E-05 -3.696609E-02 -3.740070E-04 -3.992793E-01 -3.296068E-02 -2.048068E-02 -9.504244E-05 -8.331278E-01 -1.470933E-01 -1.127453E-02 -3.432997E-05 -2.760806E-02 -2.054207E-04 -3.886517E-01 -3.801441E-02 -2.253407E-02 -1.768474E-04 -7.039271E-01 -1.249249E-01 -1.248570E-02 -6.126807E-05 -3.052526E-02 -3.644213E-04 -3.138763E-01 -2.242983E-02 -2.691593E-02 -3.776077E-04 -6.449202E-01 -8.943446E-02 -1.834857E-02 -2.003405E-04 -4.483992E-02 -1.189482E-03 -3.304662E-01 -2.601947E-02 -1.705125E-02 -1.093125E-04 -7.576247E-01 -1.316185E-01 -8.728845E-03 -2.691230E-05 -2.149655E-02 -1.614671E-04 -3.542477E-01 -2.702674E-02 -2.469817E-02 -1.455831E-04 -7.115078E-01 -1.026190E-01 -1.552045E-02 -5.994661E-05 -3.791483E-02 -3.569299E-04 -2.614009E-01 -1.471316E-02 -9.277502E-03 -2.274093E-05 -5.564657E-01 -6.496526E-02 -3.380006E-03 -2.763922E-06 -8.448047E-03 -1.692336E-05 -4.068252E-01 -3.446693E-02 -2.245360E-02 -1.722882E-04 -7.532457E-01 -1.251856E-01 -1.415713E-02 -8.327501E-05 -3.483023E-02 -4.989609E-04 -3.836239E-01 -3.481679E-02 -2.946278E-02 -2.273732E-04 -6.795627E-01 -1.096060E-01 -1.842353E-02 -9.338437E-05 -4.498328E-02 -5.557198E-04 -2.678688E-01 -1.982541E-02 -1.936290E-03 -1.603437E-06 -5.664033E-01 -7.235502E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.540894E-01 -2.828987E-02 -1.435174E-02 -5.674926E-05 -6.973646E-01 -1.020010E-01 -6.832777E-03 -1.519381E-05 -1.682126E-02 -9.113421E-05 -3.455532E-01 -2.525192E-02 -2.020162E-02 -9.765516E-05 -7.040136E-01 -1.093402E-01 -1.088099E-02 -3.831955E-05 -2.661063E-02 -2.277881E-04 -2.776016E-01 -1.920243E-02 -2.052713E-03 -1.376197E-06 -6.585464E-01 -9.903277E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.091116E-01 -2.801257E-02 -2.024177E-02 -1.487498E-04 -6.138896E-01 -9.760701E-02 -1.262011E-02 -5.893128E-05 -3.079776E-02 -3.500582E-04 -4.487706E-01 -4.623185E-02 -4.373194E-02 -6.227096E-04 -8.118881E-01 -1.430088E-01 -2.909097E-02 -2.931199E-04 -7.090335E-02 -1.741024E-03 -4.974461E-01 -7.638705E-02 -5.262803E-03 -9.305275E-06 -8.298919E-01 -1.867351E-01 -4.223383E-07 -5.157240E-14 -1.028071E-06 -3.055838E-13 -3.906825E-01 -3.395073E-02 -2.733734E-02 -2.244620E-04 -7.121951E-01 -1.102604E-01 -1.681025E-02 -9.894122E-05 -4.107934E-02 -5.893557E-04 -2.885297E-01 -1.780804E-02 -1.916292E-02 -1.071634E-04 -6.439592E-01 -8.863510E-02 -1.116822E-02 -3.755311E-05 -2.741619E-02 -2.250014E-04 -3.733478E-01 -2.968457E-02 -2.417235E-03 -1.601471E-06 -8.160636E-01 -1.392543E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.807050E-01 -3.567435E-02 -1.639520E-02 -8.976183E-05 -8.352591E-01 -1.618917E-01 -7.549384E-03 -2.052873E-05 -1.868571E-02 -1.237926E-04 -4.113785E-01 -4.105596E-02 -2.760797E-02 -3.224706E-04 -8.312520E-01 -1.593787E-01 -1.755904E-02 -1.501020E-04 -4.309969E-02 -8.945939E-04 -4.264452E-01 -3.725052E-02 -2.761193E-03 -2.435650E-06 -9.907602E-01 -1.997766E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.190564E-01 -2.211691E-02 -2.297586E-02 -1.527095E-04 -6.146814E-01 -8.438195E-02 -1.406876E-02 -6.039729E-05 -3.440408E-02 -3.599638E-04 -3.441464E-01 -2.721527E-02 -2.208497E-02 -2.084304E-04 -6.754061E-01 -9.588273E-02 -1.249467E-02 -7.294249E-05 -3.053834E-02 -4.341021E-04 -4.902348E-01 -5.753291E-02 -4.141899E-02 -4.944456E-04 -8.677723E-01 -1.834890E-01 -2.563835E-02 -1.920950E-04 -6.257208E-02 -1.139519E-03 -3.219458E-01 -2.681583E-02 -1.509759E-02 -7.089200E-05 -7.411535E-01 -1.399501E-01 -7.267619E-03 -2.195119E-05 -1.781703E-02 -1.304167E-04 -3.460861E-01 -3.062496E-02 -2.305587E-02 -1.686535E-04 -7.279411E-01 -1.156782E-01 -1.567573E-02 -7.910023E-05 -3.843848E-02 -4.721498E-04 -3.706413E-01 -4.607848E-02 -2.101789E-02 -2.205947E-04 -6.385961E-01 -1.004148E-01 -1.096358E-02 -6.216344E-05 -2.682421E-02 -3.692258E-04 -4.326697E-01 -4.048321E-02 -2.321371E-02 -1.359451E-04 -8.057041E-01 -1.359077E-01 -1.178456E-02 -4.532462E-05 -2.882484E-02 -2.702988E-04 -3.700813E-01 -3.145900E-02 -1.629352E-02 -7.752174E-05 -7.168661E-01 -1.142671E-01 -8.563032E-03 -2.424964E-05 -2.094203E-02 -1.448273E-04 -4.171696E-01 -4.090198E-02 -1.942144E-02 -1.387048E-04 -7.827435E-01 -1.320064E-01 -1.123721E-02 -5.225505E-05 -2.747262E-02 -3.113824E-04 -3.936452E-01 -3.863175E-02 -1.864453E-02 -1.426388E-04 -7.621977E-01 -1.259923E-01 -1.114507E-02 -5.649068E-05 -2.735223E-02 -3.374133E-04 -4.146463E-01 -4.565600E-02 -2.051099E-02 -1.708674E-04 -8.092070E-01 -1.483485E-01 -1.068128E-02 -5.635889E-05 -2.623860E-02 -3.368690E-04 -3.502918E-01 -2.962552E-02 -2.245539E-02 -1.353853E-04 -6.798743E-01 -1.244576E-01 -1.299645E-02 -5.263601E-05 -3.188515E-02 -3.178466E-04 -3.664319E-01 -3.762644E-02 -1.543591E-02 -6.786902E-05 -7.257390E-01 -1.308037E-01 -7.920735E-03 -2.010753E-05 -1.954092E-02 -1.209187E-04 -2.881558E-01 -2.091566E-02 -1.253893E-02 -4.874752E-05 -6.867849E-01 -1.142347E-01 -6.304481E-03 -1.195351E-05 -1.563357E-02 -7.346975E-05 -4.226989E-01 -3.731519E-02 -1.464919E-02 -5.381568E-05 -9.709527E-01 -1.979486E-01 -5.624028E-03 -7.623772E-06 -1.400491E-02 -4.711591E-05 -4.177322E-01 -4.315006E-02 -1.820553E-02 -1.147713E-04 -8.897521E-01 -1.764672E-01 -8.738022E-03 -3.234864E-05 -2.155239E-02 -1.941292E-04 -4.092607E-01 -3.530369E-02 -2.094863E-02 -1.698700E-04 -9.371798E-01 -1.782535E-01 -1.252469E-02 -6.937532E-05 -3.076548E-02 -4.148830E-04 -3.694768E-01 -3.810772E-02 -1.842214E-02 -1.102654E-04 -7.440566E-01 -1.378317E-01 -1.077497E-02 -3.938422E-05 -2.649591E-02 -2.371539E-04 -3.561758E-01 -3.892218E-02 -1.971769E-02 -1.829864E-04 -7.613019E-01 -1.474240E-01 -1.192622E-02 -7.156692E-05 -2.936758E-02 -4.300051E-04 -2.527416E-01 -1.830741E-02 -1.645432E-02 -1.267160E-04 -5.925996E-01 -9.467855E-02 -8.871453E-03 -5.348101E-05 -2.184328E-02 -3.189633E-04 -3.300644E-01 -2.928166E-02 -1.882410E-02 -1.436109E-04 -7.237383E-01 -1.333008E-01 -9.519880E-03 -4.704072E-05 -2.342545E-02 -2.806433E-04 -3.764914E-01 -3.641557E-02 -1.821370E-02 -1.541319E-04 -7.651976E-01 -1.295027E-01 -1.036579E-02 -6.438503E-05 -2.552774E-02 -3.859463E-04 -2.999858E-01 -2.596841E-02 -2.166579E-02 -2.610355E-04 -6.375460E-01 -1.048518E-01 -1.456288E-02 -1.290713E-04 -3.563700E-02 -7.694303E-04 -4.842591E-01 -6.171881E-02 -2.321959E-02 -1.668178E-04 -8.833362E-01 -1.695389E-01 -1.327201E-02 -5.801276E-05 -3.246066E-02 -3.448393E-04 -5.214507E-01 -7.645410E-02 -2.106712E-02 -1.794528E-04 -8.149268E-01 -1.497643E-01 -1.099539E-02 -6.388195E-05 -2.693654E-02 -3.799114E-04 -4.660026E-01 -5.353148E-02 -2.651479E-02 -2.310878E-04 -8.389665E-01 -1.518968E-01 -1.651906E-02 -9.356467E-05 -4.039371E-02 -5.572969E-04 -5.848474E-01 -9.288276E-02 -4.985330E-02 -1.127634E-03 -1.055201E+00 -2.709678E-01 -3.348026E-02 -5.556505E-04 -8.197497E-02 -3.315235E-03 -4.139721E-01 -3.782370E-02 -1.933292E-02 -1.125655E-04 -9.059089E-01 -1.795184E-01 -9.265770E-03 -3.682450E-05 -2.278990E-02 -2.207751E-04 -3.882528E-01 -4.110026E-02 -1.561145E-02 -6.509900E-05 -6.762051E-01 -9.661914E-02 -7.561172E-03 -1.586464E-05 -1.861326E-02 -9.601481E-05 -3.055549E-01 -2.290439E-02 -1.869038E-02 -1.012810E-04 -6.519604E-01 -9.557502E-02 -1.045342E-02 -3.401674E-05 -2.561909E-02 -2.031141E-04 -3.784039E-01 -3.540818E-02 -1.144663E-02 -3.747954E-05 -7.982030E-01 -1.492246E-01 -3.743861E-03 -3.826041E-06 -9.336060E-03 -2.375886E-05 -3.893167E-01 -3.224146E-02 -1.465378E-02 -5.640030E-05 -8.519576E-01 -1.546319E-01 -7.851346E-03 -2.140423E-05 -1.941671E-02 -1.297116E-04 -4.628352E-01 -4.648532E-02 -3.104209E-02 -2.927221E-04 -9.424350E-01 -1.848692E-01 -1.805340E-02 -1.259139E-04 -4.411679E-02 -7.489332E-04 -5.036437E-01 -6.329907E-02 -3.701287E-02 -4.293191E-04 -9.845647E-01 -2.302864E-01 -2.189511E-02 -1.860705E-04 -5.357155E-02 -1.113432E-03 -3.651286E-01 -3.372208E-02 -1.898638E-02 -1.788233E-04 -7.283966E-01 -1.166080E-01 -1.159586E-02 -7.325796E-05 -2.849437E-02 -4.369152E-04 -3.712514E-01 -3.312825E-02 -2.124449E-02 -1.626400E-04 -7.116233E-01 -1.089685E-01 -1.329424E-02 -6.857983E-05 -3.257383E-02 -4.067854E-04 -2.729718E-01 -2.308771E-02 -5.130628E-03 -8.219165E-06 -7.257857E-01 -1.711422E-01 -1.662698E-03 -9.477833E-07 -4.314077E-03 -6.608852E-06 -2.780491E-01 -2.511642E-02 -1.327468E-02 -1.125406E-04 -5.815634E-01 -9.937798E-02 -6.802535E-03 -3.433855E-05 -1.678587E-02 -2.048151E-04 -4.836173E-01 -6.301714E-02 -5.126877E-03 -7.676969E-06 -7.235761E-01 -1.309488E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.031875E-01 -4.115015E-02 -2.401570E-02 -1.884922E-04 -7.226240E-01 -1.246862E-01 -1.365997E-02 -6.483039E-05 -3.348484E-02 -3.878250E-04 -3.969397E-01 -3.388912E-02 -1.954568E-02 -1.484093E-04 -8.502161E-01 -1.499123E-01 -1.000927E-02 -5.813943E-05 -2.452378E-02 -3.457355E-04 -5.393064E-01 -7.598949E-02 -4.596848E-03 -8.271188E-06 -9.233647E-01 -1.837028E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.305005E-01 -3.980527E-02 -3.622333E-02 -2.714888E-04 -7.562019E-01 -1.251870E-01 -2.210501E-02 -1.044787E-04 -5.402135E-02 -6.242016E-04 -4.150253E-01 -4.310022E-02 -3.055341E-02 -3.204376E-04 -8.383810E-01 -1.598344E-01 -1.799260E-02 -1.186722E-04 -4.421143E-02 -7.098098E-04 -5.053663E-01 -6.741744E-02 -4.302548E-03 -5.486457E-06 -1.001508E+00 -2.499069E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.305404E-01 -9.168988E-02 -4.204388E-02 -6.233654E-04 -1.019287E+00 -2.883833E-01 -2.692540E-02 -2.702944E-04 -6.578499E-02 -1.604933E-03 -2.979429E-01 -2.557053E-02 -1.270971E-02 -6.086980E-05 -6.133144E-01 -9.302940E-02 -6.554631E-03 -2.408980E-05 -1.614693E-02 -1.437968E-04 -2.985643E-01 -2.168009E-02 -1.675518E-03 -6.853400E-07 -6.603013E-01 -1.039248E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.978111E-01 -3.476147E-02 -2.583972E-02 -1.494411E-04 -8.471730E-01 -1.545734E-01 -1.585722E-02 -6.154411E-05 -3.885738E-02 -3.693284E-04 -5.202672E-01 -6.063991E-02 -2.696218E-02 -2.266432E-04 -1.106648E+00 -2.681959E-01 -1.522211E-02 -8.625903E-05 -3.740299E-02 -5.175445E-04 -4.764994E-01 -7.395612E-02 -4.506348E-03 -1.035606E-05 -9.157662E-01 -2.118046E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.132742E-01 -4.146437E-02 -3.375089E-02 -4.225536E-04 -7.921867E-01 -1.381808E-01 -2.045881E-02 -1.753311E-04 -5.005367E-02 -1.042462E-03 -2.661077E-01 -1.751445E-02 -1.121639E-02 -3.636881E-05 -5.712386E-01 -7.771405E-02 -6.533439E-03 -1.250013E-05 -1.610362E-02 -7.471829E-05 -3.425750E-01 -3.408776E-02 -1.156146E-02 -5.411528E-05 -8.276841E-01 -1.940431E-01 -6.001009E-03 -2.103242E-05 -1.484593E-02 -1.276999E-04 -3.790958E-01 -5.528325E-02 -2.035138E-02 -2.087186E-04 -7.464973E-01 -1.698540E-01 -1.056382E-02 -7.655648E-05 -2.594266E-02 -4.578317E-04 -4.673249E-01 -5.113730E-02 -2.751426E-02 -1.816642E-04 -8.149126E-01 -1.677855E-01 -1.476997E-02 -5.736790E-05 -3.624040E-02 -3.439634E-04 -4.969678E-01 -6.703663E-02 -3.324010E-02 -4.839680E-04 -7.957816E-01 -1.402618E-01 -1.787791E-02 -1.889011E-04 -4.366390E-02 -1.122265E-03 -3.987041E-01 -3.319083E-02 -1.717610E-02 -7.614560E-05 -8.405362E-01 -1.455051E-01 -9.116726E-03 -2.731734E-05 -2.243998E-02 -1.635133E-04 -3.557016E-01 -2.733014E-02 -1.946614E-02 -9.722258E-05 -8.042289E-01 -1.325000E-01 -1.081675E-02 -3.317997E-05 -2.660183E-02 -1.988697E-04 -4.238750E-01 -5.071137E-02 -3.860553E-02 -4.907754E-04 -6.818241E-01 -1.059015E-01 -2.594551E-02 -2.253483E-04 -6.329673E-02 -1.337276E-03 -4.845466E-01 -4.739927E-02 -3.781105E-02 -3.188017E-04 -8.754691E-01 -1.592141E-01 -2.256002E-02 -1.269857E-04 -5.521664E-02 -7.580381E-04 -4.762135E-01 -5.411538E-02 -2.732678E-02 -2.310254E-04 -7.810833E-01 -1.311139E-01 -1.597068E-02 -8.360266E-05 -3.898613E-02 -4.967345E-04 -4.626499E-01 -6.385872E-02 -2.294200E-02 -1.768315E-04 -9.372052E-01 -2.270799E-01 -1.299342E-02 -6.187834E-05 -3.189449E-02 -3.716202E-04 -3.261518E-01 -3.233233E-02 -1.344996E-02 -7.296974E-05 -6.438319E-01 -1.139836E-01 -6.902941E-03 -2.347639E-05 -1.691710E-02 -1.400440E-04 -4.352336E-01 -5.775668E-02 -2.123686E-02 -1.661853E-04 -8.342632E-01 -1.707879E-01 -1.088157E-02 -4.787467E-05 -2.666381E-02 -2.851629E-04 -4.309663E-01 -3.819583E-02 -2.280285E-02 -1.438300E-04 -8.522076E-01 -1.478770E-01 -1.272222E-02 -4.969054E-05 -3.123456E-02 -2.971660E-04 -3.545417E-01 -3.176670E-02 -2.104462E-02 -1.973843E-04 -6.924468E-01 -1.084661E-01 -1.359515E-02 -9.318781E-05 -3.323698E-02 -5.537381E-04 -2.601793E-01 -1.854037E-02 -7.292982E-03 -2.119725E-05 -5.911869E-01 -8.786472E-02 -3.411247E-03 -4.494329E-06 -8.395279E-03 -2.694816E-05 -2.856586E-01 -1.974948E-02 -1.054334E-02 -2.769649E-05 -6.966115E-01 -1.097272E-01 -4.020408E-03 -5.909802E-06 -1.002274E-02 -3.621226E-05 -2.990262E-01 -2.895771E-02 -1.524669E-02 -1.075200E-04 -5.511247E-01 -7.221915E-02 -7.850283E-03 -4.154474E-05 -1.921607E-02 -2.483852E-04 -2.734313E-01 -2.247782E-02 -1.398383E-02 -1.162049E-04 -6.576619E-01 -1.210529E-01 -8.907424E-03 -5.814670E-05 -2.190592E-02 -3.497392E-04 -2.815363E-01 -1.901069E-02 -1.186929E-02 -3.364035E-05 -6.515902E-01 -9.851410E-02 -6.886950E-03 -1.323736E-05 -1.695569E-02 -7.940407E-05 -3.484143E-01 -2.809808E-02 -2.158706E-02 -1.746308E-04 -6.459834E-01 -9.326184E-02 -1.339059E-02 -7.862843E-05 -3.279132E-02 -4.674908E-04 -4.872293E-01 -6.299198E-02 -4.535678E-03 -8.886458E-06 -7.995378E-01 -1.391013E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.517270E-01 -4.298933E-02 -2.983900E-02 -2.534533E-04 -9.003348E-01 -1.639649E-01 -1.797753E-02 -1.058508E-04 -4.408492E-02 -6.323324E-04 -3.840449E-01 -3.048942E-02 -2.304747E-02 -1.451405E-04 -7.696800E-01 -1.200152E-01 -1.291566E-02 -4.856104E-05 -3.169233E-02 -2.900548E-04 -3.899986E-01 -4.842017E-02 -3.398750E-02 -5.012913E-04 -7.289300E-01 -1.213432E-01 -2.225136E-02 -2.225919E-04 -5.443442E-02 -1.322013E-03 -5.598647E-01 -7.209791E-02 -3.636258E-02 -2.972603E-04 -9.425990E-01 -1.980189E-01 -2.180409E-02 -1.030147E-04 -5.325326E-02 -6.135525E-04 -5.137462E-01 -5.449795E-02 -2.968013E-02 -2.213205E-04 -1.089121E+00 -2.416550E-01 -1.633665E-02 -8.162297E-05 -4.019388E-02 -4.875490E-04 -4.289801E-01 -4.093477E-02 -2.010221E-02 -9.125869E-05 -8.441503E-01 -1.577640E-01 -1.121134E-02 -3.076206E-05 -2.749358E-02 -1.837347E-04 -4.669049E-01 -4.985409E-02 -3.155885E-02 -2.843354E-04 -8.541836E-01 -1.586915E-01 -1.971407E-02 -1.199500E-04 -4.819514E-02 -7.142000E-04 -5.476118E-01 -7.964842E-02 -3.671613E-02 -5.048684E-04 -9.819505E-01 -2.224104E-01 -2.057791E-02 -1.723983E-04 -5.020646E-02 -1.023284E-03 -3.570430E-01 -3.236156E-02 -2.642812E-02 -2.499237E-04 -6.566192E-01 -1.028336E-01 -1.658528E-02 -1.090997E-04 -4.052667E-02 -6.501756E-04 -3.157944E-01 -2.754029E-02 -2.510614E-03 -2.597981E-06 -6.619048E-01 -1.052488E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.796550E-01 -1.863344E-02 -1.041219E-02 -5.191551E-05 -6.609168E-01 -1.042598E-01 -6.108228E-03 -2.425637E-05 -1.502705E-02 -1.442032E-04 -2.179231E-01 -1.148681E-02 -1.158771E-02 -5.115165E-05 -5.338009E-01 -6.387573E-02 -6.955519E-03 -2.069739E-05 -1.714723E-02 -1.242632E-04 -2.723379E-01 -1.612703E-02 -1.661668E-02 -8.393477E-05 -6.115831E-01 -7.762931E-02 -8.158618E-03 -2.912656E-05 -2.012066E-02 -1.734434E-04 -4.177079E-01 -5.021689E-02 -1.465133E-02 -8.170592E-05 -8.821701E-01 -2.073297E-01 -5.279873E-03 -1.131685E-05 -1.297780E-02 -6.813348E-05 -4.389866E-01 -5.718767E-02 -2.509233E-02 -2.986289E-04 -8.525743E-01 -1.748816E-01 -1.369565E-02 -1.018308E-04 -3.355369E-02 -6.079070E-04 -4.137349E-01 -4.314157E-02 -2.371796E-02 -2.559421E-04 -7.149288E-01 -1.144426E-01 -1.335685E-02 -1.050731E-04 -3.269465E-02 -6.277716E-04 -6.493181E-01 -8.850590E-02 -4.003436E-02 -4.029382E-04 -1.240508E+00 -3.254748E-01 -2.412272E-02 -1.510168E-04 -5.916870E-02 -9.052554E-04 -4.999253E-01 -5.822974E-02 -2.648913E-02 -2.036552E-04 -8.603421E-01 -1.542102E-01 -1.503446E-02 -7.780397E-05 -3.680872E-02 -4.627887E-04 -2.140322E-01 -1.009989E-02 -9.821979E-04 -2.888126E-07 -5.412641E-01 -6.614023E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.473664E-01 -1.445695E-02 -1.115793E-02 -4.639483E-05 -6.402572E-01 -1.087519E-01 -6.977317E-03 -2.012165E-05 -1.726283E-02 -1.209389E-04 -4.106842E-01 -4.252374E-02 -2.865498E-02 -2.625513E-04 -6.937372E-01 -1.072413E-01 -1.818386E-02 -1.104345E-04 -4.446846E-02 -6.595035E-04 -4.211497E-01 -4.077958E-02 -2.971575E-03 -2.487030E-06 -8.520797E-01 -1.481605E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.226188E-01 -5.944362E-02 -2.960968E-02 -2.245340E-04 -9.222348E-01 -1.736139E-01 -1.631529E-02 -7.908945E-05 -3.982616E-02 -4.708490E-04 -4.418421E-01 -4.437957E-02 -2.517739E-02 -1.907600E-04 -7.787605E-01 -1.249305E-01 -1.536054E-02 -7.917968E-05 -3.755245E-02 -4.723672E-04 -4.343976E-01 -4.457981E-02 -3.388911E-03 -3.822692E-06 -8.737430E-01 -1.764940E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.598455E-01 -2.729560E-02 -2.418740E-02 -2.378985E-04 -7.302175E-01 -1.135251E-01 -1.616906E-02 -1.246680E-04 -3.949063E-02 -7.402107E-04 -2.619461E-01 -1.513254E-02 -8.926754E-03 -1.978809E-05 -6.435721E-01 -9.157538E-02 -4.651147E-03 -7.139204E-06 -1.149560E-02 -4.303315E-05 -3.477772E-01 -3.056585E-02 -1.223437E-02 -5.499474E-05 -7.995504E-01 -1.386715E-01 -6.975627E-03 -1.888125E-05 -1.734787E-02 -1.146221E-04 -3.619349E-01 -3.702197E-02 -1.807440E-02 -1.270513E-04 -7.778669E-01 -1.474144E-01 -1.099124E-02 -4.917455E-05 -2.701829E-02 -2.940738E-04 -3.162191E-01 -2.268893E-02 -1.158071E-02 -3.480324E-05 -7.692808E-01 -1.327980E-01 -4.095665E-03 -5.158750E-06 -1.022758E-02 -3.212100E-05 -5.342532E-01 -8.478330E-02 -2.903573E-02 -3.357498E-04 -1.120085E+00 -3.408745E-01 -1.690122E-02 -1.279478E-04 -4.141172E-02 -7.637947E-04 -4.496065E-01 -6.505133E-02 -2.635557E-02 -3.323123E-04 -9.612470E-01 -2.510212E-01 -1.538003E-02 -1.327695E-04 -3.782149E-02 -7.945656E-04 -4.847046E-01 -5.967696E-02 -2.535687E-02 -2.173087E-04 -1.077043E+00 -2.811943E-01 -1.097101E-02 -3.799483E-05 -2.709062E-02 -2.304602E-04 -5.175767E-01 -5.719466E-02 -1.973241E-02 -8.575798E-05 -9.679612E-01 -2.056860E-01 -8.303999E-03 -1.805765E-05 -2.040361E-02 -1.089188E-04 -5.517001E-01 -6.994072E-02 -2.497158E-02 -1.771114E-04 -1.098639E+00 -2.726418E-01 -1.399598E-02 -6.099098E-05 -3.430186E-02 -3.665835E-04 -2.863207E-01 -1.857525E-02 -8.336069E-03 -1.649811E-05 -6.476326E-01 -9.010693E-02 -3.429198E-03 -3.106979E-06 -8.565244E-03 -1.898164E-05 -2.620263E-01 -1.413830E-02 -1.486260E-02 -6.016669E-05 -5.979318E-01 -7.637631E-02 -7.005392E-03 -1.590920E-05 -1.730862E-02 -9.593066E-05 -3.655323E-01 -3.067786E-02 -2.564543E-02 -2.165772E-04 -7.572344E-01 -1.217887E-01 -1.473507E-02 -8.140802E-05 -3.619562E-02 -4.852029E-04 -3.419278E-01 -2.642670E-02 -2.272345E-02 -1.520173E-04 -6.406916E-01 -8.632502E-02 -1.398347E-02 -6.589014E-05 -3.414144E-02 -3.923320E-04 -4.462443E-01 -4.882939E-02 -3.221856E-02 -4.381937E-04 -7.714529E-01 -1.298248E-01 -2.030822E-02 -2.050592E-04 -4.959466E-02 -1.221874E-03 -4.241623E-01 -4.238067E-02 -3.017189E-02 -3.192439E-04 -8.184443E-01 -1.472953E-01 -1.653484E-02 -9.828819E-05 -4.040308E-02 -5.837728E-04 -5.468649E-01 -6.932849E-02 -3.506986E-02 -3.414126E-04 -9.081801E-01 -1.955422E-01 -2.067323E-02 -1.252268E-04 -5.051840E-02 -7.466097E-04 -4.049238E-01 -3.619626E-02 -1.820878E-02 -8.370629E-05 -7.947251E-01 -1.471574E-01 -6.827689E-03 -1.877378E-05 -1.682488E-02 -1.119968E-04 -3.181706E-01 -2.312073E-02 -1.853503E-02 -9.670338E-05 -7.307830E-01 -1.165409E-01 -1.133833E-02 -4.507577E-05 -2.784164E-02 -2.700020E-04 -4.535053E-01 -4.781822E-02 -2.298094E-02 -1.379435E-04 -9.393810E-01 -1.913101E-01 -1.088324E-02 -3.746573E-05 -2.670626E-02 -2.245210E-04 -3.711608E-01 -3.011209E-02 -2.135571E-02 -1.326869E-04 -7.941852E-01 -1.316708E-01 -1.330360E-02 -5.321889E-05 -3.253974E-02 -3.167152E-04 -4.121174E-01 -3.478939E-02 -1.586472E-02 -6.068678E-05 -1.040216E+00 -2.214218E-01 -5.758712E-03 -1.002333E-05 -1.426440E-02 -6.037119E-05 -4.435090E-01 -4.161468E-02 -1.602560E-02 -5.789996E-05 -1.002899E+00 -2.058070E-01 -7.221739E-03 -1.233021E-05 -1.798457E-02 -7.523251E-05 -4.605997E-01 -5.734630E-02 -1.933007E-02 -1.409861E-04 -1.082221E+00 -2.959635E-01 -9.105646E-03 -3.669942E-05 -2.256185E-02 -2.209209E-04 -4.760643E-01 -5.548670E-02 -2.305845E-02 -1.988737E-04 -1.108307E+00 -2.819143E-01 -1.141829E-02 -5.438996E-05 -2.821950E-02 -3.289724E-04 -2.990870E-01 -2.614044E-02 -1.379131E-02 -6.530395E-05 -6.526311E-01 -1.174214E-01 -6.340014E-03 -1.465241E-05 -1.577489E-02 -8.917934E-05 -4.539651E-01 -5.989053E-02 -3.706059E-02 -7.451853E-04 -9.479066E-01 -2.087790E-01 -2.371011E-02 -3.624597E-04 -5.802863E-02 -2.153033E-03 -3.550875E-01 -3.154848E-02 -1.517370E-02 -6.019907E-05 -8.233200E-01 -1.604220E-01 -7.096967E-03 -1.239328E-05 -1.749843E-02 -7.496910E-05 -2.669672E-01 -1.655119E-02 -9.921355E-03 -2.850701E-05 -6.229281E-01 -9.065592E-02 -3.525996E-03 -3.622432E-06 -8.763114E-03 -2.217997E-05 -3.117641E-01 -2.706928E-02 -1.301318E-02 -6.380468E-05 -7.069278E-01 -1.223940E-01 -5.520667E-03 -1.450549E-05 -1.364327E-02 -8.705049E-05 -4.253175E-01 -4.226465E-02 -3.130303E-02 -2.892976E-04 -8.847586E-01 -1.831350E-01 -1.869718E-02 -1.080033E-04 -4.581100E-02 -6.437392E-04 -4.373877E-01 -4.563513E-02 -2.171789E-02 -1.852469E-04 -8.427752E-01 -1.639163E-01 -1.193320E-02 -6.904423E-05 -2.934222E-02 -4.124494E-04 -3.309335E-01 -2.360277E-02 -1.782689E-02 -7.495262E-05 -7.435456E-01 -1.161667E-01 -9.806683E-03 -2.456418E-05 -2.407241E-02 -1.471923E-04 -3.295651E-01 -2.892136E-02 -9.136199E-03 -2.751683E-05 -7.402491E-01 -1.444989E-01 -4.232396E-03 -6.593472E-06 -1.064377E-02 -4.140318E-05 -2.646177E-01 -1.820511E-02 -6.560072E-03 -1.355487E-05 -6.853657E-01 -1.299412E-01 -2.501821E-03 -2.093278E-06 -6.398968E-03 -1.362528E-05 -5.276217E-01 -6.992447E-02 -4.094462E-02 -5.970189E-04 -1.098251E+00 -3.357754E-01 -2.710360E-02 -2.943539E-04 -6.624993E-02 -1.748479E-03 -4.706582E-01 -4.760382E-02 -1.885346E-02 -7.652927E-05 -9.303306E-01 -1.833640E-01 -9.384721E-03 -2.029091E-05 -2.290445E-02 -1.208163E-04 -5.382357E-01 -6.759212E-02 -2.981285E-02 -2.571507E-04 -1.218516E+00 -3.361214E-01 -1.807366E-02 -9.486632E-05 -4.459288E-02 -5.717156E-04 -5.926040E-01 -7.178398E-02 -4.360128E-02 -5.324114E-04 -1.307820E+00 -3.690548E-01 -2.600218E-02 -2.365448E-04 -6.382907E-02 -1.415541E-03 +2.737079E+00 +1.545362E+00 +7.475678E-02 +1.182688E-03 +3.895146E+00 +3.143927E+00 +3.051980E-02 +2.030656E-04 +7.566509E-02 +1.248142E-03 +2.564678E+00 +1.356531E+00 +6.888583E-02 +1.027172E-03 +3.639176E+00 +2.763465E+00 +2.785332E-02 +1.756457E-04 +6.905430E-02 +1.079605E-03 +2.513858E+00 +1.360648E+00 +7.106151E-02 +1.063532E-03 +3.598310E+00 +2.766916E+00 +2.957807E-02 +1.830650E-04 +7.333034E-02 +1.125208E-03 +2.680537E+00 +1.557625E+00 +7.458823E-02 +1.153071E-03 +3.874223E+00 +3.178628E+00 +3.085079E-02 +1.987973E-04 +7.648569E-02 +1.221907E-03 +2.747094E+00 +1.661126E+00 +7.366404E-02 +1.200019E-03 +3.949477E+00 +3.398210E+00 +2.983494E-02 +2.006053E-04 +7.396717E-02 +1.233020E-03 +2.832153E+00 +1.688117E+00 +7.768421E-02 +1.263525E-03 +4.057661E+00 +3.441857E+00 +3.181289E-02 +2.134911E-04 +7.887092E-02 +1.312222E-03 +2.818292E+00 +1.727700E+00 +8.151103E-02 +1.400727E-03 +4.087366E+00 +3.555489E+00 +3.440824E-02 +2.483234E-04 +8.530537E-02 +1.526319E-03 +2.673498E+00 +1.597867E+00 +8.179404E-02 +1.455604E-03 +4.005194E+00 +3.520971E+00 +3.564373E-02 +2.749065E-04 +8.836840E-02 +1.689712E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.694430E+00 +1.482997E+00 +7.661360E-02 +1.219010E-03 +3.956809E+00 +3.231298E+00 +3.211518E-02 +2.179122E-04 +7.962036E-02 +1.339397E-03 +2.572758E+00 +1.418791E+00 +7.213692E-02 +1.094985E-03 +3.692753E+00 +2.869867E+00 +2.991749E-02 +1.926648E-04 +7.417183E-02 +1.184214E-03 +2.477980E+00 +1.312803E+00 +6.912091E-02 +9.790394E-04 +3.581706E+00 +2.674317E+00 +2.863743E-02 +1.680509E-04 +7.099830E-02 +1.032924E-03 +2.845088E+00 +1.688617E+00 +8.173799E-02 +1.368439E-03 +4.131147E+00 +3.544636E+00 +3.438554E-02 +2.417440E-04 +8.524908E-02 +1.485879E-03 +2.793685E+00 +1.647743E+00 +8.194563E-02 +1.421503E-03 +4.186293E+00 +3.695916E+00 +3.501635E-02 +2.621854E-04 +8.681299E-02 +1.611522E-03 +2.638366E+00 +1.500052E+00 +8.011857E-02 +1.356165E-03 +4.000991E+00 +3.395409E+00 +3.487592E-02 +2.544883E-04 +8.646482E-02 +1.564211E-03 +2.842735E+00 +1.690237E+00 +8.154955E-02 +1.356837E-03 +4.156256E+00 +3.570439E+00 +3.435028E-02 +2.398488E-04 +8.516165E-02 +1.474230E-03 +2.196972E+00 +9.871590E-01 +6.781939E-02 +9.725975E-04 +3.352539E+00 +2.320436E+00 +2.976179E-02 +1.937147E-04 +7.378580E-02 +1.190667E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.641273E+00 +1.597870E+00 +7.598644E-02 +1.292899E-03 +3.853049E+00 +3.336280E+00 +3.203862E-02 +2.292746E-04 +7.943056E-02 +1.409235E-03 +2.708082E+00 +1.522839E+00 +7.654337E-02 +1.221093E-03 +3.905027E+00 +3.156770E+00 +3.189847E-02 +2.134574E-04 +7.908310E-02 +1.312015E-03 +2.691233E+00 +1.524379E+00 +8.054050E-02 +1.365756E-03 +3.962250E+00 +3.258368E+00 +3.462881E-02 +2.628049E-04 +8.585218E-02 +1.615329E-03 +3.018386E+00 +1.917223E+00 +8.348614E-02 +1.445746E-03 +4.283272E+00 +3.833787E+00 +3.429972E-02 +2.430307E-04 +8.503630E-02 +1.493787E-03 +2.929994E+00 +1.836911E+00 +8.927512E-02 +1.624433E-03 +4.372984E+00 +4.002348E+00 +3.882367E-02 +3.051257E-04 +9.625215E-02 +1.875454E-03 +3.119790E+00 +2.050856E+00 +9.534078E-02 +1.868390E-03 +4.698804E+00 +4.587809E+00 +4.157799E-02 +3.523492E-04 +1.030807E-01 +2.165713E-03 +2.868621E+00 +1.702964E+00 +8.398565E-02 +1.456555E-03 +4.247485E+00 +3.715607E+00 +3.580655E-02 +2.676357E-04 +8.877207E-02 +1.645022E-03 +2.497455E+00 +1.252375E+00 +6.446362E-02 +8.477811E-04 +3.507541E+00 +2.474088E+00 +2.542963E-02 +1.367733E-04 +6.304548E-02 +8.406768E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.623441E+00 +1.490238E+00 +8.737054E-02 +1.670677E-03 +4.075246E+00 +3.570201E+00 +3.969459E-02 +3.510115E-04 +9.841135E-02 +2.157491E-03 +2.429458E+00 +1.296272E+00 +7.433515E-02 +1.195439E-03 +3.603045E+00 +2.814355E+00 +3.233556E-02 +2.266091E-04 +8.016674E-02 +1.392852E-03 +2.655653E+00 +1.503631E+00 +7.556244E-02 +1.216313E-03 +3.876149E+00 +3.192723E+00 +3.167217E-02 +2.160892E-04 +7.852205E-02 +1.328191E-03 +2.687380E+00 +1.496815E+00 +7.570314E-02 +1.262722E-03 +3.940616E+00 +3.291028E+00 +3.159442E-02 +2.339022E-04 +7.832928E-02 +1.437679E-03 +2.990160E+00 +1.889612E+00 +7.623143E-02 +1.208898E-03 +4.207001E+00 +3.697140E+00 +2.984188E-02 +1.859848E-04 +7.398438E-02 +1.143155E-03 +2.853430E+00 +1.655915E+00 +7.908369E-02 +1.262135E-03 +4.101975E+00 +3.406862E+00 +3.260559E-02 +2.168450E-04 +8.083620E-02 +1.332837E-03 +2.730969E+00 +1.615691E+00 +7.764021E-02 +1.314394E-03 +3.991873E+00 +3.443169E+00 +3.252644E-02 +2.371617E-04 +8.063998E-02 +1.457714E-03 +2.187664E+00 +9.957750E-01 +6.436381E-02 +8.515751E-04 +3.270736E+00 +2.197812E+00 +2.754849E-02 +1.554780E-04 +6.829858E-02 +9.556448E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.126226E+00 +2.054101E+00 +9.308386E-02 +1.840170E-03 +4.585435E+00 +4.425166E+00 +3.991071E-02 +3.454637E-04 +9.894716E-02 +2.123391E-03 +2.628975E+00 +1.442927E+00 +7.480586E-02 +1.136055E-03 +3.849243E+00 +3.050079E+00 +3.136784E-02 +1.990547E-04 +7.776755E-02 +1.223489E-03 +2.740162E+00 +1.737335E+00 +7.647229E-02 +1.263465E-03 +4.009845E+00 +3.586955E+00 +3.173845E-02 +2.147512E-04 +7.868637E-02 +1.319968E-03 +2.761943E+00 +1.619005E+00 +7.846740E-02 +1.320872E-03 +4.097351E+00 +3.568014E+00 +3.295230E-02 +2.361898E-04 +8.169577E-02 +1.451740E-03 +2.855074E+00 +1.670686E+00 +7.845369E-02 +1.263464E-03 +4.103374E+00 +3.452249E+00 +3.220431E-02 +2.141592E-04 +7.984135E-02 +1.316329E-03 +2.690178E+00 +1.491926E+00 +7.527503E-02 +1.160972E-03 +3.903606E+00 +3.122977E+00 +3.125741E-02 +2.022968E-04 +7.749378E-02 +1.243417E-03 +2.512911E+00 +1.314036E+00 +7.800028E-02 +1.259212E-03 +3.791186E+00 +2.970061E+00 +3.426379E-02 +2.436930E-04 +8.494722E-02 +1.497858E-03 +2.273876E+00 +1.107297E+00 +7.120819E-02 +1.019386E-03 +3.428794E+00 +2.426375E+00 +3.139941E-02 +1.998412E-04 +7.784582E-02 +1.228323E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.416875E+00 +1.198797E+00 +7.051645E-02 +1.018987E-03 +3.608689E+00 +2.679252E+00 +3.004052E-02 +1.872854E-04 +7.447684E-02 +1.151149E-03 +2.573490E+00 +1.402205E+00 +6.633005E-02 +9.194585E-04 +3.559859E+00 +2.675099E+00 +2.604699E-02 +1.426679E-04 +6.457603E-02 +8.769077E-04 +2.701686E+00 +1.530274E+00 +7.570621E-02 +1.220650E-03 +3.972619E+00 +3.322266E+00 +3.152781E-02 +2.138949E-04 +7.816415E-02 +1.314704E-03 +2.920710E+00 +1.813750E+00 +8.167632E-02 +1.397805E-03 +4.220218E+00 +3.751891E+00 +3.388045E-02 +2.397875E-04 +8.399686E-02 +1.473853E-03 +2.886624E+00 +1.697663E+00 +8.812015E-02 +1.584550E-03 +4.350341E+00 +3.846411E+00 +3.842467E-02 +3.055861E-04 +9.526294E-02 +1.878284E-03 +2.805388E+00 +1.631826E+00 +9.017775E-02 +1.681160E-03 +4.264591E+00 +3.742270E+00 +4.026469E-02 +3.387007E-04 +9.982475E-02 +2.081823E-03 +2.789842E+00 +1.599838E+00 +9.325901E-02 +1.771117E-03 +4.331678E+00 +3.825425E+00 +4.241710E-02 +3.690107E-04 +1.051610E-01 +2.268123E-03 +2.406721E+00 +1.197504E+00 +7.197982E-02 +1.055123E-03 +3.523223E+00 +2.545571E+00 +3.093417E-02 +1.962555E-04 +7.669239E-02 +1.206284E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.670387E+00 +1.493829E+00 +7.916152E-02 +1.323249E-03 +3.980792E+00 +3.341124E+00 +3.398399E-02 +2.477152E-04 +8.425355E-02 +1.522581E-03 +2.643712E+00 +1.525085E+00 +7.477643E-02 +1.211244E-03 +3.829765E+00 +3.171826E+00 +3.119267E-02 +2.143333E-04 +7.733327E-02 +1.317399E-03 +2.775846E+00 +1.674648E+00 +8.464107E-02 +1.549143E-03 +4.133594E+00 +3.716316E+00 +3.679183E-02 +2.932382E-04 +9.121478E-02 +1.802388E-03 +2.954816E+00 +1.930285E+00 +7.887852E-02 +1.287632E-03 +4.192638E+00 +3.786782E+00 +3.177353E-02 +2.052824E-04 +7.877335E-02 +1.261768E-03 +3.031795E+00 +1.932684E+00 +9.082125E-02 +1.719186E-03 +4.462842E+00 +4.170125E+00 +3.909991E-02 +3.173523E-04 +9.693701E-02 +1.950605E-03 +2.773807E+00 +1.592371E+00 +8.755961E-02 +1.597915E-03 +4.234664E+00 +3.713430E+00 +3.882039E-02 +3.159470E-04 +9.624401E-02 +1.941967E-03 +2.528366E+00 +1.320356E+00 +8.486472E-02 +1.488520E-03 +3.935024E+00 +3.188413E+00 +3.866268E-02 +3.104697E-04 +9.585301E-02 +1.908301E-03 +2.814891E+00 +1.783998E+00 +7.956633E-02 +1.440608E-03 +4.087076E+00 +3.738124E+00 +3.321370E-02 +2.578118E-04 +8.234384E-02 +1.584639E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.360566E+00 +1.164965E+00 +7.582328E-02 +1.239719E-03 +3.614813E+00 +2.742787E+00 +3.388042E-02 +2.553121E-04 +8.399678E-02 +1.569275E-03 +2.546108E+00 +1.399288E+00 +7.762813E-02 +1.316168E-03 +3.859937E+00 +3.260243E+00 +3.384404E-02 +2.538541E-04 +8.390659E-02 +1.560314E-03 +3.332352E+00 +2.369626E+00 +8.799788E-02 +1.625343E-03 +4.655099E+00 +4.594468E+00 +3.514406E-02 +2.612097E-04 +8.712961E-02 +1.605525E-03 +2.601466E+00 +1.427019E+00 +7.052544E-02 +1.078356E-03 +3.725846E+00 +2.956429E+00 +2.871825E-02 +1.843049E-04 +7.119865E-02 +1.132829E-03 +2.954221E+00 +1.775439E+00 +8.854750E-02 +1.593113E-03 +4.427465E+00 +3.982350E+00 +3.824403E-02 +2.969669E-04 +9.481508E-02 +1.825306E-03 +2.855301E+00 +1.652640E+00 +8.473899E-02 +1.471257E-03 +4.218821E+00 +3.612250E+00 +3.633488E-02 +2.751925E-04 +9.008191E-02 +1.691470E-03 +2.632066E+00 +1.437779E+00 +7.298646E-02 +1.093885E-03 +3.785199E+00 +2.966958E+00 +3.009667E-02 +1.863207E-04 +7.461606E-02 +1.145219E-03 +2.629725E+00 +1.564381E+00 +8.162764E-02 +1.547184E-03 +3.953052E+00 +3.585289E+00 +3.581386E-02 +3.025695E-04 +8.879019E-02 +1.859742E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 tally 2: -2.410000E+00 -1.233100E+00 -2.410000E+00 -1.233100E+00 -8.400000E-01 -1.434000E-01 -8.400000E-01 -1.434000E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.262000E+01 -3.207480E+01 -1.262000E+01 -3.207480E+01 -6.000000E-02 -1.800000E-03 -6.000000E-02 -1.800000E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.220000E+00 -1.365100E+01 -8.220000E+00 -1.365100E+01 -9.000000E-02 -2.300000E-03 -9.000000E-02 -2.300000E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.430000E+00 -2.409500E+00 -3.430000E+00 -2.409500E+00 -4.000000E-02 -4.000000E-04 -4.000000E-02 -4.000000E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.450000E+00 -4.253000E-01 -1.450000E+00 -4.253000E-01 -7.000000E-02 -1.900000E-03 -7.000000E-02 -1.900000E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-02 -1.000000E-04 -1.000000E-02 -1.000000E-04 -1.570000E+00 -5.095000E-01 -1.570000E+00 -5.095000E-01 -9.000000E-02 -2.300000E-03 -9.000000E-02 -2.300000E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.000000E-02 -1.900000E-03 -9.000000E-02 -1.900000E-03 -2.010000E+00 -8.355000E-01 -2.010000E+00 -8.355000E-01 -1.000000E-02 -1.000000E-04 -1.000000E-02 -1.000000E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-02 -1.000000E-04 -1.000000E-02 -1.000000E-04 -2.000000E-02 -2.000000E-04 -2.000000E-02 -2.000000E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.000000E-02 -6.000000E-04 -4.000000E-02 -6.000000E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-02 -1.000000E-04 -1.000000E-02 -1.000000E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-02 -1.000000E-04 -1.000000E-02 -1.000000E-04 -1.000000E-02 -1.000000E-04 -1.000000E-02 -1.000000E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.000000E-02 -4.000000E-04 -4.000000E-02 -4.000000E-04 -5.000000E-02 -5.000000E-04 -5.000000E-02 -5.000000E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-02 -1.000000E-04 -1.000000E-02 -1.000000E-04 -7.000000E-02 -2.100000E-03 -7.000000E-02 -2.100000E-03 -1.000000E-01 -2.600000E-03 -1.000000E-01 -2.600000E-03 -8.000000E-02 -1.600000E-03 -8.000000E-02 -1.600000E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.600000E-01 -1.528000E-01 -8.600000E-01 -1.528000E-01 -1.800000E-01 -8.000000E-03 -1.800000E-01 -8.000000E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.600000E-01 -1.420000E-02 -2.600000E-01 -1.420000E-02 -1.600000E-01 -6.200000E-03 -1.600000E-01 -6.200000E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.000000E-02 -9.000000E-04 -5.000000E-02 -9.000000E-04 -1.200000E-01 -3.800000E-03 -1.200000E-01 -3.800000E-03 -2.000000E-02 -2.000000E-04 -2.000000E-02 -2.000000E-04 -1.000000E-02 -1.000000E-04 -1.000000E-02 -1.000000E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.000000E-02 -2.300000E-03 -9.000000E-02 -2.300000E-03 -1.500000E-01 -7.300000E-03 -1.500000E-01 -7.300000E-03 -3.000000E-02 -5.000000E-04 -3.000000E-02 -5.000000E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.400000E-01 -4.000000E-03 -1.400000E-01 -4.000000E-03 -1.000000E-01 -2.400000E-03 -1.000000E-01 -2.400000E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.000000E-02 -6.000000E-04 -4.000000E-02 -6.000000E-04 -1.140000E+00 -2.858000E-01 -1.140000E+00 -2.858000E-01 +4.012713E+01 +3.286443E+02 +4.014931E+01 +3.290078E+02 +5.982856E+00 +7.510508E+00 +5.983297E+00 +7.511618E+00 +1.223283E+02 +3.075680E+03 +1.223283E+02 +3.075680E+03 diff --git a/tests/test_mg_tallies/test_mg_tallies.py b/tests/test_mg_tallies/test_mg_tallies.py index a9b1860c59..c54fb4d32d 100644 --- a/tests/test_mg_tallies/test_mg_tallies.py +++ b/tests/test_mg_tallies/test_mg_tallies.py @@ -18,11 +18,9 @@ class MGTalliesTestHarness(PyAPITestHarness): # Instantiate some tally filters energy_filter = openmc.Filter(type='energy', - bins=[1E-11, 0.0635E-6, 10.0E-6, 1.0E-4, - 1.0E-3, 0.5, 1.0, 20.0]) + bins=[0.0, 20.0]) energyout_filter = openmc.Filter(type='energyout', - bins=[1E-11, 0.0635E-6, 10.0E-6, - 1.0E-4, 1.0E-3, 0.5, 1.0, 20.0]) + bins=[0.0, 20.0]) mesh_filter = openmc.Filter() mesh_filter.mesh = mesh From c532cc1189725e1aeb9067cb384880ca1a7f8698 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 20 Nov 2015 05:02:00 -0500 Subject: [PATCH 047/650] Fixed bug in mg tallying --- src/tally.F90 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/tally.F90 b/src/tally.F90 index 6b9ee4e277..96dc5b5837 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -2548,6 +2548,9 @@ contains else matching_bins(i) = p % last_g end if + ! Tallies are ordered in increasing groups, group indices + ! however are the opposite, so switch + matching_bins(i) = energy_groups - matching_bins(i) + 1 else ! make sure the correct energy is used if (t % estimator == ESTIMATOR_TRACKLENGTH) then @@ -2573,6 +2576,10 @@ contains if (t % energyout_matches_groups) then ! Since all groups are filters, the filter bin is the group matching_bins(i) = p % g + + ! Tallies are ordered in increasing groups, group indices + ! however are the opposite, so switch + matching_bins(i) = energy_groups - matching_bins(i) + 1 else ! determine outgoing energy bin n = t % filters(i) % n_bins From 72518ee07dbac5f0956876afaa2c0fa69cc80a06 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 21 Nov 2015 13:24:33 -0500 Subject: [PATCH 048/650] Fixed my merge issue. Thats what I get for doing a git conflict resolution during the PSU-UM football game. --- openmc/settings.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/openmc/settings.py b/openmc/settings.py index 7339a2e90d..a637816773 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -953,6 +953,16 @@ class SettingsFile(object): subelement = ET.SubElement(element, key) subelement.text = str(self._keff_trigger[key]).lower() + def _create_energy_mode_subelement(self): + if self._energy_mode is not None: + element = ET.SubElement(self._settings_file, "energy_mode") + element.text = str(self._energy_mode) + + def _create_max_order_subelement(self): + if self._max_order is not None: + element = ET.SubElement(self._settings_file, "max_order") + element.text = str(self._max_order) + def _create_source_subelement(self): self._create_source_space_subelement() self._create_source_energy_subelement() From 3381e8bd277f12dc7922a6b6007ff919ecdc0e3c Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Tue, 24 Nov 2015 08:13:39 -0500 Subject: [PATCH 049/650] Moved some more methods from string to simple_string since they dont depend on global --- src/simple_string.F90 | 70 +++++++++++++++++++++++++++++++++++- src/string.F90 | 82 ++++--------------------------------------- 2 files changed, 76 insertions(+), 76 deletions(-) diff --git a/src/simple_string.F90 b/src/simple_string.F90 index 478a755562..65eb58ac0b 100644 --- a/src/simple_string.F90 +++ b/src/simple_string.F90 @@ -1,6 +1,6 @@ module simple_string - use constants, only: ERROR_REAL, ERROR_INT + use constants, only: ERROR_REAL, ERROR_INT, MAX_LINE_LEN implicit none @@ -237,4 +237,72 @@ contains end function real_to_str +!=============================================================================== +! STR_TO_INT converts a string to an integer. +!=============================================================================== + + pure function str_to_int(str) result(num) + + character(*), intent(in) :: str + integer(8) :: num + + character(5) :: fmt + integer :: w + integer :: ioError + + ! Determine width of string + w = len_trim(str) + + ! Create format specifier for reading string + write(UNIT=fmt, FMT='("(I",I2,")")') w + + ! read string into integer + read(UNIT=str, FMT=fmt, IOSTAT=ioError) num + if (ioError > 0) num = ERROR_INT + + end function str_to_int + +!=============================================================================== +! STR_TO_REAL converts an arbitrary string to a real(8) +!=============================================================================== + + pure function str_to_real(string) result(num) + + character(*), intent(in) :: string + real(8) :: num + + integer :: ioError + + ! Read string + read(UNIT=string, FMT=*, IOSTAT=ioError) num + if (ioError > 0) num = ERROR_REAL + + end function str_to_real + +!=============================================================================== +! CONCATENATE takes an array of words and concatenates them together in one +! string with a single space between words +! +! Arguments: +! words = array of words +! n_words = total number of words +! string = concatenated string +!=============================================================================== + + pure function concatenate(words, n_words) result(string) + + integer, intent(in) :: n_words + character(*), intent(in) :: words(n_words) + character(MAX_LINE_LEN) :: string + + integer :: i ! index + + string = words(1) + if (n_words == 1) return + do i = 2, n_words + string = trim(string) // ' ' // words(i) + end do + + end function concatenate + end module simple_string \ No newline at end of file diff --git a/src/string.F90 b/src/string.F90 index 5822895979..eee49242d2 100644 --- a/src/string.F90 +++ b/src/string.F90 @@ -1,11 +1,12 @@ module string - use constants, only: MAX_WORDS, MAX_LINE_LEN, ERROR_INT, ERROR_REAL, & - OP_LEFT_PAREN, OP_RIGHT_PAREN, OP_COMPLEMENT, & - OP_INTERSECTION, OP_UNION - use error, only: fatal_error, warning - use global, only: master - use stl_vector, only: VectorInt + use constants, only: MAX_WORDS, MAX_LINE_LEN, ERROR_INT, ERROR_REAL, & + OP_LEFT_PAREN, OP_RIGHT_PAREN, OP_COMPLEMENT, & + OP_INTERSECTION, OP_UNION + use error, only: fatal_error, warning + use global, only: master + use simple_string, only: str_to_int, str_to_real + use stl_vector, only: VectorInt implicit none @@ -152,33 +153,6 @@ contains end if end subroutine tokenize -!=============================================================================== -! CONCATENATE takes an array of words and concatenates them together in one -! string with a single space between words -! -! Arguments: -! words = array of words -! n_words = total number of words -! string = concatenated string -!=============================================================================== - - pure function concatenate(words, n_words) result(string) - - integer, intent(in) :: n_words - character(*), intent(in) :: words(n_words) - character(MAX_LINE_LEN) :: string - - integer :: i ! index - - string = words(1) - if (n_words == 1) return - do i = 2, n_words - string = trim(string) // ' ' // words(i) - end do - - end function concatenate - - !=============================================================================== ! ZERO_PADDED returns a string of the input integer padded with zeros to the @@ -213,46 +187,4 @@ contains write(str, zp_form) num end function zero_padded -!=============================================================================== -! STR_TO_INT converts a string to an integer. -!=============================================================================== - - pure function str_to_int(str) result(num) - - character(*), intent(in) :: str - integer(8) :: num - - character(5) :: fmt - integer :: w - integer :: ioError - - ! Determine width of string - w = len_trim(str) - - ! Create format specifier for reading string - write(UNIT=fmt, FMT='("(I",I2,")")') w - - ! read string into integer - read(UNIT=str, FMT=fmt, IOSTAT=ioError) num - if (ioError > 0) num = ERROR_INT - - end function str_to_int - -!=============================================================================== -! STR_TO_REAL converts an arbitrary string to a real(8) -!=============================================================================== - - pure function str_to_real(string) result(num) - - character(*), intent(in) :: string - real(8) :: num - - integer :: ioError - - ! Read string - read(UNIT=string, FMT=*, IOSTAT=ioError) num - if (ioError > 0) num = ERROR_REAL - - end function str_to_real - end module string From 42d2673ab9c891c59f21d4f38d6afbf2267aefd9 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 25 Nov 2015 05:58:49 -0500 Subject: [PATCH 050/650] Made fission data optional in the MGXS library since it is not needed for tracking, only tallying. --- docs/source/usersguide/mgxs_library.rst | 3 +- src/macroxs.F90 | 2 - src/macroxs_header.F90 | 29 +++++--- src/mgxs_data.F90 | 93 +++++++++++++++---------- src/tally.F90 | 8 ++- 5 files changed, 82 insertions(+), 53 deletions(-) diff --git a/docs/source/usersguide/mgxs_library.rst b/docs/source/usersguide/mgxs_library.rst index f145f3bd0a..ab6be5cc38 100644 --- a/docs/source/usersguide/mgxs_library.rst +++ b/docs/source/usersguide/mgxs_library.rst @@ -244,7 +244,8 @@ attributes/sub-elements required to describe the meta-data: with the inner-dimension being groups, intermediate-dimension being azimuthal angles and outer-dimension being the polar angles. - *Default*: None, this must be provided if the material is fissionable. + *Default*: None, this is required only if ``fission`` tallies are + requested and the material is fissionable. :k_fission: This element requires the group-wise kappa-fission cross section ordered by diff --git a/src/macroxs.F90 b/src/macroxs.F90 index 4dafd32c1b..c26e9e888b 100644 --- a/src/macroxs.F90 +++ b/src/macroxs.F90 @@ -32,7 +32,6 @@ contains xs % total = this % total(gin) xs % elastic = this % scattxs(gin) xs % absorption = this % absorption(gin) - xs % fission = this % fission(gin) xs % nu_fission = this % nu_fission(gin) type is (MacroXS_Angle) @@ -40,7 +39,6 @@ contains xs % total = this % total(gin, iazi, ipol) xs % elastic = this % scattxs(gin, iazi, ipol) xs % absorption = this % absorption(gin, iazi, ipol) - xs % fission = this % fission(gin, iazi, ipol) xs % nu_fission = this % nu_fission(gin, iazi, ipol) end select diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index b2d9a5fde6..95b61f695d 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -26,7 +26,7 @@ module macroxs_header end type MacroXS_Base abstract interface - subroutine macroxs_init_(this, mat, nuclides, groups, get_kfiss, & + subroutine macroxs_init_(this, mat, nuclides, groups, get_kfiss, get_fiss, & max_order, scatt_type, legendre_mu_points, & error_code, error_text) @@ -39,6 +39,7 @@ module macroxs_header type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from integer, intent(in) :: groups ! Number of E groups logical, intent(in) :: get_kfiss ! Should we get kfiss data? + logical, intent(in) :: get_fiss ! Should we get fiss data? integer, intent(in) :: max_order ! Maximum requested order integer, intent(in) :: scatt_type ! Legendre or Tabular Scatt? integer, intent(in) :: legendre_mu_points ! Treat as Leg or Tabular? @@ -119,7 +120,7 @@ contains ! MACROXS*_INIT sets the MacroXS Data !=============================================================================== - subroutine macroxs_iso_init(this, mat, nuclides, groups, get_kfiss, & + subroutine macroxs_iso_init(this, mat, nuclides, groups, get_kfiss, get_fiss, & max_order, scatt_type, legendre_mu_points, error_code, error_text) class(MacroXS_Iso), intent(inout) :: this ! The MacroXS to initialize @@ -127,6 +128,7 @@ contains type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from integer, intent(in) :: groups ! Number of E groups logical, intent(in) :: get_kfiss ! Should we get kfiss data? + logical, intent(in) :: get_fiss ! Should we get fiss data? integer, intent(in) :: max_order ! Maximum requested order integer, intent(in) :: scatt_type ! How is data presented integer, intent(in) :: legendre_mu_points ! Treat as Leg or Tabular? @@ -215,8 +217,10 @@ contains this % total = ZERO allocate(this % absorption(groups)) this % absorption = ZERO - allocate(this % fission(groups)) - this % fission = ZERO + if (get_fiss) then + allocate(this % fission(groups)) + this % fission = ZERO + end if if (get_kfiss) then allocate(this % k_fission(groups)) this % k_fission = ZERO @@ -261,7 +265,9 @@ contains sum(nuc % nu_fission(:,gin)) end do end if - this % fission = this % fission + atom_density * nuc % fission + if (get_fiss) then + this % fission = this % fission + atom_density * nuc % fission + end if if (get_kfiss) then this % k_fission = this % k_fission + atom_density * nuc % k_fission end if @@ -359,7 +365,7 @@ contains end subroutine macroxs_iso_init - subroutine macroxs_angle_init(this, mat, nuclides, groups, get_kfiss, & + subroutine macroxs_angle_init(this, mat, nuclides, groups, get_kfiss, get_fiss, & max_order, scatt_type, legendre_mu_points, error_code, error_text) class(MacroXS_Angle), intent(inout) :: this ! The MacroXS to initialize @@ -367,6 +373,7 @@ contains type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from integer, intent(in) :: groups ! Number of E groups logical, intent(in) :: get_kfiss ! Should we get kfiss data? + logical, intent(in) :: get_fiss ! Should we get fiss data? integer, intent(in) :: max_order ! Maximum requested order integer, intent(in) :: scatt_type ! Legendre or Tabular Scatt? integer, intent(in) :: legendre_mu_points ! Treat as Leg or Tabular? @@ -493,8 +500,10 @@ contains this % total = ZERO allocate(this % absorption(groups,nazi,npol)) this % absorption = ZERO - allocate(this % fission(groups,nazi,npol)) - this % fission = ZERO + if (get_fiss) then + allocate(this % fission(groups,nazi,npol)) + this % fission = ZERO + end if if (get_kfiss) then allocate(this % k_fission(groups,nazi,npol)) this % k_fission = ZERO @@ -542,7 +551,9 @@ contains sum(nuc % nu_fission(:,gin,:,:),dim=1) end do end if - this % fission = this % fission + atom_density * nuc % fission + if (get_fiss) then + this % fission = this % fission + atom_density * nuc % fission + end if if (get_kfiss) then this % k_fission = this % k_fission + atom_density * nuc % k_fission end if diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 345c6a95d0..d568ab7b55 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -37,7 +37,7 @@ contains logical :: file_exists integer :: error_code character(MAX_LINE_LEN) :: error_text, temp_str - logical :: get_kfiss + logical :: get_kfiss, get_fiss integer :: l ! Check if cross_sections.xml exists @@ -63,16 +63,20 @@ contains allocate(micro_xs(n_nuclides_total)) !$omp end parallel - ! Find out if we need kappa fission (are there any k_fiss tallies?) + ! Find out if we need fission & kappa fission + ! (i.e., are there any SCORE_FISSION or SCORE_KAPPA_FISSION tallies?) get_kfiss = .false. + get_fiss = .false. do i = 1, n_tallies do l = 1, tallies(i) % n_score_bins if (tallies(i) % score_bins(l) == SCORE_KAPPA_FISSION) then get_kfiss = .true. - exit + end if + if (tallies(i) % score_bins(l) == SCORE_FISSION) then + get_fiss = .true. end if end do - if (get_kfiss) & + if (get_kfiss .and. get_fiss) & exit end do @@ -123,7 +127,7 @@ contains ! Now read in the data specific to the type we just declared call nuclide_mg_init(nuclides_MG(i_nuclide) % obj, node_xsdata, & - energy_groups, get_kfiss, error_code, & + energy_groups, get_kfiss, get_fiss, error_code, & error_text) ! Keep track of what listing is associated with this nuclide @@ -191,12 +195,13 @@ contains ! NUCLIDE_*_INIT reads in the data from the XML file, as already accessed !=============================================================================== - subroutine nuclide_mg_init(this, node_xsdata, groups, get_kfiss, & + subroutine nuclide_mg_init(this, node_xsdata, groups, get_kfiss, get_fiss, & error_code, error_text) class(Nuclide_MG), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml integer, intent(in) :: groups ! Number of Energy groups logical, intent(in) :: get_kfiss ! Need Kappa-Fission? + logical, intent(in) :: get_fiss ! Should we get fiss data? integer, intent(inout) :: error_code ! Code signifying error character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print @@ -293,21 +298,22 @@ contains select type(this) type is (Nuclide_Iso) - call nuclide_iso_init(this, node_xsdata, groups, get_kfiss, & + call nuclide_iso_init(this, node_xsdata, groups, get_kfiss, get_fiss, & error_code, error_text) type is (Nuclide_Angle) - call nuclide_angle_init(this, node_xsdata, groups, get_kfiss, & + call nuclide_angle_init(this, node_xsdata, groups, get_kfiss, get_fiss, & error_code, error_text) end select end subroutine nuclide_mg_init - subroutine nuclide_iso_init(this, node_xsdata, groups, get_kfiss, & + subroutine nuclide_iso_init(this, node_xsdata, groups, get_kfiss, get_fiss, & error_code, error_text) class(Nuclide_Iso), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml integer, intent(in) :: groups ! Number of Energy groups logical, intent(in) :: get_kfiss ! Need Kappa-Fission? + logical, intent(in) :: get_fiss ! Need fiss data? integer, intent(inout) :: error_code ! Code signifying error character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print @@ -317,7 +323,6 @@ contains ! Load the more specific data if (this % fissionable) then - allocate(this % fission(groups)) if (check_for_node(node_xsdata, "chi")) then ! Get chi @@ -352,12 +357,16 @@ contains return end if end if - if (check_for_node(node_xsdata, "fission")) then - call get_node_array(node_xsdata, "fission", this % fission) - else - error_code = 1 - error_text = "If fissionable, must provide fission!" - return + if (get_fiss) then + allocate(this % fission(groups)) + if (check_for_node(node_xsdata, "fission")) then + call get_node_array(node_xsdata, "fission", this % fission) + else + error_code = 1 + error_text = "Fission data missing, required due to fission& + & tallies in tallies.xml file!" + return + end if end if if (get_kfiss) then allocate(this % k_fission(groups)) @@ -429,13 +438,14 @@ contains end subroutine nuclide_iso_init - subroutine nuclide_angle_init(this, node_xsdata, groups, get_kfiss, & + subroutine nuclide_angle_init(this, node_xsdata, groups, get_kfiss, get_fiss, & error_code, error_text) class(Nuclide_Angle), intent(inout) :: this ! Working Object - type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml - integer, intent(in) :: groups ! Number of Energy groups - logical, intent(in) :: get_kfiss ! Need Kappa-Fission? - integer, intent(inout) :: error_code ! Code signifying error + type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml + integer, intent(in) :: groups ! Number of Energy groups + logical, intent(in) :: get_kfiss ! Need Kappa-Fission? + logical, intent(in) :: get_fiss ! Should we get fiss data? + integer, intent(inout) :: error_code ! Code signifying error character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print real(8), allocatable :: temp_arr(:) @@ -535,16 +545,19 @@ contains return end if end if - if (check_for_node(node_xsdata, "fission")) then - allocate(temp_arr(groups * this % Nazi * this % Npol)) - call get_node_array(node_xsdata, "fission", temp_arr) - allocate(this % fission(groups, this % Nazi, this % Npol)) - this % fission = reshape(temp_arr, (/groups, this % Nazi, this % Npol/)) - deallocate(temp_arr) - else - error_code = 1 - error_text = "If fissionable, must provide fission!" - return + if (get_fiss) then + if (check_for_node(node_xsdata, "fission")) then + allocate(temp_arr(groups * this % Nazi * this % Npol)) + call get_node_array(node_xsdata, "fission", temp_arr) + allocate(this % fission(groups, this % Nazi, this % Npol)) + this % fission = reshape(temp_arr, (/groups, this % Nazi, this % Npol/)) + deallocate(temp_arr) + else + error_code = 1 + error_text = "Fission data missing, required due to kappa-fission& + & tallies in tallies.xml file!" + return + end if end if if (get_kfiss) then if (check_for_node(node_xsdata, "k_fission")) then @@ -627,23 +640,27 @@ contains integer :: i ! loop index over nuclides integer :: l ! Loop over score bins type(Material), pointer :: mat ! current material - logical :: get_kfiss + logical :: get_kfiss, get_fiss integer :: error_code character(MAX_LINE_LEN) :: error_text integer :: representation integer :: scatt_type integer :: legendre_mu_points - ! Find out if we need kappa fission (are there any k_fiss tallies?) + ! Find out if we need fission & kappa fission + ! (i.e., are there any SCORE_FISSION or SCORE_KAPPA_FISSION tallies?) get_kfiss = .false. + get_fiss = .false. do i = 1, n_tallies do l = 1, tallies(i) % n_score_bins if (tallies(i) % score_bins(l) == SCORE_KAPPA_FISSION) then get_kfiss = .true. - exit + end if + if (tallies(i) % score_bins(l) == SCORE_FISSION) then + get_fiss = .true. end if end do - if (get_kfiss) & + if (get_kfiss .and. get_fiss) & exit end do @@ -675,9 +692,9 @@ contains end select call macro_xs(i_mat) % obj % init(mat, nuclides_MG, energy_groups, & - get_kfiss, max_order, scatt_type, & - legendre_mu_points, error_code, & - error_text) + get_kfiss, get_fiss, max_order, & + scatt_type, legendre_mu_points, & + error_code, error_text) ! Handle any errors if (error_code /= 0) then call fatal_error(trim(error_text)) diff --git a/src/tally.F90 b/src/tally.F90 index 31260f16a4..85a603419b 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -1114,7 +1114,9 @@ contains atom_density * flux end associate else - score = material_xs % fission * flux + score = flux * macro_xs(p % material) % obj % get_xs(p % g, & + 'fission', UVW=p % coord(i) % uvw) + end if end if @@ -1205,8 +1207,8 @@ contains * atom_density * flux end associate else - score = macro_xs(p % material) % obj % get_xs(p % g, 'k_fission', & - UVW=p % coord(i) % uvw) + score = flux * macro_xs(p % material) % obj % get_xs(p % g, & + 'k_fission', UVW=p % coord(i) % uvw) end if end if From ca602e8b97c1a34f92b86b3fc4c9dd50bc2fe079 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 25 Nov 2015 09:50:56 -0500 Subject: [PATCH 051/650] Fixed poor deallocation. :-( 6am coding == bugs. --- src/macroxs_header.F90 | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index 95b61f695d..63e6fecaed 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -667,7 +667,11 @@ contains if (allocated(this % total)) then deallocate(this % total, this % absorption, & - this % nu_fission, this % fission) + this % nu_fission) + end if + + if (allocated(this % fission)) then + deallocate(this % fission) end if if (allocated(this % k_fission)) then @@ -689,7 +693,11 @@ contains if (allocated(this % total)) then deallocate(this % total, this % absorption, & - this % nu_fission, this % fission) + this % nu_fission) + end if + + if (allocated(this % fission)) then + deallocate(this % fission) end if if (allocated(this % k_fission)) then From 0911de76eb6ac6d8fded05b26cce1a343aac0a50 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 28 Nov 2015 20:18:13 -0500 Subject: [PATCH 052/650] Added MGXS support for void materials --- src/tracking.F90 | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/tracking.F90 b/src/tracking.F90 index 028ec3ee6c..24ade265be 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -91,8 +91,15 @@ contains else ! Since the MGXS can be angle dependent, this needs to be done ! After every collision for the MGXS mode - call calculate_mgxs(macro_xs(p % material) % obj, p % g, & - p % coord(p % n_coord) % uvw, material_xs) + if (p % material /= MATERIAL_VOID) then + call calculate_mgxs(macro_xs(p % material) % obj, p % g, & + p % coord(p % n_coord) % uvw, material_xs) + else + material_xs % total = ZERO + material_xs % elastic = ZERO + material_xs % absorption = ZERO + material_xs % nu_fission = ZERO + end if end if ! Find the distance to the nearest boundary From 42f438dcabeedc19a07b97bca5c97d7a7a3fe069 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Mon, 7 Dec 2015 22:06:56 -0500 Subject: [PATCH 053/650] shortened and fixed _align_tally_data routine --- openmc/tallies.py | 80 ++++++++++------------------------------------- 1 file changed, 17 insertions(+), 63 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index 13a219dedd..ba5d19dfde 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1625,6 +1625,10 @@ class Tally(object): other_mean = copy.deepcopy(other.mean) other_std_dev = copy.deepcopy(other.std_dev) + # Initialize list of tile and repeat factors + repeat_factors = [1, 1, 1] + tile_factors = [1, 1, 1] + if self.filters != other.filters: # Determine the number of paired combinations of filter bins @@ -1634,83 +1638,33 @@ class Tally(object): # Determine the factors by which each tally operands' data arrays # must be tiled or repeated for the tally outer product - other_tile_factor = 1 - self_repeat_factor = 1 for filter in diff1: - other_tile_factor *= filter.num_bins + tile_factors[0] *= filter.num_bins for filter in diff2: - self_repeat_factor *= filter.num_bins - - # Tile / repeat the tally data for the tally outer product - self_shape = list(self_mean.shape) - other_shape = list(other_mean.shape) - self_shape[0] *= self_repeat_factor - self_mean = np.repeat(self_mean, self_repeat_factor) - self_std_dev = np.repeat(self_std_dev, self_repeat_factor) - - if self_repeat_factor == 1: - other_shape[0] *= other_tile_factor - other_mean = np.repeat(other_mean, other_tile_factor, axis=0) - other_std_dev = np.repeat(other_std_dev, other_tile_factor, - axis=0) - else: - other_mean = np.tile(other_mean, (other_tile_factor, 1, 1)) - other_std_dev = np.tile(other_std_dev, (other_tile_factor, 1, 1)) - - # NumPy repeat and tile routines return 1D flattened arrays - # Reshape arrays as 3D with filters, nuclides and scores axes - self_mean.shape = tuple(self_shape) - self_std_dev.shape = tuple(self_shape) - other_mean.shape = tuple(other_shape) - other_std_dev.shape = tuple(other_shape) + repeat_factors[0] *= filter.num_bins if self.nuclides != other.nuclides: # Determine the number of paired combinations of nuclides # between the two tallies and repeat arrays along nuclide axes - self_repeat_factor = other.num_nuclides - other_tile_factor = self.num_nuclides - - # Tile / repeat the tally data for the tally outer product - self_shape = list(self_mean.shape) - other_shape = list(other_mean.shape) - self_shape[1] *= self_repeat_factor - other_shape[1] *= other_tile_factor - self_mean = np.repeat(self_mean, self_repeat_factor, axis=1) - other_mean = np.tile(other_mean, (1, other_tile_factor, 1)) - self_std_dev = np.repeat(self_std_dev, self_repeat_factor, axis=1) - other_std_dev = np.tile(other_std_dev, (1, other_tile_factor, 1)) - - # NumPy repeat and tile routines return 1D flattened arrays - # Reshape arrays as 3D with filters, nuclides and scores axes - self_mean.shape = tuple(self_shape) - self_std_dev.shape = tuple(self_shape) - other_mean.shape = tuple(other_shape) - other_std_dev.shape = tuple(other_shape) + repeat_factors[1] = other.num_nuclides + tile_factors[1] = self.num_nuclides if self.scores != other.scores: # Determine the number of paired combinations of score bins # between the two tallies and repeat arrays along score axes - self_repeat_factor = other.num_score_bins - other_tile_factor = self.num_score_bins + repeat_factors[2] = other.num_score_bins + tile_factors[2] = self.num_score_bins - # Tile / repeat the tally data for the tally outer product - self_shape = list(self_mean.shape) - other_shape = list(other_mean.shape) - self_shape[2] *= self_repeat_factor - other_shape[2] *= other_tile_factor - self_mean = np.repeat(self_mean, self_repeat_factor, axis=2) - other_mean = np.tile(other_mean, (1, 1, other_tile_factor)) - self_std_dev = np.repeat(self_std_dev, self_repeat_factor, axis=2) - other_std_dev = np.tile(other_std_dev, (1, 1, other_tile_factor)) + # Repeat the self tally + for i in range(3): + self_mean = np.repeat(self_mean, repeat_factors[i], axis=i) + self_std_dev = np.repeat(self_std_dev, repeat_factors[i], axis=i) - # NumPy repeat and tile routines return 1D flattened arrays - # Reshape arrays as 3D with filters, nuclides and scores axes - self_mean.shape = tuple(self_shape) - self_std_dev.shape = tuple(self_shape) - other_mean.shape = tuple(other_shape) - other_std_dev.shape = tuple(other_shape) + # Tile the other tally + other_mean = np.tile(other_mean, tile_factors) + other_std_dev = np.tile(other_std_dev, tile_factors) data = {} data['self'] = {} From b17a8e07e3ae085653b4c57ff2bee6e941dc28e0 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Tue, 8 Dec 2015 13:19:02 -0500 Subject: [PATCH 054/650] added test for tally arithmetic --- tests/test_tally_arithmetic/geometry.xml | 8 ++ tests/test_tally_arithmetic/materials.xml | 11 +++ tests/test_tally_arithmetic/results_true.dat | 49 ++++++++++ tests/test_tally_arithmetic/settings.xml | 18 ++++ .../test_tally_arithmetic.py | 91 +++++++++++++++++++ 5 files changed, 177 insertions(+) create mode 100644 tests/test_tally_arithmetic/geometry.xml create mode 100644 tests/test_tally_arithmetic/materials.xml create mode 100644 tests/test_tally_arithmetic/results_true.dat create mode 100644 tests/test_tally_arithmetic/settings.xml create mode 100644 tests/test_tally_arithmetic/test_tally_arithmetic.py diff --git a/tests/test_tally_arithmetic/geometry.xml b/tests/test_tally_arithmetic/geometry.xml new file mode 100644 index 0000000000..bc56030e18 --- /dev/null +++ b/tests/test_tally_arithmetic/geometry.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/tests/test_tally_arithmetic/materials.xml b/tests/test_tally_arithmetic/materials.xml new file mode 100644 index 0000000000..e7947a92da --- /dev/null +++ b/tests/test_tally_arithmetic/materials.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/tests/test_tally_arithmetic/results_true.dat b/tests/test_tally_arithmetic/results_true.dat new file mode 100644 index 0000000000..85183e3e8f --- /dev/null +++ b/tests/test_tally_arithmetic/results_true.dat @@ -0,0 +1,49 @@ +Tally + ID = 10000 + Name = (tally 1 + tally 2) + Filters = + energy [ 0. 20.] + (cell + material) (array([1]), array([1])) + Nuclides = (U-235 + U-235) (U-235 + Pu-239) (U-238 + U-235) (U-238 + Pu-239) + Scores = [(fission + fission), (fission + absorption), (nu-fission + fission), (nu-fission + absorption)] + Estimator = tracklength +[[[ 0.07510122 0.07839105 0.13713377 0.1404236 ] + [ 0.0916553 0.09321683 0.15368785 0.15524938] + [ 0.04596277 0.0492526 0.06126275 0.06455259] + [ 0.06251685 0.06407838 0.07781683 0.07937836]]]Tally + ID = 10001 + Name = (tally 1 - tally 2) + Filters = + energy [ 0. 20.] + (cell - material) (array([1]), array([1])) + Nuclides = (U-235 - U-235) (U-235 - Pu-239) (U-238 - U-235) (U-238 - Pu-239) + Scores = [(fission - fission), (fission - absorption), (nu-fission - fission), (nu-fission - absorption)] + Estimator = tracklength +[[[ 0. -0.00328983 0.06203255 0.05874271] + [-0.01655408 -0.01811561 0.04547847 0.04391694] + [-0.02913845 -0.03242829 -0.01383847 -0.0171283 ] + [-0.04569253 -0.04725406 -0.03039255 -0.03195408]]]Tally + ID = 10002 + Name = (tally 1 * tally 2) + Filters = + energy [ 0. 20.] + (cell * material) (array([1]), array([1])) + Nuclides = (U-235 * U-235) (U-235 * Pu-239) (U-238 * U-235) (U-238 * Pu-239) + Scores = [(fission * fission), (fission * absorption), (nu-fission * fission), (nu-fission * absorption)] + Estimator = tracklength +[[[ 0.00141005 0.00153358 0.00373941 0.00406702] + [ 0.00203166 0.0020903 0.00538792 0.00554342] + [ 0.00031588 0.00034356 0.00089041 0.00096841] + [ 0.00045514 0.00046827 0.00128294 0.00131997]]]Tally + ID = 10003 + Name = (tally 1 / tally 2) + Filters = + energy [ 0. 20.] + (cell / material) (array([1]), array([1])) + Nuclides = (U-235 / U-235) (U-235 / Pu-239) (U-238 / U-235) (U-238 / Pu-239) + Scores = [(fission / fission), (fission / absorption), (nu-fission / fission), (nu-fission / absorption)] + Estimator = tracklength +[[[ 1. 0.91944666 2.65197177 2.4383466 ] + [ 0.69403611 0.67456727 1.84056418 1.78893335] + [ 0.22402189 0.20597618 0.63147153 0.58060439] + [ 0.15547928 0.15111784 0.43826405 0.42597002]]] \ No newline at end of file diff --git a/tests/test_tally_arithmetic/settings.xml b/tests/test_tally_arithmetic/settings.xml new file mode 100644 index 0000000000..a69dde686a --- /dev/null +++ b/tests/test_tally_arithmetic/settings.xml @@ -0,0 +1,18 @@ + + + + + 10 + 5 + 1000 + + + + + -4 -4 -4 4 4 4 + + + + + + diff --git a/tests/test_tally_arithmetic/test_tally_arithmetic.py b/tests/test_tally_arithmetic/test_tally_arithmetic.py new file mode 100644 index 0000000000..ee1a7a6481 --- /dev/null +++ b/tests/test_tally_arithmetic/test_tally_arithmetic.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python + +import os +import sys +import glob +import hashlib +sys.path.insert(0, os.pardir) +from testing_harness import TestHarness +import openmc + + +class TallyArithmeticTestHarness(TestHarness): + def _build_inputs(self): + + u235 = openmc.Nuclide('U-235') + u238 = openmc.Nuclide('U-238') + pu239 = openmc.Nuclide('Pu-239') + + # Instantiate energy filter + energy_filter = openmc.Filter(type='energy', bins=[0., 20.]) + + # Create tallies + tally_1 = openmc.Tally(name='tally 1') + tally_1.add_filter(openmc.Filter(type='cell', bins=[1])) + tally_1.add_filter(energy_filter) + tally_1.add_score('fission') + tally_1.add_score('nu-fission') + tally_1.add_nuclide(u235) + tally_1.add_nuclide(u238) + + tally_2 = openmc.Tally(name='tally 2') + tally_2.add_filter(openmc.Filter(type='material', bins=[1])) + tally_2.add_filter(energy_filter) + tally_2.add_score('fission') + tally_2.add_score('absorption') + tally_2.add_nuclide(u235) + tally_2.add_nuclide(pu239) + + # Export tallies to file + tallies_file = openmc.TalliesFile() + tallies_file.add_tally(tally_1) + tallies_file.add_tally(tally_2) + tallies_file.export_to_xml() + + def _get_results(self, hash_output=False): + """Digest info in the statepoint and return as a string.""" + + # Read the statepoint file. + statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] + sp = openmc.StatePoint(statepoint) + + # Read the summary file. + summary = glob.glob(os.path.join(os.getcwd(), 'summary.h5'))[0] + su = openmc.Summary(summary) + sp.link_with_summary(su) + + # Load the tallies + tally_1 = sp.get_tally(name='tally 1') + tally_2 = sp.get_tally(name='tally 2') + + # Perform all the tally arithmetic operations and output results + outstr = '' + tally_3 = tally_1 + tally_2 + outstr += tally_3.__repr__() + outstr += str(tally_3.mean) + + tally_3 = tally_1 - tally_2 + outstr += tally_3.__repr__() + outstr += str(tally_3.mean) + + tally_3 = tally_1 * tally_2 + outstr += tally_3.__repr__() + outstr += str(tally_3.mean) + + tally_3 = tally_1 / tally_2 + outstr += tally_3.__repr__() + outstr += str(tally_3.mean) + + print(outstr) + + # Hash the results if necessary + if hash_output: + sha512 = hashlib.sha512() + sha512.update(outstr.encode('utf-8')) + outstr = sha512.hexdigest() + + return outstr + +if __name__ == '__main__': + harness = TallyArithmeticTestHarness('statepoint.10.*', True) + harness.main() From b81fa69db3907d129163eff8a6b83dc8d7b38761 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Tue, 8 Dec 2015 13:27:45 -0500 Subject: [PATCH 055/650] added tallies.xml file to tally arithmetic test --- tests/test_tally_arithmetic/tallies.xml | 15 +++++++++ .../test_tally_arithmetic.py | 32 ------------------- 2 files changed, 15 insertions(+), 32 deletions(-) create mode 100644 tests/test_tally_arithmetic/tallies.xml diff --git a/tests/test_tally_arithmetic/tallies.xml b/tests/test_tally_arithmetic/tallies.xml new file mode 100644 index 0000000000..2a2eb48361 --- /dev/null +++ b/tests/test_tally_arithmetic/tallies.xml @@ -0,0 +1,15 @@ + + + + + + U-235 U-238 + fission nu-fission + + + + + U-235 Pu-239 + fission absorption + + diff --git a/tests/test_tally_arithmetic/test_tally_arithmetic.py b/tests/test_tally_arithmetic/test_tally_arithmetic.py index ee1a7a6481..f71c960e92 100644 --- a/tests/test_tally_arithmetic/test_tally_arithmetic.py +++ b/tests/test_tally_arithmetic/test_tally_arithmetic.py @@ -10,38 +10,6 @@ import openmc class TallyArithmeticTestHarness(TestHarness): - def _build_inputs(self): - - u235 = openmc.Nuclide('U-235') - u238 = openmc.Nuclide('U-238') - pu239 = openmc.Nuclide('Pu-239') - - # Instantiate energy filter - energy_filter = openmc.Filter(type='energy', bins=[0., 20.]) - - # Create tallies - tally_1 = openmc.Tally(name='tally 1') - tally_1.add_filter(openmc.Filter(type='cell', bins=[1])) - tally_1.add_filter(energy_filter) - tally_1.add_score('fission') - tally_1.add_score('nu-fission') - tally_1.add_nuclide(u235) - tally_1.add_nuclide(u238) - - tally_2 = openmc.Tally(name='tally 2') - tally_2.add_filter(openmc.Filter(type='material', bins=[1])) - tally_2.add_filter(energy_filter) - tally_2.add_score('fission') - tally_2.add_score('absorption') - tally_2.add_nuclide(u235) - tally_2.add_nuclide(pu239) - - # Export tallies to file - tallies_file = openmc.TalliesFile() - tallies_file.add_tally(tally_1) - tallies_file.add_tally(tally_2) - tallies_file.export_to_xml() - def _get_results(self, hash_output=False): """Digest info in the statepoint and return as a string.""" From 4888662b9cf543d31203ddf82961055442b1b9f5 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Wed, 9 Dec 2015 10:41:19 -0500 Subject: [PATCH 056/650] fixed tally arithmetic to work with unique filters in both tally operands --- openmc/mgxs/mgxs.py | 12 +- openmc/tallies.py | 152 +++++++++--------- tests/test_tally_arithmetic/results_true.dat | 12 +- .../test_tally_arithmetic.py | 10 +- 4 files changed, 98 insertions(+), 88 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 635c822e31..597e28e292 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -47,7 +47,7 @@ _DOMAINS = [openmc.Cell, class MGXS(object): - """An abstract multi-group cross section for some energy group structure + """An abstract multi-group cross section for some energy group structure within some spatial domain. This class can be used for both OpenMC input generation and tally data @@ -95,7 +95,7 @@ class MGXS(object): num_sumbdomains : Integral The number of subdomains is unity for 'material', 'cell' and 'universe' domain types. When the This is equal to the number of cell instances - for 'distribcell' domain types (it is equal to unity prior to loading + for 'distribcell' domain types (it is equal to unity prior to loading tally data from a statepoint file). num_nuclides : Integral The number of nuclides for which the multi-group cross section is @@ -1420,8 +1420,8 @@ class AbsorptionXS(MGXS): class CaptureXS(MGXS): """A capture multi-group cross section. - - The Neutron capture reaction rate is defined as the difference between + + The Neutron capture reaction rate is defined as the difference between OpenMC's 'absorption' and 'fission' reaction rate score types. This includes not only radiative capture, but all forms of neutron disappearance aside from fission (e.g., MT > 100). @@ -1723,8 +1723,8 @@ class ScatterMatrixXS(MGXS): if self.correction == 'P0': scatter_p1 = self.tallies['scatter-P1'] scatter_p1 = scatter_p1.get_slice(scores=['scatter-P1']) - energy_filter = openmc.Filter(type='energy') - energy_filter.bins = self.energy_groups.group_edges + energy_filter = copy.deepcopy(self.tallies['scatter']. + find_filter('energy')) scatter_p1 = scatter_p1.diagonalize_filter(energy_filter) rxn_tally = self.tallies['scatter'] - scatter_p1 else: diff --git a/openmc/tallies.py b/openmc/tallies.py index ba5d19dfde..3eec325ab9 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1200,12 +1200,12 @@ class Tally(object): # Tile the nuclide bins into a DataFrame column nuclides = np.repeat(nuclides, len(self.scores)) tile_factor = data_size / len(nuclides) - df['nuclide'] = np.tile(nuclides, tile_factor) + df['nuclide'] = np.tile(nuclides, int(tile_factor)) # Include column for scores if user requested it if scores: tile_factor = data_size / len(self.scores) - df['score'] = np.tile(self.scores, tile_factor) + df['score'] = np.tile(self.scores, int(tile_factor)) # Append columns with mean, std. dev. for each tally bin df['mean'] = self.mean.ravel() @@ -1425,25 +1425,30 @@ class Tally(object): # Pickle the Tally results to a file pickle.dump(tally_results, open(filename, 'wb')) - def _outer_product(self, other, binary_op): + def _hybrid_product(self, other, binary_op): """Combines filters, scores and nuclides with another tally. - This is a helper method for the tally arithmetic methods. The filters, - scores and nuclides from both tallies are enumerated into all possible - combinations and expressed as CrossFilter, CrossScore and - CrossNuclide objects in the new derived tally. + This is a helper method for the tally arithmetic methods. It is called a + "hybrid product" because it performs a combination of a tensor + (or Kronecker) product and entrywise (or Hadamard) product. The filters, + nuclides, and scores from both tallies are combined using an entrywise + (or Hadamard) product on matching filters. If all nuclides are identical + in the two tallies, the entrywise product is performed across nuclides; + else the tensor product is performed. If all scores are identical in the + two tallies, the entrywise product is performed across scores; else the + tensor product is performed. Parameters ---------- other : Tally - The tally on the right hand side of the outer product + The tally on the right hand side of the hybrid product binary_op : {'+', '-', '*', '/', '^'} - The binary operation in the outer product + The binary operation in the hybrid product Returns ------- Tally - A new Tally that is the outer product with this one. + A new Tally that is the hybrid product with this one. Raises ------ @@ -1473,25 +1478,6 @@ class Tally(object): self_copy = copy.deepcopy(self) other_copy = copy.deepcopy(other) - # Find any shared filters between the two tallies - filter_intersect = [] - for filter in self_copy.filters: - if filter in other_copy.filters: - filter_intersect.append(filter) - - # Align the shared filters in successive order - for i, filter in enumerate(filter_intersect): - self_index = self_copy.filters.index(filter) - other_index = other_copy.filters.index(filter) - - # If necessary, swap self filter - if self_index != i: - self_copy.swap_filters(filter, self_copy.filters[i], inplace=True) - - # If necessary, swap other filter - if other_index != i: - other_copy.swap_filters(filter, other_copy.filters[i], inplace=True) - data = self_copy._align_tally_data(other_copy) if binary_op == '+': @@ -1535,7 +1521,7 @@ class Tally(object): for self_filter in self_copy.filters: new_tally.add_filter(self_filter) - # Generate filter "outer products" for non-identical filters + # Generate filter entrywise product for non-identical filters else: # Find the common longest sequence of shared filters @@ -1600,7 +1586,7 @@ class Tally(object): This is a helper method to construct a dict of dicts of the "aligned" data arrays from each tally for tally arithmetic. The method analyzes - the filters, scores and nuclides in both tally's and determines how to + the filters, scores and nuclides in both tallies and determines how to appropriately align the data for vectorized arithmetic. For example, if the two tallies have different filters, this method will use NumPy 'tile' and 'repeat' operations to the new data arrays such that all @@ -1620,51 +1606,71 @@ class Tally(object): """ + # Get the set of filters that each tally is missing + other_missing_filters = set(self.filters).difference(set(other.filters)) + self_missing_filters = set(other.filters).difference(set(self.filters)) + + # Add other_missing_filters to other + for filter in other_missing_filters: + filter = copy.deepcopy(filter) + repeat_factor = filter.num_bins + other._mean = np.repeat(other.mean, repeat_factor, axis=0) + other.sum = np.repeat(other.sum, repeat_factor, axis=0) + other._std_dev = np.repeat(other.std_dev, repeat_factor, axis=0) + other.sum_sq = np.repeat(other.sum_sq, repeat_factor, axis=0) + other.add_filter(filter) + + # Correct the stride for other filters + stride = other.num_nuclides * other.num_score_bins + for filter in reversed(other.filters): + filter.stride = stride + stride *= filter.num_bins + + # Add self_missing_filters to self + for filter in self_missing_filters: + filter = copy.deepcopy(filter) + repeat_factor = filter.num_bins + self._mean = np.repeat(self.mean, repeat_factor, axis=0) + self.sum = np.repeat(self.sum, repeat_factor, axis=0) + self._std_dev = np.repeat(self.std_dev, repeat_factor, axis=0) + self.sum_sq = np.repeat(self.sum_sq, repeat_factor, axis=0) + self.add_filter(filter) + + # Correct the stride for self filters + stride = self.num_nuclides * self.num_score_bins + for filter in reversed(self.filters): + filter.stride = stride + stride *= filter.num_bins + + # Align other filters with self filters + for i, filter in enumerate(self.filters): + other_index = other.filters.index(filter) + + # If necessary, swap other filter + if other_index != i: + other.swap_filters(filter, other.filters[i], inplace=True) + + # Deep copy the mean and std dev data self_mean = copy.deepcopy(self.mean) self_std_dev = copy.deepcopy(self.std_dev) other_mean = copy.deepcopy(other.mean) other_std_dev = copy.deepcopy(other.std_dev) - # Initialize list of tile and repeat factors - repeat_factors = [1, 1, 1] - tile_factors = [1, 1, 1] - - if self.filters != other.filters: - - # Determine the number of paired combinations of filter bins - # between the two tallies and repeat arrays along filter axes - diff1 = list(set(self.filters).difference(set(other.filters))) - diff2 = list(set(other.filters).difference(set(self.filters))) - - # Determine the factors by which each tally operands' data arrays - # must be tiled or repeated for the tally outer product - for filter in diff1: - tile_factors[0] *= filter.num_bins - for filter in diff2: - repeat_factors[0] *= filter.num_bins - + # If the tallies do not have identical sets of nuclides, tile and repeat + # to perform cross product of data for each nuclide if self.nuclides != other.nuclides: + self_mean = np.repeat(self_mean, other.num_nuclides, axis=1) + self_std_dev = np.repeat(self_std_dev, other.num_nuclides, axis=1) + other_mean = np.tile(other_mean, (1, self.num_nuclides, 1)) + other_std_dev = np.tile(other_std_dev, (1, self.num_nuclides, 1)) - # Determine the number of paired combinations of nuclides - # between the two tallies and repeat arrays along nuclide axes - repeat_factors[1] = other.num_nuclides - tile_factors[1] = self.num_nuclides - + # If the tallies do not have identical sets of scores, tile and repeat + # to perform cross product of data for each score if self.scores != other.scores: - - # Determine the number of paired combinations of score bins - # between the two tallies and repeat arrays along score axes - repeat_factors[2] = other.num_score_bins - tile_factors[2] = self.num_score_bins - - # Repeat the self tally - for i in range(3): - self_mean = np.repeat(self_mean, repeat_factors[i], axis=i) - self_std_dev = np.repeat(self_std_dev, repeat_factors[i], axis=i) - - # Tile the other tally - other_mean = np.tile(other_mean, tile_factors) - other_std_dev = np.tile(other_std_dev, tile_factors) + self_mean = np.repeat(self_mean, other.num_score_bins, axis=2) + self_std_dev = np.repeat(self_std_dev, other.num_score_bins, axis=2) + other_mean = np.tile(other_mean, (1, 1, self.num_score_bins)) + other_std_dev = np.tile(other_std_dev, (1, 1, self.num_score_bins)) data = {} data['self'] = {} @@ -1845,7 +1851,7 @@ class Tally(object): raise ValueError(msg) if isinstance(other, Tally): - new_tally = self._outer_product(other, binary_op='+') + new_tally = self._hybrid_product(other, binary_op='+') elif isinstance(other, Real): new_tally = Tally(name='derived') @@ -1915,7 +1921,7 @@ class Tally(object): raise ValueError(msg) if isinstance(other, Tally): - new_tally = self._outer_product(other, binary_op='-') + new_tally = self._hybrid_product(other, binary_op='-') elif isinstance(other, Real): new_tally = Tally(name='derived') @@ -1985,7 +1991,7 @@ class Tally(object): raise ValueError(msg) if isinstance(other, Tally): - new_tally = self._outer_product(other, binary_op='*') + new_tally = self._hybrid_product(other, binary_op='*') elif isinstance(other, Real): new_tally = Tally(name='derived') @@ -2055,7 +2061,7 @@ class Tally(object): raise ValueError(msg) if isinstance(other, Tally): - new_tally = self._outer_product(other, binary_op='/') + new_tally = self._hybrid_product(other, binary_op='/') elif isinstance(other, Real): new_tally = Tally(name='derived') @@ -2128,7 +2134,7 @@ class Tally(object): raise ValueError(msg) if isinstance(power, Tally): - new_tally = self._outer_product(power, binary_op='^') + new_tally = self._hybrid_product(power, binary_op='^') elif isinstance(power, Real): new_tally = Tally(name='derived') diff --git a/tests/test_tally_arithmetic/results_true.dat b/tests/test_tally_arithmetic/results_true.dat index 85183e3e8f..23dd38cfb6 100644 --- a/tests/test_tally_arithmetic/results_true.dat +++ b/tests/test_tally_arithmetic/results_true.dat @@ -2,8 +2,9 @@ Tally ID = 10000 Name = (tally 1 + tally 2) Filters = + cell [1] energy [ 0. 20.] - (cell + material) (array([1]), array([1])) + material [1] Nuclides = (U-235 + U-235) (U-235 + Pu-239) (U-238 + U-235) (U-238 + Pu-239) Scores = [(fission + fission), (fission + absorption), (nu-fission + fission), (nu-fission + absorption)] Estimator = tracklength @@ -14,8 +15,9 @@ Tally ID = 10001 Name = (tally 1 - tally 2) Filters = + cell [1] energy [ 0. 20.] - (cell - material) (array([1]), array([1])) + material [1] Nuclides = (U-235 - U-235) (U-235 - Pu-239) (U-238 - U-235) (U-238 - Pu-239) Scores = [(fission - fission), (fission - absorption), (nu-fission - fission), (nu-fission - absorption)] Estimator = tracklength @@ -26,8 +28,9 @@ Tally ID = 10002 Name = (tally 1 * tally 2) Filters = + cell [1] energy [ 0. 20.] - (cell * material) (array([1]), array([1])) + material [1] Nuclides = (U-235 * U-235) (U-235 * Pu-239) (U-238 * U-235) (U-238 * Pu-239) Scores = [(fission * fission), (fission * absorption), (nu-fission * fission), (nu-fission * absorption)] Estimator = tracklength @@ -38,8 +41,9 @@ Tally ID = 10003 Name = (tally 1 / tally 2) Filters = + cell [1] energy [ 0. 20.] - (cell / material) (array([1]), array([1])) + material [1] Nuclides = (U-235 / U-235) (U-235 / Pu-239) (U-238 / U-235) (U-238 / Pu-239) Scores = [(fission / fission), (fission / absorption), (nu-fission / fission), (nu-fission / absorption)] Estimator = tracklength diff --git a/tests/test_tally_arithmetic/test_tally_arithmetic.py b/tests/test_tally_arithmetic/test_tally_arithmetic.py index f71c960e92..2f49061f96 100644 --- a/tests/test_tally_arithmetic/test_tally_arithmetic.py +++ b/tests/test_tally_arithmetic/test_tally_arithmetic.py @@ -29,19 +29,19 @@ class TallyArithmeticTestHarness(TestHarness): # Perform all the tally arithmetic operations and output results outstr = '' tally_3 = tally_1 + tally_2 - outstr += tally_3.__repr__() + outstr += repr(tally_3) outstr += str(tally_3.mean) tally_3 = tally_1 - tally_2 - outstr += tally_3.__repr__() + outstr += repr(tally_3) outstr += str(tally_3.mean) tally_3 = tally_1 * tally_2 - outstr += tally_3.__repr__() + outstr += repr(tally_3) outstr += str(tally_3.mean) tally_3 = tally_1 / tally_2 - outstr += tally_3.__repr__() + outstr += repr(tally_3) outstr += str(tally_3.mean) print(outstr) @@ -55,5 +55,5 @@ class TallyArithmeticTestHarness(TestHarness): return outstr if __name__ == '__main__': - harness = TallyArithmeticTestHarness('statepoint.10.*', True) + harness = TallyArithmeticTestHarness('statepoint.10.h5', True) harness.main() From 4d3046a5976998b7371ebd5de856213e2972333a Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Thu, 10 Dec 2015 00:53:01 -0500 Subject: [PATCH 057/650] added capability to perform tensor or entrywise products across nuclides and scores in tally arithmetic --- openmc/tallies.py | 395 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 303 insertions(+), 92 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index 3eec325ab9..5656987cbf 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -24,6 +24,7 @@ if sys.version_info[0] >= 3: # "Static" variable for auto-generated Tally IDs AUTO_TALLY_ID = 10000 +_PRODUCT_TYPES = ['tensor', 'entrywise'] def reset_auto_tally_id(): global AUTO_TALLY_ID @@ -1425,18 +1426,20 @@ class Tally(object): # Pickle the Tally results to a file pickle.dump(tally_results, open(filename, 'wb')) - def _hybrid_product(self, other, binary_op): + def hybrid_product(self, other, binary_op, filter_product='None', + nuclide_product='None', score_product='None'): """Combines filters, scores and nuclides with another tally. This is a helper method for the tally arithmetic methods. It is called a - "hybrid product" because it performs a combination of a tensor - (or Kronecker) product and entrywise (or Hadamard) product. The filters, + "hybrid product" because it performs a combination of tensor + (or Kronecker) and entrywise (or Hadamard) products. The filters, nuclides, and scores from both tallies are combined using an entrywise - (or Hadamard) product on matching filters. If all nuclides are identical - in the two tallies, the entrywise product is performed across nuclides; - else the tensor product is performed. If all scores are identical in the - two tallies, the entrywise product is performed across scores; else the - tensor product is performed. + (or Hadamard) product on matching filters. By default, if all nuclides + are identical in the two tallies, the entrywise product is performed + across nuclides; else the tensor product is performed. By default, if all + scores are identical in the two tallies, the entrywise product is + performed across scores; else the tensor product is performed. Users can + also call the method explicitly and specify the desired product. Parameters ---------- @@ -1444,6 +1447,21 @@ class Tally(object): The tally on the right hand side of the hybrid product binary_op : {'+', '-', '*', '/', '^'} The binary operation in the hybrid product + filter_product : str, optional + The type of product (tensor or entrywise) to be performed between + filter data. The default is the entrywise product. Currently only + the entrywise product is supported since a tally cannot contain + two of the same tallies. + nuclide_product : str, optional + The type of product (tensor or entrywise) to be performed between + nuclide data. The default is the entrywise product if all nuclides + between the two tallies are the same; otherwise the default is + the tensor product. + score_product : str, optional + The type of product (tensor or entrywise) to be performed between + score data. The default is the entrywise product if all scores + between the two tallies are the same; otherwise the default is + the tensor product. Returns ------- @@ -1458,6 +1476,33 @@ class Tally(object): """ + # Set default value for filter product if it was not set + if filter_product == 'None': + filter_product = 'entrywise' + elif filter_product == 'tensor': + msg = 'Unable to perform Tally arithmetic with a tensor product' \ + 'for the filter data as this not currently supported.' + raise ValueError(msg) + + # Set default value for nuclide product if it was not set + if nuclide_product == 'None': + if self.nuclides == other.nuclides: + nuclide_product = 'entrywise' + else: + nuclide_product = 'tensor' + + # Set default value for score product if it was not set + if score_product == 'None': + if self.scores == other.scores: + score_product = 'entrywise' + else: + score_product = 'tensor' + + # Check product types + cv.check_value('filter product', filter_product, _PRODUCT_TYPES) + cv.check_value('nuclide product', nuclide_product, _PRODUCT_TYPES) + cv.check_value('score product', score_product, _PRODUCT_TYPES) + # Check that results have been read if not other.derived and other.sum is None: msg = 'Unable to use tally arithmetic with Tally ID="{0}" ' \ @@ -1473,13 +1518,23 @@ class Tally(object): new_name = '({0} {1} {2})'.format(self.name, binary_op, other.name) new_tally.name = new_name + # Query the mean and std dev so the tally data is read in from file + # if it has not present + self.mean + self.std_dev + other.mean + other.std_dev + # Create copies of self and other tallies to rearrange for tally # arithmetic self_copy = copy.deepcopy(self) other_copy = copy.deepcopy(other) - data = self_copy._align_tally_data(other_copy) + # Align the tally data based on desired hybrid product + data = self_copy._align_tally_data(other_copy, filter_product, + nuclide_product, score_product) + # Perform tally arithmetic operation if binary_op == '+': new_tally._mean = data['self']['mean'] + data['other']['mean'] new_tally._std_dev = np.sqrt(data['self']['std. dev.']**2 + @@ -1509,6 +1564,13 @@ class Tally(object): new_tally._std_dev = np.abs(new_tally.mean) * \ np.sqrt(first_term**2 + second_term**2) + # Convert any infs and nans to zero + new_tally._mean[np.isinf(new_tally._mean)] = 0 + new_tally._mean = np.nan_to_num(new_tally._mean) + new_tally._std_dev[np.isinf(new_tally._std_dev)] = 0 + new_tally._std_dev = np.nan_to_num(new_tally._std_dev) + + # Set tally attributes if self_copy.estimator == other_copy.estimator: new_tally.estimator = self_copy.estimator if self_copy.with_summary and other_copy.with_summary: @@ -1516,43 +1578,28 @@ class Tally(object): if self_copy.num_realizations == other_copy.num_realizations: new_tally.num_realizations = self_copy.num_realizations - # If filters are identical, simply reuse them in derived tally - if self_copy.filters == other_copy.filters: + # Add filters to the new tally + if filter_product == 'entrywise': for self_filter in self_copy.filters: - new_tally.add_filter(self_filter) - - # Generate filter entrywise product for non-identical filters + new_tally.filters.append(self_filter) else: + all_filters = [self_copy.filters, other_copy.filters] + for self_filter, other_filter in itertools.product(*all_filters): + new_filter = CrossFilter(self_filter, other_filter, binary_op) + new_tally.add_filter(new_filter) - # Find the common longest sequence of shared filters - match = 0 - for self_filter, other_filter in zip(self_copy.filters, other_copy.filters): - if self_filter == other_filter: - match += 1 - else: - break + # Add nuclides to the new tally + if nuclide_product == 'entrywise': + for self_nuclide in self_copy.nuclides: + new_tally.nuclides.append(self_nuclide) + else: + all_nuclides = [self_copy.nuclides, other_copy.nuclides] + for self_nuclide, other_nuclide in itertools.product(*all_nuclides): + new_nuclide = CrossNuclide(self_nuclide, other_nuclide, binary_op) + new_tally.add_nuclide(new_nuclide) - match_filters = self_copy.filters[:match] - cross_filters = [self_copy.filters[match:], other_copy.filters[match:]] - - # Simply reuse shared filters in derived tally - for filter in match_filters: - new_tally.add_filter(filter) - - # Use cross filters to combine non-shared filters in derived tally - if len(self_copy.filters) != match and len(other_copy.filters) == match: - for filter in cross_filters[0]: - new_tally.add_filter(filter) - elif len(self_copy.filters) == match and len(other_copy.filters) != match: - for filter in cross_filters[1]: - new_tally.add_filter(filter) - else: - for self_filter, other_filter in itertools.product(*cross_filters): - new_filter = CrossFilter(self_filter, other_filter, binary_op) - new_tally.add_filter(new_filter) - - # Generate score "outer products" - if self_copy.scores == other_copy.scores: + # Add scores to the new tally + if score_product == 'entrywise': new_tally.num_score_bins = self_copy.num_score_bins for self_score in self_copy.scores: new_tally.add_score(self_score) @@ -1563,16 +1610,6 @@ class Tally(object): new_score = CrossScore(self_score, other_score, binary_op) new_tally.add_score(new_score) - # Generate nuclide "outer products" - if self_copy.nuclides == other_copy.nuclides: - for self_nuclide in self_copy.nuclides: - new_tally.nuclides.append(self_nuclide) - else: - all_nuclides = [self_copy.nuclides, other_copy.nuclides] - for self_nuclide, other_nuclide in itertools.product(*all_nuclides): - new_nuclide = CrossNuclide(self_nuclide, other_nuclide, binary_op) - new_tally.add_nuclide(new_nuclide) - # Correct each Filter's stride stride = new_tally.num_nuclides * new_tally.num_score_bins for filter in reversed(new_tally.filters): @@ -1581,7 +1618,8 @@ class Tally(object): return new_tally - def _align_tally_data(self, other): + def _align_tally_data(self, other, filter_product, nuclide_product, + score_product): """Aligns data from two tallies for tally arithmetic. This is a helper method to construct a dict of dicts of the "aligned" @@ -1597,6 +1635,15 @@ class Tally(object): ---------- other : Tally The tally to outer product with this tally + filter_product : str + The type of product (tensor or entry) to be performed between filter + data. + nuclide_product : str + The type of product (tensor or entry) to be performed between nuclide + data. + score_product : str + The type of product (tensor or entry) to be performed between score + data. Returns ------- @@ -1610,38 +1657,22 @@ class Tally(object): other_missing_filters = set(self.filters).difference(set(other.filters)) self_missing_filters = set(other.filters).difference(set(self.filters)) - # Add other_missing_filters to other + # Add filters present in self but not in other to other for filter in other_missing_filters: filter = copy.deepcopy(filter) repeat_factor = filter.num_bins other._mean = np.repeat(other.mean, repeat_factor, axis=0) - other.sum = np.repeat(other.sum, repeat_factor, axis=0) other._std_dev = np.repeat(other.std_dev, repeat_factor, axis=0) - other.sum_sq = np.repeat(other.sum_sq, repeat_factor, axis=0) other.add_filter(filter) - # Correct the stride for other filters - stride = other.num_nuclides * other.num_score_bins - for filter in reversed(other.filters): - filter.stride = stride - stride *= filter.num_bins - - # Add self_missing_filters to self + # Add filters present in other but not in self to self for filter in self_missing_filters: filter = copy.deepcopy(filter) repeat_factor = filter.num_bins self._mean = np.repeat(self.mean, repeat_factor, axis=0) - self.sum = np.repeat(self.sum, repeat_factor, axis=0) self._std_dev = np.repeat(self.std_dev, repeat_factor, axis=0) - self.sum_sq = np.repeat(self.sum_sq, repeat_factor, axis=0) self.add_filter(filter) - # Correct the stride for self filters - stride = self.num_nuclides * self.num_score_bins - for filter in reversed(self.filters): - filter.stride = stride - stride *= filter.num_bins - # Align other filters with self filters for i, filter in enumerate(self.filters): other_index = other.filters.index(filter) @@ -1650,28 +1681,98 @@ class Tally(object): if other_index != i: other.swap_filters(filter, other.filters[i], inplace=True) + # Repeat and tile the data by nuclide in preparation for performing + # the tensor product across nuclides. + if nuclide_product == 'tensor': + self._mean = np.repeat(self.mean, other.num_nuclides, axis=1) + self._std_dev = np.repeat(self.std_dev, other.num_nuclides, axis=1) + other._mean = np.tile(other.mean, (1, self.num_nuclides, 1)) + other._std_dev = np.tile(other.std_dev, (1, self.num_nuclides, 1)) + + # Add nuclides to each tally such that each tally contains the complete + # set of nuclides necessary to perform an entrywise product. New nuclides + # added to a tally will have all their scores set to zero. + else: + + # Get the set of nuclides that each tally is missing + other_missing_nuclides = set(self.nuclides).difference(set(other.nuclides)) + self_missing_nuclides = set(other.nuclides).difference(set(self.nuclides)) + + # Add nuclides present in self but not in other to other + for nuclide in other_missing_nuclides: + other._mean = np.insert(other.mean, other.num_nuclides, 0, axis=1) + other._std_dev = np.insert(other.std_dev, other.num_nuclides, 0, axis=1) + other.add_nuclide(nuclide) + + # Add nuclides present in other but not in self to self + for nuclide in self_missing_nuclides: + self._mean = np.insert(self.mean, self.num_nuclides, 0, axis=1) + self._std_dev = np.insert(self.std_dev, self.num_nuclides, 0, axis=1) + self.add_nuclide(nuclide) + + # Align other nuclides with self nuclides + for i, nuclide in enumerate(self.nuclides): + other_index = other.nuclides.index(nuclide) + + # If necessary, swap other nuclide + if other_index != i: + other.swap_nuclides(nuclide, other.nuclides[i]) + + # Repeat and tile the data by score in preparation for performing + # the tensor product across scores. + if score_product == 'tensor': + self._mean = np.repeat(self.mean, other.num_score_bins, axis=2) + self._std_dev = np.repeat(self.std_dev, other.num_score_bins, axis=2) + other._mean = np.tile(other.mean, (1, 1, self.num_score_bins)) + other._std_dev = np.tile(other.std_dev, (1, 1, self.num_score_bins)) + + # Add scores to each tally such that each tally contains the complete set + # of scores necessary to perform an entrywise product. New scores added + # to a tally will be set to zero. + else: + + # Get the set of scores that each tally is missing + other_missing_scores = set(self.scores).difference(set(other.scores)) + self_missing_scores = set(other.scores).difference(set(self.scores)) + + # Add scores present in self but not in other to other + for score in other_missing_scores: + other._mean = np.insert(other.mean, other.num_score_bins, 0, axis=2) + other._std_dev = np.insert(other.std_dev, other.num_score_bins, 0, axis=2) + other.add_score(score) + + # Add scores present in other but not in self to self + for score in self_missing_scores: + self._mean = np.insert(self.mean, self.num_score_bins, 0, axis=2) + self._std_dev = np.insert(self.std_dev, self.num_score_bins, 0, axis=2) + self.add_score(score) + + # Align other scores with self scores + for i, score in enumerate(self.scores): + other_index = other.scores.index(score) + + # If necessary, swap other score + if other_index != i: + other.swap_scores(score, other.scores[i]) + + # Correct the stride for other filters + stride = other.num_nuclides * other.num_score_bins + for filter in reversed(other.filters): + filter.stride = stride + stride *= filter.num_bins + + # Correct the stride for self filters + stride = self.num_nuclides * self.num_score_bins + for filter in reversed(self.filters): + filter.stride = stride + stride *= filter.num_bins + # Deep copy the mean and std dev data self_mean = copy.deepcopy(self.mean) self_std_dev = copy.deepcopy(self.std_dev) other_mean = copy.deepcopy(other.mean) other_std_dev = copy.deepcopy(other.std_dev) - # If the tallies do not have identical sets of nuclides, tile and repeat - # to perform cross product of data for each nuclide - if self.nuclides != other.nuclides: - self_mean = np.repeat(self_mean, other.num_nuclides, axis=1) - self_std_dev = np.repeat(self_std_dev, other.num_nuclides, axis=1) - other_mean = np.tile(other_mean, (1, self.num_nuclides, 1)) - other_std_dev = np.tile(other_std_dev, (1, self.num_nuclides, 1)) - - # If the tallies do not have identical sets of scores, tile and repeat - # to perform cross product of data for each score - if self.scores != other.scores: - self_mean = np.repeat(self_mean, other.num_score_bins, axis=2) - self_std_dev = np.repeat(self_std_dev, other.num_score_bins, axis=2) - other_mean = np.tile(other_mean, (1, 1, self.num_score_bins)) - other_std_dev = np.tile(other_std_dev, (1, 1, self.num_score_bins)) - data = {} data['self'] = {} data['other'] = {} @@ -1808,6 +1909,116 @@ class Tally(object): if not inplace: return swap_tally + def swap_nuclides(self, nuclide1, nuclide2): + """Reverse the ordering of two nuclides in this tally + + This is a helper method for tally arithmetic which helps align the data + in two tallies with shared nuclides. This method reverses the order of + the two nuclides in place. + + Parameters + ---------- + nuclide1 : Nuclide + The nuclide to swap with nuclide2 + + nuclide2 : Nuclide + The nuclide to swap with nuclide1 + + Raises + ------ + ValueError + If this is a derived tally or this method is called before the tally + is populated with data by the StatePoint.read_results() method. + + """ + + # Check that results have been read + if not self.derived and self.sum is None: + msg = 'Unable to use tally arithmetic with Tally ID="{0}" ' \ + 'since it does not contain any results.'.format(self.id) + raise ValueError(msg) + + # Swap the nuclides in the Tally + nuclide1_index = self.nuclides.index(nuclide1) + nuclide2_index = self.nuclides.index(nuclide2) + self.nuclides[nuclide1_index] = nuclide2 + self.nuclides[nuclide2_index] = nuclide1 + + # Copy the tally data + self_mean = copy.deepcopy(self.mean) + self_std_dev = copy.deepcopy(self.std_dev) + + # Swap nuclide 1 in place of nuclide 2 + self._mean = np.delete(self.mean, nuclide2_index, axis=1) + self._mean = np.insert(self.mean, nuclide2_index, + self_mean[:,nuclide1_index,:], axis=1) + self._std_dev = np.delete(self.std_dev, nuclide2_index, axis=1) + self._std_dev = np.insert(self.std_dev, nuclide2_index, + self_mean[:,nuclide1_index,:], axis=1) + + # Swap nuclide 2 in place of nuclide 1 + self._mean = np.delete(self.mean, nuclide1_index, axis=1) + self._mean = np.insert(self.mean, nuclide1_index, + self_mean[:,nuclide2_index,:], axis=1) + self._std_dev = np.delete(self.std_dev, nuclide1_index, axis=1) + self._std_dev = np.insert(self.std_dev, nuclide1_index, + self_mean[:,nuclide2_index,:], axis=1) + + def swap_scores(self, score1, score2): + """Reverse the ordering of two scores in this tally + + This is a helper method for tally arithmetic which helps align the data + in two tallies with shared scores. This method copies reverses the order + of the two scores in place. + + Parameters + ---------- + score1 : Score + The score to swap with score2 + + score2 : Score + The score to swap with score1 + + Raises + ------ + ValueError + If this is a derived tally or this method is called before the tally + is populated with data by the StatePoint.read_results() method. + + """ + + # Check that results have been read + if not self.derived and self.sum is None: + msg = 'Unable to use tally arithmetic with Tally ID="{0}" ' \ + 'since it does not contain any results.'.format(self.id) + raise ValueError(msg) + + # Swap the scores in the Tally + score1_index = self.scores.index(score1) + score2_index = self.scores.index(score2) + self.scores[score1_index] = score2 + self.scores[score2_index] = score1 + + # Copy the tally data + self_mean = copy.deepcopy(self.mean) + self_std_dev = copy.deepcopy(self.std_dev) + + # Swap score 1 in place of score 2 + self._mean = np.delete(self.mean, score2_index, axis=2) + self._mean = np.insert(self.mean, score2_index, + self_mean[:,:,score1_index], axis=2) + self._std_dev = np.delete(self.std_dev, score2_index, axis=2) + self._std_dev = np.insert(self.std_dev, score2_index, + self_mean[:,:,score1_index], axis=2) + + # Swap score 2 in place of score 1 + self._mean = np.delete(self.mean, score1_index, axis=2) + self._mean = np.insert(self.mean, score1_index, + self_mean[:,:,score2_index], axis=2) + self._std_dev = np.delete(self.std_dev, score1_index, axis=2) + self._std_dev = np.insert(self.std_dev, score1_index, + self_mean[:,:,score2_index], axis=2) + def __add__(self, other): """Adds this tally to another tally or scalar value. @@ -1851,7 +2062,7 @@ class Tally(object): raise ValueError(msg) if isinstance(other, Tally): - new_tally = self._hybrid_product(other, binary_op='+') + new_tally = self.hybrid_product(other, binary_op='+') elif isinstance(other, Real): new_tally = Tally(name='derived') @@ -1921,7 +2132,7 @@ class Tally(object): raise ValueError(msg) if isinstance(other, Tally): - new_tally = self._hybrid_product(other, binary_op='-') + new_tally = self.hybrid_product(other, binary_op='-') elif isinstance(other, Real): new_tally = Tally(name='derived') @@ -1991,7 +2202,7 @@ class Tally(object): raise ValueError(msg) if isinstance(other, Tally): - new_tally = self._hybrid_product(other, binary_op='*') + new_tally = self.hybrid_product(other, binary_op='*') elif isinstance(other, Real): new_tally = Tally(name='derived') @@ -2061,7 +2272,7 @@ class Tally(object): raise ValueError(msg) if isinstance(other, Tally): - new_tally = self._hybrid_product(other, binary_op='/') + new_tally = self.hybrid_product(other, binary_op='/') elif isinstance(other, Real): new_tally = Tally(name='derived') @@ -2134,7 +2345,7 @@ class Tally(object): raise ValueError(msg) if isinstance(power, Tally): - new_tally = self._hybrid_product(power, binary_op='^') + new_tally = self.hybrid_product(power, binary_op='^') elif isinstance(power, Real): new_tally = Tally(name='derived') From cae38c30bded40da7b963b0f4068ecb59eb4ce14 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Thu, 10 Dec 2015 01:03:17 -0500 Subject: [PATCH 058/650] fixed typos and removed unnecessary repeat_factor variable --- openmc/tallies.py | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index 5656987cbf..8b4aa89ddd 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1519,7 +1519,7 @@ class Tally(object): new_tally.name = new_name # Query the mean and std dev so the tally data is read in from file - # if it has not present + # if it has not already been read in. self.mean self.std_dev other.mean @@ -1636,14 +1636,14 @@ class Tally(object): other : Tally The tally to outer product with this tally filter_product : str - The type of product (tensor or entry) to be performed between filter - data. + The type of product (tensor or entrywise) to be performed between + filter data. nuclide_product : str - The type of product (tensor or entry) to be performed between nuclide - data. + The type of product (tensor or entrywise) to be performed between + nuclide data. score_product : str - The type of product (tensor or entry) to be performed between score - data. + The type of product (tensor or entrywise) to be performed between + score data. Returns ------- @@ -1660,17 +1660,15 @@ class Tally(object): # Add filters present in self but not in other to other for filter in other_missing_filters: filter = copy.deepcopy(filter) - repeat_factor = filter.num_bins - other._mean = np.repeat(other.mean, repeat_factor, axis=0) - other._std_dev = np.repeat(other.std_dev, repeat_factor, axis=0) + other._mean = np.repeat(other.mean, filter.num_bins, axis=0) + other._std_dev = np.repeat(other.std_dev, filter.num_bins, axis=0) other.add_filter(filter) # Add filters present in other but not in self to self for filter in self_missing_filters: filter = copy.deepcopy(filter) - repeat_factor = filter.num_bins - self._mean = np.repeat(self.mean, repeat_factor, axis=0) - self._std_dev = np.repeat(self.std_dev, repeat_factor, axis=0) + self._mean = np.repeat(self.mean, filter.num_bins, axis=0) + self._std_dev = np.repeat(self.std_dev, filter.num_bins, axis=0) self.add_filter(filter) # Align other filters with self filters From 68b131522047c6023260be4043b9367bfdac2f17 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sat, 12 Dec 2015 23:44:15 -0500 Subject: [PATCH 059/650] Initial implementation of tally sparsification in Python API --- openmc/tallies.py | 65 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 60 insertions(+), 5 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index 13a219dedd..2c45d981d4 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -10,6 +10,7 @@ from xml.etree import ElementTree as ET import sys import numpy as np +import scipy.sparse as sps from openmc import Mesh, Filter, Trigger, Nuclide from openmc.cross import CrossScore, CrossNuclide, CrossFilter @@ -104,6 +105,7 @@ class Tally(object): self._std_dev = None self._with_batch_statistics = False self._derived = False + self._sparse = False self._sp_filename = None self._results_read = False @@ -126,6 +128,7 @@ class Tally(object): clone._with_summary = self.with_summary clone._with_batch_statistics = self.with_batch_statistics clone._derived = self.derived + clone._sparse = self.sparse clone._sp_filename = self._sp_filename clone._results_read = self._results_read @@ -315,13 +318,21 @@ class Tally(object): self._sum = sum self._sum_sq = sum_sq + # Convert NumPy arrays to SciPy sparse matrices + if self.sparse: + self._sum = sps.lil_matrix(self._sum) + self._sum_sq = sps.lil_matrix(self._sum_sq) + # Indicate that Tally results have been read self._results_read = True # Close the HDF5 statepoint file f.close() - return self._sum + if self.sparse: + return self._sum.toarray() + else: + return self._sum @property def sum_sq(self): @@ -332,7 +343,10 @@ class Tally(object): # Force reading of sum and sum_sq self.sum - return self._sum_sq + if self.sparse: + return self._sum_sq.toarray() + else: + return self._sum_sq @property def mean(self): @@ -341,7 +355,15 @@ class Tally(object): return None self._mean = self.sum / self.num_realizations - return self._mean + + # Convert NumPy arrays to SciPy sparse matrices + if self.sparse: + self._mean = sps.lil_matrix(self._mean) + + if self.sparse: + return self._mean.toarray() + else: + return self._mean @property def std_dev(self): @@ -354,8 +376,17 @@ class Tally(object): self._std_dev = np.zeros_like(self.mean) self._std_dev[nonzero] = np.sqrt((self.sum_sq[nonzero]/n - self.mean[nonzero]**2)/(n - 1)) + + # Convert NumPy arrays to SciPy sparse matrices + if self.sparse: + self._std_dev = sps.lil_matrix(self._std_dev) + self.with_batch_statistics = True - return self._std_dev + + if self.sparse: + return self._std_dev.toarray() + else: + return self._std_dev @property def with_batch_statistics(self): @@ -365,6 +396,10 @@ class Tally(object): def derived(self): return self._derived + @property + def sparse(self): + return self._sparse + @estimator.setter def estimator(self, estimator): cv.check_value('estimator', estimator, @@ -619,7 +654,8 @@ class Tally(object): """ if not self.can_merge(tally): - msg = 'Unable to merge tally ID="{0}" with "{1}"'.format(tally.id, self.id) + msg = 'Unable to merge tally ID="{0}" with ' + \ + '"{1}"'.format(tally.id, self.id) raise ValueError(msg) # Create deep copy of tally to return as merged tally @@ -1107,6 +1143,25 @@ class Tally(object): return data + def sparsify(self): + """ + """ + + self._sparse = True + + # FIXME: get_values + # FIXME: each of the properties which load in the data + # FIXME: pandas dataframes + # summation, slicing + if self._sum: + self._sum = sps.lil_matrix(self._sum) + if self._sum_sq: + self._sum_sq = sps.lil_matrix(self._sum_sq) + if self._mean: + self._mean = sps.lil_matrix(self._mean) + if self._std_dev: + self._std_dev = sps.lil_matrix(self._std_dev) + def get_pandas_dataframe(self, filters=True, nuclides=True, scores=True, summary=None): """Build a Pandas DataFrame for the Tally data. From 963238194b7b4a264c357e147709810a0e4dbea8 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sun, 13 Dec 2015 01:30:10 -0500 Subject: [PATCH 060/650] Fixed some bugs in tally sparsification - tally arithmetic ipython notebook now working --- openmc/tallies.py | 197 ++++++++++++++++++++++++++++++---------------- 1 file changed, 127 insertions(+), 70 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index 67e9a08388..9cac3a8482 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -83,6 +83,11 @@ class Tally(object): An array containing the sample mean for each bin std_dev : ndarray An array containing the sample standard deviation for each bin + derived : bool + Whether or not the tally is derived from one or more other tallies + sparse : bool + Whether or not the tally uses SciPy's LIL sparse matrix format for + compressed data storage """ @@ -246,6 +251,10 @@ class Tally(object): def scores(self): return self._scores + @property + def shape(self): + return (self.num_filter_bins, self.num_nuclides, self.num_score_bins) + @property def num_scores(self): return len(self._scores) @@ -308,21 +317,18 @@ class Tally(object): return 1 if not val else val # Reshape the results arrays - new_shape = (nonzero(self.num_filter_bins), - nonzero(self.num_nuclides), - nonzero(self.num_score_bins)) - - sum = np.reshape(sum, new_shape) - sum_sq = np.reshape(sum_sq, new_shape) + sum = np.reshape(sum, self.shape) + sum_sq = np.reshape(sum_sq, self.shape) # Set the data for this Tally self._sum = sum self._sum_sq = sum_sq - # Convert NumPy arrays to SciPy sparse matrices + # Convert NumPy arrays to SciPy sparse LIL matrices if self.sparse: - self._sum = sps.lil_matrix(self._sum) - self._sum_sq = sps.lil_matrix(self._sum_sq) + self._sum = sps.lil_matrix(self._sum.flatten(), self._sum.shape) + self._sum_sq = \ + sps.lil_matrix(self._sum_sq.flatten(), self._sum_sq.shape) # Indicate that Tally results have been read self._results_read = True @@ -331,7 +337,7 @@ class Tally(object): f.close() if self.sparse: - return self._sum.toarray() + return np.reshape(self._sum.toarray(), self.shape) else: return self._sum @@ -345,7 +351,7 @@ class Tally(object): self.sum if self.sparse: - return self._sum_sq.toarray() + return np.reshape(self._sum_sq.toarray(), self.shape) else: return self._sum_sq @@ -357,12 +363,13 @@ class Tally(object): self._mean = self.sum / self.num_realizations - # Convert NumPy arrays to SciPy sparse matrices + # Convert NumPy array to SciPy sparse LIL matrix if self.sparse: - self._mean = sps.lil_matrix(self._mean) + self._mean = \ + sps.lil_matrix(self._mean.flatten(), self._mean.shape) if self.sparse: - return self._mean.toarray() + return np.reshape(self._mean.toarray(), self.shape) else: return self._mean @@ -378,14 +385,15 @@ class Tally(object): self._std_dev[nonzero] = np.sqrt((self.sum_sq[nonzero]/n - self.mean[nonzero]**2)/(n - 1)) - # Convert NumPy arrays to SciPy sparse matrices + # Convert NumPy array to SciPy sparse LIL matrix if self.sparse: - self._std_dev = sps.lil_matrix(self._std_dev) + self._std_dev = \ + sps.lil_matrix(self._std_dev.flatten(), self._std_dev.shape) self.with_batch_statistics = True if self.sparse: - return self._std_dev.toarray() + return np.reshape(self._std_dev.toarray(), self.shape) else: return self._std_dev @@ -1099,22 +1107,19 @@ class Tally(object): Raises ------ ValueError - When this method is called before the Tally is populated with data - by the StatePoint.read_results() method. ValueError is also thrown - if the input parameters do not correspond to the Tally's attributes, + When this method is called before the Tally is populated with data, + or the input parameters do not correspond to the Tally's attributes, e.g., if the score(s) do not match those in the Tally. """ - # Ensure that StatePoint.read_results() was called first + # Ensure that the tally has data if (value == 'mean' and self.mean is None) or \ (value == 'std_dev' and self.std_dev is None) or \ (value == 'rel_err' and self.mean is None) or \ (value == 'sum' and self.sum is None) or \ (value == 'sum_sq' and self.sum_sq is None): - msg = 'The Tally ID="{0}" has no data to return. Call the ' \ - 'StatePoint.read_results() method before using ' \ - 'Tally.get_values(...)'.format(self.id) + msg = 'The Tally ID="{0}" has no data to return'.format(self.id) raise ValueError(msg) # Get filter, nuclide and score indices @@ -1148,20 +1153,41 @@ class Tally(object): """ """ + # FIXME: pandas dataframes, summation + if self._sum is not None: + self._sum = \ + sps.lil_matrix(self._sum.flatten(), self._sum.shape) + if self._sum_sq is not None: + self._sum_sq = \ + sps.lil_matrix(self._sum_sq.flatten(), self._sum_sq.shape) + if self._mean is not None: + self._mean = \ + sps.lil_matrix(self._mean.flatten(), self._mean.shape) + if self._std_dev is not None: + self._std_dev = \ + sps.lil_matrix(self._std_dev.flatten(), self._std_dev.shape) + self._sparse = True - # FIXME: get_values - # FIXME: each of the properties which load in the data - # FIXME: pandas dataframes - # summation, slicing - if self._sum: - self._sum = sps.lil_matrix(self._sum) - if self._sum_sq: - self._sum_sq = sps.lil_matrix(self._sum_sq) - if self._mean: - self._mean = sps.lil_matrix(self._mean) - if self._std_dev: - self._std_dev = sps.lil_matrix(self._std_dev) + def densify(self): + """ + """ + + # If the tally is already dense, simply return + if not self._sparse: + return + + # FIXME: pandas dataframes, summation + if self._sum is not None: + self._sum = np.reshape(self._sum.toarray(), self.shape) + if self._sum_sq is not None: + self._sum_sq = np.reshape(self._sum_sq.toarray(), self.shape) + if self._mean is not None: + self._mean = np.reshape(self._mean.toarray(), self.shape) + if self._std_dev is not None: + self._std_dev = np.reshape(self._std_dev.toarray(), self.shape) + + self._sparse = False def get_pandas_dataframe(self, filters=True, nuclides=True, scores=True, summary=None): @@ -1200,17 +1226,14 @@ class Tally(object): ------ KeyError When this method is called before the Tally is populated with data - by the StatePoint.read_results() method. ImportError When Pandas can not be found on the caller's system """ - # Ensure that StatePoint.read_results() was called first + # Ensure that the tally has data if self.mean is None or self.std_dev is None: - msg = 'The Tally ID="{0}" has no data to return. Call the ' \ - 'StatePoint.read_results() method before using ' \ - 'Tally.get_pandas_dataframe(...)'.format(self.id) + msg = 'The Tally ID="{0}" has no data to return'.format(self.id) raise KeyError(msg) # If using Summary, ensure StatePoint.link_with_summary(...) was called @@ -1356,16 +1379,13 @@ class Tally(object): Raises ------ KeyError - When this method is called before the Tally is populated with data - by the StatePoint.read_results() method. + When this method is called before the Tally is populated with data. """ - # Ensure that StatePoint.read_results() was called first + # Ensure that the tally has data if self._sum is None or self._sum_sq is None and not self.derived: - msg = 'The Tally ID="{0}" has no data to export. Call the ' \ - 'StatePoint.read_results() method before using ' \ - 'Tally.export_results(...)'.format(self.id) + msg = 'The Tally ID="{0}" has no data to export'.format(self.id) raise KeyError(msg) if not isinstance(filename, basestring): @@ -1527,7 +1547,7 @@ class Tally(object): ------ ValueError When this method is called before the other tally is populated - with data by the StatePoint.read_results() method. + with data. """ @@ -1708,6 +1728,12 @@ class Tally(object): """ + # Use dense NumPy arrays for data alignment operations + self_sparse = self.sparse + other_sparse = other.sparse + self.densify() + other.densify() + # Get the set of filters that each tally is missing other_missing_filters = set(self.filters).difference(set(other.filters)) self_missing_filters = set(other.filters).difference(set(self.filters)) @@ -1769,7 +1795,7 @@ class Tally(object): # If necessary, swap other nuclide if other_index != i: - other.swap_nuclides(nuclide, other.nuclides[i]) + other.swap_nuclides(nuclide, other.nuclides[i]) # Repeat and tile the data by score in preparation for performing # the tensor product across scores. @@ -1820,6 +1846,12 @@ class Tally(object): filter.stride = stride stride *= filter.num_bins + # Restore tally operands to sparse storage + if self.sparse: + self.sparsify() + if other.sparse: + other.sparsify() + # Deep copy the mean and std dev data self_mean = copy.deepcopy(self.mean) self_std_dev = copy.deepcopy(self.std_dev) @@ -1864,7 +1896,7 @@ class Tally(object): ------ ValueError If this is a derived tally or this method is called before the tally - is populated with data by the StatePoint.read_results() method. + is populated with data. """ @@ -1981,7 +2013,7 @@ class Tally(object): ------ ValueError If this is a derived tally or this method is called before the tally - is populated with data by the StatePoint.read_results() method. + is populated with data. """ @@ -2036,7 +2068,7 @@ class Tally(object): ------ ValueError If this is a derived tally or this method is called before the tally - is populated with data by the StatePoint.read_results() method. + is populated with data. """ @@ -2103,8 +2135,7 @@ class Tally(object): Raises ------ ValueError - When this method is called before the Tally is populated with data - by the StatePoint.read_results() method. + When this method is called before the Tally is populated with data. """ @@ -2136,6 +2167,10 @@ class Tally(object): for score in self.scores: new_tally.add_score(score) + # If original tally operands were sparse, sparsify the sliced tally + if self.sparse and other.sparse: + new_tally.sparsify() + else: msg = 'Unable to add "{0}" to Tally ID="{1}"'.format(other, self.id) raise ValueError(msg) @@ -2173,8 +2208,7 @@ class Tally(object): Raises ------ ValueError - When this method is called before the Tally is populated with data - by the StatePoint.read_results() method. + When this method is called before the Tally is populated with data. """ @@ -2205,6 +2239,10 @@ class Tally(object): for score in self.scores: new_tally.add_score(score) + # If original tally operands were sparse, sparsify the sliced tally + if self.sparse and other.sparse: + new_tally.sparsify() + else: msg = 'Unable to subtract "{0}" from Tally ' \ 'ID="{1}"'.format(other, self.id) @@ -2243,8 +2281,7 @@ class Tally(object): Raises ------ ValueError - When this method is called before the Tally is populated with data - by the StatePoint.read_results() method. + When this method is called before the Tally is populated with data. """ @@ -2275,6 +2312,10 @@ class Tally(object): for score in self.scores: new_tally.add_score(score) + # If original tally operands were sparse, sparsify the sliced tally + if self.sparse and other.sparse: + new_tally.sparsify() + else: msg = 'Unable to multiply Tally ID="{0}" ' \ 'by "{1}"'.format(self.id, other) @@ -2313,8 +2354,7 @@ class Tally(object): Raises ------ ValueError - When this method is called before the Tally is populated with data - by the StatePoint.read_results() method. + When this method is called before the Tally is populated with data. """ @@ -2345,6 +2385,10 @@ class Tally(object): for score in self.scores: new_tally.add_score(score) + # If original tally operands were sparse, sparsify the sliced tally + if self.sparse and other.sparse: + new_tally.sparsify() + else: msg = 'Unable to divide Tally ID="{0}" ' \ 'by "{1}"'.format(self.id, other) @@ -2386,8 +2430,7 @@ class Tally(object): Raises ------ ValueError - When this method is called before the Tally is populated with data - by the StatePoint.read_results() method. + When this method is called before the Tally is populated with data. """ @@ -2419,6 +2462,10 @@ class Tally(object): for score in self.scores: new_tally.add_score(score) + # If original tally was sparse, sparsify the exponentiated tally + if self.sparse: + new_tally.sparsify() + else: msg = 'Unable to raise Tally ID="{0}" to ' \ 'power "{1}"'.format(self.id, power) @@ -2569,12 +2616,11 @@ class Tally(object): Raises ------ ValueError - When this method is called before the Tally is populated with data - by the StatePoint.read_results() method. + When this method is called before the Tally is populated with data. """ - # Ensure that StatePoint.read_results() was called first + # Ensure that the tally has data if not self.derived and self.sum is None: msg = 'Unable to use tally arithmetic with Tally ID="{0}" ' \ 'since it does not contain any results.'.format(self.id) @@ -2657,6 +2703,10 @@ class Tally(object): filter.stride = stride stride *= filter.num_bins + # If original tally was sparse, sparsify the sliced tally + if self.sparse: + new_tally.sparsify() + return new_tally def summation(self, scores=[], filter_type=None, @@ -2759,6 +2809,10 @@ class Tally(object): filters[i] = CrossFilter(filters[i-1], filters[i], '+') tally_sum.add_filter(filters[-1]) + # If original tally was sparse, sparsify the tally summation + if self.sparse: + tally_sum.sparsify() + return tally_sum def diagonalize_filter(self, new_filter): @@ -2799,7 +2853,6 @@ class Tally(object): num_filter_bins = new_tally.num_filter_bins num_nuclides = new_tally.num_nuclides num_score_bins = new_tally.num_score_bins - new_shape = (num_filter_bins, num_nuclides, num_score_bins) # Determine "base" indices along the new "diagonal", and the factor # by which the "base" indices should be repeated to account for all @@ -2816,16 +2869,16 @@ class Tally(object): # Inject this Tally's data along the diagonal of the diagonalized Tally if self.sum is not None: - new_tally._sum = np.zeros(new_shape, dtype=np.float64) + new_tally._sum = np.zeros(self.shape, dtype=np.float64) new_tally._sum[diag_indices, :, :] = self.sum if self.sum_sq is not None: - new_tally._sum_sq = np.zeros(new_shape, dtype=np.float64) + new_tally._sum_sq = np.zeros(self.shape, dtype=np.float64) new_tally._sum_sq[diag_indices, :, :] = self.sum_sq if self.mean is not None: - new_tally._mean = np.zeros(new_shape, dtype=np.float64) + new_tally._mean = np.zeros(self.shape, dtype=np.float64) new_tally._mean[diag_indices, :, :] = self.mean if self.std_dev is not None: - new_tally._std_dev = np.zeros(new_shape, dtype=np.float64) + new_tally._std_dev = np.zeros(self.shape, dtype=np.float64) new_tally._std_dev[diag_indices, :, :] = self.std_dev # Correct each Filter's stride @@ -2834,6 +2887,10 @@ class Tally(object): filter.stride = stride stride *= filter.num_bins + # If original tally was sparse, sparsify the diagonalized tally + if self.sparse: + new_tally.sparsify + return new_tally From f2deefcf472cd607277208ee8c5f8f447179c70b Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sun, 13 Dec 2015 01:39:21 -0500 Subject: [PATCH 061/650] Fixed bugs in sparse tallies with filter diagonalization --- openmc/tallies.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index 9cac3a8482..f9d3599bda 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -2869,16 +2869,16 @@ class Tally(object): # Inject this Tally's data along the diagonal of the diagonalized Tally if self.sum is not None: - new_tally._sum = np.zeros(self.shape, dtype=np.float64) + new_tally._sum = np.zeros(new_tally.shape, dtype=np.float64) new_tally._sum[diag_indices, :, :] = self.sum if self.sum_sq is not None: - new_tally._sum_sq = np.zeros(self.shape, dtype=np.float64) + new_tally._sum_sq = np.zeros(new_tally.shape, dtype=np.float64) new_tally._sum_sq[diag_indices, :, :] = self.sum_sq if self.mean is not None: - new_tally._mean = np.zeros(self.shape, dtype=np.float64) + new_tally._mean = np.zeros(new_tally.shape, dtype=np.float64) new_tally._mean[diag_indices, :, :] = self.mean if self.std_dev is not None: - new_tally._std_dev = np.zeros(self.shape, dtype=np.float64) + new_tally._std_dev = np.zeros(new_tally.shape, dtype=np.float64) new_tally._std_dev[diag_indices, :, :] = self.std_dev # Correct each Filter's stride From 61aed1df1095cd750964e7289a3ee23eb8e433ca Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sun, 13 Dec 2015 01:47:38 -0500 Subject: [PATCH 062/650] Added docstrings for Tally sparsify and densify methods --- openmc/tallies.py | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index f9d3599bda..25bf2acb6a 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1150,10 +1150,21 @@ class Tally(object): return data def sparsify(self): - """ + """Convert tally data from NumPy arrays to SciPy list of lists (LIL) + sparse matrices. + + This method may be used to reduce the amount of data in memory during + tally data processing. The tally data will be stored as SciPy LIL + matrices internally within the Tally object. All tally data access + properties and methods will return data as a dense NumPy array. + + See also + -------- + Tally.densify() + """ - # FIXME: pandas dataframes, summation + # Convert NumPy arrays to SciPy sparse LIL matrices if self._sum is not None: self._sum = \ sps.lil_matrix(self._sum.flatten(), self._sum.shape) @@ -1170,14 +1181,24 @@ class Tally(object): self._sparse = True def densify(self): - """ + """Convert tally data from SciPy list of lists (LIL) sparse matrices + to NumPy arrrays. + + This method may be used to restore a sparse tally to its original + state. This method will have no effect on the state of the tally + unless the Tally.sparse() method has been called. + + See also + -------- + Tally.sparsify() + """ # If the tally is already dense, simply return if not self._sparse: return - # FIXME: pandas dataframes, summation + # Convert SciPy sparse LIL matrices to NumPy arrays if self._sum is not None: self._sum = np.reshape(self._sum.toarray(), self.shape) if self._sum_sq is not None: From e85b659977fd85005783ae9a6e9cd64297e5fd83 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sun, 13 Dec 2015 02:04:19 -0500 Subject: [PATCH 063/650] Added tally sparsification to MGXS class --- openmc/mgxs/mgxs.py | 78 +++++++++++++++++++++++++++++++++++++++++++++ openmc/tallies.py | 2 +- 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 597e28e292..3804199cc9 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -103,6 +103,9 @@ class MGXS(object): nuclides : list of str or 'sum' A list of nuclide string names (e.g., 'U-238', 'O-16') when by_nuclide is True and 'sum' when by_nuclide is False. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage """ @@ -121,6 +124,7 @@ class MGXS(object): self._tally_trigger = None self._tallies = None self._xs_tally = None + self._sparse = False self.name = name self.by_nuclide = by_nuclide @@ -146,6 +150,7 @@ class MGXS(object): clone._energy_groups = copy.deepcopy(self.energy_groups, memo) clone._tally_trigger = copy.deepcopy(self.tally_trigger, memo) clone._xs_tally = copy.deepcopy(self.xs_tally, memo) + clone._sparse = self.sparse clone._tallies = OrderedDict() for tally_type, tally in self.tallies.items(): @@ -199,6 +204,10 @@ class MGXS(object): def xs_tally(self): return self._xs_tally + @property + def sparse(self): + return self._sparse + @property def num_subdomains(self): tally = list(self.tallies.values())[0] @@ -504,6 +513,10 @@ class MGXS(object): self._xs_tally._mean = np.nan_to_num(self.xs_tally.mean) self._xs_tally._std_dev = np.nan_to_num(self.xs_tally.std_dev) + # Sparsify the MGXS derived tally + if self.sparse: + self.xs_tally.sparsify() + def load_from_statepoint(self, statepoint): """Extracts tallies in an OpenMC StatePoint with the data needed to compute multi-group cross sections. @@ -567,6 +580,9 @@ class MGXS(object): filter_bins, tally.nuclides) self.tallies[tally_type] = sp_tally + if self.sparse: + sp_tally.sparsify() + # Compute the cross section from the tallies self.compute_xs() @@ -765,6 +781,11 @@ class MGXS(object): # Compute the energy condensed multi-group cross section condensed_xs.compute_xs() + + # Sparsify the condensed MGXS + if self.sparse: + condensed_xs.sparsify() + return condensed_xs def get_subdomain_avg_xs(self, subdomains='all'): @@ -848,6 +869,10 @@ class MGXS(object): # Compute the subdomain-averaged multi-group cross section avg_xs.compute_xs() + # Sparsify the subdomain-averaged MGXS + if self.sparse: + avg_xs.sparsify() + return avg_xs def print_xs(self, subdomains='all', nuclides='all', xs_type='macro'): @@ -2078,6 +2103,59 @@ class Chi(MGXS): super(Chi, self).compute_xs() + def sparsify(self): + """Convert tally data from NumPy arrays to SciPy list of lists (LIL) + sparse matrices. + + This method may be used to reduce the amount of data in memory during + tally data processing. The tally data will be stored as SciPy LIL + matrices internally within the Tally object. All tally data access + properties and methods will return data as a dense NumPy array. + + See also + -------- + MGXS.densify(), Tally.sparsify(), Tally.densify() + + """ + + # Sparsify the derived MGXS tally + if self.xs_tally: + self.xs_tally.sparsify() + + # Sparsify the MGXS' base tallies + for tally_name in self.tallies: + self.tallies[tally_name].sparsify() + + self._sparse = True + + def densify(self): + """Convert tally data from SciPy list of lists (LIL) sparse matrices + to NumPy arrrays. + + This method may be used to restore a sparse tally to its original + state. This method will have no effect on the state of the tally + unless the Tally.sparse() method has been called. + + See also + -------- + MGXS.sparsify(), Tally.sparsify(), Tally.densify() + + """ + + # If the MGXS is already dense, simply return + if not self.sparse: + return + + # Densify the derived MGXS tally + if self.xs_tally: + self.xs_tally.densify() + + # Densify the MGXS' base tallies + for tally_name in self.tallies: + self.tallies[tally_name].densify() + + self._sparse = False + def get_xs(self, groups='all', subdomains='all', nuclides='all', xs_type='macro', order_groups='increasing', value='mean'): """Returns an array of the fission spectrum. diff --git a/openmc/tallies.py b/openmc/tallies.py index 25bf2acb6a..1ee1d88907 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1195,7 +1195,7 @@ class Tally(object): """ # If the tally is already dense, simply return - if not self._sparse: + if not self.sparse: return # Convert SciPy sparse LIL matrices to NumPy arrays From beb3189d8d988e66346de247cc667a1aa7c83915 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sun, 13 Dec 2015 11:14:01 -0500 Subject: [PATCH 064/650] Fixed bugs in tally sparsification which broke MGXS library --- openmc/mgxs/library.py | 32 +++++ openmc/mgxs/mgxs.py | 101 +++++----------- openmc/tallies.py | 266 +++++++++++++++++++++-------------------- 3 files changed, 197 insertions(+), 202 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index ef3e90fc41..ca9fa5d669 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -73,6 +73,9 @@ class Library(object): name : str, optional Name of the multi-group cross section library. Used as a label to identify tallies in OpenMC 'tallies.xml' file. + sparse : bool + Whether or not the Library's tallies use SciPy's LIL sparse matrix + format for compressed data storage """ @@ -92,6 +95,7 @@ class Library(object): self._all_mgxs = OrderedDict() self._sp_filename = None self._keff = None + self._sparse = False self.name = name self.openmc_geometry = openmc_geometry @@ -119,6 +123,7 @@ class Library(object): clone._all_mgxs = self.all_mgxs clone._sp_filename = self._sp_filename clone._keff = self._keff + clone._sparse = self.sparse clone._all_mgxs = OrderedDict() for domain in self.domains: @@ -208,6 +213,10 @@ class Library(object): def keff(self): return self._keff + @property + def sparse(self): + return self._sparse + @openmc_geometry.setter def openmc_geometry(self, openmc_geometry): cv.check_type('openmc_geometry', openmc_geometry, openmc.Geometry) @@ -286,6 +295,28 @@ class Library(object): cv.check_type('tally trigger', tally_trigger, openmc.Trigger) self._tally_trigger = tally_trigger + @sparse.setter + def sparse(self, sparse): + """Convert tally data from NumPy arrays to SciPy list of lists (LIL) + sparse matrices, and vice versa. + + This property may be used to reduce the amount of data in memory during + tally data processing. The tally data will be stored as SciPy LIL + matrices internally within the Tally object. All tally data access + properties and methods will return data as a dense NumPy array. + + """ + + cv.check_type('sparse', sparse, bool) + + # Sparsify or densify each MGXS in the Library + for domain in self.domains: + for mgxs_type in self.mgxs_types: + mgxs = self.get_mgxs(domain, mgxs_type) + mgxs.sparse = self.sparse + + self._sparse = sparse + def build_library(self): """Initialize MGXS objects in each domain and for each reaction type in the library. @@ -381,6 +412,7 @@ class Library(object): for mgxs_type in self.mgxs_types: mgxs = self.get_mgxs(domain, mgxs_type) mgxs.load_from_statepoint(statepoint) + mgxs.sparse = self.sparse def get_mgxs(self, domain, mgxs_type): """Return the MGXS object for some domain and reaction rate type. diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 3804199cc9..1b451affc9 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -258,6 +258,29 @@ class MGXS(object): cv.check_type('tally trigger', tally_trigger, openmc.Trigger) self._tally_trigger = tally_trigger + @sparse.setter + def sparse(self, sparse): + """Convert tally data from NumPy arrays to SciPy list of lists (LIL) + sparse matrices, and vice versa. + + This property may be used to reduce the amount of data in memory during + tally data processing. The tally data will be stored as SciPy LIL + matrices internally within the Tally object. All tally data access + properties and methods will return data as a dense NumPy array. + + """ + + cv.check_type('sparse', sparse, bool) + + # Sparsify or densify the derived MGXS tally and its base tallies + if self.xs_tally: + self.xs_tally.sparse = sparse + + for tally_name in self.tallies: + self.tallies[tally_name].sparse = sparse + + self._sparse = sparse + @staticmethod def get_mgxs(mgxs_type, domain=None, domain_type=None, energy_groups=None, by_nuclide=False, name=''): @@ -512,10 +535,7 @@ class MGXS(object): # Remove NaNs which may have resulted from divide-by-zero operations self._xs_tally._mean = np.nan_to_num(self.xs_tally.mean) self._xs_tally._std_dev = np.nan_to_num(self.xs_tally.std_dev) - - # Sparsify the MGXS derived tally - if self.sparse: - self.xs_tally.sparsify() + self.xs_tally.sparse = self.sparse def load_from_statepoint(self, statepoint): """Extracts tallies in an OpenMC StatePoint with the data needed to @@ -578,11 +598,9 @@ class MGXS(object): estimator=tally.estimator) sp_tally = sp_tally.get_slice(tally.scores, filters, filter_bins, tally.nuclides) + sp_tally.sparse = self.sparse self.tallies[tally_type] = sp_tally - if self.sparse: - sp_tally.sparsify() - # Compute the cross section from the tallies self.compute_xs() @@ -732,6 +750,7 @@ class MGXS(object): # Clone this MGXS to initialize the condensed version condensed_xs = copy.deepcopy(self) + condensed_xs.sparse = False condensed_xs.energy_groups = coarse_groups # Build energy indices to sum across @@ -781,11 +800,7 @@ class MGXS(object): # Compute the energy condensed multi-group cross section condensed_xs.compute_xs() - - # Sparsify the condensed MGXS - if self.sparse: - condensed_xs.sparsify() - + condensed_xs.sparse = self.sparse return condensed_xs def get_subdomain_avg_xs(self, subdomains='all'): @@ -828,8 +843,9 @@ class MGXS(object): # Clone this MGXS to initialize the subdomain-averaged version avg_xs = copy.deepcopy(self) + avg_xs.sparse = False - # If domain is distribcell, make the new domain 'cell' + # If domain is distribcell, make the new domain 'cell' if self.domain_type == 'distribcell': avg_xs.domain_type = 'cell' @@ -868,11 +884,7 @@ class MGXS(object): # Compute the subdomain-averaged multi-group cross section avg_xs.compute_xs() - - # Sparsify the subdomain-averaged MGXS - if self.sparse: - avg_xs.sparsify() - + avg_xs.sparse = self.sparse return avg_xs def print_xs(self, subdomains='all', nuclides='all', xs_type='macro'): @@ -2103,59 +2115,6 @@ class Chi(MGXS): super(Chi, self).compute_xs() - def sparsify(self): - """Convert tally data from NumPy arrays to SciPy list of lists (LIL) - sparse matrices. - - This method may be used to reduce the amount of data in memory during - tally data processing. The tally data will be stored as SciPy LIL - matrices internally within the Tally object. All tally data access - properties and methods will return data as a dense NumPy array. - - See also - -------- - MGXS.densify(), Tally.sparsify(), Tally.densify() - - """ - - # Sparsify the derived MGXS tally - if self.xs_tally: - self.xs_tally.sparsify() - - # Sparsify the MGXS' base tallies - for tally_name in self.tallies: - self.tallies[tally_name].sparsify() - - self._sparse = True - - def densify(self): - """Convert tally data from SciPy list of lists (LIL) sparse matrices - to NumPy arrrays. - - This method may be used to restore a sparse tally to its original - state. This method will have no effect on the state of the tally - unless the Tally.sparse() method has been called. - - See also - -------- - MGXS.sparsify(), Tally.sparsify(), Tally.densify() - - """ - - # If the MGXS is already dense, simply return - if not self.sparse: - return - - # Densify the derived MGXS tally - if self.xs_tally: - self.xs_tally.densify() - - # Densify the MGXS' base tallies - for tally_name in self.tallies: - self.tallies[tally_name].densify() - - self._sparse = False - def get_xs(self, groups='all', subdomains='all', nuclides='all', xs_type='macro', order_groups='increasing', value='mean'): """Returns an array of the fission spectrum. diff --git a/openmc/tallies.py b/openmc/tallies.py index 1ee1d88907..b57a0d228f 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -326,7 +326,8 @@ class Tally(object): # Convert NumPy arrays to SciPy sparse LIL matrices if self.sparse: - self._sum = sps.lil_matrix(self._sum.flatten(), self._sum.shape) + self._sum = \ + sps.lil_matrix(self._sum.flatten(), self._sum.shape) self._sum_sq = \ sps.lil_matrix(self._sum_sq.flatten(), self._sum_sq.shape) @@ -536,6 +537,48 @@ class Tally(object): cv.check_type('sum_sq', sum_sq, Iterable) self._sum_sq = sum_sq + @sparse.setter + def sparse(self, sparse): + """Convert tally data from NumPy arrays to SciPy list of lists (LIL) + sparse matrices, and vice versa. + + This property may be used to reduce the amount of data in memory during + tally data processing. The tally data will be stored as SciPy LIL + matrices internally within the Tally object. All tally data access + properties and methods will return data as a dense NumPy array. + + """ + + cv.check_type('sparse', sparse, bool) + + # Convert NumPy arrays to SciPy sparse LIL matrices + if sparse and not self.sparse: + if self._sum is not None: + self._sum = \ + sps.lil_matrix(self._sum.flatten(), self._sum.shape) + if self._sum_sq is not None: + self._sum_sq = \ + sps.lil_matrix(self._sum_sq.flatten(), self._sum_sq.shape) + if self._mean is not None: + self._mean = \ + sps.lil_matrix(self._mean.flatten(), self._mean.shape) + if self._std_dev is not None: + self._std_dev = \ + sps.lil_matrix(self._std_dev.flatten(), self._std_dev.shape) + self._sparse = True + + # Convert SciPy sparse LIL matrices to NumPy arrays + elif not sparse and self.sparse: + if self._sum is not None: + self._sum = np.reshape(self._sum.toarray(), self.shape) + if self._sum_sq is not None: + self._sum_sq = np.reshape(self._sum_sq.toarray(), self.shape) + if self._mean is not None: + self._mean = np.reshape(self._mean.toarray(), self.shape) + if self._std_dev is not None: + self._std_dev = np.reshape(self._std_dev.toarray(), self.shape) + self._sparse = False + def remove_score(self, score): """Remove a score from the tally @@ -1149,67 +1192,6 @@ class Tally(object): return data - def sparsify(self): - """Convert tally data from NumPy arrays to SciPy list of lists (LIL) - sparse matrices. - - This method may be used to reduce the amount of data in memory during - tally data processing. The tally data will be stored as SciPy LIL - matrices internally within the Tally object. All tally data access - properties and methods will return data as a dense NumPy array. - - See also - -------- - Tally.densify() - - """ - - # Convert NumPy arrays to SciPy sparse LIL matrices - if self._sum is not None: - self._sum = \ - sps.lil_matrix(self._sum.flatten(), self._sum.shape) - if self._sum_sq is not None: - self._sum_sq = \ - sps.lil_matrix(self._sum_sq.flatten(), self._sum_sq.shape) - if self._mean is not None: - self._mean = \ - sps.lil_matrix(self._mean.flatten(), self._mean.shape) - if self._std_dev is not None: - self._std_dev = \ - sps.lil_matrix(self._std_dev.flatten(), self._std_dev.shape) - - self._sparse = True - - def densify(self): - """Convert tally data from SciPy list of lists (LIL) sparse matrices - to NumPy arrrays. - - This method may be used to restore a sparse tally to its original - state. This method will have no effect on the state of the tally - unless the Tally.sparse() method has been called. - - See also - -------- - Tally.sparsify() - - """ - - # If the tally is already dense, simply return - if not self.sparse: - return - - # Convert SciPy sparse LIL matrices to NumPy arrays - if self._sum is not None: - self._sum = np.reshape(self._sum.toarray(), self.shape) - if self._sum_sq is not None: - self._sum_sq = np.reshape(self._sum_sq.toarray(), self.shape) - if self._mean is not None: - self._mean = np.reshape(self._mean.toarray(), self.shape) - if self._std_dev is not None: - self._std_dev = np.reshape(self._std_dev.toarray(), self.shape) - - self._sparse = False - def get_pandas_dataframe(self, filters=True, nuclides=True, scores=True, summary=None): """Build a Pandas DataFrame for the Tally data. @@ -1626,6 +1608,9 @@ class Tally(object): self_copy = copy.deepcopy(self) other_copy = copy.deepcopy(other) + self_copy.sparse = False + other_copy.sparse = False + # Align the tally data based on desired hybrid product data = self_copy._align_tally_data(other_copy, filter_product, nuclide_product, score_product) @@ -1691,7 +1676,8 @@ class Tally(object): else: all_nuclides = [self_copy.nuclides, other_copy.nuclides] for self_nuclide, other_nuclide in itertools.product(*all_nuclides): - new_nuclide = CrossNuclide(self_nuclide, other_nuclide, binary_op) + new_nuclide = \ + CrossNuclide(self_nuclide, other_nuclide, binary_op) new_tally.add_nuclide(new_nuclide) # Add scores to the new tally @@ -1700,7 +1686,8 @@ class Tally(object): for self_score in self_copy.scores: new_tally.add_score(self_score) else: - new_tally.num_score_bins = self_copy.num_score_bins * other_copy.num_score_bins + new_tally.num_score_bins = \ + self_copy.num_score_bins * other_copy.num_score_bins all_scores = [self_copy.scores, other_copy.scores] for self_score, other_score in itertools.product(*all_scores): new_score = CrossScore(self_score, other_score, binary_op) @@ -1717,7 +1704,6 @@ class Tally(object): def _align_tally_data(self, other, filter_product, nuclide_product, score_product): """Aligns data from two tallies for tally arithmetic. - This is a helper method to construct a dict of dicts of the "aligned" data arrays from each tally for tally arithmetic. The method analyzes the filters, scores and nuclides in both tallies and determines how to @@ -1726,7 +1712,6 @@ class Tally(object): 'tile' and 'repeat' operations to the new data arrays such that all possible combinations of the data in each tally's bins will be made when the arithmetic operation is applied to the arrays. - Parameters ---------- other : Tally @@ -1740,24 +1725,18 @@ class Tally(object): score_product : str The type of product (tensor or entrywise) to be performed between score data. - Returns ------- dict A dictionary of dictionaries to "aligned" 'mean' and 'std. dev' NumPy arrays for each tally's data. - """ - # Use dense NumPy arrays for data alignment operations - self_sparse = self.sparse - other_sparse = other.sparse - self.densify() - other.densify() - # Get the set of filters that each tally is missing - other_missing_filters = set(self.filters).difference(set(other.filters)) - self_missing_filters = set(other.filters).difference(set(self.filters)) + other_missing_filters = \ + set(self.filters).difference(set(other.filters)) + self_missing_filters = \ + set(other.filters).difference(set(self.filters)) # Add filters present in self but not in other to other for filter in other_missing_filters: @@ -1784,30 +1763,40 @@ class Tally(object): # Repeat and tile the data by nuclide in preparation for performing # the tensor product across nuclides. if nuclide_product == 'tensor': - self._mean = np.repeat(self.mean, other.num_nuclides, axis=1) - self._std_dev = np.repeat(self.std_dev, other.num_nuclides, axis=1) - other._mean = np.tile(other.mean, (1, self.num_nuclides, 1)) - other._std_dev = np.tile(other.std_dev, (1, self.num_nuclides, 1)) + self._mean = \ + np.repeat(self.mean, other.num_nuclides, axis=1) + self._std_dev = \ + np.repeat(self.std_dev, other.num_nuclides, axis=1) + other._mean = \ + np.tile(other.mean, (1, self.num_nuclides, 1)) + other._std_dev = \ + np.tile(other.std_dev, (1, self.num_nuclides, 1)) # Add nuclides to each tally such that each tally contains the complete - # set of nuclides necessary to perform an entrywise product. New nuclides - # added to a tally will have all their scores set to zero. + # set of nuclides necessary to perform an entrywise product. New + # nuclides added to a tally will have all their scores set to zero. else: # Get the set of nuclides that each tally is missing - other_missing_nuclides = set(self.nuclides).difference(set(other.nuclides)) - self_missing_nuclides = set(other.nuclides).difference(set(self.nuclides)) + other_missing_nuclides = \ + set(self.nuclides).difference(set(other.nuclides)) + self_missing_nuclides = \ + set(other.nuclides).difference(set(self.nuclides)) # Add nuclides present in self but not in other to other for nuclide in other_missing_nuclides: - other._mean = np.insert(other.mean, other.num_nuclides, 0, axis=1) - other._std_dev = np.insert(other.std_dev, other.num_nuclides, 0, axis=1) + other._mean = \ + np.insert(other.mean, other.num_nuclides, 0, axis=1) + other._std_dev = \ + np.insert(other.std_dev, other.num_nuclides, 0, axis=1) other.add_nuclide(nuclide) # Add nuclides present in other but not in self to self for nuclide in self_missing_nuclides: - self._mean = np.insert(self.mean, self.num_nuclides, 0, axis=1) - self._std_dev = np.insert(self.std_dev, self.num_nuclides, 0, axis=1) + self._mean = \ + np.insert(self.mean, self.num_nuclides, 0, axis=1) + self._std_dev = \ + np.insert(self.std_dev, self.num_nuclides, 0, axis=1) self.add_nuclide(nuclide) # Align other nuclides with self nuclides @@ -1821,30 +1810,40 @@ class Tally(object): # Repeat and tile the data by score in preparation for performing # the tensor product across scores. if score_product == 'tensor': - self._mean = np.repeat(self.mean, other.num_score_bins, axis=2) - self._std_dev = np.repeat(self.std_dev, other.num_score_bins, axis=2) - other._mean = np.tile(other.mean, (1, 1, self.num_score_bins)) - other._std_dev = np.tile(other.std_dev, (1, 1, self.num_score_bins)) + self._mean = \ + np.repeat(self.mean, other.num_score_bins, axis=2) + self._std_dev = \ + np.repeat(self.std_dev, other.num_score_bins, axis=2) + other._mean = \ + np.tile(other.mean, (1, 1, self.num_score_bins)) + other._std_dev = \ + np.tile(other.std_dev, (1, 1, self.num_score_bins)) - # Add scores to each tally such that each tally contains the complete set - # of scores necessary to perform an entrywise product. New scores added - # to a tally will be set to zero. + # Add scores to each tally such that each tally contains the complete + # set of scores necessary to perform an entrywise product. New scores + # added to a tally will be set to zero. else: # Get the set of scores that each tally is missing - other_missing_scores = set(self.scores).difference(set(other.scores)) - self_missing_scores = set(other.scores).difference(set(self.scores)) + other_missing_scores = \ + set(self.scores).difference(set(other.scores)) + self_missing_scores = \ + set(other.scores).difference(set(self.scores)) # Add scores present in self but not in other to other for score in other_missing_scores: - other._mean = np.insert(other.mean, other.num_score_bins, 0, axis=2) - other._std_dev = np.insert(other.std_dev, other.num_score_bins, 0, axis=2) + other._mean = \ + np.insert(other.mean, other.num_score_bins, 0, axis=2) + other._std_dev = \ + np.insert(other.std_dev, other.num_score_bins, 0, axis=2) other.add_score(score) # Add scores present in other but not in self to self for score in self_missing_scores: - self._mean = np.insert(self.mean, self.num_score_bins, 0, axis=2) - self._std_dev = np.insert(self.std_dev, self.num_score_bins, 0, axis=2) + self._mean = \ + np.insert(self.mean, self.num_score_bins, 0, axis=2) + self._std_dev = \ + np.insert(self.std_dev, self.num_score_bins, 0, axis=2) self.add_score(score) # Align other scores with self scores @@ -1867,12 +1866,6 @@ class Tally(object): filter.stride = stride stride *= filter.num_bins - # Restore tally operands to sparse storage - if self.sparse: - self.sparsify() - if other.sparse: - other.sparsify() - # Deep copy the mean and std dev data self_mean = copy.deepcopy(self.mean) self_std_dev = copy.deepcopy(self.std_dev) @@ -1886,6 +1879,7 @@ class Tally(object): data['other']['mean'] = other_mean data['self']['std. dev.'] = self_std_dev data['other']['std. dev.'] = other_std_dev + return data def swap_filters(self, filter1, filter2, inplace=False): @@ -2169,6 +2163,10 @@ class Tally(object): if isinstance(other, Tally): new_tally = self.hybrid_product(other, binary_op='+') + # If both tally operands were sparse, sparsify the new tally + if self.sparse and other.sparse: + new_tally.sparse = True + elif isinstance(other, Real): new_tally = Tally(name='derived') new_tally._derived = True @@ -2188,9 +2186,8 @@ class Tally(object): for score in self.scores: new_tally.add_score(score) - # If original tally operands were sparse, sparsify the sliced tally - if self.sparse and other.sparse: - new_tally.sparsify() + # If this tally operand is sparse, sparsify the new tally + new_tally.sparse = self.sparse else: msg = 'Unable to add "{0}" to Tally ID="{1}"'.format(other, self.id) @@ -2242,6 +2239,10 @@ class Tally(object): if isinstance(other, Tally): new_tally = self.hybrid_product(other, binary_op='-') + # If both tally operands were sparse, sparsify the new tally + if self.sparse and other.sparse: + new_tally.sparse = True + elif isinstance(other, Real): new_tally = Tally(name='derived') new_tally._derived = True @@ -2260,9 +2261,8 @@ class Tally(object): for score in self.scores: new_tally.add_score(score) - # If original tally operands were sparse, sparsify the sliced tally - if self.sparse and other.sparse: - new_tally.sparsify() + # If this tally operand is sparse, sparsify the new tally + new_tally.sparse = self.sparse else: msg = 'Unable to subtract "{0}" from Tally ' \ @@ -2315,6 +2315,10 @@ class Tally(object): if isinstance(other, Tally): new_tally = self.hybrid_product(other, binary_op='*') + # If original tally operands were sparse, sparsify the new tally + if self.sparse and other.sparse: + new_tally.sparse = True + elif isinstance(other, Real): new_tally = Tally(name='derived') new_tally._derived = True @@ -2333,9 +2337,8 @@ class Tally(object): for score in self.scores: new_tally.add_score(score) - # If original tally operands were sparse, sparsify the sliced tally - if self.sparse and other.sparse: - new_tally.sparsify() + # If this tally operand is sparse, sparsify the new tally + new_tally.sparse = self.sparse else: msg = 'Unable to multiply Tally ID="{0}" ' \ @@ -2388,6 +2391,10 @@ class Tally(object): if isinstance(other, Tally): new_tally = self.hybrid_product(other, binary_op='/') + # If original tally operands were sparse, sparsify the new tally + if self.sparse and other.sparse: + new_tally.sparse = True + elif isinstance(other, Real): new_tally = Tally(name='derived') new_tally._derived = True @@ -2406,9 +2413,8 @@ class Tally(object): for score in self.scores: new_tally.add_score(score) - # If original tally operands were sparse, sparsify the sliced tally - if self.sparse and other.sparse: - new_tally.sparsify() + # If this tally operand is sparse, sparsify the new tally + new_tally.sparse = self.sparse else: msg = 'Unable to divide Tally ID="{0}" ' \ @@ -2464,6 +2470,10 @@ class Tally(object): if isinstance(power, Tally): new_tally = self.hybrid_product(power, binary_op='^') + # If original tally operands were sparse, sparsify the new tally + if self.sparse and other.sparse: + new_tally.sparse = True + elif isinstance(power, Real): new_tally = Tally(name='derived') new_tally._derived = True @@ -2484,8 +2494,7 @@ class Tally(object): new_tally.add_score(score) # If original tally was sparse, sparsify the exponentiated tally - if self.sparse: - new_tally.sparsify() + new_tally.sparse = self.sparse else: msg = 'Unable to raise Tally ID="{0}" to ' \ @@ -2648,6 +2657,7 @@ class Tally(object): raise ValueError(msg) new_tally = copy.deepcopy(self) + new_tally.sparse = False if self.sum is not None: new_sum = self.get_values(scores, filters, filter_bins, @@ -2663,7 +2673,7 @@ class Tally(object): new_tally._mean = new_mean if self.std_dev is not None: new_std_dev = self.get_values(scores, filters, filter_bins, - nuclides, 'std_dev') + nuclides, 'std_dev') new_tally._std_dev = new_std_dev # SCORES @@ -2725,9 +2735,7 @@ class Tally(object): stride *= filter.num_bins # If original tally was sparse, sparsify the sliced tally - if self.sparse: - new_tally.sparsify() - + new_tally.sparse = self.sparse return new_tally def summation(self, scores=[], filter_type=None, @@ -2831,9 +2839,7 @@ class Tally(object): tally_sum.add_filter(filters[-1]) # If original tally was sparse, sparsify the tally summation - if self.sparse: - tally_sum.sparsify() - + tally_sum.sparse = self.sparse return tally_sum def diagonalize_filter(self, new_filter): @@ -2909,9 +2915,7 @@ class Tally(object): stride *= filter.num_bins # If original tally was sparse, sparsify the diagonalized tally - if self.sparse: - new_tally.sparsify - + new_tally.sparse = self.sparse return new_tally From 2893f10d3576d2b43391ff60d4fe6544c2ad038b Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Sun, 13 Dec 2015 13:47:27 -0500 Subject: [PATCH 065/650] addressed PR comments and changed tally.get_values() routine to return copy of data --- openmc/mgxs/mgxs.py | 8 +- openmc/tallies.py | 275 +++++++++++++++++++++----------------------- 2 files changed, 133 insertions(+), 150 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 597e28e292..7913747f98 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -92,7 +92,7 @@ class MGXS(object): xs_tally : Tally Derived tally for the multi-group cross section. This attribute is None unless the multi-group cross section has been computed. - num_sumbdomains : Integral + num_subdomains : Integral The number of subdomains is unity for 'material', 'cell' and 'universe' domain types. When the This is equal to the number of cell instances for 'distribcell' domain types (it is equal to unity prior to loading @@ -1421,7 +1421,7 @@ class AbsorptionXS(MGXS): class CaptureXS(MGXS): """A capture multi-group cross section. - The Neutron capture reaction rate is defined as the difference between + The neutron capture reaction rate is defined as the difference between OpenMC's 'absorption' and 'fission' reaction rate score types. This includes not only radiative capture, but all forms of neutron disappearance aside from fission (e.g., MT > 100). @@ -1723,8 +1723,8 @@ class ScatterMatrixXS(MGXS): if self.correction == 'P0': scatter_p1 = self.tallies['scatter-P1'] scatter_p1 = scatter_p1.get_slice(scores=['scatter-P1']) - energy_filter = copy.deepcopy(self.tallies['scatter']. - find_filter('energy')) + energy_filter = self.tallies['scatter'].find_filter('energy') + energy_filter = copy.deepcopy(energy_filter) scatter_p1 = scatter_p1.diagonalize_filter(energy_filter) rxn_tally = self.tallies['scatter'] - scatter_p1 else: diff --git a/openmc/tallies.py b/openmc/tallies.py index 8b4aa89ddd..62e304d941 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -24,6 +24,11 @@ if sys.version_info[0] >= 3: # "Static" variable for auto-generated Tally IDs AUTO_TALLY_ID = 10000 +# The tally arithmetic product types. The tensor product performs the full +# cross product of the data in two tallies with respect to a specified axis +# (filters, nuclides, or scores). The entrywise product performs the arithmetic +# operation entrywise across the entries in two tallies with respect to a +# specified axis. _PRODUCT_TYPES = ['tensor', 'entrywise'] def reset_auto_tally_id(): @@ -1005,7 +1010,12 @@ class Tally(object): """ - cv.check_iterable_type('scores', scores, basestring) + for score in scores: + if not isinstance(score, (basestring, CrossScore)): + msg = 'Unable to get score indices for score "{0}" in Tally ' \ + 'ID="{1}" since it is not a string or CrossScore'\ + .format(score, self.id) + raise ValueError(msg) # Determine the score indices from any of the requested scores if scores: @@ -1106,7 +1116,7 @@ class Tally(object): '\'rel_err\', \'sum\', or \'sum_sq\''.format(self.id, value) raise LookupError(msg) - return data + return data.copy() def get_pandas_dataframe(self, filters=True, nuclides=True, scores=True, summary=None): @@ -1426,20 +1436,20 @@ class Tally(object): # Pickle the Tally results to a file pickle.dump(tally_results, open(filename, 'wb')) - def hybrid_product(self, other, binary_op, filter_product='None', - nuclide_product='None', score_product='None'): + def hybrid_product(self, other, binary_op, filter_product=None, + nuclide_product=None, score_product=None): """Combines filters, scores and nuclides with another tally. This is a helper method for the tally arithmetic methods. It is called a "hybrid product" because it performs a combination of tensor - (or Kronecker) and entrywise (or Hadamard) products. The filters, - nuclides, and scores from both tallies are combined using an entrywise - (or Hadamard) product on matching filters. By default, if all nuclides - are identical in the two tallies, the entrywise product is performed - across nuclides; else the tensor product is performed. By default, if all - scores are identical in the two tallies, the entrywise product is - performed across scores; else the tensor product is performed. Users can - also call the method explicitly and specify the desired product. + (or Kronecker) and entrywise (or Hadamard) products. The filters from + both tallies are combined using an entrywise (or Hadamard) product on + matching filters. By default, if all nuclides are identical in the two + tallies, the entrywise product is performed across nuclides; else the + tensor product is performed. By default, if all scores are identical in + the two tallies, the entrywise product is performed across scores; else + the tensor product is performed. Users can also call the method + explicitly and specify the desired product. Parameters ---------- @@ -1477,7 +1487,7 @@ class Tally(object): """ # Set default value for filter product if it was not set - if filter_product == 'None': + if filter_product is None: filter_product = 'entrywise' elif filter_product == 'tensor': msg = 'Unable to perform Tally arithmetic with a tensor product' \ @@ -1485,14 +1495,14 @@ class Tally(object): raise ValueError(msg) # Set default value for nuclide product if it was not set - if nuclide_product == 'None': + if nuclide_product is None: if self.nuclides == other.nuclides: nuclide_product = 'entrywise' else: nuclide_product = 'tensor' # Set default value for score product if it was not set - if score_product == 'None': + if score_product is None: if self.scores == other.scores: score_product = 'entrywise' else: @@ -1520,10 +1530,7 @@ class Tally(object): # Query the mean and std dev so the tally data is read in from file # if it has not already been read in. - self.mean - self.std_dev - other.mean - other.std_dev + self.mean, self.std_dev, other.mean, other.std_dev # Create copies of self and other tallies to rearrange for tally # arithmetic @@ -1581,7 +1588,7 @@ class Tally(object): # Add filters to the new tally if filter_product == 'entrywise': for self_filter in self_copy.filters: - new_tally.filters.append(self_filter) + new_tally.add_filter(self_filter) else: all_filters = [self_copy.filters, other_copy.filters] for self_filter, other_filter in itertools.product(*all_filters): @@ -1591,7 +1598,7 @@ class Tally(object): # Add nuclides to the new tally if nuclide_product == 'entrywise': for self_nuclide in self_copy.nuclides: - new_tally.nuclides.append(self_nuclide) + new_tally.add_nuclide(self_nuclide) else: all_nuclides = [self_copy.nuclides, other_copy.nuclides] for self_nuclide, other_nuclide in itertools.product(*all_nuclides): @@ -1677,7 +1684,7 @@ class Tally(object): # If necessary, swap other filter if other_index != i: - other.swap_filters(filter, other.filters[i], inplace=True) + other._swap_filters(filter, other.filters[i]) # Repeat and tile the data by nuclide in preparation for performing # the tensor product across nuclides. @@ -1710,11 +1717,11 @@ class Tally(object): # Align other nuclides with self nuclides for i, nuclide in enumerate(self.nuclides): - other_index = other.nuclides.index(nuclide) + other_index = other.get_nuclide_index(nuclide) # If necessary, swap other nuclide if other_index != i: - other.swap_nuclides(nuclide, other.nuclides[i]) + other._swap_nuclides(nuclide, other.nuclides[i]) # Repeat and tile the data by score in preparation for performing # the tensor product across scores. @@ -1744,6 +1751,7 @@ class Tally(object): self._mean = np.insert(self.mean, self.num_score_bins, 0, axis=2) self._std_dev = np.insert(self.std_dev, self.num_score_bins, 0, axis=2) self.add_score(score) + self.num_score_bins = self.num_score_bins + 1 # Align other scores with self scores for i, score in enumerate(self.scores): @@ -1751,7 +1759,7 @@ class Tally(object): # If necessary, swap other score if other_index != i: - other.swap_scores(score, other.scores[i]) + other._swap_scores(score, other.scores[i]) # Correct the stride for other filters stride = other.num_nuclides * other.num_score_bins @@ -1765,22 +1773,16 @@ class Tally(object): filter.stride = stride stride *= filter.num_bins - # Deep copy the mean and std dev data - self_mean = copy.deepcopy(self.mean) - self_std_dev = copy.deepcopy(self.std_dev) - other_mean = copy.deepcopy(other.mean) - other_std_dev = copy.deepcopy(other.std_dev) - data = {} data['self'] = {} data['other'] = {} - data['self']['mean'] = self_mean - data['other']['mean'] = other_mean - data['self']['std. dev.'] = self_std_dev - data['other']['std. dev.'] = other_std_dev + data['self']['mean'] = self.mean + data['other']['mean'] = other.mean + data['self']['std. dev.'] = self.std_dev + data['other']['std. dev.'] = other.std_dev return data - def swap_filters(self, filter1, filter2, inplace=False): + def _swap_filters(self, filter1, filter2): """Reverse the ordering of two filters in this tally This is a helper method for tally arithmetic which helps align the data @@ -1795,26 +1797,16 @@ class Tally(object): filter2 : Filter The filter to swap with filter1 - inplace : bool, optional - Whether to perform operation inplace or return new tally with the - filters swapped. - - Returns - ------- - swap_tally - If inplace is false, a copy of this tally with the filters swapped. - Otherwise, nothing is returned. - Raises ------ ValueError - If this is a derived tally or this method is called before the tally - is populated with data by the StatePoint.read_results() method. + If this method is called before the mean and std dev is computed + for this tally. """ # Check that results have been read - if not self.derived and self.sum is None: + if self.sum is None or self.std_dev is None: msg = 'Unable to use tally arithmetic with Tally ID="{0}" ' \ 'since it does not contain any results.'.format(self.id) raise ValueError(msg) @@ -1822,6 +1814,7 @@ class Tally(object): cv.check_type('filter1', filter1, Filter) cv.check_type('filter2', filter2, Filter) + # Check that the filters exist in the tally and are not the same if filter1 == filter2: msg = 'Unable to swap a filter with itself' raise ValueError(msg) @@ -1834,25 +1827,15 @@ class Tally(object): 'does not contain such a filter'.format(filter2.type, self.id) raise ValueError(msg) - # Create a copy of the tally that preserves the original data formatting - # throughout swapping process - tally_copy = copy.deepcopy(self) - - # Set the swap tally - if inplace: - swap_tally = self - else: - swap_tally = copy.deepcopy(self) - # Swap the filters in the copied version of this Tally - filter1_index = swap_tally.filters.index(filter1) - filter2_index = swap_tally.filters.index(filter2) - swap_tally.filters[filter1_index] = filter2 - swap_tally.filters[filter2_index] = filter1 + filter1_index = self.filters.index(filter1) + filter2_index = self.filters.index(filter2) + self.filters[filter1_index] = filter2 + self.filters[filter2_index] = filter1 # Update the strides for each of the filters - stride = swap_tally.num_nuclides * swap_tally.num_score_bins - for filter in reversed(swap_tally.filters): + stride = self.num_nuclides * self.num_score_bins + for filter in reversed(self.filters): filter.stride = stride stride *= filter.num_bins @@ -1868,46 +1851,25 @@ class Tally(object): else: filter2_bins = [filter2.get_bin(i) for i in range(filter2.num_bins)] - # Adjust the sum data array to relect the new filter order - if swap_tally.sum is not None: - for bin1, bin2 in itertools.product(filter1_bins, filter2_bins): - filter_bins = [(bin1,), (bin2,)] - data = tally_copy.get_values( - filters=filters, filter_bins=filter_bins, value='sum') - indices = swap_tally.get_filter_indices(filters, filter_bins) - swap_tally.sum[indices, :, :] = data - - # Adjust the sum_sq data array to relect the new filter order - if swap_tally.sum_sq is not None: - for bin1, bin2 in itertools.product(filter1_bins, filter2_bins): - filter_bins = [(bin1,), (bin2,)] - data = tally_copy.get_values( - filters=filters, filter_bins=filter_bins, value='sum_sq') - indices = swap_tally.get_filter_indices(filters, filter_bins) - swap_tally.sum_sq[indices, :, :] = data - # Adjust the mean data array to relect the new filter order - if swap_tally.mean is not None: + if self.mean is not None: for bin1, bin2 in itertools.product(filter1_bins, filter2_bins): filter_bins = [(bin1,), (bin2,)] - data = tally_copy.get_values( + data = self.get_values( filters=filters, filter_bins=filter_bins, value='mean') - indices = swap_tally.get_filter_indices(filters, filter_bins) - swap_tally._mean[indices, :, :] = data + indices = self.get_filter_indices(filters, filter_bins) + self._mean[indices, :, :] = data # Adjust the std_dev data array to relect the new filter order - if swap_tally.std_dev is not None: + if self.std_dev is not None: for bin1, bin2 in itertools.product(filter1_bins, filter2_bins): filter_bins = [(bin1,), (bin2,)] - data = tally_copy.get_values( + data = self.get_values( filters=filters, filter_bins=filter_bins, value='std_dev') - indices = swap_tally.get_filter_indices(filters, filter_bins) - swap_tally._std_dev[indices, :, :] = data + indices = self.get_filter_indices(filters, filter_bins) + self._std_dev[indices, :, :] = data - if not inplace: - return swap_tally - - def swap_nuclides(self, nuclide1, nuclide2): + def _swap_nuclides(self, nuclide1, nuclide2): """Reverse the ordering of two nuclides in this tally This is a helper method for tally arithmetic which helps align the data @@ -1925,44 +1887,52 @@ class Tally(object): Raises ------ ValueError - If this is a derived tally or this method is called before the tally - is populated with data by the StatePoint.read_results() method. + If this method is called before the mean and std dev is computed + for this tally. """ # Check that results have been read - if not self.derived and self.sum is None: + if self.sum is None or self.std_dev is None: msg = 'Unable to use tally arithmetic with Tally ID="{0}" ' \ 'since it does not contain any results.'.format(self.id) raise ValueError(msg) + cv.check_type('nuclide1', nuclide1, Nuclide) + cv.check_type('nuclide2', nuclide2, Nuclide) + + # Check that the nuclides exist in the tally and are not the same + if nuclide1 == nuclide2: + msg = 'Unable to swap a nuclide with itself' + raise ValueError(msg) + elif nuclide1 not in self.nuclides: + msg = 'Unable to swap nuclide1 "{0}" in Tally ID="{1}" since it ' \ + 'does not contain such a nuclide'\ + .format(nuclide1.name, self.id) + raise ValueError(msg) + elif nuclide2 not in self.nuclides: + msg = 'Unable to swap "{0}" nuclide2 in Tally ID="{1}" since it ' \ + 'does not contain such a nuclide'\ + .format(nuclide2.name, self.id) + raise ValueError(msg) + # Swap the nuclides in the Tally - nuclide1_index = self.nuclides.index(nuclide1) - nuclide2_index = self.nuclides.index(nuclide2) + nuclide1_index = self.get_nuclide_index(nuclide1) + nuclide2_index = self.get_nuclide_index(nuclide2) self.nuclides[nuclide1_index] = nuclide2 self.nuclides[nuclide2_index] = nuclide1 - # Copy the tally data - self_mean = copy.deepcopy(self.mean) - self_std_dev = copy.deepcopy(self.std_dev) + # Swap the mean and std dev data + nuclide1_mean = self._mean[:,nuclide1_index,:].copy() + nuclide2_mean = self._mean[:,nuclide2_index,:].copy() + nuclide1_std_dev = self._std_dev[:,nuclide1_index,:].copy() + nuclide2_std_dev = self._std_dev[:,nuclide2_index,:].copy() + self._mean[:,nuclide2_index,:] = nuclide1_mean + self._mean[:,nuclide1_index,:] = nuclide2_mean + self._std_dev[:,nuclide2_index,:] = nuclide1_std_dev + self._std_dev[:,nuclide1_index,:] = nuclide2_std_dev - # Swap nuclide 1 in place of nuclide 2 - self._mean = np.delete(self.mean, nuclide2_index, axis=1) - self._mean = np.insert(self.mean, nuclide2_index, - self_mean[:,nuclide1_index,:], axis=1) - self._std_dev = np.delete(self.std_dev, nuclide2_index, axis=1) - self._std_dev = np.insert(self.std_dev, nuclide2_index, - self_mean[:,nuclide1_index,:], axis=1) - - # Swap nuclide 2 in place of nuclide 1 - self._mean = np.delete(self.mean, nuclide1_index, axis=1) - self._mean = np.insert(self.mean, nuclide1_index, - self_mean[:,nuclide2_index,:], axis=1) - self._std_dev = np.delete(self.std_dev, nuclide1_index, axis=1) - self._std_dev = np.insert(self.std_dev, nuclide1_index, - self_mean[:,nuclide2_index,:], axis=1) - - def swap_scores(self, score1, score2): + def _swap_scores(self, score1, score2): """Reverse the ordering of two scores in this tally This is a helper method for tally arithmetic which helps align the data @@ -1971,51 +1941,64 @@ class Tally(object): Parameters ---------- - score1 : Score + score1 : str or CrossScore The score to swap with score2 - score2 : Score + score2 : str or CrossScore The score to swap with score1 Raises ------ ValueError - If this is a derived tally or this method is called before the tally - is populated with data by the StatePoint.read_results() method. + If this method is called before the mean and std dev is computed + for this tally. """ # Check that results have been read - if not self.derived and self.sum is None: + if self.sum is None or self.std_dev is None: msg = 'Unable to use tally arithmetic with Tally ID="{0}" ' \ 'since it does not contain any results.'.format(self.id) raise ValueError(msg) + # Check that the scores are valid + if not isinstance(score1, (basestring, CrossScore)): + msg = 'Unable to swap score "{0}" in Tally ID="{1}" since it is ' \ + 'not a string or CrossScore'.format(score1, self.id) + raise ValueError(msg) + elif not isinstance(score2, (basestring, CrossScore)): + msg = 'Unable to swap score "{0}" in Tally ID="{1}" since it is ' \ + 'not a string or CrossScore'.format(score2, self.id) + raise ValueError(msg) + + # Check that the scores exist in the tally and are not the same + if score1 == score2: + msg = 'Unable to swap a score with itself' + raise ValueError(msg) + elif score1 not in self.scores: + msg = 'Unable to swap score1 "{0}" in Tally ID="{1}" since it ' \ + 'does not contain such a score'.format(score1, self.id) + raise ValueError(msg) + elif score2 not in self.scores: + msg = 'Unable to swap score2 "{0}" in Tally ID="{1}" since it ' \ + 'does not contain such a score'.format(score2, self.id) + raise ValueError(msg) + # Swap the scores in the Tally - score1_index = self.scores.index(score1) - score2_index = self.scores.index(score2) + score1_index = self.get_score_index(score1) + score2_index = self.get_score_index(score2) self.scores[score1_index] = score2 self.scores[score2_index] = score1 - # Copy the tally data - self_mean = copy.deepcopy(self.mean) - self_std_dev = copy.deepcopy(self.std_dev) - - # Swap score 1 in place of score 2 - self._mean = np.delete(self.mean, score2_index, axis=2) - self._mean = np.insert(self.mean, score2_index, - self_mean[:,:,score1_index], axis=2) - self._std_dev = np.delete(self.std_dev, score2_index, axis=2) - self._std_dev = np.insert(self.std_dev, score2_index, - self_mean[:,:,score1_index], axis=2) - - # Swap score 2 in place of score 1 - self._mean = np.delete(self.mean, score1_index, axis=2) - self._mean = np.insert(self.mean, score1_index, - self_mean[:,:,score2_index], axis=2) - self._std_dev = np.delete(self.std_dev, score1_index, axis=2) - self._std_dev = np.insert(self.std_dev, score1_index, - self_mean[:,:,score2_index], axis=2) + # Swap the mean and std dev data + score1_mean = self._mean[:,:,score1_index].copy() + score2_mean = self._mean[:,:,score2_index].copy() + score1_std_dev = self._std_dev[:,:,score1_index].copy() + score2_std_dev = self._std_dev[:,:,score2_index].copy() + self._mean[:,:,score2_index] = score1_mean + self._mean[:,:,score1_index] = score2_mean + self._std_dev[:,:,score2_index] = score1_std_dev + self._std_dev[:,:,score1_index] = score2_std_dev def __add__(self, other): """Adds this tally to another tally or scalar value. From 52d879ebd39ff36c93e658e55505dac089b224d1 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Sun, 13 Dec 2015 15:07:46 -0500 Subject: [PATCH 066/650] modified swap functions to swap sum and sum_sq, if present --- openmc/tallies.py | 108 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 81 insertions(+), 27 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index 62e304d941..d624cfed4e 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1800,13 +1800,13 @@ class Tally(object): Raises ------ ValueError - If this method is called before the mean and std dev is computed - for this tally. + If this is a derived tally or this method is called before the tally + is populated with data by the StatePoint.read_results() method. """ # Check that results have been read - if self.sum is None or self.std_dev is None: + if not self.derived and self.sum is None: msg = 'Unable to use tally arithmetic with Tally ID="{0}" ' \ 'since it does not contain any results.'.format(self.id) raise ValueError(msg) @@ -1851,6 +1851,24 @@ class Tally(object): else: filter2_bins = [filter2.get_bin(i) for i in range(filter2.num_bins)] + # Adjust the sum data array to relect the new filter order + if self.sum is not None: + for bin1, bin2 in itertools.product(filter1_bins, filter2_bins): + filter_bins = [(bin1,), (bin2,)] + data = self.get_values( + filters=filters, filter_bins=filter_bins, value='sum') + indices = self.get_filter_indices(filters, filter_bins) + self.sum[indices, :, :] = data + + # Adjust the sum_sq data array to relect the new filter order + if self.sum_sq is not None: + for bin1, bin2 in itertools.product(filter1_bins, filter2_bins): + filter_bins = [(bin1,), (bin2,)] + data = self.get_values( + filters=filters, filter_bins=filter_bins, value='sum_sq') + indices = self.get_filter_indices(filters, filter_bins) + self.sum_sq[indices, :, :] = data + # Adjust the mean data array to relect the new filter order if self.mean is not None: for bin1, bin2 in itertools.product(filter1_bins, filter2_bins): @@ -1887,13 +1905,13 @@ class Tally(object): Raises ------ ValueError - If this method is called before the mean and std dev is computed - for this tally. + If this is a derived tally or this method is called before the tally + is populated with data by the StatePoint.read_results() method. """ # Check that results have been read - if self.sum is None or self.std_dev is None: + if not self.derived and self.sum is None: msg = 'Unable to use tally arithmetic with Tally ID="{0}" ' \ 'since it does not contain any results.'.format(self.id) raise ValueError(msg) @@ -1922,15 +1940,33 @@ class Tally(object): self.nuclides[nuclide1_index] = nuclide2 self.nuclides[nuclide2_index] = nuclide1 - # Swap the mean and std dev data - nuclide1_mean = self._mean[:,nuclide1_index,:].copy() - nuclide2_mean = self._mean[:,nuclide2_index,:].copy() - nuclide1_std_dev = self._std_dev[:,nuclide1_index,:].copy() - nuclide2_std_dev = self._std_dev[:,nuclide2_index,:].copy() - self._mean[:,nuclide2_index,:] = nuclide1_mean - self._mean[:,nuclide1_index,:] = nuclide2_mean - self._std_dev[:,nuclide2_index,:] = nuclide1_std_dev - self._std_dev[:,nuclide1_index,:] = nuclide2_std_dev + # Adjust the sum data array to relect the new nuclide order + if self.sum is not None: + nuclide1_sum = self._sum[:,nuclide1_index,:].copy() + nuclide2_sum = self._sum[:,nuclide2_index,:].copy() + self._sum[:,nuclide2_index,:] = nuclide1_sum + self._sum[:,nuclide1_index,:] = nuclide2_sum + + # Adjust the sum_sq data array to relect the new nuclide order + if self.sum_sq is not None: + nuclide1_sum_sq = self._sum_sq[:,nuclide1_index,:].copy() + nuclide2_sum_sq = self._sum_sq[:,nuclide2_index,:].copy() + self._sum_sq[:,nuclide2_index,:] = nuclide1_sum_sq + self._sum_sq[:,nuclide1_index,:] = nuclide2_sum_sq + + # Adjust the mean data array to relect the new nuclide order + if self.mean is not None: + nuclide1_mean = self._mean[:,nuclide1_index,:].copy() + nuclide2_mean = self._mean[:,nuclide2_index,:].copy() + self._mean[:,nuclide2_index,:] = nuclide1_mean + self._mean[:,nuclide1_index,:] = nuclide2_mean + + # Adjust the std_dev data array to relect the new nuclide order + if self.std_dev is not None: + nuclide1_std_dev = self._std_dev[:,nuclide1_index,:].copy() + nuclide2_std_dev = self._std_dev[:,nuclide2_index,:].copy() + self._std_dev[:,nuclide2_index,:] = nuclide1_std_dev + self._std_dev[:,nuclide1_index,:] = nuclide2_std_dev def _swap_scores(self, score1, score2): """Reverse the ordering of two scores in this tally @@ -1950,13 +1986,13 @@ class Tally(object): Raises ------ ValueError - If this method is called before the mean and std dev is computed - for this tally. + If this is a derived tally or this method is called before the tally + is populated with data by the StatePoint.read_results() method. """ # Check that results have been read - if self.sum is None or self.std_dev is None: + if not self.derived and self.sum is None: msg = 'Unable to use tally arithmetic with Tally ID="{0}" ' \ 'since it does not contain any results.'.format(self.id) raise ValueError(msg) @@ -1990,15 +2026,33 @@ class Tally(object): self.scores[score1_index] = score2 self.scores[score2_index] = score1 - # Swap the mean and std dev data - score1_mean = self._mean[:,:,score1_index].copy() - score2_mean = self._mean[:,:,score2_index].copy() - score1_std_dev = self._std_dev[:,:,score1_index].copy() - score2_std_dev = self._std_dev[:,:,score2_index].copy() - self._mean[:,:,score2_index] = score1_mean - self._mean[:,:,score1_index] = score2_mean - self._std_dev[:,:,score2_index] = score1_std_dev - self._std_dev[:,:,score1_index] = score2_std_dev + # Adjust the sum data array to relect the new nuclide order + if self.sum is not None: + score1_sum = self._sum[:,:,score1_index].copy() + score2_sum = self._sum[:,:,score2_index].copy() + self._sum[:,:,score2_index] = score1_sum + self._sum[:,:,score1_index] = score2_sum + + # Adjust the sum_sq data array to relect the new nuclide order + if self.sum_sq is not None: + score1_sum_sq = self._sum_sq[:,:,score1_index].copy() + score2_sum_sq = self._sum_sq[:,:,score2_index].copy() + self._sum_sq[:,:,score2_index] = score1_sum_sq + self._sum_sq[:,:,score1_index] = score2_sum_sq + + # Adjust the mean data array to relect the new nuclide order + if self.mean is not None: + score1_mean = self._mean[:,:,score1_index].copy() + score2_mean = self._mean[:,:,score2_index].copy() + self._mean[:,:,score2_index] = score1_mean + self._mean[:,:,score1_index] = score2_mean + + # Adjust the std_dev data array to relect the new nuclide order + if self.std_dev is not None: + score1_std_dev = self._std_dev[:,:,score1_index].copy() + score2_std_dev = self._std_dev[:,:,score2_index].copy() + self._std_dev[:,:,score2_index] = score1_std_dev + self._std_dev[:,:,score1_index] = score2_std_dev def __add__(self, other): """Adds this tally to another tally or scalar value. From 16fcc9300caf8e5bb0a52ca648ecacf61a8b3aee Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Mon, 14 Dec 2015 09:32:10 -0500 Subject: [PATCH 067/650] Remove unused nonzero method and added docstring for shape property to Tally Python API class --- openmc/tallies.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index b57a0d228f..0954122d80 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -70,6 +70,9 @@ class Tally(object): Total number of filter bins accounting for all filters num_bins : Integral Total number of bins for the tally + shape : 3-tuple of Integral + The shape of the tally data array ordered as the number of filter bins, + nuclide bins and score bins num_realizations : Integral Total number of realizations with_summary : bool @@ -251,10 +254,6 @@ class Tally(object): def scores(self): return self._scores - @property - def shape(self): - return (self.num_filter_bins, self.num_nuclides, self.num_score_bins) - @property def num_scores(self): return len(self._scores) @@ -279,6 +278,10 @@ class Tally(object): num_bins *= self.num_score_bins return num_bins + @property + def shape(self): + return (self.num_filter_bins, self.num_nuclides, self.num_score_bins) + @property def estimator(self): return self._estimator @@ -312,10 +315,6 @@ class Tally(object): sum = data['sum'] sum_sq = data['sum_sq'] - # Define a routine to convert 0 to 1 - def nonzero(val): - return 1 if not val else val - # Reshape the results arrays sum = np.reshape(sum, self.shape) sum_sq = np.reshape(sum_sq, self.shape) From 50519fe62d57036dd80a9249d698db4974d76d22 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Mon, 14 Dec 2015 11:34:52 -0500 Subject: [PATCH 068/650] removed num_score_bins from Tally object and removed sum and sum_sq from tally arithmetic --- openmc/mgxs/mgxs.py | 4 +- openmc/statepoint.py | 2 - openmc/summary.py | 2 - openmc/tallies.py | 107 ++++++++----------------------------------- 4 files changed, 21 insertions(+), 94 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 7913747f98..7f521a975c 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -755,7 +755,7 @@ class MGXS(object): # Reshape condensed data arrays with one dimension for all filters new_shape = \ - (tally.num_filter_bins, tally.num_nuclides, tally.num_score_bins,) + (tally.num_filter_bins, tally.num_nuclides, tally.num_scores,) mean = np.reshape(mean, new_shape) std_dev = np.reshape(std_dev, new_shape) @@ -837,7 +837,7 @@ class MGXS(object): # Reshape averaged data arrays with one dimension for all filters new_shape = \ - (tally.num_filter_bins, tally.num_nuclides, tally.num_score_bins,) + (tally.num_filter_bins, tally.num_nuclides, tally.num_scores,) mean = np.reshape(mean, new_shape) std_dev = np.reshape(std_dev, new_shape) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 2edf9badd4..4ab7ddd5d1 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -394,8 +394,6 @@ class StatePoint(object): # Read score bins n_score_bins = self._f['{0}{1}/n_score_bins'.format(base, tally_key)].value - tally.num_score_bins = n_score_bins - scores = self._f['{0}{1}/score_bins'.format( base, tally_key)].value n_user_scores = self._f['{0}{1}/n_user_score_bins' diff --git a/openmc/summary.py b/openmc/summary.py index 4b1088e827..c14f9073d8 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -524,8 +524,6 @@ class Summary(object): scores = self._f['{0}/score_bins'.format(subbase)].value for score in scores: tally.add_score(score.decode()) - num_score_bins = self._f['{0}/n_score_bins'.format(subbase)][...] - tally.num_score_bins = num_score_bins # Read filter metadata num_filters = self._f['{0}/n_filters'.format(subbase)].value diff --git a/openmc/tallies.py b/openmc/tallies.py index d624cfed4e..d097ba0a6c 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -64,10 +64,6 @@ class Tally(object): Type of estimator for the tally triggers : list of openmc.trigger.Trigger List of tally triggers - num_score_bins : Integral - Total number of scores, accounting for the fact that a single - user-specified score, e.g. scatter-P3 or flux-Y2,2, might have multiple - bins num_scores : Integral Total number of user-specified scores num_filter_bins : Integral @@ -100,7 +96,6 @@ class Tally(object): self._estimator = None self._triggers = [] - self._num_score_bins = 0 self._num_realizations = 0 self._with_summary = False @@ -123,7 +118,6 @@ class Tally(object): clone.id = self.id clone.name = self.name clone.estimator = self.estimator - clone.num_score_bins = self.num_score_bins clone.num_realizations = self.num_realizations clone._sum = copy.deepcopy(self._sum, memo) clone._sum_sq = copy.deepcopy(self._sum_sq, memo) @@ -252,10 +246,6 @@ class Tally(object): def num_scores(self): return len(self._scores) - @property - def num_score_bins(self): - return self._num_score_bins - @property def num_filter_bins(self): num_bins = 1 @@ -269,7 +259,7 @@ class Tally(object): def num_bins(self): num_bins = self.num_filter_bins num_bins *= self.num_nuclides - num_bins *= self.num_score_bins + num_bins *= self.num_scores return num_bins @property @@ -312,7 +302,7 @@ class Tally(object): # Reshape the results arrays new_shape = (nonzero(self.num_filter_bins), nonzero(self.num_nuclides), - nonzero(self.num_score_bins)) + nonzero(self.num_scores)) sum = np.reshape(sum, new_shape) sum_sq = np.reshape(sum_sq, new_shape) @@ -468,10 +458,6 @@ class Tally(object): else: self._scores.append(score) - @num_score_bins.setter - def num_score_bins(self, num_score_bins): - self._num_score_bins = num_score_bins - @num_realizations.setter def num_realizations(self, num_realizations): cv.check_type('number of realizations', num_realizations, Integral) @@ -1286,7 +1272,7 @@ class Tally(object): for filter in self.filters: new_shape += (filter.num_bins, ) new_shape += (self.num_nuclides,) - new_shape += (self.num_score_bins,) + new_shape += (self.num_scores,) # Reshape the data with one dimension for each filter data = np.reshape(data, new_shape) @@ -1607,18 +1593,16 @@ class Tally(object): # Add scores to the new tally if score_product == 'entrywise': - new_tally.num_score_bins = self_copy.num_score_bins for self_score in self_copy.scores: new_tally.add_score(self_score) else: - new_tally.num_score_bins = self_copy.num_score_bins * other_copy.num_score_bins all_scores = [self_copy.scores, other_copy.scores] for self_score, other_score in itertools.product(*all_scores): new_score = CrossScore(self_score, other_score, binary_op) new_tally.add_score(new_score) # Correct each Filter's stride - stride = new_tally.num_nuclides * new_tally.num_score_bins + stride = new_tally.num_nuclides * new_tally.num_scores for filter in reversed(new_tally.filters): filter.stride = stride stride *= filter.num_bins @@ -1726,10 +1710,10 @@ class Tally(object): # Repeat and tile the data by score in preparation for performing # the tensor product across scores. if score_product == 'tensor': - self._mean = np.repeat(self.mean, other.num_score_bins, axis=2) - self._std_dev = np.repeat(self.std_dev, other.num_score_bins, axis=2) - other._mean = np.tile(other.mean, (1, 1, self.num_score_bins)) - other._std_dev = np.tile(other.std_dev, (1, 1, self.num_score_bins)) + self._mean = np.repeat(self.mean, other.num_scores, axis=2) + self._std_dev = np.repeat(self.std_dev, other.num_scores, axis=2) + other._mean = np.tile(other.mean, (1, 1, self.num_scores)) + other._std_dev = np.tile(other.std_dev, (1, 1, self.num_scores)) # Add scores to each tally such that each tally contains the complete set # of scores necessary to perform an entrywise product. New scores added @@ -1742,16 +1726,15 @@ class Tally(object): # Add scores present in self but not in other to other for score in other_missing_scores: - other._mean = np.insert(other.mean, other.num_score_bins, 0, axis=2) - other._std_dev = np.insert(other.std_dev, other.num_score_bins, 0, axis=2) + other._mean = np.insert(other.mean, other.num_scores, 0, axis=2) + other._std_dev = np.insert(other.std_dev, other.num_scores, 0, axis=2) other.add_score(score) # Add scores present in other but not in self to self for score in self_missing_scores: - self._mean = np.insert(self.mean, self.num_score_bins, 0, axis=2) - self._std_dev = np.insert(self.std_dev, self.num_score_bins, 0, axis=2) + self._mean = np.insert(self.mean, self.num_scores, 0, axis=2) + self._std_dev = np.insert(self.std_dev, self.num_scores, 0, axis=2) self.add_score(score) - self.num_score_bins = self.num_score_bins + 1 # Align other scores with self scores for i, score in enumerate(self.scores): @@ -1762,13 +1745,13 @@ class Tally(object): other._swap_scores(score, other.scores[i]) # Correct the stride for other filters - stride = other.num_nuclides * other.num_score_bins + stride = other.num_nuclides * other.num_scores for filter in reversed(other.filters): filter.stride = stride stride *= filter.num_bins # Correct the stride for self filters - stride = self.num_nuclides * self.num_score_bins + stride = self.num_nuclides * self.num_scores for filter in reversed(self.filters): filter.stride = stride stride *= filter.num_bins @@ -1834,7 +1817,7 @@ class Tally(object): self.filters[filter2_index] = filter1 # Update the strides for each of the filters - stride = self.num_nuclides * self.num_score_bins + stride = self.num_nuclides * self.num_scores for filter in reversed(self.filters): filter.stride = stride stride *= filter.num_bins @@ -1851,24 +1834,6 @@ class Tally(object): else: filter2_bins = [filter2.get_bin(i) for i in range(filter2.num_bins)] - # Adjust the sum data array to relect the new filter order - if self.sum is not None: - for bin1, bin2 in itertools.product(filter1_bins, filter2_bins): - filter_bins = [(bin1,), (bin2,)] - data = self.get_values( - filters=filters, filter_bins=filter_bins, value='sum') - indices = self.get_filter_indices(filters, filter_bins) - self.sum[indices, :, :] = data - - # Adjust the sum_sq data array to relect the new filter order - if self.sum_sq is not None: - for bin1, bin2 in itertools.product(filter1_bins, filter2_bins): - filter_bins = [(bin1,), (bin2,)] - data = self.get_values( - filters=filters, filter_bins=filter_bins, value='sum_sq') - indices = self.get_filter_indices(filters, filter_bins) - self.sum_sq[indices, :, :] = data - # Adjust the mean data array to relect the new filter order if self.mean is not None: for bin1, bin2 in itertools.product(filter1_bins, filter2_bins): @@ -1940,20 +1905,6 @@ class Tally(object): self.nuclides[nuclide1_index] = nuclide2 self.nuclides[nuclide2_index] = nuclide1 - # Adjust the sum data array to relect the new nuclide order - if self.sum is not None: - nuclide1_sum = self._sum[:,nuclide1_index,:].copy() - nuclide2_sum = self._sum[:,nuclide2_index,:].copy() - self._sum[:,nuclide2_index,:] = nuclide1_sum - self._sum[:,nuclide1_index,:] = nuclide2_sum - - # Adjust the sum_sq data array to relect the new nuclide order - if self.sum_sq is not None: - nuclide1_sum_sq = self._sum_sq[:,nuclide1_index,:].copy() - nuclide2_sum_sq = self._sum_sq[:,nuclide2_index,:].copy() - self._sum_sq[:,nuclide2_index,:] = nuclide1_sum_sq - self._sum_sq[:,nuclide1_index,:] = nuclide2_sum_sq - # Adjust the mean data array to relect the new nuclide order if self.mean is not None: nuclide1_mean = self._mean[:,nuclide1_index,:].copy() @@ -2026,20 +1977,6 @@ class Tally(object): self.scores[score1_index] = score2 self.scores[score2_index] = score1 - # Adjust the sum data array to relect the new nuclide order - if self.sum is not None: - score1_sum = self._sum[:,:,score1_index].copy() - score2_sum = self._sum[:,:,score2_index].copy() - self._sum[:,:,score2_index] = score1_sum - self._sum[:,:,score1_index] = score2_sum - - # Adjust the sum_sq data array to relect the new nuclide order - if self.sum_sq is not None: - score1_sum_sq = self._sum_sq[:,:,score1_index].copy() - score2_sum_sq = self._sum_sq[:,:,score2_index].copy() - self._sum_sq[:,:,score2_index] = score1_sum_sq - self._sum_sq[:,:,score1_index] = score2_sum_sq - # Adjust the mean data array to relect the new nuclide order if self.mean is not None: score1_mean = self._mean[:,:,score1_index].copy() @@ -2109,7 +2046,6 @@ class Tally(object): new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - new_tally.num_score_bins = self.num_score_bins for filter in self.filters: new_tally.add_filter(filter) @@ -2178,7 +2114,6 @@ class Tally(object): new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - new_tally.num_score_bins = self.num_score_bins for filter in self.filters: new_tally.add_filter(filter) @@ -2248,7 +2183,6 @@ class Tally(object): new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - new_tally.num_score_bins = self.num_score_bins for filter in self.filters: new_tally.add_filter(filter) @@ -2318,7 +2252,6 @@ class Tally(object): new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - new_tally.num_score_bins = self.num_score_bins for filter in self.filters: new_tally.add_filter(filter) @@ -2392,7 +2325,6 @@ class Tally(object): new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - new_tally.num_score_bins = self.num_score_bins for filter in self.filters: new_tally.add_filter(filter) @@ -2594,7 +2526,6 @@ class Tally(object): # Loop over indices in reverse to remove excluded scores for score_index in reversed(score_indices): new_tally.remove_score(self.scores[score_index]) - new_tally.num_score_bins -= 1 # NUCLIDES if nuclides: @@ -2634,7 +2565,7 @@ class Tally(object): filter.num_bins = len(filter_bins[i]) # Correct each Filter's stride - stride = new_tally.num_nuclides * new_tally.num_score_bins + stride = new_tally.num_nuclides * new_tally.num_scores for filter in reversed(new_tally.filters): filter.stride = stride stride *= filter.num_bins @@ -2780,8 +2711,8 @@ class Tally(object): # Determine the shape of data in the new diagonalized Tally num_filter_bins = new_tally.num_filter_bins num_nuclides = new_tally.num_nuclides - num_score_bins = new_tally.num_score_bins - new_shape = (num_filter_bins, num_nuclides, num_score_bins) + num_scores = new_tally.num_scores + new_shape = (num_filter_bins, num_nuclides, num_scores) # Determine "base" indices along the new "diagonal", and the factor # by which the "base" indices should be repeated to account for all @@ -2811,7 +2742,7 @@ class Tally(object): new_tally._std_dev[diag_indices, :, :] = self.std_dev # Correct each Filter's stride - stride = new_tally.num_nuclides * new_tally.num_score_bins + stride = new_tally.num_nuclides * new_tally.num_scores for filter in reversed(new_tally.filters): filter.stride = stride stride *= filter.num_bins From a0160ad48ab32b954034c0ae5ce8da733bbde73f Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Thu, 17 Dec 2015 15:07:32 -0500 Subject: [PATCH 069/650] reverted to using num_score_bins in tallies.py --- openmc/statepoint.py | 8 ++++--- openmc/summary.py | 2 ++ openmc/tallies.py | 52 ++++++++++++++++++++++++++++---------------- 3 files changed, 40 insertions(+), 22 deletions(-) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 4ab7ddd5d1..1ff0584a72 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -9,9 +9,9 @@ if sys.version > '3': class StatePoint(object): - """State information on a simulation at a certain point in time (at the end of a - given batch). Statepoints can be used to analyze tally results as well as - restart a simulation. + """State information on a simulation at a certain point in time (at the end + of a given batch). Statepoints can be used to analyze tally results as well + as restart a simulation. Attributes ---------- @@ -394,6 +394,8 @@ class StatePoint(object): # Read score bins n_score_bins = self._f['{0}{1}/n_score_bins'.format(base, tally_key)].value + tally.num_score_bins = n_score_bins + scores = self._f['{0}{1}/score_bins'.format( base, tally_key)].value n_user_scores = self._f['{0}{1}/n_user_score_bins' diff --git a/openmc/summary.py b/openmc/summary.py index c14f9073d8..4b1088e827 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -524,6 +524,8 @@ class Summary(object): scores = self._f['{0}/score_bins'.format(subbase)].value for score in scores: tally.add_score(score.decode()) + num_score_bins = self._f['{0}/n_score_bins'.format(subbase)][...] + tally.num_score_bins = num_score_bins # Read filter metadata num_filters = self._f['{0}/n_filters'.format(subbase)].value diff --git a/openmc/tallies.py b/openmc/tallies.py index d097ba0a6c..e3b9fb439f 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -64,6 +64,10 @@ class Tally(object): Type of estimator for the tally triggers : list of openmc.trigger.Trigger List of tally triggers + num_score_bins : Integral + Total number of scores, accounting for the fact that a single + user-specified score, e.g. scatter-P3 or flux-Y2,2, might have multiple + bins num_scores : Integral Total number of user-specified scores num_filter_bins : Integral @@ -96,6 +100,7 @@ class Tally(object): self._estimator = None self._triggers = [] + self._num_score_bins = 0 self._num_realizations = 0 self._with_summary = False @@ -118,6 +123,7 @@ class Tally(object): clone.id = self.id clone.name = self.name clone.estimator = self.estimator + clone.num_score_bins = self.num_score_bins clone.num_realizations = self.num_realizations clone._sum = copy.deepcopy(self._sum, memo) clone._sum_sq = copy.deepcopy(self._sum_sq, memo) @@ -246,6 +252,10 @@ class Tally(object): def num_scores(self): return len(self._scores) + @property + def num_score_bins(self): + return self._num_score_bins + @property def num_filter_bins(self): num_bins = 1 @@ -259,7 +269,7 @@ class Tally(object): def num_bins(self): num_bins = self.num_filter_bins num_bins *= self.num_nuclides - num_bins *= self.num_scores + num_bins *= self.num_score_bins return num_bins @property @@ -302,7 +312,7 @@ class Tally(object): # Reshape the results arrays new_shape = (nonzero(self.num_filter_bins), nonzero(self.num_nuclides), - nonzero(self.num_scores)) + nonzero(self.num_score_bins)) sum = np.reshape(sum, new_shape) sum_sq = np.reshape(sum_sq, new_shape) @@ -458,6 +468,10 @@ class Tally(object): else: self._scores.append(score) + @num_score_bins.setter + def num_score_bins(self, num_score_bins): + self._num_score_bins = num_score_bins + @num_realizations.setter def num_realizations(self, num_realizations): cv.check_type('number of realizations', num_realizations, Integral) @@ -1272,7 +1286,7 @@ class Tally(object): for filter in self.filters: new_shape += (filter.num_bins, ) new_shape += (self.num_nuclides,) - new_shape += (self.num_scores,) + new_shape += (self.num_score_bins,) # Reshape the data with one dimension for each filter data = np.reshape(data, new_shape) @@ -1602,7 +1616,7 @@ class Tally(object): new_tally.add_score(new_score) # Correct each Filter's stride - stride = new_tally.num_nuclides * new_tally.num_scores + stride = new_tally.num_nuclides * new_tally.num_score_bins for filter in reversed(new_tally.filters): filter.stride = stride stride *= filter.num_bins @@ -1710,10 +1724,10 @@ class Tally(object): # Repeat and tile the data by score in preparation for performing # the tensor product across scores. if score_product == 'tensor': - self._mean = np.repeat(self.mean, other.num_scores, axis=2) - self._std_dev = np.repeat(self.std_dev, other.num_scores, axis=2) - other._mean = np.tile(other.mean, (1, 1, self.num_scores)) - other._std_dev = np.tile(other.std_dev, (1, 1, self.num_scores)) + self._mean = np.repeat(self.mean, other.num_score_bins, axis=2) + self._std_dev = np.repeat(self.std_dev, other.num_score_bins, axis=2) + other._mean = np.tile(other.mean, (1, 1, self.num_score_bins)) + other._std_dev = np.tile(other.std_dev, (1, 1, self.num_score_bins)) # Add scores to each tally such that each tally contains the complete set # of scores necessary to perform an entrywise product. New scores added @@ -1726,14 +1740,14 @@ class Tally(object): # Add scores present in self but not in other to other for score in other_missing_scores: - other._mean = np.insert(other.mean, other.num_scores, 0, axis=2) - other._std_dev = np.insert(other.std_dev, other.num_scores, 0, axis=2) + other._mean = np.insert(other.mean, other.num_score_bins, 0, axis=2) + other._std_dev = np.insert(other.std_dev, other.num_score_bins, 0, axis=2) other.add_score(score) # Add scores present in other but not in self to self for score in self_missing_scores: - self._mean = np.insert(self.mean, self.num_scores, 0, axis=2) - self._std_dev = np.insert(self.std_dev, self.num_scores, 0, axis=2) + self._mean = np.insert(self.mean, self.num_score_bins, 0, axis=2) + self._std_dev = np.insert(self.std_dev, self.num_score_bins, 0, axis=2) self.add_score(score) # Align other scores with self scores @@ -1745,13 +1759,13 @@ class Tally(object): other._swap_scores(score, other.scores[i]) # Correct the stride for other filters - stride = other.num_nuclides * other.num_scores + stride = other.num_nuclides * other.num_score_bins for filter in reversed(other.filters): filter.stride = stride stride *= filter.num_bins # Correct the stride for self filters - stride = self.num_nuclides * self.num_scores + stride = self.num_nuclides * self.num_score_bins for filter in reversed(self.filters): filter.stride = stride stride *= filter.num_bins @@ -1817,7 +1831,7 @@ class Tally(object): self.filters[filter2_index] = filter1 # Update the strides for each of the filters - stride = self.num_nuclides * self.num_scores + stride = self.num_nuclides * self.num_score_bins for filter in reversed(self.filters): filter.stride = stride stride *= filter.num_bins @@ -2565,7 +2579,7 @@ class Tally(object): filter.num_bins = len(filter_bins[i]) # Correct each Filter's stride - stride = new_tally.num_nuclides * new_tally.num_scores + stride = new_tally.num_nuclides * new_tally.num_score_bins for filter in reversed(new_tally.filters): filter.stride = stride stride *= filter.num_bins @@ -2711,8 +2725,8 @@ class Tally(object): # Determine the shape of data in the new diagonalized Tally num_filter_bins = new_tally.num_filter_bins num_nuclides = new_tally.num_nuclides - num_scores = new_tally.num_scores - new_shape = (num_filter_bins, num_nuclides, num_scores) + num_score_bins = new_tally.num_score_bins + new_shape = (num_filter_bins, num_nuclides, num_score_bins) # Determine "base" indices along the new "diagonal", and the factor # by which the "base" indices should be repeated to account for all @@ -2742,7 +2756,7 @@ class Tally(object): new_tally._std_dev[diag_indices, :, :] = self.std_dev # Correct each Filter's stride - stride = new_tally.num_nuclides * new_tally.num_scores + stride = new_tally.num_nuclides * new_tally.num_score_bins for filter in reversed(new_tally.filters): filter.stride = stride stride *= filter.num_bins From 4a21ac8bf6adfa28897489093171eac79b7051cb Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Thu, 17 Dec 2015 18:20:57 -0500 Subject: [PATCH 070/650] fixed errors in reverting to num_score_bins --- openmc/mgxs/mgxs.py | 4 ++-- openmc/tallies.py | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 7f521a975c..7913747f98 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -755,7 +755,7 @@ class MGXS(object): # Reshape condensed data arrays with one dimension for all filters new_shape = \ - (tally.num_filter_bins, tally.num_nuclides, tally.num_scores,) + (tally.num_filter_bins, tally.num_nuclides, tally.num_score_bins,) mean = np.reshape(mean, new_shape) std_dev = np.reshape(std_dev, new_shape) @@ -837,7 +837,7 @@ class MGXS(object): # Reshape averaged data arrays with one dimension for all filters new_shape = \ - (tally.num_filter_bins, tally.num_nuclides, tally.num_scores,) + (tally.num_filter_bins, tally.num_nuclides, tally.num_score_bins,) mean = np.reshape(mean, new_shape) std_dev = np.reshape(std_dev, new_shape) diff --git a/openmc/tallies.py b/openmc/tallies.py index e3b9fb439f..4fa4f187dd 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1607,9 +1607,11 @@ class Tally(object): # Add scores to the new tally if score_product == 'entrywise': + new_tally.num_score_bins = self_copy.num_score_bins for self_score in self_copy.scores: new_tally.add_score(self_score) else: + new_tally.num_score_bins = self_copy.num_score_bins * other_copy.num_score_bins all_scores = [self_copy.scores, other_copy.scores] for self_score, other_score in itertools.product(*all_scores): new_score = CrossScore(self_score, other_score, binary_op) @@ -1749,6 +1751,7 @@ class Tally(object): self._mean = np.insert(self.mean, self.num_score_bins, 0, axis=2) self._std_dev = np.insert(self.std_dev, self.num_score_bins, 0, axis=2) self.add_score(score) + self.num_score_bins += 1 # Align other scores with self scores for i, score in enumerate(self.scores): @@ -2060,6 +2063,7 @@ class Tally(object): new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations + new_tally.num_score_bins = self.num_score_bins for filter in self.filters: new_tally.add_filter(filter) @@ -2128,6 +2132,7 @@ class Tally(object): new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations + new_tally.num_score_bins = self.num_score_bins for filter in self.filters: new_tally.add_filter(filter) @@ -2197,6 +2202,7 @@ class Tally(object): new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations + new_tally.num_score_bins = self.num_score_bins for filter in self.filters: new_tally.add_filter(filter) @@ -2266,6 +2272,7 @@ class Tally(object): new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations + new_tally.num_score_bins = self.num_score_bins for filter in self.filters: new_tally.add_filter(filter) @@ -2339,6 +2346,7 @@ class Tally(object): new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations + new_tally.num_score_bins = self.num_score_bins for filter in self.filters: new_tally.add_filter(filter) @@ -2540,6 +2548,7 @@ class Tally(object): # Loop over indices in reverse to remove excluded scores for score_index in reversed(score_indices): new_tally.remove_score(self.scores[score_index]) + new_tally.num_score_bins -= 1 # NUCLIDES if nuclides: From 587f0e8f0e842089bfc727d06be2d9f1cc539dea Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Fri, 18 Dec 2015 13:59:16 -0800 Subject: [PATCH 071/650] extended tally arithmetic test to cover different hybrid tallies and fixed bug in tallies.py --- openmc/tallies.py | 2 +- tests/test_tally_arithmetic/geometry.xml | 8 - tests/test_tally_arithmetic/materials.xml | 11 - tests/test_tally_arithmetic/results_true.dat | 1582 ++++++++++++++++- tests/test_tally_arithmetic/settings.xml | 18 - tests/test_tally_arithmetic/tallies.xml | 15 - .../test_tally_arithmetic.py | 169 +- 7 files changed, 1691 insertions(+), 114 deletions(-) delete mode 100644 tests/test_tally_arithmetic/geometry.xml delete mode 100644 tests/test_tally_arithmetic/materials.xml delete mode 100644 tests/test_tally_arithmetic/settings.xml delete mode 100644 tests/test_tally_arithmetic/tallies.xml diff --git a/openmc/tallies.py b/openmc/tallies.py index 4fa4f187dd..73bf4c0dff 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1846,7 +1846,7 @@ class Tally(object): else: filter1_bins = [(filter1.get_bin(i)) for i in range(filter1.num_bins)] - if filter1.type == 'distribcell': + if filter2.type == 'distribcell': filter2_bins = np.arange(filter2.num_bins) else: filter2_bins = [filter2.get_bin(i) for i in range(filter2.num_bins)] diff --git a/tests/test_tally_arithmetic/geometry.xml b/tests/test_tally_arithmetic/geometry.xml deleted file mode 100644 index bc56030e18..0000000000 --- a/tests/test_tally_arithmetic/geometry.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/tests/test_tally_arithmetic/materials.xml b/tests/test_tally_arithmetic/materials.xml deleted file mode 100644 index e7947a92da..0000000000 --- a/tests/test_tally_arithmetic/materials.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/tests/test_tally_arithmetic/results_true.dat b/tests/test_tally_arithmetic/results_true.dat index 23dd38cfb6..cf1189261b 100644 --- a/tests/test_tally_arithmetic/results_true.dat +++ b/tests/test_tally_arithmetic/results_true.dat @@ -1,53 +1,1541 @@ Tally - ID = 10000 - Name = (tally 1 + tally 2) - Filters = - cell [1] - energy [ 0. 20.] - material [1] - Nuclides = (U-235 + U-235) (U-235 + Pu-239) (U-238 + U-235) (U-238 + Pu-239) - Scores = [(fission + fission), (fission + absorption), (nu-fission + fission), (nu-fission + absorption)] - Estimator = tracklength -[[[ 0.07510122 0.07839105 0.13713377 0.1404236 ] - [ 0.0916553 0.09321683 0.15368785 0.15524938] - [ 0.04596277 0.0492526 0.06126275 0.06455259] - [ 0.06251685 0.06407838 0.07781683 0.07937836]]]Tally - ID = 10001 - Name = (tally 1 - tally 2) - Filters = - cell [1] - energy [ 0. 20.] - material [1] - Nuclides = (U-235 - U-235) (U-235 - Pu-239) (U-238 - U-235) (U-238 - Pu-239) - Scores = [(fission - fission), (fission - absorption), (nu-fission - fission), (nu-fission - absorption)] - Estimator = tracklength -[[[ 0. -0.00328983 0.06203255 0.05874271] - [-0.01655408 -0.01811561 0.04547847 0.04391694] - [-0.02913845 -0.03242829 -0.01383847 -0.0171283 ] - [-0.04569253 -0.04725406 -0.03039255 -0.03195408]]]Tally - ID = 10002 + ID = 10004 Name = (tally 1 * tally 2) Filters = - cell [1] - energy [ 0. 20.] - material [1] - Nuclides = (U-235 * U-235) (U-235 * Pu-239) (U-238 * U-235) (U-238 * Pu-239) - Scores = [(fission * fission), (fission * absorption), (nu-fission * fission), (nu-fission * absorption)] + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + universe [1 3] + Nuclides = (U-235 * U-238) (U-235 * U-235) (Pu-239 * U-238) (Pu-239 * U-235) + Scores = [(nu-fission * total), (nu-fission * fission), (total * total), (total * fission)] Estimator = tracklength -[[[ 0.00141005 0.00153358 0.00373941 0.00406702] - [ 0.00203166 0.0020903 0.00538792 0.00554342] - [ 0.00031588 0.00034356 0.00089041 0.00096841] - [ 0.00045514 0.00046827 0.00128294 0.00131997]]]Tally - ID = 10003 - Name = (tally 1 / tally 2) +[[[ 4.38740856e-02 4.44445557e-08 2.18498184e-02 2.21339193e-08] + [ 3.91423913e-02 3.22796615e-02 1.94933781e-02 1.60756567e-02] + [ 2.68307165e-02 2.71795812e-08 1.39204488e-02 1.41014486e-08] + [ 2.39371006e-02 1.97402734e-02 1.24191684e-02 1.02417491e-02]] + + [[ 4.38740856e-02 4.44445557e-08 2.18498184e-02 2.21339193e-08] + [ 3.91423913e-02 3.22796615e-02 1.94933781e-02 1.60756567e-02] + [ 2.68307165e-02 2.71795812e-08 1.39204488e-02 1.41014486e-08] + [ 2.39371006e-02 1.97402734e-02 1.24191684e-02 1.02417491e-02]] + + [[ 6.34252895e-02 9.32564450e-07 4.92445903e-02 7.24060618e-07] + [ 6.77320364e-03 3.57584505e-03 5.25884298e-03 2.77635350e-03] + [ 6.58867184e-02 9.68755709e-07 4.08248924e-02 6.00262822e-07] + [ 7.03606029e-03 3.71461759e-03 4.35970118e-03 2.30166059e-03]] + + [[ 6.34252895e-02 9.32564450e-07 4.92445903e-02 7.24060618e-07] + [ 6.77320364e-03 3.57584505e-03 5.25884298e-03 2.77635350e-03] + [ 6.58867184e-02 9.68755709e-07 4.08248924e-02 6.00262822e-07] + [ 7.03606029e-03 3.71461759e-03 4.35970118e-03 2.30166059e-03]] + + [[ 1.41588780e-02 1.27076668e-06 3.12556757e-02 2.80521318e-06] + [ 3.40319989e-04 6.28212863e-05 7.51255235e-04 1.38677779e-04] + [ 4.32998473e-03 3.88618386e-07 9.24461087e-03 8.29708643e-07] + [ 1.04074656e-04 1.92116360e-05 2.22201637e-04 4.10172576e-05]] + + [[ 1.41588780e-02 1.27076668e-06 3.12556757e-02 2.80521318e-06] + [ 3.40319989e-04 6.28212863e-05 7.51255235e-04 1.38677779e-04] + [ 4.32998473e-03 3.88618386e-07 9.24461087e-03 8.29708643e-07] + [ 1.04074656e-04 1.92116360e-05 2.22201637e-04 4.10172576e-05]] + + [[ 1.30500388e-03 7.58050822e-05 2.86079380e-03 1.66177827e-04] + [ 2.87565919e-05 4.85258186e-06 6.30394140e-05 1.06376972e-05] + [ 6.91597829e-04 4.01735436e-05 8.36826356e-04 4.86095802e-05] + [ 1.52397988e-05 2.57166674e-06 1.84400019e-05 3.11169067e-06]] + + [[ 1.30500388e-03 7.58050822e-05 2.86079380e-03 1.66177827e-04] + [ 2.87565919e-05 4.85258186e-06 6.30394140e-05 1.06376972e-05] + [ 6.91597829e-04 4.01735436e-05 8.36826356e-04 4.86095802e-05] + [ 1.52397988e-05 2.57166674e-06 1.84400019e-05 3.11169067e-06]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally + ID = 10005 + Name = (tally 1 * tally 2) Filters = - cell [1] - energy [ 0. 20.] - material [1] - Nuclides = (U-235 / U-235) (U-235 / Pu-239) (U-238 / U-235) (U-238 / Pu-239) - Scores = [(fission / fission), (fission / absorption), (nu-fission / fission), (nu-fission / absorption)] + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + universe [1 3] + Nuclides = (U-235 * U-238) (U-235 * U-235) (Pu-239 * U-238) (Pu-239 * U-235) + Scores = [(nu-fission * total), (nu-fission * fission), (total * total), (total * fission)] Estimator = tracklength -[[[ 1. 0.91944666 2.65197177 2.4383466 ] - [ 0.69403611 0.67456727 1.84056418 1.78893335] - [ 0.22402189 0.20597618 0.63147153 0.58060439] - [ 0.15547928 0.15111784 0.43826405 0.42597002]]] \ No newline at end of file +[[[ 4.38740856e-02 4.44445557e-08 2.18498184e-02 2.21339193e-08] + [ 3.91423913e-02 3.22796615e-02 1.94933781e-02 1.60756567e-02] + [ 2.68307165e-02 2.71795812e-08 1.39204488e-02 1.41014486e-08] + [ 2.39371006e-02 1.97402734e-02 1.24191684e-02 1.02417491e-02]] + + [[ 4.38740856e-02 4.44445557e-08 2.18498184e-02 2.21339193e-08] + [ 3.91423913e-02 3.22796615e-02 1.94933781e-02 1.60756567e-02] + [ 2.68307165e-02 2.71795812e-08 1.39204488e-02 1.41014486e-08] + [ 2.39371006e-02 1.97402734e-02 1.24191684e-02 1.02417491e-02]] + + [[ 6.34252895e-02 9.32564450e-07 4.92445903e-02 7.24060618e-07] + [ 6.77320364e-03 3.57584505e-03 5.25884298e-03 2.77635350e-03] + [ 6.58867184e-02 9.68755709e-07 4.08248924e-02 6.00262822e-07] + [ 7.03606029e-03 3.71461759e-03 4.35970118e-03 2.30166059e-03]] + + [[ 6.34252895e-02 9.32564450e-07 4.92445903e-02 7.24060618e-07] + [ 6.77320364e-03 3.57584505e-03 5.25884298e-03 2.77635350e-03] + [ 6.58867184e-02 9.68755709e-07 4.08248924e-02 6.00262822e-07] + [ 7.03606029e-03 3.71461759e-03 4.35970118e-03 2.30166059e-03]] + + [[ 1.41588780e-02 1.27076668e-06 3.12556757e-02 2.80521318e-06] + [ 3.40319989e-04 6.28212863e-05 7.51255235e-04 1.38677779e-04] + [ 4.32998473e-03 3.88618386e-07 9.24461087e-03 8.29708643e-07] + [ 1.04074656e-04 1.92116360e-05 2.22201637e-04 4.10172576e-05]] + + [[ 1.41588780e-02 1.27076668e-06 3.12556757e-02 2.80521318e-06] + [ 3.40319989e-04 6.28212863e-05 7.51255235e-04 1.38677779e-04] + [ 4.32998473e-03 3.88618386e-07 9.24461087e-03 8.29708643e-07] + [ 1.04074656e-04 1.92116360e-05 2.22201637e-04 4.10172576e-05]] + + [[ 1.30500388e-03 7.58050822e-05 2.86079380e-03 1.66177827e-04] + [ 2.87565919e-05 4.85258186e-06 6.30394140e-05 1.06376972e-05] + [ 6.91597829e-04 4.01735436e-05 8.36826356e-04 4.86095802e-05] + [ 1.52397988e-05 2.57166674e-06 1.84400019e-05 3.11169067e-06]] + + [[ 1.30500388e-03 7.58050822e-05 2.86079380e-03 1.66177827e-04] + [ 2.87565919e-05 4.85258186e-06 6.30394140e-05 1.06376972e-05] + [ 6.91597829e-04 4.01735436e-05 8.36826356e-04 4.86095802e-05] + [ 1.52397988e-05 2.57166674e-06 1.84400019e-05 3.11169067e-06]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally + ID = 10006 + Name = (tally 1 * tally 2) + Filters = + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + universe [1 3] + Nuclides = U-235 Pu-239 U-238 + Scores = [(nu-fission * total), (nu-fission * fission), (total * total), (total * fission)] + Estimator = tracklength +[[[ 3.91423913e-02 3.22796615e-02 1.94933781e-02 1.60756567e-02] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 3.91423913e-02 3.22796615e-02 1.94933781e-02 1.60756567e-02] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 6.77320364e-03 3.57584505e-03 5.25884298e-03 2.77635350e-03] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 6.77320364e-03 3.57584505e-03 5.25884298e-03 2.77635350e-03] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 3.40319989e-04 6.28212863e-05 7.51255235e-04 1.38677779e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 3.40319989e-04 6.28212863e-05 7.51255235e-04 1.38677779e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 2.87565919e-05 4.85258186e-06 6.30394140e-05 1.06376972e-05] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 2.87565919e-05 4.85258186e-06 6.30394140e-05 1.06376972e-05] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally + ID = 10007 + Name = (tally 1 * tally 2) + Filters = + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + universe [1 3] + Nuclides = (U-235 * U-238) (U-235 * U-235) (Pu-239 * U-238) (Pu-239 * U-235) + Scores = [u'nu-fission', u'total', u'fission'] + Estimator = tracklength +[[[ 0.00000000e+00 2.18498184e-02 0.00000000e+00] + [ 0.00000000e+00 1.94933781e-02 0.00000000e+00] + [ 0.00000000e+00 1.39204488e-02 0.00000000e+00] + [ 0.00000000e+00 1.24191684e-02 0.00000000e+00]] + + [[ 0.00000000e+00 2.18498184e-02 0.00000000e+00] + [ 0.00000000e+00 1.94933781e-02 0.00000000e+00] + [ 0.00000000e+00 1.39204488e-02 0.00000000e+00] + [ 0.00000000e+00 1.24191684e-02 0.00000000e+00]] + + [[ 0.00000000e+00 4.92445903e-02 0.00000000e+00] + [ 0.00000000e+00 5.25884298e-03 0.00000000e+00] + [ 0.00000000e+00 4.08248924e-02 0.00000000e+00] + [ 0.00000000e+00 4.35970118e-03 0.00000000e+00]] + + [[ 0.00000000e+00 4.92445903e-02 0.00000000e+00] + [ 0.00000000e+00 5.25884298e-03 0.00000000e+00] + [ 0.00000000e+00 4.08248924e-02 0.00000000e+00] + [ 0.00000000e+00 4.35970118e-03 0.00000000e+00]] + + [[ 0.00000000e+00 3.12556757e-02 0.00000000e+00] + [ 0.00000000e+00 7.51255235e-04 0.00000000e+00] + [ 0.00000000e+00 9.24461087e-03 0.00000000e+00] + [ 0.00000000e+00 2.22201637e-04 0.00000000e+00]] + + [[ 0.00000000e+00 3.12556757e-02 0.00000000e+00] + [ 0.00000000e+00 7.51255235e-04 0.00000000e+00] + [ 0.00000000e+00 9.24461087e-03 0.00000000e+00] + [ 0.00000000e+00 2.22201637e-04 0.00000000e+00]] + + [[ 0.00000000e+00 2.86079380e-03 0.00000000e+00] + [ 0.00000000e+00 6.30394140e-05 0.00000000e+00] + [ 0.00000000e+00 8.36826356e-04 0.00000000e+00] + [ 0.00000000e+00 1.84400019e-05 0.00000000e+00]] + + [[ 0.00000000e+00 2.86079380e-03 0.00000000e+00] + [ 0.00000000e+00 6.30394140e-05 0.00000000e+00] + [ 0.00000000e+00 8.36826356e-04 0.00000000e+00] + [ 0.00000000e+00 1.84400019e-05 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally + ID = 10008 + Name = (tally 1 * tally 2) + Filters = + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + universe [1 3] + Nuclides = U-235 Pu-239 U-238 + Scores = [u'nu-fission', u'total', u'fission'] + Estimator = tracklength +[[[ 0.00000000e+00 1.94933781e-02 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 1.94933781e-02 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 5.25884298e-03 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 5.25884298e-03 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 7.51255235e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 7.51255235e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 6.30394140e-05 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 6.30394140e-05 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally + ID = 10009 + Name = (tally 1 * tally 3) + Filters = + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + distribcell [60] + Nuclides = (U-235 * U-235) (U-235 * O-16) (Pu-239 * U-235) (Pu-239 * O-16) + Scores = [(nu-fission * absorption), (nu-fission * total), (total * absorption), (total * total)] + Estimator = tracklength +[[[ 1.28735734e-03 1.32667348e-03 6.41119323e-04 6.60699229e-04] + [ 7.64287878e-08 1.96051024e-03 3.80624487e-08 9.76357502e-04] + [ 7.87269280e-04 8.11312633e-04 4.08455054e-04 4.20929349e-04] + [ 4.67391880e-08 1.19892856e-03 2.42494633e-08 6.22034217e-04]] + + [[ 1.28735734e-03 1.32667348e-03 6.41119323e-04 6.60699229e-04] + [ 7.64287878e-08 1.96051024e-03 3.80624487e-08 9.76357502e-04] + [ 7.87269280e-04 8.11312633e-04 4.08455054e-04 4.20929349e-04] + [ 4.67391880e-08 1.19892856e-03 2.42494633e-08 6.22034217e-04]] + + [[ 3.23659105e-04 4.09115129e-04 1.61186098e-04 2.03744218e-04] + [ 2.11850877e-08 5.44379963e-03 1.05504266e-08 2.71107720e-03] + [ 1.97930180e-04 2.50189876e-04 1.02691143e-04 1.29804785e-04] + [ 1.29555083e-08 3.32909603e-03 6.72164275e-09 1.72721855e-03]] + + ..., + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally + ID = 10010 + Name = (tally 1 * tally 3) + Filters = + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + distribcell [60] + Nuclides = (U-235 * U-235) (U-235 * O-16) (Pu-239 * U-235) (Pu-239 * O-16) + Scores = [(nu-fission * absorption), (nu-fission * total), (total * absorption), (total * total)] + Estimator = tracklength +[[[ 1.28735734e-03 1.32667348e-03 6.41119323e-04 6.60699229e-04] + [ 7.64287878e-08 1.96051024e-03 3.80624487e-08 9.76357502e-04] + [ 7.87269280e-04 8.11312633e-04 4.08455054e-04 4.20929349e-04] + [ 4.67391880e-08 1.19892856e-03 2.42494633e-08 6.22034217e-04]] + + [[ 1.28735734e-03 1.32667348e-03 6.41119323e-04 6.60699229e-04] + [ 7.64287878e-08 1.96051024e-03 3.80624487e-08 9.76357502e-04] + [ 7.87269280e-04 8.11312633e-04 4.08455054e-04 4.20929349e-04] + [ 4.67391880e-08 1.19892856e-03 2.42494633e-08 6.22034217e-04]] + + [[ 3.23659105e-04 4.09115129e-04 1.61186098e-04 2.03744218e-04] + [ 2.11850877e-08 5.44379963e-03 1.05504266e-08 2.71107720e-03] + [ 1.97930180e-04 2.50189876e-04 1.02691143e-04 1.29804785e-04] + [ 1.29555083e-08 3.32909603e-03 6.72164275e-09 1.72721855e-03]] + + ..., + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally + ID = 10011 + Name = (tally 1 * tally 3) + Filters = + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + distribcell [60] + Nuclides = U-235 Pu-239 O-16 + Scores = [(nu-fission * absorption), (nu-fission * total), (total * absorption), (total * total)] + Estimator = tracklength +[[[ 0.00128736 0.00132667 0.00064112 0.0006607 ] + [ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ]] + + [[ 0.00128736 0.00132667 0.00064112 0.0006607 ] + [ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ]] + + [[ 0.00032366 0.00040912 0.00016119 0.00020374] + [ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ]] + + ..., + [[ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ]] + + [[ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ]] + + [[ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ]]]Tally + ID = 10012 + Name = (tally 1 * tally 3) + Filters = + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + distribcell [60] + Nuclides = (U-235 * U-235) (U-235 * O-16) (Pu-239 * U-235) (Pu-239 * O-16) + Scores = [u'nu-fission', u'total', u'absorption'] + Estimator = tracklength +[[[ 0. 0.0006607 0. ] + [ 0. 0.00097636 0. ] + [ 0. 0.00042093 0. ] + [ 0. 0.00062203 0. ]] + + [[ 0. 0.0006607 0. ] + [ 0. 0.00097636 0. ] + [ 0. 0.00042093 0. ] + [ 0. 0.00062203 0. ]] + + [[ 0. 0.00020374 0. ] + [ 0. 0.00271108 0. ] + [ 0. 0.0001298 0. ] + [ 0. 0.00172722 0. ]] + + ..., + [[ 0. 0. 0. ] + [ 0. 0. 0. ] + [ 0. 0. 0. ] + [ 0. 0. 0. ]] + + [[ 0. 0. 0. ] + [ 0. 0. 0. ] + [ 0. 0. 0. ] + [ 0. 0. 0. ]] + + [[ 0. 0. 0. ] + [ 0. 0. 0. ] + [ 0. 0. 0. ] + [ 0. 0. 0. ]]]Tally + ID = 10013 + Name = (tally 1 * tally 3) + Filters = + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + distribcell [60] + Nuclides = U-235 Pu-239 O-16 + Scores = [u'nu-fission', u'total', u'absorption'] + Estimator = tracklength +[[[ 0. 0.0006607 0. ] + [ 0. 0. 0. ] + [ 0. 0. 0. ]] + + [[ 0. 0.0006607 0. ] + [ 0. 0. 0. ] + [ 0. 0. 0. ]] + + [[ 0. 0.00020374 0. ] + [ 0. 0. 0. ] + [ 0. 0. 0. ]] + + ..., + [[ 0. 0. 0. ] + [ 0. 0. 0. ] + [ 0. 0. 0. ]] + + [[ 0. 0. 0. ] + [ 0. 0. 0. ] + [ 0. 0. 0. ]] + + [[ 0. 0. 0. ] + [ 0. 0. 0. ] + [ 0. 0. 0. ]]]Tally + ID = 10014 + Name = (tally 1 * tally 4) + Filters = + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + mesh [1] + Nuclides = (U-235 * U-235) (U-235 * Zr-90) (Pu-239 * U-235) (Pu-239 * Zr-90) + Scores = [(nu-fission * scatter), (nu-fission * total), (total * scatter), (total * total)] + Estimator = tracklength +[[[ 1.25406870e-04 3.38446993e-03 6.24541184e-05 1.68550643e-03] + [ 8.54338123e-04 8.55444603e-04 4.25470584e-04 4.26021624e-04] + [ 7.66911978e-05 2.06973551e-03 3.97893175e-05 1.07383071e-03] + [ 5.22461121e-04 5.23137776e-04 2.71065937e-04 2.71417003e-04]] + + [[ 1.25406870e-04 3.38446993e-03 6.24541184e-05 1.68550643e-03] + [ 8.54338123e-04 8.55444603e-04 4.25470584e-04 4.26021624e-04] + [ 7.66911978e-05 2.06973551e-03 3.97893175e-05 1.07383071e-03] + [ 5.22461121e-04 5.23137776e-04 2.71065937e-04 2.71417003e-04]] + + [[ 3.99632703e-04 2.08614103e-03 1.99021857e-04 1.03892314e-03] + [ 2.65001925e-03 2.65034264e-03 1.31974122e-03 1.31990227e-03] + [ 2.44391002e-04 1.27575670e-03 1.26796183e-04 6.61894580e-04] + [ 1.62059025e-03 1.62078801e-03 8.40802879e-04 8.40905483e-04]] + + ..., + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally + ID = 10015 + Name = (tally 1 * tally 4) + Filters = + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + mesh [1] + Nuclides = (U-235 * U-235) (U-235 * Zr-90) (Pu-239 * U-235) (Pu-239 * Zr-90) + Scores = [(nu-fission * scatter), (nu-fission * total), (total * scatter), (total * total)] + Estimator = tracklength +[[[ 1.25406870e-04 3.38446993e-03 6.24541184e-05 1.68550643e-03] + [ 8.54338123e-04 8.55444603e-04 4.25470584e-04 4.26021624e-04] + [ 7.66911978e-05 2.06973551e-03 3.97893175e-05 1.07383071e-03] + [ 5.22461121e-04 5.23137776e-04 2.71065937e-04 2.71417003e-04]] + + [[ 1.25406870e-04 3.38446993e-03 6.24541184e-05 1.68550643e-03] + [ 8.54338123e-04 8.55444603e-04 4.25470584e-04 4.26021624e-04] + [ 7.66911978e-05 2.06973551e-03 3.97893175e-05 1.07383071e-03] + [ 5.22461121e-04 5.23137776e-04 2.71065937e-04 2.71417003e-04]] + + [[ 3.99632703e-04 2.08614103e-03 1.99021857e-04 1.03892314e-03] + [ 2.65001925e-03 2.65034264e-03 1.31974122e-03 1.31990227e-03] + [ 2.44391002e-04 1.27575670e-03 1.26796183e-04 6.61894580e-04] + [ 1.62059025e-03 1.62078801e-03 8.40802879e-04 8.40905483e-04]] + + ..., + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally + ID = 10016 + Name = (tally 1 * tally 4) + Filters = + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + mesh [1] + Nuclides = U-235 Pu-239 Zr-90 + Scores = [(nu-fission * scatter), (nu-fission * total), (total * scatter), (total * total)] + Estimator = tracklength +[[[ 1.25406870e-04 3.38446993e-03 6.24541184e-05 1.68550643e-03] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 1.25406870e-04 3.38446993e-03 6.24541184e-05 1.68550643e-03] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 3.99632703e-04 2.08614103e-03 1.99021857e-04 1.03892314e-03] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 3.99632703e-04 2.08614103e-03 1.99021857e-04 1.03892314e-03] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 7.26649160e-04 9.61556092e-04 3.61879956e-04 4.78866412e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 7.26649160e-04 9.61556092e-04 3.61879956e-04 4.78866412e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 2.03428184e-04 2.48054431e-04 1.01309664e-04 1.23534068e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 2.03428184e-04 2.48054431e-04 1.01309664e-04 1.23534068e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 2.07797571e-04 5.88917101e-03 1.61337951e-04 4.57246338e-03] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 2.07797571e-04 5.88917101e-03 1.61337951e-04 4.57246338e-03] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 5.43202987e-04 2.90564462e-03 4.21753038e-04 2.25599726e-03] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 5.43202987e-04 2.90564462e-03 4.21753038e-04 2.25599726e-03] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 7.56220267e-04 1.00221809e-03 5.87143670e-04 7.78141017e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 7.56220267e-04 1.00221809e-03 5.87143670e-04 7.78141017e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 2.48919397e-04 3.01542606e-04 1.93265712e-04 2.34123363e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 2.48919397e-04 3.01542606e-04 1.93265712e-04 2.34123363e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 1.15352081e-05 3.61534913e-04 2.54639331e-05 7.98087108e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 1.15352081e-05 3.61534913e-04 2.54639331e-05 7.98087108e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 3.43932622e-05 1.89185338e-04 7.59230111e-05 4.17626001e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 3.43932622e-05 1.89185338e-04 7.59230111e-05 4.17626001e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 5.23298543e-05 6.89978472e-05 1.15517978e-04 1.52312516e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 5.23298543e-05 6.89978472e-05 1.15517978e-04 1.52312516e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 1.66777184e-05 2.04329526e-05 3.68160075e-05 4.51056743e-05] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 1.66777184e-05 2.04329526e-05 3.68160075e-05 4.51056743e-05] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 2.13734333e-06 5.36870274e-05 4.68542556e-06 1.17691233e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 2.13734333e-06 5.36870274e-05 4.68542556e-06 1.17691233e-04] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 7.20926557e-06 4.05199536e-05 1.58039547e-05 8.88267335e-05] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 7.20926557e-06 4.05199536e-05 1.58039547e-05 8.88267335e-05] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 1.11679867e-05 1.50075971e-05 2.44821549e-05 3.28992436e-05] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 1.11679867e-05 1.50075971e-05 2.44821549e-05 3.28992436e-05] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 4.13069536e-06 5.01085896e-06 9.05519734e-06 1.09846679e-05] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 4.13069536e-06 5.01085896e-06 9.05519734e-06 1.09846679e-05] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally + ID = 10017 + Name = (tally 1 * tally 4) + Filters = + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + mesh [1] + Nuclides = (U-235 * U-235) (U-235 * Zr-90) (Pu-239 * U-235) (Pu-239 * Zr-90) + Scores = [u'nu-fission', u'total', u'scatter'] + Estimator = tracklength +[[[ 0.00000000e+00 1.68550643e-03 0.00000000e+00] + [ 0.00000000e+00 4.26021624e-04 0.00000000e+00] + [ 0.00000000e+00 1.07383071e-03 0.00000000e+00] + [ 0.00000000e+00 2.71417003e-04 0.00000000e+00]] + + [[ 0.00000000e+00 1.68550643e-03 0.00000000e+00] + [ 0.00000000e+00 4.26021624e-04 0.00000000e+00] + [ 0.00000000e+00 1.07383071e-03 0.00000000e+00] + [ 0.00000000e+00 2.71417003e-04 0.00000000e+00]] + + [[ 0.00000000e+00 1.03892314e-03 0.00000000e+00] + [ 0.00000000e+00 1.31990227e-03 0.00000000e+00] + [ 0.00000000e+00 6.61894580e-04 0.00000000e+00] + [ 0.00000000e+00 8.40905483e-04 0.00000000e+00]] + + [[ 0.00000000e+00 1.03892314e-03 0.00000000e+00] + [ 0.00000000e+00 1.31990227e-03 0.00000000e+00] + [ 0.00000000e+00 6.61894580e-04 0.00000000e+00] + [ 0.00000000e+00 8.40905483e-04 0.00000000e+00]] + + [[ 0.00000000e+00 4.78866412e-04 0.00000000e+00] + [ 0.00000000e+00 4.73832352e-03 0.00000000e+00] + [ 0.00000000e+00 3.05084248e-04 0.00000000e+00] + [ 0.00000000e+00 3.01877064e-03 0.00000000e+00]] + + [[ 0.00000000e+00 4.78866412e-04 0.00000000e+00] + [ 0.00000000e+00 4.73832352e-03 0.00000000e+00] + [ 0.00000000e+00 3.05084248e-04 0.00000000e+00] + [ 0.00000000e+00 3.01877064e-03 0.00000000e+00]] + + [[ 0.00000000e+00 1.23534068e-04 0.00000000e+00] + [ 0.00000000e+00 1.24325262e-03 0.00000000e+00] + [ 0.00000000e+00 7.87031563e-05 0.00000000e+00] + [ 0.00000000e+00 7.92072238e-04 0.00000000e+00]] + + [[ 0.00000000e+00 1.23534068e-04 0.00000000e+00] + [ 0.00000000e+00 1.24325262e-03 0.00000000e+00] + [ 0.00000000e+00 7.87031563e-05 0.00000000e+00] + [ 0.00000000e+00 7.92072238e-04 0.00000000e+00]] + + [[ 0.00000000e+00 4.57246338e-03 0.00000000e+00] + [ 0.00000000e+00 9.78864960e-04 0.00000000e+00] + [ 0.00000000e+00 3.79067678e-03 0.00000000e+00] + [ 0.00000000e+00 8.11501454e-04 0.00000000e+00]] + + [[ 0.00000000e+00 4.57246338e-03 0.00000000e+00] + [ 0.00000000e+00 9.78864960e-04 0.00000000e+00] + [ 0.00000000e+00 3.79067678e-03 0.00000000e+00] + [ 0.00000000e+00 8.11501454e-04 0.00000000e+00]] + + [[ 0.00000000e+00 2.25599726e-03 0.00000000e+00] + [ 0.00000000e+00 3.25856852e-03 0.00000000e+00] + [ 0.00000000e+00 1.87027335e-03 0.00000000e+00] + [ 0.00000000e+00 2.70142788e-03 0.00000000e+00]] + + [[ 0.00000000e+00 2.25599726e-03 0.00000000e+00] + [ 0.00000000e+00 3.25856852e-03 0.00000000e+00] + [ 0.00000000e+00 1.87027335e-03 0.00000000e+00] + [ 0.00000000e+00 2.70142788e-03 0.00000000e+00]] + + [[ 0.00000000e+00 7.78141017e-04 0.00000000e+00] + [ 0.00000000e+00 8.05177588e-03 0.00000000e+00] + [ 0.00000000e+00 6.45096711e-04 0.00000000e+00] + [ 0.00000000e+00 6.67510647e-03 0.00000000e+00]] + + [[ 0.00000000e+00 7.78141017e-04 0.00000000e+00] + [ 0.00000000e+00 8.05177588e-03 0.00000000e+00] + [ 0.00000000e+00 6.45096711e-04 0.00000000e+00] + [ 0.00000000e+00 6.67510647e-03 0.00000000e+00]] + + [[ 0.00000000e+00 2.34123363e-04 0.00000000e+00] + [ 0.00000000e+00 2.14338698e-03 0.00000000e+00] + [ 0.00000000e+00 1.94093626e-04 0.00000000e+00] + [ 0.00000000e+00 1.77691685e-03 0.00000000e+00]] + + [[ 0.00000000e+00 2.34123363e-04 0.00000000e+00] + [ 0.00000000e+00 2.14338698e-03 0.00000000e+00] + [ 0.00000000e+00 1.94093626e-04 0.00000000e+00] + [ 0.00000000e+00 1.77691685e-03 0.00000000e+00]] + + [[ 0.00000000e+00 7.98087108e-04 0.00000000e+00] + [ 0.00000000e+00 2.17118729e-04 0.00000000e+00] + [ 0.00000000e+00 2.36053279e-04 0.00000000e+00] + [ 0.00000000e+00 6.42180376e-05 0.00000000e+00]] + + [[ 0.00000000e+00 7.98087108e-04 0.00000000e+00] + [ 0.00000000e+00 2.17118729e-04 0.00000000e+00] + [ 0.00000000e+00 2.36053279e-04 0.00000000e+00] + [ 0.00000000e+00 6.42180376e-05 0.00000000e+00]] + + [[ 0.00000000e+00 4.17626001e-04 0.00000000e+00] + [ 0.00000000e+00 5.10491350e-04 0.00000000e+00] + [ 0.00000000e+00 1.23522841e-04 0.00000000e+00] + [ 0.00000000e+00 1.50989981e-04 0.00000000e+00]] + + [[ 0.00000000e+00 4.17626001e-04 0.00000000e+00] + [ 0.00000000e+00 5.10491350e-04 0.00000000e+00] + [ 0.00000000e+00 1.23522841e-04 0.00000000e+00] + [ 0.00000000e+00 1.50989981e-04 0.00000000e+00]] + + [[ 0.00000000e+00 1.52312516e-04 0.00000000e+00] + [ 0.00000000e+00 1.54884686e-03 0.00000000e+00] + [ 0.00000000e+00 4.50500561e-05 0.00000000e+00] + [ 0.00000000e+00 4.58108367e-04 0.00000000e+00]] + + [[ 0.00000000e+00 1.52312516e-04 0.00000000e+00] + [ 0.00000000e+00 1.54884686e-03 0.00000000e+00] + [ 0.00000000e+00 4.50500561e-05 0.00000000e+00] + [ 0.00000000e+00 4.58108367e-04 0.00000000e+00]] + + [[ 0.00000000e+00 4.51056743e-05 0.00000000e+00] + [ 0.00000000e+00 4.58602101e-04 0.00000000e+00] + [ 0.00000000e+00 1.33410780e-05 0.00000000e+00] + [ 0.00000000e+00 1.35642499e-04 0.00000000e+00]] + + [[ 0.00000000e+00 4.51056743e-05 0.00000000e+00] + [ 0.00000000e+00 4.58602101e-04 0.00000000e+00] + [ 0.00000000e+00 1.33410780e-05 0.00000000e+00] + [ 0.00000000e+00 1.35642499e-04 0.00000000e+00]] + + [[ 0.00000000e+00 1.17691233e-04 0.00000000e+00] + [ 0.00000000e+00 2.57333424e-05 0.00000000e+00] + [ 0.00000000e+00 3.44265026e-05 0.00000000e+00] + [ 0.00000000e+00 7.52739998e-06 0.00000000e+00]] + + [[ 0.00000000e+00 1.17691233e-04 0.00000000e+00] + [ 0.00000000e+00 2.57333424e-05 0.00000000e+00] + [ 0.00000000e+00 3.44265026e-05 0.00000000e+00] + [ 0.00000000e+00 7.52739998e-06 0.00000000e+00]] + + [[ 0.00000000e+00 8.88267335e-05 0.00000000e+00] + [ 0.00000000e+00 9.82261843e-05 0.00000000e+00] + [ 0.00000000e+00 2.59831910e-05 0.00000000e+00] + [ 0.00000000e+00 2.87326755e-05 0.00000000e+00]] + + [[ 0.00000000e+00 8.88267335e-05 0.00000000e+00] + [ 0.00000000e+00 9.82261843e-05 0.00000000e+00] + [ 0.00000000e+00 2.59831910e-05 0.00000000e+00] + [ 0.00000000e+00 2.87326755e-05 0.00000000e+00]] + + [[ 0.00000000e+00 3.28992436e-05 0.00000000e+00] + [ 0.00000000e+00 3.04106557e-04 0.00000000e+00] + [ 0.00000000e+00 9.62353672e-06 0.00000000e+00] + [ 0.00000000e+00 8.89558632e-05 0.00000000e+00]] + + [[ 0.00000000e+00 3.28992436e-05 0.00000000e+00] + [ 0.00000000e+00 3.04106557e-04 0.00000000e+00] + [ 0.00000000e+00 9.62353672e-06 0.00000000e+00] + [ 0.00000000e+00 8.89558632e-05 0.00000000e+00]] + + [[ 0.00000000e+00 1.09846679e-05 0.00000000e+00] + [ 0.00000000e+00 9.94842161e-05 0.00000000e+00] + [ 0.00000000e+00 3.21318497e-06 0.00000000e+00] + [ 0.00000000e+00 2.91006692e-05 0.00000000e+00]] + + [[ 0.00000000e+00 1.09846679e-05 0.00000000e+00] + [ 0.00000000e+00 9.94842161e-05 0.00000000e+00] + [ 0.00000000e+00 3.21318497e-06 0.00000000e+00] + [ 0.00000000e+00 2.91006692e-05 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally + ID = 10018 + Name = (tally 1 * tally 4) + Filters = + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + mesh [1] + Nuclides = U-235 Pu-239 Zr-90 + Scores = [u'nu-fission', u'total', u'scatter'] + Estimator = tracklength +[[[ 0.00000000e+00 1.68550643e-03 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 1.68550643e-03 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 1.03892314e-03 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 1.03892314e-03 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 4.78866412e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 4.78866412e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 1.23534068e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 1.23534068e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 4.57246338e-03 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 4.57246338e-03 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 2.25599726e-03 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 2.25599726e-03 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 7.78141017e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 7.78141017e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 2.34123363e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 2.34123363e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 7.98087108e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 7.98087108e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 4.17626001e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 4.17626001e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 1.52312516e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 1.52312516e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 4.51056743e-05 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 4.51056743e-05 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 1.17691233e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 1.17691233e-04 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 8.88267335e-05 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 8.88267335e-05 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 3.28992436e-05 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 3.28992436e-05 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 1.09846679e-05 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 1.09846679e-05 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]]] \ No newline at end of file diff --git a/tests/test_tally_arithmetic/settings.xml b/tests/test_tally_arithmetic/settings.xml deleted file mode 100644 index a69dde686a..0000000000 --- a/tests/test_tally_arithmetic/settings.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - 10 - 5 - 1000 - - - - - -4 -4 -4 4 4 4 - - - - - - diff --git a/tests/test_tally_arithmetic/tallies.xml b/tests/test_tally_arithmetic/tallies.xml deleted file mode 100644 index 2a2eb48361..0000000000 --- a/tests/test_tally_arithmetic/tallies.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - U-235 U-238 - fission nu-fission - - - - - U-235 Pu-239 - fission absorption - - diff --git a/tests/test_tally_arithmetic/test_tally_arithmetic.py b/tests/test_tally_arithmetic/test_tally_arithmetic.py index 2f49061f96..70439b54f9 100644 --- a/tests/test_tally_arithmetic/test_tally_arithmetic.py +++ b/tests/test_tally_arithmetic/test_tally_arithmetic.py @@ -5,11 +5,87 @@ import sys import glob import hashlib sys.path.insert(0, os.pardir) -from testing_harness import TestHarness +from testing_harness import PyAPITestHarness import openmc -class TallyArithmeticTestHarness(TestHarness): +class TallyArithmeticTestHarness(PyAPITestHarness): + def _build_inputs(self): + + # The summary.h5 file needs to be created to read in the tallies + self._input_set.settings.output = {'summary': True} + + # Initialize the tallies file + tallies_file = openmc.TalliesFile() + + # Initialize the nuclides + u235 = openmc.Nuclide('U-235') + u238 = openmc.Nuclide('U-238') + pu239 = openmc.Nuclide('Pu-239') + zr90 = openmc.Nuclide('Zr-90') + o16 = openmc.Nuclide('O-16') + + # Initialize Mesh + mesh = openmc.Mesh(mesh_id=1) + mesh.type = 'regular' + mesh.dimension = [2, 2, 2] + mesh.lower_left = [-160.0, -160.0, -183.0] + mesh.upper_right = [160.0, 160.0, 183.0] + + # Initialize the filters + energy_filter = openmc.Filter(type='energy', bins=(0.0, 0.253e-6, + 1.0e-3, 1.0, 20.0)) + material_filter = openmc.Filter(type='material', bins=(1, 3)) + universe_filter = openmc.Filter(type='universe', bins=(1, 3)) + distrib_filter = openmc.Filter(type='distribcell', bins=(60)) + mesh_filter = openmc.Filter(type='mesh') + mesh_filter.mesh = mesh + + # Initialized the tallies + tally = openmc.Tally(name='tally 1') + tally.add_filter(material_filter) + tally.add_filter(energy_filter) + tally.add_score('nu-fission') + tally.add_score('total') + tally.add_nuclide(u235) + tally.add_nuclide(pu239) + tallies_file.add_tally(tally) + + # Instantiate reaction rate Tally in fuel + tally = openmc.Tally(name='tally 2') + tally.add_filter(universe_filter) + tally.add_filter(energy_filter) + tally.add_score('total') + tally.add_score('fission') + tally.add_nuclide(u238) + tally.add_nuclide(u235) + tallies_file.add_tally(tally) + + # Instantiate reaction rate Tally in moderator + tally = openmc.Tally(name='tally 3') + tally.add_filter(distrib_filter) + tally.add_filter(energy_filter) + tally.add_score('absorption') + tally.add_score('total') + tally.add_nuclide(u235) + tally.add_nuclide(o16) + tallies_file.add_tally(tally) + + # Instantiate reaction rate Tally in moderator + tally = openmc.Tally(name='tally 4') + tally.add_filter(mesh_filter) + tally.add_filter(energy_filter) + tally.add_score('scatter') + tally.add_score('total') + tally.add_nuclide(u235) + tally.add_nuclide(zr90) + tallies_file.add_tally(tally) + tallies_file.add_mesh(mesh) + + # Export tallies to file + self._input_set.tallies = tallies_file + super(TallyArithmeticTestHarness, self)._build_inputs() + def _get_results(self, hash_output=False): """Digest info in the statepoint and return as a string.""" @@ -22,27 +98,87 @@ class TallyArithmeticTestHarness(TestHarness): su = openmc.Summary(summary) sp.link_with_summary(su) + print 'reading in tallies' + # Load the tallies tally_1 = sp.get_tally(name='tally 1') tally_2 = sp.get_tally(name='tally 2') + tally_3 = sp.get_tally(name='tally 3') + tally_4 = sp.get_tally(name='tally 4') # Perform all the tally arithmetic operations and output results outstr = '' - tally_3 = tally_1 + tally_2 - outstr += repr(tally_3) - outstr += str(tally_3.mean) + tally_5 = tally_1 * tally_2 + outstr += repr(tally_5) + outstr += str(tally_5.mean) - tally_3 = tally_1 - tally_2 - outstr += repr(tally_3) - outstr += str(tally_3.mean) + tally_5 = tally_1.hybrid_product(tally_2, '*', 'entrywise', 'tensor', + 'tensor') + outstr += repr(tally_5) + outstr += str(tally_5.mean) - tally_3 = tally_1 * tally_2 - outstr += repr(tally_3) - outstr += str(tally_3.mean) + tally_5 = tally_1.hybrid_product(tally_2, '*', 'entrywise', 'entrywise', + 'tensor') + outstr += repr(tally_5) + outstr += str(tally_5.mean) - tally_3 = tally_1 / tally_2 - outstr += repr(tally_3) - outstr += str(tally_3.mean) + tally_5 = tally_1.hybrid_product(tally_2, '*', 'entrywise', 'tensor', + 'entrywise') + outstr += repr(tally_5) + outstr += str(tally_5.mean) + + tally_5 = tally_1.hybrid_product(tally_2, '*', 'entrywise', 'entrywise', + 'entrywise') + outstr += repr(tally_5) + outstr += str(tally_5.mean) + + tally_5 = tally_1 * tally_3 + outstr += repr(tally_5) + outstr += str(tally_5.mean) + + tally_5 = tally_1.hybrid_product(tally_3, '*', 'entrywise', 'tensor', + 'tensor') + outstr += repr(tally_5) + outstr += str(tally_5.mean) + + tally_5 = tally_1.hybrid_product(tally_3, '*', 'entrywise', 'entrywise', + 'tensor') + outstr += repr(tally_5) + outstr += str(tally_5.mean) + + tally_5 = tally_1.hybrid_product(tally_3, '*', 'entrywise', 'tensor', + 'entrywise') + outstr += repr(tally_5) + outstr += str(tally_5.mean) + + tally_5 = tally_1.hybrid_product(tally_3, '*', 'entrywise', 'entrywise', + 'entrywise') + outstr += repr(tally_5) + outstr += str(tally_5.mean) + + tally_5 = tally_1 * tally_4 + outstr += repr(tally_5) + outstr += str(tally_5.mean) + + tally_5 = tally_1.hybrid_product(tally_4, '*', 'entrywise', 'tensor', + 'tensor') + outstr += repr(tally_5) + outstr += str(tally_5.mean) + + tally_5 = tally_1.hybrid_product(tally_4, '*', 'entrywise', 'entrywise', + 'tensor') + outstr += repr(tally_5) + outstr += str(tally_5.mean) + + tally_5 = tally_1.hybrid_product(tally_4, '*', 'entrywise', 'tensor', + 'entrywise') + outstr += repr(tally_5) + outstr += str(tally_5.mean) + + tally_5 = tally_1.hybrid_product(tally_4, '*', 'entrywise', 'entrywise', + 'entrywise') + outstr += repr(tally_5) + outstr += str(tally_5.mean) print(outstr) @@ -54,6 +190,11 @@ class TallyArithmeticTestHarness(TestHarness): return outstr + def _cleanup(self): + super(TallyArithmeticTestHarness, self)._cleanup() + f = os.path.join(os.getcwd(), 'tallies.xml') + if os.path.exists(f): os.remove(f) + if __name__ == '__main__': harness = TallyArithmeticTestHarness('statepoint.10.h5', True) harness.main() From 36ca4c9ee8a9073fa311cd0428ab61698ec6e405 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Fri, 18 Dec 2015 14:04:15 -0800 Subject: [PATCH 072/650] added tally arithmetic test inputs_true.dat --- tests/test_tally_arithmetic/inputs_true.dat | 1 + 1 file changed, 1 insertion(+) create mode 100644 tests/test_tally_arithmetic/inputs_true.dat diff --git a/tests/test_tally_arithmetic/inputs_true.dat b/tests/test_tally_arithmetic/inputs_true.dat new file mode 100644 index 0000000000..64d6dcaa94 --- /dev/null +++ b/tests/test_tally_arithmetic/inputs_true.dat @@ -0,0 +1 @@ +95bc6a1a1cca9965ff55251a8de7b2e31ae6a1dc68308554b3cac6ab83673408b10acdb7131bce73516ec0aee6f00efda49afe3038e79df8cf4c854234a6d383 \ No newline at end of file From 911c88ff97d17a056dde134e0a66c51c63c63e18 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Sat, 19 Dec 2015 09:11:40 -0800 Subject: [PATCH 073/650] condensed the tally arithmetic test to reduce run time --- tests/test_tally_arithmetic/inputs_true.dat | 2 +- tests/test_tally_arithmetic/results_true.dat | 1609 ++--------------- .../test_tally_arithmetic.py | 108 +- 3 files changed, 149 insertions(+), 1570 deletions(-) diff --git a/tests/test_tally_arithmetic/inputs_true.dat b/tests/test_tally_arithmetic/inputs_true.dat index 64d6dcaa94..8e8838131a 100644 --- a/tests/test_tally_arithmetic/inputs_true.dat +++ b/tests/test_tally_arithmetic/inputs_true.dat @@ -1 +1 @@ -95bc6a1a1cca9965ff55251a8de7b2e31ae6a1dc68308554b3cac6ab83673408b10acdb7131bce73516ec0aee6f00efda49afe3038e79df8cf4c854234a6d383 \ No newline at end of file +df6318b76cd37a29ef9dd09da48a70c191ed07c1a2ceb75eb502ab35086c31250872406f22c2587edfcee16f67dd95c81db012ccd728710ed2509084438aea56 \ No newline at end of file diff --git a/tests/test_tally_arithmetic/results_true.dat b/tests/test_tally_arithmetic/results_true.dat index cf1189261b..2878cbf4b7 100644 --- a/tests/test_tally_arithmetic/results_true.dat +++ b/tests/test_tally_arithmetic/results_true.dat @@ -1,91 +1,119 @@ Tally + ID = 10002 + Name = (tally 1 * tally 2) + Filters = + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + distribcell [60] + mesh [1] + Nuclides = (U-235 * U-238) (U-235 * U-235) (Pu-239 * U-238) (Pu-239 * U-235) + Scores = [(nu-fission * total), (nu-fission * fission), (total * total), (total * fission)] + Estimator = tracklength +[[[ 8.90240785e-05 8.31464209e-11 4.41507090e-05 4.12357364e-11] + [ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] + [ 4.69276830e-05 4.38293656e-11 2.35903380e-05 2.20328275e-11] + [ 3.84607356e-05 3.15690405e-05 1.93340411e-05 1.58696166e-05]] + + [[ 8.90240785e-05 8.31464209e-11 4.41507090e-05 4.12357364e-11] + [ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] + [ 4.69276830e-05 4.38293656e-11 2.35903380e-05 2.20328275e-11] + [ 3.84607356e-05 3.15690405e-05 1.93340411e-05 1.58696166e-05]] + + [[ 8.90240785e-05 8.31464209e-11 4.41507090e-05 4.12357364e-11] + [ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] + [ 4.69276830e-05 4.38293656e-11 2.35903380e-05 2.20328275e-11] + [ 3.84607356e-05 3.15690405e-05 1.93340411e-05 1.58696166e-05]] + + ..., + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally + ID = 10003 + Name = (tally 1 * tally 2) + Filters = + material [1 3] + energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 + 2.00000000e+01] + distribcell [60] + mesh [1] + Nuclides = (U-235 * U-238) (U-235 * U-235) (Pu-239 * U-238) (Pu-239 * U-235) + Scores = [(nu-fission * total), (nu-fission * fission), (total * total), (total * fission)] + Estimator = tracklength +[[[ 8.90240785e-05 8.31464209e-11 4.41507090e-05 4.12357364e-11] + [ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] + [ 4.69276830e-05 4.38293656e-11 2.35903380e-05 2.20328275e-11] + [ 3.84607356e-05 3.15690405e-05 1.93340411e-05 1.58696166e-05]] + + [[ 8.90240785e-05 8.31464209e-11 4.41507090e-05 4.12357364e-11] + [ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] + [ 4.69276830e-05 4.38293656e-11 2.35903380e-05 2.20328275e-11] + [ 3.84607356e-05 3.15690405e-05 1.93340411e-05 1.58696166e-05]] + + [[ 8.90240785e-05 8.31464209e-11 4.41507090e-05 4.12357364e-11] + [ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] + [ 4.69276830e-05 4.38293656e-11 2.35903380e-05 2.20328275e-11] + [ 3.84607356e-05 3.15690405e-05 1.93340411e-05 1.58696166e-05]] + + ..., + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally ID = 10004 Name = (tally 1 * tally 2) Filters = material [1 3] energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 2.00000000e+01] - universe [1 3] - Nuclides = (U-235 * U-238) (U-235 * U-235) (Pu-239 * U-238) (Pu-239 * U-235) + distribcell [60] + mesh [1] + Nuclides = U-235 Pu-239 U-238 Scores = [(nu-fission * total), (nu-fission * fission), (total * total), (total * fission)] Estimator = tracklength -[[[ 4.38740856e-02 4.44445557e-08 2.18498184e-02 2.21339193e-08] - [ 3.91423913e-02 3.22796615e-02 1.94933781e-02 1.60756567e-02] - [ 2.68307165e-02 2.71795812e-08 1.39204488e-02 1.41014486e-08] - [ 2.39371006e-02 1.97402734e-02 1.24191684e-02 1.02417491e-02]] - - [[ 4.38740856e-02 4.44445557e-08 2.18498184e-02 2.21339193e-08] - [ 3.91423913e-02 3.22796615e-02 1.94933781e-02 1.60756567e-02] - [ 2.68307165e-02 2.71795812e-08 1.39204488e-02 1.41014486e-08] - [ 2.39371006e-02 1.97402734e-02 1.24191684e-02 1.02417491e-02]] - - [[ 6.34252895e-02 9.32564450e-07 4.92445903e-02 7.24060618e-07] - [ 6.77320364e-03 3.57584505e-03 5.25884298e-03 2.77635350e-03] - [ 6.58867184e-02 9.68755709e-07 4.08248924e-02 6.00262822e-07] - [ 7.03606029e-03 3.71461759e-03 4.35970118e-03 2.30166059e-03]] - - [[ 6.34252895e-02 9.32564450e-07 4.92445903e-02 7.24060618e-07] - [ 6.77320364e-03 3.57584505e-03 5.25884298e-03 2.77635350e-03] - [ 6.58867184e-02 9.68755709e-07 4.08248924e-02 6.00262822e-07] - [ 7.03606029e-03 3.71461759e-03 4.35970118e-03 2.30166059e-03]] - - [[ 1.41588780e-02 1.27076668e-06 3.12556757e-02 2.80521318e-06] - [ 3.40319989e-04 6.28212863e-05 7.51255235e-04 1.38677779e-04] - [ 4.32998473e-03 3.88618386e-07 9.24461087e-03 8.29708643e-07] - [ 1.04074656e-04 1.92116360e-05 2.22201637e-04 4.10172576e-05]] - - [[ 1.41588780e-02 1.27076668e-06 3.12556757e-02 2.80521318e-06] - [ 3.40319989e-04 6.28212863e-05 7.51255235e-04 1.38677779e-04] - [ 4.32998473e-03 3.88618386e-07 9.24461087e-03 8.29708643e-07] - [ 1.04074656e-04 1.92116360e-05 2.22201637e-04 4.10172576e-05]] - - [[ 1.30500388e-03 7.58050822e-05 2.86079380e-03 1.66177827e-04] - [ 2.87565919e-05 4.85258186e-06 6.30394140e-05 1.06376972e-05] - [ 6.91597829e-04 4.01735436e-05 8.36826356e-04 4.86095802e-05] - [ 1.52397988e-05 2.57166674e-06 1.84400019e-05 3.11169067e-06]] - - [[ 1.30500388e-03 7.58050822e-05 2.86079380e-03 1.66177827e-04] - [ 2.87565919e-05 4.85258186e-06 6.30394140e-05 1.06376972e-05] - [ 6.91597829e-04 4.01735436e-05 8.36826356e-04 4.86095802e-05] - [ 1.52397988e-05 2.57166674e-06 1.84400019e-05 3.11169067e-06]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] +[[[ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + [[ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + + ..., + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally ID = 10005 @@ -94,1440 +122,65 @@ Tally material [1 3] energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 2.00000000e+01] - universe [1 3] + distribcell [60] + mesh [1] Nuclides = (U-235 * U-238) (U-235 * U-235) (Pu-239 * U-238) (Pu-239 * U-235) - Scores = [(nu-fission * total), (nu-fission * fission), (total * total), (total * fission)] + Scores = [u'nu-fission', u'total', u'fission'] Estimator = tracklength -[[[ 4.38740856e-02 4.44445557e-08 2.18498184e-02 2.21339193e-08] - [ 3.91423913e-02 3.22796615e-02 1.94933781e-02 1.60756567e-02] - [ 2.68307165e-02 2.71795812e-08 1.39204488e-02 1.41014486e-08] - [ 2.39371006e-02 1.97402734e-02 1.24191684e-02 1.02417491e-02]] +[[[ 0.00000000e+00 4.41507090e-05 0.00000000e+00] + [ 0.00000000e+00 3.61847984e-05 0.00000000e+00] + [ 0.00000000e+00 2.35903380e-05 0.00000000e+00] + [ 0.00000000e+00 1.93340411e-05 0.00000000e+00]] - [[ 4.38740856e-02 4.44445557e-08 2.18498184e-02 2.21339193e-08] - [ 3.91423913e-02 3.22796615e-02 1.94933781e-02 1.60756567e-02] - [ 2.68307165e-02 2.71795812e-08 1.39204488e-02 1.41014486e-08] - [ 2.39371006e-02 1.97402734e-02 1.24191684e-02 1.02417491e-02]] + [[ 0.00000000e+00 4.41507090e-05 0.00000000e+00] + [ 0.00000000e+00 3.61847984e-05 0.00000000e+00] + [ 0.00000000e+00 2.35903380e-05 0.00000000e+00] + [ 0.00000000e+00 1.93340411e-05 0.00000000e+00]] - [[ 6.34252895e-02 9.32564450e-07 4.92445903e-02 7.24060618e-07] - [ 6.77320364e-03 3.57584505e-03 5.25884298e-03 2.77635350e-03] - [ 6.58867184e-02 9.68755709e-07 4.08248924e-02 6.00262822e-07] - [ 7.03606029e-03 3.71461759e-03 4.35970118e-03 2.30166059e-03]] + [[ 0.00000000e+00 4.41507090e-05 0.00000000e+00] + [ 0.00000000e+00 3.61847984e-05 0.00000000e+00] + [ 0.00000000e+00 2.35903380e-05 0.00000000e+00] + [ 0.00000000e+00 1.93340411e-05 0.00000000e+00]] - [[ 6.34252895e-02 9.32564450e-07 4.92445903e-02 7.24060618e-07] - [ 6.77320364e-03 3.57584505e-03 5.25884298e-03 2.77635350e-03] - [ 6.58867184e-02 9.68755709e-07 4.08248924e-02 6.00262822e-07] - [ 7.03606029e-03 3.71461759e-03 4.35970118e-03 2.30166059e-03]] + ..., + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - [[ 1.41588780e-02 1.27076668e-06 3.12556757e-02 2.80521318e-06] - [ 3.40319989e-04 6.28212863e-05 7.51255235e-04 1.38677779e-04] - [ 4.32998473e-03 3.88618386e-07 9.24461087e-03 8.29708643e-07] - [ 1.04074656e-04 1.92116360e-05 2.22201637e-04 4.10172576e-05]] + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - [[ 1.41588780e-02 1.27076668e-06 3.12556757e-02 2.80521318e-06] - [ 3.40319989e-04 6.28212863e-05 7.51255235e-04 1.38677779e-04] - [ 4.32998473e-03 3.88618386e-07 9.24461087e-03 8.29708643e-07] - [ 1.04074656e-04 1.92116360e-05 2.22201637e-04 4.10172576e-05]] - - [[ 1.30500388e-03 7.58050822e-05 2.86079380e-03 1.66177827e-04] - [ 2.87565919e-05 4.85258186e-06 6.30394140e-05 1.06376972e-05] - [ 6.91597829e-04 4.01735436e-05 8.36826356e-04 4.86095802e-05] - [ 1.52397988e-05 2.57166674e-06 1.84400019e-05 3.11169067e-06]] - - [[ 1.30500388e-03 7.58050822e-05 2.86079380e-03 1.66177827e-04] - [ 2.87565919e-05 4.85258186e-06 6.30394140e-05 1.06376972e-05] - [ 6.91597829e-04 4.01735436e-05 8.36826356e-04 4.86095802e-05] - [ 1.52397988e-05 2.57166674e-06 1.84400019e-05 3.11169067e-06]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally ID = 10006 Name = (tally 1 * tally 2) Filters = material [1 3] energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 2.00000000e+01] - universe [1 3] - Nuclides = U-235 Pu-239 U-238 - Scores = [(nu-fission * total), (nu-fission * fission), (total * total), (total * fission)] - Estimator = tracklength -[[[ 3.91423913e-02 3.22796615e-02 1.94933781e-02 1.60756567e-02] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 3.91423913e-02 3.22796615e-02 1.94933781e-02 1.60756567e-02] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 6.77320364e-03 3.57584505e-03 5.25884298e-03 2.77635350e-03] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 6.77320364e-03 3.57584505e-03 5.25884298e-03 2.77635350e-03] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 3.40319989e-04 6.28212863e-05 7.51255235e-04 1.38677779e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 3.40319989e-04 6.28212863e-05 7.51255235e-04 1.38677779e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 2.87565919e-05 4.85258186e-06 6.30394140e-05 1.06376972e-05] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 2.87565919e-05 4.85258186e-06 6.30394140e-05 1.06376972e-05] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally - ID = 10007 - Name = (tally 1 * tally 2) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - universe [1 3] - Nuclides = (U-235 * U-238) (U-235 * U-235) (Pu-239 * U-238) (Pu-239 * U-235) - Scores = [u'nu-fission', u'total', u'fission'] - Estimator = tracklength -[[[ 0.00000000e+00 2.18498184e-02 0.00000000e+00] - [ 0.00000000e+00 1.94933781e-02 0.00000000e+00] - [ 0.00000000e+00 1.39204488e-02 0.00000000e+00] - [ 0.00000000e+00 1.24191684e-02 0.00000000e+00]] - - [[ 0.00000000e+00 2.18498184e-02 0.00000000e+00] - [ 0.00000000e+00 1.94933781e-02 0.00000000e+00] - [ 0.00000000e+00 1.39204488e-02 0.00000000e+00] - [ 0.00000000e+00 1.24191684e-02 0.00000000e+00]] - - [[ 0.00000000e+00 4.92445903e-02 0.00000000e+00] - [ 0.00000000e+00 5.25884298e-03 0.00000000e+00] - [ 0.00000000e+00 4.08248924e-02 0.00000000e+00] - [ 0.00000000e+00 4.35970118e-03 0.00000000e+00]] - - [[ 0.00000000e+00 4.92445903e-02 0.00000000e+00] - [ 0.00000000e+00 5.25884298e-03 0.00000000e+00] - [ 0.00000000e+00 4.08248924e-02 0.00000000e+00] - [ 0.00000000e+00 4.35970118e-03 0.00000000e+00]] - - [[ 0.00000000e+00 3.12556757e-02 0.00000000e+00] - [ 0.00000000e+00 7.51255235e-04 0.00000000e+00] - [ 0.00000000e+00 9.24461087e-03 0.00000000e+00] - [ 0.00000000e+00 2.22201637e-04 0.00000000e+00]] - - [[ 0.00000000e+00 3.12556757e-02 0.00000000e+00] - [ 0.00000000e+00 7.51255235e-04 0.00000000e+00] - [ 0.00000000e+00 9.24461087e-03 0.00000000e+00] - [ 0.00000000e+00 2.22201637e-04 0.00000000e+00]] - - [[ 0.00000000e+00 2.86079380e-03 0.00000000e+00] - [ 0.00000000e+00 6.30394140e-05 0.00000000e+00] - [ 0.00000000e+00 8.36826356e-04 0.00000000e+00] - [ 0.00000000e+00 1.84400019e-05 0.00000000e+00]] - - [[ 0.00000000e+00 2.86079380e-03 0.00000000e+00] - [ 0.00000000e+00 6.30394140e-05 0.00000000e+00] - [ 0.00000000e+00 8.36826356e-04 0.00000000e+00] - [ 0.00000000e+00 1.84400019e-05 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally - ID = 10008 - Name = (tally 1 * tally 2) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - universe [1 3] + distribcell [60] + mesh [1] Nuclides = U-235 Pu-239 U-238 Scores = [u'nu-fission', u'total', u'fission'] Estimator = tracklength -[[[ 0.00000000e+00 1.94933781e-02 0.00000000e+00] +[[[ 0.00000000e+00 3.61847984e-05 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - [[ 0.00000000e+00 1.94933781e-02 0.00000000e+00] + [[ 0.00000000e+00 3.61847984e-05 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - [[ 0.00000000e+00 5.25884298e-03 0.00000000e+00] + [[ 0.00000000e+00 3.61847984e-05 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - [[ 0.00000000e+00 5.25884298e-03 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 7.51255235e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 7.51255235e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 6.30394140e-05 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 6.30394140e-05 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally - ID = 10009 - Name = (tally 1 * tally 3) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - distribcell [60] - Nuclides = (U-235 * U-235) (U-235 * O-16) (Pu-239 * U-235) (Pu-239 * O-16) - Scores = [(nu-fission * absorption), (nu-fission * total), (total * absorption), (total * total)] - Estimator = tracklength -[[[ 1.28735734e-03 1.32667348e-03 6.41119323e-04 6.60699229e-04] - [ 7.64287878e-08 1.96051024e-03 3.80624487e-08 9.76357502e-04] - [ 7.87269280e-04 8.11312633e-04 4.08455054e-04 4.20929349e-04] - [ 4.67391880e-08 1.19892856e-03 2.42494633e-08 6.22034217e-04]] - - [[ 1.28735734e-03 1.32667348e-03 6.41119323e-04 6.60699229e-04] - [ 7.64287878e-08 1.96051024e-03 3.80624487e-08 9.76357502e-04] - [ 7.87269280e-04 8.11312633e-04 4.08455054e-04 4.20929349e-04] - [ 4.67391880e-08 1.19892856e-03 2.42494633e-08 6.22034217e-04]] - - [[ 3.23659105e-04 4.09115129e-04 1.61186098e-04 2.03744218e-04] - [ 2.11850877e-08 5.44379963e-03 1.05504266e-08 2.71107720e-03] - [ 1.97930180e-04 2.50189876e-04 1.02691143e-04 1.29804785e-04] - [ 1.29555083e-08 3.32909603e-03 6.72164275e-09 1.72721855e-03]] - ..., - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally - ID = 10010 - Name = (tally 1 * tally 3) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - distribcell [60] - Nuclides = (U-235 * U-235) (U-235 * O-16) (Pu-239 * U-235) (Pu-239 * O-16) - Scores = [(nu-fission * absorption), (nu-fission * total), (total * absorption), (total * total)] - Estimator = tracklength -[[[ 1.28735734e-03 1.32667348e-03 6.41119323e-04 6.60699229e-04] - [ 7.64287878e-08 1.96051024e-03 3.80624487e-08 9.76357502e-04] - [ 7.87269280e-04 8.11312633e-04 4.08455054e-04 4.20929349e-04] - [ 4.67391880e-08 1.19892856e-03 2.42494633e-08 6.22034217e-04]] - - [[ 1.28735734e-03 1.32667348e-03 6.41119323e-04 6.60699229e-04] - [ 7.64287878e-08 1.96051024e-03 3.80624487e-08 9.76357502e-04] - [ 7.87269280e-04 8.11312633e-04 4.08455054e-04 4.20929349e-04] - [ 4.67391880e-08 1.19892856e-03 2.42494633e-08 6.22034217e-04]] - - [[ 3.23659105e-04 4.09115129e-04 1.61186098e-04 2.03744218e-04] - [ 2.11850877e-08 5.44379963e-03 1.05504266e-08 2.71107720e-03] - [ 1.97930180e-04 2.50189876e-04 1.02691143e-04 1.29804785e-04] - [ 1.29555083e-08 3.32909603e-03 6.72164275e-09 1.72721855e-03]] - - ..., - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally - ID = 10011 - Name = (tally 1 * tally 3) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - distribcell [60] - Nuclides = U-235 Pu-239 O-16 - Scores = [(nu-fission * absorption), (nu-fission * total), (total * absorption), (total * total)] - Estimator = tracklength -[[[ 0.00128736 0.00132667 0.00064112 0.0006607 ] - [ 0. 0. 0. 0. ] - [ 0. 0. 0. 0. ]] - - [[ 0.00128736 0.00132667 0.00064112 0.0006607 ] - [ 0. 0. 0. 0. ] - [ 0. 0. 0. 0. ]] - - [[ 0.00032366 0.00040912 0.00016119 0.00020374] - [ 0. 0. 0. 0. ] - [ 0. 0. 0. 0. ]] - - ..., - [[ 0. 0. 0. 0. ] - [ 0. 0. 0. 0. ] - [ 0. 0. 0. 0. ]] - - [[ 0. 0. 0. 0. ] - [ 0. 0. 0. 0. ] - [ 0. 0. 0. 0. ]] - - [[ 0. 0. 0. 0. ] - [ 0. 0. 0. 0. ] - [ 0. 0. 0. 0. ]]]Tally - ID = 10012 - Name = (tally 1 * tally 3) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - distribcell [60] - Nuclides = (U-235 * U-235) (U-235 * O-16) (Pu-239 * U-235) (Pu-239 * O-16) - Scores = [u'nu-fission', u'total', u'absorption'] - Estimator = tracklength -[[[ 0. 0.0006607 0. ] - [ 0. 0.00097636 0. ] - [ 0. 0.00042093 0. ] - [ 0. 0.00062203 0. ]] - - [[ 0. 0.0006607 0. ] - [ 0. 0.00097636 0. ] - [ 0. 0.00042093 0. ] - [ 0. 0.00062203 0. ]] - - [[ 0. 0.00020374 0. ] - [ 0. 0.00271108 0. ] - [ 0. 0.0001298 0. ] - [ 0. 0.00172722 0. ]] - - ..., - [[ 0. 0. 0. ] - [ 0. 0. 0. ] - [ 0. 0. 0. ] - [ 0. 0. 0. ]] - - [[ 0. 0. 0. ] - [ 0. 0. 0. ] - [ 0. 0. 0. ] - [ 0. 0. 0. ]] - - [[ 0. 0. 0. ] - [ 0. 0. 0. ] - [ 0. 0. 0. ] - [ 0. 0. 0. ]]]Tally - ID = 10013 - Name = (tally 1 * tally 3) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - distribcell [60] - Nuclides = U-235 Pu-239 O-16 - Scores = [u'nu-fission', u'total', u'absorption'] - Estimator = tracklength -[[[ 0. 0.0006607 0. ] - [ 0. 0. 0. ] - [ 0. 0. 0. ]] - - [[ 0. 0.0006607 0. ] - [ 0. 0. 0. ] - [ 0. 0. 0. ]] - - [[ 0. 0.00020374 0. ] - [ 0. 0. 0. ] - [ 0. 0. 0. ]] - - ..., - [[ 0. 0. 0. ] - [ 0. 0. 0. ] - [ 0. 0. 0. ]] - - [[ 0. 0. 0. ] - [ 0. 0. 0. ] - [ 0. 0. 0. ]] - - [[ 0. 0. 0. ] - [ 0. 0. 0. ] - [ 0. 0. 0. ]]]Tally - ID = 10014 - Name = (tally 1 * tally 4) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - mesh [1] - Nuclides = (U-235 * U-235) (U-235 * Zr-90) (Pu-239 * U-235) (Pu-239 * Zr-90) - Scores = [(nu-fission * scatter), (nu-fission * total), (total * scatter), (total * total)] - Estimator = tracklength -[[[ 1.25406870e-04 3.38446993e-03 6.24541184e-05 1.68550643e-03] - [ 8.54338123e-04 8.55444603e-04 4.25470584e-04 4.26021624e-04] - [ 7.66911978e-05 2.06973551e-03 3.97893175e-05 1.07383071e-03] - [ 5.22461121e-04 5.23137776e-04 2.71065937e-04 2.71417003e-04]] - - [[ 1.25406870e-04 3.38446993e-03 6.24541184e-05 1.68550643e-03] - [ 8.54338123e-04 8.55444603e-04 4.25470584e-04 4.26021624e-04] - [ 7.66911978e-05 2.06973551e-03 3.97893175e-05 1.07383071e-03] - [ 5.22461121e-04 5.23137776e-04 2.71065937e-04 2.71417003e-04]] - - [[ 3.99632703e-04 2.08614103e-03 1.99021857e-04 1.03892314e-03] - [ 2.65001925e-03 2.65034264e-03 1.31974122e-03 1.31990227e-03] - [ 2.44391002e-04 1.27575670e-03 1.26796183e-04 6.61894580e-04] - [ 1.62059025e-03 1.62078801e-03 8.40802879e-04 8.40905483e-04]] - - ..., - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally - ID = 10015 - Name = (tally 1 * tally 4) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - mesh [1] - Nuclides = (U-235 * U-235) (U-235 * Zr-90) (Pu-239 * U-235) (Pu-239 * Zr-90) - Scores = [(nu-fission * scatter), (nu-fission * total), (total * scatter), (total * total)] - Estimator = tracklength -[[[ 1.25406870e-04 3.38446993e-03 6.24541184e-05 1.68550643e-03] - [ 8.54338123e-04 8.55444603e-04 4.25470584e-04 4.26021624e-04] - [ 7.66911978e-05 2.06973551e-03 3.97893175e-05 1.07383071e-03] - [ 5.22461121e-04 5.23137776e-04 2.71065937e-04 2.71417003e-04]] - - [[ 1.25406870e-04 3.38446993e-03 6.24541184e-05 1.68550643e-03] - [ 8.54338123e-04 8.55444603e-04 4.25470584e-04 4.26021624e-04] - [ 7.66911978e-05 2.06973551e-03 3.97893175e-05 1.07383071e-03] - [ 5.22461121e-04 5.23137776e-04 2.71065937e-04 2.71417003e-04]] - - [[ 3.99632703e-04 2.08614103e-03 1.99021857e-04 1.03892314e-03] - [ 2.65001925e-03 2.65034264e-03 1.31974122e-03 1.31990227e-03] - [ 2.44391002e-04 1.27575670e-03 1.26796183e-04 6.61894580e-04] - [ 1.62059025e-03 1.62078801e-03 8.40802879e-04 8.40905483e-04]] - - ..., - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally - ID = 10016 - Name = (tally 1 * tally 4) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - mesh [1] - Nuclides = U-235 Pu-239 Zr-90 - Scores = [(nu-fission * scatter), (nu-fission * total), (total * scatter), (total * total)] - Estimator = tracklength -[[[ 1.25406870e-04 3.38446993e-03 6.24541184e-05 1.68550643e-03] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 1.25406870e-04 3.38446993e-03 6.24541184e-05 1.68550643e-03] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 3.99632703e-04 2.08614103e-03 1.99021857e-04 1.03892314e-03] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 3.99632703e-04 2.08614103e-03 1.99021857e-04 1.03892314e-03] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 7.26649160e-04 9.61556092e-04 3.61879956e-04 4.78866412e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 7.26649160e-04 9.61556092e-04 3.61879956e-04 4.78866412e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 2.03428184e-04 2.48054431e-04 1.01309664e-04 1.23534068e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 2.03428184e-04 2.48054431e-04 1.01309664e-04 1.23534068e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 2.07797571e-04 5.88917101e-03 1.61337951e-04 4.57246338e-03] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 2.07797571e-04 5.88917101e-03 1.61337951e-04 4.57246338e-03] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 5.43202987e-04 2.90564462e-03 4.21753038e-04 2.25599726e-03] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 5.43202987e-04 2.90564462e-03 4.21753038e-04 2.25599726e-03] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 7.56220267e-04 1.00221809e-03 5.87143670e-04 7.78141017e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 7.56220267e-04 1.00221809e-03 5.87143670e-04 7.78141017e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 2.48919397e-04 3.01542606e-04 1.93265712e-04 2.34123363e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 2.48919397e-04 3.01542606e-04 1.93265712e-04 2.34123363e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 1.15352081e-05 3.61534913e-04 2.54639331e-05 7.98087108e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 1.15352081e-05 3.61534913e-04 2.54639331e-05 7.98087108e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 3.43932622e-05 1.89185338e-04 7.59230111e-05 4.17626001e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 3.43932622e-05 1.89185338e-04 7.59230111e-05 4.17626001e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 5.23298543e-05 6.89978472e-05 1.15517978e-04 1.52312516e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 5.23298543e-05 6.89978472e-05 1.15517978e-04 1.52312516e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 1.66777184e-05 2.04329526e-05 3.68160075e-05 4.51056743e-05] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 1.66777184e-05 2.04329526e-05 3.68160075e-05 4.51056743e-05] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 2.13734333e-06 5.36870274e-05 4.68542556e-06 1.17691233e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 2.13734333e-06 5.36870274e-05 4.68542556e-06 1.17691233e-04] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 7.20926557e-06 4.05199536e-05 1.58039547e-05 8.88267335e-05] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 7.20926557e-06 4.05199536e-05 1.58039547e-05 8.88267335e-05] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 1.11679867e-05 1.50075971e-05 2.44821549e-05 3.28992436e-05] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 1.11679867e-05 1.50075971e-05 2.44821549e-05 3.28992436e-05] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 4.13069536e-06 5.01085896e-06 9.05519734e-06 1.09846679e-05] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 4.13069536e-06 5.01085896e-06 9.05519734e-06 1.09846679e-05] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally - ID = 10017 - Name = (tally 1 * tally 4) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - mesh [1] - Nuclides = (U-235 * U-235) (U-235 * Zr-90) (Pu-239 * U-235) (Pu-239 * Zr-90) - Scores = [u'nu-fission', u'total', u'scatter'] - Estimator = tracklength -[[[ 0.00000000e+00 1.68550643e-03 0.00000000e+00] - [ 0.00000000e+00 4.26021624e-04 0.00000000e+00] - [ 0.00000000e+00 1.07383071e-03 0.00000000e+00] - [ 0.00000000e+00 2.71417003e-04 0.00000000e+00]] - - [[ 0.00000000e+00 1.68550643e-03 0.00000000e+00] - [ 0.00000000e+00 4.26021624e-04 0.00000000e+00] - [ 0.00000000e+00 1.07383071e-03 0.00000000e+00] - [ 0.00000000e+00 2.71417003e-04 0.00000000e+00]] - - [[ 0.00000000e+00 1.03892314e-03 0.00000000e+00] - [ 0.00000000e+00 1.31990227e-03 0.00000000e+00] - [ 0.00000000e+00 6.61894580e-04 0.00000000e+00] - [ 0.00000000e+00 8.40905483e-04 0.00000000e+00]] - - [[ 0.00000000e+00 1.03892314e-03 0.00000000e+00] - [ 0.00000000e+00 1.31990227e-03 0.00000000e+00] - [ 0.00000000e+00 6.61894580e-04 0.00000000e+00] - [ 0.00000000e+00 8.40905483e-04 0.00000000e+00]] - - [[ 0.00000000e+00 4.78866412e-04 0.00000000e+00] - [ 0.00000000e+00 4.73832352e-03 0.00000000e+00] - [ 0.00000000e+00 3.05084248e-04 0.00000000e+00] - [ 0.00000000e+00 3.01877064e-03 0.00000000e+00]] - - [[ 0.00000000e+00 4.78866412e-04 0.00000000e+00] - [ 0.00000000e+00 4.73832352e-03 0.00000000e+00] - [ 0.00000000e+00 3.05084248e-04 0.00000000e+00] - [ 0.00000000e+00 3.01877064e-03 0.00000000e+00]] - - [[ 0.00000000e+00 1.23534068e-04 0.00000000e+00] - [ 0.00000000e+00 1.24325262e-03 0.00000000e+00] - [ 0.00000000e+00 7.87031563e-05 0.00000000e+00] - [ 0.00000000e+00 7.92072238e-04 0.00000000e+00]] - - [[ 0.00000000e+00 1.23534068e-04 0.00000000e+00] - [ 0.00000000e+00 1.24325262e-03 0.00000000e+00] - [ 0.00000000e+00 7.87031563e-05 0.00000000e+00] - [ 0.00000000e+00 7.92072238e-04 0.00000000e+00]] - - [[ 0.00000000e+00 4.57246338e-03 0.00000000e+00] - [ 0.00000000e+00 9.78864960e-04 0.00000000e+00] - [ 0.00000000e+00 3.79067678e-03 0.00000000e+00] - [ 0.00000000e+00 8.11501454e-04 0.00000000e+00]] - - [[ 0.00000000e+00 4.57246338e-03 0.00000000e+00] - [ 0.00000000e+00 9.78864960e-04 0.00000000e+00] - [ 0.00000000e+00 3.79067678e-03 0.00000000e+00] - [ 0.00000000e+00 8.11501454e-04 0.00000000e+00]] - - [[ 0.00000000e+00 2.25599726e-03 0.00000000e+00] - [ 0.00000000e+00 3.25856852e-03 0.00000000e+00] - [ 0.00000000e+00 1.87027335e-03 0.00000000e+00] - [ 0.00000000e+00 2.70142788e-03 0.00000000e+00]] - - [[ 0.00000000e+00 2.25599726e-03 0.00000000e+00] - [ 0.00000000e+00 3.25856852e-03 0.00000000e+00] - [ 0.00000000e+00 1.87027335e-03 0.00000000e+00] - [ 0.00000000e+00 2.70142788e-03 0.00000000e+00]] - - [[ 0.00000000e+00 7.78141017e-04 0.00000000e+00] - [ 0.00000000e+00 8.05177588e-03 0.00000000e+00] - [ 0.00000000e+00 6.45096711e-04 0.00000000e+00] - [ 0.00000000e+00 6.67510647e-03 0.00000000e+00]] - - [[ 0.00000000e+00 7.78141017e-04 0.00000000e+00] - [ 0.00000000e+00 8.05177588e-03 0.00000000e+00] - [ 0.00000000e+00 6.45096711e-04 0.00000000e+00] - [ 0.00000000e+00 6.67510647e-03 0.00000000e+00]] - - [[ 0.00000000e+00 2.34123363e-04 0.00000000e+00] - [ 0.00000000e+00 2.14338698e-03 0.00000000e+00] - [ 0.00000000e+00 1.94093626e-04 0.00000000e+00] - [ 0.00000000e+00 1.77691685e-03 0.00000000e+00]] - - [[ 0.00000000e+00 2.34123363e-04 0.00000000e+00] - [ 0.00000000e+00 2.14338698e-03 0.00000000e+00] - [ 0.00000000e+00 1.94093626e-04 0.00000000e+00] - [ 0.00000000e+00 1.77691685e-03 0.00000000e+00]] - - [[ 0.00000000e+00 7.98087108e-04 0.00000000e+00] - [ 0.00000000e+00 2.17118729e-04 0.00000000e+00] - [ 0.00000000e+00 2.36053279e-04 0.00000000e+00] - [ 0.00000000e+00 6.42180376e-05 0.00000000e+00]] - - [[ 0.00000000e+00 7.98087108e-04 0.00000000e+00] - [ 0.00000000e+00 2.17118729e-04 0.00000000e+00] - [ 0.00000000e+00 2.36053279e-04 0.00000000e+00] - [ 0.00000000e+00 6.42180376e-05 0.00000000e+00]] - - [[ 0.00000000e+00 4.17626001e-04 0.00000000e+00] - [ 0.00000000e+00 5.10491350e-04 0.00000000e+00] - [ 0.00000000e+00 1.23522841e-04 0.00000000e+00] - [ 0.00000000e+00 1.50989981e-04 0.00000000e+00]] - - [[ 0.00000000e+00 4.17626001e-04 0.00000000e+00] - [ 0.00000000e+00 5.10491350e-04 0.00000000e+00] - [ 0.00000000e+00 1.23522841e-04 0.00000000e+00] - [ 0.00000000e+00 1.50989981e-04 0.00000000e+00]] - - [[ 0.00000000e+00 1.52312516e-04 0.00000000e+00] - [ 0.00000000e+00 1.54884686e-03 0.00000000e+00] - [ 0.00000000e+00 4.50500561e-05 0.00000000e+00] - [ 0.00000000e+00 4.58108367e-04 0.00000000e+00]] - - [[ 0.00000000e+00 1.52312516e-04 0.00000000e+00] - [ 0.00000000e+00 1.54884686e-03 0.00000000e+00] - [ 0.00000000e+00 4.50500561e-05 0.00000000e+00] - [ 0.00000000e+00 4.58108367e-04 0.00000000e+00]] - - [[ 0.00000000e+00 4.51056743e-05 0.00000000e+00] - [ 0.00000000e+00 4.58602101e-04 0.00000000e+00] - [ 0.00000000e+00 1.33410780e-05 0.00000000e+00] - [ 0.00000000e+00 1.35642499e-04 0.00000000e+00]] - - [[ 0.00000000e+00 4.51056743e-05 0.00000000e+00] - [ 0.00000000e+00 4.58602101e-04 0.00000000e+00] - [ 0.00000000e+00 1.33410780e-05 0.00000000e+00] - [ 0.00000000e+00 1.35642499e-04 0.00000000e+00]] - - [[ 0.00000000e+00 1.17691233e-04 0.00000000e+00] - [ 0.00000000e+00 2.57333424e-05 0.00000000e+00] - [ 0.00000000e+00 3.44265026e-05 0.00000000e+00] - [ 0.00000000e+00 7.52739998e-06 0.00000000e+00]] - - [[ 0.00000000e+00 1.17691233e-04 0.00000000e+00] - [ 0.00000000e+00 2.57333424e-05 0.00000000e+00] - [ 0.00000000e+00 3.44265026e-05 0.00000000e+00] - [ 0.00000000e+00 7.52739998e-06 0.00000000e+00]] - - [[ 0.00000000e+00 8.88267335e-05 0.00000000e+00] - [ 0.00000000e+00 9.82261843e-05 0.00000000e+00] - [ 0.00000000e+00 2.59831910e-05 0.00000000e+00] - [ 0.00000000e+00 2.87326755e-05 0.00000000e+00]] - - [[ 0.00000000e+00 8.88267335e-05 0.00000000e+00] - [ 0.00000000e+00 9.82261843e-05 0.00000000e+00] - [ 0.00000000e+00 2.59831910e-05 0.00000000e+00] - [ 0.00000000e+00 2.87326755e-05 0.00000000e+00]] - - [[ 0.00000000e+00 3.28992436e-05 0.00000000e+00] - [ 0.00000000e+00 3.04106557e-04 0.00000000e+00] - [ 0.00000000e+00 9.62353672e-06 0.00000000e+00] - [ 0.00000000e+00 8.89558632e-05 0.00000000e+00]] - - [[ 0.00000000e+00 3.28992436e-05 0.00000000e+00] - [ 0.00000000e+00 3.04106557e-04 0.00000000e+00] - [ 0.00000000e+00 9.62353672e-06 0.00000000e+00] - [ 0.00000000e+00 8.89558632e-05 0.00000000e+00]] - - [[ 0.00000000e+00 1.09846679e-05 0.00000000e+00] - [ 0.00000000e+00 9.94842161e-05 0.00000000e+00] - [ 0.00000000e+00 3.21318497e-06 0.00000000e+00] - [ 0.00000000e+00 2.91006692e-05 0.00000000e+00]] - - [[ 0.00000000e+00 1.09846679e-05 0.00000000e+00] - [ 0.00000000e+00 9.94842161e-05 0.00000000e+00] - [ 0.00000000e+00 3.21318497e-06 0.00000000e+00] - [ 0.00000000e+00 2.91006692e-05 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally - ID = 10018 - Name = (tally 1 * tally 4) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - mesh [1] - Nuclides = U-235 Pu-239 Zr-90 - Scores = [u'nu-fission', u'total', u'scatter'] - Estimator = tracklength -[[[ 0.00000000e+00 1.68550643e-03 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 1.68550643e-03 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 1.03892314e-03 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 1.03892314e-03 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 4.78866412e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 4.78866412e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 1.23534068e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 1.23534068e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 4.57246338e-03 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 4.57246338e-03 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 2.25599726e-03 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 2.25599726e-03 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 7.78141017e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 7.78141017e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 2.34123363e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 2.34123363e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 7.98087108e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 7.98087108e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 4.17626001e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 4.17626001e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 1.52312516e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 1.52312516e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 4.51056743e-05 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 4.51056743e-05 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 1.17691233e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 1.17691233e-04 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 8.88267335e-05 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 8.88267335e-05 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 3.28992436e-05 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 3.28992436e-05 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 1.09846679e-05 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 1.09846679e-05 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] diff --git a/tests/test_tally_arithmetic/test_tally_arithmetic.py b/tests/test_tally_arithmetic/test_tally_arithmetic.py index 70439b54f9..5517cbcf75 100644 --- a/tests/test_tally_arithmetic/test_tally_arithmetic.py +++ b/tests/test_tally_arithmetic/test_tally_arithmetic.py @@ -22,8 +22,6 @@ class TallyArithmeticTestHarness(PyAPITestHarness): u235 = openmc.Nuclide('U-235') u238 = openmc.Nuclide('U-238') pu239 = openmc.Nuclide('Pu-239') - zr90 = openmc.Nuclide('Zr-90') - o16 = openmc.Nuclide('O-16') # Initialize Mesh mesh = openmc.Mesh(mesh_id=1) @@ -36,7 +34,6 @@ class TallyArithmeticTestHarness(PyAPITestHarness): energy_filter = openmc.Filter(type='energy', bins=(0.0, 0.253e-6, 1.0e-3, 1.0, 20.0)) material_filter = openmc.Filter(type='material', bins=(1, 3)) - universe_filter = openmc.Filter(type='universe', bins=(1, 3)) distrib_filter = openmc.Filter(type='distribcell', bins=(60)) mesh_filter = openmc.Filter(type='mesh') mesh_filter.mesh = mesh @@ -45,6 +42,7 @@ class TallyArithmeticTestHarness(PyAPITestHarness): tally = openmc.Tally(name='tally 1') tally.add_filter(material_filter) tally.add_filter(energy_filter) + tally.add_filter(distrib_filter) tally.add_score('nu-fission') tally.add_score('total') tally.add_nuclide(u235) @@ -53,33 +51,13 @@ class TallyArithmeticTestHarness(PyAPITestHarness): # Instantiate reaction rate Tally in fuel tally = openmc.Tally(name='tally 2') - tally.add_filter(universe_filter) tally.add_filter(energy_filter) + tally.add_filter(mesh_filter) tally.add_score('total') tally.add_score('fission') tally.add_nuclide(u238) tally.add_nuclide(u235) tallies_file.add_tally(tally) - - # Instantiate reaction rate Tally in moderator - tally = openmc.Tally(name='tally 3') - tally.add_filter(distrib_filter) - tally.add_filter(energy_filter) - tally.add_score('absorption') - tally.add_score('total') - tally.add_nuclide(u235) - tally.add_nuclide(o16) - tallies_file.add_tally(tally) - - # Instantiate reaction rate Tally in moderator - tally = openmc.Tally(name='tally 4') - tally.add_filter(mesh_filter) - tally.add_filter(energy_filter) - tally.add_score('scatter') - tally.add_score('total') - tally.add_nuclide(u235) - tally.add_nuclide(zr90) - tallies_file.add_tally(tally) tallies_file.add_mesh(mesh) # Export tallies to file @@ -98,87 +76,35 @@ class TallyArithmeticTestHarness(PyAPITestHarness): su = openmc.Summary(summary) sp.link_with_summary(su) - print 'reading in tallies' - # Load the tallies tally_1 = sp.get_tally(name='tally 1') tally_2 = sp.get_tally(name='tally 2') - tally_3 = sp.get_tally(name='tally 3') - tally_4 = sp.get_tally(name='tally 4') # Perform all the tally arithmetic operations and output results outstr = '' - tally_5 = tally_1 * tally_2 - outstr += repr(tally_5) - outstr += str(tally_5.mean) + tally_3 = tally_1 * tally_2 + outstr += repr(tally_3) + outstr += str(tally_3.mean) - tally_5 = tally_1.hybrid_product(tally_2, '*', 'entrywise', 'tensor', + tally_3 = tally_1.hybrid_product(tally_2, '*', 'entrywise', 'tensor', 'tensor') - outstr += repr(tally_5) - outstr += str(tally_5.mean) + outstr += repr(tally_3) + outstr += str(tally_3.mean) - tally_5 = tally_1.hybrid_product(tally_2, '*', 'entrywise', 'entrywise', + tally_3 = tally_1.hybrid_product(tally_2, '*', 'entrywise', 'entrywise', 'tensor') - outstr += repr(tally_5) - outstr += str(tally_5.mean) + outstr += repr(tally_3) + outstr += str(tally_3.mean) - tally_5 = tally_1.hybrid_product(tally_2, '*', 'entrywise', 'tensor', + tally_3 = tally_1.hybrid_product(tally_2, '*', 'entrywise', 'tensor', 'entrywise') - outstr += repr(tally_5) - outstr += str(tally_5.mean) + outstr += repr(tally_3) + outstr += str(tally_3.mean) - tally_5 = tally_1.hybrid_product(tally_2, '*', 'entrywise', 'entrywise', + tally_3 = tally_1.hybrid_product(tally_2, '*', 'entrywise', 'entrywise', 'entrywise') - outstr += repr(tally_5) - outstr += str(tally_5.mean) - - tally_5 = tally_1 * tally_3 - outstr += repr(tally_5) - outstr += str(tally_5.mean) - - tally_5 = tally_1.hybrid_product(tally_3, '*', 'entrywise', 'tensor', - 'tensor') - outstr += repr(tally_5) - outstr += str(tally_5.mean) - - tally_5 = tally_1.hybrid_product(tally_3, '*', 'entrywise', 'entrywise', - 'tensor') - outstr += repr(tally_5) - outstr += str(tally_5.mean) - - tally_5 = tally_1.hybrid_product(tally_3, '*', 'entrywise', 'tensor', - 'entrywise') - outstr += repr(tally_5) - outstr += str(tally_5.mean) - - tally_5 = tally_1.hybrid_product(tally_3, '*', 'entrywise', 'entrywise', - 'entrywise') - outstr += repr(tally_5) - outstr += str(tally_5.mean) - - tally_5 = tally_1 * tally_4 - outstr += repr(tally_5) - outstr += str(tally_5.mean) - - tally_5 = tally_1.hybrid_product(tally_4, '*', 'entrywise', 'tensor', - 'tensor') - outstr += repr(tally_5) - outstr += str(tally_5.mean) - - tally_5 = tally_1.hybrid_product(tally_4, '*', 'entrywise', 'entrywise', - 'tensor') - outstr += repr(tally_5) - outstr += str(tally_5.mean) - - tally_5 = tally_1.hybrid_product(tally_4, '*', 'entrywise', 'tensor', - 'entrywise') - outstr += repr(tally_5) - outstr += str(tally_5.mean) - - tally_5 = tally_1.hybrid_product(tally_4, '*', 'entrywise', 'entrywise', - 'entrywise') - outstr += repr(tally_5) - outstr += str(tally_5.mean) + outstr += repr(tally_3) + outstr += str(tally_3.mean) print(outstr) From e4fc8e44edb8871ee589b7979c1a8c716150e76f Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Sat, 19 Dec 2015 10:50:07 -0800 Subject: [PATCH 074/650] updated tally arithmetic test for work for Python 3 --- tests/test_tally_arithmetic/results_true.dat | 68 ++----------------- .../test_tally_arithmetic.py | 5 -- 2 files changed, 4 insertions(+), 69 deletions(-) diff --git a/tests/test_tally_arithmetic/results_true.dat b/tests/test_tally_arithmetic/results_true.dat index 2878cbf4b7..ded2efa665 100644 --- a/tests/test_tally_arithmetic/results_true.dat +++ b/tests/test_tally_arithmetic/results_true.dat @@ -1,15 +1,3 @@ -Tally - ID = 10002 - Name = (tally 1 * tally 2) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - distribcell [60] - mesh [1] - Nuclides = (U-235 * U-238) (U-235 * U-235) (Pu-239 * U-238) (Pu-239 * U-235) - Scores = [(nu-fission * total), (nu-fission * fission), (total * total), (total * fission)] - Estimator = tracklength [[[ 8.90240785e-05 8.31464209e-11 4.41507090e-05 4.12357364e-11] [ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] [ 4.69276830e-05 4.38293656e-11 2.35903380e-05 2.20328275e-11] @@ -39,19 +27,7 @@ Tally [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally - ID = 10003 - Name = (tally 1 * tally 2) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - distribcell [60] - mesh [1] - Nuclides = (U-235 * U-238) (U-235 * U-235) (Pu-239 * U-238) (Pu-239 * U-235) - Scores = [(nu-fission * total), (nu-fission * fission), (total * total), (total * fission)] - Estimator = tracklength -[[[ 8.90240785e-05 8.31464209e-11 4.41507090e-05 4.12357364e-11] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]][[[ 8.90240785e-05 8.31464209e-11 4.41507090e-05 4.12357364e-11] [ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] [ 4.69276830e-05 4.38293656e-11 2.35903380e-05 2.20328275e-11] [ 3.84607356e-05 3.15690405e-05 1.93340411e-05 1.58696166e-05]] @@ -80,19 +56,7 @@ Tally [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally - ID = 10004 - Name = (tally 1 * tally 2) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - distribcell [60] - mesh [1] - Nuclides = U-235 Pu-239 U-238 - Scores = [(nu-fission * total), (nu-fission * fission), (total * total), (total * fission)] - Estimator = tracklength -[[[ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]][[[ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] @@ -115,19 +79,7 @@ Tally [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally - ID = 10005 - Name = (tally 1 * tally 2) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - distribcell [60] - mesh [1] - Nuclides = (U-235 * U-238) (U-235 * U-235) (Pu-239 * U-238) (Pu-239 * U-235) - Scores = [u'nu-fission', u'total', u'fission'] - Estimator = tracklength -[[[ 0.00000000e+00 4.41507090e-05 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]][[[ 0.00000000e+00 4.41507090e-05 0.00000000e+00] [ 0.00000000e+00 3.61847984e-05 0.00000000e+00] [ 0.00000000e+00 2.35903380e-05 0.00000000e+00] [ 0.00000000e+00 1.93340411e-05 0.00000000e+00]] @@ -156,19 +108,7 @@ Tally [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]Tally - ID = 10006 - Name = (tally 1 * tally 2) - Filters = - material [1 3] - energy [ 0.00000000e+00 2.53000000e-07 1.00000000e-03 1.00000000e+00 - 2.00000000e+01] - distribcell [60] - mesh [1] - Nuclides = U-235 Pu-239 U-238 - Scores = [u'nu-fission', u'total', u'fission'] - Estimator = tracklength -[[[ 0.00000000e+00 3.61847984e-05 0.00000000e+00] + [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]]][[[ 0.00000000e+00 3.61847984e-05 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] diff --git a/tests/test_tally_arithmetic/test_tally_arithmetic.py b/tests/test_tally_arithmetic/test_tally_arithmetic.py index 5517cbcf75..e794458c8c 100644 --- a/tests/test_tally_arithmetic/test_tally_arithmetic.py +++ b/tests/test_tally_arithmetic/test_tally_arithmetic.py @@ -83,27 +83,22 @@ class TallyArithmeticTestHarness(PyAPITestHarness): # Perform all the tally arithmetic operations and output results outstr = '' tally_3 = tally_1 * tally_2 - outstr += repr(tally_3) outstr += str(tally_3.mean) tally_3 = tally_1.hybrid_product(tally_2, '*', 'entrywise', 'tensor', 'tensor') - outstr += repr(tally_3) outstr += str(tally_3.mean) tally_3 = tally_1.hybrid_product(tally_2, '*', 'entrywise', 'entrywise', 'tensor') - outstr += repr(tally_3) outstr += str(tally_3.mean) tally_3 = tally_1.hybrid_product(tally_2, '*', 'entrywise', 'tensor', 'entrywise') - outstr += repr(tally_3) outstr += str(tally_3.mean) tally_3 = tally_1.hybrid_product(tally_2, '*', 'entrywise', 'entrywise', 'entrywise') - outstr += repr(tally_3) outstr += str(tally_3.mean) print(outstr) From 6ca9e70a7073921f3c86c1313a442a973abbd12a Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Sat, 19 Dec 2015 12:08:03 -0800 Subject: [PATCH 075/650] fixed comments in tallies.py and tally arithmetic test --- openmc/tallies.py | 2 +- tests/test_tally_arithmetic/test_tally_arithmetic.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index 73bf4c0dff..4d5435b92b 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1461,7 +1461,7 @@ class Tally(object): The type of product (tensor or entrywise) to be performed between filter data. The default is the entrywise product. Currently only the entrywise product is supported since a tally cannot contain - two of the same tallies. + two of the same filter. nuclide_product : str, optional The type of product (tensor or entrywise) to be performed between nuclide data. The default is the entrywise product if all nuclides diff --git a/tests/test_tally_arithmetic/test_tally_arithmetic.py b/tests/test_tally_arithmetic/test_tally_arithmetic.py index e794458c8c..6643fd5a22 100644 --- a/tests/test_tally_arithmetic/test_tally_arithmetic.py +++ b/tests/test_tally_arithmetic/test_tally_arithmetic.py @@ -49,7 +49,6 @@ class TallyArithmeticTestHarness(PyAPITestHarness): tally.add_nuclide(pu239) tallies_file.add_tally(tally) - # Instantiate reaction rate Tally in fuel tally = openmc.Tally(name='tally 2') tally.add_filter(energy_filter) tally.add_filter(mesh_filter) From 9f3590cd39e018b7412cc60ea37d057e414e4982 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sun, 20 Dec 2015 18:40:07 -0500 Subject: [PATCH 076/650] Make cell % material an allocatable array --- src/geometry.F90 | 2 +- src/geometry_header.F90 | 14 ++++++++------ src/initialize.F90 | 6 +++--- src/input_xml.F90 | 13 +++++++------ src/plot.F90 | 6 +++--- src/summary.F90 | 4 ++-- 6 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/geometry.F90 b/src/geometry.F90 index 9a084a77cb..19289f9a45 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -248,7 +248,7 @@ contains ! set material p % last_material = p % material - p % material = c % material + p % material = c % material(1) elseif (c % type == CELL_FILL) then CELL_TYPE ! ====================================================================== diff --git a/src/geometry_header.F90 b/src/geometry_header.F90 index 6ca13740ba..30d4a119b6 100644 --- a/src/geometry_header.F90 +++ b/src/geometry_header.F90 @@ -126,15 +126,17 @@ module geometry_header integer :: fill ! universe # filling this cell integer :: instances ! number of instances of this cell in ! the geom - integer :: material ! Material within cell (0 for - ! universe) - integer, allocatable :: offset (:) ! Distribcell offset for tally + integer, allocatable :: material(:) ! Material within cell. Multiple + ! materials for distribcell + ! instances. 0 signifies a universe + integer, allocatable :: offset(:) ! Distribcell offset for tally ! counter integer, allocatable :: region(:) ! Definition of spatial region as - ! Boolean expression of half-spaces + ! Boolean expression of half-spaces integer, allocatable :: rpn(:) ! Reverse Polish notation for region - ! expression - logical :: simple ! Is the region simple (intersections only) + ! expression + logical :: simple ! Is the region simple (intersections + ! only) ! Rotation matrix and translation vector real(8), allocatable :: translation(:) diff --git a/src/initialize.F90 b/src/initialize.F90 index 9d63eb4e93..802f890aa9 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -614,13 +614,13 @@ contains ! ======================================================================= ! ADJUST MATERIAL/FILL POINTERS FOR EACH CELL - id = c%material + id = c%material(1) if (id == MATERIAL_VOID) then c%type = CELL_NORMAL elseif (id /= 0) then if (material_dict%has_key(id)) then c%type = CELL_NORMAL - c%material = material_dict%get_key(id) + c%material(1) = material_dict%get_key(id) else call fatal_error("Could not find material " // trim(to_str(id)) & &// " specified on cell " // trim(to_str(c%id))) @@ -1137,7 +1137,7 @@ contains ! Allocate offset table for fill cells do i = 1, n_cells - if (cells(i)%material == NONE) then + if (cells(i) % type /= CELL_NORMAL) then allocate(cells(i)%offset(n_maps)) end if end do diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 5449b169dd..016b811ac4 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -1085,36 +1085,37 @@ contains end if ! Read material + allocate(c % material(1)) word = '' if (check_for_node(node_cell, "material")) & call get_node_value(node_cell, "material", word) select case(to_lower(word)) case ('void') - c % material = MATERIAL_VOID + c % material(1) = MATERIAL_VOID case ('') ! This case is called if no material was specified - c % material = NONE + c % material(1) = NONE case default - c % material = int(str_to_int(word), 4) + c % material(1) = int(str_to_int(word), 4) ! Check for error - if (c % material == ERROR_INT) then + if (c % material(1) == ERROR_INT) then call fatal_error("Invalid material specified on cell " & &// to_str(c % id)) end if end select ! Check to make sure that either material or fill was specified - if (c % material == NONE .and. c % fill == NONE) then + if (c % material(1) == NONE .and. c % fill == NONE) then call fatal_error("Neither material nor fill was specified for cell " & &// trim(to_str(c % id))) end if ! Check to make sure that both material and fill haven't been ! specified simultaneously - if (c % material /= NONE .and. c % fill /= NONE) then + if (c % material(1) /= NONE .and. c % fill /= NONE) then call fatal_error("Cannot specify material and fill simultaneously") end if diff --git a/src/plot.F90 b/src/plot.F90 index a5497bc203..99d7e3ae94 100644 --- a/src/plot.F90 +++ b/src/plot.F90 @@ -82,7 +82,7 @@ contains if (pl % color_by == PLOT_COLOR_MATS) then ! Assign color based on material c => cells(p % coord(j) % cell) - if (c % material == MATERIAL_VOID) then + if (c % material(1) == MATERIAL_VOID) then ! By default, color void cells white rgb = 255 id = -1 @@ -91,8 +91,8 @@ contains rgb = pl % not_found % rgb id = -1 else - rgb = pl % colors(c % material) % rgb - id = materials(c % material) % id + rgb = pl % colors(c % material(1)) % rgb + id = materials(c % material(1)) % id end if else if (pl % color_by == PLOT_COLOR_CELLS) then ! Assign color based on cell diff --git a/src/summary.F90 b/src/summary.F90 index f2c261ec75..e9c809cf0c 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -150,10 +150,10 @@ contains select case (c%type) case (CELL_NORMAL) call write_dataset(cell_group, "fill_type", "normal") - if (c%material == MATERIAL_VOID) then + if (c%material(1) == MATERIAL_VOID) then call write_dataset(cell_group, "material", -1) else - call write_dataset(cell_group, "material", materials(c%material)%id) + call write_dataset(cell_group, "material", materials(c%material(1))%id) end if case (CELL_FILL) From ffd0070654bd3bad879ecbbeada9e7ddd54acdde Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Mon, 21 Dec 2015 14:25:42 -0500 Subject: [PATCH 077/650] Now using id property setters in Python Summary API --- openmc/material.py | 4 ---- openmc/summary.py | 10 +++++----- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/openmc/material.py b/openmc/material.py index 37ebc8a77f..3818d7154b 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -194,10 +194,6 @@ class Material(object): def id(self, material_id): global AUTO_MATERIAL_ID, MATERIAL_IDS - # If the Material already has an ID, remove it from global list - if hasattr(self, '_id') and self._id is not None: - MATERIAL_IDS.remove(self._id) - if material_id is None: self._id = AUTO_MATERIAL_ID MATERIAL_IDS.append(AUTO_MATERIAL_ID) diff --git a/openmc/summary.py b/openmc/summary.py index 4b1088e827..bc6551e7cb 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -567,7 +567,7 @@ class Summary(object): """ for index, material in self.materials.items(): - if material._id == material_id: + if material.id == material_id: return material return None @@ -588,7 +588,7 @@ class Summary(object): """ for index, surface in self.surfaces.items(): - if surface._id == surface_id: + if surface.id == surface_id: return surface return None @@ -609,7 +609,7 @@ class Summary(object): """ for index, cell in self.cells.items(): - if cell._id == cell_id: + if cell.id == cell_id: return cell return None @@ -630,7 +630,7 @@ class Summary(object): """ for index, universe in self.universes.items(): - if universe._id == universe_id: + if universe.id == universe_id: return universe return None @@ -651,7 +651,7 @@ class Summary(object): """ for index, lattice in self.lattices.items(): - if lattice._id == lattice_id: + if lattice.id == lattice_id: return lattice return None From 37d4d2e9ed9dfea848c4670f50cabe5596d4b189 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Mon, 21 Dec 2015 20:52:12 -0500 Subject: [PATCH 078/650] Eliminated references to MATERIAL_IDS --- openmc/material.py | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/openmc/material.py b/openmc/material.py index 3818d7154b..542078c7c1 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -12,17 +12,13 @@ from openmc.checkvalue import check_type, check_value, check_greater_than from openmc.clean_xml import * -# A list of all IDs for all Materials created -MATERIAL_IDS = [] - # A static variable for auto-generated Material IDs AUTO_MATERIAL_ID = 10000 def reset_auto_material_id(): - global AUTO_MATERIAL_ID, MATERIAL_IDS + global AUTO_MATERIAL_ID AUTO_MATERIAL_ID = 10000 - MATERIAL_IDS = [] # Units for density supported by OpenMC @@ -192,22 +188,15 @@ class Material(object): @id.setter def id(self, material_id): - global AUTO_MATERIAL_ID, MATERIAL_IDS if material_id is None: + global AUTO_MATERIAL_ID self._id = AUTO_MATERIAL_ID - MATERIAL_IDS.append(AUTO_MATERIAL_ID) AUTO_MATERIAL_ID += 1 else: check_type('material ID', material_id, Integral) - if material_id in MATERIAL_IDS: - msg = 'Unable to set Material ID to "{0}" since a Material with ' \ - 'this ID was already initialized'.format(material_id) - raise ValueError(msg) check_greater_than('material ID', material_id, 0, equality=True) - self._id = material_id - MATERIAL_IDS.append(material_id) @name.setter def name(self, name): From d713cc05755650428f95c1ab0a5cfbeef1a84452 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Tue, 22 Dec 2015 13:02:45 -0800 Subject: [PATCH 079/650] addressed comments from PR review mainly dealing with PEP8 compliance and typos --- openmc/tallies.py | 83 ++++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 41 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index 4d5435b92b..cd7bc338ec 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -31,6 +31,7 @@ AUTO_TALLY_ID = 10000 # specified axis. _PRODUCT_TYPES = ['tensor', 'entrywise'] + def reset_auto_tally_id(): global AUTO_TALLY_ID AUTO_TALLY_ID = 10000 @@ -1116,7 +1117,7 @@ class Tally(object): '\'rel_err\', \'sum\', or \'sum_sq\''.format(self.id, value) raise LookupError(msg) - return data.copy() + return data def get_pandas_dataframe(self, filters=True, nuclides=True, scores=True, summary=None): @@ -1440,16 +1441,16 @@ class Tally(object): nuclide_product=None, score_product=None): """Combines filters, scores and nuclides with another tally. - This is a helper method for the tally arithmetic methods. It is called a - "hybrid product" because it performs a combination of tensor - (or Kronecker) and entrywise (or Hadamard) products. The filters from - both tallies are combined using an entrywise (or Hadamard) product on - matching filters. By default, if all nuclides are identical in the two - tallies, the entrywise product is performed across nuclides; else the - tensor product is performed. By default, if all scores are identical in - the two tallies, the entrywise product is performed across scores; else - the tensor product is performed. Users can also call the method - explicitly and specify the desired product. + This is a helper method for the tally arithmetic operator overloaded + methods. It is called a "hybrid product" because it performs a + combination of tensor (or Kronecker) and entrywise (or Hadamard) + products. The filters from both tallies are combined using an entrywise + (or Hadamard) product on matching filters. By default, if all nuclides + are identical in the two tallies, the entrywise product is performed + across nuclides; else the tensor product is performed. By default, if + all scores are identical in the two tallies, the entrywise product is + performed across scores; else the tensor product is performed. Users + can also call the method explicitly and specify the desired product. Parameters ---------- @@ -1457,17 +1458,17 @@ class Tally(object): The tally on the right hand side of the hybrid product binary_op : {'+', '-', '*', '/', '^'} The binary operation in the hybrid product - filter_product : str, optional + filter_product : {'tensor', 'entrywise' or None} The type of product (tensor or entrywise) to be performed between filter data. The default is the entrywise product. Currently only the entrywise product is supported since a tally cannot contain two of the same filter. - nuclide_product : str, optional + nuclide_product : {'tensor', 'entrywise' or None} The type of product (tensor or entrywise) to be performed between nuclide data. The default is the entrywise product if all nuclides between the two tallies are the same; otherwise the default is the tensor product. - score_product : str, optional + score_product : {'tensor', 'entrywise' or None} The type of product (tensor or entrywise) to be performed between score data. The default is the entrywise product if all scores between the two tallies are the same; otherwise the default is @@ -1491,7 +1492,7 @@ class Tally(object): filter_product = 'entrywise' elif filter_product == 'tensor': msg = 'Unable to perform Tally arithmetic with a tensor product' \ - 'for the filter data as this not currently supported.' + 'for the filter data as this is not currently supported.' raise ValueError(msg) # Set default value for nuclide product if it was not set @@ -1642,13 +1643,13 @@ class Tally(object): ---------- other : Tally The tally to outer product with this tally - filter_product : str - The type of product (tensor or entrywise) to be performed between - filter data. - nuclide_product : str + filter_product : {'entrywise'} + The type of product to be performed between filter data. Currently, + only the entrywise product is supported for the filter product. + nuclide_product : {'tensor', 'entrywise'} The type of product (tensor or entrywise) to be performed between nuclide data. - score_product : str + score_product : {'tensor', 'entrywise'} The type of product (tensor or entrywise) to be performed between score data. @@ -1786,8 +1787,8 @@ class Tally(object): """Reverse the ordering of two filters in this tally This is a helper method for tally arithmetic which helps align the data - in two tallies with shared filters. This method copies this tally and - reverses the order of the two filters. + in two tallies with shared filters. This method reverses the order of + the two filters in place. Parameters ---------- @@ -1924,23 +1925,23 @@ class Tally(object): # Adjust the mean data array to relect the new nuclide order if self.mean is not None: - nuclide1_mean = self._mean[:,nuclide1_index,:].copy() - nuclide2_mean = self._mean[:,nuclide2_index,:].copy() - self._mean[:,nuclide2_index,:] = nuclide1_mean - self._mean[:,nuclide1_index,:] = nuclide2_mean + nuclide1_mean = self._mean[:, nuclide1_index, :].copy() + nuclide2_mean = self._mean[:, nuclide2_index, :].copy() + self._mean[:, nuclide2_index, :] = nuclide1_mean + self._mean[:, nuclide1_index, :] = nuclide2_mean # Adjust the std_dev data array to relect the new nuclide order if self.std_dev is not None: - nuclide1_std_dev = self._std_dev[:,nuclide1_index,:].copy() - nuclide2_std_dev = self._std_dev[:,nuclide2_index,:].copy() - self._std_dev[:,nuclide2_index,:] = nuclide1_std_dev - self._std_dev[:,nuclide1_index,:] = nuclide2_std_dev + nuclide1_std_dev = self._std_dev[:, nuclide1_index, :].copy() + nuclide2_std_dev = self._std_dev[:, nuclide2_index, :].copy() + self._std_dev[:, nuclide2_index, :] = nuclide1_std_dev + self._std_dev[:, nuclide1_index, :] = nuclide2_std_dev def _swap_scores(self, score1, score2): """Reverse the ordering of two scores in this tally This is a helper method for tally arithmetic which helps align the data - in two tallies with shared scores. This method copies reverses the order + in two tallies with shared scores. This method reverses the order of the two scores in place. Parameters @@ -1967,11 +1968,11 @@ class Tally(object): # Check that the scores are valid if not isinstance(score1, (basestring, CrossScore)): - msg = 'Unable to swap score "{0}" in Tally ID="{1}" since it is ' \ + msg = 'Unable to swap score1 "{0}" in Tally ID="{1}" since it is ' \ 'not a string or CrossScore'.format(score1, self.id) raise ValueError(msg) elif not isinstance(score2, (basestring, CrossScore)): - msg = 'Unable to swap score "{0}" in Tally ID="{1}" since it is ' \ + msg = 'Unable to swap score2 "{0}" in Tally ID="{1}" since it is ' \ 'not a string or CrossScore'.format(score2, self.id) raise ValueError(msg) @@ -1996,17 +1997,17 @@ class Tally(object): # Adjust the mean data array to relect the new nuclide order if self.mean is not None: - score1_mean = self._mean[:,:,score1_index].copy() - score2_mean = self._mean[:,:,score2_index].copy() - self._mean[:,:,score2_index] = score1_mean - self._mean[:,:,score1_index] = score2_mean + score1_mean = self._mean[:, :, score1_index].copy() + score2_mean = self._mean[:, :, score2_index].copy() + self._mean[:, :, score2_index] = score1_mean + self._mean[:, :, score1_index] = score2_mean # Adjust the std_dev data array to relect the new nuclide order if self.std_dev is not None: - score1_std_dev = self._std_dev[:,:,score1_index].copy() - score2_std_dev = self._std_dev[:,:,score2_index].copy() - self._std_dev[:,:,score2_index] = score1_std_dev - self._std_dev[:,:,score1_index] = score2_std_dev + score1_std_dev = self._std_dev[:, :, score1_index].copy() + score2_std_dev = self._std_dev[:, :, score2_index].copy() + self._std_dev[:, :, score2_index] = score1_std_dev + self._std_dev[:, :, score1_index] = score2_std_dev def __add__(self, other): """Adds this tally to another tally or scalar value. From 714f4ff2cc0706e706cbe4e29f293bcfb195a60b Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Tue, 22 Dec 2015 14:10:13 -0800 Subject: [PATCH 080/650] removed num_score_bins from tallies.py and removed duplicate scores from tests --- openmc/statepoint.py | 7 +-- openmc/summary.py | 2 - openmc/tallies.py | 68 +++++++++---------------- tests/test_many_scores/results_true.dat | 12 ----- tests/test_many_scores/tallies.xml | 6 +-- tests/test_score_MT/inputs_true.dat | 2 +- tests/test_score_MT/results_true.dat | 24 --------- tests/test_score_MT/test_score_MT.py | 1 - 8 files changed, 29 insertions(+), 93 deletions(-) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 1ff0584a72..4c17379630 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -391,11 +391,6 @@ class StatePoint(object): nuclide = openmc.Nuclide(name.decode().strip()) tally.add_nuclide(nuclide) - # Read score bins - n_score_bins = self._f['{0}{1}/n_score_bins'.format(base, tally_key)].value - - tally.num_score_bins = n_score_bins - scores = self._f['{0}{1}/score_bins'.format( base, tally_key)].value n_user_scores = self._f['{0}{1}/n_user_score_bins' @@ -404,7 +399,7 @@ class StatePoint(object): # Compute and set the filter strides for i in range(n_filters): filter = tally.filters[i] - filter.stride = n_score_bins * len(nuclide_names) + filter.stride = n_user_scores * len(nuclide_names) for j in range(i+1, n_filters): filter.stride *= tally.filters[j].num_bins diff --git a/openmc/summary.py b/openmc/summary.py index 4b1088e827..c14f9073d8 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -524,8 +524,6 @@ class Summary(object): scores = self._f['{0}/score_bins'.format(subbase)].value for score in scores: tally.add_score(score.decode()) - num_score_bins = self._f['{0}/n_score_bins'.format(subbase)][...] - tally.num_score_bins = num_score_bins # Read filter metadata num_filters = self._f['{0}/n_filters'.format(subbase)].value diff --git a/openmc/tallies.py b/openmc/tallies.py index cd7bc338ec..dfc03d50a4 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -65,10 +65,6 @@ class Tally(object): Type of estimator for the tally triggers : list of openmc.trigger.Trigger List of tally triggers - num_score_bins : Integral - Total number of scores, accounting for the fact that a single - user-specified score, e.g. scatter-P3 or flux-Y2,2, might have multiple - bins num_scores : Integral Total number of user-specified scores num_filter_bins : Integral @@ -101,7 +97,6 @@ class Tally(object): self._estimator = None self._triggers = [] - self._num_score_bins = 0 self._num_realizations = 0 self._with_summary = False @@ -124,7 +119,6 @@ class Tally(object): clone.id = self.id clone.name = self.name clone.estimator = self.estimator - clone.num_score_bins = self.num_score_bins clone.num_realizations = self.num_realizations clone._sum = copy.deepcopy(self._sum, memo) clone._sum_sq = copy.deepcopy(self._sum_sq, memo) @@ -253,10 +247,6 @@ class Tally(object): def num_scores(self): return len(self._scores) - @property - def num_score_bins(self): - return self._num_score_bins - @property def num_filter_bins(self): num_bins = 1 @@ -270,7 +260,7 @@ class Tally(object): def num_bins(self): num_bins = self.num_filter_bins num_bins *= self.num_nuclides - num_bins *= self.num_score_bins + num_bins *= self.num_scores return num_bins @property @@ -313,7 +303,7 @@ class Tally(object): # Reshape the results arrays new_shape = (nonzero(self.num_filter_bins), nonzero(self.num_nuclides), - nonzero(self.num_score_bins)) + nonzero(self.num_scores)) sum = np.reshape(sum, new_shape) sum_sq = np.reshape(sum_sq, new_shape) @@ -459,9 +449,13 @@ class Tally(object): 'not a string'.format(score, self.id) raise ValueError(msg) - # If the score is already in the Tally, don't add it again + # If the score is already in the Tally, raise an error if score in self.scores: - return + msg = 'Unable to add a duplicate score {0} to Tally ID="{1}" ' \ + 'since duplicate scores are not supported in the OpenMC ' \ + 'Python API'.format(score, self.id) + raise ValueError(msg) + # Normal score strings if isinstance(score, basestring): self._scores.append(score.strip()) @@ -469,10 +463,6 @@ class Tally(object): else: self._scores.append(score) - @num_score_bins.setter - def num_score_bins(self, num_score_bins): - self._num_score_bins = num_score_bins - @num_realizations.setter def num_realizations(self, num_realizations): cv.check_type('number of realizations', num_realizations, Integral) @@ -1287,7 +1277,7 @@ class Tally(object): for filter in self.filters: new_shape += (filter.num_bins, ) new_shape += (self.num_nuclides,) - new_shape += (self.num_score_bins,) + new_shape += (self.num_scores,) # Reshape the data with one dimension for each filter data = np.reshape(data, new_shape) @@ -1608,18 +1598,16 @@ class Tally(object): # Add scores to the new tally if score_product == 'entrywise': - new_tally.num_score_bins = self_copy.num_score_bins for self_score in self_copy.scores: new_tally.add_score(self_score) else: - new_tally.num_score_bins = self_copy.num_score_bins * other_copy.num_score_bins all_scores = [self_copy.scores, other_copy.scores] for self_score, other_score in itertools.product(*all_scores): new_score = CrossScore(self_score, other_score, binary_op) new_tally.add_score(new_score) # Correct each Filter's stride - stride = new_tally.num_nuclides * new_tally.num_score_bins + stride = new_tally.num_nuclides * new_tally.num_scores for filter in reversed(new_tally.filters): filter.stride = stride stride *= filter.num_bins @@ -1727,10 +1715,10 @@ class Tally(object): # Repeat and tile the data by score in preparation for performing # the tensor product across scores. if score_product == 'tensor': - self._mean = np.repeat(self.mean, other.num_score_bins, axis=2) - self._std_dev = np.repeat(self.std_dev, other.num_score_bins, axis=2) - other._mean = np.tile(other.mean, (1, 1, self.num_score_bins)) - other._std_dev = np.tile(other.std_dev, (1, 1, self.num_score_bins)) + self._mean = np.repeat(self.mean, other.num_scores, axis=2) + self._std_dev = np.repeat(self.std_dev, other.num_scores, axis=2) + other._mean = np.tile(other.mean, (1, 1, self.num_scores)) + other._std_dev = np.tile(other.std_dev, (1, 1, self.num_scores)) # Add scores to each tally such that each tally contains the complete set # of scores necessary to perform an entrywise product. New scores added @@ -1743,16 +1731,15 @@ class Tally(object): # Add scores present in self but not in other to other for score in other_missing_scores: - other._mean = np.insert(other.mean, other.num_score_bins, 0, axis=2) - other._std_dev = np.insert(other.std_dev, other.num_score_bins, 0, axis=2) + other._mean = np.insert(other.mean, other.num_scores, 0, axis=2) + other._std_dev = np.insert(other.std_dev, other.num_scores, 0, axis=2) other.add_score(score) # Add scores present in other but not in self to self for score in self_missing_scores: - self._mean = np.insert(self.mean, self.num_score_bins, 0, axis=2) - self._std_dev = np.insert(self.std_dev, self.num_score_bins, 0, axis=2) + self._mean = np.insert(self.mean, self.num_scores, 0, axis=2) + self._std_dev = np.insert(self.std_dev, self.num_scores, 0, axis=2) self.add_score(score) - self.num_score_bins += 1 # Align other scores with self scores for i, score in enumerate(self.scores): @@ -1763,13 +1750,13 @@ class Tally(object): other._swap_scores(score, other.scores[i]) # Correct the stride for other filters - stride = other.num_nuclides * other.num_score_bins + stride = other.num_nuclides * other.num_scores for filter in reversed(other.filters): filter.stride = stride stride *= filter.num_bins # Correct the stride for self filters - stride = self.num_nuclides * self.num_score_bins + stride = self.num_nuclides * self.num_scores for filter in reversed(self.filters): filter.stride = stride stride *= filter.num_bins @@ -1835,7 +1822,7 @@ class Tally(object): self.filters[filter2_index] = filter1 # Update the strides for each of the filters - stride = self.num_nuclides * self.num_score_bins + stride = self.num_nuclides * self.num_scores for filter in reversed(self.filters): filter.stride = stride stride *= filter.num_bins @@ -2064,7 +2051,6 @@ class Tally(object): new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - new_tally.num_score_bins = self.num_score_bins for filter in self.filters: new_tally.add_filter(filter) @@ -2133,7 +2119,6 @@ class Tally(object): new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - new_tally.num_score_bins = self.num_score_bins for filter in self.filters: new_tally.add_filter(filter) @@ -2203,7 +2188,6 @@ class Tally(object): new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - new_tally.num_score_bins = self.num_score_bins for filter in self.filters: new_tally.add_filter(filter) @@ -2273,7 +2257,6 @@ class Tally(object): new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - new_tally.num_score_bins = self.num_score_bins for filter in self.filters: new_tally.add_filter(filter) @@ -2347,7 +2330,6 @@ class Tally(object): new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - new_tally.num_score_bins = self.num_score_bins for filter in self.filters: new_tally.add_filter(filter) @@ -2549,7 +2531,6 @@ class Tally(object): # Loop over indices in reverse to remove excluded scores for score_index in reversed(score_indices): new_tally.remove_score(self.scores[score_index]) - new_tally.num_score_bins -= 1 # NUCLIDES if nuclides: @@ -2589,7 +2570,7 @@ class Tally(object): filter.num_bins = len(filter_bins[i]) # Correct each Filter's stride - stride = new_tally.num_nuclides * new_tally.num_score_bins + stride = new_tally.num_nuclides * new_tally.num_scores for filter in reversed(new_tally.filters): filter.stride = stride stride *= filter.num_bins @@ -2735,8 +2716,7 @@ class Tally(object): # Determine the shape of data in the new diagonalized Tally num_filter_bins = new_tally.num_filter_bins num_nuclides = new_tally.num_nuclides - num_score_bins = new_tally.num_score_bins - new_shape = (num_filter_bins, num_nuclides, num_score_bins) + new_shape = (num_filter_bins, num_nuclides, num_scores) # Determine "base" indices along the new "diagonal", and the factor # by which the "base" indices should be repeated to account for all @@ -2766,7 +2746,7 @@ class Tally(object): new_tally._std_dev[diag_indices, :, :] = self.std_dev # Correct each Filter's stride - stride = new_tally.num_nuclides * new_tally.num_score_bins + stride = new_tally.num_nuclides * new_tally.num_scores for filter in reversed(new_tally.filters): filter.stride = stride stride *= filter.num_bins diff --git a/tests/test_many_scores/results_true.dat b/tests/test_many_scores/results_true.dat index 0d5dd6e32e..ae5430e30a 100644 --- a/tests/test_many_scores/results_true.dat +++ b/tests/test_many_scores/results_true.dat @@ -11,18 +11,6 @@ tally 1: 2.483728E+01 5.102293E-01 8.710841E-02 -8.628000E+00 -2.481430E+01 -9.329009E-01 -2.902534E-01 -5.102293E-01 -8.710841E-02 -5.087118E-01 -8.657086E-02 -8.632000E+00 -2.483728E+01 -9.328366E-01 -2.902108E-01 5.087118E-01 8.657086E-02 9.212024E+00 diff --git a/tests/test_many_scores/tallies.xml b/tests/test_many_scores/tallies.xml index 2df5597d04..b8a154f1ac 100644 --- a/tests/test_many_scores/tallies.xml +++ b/tests/test_many_scores/tallies.xml @@ -4,9 +4,9 @@ - flux total scatter nu-scatter scatter-2 scatter-p2 nu-scatter-2 - nu-scatter-p2 transport n1n absorption nu-fission kappa-fission - flux-y2 total-y2 scatter-y2 nu-scatter-y2 events delayed-nu-fission + flux total scatter nu-scatter scatter-2 nu-scatter-2 transport n1n + absorption nu-fission kappa-fission flux-y2 total-y2 scatter-y2 + nu-scatter-y2 events delayed-nu-fission diff --git a/tests/test_score_MT/inputs_true.dat b/tests/test_score_MT/inputs_true.dat index 3789a69cba..b361c28cf2 100644 --- a/tests/test_score_MT/inputs_true.dat +++ b/tests/test_score_MT/inputs_true.dat @@ -1 +1 @@ -63295b9d510370e65e63a3db627d47d286f5479e53c8eabeda9a5cb25ffe35becb636835aadad11691e34c23292fe11b5f688daee76d76ceac4b5dfd2f9ede4c \ No newline at end of file +7270299e4a4dde19d250825b0124fa36b60df847f046e058ccdfc74d4690beaaaaf387e050f596cb3445caf793d6a390ddb2d19650a3dccd4eb60056ae3b1477 \ No newline at end of file diff --git a/tests/test_score_MT/results_true.dat b/tests/test_score_MT/results_true.dat index 44656963f0..04b9c5ca50 100644 --- a/tests/test_score_MT/results_true.dat +++ b/tests/test_score_MT/results_true.dat @@ -7,10 +7,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -1.538090E-03 -1.381456E-06 1.538090E-03 1.381456E-06 3.974412E-01 @@ -19,16 +15,12 @@ tally 1: 3.796357E-01 5.252455E-06 2.290531E-11 -5.252455E-06 -2.290531E-11 3.359792E-02 2.267331E-04 2.459115E-02 1.233078E-04 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 7.004005E-05 1.748739E-09 8.104946E-02 @@ -42,18 +34,12 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 2.000000E-01 9.000000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 2.000000E-02 2.000000E-04 0.000000E+00 @@ -64,8 +50,6 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 tally 3: 0.000000E+00 0.000000E+00 @@ -73,10 +57,6 @@ tally 3: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -1.408027E-03 -1.849607E-06 1.408027E-03 1.849607E-06 3.946436E-01 @@ -85,16 +65,12 @@ tally 3: 3.382059E-01 2.179241E-05 4.749090E-10 -2.179241E-05 -4.749090E-10 3.146594E-02 2.159308E-04 4.278352E-02 4.094478E-04 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 1.736514E-04 1.245171E-08 7.989710E-02 diff --git a/tests/test_score_MT/test_score_MT.py b/tests/test_score_MT/test_score_MT.py index dae86d418c..fb8aa7cfb4 100644 --- a/tests/test_score_MT/test_score_MT.py +++ b/tests/test_score_MT/test_score_MT.py @@ -12,7 +12,6 @@ class ScoreMTTestHarness(PyAPITestHarness): filt = openmc.Filter(type='cell', bins=(10, 21, 22, 23)) tallies = [openmc.Tally(tally_id=i) for i in range(1, 4)] [t.add_filter(filt) for t in tallies] - [t.add_score('n2n') for t in tallies] [t.add_score('16') for t in tallies] [t.add_score('51') for t in tallies] [t.add_score('102') for t in tallies] From 04783529c802e33b6f76e9cde4ab58b12d540094 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Tue, 22 Dec 2015 14:40:56 -0800 Subject: [PATCH 081/650] removed num_score_bins from mgxs.py --- openmc/mgxs/mgxs.py | 4 ++-- openmc/summary.py | 1 + openmc/tallies.py | 9 +++------ 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 7913747f98..7f521a975c 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -755,7 +755,7 @@ class MGXS(object): # Reshape condensed data arrays with one dimension for all filters new_shape = \ - (tally.num_filter_bins, tally.num_nuclides, tally.num_score_bins,) + (tally.num_filter_bins, tally.num_nuclides, tally.num_scores,) mean = np.reshape(mean, new_shape) std_dev = np.reshape(std_dev, new_shape) @@ -837,7 +837,7 @@ class MGXS(object): # Reshape averaged data arrays with one dimension for all filters new_shape = \ - (tally.num_filter_bins, tally.num_nuclides, tally.num_score_bins,) + (tally.num_filter_bins, tally.num_nuclides, tally.num_scores,) mean = np.reshape(mean, new_shape) std_dev = np.reshape(std_dev, new_shape) diff --git a/openmc/summary.py b/openmc/summary.py index c14f9073d8..b97b77b308 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -1,4 +1,5 @@ import numpy as np +import re import openmc from openmc.region import Region diff --git a/openmc/tallies.py b/openmc/tallies.py index dfc03d50a4..75e69a4c10 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -449,13 +449,9 @@ class Tally(object): 'not a string'.format(score, self.id) raise ValueError(msg) - # If the score is already in the Tally, raise an error + # If the score is already in the Tally, don't add it again if score in self.scores: - msg = 'Unable to add a duplicate score {0} to Tally ID="{1}" ' \ - 'since duplicate scores are not supported in the OpenMC ' \ - 'Python API'.format(score, self.id) - raise ValueError(msg) - + return # Normal score strings if isinstance(score, basestring): self._scores.append(score.strip()) @@ -2716,6 +2712,7 @@ class Tally(object): # Determine the shape of data in the new diagonalized Tally num_filter_bins = new_tally.num_filter_bins num_nuclides = new_tally.num_nuclides + num_scores = new_tally.num_scores new_shape = (num_filter_bins, num_nuclides, num_scores) # Determine "base" indices along the new "diagonal", and the factor From 0174bbe093a47e6756f302dc3a4f6926f7c5658d Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Tue, 22 Dec 2015 15:35:46 -0800 Subject: [PATCH 082/650] changed n_user_scores to n_score_bins in statepoint.py --- openmc/statepoint.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 4c17379630..845937f594 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -393,13 +393,13 @@ class StatePoint(object): scores = self._f['{0}{1}/score_bins'.format( base, tally_key)].value - n_user_scores = self._f['{0}{1}/n_user_score_bins' - .format(base, tally_key)].value + n_score_bins = self._f['{0}{1}/n_score_bins' + .format(base, tally_key)].value # Compute and set the filter strides for i in range(n_filters): filter = tally.filters[i] - filter.stride = n_user_scores * len(nuclide_names) + filter.stride = n_score_bins * len(nuclide_names) for j in range(i+1, n_filters): filter.stride *= tally.filters[j].num_bins From 48a47cacda418beeec9c1b42c32ea0a99a168c5b Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Tue, 22 Dec 2015 16:02:09 -0800 Subject: [PATCH 083/650] added moment orders to summary file --- .../pythonapi/examples/tally-arithmetic.ipynb | 64 ++++++++----------- openmc/summary.py | 13 +++- openmc/tallies.py | 8 ++- src/summary.F90 | 35 +++++++++- 4 files changed, 78 insertions(+), 42 deletions(-) diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index 3ec974e057..18a19c991c 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -363,26 +363,7 @@ "outputs": [ { "data": { - "image/png": [ - "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\n", - "AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\n", - "QYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB98LGQ4UM+6dthcAAALKSURBVGje7dpLcqQwDAbgHHE2\n", - "YeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n", - "+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\n", - "nl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n", - "/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n", - "6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\n", - "vjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\n", - "dwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\n", - "ACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\n", - "vY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n", - "+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\n", - "QBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n", - "9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n", - "8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTEtMjVUMTQ6MjA6\n", - "NTEtMDg6MDDVsKLDAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE1LTExLTI1VDE0OjIwOjUxLTA4OjAw\n", - "pO0afwAAAABJRU5ErkJggg==\n" - ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB98MFg87MxcAKAsAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTItMjJUMTU6NTk6\nNTEtMDg6MDCDpzvTAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE1LTEyLTIyVDE1OjU5OjUxLTA4OjAw\n8vqDbwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -591,9 +572,9 @@ "\n", " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", - " Version: 0.7.0\n", - " Git SHA1: 74ffcb447521c968fb64fdaa63e40598783f2fba\n", - " Date/Time: 2015-11-25 14:20:51\n", + " Version: 0.7.1\n", + " Git SHA1: 6ca9e70a7073921f3c86c1313a442a973abbd12a\n", + " Date/Time: 2015-12-22 15:59:51\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -650,20 +631,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 7.9600E-01 seconds\n", - " Reading cross sections = 2.1200E-01 seconds\n", - " Total time in simulation = 1.8740E+01 seconds\n", - " Time in transport only = 1.8727E+01 seconds\n", - " Time in inactive batches = 2.5970E+00 seconds\n", - " Time in active batches = 1.6143E+01 seconds\n", - " Time synchronizing fission bank = 2.0000E-03 seconds\n", + " Total time for initialization = 6.9900E-01 seconds\n", + " Reading cross sections = 1.9100E-01 seconds\n", + " Total time in simulation = 1.7186E+01 seconds\n", + " Time in transport only = 1.7171E+01 seconds\n", + " Time in inactive batches = 2.4100E+00 seconds\n", + " Time in active batches = 1.4776E+01 seconds\n", + " Time synchronizing fission bank = 1.0000E-03 seconds\n", " Sampling source sites = 1.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 2.0000E-03 seconds\n", - " Total time elapsed = 1.9553E+01 seconds\n", - " Calculation Rate (inactive) = 4813.25 neutrons/second\n", - " Calculation Rate (active) = 2322.99 neutrons/second\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for finalization = 3.0000E-03 seconds\n", + " Total time elapsed = 1.7901E+01 seconds\n", + " Calculation Rate (inactive) = 5186.72 neutrons/second\n", + " Calculation Rate (active) = 2537.90 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1579,6 +1560,15 @@ " filters=['cell'], filter_bins=[(moderator_cell.id,)])\n", "slice_test.get_pandas_dataframe()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { @@ -1597,7 +1587,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.10" + "version": "2.7.11" } }, "nbformat": 4, diff --git a/openmc/summary.py b/openmc/summary.py index b97b77b308..8e8d4bc7ee 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -521,10 +521,19 @@ class Summary(object): # Create Tally object and assign basic properties tally = openmc.Tally(tally_id, tally_name) + # Read scattering moment order strings (e.g., P3, Y-1,2, etc.) + moments = self._f['{0}/moment_orders'.format(subbase)].value + # Read score metadata scores = self._f['{0}/score_bins'.format(subbase)].value - for score in scores: - tally.add_score(score.decode()) + for j, score in enumerate(scores): + score = score.decode() + + # If this is a moment, use generic moment order + pattern = r'-n$|-pn$|-yn$' + score = re.sub(pattern, '-' + moments[j].decode(), score) + + tally.add_score(score) # Read filter metadata num_filters = self._f['{0}/n_filters'.format(subbase)].value diff --git a/openmc/tallies.py b/openmc/tallies.py index 75e69a4c10..c6331f594e 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -449,9 +449,13 @@ class Tally(object): 'not a string'.format(score, self.id) raise ValueError(msg) - # If the score is already in the Tally, don't add it again + # If the score is already in the Tally, raise an error if score in self.scores: - return + msg = 'Unable to add a duplicate score {0} to Tally ID="{1}" ' \ + 'since duplicate scores are not supported in the OpenMC ' \ + 'Python API'.format(score, self.id) + raise ValueError(msg) + # Normal score strings if isinstance(score, basestring): self._scores.append(score.strip()) diff --git a/src/summary.F90 b/src/summary.F90 index f2c261ec75..187abc26c9 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -484,8 +484,10 @@ contains subroutine write_tallies(file_id) integer(HID_T), intent(in) :: file_id - integer :: i, j + integer :: i, j, k integer :: i_list, i_xs + integer :: n_order ! loop index for moment orders + integer :: nm_order ! loop index for Ynm moment orders integer(HID_T) :: tallies_group integer(HID_T) :: mesh_group integer(HID_T) :: tally_group @@ -664,6 +666,37 @@ contains deallocate(str_array) + ! Write explicit moment order strings for each score bin + k = 1 + allocate(str_array(t%n_score_bins)) + MOMENT_LOOP: do j = 1, t%n_user_score_bins + select case(t%score_bins(k)) + case (SCORE_SCATTER_N, SCORE_NU_SCATTER_N) + str_array(k) = 'P' // trim(to_str(t%moment_order(k))) + k = k + 1 + case (SCORE_SCATTER_PN, SCORE_NU_SCATTER_PN) + do n_order = 0, t%moment_order(k) + str_array(k) = 'P' // trim(to_str(n_order)) + k = k + 1 + end do + case (SCORE_SCATTER_YN, SCORE_NU_SCATTER_YN, SCORE_FLUX_YN, & + SCORE_TOTAL_YN) + do n_order = 0, t%moment_order(k) + do nm_order = -n_order, n_order + str_array(k) = 'Y' // trim(to_str(n_order)) // ',' // & + trim(to_str(nm_order)) + k = k + 1 + end do + end do + case default + str_array(k) = '' + k = k + 1 + end select + end do MOMENT_LOOP + + call write_dataset(tally_group, "moment_orders", str_array) + deallocate(str_array) + call close_group(tally_group) end do TALLY_METADATA From c364114ddded7cecaa72560fa0aa43fa25b3cbd7 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Wed, 23 Dec 2015 07:02:53 -0800 Subject: [PATCH 084/650] reverted tally-arithmetic.ipynb to version in release-0.7.1 branch --- .../pythonapi/examples/tally-arithmetic.ipynb | 64 +++++++++++-------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index 18a19c991c..3ec974e057 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -363,7 +363,26 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB98MFg87MxcAKAsAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTItMjJUMTU6NTk6\nNTEtMDg6MDCDpzvTAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE1LTEyLTIyVDE1OjU5OjUxLTA4OjAw\n8vqDbwAAAABJRU5ErkJggg==\n", + "image/png": [ + "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\n", + "AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\n", + "QYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB98LGQ4UM+6dthcAAALKSURBVGje7dpLcqQwDAbgHHE2\n", + "YeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n", + "+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\n", + "nl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n", + "/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n", + "6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\n", + "vjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\n", + "dwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\n", + "ACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\n", + "vY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n", + "+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\n", + "QBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n", + "9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n", + "8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTEtMjVUMTQ6MjA6\n", + "NTEtMDg6MDDVsKLDAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE1LTExLTI1VDE0OjIwOjUxLTA4OjAw\n", + "pO0afwAAAABJRU5ErkJggg==\n" + ], "text/plain": [ "" ] @@ -572,9 +591,9 @@ "\n", " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", - " Version: 0.7.1\n", - " Git SHA1: 6ca9e70a7073921f3c86c1313a442a973abbd12a\n", - " Date/Time: 2015-12-22 15:59:51\n", + " Version: 0.7.0\n", + " Git SHA1: 74ffcb447521c968fb64fdaa63e40598783f2fba\n", + " Date/Time: 2015-11-25 14:20:51\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -631,20 +650,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 6.9900E-01 seconds\n", - " Reading cross sections = 1.9100E-01 seconds\n", - " Total time in simulation = 1.7186E+01 seconds\n", - " Time in transport only = 1.7171E+01 seconds\n", - " Time in inactive batches = 2.4100E+00 seconds\n", - " Time in active batches = 1.4776E+01 seconds\n", - " Time synchronizing fission bank = 1.0000E-03 seconds\n", + " Total time for initialization = 7.9600E-01 seconds\n", + " Reading cross sections = 2.1200E-01 seconds\n", + " Total time in simulation = 1.8740E+01 seconds\n", + " Time in transport only = 1.8727E+01 seconds\n", + " Time in inactive batches = 2.5970E+00 seconds\n", + " Time in active batches = 1.6143E+01 seconds\n", + " Time synchronizing fission bank = 2.0000E-03 seconds\n", " Sampling source sites = 1.0000E-03 seconds\n", - " SEND/RECV source sites = 0.0000E+00 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", - " Total time for finalization = 3.0000E-03 seconds\n", - " Total time elapsed = 1.7901E+01 seconds\n", - " Calculation Rate (inactive) = 5186.72 neutrons/second\n", - " Calculation Rate (active) = 2537.90 neutrons/second\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", + " Total time for finalization = 2.0000E-03 seconds\n", + " Total time elapsed = 1.9553E+01 seconds\n", + " Calculation Rate (inactive) = 4813.25 neutrons/second\n", + " Calculation Rate (active) = 2322.99 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1560,15 +1579,6 @@ " filters=['cell'], filter_bins=[(moderator_cell.id,)])\n", "slice_test.get_pandas_dataframe()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { @@ -1587,7 +1597,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.11" + "version": "2.7.10" } }, "nbformat": 4, From 4ac325d0695ce3614b55864e6486fa561ee99f10 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Wed, 23 Dec 2015 08:10:43 -0800 Subject: [PATCH 085/650] modified tally merge method to only add unique scores --- openmc/tallies.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index c6331f594e..a8569b7272 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -633,9 +633,10 @@ class Tally(object): merged_tally.filters[i] = merged_filter break - # Add scores from second tally to merged tally + # Add unique scores from second tally to merged tally for score in tally.scores: - merged_tally.add_score(score) + if score not in merged_tally.scores: + merged_tally.add_score(score) # Add triggers from second tally to merged tally for trigger in tally.triggers: From cdf5a56e89f93caf8aff237a43349ed3f18e173c Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Thu, 24 Dec 2015 19:34:51 -0500 Subject: [PATCH 086/650] Use same region spec. length for input and summary --- src/constants.F90 | 9 +++++---- src/input_xml.F90 | 2 +- src/summary.F90 | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/constants.F90 b/src/constants.F90 index ba77f35aba..aef2d61776 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -45,10 +45,11 @@ module constants ! Maximum number of words in a single line, length of line, and length of ! single word - integer, parameter :: MAX_WORDS = 500 - integer, parameter :: MAX_LINE_LEN = 250 - integer, parameter :: MAX_WORD_LEN = 150 - integer, parameter :: MAX_FILE_LEN = 255 + integer, parameter :: MAX_WORDS = 500 + integer, parameter :: MAX_LINE_LEN = 250 + integer, parameter :: MAX_WORD_LEN = 150 + integer, parameter :: MAX_FILE_LEN = 255 + integer, parameter :: REGION_SPEC_LEN = 1000 ! Maximum number of external source spatial resamples to encounter before an ! error is thrown. diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 5449b169dd..abd6e29092 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -994,7 +994,7 @@ contains logical :: boundary_exists character(MAX_LINE_LEN) :: filename character(MAX_WORD_LEN) :: word - character(1000) :: region_spec + character(REGION_SPEC_LEN) :: region_spec type(Cell), pointer :: c class(Surface), pointer :: s class(Lattice), pointer :: lat diff --git a/src/summary.F90 b/src/summary.F90 index f2c261ec75..cb005d3be5 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -113,7 +113,7 @@ contains integer(HID_T) :: universes_group, univ_group integer(HID_T) :: lattices_group, lattice_group real(8), allocatable :: coeffs(:) - character(MAX_LINE_LEN) :: region_spec + character(REGION_SPEC_LEN) :: region_spec type(Cell), pointer :: c class(Surface), pointer :: s type(Universe), pointer :: u From 8762642dda47965b2ea29cdda5c5c6c585937d02 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Fri, 25 Dec 2015 12:23:53 -0800 Subject: [PATCH 087/650] changed mean and std_dev direct access to property getters in tallies.py --- openmc/summary.py | 1 - openmc/tallies.py | 36 ++++++++++++++++++------------------ 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/openmc/summary.py b/openmc/summary.py index 45742b0c8a..ff6b59d3c7 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -532,7 +532,6 @@ class Summary(object): # If this is a moment, use generic moment order pattern = r'-n$|-pn$|-yn$' score = re.sub(pattern, '-' + moments[j].decode(), score) - tally.add_score(score) # Read filter metadata diff --git a/openmc/tallies.py b/openmc/tallies.py index a8569b7272..cdf6c1f87e 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1847,7 +1847,7 @@ class Tally(object): data = self.get_values( filters=filters, filter_bins=filter_bins, value='mean') indices = self.get_filter_indices(filters, filter_bins) - self._mean[indices, :, :] = data + self.mean[indices, :, :] = data # Adjust the std_dev data array to relect the new filter order if self.std_dev is not None: @@ -1856,7 +1856,7 @@ class Tally(object): data = self.get_values( filters=filters, filter_bins=filter_bins, value='std_dev') indices = self.get_filter_indices(filters, filter_bins) - self._std_dev[indices, :, :] = data + self.std_dev[indices, :, :] = data def _swap_nuclides(self, nuclide1, nuclide2): """Reverse the ordering of two nuclides in this tally @@ -1913,17 +1913,17 @@ class Tally(object): # Adjust the mean data array to relect the new nuclide order if self.mean is not None: - nuclide1_mean = self._mean[:, nuclide1_index, :].copy() - nuclide2_mean = self._mean[:, nuclide2_index, :].copy() - self._mean[:, nuclide2_index, :] = nuclide1_mean - self._mean[:, nuclide1_index, :] = nuclide2_mean + nuclide1_mean = self.mean[:, nuclide1_index, :].copy() + nuclide2_mean = self.mean[:, nuclide2_index, :].copy() + self.mean[:, nuclide2_index, :] = nuclide1_mean + self.mean[:, nuclide1_index, :] = nuclide2_mean # Adjust the std_dev data array to relect the new nuclide order if self.std_dev is not None: - nuclide1_std_dev = self._std_dev[:, nuclide1_index, :].copy() - nuclide2_std_dev = self._std_dev[:, nuclide2_index, :].copy() - self._std_dev[:, nuclide2_index, :] = nuclide1_std_dev - self._std_dev[:, nuclide1_index, :] = nuclide2_std_dev + nuclide1_std_dev = self.std_dev[:, nuclide1_index, :].copy() + nuclide2_std_dev = self.std_dev[:, nuclide2_index, :].copy() + self.std_dev[:, nuclide2_index, :] = nuclide1_std_dev + self.std_dev[:, nuclide1_index, :] = nuclide2_std_dev def _swap_scores(self, score1, score2): """Reverse the ordering of two scores in this tally @@ -1985,17 +1985,17 @@ class Tally(object): # Adjust the mean data array to relect the new nuclide order if self.mean is not None: - score1_mean = self._mean[:, :, score1_index].copy() - score2_mean = self._mean[:, :, score2_index].copy() - self._mean[:, :, score2_index] = score1_mean - self._mean[:, :, score1_index] = score2_mean + score1_mean = self.mean[:, :, score1_index].copy() + score2_mean = self.mean[:, :, score2_index].copy() + self.mean[:, :, score2_index] = score1_mean + self.mean[:, :, score1_index] = score2_mean # Adjust the std_dev data array to relect the new nuclide order if self.std_dev is not None: - score1_std_dev = self._std_dev[:, :, score1_index].copy() - score2_std_dev = self._std_dev[:, :, score2_index].copy() - self._std_dev[:, :, score2_index] = score1_std_dev - self._std_dev[:, :, score1_index] = score2_std_dev + score1_std_dev = self.std_dev[:, :, score1_index].copy() + score2_std_dev = self.std_dev[:, :, score2_index].copy() + self.std_dev[:, :, score2_index] = score1_std_dev + self.std_dev[:, :, score1_index] = score2_std_dev def __add__(self, other): """Adds this tally to another tally or scalar value. From 4e939d382024660c8213b8d3ae9a5576daaa5339 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Mon, 28 Dec 2015 10:59:27 -0800 Subject: [PATCH 088/650] changed RectLattice universes ordering from [x][y][z] to [z][y][x] --- openmc/universe.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmc/universe.py b/openmc/universe.py index 98367c381b..14a3007afb 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -1119,7 +1119,7 @@ class RectLattice(Lattice): for z in range(self._dimension[2]): for y in range(self._dimension[1]): for x in range(self._dimension[0]): - universe = self._universes[x][y][z] + universe = self._universes[z][y][x] # Append Universe ID to the Lattice XML subelement universe_ids += '{0} '.format(universe._id) @@ -1137,7 +1137,7 @@ class RectLattice(Lattice): else: for y in range(self._dimension[1]): for x in range(self._dimension[0]): - universe = self._universes[x][y] + universe = self._universes[y][x] # Append Universe ID to Lattice XML subelement universe_ids += '{0} '.format(universe._id) From 022d8d3a44c0151dfad75c2baf72aa6f199dd08f Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Mon, 28 Dec 2015 23:14:05 -0500 Subject: [PATCH 089/650] Replace filter % offset w/ cell % distribcell_ind --- openmc/filter.py | 14 ---------- openmc/statepoint.py | 4 --- src/geometry_header.F90 | 9 ++++--- src/initialize.F90 | 58 ++++++++++++++--------------------------- src/output.F90 | 23 ++++++++-------- src/state_point.F90 | 1 - src/summary.F90 | 3 ++- src/tally.F90 | 6 +++-- src/tally_header.F90 | 1 - 9 files changed, 44 insertions(+), 75 deletions(-) diff --git a/openmc/filter.py b/openmc/filter.py index 04935b8edc..dce3d4924c 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -42,8 +42,6 @@ class Filter(object): The number of filter bins mesh : Mesh or None A Mesh object for 'mesh' type filters. - offset : Integral - A value used to index tally bins for 'distribcell' tallies. stride : Integral The number of filter, nuclide and score bins within each of this filter's bins. @@ -57,7 +55,6 @@ class Filter(object): self._num_bins = 0 self._bins = None self._mesh = None - self._offset = -1 self._stride = None if type is not None: @@ -93,7 +90,6 @@ class Filter(object): clone._bins = copy.deepcopy(self.bins, memo) clone._num_bins = self.num_bins clone._mesh = copy.deepcopy(self.mesh, memo) - clone._offset = self.offset clone._stride = self.stride memo[id(self)] = clone @@ -108,7 +104,6 @@ class Filter(object): string = 'Filter\n' string += '{0: <16}{1}{2}\n'.format('\tType', '=\t', self.type) string += '{0: <16}{1}{2}\n'.format('\tBins', '=\t', self.bins) - string += '{0: <16}{1}{2}\n'.format('\tOffset', '=\t', self.offset) return string @property @@ -134,10 +129,6 @@ class Filter(object): def mesh(self): return self._mesh - @property - def offset(self): - return self._offset - @property def stride(self): return self._stride @@ -226,11 +217,6 @@ class Filter(object): self.type = 'mesh' self.bins = self.mesh.id - @offset.setter - def offset(self, offset): - cv.check_type('filter offset', offset, Integral) - self._offset = offset - @stride.setter def stride(self, stride): cv.check_type('filter stride', stride, Integral) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 2edf9badd4..bc020cfbce 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -360,9 +360,6 @@ class StatePoint(object): # Read the Filter type filter_type = self._f['{0}{1}/type'.format(subbase, j)].value.decode() - # Read the Filter offset - offset = self._f['{0}{1}/offset'.format(subbase, j)].value - n_bins = self._f['{0}{1}/n_bins'.format(subbase, j)].value # Read the bin values @@ -370,7 +367,6 @@ class StatePoint(object): # Create Filter object filter = openmc.Filter(filter_type, bins) - filter.offset = offset filter.num_bins = n_bins if filter_type == 'mesh': diff --git a/src/geometry_header.F90 b/src/geometry_header.F90 index 6ca13740ba..684de883c2 100644 --- a/src/geometry_header.F90 +++ b/src/geometry_header.F90 @@ -131,10 +131,13 @@ module geometry_header integer, allocatable :: offset (:) ! Distribcell offset for tally ! counter integer, allocatable :: region(:) ! Definition of spatial region as - ! Boolean expression of half-spaces + ! Boolean expression of half-spaces integer, allocatable :: rpn(:) ! Reverse Polish notation for region - ! expression - logical :: simple ! Is the region simple (intersections only) + ! expression + logical :: simple ! Is the region simple (intersections + ! only) + integer :: distribcell_ind ! Index corresponding to this cell in + ! distribcell arrays ! Rotation matrix and translation vector real(8), allocatable :: translation(:) diff --git a/src/initialize.F90 b/src/initialize.F90 index 9d63eb4e93..acfe92b921 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -1050,12 +1050,12 @@ contains do i = 1, n_tallies t => tallies(i) - do j = 1, t%n_filters - filter => t%filters(j) + do j = 1, t % n_filters + filter => t % filters(j) - if (filter%type == FILTER_DISTRIBCELL) then - if (.not. cell_list%contains(filter%int_bins(1))) then - call cell_list%add(filter%int_bins(1)) + if (filter % type == FILTER_DISTRIBCELL) then + if (.not. cell_list % contains(filter % int_bins(1))) then + call cell_list % add(filter % int_bins(1)) end if end if @@ -1066,8 +1066,8 @@ contains ! to determine the number of offset tables to allocate do i = 1, n_universes univ => universes(i) - do j = 1, univ%n_cells - if (cell_list%contains(univ%cells(j))) then + do j = 1, univ % n_cells + if (cell_list % contains(univ % cells(j))) then n_maps = n_maps + 1 end if end do @@ -1089,56 +1089,38 @@ contains do i = 1, n_universes univ => universes(i) - do j = 1, univ%n_cells + do j = 1, univ % n_cells + if (.not. cell_list % contains(univ % cells(j))) cycle - if (cell_list%contains(univ%cells(j))) then + cells(univ % cells(j)) % distribcell_ind = k - ! Loop over all tallies - do l = 1, n_tallies - t => tallies(l) - - do m = 1, t%n_filters - filter => t%filters(m) - - ! Loop over only distribcell filters - ! If filter points to cell we just found, set offset index - if (filter%type == FILTER_DISTRIBCELL) then - if (filter%int_bins(1) == univ%cells(j)) then - filter%offset = k - end if - end if - - end do - end do - - univ_list(k) = univ%id - k = k + 1 - end if + univ_list(k) = univ % id + k = k + 1 end do end do ! Allocate the offset tables for lattices do i = 1, n_lattices - lat => lattices(i)%obj + lat => lattices(i) % obj select type(lat) type is (RectLattice) - allocate(lat%offset(n_maps, lat%n_cells(1), lat%n_cells(2), & - lat%n_cells(3))) + allocate(lat % offset(n_maps, lat % n_cells(1), lat % n_cells(2), & + lat % n_cells(3))) type is (HexLattice) - allocate(lat%offset(n_maps, 2 * lat%n_rings - 1, & - 2 * lat%n_rings - 1, lat%n_axial)) + allocate(lat % offset(n_maps, 2 * lat % n_rings - 1, & + 2 * lat % n_rings - 1, lat % n_axial)) end select - lat%offset(:, :, :, :) = 0 + lat % offset(:, :, :, :) = 0 end do ! Allocate offset table for fill cells do i = 1, n_cells - if (cells(i)%material == NONE) then - allocate(cells(i)%offset(n_maps)) + if (cells(i) % material == NONE) then + allocate(cells(i) % offset(n_maps)) end if end do diff --git a/src/output.F90 b/src/output.F90 index c31b20b70b..8be6c09dab 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -1378,8 +1378,7 @@ contains label = '' univ => universes(BASE_UNIVERSE) offset = 0 - call find_offset(t % filters(i_filter) % offset, & - t % filters(i_filter) % int_bins(1), & + call find_offset(t % filters(i_filter) % int_bins(1), & univ, bin-1, offset, label) case (FILTER_SURFACE) i = t % filters(i_filter) % int_bins(bin) @@ -1413,15 +1412,15 @@ contains ! with the given offset !=============================================================================== - recursive subroutine find_offset(map, goal, univ, final, offset, path) + recursive subroutine find_offset(goal, univ, final, offset, path) - integer, intent(in) :: map ! Index in maps vector - integer, intent(in) :: goal ! The target cell ID + integer, intent(in) :: goal ! The target cell index type(Universe), intent(in) :: univ ! Universe to begin search integer, intent(in) :: final ! Target offset integer, intent(inout) :: offset ! Current offset character(*), intent(inout) :: path ! Path to offset + integer :: map ! Index in maps vector integer :: i, j ! Index over cells integer :: k, l, m ! Indices in lattice integer :: old_k, old_l, old_m ! Previous indices in lattice @@ -1436,6 +1435,9 @@ contains type(Universe), pointer :: next_univ ! Next universe to loop through class(Lattice), pointer :: lat ! Pointer to current lattice + ! Get the distribcell index for this cell + map = cells(goal) % distribcell_ind + n = univ % n_cells ! Write to the geometry stack @@ -1537,7 +1539,7 @@ contains offset = c % offset(map) + offset next_univ => universes(c % fill) - call find_offset(map, goal, next_univ, final, offset, path) + call find_offset(goal, next_univ, final, offset, path) return ! ==================================================================== @@ -1577,7 +1579,7 @@ contains path = trim(path) // "(" // trim(to_str(k)) // & "," // trim(to_str(l)) // "," // & trim(to_str(m)) // ")" - call find_offset(map, goal, next_univ, final, offset, path) + call find_offset(goal, next_univ, final, offset, path) return else old_m = m @@ -1593,7 +1595,7 @@ contains path = trim(path) // "(" // trim(to_str(old_k)) // & "," // trim(to_str(old_l)) // "," // & trim(to_str(old_m)) // ")" - call find_offset(map, goal, next_univ, final, offset, path) + call find_offset(goal, next_univ, final, offset, path) return end if @@ -1638,8 +1640,7 @@ contains trim(to_str(k - lat % n_rings)) // "," // & trim(to_str(l - lat % n_rings)) // "," // & trim(to_str(m)) // ")" - call find_offset(map, goal, next_univ, final, offset, & - path) + call find_offset(goal, next_univ, final, offset, path) return else old_m = m @@ -1656,7 +1657,7 @@ contains trim(to_str(old_k - lat % n_rings)) // "," // & trim(to_str(old_l - lat % n_rings)) // "," // & trim(to_str(old_m)) // ")" - call find_offset(map, goal, next_univ, final, offset, path) + call find_offset(goal, next_univ, final, offset, path) return end if diff --git a/src/state_point.F90 b/src/state_point.F90 index f9f4b5b757..046c857fd2 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -268,7 +268,6 @@ contains call write_dataset(filter_group, "type", "delayedgroup") end select - call write_dataset(filter_group, "offset", tally%filters(j)%offset) call write_dataset(filter_group, "n_bins", tally%filters(j)%n_bins) if (tally % filters(j) % type == FILTER_ENERGYIN .or. & tally % filters(j) % type == FILTER_ENERGYOUT .or. & diff --git a/src/summary.F90 b/src/summary.F90 index cb005d3be5..11c4cd434b 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -196,6 +196,8 @@ contains end do call write_dataset(cell_group, "region", adjustl(region_spec)) + call write_dataset(cell_group, "distribcell_ind", c % distribcell_ind) + call close_group(cell_group) end do CELL_LOOP @@ -540,7 +542,6 @@ contains filter_group = create_group(tally_group, "filter " // trim(to_str(j))) ! Write number of bins for this filter - call write_dataset(filter_group, "offset", t%filters(j)%offset) call write_dataset(filter_group, "n_bins", t%filters(j)%n_bins) ! Write filter bins diff --git a/src/tally.F90 b/src/tally.F90 index 09e30a2426..2ccd59a58e 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -1712,6 +1712,7 @@ contains integer :: j integer :: n ! number of bins for single filter integer :: offset ! offset for distribcell + integer :: distribcell_ind ! index in distribcell arrays real(8) :: E ! particle energy real(8) :: theta, phi ! Polar and Azimuthal Angles, respectively type(TallyObject), pointer :: t @@ -1756,12 +1757,13 @@ contains case (FILTER_DISTRIBCELL) ! determine next distribcell bin + distribcell_ind = cells(t % filters(i) % int_bins(1)) % distribcell_ind matching_bins(i) = NO_BIN_FOUND offset = 0 do j = 1, p % n_coord if (cells(p % coord(j) % cell) % type == CELL_FILL) then offset = offset + cells(p % coord(j) % cell) % & - offset(t % filters(i) % offset) + offset(distribcell_ind) elseif(cells(p % coord(j) % cell) % type == CELL_LATTICE) then if (lattices(p % coord(j + 1) % lattice) % obj & % are_valid_indices([& @@ -1769,7 +1771,7 @@ contains p % coord(j + 1) % lattice_y, & p % coord(j + 1) % lattice_z])) then offset = offset + lattices(p % coord(j + 1) % lattice) % obj % & - offset(t % filters(i) % offset, & + offset(distribcell_ind, & p % coord(j + 1) % lattice_x, & p % coord(j + 1) % lattice_y, & p % coord(j + 1) % lattice_z) diff --git a/src/tally_header.F90 b/src/tally_header.F90 index 18b9219522..dcbba3d89e 100644 --- a/src/tally_header.F90 +++ b/src/tally_header.F90 @@ -55,7 +55,6 @@ module tally_header type TallyFilter integer :: type = NONE integer :: n_bins = 0 - integer :: offset = 0 ! Only used for distribcell filters integer, allocatable :: int_bins(:) real(8), allocatable :: real_bins(:) ! Only used for energy filters end type TallyFilter From 56e8e7d6818937cdcb57fc208532025e52768a68 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Tue, 29 Dec 2015 16:25:29 -0500 Subject: [PATCH 090/650] Update PyAPI with distribcell changes --- openmc/filter.py | 2 +- openmc/geometry.py | 20 +++++++++++++------- openmc/summary.py | 5 +++++ openmc/universe.py | 37 ++++++++++++++++++++++++++----------- src/input_xml.F90 | 3 ++- src/output.F90 | 14 +++++--------- 6 files changed, 52 insertions(+), 29 deletions(-) diff --git a/openmc/filter.py b/openmc/filter.py index dce3d4924c..ea92f5257c 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -609,7 +609,7 @@ class Filter(object): # If this region is in Cell corresponding to the # distribcell filter bin, store it in dictionary if cell_id == self.bins[0]: - offset = openmc_geometry.get_offset(path, self.offset) + offset = openmc_geometry.get_offset(path) offsets_to_coords[offset] = coords # Each distribcell offset is a DataFrame bin diff --git a/openmc/geometry.py b/openmc/geometry.py index e848e0cddf..16f6a45e5a 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -42,7 +42,7 @@ class Geometry(object): self._root_universe = root_universe - def get_offset(self, path, filter_offset): + def get_offset(self, path): """Returns the corresponding location in the results array for a given path and filter number. This is primarily intended to post-processing result when a distribcell filter is used. @@ -55,8 +55,6 @@ class Geometry(object): lattice passed through. For the case of the lattice, a tuple should be provided to indicate which coordinates in the lattice should be entered. This should be in the form: (lat_id, i_x, i_y, i_z) - filter_offset : int - An integer that specifies which offset map the filter is using Returns ------- @@ -65,14 +63,22 @@ class Geometry(object): """ + # Find the distribcell index of the cell. + cells = self.get_all_cells() + if path[-1] in cells: + distribcell_ind = cells[path[-1]].distribcell_ind + else: + raise RuntimeError('Could not find cell {} specified in a \ + distribcell filter'.format(path[-1])) + # Return memoize'd offset if possible - if (path, filter_offset) in self._offsets: - offset = self._offsets[(path, filter_offset)] + if (path, distribcell_ind) in self._offsets: + offset = self._offsets[(path, distribcell_ind)] # Begin recursive call to compute offset starting with the base Universe else: - offset = self._root_universe.get_offset(path, filter_offset) - self._offsets[(path, filter_offset)] = offset + offset = self._root_universe.get_offset(path, distribcell_ind) + self._offsets[(path, distribcell_ind)] = offset # Return the final offset return offset diff --git a/openmc/summary.py b/openmc/summary.py index bc6551e7cb..9e2145b343 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -271,6 +271,11 @@ class Summary(object): cell.region = Region.from_expression( region, {s.id: s for s in self.surfaces.values()}) + # Get the distribcell index + ind = self._f['geometry/cells'][key]['distribcell_ind'].value + if ind != 0: + cell.distribcell_ind = ind + # Add the Cell to the global dictionary of all Cells self.cells[index] = cell diff --git a/openmc/universe.py b/openmc/universe.py index 98367c381b..b346ffd00d 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -63,6 +63,8 @@ class Cell(object): that is used to translate (shift) the universe. offsets : ndarray Array of offsets used for distributed cell searches + distribcell_ind : int + Index of this cell in distribcell arrays """ @@ -76,6 +78,7 @@ class Cell(object): self._rotation = None self._translation = None self._offsets = None + self._distribcell_ind = None def __eq__(self, other): if not isinstance(other, Cell): @@ -122,6 +125,8 @@ class Cell(object): string += '{0: <16}{1}{2}\n'.format('\tTranslation', '=\t', self._translation) string += '{0: <16}{1}{2}\n'.format('\tOffset', '=\t', self._offsets) + string += '{0: <16}{1}{2}\n'.format('\tDistribcell index', '=\t', + self._distribcell_ind) return string @@ -164,6 +169,10 @@ class Cell(object): def offsets(self): return self._offsets + @property + def distribcell_ind(self): + return self._distribcell_ind + @id.setter def id(self, cell_id): if cell_id is None: @@ -231,6 +240,11 @@ class Cell(object): cv.check_type('cell region', region, Region) self._region = region + @distribcell_ind.setter + def distribcell_ind(self, ind): + cv.check_type('distribcell index', ind, Integral) + self._distribcell_ind = ind + def add_surface(self, surface, halfspace): """Add a half-space to the list of half-spaces whose intersection defines the cell. @@ -271,7 +285,7 @@ class Cell(object): else: self.region = Intersection(self.region, region) - def get_offset(self, path, filter_offset): + def get_offset(self, path, distribcell_ind): # Get the current element and remove it from the list cell_id = path[0] path = path[1:] @@ -282,12 +296,12 @@ class Cell(object): # If the Cell is filled by a Universe elif self._type == 'fill': - offset = self._offsets[filter_offset-1] - offset += self._fill.get_offset(path, filter_offset) + offset = self._offsets[distribcell_ind-1] + offset += self._fill.get_offset(path, distribcell_ind) # If the Cell is filled by a Lattice else: - offset = self._fill.get_offset(path, filter_offset) + offset = self._fill.get_offset(path, distribcell_ind) return offset @@ -591,7 +605,7 @@ class Universe(object): self._cells.clear() - def get_offset(self, path, filter_offset): + def get_offset(self, path, distribcell_ind): # Get the current element and remove it from the list path = path[1:] @@ -599,7 +613,7 @@ class Universe(object): cell_id = path[0] # Make a recursive call to the Cell within this Universe - offset = self._cells[cell_id].get_offset(path, filter_offset) + offset = self._cells[cell_id].get_offset(path, distribcell_ind) # Return the offset computed at all nested Universe levels return offset @@ -1059,21 +1073,22 @@ class RectLattice(Lattice): cv.check_greater_than('lattice pitch', dim, 0.0) self._pitch = pitch - def get_offset(self, path, filter_offset): + def get_offset(self, path, distribcell_ind): # Get the current element and remove it from the list i = path[0] path = path[1:] # For 2D Lattices if len(self._dimension) == 2: - offset = self._offsets[i[1]-1, i[2]-1, 0, filter_offset-1] - offset += self._universes[i[1]][i[2]].get_offset(path, filter_offset) + offset = self._offsets[i[1]-1, i[2]-1, 0, distribcell_ind-1] + offset += self._universes[i[1]][i[2]].get_offset(path, + distribcell_ind) # For 3D Lattices else: - offset = self._offsets[i[1]-1, i[2]-1, i[3]-1, filter_offset-1] + offset = self._offsets[i[1]-1, i[2]-1, i[3]-1, distribcell_ind-1] offset += self._universes[i[1]-1][i[2]-1][i[3]-1].get_offset(path, - filter_offset) + distribcell_ind) return offset diff --git a/src/input_xml.F90 b/src/input_xml.F90 index abd6e29092..a4317ed8e3 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -1049,8 +1049,9 @@ contains do i = 1, n_cells c => cells(i) - ! Initialize the number of cell instances - this is a base case for distribcells + ! Initialize distribcell instances and distribcell index c % instances = 0 + c % distribcell_ind = NONE ! Get pointer to i-th cell node call get_list_item(node_cell_list, i, node_cell) diff --git a/src/output.F90 b/src/output.F90 index 8be6c09dab..5b938e98d3 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -1449,17 +1449,13 @@ contains ! Look through all cells in this universe do i = 1, n - - cell_index = univ % cells(i) - c => cells(cell_index) - - ! If the cell ID matches the goal and the offset matches final, - ! write to the geometry stack - if (cell_dict % get_key(c % id) == goal .AND. offset == final) then - path = trim(path) // "->" // to_str(c%id) + ! If the cell matches the goal and the offset matches final, write to the + ! geometry stack + if (univ % cells(i) == goal .AND. offset == final) then + c => cells(univ % cells(i)) + path = trim(path) // "->" // to_str(c % id) return end if - end do ! Find the fill cell or lattice cell that we need to enter From c4b83ced54a66dd52d229507edf2214beddea1f3 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Wed, 30 Dec 2015 14:43:33 -0500 Subject: [PATCH 091/650] Fixed bugs in OpenCG compatiblity and Summary Python modules for new z-y-z Universe ordering --- openmc/opencg_compatible.py | 6 +++--- openmc/summary.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/openmc/opencg_compatible.py b/openmc/opencg_compatible.py index afa57c78d9..62192355de 100644 --- a/openmc/opencg_compatible.py +++ b/openmc/opencg_compatible.py @@ -905,7 +905,7 @@ def get_opencg_lattice(openmc_lattice): for z in range(dimension[2]): for y in range(dimension[1]): for x in range(dimension[0]): - universe_id = universes[x][dimension[1]-y-1][z].id + universe_id = universes[z][dimension[1]-y-1][x].id universe_array[z][y][x] = unique_universes[universe_id] opencg_lattice = opencg.Lattice(lattice_id, name) @@ -963,7 +963,7 @@ def get_openmc_lattice(opencg_lattice): outer = opencg_lattice.outside # Initialize an empty array for the OpenMC nested Universes in this Lattice - universe_array = np.ndarray(tuple(np.array(dimension)), + universe_array = np.ndarray(tuple(np.array(dimension)[::-1]), dtype=openmc.Universe) # Create OpenMC Universes for each unique nested Universe in this Lattice @@ -977,7 +977,7 @@ def get_openmc_lattice(opencg_lattice): for y in range(dimension[1]): for x in range(dimension[0]): universe_id = universes[z][y][x].id - universe_array[x][y][z] = unique_universes[universe_id] + universe_array[z][y][x] = unique_universes[universe_id] # Reverse y-dimension in array to match ordering in OpenCG universe_array = universe_array[:, ::-1, :] diff --git a/openmc/summary.py b/openmc/summary.py index bc6551e7cb..3d0e37ddad 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -356,8 +356,8 @@ class Summary(object): self.get_universe_by_id(universe_ids[x, y, z]) # Transpose, reverse y-dimension for appropriate ordering - shape = universes.shape - universes = np.transpose(universes, (1, 0, 2)) + shape = universes.shape[::-1] + universes = np.transpose(universes, (2, 1, 0)) universes.shape = shape universes = universes[:, ::-1, :] lattice.universes = universes From a28c9281e796fbc719a62bc73fdaf8187c23d260 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Wed, 30 Dec 2015 13:29:14 -0800 Subject: [PATCH 092/650] added documentation for updated summary file format and incremented the REVISION_SUMMARY constant --- docs/source/usersguide/output/summary.rst | 5 +++++ src/constants.F90 | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/source/usersguide/output/summary.rst b/docs/source/usersguide/output/summary.rst index f87f60c4a0..ce1c1221a8 100644 --- a/docs/source/usersguide/output/summary.rst +++ b/docs/source/usersguide/output/summary.rst @@ -306,6 +306,11 @@ The current revision of the summary file format is 1. than the number of user-specified scores since each score might have multiple scoring bins, e.g., scatter-PN. +**/tallies/tally /moment_orders** (*char[][]*) + + Tallying moment orders for Legendre and spherical harmonic tally expansions + (*e.g.*, 'P2', 'Y1,2', etc.). + **/tallies/tally /score_bins** (*char[][]*) Scoring bins for the tally. diff --git a/src/constants.F90 b/src/constants.F90 index ba77f35aba..2db3ec3c6c 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -14,7 +14,7 @@ module constants integer, parameter :: REVISION_STATEPOINT = 14 integer, parameter :: REVISION_PARTICLE_RESTART = 1 integer, parameter :: REVISION_TRACK = 1 - integer, parameter :: REVISION_SUMMARY = 1 + integer, parameter :: REVISION_SUMMARY = 2 ! ============================================================================ ! ADJUSTABLE PARAMETERS From 33375dfa30f80de5fe69dcfb47425d21642e479a Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Wed, 30 Dec 2015 15:57:44 -0500 Subject: [PATCH 093/650] Small fixes for #538 --- openmc/filter.py | 2 +- openmc/geometry.py | 5 +++-- openmc/universe.py | 22 +++++++++++----------- src/initialize.F90 | 14 +++++++------- 4 files changed, 22 insertions(+), 21 deletions(-) diff --git a/openmc/filter.py b/openmc/filter.py index ea92f5257c..d61fb648f6 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -609,7 +609,7 @@ class Filter(object): # If this region is in Cell corresponding to the # distribcell filter bin, store it in dictionary if cell_id == self.bins[0]: - offset = openmc_geometry.get_offset(path) + offset = openmc_geometry.get_cell_instance(path) offsets_to_coords[offset] = coords # Each distribcell offset is a DataFrame bin diff --git a/openmc/geometry.py b/openmc/geometry.py index 16f6a45e5a..baadfce3c2 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -42,7 +42,7 @@ class Geometry(object): self._root_universe = root_universe - def get_offset(self, path): + def get_cell_instance(self, path): """Returns the corresponding location in the results array for a given path and filter number. This is primarily intended to post-processing result when a distribcell filter is used. @@ -77,7 +77,8 @@ class Geometry(object): # Begin recursive call to compute offset starting with the base Universe else: - offset = self._root_universe.get_offset(path, distribcell_ind) + offset = self._root_universe.get_cell_instance(path, + distribcell_ind) self._offsets[(path, distribcell_ind)] = offset # Return the final offset diff --git a/openmc/universe.py b/openmc/universe.py index b346ffd00d..e7b2151a32 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -285,7 +285,7 @@ class Cell(object): else: self.region = Intersection(self.region, region) - def get_offset(self, path, distribcell_ind): + def get_cell_instance(self, path, distribcell_ind): # Get the current element and remove it from the list cell_id = path[0] path = path[1:] @@ -296,12 +296,12 @@ class Cell(object): # If the Cell is filled by a Universe elif self._type == 'fill': - offset = self._offsets[distribcell_ind-1] - offset += self._fill.get_offset(path, distribcell_ind) + offset = self.offsets[distribcell_ind-1] + offset += self.fill.get_cell_instance(path, distribcell_ind) # If the Cell is filled by a Lattice else: - offset = self._fill.get_offset(path, distribcell_ind) + offset = self.fill.get_cell_instance(path, distribcell_ind) return offset @@ -605,7 +605,7 @@ class Universe(object): self._cells.clear() - def get_offset(self, path, distribcell_ind): + def get_cell_instance(self, path, distribcell_ind): # Get the current element and remove it from the list path = path[1:] @@ -613,7 +613,7 @@ class Universe(object): cell_id = path[0] # Make a recursive call to the Cell within this Universe - offset = self._cells[cell_id].get_offset(path, distribcell_ind) + offset = self.cells[cell_id].get_cell_instance(path, distribcell_ind) # Return the offset computed at all nested Universe levels return offset @@ -1073,7 +1073,7 @@ class RectLattice(Lattice): cv.check_greater_than('lattice pitch', dim, 0.0) self._pitch = pitch - def get_offset(self, path, distribcell_ind): + def get_cell_instance(self, path, distribcell_ind): # Get the current element and remove it from the list i = path[0] path = path[1:] @@ -1081,14 +1081,14 @@ class RectLattice(Lattice): # For 2D Lattices if len(self._dimension) == 2: offset = self._offsets[i[1]-1, i[2]-1, 0, distribcell_ind-1] - offset += self._universes[i[1]][i[2]].get_offset(path, - distribcell_ind) + offset += self._universes[i[1]][i[2]].get_cell_instance(path, + distribcell_ind) # For 3D Lattices else: offset = self._offsets[i[1]-1, i[2]-1, i[3]-1, distribcell_ind-1] - offset += self._universes[i[1]-1][i[2]-1][i[3]-1].get_offset(path, - distribcell_ind) + offset += self._universes[i[1]-1][i[2]-1][i[3]-1].get_cell_instance( + path, distribcell_ind) return offset diff --git a/src/initialize.F90 b/src/initialize.F90 index acfe92b921..1134040e9a 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -1086,16 +1086,16 @@ contains found(:,:) = .false. k = 1 + ! Search through universes for distributed cells and assign each one a + ! unique distribcell array index. do i = 1, n_universes univ => universes(i) - do j = 1, univ % n_cells - if (.not. cell_list % contains(univ % cells(j))) cycle - - cells(univ % cells(j)) % distribcell_ind = k - - univ_list(k) = univ % id - k = k + 1 + if (cell_list % contains(univ % cells(j))) then + cells(univ % cells(j)) % distribcell_ind = k + univ_list(k) = univ % id + k = k + 1 + end if end do end do From 562739c24554576997dad5d4172dd14764460213 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Wed, 30 Dec 2015 17:09:46 -0500 Subject: [PATCH 094/650] HDF5 summary file now report the lattice universes in original input ordering --- openmc/opencg_compatible.py | 7 +++++-- openmc/summary.py | 22 +++++++--------------- src/summary.F90 | 5 +++-- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/openmc/opencg_compatible.py b/openmc/opencg_compatible.py index 62192355de..ad2cd06f83 100644 --- a/openmc/opencg_compatible.py +++ b/openmc/opencg_compatible.py @@ -725,11 +725,11 @@ def get_openmc_cell(opencg_cell): else: openmc_cell.fill = get_openmc_material(fill) - if opencg_cell.rotation: + if opencg_cell.rotation is not None: rotation = np.asarray(opencg_cell.rotation, dtype=np.float64) openmc_cell.rotation = rotation - if opencg_cell.translation: + if opencg_cell.translation is not None: translation = np.asarray(opencg_cell.translation, dtype=np.float64) openmc_cell.translation = translation @@ -908,6 +908,9 @@ def get_opencg_lattice(openmc_lattice): universe_id = universes[z][dimension[1]-y-1][x].id universe_array[z][y][x] = unique_universes[universe_id] + # Reverse y-dimension in array to match ordering in OpenCG + universe_array = universe_array[:, ::-1, :] + opencg_lattice = opencg.Lattice(lattice_id, name) opencg_lattice.dimension = dimension opencg_lattice.width = pitch diff --git a/openmc/summary.py b/openmc/summary.py index 3d0e37ddad..1c4d39b39b 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -329,11 +329,8 @@ class Summary(object): self._f['geometry/lattices'][key]['lower_left'][...] pitch = self._f['geometry/lattices'][key]['pitch'][...] outer = self._f['geometry/lattices'][key]['outer'].value - universe_ids = \ - self._f['geometry/lattices'][key]['universes'][...] - universe_ids = np.swapaxes(universe_ids, 0, 1) - universe_ids = np.swapaxes(universe_ids, 1, 2) + self._f['geometry/lattices'][key]['universes'][...] # Create the Lattice lattice = openmc.RectLattice(lattice_id=lattice_id, name=name) @@ -349,22 +346,17 @@ class Summary(object): universes = \ np.ndarray(tuple(universe_ids.shape), dtype=openmc.Universe) - for x in range(universe_ids.shape[0]): + for z in range(universe_ids.shape[0]): for y in range(universe_ids.shape[1]): - for z in range(universe_ids.shape[2]): - universes[x, y, z] = \ - self.get_universe_by_id(universe_ids[x, y, z]) + for x in range(universe_ids.shape[2]): + universes[z, y, x] = \ + self.get_universe_by_id(universe_ids[z, y, x]) - # Transpose, reverse y-dimension for appropriate ordering - shape = universes.shape[::-1] - universes = np.transpose(universes, (2, 1, 0)) - universes.shape = shape - universes = universes[:, ::-1, :] + # Set the universes for the lattice lattice.universes = universes if offsets is not None: - offsets = np.swapaxes(offsets, 0, 1) - offsets = np.swapaxes(offsets, 1, 2) + offsets = np.swapaxes(offsets, 0, 2) lattice.offsets = offsets # Add the Lattice to the global dictionary of all Lattices diff --git a/src/summary.F90 b/src/summary.F90 index cb005d3be5..f525797e24 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -362,9 +362,10 @@ contains allocate(lattice_universes(lat%n_cells(1), lat%n_cells(2), & &lat%n_cells(3))) do j = 1, lat%n_cells(1) - do k = 1, lat%n_cells(2) + do k = 0, lat%n_cells(2) - 1 do m = 1, lat%n_cells(3) - lattice_universes(j,k,m) = universes(lat%universes(j,k,m))%id + lattice_universes(j, k+1, m) = & + universes(lat%universes(j, lat%n_cells(2) - k, m))%id end do end do end do From 665f824d630a0160341b3fb79c8caf889ba723ab Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 1 Jan 2016 16:08:07 -0500 Subject: [PATCH 095/650] Removed unnecessary double flip of y lattice ordering in OpenCG compatibility module --- openmc/opencg_compatible.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/openmc/opencg_compatible.py b/openmc/opencg_compatible.py index ad2cd06f83..9b86042ddc 100644 --- a/openmc/opencg_compatible.py +++ b/openmc/opencg_compatible.py @@ -905,12 +905,9 @@ def get_opencg_lattice(openmc_lattice): for z in range(dimension[2]): for y in range(dimension[1]): for x in range(dimension[0]): - universe_id = universes[z][dimension[1]-y-1][x].id + universe_id = universes[z][y][x].id universe_array[z][y][x] = unique_universes[universe_id] - # Reverse y-dimension in array to match ordering in OpenCG - universe_array = universe_array[:, ::-1, :] - opencg_lattice = opencg.Lattice(lattice_id, name) opencg_lattice.dimension = dimension opencg_lattice.width = pitch From 8daac97bc3d51d074b29b925b749390c2f1e497c Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 1 Jan 2016 16:43:12 -0500 Subject: [PATCH 096/650] OpenCG compatiblity module now properly deals with 3D lattices --- openmc/opencg_compatible.py | 17 ++++++++++++++--- openmc/summary.py | 7 +++++++ src/summary.F90 | 9 +++++++-- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/openmc/opencg_compatible.py b/openmc/opencg_compatible.py index 9b86042ddc..d778f44d85 100644 --- a/openmc/opencg_compatible.py +++ b/openmc/opencg_compatible.py @@ -881,16 +881,27 @@ def get_opencg_lattice(openmc_lattice): universes = openmc_lattice.universes outer = openmc_lattice.outer + # Convert 2D dimension to 3D for OpenCG + if len(dimension) == 2: + new_dimension = np.ones(3, dtype=np.int) + new_dimension[:2] = dimension + dimension = new_dimension + + # Convert 2D pitch to 3D for OpenCG if len(pitch) == 2: - new_pitch = np.ones(3, dtype=np.float64) * np.inf + new_pitch = np.ones(3, dtype=np.float64) * np.finfo(np.float64).max new_pitch[:2] = pitch pitch = new_pitch + # Convert 2D lower left to 3D for OpenCG if len(lower_left) == 2: - new_lower_left = np.ones(3, dtype=np.float64) + new_lower_left = np.ones(3, dtype=np.float64) * np.finfo(np.float64).min new_lower_left[:2] = lower_left lower_left = new_lower_left + # Convert 2D universes array to 3D for OpenCG + universes = np.atleast_3d(universes) + # Initialize an empty array for the OpenCG nested Universes in this Lattice universe_array = np.ndarray(tuple(np.array(dimension)[::-1]), dtype=opencg.Universe) @@ -905,7 +916,7 @@ def get_opencg_lattice(openmc_lattice): for z in range(dimension[2]): for y in range(dimension[1]): for x in range(dimension[0]): - universe_id = universes[z][y][x].id + universe_id = universes[x][y][z].id universe_array[z][y][x] = unique_universes[universe_id] opencg_lattice = opencg.Lattice(lattice_id, name) diff --git a/openmc/summary.py b/openmc/summary.py index 1c4d39b39b..5405ac0e1e 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -352,6 +352,13 @@ class Summary(object): universes[z, y, x] = \ self.get_universe_by_id(universe_ids[z, y, x]) + # Use 2D NumPy array to store lattice universes for 2D lattices + if len(dimension) == 2: + print('squeezing!') + universes = np.squeeze(universes) + universes = np.atleast_2d(universes) + print(universes.shape) + # Set the universes for the lattice lattice.universes = universes diff --git a/src/summary.F90 b/src/summary.F90 index f525797e24..0f64f80ec2 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -355,8 +355,13 @@ contains call write_dataset(lattice_group, "type", "rectangular") ! Write lattice dimensions, lower left corner, and pitch - call write_dataset(lattice_group, "dimension", lat%n_cells) - call write_dataset(lattice_group, "lower_left", lat%lower_left) + if (lat % is_3d) then + call write_dataset(lattice_group, "dimension", lat % n_cells) + call write_dataset(lattice_group, "lower_left", lat % lower_left) + else + call write_dataset(lattice_group, "dimension", lat % n_cells(1:2)) + call write_dataset(lattice_group, "lower_left", lat % lower_left) + end if ! Write lattice universes. allocate(lattice_universes(lat%n_cells(1), lat%n_cells(2), & From 6efaf427619e5ecad51cff885aca50a45b0a3d8e Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sat, 2 Jan 2016 08:49:57 -0500 Subject: [PATCH 097/650] Fixed OpenCG compatibility from 2D to 3D lattice reshaping --- openmc/opencg_compatible.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openmc/opencg_compatible.py b/openmc/opencg_compatible.py index d778f44d85..61485b5099 100644 --- a/openmc/opencg_compatible.py +++ b/openmc/opencg_compatible.py @@ -900,7 +900,8 @@ def get_opencg_lattice(openmc_lattice): lower_left = new_lower_left # Convert 2D universes array to 3D for OpenCG - universes = np.atleast_3d(universes) + if len(universes.shape) == 2: + universes.shape = (1,) + universes.shape # Initialize an empty array for the OpenCG nested Universes in this Lattice universe_array = np.ndarray(tuple(np.array(dimension)[::-1]), @@ -916,7 +917,7 @@ def get_opencg_lattice(openmc_lattice): for z in range(dimension[2]): for y in range(dimension[1]): for x in range(dimension[0]): - universe_id = universes[x][y][z].id + universe_id = universes[z][y][x].id universe_array[z][y][x] = unique_universes[universe_id] opencg_lattice = opencg.Lattice(lattice_id, name) From 0dddf0db56477346bde7210a2749084474c0812a Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sat, 2 Jan 2016 13:29:26 -0500 Subject: [PATCH 098/650] Now enforce lattice universes storage as a NumPy array --- openmc/universe.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/universe.py b/openmc/universe.py index 14a3007afb..60cbf4fa79 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -807,7 +807,7 @@ class Lattice(object): def universes(self, universes): cv.check_iterable_type('lattice universes', universes, Universe, min_depth=2, max_depth=3) - self._universes = universes + self._universes = np.asarray(universes) def get_unique_universes(self): """Determine all unique universes in the lattice From c48af6f71aad7829a426f8e06eb2757ad626ff88 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sat, 2 Jan 2016 17:36:07 -0500 Subject: [PATCH 099/650] Removed debug print statements from summary.py --- openmc/summary.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/openmc/summary.py b/openmc/summary.py index 5405ac0e1e..71074c8867 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -354,10 +354,8 @@ class Summary(object): # Use 2D NumPy array to store lattice universes for 2D lattices if len(dimension) == 2: - print('squeezing!') universes = np.squeeze(universes) universes = np.atleast_2d(universes) - print(universes.shape) # Set the universes for the lattice lattice.universes = universes From 7fea70650f576674f7663fbbbdee2f543956293b Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sun, 3 Jan 2016 13:44:42 -0500 Subject: [PATCH 100/650] Improve geometry.get_cell_instance docstring --- openmc/geometry.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/openmc/geometry.py b/openmc/geometry.py index baadfce3c2..eb2b9db558 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -43,9 +43,9 @@ class Geometry(object): self._root_universe = root_universe def get_cell_instance(self, path): - """Returns the corresponding location in the results array for a given path and - filter number. This is primarily intended to post-processing result when - a distribcell filter is used. + """Return the instance number for the final cell in a geometry path. + + The instance is an index into tally distribcell filter arrays. Parameters ---------- @@ -58,8 +58,8 @@ class Geometry(object): Returns ------- - offset : int - Location in the results array for the path and filter + instance : int + Index in tally results array for distribcell filters """ From 493c6fd9ccb9d1e23516ba83b24249fb1d4ccba7 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 4 Jan 2016 06:54:35 -0600 Subject: [PATCH 101/650] Fix type of return argument for h5pget_driver_f. --- src/hdf5_interface.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hdf5_interface.F90 b/src/hdf5_interface.F90 index fc7a462e6a..01e50d983a 100644 --- a/src/hdf5_interface.F90 +++ b/src/hdf5_interface.F90 @@ -1898,7 +1898,7 @@ contains logical :: mpio integer :: hdf5_err - integer :: driver + integer(HID_T) :: driver integer(HID_T) :: file_id integer(HID_T) :: fapl_id From 9f34183d49d8fd8a1e2f30caf49029f0ba115cba Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 4 Jan 2016 10:40:14 -0600 Subject: [PATCH 102/650] Revert to having Reaction%multiplicity_E as a pointer. Apparently having multiplicity_E as an allocatable scalar causes gfortran 5.2 to segfault when compiling ace.F90. Not sure why exactly... --- src/ace_header.F90 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ace_header.F90 b/src/ace_header.F90 index 985371ff18..d7c298979c 100644 --- a/src/ace_header.F90 +++ b/src/ace_header.F90 @@ -48,7 +48,7 @@ module ace_header integer :: MT ! ENDF MT value real(8) :: Q_value ! Reaction Q value integer :: multiplicity ! Number of secondary particles released - type(Tab1), allocatable :: multiplicity_E ! Energy-dependent neutron yield + type(Tab1), pointer :: multiplicity_E => null() ! Energy-dependent neutron yield integer :: threshold ! Energy grid index of threshold logical :: scatter_in_cm ! scattering system in center-of-mass? logical :: multiplicity_with_E = .false. ! Flag to indicate E-dependent multiplicity @@ -308,6 +308,8 @@ module ace_header class(Reaction), intent(inout) :: this ! The Reaction object to clear + if (associated(this % multiplicity_E)) deallocate(this % multiplicity_E) + if (associated(this % edist)) then call this % edist % clear() deallocate(this % edist) From 796ac84fe7643f5f229e539456ea81e488f8f85a Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 4 Dec 2015 20:31:37 -0600 Subject: [PATCH 103/650] Documentation changes to build on Read The Docs --- .gitignore | 1 + docs/Makefile | 9 +++- docs/requirements-rtd.txt | 2 + docs/source/_images/cmfd_flow.png | Bin 0 -> 25211 bytes .../cmfd_flow.tikz => _images/cmfd_flow.tex} | 12 ++++- docs/source/_images/meshfig.png | Bin 0 -> 46942 bytes .../meshfig.tikz => _images/meshfig.tex} | 41 +++++++++++------- docs/source/conf.py | 40 ++++++++++++----- docs/source/devguide/docbuild.rst | 11 +---- docs/source/methods/cmfd.rst | 18 +++++--- docs/sphinxext/notebook_sphinxext.py | 5 +-- 11 files changed, 90 insertions(+), 49 deletions(-) create mode 100644 docs/requirements-rtd.txt create mode 100644 docs/source/_images/cmfd_flow.png rename docs/source/{methods/cmfd_tikz/cmfd_flow.tikz => _images/cmfd_flow.tex} (76%) create mode 100644 docs/source/_images/meshfig.png rename docs/source/{methods/cmfd_tikz/meshfig.tikz => _images/meshfig.tex} (99%) diff --git a/.gitignore b/.gitignore index 136491a4b8..3260cb4946 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ examples/python/**/*.xml # Documentation builds docs/build docs/source/_images/*.pdf +docs/source/_images/*.aux # Source build build diff --git a/docs/Makefile b/docs/Makefile index 89c71dc074..e84aadd33c 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -17,6 +17,8 @@ ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) sou SVG2PDF = inkscape PDFS = $(patsubst %.svg,%.pdf,$(wildcard $(IMAGEDIR)/*.svg)) +# Tikz to PNG conversion +PNGS = $(patsubst %.tex,%.png,$(wildcard $(IMAGEDIR)/*.tex)) .PHONY: help images clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest @@ -43,8 +45,13 @@ help: %.pdf: %.svg $(SVG2PDF) -f $< -A $@ +%.png: %.tex + pdflatex --interaction=nonstopmode --output-directory=$(IMAGEDIR) $< + pdftoppm -r 120 -singlefile $(patsubst %.tex,%.pdf, $<) $(basename $<) + convert -trim -fuzz 2% -transparent white $(patsubst %.tex,%.ppm,$<) $@ + # Rule to build PDFs -images: $(PDFS) +images: $(PDFS) $(PNGS) clean: -rm -rf $(BUILDDIR)/* diff --git a/docs/requirements-rtd.txt b/docs/requirements-rtd.txt new file mode 100644 index 0000000000..652f880ff8 --- /dev/null +++ b/docs/requirements-rtd.txt @@ -0,0 +1,2 @@ +sphinx-numfig +jupyter diff --git a/docs/source/_images/cmfd_flow.png b/docs/source/_images/cmfd_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..078f1a4bf844daa633bbf7ab044eb94c8615d84b GIT binary patch literal 25211 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 Date: Mon, 4 Jan 2016 12:47:43 -0800 Subject: [PATCH 104/650] fixed typos in comments and descrptions in Python API --- openmc/statepoint.py | 2 +- openmc/summary.py | 2 +- openmc/tallies.py | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 845937f594..b3cb4b6bdf 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -404,7 +404,7 @@ class StatePoint(object): for j in range(i+1, n_filters): filter.stride *= tally.filters[j].num_bins - # Read scattering moment order strings (e.g., P3, Y-1,2, etc.) + # Read scattering moment order strings (e.g., P3, Y1,2, etc.) moments = self._f['{0}{1}/moment_orders'.format( base, tally_key)].value diff --git a/openmc/summary.py b/openmc/summary.py index 00cf2d47ea..a347b5baa5 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -518,7 +518,7 @@ class Summary(object): # Create Tally object and assign basic properties tally = openmc.Tally(tally_id, tally_name) - # Read scattering moment order strings (e.g., P3, Y-1,2, etc.) + # Read scattering moment order strings (e.g., P3, Y1,2, etc.) moments = self._f['{0}/moment_orders'.format(subbase)].value # Read score metadata diff --git a/openmc/tallies.py b/openmc/tallies.py index cdf6c1f87e..190f147279 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -66,7 +66,9 @@ class Tally(object): triggers : list of openmc.trigger.Trigger List of tally triggers num_scores : Integral - Total number of user-specified scores + Total number of scores, accounting for the fact that a single + user-specified score, e.g. scatter-P3 or flux-Y2,2, might have multiple + bins num_filter_bins : Integral Total number of filter bins accounting for all filters num_bins : Integral From bae0ad713683bff2e6bc2bc234c0ec91f66709eb Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Mon, 4 Jan 2016 18:25:59 -0500 Subject: [PATCH 105/650] Small fixes for #538 --- docs/source/usersguide/output/statepoint.rst | 4 --- docs/source/usersguide/output/summary.rst | 4 +++ openmc/geometry.py | 10 +++--- openmc/summary.py | 4 +-- openmc/universe.py | 38 ++++++++++---------- src/geometry_header.F90 | 2 +- src/initialize.F90 | 2 +- src/input_xml.F90 | 2 +- src/output.F90 | 2 +- src/summary.F90 | 2 +- src/tally.F90 | 9 ++--- 11 files changed, 40 insertions(+), 39 deletions(-) diff --git a/docs/source/usersguide/output/statepoint.rst b/docs/source/usersguide/output/statepoint.rst index d3c1729af6..15bc79f739 100644 --- a/docs/source/usersguide/output/statepoint.rst +++ b/docs/source/usersguide/output/statepoint.rst @@ -185,10 +185,6 @@ if run_mode == 'k-eigenvalue': Type of the j-th filter. Can be 'universe', 'material', 'cell', 'cellborn', 'surface', 'mesh', 'energy', 'energyout', or 'distribcell'. -**/tallies/tally /filter /offset** (*int*) - - Filter offset (used for distribcell filter). - **/tallies/tally /filter /n_bins** (*int*) Number of bins for the j-th filter. diff --git a/docs/source/usersguide/output/summary.rst b/docs/source/usersguide/output/summary.rst index f87f60c4a0..302f340799 100644 --- a/docs/source/usersguide/output/summary.rst +++ b/docs/source/usersguide/output/summary.rst @@ -121,6 +121,10 @@ The current revision of the summary file format is 1. Region specification for the cell. +**/geometry/cells/cell /distribcell_index** (*int*) + + Index of this cell in distribcell filter arrays. + **/geometry/surfaces/surface /index** (*int*) Index in surfaces array used internally in OpenMC. diff --git a/openmc/geometry.py b/openmc/geometry.py index eb2b9db558..fc8e19f071 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -66,20 +66,20 @@ class Geometry(object): # Find the distribcell index of the cell. cells = self.get_all_cells() if path[-1] in cells: - distribcell_ind = cells[path[-1]].distribcell_ind + distribcell_index = cells[path[-1]].distribcell_index else: raise RuntimeError('Could not find cell {} specified in a \ distribcell filter'.format(path[-1])) # Return memoize'd offset if possible - if (path, distribcell_ind) in self._offsets: - offset = self._offsets[(path, distribcell_ind)] + if (path, distribcell_index) in self._offsets: + offset = self._offsets[(path, distribcell_index)] # Begin recursive call to compute offset starting with the base Universe else: offset = self._root_universe.get_cell_instance(path, - distribcell_ind) - self._offsets[(path, distribcell_ind)] = offset + distribcell_index) + self._offsets[(path, distribcell_index)] = offset # Return the final offset return offset diff --git a/openmc/summary.py b/openmc/summary.py index 9e2145b343..1c4c69aab7 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -272,9 +272,9 @@ class Summary(object): region, {s.id: s for s in self.surfaces.values()}) # Get the distribcell index - ind = self._f['geometry/cells'][key]['distribcell_ind'].value + ind = self._f['geometry/cells'][key]['distribcell_index'].value if ind != 0: - cell.distribcell_ind = ind + cell.distribcell_index = ind # Add the Cell to the global dictionary of all Cells self.cells[index] = cell diff --git a/openmc/universe.py b/openmc/universe.py index e7b2151a32..8c50ddbc75 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -63,7 +63,7 @@ class Cell(object): that is used to translate (shift) the universe. offsets : ndarray Array of offsets used for distributed cell searches - distribcell_ind : int + distribcell_index : int Index of this cell in distribcell arrays """ @@ -78,7 +78,7 @@ class Cell(object): self._rotation = None self._translation = None self._offsets = None - self._distribcell_ind = None + self._distribcell_index = None def __eq__(self, other): if not isinstance(other, Cell): @@ -126,7 +126,7 @@ class Cell(object): self._translation) string += '{0: <16}{1}{2}\n'.format('\tOffset', '=\t', self._offsets) string += '{0: <16}{1}{2}\n'.format('\tDistribcell index', '=\t', - self._distribcell_ind) + self._distribcell_index) return string @@ -170,8 +170,8 @@ class Cell(object): return self._offsets @property - def distribcell_ind(self): - return self._distribcell_ind + def distribcell_index(self): + return self._distribcell_index @id.setter def id(self, cell_id): @@ -240,10 +240,10 @@ class Cell(object): cv.check_type('cell region', region, Region) self._region = region - @distribcell_ind.setter - def distribcell_ind(self, ind): + @distribcell_index.setter + def distribcell_index(self, ind): cv.check_type('distribcell index', ind, Integral) - self._distribcell_ind = ind + self._distribcell_index = ind def add_surface(self, surface, halfspace): """Add a half-space to the list of half-spaces whose intersection defines the @@ -285,7 +285,7 @@ class Cell(object): else: self.region = Intersection(self.region, region) - def get_cell_instance(self, path, distribcell_ind): + def get_cell_instance(self, path, distribcell_index): # Get the current element and remove it from the list cell_id = path[0] path = path[1:] @@ -296,12 +296,12 @@ class Cell(object): # If the Cell is filled by a Universe elif self._type == 'fill': - offset = self.offsets[distribcell_ind-1] - offset += self.fill.get_cell_instance(path, distribcell_ind) + offset = self.offsets[distribcell_index-1] + offset += self.fill.get_cell_instance(path, distribcell_index) # If the Cell is filled by a Lattice else: - offset = self.fill.get_cell_instance(path, distribcell_ind) + offset = self.fill.get_cell_instance(path, distribcell_index) return offset @@ -605,7 +605,7 @@ class Universe(object): self._cells.clear() - def get_cell_instance(self, path, distribcell_ind): + def get_cell_instance(self, path, distribcell_index): # Get the current element and remove it from the list path = path[1:] @@ -613,7 +613,7 @@ class Universe(object): cell_id = path[0] # Make a recursive call to the Cell within this Universe - offset = self.cells[cell_id].get_cell_instance(path, distribcell_ind) + offset = self.cells[cell_id].get_cell_instance(path, distribcell_index) # Return the offset computed at all nested Universe levels return offset @@ -1073,22 +1073,22 @@ class RectLattice(Lattice): cv.check_greater_than('lattice pitch', dim, 0.0) self._pitch = pitch - def get_cell_instance(self, path, distribcell_ind): + def get_cell_instance(self, path, distribcell_index): # Get the current element and remove it from the list i = path[0] path = path[1:] # For 2D Lattices if len(self._dimension) == 2: - offset = self._offsets[i[1]-1, i[2]-1, 0, distribcell_ind-1] + offset = self._offsets[i[1]-1, i[2]-1, 0, distribcell_index-1] offset += self._universes[i[1]][i[2]].get_cell_instance(path, - distribcell_ind) + distribcell_index) # For 3D Lattices else: - offset = self._offsets[i[1]-1, i[2]-1, i[3]-1, distribcell_ind-1] + offset = self._offsets[i[1]-1, i[2]-1, i[3]-1, distribcell_index-1] offset += self._universes[i[1]-1][i[2]-1][i[3]-1].get_cell_instance( - path, distribcell_ind) + path, distribcell_index) return offset diff --git a/src/geometry_header.F90 b/src/geometry_header.F90 index 684de883c2..3dad3ba395 100644 --- a/src/geometry_header.F90 +++ b/src/geometry_header.F90 @@ -136,7 +136,7 @@ module geometry_header ! expression logical :: simple ! Is the region simple (intersections ! only) - integer :: distribcell_ind ! Index corresponding to this cell in + integer :: distribcell_index ! Index corresponding to this cell in ! distribcell arrays ! Rotation matrix and translation vector diff --git a/src/initialize.F90 b/src/initialize.F90 index 1134040e9a..30654be9d2 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -1092,7 +1092,7 @@ contains univ => universes(i) do j = 1, univ % n_cells if (cell_list % contains(univ % cells(j))) then - cells(univ % cells(j)) % distribcell_ind = k + cells(univ % cells(j)) % distribcell_index = k univ_list(k) = univ % id k = k + 1 end if diff --git a/src/input_xml.F90 b/src/input_xml.F90 index a4317ed8e3..07d739b889 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -1051,7 +1051,7 @@ contains ! Initialize distribcell instances and distribcell index c % instances = 0 - c % distribcell_ind = NONE + c % distribcell_index = NONE ! Get pointer to i-th cell node call get_list_item(node_cell_list, i, node_cell) diff --git a/src/output.F90 b/src/output.F90 index 5b938e98d3..66e6831371 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -1436,7 +1436,7 @@ contains class(Lattice), pointer :: lat ! Pointer to current lattice ! Get the distribcell index for this cell - map = cells(goal) % distribcell_ind + map = cells(goal) % distribcell_index n = univ % n_cells diff --git a/src/summary.F90 b/src/summary.F90 index 11c4cd434b..7a430cf741 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -196,7 +196,7 @@ contains end do call write_dataset(cell_group, "region", adjustl(region_spec)) - call write_dataset(cell_group, "distribcell_ind", c % distribcell_ind) + call write_dataset(cell_group, "distribcell_index", c % distribcell_index) call close_group(cell_group) end do CELL_LOOP diff --git a/src/tally.F90 b/src/tally.F90 index 2ccd59a58e..7210efc5c8 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -1712,7 +1712,7 @@ contains integer :: j integer :: n ! number of bins for single filter integer :: offset ! offset for distribcell - integer :: distribcell_ind ! index in distribcell arrays + integer :: distribcell_index ! index in distribcell arrays real(8) :: E ! particle energy real(8) :: theta, phi ! Polar and Azimuthal Angles, respectively type(TallyObject), pointer :: t @@ -1757,13 +1757,14 @@ contains case (FILTER_DISTRIBCELL) ! determine next distribcell bin - distribcell_ind = cells(t % filters(i) % int_bins(1)) % distribcell_ind + distribcell_index = cells(t % filters(i) % int_bins(1)) & + % distribcell_index matching_bins(i) = NO_BIN_FOUND offset = 0 do j = 1, p % n_coord if (cells(p % coord(j) % cell) % type == CELL_FILL) then offset = offset + cells(p % coord(j) % cell) % & - offset(distribcell_ind) + offset(distribcell_index) elseif(cells(p % coord(j) % cell) % type == CELL_LATTICE) then if (lattices(p % coord(j + 1) % lattice) % obj & % are_valid_indices([& @@ -1771,7 +1772,7 @@ contains p % coord(j + 1) % lattice_y, & p % coord(j + 1) % lattice_z])) then offset = offset + lattices(p % coord(j + 1) % lattice) % obj % & - offset(distribcell_ind, & + offset(distribcell_index, & p % coord(j + 1) % lattice_x, & p % coord(j + 1) % lattice_y, & p % coord(j + 1) % lattice_z) From 38676476c39d806b513f167df554337792b69049 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Mon, 4 Jan 2016 19:40:49 -0500 Subject: [PATCH 106/650] Removed manual tuple construction for tally shape in place of new shape property --- openmc/mgxs/mgxs.py | 12 ++++-------- openmc/tallies.py | 6 ------ 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index e9ce00254d..968504a06d 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -789,10 +789,8 @@ class MGXS(object): std_dev = np.sqrt(std_dev) # Reshape condensed data arrays with one dimension for all filters - new_shape = \ - (tally.num_filter_bins, tally.num_nuclides, tally.num_scores,) - mean = np.reshape(mean, new_shape) - std_dev = np.reshape(std_dev, new_shape) + mean = np.reshape(mean, tally.shape) + std_dev = np.reshape(std_dev, tally.shape) # Override tally's data with the new condensed data tally._mean = mean @@ -873,10 +871,8 @@ class MGXS(object): domain_filter.num_bins = 1 # Reshape averaged data arrays with one dimension for all filters - new_shape = \ - (tally.num_filter_bins, tally.num_nuclides, tally.num_scores,) - mean = np.reshape(mean, new_shape) - std_dev = np.reshape(std_dev, new_shape) + mean = np.reshape(mean, tally.shape) + std_dev = np.reshape(std_dev, tally.shape) # Override tally's data with the new condensed data tally._mean = mean diff --git a/openmc/tallies.py b/openmc/tallies.py index 8764e2e17c..3a8f102ce3 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -2841,12 +2841,6 @@ class Tally(object): new_tally = copy.deepcopy(self) new_tally.add_filter(new_filter) - # Determine the shape of data in the new diagonalized Tally - num_filter_bins = new_tally.num_filter_bins - num_nuclides = new_tally.num_nuclides - num_scores = new_tally.num_scores - new_shape = (num_filter_bins, num_nuclides, num_scores) - # Determine "base" indices along the new "diagonal", and the factor # by which the "base" indices should be repeated to account for all # other filter bins in the diagonalized tally From 1af9c8b6a290764abc86b256dbcdd5fd1e1f80af Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Mon, 4 Jan 2016 20:46:26 -0500 Subject: [PATCH 107/650] Fixed bug when getting Pandas DataFrame from distribcell tally with 2D Lattice --- openmc/opencg_compatible.py | 4 +++- openmc/statepoint.py | 41 +++++++++++++++++++++++++++++++++---- openmc/universe.py | 2 +- 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/openmc/opencg_compatible.py b/openmc/opencg_compatible.py index 61485b5099..0bda48c160 100644 --- a/openmc/opencg_compatible.py +++ b/openmc/opencg_compatible.py @@ -901,7 +901,9 @@ def get_opencg_lattice(openmc_lattice): # Convert 2D universes array to 3D for OpenCG if len(universes.shape) == 2: - universes.shape = (1,) + universes.shape + new_universes = universes.copy() + new_universes.shape = (1,) + universes.shape + universes = new_universes # Initialize an empty array for the OpenCG nested Universes in this Lattice universe_array = np.ndarray(tuple(np.array(dimension)[::-1]), diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 2b1e57dfa4..3c0759f124 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -75,6 +75,9 @@ class StatePoint(object): energy of the source site. source_present : bool Indicate whether source sites are present + sparse : bool + Whether or not the tallies uses SciPy's LIL sparse matrix format for + compressed data storage tallies : dict Dictionary whose keys are tally IDs and whose values are Tally objects tallies_present : bool @@ -110,6 +113,7 @@ class StatePoint(object): self._tallies_read = False self._summary = False self._global_tallies = None + self._sparse = False def close(self): self._f.close() @@ -318,6 +322,10 @@ class StatePoint(object): def source_present(self): return self._f['source_present'].value > 0 + @property + def sparse(self): + return self._sparse + @property def tallies(self): if not self._tallies_read: @@ -340,7 +348,8 @@ class StatePoint(object): for tally_key in tally_keys: # Read the Tally size specifications - n_realizations = self._f['{0}{1}/n_realizations'.format(base, tally_key)].value + n_realizations = \ + self._f['{0}{1}/n_realizations'.format(base, tally_key)].value # Create Tally object and assign basic properties tally = openmc.Tally(tally_id=tally_key) @@ -350,7 +359,8 @@ class StatePoint(object): tally.num_realizations = n_realizations # Read the number of Filters - n_filters = self._f['{0}{1}/n_filters'.format(base, tally_key)].value + n_filters = \ + self._f['{0}{1}/n_filters'.format(base, tally_key)].value subbase = '{0}{1}/filter '.format(base, tally_key) @@ -358,7 +368,8 @@ class StatePoint(object): for j in range(1, n_filters+1): # Read the Filter type - filter_type = self._f['{0}{1}/type'.format(subbase, j)].value.decode() + filter_type = \ + self._f['{0}{1}/type'.format(subbase, j)].value.decode() n_bins = self._f['{0}{1}/n_bins'.format(subbase, j)].value @@ -380,7 +391,8 @@ class StatePoint(object): tally.add_filter(filter) # Read Nuclide bins - nuclide_names = self._f['{0}{1}/nuclides'.format(base, tally_key)].value + nuclide_names = \ + self._f['{0}{1}/nuclides'.format(base, tally_key)].value # Add all Nuclides to the Tally for name in nuclide_names: @@ -415,6 +427,7 @@ class StatePoint(object): tally.add_score(score) # Add Tally to the global dictionary of all Tallies + tally.sparse = self.sparse self._tallies[tally_key] = tally self._tallies_read = True @@ -439,6 +452,26 @@ class StatePoint(object): def with_summary(self): return False if self.summary is None else True + @sparse.setter + def sparse(self, sparse): + """Convert tally data from NumPy arrays to SciPy list of lists (LIL) + sparse matrices, and vice versa. + + This property may be used to reduce the amount of data in memory during + tally data processing. The tally data will be stored as SciPy LIL + matrices internally within each Tally object. All tally data access + properties and methods will return data as a dense NumPy array. + + """ + + cv.check_type('sparse', sparse, bool) + self._sparse = sparse + + # Update tally sparsities + if self._tallies_read: + for tally_id in self.tallies: + self.tallies[tally_id].sparse = self.sparse + def get_tally(self, scores=[], filters=[], nuclides=[], name=None, id=None, estimator=None): """Finds and returns a Tally object with certain properties. diff --git a/openmc/universe.py b/openmc/universe.py index b997e8845c..8417f27c71 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -1081,7 +1081,7 @@ class RectLattice(Lattice): # For 2D Lattices if len(self._dimension) == 2: offset = self._offsets[i[1]-1, i[2]-1, 0, distribcell_index-1] - offset += self._universes[i[1]][i[2]].get_cell_instance(path, + offset += self._universes[i[1]-1][i[2]-1].get_cell_instance(path, distribcell_index) # For 3D Lattices From bb1156b6dddcbfa929e5bdb375f529f205fa4fd3 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 4 Jan 2016 21:36:04 -0600 Subject: [PATCH 108/650] Add 200 px width logo for RTD documentation. --- docs/source/_images/openmc200px.png | Bin 0 -> 6919 bytes docs/source/conf.py | 6 ++---- 2 files changed, 2 insertions(+), 4 deletions(-) create mode 100644 docs/source/_images/openmc200px.png diff --git a/docs/source/_images/openmc200px.png b/docs/source/_images/openmc200px.png new file mode 100644 index 0000000000000000000000000000000000000000..3997c6baa078996a5f33b02649688b24b5f7ca75 GIT binary patch literal 6919 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 N002ovPDHLkV1o1n77PFY literal 0 HcmV?d00001 diff --git a/docs/source/conf.py b/docs/source/conf.py index 7b227ec520..32154fa60f 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -126,11 +126,13 @@ pygments_style = 'tango' # Sphinx are currently 'default' and 'sphinxdoc'. if on_rtd: html_theme = 'default' + html_logo = '_images/openmc200px.png' else: html_theme = 'haiku' html_theme_options = {'full_logo': True, 'linkcolor': '#0c3762', 'visitedlinkcolor': '#0c3762'} + html_logo = '_images/openmc.png' # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = ["_theme"] @@ -142,10 +144,6 @@ html_title = "OpenMC Documentation" # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -html_logo = '_images/openmc.png' - # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. From b516520e6c79d63204bee107ee89e70dad2f9616 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Tue, 5 Jan 2016 09:24:35 -0500 Subject: [PATCH 109/650] Reinserted blank lines into docstrings in tallies.py --- openmc/tallies.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openmc/tallies.py b/openmc/tallies.py index 3a8f102ce3..8bfdeb3fc9 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1701,6 +1701,7 @@ class Tally(object): def _align_tally_data(self, other, filter_product, nuclide_product, score_product): """Aligns data from two tallies for tally arithmetic. + This is a helper method to construct a dict of dicts of the "aligned" data arrays from each tally for tally arithmetic. The method analyzes the filters, scores and nuclides in both tallies and determines how to @@ -1709,6 +1710,7 @@ class Tally(object): 'tile' and 'repeat' operations to the new data arrays such that all possible combinations of the data in each tally's bins will be made when the arithmetic operation is applied to the arrays. + Parameters ---------- other : Tally @@ -1722,11 +1724,13 @@ class Tally(object): score_product : {'tensor', 'entrywise'} The type of product (tensor or entrywise) to be performed between score data. + Returns ------- dict A dictionary of dictionaries to "aligned" 'mean' and 'std. dev' NumPy arrays for each tally's data. + """ # Get the set of filters that each tally is missing From d2c9e1808270f72827a403c562ef5df12925dbe7 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Tue, 5 Jan 2016 09:37:38 -0500 Subject: [PATCH 110/650] Added scipy to install_requires in setup.py --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 907d80e31b..935e8a3658 100644 --- a/setup.py +++ b/setup.py @@ -32,7 +32,7 @@ kwargs = {'name': 'openmc', if have_setuptools: kwargs.update({ # Required dependencies - 'install_requires': ['numpy', 'h5py', 'matplotlib'], + 'install_requires': ['numpy', 'h5py', 'matplotlib', 'scipy'], # Optional dependencies 'extras_require': { From 3eb10519ac566dc92f0c6775f5a465f7e1b7f5a4 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Wed, 6 Jan 2016 08:45:25 -0500 Subject: [PATCH 111/650] Made SciPy imports for sparse tallies optional --- openmc/tallies.py | 10 +++++++++- setup.py | 3 ++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index 8bfdeb3fc9..7ec1ca50cb 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -10,7 +10,6 @@ from xml.etree import ElementTree as ET import sys import numpy as np -import scipy.sparse as sps from openmc import Mesh, Filter, Trigger, Nuclide from openmc.cross import CrossScore, CrossNuclide, CrossFilter @@ -323,6 +322,8 @@ class Tally(object): # Convert NumPy arrays to SciPy sparse LIL matrices if self.sparse: + import scipy.sparse as sps + self._sum = \ sps.lil_matrix(self._sum.flatten(), self._sum.shape) self._sum_sq = \ @@ -363,6 +364,8 @@ class Tally(object): # Convert NumPy array to SciPy sparse LIL matrix if self.sparse: + import scipy.sparse as sps + self._mean = \ sps.lil_matrix(self._mean.flatten(), self._mean.shape) @@ -385,6 +388,8 @@ class Tally(object): # Convert NumPy array to SciPy sparse LIL matrix if self.sparse: + import scipy.sparse as sps + self._std_dev = \ sps.lil_matrix(self._std_dev.flatten(), self._std_dev.shape) @@ -550,6 +555,8 @@ class Tally(object): # Convert NumPy arrays to SciPy sparse LIL matrices if sparse and not self.sparse: + import scipy.sparse as sps + if self._sum is not None: self._sum = \ sps.lil_matrix(self._sum.flatten(), self._sum.shape) @@ -562,6 +569,7 @@ class Tally(object): if self._std_dev is not None: self._std_dev = \ sps.lil_matrix(self._std_dev.flatten(), self._std_dev.shape) + self._sparse = True # Convert SciPy sparse LIL matrices to NumPy arrays diff --git a/setup.py b/setup.py index 935e8a3658..d401f5fbaf 100644 --- a/setup.py +++ b/setup.py @@ -32,11 +32,12 @@ kwargs = {'name': 'openmc', if have_setuptools: kwargs.update({ # Required dependencies - 'install_requires': ['numpy', 'h5py', 'matplotlib', 'scipy'], + 'install_requires': ['numpy', 'h5py', 'matplotlib'], # Optional dependencies 'extras_require': { 'pandas': ['pandas'], + 'sparse' : ['scipy'], 'vtk': ['vtk', 'silomesh'], 'validate': ['lxml'] }}) From 1c8a12f85a5433ed7a26a7f5a3698b3d18fafa97 Mon Sep 17 00:00:00 2001 From: Kelly Rowland Date: Wed, 6 Jan 2016 09:07:54 -0800 Subject: [PATCH 112/650] fix link to MCNP manual --- docs/source/methods/physics.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/methods/physics.rst b/docs/source/methods/physics.rst index e25057488c..c3ee161a75 100644 --- a/docs/source/methods/physics.rst +++ b/docs/source/methods/physics.rst @@ -1636,4 +1636,4 @@ another. .. _lectures: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/la-ur-05-4983.pdf -.. _MCNP Manual: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/MCNP5_Manual_Volume_I_LA-UR-03-1987.pdf +.. _MCNP Manual: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/la-ur-03-1987.pdf From 4d4e31fbd60bea6b3d9f040eabd8d11345bb87cd Mon Sep 17 00:00:00 2001 From: Kelly Rowland Date: Wed, 6 Jan 2016 13:24:50 -0800 Subject: [PATCH 113/650] remove extraneous whitespace on MCNP manual link --- docs/source/methods/physics.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/methods/physics.rst b/docs/source/methods/physics.rst index c3ee161a75..33f6c74d13 100644 --- a/docs/source/methods/physics.rst +++ b/docs/source/methods/physics.rst @@ -1636,4 +1636,4 @@ another. .. _lectures: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/la-ur-05-4983.pdf -.. _MCNP Manual: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/la-ur-03-1987.pdf +.. _MCNP Manual: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/la-ur-03-1987.pdf From b394aeb40c4fb84adb2448edb0d5bb53a52c2769 Mon Sep 17 00:00:00 2001 From: Kelly Rowland Date: Wed, 6 Jan 2016 13:25:34 -0800 Subject: [PATCH 114/650] fix link to LANL Monte Carlo sampler --- docs/source/methods/physics.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/methods/physics.rst b/docs/source/methods/physics.rst index 33f6c74d13..cc486ab67b 100644 --- a/docs/source/methods/physics.rst +++ b/docs/source/methods/physics.rst @@ -1626,7 +1626,7 @@ another. .. _ENDF-6 Format: http://www-nds.iaea.org/ndspub/documents/endf/endf102/endf102.pdf -.. _Monte Carlo Sampler: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/la-9721_3rdmcsampler.pdf +.. _Monte Carlo Sampler: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/la-9721.pdf .. _LA-UR-14-27694: http://permalink.lanl.gov/object/tr?what=info:lanl-repo/lareport/LA-UR-14-27694 From 44d1ba3b9467b9a3a024996149d40d52277f7fb6 Mon Sep 17 00:00:00 2001 From: Kelly Rowland Date: Wed, 6 Jan 2016 13:29:34 -0800 Subject: [PATCH 115/650] fix link to rand generation with arbitrary strides --- docs/source/methods/random_numbers.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/methods/random_numbers.rst b/docs/source/methods/random_numbers.rst index 3ea61719c5..e0a974f43b 100644 --- a/docs/source/methods/random_numbers.rst +++ b/docs/source/methods/random_numbers.rst @@ -70,5 +70,5 @@ the idea is to determine the new multiplicative and additive constants in Different Sizes and Good Lattice Structures," *Math. Comput.*, **68**, 249 (1999). -.. _Brown: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/anl_rn_arb-strides_1994.pdf +.. _Brown: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/anl-rn-arb-stride.pdf .. _linear congruential generator: http://en.wikipedia.org/wiki/Linear_congruential_generator From 6021623e2c2e5ae01146da8d2e2c25d9d32c487b Mon Sep 17 00:00:00 2001 From: Kelly Rowland Date: Wed, 6 Jan 2016 21:15:47 -0800 Subject: [PATCH 116/650] fix unpublished rational approximation link --- docs/source/methods/tallies.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/methods/tallies.rst b/docs/source/methods/tallies.rst index fd0812245a..65a0989ac7 100644 --- a/docs/source/methods/tallies.rst +++ b/docs/source/methods/tallies.rst @@ -507,6 +507,6 @@ improve the estimate of the percentile. .. _Cauchy distribution: http://en.wikipedia.org/wiki/Cauchy_distribution -.. _unpublished rational approximation: http://home.online.no/~pjacklam/notes/invnorm/ +.. _unpublished rational approximation: https://web.archive.org/web/20150926021742/http://home.online.no/~pjacklam/notes/invnorm/ .. _MC21: http://www.osti.gov/bridge/servlets/purl/903083-HT5p1o/903083.pdf From 05b600819aee5e3be8dd77bc6bf059acf562c63c Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Thu, 7 Jan 2016 20:20:55 -0500 Subject: [PATCH 117/650] Updates to MGXS pyapi --- openmc/material.py | 3 +-- openmc/mgxs_library.py | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/openmc/material.py b/openmc/material.py index 4da4e0ae35..ca78bd61f2 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -339,8 +339,7 @@ class Material(object): # Ensure no nuclides, elements, or sab are added since these would be # incompatible with macroscopics - if ((len(self._nuclides.keys()) != 0) and - (len(self._elements.keys()) != 0) and (len(self._sab) != 0)): + if self._nuclides or self._elements or self._sab: msg = 'Unable to add a Macroscopic data set to Material ID="{0}" ' \ 'with a macroscopic value "{1}" as an incompatible data ' \ 'member (i.e., nuclide, element, or S(a,b) table) ' \ diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index d1c1f4e05f..5820c0ee52 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -20,6 +20,17 @@ REPRESENTATIONS = ['isotropic', 'angle'] def ndarray_to_string(arr): """Converts a numpy ndarray in to a join with spaces between entries similar to ' '.join(map(str,arr)) but applied to all sub-dimensions. + + Parameters + ---------- + arr : ndarray + Array to combine in to a string + + Returns + ------- + text : str + String representation of array in arr + """ shape = arr.shape @@ -67,8 +78,8 @@ def ndarray_to_string(arr): return text -class Xsdata(object): - """A multi-group cross section data set (xsdata) providing all the +class XSdata(object): + """A multi-group cross section data set providing all the multi-group data necessary for a multi-group OpenMC calculation. Parameters @@ -76,7 +87,6 @@ class Xsdata(object): name : str, optional Name of the mgxs data set. - representation : str Method used in generating the MGXS (isotropic or angle-dependent flux weighting). Defaults to 'isotropic' @@ -141,7 +151,6 @@ class Xsdata(object): def representation(self): return self._representation - @property def alias(self): return self._alias @@ -221,8 +230,8 @@ class Xsdata(object): check_type("energy_groups", energy_groups, EnergyGroups) # Check that there is one or more groups - if ((energy_groups.num_energy_groups.num_group is None) or - (energy_groups.num_energy_groups.num_group < 1)): + if ((energy_groups.num_groups is None) or + (energy_groups.num_groups < 1)): msg = 'energy_groups object incorrectly initialized.' raise ValueError(msg) @@ -429,7 +438,7 @@ class Xsdata(object): @nu_fission.setter def nu_fission(self, nu_fission): - # nu_fission ca nbe given as a vector or a matrix + # nu_fission can be given as a vector or a matrix # Vector is used when chi also exists. # Matrix is used when chi does not exist. # We have to check that the correct form is given, but only if @@ -563,6 +572,8 @@ class MGXSLibraryFile(object): Inverse of velocities, units of sec/cm filename : str XML file to write to. + xsdatas : Iterable of XSdata + Iterable of multi-Group cross section data objects """ def __init__(self, energy_groups): From 75093ea43d927e34ae8a9640e2361754567291ab Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Thu, 7 Jan 2016 20:31:56 -0500 Subject: [PATCH 118/650] Fixed failing build and renamed more Xsdatas to XSdata --- .../python/pincell_multigroup/build-xml.py | 4 +-- openmc/mgxs_library.py | 28 +++++++++---------- src/tally.F90 | 7 +++-- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/examples/python/pincell_multigroup/build-xml.py b/examples/python/pincell_multigroup/build-xml.py index bb4c2db14f..2145a68a54 100644 --- a/examples/python/pincell_multigroup/build-xml.py +++ b/examples/python/pincell_multigroup/build-xml.py @@ -20,7 +20,7 @@ groups = openmc.mgxs.EnergyGroups(group_edges=[1E-11, 0.0635E-6, 10.0E-6, 1.0E-4, 1.0E-3, 0.5, 1.0, 20.0]) # Instantiate the 7-group (C5G7) cross section data -uo2_xsdata = openmc.Xsdata('UO2.300k', groups) +uo2_xsdata = openmc.XSdata('UO2.300k', groups) uo2_xsdata.order = 0 uo2_xsdata.total = np.array([0.1779492, 0.3298048, 0.4803882, 0.5543674, 0.3118013, 0.3951678, 0.5644058]) @@ -43,7 +43,7 @@ uo2_xsdata.nu_fission = np.array([2.005998E-02, 2.027303E-03, 1.570599E-02, uo2_xsdata.chi = np.array([5.8791E-01, 4.1176E-01, 3.3906E-04, 1.1761E-07, 0.0000E+00, 0.0000E+00, 0.0000E+00]) -h2o_xsdata = openmc.Xsdata('LWTR.300k', groups) +h2o_xsdata = openmc.XSdata('LWTR.300k', groups) h2o_xsdata.order = 0 h2o_xsdata.total = np.array([0.15920605, 0.412969593, 0.59030986, 0.58435, 0.718, 1.2544497, 2.650379]) diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 5820c0ee52..80cec82943 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -221,7 +221,7 @@ class XSdata(object): @name.setter def name(self, name): - check_type('name for Xsdata', name, basestring) + check_type('name for XSdata', name, basestring) self._name = name @energy_groups.setter @@ -247,7 +247,7 @@ class XSdata(object): @alias.setter def alias(self, alias): if alias is not None: - check_type('alias for Xsdata', alias, basestring) + check_type('alias for XSdata', alias, basestring) self._alias = alias else: self._alias = self._name @@ -604,24 +604,24 @@ class MGXSLibraryFile(object): self._energy_groups = energy_groups def add_xsdata(self, xsdata): - """Add an xsdata entry to the file. + """Add an XSdata entry to the file. Parameters ---------- - xsdata : Xsdata + xsdata : XSdata MGXS information to add """ # Check the type - if not isinstance(xsdata, Xsdata): - msg = 'Unable to add a non-Xsdata "{0}" to the ' \ + if not isinstance(xsdata, XSdata): + msg = 'Unable to add a non-XSdata "{0}" to the ' \ 'MGXSLibraryFile'.format(xsdata) raise ValueError(msg) # Make sure energy groups match. if xsdata.energy_groups != self._energy_groups: - msg = 'Energy groups of Xsdata do not match that of MGXSLibraryFile!' + msg = 'Energy groups of XSdata do not match that of MGXSLibraryFile!' raise ValueError(msg) self._xsdatas.append(xsdata) @@ -631,8 +631,8 @@ class MGXSLibraryFile(object): Parameters ---------- - xsdatas : tuple or list of Xsdata - Xsdatas to add + xsdatas : tuple or list of XSdata + XSdatas to add """ @@ -649,14 +649,14 @@ class MGXSLibraryFile(object): Parameters ---------- - xsdata : Xsdata - Xsdata to remove + xsdata : XSdata + XSdata to remove """ - if not isinstance(xsdata, Xsdata): - msg = 'Unable to remove a non-Xsdata "{0}" from the ' \ - 'XsdatasFile'.format(xsdata) + if not isinstance(xsdata, XSdata): + msg = 'Unable to remove a non-XSdata "{0}" from the ' \ + 'XSdatasFile'.format(xsdata) raise ValueError(msg) self._xsdatas.remove(xsdata) diff --git a/src/tally.F90 b/src/tally.F90 index f16a87000a..5d978bdcba 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -2483,6 +2483,7 @@ contains integer :: i ! loop index for filters integer :: j integer :: n ! number of bins for single filter + integer :: distribcell_index ! index in distribcell arrays integer :: offset ! offset for distribcell real(8) :: theta, phi ! Polar and Azimuthal Angles, respectively real(8) :: E @@ -2528,12 +2529,14 @@ contains case (FILTER_DISTRIBCELL) ! determine next distribcell bin + distribcell_index = cells(t % filters(i) % int_bins(1)) & + % distribcell_index matching_bins(i) = NO_BIN_FOUND offset = 0 do j = 1, p % n_coord if (cells(p % coord(j) % cell) % type == CELL_FILL) then offset = offset + cells(p % coord(j) % cell) % & - offset(t % filters(i) % offset) + offset(distribcell_index) elseif(cells(p % coord(j) % cell) % type == CELL_LATTICE) then if (lattices(p % coord(j + 1) % lattice) % obj & % are_valid_indices([& @@ -2541,7 +2544,7 @@ contains p % coord(j + 1) % lattice_y, & p % coord(j + 1) % lattice_z])) then offset = offset + lattices(p % coord(j + 1) % lattice) % obj % & - offset(t % filters(i) % offset, & + offset(distribcell_index, & p % coord(j + 1) % lattice_x, & p % coord(j + 1) % lattice_y, & p % coord(j + 1) % lattice_z) From f1a58ff32cb943fe619a6593c314827ebdf41d45 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 8 Jan 2016 09:27:21 -0500 Subject: [PATCH 119/650] Fixed bug for some subelements of source_point settings element in Python API --- openmc/settings.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openmc/settings.py b/openmc/settings.py index 9eb54b9eb6..e8ec6463af 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -1012,16 +1012,19 @@ class SettingsFile(object): # Separate subelement if self._sourcepoint_separate is not None: + element = ET.SubElement(self._settings_file, "source_point") subelement = ET.SubElement(element, "separate") subelement.text = str(self._sourcepoint_separate).lower() # Write subelement if self._sourcepoint_write is not None: + element = ET.SubElement(self._settings_file, "source_point") subelement = ET.SubElement(element, "write") subelement.text = str(self._sourcepoint_write).lower() # Overwrite latest subelement if self._sourcepoint_overwrite is not None: + element = ET.SubElement(self._settings_file, "source_point") subelement = ET.SubElement(element, "overwrite_latest") subelement.text = str(self._sourcepoint_overwrite).lower() From 08fdb8a91d0d4b9fbfe94fc89eb134daecc27817 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 9 Jan 2016 05:43:28 -0500 Subject: [PATCH 120/650] satisfying @wbinventors pyapi comments --- openmc/material.py | 16 ++++++++-------- openmc/mgxs/groups.py | 2 +- openmc/mgxs_library.py | 16 ++++++++-------- openmc/settings.py | 2 +- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/openmc/material.py b/openmc/material.py index ca78bd61f2..e429190dc1 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -332,7 +332,7 @@ class Material(object): Parameters ---------- - macroscopic : str or openmc.macroscopic.Macroscopic + macroscopic : str or Macroscopic Macroscopic to add """ @@ -371,7 +371,7 @@ class Material(object): Parameters ---------- - macroscopic : openmc.macroscopic.Macroscopic + macroscopic : Macroscopic Macroscopic to remove """ @@ -622,14 +622,14 @@ class Material(object): # Create element XML subelements subelements = self._get_elements_xml(self._elements, distrib=True) - for subelement_ele in subelements: - subelement.append(subelement_ele) + for subsubelement in subelements: + subelement.append(subsubelement) else: # Create macroscopic XML subelements - subelement_ele = self._get_macroscopic_xml(self, - self._macroscopic, - distrib=True) - subelement.append(subelement_ele) + subsubelement = self._get_macroscopic_xml(self, + self._macroscopic, + distrib=True) + subelement.append(subsubelement) if len(self._sab) > 0: for sab in self._sab: diff --git a/openmc/mgxs/groups.py b/openmc/mgxs/groups.py index e6838b36ba..3436c0e037 100644 --- a/openmc/mgxs/groups.py +++ b/openmc/mgxs/groups.py @@ -54,7 +54,7 @@ class EnergyGroups(object): def __eq__(self, other): if not isinstance(other, EnergyGroups): return False - elif (self.group_edges != other.group_edges).all(): + elif self.group_edges != other.group_edges: return False else: return True diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 80cec82943..605fc7064d 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -14,7 +14,7 @@ from openmc.checkvalue import check_type, check_value, check_greater_than, \ check_iterable_type from openmc.clean_xml import * -# MGXS Representations supported by OpenMC +# Supported incoming particle MGXS angular treatment representations REPRESENTATIONS = ['isotropic', 'angle'] def ndarray_to_string(arr): @@ -87,7 +87,7 @@ class XSdata(object): name : str, optional Name of the mgxs data set. - representation : str + representation : {'isotropic' or 'angle'} Method used in generating the MGXS (isotropic or angle-dependent flux weighting). Defaults to 'isotropic' @@ -99,11 +99,11 @@ class XSdata(object): Separate unique identifier for the xsdata object kT : float Temperature (in units of MeV) of this data set. - energy_groups : openmc.mgxs.EnergyGroups + energy_groups : EnergyGroups Energy group structure fissionable : boolean Whether or not this is a fissionable data set. - scatt_type : str + scatt_type : {'legendre', 'histogram', or 'tabular'} Angular distribution representation (legendre, histogram, or tabular) order : int Either the Legendre order, number of bins, or number of points used to @@ -111,9 +111,9 @@ class XSdata(object): transfer probability. tabular_legendre : dict Set how to treat the Legendre scattering kernel (tabular or leave in - Legendre polynomial form). Dict contains two keys: ``enable`` and - ``num_points``. ``enable`` is a boolean and ``num_points`` is the - number of points to use, if ``enable`` is True. + Legendre polynomial form). Dict contains two keys: 'enable' and + 'num_points'. 'enable' is a boolean and 'num_points' is the + number of points to use, if 'enable' is True. """ def __init__(self, name, energy_groups, representation="isotropic"): @@ -247,7 +247,7 @@ class XSdata(object): @alias.setter def alias(self, alias): if alias is not None: - check_type('alias for XSdata', alias, basestring) + check_type('alias', alias, basestring) self._alias = alias else: self._alias = self._name diff --git a/openmc/settings.py b/openmc/settings.py index 61017a7a5f..8a562a5455 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -79,7 +79,7 @@ class SettingsFile(object): Set whether the calculation should be continuous-energy or multi-group. Acceptable values are 'continuous-energy' or 'multi-group' max_order : int - Maximum scattering order to apply globally when in multi-grup mode. + Maximum scattering order to apply globally when in multi-group mode. ptables : bool Determine whether probability tables are used. run_cmfd : bool From fef4a50c5e817a7aa7907b3afc724e9c0f3b6e47 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Mon, 28 Dec 2015 21:52:34 -0500 Subject: [PATCH 121/650] Build distribcell maps for cells with distribmats --- src/geometry.F90 | 28 +++++++++++++++++++++-- src/initialize.F90 | 57 +++++++++++++++++++++++++++------------------- src/input_xml.F90 | 51 +++++++++++++++++++++++++---------------- 3 files changed, 92 insertions(+), 44 deletions(-) diff --git a/src/geometry.F90 b/src/geometry.F90 index 19289f9a45..f386dcf008 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -194,6 +194,7 @@ contains integer, optional :: search_cells(:) integer :: i ! index over cells integer :: j ! coordinate level index + integer :: k ! distribcell instance integer :: i_xyz(3) ! indices in lattice integer :: n ! number of cells to search integer :: index_cell ! index in cells array @@ -246,9 +247,32 @@ contains ! ====================================================================== ! AT LOWEST UNIVERSE, TERMINATE SEARCH - ! set material + ! Set the particle material p % last_material = p % material - p % material = c % material(1) +! if (size(c % material) == 1) then + ! Only one material for this cell; assign that one to the particle. + p % material = c % material(1) +! else +! ! Distributed instances of this cell have different materials. +! ! Determine which instance this is and assign the matching material. +! offset = 0 +! do k = 1, p % n_coord +! if (cells(p % coord(k) % cell) % type == CELL_FILL) then +! offset = offset + cells(p % coord(k) % cell) % & +! offset(t % filters(i) % offset) +! elseif(cells(p % coord(k) % cell) % type == CELL_LATTICE) then +! if (lattices(p % coord(k + 1) % lattice) % obj & +! % are_valid_indices([& +! p % coord(k + 1) % lattice_x, & +! p % coord(k + 1) % lattice_y, & +! p % coord(k + 1) % lattice_z])) then +! offset = offset + lattices(p % coord(k + 1) % lattice) % obj % & +! offset(t % filters(i) % offset, & +! p % coord(k + 1) % lattice_x, & +! p % coord(k + 1) % lattice_y, & +! p % coord(k + 1) % lattice_z) +! end if +! end if elseif (c % type == CELL_FILL) then CELL_TYPE ! ====================================================================== diff --git a/src/initialize.F90 b/src/initialize.F90 index 802f890aa9..f28959618f 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -614,31 +614,33 @@ contains ! ======================================================================= ! ADJUST MATERIAL/FILL POINTERS FOR EACH CELL - id = c%material(1) - if (id == MATERIAL_VOID) then - c%type = CELL_NORMAL - elseif (id /= 0) then - if (material_dict%has_key(id)) then - c%type = CELL_NORMAL - c%material(1) = material_dict%get_key(id) - else - call fatal_error("Could not find material " // trim(to_str(id)) & - &// " specified on cell " // trim(to_str(c%id))) - end if - else - id = c%fill - if (universe_dict%has_key(id)) then - c%type = CELL_FILL - c%fill = universe_dict%get_key(id) - elseif (lattice_dict%has_key(id)) then - lid = lattice_dict%get_key(id) - c%type = CELL_LATTICE - c%fill = lid + if (c % material(1) == NONE) then + id = c % fill + if (universe_dict % has_key(id)) then + c % type = CELL_FILL + c % fill = universe_dict % get_key(id) + elseif (lattice_dict % has_key(id)) then + lid = lattice_dict % get_key(id) + c % type = CELL_LATTICE + c % fill = lid else call fatal_error("Specified fill " // trim(to_str(id)) // " on cell "& - &// trim(to_str(c%id)) // " is neither a universe nor a & + &// trim(to_str(c % id)) // " is neither a universe nor a & &lattice.") end if + else + do j = 1, size(c % material) + id = c % material(j) + if (id == MATERIAL_VOID) then + c % type = CELL_NORMAL + else if (material_dict % has_key(id)) then + c % type = CELL_NORMAL + c % material(j) = material_dict % get_key(id) + else + call fatal_error("Could not find material " // trim(to_str(id)) & + &// " specified on cell " // trim(to_str(c % id))) + end if + end do end if end do @@ -1042,11 +1044,12 @@ contains class(Lattice), pointer :: lat ! pointer to lattice type(TallyObject), pointer :: t ! pointer to tally type(TallyFilter), pointer :: filter ! pointer to filter + type(Cell), pointer :: c ! pointer to cell ! Begin gathering list of cells in distribcell tallies n_maps = 0 - ! Populate list of distribcells to track + ! List all cells referenced in distribcell filters. do i = 1, n_tallies t => tallies(i) @@ -1062,6 +1065,14 @@ contains end do end do + ! List all cells with multiple (distributed) materials. + do i = 1, n_cells + c => cells(i) + if (size(c % material) > 1) then + if (.not. cell_list % contains(i)) call cell_list % add(i) + end if + end do + ! Compute the number of unique universes containing these distribcells ! to determine the number of offset tables to allocate do i = 1, n_universes @@ -1076,7 +1087,7 @@ contains ! Allocate the list of offset tables for each unique universe allocate(univ_list(n_maps)) - ! Allocate list to accumulate target distribccell counts in each universe + ! Allocate list to accumulate target distribcell counts in each universe allocate(counts(n_universes, n_maps)) ! Allocate list to track if target distribcells are found in each universe diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 016b811ac4..24b36f3fb8 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -982,8 +982,7 @@ contains subroutine read_geometry_xml() integer :: i, j, k, m, i_x, i_a, input_index - integer :: n - integer :: n_x, n_y, n_z, n_rings, n_rlats, n_hlats + integer :: n, n_mats, n_x, n_y, n_z, n_rings, n_rlats, n_hlats integer :: universe_num integer :: n_cells_in_univ integer :: coeffs_reqd @@ -994,6 +993,7 @@ contains logical :: boundary_exists character(MAX_LINE_LEN) :: filename character(MAX_WORD_LEN) :: word + character(MAX_WORD_LEN), allocatable :: sarray(:) character(1000) :: region_spec type(Cell), pointer :: c class(Surface), pointer :: s @@ -1085,27 +1085,40 @@ contains end if ! Read material - allocate(c % material(1)) - word = '' - if (check_for_node(node_cell, "material")) & - call get_node_value(node_cell, "material", word) - select case(to_lower(word)) - case ('void') - c % material(1) = MATERIAL_VOID + if (check_for_node(node_cell, "material")) then + n_mats = get_arraysize_string(node_cell, "material") - case ('') - ! This case is called if no material was specified - c % material(1) = NONE + if (n_mats > 0) then + allocate(sarray(n_mats)) + call get_node_array(node_cell, "material", sarray) - case default - c % material(1) = int(str_to_int(word), 4) + allocate(c % material(n_mats)) + do j = 1, n_mats + select case(trim(to_lower(sarray(j)))) + case ('void') + c % material(j) = MATERIAL_VOID + case default + c % material(j) = int(str_to_int(sarray(j)), 4) - ! Check for error - if (c % material(1) == ERROR_INT) then - call fatal_error("Invalid material specified on cell " & - &// to_str(c % id)) + ! Check for error + if (c % material(j) == ERROR_INT) then + call fatal_error("Invalid material specified on cell " & + &// to_str(c % id)) + end if + end select + end do + + deallocate(sarray) + + else + allocate(c % material(1)) + c % material(1) = NONE end if - end select + + else + allocate(c % material(1)) + c % material(1) = NONE + end if ! Check to make sure that either material or fill was specified if (c % material(1) == NONE .and. c % fill == NONE) then From 20d6cc471a46ccb442bd2839c58abc5997b8c19c Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sat, 9 Jan 2016 18:20:24 -0500 Subject: [PATCH 122/650] Implement distribmat in find_cell --- src/geometry.F90 | 53 ++++++++++++++++++++++++++---------------------- src/plot.F90 | 14 ++++++------- 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/src/geometry.F90 b/src/geometry.F90 index f386dcf008..571ed6d407 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -193,8 +193,9 @@ contains logical, intent(inout) :: found integer, optional :: search_cells(:) integer :: i ! index over cells - integer :: j ! coordinate level index - integer :: k ! distribcell instance + integer :: j, k ! coordinate level index + integer :: offset ! instance # of a distributed cell + integer :: distribcell_index integer :: i_xyz(3) ! indices in lattice integer :: n ! number of cells to search integer :: index_cell ! index in cells array @@ -249,30 +250,34 @@ contains ! Set the particle material p % last_material = p % material -! if (size(c % material) == 1) then + if (size(c % material) == 1) then ! Only one material for this cell; assign that one to the particle. p % material = c % material(1) -! else -! ! Distributed instances of this cell have different materials. -! ! Determine which instance this is and assign the matching material. -! offset = 0 -! do k = 1, p % n_coord -! if (cells(p % coord(k) % cell) % type == CELL_FILL) then -! offset = offset + cells(p % coord(k) % cell) % & -! offset(t % filters(i) % offset) -! elseif(cells(p % coord(k) % cell) % type == CELL_LATTICE) then -! if (lattices(p % coord(k + 1) % lattice) % obj & -! % are_valid_indices([& -! p % coord(k + 1) % lattice_x, & -! p % coord(k + 1) % lattice_y, & -! p % coord(k + 1) % lattice_z])) then -! offset = offset + lattices(p % coord(k + 1) % lattice) % obj % & -! offset(t % filters(i) % offset, & -! p % coord(k + 1) % lattice_x, & -! p % coord(k + 1) % lattice_y, & -! p % coord(k + 1) % lattice_z) -! end if -! end if + else + ! Distributed instances of this cell have different materials. + ! Determine which instance this is and assign the matching material. + distribcell_index = c % distribcell_index + offset = 0 + do k = 1, p % n_coord + if (cells(p % coord(k) % cell) % type == CELL_FILL) then + offset = offset + cells(p % coord(k) % cell) % & + offset(distribcell_index) + elseif (cells(p % coord(k) % cell) % type == CELL_LATTICE) then + if (lattices(p % coord(k + 1) % lattice) % obj & + % are_valid_indices([& + p % coord(k + 1) % lattice_x, & + p % coord(k + 1) % lattice_y, & + p % coord(k + 1) % lattice_z])) then + offset = offset + lattices(p % coord(k + 1) % lattice) % obj % & + offset(distribcell_index, & + p % coord(k + 1) % lattice_x, & + p % coord(k + 1) % lattice_y, & + p % coord(k + 1) % lattice_z) + end if + end if + end do + p % material = c % material(offset + 1) + end if elseif (c % type == CELL_FILL) then CELL_TYPE ! ====================================================================== diff --git a/src/plot.F90 b/src/plot.F90 index 99d7e3ae94..75d0bc9442 100644 --- a/src/plot.F90 +++ b/src/plot.F90 @@ -82,17 +82,17 @@ contains if (pl % color_by == PLOT_COLOR_MATS) then ! Assign color based on material c => cells(p % coord(j) % cell) - if (c % material(1) == MATERIAL_VOID) then - ! By default, color void cells white - rgb = 255 - id = -1 - else if (c % type == CELL_FILL) then + if (c % type == CELL_FILL) then ! If we stopped on a middle universe level, treat as if not found rgb = pl % not_found % rgb id = -1 + else if (p % material == MATERIAL_VOID) then + ! By default, color void cells white + rgb = 255 + id = -1 else - rgb = pl % colors(c % material(1)) % rgb - id = materials(c % material(1)) % id + rgb = pl % colors(p % material) % rgb + id = materials(p % material) % id end if else if (pl % color_by == PLOT_COLOR_CELLS) then ! Assign color based on cell From 60732fd7dfeacbc5f92e2b769a19caf10658d5d8 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sat, 9 Jan 2016 19:36:53 -0500 Subject: [PATCH 123/650] Enable distributed materials in PyAPI --- openmc/geometry.py | 7 +++++-- openmc/universe.py | 12 +++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/openmc/geometry.py b/openmc/geometry.py index fc8e19f071..9788671f5c 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -1,4 +1,4 @@ -from collections import OrderedDict +from collections import Iterable, OrderedDict from xml.etree import ElementTree as ET import openmc @@ -140,7 +140,10 @@ class Geometry(object): materials = set() for cell in material_cells: - materials.add(cell._fill) + if isinstance(cell.fill, Iterable): + for m in cell.fill: materials.add(m) + else: + materials.add(cell.fill) materials = list(materials) materials.sort(key=lambda x: x.id) diff --git a/openmc/universe.py b/openmc/universe.py index 8417f27c71..2fa535265c 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -50,7 +50,7 @@ class Cell(object): Unique identifier for the cell name : str Name of the cell - fill : Material or Universe or Lattice or 'void' + fill : Materials or Universe or Lattice or 'void' Indicates what the region of space is filled with region : openmc.region.Region Region of space that is assigned to the cell. @@ -112,6 +112,9 @@ class Cell(object): if isinstance(self._fill, openmc.Material): string += '{0: <16}{1}{2}\n'.format('\tMaterial', '=\t', self._fill._id) + elif isinstance(self._fill, Iterable): + string += ('{0: <16}{1}'.format('\tMaterial', '=\t') + + '[' + ', '.join([str(m.id) for m in self.fill]) + ']\n') elif isinstance(self._fill, (Universe, Lattice)): string += '{0: <16}{1}{2}\n'.format('\tFill', '=\t', self._fill._id) @@ -205,6 +208,10 @@ class Cell(object): elif isinstance(fill, openmc.Material): self._type = 'normal' + elif isinstance(fill, Iterable): + cv.check_type('cell.fill', fill, Iterable, openmc.Material) + self._type = 'normal' + elif isinstance(fill, Universe): self._type = 'fill' @@ -394,6 +401,9 @@ class Cell(object): if isinstance(self._fill, openmc.Material): element.set("material", str(self._fill._id)) + elif isinstance(self._fill, Iterable): + element.set("material", ' '.join([str(m.id) for m in self.fill])) + elif isinstance(self._fill, (Universe, Lattice)): element.set("fill", str(self._fill._id)) self._fill.create_xml_subelement(xml_element) From 12844d0dd1b4cf0c6ed279025eaae3f297cb2b8f Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sat, 9 Jan 2016 20:42:40 -0500 Subject: [PATCH 124/650] Add distributed material test --- tests/test_distribmat/inputs_true.dat | 1 + tests/test_distribmat/results_true.dat | 2 + tests/test_distribmat/test_distribmat.py | 122 +++++++++++++++++++++++ 3 files changed, 125 insertions(+) create mode 100644 tests/test_distribmat/inputs_true.dat create mode 100644 tests/test_distribmat/results_true.dat create mode 100644 tests/test_distribmat/test_distribmat.py diff --git a/tests/test_distribmat/inputs_true.dat b/tests/test_distribmat/inputs_true.dat new file mode 100644 index 0000000000..72d296c9b1 --- /dev/null +++ b/tests/test_distribmat/inputs_true.dat @@ -0,0 +1 @@ +dcb9a612432305763ad10aaaab3ed095716cbb73f6b357ec180d300ccf365f9781aac7b1f3228c8756ceccf6aa230d0e03cf18ef2c0bc21fba1f082c3d5d6896 \ No newline at end of file diff --git a/tests/test_distribmat/results_true.dat b/tests/test_distribmat/results_true.dat new file mode 100644 index 0000000000..9481371d85 --- /dev/null +++ b/tests/test_distribmat/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +1.433669E+00 7.069157E-03 diff --git a/tests/test_distribmat/test_distribmat.py b/tests/test_distribmat/test_distribmat.py new file mode 100644 index 0000000000..b6bffd90d9 --- /dev/null +++ b/tests/test_distribmat/test_distribmat.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python + +import os +import sys +sys.path.insert(0, os.pardir) +from testing_harness import TestHarness, PyAPITestHarness +import openmc + + +class DistribmatTestHarness(PyAPITestHarness): + def _build_inputs(self): + #################### + # Materials + #################### + + moderator = openmc.Material(material_id=1) + moderator.set_density('g/cc', 1.0) + moderator.add_nuclide('H-1', 2.0) + moderator.add_nuclide('O-16', 1.0) + + dense_fuel = openmc.Material(material_id=2) + dense_fuel.set_density('g/cc', 4.5) + dense_fuel.add_nuclide('U-235', 1.0) + + light_fuel = openmc.Material(material_id=3) + light_fuel.set_density('g/cc', 2.0) + light_fuel.add_nuclide('U-235', 1.0) + + mats_file = openmc.MaterialsFile() + mats_file.default_xs = '71c' + mats_file.add_materials([moderator, dense_fuel, light_fuel]) + mats_file.export_to_xml() + + + #################### + # Geometry + #################### + + c1 = openmc.Cell(cell_id=1) + c1.fill = moderator + mod_univ = openmc.Universe(universe_id=1) + mod_univ.add_cell(c1) + + r0 = openmc.ZCylinder(R=0.3) + c11 = openmc.Cell(cell_id=11) + c11.region = -r0 + c11.fill = [dense_fuel, light_fuel] + [dense_fuel]*2 + c12 = openmc.Cell(cell_id=12) + c12.region = +r0 + c12.fill = moderator + fuel_univ = openmc.Universe(universe_id=11) + fuel_univ.add_cells((c11, c12)) + + lat = openmc.RectLattice(lattice_id=101) + lat.dimension = [2, 2] + lat.lower_left = [-2.0, -2.0] + lat.pitch = [2.0, 2.0] + lat.universes = [[fuel_univ]*2]*2 + lat.outer = mod_univ + + x0 = openmc.XPlane(x0=-3.0) + x1 = openmc.XPlane(x0=3.0) + y0 = openmc.YPlane(y0=-3.0) + y1 = openmc.YPlane(y0=3.0) + for s in [x0, x1, y0, y1]: + s.boundary_type = 'reflective' + c101 = openmc.Cell(cell_id=101) + c101.region = +x0 & -x1 & +y0 & -y1 + c101.fill = lat + root_univ = openmc.Universe(universe_id=0) + root_univ.add_cell(c101) + + geometry = openmc.Geometry() + geometry.root_universe = root_univ + geo_file = openmc.GeometryFile() + geo_file.geometry = geometry + geo_file.export_to_xml() + + + #################### + # Settings + #################### + + sets_file = openmc.SettingsFile() + sets_file.batches = 5 + sets_file.inactive = 0 + sets_file.particles = 1000 + sets_file.set_source_space('box', [-1, -1, -1, 1, 1, 1]) + #sets_file.output = {'summary': True} + sets_file.export_to_xml() + + +# #################### +# # Plots +# #################### +# +# plots_file = openmc.PlotsFile() +# +# plot = openmc.Plot(plot_id=1) +# plot.basis = 'xy' +# plot.color = 'cell' +# plot.filename = 'cellplot' +# plot.origin = (0, 0, 0) +# plot.width = (7, 7) +# plot.pixels = (400, 400) +# plots_file.add_plot(plot) +# +# plot = openmc.Plot(plot_id=2) +# plot.basis = 'xy' +# plot.color = 'mat' +# plot.filename = 'matplot' +# plot.origin = (0, 0, 0) +# plot.width = (7, 7) +# plot.pixels = (400, 400) +# plots_file.add_plot(plot) +# +# plots_file.export_to_xml() + + +if __name__ == '__main__': + harness = DistribmatTestHarness('statepoint.5.*') + harness.main() From acb48218b523542a245aeadf056fd292a9311ead Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sat, 9 Jan 2016 21:07:30 -0500 Subject: [PATCH 125/650] Use super() in testing_harness.py --- tests/testing_harness.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/testing_harness.py b/tests/testing_harness.py index ed89f76946..55b8ddb08b 100644 --- a/tests/testing_harness.py +++ b/tests/testing_harness.py @@ -152,7 +152,7 @@ class HashedTestHarness(TestHarness): """Specialized TestHarness that hashes the results.""" def _get_results(self): """Digest info in the statepoint and return as a string.""" - return TestHarness._get_results(self, True) + return super(HashedTestHarness, self)._get_results(True) class PlotTestHarness(TestHarness): @@ -174,7 +174,7 @@ class PlotTestHarness(TestHarness): 'Plot output file does not exist.' def _cleanup(self): - TestHarness._cleanup(self) + super(PlotTestHarness, self)._cleanup() output = glob.glob(os.path.join(os.getcwd(), '*.ppm')) for f in output: if os.path.exists(f): @@ -208,7 +208,7 @@ class CMFDTestHarness(TestHarness): sp = StatePoint(statepoint) # Write out the eigenvalue and tallies. - outstr = TestHarness._get_results(self) + outstr = super(CMFDTestHarness, self)._get_results() # Write out CMFD data. outstr += 'cmfd indices\n' @@ -274,7 +274,7 @@ class ParticleRestartTestHarness(TestHarness): class PyAPITestHarness(TestHarness): def __init__(self, statepoint_name, tallies_present=False): - TestHarness.__init__(self, statepoint_name, tallies_present) + super(PyAPITestHarness, self).__init__(statepoint_name, tallies_present) self._input_set = InputSet() def execute_test(self): @@ -315,7 +315,8 @@ class PyAPITestHarness(TestHarness): def _get_inputs(self): """Return a hash digest of the input XML files.""" - xmls = ('geometry.xml', 'tallies.xml', 'materials.xml', 'settings.xml') + xmls = ('geometry.xml', 'tallies.xml', 'materials.xml', 'settings.xml', + 'plots.xml') xmls = [os.path.join(os.getcwd(), fname) for fname in xmls] outstr = '\n'.join([open(fname).read() for fname in xmls if os.path.exists(fname)]) @@ -347,7 +348,7 @@ class PyAPITestHarness(TestHarness): def _cleanup(self): """Delete XMLs, statepoints, tally, and test files.""" - TestHarness._cleanup(self) + super(PyAPITestHarness, self)._cleanup() output = [os.path.join(os.getcwd(), 'materials.xml')] output.append(os.path.join(os.getcwd(), 'geometry.xml')) output.append(os.path.join(os.getcwd(), 'settings.xml')) From c0031d105552051b28d4f06d6be5703e8d175a9e Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sat, 9 Jan 2016 21:32:55 -0500 Subject: [PATCH 126/650] Add --build-inputs option to PyAPITestHarness --- .gitignore | 5 +-- .../test_filter_distribcell.py | 5 +-- .../test_statepoint_batch.py | 5 +-- .../test_statepoint_interval.py | 5 +-- tests/testing_harness.py | 32 ++++++++++++------- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/.gitignore b/.gitignore index 3260cb4946..85ba2945a4 100644 --- a/.gitignore +++ b/.gitignore @@ -15,8 +15,9 @@ openmc.egg-info/ # Inputs generated from Python API examples/python/**/*.xml -# emacs backups +# emacs and vim backups *~ +*.swp # OpenMC statepoints *.binary @@ -74,4 +75,4 @@ docs/source/pythonapi/examples/*.xls docs/source/pythonapi/examples/mgxs docs/source/pythonapi/examples/tracks docs/source/pythonapi/examples/fission-rates -docs/source/pythonapi/examples/plots \ No newline at end of file +docs/source/pythonapi/examples/plots diff --git a/tests/test_filter_distribcell/test_filter_distribcell.py b/tests/test_filter_distribcell/test_filter_distribcell.py index 872d29552b..3a145832cc 100644 --- a/tests/test_filter_distribcell/test_filter_distribcell.py +++ b/tests/test_filter_distribcell/test_filter_distribcell.py @@ -10,10 +10,7 @@ from testing_harness import * class DistribcellTestHarness(TestHarness): def __init__(self): - self._sp_name = None - self._tallies = True - self._opts = None - self._args = None + super(DistribcellTestHarness, self).__init__(None, True) def execute_test(self): """Run OpenMC with the appropriate arguments and check the outputs.""" diff --git a/tests/test_statepoint_batch/test_statepoint_batch.py b/tests/test_statepoint_batch/test_statepoint_batch.py index e1dc167ffd..c8da1c9adc 100644 --- a/tests/test_statepoint_batch/test_statepoint_batch.py +++ b/tests/test_statepoint_batch/test_statepoint_batch.py @@ -8,10 +8,7 @@ from testing_harness import TestHarness class StatepointTestHarness(TestHarness): def __init__(self): - self._sp_name = None - self._tallies = False - self._opts = None - self._args = None + super(StatepointTestHarness, self).__init__(None, False) def _test_output_created(self): """Make sure statepoint files have been created.""" diff --git a/tests/test_statepoint_interval/test_statepoint_interval.py b/tests/test_statepoint_interval/test_statepoint_interval.py index e7a42cdbe7..004a830808 100644 --- a/tests/test_statepoint_interval/test_statepoint_interval.py +++ b/tests/test_statepoint_interval/test_statepoint_interval.py @@ -8,10 +8,7 @@ from testing_harness import TestHarness class StatepointTestHarness(TestHarness): def __init__(self): - self._sp_name = None - self._tallies = False - self._opts = None - self._args = None + super(StatepointTestHarness, self).__init__(None, False) def _test_output_created(self): """Make sure statepoint files have been created.""" diff --git a/tests/testing_harness.py b/tests/testing_harness.py index 55b8ddb08b..f1d72dd81c 100644 --- a/tests/testing_harness.py +++ b/tests/testing_harness.py @@ -23,12 +23,18 @@ class TestHarness(object): def __init__(self, statepoint_name, tallies_present=False): self._sp_name = statepoint_name self._tallies = tallies_present + self.parser = OptionParser() + self.parser.add_option('--exe', dest='exe', default='openmc') + self.parser.add_option('--mpi_exec', dest='mpi_exec', default=None) + self.parser.add_option('--mpi_np', dest='mpi_np', type=int, default=3) + self.parser.add_option('--update', dest='update', action='store_true', + default=False) self._opts = None self._args = None def main(self): """Accept commandline arguments and either run or update tests.""" - self._parse_args() + (self._opts, self._args) = self.parser.parse_args() if self._opts.update: self.update_results() else: @@ -56,15 +62,6 @@ class TestHarness(object): finally: self._cleanup() - def _parse_args(self): - parser = OptionParser() - parser.add_option('--exe', dest='exe', default='openmc') - parser.add_option('--mpi_exec', dest='mpi_exec', default=None) - parser.add_option('--mpi_np', dest='mpi_np', type=int, default=3) - parser.add_option('--update', dest='update', action='store_true', - default=False) - (self._opts, self._args) = parser.parse_args() - def _run_openmc(self): executor = Executor() @@ -158,9 +155,8 @@ class HashedTestHarness(TestHarness): class PlotTestHarness(TestHarness): """Specialized TestHarness for running OpenMC plotting tests.""" def __init__(self, plot_names): + super(PlotTestHarness, self).__init__(None, False) self._plot_names = plot_names - self._opts = None - self._args = None def _run_openmc(self): executor = Executor() @@ -275,8 +271,20 @@ class ParticleRestartTestHarness(TestHarness): class PyAPITestHarness(TestHarness): def __init__(self, statepoint_name, tallies_present=False): super(PyAPITestHarness, self).__init__(statepoint_name, tallies_present) + self.parser.add_option('--build-inputs', dest='build_only', + action='store_true', default=False) self._input_set = InputSet() + def main(self): + """Accept commandline arguments and either run or update tests.""" + (self._opts, self._args) = self.parser.parse_args() + if self._opts.build_only: + self._build_inputs() + elif self._opts.update: + self.update_results() + else: + self.execute_test() + def execute_test(self): """Build input XMLs, run OpenMC, and verify correct results.""" try: From d5d486536bc7be21b40b782714b97c330d0819f2 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sat, 9 Jan 2016 23:02:29 -0500 Subject: [PATCH 127/650] Update summary.h5 files for distribmat --- openmc/summary.py | 11 ++++++++--- src/initialize.F90 | 2 +- src/summary.F90 | 13 ++++++++++--- tests/test_distribmat/inputs_true.dat | 2 +- tests/test_distribmat/results_true.dat | 9 +++++++++ tests/test_distribmat/test_distribmat.py | 11 ++++++++++- 6 files changed, 39 insertions(+), 9 deletions(-) diff --git a/openmc/summary.py b/openmc/summary.py index 46fec01d50..ad1dd67cae 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -1,3 +1,4 @@ +from collections import Iterable import numpy as np import re @@ -477,10 +478,14 @@ class Summary(object): # Retrieve the object corresponding to the fill type and ID if fill_type == 'normal': - if fill_id > 0: - fill = self.get_material_by_id(fill_id) + if isinstance(fill_id, Iterable): + fill = [self.get_material_by_id(mat) if mat > 0 else 'void' + for mat in fill_id] else: - fill = 'void' + if fill_id > 0: + fill = self.get_material_by_id(fill_id) + else: + fill = 'void' elif fill_type == 'universe': fill = self.get_universe_by_id(fill_id) else: diff --git a/src/initialize.F90 b/src/initialize.F90 index 7457be90d8..2c44755d20 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -1038,7 +1038,7 @@ contains integer, intent(out), allocatable :: counts(:,:) ! Target count logical, intent(out), allocatable :: found(:,:) ! Target found - integer :: i, j, k, l, m ! Loop counters + integer :: i, j, k ! Loop counters type(SetInt) :: cell_list ! distribells to track type(Universe), pointer :: univ ! pointer to universe class(Lattice), pointer :: lat ! pointer to lattice diff --git a/src/summary.F90 b/src/summary.F90 index 3fcc3e5c91..deccaddf59 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -107,6 +107,7 @@ contains integer :: i, j, k, m integer, allocatable :: lattice_universes(:,:,:) + integer, allocatable :: cell_materials(:) integer(HID_T) :: geom_group integer(HID_T) :: cells_group, cell_group integer(HID_T) :: surfaces_group, surface_group @@ -150,10 +151,16 @@ contains select case (c%type) case (CELL_NORMAL) call write_dataset(cell_group, "fill_type", "normal") - if (c%material(1) == MATERIAL_VOID) then - call write_dataset(cell_group, "material", -1) + if (size(c % material) == 1) then + call write_dataset(cell_group, "material", & + materials(c % material(1)) % id) else - call write_dataset(cell_group, "material", materials(c%material(1))%id) + allocate(cell_materials(size(c % material))) + do j = 1, size(c % material) + cell_materials(j) = materials(c % material(j)) % id + end do + call write_dataset(cell_group, "material", cell_materials) + deallocate(cell_materials) end if case (CELL_FILL) diff --git a/tests/test_distribmat/inputs_true.dat b/tests/test_distribmat/inputs_true.dat index 72d296c9b1..48044e2872 100644 --- a/tests/test_distribmat/inputs_true.dat +++ b/tests/test_distribmat/inputs_true.dat @@ -1 +1 @@ -dcb9a612432305763ad10aaaab3ed095716cbb73f6b357ec180d300ccf365f9781aac7b1f3228c8756ceccf6aa230d0e03cf18ef2c0bc21fba1f082c3d5d6896 \ No newline at end of file +24a3537446feafcf79fc84d268b43130e9521ad7cccfcf733ba35ca50bf3c644e0b8e91bfdef7bdb4073783197cfdd730d1e459fc622aa3ce6dcf3143c805a1f \ No newline at end of file diff --git a/tests/test_distribmat/results_true.dat b/tests/test_distribmat/results_true.dat index 9481371d85..5e93e4e473 100644 --- a/tests/test_distribmat/results_true.dat +++ b/tests/test_distribmat/results_true.dat @@ -1,2 +1,11 @@ k-combined: 1.433669E+00 7.069157E-03 +Cell + ID = 11 + Name = + Material = [2, 3, 2, 2] + Region = -10000 + Rotation = None + Translation = None + Offset = None + Distribcell index= 1 diff --git a/tests/test_distribmat/test_distribmat.py b/tests/test_distribmat/test_distribmat.py index b6bffd90d9..61e40e64c6 100644 --- a/tests/test_distribmat/test_distribmat.py +++ b/tests/test_distribmat/test_distribmat.py @@ -86,7 +86,7 @@ class DistribmatTestHarness(PyAPITestHarness): sets_file.inactive = 0 sets_file.particles = 1000 sets_file.set_source_space('box', [-1, -1, -1, 1, 1, 1]) - #sets_file.output = {'summary': True} + sets_file.output = {'summary': True} sets_file.export_to_xml() @@ -116,6 +116,15 @@ class DistribmatTestHarness(PyAPITestHarness): # # plots_file.export_to_xml() + def _get_results(self): + outstr = super(DistribmatTestHarness, self)._get_results() + su = openmc.Summary('summary.h5') + outstr += str(su.get_cell_by_id(11)) + return outstr + +# def _cleanup(self): +# return None + if __name__ == '__main__': harness = DistribmatTestHarness('statepoint.5.*') From e2a8b96cfdf0a4bb218c9a7eecc32490cb679074 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sat, 9 Jan 2016 23:34:28 -0500 Subject: [PATCH 128/650] Update docs for distribmat --- docs/source/usersguide/input.rst | 4 +++- docs/source/usersguide/output/summary.rst | 8 +++++--- src/relaxng/geometry.rnc | 4 ++-- src/relaxng/geometry.rng | 20 ++++++++++++-------- 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index fa43ca1d2c..c4538b889f 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -891,7 +891,9 @@ Each ```` element can have the following attributes or sub-elements: :material: The ``id`` of the material that this cell contains. If the cell should - contain no material, this can also be set to "void". + contain no material, this can also be set to "void". A list of materials + can be specified for the "distributed material" feature. This will give each + unique instance of the cell its own material. .. note:: If a material is specified, no fill should be given. diff --git a/docs/source/usersguide/output/summary.rst b/docs/source/usersguide/output/summary.rst index 66a5cad154..d100fab3bf 100644 --- a/docs/source/usersguide/output/summary.rst +++ b/docs/source/usersguide/output/summary.rst @@ -91,10 +91,12 @@ The current revision of the summary file format is 1. Type of fill for the cell. Can be 'normal', 'universe', or 'lattice'. -**/geometry/cells/cell /material** (*int*) +**/geometry/cells/cell /material** (*int* or *int[]*) - Unique ID of the material assigned to the cell. This dataset is present only - if fill_type is set to 'normal'. + Unique ID of the material(s) assigned to the cell. This dataset is present + only if fill_type is set to 'normal'. The data is an array if the cell uses + distributed materials, otherwise it is a scalar. The value '-1' signifies + void material. **/geometry/cells/cell /offset** (*int[]*) diff --git a/src/relaxng/geometry.rnc b/src/relaxng/geometry.rnc index 2a8d07b8c0..8d25789f5a 100644 --- a/src/relaxng/geometry.rnc +++ b/src/relaxng/geometry.rnc @@ -6,8 +6,8 @@ element geometry { (element universe { xsd:int } | attribute universe { xsd:int })? & ( (element fill { xsd:int } | attribute fill { xsd:int }) | - (element material { ( xsd:int | "void" ) } | - attribute material { ( xsd:int | "void" ) }) + (element material { ( xsd:int | "void" )+ } | + attribute material { ( xsd:int | "void" )+ }) ) & (element region { xsd:string } | attribute region { xsd:string })? & (element rotation { list { xsd:double+ } } | attribute rotation { list { xsd:double+ } })? & diff --git a/src/relaxng/geometry.rng b/src/relaxng/geometry.rng index fcb310d0b3..d40401b281 100644 --- a/src/relaxng/geometry.rng +++ b/src/relaxng/geometry.rng @@ -47,16 +47,20 @@ - - - void - + + + + void + + - - - void - + + + + void + + From 95057442914b2d36d87809dd23e55c724cd44fc6 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sat, 9 Jan 2016 23:44:26 -0500 Subject: [PATCH 129/650] Fix void distribmats --- openmc/universe.py | 13 +++++++++---- src/summary.F90 | 14 +++++++++++--- tests/test_distribmat/inputs_true.dat | 2 +- tests/test_distribmat/results_true.dat | 4 ++-- tests/test_distribmat/test_distribmat.py | 5 +---- 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/openmc/universe.py b/openmc/universe.py index 2fa535265c..048b6a0e9f 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -113,8 +113,11 @@ class Cell(object): string += '{0: <16}{1}{2}\n'.format('\tMaterial', '=\t', self._fill._id) elif isinstance(self._fill, Iterable): - string += ('{0: <16}{1}'.format('\tMaterial', '=\t') - + '[' + ', '.join([str(m.id) for m in self.fill]) + ']\n') + string += '{0: <16}{1}'.format('\tMaterial', '=\t') + string += '[' + string += ', '.join(['void' if m == 'void' else str(m.id) + for m in self.fill]) + string += ']\n' elif isinstance(self._fill, (Universe, Lattice)): string += '{0: <16}{1}{2}\n'.format('\tFill', '=\t', self._fill._id) @@ -209,7 +212,8 @@ class Cell(object): self._type = 'normal' elif isinstance(fill, Iterable): - cv.check_type('cell.fill', fill, Iterable, openmc.Material) + cv.check_type('cell.fill', fill, Iterable, + (openmc.Material, basestring)) self._type = 'normal' elif isinstance(fill, Universe): @@ -402,7 +406,8 @@ class Cell(object): element.set("material", str(self._fill._id)) elif isinstance(self._fill, Iterable): - element.set("material", ' '.join([str(m.id) for m in self.fill])) + element.set("material", ' '.join([m if m == 'void' else str(m.id) + for m in self.fill])) elif isinstance(self._fill, (Universe, Lattice)): element.set("fill", str(self._fill._id)) diff --git a/src/summary.F90 b/src/summary.F90 index deccaddf59..c06d2549c2 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -152,12 +152,20 @@ contains case (CELL_NORMAL) call write_dataset(cell_group, "fill_type", "normal") if (size(c % material) == 1) then - call write_dataset(cell_group, "material", & - materials(c % material(1)) % id) + if (c % material(1) == MATERIAL_VOID) then + call write_dataset(cell_group, "material", MATERIAL_VOID) + else + call write_dataset(cell_group, "material", & + materials(c % material(1)) % id) + end if else allocate(cell_materials(size(c % material))) do j = 1, size(c % material) - cell_materials(j) = materials(c % material(j)) % id + if (c % material(j) == MATERIAL_VOID) then + cell_materials(j) = MATERIAL_VOID + else + cell_materials(j) = materials(c % material(j)) % id + end if end do call write_dataset(cell_group, "material", cell_materials) deallocate(cell_materials) diff --git a/tests/test_distribmat/inputs_true.dat b/tests/test_distribmat/inputs_true.dat index 48044e2872..0fb8cc8bf8 100644 --- a/tests/test_distribmat/inputs_true.dat +++ b/tests/test_distribmat/inputs_true.dat @@ -1 +1 @@ -24a3537446feafcf79fc84d268b43130e9521ad7cccfcf733ba35ca50bf3c644e0b8e91bfdef7bdb4073783197cfdd730d1e459fc622aa3ce6dcf3143c805a1f \ No newline at end of file +bdc2acd3a4f5078c61d7cb83ff30e07b76c89b21d8131c1b0ce86a43156da7bd0b9ebb5d6acc0b98a7d8128667f99403ef12a6d76ed2ec6cb187810222e4f6b3 \ No newline at end of file diff --git a/tests/test_distribmat/results_true.dat b/tests/test_distribmat/results_true.dat index 5e93e4e473..70464fbc6c 100644 --- a/tests/test_distribmat/results_true.dat +++ b/tests/test_distribmat/results_true.dat @@ -1,9 +1,9 @@ k-combined: -1.433669E+00 7.069157E-03 +1.309285E+00 1.263629E-02 Cell ID = 11 Name = - Material = [2, 3, 2, 2] + Material = [2, 3, void, 2] Region = -10000 Rotation = None Translation = None diff --git a/tests/test_distribmat/test_distribmat.py b/tests/test_distribmat/test_distribmat.py index 61e40e64c6..f0d09e963a 100644 --- a/tests/test_distribmat/test_distribmat.py +++ b/tests/test_distribmat/test_distribmat.py @@ -44,7 +44,7 @@ class DistribmatTestHarness(PyAPITestHarness): r0 = openmc.ZCylinder(R=0.3) c11 = openmc.Cell(cell_id=11) c11.region = -r0 - c11.fill = [dense_fuel, light_fuel] + [dense_fuel]*2 + c11.fill = [dense_fuel, light_fuel, 'void', dense_fuel] c12 = openmc.Cell(cell_id=12) c12.region = +r0 c12.fill = moderator @@ -122,9 +122,6 @@ class DistribmatTestHarness(PyAPITestHarness): outstr += str(su.get_cell_by_id(11)) return outstr -# def _cleanup(self): -# return None - if __name__ == '__main__': harness = DistribmatTestHarness('statepoint.5.*') From d0a0dda0b50cd7b13506e4e9b6663ea3a3c07de8 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sun, 10 Jan 2016 00:26:14 -0500 Subject: [PATCH 130/650] Check number of distributed materials --- src/initialize.F90 | 74 +++++++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 33 deletions(-) diff --git a/src/initialize.F90 b/src/initialize.F90 index 2c44755d20..5637585ae4 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -946,7 +946,6 @@ contains subroutine prepare_distribcell() integer :: i, j ! Tally, filter loop counters - integer :: n_filt ! Number of filters originally in tally logical :: count_all ! Count all cells type(TallyObject), pointer :: t ! Current tally type(Universe), pointer :: univ ! Pointer to universe @@ -955,58 +954,67 @@ contains integer, allocatable :: counts(:,:) ! Target count logical, allocatable :: found(:,:) ! Target found + ! Do we need to count cell instances? count_all = .false. - ! Loop over tallies + ! We need to count instances if any distribcell filters are present. do i = 1, n_tallies - - ! Get pointer to tally - t => tallies(i) - - n_filt = t%n_filters - - ! Loop over the filters to determine how many additional filters - ! need to be added to this tally - do j = 1, t%n_filters - - ! Determine type of filter - if (t%filters(j)%type == FILTER_DISTRIBCELL) then + do j = 1, tallies(i) % n_filters + if (tallies(i) % filters(j) % type == FILTER_DISTRIBCELL) then count_all = .true. - if (size(t%filters(j)%int_bins) > 1) then + if (size(tallies(i) % filters(j) %int_bins) > 1) then call fatal_error("A distribcell filter was specified with & &multiple bins. This feature is not supported.") end if end if - end do - end do + ! We also need to count instnaces if any distributed materials are present. + if (.not. count_all) then + do i = 1, n_cells + if (size(cells(i) % material) > 1) then + count_all = .true. + exit + end if + end do + end if + + ! Count the number of instances of each cell. if (count_all) then + call count_instance(universes(BASE_UNIVERSE)) + end if - univ => universes(BASE_UNIVERSE) - - ! sum the number of occurrences of all cells - call count_instance(univ) - - ! Loop over tallies + ! Set the number of bins in all distribcell filters. + if (count_all) then do i = 1, n_tallies - - ! Get pointer to tally t => tallies(i) - - ! Initialize the filters do j = 1, t%n_filters - - ! Set the number of bins to the number of instances of the cell - if (t%filters(j)%type == FILTER_DISTRIBCELL) then - c => cells(t%filters(j)%int_bins(1)) - t%filters(j)%n_bins = c%instances + if (t % filters(j) % type == FILTER_DISTRIBCELL) then + ! Set the number of bins to the number of instances of the cell + c => cells(t % filters(j) % int_bins(1)) + t % filters(j) % n_bins = c % instances end if - end do end do + end if + ! Make sure the number of materials matches the number of cell instances for + ! distributed materials + if (count_all) then + do i = 1, n_cells + associate (c => cells(i)) + if (size(c % material) > 1) then + if (size(c % material) /= c % instances) then + call fatal_error("Cell " // trim(to_str(c % id)) // " was & + &specified with " // trim(to_str(size(c % material))) & + // " materials but has " // trim(to_str(c % instances)) & + // " distributed instances. The number of materials must & + &equal one or the number of instances.") + end if + end if + end associate + end do end if ! Allocate offset maps at each level in the geometry From 255c4f1e7f554fc50ac148dd74ee477c5ce7b28a Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Mon, 11 Jan 2016 12:33:00 -0500 Subject: [PATCH 131/650] Fixed tally summation for distribcell tallies --- openmc/tallies.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index 7ec1ca50cb..b66c710965 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -2605,7 +2605,7 @@ class Tally(object): parameter (e.g., [(1,), (0., 0.625e-6)]; default is []). Each bin in the list is the integer ID for 'material', 'surface', 'cell', 'cellborn', and 'universe' Filters. Each bin is an integer for the - cell instance ID for 'distribcell Filters. Each bin is a 2-tuple of + cell instance ID for 'distribcell' Filters. Each bin is a 2-tuple of floats for 'energy' and 'energyout' filters corresponding to the energy boundaries of the bin of interest. The bin is a (x,y,z) 3-tuple for 'mesh' filters corresponding to the mesh cell of @@ -2691,19 +2691,22 @@ class Tally(object): # Remove and/or reorder filter bins to user specifications bin_indices = [] + num_bins = 0 for filter_bin in filter_bins[i]: bin_index = filter.get_bin_index(filter_bin) if filter_type in ['energy', 'energyout']: bin_indices.extend([bin_index, bin_index+1]) + num_bins += 1 elif filter_type == 'distribcell': - indices = [(bin,) for bin in range(filter.num_bins)] - bin_indices.extend(indices) + bin_indices = [0] + num_bins = filter.num_bins else: bin_indices.append(bin_index) + num_bins += 1 filter.bins = filter.bins[bin_indices] - filter.num_bins = len(filter_bins[i]) + filter.num_bins = num_bins # Correct each Filter's stride stride = new_tally.num_nuclides * new_tally.num_scores @@ -2737,7 +2740,7 @@ class Tally(object): A list of the filter bins corresponding to the filter_type parameter Each bin in the list is the integer ID for 'material', 'surface', 'cell', 'cellborn', and 'universe' Filters. Each bin is an integer - for the cell instance ID for 'distribcell Filters. Each bin is a + for the cell instance ID for 'distribcell' Filters. Each bin is a 2-tuple of floats for 'energy' and 'energyout' filters corresponding to the energy boundaries of the bin of interest. Each bin is an (x,y,z) 3-tuple for 'mesh' filters corresponding to the mesh cell of @@ -2775,7 +2778,11 @@ class Tally(object): # If user did not specify filter bins, sum across all bins if len(filter_bins) == 0: filter = self.find_filter(filter_type) - filter_bins = [[(filter.get_bin(i),)] for i in range(filter.num_bins)] + if filter.type == 'distribcell': + filter_bins = [[(i,)] for i in range(filter.num_bins)] + else: + filter_bins = \ + [[(filter.get_bin(i),)] for i in range(filter.num_bins)] else: filter_bins = [[(filter_bin,)] for filter_bin in filter_bins] From a5dc14a33bbf9953b496c7108ef8088e6870d549 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Mon, 11 Jan 2016 13:26:23 -0500 Subject: [PATCH 132/650] Replace 'count_all' with 'distribcell_active' --- docs/source/usersguide/output/summary.rst | 6 +- openmc/universe.py | 2 +- src/initialize.F90 | 73 +++++++++++------------ 3 files changed, 39 insertions(+), 42 deletions(-) diff --git a/docs/source/usersguide/output/summary.rst b/docs/source/usersguide/output/summary.rst index d100fab3bf..83602e5065 100644 --- a/docs/source/usersguide/output/summary.rst +++ b/docs/source/usersguide/output/summary.rst @@ -94,9 +94,9 @@ The current revision of the summary file format is 1. **/geometry/cells/cell /material** (*int* or *int[]*) Unique ID of the material(s) assigned to the cell. This dataset is present - only if fill_type is set to 'normal'. The data is an array if the cell uses - distributed materials, otherwise it is a scalar. The value '-1' signifies - void material. + only if fill_type is set to 'normal'. The value '-1' signifies void + material. The data is an array if the cell uses distributed materials, + otherwise it is a scalar. **/geometry/cells/cell /offset** (*int[]*) diff --git a/openmc/universe.py b/openmc/universe.py index 048b6a0e9f..ccd0cb27c3 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -50,7 +50,7 @@ class Cell(object): Unique identifier for the cell name : str Name of the cell - fill : Materials or Universe or Lattice or 'void' + fill : Material or Universe or Lattice or 'void' or iterable of Material Indicates what the region of space is filled with region : openmc.region.Region Region of space that is assigned to the cell. diff --git a/src/initialize.F90 b/src/initialize.F90 index 5637585ae4..cfbee78915 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -945,8 +945,8 @@ contains subroutine prepare_distribcell() - integer :: i, j ! Tally, filter loop counters - logical :: count_all ! Count all cells + integer :: i, j ! Tally, filter loop counters + logical :: distribcell_active ! Does simulation use distribcell? type(TallyObject), pointer :: t ! Current tally type(Universe), pointer :: univ ! Pointer to universe type(Cell), pointer :: c ! Pointer to cell @@ -954,14 +954,14 @@ contains integer, allocatable :: counts(:,:) ! Target count logical, allocatable :: found(:,:) ! Target found - ! Do we need to count cell instances? - count_all = .false. + ! Assume distribcell is not needed until proven otherwise. + distribcell_active = .false. - ! We need to count instances if any distribcell filters are present. + ! We need distribcell if any tallies have distribcell filters. do i = 1, n_tallies do j = 1, tallies(i) % n_filters if (tallies(i) % filters(j) % type == FILTER_DISTRIBCELL) then - count_all = .true. + distribcell_active = .true. if (size(tallies(i) % filters(j) %int_bins) > 1) then call fatal_error("A distribcell filter was specified with & &multiple bins. This feature is not supported.") @@ -970,52 +970,49 @@ contains end do end do - ! We also need to count instnaces if any distributed materials are present. - if (.not. count_all) then + ! We also need distribcell if any distributed materials are present. + if (.not. distribcell_active) then do i = 1, n_cells if (size(cells(i) % material) > 1) then - count_all = .true. + distribcell_active = .true. exit end if end do end if + ! If distribcell isn't used in this simulation then no more work left to do. + if (.not. distribcell_active) return + ! Count the number of instances of each cell. - if (count_all) then - call count_instance(universes(BASE_UNIVERSE)) - end if + call count_instance(universes(BASE_UNIVERSE)) ! Set the number of bins in all distribcell filters. - if (count_all) then - do i = 1, n_tallies - t => tallies(i) - do j = 1, t%n_filters - if (t % filters(j) % type == FILTER_DISTRIBCELL) then - ! Set the number of bins to the number of instances of the cell - c => cells(t % filters(j) % int_bins(1)) - t % filters(j) % n_bins = c % instances - end if - end do + do i = 1, n_tallies + t => tallies(i) + do j = 1, t%n_filters + if (t % filters(j) % type == FILTER_DISTRIBCELL) then + ! Set the number of bins to the number of instances of the cell + c => cells(t % filters(j) % int_bins(1)) + t % filters(j) % n_bins = c % instances + end if end do - end if + end do ! Make sure the number of materials matches the number of cell instances for - ! distributed materials - if (count_all) then - do i = 1, n_cells - associate (c => cells(i)) - if (size(c % material) > 1) then - if (size(c % material) /= c % instances) then - call fatal_error("Cell " // trim(to_str(c % id)) // " was & - &specified with " // trim(to_str(size(c % material))) & - // " materials but has " // trim(to_str(c % instances)) & - // " distributed instances. The number of materials must & - &equal one or the number of instances.") - end if + ! distributed materials. + do i = 1, n_cells + associate (c => cells(i)) + if (size(c % material) > 1) then + if (size(c % material) /= c % instances) then + call fatal_error("Cell " // trim(to_str(c % id)) // " was & + &specified with " // trim(to_str(size(c % material))) & + // " materials but has " // trim(to_str(c % instances)) & + // " distributed instances. The number of materials must & + &equal one or the number of instances.") end if - end associate - end do - end if + end if + end associate + end do ! Allocate offset maps at each level in the geometry call allocate_offsets(univ_list, counts, found) From 2ea4deb2882893f8a573811b1c4efc23cb22c9a5 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Mon, 11 Jan 2016 13:34:52 -0500 Subject: [PATCH 133/650] More prepare_distribcell clean-up --- src/initialize.F90 | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/src/initialize.F90 b/src/initialize.F90 index cfbee78915..c5bfe22e7c 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -947,9 +947,6 @@ contains integer :: i, j ! Tally, filter loop counters logical :: distribcell_active ! Does simulation use distribcell? - type(TallyObject), pointer :: t ! Current tally - type(Universe), pointer :: univ ! Pointer to universe - type(Cell), pointer :: c ! Pointer to cell integer, allocatable :: univ_list(:) ! Target offsets integer, allocatable :: counts(:,:) ! Target count logical, allocatable :: found(:,:) ! Target found @@ -988,13 +985,13 @@ contains ! Set the number of bins in all distribcell filters. do i = 1, n_tallies - t => tallies(i) - do j = 1, t%n_filters - if (t % filters(j) % type == FILTER_DISTRIBCELL) then - ! Set the number of bins to the number of instances of the cell - c => cells(t % filters(j) % int_bins(1)) - t % filters(j) % n_bins = c % instances - end if + do j = 1, tallies(i) % n_filters + associate (filt => tallies(i) % filters(j)) + if (filt % type == FILTER_DISTRIBCELL) then + ! Set the number of bins to the number of instances of the cell. + filt % n_bins = cells(filt % int_bins(1)) % instances + end if + end associate end do end do @@ -1020,16 +1017,10 @@ contains ! Calculate offsets for each target distribcell do i = 1, n_maps do j = 1, n_universes - univ => universes(j) - call calc_offsets(univ_list(i), i, univ, counts, found) + call calc_offsets(univ_list(i), i, universes(j), counts, found) end do end do - ! Deallocate temporary target variable arrays - deallocate(counts) - deallocate(found) - deallocate(univ_list) - end subroutine prepare_distribcell !=============================================================================== From f56f613593e7f0dee3ab80b609501580ea9ed7b4 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Mon, 11 Jan 2016 13:57:18 -0500 Subject: [PATCH 134/650] Clean-up allocate offsets --- src/initialize.F90 | 70 ++++++++++++++++++---------------------------- 1 file changed, 27 insertions(+), 43 deletions(-) diff --git a/src/initialize.F90 b/src/initialize.F90 index c5bfe22e7c..b7e3417856 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -1034,47 +1034,33 @@ contains integer, intent(out), allocatable :: counts(:,:) ! Target count logical, intent(out), allocatable :: found(:,:) ! Target found - integer :: i, j, k ! Loop counters - type(SetInt) :: cell_list ! distribells to track - type(Universe), pointer :: univ ! pointer to universe - class(Lattice), pointer :: lat ! pointer to lattice - type(TallyObject), pointer :: t ! pointer to tally - type(TallyFilter), pointer :: filter ! pointer to filter - type(Cell), pointer :: c ! pointer to cell + integer :: i, j, k ! Loop counters + type(SetInt) :: cell_list ! distribells to track ! Begin gathering list of cells in distribcell tallies n_maps = 0 ! List all cells referenced in distribcell filters. do i = 1, n_tallies - t => tallies(i) - - do j = 1, t % n_filters - filter => t % filters(j) - - if (filter % type == FILTER_DISTRIBCELL) then - if (.not. cell_list % contains(filter % int_bins(1))) then - call cell_list % add(filter % int_bins(1)) - end if + do j = 1, tallies(i) % n_filters + if (tallies(i) % filters(j) % type == FILTER_DISTRIBCELL) then + call cell_list % add(tallies(i) % filters(j) % int_bins(1)) end if - end do end do ! List all cells with multiple (distributed) materials. do i = 1, n_cells - c => cells(i) - if (size(c % material) > 1) then - if (.not. cell_list % contains(i)) call cell_list % add(i) + if (size(cells(i) % material) > 1) then + call cell_list % add(i) end if end do ! Compute the number of unique universes containing these distribcells ! to determine the number of offset tables to allocate do i = 1, n_universes - univ => universes(i) - do j = 1, univ % n_cells - if (cell_list % contains(univ % cells(j))) then + do j = 1, universes(i) % n_cells + if (cell_list % contains(universes(i) % cells(j))) then n_maps = n_maps + 1 end if end do @@ -1085,22 +1071,21 @@ contains ! Allocate list to accumulate target distribcell counts in each universe allocate(counts(n_universes, n_maps)) + counts(:,:) = 0 ! Allocate list to track if target distribcells are found in each universe allocate(found(n_universes, n_maps)) - - counts(:,:) = 0 found(:,:) = .false. - k = 1 + ! Search through universes for distributed cells and assign each one a ! unique distribcell array index. + k = 1 do i = 1, n_universes - univ => universes(i) - do j = 1, univ % n_cells - if (cell_list % contains(univ % cells(j))) then - cells(univ % cells(j)) % distribcell_index = k - univ_list(k) = univ % id + do j = 1, universes(i) % n_cells + if (cell_list % contains(universes(i) % cells(j))) then + cells(universes(i) % cells(j)) % distribcell_index = k + univ_list(k) = universes(i) % id k = k + 1 end if end do @@ -1108,20 +1093,19 @@ contains ! Allocate the offset tables for lattices do i = 1, n_lattices - lat => lattices(i) % obj + associate(lat => lattices(i) % obj) + select type(lat) - select type(lat) - - type is (RectLattice) - allocate(lat % offset(n_maps, lat % n_cells(1), lat % n_cells(2), & - lat % n_cells(3))) - type is (HexLattice) - allocate(lat % offset(n_maps, 2 * lat % n_rings - 1, & - 2 * lat % n_rings - 1, lat % n_axial)) - end select - - lat % offset(:, :, :, :) = 0 + type is (RectLattice) + allocate(lat % offset(n_maps, lat % n_cells(1), lat % n_cells(2), & + lat % n_cells(3))) + type is (HexLattice) + allocate(lat % offset(n_maps, 2 * lat % n_rings - 1, & + 2 * lat % n_rings - 1, lat % n_axial)) + end select + lat % offset(:, :, :, :) = 0 + end associate end do ! Allocate offset table for fill cells From 0efa01413f3a71b0957cdf979a07332ed5299dd1 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Mon, 11 Jan 2016 16:23:49 -0500 Subject: [PATCH 135/650] Fixed a few bugs with setting of new MGXS reaction rate tally attribute --- openmc/mgxs/mgxs.py | 53 ++++++++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 968504a06d..2e30c58cbf 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -92,6 +92,10 @@ class MGXS(object): xs_tally : Tally Derived tally for the multi-group cross section. This attribute is None unless the multi-group cross section has been computed. + rxn_rate_tally : Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. num_subdomains : Integral The number of subdomains is unity for 'material', 'cell' and 'universe' domain types. When the This is equal to the number of cell instances @@ -124,6 +128,7 @@ class MGXS(object): self._tally_trigger = None self._tallies = None self._xs_tally = None + self._rxn_rate_tally = None self._sparse = False self.name = name @@ -150,6 +155,7 @@ class MGXS(object): clone._energy_groups = copy.deepcopy(self.energy_groups, memo) clone._tally_trigger = copy.deepcopy(self.tally_trigger, memo) clone._xs_tally = copy.deepcopy(self.xs_tally, memo) + clone._rxn_rate_tally = copy.deepcopy(self.rxn_rate_tally, memo) clone._sparse = self.sparse clone._tallies = OrderedDict() @@ -204,6 +210,10 @@ class MGXS(object): def xs_tally(self): return self._xs_tally + @property + def rxn_rate_tally(self): + return self._rxn_rate_tally + @property def sparse(self): return self._sparse @@ -272,9 +282,11 @@ class MGXS(object): cv.check_type('sparse', sparse, bool) - # Sparsify or densify the derived MGXS tally and its base tallies + # Sparsify or densify the derived MGXS tallies and the base tallies if self.xs_tally: self.xs_tally.sparse = sparse + if self.rxn_rate_tally: + self.rxn_rate_tally.sparse = sparse for tally_name in self.tallies: self.tallies[tally_name].sparse = sparse @@ -533,8 +545,8 @@ class MGXS(object): self.xs_tally.add_nuclide(openmc.Nuclide(nuclide)) # Remove NaNs which may have resulted from divide-by-zero operations - self._xs_tally._mean = np.nan_to_num(self.xs_tally.mean) - self._xs_tally._std_dev = np.nan_to_num(self.xs_tally.std_dev) + self.xs_tally._mean = np.nan_to_num(self.xs_tally.mean) + self.xs_tally._std_dev = np.nan_to_num(self.xs_tally.std_dev) self.xs_tally.sparse = self.sparse def load_from_statepoint(self, statepoint): @@ -1350,7 +1362,8 @@ class TotalXS(MGXS): tally arithmetic. """ - self._xs_tally = self.tallies['total'] / self.tallies['flux'] + self._rxn_rate_tally = self.tallies['total'] + self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] super(TotalXS, self).compute_xs() @@ -1401,8 +1414,8 @@ class TransportXS(MGXS): self.tallies['scatter-P1'] = scatter_p1.get_slice(scores=['scatter-P1']) self.tallies['scatter-P1'].filters[-1].type = 'energy' - self._xs_tally = self.tallies['total'] - self.tallies['scatter-P1'] - self._xs_tally /= self.tallies['flux'] + self._rxn_rate_tally = self.tallies['total'] - self.tallies['scatter-P1'] + self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] super(TransportXS, self).compute_xs() @@ -1447,7 +1460,8 @@ class AbsorptionXS(MGXS): """Computes the multi-group absorption cross sections using OpenMC tally arithmetic.""" - self._xs_tally = self.tallies['absorption'] / self.tallies['flux'] + self._rxn_rate_tally = self.tallies['absorption'] + self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] super(AbsorptionXS, self).compute_xs() @@ -1499,8 +1513,8 @@ class CaptureXS(MGXS): """Computes the multi-group capture cross sections using OpenMC tally arithmetic.""" - self._xs_tally = self.tallies['absorption'] - self.tallies['fission'] - self._xs_tally /= self.tallies['flux'] + self._rxn_rate_tally = self.tallies['absorption'] - self.tallies['fission'] + self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] super(CaptureXS, self).compute_xs() @@ -1545,7 +1559,8 @@ class FissionXS(MGXS): """Computes the multi-group fission cross sections using OpenMC tally arithmetic.""" - self._xs_tally = self.tallies['fission'] / self.tallies['flux'] + self._rxn_rate_tally = self.tallies['fission'] + self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] super(FissionXS, self).compute_xs() @@ -1590,7 +1605,8 @@ class NuFissionXS(MGXS): """Computes the multi-group nu-fission cross sections using OpenMC tally arithmetic.""" - self._xs_tally = self.tallies['nu-fission'] / self.tallies['flux'] + self._rxn_rate_tally = self.tallies['nu-fission'] + self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] super(NuFissionXS, self).compute_xs() @@ -1635,7 +1651,8 @@ class ScatterXS(MGXS): """Computes the scattering multi-group cross sections using OpenMC tally arithmetic.""" - self._xs_tally = self.tallies['scatter'] / self.tallies['flux'] + self._rxn_rate_tally = self.tallies['scatter'] + self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] super(ScatterXS, self).compute_xs() @@ -1680,7 +1697,8 @@ class NuScatterXS(MGXS): """Computes the nu-scattering multi-group cross section using OpenMC tally arithmetic.""" - self._xs_tally = self.tallies['nu-scatter'] / self.tallies['flux'] + self._rxn_rate_tally = self.tallies['nu-scatter'] + self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] super(NuScatterXS, self).compute_xs() @@ -1759,11 +1777,11 @@ class ScatterMatrixXS(MGXS): energy_filter = self.tallies['scatter'].find_filter('energy') energy_filter = copy.deepcopy(energy_filter) scatter_p1 = scatter_p1.diagonalize_filter(energy_filter) - rxn_tally = self.tallies['scatter'] - scatter_p1 + self._rxn_rate_tally = self.tallies['scatter'] - scatter_p1 else: - rxn_tally = self.tallies['scatter'] + self._rxn_rate_tally = self.tallies['scatter'] - self._xs_tally = rxn_tally / self.tallies['flux'] + self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] super(ScatterMatrixXS, self).compute_xs() def get_xs(self, in_groups='all', out_groups='all', @@ -2104,7 +2122,8 @@ class Chi(MGXS): nu_fission_in.remove_filter(energy_filter) # Compute chi - self._xs_tally = nu_fission_out / nu_fission_in + self._rxn_rate_tally = nu_fission_out + self._xs_tally = self.rxn_rate_tally / nu_fission_in # Add the coarse energy filter back to the nu-fission tally nu_fission_in.add_filter(energy_filter) From a7ac2db068de2d81a5831c4817470170ff7e4efe Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Tue, 12 Jan 2016 13:31:18 -0500 Subject: [PATCH 136/650] Typo fix --- src/initialize.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/initialize.F90 b/src/initialize.F90 index b7e3417856..a50fe09a01 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -959,7 +959,7 @@ contains do j = 1, tallies(i) % n_filters if (tallies(i) % filters(j) % type == FILTER_DISTRIBCELL) then distribcell_active = .true. - if (size(tallies(i) % filters(j) %int_bins) > 1) then + if (size(tallies(i) % filters(j) % int_bins) > 1) then call fatal_error("A distribcell filter was specified with & &multiple bins. This feature is not supported.") end if From 31f7e91b21a07934e77a1b3d4ca794e65a9485db Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Tue, 12 Jan 2016 15:30:47 -0500 Subject: [PATCH 137/650] Make lattice outer error non-fatal --- src/geometry.F90 | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/geometry.F90 b/src/geometry.F90 index 9a084a77cb..90fbc263ac 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -308,9 +308,10 @@ contains else ! Particle is outside the lattice. if (lat % outer == NO_OUTER_UNIVERSE) then - call fatal_error("A particle is outside latttice " & - // trim(to_str(lat % id)) // " but the lattice has no & - &defined outer universe.") + call handle_lost_particle(p, "Particle " // trim(to_str(p %id)) & + // " is outside lattice " // trim(to_str(lat % id)) & + // " but the lattice has no defined outer universe.") + return else p % coord(j + 1) % universe = lat % outer end if From b6d47c7054d95465b0093dea3d17014a657fc057 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Tue, 12 Jan 2016 15:44:50 -0500 Subject: [PATCH 138/650] Prevent handle_lost_particle being called twice --- src/geometry.F90 | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/geometry.F90 b/src/geometry.F90 index 90fbc263ac..94f8876ed4 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -537,9 +537,11 @@ contains p % n_coord = 1 call find_cell(p, found) if (.not. found) then - call handle_lost_particle(p, "Could not locate particle " & - // trim(to_str(p % id)) // " after crossing a lattice boundary.") - return + if (p % alive) then ! Particle may have been killed in find_cell + call handle_lost_particle(p, "Could not locate particle " & + // trim(to_str(p % id)) // " after crossing a lattice boundary.") + return + end if end if else OUTSIDE_LAT From c37639d90dacaaa89ca33385ea9ed95e966bbc77 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Tue, 12 Jan 2016 16:04:50 -0500 Subject: [PATCH 139/650] Make max lost particles relative to total # part.s --- src/constants.F90 | 3 +++ src/geometry.F90 | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/constants.F90 b/src/constants.F90 index 8eabdaf604..10b41e5602 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -139,6 +139,9 @@ module constants ! Maximum number of lost particles integer, parameter :: MAX_LOST_PARTICLES = 10 + ! Maximum number of lost particles, relative to the total number of particles + real(8), parameter :: REL_MAX_LOST_PARTICLES = 1e-5_8 + ! ============================================================================ ! CROSS SECTION RELATED CONSTANTS diff --git a/src/geometry.F90 b/src/geometry.F90 index 9a084a77cb..667dc02bfa 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -947,6 +947,8 @@ contains type(Particle), intent(inout) :: p character(*) :: message + integer(8) :: tot_n_particles + ! Print warning and write lost particle file call warning(message) call write_particle_restart(p) @@ -956,9 +958,13 @@ contains !$omp atomic n_lost_particles = n_lost_particles + 1 + ! Count the total number of simulated particles + tot_n_particles = n_batches * gen_per_batch * n_particles + ! Abort the simulation if the maximum number of lost particles has been ! reached - if (n_lost_particles == MAX_LOST_PARTICLES) then + if (n_lost_particles >= MAX_LOST_PARTICLES .and. & + n_lost_particles >= REL_MAX_LOST_PARTICLES * tot_n_particles) then call fatal_error("Maximum number of lost particles has been reached.") end if From 9be0ff54ddcf92ab2d7876f71cc59782731e779c Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Tue, 12 Jan 2016 16:08:30 -0500 Subject: [PATCH 140/650] Refactored MGXS computation as on-the-fly through xs_tally property --- openmc/mgxs/mgxs.py | 269 ++++++++++++++++++++------------------------ 1 file changed, 124 insertions(+), 145 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 2e30c58cbf..992f8dfc4d 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -89,13 +89,13 @@ class MGXS(object): compute the cross section tallies : OrderedDict OpenMC tallies needed to compute the multi-group cross section - xs_tally : Tally - Derived tally for the multi-group cross section. This attribute - is None unless the multi-group cross section has been computed. rxn_rate_tally : Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None unless the multi-group cross section has been computed. + xs_tally : Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. num_subdomains : Integral The number of subdomains is unity for 'material', 'cell' and 'universe' domain types. When the This is equal to the number of cell instances @@ -127,8 +127,8 @@ class MGXS(object): self._energy_groups = None self._tally_trigger = None self._tallies = None - self._xs_tally = None self._rxn_rate_tally = None + self._xs_tally = None self._sparse = False self.name = name @@ -154,8 +154,8 @@ class MGXS(object): clone._domain_type = self.domain_type clone._energy_groups = copy.deepcopy(self.energy_groups, memo) clone._tally_trigger = copy.deepcopy(self.tally_trigger, memo) - clone._xs_tally = copy.deepcopy(self.xs_tally, memo) - clone._rxn_rate_tally = copy.deepcopy(self.rxn_rate_tally, memo) + clone._rxn_rate_tally = copy.deepcopy(self._rxn_rate_tally, memo) + clone._xs_tally = copy.deepcopy(self._xs_tally, memo) clone._sparse = self.sparse clone._tallies = OrderedDict() @@ -206,14 +206,25 @@ class MGXS(object): def tallies(self): return self._tallies - @property - def xs_tally(self): - return self._xs_tally - @property def rxn_rate_tally(self): return self._rxn_rate_tally + @property + def xs_tally(self): + """Computes multi-group cross section using OpenMC tally arithmetic.""" + + if self._xs_tally is None: + if self.tallies is None: + msg = 'Unable to get xs_tally since tallies have ' \ + 'not been loaded from a statepoint' + raise ValueError(msg) + + self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] + self._compute_xs() + + return self._xs_tally + @property def sparse(self): return self._sparse @@ -283,9 +294,9 @@ class MGXS(object): cv.check_type('sparse', sparse, bool) # Sparsify or densify the derived MGXS tallies and the base tallies - if self.xs_tally: + if self._xs_tally: self.xs_tally.sparse = sparse - if self.rxn_rate_tally: + if self._rxn_rate_tally: self.rxn_rate_tally.sparse = sparse for tally_name in self.tallies: @@ -521,8 +532,7 @@ class MGXS(object): else: self.tallies[key].add_nuclide('total') - @abc.abstractmethod - def compute_xs(self): + def _compute_xs(self): """Performs generic cleanup after a subclass' uses tally arithmetic to compute a multi-group cross section as a derived tally. @@ -613,9 +623,6 @@ class MGXS(object): sp_tally.sparse = self.sparse self.tallies[tally_type] = sp_tally - # Compute the cross section from the tallies - self.compute_xs() - def get_xs(self, groups='all', subdomains='all', nuclides='all', xs_type='macro', order_groups='increasing', value='mean'): """Returns an array of multi-group cross sections. @@ -659,10 +666,6 @@ class MGXS(object): """ - if self.xs_tally is None: - msg = 'Unable to get cross section since it has not been computed' - raise ValueError(msg) - cv.check_value('value', value, ['mean', 'std_dev', 'rel_err']) cv.check_value('xs_type', xs_type, ['macro', 'micro']) @@ -747,11 +750,6 @@ class MGXS(object): """ - if self.xs_tally is None: - msg = 'Unable to get a condensed coarse group cross section ' \ - 'since the fine group cross section has not been computed' - raise ValueError(msg) - cv.check_type('coarse_groups', coarse_groups, EnergyGroups) cv.check_less_than('coarse groups', coarse_groups.num_groups, self.num_groups, equality=True) @@ -762,8 +760,10 @@ class MGXS(object): # Clone this MGXS to initialize the condensed version condensed_xs = copy.deepcopy(self) - condensed_xs.sparse = False - condensed_xs.energy_groups = coarse_groups + condensed_xs._rxn_rate_tally = None + condensed_xs._xs_tally = None + condensed_xs._sparse = False + condensed_xs._energy_groups = coarse_groups # Build energy indices to sum across energy_indices = [] @@ -809,7 +809,6 @@ class MGXS(object): tally._std_dev = std_dev # Compute the energy condensed multi-group cross section - condensed_xs.compute_xs() condensed_xs.sparse = self.sparse return condensed_xs @@ -838,11 +837,6 @@ class MGXS(object): """ - if self.xs_tally is None: - msg = 'Unable to get subdomain-averaged cross section since the ' \ - 'subdomain-distributed cross section has not been computed' - raise ValueError(msg) - # Construct a collection of the subdomain filter bins to average across if subdomains != 'all': cv.check_iterable_type('subdomains', subdomains, Integral) @@ -853,7 +847,9 @@ class MGXS(object): # Clone this MGXS to initialize the subdomain-averaged version avg_xs = copy.deepcopy(self) - avg_xs.sparse = False + avg_xs._rxn_rate_tally = None + avg_xs._xs_tally = None + avg_xs._sparse = False # If domain is distribcell, make the new domain 'cell' if self.domain_type == 'distribcell': @@ -891,7 +887,6 @@ class MGXS(object): tally._std_dev = std_dev # Compute the subdomain-averaged multi-group cross section - avg_xs.compute_xs() avg_xs.sparse = self.sparse return avg_xs @@ -943,7 +938,7 @@ class MGXS(object): string += '{0: <16}=\t{1}\n'.format('\tDomain ID', self.domain.id) # If cross section data has not been computed, only print string header - if self.xs_tally is None: + if self.tallies is None: print(string) return @@ -1030,11 +1025,6 @@ class MGXS(object): """ - if self.xs_tally is None: - msg = 'Unable to get build HDF5 store since the ' \ - 'cross section has not been computed' - raise ValueError(msg) - import h5py # Make directory if it does not exist @@ -1232,11 +1222,6 @@ class MGXS(object): """ - if self.xs_tally is None: - msg = 'Unable to get Pandas DataFrame since the ' \ - 'cross section has not been computed' - raise ValueError(msg) - if groups != 'all': cv.check_iterable_type('groups', groups, Integral) if nuclides != 'all' and nuclides != 'sum': @@ -1357,14 +1342,12 @@ class TotalXS(MGXS): return self._tallies - def compute_xs(self): - """Computes the multi-group total cross sections using OpenMC - tally arithmetic. - """ - - self._rxn_rate_tally = self.tallies['total'] - self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] - super(TotalXS, self).compute_xs() + @property + def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + self._rxn_rate_tally = self.tallies['total'] + self._rxn_rate_tally.sparse = self.sparse + return self._rxn_rate_tally class TransportXS(MGXS): @@ -1405,18 +1388,21 @@ class TransportXS(MGXS): return self._tallies - def compute_xs(self): - """Computes the multi-group transport cross sections using OpenMC - tally arithmetic.""" + @property + def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + scatter_p1 = copy.deepcopy(self.tallies['scatter-P1']) - # Use tally slicing to remove scatter-P0 data from scatter-P1 tally - scatter_p1 = self.tallies['scatter-P1'] - self.tallies['scatter-P1'] = scatter_p1.get_slice(scores=['scatter-P1']) - self.tallies['scatter-P1'].filters[-1].type = 'energy' + # Use tally slicing to remove scatter-P0 data from scatter-P1 tally + self.tallies['scatter-P1'] = \ + scatter_p1.get_slice(scores=['scatter-P1']) - self._rxn_rate_tally = self.tallies['total'] - self.tallies['scatter-P1'] - self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] - super(TransportXS, self).compute_xs() + self.tallies['scatter-P1'].filters[-1].type = 'energy' + self._rxn_rate_tally = \ + self.tallies['total'] - self.tallies['scatter-P1'] + self._rxn_rate_tally.sparse = self.sparse + + return self._rxn_rate_tally class AbsorptionXS(MGXS): @@ -1456,13 +1442,12 @@ class AbsorptionXS(MGXS): return self._tallies - def compute_xs(self): - """Computes the multi-group absorption cross sections using OpenMC - tally arithmetic.""" - - self._rxn_rate_tally = self.tallies['absorption'] - self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] - super(AbsorptionXS, self).compute_xs() + @property + def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + self._rxn_rate_tally = self.tallies['absorption'] + self._rxn_rate_tally.sparse = self.sparse + return self._rxn_rate_tally class CaptureXS(MGXS): @@ -1509,13 +1494,13 @@ class CaptureXS(MGXS): return self._tallies - def compute_xs(self): - """Computes the multi-group capture cross sections using OpenMC - tally arithmetic.""" - - self._rxn_rate_tally = self.tallies['absorption'] - self.tallies['fission'] - self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] - super(CaptureXS, self).compute_xs() + @property + def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + self._rxn_rate_tally = \ + self.tallies['absorption'] - self.tallies['fission'] + self._rxn_rate_tally.sparse = self.sparse + return self._rxn_rate_tally class FissionXS(MGXS): @@ -1555,13 +1540,12 @@ class FissionXS(MGXS): return self._tallies - def compute_xs(self): - """Computes the multi-group fission cross sections using OpenMC - tally arithmetic.""" - - self._rxn_rate_tally = self.tallies['fission'] - self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] - super(FissionXS, self).compute_xs() + @property + def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + self._rxn_rate_tally = self.tallies['fission'] + self._rxn_rate_tally.sparse = self.sparse + return self._rxn_rate_tally class NuFissionXS(MGXS): @@ -1601,13 +1585,12 @@ class NuFissionXS(MGXS): return self._tallies - def compute_xs(self): - """Computes the multi-group nu-fission cross sections using OpenMC - tally arithmetic.""" - - self._rxn_rate_tally = self.tallies['nu-fission'] - self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] - super(NuFissionXS, self).compute_xs() + @property + def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + self._rxn_rate_tally = self.tallies['nu-fission'] + self._rxn_rate_tally.sparse = self.sparse + return self._rxn_rate_tally class ScatterXS(MGXS): @@ -1647,13 +1630,12 @@ class ScatterXS(MGXS): return self._tallies - def compute_xs(self): - """Computes the scattering multi-group cross sections using - OpenMC tally arithmetic.""" - - self._rxn_rate_tally = self.tallies['scatter'] - self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] - super(ScatterXS, self).compute_xs() + @property + def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + self._rxn_rate_tally = self.tallies['scatter'] + self._rxn_rate_tally.sparse = self.sparse + return self._rxn_rate_tally class NuScatterXS(MGXS): @@ -1693,13 +1675,12 @@ class NuScatterXS(MGXS): return self._tallies - def compute_xs(self): - """Computes the nu-scattering multi-group cross section using OpenMC - tally arithmetic.""" - - self._rxn_rate_tally = self.tallies['nu-scatter'] - self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] - super(NuScatterXS, self).compute_xs() + @property + def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + self._rxn_rate_tally = self.tallies['nu-scatter'] + self._rxn_rate_tally.sparse = self.sparse + return self._rxn_rate_tally class ScatterMatrixXS(MGXS): @@ -1766,23 +1747,22 @@ class ScatterMatrixXS(MGXS): cv.check_value('correction', correction, ('P0', None)) self._correction = correction - def compute_xs(self): - """Computes the multi-group scattering matrix using OpenMC - tally arithmetic.""" + @property + def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + # If using P0 correction subtract scatter-P1 from the diagonal + if self.correction == 'P0': + scatter_p1 = self.tallies['scatter-P1'] + scatter_p1 = scatter_p1.get_slice(scores=['scatter-P1']) + energy_filter = self.tallies['scatter'].find_filter('energy') + energy_filter = copy.deepcopy(energy_filter) + scatter_p1 = scatter_p1.diagonalize_filter(energy_filter) + self._rxn_rate_tally = self.tallies['scatter'] - scatter_p1 + else: + self._rxn_rate_tally = self.tallies['scatter'] + self._rxn_rate_tally.sparse = self.sparse - # If using P0 correction subtract scatter-P1 from the diagonal - if self.correction == 'P0': - scatter_p1 = self.tallies['scatter-P1'] - scatter_p1 = scatter_p1.get_slice(scores=['scatter-P1']) - energy_filter = self.tallies['scatter'].find_filter('energy') - energy_filter = copy.deepcopy(energy_filter) - scatter_p1 = scatter_p1.diagonalize_filter(energy_filter) - self._rxn_rate_tally = self.tallies['scatter'] - scatter_p1 - else: - self._rxn_rate_tally = self.tallies['scatter'] - - self._xs_tally = self.rxn_rate_tally / self.tallies['flux'] - super(ScatterMatrixXS, self).compute_xs() + return self._rxn_rate_tally def get_xs(self, in_groups='all', out_groups='all', subdomains='all', nuclides='all', xs_type='macro', @@ -1830,10 +1810,6 @@ class ScatterMatrixXS(MGXS): """ - if self.xs_tally is None: - msg = 'Unable to get cross section since it has not been computed' - raise ValueError(msg) - cv.check_value('value', value, ['mean', 'std_dev', 'rel_err']) cv.check_value('xs_type', xs_type, ['macro', 'micro']) @@ -1966,7 +1942,7 @@ class ScatterMatrixXS(MGXS): string += '{0: <16}=\t{1}\n'.format('\tDomain ID', self.domain.id) # If cross section data has not been computed, only print string header - if self.xs_tally is None: + if self.tallies is None: print(string) return @@ -2110,25 +2086,32 @@ class Chi(MGXS): return self._tallies - def compute_xs(self): + @property + def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + self._rxn_rate_tally = self.tallies['nu-fission-out'] + self._rxn_rate_tally.sparse = self.sparse + return self._rxn_rate_tally + + @property + def xs_tally(self): """Computes chi fission spectrum using OpenMC tally arithmetic.""" - # Retrieve the fission production tallies - nu_fission_in = self.tallies['nu-fission-in'] - nu_fission_out = self.tallies['nu-fission-out'] + if self._xs_tally is None: + nu_fission_in = self.tallies['nu-fission-in'] - # Remove coarse energy filter to keep it out of tally arithmetic - energy_filter = nu_fission_in.find_filter('energy') - nu_fission_in.remove_filter(energy_filter) + # Remove coarse energy filter to keep it out of tally arithmetic + energy_filter = nu_fission_in.find_filter('energy') + nu_fission_in.remove_filter(energy_filter) - # Compute chi - self._rxn_rate_tally = nu_fission_out - self._xs_tally = self.rxn_rate_tally / nu_fission_in + # Compute chi + self._xs_tally = self.rxn_rate_tally / nu_fission_in + super(Chi, self)._compute_xs() - # Add the coarse energy filter back to the nu-fission tally - nu_fission_in.add_filter(energy_filter) + # Add the coarse energy filter back to the nu-fission tally + nu_fission_in.add_filter(energy_filter) - super(Chi, self).compute_xs() + return self._xs_tally def get_xs(self, groups='all', subdomains='all', nuclides='all', xs_type='macro', order_groups='increasing', value='mean'): @@ -2173,10 +2156,6 @@ class Chi(MGXS): """ - if self.xs_tally is None: - msg = 'Unable to get cross section since it has not been computed' - raise ValueError(msg) - cv.check_value('value', value, ['mean', 'std_dev', 'rel_err']) cv.check_value('xs_type', xs_type, ['macro', 'micro']) From c4d8c92f8c3c975f169640f495332e622aa522dc Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Tue, 12 Jan 2016 18:22:41 -0500 Subject: [PATCH 141/650] Moved ScatterMatrixXS rxn_rate_tally property above correction setter --- openmc/mgxs/mgxs.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 992f8dfc4d..47154357ef 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1742,13 +1742,9 @@ class ScatterMatrixXS(MGXS): return self._tallies - @correction.setter - def correction(self, correction): - cv.check_value('correction', correction, ('P0', None)) - self._correction = correction - @property def rxn_rate_tally(self): + if self._rxn_rate_tally is None: # If using P0 correction subtract scatter-P1 from the diagonal if self.correction == 'P0': @@ -1760,10 +1756,16 @@ class ScatterMatrixXS(MGXS): self._rxn_rate_tally = self.tallies['scatter'] - scatter_p1 else: self._rxn_rate_tally = self.tallies['scatter'] + self._rxn_rate_tally.sparse = self.sparse return self._rxn_rate_tally + @correction.setter + def correction(self, correction): + cv.check_value('correction', correction, ('P0', None)) + self._correction = correction + def get_xs(self, in_groups='all', out_groups='all', subdomains='all', nuclides='all', xs_type='macro', order_groups='increasing', value='mean'): From 2abc9f1e2940cc188e80f0491b3b99bbd95147b5 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 9 Nov 2015 16:41:44 -0600 Subject: [PATCH 142/650] Support for tabular angular and energy distributions. Implemented new polymorphic Distribution type which is used by AngleDistribution, both of which appear in distribution_header. --- docs/source/usersguide/input.rst | 60 +++++++-- openmc/settings.py | 78 ++++++++--- src/distribution_header.F90 | 216 +++++++++++++++++++++++++++++++ src/error.F90 | 15 +-- src/global.F90 | 11 +- src/input_xml.F90 | 214 ++++++++++++++++++++---------- src/math.F90 | 49 +++++++ src/physics.F90 | 51 +------- src/random_lcg.F90 | 5 +- src/relaxng/settings.rnc | 9 +- src/relaxng/settings.rng | 36 +----- src/source.F90 | 67 +++------- src/source_header.F90 | 8 +- src/state_point.F90 | 1 + 14 files changed, 563 insertions(+), 257 deletions(-) create mode 100644 src/distribution_header.F90 diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index fa43ca1d2c..ef9be8123f 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -440,7 +440,6 @@ attributes/sub-elements: has the following attributes: :type: - The type of spatial distribution. Valid options are "box", "fission", and "point". A "box" spatial distribution has coordinates sampled uniformly in a parallelepiped. A "fission" spatial distribution samples locations from @@ -468,14 +467,23 @@ attributes/sub-elements: has the following attributes: :type: - The type of angular distribution. Valid options are "isotropic" and - "monodirectional". The angle of the particle emitted from a source site is - isotropic if the "isotropic" option is given. The angle of the particle - emitted from a source site is the direction specified in the - attribute if "monodirectional" option is given. + The type of angular distribution. Valid options are "isotropic", + "monodirectional", and "tabular". The angle of the particle emitted from a + source site is isotropic if the "isotropic" option is given. The angle of + the particle emitted from a source site is the direction specified in the + attribute if "monodirectional" option is given. The "tabular" + option produces directions with polar angles sampled from a tabulated + distribution. *Default*: isotropic + :interpolation: + For a "tabular" angular distribution, ``interpolation`` can be set to + "histogram" or "linear-linear" thereby specifying how tabular points are + to be interpolated. + + *Default*: histogram + :parameters: For an "isotropic" angular distribution, ``parameters`` should not be specified. @@ -484,6 +492,22 @@ attributes/sub-elements: given as three real numbers which specify the angular cosines with respect to each axis. + For a "tabular" angular distribution, ``parameters`` provides the + :math:`(\mu,p)` pairs defining the tabular distribution. All :math:`\mu` + points are given first followed by corresponding :math:`p` points. The + following example gives a histogram distribution with even probability of + selecting a polar angle in the range [-1,-0.5] and [0.5,1] (Note that the + last :math:`p` point is inconsequential): + + .. code-block:: xml + + + + -1.0 -0.5 0.5 1.0 + 1.0 0.0 1.0 0.0 + + + *Default*: None :energy: @@ -491,15 +515,23 @@ attributes/sub-elements: has the following attributes: :type: - The type of energy distribution. Valid options are "monoenergetic", - "watt", and "maxwell". The "monoenergetic" option produces source sites at - a single energy. The "watt" option produces source sites whose energy is - sampled from a Watt fission spectrum. The "maxwell" option produce source - sites whose energy is sampled from a Maxwell fission spectrum. + "watt", "maxwell", and "tabular". The "monoenergetic" option produces + source sites at a single energy. The "watt" option produces source sites + whose energy is sampled from a Watt fission spectrum. The "maxwell" option + produce source sites whose energy is sampled from a Maxwell fission + spectrum. The "tabular" option produces source sites whose energy is + sampled from a tabulated distribution. *Default*: watt + :interpolation: + For a "tabular" angular distribution, ``interpolation`` can be set to + "histogram" or "linear-linear" thereby specifying how tabular points are + to be interpolated. + + *Default*: histogram + :parameters: For a "monoenergetic" energy distribution, ``parameters`` should be given as the energy in MeV of the source sites. @@ -512,6 +544,10 @@ attributes/sub-elements: real number :math:`a` that parameterizes the distribution :math:`p(E) dE = c E e^{-E/a} dE`. + For a "tabular" energy distribution, ``parameters`` provides the + :math:`(E,p)` pairs defining the tabular distribution. All :math:`E` + points are given first followed by corresponding :math:`p` points. + *Default*: 0.988 2.249 :write_initial: @@ -519,7 +555,7 @@ attributes/sub-elements: the beginning of the first batch. The output file is named "initial_source.binary(h5)" - *Default*: false + *Default*: false ```` Element ------------------------- diff --git a/openmc/settings.py b/openmc/settings.py index e8ec6463af..2cb6a14460 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -139,8 +139,10 @@ class SettingsFile(object): self._source_space_type = None self._source_space_params = None self._source_angle_type = None + self._source_angle_interpolation = None self._source_angle_params = None self._source_energy_type = None + self._source_energy_interpolation = None self._source_energy_params = None self._confidence_intervals = None @@ -243,6 +245,10 @@ class SettingsFile(object): def source_angle_type(self): return self._source_angle_type + @property + def source_angle_interpolation(self): + return self._source_angle_interpolation + @property def source_angle_params(self): return self._source_angle_params @@ -251,6 +257,10 @@ class SettingsFile(object): def source_energy_type(self): return self._source_energy_type + @property + def source_energy_interpolation(self): + return self._source_energy_interpolation + @property def source_energy_params(self): return self._source_energy_params @@ -511,17 +521,19 @@ class SettingsFile(object): self._source_space_type = stype self._source_space_params = params - def set_source_angle(self, stype, params=[]): + def set_source_angle(self, stype, params=[], interp='histogram'): """Defined the angular distribution of the external/starting source. Parameters ---------- stype : str - The type of angular distribution. Valid options are "isotropic" and - "monodirectional". The angle of the particle emitted from a source - site is isotropic if the "isotropic" option is given. The angle of - the particle emitted from a source site is the direction specified - in ``params`` if the "monodirectional" option is given. + The type of angular distribution. Valid options are "isotropic", + "monodirectional", and "tabular". The angle of the particle emitted + from a source site is isotropic if the "isotropic" option is + given. The angle of the particle emitted from a source site is the + direction specified in ``params`` if the "monodirectional" option is + given. The "tabular" option produces directions with polar angles + sampled from a tabulated distribution. params : Iterable of float For an "isotropic" angular distribution, ``params`` should not be specified. @@ -530,11 +542,20 @@ class SettingsFile(object): be given as three floats which specify the angular cosines with respect to each axis. + For a "tabular" angular distribution, ``parameters`` provides the + :math:`(\mu,p)` pairs defining the tabular distribution. All + :math:`\mu` points are given first followed by corresponding + :math:`p` points. + interp : { 'histogram', 'linear-linear' } + For a "tabular" angular distribution, ``interpolation`` can be set + to "histogram" or "linear-linear" thereby specifying how tabular + points are to be interpolated. + """ check_type('source angle type', stype, basestring) check_value('source angle type', stype, - ['isotropic', 'monodirectional']) + ['isotropic', 'monodirectional', 'tabular']) check_type('source angle parameters', params, Iterable, Real) if stype == 'isotropic' and params is not None: msg = 'Unable to set source angle parameters since they are not ' \ @@ -543,22 +564,30 @@ class SettingsFile(object): elif stype == 'monodirectional': check_length('source angle parameters for a monodirectional ' 'source', params, 3) + elif stype == 'tabular': + check_type('source angle interpolation', interp, basestring) + check_value('source angle interpolation', interp, + ['histogram', 'linear-linear']) + self._source_angle_interpolation = interp self._source_angle_type = stype self._source_angle_params = params - def set_source_energy(self, stype, params=[]): + def set_source_energy(self, stype, params=[], interp='histogram'): """Defined the energy distribution of the external/starting source. Parameters ---------- stype : str + The type of energy distribution. Valid options are "monoenergetic", - "watt", and "maxwell". The "monoenergetic" option produces source - sites at a single energy. The "watt" option produces source sites - whose energy is sampled from a Watt fission spectrum. The "maxwell" - option produce source sites whose energy is sampled from a Maxwell - fission spectrum. + "watt", "maxwell", and "tabular". The "monoenergetic" option + produces source sites at a single energy. The "watt" option produces + source sites whose energy is sampled from a Watt fission + spectrum. The "maxwell" option produce source sites whose energy is + sampled from a Maxwell fission spectrum. The "tabular" option + produces source sites whose energy is sampled from a tabulated + distribution. params : Iterable of float For a "monoenergetic" energy distribution, ``params`` should be given as the energy in MeV of the source sites. @@ -571,11 +600,19 @@ class SettingsFile(object): one real number :math:`a` that parameterizes the distribution :math:`p(E) dE = c E e^{-E/a} dE`. + For a "tabular" energy distribution, ``parameters`` provides the + :math:`(E,p)` pairs defining the tabular distribution. All :math:`E` + points are given first followed by corresponding :math:`p` points. + interp : { 'histogram', 'linear-linear' } + For a "tabular" energy distribution, ``interpolation`` can be set + to "histogram" or "linear-linear" thereby specifying how tabular + points are to be interpolated. + """ check_type('source energy type', stype, basestring) check_value('source energy type', stype, - ['monoenergetic', 'watt', 'maxwell']) + ['monoenergetic', 'watt', 'maxwell', 'tabular']) check_type('source energy parameters', params, Iterable, Real) if stype in ['monoenergetic', 'maxwell']: check_length('source energy parameters for a monoenergetic ' @@ -583,6 +620,11 @@ class SettingsFile(object): elif stype == 'watt': check_length('source energy parameters for a Watt source', params, 2) + elif stype == 'tabular': + check_type('source energy interpolation', interp, basestring) + check_value('source energy interpolation', interp, + ['histogram', 'linear-linear']) + self._source_energy_interpolation = interp self._source_energy_type = stype self._source_energy_params = params @@ -949,6 +991,9 @@ class SettingsFile(object): element = ET.SubElement(self._source_subelement, "angle") element.set("type", self._source_angle_type) + if self.source_angle_interpolation is not None: + element.set("interpolation", self.source_angle_interpolation) + subelement = ET.SubElement(element, "parameters") subelement.text = ' '.join(map(str, self._source_angle_params)) @@ -961,7 +1006,10 @@ class SettingsFile(object): element = ET.SubElement(self._source_subelement, "energy") element.set("type", self._source_energy_type) - subelement = ET.SubElement(element, "parameters") + if self.source_energy_interpolation is not None: + element.set("interpolation", self.source_energy_interpolation) + + subelement = ET.SubElement(element, "parameters") subelement.text = ' '.join(map(str, self._source_energy_params)) def _create_output_subelement(self): diff --git a/src/distribution_header.F90 b/src/distribution_header.F90 new file mode 100644 index 0000000000..9b10f636b3 --- /dev/null +++ b/src/distribution_header.F90 @@ -0,0 +1,216 @@ +module distribution_header + + use constants, only: ZERO, HALF, ONE, HISTOGRAM, LINEAR_LINEAR + use error, only: fatal_error + use math, only: rotate_angle, maxwell_spectrum, watt_spectrum + use random_lcg, only: prn + +!=============================================================================== +! DISTRIBUTION type defines a probability density function +!=============================================================================== + + type, abstract :: Distribution + contains + procedure(iSample), deferred :: sample + end type Distribution + + abstract interface + function iSample(this) result(x) + import Distribution + class(Distribution), intent(in) :: this + real(8) :: x + end function iSample + end interface + +!=============================================================================== +! Derived classes of Distribution +!=============================================================================== + + ! delta function at a single point + type, extends(Distribution) :: Delta + real(8) :: x0 + contains + procedure :: sample => delta_sample + end type Delta + + ! Uniform distribution over the interval [a,b] + type, extends(Distribution) :: Uniform + real(8) :: a + real(8) :: b + contains + procedure :: sample => uniform_sample + end type Uniform + + ! Maxwellian distribution of form c*E*exp(-E/a) + type, extends(Distribution) :: Maxwell + real(8) :: theta + contains + procedure :: sample => maxwell_sample + end type Maxwell + + ! Watt fission spectrum with form c*exp(-E/a)*sinh(sqrt(b*E)) + type, extends(Distribution) :: Watt + real(8) :: a + real(8) :: b + contains + procedure :: sample => watt_sample + end type Watt + + ! Histogram or linear-linear interpolated tabular distribution + type, extends(Distribution) :: Tabular + integer :: interpolation + real(8), allocatable :: x(:) ! tabulated independent variable + real(8), allocatable :: p(:) ! tabulated probability density + real(8), allocatable, private :: c(:) ! cumulative distribution at tabulated values + contains + procedure :: sample => tabular_sample + procedure :: initialize => tabular_initialize + end type Tabular + +!=============================================================================== +! AngleDistribution +!=============================================================================== + + type :: AngleDistribution + real(8) :: reference_uvw(3) + class(Distribution), allocatable :: mu + contains + procedure :: sample => angle_sample + end type AngleDistribution + +contains + + function delta_sample(this) result(x) + class(Delta), intent(in) :: this + real(8) :: x + + x = this%x0 + end function delta_sample + + function uniform_sample(this) result(x) + class(Uniform), intent(in) :: this + real(8) :: x + + x = this%a + prn()*(this%b - this%a) + end function uniform_sample + + function maxwell_sample(this) result(x) + class(Maxwell), intent(in) :: this + real(8) :: x + + x = maxwell_spectrum(this%theta) + end function maxwell_sample + + function watt_sample(this) result(x) + class(Watt), intent(in) :: this + real(8) :: x + + x = watt_spectrum(this%a, this%b) + end function watt_sample + + function tabular_sample(this) result(x) + class(Tabular), intent(in) :: this + real(8) :: x + + integer :: i + real(8) :: c ! sampled cumulative frequency + real(8) :: m ! slope of PDF + real(8) :: x_i, x_i1 ! i-th and (i+1)th x values + real(8) :: c_i, c_i1 ! i-th and (i+1)th cumulative distribution values + real(8) :: p_i, p_i1 ! i-th and (i+1)th probability density values + + ! Sample value of CDF + c = prn() + + ! Find first CDF bin which is above the sampled value + c_i = this%c(1) + do i = 1, size(this%c) - 1 + c_i1 = this%c(i + 1) + if (c <= c_i1) exit + c_i = c_i1 + end do + + ! Determine bounding PDF values + x_i = this%x(i) + p_i = this%p(i) + + if (this%interpolation == HISTOGRAM) then + ! Histogram interpolation + if (p_i > ZERO) then + x = x_i + (c - c_i)/p_i + else + x = x_i + end if + else + ! Linear-linear interpolation + x_i1 = this%x(i + 1) + p_i1 = this%p(i + 1) + + m = (p_i1 - p_i)/(x_i1 - x_i) + if (m == ZERO) then + x = x_i + (c - c_i)/p_i + else + x = x_i + (sqrt(max(ZERO, p_i*p_i + 2*m*(c - c_i))) - p_i)/m + end if + end if + end function tabular_sample + + subroutine tabular_initialize(this, x, p, interp) + class(Tabular), intent(inout) :: this + real(8), intent(in) :: x(:) + real(8), intent(in) :: p(:) + integer, intent(in) :: interp + + integer :: n + + ! Check interpolation parameter + + if (interp /= HISTOGRAM .and. interp /= LINEAR_LINEAR) then + call fatal_error('Only histogram and linear-linear interpolation for tabular & + &distribution is supported.') + end if + + ! Check length of x, p arrays + if (size(x) /= size(p)) then + call fatal_error('Tabulated probabilities not of same length as & + &independent variable.') + end if + + ! Copy probability density function and interpolation parameter + n = size(x) + allocate(this%x(n), this%p(n), this%c(n)) + this%interpolation = interp + this%x(:) = x(:) + this%p(:) = p(:) + + ! Calculate cumulative distribution function + this%c(1) = ZERO + do i = 2, n + if (this%interpolation == HISTOGRAM) then + this%c(i) = this%c(i-1) + this%p(i-1)*(this%x(i) - this%x(i-1)) + elseif (this%interpolation == LINEAR_LINEAR) then + this%c(i) = this%c(i-1) + HALF*(this%p(i-1) + this%p(i)) * & + (this%x(i) - this%x(i-1)) + end if + end do + + ! Normalize density and distribution functions + this%p(:) = this%p(:)/this%c(n) + this%c(:) = this%c(:)/this%c(n) + end subroutine tabular_initialize + + function angle_sample(this) result(uvw) + class(AngleDistribution), intent(in) :: this + real(8) :: uvw(3) + + real(8) :: mu + + mu = this%mu%sample() + if (mu == ONE) then + uvw(:) = this%reference_uvw + else + uvw(:) = rotate_angle(this%reference_uvw, mu) + end if + end function angle_sample + +end module distribution_header diff --git a/src/error.F90 b/src/error.F90 index ecd7eb4530..9e5ca84792 100644 --- a/src/error.F90 +++ b/src/error.F90 @@ -3,8 +3,6 @@ module error use, intrinsic :: ISO_FORTRAN_ENV use constants - use global - #ifdef MPI use message_passing #endif @@ -87,6 +85,9 @@ contains integer :: line_wrap ! length of line integer :: length ! length of message integer :: indent ! length of indentation +#ifdef MPI + integer :: mpi_err +#endif ! set default error code @@ -136,16 +137,6 @@ contains end if end do - ! Write information on current batch, generation, and particle - 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,*) - end if - - ! Release memory from all allocatable arrays - call free_memory() - #ifdef MPI ! Abort MPI call MPI_ABORT(MPI_COMM_WORLD, code, mpi_err) diff --git a/src/global.F90 b/src/global.F90 index 88ace73b6d..b030aab545 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -289,9 +289,6 @@ module global character(MAX_FILE_LEN) :: path_particle_restart ! Path to particle restart character(MAX_FILE_LEN) :: path_output = '' ! Path to output directory - ! Random number seed - integer(8) :: seed = 1_8 - ! The verbosity controls how much information will be printed to the ! screen and in logs integer :: verbosity = 7 @@ -455,10 +452,10 @@ contains ! Deallocate external source if (allocated(external_source % params_space)) & deallocate(external_source % params_space) - if (allocated(external_source % params_angle)) & - deallocate(external_source % params_angle) - if (allocated(external_source % params_energy)) & - deallocate(external_source % params_energy) + if (allocated(external_source % angle % mu)) & + deallocate(external_source % angle % mu) + if (allocated(external_source % energy)) & + deallocate(external_source % energy) ! Deallocate k and entropy if (allocated(k_generation)) deallocate(k_generation) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 07d739b889..eb48e1d6f6 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -3,6 +3,7 @@ module input_xml use cmfd_input, only: configure_cmfd use constants use dict_header, only: DictIntInt, ElemKeyValueCI + use distribution_header use energy_grid, only: grid_method, n_log_bins use error, only: fatal_error, warning use geometry_header, only: Cell, Lattice, RectLattice, HexLattice @@ -11,7 +12,7 @@ module input_xml use mesh_header, only: RegularMesh use output, only: write_message use plot_header - use random_lcg, only: prn + use random_lcg, only: prn, seed use surface_header use stl_vector, only: VectorInt use string, only: to_lower, to_str, str_to_int, str_to_real, & @@ -59,6 +60,7 @@ contains integer :: temp_int_array3(3) integer, allocatable :: temp_int_array(:) integer(8) :: temp_long + real(8), allocatable :: temp_real(:) integer :: n_tracks logical :: file_exists character(MAX_FILE_LEN) :: env_variable @@ -423,24 +425,6 @@ contains ! Get pointer to angular distribution call get_node_ptr(node_source, "angle", node_dist) - ! Check for type of angular distribution - type = '' - if (check_for_node(node_dist, "type")) & - call get_node_value(node_dist, "type", type) - select case (to_lower(type)) - case ('isotropic') - external_source % type_angle = SRC_ANGLE_ISOTROPIC - coeffs_reqd = 0 - case ('monodirectional') - external_source % type_angle = SRC_ANGLE_MONO - coeffs_reqd = 3 - case ('tabular') - external_source % type_angle = SRC_ANGLE_TABULAR - case default - call fatal_error("Invalid angular distribution for external source: "& - &// trim(type)) - end select - ! Determine number of parameters specified if (check_for_node(node_dist, "parameters")) then n = get_arraysize_double(node_dist, "parameters") @@ -448,21 +432,76 @@ contains n = 0 end if + ! Check for type of angular distribution + type = '' + if (check_for_node(node_dist, "type")) & + call get_node_value(node_dist, "type", type) + select case (to_lower(type)) + case ('isotropic') + allocate(Uniform :: external_source%angle%mu) + + case ('monodirectional') + allocate(Delta :: external_source%angle%mu) + if (n /= 3) then + call fatal_error('Monodirectional angular distribution must have & + &three parameters specified.') + end if + + case ('tabular') + allocate(Tabular :: external_source%angle%mu) + + case default + call fatal_error("Invalid angular distribution for external source: "& + // trim(type)) + end select + + ! Set reference unit vector to be positive z-direction + external_source%angle%reference_uvw(:) = [ZERO, ZERO, ONE] + ! Read parameters for angle distribution - if (n < coeffs_reqd) then - call fatal_error("Not enough parameters specified for angle & - &distribution of external source.") - elseif (n > coeffs_reqd) then - call fatal_error("Too many parameters specified for angle & - &distribution of external source.") - elseif (n > 0) then - allocate(external_source % params_angle(n)) + select type (mu => external_source%angle%mu) + type is (Uniform) + mu%a = -ONE + mu%b = ONE + + type is (Delta) + mu%x0 = ONE call get_node_array(node_dist, "parameters", & - external_source % params_angle) - end if + external_source%angle%reference_uvw) + + type is (Tabular) + ! Read interpolation + if (check_for_node(node_source, "interpolation")) then + call get_node_value(node_source, "interpolation", temp_str) + select case(to_lower(temp_str)) + case ('histogram') + temp_int = HISTOGRAM + case ('linear-linear') + temp_int = LINEAR_LINEAR + case default + call fatal_error("Unknown interpolation type for source & + &angular distribution: " // trim(temp_str)) + end select + else + temp_int = HISTOGRAM + end if + + ! Read and initialize tabular distribution + allocate(temp_real(n)) + call get_node_array(node_dist, "parameters", temp_real) + call mu%initialize(temp_real(1:n), temp_real(n+1:2*n), temp_int) + deallocate(temp_real) + end select + else ! Set default angular distribution isotropic - external_source % type_angle = SRC_ANGLE_ISOTROPIC + allocate(Uniform :: external_source%angle%mu) + select type(mu => external_source%angle%mu) + type is (Uniform) + mu%a = -ONE + mu%b = ONE + end select + external_source%angle%reference_uvw(:) = [ZERO, ZERO, ONE] end if ! Determine external source energy distribution @@ -471,27 +510,6 @@ contains ! Get pointer to energy distribution call get_node_ptr(node_source, "energy", node_dist) - ! Check for type of energy distribution - type = '' - if (check_for_node(node_dist, "type")) & - call get_node_value(node_dist, "type", type) - select case (to_lower(type)) - case ('monoenergetic') - external_source % type_energy = SRC_ENERGY_MONO - coeffs_reqd = 1 - case ('maxwell') - external_source % type_energy = SRC_ENERGY_MAXWELL - coeffs_reqd = 1 - case ('watt') - external_source % type_energy = SRC_ENERGY_WATT - coeffs_reqd = 2 - case ('tabular') - external_source % type_energy = SRC_ENERGY_TABULAR - case default - call fatal_error("Invalid energy distribution for external source: " & - &// trim(type)) - end select - ! Determine number of parameters specified if (check_for_node(node_dist, "parameters")) then n = get_arraysize_double(node_dist, "parameters") @@ -499,23 +517,87 @@ contains n = 0 end if + ! Check for type of energy distribution + type = '' + if (check_for_node(node_dist, "type")) & + call get_node_value(node_dist, "type", type) + select case (to_lower(type)) + case ('monoenergetic') + allocate(Delta :: external_source%energy) + if (n /= 1) then + call fatal_error('Monoenergetic energy distribution must have one & + ¶meter specified.') + end if + + case ('maxwell') + allocate(Maxwell :: external_source%energy) + if (n /= 1) then + call fatal_error('Maxwell energy distribution must have one & + ¶meter specified.') + end if + + case ('watt') + allocate(Watt :: external_source%energy) + if (n /= 2) then + call fatal_error('Watt energy distribution must have two & + ¶meter specified.') + end if + + case ('tabular') + allocate(Tabular :: external_source%energy) + + case default + call fatal_error("Invalid energy distribution for external source: " & + // trim(type)) + end select + ! Read parameters for energy distribution - if (n < coeffs_reqd) then - call fatal_error("Not enough parameters specified for energy & - &distribution of external source.") - elseif (n > coeffs_reqd) then - call fatal_error("Too many parameters specified for energy & - &distribution of external source.") - elseif (n > 0) then - allocate(external_source % params_energy(n)) - call get_node_array(node_dist, "parameters", & - external_source % params_energy) - end if + select type(energy => external_source%energy) + type is (Delta) + call get_node_value(node_dist, "parameters", energy%x0) + + type is (Maxwell) + call get_node_value(node_dist, "parameters", energy%theta) + + type is (Watt) + allocate(temp_real(2)) + call get_node_array(node_dist, "parameters", temp_real) + energy%a = temp_real(1) + energy%b = temp_real(2) + deallocate(temp_real) + + type is (Tabular) + ! Read interpolation + if (check_for_node(node_dist, "interpolation")) then + call get_node_value(node_dist, "interpolation", temp_str) + select case(to_lower(temp_str)) + case ('histogram') + temp_int = HISTOGRAM + case ('linear-linear') + temp_int = LINEAR_LINEAR + case default + call fatal_error("Unknown interpolation type for source & + &angular distribution: " // trim(temp_str)) + end select + else + temp_int = HISTOGRAM + end if + + ! Read and initialize tabular distribution + allocate(temp_real(n)) + call get_node_array(node_dist, "parameters", temp_real) + call energy%initialize(temp_real(1:n), temp_real(n+1:2*n), temp_int) + deallocate(temp_real) + end select + else - ! Set default energy distribution to Watt fission spectrum - external_source % type_energy = SRC_ENERGY_WATT - allocate(external_source % params_energy(2)) - external_source % params_energy = (/ 0.988_8, 2.249_8 /) + ! Default to a Watt spectrum with parameters 0.988 MeV and 2.249 MeV^-1 + allocate(Watt :: external_source%energy) + select type(energy => external_source%energy) + type is (Watt) + energy%a = 0.988_8 + energy%b = 2.249_8 + end select end if end if diff --git a/src/math.F90 b/src/math.F90 index 15aa672e15..6b964684a2 100644 --- a/src/math.F90 +++ b/src/math.F90 @@ -557,6 +557,55 @@ contains end function calc_rn +!=============================================================================== +! ROTATE_ANGLE rotates direction cosines through a polar angle whose cosine is +! mu and through an azimuthal angle sampled uniformly. Note that this is done +! with direct sampling rather than rejection as is done in MCNP and SERPENT. +!=============================================================================== + + function rotate_angle(uvw0, mu) result(uvw) + real(8), intent(in) :: uvw0(3) ! directional cosine + real(8), intent(in) :: mu ! cosine of angle in lab or CM + real(8) :: uvw(3) ! rotated directional cosine + + real(8) :: phi ! azimuthal angle + real(8) :: sinphi ! sine of azimuthal angle + real(8) :: cosphi ! cosine of azimuthal angle + real(8) :: a ! sqrt(1 - mu^2) + real(8) :: b ! sqrt(1 - w^2) + real(8) :: u0 ! original cosine in x direction + real(8) :: v0 ! original cosine in y direction + real(8) :: w0 ! original cosine in z direction + + ! Copy original directional cosines + u0 = uvw0(1) + v0 = uvw0(2) + w0 = uvw0(3) + + ! Sample azimuthal angle in [0,2pi) + phi = TWO * PI * prn() + + ! Precompute factors to save flops + sinphi = sin(phi) + cosphi = cos(phi) + a = sqrt(max(ZERO, ONE - mu*mu)) + b = sqrt(max(ZERO, ONE - w0*w0)) + + ! Need to treat special case where sqrt(1 - w**2) is close to zero by + ! expanding about the v component rather than the w component + if (b > 1e-10) then + uvw(1) = mu*u0 + a*(u0*w0*cosphi - v0*sinphi)/b + uvw(2) = mu*v0 + a*(v0*w0*cosphi + u0*sinphi)/b + uvw(3) = mu*w0 - a*b*cosphi + else + b = sqrt(ONE - v0*v0) + uvw(1) = mu*u0 + a*(u0*v0*cosphi + w0*sinphi)/b + uvw(2) = mu*v0 - a*b*cosphi + uvw(3) = mu*w0 + a*(v0*w0*cosphi - u0*sinphi)/b + end if + + end function rotate_angle + !=============================================================================== ! MAXWELL_SPECTRUM samples an energy from the Maxwell fission distribution based ! on a direct sampling scheme. The probability distribution function for a diff --git a/src/physics.F90 b/src/physics.F90 index a01a3a30cb..217d232182 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -9,7 +9,7 @@ module physics use global use interpolation, only: interpolate_tab1 use material_header, only: Material - use math, only: maxwell_spectrum, watt_spectrum + use math, only: rotate_angle, maxwell_spectrum, watt_spectrum use mesh, only: get_mesh_indices use output, only: write_message use particle_header, only: Particle @@ -1517,55 +1517,6 @@ contains end function sample_angle -!=============================================================================== -! ROTATE_ANGLE rotates direction cosines through a polar angle whose cosine is -! mu and through an azimuthal angle sampled uniformly. Note that this is done -! with direct sampling rather than rejection as is done in MCNP and SERPENT. -!=============================================================================== - - function rotate_angle(uvw0, mu) result(uvw) - real(8), intent(in) :: uvw0(3) ! directional cosine - real(8), intent(in) :: mu ! cosine of angle in lab or CM - real(8) :: uvw(3) ! rotated directional cosine - - real(8) :: phi ! azimuthal angle - real(8) :: sinphi ! sine of azimuthal angle - real(8) :: cosphi ! cosine of azimuthal angle - real(8) :: a ! sqrt(1 - mu^2) - real(8) :: b ! sqrt(1 - w^2) - real(8) :: u0 ! original cosine in x direction - real(8) :: v0 ! original cosine in y direction - real(8) :: w0 ! original cosine in z direction - - ! Copy original directional cosines - u0 = uvw0(1) - v0 = uvw0(2) - w0 = uvw0(3) - - ! Sample azimuthal angle in [0,2pi) - phi = TWO * PI * prn() - - ! Precompute factors to save flops - sinphi = sin(phi) - cosphi = cos(phi) - a = sqrt(max(ZERO, ONE - mu*mu)) - b = sqrt(max(ZERO, ONE - w0*w0)) - - ! Need to treat special case where sqrt(1 - w**2) is close to zero by - ! expanding about the v component rather than the w component - if (b > 1e-10) then - uvw(1) = mu*u0 + a*(u0*w0*cosphi - v0*sinphi)/b - uvw(2) = mu*v0 + a*(v0*w0*cosphi + u0*sinphi)/b - uvw(3) = mu*w0 - a*b*cosphi - else - b = sqrt(ONE - v0*v0) - uvw(1) = mu*u0 + a*(u0*v0*cosphi + w0*sinphi)/b - uvw(2) = mu*v0 - a*b*cosphi - uvw(3) = mu*w0 + a*(v0*w0*cosphi - u0*sinphi)/b - end if - - end function rotate_angle - !=============================================================================== ! SAMPLE_ENERGY samples an outgoing energy distribution, either for a secondary ! neutron from a collision or for a prompt/delayed fission neutron diff --git a/src/random_lcg.F90 b/src/random_lcg.F90 index 1ebe651d3c..8f50477c5b 100644 --- a/src/random_lcg.F90 +++ b/src/random_lcg.F90 @@ -7,6 +7,9 @@ module random_lcg private save + ! Random number seed + integer(8), public :: seed = 1_8 + integer(8) :: prn_seed0 ! original seed integer(8) :: prn_seed(N_STREAMS) ! current seed integer(8) :: prn_mult ! multiplication factor, g @@ -56,8 +59,6 @@ contains subroutine initialize_prng() - use global, only: seed - integer :: i prn_seed0 = seed diff --git a/src/relaxng/settings.rnc b/src/relaxng/settings.rnc index a95b1f297e..e29b4e22bf 100644 --- a/src/relaxng/settings.rnc +++ b/src/relaxng/settings.rnc @@ -69,27 +69,24 @@ element settings { element space { (element type { xsd:string { maxLength = "16" } } | attribute type { xsd:string { maxLength = "16" } }) & - (element length { xsd:int } | attribute length { xsd:int })? & (element interpolation { xsd:string { maxLength = "10" } } | - attribute interplation { xsd:string { maxLength = "10" } })? & + attribute interpolation { xsd:string { maxLength = "10" } })? & (element parameters { list { xsd:double+ } } | attribute parameters { list { xsd:double+ } })? }? & element angle { (element type { xsd:string { maxLength = "16" } } | attribute type { xsd:string { maxLength = "16" } }) & - (element length { xsd:int } | attribute length { xsd:int })? & (element interpolation { xsd:string { maxLength = "10" } } | - attribute interplation { xsd:string { maxLength = "10" } })? & + attribute interpolation { xsd:string { maxLength = "10" } })? & (element parameters { list { xsd:double+ } } | attribute parameters { list { xsd:double+ } })? }? & element energy { (element type { xsd:string { maxLength = "16" } } | attribute type { xsd:string { maxLength = "16" } }) & - (element length { xsd:int } | attribute length { xsd:int })? & (element interpolation { xsd:string { maxLength = "10" } } | - attribute interplation { xsd:string { maxLength = "10" } })? & + attribute interpolation { xsd:string { maxLength = "10" } })? & (element parameters { list { xsd:double+ } } | attribute parameters { list { xsd:double+ } })? }? & diff --git a/src/relaxng/settings.rng b/src/relaxng/settings.rng index 8dd1a6febc..3536f3bd35 100644 --- a/src/relaxng/settings.rng +++ b/src/relaxng/settings.rng @@ -289,16 +289,6 @@ - - - - - - - - - - @@ -306,7 +296,7 @@ 10 - + 10 @@ -349,16 +339,6 @@ - - - - - - - - - - @@ -366,7 +346,7 @@ 10 - + 10 @@ -409,16 +389,6 @@ - - - - - - - - - - @@ -426,7 +396,7 @@ 10 - + 10 diff --git a/src/source.F90 b/src/source.F90 index a16eb245d0..c0181e844e 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -2,6 +2,7 @@ module source use bank_header, only: Bank use constants + use distribution_header, only: Delta use error, only: fatal_error use geometry, only: find_cell use geometry_header, only: BASE_UNIVERSE @@ -100,12 +101,8 @@ contains integer :: i ! dummy loop index real(8) :: r(3) ! sampled coordinates - real(8) :: phi ! azimuthal angle - real(8) :: mu ! cosine of polar angle real(8) :: p_min(3) ! minimum coordinates of source real(8) :: p_max(3) ! maximum coordinates of source - real(8) :: a ! Arbitrary parameter 'a' - real(8) :: b ! Arbitrary parameter 'b' logical :: found ! Does the source particle exist within geometry? type(Particle) :: p ! Temporary particle for using find_cell integer, save :: num_resamples = 0 ! Number of resamples encountered @@ -188,58 +185,28 @@ contains end select ! Sample angle - select case (external_source%type_angle) - case (SRC_ANGLE_ISOTROPIC) - ! Sample isotropic distribution - phi = TWO*PI*prn() - mu = TWO*prn() - ONE - site%uvw(1) = mu - site%uvw(2) = sqrt(ONE - mu*mu) * cos(phi) - site%uvw(3) = sqrt(ONE - mu*mu) * sin(phi) + site%uvw(:) = external_source%angle%sample() - case (SRC_ANGLE_MONO) - ! Monodirectional source - site%uvw = external_source%params_angle - - case default - call fatal_error("No angle distribution specified for external source!") - end select - - ! Sample energy distribution - select case (external_source%type_energy) - case (SRC_ENERGY_MONO) - ! Monoenergtic source - site%E = external_source%params_energy(1) - if (site%E >= energy_max_neutron) then + ! Check for monoenergetic source above maximum neutron energy + select type (energy => external_source%energy) + type is (Delta) + if (energy%x0 >= energy_max_neutron) then call fatal_error("Source energy above range of energies of at least & &one cross section table") end if - - case (SRC_ENERGY_MAXWELL) - a = external_source%params_energy(1) - do - ! Sample Maxwellian fission spectrum - site%E = maxwell_spectrum(a) - - ! resample if energy is greater than maximum neutron energy - if (site%E < energy_max_neutron) exit - end do - - case (SRC_ENERGY_WATT) - a = external_source%params_energy(1) - b = external_source%params_energy(2) - do - ! Sample Watt fission spectrum - site%E = watt_spectrum(a, b) - - ! resample if energy is greater than maximum neutron energy - if (site%E < energy_max_neutron) exit - end do - - case default - call fatal_error("No energy distribution specified for external source!") end select + do + ! Sample energy spectrum + site%E = external_source%energy%sample() + + ! resample if energy is greater than maximum neutron energy + if (site%E < energy_max_neutron) exit + end do + + ! Set delayed group + site%delayed_group = 0 + ! Set the random number generator back to the tracking stream. call prn_set_stream(STREAM_TRACKING) diff --git a/src/source_header.F90 b/src/source_header.F90 index 11c74d110c..767b1bb654 100644 --- a/src/source_header.F90 +++ b/src/source_header.F90 @@ -1,5 +1,7 @@ module source_header + use distribution_header, only: Distribution, AngleDistribution + implicit none !=============================================================================== @@ -9,11 +11,9 @@ module source_header type ExtSource integer :: type_space ! spacial distribution, e.g. 'box' or 'point' - integer :: type_angle ! angle distribution, e.g. 'isotropic' - integer :: type_energy ! energy distribution, e.g. 'Watt' real(8), allocatable :: params_space(:) ! parameters for spatial distribution - real(8), allocatable :: params_angle(:) ! parameters for angle distribution - real(8), allocatable :: params_energy(:) ! parameters for energy distribution + type(AngleDistribution) :: angle ! angle distribution + class(Distribution), allocatable :: energy ! energy distribution end type ExtSource end module source_header diff --git a/src/state_point.F90 b/src/state_point.F90 index 046c857fd2..e89cdf12a8 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -22,6 +22,7 @@ module state_point use tally_header, only: TallyObject use mesh_header, only: RegularMesh use dict_header, only: ElemKeyValueII, ElemKeyValueCI + use random_lcg, only: seed #ifdef MPI use message_passing From 414610307db24075080d7cb9345cbe2d8434dc15 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 10 Nov 2015 08:16:36 -0600 Subject: [PATCH 143/650] Sample isotropic angular distributions as before so that test results match. --- src/distribution_header.F90 | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/distribution_header.F90 b/src/distribution_header.F90 index 9b10f636b3..b007b56d30 100644 --- a/src/distribution_header.F90 +++ b/src/distribution_header.F90 @@ -1,6 +1,6 @@ module distribution_header - use constants, only: ZERO, HALF, ONE, HISTOGRAM, LINEAR_LINEAR + use constants, only: ZERO, HALF, ONE, TWO, PI, HISTOGRAM, LINEAR_LINEAR use error, only: fatal_error use math, only: rotate_angle, maxwell_spectrum, watt_spectrum use random_lcg, only: prn @@ -203,14 +203,24 @@ contains class(AngleDistribution), intent(in) :: this real(8) :: uvw(3) + real(8) :: phi real(8) :: mu - mu = this%mu%sample() - if (mu == ONE) then - uvw(:) = this%reference_uvw - else - uvw(:) = rotate_angle(this%reference_uvw, mu) - end if + select type (polar_cos => this%mu) + type is (Uniform) + phi = TWO*PI*prn() + mu = TWO*prn() - ONE + uvw(1) = mu + uvw(2) = sqrt(ONE - mu*mu) * cos(phi) + uvw(3) = sqrt(ONE - mu*mu) * sin(phi) + class default + mu = polar_cos%sample() + if (mu == ONE) then + uvw(:) = this%reference_uvw + else + uvw(:) = rotate_angle(this%reference_uvw, mu) + end if + end select end function angle_sample end module distribution_header From 37c4d86cdcbc3acbc701ca924d4a52e55ff4bc32 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 17 Dec 2015 06:48:21 -0600 Subject: [PATCH 144/650] Split distribution_header into distribution_univariate and distribution_multivariate and extend capabilities for sampling on unit sphere. --- src/distribution_multivariate.F90 | 93 +++++++++++++++++++ ...header.F90 => distribution_univariate.F90} | 49 ++-------- src/global.F90 | 4 +- src/input_xml.F90 | 80 ++++++++-------- src/math.F90 | 17 ++-- src/source.F90 | 2 +- src/source_header.F90 | 5 +- 7 files changed, 162 insertions(+), 88 deletions(-) create mode 100644 src/distribution_multivariate.F90 rename src/{distribution_header.F90 => distribution_univariate.F90} (80%) diff --git a/src/distribution_multivariate.F90 b/src/distribution_multivariate.F90 new file mode 100644 index 0000000000..d5a2d1f056 --- /dev/null +++ b/src/distribution_multivariate.F90 @@ -0,0 +1,93 @@ +module distribution_multivariate + + use constants, only: ONE, TWO, PI + use distribution_univariate, only: Distribution + use math, only: rotate_angle + use random_lcg, only: prn + +!=============================================================================== +! UNITSPHEREDISTRIBUTION type defines a probability density function for points +! on the unit sphere. Extensions of this type are used to sample angular +! distributions for starting soures +!=============================================================================== + + type, abstract :: UnitSphereDistribution + real(8) :: reference_uvw(3) + contains + procedure(iSample), deferred :: sample + end type UnitSphereDistribution + + abstract interface + function iSample(this) result(uvw) + import UnitSphereDistribution + class(UnitSphereDistribution), intent(in) :: this + real(8) :: uvw(3) + end function iSample + end interface + +!=============================================================================== +! Derived classes of UnitSphereDistribution +!=============================================================================== + + ! Explicit distribution of polar and azimuthal angles + type, extends(UnitSphereDistribution) :: PolarAzimuthal + class(Distribution), allocatable :: mu + class(Distribution), allocatable :: phi + contains + procedure :: sample => polar_azimuthal_sample + end type PolarAzimuthal + + ! Uniform distribution on the unit sphere + type, extends(UnitSphereDistribution) :: Isotropic + contains + procedure :: sample => isotropic_sample + end type Isotropic + + ! Monodirectional distribution + type, extends(UnitSphereDistribution) :: Monodirectional + contains + procedure :: sample => monodirectional_sample + end type Monodirectional + +contains + + function polar_azimuthal_sample(this) result(uvw) + class(PolarAzimuthal), intent(in) :: this + real(8) :: uvw(3) + + real(8) :: mu ! cosine of polar angle + real(8) :: phi ! azimuthal angle + + ! Sample cosine of polar angle + mu = this%mu%sample() + if (mu == ONE) then + uvw(:) = this%reference_uvw + else + ! Sample azimuthal angle + phi = this%phi%sample() + uvw(:) = rotate_angle(this%reference_uvw, mu, phi) + end if + end function polar_azimuthal_sample + + function isotropic_sample(this) result(uvw) + class(Isotropic), intent(in) :: this + real(8) :: uvw(3) + + real(8) :: phi + real(8) :: mu + + phi = TWO*PI*prn() + mu = TWO*prn() - ONE + uvw(1) = mu + uvw(2) = sqrt(ONE - mu*mu) * cos(phi) + uvw(3) = sqrt(ONE - mu*mu) * sin(phi) + end function isotropic_sample + + function monodirectional_sample(this) result(uvw) + class(Monodirectional), intent(in) :: this + real(8) :: uvw(3) + + uvw(:) = this%reference_uvw + end function monodirectional_sample + +end module distribution_multivariate diff --git a/src/distribution_header.F90 b/src/distribution_univariate.F90 similarity index 80% rename from src/distribution_header.F90 rename to src/distribution_univariate.F90 index b007b56d30..6166422f3a 100644 --- a/src/distribution_header.F90 +++ b/src/distribution_univariate.F90 @@ -1,8 +1,8 @@ -module distribution_header +module distribution_univariate - use constants, only: ZERO, HALF, ONE, TWO, PI, HISTOGRAM, LINEAR_LINEAR + use constants, only: ZERO, HALF, HISTOGRAM, LINEAR_LINEAR use error, only: fatal_error - use math, only: rotate_angle, maxwell_spectrum, watt_spectrum + use math, only: maxwell_spectrum, watt_spectrum use random_lcg, only: prn !=============================================================================== @@ -14,6 +14,10 @@ module distribution_header procedure(iSample), deferred :: sample end type Distribution + type DistributionContainer + class(Distribution), allocatable :: obj + end type DistributionContainer + abstract interface function iSample(this) result(x) import Distribution @@ -61,23 +65,12 @@ module distribution_header integer :: interpolation real(8), allocatable :: x(:) ! tabulated independent variable real(8), allocatable :: p(:) ! tabulated probability density - real(8), allocatable, private :: c(:) ! cumulative distribution at tabulated values + real(8), allocatable :: c(:) ! cumulative distribution at tabulated values contains procedure :: sample => tabular_sample procedure :: initialize => tabular_initialize end type Tabular -!=============================================================================== -! AngleDistribution -!=============================================================================== - - type :: AngleDistribution - real(8) :: reference_uvw(3) - class(Distribution), allocatable :: mu - contains - procedure :: sample => angle_sample - end type AngleDistribution - contains function delta_sample(this) result(x) @@ -199,28 +192,4 @@ contains this%c(:) = this%c(:)/this%c(n) end subroutine tabular_initialize - function angle_sample(this) result(uvw) - class(AngleDistribution), intent(in) :: this - real(8) :: uvw(3) - - real(8) :: phi - real(8) :: mu - - select type (polar_cos => this%mu) - type is (Uniform) - phi = TWO*PI*prn() - mu = TWO*prn() - ONE - uvw(1) = mu - uvw(2) = sqrt(ONE - mu*mu) * cos(phi) - uvw(3) = sqrt(ONE - mu*mu) * sin(phi) - class default - mu = polar_cos%sample() - if (mu == ONE) then - uvw(:) = this%reference_uvw - else - uvw(:) = rotate_angle(this%reference_uvw, mu) - end if - end select - end function angle_sample - -end module distribution_header +end module distribution_univariate diff --git a/src/global.F90 b/src/global.F90 index b030aab545..e8d20a72b2 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -452,8 +452,8 @@ contains ! Deallocate external source if (allocated(external_source % params_space)) & deallocate(external_source % params_space) - if (allocated(external_source % angle % mu)) & - deallocate(external_source % angle % mu) + if (allocated(external_source % angle)) & + deallocate(external_source % angle) if (allocated(external_source % energy)) & deallocate(external_source % energy) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index eb48e1d6f6..f022da8ee4 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -3,7 +3,8 @@ module input_xml use cmfd_input, only: configure_cmfd use constants use dict_header, only: DictIntInt, ElemKeyValueCI - use distribution_header + use distribution_multivariate + use distribution_univariate use energy_grid, only: grid_method, n_log_bins use error, only: fatal_error, warning use geometry_header, only: Cell, Lattice, RectLattice, HexLattice @@ -438,17 +439,29 @@ contains call get_node_value(node_dist, "type", type) select case (to_lower(type)) case ('isotropic') - allocate(Uniform :: external_source%angle%mu) + allocate(Isotropic :: external_source%angle) case ('monodirectional') - allocate(Delta :: external_source%angle%mu) + allocate(Monodirectional :: external_source%angle) if (n /= 3) then call fatal_error('Monodirectional angular distribution must have & &three parameters specified.') end if case ('tabular') - allocate(Tabular :: external_source%angle%mu) + allocate(PolarAzimuthal :: external_source%angle) + select type (angle => external_source%angle) + type is (PolarAzimuthal) + allocate(Tabular :: angle%mu) + + ! For now, azimuthal is uniform + allocate(Uniform :: angle%phi) + select type (phi => angle%phi) + type is (Uniform) + phi%a = ZERO + phi%b = TWO*PI + end select + end select case default call fatal_error("Invalid angular distribution for external source: "& @@ -459,48 +472,41 @@ contains external_source%angle%reference_uvw(:) = [ZERO, ZERO, ONE] ! Read parameters for angle distribution - select type (mu => external_source%angle%mu) - type is (Uniform) - mu%a = -ONE - mu%b = ONE - - type is (Delta) - mu%x0 = ONE + select type (angle => external_source%angle) + type is (Monodirectional) call get_node_array(node_dist, "parameters", & external_source%angle%reference_uvw) - type is (Tabular) - ! Read interpolation - if (check_for_node(node_source, "interpolation")) then - call get_node_value(node_source, "interpolation", temp_str) - select case(to_lower(temp_str)) - case ('histogram') + type is (PolarAzimuthal) + select type (mu => angle%mu) + type is (Tabular) + ! Read interpolation + if (check_for_node(node_source, "interpolation")) then + call get_node_value(node_source, "interpolation", temp_str) + select case(to_lower(temp_str)) + case ('histogram') + temp_int = HISTOGRAM + case ('linear-linear') + temp_int = LINEAR_LINEAR + case default + call fatal_error("Unknown interpolation type for source & + &angular distribution: " // trim(temp_str)) + end select + else temp_int = HISTOGRAM - case ('linear-linear') - temp_int = LINEAR_LINEAR - case default - call fatal_error("Unknown interpolation type for source & - &angular distribution: " // trim(temp_str)) - end select - else - temp_int = HISTOGRAM - end if + end if - ! Read and initialize tabular distribution - allocate(temp_real(n)) - call get_node_array(node_dist, "parameters", temp_real) - call mu%initialize(temp_real(1:n), temp_real(n+1:2*n), temp_int) - deallocate(temp_real) + ! Read and initialize tabular distribution + allocate(temp_real(n)) + call get_node_array(node_dist, "parameters", temp_real) + call mu%initialize(temp_real(1:n), temp_real(n+1:2*n), temp_int) + deallocate(temp_real) + end select end select else ! Set default angular distribution isotropic - allocate(Uniform :: external_source%angle%mu) - select type(mu => external_source%angle%mu) - type is (Uniform) - mu%a = -ONE - mu%b = ONE - end select + allocate(Isotropic :: external_source%angle) external_source%angle%reference_uvw(:) = [ZERO, ZERO, ONE] end if diff --git a/src/math.F90 b/src/math.F90 index 6b964684a2..9a64c88d7d 100644 --- a/src/math.F90 +++ b/src/math.F90 @@ -563,12 +563,13 @@ contains ! with direct sampling rather than rejection as is done in MCNP and SERPENT. !=============================================================================== - function rotate_angle(uvw0, mu) result(uvw) + function rotate_angle(uvw0, mu, phi) result(uvw) real(8), intent(in) :: uvw0(3) ! directional cosine real(8), intent(in) :: mu ! cosine of angle in lab or CM + real(8), optional :: phi ! azimuthal angle real(8) :: uvw(3) ! rotated directional cosine - real(8) :: phi ! azimuthal angle + real(8) :: phi_ ! azimuthal angle real(8) :: sinphi ! sine of azimuthal angle real(8) :: cosphi ! cosine of azimuthal angle real(8) :: a ! sqrt(1 - mu^2) @@ -582,12 +583,16 @@ contains v0 = uvw0(2) w0 = uvw0(3) - ! Sample azimuthal angle in [0,2pi) - phi = TWO * PI * prn() + ! Sample azimuthal angle in [0,2pi) if none provided + if (present(phi)) then + phi_ = phi + else + phi_ = TWO * PI * prn() + end if ! Precompute factors to save flops - sinphi = sin(phi) - cosphi = cos(phi) + sinphi = sin(phi_) + cosphi = cos(phi_) a = sqrt(max(ZERO, ONE - mu*mu)) b = sqrt(max(ZERO, ONE - w0*w0)) diff --git a/src/source.F90 b/src/source.F90 index c0181e844e..ff5d2d4df9 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -2,7 +2,7 @@ module source use bank_header, only: Bank use constants - use distribution_header, only: Delta + use distribution_univariate, only: Delta use error, only: fatal_error use geometry, only: find_cell use geometry_header, only: BASE_UNIVERSE diff --git a/src/source_header.F90 b/src/source_header.F90 index 767b1bb654..f52afb9194 100644 --- a/src/source_header.F90 +++ b/src/source_header.F90 @@ -1,6 +1,7 @@ module source_header - use distribution_header, only: Distribution, AngleDistribution + use distribution_univariate, only: Distribution + use distribution_multivariate, only: UnitSphereDistribution implicit none @@ -12,7 +13,7 @@ module source_header type ExtSource integer :: type_space ! spacial distribution, e.g. 'box' or 'point' real(8), allocatable :: params_space(:) ! parameters for spatial distribution - type(AngleDistribution) :: angle ! angle distribution + class(UnitSphereDistribution), allocatable :: angle ! angle distribution class(Distribution), allocatable :: energy ! energy distribution end type ExtSource From 378eccb2b08b76a67c4d05a1d92a6e9b5099d550 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 17 Dec 2015 11:08:56 -0600 Subject: [PATCH 145/650] Support for discrete univariate probability distribution. --- src/distribution_univariate.F90 | 58 ++++++++++++++++++++++++++++----- src/input_xml.F90 | 8 +++-- src/source.F90 | 6 ++-- 3 files changed, 57 insertions(+), 15 deletions(-) diff --git a/src/distribution_univariate.F90 b/src/distribution_univariate.F90 index 6166422f3a..736b7081bb 100644 --- a/src/distribution_univariate.F90 +++ b/src/distribution_univariate.F90 @@ -30,12 +30,14 @@ module distribution_univariate ! Derived classes of Distribution !=============================================================================== - ! delta function at a single point - type, extends(Distribution) :: Delta - real(8) :: x0 + ! Discrete distribution + type, extends(Distribution) :: Discrete + real(8), allocatable :: x(:) + real(8), allocatable :: p(:) contains - procedure :: sample => delta_sample - end type Delta + procedure :: sample => discrete_sample + procedure :: initialize => discrete_initialize + end type Discrete ! Uniform distribution over the interval [a,b] type, extends(Distribution) :: Uniform @@ -73,12 +75,50 @@ module distribution_univariate contains - function delta_sample(this) result(x) - class(Delta), intent(in) :: this + function discrete_sample(this) result(x) + class(Discrete), intent(in) :: this real(8) :: x - x = this%x0 - end function delta_sample + integer :: n ! size of distribution + real(8) :: c ! cumulative frequency + real(8) :: xi ! sampled CDF value + + n = size(this%x) + if (n > 1) then + xi = prn() + c = ZERO + do i = 1, size(this%x) + c = c + this%p(i) + if (xi < c) exit + end do + x = this%x(i) + else + x = this%x(1) + end if + end function discrete_sample + + subroutine discrete_initialize(this, x, p) + class(Discrete), intent(inout) :: this + real(8), intent(in) :: x(:) + real(8), intent(in) :: p(:) + + integer :: n + + ! Check length of x, p arrays + if (size(x) /= size(p)) then + call fatal_error('Tabulated probabilities not of same length as & + &independent variable.') + end if + + ! Copy probability density function + n = size(x) + allocate(this%x(n), this%p(n)) + this%x(:) = x(:) + this%p(:) = p(:) + + ! Normalize density function + this%p(:) = this%p(:)/sum(this%p) + end subroutine function uniform_sample(this) result(x) class(Uniform), intent(in) :: this diff --git a/src/input_xml.F90 b/src/input_xml.F90 index f022da8ee4..2b812ea20f 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -529,7 +529,7 @@ contains call get_node_value(node_dist, "type", type) select case (to_lower(type)) case ('monoenergetic') - allocate(Delta :: external_source%energy) + allocate(Discrete :: external_source%energy) if (n /= 1) then call fatal_error('Monoenergetic energy distribution must have one & ¶meter specified.') @@ -559,8 +559,10 @@ contains ! Read parameters for energy distribution select type(energy => external_source%energy) - type is (Delta) - call get_node_value(node_dist, "parameters", energy%x0) + type is (Discrete) + allocate(energy%x(1), energy%p(1)) + call get_node_value(node_dist, "parameters", energy%x(1)) + energy%p(1) = ONE type is (Maxwell) call get_node_value(node_dist, "parameters", energy%theta) diff --git a/src/source.F90 b/src/source.F90 index ff5d2d4df9..ae1b7e108e 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -2,7 +2,7 @@ module source use bank_header, only: Bank use constants - use distribution_univariate, only: Delta + use distribution_univariate, only: Discrete use error, only: fatal_error use geometry, only: find_cell use geometry_header, only: BASE_UNIVERSE @@ -189,8 +189,8 @@ contains ! Check for monoenergetic source above maximum neutron energy select type (energy => external_source%energy) - type is (Delta) - if (energy%x0 >= energy_max_neutron) then + type is (Discrete) + if (any(energy%x >= energy_max_neutron)) then call fatal_error("Source energy above range of energies of at least & &one cross section table") end if From 5efb7384e021e233dfecd5c1639133715089c142 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 17 Dec 2015 12:12:39 -0600 Subject: [PATCH 146/650] Add reusable distribution_from_xml subroutine --- src/distribution_univariate.F90 | 110 +++++++++++++++++++++++++++++++- src/string.F90 | 5 +- 2 files changed, 111 insertions(+), 4 deletions(-) diff --git a/src/distribution_univariate.F90 b/src/distribution_univariate.F90 index 736b7081bb..6d85038212 100644 --- a/src/distribution_univariate.F90 +++ b/src/distribution_univariate.F90 @@ -1,9 +1,12 @@ module distribution_univariate - use constants, only: ZERO, HALF, HISTOGRAM, LINEAR_LINEAR + use constants, only: ZERO, HALF, HISTOGRAM, LINEAR_LINEAR, MAX_LINE_LEN, & + MAX_WORD_LEN use error, only: fatal_error use math, only: maxwell_spectrum, watt_spectrum use random_lcg, only: prn + use string, only: to_lower + use xml_interface !=============================================================================== ! DISTRIBUTION type defines a probability density function @@ -232,4 +235,109 @@ contains this%c(:) = this%c(:)/this%c(n) end subroutine tabular_initialize + subroutine distribution_from_xml(dist, node_dist) + class(Distribution), allocatable, intent(inout) :: dist + type(Node), pointer :: node_dist + + character(MAX_WORD_LEN) :: type + character(MAX_LINE_LEN) :: temp_str + integer :: temp_int + real(8), allocatable :: temp_real(:) + + if (check_for_node(node_dist, "type")) then + ! Determine type of distribution + call get_node_value(node_dist, "type", type) + + ! Determine number of parameters specified + if (check_for_node(node_dist, "parameters")) then + n = get_arraysize_double(node_dist, "parameters") + else + n = 0 + end if + + ! Allocate extension of Distribution + select case (to_lower(type)) + case ('uniform') + allocate (Uniform :: dist) + if (n /= 2) then + call fatal_error('Uniform distribution must have two & + ¶meters specified.') + end if + + case ('maxwell') + allocate (Maxwell :: dist) + if (n /= 1) then + call fatal_error('Maxwell energy distribution must have one & + ¶meter specified.') + end if + + case ('watt') + allocate(Watt :: dist) + if (n /= 2) then + call fatal_error('Watt energy distribution must have two & + ¶meters specified.') + end if + + case ('discrete') + allocate(Discrete :: dist) + + case ('tabular') + allocate(Tabular :: dist) + + case default + call fatal_error('Invalid distribution type: ' // trim(type) // '.') + + end select + + ! Read parameters and interpolation for distribution + select type (dist) + type is (Uniform) + allocate(temp_real(2)) + call get_node_array(node_dist, "parameters", temp_real) + dist%a = temp_real(1) + dist%b = temp_real(2) + deallocate(temp_real) + + type is (Maxwell) + call get_node_value(node_dist, "parameters", dist%theta) + + type is (Watt) + allocate(temp_real(2)) + call get_node_array(node_dist, "parameters", temp_real) + dist%a = temp_real(1) + dist%b = temp_real(2) + deallocate(temp_real) + + type is (Discrete) + allocate(temp_real(n)) + call get_node_array(node_dist, "parameters", temp_real) + call dist%initialize(temp_real(1:n/2), temp_real(n/2+1:n)) + deallocate(temp_real) + + type is (Tabular) + ! Read interpolation + if (check_for_node(node_dist, "interpolation")) then + call get_node_value(node_dist, "interpolation", temp_str) + select case(to_lower(temp_str)) + case ('histogram') + temp_int = HISTOGRAM + case ('linear-linear') + temp_int = LINEAR_LINEAR + case default + call fatal_error("Unknown interpolation type for distribution: " & + // trim(temp_str)) + end select + else + temp_int = HISTOGRAM + end if + + ! Read and initialize tabular distribution + allocate(temp_real(n)) + call get_node_array(node_dist, "parameters", temp_real) + call dist%initialize(temp_real(1:n/2), temp_real(n/2+1:n), temp_int) + deallocate(temp_real) + end select + end if + end subroutine distribution_from_xml + end module distribution_univariate diff --git a/src/string.F90 b/src/string.F90 index ce130a212d..b51763a611 100644 --- a/src/string.F90 +++ b/src/string.F90 @@ -3,7 +3,6 @@ module string use constants, only: MAX_WORDS, MAX_LINE_LEN, ERROR_INT, ERROR_REAL, & OP_LEFT_PAREN, OP_RIGHT_PAREN, OP_COMPLEMENT, OP_INTERSECTION, OP_UNION use error, only: fatal_error, warning - use global, only: master use stl_vector, only: VectorInt implicit none @@ -50,8 +49,8 @@ contains if (i_end > 0) then n = n + 1 if (i_end - i_start + 1 > len(words(n))) then - if (master) call warning("The word '" // string(i_start:i_end) & - &// "' is longer than the space allocated for it.") + call warning("The word '" // string(i_start:i_end) & + // "' is longer than the space allocated for it.") end if words(n) = string(i_start:i_end) ! reset indices From 8207028d8c82a47bd451a40eb894a4dca9f828a8 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 17 Dec 2015 15:00:06 -0600 Subject: [PATCH 147/650] Use distribution_from_xml when reading settings.xml --- src/input_xml.F90 | 177 +++++---------------- tests/test_source_angle_mono/settings.xml | 2 +- tests/test_source_energy_mono/settings.xml | 2 +- 3 files changed, 46 insertions(+), 135 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 2b812ea20f..11374b9cf8 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -70,6 +70,7 @@ contains type(Node), pointer :: doc => null() type(Node), pointer :: node_mode => null() type(Node), pointer :: node_source => null() + type(Node), pointer :: node_angle => null() type(Node), pointer :: node_dist => null() type(Node), pointer :: node_cutoff => null() type(Node), pointer :: node_entropy => null() @@ -424,84 +425,78 @@ contains if (check_for_node(node_source, "angle")) then ! Get pointer to angular distribution - call get_node_ptr(node_source, "angle", node_dist) + call get_node_ptr(node_source, "angle", node_angle) ! Determine number of parameters specified - if (check_for_node(node_dist, "parameters")) then - n = get_arraysize_double(node_dist, "parameters") + if (check_for_node(node_angle, "parameters")) then + n = get_arraysize_double(node_angle, "parameters") else n = 0 end if ! Check for type of angular distribution type = '' - if (check_for_node(node_dist, "type")) & - call get_node_value(node_dist, "type", type) + if (check_for_node(node_angle, "type")) & + call get_node_value(node_angle, "type", type) select case (to_lower(type)) case ('isotropic') allocate(Isotropic :: external_source%angle) case ('monodirectional') allocate(Monodirectional :: external_source%angle) - if (n /= 3) then - call fatal_error('Monodirectional angular distribution must have & - &three parameters specified.') - end if - case ('tabular') + case ('mu-phi') allocate(PolarAzimuthal :: external_source%angle) - select type (angle => external_source%angle) - type is (PolarAzimuthal) - allocate(Tabular :: angle%mu) - - ! For now, azimuthal is uniform - allocate(Uniform :: angle%phi) - select type (phi => angle%phi) - type is (Uniform) - phi%a = ZERO - phi%b = TWO*PI - end select - end select case default call fatal_error("Invalid angular distribution for external source: "& // trim(type)) end select - ! Set reference unit vector to be positive z-direction - external_source%angle%reference_uvw(:) = [ZERO, ZERO, ONE] + ! Read reference directional unit vector + if (check_for_node(node_angle, "reference_uvw")) then + n = get_arraysize_double(node_angle, "reference_uvw") + if (n /= 3) then + call fatal_error('Angular distribution reference direction must have & + &three parameters specified.') + end if + call get_node_array(node_angle, "reference_uvw", & + external_source%angle%reference_uvw) + else + ! By default, set reference unit vector to be positive z-direction + external_source%angle%reference_uvw(:) = [ZERO, ZERO, ONE] + end if ! Read parameters for angle distribution select type (angle => external_source%angle) type is (Monodirectional) - call get_node_array(node_dist, "parameters", & + call get_node_array(node_angle, "reference_uvw", & external_source%angle%reference_uvw) type is (PolarAzimuthal) - select type (mu => angle%mu) - type is (Tabular) - ! Read interpolation - if (check_for_node(node_source, "interpolation")) then - call get_node_value(node_source, "interpolation", temp_str) - select case(to_lower(temp_str)) - case ('histogram') - temp_int = HISTOGRAM - case ('linear-linear') - temp_int = LINEAR_LINEAR - case default - call fatal_error("Unknown interpolation type for source & - &angular distribution: " // trim(temp_str)) - end select - else - temp_int = HISTOGRAM - end if + if (check_for_node(node_angle, "mu")) then + call get_node_ptr(node_angle, "mu", node_dist) + call distribution_from_xml(angle%mu, node_dist) + else + allocate(Uniform :: angle%mu) + select type (mu => angle%mu) + type is (Uniform) + mu%a = -ONE + mu%b = ONE + end select + end if - ! Read and initialize tabular distribution - allocate(temp_real(n)) - call get_node_array(node_dist, "parameters", temp_real) - call mu%initialize(temp_real(1:n), temp_real(n+1:2*n), temp_int) - deallocate(temp_real) - end select + if (check_for_node(node_angle, "phi")) then + call get_node_ptr(node_angle, "phi", node_dist) + call distribution_from_xml(angle%phi, node_dist) + else + allocate(Uniform :: angle%phi) + select type (phi => angle%phi) + type is (Uniform) + phi%a = ZERO + phi%b = TWO*PI + end select + end if end select else @@ -512,92 +507,8 @@ contains ! Determine external source energy distribution if (check_for_node(node_source, "energy")) then - - ! Get pointer to energy distribution call get_node_ptr(node_source, "energy", node_dist) - - ! Determine number of parameters specified - if (check_for_node(node_dist, "parameters")) then - n = get_arraysize_double(node_dist, "parameters") - else - n = 0 - end if - - ! Check for type of energy distribution - type = '' - if (check_for_node(node_dist, "type")) & - call get_node_value(node_dist, "type", type) - select case (to_lower(type)) - case ('monoenergetic') - allocate(Discrete :: external_source%energy) - if (n /= 1) then - call fatal_error('Monoenergetic energy distribution must have one & - ¶meter specified.') - end if - - case ('maxwell') - allocate(Maxwell :: external_source%energy) - if (n /= 1) then - call fatal_error('Maxwell energy distribution must have one & - ¶meter specified.') - end if - - case ('watt') - allocate(Watt :: external_source%energy) - if (n /= 2) then - call fatal_error('Watt energy distribution must have two & - ¶meter specified.') - end if - - case ('tabular') - allocate(Tabular :: external_source%energy) - - case default - call fatal_error("Invalid energy distribution for external source: " & - // trim(type)) - end select - - ! Read parameters for energy distribution - select type(energy => external_source%energy) - type is (Discrete) - allocate(energy%x(1), energy%p(1)) - call get_node_value(node_dist, "parameters", energy%x(1)) - energy%p(1) = ONE - - type is (Maxwell) - call get_node_value(node_dist, "parameters", energy%theta) - - type is (Watt) - allocate(temp_real(2)) - call get_node_array(node_dist, "parameters", temp_real) - energy%a = temp_real(1) - energy%b = temp_real(2) - deallocate(temp_real) - - type is (Tabular) - ! Read interpolation - if (check_for_node(node_dist, "interpolation")) then - call get_node_value(node_dist, "interpolation", temp_str) - select case(to_lower(temp_str)) - case ('histogram') - temp_int = HISTOGRAM - case ('linear-linear') - temp_int = LINEAR_LINEAR - case default - call fatal_error("Unknown interpolation type for source & - &angular distribution: " // trim(temp_str)) - end select - else - temp_int = HISTOGRAM - end if - - ! Read and initialize tabular distribution - allocate(temp_real(n)) - call get_node_array(node_dist, "parameters", temp_real) - call energy%initialize(temp_real(1:n), temp_real(n+1:2*n), temp_int) - deallocate(temp_real) - end select - + call distribution_from_xml(external_source%energy, node_dist) else ! Default to a Watt spectrum with parameters 0.988 MeV and 2.249 MeV^-1 allocate(Watt :: external_source%energy) diff --git a/tests/test_source_angle_mono/settings.xml b/tests/test_source_angle_mono/settings.xml index 5029aa816c..dd88bbad29 100644 --- a/tests/test_source_angle_mono/settings.xml +++ b/tests/test_source_angle_mono/settings.xml @@ -9,7 +9,7 @@ - + diff --git a/tests/test_source_energy_mono/settings.xml b/tests/test_source_energy_mono/settings.xml index 9093efec97..be271b6113 100644 --- a/tests/test_source_energy_mono/settings.xml +++ b/tests/test_source_energy_mono/settings.xml @@ -9,7 +9,7 @@ - + From efc7d2ecbf04159d767f58940eebc64cbc3d5b96 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 17 Dec 2015 16:41:12 -0600 Subject: [PATCH 148/650] Expand spatial distribution capabilities, notably independent x,y,z distributions. --- src/constants.F90 | 22 --- src/distribution_multivariate.F90 | 67 +++++++ src/global.F90 | 9 +- src/input_xml.F90 | 117 +++++++++--- src/relaxng/settings.rnc | 56 +++--- src/relaxng/settings.rng | 304 +++++++++++++++--------------- src/source.F90 | 98 ++++------ src/source_header.F90 | 7 +- 8 files changed, 372 insertions(+), 308 deletions(-) diff --git a/src/constants.F90 b/src/constants.F90 index 8eabdaf604..d51b039bbe 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -357,28 +357,6 @@ module constants integer, parameter :: STREAM_TALLIES = 2 integer, parameter :: STREAM_SOURCE = 3 - ! ============================================================================ - ! EXTERNAL SOURCE PARAMETERS - - ! Source spatial distribution types - integer, parameter :: & - SRC_SPACE_BOX = 1, & ! Source in a rectangular prism - SRC_SPACE_POINT = 2, & ! Source at a single point - SRC_SPACE_FISSION = 3 ! Source in prism filtered by fissionable mats - - ! Source angular distribution types - integer, parameter :: & - SRC_ANGLE_ISOTROPIC = 1, & ! Isotropic angular - SRC_ANGLE_MONO = 2, & ! Monodirectional source - SRC_ANGLE_TABULAR = 3 ! Tabular distribution - - ! Source energy distribution types - integer, parameter :: & - SRC_ENERGY_MONO = 1, & ! Monoenergetic source - SRC_ENERGY_MAXWELL = 2, & ! Maxwell fission spectrum - SRC_ENERGY_WATT = 3, & ! Watt fission spectrum - SRC_ENERGY_TABULAR = 4 ! Tabular distribution - ! ============================================================================ ! MISCELLANEOUS CONSTANTS diff --git a/src/distribution_multivariate.F90 b/src/distribution_multivariate.F90 index d5a2d1f056..970311d7b8 100644 --- a/src/distribution_multivariate.F90 +++ b/src/distribution_multivariate.F90 @@ -49,6 +49,46 @@ module distribution_multivariate procedure :: sample => monodirectional_sample end type Monodirectional +!=============================================================================== +! SPATIALDISTRIBUTION type defines a probability density function for arbitrary +! points in Euclidean space. +!=============================================================================== + + type, abstract :: SpatialDistribution + contains + procedure(iSampleSpatial), deferred :: sample + end type SpatialDistribution + + abstract interface + function iSampleSpatial(this) result(xyz) + import SpatialDistribution + class(SpatialDistribution), intent(in) :: this + real(8) :: xyz(3) + end function iSampleSpatial + end interface + + type, extends(SpatialDistribution) :: SpatialIndependent + class(Distribution), allocatable :: x + class(Distribution), allocatable :: y + class(Distribution), allocatable :: z + contains + procedure :: sample => spatial_independent_sample + end type SpatialIndependent + + type, extends(SpatialDistribution) :: SpatialBox + real(8) :: lower_left(3) + real(8) :: upper_right(3) + logical :: only_fissionable = .false. + contains + procedure :: sample => spatial_box_sample + end type SpatialBox + + type, extends(SpatialDistribution) :: SpatialPoint + real(8) :: xyz(3) + contains + procedure :: sample => spatial_point_sample + end type SpatialPoint + contains function polar_azimuthal_sample(this) result(uvw) @@ -90,4 +130,31 @@ contains uvw(:) = this%reference_uvw end function monodirectional_sample + function spatial_independent_sample(this) result(xyz) + class(SpatialIndependent), intent(in) :: this + real(8) :: xyz(3) + + xyz(1) = this%x%sample() + xyz(2) = this%y%sample() + xyz(3) = this%z%sample() + end function spatial_independent_sample + + function spatial_box_sample(this) result(xyz) + class(SpatialBox), intent(in) :: this + real(8) :: xyz(3) + + integer :: i + real(8) :: r(3) + + r = [ (prn(), i = 1,3) ] + xyz(:) = this%lower_left + r*(this%upper_right - this%lower_left) + end function spatial_box_sample + + function spatial_point_sample(this) result(xyz) + class(SpatialPoint), intent(in) :: this + real(8) :: xyz(3) + + xyz(:) = this%xyz + end function spatial_point_sample + end module distribution_multivariate diff --git a/src/global.F90 b/src/global.F90 index e8d20a72b2..50974282c1 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -450,12 +450,9 @@ contains if (allocated(micro_xs)) deallocate(micro_xs) ! Deallocate external source - if (allocated(external_source % params_space)) & - deallocate(external_source % params_space) - if (allocated(external_source % angle)) & - deallocate(external_source % angle) - if (allocated(external_source % energy)) & - deallocate(external_source % energy) + if (allocated(external_source % space)) deallocate(external_source % space) + if (allocated(external_source % angle)) deallocate(external_source % angle) + if (allocated(external_source % energy)) deallocate(external_source % energy) ! Deallocate k and entropy if (allocated(k_generation)) deallocate(k_generation) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 11374b9cf8..f4211bfb3a 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -70,6 +70,7 @@ contains type(Node), pointer :: doc => null() type(Node), pointer :: node_mode => null() type(Node), pointer :: node_source => null() + type(Node), pointer :: node_space => null() type(Node), pointer :: node_angle => null() type(Node), pointer :: node_dist => null() type(Node), pointer :: node_cutoff => null() @@ -376,46 +377,106 @@ contains if (check_for_node(node_source, "space")) then ! Get pointer to spatial distribution - call get_node_ptr(node_source, "space", node_dist) + call get_node_ptr(node_source, "space", node_space) ! Check for type of spatial distribution type = '' - if (check_for_node(node_dist, "type")) & - call get_node_value(node_dist, "type", type) + if (check_for_node(node_space, "type")) & + call get_node_value(node_space, "type", type) select case (to_lower(type)) + case ('independent') + allocate(SpatialIndependent :: external_source%space) + case ('box') - external_source % type_space = SRC_SPACE_BOX - coeffs_reqd = 6 + allocate(SpatialBox :: external_source%space) + case ('fission') - external_source % type_space = SRC_SPACE_FISSION - coeffs_reqd = 6 + allocate(SpatialBox :: external_source%space) + select type(space => external_source%space) + type is (SpatialBox) + space%only_fissionable = .true. + end select + case ('point') - external_source % type_space = SRC_SPACE_POINT - coeffs_reqd = 3 + allocate(SpatialPoint :: external_source%space) + case default call fatal_error("Invalid spatial distribution for external source: "& - &// trim(type)) + // trim(type)) end select - ! Determine number of parameters specified - if (check_for_node(node_dist, "parameters")) then - n = get_arraysize_double(node_dist, "parameters") - else - n = 0 - end if + select type (space => external_source%space) + type is (SpatialIndependent) + ! Read distribution for x coordinate + if (check_for_node(node_space, "x")) then + call get_node_ptr(node_space, "x", node_dist) + call distribution_from_xml(space%x, node_dist) + else + allocate(Discrete :: space%x) + select type (dist => space%x) + type is (Discrete) + allocate(dist%x(1), dist%p(1)) + dist%x(1) = ZERO + dist%p(1) = ONE + end select + end if + + ! Read distribution for y coordinate + if (check_for_node(node_space, "y")) then + call get_node_ptr(node_space, "y", node_dist) + call distribution_from_xml(space%y, node_dist) + else + allocate(Discrete :: space%y) + select type (dist => space%y) + type is (Discrete) + allocate(dist%x(1), dist%p(1)) + dist%x(1) = ZERO + dist%p(1) = ONE + end select + end if + + if (check_for_node(node_space, "z")) then + call get_node_ptr(node_space, "z", node_dist) + call distribution_from_xml(space%z, node_dist) + else + allocate(Discrete :: space%z) + select type (dist => space%z) + type is (Discrete) + allocate(dist%x(1), dist%p(1)) + dist%x(1) = ZERO + dist%p(1) = ONE + end select + end if + + type is (SpatialBox) + ! Make sure correct number of parameters are given + if (get_arraysize_double(node_space, "parameters") /= 6) then + call fatal_error('Box/fission spatial source must have & + &six parameters specified.') + end if + + ! Read lower-right/upper-left coordinates + allocate(temp_real(6)) + call get_node_array(node_space, "parameters", temp_real) + space%lower_left(:) = temp_real(1:3) + space%upper_right(:) = temp_real(4:6) + deallocate(temp_real) + + type is (SpatialPoint) + ! Make sure correct number of parameters are given + if (get_arraysize_double(node_space, "parameters") /= 3) then + call fatal_error('Point spatial source must have & + &three parameters specified.') + end if + + ! Read location of point source + allocate(temp_real(3)) + call get_node_array(node_space, "parameters", temp_real) + space%xyz(:) = temp_real + deallocate(temp_real) + + end select - ! Read parameters for spatial distribution - if (n < coeffs_reqd) then - call fatal_error("Not enough parameters specified for spatial & - &distribution of external source.") - elseif (n > coeffs_reqd) then - call fatal_error("Too many parameters specified for spatial & - &distribution of external source.") - elseif (n > 0) then - allocate(external_source % params_space(n)) - call get_node_array(node_dist, "parameters", & - external_source % params_space) - end if else call fatal_error("No spatial distribution specified for external & &source.") diff --git a/src/relaxng/settings.rnc b/src/relaxng/settings.rnc index e29b4e22bf..6bbd187b5b 100644 --- a/src/relaxng/settings.rnc +++ b/src/relaxng/settings.rnc @@ -64,33 +64,37 @@ element settings { element seed { xsd:positiveInteger }? & + + element source { - element file { xsd:string { maxLength = "255" } }? & - element space { - (element type { xsd:string { maxLength = "16" } } | - attribute type { xsd:string { maxLength = "16" } }) & - (element interpolation { xsd:string { maxLength = "10" } } | - attribute interpolation { xsd:string { maxLength = "10" } })? & - (element parameters { list { xsd:double+ } } | - attribute parameters { list { xsd:double+ } })? - }? & - element angle { - (element type { xsd:string { maxLength = "16" } } | - attribute type { xsd:string { maxLength = "16" } }) & - (element interpolation { xsd:string { maxLength = "10" } } | - attribute interpolation { xsd:string { maxLength = "10" } })? & - (element parameters { list { xsd:double+ } } | - attribute parameters { list { xsd:double+ } })? - }? & - element energy { - (element type { xsd:string { maxLength = "16" } } | - attribute type { xsd:string { maxLength = "16" } }) & - (element interpolation { xsd:string { maxLength = "10" } } | - attribute interpolation { xsd:string { maxLength = "10" } })? & - (element parameters { list { xsd:double+ } } | - attribute parameters { list { xsd:double+ } })? - }? & - (element write_initial { xsd:boolean } | attribute write_initial { xsd:boolean })? + grammar { + start = + element file { xsd:string { maxLength = "255" } }? & + element space { + (element type { xsd:string } | attribute type { xsd:string }) & + (element parameters { xsd:double+ } | + attribute parameters { xsd:double+ })? & + element x { distribution }? & + element y { distribution }? & + element z { distribution }? + }? & + element angle { + (element type { xsd:string } | attribute type { xsd:string }) & + (element reference_uvw { xsd:double, xsd:double, xsd:double } | + attribute reference_uvw { xsd:double, xsd:double, xsd:double })? & + element mu { distribution }? & + element phi { distribution }? + }? & + element energy { distribution }? & + (element write_initial { xsd:boolean } | attribute write_initial { xsd:boolean })? + distribution = + (element type { xsd:string { maxLength = "16" } } | + attribute type { xsd:string { maxLength = "16" } }) & + (element interpolation { xsd:string { maxLength = "10" } } | + attribute interpolation { xsd:string { maxLength = "10" } })? & + (element parameters { list { xsd:double+ } } | + attribute parameters { list { xsd:double+ } })? + } }? & element state_point { diff --git a/src/relaxng/settings.rng b/src/relaxng/settings.rng index 3536f3bd35..9fd2dcf2a4 100644 --- a/src/relaxng/settings.rng +++ b/src/relaxng/settings.rng @@ -266,175 +266,165 @@ - - - - - 255 - - - - - - + + + + + + + 255 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + 16 + + + + + 16 + + + + + + - 16 + 10 - + - 16 + 10 - - - - - 10 - - - - - 10 - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - 16 - + + + + + + - - - 16 - + + + + + + - - - - - 10 - - - - - 10 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 16 - - - - - 16 - - - - - - - - 10 - - - - - 10 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + diff --git a/src/source.F90 b/src/source.F90 index ae1b7e108e..2ac68a3149 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -3,6 +3,7 @@ module source use bank_header, only: Bank use constants use distribution_univariate, only: Discrete + use distribution_multivariate, only: SpatialBox use error, only: fatal_error use geometry, only: find_cell use geometry_header, only: BASE_UNIVERSE @@ -113,76 +114,43 @@ contains ! Set the random number generator to the source stream. call prn_set_stream(STREAM_SOURCE) - ! Sample position - select case (external_source%type_space) - case (SRC_SPACE_BOX) - ! Set particle defaults - call p%initialize() - ! Repeat sampling source location until a good site has been found - found = .false. - do while (.not.found) - ! Coordinates sampled uniformly over a box - p_min = external_source%params_space(1:3) - p_max = external_source%params_space(4:6) - r = (/ (prn(), i = 1,3) /) - site%xyz = p_min + r*(p_max - p_min) + ! Set particle defaults + call p%initialize() - ! Fill p with needed data - p%coord(1)%xyz = site%xyz - p%coord(1)%uvw = [ ONE, ZERO, ZERO ] + ! Repeat sampling source location until a good site has been found + found = .false. + do while (.not.found) + ! Sample spatial distribution + site%xyz(:) = external_source%space%sample() - ! Now search to see if location exists in geometry - call find_cell(p, found) - if (.not. found) then - num_resamples = num_resamples + 1 - if (num_resamples == MAX_EXTSRC_RESAMPLES) then - call fatal_error("Maximum number of external source spatial & - &resamples reached!") + ! Fill p with needed data + p%coord(1)%xyz(:) = site%xyz + p%coord(1)%uvw(:) = [ ONE, ZERO, ZERO ] + + ! Now search to see if location exists in geometry + call find_cell(p, found) + if (.not. found) then + num_resamples = num_resamples + 1 + if (num_resamples == MAX_EXTSRC_RESAMPLES) then + call fatal_error("Maximum number of external source spatial & + &resamples reached!") + end if + end if + + ! Check if spatial site is in fissionable material + select type (space => external_source%space) + type is (SpatialBox) + if (space%only_fissionable) then + if (p%material == MATERIAL_VOID) then + found = .false. + elseif (.not. materials(p%material)%fissionable) then + found = .false. end if end if - end do - call p%clear() + end select + end do - case (SRC_SPACE_FISSION) - ! Repeat sampling source location until a good site has been found - found = .false. - do while (.not.found) - ! Set particle defaults - call p%initialize() - - ! Coordinates sampled uniformly over a box - p_min = external_source%params_space(1:3) - p_max = external_source%params_space(4:6) - r = (/ (prn(), i = 1,3) /) - site%xyz = p_min + r*(p_max - p_min) - - ! Fill p with needed data - p%coord(1)%xyz = site%xyz - p%coord(1)%uvw = [ ONE, ZERO, ZERO ] - - ! Now search to see if location exists in geometry - call find_cell(p, found) - if (.not. found) then - num_resamples = num_resamples + 1 - if (num_resamples == MAX_EXTSRC_RESAMPLES) then - call fatal_error("Maximum number of external source spatial & - &resamples reached!") - end if - cycle - end if - if (p%material == MATERIAL_VOID) then - found = .false. - cycle - end if - if (.not. materials(p%material)%fissionable) found = .false. - end do - call p%clear() - - case (SRC_SPACE_POINT) - ! Point source - site%xyz = external_source%params_space - - end select + call p%clear() ! Sample angle site%uvw(:) = external_source%angle%sample() diff --git a/src/source_header.F90 b/src/source_header.F90 index f52afb9194..d87c905897 100644 --- a/src/source_header.F90 +++ b/src/source_header.F90 @@ -1,7 +1,7 @@ module source_header use distribution_univariate, only: Distribution - use distribution_multivariate, only: UnitSphereDistribution + use distribution_multivariate, only: UnitSphereDistribution, SpatialDistribution implicit none @@ -11,10 +11,9 @@ module source_header !=============================================================================== type ExtSource - integer :: type_space ! spacial distribution, e.g. 'box' or 'point' - real(8), allocatable :: params_space(:) ! parameters for spatial distribution + class(SpatialDistribution), allocatable :: space ! spatial distribution class(UnitSphereDistribution), allocatable :: angle ! angle distribution - class(Distribution), allocatable :: energy ! energy distribution + class(Distribution), allocatable :: energy ! energy distribution end type ExtSource end module source_header From db9ac7ba2f6527c593a509c2f1fc3d5b46e12ca9 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 18 Dec 2015 09:13:41 -0600 Subject: [PATCH 149/650] SettingsFile now uses source property based off openmc.source.Source. --- examples/python/basic/build-xml.py | 4 +- examples/python/boxes/build-xml.py | 4 +- .../python/lattice/hexagonal/build-xml.py | 6 +- examples/python/lattice/nested/build-xml.py | 6 +- examples/python/lattice/simple/build-xml.py | 5 +- examples/python/pincell/build-xml.py | 6 +- examples/python/reflective/build-xml.py | 4 +- openmc/settings.py | 253 +---------- openmc/source.py | 101 +++++ openmc/stats/__init__.py | 2 + openmc/stats/multivariate.py | 409 ++++++++++++++++++ openmc/stats/univariate.py | 325 ++++++++++++++ setup.py | 2 +- tests/input_set.py | 5 +- 14 files changed, 879 insertions(+), 253 deletions(-) create mode 100644 openmc/source.py create mode 100644 openmc/stats/__init__.py create mode 100644 openmc/stats/multivariate.py create mode 100644 openmc/stats/univariate.py diff --git a/examples/python/basic/build-xml.py b/examples/python/basic/build-xml.py index 488603d33f..adb790268e 100644 --- a/examples/python/basic/build-xml.py +++ b/examples/python/basic/build-xml.py @@ -1,4 +1,6 @@ import openmc +from openmc.source import Source +from openmc.stats import SpatialBox ############################################################################### # Simulation Input File Parameters @@ -92,7 +94,7 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.set_source_space('box', [-4, -4, -4, 4, 4, 4]) +settings_file.source = Source(space=SpatialBox([-4, -4, -4], [4, 4, 4])) settings_file.export_to_xml() diff --git a/examples/python/boxes/build-xml.py b/examples/python/boxes/build-xml.py index 9c28d37bb3..7debc87a13 100644 --- a/examples/python/boxes/build-xml.py +++ b/examples/python/boxes/build-xml.py @@ -1,6 +1,8 @@ import numpy as np import openmc +from openmc.source import Source +from openmc.stats import SpatialBox ############################################################################### # Simulation Input File Parameters @@ -117,7 +119,7 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.set_source_space('box', np.concatenate(outer_cube.bounding_box)) +settings_file.source = Source(space=SpatialBox(*outer_cube.bounding_box)) settings_file.export_to_xml() ############################################################################### diff --git a/examples/python/lattice/hexagonal/build-xml.py b/examples/python/lattice/hexagonal/build-xml.py index 5fa0f9b1b9..0dc8108b56 100644 --- a/examples/python/lattice/hexagonal/build-xml.py +++ b/examples/python/lattice/hexagonal/build-xml.py @@ -1,5 +1,6 @@ import openmc - +from openmc.source import Source +from openmc.stats import SpatialBox ############################################################################### # Simulation Input File Parameters @@ -125,7 +126,8 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.set_source_space('box', [-1, -1, -1, 1, 1, 1]) +settings_file.source = Source(space=SpatialBox( + [-1, -1, -1], [1, 1, 1])) settings_file.keff_trigger = {'type' : 'std_dev', 'threshold' : 5E-4} settings_file.trigger_active = True settings_file.trigger_max_batches = 100 diff --git a/examples/python/lattice/nested/build-xml.py b/examples/python/lattice/nested/build-xml.py index 501b3ee4b4..b4a9d199d2 100644 --- a/examples/python/lattice/nested/build-xml.py +++ b/examples/python/lattice/nested/build-xml.py @@ -1,5 +1,6 @@ import openmc - +from openmc.source import Source +from openmc.stats import SpatialBox ############################################################################### # Simulation Input File Parameters @@ -136,7 +137,8 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.set_source_space('box', [-1, -1, -1, 1, 1, 1]) +settings_file.source = Source(space=SpatialBox( + [-1, -1, -1], [1, 1, 1])) settings_file.export_to_xml() diff --git a/examples/python/lattice/simple/build-xml.py b/examples/python/lattice/simple/build-xml.py index 00fbea22a4..26c19e9714 100644 --- a/examples/python/lattice/simple/build-xml.py +++ b/examples/python/lattice/simple/build-xml.py @@ -1,4 +1,6 @@ import openmc +from openmc.source import Source +from openmc.stats import SpatialBox ############################################################################### # Simulation Input File Parameters @@ -125,7 +127,8 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.set_source_space('box', [-1, -1, -1, 1, 1, 1]) +settings_file.source = Source(space=SpatialBox( + [-1, -1, -1], [1, 1, 1])) settings_file.trigger_active = True settings_file.trigger_max_batches = 100 settings_file.export_to_xml() diff --git a/examples/python/pincell/build-xml.py b/examples/python/pincell/build-xml.py index b3bb932dc8..c08756ae54 100644 --- a/examples/python/pincell/build-xml.py +++ b/examples/python/pincell/build-xml.py @@ -1,4 +1,6 @@ import openmc +from openmc.source import Source +from openmc.stats import SpatialBox ############################################################################### # Simulation Input File Parameters @@ -168,8 +170,8 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.set_source_space('box', [-0.62992, -0.62992, -1, \ - 0.62992, 0.62992, 1]) +settings_file.source = Source(space=SpatialBox( + [-0.62992, -0.62992, -1], [0.62992, 0.62992, 1])) settings_file.entropy_lower_left = [-0.39218, -0.39218, -1.e50] settings_file.entropy_upper_right = [0.39218, 0.39218, 1.e50] settings_file.entropy_dimension = [10, 10, 1] diff --git a/examples/python/reflective/build-xml.py b/examples/python/reflective/build-xml.py index 44b544d20d..73d07cbb62 100644 --- a/examples/python/reflective/build-xml.py +++ b/examples/python/reflective/build-xml.py @@ -1,6 +1,8 @@ import numpy as np import openmc +from openmc.stats import SpatialBox +from openmc.source import Source ############################################################################### # Simulation Input File Parameters @@ -84,5 +86,5 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.set_source_space('box', np.concatenate(cell.region.bounding_box)) +settings_file.source = Source(space=SpatialBox(*cell.region.bounding_box)) settings_file.export_to_xml() diff --git a/openmc/settings.py b/openmc/settings.py index 2cb6a14460..b7446046ee 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -9,6 +9,7 @@ import numpy as np from openmc.clean_xml import * from openmc.checkvalue import (check_type, check_length, check_value, check_greater_than, check_less_than) +from openmc.source import Source if sys.version_info[0] >= 3: basestring = str @@ -36,8 +37,8 @@ class SettingsFile(object): type are 'variance', 'std_dev', and 'rel_err'. The threshold value should be a float indicating the variance, standard deviation, or relative error used. - source_file : str - Path to a source file + source : openmc.source.Source + Distribution of source sites in space, angle, and energy output : dict Dictionary indicating what files to output. Valid keys are 'summary', 'cross_sections', 'tallies', and 'distribmats'. Values corresponding to @@ -134,16 +135,7 @@ class SettingsFile(object): self._keff_trigger = None # Source subelement - self._source_subelement = None - self._source_file = None - self._source_space_type = None - self._source_space_params = None - self._source_angle_type = None - self._source_angle_interpolation = None - self._source_angle_params = None - self._source_energy_type = None - self._source_energy_interpolation = None - self._source_energy_params = None + self._source = None self._confidence_intervals = None self._cross_sections = None @@ -230,40 +222,8 @@ class SettingsFile(object): return self._keff_trigger @property - def source_file(self): - return self._source_file - - @property - def source_space_type(self): - return self._source_space_type - - @property - def source_space_params(self): - return self._source_space_params - - @property - def source_angle_type(self): - return self._source_angle_type - - @property - def source_angle_interpolation(self): - return self._source_angle_interpolation - - @property - def source_angle_params(self): - return self._source_angle_params - - @property - def source_energy_type(self): - return self._source_energy_type - - @property - def source_energy_interpolation(self): - return self._source_energy_interpolation - - @property - def source_energy_params(self): - return self._source_energy_params + def source(self): + return self._source @property def confidence_intervals(self): @@ -478,156 +438,10 @@ class SettingsFile(object): self._keff_trigger = keff_trigger - @source_file.setter - def source_file(self, source_file): - check_type('source file', source_file, basestring) - self._source_file = source_file - - def set_source_space(self, stype, params): - """Defined the spatial bounds of the external/starting source. - - Parameters - ---------- - stype : str - The type of spatial distribution. Valid options are "box", - "fission", and "point". A "box" spatial distribution has coordinates - sampled uniformly in a parallelepiped. A "fission" spatial - distribution samples locations from a "box" distribution but only - locations in fissionable materials are accepted. A "point" spatial - distribution has coordinates specified by a triplet. - params : Iterable of float - For a "box" or "fission" spatial distribution, ``params`` should be - given as six real numbers, the first three of which specify the - lower-left corner of a parallelepiped and the last three of which - specify the upper-right corner. Source sites are sampled uniformly - through that parallelepiped. - - For a "point" spatial distribution, ``params`` should be given as - three real numbers which specify the (x,y,z) location of an - isotropic point source - - """ - - check_type('source space type', stype, basestring) - check_value('source space type', stype, ['box', 'fission', 'point']) - check_type('source space parameters', params, Iterable, Real) - if stype in ['box', 'fission']: - check_length('source space parameters for a ' - 'box/fission distribution', params, 6) - elif stype == 'point': - check_length('source space parameters for a point source', - params, 3) - - self._source_space_type = stype - self._source_space_params = params - - def set_source_angle(self, stype, params=[], interp='histogram'): - """Defined the angular distribution of the external/starting source. - - Parameters - ---------- - stype : str - The type of angular distribution. Valid options are "isotropic", - "monodirectional", and "tabular". The angle of the particle emitted - from a source site is isotropic if the "isotropic" option is - given. The angle of the particle emitted from a source site is the - direction specified in ``params`` if the "monodirectional" option is - given. The "tabular" option produces directions with polar angles - sampled from a tabulated distribution. - params : Iterable of float - For an "isotropic" angular distribution, ``params`` should not - be specified. - - For a "monodirectional" angular distribution, ``params`` should - be given as three floats which specify the angular cosines - with respect to each axis. - - For a "tabular" angular distribution, ``parameters`` provides the - :math:`(\mu,p)` pairs defining the tabular distribution. All - :math:`\mu` points are given first followed by corresponding - :math:`p` points. - interp : { 'histogram', 'linear-linear' } - For a "tabular" angular distribution, ``interpolation`` can be set - to "histogram" or "linear-linear" thereby specifying how tabular - points are to be interpolated. - - """ - - check_type('source angle type', stype, basestring) - check_value('source angle type', stype, - ['isotropic', 'monodirectional', 'tabular']) - check_type('source angle parameters', params, Iterable, Real) - if stype == 'isotropic' and params is not None: - msg = 'Unable to set source angle parameters since they are not ' \ - 'it is not supported for isotropic type sources' - raise ValueError(msg) - elif stype == 'monodirectional': - check_length('source angle parameters for a monodirectional ' - 'source', params, 3) - elif stype == 'tabular': - check_type('source angle interpolation', interp, basestring) - check_value('source angle interpolation', interp, - ['histogram', 'linear-linear']) - self._source_angle_interpolation = interp - - self._source_angle_type = stype - self._source_angle_params = params - - def set_source_energy(self, stype, params=[], interp='histogram'): - """Defined the energy distribution of the external/starting source. - - Parameters - ---------- - stype : str - - The type of energy distribution. Valid options are "monoenergetic", - "watt", "maxwell", and "tabular". The "monoenergetic" option - produces source sites at a single energy. The "watt" option produces - source sites whose energy is sampled from a Watt fission - spectrum. The "maxwell" option produce source sites whose energy is - sampled from a Maxwell fission spectrum. The "tabular" option - produces source sites whose energy is sampled from a tabulated - distribution. - params : Iterable of float - For a "monoenergetic" energy distribution, ``params`` should be - given as the energy in MeV of the source sites. - - For a "watt" energy distribution, ``params`` should be given as two - real numbers :math:`a` and :math:`b` that parameterize the - distribution :math:`p(E) dE = c e^{-E/a} \sinh \sqrt{b \, E} dE`. - - For a "maxwell" energy distribution, ``params`` should be given as - one real number :math:`a` that parameterizes the distribution - :math:`p(E) dE = c E e^{-E/a} dE`. - - For a "tabular" energy distribution, ``parameters`` provides the - :math:`(E,p)` pairs defining the tabular distribution. All :math:`E` - points are given first followed by corresponding :math:`p` points. - interp : { 'histogram', 'linear-linear' } - For a "tabular" energy distribution, ``interpolation`` can be set - to "histogram" or "linear-linear" thereby specifying how tabular - points are to be interpolated. - - """ - - check_type('source energy type', stype, basestring) - check_value('source energy type', stype, - ['monoenergetic', 'watt', 'maxwell', 'tabular']) - check_type('source energy parameters', params, Iterable, Real) - if stype in ['monoenergetic', 'maxwell']: - check_length('source energy parameters for a monoenergetic ' - 'or Maxwell source', params, 1) - elif stype == 'watt': - check_length('source energy parameters for a Watt source', - params, 2) - elif stype == 'tabular': - check_type('source energy interpolation', interp, basestring) - check_value('source energy interpolation', interp, - ['histogram', 'linear-linear']) - self._source_energy_interpolation = interp - - self._source_energy_type = stype - self._source_energy_params = params + @source.setter + def source(self, source): + check_type('source distribution', source, Source) + self._source = source @output.setter def output(self, output): @@ -966,51 +780,8 @@ class SettingsFile(object): subelement.text = str(self._keff_trigger[key]).lower() def _create_source_subelement(self): - self._create_source_space_subelement() - self._create_source_energy_subelement() - self._create_source_angle_subelement() - - def _create_source_space_subelement(self): - if self._source_space_params is not None: - if self._source_subelement is None: - self._source_subelement = ET.SubElement(self._settings_file, - "source") - - element = ET.SubElement(self._source_subelement, "space") - element.set("type", self._source_space_type) - - subelement = ET.SubElement(element, "parameters") - subelement.text = ' '.join(map(str, self._source_space_params)) - - def _create_source_angle_subelement(self): - if self._source_angle_params is not None: - if self._source_subelement is None: - self._source_subelement = ET.SubElement(self._settings_file, - "source") - - element = ET.SubElement(self._source_subelement, "angle") - element.set("type", self._source_angle_type) - - if self.source_angle_interpolation is not None: - element.set("interpolation", self.source_angle_interpolation) - - subelement = ET.SubElement(element, "parameters") - subelement.text = ' '.join(map(str, self._source_angle_params)) - - def _create_source_energy_subelement(self): - if self._source_energy_params is not None: - if self._source_subelement is None: - self._source_subelement = ET.SubElement(self._settings_file, - "source") - - element = ET.SubElement(self._source_subelement, "energy") - element.set("type", self._source_energy_type) - - if self.source_energy_interpolation is not None: - element.set("interpolation", self.source_energy_interpolation) - - subelement = ET.SubElement(element, "parameters") - subelement.text = ' '.join(map(str, self._source_energy_params)) + if self.source is not None: + self._settings_file.append(self.source.to_xml()) def _create_output_subelement(self): if self._output is not None: diff --git a/openmc/source.py b/openmc/source.py new file mode 100644 index 0000000000..57ed7f1951 --- /dev/null +++ b/openmc/source.py @@ -0,0 +1,101 @@ +import sys +from xml.etree import ElementTree as ET + +from openmc.stats.univariate import Univariate +from openmc.stats.multivariate import UnitSphere, Spatial +import openmc.checkvalue as cv + +if sys.version_info[0] >= 3: + basestring = str + + +class Source(object): + """Distribution of phase space coordinates for source sites. + + Parameters + ---------- + space : openmc.stats.Spatial, optional + Spatial distribution of source sites + angle : openmc.stats.UnitSphere, optional + Angular distribution of source sites + energy : openmc.stats.Univariate, optional + Energy distribution of source sites + filename : str, optional + Source file from which sites should be sampled + + Attributes + ---------- + space : openmc.stats.Spatial or None + Spatial distribution of source sites + angle : openmc.stats.UnitSphere or None + Angular distribution of source sites + energy : openmc.stats.Univariate or None + Energy distribution of source sites + file : str or None + Source file from which sites should be sampled + + """ + + def __init__(self, space=None, angle=None, energy=None, filename=None): + self._space = None + self._angle = None + self._energy = None + self._probability = None + self._file = None + + if space is not None: + self.space = space + if angle is not None: + self.angle = angle + if energy is not None: + self.energy = energy + if filename is not None: + self.file = filename + + @property + def file(self): + return self._file + + @property + def space(self): + return self._space + + @property + def angle(self): + return self._angle + + @property + def energy(self): + return self._energy + + @file.setter + def file(self, filename): + cv.check_type('source file', filename, basestring) + self._file = filename + + @space.setter + def space(self, space): + cv.check_type('spatial distribution', space, Spatial) + self._space = space + + @angle.setter + def angle(self, angle): + cv.check_type('angular distribution', angle, UnitSphere) + self._angle = angle + + @energy.setter + def energy(self, energy): + cv.check_type('energy distribution', energy, Univariate) + self._energy = energy + + def to_xml(self): + element = ET.Element("source") + if self.file is not None: + element.set("file", self.file) + if self.space is not None: + element.append(self.space.to_xml()) + if self.angle is not None: + element.append(self.angle.to_xml()) + if self.energy is not None: + element.append(self.energy.to_xml()) + return element diff --git a/openmc/stats/__init__.py b/openmc/stats/__init__.py new file mode 100644 index 0000000000..3d7b80b281 --- /dev/null +++ b/openmc/stats/__init__.py @@ -0,0 +1,2 @@ +from openmc.stats.univariate import * +from openmc.stats.multivariate import * diff --git a/openmc/stats/multivariate.py b/openmc/stats/multivariate.py new file mode 100644 index 0000000000..cb1921ba6d --- /dev/null +++ b/openmc/stats/multivariate.py @@ -0,0 +1,409 @@ +from abc import ABCMeta, abstractmethod +from collections import Iterable +from math import pi +from numbers import Real +import sys +from xml.etree import ElementTree as ET + +import numpy as np +from numpy.linalg import norm + +import openmc.checkvalue as cv +from openmc.stats.univariate import Univariate, Uniform + +if sys.version_info[0] >= 3: + basestring = str + + +class UnitSphere(object): + """Distribution of points on the unit sphere. + + This abstract class is used for angular distributions, since a direction is + represented as a unit vector (i.e., vector on the unit sphere). + + Parameters + ---------- + name : str + Name of the distribution + reference_uvw : Iterable of Real + Direction from which polar angle is measured + + Attributes + ---------- + name : str + Name of the distribution + reference_uvw : Iterable of Real + Direction from which polar angle is measured + + """ + + __metaclass__ = ABCMeta + + def __init__(self, name, reference_uvw=None): + self.name = name + self._reference_uvw = None + if reference_uvw is not None: + self.reference_uvw = reference_uvw + + @property + def name(self): + return self._name + + @property + def reference_uvw(self): + return self._reference_uvw + + @name.setter + def name(self, name): + cv.check_type('name', name, basestring) + self._name = name + + @reference_uvw.setter + def reference_uvw(self, uvw): + cv.check_type('reference direction', uvw, Iterable, Real) + uvw = np.asarray(uvw) + self._reference_uvw = uvw/norm(uvw) + + @abstractmethod + def to_xml(self): + return '' + + +class PolarAzimuthal(UnitSphere): + """Angular distribution represented by polar and azimuthal angles + + This distribution allows one to specify the distribution of the cosine of + the polar angle and the azimuthal angle independently of once another. + + Parameters + ---------- + mu : openmc.stats.Univariate + Distribution of the cosine of the polar angle + phi : openmc.stats.Univariate + Distribution of the azimuthal angle + name : str, optional + Name of the distribution. Defaults to 'angle'. + reference_uvw : Iterable of Real + Direction from which polar angle is measured. Defaults to the positive + z-direction. + + Attributes + ---------- + mu : openmc.stats.Univariate + Distribution of the cosine of the polar angle + phi : openmc.stats.Univariate + Distribution of the azimuthal angle + + """ + + def __init__(self, mu=None, phi=None, name='angle',reference_uvw=[0., 0., 1.]): + super(PolarAzimuthal, self).__init__(name, reference_uvw) + if mu is not None: + self.mu = mu + else: + self.mu = Uniform('mu', -1., 1.) + + if phi is not None: + self.phi = phi + else: + self.phi = Uniform('phi', 0., 2*pi) + + @property + def mu(self): + return self._mu + + @property + def phi(self): + return self._phi + + @mu.setter + def mu(self, mu): + cv.check_type('cosine of polar angle', mu, Univariate) + self._mu = mu + + @phi.setter + def phi(self, phi): + cv.check_type('azimuthal angle', phi, Univariate) + self._phi = phi + + def to_xml(self): + element = ET.Element(self.name) + element.set("type", "mu-phi") + if self.reference_uvw is not None: + element.set("reference_uvw", ' '.join(map(str, self.reference_uvw))) + element.append(self.mu.to_xml()) + element.append(self.phi.to_xml()) + return element + + +class Isotropic(UnitSphere): + """Isotropic angular distribution. + + Parameters + ---------- + name : str, optional + Name of the distribution. Defaults to 'angle'. + + """ + + def __init__(self, name='angle'): + super(Isotropic, self).__init__(name) + + def to_xml(self): + element = ET.Element(self.name) + element.set("type", "isotropic") + return element + + +class Monodirectional(UnitSphere): + """Monodirectional angular distribution. + + A monodirectional angular distribution is one for which the polar and + azimuthal angles are always the same. It is completely specified by the + reference direction vector. + + Parameters + ---------- + name : str, optional + Name of the distribution. Defaults to 'angle'. + reference_uvw : Iterable of Real + Direction from which polar angle is measured. Defaults to the positive + x-direction. + + """ + + + def __init__(self, name='angle', reference_uvw=[1., 0., 0.]): + super(Monodirectional, self).__init__(name, reference_uvw) + + def to_xml(self): + element = ET.Element(self.name) + element.set("type", "monodirectional") + if self.reference_uvw is not None: + element.set("reference_uvw", ' '.join(map(str, self.reference_uvw))) + return element + + +class Spatial(object): + """Distribution of locations in three-dimensional Euclidean space. + + Classes derived from this abstract class can be used for spatial + distributions of source sites. + + Parameters + ---------- + name : str + Name of the distribution + + Attributes + ---------- + name : str + Name of the distribution + + """ + + __metaclass__ = ABCMeta + + def __init__(self, name): + self.name = name + + @property + def name(self): + return self._name + + @name.setter + def name(self, name): + cv.check_type('name', name, basestring) + self._name = name + + @abstractmethod + def to_xml(self): + return '' + + +class SpatialIndependent(Spatial): + """Spatial distribution with independent x, y, and z distributions. + + This distribution allows one to specify a coordinates whose x-, y-, and z- + components are sampled independently from one another. + + Parameters + ---------- + x : openmc.stats.Univariate + Distribution of x-coordinates + y : openmc.stats.Univariate + Distribution of y-coordinates + z : openmc.stats.Univariate + Distribution of z-coordinates + name : str + Name of the distribution + + Attributes + ---------- + x : openmc.stats.Univariate + Distribution of x-coordinates + y : openmc.stats.Univariate + Distribution of y-coordinates + z : openmc.stats.Univariate + Distribution of z-coordinates + + """ + + + def __init__(self, x, y, z, name='space'): + super(SpatialIndependent, self).__init__(name) + self.x = x + self.y = y + self.z = z + + @property + def x(self): + return self._x + + @property + def y(self): + return self._y + + @property + def z(self): + return self._z + + @x.setter + def x(self, x): + cv.check_type('x coordinate', x, Univariate) + self._x = x + + @y.setter + def y(self, y): + cv.check_type('y coordinate', y, Univariate) + self._y = y + + @x.setter + def z(self, z): + cv.check_type('z coordinate', z, Univariate) + self._z = z + + def to_xml(self): + element = ET.Element(self.name) + element.set("type", "independent") + element.append(self.x.to_xml()) + element.append(self.y.to_xml()) + element.append(self.z.to_xml()) + return element + + +class SpatialBox(Spatial): + """Uniform distribution of coordinates in a rectangular cuboid. + + Parameters + ---------- + lower_left : Iterable of Real + Lower-left coordinates of cuboid + upper_right : Iterable of Real + Upper-right coordinates of cuboid + name : str, optional + Name of the distribution + only_fissionable : bool, optional + Whether spatial sites should only be accepted if they occur in + fissionable materials + + Attributes + ---------- + lower_left : Iterable of Real + Lower-left coordinates of cuboid + upper_right : Iterable of Real + Upper-right coordinates of cuboid + only_fissionable : bool, optional + Whether spatial sites should only be accepted if they occur in + fissionable materials + + """ + + + def __init__(self, lower_left, upper_right, name='space', only_fissionable=False): + super(SpatialBox, self).__init__(name) + self.lower_left = lower_left + self.upper_right = upper_right + self.only_fissionable = only_fissionable + + @property + def lower_left(self): + return self._lower_left + + @property + def upper_right(self): + return self._upper_right + + @property + def only_fissionable(self): + return self._only_fissionable + + @lower_left.setter + def lower_left(self, lower_left): + cv.check_type('lower left coordinate', lower_left, Iterable, Real) + cv.check_length('lower left coordinate', lower_left, 3) + self._lower_left = lower_left + + @upper_right.setter + def upper_right(self, upper_right): + cv.check_type('upper right coordinate', upper_right, Iterable, Real) + cv.check_length('upper right coordinate', upper_right, 3) + self._upper_right = upper_right + + @only_fissionable.setter + def only_fissionable(self, only_fissionable): + cv.check_type('only fissionable', only_fissionable, bool) + self._only_fissionable = only_fissionable + + def to_xml(self): + element = ET.Element(self.name) + if self.only_fissionable: + element.set("type", "fission") + else: + element.set("type", "box") + params = ET.SubElement(element, "parameters") + params.text = ' '.join(map(str, self.lower_left)) + ' ' + \ + ' '.join(map(str, self.upper_right)) + return element + + +class SpatialPoint(Spatial): + """Delta function in three dimensions. + + This spatial distribution can be used for a point source where sites are + emitted at a specific location given by its Cartesian coordinates. + + Parameters + ---------- + xyz : Iterable of Real + Cartesian coordinates of location + name : str, optional + Name of the distribution + + Attributes + ---------- + xyz : Iterable of Real + Cartesian coordinates of location + + """ + + def __init__(self, xyz, name='space'): + super(SpatialPoint, self).__init__(name) + self.xyz = xyz + + @property + def xyz(self): + return self._xyz + + @xyz.setter + def xyz(self, xyz): + cv.check_type('coordinate', xyz, Iterable, Real) + cv.check_length('coordinate', xyz, 3) + self._xyz = xyz + + def to_xml(self): + element = ET.Element(self.name) + element.set("type", "point") + params = ET.SubElement(element, "parameters") + params.text = ' '.join(map(str, self.xyz)) + return element diff --git a/openmc/stats/univariate.py b/openmc/stats/univariate.py new file mode 100644 index 0000000000..8e32fdc1c1 --- /dev/null +++ b/openmc/stats/univariate.py @@ -0,0 +1,325 @@ +from abc import ABCMeta, abstractmethod +from collections import Iterable +from numbers import Real +from xml.etree import ElementTree as ET + +import openmc.checkvalue as cv + + +class Univariate(object): + """Probability distribution of a single random variable. + + The Univariate class is an abstract class that can be derived to implement a + specific probability distribution. + + Parameters + ---------- + name : str + Name of the distribution + + Attributes + ---------- + name : str + Name of the distributions + + """ + + __metaclass__ = ABCMeta + + def __init__(self, name): + self.name = name + + @property + def name(self): + return self._name + + @name.setter + def name(self, name): + cv.check_type('name', name, basestring) + self._name = name + + @abstractmethod + def to_xml(self): + return '' + + +class Discrete(Univariate): + """Distribution characterized by a probability mass function. + + The Discrete distribution assigns probability values to discrete values of a + random variable, rather than expressing the distribution as a continuous + random variable. + + Parameters + ---------- + x : Iterable of Real + Values of the random variable + p : Iterable of Real + Discrete probability for each value + + Attributes + ---------- + x : Iterable of Real + Values of the random variable + p : Iterable of Real + Discrete probability for each value + + """ + + def __init__(self, name, x, p): + super(Discrete, self).__init__(name) + self.x = x + self.p = p + + @property + def x(self): + return self._x + + @property + def p(self): + return self._p + + @x.setter + def x(self, x): + cv.check_type('discrete values', x, Iterable, Real) + self._x = x + + @p.setter + def p(self, p): + cv.check_type('discrete probabilities', p, Iterable, Real) + for pk in p: + cv.check_greater_than('discrete probability', pk, 0.0, True) + self._p = p + + def to_xml(self): + element = ET.Element(self.name) + element.set("type", "discrete") + + params = ET.SubElement(element, "parameters") + params.text = ' '.join(map(str, self.x)) + ' ' + ' '.join(map(str, self.p)) + + return element + + +class Uniform(Univariate): + """Distribution with constant probability over a finite interval [a,b] + + Parameters + ---------- + a : float, optional + Lower bound of the sampling interval. Defaults to zero. + b : float, optional + Upper bound of the sampling interval. Defaults to unity. + + Attributes + ---------- + a : float + Lower bound of the sampling interval + b : float + Upper bound of the sampling interval + + """ + + def __init__(self, name, a=0.0, b=1.0): + super(Uniform, self).__init__(name) + self.a = a + self.b = b + + @property + def a(self): + return self._a + + @property + def b(self): + return self._b + + @a.setter + def a(self, a): + cv.check_type('Uniform a', a, Real) + self._a = a + + @b.setter + def b(self, b): + cv.check_type('Uniform b', b, Real) + self._b = b + + def to_xml(self): + element = ET.Element(self.name) + element.set("type", "uniform") + element.set("parameters", '{} {}'.format(self.a, self.b)) + return element + + +class Maxwell(Univariate): + """Maxwellian distribution in energy. + + The Maxwellian distribution in energy is characterized by a single parameter + :math:`\theta` and has a density function :math:`p(E) dE = c E e^{-E/\theta} + dE`. + + Parameters + ---------- + theta : float + Effective temperature for distribution + + Attributes + ---------- + theta : float + Effective temperature for distribution + + """ + + def __init__(self, theta, name='energy'): + super(Maxwell, self).__init__(name) + self.theta = theta + + @property + def theta(self): + return self._theta + + @theta.setter + def theta(self, theta): + cv.check_type('Maxwell temperature', theta, Real) + cv.check_greater_than('Maxwell temperature', theta, 0.0) + self._theta = theta + + def to_xml(self): + element = ET.Element(self.name) + element.set("type", "uniform") + element.set("parameters", str(self.theta)) + return element + + +class Watt(Univariate): + """Watt fission energy spectrum. + + The Watt fission energy spectrum is characterized by two parameters + :math:`a` and :math:`b` and has density function :math:`p(E) dE = c e^{-E/a} + \sinh \sqrt{b \, E} dE`. + + Parameters + ---------- + a : float + First parameter of distribution + b : float + Second parameter of distribution + name : str, optional + Name of the distribution. Defaults to 'energy'. + + Attributes + ---------- + a : float + First parameter of distribution + b : float + Second parameter of distribution + + """ + + def __init__(self, a, b, name='energy'): + super(Watt, self).__init__(name) + self.a = a + self.b = b + + @property + def a(self): + return self._a + + @property + def b(self): + return self._b + + @a.setter + def a(self, a): + cv.check_type('Watt a', a, Real) + cv.check_greater_than('Watt a', a, 0.0) + self._a = a + + @b.setter + def b(self, b): + cv.check_type('Watt b', b, Real) + cv.check_greater_than('Watt b', b, 0.0) + self._b = b + + def to_xml(self): + element = ET.Element(self.name) + element.set("type", "watt") + element.set("parameters", '{} {}'.format(self.a, self.b)) + return element + + +class Tabular(Univariate): + """Piecewise continuous probability distribution. + + This class is used to represent a probability distribution whose density + function is tabulated at specific values and is either histogram or linearly + interpolated between points. + + Parameters + ---------- + name : str + Name of the distribution + x : Iterable of Real + Tabulated values of the random variable + p : Iterable of Real + Tabulated probabilities + interpolation : {'histogram', 'linear-linear'}, optional + Indicate whether the density function is constant between tabulated + points or linearly-interpolated. + + Attributes + ---------- + x : Iterable of Real + Tabulated values of the random variable + p : Iterable of Real + Tabulated probabilities + interpolation : {'histogram', 'linear-linear'}, optional + Indicate whether the density function is constant between tabulated + points or linearly-interpolated. + + """ + + def __init__(self, name, x, p, interpolation='linear-linear'): + super(Tabular, self).__init__(name) + self.x = x + self.p = p + self.interpolation = interpolation + + @property + def x(self): + return self._x + + @property + def p(self): + return self._p + + @property + def interpolation(self): + return self._interpolation + + @x.setter + def x(self, x): + cv.check_type('tabulated values', x, Iterable, Real) + self._x = x + + @p.setter + def p(self, p): + cv.check_type('tabulated probabilities', p, Iterable, Real) + for pk in p: + cv.check_greater_than('tabulated probability', pk, 0.0, True) + self._p = p + + @interpolation.setter + def interpolation(self, interpolation): + cv.check_value('interpolation', interpolation, + ['linear-linear', 'histogram']) + self._interpolation = interpolation + + def to_xml(self): + element = ET.Element(self.name) + element.set("type", "tabular") + element.set("interpolation", self.interpolation) + + params = ET.SubElement(element, "parameters") + params.text = ' '.join(map(str, self.x)) + ' ' + ' '.join(map(str, self.p)) + + return element diff --git a/setup.py b/setup.py index d401f5fbaf..0bf4549c03 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ except ImportError: kwargs = {'name': 'openmc', 'version': '0.7.1', - 'packages': ['openmc', 'openmc.mgxs'], + 'packages': ['openmc', 'openmc.mgxs', 'openmc.stats'], 'scripts': glob.glob('scripts/openmc-*'), # Metadata diff --git a/tests/input_set.py b/tests/input_set.py index 87b857f4a9..46058f41b8 100644 --- a/tests/input_set.py +++ b/tests/input_set.py @@ -1,4 +1,6 @@ import openmc +from openmc.source import Source +from openmc.stats import SpatialBox class InputSet(object): @@ -558,7 +560,8 @@ class InputSet(object): self.settings.batches = 10 self.settings.inactive = 5 self.settings.particles = 100 - self.settings.set_source_space('box', (-160, -160, -183, 160, 160, 183)) + self.settings.source = Source(space=SpatialBox( + [-160, -160, -183], [160, 160, 183])) def build_defualt_plots(self): plot = openmc.Plot() From ba316dd98e5659f07c183f7e110ff8e58b630d7d Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 21 Dec 2015 11:24:22 -0600 Subject: [PATCH 150/650] Capability to have multiple source distributions. --- openmc/source.py | 20 +- src/global.F90 | 8 +- src/input_xml.F90 | 427 +++++++++--------- src/relaxng/settings.rnc | 15 +- src/relaxng/settings.rng | 43 +- src/source.F90 | 25 +- src/source_header.F90 | 9 +- tests/test_filter_azimuthal/inputs_true.dat | 2 +- tests/test_filter_cell/inputs_true.dat | 2 +- tests/test_filter_cellborn/inputs_true.dat | 2 +- .../test_filter_delayedgroup/inputs_true.dat | 2 +- tests/test_filter_energy/inputs_true.dat | 2 +- tests/test_filter_energyout/inputs_true.dat | 2 +- .../inputs_true.dat | 2 +- tests/test_filter_material/inputs_true.dat | 2 +- tests/test_filter_mu/inputs_true.dat | 2 +- tests/test_filter_polar/inputs_true.dat | 2 +- tests/test_filter_universe/inputs_true.dat | 2 +- .../inputs_true.dat | 2 +- tests/test_mgxs_library_hdf5/inputs_true.dat | 2 +- .../inputs_true.dat | 2 +- .../inputs_true.dat | 2 +- tests/test_score_MT/inputs_true.dat | 2 +- tests/test_score_absorption/inputs_true.dat | 2 +- .../inputs_true.dat | 2 +- tests/test_score_events/inputs_true.dat | 2 +- tests/test_score_fission/inputs_true.dat | 2 +- tests/test_score_flux/inputs_true.dat | 2 +- tests/test_score_flux_yn/inputs_true.dat | 2 +- .../inputs_true.dat | 2 +- tests/test_score_kappafission/inputs_true.dat | 2 +- tests/test_score_nufission/inputs_true.dat | 2 +- tests/test_score_nuscatter/inputs_true.dat | 2 +- tests/test_score_nuscatter_n/inputs_true.dat | 2 +- tests/test_score_nuscatter_pn/inputs_true.dat | 2 +- tests/test_score_nuscatter_yn/inputs_true.dat | 2 +- tests/test_score_scatter/inputs_true.dat | 2 +- tests/test_score_scatter_n/inputs_true.dat | 2 +- tests/test_score_scatter_pn/inputs_true.dat | 2 +- tests/test_score_scatter_yn/inputs_true.dat | 2 +- tests/test_score_total/inputs_true.dat | 2 +- tests/test_score_total_yn/inputs_true.dat | 2 +- tests/test_tally_arithmetic/inputs_true.dat | 2 +- 43 files changed, 340 insertions(+), 279 deletions(-) diff --git a/openmc/source.py b/openmc/source.py index 57ed7f1951..cac7d1e58c 100644 --- a/openmc/source.py +++ b/openmc/source.py @@ -1,3 +1,4 @@ +from numbers import Real import sys from xml.etree import ElementTree as ET @@ -22,6 +23,8 @@ class Source(object): Energy distribution of source sites filename : str, optional Source file from which sites should be sampled + strength : Real + Strength of the source Attributes ---------- @@ -33,14 +36,15 @@ class Source(object): Energy distribution of source sites file : str or None Source file from which sites should be sampled + strength : Real + Strength of the source """ - def __init__(self, space=None, angle=None, energy=None, filename=None): + def __init__(self, space=None, angle=None, energy=None, filename=None, strength=1.0): self._space = None self._angle = None self._energy = None - self._probability = None self._file = None if space is not None: @@ -51,6 +55,7 @@ class Source(object): self.energy = energy if filename is not None: self.file = filename + self.strength = strength @property def file(self): @@ -68,6 +73,10 @@ class Source(object): def energy(self): return self._energy + @property + def strength(self): + return self._strength + @file.setter def file(self, filename): cv.check_type('source file', filename, basestring) @@ -88,8 +97,15 @@ class Source(object): cv.check_type('energy distribution', energy, Univariate) self._energy = energy + @strength.setter + def strength(self, strength): + cv.check_type('source strength', strength, Real) + cv.check_greater_than('source strength', strength, 0.0, True) + self._strength = strength + def to_xml(self): element = ET.Element("source") + element.set("strength", str(self.strength)) if self.file is not None: element.set("file", self.file) if self.space is not None: diff --git a/src/global.F90 b/src/global.F90 index 50974282c1..a5943b6b74 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -12,7 +12,7 @@ module global use plot_header, only: ObjectPlot use set_header, only: SetInt use surface_header, only: SurfaceContainer - use source_header, only: ExtSource + use source_header, only: SourceDistribution use tally_header, only: TallyObject, TallyMap, TallyResult use trigger_header, only: KTrigger use timer_header, only: Timer @@ -182,7 +182,7 @@ module global logical :: satisfy_triggers = .false. ! whether triggers are satisfied ! External source - type(ExtSource), target :: external_source + type(SourceDistribution), allocatable :: external_source(:) ! Source and fission bank type(Bank), allocatable, target :: source_bank(:) @@ -450,9 +450,7 @@ contains if (allocated(micro_xs)) deallocate(micro_xs) ! Deallocate external source - if (allocated(external_source % space)) deallocate(external_source % space) - if (allocated(external_source % angle)) deallocate(external_source % angle) - if (allocated(external_source % energy)) deallocate(external_source % energy) + if (allocated(external_source)) deallocate(external_source) ! Deallocate k and entropy if (allocated(k_generation)) deallocate(k_generation) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index f4211bfb3a..c10398d341 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -84,6 +84,7 @@ contains type(Node), pointer :: node_trigger => null() type(Node), pointer :: node_keff_trigger => null() type(NodeList), pointer :: node_scat_list => null() + type(NodeList), pointer :: node_source_list => null() ! Display output message call write_message("Reading settings XML file...", 5) @@ -344,242 +345,256 @@ contains ! ========================================================================== ! EXTERNAL SOURCE - ! Get pointer to source - if (check_for_node(doc, "source")) then - call get_node_ptr(doc, "source", node_source) - else - call fatal_error("No source specified in settings XML file.") - end if + ! Get point to list of elements and make sure there is at least one + call get_node_list(doc, "source", node_source_list) + n = get_list_size(node_source_list) + if (n == 0) call fatal_error("No source specified in settings XML file.") - ! Check if we want to write out source - if (check_for_node(node_source, "write_initial")) then - call get_node_value(node_source, "write_initial", temp_str) - temp_str = to_lower(temp_str) - if (trim(temp_str) == 'true' .or. trim(temp_str) == '1') & - write_initial_source = .true. - end if + ! Allocate array for sources + allocate(external_source(n)) - ! Check for external source file - if (check_for_node(node_source, "file")) then - ! Copy path of source file - call get_node_value(node_source, "file", path_source) + ! Read each source + do i = 1, n + ! Get pointer to source + call get_list_item(node_source_list, i, node_source) - ! Check if source file exists - inquire(FILE=path_source, EXIST=file_exists) - if (.not. file_exists) then - call fatal_error("Binary source file '" // trim(path_source) & - &// "' does not exist!") + ! Check if we want to write out source + if (check_for_node(node_source, "write_initial")) then + call get_node_value(node_source, "write_initial", temp_str) + temp_str = to_lower(temp_str) + if (trim(temp_str) == 'true' .or. trim(temp_str) == '1') & + write_initial_source = .true. end if - else + ! Check for source strength + if (check_for_node(node_source, "strength")) then + call get_node_value(node_source, "strength", external_source(i)%strength) + else + external_source(i)%strength = ONE + end if - ! Spatial distribution for external source - if (check_for_node(node_source, "space")) then + ! Check for external source file + if (check_for_node(node_source, "file")) then + ! Copy path of source file + call get_node_value(node_source, "file", path_source) - ! Get pointer to spatial distribution - call get_node_ptr(node_source, "space", node_space) + ! Check if source file exists + inquire(FILE=path_source, EXIST=file_exists) + if (.not. file_exists) then + call fatal_error("Binary source file '" // trim(path_source) & + &// "' does not exist!") + end if - ! Check for type of spatial distribution - type = '' - if (check_for_node(node_space, "type")) & - call get_node_value(node_space, "type", type) - select case (to_lower(type)) - case ('independent') - allocate(SpatialIndependent :: external_source%space) + else - case ('box') - allocate(SpatialBox :: external_source%space) + ! Spatial distribution for external source + if (check_for_node(node_source, "space")) then - case ('fission') - allocate(SpatialBox :: external_source%space) - select type(space => external_source%space) - type is (SpatialBox) - space%only_fissionable = .true. + ! Get pointer to spatial distribution + call get_node_ptr(node_source, "space", node_space) + + ! Check for type of spatial distribution + type = '' + if (check_for_node(node_space, "type")) & + call get_node_value(node_space, "type", type) + select case (to_lower(type)) + case ('independent') + allocate(SpatialIndependent :: external_source(i)%space) + + case ('box') + allocate(SpatialBox :: external_source(i)%space) + + case ('fission') + allocate(SpatialBox :: external_source(i)%space) + select type(space => external_source(i)%space) + type is (SpatialBox) + space%only_fissionable = .true. + end select + + case ('point') + allocate(SpatialPoint :: external_source(i)%space) + + case default + call fatal_error("Invalid spatial distribution for external source: "& + // trim(type)) end select - case ('point') - allocate(SpatialPoint :: external_source%space) + select type (space => external_source(i)%space) + type is (SpatialIndependent) + ! Read distribution for x coordinate + if (check_for_node(node_space, "x")) then + call get_node_ptr(node_space, "x", node_dist) + call distribution_from_xml(space%x, node_dist) + else + allocate(Discrete :: space%x) + select type (dist => space%x) + type is (Discrete) + allocate(dist%x(1), dist%p(1)) + dist%x(1) = ZERO + dist%p(1) = ONE + end select + end if - case default - call fatal_error("Invalid spatial distribution for external source: "& - // trim(type)) - end select + ! Read distribution for y coordinate + if (check_for_node(node_space, "y")) then + call get_node_ptr(node_space, "y", node_dist) + call distribution_from_xml(space%y, node_dist) + else + allocate(Discrete :: space%y) + select type (dist => space%y) + type is (Discrete) + allocate(dist%x(1), dist%p(1)) + dist%x(1) = ZERO + dist%p(1) = ONE + end select + end if - select type (space => external_source%space) - type is (SpatialIndependent) - ! Read distribution for x coordinate - if (check_for_node(node_space, "x")) then - call get_node_ptr(node_space, "x", node_dist) - call distribution_from_xml(space%x, node_dist) - else - allocate(Discrete :: space%x) - select type (dist => space%x) - type is (Discrete) - allocate(dist%x(1), dist%p(1)) - dist%x(1) = ZERO - dist%p(1) = ONE - end select - end if + if (check_for_node(node_space, "z")) then + call get_node_ptr(node_space, "z", node_dist) + call distribution_from_xml(space%z, node_dist) + else + allocate(Discrete :: space%z) + select type (dist => space%z) + type is (Discrete) + allocate(dist%x(1), dist%p(1)) + dist%x(1) = ZERO + dist%p(1) = ONE + end select + end if - ! Read distribution for y coordinate - if (check_for_node(node_space, "y")) then - call get_node_ptr(node_space, "y", node_dist) - call distribution_from_xml(space%y, node_dist) - else - allocate(Discrete :: space%y) - select type (dist => space%y) - type is (Discrete) - allocate(dist%x(1), dist%p(1)) - dist%x(1) = ZERO - dist%p(1) = ONE - end select - end if + type is (SpatialBox) + ! Make sure correct number of parameters are given + if (get_arraysize_double(node_space, "parameters") /= 6) then + call fatal_error('Box/fission spatial source must have & + &six parameters specified.') + end if - if (check_for_node(node_space, "z")) then - call get_node_ptr(node_space, "z", node_dist) - call distribution_from_xml(space%z, node_dist) - else - allocate(Discrete :: space%z) - select type (dist => space%z) - type is (Discrete) - allocate(dist%x(1), dist%p(1)) - dist%x(1) = ZERO - dist%p(1) = ONE - end select - end if + ! Read lower-right/upper-left coordinates + allocate(temp_real(6)) + call get_node_array(node_space, "parameters", temp_real) + space%lower_left(:) = temp_real(1:3) + space%upper_right(:) = temp_real(4:6) + deallocate(temp_real) - type is (SpatialBox) - ! Make sure correct number of parameters are given - if (get_arraysize_double(node_space, "parameters") /= 6) then - call fatal_error('Box/fission spatial source must have & - &six parameters specified.') - end if + type is (SpatialPoint) + ! Make sure correct number of parameters are given + if (get_arraysize_double(node_space, "parameters") /= 3) then + call fatal_error('Point spatial source must have & + &three parameters specified.') + end if - ! Read lower-right/upper-left coordinates - allocate(temp_real(6)) - call get_node_array(node_space, "parameters", temp_real) - space%lower_left(:) = temp_real(1:3) - space%upper_right(:) = temp_real(4:6) - deallocate(temp_real) + ! Read location of point source + allocate(temp_real(3)) + call get_node_array(node_space, "parameters", temp_real) + space%xyz(:) = temp_real + deallocate(temp_real) - type is (SpatialPoint) - ! Make sure correct number of parameters are given - if (get_arraysize_double(node_space, "parameters") /= 3) then - call fatal_error('Point spatial source must have & - &three parameters specified.') - end if + end select - ! Read location of point source - allocate(temp_real(3)) - call get_node_array(node_space, "parameters", temp_real) - space%xyz(:) = temp_real - deallocate(temp_real) - - end select - - else - call fatal_error("No spatial distribution specified for external & - &source.") - end if - - ! Determine external source angular distribution - if (check_for_node(node_source, "angle")) then - - ! Get pointer to angular distribution - call get_node_ptr(node_source, "angle", node_angle) - - ! Determine number of parameters specified - if (check_for_node(node_angle, "parameters")) then - n = get_arraysize_double(node_angle, "parameters") else - n = 0 + call fatal_error("No spatial distribution specified for external & + &source.") end if - ! Check for type of angular distribution - type = '' - if (check_for_node(node_angle, "type")) & - call get_node_value(node_angle, "type", type) - select case (to_lower(type)) - case ('isotropic') - allocate(Isotropic :: external_source%angle) + ! Determine external source angular distribution + if (check_for_node(node_source, "angle")) then - case ('monodirectional') - allocate(Monodirectional :: external_source%angle) + ! Get pointer to angular distribution + call get_node_ptr(node_source, "angle", node_angle) - case ('mu-phi') - allocate(PolarAzimuthal :: external_source%angle) - - case default - call fatal_error("Invalid angular distribution for external source: "& - // trim(type)) - end select - - ! Read reference directional unit vector - if (check_for_node(node_angle, "reference_uvw")) then - n = get_arraysize_double(node_angle, "reference_uvw") - if (n /= 3) then - call fatal_error('Angular distribution reference direction must have & - &three parameters specified.') + ! Determine number of parameters specified + if (check_for_node(node_angle, "parameters")) then + n = get_arraysize_double(node_angle, "parameters") + else + n = 0 end if - call get_node_array(node_angle, "reference_uvw", & - external_source%angle%reference_uvw) + + ! Check for type of angular distribution + type = '' + if (check_for_node(node_angle, "type")) & + call get_node_value(node_angle, "type", type) + select case (to_lower(type)) + case ('isotropic') + allocate(Isotropic :: external_source(i)%angle) + + case ('monodirectional') + allocate(Monodirectional :: external_source(i)%angle) + + case ('mu-phi') + allocate(PolarAzimuthal :: external_source(i)%angle) + + case default + call fatal_error("Invalid angular distribution for external source: "& + // trim(type)) + end select + + ! Read reference directional unit vector + if (check_for_node(node_angle, "reference_uvw")) then + n = get_arraysize_double(node_angle, "reference_uvw") + if (n /= 3) then + call fatal_error('Angular distribution reference direction must have & + &three parameters specified.') + end if + call get_node_array(node_angle, "reference_uvw", & + external_source(i)%angle%reference_uvw) + else + ! By default, set reference unit vector to be positive z-direction + external_source(i)%angle%reference_uvw(:) = [ZERO, ZERO, ONE] + end if + + ! Read parameters for angle distribution + select type (angle => external_source(i)%angle) + type is (Monodirectional) + call get_node_array(node_angle, "reference_uvw", & + external_source(i)%angle%reference_uvw) + + type is (PolarAzimuthal) + if (check_for_node(node_angle, "mu")) then + call get_node_ptr(node_angle, "mu", node_dist) + call distribution_from_xml(angle%mu, node_dist) + else + allocate(Uniform :: angle%mu) + select type (mu => angle%mu) + type is (Uniform) + mu%a = -ONE + mu%b = ONE + end select + end if + + if (check_for_node(node_angle, "phi")) then + call get_node_ptr(node_angle, "phi", node_dist) + call distribution_from_xml(angle%phi, node_dist) + else + allocate(Uniform :: angle%phi) + select type (phi => angle%phi) + type is (Uniform) + phi%a = ZERO + phi%b = TWO*PI + end select + end if + end select + else - ! By default, set reference unit vector to be positive z-direction - external_source%angle%reference_uvw(:) = [ZERO, ZERO, ONE] + ! Set default angular distribution isotropic + allocate(Isotropic :: external_source(i)%angle) + external_source(i)%angle%reference_uvw(:) = [ZERO, ZERO, ONE] end if - ! Read parameters for angle distribution - select type (angle => external_source%angle) - type is (Monodirectional) - call get_node_array(node_angle, "reference_uvw", & - external_source%angle%reference_uvw) - - type is (PolarAzimuthal) - if (check_for_node(node_angle, "mu")) then - call get_node_ptr(node_angle, "mu", node_dist) - call distribution_from_xml(angle%mu, node_dist) - else - allocate(Uniform :: angle%mu) - select type (mu => angle%mu) - type is (Uniform) - mu%a = -ONE - mu%b = ONE - end select - end if - - if (check_for_node(node_angle, "phi")) then - call get_node_ptr(node_angle, "phi", node_dist) - call distribution_from_xml(angle%phi, node_dist) - else - allocate(Uniform :: angle%phi) - select type (phi => angle%phi) - type is (Uniform) - phi%a = ZERO - phi%b = TWO*PI - end select - end if - end select - - else - ! Set default angular distribution isotropic - allocate(Isotropic :: external_source%angle) - external_source%angle%reference_uvw(:) = [ZERO, ZERO, ONE] + ! Determine external source energy distribution + if (check_for_node(node_source, "energy")) then + call get_node_ptr(node_source, "energy", node_dist) + call distribution_from_xml(external_source(i)%energy, node_dist) + else + ! Default to a Watt spectrum with parameters 0.988 MeV and 2.249 MeV^-1 + allocate(Watt :: external_source(i)%energy) + select type(energy => external_source(i)%energy) + type is (Watt) + energy%a = 0.988_8 + energy%b = 2.249_8 + end select + end if end if - - ! Determine external source energy distribution - if (check_for_node(node_source, "energy")) then - call get_node_ptr(node_source, "energy", node_dist) - call distribution_from_xml(external_source%energy, node_dist) - else - ! Default to a Watt spectrum with parameters 0.988 MeV and 2.249 MeV^-1 - allocate(Watt :: external_source%energy) - select type(energy => external_source%energy) - type is (Watt) - energy%a = 0.988_8 - energy%b = 2.249_8 - end select - end if - end if + end do ! Survival biasing if (check_for_node(doc, "survival_biasing")) then diff --git a/src/relaxng/settings.rnc b/src/relaxng/settings.rnc index 6bbd187b5b..2fa2b57d82 100644 --- a/src/relaxng/settings.rnc +++ b/src/relaxng/settings.rnc @@ -64,24 +64,23 @@ element settings { element seed { xsd:positiveInteger }? & - - element source { grammar { start = - element file { xsd:string { maxLength = "255" } }? & + (element strength { xsd:double } | attribute strength { xsd:double })? & + (element file { xsd:string } | attribute file { xsd:string })? & element space { (element type { xsd:string } | attribute type { xsd:string }) & - (element parameters { xsd:double+ } | - attribute parameters { xsd:double+ })? & + (element parameters { list { xsd:double+ } } | + attribute parameters { list { xsd:double+ } })? & element x { distribution }? & element y { distribution }? & element z { distribution }? }? & element angle { (element type { xsd:string } | attribute type { xsd:string }) & - (element reference_uvw { xsd:double, xsd:double, xsd:double } | - attribute reference_uvw { xsd:double, xsd:double, xsd:double })? & + (element reference_uvw { list { xsd:double, xsd:double, xsd:double } } | + attribute reference_uvw { list { xsd:double, xsd:double, xsd:double } })? & element mu { distribution }? & element phi { distribution }? }? & @@ -95,7 +94,7 @@ element settings { (element parameters { list { xsd:double+ } } | attribute parameters { list { xsd:double+ } })? } - }? & + }* & element state_point { ( diff --git a/src/relaxng/settings.rng b/src/relaxng/settings.rng index 9fd2dcf2a4..72efbe4add 100644 --- a/src/relaxng/settings.rng +++ b/src/relaxng/settings.rng @@ -264,17 +264,30 @@ - + - - - 255 - - + + + + + + + + + + + + + + + + + + @@ -290,14 +303,18 @@ - - - + + + + + - - - + + + + + @@ -426,7 +443,7 @@ - + diff --git a/src/source.F90 b/src/source.F90 index 2ac68a3149..3700884868 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -101,6 +101,8 @@ contains type(Bank), intent(inout) :: site ! source site integer :: i ! dummy loop index + integer :: n_source ! number of source distributions + real(8) :: c ! cumulative frequency real(8) :: r(3) ! sampled coordinates real(8) :: p_min(3) ! minimum coordinates of source real(8) :: p_max(3) ! maximum coordinates of source @@ -117,11 +119,24 @@ contains ! Set particle defaults call p%initialize() + ! Sample from among multiple source distributions + n_source = size(external_source) + if (n_source > 1) then + r(1) = prn()*sum(external_source(:)%strength) + c = ZERO + do i = 1, n_source + c = c + external_source(i)%strength + if (r(1) < c) exit + end do + else + i = 1 + end if + ! Repeat sampling source location until a good site has been found found = .false. do while (.not.found) ! Sample spatial distribution - site%xyz(:) = external_source%space%sample() + site%xyz(:) = external_source(i)%space%sample() ! Fill p with needed data p%coord(1)%xyz(:) = site%xyz @@ -138,7 +153,7 @@ contains end if ! Check if spatial site is in fissionable material - select type (space => external_source%space) + select type (space => external_source(i)%space) type is (SpatialBox) if (space%only_fissionable) then if (p%material == MATERIAL_VOID) then @@ -153,10 +168,10 @@ contains call p%clear() ! Sample angle - site%uvw(:) = external_source%angle%sample() + site%uvw(:) = external_source(i)%angle%sample() ! Check for monoenergetic source above maximum neutron energy - select type (energy => external_source%energy) + select type (energy => external_source(i)%energy) type is (Discrete) if (any(energy%x >= energy_max_neutron)) then call fatal_error("Source energy above range of energies of at least & @@ -166,7 +181,7 @@ contains do ! Sample energy spectrum - site%E = external_source%energy%sample() + site%E = external_source(i)%energy%sample() ! resample if energy is greater than maximum neutron energy if (site%E < energy_max_neutron) exit diff --git a/src/source_header.F90 b/src/source_header.F90 index d87c905897..eefc007a47 100644 --- a/src/source_header.F90 +++ b/src/source_header.F90 @@ -6,14 +6,15 @@ module source_header implicit none !=============================================================================== -! EXTSOURCE describes an external source of neutrons for a fixed-source problem -! or for the starting source in a k eigenvalue problem +! SOURCEDISTRIBUTION describes an external source of particles for a +! fixed-source problem or for the starting source in a k eigenvalue problem !=============================================================================== - type ExtSource + type SourceDistribution + real(8) :: strength ! source strength class(SpatialDistribution), allocatable :: space ! spatial distribution class(UnitSphereDistribution), allocatable :: angle ! angle distribution class(Distribution), allocatable :: energy ! energy distribution - end type ExtSource + end type SourceDistribution end module source_header diff --git a/tests/test_filter_azimuthal/inputs_true.dat b/tests/test_filter_azimuthal/inputs_true.dat index 42b6e820be..e4a964700f 100644 --- a/tests/test_filter_azimuthal/inputs_true.dat +++ b/tests/test_filter_azimuthal/inputs_true.dat @@ -1 +1 @@ -1d5f81d12f607f4a8436dfb65167e2a2be55dbf86fbc2cc465cec274671be5eaff517d781a4d40e264bb695e3c66c7ff61a650217c99de2ca8c15ca747fe6b80 \ No newline at end of file +57d6fd9cb5180c38efd2729a5dea0708cbd5fd0bf7dcf0c9d5c9cef5d818aeab5a926d03e70dedcf1b60d5740938fb3ba80e6ccdb09c661d159c0893da3bd593 \ No newline at end of file diff --git a/tests/test_filter_cell/inputs_true.dat b/tests/test_filter_cell/inputs_true.dat index 2320ff6ab4..d7f0a9e7f8 100644 --- a/tests/test_filter_cell/inputs_true.dat +++ b/tests/test_filter_cell/inputs_true.dat @@ -1 +1 @@ -caae173f01f7073d634a68a5c4ce97177423e13596a863976e1c40303dc8c05afed457d5a1aa0ae73627ec953143e4f9c1f45bdbd3b0cca76433062467d59777 \ No newline at end of file +f8359184c02fbab5dca5368689a84924066ab1fb09cae575588ceddd696d5461db577498df9959365d89fe933e9b338390e44e362c603c6f2aa5bcf4acc14b20 \ No newline at end of file diff --git a/tests/test_filter_cellborn/inputs_true.dat b/tests/test_filter_cellborn/inputs_true.dat index 5aef4cbb06..a4f1a74b8f 100644 --- a/tests/test_filter_cellborn/inputs_true.dat +++ b/tests/test_filter_cellborn/inputs_true.dat @@ -1 +1 @@ -2f24eb86cda981982a8db5bb110c72e9cef542c06e15b748c1c7e459f96b0d8ba0978b51dffc006e813cd2e2ae1fa0357336f8322ae263189841afde01f0327b \ No newline at end of file +8ae662f8881ce8cdec550069c6233c2c91e9a10f7200af6892cf6f2d77712ccfa17895dbd2eee02e6daf3d665c6ed84b29e17d89ff519e70c37b36d75a431d53 \ No newline at end of file diff --git a/tests/test_filter_delayedgroup/inputs_true.dat b/tests/test_filter_delayedgroup/inputs_true.dat index 21bce00fd2..6b06d41735 100644 --- a/tests/test_filter_delayedgroup/inputs_true.dat +++ b/tests/test_filter_delayedgroup/inputs_true.dat @@ -1 +1 @@ -e771470681d3b4af57a70d148f5eb728df57f1fd7bdb5d6f76ac556b69f10bf0cdd5645fe488f1e17f07cbb72e9fb34af2fd7ede95c8e39c5ffa6ea9b6c5810e \ No newline at end of file +a7c8ce7ffbc3a7b965d8a3077a4d9132130561afef19047b279b2d23198e248b09664856a092a32394894e19fef7708cebad99b3839d735c4e98ae0c9af58cb7 \ No newline at end of file diff --git a/tests/test_filter_energy/inputs_true.dat b/tests/test_filter_energy/inputs_true.dat index b120e9fd62..4098aaece9 100644 --- a/tests/test_filter_energy/inputs_true.dat +++ b/tests/test_filter_energy/inputs_true.dat @@ -1 +1 @@ -49835200052ee1a4c9583a7bb4e9430de7d01a6d7a8d4f63ae37be9bbac4fd8c7ed9135ecbc4ab4cb075fd4d77b322265783463dd07c127decceee8c9fe25bfd \ No newline at end of file +51d3e2c43f36712a7b26c5fa26e0e2ca6fb9af205af04f0f8cd44c6b100e36382417c2c63d711e4677ce3c1958d15072727d5fd32424a3f6eb08d1f3b1c7db5a \ No newline at end of file diff --git a/tests/test_filter_energyout/inputs_true.dat b/tests/test_filter_energyout/inputs_true.dat index 7096648e6c..be1ade923f 100644 --- a/tests/test_filter_energyout/inputs_true.dat +++ b/tests/test_filter_energyout/inputs_true.dat @@ -1 +1 @@ -183b4a06cbd0930cfa4f28d0c385cf3ae93ab97c171580c2ba9eec0e4b716102ad83f510d62258ef6769c446e72e1d5ba9f630b171ee239ec04c9bbd1e56742e \ No newline at end of file +f0810606c5f947a9fe03bcfc87de3883ce46f59d8603e02ed30f853ebf301b2dc6bdcd109889801ada9e6e0b7be4932efeca97d4beea875af8c8e3ecb7511444 \ No newline at end of file diff --git a/tests/test_filter_group_transfer/inputs_true.dat b/tests/test_filter_group_transfer/inputs_true.dat index 813bb43c18..9e3bbdd1ce 100644 --- a/tests/test_filter_group_transfer/inputs_true.dat +++ b/tests/test_filter_group_transfer/inputs_true.dat @@ -1 +1 @@ -461a6a4ec3b0b6dc7199c09fa8f527e51cc7a1ea4281a708f8b7bcdbb12f7162027928dfcef68a24eaf6c06037a68e151df9aac9eac6ce56617466f2f5270b71 \ No newline at end of file +c4d4334d44956d6dc9abe854a5e9403d7f8a87ffb04a15a3d128e8d18eb4111f46ca277b751e1b0e836d69527502f9abba115a4b2fc64c38da63a9d57968d860 \ No newline at end of file diff --git a/tests/test_filter_material/inputs_true.dat b/tests/test_filter_material/inputs_true.dat index aaa4a4939f..59afbce647 100644 --- a/tests/test_filter_material/inputs_true.dat +++ b/tests/test_filter_material/inputs_true.dat @@ -1 +1 @@ -2fbd0986abff08126680925284929cf67bdad0cd564775197b78065ce3b0e6ad8094f5ca4d14ea69347db69a6cdcc9796a095178ae9b14a927b101f32f3cd0ec \ No newline at end of file +7689b2c88391128377b7f9bfcda347a42f77d69d194186629fa965ecd3fc51be0bfd1ac92fb9d7551128d8b6ed5241ead4fb94b27ae29d80230863e78fbbcb68 \ No newline at end of file diff --git a/tests/test_filter_mu/inputs_true.dat b/tests/test_filter_mu/inputs_true.dat index b0a607ad34..19d08cb457 100644 --- a/tests/test_filter_mu/inputs_true.dat +++ b/tests/test_filter_mu/inputs_true.dat @@ -1 +1 @@ -cd2aeb24baafe9a904e697955990f6cffb5f25618fdf8c972775715bfe6e92bc259e36fd2b5addff8181439de58ad6f530972ec391e827f46146a2aaace34358 \ No newline at end of file +ecc649936e2cc364b079944f47e18fb81ec7290017b4bd5837e5aa1e24e1146df77897f44c7c2a88500e3f525566b51777cd9b84ec6a636f5883e411e4c1f75c \ No newline at end of file diff --git a/tests/test_filter_polar/inputs_true.dat b/tests/test_filter_polar/inputs_true.dat index db67a890f1..b3773a9d6b 100644 --- a/tests/test_filter_polar/inputs_true.dat +++ b/tests/test_filter_polar/inputs_true.dat @@ -1 +1 @@ -2de29e0a083af0722039ebc246469f26e260d604ab8b76314b2ac472bbd23004e031aec7afe3dbfc4c6112428846cd0cf0c1430e878832b9dab36463d026dee6 \ No newline at end of file +301824991a022884215609f39797a61933faf7ccacf81ad6bb883af08857563e8bd74ab946fc4fd072860168d77f76d0c76d1467375158072dce431fc6a1c449 \ No newline at end of file diff --git a/tests/test_filter_universe/inputs_true.dat b/tests/test_filter_universe/inputs_true.dat index 7cda1ab848..a55ba45f68 100644 --- a/tests/test_filter_universe/inputs_true.dat +++ b/tests/test_filter_universe/inputs_true.dat @@ -1 +1 @@ -51fcaf0aa527d1fd1022e5f312d4d25cd9bacc5fc9792d9f7702ee97cac43700a31f25be767a2cff769c37b5e1cdf3f922467977a9958fa34561e2a102bf8537 \ No newline at end of file +164804414f48a818c93e197f2901ce6ae375d88071a03e89c920dbc4462e7a2c8d2c85acf6560fcd6eb3d7c0c53d3b426ab1cc4b7721266fe8adec3e7231149e \ No newline at end of file diff --git a/tests/test_mgxs_library_condense/inputs_true.dat b/tests/test_mgxs_library_condense/inputs_true.dat index 37397c5947..b94f64122d 100644 --- a/tests/test_mgxs_library_condense/inputs_true.dat +++ b/tests/test_mgxs_library_condense/inputs_true.dat @@ -1 +1 @@ -35f99f1973b3bf3efcec6c2dddf56d6679a15dab8582ab5336e86e4fdf90967ce91036e5c30c345decb994ab9133a906b82dc8fad0cdd3398a612d9aa05c1c77 \ No newline at end of file +53b1740921b71e4ead909ab9e4c25f7d43990fe7d7051fde6f66c39c0a6082177385640244010e1b9dbeaf5f34adf1627e9603088af729fadd6b589c19102edc \ No newline at end of file diff --git a/tests/test_mgxs_library_hdf5/inputs_true.dat b/tests/test_mgxs_library_hdf5/inputs_true.dat index 37397c5947..b94f64122d 100644 --- a/tests/test_mgxs_library_hdf5/inputs_true.dat +++ b/tests/test_mgxs_library_hdf5/inputs_true.dat @@ -1 +1 @@ -35f99f1973b3bf3efcec6c2dddf56d6679a15dab8582ab5336e86e4fdf90967ce91036e5c30c345decb994ab9133a906b82dc8fad0cdd3398a612d9aa05c1c77 \ No newline at end of file +53b1740921b71e4ead909ab9e4c25f7d43990fe7d7051fde6f66c39c0a6082177385640244010e1b9dbeaf5f34adf1627e9603088af729fadd6b589c19102edc \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/inputs_true.dat b/tests/test_mgxs_library_no_nuclides/inputs_true.dat index 37397c5947..b94f64122d 100644 --- a/tests/test_mgxs_library_no_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_no_nuclides/inputs_true.dat @@ -1 +1 @@ -35f99f1973b3bf3efcec6c2dddf56d6679a15dab8582ab5336e86e4fdf90967ce91036e5c30c345decb994ab9133a906b82dc8fad0cdd3398a612d9aa05c1c77 \ No newline at end of file +53b1740921b71e4ead909ab9e4c25f7d43990fe7d7051fde6f66c39c0a6082177385640244010e1b9dbeaf5f34adf1627e9603088af729fadd6b589c19102edc \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/inputs_true.dat b/tests/test_mgxs_library_nuclides/inputs_true.dat index 2e299773a3..f87bc242dc 100644 --- a/tests/test_mgxs_library_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_nuclides/inputs_true.dat @@ -1 +1 @@ -7c1deb8a54fbe1a1ce6ef27cea4a11995210ad3e5ecf32bd83d7c80041edf0793378a7325ffe7ebf9c537e9c278fd4545642fec6c1e46b9c5418118f035d5e95 \ No newline at end of file +c6a2a1c707bc723fd38bafd18efcfb22beaac0bd5953d7524ced1d47866cc1e1ee4152e39234d32a06fe43aff446fb12f8c5b62a44075607f274778b49110762 \ No newline at end of file diff --git a/tests/test_score_MT/inputs_true.dat b/tests/test_score_MT/inputs_true.dat index b361c28cf2..33e732bcba 100644 --- a/tests/test_score_MT/inputs_true.dat +++ b/tests/test_score_MT/inputs_true.dat @@ -1 +1 @@ -7270299e4a4dde19d250825b0124fa36b60df847f046e058ccdfc74d4690beaaaaf387e050f596cb3445caf793d6a390ddb2d19650a3dccd4eb60056ae3b1477 \ No newline at end of file +0e8ecbc5afb7fb5e521913f239849febadbc969bbf99159b42d6d7e7930dcdb34f0e778e00a6e7c48170d4dd176b5776455ba96b722ad9cb6f2438e6ac3ce406 \ No newline at end of file diff --git a/tests/test_score_absorption/inputs_true.dat b/tests/test_score_absorption/inputs_true.dat index c4c133600a..7932cb78ec 100644 --- a/tests/test_score_absorption/inputs_true.dat +++ b/tests/test_score_absorption/inputs_true.dat @@ -1 +1 @@ -482760c362f56e453ce4b466083e77f84a461e636330d7cc2cb1cf7facced678a57a7c785ff9d039b3f575396cb435f99df05d6fa207f553c28ed3ce4f8151b3 \ No newline at end of file +df0089700d7ca25e997d9e6da4aa7132575298feb14398b2e806961fdb2e1d9bfbd23beb7bbc2a71b2ce18abe324702c2ab654af32e826bba5571a068b00a848 \ No newline at end of file diff --git a/tests/test_score_delayed_nufission/inputs_true.dat b/tests/test_score_delayed_nufission/inputs_true.dat index 5a0ec8a211..11a92dea2c 100644 --- a/tests/test_score_delayed_nufission/inputs_true.dat +++ b/tests/test_score_delayed_nufission/inputs_true.dat @@ -1 +1 @@ -f3c246a1c83b1283163b22069f78231e3f6623fa3c2eb664ce400d0fff07105b6106d0fa8c6dfd49512a7eb676c80e4ee602e19063a9fc453394fe07a94a1bdd \ No newline at end of file +2fb062798cab618153187fe3d8aaee4c6fb61132ab8215742e5939633ab321fb937d4d33a85856271bdf465257aca9cbba1b52716f233c22202ecfbbb9c15b1f \ No newline at end of file diff --git a/tests/test_score_events/inputs_true.dat b/tests/test_score_events/inputs_true.dat index bb0fef8e5d..4862547c16 100644 --- a/tests/test_score_events/inputs_true.dat +++ b/tests/test_score_events/inputs_true.dat @@ -1 +1 @@ -a97ae7049ac8c30b838987a3e87cbe5ff70b004ee0434e6204931def46c4c099bfef06e74658dab1114cc1035d3f404211a9bc94ef96e9cfb5b788da39d17bbd \ No newline at end of file +1e43a3ef68b15aededc0466c913d2f784d237adc88827a980a3dcdcfd64e9bb73679cc3114d69caf389f9c478c439a8771602c397461b90ae0db58a81bfb739a \ No newline at end of file diff --git a/tests/test_score_fission/inputs_true.dat b/tests/test_score_fission/inputs_true.dat index d90ca274ee..fb5e6f8915 100644 --- a/tests/test_score_fission/inputs_true.dat +++ b/tests/test_score_fission/inputs_true.dat @@ -1 +1 @@ -5a0461d03b0d9653ee35fded4be23e9b8316e3b7e21d352f822bc1f9763c03e9edab922bdc431f30d2a647c4216d45deba396bf56203027a328b7b28d970e0b8 \ No newline at end of file +dc94fe38751001e3950450f8f6e7a865a42e699be76372ac7846da863283b6bb963c32b477ace4217be60e1f7a473e946d27238b3faf17d3b7426dbd1a34f9e6 \ No newline at end of file diff --git a/tests/test_score_flux/inputs_true.dat b/tests/test_score_flux/inputs_true.dat index 2e7358c49e..934ab9d120 100644 --- a/tests/test_score_flux/inputs_true.dat +++ b/tests/test_score_flux/inputs_true.dat @@ -1 +1 @@ -33b7b97f55a337d7001e7927517db6d36d512efec01fa5512c80bbc76b0b581f691a72a3810251aa97491b8cdf25a8ddcc9c9b3e3f54ccc6c315a84e715567d3 \ No newline at end of file +bd5362b44190406434cdaa086b7e7397e8f6841b86ad61eda2c3f604df03746832dbcff0e8e96e355f5ba5b4333d6a336358379f8ced51f7a1721ceacb620daa \ No newline at end of file diff --git a/tests/test_score_flux_yn/inputs_true.dat b/tests/test_score_flux_yn/inputs_true.dat index c7a1a1b52e..5ece3ef1ba 100644 --- a/tests/test_score_flux_yn/inputs_true.dat +++ b/tests/test_score_flux_yn/inputs_true.dat @@ -1 +1 @@ -b1a63345fc721f87c8fc25babb06741b585ee5dff5f29bb6debfbabb2ad57cb762d98c14e544df998a27bc725fb2704092fcdde54315ff832dff96c3641551d0 \ No newline at end of file +7909822f2ad84443506129719c664b71ac0eac875a7c234be42c553564435794b6028078b096b21e9fb5dad650495b84f2b53decf73e277c84a3ea52799c008e \ No newline at end of file diff --git a/tests/test_score_inverse_velocity/inputs_true.dat b/tests/test_score_inverse_velocity/inputs_true.dat index 0546cf828f..96cbc7378a 100644 --- a/tests/test_score_inverse_velocity/inputs_true.dat +++ b/tests/test_score_inverse_velocity/inputs_true.dat @@ -1 +1 @@ -ba1010f940c50314d61aae9f729b7bb476a6b35c5556fbc689ba3fde70ff50b0ba5dad0db3b38349a1562d67817047090ac450a64d895c8f3393163fe7914763 \ No newline at end of file +4eee301ac8b984041ded725f1b031602e823edec1dd0883481fba794d6301eb5b83a0e87cf77b1298901de518c783ee5a017a91b5ac962ab0db8b37bb9918053 \ No newline at end of file diff --git a/tests/test_score_kappafission/inputs_true.dat b/tests/test_score_kappafission/inputs_true.dat index ecb42ddb46..b89696c82b 100644 --- a/tests/test_score_kappafission/inputs_true.dat +++ b/tests/test_score_kappafission/inputs_true.dat @@ -1 +1 @@ -57e4aa7550789aec0fcbc4a8917e9d28b1f1ae098a09cde95b757fd87d0dd3924c1bb9d4b23c59cd3793446fb6bbc8af4e1bb46323d70d5e5acd13db1167f545 \ No newline at end of file +32c8c6625dbeecd8ed670871234a0aa9878a29cd86d93328151d90eda209bf70ee83901418cb29f7e8ef66d6f9bdc74a350f2340b285abc64d772baf02ed6377 \ No newline at end of file diff --git a/tests/test_score_nufission/inputs_true.dat b/tests/test_score_nufission/inputs_true.dat index 52f7765fa7..0e6d19262d 100644 --- a/tests/test_score_nufission/inputs_true.dat +++ b/tests/test_score_nufission/inputs_true.dat @@ -1 +1 @@ -a42b2e165f59d3f499865d5db1e7db9b4cb25e48290f94080e569a9efc0b437d75cbb5773ac564f6cc95b19521fb7bc97a3eb641b491828c90cd086dc0c06a4b \ No newline at end of file +ef1c9dc1906068cb48427ffc8776d8b95810ca1aca4534692ab7f788d8dac84c5f4545c7edbd884b55fb3e2b35aa1f28b9277d359427fe89bed012b38bf6342e \ No newline at end of file diff --git a/tests/test_score_nuscatter/inputs_true.dat b/tests/test_score_nuscatter/inputs_true.dat index 80840f900d..aaf16deca5 100644 --- a/tests/test_score_nuscatter/inputs_true.dat +++ b/tests/test_score_nuscatter/inputs_true.dat @@ -1 +1 @@ -764d3ba6b1bc86b462d44151242bd18fa5f0200b831bb7537cf881b728622799eb95a457f88a503487bfd30095c1fa995818d50a6bc41dd182009772c010e82b \ No newline at end of file +2ec83c8c9175d4fccd6421ef736cced51f90bf01f7e20992a0d1b49db04221132d483032467c9dcda5f562f10a67f5fde1967a025230e4ea2bf9668816881d21 \ No newline at end of file diff --git a/tests/test_score_nuscatter_n/inputs_true.dat b/tests/test_score_nuscatter_n/inputs_true.dat index c63f891d26..cd16f80122 100644 --- a/tests/test_score_nuscatter_n/inputs_true.dat +++ b/tests/test_score_nuscatter_n/inputs_true.dat @@ -1 +1 @@ -17541e365f35ebd25134465a02d9a66e46536c4e3f5769da62137ec94ee7c8fb46ef38b9039aa6430261329a4e1b0ce677174323563e5be2f1368dc0c552e312 \ No newline at end of file +b304e586966abb31fbe625a7a48547e51ea563061928c61bc8bbec01df94b4a61b8c874dd4b5cac86a74508e81dd3f7dd8d801fcc4fe75ded5eeb3f73cf113a2 \ No newline at end of file diff --git a/tests/test_score_nuscatter_pn/inputs_true.dat b/tests/test_score_nuscatter_pn/inputs_true.dat index ef53ee8f65..ae7c108b7a 100644 --- a/tests/test_score_nuscatter_pn/inputs_true.dat +++ b/tests/test_score_nuscatter_pn/inputs_true.dat @@ -1 +1 @@ -8ae1b048b90a049d9ed42336a0a2e8f7a250a14d889cc15e0c2831ed71617a78b92570480a15f936f2dd623c75f55693e38c69041c3cae24aba082409b51bc9f \ No newline at end of file +9c3d305ad2c4ac642db896100805c32ce0cf0bbf89958718a30afde7e1dd1329fb7946c35fc628355d29270760e5f1c3700890dfba1afe8d31f4deab63de86ff \ No newline at end of file diff --git a/tests/test_score_nuscatter_yn/inputs_true.dat b/tests/test_score_nuscatter_yn/inputs_true.dat index 632a144031..da8fc3f2fe 100644 --- a/tests/test_score_nuscatter_yn/inputs_true.dat +++ b/tests/test_score_nuscatter_yn/inputs_true.dat @@ -1 +1 @@ -205e5cac8129797b815f0e79dad6c41a1876157ba69fcffecf67c3603dc36ded5f0168f9961d51fcb7dc7db6d732e7a3e8f82d04947aa0309df56bb8333d4bc9 \ No newline at end of file +c483f62afa60f7390bbd82d7372a1f629f6783f8fb85857c63a3912e8d980118eff38f356b53312d067daa0f190634ac89bebac19cfe15325fb2b440473addae \ No newline at end of file diff --git a/tests/test_score_scatter/inputs_true.dat b/tests/test_score_scatter/inputs_true.dat index 35557cd3c5..28e2bebeee 100644 --- a/tests/test_score_scatter/inputs_true.dat +++ b/tests/test_score_scatter/inputs_true.dat @@ -1 +1 @@ -b5baba05419ce120bd22d935af9cdd6d206ad5dc5cae5991a9d160c70bb029f2d87040fa4e19f7190de64b908ac6a41a8b28db4a4f3883ec16e529b1449e983d \ No newline at end of file +b3e7dc8968d814e455866532c05702196bab7dbdaca3c6cd3eb4f22243efb67755b373a7c54de7d767c6f3e0c4b5db612c345832c8f07cd1f50bc08fc841b3b8 \ No newline at end of file diff --git a/tests/test_score_scatter_n/inputs_true.dat b/tests/test_score_scatter_n/inputs_true.dat index e6e3a395bd..ea71722993 100644 --- a/tests/test_score_scatter_n/inputs_true.dat +++ b/tests/test_score_scatter_n/inputs_true.dat @@ -1 +1 @@ -a153add0502ff0fd4b0670f01679e104be1bb05941e73fb35e426c7f1e41a6144c7eb81fdba0d62ea3f39c7c6798028ff6d5df8c7a50b3e3f9e9bfe72fd48c2f \ No newline at end of file +fae463e84fbb166a9ec03390824e359d162fae9f8556d44681c76907c22a0d48e69281dcce6ffd7f3d6e4b19dad3d705c516328d902878288300f87c4a72a671 \ No newline at end of file diff --git a/tests/test_score_scatter_pn/inputs_true.dat b/tests/test_score_scatter_pn/inputs_true.dat index 3878939c50..9c74a13f93 100644 --- a/tests/test_score_scatter_pn/inputs_true.dat +++ b/tests/test_score_scatter_pn/inputs_true.dat @@ -1 +1 @@ -fe56d58827d1803c1a49391711ad682be4a7cbc51519248812554f66e3e46266edc179f4254291a5f455751d3cdc13a17bbd103b9810c8818f36e4d283b503be \ No newline at end of file +2d2e8de66740bbed327dd926f59d75120b04d30ffb9d7c96876ba21c7768c367c63e3624c3ee40553dc40d9a5379fa0052a932a6c5f45d1ad4327c4ac83cdff2 \ No newline at end of file diff --git a/tests/test_score_scatter_yn/inputs_true.dat b/tests/test_score_scatter_yn/inputs_true.dat index 1ae9f6047d..0bfb564ff8 100644 --- a/tests/test_score_scatter_yn/inputs_true.dat +++ b/tests/test_score_scatter_yn/inputs_true.dat @@ -1 +1 @@ -d80a9e8befab978bc84a231437a2b96c8f6dba81984c9e82a79360feb26bc9875b661131dbaa2deeb66b0aa50a39b2e738303bc40c5c65ee1995cf52f687ae46 \ No newline at end of file +8dd146ebd2008801a4c83470e8d9fcc8d39fe5e687c65f980eca209dd5f7fb8d17bfadf3bf3d452eaa564ee5f35a8fc97adc3dda44160d6ad574b784f2dd0030 \ No newline at end of file diff --git a/tests/test_score_total/inputs_true.dat b/tests/test_score_total/inputs_true.dat index c8b979c725..45bebe24c2 100644 --- a/tests/test_score_total/inputs_true.dat +++ b/tests/test_score_total/inputs_true.dat @@ -1 +1 @@ -8813917cab656135c4eebfdbe5f0d95e6a9409a2b36df1dfb483bdd193a3c0978727918a58399b259b82a7d51ae3f1801148bd978603fec11f27acdbf89520e2 \ No newline at end of file +7bf8aa36c31ca8b34f7c410901cb96e1ba7d389c33c850591519b15753c1322b75e5051c960dbc2e254cf46cc9720dd5e348aac0acbb70d10c71165e2f5ab9e4 \ No newline at end of file diff --git a/tests/test_score_total_yn/inputs_true.dat b/tests/test_score_total_yn/inputs_true.dat index b2818f8568..939252597c 100644 --- a/tests/test_score_total_yn/inputs_true.dat +++ b/tests/test_score_total_yn/inputs_true.dat @@ -1 +1 @@ -4dbbd9cec921d2420e7567533c833afbe94335073aa760d1fd937adb695191b3ab7c070ec0d32721dddb4a46054e68322cf6a058420e20e439eb1d44f09f4be4 \ No newline at end of file +3c05a49f78866eda267c9f8eab2669a3a1aeb4eabfade9697d551b13f482d9076190c63a52a8aade59c20d917cebdd3e9bedabda6bc5bfd549db43cc61d7466f \ No newline at end of file diff --git a/tests/test_tally_arithmetic/inputs_true.dat b/tests/test_tally_arithmetic/inputs_true.dat index 8e8838131a..1b6046f1ae 100644 --- a/tests/test_tally_arithmetic/inputs_true.dat +++ b/tests/test_tally_arithmetic/inputs_true.dat @@ -1 +1 @@ -df6318b76cd37a29ef9dd09da48a70c191ed07c1a2ceb75eb502ab35086c31250872406f22c2587edfcee16f67dd95c81db012ccd728710ed2509084438aea56 \ No newline at end of file +57384883e37964076aa82c19fa542434331cdb09735d710485b5aa0ca3445d543729e40cb9c7b6a70e7101ef186923eb1ff6315c73b01ff257052838add68fc7 \ No newline at end of file From 8765f9d87e9b6da9484727f3fe24d09c9621cc78 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 21 Dec 2015 17:33:21 -0600 Subject: [PATCH 151/650] Revise documentation to reflect new source options. --- docs/source/usersguide/input.rst | 190 ++++++++++++++++++------------- 1 file changed, 109 insertions(+), 81 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index ef9be8123f..b969454981 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -424,9 +424,17 @@ pseudo-random number generator. The ``source`` element gives information on an external source distribution to be used either as the source for a fixed source calculation or the initial -source guess for criticality calculations. It takes the following +source guess for criticality calculations. Multiple ```` elements may be +specified to define different source distributions. Each one takes the following attributes/sub-elements: + :strength: + The strength of the source. If multiple sources are present, the source + strength indicates the relative probability of choosing one source over the + other. + + *Default*: 1.0 + :file: If this attribute is given, it indicates that the source is to be read from a binary source file whose path is given by the value of this element. Note, @@ -440,12 +448,13 @@ attributes/sub-elements: has the following attributes: :type: - The type of spatial distribution. Valid options are "box", "fission", and - "point". A "box" spatial distribution has coordinates sampled uniformly in - a parallelepiped. A "fission" spatial distribution samples locations from - a "box" distribution but only locations in fissionable materials are - accepted. A "point" spatial distribution has coordinates specified by a - triplet. + The type of spatial distribution. Valid options are "box", "fission", + "point", and "independent". A "box" spatial distribution has coordinates + sampled uniformly in a parallelepiped. A "fission" spatial distribution + samples locations from a "box" distribution but only locations in + fissionable materials are accepted. A "point" spatial distribution has + coordinates specified by a triplet. An "independent" spatial distribution + specifies independent distributions of x-, y-, and z-coordinates. *Default*: None @@ -458,105 +467,124 @@ attributes/sub-elements: For a "point" spatial distribution, ``parameters`` should be given as three real numbers which specify the (x,y,z) location of an isotropic - point source + point source. + + For an "independent" distributoin, no parameters are specified. Instead, + the ``x``, ``y``, and ``z`` elements must be specified. *Default*: None + :x: + For an "independent" distribution, this element specifies the distribution + of x-coordinates. The necessary sub-elements/attributes are those of a + univariate probability distribution (see the description in + :ref:`univariate`). + + :y: + For an "independent" distribution, this element specifies the distribution + of y-coordinates. The necessary sub-elements/attributes are those of a + univariate probability distribution (see the description in + :ref:`univariate`). + + :z: + For an "independent" distribution, this element specifies the distribution + of z-coordinates. The necessary sub-elements/attributes are those of a + univariate probability distribution (see the description in + :ref:`univariate`). + :angle: An element specifying the angular distribution of source sites. This element has the following attributes: :type: The type of angular distribution. Valid options are "isotropic", - "monodirectional", and "tabular". The angle of the particle emitted from a + "monodirectional", and "mu-phi". The angle of the particle emitted from a source site is isotropic if the "isotropic" option is given. The angle of the particle emitted from a source site is the direction specified in the - attribute if "monodirectional" option is given. The "tabular" - option produces directions with polar angles sampled from a tabulated - distribution. + ``reference_uvw`` element/attribute if "monodirectional" option is + given. The "mu-phi" option produces directions with the cosine of the + polar angle and the azimuthal angle explicitly specified. *Default*: isotropic - :interpolation: - For a "tabular" angular distribution, ``interpolation`` can be set to - "histogram" or "linear-linear" thereby specifying how tabular points are - to be interpolated. + :reference_uvw: + The direction from which the polar angle is measured. Represented by the + x-, y-, and z-components of a unit vector. For a monodirectional + distribution, this defines the direction of all sampled particles. - *Default*: histogram + :mu: + An element specifying the distribution of the cosine of the polar + angle. Only relevant when the type is "mu-phi". The necessary + sub-elements/attributes are those of a univariate probability distribution + (see the description in :ref:`univariate`). - :parameters: - For an "isotropic" angular distribution, ``parameters`` should not be - specified. - - For a "monodirectional" angular distribution, ``parameters`` should be - given as three real numbers which specify the angular cosines with respect - to each axis. - - For a "tabular" angular distribution, ``parameters`` provides the - :math:`(\mu,p)` pairs defining the tabular distribution. All :math:`\mu` - points are given first followed by corresponding :math:`p` points. The - following example gives a histogram distribution with even probability of - selecting a polar angle in the range [-1,-0.5] and [0.5,1] (Note that the - last :math:`p` point is inconsequential): - - .. code-block:: xml - - - - -1.0 -0.5 0.5 1.0 - 1.0 0.0 1.0 0.0 - - - - *Default*: None + :phi: + An element specifying the distribution of the azimuthal angle. Only + relevant when the type is "mu-phi". The necessary sub-elements/attributes + are those of a univariate probability distribution (see the description in + :ref:`univariate`). :energy: - An element specifying the energy distribution of source sites. This element - has the following attributes: - - :type: - The type of energy distribution. Valid options are "monoenergetic", - "watt", "maxwell", and "tabular". The "monoenergetic" option produces - source sites at a single energy. The "watt" option produces source sites - whose energy is sampled from a Watt fission spectrum. The "maxwell" option - produce source sites whose energy is sampled from a Maxwell fission - spectrum. The "tabular" option produces source sites whose energy is - sampled from a tabulated distribution. - - *Default*: watt - - :interpolation: - For a "tabular" angular distribution, ``interpolation`` can be set to - "histogram" or "linear-linear" thereby specifying how tabular points are - to be interpolated. - - *Default*: histogram - - :parameters: - For a "monoenergetic" energy distribution, ``parameters`` should be - given as the energy in MeV of the source sites. - - For a "watt" energy distribution, ``parameters`` should be given as two - real numbers :math:`a` and :math:`b` that parameterize the distribution - :math:`p(E) dE = c e^{-E/a} \sinh \sqrt{b \, E} dE`. - - For a "maxwell" energy distribution, ``parameters`` should be given as one - real number :math:`a` that parameterizes the distribution :math:`p(E) dE = - c E e^{-E/a} dE`. - - For a "tabular" energy distribution, ``parameters`` provides the - :math:`(E,p)` pairs defining the tabular distribution. All :math:`E` - points are given first followed by corresponding :math:`p` points. - - *Default*: 0.988 2.249 + An element specifying the energy distribution of source sites. The necessary + sub-elements/attributes are those of a univariate probability distribution + (see the description in :ref:`univariate`). :write_initial: An element specifying whether to write out the initial source bank used at the beginning of the first batch. The output file is named - "initial_source.binary(h5)" + "initial_source.h5" *Default*: false +.. _univariate: + +Univariate Probability Distributions +++++++++++++++++++++++++++++++++++++ + +Various components of a source distribution involve probability distributions of +a single random variable, e.g. the distribution of the energy, the distribution +of the polar angle, and the distribution of x-coordinates. Each of these +components supports the same syntax with an element whose tag signifies the +variable and whose sub-elements/attributes are as follows: + +:type: + The type of the distribution. Valid options are "uniform", "discrete", + "tabular", "maxwell", and "watt". The "uniform" option produces variates + sampled from a uniform distribution over a finite interval. The "discrete" + option produces random variates that can assume a finite number of values + (i.e., a distribution characterized by a probability mass function). The + "tabular" option produces random variates sampled from a tabulated + distribution where the density function is either a histogram or + linearly-interpolated between tabulated points. The "watt" option produces + random variates is sampled from a Watt fission spectrum (only used for + energies). The "maxwell" option produce variates sampled from a Maxwell + fission spectrum (only used for energies). + + *Default*: None + +:parameters: + For a "uniform" distribution, ``parameters`` should be given as two real + numbers :math:`a` and :math:`b` that define the interval :math:`[a,b]` over + which random variates are sampled. + + For a "discrete" or "tabular" distribution, ``parameters`` provides the + :math:`(x,p)` pairs defining the discrete/tabular distribution. All :math:`x` + points are given first followed by corresponding :math:`p` points. + + For a "watt" distribution, ``parameters`` should be given as two real numbers + :math:`a` and :math:`b` that parameterize the distribution :math:`p(x) dx = c + e^{-x/a} \sinh \sqrt{b \, x} dx`. + + For a "maxwell" distribution, ``parameters`` should be given as one real + number :math:`a` that parameterizes the distribution :math:`p(x) dx = c x + e^{-x/a} dx`. + +:interpolation: + For a "tabular" distribution, ``interpolation`` can be set to "histogram" or + "linear-linear" thereby specifying how tabular points are to be interpolated. + + *Default*: histogram + ```` Element ------------------------- From daeddd800265fac652d9f1384afe30bb621f7d4f Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 13 Jan 2016 09:56:29 -0600 Subject: [PATCH 152/650] Allow SettingsFile.source to have multiple source distributions --- openmc/settings.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/openmc/settings.py b/openmc/settings.py index b7446046ee..4ad207c7a3 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -37,7 +37,7 @@ class SettingsFile(object): type are 'variance', 'std_dev', and 'rel_err'. The threshold value should be a float indicating the variance, standard deviation, or relative error used. - source : openmc.source.Source + source : Iterable of openmc.source.Source Distribution of source sites in space, angle, and energy output : dict Dictionary indicating what files to output. Valid keys are 'summary', @@ -440,8 +440,11 @@ class SettingsFile(object): @source.setter def source(self, source): - check_type('source distribution', source, Source) - self._source = source + if isinstance(source, Source): + self._source = [source,] + else: + check_type('source distribution', source, Iterable, Source) + self._source = source @output.setter def output(self, output): @@ -781,7 +784,8 @@ class SettingsFile(object): def _create_source_subelement(self): if self.source is not None: - self._settings_file.append(self.source.to_xml()) + for source in self.source: + self._settings_file.append(source.to_xml()) def _create_output_subelement(self): if self._output is not None: From 445c96980445703f3c8561c499eb788a092c51f2 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Wed, 13 Jan 2016 11:36:05 -0500 Subject: [PATCH 153/650] Small fixes for #548 --- src/initialize.F90 | 7 ++- src/input_xml.F90 | 4 +- tests/test_distribmat/test_distribmat.py | 56 +++++++++++++----------- 3 files changed, 38 insertions(+), 29 deletions(-) diff --git a/src/initialize.F90 b/src/initialize.F90 index a50fe09a01..de681fb949 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -625,7 +625,7 @@ contains c % fill = lid else call fatal_error("Specified fill " // trim(to_str(id)) // " on cell "& - &// trim(to_str(c % id)) // " is neither a universe nor a & + // trim(to_str(c % id)) // " is neither a universe nor a & &lattice.") end if else @@ -638,7 +638,7 @@ contains c % material(j) = material_dict % get_key(id) else call fatal_error("Could not find material " // trim(to_str(id)) & - &// " specified on cell " // trim(to_str(c % id))) + // " specified on cell " // trim(to_str(c % id))) end if end do end if @@ -1115,6 +1115,9 @@ contains end if end do + ! Free up memory + call cell_list % clear() + end subroutine allocate_offsets end module initialize diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 41ee5aab2a..1ca8cc8799 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -1104,7 +1104,7 @@ contains ! Check for error if (c % material(j) == ERROR_INT) then call fatal_error("Invalid material specified on cell " & - &// to_str(c % id)) + // to_str(c % id)) end if end select end do @@ -1124,7 +1124,7 @@ contains ! Check to make sure that either material or fill was specified if (c % material(1) == NONE .and. c % fill == NONE) then call fatal_error("Neither material nor fill was specified for cell " & - &// trim(to_str(c % id))) + // trim(to_str(c % id))) end if ! Check to make sure that both material and fill haven't been diff --git a/tests/test_distribmat/test_distribmat.py b/tests/test_distribmat/test_distribmat.py index f0d09e963a..b1252a8e7b 100644 --- a/tests/test_distribmat/test_distribmat.py +++ b/tests/test_distribmat/test_distribmat.py @@ -90,31 +90,31 @@ class DistribmatTestHarness(PyAPITestHarness): sets_file.export_to_xml() -# #################### -# # Plots -# #################### -# -# plots_file = openmc.PlotsFile() -# -# plot = openmc.Plot(plot_id=1) -# plot.basis = 'xy' -# plot.color = 'cell' -# plot.filename = 'cellplot' -# plot.origin = (0, 0, 0) -# plot.width = (7, 7) -# plot.pixels = (400, 400) -# plots_file.add_plot(plot) -# -# plot = openmc.Plot(plot_id=2) -# plot.basis = 'xy' -# plot.color = 'mat' -# plot.filename = 'matplot' -# plot.origin = (0, 0, 0) -# plot.width = (7, 7) -# plot.pixels = (400, 400) -# plots_file.add_plot(plot) -# -# plots_file.export_to_xml() + #################### + # Plots + #################### + + plots_file = openmc.PlotsFile() + + plot = openmc.Plot(plot_id=1) + plot.basis = 'xy' + plot.color = 'cell' + plot.filename = 'cellplot' + plot.origin = (0, 0, 0) + plot.width = (7, 7) + plot.pixels = (400, 400) + plots_file.add_plot(plot) + + plot = openmc.Plot(plot_id=2) + plot.basis = 'xy' + plot.color = 'mat' + plot.filename = 'matplot' + plot.origin = (0, 0, 0) + plot.width = (7, 7) + plot.pixels = (400, 400) + plots_file.add_plot(plot) + + plots_file.export_to_xml() def _get_results(self): outstr = super(DistribmatTestHarness, self)._get_results() @@ -122,6 +122,12 @@ class DistribmatTestHarness(PyAPITestHarness): outstr += str(su.get_cell_by_id(11)) return outstr + def _cleanup(self): + f = os.path.join(os.getcwd(), 'plots.xml') + if os.path.exists(f): + os.remove(f) + super(DistribmatTestHarness, self)._cleanup() + if __name__ == '__main__': harness = DistribmatTestHarness('statepoint.5.*') From d5400cb1dafd51dd09fcd0369d30d3730ead4b60 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Wed, 13 Jan 2016 11:45:44 -0500 Subject: [PATCH 154/650] Small fixes for #555 --- src/constants.F90 | 2 +- src/geometry.F90 | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/constants.F90 b/src/constants.F90 index 10b41e5602..e5585fcb92 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -140,7 +140,7 @@ module constants integer, parameter :: MAX_LOST_PARTICLES = 10 ! Maximum number of lost particles, relative to the total number of particles - real(8), parameter :: REL_MAX_LOST_PARTICLES = 1e-5_8 + real(8), parameter :: REL_MAX_LOST_PARTICLES = 1e-6_8 ! ============================================================================ ! CROSS SECTION RELATED CONSTANTS diff --git a/src/geometry.F90 b/src/geometry.F90 index 667dc02bfa..ffa07c2978 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -958,8 +958,8 @@ contains !$omp atomic n_lost_particles = n_lost_particles + 1 - ! Count the total number of simulated particles - tot_n_particles = n_batches * gen_per_batch * n_particles + ! Count the total number of simulated particles (on this processor) + tot_n_particles = n_batches * gen_per_batch * work ! Abort the simulation if the maximum number of lost particles has been ! reached From c5eb4b79cc1a5ba28317532148ef71e954ca6ebc Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Wed, 13 Jan 2016 12:24:25 -0500 Subject: [PATCH 155/650] Update distribmat test --- tests/test_distribmat/inputs_true.dat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_distribmat/inputs_true.dat b/tests/test_distribmat/inputs_true.dat index 0fb8cc8bf8..9d0a70c471 100644 --- a/tests/test_distribmat/inputs_true.dat +++ b/tests/test_distribmat/inputs_true.dat @@ -1 +1 @@ -bdc2acd3a4f5078c61d7cb83ff30e07b76c89b21d8131c1b0ce86a43156da7bd0b9ebb5d6acc0b98a7d8128667f99403ef12a6d76ed2ec6cb187810222e4f6b3 \ No newline at end of file +83a9f1412b1ddfdd8b9fa8c7e8b44be8137dc6aa785d44c3eea9f0928242475aea4ba73ba4eef01afdf63bd1bff18116e40b798eeafab50c856186de4c68d5a6 \ No newline at end of file From d244913b4c369ca05f1532688cc317dc36073013 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 13 Jan 2016 13:16:18 -0600 Subject: [PATCH 156/650] Replace four source tests with a single comprehensive one. Also fix a few bugs. --- openmc/stats/multivariate.py | 2 +- openmc/stats/univariate.py | 2 +- src/relaxng/settings.rnc | 4 +- src/relaxng/settings.rng | 20 +++-- tests/test_source/inputs_true.dat | 1 + tests/test_source/results_true.dat | 2 + tests/test_source/test_source.py | 73 +++++++++++++++++++ tests/test_source_angle_mono/geometry.xml | 8 -- tests/test_source_angle_mono/materials.xml | 9 --- tests/test_source_angle_mono/results_true.dat | 2 - tests/test_source_angle_mono/settings.xml | 15 ---- .../test_source_angle_mono.py | 11 --- tests/test_source_energy_maxwell/geometry.xml | 8 -- .../test_source_energy_maxwell/materials.xml | 9 --- .../results_true.dat | 2 - tests/test_source_energy_maxwell/settings.xml | 15 ---- .../test_source_energy_maxwell.py | 11 --- tests/test_source_energy_mono/geometry.xml | 8 -- tests/test_source_energy_mono/materials.xml | 9 --- .../test_source_energy_mono/results_true.dat | 2 - tests/test_source_energy_mono/settings.xml | 15 ---- .../test_source_energy_mono.py | 11 --- tests/test_source_point/geometry.xml | 8 -- tests/test_source_point/materials.xml | 9 --- tests/test_source_point/results_true.dat | 2 - tests/test_source_point/settings.xml | 14 ---- tests/test_source_point/test_source_point.py | 11 --- 27 files changed, 89 insertions(+), 194 deletions(-) create mode 100644 tests/test_source/inputs_true.dat create mode 100644 tests/test_source/results_true.dat create mode 100644 tests/test_source/test_source.py delete mode 100644 tests/test_source_angle_mono/geometry.xml delete mode 100644 tests/test_source_angle_mono/materials.xml delete mode 100644 tests/test_source_angle_mono/results_true.dat delete mode 100644 tests/test_source_angle_mono/settings.xml delete mode 100644 tests/test_source_angle_mono/test_source_angle_mono.py delete mode 100644 tests/test_source_energy_maxwell/geometry.xml delete mode 100644 tests/test_source_energy_maxwell/materials.xml delete mode 100644 tests/test_source_energy_maxwell/results_true.dat delete mode 100644 tests/test_source_energy_maxwell/settings.xml delete mode 100644 tests/test_source_energy_maxwell/test_source_energy_maxwell.py delete mode 100644 tests/test_source_energy_mono/geometry.xml delete mode 100644 tests/test_source_energy_mono/materials.xml delete mode 100644 tests/test_source_energy_mono/results_true.dat delete mode 100644 tests/test_source_energy_mono/settings.xml delete mode 100644 tests/test_source_energy_mono/test_source_energy_mono.py delete mode 100644 tests/test_source_point/geometry.xml delete mode 100644 tests/test_source_point/materials.xml delete mode 100644 tests/test_source_point/results_true.dat delete mode 100644 tests/test_source_point/settings.xml delete mode 100644 tests/test_source_point/test_source_point.py diff --git a/openmc/stats/multivariate.py b/openmc/stats/multivariate.py index cb1921ba6d..52dc6b96ab 100644 --- a/openmc/stats/multivariate.py +++ b/openmc/stats/multivariate.py @@ -278,7 +278,7 @@ class SpatialIndependent(Spatial): cv.check_type('y coordinate', y, Univariate) self._y = y - @x.setter + @z.setter def z(self, z): cv.check_type('z coordinate', z, Univariate) self._z = z diff --git a/openmc/stats/univariate.py b/openmc/stats/univariate.py index 8e32fdc1c1..e424d6a3a0 100644 --- a/openmc/stats/univariate.py +++ b/openmc/stats/univariate.py @@ -185,7 +185,7 @@ class Maxwell(Univariate): def to_xml(self): element = ET.Element(self.name) - element.set("type", "uniform") + element.set("type", "maxwell") element.set("parameters", str(self.theta)) return element diff --git a/src/relaxng/settings.rnc b/src/relaxng/settings.rnc index 2fa2b57d82..68f221f677 100644 --- a/src/relaxng/settings.rnc +++ b/src/relaxng/settings.rnc @@ -89,8 +89,8 @@ element settings { distribution = (element type { xsd:string { maxLength = "16" } } | attribute type { xsd:string { maxLength = "16" } }) & - (element interpolation { xsd:string { maxLength = "10" } } | - attribute interpolation { xsd:string { maxLength = "10" } })? & + (element interpolation { xsd:string } | + attribute interpolation { xsd:string })? & (element parameters { list { xsd:double+ } } | attribute parameters { list { xsd:double+ } })? } diff --git a/src/relaxng/settings.rng b/src/relaxng/settings.rng index 72efbe4add..ea3efaff9f 100644 --- a/src/relaxng/settings.rng +++ b/src/relaxng/settings.rng @@ -350,16 +350,18 @@ - - - + + + + + - + - + @@ -410,14 +412,10 @@ - - 10 - + - - 10 - + diff --git a/tests/test_source/inputs_true.dat b/tests/test_source/inputs_true.dat new file mode 100644 index 0000000000..2c2263e4f4 --- /dev/null +++ b/tests/test_source/inputs_true.dat @@ -0,0 +1 @@ +8469cedcf2d3511a80d0f931bc665178ef1bd5b51352dc567385e52c32ad680a1131c8ee079bc022d320c3ea454798afac6b8cac8937a17de92d6cd50d04d72c \ No newline at end of file diff --git a/tests/test_source/results_true.dat b/tests/test_source/results_true.dat new file mode 100644 index 0000000000..18fb895f77 --- /dev/null +++ b/tests/test_source/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +3.014392E-01 7.185055E-03 diff --git a/tests/test_source/test_source.py b/tests/test_source/test_source.py new file mode 100644 index 0000000000..9a398897c9 --- /dev/null +++ b/tests/test_source/test_source.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python + +from math import pi +import os +import sys + +import numpy as np + +sys.path.insert(0, os.pardir) +from testing_harness import PyAPITestHarness +import openmc +import openmc.stats +from openmc.source import Source + + +class SourceTestHarness(PyAPITestHarness): + def _build_inputs(self): + mat1 = openmc.Material(material_id=1) + mat1.set_density('g/cm3', 4.5) + mat1.add_nuclide(openmc.Nuclide('U-235', '71c'), 1.0) + materials = openmc.MaterialsFile() + materials.add_material(mat1) + materials.export_to_xml() + + sphere = openmc.Sphere(surface_id=1, R=10.0, boundary_type='vacuum') + inside_sphere = openmc.Cell(cell_id=1) + inside_sphere.region = -sphere + inside_sphere.fill = mat1 + + root = openmc.Universe(universe_id=0) + root.add_cell(inside_sphere) + geometry = openmc.Geometry() + geometry.root_universe = root + geometry_xml = openmc.GeometryFile() + geometry_xml.geometry = geometry + geometry_xml.export_to_xml() + + # Create an array of different sources + x_dist = openmc.stats.Uniform('x', -3., 3.) + y_dist = openmc.stats.Discrete('y', [-4., -1., 3.], [0.2, 0.3, 0.5]) + z_dist = openmc.stats.Tabular('z', [-2., 0., 2.], [0.2, 0.3, 0.2]) + spatial1 = openmc.stats.SpatialIndependent(x_dist, y_dist, z_dist) + spatial2 = openmc.stats.SpatialBox([-4., -4., -4.], [4., 4., 4.]) + spatial3 = openmc.stats.SpatialPoint([1.2, -2.3, 0.781]) + + mu_dist = openmc.stats.Discrete('mu', [-1., 0., 1.], [0.5, 0.25, 0.25]) + phi_dist = openmc.stats.Uniform('phi', 0., 2.*pi) + angle1 = openmc.stats.PolarAzimuthal(mu_dist, phi_dist) + angle2 = openmc.stats.Monodirectional(reference_uvw=[0., 1., 0.]) + angle3 = openmc.stats.Isotropic() + + E = np.logspace(-6, 1) + p = np.sin(np.linspace(0., pi)) + p /= sum(np.diff(E)*p[:-1]) + energy1 = openmc.stats.Maxwell(1.2895) + energy2 = openmc.stats.Watt(0.988, 2.249) + energy3 = openmc.stats.Tabular('energy', E, p, interpolation='histogram') + + source1 = Source(spatial1, angle1, energy1, strength=0.5) + source2 = Source(spatial2, angle2, energy2, strength=0.3) + source3 = Source(spatial3, angle3, energy3, strength=0.2) + + settings = openmc.SettingsFile() + settings.batches = 10 + settings.inactive = 5 + settings.particles = 1000 + settings.source = [source1, source2, source3] + settings.export_to_xml() + + +if __name__ == '__main__': + harness = SourceTestHarness('statepoint.10.h5') + harness.main() diff --git a/tests/test_source_angle_mono/geometry.xml b/tests/test_source_angle_mono/geometry.xml deleted file mode 100644 index bc56030e18..0000000000 --- a/tests/test_source_angle_mono/geometry.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/tests/test_source_angle_mono/materials.xml b/tests/test_source_angle_mono/materials.xml deleted file mode 100644 index 315c0fa848..0000000000 --- a/tests/test_source_angle_mono/materials.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/tests/test_source_angle_mono/results_true.dat b/tests/test_source_angle_mono/results_true.dat deleted file mode 100644 index 42e948758a..0000000000 --- a/tests/test_source_angle_mono/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -2.964943E-01 1.201478E-02 diff --git a/tests/test_source_angle_mono/settings.xml b/tests/test_source_angle_mono/settings.xml deleted file mode 100644 index dd88bbad29..0000000000 --- a/tests/test_source_angle_mono/settings.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - 10 - 5 - 1000 - - - - - - - - diff --git a/tests/test_source_angle_mono/test_source_angle_mono.py b/tests/test_source_angle_mono/test_source_angle_mono.py deleted file mode 100644 index 2a595f3e66..0000000000 --- a/tests/test_source_angle_mono/test_source_angle_mono.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness - - -if __name__ == '__main__': - harness = TestHarness('statepoint.10.*') - harness.main() diff --git a/tests/test_source_energy_maxwell/geometry.xml b/tests/test_source_energy_maxwell/geometry.xml deleted file mode 100644 index bc56030e18..0000000000 --- a/tests/test_source_energy_maxwell/geometry.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/tests/test_source_energy_maxwell/materials.xml b/tests/test_source_energy_maxwell/materials.xml deleted file mode 100644 index 315c0fa848..0000000000 --- a/tests/test_source_energy_maxwell/materials.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/tests/test_source_energy_maxwell/results_true.dat b/tests/test_source_energy_maxwell/results_true.dat deleted file mode 100644 index 37b8b36b99..0000000000 --- a/tests/test_source_energy_maxwell/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -2.886671E-01 7.534631E-03 diff --git a/tests/test_source_energy_maxwell/settings.xml b/tests/test_source_energy_maxwell/settings.xml deleted file mode 100644 index d0543785b5..0000000000 --- a/tests/test_source_energy_maxwell/settings.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - 10 - 5 - 1000 - - - - - - - - diff --git a/tests/test_source_energy_maxwell/test_source_energy_maxwell.py b/tests/test_source_energy_maxwell/test_source_energy_maxwell.py deleted file mode 100644 index 2a595f3e66..0000000000 --- a/tests/test_source_energy_maxwell/test_source_energy_maxwell.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness - - -if __name__ == '__main__': - harness = TestHarness('statepoint.10.*') - harness.main() diff --git a/tests/test_source_energy_mono/geometry.xml b/tests/test_source_energy_mono/geometry.xml deleted file mode 100644 index bc56030e18..0000000000 --- a/tests/test_source_energy_mono/geometry.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/tests/test_source_energy_mono/materials.xml b/tests/test_source_energy_mono/materials.xml deleted file mode 100644 index 315c0fa848..0000000000 --- a/tests/test_source_energy_mono/materials.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/tests/test_source_energy_mono/results_true.dat b/tests/test_source_energy_mono/results_true.dat deleted file mode 100644 index 029376bf37..0000000000 --- a/tests/test_source_energy_mono/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -3.002731E-01 7.561170E-03 diff --git a/tests/test_source_energy_mono/settings.xml b/tests/test_source_energy_mono/settings.xml deleted file mode 100644 index be271b6113..0000000000 --- a/tests/test_source_energy_mono/settings.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - 10 - 5 - 1000 - - - - - - - - diff --git a/tests/test_source_energy_mono/test_source_energy_mono.py b/tests/test_source_energy_mono/test_source_energy_mono.py deleted file mode 100644 index 2a595f3e66..0000000000 --- a/tests/test_source_energy_mono/test_source_energy_mono.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness - - -if __name__ == '__main__': - harness = TestHarness('statepoint.10.*') - harness.main() diff --git a/tests/test_source_point/geometry.xml b/tests/test_source_point/geometry.xml deleted file mode 100644 index bc56030e18..0000000000 --- a/tests/test_source_point/geometry.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/tests/test_source_point/materials.xml b/tests/test_source_point/materials.xml deleted file mode 100644 index 315c0fa848..0000000000 --- a/tests/test_source_point/materials.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/tests/test_source_point/results_true.dat b/tests/test_source_point/results_true.dat deleted file mode 100644 index fe9a0d78d4..0000000000 --- a/tests/test_source_point/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -3.041148E-01 4.558319E-03 diff --git a/tests/test_source_point/settings.xml b/tests/test_source_point/settings.xml deleted file mode 100644 index 3b3c47150e..0000000000 --- a/tests/test_source_point/settings.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - 10 - 5 - 1000 - - - - - - - diff --git a/tests/test_source_point/test_source_point.py b/tests/test_source_point/test_source_point.py deleted file mode 100644 index 2a595f3e66..0000000000 --- a/tests/test_source_point/test_source_point.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness - - -if __name__ == '__main__': - harness = TestHarness('statepoint.10.*') - harness.main() From 8f2169b37c913d9aa49daac8cd7c8108ba2b13dc Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 13 Jan 2016 13:50:34 -0600 Subject: [PATCH 157/650] Fix Python3-related problems --- openmc/stats/univariate.py | 4 ++++ tests/test_source/test_source.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/openmc/stats/univariate.py b/openmc/stats/univariate.py index e424d6a3a0..a0395e3431 100644 --- a/openmc/stats/univariate.py +++ b/openmc/stats/univariate.py @@ -1,10 +1,14 @@ from abc import ABCMeta, abstractmethod from collections import Iterable from numbers import Real +import sys from xml.etree import ElementTree as ET import openmc.checkvalue as cv +if sys.version_info[0] >= 3: + basestring = str + class Univariate(object): """Probability distribution of a single random variable. diff --git a/tests/test_source/test_source.py b/tests/test_source/test_source.py index 9a398897c9..9c2bfe737f 100644 --- a/tests/test_source/test_source.py +++ b/tests/test_source/test_source.py @@ -44,7 +44,7 @@ class SourceTestHarness(PyAPITestHarness): spatial3 = openmc.stats.SpatialPoint([1.2, -2.3, 0.781]) mu_dist = openmc.stats.Discrete('mu', [-1., 0., 1.], [0.5, 0.25, 0.25]) - phi_dist = openmc.stats.Uniform('phi', 0., 2.*pi) + phi_dist = openmc.stats.Uniform('phi', 0., 6.28318530718) angle1 = openmc.stats.PolarAzimuthal(mu_dist, phi_dist) angle2 = openmc.stats.Monodirectional(reference_uvw=[0., 1., 0.]) angle3 = openmc.stats.Isotropic() From 84cf96a4be2ddf839afeb66020ea6cf6cc1a9a89 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 13 Jan 2016 21:50:09 -0600 Subject: [PATCH 158/650] Fix test_distribmat to work with new source capabilities --- tests/test_distribmat/inputs_true.dat | 2 +- tests/test_distribmat/test_distribmat.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/test_distribmat/inputs_true.dat b/tests/test_distribmat/inputs_true.dat index 9d0a70c471..663bb954bf 100644 --- a/tests/test_distribmat/inputs_true.dat +++ b/tests/test_distribmat/inputs_true.dat @@ -1 +1 @@ -83a9f1412b1ddfdd8b9fa8c7e8b44be8137dc6aa785d44c3eea9f0928242475aea4ba73ba4eef01afdf63bd1bff18116e40b798eeafab50c856186de4c68d5a6 \ No newline at end of file +cbf6a6cdb0b7814d14a05e6b80780fd66978610825d64547e0a2dda2bdee50f01cfd53e9305febec50a06eb63a00b07e85a97b09b88f748225810c0034508fd0 \ No newline at end of file diff --git a/tests/test_distribmat/test_distribmat.py b/tests/test_distribmat/test_distribmat.py index b1252a8e7b..a4394745b3 100644 --- a/tests/test_distribmat/test_distribmat.py +++ b/tests/test_distribmat/test_distribmat.py @@ -5,6 +5,8 @@ import sys sys.path.insert(0, os.pardir) from testing_harness import TestHarness, PyAPITestHarness import openmc +from openmc.stats import SpatialBox +from openmc.source import Source class DistribmatTestHarness(PyAPITestHarness): @@ -85,7 +87,7 @@ class DistribmatTestHarness(PyAPITestHarness): sets_file.batches = 5 sets_file.inactive = 0 sets_file.particles = 1000 - sets_file.set_source_space('box', [-1, -1, -1, 1, 1, 1]) + sets_file.source = Source(space=SpatialBox([-1, -1, -1], [1, 1, 1])) sets_file.output = {'summary': True} sets_file.export_to_xml() From ea9fb637f63f9374c7436456141afa850b84acf9 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 14 Jan 2016 06:46:32 -0600 Subject: [PATCH 159/650] Respond to @smharper comments on #556 --- openmc/source.py | 2 ++ openmc/stats/multivariate.py | 21 +++++++++++++++----- openmc/stats/univariate.py | 33 ++++++++++++++++++++++--------- src/distribution_multivariate.F90 | 24 +++++++++++----------- src/distribution_univariate.F90 | 10 +++++++--- src/input_xml.F90 | 8 -------- src/source.F90 | 2 -- tests/test_source/test_source.py | 12 +++++------ 8 files changed, 68 insertions(+), 44 deletions(-) diff --git a/openmc/source.py b/openmc/source.py index cac7d1e58c..5e4d9e53df 100644 --- a/openmc/source.py +++ b/openmc/source.py @@ -95,6 +95,8 @@ class Source(object): @energy.setter def energy(self, energy): cv.check_type('energy distribution', energy, Univariate) + if energy.name is None: + energy.name = 'energy' self._energy = energy @strength.setter diff --git a/openmc/stats/multivariate.py b/openmc/stats/multivariate.py index 52dc6b96ab..ea02d7f3fd 100644 --- a/openmc/stats/multivariate.py +++ b/openmc/stats/multivariate.py @@ -80,7 +80,7 @@ class PolarAzimuthal(UnitSphere): mu : openmc.stats.Univariate Distribution of the cosine of the polar angle phi : openmc.stats.Univariate - Distribution of the azimuthal angle + Distribution of the azimuthal angle in radians name : str, optional Name of the distribution. Defaults to 'angle'. reference_uvw : Iterable of Real @@ -92,21 +92,22 @@ class PolarAzimuthal(UnitSphere): mu : openmc.stats.Univariate Distribution of the cosine of the polar angle phi : openmc.stats.Univariate - Distribution of the azimuthal angle + Distribution of the azimuthal angle in radians """ - def __init__(self, mu=None, phi=None, name='angle',reference_uvw=[0., 0., 1.]): + def __init__(self, mu=None, phi=None, name='angle', + reference_uvw=[0., 0., 1.]): super(PolarAzimuthal, self).__init__(name, reference_uvw) if mu is not None: self.mu = mu else: - self.mu = Uniform('mu', -1., 1.) + self.mu = Uniform(-1., 1.) if phi is not None: self.phi = phi else: - self.phi = Uniform('phi', 0., 2*pi) + self.phi = Uniform(0., 2*pi) @property def mu(self): @@ -119,11 +120,15 @@ class PolarAzimuthal(UnitSphere): @mu.setter def mu(self, mu): cv.check_type('cosine of polar angle', mu, Univariate) + if mu.name is None: + mu.name = 'mu' self._mu = mu @phi.setter def phi(self, phi): cv.check_type('azimuthal angle', phi, Univariate) + if phi.name is None: + phi.name = 'phi' self._phi = phi def to_xml(self): @@ -271,16 +276,22 @@ class SpatialIndependent(Spatial): @x.setter def x(self, x): cv.check_type('x coordinate', x, Univariate) + if x.name is None: + x.name = 'x' self._x = x @y.setter def y(self, y): cv.check_type('y coordinate', y, Univariate) + if y.name is None: + y.name = 'y' self._y = y @z.setter def z(self, z): cv.check_type('z coordinate', z, Univariate) + if z.name is None: + z.name = 'z' self._z = z def to_xml(self): diff --git a/openmc/stats/univariate.py b/openmc/stats/univariate.py index a0395e3431..01419420ea 100644 --- a/openmc/stats/univariate.py +++ b/openmc/stats/univariate.py @@ -30,8 +30,10 @@ class Univariate(object): __metaclass__ = ABCMeta - def __init__(self, name): - self.name = name + def __init__(self, name=None): + self._name = None + if name is not None: + self.name = name @property def name(self): @@ -70,7 +72,7 @@ class Discrete(Univariate): """ - def __init__(self, name, x, p): + def __init__(self, x, p, name=None): super(Discrete, self).__init__(name) self.x = x self.p = p @@ -85,18 +87,25 @@ class Discrete(Univariate): @x.setter def x(self, x): + if cv._isinstance(x, Real): + x = [x] cv.check_type('discrete values', x, Iterable, Real) self._x = x @p.setter def p(self, p): + if cv._isinstance(p, Real): + p = [p] cv.check_type('discrete probabilities', p, Iterable, Real) for pk in p: cv.check_greater_than('discrete probability', pk, 0.0, True) self._p = p def to_xml(self): - element = ET.Element(self.name) + if self.name is not None: + element = ET.Element(self.name) + else: + element = ET.Element('distribution') element.set("type", "discrete") params = ET.SubElement(element, "parameters") @@ -124,7 +133,7 @@ class Uniform(Univariate): """ - def __init__(self, name, a=0.0, b=1.0): + def __init__(self, a=0.0, b=1.0, name=None): super(Uniform, self).__init__(name) self.a = a self.b = b @@ -148,7 +157,10 @@ class Uniform(Univariate): self._b = b def to_xml(self): - element = ET.Element(self.name) + if self.name is not None: + element = ET.Element(self.name) + else: + element = ET.Element('distribution') element.set("type", "uniform") element.set("parameters", '{} {}'.format(self.a, self.b)) return element @@ -219,7 +231,7 @@ class Watt(Univariate): """ - def __init__(self, a, b, name='energy'): + def __init__(self, a=0.988, b=2.249, name='energy'): super(Watt, self).__init__(name) self.a = a self.b = b @@ -282,7 +294,7 @@ class Tabular(Univariate): """ - def __init__(self, name, x, p, interpolation='linear-linear'): + def __init__(self, x, p, interpolation='linear-linear', name=None): super(Tabular, self).__init__(name) self.x = x self.p = p @@ -319,7 +331,10 @@ class Tabular(Univariate): self._interpolation = interpolation def to_xml(self): - element = ET.Element(self.name) + if self.name is not None: + element = ET.Element(self.name) + else: + element = ET.Element('distribution') element.set("type", "tabular") element.set("interpolation", self.interpolation) diff --git a/src/distribution_multivariate.F90 b/src/distribution_multivariate.F90 index 970311d7b8..71aee646ab 100644 --- a/src/distribution_multivariate.F90 +++ b/src/distribution_multivariate.F90 @@ -5,10 +5,12 @@ module distribution_multivariate use math, only: rotate_angle use random_lcg, only: prn + implicit none + !=============================================================================== ! UNITSPHEREDISTRIBUTION type defines a probability density function for points ! on the unit sphere. Extensions of this type are used to sample angular -! distributions for starting soures +! distributions for starting sources !=============================================================================== type, abstract :: UnitSphereDistribution @@ -99,13 +101,13 @@ contains real(8) :: phi ! azimuthal angle ! Sample cosine of polar angle - mu = this%mu%sample() + mu = this % mu % sample() if (mu == ONE) then - uvw(:) = this%reference_uvw + uvw(:) = this % reference_uvw else ! Sample azimuthal angle - phi = this%phi%sample() - uvw(:) = rotate_angle(this%reference_uvw, mu, phi) + phi = this % phi % sample() + uvw(:) = rotate_angle(this % reference_uvw, mu, phi) end if end function polar_azimuthal_sample @@ -127,16 +129,16 @@ contains class(Monodirectional), intent(in) :: this real(8) :: uvw(3) - uvw(:) = this%reference_uvw + uvw(:) = this % reference_uvw end function monodirectional_sample function spatial_independent_sample(this) result(xyz) class(SpatialIndependent), intent(in) :: this real(8) :: xyz(3) - xyz(1) = this%x%sample() - xyz(2) = this%y%sample() - xyz(3) = this%z%sample() + xyz(1) = this % x % sample() + xyz(2) = this % y % sample() + xyz(3) = this % z % sample() end function spatial_independent_sample function spatial_box_sample(this) result(xyz) @@ -147,14 +149,14 @@ contains real(8) :: r(3) r = [ (prn(), i = 1,3) ] - xyz(:) = this%lower_left + r*(this%upper_right - this%lower_left) + xyz(:) = this % lower_left + r*(this % upper_right - this % lower_left) end function spatial_box_sample function spatial_point_sample(this) result(xyz) class(SpatialPoint), intent(in) :: this real(8) :: xyz(3) - xyz(:) = this%xyz + xyz(:) = this % xyz end function spatial_point_sample end module distribution_multivariate diff --git a/src/distribution_univariate.F90 b/src/distribution_univariate.F90 index 6d85038212..b3d77e2f82 100644 --- a/src/distribution_univariate.F90 +++ b/src/distribution_univariate.F90 @@ -8,6 +8,8 @@ module distribution_univariate use string, only: to_lower use xml_interface + implicit none + !=============================================================================== ! DISTRIBUTION type defines a probability density function !=============================================================================== @@ -82,6 +84,7 @@ contains class(Discrete), intent(in) :: this real(8) :: x + integer :: i ! loop counter integer :: n ! size of distribution real(8) :: c ! cumulative frequency real(8) :: xi ! sampled CDF value @@ -197,10 +200,10 @@ contains real(8), intent(in) :: p(:) integer, intent(in) :: interp + integer :: i integer :: n ! Check interpolation parameter - if (interp /= HISTOGRAM .and. interp /= LINEAR_LINEAR) then call fatal_error('Only histogram and linear-linear interpolation for tabular & &distribution is supported.') @@ -241,6 +244,7 @@ contains character(MAX_WORD_LEN) :: type character(MAX_LINE_LEN) :: temp_str + integer :: n integer :: temp_int real(8), allocatable :: temp_real(:) @@ -258,14 +262,14 @@ contains ! Allocate extension of Distribution select case (to_lower(type)) case ('uniform') - allocate (Uniform :: dist) + allocate(Uniform :: dist) if (n /= 2) then call fatal_error('Uniform distribution must have two & ¶meters specified.') end if case ('maxwell') - allocate (Maxwell :: dist) + allocate(Maxwell :: dist) if (n /= 1) then call fatal_error('Maxwell energy distribution must have one & ¶meter specified.') diff --git a/src/input_xml.F90 b/src/input_xml.F90 index d8224742b0..fa0ca10345 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -56,7 +56,6 @@ contains character(MAX_LINE_LEN) :: temp_str integer :: i integer :: n - integer :: coeffs_reqd integer :: temp_int integer :: temp_int_array3(3) integer, allocatable :: temp_int_array(:) @@ -502,13 +501,6 @@ contains ! Get pointer to angular distribution call get_node_ptr(node_source, "angle", node_angle) - ! Determine number of parameters specified - if (check_for_node(node_angle, "parameters")) then - n = get_arraysize_double(node_angle, "parameters") - else - n = 0 - end if - ! Check for type of angular distribution type = '' if (check_for_node(node_angle, "type")) & diff --git a/src/source.F90 b/src/source.F90 index 3700884868..406a4bf5ad 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -104,8 +104,6 @@ contains integer :: n_source ! number of source distributions real(8) :: c ! cumulative frequency real(8) :: r(3) ! sampled coordinates - real(8) :: p_min(3) ! minimum coordinates of source - real(8) :: p_max(3) ! maximum coordinates of source logical :: found ! Does the source particle exist within geometry? type(Particle) :: p ! Temporary particle for using find_cell integer, save :: num_resamples = 0 ! Number of resamples encountered diff --git a/tests/test_source/test_source.py b/tests/test_source/test_source.py index 9c2bfe737f..e2451ba3fc 100644 --- a/tests/test_source/test_source.py +++ b/tests/test_source/test_source.py @@ -36,15 +36,15 @@ class SourceTestHarness(PyAPITestHarness): geometry_xml.export_to_xml() # Create an array of different sources - x_dist = openmc.stats.Uniform('x', -3., 3.) - y_dist = openmc.stats.Discrete('y', [-4., -1., 3.], [0.2, 0.3, 0.5]) - z_dist = openmc.stats.Tabular('z', [-2., 0., 2.], [0.2, 0.3, 0.2]) + x_dist = openmc.stats.Uniform(-3., 3.) + y_dist = openmc.stats.Discrete([-4., -1., 3.], [0.2, 0.3, 0.5]) + z_dist = openmc.stats.Tabular([-2., 0., 2.], [0.2, 0.3, 0.2]) spatial1 = openmc.stats.SpatialIndependent(x_dist, y_dist, z_dist) spatial2 = openmc.stats.SpatialBox([-4., -4., -4.], [4., 4., 4.]) spatial3 = openmc.stats.SpatialPoint([1.2, -2.3, 0.781]) - mu_dist = openmc.stats.Discrete('mu', [-1., 0., 1.], [0.5, 0.25, 0.25]) - phi_dist = openmc.stats.Uniform('phi', 0., 6.28318530718) + mu_dist = openmc.stats.Discrete([-1., 0., 1.], [0.5, 0.25, 0.25]) + phi_dist = openmc.stats.Uniform(0., 6.28318530718) angle1 = openmc.stats.PolarAzimuthal(mu_dist, phi_dist) angle2 = openmc.stats.Monodirectional(reference_uvw=[0., 1., 0.]) angle3 = openmc.stats.Isotropic() @@ -54,7 +54,7 @@ class SourceTestHarness(PyAPITestHarness): p /= sum(np.diff(E)*p[:-1]) energy1 = openmc.stats.Maxwell(1.2895) energy2 = openmc.stats.Watt(0.988, 2.249) - energy3 = openmc.stats.Tabular('energy', E, p, interpolation='histogram') + energy3 = openmc.stats.Tabular(E, p, interpolation='histogram') source1 = Source(spatial1, angle1, energy1, strength=0.5) source2 = Source(spatial2, angle2, energy2, strength=0.3) From 3bb0f17ca3f799744a9b7dd6b5e1acbc8710297a Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 14 Jan 2016 08:02:55 -0600 Subject: [PATCH 160/650] Make sure particle is re-initialized when resampling source --- src/source.F90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/source.F90 b/src/source.F90 index 406a4bf5ad..d1bead3804 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -114,9 +114,6 @@ contains ! Set the random number generator to the source stream. call prn_set_stream(STREAM_SOURCE) - ! Set particle defaults - call p%initialize() - ! Sample from among multiple source distributions n_source = size(external_source) if (n_source > 1) then @@ -133,6 +130,9 @@ contains ! Repeat sampling source location until a good site has been found found = .false. do while (.not.found) + ! Set particle defaults + call p%initialize() + ! Sample spatial distribution site%xyz(:) = external_source(i)%space%sample() From 2937c1e1dea7a0b79086f910211e926695c6c0bb Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 14 Jan 2016 08:25:58 -0600 Subject: [PATCH 161/650] Fix small error in tallies schema --- src/relaxng/tallies.rnc | 2 +- src/relaxng/tallies.rng | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/relaxng/tallies.rnc b/src/relaxng/tallies.rnc index 75afb0f231..0f3672c6f2 100644 --- a/src/relaxng/tallies.rnc +++ b/src/relaxng/tallies.rnc @@ -41,7 +41,7 @@ element tallies { (element type { xsd:string } | attribute type { xsd:string }) & (element threshold { xsd:double} | attribute threshold { xsd:double }) & (element scores { list { xsd:string { maxLength = "20" }+ } } | attribute scores { list { xsd:string { maxLength = "20"}+ } } )? - }? + }* }* & element assume_separate { xsd:boolean }? diff --git a/src/relaxng/tallies.rng b/src/relaxng/tallies.rng index d35c170042..36bd5cb85f 100644 --- a/src/relaxng/tallies.rng +++ b/src/relaxng/tallies.rng @@ -145,10 +145,10 @@ mesh energy energyout - delayedgroup mu polar azimuthal + delayedgroup @@ -162,10 +162,10 @@ mesh energy energyout - delayedgroup mu polar azimuthal + delayedgroup @@ -208,7 +208,7 @@ - + @@ -251,7 +251,7 @@ - + From 726d3f016c0fac81d5ef40479973a7a18134a224 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 14 Jan 2016 08:26:19 -0600 Subject: [PATCH 162/650] Update Jupyter notebooks to use new source format --- .../pythonapi/examples/mgxs-part-i.ipynb | 84 +-- .../pythonapi/examples/mgxs-part-ii.ipynb | 661 +++++++++-------- .../pythonapi/examples/mgxs-part-iii.ipynb | 227 +++--- .../examples/pandas-dataframes.ipynb | 674 +++++++++--------- .../pythonapi/examples/post-processing.ipynb | 66 +- .../pythonapi/examples/tally-arithmetic.ipynb | 483 ++++++------- 6 files changed, 1109 insertions(+), 1086 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index 897af8e3ff..8b08fea2f4 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -146,6 +146,8 @@ "\n", "import openmc\n", "import openmc.mgxs as mgxs\n", + "from openmc.source import Source\n", + "from openmc.stats import SpatialBox\n", "\n", "%matplotlib inline" ] @@ -341,7 +343,8 @@ "settings_file.particles = particles\n", "settings_file.output = {'tallies': True, 'summary': True}\n", "bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", - "settings_file.set_source_space('fission', bounds)\n", + "settings_file.source = Source(space=SpatialBox(\n", + " bounds[:3], bounds[3:], only_fissionable=True))\n", "\n", "# Export to \"settings.xml\"\n", "settings_file.export_to_xml()" @@ -420,24 +423,22 @@ "data": { "text/plain": [ "OrderedDict([('flux', Tally\n", - "\tID =\t10000\n", - "\tName =\t\n", - "\tFilters =\t\n", - " \t\tcell\t[1]\n", - " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", - "\tNuclides =\ttotal \n", - "\tScores =\t['flux']\n", - "\tEstimator =\ttracklength\n", - "), ('absorption', Tally\n", - "\tID =\t10001\n", - "\tName =\t\n", - "\tFilters =\t\n", - " \t\tcell\t[1]\n", - " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", - "\tNuclides =\ttotal \n", - "\tScores =\t['absorption']\n", - "\tEstimator =\ttracklength\n", - ")])" + " \tID =\t10000\n", + " \tName =\t\n", + " \tFilters =\t\n", + " \t\tcell\t[1]\n", + " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", + " \tNuclides =\ttotal \n", + " \tScores =\t['flux']\n", + " \tEstimator =\ttracklength), ('absorption', Tally\n", + " \tID =\t10001\n", + " \tName =\t\n", + " \tFilters =\t\n", + " \t\tcell\t[1]\n", + " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", + " \tNuclides =\ttotal \n", + " \tScores =\t['absorption']\n", + " \tEstimator =\ttracklength)])" ] }, "execution_count": 13, @@ -516,10 +517,9 @@ "\n", " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", - " Version: 0.7.0\n", - " Git SHA1: c4b14a5ef87f004528d35cbf33fef3ed15a386ca\n", - " Date/Time: 2015-12-02 09:11:05\n", - " MPI Processes: 1\n", + " Version: 0.7.1\n", + " Git SHA1: ea9fb637f63f9374c7436456141afa850b84acf9\n", + " Date/Time: 2016-01-14 07:16:05\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -604,20 +604,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.1700E-01 seconds\n", - " Reading cross sections = 8.9000E-02 seconds\n", - " Total time in simulation = 1.4728E+01 seconds\n", - " Time in transport only = 1.4712E+01 seconds\n", - " Time in inactive batches = 1.7890E+00 seconds\n", - " Time in active batches = 1.2939E+01 seconds\n", - " Time synchronizing fission bank = 5.0000E-03 seconds\n", - " Sampling source sites = 3.0000E-03 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for initialization = 1.1720E+00 seconds\n", + " Reading cross sections = 9.0300E-01 seconds\n", + " Total time in simulation = 1.7319E+01 seconds\n", + " Time in transport only = 1.7310E+01 seconds\n", + " Time in inactive batches = 1.9120E+00 seconds\n", + " Time in active batches = 1.5407E+01 seconds\n", + " Time synchronizing fission bank = 2.0000E-03 seconds\n", + " Sampling source sites = 2.0000E-03 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 1.0000E-03 seconds\n", - " Total time elapsed = 1.5155E+01 seconds\n", - " Calculation Rate (inactive) = 13974.3 neutrons/second\n", - " Calculation Rate (active) = 7728.57 neutrons/second\n", + " Total time elapsed = 1.8507E+01 seconds\n", + " Calculation Rate (inactive) = 13075.3 neutrons/second\n", + " Calculation Rate (active) = 6490.56 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -779,7 +779,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -890,7 +890,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "
\n", " \n", " \n", @@ -966,7 +966,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "
\n", " \n", " \n", @@ -1035,7 +1035,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "
\n", " \n", " \n", @@ -1111,7 +1111,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "
\n", " \n", " \n", @@ -1187,7 +1187,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.6" + "version": "2.7.10" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index 6194b154ac..9677acf56e 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -34,14 +34,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/lib/pymodules/python2.7/matplotlib/__init__.py:1173: UserWarning: This call to matplotlib.use() has no effect\n", + "/usr/local/lib/python2.7/dist-packages/matplotlib/__init__.py:1318: UserWarning: This call to matplotlib.use() has no effect\n", "because the backend has already been chosen;\n", "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", "or matplotlib.backends is imported for the first time.\n", "\n", " warnings.warn(_use_error_msg)\n", - "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:9: QAWarning: pyne.rxname is not yet QA compliant.\n", - "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:9: QAWarning: pyne.ace is not yet QA compliant.\n" + "/usr/local/lib/python2.7/dist-packages/ipykernel/__main__.py:11: QAWarning: pyne.rxname is not yet QA compliant.\n", + "/usr/local/lib/python2.7/dist-packages/ipykernel/__main__.py:11: QAWarning: pyne.ace is not yet QA compliant.\n" ] } ], @@ -52,6 +52,8 @@ "\n", "import openmc\n", "import openmc.mgxs as mgxs\n", + "from openmc.source import Source\n", + "from openmc.stats import SpatialBox\n", "import openmoc\n", "from openmoc.compatible import get_openmoc_geometry\n", "import pyne.ace\n", @@ -286,7 +288,8 @@ "settings_file.particles = particles\n", "settings_file.output = {'tallies': True, 'summary': True}\n", "bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", - "settings_file.set_source_space('fission', bounds)\n", + "settings_file.source = Source(space=SpatialBox(\n", + " bounds[:3], bounds[3:], only_fissionable=True))\n", "\n", "# Activate tally precision triggers\n", "settings_file.trigger_active = True\n", @@ -446,10 +449,9 @@ "\n", " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", - " Version: 0.7.0\n", - " Git SHA1: c4b14a5ef87f004528d35cbf33fef3ed15a386ca\n", - " Date/Time: 2015-12-02 09:13:42\n", - " MPI Processes: 3\n", + " Version: 0.7.1\n", + " Git SHA1: ea9fb637f63f9374c7436456141afa850b84acf9\n", + " Date/Time: 2016-01-14 08:03:40\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -568,20 +570,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 7.5700E-01 seconds\n", - " Reading cross sections = 1.5800E-01 seconds\n", - " Total time in simulation = 1.4921E+02 seconds\n", - " Time in transport only = 1.4336E+02 seconds\n", - " Time in inactive batches = 8.6210E+00 seconds\n", - " Time in active batches = 1.4059E+02 seconds\n", - " Time synchronizing fission bank = 5.6060E+00 seconds\n", - " Sampling source sites = 1.4000E-02 seconds\n", - " SEND/RECV source sites = 4.0000E-03 seconds\n", - " Time accumulating tallies = 6.0000E-03 seconds\n", - " Total time for finalization = 1.3000E-02 seconds\n", - " Total time elapsed = 1.5002E+02 seconds\n", - " Calculation Rate (inactive) = 11599.6 neutrons/second\n", - " Calculation Rate (active) = 2845.11 neutrons/second\n", + " Total time for initialization = 3.8300E-01 seconds\n", + " Reading cross sections = 1.0700E-01 seconds\n", + " Total time in simulation = 2.5629E+02 seconds\n", + " Time in transport only = 2.5623E+02 seconds\n", + " Time in inactive batches = 1.5743E+01 seconds\n", + " Time in active batches = 2.4055E+02 seconds\n", + " Time synchronizing fission bank = 3.4000E-02 seconds\n", + " Sampling source sites = 2.1000E-02 seconds\n", + " SEND/RECV source sites = 1.3000E-02 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for finalization = 7.0000E-03 seconds\n", + " Total time elapsed = 2.5674E+02 seconds\n", + " Calculation Rate (inactive) = 6352.03 neutrons/second\n", + " Calculation Rate (active) = 1662.87 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -607,7 +609,7 @@ "source": [ "# Run OpenMC\n", "executor = openmc.Executor()\n", - "executor.run_simulation(output=True, mpi_procs=3)" + "executor.run_simulation(output=True)" ] }, { @@ -801,10 +803,20 @@ "collapsed": false }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", + " return c.reshape(shape_out)\n", + "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", + " return c.reshape(shape_out)\n" + ] + }, { "data": { "text/html": [ - "
\n", + "
\n", "
\n", " \n", " \n", @@ -1012,10 +1024,20 @@ "collapsed": false }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", + " return c.reshape(shape_out)\n", + "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", + " return c.reshape(shape_out)\n" + ] + }, { "data": { "text/html": [ - "
\n", + "
\n", "
\n", " \n", " \n", @@ -1189,13 +1211,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "[ NORMAL ] Importing ray tracing data from file...\n", + "[ NORMAL ] Ray tracing for track segmentation...\n", + "[ NORMAL ] Dumping tracks to file...\n", "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.574633\tres = 1.959E-316\n", + "[ NORMAL ] Iteration 0:\tk_eff = 0.574633\tres = 0.000E+00\n", "[ NORMAL ] Iteration 1:\tk_eff = 0.679931\tres = 4.254E-01\n", "[ NORMAL ] Iteration 2:\tk_eff = 0.660910\tres = 1.832E-01\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.658975\tres = 2.797E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.642976\tres = 2.928E-03\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.658975\tres = 2.798E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.642976\tres = 2.927E-03\n", "[ NORMAL ] Iteration 5:\tk_eff = 0.625710\tres = 2.428E-02\n", "[ NORMAL ] Iteration 6:\tk_eff = 0.606520\tres = 2.685E-02\n", "[ NORMAL ] Iteration 7:\tk_eff = 0.587277\tres = 3.067E-02\n", @@ -1206,20 +1229,20 @@ "[ NORMAL ] Iteration 12:\tk_eff = 0.510221\tres = 2.575E-02\n", "[ NORMAL ] Iteration 13:\tk_eff = 0.500691\tres = 2.241E-02\n", "[ NORMAL ] Iteration 14:\tk_eff = 0.493392\tres = 1.868E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.488317\tres = 1.458E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.488318\tres = 1.458E-02\n", "[ NORMAL ] Iteration 16:\tk_eff = 0.485438\tres = 1.028E-02\n", "[ NORMAL ] Iteration 17:\tk_eff = 0.484705\tres = 5.896E-03\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.486045\tres = 1.510E-03\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.486046\tres = 1.510E-03\n", "[ NORMAL ] Iteration 19:\tk_eff = 0.489362\tres = 2.766E-03\n", "[ NORMAL ] Iteration 20:\tk_eff = 0.494546\tres = 6.824E-03\n", "[ NORMAL ] Iteration 21:\tk_eff = 0.501481\tres = 1.059E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.510041\tres = 1.402E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.520094\tres = 1.707E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.531507\tres = 1.971E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.510042\tres = 1.402E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.520095\tres = 1.707E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.531508\tres = 1.971E-02\n", "[ NORMAL ] Iteration 25:\tk_eff = 0.544144\tres = 2.194E-02\n", "[ NORMAL ] Iteration 26:\tk_eff = 0.557872\tres = 2.378E-02\n", "[ NORMAL ] Iteration 27:\tk_eff = 0.572557\tres = 2.523E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.588072\tres = 2.632E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.588073\tres = 2.632E-02\n", "[ NORMAL ] Iteration 29:\tk_eff = 0.604293\tres = 2.710E-02\n", "[ NORMAL ] Iteration 30:\tk_eff = 0.621101\tres = 2.758E-02\n", "[ NORMAL ] Iteration 31:\tk_eff = 0.638382\tres = 2.781E-02\n", @@ -1231,128 +1254,129 @@ "[ NORMAL ] Iteration 37:\tk_eff = 0.746558\tres = 2.562E-02\n", "[ NORMAL ] Iteration 38:\tk_eff = 0.764569\tres = 2.490E-02\n", "[ NORMAL ] Iteration 39:\tk_eff = 0.782396\tres = 2.412E-02\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.799989\tres = 2.332E-02\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.799990\tres = 2.332E-02\n", "[ NORMAL ] Iteration 41:\tk_eff = 0.817301\tres = 2.249E-02\n", "[ NORMAL ] Iteration 42:\tk_eff = 0.834292\tres = 2.164E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.850927\tres = 2.079E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.867177\tres = 1.994E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.883017\tres = 1.910E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.850928\tres = 2.079E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.867178\tres = 1.994E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.883018\tres = 1.910E-02\n", "[ NORMAL ] Iteration 46:\tk_eff = 0.898427\tres = 1.827E-02\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.913389\tres = 1.745E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.927891\tres = 1.665E-02\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.941925\tres = 1.588E-02\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.955483\tres = 1.512E-02\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.968562\tres = 1.439E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.981161\tres = 1.369E-02\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.993282\tres = 1.301E-02\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.004928\tres = 1.235E-02\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.016104\tres = 1.172E-02\n", - "[ NORMAL ] Iteration 56:\tk_eff = 1.026816\tres = 1.112E-02\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.037073\tres = 1.054E-02\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.046883\tres = 9.989E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.056257\tres = 9.460E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.065205\tres = 8.954E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.073739\tres = 8.472E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.081871\tres = 8.012E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.089613\tres = 7.573E-03\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.096979\tres = 7.156E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.103980\tres = 6.760E-03\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.913390\tres = 1.745E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.927892\tres = 1.665E-02\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.941926\tres = 1.588E-02\n", + "[ NORMAL ] Iteration 50:\tk_eff = 0.955484\tres = 1.512E-02\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.968563\tres = 1.439E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.981162\tres = 1.369E-02\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.993283\tres = 1.301E-02\n", + "[ NORMAL ] Iteration 54:\tk_eff = 1.004929\tres = 1.235E-02\n", + "[ NORMAL ] Iteration 55:\tk_eff = 1.016105\tres = 1.172E-02\n", + "[ NORMAL ] Iteration 56:\tk_eff = 1.026818\tres = 1.112E-02\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.037075\tres = 1.054E-02\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.046885\tres = 9.989E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.056259\tres = 9.459E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.065206\tres = 8.954E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.073740\tres = 8.471E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.081872\tres = 8.012E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.089614\tres = 7.573E-03\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.096980\tres = 7.156E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.103981\tres = 6.760E-03\n", "[ NORMAL ] Iteration 66:\tk_eff = 1.110631\tres = 6.382E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.116943\tres = 6.024E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.122931\tres = 5.684E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.128607\tres = 5.361E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.133984\tres = 5.055E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.139075\tres = 4.764E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.143892\tres = 4.489E-03\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.148447\tres = 4.229E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.152752\tres = 3.982E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.116944\tres = 6.024E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.122932\tres = 5.684E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.128608\tres = 5.361E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.133985\tres = 5.055E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.139076\tres = 4.764E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.143892\tres = 4.490E-03\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.148447\tres = 4.228E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.152753\tres = 3.982E-03\n", "[ NORMAL ] Iteration 75:\tk_eff = 1.156819\tres = 3.749E-03\n", "[ NORMAL ] Iteration 76:\tk_eff = 1.160659\tres = 3.528E-03\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.164282\tres = 3.319E-03\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.164283\tres = 3.319E-03\n", "[ NORMAL ] Iteration 78:\tk_eff = 1.167701\tres = 3.122E-03\n", "[ NORMAL ] Iteration 79:\tk_eff = 1.170923\tres = 2.936E-03\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.173961\tres = 2.760E-03\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.173960\tres = 2.759E-03\n", "[ NORMAL ] Iteration 81:\tk_eff = 1.176822\tres = 2.594E-03\n", "[ NORMAL ] Iteration 82:\tk_eff = 1.179516\tres = 2.437E-03\n", "[ NORMAL ] Iteration 83:\tk_eff = 1.182052\tres = 2.289E-03\n", "[ NORMAL ] Iteration 84:\tk_eff = 1.184438\tres = 2.150E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.186682\tres = 2.019E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.186682\tres = 2.018E-03\n", "[ NORMAL ] Iteration 86:\tk_eff = 1.188792\tres = 1.895E-03\n", "[ NORMAL ] Iteration 87:\tk_eff = 1.190775\tres = 1.778E-03\n", "[ NORMAL ] Iteration 88:\tk_eff = 1.192639\tres = 1.668E-03\n", "[ NORMAL ] Iteration 89:\tk_eff = 1.194389\tres = 1.565E-03\n", "[ NORMAL ] Iteration 90:\tk_eff = 1.196032\tres = 1.468E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.197575\tres = 1.376E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.197575\tres = 1.375E-03\n", "[ NORMAL ] Iteration 92:\tk_eff = 1.199023\tres = 1.290E-03\n", "[ NORMAL ] Iteration 93:\tk_eff = 1.200381\tres = 1.209E-03\n", "[ NORMAL ] Iteration 94:\tk_eff = 1.201654\tres = 1.133E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.202849\tres = 1.061E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.203968\tres = 9.939E-04\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.205017\tres = 9.307E-04\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.206000\tres = 8.714E-04\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.206921\tres = 8.157E-04\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.207783\tres = 7.634E-04\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.208590\tres = 7.144E-04\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.209346\tres = 6.684E-04\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.210053\tres = 6.252E-04\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.210715\tres = 5.848E-04\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.211334\tres = 5.468E-04\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.211913\tres = 5.113E-04\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.212454\tres = 4.779E-04\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.212960\tres = 4.467E-04\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.213434\tres = 4.175E-04\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.213876\tres = 3.901E-04\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.214289\tres = 3.644E-04\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.214675\tres = 3.404E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.215036\tres = 3.180E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.215373\tres = 2.969E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.215687\tres = 2.773E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.215981\tres = 2.589E-04\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.202848\tres = 1.061E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.203968\tres = 9.941E-04\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.205016\tres = 9.308E-04\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.205999\tres = 8.707E-04\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.206921\tres = 8.159E-04\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.207783\tres = 7.635E-04\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.208590\tres = 7.145E-04\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.209345\tres = 6.684E-04\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.210053\tres = 6.250E-04\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.210714\tres = 5.848E-04\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.211333\tres = 5.466E-04\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.211913\tres = 5.115E-04\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.212453\tres = 4.784E-04\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.212960\tres = 4.462E-04\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.213433\tres = 4.175E-04\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.213875\tres = 3.901E-04\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.214288\tres = 3.643E-04\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.214674\tres = 3.404E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.215036\tres = 3.181E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.215372\tres = 2.972E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.215686\tres = 2.772E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.215980\tres = 2.586E-04\n", "[ NORMAL ] Iteration 117:\tk_eff = 1.216255\tres = 2.416E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.216511\tres = 2.256E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.216750\tres = 2.105E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.216973\tres = 1.964E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.217181\tres = 1.833E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.217376\tres = 1.710E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.217557\tres = 1.595E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.217726\tres = 1.488E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.217883\tres = 1.388E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.218030\tres = 1.294E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.218167\tres = 1.207E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.218295\tres = 1.125E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.218414\tres = 1.049E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.218525\tres = 9.777E-05\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.218629\tres = 9.113E-05\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.218725\tres = 8.494E-05\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.218815\tres = 7.916E-05\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.216511\tres = 2.258E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.216749\tres = 2.105E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.216973\tres = 1.963E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.217181\tres = 1.834E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.217375\tres = 1.710E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.217556\tres = 1.595E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.217725\tres = 1.488E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.217883\tres = 1.389E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.218030\tres = 1.296E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.218167\tres = 1.208E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.218294\tres = 1.128E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.218414\tres = 1.041E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.218525\tres = 9.793E-05\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.218628\tres = 9.128E-05\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.218725\tres = 8.502E-05\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.218815\tres = 7.903E-05\n", "[ NORMAL ] Iteration 134:\tk_eff = 1.218899\tres = 7.376E-05\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.218977\tres = 6.873E-05\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.219050\tres = 6.404E-05\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.219117\tres = 5.966E-05\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.219180\tres = 5.557E-05\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.219239\tres = 5.177E-05\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.219294\tres = 4.822E-05\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.219345\tres = 4.491E-05\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.219392\tres = 4.182E-05\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.219437\tres = 3.894E-05\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.219478\tres = 3.626E-05\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.219516\tres = 3.376E-05\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.219552\tres = 3.144E-05\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.219585\tres = 2.927E-05\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.219616\tres = 2.724E-05\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.219645\tres = 2.536E-05\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.219672\tres = 2.361E-05\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.219696\tres = 2.197E-05\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.219720\tres = 2.045E-05\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.218976\tres = 6.888E-05\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.219049\tres = 6.362E-05\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.219117\tres = 5.979E-05\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.219180\tres = 5.591E-05\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.219239\tres = 5.181E-05\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.219294\tres = 4.824E-05\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.219345\tres = 4.496E-05\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.219392\tres = 4.197E-05\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.219437\tres = 3.871E-05\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.219478\tres = 3.666E-05\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.219516\tres = 3.373E-05\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.219552\tres = 3.112E-05\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.219585\tres = 2.941E-05\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.219616\tres = 2.711E-05\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.219645\tres = 2.542E-05\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.219671\tres = 2.369E-05\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.219696\tres = 2.207E-05\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.219720\tres = 2.049E-05\n", "[ NORMAL ] Iteration 153:\tk_eff = 1.219741\tres = 1.903E-05\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.219761\tres = 1.771E-05\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.219780\tres = 1.648E-05\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.219797\tres = 1.534E-05\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.219814\tres = 1.427E-05\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.219829\tres = 1.328E-05\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.219843\tres = 1.235E-05\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.219856\tres = 1.149E-05\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.219868\tres = 1.069E-05\n" + "[ NORMAL ] Iteration 154:\tk_eff = 1.219761\tres = 1.770E-05\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.219780\tres = 1.639E-05\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.219797\tres = 1.533E-05\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.219813\tres = 1.396E-05\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.219828\tres = 1.319E-05\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.219842\tres = 1.216E-05\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.219854\tres = 1.152E-05\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.219867\tres = 1.049E-05\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.219878\tres = 1.005E-05\n" ] } ], @@ -1386,8 +1410,8 @@ "output_type": "stream", "text": [ "openmc keff = 1.223729\n", - "openmoc keff = 1.219868\n", - "bias [pcm]: -386.1\n" + "openmoc keff = 1.219878\n", + "bias [pcm]: -385.1\n" ] } ], @@ -1462,237 +1486,237 @@ "text": [ "[ NORMAL ] Importing ray tracing data from file...\n", "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.495594\tres = 1.959E-316\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.557312\tres = 5.044E-01\n", + "[ NORMAL ] Iteration 0:\tk_eff = 0.495594\tres = 0.000E+00\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.557313\tres = 5.044E-01\n", "[ NORMAL ] Iteration 2:\tk_eff = 0.518115\tres = 1.245E-01\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.509016\tres = 7.033E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.496279\tres = 1.756E-02\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.488357\tres = 2.502E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.482659\tres = 1.596E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.479523\tres = 1.167E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.478568\tres = 6.497E-03\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.479590\tres = 1.991E-03\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.482388\tres = 2.136E-03\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.509017\tres = 7.033E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.496280\tres = 1.756E-02\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.488358\tres = 2.502E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.482660\tres = 1.596E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.479524\tres = 1.167E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.478569\tres = 6.497E-03\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.479591\tres = 1.992E-03\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.482389\tres = 2.136E-03\n", "[ NORMAL ] Iteration 11:\tk_eff = 0.486774\tres = 5.834E-03\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.492575\tres = 9.091E-03\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.492576\tres = 9.091E-03\n", "[ NORMAL ] Iteration 13:\tk_eff = 0.499632\tres = 1.192E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.507799\tres = 1.433E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.516943\tres = 1.635E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.507800\tres = 1.433E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.516944\tres = 1.635E-02\n", "[ NORMAL ] Iteration 16:\tk_eff = 0.526942\tres = 1.801E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.537681\tres = 1.934E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.549060\tres = 2.038E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.560984\tres = 2.116E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.537682\tres = 1.934E-02\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.549061\tres = 2.038E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.560985\tres = 2.116E-02\n", "[ NORMAL ] Iteration 20:\tk_eff = 0.573368\tres = 2.172E-02\n", "[ NORMAL ] Iteration 21:\tk_eff = 0.586133\tres = 2.207E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.599207\tres = 2.226E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.599208\tres = 2.226E-02\n", "[ NORMAL ] Iteration 23:\tk_eff = 0.612528\tres = 2.231E-02\n", "[ NORMAL ] Iteration 24:\tk_eff = 0.626035\tres = 2.223E-02\n", "[ NORMAL ] Iteration 25:\tk_eff = 0.639676\tres = 2.205E-02\n", "[ NORMAL ] Iteration 26:\tk_eff = 0.653402\tres = 2.179E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.667170\tres = 2.146E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.667171\tres = 2.146E-02\n", "[ NORMAL ] Iteration 28:\tk_eff = 0.680942\tres = 2.107E-02\n", "[ NORMAL ] Iteration 29:\tk_eff = 0.694681\tres = 2.064E-02\n", "[ NORMAL ] Iteration 30:\tk_eff = 0.708356\tres = 2.018E-02\n", "[ NORMAL ] Iteration 31:\tk_eff = 0.721940\tres = 1.969E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.735406\tres = 1.918E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.735407\tres = 1.918E-02\n", "[ NORMAL ] Iteration 33:\tk_eff = 0.748734\tres = 1.865E-02\n", "[ NORMAL ] Iteration 34:\tk_eff = 0.761904\tres = 1.812E-02\n", "[ NORMAL ] Iteration 35:\tk_eff = 0.774897\tres = 1.759E-02\n", "[ NORMAL ] Iteration 36:\tk_eff = 0.787700\tres = 1.705E-02\n", "[ NORMAL ] Iteration 37:\tk_eff = 0.800299\tres = 1.652E-02\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.812684\tres = 1.600E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.824844\tres = 1.547E-02\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.836772\tres = 1.496E-02\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.812684\tres = 1.599E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.824844\tres = 1.548E-02\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.836773\tres = 1.496E-02\n", "[ NORMAL ] Iteration 41:\tk_eff = 0.848462\tres = 1.446E-02\n", "[ NORMAL ] Iteration 42:\tk_eff = 0.859908\tres = 1.397E-02\n", "[ NORMAL ] Iteration 43:\tk_eff = 0.871105\tres = 1.349E-02\n", "[ NORMAL ] Iteration 44:\tk_eff = 0.882052\tres = 1.302E-02\n", "[ NORMAL ] Iteration 45:\tk_eff = 0.892745\tres = 1.257E-02\n", "[ NORMAL ] Iteration 46:\tk_eff = 0.903184\tres = 1.212E-02\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.913367\tres = 1.169E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.923297\tres = 1.128E-02\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.913368\tres = 1.169E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.923296\tres = 1.128E-02\n", "[ NORMAL ] Iteration 49:\tk_eff = 0.932972\tres = 1.087E-02\n", "[ NORMAL ] Iteration 50:\tk_eff = 0.942394\tres = 1.048E-02\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.951566\tres = 1.010E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.960490\tres = 9.733E-03\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.951567\tres = 1.010E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.960491\tres = 9.733E-03\n", "[ NORMAL ] Iteration 53:\tk_eff = 0.969168\tres = 9.378E-03\n", "[ NORMAL ] Iteration 54:\tk_eff = 0.977604\tres = 9.035E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 0.985800\tres = 8.704E-03\n", - "[ NORMAL ] Iteration 56:\tk_eff = 0.993761\tres = 8.384E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 0.985801\tres = 8.704E-03\n", + "[ NORMAL ] Iteration 56:\tk_eff = 0.993762\tres = 8.384E-03\n", "[ NORMAL ] Iteration 57:\tk_eff = 1.001491\tres = 8.076E-03\n", "[ NORMAL ] Iteration 58:\tk_eff = 1.008992\tres = 7.778E-03\n", "[ NORMAL ] Iteration 59:\tk_eff = 1.016271\tres = 7.490E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.023330\tres = 7.213E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.030174\tres = 6.946E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.036809\tres = 6.688E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.043238\tres = 6.440E-03\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.049466\tres = 6.201E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.023329\tres = 7.214E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.030174\tres = 6.945E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.036809\tres = 6.689E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.043238\tres = 6.441E-03\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.049466\tres = 6.200E-03\n", "[ NORMAL ] Iteration 65:\tk_eff = 1.055498\tres = 5.970E-03\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.061339\tres = 5.748E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.066993\tres = 5.534E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.072465\tres = 5.327E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.077760\tres = 5.129E-03\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.061338\tres = 5.748E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.066993\tres = 5.533E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.072465\tres = 5.328E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.077760\tres = 5.128E-03\n", "[ NORMAL ] Iteration 70:\tk_eff = 1.082882\tres = 4.937E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.087837\tres = 4.753E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.092628\tres = 4.575E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.087836\tres = 4.753E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.092627\tres = 4.575E-03\n", "[ NORMAL ] Iteration 73:\tk_eff = 1.097260\tres = 4.404E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.101737\tres = 4.239E-03\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.106065\tres = 4.081E-03\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.110247\tres = 3.928E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.101737\tres = 4.240E-03\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.106065\tres = 4.080E-03\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.110247\tres = 3.929E-03\n", "[ NORMAL ] Iteration 77:\tk_eff = 1.114288\tres = 3.781E-03\n", "[ NORMAL ] Iteration 78:\tk_eff = 1.118191\tres = 3.639E-03\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.121961\tres = 3.503E-03\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.125603\tres = 3.372E-03\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.121961\tres = 3.502E-03\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.125602\tres = 3.372E-03\n", "[ NORMAL ] Iteration 81:\tk_eff = 1.129119\tres = 3.245E-03\n", "[ NORMAL ] Iteration 82:\tk_eff = 1.132513\tres = 3.124E-03\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.135790\tres = 3.007E-03\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.135790\tres = 3.006E-03\n", "[ NORMAL ] Iteration 84:\tk_eff = 1.138954\tres = 2.894E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.142007\tres = 2.785E-03\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.144953\tres = 2.681E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.147796\tres = 2.580E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.142008\tres = 2.786E-03\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.144954\tres = 2.681E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.147797\tres = 2.580E-03\n", "[ NORMAL ] Iteration 88:\tk_eff = 1.150539\tres = 2.483E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.153185\tres = 2.390E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.153185\tres = 2.389E-03\n", "[ NORMAL ] Iteration 90:\tk_eff = 1.155738\tres = 2.300E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.158200\tres = 2.214E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.158201\tres = 2.214E-03\n", "[ NORMAL ] Iteration 92:\tk_eff = 1.160575\tres = 2.130E-03\n", "[ NORMAL ] Iteration 93:\tk_eff = 1.162865\tres = 2.050E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.165073\tres = 1.973E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.165074\tres = 1.973E-03\n", "[ NORMAL ] Iteration 95:\tk_eff = 1.167202\tres = 1.899E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.169255\tres = 1.828E-03\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.171234\tres = 1.759E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.169255\tres = 1.827E-03\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.171235\tres = 1.759E-03\n", "[ NORMAL ] Iteration 98:\tk_eff = 1.173142\tres = 1.693E-03\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.174980\tres = 1.629E-03\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.176753\tres = 1.567E-03\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.174981\tres = 1.629E-03\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.176753\tres = 1.568E-03\n", "[ NORMAL ] Iteration 101:\tk_eff = 1.178461\tres = 1.508E-03\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.180107\tres = 1.452E-03\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.180108\tres = 1.452E-03\n", "[ NORMAL ] Iteration 103:\tk_eff = 1.181694\tres = 1.397E-03\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.183222\tres = 1.344E-03\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.184695\tres = 1.294E-03\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.183223\tres = 1.344E-03\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.184696\tres = 1.294E-03\n", "[ NORMAL ] Iteration 106:\tk_eff = 1.186115\tres = 1.245E-03\n", "[ NORMAL ] Iteration 107:\tk_eff = 1.187482\tres = 1.198E-03\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.188799\tres = 1.153E-03\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.190068\tres = 1.109E-03\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.188800\tres = 1.152E-03\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.190069\tres = 1.110E-03\n", "[ NORMAL ] Iteration 110:\tk_eff = 1.191290\tres = 1.067E-03\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.192468\tres = 1.027E-03\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.193602\tres = 9.883E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.194694\tres = 9.510E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.195746\tres = 9.151E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.196759\tres = 8.805E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.197735\tres = 8.473E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.198674\tres = 8.152E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.199579\tres = 7.844E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.200450\tres = 7.548E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.201289\tres = 7.262E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.202097\tres = 6.988E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.202874\tres = 6.723E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.203623\tres = 6.469E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.204344\tres = 6.224E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.205038\tres = 5.989E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.205706\tres = 5.762E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.206349\tres = 5.544E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.206968\tres = 5.334E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.207564\tres = 5.132E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.208138\tres = 4.938E-04\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.208690\tres = 4.751E-04\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.209221\tres = 4.570E-04\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.209733\tres = 4.397E-04\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.210225\tres = 4.231E-04\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.210699\tres = 4.070E-04\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.211155\tres = 3.916E-04\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.211594\tres = 3.767E-04\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.212017\tres = 3.624E-04\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.212423\tres = 3.487E-04\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.212815\tres = 3.355E-04\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.192469\tres = 1.026E-03\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.193602\tres = 9.889E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.194694\tres = 9.503E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.195747\tres = 9.154E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.196759\tres = 8.808E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.197735\tres = 8.464E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.198674\tres = 8.155E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.199579\tres = 7.845E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.200450\tres = 7.550E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.201289\tres = 7.263E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.202097\tres = 6.984E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.202875\tres = 6.728E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.203623\tres = 6.470E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.204344\tres = 6.220E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.205037\tres = 5.994E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.205706\tres = 5.757E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.206349\tres = 5.551E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.206968\tres = 5.328E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.207565\tres = 5.132E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.208138\tres = 4.944E-04\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.208690\tres = 4.749E-04\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.209221\tres = 4.566E-04\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.209733\tres = 4.395E-04\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.210226\tres = 4.232E-04\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.210700\tres = 4.076E-04\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.211156\tres = 3.916E-04\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.211595\tres = 3.767E-04\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.212017\tres = 3.628E-04\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.212423\tres = 3.486E-04\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.212814\tres = 3.350E-04\n", "[ NORMAL ] Iteration 141:\tk_eff = 1.213191\tres = 3.227E-04\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.213554\tres = 3.105E-04\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.213902\tres = 2.987E-04\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.214238\tres = 2.874E-04\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.214561\tres = 2.764E-04\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.213554\tres = 3.107E-04\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.213902\tres = 2.989E-04\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.214238\tres = 2.869E-04\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.214561\tres = 2.770E-04\n", "[ NORMAL ] Iteration 146:\tk_eff = 1.214872\tres = 2.659E-04\n", "[ NORMAL ] Iteration 147:\tk_eff = 1.215171\tres = 2.558E-04\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.215458\tres = 2.461E-04\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.215735\tres = 2.368E-04\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.216002\tres = 2.278E-04\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.216258\tres = 2.191E-04\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.216504\tres = 2.108E-04\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.215458\tres = 2.458E-04\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.215735\tres = 2.361E-04\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.216002\tres = 2.281E-04\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.216258\tres = 2.194E-04\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.216505\tres = 2.110E-04\n", "[ NORMAL ] Iteration 153:\tk_eff = 1.216742\tres = 2.028E-04\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.216970\tres = 1.951E-04\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.217190\tres = 1.876E-04\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.217401\tres = 1.805E-04\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.217604\tres = 1.736E-04\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.217800\tres = 1.670E-04\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.217988\tres = 1.607E-04\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.216970\tres = 1.952E-04\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.217191\tres = 1.876E-04\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.217402\tres = 1.809E-04\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.217605\tres = 1.734E-04\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.217800\tres = 1.673E-04\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.217988\tres = 1.602E-04\n", "[ NORMAL ] Iteration 160:\tk_eff = 1.218169\tres = 1.546E-04\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.218344\tres = 1.487E-04\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.218511\tres = 1.430E-04\n", - "[ NORMAL ] Iteration 163:\tk_eff = 1.218673\tres = 1.376E-04\n", - "[ NORMAL ] Iteration 164:\tk_eff = 1.218828\tres = 1.324E-04\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.218344\tres = 1.485E-04\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.218511\tres = 1.429E-04\n", + "[ NORMAL ] Iteration 163:\tk_eff = 1.218672\tres = 1.378E-04\n", + "[ NORMAL ] Iteration 164:\tk_eff = 1.218828\tres = 1.323E-04\n", "[ NORMAL ] Iteration 165:\tk_eff = 1.218977\tres = 1.273E-04\n", "[ NORMAL ] Iteration 166:\tk_eff = 1.219121\tres = 1.225E-04\n", - "[ NORMAL ] Iteration 167:\tk_eff = 1.219259\tres = 1.178E-04\n", - "[ NORMAL ] Iteration 168:\tk_eff = 1.219392\tres = 1.133E-04\n", + "[ NORMAL ] Iteration 167:\tk_eff = 1.219259\tres = 1.182E-04\n", + "[ NORMAL ] Iteration 168:\tk_eff = 1.219392\tres = 1.131E-04\n", "[ NORMAL ] Iteration 169:\tk_eff = 1.219520\tres = 1.090E-04\n", - "[ NORMAL ] Iteration 170:\tk_eff = 1.219643\tres = 1.049E-04\n", - "[ NORMAL ] Iteration 171:\tk_eff = 1.219761\tres = 1.009E-04\n", - "[ NORMAL ] Iteration 172:\tk_eff = 1.219875\tres = 9.702E-05\n", - "[ NORMAL ] Iteration 173:\tk_eff = 1.219984\tres = 9.332E-05\n", - "[ NORMAL ] Iteration 174:\tk_eff = 1.220090\tres = 8.976E-05\n", - "[ NORMAL ] Iteration 175:\tk_eff = 1.220191\tres = 8.634E-05\n", - "[ NORMAL ] Iteration 176:\tk_eff = 1.220288\tres = 8.305E-05\n", - "[ NORMAL ] Iteration 177:\tk_eff = 1.220382\tres = 7.989E-05\n", - "[ NORMAL ] Iteration 178:\tk_eff = 1.220472\tres = 7.684E-05\n", - "[ NORMAL ] Iteration 179:\tk_eff = 1.220559\tres = 7.392E-05\n", - "[ NORMAL ] Iteration 180:\tk_eff = 1.220643\tres = 7.110E-05\n", - "[ NORMAL ] Iteration 181:\tk_eff = 1.220723\tres = 6.839E-05\n", - "[ NORMAL ] Iteration 182:\tk_eff = 1.220800\tres = 6.578E-05\n", - "[ NORMAL ] Iteration 183:\tk_eff = 1.220874\tres = 6.327E-05\n", - "[ NORMAL ] Iteration 184:\tk_eff = 1.220946\tres = 6.086E-05\n", - "[ NORMAL ] Iteration 185:\tk_eff = 1.221015\tres = 5.854E-05\n", - "[ NORMAL ] Iteration 186:\tk_eff = 1.221081\tres = 5.631E-05\n", - "[ NORMAL ] Iteration 187:\tk_eff = 1.221144\tres = 5.416E-05\n", - "[ NORMAL ] Iteration 188:\tk_eff = 1.221206\tres = 5.209E-05\n", - "[ NORMAL ] Iteration 189:\tk_eff = 1.221264\tres = 5.011E-05\n", - "[ NORMAL ] Iteration 190:\tk_eff = 1.221321\tres = 4.820E-05\n", - "[ NORMAL ] Iteration 191:\tk_eff = 1.221375\tres = 4.636E-05\n", - "[ NORMAL ] Iteration 192:\tk_eff = 1.221428\tres = 4.459E-05\n", - "[ NORMAL ] Iteration 193:\tk_eff = 1.221478\tres = 4.289E-05\n", - "[ NORMAL ] Iteration 194:\tk_eff = 1.221527\tres = 4.125E-05\n", - "[ NORMAL ] Iteration 195:\tk_eff = 1.221573\tres = 3.968E-05\n", - "[ NORMAL ] Iteration 196:\tk_eff = 1.221618\tres = 3.816E-05\n", - "[ NORMAL ] Iteration 197:\tk_eff = 1.221661\tres = 3.671E-05\n", - "[ NORMAL ] Iteration 198:\tk_eff = 1.221703\tres = 3.531E-05\n", - "[ NORMAL ] Iteration 199:\tk_eff = 1.221743\tres = 3.396E-05\n", - "[ NORMAL ] Iteration 200:\tk_eff = 1.221781\tres = 3.266E-05\n", - "[ NORMAL ] Iteration 201:\tk_eff = 1.221818\tres = 3.142E-05\n", - "[ NORMAL ] Iteration 202:\tk_eff = 1.221853\tres = 3.022E-05\n", - "[ NORMAL ] Iteration 203:\tk_eff = 1.221888\tres = 2.906E-05\n", - "[ NORMAL ] Iteration 204:\tk_eff = 1.221920\tres = 2.795E-05\n", - "[ NORMAL ] Iteration 205:\tk_eff = 1.221952\tres = 2.689E-05\n", - "[ NORMAL ] Iteration 206:\tk_eff = 1.221982\tres = 2.586E-05\n", - "[ NORMAL ] Iteration 207:\tk_eff = 1.222012\tres = 2.487E-05\n", - "[ NORMAL ] Iteration 208:\tk_eff = 1.222040\tres = 2.392E-05\n", - "[ NORMAL ] Iteration 209:\tk_eff = 1.222067\tres = 2.301E-05\n", - "[ NORMAL ] Iteration 210:\tk_eff = 1.222093\tres = 2.213E-05\n", - "[ NORMAL ] Iteration 211:\tk_eff = 1.222118\tres = 2.129E-05\n", - "[ NORMAL ] Iteration 212:\tk_eff = 1.222142\tres = 2.047E-05\n", - "[ NORMAL ] Iteration 213:\tk_eff = 1.222165\tres = 1.969E-05\n", - "[ NORMAL ] Iteration 214:\tk_eff = 1.222187\tres = 1.894E-05\n", - "[ NORMAL ] Iteration 215:\tk_eff = 1.222209\tres = 1.822E-05\n", - "[ NORMAL ] Iteration 216:\tk_eff = 1.222229\tres = 1.752E-05\n", - "[ NORMAL ] Iteration 217:\tk_eff = 1.222249\tres = 1.685E-05\n", - "[ NORMAL ] Iteration 218:\tk_eff = 1.222268\tres = 1.621E-05\n", - "[ NORMAL ] Iteration 219:\tk_eff = 1.222287\tres = 1.559E-05\n", - "[ NORMAL ] Iteration 220:\tk_eff = 1.222304\tres = 1.499E-05\n", - "[ NORMAL ] Iteration 221:\tk_eff = 1.222321\tres = 1.442E-05\n", + "[ NORMAL ] Iteration 170:\tk_eff = 1.219643\tres = 1.050E-04\n", + "[ NORMAL ] Iteration 171:\tk_eff = 1.219761\tres = 1.008E-04\n", + "[ NORMAL ] Iteration 172:\tk_eff = 1.219876\tres = 9.712E-05\n", + "[ NORMAL ] Iteration 173:\tk_eff = 1.219985\tres = 9.360E-05\n", + "[ NORMAL ] Iteration 174:\tk_eff = 1.220090\tres = 8.946E-05\n", + "[ NORMAL ] Iteration 175:\tk_eff = 1.220191\tres = 8.611E-05\n", + "[ NORMAL ] Iteration 176:\tk_eff = 1.220288\tres = 8.299E-05\n", + "[ NORMAL ] Iteration 177:\tk_eff = 1.220382\tres = 7.977E-05\n", + "[ NORMAL ] Iteration 178:\tk_eff = 1.220472\tres = 7.682E-05\n", + "[ NORMAL ] Iteration 179:\tk_eff = 1.220560\tres = 7.421E-05\n", + "[ NORMAL ] Iteration 180:\tk_eff = 1.220643\tres = 7.140E-05\n", + "[ NORMAL ] Iteration 181:\tk_eff = 1.220724\tres = 6.824E-05\n", + "[ NORMAL ] Iteration 182:\tk_eff = 1.220801\tres = 6.591E-05\n", + "[ NORMAL ] Iteration 183:\tk_eff = 1.220875\tres = 6.353E-05\n", + "[ NORMAL ] Iteration 184:\tk_eff = 1.220946\tres = 6.092E-05\n", + "[ NORMAL ] Iteration 185:\tk_eff = 1.221015\tres = 5.826E-05\n", + "[ NORMAL ] Iteration 186:\tk_eff = 1.221081\tres = 5.613E-05\n", + "[ NORMAL ] Iteration 187:\tk_eff = 1.221145\tres = 5.433E-05\n", + "[ NORMAL ] Iteration 188:\tk_eff = 1.221206\tres = 5.230E-05\n", + "[ NORMAL ] Iteration 189:\tk_eff = 1.221266\tres = 5.025E-05\n", + "[ NORMAL ] Iteration 190:\tk_eff = 1.221322\tres = 4.833E-05\n", + "[ NORMAL ] Iteration 191:\tk_eff = 1.221376\tres = 4.642E-05\n", + "[ NORMAL ] Iteration 192:\tk_eff = 1.221429\tres = 4.437E-05\n", + "[ NORMAL ] Iteration 193:\tk_eff = 1.221479\tres = 4.286E-05\n", + "[ NORMAL ] Iteration 194:\tk_eff = 1.221528\tres = 4.123E-05\n", + "[ NORMAL ] Iteration 195:\tk_eff = 1.221574\tres = 3.993E-05\n", + "[ NORMAL ] Iteration 196:\tk_eff = 1.221619\tres = 3.785E-05\n", + "[ NORMAL ] Iteration 197:\tk_eff = 1.221662\tres = 3.669E-05\n", + "[ NORMAL ] Iteration 198:\tk_eff = 1.221704\tres = 3.547E-05\n", + "[ NORMAL ] Iteration 199:\tk_eff = 1.221743\tres = 3.387E-05\n", + "[ NORMAL ] Iteration 200:\tk_eff = 1.221781\tres = 3.243E-05\n", + "[ NORMAL ] Iteration 201:\tk_eff = 1.221818\tres = 3.127E-05\n", + "[ NORMAL ] Iteration 202:\tk_eff = 1.221854\tres = 3.018E-05\n", + "[ NORMAL ] Iteration 203:\tk_eff = 1.221888\tres = 2.924E-05\n", + "[ NORMAL ] Iteration 204:\tk_eff = 1.221921\tres = 2.786E-05\n", + "[ NORMAL ] Iteration 205:\tk_eff = 1.221952\tres = 2.677E-05\n", + "[ NORMAL ] Iteration 206:\tk_eff = 1.221982\tres = 2.579E-05\n", + "[ NORMAL ] Iteration 207:\tk_eff = 1.222011\tres = 2.468E-05\n", + "[ NORMAL ] Iteration 208:\tk_eff = 1.222039\tres = 2.377E-05\n", + "[ NORMAL ] Iteration 209:\tk_eff = 1.222066\tres = 2.288E-05\n", + "[ NORMAL ] Iteration 210:\tk_eff = 1.222093\tres = 2.204E-05\n", + "[ NORMAL ] Iteration 211:\tk_eff = 1.222118\tres = 2.117E-05\n", + "[ NORMAL ] Iteration 212:\tk_eff = 1.222141\tres = 2.044E-05\n", + "[ NORMAL ] Iteration 213:\tk_eff = 1.222165\tres = 1.954E-05\n", + "[ NORMAL ] Iteration 214:\tk_eff = 1.222187\tres = 1.899E-05\n", + "[ NORMAL ] Iteration 215:\tk_eff = 1.222208\tres = 1.797E-05\n", + "[ NORMAL ] Iteration 216:\tk_eff = 1.222229\tres = 1.745E-05\n", + "[ NORMAL ] Iteration 217:\tk_eff = 1.222248\tres = 1.686E-05\n", + "[ NORMAL ] Iteration 218:\tk_eff = 1.222267\tres = 1.623E-05\n", + "[ NORMAL ] Iteration 219:\tk_eff = 1.222286\tres = 1.568E-05\n", + "[ NORMAL ] Iteration 220:\tk_eff = 1.222304\tres = 1.508E-05\n", + "[ NORMAL ] Iteration 221:\tk_eff = 1.222320\tres = 1.458E-05\n", "[ NORMAL ] Iteration 222:\tk_eff = 1.222337\tres = 1.387E-05\n", - "[ NORMAL ] Iteration 223:\tk_eff = 1.222353\tres = 1.334E-05\n", - "[ NORMAL ] Iteration 224:\tk_eff = 1.222368\tres = 1.283E-05\n", - "[ NORMAL ] Iteration 225:\tk_eff = 1.222383\tres = 1.234E-05\n", - "[ NORMAL ] Iteration 226:\tk_eff = 1.222397\tres = 1.187E-05\n", - "[ NORMAL ] Iteration 227:\tk_eff = 1.222410\tres = 1.142E-05\n", - "[ NORMAL ] Iteration 228:\tk_eff = 1.222423\tres = 1.098E-05\n", - "[ NORMAL ] Iteration 229:\tk_eff = 1.222435\tres = 1.056E-05\n", - "[ NORMAL ] Iteration 230:\tk_eff = 1.222447\tres = 1.016E-05\n" + "[ NORMAL ] Iteration 223:\tk_eff = 1.222353\tres = 1.337E-05\n", + "[ NORMAL ] Iteration 224:\tk_eff = 1.222368\tres = 1.286E-05\n", + "[ NORMAL ] Iteration 225:\tk_eff = 1.222382\tres = 1.230E-05\n", + "[ NORMAL ] Iteration 226:\tk_eff = 1.222396\tres = 1.201E-05\n", + "[ NORMAL ] Iteration 227:\tk_eff = 1.222409\tres = 1.131E-05\n", + "[ NORMAL ] Iteration 228:\tk_eff = 1.222422\tres = 1.082E-05\n", + "[ NORMAL ] Iteration 229:\tk_eff = 1.222435\tres = 1.051E-05\n", + "[ NORMAL ] Iteration 230:\tk_eff = 1.222447\tres = 1.015E-05\n" ] } ], @@ -1809,9 +1833,9 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAEhCAYAAAB7mQezAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXeYVEXWh9/uyYnoDEFAQSxFFEygoKsk0yoGXNOnYkBB\nYJHVNYEJVtYMKEFUxBwQRYyYAWExgmExQKmrooDQIMLk6XC/P273TPdM90x3T6fbc97n6Wemq++t\nX907PXVunVN1CgRBEARBEARBEARBEARBEARBEARBEARBEARBEARBEAQhbtiS3QDBWiil9ga+11pn\n1Su/GDhfa31ckHNaAQ8AhwF2YKHW+lbvZ8cCdwGtgQrgH1rrVd767gc2+1U1W2v9QL26BwHvAD/W\nk10EPAS8rbU+KIrrHA900FrfEum5jdR5IXAVkAdkAx8B12qtt8RKI8x2HAdMAdoBmcDPwJVa6++i\nrK8/UKm1XheP+yYknsxkN0BoEdwOVGmteymlCoEvlVKrgNXAi8DxWusvlFKnYnbonbznLdZaXxpG\n/b9orXuF+CxiowCgtZ4bzXmhUEqNxTQKw7XWG5RSmcBNwEqlVG+tdY3fsTattRFLfb+622De40Fa\n66+8ZVcDi4EDoqz2UmAVsC7W901IDmIYhESwGNAAWusypdRXmJ3Qp8ClWusvvMctAzoopVp73zdr\nROsd3fygtc5USu0JPAl0xHxaf15rfVMj5VOAPbXWlyulugHzgb0AJ3C31vopb/0fYRq+yzGfwK/W\nWi+q1w47cAtwodZ6g/c+uIApSqnPvcdcDAwHWgFfANcppa4ExmCOsjYAl2mtt3tHWTOAXO89ukVr\n/WKo8nq3ZV/AANb5ld3vvQe+9t4C/J+3npe91+RRSvUAHsc03Du9bTsCuBAYrpQqwRz5xeS+CcnD\nnuwGCOmP1nq51noT1LqVBgKfaK13a61f85bbgFHASq31Lu+pByulliulNiilHvGeGym+J+9/AB9o\nrXsDBwJdlVIdGyk3/M59GFimtd4fOBmY5e30ANoDbq11H29d04K0YX+grdb6vSD35lW/0cJxwBVa\n6+uUUkcC1wDHekdDG4E7vMfdi+ly6w2cBJweovyMIG35GtgNrFBKnaeU6qS1dmutt0Otu+ssoB+w\nj/c11u8+PKO13hf4N/Ck1vpBTAN/rdZ6Zozvm5AkxDAICUMplQ08C7yitf7Er/xvmLGEccB4b/EG\nzKfVU4CDMZ+kZ4aouptS6rt6r1H1jtkKnKCUOgpwaa0v0lr/3ki5zdu2TGAYZowErfVGYDkw1Ftv\nJvCY9/cvAF/H5087wNHE7QEzduOLlZwMvODrsIFHgOP9ruUipdR+WutftNYXhCg/v76A1roSGIDZ\nmU8FNimlPlZKHeM9ZDjwqNa6VGvtBhYAI5RSOcAg4DlvPa9gjhbqE8v7JiQJcSUJkeIhuIsnA3AD\nKKXeBzoDhtb6AG9ZIfASsFFrfYX/iV53x4tKqcHA+0qpg7XWH2G6G/CefwfwVog2bQwWY/C6LHzM\n9LbxAaCzUmqu1npKI+U+2gM2rXWpX9lOoNj7u9vb2eK9/owg7duO6SKza609Ia4B4A+/3/cgMPD+\nJ1Di/f1SzPjEe0qpSmCS1npxI+UBeIPd1wDXKKX2wjTGS5VSXYE23vLR3sMzgW2Yxs2utd7tV09F\nI9cSi/smJAkZMQiRsh0wvJ2IPwr4BUBrPVRr3cvPKGQCSzCDk5fVnqBUF6XUcN97rfVy4DfgCKVU\nN6XUHn71Z2H6qaPC6y65S2vdF9OVdYFSaliocurcIdsBjzdo62MPzKfzsOUxO9fT6n+glLql3nX6\n2IrZufpo79PUWm/TWl+pte6K2ak/rpTKD1VeT6+nUuoQv/vyi9b6OqAK6AFsAv7t/fv10lrvq7U+\nCtNoGUqpdv51NXLNsbhvQpIQwyBEhPcp8QngX0qpLABvRzMSmB3itCuB3Vrrf9YrzwGeVEr5DMh+\nQE9MP/gY4EGlVIZSKgOYALwebbuVUg96O3yA/wG/Y3Z0Qcu9721ed8rb3vaglNoH+AvQIF4QCu8o\n4SZMH/vh3nqylFLTMI3F7iCnvYHpwvF1xGOA15VSmd64S0dv+edADRCs3Ik5wvPnMGCx9zp89+Zk\n77HfAq8AI5VSed7PxiilRmqtqzGnBV/iLT/R20a857b104jJfROSR8q5knyzQTCHzk/7ptQJKcWV\nwG2Y005tmE+T52mtvw5x/GggXynlP09+kdb6VqXU5cBz3viDAYzXWv/o7TQfAL7D7NxWA9eGqL+x\nqZ2+zx4EHlJKzcZ0hb2qtX5fKbUjRPnRfudeAcz3zhyqAUZprTd5XVX1tYO2RWv9uFKqyltPvvea\nlgNDtNY1Sin/oC1a68+UUncCq7yzmr4AxmqtXUqpRzBdbnjrmaC13h2k/O9a66p67XjeG8RfrJTK\nxewDvgdO9Lp2XlZK9QY+99bzA+akAIDLgGeUUuOAHcB53vIlwD3eWUu7Y3nfhOSQcgvclFK34p2x\nANyutQ4naCcIgiDEiJQbMWBOcduBOVf6H8CNyW2OIAhCyyJhhkEp1QdzyDnDtzpSKTUTc8qbAUzU\nWq8BemEOsXdh+qAFQRCEBJKQ4LPXpzodMxjlKzsW6Km1Hojpw5zl/SgPc37zdEy/sCAIgpBAEjVi\nqMZcqHSDX9lQzBEEWuv1Sqm2SqlCrfUb1M12EARBEBJMQgyDd+qa2zvLwUcHYI3fewdmXOH7SOr2\neDyGzZZyMXRBEISUxtZIx5lKwWcbUUxZs9lsOBylTR8YA4qLixKmlWg90bKenmhZSyvRes3RSoZh\n8HX+mzEzWvroDESVl764uKi5bUpJrUTriZb19ETLWlqJ1otWK9Ern23UrZ14B/gbgFLqUGCT1ro8\nwe0RBEEQ6pEQ57w3hfB8zCRgLsx1CoMwV7Ieg7mYbbzWel2oOkJhGIZhhaFZquuJlvX0RMtaWonW\na0qrpKRVcmMMWuuPCb6T1qRE6AuCIAjhY/npPIZhSI4VQRCECLHKrKSoSZWhmZX1RMt6eqJlLa1E\n6zVHS0YMgiAILRAZMcQIeboQrVTSE63Ya/3660ZmzZrOn3/+icfj4aCD+jB+/D/IysoKu84VK95n\n0KChfP+9ZuXK5YwaNSakXjxpjpZs1CMIggC43W5uuul6LrjgYubPf4IFC54C4LHH5kdUz9NPPwHA\nvvuqAKNgJcSVJAiCAKxcuZIlS5Ywc+bM2rLq6mpsNhvPPfccb775JgBDhw7l8ssv54YbbqBDhw58\n/fXXbNmyhXvvvZcPP/yQ++67jyFDhnDBBRfw9NNPM2vWLI477jiGDRvGF198QVFREQ8//DBz5syh\nXbt2nH/++Witue2223jqqadYunQpTzzxBBkZGfTu3Zsbb7yR2bNnBz122rRpfP3113g8Hs477zzO\nOOOMsK9XXEkxQtwSopVKeqIVW61169bTtWv3BtqbN2/ixRcX88gjT2EYBpdffhH9+h1NdbWLXbvK\nufPO+3j55cU899wirrzyn8yfP5+bb/43n3++hupqFw5HKb/99huDBh3P9ddfz4gRf+Ojjz6noqKG\nrKwqHI5Sdu4sx+l0s3HjNqZPn8Hjjz9Hbm4u119/FW+/vTzosT/+uIlly5bz/PMv43K5ePPN1wPa\nbrWUGIIgCE1yzDH5rF+fEbP69t/fzcqVFSE/t9lsuN3uBuXff7+BAw44CLvd9Lz36dOXH34wc332\n7XswAMXFJXz7baidbSE/v4AePXrWHlteXhb0uF9//YUuXbqSm5sLwCGHHMb3328IemyrVq3o2rUb\nkyb9k8GDh3HiiSeH1I8UMQyCIKQkjXXi8WCvvfZm8eLnA8pqamr46af/4Z/f0+l0YrebXhi7PTzD\nlZkZeJxhGPh7clwuF2AaJ3/nuNPpIicnJ+ixAPfeOwut1/Puu2/z1ltvMGPGnLDa02R7Y1JLkrFC\nUior6ImW9fREK3Zaf/3rMB56aDZff72GwYMH4/F4uOOOWezatYsNGzbQrl0+hmGg9Xf84x8T+Oyz\nD2ndOo/i4iJat84jNzertq7i4iLatMknJyeT4uIibDZb7Wc5OZm0aZNPSUk7du7cSXFxEW+9tZ6s\nrAwOOaQ3W7b8Rn6+nYKCAr799ivGjRvHf//73wbH1tTs5v3332fkyJEcdVQ/RowY0eC+RXsf08Iw\npKPvM9F6omU9PdGKvdbdd9/P3Xf/m/vum0VWVib9+h3JNddMYMmSFznnnPMwDIOTTjqVrKwiqqqc\n7N5dicNRyu7dVVRVOXE4StlnH8UZZ5zJ2LETqKlx43CUYhhmP1VcXOSNTVRy2GFHcd11E1m79gv6\n9j0El8tDWZmLMWMmcNFFl2C32+nT52C6dt2XrKyiBsfa7fl8/PFnvPrqa2RlZXPiicNjFmNIi1lJ\n6fiFTbSeaFlPT7SspZVoveYk0bP8OoY+feCzzyx/GYIgCCmD5UcMixcbxrhxcOmlcOutkJOT7BYJ\ngiCkPo2tY7C8YTAMw/jmmzKuuSaHjRvtzJ1bRe/enrhoteRhp2ilnp5oWUsr0Xot2pUEUFJi8MQT\nVVxxRQ1/+1ses2ZlE2Q6siAIghAGaWEYAGw2OPdcF++8U8Hy5Rmcemo+//uf5QdEgiAICSdtDIOP\nrl0NFi+u5LTTnPz1r/k89lgWkk1JEAQhfNLOMADY7TB6tJPXXqtk4cIszjknj82bZfQgCEJotmzZ\nzF/+0o/vvvsmoPzyy0dy++1Tg56zdOlrzJ17PwDLl78HwPffaxYseCjo8atWrWLs2FGMHTuKSy+9\ngIcemovHE5+YaHNIS8PgY999PbzxRgVHHOFm2LB8XnwxU0YPgiCEpHPnPVm27L3a97//voXS0tAB\nXJvNhm9uzzPPPAmETre9Zctm7rrrLqZNu4t58xbw8MOP8/PP/+ONN16N7UXEAMs/RoebdnvtWhg5\nEg44AObNgz32iHfLBEGwEps2bWLmzJn8+OOPLFmyBIBHH32UX3/9laqqKj755BPeeOMN8vLyuOuu\nu1BKAaC1Zo899mDmzJkN0m37c++997LXXntx1lln1Za53W4yMsw8SscffzyDBg2iTZs2jBgxgsmT\nJ3vzMtn597//DcDEiRNZvHgxAGeeeSazZs1i9uzZFBYW8uOPP7Jz507uuOMOevXq1eT1StptoFs3\neOstuOOOHA46KJN7763i+OMjm7rUkqe2iVbq6aWzVtnU28m/5w7sIbKQRoOnoJCKaydROW5CgJbv\nuv74oxy3G7p378mKFR/Ru/eBvPvu+5x77gUsX/4eHg9s315Gbq6LykonpaVVAFRWOjn11LN5+OGH\nG6Tb9mf9+u85/vjjQ97Hmhonffv2o3//I7n99qmccMJwhgwZxooV73PvvTMZNWoMLpen9nyXy8Mf\nf5RTXe3CMCq5++5ZrF69ihkz7uf22++RHdzCJTcXpk6t5qGHqpg8OZerrsqhkVGiIAhJIm/e7Jga\nBQB7eRl582Y3edygQUNZtuxdtm3bSlFREXl5ed5PmueHttttOJ1OwNzjYcKEMYwbdxk33HB17TG9\nevUGYMOG9RxyyGGAmXpb6+Cpt33069cfgN69D2Ljxl+a1U5oYYbBx4ABblasKMdmg8GDC1i9OnY5\n3wVBaD6VYyfgKSiMaZ2egkIqx04I+bnPK92v3xGsXfsZH3ywnGOPHeJ3RPDU16HYsmUzf//7aK68\n8go2bFhP9+77sG7dOsCMZcye/RC33HIb27dvrz3Ht7e0mX7bDEo7nS5vmu9Az49/G9xuT+01hHYQ\nhU9auJKiobAQZsyo5t13XYwdm8tpp7mYPLma2ocDQRCSRuW4CQEun0SSmZmJUvvx+uuvMG/eI2zY\nsB6AwsICtm930KlTZ775Zh1K7RdwnscTOKLo1Kkzc+Y8XPu+ffv2TJx4BX379qdLl64AfPbZJ+QE\nyePTq9cBfP75GoYNO4Evv1zL/vv3pqCggD/+2AHAjh3b2bTpt9rj//vfLxgyZBjffPNfunffp/n3\noNk1xAGlVEfgc6CL1jquc7mOO84cPVx3XS7HHZfPnDlVHHxw6k0fEwQhvvjHYgcPHsqff/5Jfn5B\n7WcjRpzN9ddfRbdue9Gjxz5+55k/9913P0aPvpixYycQLK67xx7FzJw5k3/96zbcbhcul4u99+7B\nlCn/9tVUe+yoUVdw553/4rXXXiYrK4sbbriFoqIiDj+8P5ddNpKePfdlv/32rz2+urqG6667Codj\nKzfffFvz70Wza4gDSql7gC7ABVrrRiPEsUq7bRiwZEkmN92Uw8UXO7nqqhq8o7paJJApWqmkJ1rW\n0oqX3u23T2Xw4KEMGHB0RFqWypWklPo/4EWgKpG6NhuMGOHi/fcrWLs2g7/+NR+tU+72CIIgxJ2E\nuZKUUn2AJcAMrfVcb9lM4AjMcP9ErfUaYACwL3AwcA7wbKLaCNCpk8HChZU8+WQWp52Wx8SJNYwe\n7cQuNkIQhBRk8uRbY15nQro7pVQ+MB1426/sWKCn1nogMAqYBaC1nqC1ngp8ASxMRPvqY7PBRRc5\nWbq0gtdfz2TEiDw2bkxJr5sgCELMSdRzcDVwCrDVr2wo5ggCrfV6oK1SqnZ+mtb60ngHnpuie3eD\nV16pZOhQNyeckM+jjyIpNQRBSHsS+hislLoV2K61nquUegh4Q2v9qvezlcAorfX3kdQZbkqM5rJu\nHVx4IXTtCvPnQ8eOiVAVBEGID1ZJiWEjyqWFiZhV0LEjfPppETfcUE2fPlnceWc1w4c3vcilOaTr\n7Ix01Uq0nmhZSyvRes3RSoZh8HX+mwH/5+7OwJZoKiwuLmpum8Jmxowczj4bRo7MY9kymD0b2raN\nn14ir020rKcnWtbSSrRetFqJNgz+67rfAaYCDyulDgU2aa3Lo6k00RZ4n33g3XfhtttyOPDATGbO\nrGLw4NjvJWqVpwvRSo6eaFlLK9F6zdFKSIxBKXUkMB8oAVzADmAQcC1wDOAGxmut10Vad6JiDKF4\n7z249FI45RS45x4oKEhmawRBEMKjsRiD5edgxmrlcziEssC7dsGNN+by2WcZzJ5dSf/+sZlMZZWn\nC9FKjp5oWUsr0XrNWfmcFoYh2W3wsWQJjB0Ll1wCU6ZAkNxYgiAIKYGMGGJEONZ+2zYb11yTw8aN\ndubOraJ37+hHD6n0dCFaqacnWtbSSrSejBhSDMOAJ5+Ea66Bq6+Ga6+FzFSaGCwIQotHRgwxIlJr\n/9tvNiZOzKWy0sacOZX06BGZDUulpwvRSj090bKWVqL10iq7ajrRpYvBCy9UcsYZTk4+OZ9HH82S\nlBqCIKQ8aTFiSHYbwmH9ehg50lwMt2ABdOmS7BYJgtCSEVdSjGjuMNDlglmzsnnkkSz+9a9qzjzT\n1ej+rKk07BSt1NMTLWtpJVpPXEkWITMTrr66hoULK5k1K5tRo3LZvt3ytlkQhDRDDEMS6NPHwzvv\nVNCtm8Hgwfm89VZGspskCIJQi+UfV60SYwjFypVw8cUweDDMnAmtWiW7RYIgtAQkxhAj4uUfLCuD\nW2/NYcWKTGbNquKoo9xx1QuGaFlPT7SspZVoPYkxWJzCQpg+vZq77qpi7Nhcbr45h8rKZLdKEISW\nihiGFGLYMDcrVpSzdauNYcPyWbMm2S0SBKElkhaupGS3IR4sXAgTJ5pJ+W68EbKykt0iQRDSCYkx\nxIhE+yOdziIuvNDFjh025sypYr/9YpPOOxip5Pu0qlai9UTLWlqJ1pMYQ5rSuTM891wlF17o5PTT\n85g3LwtP/GyDIAgCIIYh5bHZYORIJ0uXVrB0aSYjRuSxcaPlB3qCIKQwYhgsQvfuBi+/XMlxx7k4\n4YR8nnlGEvIJghAfxDBYiIwMGD/eyUsvVbJgQRYXXSQpNQRBiD1iGCxIr14e3nyzgp49PQwenM/7\n70tKDUEQYoflHzfTdbpquKxYARddBMOHw913Q35+slskCIIVkOmqMSJVp7bt2gXXX5/LunV25s2r\nok+fyKcupdI0OqtqJVpPtKyllWg9ma7awmndGh58sIp//rOGc8/N4/77s3G7k90qQRCsihiGNGLE\nCBfvvFPBihUZnH66TGsVBCE6xDCkGV26GCxeXMmJJ5rTWhctypRprYIgRIQYhjTEbjentb7wQiVz\n5mQzenQuO3cmu1WCIFiFlDMMSqmjlFJPKqUWKqUOS3Z7rMyBB3p4++0KOnQwGDy4gJUrZVqrIAhN\nk3KGAdgFXA5MBwYltynWJy8Ppk2rZubMKiZMyOWWW3Koqkp2qwRBSGUiMgxKqTZKqbhGNLXWXwND\ngDuBJfHUakkMHuxm+fJyfvvNxgkn5PPtt6n4TCAIQioQsndQSvVRSr3k9/5ZYDOwWSl1RKRC3vp+\nVEqN9yubqZT6UCm1Wil1uLfscK31m8DZwFWR6gihadcOFiyoYuzYGs48M4/58yXfkiAIDWnssXE2\n8ASAUuoYYADQAfNp/vZIRJRS+Ziuobf9yo4FemqtBwKjgFnej9orpR4C7gdej0RHaBqbDc4918XS\npRUsXpzFBRfkSb4lQRACyGzkM5vW+hXv78OBhVrrUuA7pVSkOtXAKcANfmVD8bqKtNbrlVJtlVKF\nWuu38TMg4VBcXBRpe6ImkVrx1Csuho8/hltugWHDCnn8cTjuuPS8j+nyNxMt62slWi9arcYMg8vv\n9yHAZL/3EU1v0Vq7AXc9g9IB8N/V2AF0Ar6PpG4gZZaYW1Hv6qvh8MMzuOSSfE4/vYZJk6rJzo6r\nZEqlBbCynmhZSyvRes3RaswwVCqlTgNaA12B5QBKqQOIz2wmGxCVx9sKFjiV9c48E449Fi69NJvT\nTsvmuedg333jqyl/M9FqiVqJ1ovHiGEiMA9oC/yf1rrGGyv4ADgnKjUTX+e/GejoV94Z2BJNhVaw\nwKmuV1xcxCOPlPLoo1kMGJDNrbdWc845LkLnX2yelvzNRKulaSVarzlaEf/bK6Xaaq2jWkerlJoC\nOLTWc5VSA4CpWuvjlVKHAvdprY+JtM6WnnY7HqxbB+edBwcdBA8+aCbpEwQhvYgq7bZSapzW+oEg\n5W2BOVrr88NtgFLqSGA+UIIZu9iBuXjtWuAYwA2M11qvC7dOH5J2Oz5alZVw6605LFuWybx5lfTr\nF3kq73C14kkitCoqzNleeXnpd22iZV295qTdbswwvAbkAJdorTd5y07FnEY6X2sd0ZTVeCEjhvjy\n8sswZgxMmACTJpnbiwqB9OwJJSXw4Yehj1mxAgYPRtaNCClD1Bv1KKX+D5gK3AUcC3QHRmmtN8S0\nhc1ARgzx19q82cb48bmAue9Dhw7N691S5bpiRUlJEfn5Bj//XBZSb8GCLCZNymXbtti1Jd3uY7pr\nJVovLiMGH0qpIcA7wHrgCK11eTSNjBdGYaFBWVmymyEEo7AQpkyBf/4z2S2JKzYb5Oaa7rdQPPAA\njB8vIwYhdWhsxBByVpJSKgO4HhgJDAMOBz5VSo3VWq+MeSujRYxC6lJWhufWKewYOTqgOJWemmJD\nER6PgcMResRQWpoF5Ma0Lel3H9NbK9F6zdFqbD3Cx0BPoJ/WeoXW+l7MaaozlVKzo1KLB4WFyW6B\n0Aj28pZhuD2xi80LQtJpLPh8utb65SDl2cAUrfXkIKclHAk+J4eaGrj+ejM4/cILcPjh9Q7wH6Wm\n+Z/IZjNfjRmHefNg3Ljgt8LphGeegYsvjlsTBaEBUQefrYAEn5Or9dprmVx3XQ633VbN3/5Wl0Wl\nuKRV7e+ObbtjohUNiQo+A2zbVhpS7/HHs7juuuDB588+s3PyyQURB6bT7T6mu1ai9ZoTfG5s5bMg\nNMnw4S722cfDyJF5fPedncmTa2RKqyBYHNmtRWg2BxxgbiG6dm0GI0fmUZq4B7CUZNMmGz/8EPgw\nFo/UIoIQL8L6uiqlWgPt/I/XWv8vXo2KBIkxpA5OJ0ycaC7m+va7lhVjgLrL7NkTfvwx8LIffthc\nKBjsVnz0EQwcmPa3SUgxopqu6kMpNQu4BNhe76PuzWxXzEgVn52V9WKlNXUqPPpoVsDOG/XrteJ1\nNYbNVohh2HA4zBhDZaUHsAfoNjZddedOO1AQcTvT7T6mu1ai9eKVdtvHYKBYay1byAthcemlzsAt\nmdIcmy3waT9St5G4mYRUI5wYw/eYO7AJQlQ88URWspsQV+p37JF29OJCElKNcEYMm4CVSqlVmFlQ\nAQyt9S3xa5aQTjzwQDabNtmYNKkmLZ+OwzEM6XjdQvoSTq6kKd5ffc81NkzDMDVejYoECT6nKJH0\nhBbPqZSVBS5X3ZN/9+7w88+BI4H582H06OCjg48/hgEDGn723XdmNtvIt1gXhKZpVvBZaz1FKVUI\n7IdpHDakWiI9KwRzUl0v1lrtCwrDT4cRIqdSLEjEPbTbC4G64LPH0zD4XFYWefD5gAOKyMsz+OWX\n4PfRyt+PlqiVaL145UoCzNQYmHGGB4GHAa2U+mtUakKLoeLaSXgKws9jZeWcSs11EzU25pXxsJAM\nwgk+Xwf00Vr301ofDvQDbo5vswSrUzluAjt+2oxj2+6A17atu/n3NIO9urn5cLV1jYE/kRiGV15p\nOEj3df5XX53D//4nwQgh+YRjGKq11g7fG631ZkCmrgpRYbPBjTfCNddUc/rpecluTkyIxDBcfnng\nNWtt58wz8wF4+ulsli41DUdLXz0uJJdwZiWVK6X+CbyLGXg+AZCvrdAszj3XRUmJAecmuyWJIZTx\nWLUqg+rqhh/us4+ZmE9cSUIyCMcwjAL+BVyAGXz+2FuWMhQXF6WlVqL1Eq11zjkEGIY2bYrI8lvy\n8Oef5ujis8/g9tth2LDoteKJ3R6oY/cW+Ou2qks2G1BefzuRwsJciotz/eq2Ndr+dP5+pKNWovWi\n1QpnVtJWYExUtScIK0T5U10vWVrFfuVZ2YFPzm2AuYAzp5DbTruVzp9dQXFxZI/QibmupmcllZZm\nAqYbKdhspbr3VTgcTsD3D23uDBeMlvD9SCetROvFZVaSUmqR9+dvSqlf6702RtlWQQggnJlLWdVl\nTHZOZd60SwtLAAAgAElEQVS81FxBXd9NFEv3jyyME5JBY8HnK70/jwb+4vc6Gjgmzu0SWgjhTmvN\ndZbx3HNZVFYmoFEREs/Ou6JCLIOQeEIaBq31795fbUBXrfXPwPHArfjGxILQTEJNa/W9/Onb18Or\nr1pzbyl58hesRDjTVR8DapRShwCXAYuB2XFtlSAE4cILnTz9dPLdSdXV8NtvdT19Ijr9r7+WPbWE\nxBHOt83QWn8CjADmaK3fiHObUEoNUEo9opR6XCl1aLz1BGtw/PEufvrJjtbJ7STvuy+bQw+tc3/Z\nw2iOv/E444w8fvopMmsyZEgBGzaEd90lJUXU1NS937ULfv1VhixC+ITzTStQSvUDzgTeVErlAG3j\n2yzKgHHATMy4hiCQlQXnnJP8UcOffzZv287VqzP58MPIXWJOZ8OyBx/M4sorcxs99vLL8zjssPDT\nkwhCOIZhOjAfeNi7AnoK8Gw8G6W1Xoc5h28c8EQ8tQTrUFzSilmzc5n3YA7FJa0avNp370zeA/H3\ncoYyBG538PLgdZhTl5o7g+mJJ7JZuLChofRv486dMloQIqNJw6C1fh44RGt9n1IqF5intZ4ejZhS\nqo9S6kel1Hi/splKqQ+VUquVUod7y1oDdwGTtNZ/RqMlpAeRJuLLv+eOBuVr19opj2E+4Ib7L5i9\n+6pVGbETCcKQIQW4XHGVEAQgvOyqk4GJSql84HPgRaXUbZEKec+fDrztV3Ys0FNrPRBzNfUs70fX\nAa2Am5VSIyLVEtKHWGRpPemkAubOzY5ZmzyewPc+QxFJp22zwXXX5QSdjtpYIr3OnYtYtqyhAXr+\n+UDX1PTp2Tz1VPID9YI1CcfRORwYCIwEXtNaX6+UWh6FVjVwCoG7AQ8FlgBordcrpdoqpQq11jdG\nUrEVlphbQS8ltW6dbL78qKqCrl3NDW722cdb6PcY7193mddOZGXlUFyc05wm15KTE6jjCz63bp3v\nbUrjKTEAioryePxxGDkysLywMJcjjwwsq3+vdu7Mp9i7ZDwjw9SaMCGPv/+97pjZs3Po3BmuvjqX\nzMzg9URKSn4/LKaVaL24pcQAnFprw7sHw/3esojHzFprN+BWgdtRdQDW+L13AJ0w938IGyssMU91\nPatpXXBBNlOn2pg+3dyO3D+1hn/dP/5o/mNs2VKDwxH+1uU1NdClSxHbtjVsZ3l5DpCNzQbbtpVi\nGAWAnd27K4D8oCkxVqwwz/FRWloJ5FFZ6QTqnuzLyqrwT5FRdz11/+C7d5tpM4qLi3C7Ta3A6zaP\n9Xg8OBzluFz5QAavvlrBgAERBEL8sNr3IxW1Eq3XHK1wDMOfSqmlQBfgI6XUcOr2fo41Nuq2EA0b\nK1hgK+hZSevmm80tL6dMyaZHj9B1v/QS5OZCVVU2xcXhu5N2e9fW1U/sB3UjBp9Whvcxqf6I4aij\nili/3lz38PjjgXWUlpprRHNzAysvLGw4w6j+vfJPtOcbMQQ7zm63U1xcVDtimDMnn1NPbXit4WKl\n70eqaiVaL54jhvOA44DV3pFDFXBRVGp1+Dr/zUBHv/LOwJZIK7OCBU51PStqXXxxNtddZ2fevKqQ\nI4avvipi4EAXW7eCwxF+Po0//gAoYvPmUvLzAz+rqKh7+nc4Go4YfE/x338Pa9aUccQRDWMkN91k\n/qw/YnjuOTf1B+SNjRh2764bMfzwQ6nXZWUeu3kzHH20C6fTBmRQXe2K6B74Y8XvR6ppJVovLiMG\npdRftdZLqUuMPFwp5XPkdgUejUrRHBX46nkHmAo87F3Itima/aStYIGtoGc1rSlToFcv+PbbLI4N\nUfdXX8Hw4ZksWRKZpi+Q3LZtUYP4QLbfwKO4uKg2vNG6dT6//AKbN9c9xU+c2HjgPCcncMTwxRcN\nvbT12z1pUi7nnptLq1Z1Kb4B9t23qMGU2dWr6/7Fs7MzefPNIsaOJapZWlb7fqSiVqL14jFiOAhY\nirnALJh7JyLDoJQ6EnM9RAngUkqNAQYBa5VSqzHdU+ND1xAaK1jgVNezqtbUqZmMGZPNer8yX90u\nF/z3v0XcdFM5Cxbk4nBUhF3v77/bgEK2bi2lul5ooqIiF99T/rZtpeTlmSOG7dsr+PjjwOHFxx83\nrlN/xBCM+iMGgO7doaQEMjLqRgy+9tQ/1kdNjYtlyzxUVGRHfP+t+v1IJa1E68UrxvAWgNb6YgCl\n1B5a6+1RqZj1fIxpbOozKdo6fVjBAltBz4pal1wCS5cCGxrW/cUX0K0b9O1bQHl5ZJq7dpk/27Qp\nqp0B5MN/xNC2rRmDOOAAyM/PD7o6uTHqxxiCEard27ZB586BM847dQp9jdnZmeTmNl5nNO2IB+mq\nlWi9eIwY7gMG+71fBAyJSiXOWMECp7qelbXuvBMztaMXX92vvJLF0UfnUl1dyq5dhSE3vAnG77/b\ngQK2bi2j/oDZf8SwdWspTmcBubkGO3bU0KpVZImHq6qiGzH42Lw5fK3qaheVlR5ARgzJ0Eq0Xlw2\n6gmCrKsXUpLWrRuWeTywaFEWZ50FBQXm2odIFqD5ktAFO8d/gZvHY76ys4PnMooF8U4a+MADWdxx\nR+wWAArWx5rJ7ethhaGZFfTSReu224ooL4d27WDoULDZiigqgtzcItqGkf6xrIxal0ubNoUNXEn+\n2VTbtTODzwUFkJ+fF3FCvfrB52D85z8FkVUaglWrMjngAPN33/0fNgzef98smzGj8QWA6fL9SKZW\novXiOV015bHC0CzV9ayuFbB3dFY1BQXw6KM12GymVmFhAT/9VIHL1fQymc6dC+nd2wNksHVrGQUF\ngeeUlQUGn53OAmw2D3/84SI/v+E6hMYw1302vl60rKwaiM2q7YqKGvxdSe+/X9dxrF1bxp57GrXr\nMvyx+vcjFbQSrRev4PNApdSv/jp+7w2tdbeoFAUhztxwQ02DsqIig9LS8NZPulw2vv3WHBa43Q3P\nMevB+7n5ysszonIlrV0b38R7jXHXXYHuo8MPL+Tee6sYOTJOPjHBMjRmGPZLWCuaiRWGZlbQSxet\n+nUXF5supMzMggZuoVCYBgFat254jv9agXbtivB4oHVre1gzjKIhPz82owWADRtMY1BZWcT0IDmS\nPZ5cXK5cHnwQpk4N/Cxdvh/J1Eq0XsxdSd49ni2BFYZmqa5nda1QK599Wnl5efz6aw0ORzjZXIow\nDAOw4XCU43AEplMtKzNzDwFs3VqGy1UAuNi5002nTpG5ksKhtDR2rqRPPzV/7rVXaK3HHzf4179y\n+fvfG97HRJCuWonWS9SsJEGwLHWupPAwDPPY+im2gYBtMz0ec+ZSbq7B1Km55pqKGNPczXyi5Zpr\nYjdSEaxFWgSfrTA0s4JeumgFcyUVF4NhZIXtSvLRqlVDV5J/LKFt20Lcbmjb1nTRfPFFNC1unFi6\nkpqisDCHnTvN3599NpsnnjCva9MmaN++qHa2VrxJl+9isvXiOitJKXUM0A/wAB9rrT+KSi1OWGFo\nlup6VtcK6LuDzBmdD/AIMKbpugIe0PuZu8hVXDuJynETAKisNFNgADgcZbjdBXg8NUBORNt7hkss\nXUlNMWmSgcdj3j+XC445xsXixZV06VLE6NE1TJsWfuryaLH6dzFV9OLqSlJK/Qu4GzMLahdglndX\nN0FIGSLZ5S1S6m8Z6u9Kcrt9rqS4ybN4ceJ2YvMZBR+rVtU9O27fLmtcWwrhxBiGAAO11tdqrf8J\nDMDc1U0QUoZItwCNFP8tQ6uq6k9XtfHll2YwOh7xgP/9T0KBQmIJ5xtn01rXhuC01i7it1GPIERF\n5bgJ7PhpM45tuwNeGAaObbu5b2Yl/3deTYPP67/0ht3YMGpfwag/YrDZDIYPNwMPwYLV6cJLL2XV\nJhcU0ptwYgyfK6VeA97FzJd0HIHbcSYdKwRzrKCXzlp77ml26MXFjbtlqqoarwcC8ycVFhaSmQkH\nHmgmz0tHw/Dzz3V/q+efL+LGiHZkj450/S4mWi+eweeJwDlAf8y43JPAC1GpxQkrBHNSXS/dtQwj\ng+3bsxvsYNarVwFPPFFJ//5mj/7TT2ZW1WDU31MZYOvWcjIy8qmsrAAK4hJ8Tjb9+9f9Xl5ejcPR\ncGV5LEnX72Ki9eKVEsPHZK31NOC5qBQEIQUoKjIoK2sYPN2xw86XX2bUGgaHw0ZJiYdt28Lz69fU\nQEZG3T7Q6Thi8OeOO3K46qoa/vtfO5Mn5/D669FtFSqkNuEYhl5KqX211t/HvTWCECfatze8u7I1\nxD9gvG2bjb32Mti2reFxxSXmHp8BkYeToQxgqLf8p9i0N6UpgaHAJ97fo6H+FGAhtQjnsagP8K1S\naqtS6lfva2O8GyYIsWTvvQ0qK2HLlsanXJqGoe6x35kbv5lOLZn6U4CF1CIcwzAc6Akcgbn/89HA\nMfFslCDEGpsN+vXz8OmnddlMg00t3bbNTrdupmHIyzP44tQb4zoNtiXjPwVYSC3CcSUVABdqrW8A\nUEo9Dtwbz0ZFihWi/FbQS3etIUNg3bpMLrvMLK/2LuLNzs6luNhcobZ7Nxx+uFm+xx42fj7zBvo/\nfwM2G7RqBT/8ACV+7pOXXoK//91MhdGhg/naujVRV5Z8rr4aZsww70nY1+23Mj3U9yBdv4uJ1ovn\nrKS5wC1+7xd4y46NSjEOWCHKn+p6LUHrgAMyeOaZHByOCgD++AOgiK1b62babNmSR05ODUcemU1u\nLuzc6cThcAFFuN0Gv/1WTk5OAdXVZue2fXslNlsOpaXlQFHAVNYePTxpvzhtxgzzp2F4cDjKwzon\nVCbc2s/T9LuYaL14Z1fN0Fqv9L3RWq+KSkkQkkzfvm5++MFOmdeD4ZulVFFR9wRbVgaFhfDqq5W0\na2cETD81DLjggryAMt+spCzv8ohqv1RCGRlJSouaBByO9DaALY1wRgy7lVJjgRWYSehPBBJnYgUh\nRuTmwlFHuVm0KItLL3VSXm4ahHK/B93SUhuFhWaHnpERuCmPxwPffhu445rTaQuYrlrpN3vTLn2l\nYFHC+epeAhwOLAKexQxEXxLPRglCvJg0qZp7783mm2/s7N7tMwz+IwZb7R7PmZl1O7lBXY6kSy6p\nW+BVUwOZmUatEfAPaGeGeOwaONAV/AOLM3my7N+QLjQ5YtBabwNGJaAtghB3DjzQwx13VHPWWXkM\nGuQmK8ugoqLu8/Jy05UEpiuo/krmDh083HxzNY89Zu5T4HSaIwuAadOquOmmujSr++/v4Ztvkren\nc6J55JFsbr89/mm5hfgT0jAopRZprc9WSv1Gwx3UDa11t3g1SinVCbgPeEdrvSBeOkLL5LTTXLRv\nbzBtWg6XXOLkm2/qBs5lZXWuJLudBoahVSsjwEXkizEA7NpVN7r47rsyFi3KTGjKbEGIFY2NGHxL\nEo9OREPq4QYeBvZOgrbQAjj6aDdvvVXB77/bGDw4H8Mwk+O5XJBn5sMjI6NhiotWrQJdRDU1tlrD\ncMwxbu65Bw480E379kaw/YIEwRI0Zhj2U0rth5lRFRqOGn6OS4sw3VdKqfR0xAopRceOBsXFBv/5\nTwYHHuimoKBumn394DOYI4YMP+9QTU3djKQjjnBz5ZVw2GFmDCLU3gxiMIRUpzHDsAJYD3xKQ6MA\nsDJIWaMopfoAS4AZWuu53rKZmKuqDWCi1tqX0lv+fYSEMHq0k9mzs5k+varWjQShDYO/K6my0kZ2\ndt0599+Pd91Dw3MHDXKxYkVabLMupDmNfUuPBi7ETIPxLvC01npttEJKqXxgOvC2X9mxQE+t9UCl\n1P7Ao8BApdQQYCzQWim1Q2v9crS6gtAUZ5/tZPr0bP7zn4wAwxAqxuD/xF9dXTdiqE/9bTIXLaqk\npKRIRgxCyhPSMGitPwQ+VEplAX8FblBK9QReBJ7RWv8coVY1cApwg1/ZUMwRBFrr9UqptkqpQq31\nMmBZhPULQlRkZ8Nll9XwwAPZtTOSwJyVVL9zb9Uq8NyqKvP8YDSWgnvx4grOPDM/yhYLQnwJZ7qq\nE3gFeEUpdSIwE7gK2CMSIa21G3ArpfyLOxC4G5wD6ARElOLbCrlHrKDXkrXOOw+mToXjjqs7vqjI\nXBRXXFw3P79z52yKi/0tgWlM/DV8v+fUm9bvK8/KymTEiEwOPRQ+/zzKi0pRIv27Sq6k1NRq0jAo\npbpjupTOweywbwJej0qtaWwEj2cIQlzxPa/472lsLnALPK5168D3lZWhRwyh9kf2uZJkZbSQqjS2\njuFyTIOQATwNHKO13hEjXV/nvxno6FfeGdgSaWVWSEqV6nqiBVDExo11yeCqqrJxu/Em2DOfvGy2\nytqkegC7drlo187A4ahqoDdoUAYzZtS5i8zyIpxOFw5HJR5PPua/V/oQzr2WJHqpf22NjRgewhwh\nbAbOBs72cwMZWushUSmaowKf4/YdYCrwsFLqUGCT1jq8FI1+WGFoZgW9lq717ruQm2uvPb5VK3NE\n4O9K6tYtj2K/ns3tzqR1aygurotA+84fPjx4O7KzMykuLmrgagrGt9/CAQeE1fyUQFxJqaUXD1dS\nD+9PgxhMHVVKHQnMx9wM0KWUGgMMAtYqpVZjLmobH03dVrDAqa4nWtC3r/nT4TB/VlVlU1pqjhhs\ntkIMw4ZhVOBwuPGNGMrK3LjdbhyO6hB6df+YvhFDTY05YnC78/D9C15zTTXdu3tYtCiLDz7I5Jln\nKigqgj32cAfUker8+mspubmNHyMjhtS/NstPnDOMUMuIBKF53H23aSTuuceMBxgGfP019O5dFyfo\n0wcGD4b77gteh//UVMMw3w8dCu+9B8ccA6u8SezXroVDD607Z9UqOProhnWkOlVVDYPuDah/U4Sk\nYLOF/malxWobK1jgVNcTrYZUVmZRWmrH4ajGMMyndsMow+Ew8D3Fl5d7cLlcEY0YfDEGl6tuxPDn\nn+U4HJ7ac/780zcyCawj1XE4Sps0DDJiSP1rk3kRghCCYLmS2rYNfMI11zFE9tSbzrOSvvvOHrAn\nhWBN0mLEYIVgjhX0RCuQ1q3Nqaj+6xb23DOwrupqO23a5AQEqIPpffxxXXlhYcPgc5s2BQFB7bZt\n8wPeW4XhwwuYPh3GhxktlOBzamqlhWGwwtAs1fVEqyEVFVmUlZmupC5dCnjsscoAd495jIHTWVO7\nZ3QoV1KPHqXeoHYRHo8Th6MqwJW0c2egK2nnTmu6kvbay83ixQZnn11Jebm5QPCTTzLo29dMUAji\nSrLCtaWFYRCEeODvSiors9GlS53LaMGCSl54IZN3382M2JXky63k70ryj8F27eqhR49G8mmkME89\nVclpp+Vz0kn55OebmWtfeimLI490cdppLkaNcia7iUJLwBCEOPHII4ZxySWGUVNjGBkZhuF2B35+\n7bWGAYYxZ07oOsAw+vQJfH/eeebvJ55ovgfDWLOm8Tqs8vrjD/N+3XKL+b5bt8DPG1yQkDQa61fT\nYsRghaFZquuJVkMqKjIpL89k7dpqOnbMZ8eOwLWX+flZQC5VVVU4HM6geh99ZKN9e6N2bQQU4XKZ\nriSns86V9Mcf/q6k+ljHlbR9eykulxlj6N07g127bIwenVf7+ebNpXT2O15cSamplRaGQRDigS/t\n9sqVmRx1lLvB5yUl5kNXbm7oh6999mn4mc89FcqVlA7YbDB4sBuPBzZurGbaNDPSvnhxZu3WkELq\nkhaGwQpRfivoiVYgbdua8YBPPsnijDMC014AHHSQ+bNDh8A0GU3p5eZmUVycFbBCuP6sJKuyxx5F\ntG0bWHbbbdC1K5SVwZVX5gUYBpmVlJpaaWEYrDA0S3U90WpIRUUmpaWZrF6dydSp5d6FbXVUV9uB\nAqqr62YQNaU3cWI2J53kwuHw4HTmAqaxCVzgVh/ruZLqc8YZZt6p++8vgI115cuXl5Ofb9CjR929\ntcr3I9X1xJUkCHEgL8/gq68yaNvWoEOHhr6ePK/rvKncQP7ceGNN7e/+riQrpb1ojMY2J8rLgzVr\nys1saV6GDCmgWzePWS6kDGm49lIQYkNeHvz2m51DD20YX4C6Fc+NxRgaIx0NQzRs3GjH4bBx6aW5\njB4dgZUV4oYYBkEIQX6+2eHvtVfwx2DfyuVIRgyhSBfDEOl1lJSY93b8+Fxefz2Ll1/OYtkyeOWV\nTAzDXBwnJJ60cCVZIZhjBT3RCmTPPc2fPXsGprzw4esEO3cuiCj47MN/57f27cMLPt98sxnMbQ7n\nngsLFzavjlCUlBTRpk34x2/damfjRthrr7quaOhQgDz228/c0+KHH6BHj/gZT/mfbkhaGAYrBHNS\nXU+0GlJVZQMKKSjw7doWSFkZQBEVFWW1gelI9Kqq6oLPgSkx6lP3z33GGWXcdlth+BcRhNNPr2Dh\nwvymD4yCHTtKcTaxuLl+SgwzVmNeY+/ebnr2zODrrz0cc4zp0OjZE2bOrOL882O/alr+p4MjriRB\nCIEvuNyxY/AO25faIpyd2Joi3KfhVM/IGu16jCVLKvjyyzLef7+Cl1+Gl1+uAOAvfzEN8qpVGWza\nZOOMM/L49Vcbd9+dHXT2kxAb0mLEIAjxoKDA7OU6dgze2/lcQb5YRKTsv7+HpUvN38M1DLFwp6Ri\nPKP+AsIOHQwefLCSY491s3p1BpddlseKFRn88Yedww4zR0ynneZiv/2smVMq1Unx5w9BSB75+XDW\nWc7aFc71sdnMJ9uiKF3GV15ZN3W1ffvwjEuwTj0jo+7cO++siq4xKciIES7atzc45RQXH31Uxl57\nGcyYUXd9f/lLAd99J11YJFRXh3ec3FVBCIHdDnPnVpHRyMSYgQODT2UNB18nn5ERfJ1EY+f4s2VL\nWe3vjbXVqtjtZmqRt9+u4IILAuMMxx5bwLXX5vDaa5ns3p2kBlqAV17JZNCgfHr2LGTy5JwmDaoY\nBkFIEsFyJkXCvvs2LAvHx19f77jjrOWs//nnUl57rYKpU6tYurScHj08PPtsFoceWsgVV+TywQcZ\njS60a2ls3mzjuutymTq1mjVrysnJgQsvzGv0nBT0NkZGU+ljBSFVcTrNOEV2duNDfN8oYeBAWL7c\nDHbvsQcccACsXGkaA98xDzwA48YFnt+rF/z4I9R4PVfvvQfDhtV9ftZZ8MILsbmmnTtperqq/7An\nhv++27fDs8/CY4/BH3/AeefBgAHQrx907tz0+enA5s3mzoO+TZEALrgAunWD228PPNZmCx1tSovg\nsxWmf6W6nmglS68Im83A4Shr9BiAl18uZdcu873H48EwzEd/U888prS0CghccdemjYv8/Axqasx+\noLKyAqibrlpd7cQ3bdbHq69WcOqpkU9pdTgin67a4PNm/M3OO898rVtn5403Mpk1K4Mvv7STlQVH\nHunmooucHHWUu9Y2pf73IzwMA+6/P5vZs7NxOqG42OCww+x06lTDypWZrFxZ7pf6vWnSwjAIgpVp\napbQSSc5efPNwI7bMIKf5F/X22+Xc8IJBd7j68r79286LnLkkdHHTiKhuKRV8PJm1jvE+wrgFe8r\nxlpN4SkopOLaSVSOi1/C8WXLMli4MIvVq8spLjbYuNHG998X8tJLNhYsqAwYQYSDxBgEIck0ZRhm\nzari008bG1E0rMtmMzjkENPRXt9bU19vwIBAIxAqN1Ss8BQ0b4Ge1bCXl5F/zx1x1bj77hxuvLGa\njh0NMjKge3eD88+HBx+s4uCDIw+4iGEQhCTTlGFo3Rr23ruud587t5L776+Mqq5g7L13ZB3HPvs0\nL7Jbce2kFmkc4sUPP9jYvNnGySfHbhJByrmSlFL9gdGYRmuK1npjE6cIQovirLPMDmD+/IafBTMM\nNlvjM58OP9zNxRfX0Levh6uuym3SuKxcWc6ee0af76dy3IRG3SrJikFt3GhjxYpMli/P4D//yaRr\nVw/HHutm8GAXRx3ljmoqcChXWSx5/fUsTj7ZFdNV8SlnGIAxwBVAF+Ay4JbkNkcQ4ku0K5H9XUTv\nvVfOsGEFtauw/WMQTU38ad0a7r67OuxMpllZoT+z8hzBbt0MRo50MnKkE5cLPv/czjvvZDJlSg4b\nN9r5619dXHhhDfvv78HjgVatmreKvLoaNmyws25dBt9+a0drO7m5sOeeHvbc0+Cww9z07+8ms4le\n+vXXM5kyJcyVa2GSioYhS2vtVEr9DnRIdmMEIZ706uVmjz2a35v26ePhgw/KUcrD2LGhj3vzzdAb\n4thskbfj9dfLOeWUAvbc08O0adURZVZNZTIzoX9/D/371zB5cg3ffWfn3XczueaaXH75xY7dbh5z\n4IFu+vTxcM45Tnr1atzF5hs9+Ae7uwBDm9nWrwBGhNCMss6EGQalVB9gCTBDaz3XWzYTOAIwgIla\n6zVAhVIqB/OeiRtJSGvefbciZrmLGuuYfE/yhx0W+pi6wHX4mv37m/WtWVOelquuwXTD9e7toXfv\nGv7xj7o0Jtu22fj6azuffprB3/6WR7duBj16eOja1UPbtgYeD1yfXUhOTfziC/EiIcFnpVQ+MB14\n26/sWKCn1nogMAqY5f3oIeAB4CbgsUS0TxCSRXZ2466ZxujaNXj5woUVLFxYEVAWzMVzyCHBZx89\n8kjwwLY/I0fWNHlMulNSYjBkiJsbbqhhzZpybrmlmqOPdmGzwS+/2Nm82c7SfjdRlWW9QHuiRgzV\nwCnADX5lQzFHEGit1yul2iqlCrXWX2AaCkEQGmHBArjlloZPo0OGNOzww/H912081PTBl1/upF07\nCwcUYkxenjntd8CA+p+Mo5Rx+ELpsQqs//ijjTlzssnPh2nTqoOO8prUaiQwnhDDoLV2A26llH9x\nB2CN33sH0An4PtL6rbAjkhX0RMt6evvv3/TTaGZmZsBK37ryjICytm0Dj6mogDFj4KmnzPLJk820\nCsXFRRQXw9FHA+TUnhNLV5J8P5qqA4480vcuu5HjrL+Dmw0z1hAxkl5BtFJBK9F64WkV4XS68Hgy\nAJA5KMkAAAqtSURBVJvf8UW43W4go7asstIOFATUWV1t7jJ3+OEwdmwpZ51lq92tzl9j+/bSmE2X\nTL17aE295mglwzD4vlWbgY5+5Z2BLdFUKE8XopUqWonWC0crOzuTv//dTDLnf3xWVuCIYfBg+Pbb\nwGMuvxwWLTJ/79KliC5dGtZvuqlie82pdg+tqmeVEYONuoyu7wBTgYeVUocCm7TWoefSCYIQFYbR\nMLNmKHr1Cnw/bBgMHRqYjVVIfxJiGJRSRwLzgRLApZQaAwwC1iqlVgNuYHy09VthaJbqeqJlPb1I\nXEkOR/2ZRg1dSaF47rlUvC7raSVaL+VdSVrrj4GDgnw0KRH6gtCS6dQpeOhu7709XHVVbFfMCumB\nbNQjCGmMwwGFheZ0Sn9sNrjwQnjyyeS0S0g+slFPjJBhp2ilkl64WmVl5iuQIqqqnDgcVTHVigXp\nqpVoveZoyYhBEFogNhuMHAlPPJHslgjJQkYMMUKeLkQrlfSapyUjhkRrJVqvOVqyUY8gCIIQgLiS\nBKEFsmCBmdJiv/2S3RIhWTTmSkoLw2CFoVmq64mW9fREy1paidZrSqukpFXI/l9cSYIgCEIAYhgE\nQRCEANLClZTsNgiCIFgNma4aI1qyP1K0Uk9PtKyllWg9ma4qCIIgxAwxDIIgCEIAEmMQBEFogUiM\nIUaIP1K0UklPtKyllWg9iTEIgiAIMUMMgyAIghCAGAZBEAQhADEMgiAIQgBiGARBEIQAZLqqIAhC\nC0Smq8YImdomWqmkJ1rW0kq0nkxXFQRBEGKGGAZBEAQhADEMgiAIQgApF2NQSnUC7gPe0VovSHZ7\nBEEQWhqpOGJwAw8nuxGCIAgtlZQzDFrrbYAr2e0QBEFoqcTdlaSU6gMsAWZored6y2YCRwAGMFFr\nvUYpdRnQF7iSNFhfIQiCYFXiOmJQSuUD04G3/cqOBXpqrQcCo4BZAFrrR7TWE4DBwHjgHKXU6fFs\nnyAIgtCQeI8YqoFTgBv8yoZijiDQWq9XSrVVShVqrcu8ZcuAZXFulyAIghCCuBoGrbUbcCul/Is7\nAGv83juATsD30Wg0tqxbEARBiJxUCD7bMGMNgiAIQgqQSMPg6/w3Ax39yjsDWxLYDkEQBKEREmUY\nbNTNNHoH+BuAUupQYJPWujxB7RAEQRCaIK7+eaXUkcB8oARzbcIOYBBwLXAM5mK28VrrdfFshyAI\ngiAIgiAIgiAIgiAIgiAIgiAIghBf0mpxWP2U3fFM4R1Eqz8wGnOm1xSt9cZY6nk1hwGnAfnAbVrr\nn2Ot4ad1EnAC5vXM0VrreGl59c4FDgOKgfVa6zvjqNURmAxkAA/Gc/KDUmoKsCfwJ/C01vqreGl5\n9ToCnwNdtNaeOOocBYwBsoF7tNZr46Xl1RuAmUInE5iltf48jloJSf2fiD7DTyuia0qFBW6xpH7K\n7nim8K5f9xhgLHAbcFmcNE8G/gnMBC6Nk4aPE4E7gKeBgXHWQmu9UGt9LeaaltlxlhsF/AJUAL/H\nWcsAKjE7tM1x1gLz+/EB8X/o2wVcjpkLbVCctQDKgHGY3/2/xFkrUan/E9Fn+IjomtLKMNRP2R3P\nFN5B6s7SWjsxO5oO8dAE5mF+iU7GfLKOJy8CD2I+Wb8XZy0AlJk7ZVsC1rV0BRZh/qNMjLPWw8A1\nmE9r/4inkFLqfMy/W1U8dQC01l8DQ4A78eY+i7PeOiAX0zg8EWetRKX+T0SfAUR+TSm3g5s/MUrZ\nHdaTUwy0KpRSOUAXIKwhYRSas4BpQE/guHA0mqFVgrkQsRi4ApgSZ70rgf8jiie1KLR+x3woKsd0\ny8VTawmwHPMJOyfOWnbM78bBwDnAs3HUekpr/aZS6lPM78aEOF/bTcBdwCSt9Z9x1mpW6v9w9Yii\nz2iGFpFcU8oahqZSdiul9gceBQZqrR/xfj4Ec2jWSim1A9jtfd9aKbVDa/1yHLUeAh7AvKeT4nR9\nh2AuGKzCdBmERZRaFwJ3e69nYbha0ep5j+mutY7I3RLltXUD/oUZY7g9zlonA49hDuXviKeW33F7\nEcHfLMrrOkEp9RBQADwVrlYz9P4NFAE3K6VWaa1fiqOW73+70X6juXpE2Gc0RyvSa0pZw0DsUnaH\nk8I7Vlqjwrqy6DW/AM6NQKM5Wk8R4T98c/S85RclQssb5Ls4QVpvAG8kQsuH1jrS+FM01/U2fh1S\nAvRuTKBWc1L/R6L3BZH1Gc3RiuiaUjbGoLV2a62r6xV3ALb7vfel7LaMVjI0E3196XptoiXfj1TS\ni6dWyhqGMElkyu5kpAdP5+tL12sTLevpybXVwyqGIZEpu5ORHjydry9dr020rKcn1xYmVjAMiUzZ\nnYz04Ol8fel6baJlPT25tggrTElUAlN2J1IrGZqJvr50vTbRku9HKuklo98SBEEQBEEQBEEQBEEQ\nBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEGINSm7wE0QmotSam9gA/BhvY/e0Frfm/gWmSilLgZuxcyC\n+Spm1ssTtNbv+h3zf5i75+2tQ2z5qJR6Eljz/+3dT4iVVRjH8a9Jm6YhCWwdYr8WuQsiJCQpLCPK\niP5IpUJBULkQitqIEESLooVgGEwW1iTURrJFUJD9o4IirRbxg8qgP2BUVARjSLfFc97m7TLNn3TE\nZn4fuMy9d86577kD8z7vOefleWzvHHrfVKrv64AJ22vn43vEwnU6p92OOBmOnuwTo6Qltk8kCdoA\neMb2w5IuBwxsAl7rtbmNCmrTGaNKXf4dGCStBo7bflTSC8CzJzDOWKQSGGLRkvQLVRHvaio18c22\nP2tVsR4HzmyP+2wfknQQ+Bi4uJ3Qu5q93wMfUCVD3wUus72lHeNW4AbbtwwdvputD1rfSyWN2P5d\n0nnAMnrJzyRtBW6i/mc/p0pcvg2MSlrlKrUJFWDGho4RMSf/hyR6EfNlFPjE9hVUxbOuIPs4cHeb\nadzL5Il2APxme03r+wiVm+YaKjfNANgHrJM00vpspPLZTOdPYD9wY6/Pi7TkaJIuATbYXmN7NVUm\n9K42a9kDbAZQlYncAOyd+58iYlJmDLHQLZf0xtB7D3iyDm73u6+BlZKWAwL2SOraj0rqrr67/YoL\ngK9s/wQg6QCwql3x7wc2SnoJuND269OMr/vc56llob1Ulb7rqZM8VPBZ2fseI1T1Llr79yU9SO0p\nvGO7X6glYs4SGGKh+2GGPYbj7WeXuvgYcGyqPi1Q/NFenkFd6Xf6yzZPAbuo7Jbjsxmk7U8lnStp\nLfCz7aO9wDQBvGx76xT9vpN0CFgH3A7sns3xIqaTpaSIHtu/AkckrQdQ2d5r0gWAL4AVks6WtJSq\nvTton3EYWApso+4Omq1xqjh8P5gMqH2L9d3ylKR7WsrlztPUMthFwKtzOF7ElDJjiIVuqqWkL23f\nyT9LHg56rzcBOyU9RG0+bxtqh+0fJT0GvAccAQ4DZ/XaPQdca/ubGcbXP+4+YDutmHvH9keSdgEH\nJU0A31J7C51XqJnC2NDdUqe6FG1ExOIm6Q5J57TnT0q6vz1fIumApCv/pd9mSTtOwfjOnyIoRswo\nS0kR/90y4E1Jb1G3u+5u5RQ/pO52mm7TeYukJ+ZrYJKuomYgmTVERERERERERERERERERERERERE\nRETE6eQvWE4Yr8iVHuYAAAAASUVORK5CYII=\n", + "image/png": "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\nHuXpp5/kt99+a/F9NifnkwJAYSFcc00NDz9cxbhxhVxwQRFr1qS7VMaYWCrPG02wtFO7HjNY2onK\n82K3EoBIZX7AAQczZ84bfPLJx5HZUd09mngc22effcLo0SMZPXokH3zwHj169OT7778DoHfvTZg8\n+QHuuOMefvllZeQ1m2++BQDffruMnXd2Zkrt1q07paWl/PbbrzHLC7DLLruSl5dHUVERW265FStW\n/NBi+ZrToU6bd989wJtvrueGGwoZOrSUu+6qYt99A+kuljEmSuWo0U128yRb796bUFVVyfPPP8O5\n546OzJoaCASorKzE5/OxdGnj+XU8Hg/BYF1dstNOuzB58gOR37t06cadd06gT59+dO3qdCF99NF/\n653xe73OOfoWW/Tl008/pl+/bfjll5WsW7eWzp03oKCggFWrfqFXr41ZsmQxffr0BZwWDTitjWXL\nlrLpppu36TPoUEkBoFMnmDixmjff9DNmTBGHHurnmmuqKSlJd8mMMekSPWi8//4H8vrr/8emm27G\nDz98j8fj4fjjT6o3S2n06wB23rk/Y8eOYcSIs2POjiqyLX/961huvvn6yDTYPXr04Kabbg0fKbLv\naaeNYPz4G3j77Teprq7i0kuvIi8vj1NO+TOXXDKGXr02pnPnzpH9169fz0UXjWLt2rWMGHFOveda\n9Vlk4iypItITmKmqA5vbr62zpP7+O1xxRRGffJLHPfdUMmBA8zc2ZNIshxYrs2KlOp7Fyq5YyYr3\n8cfzeeedN7n44ksTipVVs6SKiAe4BFiW7Fgbbgj33VfFFVdUc9ppxYwfX0CMRZGMMSYjRbdw2kvG\nJQXgXOBJIGVzn/7xj37eequChQvzOOSQEr78MhM/FmOMqa9//wFcdNEl7XrMlNZ+IrK7iLzlPvaK\nyP0i8r6IvCUiW7m7HQCMBAaJyHGpKlvPniGeeKKSs86q4dhji7nnnnwCNgZtjOlgUpYURORS4EGg\n0N10NFCgqnsClwO3A6jqcap6HjBPVV9IVfnAmVzvlFP8vPZaBbNn+zj66GKWLrVpMowxHUcqWwpf\nAcdSN8y+N/AagKrOA3aL3llV/5zCstWzxRYhXnyxksMO83PooSVMm5Zv02QYYzqElCUFVZ0ORK92\nUAaUR/0eEJGM6cz3euG882p5+eVKnnwyn5NPLubHH9NdKmOMSa503qdQjpMYwryqmtBk1z6fl86d\n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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1857,7 +1881,18 @@ "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", + " return c.reshape(shape_out)\n", + "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", + " return c.reshape(shape_out)\n" + ] + } + ], "source": [ "# Construct a Pandas DataFrame for the microscopic nu-scattering matrix\n", "nuscatter = xs_library[moderator_cell.id]['nu-scatter']\n", @@ -1892,9 +1927,9 @@ "outputs": [ { "data": { - "image/png": "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\nRK5CYII=\n", + "image/png": "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\nq6n/BzrS9bjl9QXqAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1939,7 +1974,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.6" + "version": "2.7.10" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index 9302036600..8be69abda7 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -32,7 +32,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/lib/pymodules/python2.7/matplotlib/__init__.py:1173: UserWarning: This call to matplotlib.use() has no effect\n", + "/usr/local/lib/python2.7/dist-packages/matplotlib/__init__.py:1318: UserWarning: This call to matplotlib.use() has no effect\n", "because the backend has already been chosen;\n", "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", "or matplotlib.backends is imported for the first time.\n", @@ -52,6 +52,8 @@ "import openmc.mgxs\n", "from openmc.statepoint import StatePoint\n", "from openmc.summary import Summary\n", + "from openmc.source import Source\n", + "from openmc.stats import SpatialBox\n", "\n", "import openmoc\n", "import openmoc.process\n", @@ -392,7 +394,8 @@ "settings_file.particles = particles\n", "settings_file.output = {'tallies': False, 'summary': True}\n", "source_bounds = [-10.71, -10.71, -10, 10.71, 10.71, 10.]\n", - "settings_file.set_source_space('fission', source_bounds)\n", + "settings_file.source = Source(SpatialBox(\n", + " source_bounds[:3], source_bounds[3:], only_fissionable=True))\n", "\n", "# Export to \"settings.xml\"\n", "settings_file.export_to_xml()" @@ -467,7 +470,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAASWSURB\nVGje7Zs7buMwEEBzieRcaYaB48KVisSFj7Cn4BFU2I37LVan8BFc5ABb2ICtpSSaHP5EUqOAzsIO\nAjwEGjjiZ/hEDZ+eiJ9noHxe6fHvW4BPDmwHEMAaYBdAEb+5Amu/YNlyQLgP4xGhiG9avmwvsBF/\nt/FkY2vj69NLD1f41Z6Yiw3Gvy728ceVuhLhwY8bA0fij8EgO/6wjH2pF/lKxvf3tNG3Z+BRt4oH\nh/Znt5bu+iQd+/Z/Xp8BmiO8X0X/n7KQNbWIZ1wMJjEUPwBuuI1hfcMZxv9Pj19/AexrYH84KASF\nV41nhe8Ku/4f+nSpu3eNsdadjpBLFPF6pIE76Hx4QeiMfy/yVQi/cf6mxx900jk4ScfGlc4/q9v8\nc9sPxhpN4wn3n+qepeqeAK5x/3WZfieGx+8h6Uv8DCNHeAfjv3Q8q0VjwJCesrFbP2X+7NZPidAj\nE7hAyGTSFOvnLX8erfw9YCV+BL4p7DL1gH3SNvK3Z/0Qn3HE64dn/eLifx1Fd/62eP4NVyLsJx1C\nce2bf/7mfL+Kt6UB+ivtm+YasT88u6Yi2z+M+lrpT432J4F9pw+mZOH+rP3pLP2pEzFhaiCdzESG\ncOvBO5g/peMt6d2lYo39d0ivNUvwXyE6KhVb/ssh7r8LMRAs/1XrD0DcfxfiP8DrD54/AFV0/av6\neP/6acQH/NcTr/KH6JCYCnezMOi/8v5H/be7f9N/tdNyluC/sv3V+rnWTvuxUNj/tbax81+u0fDf\nSuttOt7B/Ckd3zVvb7rafzFq6XWxifqv0f8x/2XZ+PBfw39tFb5YyPTz//z+u9P+a+KnTvoO3sH4\nLx3fiyzXTutgbxrgx8F/bdNNR+2/Uq/YuH9dLRXW60cVk14DK2P/aJkinQ7yDfZfR3pH/Feg47/5\n32/6r196/cgVDu3/liK9DgLyX2260U5vMfr9dxvBh/+i+CzptVHE73V69WOj/ddBT/53toKdTV8j\n/5vrT9b+7/eun9P2f6P+m7T/G/GPkP/m481/6xHpHcNu/PJhKFbi18SFi2DhHcyf0vHYf09Sb4ON\n/iXR9d/J/U8Zf5dZxj91/s3ovzzqv3b+IfvvSNL1o5V/belNzP8P/5XxqdLhxdn9N6ZiQf+d6n8z\n+OeP919K+5P7nzr+Ss+f0vHU/EfNv8T8T11/frr/Uv1jFv+l+Ffp8V88ng9YwTT/pz5/EPuf+vz1\nH/pv1vM39fmfvP9A3f8oPn8Kx1P336j7f8T9x//Bf4n7z6T9b+r+O9l/qe8fSs+f0vHU91/U92+z\n+m/++8d7eX869f0v9f0z+f039f176fFfOp5xWv0Htf4E9fSU+hfsv1Pqb/D4h2n1P9T6I2r9E6n+\nilr/Ra4/o9a/lZ4/peOp9ZcbYv0nsf70pXUe2rLqX19acv0ttf7XfmjOrT+2kxbE/Dd4fmZC/TW5\n/ptaf156/pSOp55/mNF/Wx8y238vD//1+++k80fk80/U81elx3/peMZp5/+o5w8b2vlH7/7viP8m\nnJ/JPf9Zev/X9oes87fYf21MOf9LPn9MPf9cdv78A0xugrwgDfcHAAAAJXRFWHRkYXRlOmNyZWF0\nZQAyMDE1LTExLTMwVDIxOjIwOjA3LTA1OjAwkFvB3QAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNS0x\nMS0zMFQyMToyMDowNy0wNTowMOEGeWEAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ABDg4MCdjYNQMAAASWSURBVGje7Zs7buMwEEBzieRc\naYaB48KVisSFj7Cn4BFU2I37LVan8BFc5ABb2ICtpSSaHP5EUqOAzsIOAjwEGjjiZ/hEDZ+eiJ9n\noHxe6fHvW4BPDmwHEMAaYBdAEb+5Amu/YNlyQLgP4xGhiG9avmwvsBF/t/FkY2vj69NLD1f41Z6Y\niw3Gvy728ceVuhLhwY8bA0fij8EgO/6wjH2pF/lKxvf3tNG3Z+BRt4oHh/Znt5bu+iQd+/Z/Xp8B\nmiO8X0X/n7KQNbWIZ1wMJjEUPwBuuI1hfcMZxv9Pj19/AexrYH84KASFV41nhe8Ku/4f+nSpu3eN\nsdadjpBLFPF6pIE76Hx4QeiMfy/yVQi/cf6mxx900jk4ScfGlc4/q9v8c9sPxhpN4wn3n+qepeqe\nAK5x/3WZfieGx+8h6Uv8DCNHeAfjv3Q8q0VjwJCesrFbP2X+7NZPidAjE7hAyGTSFOvnLX8erfw9\nYCV+BL4p7DL1gH3SNvK3Z/0Qn3HE64dn/eLifx1Fd/62eP4NVyLsJx1Cce2bf/7mfL+Kt6UB+ivt\nm+YasT88u6Yi2z+M+lrpT432J4F9pw+mZOH+rP3pLP2pEzFhaiCdzESGcOvBO5g/peMt6d2lYo39\nd0ivNUvwXyE6KhVb/ssh7r8LMRAs/1XrD0DcfxfiP8DrD54/AFV0/av6eP/6acQH/NcTr/KH6JCY\nCnezMOi/8v5H/be7f9N/tdNyluC/sv3V+rnWTvuxUNj/tbax81+u0fDfSuttOt7B/Ckd3zVvb7ra\nfzFq6XWxifqv0f8x/2XZ+PBfw39tFb5YyPTz//z+u9P+a+KnTvoO3sH4Lx3fiyzXTutgbxrgx8F/\nbdNNR+2/Uq/YuH9dLRXW60cVk14DK2P/aJkinQ7yDfZfR3pH/Feg47/532/6r196/cgVDu3/liK9\nDgLyX2260U5vMfr9dxvBh/+i+CzptVHE73V69WOj/ddBT/53toKdTV8j/5vrT9b+7/eun9P2f6P+\nm7T/G/GPkP/m481/6xHpHcNu/PJhKFbi18SFi2DhHcyf0vHYf09Sb4ON/iXR9d/J/U8Zf5dZxj91\n/s3ovzzqv3b+IfvvSNL1o5V/belNzP8P/5XxqdLhxdn9N6ZiQf+d6n8z+OeP919K+5P7nzr+Ss+f\n0vHU/EfNv8T8T11/frr/Uv1jFv+l+Ffp8V88ng9YwTT/pz5/EPuf+vz1H/pv1vM39fmfvP9A3f8o\nPn8Kx1P336j7f8T9x//Bf4n7z6T9b+r+O9l/qe8fSs+f0vHU91/U92+z+m/++8d7eX869f0v9f0z\n+f039f176fFfOp5xWv0Htf4E9fSU+hfsv1Pqb/D4h2n1P9T6I2r9E6n+ilr/Ra4/o9a/lZ4/peOp\n9ZcbYv0nsf70pXUe2rLqX19acv0ttf7XfmjOrT+2kxbE/Dd4fmZC/TW5/ptaf156/pSOp55/mNF/\nWx8y238vD//1+++k80fk80/U81elx3/peMZp5/+o5w8b2vlH7/7viP8mnJ/JPf9Zev/X9oes87fY\nf21MOf9LPn9MPf9cdv78A0xugrwgDfcHAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAxLTE0VDA4\nOjEyOjA5LTA2OjAwdS8nUQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMS0xNFQwODoxMjowOS0w\nNjowMARyn+0AAAAASUVORK5CYII=\n", "text/plain": [ "" ] @@ -733,10 +736,9 @@ "\n", " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", - " Version: 0.7.0\n", - " Git SHA1: c4b14a5ef87f004528d35cbf33fef3ed15a386ca\n", - " Date/Time: 2015-11-30 21:20:07\n", - " MPI Processes: 1\n", + " Version: 0.7.1\n", + " Git SHA1: ea9fb637f63f9374c7436456141afa850b84acf9\n", + " Date/Time: 2016-01-14 08:12:09\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -822,20 +824,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.2800E-01 seconds\n", - " Reading cross sections = 9.1000E-02 seconds\n", - " Total time in simulation = 4.1240E+01 seconds\n", - " Time in transport only = 4.1215E+01 seconds\n", - " Time in inactive batches = 4.0230E+00 seconds\n", - " Time in active batches = 3.7217E+01 seconds\n", - " Time synchronizing fission bank = 8.0000E-03 seconds\n", - " Sampling source sites = 6.0000E-03 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", - " Time accumulating tallies = 2.0000E-03 seconds\n", + " Total time for initialization = 4.1800E-01 seconds\n", + " Reading cross sections = 1.4300E-01 seconds\n", + " Total time in simulation = 4.1206E+01 seconds\n", + " Time in transport only = 4.1193E+01 seconds\n", + " Time in inactive batches = 4.1760E+00 seconds\n", + " Time in active batches = 3.7030E+01 seconds\n", + " Time synchronizing fission bank = 3.0000E-03 seconds\n", + " Sampling source sites = 2.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 4.1683E+01 seconds\n", - " Calculation Rate (inactive) = 6214.27 neutrons/second\n", - " Calculation Rate (active) = 2686.94 neutrons/second\n", + " Total time elapsed = 4.1648E+01 seconds\n", + " Calculation Rate (inactive) = 5986.59 neutrons/second\n", + " Calculation Rate (active) = 2700.51 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -921,17 +923,7 @@ "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/tallies.py:1514: RuntimeWarning: invalid value encountered in true_divide\n", - "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/tallies.py:1515: RuntimeWarning: invalid value encountered in true_divide\n", - "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/tallies.py:1516: RuntimeWarning: invalid value encountered in true_divide\n" - ] - } - ], + "outputs": [], "source": [ "# Initialize MGXS Library with OpenMC statepoint data\n", "mgxs_lib.load_from_statepoint(sp)" @@ -990,13 +982,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/mgxs/mgxs.py:1254: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n" + "/home/romano/openmc/openmc/tallies.py:1642: RuntimeWarning: invalid value encountered in true_divide\n", + " self_rel_err = data['self']['std. dev.'] / data['self']['mean']\n" ] }, { "data": { "text/html": [ - "
\n", + "
\n", "
\n", " \n", " \n", @@ -1014,7 +1007,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1022,7 +1015,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1030,7 +1023,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1038,7 +1031,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1046,7 +1039,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1054,7 +1047,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1062,13 +1055,13 @@ "" ], "text/plain": [ - " cell group in nuclide mean std. dev.\n", - "3 10000 1 U-235 8.063513e-03 4.062984e-05\n", - "4 10000 1 U-238 7.335515e-03 4.459335e-05\n", - "5 10000 1 O-16 0.000000e+00 0.000000e+00\n", - "0 10000 2 U-235 3.613274e-01 1.902492e-03\n", - "1 10000 2 U-238 6.738424e-07 3.536787e-09\n", - "2 10000 2 O-16 0.000000e+00 0.000000e+00" + " cell group in nuclide mean std. dev.\n", + "3 10000 1 U-235 0.008064 4.062984e-05\n", + "4 10000 1 U-238 0.007336 4.459335e-05\n", + "5 10000 1 O-16 0.000000 0.000000e+00\n", + "0 10000 2 U-235 0.361327 1.902492e-03\n", + "1 10000 2 U-238 0.000001 3.536787e-09\n", + "2 10000 2 O-16 0.000000 0.000000e+00" ] }, "execution_count": 31, @@ -1209,7 +1202,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "
100001U-2358.063513e-030.0080644.062984e-05
100001U-2387.335515e-030.0073364.459335e-05
100001O-160.000000e+000.0000000.000000e+00
100002U-2353.613274e-010.3613271.902492e-03
100002U-2386.738424e-070.0000013.536787e-09
100002O-160.000000e+000.0000000.000000e+00
\n", " \n", " \n", @@ -1342,21 +1335,21 @@ "[ NORMAL ] Iteration 2:\tk_eff = 0.761131\tres = 6.380E-02\n", "[ NORMAL ] Iteration 3:\tk_eff = 0.731467\tres = 5.066E-02\n", "[ NORMAL ] Iteration 4:\tk_eff = 0.709897\tres = 3.910E-02\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.695110\tres = 2.954E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.685966\tres = 2.085E-02\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.695111\tres = 2.954E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.685967\tres = 2.085E-02\n", "[ NORMAL ] Iteration 7:\tk_eff = 0.681511\tres = 1.317E-02\n", "[ NORMAL ] Iteration 8:\tk_eff = 0.680926\tres = 6.520E-03\n", "[ NORMAL ] Iteration 9:\tk_eff = 0.683509\tres = 1.046E-03\n", "[ NORMAL ] Iteration 10:\tk_eff = 0.688659\tres = 3.848E-03\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.695860\tres = 7.565E-03\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.695861\tres = 7.565E-03\n", "[ NORMAL ] Iteration 12:\tk_eff = 0.704674\tres = 1.048E-02\n", "[ NORMAL ] Iteration 13:\tk_eff = 0.714726\tres = 1.269E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.725700\tres = 1.428E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.725701\tres = 1.428E-02\n", "[ NORMAL ] Iteration 15:\tk_eff = 0.737329\tres = 1.537E-02\n", "[ NORMAL ] Iteration 16:\tk_eff = 0.749388\tres = 1.604E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.761690\tres = 1.637E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.761691\tres = 1.637E-02\n", "[ NORMAL ] Iteration 18:\tk_eff = 0.774081\tres = 1.643E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.786432\tres = 1.628E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.786431\tres = 1.628E-02\n", "[ NORMAL ] Iteration 20:\tk_eff = 0.798638\tres = 1.597E-02\n", "[ NORMAL ] Iteration 21:\tk_eff = 0.810618\tres = 1.553E-02\n", "[ NORMAL ] Iteration 22:\tk_eff = 0.822303\tres = 1.501E-02\n", @@ -1369,91 +1362,91 @@ "[ NORMAL ] Iteration 29:\tk_eff = 0.892891\tres = 1.054E-02\n", "[ NORMAL ] Iteration 30:\tk_eff = 0.901206\tres = 9.920E-03\n", "[ NORMAL ] Iteration 31:\tk_eff = 0.909080\tres = 9.320E-03\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.916523\tres = 8.745E-03\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.923546\tres = 8.194E-03\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.916522\tres = 8.745E-03\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.923545\tres = 8.194E-03\n", "[ NORMAL ] Iteration 34:\tk_eff = 0.930162\tres = 7.669E-03\n", "[ NORMAL ] Iteration 35:\tk_eff = 0.936387\tres = 7.171E-03\n", "[ NORMAL ] Iteration 36:\tk_eff = 0.942236\tres = 6.698E-03\n", "[ NORMAL ] Iteration 37:\tk_eff = 0.947725\tres = 6.252E-03\n", "[ NORMAL ] Iteration 38:\tk_eff = 0.952869\tres = 5.830E-03\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.957687\tres = 5.433E-03\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.962193\tres = 5.060E-03\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.957686\tres = 5.433E-03\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.962192\tres = 5.060E-03\n", "[ NORMAL ] Iteration 41:\tk_eff = 0.966404\tres = 4.710E-03\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.970337\tres = 4.381E-03\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.974006\tres = 4.073E-03\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.970336\tres = 4.381E-03\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.974005\tres = 4.073E-03\n", "[ NORMAL ] Iteration 44:\tk_eff = 0.977426\tres = 3.785E-03\n", "[ NORMAL ] Iteration 45:\tk_eff = 0.980613\tres = 3.515E-03\n", "[ NORMAL ] Iteration 46:\tk_eff = 0.983580\tres = 3.264E-03\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.986341\tres = 3.029E-03\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.988908\tres = 2.809E-03\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.986340\tres = 3.029E-03\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.988907\tres = 2.809E-03\n", "[ NORMAL ] Iteration 49:\tk_eff = 0.991293\tres = 2.605E-03\n", "[ NORMAL ] Iteration 50:\tk_eff = 0.993509\tres = 2.415E-03\n", "[ NORMAL ] Iteration 51:\tk_eff = 0.995566\tres = 2.238E-03\n", "[ NORMAL ] Iteration 52:\tk_eff = 0.997475\tres = 2.073E-03\n", "[ NORMAL ] Iteration 53:\tk_eff = 0.999246\tres = 1.920E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.000888\tres = 1.777E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.002409\tres = 1.645E-03\n", + "[ NORMAL ] Iteration 54:\tk_eff = 1.000887\tres = 1.777E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 1.002408\tres = 1.645E-03\n", "[ NORMAL ] Iteration 56:\tk_eff = 1.003818\tres = 1.522E-03\n", "[ NORMAL ] Iteration 57:\tk_eff = 1.005123\tres = 1.408E-03\n", "[ NORMAL ] Iteration 58:\tk_eff = 1.006331\tres = 1.302E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.007450\tres = 1.203E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.008484\tres = 1.112E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.009440\tres = 1.028E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.007449\tres = 1.203E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.008483\tres = 1.112E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.009439\tres = 1.028E-03\n", "[ NORMAL ] Iteration 62:\tk_eff = 1.010324\tres = 9.496E-04\n", "[ NORMAL ] Iteration 63:\tk_eff = 1.011141\tres = 8.771E-04\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.011897\tres = 8.100E-04\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.012594\tres = 7.478E-04\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.011896\tres = 8.100E-04\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.012594\tres = 7.479E-04\n", "[ NORMAL ] Iteration 66:\tk_eff = 1.013238\tres = 6.903E-04\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.013833\tres = 6.371E-04\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.014382\tres = 5.879E-04\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.014889\tres = 5.424E-04\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.013833\tres = 6.372E-04\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.014382\tres = 5.880E-04\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.014889\tres = 5.425E-04\n", "[ NORMAL ] Iteration 70:\tk_eff = 1.015357\tres = 5.004E-04\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.015789\tres = 4.615E-04\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.016187\tres = 4.255E-04\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.016554\tres = 3.923E-04\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.015788\tres = 4.615E-04\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.016186\tres = 4.256E-04\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.016553\tres = 3.924E-04\n", "[ NORMAL ] Iteration 74:\tk_eff = 1.016892\tres = 3.617E-04\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.017204\tres = 3.333E-04\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.017492\tres = 3.072E-04\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.017757\tres = 2.831E-04\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.018001\tres = 2.608E-04\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.018226\tres = 2.403E-04\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.018433\tres = 2.213E-04\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.018624\tres = 2.038E-04\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.018800\tres = 1.877E-04\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.018962\tres = 1.728E-04\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.017204\tres = 3.334E-04\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.017491\tres = 3.073E-04\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.017756\tres = 2.831E-04\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.018000\tres = 2.608E-04\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.018225\tres = 2.403E-04\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.018432\tres = 2.213E-04\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.018623\tres = 2.038E-04\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.018799\tres = 1.877E-04\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.018961\tres = 1.729E-04\n", "[ NORMAL ] Iteration 84:\tk_eff = 1.019110\tres = 1.591E-04\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.019248\tres = 1.465E-04\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.019374\tres = 1.348E-04\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.019490\tres = 1.241E-04\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.019597\tres = 1.142E-04\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.019247\tres = 1.465E-04\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.019373\tres = 1.349E-04\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.019489\tres = 1.241E-04\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.019596\tres = 1.142E-04\n", "[ NORMAL ] Iteration 89:\tk_eff = 1.019695\tres = 1.051E-04\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.019786\tres = 9.670E-05\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.019869\tres = 8.895E-05\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.019946\tres = 8.183E-05\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.020016\tres = 7.528E-05\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.020081\tres = 6.922E-05\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.020141\tres = 6.368E-05\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.020195\tres = 5.857E-05\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.020246\tres = 5.385E-05\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.020292\tres = 4.954E-05\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.020335\tres = 4.553E-05\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.020374\tres = 4.185E-05\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.020410\tres = 3.848E-05\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.020443\tres = 3.537E-05\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.020474\tres = 3.253E-05\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.020502\tres = 2.989E-05\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.020527\tres = 2.746E-05\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.019785\tres = 9.673E-05\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.019869\tres = 8.899E-05\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.019945\tres = 8.187E-05\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.020016\tres = 7.532E-05\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.020081\tres = 6.925E-05\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.020141\tres = 6.372E-05\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.020195\tres = 5.861E-05\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.020246\tres = 5.388E-05\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.020292\tres = 4.956E-05\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.020335\tres = 4.555E-05\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.020374\tres = 4.187E-05\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.020410\tres = 3.850E-05\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.020443\tres = 3.539E-05\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.020473\tres = 3.254E-05\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.020501\tres = 2.991E-05\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.020527\tres = 2.747E-05\n", "[ NORMAL ] Iteration 106:\tk_eff = 1.020551\tres = 2.526E-05\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.020573\tres = 2.319E-05\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.020593\tres = 2.134E-05\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.020611\tres = 1.960E-05\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.020628\tres = 1.800E-05\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.020643\tres = 1.652E-05\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.020657\tres = 1.518E-05\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.020670\tres = 1.398E-05\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.020682\tres = 1.283E-05\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.020693\tres = 1.178E-05\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.020704\tres = 1.083E-05\n" + "[ NORMAL ] Iteration 107:\tk_eff = 1.020573\tres = 2.321E-05\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.020592\tres = 2.134E-05\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.020611\tres = 1.961E-05\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.020628\tres = 1.802E-05\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.020643\tres = 1.653E-05\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.020657\tres = 1.519E-05\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.020671\tres = 1.398E-05\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.020683\tres = 1.283E-05\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.020694\tres = 1.178E-05\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.020704\tres = 1.082E-05\n" ] } ], @@ -1598,7 +1591,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 44, @@ -1607,9 +1600,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\ngg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1645,7 +1638,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.6" + "version": "2.7.10" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index 1b05f82075..70c00b3395 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -26,6 +26,8 @@ "import openmc\n", "from openmc.statepoint import StatePoint\n", "from openmc.summary import Summary\n", + "from openmc.source import Source\n", + "from openmc.stats import SpatialBox\n", "\n", "%matplotlib inline" ] @@ -304,7 +306,8 @@ "settings_file.trigger_active = True\n", "settings_file.trigger_max_batches = max_batches\n", "source_bounds = [-10.71, -10.71, -10, 10.71, 10.71, 10.]\n", - "settings_file.set_source_space('box', source_bounds)\n", + "settings_file.source = Source(space=SpatialBox(\n", + " source_bounds[:3], source_bounds[3:]))\n", "\n", "# Export to \"settings.xml\"\n", "settings_file.export_to_xml()" @@ -379,7 +382,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAPZSURB\nVGje7Zs7buMwEIZ9iey50gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwg\nwIcgg8Cc4fCTSK5W4OeFkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7\nE08mlia+rn7VcKXP8sRszFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WB\nzfiz20hXORmP9fi/bM9EeUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4\nlXju8K3DKv9NThOZ3q2KmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3Oaf\nPX40NGgST2r+uvQkXXp6cKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcub\nlfKGt6apotG/NVx3SInWtLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJb\nf8qlPynYmpKCh7OB1fzNalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utr\nJTy8/06TXh0r/5JOa2JmYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU\n4YuBTPa/8P67l/6r44ds+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m\n/65n+S8p/itN15v0UkW3/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB\n6R3Cqn55U4rv4kfH3zaSgQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6\nbjT6rym9I/v/03/b+LHS4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv\n6h9B/Bfxr9j1Hz2eN/hO8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wX\nfP8Mvf9G37/D/ovuP8SeP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7\n+O+E8zdP/8XOf8Hnz9Dzb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589j\nz5/Y8ej9h4D+W7qQmf57efqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m\n4fwXuH+M3n+OO3++AX9clR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTEwLTI4VDIwOjU1\nOjE4LTA0OjAwI9YF2QAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNS0xMC0yOFQyMDo1NToxOC0wNDow\nMFKLvWUAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ABDg0IE0OQtyQAAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAxLTE0VDA3OjA4OjE5LTA2OjAwSFm98wAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMS0xNFQwNzowODoxOS0wNjowMDkEBU8AAAAASUVORK5C\nYII=\n", "text/plain": [ "" ] @@ -567,10 +570,9 @@ "\n", " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", - " Version: 0.7.0\n", - " Git SHA1: 21738db07debeabde824c9b955bd3bf0c9a16366\n", - " Date/Time: 2015-10-28 20:55:18\n", - " MPI Processes: 1\n", + " Version: 0.7.1\n", + " Git SHA1: ea9fb637f63f9374c7436456141afa850b84acf9\n", + " Date/Time: 2016-01-14 07:08:19\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -634,20 +636,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 7.3800E-01 seconds\n", - " Reading cross sections = 1.5600E-01 seconds\n", - " Total time in simulation = 1.5998E+01 seconds\n", - " Time in transport only = 1.5965E+01 seconds\n", - " Time in inactive batches = 2.3990E+00 seconds\n", - " Time in active batches = 1.3599E+01 seconds\n", - " Time synchronizing fission bank = 3.0000E-03 seconds\n", - " Sampling source sites = 1.0000E-03 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", - " Time accumulating tallies = 3.0000E-03 seconds\n", + " Total time for initialization = 1.2110E+00 seconds\n", + " Reading cross sections = 9.4900E-01 seconds\n", + " Total time in simulation = 1.0453E+01 seconds\n", + " Time in transport only = 1.0440E+01 seconds\n", + " Time in inactive batches = 1.5590E+00 seconds\n", + " Time in active batches = 8.8940E+00 seconds\n", + " Time synchronizing fission bank = 4.0000E-03 seconds\n", + " Sampling source sites = 3.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.6754E+01 seconds\n", - " Calculation Rate (inactive) = 5210.50 neutrons/second\n", - " Calculation Rate (active) = 2757.56 neutrons/second\n", + " Total time elapsed = 1.1681E+01 seconds\n", + " Calculation Rate (inactive) = 8017.96 neutrons/second\n", + " Calculation Rate (active) = 4216.33 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -772,13 +774,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.18257268]]\n", + "[[[ 0.21161313]]\n", "\n", - " [[ 0.07111957]]\n", + " [[ 0.07979747]]\n", "\n", - " [[ 0.40880276]]\n", + " [[ 0.40532194]]\n", "\n", - " [[ 0.16407535]]]\n" + " [[ 0.19458598]]]\n" ] } ], @@ -801,7 +803,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "
\n", " \n", " \n", @@ -831,8 +833,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -841,8 +843,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -851,7 +853,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -861,8 +863,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -871,8 +873,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -881,8 +883,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -891,8 +893,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -901,8 +903,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -911,8 +913,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -921,8 +923,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -931,8 +933,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -941,8 +943,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -951,8 +953,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -961,8 +963,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -971,8 +973,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -981,8 +983,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -991,8 +993,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -1001,8 +1003,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -1011,8 +1013,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -1021,8 +1023,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
1(0.0e+00 - 6.3e-07)fission0.0002020.0000370.0001650.000035
11(0.0e+00 - 6.3e-07)nu-fission0.0004920.0000900.0004030.000085
21(6.3e-07 - 2.0e+01)fission0.0000760.0000770.000004
1(6.3e-07 - 2.0e+01)nu-fission0.0002040.0000100.0002070.000011
41(0.0e+00 - 6.3e-07)fission0.0003750.0000390.0003500.000043
51(0.0e+00 - 6.3e-07)nu-fission0.0009140.0000940.0008530.000105
61(6.3e-07 - 2.0e+01)fission0.0001070.0000130.0001060.000015
71(6.3e-07 - 2.0e+01)nu-fission0.0002780.0000320.0002740.000039
81(0.0e+00 - 6.3e-07)fission0.0005640.0000560.0005520.000060
91(0.0e+00 - 6.3e-07)nu-fission0.0013740.0001370.0013460.000146
101(6.3e-07 - 2.0e+01)fission0.0001490.0000070.0001480.000008
111(6.3e-07 - 2.0e+01)nu-fission0.0003880.0000180.0003840.000021
121(0.0e+00 - 6.3e-07)fission0.0006690.0000440.0006820.000054
131(0.0e+00 - 6.3e-07)nu-fission0.0016310.0001080.0016620.000132
141(6.3e-07 - 2.0e+01)fission0.0001650.0000110.0001620.000012
151(6.3e-07 - 2.0e+01)nu-fission0.0004330.0000290.0004240.000031
161(0.0e+00 - 6.3e-07)fission0.0009320.0000690.0009110.000076
171(0.0e+00 - 6.3e-07)nu-fission0.0022700.0001680.0022210.000186
181(6.3e-07 - 2.0e+01)fission0.0001830.0000110.0001780.000013
191(6.3e-07 - 2.0e+01)nu-fission0.0004770.0000280.0004640.000032
\n", @@ -1031,26 +1033,26 @@ "text/plain": [ " mesh 1 energy [MeV] score mean std. dev.\n", " x y z \n", - "0 1 1 1 (0.0e+00 - 6.3e-07) fission 0.000202 0.000037\n", - "1 1 1 1 (0.0e+00 - 6.3e-07) nu-fission 0.000492 0.000090\n", - "2 1 1 1 (6.3e-07 - 2.0e+01) fission 0.000076 0.000004\n", - "3 1 1 1 (6.3e-07 - 2.0e+01) nu-fission 0.000204 0.000010\n", - "4 1 2 1 (0.0e+00 - 6.3e-07) fission 0.000375 0.000039\n", - "5 1 2 1 (0.0e+00 - 6.3e-07) nu-fission 0.000914 0.000094\n", - "6 1 2 1 (6.3e-07 - 2.0e+01) fission 0.000107 0.000013\n", - "7 1 2 1 (6.3e-07 - 2.0e+01) nu-fission 0.000278 0.000032\n", - "8 1 3 1 (0.0e+00 - 6.3e-07) fission 0.000564 0.000056\n", - "9 1 3 1 (0.0e+00 - 6.3e-07) nu-fission 0.001374 0.000137\n", - "10 1 3 1 (6.3e-07 - 2.0e+01) fission 0.000149 0.000007\n", - "11 1 3 1 (6.3e-07 - 2.0e+01) nu-fission 0.000388 0.000018\n", - "12 1 4 1 (0.0e+00 - 6.3e-07) fission 0.000669 0.000044\n", - "13 1 4 1 (0.0e+00 - 6.3e-07) nu-fission 0.001631 0.000108\n", - "14 1 4 1 (6.3e-07 - 2.0e+01) fission 0.000165 0.000011\n", - "15 1 4 1 (6.3e-07 - 2.0e+01) nu-fission 0.000433 0.000029\n", - "16 1 5 1 (0.0e+00 - 6.3e-07) fission 0.000932 0.000069\n", - "17 1 5 1 (0.0e+00 - 6.3e-07) nu-fission 0.002270 0.000168\n", - "18 1 5 1 (6.3e-07 - 2.0e+01) fission 0.000183 0.000011\n", - "19 1 5 1 (6.3e-07 - 2.0e+01) nu-fission 0.000477 0.000028" + "0 1 1 1 (0.0e+00 - 6.3e-07) fission 0.000165 0.000035\n", + "1 1 1 1 (0.0e+00 - 6.3e-07) nu-fission 0.000403 0.000085\n", + "2 1 1 1 (6.3e-07 - 2.0e+01) fission 0.000077 0.000004\n", + "3 1 1 1 (6.3e-07 - 2.0e+01) nu-fission 0.000207 0.000011\n", + "4 1 2 1 (0.0e+00 - 6.3e-07) fission 0.000350 0.000043\n", + "5 1 2 1 (0.0e+00 - 6.3e-07) nu-fission 0.000853 0.000105\n", + "6 1 2 1 (6.3e-07 - 2.0e+01) fission 0.000106 0.000015\n", + "7 1 2 1 (6.3e-07 - 2.0e+01) nu-fission 0.000274 0.000039\n", + "8 1 3 1 (0.0e+00 - 6.3e-07) fission 0.000552 0.000060\n", + "9 1 3 1 (0.0e+00 - 6.3e-07) nu-fission 0.001346 0.000146\n", + "10 1 3 1 (6.3e-07 - 2.0e+01) fission 0.000148 0.000008\n", + "11 1 3 1 (6.3e-07 - 2.0e+01) nu-fission 0.000384 0.000021\n", + "12 1 4 1 (0.0e+00 - 6.3e-07) fission 0.000682 0.000054\n", + "13 1 4 1 (0.0e+00 - 6.3e-07) nu-fission 0.001662 0.000132\n", + "14 1 4 1 (6.3e-07 - 2.0e+01) fission 0.000162 0.000012\n", + "15 1 4 1 (6.3e-07 - 2.0e+01) nu-fission 0.000424 0.000031\n", + "16 1 5 1 (0.0e+00 - 6.3e-07) fission 0.000911 0.000076\n", + "17 1 5 1 (0.0e+00 - 6.3e-07) nu-fission 0.002221 0.000186\n", + "18 1 5 1 (6.3e-07 - 2.0e+01) fission 0.000178 0.000013\n", + "19 1 5 1 (6.3e-07 - 2.0e+01) nu-fission 0.000464 0.000032" ] }, "execution_count": 25, @@ -1075,9 +1077,9 @@ "outputs": [ { "data": { - "image/png": "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\nkiRJEsA/A3sng0v+IomuAAAAAElFTkSuQmCC\n", + "image/png": "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\n/j8k35yq9tqQdwAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1100,18 +1102,26 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python2.7/dist-packages/matplotlib/collections.py:590: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n", + " if self._edgecolors == str('face'):\n" + ] + }, { "data": { - "image/png": "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\n/wfC21DgNNvIcQAAAABJRU5ErkJggg==\n", + "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1181,7 +1191,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -1199,144 +1209,144 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
10000U-235scatter-Y0,00.0370950.0011500.0380270.001350
110000U-235scatter-Y1,-10.0002660.0003230.0000710.000383
210000U-235scatter-Y1,0-0.0004170.000274-0.0005790.000250
310000U-235scatter-Y1,1-0.0002280.000237-0.0001760.000282
410000U-235scatter-Y2,-20.0000260.0001990.0001050.000224
510000U-235scatter-Y2,-1-0.0001150.000185-0.0000770.000221
610000U-235scatter-Y2,00.0001510.0001590.0001340.000181
710000U-235scatter-Y2,1-0.0001220.000280-0.0001170.000308
810000U-235scatter-Y2,20.0000080.0001810.0000390.000211
910000U-238scatter-Y0,02.3286320.0131072.3409870.014310
1010000U-238scatter-Y1,-10.0245300.0022720.0228170.002458
1110000U-238scatter-Y1,0-0.0000590.0028040.0015890.003051
1210000U-238scatter-Y1,1-0.0279900.002536-0.0271460.002511
1310000U-238scatter-Y2,-2-0.0048610.001575-0.0041460.001722
1410000U-238scatter-Y2,-10.0005570.0020180.0017650.002474
1510000U-238scatter-Y2,00.0062360.0016270.0060380.001917
1610000U-238scatter-Y2,1-0.0006480.0015510.0001670.001438
1710000U-238scatter-Y2,2-0.0010310.001310-0.0016840.001535
\n", @@ -1344,24 +1354,24 @@ ], "text/plain": [ " cell nuclide score mean std. dev.\n", - "0 10000 U-235 scatter-Y0,0 0.037095 0.001150\n", - "1 10000 U-235 scatter-Y1,-1 0.000266 0.000323\n", - "2 10000 U-235 scatter-Y1,0 -0.000417 0.000274\n", - "3 10000 U-235 scatter-Y1,1 -0.000228 0.000237\n", - "4 10000 U-235 scatter-Y2,-2 0.000026 0.000199\n", - "5 10000 U-235 scatter-Y2,-1 -0.000115 0.000185\n", - "6 10000 U-235 scatter-Y2,0 0.000151 0.000159\n", - "7 10000 U-235 scatter-Y2,1 -0.000122 0.000280\n", - "8 10000 U-235 scatter-Y2,2 0.000008 0.000181\n", - "9 10000 U-238 scatter-Y0,0 2.328632 0.013107\n", - "10 10000 U-238 scatter-Y1,-1 0.024530 0.002272\n", - "11 10000 U-238 scatter-Y1,0 -0.000059 0.002804\n", - "12 10000 U-238 scatter-Y1,1 -0.027990 0.002536\n", - "13 10000 U-238 scatter-Y2,-2 -0.004861 0.001575\n", - "14 10000 U-238 scatter-Y2,-1 0.000557 0.002018\n", - "15 10000 U-238 scatter-Y2,0 0.006236 0.001627\n", - "16 10000 U-238 scatter-Y2,1 -0.000648 0.001551\n", - "17 10000 U-238 scatter-Y2,2 -0.001031 0.001310" + "0 10000 U-235 scatter-Y0,0 0.038027 0.001350\n", + "1 10000 U-235 scatter-Y1,-1 0.000071 0.000383\n", + "2 10000 U-235 scatter-Y1,0 -0.000579 0.000250\n", + "3 10000 U-235 scatter-Y1,1 -0.000176 0.000282\n", + "4 10000 U-235 scatter-Y2,-2 0.000105 0.000224\n", + "5 10000 U-235 scatter-Y2,-1 -0.000077 0.000221\n", + "6 10000 U-235 scatter-Y2,0 0.000134 0.000181\n", + "7 10000 U-235 scatter-Y2,1 -0.000117 0.000308\n", + "8 10000 U-235 scatter-Y2,2 0.000039 0.000211\n", + "9 10000 U-238 scatter-Y0,0 2.340987 0.014310\n", + "10 10000 U-238 scatter-Y1,-1 0.022817 0.002458\n", + "11 10000 U-238 scatter-Y1,0 0.001589 0.003051\n", + "12 10000 U-238 scatter-Y1,1 -0.027146 0.002511\n", + "13 10000 U-238 scatter-Y2,-2 -0.004146 0.001722\n", + "14 10000 U-238 scatter-Y2,-1 0.001765 0.002474\n", + "15 10000 U-238 scatter-Y2,0 0.006038 0.001917\n", + "16 10000 U-238 scatter-Y2,1 0.000167 0.001438\n", + "17 10000 U-238 scatter-Y2,2 -0.001684 0.001535" ] }, "execution_count": 29, @@ -1395,8 +1405,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.00131009 0.01310707]\n", - " [ 0.00018089 0.00114976]]]\n" + "[[[ 0.00153535 0.0143096 ]\n", + " [ 0.00021107 0.00135025]]]\n" ] } ], @@ -1464,7 +1474,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.04537029]]]\n" + "[[[ 0.04318886]]]\n" ] } ], @@ -1493,7 +1503,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -1509,141 +1519,141 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
558279absorption0.0000930.0000130.0001020.000016
559279scatter0.0135040.0008050.0138890.000964
560280absorption0.0000840.0000100.0000870.000012
561280scatter0.0142150.0006120.0143470.000652
562281absorption0.0000910.0000080.0000870.000010
563281scatter0.0145450.0005900.0142830.000715
564282absorption0.0001120.0001110.000012
565282scatter0.0163210.0007290.0163740.000865
566283absorption0.0000920.0000070.0000900.000008
567283scatter0.0161630.0006610.0158390.000795
568284absorption0.0001040.0000110.0001030.000012
569284scatter0.0173840.0005990.0171820.000660
570285absorption0.0001110.0000110.000014
571285scatter0.0180150.0007740.0175650.000862
572286absorption0.0001250.0000120.000014
573286scatter0.0182940.0008280.0181280.000931
574287absorption0.0001190.0000130.0001240.000016
575287scatter0.0174830.0007570.0172530.000902
576288absorption0.0001130.0000140.0001190.000016
577288scatter0.0182480.0007820.0184820.000861
\n", @@ -1651,26 +1661,26 @@ ], "text/plain": [ " distribcell score mean std. dev.\n", - "558 279 absorption 0.000093 0.000013\n", - "559 279 scatter 0.013504 0.000805\n", - "560 280 absorption 0.000084 0.000010\n", - "561 280 scatter 0.014215 0.000612\n", - "562 281 absorption 0.000091 0.000008\n", - "563 281 scatter 0.014545 0.000590\n", - "564 282 absorption 0.000112 0.000012\n", - "565 282 scatter 0.016321 0.000729\n", - "566 283 absorption 0.000092 0.000007\n", - "567 283 scatter 0.016163 0.000661\n", - "568 284 absorption 0.000104 0.000011\n", - "569 284 scatter 0.017384 0.000599\n", - "570 285 absorption 0.000111 0.000011\n", - "571 285 scatter 0.018015 0.000774\n", - "572 286 absorption 0.000125 0.000012\n", - "573 286 scatter 0.018294 0.000828\n", - "574 287 absorption 0.000119 0.000013\n", - "575 287 scatter 0.017483 0.000757\n", - "576 288 absorption 0.000113 0.000014\n", - "577 288 scatter 0.018248 0.000782" + "558 279 absorption 0.000102 0.000016\n", + "559 279 scatter 0.013889 0.000964\n", + "560 280 absorption 0.000087 0.000012\n", + "561 280 scatter 0.014347 0.000652\n", + "562 281 absorption 0.000087 0.000010\n", + "563 281 scatter 0.014283 0.000715\n", + "564 282 absorption 0.000111 0.000012\n", + "565 282 scatter 0.016374 0.000865\n", + "566 283 absorption 0.000090 0.000008\n", + "567 283 scatter 0.015839 0.000795\n", + "568 284 absorption 0.000103 0.000012\n", + "569 284 scatter 0.017182 0.000660\n", + "570 285 absorption 0.000111 0.000014\n", + "571 285 scatter 0.017565 0.000862\n", + "572 286 absorption 0.000125 0.000014\n", + "573 286 scatter 0.018128 0.000931\n", + "574 287 absorption 0.000124 0.000016\n", + "575 287 scatter 0.017253 0.000902\n", + "576 288 absorption 0.000119 0.000016\n", + "577 288 scatter 0.018482 0.000861" ] }, "execution_count": 33, @@ -1703,7 +1713,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -1757,8 +1767,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -1772,278 +1782,278 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
100000absorption0.0001230.0000120.0001130.000013
1100000scatter0.0178050.0008080.0173370.000749
210003010001101010002100001absorption0.0002170.0000200.0002040.000021
310003010001101010002100001scatter0.0288670.0012630.0276310.001348
410003010001202010002100002absorption0.0003180.0000200.0003190.000025
510003010001202010002100002scatter0.0404930.0012690.0400520.001427
610003010001303010002100003absorption0.0003860.0000180.0003880.000022
710003010001303010002100003scatter0.0485760.0013370.0485780.001561
810003010001404010002100004absorption0.0005010.0000260.0005110.000030
910003010001404010002100004scatter0.0570630.0017150.0579030.001988
1010003010001505010002100005absorption0.0004840.0000260.0004810.000033
1110003010001505010002100005scatter0.0608220.0015810.0612110.001989
1210003010001606010002100006absorption0.0005320.0000390.0005420.000045
1310003010001606010002100006scatter0.0691010.0022490.0708880.002497
1410003010001707010002100007absorption0.0005770.0000390.0005870.000047
1510003010001707010002100007scatter0.0767220.0023350.0781070.002794
1610003010001808010002100008absorption0.0006490.0000390.0006270.000033
1710003010001808010002100008scatter0.0815640.0016100.0820310.001740
1810003010001909010002100009absorption0.0006800.0000320.0006670.000028
1910003010001909010002100009scatter0.0877150.0019590.0885160.002037
\n", @@ -2055,48 +2065,48 @@ " id id id x y z id id \n", "0 10003 0 10001 0 0 0 10002 10000 0 absorption \n", "1 10003 0 10001 0 0 0 10002 10000 0 scatter \n", - "2 10003 0 10001 1 0 0 10002 10000 1 absorption \n", - "3 10003 0 10001 1 0 0 10002 10000 1 scatter \n", - "4 10003 0 10001 2 0 0 10002 10000 2 absorption \n", - "5 10003 0 10001 2 0 0 10002 10000 2 scatter \n", - "6 10003 0 10001 3 0 0 10002 10000 3 absorption \n", - "7 10003 0 10001 3 0 0 10002 10000 3 scatter \n", - "8 10003 0 10001 4 0 0 10002 10000 4 absorption \n", - "9 10003 0 10001 4 0 0 10002 10000 4 scatter \n", - "10 10003 0 10001 5 0 0 10002 10000 5 absorption \n", - "11 10003 0 10001 5 0 0 10002 10000 5 scatter \n", - "12 10003 0 10001 6 0 0 10002 10000 6 absorption \n", - "13 10003 0 10001 6 0 0 10002 10000 6 scatter \n", - "14 10003 0 10001 7 0 0 10002 10000 7 absorption \n", - "15 10003 0 10001 7 0 0 10002 10000 7 scatter \n", - "16 10003 0 10001 8 0 0 10002 10000 8 absorption \n", - "17 10003 0 10001 8 0 0 10002 10000 8 scatter \n", - "18 10003 0 10001 9 0 0 10002 10000 9 absorption \n", - "19 10003 0 10001 9 0 0 10002 10000 9 scatter \n", + "2 10003 0 10001 0 1 0 10002 10000 1 absorption \n", + "3 10003 0 10001 0 1 0 10002 10000 1 scatter \n", + "4 10003 0 10001 0 2 0 10002 10000 2 absorption \n", + "5 10003 0 10001 0 2 0 10002 10000 2 scatter \n", + "6 10003 0 10001 0 3 0 10002 10000 3 absorption \n", + "7 10003 0 10001 0 3 0 10002 10000 3 scatter \n", + "8 10003 0 10001 0 4 0 10002 10000 4 absorption \n", + "9 10003 0 10001 0 4 0 10002 10000 4 scatter \n", + "10 10003 0 10001 0 5 0 10002 10000 5 absorption \n", + "11 10003 0 10001 0 5 0 10002 10000 5 scatter \n", + "12 10003 0 10001 0 6 0 10002 10000 6 absorption \n", + "13 10003 0 10001 0 6 0 10002 10000 6 scatter \n", + "14 10003 0 10001 0 7 0 10002 10000 7 absorption \n", + "15 10003 0 10001 0 7 0 10002 10000 7 scatter \n", + "16 10003 0 10001 0 8 0 10002 10000 8 absorption \n", + "17 10003 0 10001 0 8 0 10002 10000 8 scatter \n", + "18 10003 0 10001 0 9 0 10002 10000 9 absorption \n", + "19 10003 0 10001 0 9 0 10002 10000 9 scatter \n", "\n", " mean std. dev. \n", " \n", " \n", - "0 0.000123 0.000012 \n", - "1 0.017805 0.000808 \n", - "2 0.000217 0.000020 \n", - "3 0.028867 0.001263 \n", - "4 0.000318 0.000020 \n", - "5 0.040493 0.001269 \n", - "6 0.000386 0.000018 \n", - "7 0.048576 0.001337 \n", - "8 0.000501 0.000026 \n", - "9 0.057063 0.001715 \n", - "10 0.000484 0.000026 \n", - "11 0.060822 0.001581 \n", - "12 0.000532 0.000039 \n", - "13 0.069101 0.002249 \n", - "14 0.000577 0.000039 \n", - "15 0.076722 0.002335 \n", - "16 0.000649 0.000039 \n", - "17 0.081564 0.001610 \n", - "18 0.000680 0.000032 \n", - "19 0.087715 0.001959 " + "0 0.000113 0.000013 \n", + "1 0.017337 0.000749 \n", + "2 0.000204 0.000021 \n", + "3 0.027631 0.001348 \n", + "4 0.000319 0.000025 \n", + "5 0.040052 0.001427 \n", + "6 0.000388 0.000022 \n", + "7 0.048578 0.001561 \n", + "8 0.000511 0.000030 \n", + "9 0.057903 0.001988 \n", + "10 0.000481 0.000033 \n", + "11 0.061211 0.001989 \n", + "12 0.000542 0.000045 \n", + "13 0.070888 0.002497 \n", + "14 0.000587 0.000047 \n", + "15 0.078107 0.002794 \n", + "16 0.000627 0.000033 \n", + "17 0.082031 0.001740 \n", + "18 0.000667 0.000028 \n", + "19 0.088516 0.002037 " ] }, "execution_count": 34, @@ -2122,7 +2132,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -2149,38 +2159,38 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
mean0.0004180.0000220.0004190.000024
std0.0002390.0000090.0002370.000010
min0.0000180.0000040.0000150.000003
25%0.0002020.0000150.0002070.000017
50%0.0004020.0000210.0004150.000023
75%0.0006150.0000270.000030
max0.0008920.0000440.0009010.000055
\n", @@ -2191,13 +2201,13 @@ " \n", " \n", "count 289.000000 289.000000\n", - "mean 0.000418 0.000022\n", - "std 0.000239 0.000009\n", - "min 0.000018 0.000004\n", - "25% 0.000202 0.000015\n", - "50% 0.000402 0.000021\n", - "75% 0.000615 0.000027\n", - "max 0.000892 0.000044" + "mean 0.000419 0.000024\n", + "std 0.000237 0.000010\n", + "min 0.000015 0.000003\n", + "25% 0.000207 0.000017\n", + "50% 0.000415 0.000023\n", + "75% 0.000615 0.000030\n", + "max 0.000901 0.000055" ] }, "execution_count": 35, @@ -2232,7 +2242,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Mann-Whitney Test p-value: 0.414863173548\n" + "Mann-Whitney Test p-value: 0.456115837774\n" ] } ], @@ -2270,7 +2280,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Mann-Whitney Test p-value: 3.28554363741e-42\n" + "Mann-Whitney Test p-value: 4.59783355073e-42\n" ] } ], @@ -2306,7 +2316,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:4: SettingWithCopyWarning: \n", + "/usr/local/lib/python2.7/dist-packages/ipykernel/__main__.py:4: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", @@ -2316,7 +2326,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 38, @@ -2325,9 +2335,9 @@ }, { "data": { - "image/png": "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\nTkSuQmCC\n", + "image/png": "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\nTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2354,7 +2364,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 39, @@ -2363,9 +2373,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\nwXh7GWfQoEFRh1AjaurCcmlKCiJSrrC+eKR6wkzYaj4SEZE4JQUREYlTUhARkTglBRERiVNSEJFa\nJTc3l8mTJ8dfjx07ln322Yf333+frKwscnJyyMnJoW3btvTt25dJkyZ9r3yjRo3i2+Xk5HDNNdek\nuhppS0lBRGoVM4v3vhk1ahRXXXUVr732Gp07dwZg48aNFBUVMWfOHE4++WTOOussRo0aVaL8K6+8\nQlFRUXwaPnx4JHVJR0oKIlLruDuPPfYYN9xwAxMnTuSYY4753jatW7fmmmuuYdiwYdx0000RRFk7\nKSmISK3z8MMPc/vtt/P222/Ts2fPCrc966yzWLt2LZ9++ml8me6/KJ9uXhORKrHf18wNVH575b6g\n3Z1JkybRp08funfvvsft27dvD8A333wTL3/mmWdSr95/v/7uueceLr300krFkamUFESkSir7ZV5T\nzIxHH32UO++8k1/+8peMHDmywu2//PJLAPbZZ594+Zdffpk+ffqEHmttpOYjEal12rRpw+TJk5ky\nZQq/+tWvKtz2xRdfpE2bNnTr1i1F0dVuSgoiUiu1a9eOyZMn88Ybb3D99dfHlxdfL1izZg0PPfQQ\nd9xxB3fffXeJsrqmUD41H4lIrdWpUyfefvttevfuzerVqwFo3rw57k7jxo056qijGDduHKecckqJ\ncn379iU7Ozv++pRTTuH5559PaezpSklBRGqVpUuXlnidm5vL8uXLASgoKKh0eSlJzUciIhKnpCAi\nInFKCiIiEqekICIicUoKIiISp6QgIiJxSgoiIhKnpCAiInFKCiKSUbp37877778fdRi1lpKCiCSl\n+IlnYU7JKP04ToAnn3ySE088EYC5c+fSu3fvCvexbNkysrKy2L17d9X+GBlMw1yISCWEOZBcckmh\nMglkT8IaGG/Xrl0lxlaqTXSmICIZJTc3l7fffhuAGTNmcOSRR9KsWTPatm3LDTfcABA/k2jevDk5\nOTl8+OGHuDt/+MMfyM3NpU2bNlx88cV8++238f0+9dRTdOnShZYtW8a3Kz7OsGHDOOecc7jwwgtp\n1qwZo0aN4t///jfHHnssLVq0oH379lx99dXs2LEjvr+srCweeeQRDjzwQJo2bcptt93G4sWLOfbY\nY2nevDkDBgwosX2qKCmISK1T0S/8xLOIa6+9luuuu46NGzeyZMkSzj33XACmTJkCwMaNGykqKqJX\nr1488cQTjBo1infffZclS5awadMmrrrqKgDmzZvHlVdeyZgxY1i1ahUbN25k5cqVJY47fvx4zj33\nXDZu3MjAgQPJzs7mgQce4Ouvv2batGlMnjyZhx9+uESZiRMnMmvWLKZPn86f/vQnhgwZwpgxY1i+\nfDmFhYWMGTOmRv5elaGkIGmrOu3OkrmKH6fZokWL+HTllVeW+dlo0KABn332GV999RWNGjWiV69e\n8X2UNnr0aH7961+Tm5tL48aNufvuuxk7diy7du1i3Lhx9OvXj+OOO4769etzxx13fO94xx13HP36\n9QNgr732omfPnhx99NFkZWXRpUsXhg4dynvvvVeizI033kiTJk3Iz8/n0EMP5bTTTiM3N5emTZty\n2mmnMWvWrJr6syVNSUHSnJeapK4rfpzm+vXr49PDDz9c5hf9yJEjWbhwIXl5eRx99NG8+uqr5e53\n1apVdOnSJf66c+fO7Ny5kzVr1rBq1So6duwYX7f33nuz7777liifuB5g4cKFnH766bRr145mzZpx\n66238vXXX5fYpk2bNiX2Wfr1pk2b9vDXqHlKCiJS65XXnHTAAQdQUFDAunXruOmmmzjnnHPYsmVL\nmWcV7du3Z9myZfHXy5cvp169erRt25Z27dqxYsWK+LotW7Z87wu+9D6vuOIK8vPzWbRoERs3buSu\nu+6qFb2dlBREJGM9/fTTrFu3DoBmzZphZmRlZdGqVSuysrJYvHhxfNvzzz+f+++/n2XLlrFp0yZu\nueUWBgwYQFZWFv3792fChAlMmzaN7du3M2zYsD32XNq0aRM5OTk0atSIBQsW8Mgjj+wx3sR9RvXI\nUCUFEakEC3GqRlTlXG9688036d69Ozk5OVx33XWMHTuWhg0b0qhRI2699VaOP/54WrRowYwZM/jF\nL37BhRdeSO/evdlvv/1o1KgRDz74IACHHHIIDz74IAMGDKB9+/bk5OTQunVrGjZsWO7x77nnHgoK\nCmjatClDhw5lwIABJbYpK97S66O4hmZhZSMz6wQ8BbQm1hj8uLsPN7N9gGeALsAy4OfuvqFUWc/k\nB2sXFBQwcODAqMMITU3VL/YfovTnwCJ/6Hpdef/Mov9bp6tNmzbRokULFi1aVOI6RKqU994Ey6uV\nScI8U9gBXOfuhwDHAFeaWR5wM/CWux8ETA5ei4iktQkTJrB582a+++47brjhBg477LBIEkLYQksK\n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\nReuGFnegfMcAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2398,7 +2408,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.6" + "version": "2.7.10" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/post-processing.ipynb b/docs/source/pythonapi/examples/post-processing.ipynb index 6e2dd94299..a2e8ebd366 100644 --- a/docs/source/pythonapi/examples/post-processing.ipynb +++ b/docs/source/pythonapi/examples/post-processing.ipynb @@ -21,6 +21,8 @@ "\n", "import openmc\n", "from openmc.statepoint import StatePoint\n", + "from openmc.source import Source\n", + "from openmc.stats import SpatialBox\n", "\n", "%matplotlib inline" ] @@ -272,7 +274,8 @@ "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", "source_bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", - "settings_file.set_source_space('box', source_bounds)\n", + "settings_file.source = Source(space=SpatialBox(\n", + " source_bounds[:3], source_bounds[3:]))\n", "\n", "# Export to \"settings.xml\"\n", "settings_file.export_to_xml()" @@ -347,7 +350,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAALKSURB\nVGje7dpLcqQwDAbgHHE2YeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmN\nP+HDhw8fPnz48Kf6VH9G+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4\nzPji99z0/AJ4n1lfvJ6fnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6\npA0wfln+ho/fwgYYn19C/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tN\nDbSGz7T0SBEWw4vLXzbQ6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X5\n8wZaxWd1+fMGiuFvir8bvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV\n873hB8UnM3xzANtf8nb4dwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7\nT/ppARBvp48UwJnelT5SACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4/\n/Jve+fhsH6Ctv7n8PTzjvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V\n32/o9+fl389Xnx+g5x/o+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6\n/4Le/6D3T/D9V67Y/ZsVQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/\ngPs/0P4TtP8F7r9J3AIO9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTu\nf4X7b+H+X7T/+BPuf3aM8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIw\nMTUtMTEtMjlUMTY6NDY6NTMtMDU6MDCSkLewAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE1LTExLTI5\nVDE2OjQ2OjUzLTA1OjAw480PDAAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ABDg0CBtSiu0UAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDEtMTRUMDc6MDI6\nMDYtMDY6MDBlmV1NAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAxLTE0VDA3OjAyOjA2LTA2OjAw\nFMTl8QAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -457,10 +460,9 @@ "\n", " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", - " Version: 0.7.0\n", - " Git SHA1: c4b14a5ef87f004528d35cbf33fef3ed15a386ca\n", - " Date/Time: 2015-11-29 16:46:53\n", - " MPI Processes: 1\n", + " Version: 0.7.1\n", + " Git SHA1: ea9fb637f63f9374c7436456141afa850b84acf9\n", + " Date/Time: 2016-01-14 07:02:06\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -596,20 +598,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.7900E-01 seconds\n", - " Reading cross sections = 8.7000E-02 seconds\n", - " Total time in simulation = 2.2064E+02 seconds\n", - " Time in transport only = 2.2060E+02 seconds\n", - " Time in inactive batches = 8.7100E+00 seconds\n", - " Time in active batches = 2.1193E+02 seconds\n", - " Time synchronizing fission bank = 1.4000E-02 seconds\n", - " Sampling source sites = 8.0000E-03 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", + " Total time for initialization = 3.6000E-01 seconds\n", + " Reading cross sections = 1.0600E-01 seconds\n", + " Total time in simulation = 2.5756E+02 seconds\n", + " Time in transport only = 2.5751E+02 seconds\n", + " Time in inactive batches = 9.7270E+00 seconds\n", + " Time in active batches = 2.4783E+02 seconds\n", + " Time synchronizing fission bank = 2.1000E-02 seconds\n", + " Sampling source sites = 1.3000E-02 seconds\n", + " SEND/RECV source sites = 8.0000E-03 seconds\n", " Time accumulating tallies = 1.3000E-02 seconds\n", - " Total time for finalization = 1.6600E-01 seconds\n", - " Total time elapsed = 2.2120E+02 seconds\n", - " Calculation Rate (inactive) = 5740.53 neutrons/second\n", - " Calculation Rate (active) = 2123.37 neutrons/second\n", + " Total time for finalization = 1.4600E-01 seconds\n", + " Total time elapsed = 2.5809E+02 seconds\n", + " Calculation Rate (inactive) = 5140.33 neutrons/second\n", + " Calculation Rate (active) = 1815.75 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -866,7 +868,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 24, @@ -875,9 +877,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -907,9 +909,9 @@ "outputs": [ { "data": { - "image/png": "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\nTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1023,7 +1025,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 28, @@ -1032,9 +1034,9 @@ }, { "data": { - "image/png": "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\nluKTIylGlUqYsKkZZ/mbetoFju0tliVNMWOz/EnQvh/v08Djdeszgd8lyzuJY2Y+3+OQuiCW9w/K\nLpZ8LHJY9cFOLypJ6l9pBjmUJOkZBg5JUiYGDklSJgYOSUDocjsw0Pxjl1vV67hVPRL2qpJyEkuP\nn34WSx53YwZASZKeYeCQJGVi4JAkZWLgkCRlYuCQJGVi4JCkLhkaat3luVLpderSszuuJCCerqJT\nVTfz3+64kqSuMnBIkjIxcEiSMjFwSJIyMXBIkjIxcEiSMjFwSJIyMXBIkjIxcEiSMjFwSJIy6Ubg\nOALYANwPnNrimHOS/euAQ5Jtc4HrgfXA3cDJxSZTkpRG0YFjEFhFCB4HAsuA+Q3HLAb2A/YHTgDO\nTbY/BfwN8HJgIXBik3MlSV1WdOBYAGwENhMCwWpgacMxS4BLkuWbgFnAPsAvgTuS7b8F7gX2LTa5\nkqSJFB04ZgNb6ta3JtsmOmZOwzHDhCqsm3JOnyQpo+kFXz/tIMGNw/vWn/ds4ArgFELJY5yRkZFn\nlqvVKtVqNVMCpamkUoHR0eb7hoa6mxZ1T61Wo1ar5Xa9oufjWAiMENo4AE4DdgBn1h1zHlAjVGNB\naEhfBDwE7AH8O/A94Owm13c+DikD59yIl/Nx7HIrodF7GJgBHAOsaThmDXBcsrwQ+DUhaAwAFwH3\n0DxoSJJ6oOiqqu3AScC1hB5WFxEauVck+88Hrib0rNoIPAYsT/a9FngPcCdwe7LtNOCagtMsSWrD\nqWOlKcSqqnhN1P60bVt+95psVZWBQ5pCDBzllPf/W+xtHJKkPmPgkCRlYuCQJGVi4JAkZWLgkPpM\npRIaU5t9fDtcebBXldRn7DnVf+xVJUkqNQOHJCkTA4ckKRMDh1RSrRrBbQBX0Wwcl0rKRvCpw8Zx\nSVKpGTgkSZkYOCRJmRg4JEmZGDgkSZkYOCRJmRg4JEmZGDgkKXJDQ81f9qxUepMeXwCUSsoXANXp\nz4AvAEp9zLk1FCNLHFLELFWoHUsc0hRlqUJlY+CQuqBdcIDwV2Ozz7ZtvU231IxVVVIXWOWkIlhV\nJUkqBQOHlBPbKjRVWFUl5cTqKHWbVVWSpFKY3usESJI6MzYUSStFlYCtqpJyYlWVysKqKqmLbACX\nLHFImViqUD+wxCEVoFXJwlKFVHzgOALYANwPnNrimHOS/euAQzKeKxVidNQhQKRWigwcg8AqQgA4\n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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEUCAYAAAA8+dFZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGhJJREFUeJzt3Xu0ZGV55/Hvz8YL3kKfxNERUByF2O3SCWqQFTMjXhdp\nFdROBLoTlRkFjR0vk0wYV7zNOCsTHa/EJYNLVDQ2eIE4OIJ4BaV18I5KHxCWQ4bLGmLs9oZRuTzz\nR9XBsjhVZ+/u2lV1Tn8/a9Xq2u9+966n3lXdT7/73ft9U1VIktTUnWYdgCRpdTFxSJJaMXFIklox\ncUiSWjFxSJJaMXFIklrpNHEkOTrJFUmuSnLKMvsfmuRLSX6e5M/bHCtJmo109RxHknXAlcCTgOuB\nrwAnVNXiQJ37AA8EngHsrqo3NT1WkjQbXfY4jgCurqprqupm4Gzg2MEKVfX9qvoqcHPbYyVJs9Fl\n4jgQuHZg+7p+WdfHSpI61GXi2JtrYM6DIklzar8Oz309cPDA9sH0eg4TOzaJCUaS9kBVZU+P7bLH\n8VXg0CSHJLkLcBxw3oi6w1+g8bFV1fnrNa95TefHrVR31P425cNlw9vPetaz5rYt2xzbpJ7tObn2\nHLe/Sbs1KZtGW+5Ne07j7/retOfw9t7qrMdRVbck2QZcCKwDzqiqxSQn9/efnuR+9O6YujdwW5KX\nAhur6qfLHdtVrCs56qijOj9upbqj9rcpHy7b0++1N/bmM5se26Se7Tm59hy3v0m7tSnr2jz/XR+1\nbxa/zc5ux52GJLWa4583mzdv5pxzzpl1GGuG7Tk5tuVkJaHm9FKVVpkNGzbMOoQ1xfacHNtyvpg4\ndLuNGzfOOoQ1xfacHNtyvpg4JEmtmDgkSa2YOCRJrZg4JEmtmDgkSa2YOCRJrZg4JEmtmDgkSa2Y\nOCRJrZg4JEmtmDgkSa2YOCRJrZg4JEmtmDgkSa2YOCRJrZg4JO3TFhYgueNrYWHWkc0vE4ekNWFU\nAlgpCezeDVV3fO3ePb3YV5v9Zh2AJE3CUgJYTvZ4dW0txx6HJKkVE4ckqRUThySpFROHJKkVE4ck\nqRUThySpFW/HlbTmrV8/+pbc9eunG8taYOKQtObt2jXrCNYWL1VJ0jKWeilOR3JH9jgkaRnjein7\n+pPo9jgkSa2YOCRJrZg4JEmtmDgkSa2YOCRJrZg4JEmtdJo4khyd5IokVyU5ZUSdU/v7L0ty+ED5\n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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1085,15 +1087,15 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/lib/pymodules/python2.7/matplotlib/collections.py:548: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n", - " if self._edgecolors == 'face':\n" + "/usr/local/lib/python2.7/dist-packages/matplotlib/collections.py:590: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n", + " if self._edgecolors == str('face'):\n" ] }, { "data": { - "image/png": "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\ngg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWEAAAD7CAYAAAC7dSVGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4VMXewPHvbN9NsumdEBJIQofQe68qKMWGihX7Fcu9\ndr1XBcu1FyygiIooIKiAdKQTEmooSSC997LZZPvuvH8sr+Ve9aIgoO7nec7zZM/OnjNzzuS3Z+fM\nmRFSSnx8fHx8zg/F+c6Aj4+Pz1+ZLwj7+Pj4nEe+IOzj4+NzHvmCsI+Pj8955AvCPj4+PueRLwj7\n+Pj4nEeq852B/yeE8PWV8/HxOW1SSvFbP/tb4s2Z7O+XXDBBGOBc9VmeNm0aK1asOCf7Olf+jGWC\nP2e5/oxlgnNbLiHOPB7O+RVpHz/jvf28CyoI+/j4+Jwr6vOdgVN8QdjHx+cv6UIJfhdKPs6pTp06\nne8snHV/xjLBn7Ncf8YywR+vXPrznYFT/pJBuHPnzuc7C2fdn7FM8Ocs15+xTPDHK5evOcLHx8fn\nPLpQgt+Fkg8fHx+fc8p3Jezj4+NzHl0owe9CyYePj4/POeW7Evbx8fE5j3xB2MfHx+c8OpMuakKI\nOOBjIAKQwHwp5Ru/ZVu+IOzj4/OXdIbBzwncJ6U8LITwBw4IITZJKbPPcT58fHx8/pjOpDlCSlkF\nVJ36u0UIkQ3EAL4g7OPj43M6zlbwE0K0A1KB9POZDx+f80parQj9hfIgqs8fwdm4MXeqKeILYLaU\nsuW3bMM3qLvPhc9m/Z9JPB+/T/OuD7FRcw4y5PNnoPoVy08RQqiBFcBiKeVXvzUfviDsc/bZLb/8\nflkBOOynv70Fz//PJKJnb3RTbyd31cVUseX0t+3zl6X+Fct/Et4BjT8AsqSUr51JPs44CAshJggh\ncoQQuUKIh34hXV8hhEsIMfVM9+lzAZMSKnNgwU1grv/pNEXZ8MmL3uRIHL/QlCbcLlj0EhTn/eJu\nRe9+KMZeRFB9NKV8iQfXby6Cz1+D/lcsP2EwcC0wUghx6NQy4bfk44yCsBBCCbwFTAA6A1cLIf5r\nPLtT6V4A1gO/yxQhPueZlGDeALXPQLte0FAKz40A2080kzls8OFcKCvAwRZsrPzZzQY01kBQGBT8\n901niaSZLACESoVy8UqitiqJrRlAKSvB7QKP++yUz+MEU9rZ2ZbPBeFMroSllLuklAopZU8pZeqp\nZf1vyceZXgn3A/KklEVSSifwOXDpT6T7G97G69oz3J/PueaoBsdpnLbqx6D4YjBe7n095V/QZQxk\nrv1xOo8b2qZAn1HIoGDMPI2Huh+nqc+Hk2shfxPNYTHQfxQMHvfd2xIXJt6mgFRMfP3deiEEqiee\nJ+KZbVipoGXfHDBVeN90neGVsSUbSl/9/nXlL1+Z+1z4zrRN+Gw50yAcC5T+4HXZqXXfEULE4g3M\n75xa5ZvQ84/CcgKOTQR18Her5A9On5Q27x/W/eDIgdiFoDv1Qyh5MFz9MhzdADk7vOuy18KJDdCh\nK/QYAuX5qOmDwXHt9/vM/hreSILlV0Fsf++6wGAwNX6XxCGPUcd8mlARwz9+lGWRlIKIaUPSlg5o\nVr+MY+/r3jeWvwuzp4C5CmzVPy5n1Q5Yey18czVUH/zpY2E+DLVfgr0CCnfCv8af3jH0uWCpVae/\n/J7OdPOnE1BfAx6WUspTjdk/2xwxbdq07/7u1KnT7zZI9O7du3+X7Z5PZ7tMShyMiXgaizuUnZ8t\nA6DZoMSiUxLV4ACga9fFtFbFEGM4xt7S23B7lMCn8INJGBW64Qz64O+0BoeT3LiJld3m4Ty0hNBG\nFxHvvYJidhWe1VUUGrMJthYxoHo+einZF3ApuSvXsHv3brp6aij9dBF+jlraJm+msVsUOfpBiKwk\nTtQs+6+8K2LaMfyxBwjrZae2fBm6xV9Q60miw45tMGYNG2c9QZM+gZTSdQT6lxOWfBJ3nob0wFtp\n3JID5PzXNg0KE6kBvUn/Yi1Ttv8NRbGbpUuW/KZj+2esf/D7lisrK4vs7F/9HMQvUv2a6Pc73mI4\n0yBcDsT94HUc3qvhH+oNfH5qdtQwYKIQwimlXPWfGzuXM9DOmDHjnO3rXDlrZXLZoS4DGgcS2vYR\nZvh1BeBtiolDw+VEQ/16nHUHIGUbija7uHJIL8heAh0uBbXfj7c39VJ4oiv0ncnlKZ0h5xBonEh1\nK6a2SQQ5tpLaegIczXDDetj0FH1HzqJv4jAAussGutTvx9R/Bdq4+yhKDGWS9VKMB16D7C+h11D4\n2xxv8K8qgx1r8IwYhNxaQPCUy6ntWE/ywd2IIfFwIJ+JDRugcyx4DFAaAfHpMPQoE/VJv3xcjqcR\nH9QLtrogIpwZ06fDrtUwatovf+4n/BnrH5y7cp2N2ZbVyrOQkbPgTIPwfiDp1BMjFcCVwNU/TCCl\nTPz/v4UQHwKrfyoA+5wF7mawZELA0NP/jHSD+EFttNTDyimQEgjd5oGuLQAuPGygjr4EgqsZCm5A\n5W/EaotFc/wAdEqBnQ9C3EhwNkNrObgs4BcDZTkw+ArY9i2sOgTVlfDGKtyrjuP/xCGozQOVH7Tt\nC5oQ6D4d3Ke6sEmJp+IgLZ13Yzw0lGO925NAR4z6dvD3l2Hek3AyE+6fDsMuhvFXQHgMirTVuOpA\ntbkBXUg0LX4JBIxogJ7+8OERmPgq+G+GNc/A1Big4aePj6kG8vZC4UEIaYR2CaAzwu0fw9xboF3H\n33SqfM6/X3Ul/Ds6ozZhKaULuBvYAGQBS6WU2UKI24QQt52NDPr8Ckoj1M6D3IvAeuz0PlP5/vd/\nSwkb7gJTHkSP/C4AAygQjCCEmcRC1VwIiId2m9EbP0Lx4GzkkeVgrYd9n8GKK2FVXyj4HFpd8O4j\nsPUkNLdCew18vAvZsTOKpn2oLMVg6AJiEBSdhPk3g80N1cehpYmRB59H0a0vxotyqI+NRe5YREKx\nC0xVoFTCPXPh1S/h359DYAg8OQN2fgNTJqK8bRxVLRoaH9vFifcqqP6oieIjY2ge1Qk5ayDmsnTs\nEZOQ2t6YjylwNTb++Ng47bDuFXhlCviHQGx7yHgJZBgoVPDtCkjueRZOnM/5oNae/vJ7OuPvAinl\nOmDdf6x772fS3nim+/urk04nqFQ//3Msdi6cHAMte0Db0Rssfo4lG8pfgZhT35fOVig6Bj3jwH8k\nuG1gNsHOxShOphHfuy9tqvdC9XbQX4HY+Jg3UNXZ4IN7oL0Hjj0HtR1hM3CHHj64GKY8CO07wXOj\nYeDt8PV9yNatuGODUTROhDZVEDgR+r4BG5bDJy+BvRyCHiY61A4163F/tQ2H8gQ99jRBwE54/nW4\n/2lI6gjqU52Iuod5b+aF3AQPDcbjCSZweDtanp6Mf14WivXpxPYAu01LKx5UxftpCTaiWNtI4bzj\n2IuLibr9duKeeBxV5tewbyW01cMz6ZDYB4qeg9xF3i+gkjx4bAH0HIq0WvG0tKAMDz87J7mpDjQ6\nMPifne35/LQL5Er4AsmGz+ly5+biLihAe8klP51A2x66HIeKf0H+7RD/HB5NEAIV4j/viTZu8nZB\nc9aBOgx2PAmxevjUBLHpsH0AKDtCRV+wmGhnTsdz6FvQG1AULga9E5KD4bo2yIJKCFIgogMgZR/0\nj4Tad6G7G7qPA4MCRt8OQ2YikzpjDihBkxuH+tGlmK4IIuCrbZDcFcWtj0Nye1g5G0Qw7uMFKNat\n5djcaSSMWo+i7nVoMwmeuw3uug5eWwjhEbhx0FL8GMLRRGFKAM77ItG0n0jUMQNJz29DdfwwfHEE\nDCGomp+HoV2hRIO+bjfUVqC8OQi1rEQXW4l4ayIMvRluexu+aA9xH5w6tjHgrgN9T9i5GtvYO2jq\n3hNFSAih33zz8ydNSqhOB3sjuKwohRWJ/O/zAWBuhH9Og1e3/pbq4fNrXCDR7wLJhs/p8jQ1Yb7/\nfjTjxiE0mp9OpDBA7AtwZBhkXU5rz48wU0oMQ36cLmwa2MtAFQxle8BVBzHxoN8MtlTotxzqtkPA\nMYhMoFfBOtzRrciSVjzVEjdaXK5Ajo+dTo9tL6KolyjUFsToO6FlAbQEwM5qOP533FKFc+BQdMYw\nhHECgiXoouZTeO8cEtzhSB6npuoe9FttBBS0QXTsDiKALP+OdAzeQtJX2/Ez/wvG3AzrFsKdL8PD\nM+Fvk7Ev+ITsgDWE6FrQ6CLokqVGtSUTqjKh0QpFBrhYB5VrIeFikAcgZB4oj0JIApTPxehfAifM\n4FoFqcPAsx8yj4MhGsv2O3Cpb8EYUAxaP2RNNRZLMPbFi9EMGULQm2+iMBp/+lw4LVD4FaQ/DtID\n45aiDSzAwlr8uPjHaV1OmHMNuN2g8I0o8Lu7QKLfBZINn9MlzWZkayuuzEzUffv+fEIhwDgWyl/H\nUb+QrNAiIumHkh8EblcjqIJxSjfKtOdQJLmhw4dQnwSbXgH/zpBbDKGJ0FsDCQ0oa/UgOsG765G5\naYjDK4j8bClKvRN3kxJ7pAXNwYUoe4xD2I5AQjWMHw36FFyvvYS84Q6k0oIJIxnsRzntIhJMKYj8\nQ4QfrKFhViBl6kLCv8lFd7SJrieteHrE4MhxolUdQ1V0OUQ0wOFCcNfA2KNo75xIj3c3IxoOQNEe\nEK+BOgCiH4Rdr8MAAe3K4OCNYI3EsSQATeokSL2ZlsLl+OWGIgJDoEsIFBTAySMQGeBtjjlcgb4X\nlG1+FaV/Gro2FjxZx9G8vgW/7t2RUv5305D0QPl2yP0MnC2QcBmMXwbG9qALRq1bSyPPY2A8AhXY\nsr39q5UqUGng+id/n8rj82MXSO8I39ftH4xmzBi0l12GMj7+fyeOfxSCxuB2VyLdJswU/fh9ZwNu\nVQjv27fT0BgIG1rgkS7gNEPzYRg5BV5cDg+/DYkaqJwMWWEQIuDIJpRpy9C51Sy97h7qx7eFdu3Q\neVpx17jw1Lnh9iPQJgmqFuNu/QRzRhr2TRtp9mxmIbHUUs8IuuIseB17u3VY7w3CGDqNaMNHmEYM\novrOSTRjpOT9BjT+fVBN2A6jikD3DzhRD7Zkasf8m7Q7u+B6PRVKd8CQudBpDvScCxtzobAZRs2E\nhH+DUod02lC0K4GAE1CxHv2uTFxhtdBcAZY2kGcDTx9I7gFBByEqCXebyfhro2g8UodC2YJ67BjU\nKR2A/+gq1ZgDex+D9ZdD/RHoPwfGLYGkKyCiD+i8D70oVQ4kEif54LFBxQPez6etgd5joO84fM6B\nC+SROV8Q/oMRSiXqIUNwnE7HeIUKPFbCW3VEWQPR1XyFu7UYN1aozEVuWkTR0kVc+fxjhBUUQ1ER\nqKOgsQfcuRmSu4OnDMwzwD8R0jZCoxYqCmDnfJjxIAzsTM+qbQSEhKBuLEF0UqJJUKKceh00H4GI\njtDFitqZgbarH8IAtWlzaOcuI4VXKGUK8tgGNO7h+G3thcYzFZUqhUjnP1B/raTApCPyrvbow2qR\npipvucY8AA1RlMkyCio+ILkyG7XftcicGIibBJExcGwZvP8eDBoD1q8g6RbQa5AH4nGlRYMWYCPK\nIWrqbxyFJTQB9pyE0Cjwb4L2+bhin8baoqNl2TYC7r6J2HFtkFoF1qx9eI7dC/JUD/7MBbB2KuQs\ngqQZMHEF9JgNhoifPC3OzFC09ERNIrRkgHkdWHPhm/fhkllnoZb4nBbtr1h+R74g/Efh8Xz3p2bI\nEJy7dnlfNP7MSGUAlmNg3oSo2EFIeS0NO5bAk71wPJ6IfHsm1cfTCWi2ENLkhLHXQ/+pcNt8ZP/O\nWHdvpeHajngaHgD10/DisxCsh5HD4JbZkJAOuV3B/D5Da3ehix0Kk66B4wGI6XO9Aar0LQjchavB\nD4+liMCrqnDWXknbk0e5dvH7JO6Mps28bmjWnURUA/u/AIUCWZJHzUsLsW3MIvu6f+O+52ms0dk4\n3hyGLD8BKgWOqHKCCjIJj59F8OhV0L0Zx8EDuB/r43302TMI/v0pTLsZicLbh9owAE+9RNHnNmi/\nHUyPQfBFhNunUndLKTKqCfqYQO6Exevg4FI0FjNBHYJR5XyEqA9DEXMjxEOL8jOk6W1oqYHtH4N+\nKgx8HkK7gN38i6eyy65VaJojcHASsldAwHjYvRkGTgLN7/wf7/O9C+RK2Ncm/EfQXAWFu6HLJaDS\nooyLw1126sHEBS/DkLGI/3+u0tUK9Zuhdi04Srx39POthGVr8WSXoDR2RTFuKl8klKKz+DFpVSY8\n8eWPbgTZ359B2R2f02aSQJF5B9hXwoAu4DkO7faBoxCyXRCQAke0aP1sUN8EjoOIhkY4tggS/SH5\nUjy5ApdrF80z2uBXnYKuqjOK428ibAEErayHg1/BkLEwYRZy/zo8919J+YfLCOjcgYih/Ri4bgGG\nvFiscV1x+5/E9fQAWhNDaEzyI66yB4m6qaDVQP4GXBY3ro9P4KduhAcfhYBA5L6deGL9UVi1CN0Q\npNyNOLYCIiJg3UoY3IrSto5IhxM0FohMhUFLoWw3KtNRCDNBxT5YXwyFNTjHDMf8SCP+WQLnsSdQ\nBUSgGDwL1iyDPuNh+xxIHAWdT41j5bSCuQJC2n93fA3mBpxrM1BOi0ObvgAumgjfroOnz90Toz5c\nMNHvAsmGz8+SEj67CXpeAa2VkDYXhr+A0OuRFguiSy+4fjwT7o6Ew+tAoYHQMdDhCah4GmLmQeUU\ntLXfwo2vQdcbSXMewW46wOiGx3Hd/DWqUwFYlmZQf+so/MfZiJ5zA/qWTDC/BX4eGHIXfKiGK1d7\n83VsOuSkQVM7iDDDiNfhi/4QooOMAyDioOxxFE4Puojr0FVOhYBkXNyH8A9ADP4Yot8ERxz8awUS\nKJv7Hq5mG1ErN6KPiYCUHqQtWULCjBn4N59Arr6OojaVBGQ7aWeNRowfBpYMsAVBXH8w7qXomlA6\npX2O4q0jUGRE+m+DoCiE/WnQlyFasxAuAwSHQpQR4izgsKLdZsPtp0Jk5aMYHwvdZkLOe9B+EkQP\ngzfvh4n+uG2bUFS70C0JwxrVFXPe4/jf8iaaUTMRbw8BjYCLfjDamkIFX10DKY9DdSkMu4yy5F7o\nA4045Vf0MEQiduXC8PtAdTYm3PE5bb4bcz6npToHyg+DWgeB7cDWCIsHoE7tijM9HRKaYGAUzmY9\ndHoNun8ER3eA6S0QEuo83sCgDYSUK9nvKSWtYRsXrXkZo0NPecWNtH6ZiPOpcConDULfSYkuJR7/\n3E8hRAkHquFYMthH4LH4s5y9vMRKNk+6CZllwa2txeWwU58xF7eiGGcyuB1KsnoMpaF3ADa9B2do\nA9JaCemPIgorYOJhiB0Kh7+Fu18BtYaGRR/RvG4TxpG90Y8cCyk9ADA2l8GKOTj3b2XT1JmE1IUS\nNvERRJmAzP1wYj6svhL2rMExxk7F1eEorlZBWAOySzOuuwNw3/AOPPMGmAoQgWUoHnoFxlwCw+vB\nVQBOG1h7wYgncRmcyNVTvU//WWtBF4as+RLKDiG/fh9rp0pC58ejGHIHfiYXgZRydNjFmF5/Glqb\noM9NP+5eplRD5QFw7oOdq2BaIlXtuxK/r5kGTS37+o2BIxYYNur81K+/sjNojhBCLBRCVAshjp5p\nNnxB+EKn1kPqldDtMu/rfn+HtiNRJwjvzbnOt8AH+Th3+YE0eq+c3U3Q+BqEXQ2lx6CumNbOU9jS\nsoO02t3cf9sDlAVHosxyEFoSTUl1K1WZKiK+ycbv8Q0Q0Ak0ft7Hl4fPBulGzhmAVVGDjo00cYSN\n4cUUBIdQZGzE6XYRtHM+mDUogvTIUVEkf7Uazc3VuLd3QdUyGbH1G2iKQzlkMWLO1TCnM3S6DUoX\nIZ1O1NHRdFp+F6E3XAOVhd8Vv9nYBnNcLOsC19L93jkENigg933o0gD5uyCzGOI7IGt1BH9gImFV\nCc5Ju2HkM8jIbFwlrSjTlyE/nYqMj0XZzomQdqh/AowdwNYZlgOpw1Ba/SEoEbvBCutugopdlGur\nqLAshuc307roXgw1ExC1taANgD5jUAZo6DLMSID9KFLUwNZvvf18f2jQwxCcAE8tgftep2faUvzz\ni2jjDsXvQDaMGATyB237rc3w3mPw4u2w8VPvOfU5+86sTfhDvJNZnDFfED5XpPT2H/2VNp9M58XU\nv5H7/7doYwbAuHdQiUxc+0+N06tW09gxDqbGwYujwVALqECphZzXYa+Z9WEGFhirmf7Z82ivuAHd\nsFvIvTgRU0QLQfXt8SydgTK2AwgXFNd7u1MZ9TDmadAHIPrNxCDtDOUWbmICTxR1JJYWigZ24tNr\nr6QyOQTPkN4ogrogI97Gsd2BvrcSQ0I5YsdsqFwNJRvg6YFwYDscrIR9x0DZAVG4FOMll6BoOgnv\n/BNyD313zJyhzeyJPs64FcVE+ZnAUgaMgIZh0L0FFFmgS8R591PU943E5S+wvzkbuXYP7mg9mjKB\nwnQILnkVV9B0nAdVuDY9D25/CLobNKlgDQVjG3AqUBcUocnbjWXKkzRTySbFAsJcibhECS5FIdoh\nb0HnQXAyHQqWIwI06K8ZjJh5u3cbZjPyq+eQlseQnlODAg19HPI3QEsrXDqLnRNng8dFxMGTxB3J\nomlQL3BVg6UF1n0Mz98CW5dBoB90SQEhcNKKhf8YB9nnzJxBEJZS7gQa//udX88XhM8VIaD6cbD8\nuilyRh1eQoZFT+dKN4cdp66IhAIx4T10A7/vK3yk/1UQ0xfMLWA9ALU6OHEEwsMwdbyIzPgOPLZx\nIa6BLgovV+GnXE+jui26Hl8S/dge2qpfAiS0NIAnGIKCIGWMN98TH4a6RkRMJ4I2fUGiuzeaxmmo\nZQ2jFuzl+vyx6JqCMeXkU68+Se0796G/xI2iQwTCpgVbbwjpBcFKmDwZlBq44QlIHQvKHt6HGmyN\nkHcQjm+AYAkLb0A+EMflGx5g3NxF6Dx6sAdAJZBkhj5pEJQCEQaoayRbW4JiUE/8mpUYKnOQWQuR\n82pRhD6EmLoSERQPvbtj36nDkd8CB7eAXyYcLof2bSHvAAy7DlFtQTqgUNyA2U9Np0MVqP75NuaM\nPgQc6Aj1ZRCTDA98CAY91Jqg0y0oLEWI2w9BYir1B/aTVjcNWm9DNs9FKvGOErfhAxjdjc5bV8Pl\nd+FnV6Ef1UqmaR/y6+fhxdu840U8/hHMug5al0BEFwBqOUg522ilBBetZ6VK/uX5uqj9BQVcBAWD\noGH+aSWXtQU0f5zFuycz+ChUwTM1Jpa0uJEle8HRiO6hBT/+wJz3vaM5RydBi0SmPUF1NzvZtxVz\nhXyXRGcj0auzSZi3ntijRaSEvs569gAgEAgUEDcZRr4A0++HpMne7Sb0hbJ8GHitt6fAkm5ozaOg\n72Sky4rYN4OQliqC91ejkR7Wzx7PwpG3U3PVZhj3Cph2QP/rYOYBWL8TUv2h5yiY/iCMmAH9noFV\n10NDNfT0wNdPwK5vEEdrUKgViHG9YUQ7SLXBNWawH4C0o1BWDR6Bq3oz1XXZBComEOAwYb01BQa3\nompRo3j0RcjIxHFwOQ3R/2B7v2mYEsfCvnI4OQcGboBOJnBWgc4A3cejMBsIsKbiZxxEMkUU3h+K\noliD8rl74bnJYGqAYzug7CRE9YKvnoX930J1Gdz+Ju/E3cX2ip7gv8zbbt00GtkdZPFn0C2Jtpnp\nUFWOOt2GuklDRGYtVW3d8ND7MHwqKCQUfQNdZ4BajwsLWbxFnutdmurnofSovF0Wt244e3Xzr+gC\n6aLmC8Lnkt8QiHoZzKvB/b9/yTgWPod9bx7GtnHMKPiU5XV3EnDoIe6tLqZ2y9/++wNRsXgsEplv\ng5oGZEQLIba19FpZQtLqCgxxt6Bq3wWitND5BYJEMG2I5hgncP1w6oC4blCxE+JGfL/O2A5yvoaE\nciioxllVROUVBTTeqKK+pxI31bjjNHhSLIzqsIq4Tmq0hiBY8Q+45mPYswJeuQO6h8PAZ6Cuybvd\n1nJvG3R2KQwdCamdoa0VKdS4317G6u6vgl5AewFJidCkBBkKQ9+BQS+DNoyTPeNI+rIR0aU3LTHx\nyBPpkKVF9NHBq7fgeW426muuwr5EwXT/t3F3HUxDUAtsskOrBGMxdNLCoihozEJ4HMS9nItf6VKM\nNWUY4kNx7TLiMSvw1FXAjhUwZzKoO0L+PugcAeOfhQ0zcFa/SIXJSrBYjmjshrBuhPxREAJMrkCG\nrsWRaIDNX8G3LhAhdHQH4N+cjWdpOHzdAVYngjEPt1xH84EetBweQFxpDTG1TmL2vYrInAnffgyr\nvziT2uij/BXL78gXhM8lpwPC7oeol6DsBnD/cqd+T34mAfPmoazbA0VFKOLuZtLBl/ln3SPkRFZR\ndmQMlD8KjV/gp67xtjtH25HFlSCiUeT0QB3xMZo+96KN1CGq3wc/AxgDIa8EbPWkejrxDVtI5/CP\nd25tAPX3g9K4DVqkNQ8CL8Pj0qLcfhT1tgZsJ2No1gxE6VLg1LhxVPUlqvhediqj2Vv4BAQPhr5X\ngewI6z6Eke9DbHeoyISdM2HtIPi4OySpoVwDG0OQMgrb7BQ4tJiYoMPQvgn2ZEDErYAbAvtAhyuh\nbidSpaGsTTRtdtZBQjSu4Fb0aQ7chiDE1Suga0+cL/XEMqoNhgzBs13KCOg/BedgLTTZIDceGiOR\nmv3IcDOoGkBEIEQ+akcDrWHRhBvfJvS1bKoXrqYpToe1sz88tQwGXgEyEEI7wCUPwO3HUX9znJdr\nr+Pm4H+B0x82tUW01iJ2xcCzGhjSgYD7K5HXhyPjjfCpG5H6LKaLD7D9sndx5wbT7NBjbjJgdkSj\n1f6NoO6HCIt7g8DQWYjRtZC6FJashqM/Mx+ez+nxXQn/Be3fAl++A5pknJFPUFZ/M7ha4OgWKMoE\nlwPM9VBbjDyyHld2OfrwShTHN4B/HBw6DAM/IqS6K4N2l7IkbCGPKG+gxW2iU+g3cGw8YvBxxBAg\nNhx6TobgGZDwJHJzKnLgC+DIBK0Hjj4PO27BXxFABxLI5VSPBLsNVr4AWccBgQPvFWvLXZdSdKWR\no4nvkvVJSoYEAAAgAElEQVRwJNmPxKHf04ynixFj7RGEHfwUdiK2bEPX7MeQigIsm+qQs17xfjnk\n50DfIdCmC0TGQ91eCB8Azt5wPB421kOnGfDialxX3YFKtwNFl5UkNW6EJcHQ2AzNx2D4DmTGB3jW\n9YWY0Zgik2mfX4vwtCLT/kVQXQl17SJBMwjrS4/QuqiC6ggHnruSyejRkdt2P0Hgl9OQthZktxtw\nBYbgzq3DnqvBEeOPPQpKxik4eVkQlZEpGKwCta0tfHMz0Z9MJri+Hq3CAzkfAYdg+sUQHg5N+yDz\nRVB+ReswPeojdrBlwGQ3xPrDG+8guo5E6G9mb87tMCQMHslFTm2BJ68naPUSbIYdVPVpwpl6KX4e\nF0Gpz6PtegvkbILGCqQmBNSB3vM08TK46e7zUIn/RM6si9pnwB4gWQhRKoT4zWOl+x7WOJd6j4LJ\nkVB4HPW9b5DnDEHzYgrhh6sQKYMgqgPo/EEXgP3gBlSdApEnvoXR9yBy10BNBtx3HEoyULqbebBy\nGce6PcCMpjgujz1I8oEK5EE1+E1AtKbBwH7e/QoBVgeepStQDr0Psvci3dug3A8FCqYygT0cwIMH\nxaKnIOMFuPF1HKosslhKMDcQFToaaUtD44hH7/TgfxhUPQcRvmc7zrAG3Hkgu7VB3WcYrHmOkXuG\nsPHz/Zjv1mPMywSjFu563JuX0FjvHN2Ld0J2Jjz9GeQ8CwlGZP0R0LhRqCKQ1SkUtkQSYd8NqoGw\neyVkVEOwDU/nzhA1guaiJ0nIqYD2dmSwHaslGUdaMTIwDfM+O47WV3BNHMWm5HCiFWnUZ9QhVtai\nTtGx58FCjCet+A2IRqEz0hTThg7aApQWM8JgJMA4G+WuJyDnAIx4BoJLEP4ZiEA9xAOeBkANogSq\nX4b162HiNPbss3OpaAD/l6DhcUhfDK99Dm36wLqbsLQORC4zwfDJiJR15I2JReZ9Td/7S7FNCCOk\n3VzE3nfAeDsEjyC3aDtFtz6JkzKMNBOKERrqod/g81eX/wzOoJlBSnn1/051enxB+FzSaGHWXMjY\nQKu7iJbYRjY8dBGdqs30cT6IKziKCr2dElU1SfPfou7SGEqvu4mh6u74bZsJMVNgx3wY/yR8PB2O\nLKVr77+zIkjBt+9UIC/aBbvtkBUCej24T/3Qac2GweUoPKvxFM5D4VSCbjJCFQVF+xHt+jCYPrDm\nAzA3QBeJ1Jgxee4lUXE5G9jGJZb+JB5ahAwaRVXnCIIueQUFAUhmo8v7FtQStKNAtwUe+4qqCReh\nPF7Nvp3/ZvSWI/DQEljdGwIfhoydkHfEO2XQsy9C5WKoPQhrLqJhaG807TtjSNiIwv4YLYNrsMsJ\naK/tAekaOLkBKhNRfH6I0o53EWo3I0qc2HaDPdRAQFo14sqpqAMDCO2UQfnsFtp93IxhewvZiRMJ\nKZuPOs5DyJImBrdNhfhroOIeSICq+OGUGa0kVWehtNeBeB2ihsCSufDUSliSAWhgdH/Ib4H4kZAy\nAJzPwzI3DFmMo0Mnlq2oZPI1IFZ8BOvN8NowiBsGQg3VOgZsfgcxqTeOtoG4Az3EnUhDU9MDMaon\n+SW7KVgzk/Ztw6ntfg8HataQOXU0FnGCMYR4AzBATSWE6qElB5z1oI0FQ7vzVLH/oC6Q6OdrjjjX\npt4JU+/C+sEd+NkE08SLHAo3crxpBmUr+qNbPp2eC/9OSLyTxPY9mPDJPPwWDIIWCdYC2PRP+OIK\n75N0lSegvhz17G4MPbYVUdEfJmqRX69FKo2Q9m9wmaHoFYThKJ4DEcidB8A/FFGpgUuegdVPeQcT\nf+9RMNXDA+9CYCKeBIl016GSoYyUF7HF8ykyZRGtnWaht3VCYZOQewLRkANJI6BtJwgsAYJh7Roi\n73mIhB4RdFzyIaa7X4BjG+HtQph3P1x2MzQUQ7I/eJrB6QG7DcvUt6jq1gyGVpSiG64296BQO9g7\ntBx5bAPkroCgcLjhDWTnSETtQfwqGyBxMuq27TEo/NE/9RKGQDdi20rcohxDfSOu6aN4KeI9BtSD\nX2MYnitiafowEHQgR16NbAnD4jZjqjpEO81YlAEK2Ake43Fsys047VWwdzUkD4SenWHYP2HqF9Cy\nHbZcg+2LQ1T2yKNy4H4KSx4lXmdHqqMhLx0GDwS1A44+CY+3gdJ0dF1NiLx1aLZJVJXRyMA67H3S\ncUUdR3vdSgoHX0ldgAvDN/9ghGsPt9d8wXUnvyDG6vi+HpmKoOFF2NkJKpeBLub81Oc/Mt2vWH5H\nviB8ru1agOwxGJermWGPmjCIIDSqSDK6jCKmV0ciOszG/2QR6mGj0XtCwWCDyibocRPE9oGuQ+Dg\ndmhuwdPoxD3vBtAHUxebBJ7hyJxuiGk1iC2HwWCG+SNgxz5wulBY7MitH2NvVuOUB3Asvgb6XAWP\nDoKU3nDNg97mglGvoTDNQ9XixlATSZiIJdp/EsfCwmlWrCCwphdsexoevcfbj3XA1dC0F1KeAmsf\nSH8aGRxGm2Qjmgc+YatjNZyYA7dKuMMIuvnQLQnGXgzR8eDfCn1nYTm6j+iFFrSrbVjrv6R170O0\n+6wSY3k5otIMXbvA+GGQ/jyym4G2V29BJI8BR4h30uh2CSgnXo246AkcfYZS38tJ0NuVqI4+ymzT\nlei1GpibhiM4hcaERJjeiyLNco7eeQ1CoyM5XY38agfSHQxjViFadagKzdTeHExx9HxK7ulBTfcq\nWjRHcO95HYs5CzkuHd3nNQTWtafFugyp3cfM8ffRUrcKOeUhsNWC1MCyE9C2F4wNo1UdDgOvRRza\niPpbFeJbLaYWHdbQQ9g9V9OleSMhIh6/0GHoeqxF62pBp27AU74GDt4Ne8dC+4PQ9iacXe7BFrgB\nZ0lXPLVzvx9e0+d/8/WO+AtyWGHVk1i/uha/agPK7APQWMsQptFROZZcq0Cu+Btc8Q+48WvwVIHH\nCGEpkLURTq4HhxkShoFUIIKNyMytSLebEEshPP8aiqU10OSB7k54+yC8mwv5dbBIIgwmZGwYiq2f\n8fWYLpTWV2JZ+gaeiCDoMeD7fLYdgTOgE+pmA+R5Z2PuxWDgH3g8QQhbE+x9HTK3QOp02DMEeo+E\nwB5wwgZDklBuWUBtt6sJbz8CGR5Pw/U7YMpBiOgPh7ZCXCBkpsGL42D5l7DtJHvXOFmw51bccaOp\nMdyHPsuN2xVPZG01tsB2MOQI6EeDMxtFRpo3b/Vb8OQVI1vNqGregLsD4c1RNE1VY9Iko6xzI49q\nifNkwNtPwZ1RmLeV49odjKP8aQpc89Gmb0Un2iMs/iiWHsb1kRZ2fYA45EAV+iAxn2URb5K0EXPx\nr4nHVrmQqsB/4xpYRqEcg2nBM+gnfUWidg2VaX2JOmDG0fIeZV2+pnJIKa1L9yAvuwai0yGkD7oA\nE8Q5oN9EmsIlByP6EFrdSMAJF4nm1wlrzcAx4SCutllIlw3RZSdu/y4E6EKRlWuQJ3fg3NtAg+Ze\nGqK2UxttpjVmJITfDeIC+Y39R+DrHfEXlLkK2VyLYffX+NdUwMWz4LV7iJUdUBYdp/O7m7BFSmTo\nOPj2fu8wlDED4B9HICwOnC7vwwFtOoDSgAhui7INePJOYHA0wFNPIv45EtEvGoarQTogri1Mmgcz\nOkDbSFSRFkR+GBcfdRBR48JutLDtqj6kN92HC6c3nwp/HFoLGnsP8DhBenBbSwiy1WKv2QZyClyk\ngSkD4MQb0OUVmL4AbBboMRgq9NhH9UEZEQumo4zJK6F86X0w72VYa4IjeqgvgNbDMH468oUibI/e\nRtdHmnmLWVy98SICbFfAtOvRO5uIaPKjoTEDyvPBcB2MvAV0ZnCFIQv1cHQjqlQdwhAP8XZkryKk\ntpT84bdhe3gDysRroUdXeOxaIA5RbkC9owTPjlyGPF9KSkUKQu0Pl76DaKvF/W0l8nA6rFJD4EDo\nr4OvD6MoX4uhKZKwbB0xG6rQOgaSYDmGrl0q4EKJlVXG67H2uxn/b8KJ21RH2OJKbMNd2PfeC4E6\nMB1GmWyH9FXgLCN46GsMtKWicAuoi0csuBV19W1oPwtB9p2KVUyG3d0xVO1Co8qgcVgitr4TUNoC\nCTJsIVSzihjFYYI076Eg8DxW7j8gXxD+C6gsgHfvhVduhrRVEN4e86Traek1ChEeC3fNgQET0S3/\ngA4ffoiwq9BuN2PeMQMsLtg6D2JTYdnlMOFR0EVBfBI4QyE0GRROhPRHBgty4sYi5TzY+wliXiW8\nFQJ3t4PO1dDwmneYxBgzYva/ocWENv0A+gG16PuZGZyxilSlH8r/rw6uUhxaN5qQSyDYDHv7Q/F0\nVOZ4bP4dKdSNpb5hEDL5Yhj4LsTOhKrtsOByeOcOmP4JKsdu1MGBULmKgC8W0hwTS93fX4EnN0G8\nApnfitxUguPoNmzrx2Lb+yJB7+Xx4oQFeGoLMTd2hKr5+BvKMMX0I/qDE5C5EY5sQnxZA8ddkD4P\nd6nAc9yJJ0fh7frWcSjCNZ0I+02M3v4wiuLroZ0bumzBeVKDq6oUw77DuLLsuP1S0F4bDCe+BJ0R\nAtvACzcgEnXIMY9An8mQmgy9LoVkNfKuK3A2nMCjLIAIkIH1iKOhaJvnI6WDOp6l2hFMpMuMKrMI\nTsSjnnEzofOr0WU5wPkalLQhL38kSCeYWmH5IuTeN0Bhx331xxA9GLn0bmjyg11hcGszrsK+tCRc\nj9/JYYRsDkNvm4wiaiAKRQgq2qIk/HzW8j+uC6Q5wvfb5fcUnQgTboE374AtHyOrT2JvLwirSoSI\nJm//2QnXwd0jMJRUIsskisuC0JkLaS31x29LMBQ8BW9t8F4JX/4uvHOpd3zbsXfA8Xng8kPRt5nk\npo14FndDadVDz56QnQ9NTdCmBWorcF27EGXOfDwty3Dc2R318uMocxxo+w1DVGyFA0sh5lFQJYHt\nAAZXNMK1F3JyYX4JttW5HBCP0b+hEH3EXlyBauTe4Qh1ELisUJsDad/CoHgomIM17yR+2tlQFwB7\niuk5ysLByjcZ2HgQelpwjOyFqqA9qri+aDJX0hroJKC6mcnG+UwKSGP/Iy3ExOQREOXCVPst7jgd\n4pP7qb52FM0XJ9NWaUT9agVEDUXR9ijinoehaTHs3A63v4zT+RzO43VUr9Dh5/8Z7tpFqJAYR42h\noIeZlhk3k9RwDNYeg8QE7zjMHhfKwGRkTxeuHQ+gCVRAw2iwt4dIPbLvWBSle7BOa0ZVq8FdXIQr\n3x+lMxfFwHtxBQTgIRDx8koUVhMMGwb5b4Ndgl4LT18FKX50ibaAIRqaGqDiGPi5cUeC0tGIJ0KD\nKysQ6ShD6fcuNS9fhj5hCoFCh2moggj3WDi5Gm65BYo/gzZTQPk73zn6s7pAop/vSvhssZsgZzmk\nPQvmMjCXe2dUCAuDfy2Du1/F0tkPOfwqqC+EhiZ4MBUui4T6UnKu7I59fCSEN6MeMQW/doEwthuU\ntMKT93m7JH30HCTFQc/RuAKCQRGLVKugMZbWlcFgbIDxSu8kk488CJccQ/a/Hs+xeprdUzGnOnBH\n90Sf2hsRMh4R3xGxYz00SjhhhWOjwWMG6350fi9D5HPQ5MJ5fT/Mn86i7QPbaMm6grziJznS0gN3\nyBc07xxFya0TqF5ehOW2dXBPOoz4DJOtIwZ/GyzIx9ktBE/cp/QvnAetDShdwzFobkUz8WMUXf+G\n7dLHcMW1YO1rRdFnNn4TBqNKDeNOxTzMyjD8J09HPByDoo+TmI3VJNWYUSrMeCxGVH8PQdw1A9Gv\nJ+h7gYjBZaikemUzNS/YUebUEZoaQfgmBWHPgn6gkojSGtpXtoAlHwwJMH0xqIKh/itE5UsoptmQ\ndeHIsMmw8wnIWwftr0Bx160oJ96NYUk4toRQ1EXQNDAMe4sVqyYVff4q3twwHhkfhLudHndeDiS5\n4Olr4ZKZMLIzWC2IMCf4F0NkNfWjtIh24LarsGfk4bhnPh6rCc2tWhQX3Y4x7VtCym4nuGQKsuUj\n71VZ5+nQbSSUrwKFbzqk3+wCaY64QL4L/iA8JlD8RLtbUwnkfw0nV3oDcGsZKP0AiawtwxYCrZRg\nsGfhf8iGNa4ZdWUTKmnC3j8JhZ+JNo6TWENciCwlwrYHTeQA6B0H6iKoPAoPzYLQUNiRBpdG0Dzg\nEgwZ6ai2mZCtFagjtIgKM0RKSAqCnUtgyxpkpxo8I2II/KcKee+1qCJHQfYsFL0zkLtbEWNuhqMf\ngKEzFPpD11owb4LwZ+Dgp0hjGRW7y8h6w0njP68mMT+frtuaaTlgorTCjCa1G5a0rejvM6HqUYlH\n3ImQQ1CfrITibsgOB3Df2hVDTS0idSEK/z54cODG+V3la/TbjlHdE+UlRxDmObhaO9HvMgeZ6QdY\nUHU99zVuxtOuC+5ZFsg/hOrdTJQ91Ciu740wvoe4bCbsWQQWJfKiOZg176K7xo5m5mgyIu4kwhyG\n9tB0ZGAFxI0j6IQTvastWPJgzNtg/gwK10DNKkRQGbYQPzRXPYxr/XLUMbXgUUHEa1DzMpgLoDUG\nZV0W6uT3CN35AI4mJ45Fr6OWSrR/D0C03YmtWzLauM8RvfvjsWxDZTGCrRQsRnapryV8TCgZhlpi\nCooY17wR9zYN1uOPovmbC5cnBIVBj7rwbYK21eHyvxMRkIMn3AK1N4DwRxrGIPB4e7P4/DYXyPeX\nLwj/Gra9YNsGwc/8+C60Qu2dpHLKu+C2w5qL4bAeJt2P7f/YO+/wKK4s7f9uVSd1q1uhlXMGISFA\nJBEMJjgQbIKNMTjnnGY8zjmNPbbHYZwxzjYOgG0MBpNzMCBABIEACeUculudu+t+f8g7s7M73+7O\nsOvxzs77PP086upbda9u1Tl17rnnvCegw9lZQ+PICJICw1DrIW57DYFjDrQLItFNNRMquAZvRD7V\noWWcccFyxLkXwOT7+viAL3oD7p8Pdcdh2u1w7AB8v5YIYzrqjga802Zh8bTw/eALmaEDnJ1gdUPV\nIhhhQ7E3oOg/AsdLcM+98NTHMP5dRGgOWuUq5KHvEWYbKB3AmdB8C7gPgM9F18sPcKJGz9FLr8G4\npZXzuqdj/fhlGJ5C5BtXQrgMufB+uKoIkdiO/PFzwrmHEF97sEa0I2f+BlHViam+Ds7Y30c2f/BC\nfNFpNCZCvv4FpPsuosPLMKnTCfNbwt+9i1o2FPG1i+sv78c1z6bw+ZACLvHvgcBdSF03MuEN1K9d\nkFwJLdOh313w402wrhUxfCYGrxM1Pg5LaChDPBV4vEcxu4fBqTVog14mIlkgWj4GfzO0jQV9Jqhd\nYHIjwlHoY8Yg0rPR6uqRqdMQ3afA64SeHXDKhX+QhmGtD5/+d+i1ThgwisiGXtrWF2G6sguT5w4M\nE90osR7CMbvRud+EZfMJRPjZc+kkKtIlQ/OmMP/r7zEGToI7hHmgCUueDsepaTR/sBl9RBf2KS5M\nM8yYajZCTzSesycSiLwO6b8XvfdHhHkrVJ0HoXGQPB9iUv/j5zcUAt0/Rf6P+IVMxT/dEX8NIiaC\nayF0XP/nBO22ZIhKh/fOhYa3ID8fBoyDpioiVi0j4a21JO+TJLWWkZhxGerjMxE3pRI4akLdnYzJ\n/BtSxXnkdlSg+NsRFWv7Nor0xp/4fOdDfDKMP6vPhxllwPTKezjGJdH6wEUor27B1ONEO7gXpp4H\nnVtgej6km8B5BWz4CiINcOIoNJ2ALVcgBs1AjLT20TcOnwIll0DDdrSNx3EvDFDe306FO8jgp3xM\nuCydyeYmrC//GqYYYOxeAh3lHNatoqIkEZffgHx6H27npYQ2mvCOupPmJCvq1heREyYBFgh2gT4Z\nMi7B7HiP1O6v8DnORAufQNGdgbC8gBp3J2L/IGRWPfJsH3Sc5MrLX2Xp7klUi/mgbUPslyhNZyMf\newtNjUSz7Eb7+F6ockPYBPPvwDMxBmNvNuru10nZ8AfctW2IxiCiJRZl4Fa03i6kWYWCsXBGHQxf\nARn50H8d2ItQjXNROlvRTZ1P+PMD4DgM3zwJh4NI1UWwvwG/PpH2Kx5CvfgwxnA9waPHicn5FusH\nuwlXLMFwoQHFlITu+2J613/Cyukj+fSu67BOe4I5v/+BMd9sw9hwHKK9kJOPsAI18UQNKaPw5jHk\nfbYKzTeO428Z8Aa7kUPC2LxZdIVvICxWIYLnQegq2KTChnuh6gyonAE9zVC5vY8s6t9AW/TUf16l\n49SuvoiY/wv4pzvifyGEHuxvQN1z4P0AVBskTgWdGSbcD0eKoOZ7wiWjUMc/13fOGRWIp64hefV2\niA2D+3Ww3YLpngZ05xwg+Ie56Ad9jHJ0GdGTw1CUB83/pjzO+PPAaIJFr8JV90JJFGLW9agr36LS\neYi8qIuIrV9Ph+4U8U9/iginw7ghULsVgjUwugx6OgklKOi+vhiKNMjbjkjK6duQsrigzsLB6b8j\nPOd8lDZBzNREBo+LRIlUsX35KpHrnfDWWqifC02jaZh0J0ejnRxKS+b6p7+k95pRRMV8RWh6iDbV\nSlI4gNwTRVjZh5qjIurzwT4OYRoFWe9j0qKoEveR6RtAhO2tPqJ6ACmR1kjEACfuRyqIGK3nuuvv\nwL29jmD5SfQ538GUIWAJ0Hk0kq7UIgpW7+97WV0/Hr/vD+i312IQj0HRboIDXmGXdT+9e9eRu68X\nw3d3oqgFaJV7UXTZCLsP6q+DzDfBPBSCUxHW2VD/OEpnOYGtTahlEYiJU5H1u3Anm6FXwZI6BGtw\nGHLpXWgn6tDaQhiH2QmnF4Czi7ahkTSVpnGyMZmw38eYvS1MyX8FVJUfJw8h4YM74Ne3o9RtRZQ+\nBFlzYONlkD4KZfgcWPIg8RNH0fzkIIJPn6D+tVXENd6Ic3Q0hpJXEYeeBCRcsxb33jNx5eZi3nkI\n8/P9UaQX57zRBLJTUJ0BAiWZoDcQs/kNnAlLUc65nliuRsHc93xJCS1vQM3r0GOFzJ0/m0j9XfEL\nKfT5TyX81yLyQkg1w74bwO2DtHmQOgctYRBKwn3wzvt4YnRo4g30lGJKiEdJzIHwMRhogtg5MPw+\nAHRxkkBMDKG3fo3+9SqUiMfQSqtRFu+DtipIKPhTv2Vnwdfv0rbsG8ztCvAJxukD6ek8xd7PzmHg\n8R0YMwXOGXlEDbodmr+FXgNEe6CtmXBMJuHRnejqdeBrhqU9CNkB416Htic5sg06H16EcvVQygp3\noxQ3IRlMsMGFubAVbXYJhG4ELQvRfCY56z4iRwsxe9zNaOo2lB82Ii7tQFv6INltPtBvhdIeRISC\n5jejKbFovY1Q9w4kJCMsB8kKFlNj7aL/wdmI7MfAOhhh64a6H5GLHASy4zCZC9GkmY7U/rRHZpIi\nkqBlKTUnX8YzREfB3m6UaRoy2YamlqM/0oW+UkLRdcg8yYGEGsLaSRr6RdH/aCHqzKVwZDNK+fvI\n2sXQnQ3qAERzPWRFQ8IdoFjA3Yu49HL0JXUQXUBg9ycEu2x4ro7Hpj6E2Hgn4ZqpUOfB0ZWI8bI/\noDS/gbAO5ahuBR8nTsHs9XHzgaXE1iZA8iBQ+6Q+bc9BQmVmdEteQYZtiAvm9t3j4+Xw4/dwxeNw\n7QdwcBU5r91MpD6BmGvuwb/mbWLafOiOvgNaBwy5DlyNWPJux+L4Cs7+Aeqeho0fErXODT0/gLML\nsicgr/st4di1xGwyoZ51BYryrxRwx5fQ+iXUVYPu/v87fuZfiPb7hQzjfwm8TdB7DHrrofBKqGkm\nqPfRo/4Oj78SoycOZipowW8I0UmEvJSIHWEw7oeAhG1r4KqvwdEK31wByXkYHl1G6LlZ+N58BeVX\nBWi2gyjeFvhxCUy//8/7v/Yh4pYuoLXVS8u6alKuPYJWcjGl/dagDdWhxRnQ5/ZA77dgPgQFBrAV\noqXNpcu8BMPRKIwtemhtBocZAh4IPgWL68jYLiksSICaBqROELJakPs7cMcGMUwahlFMRN1Qjuwc\nRfir1+HCFETkMbR3PkEO9SLSb4E9y1HmvwKvXAjlQYi6CxE2ojTtg1YjsmIPFOog3o9MHIfwt5OW\nnY+jag3RX8xCji8lXNmMWA4eZyKxUwVRn/9I8VcKRy4tIinxQqT4DE+SSjBvJsn1uzDWFcGR75GN\nLoIDFfwlNvzxJmLtLbgNNvotfwetfw4pX1QRyhb0cD9GezqRHeWIMi+aQUNZuw86bgb7YkjO7Ztr\nVw+ceBHF1wVHe9AVnYFyxWw0eQXC+yj+1lh07x5Fq1DpCkoyShaAr56g9xiemTFc6U4kzTIXs2FV\nn2XZ3Sdqms9LtKMBQ/w9sOtRNLMXt+5GTLpHUG98EVpr/3S/i8/BvSedyI8PIitegz9Mx9gzClZf\nAwkl0HACNk6G6DwoOBO0yyEyGYI+hM0EZz8GA8+DhCwEoDy2EZ69HhRr3/U9R6HuYbCdCSlT4GQb\nlJ7/PypCvyj8QrTfL2QY/0sQ7IG6j6Hxc0g6H9m1kqBU0VtLMOvLsDtHozSuQgpBd8CHPr0Q0VSJ\nzJ0BdZ8g4pPh4Er49DkYNwem3wWA7saX0RbcQnjZFMLxTnQ3pPYtD3tHQeSZf+o/fyBK0EXC8AJE\nVDPKPggOAe8WAaqRg2OL6F9pAi0e7NfCN9vhgRcR1nzMqz/C0BAB+tY+AhrXTqhJgEUtUFZPZEoI\n1FhoCIIuCf2LdbSPjabmshRStDQStiyEb1IQ4cWoT5QRfvwL5DAj2oNe9N8VgOqCLx+Cmh2w82sY\nPgZ+2AjmZhiSjvRmwv0CkkZDkxElZi40biJy2wuEG5rwCwv6bd+gjxUoi8MYUmJQP3fRHZFJ3JAx\nlAy7DZ9jPQ09HlJ7/fRf8Tb0DICpV+KZPYvGmE9RU/ahthiwB1sQKtgOliIsJURvW0tUVRdGNRb9\n5ydgpAPOPgghM8oPXqQzAhFS4dBjUB0NoVg4/gMMDyMD/Qg5zDgrswlzI8FVicjWSEyRbcR0hfGY\n9ALVfxwAACAASURBVCRcoENfdRLf+WPR1y0gMyYaqWvB3F4OLdlQUgyeZbD9KoJxlzJ7+gbi+w3i\nTsXO0O+fJmJRE955LyDOsGFqmIUiJezYAJ+9icxTkA+/SFB7BUPSC5Bm69uwDfbCyWWQNwFCBlj8\nMDJ1NOLgu0hpxueTHJ8kiG/7mOTwPX3nRFhAUQkc2o3B+nUf+1rO6+B4D1ofBP3dEJfRZx3/X7CG\nfyHuiH9uzP0lVC4DLfzvj9sGwND34KwqGPYxYvUQzB1OrB0mzCE9SsO3QBihMxGzdzi+HfegLX+P\nzhUbcEUWQKYX6r6Hth1w6vCfNkli7eiHW5CfrSTY6ADtIshqgLYXoPNd0Dx9bd+fhQx/jHp4ExFJ\nNpg2gdimMAcdKbjbQuQfOMaSogwqLvgNDLsc/H6o/BrP7gnojp5Cv34fmCaAUgYfrITNX4NlE7Tb\nID0CrH648gEgDa6xElNuI29dPHFPrqD3qEb9/cl4ro5AVAqURAnHnKgvGFAap8HZT4LBAMtfg0gN\n4hvgmruRmVOQ8QoM3A7eGxDRv0N4KiFlIFrcVEJHTDh8Og6PjaN5Vw5KbRhywDABmDUF09ldMAzo\n3E37nuUklRcSkfoGFA6GaXMIhVZwfICDiHADsYHZxDcWYtJCCCIQs34NLU4SqywoTo3eYUko04Io\n+hZwCUSLF9FvGMqsG6AwEZoPwMk1ENwCMxxQK6GuDa9uEFFV24l1XkRqQhxp41uIszUi+unxWKKx\nzh9L92Q3HvOPiNZMbPV3Yj6xB+r2gS0bMm6DuiQouhdj91fcpi3lhBs2ugRhdyvKiIexfNSMoaMA\nj+EBfItLkUd2wbPv0XrnJEKWb9EZZiF0P9FYFs4HLQGKfwMHdyN3f0VbgY0d03zsuWUslXcMQmk7\nSoG8iGRGQdWzfedJCcV2Gi87Cxk9FfLe7gul7FkLe4eBWwe3ZsO1CbDq9b8sA/9IOE0WNSHEuUKI\no0KI40KIe//WYfzTEv5LaK+EQ1/B7PdB/TdTFOiBYx9DfD+YMRt67QRjqvFEd2PujUJMXgr7/4Co\n3YJ1XS/towz0Pn+Y7GFnw74QJJ0L0d9A3Yfw6BGY+zvIiEV0NBNRlIfznXq0hbehvFwB9/8Bat6E\ngyXg8hFwOHDGx1FryKFw3A1EffsM2QNAXF5Gx5ub6P68gwL1CHbrxWAZDIndyNxiAsoCzIOeBWM5\nHKyCR85CjpSQHkDMfg5Kb4ZNr4G4H/Y+g/BGQFMZ+uJa7Jvq8M7TsAUcRB5eR7cai+o4gPOZKGLX\n5yI/8SAzNyLuegfCEuzp0K8N0vXIMgsMqIXHD0GHD5H4BGz9ARyVyB8mo23fg/QHiEzTKNzQTWC8\nxNGRjCWlF31kDxzchDHgg1FFsGQd6XEJkOGGw5dDxnzodx266q2UvPsK1FbjuNoHhibUNhDWqbD1\nDoh0YB0E/pmSgKkSR3M80Y0H+pIc9C9AxW6o+BEq98LcF8Fkgf2/gnAY9kqELhpr/Fdwdj9Eyw44\nchAuvwFWvk1TTw/6Qf1wWwMEgz7iO0ejWCMJ1XxARDgejh6D6bdB2A1tJ6C9E4qeJHXLrayMeQa9\n/Sh7iobzdtcAfrs7QGLSLVh67yM4qxS37iMMLU8Sd2wryFQU8dP+QDgE3z0MPzwLw+cjy67H0bWG\n2gFNGL1eBlUmo2MMXDwNjl8L2W9D/cfQuhJa3iBstuLa76D3oaew5sVA4Y/gGgVHeuC6mX33b8gU\niM/893Lxj4bT0H5CCBV4DZgMNAK7hRDLpJSVP+Mw/oGRXgZrH4HhN0DW2D//zRANbT1wdF5ftlVL\nMbK/AxEUaKEgzBqIxxxEqe3CmTEZrmhAWdqFcueXfS6Ad1+FUTfC5pdAPY724Y0oIgLCTkScCetd\nT6J9eB9KogG+/S0UT4bS31BtOEC49Hq0UByDI25D/d2XUNFCyvxb2K81kDCzluGDdNQfD7HzmJvS\ncYfJ9tUQ/vYGIjLzEBfeDnHr4cPb4QITmGyEj+ajPP0W4qbliC0SQh64/AQ8qaJ5jiEvzkSNOo4a\nMRRdtUSs2EfiqHa0XkHYkcWBc8P0iwDjY/tRx8UjyoZCTx0yQQd5CeC4G6ozEXmD4J774OQ6mPgy\nWvt2PEsfpStqCvaJEwieqiaieDFV06PQItMZ1lUKLQeh8WtC5Wb0Cx+D0dfDVS/D0ZegNQT5N0DA\nCYVTEVFpyG9uQZG7MdUGESIVlq4EgwU50YxaWE/EDiPlA0oY7V+NZs9FtDUgWh8CUwJ4QzBtFvj2\nQigBTvphnw6iwlBsh9ICGLMYudsE6yXiqZeQM+PxP96L9akp9CQvInVLf0SZHXwNaHv3ouyIhtbG\nvhp0518MZ0RD9AaIHENz1CAG73wFFCMjE1Xi1z7LPWUP8E7xZvRHvsfguhT9HiPuwv0oQ1woW6eD\n+GnV5GiCAefAiEvBloQ4sZHor75h+JZM8HXC6Dyo+h30TIXiR2HHTHBqUDkPDuehNe4l0m5EiciH\n+bmgToamHIg4CHnD+z7/V3B67ogRwAkp5SkAIcTnwAzgr1bCp+2O+M9MciHEJUKIA0KICiHENiFE\nyen2+T+O1OEwfwmc2vyXf5/0NOzNQB6yg7sNY5UP7Vg7Lc/tp7PlJKbaDiLumEvyl99j6LkO42t5\n8OAtoC+CCCvMewZmv4zUZeC4uT+MLoE8L9TsQVm3AJ3wwaCZMPQSyBhGyBrL94ZvONmejz7icdSW\nzchxq2A2xC17gvZwE9mHq/EE48iJtTA9vQlzwymcyXocF0URLpmDS1uJu+dF3KVdhMIKMm80aqkH\nkVQHb/6AdGyGCgkPmaFARaQEkPuqCVfq0C04jvi6HFmmECrVCDhiOVWrIOVZmOwXoF4whPAOgSbO\nh6gCGJ8DUbfCHhP0W4c8X4Xks5GyAdeKT6m9+hmMKV4yFi1CW/YNaiBI29EhpB5tQEgXYVs65D4P\n9lJ8EdEQGg4jLwMtAMfuh7gRoEsFfUzf/UgpwVsKpvYgigBGLYDbtyG7g7DHCY9aUVYIMiuD9Hht\ndDZ20quz0xUXg+zJQzsYoLvuJHx1CF5fAp3RcOfdMG4AjiQ7Xfs2I3dJKEiDgZOh30DCE28n/rc3\nEnJ/TfJL1ciKzWgLFyB3fkS4v4ZGI5wzAW57HmIehfFuqE4AoNuSBXfu7uMajlTJGWlj+rCluLzp\nvBS+gMZ3LoCS+zFvnYbhzOOcuPwqtDVLYeXnUN8I0QWQ2L/Pat/3Rl80xzn3g8MJbyyG6og+QqVv\n7ganH1ytfb74Yht6OrFeehmiZTmsfAUaS2HHlzD6op9FtH5ROL044VT6inT9Cxp+OvY3DeNvxn/R\nJK8GxkkpHUKIc4F3gLJ/f7VfEAxm6D8dDnwKva0QmQiARCIQoOroHfIgPa8+j+hsJva2SETRAJLn\nVKNs64ExRvixB+aEcH2xF9vLHgLn5GJ4/DIY1x/eLYTgWNz9PbgTdxHT5u5ze/itkJQL3iCseB95\nZCvSpODMiubyDImtrRuKQkCA1q+MWHPCGHwuwgUTOHxjB3Ed52FddQL91U8T++IduCZLjKtPoktY\ni7JvMe6hhbhHTiaqIJmIE26U0edCSQvSvRIcO5ECiNYQI/QIfwD26hENPvC6kRNseBIC7JPDGNW7\nm9JjCgZRB7u2Iaea0TYI5O03wU0mREIIV34+1i9OQRbQeYDw0+fRcbSKyDEbSLj4VXSZP6I1HUDr\n6sKQlIR751rizxjKkE2HCY61YjBlQb/F6I4NhafnQcpQ6NoFyTOg8DFoqISProO7VhFWG1H8Tegb\nNVD14IyG5+cgOnsg2gYOFzj1pOvnsTdnD9lbyzFFd+AY7aFxUpiixV3oXF340tMxDR4Ft34E5c9B\n8lVELbufysxM6t0x9NsVwnR0EzImFnXxdkRGIxZ9EN+1LpReI6adGiImFVXfi8yNgh/XwRIzcmga\nsiYNsfMZaN1CqsMOEefC9KuQ3y9AZiygMe0Oepwat7d+zBLrGRQsvZ94p5sd5RplM6PpLu4h2teF\numkvHN4I7TWQbATRDH4L7PsWevUwshTGzoWyGZCYBYf7Q2ckVPlA7IH7lmA82Y2/YiPmE4Oh8l2o\nWAdzn/37yNrfE6fnB/hPsl7+6zhdd8R/apJLKXf8q/a7gLTT7PPnw4SHYcNTcN4fAJB049G+xf+m\nh55330UXl0JaTCdKY3/8dlBqYuCmR8D7OaRuRfvNXKTfQFRPMlr+alh0AlasAmLgvtuQq1cS/ZYb\nadUhBk6FcCQc64S4FDjrCkThbjzJghbdBiwR+RzLaidjzwGil+uJTpDoWnXUZkdSaWnAeNhA7ps7\nqd+7B6vHRlRkOkp4B5ZDfkTPGlDjiNbOJjrzIRhmgt1X4hxjx+b+HOE6BtUKsi4JKbyw1AN2BXVV\nCGnUoV2jEQp6aNqbz5DmUyhODS3JiOOJLZA6FPYdJ1DVSWQehDeYMKT30KssJ/JuN+IAaIO9tBgT\nSFj8AbqGF/Afq8T13n6MmVPRujWMN96MZf2nxA64A63hXCK2/QqGFUNkf04azmRw18q+GmqmIhj+\nGQgV7Ikg1yG/uQXvBd2YXeMRYROEW8ESD5nDYMZQcLVDYjbs34pY8RzZ3gl4Cwdhb9tMcks7jhgN\n71PPEPnjZjj8LVzxRl+mYvUyCJngpi3075XUO9awX7ea3FxBnKLQMSyA0luPqQIM6wUEJZg70UhA\ni9fwTkogcpAL2eCBYCJ0HoFACC1mBwUpesKhJhgsYY8JsbKR8795A3G7AonXcPGkS6CjhkMPPog9\nNZK0R75E+/RR6q/ZSsqASzAk2uFEOQSOw7E2uOMjWP8MnDEHWnbB1Jv66hkCJNwC+uWwrApi0+HA\nnRitZXT3jMJ3yVRMHy+EGXPg1sth9nwoKYWc/L+byP2sOD13RCOQ/q++p9NnDf/VOF13xF9rkl8D\nfH+aff48OLkP1Oi+HeW2vneKQiwe5Q2Mt0hy9u0jY80alAfmQa4XurbBnS9A7Wo4ZxPkzMMVuRur\n6yBqxHno66rB0gNlqXDFJZCejeGIAfPRIHgl2gkP0ivgpUVw1a+g5ji88RwR735GVM5AMs98neF7\nWkgMRWAoP46x1olrkgHbTeMZWHeS6M4I4s9Owhg+gbbsBXpPrsb6VTfCrkJuDAzq6AtFOrAUNs3F\nM2gzut1XQZMb9veAMR5x++sIZQpa3m1oG8zI2DAdU1I5lppLo5ZIousUES43cmwhOosX22criVr8\nLVHfHiH6hd9gGm/AcF82GMAm2nHERREqzkNEDyblkTz0KSmIwY9i0n2B7c6rMeY3IV1t9My7GHmi\nEc2YiegR0NEAde+gHa3Etzaij/OgZwNEpINQkQTBkgjFv0f6VhBxIBLFWdtXJskD3FMGSVmERo+D\nsn4QsQzO6oSXj2HviaQlspqQqRVVFyS/8COOnHkKv7Ed8fBa6P9TBeMJb0LcZNj2IqL/IDJG3s0o\nXyY6xYDTUk+wZy/29zvQ72xFJFwFudkEYhVcJQ4MTiPqsBNoxTZkfQwcOoTwGBDGTNSFDkILIlHF\nXNRTFSjnhOHayWQNTcDc3oN49HnCb31KxyE3nnAiE68dg/L5a+jKvKQ5xlHbbw2OuePggS+gtRuu\neA1GzeqLTLn6JcD/51EN8bchq+KQc+Lg0l9D/hAMxn0orcvoUV/D328vhL6Dhy6B9nXwcX/47i4I\n9f7sIvez4/SiI/YA+UKILCGEAZgLLPtbhnG6Svi/bJILISYAVwN/cyjHz4ruFlh4N0x4CDY+9cfD\nRs7Fxwok/j7+iJzjkHIcPDbk2k8Jj72dcqWNCtsIaquzsM6MR97/K2SVG8aeiZy0GGl7C7kzF2Vj\nHRhDaJ0O6P4OzinuU/opGXDxDcgvtlH/zDASg+fDlpcIJCTgaWuj91wLgQI9UTvbiH9rA2d/u5q8\nlgpU72IS7hlCzBQF89WxKNNSkJEDfuKujYVxD0HT7ciWVSwrmEhl1DRoGgnrJdjcoDuJiK5GrfgB\nMe9uupVMevN05G85Re6xDqz1Adzj+yMOdiMs4xERm6F9F/wwCb1/MVpqOs6EbsQYPaaRv8Wf8AC9\ntjZEIA08L/RNoCEKHCpUfA8xE1EjNVi1AlO2n97XxiHaJFoD0LUX7YPzSY8uh/hLIRiEjaOgdT0e\n7UvCzt8jSxajDHKiNi4C23owN8DgbpjbhXbORmTwNfBugd4u8HXAO/0hqZOizi78NTrwgeHxCRS/\nsZ6D1+cT1FeB2icSMrEIzXYY/KvB1QG7fgtNX6F2naIzKxbrIR8dGeloaiya8VvcI/MJp2Vj+9yH\nKa6TAPFQsBj52AvI/onI7l40WYcckkFPdAYseR1auhFmDSXTjlLiweQM4bggh9DAIRy88TpKDn2H\nbN6DLN2PlNHofHpyQ0/h9K3Bs7gMabfCGTP75nXIrL4Qu7TR8MPrf3xe5a4vcQ8+huYPQvN3ILMQ\nOjf6gigiXXZUr4NAsgIfXAmlVhgVC60rCB166z/nmfjfjtMgdZdShoBbgR+AI8AXf0tkBICQpzHR\nQogy4DEp5bk/fb8f0KSUz/2bdiXAUuBcKeWJ/8+15OzZs//4vbCwkAEDBvzNY/uPsG3bNsaMGfMf\ntkmv+5FR299k9dmPkhreR7u5gDZLEYrqJ7dwGa7aTDJ37SNVt5dQnZ7jdw3Bf6iXDYWzqOiXxcDP\ntnHObW+SVJZBXE09PbkZRMkGuq3ZyNGCxJ4q5NkKWoUOxSRR3CFa9MUcjJxNvS0PR5RGgbKbWH8T\nxo0RZI39jt4CE0lvdHGsXyFxBzTiPSdwz4vHs9rOit5Exg3UyDLvwJjYy96Dc+g/YD2hI0Ys9k5I\nh0CXBacnCREdZH1pKeH6EuZ8+CymJhdyDnQ481FlAF+njagDjShnBTD2ePAFrOg6/OibfAQNRtpL\nkjmSN5+ypAV0t2ViCHnpNCahH9pO1o5jyCEq644/hF51kzf4E+KbnFiSujlYMxOCYFhfS3pOLRsj\n7mLk3U/gzsrCmHAc3ylB6uUK3eeb6TpSTObu/fTGqjiSh2G0uegMZpFCBTpHN6T6UC0GwtUWosP1\nCAtoxwShkIk2mY/7egv7tt5IgbKG0pc+of7MIZg7ndhrT8JwaMtLIHZ9J04lHV+Sld60SFonGYnd\nYaEjN5v+hUsxNOiINjXQEByKsy2ZwtXLkSFw2ePYG38VpSMXEorW0Bn8dG4eQlp4P8YCD7u6r8Oc\ndYzonW7sndV4E6KwHW6hw5BHOGBgt8FAQW4Clco0Zq27ie9HP0emfifJgzbh2WzlxCcuBg5wYU03\nYi7qASeENwlCSRY64vJRwwHi/cdQtRAOLQVHOA2pqAQsZioTpmEIeeiOySbKWU9pzts4gun027YF\nSiU7u68nzb6XJE85gUMxaMUaWxKvJf+rcgImCwfK5mLNOIIuopfuYyP/2+Xqb8WRI0eorPyTjlu6\ndClSyr85o0QIIeVfQZEhyjit/v4jnK5P+I8mOdBEn0k+7183EEJk0KeAL/3/KeB/wZIlS05zOP91\nzJ8//z9u0DMZ1A6m3vBrkGH4Yh7huTPwihOYD0zE1f95zE4H4UUheq0xRO51E8zSuLp8I67AxUSt\n3o6/OIqksXYoiCZhnIII15EcrAJlMAFNj7ZBIor1dGUWEW7upVIOJMK9k/FtX+DvBKPHT6QtBttE\nicscS8KCHj65fB5XfboK1aiHiDQM/a4jpvhhzl5iJMt/HCy9yDYbQ3pXoZzwIQZPR6bVgOcQuvRs\nzA1liLbl6HttzP90McREgN+FsJUSn5UMkWfAiF/DwofhmxfAIjEnGCAQgOIiDAEv8fEqww3fY7E9\niDX3MF6vRmTXaizOVsTJADLFxlmDe9HbUvE0WfuMywYnA1NrkUkLObDgCSzFKuf2PoM7NZK4nUfp\nuSmBcJwbT2w8tvU+mGtG+XYa7RO9DBj1EIgY0psXQtSN+N6eQVepiYSDLnSBHjAo0GREDUajxAdI\n7alE6r+k/8UzYd0uGJFCxr2LYMlMyO0PtkTivXmE677GXnYmPL0AVB1x9R/QMPJNhsevxWA6C31U\nJTjiyEiYAPIbApZ0xPh7iN64hgldX6Ft7IIIwdFRg8kdZifCE4aO8xk1OAeXWoF+Si6mDwxE5pwJ\nSSdJPXACUkazvzedgeM3MrDxRVgeZkbFC3DuALRwFws9pYyLOkbSiBwYlgCebrQ91YjGbvRVvaTO\nSEWcezV8+SJa5knCpdlk5D6H2PQa9PgpuOwa2PY8GJsINH9AuKAfyZ8fg4yxUHQTo3rfA+eZ+Osq\nMWtesJeQc1aA3LNWoDQ2kZ7SyEnxW/L5gMihw/775eq/CeK/I6PvFxKge1ruiP+fSS6EuEEIccNP\nzR4BYoA3hRD7hBA/ntaIfy5EJ0DhKFj9JtQeQBZMpfPA9WzQvmKXbzfmFS1UDhlA+I5MEq8vITu+\nlGFfHCL2UDmZa77FeNE9JD0+GvW8RNSHH0JcuBamHKIjLY8PvUW4DpsxbAoRWimwr91NwoGTjF+7\nkbG79pFVK0nyBsmpqiFRBgk6u4nZ0kBweDJjqnejZvphgg6Sq+Hz98ByLxGTnDDgTnCUItp0KPlB\n0Afh082IzAUweH9fllXqWrrmf030oJlwx9sQDkIAePowiP0QZQHCMPQIPP4NKCPAmgRji/p84y1N\nGMr1WL5rptZ8EJ96lLDdgcXtgsOgtavg9OJZ9zG+XV9g7gwifA6kTABzM0LtxJCQjG/5EbRuL2p/\nBTYvxTb6EiwjEzFn9mLszcH+xg5CZVspjPm+L4XW0g9yf0t42x6cc2KJWenBY42C3PP6fHbdXjjR\njKYYETFB5Hs3UFNZhtvYCE/vgIPngSERskbA9N+h3PQu+s8rwOUApW+9GZs2n+gYqK3IQreuDnrd\n0G6Gja9CowtDlp9Q97v0nn8Y77WgkoyuOZWiXeWYKlfATi907wbLeAyxrxKwj0HqU2HUU2BX+spT\nte9noONraG9ANh/tyyZsaoZvt9B7Kox9/V7yprXBmOFgLYWosSgFjahfV6Defx1i3AXw3e8gNg5l\nzkZiD3UiPp8KRgs4qmDRHOSB9wnve55AiQNT80zIGQ03bgZnEBZtBls7otdCyFqESBtJMvNp4iNI\nzSEs3MQwnQj+Z1ahvyj8o1BZSilXAiv/zbG3/9Xf1wLXnm4//yOQGrTvhdrl0LIVBtwI4l/eSwIS\nQrB/I2x8Gbqa8V+WSnLIT3TGOHQ7NpCpnSSi+B5E/VvoMmci9ZtRSlOouW4bcbsOQoIC42dD7X5o\nXgSWaOLc3Vzh2YfEBSU2LJOuAfeXMOFOOPIs7PGgmD3YhZ/gKD3yUDWRbj2BcVZ2JmaQ29sIBVlQ\n/BiMjIZHLgb3cCrL3SR2vAhZ2VB8M6L9KPLtxUhDEPHBtQilBc67HWmfyKnQi2QyDnqb+3bG31sI\nv/sCZBXsvw9cL0PsKMjIg1H9oTAdWmP6+Im7OkDrRBYZsMUcJqTFENm0ES1rIt7QZiKinVA4Bt/B\nweye/hKDvxyLfmwklobjqMZLofnXZLv9aCIIaiJkeWDDFyi3P4haDe0d5aT0U1F2hzB52pHHJSJc\nBSNHEv7+NdoHvoOpyYL7jADCFUJSixDZEKojdNFcwjktGH/sRRd2k/r+fiqvzCLv8MVYvHkQ6oKY\nOEgf0XeLk1JhcBns2ogceQaBwDWkve+jvjABx8EDRO8Igqcb8hXQW/CPHYw78wdMa8JYVp6LeHAx\ndFQR6ipFd9IPXhXiw9D8CkFbIz1xx7AM6YfathC0Fog1QaaO+E1HoGAD7BwO/VS4/APC913KoTck\nk2/24LRlEB3uQXRUQNwVEFUIqyaAGAVZo2DXzTB0CDw9BBFjhtx+MNQIQz+DA0vxz59IMLAIi2U1\nYsWTffsaAI37oeQCkD2ougCuEh3RMcOJYiTtfIeXerpYRg6vIn4pZuL/JP7JHfH3hZd9aARANfTF\nliq6vtAnxE8fCfZUcLbB5Y/AmXNIrnKQcbSKKmsTQkvFrKXhTvIh8xcgfU9CjobScg25IwbAqDDV\nNZ3Uv7kQ56E25NWvQPsPYLADfsL9FERcKgy6ESYtg5cXgLgVRmciq8N0xA2iU8RjOCrRTXwEo3U2\ngysPkK6EIKUfJE2C5DPBZoSPz2dk5wKIGg9TNkH2A7DlB6gBGeNBmtwwayAoTyCUFOpNM8gI9SB1\nDyGTOsFsB1cnZE2GLjfIYkj/DWx5CCJ2Qf8IWPlOX4pvfQPhdvCkuIhc0oDFnQUJFxGMisR/7lVg\n6Q/bPdiLmshdPgf3rCpM7ng0aSG48gThk+2Em3o44chGaW6HFDfyjpeh9jMs/W7i2zNmImNqCBoS\nId1KIKijUzyAc9U4uuNeQyTkYKxwEBk1GVuvD5fOBTFxaPnjIWI1hvwFYHJCshV15pMUfdREePkh\nfDsPQlcdjLzgzx+EeTciP3mKgOcGdLtjUTvyydoZh2mfJOz0Q8lwqLAitUSEzUfs/l8R+VgAcXIX\nfHcZcs2VhFPGIzaGocsOa0OgPkBEwhKUkBEl4RYwZoJ0Q9ciKEqndvQIpKEBugUifjDkL6E62kjp\nNEHAciGHY7KQXZ8SHOAmrH8eWZaGHJQHvhXww0MQo4PsFMjLhImPgT+rLywvugrpacSvvIsSWYbo\nauqLlIjvD+VfQq8XUkbAyRDC7UOfbSMQZQcgg9vpZgX2nlEIt/NnlMS/I/5RLOH/rdDwclKMJso+\nh3j7fQge+ssNle8gfy5acQnhUDSxNX50J/fRMqCIpCPrcQ88idRXIMI+aL8a8eODoOYSddHnyFte\nRH+oie59xVRPHkpsyEPKqzfARw+jTUqCpQrcegWMSIShwwlluFF7Kqm/92YSbXdgfG4CzJ4Cs+7E\n3VtHKP8sjNuvgQE3QNPrfYI9wQzhMsSSQ6y718nEj1MQDRqYggiDIHBOKu1pUVj0OZiCqZgs7HPb\n0wAAIABJREFU8wjwGaaaXGSrGXR7kbILse4ZOOiDNDN074IPH4OTFZDUDPe9BaYGMEmQMfjPKCbC\nkYqhSYd4sZqwUaI7Yzsx5bGI9nRk7Pmojz9NwtxsWleaUVsaUJujcfZvJNJzDub3H8T41HQC2DGM\nsSCiE8F1El/9YoqLVtJjD2AsAxUNylWi6joI2Bxo02diX9iIMEYgW3YQtMURVDSkOQGK16D+EAFJ\nVyExIuNjUFzPIC6/FOtn39JjDyD9iZh+fwFi1uvIoTNA00DfQji5HN0TFWi2ZMJX3YK+5n1M/XyQ\noIfCq+HQiwjTeAx7asFzvG+1VNwLzoMEC7pBH4vUGxDjf3r5vTgP9ZZnia7yIrS1EJoM+gGQ8jBS\nCRFquBR2nA/rgNwYpPFi4savx7TJi8mgY8/AEYyN6Ico/xriupGxIcK2bNRGL5iWwNOLQD2FSPsE\noRph3K19q7rOeWhT5xBRHcRQ2Q7dv4bZH0LrMdj5MfgM0LUL6TiBy6rHtqeCo4FdxB1+n9j5C/F5\nd5D81h6499KfUxT/fvhnjbm/LyyMJoYr8bALF6uxMfUvNxwwFg5vJZS6DTXSjlK+nP5TnqAq6nXs\nbzZji95BoCgFU3AGWMuhYDDkX4tIG0y08inBcAytVwjSIgai903i6M2/x+3QMSBJQ3/1Y4i7roW7\nH6RpbBuu6pfJcxvJOFUEI3Ig2QCJudC0D1vKEGxGM+zwwq4HIU1A8RpIVeDoJ5h29ZK8pZXW9QYS\nz3MiqsKQZkKpm4NcsQDbxfs4VXwOYW0R0WEN1t6BuGwF8thaMD6EHNEJmoY4Ggf1bkjYD6YWUEoh\nsQH6TYKDa8EUJuLizxCWeABCNNITvhv7sXxEqg+2D4SeLsKuIKYPW8hOduNJDGLRa9gOBxDX3gKp\nuaSMvoGmRa+RV62i1c6mK+kk9uWHiD9hxXq4CzU+AAlg9II/Wof7DANx3yxCjCiDulroFUijETDS\nVHCS5I02pKsbbc0mxBgJrqMIdITUTWgXWIheeJLAAAets5Kwt9yFcG/Hv+YUoc7vMRDEtFsSLDXh\njH8Auy8PdUojnLgIym+A7FhY/jk8/AncPwMuTYH6YmgoRytxoIRzENG5sOsDSIuFFAOc2oZlvwrT\nyqDfNDixBcJuhBpLnncT9ATBoNAYoUcXOoPEyA5IM8Her8kadg7tEaeIN/SDmkOIxrkox48jU85F\nDgqjhR4lnFSPCHyGzvAWijqq78UQ8zpq9VzUvGUQXgd7Xoc1N0JTIwQz4apXkauuwRHjpbu/E0/I\ngixfTdw2L+22GSQeq0cYs6BiGxSV/ePXo/uF/Hv/Z90RAHZuJZ0PCHKKFh5Fw/fnDfxeqDsMz85F\nf//vEV++inAZSXvnTQL6AIwNEdjcjvHpXbBlC7QeBbkPqv8AH49GtGxHr/lIP1JDwzQ/atY6BqzZ\nR8y4FIJNfup+/yRy0zFIy8Oi85FgMCAa4uHUJkDpi9Mcezesfxr2r4X194A5DCIGejLAWgaJZ4Kr\nnlCEnn3jiqlZ70ILmuBIIoEoK7uXLubQBSMI9ljI2tmM58QaspY9iuwIweEmxIk2ROb5MPhGqLdC\nWIWhU/syz+a8BF0lcPsPcONqiBkCF73/RwWs4aaLe4nmaYQhBWzzoHgwzvsT8T2SjpJtQkwZi0Xf\nAwkDEYWjofxh+GQQ1vrHsQ7sQQg3SkI3eq0Wr72ZuC6BV4tBO6aHTh3N+hycM5Mw9ISgwwabvKDX\nEMcHoPf4MDf1Ut9pIuwbixgbRImDwFU65EqJ8OtQnY00FF6L+M2PGOqNJL5XS12BDl/ncUwzr0Yn\nJiGOqQTiDKg5A4h9OID3dRe+J2ajHW5A2mdCogPyVXhoAmQPg1urwWeC8ACUqGHoq/Jg5IVQY4NF\n+3HHRuJt/pCKflfx6qCLeQJYj457vG1c43fxXPbDhLv0eKabILiDwzsvodeUBHMskKf/f+y9Z5gc\n1bmufa+q6tzT3ZOzZkYajdJIo5xzRAGBSCKYnIONMdEYTDBgDBiwCQaTTBQCJEAghIQSynEURhrN\naDQ559i5qtb5MRzb3/ftbx/7eOOwve/rWj+6a3V1XdX9vFW11nrfh4XvtaJ0eqH8FFSoYHwNZ52F\naN6NolyOGr0MS/NNaLa3QPiQUkKot3/C7rWD8NpIqDoCF30C4STwDQT1GDw3ipaqIvT6ZtoGZpFQ\nG2B4cAjiyrtJ3BPF1WyDRgVuXwgX58GOT/6khY7Gv5cs/378z3DEPx6BAijEcwtBDlPPrSRxHza+\nS9u0OeCap5HlR4mOK0ObOAuZfi34f4PNZlI5ZyHpoWPsmTqZMUWjcRZuguGlwFFIaoWySxGYJNa3\n4ozppHzeGNKa32HwuQmIUwpxLx3srxkRl4SXIURSC+iYvAJPaRNW/bsLgqlAWzP6GxfTN96DZs9C\nF3n4dlVA+SWweTuyIIneXANRo2PN8RAJ6ASjOjXrOknM8zNVCSMbehEtp3A3hMgurEVENXjpUqjr\nBZcL0TwHahSIqYTKTlBmwUvvQ0MXhK6BYB+IZJjU/8QgMengHnzcjdb0GiTeDadOEYpug9Marn2t\nEO2Eg60Qn4is3gTeRMgZAmYIccFK3Cd2oNvrsVjP4HX4CRc46ElIwfdmJYF8K/b2IN6cetTNLqxd\nYcwlOsqGIngXTE8xIlUiOqIkDu5BmusxqwSdpUmExluJ+7QJMSIMGQaZ9Q9C2lkIewyk5ZDzTTWR\nQ5sJzE7A5W4mclOE4AgH0roTTRmIsysDpv+U9i2P4NmxBSFDKEPLUbrTEPOvRtbWoHhS4JMNWFZc\ni9DaYMajMLwJivZRXfgRsV6FZGcVMxQLPqGQbPEySxWothg+OJyMluHAbAiScLCJtIuPQrKO7HQh\n2rtxZqfhfPoDmOCEvCjM/AK2ngv2Pjj5JmLOk4jmtcApGHAhKAIajkPKMFj6OOT2gjceWovBqUCl\nCUtX0fX51Rxcks7YvccZveEgFsMBp3dB5ihEZwXMuhziB/ffBdsc8O2TUPUZDFoCPT2w+KZ/hEy/\nP/5Jot+/9Z2w/LOEPwfjSONZ2vkdXXz4p22aBXNEMnL0aEiogr4VQAFhJYkS9wictqmk9HTyyeIz\nNN3xKox7Azp6wDoTGlSQKkqixN1pYWRhOe6md6H5FGi1UL8bPv/dH4/BaptK3KF5BAbV09t0FVJV\nwe6AGz5DmzQO67CJNM5IpvbCBGqWZxPeuw4Zr2N2j6JvkhunzY28LoODSbNB0bHHJpE0xQk1AUQ0\nC2m1IJMlmgkkqjArAJflwvk3wDNr4d7ZYAFCIci/HsobYMxYKC+C1U/DBff+0XGhiTMEmIU1aIHt\nr8DdV2Fs+QVhsRPPx4ehNQyLBHJ+AJlTDcOA1FZo2AVGDfJQMTEHSwh+FqA3EE/wRDy9ziyirmIa\nfhyHpdQguDiN0Hwr1voOiDpRCiPIMR6MmS7CWEGCioo94ObYzJE0L7wR62+fwPXeckIlCwnkxCNP\nC0ItFvS2GtB8ELcMajVkm0Fd226iRiGW6lS0UCIu65s4l28iXG9Hf/0mzPkOan6dguXO5YhYFcNm\nJXLHjwhPGkk0Nh05zYEIhGH6o/3nJSEV5qxg+PI7Sd1ZQkp9N2P23U8OEqfqRDWDYARJVE4hHSqR\n4ypaJohTEuLvBV8vcnk3suqd/sDqjQFpgUMvQDgTpBWGziZSFya0dQ2ycQtsX/5d5uY0mHw1zPoh\npP0UIgfAtQZOHQWjBx68H8sxG7OPqvgUOxaLhMRhYLdA6VegRiFrNMy7qt/jbkActB+GpuPw6fPQ\n0fD3kOTfFan+5e375J/kWvCPoZsinGRgJQ4AxewiRdxDN5tpEneTxM8BN8YPFqMZAQg+DPZfIQK9\nzIjMY7utD+FpIqtuKOGkBgo9vyAzOZ+UESNwlhRBl4HNYUU2uZHdyZizRmDx+gjneFH6erC8ch+i\nuwl8pTDiUkichDLtBnwHjhBM3kHH/BDeo3NRk7IQWjHO2jrSk+agR5Zj++gXBPMSqV7qRLSWYT8Z\nYGDVEbK6qnC/cJwz7SqDnnZjyRSYdcvRQzuwrryJrLb3wBUHdW2QY4Iog/a3YNdeaLeDCSjJ8Pq9\nYHPDfS/D5y/A/i/hwp/88dwZuKiRaQxoeBBWlsHYBlQpcT1zHUanAPsEFHcFuq+Olo8lnjkDcEdr\nMbskQgujDD5Ol9tL3ywTJa8R6yknMUtOY337cWoGvk/PvCycfgcxJ9oQKRp6dxKWVAPi85AHQjhk\nIaauYdgSiP2sE2dLF50PC+JCbqy2B1GqWiHwCtL/Olqxj2j1BWhx8Rgl9RycP5v6eV3MjAqssWcw\n/W3YXb9EUy+GNHC+8BnmZ0/iW/UplVemkd7hwdk4EvWWVAx5HeZT1yBqVyNTNcSUx/6/VkACCLZR\nPzyftE3rEPXvQUYeNH4N9lTGpexGWDrRsmMxs/NRO4oQHZ9Dx3hk6DjQhBxjgdbG/qSE2Ha4dAey\nt4PeJ3+BPf0qrCvfQOjNUPgTqFkLWRf82fcLMCbCIzdBRxakZsD4/bgueYfo6Y1oDRFIdEMwHcYN\nhkA1xF0K1YVQuAY6qyA+FW78Gmxe+OW5kD3y+xXjPwDjnyT6/ZMcxj+GABW0s5NB3Nr/hnCih5fg\nNMtRbE9zWL2BSv9IzpbbsNufRmpzEfbLET2/wuZewZSq55GdX6H1eBg+7XOGUIzR8yWW91VEXCsy\nPAriisHbRjB5MsHYdHS9B1tLJfa2dmQxyOHZKFVroGUtxM2CYSHoteNY5cfeG8B/WQeBCS6ccjHO\nXW/SF25CeecmlNxBuG7eRvnRz7Gc/pDW833YO8cQU72f3pYvSV4msfgCsDUAxW9hxFkwtu7C6hZw\n7rPw4JVQNg/yT0NuLZw5BPUGWDOhHegy4YI8IAgnd0P+dHB5/3juYvHR0rEWvIvRuyD48Wrse18n\nsOTHeC+7pD/Q77yXiDkQ+/hnqHurg9QMJ13dftRYcJT04M0SOA6BiqS2rIOaHoXMtz9keEoP3dMk\n8kQ5UVcM2oLXCe96BEv6TGT5PhTNT3CpBWckSuTK57GXetE//SWJLwWxX+8F9xTwPgDrz2Dmq1i8\nJkZSEoZNp3GpH9cDRyioayFuoZ/oAiuWUAqibU9/gXNHf7lr5dz7sBFmZFOUM5515FtOozQlo15y\nDmy1oFTXIApSYN8t/f5tyRMgoaD/+al5PyV3LaArp5r0KgG+Jgj1gCsWBngIHvWhVyYgSMZipkFn\nKVRUQMzFiFA8xrB1KD2p4G1AlkjEoMNE9z1I37Nf4LlERZ36GCSOhvoSGHcfmN3f1XkwoWIj7Hge\nbGUwXYP4KVDih0Ex8PH5WNodcOcGKC2HYA3EqRCfCLoXRA+0bIQZKzEOVyP0FJRhBf2Tw/7/q7II\n/9T8TxD+R+Mvx1n3Oxw9RzC8lagpP0Da0ymyfkK1+TGFSJZEB7Ki9jDKN8fgujakvhqMO5CRegLv\n/YS+9/ZhveMc7Ll5sOEp1CoDpb0E6o4iU+0ISz3Sk4SMtmA/swlH+R6EdGEqQUSMRAy2wzg/jPgt\nWFRk1ROEKyqIzLqc8EQf7l/tQd3bSMzhJqLjzyB6DRJuK0cuuhTF20PF1h+hltpQxy1kym/e5/Ri\nO2F/GiLVgi9Wgj8KqSrCHY89PkR413HEdb9FGXs+5L8PPQrkLoKWb6G1HIZmgewGocODvwJrN/xh\nKORchbz6CULiNAFOYCcX55ETZIa+gMnPoIVO4ixYjRJtwVr4FIGTL9PtH48nrxYjeyre6WcR27KD\nUFcbqZOd2Kxj6V48GE0NwY4NBLvcqNk2BtyYj2dfI9EYL62riom0WBg+phPFuYbw0CTcqTeDw47I\nCWKvPoSpdmJvDSNyBxPz8Da6RXV/1li4HDpvh7g0/CPG4m4vQanOQabsw8twtE3rsQ0MYAxT0TaF\n0FMMlPzLUZsegPSX+i9EAOf8HNdtw/HNMOi7ei6Oit2o+36GcAto7oBmE5JH05fYjqGsxlL2JmpL\nB3oozOlLppDfOR4ae8HW3V+AviEBIlOJO7AdpacPdcxiGHUeGE1QsgPyv4CpH9KmVuP1voT1mYfh\nhsuIrLuFSNc3+C4uQQxZDo6T0PwW1LdB2wlINeDYXaB7IJQGI5bBJj8cAOaqsHgOtOaBvhUabLDu\nJmjNBIsGjj74wQvw3i1QdwSmt4BDQI8XeWwXMjcT6ehC0YNQ/CUMX/aPVO1/KWGb9a/oHfnejuPf\nNwi7BuFK/Tm90R+iYMVs28jJpn3IlipmBWysiI+HFCuyajPC5Ue++QhcOZrg7iBdT36DY9GdpGz4\nGMVogsptcOpdGOIBLQ6cU6BsH9KaiYhLQsRciTy2Fs6UIp3tKEnAQQG5NjjcB9suBFUlOEYjPMmJ\nzTsY155KlIXLkEnp6GNisDz5DBwViDaJsHyDLNAZeE8PA1NzMNu9dG5pY+qWVdR0SNIvBDlUQ2T+\nAD5/B/LCGMsT0Ie1Yj59N/ZXR6HkVsL42+Ct38LyEEyeCpELIfEDZNsB0G5FRGZC1lRQWukQ66jh\nQeKjy4n7/UbE0JOInSacvhDkIdQBfvDdjnXCANTkeBz2BMzqLwhq8UT+cBrrliqsEzT6JscQVGsp\nnLSSecrNsP46XC3v4Bp9NfJoN1Qdo70mlcb9Etvbszlq6WNswauYldcgj3+LUnsAilPhjCAySqLP\newtHdRGi9QC+rr3giELICf4AmG3ErD4NmQpQjJGm4d/8GlqGifUOG6pjMiKxGLWtD+Ojy+iqmI17\n8WXYhjwHlRW0zBhKrLOF1OYowQm1qAcFSt1zyBv2Epk4FduJMbDkfZwEaebHBNiKPTCd9sZyRtUk\nk15Y0f8UkTAGFudB+SAoayeSITBOzMQdOQ3Hnof5r0HNQ7DvS8hdQ4LrbPyfnENwSxBzzSHcF2QS\nMzsAKVdB8gxo+gVESkGbCiUK/CoGjERY9RV6lhf/hqvxnDoAIQti3g2gCVhzF1z7GTR9DFvXw6Rq\nONMJswrgvbNBZMKYm6DwKag+hsg7F6MtgFJXgUwJYQwsRz1QDol5/e2/AYb6z5Ey9289MWfxTKMx\nfyki7wmOD7yOuoJHyW6bQdyqI4htIcTOJJS9yeC2o7cfovPeSnpXPYfrnlHE/vjHKHY71BfCkfsg\nsRjaDyD8YYRtKHhckJ4AkSpw5CLmX4O48m7kwvGYmoaRJzAvvRoW3AnpTrAl42wbT2yVHefBN1AD\nHYj2RpSib7CedKOt+DXyh09gLElE/6oD+aNuTNOJkdqK0vsqvhVN1DiscPUAtNREQt1OCLX0/8KD\nExA9DdhtCdgyuxDfTIKKEpA5kB+GTXWgdkPXo9BdBb0qxrZMjCY3gZQTVM4oIhpYS87JhWQ+vhoR\n0wyV1dTNnow8dQT0ITDzGFz3MGrxF/D0nYh961Bi4nCsW4XjzCm0Ai/a5Zn49Dk0zRvOsPoiOPAB\nGCFo00D7GLOikCJtAaf3NDH9pZ/SMG0FB7Vz+semhy4hOGUZnEiCGfPghp9gDcVjPajSG/slpvdi\nsP8S9qRDWwRCNhjiRA5ww8KrEFUKSnAwLqMRoYdwtJ6Lmr0ckZOGsuglLKmjic2pQtlShPH6BIyi\ni3Htm0tgtAD3EOxvKMiWCNIG4uh4LNYI5kAJ665HOfEhKf6HSOcThHM0TYNcOAelofoj8OujkBUP\nyhswaATk7oVPu3BevwBzxRqCCyZj7L8G4tywoQ3Kn0X99j0iXxkEDnTiuPFBbMuu618lM+Z3EHcJ\nDNwDg0sgfy0kLoEdrbDnFGTloBGHq9hPMKRR9/ZK9JEFsOcVmDwfeB9GlEJTGGQGCBNK2uDsD6HH\nCx8/Ax0qzLkIcfnLyKpKROVRlHGvIF1NGKOi8PkdcOLzP4koHPoPtfWvgIH6F7fvk3/rIAyg4sAg\nyGjiWewaScJ1v4UXD2HGNBGevoRoow1zWwhxNEx8cRBnqJzjv9pH847vatMLDYY/CoecsBeIsUPN\nJxiWPHqbUjAtvn67Iv92qHwRxexA6ctEXP0p4QF1hGzvYqoJmHN9MGM5WJKgIgZsB/pdErproekE\nlH2L8tULaLNux7IxAHv2El6VS/j2DqIpKp2bVJrGjGHnz86FGdPpKzqHaOhcOHs5nG6GiB3NdzfK\nCA9mjaQvQRB2PUbflQX0XhqLebgYAhqkJSICBsT3UpteTXvfUDL230bKQ/vwff4HhLMZgtvBrjCs\nZB2ysQdOdENxOTx+FTSchinnY8YOwlz9HkrRFygdPYiff4iY8xa6L5aamMXYs2PpTH0bc3ojXH02\nxeYsnr71HBq37iX/Ih2xewfhuqPEd52CA+txfVmN9uCdcMsz/Q7O3T3Q7ETbE8W1czK9vqcxanZA\n4kKoGQ72iyHBgnLcjb7tQ2RsCuEhJZj5yRBSUSYsBm8BBHrRZRAmPolScRJlyiCY4UFETWy7+rDH\njqLirFTkkGzUOgOzywl1PiixQVshVK8GRUc4U7FTQBNuRvEzwrKN1itttCW9j24ZBUYanNqHHowh\n6nJh5kymt2I6hqsPddZbkLofxjvhQAQZbMKdmIxsugjbdZdA+gIIBaDi/f6kDC0ObEPAngwWHVpL\n6N3yMOb798CVU9DiFmGNnUN86p3Umw/QMS8Pc/HPYPjbEBoH3nwoKgTTDtNvgU1PI3tO91tB3boW\nslMQ8QnQ1QkVhYiBY1EztmMmt2LGF8JHl0DY358deODbf5x4/0Z01L+4fZ/82wdhJ9n4qfrj6w6O\nUlt0OTSfombFD2g7Xok514VxbQbGgkRsgV6mjvGTfPjd/g+Ea0G0w2WbQdihpAEyF6EFB6P2bCBc\nfpLI26+DrQ2mvwAdIfCHUY68geOWZiydiwjdkop/djum8SYMMCAnB2zDIUGCEkZGjyF3bsJ0+QjN\n7+F985c0mZ9gjb0DZ2ojynnHaGuVDPTUkfvVaYQnj7hHrqf7tdeR1esgGEA0+uDUU4j5L6KYyzB0\nH6HYI0SU3ThtU1GsFki1IXeXIRsloZgIaT2SjG82om25BpnrgoL5kDkG4pzIKEQqLYQjBmjNcMt8\nqCtDjpqJXupHVpxA6WtAWIE1O2D2WRCKUjo8m6HMxM2V9GWconfKUOSEH1G0eADJvznI4IEhPCNj\nUBZeSE5jD9mHa+CDl7H+7j3CHU30Hn8CHv4MImG4+Mcw/2rUeb8gJvwcfZdH0QfXwUU/hYRvoW4G\nLLmFQJ+LyLhW9BwF6xoFJS0LJlwJrmFQVE943y8xMgpg6TMo37YTst+FcvbVqJc/hOYdRXaDSl9M\nA5WXLaJbMzFRET3pRKYkIOf9AIZfD0LQTikaDlKYB0ocscq9xHABHcNO0GXJJhzeTGBVDf6Vgwj4\nH8O5bwCuNztAxsGCA8ixS2CjiRAh7IMrSKqZTm/H9dBVDDVnYO8LUPnNn/68dUVQupmOr3/C4QE7\nUbZtg+PHYM55aL4snOQzQPktlrS5VHs+oLPjHaQRgUtv7S88G+vhxKHVVOpVsNiFXJCCTDqJbF+P\nPHIWSB1aqsHqQAgFzbsGY2AYM8EKW1+B288DT+zfUa3/tRhof3H7axBCXCiEOCmEMIQQY/9P/f/t\ng7CLHAL/OwgbOnH6cJL3OujpsJJ5h4n391dgDpsC8aMQw6yoQ9tQMsJw+9sQ9cOhe/szizKHwLLn\noMOAwkPweimO/AWYHRrq6kNE6yVm+Q7MbWGo7IPnv4Ilw1AzR2M9MhJLcCHhEYOQognyV0LyVOiT\nyD4D3i4mcJUffbSK5UA8aaVtnKOfxfbmBoQWixrjJ+8uA5Yn4VUdGKuPo35+Dd4pOl3fWBCRIQi6\nIPc2DMtx+q4oQb3Oib1Uw1XdBeEtyKE64QN+gulWZJwLd3sc1tWNiJiBEOdCBmvpEaWE5q+EKSNA\njsRd0YmR4oSQD3LHQJyGLC1DXXkZ6vHNiKRE+PQ0jB5JeOPFNFx7OeLm35O4qxsrw0j9ch5GuJxN\n4Q/J6J7G8K8PkzNtMahpGD2liP0BBq3ajfSEic5x0NvXRfOsXrjiKRi7AKaeBwuugoQMlLgxxDxw\ngMCA/UQ7b0Nu0iFjNIyYT8zhNqQexrVJIhKXYUm0QlslvLQM2sJEk6ycUR7CnP8johl+bB+9AO+W\nwKGTmPmHOJLSgLV1AZWzJ2DEgShuQSh2rHUtmEnjQBrI4C4qen5K/r6HoeSnpHZMocl8ERtDSOy4\nGfexWfSMrsE8fyK2qW24nvRjGXwHYt+a/uw2IJp/ClwxhIfkQ3YQa80xwEB2XAzTFoO/A7Y/Aq8t\ng+fOg/dvRNciFM/RSHDPBWsKrCmE0lMwcSoAAkEMM8iWL+H4eA0t06vQex5D9kLR0st57Nr76Jy5\njDdyJlGaNpeIYQG9Etq3Iuu+QZYfAbuzf1/OZLTgS2BaMFtW988oxcb/vSX7X8b3OBxRBKwA/n/s\n2v+f/PtOzH2Hi2zqWQuRELx4CYT7sNr6sD3wK2i8G6P1LXpnWRBCxeZ+DFF+H2SOAsUK264AVxBq\nuuG3N0KiD3r1fn+umFqUSAIuq46M9VL/RBlJ40wiW7qwjVWwPvo2YuZFoGioz+5AOdWCuXI40lYE\nJ5YhJlwM1kfgNw+BFZyxL4F9L+LM3czMf4jBUuNI+grmNxYjEvMIeXxklcagL5xGsOYt3OVnsOS0\nEjPTjzmwGRn0E4x/HqlYsRenwGdHMVpDSMBYEKJqejbpx4ZjryzB7G1E7KpH3PgYuJ0IzQlDLqTo\nyHNMqrkfOeAVGkrXkmqo2EN9oA2Hl1fDF3cgVn+MfPJKZFofZksE/0uLCR7sArOVcJuO86eX40z3\nIqurUA8fxN8SZLgwsWz4kphnZkPlJ0Sa8lE/fZVx7bDxuntYakq0Dc/S89tkbBUdUPYGxMzqT2Ro\nlbD/MyjegZJhIeZ4lL6xPuQv8omxXIcofgrh9WCe7IXUaZhp09FKv4Q38vtXKyRbkKMAvVEKAAAg\nAElEQVQvRdJChXiK2KueIP7ZWwGD7sOVvDhtCqntJpOHJjHn6Reo9zqoHuciq6MZfCug4lnY+Xs4\nbWHkxXNRfBvAshNLzVekFbegm19j6BGsLdV4EhKIzGsndCgTtUOFLz+BRwshPhPpbyQ6shRtfip6\nZzk2dzz0vUVMxa/o8x7BXXMCoaVAwnKI06BhG2AiE3PICNShRz+g5qeDcHmP4vr9amxn34CQsn/N\nsDQR62/GXrQPmzqSYFwGyvga1vst5FiSGT1gKcft7xJMfA19bTHWviUQ60ZoHyIHLeLPV0GL41ug\nwoG+8hjmU2NQM7IR/6Gy/vn5vsZ6pZQl8JcXnv+3DcLSbAbs2JQUQkYDvHkzRMMQ60UkjoXC+6DU\njVkfwt3iIToxgF+9C4dbp8qShfbRYmyymuQyFRHVYUAqBPaBsx3CeWCzwuFjkHMJ4sbRZHTuoPPr\nfVh6DCJTLMgJ92FjIcJ/DLH4JnhgDmJQNWJoHeTbkN1rYY0LkWQHMwTrb4VkG9gdqKs+4d2RR3kr\nfQSdG18n1uhE5jgRzhNkHxhEj9kImbFwvBN1nIJfDWEOs2A/4sBSMQPjwAZ0BIH6UciGSthuJ3Zs\nO9KzhXpnBn/40QNEYhwIWzfIBLD7oHcv4VEuNoR/hVJeTvKV8bSFHuKap39P4jmjsb66DHHwEHp1\nFGkJogfBsMagxlxM0muXIthKU80DJJ/+ELaXQ2UtpTkqtjadDHM7OHzon5+ADtBaTyFiJP7cWKbv\nfx36ulEnz8MaH8L7cBA5Jwvx9Tr4+kUY44ERH8O8y2H7JEhYAfFuoubrhI/PwF5/jGi3E01TUa76\nCHXzGiyprVCs075Mpy81AREr8FNBJguIj18G59vh2GvorZWseLCVnBFZ0H0accJCaqZOzSg7uq0R\ny8sfoU/QkA0GYrDEvk0DMQHsp6A1BzViReolWJujYAFVMXBn/YyIdSXc+Chs2QSBbVC1BVl/CDHX\nhnnepfgLV+M6Zy8ULkP99hUiSyZSOyNMZm4SQvRB2AIxBkZNI/WZaWR9dQThSCJy+XP4w0W0Je0h\nnNQBgU+wO8fgOlOB68QeAudNI0aOxLngSXrjJzHviw1kn6rFcBaz7AqDgFrD+gtuYNmH63F+8RFK\nWgoyyQGBbnB+t0Z89jUItwdlyyr0u/YjzM9RlfP+M6n90xLmr1mi9v3xbxmEFTVEp76GVuUUA5QH\nMIRBdPoKxMFPEFXbYcwyxCETsewGFHMGxksXExwylM6+bpRhsG+6neRTOpOr3Iic8yFlKBQeIpLq\nw9rph+oe0MNgZsCRT8BTguI8gzPfpGl4Mkn1HViPPYiIvgetj4OWgpjmQP2iHamMgMF2ZG055o0O\nlB06cvh4lAN9kGpBSBdovWj2aVz94YtsHjmKRXs3YcbFIOOWoLZ9TMV1P0Ktb8I16i0iPhtG5wL8\nZ6/DvbIW/O8QiHPQsiiV3O1lyJlz0FdVIZqKIc6DBZWbn/sKa+JgrAPewTZqJsKeD8F6mgbtJ/kd\nC+Y4H41mM7bXTTwJAeQLn9FZU4tjmht/bCauKTNxyJcRCQISX4ItzxBuScFWBorIgFHbKJqxGFnS\nS87qcsxcFy17wOloxDLViuqJQAQCWQ5iKjrA5SHi7ST9bS9a70nMz8pRRxTAmXpkVEPPfRalrJTo\n8Gx63bUEHEdRIm7sRjNyvYreFcCRYoeSH2JTWiF2HLjsxE1/jO7uK6hzrcNNPqHAl8hgMyL2D8jo\nLhydQxk62o56ohP6smDJRNRdL5DzeZRoWEG6DUSPxEgTaLUucNWCzYdUnIj0MhQyMB0Cv6uZrtgY\n3Opj+DSItddA5bXgSYPuibCtD2Xiz9BKb0cc307ldcNJVBIRE7+F7EI8W36OtB9HNiYjuqohazI4\n5tI+2IavbRcikApXbsNqy8aqDCB221BwxyITfYRWLMWfuZ+GBYdpK6jFqkAGW1idfyEXv7MW9fV3\nUB5XsTIeO88wzz+NtWMKWWoZgKcuCXnmU2i8GQZ95zcnJRz9GjXzWoRtCYb+Jop6LkL8641s/rVj\nvX+OEOIbIOU/2HS/lPKLv2Zf/3ZBWCLx5hylwjhJuyaJlv6IYFcVJ5t2IAbZEWctQqa0gChA5nUi\n7V9gXpeHJ9xCVkc3yqkkFm3fDPuCaFf7kP5qRE0hzHqIvgN344pPxZYYAVWFmDJYbkD7EeR+Hz3z\nHBR2TWD+41upEx+QfskoVL0NRAp4F8LZkxBb74MzBmLSiyhZ10Hi/ZgFo6Hoh8h3DfDryMcvRBx9\nDu1HbzK5p5fuU4cJ6DFYqtZjdYbRa7+mTFMpMMfg2Hga6/IbUPLWIaMOhBpHdLELe2ozMuRDnNiF\nNnwZbZMNEh3zSa6rJDinEl1vJXpUI/L2aWxDDmGdEsDnt2McdyMSEkjPdSJz4hC5SfSNzsdpPYC9\nqx5nNAgXJ0B9PFR1QM49NE1eydG2Z5n7/qdgbaJLJuDacJKBZVWE8hTs7ggZORpETcx2o9+RpAHY\n2YvZKtGvuYvm5ZtJ/0AQ/v2vMQrvpy+hB+vBOHzH2ginCZz1Taj6XBKOZBI2DWzaZETwZWRDLPaC\nbvCnIdp2Q+qPwfYWWMPIyK+x2CIMPRXCmz6OUNejGIE36UieiHfRz3A2fIuwJUPJNxA3Bw7vhu4o\nJChoLTr4QDnjRDoDdOamsGfpJRyIdzMjYCVX309NzGBqLaXItmyilY1Yhn1NfsmLFKgGOGZC3GxY\nvRb89TB6AcregZiZ9fiUPNo5SoIYBe3tWGQfsYeciO5ySLgDEmcgS85H2DIJfhPFmTYcqz0Vdq0H\nlwcefhz2P4tQNBzk4PjsA2LTVhJfeAJt4n10Nh2lzaIRo8civALMzYSNVhKiq3A/eznnXvED9k0v\nYfyTRdjW96FcvxGF74Jw4QZoCMKdt6CoaQhlMt/luiOkCabeb5DwL8DfMhwhpVzwX3Uc/xpn62/A\nDAZRHI4/vhb+LiYc/Yp4bzkGw8D3HA2DjxP36ikca19BD7tRRiejHT2MWDEaEk5idhQSecmJ5aoI\nIrkRHwOIZHWj6UPR63Yg3BG0nTcQ1+Hn2JwZFLQegKooZMbBtjC6w4M+oYfjnrM5fXgoS71bMC85\nl2/YzKRBi4l1rITProWYbyElGdomwKhb4PAOKDyK0vA5GFFELch8CVUhKO2Bnufx/Xw9lZE6ktfe\ni9+Zg11MZvyurykclY/WMhURKEd75hqc56QT5jyceVbsW1dhHz8NmbMehk4mMO8RlFcnI7/cifjl\nChx7N8ABiKRqqGPnoI28gkjxRQTqVZxzDWxhL0LqMCqDtqkWgqGPyDiqIGY2gPD1C7VJh4m3Qdwi\nqsxCQh21HBiWyeimU2yecwfnpfkR4kkcaTlg64ChQWj2oGxvQTRIGJCKp64dzdRR3riPlJp4IhNy\nsJ5+BGVghMrPYkmadC9q+424d6VA7isoe56CtGrss1ZB5zfQdQMkvo4y0wXCgAEXQeUHEOeFejs9\nY+aTUnoAi3EMjBDdcaOQCYOxeq+ls+5BEvX99B0fjyc+HrHkFnh4JaYLOpatoEN2MXD7ZmSKjhoC\nI9DD6FffZoDPiyd/GebwYYwreYYJVZLQaTe2XhPLhhwqlyeyL20yE8eux3/yHQw9ntjz18PpXQit\nAD3pC5J7XTSY60h483ao2gcXvYxafwQ5ZhYYFbD7F3T1pRGTU0+JauAoKce6JB2yhsAN9/e7oMxY\n2F//IdINncdQW/fhzpgIX97PeyMncdW3z2AqHWh2leDYwThOlSK/HoSI0XCfrGTe6J8SUp/CtOkE\nIx/QE6rHs0nHfvBb1LixkJzWryfRX4kQaTLW/y6Iv4/R538F3/f63+/4Pw4M/+s9Q/yV9B06RPGc\nOTT++tdE29uhqpB2XzbEpKMm5aElF5Auz8M5KAvlgtuwrvocdcZ8pCcZ8+Qa5MbdiG1gjQvAuwZy\njQEfnsExO4JWvgVtxBXoUwdhdPsJuyykNRYhu3VkSGA+104oWcNICRN4z0vgUJTEjg4sC4eRsqEE\npgxg/wADM+cssMWArsHZH0DBAvjqZRg/C/xd4C+HgVH4wxOIn3hQmooQMRPgzGnM42+S8cX9RCMW\nOoMRmltKoNog168g1r0M1b0wwouy/GOc0RIoeo+2my7EsucEQs5GtlcSaLkHw2UjODEZZA7i7O2I\nG29HTLyeaNUB5G9uQnk7iGNtAFt5B6KzEBlOIuT105EbJbEiAyUpFY4kwU4DsufA0ufpO3SEXafu\nor5mHaNP9DC9uxXHKS8rnn4R0dcD9kEw8Cw452VIGwEL8jEvdCJH5YDZQ/s5sTAclLs1bJe14Wxt\nQvtxC8ojYUTjESjeCk4/fP4WrL8L8u+HzCsIvbgU89BtUF6EGB0ERzKkdMPJQjhjQNJSSG3E1/gt\nQi4B/xDQtxDvfIhWbwy+zjaSilo4U5xJ15hUetx9HO66h72/LKAzP4Mur0L8hOeg0YqM1TEHDSV+\nygzSx/QwclIxWTtfJuexR3DVqTgGB4jt6sGZm4Hl+ofIe6caZ5OdvTzGaf9HVC+fDEe+gI0voMz7\nJXLgCOwn16O1NWAsewjuPQqGCZYTiKZXwZuFP9SN71gVRmc2qaMG4sluILpoCWQmwJFN8LOPISUH\nQp2w/3ZYfh+kTAPhpHLR82gZBbgLbOitBuLyOQTjglgOJNN0qYl0hOB0DOIPz2FPTcC2ZBGu9I9I\n+WoPWksnrRfEUnu/pJFH6GULUZoJyqOw9SZi9ao/82j85+f7WicshFghhKgFJgPrhRAb/rP+/+3v\nhD0zZhB3/vnUP/II1sxM4i+6iPK1O8nN60bJdQGgqi5o3gsJ8+CG5YhJc6DaQFb1QEQBt4mZCUaT\nJOyy4VB6EEddMOZShOcktv2VyDoNS14UT60fGTKJ3iKRbqBhMR3dZwhN7Cbn5VP4sntRX/2I8Lkz\nmHJ8FjUDrdTU/4TsuQqMKQERA1mz4LXboXAjDJRQZQVLCjQcAbMNvA4Ih5ERP8bWWxHOWJxl7WR3\nVqM7LAirk7ghDTB3NJw5Ax1NiPI9ENMKXXEoh1Yjrv09ovogougICauqqF4WT3ycC/nEWsSvPgX1\nDaztEUhYDL1vEsg/h+BMJ/Ztf0Bm6RjHt2Np85E89Ef09r1Ay8xrGLDlWUjLoWvyjRwJvYbxg1GM\n21jJlN99gzoqD4LdqEueQwZPYzzyGsqQRETIhzhTB86BsGlb/4yypQ00iZ5rpcU+lLTqRmhww+Dl\n8OtsiJHw6buQPAx6hsI0A6pPQ+tXEB6GLddK77duwpVFxC/tQ5m0Gqpvh4K50PQS7HmJaMIVNKzf\niCvcg2dmIpaHDNT0R8mJVBIe+z678ofQsSiFGR+VYe1QGb6uA3ukCNGeQLzWjLzcR7jehq1Np2NW\nI86UN3EYh8AWC4stYJsKzX6o2gtnZULCBbBxGeSOxlcUIMM7kP3Je7BbPkP+7iDirNuRWgrSJVF7\n7Tizc2ip30Lqph1gDUKWE/JLMKVEqa3DXPgAIvwell0egpljUArWY8SYaNGjqGf6wNMFJXshdhJi\n97Ow9LfQVMi7DR9xa8kR+qb2YjyYBKWF0K3SfrZKvP1ZxKKfgirhgwTEyidQT2yGxy9AeIPYuraS\nUpYO9/yWKFb87KYxfA8BfQc5PQr1jvEk/SPF/lfyt4wJ/2dIKT8FPv1L+//rXLb+BpJvvZWRx44R\nqamh4ppr8JSVYRyqBDPQ36Grvj/J4oUnoKwY8vJhZBxipUAsmYaZYUdNsiHj41Ebu9DiTSAE6mkM\ncxzBEi9YDEQ6BIYkYiyWqAbYisC29jNqz40hOjuHklHjGbl+J5FrJqEmguvtjeQfKMQRX0Jrz2hQ\nPH8qi3j1M/DKD2G3CUnZkDQOqtohIxWWvI/x0AYCF1hRGj1ocy+mKi2fYK6L4vEF6GYY2nsh9lh/\nBa3jvfCbn/fva3sZIuxA2/0VjJyCtNhgwxFESx/SOIR5cwPygxfA7IJJCdC9FSrCuNubSRrYjpw8\ngHCeHUVJRSuYhPfFd7BZUtG7dlG8cBIbbruCY73PM+7ASyz4Yi1xJzegejVICkDoJsidjogfiXp2\nK8Y3xejPvYvsboeABGsEmWGD2CBMnU9WpJdvE+6B2HNAToIB58Dsu2Dc3Zg2g77G5wl4BaFFt2Cm\nhqHTCiXFyPABYhZfhXt2Or1l6Zi7z0Z2dkHrepi+CDlsJrr2LsmjTmNz19Dwi3L0/BS4cRHa8nps\nM+5hXtpHXND8Ekl6Oo6c83B0SsSImyFiQHkTxh9+jzJ+KXQ58VYbsPdWSBsOYw7BnDKY+jUkLwZb\nATJQhln2C0jJBfcpkipL6Fr1EL71NVjrLBy772zqVp6NEII9wkLxtLNI2fIKnc1roakGkgZA7Tj4\nzE70zZvQ8+YjPllPdLjEXiBwrt+Dw/cuuutV6iJjqY6WY/ZtBK0TvJ1IiwHvT+ZY3yEGadnEbfwI\n98d+9ASN4PQweoKJL/wDbDGXQ/K7UKbBeT7o6kQc2ANXvAZXfAQDRoNqwtFPsUQ9+HpGk7HhBNld\nP0NJnU+Zd/Y/SOH/d/xP2vLfESEE1rQ0Uu+6i5Q770Ts3kvXNg0Zae3v4E2Dhz6HFRPg6x1gr4au\nUkgahBybQzg2HcM6GrEsimWIA0MTyPRsaI2g9m3GecEklJH3IQbnorsdmA0KSq0L0aFiTrKR93YP\ng89kcHDsFAILZhG2TkW9IJXWL3vgUAOJX3ZREeukpXHddyUJgW/eh2AYclP7rWtS3bCoFc640eNi\naOi9AVvCKNRhg4lu/hjzyk5kXpShpoE1W4eJL0N8AZw7FMYKGDoRGo+DVSViVxCXPYvUTHqmqOjX\n3ELchjbUkrNQBrz5nb3SONCyoFeDwYMQ8130iTj8dg+2YBpKUzPmwCHItAZsNcfpDjk5tmQimr2B\nacZcPM1D4WgEfnwERkrkJ2WYR7fDhlfhyw8R6iC0h5aiDPNgtqUA9dAVRi72YSQoEDgOlijn9N0O\nNYXgdsOuD6CwP11cKE7c419DpM6gp/0jgpOdHPKcoHuIn4iWiH9qNo7bvsX1w90Ejkk6PtSRE3fC\n2PfonnALbeY0QoUjscecQ8Lj79O5/WvC+99CJi6AvrXglIjEZBSrAwaPhphsuOF5mLWI0G+mE21p\nQ1t4GaLej3o0AZu9vr8c5Lq1/Qai0J9u7vPRMmwyrYWL4LzTkD6L3pREMlMD2JJHEBcuIORrZr98\niud772edupjck3vQmiDjZAfRH28ARxIsugb5Xh2WtQHcOyVGqR/T3oMS141Y1UzrxFF8NayS4PGT\nnBh1GZXdZxGqtRLacACjeScsfYPYQA6XPHEvkVoPnv0BPAfqkE6BxZKDs80BJ56BZhtUJkNHAhyf\nDbPOhoJZsOc3cMOnkDYW5v0QMGDTChTXQOzHNmJR5+Bo8/e7O/+LEMH6F7fvk/++Qfh/C+H/hXPE\nCKofephArZvq+0oxenv77z4tdgi1Q8NlsO0WSMqDnjIo+wBHXDmBQ/uxje9BUVWi6yWmdhIGNUNR\nORxphoo9yJhheO+pIvKxF6U7AOOfQZa58VaBOHicTq+X+Bnjcf5wKsHXy0Dz0JPhRGn0MP61I5TV\nPUXX/anw1I3wxt0wewZoXRDuBv+HMPB1AlkuWk9eQPqXB1GrNSKyhNbzdXwNYby5w3GNDyC67PDp\nDZiV7Zh1p8AmIKkDrl8M83Ui2U7MX8+hS38Be3ccavwkmi7NRTR+g9AzEDe/Ahs/h8/WQPxQ5KQW\nQgP2oMvhuG1nIfERXjYB/9x2pDMLa9owxn5cy6VnLmJa6wX419xC2HYImREPn14LZgtSG4ActQKu\neQqufgJOg8jLQb35KpTMNhifTIVnKJ3hZEIXxIHNA4ZBJMUFSTlwZjtc9BDs/QCOb4Soh//F3nlG\nR3Fli/o7VZ2DWjkHJBAgCRA5R5Ntgk2yccTGOY1zGsdxtvE4G4dxwDZOGAw2YILJJmcQEkEJ5Rw7\nd1ed90Mzd+bOu2/ezPWd8O6731r94yzt1eeoTu9du/bZtbfY/TTWvauIP2fAHjWT0NB5bEsK0pLW\njcChX1PO23gjDmIfooElio5Pl+HmGC3tqzh/xw7kvNcwRlpxjEklfrFK0PgE1Q/68JRdDhVXQ+1m\naOqErV92vSZtMHQds2yNRSvaiji4G5olIsaDnj6WoKyBw8vgujFQV971u+p2LZbGBFrvPoHbvxai\n+3A84jIMrnZcIgVbRzp9Q+PpXp1JyO4ht70Iq3Uo6HGEemiU8wXa8Idg1cWIHA1lfD9EZxjR1op1\nQwCjcQpERBNHKvOND5CiZzGiaShpFUcw1nsJOC3UC5WTpW/QklZN+KLbUVo7EEEDMtqCOyIC1/pO\nyLm3qy7ynusg+TisOQXpz0D3r2HHc5DUHxQj+NrhxAbY9jq4dSithtJzsPx+Jh58Dja+DuHQP07P\nfwH/KrUj/vvGhLUwPHt7l2c5diaMn/XHvxkMxPcciH75Ps4tXEDy/Q8RkRUF/kLY4IG562DdJ6Aq\nyM4ywucmobfsQS8MoeY60N1B9F0CNSEA16+FVU8hy7cgV1gx9NQI9NIhbhCs+wpDlBEiisEe4pG4\n57AOS4XmY1jHKsjPvJi/1iC5HLWjjRErDbR5IXxsBYYZyVByBlK70RJTDHYd52fXYAkcQzUm4Unz\n09m/kKi2K0kK9GBLRz0Jtq8h0EDIpeJd5kNrrcQ0TEFRXIjhY1Di8xGZi1DbPqW+315iS4ZjbNXQ\nVt2JeCgeLNGwYiCM/xLogCOVMNQA4XZMNQJLfTua+Vt0VwLG8pGYa2+D2Pdg6kyougL50jBsHRK9\nmxmPOgj3hERiY4bBpp6IRWORq0537UdUAqTmQsJCKH4eYYiAVjOnEobR6onm8qPHQTF3dVRWFBgz\nANaeh/cngykCufKertZRM4eAkgHuBiguo/8ZQVP7CWJxY7BaCXj20epXMThMND+TTVzbCRrCx1Df\nO4r/CgURYe3q8deyFTpm4JwxBvukGbT89rd0rDCQMPYGlJH3w6vPghuQGiDgVAR6bRVUnICJ9xFy\nrqFF7sHeYyum2YvgizAc+xrSRkPiJThe+YQEUzOhRR+A20KjMptwhIEyQylZ7RGYihS0up+5sd2E\nzXMS4QuAnoWlQlKTv420mibU0nqYMBSu2AN+P+rCfMThdtSWDTDKAyY7AkFEbE94aTr0yQRfOZH9\n7sU+YCGJL/SlOX4nZ89Gkm40E7g+g3BqI/EbNTrzKok89hrE5kPzGTAMhzEZUNHUVSpz1Eoo6glf\n3AOtldBaAx0bYNxSOPkiTP8SKgpYs/cMC6df/U9R9/8Mf6+Y8N/Kv8Yq/h4YTXD3ErhhPFSVQF0x\nmM0gdewuH4QM2Pvbyf76dap/8yHScBRX7kCY+lxXsewjO+Hii/C1BzBdejOuM/sQ5wTUdmBcejV6\n2WxkybuEo+vRZwxEGk8R7tuAmDuTw04Y92YjwlgIWamQ5EYW6tiXeODd0eA+gGGiD2ubjcAeA+bF\nd8Oql1DKfbgShlD65UiyP9oB2ibQLCj+AI3dsjDoDaiKmfaBAod+C0krXkAMiYPGn3AzEWy5cCyE\nMSWNiJvdBA+WYpzdjmxoRSv7GPxPEW4PYCkuwFE8BtHnJ0KeML6jEuNuA4gU4AR8vgg8dTD1Lpj/\nPHJbBLIkBrF/CYYr7BA9B7Knwsf3QNZI5NcfE0oJYnRKOOVEnduLCMtownoHZN4PCZmg9UDWVsNr\nT8Pdj8PdH8Obt8A190DDHYSPWumX6uRF8RRXx1RAv8uROx+mMTmGyL3vI4Lerk7TzechbMAVALaX\nwajZIKwQFY9xyxEir3RwQMtlRIkDW4UFY+oQzLHNZAQ0Kkzfk/XNFFodk4lauIOqpGdxHrWhnvis\n62mh6AWUAXcRc8+d+Orr4fMeBMMvYLjmNpRPfofvXC6GlDxEmYLtssmERhgw1lfSPDABTRpxGHpB\n/1VgmQI/PgXJs6DFhLp1F9bYVBruqMIWOxJXRyUBl4keQ8wcNHjZImJJ4xZyQgYMnnTYdg9yTwBj\nh4X0zdXotRrEjwLH71MtrTaY0xtWtoLNB8d3Qko8HFwKJh0SQ7C+A/pkQ/pkjJFZ8HgV0bs/InLP\nI2hLpmKL2YSqBxAJ3QhGeggVfozRPwJykiG8D8674eJVkJgNeidE3wjO2fBZEGL8kLgYwvUQMwSq\ny2DNe/SraYbsaBgwGUzmf57u/5X8g1LU/q/89zXCAI4IeHN9l7fzyq+g5CCg0ecxUKQFDgRRBpeS\n/uKL8O7lyPkfId94GMVmg/xRyMkvYDiQg3H7EmR2iLAljnCmAS1dIFOXI1wHUM90Yoi8BaG2YMw8\nh7o2E3NWISH9BKahYXS1HGWrCUo8nMztR8LPz0LLaNAPYRjtx3CtA2obILsvPLYL5ZtX6PHicrj0\nEdjuhMYtGBWFljQD9hgf1goDsbuqMTW8BNIAex4FBLP8a6A4BjpaoV1BNMVhfuozWD0PvZuKET9h\n8SStk1PRgiNxvnYYZCSobpgvabpkJES/AT9eBy2nIVlC+Dx8eRlUaKhmE6Sa4Uwr1KRBCuilO9CN\nBYQWSEzfBbsqpk3Nh5hyiJ6NIXYseNZCSSfi4sfgd1fD5++B3Qk33g29h0NlI7rJhi/NTdphL81W\nD/QbgIzphi5OkyFVcE6FthNgroBkDWHPo2RvK0nZgoQL30M+OJrAnCZkTi32d8fQ/dqrKUnbQcrS\nrxFXb0e4bsDke5PuFTpKZRE1dRGkme7FazhOe14T0XvikcPmEKpZTqisP6b9boyTLqItOYVlKQu5\nZesSzNEaoqkvov44xmGLUQ5XEEgrx62nYxLHiAz8vgebMRKas9BSThNI2o/SfADDUAPBS5pxhUJ0\n5G+ir1WimRUivXsJG60YOlWmrS8kaNiPmPgtTFvFwdFPkHjOS/qG7YSqasHXADNnFgoAACAASURB\nVBPuwl/8IVpSPvbWQygJZuTo2xHPXwl2YMluqNwOR78Gtx8Wb4Znx8Blz0PiQAz33k/7Myl4kkuI\njliHofo7aFuLs91GcGgtBu1rhCKhYSAkzugywACKExI+h4aHoP0MVDdAuR18+8E2Fyp/gPpyVM0M\ncWn/Txhg+Ncxwv99Y8J/IDYRomLhmeXw0DKI6k4o3kTrbVHIDgd8/Bw8uQAO7IctX9G44wTy5qfB\nYCBw5CSKEwIjCggOj6N1YSritM6Jz2sprZpNsO0SzPsMGOiLGopCPdgMip8cbzWmK73QGUTbD9Kg\no8VGovSJhwtehgd2wcTfdnXX+LoDorfD7DgQXsS8+bit3dCev56wx4l/2n20D1AJuBRiN0UQedKN\nYlHQNSeYk0GooEpEBNDDAnkWGNAGA20gq5CNKpqm4jNn0NjfTkLhTDI+K4Tew6D/vdARg0yPQ5Rv\ngjdGQ5mAoQEYMQgu+wQ57Un0kAUh3ZCaA+dc8N3d6DtuQsS3o3iqkL/NQL3kLTADvcdB0myIzuu6\n/sU3Q+KsrhuhEHDRfDi8tytmP/M2wvs+oC2/D7YDTSgdxdjCrbTzHrpvMUqjk6qvhyA7mtEHj0RO\n05CTQOtrI+WeCaQO8hK+LxrfJScRxQ0YTycRfCaGhF7j6UxIJdwtjKW8lo7EasTpy1FWdCJnjMdb\nWUl8wmwyeJT2VDfns0s4k1pNSUIq5o390C2jCMdMIjwymqt6fISx0gfBAPUDR+Oxuel4/xaeuvFa\nqvc2UJq/D2ehgnL0R1h2B+xZCSdUxPw9WLIew/yOB8MtX+HY7sL5fj2R77URv/M8jo0eDp4bSkkg\nj+jYHshrv4CrfkdV8mYOq9uIrNpP+hkVtW0clmd3w4gpMOxOWio+RX54FbTWIfMuRj9xGO59GIZP\ngCcfhNpV0B4FiemQmAH9L4K1j0LlROjvwj3SjwYYjlUA18PRTpSKZoztGnpNbzC+B1UhaPv53+uR\nUCH+JXx9ypARaTAiFS54FG58FS57GJ7/idLB40A9Cx1nuzpA/4vzPzHhfwb5I+CN9YTWTsbcWofe\ncyzqzKHQOAgOrERExRMRp6PdNQVDtB3/tm3YL5qNoWI5TUl5RJZegznmZ3J/WsOyiw9hitS44XQz\nasjf1aLcbYLq93FZTWgVCSinrWid5RhsJjom9GN8TT2c0mDLAohMRkREoHezIYetQgm0QO01SH8B\njqvz0N70wu7PMe8IkxipYMk4i6GqA6GBeligJ7QjK1sQqaNAetBaTmGYcClULofshV2t5Vc9iZYd\nxGuw45mfQMILzSivzYIhZigfAT+/C75q5JilWM68BOfOwgVp4K8EvRTCrXi23kPNbBfCbCS+uYX2\nfmMwnHbTNkGStE5ij5uBacVy5MEPwDoE0fN20F4D6YW2T6DAAqPv/LctkE/+FnHXImhpQsbG0HRL\nBaa6MIrbgT7Mw+C0oxz2pDLB3Q1ts5es+l1onQKl9x7wqIS6XYXqrSZr+BCkw04wdwWWVxtRRrrg\nfBVK0VNoYjL5dRk09IzC3OhFc9jQ9/6AGH0TLaXHiB6U/m/rMRyt5NDwTIzWWiau6cTQ5qUm/yre\nN19Abs+ZRDY8xBS+piMyiub21aRtaSTQJ5rHl76OJ9dCRslhRNywrnSw8rfg8PuQEUT58TAcHwy3\nPgHL3kc48ulsjyfioleobb0UQ+NA8iyHCJ4ykG2wc2JAJrn+PuxVluL0CgatVsFT1uXd6mEI++Gb\ne4guPE7BFb0Y/IMdMWoM+l23UXtDDHEVPxK8ahS25GchvgbWrYHyQhj2CRgDcC6P8KVTMIVXEdts\nRnx2M8QNgDyBjBHQZIZeI2D9NyDbwLIADj7d1UhUMXbtnR5Ay7UjfrceBk6A/W/BjMOguAFJviyC\nPWcg8wrIuQdcOf9Q9f5bCfKv4bH/9/eE/xyDgYLAIgLju6O8dwaxrLLrtL3fNBh+IYanPqVF5sAT\nqwmcPklb6jm0Qg31SBqmbYfg0Ee4Ji3kqmXlTPt0J0r9Cdq+vgX51TswuhZ63YDYFkI9FoYBQzBa\n49GiorCXFKBFFKFveh69Z1+Y/DCk9EcIB/qXQ2DtWtjeAmfPg3cN6iwz+iOJ+G42I10KzUOyOL8g\nDxJAuEDEGwnepiCV45BUhEyVUPAhNDZ1nVzrtUADrVkRNF3jJPa1MpS6FtDegPYRUP4qesVadE1H\n+XkZrrNmmHc3GOMg9krwW+DLq7Ae2Er33TFk18wmoq6WhKRbcM38LcaTzXREGugYNQxvvwzYugfU\nTLAmgrCB3gHtL0Njb8gc3HXtIyO6ujXcfB+8u4QAW1DJIvKzs8jcRog3MTJCstc7G/F2GHX4lWi9\nFUS6GS3nGbTATNTWS9H6L0bT3kUv245lRQJK6kzISIKpCSj6zajGXuhJTUTWevHGgrUmm4b5jfiv\nuITqLdkkT6mhLPQxO/0P40t0MGF5IzllFZiLD9NiMvLK2HGU4SVDWpjoOU75sCkcu/0+MtaYCaQ6\nqJ+QTHvf85i/O4RSD/rBMqQ+D3xJYLgA1NkgF8Hps1D0DbQdQ5w5itLogcrzGN/1Ef/zWZJuaiTO\n2Z3u7jgOyo2cth8j3ZPG5MWrEbVhmBmCNffCb0dCxVboPRbfqMlE1TehGzSEXgVYSfjddpRAEHwF\neP13ow0eAeOnw+apYFFh6q/gYCOK73tsUSmEmy8gOC4NaT+CXq7DZ2GU7zyIb9d3NX09HkY2nkQm\n5MCh60DvanKpbVmAoTYAUyPhcCEseAA2lULivTD6C/aJG2FOFQz/4F/eAMP/5An/U5GaESIdBAfO\ngNRUePd5KCmEuvMY09LQGhrwl3yP56HzRK70YuqfQJ1+lOKoErTMTDj6OlEtJ+hW7gdrDoH+Yzk/\nPJMSayahuBVo865BVvuRxetQWlsQVS3UTUpC3LoXZcZzKJt+goZSSBoPU8ei+MNw7jWkPAB6CKmO\nJpAZRThxCqZTl9G8J4LWFDtV/ZzgdEIyKIf9KGVRhCf70O2SXZF3QA8nLHwFoqMh0kcgfiihGIWE\n91wYqj1ofjeeKwvwPPQFnhUqnjUqsjOE3Pwzxu/KYeMp2PYlbCiC48lwcA+iOYjSXgvHlyECfswk\nYrcMILt4PhlLTURXrsc+/TiYjYgd26H4EAg7tD0KraMgY8i/vYCipwTxVN+ElmuF5pMYNn1GzPId\nyME+RIUF4fTT5+xyTlUNR48/jvQ9Q7s7BffcG/HxJfX5u2gV9+HXFyObO7AccxDUpuAr3oPUasCo\nQEUflF7fYdjaB4vUsOlwruB71P5X0alvprZPFYcHDoe2lYzZeYCevb8kMu8WuhV0Rwu14Og1kNd0\nM58FfmJY5wyMCYvwTVVw1GykqbaOhlsHYLH6KRvRxPnrEtBrhiCHzEbftwdpnAC4YEcBfPIbGFsL\nk6+FuXciTVF4vPEEa5qwd/gwbC1FG6nS8/gJVudpWAIOmprPkv/UQQyz7oJps+BgI2x+G5rOgabC\n6VVoWcMwhgSaBeTgXyHGzkJonYieD2HJeB6RdD2hwr5o8dciC0PANNg/EAZ3ojXU0aEWcGb4QYqm\nGwh1mJApQShXwWCHXm1oCQ68T7QRuEKBtEmQeQMcuBo0H8FRKRg3uiHOCje+A1u/hwe/ge9eg63L\nCQgXmKP/eYr9N/KvEo74/9IIA5gMfQjpRZBsxj07hHb4Bzi4Cbn3G8S4Quo7niQ9fA9G2xgY/gxB\nh5n9MxSe//W9tC18Gua8Cn2TEB1NJBzdTGqvXtQaQ3w3eRS1o3YRePNmRLNAuu0o9SGiG3ugdhoI\nJ1UgE7Ng+2cQJxGNm6G3DZkK6HnoPZNp7x6J0WfFtuVbDHFu4u6ZSdIaF2pnLFrENILfqwROx6N4\nkgnlGAkNMpJf+R20NcDRJyHdDbnzMIV0Et5yYx/0AOL9M6gpBuwXzcVxRx/sM3RsC2IgIwHDwN4Y\nM9rBehqmXgGOc9BtFFwwGS22O2LY4q4kfIsOsr3rAvZKRA5LgkOb0PdHI6JjwRwJ310FrY0Q2AFF\nmTDyiq60NK0ONWE0xj37cddPRjp/Rj3yDXLSaJSIkXBjE3REYch9nzvtv0K2FiBqp/Nzv1sJJEZg\n9+cRY/gS58EKbC+ZsUR/AwP6YB73MebeYcJFCqHNGnr7AKg+jnLZPQi/EaMR6mnHdz6Toy01REfn\nMDZ8J5lHNZReRpA1MHoxaksdhpg8avvXERSNgBUhIqDgRxI6FHqubEO5YREHY2OIeu88vTaV0x6V\nwqHM3qjvb4SSY4SvnAq3fQVVyZCdDD4VTtwPVSugZx+8x0txl5zH5FXhullok5yYDUfoZtjD0AP7\nOR8qYP8MC2x/EzwC+t8Dk2Nh4dPQczq46wjUbMI/fDGN43NACESeDT08BnFkL0rDUay+n7A4zMjm\nbOTZZvy7CnFblqG7A5yfnYK7Og5EDckncjCEvciwgEt1ZHc3wR5+tMxcDMpTmA1fIEQkxI2F7LuR\nB65AtzahRgI/HIKUFJh0HXz9m66YcGMlAw59Dn7P/zFH/1+Nv1d7o7+V/2+NsNU6EW/Pw5Qqz9Dc\nvSf62c1opbcQbL+WyFwd05IeGH78AhY+CRFzcFVV02KI4oqzTxKpfQNRH0C3AAwwQaACQ+s+Rj9w\nkIsf30T9gQj21BTgu2U6BL3gBaNoIlhwMd5eb+K5/me04DJk3X5Im4cc/DQ+nyA8vDvtabE432tA\n3ROGwW6YdDW+xa/T+tKtOIKDUWJMGKabMVzUgdzWjLJsCOFEib2zFr3diHT7kJH9wZGOTEuFLCvi\n9CYIrYXM3ojybbD7MYjIRu05ElW2E/SWEMxLQzY2I5UUuPkINNWhdX8EkRILaz4DRYKjF8SOB08D\nsnEV+sIiREMaigyAJQQvH4PE6bDlHajqD41lEJ8GLYtAq4Fz5zAc1bAXDMd73QSonomyUYUcBcpz\noM2P3HkLW3dPoXTKCoSlhQtOvIzecBI1LLD8eBzziiCGvIkI/WnwC/ikFdnehtK9BUNsA8F9K/A9\nOgO59jGERyAC/Ri/72e03e+Q9KyNvIGLEXtuhQFPQ+pyaL4TwrWg6YjkfiQnvkRD1RtQZETd7EBJ\nW0JsuYo3wUf2m58w9vg5igfk0TZgFANLYhjS/hWBHqkEX70azX4Cjh0Evw/GjISbj4JzAqRkIEZ2\nEvfruUToq1An6GBfg9GRTeGogfT6QCWx/z6G1RynNssF7lToMQXGXAZJBqhaCWd+gI4KfIlzcLf9\nQEfvKHDXIFwVyBoFJl8DDW8DKqQUY1gaxJdsomVGE1rSHgL5Al+SJMbbSPr5auysJTRUgsdNuLuN\n4AIVPd4AtTUYnvkI4W6HzpKuG2jMMLS8eRgqz0L3cTBwIqx4HVwxUHYMXr0SFjxIbXI/eGBCl2f8\n/wD/E474JyLUEM2e1XSMbCbpk1oyDqTSfGMKZddkoagjsZiyiB3xE3rfJlj/KxpfvYFPMxbSo/o8\n6SeD0JoANb3gQCt4LJAbBy09oCED09iZDGrtyfCVRTQeLqN2Xg+EMxLz6hKkvT+2rSOxmXaiVvRE\nZD8MtstQOk5xaNoIfL4juAqdGII6nIkEVRBMSGA1j1PKAfp0m48YuwjFFURtVVFndcfSsxe2Q7No\n6ZsJITt6HYTe34/c+xoUrUXOmIkcNQ++ewJ8HjAWgn0aHPwM3KshPgGTsQ8+l057ho1adSv6d0/A\nhCfQXpyHDDUhndEQmw79XgMhkIefRE8+jhK9BjHrZkSDHzQFzFaYUgvjjVDSCuY6qL8e/JvBOADi\nEpA13TA0KJi6PUAo5wBUuEC8i/ywGX2XCZH9MJHjxvBi+ly4YTObs55A81RAwSqwfQHX6VB8EA7M\ngaZchBaBEpEGriykKxFTdghzusSz6meC9T7EwZ0YYswky9N4K85ia/kU0i6CuMGgxkHsu9Q0LUEv\n2EqjWkTjputJ2lCIsvcV8AEb70WpLyZkTKb+/tUYT7SQPcpKceY1lHfvg/CqWGdMwhL9ISrD4K2n\n4M6L4ePN8PkC6DsKJrwMF3yNrV8nynAfZzMmw9TDNI14lqTfnsKxvhxH8DlS+pcyNEIlPHc0VNwP\nuy+CzngoOteVoua3YDS7Cbc2oZXaCO++FTFuCfRpQRrvB28SNF4BL9+OnDmSzqGRRK5RidgRwNgp\nMDXr6C1xOD7zYT0ZxrQVDOecGM2vYT7TA1PYidEwEmVDBRQdhhNXQuWDAAQjCjHGvAiOFhj8Ihzf\nAN8+Dr/6BJyxULSbxvhe0HcsrFwC5QX/VB3/a/gfI/xPQCJpZhPxo38gescPOFs1zPl+/GMBYytx\n3I8qF8NqO/xkoWOZicbYJDZcGMddhkGkHvLSZAQcA8E2GhoqujyqrOvgvuUwaAjYY2Hu+9iyh5E+\n7iVi7eWELk+h/v4YjN98iFJnRVGTYPwi6DUSNjwFRe+TExlgT+4wlKjXwH0axloINQ6is3AWE9e2\nMf3bOpQP5sGayVCtQ1YWoqUAancgLlpKrOM8ijGM2vciTO++i9CNEJCo5s+g6VXQNUToNDS0IYs3\nIxMjuwrtTf0IJW0MLu8ITFZB24RUqobp6N8+QagqATXJich0QtoESJiKDO6E89+gNE5BuNchK25B\nj1fRpQk626H1a1CCkHoKjGmwaTOcnQhhH0qKH5GSAdE9MO7Yhdp3DqHOnchLByBtfVHuug8RU09n\nZCIbW7r2zK/EYm12daVIHT8Dq0Kgl8PRlbDmHVhyBmEQKMHe+L0DUAxmlF+XYJ+dgqL4CFZDU7SL\njaMnU/OrMD+k17I2y88PwaV80vkUa+VaDnpaWLdgKFvGpLB8dh7fj8uk1WSE6k3QVgB592Kb9jQF\nptVY6prQs29grHsKbmc8JbkT0U++i9h2A8Y33wZXe1eWwYvPwgEFjqlAFKhmlNg6lPR8DB0B5OkP\nOXN2K/YxXpo2D0JJuR2r4TMSEgXqnBbkrNcg7ADvcYhxd3Xe7jcVSjej+lOIOxxFZ6wTWitRFy9F\ndCuFxAvhqatg7AxCI8twZSdgPdiOSJ2PwRpBbAmYylogFgiBuHQp9J4Mv/sVInANimE6TPLCkg/g\n3luhvhAa30LKIDolqI5pMOQjOPkYZGdD+RFY/xI8+j3EpKAZzHDDEviktOuN1X9x/scI/4OQdBXE\ncVPIWe4jrJ0nriiMtWc8WpwTdx8zZv9aEqtbcH30JsrZ78FYjfeNLezKzeLt1EQuWfUDUZWXk5xZ\ni9tuhZMfwb7FkJoJHVuhfCX85gIYVAQ0grcael6CWP01Zn8ObSPqMfW+hfYHYwlF1gCgTbgc/cfF\nkDUf6nUilUZiTp1F/+gKcIzE3ZqKu66B6FATCbVHMEs7JAahIxHSBsOo2yBtKDRXQMFbnDDOh/RE\nWtu24T5xEM3ng6yx0OsJaD4KRhckTUcOuR/qQhBvAUsf2PMNjL4cIpOxXbOH3JZ80oVKw/y5KCkt\niHYHuPwQlY/84grk2iuhMwmhFED5e+gJDxEqDKL5s+Gd67oeXwu6QYcCkUXQnga7voBn+iI2voei\nfgO7TsKhd1EHPYVRWAlMDCHnTUbu+Rz9/AfcFnWEgc6u/TOF3ETs3we2HBBDoVsUBIHydWCzoT00\nmuqgSue+nTw+awJ7uuVTsbQXW1NyCd2YijJpLnGtzUzdvo8xszcxsWMbF7WOI37LMXqIqcww3szs\nQz2Y8epGpn24gVuKxzHHs5io9pSuEpIJQ+DbD4muqGLQpjfxj7Bg7MyFl3Pou+IBTLoFd207+q5v\n4VQD/PpbSL0AYnrD4unwzD3w1rPQ9BEYYiDhTg6bFlGWcwF5tQewJsVi8tYRatuHSZmNqo4lEB4K\nux5Alh9B9n4H5m+ACCd0xOPrayeh92IsJzcSLioCSxRi6RB4cxx8uReuXoSv41M0vQJzdBv0CcLK\ndXBIYimowz8kAZGai/CM6KrMZ7ZBAlD9JYR8SNdMmHk5DO1J8JQVPaxAUV8MvsSuva2shENeOLkK\n8ofCrF8TDoRo/Gkbiddfz56UFGo//wKZlf/PUPe/iQDmv/rz9+QXR5yFENOA1wAV+J2U8sX/QOYN\nYDrgBRZJKY/+0nn/GiSSCl5Hk52ooWa6NzSgCjclUQ4aezhxrqlBC6chfiqF3kkwpgZWFkKHRoHv\nHT58eApvP/YmjnFecMUSm5pKbGkxnPTCqAHQWQ/hOKgLwCgHuCJhwCtgzwRHJjz0IHLRFLwxTaQa\nbyKk2RGRm0EL4dt5PUX92uh+aDXRJXYMm6LprRVSPn8Aotdgmk1pDPQ9h2hYBs4vYct7YLscfvMu\nKL+/d4augsZ8MHcj2/0O9PDgphctsQfwDumO1EKg7sCS0xfHEDvOmj7YD/mxm6C5ZzIx1nTCtQ2c\nyrKy6qo4bNYVXPHzj5i7NaJUrqPyN0OI3nMWa20Vvt7fYxtVhe3TSogMgqwH129Q8x9D2bIcw6/W\ngv9HaNgPI+4AX2GXEYt+D3wtUPQtEI3YcCWM6w8tqfD4QITJiaWkCY49ju+acSiuQnzqUp7L6oWu\n59Ov+Gt8s+OxZE3HWFMB7sNQokJWBCRkoJatJ7lIRbtY4Zrdm+i7azdkqaSHglA5Eobshqo8TGot\njAwSri2DZX3Yf+sL3EJG13U0BhE5UwhGN9LojCb7lXmQmQCxY2HdfnCmoQ/y4Xyxhfab+6Nu+RDp\nbkcm3kHybw/gfeB25JoXQC2H1ffAoEuhWxbEhmDdUXj7KSjYBGkZ4JqJbvicI5EtXNL3bZS38lB8\n4Iu/C+XsRNr6HcN5aDvGU4LQlHkY0r9CMS9GTHgbuWsj0mnCeOI7zM1+Kq5WiYpPxTj2TXjzQeSY\ndHRlHe35FuJr8lBOrkNPNSI6THDOi7lRwZ2nIRxJMO4MROrgiILekdA/CXE4GX3UFmRbK2JhG8am\nJDxF59Em5+I4ZIVDF0POeLTLl9G+aSltm1bg+2IcaqgB10VX4p4+nREvv4w1K+sfod6/mL+XhyuE\neBmYQZe7UAJcK+UfTrT/d36RJyyEUIG3gGlALrBQCJHzZzIXAj2klNnAjcDSXzLnX43uoVJfQr1c\njqVtK+kd6WhJN9GQEsQdjCfesAxn5E2Ek9ogfgw050IoCqL703nHXCLUs7yw7SQxigbZ+V1vi7U9\nBG0WSE+ATVvh+CkoqIDaEoiPguSLugxwRwu0tkOEi0DqEYRtKCoRGOuTCKV7YO0iHDGXMeC3UdRz\nioJJyWhtJ7D09JIcv5v0ijcYdHADqi0NMp+DA4lwLgMm3vJHAwxgtMHAq+GDa/FXRUDsKNKqasn/\nycKIUwojTloY/uV2eu8+SVStFV/7Fs7lFrD58YvZlh3NN8k+Vl2VSEAEGFLQwk1l+aScrSNyfTHh\n7HFEJRQjp5mx6u04OzfSXNlBME7Fk+ulQ8+nIbsPp/kUddgFiFAz2GaAbSI4r4Km/bAvDA0FYI2G\n/GtgwFy44WhXsfqfNkJVKV6rm/aASqvMQB7rjWlNDk4WkGotx/vVSBLFUaQphL7vZXTlR2jTwWuG\nYWPAXgILHkHkJmNw+ul7ZC9kToeoDMhdABOXE8reAnlGRN8bifn4WSyFDsIDNcaeXoXx2yug+RiU\nbQaTmZjLP+RM8x6an90Jt20FbTg4JaG7MtHKfwXSTtRn9chmH1rVaND3oF7sJ6L6MOr6GJj8EFz+\nLrgb4atHYetKcEi4LxniXRBuBt1Le58aRjIZNbYXgcUXolTpGCPGom58kcQv2xG5j+Ken46edyke\nx+V4Qx8R7L4Y9x0bsJ86iO49S93C7vicAv9Ht8PLD0G/4UhbNdJ3irj9TSgH66EjGpkWCZ4AcpaC\nIdWHrb0aDEch3Aju7yF4AIpqIf4aiPgGUbMczNkwcBviJxOmsBM9ZSOdLU2UteZz6uN9nH3wcfzu\nFBKnTCb3Khe933qRpEffxj137h8NsPs81GyA8yug9eQ/ROX/Vv6O4YhNQJ6UMh84Czz8l4R/qSc8\nFCiWUpYDCCG+AmYDRX8iMwtYBiCl3C+EiBRCJEgp63/h3P8xMgx1DxD27ybalk6a7Vk6XaXUiQ2Y\n6SBOvk5T2VrECAXisol7rR0qTkJmOpiMcNXbGPZupa8mYPO76Je2QHEaHE4F9SpwuGFxITzTsys2\ne+IQDB/UVTs2/f6uNRzbCq8+jj51CO6UH3EoXYcb6tfPYUo6jRy/Di0tjdBgBylFzxGiBk+mTmd0\nBIn3NRPW7FiWfQXCAm2N0O8xuH76Hwu+/4FQMSQOhxiF+LfOwIwLQG6FSS8jDavQ1KOEZBKWs1Zs\n5ZuI9RsJmhMIm2xkhr0k7/BiH3sZijkLPv4BWl4Hi0Rkm/AfrCe5MA/qdyKT0jAVdJLqOIdut6Mf\nisdsLKFmdjvFfIsxrpkY/y4iLfNATYL2ZyE4CKpWQ6QZ9u6GmIuhVkLlcWisg5NlMD4Xa3EZ7qTu\nfPj0xcx6p4CclYWEgusw/WY11vrllOk2YkPVKB0SXbQjA1ZERgaixyKEdSPE5YK7susQzeHpKnQz\n+n44tQ56XEqZspZs4xiEdy181IJaG+Srx+ezYN9yyI6Fylshrgj2daIe3cmF8U5amt5Hb7Mh8hxo\nOQpG42rk9wLycpE7GtG3bUJ9aytCc8Pxh6HmENw3G2Y/hETDY96G1ZqNGheA3a9C1TZkugtt4l20\nKKWghIk+2oJ+aC7qrI8IDSzFsnU54e6JyMGjsVT9jF4WwLvgRYxhO4bWk0inFfPRNpznNdzDg7hT\norELMGxdBy/cBqmXEyqcguYcjc3zMyhZMGgt1M9Azn8LWXUTYsG9OB5eD8YOuHwwJO6BuGMQBpQ2\n6LcXvWoQhr2lyLNzCMcXc6ZvBo66dGJeX03Ug5/R7amnEOfWwpH3YcR9kPIqGCx/on+y6wZ89h0o\n/xLyHoC0S/4uqv5L+Xvl/0opN//JcD8w9y/J/1IjnAJU/sm4Cv7QlvUvB/1FNQAAIABJREFUyqQC\n//VGWIag4VkIncdgn4kj7hHcrKJdfx1bcwNRDbsRGeMQaOBugn0fwQ0PwrFzsGoNBAfDm4uwNusw\nMB5uaEWx3giHHVC2tMu7vag3nC+BphCEomFMHXQ2wKCboPgnKNkCE38Dv74b3/CVaC0WXImjoG4v\naIfQMnJpTFuCghWHNgPjWR+25nYCKET+mEIwOkz90BhSz12DMeU5iOoOwy789/9n4RHCuWkgK1HD\ntyNyBqCPP4hatbwrbe7sI+iT5tAW8yO28tko5hkQ1tHPbae39QPClCMqBOr+MCRvg7X3Qex5GGGH\nwnjC+RcQ2bELhgyBtipEogMaNoBVRbVcjHrB7XD8dXpxNb31BWD9Fvy/r/Cl2CC4H7q9BFvfhq3f\ngJ4GyfVgjYNwACnjERMUsLgRyX2JT5nN7aUTsN/1FME5b9Dc4cO39kYCWQaiWry0DLyARK0B9eBm\nlHMBdGM5ev01hIYOxBoVDfMfheJXuvrNdRbDyjJoWI/Wx06j40dS91uxnS5GqLGE+s1k+kPrkEkC\nPVagOCoJO8eA8xTKplo0J5isFkodZjy9XUTn9MByVCF2ayMNmY2EU7NI1qoQC/tA7mB47Tvk/tsJ\n2hSC3/dD+OoxfR2GnAiCi73ISBvSNhTldANi1U1EmMJM8vWk+v4XSLvFj/LJQoyjZ8HMWAwtjxMu\nfAc6jCjuIFJq+NFw/Tyf0MVDYf/viAonEfmTibOXukl0XUzL3U9j6HEepW0ORocFS/r96Eer0A1O\nlBV3IBc1ojXej1asY/a44Lqn0J+7F+Xkz6CFIGiHqY9B4q0IQI39FDrq0RP20+a3cDytF5e/04b+\n5npqH3+AiKaliKzRMH8VqMY//iY7ztJX/xZ2roDY4dD/Geh5K8QN/y9X8/8q/kGlLK8DvvxLAkL+\noZPDfwIhxFxgmpTyht+PrwSGSSnv+BOZH4AXpJS7fz/+CXhASnnkz75Lzpkz59/GOTk55Obm/qfX\n1oXEZO0g6HPhNNWRaD+JEDpK5y6yyz2cSZ/MeTmaoYkfEvdcEaJ7GIYKak/2IX3eYdoPJFPf0Yfo\n7BLcoUQIQ2r4CA0dPUjZcIJQtAX1ao2GklSE3YiMN1HSMJ7uZdsxH+2El1sxHghRExyFw9eEFjBQ\nNnwQIWHHE4wiLWUz2WUHafKkEf9FI9vGPcjIo2+hxLdz8tY8hn9/mJ3O+6g35/07L3jCF89Q97so\nUCTd20oJ1tqI2lCONz4aW782AsedVM7pTmBDAj1W7sJc5uPolEtJa9pDx8gMXJcexXxQEnG6Az1a\nIVhjx2Dz0+DujbEjwLHcS0mPW003XxmqFkBEguFcCG9qJB32JOKPFdFqy2Rj3DN0i9uNwetB+g2U\nhCeQa/qObp59CJ+OWu+lqbY3+0beRFJ9AWkVB0jjAA1zMrGe78RUH2R90nP0/+Erasb0J0KrxRFV\nh9oSJP3sIWq8udiiirH2DkOsGbXNxwkuYfB3K9BtBgKRDqx6G02yBw5XPf7OCFyttfjnu3AMbKKw\naiJl/az4agzM/n4NR1OmUZSRQ17pEWIOu4lqPIsW7ySUI3F5WigyDuVkn/GEswN4o/xE7w+SX3ya\n7O17ULQg3qgYjI1hRJRGY1J3qhcnE22sIl4rRm3TMBBG+ykCu6edkpzRZKTuQcbonJcj8GpxmBvb\nCOzxYNKrSTCoWG0dNAZ6sifrDlIT9tE3aRWGag96nUKBeQEmo4fMXutp78gmxlKKa2UzWrpKa2si\nJ+aOoHnnVMaceJaS8WOIVaqJazmJOzYSQ0o7oWSBZrYS0epG/aoJ4VZolvmcvKk/oeJMBh9bj7mk\nk9hzpdTJPFpSu9MRn4RmEBgnnaH/4V1s6PEIkza/SoPMw5cbi6vzPA3fuym75k40pxOLbCedvSTo\nhUi34KeySCz9r/2FOvsfU1hYSFHRHx+wV61ahZTy/9rJ+P+EEEI+Jh/5q+WfFs/9u/mEEJuBxP9A\n9BEp5Q+/l/k1MFBK+Rc94V9qhIcDT0opp/1+/DCg/+nhnBDiXWC7lPKr349PA+P+PBwhhJC/ZC1/\nNVLS9Eg2sf3GwfSp0LQCKr6H/SFIlSCBSBVqTBA5HKKrIW0BuIZDwAfrroP6KGirgF5OZO+5dB5b\ngbVlJMYZ7SAMEL4aueoOwr0MGFJCiC3xMOcVGDUPXWnGK17CEXwW/Zu+BFo7kZ0ZhMY7cJ2eh1xy\nG4FL+rPtgf5kNXbQ6/gxSHocMsdAUiZoGs0fxhGaMhhHt7vR3GH8LXcTu6GEYPcoRCEYgm3IihSU\nIReipAYRJz9BmqJANaGn9cITcxCkQsR5Fc71hhI3/PoL+PR2KNmP+/kd7E9YwcS334TuApoioKkn\nJJthxutwZA6UeuHKYigfBMXt0K5C2A5GHTL6Q//3oXYX/LwZTtTA/Uvg1BzoLITJZ5AFq9DC6xCd\nVSi7miHsRlz0Guy8DUo10OyQm0Oo8iShS3pjEL3R6nfQfFmYmIcFprpOlPlh9EN21BMqxCbBlEXQ\n+CREhKFFQTq6UdszmfakSk57hjHavI8VERdxa0EOxGURyo0i8MXdWD4uQWTpyOGd+I5EIIZOwXrJ\na1TdOA0ZCpKekoRydhPExcGwEYRGx9NxcD3FiyPpFvbjOlaPjFPh5xBKtY528zgMx/aitHXgHZxL\nmV3STdOwny9CZo6lc8s5XC47SkkJUouByRI0F8KSizi5A1nRCSYLoikFWqLQKw4TysvA3BQLZp22\nvHoCV79EwodL0c4ch6f3oxY+Brs64NxmQiNVAhEDMDQ6UYZk07n5d4SG51IdGYUzkEvPwe92FQT6\nfii4BsGED+HEEXzP3Yx1x2HC/SIxvPAZdHph+xKgGC7/HHpeSKCkhJob55N4aRTW/GxIuBB+ehV8\nrXwZfR8Lr7jy76/DdLUs+6VG+BH52F8t/5x4+m+aTwixCLgBmCil9P8l2V+aonYIyBZCdBNCmIBL\nge//TOZ74OrfL2w40PZ3iwf/NVSfwB5ohmHXoZln/i/23ju+qir993+vvU8vOSe99xBIQkggkNBF\nuoIFFVBUxo5+bYzdUZmxDJaxYcXGoChIEVEUBATpJZQEAoQUSEjvyUlOcvre948zt33v79475etP\nZ+7383qtP84+67zWPnvv59lrPet5Ph8uvmWGvvvgooBQbXB70WGB9AmAEw4Vwls7YP166O0EOQt0\ncZAYD2Nm4wqLw+rsR6P8CJs6oCwHrHrEoyVIbj9K8nQYMQaK/wSrbkPavQi1ZAPqcxGoDQ6MxhhM\n96zEdsgDJ79CrPgM//jpRG4pw+TPBkMslD4BP7wGgOruJ7RhNjFtv8Pin4btwBHCdtQimUD6yYFn\niB9xQqDxN+Ds3Y3S+zmeFDMeWz8+TQ9ebycDmWaMhndA74arJkF0Arz/NEgyTF/Mqdq3UFovQk0o\nNArInAdZmaC2oZR/A+OOQLwXvp2EqnTit6j02qKpychkU/6dtFeWwM65YM8AcxnccDk8MQ7OG6D3\nGnjgNsSqXWiKzyIdr0IN6UWN9KEcegC1OxDMs5n1BIx6HldYCIYLdWi37MJwJgejIwvNrLshLgRl\nrYp01IEnxknH9E681t/jGRiC7wsNfsNv8Y6aS8zFnWQ5qgjxuFlrm83Mrs0ETjwPMYPQygXIC+7D\ntXYeakcrnm/A0KHBZNhCYM5w4qpLMLob6C4chBqqgdGZcP9X9GfdjtkUR+73VxBxchiGY5kYf5iG\n1JJP+6MJ6Nf50VnuRBaTsa7vIPqwiS1hWbS0pKCtv4qdjj8gjz0IhiSEpxup7Gokzx8Rh+zgmQpG\nDXS7QTTCVRNw3T4fxi2EimpoacWRYMG+/zT0ScgTFiJXLAbHbjDugAjQVAcwchb9eCPOsEbOTspF\nVTspUK2krl+Ps3Iq4A1yA1vj6JNcVEctwfDocQJfXobm7pvBEgP7/gy152HECNi+Fb79BH33RexD\nQqi6exf9u33g9IKkgcv+hPpPJHcP4EH3V7e/BX/JGHsUuOr/5oDhH4wJq6rqF0LcB2wjaDqfqKpa\nLoRY9JfvP1BVdYsQ4nIhRDXQD/w865W/Fo5Gfsh9njlp46h75x1MM+bC2MHQvhJCjdBjAkcrmI9A\n0gzUiKNgqEY4jsBn+4PRbbMfJvfBiUYMGYV49Bb0NQFICYeek/DhxyhOCVUnIVf3cnHEaZJnXR6k\njlwXjml8LyT6cUelYK6/CCuvgI4BuOpKMHdhsSaTc6CHlrQaULTQ6IWOVXDVYETY/YhLxsH7t0Nk\nG9zgRFtnpz7XgD2pB+sbfbjjDBj0XiyrzxNIsKL1ORAyqOE25KPVsNmI9jd3wbRLwFwCFivc/zEs\nnYpS20LT3GzCK3eiVglEkhkC1fhlMxrfWVrrPmNP/nhG+HOJNpZjcPZzLPNPmEQhud/OJcW9C6HV\nAylw5EloPQxmH7yxB56cDnXNYACumQ9NPkTNLkS4FwzBRYhSGIoaGYoYY0cSozC29SH5ksFQC14P\ncnUslXkXyP60HWY+AntXop8ViTYrCZdjGJ70zZhaTPjLt6HbfwHHu3rMW/Tkm/ZSnnId/XvCkdKP\nQ9urcGo4xtpj9AzbjH9oGLqMXPjzEdRXFLRZCiQkYY7Mx/nNEXxVPuToEGSXE3u3DjpKofgsLNkN\ntZ/hX7sZzYJsIr5vQta54ZtlCJMCBgtRA9FkH6+janAclh+fY3qtAdZtRqQ0QtE4OLAPLNPhhhXQ\nVoE4dA6kanCMhv1bMWXFB8dLzwF9BZ6kSPQb90BNEwRqwd8B4RbQWlATNKiX2FH7++nyHUb0+sg/\n1o8lOwLcP6GZvIyLrfuJSG/GpiqUxEegab2ZIX1OhOkq5DMBiBwCT06Gp0Ph9W5IT4CC30LjeWg8\njy0+E296Me3vr8DcsA5S0+D0clLPhcFTm+C6+yB/wv+6kfwrw88YE34b0AE7RPAaHFJV9d/+d53/\n4bNQVXUrsPXfHfvg332+7x8d5++Fn2MEKEdlAC3TkHMux3VyNYrXS/uOHYzatAlaisGdBONKYMON\nINZC3G0waBScKkZx6JHDbTCxD4d9OtZD65C2eaFmL0K7FynBgPBqoKwaUjIgahTEHqV5TgzGfX40\n6UXQkB6cbRd2I7VZ6cuz4woHc8ctUPcOpORCzV649H0QAk3SbuKWb6Lh5fnYm/sxBc4ilS+G+jPQ\nUAZXJAW11Q6G4DPfiK9yJ7Kph0DeCMiJg/p9yBG9SLYi+HQbPLsMaert+MrnISzn4GATGIzQUwY7\nr4Sja+Hap5Fi8yn8cTkdGRl4x3nRd5WiVlygOzmGfl8mii2MK47vwCTiEOM/Rq3JZ/SmPyBODUfc\n8jtEzROwtRseeQD6PwPLjdBrg7vGgEWBoiwouwilW0DvQDXIgA8xJBYRfw+SMRlF+gm/cj/yqbeQ\nFS+ET4fIE/D1AUImvU1f3te4RyZgjLPD7QK21SJl/g5z9jTM+inw/rWQYkCpcWOf7kGN91N69Qjq\niWPfgqkk7DxHaOu3Qa4FEYLNORV1yBakWCPqLRI+8nBOfgjbC49hSbNiHh9NoBl8T3+PKoqQC+sR\niWGQPQf2/kggeiw9hz/FnGhGTtIRiMtBHhEBZXvBZ0AaOo+86r14Pv2UIwsKEJpoJsy2g3cCyHHg\nD4e2Eih5DaKmQ+ozELUEku6DilOIPSugsxE6JTxjtOj9KoQL8Boh0QynBHjjUHIVehPPc9EWhTtD\nQ2all5Cqcjqbh2OdrEJbO2KIRNrKdirtT2GUrWS1LMMQGA7E0vH5UbQjownZ+gxiwlDYPQAmPyT/\nCSyREJcK29chtbUS/acn8ZW8hjLcgZTeAqY/wvHvoL4Svl4O7gEYM/OXMvu/Cj9XnvBf0nH/avxz\nrR/+DsjkoHARF7/HxdO4WEJ4zBka1qwg4cYbEYEeqH4TEocGf1DRAPFJYCgG2Yo4cy0D++7CX2dG\nTRqKK+EQ/skBAkWxkAxKdjyuSXEwNw6eWw/RyXBlHr5QK+baGNrvGElMqQJbN0D4WEgDGiJwFT4J\njlBU7wYYMgj6I6GhGtrOwOlDaD/bgN4jEf/ObuSAhGh24jqSQH+eB/WGeRB1ALU8F06q+NeuIXHH\nOcRhHZ1zuzGd8iMpCYCMWnoU9aZsROPDUByGUHeiFWFBB6yqEJITrEZ78x4QEsSlkjTrZcz1Dlx5\nqRAWjeiMIPJUKSl1zaSpmZiPrkD0O+C1txENNtB48d+4A39yPYzaDDYJzr0CTUCJDCu/hHwr3Psw\n6lObYZ4Wvi2Db1uCyrwSUNEC9W8gLn6EdM6JbkUScq0JV5cNWo5ATCy8uQtp7w/YmqwoY1z4m/4I\n7bdBXXzQ6f+2CFa+CWEynDjAQIyOvknhDDxmpD4hnwlSNPP6ElhTNBdvnwesKkQL3CFxSD4XG2ND\n2HvjpbTldmExp8O40aBWIexFyBl56G8wI0efA58fxn8OcY1wbCvSmoeQ/N2opeuRI1VU/VG49BXQ\nT4HOBvjhXjBko7vqA8a8VIMyspfT9gxUVQXVA6mFcOFskIv57JsQngiRN0P5XMgtgLChMC4JHAF6\nEkOwd4SBSwNSFsRJqPlzCEjV9O8o4UTuYLpkHYO+Po/roBdnuI6BMS4O2m6hQZ2Ir+ZxOidNJa1i\nO5poB0pbJIqoRhz5irD4Lnq/6+L8fg+135cSKKmAGXcGHXBjDTxxA/R0wM3jwfcO2h4/knEmDD4C\n6bOpyZoIn5XCc6t/9Q4Yfj1ly//yyhpCNWBsvBRdxBVIhmEo1GA0vYyasIaQS8fgkqrQ8yNSUgJ0\nvgeXNkNVJ2TsB0sc9O1EHT4ZT+0KtMOjOJ9mR9+Vi2ZOL9aoYYjTDei9MiRNAv9piL0Ixw+hFtyN\n2nEa++6zyFc8B6Z3oTkSHj2CGH8e3f7D+HXDEZWlkNIO316AR+6Ag6/Bgb1BwcZJVyOOfIYxxg2E\norXk03+oBEfXNlSbDef1buJ/GkngYCVOexqRoZ2otb34Lz2GpkkD3/kREb14M1TkgB25q4deqwWN\nMhpaVsMbX8KRH+HaO8F+EHZ8CMOvRPXV4dH30TAkA7v/UpjwNHwwBjzt8OnnkK/Azq2okYUIaxdS\n1wzEkWJofhN/0ufI4UZE5X7oiYeJD8E9rxPYY8Wb+B26Q/XI7l4wmlCFDeKcIIYHHbd2Jji/QQyL\nhu6xkDudY8VnuGR4TrAwJWcSaE9hWfYgimLBW6/gyyjBOGU6nNkHp86AuQVaPWAFX5oGuUNCt8PA\n7FvriKg5AmWJTIs7xqZhE7m6bgc6rRGjugE1Sk+OuZVObRp18UmE7puHmj4BU/sM1PKzqEYTcnYI\n4lAfyNmgzYTQS6H9VURHEyG3DkVYa5H6Wukdl4it6hOoKoVICV+nzPqpU6jsvcADP8h0OooI1Y+i\nTXxLRO90ZHMANn8Pt74HrWfg/H3g9oMUFvzfd62GzYvAV4/pjBOz6wBqiBVyPCgaE9TVg3DSmxdL\n9vWlROj8SDO8SIUOHIclwpImEFUrULvd9GRdhbHtPTRRfQzoQ3AYWuhzGslsBiLTSFwwFTV6OI5t\nmwgcWs+5Z5YSs3IlYUnpKPc/jlz/OLTWgOZmGCIgejDoUn5RG/978XPzBP+1+Jd3wggBsg55+USI\nKUC+bgutqyRypQLMW92oI/oRx90w+yxEO+ErAwyLgu2fwDXPEGhvpff4V0Te+TsCRw4SkZKOy9NA\nY0ID8fPvxpq0FcPZfbBnOwxtBLsDir3oe89z4fIWhmTuBdkMnhA4VBQMFUxPRUk5gKx/HD5zw7lQ\nuFsOxtaOtkFnG0yIgLaDYBdgbYQhFjRNOmwF/wZTC+nfdSW2T5vwaiqR8hRCi/yooTLa6KupjzpN\n0jkn8vwBBAZ09SPwbzmE/5Af32YF81MbUd3LEZGJMMkL0R/DvcOg9yj8kIpIzsavacBtG8AV4cHb\nuATP9fcQsfpFMHlxW8IxDuvEkVCLbrAN7+ih2DaEIY5/iajrhzYnqtBBbBTizGMo5z9GlUB3uha5\nqhg0Klz5Fwcz81rE/hoIqJA8BDy5sOd1yOyEih765Emw9mnImAUZk8C9DWn+k/i/fQ8RE0BXuoPA\n+YNIngGEyQ5uB8gC7piDooZhOtmJ9go7Br5CPWpANB5l0AkN5Q8U8vqIO3jk/HfIfW0MRAriWo6R\nWRpAxF2JOnMXfYFTDLz9APq2Ojw3v4I54VtUISPSx8HG56CvLsj7qzOhyRyKqhmKWLgGH3ei7q5A\n+KsgQUE22LlixbVUyxZI1DPi+EYCnScxxZ9H3noXHZHJhEsBflCrydDYyGgpQYQaQfsifHQHdAEC\nFI0NS+ESxNjrUF5NQ5T6kPwKpEqQ7iLOchFVb8V31oOaKCGMl9J74Axx865EfncRpEVjTv4ImjfB\nQATm0OkoKMSdW4sYEgITXWDoQdiSsQ9dDr/ZwuB0PU19Kp6YA0RrZ+DYDrboLEhOgSjA3f2Lmvc/\ngv+UvP//E2FDIftZ2P8Zyj1pTD/bTUhMEsLZBjc8iKJegJd2wa0rkAIOVBIJHDyM0vM2/oMHCH/g\nLaRAI57aMjRHG4jbKxMyZgn18lIaU83o8ueR3JSL8fBSdJ4ohL+TrqQewlqjkLLMwXPoscOR8fCH\nheBeihLoR7v6WcibBUgw8ybY8jxIZ8CSAMdaIb8bBmuC9YfNEbBiHbjqoHopZns9jDag9Pjx1YNv\nhx55iAHRuJqE7ABKCriKx2LWxiMKktDO8KJYzmD/vANZdqJO0EHefERnQ3CDSR4P4z+BbxbC3gHS\n8oZTPyofyVaPua4M89FKVMMgpPxy9IShuhUsIX1IdQEMm0oQWdeD0oWo34KaKKNE2RHHz6FODcUf\n2Ypkug6pMwmKUsFTjbq1GO73wZ4auPo9OP45fHYtPNsJtij46gmI2EOEKRaGZMGy1VD9Ezz1A1jS\n0XrPoa0En/wDHTeaMPcmEVI9icChL+Dpp5HLjEhNm1Bf+AwhYtBvq8OdvBdjnR+GRJL7BZx6PJyS\nUD2hiXGElfcSFuiCBDvIBxBHXsPakY1S2kSPJwYl14D28GlEgYToO4t24UbYei2UGAEPVBxH6Hqh\nqx3d4Uq81iHoL40CqwdplAVrZxlDl2cReGsTzidvJ+W3X0PtVbjmj+FM3FmyNklc1loNzT2orSoI\nN0zcDINTIC4ONq5BNEDgm6dQWo+gq7aD0KHO0UP9BXBEI0x6RE4T+mHg2Svj/KgW7YAeybkeYhVo\nqADHFki4Epo3IuKnEVL2Mkx+GcJSoG89dHggujAofqvToNFD0otvE/Dfg2tHM34DuDLDMbqA2BRw\n7///trl/Avyn2vLPheIfoPUiHPgGPngUnpsHy+4Btx5uWUlJWw4dg01w9wy4fT6q2QD+UgJ5At5t\nhbQu8F/AnzqZnjefQp9oR9JoICAjjx6MXOMAJQLL058R2dxE5s4KMvrn0pzez083JjDgrMYfMYjW\nzC6iviiFHauDcbQleZA7Es5uAZ8H5biENKUPrsyHmEzY2wRnmqDVBLkuKBoBRfHQSJAW0NUE70XC\nnnRo+ghkCTQJqK0BxJhcxJMgrnEix/kIbFc49ccoeg6dhSPr8G8/AGcbkEZrEJeFI6fF0Jt7LzV5\nThyTb6f/qpvh6BdwbAMs2AD1p7F/sIH0rvHoUx9Hw2A0vy9GfrQEoR+FbA1BGrcCjTsLKS4CqccD\nX/0emg/ArHcRI2Tko6DMvB1vQAGPBXl7NeJiHYy5F474YXIYar0BMW8D2JNg0mNQeDtU74KMkXDL\nR9AQIKNvD0SVw3wLNMeBIUi60z7yGuomhKNkhmGUFS5G22Dlu0iBEFzHnqWn4APcd/th6914n83m\na00MzkQj/dEGmrQWUpd/yUPPvESbIYaYny4SdqgRjudBmyu4MdabCF0HUUMk7I8vJXJ7MbqQxWhi\nHXQPqaHv2ET6ci7BE5MM1/w+yFjX5oEnJmLIeQj3nGToioJjGuiMRHHnI91ejbb1dmxR9bDrEnB7\nMEaMYbzlPdqHFqCWdgGNiDQDZGfA9EUwOgHohrTxiPhIVL2JzoRddC1MR7mkG6J6YOiNiIJ8iK6D\n5jGwLx9ttA7z/R3oYzw4Hz6Df9BgFF88uKdA2grwxMChx3CbCiHlEdSQ62jZ3g0DZuhqg44LqPoA\nnvF2lNi3kMvSsazREX7JAozmYXBqA4TFgLvrl7T2fwhedH91+znxrzMTrq+A9x+C4i0w8ToYNweu\nvh+ik/6nbr2VDVTPu4/0vGvgh8VIxUshMxe5MA/10TsQyzIQLU5cUReJHAkSGjTz5oO7Al9LMdrW\nFPylDqRHH8dufYw+eSqmT1YxaKCd1KRhyHpo/U0+4cQhaZfTXrWW8JV/QFJc4HBDx3eg9xGwFSFX\nn4DU90FzHfz5RXhwPuxZB9d/CaXX4S830585GUPvRXRt5xCVXZAdB0PbglyzPQpsVlGj/TQeGEF6\nXTNi13l0D91LvuVb1FMtIIHSdIpqbREJQzrQ+QsR57/CPv9eQojhAg/izDpC6tPvYKvRw6oHgy+F\nQX2YPlwE409ClR7OjwTLIIhbAEY9xFwN8RXgfR3uWQWbb4Y2L3z+Mggbget6CfhOoP+gP6jGG1GP\nIoUgffEiausBPFI/gd7XMDeeg44mKLgMrl0OnefB7wDpJMSGYGuqh0gBo40wdCy8dg3KXROJ9NfT\nZK2lKx+ES8LhVegdayEQHUvY9/30pT5MZWoMjry3iRprZNhAOYGqKERhPbGGLvxDwmm5xMSUI3UY\nzONhWDGY54O2GLw61Nj7afl8EzGWI4iOPXBuLcqnoYh7DUTGF6IaUmmvK6an4CTy7FHEbNIhjRsC\nEzRo46YReGgRbOyGP0RA6wVEXx0BHQRSp9M7+QdscgPEPAdh05B9bnLKuyEJ1Mg0vFo//pTpYNBj\n6pmJKH8EIsJhVDJa/zFilLE4ItpoyEsh+mwYUu4stL7PIG8FSFN+ziRtAAAgAElEQVThwxehsZNA\noh/r3H4kewyudefYZ0tAPfUxgSQ3ntGPIjd/TUVoAq7Ax6Tu6iV6dy0zx10FP36GSyrHO0uPYZwL\nqUmCH/sgYxgkXw+DZsP3l+B2H6F+dBkqVxPLw7+Q4f/9+LXEhP+hirn/SPzDFXMeFzh7gs1sg4i4\n/6VLwOOh48cf2elwsGDBgqAW1lujYVg2FD4DlnTY/Azqwy/gzUhEn+yETh088hnkDcZZNhmv7ja0\ns/+IxehGfHuSnpNT0Mx7EhP3IjU1oRxZw7lJfybrdR1ioBaPP4WBmD4MU4ZjXG2BvJ+gVqIh20L4\nWT/GCx44Wh8kLY81Q1wveDTQquPjGxcxkBOC1tONRyig0ZPQXkNr3BD8ei9SZB/zXtmIyT3Aaw89\nytSKbYw9cwJp8hIIHY26awlq8QBOjw29ehL3jClYz39Nf0ko6rSrCFn8MQHViVtU4+Y8Nqah6Q/A\n70bClCtgxGTwl8Kal+CGnVCzCkYsBltm8IL6OuFMIlROgokvwqq7Uc+Uog64ERYBE0YhOtOgvRL1\n9tmIRc9Bv0B9Kp/mVy9gTo3FlugOzvJNcTB+IqTngSkNerZAw1oUvRNpQAT5dFUDylYtqy5bxOCx\neRQ6CuDlq1CGlrPq8qvpsdlwoUd0yYS6zYzc9SO5LaXo525CTR+D79SNuGJ34PLFYXy4Cf1YC4ab\n1sHxRWBwQvQDEDoGOvbjOBAJig9b2VsQ3gByLOqM1wk8MheRrUd6dBd8MQ3yI1DsUUi2JkRvFjzz\nHUy4DbWqEREfgMtVyHkCdc9lOIeMwjTse9au3sqC+CeD2RmheXD+HJgmo9Z/QX+MmdaxGnT+RGL7\nXkTz9iyYtAgCH4Mzm0DJKbz6EFytObiVCAZuasBn6cD4jImQMTdgy45D1mvxO55FUiuRRCyYHiAQ\n+IELh1vwn+7H9NRLiLr30Ww/T9XsZHSpI6l5YDMa1ce8r47ifXcM3Zf1Eq46UBMWozU9Ds/dCxGb\nUKcuxVk0Bum319D18vUEuo4QE7kSw/YVtJRsIWbczTDhsf+Z7e9nwH9Exdy16ud/df+vxE3/0Hj/\nJ/zrzIT1xmALj/3fdpH1eqJnzYLVq4MHJAnSJoM+KeiAAe+QhXgHrcLsboar34BVK+Dxm+DTDSgm\nA8bdr+K5ayr9BzqxvPkMYqIVJy+i0ElI3AucubIUS6eCMqYXufVB9KpAG/ktvW+coe62W8kskhD7\nclHkFUihhRAohR0VsOwWkGqg0A3bZEiIYuCmh5lmjmRIv4cvWt7mpq8aoOw43FUOX1SimgM4dgo6\nr8tg5q59FJSUIKWlwNnvgV30xfuxmksIyRQoI2UCh48ifAqaQtDqm+DPY5ALZ2POeQoz+X+5Jv0Q\nfgmEDoFlcyFqEMjRsGoxVBXD7mOw8G1ILyLg9dFXYsDuV+DTP6FGF6JkFxOIsaHrToKLxeDrAX0y\nojsVAgL1+ivwD3XhaezGGN4IvlFw/R9A7IWmbXDoe6AQjAkwvZizax9naNG1QRWS/qNI8YdZWPwu\nXeUh1NklbJdosR9yEpIaSsdYhTBnJ4neTrKqL5CmLYLFm8FgRwC6cyraPfmYrG3IXf0EhkCgfR2y\nJhI6KkH3JqQ/jHLyeQa2W4n5w+JgCKTgFrj8UYQQaBZFE6hIJXDHPKSYHKSpjciWQ+C6BAzRkDca\nDuxE3JQA0Tbo70Gt+xp1wIjBqUPuKEdv6sYfpUFs1SMbf8Q/x0evvA5PihFdu4qtzIMm8Sp8Z9ei\nKboHCh+Dt9dBwTnkFgvGK+7HeOXTqK5+PO37aVBfpfeNZky1g5FP7IabH0Xeq8UTI6EPH40o8SGr\nY0nJ+gKlqhld62uIJAtK/ESiXl5H380tJMz30V7uoL+qkLZbNVh2OJG7BiEefgmWLcE7OovO9GI8\n+ZVY1XhC2/Ukapeh7pqCkJ+H7hqaLXnETHz8V1+k8V/xa4kJ/+s44b8Vji9AskLzadj5KrgFjpYQ\ner/8ktjlOxGvDYb9j4A3Ghrb4aMHUW7VoqZFYDb341v4b1A0Et2nt+NW/HilA/hx4pQuklDixDPK\ngzHkEUTreqQ9ldhvu5OWaTNp7N2EbeIS9JvfRtPSDMt2QFgUJPrANQDO+0D/Hvib0TWW4huw4b5t\nFgXTh8GhEpg2HC4eArcMUwMYK1Xs3oskl1QhJGNQDbn6Avj9mAaF4b9MRuMJIOn8mCb/BvfpI5Ql\ntDEyJwfMMkT+OxITzwBkWGDcXSA1Q/ULYAgH2QGxwyF+GHQdBr0P2ipoXDeAbawEo7PxhH+CpkxB\n554B7h4Y7IbwJlh7Hr6ohk82w8C1aCKnoC8aSsgllXChFkbeCL35EDoSXn8KGrdCphXO/Jkk2Y5i\nvhVhSANDKiL8eoRuMeGvPIzuj0/SafoNxmFaZl/8gI6EBFpMKdT2puEfsQgCBVBbCaYQ8HbA0R8R\nN32OtvEkdP4B6UIEFN4Jzb+FsAnQfRr1yGRcJfVEPnwr4tifoOgakPTg70fd/RhCb0d+dhfq2Qeg\n612UaguS5IfxD8DzL4LjMDwAIKC2HCJGotZdoCtmNKaiRfR13kH2YCvC4cA9LJO+hHAkXxwhTVrC\nBi8lcPhGGvMTaA3/Alu2hG0ggZD9l2HwpSEePAKDAP8xAMS5fRg6G8iYuoO679axe9F1zBw7jJDc\noYjudrSBNPwJVWiG6xD7v2TgWZAHm9BTCv5hSPNSkEIGE3KqFdvcLiJ2a3Ce8hDqvJSO0xbCR2no\n6voI0+lPUUgjdPhiDJrfQs0hsAMrJiO6jsOMNyBrAeXrv2b4P4kDhv90wr88LLOgJhuyE6BURn3v\n33C1mwi7PhpZ6gF/NphaIaUeHAbodgI6BqaEEvZ0CdrEbZC6AN+ddxD50Gp6XpJw7X6FwY4qbDs9\nuCa5CGyYhUapB4MM++sY0v4WgfYOejun4isIx6k9Toi/HLHxftBXgNMCX62C827IKkS7Yzvek5Xo\nnAMMKi2DmxZA/x7YqYWrNRAB2hgFdINoNUGMewAeOQUbfgPxzWhisumJmYC2/AHMDRLY62kuNOAa\nZMLdshlT+Mn/NmsJDJQQ0NjQ9n2HGrkddqegRiQjxRoQagrq+RD8qaPQntsGphPgf5+eo5V0Fav0\nJWzFFLMNfbGCsJhg+u2wdjFMWAadV8LCfIh+BDW0AUygFlvBX0vPPB1hS+sQK3JBMYB2EPR7YVwW\n5M5EPfotkrkO39K5ON+Zi7X1ZrT6IYiEFJh9I9anF2ONb8GZKHORFM5/n86YsYLY3Aac6x6GFZUE\nxs5GzkoFnR5i7RCaCPs/Aa0RJt4Dhkj6ramYkn+LqPwz/m27kBIL0LR9AvZaUKs4O3wCOmcliYc/\nQpcyFuEtRljXQ30i6lkIDFiR1t0FCfmI6YArFjZ04y8aQITupHO0GVUjo3xXh6XFQtlsQXnaWGIC\nsRT6P0Rz4BXQSFBdiSwiSDqhEFHhRpu4BNeZ1+mKcqMMbyGxLArmWaGnHCoXwXEZ5gRfokmz5+F9\nrAHvxj8xcPhLTJ2dyGMiUQyjUZt3IyY/C8vewjDUDlHzoUWBMUvgx+uRZ19HX9fzeK8LwbjDgDNh\nOEZzFW7DMawftaBVYhD1FtRODcqOO5EObIGubpi+C7bPhLgi0BqRAx6oOxpMPYzN+aUs+6/GryUm\n/P+uE5btEL0crLsgGcSeo0TN8iLiGxHHN8K8J2HLFxDihtDjUDQMubsES+BlRNp6KN0Bjla6E04R\neHI+9sVfIX63EOE/jZr5G+TAl8jONsiZA2fOg10DkhO5vQd7RB61ziEMvFCK6+RUokI1SNGZENEG\nkb1QOBvuWo72x7fwzcyiYmwoGa1uaN8JZy5AdC6YwhHh9QjRBJc/x7GT55l9cClceBfy3FAqYOgT\n2Hu/xBExiOaR9xO7rYTAwH5M3VbOVYUx7PMpaPxJUKTgCT9LSVwy0SdqMLeGoHZ305zWS9OkuXhU\nPcbh6Yzav40omx1ENdh8WMdr8a3xYvKA5hMtzB4E/lpYMx9Cr4A9+8F3HUz3QdsDwRWFasK3Zj36\nmCgU/wDKeB+y2gR1fdB7DjXKR0AXSv+wAGJECN71EUhTJ2F/7CT9LxajrglF3zUObn8cjv0eXAYs\n1V1k6yvQxA3n2EEfE5btRjsyg55rx+LyViDiR6M9WUZ4Xx+8dzXM/j2sP46achc8lEX11aPI7luO\npAnDb2jDMBAJPUNRN9bC2++SNtCHu30d9RHxpCw/iKt3KebN4UhSD9KqE6gLJ6MYHYjEbajdw5Bu\nPghpO5Hq76ArT0bRBRBNCh16F+Xz41C8gsyyaoYeLgXfbuiqRO3RgO8LhFkCVcIYngFnniBk1JOE\nbDwGl8yA9ddD9zE48T1ohsLFB0CzgCA9N2Tkp6OWRVNnchLjikSvOYv2mB9VrSGQYcHwxCtorB/A\nC2/A5HHQcgHMkbhryugfHkZY5rfoPv8tnc+9jDXKiMmswM5amDIWItwop15DzSpA6nJBtz3I6jdi\nMYRnw8mNzDt+O/TPgNu++uXs+m/AryVP+F9nY+5vwOrVq4Mbc/8V3Z+ifvcJQjoD5/pBVwBP74fH\nLoPL74LnHob1P+Hdcgm6Q8B966F8GwybSmPmTpzKQQZ9n4j0wQaYboORS/E3/Rl5x26EPhLyI+C6\nDaBugj9+Ck1VBKYX0Obowe4oRyNp0HZlgvssoAOfEVo9fDn7ZpI9Zxm69xzmwQ5ErwWR5Ae7AQLp\nMKoclgt4u4kzO64n56cfITcRrj8Bi3KAOpihA00cF8MNRHsv0hwIw77DQcipfiRPADEjBFJNuBwT\n2X+TkxPWdMJ7LOSfHcDeU0XMzOfR/vAU2tafEFIAil5CtHwLmnRw7+LC53WkLXgLli6Gx5bCmY0Q\n64LAYNiwHqLTIGcy6LfBzAfBMpTel95EMlagvTQKQRu6sz6U9gCueA+izoVr3gRCulLRVO0CRxVC\njEAZdjeB/S8y8GwX1gtfIa14DrXvGOxSELMHQ08l+AWqBYQ6QI8+BL3Li6xq+H7RFJqTw7nxo3WE\n1A6gJiYgvm7Cv28eYvkaNF+qqNcK1FgtatIi5K5SAg1luK/sxfFpJL4zoSQ8uxL1/ruQRAOepEgq\n5ukxh6aRUtOE22PHYjiE8l0f6mk9rhufRGNexcBpO0IV9GR2U7FwOHbRzqBaA6H125F1N0HtSfBq\noeQcAYsRTzQYLT20T51IePEBRGQm0ozjUHsR0jL++/PaeCKYUuhQYbwIhktCp8GSF2D6fNSYTfR9\n1ohFW4ZoVCFUg3f6UDSzVyJXz4BdQ6CyF1Jj6J96KZ3ZNQys3INpfi4hLKBl+AKS80IxhsTQc2UD\ntq39KDNvoG/y54R8ZEUyFoC2CO5cEgzn/fQ6GEIoqWll+IMrQfPzCmPCf8zG3CR16/+941+wW1z2\ns23M/evlCf89CP0NYtbdMNQK3imw7ygcXA2jLiFwbCOKzQKH56ALGw1l9bDzoaBRbHuPmJps4r+r\nRvSehinJcLgW1vwO+pwog1UY1A4WB2wcBKW/B5yQNBl5Vx2xm84hCl+FoVGQ3gspkRBmB2k8rLiI\n7rq5JJ1uQRvbS//l/0bxs++j6LJh0Di46WGwzIfLzFB1B4OtW8EyDFoTYfcbkJYHc8yQ7oGkhST1\nuug22emx2bFmTqR202r6P7wOJqdCxscYkcnf1kdKcwc3vlPGyOffJWN3H5bXfof+aBxi6GIQEv7m\nZfiOdqK++RXo2kgZJ2DVm3D5FDBb4MEdoJ0M5lZIt4OzF9ylQa7hA2545108u39Cr+1A/00CvbFe\nPDoHnRPcmGp7MMRMI3zENrRTlyOypuCzGqDjAlLzJrQ5j2N4dzxuPkY17MW/0wMxEpyqAZsL8gYQ\nNoHfkkJfwZV0zshDnmBignyM4dV1HJ5xKf7pDyE9eRFhjUej+xBp7v0cv7WIgRNWpGkHkEe/ilr0\nJ9w2F21zFAwNrSQPb0TePh8p8xxStg9jtIf8V+uIcGfQq63l4PUeqixx9PgS8V0ag9G6DGn0M3S+\nvITjzwzFFWdm6pvbyHb/ETz9uIxWui4xE0hMwpdixj92PAoDaHu78EWkEFExGDn9LiTJAIfngtkF\nFw6BozL4vMYNB6cKI66A9NdAEwo7JkNtKcyYj1rdhDVOxZOUg2oB/7jH0UQ9gffLu/CticR/rBt/\nTxr+z/cinfgRyyGB2uUisc6L1/UJ3YMEaq4XR041whpAmEKRov6M7WsfIuCDjFEw5TL48g449BEM\nuRxcA4R3n4e+9l/Skv8m+JH/6vZz4tcxH/+loKrQVA3xg6BnN6SvhgWvQv6LsOw2GJeC1JaCq6Ib\n3U9xaK5YB2GxMPFZOPsOVO5APm6A5OF44qIwhJ9BTXiRSuM3ZPjKCKTZkctzYM53sH049NXCoCbY\n3QF+F6RZMVStgVuOwheZoLGAcxS8tgaU35Hz7hYuzCpAX20iosuEbcN71BVdR4qohovvwjljsLLK\nMoKtu4ZzRd9Z0NbDgZcgUQe1XjgXCQXrEBmPEpV2JdXKzXC6k+TaDTQaGrF4nXDhDjBaiHCEog/X\n47rvcYzjF0D3Bdi1EuZPQTRvhH4d2o19KKEjUZJ7QdeKSNWhajsRSc/Dgd2w4eu/JPBXQdoAjLsM\nogMw4QAU74TPX8Df50HS2VDYiNoZQ09iPBFdRQjvGkT5CVh3FWiaISSdcsNs8tISwHAYoo+j6yzE\n98XbqMmTkBamIW58Apa/AOd2QpwH7Ho0g24lsR844wKjjQjtQSIq94EAddRZaGwIVvc1PIno2EqC\nIYzOu5dgevEx+u88Qe9xD+7PDMSPjECfKcHUJTDkWtQZg+GGdEhsxZ+Ri+G19/HP8pO+sht9hh79\nn7/D2HEW55YvaFn0NLqv3mLykX6UkmqE7OXcgecQkoOOyEvJ2HqU/vQWQtq7UNHgGpNI6IkaNOUB\npJ4mePB6OPg29AFN/VDhgSIbTN0Mdaeh+iTM+oumYfyD8ONK1O5KlOfmonxahiiYjLb7BIpXi6Pp\nG2zTDqPmDuAZo2KK+j2S+Up461o0mTNpOnQYnSULYZtGVHMyF31HaJ+mIzAyFc9POsx4UX0hyEkT\nkWo/h9MboLcDZiyBjlrY+Qa0VVKSdidJoQm/jC3/Hfi1hCN+HWfxS0EIWLsUssJgkAssYyHmCah5\nCm6+BV5fhYgPYLxjIe616xHDZaRpzYhNM0GTCVOfhO9fxhQ5DrXpG7joRVybREx6K1KHE5xAnx9c\npyH3JtD9BJ+dBEM3pOlBEwtzlsGnY8CtgSw3FJlh9zA4MYDttIrxwlFCp+ShdhwluqwS776NsOwT\nOJMHiVPh3R6wv0FBnR0qnGBpgRQzyF3QaYEb3BAwwYUtSFXfYM7vIRB3BtmfTkv8JGJj56O7MBk2\nXUC0KyRnh1Eu/4lxuwPQvD5IVLPuGahUIVOAORSptAoKpqN2nwD/SZAKYecLYMiBnDzInwIf3w1V\nToj7DhriglV/ykV48BF45hUC7TnIFXuxnpxB/5wDSB9vhtBRkOSHPiOcH4D8Tpq148krmgqnoqDs\nK8RcGenlOLzmVgwPbgRzKLz4KXj6ob0EvO2Q9j8ISzbvgJXTg/fCbUN0LwRnIcRuBmcvasQw7OE/\n4c9/G1dpM11XK+gX3Ubq4gREp4DaTXDoWej5HklyQt0RyL0d2bwSea6KODIY6+MfQtMu/H1h1D23\nFTk0nbRP5iG9fz9+qwGXxUB9YRppB6rwFhsZmroZgxOUpFAk42A8+RYs01dTc+ULZHxaA40/BoVl\n89+Fcy9C0iVw+Hlo8ELjduhSoOIguJwQStAh25Jhdg5EfIeYqEO6ek7wGbz0KsI/Xw+j5yGNaMYj\n1uBX1qL5YSsiowC2fkLXvuPEP/4qKC7Ub99DTvZh8EqUa3KxjzmG/8dGZEcoUnszCBukjIWRt8FX\nj0F8LtyyCgI++r/565f3vwb8WrIj/t8IR/yPseZAH9Gm09D8Aly4AcZXwenXwVEAjho49AI4SsHq\nh28boaMdcfB9jJc6oFiGZlBTLwO7DnYvBdGHVLsTqdmDOskI/RvRVLaDLwdftoCkkVCxDAZCwWOG\njKuD7OXdCowYDNtuQG1thRAnWAHTLqi7AAfaMKCw6qHlyPM2ImIW4Lj8Fsx+HerGT6FHgoMy6GJA\nChAz9ix0tsKkAohxgW0iJITCGQHHmiH5ctwF8zAHepGbDJzKbyPSmE6j77sgX8FvilDvncKQ2JnU\nFxpQjGWomgBqQkdQAidJhX4N3L0WokxQVIswJyC+tyC+OADlLRBVAXc8C4OyIEyCgrzgefq64cMs\nWH8P/ed7wWLAV6NBCUnAcNnd6C9m4R4WAp2nIH4MaulOlNgucIWRs/5b2L4a9m8FQzbIM5EXCkR1\nK/6PHwe/P3hfdRqICoVoFXpegvqFwTH3PQJaAREyxNvA9yGsvR9GDSJQdxy3phJv91B87y6g9aME\noh5cQrTThRh0Cag9YBoMpQ1w8TziigxYuAU1702U0wpoApBXgfrJZDqXfsnFS4uIzLARn2ZEfeQh\nBs704PfU4QqxkuJKIaxoPjEF7cg6GfplNA02pLJWjN+2o3nufmI+PIO/uwmMBVC8B7a9Dd0JqGG5\nMOdl6LOBMTGogDLvDxA3KFhwtG4pXLsYcdsDSHE+1GtikZq3QF4k9E1EfHYK0bAG2TUHk+4cmsBT\niMOrYOsrqM7TdDskLLFa6CvnYnUjhusFNRXTiN8/jrzvxiLJHtQx9wVjvUIPHR1wYj3c8B5c9hQY\nLMGX4T8Zfi4qSyHE80KIk0KIUiHETiFE4v+p/7/2TFhxQ9sy8JwHZAh0gWTBqgVsD0LMkxBdD5U3\nwvYd0LQfMq6ENhu4WsFshe864fY42OdCHh2Pkt2PcqAYWTWBfRhCOYJqVVALtCjdev4Le+cdJVWV\nrv3fPpVT5xzoHKADqck5KJIEARVFRTFgxpyzYrqCDmaFUQwomAhKzjmHhqaBzjmH6uqq6or7+6Pm\nm2/ufOvOmrtmnOvM3Get88dZtatOnTrnfWrv9zzv86pmrqVN83v0O3egtHqANtiyKeAHe3wf0pCJ\nc9wC/N+voqKmmsToHnyxkYSr25HHHIhUH7THw6QQim7dSoolKPAnsvFjgvok4smMQfqjEblvwIUV\nECagpS+Yt0GbFzafAH8WZOWCKxJMZZBZCKZ2uh0rMemGILpOE2RT4zQuRbYIpFEN9YegTYVOD4N2\n1eJrd6JWGxHOWMhIBVcpbr8fbeEPII9C71VwdhEc64L4RORkBRpKEF8OhcZuGBwGBhsckZB0GzI/\nk6ZD29CeW4Yuvy8r73qMAxEanj+8A/8aK5FfDEW9/SeszasIyexA5tyEMvJ9bHVzoOx9OAx0HgKt\nHdxGxEQvqsc/hfAiuLxXgBzU6aDNgmI9vPc1ZA+H6ma4chDoIqGuCJKm4otQQeFBlH6fovl6KlVv\nNyEcp8iorEOxBMHhLbDpB9A1gC0oMNP77g3kfSshtgXZPiPQCqvKRU95BB7ZRvA1rYQOWUrbhXLs\nP6xAb+lChigYrR70PVXg7II+iXTf0I+O1Q3EhHbiCr8KQ+8oCMkEtx1PthHfrrcJcSWBVCNtu/Hk\n9kN97kuETQtKOhR+Bbl3Bmw9AXZ+GVDTKJ/D/m+QrRGo7fEwcRoYfLD/ECQnIdMewb9zEUpLEMqZ\n8xCmRgbn4TO0kte/BsuJRXQNj6TniUjKFlvIXnI3GU8/Duo9iAG9UO/+Ei7WQ2Q6zFkGYf88aYf/\nCr/iTPhNKQMN7IQQ9wHPA7f9V4P/dUnYZ4X6F8FxIuB3mrgU1OEAlB5cxWBjPvRUQMkNoO34Q5eK\nBqjaDpM/CuRnT70K/Z8B/Sj4/XPw1WMooQmIlJXQ6cdT1oUmNw/OX8AbnYlPVYpn/TzEmLEoXW0o\nh5x06NfBhS4M59+i0qalXW3DFLWVjAgDfdJKUKVZ4EAjnPHCFVpkuAn6aBDDn2WwOYZMJBzfjBw5\nHeusgfgrGwl+7z9AHQWas6DkwYTPaDsykshPGqGgCM4egy3LA85Y+w7A4WAIex57ZB9CGqJRiRDS\ntgzBOusWGkM2480IRhNyGhpiIPpWijPWc/Q6I3NX1gfkRvvfxe39hYvtcUQWrifmxg8heS5UfQym\nfWBrQKp1iEgnaKzQUgsbnPD4bTBgE2x4l57Rr6DNG4axTx2F/SdSkZVGjtePatVaqqq8GIrslD84\niHhbD8pRI8rP30DULOrCBtDnmsfA/iDUn4XWHxFhqSiX/0Jn5qOEfpsDM+9D6hKQa9YgileAyQCz\nX0LkjoAProfgJvDW4w8Pwlf1DRR10S1C6FSvQL/PQfggL+rL+9HqeRA/RhgKOnEJw95DiMnpaP17\nYFI9hP0HeHshjA5aforAZ2vE09FNbG8Dvp8F3vpbCUlUIwbHoD4fARY7xFmgox7SUpAhJ3Gl1mCK\ncSNjDPiPnMatSkR73W3wy1MYC56leXAqIb+UIzX78QdJlNIyxIAHYPA22BIDe16FDh/MfA2OfAeX\n3gAUuGwBRE6ALx+B8beAewf45iFXLcSd1EL31pvo6m0gJFyiHtmJjByAY/z9KOfOE3n6FWQUdCSp\nqLWZ4OpIUoqfBusJfBHR+COCEJVnITQNrnnvX4KAAVz8OioOKaXtT3bNQOtfGv+vS8Kq4ADx/iW0\nbAXnwUA3qFw9FGbD3J8hIj7wevVGWPkETLoK6qthwCzw7kBMVJDEovysw6OORDOrB6UhB9nRjqKJ\nwFxbi1NrgnBJ1cYuss0gdDoyjH48IyehC3sPUZcJOZNhwJ3Q/2VI/hTx4R3Ifs9C2wyk4RvUxUeJ\nyHoVNr0PQ9zEHPoYpzsW6h0Bjaa1FCIM8NkgwsfXQwdQNA3iBsKdE2Hn/gDB3zAXnCa6U2tJaG+B\ntFGInnWEVJ/EUnIAb0cXhIdCwWDEsi9Jem4uR7U7ac5VEU6M0DoAACAASURBVN1eBReP4jMK9gwc\nQWSHm2tH3QpdpaBPhQn7IMwMRj90gKxrQhgl+JqQa37EPSgCnyMX9YGvCVlyCOVCI4PTFjBYJOL/\nKpst1XZcFoFWN5GCE0eRw55AuftmWHMbIGkJ6g3pY+CuxbB0ITjskNIX9alVBPuTkXPiEaUPI2rG\nQP0xfCcakEVVqD6cD+tfQvgsUDYOwnQoi9fi7HTT1SeKJdzBktUvkjn8Eb61LqB/xWFYHIycPQjM\nawOrKLUGdkioDUWkF0Da9ciUqXR+vpy67xcSMTGWqMdiUV84iVJjQ+5UEAlqGGWDjDbQzYDQTrB3\ngN2B7DGhdhtQd3bgmd2OoSUad2knrm/fQmc7gm7Da0R2noR+xdClgE2NuOojxMe/B/txCJ8KWgE1\nm+FAOZzaCK7+kDASMh4CwDviI7TDboIPVoNmIyI4Ge07x3h3Tw93zThN0E8N+CsfRu0+iHpTE84h\nD9KyKwmzoZ7gQhv9G5tRghV8F4yoLSqUk61o3y6EE89BwxqI++0XYfy1+DVzwkKIxcCNgAMY+hfH\n/jvqhDeueI0p2h2gORBIOfQaCNZyUI+EbY3wzHpQqaC8EH6cDItKYMlzMH8RHHkUYsLA8HtIqcRb\n/TKXwncRG/k5BnUone7VBFd14D60iqCadqTOgtLvOTj7JbLGhitnHrrWF/B3hSMiC1DMbRBbAEmT\noXAvBLkhGWTOG7BuKAzSQksHZK3HXz+GS8nXkfboerQXK2DSbWBYDw4NFV29SGk8Clc8CDGA3htQ\nfLQ2QVgQiGpOZ+fSr8kBvhboAsQguFhF4fhUcp2TUd74Au64E3/HZk6IFiKirKQcDYI+Q2HtG3yZ\nM4fUdhcjbhwKp58EAZySMDoWf+Ik5IHvUVocCFcE6JPBEopcX4sjZRz+lnKkOR598iYc6w10zNeh\nyuumdY2BnIc/Q3d4KLgL4IajgYvU1QgbHmKVmBbQdEsJi9Mh1gatRnjsApSvh/MPQU8mZD4OfSch\nnU7kmZOw6wM85y/iV7Wyb9zNfO/pj9UfhzEknidPXU1pYQQnE7J4sPVzTPpoCOuAYBscFyD14BNQ\nMCRwPY5sgpueAuUAvtjhdCxfhilSiz5IhajvAp0eZs4Alw2qj0JtJDRU4svwozrRDWkSlEgYPwen\nbRWqHiueCQrGD7VgCcVR0huVrgf9ve/DgVn4jF7YZkcZ5EHoUmFdcECKd7kBrNvBKSBlAew+D2MX\ngMECg2chZRtu73PoNO8HfsNNP0GXlV39b+Lm33dRlTsNuuqgshbC1JAZDu5ByJYLeNaVoZnhQ6Qt\npit5O6bSI6iEAq93w48PgW07FBbDqJchfCF4/NB2AuIm/DGu/j/9/a+Iv4dOOE2e+6vHl4nc/3Q8\nIcQ2ApH253hKSrnhT8Y9AWRJKf/LBsf/ujPhP0frRVg/H1w2LqstBa0Fho+AMV+DNhrc7eBugot3\nwMarYNwSeONFWPQ+HHsGGuogNAhZewxnn2H0pA5Fqu6lIV1LYvt0glUFgEJwhwF95GX0mLYiEoMR\nlTbkkXWIpnP479qNds2LiIdPISo/xrEmGF3Q7/FVXI5WKYPmoygnDgBaxBWxsLkSeSkU7noLfIsR\nwVaCO86gDL0V78XXUPyNKF1eyLmfw62JpIy9Fba8DZYksO4Huw/M48DlAruN1IISGKyCVhuUCegu\nB62gV00MfufTiGgvcskdiGMu+o400HB7OGjbwGWE0FCu2L8TtykE3joFcWNBtxOZAMgmlJZvkWaB\n77JHUO94G453QK4B8fzLmJasRc73I/LacBfGc3Gih7gdzYRtn4wpeiVyxSwcTTqEWoXhen/AWCko\nBmJyiSk5S0lFB5p1z5I89GGIrIT9v0DTFPBchKRoyFkNqkiQdoTBhBg6greq3JwcMJgrz35BWsk3\nvB63ltApryGSB0GzmVS1n/TP38I0WB04lyYbhNlhugu+OQr9r4TIfoGVUnQc7HsTwrSoSs8QltUX\nSTbi+Ebop0BBLASlQ+7TcORj4El8EfE0fVxGXJgEhxryQuDMWjTSiytMg642A/K8iNJLGB+7no6b\nNqBbPwCh642YsRqxZDIiti8ESbixMfDgK34KOMdDuxVcG2DMWNj7WkCz3nQUf5weJTYUmreBowk+\newWuz+XMdoFONQ1X9nx0+/4DMg0QPh8KT0D5BoRGoAkCed4PuqdwJg/HHV5AhPDDXXkgboTwKBjU\nAeQE4qH0c5i0838omP8++Fv0v1LKy/7KoauAjX9pwL8HCZdsDGhP/V4YMxFl/AXY2gv21kJ+F0RH\ngzYssA19BSr3wdbbYBqQmAnt+wM+At/egMiYjtE8D5+6mA5eJ8ZnREb6cIrvUDGKmuhYQlCjxoss\nGIC3w47zkIegDCP2rzegj+uPdsvPKLm1mO8difS9hu9oGJ2vvIku5TTGuRIxen+gkeOZFYgrl4Hl\nCqQ7HXqKiXAcRVW0G1+dDs7tQdbboOJthtkzIX8guFSQlB7IbccDmcWQ3g4qO0HnboDTbmj7Ckal\nwToPpPQiJO1+WGmHzr0gapDjBUpvN3FbG+jJikQpqUATFknE9jJ8Se0w3QtLG5Aq8FeCmOJDJIcg\n8zNQGj6BBAFGCVEOqH8Ynp6OeHsvNAShCY5j0LvHUTwZtE3ORLffi36OBWm+DH/8C//PAlFKyBlD\n1oF7sDkWUlveSHJBAQgtTFoMm6+CnNGQNhMczwZm994isLwOupk8cu04PLarUZ2vhqkjEM4D+Fc+\nB+7tKEHdqMvbUUZfjfvF59EmZwRSD63NsP4hGN0c8EAoLIaWcsgRoHihRYIrDNnuRAzSwYQm6JTg\ndkLMbNjxNJz+EdrsyN71dHer8U8YgxJjAs1F8DaidCsoBRLlQBAifQoErUGc6yZ4XCnucxLGXodu\nz0XobIPpLwYafdatgwufgzoukIY6+wAMehR8r4M5MdCJ5PgmlE/KUdQC2fEqol5CkAF/VQMTh/cn\nLF+Lru0g+EoCqyDlexh1CxQehkYQySH4DdEIxwVCdhymZWIWVAfBde8E1BgiPyCHK/8mkIrq+yxE\nFPxPRPPfDb+WTlgIkSGlLPnD7gzg1F8a/+9Bwloz3H0JTDrwlfH92nlce9ss6G6Fn56G3Ctg2E0B\n3bA5HJo74Xg8vPkmlC+Bc2vB0AlX/QA/Po0rcgsVcZ1ksB1D+WP4c97HzT6cnleIbCykVNpIdLXR\neddG9FG5WAY04g9z0/3gEpS+Gdg05YTeko6SsQCR/DX6GTNQoqKg8WWs6nN0KTvRV6wmsqULcXE/\nnvItnB/TCUF9seuNmMcrqPq70WqtaNq7UJmgPDgTy/ibaSgpJSJ1JlFf1qJ0N4LXDXUh4LRCyTEQ\nQXDPRaiYCJfXwAEnLL0fjl+ECWmIKBNMnY2KpWDPQfxch9J+DleiBSVC0v5EEMHf2dFnhSP9A5GV\n21BM0WCrRSl0481Xo3zqg4kGiO2GSKBiF9wyG1f5t1ir44jKCYekhVSv/pCcWD3UXULk5qFKSgqQ\nb/UGuLQCYvuipHpJX96bl8MPM678I7A0Qi8/5N2Lz+KCsAdQIcBxFsqvgYyNgXPsyUf9US2eyUdR\nJU5FOW9FdeUEpG4+ctk3+NrDibx7Hi1rNxL/yCOB+yQiCm5eCRvGQG4LbOuGYEuAfKf1QFk+KMfx\n6jLQzM+DnWEw8iEo/Ak2LoIpy6DwO8hMQ3ZEk3DzAdzj70G/4SN4cjN8loV9SiweXysuex4h5TtA\nuKDkS4TfT896Bbn2P9BeNQHZdzhCuxIh+0H8DIidBkVvQe0mCAmoO6ioC3TB6J0MM50wuBu4BRE9\ni57Fz+J4KQV770OYu5czxrGN1sgMiO4D/lbwugmueBPvfUGoXCko/nxE5gPw6AB0qT7MVTFwcQ+M\ncYHeBD4XHH8UDHEwYcM/jV3lX8KvmBN+TQiRBfiAMuCuvzT430MnnDQaQlNAGweGUfikFgxBEJkK\nt68KyIdW3goOKxSdg53r4O57oHgPnKiAvvNhSAbsfRqrsxh743f0ls9iuLQfLhxCOfgK+o1fELzb\nSXD7XHo978Up1JxfMQDmDkQ4BWKXHcuDsejvjME72YhwXIJtPfDjXbB+INqeR9HGWzFG1+N0f0Rt\nfzMeQw/+va/j7NOX/HqFvm+vY/BzR8kpCyf5gzaiP64gtFSiT7uBTOc27D9cTXuIgwbfFhrSfch7\n90H+y7CvBXLfgVYrlB2DQw/CJTWcNcKRRmh1woK+cNOLkLsI8fSbCOcTiDErUT+QjBKlRaPvjdri\nJvSLLmzTdDTc3Bt3+WF4sg9iVi9wh8J5L6p1rcheKijTgLc/tAaB2gOHd3IyeSzBscOgzgIn3iK8\nrRSt1Q47BJw+Dmc+gy1Xgr0Wxq+B3Jdo8uWiTtPi89ph7ttwvhC0A8DYyiVjCs94i/EgQSbApxeg\n8QZotMCjY6DPHajsL8Oez5C1CpywIirvREmOR5Wfg+XDB+n6YCly+wbocQbuFUUFE9dA7HCYlQKx\nQTDGDttc0HsWpM9A22c3svAtMNwIkWMhqhUMxbDxfghqhcxxaLrK8J70o296AUZNhuMHkLEz0V6q\nw2pPp+t4MRhGgqEB0iJp25mNb6AZn1FH65oduLsKoWUNdOwJfC9PJeQ9Dtn3gKcMrnoXrt4Jlkg4\nvwEulYNaICImQ/8p6LQRqN+NJLZnG41fF5D4zHkiHtpIxHs+IhzPEbExHI1Oh74sA8Veh29iP9wp\nH+B8uReOCWr0ShM+kwqPZh3SdgZ2XwNJsyH/iT/MjP/5qePX0glLKedIKfOklP2klLOllM1/afw/\n/y/5t0IImHAfTHwAls+D1b8DRwfsfhLW3gmKHnLuQoZH06pyUzdST4grA82xZXDidXA6If8emLIG\nLvsM1wkjppgrCbEqRKTM5fwIK23XK3gWaDAMaUI1dS8kxsDgpwIys8uWweDlEPsodBWg3awh64cw\n+r11AY3XgmfgbHSrXkHam+CGHXi7zKhcBzAODcIoNQSPmUdkr0X4d8YSLZoZtvMU/ZaUEP/5OcTG\nz2DHqkDp68UHISwFGd0P34Vq2FKB/NKFvMIMszpg6kOQPBLGXwlTHoKuZCAM7HEQNwKf4RjiORAp\nfsyF0USuOIXOEokrbQwtxZUQmQ29vMjRBfgzskDfAyfOQXUoNA2FbDOHQgeja62Aux/EEexG8fuR\nrQoEKbC/GlZ/CEUhQF9QBeRDrV1pMPkZjMESx48PwIi+cOQR8DbTWxPNlT0tPEENLvyQNhLsbdD6\nEjiDEJt/QFVkRpRnwKlipOtbKDsNrQ6EXo/i6cESrMa27veg+ZM+YqY4GPcZGCIhSg/NahhcAHV2\n5B4bnn4SpaocLr0D29+Hgk2QPQ7i7OAKhuARcO3XqM0GZPLTELwDdn0Jo57CGxJM4+H+xHcdwa1U\nQsHrdBcl4zM3s+HyuXicPtQaF5r7oqByFjSvBkDWLQysEsLyIagJWjcEvCLi0yE4CJm6DFZrwHsL\nPNQbIYrRN29B9cLdDD31Pcr89+HNs5DshhUvwBgdpF2J0J9DfbEbXVE4BuVTjBG7MezNRH22Eu+A\ndJz+O+jUDcc5YjgyetQ/NDR/bbjc2r96+zXx75GO+Gug0oFbBMpwQ/wQnAB5s2HzC3gG76MoU4VR\n1UFv01KE83EIyYNJo8B+AYKSAwHSWophwQIAnNu6iap1kdGjwxtWhjPchOeZ3gS1xeH+8BfsV+zF\nHD8JPl8Jr/8Cpgg4OQ86DaBWoxSrID8fXVB/bIeKERFb0XZUo0+9ASYdgrpQVJ3A8b2wdxens65j\n+php+FfNDNhzJgTB4dVQdDwgY5PZkDYcadTQc2glxvACZF45srkdx3gPNvVcDLaBhESuQTzyGtw9\nGsrfgAY/qMyozwqoNqKkqvGn1dF1YzzGD634zqwlYl8NxLdBngvRUQI6JzgSILoZeoLAMojO5gos\nIZ3w449w+BQtNjfxKvAkmtGOi4ZDLmjyw52PQ6/cP16W5vAcSLuePgkbOW/uQ4FrJTLfj29HFOqr\nwxhmu4DeXMCjplbemPEyhtL3oe8pSM4DWmBmP5TqnfjDbsFf3oz6xEHwlEBhPdi6iEqNpXrTeoIe\nOQtBmsAML6R34OB2J0gXPJEPL1RBzWJI0KD+XCCHj0SElSAbvocOF6RnQdYIyP0Zdj4B/hC6O9JQ\nd5nQ5j8H7bchD74EBePot+J7RFg4Dfv1JIVJHO2haA+10290GZErbkKUNuBt3YC/az4a7wnouYRf\n2YHi2IzQDoPgEfjq96Hs/gFx9dtwbgXy+EFotiCOdUPVJdAZIXYk/rCDFA66gv6j5oCjE441w+TL\nIewweJMgVIHBz4ESB34fmEIRDg3qk05UtQ1o5vWlJfsBjpuryeQkvRiIRKL8C8zffN7fBv39Nr7F\nPxgatx2cNvB5oHgfFO2G9jrw/qGXmc8NpSUw8WXIv5ayhutxqYNIPVCGuG0A7OqCxlOgDYaQEYEP\n9brg0yuQT5aC9yD6+CL0Wz7BN9CLaJDoz4bhjDlPc0gD3X4t8e2XwFkC3gh48nqIPAYiBoIT4VwN\nOBvAk4yvsQH7nAqk3oz2dC4sfgGqRiAaTyNtGogfAymZZP3yDeIwOEbNxtG+g+jabpxJERhCcvBP\nU+AzL8qFF8Ctp/PVgTh6LhF2zEbj9IG0xjnIKm9G25KOUE2FQ4Wg7go8ToiKhaFjcaw7jkk4oGca\npotncbd6cBZ0oWvswX63FmGKQO0dhnrAo7iq5mBQehAqD8QlQtMvOEUwvZ02yM+DymJcxW7kKB2q\nChveWg3q2MjAg7UnpsHbWyE68z9ds7y8KzhX9BwDw3vwW4NxDEgj6OPnYcZQ+h+8QOjAy/hKVcGC\nqrMog8cietsg5AzUfQ9Jb6NY4hBHopEeGyLUBL0vB3NftEeWo3SnIC+9gKhbD1EjIKwfGBLx1RxD\n0doRPzeCPxgikxC9LOAuQhzbB6khiMTLkJu2QYgFTM2QboUZw6HKiFj5A96fF6FNeBZCYhBVm9Cu\n683O0Q8zyX0Q7Y7DNH1ZRGtJK0EjhtLHk4Zq19fIKzxouJ7uN5egZM5FCdmMDNYhG99FrH0U/NUI\n+wH8XUZUm98HXR3KmN/BmQuB/n93msFdg+b7o/j7OShvTqN/zRF4YnbAi/q6Aig5CxUfgCEErIVQ\n8HjghzaHQO8CuFCM6OxCmHoTrZ/MBAwUs5XdvIcWI8NZgOCfOy/s8/42vCP+vUjY74cdy5m+/RFo\nXAdh8dB7NEx/GML/UAVkbYGPF0JmAbx3NZ4XdxGqXUTUnEew5LrB0wjj3oCKn6G6DHrdB4DsqYB+\nNmgeB4Ud0DMRYTuBqjoXDHn0hGYRWvoePc1W/HdE4guNQNl/FmI00LMD6n0w5j74fCnEBcG4O/A3\nnMYRvRH9yYGYb7kVWveCuhtq1LDDj7AoeMOqkEPHUOvJI9XchGHXDk7caaDRYSHt+BakqZ2OrjBs\nL8cR8XFftDKS2J5k6ntVQVMI8cbHCFX3oSruMPG25zD80gdVlQIhGpiugp5pyEv78fm1EDMIleck\nXYkKhkoLHp0T6sG8JxR55c14O6pw1V6B62o7nnAVpt1u1OM/hvpfoOIzhjWdhLE9kPIBvT5+ms5b\nLbgyrKhaBJr4IViWuel+JBfZeDVEDQMhyBxeSSv7OFmbx7bzE5k/djGyuRtLy3f4e5kRKwsRIREk\n73uX29IFbp2GA7a7GB+8As744NxmGJ8WaFKqaJFqI5iTEZ4K0Gsh2k98dDDtuyUh81ehihkEjlpY\ndzvSY8WWbcSyWYWYOhC0XijcDy4/WIEjnXB6D6K7G65dBe5+0PY0NHlAb0aT48Gz6zvovh8m5uHv\niEZ1tpCOkXfjDZ5IyOon+WXQNUyJCcPV0IXv/S9QXROHyItBFBVi6tOJ/ZHlmJ4NgyEqKDkOegGt\nEl+7RNXdDamx0H0evn8V3JXIIyfxGvJQua0oI1Jo81nobBoBD18GV98JNgmeo6AfAxHrIWoBdNf+\n5zjJkNCpIK+/Cxq/RbRVoPS6hZzEeUixibP8gpEQ+jP7Hxu/f2f8Lwn/I+F2w66N8NV7YG2lgyRi\na7RQ3w3nNvKfZHyKApVF+Aam0zM/nnL/O2jf2E/8qOsQrZ9B1bsgeoOvEUZ/BooGWrdA6RNQ4YSO\nIYgZj0PbD2ANQpxvg8ffxfPqaxgWbiDYW4WhcTdl46LIypmN2HoYp9mEyBmOfsUzkByGNEfgDe7A\n2U+D0TaPnouXUOJvgKQK2DEbBjwG6e/BulZk3UbkUTcqbywMuBzZfzLhZS9jU1tRnzQhB4YSuqeO\n4NM2VJctQTz7DETGE64fRGvWKaJb9mCsXUNWTxr+rd30TDyF6lg8uqqugO9D2y6orUTTfzxy6Re4\n7++Hzi3R512F/uDPtF5Tia7Kgfr7D9C8eBjVUzXoT4QgrpNwbC/MjoeMO1iVnsNDm1ZCtBW58g4c\n915F2I5uXNW7EaHzMCSvgGuL0a19HTKehH1nYeHzbD34HQNCtzI5w0VFcSMi8mE8lu8gLg1/5RHU\nUo9odkHaIDAk0h53kdUOHWkRj5FkvTFgPGQ4AWFexPk8uP4l/CcXoOhvQwy7HrwLUDk3E245jX/X\nObCboXcezNuCeCMbdZ2HqjffJDniTmgsRTo/gGNvgyEbuipB2w0moC0IYjqgfQu4s2H9UjStXpx2\nLfjjYE0ZirBDjaRP00rs3U1YzD76lp5HZ3Hj1RiR6PC29KAxL4LRV+JdnwEZtfjK7Cg2EJlPwIKH\n4KdnoPV9hAeI7w+N5yF2PLT7INyJrLPj7vTid9fiaA3lqm330JoYS0jCJoSlG1VrKBAFo8qgfiUo\nneD3BO5ldyeEx0EfNVCJFF2I9IchZgoAuUwhh8lYqceLGzW/br7014TX878k/I9DjxPUasgbDEYz\nR4SJmfMXBEzI/0Rq08Q+OjlP9Aen8LMJc7OH7NoqeoIGYR46KGDsc/IFyHgQJnwdeG/bXjgyF/FD\nN2SkwT1vgKcJVD7Iex/qnwPreRT9StS+7XDAhXZdDdnbp0LTNkgcxOnB0+n941Pok4LgfDfOF4fR\nOXw/ERefRNXkA40GpBdMZ6FID+OzoVsDY7xo5ENw4B2Gd/SgKTwMc78mqD4V25BgOseuJeZoH0i4\nFkVo4fNXIdkOq77AsHAq1lg/7dElhLXdAns+QonLRO+oQwwoojs7Ak3oBLTrT+OrsaCOgrKeZ0mY\negv6dUuwnl6C8PoI/TGW8ssVDE0u4qPiUT7ZDGdOwInrYeIzAPjwo7QUIWKHwrEd+DUhkKhCybuD\n1o4LxPuS4OSHeLrOoz7zHaL4W9D3h1u3Meh+CxxuJnt0Or36KNiyKvC32NG49qE6ocV7fz6an1IR\nxacQmmJiExSWVS0FbxsE/0Emd+kiVJWA0YE4OAdVQzMy/idwjIKrVqN6KpxujR9drB0lrgeKV8P6\nNaiaPXifSsD/f1dJMenQJwu/aQyqwxVQqwEZCqYGsDkgri8MmQNRo2HsTDTPzaCrwgqzn4KlNyJE\nDJ0DRyDrnXz1+vXMWvExyRfP0JA/H6WuldB7r0R0LwH9bBAqPHG3ozr3IqoUP4rLAqoUMJjgmteR\nchXebjUa1UlQ2yC1F/RMwx+jR+v7Aj46ByWzCDG9ROtH96Ipa8f9pZWoha3UewuIznkZldoCve6F\n+m9h/+CAx4o2DKKnQuPliIT78Fpr8cWEo/mTcBIIQoj/h4XvrwW/77dBf/+WZct/Xl7pw0UJK2jw\nbyHjRBvxu04j+kzE7Y/EuuQXIh5RI8IT4Ugd9M+F1ja4ciP4GqDiDtC+Cs5jcORTmPYSdL4L2svg\npfcCSgttCq5LrehW2AN556pPoN9IfJE6xO+Hwf52Xhv2IE83rMITl0DH1AsYI+7H2D4GtnyIt64Z\nbXoLqMLA6QZvF0RqwSIh7jG49DmV7k6Shy5Dbn2fGs8h4voO4Vy/JnKCvkOz+QcoXQ7+InC44YwT\nEgVt01JpGe0lo2oxqq23Q1woMrSZ7mV+DHM1OO0CpcVC16fgvLYXMc98j7rDQvf4NFwhduorJP0H\nKki3j+oRETQtup5Y0+UkMhGlcBa85oPX3+es3MIpfTtX796OencF9csykaoaJAto9O5nfecIbusp\nwm3pJOSXg0Tu7Ebe8QWaVx6m+VY9UdGJYGvBEzMIb+cOZK8GdJ/oUaQVx7QINJZr0KQ+iNgyKdCD\nz2uCEeMg9BRU5IFrL9Q5Yd7YQN5d/wDUFMOpr6D1HHQ14zWF4Y6djrHDAyVrQPqgwIf0aKjMyiDZ\nOxKRPAn50/34b78L1a7zsH0fVFphoC2g8EjwQdjoQGqroxzpi6B24Q4Sh2pBOOFyP/Vz8mk55UWv\nGMi6dAFvoxZbdAzyfBmGy4eiLDuObosVaetAXp2FnN2OY+wVGGu2oxrZAVoDAI6Tg9GcrEdjtSJ9\ndtyuNJzVnajzL8OsaoIrF4K6GWLuxfnll9geeoiIXcMQ27qoe+B3XPL+zNCKbowdJaCPhdCBAUlc\n2vOgkoGu0TWPItU6XAnZ6GL2IITpvxVXvyb+HmXLVHn++jckaX619ka/jb+C/2GoWs+T7e1P9unN\nkPUIuJbit+2j/UUFvU4X8AK2HYIsFRj6Q8xF2JUH8QLEcHB9HKiqS6qGS9cGlqel/UDfG+ITwFiD\nt9GGruF+GG6hx/QJe2fcSW+tl9h0NeoH+nGxbgpd3fVo274h/J0YVLXvwOwmvD4P0lML/RdA/h+K\nCpZPgyFJEP9KgJiP7SLiwnHovZfqWxfCwTLUvh9I3zGHkpkf0aemDRRLoDy7ygYGL+zxEDZoFv4z\ne3H0Dccy4Gl8J77AtaMRVZJETT80eTo6sOJ9/wKyqoWum58DRUEJSSHE2oD+jtvxtWxDXXeElO3N\nJOf7aJhm5jivEBmnodeyD5FP3M3yZdeS0liPUiJwfFMURQAAIABJREFULXoFvbYYlX8kFuUm/Kow\njA4baedCsfebhLz+JVTmzxFn7oS54bQdSyPqtY3wuymoDl3Ec3MDmlUJqGxeSIrE5KkFx1bY8xn4\ntSDVgW4jbRfBICG4GGqdgSqx5btAZQCxPrAKCo+FuGDwxKMeMBu1KyxQBlwgoWcUeBoQnSbCguLo\ncZ7CcOE8dNfxab2VvhkpDKs8AL5Y0DqgYyTUlkLPRWg9DF4tIn86UiMgNATiR0L/TMx7tlJnDqPv\noA/h4guohkVhvNSCNuYsss9uvA413srDtPvvQXwUDm4vpugrUOqOIPdPQYzfBVLid3ZiLbTibB6A\nJfQcIu4agqf1QuSnwM43kS/chGfpBrRnf0DbtxdCo8Fb1owmtIiEphIiQ2+gPOhlzKG9iHYWItwb\nEAYfqvK7EXE3gSUP3GlQ14G7IB23uIMgvv6fDNO/P3p+G/T3z68z+VvRVQEbJ8ORx6DvYji3F5/R\nh7tJIeTN5QQfLkH0ugFsQ6DaDHI76Lsgygc10wO+BTlfg+kBuDgYsn8PkQ9CRze8+jXMWQj1BzCM\n1XCpOJSDN+6h/LMMxvd1ET8yBHW/G6FaMKV3PZsXrsB53zZs4SCD1XDwXXx7tiNUzZB2TSD9IQRM\neAKq9wcIGODaV/FZdcgDH3LR9hW9YvaDOg7zpHfRiUhaByfAsq0w9CtYUg8zroOEaMRrbxO5x43h\n0/tAa8RxPhv75xKdTgsZj6E7ZgbzPDQ2H+oiO940O5EfvkfUR0sxTBpF6MAsNO8cQpALPSC+PkBc\nuY5BrTdg8CqciFzO/ndVaGzVXHm8CJ1ZYg6vIKT0JOHV69A1vIq5dScTzBuRIcswfXA95i+mItKT\nIXceXP44Z/KvhUM7kfIojDlAi2EEmqdLwZwAmfdD1gsQMw8iBoJBBBzxRg0HRzL84IN9zVCtBFz1\nZCKMWgQvdMPdByE3CbQ3wtTFcOBb+PpZuDon0G6qozFA0BECy/deTlssyJx78EzL4drYa2lKP8Wm\n+al0Z1eDXg9njsBdqwPGT3oDxVddQUO0giHJB4+sBqmCLz/GfNqPL8UEJ8/hP7sXefQMOrcJtFqE\nVosckkPTj7PxGYMxGi9H+0E2KsNJvGHt+E2HcJVMwb4nFV9pOa6gGKKWfE3I7a8QLE8i1AKZMhGH\nqQX7KAXnyXeg8CdUrScxf/QRrl9OQ1I3NB5Fd2QoWW1VGJVCWqIrsEcmo3Jdjeh/HGIWQfAECJ+A\nsAp0trF4OIjkt7Fq/rvB+9/YfkX8e5OwzwXnP4H+T4FxOPzyFHLLZuSxM6hT56OfMhVhMMDQR6Ah\nCBK0sFmB5QLeaYeYSYHPkRJa2gA1OA6A6mrwK/i2rKX+9afwqRU81nZaxplIGWKnT+VW1OoMlEF9\n4YYKmPUZEyJ+Zm1LGdrIMJwzxuJOcuEzhoO7A6GkwVdLoKoocLyUkeB3QHNZYN8cxpaRL9La7zqG\nrv8B0aGB+OVgDCKFG6jpXYb37kcCTTcBrlgGo/ICmthd51CXNCBNw3Fv3oNloY7OgYPg+LOI5oPE\n2rKJXjCTXu/cTfSMJoTODyFxMCgbPn0MVr4PT3wc8M1NLIUVQxBfX0vM3kpyfyoi7MQlss1WEtYd\ngPjhEDQLrUtBFJ2jq6Sai40WqnXRWBOuh3H3gegLqfMgbxTY3scv1fgKQMxrw9cVgyn0KuhqgtAI\naC6HsiVQ+gMYaqClNzL/XuozR9Jx1UKwxEO3HpxpEDsU2rsIdLPuhHP3Q+xzUHwMzKHQVART05Ex\nccg6K9iBmm7o6ECZtpDwBgO23StwZ4USWrOcicc8hCh+6gbGURifxdmBl9O95ip6ktQwZipZoxbR\neMN1dHw0hNLUCGiphCYXSrWN0KZa3HUbcT7ZjVz4GNy/HKJiqD2UxabHY1Ad0BJZNguj5UnMiefQ\ntD2OvTQNV7kbcWQHGkMV+pwMIp6/DBn1BPa4r6i4/TyumMdwe17BNqked5aJzoQLyJgkqCvB39BA\nzzY1uA34tRG4jAOxp+kIatUSfTwae6mPi/2mYhft/y8+lG6YcxhdRwZm3sHPn6ko/tnxvyT8G0BH\nDZw7Die3Q9IEvJe9R7urACVKh3rjZpibBU/cAg9eBxFnwRoJKjv0yYO3N0DvbAAkEik+hKgTyLJv\ncK4eRdXhNRT/vAzf5CmIhHHoQsPwVK7H2OWAjHHQ7wooMsHpidD5HMFNJ3F7SrCdfAijqpnyqX0R\n3na040GJO4Os/xKWzoU93wdmw/F58PNLfzwVj1pPYYERsyYctnjA0wJSoqAhVbuQsrui4NuPAoN1\nwTByOixcGJg9Bscjl8wg+Ao36oxBKPpiUKog3IrcPgMRfwxha0GjXoRSex6EH9zHAiW3676GUCO0\n+cBpgMGvwsZKKCrDeHYr+Z9Vc+vqGrRPrYV6E2xcjPCfBK8fsymKLzMG4USFOu4pyLkfBtwPP9wI\nTS+BcTD6pEu0WRdiPzWT7syZBP+yC3Y9D72KofYwZEyE/g1QZcSfdzs12VZMLQ5C67XQWQnFRvB4\n4OweQIt/8ad4V85Epr8Cj82EI7/A61fBCCPIanwlA/C/NCfgQtbSBbH5kJxGytTVOGKsCFM6DPgQ\nc0MQQ75zENyTjRggqMsMo9unpXaiQCaMQWxZRv+K7aRW6NEvXUiLo56OodNo+fgEl5xzaO1zHOn1\nISxpoFJRn383ZUkmYtoUQqWGnkNvwdqRCKMH/+fT0fXU4WvW4NcuRrtfj/imhs5LjVS5W9nWEUSQ\n/Bxt6zQ0FSoijgpUpTEEFXrwx8ZAXSnuQ/sIeelh7KmR9KjWoxaDMOvXoZHjUZuGEmfoT+yZxexv\nu5F62xqwHgNnGWi8kDQBHTNQ+Ncwc/8jfiMk/DclRYQQYcBqIAmoBK6RUnb+2ZhE4AsgikB3tU+k\nlMv+luP+XdBeAV9cCaYomPEeMjSNxsxMdKPyEDNz4UhvkMWgb4Rp4RBzHbR/DgVj4ZsjcOhhyHsL\nemWBawXQC2pO4yyPo/N4PVEzZpM0cTgUrYGIWrDWkREkCRrngkgL1CaA3Q3nXgMh0YZ385n9Wsq8\nSWRa7iVrzSbOXDuLnKd/RDNvPiK/C+q3w8EFYK6CEAUZnkTX7msIippLv+7lJPwkUapbIa0P6M+B\nmAN+D8FOFc0mE9ZRRoL3vQHRBlBVQ1Y12NwQWooSoUGxCboywBakx+QwoA0aSpeuDEtwL5SIfEBA\n7VGoPQdlR6GPES62wc5FoAPMwZCYA09eB1+tAtVg6PEhVIMhd2hga98K676B9Lvxl6wiX6Wwo+8I\nJhVux5x7F7w2D0J6IKYdf+YcgrNfpbkmgeyxH9HeOZ2Q48cCFW03LIJxi8CUDKrf4TG9yoVBF0m0\nXUPwhS3Q+hNYu6ClHVqDwaJD6nsQeg3yoA3vD1MQTjuEJ6GanoowAxGp+N/dR4ddhRJuJnLwDbD5\nUzgwGc2QazFGduBR4gL3T8YklO56Ykq/wlDbineCxNgzkp7y/ZxtfB9tp4qM4g2o1/pIcFvw2f34\nz2ziTMtMwkarKOoXSsy2PiSt+oILj6eibz/L6BWnEJYYnEMSUdXsh1A/GC0IVQKGZA2Yy+Dg9/gZ\njydvPy0pRTTYRjDlx3K0T42FuHGIhs9AMxTduX0oBgsqfxXs2wZ35tGTUoamZxhWbSxN4jgR5+7A\nosmFfksRgNpTTn7tYsLLbsYTXICm+ziozH8MmX/24oz/D/+N53K/Jv7WmfATwDYpZSaw4w/7fw4P\n8KCUMoeAw/w9Qojef+Nx/3ZoTbCoEBbuhsgsHD/9hCYri7CHCxDDnoWXPoKP98Ci+YFead+cgJ/D\nQbk8YNPYXIT/k+uRu9Kg8x1Q5UEqGCtUxA2diMEYBdb+sPIArHVDbQFNXdmI0y3w7A7YtgbCwyF8\nLhingzUIw2lItZZTc+ltlOGjSct8AX+8GTZ8Bd4RcCk9ICPatAT3jq3YVL+D/8PeeUdZUWX7/3Oq\n6uZ7+3bOmc7Q5CgZSQqKAdOAGMecJ+jIqKNjGDPmLOIoJhAUUFFyztCkjjSdc+6++d46vz/a95uZ\n995En868eX7WqrWq6taqqq4+Z9epffbe35YvoLOS6pk27E0REDkHxi6D+Mv7S3cW/QT8HWRyFdbB\nY2HLGogcBTIJSo9ChQbVdmjyQZUXx8fbMR0KYCixwOpNBHU3Xb5y5IHlcOBNGHEtTFwMJwJQ5oYR\n58P4e0FzQ7wdtr4Jucnw3BbIHAo7N8N7r/Q/8/YyWHULciPUJGTRdCKRYa4yprYc4XBnBaga/OId\nGFoPFeOQn9zM1Ns2M+h9N+KpS1A8TsSEe0G3QfQ1sHkUoOHXP6d4cgyJ7tWEHB8S6NmKv+8Ier2Z\n0MRo3Deejx5uQCb6IMaLIT8bwzt7EaOnETB56XvHj+uDagLdc1FObOXYWQW89fB5HJDVyKZm6GyD\n/W9h0PzY3lsNd2bCihfh0BLQK3Bu7CL/d3WUDSvBubsbx4QuPFYXtc4I2pwmQsndKLFmWuefgXuc\nStMwB462AI7t7ew79xgxZU+SkdcNSQ6Evxs1zod6RAeDEakloFj2QYcV+Snomw7Tld1KQ1oGli2J\nTH9oL8ZfrkeGQvQsfQv3O8thfxNKtoJ6uhO/5WukXcE65Fkc7+TTlTqeOrGDuKpyHAEz5N75/7uE\nzZBJQspzGAcuQw2fCs4J/ZO5/66E/o7le+S7Tg+eC0z+dn0ZsIX/ZIillE1A07frfUKIYiARKP6O\n1/5u2GP/ZNNQUEDsiiWIysUQdhdIHXq+gI73wX4GzDwCO6phyZMQVghf70fPUAmt7iSomNE8qzF8\nJZCmHkTlTpTGItj/IozyI8PPRTQewJcwDJKvBD6A8dMgwwOuI7B3DRjiqC1TeOfmy7j0/tWw/R7C\nVryJLzaObqcLe+WzaEpNf22JhOG0ZpXSOzST7D2DEc0fMLqulbar1hPnM8P25bDyAOS5wLgREh9B\n9btQc28EcxW0WiHjCoi7AMaXwJp3wLwenN2IWjOR2iBEcjfUh+FPseCLsRP+ejGitx36fgquDojt\ng5AZ2g7Dk6v6G2r5IRDdsDUZLs6B238LERKefhHent0f77yrCZ8lhe61b+C/9EFOtn/Ngt17WZY0\nnqqeMtJjumH8tVA5FvWDBwmGqShVxxBKEpH6z6HkA+io6Q/9O5hB12U/pzW0hDxfKiHFieLpQSEW\ncaoDkWtAZk3G/HUNIiySYKEbOS4V4ysHoGwwaoQXy5Lt0PIloc42gss/xtjZwMSTbUx/chNkjIbb\nX4EXfwsTxqMnbkQNjoWzNZCnoczSn+iggTlxHBlrv6TigjyciovoDBXvQQ/ergB7xQhSpnfgM1Yz\ndmUNrk1RNI9MJZAfxdQXdqOHq+jZm9GTdZQoBUPxMUITMxCahVDKbxBFVxAqOUTwLAuGwQE6ct04\n7WHE7tuPNGXQt3gBVB/Gkh6NNudacL2BPGZC6eyADgN6oRlRXUKn7xCyN5KhJxtRHLPAkQAnbqIn\n90EcWnT/SFezQ8JFKHI++Bv+LUpW/lm+ZzfD38p3NcJxUsrmb9ebgb/42hRCpAPDgL3f8br/4xgH\nDoTye6B2HbRMhPAWEBKst/RPwGX/Akruh53PwbnXwMky1FQTak4Spk9SkfNKkBNrcPvt1F18A9El\nbxLd3Qq7oOmirTj2xtA+agiwAIYv+MOFT70PEy+HT78ikLmDmOJOLM1u2NwJnn1oSy4jlBMiWOZC\nazFBRjjtU+IxlbeT8GYvSnYCjE/k6w23sTssgheUeJi/uH+ycM9P4PQMeGQejAImXg2Lbofl16KX\nncR3fgymygaUfTZw9cFwB0g/hh0ByEhDL/ARG+ikp7kXZUwUWM+COS/3y+k8YoTwPIiKhEFRsKIP\nMlzQnAv7m8H7AkS1QfvTEBMOndkQtR0ZG8bp4blkdghE2QeYuk3YQsVcWdfAksg47mI3ZudiqP8S\nlAi8zeHYcxSUNAXLqnVQfQyi05HPTcVLAg0n3yJm1yi0q6/DqGrgeggaP+x3N2lW1PhhcNuvkG9P\nQGbHQOoseGkdGCuhQ4GNz4P6Dao/EaWrDX12Doqpmt4x03DMWQ+fvQXpSQTzIgjmGtHdp1BakqHN\nC12efoGbSCsoG4io9DFiWREVF+fjmeIhud2C1a6RHJMHRz6HDg8ywozD3IbluBtTdwBhNKNmXkxo\n7078dS7UZVvwPTcas+qCxIsRuWNx7TThGWSFzXFsezSX2d27sB06ScCvIxKPYygphV89gx5bS6hx\nCRwPINzdeAfb6ZhahbNC4Kp9gdjdTYi9H4C/F+IT0LPuZaPna+o7nuVKbXZ/jPN/IASY/vcnZPxF\nvP/sG+jnrxrhv6CltPiPN6SUUgjxZ2NYhBB2YAVwu5Sy7++90e+dQA+07gbnWLBFgSiCEglpQYg2\nglDhJw/A4W8I5c9EeX02lIwBTw5MzkYsX4dYfAmONzaR/9GrMCALedKEd4IgovgUHcEAal8dcvcv\nEaOuhKAbWvf063QFXOgDrewdMoPMtTYa1DTSvQtgtx913C2Eb1qDkAeQXUPwdtZhaTyFtasJoq6G\niUch4kUQO9EVpd/4bl8FegvILjhvBcR+BH0lhJrvxpf+BcbBh1A3ezC93IGSGoLFN7G3bhujZQri\n1CEw9qEfqEDYOxGX19DXeBkRxfshpgE698Hpkv5RVGoWnPNhf/WtovnAjn4VCqMKTZvgQAtto39C\n1Nm9iM1fwI1+OBgkt7gdxXiE4Pil5H71OaRNwmo6wMXbXmfZiFlcv3sinMqAxJF0ePuwnzoFveUQ\nWwttdkIGD7KnDP+xZkIv7sS69RFk4BegPgviZ3D8VbjyejjQDm0NoCgIvQ0lbjH0tMHZp8EU1p+e\nW/Ul+PugoQkREYES2YaebkePPIH+4Zkouw5AuAmxowhZaERtHgZN5dBwAnpFfwnMTDcyyoDoBrpV\nsrcW05wZhesKD+ZX5qEk9yG/kmALENqZSKcDYqwq5IUgaSCUbkU1pWKKbiV0xWDUPBDxXtyRdlp7\nLiXKY8bwWYBVD4/gkge+whiy4qkVIAxY0oOIDJ2+vmew1zehlPoInHsxbbGZRD98hN46G/Ff1WIb\n1Ns/r5A2ALqDgI+tlPJ7Sy0PG2+B8iXQshYy7oc+N9SdhrefhkEjYcQEGDbu329U/D2PhIUQPwOe\nBKKllB1/9rjvkqUmhCgBpkgpm4QQCcBmKWXef3OcAVgLfCmlXPJnziUvuOCC/7+dn59PQUHBP3xv\nf4mdO3cyfvz4/7I/2lBGWyCbAZFbaOweRLi7Ho/iJNl7CGewFo8aQVdXPJbPS3E9Opik0sO0lOaT\nM3g9Bp+H1vW5MBaiHJUEG018nfEAA1q3MKj1M6QM0hXlJNbThk/acROFX1rxCQdClTSMUyAgGLz5\nBB+ELWSA0cKo6mUYO7rRRJBArpmazHTCmnuwH+hDGxRAS/RyIHkRFR0zKNv8BcW3XsZjr/2O6IyT\nGLI9lAVmUBw6n7D4U0SnFWFTWrG3uSjaezlnvvEYAc2GkhQkONpMhSmOoQlH2WW9maEnl2P1teBp\njWP70NsxTTnOsHe3cNo8jfDUOrJbNtLriaY+ZgQl6nT8NieDD60gRiunZOBZVKvjMQV7ifKUIwuP\nM/TAHsJFN64WJ+ZeN20RAziYuogeYwLzem7nuO1COvw2JhW+RpGtkKBiJLPJxdame9i5cydnjs3n\nrK2LCcYbMRZ78BkVWns1Uss76RloJvRAMuU7JiM1SDhxDDnbR/iQduQalZ6T6ewdex3nNt3G4ZxL\nGOhawyF9AWO3vIHvbDuqMcDehmsY8/VbqCN9GOpceLNMdNhzcdRX0xUsIGAzk965g+L506k8fhZS\nqIQZazjD/wqeTCehDiNxB04SEhqBXBtG3BDhp2NiGOG/dBHqMmBoCxGyqVSPnsjztVncfeV+6j8f\nSsrBAziSmlg/9iEMAS85x1eQe2I7ytmS0F6NXk8CpohOQgg6TclEVRXjFwaMCVbcSgTR2dUEbUZE\no8SbFkZV3Hh8TgdJmVuJ+H07PcPDqamaTFdsKvll6wjGW0lL3cf+xsv4cOZ0xq49waiv9wBgiu/G\nObiB5pN59HiTSD2xl6rB4zk9ZCJeR/g/3K/+Jzh58iTFxX/wYH766affPWPus7/D9s37+zL0vg1I\neAPIBUZ8n0b4CaBdSvn4t6qi4VLKe/7TMYJ+f3G7lPLO/+483x73T0tb/pvprcf1wG1oSa0Y51XB\nY/GI7lZ45icQcR0snQuHe/tHSL97Fqo+h0G/QJZupvbkk4RkiAwtBea/DpED4ctHYMR4AqYn+dCa\nwYK+0SjX/IKuB5YS/tyt/UKcIh+Ualpe+hnyZAVx7nPhkxsgp6d/yrPnTKQlnMqIWp668iqW9D1E\nKMyNDIbwhV1KQAErk7FxDgph0LIGdt4NX8UhmyoQKV6wDCZk3IroUxBx89A92+k9Xyd8czxYLbSe\nOQBj9QmcJWkw7mp4bwGcfw8QIrTrXZo+q8doiScypwt1lgOy74fC6wDo8hynsmU5wz96DOoEjLuc\nUKuPDnMf/vwqwo9Vs2/ebLrM8YytOo6adpiu8DB8TVHUJV3P6bIOJhjbQEpS0n1oT6yl7ZUGnHM1\nIg74kHcpiFwdeUBFKCFQNfwTklHM4WiuekSnDSxO2FeCHh6Fa7gfl9mJ47TEujsKEd4CjZGQNwXC\n3fhP1SPjMjENvxrf07NxP/88EU2DYOVPkVPvRKT4wLUagk7Y0gMLP0L/ailUPYMyToPuqYRaP8Rz\ntAOZrREcE8LxuwCaaRwyow5hVyixZpN3LABhkf2zI2+s6FfcXngTjdNPE/PSKpS+44hitb9IT4tE\nJsXgn/sztKJHUaq7IAZEtAbZo6D5OFhCgA4D05DxDfhtYZi+ngNnZoMxCU6sBntBfwJQUjLfDJ3O\n0CH3EY/zT9t4sBdK7wZjPMScBeGjvv9+9Q/wP5K2vPLvsDcX/t1G+BPgt8Bn/BUj/F19wr8DPhZC\nXMO3IWrf3kAi8IaUcg4wHlgIHBVC/Ifg3a+klF99x2v/4EhLHP5TXiy/PgGmhxCLVPjoPTBfCl/d\nAsmXwjcPgdcISnp/llvRo4jpb/H5yFKya5rIqEgGxwAIeGHz85A2il0FdzOOJBTVAJ52wu06qG0Q\nTIURo2hNbEMv30f8NxH9Kg7Z3f0OogGGflkdzUOc0Yu9pw1XnQeTw0NHmgPnzs8J809GjpeEjF+h\n9xmRa19CyxuGHLgDOusQPRpM6iFgjGHX2cs4o+lRTOsmgmcDbKgAqxNb7lC6nW6c9nKCK29Ctxkx\nLv09ckY9Cj6S8kN0FLcSqlHBNg311Ccw6FoQCuGmfJzla5ENGqIjCNN+jXpwDVH199O5J5ZTpgKG\n+PuwB8vxDF+BadVolGQfRYXRROw7REdLPgVRLkJD78H78Te076wkcb4NwyAPGOwoe6thcxoVF1rI\nyHkN7eVnMR1yQ+EYyMqB2iegaTchFdz5QYLhPtrcEVwW/RI3eN/nYts+RHUzXJIPBgvqyZsQvkZ4\n7FWMI2PxrX6AkNmDepYZ0XgXpDwBse/CtpWQZUOvWwmtdyJm3QhhOUh7CK/NTVepk5gn2jDNzMT7\nuwRsr0UgQjmwdQW5tZXwxBfQuRcefxiGZkHCGORLDxH1iQe1UAUJskCiJ9yOGnUYEX85pqXPQ2MQ\nGaFBmBH8FiiLhMIHoaUCBuVB2y+gVkGPsYC7HY4eAXsGTH0OrHHIqM0cOikY3aYT+Z8NMIDmgIEv\nw+klsHsMDP0AEi75obvaD8P3FKImhJgH1Ekpj4q/wYXznYzwt9Z9+n+zvwGY8+36Dv5NkkJ8q1dj\nOicLoZwGyzyYnAz+bthwLzAWtnwGN9wOBzbCNWfDbU/C6J/CsvGkjMljqEuDuU/1+5/r90JsFC4t\nQKPeyWQ5HsJUcGbDq3dDlx/ufA73zufwJRhJDk+C+q3oIoSSHQa1MWC7C0wSUbCWfTsHEj/cTbt5\nNpmd67HEZ2DyuaCuGu2XV6PnDwaLCf9ZF6G8uxhR7EY4wqDKB70HCEak01jyNqZT4Yi2VgiPgeVb\nYdlNmEMlNKZq+LqqcfUYcNT78cbVEfxKRZ5WMAwYRFhBEyIjgo513VijT2PJ+RwlaTh8fT1qWIAO\nXwRRzlZwRuOxraY2diiZWw8QMWk8SunXEAxi3L8YWuIwu+vJ9NcSf+g4cb2bCRXG03zlSAx6B0mP\n21CPCMQKgUjQ+mtEy0aSGs+idUYtCY8shcVXwQv3wcNLkZdvw7NvKG5nC005l+MMVZAfvoK8nu18\nMHMW83/7Gur5Ao48BVmXEIiIQyvqRnHmIHqiMWaXUDdAI948C9OeALrJjxxairrtVeSQLgK7KymZ\nP4eEyFSi/Bpe61a0vW5i9tox3pFFYEMO2upTeIccxXKvD6aFaPtJBjGVd4IWgnCd4DkKoWIz/m4N\nTTVhDNZAjAPRFYN07+xvfOlxEJ8KZ02HDev7o3ccYTBxEJhz4IVfwxfhcO4gvHnVqIdrobYS0GHq\nZWCLB9cuZOwZDD66ElPLX3EvpFwL5iRo+wqco8Ca+X13rx+e7xB69lfmyn4FzPzjw//Suf41Klj8\nL8H7wQeEvX0+OO5HEN6vQ2exwPZuaHsHHB5Y+irc9T5s+gk8chtsr4Wdxcx1F6FmXwZFn4O+E0pf\ngFgTWyL2MqUiESpehbNvhvo20NrgmteRr/wM3+AgptMqzH4Lr3suSucGjGoyuPvgyGP9mmHxkxjM\nahoMN9Lad5CsNj/rezNZoLph9l3gfwP1yGpkWDrmnheRHjfEaohGL+gBZDhoUZ0MOXEaDleC1w4D\nxqF7LXh3dRA8WIXJ3o3/hAdDT4DgtFjUUQOxjvgGETYCEX8nrLwZ/HXEhAUJJofRcd9VOCfnoU3O\nJHJtF2WP30j4Z3upPraA6PYyktKvQzPuBYuqkMjoAAAgAElEQVQHmjJg5D7Y8gF4/RDpJcM+BFy5\npPV9jrv4FNY5CUSkCUS0CzHMCKYg0lMLHToUezD3nqaq4UXiiw8TOnEYfdYVSOsGfCUPEuqxE6h7\nhqTcoezVbiXE2zzg7ELf2cens89jep6FiHFvI8s2Q+NS1FP1MHIiLHof0x1TaEpMZ+xl93PbSA+3\n9g7Ets8ChS70DTkY29zEmcrYcVMfOb19pP+mAtGlYbz/E9CXoE1/lNBlF+C7xof/Fj/Gz3VOx0wh\n5uorkPdcgD9bIiIqkV4ftsGViBozpMSAPxFEEFFyEAw2qLoDws3gtSNu/g1SjYBHroGOLyGqFu55\nHs6eD1svRYijqI0ShtwMchms/CUEEyDhS0i4B1FwmP7o0r/At6FqJFz0Q3Stfw7fYWJOSjnjv9sv\nhBgEZABF346Ck4GDQojRf07w80cj/DcgdZ3Anj1ohYUoYQugbDWc/AAGLYImCdEnITu+30+64T34\n5nW4alp/QsTLl8Cw81GtX0DlGth9AqIy4Ky1tJ18k0BYFvEnymHfSyA/h6ntYLYSynGj57eiuw0o\nEXG0P7cEe/V6tDOHwgUb4UIjPDcb3PuhZz5uqomNn0yzPYrdsTmUp6VC+s9h4+v9NWLv24NcNoeg\nqEdJMCD6gsiAHRHjRm73YxppY92sGxnESnBkIys/w/XzufjqijFaegncG4cpLwejUg1ZI5GHiyFW\nAz0XKp/Hb/KgWgPoai9KnZ/wsUbaXQnYa5sIRvlpEUXUpR9GS8rB0i6Rp9/HPyMTQ7QJMWMPND4J\nF3wDFbvgq3CI7kZ6iggcFliGSdTYbgJeA6Z7JVy0CEo3obdVIvLTERdFw6g0knuO41n6FME9bvS6\n05h+9xqOY5dz7BeLyH06EqMsIFt30qSuYUTd/RhOPcqkCeGs0cIYu+5ysnZ8gbHJDZ1OZFE5+tJb\nEGGRjGrby/niKIrtACZPL1T2oLfnIjtN6OdNIm7XdsZsUggc8mHb04gcMwP27oB9G+mdfR3OeZOh\nKBfP5TtQZQKDNy7Hd80u9ICKekE0ijeAGp+LaEihOyYCLZCKvf0IJE4AXykk5fYLsO57HtxAmQnh\nAbIMcKoHSlaB1QKlt8Ko85COKJSUaOitgZGToKEU3r8VLsxGJCcQykoEZe4/u1v98/keQtSklMf5\no1BdIcRp/opP+N/CTfB9ozc10TV7Nlp+PhS9CZ9eAHnzIXsuDB4P8xdBZiFkDIefPgO/+gTaysGn\nwdjpkC5A9ME5KyHKCqXboLaCLSMLmGo6D/RhcCgMeobCDgv6hF/j992NKIxCJilITw/BDY9izMpC\nKVgIxjDwVEDnAaRLR0avwh0dQXTbh1TFjqc1agA57m/fr61rIMaJ/Oo2XLfkIef9HLV6ADKYCjld\nyIk6SqMNMXYJdJ5Er14HBWcQsoYhJ5YTcXOAsImx2MOnoff1IGfeA8Ofg54aSJqGuOAVMNYiR48j\nqCegHvOhltQgvBE4pnvwyCj8hloKDm4mrsRPZFMbWnkLht2VVI5IJdR1AE4+BBEXQusx0IfAzSMh\nshBhqsOggNsUhdYURm+EBd8tMxFxvYhwB6EcK3raZEJTXyJ05BS2Ch9ioYXuLbkE51qxHO9G1C/H\nO2AUpoPPIV64l5ign/g+M8cM9xIQISI3ruTypueJOvYFhxNSCUaa8NyTh+vl8fjPPETP0wZCs708\n2TKD6/wv4naMIVRqpuNAH/LackRlGcGZl5B43E2wQmfpPT9jz00Ben7/ILLLT8fcCgK7XkdBx1B0\nDX0ZFdS3DsBgqMR8i4JakIlsDYcNrxOKrqVify3my5dD1gS4aAk8WwvpoyBsBPqt+wnevATfJUPQ\nx82CvjS4bDHcdSu0fgq6gcDkezG6AlAQCS0HQWh48hbgyfbBZis8dB1ofrDF/HM71b8CP0ztiL86\n+/ejEf4bCFVXo8THYxxbAE0HYcFWyPv2M82owcZXYO4fBYX4yuH8y2DqQjhZBjIG1EEQNwZuWA8j\nxsDGF5lRZsFJGEw5DxluhiPvweC5BPbdh9I2EmXeNoI2FX9TkNhpTjB2I+OakX1XIf0XIC909VdC\nqztEozmX99LP4EXVz2l7G2Nbd9FLFTJpHOx4AtJnYdtXhKkxEeHKRO3tQvYYcTUaQfjA+DLRtg7a\n1Uh6P/kForoGR2YXqjkAooWIk6sJlWmI3Dth3yfQ5sNVcBHeT8YT6PJg2F6BaXUHSlQW/HwN6n0l\nmDsiaGyOIDrORaw6gNKZl2BftQ92awQjwjEYDPh98fDew/DxGWCdhtTSwPAImI7CECeHx15G9+QE\nxIkuwg758Ndsx5tohcJO5HgfvkEfoR84A7X8EL6uZrpyNJKWVGLJ80PXHvSqrWRn70ZG7ybgqMPT\nc4jk1hSCQReVY2pQc8ZBbTxhs4bjnhrG2vOvxuIYjNl+MaEsC0FjETJ6OtZNwzFXhKOuqMFfInAG\nQyhxmShX7cBQXU1baivPT70Kb+YcRpyYTtl7A6h4dgwhLUjfaDOuZSsJ/n41prS7iZpVT8AZQaC9\nGe+efejra1DiBBWbIDNNQfsPZ6UjBiLjYeFzyF3L8Nfchls/B3V3E8pDj8KQcTB7LlhOQgyEwj14\n5J0E0yPAGQs+FfwdNB/qA1cQUtshIRZ5cjvs/rJfceb/Mj+AEZZSZv6lUTD8aIT/JmRvL+Fr16Kk\nDoLZr0LqpD8Ern9yL1zwIGh/JADTuR0iJkLuaLjq2X6l3vY4WD4Prj0fWnJBdOHcvBzqj4OrhT5T\nLY0ZkmD3OogeiJq3EP+eQWijfYgroMvUAi4v1HwG/g6EdygibyMi6zpE73gaG8ZyrZhLNgrRIh9n\nay89J56hs/4DDl8/hZ6qNfjMg9H9D8OJL6CtD5FwFQY1FhkRgmeqSXTbaVhwNuZcH8bYQUgE3acN\nkBRAbOjDcuflIH3I6tchKLA+/lNqND84HSjWZnACljYY3v+pq+RfTaFlG9oWK9YHt9AZqEMvGAIJ\nZrRqE5EfF9E33YyeYkFqcVB6mpB9G1LY4WsNbGbiJpaAoiLOvp6gkk9r+lA8G3dBjQfFJUEGkX4T\nnckWQhYf0a+30VdgR08YSa9xHT3WVsKS2yCnF29GPaH9VkKPvEjOmx20z46gdXobjB1BKDedYeEH\nmWt7g6D1HWhYj1H9DQb/CLSwaYjpl+NJ8aN4XJjazCjjOlG2DIBXnqB33QnCXd1cH/kuo1ybMI0Y\nzojDgxAtnVS4sqjKGIrcuhH7XQswr/wc96lI9C9bEDs1NLMJQ4TEEzxKZIrEcdfvwBbW345CQaT0\n4Rdv4rnCg3HZfqyvhaH9dhl0NsOE8bDrKsi4AalJgoNByD1oaZ8jUi8Dkw3p2oev6jCW1LHgbUf4\n12Ds6IOSN+DakXB01w/al/6l+BepovajEf4bMM6YgZaT818zhk5u7o9BTR/+h32BTujeC84xuGmh\nUluHe971sPBl6A4DcRpiYiFuKITK4OVZsP9KbJFezDku5GQ/7XkdlLS8wFFDNjW9KViKg0TEBRDG\nLkSwEGF7BkQkWKeBowJKzQAUYOQ8ehla0UzUviqSVr1L5LztDI16FSU/Hf24h5DWQ/dDUchqI/q8\nyzFMeBWCEtmjYjHPYWdjPj6DiTrRQcAdwqZZkcU2hB4J2Sk01F5IhcVMyGLCf+9HxF78JYaR94LV\nhBwQRMb80ehKhqC9BO5Yjf7gJwST0/EpFYjcBMSgLqyRPYQv3Yz09yI9x5FdJxH1DchvJkBKGLgU\nWtpyIbsXMe4o1r5S0tqPYPf5kBUdaDtzoEni3+/Aejoe+8p4xGAbXd1W9Ip9iHadsLRuhDGIPziQ\nrkF1WD9rQ1VDODtLSThRQU1KkJasfYS0pWg7fWhV92BoGYjWtBTjlmtQOnaD+QvqDXuwHKjFvGg1\nypd1MCgWsbsVmToA15AMtqU8SCh+BqPyC/vLZg6/g2O2bI5EDqM9S8H61ZWInYsJJprpnmzHeHss\nij+I4g2iO7JorIoiXJOcvvYWejduREod//EFeEIXI9rcWD6xo8QVoh0zwxV3wPlp0HULdKmEKp/C\nd5EVZU8U6qZkVCUPTCOQiX2EHH5SrqmFxDPAMRlG3tYv9WTogSndsPpcaDzy/Xeif0UCf8fyPfKj\nEf4b+G9j/bx98OXTMO++P93fuR2aV0DXPqx1R9E9zWxgEfUxVXDbSrj5Udj12/6C7OeOgTNaYMMW\nRJsV4zLYOPBMDnkG0rN3KKM/ryeuox1jrguyZ0N2GtTsgv1TQT8L2vdCwnho78Smt8DRJdg7N5Lb\n4gF3LwxOheKfIYLtOBrB5g1De1/BUdFJ6EILikxHeXYp8lQ6gTwftUlR7Bk+mBOZMwja/eAxoa3u\nJrjbR9f0Mey0VfHs6WeY1LSDlsjLMCdfTLjIhGE3IKMSQAmCJR52fZvRnjYLRtwN3iaU8eeRoQ/k\nwzELCcxfDZmF6CET5VdOQtiuQm4OI+QJEspVoFDA3C9h8FBayEMaosG3CzkwiKfGT+CAB5QQnsxq\n6BOY07tQTnTi0jwEIlQCC8Jw56ThWS0ofz0GX7qVvl1dRN7YijEjGdUQhbBnkXK4EaPXQq0/HpZo\nKOsF4v3n4enDUBED0o1Wr9N6uolQVB3GtPkoGZORgeWItLvRc7PwHH8SS2M7S4fcRUbBU9D6NXTv\nQGz4hFGnXJz74TZGL96ONvQ2/Fes46OrrmGv8y7Uc+cjbr8SmaFS1VSI86bnCMVbiL06AVfpQwQD\nWxCNp7E8eBzDnhpE3PH+GsrX/wyOPQV15UhLBf7MLQQHqZhOTEFU2rDsLYPmoxDaj55Qh7tW4CmO\ngrhhMGgqFG3HP38GHHVBmwazboGKJ2HfImjZDK3b+lPf/y/wL1JF7Ucj/I/QVgMPjoWZt4HR/Ke/\naU6ImNBfDKWvmgHv3sS0jV6a5C6q+AJfzHDkxOugshT2x0H1FOSEfEIXWrFmKGRd8g0jvtjP4FmX\n4MVBICcD0XMP7K2BkYMhthXMtXD4Rdg8H3pcMKSRGZ0P4T70AIa2UxiqDoEjAtnUjV73Bey4EOIG\no8fvQZolYrdEzY5H7LoRvW0fyuA0EB6mbbmdS/c8R2r5KrKaq3BPcOBJN6MbFZzfbGHCiVmkGbO5\nbOBWEoWv/++VEtl5HdLdAFEC4W+GUb/6w/M441Fw9Q8l0pUz8UqFWyx9/D6xAO/wUaR/3YRy4X0o\nV79AIC8Sb7KGFH54LB1WHyPGVAa2VHhqBEr1SNgmOXWwg86hSWjvBZBdCn19mRiS3dgvSKM8M4fe\nKEFHTi7OCXNJbOug5zUd21uNKD0uzD9Zjhi3AEZcgBawEHeohbhqE/UDEjE0BAn2+JGDgA0e5EcS\nw8kQ/sxuEsoqUEYvQUqJDK5BJF2PNKzEWt9G/b3hWIUXh6qCbwaE1YLnEPHLd5L+WAmet85Fxm/i\nywGVnMl0jH1G0PYSePILQj06nigzdfanOPRUAdWLzXQusuH261SmC8rPN1A2aj+tQ3opnTWXsqz9\nVM+Lw5XmwBeWiJL8FKa4DQh/iIBTgcvehqabQDmOv/wnFP/MjK1wOFiAjtL+JKGqvTDocljaBG0h\naO8FxwwofhO2ToGDP+1Xnfl3x/t3LN8jP4ao/SMUrQOfCyIS/+tvhijIXdLvusi7Bl95E91Pf0L8\nI6/gdUZT3tyBqbSNyCGxhO/djJqdC94y1ElxhEp7SPuZBTVJp7bxXlI3nsJ3ro1QwVD0jhUoVQFI\n16EjBVz7QISgfT+EGsAT4vj4ixkUNgMuOodg51Eqe28k23c1BBuRjQ8g4xWUrAHQEw47fPgXVqFk\nNaJcsZBgUy6eli1kdxlJqA/gcYCqdmPo9KHOyEdU18ILi8iJvZSFVwRgRyt4WpG7J0FjEyIUgdBC\nYJoEhj8UAqdkCxRthCGXopYs4/rdLyMW3sqWjgCLp75I/pA+rvzoNhzrv8EyeiJq3UTYvBVpaUec\nm4der4E1CTFiOLiPIVO9pNkrMC5vIZhnQRgTsKfFoew5hZ56kHTFiaEvk6a0TCo3b8ZWkE+YXkXv\nuRpKSELnSSw+F0SWQNhCoveUcGxRC/FBiZgfi6HRDrZC+Ol1tO3ejvOb5UQO8CEzCxEmJzK4DaGO\nR3QVoThz8Mw6mw8iFrHI/K0f96vfQovEbygi5AnDMspJd0I0h+oFc39zL6r7ETKT5iCz62hXfFia\ndZJGnYfntXWkWAyYirOxhxnBEonTNR4O1cJ5uSCKiTa9hPSXEUh4ChlzCNPmXMSCRRDy41fqULPb\nwPIZJL0E9qGEzlhPZupMzJPmQNF10NoLl7wIDaPh4kUw5SzYtQkuug+++Wl/2OW4X0LsEOg8CNFn\n/CDd6Z/Gv0kpy/+buDrhN3shLPa//mYf+Ce+Y/M5i0k6ZzEEXHDsOXq3fUlNXA6e9l6ijOGw8GPE\nXSlQ3oBqT0Ec80FGL4keM/oVgnBzM6bi5xHBVqTLgwgVQPxFYN4BAx+GkmfBlkhpVDcOu5foEzfg\nM++gRhSRuK0Gwt8lZGtAyTKiVJoRsWbk7Gfpa7oD69sdqIUarakpbEtpY94zdahGL6yVGPLT6Wtq\nx654EK0n+5WL+04yPfddxC+akAUe+DANfUguCmcgKnaC3Q6REipvAq0LIu+GD2+DzLH9D8MSi3L2\n59C0galVDUxRM9kvXPz6jCtJS0nnikNf47RVIScGEDkPQUQI26kdSLcZZl4EL3yEw2NHnnIj00OE\n9gRRp40gqG6D2AD64Wxsd9yE2vErUtVraY94nYAthsB5IZyP66y6bTpzDt5AaDeIXgVx5kgUdycm\nm4WOwSESHL+HJ84HgxuqtxLd+QHijucRxTcgNRVSGtG7X0KJfQLKfoXoi6Lk5sEc9Y7gIYMCNYfQ\nG04RUKYhAwrmuxpgZRfNshb72KdRo+fBZzeiqj446CZqoAe1Uqev+jqMk+OIbKxARBkgfiAok2DE\nXWDfDK23QtwopGzGb16Mtr8MrTgKHIDJCrUfo6gl6AEDpKwAoSClxDpuMnazGXwt0H0APBaC0Q2E\nIsIIuj5DS10Aqdf0/2/OfBkG3whtRRA5BewJ33s3+qfzL6Ks8aMR/keYew8of8aT8+dyxQ02GH4v\njoE3UnD4cYJ979DenIxz1Tto+gx47FnEa1Oh0w2iF0PqdXgOfEF9ZjnOQ0VoDoWgvQ1pSUJLHYco\nKUc4B8HIV5CfnE/a0CIiItfS6yykwfQ5MQ8fw79wIdYDn6BsbkVUDYFTRcgxHjytF6K2x6LWS/QW\nL/r4JZz3UQnqCQFGHdIV1Op8xOad+LLCMSeqCH871KqwuwJSBVJIOOpBceiI0Yth2/kQ0wK2ldCQ\nDhlJ0DURBkyBabf1P4PsS0AxwDdnQZ+K+G0ioyttjBZxHM9SeGzOFfhjjKTXVXHntnUIDDgCLXg9\n7bj23of9wFFEYgoUhBChCHxhHYQqo2FsD6QMRMu6Al59Fy62ox67D0u2AfOcCQTXbsC4q56LetYT\nTLYgonvorAT/71+l/YWfIGIvImB7j/Yd7xA+cByqVgkNB/HH5KLVbsFbaMHizqbvzYUo3R6svedB\nQjd6dzJ1W0o4o7AVEWZDX7IA14og2nwzlrMceAfcgTr6LOyubDLCE2BAHv6fvoS55dcUOXLIEUWo\nR8GuRaKJTjBJ2FeM7O6EEYv6c11zpsCuXsh9HoGKVncX3qevgEiJyb4L3+GFmPKO4HVFo2yBUPfj\nCIsVvbGB0NEijBdfimHeeSiF78DRc1F3b0eOdaE6z/6v7TNxbP/yf4Xv2df7t/KjT/gf4c8Z4L8F\nUwTCq2AY/gAOaxjK/XciD6yCk7+Hme9Aajy4HFAWiaW3BZNLB7cbhq1ESx6OwbMN9s+gPaEGueMt\neHcO0tvMiY7zEWG5OOJ+gV8vwBQI4bKtxp/mR0QnwsnTSEc8HO/DvLYea0UtwW6omTmb2FUWVHUA\n+HPgpmfADsHNOzAIG95BGWDzgZYICTZkmELnDTb0kQqheUOQyRfB1xfAyAh0YzSyyIBeruKNeBu3\n+XlCAw8jo7+NmGhaBvtugKNb4NMiKI6AO96Ht3cy6K6veOqRJ8isOc26vHO579qHCS6cT2nOHPxO\nN/qx/RBlgjsfxj9oAkFLDOYBFlz7ViGFB5y5UL8NTp2EL1xQ5sZmTkA+/hF9axrxXWpAWDS0FAXh\nNxNxo4GIceCMvQxhcuILX0B9gU5Xxz5CnhK2TpvNunNH4/WvxHLCRcj1Bob4TE7P9NCU14Q8EcDf\n3Mpa10gW3T4e5sTgW1mCluLEdKFGUJzEe+oi9p45gqiW3fR1n0d972ROi1fpa06nsD4C5VQBemUY\nanwXpDvBAIQpEBaCQ8ugblf/S90ZDqePIYQVLeMM7K+9jP3jzzFMnYnt9bfRtBqsoydjHlyAYcZ0\nDMkGDOZ6DFG9EAwiu7shbgokT0IoFkxiMUJEfPd+8L+df5EQtR9Hwj8koQAce6df7bg1CWNxDFK1\nI4f2oj/0GOpcAb5MoAa6TkHudYTv+C1GNYRofAOsVuTGbGR0E/5RKvqnd6D4dPRR4+jszgajk2ZW\nkbDFgOWCF0kI3E2rMRI5yUXMyhj8hUaMIh1D7jw4/hHagFLSq6LAkQLfHIdfvwSjJiKfehAlvBur\nMFI1yUHEJiAYgk4X6hydiB0qIWsMetxQXNFLsXk6CCWdgeFkOKGojwimn8b/5gg2+2cyIPceChOf\nh/oaqIyAijVQZ4DpC+Dux8Fkhr5aePIqUCK5Y+NLLAx9iXTnE6rpZOxn5XSGRWDXh8C0FHBmY/y6\nnGCCGSXNQ6ShFW8P6OVFKLZ20M3Q3Ie0CFwjrLg36Hh36RguSUCUBiHOj6x3IrYm0nVpCKfra1Ja\nvgHZB14bDG0FXTL5q2cI2i2EorKQcQNRT6xA7XuLAhlO7xgLNdNT0I620Tf+bOLje5G7PsIUUYsS\nUKBrPUT24ApLY0PcFArXFCESjmKe+xlJ7X46Vl+NEtMNMQGU3GiEPwn0KuhyIBOvhfLHYd5N/T7a\nmvWQMQS+eQeyvvXRFs6A04chPgthNEJYEmqjE06sgs7DsOFe1PQRGF5dB9Y/KtQz7WloOYZRzPuh\nW/6/Jj/6hP+PISWsmg/WGDjrjf4RzuxzER3tiDWjkM5h8P6HMK0bci+C1J0gH8bqPQ/f9qVYXq+F\n41sR58ehVvhI/PggujUaXYkgMDYSz4c2vLKRLrGPuN3NcMtmtNOFJBw8gLdVo+kKF6ZeHz4lQGRb\nC/KSFfD5SAQJsOkkyA4I3wINtcj4DISrFNXSQ8Y7u5ADFESYD65bDO05iGOvoaWNR3t6FaZCDSkC\nHK7x0T09SEJ3Pi77WFxxacwtvR/Z9AXBDSmoY+chJp0ANQvcjXDTHf0G2LsdtiyABhekZIO3FnNf\nL31WN6bSYgwdXZi+zES54yX49VwYdg7CHo0hPA+kQAQboFbi8Z/GFpOIfvEVeJUn6BmdTEP8FHoz\nzyHD/Q7CFgPnScT2w0iHGS47SkP2KIZ2PwEeDbrTwDoZGidBzxGwnkCrqUNrrERWtuItzETra0WW\ngWPOvWjlT9Kd7uaJ6skQGwWzmhC2HnBOhJ4DBN1JNNSMJVio4desRFt6YfskAmFmxIU2uK0bMlPR\n7nSCMIFhAERGQsE9cOgJZFUGYuadcOQe2FkC3lTw9IDl2wnApgpIyO5fH/Vz2LcfMiWYzfDzryF1\nKGjGP22D0bkQkUG/xsKP/Kv4hH90R/xQVG/q/7xMO/NP/cYdbWCxIxKMcNc42OWF5YfA/iacuhXn\nI+/jMaeAvwcumgo9OjJrJqGSQvTaIN6aE1C7hjn+u6k6Mp2MR9ciQsehLxOe3YYeo8PgHhJq7YTy\nNRrPlnSo6+HUGujrQd+0B3nkNLJgLNgSwHU94szjKCUeRJYfb7oNuTsEyQsh+Tcw+GIwxqDXHKLV\nnEjAWk1j7ACO5y1nSNi7FBh+SWHIx/Dc47iyk1DzCyDagb7uZXh7HbKxAplph+6XoOsIFF0Jq8JB\nyYHgYWgNYA7k4xs+ABKsNI8biJaU2P8Si5UQXAV5TvTaUoK5iUjpIHjKTvWMEVRMG0jdhI/pVmMI\nGJ8nn8VMiv4VqmMcYtRvIOSCuRZEmpvuKBuN9dEosaWwN6ZfGdt5DnS6YMIvYdqzMP7XcOkKRIHE\n2NAMg8YiLHGIlhyCVRHEPNmOtzqSep8Fuhohx4Xs2sTBgddgLDExrLeJmZ9uwtbkRmxVEV8lovRe\nSMCuErxbQYuvxe3tRnZGgpIM2fchO5uQ1iD/r73zjo+i2h74985sz6Zteu+BQGiBACJdERBBBQso\notixPAtPxV6eT7EriiiWJ2IBCyCINEG69FADBAIESO91k23398fGp+8nIIoQ0Pl+PvPJlDMz58ze\nPbl759xz3Jsn0JSViidiB7LXA6Aehu+fgfrmRFyF+8BshS8ehB8XQ+YlcNkrcP4YSOz6awf8E+px\n9v8dafody2lE6wmfKepL4NbdYAn+3/1lxd4eodBB/j7oXAGiF9x7PzzxJDJ5EP7fleDBgOtLSZmh\nPWafzfiLcuSwVsimjqh6J4d61hBozsNY6QPFITBtF/Kpr2mqfgR3Ox3GSRVE2ATBO3vT4PwO96aP\nUKMz4LPNuPFFPZQHzy4AmweRaYLqOoRTh2V9Dc50I8b188A4FPSV0DWDFatUEsNy8dOnYItxMnbR\nrQibCQxlWEpysAQl4SESJf16FPMPENcXz75cxKY5yIhqPO4ZKFumIKbrwLcDjBkLedNg3Wp01Ym4\n6jaAtZiGgFjkoc1wcD4ithC5ZAF1NTEc6qGDBH+idwQiu+pI9M2i3qc7Ad8quEZsYJ7v1/SmPWbV\nz5tzOCwTCquhtBpRF8XUyLlc8/h13srOF34La4bDxh1guAjeuAKG3A0+W6Drw+D/OWrBONi+DKJb\n4VnyFqq5AF1SbxJzDlJZ0Y7tXVqRvJuBM0IAACAASURBVHk/hT3vpNPjr0GCgq76AHGFkdSHWbBs\nMMDbq1DXPoD55RIYpODpq0f5qhBn3x8x6Oph8/eIo53AYUS/Pwx51UykchcO/yXIq6MwTnkfjn6O\nq+8odKvmIipzYeB9EJ3ubUsdzpI3TecKZ8lwhNYTPlO0HfVrBywlFOd7nbC1NTic0PpCuPZWuHoY\nXDsaV61k/eiONGy3IlwmIuz7CLwlHREfgLolB5+BS1HVtZQERRD2eSq4OsL09TDyXpj7HKYVkVh3\nj0TIelD8EYXx6GYHolu+HzF3C6K7GTW9BtRdyJidMHoQhEXBEJA5CtIgOdAjms3398O+Yx1y2xbY\nO41+BZ8RI9YiXNkoF7+KGPUirFkNm0tAdoGNOShtH4N2N0HGdLDYUPzXIy4dg0gYjCisgg+awJiJ\ne1g/nI2v09CjDneQDbfMI3jeAaTLRUL1jzj6m5DbHsYZHIYzpifmwjpSsty0ejsP1VOKo6kYOV+g\nbN+FKgox2rcR4g7mC16njirvs7bYIGogCHCXFVNevJrojhHQ4xXw6CDwRoi8Gg7MgYxhsOlbiB0O\nu94Dcz8oSQdhgsrtFHQtx7iqHGkKQ0T2xuY+TJtZe9nXqx2lUT/gTvKATyO0upSovRbKA0IhwIqs\n30pTXAC61gb0DRJDqQtTuhP9x+VQZ4IeX8DgLsiEaGSPfoh/X4siYjAapmL0mYWM6oesqUJd/Aru\n8Eo8Nz78swMGUNUz1pz/Epwl05a1nnBLIgS88wwMl9CuHQR+RXXv69AbfbHs+AA+XYNjfHt8knxx\nX5WOPqce2pZB9hJEsD9yhx+uvAoaU4wk7M1HrK0AcyXU7IJO3RGHo6HKCh+8hYwrx13SQGnlTELC\nDuK+UKCarYiCBlilIhuBA4W4XgxDvekehO4OXFZJabdQEnYcxhGgYhpuQkyshFYGZO9SZJhAv0YP\nuQ+DLR2e7gAbvwWxBRIkbFkMwSHgJ0CWgV8osmgdOPej+EdDkxGZtQKRvwtxjQEZHYeoLECGB1Gb\naMK83E7xhcE0drPgLI4mKNuNx7SNises+DYYKcv0QTlsQt1Xi1otsB2tQO6QiKIH6ZLqwfe8QWSF\nLee/NSESzgN3IQvioxmwdJF3DFY2wrSHYOQz8OXHYA4BfSFM+ArmPIUneB+ONt1oMvyANXQ06oqp\n+MXtQc13I+QKcFmhKg99KKQuy+ZQ53D2j4mj1fw8FGUJumg/ynWxMCgBgtJR7VuQoyVyuwnhagLp\nh7g1CPILoOgLpG0B7sRCdKU7vcnaubS5qQjENbORjlL48UvUT56AQ5Xe9OEaf4yz5IeD5oRbmtax\nEOUPts4QnAF5X+JqHQ2BiTjKt1B8U0dCfqzAR9TBtRfAf7ZDUw1UVoPqT81OG442gYSU5MA4O3xk\nomzpUAJ9zagNVjxXfksDGZhbK+iMdsIPZCNKDdSFSMx7IlE3VsHRIsSICXDZvSiPD8Hz0j0wVtA0\nx4KI7MLRCAPxi1Yh/AJhQDLyoAvP+jpE5w6IgEb4ajvo86GuEiw6EHqocQBvwbuTQFEhLg2P8FCz\noxjfYSbUrY1QWom45VbE1g0o/9mEbmu1N+dFYyPC10xlr0gMG2qxBVyJXLEYGdkHc+Uswlfuwh1m\nwDfVij3OgMnRlsC8IrBbqB8hMB7shM/+AjIWz2DzMxYqKSEKwDeYwt0VLL9vBM9PPAS33odj/ceo\nxbsQhQU4YhppTHbj8M/Crh+C5wYD+qJqzNk3YAy/DhHwIOTsQd1TgQjUQUYryF/lHe5oAoNZkral\nEOdWF670aPSZJYi9pTQp7akdOg5fow2dtQOOlT7IZCsex1GUUgXRZwZkj0S+/wOiTR7CoEPUdYaO\nhfDDO+BZDfE3QtoQhF8oRGWCLRbiu7Rs2z3X0YYjNADo2QnSeoMpEtz16AJ64yr6CvrcgOH7z0kw\njIZPi2jIEbgqE2HSCvC9CNlnGO7O9ZjblxH6YCWmTfWwwBcmWLDKcLZ260pxcjd2b78Fy8oSlG06\n+ERFRIbDwHEYVoLTXYB8chEYDMhlM6n9+A42P9ARp58JxSjxOVpNWN1Bwj2RVF56E+QnQfx9iFAf\nlBg/lMojkNgFej8BDiv4dYewftDzYej2AsjhoO8II2bDYR2F/6nBfIEbxRkB0dfCv2+HLo1wuQHS\nYmGDEep8YM1BjBVuDEoFh8N6YVkwDUvhJsg4gjO0EWegEbWmCdO2toTvfQT5g4GmnQGIQd9jbnJR\nnboExk2HKflE5/ehouIQsyamc2TONXzarSf5wkBN1zwOWv/Bgctmc+QGDwXyQSqHWpFRcZgVJ7Z1\nh6C0kpDwLIJ2G7CuW4nyyRjI34Nl22Hy0gazpi6CReEXUBIfjUsN53BKZwgdhb5TDKq9HM+aBrC7\nCD5SjGPDSPgkCRbcypHCziiW11Hs/ZB+NXhKJyOjb4DrypBGEKYLYGcerAuC4XmQeQdUTIUFPeC9\n7rB6CqRmwtcToLG2pVvwuctpihMWQjwlhDgqhMhqXgadSF7rCbc03dO8FW49DsCDzppJQ+VK8KmB\ninzUkrVEXt0TR5ursC95DsfS5aiPd0CfOw89HggQKNtLOdw7gzjXFpwbLkLtvpvE7bnsi0wmY9MG\nlCMS+qdAgck7VjznFUSbSBxda1Cy3qUpPZ5KXzcxc2bTuSYaRdTS5OeLXjoRH+/GJ3g3Pm2AnrfA\n0m8gNBphTgZHNrjqYdcKiGwHphjoOApSe3lti1oD05+DaWNx9hyBX+gUPDV9EY714HgDzJdAn2nI\n4g14MmZCtRWen4yorqXGN5G6dD2R7jVUDOuJdeZqfBauo8E+GuLj0O99GH3IGA5GLsXTdID6uiRi\nq8tRuZYgvw8on5zM4b0XULn7EDZdHfLuEOSRiUQuX82w6UsJuPlZjBvfwPNtOW6CsPYoxV31BlXh\nNmp2WKnKjsK3QzlLV95P920+BBTuxaXbSUlwCOVqLHdGTmB/bQDPy7e4sKOZ9fpGIvIqEVsXwthn\nUFc/hJRNEOAm1nYYi18dWB0s+y6B9OjtsHQSYsh4KK2BXbPxtG9EOoMREtSHFsGA3vDg1+ABKAXX\nOghrD217QdUuKHHCgQ0weZ03H0R0u5Zrw+cqp2+sVwKvSilfPRlhzQm3NIde9EYHBPaH4u/RBbTC\nldIdfrgLQndC1TqaMtM58NYDOGJriY/bR/3du5Dh/QgaloehIAGRHkyFIxr/TnpqqvZSkPk2mbum\n0MGzjJ2J6bSL34sqk+Daft5wpts/Qu8TQENlL0pr5xIU3ESMIwDhBnHYCR3CUJU6XGMHok8dgnz3\nccR6O8T4QicBhxOhoRipRNPQ1EBDUjIysiuBk+9CH9weknp4XxIlJEFEA+REoca+g09sZ5Sj+dDu\nESjMBtUGel+EwR+lJAlnyizkm6A8rCNkph1HmIp60ECQ0ov63O9RowQm35dRdBm4wvzJa3qL6BWh\nqFfMZv+6hzj4/vuUlujxtwVx0BZLp4F5+F1nxvlRLVHl8eQXrGbUypmI/vdB8Uysm1bBPjPu+Aoq\nQ4LR622Ezveg7K8isqoKxwsuQuM/48nQieyXCcw6fDlNpb6kpeUyL2gEap4dvxR/NkW0Z007X+6Z\nMBPu+Apa9YY2VyPeCoDgMAJ2l1GRFoi9ZgBj1iaxcctk7DID84ECxBoXBNcivk/G/UgxSlQEnh4j\nUA4HQN4z3vcG4ZdBx48h6mpQDN5Ky0dngPge/Gsg0LelW/G5yekNPfvtWvfNaMMRLY1vBwgfCYYA\nSP0nijkZt1oPGe9AqQu50YA7t5LwZ3WEXnUBdaYxBHSw4KlYzv6bnRR9k0P2QThSW8uW2AysIox2\nogeqVY9xRTvaBDeRMzYGz/b93oKQ+oPwfi+YfRP64KsJvXw2ptvzEL0eA38jxDiQEXakQ8XuIxDd\nbkH5sAjxzj6w50PXCXDPm2ANR5QfwrJzCXLDGgp3vU25bzD2b17Ho0oo3g1f3gxjP4L7rgGnGzEx\nF1yl4EmCzpPgxbnwWU9AIOqq0evmo1/bF3FnJ0wX1BI9tYBgRw6eQw+h3hiM3RyMiBxCYVwNbp2T\npB8MGNcuhtfbY/Nfhi1lD52n3Ebs5FIaAgawwv8C9PEF6FQImPMtberbcDQtEWeTFeQQMCaDR0EM\nrSMw34n/W/1QttjhaA2ixkGBJY7tSVfwr54VfLPySojxJxA3+qEZBFbuwS9dhzSWctRQweAd+zGM\negN+eB02z4Kr2oNHgqkezP6Uh6Xy/JYO6I0KuUeHYggZB5tKYe9RCH8aMfoF1P8kIArAkzAZT9da\naP82dPoYIoZDzHVeBwzeklbRo2BIBWR+Du66lmzB5y6nd9ry3UKIbUKID4QQAScS1HrCLU3oZRDc\nnEwl5R+I+oPAVrC2RjZJqHXgiq/CN2c8gVc+DX0AtwvLjFFED4bS7RW4Pl2Gf+/zSN8JjsOBKNN7\nUbWwCJerNxbhJs6+iz2X9SK1yyx0b1wJm10Ql46hoTNNvgvRG7pAtzFgexnizWA7TK3ipLiViv/X\nUyC9BxhLIDYKAhNACGT38yBnCughZNV+rLprMC/+jMOvnYdz81UkZzXCNZ+CJRB8huGpeBwlqhJR\nbYL570PhbGjdCSwOyJoKK6YjFqyHjB6ohr54MrdjCPgnsg48JQ00Ph4Hb19B/bcPEVBSicl2GXTo\nj+OzTegHtSI0fBeizA0BvTArgovuG0F+wXU4CsOJ6B+Ari4PsX8jPsFdcGxegN4WDVtKqO8YherK\nw+SohIsiYWMouP3Q7c8mJbOUlCMrwMcDYS7UqgpsSQ7vbDVjN2h9Hdn2t4gqOUJa269h6TuwYx7U\nF0HYIdClwd5Y5I4tJMT/SGNWELOe3YHvzijUSTfDJQZ46XEoyUE07UQdMBq+yUV+V4O8LQUZZjh+\nd0oIMAR6F40/xikMRwghlgDhxzj0KDAFeKZ5+1/AK8BNx7uW5oRbmrArf55Bp7OCf/PYnr0a1+Bb\nEFvn4ZsdjBgx+udzVB0MfhHxn4sJGXoNvq1WkJ0l8NdXoruvmzcB/Evr8Vj88PzQD2WTwLfCxcam\nwSR+vRe/81SU3Jm4ZjXS0HEporYL5oEDEe16QuG3iECoiLuGkKYkqM2C0f+gKURiHN8LqneC3Y1Y\n/znSlggVJXgGBWDe/Q3yX7cQlfEQypvt4boVXgcM3h6ntS38oxMs/gAaXDDgfOg/GIqnw4JSyHXj\nuTUT1/nfIBoXoxxJQH8jND2oQ+lsx5O2Bf+XlqAEJyLa94WDy8B/BoYL46GwEwdXxhKXEgLOBipc\nU6g9+jbSR4fdUM+B3kFEfeNi/3CJtbaMCNd+5LqDKP6CfRdbqe6QQfShMuKLFqLWF8MWN7RLgjqg\ntBrstRDRCfJ3wzBAxEBWLnUBX5Kd3pr+P2Sh7LoCIjpDxnnISgdc/iiyi4q07IWDZpzrVRz6UDp+\nbsOetx3a1MAaBY64QcmEO14DgwEyQBzNQ7z9PKjj4c6HITzqzLXHvxOnEKImpRxwMnJCiPeBeSeS\n0ZxwS3PM1JcC/MPQd3gcrOGw5gkI8wG3C/Zt9tYwy14Ne8sQlf/GnHkNiSOXo1vcALvXwqCVEBGH\nUrkZxdIEqenE+AXhsy+H/dPTCC+LIGbjd+gaZ9FQ1ETda6OQM1pj6T8MYc4A2xJipm7FsPMrcDug\nUyq69jneDGU2Kyy/A8Z+gHihO4T3Qdk4HzIvR/bPpER5D31sNL4Vn2DyNEK0NzWiap6EzL0FHNL7\nAm/NS+D8Esq346yKRLcfePMNRFgUusI6RG4+rvAI8hJU4g6WELAjH8UioNUBCKyBPXrYFwd37IY1\nC+HoZhoNbuy5j1LjOxtLrR/xN2dTMTgWS4PgqI+NJMeDBD3XB+kQuFZI1HaQsuUIRtN16Mrnwvmr\n4N+BMHQc+JdA27ZQ9CaUz8MdbEMpbUTUdIN3tyMvHs3yvkYCyhUCkwJB1uFpE4wMd0JdOcJfh1Av\nRKiPILJGsevd9VxVuJnacZdSNOx7Yl17McY/g1g8D6a/BF++D8/e43X+4ZfAc+/A/j3w4iMQHAbj\nHoLAoDPaNP/ynKYQNSFEhJSysHnzcmDHieQ1J3yWIfGA241HbUQx2cBwIQTuhfcvg4ZkSOkMHfp7\nJxlUH4EbXoHlz+E+qoBxK6TNh4i45ovlQmge9PsODEn4fXEParKNfan7iErZgLr4Y/wM05GvxWJq\nvwjmfwzVa0E0YOx8FHn9JOSkCcguCg0rYvD1S4T/DENKkOX3o+iAwu2I6ydDx3ZU6spQlFCsShbV\nJR9i/OEg4urJYAuGch1izx5v5RGPCaIvwbVxNnXXtqa6TkdMv7ko095DmSKw33oT6/oZSSy5lqj8\nCgx6B6K1gqyWuIuciAJQndUga2HlBDj/Kcx51RQs/BL9gErMRzyENdyFiJ2AM8jE9AsGM3jZVoJm\nvoK0qbi/dSNsIEIUjPqeiNenU3enB0/VbXCjG9pvxLBiFer6AGSUnsZMI87wJlzxvhizi7D2U9jT\nai3RWwNJd6YjRSlyQCpC7Y2i64Ww/KKyyOK58MoiuljrcP3rBurnLsaRd5TD+QJj6qeEv/oqxpdm\ng+KEynmQez3owyBpOiT3glenwY4t8PidkNIGYhLgsmtPLZ2qhpfTFyf8ghCiI94oiYPAbScS1pzw\n2YTTgXvhRGov+I6KddsI3hAJKV2gy30QlwYGs1euvAjmT4c0CUn9wNxI8JQhkBQHzvVw35tQXACD\nekG/O8CUCoDusol0LimlbOOzVDU8SVDGfRjSnkCWLINl10ClC3x8IdSBx/EsTH8I0bUSd/gtVAd7\n8H3pJVixEDntcdg+A1eiHvlcNnr/ZKRjD5Y9l2PKfxVl5o/oDtdC4SxwdIDb7kesexUpXOCEprE9\nqV//KPY+bQj7cQcBxisheBOlk6ewqXop3b64i+6rDJgMpbgcAqEDUSWRIRfT1K4Xlda9BD/3JUaL\niju2PzpTAM59+3AGVuJTUkHoIg9Vcx7HJOsRtZW06VdCdNZS3AYT+KeitjsIEQqiwo1ysAhRWI1l\noRWZ5EHs80M06JB5AbCwAeFjR3+5B6ddxdNRwVjViGjjIjE/F3N+MuLp1+DFu6DjOCoiJIUsQ0FP\nGGnYtpfDxEegVRhY7Oi2r8X/9Q/5btlahlgsCKMRV00NBkVBKGYIvBw69gSPHaTDO61dCGiXAW/N\ngJkfwn1jYPX38NKH2jTlU+U0hahJKcf8HnnNCZ8teDywdDq6A/n4tAnC1PMJ6N//13IuF1zfCXoO\ngPbh3i9p01zkbhA9rgf+DRM+gKkr4VAZTG6EjDe8Pa3DO8FsJXjYQxDldcwCEKFD4KKL4P10pCrx\nbE2AHVkog3og9m1FZr2J3u8mpJSIVm1QnEfxtAqgqbaJ8ocGE2bohmgsxaSrQun0HqTo8Ay8wJsL\nt+cHyKPboWolniiBcqgUd96/8E2+jsB1k6GpBk/O+8x97G0MShbdAwZhS/sncsNBPHkmjlzUjsQN\nB8BejfAo+KSMx0fRIZ378Fi2UhT6A40Vc3BZ87D23k/oXiNKn84ExH9P+cFgzBsa6PTP73CWG9Fl\nOhDOYkS6L6j1EJyBoo+HoN2InbXgsxaqy+HeLxC7voWe5TDzZZh+FENvI0wPhs/ywOPBkvctLHsA\nl+qh6OZLqVx5F4H5DaTNWo0jOQXjA59AdCI88BCsuAs8esgIgZgUpH4jflde+evPVtGD4Rh1C3/i\nqrFwXj/YlQW7t0N6pz+j5f19OUtqmWpO+GxBUWDQTTDoJgJZjpnOx5bbuxmsAXDdk6BrLgMbN5Gi\n0LVEDH4KKiKhbjE89om3J7XtB3jsUrC74eKbYdj9EJXgPSY93inFjYeQ2a9CbTGeQwr0aoC+s5EJ\n9yLiHqBgWBdsA6cics+Dh8ZDqh3h8qcubQQNrMSzdxVHJl5OgvUplIO3gD0Go1AovTENffCT2NmE\nv34xJpuEch8sIoRG7OgcNcgwqI+LYJB1FKbKSph1BTKoAUdmH3TbNlCWn04ikcAOCLTgHQMBERyL\n4l9OxEsbydvhg2+mm7JHGrEO06Er2oe7qg37bGYyijajs4HSS+CKvhTlwBJEiECJag2tLoatc+FI\nDbJQQJEb0e4KMPtDYwRMHQeDoqDVbbB/KUQkI11OqtyHqKrZjawTWB9IxaS3kbgtD11yP5yDb8J0\n35vepEy71sNHz0KXCAiMAOsp9lyFgNgE76Jx6pwl05Y1J3wWYqUP4njBSY0N8O5q8P/FSxo1gA0Z\nN3GpEBB0G1h+USdMb4APdkBIDBzIhtdugENb4DwFOl8Ejlykw4hcuRkpE1ES+iMufhvZtA+38hlu\nz1P43uCLfbsH61f3o1xcA8mDEUUQevUr+OFgQfXTpFjXI5tGwMZaqMqBPbuwJHekSDyKvsyDU2/C\nlOvEE6ei5G/BuPBHZJiAIIGl1dWo30+BQ58hI214UnxQfK9A5Qi5tX3oalwMJSbwrYfDe2HXOnA5\nqfcx4dicS5Q+BI+zisChdTh0cVRaKon87ADdPBJhAWGQkHk9+j5OeDsBWt2N450X0I/NQfQKgsuK\nYOKtyEML8MRei3rn9RDWCK8MgfKrcc14l6agJmpMeaiPd0TnE0xw69747KpFKSugoWc0B18cR+uH\nXqLxgAndyEdR4+MhNAY+2QZLxkHcpVD42elsNhq/Fy2pu8bxOK4DBujc738dcDP1PiE/b5g7eHtN\nigLpvSA8wRvWlpQOsU64Vge2OtiyC1ncA88CgYgLRskIQ7AV6o4ijCno9E+i08/EnBRDwJMJ2C+s\nwpneF5m3DVm5FyHBjJFEfws71Gupr3wQV7dHod4El1yBsf88jImtCNqhYs78DEXtA61DELVGCO0L\n4b5Ikx6x+VXcOx6mIbsQyTqUslr0Ow5DmJP+2c9DRS6ojVBQAbp6aDgMezZSaSzC6N+AUlqN7vNi\n3AMU5N37sO6qQgaCM91MwyALHoMbuf0jPE/Opzy3AbtUKT//arZN+IKjL6m4dWaEUBA+sYjPX8bV\nNgMeeRPcj8CXn+C++WFUey02vzpCO1yB7R+z8e02BsUSBAFpWDbkEPPaOygD78J0cR9YfD3SUQch\nkVC2HQxWSB0EupOeRKVxJnD/juU0ovWE/04smgrpg6Db+6D6Qkk1fPVvVHUnhJohYwLU7YW6fLBG\nAyDsxVhCB+C0jcW9qgeN/fPQxzvRTa1AvftCXI+9hSncSbw9lf37Esi050OjGdL3oToDUL8somnz\nYcrXvkCoZStKajWlC5PAoyOgtgZFZ0JnMUB0FO7L2iJtFpQSAzgroW0Qlv350OsB2PctHDoIy/uB\nqEHqg3HHhmAsCUFnDcQ1Px/3RJWiV6IwPdyI4cdMsnyGs21LIUm1O5mzYhi1+Rbax+3hsoa5RIjN\npA2w4do6n5JxKQT61eAZYETfNRwPM3H8MA/FXQBPD0YqX6DGC0T1UVzlL6MUbEPx7wh1Du8L0OS2\n5I6op01ADMZpuTDuEVg6Crq/BNmfeuvqXfAGCBU8Z0n+RA1tOELjDFNVApsWwIDr4ZNJUJkP+hJE\nlD9cuwTyXobvX4FaIKMBipqgY2+oyAJbR/SfTEJp7EpFWQP6uGRcD4EyZw/V/x5IVFw3WiflsTw5\niaZPv8AYKMCYjDPnG6y5TmqEFVdPOw6bCVd7SeDd7TCsyUEkpeIOr0GEjsdtnIopdhxqoxuSz/Pm\nnOgZTO2LXfCtWwm+ZVBdD5e0hw1uZEMh1Rkqtqp6DHUCh4+VOf0vxblQ5cd5Y7nmkRdorN1L264T\n6dB3J4E7PqT7zmWQIJFRNprOr8W+5XwCauIxZjThiGhL1a4cmholUQh0URfiWbMRfb87UdYsRG6p\nw/XGY6i2O1BEGGz6Hha/B0P7wO3zCGyYTcmhRcTo9PDcU/D2fFh9J+hs0O5G71Rjv1SoyWnplqDx\nE5oT1jjt7N8I6+eA0Qzf/weSOsHBryHyKLRLgLTnILB5hl7oDAi4DezR8M2nsOwpuPNViCmCVqMg\ncD+qXY9PVA4yfyemlL04+35Dffp4LAVdkJPepVdyEoUhgijfEkRhEwbLBPQ6O54bVCQRmJIeRS2Y\ni1L2PWJwJiQ8gsN4H86mafiua0BMvh2C02CoAVbdDR1vw9lggQumQf0hmJQGzlAI340QNYQvCMYd\n0B/3unlUDE8hWS/pOHAlY4d+hjP4IhRLGzzcw1eMJuOLnbj7jaAq0o47YTX6redh3byNpnbBGIdM\nRvf2U1hc8TTdcgsNL71J0bvLUXyCCLj4BkLefw9FBmOwPQWORvhgPOiN0L03BHqHGMIsfdnVppKY\nGzvBvUNAWOCCT2HdBGg8CPX5YOvg/aemcXZwlowJa074r4jbBd++DvNe9cYWXzYBzrsaOhrgyNcQ\ncRF0etEbGfETQoWUd2DnVZAWAFvawpP/gLRIiMqFhsO4wypxGQ9gWh2LeKo79u4xhIe4MZZtoeHD\nUSjvvEzUx25cqSq68DJE2khI/RaR4CBsziz0k7+FajekeiBpDNLSGndlFsajccjYUYiL90BZJ8he\nA7l1cOg9IspzYeV70PFyPJ5A1rSNQVVdpB/ZQ1B2GRWeFaidLcQlbyc0uRhdgC8e8yWY7P9EFHhw\nBiXSKeAJLJk2PEdXUjzkXop1FjodWE3x/VMxNLkInT4RrvknLPgYY/vRGCd2x++r19j4yQaO7tpF\nysiRRN16O+Kt8YiCfTDqQWjXEyZdB0KCx4NZCcROJbTqBJMWQmk+RCfBeS9CwXKYlQmtbwIaAS20\n7KzgXO8JCyFswEwgDjgEXCWlrDqOrApsAo5KKYf+0XtqnCSqDi79p3dZNh2+egGe/g6CIqHDU8c/\nT+ig9cdQlg4vvwE/FoBtCQz5HHI34yl8Dp+PzKgDp4DrOXzzq1D8h4B1AcZPc6i7xRdDZCp1u2wY\nJm3Bx/kj4ioHPoeCkX0iwDcZZKWb0AAADbtJREFUCsMhOA7WNCK/uAiTx4Aa3A4R4YaIveAfAq5G\nnG0tiIZG0AvY8jxseAtF1HB+bSJlmzZjXOHh8NAYHKo/iQ172ejbncM1HWgoj6DH2qUkr+sHHW5A\n79QTVKkQcEUOyqo42jzyGW06doTwCwnwa06cNMQGWXPh4hu8LzSjU1DsNXSbPwtPQBj27duRE4Yi\n3KXIyasRbc/z9ohVPdhLYNP70PVWjPjRSDWmlPb/+1yDOkL78ZAzDYxm/GTIrx69xt+XU4mOmAAs\nkVKmAkubt4/HPUA23ml8GmeSrCUQmQJ+If+NsT0heis4u4LjYxiSDoHNDiMyFf0mE+q2/d68FXnV\nKIe2gdUf/BtRlYOAlaYubgJf+ZbSm4ciMcLKQJQF/vBhIIjLYeB4yBgBt/0b5xOdcTwq4NL7wK8D\nrPCFHwpgkx6lrherLclsDr4CLpsMCcHgV4+S9RkhYf4Y/OzEmuwk9eiIPs+PrvPquOK9+YwxDifZ\ndARGXwJ3TIF7JhERmoL5sRKUdTXw7OewZiaUO72x0gCtenpjpgN8fn4OAaEwvg+K0YglxAf6XUmT\nMx33roPe400NYPb1nle2F4BQ2lDC7l8/U2MAdBgPA76Eik0YpVYNQ+NnTsUJDwOmNa9PAy47lpAQ\nIhq4GHif35HoWONPQErvzLiHv/KOC580Okj9CPbdA6YGkC6vw/F44KqJENcWHvsKOsRD41HIS4VQ\nC+oRiStZIJHEj3kX8WMNTM9DXDwZ1RYHDcXwzsMwrgd8+DSKuy06/Y2IhA4w+Hp4cAbcmQ73voFa\nXkrv3Qc4EtgLYvvD5YugwwVgrwZjLp6hoMYI9Ic3IAJjIDYWwtxQ9DoE+UBjtNd+jxuacsBpRVw6\nGsb3hXa9IKYVvHQLNDVPeBn+DMx73psxDbxJfBpqobEBEd8G9bE3Ma7eipLewXu8vso71NN7AtiS\nAAghlcOspYGKYz/WgFaQMha7sP3+z1LjL8upOOEwKWVx83oxEHYcudeAB2gu1KJxhrn60T+QY0CA\naoWyWqj7xJtu8if63QaxHcAnCO5a7pVtMxJ6zcC48SiyqRE3m36Wt/pC54GI8XMhIRWCFXjiQzjv\nYtS6JHTqL3Kb6BKgNhveHg2X3oFygZlh8eO9SW0OXAdmCY46hN0ftdaCiEmDsl7QfQz4RUJZCcz7\nGA5ZYM10uL87TB0N2+vhw7WwZREk2CAgCX6cDx37wL9GQVUpGC3Qcww81gGqiiA6BZ6eAxVFPz8V\nIVDatPVuzH8DVn0GMd2h7XAAqjhCHmtxcIIk6x2ewI6WA/js4OyoeX/C36e/kbj4v0gppRDiV0MN\nQohLgBIpZZYQou9vKTNixIj/rqelpdGmTZvfOuUPsWbNmtNy3Zbkz7SpS0Mp2z99j+5uP/LtNxFl\nf4t1ixycv28XOa/+k/zIn6v8CmUgotxD9DdfklHkQ2GdDnvpU2RvuvYYVzagi7uaNitmYW6sZEer\nETh0e3HpLShuBz3XT8J2wSGqu0WStWcjmR47lY2+7C3IpNYZQXzpKor8h+NR9USJLGw/5hK7ZyY7\nYodTFRBPysBMInK2sdgwgkzDNGoVK3Gz57Jo2DM0LVxEp8Y6zHsrWREZgzHaj3ZzpqM6mwgam8Hq\nC+9G6hX61NvJnvoEB6L7Nut8GFj3K0viyjyEW5NY/+XX/3ugdwTzNy9C1Pv86pyfWLN2I25h+N2f\ny9nO6fxeZWdns3v3MYZ6Tomz5M2clPIPLcAeILx5PQLYcwyZ54AjeNO5FQL1wMfHuZ48U3z66adn\n7F5nij/NJlejlF90kXLVvVIWrvDu8zildNZJOb6TlDOe/PU5bpeUjwopZ4yUtfJuWSuvkh7ZcOL7\nlByU8u0xUt7fSsrcjVJ+eJ+Ud6ZIuelRKXe39sosu0cWvtn2+NfYukTKD7pImRUk5ZqBUuY8KuWh\nz6VccIuUCx+Wcpi/lLtXemV3LZXyBqR8cbSUq2dLWV3u3f/df6Tsg5QjE6XcuETKyiIpF7/528+p\nskjKrEW/2l0ri2STrDvhqX/F9iflmbWr2V+civ+SUP07llO734mWUxmOmAtc37x+PTDnGA7+ESll\njJQyARgJLJO/M82bxhlGNUJwJzCFQHhv7z6hA50PDH8YIlJ+fU5jNQSlwqXvouciIALniYsJQEg8\nDJsArXvDtHsgsSO8uRc6Pwu25kow5/+LWvV4o1zAshkw9DOoiQOLCYpmQMSFsD8X3pkC7ZwQEe+V\nPbQJhj8L1z4Fz4+G5TO9+wffAF8Xwq3Pw3cfwqOXQ+bI335OAWHQ4dfFFayEYeD4vWCNswn771hO\nH6fihCcCA4QQOUD/5m2EEJFCiPnHOUeLjjgXaHcnBHf49f5uw6Ft31/vdzXCNV+ByQ8D/fBQi4Mv\ncbH1xPeJSoNbpsLTa+D8UT9XGQm5z/vX4Mt232OkfASor24OD+sDrZ4DVwPE3g1l9fD+cm+yn/Z9\nwc87/Zr0i2DooxCRCLe/Cmtm/3ytoHDodxVcfqf3Rd6U8SfW+yeOWRVF49zh9I0JCyHuFkLsFkLs\nFEK8cCLZPxwnLKWsAC48xv4CYMgx9q8AVvzR+2mcQYI7QGDar/erKgQdo96ZX6R3ASR23OzGzT50\n9EdHx5O7p07/87r4+UVik+J3bPnlMyDRCX7twJoGUTdCxEh45QEY9xTElYFsgqx3IeN2iG3WQwi4\n5FZolemN9TWYfr5mu/Ph7XWQvQ5qq8D3hEVyNc55Ts+YsBCiH97osfZSSqcQ4oSB4dqMOY1jo/6x\nF0cCGwqBKAxGUvknK9XMjpWw9msYOxKSxnodq0+sNyTthn9CUJh3/ZtRsOsTrxP+/6QcZ9aaEND2\nvNOjt8ZZxmmLehgHPC+ldAJIKUtPJKylstT4UxEoWJmMSgYGrjg9N9mzDvKyIfiS/x0SEMLrgH9a\nHzAJfE4wpqzxN8f1O5bfRQrQWwixTgixXAjR5UTCWk9Y409HJR4TN6Hge3puUF8Dj3zpndV2InxC\noe/E06ODxl+AP94T/o3wXR0QKKXsLoTIBL4AEo93Lc0Ja5wWTpsDBhhyO4REn5ys7RjRHBoawKlE\nPUgpfx0a04wQYhwwq1luoxDCI4QIklKWH0teG47QOPc4WQesoXFCTttwxBy8EWMIIVIBw/EcMGg9\nYQ0Njb8tp+3F3IfAh0KIHYADOOHcCM0Ja2ho/E05PSFqzVER152svOaENTQ0/qacHaU1NCesoaHx\nN+XsSOCjOWENDY2/KVpPWENDQ6MFOb2JeU4WzQlraGj8TdF6whoaGhotiDYmrKGhodGCaD3hFiM7\nO7ulVfjT+SvaBH9Nu/6KNsG5aJfWE24x/vxaVS3PX9Em+Gva9Ve0Cc5Fu7SesIaGhkYLovWENTQ0\nNFqQsyNETTRXHm1xhBBnhyIaGhrnBFLKP1zk74/4m1O53wl1OVucsIaGhsbfES2fsIaGhkYLojlh\nDQ0NjRbkL++EhRA2IcQSIUSOEGKxEOK4dcyFEKoQIksIMe9M6vhHOBm7hBAxQogfhBC7hBA7hRD/\naAldfwshxCAhxB4hxD4hxEPHkZnUfHybEOI4pZLPLn7LLiHEtc32bBdCrBFCtG8JPX8vJ/N5Nctl\nCiFcQojhZ1K/c42/vBMGJgBLpJSpwNLm7eNxD5ANnAsD5SdjlxO4T0rZFugO3CmESDuDOv4mQggV\neAsYBLQBRv1/HYUQFwPJUsoU4FZgyhlX9HdyMnYBB4DeUsr2wL+AqWdWy9/PSdr1k9wLwELgtLzQ\n+qvwd3DCw4BpzevTgMuOJSSEiAYuBt7n3Gg0v2mXlLJISrm1eb0O2A1EnjENT46uwH4p5aHmigQz\ngEv/n8x/bZVSrgcChBBney3737RLSvmjlLK6eXM9cC4UzzuZzwvgbuAroPRMKncu8ndwwmFSyuLm\n9WLgeF/e14AHAM8Z0erUOVm7ABBCxAOd8H7ZzyaigCO/2D7avO+3ZM52h3Uydv2Sm4DvTqtGfw6/\naZcQIgqvY/7pF8u58MuyxfhLTNYQQiwBwo9x6NFfbkgp5bHiA4UQlwAlUsosIUTf06Pl7+dU7frF\ndax4eyX3NPeIzyZO9gv6/3+dnO1f7JPWTwjRD7gROP/0qfOncTJ2vQ5MaG6XgnPjl2WL8ZdwwlLK\nAcc7JoQoFkKESymLhBARQMkxxHoAw5rHHk2AnxDiYynlCauknm7+BLsQQuiBr4FPpJRzTpOqp0I+\nEPOL7Ri8vasTyUQ37zubORm7aH4Z9x4wSEpZeYZ0OxVOxq7OwAyv/yUYGCyEcEop554ZFc8t/g7D\nEXOB65vXrwd+5YiklI9IKWOklAnASGBZSzvgk+A37WruhXwAZEspXz+Duv0eNgEpQoh4IYQBuBqv\nbb9kLs1lw4UQ3YGqXwzFnK38pl1CiFhgFjBaSrm/BXT8I/ymXVLKRCllQvP36StgnOaAj8/fwQlP\nBAYIIXKA/s3bCCEihRDzj3PO2f5TF07OrvOB0UC/5tC7LCHEoJZR99hIKV3AXcAivJEpM6WUu4UQ\ntwkhbmuW+Q44IITYD7wL3NFiCp8kJ2MX8AQQCExp/mw2tJC6J81J2qXxO9CmLWtoaGi0IH+HnrCG\nhobGWYvmhDU0NDRaEM0Ja2hoaLQgmhPW0NDQaEE0J6yhoaHRgmhOWENDQ6MF0ZywhoaGRguiOWEN\nDQ2NFuT/AMH9R/ORrjlAAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1126,7 +1128,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.6" + "version": "2.7.10" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index 3ec974e057..de6b3c6a54 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -36,6 +36,8 @@ "import openmc\n", "from openmc.statepoint import StatePoint\n", "from openmc.summary import Summary\n", + "from openmc.source import Source\n", + "from openmc.stats import SpatialBox\n", "\n", "%matplotlib inline" ] @@ -288,7 +290,8 @@ "settings_file.particles = particles\n", "settings_file.output = {'tallies': True, 'summary': True}\n", "source_bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", - "settings_file.set_source_space('box', source_bounds)\n", + "settings_file.source = Source(space=SpatialBox(\n", + " source_bounds[:3], source_bounds[3:]))\n", "\n", "# Export to \"settings.xml\"\n", "settings_file.export_to_xml()" @@ -363,26 +366,7 @@ "outputs": [ { "data": { - "image/png": [ - "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\n", - "AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\n", - "QYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB98LGQ4UM+6dthcAAALKSURBVGje7dpLcqQwDAbgHHE2\n", - "YeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n", - "+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\n", - "nl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n", - "/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n", - "6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\n", - "vjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\n", - "dwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\n", - "ACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\n", - "vY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n", - "+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\n", - "QBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n", - "9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n", - "8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTEtMjVUMTQ6MjA6\n", - "NTEtMDg6MDDVsKLDAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE1LTExLTI1VDE0OjIwOjUxLTA4OjAw\n", - "pO0afwAAAABJRU5ErkJggg==\n" - ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ABDg0ADuhPUfUAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDEtMTRUMDc6MDA6\nMTQtMDY6MDA6WZzHAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAxLTE0VDA3OjAwOjE0LTA2OjAw\nSwQkewAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -591,10 +575,9 @@ "\n", " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", - " Version: 0.7.0\n", - " Git SHA1: 74ffcb447521c968fb64fdaa63e40598783f2fba\n", - " Date/Time: 2015-11-25 14:20:51\n", - " MPI Processes: 1\n", + " Version: 0.7.1\n", + " Git SHA1: ea9fb637f63f9374c7436456141afa850b84acf9\n", + " Date/Time: 2016-01-14 07:00:14\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -634,13 +617,13 @@ " 11/1 1.07867 1.05536 +/- 0.01277\n", " 12/1 1.04203 1.05345 +/- 0.01096\n", " 13/1 1.04482 1.05237 +/- 0.00955\n", - " 14/1 1.04116 1.05113 +/- 0.00852\n", - " 15/1 1.07569 1.05358 +/- 0.00800\n", - " 16/1 1.04188 1.05252 +/- 0.00732\n", - " 17/1 1.03775 1.05129 +/- 0.00679\n", - " 18/1 0.98462 1.04616 +/- 0.00808\n", - " 19/1 1.08613 1.04902 +/- 0.00801\n", - " 20/1 1.00571 1.04613 +/- 0.00800\n", + " 14/1 1.04117 1.05113 +/- 0.00852\n", + " 15/1 1.07581 1.05360 +/- 0.00801\n", + " 16/1 1.04235 1.05257 +/- 0.00731\n", + " 17/1 1.02710 1.05045 +/- 0.00701\n", + " 18/1 1.01970 1.04809 +/- 0.00687\n", + " 19/1 1.01022 1.04538 +/- 0.00691\n", + " 20/1 1.01449 1.04332 +/- 0.00675\n", " Creating state point statepoint.20.h5...\n", "\n", " ===========================================================================\n", @@ -650,27 +633,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 7.9600E-01 seconds\n", - " Reading cross sections = 2.1200E-01 seconds\n", - " Total time in simulation = 1.8740E+01 seconds\n", - " Time in transport only = 1.8727E+01 seconds\n", - " Time in inactive batches = 2.5970E+00 seconds\n", - " Time in active batches = 1.6143E+01 seconds\n", - " Time synchronizing fission bank = 2.0000E-03 seconds\n", - " Sampling source sites = 1.0000E-03 seconds\n", + " Total time for initialization = 1.2510E+00 seconds\n", + " Reading cross sections = 9.7600E-01 seconds\n", + " Total time in simulation = 1.5844E+01 seconds\n", + " Time in transport only = 1.5834E+01 seconds\n", + " Time in inactive batches = 2.2840E+00 seconds\n", + " Time in active batches = 1.3560E+01 seconds\n", + " Time synchronizing fission bank = 3.0000E-03 seconds\n", + " Sampling source sites = 2.0000E-03 seconds\n", " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 2.0000E-03 seconds\n", - " Total time elapsed = 1.9553E+01 seconds\n", - " Calculation Rate (inactive) = 4813.25 neutrons/second\n", - " Calculation Rate (active) = 2322.99 neutrons/second\n", + " Total time for finalization = 1.0000E-03 seconds\n", + " Total time elapsed = 1.7110E+01 seconds\n", + " Calculation Rate (inactive) = 5472.85 neutrons/second\n", + " Calculation Rate (active) = 2765.49 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.04597 +/- 0.00663\n", - " k-effective (Track-length) = 1.04613 +/- 0.00800\n", - " k-effective (Absorption) = 1.04087 +/- 0.00627\n", - " Combined k-effective = 1.04322 +/- 0.00570\n", + " k-effective (Collision) = 1.03935 +/- 0.00682\n", + " k-effective (Track-length) = 1.04332 +/- 0.00675\n", + " k-effective (Absorption) = 1.03845 +/- 0.00598\n", + " Combined k-effective = 1.04024 +/- 0.00523\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -775,10 +758,10 @@ " \n", " \n", " 0\n", - " total\n", - " (nu-fission / absorption)\n", - " 1.040687\n", - " 0.010913\n", + " total\n", + " (nu-fission / absorption)\n", + " 1.040166\n", + " 0.009069\n", " \n", " \n", "\n", @@ -786,7 +769,7 @@ ], "text/plain": [ " nuclide score mean std. dev.\n", - "0 total (nu-fission / absorption) 1.040687 0.010913" + "0 total (nu-fission / absorption) 1.040166 0.009069" ] }, "execution_count": 26, @@ -836,19 +819,19 @@ " \n", " \n", " 0\n", - " (0.0e+00 - 6.2e-01)\n", - " total\n", - " absorption\n", - " 0.959302\n", - " 0.010033\n", + " (0.0e+00 - 6.2e-01)\n", + " total\n", + " absorption\n", + " 0.95938\n", + " 0.008187\n", " \n", " \n", "\n", "
" ], "text/plain": [ - " energy [MeV] nuclide score mean std. dev.\n", - "0 (0.0e+00 - 6.2e-01) total absorption 0.959302 0.010033" + " energy [MeV] nuclide score mean std. dev.\n", + "0 (0.0e+00 - 6.2e-01) total absorption 0.95938 0.008187" ] }, "execution_count": 27, @@ -896,19 +879,19 @@ " \n", " \n", " 0\n", - " (0.0e+00 - 6.2e-01)\n", - " total\n", - " nu-fission\n", - " 1.09103\n", - " 0.012491\n", + " (0.0e+00 - 6.2e-01)\n", + " total\n", + " nu-fission\n", + " 1.090899\n", + " 0.010602\n", " \n", " \n", "\n", "
" ], "text/plain": [ - " energy [MeV] nuclide score mean std. dev.\n", - "0 (0.0e+00 - 6.2e-01) total nu-fission 1.09103 0.012491" + " energy [MeV] nuclide score mean std. dev.\n", + "0 (0.0e+00 - 6.2e-01) total nu-fission 1.090899 0.010602" ] }, "execution_count": 28, @@ -958,12 +941,12 @@ " \n", " \n", " 0\n", - " (0.0e+00 - 6.2e-01)\n", - " 10000\n", - " total\n", - " absorption\n", - " 0.803182\n", - " 0.008664\n", + " (0.0e+00 - 6.2e-01)\n", + " 10000\n", + " total\n", + " absorption\n", + " 0.803413\n", + " 0.007031\n", " \n", " \n", "\n", @@ -971,7 +954,7 @@ ], "text/plain": [ " energy [MeV] cell nuclide score mean std. dev.\n", - "0 (0.0e+00 - 6.2e-01) 10000 total absorption 0.803182 0.008664" + "0 (0.0e+00 - 6.2e-01) 10000 total absorption 0.803413 0.007031" ] }, "execution_count": 29, @@ -1019,12 +1002,12 @@ " \n", " \n", " 0\n", - " (0.0e+00 - 6.2e-01)\n", - " 10000\n", - " total\n", - " (nu-fission / absorption)\n", - " 1.237982\n", - " 0.014179\n", + " (0.0e+00 - 6.2e-01)\n", + " 10000\n", + " total\n", + " (nu-fission / absorption)\n", + " 1.237053\n", + " 0.011765\n", " \n", " \n", "\n", @@ -1032,10 +1015,10 @@ ], "text/plain": [ " energy [MeV] cell nuclide score mean \\\n", - "0 (0.0e+00 - 6.2e-01) 10000 total (nu-fission / absorption) 1.237982 \n", + "0 (0.0e+00 - 6.2e-01) 10000 total (nu-fission / absorption) 1.237053 \n", "\n", " std. dev. \n", - "0 0.014179 " + "0 0.011765 " ] }, "execution_count": 30, @@ -1082,12 +1065,12 @@ " \n", " \n", " 0\n", - " (0.0e+00 - 6.2e-01)\n", - " 10000\n", - " total\n", - " (((absorption * nu-fission) * absorption) * (n...\n", - " 1.040687\n", - " 0.022989\n", + " (0.0e+00 - 6.2e-01)\n", + " 10000\n", + " total\n", + " (((absorption * nu-fission) * absorption) * (n...\n", + " 1.040166\n", + " 0.019018\n", " \n", " \n", "\n", @@ -1098,7 +1081,7 @@ "0 (0.0e+00 - 6.2e-01) 10000 total \n", "\n", " score mean std. dev. \n", - "0 (((absorption * nu-fission) * absorption) * (n... 1.040687 0.022989 " + "0 (((absorption * nu-fission) * absorption) * (n... 1.040166 0.019018 " ] }, "execution_count": 31, @@ -1162,75 +1145,75 @@ " \n", " \n", " 0\n", - " 10000\n", - " (0.0e+00 - 6.3e-07)\n", - " (U-238 / total)\n", - " (nu-fission / flux)\n", - " 0.000001\n", - " 8.078651e-09\n", + " 10000\n", + " (0.0e+00 - 6.3e-07)\n", + " (U-238 / total)\n", + " (nu-fission / flux)\n", + " 0.000001\n", + " 7.377419e-09\n", " \n", " \n", " 1\n", - " 10000\n", - " (0.0e+00 - 6.3e-07)\n", - " (U-238 / total)\n", - " (scatter / flux)\n", - " 0.209990\n", - " 2.449396e-03\n", + " 10000\n", + " (0.0e+00 - 6.3e-07)\n", + " (U-238 / total)\n", + " (scatter / flux)\n", + " 0.209989\n", + " 2.303838e-03\n", " \n", " \n", " 2\n", - " 10000\n", - " (0.0e+00 - 6.3e-07)\n", - " (U-235 / total)\n", - " (nu-fission / flux)\n", - " 0.356117\n", - " 4.364366e-03\n", + " 10000\n", + " (0.0e+00 - 6.3e-07)\n", + " (U-235 / total)\n", + " (nu-fission / flux)\n", + " 0.356420\n", + " 3.951669e-03\n", " \n", " \n", " 3\n", - " 10000\n", - " (0.0e+00 - 6.3e-07)\n", - " (U-235 / total)\n", - " (scatter / flux)\n", - " 0.005555\n", - " 6.495710e-05\n", + " 10000\n", + " (0.0e+00 - 6.3e-07)\n", + " (U-235 / total)\n", + " (scatter / flux)\n", + " 0.005555\n", + " 6.101004e-05\n", " \n", " \n", " 4\n", - " 10000\n", - " (6.3e-07 - 2.0e+01)\n", - " (U-238 / total)\n", - " (nu-fission / flux)\n", - " 0.007190\n", - " 7.596666e-05\n", + " 10000\n", + " (6.3e-07 - 2.0e+01)\n", + " (U-238 / total)\n", + " (nu-fission / flux)\n", + " 0.007155\n", + " 8.053460e-05\n", " \n", " \n", " 5\n", - " 10000\n", - " (6.3e-07 - 2.0e+01)\n", - " (U-238 / total)\n", - " (scatter / flux)\n", - " 0.227843\n", - " 1.024510e-03\n", + " 10000\n", + " (6.3e-07 - 2.0e+01)\n", + " (U-238 / total)\n", + " (scatter / flux)\n", + " 0.227770\n", + " 1.079289e-03\n", " \n", " \n", " 6\n", - " 10000\n", - " (6.3e-07 - 2.0e+01)\n", - " (U-235 / total)\n", - " (nu-fission / flux)\n", - " 0.008086\n", - " 6.251590e-05\n", + " 10000\n", + " (6.3e-07 - 2.0e+01)\n", + " (U-235 / total)\n", + " (nu-fission / flux)\n", + " 0.008067\n", + " 5.254797e-05\n", " \n", " \n", " 7\n", - " 10000\n", - " (6.3e-07 - 2.0e+01)\n", - " (U-235 / total)\n", - " (scatter / flux)\n", - " 0.003365\n", - " 1.646663e-05\n", + " 10000\n", + " (6.3e-07 - 2.0e+01)\n", + " (U-235 / total)\n", + " (scatter / flux)\n", + " 0.003367\n", + " 1.647058e-05\n", " \n", " \n", "\n", @@ -1239,23 +1222,23 @@ "text/plain": [ " cell energy [MeV] nuclide score mean \\\n", "0 10000 (0.0e+00 - 6.3e-07) (U-238 / total) (nu-fission / flux) 0.000001 \n", - "1 10000 (0.0e+00 - 6.3e-07) (U-238 / total) (scatter / flux) 0.209990 \n", - "2 10000 (0.0e+00 - 6.3e-07) (U-235 / total) (nu-fission / flux) 0.356117 \n", + "1 10000 (0.0e+00 - 6.3e-07) (U-238 / total) (scatter / flux) 0.209989 \n", + "2 10000 (0.0e+00 - 6.3e-07) (U-235 / total) (nu-fission / flux) 0.356420 \n", "3 10000 (0.0e+00 - 6.3e-07) (U-235 / total) (scatter / flux) 0.005555 \n", - "4 10000 (6.3e-07 - 2.0e+01) (U-238 / total) (nu-fission / flux) 0.007190 \n", - "5 10000 (6.3e-07 - 2.0e+01) (U-238 / total) (scatter / flux) 0.227843 \n", - "6 10000 (6.3e-07 - 2.0e+01) (U-235 / total) (nu-fission / flux) 0.008086 \n", - "7 10000 (6.3e-07 - 2.0e+01) (U-235 / total) (scatter / flux) 0.003365 \n", + "4 10000 (6.3e-07 - 2.0e+01) (U-238 / total) (nu-fission / flux) 0.007155 \n", + "5 10000 (6.3e-07 - 2.0e+01) (U-238 / total) (scatter / flux) 0.227770 \n", + "6 10000 (6.3e-07 - 2.0e+01) (U-235 / total) (nu-fission / flux) 0.008067 \n", + "7 10000 (6.3e-07 - 2.0e+01) (U-235 / total) (scatter / flux) 0.003367 \n", "\n", " std. dev. \n", - "0 8.078651e-09 \n", - "1 2.449396e-03 \n", - "2 4.364366e-03 \n", - "3 6.495710e-05 \n", - "4 7.596666e-05 \n", - "5 1.024510e-03 \n", - "6 6.251590e-05 \n", - "7 1.646663e-05 " + "0 7.377419e-09 \n", + "1 2.303838e-03 \n", + "2 3.951669e-03 \n", + "3 6.101004e-05 \n", + "4 8.053460e-05 \n", + "5 1.079289e-03 \n", + "6 5.254797e-05 \n", + "7 1.647058e-05 " ] }, "execution_count": 33, @@ -1286,11 +1269,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 6.65302296e-07]\n", - " [ 3.56116716e-01]]\n", + "[[[ 6.65702880e-07]\n", + " [ 3.56420449e-01]]\n", "\n", - " [[ 7.19004460e-03]\n", - " [ 8.08598751e-03]]]\n" + " [[ 7.15488656e-03]\n", + " [ 8.06673774e-03]]]\n" ] } ], @@ -1318,9 +1301,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.00555516]]\n", + "[[[ 0.00555533]]\n", "\n", - " [[ 0.00336498]]]\n" + " [[ 0.0033668 ]]]\n" ] } ], @@ -1342,8 +1325,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.22784316]\n", - " [ 0.00336498]]]\n" + "[[[ 0.22777006]\n", + " [ 0.0033668 ]]]\n" ] } ], @@ -1388,39 +1371,39 @@ " \n", " \n", " 0\n", - " 10000\n", - " (0.0e+00 - 6.3e-07)\n", - " U-238\n", - " nu-fission\n", - " 0.000002\n", - " 1.450189e-08\n", + " 10000\n", + " (0.0e+00 - 6.3e-07)\n", + " U-238\n", + " nu-fission\n", + " 0.000002\n", + " 1.283958e-08\n", " \n", " \n", " 1\n", - " 10000\n", - " (0.0e+00 - 6.3e-07)\n", - " U-235\n", - " nu-fission\n", - " 0.870882\n", - " 7.895515e-03\n", + " 10000\n", + " (0.0e+00 - 6.3e-07)\n", + " U-235\n", + " nu-fission\n", + " 0.868553\n", + " 6.880390e-03\n", " \n", " \n", " 2\n", - " 10000\n", - " (6.3e-07 - 2.0e+01)\n", - " U-238\n", - " nu-fission\n", - " 0.082484\n", - " 8.253437e-04\n", + " 10000\n", + " (6.3e-07 - 2.0e+01)\n", + " U-238\n", + " nu-fission\n", + " 0.082149\n", + " 8.837250e-04\n", " \n", " \n", " 3\n", - " 10000\n", - " (6.3e-07 - 2.0e+01)\n", - " U-235\n", - " nu-fission\n", - " 0.092762\n", - " 6.444580e-04\n", + " 10000\n", + " (6.3e-07 - 2.0e+01)\n", + " U-235\n", + " nu-fission\n", + " 0.092618\n", + " 5.195308e-04\n", " \n", " \n", "\n", @@ -1428,10 +1411,10 @@ ], "text/plain": [ " cell energy [MeV] nuclide score mean std. dev.\n", - "0 10000 (0.0e+00 - 6.3e-07) U-238 nu-fission 0.000002 1.450189e-08\n", - "1 10000 (0.0e+00 - 6.3e-07) U-235 nu-fission 0.870882 7.895515e-03\n", - "2 10000 (6.3e-07 - 2.0e+01) U-238 nu-fission 0.082484 8.253437e-04\n", - "3 10000 (6.3e-07 - 2.0e+01) U-235 nu-fission 0.092762 6.444580e-04" + "0 10000 (0.0e+00 - 6.3e-07) U-238 nu-fission 0.000002 1.283958e-08\n", + "1 10000 (0.0e+00 - 6.3e-07) U-235 nu-fission 0.868553 6.880390e-03\n", + "2 10000 (6.3e-07 - 2.0e+01) U-238 nu-fission 0.082149 8.837250e-04\n", + "3 10000 (6.3e-07 - 2.0e+01) U-235 nu-fission 0.092618 5.195308e-04" ] }, "execution_count": 37, @@ -1471,84 +1454,84 @@ " \n", " \n", " 0\n", - " 10002\n", - " (1.0e-08 - 1.1e-07)\n", - " H-1\n", - " scatter\n", - " 4.630154\n", - " 0.044512\n", + " 10002\n", + " (1.0e-08 - 1.1e-07)\n", + " H-1\n", + " scatter\n", + " 4.619398\n", + " 0.040124\n", " \n", " \n", " 1\n", - " 10002\n", - " (1.1e-07 - 1.2e-06)\n", - " H-1\n", - " scatter\n", - " 2.042984\n", - " 0.011429\n", + " 10002\n", + " (1.1e-07 - 1.2e-06)\n", + " H-1\n", + " scatter\n", + " 2.030757\n", + " 0.011239\n", " \n", " \n", " 2\n", - " 10002\n", - " (1.2e-06 - 1.3e-05)\n", - " H-1\n", - " scatter\n", - " 1.657517\n", - " 0.008617\n", + " 10002\n", + " (1.2e-06 - 1.3e-05)\n", + " H-1\n", + " scatter\n", + " 1.658488\n", + " 0.009777\n", " \n", " \n", " 3\n", - " 10002\n", - " (1.3e-05 - 1.4e-04)\n", - " H-1\n", - " scatter\n", - " 1.863326\n", - " 0.008848\n", + " 10002\n", + " (1.3e-05 - 1.4e-04)\n", + " H-1\n", + " scatter\n", + " 1.853002\n", + " 0.007378\n", " \n", " \n", " 4\n", - " 10002\n", - " (1.4e-04 - 1.5e-03)\n", - " H-1\n", - " scatter\n", - " 2.043916\n", - " 0.014195\n", + " 10002\n", + " (1.4e-04 - 1.5e-03)\n", + " H-1\n", + " scatter\n", + " 2.050773\n", + " 0.012484\n", " \n", " \n", " 5\n", - " 10002\n", - " (1.5e-03 - 1.6e-02)\n", - " H-1\n", - " scatter\n", - " 2.134458\n", - " 0.007561\n", + " 10002\n", + " (1.5e-03 - 1.6e-02)\n", + " H-1\n", + " scatter\n", + " 2.131759\n", + " 0.007821\n", " \n", " \n", " 6\n", - " 10002\n", - " (1.6e-02 - 1.7e-01)\n", - " H-1\n", - " scatter\n", - " 2.209947\n", - " 0.013848\n", + " 10002\n", + " (1.6e-02 - 1.7e-01)\n", + " H-1\n", + " scatter\n", + " 2.213710\n", + " 0.015159\n", " \n", " \n", " 7\n", - " 10002\n", - " (1.7e-01 - 1.9e+00)\n", - " H-1\n", - " scatter\n", - " 2.006967\n", - " 0.009368\n", + " 10002\n", + " (1.7e-01 - 1.9e+00)\n", + " H-1\n", + " scatter\n", + " 2.011925\n", + " 0.009406\n", " \n", " \n", " 8\n", - " 10002\n", - " (1.9e+00 - 2.0e+01)\n", - " H-1\n", - " scatter\n", - " 0.373895\n", - " 0.002964\n", + " 10002\n", + " (1.9e+00 - 2.0e+01)\n", + " H-1\n", + " scatter\n", + " 0.371280\n", + " 0.003949\n", " \n", " \n", "\n", @@ -1556,15 +1539,15 @@ ], "text/plain": [ " cell energy [MeV] nuclide score mean std. dev.\n", - "0 10002 (1.0e-08 - 1.1e-07) H-1 scatter 4.630154 0.044512\n", - "1 10002 (1.1e-07 - 1.2e-06) H-1 scatter 2.042984 0.011429\n", - "2 10002 (1.2e-06 - 1.3e-05) H-1 scatter 1.657517 0.008617\n", - "3 10002 (1.3e-05 - 1.4e-04) H-1 scatter 1.863326 0.008848\n", - "4 10002 (1.4e-04 - 1.5e-03) H-1 scatter 2.043916 0.014195\n", - "5 10002 (1.5e-03 - 1.6e-02) H-1 scatter 2.134458 0.007561\n", - "6 10002 (1.6e-02 - 1.7e-01) H-1 scatter 2.209947 0.013848\n", - "7 10002 (1.7e-01 - 1.9e+00) H-1 scatter 2.006967 0.009368\n", - "8 10002 (1.9e+00 - 2.0e+01) H-1 scatter 0.373895 0.002964" + "0 10002 (1.0e-08 - 1.1e-07) H-1 scatter 4.619398 0.040124\n", + "1 10002 (1.1e-07 - 1.2e-06) H-1 scatter 2.030757 0.011239\n", + "2 10002 (1.2e-06 - 1.3e-05) H-1 scatter 1.658488 0.009777\n", + "3 10002 (1.3e-05 - 1.4e-04) H-1 scatter 1.853002 0.007378\n", + "4 10002 (1.4e-04 - 1.5e-03) H-1 scatter 2.050773 0.012484\n", + "5 10002 (1.5e-03 - 1.6e-02) H-1 scatter 2.131759 0.007821\n", + "6 10002 (1.6e-02 - 1.7e-01) H-1 scatter 2.213710 0.015159\n", + "7 10002 (1.7e-01 - 1.9e+00) H-1 scatter 2.011925 0.009406\n", + "8 10002 (1.9e+00 - 2.0e+01) H-1 scatter 0.371280 0.003949" ] }, "execution_count": 38, From 66f1d7b840fc576fc87b8603b57f1a4f89d8d978 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 14 Jan 2016 09:30:22 -0600 Subject: [PATCH 163/650] Update inputs digest for test_distribmat once more. Apparently when I generated the digest before, I had a tallies.xml file present in the test directory which caused the digest to be wrong. --- tests/test_distribmat/inputs_true.dat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_distribmat/inputs_true.dat b/tests/test_distribmat/inputs_true.dat index 663bb954bf..fddab0a60d 100644 --- a/tests/test_distribmat/inputs_true.dat +++ b/tests/test_distribmat/inputs_true.dat @@ -1 +1 @@ -cbf6a6cdb0b7814d14a05e6b80780fd66978610825d64547e0a2dda2bdee50f01cfd53e9305febec50a06eb63a00b07e85a97b09b88f748225810c0034508fd0 \ No newline at end of file +401b8be1b296db7f21ccae089c7ac480044d953b7264ca0ae8e34bb79e24cbb57195bcb568deda6f2f7e07366bbfac408a92306351b9169edd04499723707e1b \ No newline at end of file From 6105f045e1e59db0fd3fb0ab6b01ad29b90fb3a5 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 14 Jan 2016 15:08:28 -0500 Subject: [PATCH 164/650] Refactored tally summation with new AggregateNuclide, AggregateScore and AggregateFilter classes --- openmc/aggregate.py | 404 ++++++++++++++++++++++++++++++++++++++++++++ openmc/cross.py | 7 +- openmc/tallies.py | 253 +++++++++++++++++---------- 3 files changed, 569 insertions(+), 95 deletions(-) create mode 100644 openmc/aggregate.py diff --git a/openmc/aggregate.py b/openmc/aggregate.py new file mode 100644 index 0000000000..c77b94ad76 --- /dev/null +++ b/openmc/aggregate.py @@ -0,0 +1,404 @@ +import sys +from numbers import Integral + +import numpy as np + +from openmc import Filter, Nuclide +from openmc.cross import CrossScore, CrossNuclide, CrossFilter +from openmc.filter import _FILTER_TYPES +import openmc.checkvalue as cv + + +if sys.version_info[0] >= 3: + basestring = str + +# Acceptable tally aggregation operations +_TALLY_AGGREGATE_OPS = ['sum', 'mean'] + + +class AggregateScore(object): + """A special-purpose tally score used to encapsulate an aggregate of a + subset or all of tally's scores for tally aggregation. + + Parameters + ---------- + scores : Iterable of str or CrossScore + The scores included in the aggregation + aggregate_op : str + The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + to aggregate across a tally's scores with this AggregateScore + + Attributes + ---------- + scores : Iterable of str or CrossScore + The scores included in the aggregation + aggregate_op : str + The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + to aggregate across a tally's scores with this AggregateScore + + """ + + def __init__(self, scores=None, aggregate_op=None): + + self._scores = None + self._aggregate_op = None + + if scores is not None: + self.scores = scores + if aggregate_op is not None: + self.aggregate_op = aggregate_op + + def __hash__(self): + return hash(repr(self)) + + def __eq__(self, other): + return str(other) == str(self) + + def __ne__(self, other): + return not self == other + + def __deepcopy__(self, memo): + existing = memo.get(id(self)) + + # If this is the first time we have tried to copy this object, create a copy + if existing is None: + clone = type(self).__new__(type(self)) + clone._scores = self.scores + clone._aggregate_op = self.aggregate_op + + memo[id(self)] = clone + + return clone + + # If this object has been copied before, return the first copy made + else: + return existing + + def __repr__(self): + string = ''.join(map(str, self.scores)) + string = '{0}({1})'.format(self.aggregate_op, string) + return string + + @property + def scores(self): + return self._scores + + @property + def aggregate_op(self): + return self._aggregate_op + + @scores.setter + def scores(self, scores): + cv.check_iterable_type('scores', scores, basestring) + self._scores = scores + + @aggregate_op.setter + def aggregate_op(self, aggregate_op): + cv.check_type('aggregate_op', aggregate_op, (basestring, CrossScore)) + cv.check_value('aggregate_op', aggregate_op, _TALLY_AGGREGATE_OPS) + self._aggregate_op = aggregate_op + + +class AggregateNuclide(object): + """A special-purpose tally nuclide used to encapsulate an aggregate of a + subset or all of tally's nuclides for tally aggregation. + + Parameters + ---------- + nuclides : Iterable of Nuclide or CrossNuclide + The nuclides included in the aggregation + aggregate_op : str + The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + to aggregate across a tally's nuclides with this AggregateNuclide + + Attributes + ---------- + nuclides : Iterable of Nuclide or CrossNuclide + The nuclides included in the aggregation + aggregate_op : str + The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + to aggregate across a tally's nuclides with this AggregateNuclide + + """ + + def __init__(self, nuclides=None, aggregate_op=None): + + self._nuclides = None + self._aggregate_op = None + + if nuclides is not None: + self.nuclides = nuclides + if aggregate_op is not None: + self.aggregate_op = aggregate_op + + def __hash__(self): + return hash(repr(self)) + + def __eq__(self, other): + return str(other) == str(self) + + def __ne__(self, other): + return not self == other + + def __deepcopy__(self, memo): + existing = memo.get(id(self)) + + # If this is the first time we have tried to copy this object, create a copy + if existing is None: + clone = type(self).__new__(type(self)) + clone._nuclides = self.nuclides + clone._aggregate_op = self._aggregate_op + + memo[id(self)] = clone + + return clone + + # If this object has been copied before, return the first copy made + else: + return existing + + def __repr__(self): + + string = '{0}('.format(self.aggregate_op) + + # Append each nuclide in the aggregate to the string + for nuclide in self.nuclides: + if isinstance(nuclide, Nuclide): + string += '{0}, '.format(nuclide.name) + else: + string += '{0}, '.format(str(nuclide)) + + string += ')' + return string + + @property + def nuclides(self): + return self._nuclides + + @property + def aggregate_op(self): + return self._aggregate_op + + @nuclides.setter + def nuclides(self, nuclides): + cv.check_iterable_type('nuclides', nuclides, (Nuclide, CrossNuclide)) + self._nuclides = nuclides + + @aggregate_op.setter + def aggregate_op(self, aggregate_op): + cv.check_type('aggregate_op', aggregate_op, basestring) + cv.check_value('aggregate_op', aggregate_op, _TALLY_AGGREGATE_OPS) + self._aggregate_op = aggregate_op + + +class AggregateFilter(object): + """A special-purpose tally filter used to encapsulate an aggregate of a + subset or all of a tally filter's bins for tally aggregation. + + Parameters + ---------- + filter : Filter or CrossFilter + The filter included in the aggregation + filter_bins : Iterable of tuple + The filter bins included in the aggregation + aggregate_op : str + The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + to aggregate across a tally filter's bins with this AggregateFilter + + Attributes + ---------- + filter : filter + The filter included in the aggregation + filter_bins : Iterable of tuple + The filter bins included in the aggregation + aggregate_op : str + The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + to aggregate across a tally filter's bins with this AggregateFilter + + """ + + def __init__(self, filter=None, bins=None, aggregate_op=None): + + self._type = '{0}({1})'.format(aggregate_op, filter.type) + self._bins = None + self._stride = None + + self._filter = None + self._aggregate_op = None + + if filter is not None: + self.filter = filter + if bins is not None: + self.bins = bins + if aggregate_op is not None: + self.aggregate_op = aggregate_op + + def __hash__(self): + return hash((self.type, self.bins, self.aggregate_op)) + + def __eq__(self, other): + return str(other) == str(self) + + def __ne__(self, other): + return not self == other + + def __repr__(self): + string = 'AggregateFilter\n' + string += '{0: <16}{1}{2}\n'.format('\tType', '=\t', self.type) + string += '{0: <16}{1}{2}\n'.format('\tBins', '=\t', self.bins) + return string + + def __deepcopy__(self, memo): + existing = memo.get(id(self)) + + # If this is the first time we have tried to copy this object, create a copy + if existing is None: + clone = type(self).__new__(type(self)) + clone._type = self.type + clone._filter = self.filter + clone._aggregate_op = self.aggregate_op + clone._bins = self._bins + clone._stride = self.stride + + memo[id(self)] = clone + + return clone + + # If this object has been copied before, return the first copy made + else: + return existing + + @property + def filter(self): + return self._filter + + @property + def aggregate_op(self): + return self._aggregate_op + + @property + def type(self): + return self._type + + @property + def bins(self): + return self._bins + + @property + def num_bins(self): + if self.filter: + return 1 + else: + return 0 + + @property + def stride(self): + return self._stride + + @type.setter + def type(self, filter_type): + if filter_type not in _FILTER_TYPES.values(): + msg = 'Unable to set AggregateFilter type to "{0}" since it ' \ + 'is not one of the supported types'.format(filter_type) + raise ValueError(msg) + + self._type = filter_type + + @filter.setter + def filter(self, filter): + cv.check_type('filter', filter, (Filter, CrossFilter)) + self._filter = filter + + @bins.setter + def bins(self, bins): + cv.check_iterable_type('bins', bins, (Integral, tuple)) + self._bins = bins + + @aggregate_op.setter + def aggregate_op(self, aggregate_op): + cv.check_type('aggregate_op', aggregate_op, basestring) + cv.check_value('aggregate_op', aggregate_op, _TALLY_AGGREGATE_OPS) + self._aggregate_op = aggregate_op + + @stride.setter + def stride(self, stride): + self._stride = stride + + def get_bin_index(self, filter_bin): + """Returns the index in the AggregateFilter for some bin. + + Parameters + ---------- + filter_bin : Integral or tuple of Integral or tuple of Real + A tuple of value(s) corresponding to the bin of interest in + the aggregated filter. The bin is the integer ID for 'material', + 'surface', 'cell', 'cellborn', and 'universe' Filters. The bin + is the integer cell instance ID for 'distribcell' Filters. The + bin is a 2-tuple of floats for 'energy' and 'energyout' filters + corresponding to the energy boundaries of the bin of interest. + The bin is a (x,y,z) 3-tuple for 'mesh' filters corresponding to + the mesh cell of interest. + + Returns + ------- + filter_index : Integral + The index in the Tally data array for this filter bin. For an + AggregateTally the filter bin index is always unity. + + Raises + ------ + ValueError + When the filter_bin is not part of the aggregated filter's bins + + """ + + if filter_bin not in self.bins: + msg = 'Unable to get the bin index for AggregateFilter since ' \ + '"{0}" is not one of the bins'.format(filter_bin) + raise ValueError(msg) + else: + return 0 + + def get_pandas_dataframe(self, datasize): + """Builds a Pandas DataFrame for the AggregateFilter's bins. + + This method constructs a Pandas DataFrame object for the AggregateFilter + with columns annotated by filter bin information. This is a helper + method for the Tally.get_pandas_dataframe(...) method. + + Parameters + ---------- + datasize : Integral + The total number of bins in the tally corresponding to this filter + + Returns + ------- + pandas.DataFrame + A Pandas DataFrame with columns of strings that characterize the + aggregatefilter's bins. Each entry in the DataFrame will include + one or more aggregation operations used to construct the + aggregatefilter's bins. The number of rows in the DataFrame is the + same as the total number of bins in the corresponding tally, with + the filter bins appropriately tiled to map to the corresponding + tally bins. + + See also + -------- + Tally.get_pandas_dataframe(), Filter.get_pandas_dataframe(), + CrossFilter.get_pandas_dataframe() + + """ + + import pandas as pd + + # Construct a sring representing the filter aggregation + aggregate_bin = '{0}('.format(self.aggregate_op) + aggregate_bin += ', '.join(self.bins) + ')' + + # Construct NumPy array of bin repeated for each element in dataframe + aggregate_bin_array = np.array([aggregate_bin]) + aggregate_bin_array = np.repeat(aggregate_bin_array, datasize) + + # Construct Pandas DataFrame for the AggregateFilter + df = pd.DataFrame({self.type : aggregate_bin_array}) + return df \ No newline at end of file diff --git a/openmc/cross.py b/openmc/cross.py index c03ee51885..9df768b944 100644 --- a/openmc/cross.py +++ b/openmc/cross.py @@ -34,7 +34,7 @@ class CrossScore(object): The right score in the outer product binary_op : str The tally arithmetic binary operator (e.g., '+', '-', etc.) used to - combine two tally's scores with this CrossNuclide + combine two tally's scores with this CrossScore """ @@ -310,7 +310,6 @@ class CrossFilter(object): clone._binary_op = self.binary_op clone._type = self.type clone._bins = self._bins - clone._num_bins = self.num_bins clone._stride = self.stride memo[id(self)] = clone @@ -355,8 +354,8 @@ class CrossFilter(object): @type.setter def type(self, filter_type): if filter_type not in _FILTER_TYPES.values(): - msg = 'Unable to set Filter type to "{0}" since it is not one ' \ - 'of the supported types'.format(filter_type) + msg = 'Unable to set CrossFilter type to "{0}" since it ' \ + 'is not one of the supported types'.format(filter_type) raise ValueError(msg) self._type = filter_type diff --git a/openmc/tallies.py b/openmc/tallies.py index b66c710965..097d7de3d9 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -13,6 +13,7 @@ import numpy as np from openmc import Mesh, Filter, Trigger, Nuclide from openmc.cross import CrossScore, CrossNuclide, CrossFilter +from openmc.aggregate import AggregateScore, AggregateNuclide, AggregateFilter from openmc.filter import _FILTER_TYPES import openmc.checkvalue as cv from openmc.clean_xml import * @@ -259,6 +260,10 @@ class Tally(object): def num_scores(self): return len(self._scores) + @property + def num_filters(self): + return len(self.filters) + @property def num_filter_bins(self): num_bins = 1 @@ -460,16 +465,28 @@ class Tally(object): Parameters ---------- - filter : openmc.filter.Filter - Filter to add + filter : Filter, CrossFilter or AggregateFilter + A filter to specify a discretization of the tally across some + dimension (e.g., 'energy', 'cell'). The filter should be a Filter + object when a user is adding filters to a Tally for input file + generation or when the Tally is created from a StatePoint. The + filter may be a CrossFilter or AggregateFilter for derived tallies + created by tally arithmetic. """ - if not isinstance(filter, (Filter, CrossFilter)): + if not isinstance(filter, (Filter, CrossFilter, AggregateFilter)): msg = 'Unable to add Filter "{0}" to Tally ID="{1}" since it is ' \ 'not a Filter object'.format(filter, self.id) raise ValueError(msg) + # If the filter is already in the Tally, raise an error + if filter in self.filters: + msg = 'Unable to add a duplicate filter "{0}" to Tally ID="{1}" ' \ + 'since duplicate filters are not supported in the OpenMC ' \ + 'Python API'.format(filter, self.id) + raise ValueError(msg) + self._filters.append(filter) def add_nuclide(self, nuclide): @@ -477,11 +494,29 @@ class Tally(object): Parameters ---------- - nuclide : openmc.nuclide.Nuclide - Nuclide to add + nuclide : str, Nuclide, CrossNuclide or AggregateNuclide + Nuclide to add to the tally. The nuclide should be a Nuclide object + when a user is adding nuclides to a Tally for input file generation. + The nuclide is a str when a Tally is created from a StatePoint file + (e.g., 'H-1', 'U-235') unless a Summary has been linked with the + StatePoint. The nuclide may be a CrossNuclide or AggregateNuclide + for derived tallies created by tally arithmetic. """ + if not isinstance(nuclide, (basestring, Nuclide, + CrossNuclide, AggregateNuclide)): + msg = 'Unable to add nuclide "{0}" to Tally ID="{1}" since it is ' \ + 'not a Nuclide object'.format(nuclide) + raise ValueError(msg) + + # If the nuclide is already in the Tally, raise an error + if nuclide in self.nuclides: + msg = 'Unable to add a duplicate nuclide "{0}" to Tally ID="{1}" ' \ + 'since duplicate nuclides are not supported in the OpenMC ' \ + 'Python API'.format(nuclide, self.id) + raise ValueError(msg) + self._nuclides.append(nuclide) def add_score(self, score): @@ -489,19 +524,23 @@ class Tally(object): Parameters ---------- - score : str - Score to be accumulated, e.g. 'flux' + score : str, CrossScore or AggregateScore + A score to be accumulated (e.g., 'flux', 'nu-fission'). The score + should be a str when a user is adding scores to a Tally for input + file generation or when the Tally is created from a StatePoint. The + score may be a CrossScore or AggregateScore for derived tallies + created by tally arithmetic. """ - if not isinstance(score, (basestring, CrossScore)): + if not isinstance(score, (basestring, CrossScore, AggregateScore)): msg = 'Unable to add score "{0}" to Tally ID="{1}" since it is ' \ 'not a string'.format(score, self.id) raise ValueError(msg) # If the score is already in the Tally, raise an error if score in self.scores: - msg = 'Unable to add a duplicate score {0} to Tally ID="{1}" ' \ + msg = 'Unable to add a duplicate score "{0}" to Tally ID="{1}" ' \ 'since duplicate scores are not supported in the OpenMC ' \ 'Python API'.format(score, self.id) raise ValueError(msg) @@ -509,7 +548,7 @@ class Tally(object): # Normal score strings if isinstance(score, basestring): self._scores.append(score.strip()) - # CrossScores + # CrossScores and AggrgateScore else: self._scores.append(score) @@ -1599,8 +1638,12 @@ class Tally(object): raise ValueError(msg) new_tally = Tally() - new_tally.with_batch_statistics = True new_tally._derived = True + new_tally.with_batch_statistics = True + new_tally._num_realizations = self.num_realizations + new_tally._estimator = self.estimator + new_tally._with_summary = self.with_summary + new_tally._sp_filename = self._sp_filename # Construct a combined derived name from the two tally operands if self.name != '' and other.name != '': @@ -1698,14 +1741,21 @@ class Tally(object): new_score = CrossScore(self_score, other_score, binary_op) new_tally.add_score(new_score) - # Correct each Filter's stride - stride = new_tally.num_nuclides * new_tally.num_scores - for filter in reversed(new_tally.filters): - filter.stride = stride - stride *= filter.num_bins + # Update the new tally's filter strides + new_tally._update_filter_strides() return new_tally + def _update_filter_strides(self): + """Update each filter's stride based on the tally's nuclides and scores + for derived tallies created by tally arithmetic. + """ + + stride = self.num_nuclides * self.num_scores + for filter in reversed(self.filters): + filter.stride = stride + stride *= filter.num_bins + def _align_tally_data(self, other, filter_product, nuclide_product, score_product): """Aligns data from two tallies for tally arithmetic. @@ -1855,17 +1905,9 @@ class Tally(object): if other_index != i: other._swap_scores(score, other.scores[i]) - # Correct the stride for other filters - stride = other.num_nuclides * other.num_scores - for filter in reversed(other.filters): - filter.stride = stride - stride *= filter.num_bins - - # Correct the stride for self filters - stride = self.num_nuclides * self.num_scores - for filter in reversed(self.filters): - filter.stride = stride - stride *= filter.num_bins + # Update the tallies' filter strides + other._update_filter_strides() + self._update_filter_strides() data = {} data['self'] = {} @@ -1927,11 +1969,8 @@ class Tally(object): self.filters[filter1_index] = filter2 self.filters[filter2_index] = filter1 - # Update the strides for each of the filters - stride = self.num_nuclides * self.num_scores - for filter in reversed(self.filters): - filter.stride = stride - stride *= filter.num_bins + # Update the tally's filter strides + self._update_filter_strides() # Construct lists of tuples for the bins in each of the two filters filters = [filter1.type, filter2.type] @@ -2449,8 +2488,8 @@ class Tally(object): if isinstance(power, Tally): new_tally = self.hybrid_product(power, binary_op='^') - # If original tally operands were sparse, sparsify the new tally - if self.sparse and other.sparse: + # If original tally operand was sparse, sparsify the new tally + if self.sparse: new_tally.sparse = True elif isinstance(power, Real): @@ -2708,11 +2747,8 @@ class Tally(object): filter.bins = filter.bins[bin_indices] filter.num_bins = num_bins - # Correct each Filter's stride - stride = new_tally.num_nuclides * new_tally.num_scores - for filter in reversed(new_tally.filters): - filter.stride = stride - stride *= filter.num_bins + # Update the new tally's filter strides + new_tally._update_filter_strides() # If original tally was sparse, sparsify the sliced tally new_tally.sparse = self.sparse @@ -2758,69 +2794,107 @@ class Tally(object): A new tally which encapsulates the sum of data requested. """ - # If user did not specify any scores, do not sum across scores - if len(scores) == 0: - scores = [[]] - # Sum across any scores specified by the user - else: - scores = [[score] for score in scores] + # Create new derived Tally for summation + tally_sum = Tally() + tally_sum._derived = True + tally_sum._estimator = self.estimator + tally_sum._num_realizations = self.num_realizations + tally_sum.with_batch_statistics = self.with_batch_statistics + tally_sum._with_summary = self.with_summary + tally_sum._sp_filename = self._sp_filename + tally_sum._results_read = self._results_read - # If user did not specify any nuclides, do not sum across nuclides - if len(nuclides) == 0: - nuclides = [[]] - # Sum across any nuclides specified by the user - else: - nuclides = [[nuclide] for nuclide in nuclides] + # Get tally data arrays reshaped with one dimension per filter + mean = self.get_reshaped_data(value='mean') + std_dev = self.get_reshaped_data(value='std_dev') # Sum across any filter bins specified by the user if filter_type in _FILTER_TYPES: + filter = self.find_filter(filter_type) # If user did not specify filter bins, sum across all bins if len(filter_bins) == 0: - filter = self.find_filter(filter_type) - if filter.type == 'distribcell': - filter_bins = [[(i,)] for i in range(filter.num_bins)] + bin_indices = np.arange(filter.num_bins) + + if filter_type == 'distribcell': + filter_bins = np.arange(filter.num_bins) else: filter_bins = \ - [[(filter.get_bin(i),)] for i in range(filter.num_bins)] + [(filter.get_bin(i)) for i in range(filter.num_bins)] + + # Only sum across bins specified by the user else: - filter_bins = [[(filter_bin,)] for filter_bin in filter_bins] + bin_indices = \ + [filter.get_bin_index(i) for i in range(filter_bins)] - filters = [[filter_type]] - # If user did not specify a filter type, do not sum across filter bins + # Sum across the bins in the user-specified filter + for i, filter in enumerate(self.filters): + if filter.type == filter_type: + mean = np.take(mean, indices=bin_indices, axis=i) + std_dev = np.take(std_dev, indices=bin_indices, axis=i) + mean = np.sum(mean, axis=i, keepdims=True) + std_dev = np.sum(std_dev**2, axis=i, keepdims=True) + std_dev = np.sqrt(std_dev) + + # Add AggregateFilter to the tally sum + if not remove_filter: + filter_sum = AggregateFilter(filter, filter_bins, 'sum') + tally_sum.add_filter(filter_sum) + + # Add a copy of each filter not summed across to the tally sum + else: + tally_sum.add_filter(copy.deepcopy(filter)) + + # Add a copy of this tally's filters to the tally sum else: - filter_bins = [[]] - filters = [[]] + tally_sum._filters = copy.deepcopy(self.filters) - # Initialize Tally sum - tally_sum = 0 + # Sum across any nuclides specified by the user + if len(nuclides) != 0: + nuclide_bins = [self.get_nuclide_index(nuclide) for nuclide in nuclides] + axis_index = len(self.filters) + mean = np.take(mean, indices=nuclide_bins, axis=axis_index) + std_dev = np.take(std_dev, indices=nuclide_bins, axis=axis_index) + mean = np.sum(mean, axis=axis_index, keepdims=True) + std_dev = np.sum(std_dev**2, axis=axis_index, keepdims=True) + std_dev = np.sqrt(std_dev) - # Iterate over all Tally slice operands in summation - prod = [scores, filters, filter_bins, nuclides] - summed_filters = defaultdict(list) - for scores, filters, filter_bins, nuclides in itertools.product(*prod): - tally_slice = self.get_slice(scores, filters, filter_bins, nuclides) + # Add AggregateNuclide to the tally sum + nuclide_sum = AggregateNuclide(nuclides, 'sum') + tally_sum.add_nuclide(nuclide_sum) - # Remove filters summed across to avoid bulky CrossFilters - if filter_type: - filter = tally_slice.find_filter(filter_type) - tally_slice.remove_filter(filter) - summed_filters[filter_type].append(filter) - - # Accumulate this Tally slice into the Tally sum - tally_sum += tally_slice - - # Add back the filter(s) which were summed across to derived tally, - # if filter bins were input; otherwise, leave out summed filter(s) - if remove_filter and filter_type is not None: - # Rename tally sum indicating a summation over a particular filter - tally_sum.name = 'sum({0}, {1})'.format(self.name, filter_type) + # Add a copy of this tally's nuclides to the tally sum else: - for summed_filter_type in summed_filters: - filters = summed_filters[summed_filter_type] - for i in range(1, len(filters)): - filters[i] = CrossFilter(filters[i-1], filters[i], '+') - tally_sum.add_filter(filters[-1]) + tally_sum._nuclides = copy.deepcopy(self.nuclides) + + # Sum across any scores specified by the user + if len(scores) != 0: + score_bins = [self.get_score_index(score) for score in scores] + axis_index = self.num_nuclides + len(self.filters) + mean = np.take(mean, indices=score_bins, axis=axis_index) + std_dev = np.take(std_dev, indices=score_bins, axis=axis_index) + mean = np.sum(mean, axis=axis_index, keepdims=True) + std_dev = np.sum(std_dev**2, axis=axis_index, keepdims=True) + std_dev = np.sqrt(std_dev) + + # Add AggregateScore to the tally sum + score_sum = AggregateScore(scores, 'sum') + tally_sum.add_score(score_sum) + + # Add a copy of this tally's scores to the tally sum + else: + tally_sum._scores = copy.deepcopy(self.scores) + + # Update the tally sum's filter strides + tally_sum._update_filter_strides() + + # Reshape condensed data arrays with one dimension for all filters + mean = np.reshape(mean, tally_sum.shape) + std_dev = np.reshape(std_dev, tally_sum.shape) + + # Assign tally sum's data with the new arrays + tally_sum._mean = mean + tally_sum._std_dev = std_dev # If original tally was sparse, sparsify the tally summation tally_sum.sparse = self.sparse @@ -2887,11 +2961,8 @@ class Tally(object): new_tally._std_dev = np.zeros(new_tally.shape, dtype=np.float64) new_tally._std_dev[diag_indices, :, :] = self.std_dev - # Correct each Filter's stride - stride = new_tally.num_nuclides * new_tally.num_scores - for filter in reversed(new_tally.filters): - filter.stride = stride - stride *= filter.num_bins + # Update the new tally's filter strides + new_tally._update_filter_strides() # If original tally was sparse, sparsify the diagonalized tally new_tally.sparse = self.sparse From cace153a38845a8e94303a261a361213109b446f Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 14 Jan 2016 16:05:45 -0500 Subject: [PATCH 165/650] Fixed bugs in Tally summation with new Aggregate* classes --- openmc/aggregate.py | 18 ++++++++++++------ openmc/tallies.py | 6 +++--- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/openmc/aggregate.py b/openmc/aggregate.py index c77b94ad76..cef4365552 100644 --- a/openmc/aggregate.py +++ b/openmc/aggregate.py @@ -75,7 +75,7 @@ class AggregateScore(object): return existing def __repr__(self): - string = ''.join(map(str, self.scores)) + string = ', '.join(map(str, self.scores)) string = '{0}({1})'.format(self.aggregate_op, string) return string @@ -105,7 +105,7 @@ class AggregateNuclide(object): Parameters ---------- - nuclides : Iterable of Nuclide or CrossNuclide + nuclides : Iterable of str or Nuclide or CrossNuclide The nuclides included in the aggregation aggregate_op : str The tally aggregation operator (e.g., 'sum', 'mean', etc.) used @@ -113,7 +113,7 @@ class AggregateNuclide(object): Attributes ---------- - nuclides : Iterable of Nuclide or CrossNuclide + nuclides : Iterable of str or Nuclide or CrossNuclide The nuclides included in the aggregation aggregate_op : str The tally aggregation operator (e.g., 'sum', 'mean', etc.) used @@ -181,7 +181,8 @@ class AggregateNuclide(object): @nuclides.setter def nuclides(self, nuclides): - cv.check_iterable_type('nuclides', nuclides, (Nuclide, CrossNuclide)) + cv.check_iterable_type('nuclides', nuclides, + (basestring, Nuclide, CrossNuclide)) self._nuclides = nuclides @aggregate_op.setter @@ -359,7 +360,7 @@ class AggregateFilter(object): else: return 0 - def get_pandas_dataframe(self, datasize): + def get_pandas_dataframe(self, datasize, summary=None): """Builds a Pandas DataFrame for the AggregateFilter's bins. This method constructs a Pandas DataFrame object for the AggregateFilter @@ -370,6 +371,11 @@ class AggregateFilter(object): ---------- datasize : Integral The total number of bins in the tally corresponding to this filter + summary : None or Summary + An optional Summary object to be used to construct columns for + distribcell tally filters (default is None). NOTE: This parameter + is not used by the AggregateFilter and simply mirrors the method + signature for the CrossFilter. Returns ------- @@ -393,7 +399,7 @@ class AggregateFilter(object): # Construct a sring representing the filter aggregation aggregate_bin = '{0}('.format(self.aggregate_op) - aggregate_bin += ', '.join(self.bins) + ')' + aggregate_bin += ', '.join(map(str, self.bins)) + ')' # Construct NumPy array of bin repeated for each element in dataframe aggregate_bin_array = np.array([aggregate_bin]) diff --git a/openmc/tallies.py b/openmc/tallies.py index 097d7de3d9..601a4068a6 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -2825,7 +2825,7 @@ class Tally(object): # Only sum across bins specified by the user else: bin_indices = \ - [filter.get_bin_index(i) for i in range(filter_bins)] + [filter.get_bin_index(bin) for bin in filter_bins] # Sum across the bins in the user-specified filter for i, filter in enumerate(self.filters): @@ -2852,7 +2852,7 @@ class Tally(object): # Sum across any nuclides specified by the user if len(nuclides) != 0: nuclide_bins = [self.get_nuclide_index(nuclide) for nuclide in nuclides] - axis_index = len(self.filters) + axis_index = self.num_filters mean = np.take(mean, indices=nuclide_bins, axis=axis_index) std_dev = np.take(std_dev, indices=nuclide_bins, axis=axis_index) mean = np.sum(mean, axis=axis_index, keepdims=True) @@ -2870,7 +2870,7 @@ class Tally(object): # Sum across any scores specified by the user if len(scores) != 0: score_bins = [self.get_score_index(score) for score in scores] - axis_index = self.num_nuclides + len(self.filters) + axis_index = self.num_filters + self.num_nuclides mean = np.take(mean, indices=score_bins, axis=axis_index) std_dev = np.take(std_dev, indices=score_bins, axis=axis_index) mean = np.sum(mean, axis=axis_index, keepdims=True) From 95e6d27bd99724ad040bb8bb8a36cf5b517b5b9c Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 14 Jan 2016 18:03:20 -0500 Subject: [PATCH 166/650] Renamed local filter variables so as not to shadow Python built-in filter method --- openmc/aggregate.py | 26 +++--- openmc/filter.py | 18 ++--- openmc/mgxs/mgxs.py | 14 ++-- openmc/statepoint.py | 46 +++++------ openmc/summary.py | 6 +- openmc/tallies.py | 189 ++++++++++++++++++++++--------------------- 6 files changed, 151 insertions(+), 148 deletions(-) diff --git a/openmc/aggregate.py b/openmc/aggregate.py index cef4365552..908ca4b5c5 100644 --- a/openmc/aggregate.py +++ b/openmc/aggregate.py @@ -218,17 +218,17 @@ class AggregateFilter(object): """ - def __init__(self, filter=None, bins=None, aggregate_op=None): + def __init__(self, aggregate_filter=None, bins=None, aggregate_op=None): - self._type = '{0}({1})'.format(aggregate_op, filter.type) + self._type = '{0}({1})'.format(aggregate_op, aggregate_filter.type) self._bins = None self._stride = None - self._filter = None + self._aggregate_filter = None self._aggregate_op = None - if filter is not None: - self.filter = filter + if aggregate_filter is not None: + self.aggregate_filter = aggregate_filter if bins is not None: self.bins = bins if aggregate_op is not None: @@ -256,7 +256,7 @@ class AggregateFilter(object): if existing is None: clone = type(self).__new__(type(self)) clone._type = self.type - clone._filter = self.filter + clone._filter = self.aggregate_filter clone._aggregate_op = self.aggregate_op clone._bins = self._bins clone._stride = self.stride @@ -270,8 +270,8 @@ class AggregateFilter(object): return existing @property - def filter(self): - return self._filter + def aggregate_filter(self): + return self._aggregate_filter @property def aggregate_op(self): @@ -287,7 +287,7 @@ class AggregateFilter(object): @property def num_bins(self): - if self.filter: + if self.aggregate_filter: return 1 else: return 0 @@ -305,10 +305,10 @@ class AggregateFilter(object): self._type = filter_type - @filter.setter - def filter(self, filter): - cv.check_type('filter', filter, (Filter, CrossFilter)) - self._filter = filter + @aggregate_filter.setter + def aggregate_filter(self, aggregate_filter): + cv.check_type('aggregate_filter', aggregate_filter, (Filter, CrossFilter)) + self._aggregate_filter = aggregate_filter @bins.setter def bins(self, bins): diff --git a/openmc/filter.py b/openmc/filter.py index d61fb648f6..4d12d7561b 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -227,12 +227,12 @@ class Filter(object): self._stride = stride - def can_merge(self, filter): + def can_merge(self, other): """Determine if filter can be merged with another. Parameters ---------- - filter : Filter + other : Filter Filter to compare with Returns @@ -242,11 +242,11 @@ class Filter(object): """ - if not isinstance(filter, Filter): + if not isinstance(other, Filter): return False # Filters must be of the same type - elif self.type != filter.type: + elif self.type != other.type: return False # Distribcell filters cannot have more than one bin @@ -264,12 +264,12 @@ class Filter(object): else: return True - def merge(self, filter): + def merge(self, other): """Merge this filter with another. Parameters ---------- - filter : Filter + other : Filter Filter to merge with Returns @@ -279,16 +279,16 @@ class Filter(object): """ - if not self.can_merge(filter): + if not self.can_merge(other): msg = 'Unable to merge "{0}" with "{1}" ' \ - 'filters'.format(self.type, filter.type) + 'filters'.format(self.type, other.type) raise ValueError(msg) # Create deep copy of filter to return as merged filter merged_filter = copy.deepcopy(self) # Merge unique filter bins - merged_bins = list(set(np.concatenate((self.bins, filter.bins)))) + merged_bins = list(set(np.concatenate((self.bins, other.bins)))) merged_filter.bins = merged_bins merged_filter.num_bins = len(merged_bins) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 47154357ef..e20a6a320e 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -521,8 +521,8 @@ class MGXS(object): self.tallies[key].add_trigger(trigger_clone) # Add all non-domain specific Filters (e.g., 'energy') to the Tally - for filter in filters: - self.tallies[key].add_filter(filter) + for add_filter in filters: + self.tallies[key].add_filter(add_filter) # If this is a by-nuclide cross-section, add all nuclides to Tally if self.by_nuclide and score != 'flux': @@ -787,15 +787,15 @@ class MGXS(object): std_dev = tally.get_reshaped_data(value='std_dev') # Sum across all applicable fine energy group filters - for i, filter in enumerate(tally.filters): - if 'energy' not in filter.type: + for i, tally_filter in enumerate(tally.filters): + if 'energy' not in tally_filter.type: continue - elif len(filter.bins) != len(fine_edges): + elif len(tally_filter.bins) != len(fine_edges): continue - elif not np.allclose(filter.bins, fine_edges): + elif not np.allclose(tally_filter.bins, fine_edges): continue else: - filter.bins = coarse_groups.group_edges + tally_filter.bins = coarse_groups.group_edges mean = np.add.reduceat(mean, energy_indices, axis=i) std_dev = np.add.reduceat(std_dev**2, energy_indices, axis=i) std_dev = np.sqrt(std_dev) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 3c0759f124..76a14a80cf 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -377,18 +377,18 @@ class StatePoint(object): bins = self._f['{0}{1}/bins'.format(subbase, j)].value # Create Filter object - filter = openmc.Filter(filter_type, bins) - filter.num_bins = n_bins + new_filter = openmc.Filter(filter_type, bins) + new_filter.num_bins = n_bins if filter_type == 'mesh': mesh_ids = self._f['tallies/meshes/ids'].value mesh_keys = self._f['tallies/meshes/keys'].value key = mesh_keys[mesh_ids == bins][0] - filter.mesh = self.meshes[key] + new_filter.mesh = self.meshes[key] # Add Filter to the Tally - tally.add_filter(filter) + tally.add_filter(new_filter) # Read Nuclide bins nuclide_names = \ @@ -406,11 +406,11 @@ class StatePoint(object): # Compute and set the filter strides for i in range(n_filters): - filter = tally.filters[i] - filter.stride = n_score_bins * len(nuclide_names) + tally_filter = tally.filters[i] + tally_filter.stride = n_score_bins * len(nuclide_names) for j in range(i+1, n_filters): - filter.stride *= tally.filters[j].num_bins + tally_filter.stride *= tally.filters[j].num_bins # Read scattering moment order strings (e.g., P3, Y1,2, etc.) moments = self._f['{0}{1}/moment_orders'.format( @@ -544,13 +544,13 @@ class StatePoint(object): contains_filters = True # Iterate over the Filters requested by the user - for filter in filters: + for outer_filter in filters: contains_filters = False # Test if requested filter is a subset of any of the test # tally's filters and if so continue to next filter - for test_filter in test_tally.filters: - if test_filter.is_subset(filter): + for inner_filter in test_tally.filters: + if inner_filter.is_subset(outer_filter): contains_filters = True break @@ -616,29 +616,29 @@ class StatePoint(object): tally.name = summary.tallies[tally_id].name tally.with_summary = True - for filter in tally.filters: - if filter.type == 'surface': + for tally_filter in tally.filters: + if tally_filter.type == 'surface': surface_ids = [] - for bin in filter.bins: + for bin in tally_filter.bins: surface_ids.append(summary.surfaces[bin].id) - filter.bins = surface_ids + tally_filter.bins = surface_ids - if filter.type in ['cell', 'distribcell']: + if tally_filter.type in ['cell', 'distribcell']: distribcell_ids = [] - for bin in filter.bins: + for bin in tally_filter.bins: distribcell_ids.append(summary.cells[bin].id) - filter.bins = distribcell_ids + tally_filter.bins = distribcell_ids - if filter.type == 'universe': + if tally_filter.type == 'universe': universe_ids = [] - for bin in filter.bins: + for bin in tally_filter.bins: universe_ids.append(summary.universes[bin].id) - filter.bins = universe_ids + tally_filter.bins = universe_ids - if filter.type == 'material': + if tally_filter.type == 'material': material_ids = [] - for bin in filter.bins: + for bin in tally_filter.bins: material_ids.append(summary.materials[bin].id) - filter.bins = material_ids + tally_filter.bins = material_ids self._summary = summary diff --git a/openmc/summary.py b/openmc/summary.py index ad1dd67cae..eb14d3bb81 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -556,11 +556,11 @@ class Summary(object): bins = self._f['{0}/bins'.format(subsubbase)][...] # Create Filter object - filter = openmc.Filter(filter_type, bins) - filter.num_bins = num_bins + new_filter = openmc.Filter(filter_type, bins) + new_filter.num_bins = num_bins # Add Filter to the Tally - tally.add_filter(filter) + tally.add_filter(new_filter) # Add Tally to the global dictionary of all Tallies self.tallies[tally_id] = tally diff --git a/openmc/tallies.py b/openmc/tallies.py index 601a4068a6..b0265b841a 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -144,8 +144,8 @@ class Tally(object): clone._results_read = self._results_read clone._filters = [] - for filter in self.filters: - clone.add_filter(copy.deepcopy(filter, memo)) + for self_filter in self.filters: + clone.add_filter(copy.deepcopy(self_filter, memo)) clone._nuclides = [] for nuclide in self.nuclides: @@ -175,8 +175,8 @@ class Tally(object): if len(self.filters) != len(other.filters): return False - for filter in self.filters: - if filter not in other.filters: + for self_filter in self.filters: + if self_filter not in other.filters: return False # Check all nuclides @@ -213,9 +213,9 @@ class Tally(object): string += '{0: <16}{1}\n'.format('\tFilters', '=\t') - for filter in self.filters: - string += '{0: <16}\t\t{1}\t{2}\n'.format('', filter.type, - filter.bins) + for self_filter in self.filters: + string += '{0: <16}\t\t{1}\t{2}\n'.format('', self_filter.type, + self_filter.bins) string += '{0: <16}{1}'.format('\tNuclides', '=\t') @@ -268,8 +268,8 @@ class Tally(object): def num_filter_bins(self): num_bins = 1 - for filter in self.filters: - num_bins *= filter.num_bins + for self_filter in self.filters: + num_bins *= self_filter.num_bins return num_bins @@ -460,12 +460,12 @@ class Tally(object): else: self._name = '' - def add_filter(self, filter): + def add_filter(self, new_filter): """Add a filter to the tally Parameters ---------- - filter : Filter, CrossFilter or AggregateFilter + new_filter : Filter, CrossFilter or AggregateFilter A filter to specify a discretization of the tally across some dimension (e.g., 'energy', 'cell'). The filter should be a Filter object when a user is adding filters to a Tally for input file @@ -475,19 +475,19 @@ class Tally(object): """ - if not isinstance(filter, (Filter, CrossFilter, AggregateFilter)): + if not isinstance(new_filter, (Filter, CrossFilter, AggregateFilter)): msg = 'Unable to add Filter "{0}" to Tally ID="{1}" since it is ' \ - 'not a Filter object'.format(filter, self.id) + 'not a Filter object'.format(new_filter, self.id) raise ValueError(msg) # If the filter is already in the Tally, raise an error - if filter in self.filters: + if new_filter in self.filters: msg = 'Unable to add a duplicate filter "{0}" to Tally ID="{1}" ' \ 'since duplicate filters are not supported in the OpenMC ' \ - 'Python API'.format(filter, self.id) + 'Python API'.format(new_filter, self.id) raise ValueError(msg) - self._filters.append(filter) + self._filters.append(new_filter) def add_nuclide(self, nuclide): """Specify that scores for a particular nuclide should be accumulated @@ -640,22 +640,22 @@ class Tally(object): self._scores.remove(score) - def remove_filter(self, filter): + def remove_filter(self, old_filter): """Remove a filter from the tally Parameters ---------- - filter : openmc.filter.Filter + old_filter : openmc.filter.Filter Filter to remove """ - if filter not in self.filters: + if old_filter not in self.filters: msg = 'Unable to remove filter "{0}" from Tally ID="{1}" since the ' \ - 'Tally does not contain this filter'.format(filter, self.id) + 'Tally does not contain this filter'.format(old_filter, self.id) ValueError(msg) - self._filters.remove(filter) + self._filters.remove(old_filter) def remove_nuclide(self, nuclide): """Remove a nuclide from the tally @@ -799,13 +799,13 @@ class Tally(object): element.set("name", self.name) # Optional Tally filters - for filter in self.filters: + for self_filter in self.filters: subelement = ET.SubElement(element, "filter") - subelement.set("type", str(filter.type)) + subelement.set("type", str(self_filter.type)) - if filter.bins is not None: + if self_filter.bins is not None: bins = '' - for bin in filter.bins: + for bin in self_filter.bins: bins += '{0} '.format(bin) subelement.set("bins", bins.rstrip(' ')) @@ -857,7 +857,7 @@ class Tally(object): Returns ------- - filter : openmc.filter.Filter + filter_found : openmc.filter.Filter Filter from this tally with matching type, or None if no matching Filter is found @@ -868,21 +868,21 @@ class Tally(object): """ - filter = None + filter_found = None # Look through all of this Tally's Filters for the type requested for test_filter in self.filters: if test_filter.type == filter_type: - filter = test_filter + filter_found = test_filter break # If we did not find the Filter, throw an Exception - if filter is None: + if filter_found is None: msg = 'Unable to find filter type "{0}" in ' \ 'Tally ID="{1}"'.format(filter_type, self.id) raise ValueError(msg) - return filter + return filter_found def get_filter_index(self, filter_type, filter_bin): """Returns the index in the Tally's results array for a Filter bin @@ -907,10 +907,10 @@ class Tally(object): """ # Find the equivalent Filter in this Tally's list of Filters - filter = self.find_filter(filter_type) + filter_found = self.find_filter(filter_type) # Get the index for the requested bin from the Filter and return it - filter_index = filter.get_bin_index(filter_bin) + filter_index = filter_found.get_bin_index(filter_bin) return filter_index def get_nuclide_index(self, nuclide): @@ -1030,12 +1030,12 @@ class Tally(object): filter_indices = [] # Loop over all of the Tally's Filters - for i, filter in enumerate(self.filters): + for i, self_filter in enumerate(self.filters): user_filter = False # If a user-requested Filter, get the user-requested bins for j, test_filter in enumerate(filters): - if filter.type == test_filter: + if self_filter.type == test_filter: bins = filter_bins[j] user_filter = True break @@ -1043,36 +1043,36 @@ class Tally(object): # If not a user-requested Filter, get all bins if not user_filter: # Create list of 2- or 3-tuples tuples for mesh cell bins - if filter.type == 'mesh': - dimension = filter.mesh.dimension + if self_filter.type == 'mesh': + dimension = self_filter.mesh.dimension xyz = map(lambda x: np.arange(1, x+1), dimension) bins = list(itertools.product(*xyz)) # Create list of 2-tuples for energy boundary bins - elif filter.type in ['energy', 'energyout']: + elif self_filter.type in ['energy', 'energyout']: bins = [] - for k in range(filter.num_bins): - bins.append((filter.bins[k], filter.bins[k+1])) + for k in range(self_filter.num_bins): + bins.append((self_filter.bins[k], self_filter.bins[k+1])) # Create list of cell instance IDs for distribcell Filters - elif filter.type == 'distribcell': - bins = np.arange(filter.num_bins) + elif self_filter.type == 'distribcell': + bins = np.arange(self_filter.num_bins) # Create list of IDs for bins for all other filter types else: - bins = filter.bins + bins = self_filter.bins # Initialize a NumPy array for the Filter bin indices filter_indices.append(np.zeros(len(bins), dtype=np.int)) # Add indices for each bin in this Filter to the list for j, bin in enumerate(bins): - filter_index = self.get_filter_index(filter.type, bin) + filter_index = self.get_filter_index(self_filter.type, bin) filter_indices[i][j] = filter_index # Account for stride in each of the previous filters for indices in filter_indices[:i]: - indices *= filter.num_bins + indices *= self_filter.num_bins # Apply outer product sum between all filter bin indices filter_indices = list(map(sum, itertools.product(*filter_indices))) @@ -1314,8 +1314,8 @@ class Tally(object): if filters: # Append each Filter's DataFrame to the overall DataFrame - for filter in self.filters: - filter_df = filter.get_pandas_dataframe(data_size, summary) + for self_filter in self.filters: + filter_df = self_filter.get_pandas_dataframe(data_size, summary) df = pd.concat([df, filter_df], axis=1) # Include DataFrame column for nuclides if user requested it @@ -1404,8 +1404,8 @@ class Tally(object): # Build a new array shape with one dimension per filter new_shape = () - for filter in self.filters: - new_shape += (filter.num_bins, ) + for self_filter in self.filters: + new_shape += (self_filter.num_bins, ) new_shape += (self.num_nuclides,) new_shape += (self.num_scores,) @@ -1498,8 +1498,9 @@ class Tally(object): # Create an HDF5 sub-group for the Filters filter_group = tally_group.create_group('filters') - for filter in self.filters: - filter_group.create_dataset(filter.type, data=filter.bins) + for self_filter in self.filters: + filter_group.create_dataset(self_filter.type, + filter=self_filter.bins) # Add all results to the main HDF5 group for the Tally tally_group.create_dataset('sum', data=self.sum) @@ -1542,8 +1543,8 @@ class Tally(object): tally_group['filters'] = {} filter_group = tally_group['filters'] - for filter in self.filters: - filter_group[filter.type] = filter.bins + for self_filter in self.filters: + filter_group[self_filter.type] = self_filter.bins # Add all results to the main sub-dictionary for the Tally tally_group['sum'] = self.sum @@ -1752,9 +1753,9 @@ class Tally(object): """ stride = self.num_nuclides * self.num_scores - for filter in reversed(self.filters): - filter.stride = stride - stride *= filter.num_bins + for self_filter in reversed(self.filters): + self_filter.stride = stride + stride *= self_filter.num_bins def _align_tally_data(self, other, filter_product, nuclide_product, score_product): @@ -1798,26 +1799,26 @@ class Tally(object): set(other.filters).difference(set(self.filters)) # Add filters present in self but not in other to other - for filter in other_missing_filters: - filter = copy.deepcopy(filter) - other._mean = np.repeat(other.mean, filter.num_bins, axis=0) - other._std_dev = np.repeat(other.std_dev, filter.num_bins, axis=0) - other.add_filter(filter) + for other_filter in other_missing_filters: + filter_copy = copy.deepcopy(other_filter) + other._mean = np.repeat(other.mean, filter_copy.num_bins, axis=0) + other._std_dev = np.repeat(other.std_dev, filter_copy.num_bins, axis=0) + other.add_filter(filter_copy) # Add filters present in other but not in self to self - for filter in self_missing_filters: - filter = copy.deepcopy(filter) - self._mean = np.repeat(self.mean, filter.num_bins, axis=0) - self._std_dev = np.repeat(self.std_dev, filter.num_bins, axis=0) - self.add_filter(filter) + for self_filter in self_missing_filters: + filter_copy = copy.deepcopy(self_filter) + self._mean = np.repeat(self.mean, filter_copy.num_bins, axis=0) + self._std_dev = np.repeat(self.std_dev, filter_copy.num_bins, axis=0) + self.add_filter(filter_copy) # Align other filters with self filters - for i, filter in enumerate(self.filters): - other_index = other.filters.index(filter) + for i, self_filter in enumerate(self.filters): + other_index = other.filters.index(self_filter) # If necessary, swap other filter if other_index != i: - other._swap_filters(filter, other.filters[i]) + other._swap_filters(self_filter, other.filters[i]) # Repeat and tile the data by nuclide in preparation for performing # the tensor product across nuclides. @@ -1975,7 +1976,7 @@ class Tally(object): # Construct lists of tuples for the bins in each of the two filters filters = [filter1.type, filter2.type] if filter1.type == 'distribcell': - filter1_bins = np.arange(filter.num_bins) + filter1_bins = np.arange(filter1.num_bins) else: filter1_bins = [(filter1.get_bin(i)) for i in range(filter1.num_bins)] @@ -2200,8 +2201,8 @@ class Tally(object): new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - for filter in self.filters: - new_tally.add_filter(filter) + for self_filter in self.filters: + new_tally.add_filter(self_filter) for nuclide in self.nuclides: new_tally.add_nuclide(nuclide) for score in self.scores: @@ -2274,8 +2275,8 @@ class Tally(object): new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - for filter in self.filters: - new_tally.add_filter(filter) + for self_filter in self.filters: + new_tally.add_filter(self_filter) for nuclide in self.nuclides: new_tally.add_nuclide(nuclide) for score in self.scores: @@ -2349,8 +2350,8 @@ class Tally(object): new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - for filter in self.filters: - new_tally.add_filter(filter) + for self_filter in self.filters: + new_tally.add_filter(self_filter) for nuclide in self.nuclides: new_tally.add_nuclide(nuclide) for score in self.scores: @@ -2424,8 +2425,8 @@ class Tally(object): new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - for filter in self.filters: - new_tally.add_filter(filter) + for self_filter in self.filters: + new_tally.add_filter(self_filter) for nuclide in self.nuclides: new_tally.add_nuclide(nuclide) for score in self.scores: @@ -2503,8 +2504,8 @@ class Tally(object): new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - for filter in self.filters: - new_tally.add_filter(filter) + for self_filter in self.filters: + new_tally.add_filter(self_filter) for nuclide in self.nuclides: new_tally.add_nuclide(nuclide) for score in self.scores: @@ -2726,26 +2727,26 @@ class Tally(object): # Determine the filter indices from any of the requested filters for i, filter_type in enumerate(filters): - filter = new_tally.find_filter(filter_type) + find_filter = new_tally.find_filter(filter_type) # Remove and/or reorder filter bins to user specifications bin_indices = [] num_bins = 0 for filter_bin in filter_bins[i]: - bin_index = filter.get_bin_index(filter_bin) + bin_index = find_filter.get_bin_index(filter_bin) if filter_type in ['energy', 'energyout']: bin_indices.extend([bin_index, bin_index+1]) num_bins += 1 elif filter_type == 'distribcell': bin_indices = [0] - num_bins = filter.num_bins + num_bins = find_filter.num_bins else: bin_indices.append(bin_index) num_bins += 1 - filter.bins = filter.bins[bin_indices] - filter.num_bins = num_bins + find_filter.bins = find_filter.bins[bin_indices] + find_filter.num_bins = num_bins # Update the new tally's filter strides new_tally._update_filter_strides() @@ -2810,26 +2811,27 @@ class Tally(object): # Sum across any filter bins specified by the user if filter_type in _FILTER_TYPES: - filter = self.find_filter(filter_type) + find_filter = self.find_filter(filter_type) # If user did not specify filter bins, sum across all bins if len(filter_bins) == 0: - bin_indices = np.arange(filter.num_bins) + bin_indices = np.arange(find_filter.num_bins) if filter_type == 'distribcell': - filter_bins = np.arange(filter.num_bins) + filter_bins = np.arange(find_filter.num_bins) else: + num_bins = find_filter.num_bins filter_bins = \ - [(filter.get_bin(i)) for i in range(filter.num_bins)] + [(find_filter.get_bin(i)) for i in range(num_bins)] # Only sum across bins specified by the user else: bin_indices = \ - [filter.get_bin_index(bin) for bin in filter_bins] + [find_filter.get_bin_index(bin) for bin in filter_bins] # Sum across the bins in the user-specified filter - for i, filter in enumerate(self.filters): - if filter.type == filter_type: + for i, self_filter in enumerate(self.filters): + if self_filter.type == filter_type: mean = np.take(mean, indices=bin_indices, axis=i) std_dev = np.take(std_dev, indices=bin_indices, axis=i) mean = np.sum(mean, axis=i, keepdims=True) @@ -2838,12 +2840,13 @@ class Tally(object): # Add AggregateFilter to the tally sum if not remove_filter: - filter_sum = AggregateFilter(filter, filter_bins, 'sum') + filter_sum = \ + AggregateFilter(self_filter, filter_bins, 'sum') tally_sum.add_filter(filter_sum) # Add a copy of each filter not summed across to the tally sum else: - tally_sum.add_filter(copy.deepcopy(filter)) + tally_sum.add_filter(copy.deepcopy(self_filter)) # Add a copy of this tally's filters to the tally sum else: From d6b30e9b370036e3c2ba71493f9db9afd257a01e Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 14 Jan 2016 18:14:10 -0500 Subject: [PATCH 167/650] Fixed small issue with new _aggregate_filter property in AggregateFilter created with last commit --- openmc/aggregate.py | 2 +- openmc/statepoint.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/openmc/aggregate.py b/openmc/aggregate.py index 908ca4b5c5..70ce3685cd 100644 --- a/openmc/aggregate.py +++ b/openmc/aggregate.py @@ -256,7 +256,7 @@ class AggregateFilter(object): if existing is None: clone = type(self).__new__(type(self)) clone._type = self.type - clone._filter = self.aggregate_filter + clone._aggregate_filter = self.aggregate_filter clone._aggregate_op = self.aggregate_op clone._bins = self._bins clone._stride = self.stride diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 76a14a80cf..49ac43590e 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -3,6 +3,7 @@ import re import numpy as np import openmc +import openmc.checkvalue as cv if sys.version > '3': long = int From 148e01eec0c3b5d91fb5b1511fa28c8405a542b1 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 15 Jan 2016 06:29:41 -0600 Subject: [PATCH 168/650] Address more comments on pull request #556. --- .../pythonapi/examples/mgxs-part-i.ipynb | 4 +- .../pythonapi/examples/mgxs-part-ii.ipynb | 4 +- .../pythonapi/examples/mgxs-part-iii.ipynb | 4 +- .../examples/pandas-dataframes.ipynb | 4 +- .../pythonapi/examples/post-processing.ipynb | 4 +- .../pythonapi/examples/tally-arithmetic.ipynb | 4 +- docs/source/usersguide/input.rst | 2 +- examples/python/basic/build-xml.py | 4 +- examples/python/boxes/build-xml.py | 4 +- .../python/lattice/hexagonal/build-xml.py | 4 +- examples/python/lattice/nested/build-xml.py | 4 +- examples/python/lattice/simple/build-xml.py | 4 +- examples/python/pincell/build-xml.py | 4 +- examples/python/reflective/build-xml.py | 4 +- openmc/source.py | 4 +- openmc/stats/multivariate.py | 117 +++++------------- openmc/stats/univariate.py | 78 ++++-------- tests/input_set.py | 4 +- tests/test_distribmat/test_distribmat.py | 4 +- tests/test_source/test_source.py | 6 +- 20 files changed, 86 insertions(+), 181 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index 8b08fea2f4..94deeec7b4 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -147,7 +147,7 @@ "import openmc\n", "import openmc.mgxs as mgxs\n", "from openmc.source import Source\n", - "from openmc.stats import SpatialBox\n", + "from openmc.stats import Box\n", "\n", "%matplotlib inline" ] @@ -343,7 +343,7 @@ "settings_file.particles = particles\n", "settings_file.output = {'tallies': True, 'summary': True}\n", "bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", - "settings_file.source = Source(space=SpatialBox(\n", + "settings_file.source = Source(space=Box(\n", " bounds[:3], bounds[3:], only_fissionable=True))\n", "\n", "# Export to \"settings.xml\"\n", diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index 9677acf56e..b41b322410 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -53,7 +53,7 @@ "import openmc\n", "import openmc.mgxs as mgxs\n", "from openmc.source import Source\n", - "from openmc.stats import SpatialBox\n", + "from openmc.stats import Box\n", "import openmoc\n", "from openmoc.compatible import get_openmoc_geometry\n", "import pyne.ace\n", @@ -288,7 +288,7 @@ "settings_file.particles = particles\n", "settings_file.output = {'tallies': True, 'summary': True}\n", "bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", - "settings_file.source = Source(space=SpatialBox(\n", + "settings_file.source = Source(space=Box(\n", " bounds[:3], bounds[3:], only_fissionable=True))\n", "\n", "# Activate tally precision triggers\n", diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index 8be69abda7..119fd0b564 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -53,7 +53,7 @@ "from openmc.statepoint import StatePoint\n", "from openmc.summary import Summary\n", "from openmc.source import Source\n", - "from openmc.stats import SpatialBox\n", + "from openmc.stats import Box\n", "\n", "import openmoc\n", "import openmoc.process\n", @@ -394,7 +394,7 @@ "settings_file.particles = particles\n", "settings_file.output = {'tallies': False, 'summary': True}\n", "source_bounds = [-10.71, -10.71, -10, 10.71, 10.71, 10.]\n", - "settings_file.source = Source(SpatialBox(\n", + "settings_file.source = Source(Box(\n", " source_bounds[:3], source_bounds[3:], only_fissionable=True))\n", "\n", "# Export to \"settings.xml\"\n", diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index 70c00b3395..60c2c1c403 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -27,7 +27,7 @@ "from openmc.statepoint import StatePoint\n", "from openmc.summary import Summary\n", "from openmc.source import Source\n", - "from openmc.stats import SpatialBox\n", + "from openmc.stats import Box\n", "\n", "%matplotlib inline" ] @@ -306,7 +306,7 @@ "settings_file.trigger_active = True\n", "settings_file.trigger_max_batches = max_batches\n", "source_bounds = [-10.71, -10.71, -10, 10.71, 10.71, 10.]\n", - "settings_file.source = Source(space=SpatialBox(\n", + "settings_file.source = Source(space=Box(\n", " source_bounds[:3], source_bounds[3:]))\n", "\n", "# Export to \"settings.xml\"\n", diff --git a/docs/source/pythonapi/examples/post-processing.ipynb b/docs/source/pythonapi/examples/post-processing.ipynb index a2e8ebd366..7fbca68644 100644 --- a/docs/source/pythonapi/examples/post-processing.ipynb +++ b/docs/source/pythonapi/examples/post-processing.ipynb @@ -22,7 +22,7 @@ "import openmc\n", "from openmc.statepoint import StatePoint\n", "from openmc.source import Source\n", - "from openmc.stats import SpatialBox\n", + "from openmc.stats import Box\n", "\n", "%matplotlib inline" ] @@ -274,7 +274,7 @@ "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", "source_bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", - "settings_file.source = Source(space=SpatialBox(\n", + "settings_file.source = Source(space=Box(\n", " source_bounds[:3], source_bounds[3:]))\n", "\n", "# Export to \"settings.xml\"\n", diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index de6b3c6a54..87cdc9b663 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -37,7 +37,7 @@ "from openmc.statepoint import StatePoint\n", "from openmc.summary import Summary\n", "from openmc.source import Source\n", - "from openmc.stats import SpatialBox\n", + "from openmc.stats import Box\n", "\n", "%matplotlib inline" ] @@ -290,7 +290,7 @@ "settings_file.particles = particles\n", "settings_file.output = {'tallies': True, 'summary': True}\n", "source_bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", - "settings_file.source = Source(space=SpatialBox(\n", + "settings_file.source = Source(space=Box(\n", " source_bounds[:3], source_bounds[3:]))\n", "\n", "# Export to \"settings.xml\"\n", diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 2c14cf7f84..2eb5262dfd 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -469,7 +469,7 @@ attributes/sub-elements: three real numbers which specify the (x,y,z) location of an isotropic point source. - For an "independent" distributoin, no parameters are specified. Instead, + For an "independent" distribution, no parameters are specified. Instead, the ``x``, ``y``, and ``z`` elements must be specified. *Default*: None diff --git a/examples/python/basic/build-xml.py b/examples/python/basic/build-xml.py index adb790268e..97591c9920 100644 --- a/examples/python/basic/build-xml.py +++ b/examples/python/basic/build-xml.py @@ -1,6 +1,6 @@ import openmc from openmc.source import Source -from openmc.stats import SpatialBox +from openmc.stats import Box ############################################################################### # Simulation Input File Parameters @@ -94,7 +94,7 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.source = Source(space=SpatialBox([-4, -4, -4], [4, 4, 4])) +settings_file.source = Source(space=Box([-4, -4, -4], [4, 4, 4])) settings_file.export_to_xml() diff --git a/examples/python/boxes/build-xml.py b/examples/python/boxes/build-xml.py index 7debc87a13..2ae3ee6129 100644 --- a/examples/python/boxes/build-xml.py +++ b/examples/python/boxes/build-xml.py @@ -2,7 +2,7 @@ import numpy as np import openmc from openmc.source import Source -from openmc.stats import SpatialBox +from openmc.stats import Box ############################################################################### # Simulation Input File Parameters @@ -119,7 +119,7 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.source = Source(space=SpatialBox(*outer_cube.bounding_box)) +settings_file.source = Source(space=Box(*outer_cube.bounding_box)) settings_file.export_to_xml() ############################################################################### diff --git a/examples/python/lattice/hexagonal/build-xml.py b/examples/python/lattice/hexagonal/build-xml.py index 0dc8108b56..1125e8ce04 100644 --- a/examples/python/lattice/hexagonal/build-xml.py +++ b/examples/python/lattice/hexagonal/build-xml.py @@ -1,6 +1,6 @@ import openmc from openmc.source import Source -from openmc.stats import SpatialBox +from openmc.stats import Box ############################################################################### # Simulation Input File Parameters @@ -126,7 +126,7 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.source = Source(space=SpatialBox( +settings_file.source = Source(space=Box( [-1, -1, -1], [1, 1, 1])) settings_file.keff_trigger = {'type' : 'std_dev', 'threshold' : 5E-4} settings_file.trigger_active = True diff --git a/examples/python/lattice/nested/build-xml.py b/examples/python/lattice/nested/build-xml.py index b4a9d199d2..389af8e9b7 100644 --- a/examples/python/lattice/nested/build-xml.py +++ b/examples/python/lattice/nested/build-xml.py @@ -1,6 +1,6 @@ import openmc from openmc.source import Source -from openmc.stats import SpatialBox +from openmc.stats import Box ############################################################################### # Simulation Input File Parameters @@ -137,7 +137,7 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.source = Source(space=SpatialBox( +settings_file.source = Source(space=Box( [-1, -1, -1], [1, 1, 1])) settings_file.export_to_xml() diff --git a/examples/python/lattice/simple/build-xml.py b/examples/python/lattice/simple/build-xml.py index 26c19e9714..e648c3d5b3 100644 --- a/examples/python/lattice/simple/build-xml.py +++ b/examples/python/lattice/simple/build-xml.py @@ -1,6 +1,6 @@ import openmc from openmc.source import Source -from openmc.stats import SpatialBox +from openmc.stats import Box ############################################################################### # Simulation Input File Parameters @@ -127,7 +127,7 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.source = Source(space=SpatialBox( +settings_file.source = Source(space=Box( [-1, -1, -1], [1, 1, 1])) settings_file.trigger_active = True settings_file.trigger_max_batches = 100 diff --git a/examples/python/pincell/build-xml.py b/examples/python/pincell/build-xml.py index c08756ae54..ca71b04e5c 100644 --- a/examples/python/pincell/build-xml.py +++ b/examples/python/pincell/build-xml.py @@ -1,6 +1,6 @@ import openmc from openmc.source import Source -from openmc.stats import SpatialBox +from openmc.stats import Box ############################################################################### # Simulation Input File Parameters @@ -170,7 +170,7 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.source = Source(space=SpatialBox( +settings_file.source = Source(space=Box( [-0.62992, -0.62992, -1], [0.62992, 0.62992, 1])) settings_file.entropy_lower_left = [-0.39218, -0.39218, -1.e50] settings_file.entropy_upper_right = [0.39218, 0.39218, 1.e50] diff --git a/examples/python/reflective/build-xml.py b/examples/python/reflective/build-xml.py index 73d07cbb62..7e4fd30be5 100644 --- a/examples/python/reflective/build-xml.py +++ b/examples/python/reflective/build-xml.py @@ -1,7 +1,7 @@ import numpy as np import openmc -from openmc.stats import SpatialBox +from openmc.stats import Box from openmc.source import Source ############################################################################### @@ -86,5 +86,5 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.source = Source(space=SpatialBox(*cell.region.bounding_box)) +settings_file.source = Source(space=Box(*cell.region.bounding_box)) settings_file.export_to_xml() diff --git a/openmc/source.py b/openmc/source.py index 5e4d9e53df..36a36e5948 100644 --- a/openmc/source.py +++ b/openmc/source.py @@ -95,8 +95,6 @@ class Source(object): @energy.setter def energy(self, energy): cv.check_type('energy distribution', energy, Univariate) - if energy.name is None: - energy.name = 'energy' self._energy = energy @strength.setter @@ -115,5 +113,5 @@ class Source(object): if self.angle is not None: element.append(self.angle.to_xml()) if self.energy is not None: - element.append(self.energy.to_xml()) + element.append(self.energy.to_xml('energy')) return element diff --git a/openmc/stats/multivariate.py b/openmc/stats/multivariate.py index ea02d7f3fd..f7da5da3f0 100644 --- a/openmc/stats/multivariate.py +++ b/openmc/stats/multivariate.py @@ -23,15 +23,11 @@ class UnitSphere(object): Parameters ---------- - name : str - Name of the distribution reference_uvw : Iterable of Real Direction from which polar angle is measured Attributes ---------- - name : str - Name of the distribution reference_uvw : Iterable of Real Direction from which polar angle is measured @@ -39,25 +35,15 @@ class UnitSphere(object): __metaclass__ = ABCMeta - def __init__(self, name, reference_uvw=None): - self.name = name + def __init__(self, reference_uvw=None): self._reference_uvw = None if reference_uvw is not None: self.reference_uvw = reference_uvw - @property - def name(self): - return self._name - @property def reference_uvw(self): return self._reference_uvw - @name.setter - def name(self, name): - cv.check_type('name', name, basestring) - self._name = name - @reference_uvw.setter def reference_uvw(self, uvw): cv.check_type('reference direction', uvw, Iterable, Real) @@ -81,8 +67,6 @@ class PolarAzimuthal(UnitSphere): Distribution of the cosine of the polar angle phi : openmc.stats.Univariate Distribution of the azimuthal angle in radians - name : str, optional - Name of the distribution. Defaults to 'angle'. reference_uvw : Iterable of Real Direction from which polar angle is measured. Defaults to the positive z-direction. @@ -96,9 +80,8 @@ class PolarAzimuthal(UnitSphere): """ - def __init__(self, mu=None, phi=None, name='angle', - reference_uvw=[0., 0., 1.]): - super(PolarAzimuthal, self).__init__(name, reference_uvw) + def __init__(self, mu=None, phi=None, reference_uvw=[0., 0., 1.]): + super(PolarAzimuthal, self).__init__(reference_uvw) if mu is not None: self.mu = mu else: @@ -120,42 +103,33 @@ class PolarAzimuthal(UnitSphere): @mu.setter def mu(self, mu): cv.check_type('cosine of polar angle', mu, Univariate) - if mu.name is None: - mu.name = 'mu' self._mu = mu @phi.setter def phi(self, phi): cv.check_type('azimuthal angle', phi, Univariate) - if phi.name is None: - phi.name = 'phi' self._phi = phi def to_xml(self): - element = ET.Element(self.name) + element = ET.Element('angle') element.set("type", "mu-phi") if self.reference_uvw is not None: element.set("reference_uvw", ' '.join(map(str, self.reference_uvw))) - element.append(self.mu.to_xml()) - element.append(self.phi.to_xml()) + element.append(self.mu.to_xml('mu')) + element.append(self.phi.to_xml('phi')) return element class Isotropic(UnitSphere): """Isotropic angular distribution. - Parameters - ---------- - name : str, optional - Name of the distribution. Defaults to 'angle'. - """ - def __init__(self, name='angle'): - super(Isotropic, self).__init__(name) + def __init__(self): + super(Isotropic, self).__init__() def to_xml(self): - element = ET.Element(self.name) + element = ET.Element('angle') element.set("type", "isotropic") return element @@ -169,8 +143,6 @@ class Monodirectional(UnitSphere): Parameters ---------- - name : str, optional - Name of the distribution. Defaults to 'angle'. reference_uvw : Iterable of Real Direction from which polar angle is measured. Defaults to the positive x-direction. @@ -178,11 +150,11 @@ class Monodirectional(UnitSphere): """ - def __init__(self, name='angle', reference_uvw=[1., 0., 0.]): - super(Monodirectional, self).__init__(name, reference_uvw) + def __init__(self, reference_uvw=[1., 0., 0.]): + super(Monodirectional, self).__init__(reference_uvw) def to_xml(self): - element = ET.Element(self.name) + element = ET.Element('angle') element.set("type", "monodirectional") if self.reference_uvw is not None: element.set("reference_uvw", ' '.join(map(str, self.reference_uvw))) @@ -195,38 +167,19 @@ class Spatial(object): Classes derived from this abstract class can be used for spatial distributions of source sites. - Parameters - ---------- - name : str - Name of the distribution - - Attributes - ---------- - name : str - Name of the distribution - """ __metaclass__ = ABCMeta - def __init__(self, name): - self.name = name - - @property - def name(self): - return self._name - - @name.setter - def name(self, name): - cv.check_type('name', name, basestring) - self._name = name + def __init__(self): + pass @abstractmethod def to_xml(self): return '' -class SpatialIndependent(Spatial): +class CartesianIndependent(Spatial): """Spatial distribution with independent x, y, and z distributions. This distribution allows one to specify a coordinates whose x-, y-, and z- @@ -240,8 +193,6 @@ class SpatialIndependent(Spatial): Distribution of y-coordinates z : openmc.stats.Univariate Distribution of z-coordinates - name : str - Name of the distribution Attributes ---------- @@ -255,8 +206,8 @@ class SpatialIndependent(Spatial): """ - def __init__(self, x, y, z, name='space'): - super(SpatialIndependent, self).__init__(name) + def __init__(self, x, y, z): + super(CartesianIndependent, self).__init__() self.x = x self.y = y self.z = z @@ -276,34 +227,28 @@ class SpatialIndependent(Spatial): @x.setter def x(self, x): cv.check_type('x coordinate', x, Univariate) - if x.name is None: - x.name = 'x' self._x = x @y.setter def y(self, y): cv.check_type('y coordinate', y, Univariate) - if y.name is None: - y.name = 'y' self._y = y @z.setter def z(self, z): cv.check_type('z coordinate', z, Univariate) - if z.name is None: - z.name = 'z' self._z = z def to_xml(self): - element = ET.Element(self.name) + element = ET.Element('space') element.set("type", "independent") - element.append(self.x.to_xml()) - element.append(self.y.to_xml()) - element.append(self.z.to_xml()) + element.append(self.x.to_xml('x')) + element.append(self.y.to_xml('y')) + element.append(self.z.to_xml('z')) return element -class SpatialBox(Spatial): +class Box(Spatial): """Uniform distribution of coordinates in a rectangular cuboid. Parameters @@ -312,8 +257,6 @@ class SpatialBox(Spatial): Lower-left coordinates of cuboid upper_right : Iterable of Real Upper-right coordinates of cuboid - name : str, optional - Name of the distribution only_fissionable : bool, optional Whether spatial sites should only be accepted if they occur in fissionable materials @@ -331,8 +274,8 @@ class SpatialBox(Spatial): """ - def __init__(self, lower_left, upper_right, name='space', only_fissionable=False): - super(SpatialBox, self).__init__(name) + def __init__(self, lower_left, upper_right, only_fissionable=False): + super(Box, self).__init__() self.lower_left = lower_left self.upper_right = upper_right self.only_fissionable = only_fissionable @@ -367,7 +310,7 @@ class SpatialBox(Spatial): self._only_fissionable = only_fissionable def to_xml(self): - element = ET.Element(self.name) + element = ET.Element('space') if self.only_fissionable: element.set("type", "fission") else: @@ -378,7 +321,7 @@ class SpatialBox(Spatial): return element -class SpatialPoint(Spatial): +class Point(Spatial): """Delta function in three dimensions. This spatial distribution can be used for a point source where sites are @@ -388,8 +331,6 @@ class SpatialPoint(Spatial): ---------- xyz : Iterable of Real Cartesian coordinates of location - name : str, optional - Name of the distribution Attributes ---------- @@ -398,8 +339,8 @@ class SpatialPoint(Spatial): """ - def __init__(self, xyz, name='space'): - super(SpatialPoint, self).__init__(name) + def __init__(self, xyz): + super(Point, self).__init__() self.xyz = xyz @property @@ -413,7 +354,7 @@ class SpatialPoint(Spatial): self._xyz = xyz def to_xml(self): - element = ET.Element(self.name) + element = ET.Element('space') element.set("type", "point") params = ET.SubElement(element, "parameters") params.text = ' '.join(map(str, self.xyz)) diff --git a/openmc/stats/univariate.py b/openmc/stats/univariate.py index 01419420ea..04e70bd004 100644 --- a/openmc/stats/univariate.py +++ b/openmc/stats/univariate.py @@ -16,33 +16,12 @@ class Univariate(object): The Univariate class is an abstract class that can be derived to implement a specific probability distribution. - Parameters - ---------- - name : str - Name of the distribution - - Attributes - ---------- - name : str - Name of the distributions - """ __metaclass__ = ABCMeta - def __init__(self, name=None): - self._name = None - if name is not None: - self.name = name - - @property - def name(self): - return self._name - - @name.setter - def name(self, name): - cv.check_type('name', name, basestring) - self._name = name + def __init__(self): + pass @abstractmethod def to_xml(self): @@ -72,8 +51,8 @@ class Discrete(Univariate): """ - def __init__(self, x, p, name=None): - super(Discrete, self).__init__(name) + def __init__(self, x, p): + super(Discrete, self).__init__() self.x = x self.p = p @@ -101,11 +80,8 @@ class Discrete(Univariate): cv.check_greater_than('discrete probability', pk, 0.0, True) self._p = p - def to_xml(self): - if self.name is not None: - element = ET.Element(self.name) - else: - element = ET.Element('distribution') + def to_xml(self, element_name): + element = ET.Element(element_name) element.set("type", "discrete") params = ET.SubElement(element, "parameters") @@ -133,8 +109,8 @@ class Uniform(Univariate): """ - def __init__(self, a=0.0, b=1.0, name=None): - super(Uniform, self).__init__(name) + def __init__(self, a=0.0, b=1.0): + super(Uniform, self).__init__() self.a = a self.b = b @@ -156,11 +132,8 @@ class Uniform(Univariate): cv.check_type('Uniform b', b, Real) self._b = b - def to_xml(self): - if self.name is not None: - element = ET.Element(self.name) - else: - element = ET.Element('distribution') + def to_xml(self, element_name): + element = ET.Element(element_name) element.set("type", "uniform") element.set("parameters", '{} {}'.format(self.a, self.b)) return element @@ -185,8 +158,8 @@ class Maxwell(Univariate): """ - def __init__(self, theta, name='energy'): - super(Maxwell, self).__init__(name) + def __init__(self, theta): + super(Maxwell, self).__init__() self.theta = theta @property @@ -199,8 +172,8 @@ class Maxwell(Univariate): cv.check_greater_than('Maxwell temperature', theta, 0.0) self._theta = theta - def to_xml(self): - element = ET.Element(self.name) + def to_xml(self, element_name): + element = ET.Element(element_name) element.set("type", "maxwell") element.set("parameters", str(self.theta)) return element @@ -219,8 +192,6 @@ class Watt(Univariate): First parameter of distribution b : float Second parameter of distribution - name : str, optional - Name of the distribution. Defaults to 'energy'. Attributes ---------- @@ -231,8 +202,8 @@ class Watt(Univariate): """ - def __init__(self, a=0.988, b=2.249, name='energy'): - super(Watt, self).__init__(name) + def __init__(self, a=0.988, b=2.249): + super(Watt, self).__init__() self.a = a self.b = b @@ -256,8 +227,8 @@ class Watt(Univariate): cv.check_greater_than('Watt b', b, 0.0) self._b = b - def to_xml(self): - element = ET.Element(self.name) + def to_xml(self, element_name): + element = ET.Element(element_name) element.set("type", "watt") element.set("parameters", '{} {}'.format(self.a, self.b)) return element @@ -272,8 +243,6 @@ class Tabular(Univariate): Parameters ---------- - name : str - Name of the distribution x : Iterable of Real Tabulated values of the random variable p : Iterable of Real @@ -294,8 +263,8 @@ class Tabular(Univariate): """ - def __init__(self, x, p, interpolation='linear-linear', name=None): - super(Tabular, self).__init__(name) + def __init__(self, x, p, interpolation='linear-linear'): + super(Tabular, self).__init__() self.x = x self.p = p self.interpolation = interpolation @@ -330,11 +299,8 @@ class Tabular(Univariate): ['linear-linear', 'histogram']) self._interpolation = interpolation - def to_xml(self): - if self.name is not None: - element = ET.Element(self.name) - else: - element = ET.Element('distribution') + def to_xml(self, element_name): + element = ET.Element(element_name) element.set("type", "tabular") element.set("interpolation", self.interpolation) diff --git a/tests/input_set.py b/tests/input_set.py index 46058f41b8..c13a4f9cc7 100644 --- a/tests/input_set.py +++ b/tests/input_set.py @@ -1,6 +1,6 @@ import openmc from openmc.source import Source -from openmc.stats import SpatialBox +from openmc.stats import Box class InputSet(object): @@ -560,7 +560,7 @@ class InputSet(object): self.settings.batches = 10 self.settings.inactive = 5 self.settings.particles = 100 - self.settings.source = Source(space=SpatialBox( + self.settings.source = Source(space=Box( [-160, -160, -183], [160, 160, 183])) def build_defualt_plots(self): diff --git a/tests/test_distribmat/test_distribmat.py b/tests/test_distribmat/test_distribmat.py index a4394745b3..a0608c108a 100644 --- a/tests/test_distribmat/test_distribmat.py +++ b/tests/test_distribmat/test_distribmat.py @@ -5,7 +5,7 @@ import sys sys.path.insert(0, os.pardir) from testing_harness import TestHarness, PyAPITestHarness import openmc -from openmc.stats import SpatialBox +from openmc.stats import Box from openmc.source import Source @@ -87,7 +87,7 @@ class DistribmatTestHarness(PyAPITestHarness): sets_file.batches = 5 sets_file.inactive = 0 sets_file.particles = 1000 - sets_file.source = Source(space=SpatialBox([-1, -1, -1], [1, 1, 1])) + sets_file.source = Source(space=Box([-1, -1, -1], [1, 1, 1])) sets_file.output = {'summary': True} sets_file.export_to_xml() diff --git a/tests/test_source/test_source.py b/tests/test_source/test_source.py index e2451ba3fc..9d303b06bc 100644 --- a/tests/test_source/test_source.py +++ b/tests/test_source/test_source.py @@ -39,9 +39,9 @@ class SourceTestHarness(PyAPITestHarness): x_dist = openmc.stats.Uniform(-3., 3.) y_dist = openmc.stats.Discrete([-4., -1., 3.], [0.2, 0.3, 0.5]) z_dist = openmc.stats.Tabular([-2., 0., 2.], [0.2, 0.3, 0.2]) - spatial1 = openmc.stats.SpatialIndependent(x_dist, y_dist, z_dist) - spatial2 = openmc.stats.SpatialBox([-4., -4., -4.], [4., 4., 4.]) - spatial3 = openmc.stats.SpatialPoint([1.2, -2.3, 0.781]) + spatial1 = openmc.stats.CartesianIndependent(x_dist, y_dist, z_dist) + spatial2 = openmc.stats.Box([-4., -4., -4.], [4., 4., 4.]) + spatial3 = openmc.stats.Point([1.2, -2.3, 0.781]) mu_dist = openmc.stats.Discrete([-1., 0., 1.], [0.5, 0.25, 0.25]) phi_dist = openmc.stats.Uniform(0., 6.28318530718) From 13d91746a0db0a63583953df1b6ca63b780ae633 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 15 Jan 2016 06:38:30 -0600 Subject: [PATCH 169/650] Change SpatialIndependent to CartesianIndependent --- docs/source/usersguide/input.rst | 12 ++++++------ openmc/stats/multivariate.py | 2 +- src/distribution_multivariate.F90 | 12 ++++++------ src/input_xml.F90 | 6 +++--- tests/test_source/inputs_true.dat | 2 +- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 2eb5262dfd..30e9ed07b9 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -449,11 +449,11 @@ attributes/sub-elements: :type: The type of spatial distribution. Valid options are "box", "fission", - "point", and "independent". A "box" spatial distribution has coordinates + "point", and "cartesian". A "box" spatial distribution has coordinates sampled uniformly in a parallelepiped. A "fission" spatial distribution samples locations from a "box" distribution but only locations in fissionable materials are accepted. A "point" spatial distribution has - coordinates specified by a triplet. An "independent" spatial distribution + coordinates specified by a triplet. An "cartesian" spatial distribution specifies independent distributions of x-, y-, and z-coordinates. *Default*: None @@ -469,25 +469,25 @@ attributes/sub-elements: three real numbers which specify the (x,y,z) location of an isotropic point source. - For an "independent" distribution, no parameters are specified. Instead, + For an "cartesian" distribution, no parameters are specified. Instead, the ``x``, ``y``, and ``z`` elements must be specified. *Default*: None :x: - For an "independent" distribution, this element specifies the distribution + For an "cartesian" distribution, this element specifies the distribution of x-coordinates. The necessary sub-elements/attributes are those of a univariate probability distribution (see the description in :ref:`univariate`). :y: - For an "independent" distribution, this element specifies the distribution + For an "cartesian" distribution, this element specifies the distribution of y-coordinates. The necessary sub-elements/attributes are those of a univariate probability distribution (see the description in :ref:`univariate`). :z: - For an "independent" distribution, this element specifies the distribution + For an "cartesian" distribution, this element specifies the distribution of z-coordinates. The necessary sub-elements/attributes are those of a univariate probability distribution (see the description in :ref:`univariate`). diff --git a/openmc/stats/multivariate.py b/openmc/stats/multivariate.py index f7da5da3f0..a750d03011 100644 --- a/openmc/stats/multivariate.py +++ b/openmc/stats/multivariate.py @@ -241,7 +241,7 @@ class CartesianIndependent(Spatial): def to_xml(self): element = ET.Element('space') - element.set("type", "independent") + element.set('type', 'cartesian') element.append(self.x.to_xml('x')) element.append(self.y.to_xml('y')) element.append(self.z.to_xml('z')) diff --git a/src/distribution_multivariate.F90 b/src/distribution_multivariate.F90 index 71aee646ab..c288c40c19 100644 --- a/src/distribution_multivariate.F90 +++ b/src/distribution_multivariate.F90 @@ -69,13 +69,13 @@ module distribution_multivariate end function iSampleSpatial end interface - type, extends(SpatialDistribution) :: SpatialIndependent + type, extends(SpatialDistribution) :: CartesianIndependent class(Distribution), allocatable :: x class(Distribution), allocatable :: y class(Distribution), allocatable :: z contains - procedure :: sample => spatial_independent_sample - end type SpatialIndependent + procedure :: sample => cartesian_independent_sample + end type CartesianIndependent type, extends(SpatialDistribution) :: SpatialBox real(8) :: lower_left(3) @@ -132,14 +132,14 @@ contains uvw(:) = this % reference_uvw end function monodirectional_sample - function spatial_independent_sample(this) result(xyz) - class(SpatialIndependent), intent(in) :: this + function cartesian_independent_sample(this) result(xyz) + class(CartesianIndependent), intent(in) :: this real(8) :: xyz(3) xyz(1) = this % x % sample() xyz(2) = this % y % sample() xyz(3) = this % z % sample() - end function spatial_independent_sample + end function cartesian_independent_sample function spatial_box_sample(this) result(xyz) class(SpatialBox), intent(in) :: this diff --git a/src/input_xml.F90 b/src/input_xml.F90 index fa0ca10345..1427458901 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -397,8 +397,8 @@ contains if (check_for_node(node_space, "type")) & call get_node_value(node_space, "type", type) select case (to_lower(type)) - case ('independent') - allocate(SpatialIndependent :: external_source(i)%space) + case ('cartesian') + allocate(CartesianIndependent :: external_source(i)%space) case ('box') allocate(SpatialBox :: external_source(i)%space) @@ -419,7 +419,7 @@ contains end select select type (space => external_source(i)%space) - type is (SpatialIndependent) + type is (CartesianIndependent) ! Read distribution for x coordinate if (check_for_node(node_space, "x")) then call get_node_ptr(node_space, "x", node_dist) diff --git a/tests/test_source/inputs_true.dat b/tests/test_source/inputs_true.dat index 2c2263e4f4..01130ed2e5 100644 --- a/tests/test_source/inputs_true.dat +++ b/tests/test_source/inputs_true.dat @@ -1 +1 @@ -8469cedcf2d3511a80d0f931bc665178ef1bd5b51352dc567385e52c32ad680a1131c8ee079bc022d320c3ea454798afac6b8cac8937a17de92d6cd50d04d72c \ No newline at end of file +5c2fdde85affcd44c1b02c07c300acb8e5c189c1adbf7aa079e37a68e8b8313678fc292bd7f6e0d0957f723e05b8146bd165cf3315dde5f6b2f88ebc954cd65e \ No newline at end of file From d578d19d1fd298c37c9c74d306afd46212676318 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 15 Jan 2016 07:09:40 -0600 Subject: [PATCH 170/650] Add documentation for openmc.source and openmc.stats --- docs/source/pythonapi/index.rst | 2 ++ docs/source/pythonapi/source.rst | 8 +++++ docs/source/pythonapi/stats.rst | 58 ++++++++++++++++++++++++++++++++ openmc/stats/multivariate.py | 23 ++++++------- 4 files changed, 79 insertions(+), 12 deletions(-) create mode 100644 docs/source/pythonapi/source.rst create mode 100644 docs/source/pythonapi/stats.rst diff --git a/docs/source/pythonapi/index.rst b/docs/source/pythonapi/index.rst index 6d513d5d5b..6dd2ae10d0 100644 --- a/docs/source/pythonapi/index.rst +++ b/docs/source/pythonapi/index.rst @@ -35,6 +35,8 @@ on a given module or class. opencg_compatible plots settings + source + stats surface tallies trigger diff --git a/docs/source/pythonapi/source.rst b/docs/source/pythonapi/source.rst new file mode 100644 index 0000000000..4bc770363a --- /dev/null +++ b/docs/source/pythonapi/source.rst @@ -0,0 +1,8 @@ +.. _pythonapi_source: + +====== +Source +====== + +.. automodule:: openmc.source + :members: diff --git a/docs/source/pythonapi/stats.rst b/docs/source/pythonapi/stats.rst new file mode 100644 index 0000000000..58060cacbc --- /dev/null +++ b/docs/source/pythonapi/stats.rst @@ -0,0 +1,58 @@ +.. _pythonapi_stats: + +===================== +Statistical Functions +===================== + +---------------------------- +Summary of Available Classes +---------------------------- + +Univariate Probability Distributions +------------------------------------ + +.. currentmodule:: openmc.stats.univariate + +.. autosummary:: + + Univariate + Discrete + Uniform + Maxwell + Watt + Tabular + +Angular Distributions +--------------------- + +.. currentmodule:: openmc.stats.multivariate + +.. autosummary:: + + UnitSphere + PolarAzimuthal + Isotropic + Monodirectional + +Spatial Distributions +--------------------- + +.. autosummary:: + + Spatial + CartesianIndependent + Box + Point + + +Univariate Probability Distributions +------------------------------------ + +.. automodule:: openmc.stats.univariate + :members: + +Multivariate Probability Distributions +-------------------------------------- + +.. automodule:: openmc.stats.multivariate + :members: diff --git a/openmc/stats/multivariate.py b/openmc/stats/multivariate.py index a750d03011..29258ee8dd 100644 --- a/openmc/stats/multivariate.py +++ b/openmc/stats/multivariate.py @@ -6,7 +6,6 @@ import sys from xml.etree import ElementTree as ET import numpy as np -from numpy.linalg import norm import openmc.checkvalue as cv from openmc.stats.univariate import Univariate, Uniform @@ -48,7 +47,7 @@ class UnitSphere(object): def reference_uvw(self, uvw): cv.check_type('reference direction', uvw, Iterable, Real) uvw = np.asarray(uvw) - self._reference_uvw = uvw/norm(uvw) + self._reference_uvw = uvw/np.linalg.norm(uvw) @abstractmethod def to_xml(self): @@ -63,9 +62,9 @@ class PolarAzimuthal(UnitSphere): Parameters ---------- - mu : openmc.stats.Univariate + mu : Univariate Distribution of the cosine of the polar angle - phi : openmc.stats.Univariate + phi : Univariate Distribution of the azimuthal angle in radians reference_uvw : Iterable of Real Direction from which polar angle is measured. Defaults to the positive @@ -73,9 +72,9 @@ class PolarAzimuthal(UnitSphere): Attributes ---------- - mu : openmc.stats.Univariate + mu : Univariate Distribution of the cosine of the polar angle - phi : openmc.stats.Univariate + phi : Univariate Distribution of the azimuthal angle in radians """ @@ -187,20 +186,20 @@ class CartesianIndependent(Spatial): Parameters ---------- - x : openmc.stats.Univariate + x : Univariate Distribution of x-coordinates - y : openmc.stats.Univariate + y : Univariate Distribution of y-coordinates - z : openmc.stats.Univariate + z : Univariate Distribution of z-coordinates Attributes ---------- - x : openmc.stats.Univariate + x : Univariate Distribution of x-coordinates - y : openmc.stats.Univariate + y : Univariate Distribution of y-coordinates - z : openmc.stats.Univariate + z : Univariate Distribution of z-coordinates """ From dae65fa9822782a6ec9a1d91fbfe5320237a3754 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 15 Jan 2016 09:52:56 -0500 Subject: [PATCH 171/650] Updated comments and use ternary operators in AggregateFilter per comments by @paulromano --- openmc/aggregate.py | 39 +++++++++++++++++++-------------------- openmc/cross.py | 10 ++++++++++ openmc/filter.py | 4 ++-- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/openmc/aggregate.py b/openmc/aggregate.py index 70ce3685cd..1fa636577d 100644 --- a/openmc/aggregate.py +++ b/openmc/aggregate.py @@ -159,16 +159,11 @@ class AggregateNuclide(object): def __repr__(self): - string = '{0}('.format(self.aggregate_op) - # Append each nuclide in the aggregate to the string - for nuclide in self.nuclides: - if isinstance(nuclide, Nuclide): - string += '{0}, '.format(nuclide.name) - else: - string += '{0}, '.format(str(nuclide)) - - string += ')' + string = '{0}('.format(self.aggregate_op) + names = [nuclide.name if isinstance(nuclide, Nuclide) else str(nuclide) + for nuclide in self.nuclides] + string = ', '.join(map(str, names)) + ')' return string @property @@ -198,9 +193,9 @@ class AggregateFilter(object): Parameters ---------- - filter : Filter or CrossFilter + aggregate_filter : Filter or CrossFilter The filter included in the aggregation - filter_bins : Iterable of tuple + bins : Iterable of tuple The filter bins included in the aggregation aggregate_op : str The tally aggregation operator (e.g., 'sum', 'mean', etc.) used @@ -208,13 +203,20 @@ class AggregateFilter(object): Attributes ---------- - filter : filter + type : str + The type of the aggregatefilter (e.g., 'sum(energy)', 'sum(cell)') + aggregate_filter : filter The filter included in the aggregation - filter_bins : Iterable of tuple - The filter bins included in the aggregation aggregate_op : str The tally aggregation operator (e.g., 'sum', 'mean', etc.) used to aggregate across a tally filter's bins with this AggregateFilter + bins : Iterable of tuple + The filter bins included in the aggregation + num_bins : Integral + The number of filter bins (always 1 if aggregate_filter is defined) + stride : Integral + The number of filter, nuclide and score bins within each of this + aggregatefilter's bins. """ @@ -287,10 +289,7 @@ class AggregateFilter(object): @property def num_bins(self): - if self.aggregate_filter: - return 1 - else: - return 0 + return 1 if self.aggregate_filter else 0 @property def stride(self): @@ -330,7 +329,7 @@ class AggregateFilter(object): Parameters ---------- - filter_bin : Integral or tuple of Integral or tuple of Real + filter_bin : Integral or tuple of Real A tuple of value(s) corresponding to the bin of interest in the aggregated filter. The bin is the integer ID for 'material', 'surface', 'cell', 'cellborn', and 'universe' Filters. The bin @@ -406,5 +405,5 @@ class AggregateFilter(object): aggregate_bin_array = np.repeat(aggregate_bin_array, datasize) # Construct Pandas DataFrame for the AggregateFilter - df = pd.DataFrame({self.type : aggregate_bin_array}) + df = pd.DataFrame({self.aggregate_filter.type : aggregate_bin_array}) return df \ No newline at end of file diff --git a/openmc/cross.py b/openmc/cross.py index 9df768b944..ee0fcb4c82 100644 --- a/openmc/cross.py +++ b/openmc/cross.py @@ -245,6 +245,8 @@ class CrossFilter(object): Attributes ---------- + type : str + The type of the crossfilter (e.g., 'energy / energy') left_filter : Filter or CrossFilter The left filter in the outer product right_filter : Filter or CrossFilter @@ -252,6 +254,14 @@ class CrossFilter(object): binary_op : str The tally arithmetic binary operator (e.g., '+', '-', etc.) used to combine two tally's filter bins with this CrossFilter + bins : dict of Iterable + A dictionary of the bins from each filter keyed by the types of the + left / right filters + num_bins : Integral + The number of filter bins (always 1 if aggregate_filter is defined) + stride : Integral + The number of filter, nuclide and score bins within each of this + crossfilter's bins. """ diff --git a/openmc/filter.py b/openmc/filter.py index 4d12d7561b..a0c777fa07 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -35,8 +35,8 @@ class Filter(object): Attributes ---------- type : str - The type of the tally filter. - bins : Integral or Iterable of Integral or Iterable of Real + The type of the tally filter + bins : Integral or Iterable of Real The bins for the filter num_bins : Integral The number of filter bins From 35a689c3550c1a38abd3388606f834c0ceb3026a Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 12 Nov 2015 10:52:56 -0600 Subject: [PATCH 172/650] Started refactor angle and energy distributions. --- src/angle_distribution.F90 | 55 +++++ src/energy_distribution.F90 | 407 +++++++++++++++++++++++++++++++++ src/secondary_correlated.F90 | 145 ++++++++++++ src/secondary_header.F90 | 55 +++++ src/secondary_kalbach.F90 | 163 +++++++++++++ src/secondary_uncorrelated.F90 | 29 +++ 6 files changed, 854 insertions(+) create mode 100644 src/angle_distribution.F90 create mode 100644 src/energy_distribution.F90 create mode 100644 src/secondary_correlated.F90 create mode 100644 src/secondary_header.F90 create mode 100644 src/secondary_kalbach.F90 create mode 100644 src/secondary_uncorrelated.F90 diff --git a/src/angle_distribution.F90 b/src/angle_distribution.F90 new file mode 100644 index 0000000000..448bafd8f7 --- /dev/null +++ b/src/angle_distribution.F90 @@ -0,0 +1,55 @@ +module angle_distribution + + use constants, only: ZERO, ONE + use distribution_univariate, only: DistributionContainer + use random_lcg, only: prn + use search, only: binary_search + + implicit none + private + + type, public :: AngleDistribution + real(8), allocatable :: energy(:) + type(DistributionContainer), allocatable :: distribution(:) + contains + procedure :: sample => angle_sample + end type AngleDistribution + +contains + + function angle_sample(this, E) result(mu) + class(AngleDistribution), intent(in) :: this + real(8), intent(in) :: E + real(8) :: mu + + integer :: i + integer :: n + real(8) :: r + + ! determine number of incoming energies + n = size(this%energy) + + ! find energy bin and calculate interpolation factor -- if the energy is + ! outside the range of the tabulated energies, choose the first or last bins + if (E < this%energy(1)) then + i = 1 + r = ZERO + elseif (E > this%energy(n)) then + i = n - 1 + r = ONE + else + i = binary_search(this%energy, n, E) + r = (E - this%energy(i))/(this%energy(i+1) - this%energy(i)) + end if + + ! Sample between the ith and (i+1)th bin + if (r > prn()) i = i + 1 + + ! Sample i-th distribution + mu = this%distribution(i)%obj%sample() + + ! Make sure mu is in range [-1,1] + if (abs(mu) > ONE) mu = sign(ONE, mu) + end function angle_sample + +end module angle_distribution diff --git a/src/energy_distribution.F90 b/src/energy_distribution.F90 new file mode 100644 index 0000000000..2a616e0f1f --- /dev/null +++ b/src/energy_distribution.F90 @@ -0,0 +1,407 @@ +module energy_distribution + + use constants, only: ZERO, ONE, TWO, PI, HISTOGRAM, LINEAR_LINEAR + use endf_header, only: Tab1 + use error, only: fatal_error + use interpolation, only: interpolate_tab1 + use math, only: maxwell_spectrum, watt_spectrum + use random_lcg, only: prn + use search, only: binary_search + +!=============================================================================== +! ENERGYDISTRIBUTION (abstract) defines an energy distribution that is a +! function of the incident energy of a projectile +!=============================================================================== + + type, abstract :: EnergyDistribution + contains + procedure(iSampleEnergy), deferred :: sample + end type EnergyDistribution + + abstract interface + function iSampleEnergy(this, E_in) result(E_out) + import EnergyDistribution + class(EnergyDistribution), intent(in) :: this + real(8), intent(in) :: E_in + real(8) :: E_out + end function iSampleEnergy + end interface + +!=============================================================================== +! Derived classes +!=============================================================================== + + type Array1D + real(8), allocatable :: data(:) + end type Array1D + + type, extends(EnergyDistribution) :: TabularEquiprobable + integer :: n_region + integer, allocatable :: breakpoints(:) + integer, allocatable :: interpolation(:) + real(8), allocatable :: energy_in(:) + real(8), allocatable :: energy_out(:,:) + contains + procedure :: sample => equiprobable_sample + end type TabularEquiprobable + + type, extends(EnergyDistribution) :: LevelInelastic + real(8) :: threshold + real(8) :: mass_ratio + contains + procedure :: sample => level_inelastic_sample + end type LevelInelastic + + type CTTable + integer :: interpolation + integer :: n_discrete + real(8), allocatable :: e_out(:) + real(8), allocatable :: p(:) + real(8), allocatable :: c(:) + end type CTTable + + type, extends(EnergyDistribution) :: ContinuousTabular + integer :: n_region + integer, allocatable :: breakpoints(:) + integer, allocatable :: interpolation(:) + real(8), allocatable :: energy_in(:) + type(CTTable), allocatable :: energy_out(:) + contains + procedure :: sample => continuous_sample + end type ContinuousTabular + + type, extends(EnergyDistribution) :: MaxwellEnergy + type(Tab1) :: theta + real(8) :: u + contains + procedure :: sample => maxwellenergy_sample + end type MaxwellEnergy + + type, extends(EnergyDistribution) :: Evaporation + type(Tab1) :: theta + real(8) :: u + contains + procedure :: sample => evaporation_sample + end type Evaporation + + type, extends(EnergyDistribution) :: WattEnergy + type(Tab1) :: a + type(Tab1) :: b + real(8) :: u + contains + procedure :: sample => watt_sample + end type WattEnergy + + type, extends(EnergyDistribution) :: NBodyPhaseSpace + integer :: n_bodies + real(8) :: mass_ratio + real(8) :: A + real(8) :: Q + contains + procedure :: sample => nbody_sample + end type NBodyPhaseSpace + +contains + + function equiprobable_sample(this, E_in) result(E_out) + class(TabularEquiprobable), intent(in) :: this + real(8), intent(in) :: E_in + real(8) :: E_out + + integer :: i, k, l + integer :: n_energy_in + integer :: n_energy_out + real(8) :: r ! interpolation factor on incoming energy + real(8) :: E_i_1, E_i_K ! endpoints on outgoing grid i + real(8) :: E_i1_1, E_i1_K ! endpoints on outgoing grid i+1 + real(8) :: E_1, E_K ! endpoints interpolated between i and i+1 + real(8) :: E_l_k, E_l_k1 ! adjacent E on outgoing grid l + + ! Determine number of incoming/outgoing energies + n_energy_in = size(this%energy_in) + n_energy_out = size(this%energy_out, 1) + + ! read number of interpolation regions, incoming energies, and outgoing + ! energies + ! TODO: Move this error to input + if (this%n_region > 0) then + call fatal_error("Multiple interpolation regions not supported while & + &attempting to sample equiprobable energy bins.") + end if + + ! determine index on incoming energy grid and interpolation factor + i = binary_search(this%energy_in, size(this%energy_in), E_in) + r = (E_in - this%energy_in(i)) / & + (this%energy_in(i+1) - this%energy_in(i)) + + ! Sample outgoing energy bin + k = 1 + int(n_energy_out * prn()) + + ! Determine E_1 and E_K + E_i_1 = this%energy_out(1, i) + E_i_K = this%energy_out(n_energy_out, i) + + E_i1_1 = this%energy_out(1, i+1) + E_i1_K = this%energy_out(n_energy_out, i+1) + + E_1 = E_i_1 + r*(E_i1_1 - E_i_1) + E_K = E_i_K + r*(E_i1_K - E_i_K) + + ! Randomly select between the outgoing table for incoming energy E_i and + ! E_(i+1) + if (prn() < r) then + l = i + 1 + else + l = i + end if + + ! Determine E_l_k and E_l_k+1 + E_l_k = this%energy_out(k, l) + E_l_k1 = this%energy_out(k+1, l) + + ! Determine E' (denoted here as E_out) + E_out = E_l_k + prn()*(E_l_k1 - E_l_k) + + ! Now interpolate between incident energy bins i and i + 1 + if (l == i) then + E_out = E_1 + (E_out - E_i_1)*(E_K - E_1)/(E_i_K - E_i_1) + else + E_out = E_1 + (E_out - E_i1_1)*(E_K - E_1)/(E_i1_K - E_i1_1) + end if + end function equiprobable_sample + + function level_inelastic_sample(this, E_in) result(E_out) + class(LevelInelastic), intent(in) :: this + real(8), intent(in) :: E_in + real(8) :: E_out + + E_out = this%mass_ratio*(E_in - this%threshold) + end function level_inelastic_sample + + function continuous_sample(this, E_in) result(E_out) + class(ContinuousTabular), intent(in) :: this + real(8), intent(in) :: E_in + real(8) :: E_out + + integer :: i, k, l + integer :: n_energy_in + integer :: n_energy_out + real(8) :: r ! interpolation factor on incoming energy + real(8) :: r1 ! random number on [0,1) + real(8) :: frac ! interpolation factor on outgoing energy + real(8) :: E_i_1, E_i_K ! endpoints on outgoing grid i + real(8) :: E_i1_1, E_i1_K ! endpoints on outgoing grid i+1 + real(8) :: E_1, E_K ! endpoints interpolated between i and i+1 + real(8) :: E_l_k, E_l_k1 ! adjacent E on outgoing grid l + real(8) :: p_l_k, p_l_k1 ! adjacent p on outgoing grid l + real(8) :: c_k, c_k1 ! cumulative probability + logical :: histogram_interp + + ! read number of interpolation regions and incoming energies + if (this%n_region == 1) then + histogram_interp = (this%interpolation(1) == 1) + else if (this%n_region > 1) then + call fatal_error("Multiple interpolation regions not supported while & + &attempting to sample continuous tabular distribution.") + else + histogram_interp = .false. + end if + + ! find energy bin and calculate interpolation factor -- if the energy is + ! outside the range of the tabulated energies, choose the first or last bins + n_energy_in = size(this%energy_in) + if (E_in < this%energy_in(1)) then + i = 1 + r = ZERO + elseif (E_in > this%energy_in(n_energy_in)) then + i = n_energy_in - 1 + r = ONE + else + i = binary_search(this%energy_in, n_energy_in, E_in) + r = (E_in - this%energy_in(i)) / & + (this%energy_in(i+1) - this%energy_in(i)) + end if + + ! Sample between the ith and (i+1)th bin + if (histogram_interp) then + l = i + else + if (r > prn()) then + l = i + 1 + else + l = i + end if + end if + + ! interpolation for energy E1 and EK + n_energy_out = size(this%energy_out(i)%e_out) + E_i_1 = this%energy_out(i)%e_out(1) + E_i_K = this%energy_out(i)%e_out(n_energy_out) + + n_energy_out = size(this%energy_out(i+1)%e_out) + E_i1_1 = this%energy_out(i+1)%e_out(1) + E_i1_K = this%energy_out(i+1)%e_out(n_energy_out) + + E_1 = E_i_1 + r*(E_i1_1 - E_i_1) + E_K = E_i_K + r*(E_i1_K - E_i_K) + + ! TODO: Write error at initizliation + if (this%energy_out(l)%n_discrete > 0) then + ! discrete lines present + call fatal_error("Discrete lines in continuous tabular distributed not & + &yet supported") + end if + + ! determine outgoing energy bin + n_energy_out = size(this%energy_out(l)%e_out) + r1 = prn() + c_k = this%energy_out(l)%c(1) + do k = 1, n_energy_out - 1 + c_k1 = this%energy_out(l)%c(k+1) + if (r1 < c_k1) exit + c_k = c_k1 + end do + + ! check to make sure k is <= NP - 1 + k = min(k, n_energy_out - 1) + + E_l_k = this%energy_out(l)%e_out(k) + p_l_k = this%energy_out(l)%p(k) + if (this%energy_out(l)%interpolation == HISTOGRAM) then + ! Histogram interpolation + if (p_l_k > ZERO) then + E_out = E_l_k + (r1 - c_k)/p_l_k + else + E_out = E_l_k + end if + + elseif (this%energy_out(l)%interpolation == LINEAR_LINEAR) then + ! Linear-linear interpolation + E_l_k1 = this%energy_out(l)%e_out(k+1) + p_l_k1 = this%energy_out(l)%p(k+1) + + frac = (p_l_k1 - p_l_k)/(E_l_k1 - E_l_k) + if (frac == ZERO) then + E_out = E_l_k + (r1 - c_k)/p_l_k + else + E_out = E_l_k + (sqrt(max(ZERO, p_l_k*p_l_k + & + TWO*frac*(r1 - c_k))) - p_l_k)/frac + end if + end if + + ! Now interpolate between incident energy bins i and i + 1 + if (.not. histogram_interp) then + if (l == i) then + E_out = E_1 + (E_out - E_i_1)*(E_K - E_1)/(E_i_K - E_i_1) + else + E_out = E_1 + (E_out - E_i1_1)*(E_K - E_1)/(E_i1_K - E_i1_1) + end if + end if + end function continuous_sample + + function maxwellenergy_sample(this, E_in) result(E_out) + class(MaxwellEnergy), intent(in) :: this + real(8), intent(in) :: E_in + real(8) :: E_out + + real(8) :: theta + + ! Get temperature corresponding to incoming energy + theta = interpolate_tab1(this%theta, E_in) + + do + ! sample maxwell fission spectrum + E_out = maxwell_spectrum(theta) + + ! accept energy based on restriction energy + if (E_out <= E_in - this%u) exit + end do + end function maxwellenergy_sample + + function evaporation_sample(this, E_in) result(E_out) + class(Evaporation), intent(in) :: this + real(8), intent(in) :: E_in + real(8) :: E_out + + real(8) :: theta + real(8) :: x, y, v + + ! Get temperature corresponding to incoming energy + theta = interpolate_tab1(this%theta, E_in) + + y = (E_in - this%U)/theta + v = 1 - exp(-y) + + ! sample outgoing energy based on evaporation spectrum probability + ! density function + do + x = -log((ONE - v*prn())*(ONE - v*prn())) + if (x <= y) exit + end do + + E_out = x*theta + end function evaporation_sample + + function watt_sample(this, E_in) result(E_out) + class(WattEnergy), intent(in) :: this + real(8), intent(in) :: E_in + real(8) :: E_out + + real(8) :: a, b + + ! determine Watt parameter 'a' from tabulated function + a = interpolate_tab1(this%a, E_in) + + ! determine Watt parameter 'b' from tabulated function + b = interpolate_tab1(this%b, E_in) + + do + ! Sample energy-dependent Watt fission spectrum + E_out = watt_spectrum(a, b) + + ! accept energy based on restriction energy + if (E_out <= E_in - this%u) exit + end do + end function watt_sample + + function nbody_sample(this, E_in) result(E_out) + class(NBodyPhaseSpace), intent(in) :: this + real(8), intent(in) :: E_in + real(8) :: E_out + + real(8) :: Ap + real(8) :: E_max + real(8) :: x, y, v + real(8) :: r1, r2, r3, r4, r5, r6 + + ! determine E_max parameter + Ap = this%mass_ratio + E_max = (Ap - ONE)/Ap * (this%A/(this%A + ONE)*E_in + this%Q) + + ! x is essentially a Maxwellian distribution + x = maxwell_spectrum(ONE) + + select case (this%n_bodies) + case (3) + y = maxwell_spectrum(ONE) + case (4) + r1 = prn() + r2 = prn() + r3 = prn() + y = -log(r1*r2*r3) + case (5) + r1 = prn() + r2 = prn() + r3 = prn() + r4 = prn() + r5 = prn() + r6 = prn() + y = -log(r1*r2*r3*r4) - log(r5) * cos(PI/TWO*r6)**2 + end select + + ! now determine v and E_out + v = x/(x+y) + E_out = E_max * v + end function nbody_sample + +end module energy_distribution diff --git a/src/secondary_correlated.F90 b/src/secondary_correlated.F90 new file mode 100644 index 0000000000..c3c82b588d --- /dev/null +++ b/src/secondary_correlated.F90 @@ -0,0 +1,145 @@ +module secondary_correlated + + use constants, only: ZERO, ONE, TWO, HISTOGRAM, LINEAR_LINEAR + use distribution_univariate, only: Tabular + use error, only: fatal_error + use secondary_header, only: SecondaryDistribution + use random_lcg, only: prn + use search, only: binary_search + + type AngleEnergyTable + type(Tabular) :: energy + type(Tabular), allocatable :: angle(:) + end type AngleEnergyTable + + type, extends(SecondaryDistribution) :: CorrelatedAngleEnergy + integer :: n_region + integer, allocatable :: breakpoints(:) + integer, allocatable :: interpolation(:) + real(8), allocatable :: energy_in(:) + type(AngleEnergyTable), allocatable :: table(:) + contains + procedure :: sample => correlated_sample + end type CorrelatedAngleEnergy + +contains + + subroutine correlated_sample(this, E_in, E_out, mu) + class(CorrelatedAngleEnergy), intent(in) :: this + real(8), intent(in) :: E_in + real(8), intent(out) :: E_out + real(8), intent(out) :: mu + + integer :: i, k, l + integer :: n_energy_in + integer :: n_energy_out + real(8) :: r ! interpolation factor on incoming energy + real(8) :: r1 ! random number on [0,1) + real(8) :: frac ! interpolation factor on outgoing energy + real(8) :: E_i_1, E_i_K ! endpoints on outgoing grid i + real(8) :: E_i1_1, E_i1_K ! endpoints on outgoing grid i+1 + real(8) :: E_1, E_K ! endpoints interpolated between i and i+1 + real(8) :: E_l_k, E_l_k1 ! adjacent E on outgoing grid l + real(8) :: p_l_k, p_l_k1 ! adjacent p on outgoing grid l + real(8) :: c_k, c_k1 ! cumulative probability + + ! TODO: Write error during initialization + if (this%n_region > 1) then + call fatal_error("Multiple interpolation regions not supported while & + &attempting to sample Kalbach-Mann distribution.") + end if + + ! find energy bin and calculate interpolation factor -- if the energy is + ! outside the range of the tabulated energies, choose the first or last bins + n_energy_in = size(this%energy_in) + if (E_in < this%energy_in(1)) then + i = 1 + r = ZERO + elseif (E_in > this%energy_in(n_energy_in)) then + i = n_energy_in - 1 + r = ONE + else + i = binary_search(this%energy_in, n_energy_in, E_in) + r = (E_in - this%energy_in(i)) / & + (this%energy_in(i+1) - this%energy_in(i)) + end if + + ! Sample between the ith and (i+1)th bin + if (r > prn()) then + l = i + 1 + else + l = i + end if + + ! interpolation for energy E1 and EK + n_energy_out = size(this%table(i)%energy%x) + E_i_1 = this%table(i)%energy%x(1) + E_i_K = this%table(i)%energy%x(n_energy_out) + + n_energy_out = size(this%table(i+1)%energy%x) + E_i1_1 = this%table(i+1)%energy%x(1) + E_i1_K = this%table(i+1)%energy%x(n_energy_out) + + E_1 = E_i_1 + r*(E_i1_1 - E_i_1) + E_K = E_i_K + r*(E_i1_K - E_i_K) + +!!$ ! TODO: Write error at initizliation +!!$ if (this%table(l)%n_discrete > 0) then +!!$ ! discrete lines present +!!$ call fatal_error("Discrete lines in continuous tabular distributed not & +!!$ &yet supported") +!!$ end if + + ! determine outgoing energy bin + n_energy_out = size(this%table(l)%energy%x) + r1 = prn() + c_k = this%table(l)%energy%c(1) + do k = 1, n_energy_out - 1 + c_k1 = this%table(l)%energy%c(k+1) + if (r1 < c_k1) exit + c_k = c_k1 + end do + + ! check to make sure k is <= NP - 1 + k = min(k, n_energy_out - 1) + + E_l_k = this%table(l)%energy%x(k) + p_l_k = this%table(l)%energy%p(k) + if (this%table(l)%energy%interpolation == HISTOGRAM) then + ! Histogram interpolation + if (p_l_k > ZERO) then + E_out = E_l_k + (r1 - c_k)/p_l_k + else + E_out = E_l_k + end if + + elseif (this%table(l)%energy%interpolation == LINEAR_LINEAR) then + ! Linear-linear interpolation + E_l_k1 = this%table(l)%energy%x(k+1) + p_l_k1 = this%table(l)%energy%p(k+1) + + frac = (p_l_k1 - p_l_k)/(E_l_k1 - E_l_k) + if (frac == ZERO) then + E_out = E_l_k + (r1 - c_k)/p_l_k + else + E_out = E_l_k + (sqrt(max(ZERO, p_l_k*p_l_k + & + TWO*frac*(r1 - c_k))) - p_l_k)/frac + end if + end if + + ! Now interpolate between incident energy bins i and i + 1 + if (l == i) then + E_out = E_1 + (E_out - E_i_1)*(E_K - E_1)/(E_i_K - E_i_1) + else + E_out = E_1 + (E_out - E_i1_1)*(E_K - E_1)/(E_i1_K - E_i1_1) + end if + + ! Find correlated angular distribution for closest outgoing energy bin + if (r1 - c_k < c_k1 - r1) then + mu = this%table(l)%angle(k)%sample() + else + mu = this%table(l)%angle(k + 1)%sample() + end if + end subroutine correlated_sample + +end module secondary_correlated diff --git a/src/secondary_header.F90 b/src/secondary_header.F90 new file mode 100644 index 0000000000..1f8ad3aed1 --- /dev/null +++ b/src/secondary_header.F90 @@ -0,0 +1,55 @@ +module secondary_header + + use endf_header, only: Tab1 + use interpolation, only: interpolate_tab1 + use random_lcg, only: prn + + type, abstract :: AngleEnergy + contains + procedure(iSampleAngleEnergy), deferred :: sample + end type AngleEnergy + + type :: AngleEnergyContainer + class(AngleEnergy), allocatable :: obj + end type AngleEnergyContainer + + type :: SecondaryDistribution + type(Tab1), allocatable :: applicability(:) + type(AngleEnergyContainer), allocatable :: distribution(:) + contains + procedure :: sample => secondary_sample + end type SecondaryDistribution + + abstract interface + subroutine iSampleAngleEnergy(this, E_in, E_out, mu) + import AngleEnergy + class(AngleEnergy), intent(in) :: this + real(8), intent(in) :: E_in + real(8), intent(out) :: E_out + real(8), intent(out) :: mu + end subroutine iSampleAngleEnergy + end interface + +contains + + subroutine secondary_sample(this, E_in, E_out, mu) + class(SecondaryDistribution), intent(in) :: this + real(8), intent(in) :: E_in + real(8), intent(out) :: E_out + real(8), intent(out) :: mu + + real(8) :: p_valid + + do i = 1, size(this%applicability) + ! Determine probability that i-th energy distribution is sampled + p_valid = interpolate_tab1(this%applicability(i), E_in) + + ! If i-th distribution is sampled, sample energy from the distribution + if (prn() <= p_valid) then + call this%distribution(i)%obj%sample(E_in, E_out, mu) + exit + end if + end do + end subroutine secondary_sample + +end module secondary_header diff --git a/src/secondary_kalbach.F90 b/src/secondary_kalbach.F90 new file mode 100644 index 0000000000..d0d2f32bf2 --- /dev/null +++ b/src/secondary_kalbach.F90 @@ -0,0 +1,163 @@ +module secondary_kalbach + + use constants, only: ZERO, ONE, TWO, HISTOGRAM, LINEAR_LINEAR + use error, only: fatal_error + use secondary_header, only: SecondaryDistribution + use random_lcg, only: prn + use search, only: binary_search + + type KalbachMannTable + integer :: n_discrete + integer :: interpolation + real(8), allocatable :: e_out(:) + real(8), allocatable :: p(:) + real(8), allocatable :: c(:) + real(8), allocatable :: r(:) + real(8), allocatable :: a(:) + end type KalbachMannTable + + type, extends(SecondaryDistribution) :: KalbachMann + integer :: n_region + integer, allocatable :: breakpoints(:) + integer, allocatable :: interpolation(:) + real(8), allocatable :: energy_in(:) + type(KalbachMannTable), allocatable :: table(:) + contains + procedure :: sample => kalbachmann_sample + end type KalbachMann + +contains + + subroutine kalbachmann_sample(this, E_in, E_out, mu) + class(KalbachMann), intent(in) :: this + real(8), intent(in) :: E_in + real(8), intent(out) :: E_out + real(8), intent(out) :: mu + + integer :: i, k, l + integer :: n_energy_in + integer :: n_energy_out + real(8) :: r ! interpolation factor on incoming energy + real(8) :: r1 ! random number on [0,1) + real(8) :: frac ! interpolation factor on outgoing energy + real(8) :: E_i_1, E_i_K ! endpoints on outgoing grid i + real(8) :: E_i1_1, E_i1_K ! endpoints on outgoing grid i+1 + real(8) :: E_1, E_K ! endpoints interpolated between i and i+1 + real(8) :: E_l_k, E_l_k1 ! adjacent E on outgoing grid l + real(8) :: p_l_k, p_l_k1 ! adjacent p on outgoing grid l + real(8) :: c_k, c_k1 ! cumulative probability + real(8) :: km_r, km_a ! Kalbach-Mann parameters + real(8) :: T + + ! TODO: Write error during initialization + if (this%n_region > 1) then + call fatal_error("Multiple interpolation regions not supported while & + &attempting to sample Kalbach-Mann distribution.") + end if + + ! find energy bin and calculate interpolation factor -- if the energy is + ! outside the range of the tabulated energies, choose the first or last bins + n_energy_in = size(this%energy_in) + if (E_in < this%energy_in(1)) then + i = 1 + r = ZERO + elseif (E_in > this%energy_in(n_energy_in)) then + i = n_energy_in - 1 + r = ONE + else + i = binary_search(this%energy_in, n_energy_in, E_in) + r = (E_in - this%energy_in(i)) / & + (this%energy_in(i+1) - this%energy_in(i)) + end if + + ! Sample between the ith and (i+1)th bin + if (r > prn()) then + l = i + 1 + else + l = i + end if + + ! interpolation for energy E1 and EK + n_energy_out = size(this%table(i)%e_out) + E_i_1 = this%table(i)%e_out(1) + E_i_K = this%table(i)%e_out(n_energy_out) + + n_energy_out = size(this%table(i+1)%e_out) + E_i1_1 = this%table(i+1)%e_out(1) + E_i1_K = this%table(i+1)%e_out(n_energy_out) + + E_1 = E_i_1 + r*(E_i1_1 - E_i_1) + E_K = E_i_K + r*(E_i1_K - E_i_K) + + ! TODO: Write error at initizliation + if (this%table(l)%n_discrete > 0) then + ! discrete lines present + call fatal_error("Discrete lines in continuous tabular distributed not & + &yet supported") + end if + + ! determine outgoing energy bin + n_energy_out = size(this%table(l)%e_out) + r1 = prn() + c_k = this%table(l)%c(1) + do k = 1, n_energy_out - 1 + c_k1 = this%table(l)%c(k+1) + if (r1 < c_k1) exit + c_k = c_k1 + end do + + ! check to make sure k is <= NP - 1 + k = min(k, n_energy_out - 1) + + E_l_k = this%table(l)%e_out(k) + p_l_k = this%table(l)%p(k) + if (this%table(l)%interpolation == HISTOGRAM) then + ! Histogram interpolation + if (p_l_k > ZERO) then + E_out = E_l_k + (r1 - c_k)/p_l_k + else + E_out = E_l_k + end if + + ! Determine Kalbach-Mann parameters + km_r = this%table(l)%r(k) + km_a = this%table(l)%a(k) + + elseif (this%table(l)%interpolation == LINEAR_LINEAR) then + ! Linear-linear interpolation + E_l_k1 = this%table(l)%e_out(k+1) + p_l_k1 = this%table(l)%p(k+1) + + frac = (p_l_k1 - p_l_k)/(E_l_k1 - E_l_k) + if (frac == ZERO) then + E_out = E_l_k + (r1 - c_k)/p_l_k + else + E_out = E_l_k + (sqrt(max(ZERO, p_l_k*p_l_k + & + TWO*frac*(r1 - c_k))) - p_l_k)/frac + end if + + ! Determine Kalbach-Mann parameters + km_r = this%table(l)%r(k) + (E_out - E_l_k)/(E_l_k1 - E_l_k) * & + (this%table(l)%r(k+1) - this%table(l)%r(k)) + km_a = this%table(l)%a(k) + (E_out - E_l_k)/(E_l_k1 - E_l_k) * & + (this%table(l)%a(k+1) - this%table(l)%a(k)) + end if + + ! Now interpolate between incident energy bins i and i + 1 + if (l == i) then + E_out = E_1 + (E_out - E_i_1)*(E_K - E_1)/(E_i_K - E_i_1) + else + E_out = E_1 + (E_out - E_i1_1)*(E_K - E_1)/(E_i1_K - E_i1_1) + end if + + ! Sampled correlated angle from Kalbach-Mann parameters + if (prn() > km_r) then + T = (TWO*prn() - ONE) * sinh(km_a) + mu = log(T + sqrt(T*T + ONE))/km_a + else + r1 = prn() + mu = log(r1*exp(km_a) + (ONE - r1)*exp(-km_a))/km_a + end if + end subroutine kalbachmann_sample + +end module secondary_kalbach diff --git a/src/secondary_uncorrelated.F90 b/src/secondary_uncorrelated.F90 new file mode 100644 index 0000000000..7d0046aa4f --- /dev/null +++ b/src/secondary_uncorrelated.F90 @@ -0,0 +1,29 @@ +module secondary_uncorrelated + + use angle_distribution, only: AngleDistribution + use energy_distribution, only: EnergyDistribution + use secondary_header, only: SecondaryDistribution + + type, extends(SecondaryDistribution) :: UncorrelatedAngleEnergy + type(AngleDistribution) :: angle + class(EnergyDistribution), allocatable :: energy + contains + procedure :: sample => uncorrelated_sample + end type UncorrelatedAngleEnergy + +contains + + subroutine uncorrelated_sample(this, E_in, E_out, mu) + class(UncorrelatedAngleEnergy), intent(in) :: this + real(8), intent(in) :: E_in + real(8), intent(out) :: E_out + real(8), intent(out) :: mu + + ! Sample cosine of scattering angle + mu = this%angle%sample(E_in) + + ! Sample outgoing energy + E_out = this%energy%sample(E_in) + end subroutine uncorrelated_sample + +end module secondary_uncorrelated From dcb675fbacd20c562410088af72db2c7e3798471 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 17 Nov 2015 15:30:18 -0600 Subject: [PATCH 173/650] Full use of new object-oriented secondary angle-energy distributions --- src/ace.F90 | 764 ++++++++++++++----------- src/ace_header.F90 | 77 +-- src/distribution_univariate.F90 | 29 +- src/endf_header.F90 | 34 ++ src/energy_distribution.F90 | 27 +- src/interpolation.F90 | 1 - src/output.F90 | 31 +- src/physics.F90 | 962 +------------------------------- src/search.F90 | 1 - src/secondary_correlated.F90 | 62 +- src/secondary_header.F90 | 19 +- src/secondary_kalbach.F90 | 18 +- src/secondary_uncorrelated.F90 | 13 +- 13 files changed, 581 insertions(+), 1457 deletions(-) diff --git a/src/ace.F90 b/src/ace.F90 index e97338b558..1407a4b132 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -1,17 +1,23 @@ module ace - use ace_header, only: Nuclide, Reaction, SAlphaBeta, XsListing, & - DistEnergy + use ace_header, only: Nuclide, Reaction, SAlphaBeta, XsListing use constants - use endf, only: reaction_name, is_fission, is_disappearance - use error, only: fatal_error, warning - use fission, only: nu_total + use distribution_univariate, only: Uniform, Equiprobable, Tabular + use endf, only: reaction_name, is_fission, is_disappearance + use energy_distribution, only: TabularEquiprobable, LevelInelastic, & + ContinuousTabular, MaxwellEnergy, Evaporation, WattEnergy, NBodyPhaseSpace + use error, only: fatal_error, warning + use fission, only: nu_total use global - use list_header, only: ListInt - use material_header, only: Material - use output, only: write_message - use set_header, only: SetChar - use string, only: to_str, to_lower + use list_header, only: ListInt + use material_header, only: Material + use output, only: write_message + use set_header, only: SetChar + use secondary_header, only: AngleEnergy + use secondary_correlated, only: CorrelatedAngleEnergy + use secondary_kalbach, only: KalbachMann + use secondary_uncorrelated, only: UncorrelatedAngleEnergy + use string, only: to_str, to_lower implicit none @@ -372,8 +378,8 @@ contains else call read_nu_data(nuc) call read_reactions(nuc) - call read_angular_dist(nuc) call read_energy_dist(nuc) + call read_angular_dist(nuc) call read_unr_res(nuc) end if @@ -516,9 +522,10 @@ contains integer :: LED ! location of energy distribution locators integer :: LDIS ! location of all energy distributions integer :: LOCC ! location of energy distributions for given MT + integer :: LAW + integer :: IDAT integer :: lc ! locator integer :: length ! length of data to allocate - type(DistEnergy), pointer :: edist JXS2 = JXS(2) JXS24 = JXS(24) @@ -661,11 +668,15 @@ contains ! Loop over all delayed neutron precursor groups do i = 1, NPCR ! find location of energy distribution data - LOCC = int(XSS(LED + i - 1)) + LOCC = nint(XSS(LED + i - 1)) + + ! Determine law and location of data + LAW = nint(XSS(LDIS + LOCC)) + IDAT = nint(XSS(LDIS + LOCC + 1)) ! read energy distribution data - edist => nuc % nu_d_edist(i) - call get_energy_dist(edist, LOCC, .true.) + call get_energy_dist(nuc%nu_d_edist(i)%obj, LAW, LDIS, IDAT, & + ZERO, ZERO) end do ! ======================================================================= @@ -738,8 +749,8 @@ contains rxn%multiplicity = 1 rxn%threshold = 1 rxn%scatter_in_cm = .true. - rxn%has_angle_dist = .false. - rxn%has_energy_dist = .false. + allocate(rxn%secondary%distribution(1)) + allocate(UncorrelatedAngleEnergy :: rxn%secondary%distribution(1)%obj) end associate ! Add contribution of elastic scattering to total cross section @@ -754,10 +765,6 @@ contains do i = 1, NMT associate (rxn => nuc % reactions(i+1)) - ! set defaults - rxn % has_angle_dist = .false. - rxn % has_energy_dist = .false. - ! read MT number, Q-value, and neutrons produced rxn % MT = int(XSS(LMT + i - 1)) rxn % Q_value = XSS(JXS4 + i - 1) @@ -887,86 +894,101 @@ contains subroutine read_angular_dist(nuc) type(Nuclide), intent(inout) :: nuc - integer :: JXS8 ! location of angular distribution locators - integer :: JXS9 ! location of angular distributions integer :: LOCB ! location of angular distribution for given MT integer :: NE ! number of incoming energies integer :: NP ! number of points for cosine distribution - integer :: LC ! locator integer :: i ! index in reactions array integer :: j ! index over incoming energies - integer :: length ! length of data array to allocate - - JXS8 = JXS(8) - JXS9 = JXS(9) + integer :: k ! index over energy distributions + integer :: interp + integer, allocatable :: LC(:) ! locator + real(8), allocatable :: x(:) + real(8), allocatable :: p(:) ! loop over all reactions with secondary neutrons -- NXS(5) does not include ! elastic scattering do i = 1, NXS(5) + 1 associate (rxn => nuc%reactions(i)) - ! find location of angular distribution - LOCB = int(XSS(JXS8 + i - 1)) - if (LOCB == -1) then - ! Angular distribution data are specified through LAWi = 44 in the DLW - ! block - cycle - elseif (LOCB == 0) then - ! No angular distribution data are given for this reaction, isotropic - ! scattering is assumed (in CM if TY < 0 and in LAB if TY > 0) - cycle - end if - rxn % has_angle_dist = .true. + LOCB = int(XSS(JXS(8) + i - 1)) - ! allocate space for incoming energies and locations - NE = int(XSS(JXS9 + LOCB - 1)) - rxn % adist % n_energy = NE - allocate(rxn % adist % energy(NE)) - allocate(rxn % adist % type(NE)) - allocate(rxn % adist % location(NE)) + ! Angular distribution given as part of a correlated angle-energy distribution + if (LOCB == -1) cycle - ! read incoming energy grid and location of nucs - XSS_index = JXS9 + LOCB - rxn % adist % energy = get_real(NE) - rxn % adist % location = get_int(NE) + ! No angular distribution data are given for this reaction, isotropic + ! scattering is assumed (in CM if TY < 0 and in LAB if TY > 0) + if (LOCB == 0) cycle - ! determine dize of data block - length = 0 - do j = 1, NE - LC = rxn % adist % location(j) - if (LC == 0) then - ! isotropic - rxn % adist % type(j) = ANGLE_ISOTROPIC - elseif (LC > 0) then - ! 32 equiprobable bins - rxn % adist % type(j) = ANGLE_32_EQUI - length = length + 33 - elseif (LC < 0) then - ! tabular distribution - rxn % adist % type(j) = ANGLE_TABULAR - NP = int(XSS(JXS9 + abs(LC))) - length = length + 2 + 3*NP - end if - end do + ! Loop over each separate energy distribution. Even though there is only + ! "one" angular distribution, it is repeated as many times as there are + ! energy distributions for this reaction since the + ! UncorrelatedAngleEnergy type holds one angle and energy distribution. + do k = 1, size(rxn%secondary%distribution) + select type (aedist => rxn%secondary%distribution(k)%obj) + type is (UncorrelatedAngleEnergy) + ! allocate space for incoming energies and locations + NE = int(XSS(JXS(9) + LOCB - 1)) + allocate(aedist%angle%energy(NE)) + allocate(aedist%angle%distribution(NE)) + allocate(LC(NE)) - ! allocate angular distribution data and read - allocate(rxn % adist % data(length)) + ! read incoming energy grid and location of nucs + XSS_index = JXS(9) + LOCB + aedist%angle%energy(:) = get_real(NE) + LC(:) = get_int(NE) - ! read angular distribution -- currently this does not actually parse the - ! angular distribution tables for each incoming energy, that must be done - ! on-the-fly - XSS_index = JXS9 + LOCB + 2 * NE - rxn % adist % data = get_real(length) + ! determine dize of data block + do j = 1, NE + if (LC(j) == 0) then + ! isotropic + allocate(Uniform :: aedist%angle%distribution(j)%obj) + select type (adist => aedist%angle%distribution(j)%obj) + type is (Uniform) + adist%a = -ONE + adist%b = ONE + end select - ! change location pointers since they are currently relative to JXS(9) - LC = LOCB + 2 * NE + 1 - do j = 1, NE - ! For consistency, leave location as 0 if type is isotropic. - ! This is not necessary for current correctness, but can avoid - ! future issues - if (rxn % adist % location(j) /= 0) then - rxn % adist % location(j) = abs(rxn % adist % location(j)) - LC - end if + elseif (LC(j) > 0) then + ! 32 equiprobable bins + allocate(Equiprobable :: aedist%angle%distribution(j)%obj) + select type (adist => aedist%angle%distribution(j)%obj) + type is (Equiprobable) + allocate(adist%x(33)) + end select + + elseif (LC(j) < 0) then + ! tabular distribution + allocate(Tabular :: aedist%angle%distribution(j)%obj) + end if + end do + + ! read angular distribution -- currently this does not actually parse the + ! angular distribution tables for each incoming energy, that must be done + ! on-the-fly + do j = 1, NE + XSS_index = JXS(9) + abs(LC(j)) - 1 + select type(adist => aedist%angle%distribution(j)%obj) + type is (Equiprobable) + adist%x(:) = get_real(33) + type is (Tabular) + ! determine interpolation and number of points + interp = nint(XSS(XSS_index)) + NP = nint(XSS(XSS_index + 1)) + + ! Get probability density data + XSS_index = XSS_index + 2 + allocate(x(NP), p(NP)) + x(:) = get_real(NP) + p(:) = get_real(NP) + + ! initialize distribution + call adist%initialize(x, p, interp) + deallocate(x, p) + end select + end do + deallocate(LC) + + end select end do end associate end do @@ -981,25 +1003,46 @@ contains subroutine read_energy_dist(nuc) type(Nuclide), intent(inout) :: nuc - integer :: LED ! location of energy distribution locators - integer :: LOCC ! location of energy distributions for given MT integer :: i ! loop index - - LED = JXS(10) + integer :: n + integer :: IDAT ! locator for distribution data + integer :: LNW ! location of next energy law + integer :: LAW ! Type of energy law ! Loop over all reactions do i = 1, NXS(5) - associate (rxn => nuc % reactions(i+1)) ! skip over elastic scattering - rxn % has_energy_dist = .true. + ! Determine how many energy distributions are present for this reaction + LNW = nint(XSS(JXS(10) + i - 1)) + n = 0 + do while (LNW > 0) + n = n + 1 + LNW = nint(XSS(JXS(11) + LNW - 1)) + end do - ! find location of energy distribution data - LOCC = int(XSS(LED + i - 1)) + ! Allocate space for distributions and probability of validity + associate (secondary => nuc%reactions(i + 1)%secondary) + allocate(secondary%applicability(n)) + allocate(secondary%distribution(n)) - ! allocate energy distribution - allocate(rxn % edist) + LNW = nint(XSS(JXS(10) + i - 1)) + n = 0 + do while (LNW > 0) + n = n + 1 - ! read data for energy distribution - call get_energy_dist(rxn % edist, LOCC) + ! Determine energy law and location of data + LAW = nint(XSS(JXS(11) + LNW)) + IDAT = nint(XSS(JXS(11) + LNW + 1)) + + ! Read probability of law validity + call secondary%applicability(n)%from_ace(XSS, JXS(11) + LNW + 2) + + ! Read energy law data + call get_energy_dist(secondary%distribution(n)%obj, LAW, & + JXS(11), IDAT, nuc%awr, nuc%reactions(i)%Q_value) + + ! Get locator for next distribution + LNW = nint(XSS(JXS(11) + LNW - 1)) + end do end associate end do @@ -1011,281 +1054,324 @@ contains ! single reaction !=============================================================================== - recursive subroutine get_energy_dist(edist, loc_law, delayed_n) - type(DistEnergy), intent(inout) :: edist ! energy distribution - integer, intent(in) :: loc_law ! locator for data - logical, intent(in), optional :: delayed_n ! is this for delayed neutrons? + recursive subroutine get_energy_dist(aedist, law, LDIS, IDAT, awr, Q_value) + class(AngleEnergy), allocatable, intent(inout) :: aedist + integer, intent(in) :: law + integer, intent(in) :: LDIS + integer, intent(in) :: IDAT + real(8), intent(in) :: awr + real(8), intent(in) :: Q_value - integer :: LDIS ! location of all energy distributions - integer :: LNW ! location of next energy distribution if multiple - integer :: LAW ! secondary energy distribution law + integer :: i, j integer :: NR ! number of interpolation regions integer :: NE ! number of incoming energies - integer :: IDAT ! location of first energy distribution for given MT - integer :: lc ! locator - integer :: length ! length of data to allocate - integer :: length_interp_data ! length of interpolation data + integer :: NP ! number of outgoing energies/angles + integer :: interp + integer, allocatable :: L(:) ! locations of distributions for each Ein + integer, allocatable :: LC(:) ! locations of distributions for each Ein + real(8), allocatable :: x(:) + real(8), allocatable :: p(:) - ! determine location of energy distribution - if (present(delayed_n)) then - LDIS = JXS(27) + XSS_index = LDIS + IDAT - 1 + + if (law == 44) then + allocate(KalbachMann :: aedist) + elseif (law == 61) then + allocate(CorrelatedAngleEnergy :: aedist) else - LDIS = JXS(11) + allocate(UncorrelatedAngleEnergy :: aedist) end if - ! locator for next law and information on this law - LNW = int(XSS(LDIS + loc_law - 1)) - LAW = int(XSS(LDIS + loc_law)) - IDAT = int(XSS(LDIS + loc_law + 1)) - NR = int(XSS(LDIS + loc_law + 2)) - edist % law = LAW - edist % p_valid % n_regions = NR + select type (aedist) + type is (UncorrelatedAngleEnergy) + ! ======================================================================== + ! UNCORRELATED ENERGY DISTRIBUTIONS - ! allocate space for ENDF interpolation parameters - if (NR > 0) then - allocate(edist % p_valid % nbt(NR)) - allocate(edist % p_valid % int(NR)) - end if - - ! read ENDF interpolation parameters - XSS_index = LDIS + loc_law + 3 - if (NR > 0) then - edist % p_valid % nbt = int(get_real(NR)) - edist % p_valid % int = int(get_real(NR)) - end if - - ! allocate space for law validity data - NE = int(XSS(LDIS + loc_law + 3 + 2*NR)) - edist % p_valid % n_pairs = NE - allocate(edist % p_valid % x(NE)) - allocate(edist % p_valid % y(NE)) - - length_interp_data = 5 + 2*(NR + NE) - - ! read law validity data - XSS_index = LDIS + loc_law + 4 + 2*NR - edist % p_valid % x = get_real(NE) - edist % p_valid % y = get_real(NE) - - ! Set index to beginning of IDAT array - lc = LDIS + IDAT - 2 - - ! determine length of energy distribution - length = length_energy_dist(lc, LAW, loc_law, length_interp_data) - - ! allocate secondary energy distribution array - allocate(edist % data(length)) - - ! read secondary energy distribution - XSS_index = lc + 1 - edist % data = get_real(length) - - ! read next energy distribution if present - if (LNW > 0) then - allocate(edist % next) - call get_energy_dist(edist % next, LNW) - end if - - end subroutine get_energy_dist - -!=============================================================================== -! LENGTH_ENERGY_DIST determines how many values are contained in an LDAT energy -! distribution array based on the secondary energy law and location in XSS -!=============================================================================== - - function length_energy_dist(lc, law, LOCC, lid) result(length) - integer, intent(in) :: lc ! location in XSS array - integer, intent(in) :: law ! energy distribution law - integer, intent(in) :: LOCC ! location of energy distribution - integer, intent(in) :: lid ! length of interpolation data - integer :: length ! length of energy distribution (LDAT) - - integer :: i ! loop index for incoming energies - integer :: j ! loop index for outgoing energies - integer :: k ! dummy index in XSS - integer :: NR ! number of interpolation regions - integer :: NE ! number of incoming energies - integer :: NP ! number of points in outgoing energy distribution - integer :: NMU ! number of points in outgoing cosine distribution - integer :: NRa ! number of interpolation regions for Watt 'a' - integer :: NEa ! number of energies for Watt 'a' - integer :: NRb ! number of interpolation regions for Watt 'b' - integer :: NEb ! number of energies for Watt 'b' - real(8), allocatable :: L(:) ! locations of distributions for each Ein - - ! initialize length - length = 0 - - select case (law) - case (1) - ! Tabular equiprobable energy bins - NR = int(XSS(lc + 1)) - NE = int(XSS(lc + 2 + 2*NR)) - NP = int(XSS(lc + 3 + 2*NR + NE)) - length = 3 + 2*NR + NE + 3*NP*NE - - case (2) - ! Discrete photon energy - length = 2 - - case (3) - ! Level scattering - length = 2 - - case (4) - ! Continuous tabular distribution - NR = int(XSS(lc + 1)) - NE = int(XSS(lc + 2 + 2*NR)) - allocate(L(NE)) - L(:) = int(XSS(lc + 3 + 2*NR + NE: lc + 3 + 2*NR + 2*NE - 1)) - - ! Continue with finding data length - length = length + 2 + 2*NR + 2*NE - do i = 1,NE - ! Some older data sets use the same LDAT for multiple Ein tables. - ! If this is the case, we should skip incrementing length when it is - ! not needed. - if (i < NE) then - if (any(L(i) == L(i + 1: NE))) then - ! adjust location for this block - j = lc + 2 + 2*NR + NE + i - XSS(j) = XSS(j) - LOCC - lid - cycle + select case (law) + case (1) + allocate(TabularEquiprobable :: aedist%energy) + select type (edist => aedist%energy) + type is (TabularEquiprobable) + NR = nint(XSS(XSS_index)) + NE = nint(XSS(XSS_index + 1 + 2*NR)) + if (NR > 0) then + call fatal_error("Multiple interpolation regions not yet supported & + &for tabular equiprobable energy distributions.") end if - end if - ! determine length - NP = int(XSS(lc + length + 2)) - length = length + 2 + 3*NP + edist%n_region = NR - ! adjust location for this block - j = lc + 2 + 2*NR + NE + i - XSS(j) = XSS(j) - LOCC - lid + ! Read incoming energies for which outgoing energies are tabulated + allocate(edist%energy_in(NE)) + XSS_index = XSS_index + 2 + 2*NR + edist%energy_in(:) = get_real(NE) + + ! Read outgoing energy tables + NP = nint(XSS(XSS_index)) + allocate(edist%energy_out(NP, NE)) + XSS_index = XSS_index + 1 + do i = 1, NE + edist%energy_out(:, i) = get_real(NP) + end do + end select + + case (3) + allocate(LevelInelastic :: aedist%energy) + select type (edist => aedist%energy) + type is (LevelInelastic) + edist%threshold = XSS(XSS_index) + edist%mass_ratio = XSS(XSS_index + 1) + end select + + case (4) + allocate(ContinuousTabular :: aedist%energy) + select type (edist => aedist%energy) + type is (ContinuousTabular) + NR = nint(XSS(XSS_index)) + XSS_index = XSS_index + 1 + if (NR > 1) then + call fatal_error("Multiple interpolation regions not yet supported & + &for continuous tabular energy distributions.") + end if + edist%n_region = NR + + ! Read breakpoints and interpolation parameters + if (NR > 0) then + allocate(edist%breakpoints(NR)) + allocate(edist%interpolation(NR)) + edist%breakpoints(:) = get_int(NR) + edist%interpolation(:) = get_int(NR) + end if + + ! Read incoming energies for which outgoing energies are tabulated and + ! locators + NE = nint(XSS(XSS_index)) + XSS_index = XSS_index + 1 + allocate(edist%energy_in(NE)) + allocate(L(NE)) + edist%energy_in(:) = get_real(NE) + L(:) = get_int(NE) + + ! Read outgoing energy tables + allocate(edist%energy_out(NE)) + do i = 1, NE + ! Determine interpolation and number of discrete points + XSS_index = LDIS + L(i) - 1 + interp = nint(XSS(XSS_index)) + edist%energy_out(i)%interpolation = mod(interp, 10) + edist%energy_out(i)%n_discrete = (interp - & + edist%energy_out(i)%interpolation)/10 + + ! check for discrete lines present + if (edist%energy_out(i)%n_discrete > 0) then + call fatal_error("Discrete lines in continuous tabular & + &distribution not yet supported") + end if + + ! Determine number of points and allocate space + NP = nint(XSS(XSS_index + 1)) + allocate(edist%energy_out(i)%e_out(NP)) + allocate(edist%energy_out(i)%p(NP)) + allocate(edist%energy_out(i)%c(NP)) + + ! Read tabular PDF for outgoing energy + XSS_index = XSS_index + 2 + edist%energy_out(i)%e_out(:) = get_real(NP) + edist%energy_out(i)%p(:) = get_real(NP) + edist%energy_out(i)%c(:) = get_real(NP) + end do + + deallocate(L) + end select + + case (7) + allocate(MaxwellEnergy :: aedist%energy) + select type (edist => aedist%energy) + type is (MaxwellEnergy) + call edist%theta%from_ace(XSS, XSS_index) + edist%u = XSS(XSS_index + 2 + 2*edist%theta%n_regions + & + 2*edist%theta%n_pairs) + end select + + case (9) + allocate(Evaporation :: aedist%energy) + select type(edist => aedist%energy) + type is (Evaporation) + call edist%theta%from_ace(XSS, XSS_index) + edist%u = XSS(XSS_index + 2 + 2*edist%theta%n_regions + & + 2*edist%theta%n_pairs) + end select + + case (11) + allocate(WattEnergy :: aedist%energy) + select type(edist => aedist%energy) + type is (WattEnergy) + call edist%a%from_ace(XSS, XSS_index) + XSS_index = XSS_index + 2 + 2*edist%a%n_regions + 2*edist%a%n_pairs + call edist%b%from_ace(XSS, XSS_index) + XSS_index = XSS_index + 2 + 2*edist%b%n_regions + 2*edist%b%n_pairs + edist%u = XSS(XSS_index) + end select + + case (66) + allocate(NBodyPhaseSpace :: aedist%energy) + select type(edist => aedist%energy) + type is (NBodyPhaseSpace) + edist%n_bodies = int(XSS(XSS_index)) + edist%mass_ratio = XSS(XSS_index + 1) + edist%A = awr + edist%Q = Q_value + end select + + end select + + type is (KalbachMann) + ! ======================================================================== + ! CORRELATED KALBACH-MANN DISTRIBUTION + + NR = int(XSS(XSS_index)) + NE = int(XSS(XSS_index + 1 + 2*NR)) + if (NR > 0) then + call fatal_error("Multiple interpolation regions not yet supported & + &for Kalbach-Mann energy distributions.") + end if + aedist%n_region = NR + + ! Read incoming energies for which outgoing energies are tabulated and locators + allocate(aedist%energy_in(NE)) + allocate(L(NE)) + XSS_index = XSS_index + 2 + 2*NR + aedist%energy_in(:) = get_real(NE) + L(:) = get_int(NE) + + ! Read outgoing energy tables + allocate(aedist%table(NE)) + do i = 1, NE + ! Determine interpolation and number of discrete points + XSS_index = LDIS + L(i) - 1 + interp = nint(XSS(XSS_index)) + aedist%table(i)%interpolation = mod(interp, 10) + aedist%table(i)%n_discrete = (interp - aedist%table(i)%interpolation)/10 + + ! check for discrete lines present + if (aedist%table(i)%n_discrete > 0) then + call fatal_error("Discrete lines in Kalbach-Mann distribution not & + &yet supported") + end if + + ! Determine number of points and allocate space + NP = nint(XSS(XSS_index + 1)) + allocate(aedist%table(i)%e_out(NP)) + allocate(aedist%table(i)%p(NP)) + allocate(aedist%table(i)%c(NP)) + allocate(aedist%table(i)%r(NP)) + allocate(aedist%table(i)%a(NP)) + + ! Read tabular PDF for outgoing energy + XSS_index = XSS_index + 2 + aedist%table(i)%e_out(:) = get_real(NP) + aedist%table(i)%p(:) = get_real(NP) + aedist%table(i)%c(:) = get_real(NP) + aedist%table(i)%r(:) = get_real(NP) + aedist%table(i)%a(:) = get_real(NP) end do + deallocate(L) - case (5) - ! General evaporation spectrum - NR = int(XSS(lc + 1)) - NE = int(XSS(lc + 2 + 2*NR)) - NP = int(XSS(lc + 3 + 2*NR + 2*NE)) - length = 3 + 2*NR + 2*NE + NP + type is (CorrelatedAngleEnergy) + ! ======================================================================== + ! CORRELATED ANGLE-ENERGY DISTRIBUTION - case (7) - ! Maxwell fission spectrum - NR = int(XSS(lc + 1)) - NE = int(XSS(lc + 2 + 2*NR)) - length = 3 + 2*NR + 2*NE + NR = int(XSS(XSS_index)) + NE = int(XSS(XSS_index + 1 + 2*NR)) + if (NR > 0) then + call fatal_error("Multiple interpolation regions not yet supported & + &for correlated angle-energy distributions.") + end if + aedist%n_region = NR - case (9) - ! Evaporation spectrum - NR = int(XSS(lc + 1)) - NE = int(XSS(lc + 2 + 2*NR)) - length = 3 + 2*NR + 2*NE - - case (11) - ! Watt spectrum - NRa = int(XSS(lc + 1)) - NEa = int(XSS(lc + 2 + 2*NRa)) - NRb = int(XSS(lc + 3 + 2*(NRa+NEa))) - NEb = int(XSS(lc + 4 + 2*(NRa+NEa+NRb))) - length = 5 + 2*(NRa + NEa + NRb + NEb) - - case (44) - ! Kalbach-Mann correlated scattering - NR = int(XSS(lc + 1)) - NE = int(XSS(lc + 2 + 2*NR)) + ! Read incoming energies for which outgoing energies are tabulated and + ! locators + allocate(aedist%energy_in(NE)) allocate(L(NE)) - L(:) = int(XSS(lc + 3 + 2*NR + NE: lc + 3 + 2*NR + 2*NE - 1)) + XSS_index = XSS_index + 2 + 2*NR + aedist%energy_in(:) = get_real(NE) + L(:) = get_int(NE) - ! Continue with finding data length - length = length + 2 + 2*NR + 2*NE - do i = 1,NE - ! Some older data sets use the same LDAT for multiple Ein tables. - ! If this is the case, we should skip incrementing length when it is - ! not needed. - if (i < NE) then - if (any(L(i) == L(i + 1: NE))) then - ! adjust location for this block - j = lc + 2 + 2*NR + NE + i - XSS(j) = XSS(j) - LOCC - lid - cycle - end if - end if - NP = int(XSS(lc + length + 2)) - length = length + 2 + 5*NP + ! Read outgoing energy tables + allocate(aedist%table(NE)) + do i = 1, NE + ! Determine interpolation and number of discrete points + XSS_index = LDIS + L(i) - 1 + interp = nint(XSS(XSS_index)) + aedist%table(i)%interpolation = mod(interp, 10) + aedist%table(i)%n_discrete = (interp - aedist%table(i)%interpolation)/10 - ! adjust location for this block - j = lc + 2 + 2*NR + NE + i - XSS(j) = XSS(j) - LOCC - lid - end do - deallocate(L) - - case (61) - ! Correlated energy and angle distribution - NR = int(XSS(lc + 1)) - NE = int(XSS(lc + 2 + 2*NR)) - allocate(L(NE)) - L(:) = int(XSS(lc + 3 + 2*NR + NE: lc + 3 + 2*NR + 2*NE - 1)) - - ! Continue with finding data length - length = length + 2 + 2*NR + 2*NE - do i = 1,NE - ! Some older data sets use the same LDAT for multiple Ein tables. - ! If this is the case, we should skip incrementing length when it is - ! not needed. - if (i < NE) then - if (any(L(i) == L(i + 1: NE))) then - ! adjust locators for energy distribution - j = lc + 2 + 2*NR + NE + i - XSS(j) = XSS(j) - LOCC - lid - cycle - end if + ! check for discrete lines present + if (aedist%table(i)%n_discrete > 0) then + call fatal_error("Discrete lines in correlated angle-energy & + &distribution not yet supported") end if - ! outgoing energy distribution - NP = int(XSS(lc + length + 2)) + ! Determine number of points and allocate space + NP = nint(XSS(XSS_index + 1)) + allocate(aedist%table(i)%e_out(NP)) + allocate(aedist%table(i)%p(NP)) + allocate(aedist%table(i)%c(NP)) + allocate(LC(NP)) - ! adjust locators for angular distribution + ! Read tabular PDF for outgoing energy + XSS_index = XSS_index + 2 + aedist%table(i)%e_out(:) = get_real(NP) + aedist%table(i)%p(:) = get_real(NP) + aedist%table(i)%c(:) = get_real(NP) + LC(:) = get_int(NP) + + ! allocate angular distributions for each incoming/outgoing energy + allocate(aedist%table(i)%angle(NP)) do j = 1, NP - k = lc + length + 2 + 3*NP + j - if (XSS(k) /= 0) XSS(k) = XSS(k) - LOCC - lid + if (LC(j) == 0) then + ! isotropic + allocate(Uniform :: aedist%table(i)%angle(j)%obj) + select type (adist => aedist%table(i)%angle(j)%obj) + type is (Uniform) + adist%a = -ONE + adist%b = ONE + end select + + elseif (LC(j) > 0) then + ! tabular distribution + allocate(Tabular :: aedist%table(i)%angle(j)%obj) + end if end do - length = length + 2 + 4*NP + ! read angular distributions do j = 1, NP - ! outgoing angle distribution -- NMU here is actually - ! referred to as NP in the MCNP documentation - NMU = int(XSS(lc + length + 2)) - length = length + 2 + 3*NMU + XSS_index = LDIS + abs(LC(j)) - 1 + select type(adist => aedist%table(i)%angle(j)%obj) + type is (Tabular) + ! determine interpolation and number of points + interp = nint(XSS(XSS_index)) + NP = nint(XSS(XSS_index + 1)) + + ! Get probability density data + XSS_index = XSS_index + 2 + allocate(x(NP), p(NP)) + x(:) = get_real(NP) + p(:) = get_real(NP) + + ! initialize distribution + call adist%initialize(x, p, interp) + deallocate(x, p) + end select end do + deallocate(LC) - ! adjust locators for energy distribution - j = lc + 2 + 2*NR + NE + i - XSS(j) = XSS(j) - LOCC - lid end do - deallocate(L) - case (66) - ! N-body phase space distribution - length = 2 - case (67) - ! Laboratory energy-angle law - NR = int(XSS(lc + 1)) - NE = int(XSS(lc + 2 + 2*NR)) - ! Before progressing, check to see if data set uses L(I) values - ! in a way inconsistent with the current form of the ACE Format Guide - ! (MCNP5 Manual, Vol 3) - allocate(L(NE)) - L(:) = int(XSS(lc + 3 + 2*NR + NE: lc + 3 + 2*NR + 2*NE - 1)) - ! Don't currently do anything with L deallocate(L) - ! Continue with finding data length - NMU = int(XSS(lc + 4 + 2*NR + 2*NE)) - length = 4 + 2*(NR + NE + NMU) - end select - end function length_energy_dist + end subroutine get_energy_dist !=============================================================================== ! READ_UNR_RES reads in unresolved resonance probability tables if present. diff --git a/src/ace_header.F90 b/src/ace_header.F90 index d7c298979c..2331f9117c 100644 --- a/src/ace_header.F90 +++ b/src/ace_header.F90 @@ -3,42 +3,11 @@ module ace_header use constants, only: MAX_FILE_LEN, ZERO use dict_header, only: DictIntInt use endf_header, only: Tab1 + use secondary_header, only: SecondaryDistribution, AngleEnergyContainer use stl_vector, only: VectorInt implicit none -!=============================================================================== -! DISTANGLE contains data for a tabular secondary angle distribution whether it -! be tabular or 32 equiprobable cosine bins -!=============================================================================== - - type DistAngle - integer :: n_energy ! # of incoming energies - real(8), allocatable :: energy(:) ! incoming energy grid - integer, allocatable :: type(:) ! type of distribution - integer, allocatable :: location(:) ! location of each table - real(8), allocatable :: data(:) ! angular distribution data - end type DistAngle - -!=============================================================================== -! DISTENERGY contains data for a secondary energy distribution for all -! scattering laws -!=============================================================================== - - type DistEnergy - integer :: law ! secondary distribution law - type(Tab1) :: p_valid ! probability of law validity - real(8), allocatable :: data(:) ! energy distribution data - - ! For reactions that may have multiple energy distributions such as (n,2n), - ! this pointer allows multiple laws to be stored - type(DistEnergy), pointer :: next => null() - - ! Type-Bound procedures - contains - procedure :: clear => distenergy_clear ! Deallocates DistEnergy - end type DistEnergy - !=============================================================================== ! REACTION contains the cross-section and secondary energy and angle ! distributions for a single reaction in a continuous-energy ACE-format table @@ -53,10 +22,7 @@ module ace_header logical :: scatter_in_cm ! scattering system in center-of-mass? logical :: multiplicity_with_E = .false. ! Flag to indicate E-dependent multiplicity real(8), allocatable :: sigma(:) ! Cross section values - logical :: has_angle_dist ! Angle distribution present? - logical :: has_energy_dist ! Energy distribution present? - type(DistAngle) :: adist ! Secondary angular distribution - type(DistEnergy), pointer :: edist => null() ! Secondary energy distribution + type(SecondaryDistribution) :: secondary ! Type-Bound procedures contains @@ -137,7 +103,7 @@ module ace_header integer :: n_precursor ! # of delayed neutron precursors real(8), allocatable :: nu_d_data(:) real(8), allocatable :: nu_d_precursor_data(:) - type(DistEnergy), pointer :: nu_d_edist(:) => null() + type(AngleEnergyContainer), allocatable :: nu_d_edist(:) ! Unresolved resonance data logical :: urr_present @@ -284,37 +250,14 @@ module ace_header contains -!=============================================================================== -! DISTENERGY_CLEAR resets and deallocates data in DistEnergy. -!=============================================================================== - - recursive subroutine distenergy_clear(this) - - class(DistEnergy), intent(inout) :: this ! The DistEnergy object to clear - - if (associated(this % next)) then - ! recursively clear this item - call this % next % clear() - deallocate(this % next) - end if - - end subroutine distenergy_clear - !=============================================================================== ! REACTION_CLEAR resets and deallocates data in Reaction. !=============================================================================== subroutine reaction_clear(this) - class(Reaction), intent(inout) :: this ! The Reaction object to clear if (associated(this % multiplicity_E)) deallocate(this % multiplicity_E) - - if (associated(this % edist)) then - call this % edist % clear() - deallocate(this % edist) - end if - end subroutine reaction_clear !=============================================================================== @@ -322,21 +265,11 @@ module ace_header !=============================================================================== subroutine nuclide_clear(this) - - class(Nuclide), intent(inout) :: this ! The Nuclide object to clear + class(Nuclide), intent(inout) :: this integer :: i ! Loop counter - if (associated(this % nu_d_edist)) then - do i = 1, size(this % nu_d_edist) - call this % nu_d_edist(i) % clear() - end do - deallocate(this % nu_d_edist) - end if - - if (associated(this % urr_data)) then - deallocate(this % urr_data) - end if + if (associated(this % urr_data)) deallocate(this % urr_data) if (allocated(this % reactions)) then do i = 1, size(this % reactions) diff --git a/src/distribution_univariate.F90 b/src/distribution_univariate.F90 index b3d77e2f82..f596536d0b 100644 --- a/src/distribution_univariate.F90 +++ b/src/distribution_univariate.F90 @@ -1,7 +1,7 @@ module distribution_univariate - use constants, only: ZERO, HALF, HISTOGRAM, LINEAR_LINEAR, MAX_LINE_LEN, & - MAX_WORD_LEN + use constants, only: ZERO, ONE, HALF, HISTOGRAM, LINEAR_LINEAR, & + MAX_LINE_LEN, MAX_WORD_LEN use error, only: fatal_error use math, only: maxwell_spectrum, watt_spectrum use random_lcg, only: prn @@ -78,6 +78,12 @@ module distribution_univariate procedure :: initialize => tabular_initialize end type Tabular + type, extends(Distribution) :: Equiprobable + real(8), allocatable :: x(:) + contains + procedure :: sample => equiprobable_sample + end type Equiprobable + contains function discrete_sample(this) result(x) @@ -238,6 +244,25 @@ contains this%c(:) = this%c(:)/this%c(n) end subroutine tabular_initialize + function equiprobable_sample(this) result(x) + class(Equiprobable), intent(in) :: this + real(8) :: x + + integer :: i + integer :: n + real(8) :: r + real(8) :: xl, xr + + n = size(this%x) + + r = prn() + i = 1 + int((n - 1)*r) + + xl = this%x(i) + xr = this%x(i+1) + x = xl + ((n - 1)*r - i + ONE) * (xr - xl) + end function equiprobable_sample + subroutine distribution_from_xml(dist, node_dist) class(Distribution), allocatable, intent(inout) :: dist type(Node), pointer :: node_dist diff --git a/src/endf_header.F90 b/src/endf_header.F90 index af62231a5d..7388ea2f54 100644 --- a/src/endf_header.F90 +++ b/src/endf_header.F90 @@ -13,6 +13,40 @@ module endf_header integer :: n_pairs ! # of pairs of (x,y) values real(8), allocatable :: x(:) ! values of abscissa real(8), allocatable :: y(:) ! values of ordinate + contains + procedure :: from_ace end type Tab1 +contains + + subroutine from_ace(this, xss, idx) + class(Tab1), intent(inout) :: this + real(8), intent(in) :: xss(:) + integer, intent(in) :: idx + + integer :: nr, ne + + ! Determine number of regions + nr = nint(xss(idx)) + this%n_regions = nr + + ! Read interpolation region data + if (nr > 0) then + allocate(this%nbt(nr)) + allocate(this%int(nr)) + this%nbt(:) = nint(xss(idx + 1 : idx + nr)) + this%int(:) = nint(xss(idx + nr + 1 : idx + 2*nr)) + end if + + ! Determine number of pairs + ne = int(XSS(idx + 2*nr + 1)) + this%n_pairs = ne + + ! Read (x,y) pairs + allocate(this%x(ne)) + allocate(this%y(ne)) + this%x(:) = xss(idx + 2*nr + 2 : idx + 2*nr + 1 + ne) + this%y(:) = xss(idx + 2*nr + 2 + ne : idx + 2*nr + 1 + 2*ne) + end subroutine from_ace + end module endf_header diff --git a/src/energy_distribution.F90 b/src/energy_distribution.F90 index 2a616e0f1f..a8b975879f 100644 --- a/src/energy_distribution.F90 +++ b/src/energy_distribution.F90 @@ -2,7 +2,6 @@ module energy_distribution use constants, only: ZERO, ONE, TWO, PI, HISTOGRAM, LINEAR_LINEAR use endf_header, only: Tab1 - use error, only: fatal_error use interpolation, only: interpolate_tab1 use math, only: maxwell_spectrum, watt_spectrum use random_lcg, only: prn @@ -27,14 +26,14 @@ module energy_distribution end function iSampleEnergy end interface + type :: EnergyDistributionContainer + class(EnergyDistribution), allocatable :: obj + end type EnergyDistributionContainer + !=============================================================================== ! Derived classes !=============================================================================== - type Array1D - real(8), allocatable :: data(:) - end type Array1D - type, extends(EnergyDistribution) :: TabularEquiprobable integer :: n_region integer, allocatable :: breakpoints(:) @@ -121,14 +120,6 @@ contains n_energy_in = size(this%energy_in) n_energy_out = size(this%energy_out, 1) - ! read number of interpolation regions, incoming energies, and outgoing - ! energies - ! TODO: Move this error to input - if (this%n_region > 0) then - call fatal_error("Multiple interpolation regions not supported while & - &attempting to sample equiprobable energy bins.") - end if - ! determine index on incoming energy grid and interpolation factor i = binary_search(this%energy_in, size(this%energy_in), E_in) r = (E_in - this%energy_in(i)) / & @@ -200,9 +191,6 @@ contains ! read number of interpolation regions and incoming energies if (this%n_region == 1) then histogram_interp = (this%interpolation(1) == 1) - else if (this%n_region > 1) then - call fatal_error("Multiple interpolation regions not supported while & - &attempting to sample continuous tabular distribution.") else histogram_interp = .false. end if @@ -245,13 +233,6 @@ contains E_1 = E_i_1 + r*(E_i1_1 - E_i_1) E_K = E_i_K + r*(E_i1_K - E_i_K) - ! TODO: Write error at initizliation - if (this%energy_out(l)%n_discrete > 0) then - ! discrete lines present - call fatal_error("Discrete lines in continuous tabular distributed not & - &yet supported") - end if - ! determine outgoing energy bin n_energy_out = size(this%energy_out(l)%e_out) r1 = prn() diff --git a/src/interpolation.F90 b/src/interpolation.F90 index 9e28bc086e..5f87870677 100644 --- a/src/interpolation.F90 +++ b/src/interpolation.F90 @@ -2,7 +2,6 @@ module interpolation use constants use endf_header, only: Tab1 - use error, only: fatal_error use search, only: binary_search use string, only: to_str diff --git a/src/output.F90 b/src/output.F90 index 66e6831371..3a48de02da 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -359,21 +359,24 @@ contains write(unit_,*) ' Reaction Q-value COM Law IE size(angle) size(energy)' do i = 1, nuc % n_reaction associate (rxn => nuc % reactions(i)) - ! Determine size of angle distribution - if (rxn % has_angle_dist) then - size_angle = rxn % adist % n_energy * 16 + size(rxn % adist % data) * 8 - else - size_angle = 0 - end if +!!$ ! Determine size of angle distribution +!!$ if (rxn % has_angle_dist) then +!!$ size_angle = rxn % adist % n_energy * 16 + size(rxn % adist % data) * 8 +!!$ else +!!$ size_angle = 0 +!!$ end if + size_angle = 0 - ! Determine size of energy distribution and law - if (rxn % has_energy_dist) then - size_energy = size(rxn % edist % data) * 8 - law = to_str(rxn % edist % law) - else - size_energy = 0 - law = 'None' - end if +!!$ ! Determine size of energy distribution and law +!!$ if (rxn % has_energy_dist) then +!!$ size_energy = size(rxn % edist % data) * 8 +!!$ law = to_str(rxn % edist % law) +!!$ else +!!$ size_energy = 0 +!!$ law = 'None' +!!$ end if + size_energy = 0 + law = 'None' write(unit_,'(3X,A11,1X,F8.3,3X,L1,3X,A4,1X,I6,1X,I11,1X,I11)') & reaction_name(rxn % MT), rxn % Q_value, rxn % scatter_in_cm, & diff --git a/src/physics.F90 b/src/physics.F90 index 217d232182..8519f4d2b0 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -1,6 +1,6 @@ module physics - use ace_header, only: Nuclide, Reaction, DistEnergy + use ace_header, only: Nuclide, Reaction use constants use cross_section, only: elastic_xs_0K use endf, only: reaction_name @@ -17,12 +17,10 @@ module physics use random_lcg, only: prn use search, only: binary_search use string, only: to_str + use secondary_uncorrelated, only: UncorrelatedAngleEnergy implicit none -! TODO: Figure out how to write particle restart files in sample_angle, -! sample_energy, etc. - contains !=============================================================================== @@ -458,7 +456,10 @@ contains vel = sqrt(dot_product(v_n, v_n)) ! Sample scattering angle - mu_cm = sample_angle(rxn, E) + select type (dist => rxn%secondary%distribution(1)%obj) + type is (UncorrelatedAngleEnergy) + mu_cm = dist%angle%sample(E) + end select ! Determine direction cosines in CM uvw_cm = v_n/vel @@ -1195,16 +1196,13 @@ contains integer :: lc ! index before start of energies/nu values integer :: NR ! number of interpolation regions integer :: NE ! number of energies tabulated - integer :: law ! energy distribution law integer :: n_sample ! number of times resampling real(8) :: nu_t ! total nu real(8) :: nu_d ! delayed nu - real(8) :: mu ! fission neutron angular cosine real(8) :: beta ! delayed neutron fraction real(8) :: xi ! random number real(8) :: yield ! delayed neutron precursor yield real(8) :: prob ! cumulative probability - type(DistEnergy), pointer :: edist ! Determine total nu nu_t = nu_total(nuc, p % E) @@ -1248,18 +1246,13 @@ contains ! set the delayed group for the particle born from fission p % delayed_group = j - ! select energy distribution for group j - law = nuc % nu_d_edist(j) % law - edist => nuc % nu_d_edist(j) - ! sample from energy distribution n_sample = 0 do - if (law == 44 .or. law == 61) then - call sample_energy(edist, p % E, E_out, mu) - else - call sample_energy(edist, p % E, E_out) - end if + select type (aedist => nuc%nu_d_edist(j)%obj) + type is (UncorrelatedAngleEnergy) + E_out = aedist%energy%sample(p%E) + end select ! resample if energy is greater than maximum neutron energy if (E_out < energy_max_neutron) exit @@ -1281,14 +1274,9 @@ contains p % delayed_group = 0 ! sample from prompt neutron energy distribution - law = rxn % edist % law n_sample = 0 do - if (law == 44 .or. law == 61) then - call sample_energy(rxn%edist, p % E, E_out, prob) - else - call sample_energy(rxn%edist, p % E, E_out) - end if + call rxn%secondary%sample(p%E, E_out, prob) ! resample if energy is greater than maximum neutron energy if (E_out < energy_max_neutron) exit @@ -1317,41 +1305,18 @@ contains type(Particle), intent(inout) :: p integer :: i ! loop index - integer :: law ! secondary energy distribution law real(8) :: E ! energy in lab (incoming/outgoing) real(8) :: mu ! cosine of scattering angle in lab real(8) :: A ! atomic weight ratio of nuclide real(8) :: E_in ! incoming energy real(8) :: E_cm ! outgoing energy in center-of-mass - real(8) :: Q ! Q-value of reaction real(8) :: yield ! neutron yield ! copy energy of neutron E_in = p % E - ! determine A and Q - A = nuc % awr - Q = rxn % Q_value - - ! determine secondary energy distribution law - law = rxn % edist % law - - ! sample scattering angle - mu = sample_angle(rxn, E_in) - ! sample outgoing energy - if (law == 44 .or. law == 61) then - call sample_energy(rxn%edist, E_in, E, mu) - ! Because of floating-point roundoff, it may be possible for mu to be - ! outside of the range [-1,1). In these cases, we just set mu to exactly - ! -1 or 1 - - if (abs(mu) > ONE) mu = sign(ONE,mu) - elseif (law == 66) then - call sample_energy(rxn%edist, E_in, E, A=A, Q=Q) - else - call sample_energy(rxn%edist, E_in, E) - end if + call rxn%secondary%sample(E_in, E, mu) ! if scattering system is in center-of-mass, transfer cosine of scattering ! angle and outgoing energy from CM to LAB @@ -1359,20 +1324,20 @@ contains E_cm = E ! determine outgoing energy in lab + A = nuc%awr E = E_cm + (E_in + TWO * mu * (A+ONE) * sqrt(E_in * E_cm)) & / ((A+ONE)*(A+ONE)) ! determine outgoing angle in lab mu = mu * sqrt(E_cm/E) + ONE/(A+ONE) * sqrt(E_in/E) - - ! Because of floating-point roundoff, it may be possible for mu to be - ! outside of the range [-1,1). In these cases, we just set mu to exactly - ! -1 or 1 - - if (abs(mu) > ONE) mu = sign(ONE,mu) end if - ! Set outgoing energy and scattering angle + ! Because of floating-point roundoff, it may be possible for mu to be + ! outside of the range [-1,1). In these cases, we just set mu to exactly -1 + ! or 1 + if (abs(mu) > ONE) mu = sign(ONE,mu) + + ! Set outgoing energy and scattering angle p % E = E p % mu = mu @@ -1391,893 +1356,4 @@ contains end subroutine inelastic_scatter -!=============================================================================== -! SAMPLE_ANGLE samples the cosine of the angle between incident and exiting -! particle directions either from 32 equiprobable bins or from a tabular -! distribution. -!=============================================================================== - - function sample_angle(rxn, E) result(mu) - type(Reaction), intent(in) :: rxn ! reaction - real(8), intent(in) :: E ! incoming energy - - real(8) :: xi ! random number on [0,1) - integer :: interp ! type of interpolation - integer :: type ! angular distribution type - integer :: i ! incoming energy bin - integer :: n ! number of incoming energy bins - integer :: lc ! location in data array - integer :: NP ! number of points in cos distribution - integer :: k ! index on cosine grid - real(8) :: r ! interpolation factor on incoming energy - real(8) :: frac ! interpolation fraction on cosine - real(8) :: mu0 ! cosine in bin k - real(8) :: mu1 ! cosine in bin k+1 - real(8) :: mu ! final cosine sampled - real(8) :: c_k ! cumulative frequency at k - real(8) :: c_k1 ! cumulative frequency at k+1 - real(8) :: p0,p1 ! probability distribution - - ! check if reaction has angular distribution -- if not, sample outgoing - ! angle isotropically - if (.not. rxn % has_angle_dist) then - mu = TWO * prn() - ONE - return - end if - - ! determine number of incoming energies - n = rxn % adist % n_energy - - ! find energy bin and calculate interpolation factor -- if the energy is - ! outside the range of the tabulated energies, choose the first or last bins - if (E < rxn % adist % energy(1)) then - i = 1 - r = ZERO - elseif (E > rxn % adist % energy(n)) then - i = n - 1 - r = ONE - else - i = binary_search(rxn % adist % energy, n, E) - r = (E - rxn % adist % energy(i)) / & - (rxn % adist % energy(i+1) - rxn % adist % energy(i)) - end if - - ! Sample between the ith and (i+1)th bin - if (r > prn()) i = i + 1 - - ! check whether this is a 32-equiprobable bin or a tabular distribution - lc = rxn % adist % location(i) - type = rxn % adist % type(i) - if (type == ANGLE_ISOTROPIC) then - mu = TWO * prn() - ONE - elseif (type == ANGLE_32_EQUI) then - ! sample cosine bin - xi = prn() - k = 1 + int(32.0_8*xi) - - ! calculate cosine - mu0 = rxn % adist % data(lc + k) - mu1 = rxn % adist % data(lc + k+1) - mu = mu0 + (32.0_8 * xi - k + ONE) * (mu1 - mu0) - - elseif (type == ANGLE_TABULAR) then - interp = int(rxn % adist % data(lc + 1)) - NP = int(rxn % adist % data(lc + 2)) - - ! determine outgoing cosine bin - xi = prn() - lc = lc + 2 - c_k = rxn % adist % data(lc + 2*NP + 1) - do k = 1, NP - 1 - c_k1 = rxn % adist % data(lc + 2*NP + k+1) - if (xi < c_k1) exit - c_k = c_k1 - end do - - ! check to make sure k is <= NP - 1 - k = min(k, NP - 1) - - p0 = rxn % adist % data(lc + NP + k) - mu0 = rxn % adist % data(lc + k) - if (interp == HISTOGRAM) then - ! Histogram interpolation - if (p0 > ZERO) then - mu = mu0 + (xi - c_k)/p0 - else - mu = mu0 - end if - - elseif (interp == LINEAR_LINEAR) then - ! Linear-linear interpolation - p1 = rxn % adist % data(lc + NP + k+1) - mu1 = rxn % adist % data(lc + k+1) - - frac = (p1 - p0)/(mu1 - mu0) - if (frac == ZERO) then - mu = mu0 + (xi - c_k)/p0 - else - mu = mu0 + (sqrt(max(ZERO, p0*p0 + 2*frac*(xi - c_k))) - p0)/frac - end if - else - ! call write_particle_restart(p) - call fatal_error("Unknown interpolation type: " // trim(to_str(interp))) - end if - - ! Because of floating-point roundoff, it may be possible for mu to be - ! outside of the range [-1,1). In these cases, we just set mu to exactly - ! -1 or 1 - - if (abs(mu) > ONE) mu = sign(ONE,mu) - - else - ! call write_particle_restart(p) - call fatal_error("Unknown angular distribution type: " & - &// trim(to_str(type))) - end if - - end function sample_angle - -!=============================================================================== -! SAMPLE_ENERGY samples an outgoing energy distribution, either for a secondary -! neutron from a collision or for a prompt/delayed fission neutron -!=============================================================================== - - recursive subroutine sample_energy(edist, E_in, E_out, mu_out, A, Q) - type(DistEnergy), intent(in) :: edist - real(8), intent(in) :: E_in ! incoming energy of neutron - real(8), intent(out) :: E_out ! outgoing energy - real(8), intent(inout), optional :: mu_out ! outgoing cosine of angle - real(8), intent(in), optional :: A ! mass number of nuclide - real(8), intent(in), optional :: Q ! Q-value of reaction - - integer :: i ! index on incoming energy grid - integer :: k ! sampled index on outgoing grid - integer :: l ! sampled index on incoming grid - integer :: n_sample ! number of rejections - integer :: lc ! dummy index - integer :: NR ! number of interpolation regions - integer :: NE ! number of energies - integer :: NET ! number of outgoing energies - integer :: INTTp ! combination of INTT and ND - integer :: INTT ! 1 = histogram, 2 = linear-linear - integer :: JJ ! 1 = histogram, 2 = linear-linear - integer :: ND ! number of discrete lines - integer :: NP ! number of points in distribution - - real(8) :: p_valid ! probability of law validity - - real(8) :: E_i_1, E_i_K ! endpoints on outgoing grid i - real(8) :: E_i1_1, E_i1_K ! endpoints on outgoing grid i+1 - real(8) :: E_1, E_K ! endpoints interpolated between i and i+1 - - real(8) :: E_l_k, E_l_k1 ! adjacent E on outgoing grid l - real(8) :: p_l_k, p_l_k1 ! adjacent p on outgoing grid l - real(8) :: c_k, c_k1 ! cumulative probability - - real(8) :: KM_A ! Kalbach-Mann parameter R - real(8) :: KM_R ! Kalbach-Mann parameter R - real(8) :: A_k, A_k1 ! Kalbach-Mann A on outgoing grid l - real(8) :: R_k, R_k1 ! Kalbach-Mann R on outgoing grid l - - real(8) :: Watt_a, Watt_b ! Watt spectrum parameters - - real(8) :: mu_k ! angular cosine in bin k - real(8) :: mu_k1 ! angular cosine in bin k+1 - real(8) :: p_k ! angular pdf in bin k - real(8) :: p_k1 ! angular pdf in bin k+1 - - real(8) :: r ! interpolation factor on incoming energy - real(8) :: frac ! interpolation factor on outgoing energy - real(8) :: U ! restriction energy - real(8) :: T ! nuclear temperature - - real(8) :: Ap ! total mass ratio for n-body dist - integer :: n_bodies ! number of bodies for n-body dist - real(8) :: E_max ! parameter for n-body dist - real(8) :: x, y, v ! intermediate variables for n-body dist - real(8) :: r1, r2, r3, r4, r5, r6 - logical :: histogram_interp ! use histogram interpolation on incoming energy - - ! ========================================================================== - ! SAMPLE ENERGY DISTRIBUTION IF THERE ARE MULTIPLE - - if (associated(edist % next)) then - p_valid = interpolate_tab1(edist % p_valid, E_in) - - if (prn() > p_valid) then - if (edist % law == 44 .or. edist % law == 61) then - call sample_energy(edist%next, E_in, E_out, mu_out) - elseif (edist % law == 66) then - call sample_energy(edist%next, E_in, E_out, A=A, Q=Q) - else - call sample_energy(edist%next, E_in, E_out) - end if - return - end if - end if - - ! Determine which secondary energy distribution law to use - select case (edist % law) - case (1) - ! ======================================================================= - ! TABULAR EQUIPROBABLE ENERGY BINS - - ! read number of interpolation regions, incoming energies, and outgoing - ! energies - NR = int(edist % data(1)) - NE = int(edist % data(2 + 2*NR)) - NET = int(edist % data(3 + 2*NR + NE)) - if (NR > 0) then - ! call write_particle_restart(p) - call fatal_error("Multiple interpolation regions not supported while & - &attempting to sample equiprobable energy bins.") - end if - - ! determine index on incoming energy grid and interpolation factor - lc = 2 + 2*NR - i = binary_search(edist % data(lc+1:lc+NE), NE, E_in) - r = (E_in - edist%data(lc+i)) / & - (edist%data(lc+i+1) - edist%data(lc+i)) - - ! Sample outgoing energy bin - r1 = prn() - k = 1 + int(NET * r1) - - ! Determine E_1 and E_K - lc = 3 + 3*NR + NE + (i-1)*NET - E_i_1 = edist % data(lc + 1) - E_i_K = edist % data(lc + NET) - - lc = 3 + 3*NR + NE + i*NET - E_i1_1 = edist % data(lc + 1) - E_i1_K = edist % data(lc + NET) - - E_1 = E_i_1 + r*(E_i1_1 - E_i_1) - E_K = E_i_K + r*(E_i1_K - E_i_K) - - ! Randomly select between the outgoing table for incoming energy E_i and - ! E_(i+1) - if (prn() < r) then - l = i + 1 - else - l = i - end if - - ! Determine E_l_k and E_l_k+1 - lc = 3 + 2*NR + NE + (l-1)*NET - E_l_k = edist % data(lc+k) - E_l_k1 = edist % data(lc+k+1) - - ! Determine E' (denoted here as E_out) - r2 = prn() - E_out = E_l_k + r2*(E_l_k1 - E_l_k) - - ! Now interpolate between incident energy bins i and i + 1 - if (l == i) then - E_out = E_1 + (E_out - E_i_1)*(E_K - E_1)/(E_i_K - E_i_1) - else - E_out = E_1 + (E_out - E_i1_1)*(E_K - E_1)/(E_i1_K - E_i1_1) - end if - - case (3) - ! ======================================================================= - ! INELASTIC LEVEL SCATTERING - - E_out = edist%data(2) * (E_in - edist%data(1)) - - case (4) - ! ======================================================================= - ! CONTINUOUS TABULAR DISTRIBUTION - - ! read number of interpolation regions and incoming energies - NR = int(edist % data(1)) - NE = int(edist % data(2 + 2*NR)) - if (NR == 1) then - histogram_interp = (edist % data(3) == 1) - else if (NR > 1) then - ! call write_particle_restart(p) - call fatal_error("Multiple interpolation regions not supported while & - &attempting to sample continuous tabular distribution.") - else - histogram_interp = .false. - end if - - ! find energy bin and calculate interpolation factor -- if the energy is - ! outside the range of the tabulated energies, choose the first or last - ! bins - lc = 2 + 2*NR - if (E_in < edist % data(lc+1)) then - i = 1 - r = ZERO - elseif (E_in > edist % data(lc+NE)) then - i = NE - 1 - r = ONE - else - i = binary_search(edist % data(lc+1:lc+NE), NE, E_in) - r = (E_in - edist%data(lc+i)) / & - (edist%data(lc+i+1) - edist%data(lc+i)) - end if - - ! Sample between the ith and (i+1)th bin - if (histogram_interp) then - l = i - else - r2 = prn() - if (r > r2) then - l = i + 1 - else - l = i - end if - end if - - ! interpolation for energy E1 and EK - lc = int(edist%data(2 + 2*NR + NE + i)) - NP = int(edist%data(lc + 2)) - E_i_1 = edist%data(lc + 2 + 1) - E_i_K = edist%data(lc + 2 + NP) - - lc = int(edist%data(2 + 2*NR + NE + i + 1)) - NP = int(edist%data(lc + 2)) - E_i1_1 = edist%data(lc + 2 + 1) - E_i1_K = edist%data(lc + 2 + NP) - - E_1 = E_i_1 + r*(E_i1_1 - E_i_1) - E_K = E_i_K + r*(E_i1_K - E_i_K) - - ! determine location of outgoing energies, pdf, cdf for E(l) - lc = int(edist % data(2 + 2*NR + NE + l)) - - ! determine type of interpolation and number of discrete lines - INTTp = int(edist % data(lc + 1)) - NP = int(edist % data(lc + 2)) - if (INTTp > 10) then - INTT = mod(INTTp,10) - ND = (INTTp - INTT)/10 - else - INTT = INTTp - ND = 0 - end if - - if (ND > 0) then - ! discrete lines present - ! call write_particle_restart(p) - call fatal_error("Discrete lines in continuous tabular distributed not & - &yet supported") - end if - - ! determine outgoing energy bin - r1 = prn() - lc = lc + 2 ! start of EOUT - c_k = edist % data(lc + 2*NP + 1) - do k = 1, NP - 1 - c_k1 = edist % data(lc + 2*NP + k+1) - if (r1 < c_k1) exit - c_k = c_k1 - end do - - ! check to make sure k is <= NP - 1 - k = min(k, NP - 1) - - E_l_k = edist % data(lc+k) - p_l_k = edist % data(lc+NP+k) - if (INTT == HISTOGRAM) then - ! Histogram interpolation - if (p_l_k > ZERO) then - E_out = E_l_k + (r1 - c_k)/p_l_k - else - E_out = E_l_k - end if - - elseif (INTT == LINEAR_LINEAR) then - ! Linear-linear interpolation - E_l_k1 = edist % data(lc+k+1) - p_l_k1 = edist % data(lc+NP+k+1) - - frac = (p_l_k1 - p_l_k)/(E_l_k1 - E_l_k) - if (frac == ZERO) then - E_out = E_l_k + (r1 - c_k)/p_l_k - else - E_out = E_l_k + (sqrt(max(ZERO, p_l_k*p_l_k + & - 2*frac*(r1 - c_k))) - p_l_k)/frac - end if - else - ! call write_particle_restart(p) - call fatal_error("Unknown interpolation type: " // trim(to_str(INTT))) - end if - - ! Now interpolate between incident energy bins i and i + 1 - if (.not. histogram_interp) then - if (l == i) then - E_out = E_1 + (E_out - E_i_1)*(E_K - E_1)/(E_i_K - E_i_1) - else - E_out = E_1 + (E_out - E_i1_1)*(E_K - E_1)/(E_i1_K - E_i1_1) - end if - end if - - case (5) - ! ======================================================================= - ! GENERAL EVAPORATION SPECTRUM - - case (7) - ! ======================================================================= - ! MAXWELL FISSION SPECTRUM - - ! read number of interpolation regions and incoming energies - NR = int(edist % data(1)) - NE = int(edist % data(2 + 2*NR)) - - ! determine nuclear temperature from tabulated function - T = interpolate_tab1(edist % data, E_in) - - ! determine restriction energy - lc = 2 + 2*NR + 2*NE - U = edist % data(lc + 1) - - n_sample = 0 - do - ! sample maxwell fission spectrum - E_out = maxwell_spectrum(T) - - ! accept energy based on restriction energy - if (E_out <= E_in - U) exit - - ! check for large number of rejections - n_sample = n_sample + 1 - if (n_sample == MAX_SAMPLE) then - ! call write_particle_restart(p) - call fatal_error("Too many rejections on Maxwell fission spectrum.") - end if - end do - - case (9) - ! ======================================================================= - ! EVAPORATION SPECTRUM - - ! read number of interpolation regions and incoming energies - NR = int(edist % data(1)) - NE = int(edist % data(2 + 2*NR)) - - ! determine nuclear temperature from tabulated function - T = interpolate_tab1(edist % data, E_in) - - ! determine restriction energy - lc = 2 + 2*NR + 2*NE - U = edist % data(lc + 1) - - y = (E_in - U)/T - v = 1 - exp(-y) - - ! sample outgoing energy based on evaporation spectrum probability - ! density function - n_sample = 0 - do - x = -log((1 - v*prn())*(1 - v*prn())) - if (x <= y) exit - - ! check for large number of rejections - n_sample = n_sample + 1 - if (n_sample == MAX_SAMPLE) then - ! call write_particle_restart(p) - call fatal_error("Too many rejections on evaporation spectrum.") - end if - end do - - E_out = x*T - - case (11) - ! ======================================================================= - ! ENERGY-DEPENDENT WATT SPECTRUM - - ! read number of interpolation regions and incoming energies for - ! parameter 'a' - NR = int(edist % data(1)) - NE = int(edist % data(2 + 2*NR)) - - ! determine Watt parameter 'a' from tabulated function - Watt_a = interpolate_tab1(edist % data, E_in) - - ! determine Watt parameter 'b' from tabulated function - lc = 2 + 2*(NR + NE) - Watt_b = interpolate_tab1(edist % data, E_in, lc + 1) - - ! read number of interpolation regions and incoming energies for - ! parameter 'a' - NR = int(edist % data(lc + 1)) - NE = int(edist % data(lc + 2 + 2*NR)) - - ! determine restriction energy - lc = lc + 2 + 2*(NR + NE) - U = edist % data(lc + 1) - - n_sample = 0 - do - ! Sample energy-dependent Watt fission spectrum - E_out = watt_spectrum(Watt_a, Watt_b) - - ! accept energy based on restriction energy - if (E_out <= E_in - U) exit - - ! check for large number of rejections - n_sample = n_sample + 1 - if (n_sample == MAX_SAMPLE) then - ! call write_particle_restart(p) - call fatal_error("Too many rejections on Watt spectrum.") - end if - end do - - case (44) - ! ======================================================================= - ! KALBACH-MANN CORRELATED SCATTERING - - if (.not. present(mu_out)) then - ! call write_particle_restart(p) - call fatal_error("Law 44 called without giving mu_out as argument.") - end if - - ! read number of interpolation regions and incoming energies - NR = int(edist % data(1)) - NE = int(edist % data(2 + 2*NR)) - if (NR > 0) then - ! call write_particle_restart(p) - call fatal_error("Multiple interpolation regions not supported while & - &attempting to sample Kalbach-Mann distribution.") - end if - - ! find energy bin and calculate interpolation factor -- if the energy is - ! outside the range of the tabulated energies, choose the first or last - ! bins - lc = 2 + 2*NR - if (E_in < edist % data(lc+1)) then - i = 1 - r = ZERO - elseif (E_in > edist % data(lc+NE)) then - i = NE - 1 - r = ONE - else - i = binary_search(edist % data(lc+1:lc+NE), NE, E_in) - r = (E_in - edist%data(lc+i)) / & - (edist%data(lc+i+1) - edist%data(lc+i)) - end if - - ! Sample between the ith and (i+1)th bin - r2 = prn() - if (r > r2) then - l = i + 1 - else - l = i - end if - - ! determine endpoints on grid i - lc = int(edist%data(2+2*NR+NE + i)) ! start of LDAT for i - NP = int(edist%data(lc + 2)) - E_i_1 = edist%data(lc + 2 + 1) - E_i_K = edist%data(lc + 2 + NP) - - ! determine endpoints on grid i+1 - lc = int(edist%data(2+2*NR+NE + i+1)) ! start of LDAT for i+1 - NP = int(edist%data(lc + 2)) - E_i1_1 = edist%data(lc + 2 + 1) - E_i1_K = edist%data(lc + 2 + NP) - - E_1 = E_i_1 + r*(E_i1_1 - E_i_1) - E_K = E_i_K + r*(E_i1_K - E_i_K) - - ! determine location of outgoing energies, pdf, cdf for E(l) - lc = int(edist % data(2 + 2*NR + NE + l)) - - ! determine type of interpolation and number of discrete lines - INTTp = int(edist % data(lc + 1)) - NP = int(edist % data(lc + 2)) - if (INTTp > 10) then - INTT = mod(INTTp,10) - ND = (INTTp - INTT)/10 - else - INTT = INTTp - ND = 0 - end if - - if (ND > 0) then - ! discrete lines present - ! call write_particle_restart(p) - call fatal_error("Discrete lines in continuous tabular distributed not & - &yet supported") - end if - - ! determine outgoing energy bin - r1 = prn() - lc = lc + 2 ! start of EOUT - c_k = edist % data(lc + 2*NP + 1) - do k = 1, NP - 1 - c_k1 = edist % data(lc + 2*NP + k+1) - if (r1 < c_k1) exit - c_k = c_k1 - end do - - ! check to make sure k is <= NP - 1 - k = min(k, NP - 1) - - E_l_k = edist % data(lc+k) - p_l_k = edist % data(lc+NP+k) - if (INTT == HISTOGRAM) then - ! Histogram interpolation - if (p_l_k > ZERO) then - E_out = E_l_k + (r1 - c_k)/p_l_k - else - E_out = E_l_k - end if - - ! Determine Kalbach-Mann parameters - KM_R = edist % data(lc + 3*NP + k) - KM_A = edist % data(lc + 4*NP + k) - - elseif (INTT == LINEAR_LINEAR) then - ! Linear-linear interpolation - E_l_k1 = edist % data(lc+k+1) - p_l_k1 = edist % data(lc+NP+k+1) - - ! Find E prime - frac = (p_l_k1 - p_l_k)/(E_l_k1 - E_l_k) - if (frac == ZERO) then - E_out = E_l_k + (r1 - c_k)/p_l_k - else - E_out = E_l_k + (sqrt(max(ZERO, p_l_k*p_l_k + & - 2*frac*(r1 - c_k))) - p_l_k)/frac - end if - - ! Determine Kalbach-Mann parameters - R_k = edist % data(lc + 3*NP + k) - R_k1 = edist % data(lc + 3*NP + k+1) - A_k = edist % data(lc + 4*NP + k) - A_k1 = edist % data(lc + 4*NP + k+1) - - KM_R = R_k + (R_k1 - R_k)*(E_out - E_l_k)/(E_l_k1 - E_l_k) - KM_A = A_k + (A_k1 - A_k)*(E_out - E_l_k)/(E_l_k1 - E_l_k) - else - ! call write_particle_restart() - call fatal_error("Unknown interpolation type: " // trim(to_str(INTT))) - end if - - ! Now interpolate between incident energy bins i and i + 1 - if (l == i) then - E_out = E_1 + (E_out - E_i_1)*(E_K - E_1)/(E_i_K - E_i_1) - else - E_out = E_1 + (E_out - E_i1_1)*(E_K - E_1)/(E_i1_K - E_i1_1) - end if - - ! Sampled correlated angle from Kalbach-Mann parameters - r3 = prn() - r4 = prn() - if (r3 > KM_R) then - T = (TWO*r4 - ONE) * sinh(KM_A) - mu_out = log(T + sqrt(T*T + ONE))/KM_A - else - mu_out = log(r4*exp(KM_A) + (ONE - r4)*exp(-KM_A))/KM_A - end if - - case (61) - ! ======================================================================= - ! CORRELATED ENERGY AND ANGLE DISTRIBUTION - - if (.not. present(mu_out)) then - ! call write_particle_restart() - call fatal_error("Law 61 called without giving mu_out as argument.") - end if - - ! read number of interpolation regions and incoming energies - NR = int(edist % data(1)) - NE = int(edist % data(2 + 2*NR)) - if (NR > 0) then - ! call write_particle_restart() - call fatal_error("Multiple interpolation regions not supported while & - &attempting to sample correlated energy-angle distribution.") - end if - - ! find energy bin and calculate interpolation factor -- if the energy is - ! outside the range of the tabulated energies, choose the first or last - ! bins - lc = 2 + 2*NR - if (E_in < edist % data(lc+1)) then - i = 1 - r = ZERO - elseif (E_in > edist % data(lc+NE)) then - i = NE - 1 - r = ONE - else - i = binary_search(edist % data(lc+1:lc+NE), NE, E_in) - r = (E_in - edist%data(lc+i)) / & - (edist%data(lc+i+1) - edist%data(lc+i)) - end if - - ! Sample between the ith and (i+1)th bin - r2 = prn() - if (r > r2) then - l = i + 1 - else - l = i - end if - - ! determine endpoints on grid i - lc = int(edist%data(2+2*NR+NE + i)) ! start of LDAT for i - NP = int(edist%data(lc + 2)) - E_i_1 = edist%data(lc + 2 + 1) - E_i_K = edist%data(lc + 2 + NP) - - ! determine endpoints on grid i+1 - lc = int(edist%data(2+2*NR+NE + i+1)) ! start of LDAT for i+1 - NP = int(edist%data(lc + 2)) - E_i1_1 = edist%data(lc + 2 + 1) - E_i1_K = edist%data(lc + 2 + NP) - - E_1 = E_i_1 + r*(E_i1_1 - E_i_1) - E_K = E_i_K + r*(E_i1_K - E_i_K) - - ! determine location of outgoing energies, pdf, cdf for E(l) - lc = int(edist % data(2 + 2*NR + NE + l)) - - ! determine type of interpolation and number of discrete lines - INTTp = int(edist % data(lc + 1)) - NP = int(edist % data(lc + 2)) - if (INTTp > 10) then - INTT = mod(INTTp,10) - ND = (INTTp - INTT)/10 - else - INTT = INTTp - ND = 0 - end if - - if (ND > 0) then - ! discrete lines present - ! call write_particle_restart() - call fatal_error("Discrete lines in continuous tabular distributed not & - &yet supported") - end if - - ! determine outgoing energy bin - r1 = prn() - lc = lc + 2 ! start of EOUT - c_k = edist % data(lc + 2*NP + 1) - do k = 1, NP - 1 - c_k1 = edist % data(lc + 2*NP + k+1) - if (r1 < c_k1) exit - c_k = c_k1 - end do - - ! check to make sure k is <= NP - 1 - k = min(k, NP - 1) - - E_l_k = edist % data(lc+k) - p_l_k = edist % data(lc+NP+k) - if (INTT == HISTOGRAM) then - ! Histogram interpolation - if (p_l_k > ZERO) then - E_out = E_l_k + (r1 - c_k)/p_l_k - else - E_out = E_l_k - end if - - elseif (INTT == LINEAR_LINEAR) then - ! Linear-linear interpolation - E_l_k1 = edist % data(lc+k+1) - p_l_k1 = edist % data(lc+NP+k+1) - - ! Find E prime - frac = (p_l_k1 - p_l_k)/(E_l_k1 - E_l_k) - if (frac == ZERO) then - E_out = E_l_k + (r1 - c_k)/p_l_k - else - E_out = E_l_k + (sqrt(max(ZERO, p_l_k*p_l_k + & - 2*frac*(r1 - c_k))) - p_l_k)/frac - end if - else - ! call write_particle_restart() - call fatal_error("Unknown interpolation type: " // trim(to_str(INTT))) - end if - - ! Now interpolate between incident energy bins i and i + 1 - if (l == i) then - E_out = E_1 + (E_out - E_i_1)*(E_K - E_1)/(E_i_K - E_i_1) - else - E_out = E_1 + (E_out - E_i1_1)*(E_K - E_1)/(E_i1_K - E_i1_1) - end if - - ! Find correlated angular distribution for closest outgoing energy bin - if (r1 - c_k < c_k1 - r1) then - lc = int(edist % data(lc + 3*NP + k)) - else - lc = int(edist % data(lc + 3*NP + k + 1)) - end if - - ! Check if angular distribution is isotropic - if (lc == 0) then - mu_out = TWO * prn() - ONE - return - end if - - ! interpolation type and number of points in angular distribution - JJ = int(edist % data(lc + 1)) - NP = int(edist % data(lc + 2)) - - ! determine outgoing cosine bin - r3 = prn() - lc = lc + 2 - c_k = edist % data(lc + 2*NP + 1) - do k = 1, NP - 1 - c_k1 = edist % data(lc + 2*NP + k+1) - if (r3 < c_k1) exit - c_k = c_k1 - end do - - ! check to make sure k is <= NP - 1 - k = min(k, NP - 1) - - p_k = edist % data(lc + NP + k) - mu_k = edist % data(lc + k) - if (JJ == HISTOGRAM) then - ! Histogram interpolation - if (p_k > ZERO) then - mu_out = mu_k + (r3 - c_k)/p_k - else - mu_out = mu_k - end if - - elseif (JJ == LINEAR_LINEAR) then - ! Linear-linear interpolation - p_k1 = edist % data(lc + NP + k+1) - mu_k1 = edist % data(lc + k+1) - - frac = (p_k1 - p_k)/(mu_k1 - mu_k) - if (frac == ZERO) then - mu_out = mu_k + (r3 - c_k)/p_k - else - mu_out = mu_k + (sqrt(p_k*p_k + 2*frac*(r3 - c_k))-p_k)/frac - end if - else - ! call write_particle_restart() - call fatal_error("Unknown interpolation type: " // trim(to_str(JJ))) - end if - - case (66) - ! ======================================================================= - ! N-BODY PHASE SPACE DISTRIBUTION - - ! read number of bodies in phase space and total mass ratio - n_bodies = int(edist % data(1)) - Ap = edist % data(2) - - ! determine E_max parameter - E_max = (Ap - ONE)/Ap * (A/(A+ONE)*E_in + Q) - - ! x is essentially a Maxwellian distribution - x = maxwell_spectrum(ONE) - - select case (n_bodies) - case (3) - y = maxwell_spectrum(ONE) - case (4) - r1 = prn() - r2 = prn() - r3 = prn() - y = -log(r1*r2*r3) - case (5) - r1 = prn() - r2 = prn() - r3 = prn() - r4 = prn() - r5 = prn() - r6 = prn() - y = -log(r1*r2*r3*r4) - log(r5) * cos(PI/TWO*r6)**2 - end select - - ! now determine v and E_out - v = x/(x+y) - E_out = E_max * v - - case (67) - ! ======================================================================= - ! LABORATORY ENERGY-ANGLE LAW - - end select - - end subroutine sample_energy - end module physics diff --git a/src/search.F90 b/src/search.F90 index 0c345471c2..f338105f4d 100644 --- a/src/search.F90 +++ b/src/search.F90 @@ -1,7 +1,6 @@ module search use constants - use error, only: fatal_error implicit none diff --git a/src/secondary_correlated.F90 b/src/secondary_correlated.F90 index c3c82b588d..39ce5a1a8d 100644 --- a/src/secondary_correlated.F90 +++ b/src/secondary_correlated.F90 @@ -1,18 +1,21 @@ module secondary_correlated use constants, only: ZERO, ONE, TWO, HISTOGRAM, LINEAR_LINEAR - use distribution_univariate, only: Tabular - use error, only: fatal_error - use secondary_header, only: SecondaryDistribution + use distribution_univariate, only: DistributionContainer + use secondary_header, only: AngleEnergy use random_lcg, only: prn use search, only: binary_search type AngleEnergyTable - type(Tabular) :: energy - type(Tabular), allocatable :: angle(:) + integer :: interpolation + integer :: n_discrete + real(8), allocatable :: e_out(:) + real(8), allocatable :: p(:) + real(8), allocatable :: c(:) + type(DistributionContainer), allocatable :: angle(:) end type AngleEnergyTable - type, extends(SecondaryDistribution) :: CorrelatedAngleEnergy + type, extends(AngleEnergy) :: CorrelatedAngleEnergy integer :: n_region integer, allocatable :: breakpoints(:) integer, allocatable :: interpolation(:) @@ -43,12 +46,6 @@ contains real(8) :: p_l_k, p_l_k1 ! adjacent p on outgoing grid l real(8) :: c_k, c_k1 ! cumulative probability - ! TODO: Write error during initialization - if (this%n_region > 1) then - call fatal_error("Multiple interpolation regions not supported while & - &attempting to sample Kalbach-Mann distribution.") - end if - ! find energy bin and calculate interpolation factor -- if the energy is ! outside the range of the tabulated energies, choose the first or last bins n_energy_in = size(this%energy_in) @@ -72,30 +69,23 @@ contains end if ! interpolation for energy E1 and EK - n_energy_out = size(this%table(i)%energy%x) - E_i_1 = this%table(i)%energy%x(1) - E_i_K = this%table(i)%energy%x(n_energy_out) + n_energy_out = size(this%table(i)%e_out) + E_i_1 = this%table(i)%e_out(1) + E_i_K = this%table(i)%e_out(n_energy_out) - n_energy_out = size(this%table(i+1)%energy%x) - E_i1_1 = this%table(i+1)%energy%x(1) - E_i1_K = this%table(i+1)%energy%x(n_energy_out) + n_energy_out = size(this%table(i+1)%e_out) + E_i1_1 = this%table(i+1)%e_out(1) + E_i1_K = this%table(i+1)%e_out(n_energy_out) E_1 = E_i_1 + r*(E_i1_1 - E_i_1) E_K = E_i_K + r*(E_i1_K - E_i_K) -!!$ ! TODO: Write error at initizliation -!!$ if (this%table(l)%n_discrete > 0) then -!!$ ! discrete lines present -!!$ call fatal_error("Discrete lines in continuous tabular distributed not & -!!$ &yet supported") -!!$ end if - ! determine outgoing energy bin - n_energy_out = size(this%table(l)%energy%x) + n_energy_out = size(this%table(l)%e_out) r1 = prn() - c_k = this%table(l)%energy%c(1) + c_k = this%table(l)%c(1) do k = 1, n_energy_out - 1 - c_k1 = this%table(l)%energy%c(k+1) + c_k1 = this%table(l)%c(k+1) if (r1 < c_k1) exit c_k = c_k1 end do @@ -103,9 +93,9 @@ contains ! check to make sure k is <= NP - 1 k = min(k, n_energy_out - 1) - E_l_k = this%table(l)%energy%x(k) - p_l_k = this%table(l)%energy%p(k) - if (this%table(l)%energy%interpolation == HISTOGRAM) then + E_l_k = this%table(l)%e_out(k) + p_l_k = this%table(l)%p(k) + if (this%table(l)%interpolation == HISTOGRAM) then ! Histogram interpolation if (p_l_k > ZERO) then E_out = E_l_k + (r1 - c_k)/p_l_k @@ -113,10 +103,10 @@ contains E_out = E_l_k end if - elseif (this%table(l)%energy%interpolation == LINEAR_LINEAR) then + elseif (this%table(l)%interpolation == LINEAR_LINEAR) then ! Linear-linear interpolation - E_l_k1 = this%table(l)%energy%x(k+1) - p_l_k1 = this%table(l)%energy%p(k+1) + E_l_k1 = this%table(l)%e_out(k+1) + p_l_k1 = this%table(l)%p(k+1) frac = (p_l_k1 - p_l_k)/(E_l_k1 - E_l_k) if (frac == ZERO) then @@ -136,9 +126,9 @@ contains ! Find correlated angular distribution for closest outgoing energy bin if (r1 - c_k < c_k1 - r1) then - mu = this%table(l)%angle(k)%sample() + mu = this%table(l)%angle(k)%obj%sample() else - mu = this%table(l)%angle(k + 1)%sample() + mu = this%table(l)%angle(k + 1)%obj%sample() end if end subroutine correlated_sample diff --git a/src/secondary_header.F90 b/src/secondary_header.F90 index 1f8ad3aed1..30cdab8b88 100644 --- a/src/secondary_header.F90 +++ b/src/secondary_header.F90 @@ -13,13 +13,6 @@ module secondary_header class(AngleEnergy), allocatable :: obj end type AngleEnergyContainer - type :: SecondaryDistribution - type(Tab1), allocatable :: applicability(:) - type(AngleEnergyContainer), allocatable :: distribution(:) - contains - procedure :: sample => secondary_sample - end type SecondaryDistribution - abstract interface subroutine iSampleAngleEnergy(this, E_in, E_out, mu) import AngleEnergy @@ -30,6 +23,18 @@ module secondary_header end subroutine iSampleAngleEnergy end interface +!=============================================================================== +! SECONDARYDISTRIBUTION stores a secondary distribution for angle and energy, +! whether correlated or uncorrelated. +!=============================================================================== + + type :: SecondaryDistribution + type(Tab1), allocatable :: applicability(:) + type(AngleEnergyContainer), allocatable :: distribution(:) + contains + procedure :: sample => secondary_sample + end type SecondaryDistribution + contains subroutine secondary_sample(this, E_in, E_out, mu) diff --git a/src/secondary_kalbach.F90 b/src/secondary_kalbach.F90 index d0d2f32bf2..9764502ef6 100644 --- a/src/secondary_kalbach.F90 +++ b/src/secondary_kalbach.F90 @@ -1,8 +1,7 @@ module secondary_kalbach use constants, only: ZERO, ONE, TWO, HISTOGRAM, LINEAR_LINEAR - use error, only: fatal_error - use secondary_header, only: SecondaryDistribution + use secondary_header, only: AngleEnergy use random_lcg, only: prn use search, only: binary_search @@ -16,7 +15,7 @@ module secondary_kalbach real(8), allocatable :: a(:) end type KalbachMannTable - type, extends(SecondaryDistribution) :: KalbachMann + type, extends(AngleEnergy) :: KalbachMann integer :: n_region integer, allocatable :: breakpoints(:) integer, allocatable :: interpolation(:) @@ -49,12 +48,6 @@ contains real(8) :: km_r, km_a ! Kalbach-Mann parameters real(8) :: T - ! TODO: Write error during initialization - if (this%n_region > 1) then - call fatal_error("Multiple interpolation regions not supported while & - &attempting to sample Kalbach-Mann distribution.") - end if - ! find energy bin and calculate interpolation factor -- if the energy is ! outside the range of the tabulated energies, choose the first or last bins n_energy_in = size(this%energy_in) @@ -89,13 +82,6 @@ contains E_1 = E_i_1 + r*(E_i1_1 - E_i_1) E_K = E_i_K + r*(E_i1_K - E_i_K) - ! TODO: Write error at initizliation - if (this%table(l)%n_discrete > 0) then - ! discrete lines present - call fatal_error("Discrete lines in continuous tabular distributed not & - &yet supported") - end if - ! determine outgoing energy bin n_energy_out = size(this%table(l)%e_out) r1 = prn() diff --git a/src/secondary_uncorrelated.F90 b/src/secondary_uncorrelated.F90 index 7d0046aa4f..bd10512bd1 100644 --- a/src/secondary_uncorrelated.F90 +++ b/src/secondary_uncorrelated.F90 @@ -1,10 +1,12 @@ module secondary_uncorrelated use angle_distribution, only: AngleDistribution + use constants, only: ONE, TWO use energy_distribution, only: EnergyDistribution - use secondary_header, only: SecondaryDistribution + use secondary_header, only: AngleEnergy + use random_lcg, only: prn - type, extends(SecondaryDistribution) :: UncorrelatedAngleEnergy + type, extends(AngleEnergy) :: UncorrelatedAngleEnergy type(AngleDistribution) :: angle class(EnergyDistribution), allocatable :: energy contains @@ -20,7 +22,12 @@ contains real(8), intent(out) :: mu ! Sample cosine of scattering angle - mu = this%angle%sample(E_in) + if (allocated(this%angle%energy)) then + mu = this%angle%sample(E_in) + else + ! no angle distribution given => assume isotropic for all energies + mu = TWO*prn() - ONE + end if ! Sample outgoing energy E_out = this%energy%sample(E_in) From a7ca67b33468b7973e5ac4036dbdb7bebf9f8a9e Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 18 Nov 2015 15:10:05 -0600 Subject: [PATCH 174/650] Don't sample between energy distributions if there's only one --- src/secondary_header.F90 | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/secondary_header.F90 b/src/secondary_header.F90 index 30cdab8b88..e0c414826b 100644 --- a/src/secondary_header.F90 +++ b/src/secondary_header.F90 @@ -43,18 +43,26 @@ contains real(8), intent(out) :: E_out real(8), intent(out) :: mu + integer :: n real(8) :: p_valid - do i = 1, size(this%applicability) - ! Determine probability that i-th energy distribution is sampled - p_valid = interpolate_tab1(this%applicability(i), E_in) + n = size(this%applicability) + if (n > 1) then + do i = 1, n + ! Determine probability that i-th energy distribution is sampled + p_valid = interpolate_tab1(this%applicability(i), E_in) + + ! If i-th distribution is sampled, sample energy from the distribution + if (prn() <= p_valid) then + call this%distribution(i)%obj%sample(E_in, E_out, mu) + exit + end if + end do + else + ! If only one distribution is present, go ahead and sample it + call this%distribution(1)%obj%sample(E_in, E_out, mu) + end if - ! If i-th distribution is sampled, sample energy from the distribution - if (prn() <= p_valid) then - call this%distribution(i)%obj%sample(E_in, E_out, mu) - exit - end if - end do end subroutine secondary_sample end module secondary_header From 306f7016b63b25015a20fed0ed2394ae796a3ef5 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 18 Nov 2015 16:08:58 -0600 Subject: [PATCH 175/650] Use ACE-provided cumulative frequencies for angular distributions --- src/ace.F90 | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/src/ace.F90 b/src/ace.F90 index 1407a4b132..6fb37c54ad 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -902,8 +902,6 @@ contains integer :: k ! index over energy distributions integer :: interp integer, allocatable :: LC(:) ! locator - real(8), allocatable :: x(:) - real(8), allocatable :: p(:) ! loop over all reactions with secondary neutrons -- NXS(5) does not include ! elastic scattering @@ -977,13 +975,10 @@ contains ! Get probability density data XSS_index = XSS_index + 2 - allocate(x(NP), p(NP)) - x(:) = get_real(NP) - p(:) = get_real(NP) - - ! initialize distribution - call adist%initialize(x, p, interp) - deallocate(x, p) + allocate(adist%x(NP), adist%p(NP), adist%c(NP)) + adist%x(:) = get_real(NP) + adist%p(:) = get_real(NP) + adist%c(:) = get_real(NP) end select end do deallocate(LC) @@ -1069,8 +1064,6 @@ contains integer :: interp integer, allocatable :: L(:) ! locations of distributions for each Ein integer, allocatable :: LC(:) ! locations of distributions for each Ein - real(8), allocatable :: x(:) - real(8), allocatable :: p(:) XSS_index = LDIS + IDAT - 1 @@ -1355,13 +1348,10 @@ contains ! Get probability density data XSS_index = XSS_index + 2 - allocate(x(NP), p(NP)) - x(:) = get_real(NP) - p(:) = get_real(NP) - - ! initialize distribution - call adist%initialize(x, p, interp) - deallocate(x, p) + allocate(adist%x(NP), adist%p(NP), adist%c(NP)) + adist%x(:) = get_real(NP) + adist%p(:) = get_real(NP) + adist%c(:) = get_real(NP) end select end do deallocate(LC) From 6262e07cbd83bb3eb379543f8729c898339b2961 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 22 Dec 2015 09:09:17 -0600 Subject: [PATCH 176/650] A few patches so that RNG streams still match --- src/ace.F90 | 16 ++++++++++++++++ src/secondary_correlated.F90 | 8 ++++++++ src/secondary_kalbach.F90 | 9 +++++++++ src/secondary_uncorrelated.F90 | 8 +++++++- 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/ace.F90 b/src/ace.F90 index 6fb37c54ad..5b003d4067 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -1035,6 +1035,22 @@ contains call get_energy_dist(secondary%distribution(n)%obj, LAW, & JXS(11), IDAT, nuc%awr, nuc%reactions(i)%Q_value) + ! <<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<< + ! Before the secondary distribution refactor, when the angle/energy + ! distribution was uncorrelated, no angle was actually sampled. With + ! the refactor, an angle is always sampled for an uncorrelated + ! distribution even when no angle distribution exists in the ACE file + ! (isotropic is assumed). To preserve the RNG stream, we explicitly + ! mark fission reactions so that we avoid the angle sampling. + if (any(nuc%reactions(i + 1)%MT == & + [N_FISSION, N_F, N_NF, N_2NF, N_3NF])) then + select type (aedist => secondary%distribution(n)%obj) + type is (UncorrelatedAngleEnergy) + aedist%fission = .true. + end select + end if + ! <<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<< + ! Get locator for next distribution LNW = nint(XSS(JXS(11) + LNW - 1)) end do diff --git a/src/secondary_correlated.F90 b/src/secondary_correlated.F90 index 39ce5a1a8d..5b1d49e28d 100644 --- a/src/secondary_correlated.F90 +++ b/src/secondary_correlated.F90 @@ -46,6 +46,14 @@ contains real(8) :: p_l_k, p_l_k1 ! adjacent p on outgoing grid l real(8) :: c_k, c_k1 ! cumulative probability + ! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<<<< + ! Before the secondary distribution refactor, an isotropic polar cosine was + ! always sampled but then overwritten with the polar cosine sampled from the + ! correlated distribution. To preserve the random number stream, we keep + ! this dummy sampling here but can remove it later (will change answers) + mu = TWO*prn() - ONE + ! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<<<< + ! find energy bin and calculate interpolation factor -- if the energy is ! outside the range of the tabulated energies, choose the first or last bins n_energy_in = size(this%energy_in) diff --git a/src/secondary_kalbach.F90 b/src/secondary_kalbach.F90 index 9764502ef6..d38541edd5 100644 --- a/src/secondary_kalbach.F90 +++ b/src/secondary_kalbach.F90 @@ -48,6 +48,14 @@ contains real(8) :: km_r, km_a ! Kalbach-Mann parameters real(8) :: T + ! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<<<< + ! Before the secondary distribution refactor, an isotropic polar cosine was + ! always sampled but then overwritten with the polar cosine sampled from the + ! correlated distribution. To preserve the random number stream, we keep + ! this dummy sampling here but can remove it later (will change answers) + mu = TWO*prn() - ONE + ! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<<<< + ! find energy bin and calculate interpolation factor -- if the energy is ! outside the range of the tabulated energies, choose the first or last bins n_energy_in = size(this%energy_in) @@ -144,6 +152,7 @@ contains r1 = prn() mu = log(r1*exp(km_a) + (ONE - r1)*exp(-km_a))/km_a end if + end subroutine kalbachmann_sample end module secondary_kalbach diff --git a/src/secondary_uncorrelated.F90 b/src/secondary_uncorrelated.F90 index bd10512bd1..40fa53a382 100644 --- a/src/secondary_uncorrelated.F90 +++ b/src/secondary_uncorrelated.F90 @@ -7,6 +7,7 @@ module secondary_uncorrelated use random_lcg, only: prn type, extends(AngleEnergy) :: UncorrelatedAngleEnergy + logical :: fission = .false. type(AngleDistribution) :: angle class(EnergyDistribution), allocatable :: energy contains @@ -22,7 +23,12 @@ contains real(8), intent(out) :: mu ! Sample cosine of scattering angle - if (allocated(this%angle%energy)) then + if (this%fission) then + ! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<<<< + ! For fission, the angle is not used, so just assign a dummy value + mu = ONE + ! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<<<< + elseif (allocated(this%angle%energy)) then mu = this%angle%sample(E_in) else ! no angle distribution given => assume isotropic for all energies From f4d655605a9c3ccde109d764f758a09962ad8e64 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 4 Jan 2016 14:58:08 -0600 Subject: [PATCH 177/650] Remove SAVE attribute (implicit) in global module. This was needed to remove a weird ICE in gfortran 4.6. --- src/global.F90 | 1 - 1 file changed, 1 deletion(-) diff --git a/src/global.F90 b/src/global.F90 index a5943b6b74..4c243ee41f 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -22,7 +22,6 @@ module global #endif implicit none - save ! ============================================================================ ! GEOMETRY-RELATED VARIABLES From 59fa8c601125ad876a6c75cc7f174403c14615e7 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 15 Jan 2016 12:33:40 -0500 Subject: [PATCH 178/650] Fixed bug in string construction for AggregateFilter __repr__ method --- openmc/aggregate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/aggregate.py b/openmc/aggregate.py index 1fa636577d..50eb8c6278 100644 --- a/openmc/aggregate.py +++ b/openmc/aggregate.py @@ -163,7 +163,7 @@ class AggregateNuclide(object): string = '{0}('.format(self.aggregate_op) names = [nuclide.name if isinstance(nuclide, Nuclide) else str(nuclide) for nuclide in self.nuclides] - string = ', '.join(map(str, names)) + ')' + string += ', '.join(map(str, names)) + ')' return string @property From e6c0793ab5cd58667942207aa8fc23d0954e0c85 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 15 Jan 2016 14:30:19 -0500 Subject: [PATCH 179/650] Now use tally summation for MGXS subdomain averaging --- openmc/aggregate.py | 2 +- openmc/mgxs/mgxs.py | 40 +++++----------------------------------- 2 files changed, 6 insertions(+), 36 deletions(-) diff --git a/openmc/aggregate.py b/openmc/aggregate.py index 50eb8c6278..32d22eedf5 100644 --- a/openmc/aggregate.py +++ b/openmc/aggregate.py @@ -237,7 +237,7 @@ class AggregateFilter(object): self.aggregate_op = aggregate_op def __hash__(self): - return hash((self.type, self.bins, self.aggregate_op)) + return hash(repr(self)) def __eq__(self, other): return str(other) == str(self) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index e20a6a320e..abc1ed4912 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -843,50 +843,20 @@ class MGXS(object): elif self.domain_type == 'distribcell': subdomains = np.arange(self.num_subdomains) else: - subdomains = [0] + subdomains = None # Clone this MGXS to initialize the subdomain-averaged version avg_xs = copy.deepcopy(self) avg_xs._rxn_rate_tally = None avg_xs._xs_tally = None - avg_xs._sparse = False - - # If domain is distribcell, make the new domain 'cell' - if self.domain_type == 'distribcell': - avg_xs.domain_type = 'cell' # Average each of the tallies across subdomains for tally_type, tally in avg_xs.tallies.items(): + tally_avg = tally.summation(filter_type=self.domain_type, + filter_bins=subdomains) + avg_xs.tallies[tally_type] = tally_avg - # Make condensed tally derived and null out sum, sum_sq - tally._derived = True - tally._sum = None - tally._sum_sq = None - - # Get tally data arrays reshaped with one dimension per filter - mean = tally.get_reshaped_data(value='mean') - std_dev = tally.get_reshaped_data(value='std_dev') - - # Get the mean, std. dev. across requested subdomains - mean = np.sum(mean[subdomains, ...], axis=0) - std_dev = np.sum(std_dev[subdomains, ...]**2, axis=0) - std_dev = np.sqrt(std_dev) - - # If domain is distribcell, make subdomain-averaged a 'cell' domain - domain_filter = tally.find_filter(self._domain_type) - if domain_filter.type == 'distribcell': - domain_filter.type = 'cell' - domain_filter.num_bins = 1 - - # Reshape averaged data arrays with one dimension for all filters - mean = np.reshape(mean, tally.shape) - std_dev = np.reshape(std_dev, tally.shape) - - # Override tally's data with the new condensed data - tally._mean = mean - tally._std_dev = std_dev - - # Compute the subdomain-averaged multi-group cross section + avg_xs._domain_type = 'sum({0})'.format(self.domain_type) avg_xs.sparse = self.sparse return avg_xs From dfa638680ab7470814e955ce667a19fef830f499 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Fri, 15 Jan 2016 17:05:22 -0500 Subject: [PATCH 180/650] Fix CMake version typo --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5ad537e10a..f0f06d47ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -263,7 +263,7 @@ endif() # set compile flags. Note that this sets the COMPILE_OPTIONS property (also # available only in 2.8.12+) rather than the COMPILE_FLAGS property, which is # deprecated. The former can handle lists whereas the latter cannot. -if(CMAKE_VERSION VERSION_LESS 4.8.12) +if(CMAKE_VERSION VERSION_LESS 2.8.12) string(REPLACE ";" " " f90flags "${f90flags}") set_property(TARGET ${program} PROPERTY COMPILE_FLAGS "${f90flags}") else() From bc0b8262499f6fe0d08ee9b3fc8f979319cfa013 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 15 Jan 2016 17:33:22 -0500 Subject: [PATCH 181/650] Added new tally aggregation (summation) test --- openmc/aggregate.py | 2 +- openmc/tallies.py | 2 +- tests/test_tally_aggregation/inputs_true.dat | 1 + tests/test_tally_aggregation/results_true.dat | 1 + .../test_tally_aggregation.py | 99 +++++++++++++++++++ .../test_tally_arithmetic.py | 2 - 6 files changed, 103 insertions(+), 4 deletions(-) create mode 100644 tests/test_tally_aggregation/inputs_true.dat create mode 100644 tests/test_tally_aggregation/results_true.dat create mode 100644 tests/test_tally_aggregation/test_tally_aggregation.py diff --git a/openmc/aggregate.py b/openmc/aggregate.py index 50eb8c6278..67995a41f2 100644 --- a/openmc/aggregate.py +++ b/openmc/aggregate.py @@ -405,5 +405,5 @@ class AggregateFilter(object): aggregate_bin_array = np.repeat(aggregate_bin_array, datasize) # Construct Pandas DataFrame for the AggregateFilter - df = pd.DataFrame({self.aggregate_filter.type : aggregate_bin_array}) + df = pd.DataFrame({self.aggregate_filter.type: aggregate_bin_array}) return df \ No newline at end of file diff --git a/openmc/tallies.py b/openmc/tallies.py index b0265b841a..980c5fa2b5 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -2873,7 +2873,7 @@ class Tally(object): # Sum across any scores specified by the user if len(scores) != 0: score_bins = [self.get_score_index(score) for score in scores] - axis_index = self.num_filters + self.num_nuclides + axis_index = self.num_filters + 1 mean = np.take(mean, indices=score_bins, axis=axis_index) std_dev = np.take(std_dev, indices=score_bins, axis=axis_index) mean = np.sum(mean, axis=axis_index, keepdims=True) diff --git a/tests/test_tally_aggregation/inputs_true.dat b/tests/test_tally_aggregation/inputs_true.dat new file mode 100644 index 0000000000..7b4276f59e --- /dev/null +++ b/tests/test_tally_aggregation/inputs_true.dat @@ -0,0 +1 @@ +530a5e969901e153531f74aed46246b1e8783a0e2f347e472f7554c9970152f45d85499f17d7df9c35c74fed6f78d449aa70bf0c1f8947cd34d3a829483a0055 \ No newline at end of file diff --git a/tests/test_tally_aggregation/results_true.dat b/tests/test_tally_aggregation/results_true.dat new file mode 100644 index 0000000000..cde3e281c2 --- /dev/null +++ b/tests/test_tally_aggregation/results_true.dat @@ -0,0 +1 @@ +ba8bfe764fcc0484a4fdab8fdc4ff8ad0e4a98b1ff33e8687899c8cc6bf80cb28b3a59aeaec84bd74681b8b5f19f714292ccaa9c9d4ba852b2cc29872f612e10 \ No newline at end of file diff --git a/tests/test_tally_aggregation/test_tally_aggregation.py b/tests/test_tally_aggregation/test_tally_aggregation.py new file mode 100644 index 0000000000..a5c8d94141 --- /dev/null +++ b/tests/test_tally_aggregation/test_tally_aggregation.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python + +import os +import sys +import glob +import hashlib +sys.path.insert(0, os.pardir) +from testing_harness import PyAPITestHarness +import openmc + + +class TallyAggregationTestHarness(PyAPITestHarness): + def _build_inputs(self): + + # The summary.h5 file needs to be created to read in the tallies + self._input_set.settings.output = {'summary': True} + + # Initialize the tallies file + tallies_file = openmc.TalliesFile() + + # Initialize the nuclides + u235 = openmc.Nuclide('U-235') + u238 = openmc.Nuclide('U-238') + pu239 = openmc.Nuclide('Pu-239') + + # Initialize the filters + energy_filter = openmc.Filter(type='energy', bins=[0.0, 0.253e-6, + 1.0e-3, 1.0, 20.0]) + distrib_filter = openmc.Filter(type='distribcell', bins=[60]) + + # Initialized the tallies + tally = openmc.Tally(name='distribcell tally') + tally.add_filter(energy_filter) + tally.add_filter(distrib_filter) + tally.add_score('nu-fission') + tally.add_score('total') + tally.add_nuclide(u235) + tally.add_nuclide(u238) + tally.add_nuclide(pu239) + tallies_file.add_tally(tally) + + # Export tallies to file + self._input_set.tallies = tallies_file + super(TallyAggregationTestHarness, self)._build_inputs() + + def _get_results(self, hash_output=True): + """Digest info in the statepoint and return as a string.""" + + # Read the statepoint file. + statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] + sp = openmc.StatePoint(statepoint) + + # Read the summary file. + summary = glob.glob(os.path.join(os.getcwd(), 'summary.h5'))[0] + su = openmc.Summary(summary) + sp.link_with_summary(su) + + # Extract the tally of interest + tally = sp.get_tally(name='distribcell tally') + + # Perform tally aggregations across filter bins, nuclides and scores + outstr = '' + + # Sum across all energy filter bins + tally_sum = tally.summation(filter_type='energy') + outstr += ', '.join(map(str, tally_sum.mean)) + outstr += ', '.join(map(str, tally_sum.std_dev)) + + # Sum across all distribcell filter bins + tally_sum = tally.summation(filter_type='distribcell') + outstr += ', '.join(map(str, tally_sum.mean)) + outstr += ', '.join(map(str, tally_sum.std_dev)) + + # Sum across all nuclides + tally_sum = tally.summation(nuclides=['U-235', 'U-238', 'Pu-239']) + outstr += ', '.join(map(str, tally_sum.mean)) + outstr += ', '.join(map(str, tally_sum.std_dev)) + + # Sum across all scores + tally_sum = tally.summation(scores=['nu-fission', 'total']) + outstr += ', '.join(map(str, tally_sum.mean)) + outstr += ', '.join(map(str, tally_sum.std_dev)) + + # Hash the results if necessary + if hash_output: + sha512 = hashlib.sha512() + sha512.update(outstr.encode('utf-8')) + outstr = sha512.hexdigest() + + return outstr + + def _cleanup(self): + super(TallyAggregationTestHarness, self)._cleanup() + f = os.path.join(os.getcwd(), 'tallies.xml') + if os.path.exists(f): os.remove(f) + +if __name__ == '__main__': + harness = TallyAggregationTestHarness('statepoint.10.h5', True) + harness.main() diff --git a/tests/test_tally_arithmetic/test_tally_arithmetic.py b/tests/test_tally_arithmetic/test_tally_arithmetic.py index 6643fd5a22..1954334b7f 100644 --- a/tests/test_tally_arithmetic/test_tally_arithmetic.py +++ b/tests/test_tally_arithmetic/test_tally_arithmetic.py @@ -100,8 +100,6 @@ class TallyArithmeticTestHarness(PyAPITestHarness): 'entrywise') outstr += str(tally_3.mean) - print(outstr) - # Hash the results if necessary if hash_output: sha512 = hashlib.sha512() From a6b3eaec9fb311917b7606096e9d5513f69102bb Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 15 Jan 2016 18:02:44 -0500 Subject: [PATCH 182/650] Added Tally average aggregation operation to Python API --- openmc/aggregate.py | 14 ++-- openmc/tallies.py | 155 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 160 insertions(+), 9 deletions(-) diff --git a/openmc/aggregate.py b/openmc/aggregate.py index 67995a41f2..0e15c193c9 100644 --- a/openmc/aggregate.py +++ b/openmc/aggregate.py @@ -13,7 +13,7 @@ if sys.version_info[0] >= 3: basestring = str # Acceptable tally aggregation operations -_TALLY_AGGREGATE_OPS = ['sum', 'mean'] +_TALLY_AGGREGATE_OPS = ['sum', 'avg'] class AggregateScore(object): @@ -25,7 +25,7 @@ class AggregateScore(object): scores : Iterable of str or CrossScore The scores included in the aggregation aggregate_op : str - The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + The tally aggregation operator (e.g., 'sum', 'avg', etc.) used to aggregate across a tally's scores with this AggregateScore Attributes @@ -33,7 +33,7 @@ class AggregateScore(object): scores : Iterable of str or CrossScore The scores included in the aggregation aggregate_op : str - The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + The tally aggregation operator (e.g., 'sum', 'avg', etc.) used to aggregate across a tally's scores with this AggregateScore """ @@ -108,7 +108,7 @@ class AggregateNuclide(object): nuclides : Iterable of str or Nuclide or CrossNuclide The nuclides included in the aggregation aggregate_op : str - The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + The tally aggregation operator (e.g., 'sum', 'avg', etc.) used to aggregate across a tally's nuclides with this AggregateNuclide Attributes @@ -116,7 +116,7 @@ class AggregateNuclide(object): nuclides : Iterable of str or Nuclide or CrossNuclide The nuclides included in the aggregation aggregate_op : str - The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + The tally aggregation operator (e.g., 'sum', 'avg', etc.) used to aggregate across a tally's nuclides with this AggregateNuclide """ @@ -198,7 +198,7 @@ class AggregateFilter(object): bins : Iterable of tuple The filter bins included in the aggregation aggregate_op : str - The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + The tally aggregation operator (e.g., 'sum', 'avg', etc.) used to aggregate across a tally filter's bins with this AggregateFilter Attributes @@ -208,7 +208,7 @@ class AggregateFilter(object): aggregate_filter : filter The filter included in the aggregation aggregate_op : str - The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + The tally aggregation operator (e.g., 'sum', 'avg', etc.) used to aggregate across a tally filter's bins with this AggregateFilter bins : Iterable of tuple The filter bins included in the aggregation diff --git a/openmc/tallies.py b/openmc/tallies.py index 980c5fa2b5..30495398ac 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -2758,7 +2758,7 @@ class Tally(object): def summation(self, scores=[], filter_type=None, filter_bins=[], nuclides=[], remove_filter=False): """Vectorized sum of tally data across scores, filter bins and/or - nuclides using tally addition. + nuclides using tally aggregation. This method constructs a new tally to encapsulate the sum of the data represented by the summation of the data in this tally. The tally data @@ -2800,7 +2800,7 @@ class Tally(object): tally_sum._derived = True tally_sum._estimator = self.estimator tally_sum._num_realizations = self.num_realizations - tally_sum.with_batch_statistics = self.with_batch_statistics + tally_sum._with_batch_statistics = self.with_batch_statistics tally_sum._with_summary = self.with_summary tally_sum._sp_filename = self._sp_filename tally_sum._results_read = self._results_read @@ -2903,6 +2903,157 @@ class Tally(object): tally_sum.sparse = self.sparse return tally_sum + def average(self, scores=[], filter_type=None, + filter_bins=[], nuclides=[], remove_filter=False): + """Vectorized average of tally data across scores, filter bins and/or + nuclides using tally aggregation. + + This method constructs a new tally to encapsulate the average of the + data represented by the average of the data in this tally. The tally + data average is determined by the scores, filter bins and nuclides + specified in the input parameters. + + Parameters + ---------- + scores : list of str + A list of one or more score strings to average across + (e.g., ['absorption', 'nu-fission']; default is []) + filter_type : str + A filter type string (e.g., 'cell', 'energy') corresponding to the + filter bins to average across + filter_bins : Iterable of Integral or tuple + A list of the filter bins corresponding to the filter_type parameter + Each bin in the list is the integer ID for 'material', 'surface', + 'cell', 'cellborn', and 'universe' Filters. Each bin is an integer + for the cell instance ID for 'distribcell' Filters. Each bin is a + 2-tuple of floats for 'energy' and 'energyout' filters corresponding + to the energy boundaries of the bin of interest. Each bin is an + (x,y,z) 3-tuple for 'mesh' filters corresponding to the mesh cell of + interest. + nuclides : list of str + A list of nuclide name strings to average across + (e.g., ['U-235', 'U-238']; default is []) + remove_filter : bool + If a filter is being averaged over, this bool indicates whether to + remove that filter in the returned tally. Default is False. + + Returns + ------- + Tally + A new tally which encapsulates the average of data requested. + """ + + # Create new derived Tally for average + tally_avg = Tally() + tally_avg._derived = True + tally_avg._estimator = self.estimator + tally_avg._num_realizations = self.num_realizations + tally_avg._with_batch_statistics = self.with_batch_statistics + tally_avg._with_summary = self.with_summary + tally_avg._sp_filename = self._sp_filename + tally_avg._results_read = self._results_read + + # Get tally data arrays reshaped with one dimension per filter + mean = self.get_reshaped_data(value='mean') + std_dev = self.get_reshaped_data(value='std_dev') + + # Average across any filter bins specified by the user + if filter_type in _FILTER_TYPES: + find_filter = self.find_filter(filter_type) + + # If user did not specify filter bins, average across all bins + if len(filter_bins) == 0: + bin_indices = np.arange(find_filter.num_bins) + + if filter_type == 'distribcell': + filter_bins = np.arange(find_filter.num_bins) + else: + num_bins = find_filter.num_bins + filter_bins = \ + [(find_filter.get_bin(i)) for i in range(num_bins)] + + # Only average across bins specified by the user + else: + bin_indices = \ + [find_filter.get_bin_index(bin) for bin in filter_bins] + + # Average across the bins in the user-specified filter + for i, self_filter in enumerate(self.filters): + if self_filter.type == filter_type: + mean = np.take(mean, indices=bin_indices, axis=i) + std_dev = np.take(std_dev, indices=bin_indices, axis=i) + mean = np.mean(mean, axis=i, keepdims=True) + std_dev = np.mean(std_dev**2, axis=i, keepdims=True) + std_dev /= len(bin_indices) + std_dev = np.sqrt(std_dev) + + # Add AggregateFilter to the tally avg + if not remove_filter: + filter_sum = \ + AggregateFilter(self_filter, filter_bins, 'avg') + tally_avg.add_filter(filter_sum) + + # Add a copy of each filter not averaged across to the tally avg + else: + tally_avg.add_filter(copy.deepcopy(self_filter)) + + # Add a copy of this tally's filters to the tally avg + else: + tally_avg._filters = copy.deepcopy(self.filters) + + # Sum across any nuclides specified by the user + if len(nuclides) != 0: + nuclide_bins = [self.get_nuclide_index(nuclide) for nuclide in nuclides] + axis_index = self.num_filters + mean = np.take(mean, indices=nuclide_bins, axis=axis_index) + std_dev = np.take(std_dev, indices=nuclide_bins, axis=axis_index) + mean = np.mean(mean, axis=axis_index, keepdims=True) + std_dev = np.mean(std_dev**2, axis=axis_index, keepdims=True) + std_dev /= len(nuclide_bins) + std_dev = np.sqrt(std_dev) + + # Add AggregateNuclide to the tally avg + nuclide_avg = AggregateNuclide(nuclides, 'avg') + tally_avg.add_nuclide(nuclide_avg) + + # Add a copy of this tally's nuclides to the tally avg + else: + tally_avg._nuclides = copy.deepcopy(self.nuclides) + + # Sum across any scores specified by the user + if len(scores) != 0: + score_bins = [self.get_score_index(score) for score in scores] + axis_index = self.num_filters + 1 + mean = np.take(mean, indices=score_bins, axis=axis_index) + std_dev = np.take(std_dev, indices=score_bins, axis=axis_index) + mean = np.sum(mean, axis=axis_index, keepdims=True) + std_dev = np.sum(std_dev**2, axis=axis_index, keepdims=True) + std_dev /= len(score_bins) + std_dev = np.sqrt(std_dev) + + # Add AggregateScore to the tally avg + score_sum = AggregateScore(scores, 'avg') + tally_avg.add_score(score_sum) + + # Add a copy of this tally's scores to the tally avg + else: + tally_avg._scores = copy.deepcopy(self.scores) + + # Update the tally avg's filter strides + tally_avg._update_filter_strides() + + # Reshape condensed data arrays with one dimension for all filters + mean = np.reshape(mean, tally_avg.shape) + std_dev = np.reshape(std_dev, tally_avg.shape) + + # Assign tally avg's data with the new arrays + tally_avg._mean = mean + tally_avg._std_dev = std_dev + + # If original tally was sparse, sparsify the tally average + tally_avg.sparse = self.sparse + return tally_avg + def diagonalize_filter(self, new_filter): """Diagonalize the tally data array along a new axis of filter bins. From 473d3220dca2a6a71115477fb6c3a216f1d8d5f9 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 16 Jan 2016 13:48:06 -0500 Subject: [PATCH 183/650] Changes per comments of @smharper and @paulromano --- docs/source/usersguide/input.rst | 5 +- docs/source/usersguide/install.rst | 2 +- docs/source/usersguide/mgxs_library.rst | 73 +++---- docs/source/usersguide/output/source.rst | 5 +- docs/source/usersguide/output/statepoint.rst | 11 +- .../python/pincell_multigroup/build-xml.py | 17 +- examples/xml/pincell_multigroup/materials.xml | 4 +- examples/xml/pincell_multigroup/settings.xml | 6 - openmc/material.py | 11 +- openmc/mgxs/groups.py | 2 +- openmc/mgxs_library.py | 6 +- openmc/settings.py | 10 +- openmc/summary.py | 4 +- src/cmfd_input.F90 | 2 +- src/initialize.F90 | 2 +- src/input_xml.F90 | 191 +++++++++--------- src/mgxs_data.F90 | 18 +- src/state_point.F90 | 14 +- src/tally.F90 | 45 +++-- 19 files changed, 221 insertions(+), 207 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 754f815de4..6f73866e40 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -546,7 +546,8 @@ attributes/sub-elements: *Default*: 0.988 2.249 - .. note:: The above format should be used even when using the multi-group :ref:`energy_mode`. + .. note:: The above format should be used even when using the multi-group + :ref:`energy_mode`. :write_initial: An element specifying whether to write out the initial source bank used at @@ -1517,6 +1518,8 @@ The ```` element accepts the following sub-elements: .. note:: This score type is not used in the multi-group :ref:`energy_mode`. + .. _kappa_fission: + :kappa-fission: The recoverable energy production rate due to fission. The recoverable energy is defined as the fission product kinetic energy, prompt and diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst index 2bfdbc5820..9a62eac3a3 100644 --- a/docs/source/usersguide/install.rst +++ b/docs/source/usersguide/install.rst @@ -385,7 +385,7 @@ ACE data as described below. The TALYS-based evaluated nuclear data library, TENDL_, is also openly available in ACE format. In multi-group mode, OpenMC utilizes an XML-based library format which can be -used to describe nuclidic- or material-specific quantities. +used to describe nuclide- or material-specific quantities. Using ENDF/B-VII.1 Cross Sections from NNDC ------------------------------------------- diff --git a/docs/source/usersguide/mgxs_library.rst b/docs/source/usersguide/mgxs_library.rst index ab6be5cc38..d0dc1e54f5 100644 --- a/docs/source/usersguide/mgxs_library.rst +++ b/docs/source/usersguide/mgxs_library.rst @@ -87,18 +87,19 @@ attributes/sub-elements required to describe the meta-data: *Default*: None, this must be provided. :alias: - The number of total fission source iterations per batch. + An alternative name to use for the microscopic or macroscopic data set. *Default*: If no alias is provided, it will adopt the value of ``name``. :kT: - The temperature the data was generated at. + The temperature times Boltzmann's constant (in units of MeV) at which the + data was generated. *Default*: Room temperature, 2.53E-8 MeV :fissionable: This element states whether or not the data in question is fissionable. - Accepted values are ``true`` or ``false``. + Accepted values are "true" or "false". *Default*: None, this element must be provided. @@ -108,42 +109,42 @@ attributes/sub-elements required to describe the meta-data: scalar flux weighting (or reduced to an equivalent representation) and thus are angle-independent, or if the data was generated with angular dependent fluxes and thus the data is angle-dependent. The options are - either ``isotropic`` or ``angle``. + either "isotropic" or "angle". - *Default*: ``isotropic`` + *Default*: "isotropic" :num_azimuthal: This element provides the number of equi-width bins that the azimuthal angular domain is subdivided in the case of angle-dependent cross sections - (i.e., ``angle`` is passed to the ``representation`` element). + (i.e., "angle" is passed to the ``representation`` element). - *Default*: If ``representation`` is ``angle``, this must be provided. If + *Default*: If ``representation`` is "angle", this must be provided. If not, this parameter is not used. :num_polar: This element provides the number of equi-width bins that the polar angular domain is subdivided in the case of angle-dependent cross sections - (i.e., ``angle`` is passed to the ``representation`` element). + (i.e., "angle" is passed to the ``representation`` element). - *Default*: If ``representation`` is ``angle``, this must be provided. If + *Default*: If ``representation`` is "angle", this must be provided. If not, this parameter is not used. :scatt_type: This element provides the representation of the angular distribution associated with each group-to-group transfer probability. The options are - either ``legendre``, ``histogram``, or ``tabular``. - The ``legendre`` option means the angular distribution has been - expanded via Legendre polynomials of the order provided in the ``order`` + either "legendre", "histogram", or "tabular". + The "legendre" option means the angular distribution has been + expanded via Legendre polynomials of the order provided in the "order" element. - The ``histogram`` option means the angular distribution is provided in + The "histogram" option means the angular distribution is provided in an equi-width histogram format with a number of bins as provided in the - ``order`` element. This is useful when the angular distribution was + "order" element. This is useful when the angular distribution was obtained from a Monte Carlo tally and thus is natively in the histogram format. - The ``tabular`` option means the angular distribution is provided in an + The "tabular" option means the angular distribution is provided in an equi-spaced point-wise representation. - *Default*: ``legendre`` + *Default*: "legendre" :order: This element provides either the Legendre order, number of bins, or number @@ -165,17 +166,17 @@ attributes/sub-elements required to describe the meta-data: :enable: This attribute/sub-element denotes whether or not the conversion to the - tabular format should be performed or not. A value of ``true`` means - the conversion should be performed, ``false`` means it should not. + tabular format should be performed or not. A value of "true" means + the conversion should be performed, "false" means it should not. - *Default*: ``true`` + *Default*: "true" :num_points: If the conversion is to take place the number of tabular points is required. This attribute/sub-element allows the user to set the desired number of points. - *Default*: ``33`` + *Default*: 33 The following attributes/sub-elements are the cross section values to be used during the transport process. @@ -183,9 +184,9 @@ attributes/sub-elements required to describe the meta-data: :total: This element requires the group-wise total cross section ordered by increasing group index (i.e., fast to thermal). If ``representation`` is - ``isotropic``, then the length of this list should equal the number of + "isotropic", then the length of this list should equal the number of groups described in the ``groups`` element. If ``representation`` is - ``angle``, then the length of this list should equal the number of groups + "angle", then the length of this list should equal the number of groups times the number of azimuthal angles times the number of polar angles, with the inner-dimension being groups, intermediate-dimension being azimuthal angles and outer-dimension being the polar angles. @@ -196,9 +197,9 @@ attributes/sub-elements required to describe the meta-data: :absorption: This element requires the group-wise absorption cross section ordered by increasing group index (i.e., fast to thermal). If ``representation`` is - ``isotropic``, then the length of this list should equal the number of + "isotropic", then the length of this list should equal the number of groups described in the ``groups`` element. If ``representation`` is - ``angle``, then the length of this list should equal the number of groups + "angle", then the length of this list should equal the number of groups times the number of azimuthal angles times the number of polar angles, with the inner-dimension being groups, intermediate-dimension being azimuthal angles and outer-dimension being the polar angles. @@ -210,9 +211,9 @@ attributes/sub-elements required to describe the meta-data: columns representing incoming group and rows representing the outgoing group. That is, down-scatter will be above the diagonal of the resultant matrix. This matrix is repeated for every Legendre order (in order of - increasing orders) if ``scatt_type`` is ``legendre``; otherwise, this + increasing orders) if ``scatt_type`` is "legendre"; otherwise, this matrix is repeated for every bin of the histogram or tabular - representation. Finally, if ``representation`` is ``angle``, the above + representation. Finally, if ``representation`` is "angle", the above is repeated for every azimuthal angle and every polar angle, in that order. @@ -232,32 +233,32 @@ attributes/sub-elements required to describe the meta-data: neglected). The following fission-specific data are only needed should ``fissionable`` - be ``true``. + be "true". :fission: This element requires the group-wise fission cross section ordered by increasing group index (i.e., fast to thermal). If ``representation`` is - ``isotropic``, then the length of this list should equal the number of + "isotropic", then the length of this list should equal the number of groups described in the ``groups`` element. If ``representation`` is - ``angle``, then the length of this list should equal the number of groups + "angle", then the length of this list should equal the number of groups times the number of azimuthal angles times the number of polar angles, with the inner-dimension being groups, intermediate-dimension being azimuthal angles and outer-dimension being the polar angles. - *Default*: None, this is required only if ``fission`` tallies are + *Default*: None, this is required only if fission tallies are requested and the material is fissionable. - :k_fission: + :kappa_fission: This element requires the group-wise kappa-fission cross section ordered by increasing group index (i.e., fast to thermal). If ``representation`` is - ``isotropic``, then the length of this list should equal the number of + "isotropic", then the length of this list should equal the number of groups described in the ``groups`` element. If ``representation`` is - ``angle``, then the length of this list should equal the number of groups + "angle", then the length of this list should equal the number of groups times the number of azimuthal angles times the number of polar angles, with the inner-dimension being groups, intermediate-dimension being azimuthal angles and outer-dimension being the polar angles. - *Default*: None, this is required only if ``kappa-fission`` tallies are + *Default*: None, this is required only if :ref:`kappa_fission` tallies are requested and the material is fissionable. :chi: @@ -267,9 +268,9 @@ attributes/sub-elements required to describe the meta-data: not depend on incoming energy. If the user does not wish to make this approximation, then this should not be provided and this information included in the ``nu_fission`` element instead. If ``representation`` is - ``isotropic``, then the length of this list should equal the number of + "isotropic", then the length of this list should equal the number of groups described in the ``groups`` element. If ``representation`` is - ``angle``, then the length of this list should equal the number of groups + "angle", then the length of this list should equal the number of groups times the number of azimuthal angles times the number of polar angles, with the inner-dimension being groups, intermediate-dimension being azimuthal angles and outer-dimension being the polar angles. diff --git a/docs/source/usersguide/output/source.rst b/docs/source/usersguide/output/source.rst index 2981b0f662..e8867083c1 100644 --- a/docs/source/usersguide/output/source.rst +++ b/docs/source/usersguide/output/source.rst @@ -15,5 +15,6 @@ is that documented here. **/source_bank** (Compound type) Source bank information for each particle. The compound type has fields - ``wgt``, ``xyz``, ``uvw``, and ``E`` which represent the weight, position, - direction, and energy of the source particle, respectively. + ``wgt``, ``xyz``, ``uvw``, ``E``, ``g``, and ``delayed_group``, which + represent the weight, position, direction, energy, energy group, and + delayed_group of the source particle, respectively. diff --git a/docs/source/usersguide/output/statepoint.rst b/docs/source/usersguide/output/statepoint.rst index 15bc79f739..2921258c97 100644 --- a/docs/source/usersguide/output/statepoint.rst +++ b/docs/source/usersguide/output/statepoint.rst @@ -39,6 +39,12 @@ The current revision of the statepoint file format is 14. Pseudo-random number generator seed. +**/run_CE** (*int*) + + Flag to denote continuous-energy or multi-group mode. A value of 1 + indicates a continuous-energy run while a value of 0 indicates a + multi-group run. + **/run_mode** (*char[]*) Run mode used. A value of 1 indicates a fixed-source run and a value of 2 @@ -251,5 +257,6 @@ if (run_mode == 'k-eigenvalue' and source_present > 0) **/source_bank** (Compound type) Source bank information for each particle. The compound type has fields - ``wgt``, ``xyz``, ``uvw``, and ``E`` which represent the weight, - position, direction, and energy of the source particle, respectively. + ``wgt``, ``xyz``, ``uvw``, ``E``, ``g``, and ``delayed_group``, which + represent the weight, position, direction, energy, energy group, and + delayed_group of the source particle, respectively. diff --git a/examples/python/pincell_multigroup/build-xml.py b/examples/python/pincell_multigroup/build-xml.py index 2145a68a54..ba15370c3b 100644 --- a/examples/python/pincell_multigroup/build-xml.py +++ b/examples/python/pincell_multigroup/build-xml.py @@ -20,7 +20,7 @@ groups = openmc.mgxs.EnergyGroups(group_edges=[1E-11, 0.0635E-6, 10.0E-6, 1.0E-4, 1.0E-3, 0.5, 1.0, 20.0]) # Instantiate the 7-group (C5G7) cross section data -uo2_xsdata = openmc.XSdata('UO2.300k', groups) +uo2_xsdata = openmc.XSdata('UO2.300K', groups) uo2_xsdata.order = 0 uo2_xsdata.total = np.array([0.1779492, 0.3298048, 0.4803882, 0.5543674, 0.3118013, 0.3951678, 0.5644058]) @@ -43,7 +43,7 @@ uo2_xsdata.nu_fission = np.array([2.005998E-02, 2.027303E-03, 1.570599E-02, uo2_xsdata.chi = np.array([5.8791E-01, 4.1176E-01, 3.3906E-04, 1.1761E-07, 0.0000E+00, 0.0000E+00, 0.0000E+00]) -h2o_xsdata = openmc.XSdata('LWTR.300k', groups) +h2o_xsdata = openmc.XSdata('LWTR.300K', groups) h2o_xsdata.order = 0 h2o_xsdata.total = np.array([0.15920605, 0.412969593, 0.59030986, 0.58435, 0.718, 1.2544497, 2.650379]) @@ -57,7 +57,7 @@ scatter = [[[0.0444777, 0.1134000, 0.0007235, 0.0000037, 0.0000001, 0.0000000, 0 [0.0000000, 0.0000000, 0.0000000, 0.0000714, 0.1391380, 0.5118200, 0.0612290], [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0022157, 0.6999130, 0.5373200], [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.1324400, 2.4807000]]] -h2o_xsdata.scatter = np.array(scatter[:][:]) +h2o_xsdata.scatter = np.array(scatter) mg_cross_sections_file = openmc.MGXSLibraryFile(groups) mg_cross_sections_file.add_xsdatas([uo2_xsdata,h2o_xsdata]) @@ -69,8 +69,8 @@ mg_cross_sections_file.export_to_xml() ############################################################################### # Instantiate some Macroscopic Data -uo2_data = openmc.Macroscopic('UO2', '300k') -h2o_data = openmc.Macroscopic('LWTR', '300k') +uo2_data = openmc.Macroscopic('UO2', '300K') +h2o_data = openmc.Macroscopic('LWTR', '300K') # Instantiate some Materials and register the appropriate Nuclides uo2 = openmc.Material(material_id=1, name='UO2 fuel') @@ -83,7 +83,7 @@ water.add_macroscopic(h2o_data) # Instantiate a MaterialsFile, register all Materials, and export to XML materials_file = openmc.MaterialsFile() -materials_file.default_xs = '300k' +materials_file.default_xs = '300K' materials_file.add_materials([uo2, water]) materials_file.export_to_xml() @@ -145,11 +145,6 @@ settings_file.inactive = inactive settings_file.particles = particles settings_file.set_source_space('box', [-0.63, -0.63, -1, \ 0.63, 0.63, 1]) -settings_file.entropy_lower_left = [-0.54, -0.54, -1.e50] -settings_file.entropy_upper_right = [0.54, 0.54, 1.e50] -settings_file.entropy_dimension = [10, 10, 1] -settings_file.export_to_xml() - ############################################################################### # Exporting to OpenMC tallies.xml File diff --git a/examples/xml/pincell_multigroup/materials.xml b/examples/xml/pincell_multigroup/materials.xml index 930fc09085..4b14f4a795 100644 --- a/examples/xml/pincell_multigroup/materials.xml +++ b/examples/xml/pincell_multigroup/materials.xml @@ -1,7 +1,7 @@ - - 71c + + 300K diff --git a/examples/xml/pincell_multigroup/settings.xml b/examples/xml/pincell_multigroup/settings.xml index 6bd27df3dd..dfd2fac813 100644 --- a/examples/xml/pincell_multigroup/settings.xml +++ b/examples/xml/pincell_multigroup/settings.xml @@ -27,12 +27,6 @@ - - - 2000 - true - - true true diff --git a/openmc/material.py b/openmc/material.py index e429190dc1..e51586205d 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -50,8 +50,8 @@ class Material(object): Density of the material (units defined separately) density_units : str Units used for `density`. Can be one of 'g/cm3', 'g/cc', 'kg/cm3', - 'atom/b-cm', 'atom/cm3', 'sum', or 'macro' (the latter only applies - if in multi-group mode). + 'atom/b-cm', 'atom/cm3', 'sum', or 'macro'. The 'macro' unit only + applies in the case of a multi-group calculation. """ @@ -346,7 +346,7 @@ class Material(object): 'has already been added'.format(self._id, macroscopic) raise ValueError(msg) - if not isinstance(macroscopic, (openmc.Macroscopic, str)): + if not isinstance(macroscopic, (openmc.Macroscopic, basestring)): msg = 'Unable to add a Macroscopic to Material ID="{0}" with a ' \ 'non-Macroscopic value "{1}"'.format(self._id, macroscopic) raise ValueError(msg) @@ -511,7 +511,7 @@ class Material(object): return xml_element - def _get_macroscopic_xml(self, macroscopic, distrib=False): + def _get_macroscopic_xml(self, macroscopic): xml_element = ET.Element("macroscopic") xml_element.set("name", macroscopic._name) @@ -626,8 +626,7 @@ class Material(object): subelement.append(subsubelement) else: # Create macroscopic XML subelements - subsubelement = self._get_macroscopic_xml(self, - self._macroscopic, + subsubelement = self._get_macroscopic_xml(self._macroscopic, distrib=True) subelement.append(subsubelement) diff --git a/openmc/mgxs/groups.py b/openmc/mgxs/groups.py index 3436c0e037..e6838b36ba 100644 --- a/openmc/mgxs/groups.py +++ b/openmc/mgxs/groups.py @@ -54,7 +54,7 @@ class EnergyGroups(object): def __eq__(self, other): if not isinstance(other, EnergyGroups): return False - elif self.group_edges != other.group_edges: + elif (self.group_edges != other.group_edges).all(): return False else: return True diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 605fc7064d..3b6b7753ea 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -15,7 +15,7 @@ from openmc.checkvalue import check_type, check_value, check_greater_than, \ from openmc.clean_xml import * # Supported incoming particle MGXS angular treatment representations -REPRESENTATIONS = ['isotropic', 'angle'] +_REPRESENTATIONS = ['isotropic', 'angle'] def ndarray_to_string(arr): """Converts a numpy ndarray in to a join with spaces between entries @@ -87,7 +87,7 @@ class XSdata(object): name : str, optional Name of the mgxs data set. - representation : {'isotropic' or 'angle'} + representation : {'isotropic', 'angle'} Method used in generating the MGXS (isotropic or angle-dependent flux weighting). Defaults to 'isotropic' @@ -241,7 +241,7 @@ class XSdata(object): @representation.setter def representation(self, representation): # Check it is of valid type. - check_value('representation', representation, REPRESENTATIONS) + check_value('representation', representation, _REPRESENTATIONS) self._representation = representation @alias.setter diff --git a/openmc/settings.py b/openmc/settings.py index 8a562a5455..cf8b674cf7 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -72,12 +72,10 @@ class SettingsFile(object): environment variable will be used for continuous-energy calculations and :envvar:`MG_CROSS_SECTIONS` will be used for multi-group calculations to find the path to the XML cross section file. - energy_grid : str - Set the method used to search energy grids. Acceptable values are - 'nuclide', 'logarithm', and 'material-union'. - energy_mode : str + energy_grid : {'nuclide', 'logarithm', 'material-union'} + Set the method used to search energy grids. + energy_mode : {'continuous-energy', 'multi-group'} Set whether the calculation should be continuous-energy or multi-group. - Acceptable values are 'continuous-energy' or 'multi-group' max_order : int Maximum scattering order to apply globally when in multi-group mode. ptables : bool @@ -495,7 +493,7 @@ class SettingsFile(object): @max_order.setter def max_order(self, max_order): check_type('maximum scattering order', max_order, Integral) - check_greater_than('maximum scattering order', max_order, 0) + check_greater_than('maximum scattering order', max_order, 0, True) self._max_order = max_order @source_file.setter diff --git a/openmc/summary.py b/openmc/summary.py index 80f9fc3976..e3a5743f95 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -60,7 +60,7 @@ class Summary(object): self.date_and_time = self._f['date_and_time'][...] # Read if continuous-energy or multi-group - self.run_CE = bool(self._f['run_CE'].value) + self.run_CE = (self._f['run_CE'].value == 1) self.n_batches = self._f['n_batches'].value self.n_particles = self._f['n_particles'].value @@ -278,7 +278,7 @@ class Summary(object): # Get the distribcell index ind = self._f['geometry/cells'][key]['distribcell_index'].value if ind != 0: - cell.distribcell_index = ind + cell.distribcell_index = ind # Add the Cell to the global dictionary of all Cells self.cells[index] = cell diff --git a/src/cmfd_input.F90 b/src/cmfd_input.F90 index 4588444d05..5e22d38559 100644 --- a/src/cmfd_input.F90 +++ b/src/cmfd_input.F90 @@ -108,7 +108,7 @@ contains do i = 1, ng found = .false. do g = 1, energy_groups + 1 - if (cmfd%egrid(i) == energy_bins(g)) then + if (cmfd % egrid(i) == energy_bins(g)) then found = .true. exit end if diff --git a/src/initialize.F90 b/src/initialize.F90 index 820367f821..ed57652fb2 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -16,7 +16,7 @@ module initialize hdf5_tallyresult_t, hdf5_integer8_t use input_xml, only: read_input_xml, cells_in_univ_dict, read_plots_xml use material_header, only: Material - use mgxs_data + use mgxs_data, only: read_mgxs, same_nuclide_mg_list, create_macro_xs use output, only: title, header, print_version, write_message, & print_usage, write_xs_summary, print_plot use random_lcg, only: initialize_prng diff --git a/src/input_xml.F90 b/src/input_xml.F90 index a6f836ac61..963cf4a829 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -109,7 +109,7 @@ contains temp_str = trim(to_lower(temp_str)) if (temp_str == "mg" .or. temp_str == "multi-group") then run_CE = .false. - else if (temp_str == "ce" .or. temp_str == "continuous") then + else if (temp_str == "ce" .or. temp_str == "continuous-energy") then run_CE = .true. end if end if @@ -406,7 +406,7 @@ contains inquire(FILE=path_source, EXIST=file_exists) if (.not. file_exists) then call fatal_error("Binary source file '" // trim(path_source) & - &// "' does not exist!") + // "' does not exist!") end if else @@ -433,7 +433,7 @@ contains coeffs_reqd = 3 case default call fatal_error("Invalid spatial distribution for external source: "& - &// trim(type)) + // trim(type)) end select ! Determine number of parameters specified @@ -481,7 +481,7 @@ contains external_source % type_angle = SRC_ANGLE_TABULAR case default call fatal_error("Invalid angular distribution for external source: "& - &// trim(type)) + // trim(type)) end select ! Determine number of parameters specified @@ -532,7 +532,7 @@ contains external_source % type_energy = SRC_ENERGY_TABULAR case default call fatal_error("Invalid energy distribution for external source: " & - &// trim(type)) + // trim(type)) end select ! Determine number of parameters specified @@ -926,7 +926,7 @@ contains ! check to make sure a nuclide is specified if (.not. check_for_node(node_scatterer, "nuclide")) then call fatal_error("No nuclide specified for scatterer " & - &// trim(to_str(i)) // " in settings.xml file!") + // trim(to_str(i)) // " in settings.xml file!") end if call get_node_value(node_scatterer, "nuclide", & nuclides_0K(i) % nuclide) @@ -940,7 +940,7 @@ contains if (.not. check_for_node(node_scatterer, "xs_label")) then call fatal_error("Must specify the temperature dependent name of & &scatterer " // trim(to_str(i)) & - &// " given in cross_sections.xml") + // " given in cross_sections.xml") end if call get_node_value(node_scatterer, "xs_label", & nuclides_0K(i) % name) @@ -948,7 +948,7 @@ contains ! check to make sure 0K xs name for which method is applied is given if (.not. check_for_node(node_scatterer, "xs_label_0K")) then call fatal_error("Must specify the 0K name of scatterer " & - &// trim(to_str(i)) // " given in cross_sections.xml") + // trim(to_str(i)) // " given in cross_sections.xml") end if call get_node_value(node_scatterer, "xs_label_0K", & nuclides_0K(i) % name_0K) @@ -1008,7 +1008,7 @@ contains default_expand = JENDL_40 case default call fatal_error("Unknown natural element expansion option: " & - &// trim(temp_str)) + // trim(temp_str)) end select end if @@ -1125,7 +1125,7 @@ contains ! Check to make sure 'id' hasn't been used if (cell_dict % has_key(c % id)) then call fatal_error("Two or more cells use the same unique ID: " & - &// to_str(c % id)) + // to_str(c % id)) end if ! Read material @@ -1146,14 +1146,14 @@ contains ! Check for error if (c % material == ERROR_INT) then call fatal_error("Invalid material specified on cell " & - &// to_str(c % id)) + // to_str(c % id)) end if end select ! Check to make sure that either material or fill was specified if (c % material == NONE .and. c % fill == NONE) then call fatal_error("Neither material nor fill was specified for cell " & - &// trim(to_str(c % id))) + // trim(to_str(c % id))) end if ! Check to make sure that both material and fill haven't been @@ -1213,7 +1213,7 @@ contains n = get_arraysize_double(node_cell, "rotation") if (n /= 3) then call fatal_error("Incorrect number of rotation parameters on cell " & - &// to_str(c % id)) + // to_str(c % id)) end if ! Copy rotation angles in x,y,z directions @@ -1241,7 +1241,7 @@ contains ! another universe if (c % fill == NONE) then call fatal_error("Cannot apply a translation to cell " & - &// trim(to_str(c % id)) // " because it is not filled with & + // trim(to_str(c % id)) // " because it is not filled with & &another universe") end if @@ -1357,7 +1357,7 @@ contains ! Check to make sure 'id' hasn't been used if (surface_dict % has_key(s%id)) then call fatal_error("Two or more surfaces use the same unique ID: " & - &// to_str(s%id)) + // to_str(s%id)) end if ! Copy surface name @@ -1372,10 +1372,10 @@ contains n = get_arraysize_double(node_surf, "coeffs") if (n < coeffs_reqd) then call fatal_error("Not enough coefficients specified for surface: " & - &// trim(to_str(s%id))) + // trim(to_str(s%id))) elseif (n > coeffs_reqd) then call fatal_error("Too many coefficients specified for surface: " & - &// trim(to_str(s%id))) + // trim(to_str(s%id))) end if allocate(coeffs(n)) @@ -1501,7 +1501,7 @@ contains ! Check to make sure 'id' hasn't been used if (lattice_dict % has_key(lat % id)) then call fatal_error("Two or more lattices use the same unique ID: " & - &// to_str(lat % id)) + // to_str(lat % id)) end if ! Copy lattice name @@ -1629,7 +1629,7 @@ contains ! Check to make sure 'id' hasn't been used if (lattice_dict % has_key(lat % id)) then call fatal_error("Two or more lattices use the same unique ID: " & - &// to_str(lat % id)) + // to_str(lat % id)) end if ! Copy lattice name @@ -1883,7 +1883,7 @@ contains ! Check to make sure 'id' hasn't been used if (material_dict % has_key(mat % id)) then call fatal_error("Two or more materials use the same unique ID: " & - &// to_str(mat % id)) + // to_str(mat % id)) end if ! Copy material name @@ -1906,7 +1906,7 @@ contains call get_node_ptr(node_mat, "density", node_dens) else call fatal_error("Must specify density element in material " & - &// trim(to_str(mat % id))) + // trim(to_str(mat % id))) end if ! Initialize value to zero @@ -1943,7 +1943,7 @@ contains sum_density = .false. if (val <= ZERO) then call fatal_error("Need to specify a positive density on material " & - &// trim(to_str(mat % id)) // ".") + // trim(to_str(mat % id)) // ".") end if ! Adjust material density based on specified units @@ -1958,7 +1958,7 @@ contains mat % density = 1.0e-24_8 * val case default call fatal_error("Unkwown units '" // trim(units) & - &// "' specified on material " // trim(to_str(mat % id))) + // "' specified on material " // trim(to_str(mat % id))) end select end if @@ -1981,7 +1981,7 @@ contains call get_node_list(node_mat, "macroscopic", node_macro_list) if (get_list_size(node_macro_list) > 1) then call fatal_error("Only one macroscopic object permitted per material, " & - &// trim(to_str(mat % id))) + // trim(to_str(mat % id))) else if (get_list_size(node_macro_list) == 1) then call get_list_item(node_macro_list, 1, node_nuc) @@ -1989,7 +1989,7 @@ contains ! Check for empty name on nuclide if (.not.check_for_node(node_nuc, "name")) then call fatal_error("No name specified on macroscopic data in material " & - &// trim(to_str(mat % id))) + // trim(to_str(mat % id))) end if ! Check for cross section @@ -2033,7 +2033,7 @@ contains call list_density % append(ONE) else call fatal_error("Units can only be macro for macroscopic data " & - &// trim(name)) + // trim(name)) end if else @@ -2048,7 +2048,7 @@ contains ! Check for empty name on nuclide if (.not.check_for_node(node_nuc, "name")) then call fatal_error("No name specified on nuclide in material " & - &// trim(to_str(mat % id))) + // trim(to_str(mat % id))) end if ! Check for cross section @@ -2079,7 +2079,7 @@ contains if (.not.check_for_node(node_nuc, "ao") .and. & .not.check_for_node(node_nuc, "wo")) then call fatal_error("No atom or weight percent specified for nuclide " & - &// trim(name)) + // trim(name)) elseif (check_for_node(node_nuc, "ao") .and. & check_for_node(node_nuc, "wo")) then call fatal_error("Cannot specify both atom and weight percents for a & @@ -2110,7 +2110,7 @@ contains ! Check for empty name on natural element if (.not.check_for_node(node_ele, "name")) then call fatal_error("No name specified on nuclide in material " & - &// trim(to_str(mat % id))) + // trim(to_str(mat % id))) end if call get_node_value(node_ele, "name", name) @@ -2131,7 +2131,7 @@ contains if (.not.check_for_node(node_ele, "ao") .and. & .not.check_for_node(node_ele, "wo")) then call fatal_error("No atom or weight percent specified for element " & - &// trim(name)) + // trim(name)) elseif (check_for_node(node_ele, "ao") .and. & check_for_node(node_ele, "wo")) then call fatal_error("Cannot specify both atom and weight percents for & @@ -2191,7 +2191,7 @@ contains name = trim(list_names % get_item(j)) if (.not. xs_listing_dict % has_key(to_lower(name))) then call fatal_error("Could not find nuclide " // trim(name) & - &// " in cross_sections data file!") + // " in cross_sections data file!") end if if (run_CE) then @@ -2199,7 +2199,7 @@ contains n = len_trim(name) if (name(n:n) /= 'c') then call fatal_error("Cross-section table " // trim(name) & - &// " is not a continuous-energy neutron table.") + // " is not a continuous-energy neutron table.") end if end if @@ -2238,7 +2238,7 @@ contains if (.not. (all(mat % atom_density >= ZERO) .or. & all(mat % atom_density <= ZERO))) then call fatal_error("Cannot mix atom and weight percents in material " & - &// to_str(mat % id)) + // to_str(mat % id)) end if ! Determine density if it is a sum value @@ -2286,7 +2286,7 @@ contains ! Check that this nuclide is listed in the cross_sections.xml file if (.not. xs_listing_dict % has_key(to_lower(name))) then call fatal_error("Could not find S(a,b) table " // trim(name) & - &// " in cross_sections.xml file!") + // " in cross_sections.xml file!") end if ! Find index in xs_listing and set the name and alias according to the @@ -2448,7 +2448,7 @@ contains ! Check to make sure 'id' hasn't been used if (mesh_dict % has_key(m % id)) then call fatal_error("Two or more meshes use the same unique ID: " & - &// to_str(m % id)) + // to_str(m % id)) end if ! Read mesh type @@ -2589,7 +2589,7 @@ contains ! Check to make sure 'id' hasn't been used if (tally_dict % has_key(t % id)) then call fatal_error("Two or more tallies use the same unique ID: " & - &// to_str(t % id)) + // to_str(t % id)) end if ! Copy tally name @@ -2630,7 +2630,7 @@ contains end if else call fatal_error("Bins not set in filter on tally " & - &// trim(to_str(t % id))) + // trim(to_str(t % id))) end if ! Determine type of filter @@ -2722,7 +2722,7 @@ contains m => meshes(i_mesh) else call fatal_error("Could not find mesh " // trim(to_str(id)) & - &// " specified on tally " // trim(to_str(t % id))) + // " specified on tally " // trim(to_str(t % id))) end if ! Determine number of bins -- this is assuming that the tally is @@ -2906,8 +2906,8 @@ contains case default ! Specified tally filter is invalid, raise error call fatal_error("Unknown filter type '" & - &// trim(temp_str) // "' on tally " & - &// trim(to_str(t % id)) // ".") + // trim(temp_str) // "' on tally " & + // trim(to_str(t % id)) // ".") end select @@ -3003,8 +3003,8 @@ contains ! Check if no nuclide was found if (.not. associated(pair_list)) then call fatal_error("Could not find the nuclide " & - &// trim(word) // " specified in tally " & - &// trim(to_str(t % id)) // " in any material.") + // trim(word) // " specified in tally " & + // trim(to_str(t % id)) // " in any material.") end if deallocate(pair_list) @@ -3072,12 +3072,12 @@ contains ! maximum order. ! The above scheme will essentially take the absolute value if (master) call warning("Invalid scattering order of " & - &// trim(to_str(n_order)) // " requested. Setting to the & + // trim(to_str(n_order)) // " requested. Setting to the & &maximum permissible value, " & - &// trim(to_str(MAX_ANG_ORDER))) + // trim(to_str(MAX_ANG_ORDER))) n_order = MAX_ANG_ORDER sarray(j) = trim(MOMENT_STRS(imomstr)) & - &// trim(to_str(MAX_ANG_ORDER)) + // trim(to_str(MAX_ANG_ORDER)) end if ! Find total number of bins for this case if (imomstr >= YN_LOC) then @@ -3139,9 +3139,9 @@ contains ! maximum order. ! The above scheme will essentially take the absolute value if (master) call warning("Invalid scattering order of " & - &// trim(to_str(n_order)) // " requested. Setting to & + // trim(to_str(n_order)) // " requested. Setting to & &the maximum permissible value, " & - &// trim(to_str(MAX_ANG_ORDER))) + // trim(to_str(MAX_ANG_ORDER))) n_order = MAX_ANG_ORDER end if score_name = trim(MOMENT_N_STRS(imomstr)) // "n" @@ -3293,9 +3293,21 @@ contains case ('n2n', '(n,2n)') t % score_bins(j) = N_2N + ! Disallow for MG mode since data not present + if (.not. run_CE) then + call fatal_error("Cannot tally (n,2n) reaction rate in & + &multi-group mode") + end if + case ('n3n', '(n,3n)') t % score_bins(j) = N_3N + ! Disallow for MG mode since data not present + if (.not. run_CE) then + call fatal_error("Cannot tally (n,3n) reaction rate in & + &multi-group mode") + end if + case ('n4n', '(n,4n)') t % score_bins(j) = N_4N @@ -3480,13 +3492,13 @@ contains t % score_bins(j) = MT else call fatal_error("Invalid MT on : " & - &// trim(sarray(l))) + // trim(sarray(l))) end if else ! Specified score was not an integer call fatal_error("Unknown scoring function: " & - &// trim(sarray(l))) + // trim(sarray(l))) end if end select @@ -3507,7 +3519,7 @@ contains deallocate(sarray) else call fatal_error("No specified on tally " & - &// trim(to_str(t % id)) // ".") + // trim(to_str(t % id)) // ".") end if ! If settings.xml trigger is turned on, create tally triggers @@ -3768,7 +3780,7 @@ contains inquire(FILE=filename, EXIST=file_exists) if (.not. file_exists) then call fatal_error("Plots XML file '" // trim(filename) & - &// "' does not exist!") + // "' does not exist!") end if ! Display output message @@ -3800,7 +3812,7 @@ contains ! Check to make sure 'id' hasn't been used if (plot_dict % has_key(pl % id)) then call fatal_error("Two or more plots use the same unique ID: " & - &// to_str(pl % id)) + // to_str(pl % id)) end if ! Copy plot type @@ -3815,7 +3827,7 @@ contains pl % type = PLOT_TYPE_VOXEL case default call fatal_error("Unsupported plot type '" // trim(temp_str) & - &// "' in plot " // trim(to_str(pl % id))) + // "' in plot " // trim(to_str(pl % id))) end select ! Set output file path @@ -3835,14 +3847,14 @@ contains call get_node_array(node_plot, "pixels", pl % pixels(1:2)) else call fatal_error(" must be length 2 in slice plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end if else if (pl % type == PLOT_TYPE_VOXEL) then if (get_arraysize_integer(node_plot, "pixels") == 3) then call get_node_array(node_plot, "pixels", pl % pixels(1:3)) else call fatal_error(" must be length 3 in voxel plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end if end if @@ -3850,13 +3862,13 @@ contains if (check_for_node(node_plot, "background")) then if (pl % type == PLOT_TYPE_VOXEL) then if (master) call warning("Background color ignored in voxel plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end if if (get_arraysize_integer(node_plot, "background") == 3) then call get_node_array(node_plot, "background", pl % not_found % rgb) else call fatal_error("Bad background RGB in plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end if else pl % not_found % rgb = (/ 255, 255, 255 /) @@ -3877,7 +3889,7 @@ contains pl % basis = PLOT_BASIS_YZ case default call fatal_error("Unsupported plot basis '" // trim(temp_str) & - &// "' in plot " // trim(to_str(pl % id))) + // "' in plot " // trim(to_str(pl % id))) end select end if @@ -3886,7 +3898,7 @@ contains call get_node_array(node_plot, "origin", pl % origin) else call fatal_error("Origin must be length 3 in plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end if ! Copy plotting width @@ -3895,14 +3907,14 @@ contains call get_node_array(node_plot, "width", pl % width(1:2)) else call fatal_error(" must be length 2 in slice plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end if else if (pl % type == PLOT_TYPE_VOXEL) then if (get_arraysize_double(node_plot, "width") == 3) then call get_node_array(node_plot, "width", pl % width(1:3)) else call fatal_error(" must be length 3 in voxel plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end if end if @@ -3912,7 +3924,7 @@ contains if (pl % level < 0) then call fatal_error("Bad universe level in plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end if else pl % level = PLOT_LEVEL_LOWEST @@ -3946,7 +3958,7 @@ contains case default call fatal_error("Unsupported plot color type '" // trim(temp_str) & - &// "' in plot " // trim(to_str(pl % id))) + // "' in plot " // trim(to_str(pl % id))) end select ! Get the number of nodes and get a list of them @@ -3969,7 +3981,7 @@ contains ! Check and make sure 3 values are specified for RGB if (get_arraysize_double(node_col, "rgb") /= 3) then call fatal_error("Bad RGB in plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end if ! Ensure that there is an id for this color specification @@ -3988,7 +4000,7 @@ contains call get_node_array(node_col, "rgb", pl % colors(col_id) % rgb) else call fatal_error("Could not find cell " // trim(to_str(col_id)) & - &// " specified in plot " // trim(to_str(pl % id))) + // " specified in plot " // trim(to_str(pl % id))) end if else if (pl % color_by == PLOT_COLOR_MATS) then @@ -3998,8 +4010,8 @@ contains call get_node_array(node_col, "rgb", pl % colors(col_id) % rgb) else call fatal_error("Could not find material " & - &// trim(to_str(col_id)) // " specified in plot " & - &// trim(to_str(pl % id))) + // trim(to_str(col_id)) // " specified in plot " & + // trim(to_str(pl % id))) end if end if @@ -4013,7 +4025,7 @@ contains if (pl % type == PLOT_TYPE_VOXEL) then call warning("Meshlines ignored in voxel plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end if select case(n_meshlines) @@ -4047,7 +4059,7 @@ contains ! Check and make sure 3 values are specified for RGB if (get_arraysize_double(node_meshlines, "color") /= 3) then call fatal_error("Bad RGB for meshlines color in plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end if call get_node_array(node_meshlines, "color", & @@ -4064,7 +4076,7 @@ contains if (.not. associated(ufs_mesh)) then call fatal_error("No UFS mesh for meshlines on plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end if pl % meshlines_mesh => ufs_mesh @@ -4085,7 +4097,7 @@ contains if (.not. associated(entropy_mesh)) then call fatal_error("No entropy mesh for meshlines on plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end if if (.not. allocated(entropy_mesh % dimension)) then @@ -4114,18 +4126,18 @@ contains end if else call fatal_error("Could not find mesh " & - &// trim(to_str(meshid)) // " specified in meshlines for & + // trim(to_str(meshid)) // " specified in meshlines for & &plot " // trim(to_str(pl % id))) end if case default call fatal_error("Invalid type for meshlines on plot " & - &// trim(to_str(pl % id)) // ": " // trim(meshtype)) + // trim(to_str(pl % id)) // ": " // trim(meshtype)) end select case default call fatal_error("Mutliple meshlines specified in plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end select end if @@ -4137,13 +4149,13 @@ contains if (pl % type == PLOT_TYPE_VOXEL) then if (master) call warning("Mask ignored in voxel plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end if select case(n_masks) case default call fatal_error("Mutliple masks specified in plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) case (1) ! Get pointer to mask @@ -4154,7 +4166,7 @@ contains n_comp = get_arraysize_integer(node_mask, "components") if (n_comp == 0) then call fatal_error("Missing in mask of plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end if allocate(iarray(n_comp)) call get_node_array(node_mask, "components", iarray) @@ -4170,7 +4182,7 @@ contains iarray(j) = cell_dict % get_key(col_id) else call fatal_error("Could not find cell " & - &// trim(to_str(col_id)) // " specified in the mask in & + // trim(to_str(col_id)) // " specified in the mask in & &plot " // trim(to_str(pl % id))) end if @@ -4180,7 +4192,7 @@ contains iarray(j) = material_dict % get_key(col_id) else call fatal_error("Could not find material " & - &// trim(to_str(col_id)) // " specified in the mask in & + // trim(to_str(col_id)) // " specified in the mask in & &plot " // trim(to_str(pl % id))) end if @@ -4194,7 +4206,7 @@ contains call get_node_array(node_mask, "background", pl % colors(j) % rgb) else call fatal_error("Missing in mask of plot " & - &// trim(to_str(pl % id))) + // trim(to_str(pl % id))) end if end if end do @@ -4239,7 +4251,7 @@ contains if (.not. file_exists) then ! Could not find cross_sections.xml file call fatal_error("Cross sections XML file '" & - &// trim(path_cross_sections) // "' does not exist!") + // trim(path_cross_sections) // "' does not exist!") end if call write_message("Reading cross sections XML file...", 5) @@ -4269,7 +4281,7 @@ contains filetype = ASCII else call fatal_error("Unknown filetype in cross_sections.xml: " & - &// trim(temp_str)) + // trim(temp_str)) end if ! copy default record length and entries for binary files @@ -4367,8 +4379,8 @@ contains do i = 1, n_res_scatterers_total if (.not. xs_listing_dict % has_key(trim(nuclides_0K(i) % name_0K))) then call fatal_error("Could not find nuclide " & - &// trim(nuclides_0K(i) % name_0K) & - &// " in cross_sections.xml file!") + // trim(nuclides_0K(i) % name_0K) & + // " in cross_sections.xml file!") end if end do @@ -4385,14 +4397,13 @@ contains type(Node), pointer :: doc => null() type(Node), pointer :: node_xsdata => null() type(NodeList), pointer :: node_xsdata_list => null() - ! character(MAX_LINE_LEN) :: temp_str ! Check if cross_sections.xml exists inquire(FILE=path_cross_sections, EXIST=file_exists) if (.not. file_exists) then ! Could not find cross_sections.xml file call fatal_error("Cross sections XML file '" & - &// trim(path_cross_sections) // "' does not exist!") + // trim(path_cross_sections) // "' does not exist!") end if call write_message("Reading cross sections XML file...", 5) @@ -4417,7 +4428,7 @@ contains allocate(energy_bin_avg(energy_groups)) do i = 1, energy_groups - energy_bin_avg(i) = 0.5_8 * (energy_bins(i) + energy_bins(i + 1)) + energy_bin_avg(i) = HALF * (energy_bins(i) + energy_bins(i + 1)) end do allocate(inverse_velocities(energy_groups)) @@ -4440,8 +4451,8 @@ contains ! Allocate xs_listings array if (n_listings == 0) then - call fatal_error("No XSDATA listings present in cross_sections.xml & - &file!") + call fatal_error("At least one element must be present in & + &cross_sections.xml file!") else allocate(xs_listings(n_listings)) end if @@ -4474,7 +4485,7 @@ contains if (check_for_node(node_xsdata, "kT")) then call get_node_value(node_xsdata, "kT", listing % kT) else - listing % kT = 2.53E-8_8 + listing % kT = 293.6_8 * K_BOLTZMANN end if ! determine type of cross section diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index d568ab7b55..8109087363 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -370,12 +370,12 @@ contains end if if (get_kfiss) then allocate(this % k_fission(groups)) - if (check_for_node(node_xsdata, "k_fission")) then - call get_node_array(node_xsdata, "k_fission", this % k_fission) + if (check_for_node(node_xsdata, "kappa_fission")) then + call get_node_array(node_xsdata, "kappa_fission", this % k_fission) else error_code = 1 - error_text = "k_fission data missing, required due to kappa-fission& - & tallies in tallies.xml file!" + error_text = "kappa_fission data missing, required due to & + &kappa-fission tallies in tallies.xml file!" return end if end if @@ -554,22 +554,22 @@ contains deallocate(temp_arr) else error_code = 1 - error_text = "Fission data missing, required due to kappa-fission& + error_text = "Fission data missing, required due to fission& & tallies in tallies.xml file!" return end if end if if (get_kfiss) then - if (check_for_node(node_xsdata, "k_fission")) then + if (check_for_node(node_xsdata, "kappa_fission")) then allocate(temp_arr(groups * this % Nazi * this % Npol)) - call get_node_array(node_xsdata, "k_fission", temp_arr) + call get_node_array(node_xsdata, "kappa_fission", temp_arr) allocate(this % k_fission(groups, this % Nazi, this % Npol)) this % k_fission = reshape(temp_arr, (/groups, this % Nazi, this % Npol/)) deallocate(temp_arr) else error_code = 1 - error_text = "k_fission data missing, required due to kappa-fission& - & tallies in tallies.xml file!" + error_text = "kappa_fission data missing, required due to & + &kappa-fission tallies in tallies.xml file!" return end if end if diff --git a/src/state_point.F90 b/src/state_point.F90 index 4b58cb7704..a49c88cad6 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -727,14 +727,12 @@ contains ! It is not impossible for a state point to be generated from a CE run but ! to be loaded in to an MG run (or vice versa), check to prevent that. call read_dataset(file_id, "run_CE", sp_run_CE) - if (sp_run_CE == 0) then - if (run_CE) & - call fatal_error("State point file is from multi-group run but & - & current run is continous-energy!") - else if (sp_run_CE == 1) then - if (.not. run_CE) & - call fatal_error("State point file is from continuous-energy run but & - & current run is multi-group!") + if (sp_run_CE == 0 .and. run_CE) then + call fatal_error("State point file is from multi-group run but & + & current run is continous-energy!") + else if (sp_run_CE == 1 .and. .not. run_CE) then + call fatal_error("State point file is from continuous-energy run but & + & current run is multi-group!") end if ! Read and overwrite run information except number of batches diff --git a/src/tally.F90 b/src/tally.F90 index 5d978bdcba..842b7644ea 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -778,7 +778,6 @@ contains end if end if - end select !######################################################################### @@ -807,6 +806,14 @@ contains real(8) :: macro_total ! material macro total xs real(8) :: macro_scatt ! material macro scatt xs real(8) :: micro_abs ! nuclidic microscopic abs + real(8) :: p_uvw(3) ! Particle's current uvw + + ! Set the direction, if needed for nuclidic data, so that nuc % get_xs + ! knows wihch direction it should be using for direction-dependent + ! mgxs + if (i_nuclide > 0) then + p_uvw = p % coord(p % n_coord) % uvw + end if i = 0 SCORE_LOOP: do q = 1, t % n_user_score_bins @@ -860,7 +867,7 @@ contains else if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs(p % g, 'total', UVW=p % coord(i) % uvw) * & + score = nuc % get_xs(p % g, 'total', UVW=p_uvw) * & atom_density * flux end associate else @@ -902,7 +909,7 @@ contains ! Note SCORE_SCATTER_N not available for tracklength/collision. if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs(p % g, 'scatter', UVW=p % coord(i) % uvw) * & + score = nuc % get_xs(p % g, 'scatter', UVW=p_uvw) * & atom_density * flux end associate else @@ -1069,7 +1076,7 @@ contains else if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs(p % g, 'absorption', UVW=p % coord(i) % uvw) & + score = nuc % get_xs(p % g, 'absorption', UVW=p_uvw) & * atom_density * flux end associate else @@ -1085,10 +1092,10 @@ contains ! calculate fraction of absorptions that would have resulted in ! fission associate (nuc => nuclides_MG(i_nuclide) % obj) - micro_abs = nuc % get_xs(p % g, 'absorption', UVW=p % coord(i) % uvw) + micro_abs = nuc % get_xs(p % g, 'absorption', UVW=p_uvw) if (micro_abs > ZERO) then score = p % absorb_wgt * & - nuc % get_xs(p % g, 'fission', UVW=p % coord(i) % uvw) & + nuc % get_xs(p % g, 'fission', UVW=p_uvw) & / micro_abs else score = ZERO @@ -1102,20 +1109,20 @@ contains ! fission reaction rate associate (nuc => nuclides_MG(i_nuclide) % obj) score = p % last_wgt & - * nuc % get_xs(p % g, 'fission', UVW=p % coord(i) % uvw) & - / nuc % get_xs(p % g, 'absorption', UVW=p % coord(i) % uvw) + * nuc % get_xs(p % g, 'fission', UVW=p_uvw) & + / nuc % get_xs(p % g, 'absorption', UVW=p_uvw) end associate end if else if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs(p % g, 'fission', UVW=p % coord(i) % uvw) * & + score = nuc % get_xs(p % g, 'fission', UVW=p_uvw) * & atom_density * flux end associate else score = flux * macro_xs(p % material) % obj % get_xs(p % g, & - 'fission', UVW=p % coord(i) % uvw) + 'fission', UVW=p_uvw) end if end if @@ -1139,10 +1146,10 @@ contains ! calculate fraction of absorptions that would have resulted in ! nu-fission associate (nuc => nuclides_MG(i_nuclide) % obj) - micro_abs = nuc % get_xs(p % g, 'absorption', UVW=p % coord(i) % uvw) + micro_abs = nuc % get_xs(p % g, 'absorption', UVW=p_uvw) if (micro_abs > ZERO) then score = p % absorb_wgt * & - nuc % get_xs(p % g, 'fission', UVW=p % coord(i) % uvw) / & + nuc % get_xs(p % g, 'fission', UVW=p_uvw) / & micro_abs else score = ZERO @@ -1162,7 +1169,7 @@ contains else if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs(p % g, 'nu_fission', UVW=p % coord(i) % uvw) & + score = nuc % get_xs(p % g, 'nu_fission', UVW=p_uvw) & * atom_density * flux end associate else @@ -1180,10 +1187,10 @@ contains ! calculate fraction of absorptions that would have resulted in ! fission scale by kappa-fission associate (nuc => nuclides_MG(i_nuclide) % obj) - micro_abs = nuc % get_xs(p % g, 'absorption', UVW=p % coord(i) % uvw) + micro_abs = nuc % get_xs(p % g, 'absorption', UVW=p_uvw) if (micro_abs > ZERO) then score = p % absorb_wgt * & - nuc % get_xs(p % g, 'k_fission', UVW=p % coord(i) % uvw) / & + nuc % get_xs(p % g, 'k_fission', UVW=p_uvw) / & micro_abs end if end associate @@ -1195,20 +1202,20 @@ contains ! the fission energy production rate associate (nuc => nuclides_MG(i_nuclide) % obj) score = p % last_wgt * & - nuc % get_xs(p % g, 'k_fission', UVW=p % coord(i) % uvw) / & - nuc % get_xs(p % g, 'absorption', UVW=p % coord(i) % uvw) + nuc % get_xs(p % g, 'k_fission', UVW=p_uvw) / & + nuc % get_xs(p % g, 'absorption', UVW=p_uvw) end associate end if else if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs(p % g, 'k_fission', UVW=p % coord(i) % uvw) & + score = nuc % get_xs(p % g, 'k_fission', UVW=p_uvw) & * atom_density * flux end associate else score = flux * macro_xs(p % material) % obj % get_xs(p % g, & - 'k_fission', UVW=p % coord(i) % uvw) + 'k_fission', UVW=p_uvw) end if end if From 9b3e1b86c64bbfe5a49970698d450c94d4176685 Mon Sep 17 00:00:00 2001 From: Colin Josey Date: Fri, 15 Jan 2016 19:30:10 -0500 Subject: [PATCH 184/650] Add basic windowed multipole library support This commit adds the ability to load in windowed multipole temperature-dependent cross section data. Given a windowed multipole file named ZAID.h5 in the same directory as the *.xml files of a simulation, OpenMC will now load this HDF5 file. This will replace the resolved resonance region with windowed multipole data, and all other pointwise data by a small pointwise library to minimize memory footprint. Temperatures are tenatively set by adding a tag inside of a material in materials.xml. Units are in Kelvin for now. This commit also adds the Faddeeva.cc library from http://ab-initio.mit.edu/wiki/index.php/Faddeeva_Package which requires OpenMC to compile both Fortran and C code. Modifications have been done to most of CMakeLists.txt, but not all of it. --- CMakeLists.txt | 40 +- src/Faddeeva.c | 3 + src/Faddeeva.cc | 2516 ++++++++++++++++++++++++++++++++++++++ src/Faddeeva.h | 68 ++ src/ace.F90 | 68 ++ src/ace_header.F90 | 21 +- src/constants.F90 | 2 + src/cross_section.F90 | 381 ++++-- src/hdf5_interface.F90 | 90 ++ src/input_xml.F90 | 39 + src/material_header.F90 | 1 + src/math.F90 | 102 ++ src/multipole.F90 | 199 +++ src/multipole_header.F90 | 152 +++ 14 files changed, 3589 insertions(+), 93 deletions(-) create mode 100644 src/Faddeeva.c create mode 100644 src/Faddeeva.cc create mode 100644 src/Faddeeva.h create mode 100644 src/multipole.F90 create mode 100644 src/multipole_header.F90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 5ad537e10a..a15b0c36e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 2.8 FATAL_ERROR) -project(openmc Fortran) +project(openmc Fortran C) # Setup output directories set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) @@ -109,47 +109,61 @@ if(CMAKE_Fortran_COMPILER_ID STREQUAL GNU) # GNU Fortran compiler options list(APPEND f90flags -cpp -std=f2008 -fbacktrace) + list(APPEND cflags -cpp -std=c99) if(debug) if(NOT (GCC_VERSION VERSION_LESS 4.7)) list(APPEND f90flags -Wall) + list(APPEND cflags -Wall) endif() list(APPEND f90flags -g -pedantic -fbounds-check -ffpe-trap=invalid,overflow,underflow) + list(APPEND cflags -g -pedantic -fbounds-check + -ffpe-trap=invalid,overflow,underflow) list(APPEND ldflags -g) endif() if(profile) list(APPEND f90flags -pg) + list(APPEND cflags -pg) list(APPEND ldflags -pg) endif() if(optimize) list(APPEND f90flags -O3) + list(APPEND cflags -O3) endif() if(openmp) list(APPEND f90flags -fopenmp) + list(APPEND cflags -fopenmp) list(APPEND ldflags -fopenmp) endif() if(coverage) list(APPEND f90flags -coverage) + list(APPEND cflags -coverage) list(APPEND ldflags -coverage) endif() elseif(CMAKE_Fortran_COMPILER_ID STREQUAL Intel) # Intel Fortran compiler options list(APPEND f90flags -fpp -std08 -assume byterecl -traceback) + list(APPEND cflags -std=c99) if(debug) list(APPEND f90flags -g -warn -ftrapuv -fp-stack-check "-check all" -fpe0) + list(APPEND cflags -g -warn -ftrapuv -fp-stack-check + "-check all" -fpe0) list(APPEND ldflags -g) endif() if(profile) list(APPEND f90flags -pg) + list(APPEND cflags -pg) list(APPEND ldflags -pg) endif() if(optimize) list(APPEND f90flags -O3) + list(APPEND cflags -O3) endif() if(openmp) list(APPEND f90flags -openmp) + list(APPEND cflags -openmp) list(APPEND ldflags -openmp) endif() @@ -248,7 +262,7 @@ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) #=============================================================================== set(program "openmc") -file(GLOB source src/*.F90 src/xml/openmc_fox.F90) +file(GLOB source src/Faddeeva.c src/*.F90 src/xml/openmc_fox.F90) add_executable(${program} ${source}) # target_include_directories was added in CMake 2.8.11 and is the recommended @@ -260,15 +274,19 @@ else() endif() # target_compile_options was added in CMake 2.8.12 and is the recommended way to -# set compile flags. Note that this sets the COMPILE_OPTIONS property (also -# available only in 2.8.12+) rather than the COMPILE_FLAGS property, which is -# deprecated. The former can handle lists whereas the latter cannot. -if(CMAKE_VERSION VERSION_LESS 4.8.12) - string(REPLACE ";" " " f90flags "${f90flags}") - set_property(TARGET ${program} PROPERTY COMPILE_FLAGS "${f90flags}") -else() - target_compile_options(${program} PUBLIC ${f90flags}) -endif() +# set compile flag, but it doesn't seem to work with both Fortran and C. In +# theory the commented code below might work but I couldn't get it running. +# Maybe it requires a newer version of CMake? +#target_compile_options(${program} PUBLIC +# $<$:${f90flags}> +# $<$:${cflags}>) +# This is not the recommended method, but it is a functional method. Convert +# the semicolon-delineated lists into space-delineated ones then set them as the +# compiler flags. +string(REPLACE ";" " " f90flags "${f90flags}") +string(REPLACE ";" " " cflags "${cflags}") +set(CMAKE_C_FLAGS "${cflags}") +set(CMAKE_Fortran_FLAGS "${f90flags}") # Add HDF5 library directories to link line with -L foreach(LIBDIR ${HDF5_LIBRARY_DIRS}) diff --git a/src/Faddeeva.c b/src/Faddeeva.c new file mode 100644 index 0000000000..78f5714efa --- /dev/null +++ b/src/Faddeeva.c @@ -0,0 +1,3 @@ +/* The Faddeeva.cc file contains macros to let it compile as C code + (assuming C99 complex-number support), so just #include it. */ +#include "Faddeeva.cc" diff --git a/src/Faddeeva.cc b/src/Faddeeva.cc new file mode 100644 index 0000000000..80e42228c1 --- /dev/null +++ b/src/Faddeeva.cc @@ -0,0 +1,2516 @@ +// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; -*- + +/* Copyright (c) 2012 Massachusetts Institute of Technology + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* (Note that this file can be compiled with either C++, in which + case it uses C++ std::complex, or C, in which case it + uses C99 double complex.) */ + +/* Available at: http://ab-initio.mit.edu/Faddeeva + + Computes various error functions (erf, erfc, erfi, erfcx), + including the Dawson integral, in the complex plane, based + on algorithms for the computation of the Faddeeva function + w(z) = exp(-z^2) * erfc(-i*z). + Given w(z), the error functions are mostly straightforward + to compute, except for certain regions where we have to + switch to Taylor expansions to avoid cancellation errors + [e.g. near the origin for erf(z)]. + + To compute the Faddeeva function, we use a combination of two + algorithms: + + For sufficiently large |z|, we use a continued-fraction expansion + for w(z) similar to those described in: + + Walter Gautschi, "Efficient computation of the complex error + function," SIAM J. Numer. Anal. 7(1), pp. 187-198 (1970) + + G. P. M. Poppe and C. M. J. Wijers, "More efficient computation + of the complex error function," ACM Trans. Math. Soft. 16(1), + pp. 38-46 (1990). + + Unlike those papers, however, we switch to a completely different + algorithm for smaller |z|: + + Mofreh R. Zaghloul and Ahmed N. Ali, "Algorithm 916: Computing the + Faddeyeva and Voigt Functions," ACM Trans. Math. Soft. 38(2), 15 + (2011). + + (I initially used this algorithm for all z, but it turned out to be + significantly slower than the continued-fraction expansion for + larger |z|. On the other hand, it is competitive for smaller |z|, + and is significantly more accurate than the Poppe & Wijers code + in some regions, e.g. in the vicinity of z=1+1i.) + + Note that this is an INDEPENDENT RE-IMPLEMENTATION of these algorithms, + based on the description in the papers ONLY. In particular, I did + not refer to the authors' Fortran or Matlab implementations, respectively, + (which are under restrictive ACM copyright terms and therefore unusable + in free/open-source software). + + Steven G. Johnson, Massachusetts Institute of Technology + http://math.mit.edu/~stevenj + October 2012. + + -- Note that Algorithm 916 assumes that the erfc(x) function, + or rather the scaled function erfcx(x) = exp(x*x)*erfc(x), + is supplied for REAL arguments x. I originally used an + erfcx routine derived from DERFC in SLATEC, but I have + since replaced it with a much faster routine written by + me which uses a combination of continued-fraction expansions + and a lookup table of Chebyshev polynomials. For speed, + I implemented a similar algorithm for Im[w(x)] of real x, + since this comes up frequently in the other error functions. + + A small test program is included the end, which checks + the w(z) etc. results against several known values. To compile + the test function, compile with -DTEST_FADDEEVA (that is, + #define TEST_FADDEEVA). + + If HAVE_CONFIG_H is #defined (e.g. by compiling with -DHAVE_CONFIG_H), + then we #include "config.h", which is assumed to be a GNU autoconf-style + header defining HAVE_* macros to indicate the presence of features. In + particular, if HAVE_ISNAN and HAVE_ISINF are #defined, we use those + functions in math.h instead of defining our own, and if HAVE_ERF and/or + HAVE_ERFC are defined we use those functions from for erf and + erfc of real arguments, respectively, instead of defining our own. + + REVISION HISTORY: + 4 October 2012: Initial public release (SGJ) + 5 October 2012: Revised (SGJ) to fix spelling error, + start summation for large x at round(x/a) (> 1) + rather than ceil(x/a) as in the original + paper, which should slightly improve performance + (and, apparently, slightly improves accuracy) + 19 October 2012: Revised (SGJ) to fix bugs for large x, large -y, + and 15 1e154. + Set relerr argument to min(relerr,0.1). + 27 October 2012: Enhance accuracy in Re[w(z)] taken by itself, + by switching to Alg. 916 in a region near + the real-z axis where continued fractions + have poor relative accuracy in Re[w(z)]. Thanks + to M. Zaghloul for the tip. + 29 October 2012: Replace SLATEC-derived erfcx routine with + completely rewritten code by me, using a very + different algorithm which is much faster. + 30 October 2012: Implemented special-case code for real z + (where real part is exp(-x^2) and imag part is + Dawson integral), using algorithm similar to erfx. + Export ImFaddeeva_w function to make Dawson's + integral directly accessible. + 3 November 2012: Provide implementations of erf, erfc, erfcx, + and Dawson functions in Faddeeva:: namespace, + in addition to Faddeeva::w. Provide header + file Faddeeva.hh. + 4 November 2012: Slightly faster erf for real arguments. + Updated MATLAB and Octave plugins. + 27 November 2012: Support compilation with either C++ or + plain C (using C99 complex numbers). + For real x, use standard-library erf(x) + and erfc(x) if available (for C99 or C++11). + #include "config.h" if HAVE_CONFIG_H is #defined. + 15 December 2012: Portability fixes (copysign, Inf/NaN creation), + use CMPLX/__builtin_complex if available in C, + slight accuracy improvements to erf and dawson + functions near the origin. Use gnulib functions + if GNULIB_NAMESPACE is defined. + 18 December 2012: Slight tweaks (remove recomputation of x*x in Dawson) +*/ + +///////////////////////////////////////////////////////////////////////// +/* If this file is compiled as a part of a larger project, + support using an autoconf-style config.h header file + (with various "HAVE_*" #defines to indicate features) + if HAVE_CONFIG_H is #defined (in GNU autotools style). */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +///////////////////////////////////////////////////////////////////////// +// macros to allow us to use either C++ or C (with C99 features) + +#ifdef __cplusplus + +# include "Faddeeva.hh" + +# include +# include +# include +using namespace std; + +// use std::numeric_limits, since 1./0. and 0./0. fail with some compilers (MS) +# define Inf numeric_limits::infinity() +# define NaN numeric_limits::quiet_NaN() + +typedef complex cmplx; + +// Use C-like complex syntax, since the C syntax is more restrictive +# define cexp(z) exp(z) +# define creal(z) real(z) +# define cimag(z) imag(z) +# define cpolar(r,t) polar(r,t) + +# define C(a,b) cmplx(a,b) + +# define FADDEEVA(name) Faddeeva::name +# define FADDEEVA_RE(name) Faddeeva::name + +// isnan/isinf were introduced in C++11 +# if (__cplusplus < 201103L) && (!defined(HAVE_ISNAN) || !defined(HAVE_ISINF)) +static inline bool my_isnan(double x) { return x != x; } +# define isnan my_isnan +static inline bool my_isinf(double x) { return 1/x == 0.; } +# define isinf my_isinf +# elif (__cplusplus >= 201103L) +// g++ gets confused between the C and C++ isnan/isinf functions +# define isnan std::isnan +# define isinf std::isinf +# endif + +// copysign was introduced in C++11 (and is also in POSIX and C99) +# if defined(_WIN32) || defined(__WIN32__) +# define copysign _copysign // of course MS had to be different +# elif defined(GNULIB_NAMESPACE) // we are using using gnulib +# define copysign GNULIB_NAMESPACE::copysign +# elif (__cplusplus < 201103L) && !defined(HAVE_COPYSIGN) && !defined(__linux__) && !(defined(__APPLE__) && defined(__MACH__)) && !defined(_AIX) +static inline double my_copysign(double x, double y) { return y<0 ? -x : x; } +# define copysign my_copysign +# endif + +// If we are using the gnulib (e.g. in the GNU Octave sources), +// gnulib generates a link warning if we use ::floor instead of gnulib::floor. +// This warning is completely innocuous because the only difference between +// gnulib::floor and the system ::floor (and only on ancient OSF systems) +// has to do with floor(-0), which doesn't occur in the usage below, but +// the Octave developers prefer that we silence the warning. +# ifdef GNULIB_NAMESPACE +# define floor GNULIB_NAMESPACE::floor +# endif + +#else // !__cplusplus, i.e. pure C (requires C99 features) + +# include "Faddeeva.h" + +# define _GNU_SOURCE // enable GNU libc NAN extension if possible + +# include +# include + +typedef double complex cmplx; + +# define FADDEEVA(name) Faddeeva_ ## name +# define FADDEEVA_RE(name) Faddeeva_ ## name ## _re + +/* Constructing complex numbers like 0+i*NaN is problematic in C99 + without the C11 CMPLX macro, because 0.+I*NAN may give NaN+i*NAN if + I is a complex (rather than imaginary) constant. For some reason, + however, it works fine in (pre-4.7) gcc if I define Inf and NaN as + 1/0 and 0/0 (and only if I compile with optimization -O1 or more), + but not if I use the INFINITY or NAN macros. */ + +/* __builtin_complex was introduced in gcc 4.7, but the C11 CMPLX macro + may not be defined unless we are using a recent (2012) version of + glibc and compile with -std=c11... note that icc lies about being + gcc and probably doesn't have this builtin(?), so exclude icc explicitly */ +# if !defined(CMPLX) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !(defined(__ICC) || defined(__INTEL_COMPILER)) +# define CMPLX(a,b) __builtin_complex((double) (a), (double) (b)) +# endif + +# ifdef CMPLX // C11 +# define C(a,b) CMPLX(a,b) +# define Inf INFINITY // C99 infinity +# ifdef NAN // GNU libc extension +# define NaN NAN +# else +# define NaN (0./0.) // NaN +# endif +# else +# define C(a,b) ((a) + I*(b)) +# define Inf (1./0.) +# define NaN (0./0.) +# endif + +static inline cmplx cpolar(double r, double t) +{ + if (r == 0.0 && !isnan(t)) + return 0.0; + else + return C(r * cos(t), r * sin(t)); +} + +#endif // !__cplusplus, i.e. pure C (requires C99 features) + +///////////////////////////////////////////////////////////////////////// +// Auxiliary routines to compute other special functions based on w(z) + +// compute erfcx(z) = exp(z^2) erfz(z) +cmplx FADDEEVA(erfcx)(cmplx z, double relerr) +{ + return FADDEEVA(w)(C(-cimag(z), creal(z)), relerr); +} + +// compute the error function erf(x) +double FADDEEVA_RE(erf)(double x) +{ +#if !defined(__cplusplus) + return erf(x); // C99 supplies erf in math.h +#elif (__cplusplus >= 201103L) || defined(HAVE_ERF) + return ::erf(x); // C++11 supplies std::erf in cmath +#else + double mx2 = -x*x; + if (mx2 < -750) // underflow + return (x >= 0 ? 1.0 : -1.0); + + if (x >= 0) { + if (x < 8e-2) goto taylor; + return 1.0 - exp(mx2) * FADDEEVA_RE(erfcx)(x); + } + else { // x < 0 + if (x > -8e-2) goto taylor; + return exp(mx2) * FADDEEVA_RE(erfcx)(-x) - 1.0; + } + + // Use Taylor series for small |x|, to avoid cancellation inaccuracy + // erf(x) = 2/sqrt(pi) * x * (1 - x^2/3 + x^4/10 - x^6/42 + x^8/216 + ...) + taylor: + return x * (1.1283791670955125739 + + mx2 * (0.37612638903183752464 + + mx2 * (0.11283791670955125739 + + mx2 * (0.026866170645131251760 + + mx2 * 0.0052239776254421878422)))); +#endif +} + +// compute the error function erf(z) +cmplx FADDEEVA(erf)(cmplx z, double relerr) +{ + double x = creal(z), y = cimag(z); + + if (y == 0) + return C(FADDEEVA_RE(erf)(x), + y); // preserve sign of 0 + if (x == 0) // handle separately for speed & handling of y = Inf or NaN + return C(x, // preserve sign of 0 + /* handle y -> Inf limit manually, since + exp(y^2) -> Inf but Im[w(y)] -> 0, so + IEEE will give us a NaN when it should be Inf */ + y*y > 720 ? (y > 0 ? Inf : -Inf) + : exp(y*y) * FADDEEVA(w_im)(y)); + + double mRe_z2 = (y - x) * (x + y); // Re(-z^2), being careful of overflow + double mIm_z2 = -2*x*y; // Im(-z^2) + if (mRe_z2 < -750) // underflow + return (x >= 0 ? 1.0 : -1.0); + + /* Handle positive and negative x via different formulas, + using the mirror symmetries of w, to avoid overflow/underflow + problems from multiplying exponentially large and small quantities. */ + if (x >= 0) { + if (x < 8e-2) { + if (fabs(y) < 1e-2) + goto taylor; + else if (fabs(mIm_z2) < 5e-3 && x < 5e-3) + goto taylor_erfi; + } + /* don't use complex exp function, since that will produce spurious NaN + values when multiplying w in an overflow situation. */ + return 1.0 - exp(mRe_z2) * + (C(cos(mIm_z2), sin(mIm_z2)) + * FADDEEVA(w)(C(-y,x), relerr)); + } + else { // x < 0 + if (x > -8e-2) { // duplicate from above to avoid fabs(x) call + if (fabs(y) < 1e-2) + goto taylor; + else if (fabs(mIm_z2) < 5e-3 && x > -5e-3) + goto taylor_erfi; + } + else if (isnan(x)) + return C(NaN, y == 0 ? 0 : NaN); + /* don't use complex exp function, since that will produce spurious NaN + values when multiplying w in an overflow situation. */ + return exp(mRe_z2) * + (C(cos(mIm_z2), sin(mIm_z2)) + * FADDEEVA(w)(C(y,-x), relerr)) - 1.0; + } + + // Use Taylor series for small |z|, to avoid cancellation inaccuracy + // erf(z) = 2/sqrt(pi) * z * (1 - z^2/3 + z^4/10 - z^6/42 + z^8/216 + ...) + taylor: + { + cmplx mz2 = C(mRe_z2, mIm_z2); // -z^2 + return z * (1.1283791670955125739 + + mz2 * (0.37612638903183752464 + + mz2 * (0.11283791670955125739 + + mz2 * (0.026866170645131251760 + + mz2 * 0.0052239776254421878422)))); + } + + /* for small |x| and small |xy|, + use Taylor series to avoid cancellation inaccuracy: + erf(x+iy) = erf(iy) + + 2*exp(y^2)/sqrt(pi) * + [ x * (1 - x^2 * (1+2y^2)/3 + x^4 * (3+12y^2+4y^4)/30 + ... + - i * x^2 * y * (1 - x^2 * (3+2y^2)/6 + ...) ] + where: + erf(iy) = exp(y^2) * Im[w(y)] + */ + taylor_erfi: + { + double x2 = x*x, y2 = y*y; + double expy2 = exp(y2); + return C + (expy2 * x * (1.1283791670955125739 + - x2 * (0.37612638903183752464 + + 0.75225277806367504925*y2) + + x2*x2 * (0.11283791670955125739 + + y2 * (0.45135166683820502956 + + 0.15045055561273500986*y2))), + expy2 * (FADDEEVA(w_im)(y) + - x2*y * (1.1283791670955125739 + - x2 * (0.56418958354775628695 + + 0.37612638903183752464*y2)))); + } +} + +// erfi(z) = -i erf(iz) +cmplx FADDEEVA(erfi)(cmplx z, double relerr) +{ + cmplx e = FADDEEVA(erf)(C(-cimag(z),creal(z)), relerr); + return C(cimag(e), -creal(e)); +} + +// erfi(x) = -i erf(ix) +double FADDEEVA_RE(erfi)(double x) +{ + return x*x > 720 ? (x > 0 ? Inf : -Inf) + : exp(x*x) * FADDEEVA(w_im)(x); +} + +// erfc(x) = 1 - erf(x) +double FADDEEVA_RE(erfc)(double x) +{ +#if !defined(__cplusplus) + return erfc(x); // C99 supplies erfc in math.h +#elif (__cplusplus >= 201103L) || defined(HAVE_ERFC) + return ::erfc(x); // C++11 supplies std::erfc in cmath +#else + if (x*x > 750) // underflow + return (x >= 0 ? 0.0 : 2.0); + return x >= 0 ? exp(-x*x) * FADDEEVA_RE(erfcx)(x) + : 2. - exp(-x*x) * FADDEEVA_RE(erfcx)(-x); +#endif +} + +// erfc(z) = 1 - erf(z) +cmplx FADDEEVA(erfc)(cmplx z, double relerr) +{ + double x = creal(z), y = cimag(z); + + if (x == 0.) + return C(1, + /* handle y -> Inf limit manually, since + exp(y^2) -> Inf but Im[w(y)] -> 0, so + IEEE will give us a NaN when it should be Inf */ + y*y > 720 ? (y > 0 ? -Inf : Inf) + : -exp(y*y) * FADDEEVA(w_im)(y)); + if (y == 0.) { + if (x*x > 750) // underflow + return C(x >= 0 ? 0.0 : 2.0, + -y); // preserve sign of 0 + return C(x >= 0 ? exp(-x*x) * FADDEEVA_RE(erfcx)(x) + : 2. - exp(-x*x) * FADDEEVA_RE(erfcx)(-x), + -y); // preserve sign of zero + } + + double mRe_z2 = (y - x) * (x + y); // Re(-z^2), being careful of overflow + double mIm_z2 = -2*x*y; // Im(-z^2) + if (mRe_z2 < -750) // underflow + return (x >= 0 ? 0.0 : 2.0); + + if (x >= 0) + return cexp(C(mRe_z2, mIm_z2)) + * FADDEEVA(w)(C(-y,x), relerr); + else + return 2.0 - cexp(C(mRe_z2, mIm_z2)) + * FADDEEVA(w)(C(y,-x), relerr); +} + +// compute Dawson(x) = sqrt(pi)/2 * exp(-x^2) * erfi(x) +double FADDEEVA_RE(Dawson)(double x) +{ + const double spi2 = 0.8862269254527580136490837416705725913990; // sqrt(pi)/2 + return spi2 * FADDEEVA(w_im)(x); +} + +// compute Dawson(z) = sqrt(pi)/2 * exp(-z^2) * erfi(z) +cmplx FADDEEVA(Dawson)(cmplx z, double relerr) +{ + const double spi2 = 0.8862269254527580136490837416705725913990; // sqrt(pi)/2 + double x = creal(z), y = cimag(z); + + // handle axes separately for speed & proper handling of x or y = Inf or NaN + if (y == 0) + return C(spi2 * FADDEEVA(w_im)(x), + -y); // preserve sign of 0 + if (x == 0) { + double y2 = y*y; + if (y2 < 2.5e-5) { // Taylor expansion + return C(x, // preserve sign of 0 + y * (1. + + y2 * (0.6666666666666666666666666666666666666667 + + y2 * 0.26666666666666666666666666666666666667))); + } + return C(x, // preserve sign of 0 + spi2 * (y >= 0 + ? exp(y2) - FADDEEVA_RE(erfcx)(y) + : FADDEEVA_RE(erfcx)(-y) - exp(y2))); + } + + double mRe_z2 = (y - x) * (x + y); // Re(-z^2), being careful of overflow + double mIm_z2 = -2*x*y; // Im(-z^2) + cmplx mz2 = C(mRe_z2, mIm_z2); // -z^2 + + /* Handle positive and negative x via different formulas, + using the mirror symmetries of w, to avoid overflow/underflow + problems from multiplying exponentially large and small quantities. */ + if (y >= 0) { + if (y < 5e-3) { + if (fabs(x) < 5e-3) + goto taylor; + else if (fabs(mIm_z2) < 5e-3) + goto taylor_realaxis; + } + cmplx res = cexp(mz2) - FADDEEVA(w)(z, relerr); + return spi2 * C(-cimag(res), creal(res)); + } + else { // y < 0 + if (y > -5e-3) { // duplicate from above to avoid fabs(x) call + if (fabs(x) < 5e-3) + goto taylor; + else if (fabs(mIm_z2) < 5e-3) + goto taylor_realaxis; + } + else if (isnan(y)) + return C(x == 0 ? 0 : NaN, NaN); + cmplx res = FADDEEVA(w)(-z, relerr) - cexp(mz2); + return spi2 * C(-cimag(res), creal(res)); + } + + // Use Taylor series for small |z|, to avoid cancellation inaccuracy + // dawson(z) = z - 2/3 z^3 + 4/15 z^5 + ... + taylor: + return z * (1. + + mz2 * (0.6666666666666666666666666666666666666667 + + mz2 * 0.2666666666666666666666666666666666666667)); + + /* for small |y| and small |xy|, + use Taylor series to avoid cancellation inaccuracy: + dawson(x + iy) + = D + y^2 (D + x - 2Dx^2) + + y^4 (D/2 + 5x/6 - 2Dx^2 - x^3/3 + 2Dx^4/3) + + iy [ (1-2Dx) + 2/3 y^2 (1 - 3Dx - x^2 + 2Dx^3) + + y^4/15 (4 - 15Dx - 9x^2 + 20Dx^3 + 2x^4 - 4Dx^5) ] + ... + where D = dawson(x) + + However, for large |x|, 2Dx -> 1 which gives cancellation problems in + this series (many of the leading terms cancel). So, for large |x|, + we need to substitute a continued-fraction expansion for D. + + dawson(x) = 0.5 / (x-0.5/(x-1/(x-1.5/(x-2/(x-2.5/(x...)))))) + + The 6 terms shown here seems to be the minimum needed to be + accurate as soon as the simpler Taylor expansion above starts + breaking down. Using this 6-term expansion, factoring out the + denominator, and simplifying with Maple, we obtain: + + Re dawson(x + iy) * (-15 + 90x^2 - 60x^4 + 8x^6) / x + = 33 - 28x^2 + 4x^4 + y^2 (18 - 4x^2) + 4 y^4 + Im dawson(x + iy) * (-15 + 90x^2 - 60x^4 + 8x^6) / y + = -15 + 24x^2 - 4x^4 + 2/3 y^2 (6x^2 - 15) - 4 y^4 + + Finally, for |x| > 5e7, we can use a simpler 1-term continued-fraction + expansion for the real part, and a 2-term expansion for the imaginary + part. (This avoids overflow problems for huge |x|.) This yields: + + Re dawson(x + iy) = [1 + y^2 (1 + y^2/2 - (xy)^2/3)] / (2x) + Im dawson(x + iy) = y [ -1 - 2/3 y^2 + y^4/15 (2x^2 - 4) ] / (2x^2 - 1) + + */ + taylor_realaxis: + { + double x2 = x*x; + if (x2 > 1600) { // |x| > 40 + double y2 = y*y; + if (x2 > 25e14) {// |x| > 5e7 + double xy2 = (x*y)*(x*y); + return C((0.5 + y2 * (0.5 + 0.25*y2 + - 0.16666666666666666667*xy2)) / x, + y * (-1 + y2 * (-0.66666666666666666667 + + 0.13333333333333333333*xy2 + - 0.26666666666666666667*y2)) + / (2*x2 - 1)); + } + return (1. / (-15 + x2*(90 + x2*(-60 + 8*x2)))) * + C(x * (33 + x2 * (-28 + 4*x2) + + y2 * (18 - 4*x2 + 4*y2)), + y * (-15 + x2 * (24 - 4*x2) + + y2 * (4*x2 - 10 - 4*y2))); + } + else { + double D = spi2 * FADDEEVA(w_im)(x); + double y2 = y*y; + return C + (D + y2 * (D + x - 2*D*x2) + + y2*y2 * (D * (0.5 - x2 * (2 - 0.66666666666666666667*x2)) + + x * (0.83333333333333333333 + - 0.33333333333333333333 * x2)), + y * (1 - 2*D*x + + y2 * 0.66666666666666666667 * (1 - x2 - D*x * (3 - 2*x2)) + + y2*y2 * (0.26666666666666666667 - + x2 * (0.6 - 0.13333333333333333333 * x2) + - D*x * (1 - x2 * (1.3333333333333333333 + - 0.26666666666666666667 * x2))))); + } + } +} + +///////////////////////////////////////////////////////////////////////// + +// return sinc(x) = sin(x)/x, given both x and sin(x) +// [since we only use this in cases where sin(x) has already been computed] +static inline double sinc(double x, double sinx) { + return fabs(x) < 1e-4 ? 1 - (0.1666666666666666666667)*x*x : sinx / x; +} + +// sinh(x) via Taylor series, accurate to machine precision for |x| < 1e-2 +static inline double sinh_taylor(double x) { + return x * (1 + (x*x) * (0.1666666666666666666667 + + 0.00833333333333333333333 * (x*x))); +} + +static inline double sqr(double x) { return x*x; } + +// precomputed table of expa2n2[n-1] = exp(-a2*n*n) +// for double-precision a2 = 0.26865... in FADDEEVA(w), below. +static const double expa2n2[] = { + 7.64405281671221563e-01, + 3.41424527166548425e-01, + 8.91072646929412548e-02, + 1.35887299055460086e-02, + 1.21085455253437481e-03, + 6.30452613933449404e-05, + 1.91805156577114683e-06, + 3.40969447714832381e-08, + 3.54175089099469393e-10, + 2.14965079583260682e-12, + 7.62368911833724354e-15, + 1.57982797110681093e-17, + 1.91294189103582677e-20, + 1.35344656764205340e-23, + 5.59535712428588720e-27, + 1.35164257972401769e-30, + 1.90784582843501167e-34, + 1.57351920291442930e-38, + 7.58312432328032845e-43, + 2.13536275438697082e-47, + 3.51352063787195769e-52, + 3.37800830266396920e-57, + 1.89769439468301000e-62, + 6.22929926072668851e-68, + 1.19481172006938722e-73, + 1.33908181133005953e-79, + 8.76924303483223939e-86, + 3.35555576166254986e-92, + 7.50264110688173024e-99, + 9.80192200745410268e-106, + 7.48265412822268959e-113, + 3.33770122566809425e-120, + 8.69934598159861140e-128, + 1.32486951484088852e-135, + 1.17898144201315253e-143, + 6.13039120236180012e-152, + 1.86258785950822098e-160, + 3.30668408201432783e-169, + 3.43017280887946235e-178, + 2.07915397775808219e-187, + 7.36384545323984966e-197, + 1.52394760394085741e-206, + 1.84281935046532100e-216, + 1.30209553802992923e-226, + 5.37588903521080531e-237, + 1.29689584599763145e-247, + 1.82813078022866562e-258, + 1.50576355348684241e-269, + 7.24692320799294194e-281, + 2.03797051314726829e-292, + 3.34880215927873807e-304, + 0.0 // underflow (also prevents reads past array end, below) +}; + +///////////////////////////////////////////////////////////////////////// + +cmplx FADDEEVA(w)(cmplx z, double relerr) +{ + if (creal(z) == 0.0) + return C(FADDEEVA_RE(erfcx)(cimag(z)), + creal(z)); // give correct sign of 0 in cimag(w) + else if (cimag(z) == 0) + return C(exp(-sqr(creal(z))), + FADDEEVA(w_im)(creal(z))); + + double a, a2, c; + if (relerr <= DBL_EPSILON) { + relerr = DBL_EPSILON; + a = 0.518321480430085929872; // pi / sqrt(-log(eps*0.5)) + c = 0.329973702884629072537; // (2/pi) * a; + a2 = 0.268657157075235951582; // a^2 + } + else { + const double pi = 3.14159265358979323846264338327950288419716939937510582; + if (relerr > 0.1) relerr = 0.1; // not sensible to compute < 1 digit + a = pi / sqrt(-log(relerr*0.5)); + c = (2/pi)*a; + a2 = a*a; + } + const double x = fabs(creal(z)); + const double y = cimag(z), ya = fabs(y); + + cmplx ret = 0.; // return value + + double sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0, sum5 = 0; + +#define USE_CONTINUED_FRACTION 1 // 1 to use continued fraction for large |z| + +#if USE_CONTINUED_FRACTION + if (ya > 7 || (x > 6 // continued fraction is faster + /* As pointed out by M. Zaghloul, the continued + fraction seems to give a large relative error in + Re w(z) for |x| ~ 6 and small |y|, so use + algorithm 816 in this region: */ + && (ya > 0.1 || (x > 8 && ya > 1e-10) || x > 28))) { + + /* Poppe & Wijers suggest using a number of terms + nu = 3 + 1442 / (26*rho + 77) + where rho = sqrt((x/x0)^2 + (y/y0)^2) where x0=6.3, y0=4.4. + (They only use this expansion for rho >= 1, but rho a little less + than 1 seems okay too.) + Instead, I did my own fit to a slightly different function + that avoids the hypotenuse calculation, using NLopt to minimize + the sum of the squares of the errors in nu with the constraint + that the estimated nu be >= minimum nu to attain machine precision. + I also separate the regions where nu == 2 and nu == 1. */ + const double ispi = 0.56418958354775628694807945156; // 1 / sqrt(pi) + double xs = y < 0 ? -creal(z) : creal(z); // compute for -z if y < 0 + if (x + ya > 4000) { // nu <= 2 + if (x + ya > 1e7) { // nu == 1, w(z) = i/sqrt(pi) / z + // scale to avoid overflow + if (x > ya) { + double yax = ya / xs; + double denom = ispi / (xs + yax*ya); + ret = C(denom*yax, denom); + } + else if (isinf(ya)) + return ((isnan(x) || y < 0) + ? C(NaN,NaN) : C(0,0)); + else { + double xya = xs / ya; + double denom = ispi / (xya*xs + ya); + ret = C(denom, denom*xya); + } + } + else { // nu == 2, w(z) = i/sqrt(pi) * z / (z*z - 0.5) + double dr = xs*xs - ya*ya - 0.5, di = 2*xs*ya; + double denom = ispi / (dr*dr + di*di); + ret = C(denom * (xs*di-ya*dr), denom * (xs*dr+ya*di)); + } + } + else { // compute nu(z) estimate and do general continued fraction + const double c0=3.9, c1=11.398, c2=0.08254, c3=0.1421, c4=0.2023; // fit + double nu = floor(c0 + c1 / (c2*x + c3*ya + c4)); + double wr = xs, wi = ya; + for (nu = 0.5 * (nu - 1); nu > 0.4; nu -= 0.5) { + // w <- z - nu/w: + double denom = nu / (wr*wr + wi*wi); + wr = xs - wr * denom; + wi = ya + wi * denom; + } + { // w(z) = i/sqrt(pi) / w: + double denom = ispi / (wr*wr + wi*wi); + ret = C(denom*wi, denom*wr); + } + } + if (y < 0) { + // use w(z) = 2.0*exp(-z*z) - w(-z), + // but be careful of overflow in exp(-z*z) + // = exp(-(xs*xs-ya*ya) -2*i*xs*ya) + return 2.0*cexp(C((ya-xs)*(xs+ya), 2*xs*y)) - ret; + } + else + return ret; + } +#else // !USE_CONTINUED_FRACTION + if (x + ya > 1e7) { // w(z) = i/sqrt(pi) / z, to machine precision + const double ispi = 0.56418958354775628694807945156; // 1 / sqrt(pi) + double xs = y < 0 ? -creal(z) : creal(z); // compute for -z if y < 0 + // scale to avoid overflow + if (x > ya) { + double yax = ya / xs; + double denom = ispi / (xs + yax*ya); + ret = C(denom*yax, denom); + } + else { + double xya = xs / ya; + double denom = ispi / (xya*xs + ya); + ret = C(denom, denom*xya); + } + if (y < 0) { + // use w(z) = 2.0*exp(-z*z) - w(-z), + // but be careful of overflow in exp(-z*z) + // = exp(-(xs*xs-ya*ya) -2*i*xs*ya) + return 2.0*cexp(C((ya-xs)*(xs+ya), 2*xs*y)) - ret; + } + else + return ret; + } +#endif // !USE_CONTINUED_FRACTION + + /* Note: The test that seems to be suggested in the paper is x < + sqrt(-log(DBL_MIN)), about 26.6, since otherwise exp(-x^2) + underflows to zero and sum1,sum2,sum4 are zero. However, long + before this occurs, the sum1,sum2,sum4 contributions are + negligible in double precision; I find that this happens for x > + about 6, for all y. On the other hand, I find that the case + where we compute all of the sums is faster (at least with the + precomputed expa2n2 table) until about x=10. Furthermore, if we + try to compute all of the sums for x > 20, I find that we + sometimes run into numerical problems because underflow/overflow + problems start to appear in the various coefficients of the sums, + below. Therefore, we use x < 10 here. */ + else if (x < 10) { + double prod2ax = 1, prodm2ax = 1; + double expx2; + + if (isnan(y)) + return C(y,y); + + /* Somewhat ugly copy-and-paste duplication here, but I see significant + speedups from using the special-case code with the precomputed + exponential, and the x < 5e-4 special case is needed for accuracy. */ + + if (relerr == DBL_EPSILON) { // use precomputed exp(-a2*(n*n)) table + if (x < 5e-4) { // compute sum4 and sum5 together as sum5-sum4 + const double x2 = x*x; + expx2 = 1 - x2 * (1 - 0.5*x2); // exp(-x*x) via Taylor + // compute exp(2*a*x) and exp(-2*a*x) via Taylor, to double precision + const double ax2 = 1.036642960860171859744*x; // 2*a*x + const double exp2ax = + 1 + ax2 * (1 + ax2 * (0.5 + 0.166666666666666666667*ax2)); + const double expm2ax = + 1 - ax2 * (1 - ax2 * (0.5 - 0.166666666666666666667*ax2)); + for (int n = 1; 1; ++n) { + const double coef = expa2n2[n-1] * expx2 / (a2*(n*n) + y*y); + prod2ax *= exp2ax; + prodm2ax *= expm2ax; + sum1 += coef; + sum2 += coef * prodm2ax; + sum3 += coef * prod2ax; + + // really = sum5 - sum4 + sum5 += coef * (2*a) * n * sinh_taylor((2*a)*n*x); + + // test convergence via sum3 + if (coef * prod2ax < relerr * sum3) break; + } + } + else { // x > 5e-4, compute sum4 and sum5 separately + expx2 = exp(-x*x); + const double exp2ax = exp((2*a)*x), expm2ax = 1 / exp2ax; + for (int n = 1; 1; ++n) { + const double coef = expa2n2[n-1] * expx2 / (a2*(n*n) + y*y); + prod2ax *= exp2ax; + prodm2ax *= expm2ax; + sum1 += coef; + sum2 += coef * prodm2ax; + sum4 += (coef * prodm2ax) * (a*n); + sum3 += coef * prod2ax; + sum5 += (coef * prod2ax) * (a*n); + // test convergence via sum5, since this sum has the slowest decay + if ((coef * prod2ax) * (a*n) < relerr * sum5) break; + } + } + } + else { // relerr != DBL_EPSILON, compute exp(-a2*(n*n)) on the fly + const double exp2ax = exp((2*a)*x), expm2ax = 1 / exp2ax; + if (x < 5e-4) { // compute sum4 and sum5 together as sum5-sum4 + const double x2 = x*x; + expx2 = 1 - x2 * (1 - 0.5*x2); // exp(-x*x) via Taylor + for (int n = 1; 1; ++n) { + const double coef = exp(-a2*(n*n)) * expx2 / (a2*(n*n) + y*y); + prod2ax *= exp2ax; + prodm2ax *= expm2ax; + sum1 += coef; + sum2 += coef * prodm2ax; + sum3 += coef * prod2ax; + + // really = sum5 - sum4 + sum5 += coef * (2*a) * n * sinh_taylor((2*a)*n*x); + + // test convergence via sum3 + if (coef * prod2ax < relerr * sum3) break; + } + } + else { // x > 5e-4, compute sum4 and sum5 separately + expx2 = exp(-x*x); + for (int n = 1; 1; ++n) { + const double coef = exp(-a2*(n*n)) * expx2 / (a2*(n*n) + y*y); + prod2ax *= exp2ax; + prodm2ax *= expm2ax; + sum1 += coef; + sum2 += coef * prodm2ax; + sum4 += (coef * prodm2ax) * (a*n); + sum3 += coef * prod2ax; + sum5 += (coef * prod2ax) * (a*n); + // test convergence via sum5, since this sum has the slowest decay + if ((coef * prod2ax) * (a*n) < relerr * sum5) break; + } + } + } + const double expx2erfcxy = // avoid spurious overflow for large negative y + y > -6 // for y < -6, erfcx(y) = 2*exp(y*y) to double precision + ? expx2*FADDEEVA_RE(erfcx)(y) : 2*exp(y*y-x*x); + if (y > 5) { // imaginary terms cancel + const double sinxy = sin(x*y); + ret = (expx2erfcxy - c*y*sum1) * cos(2*x*y) + + (c*x*expx2) * sinxy * sinc(x*y, sinxy); + } + else { + double xs = creal(z); + const double sinxy = sin(xs*y); + const double sin2xy = sin(2*xs*y), cos2xy = cos(2*xs*y); + const double coef1 = expx2erfcxy - c*y*sum1; + const double coef2 = c*xs*expx2; + ret = C(coef1 * cos2xy + coef2 * sinxy * sinc(xs*y, sinxy), + coef2 * sinc(2*xs*y, sin2xy) - coef1 * sin2xy); + } + } + else { // x large: only sum3 & sum5 contribute (see above note) + if (isnan(x)) + return C(x,x); + if (isnan(y)) + return C(y,y); + +#if USE_CONTINUED_FRACTION + ret = exp(-x*x); // |y| < 1e-10, so we only need exp(-x*x) term +#else + if (y < 0) { + /* erfcx(y) ~ 2*exp(y*y) + (< 1) if y < 0, so + erfcx(y)*exp(-x*x) ~ 2*exp(y*y-x*x) term may not be negligible + if y*y - x*x > -36 or so. So, compute this term just in case. + We also need the -exp(-x*x) term to compute Re[w] accurately + in the case where y is very small. */ + ret = cpolar(2*exp(y*y-x*x) - exp(-x*x), -2*creal(z)*y); + } + else + ret = exp(-x*x); // not negligible in real part if y very small +#endif + // (round instead of ceil as in original paper; note that x/a > 1 here) + double n0 = floor(x/a + 0.5); // sum in both directions, starting at n0 + double dx = a*n0 - x; + sum3 = exp(-dx*dx) / (a2*(n0*n0) + y*y); + sum5 = a*n0 * sum3; + double exp1 = exp(4*a*dx), exp1dn = 1; + int dn; + for (dn = 1; n0 - dn > 0; ++dn) { // loop over n0-dn and n0+dn terms + double np = n0 + dn, nm = n0 - dn; + double tp = exp(-sqr(a*dn+dx)); + double tm = tp * (exp1dn *= exp1); // trick to get tm from tp + tp /= (a2*(np*np) + y*y); + tm /= (a2*(nm*nm) + y*y); + sum3 += tp + tm; + sum5 += a * (np * tp + nm * tm); + if (a * (np * tp + nm * tm) < relerr * sum5) goto finish; + } + while (1) { // loop over n0+dn terms only (since n0-dn <= 0) + double np = n0 + dn++; + double tp = exp(-sqr(a*dn+dx)) / (a2*(np*np) + y*y); + sum3 += tp; + sum5 += a * np * tp; + if (a * np * tp < relerr * sum5) goto finish; + } + } + finish: + return ret + C((0.5*c)*y*(sum2+sum3), + (0.5*c)*copysign(sum5-sum4, creal(z))); +} + +///////////////////////////////////////////////////////////////////////// + +/* erfcx(x) = exp(x^2) erfc(x) function, for real x, written by + Steven G. Johnson, October 2012. + + This function combines a few different ideas. + + First, for x > 50, it uses a continued-fraction expansion (same as + for the Faddeeva function, but with algebraic simplifications for z=i*x). + + Second, for 0 <= x <= 50, it uses Chebyshev polynomial approximations, + but with two twists: + + a) It maps x to y = 4 / (4+x) in [0,1]. This simple transformation, + inspired by a similar transformation in the octave-forge/specfun + erfcx by Soren Hauberg, results in much faster Chebyshev convergence + than other simple transformations I have examined. + + b) Instead of using a single Chebyshev polynomial for the entire + [0,1] y interval, we break the interval up into 100 equal + subintervals, with a switch/lookup table, and use much lower + degree Chebyshev polynomials in each subinterval. This greatly + improves performance in my tests. + + For x < 0, we use the relationship erfcx(-x) = 2 exp(x^2) - erfc(x), + with the usual checks for overflow etcetera. + + Performance-wise, it seems to be substantially faster than either + the SLATEC DERFC function [or an erfcx function derived therefrom] + or Cody's CALERF function (from netlib.org/specfun), while + retaining near machine precision in accuracy. */ + +/* Given y100=100*y, where y = 4/(4+x) for x >= 0, compute erfc(x). + + Uses a look-up table of 100 different Chebyshev polynomials + for y intervals [0,0.01], [0.01,0.02], ...., [0.99,1], generated + with the help of Maple and a little shell script. This allows + the Chebyshev polynomials to be of significantly lower degree (about 1/4) + compared to fitting the whole [0,1] interval with a single polynomial. */ +static double erfcx_y100(double y100) +{ + switch ((int) y100) { +case 0: { +double t = 2*y100 - 1; +return 0.70878032454106438663e-3 + (0.71234091047026302958e-3 + (0.35779077297597742384e-5 + (0.17403143962587937815e-7 + (0.81710660047307788845e-10 + (0.36885022360434957634e-12 + 0.15917038551111111111e-14 * t) * t) * t) * t) * t) * t; +} +case 1: { +double t = 2*y100 - 3; +return 0.21479143208285144230e-2 + (0.72686402367379996033e-3 + (0.36843175430938995552e-5 + (0.18071841272149201685e-7 + (0.85496449296040325555e-10 + (0.38852037518534291510e-12 + 0.16868473576888888889e-14 * t) * t) * t) * t) * t) * t; +} +case 2: { +double t = 2*y100 - 5; +return 0.36165255935630175090e-2 + (0.74182092323555510862e-3 + (0.37948319957528242260e-5 + (0.18771627021793087350e-7 + (0.89484715122415089123e-10 + (0.40935858517772440862e-12 + 0.17872061464888888889e-14 * t) * t) * t) * t) * t) * t; +} +case 3: { +double t = 2*y100 - 7; +return 0.51154983860031979264e-2 + (0.75722840734791660540e-3 + (0.39096425726735703941e-5 + (0.19504168704300468210e-7 + (0.93687503063178993915e-10 + (0.43143925959079664747e-12 + 0.18939926435555555556e-14 * t) * t) * t) * t) * t) * t; +} +case 4: { +double t = 2*y100 - 9; +return 0.66457513172673049824e-2 + (0.77310406054447454920e-3 + (0.40289510589399439385e-5 + (0.20271233238288381092e-7 + (0.98117631321709100264e-10 + (0.45484207406017752971e-12 + 0.20076352213333333333e-14 * t) * t) * t) * t) * t) * t; +} +case 5: { +double t = 2*y100 - 11; +return 0.82082389970241207883e-2 + (0.78946629611881710721e-3 + (0.41529701552622656574e-5 + (0.21074693344544655714e-7 + (0.10278874108587317989e-9 + (0.47965201390613339638e-12 + 0.21285907413333333333e-14 * t) * t) * t) * t) * t) * t; +} +case 6: { +double t = 2*y100 - 13; +return 0.98039537275352193165e-2 + (0.80633440108342840956e-3 + (0.42819241329736982942e-5 + (0.21916534346907168612e-7 + (0.10771535136565470914e-9 + (0.50595972623692822410e-12 + 0.22573462684444444444e-14 * t) * t) * t) * t) * t) * t; +} +case 7: { +double t = 2*y100 - 15; +return 0.11433927298290302370e-1 + (0.82372858383196561209e-3 + (0.44160495311765438816e-5 + (0.22798861426211986056e-7 + (0.11291291745879239736e-9 + (0.53386189365816880454e-12 + 0.23944209546666666667e-14 * t) * t) * t) * t) * t) * t; +} +case 8: { +double t = 2*y100 - 17; +return 0.13099232878814653979e-1 + (0.84167002467906968214e-3 + (0.45555958988457506002e-5 + (0.23723907357214175198e-7 + (0.11839789326602695603e-9 + (0.56346163067550237877e-12 + 0.25403679644444444444e-14 * t) * t) * t) * t) * t) * t; +} +case 9: { +double t = 2*y100 - 19; +return 0.14800987015587535621e-1 + (0.86018092946345943214e-3 + (0.47008265848816866105e-5 + (0.24694040760197315333e-7 + (0.12418779768752299093e-9 + (0.59486890370320261949e-12 + 0.26957764568888888889e-14 * t) * t) * t) * t) * t) * t; +} +case 10: { +double t = 2*y100 - 21; +return 0.16540351739394069380e-1 + (0.87928458641241463952e-3 + (0.48520195793001753903e-5 + (0.25711774900881709176e-7 + (0.13030128534230822419e-9 + (0.62820097586874779402e-12 + 0.28612737351111111111e-14 * t) * t) * t) * t) * t) * t; +} +case 11: { +double t = 2*y100 - 23; +return 0.18318536789842392647e-1 + (0.89900542647891721692e-3 + (0.50094684089553365810e-5 + (0.26779777074218070482e-7 + (0.13675822186304615566e-9 + (0.66358287745352705725e-12 + 0.30375273884444444444e-14 * t) * t) * t) * t) * t) * t; +} +case 12: { +double t = 2*y100 - 25; +return 0.20136801964214276775e-1 + (0.91936908737673676012e-3 + (0.51734830914104276820e-5 + (0.27900878609710432673e-7 + (0.14357976402809042257e-9 + (0.70114790311043728387e-12 + 0.32252476000000000000e-14 * t) * t) * t) * t) * t) * t; +} +case 13: { +double t = 2*y100 - 27; +return 0.21996459598282740954e-1 + (0.94040248155366777784e-3 + (0.53443911508041164739e-5 + (0.29078085538049374673e-7 + (0.15078844500329731137e-9 + (0.74103813647499204269e-12 + 0.34251892320000000000e-14 * t) * t) * t) * t) * t) * t; +} +case 14: { +double t = 2*y100 - 29; +return 0.23898877187226319502e-1 + (0.96213386835900177540e-3 + (0.55225386998049012752e-5 + (0.30314589961047687059e-7 + (0.15840826497296335264e-9 + (0.78340500472414454395e-12 + 0.36381553564444444445e-14 * t) * t) * t) * t) * t) * t; +} +case 15: { +double t = 2*y100 - 31; +return 0.25845480155298518485e-1 + (0.98459293067820123389e-3 + (0.57082915920051843672e-5 + (0.31613782169164830118e-7 + (0.16646478745529630813e-9 + (0.82840985928785407942e-12 + 0.38649975768888888890e-14 * t) * t) * t) * t) * t) * t; +} +case 16: { +double t = 2*y100 - 33; +return 0.27837754783474696598e-1 + (0.10078108563256892757e-2 + (0.59020366493792212221e-5 + (0.32979263553246520417e-7 + (0.17498524159268458073e-9 + (0.87622459124842525110e-12 + 0.41066206488888888890e-14 * t) * t) * t) * t) * t) * t; +} +case 17: { +double t = 2*y100 - 35; +return 0.29877251304899307550e-1 + (0.10318204245057349310e-2 + (0.61041829697162055093e-5 + (0.34414860359542720579e-7 + (0.18399863072934089607e-9 + (0.92703227366365046533e-12 + 0.43639844053333333334e-14 * t) * t) * t) * t) * t) * t; +} +case 18: { +double t = 2*y100 - 37; +return 0.31965587178596443475e-1 + (0.10566560976716574401e-2 + (0.63151633192414586770e-5 + (0.35924638339521924242e-7 + (0.19353584758781174038e-9 + (0.98102783859889264382e-12 + 0.46381060817777777779e-14 * t) * t) * t) * t) * t) * t; +} +case 19: { +double t = 2*y100 - 39; +return 0.34104450552588334840e-1 + (0.10823541191350532574e-2 + (0.65354356159553934436e-5 + (0.37512918348533521149e-7 + (0.20362979635817883229e-9 + (0.10384187833037282363e-11 + 0.49300625262222222221e-14 * t) * t) * t) * t) * t) * t; +} +case 20: { +double t = 2*y100 - 41; +return 0.36295603928292425716e-1 + (0.11089526167995268200e-2 + (0.67654845095518363577e-5 + (0.39184292949913591646e-7 + (0.21431552202133775150e-9 + (0.10994259106646731797e-11 + 0.52409949102222222221e-14 * t) * t) * t) * t) * t) * t; +} +case 21: { +double t = 2*y100 - 43; +return 0.38540888038840509795e-1 + (0.11364917134175420009e-2 + (0.70058230641246312003e-5 + (0.40943644083718586939e-7 + (0.22563034723692881631e-9 + (0.11642841011361992885e-11 + 0.55721092871111111110e-14 * t) * t) * t) * t) * t) * t; +} +case 22: { +double t = 2*y100 - 45; +return 0.40842225954785960651e-1 + (0.11650136437945673891e-2 + (0.72569945502343006619e-5 + (0.42796161861855042273e-7 + (0.23761401711005024162e-9 + (0.12332431172381557035e-11 + 0.59246802364444444445e-14 * t) * t) * t) * t) * t) * t; +} +case 23: { +double t = 2*y100 - 47; +return 0.43201627431540222422e-1 + (0.11945628793917272199e-2 + (0.75195743532849206263e-5 + (0.44747364553960993492e-7 + (0.25030885216472953674e-9 + (0.13065684400300476484e-11 + 0.63000532853333333334e-14 * t) * t) * t) * t) * t) * t; +} +case 24: { +double t = 2*y100 - 49; +return 0.45621193513810471438e-1 + (0.12251862608067529503e-2 + (0.77941720055551920319e-5 + (0.46803119830954460212e-7 + (0.26375990983978426273e-9 + (0.13845421370977119765e-11 + 0.66996477404444444445e-14 * t) * t) * t) * t) * t) * t; +} +case 25: { +double t = 2*y100 - 51; +return 0.48103121413299865517e-1 + (0.12569331386432195113e-2 + (0.80814333496367673980e-5 + (0.48969667335682018324e-7 + (0.27801515481905748484e-9 + (0.14674637611609884208e-11 + 0.71249589351111111110e-14 * t) * t) * t) * t) * t) * t; +} +case 26: { +double t = 2*y100 - 53; +return 0.50649709676983338501e-1 + (0.12898555233099055810e-2 + (0.83820428414568799654e-5 + (0.51253642652551838659e-7 + (0.29312563849675507232e-9 + (0.15556512782814827846e-11 + 0.75775607822222222221e-14 * t) * t) * t) * t) * t) * t; +} +case 27: { +double t = 2*y100 - 55; +return 0.53263363664388864181e-1 + (0.13240082443256975769e-2 + (0.86967260015007658418e-5 + (0.53662102750396795566e-7 + (0.30914568786634796807e-9 + (0.16494420240828493176e-11 + 0.80591079644444444445e-14 * t) * t) * t) * t) * t) * t; +} +case 28: { +double t = 2*y100 - 57; +return 0.55946601353500013794e-1 + (0.13594491197408190706e-2 + (0.90262520233016380987e-5 + (0.56202552975056695376e-7 + (0.32613310410503135996e-9 + (0.17491936862246367398e-11 + 0.85713381688888888890e-14 * t) * t) * t) * t) * t) * t; +} +case 29: { +double t = 2*y100 - 59; +return 0.58702059496154081813e-1 + (0.13962391363223647892e-2 + (0.93714365487312784270e-5 + (0.58882975670265286526e-7 + (0.34414937110591753387e-9 + (0.18552853109751857859e-11 + 0.91160736711111111110e-14 * t) * t) * t) * t) * t) * t; +} +case 30: { +double t = 2*y100 - 61; +return 0.61532500145144778048e-1 + (0.14344426411912015247e-2 + (0.97331446201016809696e-5 + (0.61711860507347175097e-7 + (0.36325987418295300221e-9 + (0.19681183310134518232e-11 + 0.96952238400000000000e-14 * t) * t) * t) * t) * t) * t; +} +case 31: { +double t = 2*y100 - 63; +return 0.64440817576653297993e-1 + (0.14741275456383131151e-2 + (0.10112293819576437838e-4 + (0.64698236605933246196e-7 + (0.38353412915303665586e-9 + (0.20881176114385120186e-11 + 0.10310784480000000000e-13 * t) * t) * t) * t) * t) * t; +} +case 32: { +double t = 2*y100 - 65; +return 0.67430045633130393282e-1 + (0.15153655418916540370e-2 + (0.10509857606888328667e-4 + (0.67851706529363332855e-7 + (0.40504602194811140006e-9 + (0.22157325110542534469e-11 + 0.10964842115555555556e-13 * t) * t) * t) * t) * t) * t; +} +case 33: { +double t = 2*y100 - 67; +return 0.70503365513338850709e-1 + (0.15582323336495709827e-2 + (0.10926868866865231089e-4 + (0.71182482239613507542e-7 + (0.42787405890153386710e-9 + (0.23514379522274416437e-11 + 0.11659571751111111111e-13 * t) * t) * t) * t) * t) * t; +} +case 34: { +double t = 2*y100 - 69; +return 0.73664114037944596353e-1 + (0.16028078812438820413e-2 + (0.11364423678778207991e-4 + (0.74701423097423182009e-7 + (0.45210162777476488324e-9 + (0.24957355004088569134e-11 + 0.12397238257777777778e-13 * t) * t) * t) * t) * t) * t; +} +case 35: { +double t = 2*y100 - 71; +return 0.76915792420819562379e-1 + (0.16491766623447889354e-2 + (0.11823685320041302169e-4 + (0.78420075993781544386e-7 + (0.47781726956916478925e-9 + (0.26491544403815724749e-11 + 0.13180196462222222222e-13 * t) * t) * t) * t) * t) * t; +} +case 36: { +double t = 2*y100 - 73; +return 0.80262075578094612819e-1 + (0.16974279491709504117e-2 + (0.12305888517309891674e-4 + (0.82350717698979042290e-7 + (0.50511496109857113929e-9 + (0.28122528497626897696e-11 + 0.14010889635555555556e-13 * t) * t) * t) * t) * t) * t; +} +case 37: { +double t = 2*y100 - 75; +return 0.83706822008980357446e-1 + (0.17476561032212656962e-2 + (0.12812343958540763368e-4 + (0.86506399515036435592e-7 + (0.53409440823869467453e-9 + (0.29856186620887555043e-11 + 0.14891851591111111111e-13 * t) * t) * t) * t) * t) * t; +} +case 38: { +double t = 2*y100 - 77; +return 0.87254084284461718231e-1 + (0.17999608886001962327e-2 + (0.13344443080089492218e-4 + (0.90900994316429008631e-7 + (0.56486134972616465316e-9 + (0.31698707080033956934e-11 + 0.15825697795555555556e-13 * t) * t) * t) * t) * t) * t; +} +case 39: { +double t = 2*y100 - 79; +return 0.90908120182172748487e-1 + (0.18544478050657699758e-2 + (0.13903663143426120077e-4 + (0.95549246062549906177e-7 + (0.59752787125242054315e-9 + (0.33656597366099099413e-11 + 0.16815130613333333333e-13 * t) * t) * t) * t) * t) * t; +} +case 40: { +double t = 2*y100 - 81; +return 0.94673404508075481121e-1 + (0.19112284419887303347e-2 + (0.14491572616545004930e-4 + (0.10046682186333613697e-6 + (0.63221272959791000515e-9 + (0.35736693975589130818e-11 + 0.17862931591111111111e-13 * t) * t) * t) * t) * t) * t; +} +case 41: { +double t = 2*y100 - 83; +return 0.98554641648004456555e-1 + (0.19704208544725622126e-2 + (0.15109836875625443935e-4 + (0.10567036667675984067e-6 + (0.66904168640019354565e-9 + (0.37946171850824333014e-11 + 0.18971959040000000000e-13 * t) * t) * t) * t) * t) * t; +} +case 42: { +double t = 2*y100 - 85; +return 0.10255677889470089531e0 + (0.20321499629472857418e-2 + (0.15760224242962179564e-4 + (0.11117756071353507391e-6 + (0.70814785110097658502e-9 + (0.40292553276632563925e-11 + 0.20145143075555555556e-13 * t) * t) * t) * t) * t) * t; +} +case 43: { +double t = 2*y100 - 87; +return 0.10668502059865093318e0 + (0.20965479776148731610e-2 + (0.16444612377624983565e-4 + (0.11700717962026152749e-6 + (0.74967203250938418991e-9 + (0.42783716186085922176e-11 + 0.21385479360000000000e-13 * t) * t) * t) * t) * t) * t; +} +case 44: { +double t = 2*y100 - 89; +return 0.11094484319386444474e0 + (0.21637548491908170841e-2 + (0.17164995035719657111e-4 + (0.12317915750735938089e-6 + (0.79376309831499633734e-9 + (0.45427901763106353914e-11 + 0.22696025653333333333e-13 * t) * t) * t) * t) * t) * t; +} +case 45: { +double t = 2*y100 - 91; +return 0.11534201115268804714e0 + (0.22339187474546420375e-2 + (0.17923489217504226813e-4 + (0.12971465288245997681e-6 + (0.84057834180389073587e-9 + (0.48233721206418027227e-11 + 0.24079890062222222222e-13 * t) * t) * t) * t) * t) * t; +} +case 46: { +double t = 2*y100 - 93; +return 0.11988259392684094740e0 + (0.23071965691918689601e-2 + (0.18722342718958935446e-4 + (0.13663611754337957520e-6 + (0.89028385488493287005e-9 + (0.51210161569225846701e-11 + 0.25540227111111111111e-13 * t) * t) * t) * t) * t) * t; +} +case 47: { +double t = 2*y100 - 95; +return 0.12457298393509812907e0 + (0.23837544771809575380e-2 + (0.19563942105711612475e-4 + (0.14396736847739470782e-6 + (0.94305490646459247016e-9 + (0.54366590583134218096e-11 + 0.27080225920000000000e-13 * t) * t) * t) * t) * t) * t; +} +case 48: { +double t = 2*y100 - 97; +return 0.12941991566142438816e0 + (0.24637684719508859484e-2 + (0.20450821127475879816e-4 + (0.15173366280523906622e-6 + (0.99907632506389027739e-9 + (0.57712760311351625221e-11 + 0.28703099555555555556e-13 * t) * t) * t) * t) * t) * t; +} +case 49: { +double t = 2*y100 - 99; +return 0.13443048593088696613e0 + (0.25474249981080823877e-2 + (0.21385669591362915223e-4 + (0.15996177579900443030e-6 + (0.10585428844575134013e-8 + (0.61258809536787882989e-11 + 0.30412080142222222222e-13 * t) * t) * t) * t) * t) * t; +} +case 50: { +double t = 2*y100 - 101; +return 0.13961217543434561353e0 + (0.26349215871051761416e-2 + (0.22371342712572567744e-4 + (0.16868008199296822247e-6 + (0.11216596910444996246e-8 + (0.65015264753090890662e-11 + 0.32210394506666666666e-13 * t) * t) * t) * t) * t) * t; +} +case 51: { +double t = 2*y100 - 103; +return 0.14497287157673800690e0 + (0.27264675383982439814e-2 + (0.23410870961050950197e-4 + (0.17791863939526376477e-6 + (0.11886425714330958106e-8 + (0.68993039665054288034e-11 + 0.34101266222222222221e-13 * t) * t) * t) * t) * t) * t; +} +case 52: { +double t = 2*y100 - 105; +return 0.15052089272774618151e0 + (0.28222846410136238008e-2 + (0.24507470422713397006e-4 + (0.18770927679626136909e-6 + (0.12597184587583370712e-8 + (0.73203433049229821618e-11 + 0.36087889048888888890e-13 * t) * t) * t) * t) * t) * t; +} +case 53: { +double t = 2*y100 - 107; +return 0.15626501395774612325e0 + (0.29226079376196624949e-2 + (0.25664553693768450545e-4 + (0.19808568415654461964e-6 + (0.13351257759815557897e-8 + (0.77658124891046760667e-11 + 0.38173420035555555555e-13 * t) * t) * t) * t) * t) * t; +} +case 54: { +double t = 2*y100 - 109; +return 0.16221449434620737567e0 + (0.30276865332726475672e-2 + (0.26885741326534564336e-4 + (0.20908350604346384143e-6 + (0.14151148144240728728e-8 + (0.82369170665974313027e-11 + 0.40360957457777777779e-13 * t) * t) * t) * t) * t) * t; +} +case 55: { +double t = 2*y100 - 111; +return 0.16837910595412130659e0 + (0.31377844510793082301e-2 + (0.28174873844911175026e-4 + (0.22074043807045782387e-6 + (0.14999481055996090039e-8 + (0.87348993661930809254e-11 + 0.42653528977777777779e-13 * t) * t) * t) * t) * t) * t; +} +case 56: { +double t = 2*y100 - 113; +return 0.17476916455659369953e0 + (0.32531815370903068316e-2 + (0.29536024347344364074e-4 + (0.23309632627767074202e-6 + (0.15899007843582444846e-8 + (0.92610375235427359475e-11 + 0.45054073102222222221e-13 * t) * t) * t) * t) * t) * t; +} +case 57: { +double t = 2*y100 - 115; +return 0.18139556223643701364e0 + (0.33741744168096996041e-2 + (0.30973511714709500836e-4 + (0.24619326937592290996e-6 + (0.16852609412267750744e-8 + (0.98166442942854895573e-11 + 0.47565418097777777779e-13 * t) * t) * t) * t) * t) * t; +} +case 58: { +double t = 2*y100 - 117; +return 0.18826980194443664549e0 + (0.35010775057740317997e-2 + (0.32491914440014267480e-4 + (0.26007572375886319028e-6 + (0.17863299617388376116e-8 + (0.10403065638343878679e-10 + 0.50190265831111111110e-13 * t) * t) * t) * t) * t) * t; +} +case 59: { +double t = 2*y100 - 119; +return 0.19540403413693967350e0 + (0.36342240767211326315e-2 + (0.34096085096200907289e-4 + (0.27479061117017637474e-6 + (0.18934228504790032826e-8 + (0.11021679075323598664e-10 + 0.52931171733333333334e-13 * t) * t) * t) * t) * t) * t; +} +case 60: { +double t = 2*y100 - 121; +return 0.20281109560651886959e0 + (0.37739673859323597060e-2 + (0.35791165457592409054e-4 + (0.29038742889416172404e-6 + (0.20068685374849001770e-8 + (0.11673891799578381999e-10 + 0.55790523093333333334e-13 * t) * t) * t) * t) * t) * t; +} +case 61: { +double t = 2*y100 - 123; +return 0.21050455062669334978e0 + (0.39206818613925652425e-2 + (0.37582602289680101704e-4 + (0.30691836231886877385e-6 + (0.21270101645763677824e-8 + (0.12361138551062899455e-10 + 0.58770520160000000000e-13 * t) * t) * t) * t) * t) * t; +} +case 62: { +double t = 2*y100 - 125; +return 0.21849873453703332479e0 + (0.40747643554689586041e-2 + (0.39476163820986711501e-4 + (0.32443839970139918836e-6 + (0.22542053491518680200e-8 + (0.13084879235290858490e-10 + 0.61873153262222222221e-13 * t) * t) * t) * t) * t) * t; +} +case 63: { +double t = 2*y100 - 127; +return 0.22680879990043229327e0 + (0.42366354648628516935e-2 + (0.41477956909656896779e-4 + (0.34300544894502810002e-6 + (0.23888264229264067658e-8 + (0.13846596292818514601e-10 + 0.65100183751111111110e-13 * t) * t) * t) * t) * t) * t; +} +case 64: { +double t = 2*y100 - 129; +return 0.23545076536988703937e0 + (0.44067409206365170888e-2 + (0.43594444916224700881e-4 + (0.36268045617760415178e-6 + (0.25312606430853202748e-8 + (0.14647791812837903061e-10 + 0.68453122631111111110e-13 * t) * t) * t) * t) * t) * t; +} +case 65: { +double t = 2*y100 - 131; +return 0.24444156740777432838e0 + (0.45855530511605787178e-2 + (0.45832466292683085475e-4 + (0.38352752590033030472e-6 + (0.26819103733055603460e-8 + (0.15489984390884756993e-10 + 0.71933206364444444445e-13 * t) * t) * t) * t) * t) * t; +} +case 66: { +double t = 2*y100 - 133; +return 0.25379911500634264643e0 + (0.47735723208650032167e-2 + (0.48199253896534185372e-4 + (0.40561404245564732314e-6 + (0.28411932320871165585e-8 + (0.16374705736458320149e-10 + 0.75541379822222222221e-13 * t) * t) * t) * t) * t) * t; +} +case 67: { +double t = 2*y100 - 135; +return 0.26354234756393613032e0 + (0.49713289477083781266e-2 + (0.50702455036930367504e-4 + (0.42901079254268185722e-6 + (0.30095422058900481753e-8 + (0.17303497025347342498e-10 + 0.79278273368888888890e-13 * t) * t) * t) * t) * t) * t; +} +case 68: { +double t = 2*y100 - 137; +return 0.27369129607732343398e0 + (0.51793846023052643767e-2 + (0.53350152258326602629e-4 + (0.45379208848865015485e-6 + (0.31874057245814381257e-8 + (0.18277905010245111046e-10 + 0.83144182364444444445e-13 * t) * t) * t) * t) * t) * t; +} +case 69: { +double t = 2*y100 - 139; +return 0.28426714781640316172e0 + (0.53983341916695141966e-2 + (0.56150884865255810638e-4 + (0.48003589196494734238e-6 + (0.33752476967570796349e-8 + (0.19299477888083469086e-10 + 0.87139049137777777779e-13 * t) * t) * t) * t) * t) * t; +} +case 70: { +double t = 2*y100 - 141; +return 0.29529231465348519920e0 + (0.56288077305420795663e-2 + (0.59113671189913307427e-4 + (0.50782393781744840482e-6 + (0.35735475025851713168e-8 + (0.20369760937017070382e-10 + 0.91262442613333333334e-13 * t) * t) * t) * t) * t) * t; +} +case 71: { +double t = 2*y100 - 143; +return 0.30679050522528838613e0 + (0.58714723032745403331e-2 + (0.62248031602197686791e-4 + (0.53724185766200945789e-6 + (0.37827999418960232678e-8 + (0.21490291930444538307e-10 + 0.95513539182222222221e-13 * t) * t) * t) * t) * t) * t; +} +case 72: { +double t = 2*y100 - 145; +return 0.31878680111173319425e0 + (0.61270341192339103514e-2 + (0.65564012259707640976e-4 + (0.56837930287837738996e-6 + (0.40035151353392378882e-8 + (0.22662596341239294792e-10 + 0.99891109760000000000e-13 * t) * t) * t) * t) * t) * t; +} +case 73: { +double t = 2*y100 - 147; +return 0.33130773722152622027e0 + (0.63962406646798080903e-2 + (0.69072209592942396666e-4 + (0.60133006661885941812e-6 + (0.42362183765883466691e-8 + (0.23888182347073698382e-10 + 0.10439349811555555556e-12 * t) * t) * t) * t) * t) * t; +} +case 74: { +double t = 2*y100 - 149; +return 0.34438138658041336523e0 + (0.66798829540414007258e-2 + (0.72783795518603561144e-4 + (0.63619220443228800680e-6 + (0.44814499336514453364e-8 + (0.25168535651285475274e-10 + 0.10901861383111111111e-12 * t) * t) * t) * t) * t) * t; +} +case 75: { +double t = 2*y100 - 151; +return 0.35803744972380175583e0 + (0.69787978834882685031e-2 + (0.76710543371454822497e-4 + (0.67306815308917386747e-6 + (0.47397647975845228205e-8 + (0.26505114141143050509e-10 + 0.11376390933333333333e-12 * t) * t) * t) * t) * t) * t; +} +case 76: { +double t = 2*y100 - 153; +return 0.37230734890119724188e0 + (0.72938706896461381003e-2 + (0.80864854542670714092e-4 + (0.71206484718062688779e-6 + (0.50117323769745883805e-8 + (0.27899342394100074165e-10 + 0.11862637614222222222e-12 * t) * t) * t) * t) * t) * t; +} +case 77: { +double t = 2*y100 - 155; +return 0.38722432730555448223e0 + (0.76260375162549802745e-2 + (0.85259785810004603848e-4 + (0.75329383305171327677e-6 + (0.52979361368388119355e-8 + (0.29352606054164086709e-10 + 0.12360253370666666667e-12 * t) * t) * t) * t) * t) * t; +} +case 78: { +double t = 2*y100 - 157; +return 0.40282355354616940667e0 + (0.79762880915029728079e-2 + (0.89909077342438246452e-4 + (0.79687137961956194579e-6 + (0.55989731807360403195e-8 + (0.30866246101464869050e-10 + 0.12868841946666666667e-12 * t) * t) * t) * t) * t) * t; +} +case 79: { +double t = 2*y100 - 159; +return 0.41914223158913787649e0 + (0.83456685186950463538e-2 + (0.94827181359250161335e-4 + (0.84291858561783141014e-6 + (0.59154537751083485684e-8 + (0.32441553034347469291e-10 + 0.13387957943111111111e-12 * t) * t) * t) * t) * t) * t; +} +case 80: { +double t = 2*y100 - 161; +return 0.43621971639463786896e0 + (0.87352841828289495773e-2 + (0.10002929142066799966e-3 + (0.89156148280219880024e-6 + (0.62480008150788597147e-8 + (0.34079760983458878910e-10 + 0.13917107176888888889e-12 * t) * t) * t) * t) * t) * t; +} +case 81: { +double t = 2*y100 - 163; +return 0.45409763548534330981e0 + (0.91463027755548240654e-2 + (0.10553137232446167258e-3 + (0.94293113464638623798e-6 + (0.65972492312219959885e-8 + (0.35782041795476563662e-10 + 0.14455745872000000000e-12 * t) * t) * t) * t) * t) * t; +} +case 82: { +double t = 2*y100 - 165; +return 0.47282001668512331468e0 + (0.95799574408860463394e-2 + (0.11135019058000067469e-3 + (0.99716373005509038080e-6 + (0.69638453369956970347e-8 + (0.37549499088161345850e-10 + 0.15003280712888888889e-12 * t) * t) * t) * t) * t) * t; +} +case 83: { +double t = 2*y100 - 167; +return 0.49243342227179841649e0 + (0.10037550043909497071e-1 + (0.11750334542845234952e-3 + (0.10544006716188967172e-5 + (0.73484461168242224872e-8 + (0.39383162326435752965e-10 + 0.15559069118222222222e-12 * t) * t) * t) * t) * t) * t; +} +case 84: { +double t = 2*y100 - 169; +return 0.51298708979209258326e0 + (0.10520454564612427224e-1 + (0.12400930037494996655e-3 + (0.11147886579371265246e-5 + (0.77517184550568711454e-8 + (0.41283980931872622611e-10 + 0.16122419680000000000e-12 * t) * t) * t) * t) * t) * t; +} +case 85: { +double t = 2*y100 - 171; +return 0.53453307979101369843e0 + (0.11030120618800726938e-1 + (0.13088741519572269581e-3 + (0.11784797595374515432e-5 + (0.81743383063044825400e-8 + (0.43252818449517081051e-10 + 0.16692592640000000000e-12 * t) * t) * t) * t) * t) * t; +} +case 86: { +double t = 2*y100 - 173; +return 0.55712643071169299478e0 + (0.11568077107929735233e-1 + (0.13815797838036651289e-3 + (0.12456314879260904558e-5 + (0.86169898078969313597e-8 + (0.45290446811539652525e-10 + 0.17268801084444444444e-12 * t) * t) * t) * t) * t) * t; +} +case 87: { +double t = 2*y100 - 175; +return 0.58082532122519320968e0 + (0.12135935999503877077e-1 + (0.14584223996665838559e-3 + (0.13164068573095710742e-5 + (0.90803643355106020163e-8 + (0.47397540713124619155e-10 + 0.17850211608888888889e-12 * t) * t) * t) * t) * t) * t; +} +case 88: { +double t = 2*y100 - 177; +return 0.60569124025293375554e0 + (0.12735396239525550361e-1 + (0.15396244472258863344e-3 + (0.13909744385382818253e-5 + (0.95651595032306228245e-8 + (0.49574672127669041550e-10 + 0.18435945564444444444e-12 * t) * t) * t) * t) * t) * t; +} +case 89: { +double t = 2*y100 - 179; +return 0.63178916494715716894e0 + (0.13368247798287030927e-1 + (0.16254186562762076141e-3 + (0.14695084048334056083e-5 + (0.10072078109604152350e-7 + (0.51822304995680707483e-10 + 0.19025081422222222222e-12 * t) * t) * t) * t) * t) * t; +} +case 90: { +double t = 2*y100 - 181; +return 0.65918774689725319200e0 + (0.14036375850601992063e-1 + (0.17160483760259706354e-3 + (0.15521885688723188371e-5 + (0.10601827031535280590e-7 + (0.54140790105837520499e-10 + 0.19616655146666666667e-12 * t) * t) * t) * t) * t) * t; +} +case 91: { +double t = 2*y100 - 183; +return 0.68795950683174433822e0 + (0.14741765091365869084e-1 + (0.18117679143520433835e-3 + (0.16392004108230585213e-5 + (0.11155116068018043001e-7 + (0.56530360194925690374e-10 + 0.20209663662222222222e-12 * t) * t) * t) * t) * t) * t; +} +case 92: { +double t = 2*y100 - 185; +return 0.71818103808729967036e0 + (0.15486504187117112279e-1 + (0.19128428784550923217e-3 + (0.17307350969359975848e-5 + (0.11732656736113607751e-7 + (0.58991125287563833603e-10 + 0.20803065333333333333e-12 * t) * t) * t) * t) * t) * t; +} +case 93: { +double t = 2*y100 - 187; +return 0.74993321911726254661e0 + (0.16272790364044783382e-1 + (0.20195505163377912645e-3 + (0.18269894883203346953e-5 + (0.12335161021630225535e-7 + (0.61523068312169087227e-10 + 0.21395783431111111111e-12 * t) * t) * t) * t) * t) * t; +} +case 94: { +double t = 2*y100 - 189; +return 0.78330143531283492729e0 + (0.17102934132652429240e-1 + (0.21321800585063327041e-3 + (0.19281661395543913713e-5 + (0.12963340087354341574e-7 + (0.64126040998066348872e-10 + 0.21986708942222222222e-12 * t) * t) * t) * t) * t) * t; +} +case 95: { +double t = 2*y100 - 191; +return 0.81837581041023811832e0 + (0.17979364149044223802e-1 + (0.22510330592753129006e-3 + (0.20344732868018175389e-5 + (0.13617902941839949718e-7 + (0.66799760083972474642e-10 + 0.22574701262222222222e-12 * t) * t) * t) * t) * t) * t; +} +case 96: { +double t = 2*y100 - 193; +return 0.85525144775685126237e0 + (0.18904632212547561026e-1 + (0.23764237370371255638e-3 + (0.21461248251306387979e-5 + (0.14299555071870523786e-7 + (0.69543803864694171934e-10 + 0.23158593688888888889e-12 * t) * t) * t) * t) * t) * t; +} +case 97: { +double t = 2*y100 - 195; +return 0.89402868170849933734e0 + (0.19881418399127202569e-1 + (0.25086793128395995798e-3 + (0.22633402747585233180e-5 + (0.15008997042116532283e-7 + (0.72357609075043941261e-10 + 0.23737194737777777778e-12 * t) * t) * t) * t) * t) * t; +} +case 98: { +double t = 2*y100 - 197; +return 0.93481333942870796363e0 + (0.20912536329780368893e-1 + (0.26481403465998477969e-3 + (0.23863447359754921676e-5 + (0.15746923065472184451e-7 + (0.75240468141720143653e-10 + 0.24309291271111111111e-12 * t) * t) * t) * t) * t) * t; +} +case 99: { +double t = 2*y100 - 199; +return 0.97771701335885035464e0 + (0.22000938572830479551e-1 + (0.27951610702682383001e-3 + (0.25153688325245314530e-5 + (0.16514019547822821453e-7 + (0.78191526829368231251e-10 + 0.24873652355555555556e-12 * t) * t) * t) * t) * t) * t; +} + } + // we only get here if y = 1, i.e. |x| < 4*eps, in which case + // erfcx is within 1e-15 of 1.. + return 1.0; +} + +double FADDEEVA_RE(erfcx)(double x) +{ + if (x >= 0) { + if (x > 50) { // continued-fraction expansion is faster + const double ispi = 0.56418958354775628694807945156; // 1 / sqrt(pi) + if (x > 5e7) // 1-term expansion, important to avoid overflow + return ispi / x; + /* 5-term expansion (rely on compiler for CSE), simplified from: + ispi / (x+0.5/(x+1/(x+1.5/(x+2/x)))) */ + return ispi*((x*x) * (x*x+4.5) + 2) / (x * ((x*x) * (x*x+5) + 3.75)); + } + return erfcx_y100(400/(4+x)); + } + else + return x < -26.7 ? HUGE_VAL : (x < -6.1 ? 2*exp(x*x) + : 2*exp(x*x) - erfcx_y100(400/(4-x))); +} + +///////////////////////////////////////////////////////////////////////// +/* Compute a scaled Dawson integral + FADDEEVA(w_im)(x) = 2*Dawson(x)/sqrt(pi) + equivalent to the imaginary part w(x) for real x. + + Uses methods similar to the erfcx calculation above: continued fractions + for large |x|, a lookup table of Chebyshev polynomials for smaller |x|, + and finally a Taylor expansion for |x|<0.01. + + Steven G. Johnson, October 2012. */ + +/* Given y100=100*y, where y = 1/(1+x) for x >= 0, compute w_im(x). + + Uses a look-up table of 100 different Chebyshev polynomials + for y intervals [0,0.01], [0.01,0.02], ...., [0.99,1], generated + with the help of Maple and a little shell script. This allows + the Chebyshev polynomials to be of significantly lower degree (about 1/30) + compared to fitting the whole [0,1] interval with a single polynomial. */ +static double w_im_y100(double y100, double x) { + switch ((int) y100) { + case 0: { + double t = 2*y100 - 1; + return 0.28351593328822191546e-2 + (0.28494783221378400759e-2 + (0.14427470563276734183e-4 + (0.10939723080231588129e-6 + (0.92474307943275042045e-9 + (0.89128907666450075245e-11 + 0.92974121935111111110e-13 * t) * t) * t) * t) * t) * t; + } + case 1: { + double t = 2*y100 - 3; + return 0.85927161243940350562e-2 + (0.29085312941641339862e-2 + (0.15106783707725582090e-4 + (0.11716709978531327367e-6 + (0.10197387816021040024e-8 + (0.10122678863073360769e-10 + 0.10917479678400000000e-12 * t) * t) * t) * t) * t) * t; + } + case 2: { + double t = 2*y100 - 5; + return 0.14471159831187703054e-1 + (0.29703978970263836210e-2 + (0.15835096760173030976e-4 + (0.12574803383199211596e-6 + (0.11278672159518415848e-8 + (0.11547462300333495797e-10 + 0.12894535335111111111e-12 * t) * t) * t) * t) * t) * t; + } + case 3: { + double t = 2*y100 - 7; + return 0.20476320420324610618e-1 + (0.30352843012898665856e-2 + (0.16617609387003727409e-4 + (0.13525429711163116103e-6 + (0.12515095552507169013e-8 + (0.13235687543603382345e-10 + 0.15326595042666666667e-12 * t) * t) * t) * t) * t) * t; + } + case 4: { + double t = 2*y100 - 9; + return 0.26614461952489004566e-1 + (0.31034189276234947088e-2 + (0.17460268109986214274e-4 + (0.14582130824485709573e-6 + (0.13935959083809746345e-8 + (0.15249438072998932900e-10 + 0.18344741882133333333e-12 * t) * t) * t) * t) * t) * t; + } + case 5: { + double t = 2*y100 - 11; + return 0.32892330248093586215e-1 + (0.31750557067975068584e-2 + (0.18369907582308672632e-4 + (0.15761063702089457882e-6 + (0.15577638230480894382e-8 + (0.17663868462699097951e-10 + (0.22126732680711111111e-12 + 0.30273474177737853668e-14 * t) * t) * t) * t) * t) * t) * t; + } + case 6: { + double t = 2*y100 - 13; + return 0.39317207681134336024e-1 + (0.32504779701937539333e-2 + (0.19354426046513400534e-4 + (0.17081646971321290539e-6 + (0.17485733959327106250e-8 + (0.20593687304921961410e-10 + (0.26917401949155555556e-12 + 0.38562123837725712270e-14 * t) * t) * t) * t) * t) * t) * t; + } + case 7: { + double t = 2*y100 - 15; + return 0.45896976511367738235e-1 + (0.33300031273110976165e-2 + (0.20423005398039037313e-4 + (0.18567412470376467303e-6 + (0.19718038363586588213e-8 + (0.24175006536781219807e-10 + (0.33059982791466666666e-12 + 0.49756574284439426165e-14 * t) * t) * t) * t) * t) * t) * t; + } + case 8: { + double t = 2*y100 - 17; + return 0.52640192524848962855e-1 + (0.34139883358846720806e-2 + (0.21586390240603337337e-4 + (0.20247136501568904646e-6 + (0.22348696948197102935e-8 + (0.28597516301950162548e-10 + (0.41045502119111111110e-12 + 0.65151614515238361946e-14 * t) * t) * t) * t) * t) * t) * t; + } + case 9: { + double t = 2*y100 - 19; + return 0.59556171228656770456e-1 + (0.35028374386648914444e-2 + (0.22857246150998562824e-4 + (0.22156372146525190679e-6 + (0.25474171590893813583e-8 + (0.34122390890697400584e-10 + (0.51593189879111111110e-12 + 0.86775076853908006938e-14 * t) * t) * t) * t) * t) * t) * t; + } + case 10: { + double t = 2*y100 - 21; + return 0.66655089485108212551e-1 + (0.35970095381271285568e-2 + (0.24250626164318672928e-4 + (0.24339561521785040536e-6 + (0.29221990406518411415e-8 + (0.41117013527967776467e-10 + (0.65786450716444444445e-12 + 0.11791885745450623331e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 11: { + double t = 2*y100 - 23; + return 0.73948106345519174661e-1 + (0.36970297216569341748e-2 + (0.25784588137312868792e-4 + (0.26853012002366752770e-6 + (0.33763958861206729592e-8 + (0.50111549981376976397e-10 + (0.85313857496888888890e-12 + 0.16417079927706899860e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 12: { + double t = 2*y100 - 25; + return 0.81447508065002963203e-1 + (0.38035026606492705117e-2 + (0.27481027572231851896e-4 + (0.29769200731832331364e-6 + (0.39336816287457655076e-8 + (0.61895471132038157624e-10 + (0.11292303213511111111e-11 + 0.23558532213703884304e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 13: { + double t = 2*y100 - 27; + return 0.89166884027582716628e-1 + (0.39171301322438946014e-2 + (0.29366827260422311668e-4 + (0.33183204390350724895e-6 + (0.46276006281647330524e-8 + (0.77692631378169813324e-10 + (0.15335153258844444444e-11 + 0.35183103415916026911e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 14: { + double t = 2*y100 - 29; + return 0.97121342888032322019e-1 + (0.40387340353207909514e-2 + (0.31475490395950776930e-4 + (0.37222714227125135042e-6 + (0.55074373178613809996e-8 + (0.99509175283990337944e-10 + (0.21552645758222222222e-11 + 0.55728651431872687605e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 15: { + double t = 2*y100 - 31; + return 0.10532778218603311137e0 + (0.41692873614065380607e-2 + (0.33849549774889456984e-4 + (0.42064596193692630143e-6 + (0.66494579697622432987e-8 + (0.13094103581931802337e-9 + (0.31896187409777777778e-11 + 0.97271974184476560742e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 16: { + double t = 2*y100 - 33; + return 0.11380523107427108222e0 + (0.43099572287871821013e-2 + (0.36544324341565929930e-4 + (0.47965044028581857764e-6 + (0.81819034238463698796e-8 + (0.17934133239549647357e-9 + (0.50956666166186293627e-11 + (0.18850487318190638010e-12 + 0.79697813173519853340e-14 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 17: { + double t = 2*y100 - 35; + return 0.12257529703447467345e0 + (0.44621675710026986366e-2 + (0.39634304721292440285e-4 + (0.55321553769873381819e-6 + (0.10343619428848520870e-7 + (0.26033830170470368088e-9 + (0.87743837749108025357e-11 + (0.34427092430230063401e-12 + 0.10205506615709843189e-13 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 18: { + double t = 2*y100 - 37; + return 0.13166276955656699478e0 + (0.46276970481783001803e-2 + (0.43225026380496399310e-4 + (0.64799164020016902656e-6 + (0.13580082794704641782e-7 + (0.39839800853954313927e-9 + (0.14431142411840000000e-10 + 0.42193457308830027541e-12 * t) * t) * t) * t) * t) * t) * t; + } + case 19: { + double t = 2*y100 - 39; + return 0.14109647869803356475e0 + (0.48088424418545347758e-2 + (0.47474504753352150205e-4 + (0.77509866468724360352e-6 + (0.18536851570794291724e-7 + (0.60146623257887570439e-9 + (0.18533978397305276318e-10 + (0.41033845938901048380e-13 - 0.46160680279304825485e-13 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 20: { + double t = 2*y100 - 41; + return 0.15091057940548936603e0 + (0.50086864672004685703e-2 + (0.52622482832192230762e-4 + (0.95034664722040355212e-6 + (0.25614261331144718769e-7 + (0.80183196716888606252e-9 + (0.12282524750534352272e-10 + (-0.10531774117332273617e-11 - 0.86157181395039646412e-13 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 21: { + double t = 2*y100 - 43; + return 0.16114648116017010770e0 + (0.52314661581655369795e-2 + (0.59005534545908331315e-4 + (0.11885518333915387760e-5 + (0.33975801443239949256e-7 + (0.82111547144080388610e-9 + (-0.12357674017312854138e-10 + (-0.24355112256914479176e-11 - 0.75155506863572930844e-13 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 22: { + double t = 2*y100 - 45; + return 0.17185551279680451144e0 + (0.54829002967599420860e-2 + (0.67013226658738082118e-4 + (0.14897400671425088807e-5 + (0.40690283917126153701e-7 + (0.44060872913473778318e-9 + (-0.52641873433280000000e-10 - 0.30940587864543343124e-11 * t) * t) * t) * t) * t) * t) * t; + } + case 23: { + double t = 2*y100 - 47; + return 0.18310194559815257381e0 + (0.57701559375966953174e-2 + (0.76948789401735193483e-4 + (0.18227569842290822512e-5 + (0.41092208344387212276e-7 + (-0.44009499965694442143e-9 + (-0.92195414685628803451e-10 + (-0.22657389705721753299e-11 + 0.10004784908106839254e-12 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 24: { + double t = 2*y100 - 49; + return 0.19496527191546630345e0 + (0.61010853144364724856e-2 + (0.88812881056342004864e-4 + (0.21180686746360261031e-5 + (0.30652145555130049203e-7 + (-0.16841328574105890409e-8 + (-0.11008129460612823934e-9 + (-0.12180794204544515779e-12 + 0.15703325634590334097e-12 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 25: { + double t = 2*y100 - 51; + return 0.20754006813966575720e0 + (0.64825787724922073908e-2 + (0.10209599627522311893e-3 + (0.22785233392557600468e-5 + (0.73495224449907568402e-8 + (-0.29442705974150112783e-8 + (-0.94082603434315016546e-10 + (0.23609990400179321267e-11 + 0.14141908654269023788e-12 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 26: { + double t = 2*y100 - 53; + return 0.22093185554845172146e0 + (0.69182878150187964499e-2 + (0.11568723331156335712e-3 + (0.22060577946323627739e-5 + (-0.26929730679360840096e-7 + (-0.38176506152362058013e-8 + (-0.47399503861054459243e-10 + (0.40953700187172127264e-11 + 0.69157730376118511127e-13 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 27: { + double t = 2*y100 - 55; + return 0.23524827304057813918e0 + (0.74063350762008734520e-2 + (0.12796333874615790348e-3 + (0.18327267316171054273e-5 + (-0.66742910737957100098e-7 + (-0.40204740975496797870e-8 + (0.14515984139495745330e-10 + (0.44921608954536047975e-11 - 0.18583341338983776219e-13 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 28: { + double t = 2*y100 - 57; + return 0.25058626331812744775e0 + (0.79377285151602061328e-2 + (0.13704268650417478346e-3 + (0.11427511739544695861e-5 + (-0.10485442447768377485e-6 + (-0.34850364756499369763e-8 + (0.72656453829502179208e-10 + (0.36195460197779299406e-11 - 0.84882136022200714710e-13 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 29: { + double t = 2*y100 - 59; + return 0.26701724900280689785e0 + (0.84959936119625864274e-2 + (0.14112359443938883232e-3 + (0.17800427288596909634e-6 + (-0.13443492107643109071e-6 + (-0.23512456315677680293e-8 + (0.11245846264695936769e-9 + (0.19850501334649565404e-11 - 0.11284666134635050832e-12 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 30: { + double t = 2*y100 - 61; + return 0.28457293586253654144e0 + (0.90581563892650431899e-2 + (0.13880520331140646738e-3 + (-0.97262302362522896157e-6 + (-0.15077100040254187366e-6 + (-0.88574317464577116689e-9 + (0.12760311125637474581e-9 + (0.20155151018282695055e-12 - 0.10514169375181734921e-12 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 31: { + double t = 2*y100 - 63; + return 0.30323425595617385705e0 + (0.95968346790597422934e-2 + (0.12931067776725883939e-3 + (-0.21938741702795543986e-5 + (-0.15202888584907373963e-6 + (0.61788350541116331411e-9 + (0.11957835742791248256e-9 + (-0.12598179834007710908e-11 - 0.75151817129574614194e-13 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 32: { + double t = 2*y100 - 65; + return 0.32292521181517384379e0 + (0.10082957727001199408e-1 + (0.11257589426154962226e-3 + (-0.33670890319327881129e-5 + (-0.13910529040004008158e-6 + (0.19170714373047512945e-8 + (0.94840222377720494290e-10 + (-0.21650018351795353201e-11 - 0.37875211678024922689e-13 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 33: { + double t = 2*y100 - 67; + return 0.34351233557911753862e0 + (0.10488575435572745309e-1 + (0.89209444197248726614e-4 + (-0.43893459576483345364e-5 + (-0.11488595830450424419e-6 + (0.28599494117122464806e-8 + (0.61537542799857777779e-10 - 0.24935749227658002212e-11 * t) * t) * t) * t) * t) * t) * t; + } + case 34: { + double t = 2*y100 - 69; + return 0.36480946642143669093e0 + (0.10789304203431861366e-1 + (0.60357993745283076834e-4 + (-0.51855862174130669389e-5 + (-0.83291664087289801313e-7 + (0.33898011178582671546e-8 + (0.27082948188277716482e-10 + (-0.23603379397408694974e-11 + 0.19328087692252869842e-13 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 35: { + double t = 2*y100 - 71; + return 0.38658679935694939199e0 + (0.10966119158288804999e-1 + (0.27521612041849561426e-4 + (-0.57132774537670953638e-5 + (-0.48404772799207914899e-7 + (0.35268354132474570493e-8 + (-0.32383477652514618094e-11 + (-0.19334202915190442501e-11 + 0.32333189861286460270e-13 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 36: { + double t = 2*y100 - 73; + return 0.40858275583808707870e0 + (0.11006378016848466550e-1 + (-0.76396376685213286033e-5 + (-0.59609835484245791439e-5 + (-0.13834610033859313213e-7 + (0.33406952974861448790e-8 + (-0.26474915974296612559e-10 + (-0.13750229270354351983e-11 + 0.36169366979417390637e-13 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 37: { + double t = 2*y100 - 75; + return 0.43051714914006682977e0 + (0.10904106549500816155e-1 + (-0.43477527256787216909e-4 + (-0.59429739547798343948e-5 + (0.17639200194091885949e-7 + (0.29235991689639918688e-8 + (-0.41718791216277812879e-10 + (-0.81023337739508049606e-12 + 0.33618915934461994428e-13 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 38: { + double t = 2*y100 - 77; + return 0.45210428135559607406e0 + (0.10659670756384400554e-1 + (-0.78488639913256978087e-4 + (-0.56919860886214735936e-5 + (0.44181850467477733407e-7 + (0.23694306174312688151e-8 + (-0.49492621596685443247e-10 + (-0.31827275712126287222e-12 + 0.27494438742721623654e-13 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 39: { + double t = 2*y100 - 79; + return 0.47306491195005224077e0 + (0.10279006119745977570e-1 + (-0.11140268171830478306e-3 + (-0.52518035247451432069e-5 + (0.64846898158889479518e-7 + (0.17603624837787337662e-8 + (-0.51129481592926104316e-10 + (0.62674584974141049511e-13 + 0.20055478560829935356e-13 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 40: { + double t = 2*y100 - 81; + return 0.49313638965719857647e0 + (0.97725799114772017662e-2 + (-0.14122854267291533334e-3 + (-0.46707252568834951907e-5 + (0.79421347979319449524e-7 + (0.11603027184324708643e-8 + (-0.48269605844397175946e-10 + (0.32477251431748571219e-12 + 0.12831052634143527985e-13 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 41: { + double t = 2*y100 - 83; + return 0.51208057433416004042e0 + (0.91542422354009224951e-2 + (-0.16726530230228647275e-3 + (-0.39964621752527649409e-5 + (0.88232252903213171454e-7 + (0.61343113364949928501e-9 + (-0.42516755603130443051e-10 + (0.47910437172240209262e-12 + 0.66784341874437478953e-14 * t) * t) * t) * t) * t) * t) * t) * t; + } + case 42: { + double t = 2*y100 - 85; + return 0.52968945458607484524e0 + (0.84400880445116786088e-2 + (-0.18908729783854258774e-3 + (-0.32725905467782951931e-5 + (0.91956190588652090659e-7 + (0.14593989152420122909e-9 + (-0.35239490687644444445e-10 + 0.54613829888448694898e-12 * t) * t) * t) * t) * t) * t) * t; + } + case 43: { + double t = 2*y100 - 87; + return 0.54578857454330070965e0 + (0.76474155195880295311e-2 + (-0.20651230590808213884e-3 + (-0.25364339140543131706e-5 + (0.91455367999510681979e-7 + (-0.23061359005297528898e-9 + (-0.27512928625244444444e-10 + 0.54895806008493285579e-12 * t) * t) * t) * t) * t) * t) * t; + } + case 44: { + double t = 2*y100 - 89; + return 0.56023851910298493910e0 + (0.67938321739997196804e-2 + (-0.21956066613331411760e-3 + (-0.18181127670443266395e-5 + (0.87650335075416845987e-7 + (-0.51548062050366615977e-9 + (-0.20068462174044444444e-10 + 0.50912654909758187264e-12 * t) * t) * t) * t) * t) * t) * t; + } + case 45: { + double t = 2*y100 - 91; + return 0.57293478057455721150e0 + (0.58965321010394044087e-2 + (-0.22841145229276575597e-3 + (-0.11404605562013443659e-5 + (0.81430290992322326296e-7 + (-0.71512447242755357629e-9 + (-0.13372664928000000000e-10 + 0.44461498336689298148e-12 * t) * t) * t) * t) * t) * t) * t; + } + case 46: { + double t = 2*y100 - 93; + return 0.58380635448407827360e0 + (0.49717469530842831182e-2 + (-0.23336001540009645365e-3 + (-0.51952064448608850822e-6 + (0.73596577815411080511e-7 + (-0.84020916763091566035e-9 + (-0.76700972702222222221e-11 + 0.36914462807972467044e-12 * t) * t) * t) * t) * t) * t) * t; + } + case 47: { + double t = 2*y100 - 95; + return 0.59281340237769489597e0 + (0.40343592069379730568e-2 + (-0.23477963738658326185e-3 + (0.34615944987790224234e-7 + (0.64832803248395814574e-7 + (-0.90329163587627007971e-9 + (-0.30421940400000000000e-11 + 0.29237386653743536669e-12 * t) * t) * t) * t) * t) * t) * t; + } + case 48: { + double t = 2*y100 - 97; + return 0.59994428743114271918e0 + (0.30976579788271744329e-2 + (-0.23308875765700082835e-3 + (0.51681681023846925160e-6 + (0.55694594264948268169e-7 + (-0.91719117313243464652e-9 + (0.53982743680000000000e-12 + 0.22050829296187771142e-12 * t) * t) * t) * t) * t) * t) * t; + } + case 49: { + double t = 2*y100 - 99; + return 0.60521224471819875444e0 + (0.21732138012345456060e-2 + (-0.22872428969625997456e-3 + (0.92588959922653404233e-6 + (0.46612665806531930684e-7 + (-0.89393722514414153351e-9 + (0.31718550353777777778e-11 + 0.15705458816080549117e-12 * t) * t) * t) * t) * t) * t) * t; + } + case 50: { + double t = 2*y100 - 101; + return 0.60865189969791123620e0 + (0.12708480848877451719e-2 + (-0.22212090111534847166e-3 + (0.12636236031532793467e-5 + (0.37904037100232937574e-7 + (-0.84417089968101223519e-9 + (0.49843180828444444445e-11 + 0.10355439441049048273e-12 * t) * t) * t) * t) * t) * t) * t; + } + case 51: { + double t = 2*y100 - 103; + return 0.61031580103499200191e0 + (0.39867436055861038223e-3 + (-0.21369573439579869291e-3 + (0.15339402129026183670e-5 + (0.29787479206646594442e-7 + (-0.77687792914228632974e-9 + (0.61192452741333333334e-11 + 0.60216691829459295780e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 52: { + double t = 2*y100 - 105; + return 0.61027109047879835868e0 + (-0.43680904508059878254e-3 + (-0.20383783788303894442e-3 + (0.17421743090883439959e-5 + (0.22400425572175715576e-7 + (-0.69934719320045128997e-9 + (0.67152759655111111110e-11 + 0.26419960042578359995e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 53: { + double t = 2*y100 - 107; + return 0.60859639489217430521e0 + (-0.12305921390962936873e-2 + (-0.19290150253894682629e-3 + (0.18944904654478310128e-5 + (0.15815530398618149110e-7 + (-0.61726850580964876070e-9 + 0.68987888999111111110e-11 * t) * t) * t) * t) * t) * t; + } + case 54: { + double t = 2*y100 - 109; + return 0.60537899426486075181e0 + (-0.19790062241395705751e-2 + (-0.18120271393047062253e-3 + (0.19974264162313241405e-5 + (0.10055795094298172492e-7 + (-0.53491997919318263593e-9 + (0.67794550295111111110e-11 - 0.17059208095741511603e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 55: { + double t = 2*y100 - 111; + return 0.60071229457904110537e0 + (-0.26795676776166354354e-2 + (-0.16901799553627508781e-3 + (0.20575498324332621581e-5 + (0.51077165074461745053e-8 + (-0.45536079828057221858e-9 + (0.64488005516444444445e-11 - 0.29311677573152766338e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 56: { + double t = 2*y100 - 113; + return 0.59469361520112714738e0 + (-0.33308208190600993470e-2 + (-0.15658501295912405679e-3 + (0.20812116912895417272e-5 + (0.93227468760614182021e-9 + (-0.38066673740116080415e-9 + (0.59806790359111111110e-11 - 0.36887077278950440597e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 57: { + double t = 2*y100 - 115; + return 0.58742228631775388268e0 + (-0.39321858196059227251e-2 + (-0.14410441141450122535e-3 + (0.20743790018404020716e-5 + (-0.25261903811221913762e-8 + (-0.31212416519526924318e-9 + (0.54328422462222222221e-11 - 0.40864152484979815972e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 58: { + double t = 2*y100 - 117; + return 0.57899804200033018447e0 + (-0.44838157005618913447e-2 + (-0.13174245966501437965e-3 + (0.20425306888294362674e-5 + (-0.53330296023875447782e-8 + (-0.25041289435539821014e-9 + (0.48490437205333333334e-11 - 0.42162206939169045177e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 59: { + double t = 2*y100 - 119; + return 0.56951968796931245974e0 + (-0.49864649488074868952e-2 + (-0.11963416583477567125e-3 + (0.19906021780991036425e-5 + (-0.75580140299436494248e-8 + (-0.19576060961919820491e-9 + (0.42613011928888888890e-11 - 0.41539443304115604377e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 60: { + double t = 2*y100 - 121; + return 0.55908401930063918964e0 + (-0.54413711036826877753e-2 + (-0.10788661102511914628e-3 + (0.19229663322982839331e-5 + (-0.92714731195118129616e-8 + (-0.14807038677197394186e-9 + (0.36920870298666666666e-11 - 0.39603726688419162617e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 61: { + double t = 2*y100 - 123; + return 0.54778496152925675315e0 + (-0.58501497933213396670e-2 + (-0.96582314317855227421e-4 + (0.18434405235069270228e-5 + (-0.10541580254317078711e-7 + (-0.10702303407788943498e-9 + (0.31563175582222222222e-11 - 0.36829748079110481422e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 62: { + double t = 2*y100 - 125; + return 0.53571290831682823999e0 + (-0.62147030670760791791e-2 + (-0.85782497917111760790e-4 + (0.17553116363443470478e-5 + (-0.11432547349815541084e-7 + (-0.72157091369041330520e-10 + (0.26630811607111111111e-11 - 0.33578660425893164084e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 63: { + double t = 2*y100 - 127; + return 0.52295422962048434978e0 + (-0.65371404367776320720e-2 + (-0.75530164941473343780e-4 + (0.16613725797181276790e-5 + (-0.12003521296598910761e-7 + (-0.42929753689181106171e-10 + (0.22170894940444444444e-11 - 0.30117697501065110505e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 64: { + double t = 2*y100 - 129; + return 0.50959092577577886140e0 + (-0.68197117603118591766e-2 + (-0.65852936198953623307e-4 + (0.15639654113906716939e-5 + (-0.12308007991056524902e-7 + (-0.18761997536910939570e-10 + (0.18198628922666666667e-11 - 0.26638355362285200932e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 65: { + double t = 2*y100 - 131; + return 0.49570040481823167970e0 + (-0.70647509397614398066e-2 + (-0.56765617728962588218e-4 + (0.14650274449141448497e-5 + (-0.12393681471984051132e-7 + (0.92904351801168955424e-12 + (0.14706755960177777778e-11 - 0.23272455351266325318e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 66: { + double t = 2*y100 - 133; + return 0.48135536250935238066e0 + (-0.72746293327402359783e-2 + (-0.48272489495730030780e-4 + (0.13661377309113939689e-5 + (-0.12302464447599382189e-7 + (0.16707760028737074907e-10 + (0.11672928324444444444e-11 - 0.20105801424709924499e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 67: { + double t = 2*y100 - 135; + return 0.46662374675511439448e0 + (-0.74517177649528487002e-2 + (-0.40369318744279128718e-4 + (0.12685621118898535407e-5 + (-0.12070791463315156250e-7 + (0.29105507892605823871e-10 + (0.90653314645333333334e-12 - 0.17189503312102982646e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 68: { + double t = 2*y100 - 137; + return 0.45156879030168268778e0 + (-0.75983560650033817497e-2 + (-0.33045110380705139759e-4 + (0.11732956732035040896e-5 + (-0.11729986947158201869e-7 + (0.38611905704166441308e-10 + (0.68468768305777777779e-12 - 0.14549134330396754575e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 69: { + double t = 2*y100 - 139; + return 0.43624909769330896904e0 + (-0.77168291040309554679e-2 + (-0.26283612321339907756e-4 + (0.10811018836893550820e-5 + (-0.11306707563739851552e-7 + (0.45670446788529607380e-10 + (0.49782492549333333334e-12 - 0.12191983967561779442e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 70: { + double t = 2*y100 - 141; + return 0.42071877443548481181e0 + (-0.78093484015052730097e-2 + (-0.20064596897224934705e-4 + (0.99254806680671890766e-6 + (-0.10823412088884741451e-7 + (0.50677203326904716247e-10 + (0.34200547594666666666e-12 - 0.10112698698356194618e-13 * t) * t) * t) * t) * t) * t) * t; + } + case 71: { + double t = 2*y100 - 143; + return 0.40502758809710844280e0 + (-0.78780384460872937555e-2 + (-0.14364940764532853112e-4 + (0.90803709228265217384e-6 + (-0.10298832847014466907e-7 + (0.53981671221969478551e-10 + (0.21342751381333333333e-12 - 0.82975901848387729274e-14 * t) * t) * t) * t) * t) * t) * t; + } + case 72: { + double t = 2*y100 - 145; + return 0.38922115269731446690e0 + (-0.79249269708242064120e-2 + (-0.91595258799106970453e-5 + (0.82783535102217576495e-6 + (-0.97484311059617744437e-8 + (0.55889029041660225629e-10 + (0.10851981336888888889e-12 - 0.67278553237853459757e-14 * t) * t) * t) * t) * t) * t) * t; + } + case 73: { + double t = 2*y100 - 147; + return 0.37334112915460307335e0 + (-0.79519385109223148791e-2 + (-0.44219833548840469752e-5 + (0.75209719038240314732e-6 + (-0.91848251458553190451e-8 + (0.56663266668051433844e-10 + (0.23995894257777777778e-13 - 0.53819475285389344313e-14 * t) * t) * t) * t) * t) * t) * t; + } + case 74: { + double t = 2*y100 - 149; + return 0.35742543583374223085e0 + (-0.79608906571527956177e-2 + (-0.12530071050975781198e-6 + (0.68088605744900552505e-6 + (-0.86181844090844164075e-8 + (0.56530784203816176153e-10 + (-0.43120012248888888890e-13 - 0.42372603392496813810e-14 * t) * t) * t) * t) * t) * t) * t; + } + case 75: { + double t = 2*y100 - 151; + return 0.34150846431979618536e0 + (-0.79534924968773806029e-2 + (0.37576885610891515813e-5 + (0.61419263633090524326e-6 + (-0.80565865409945960125e-8 + (0.55684175248749269411e-10 + (-0.95486860764444444445e-13 - 0.32712946432984510595e-14 * t) * t) * t) * t) * t) * t) * t; + } + case 76: { + double t = 2*y100 - 153; + return 0.32562129649136346824e0 + (-0.79313448067948884309e-2 + (0.72539159933545300034e-5 + (0.55195028297415503083e-6 + (-0.75063365335570475258e-8 + (0.54281686749699595941e-10 - 0.13545424295111111111e-12 * t) * t) * t) * t) * t) * t; + } + case 77: { + double t = 2*y100 - 155; + return 0.30979191977078391864e0 + (-0.78959416264207333695e-2 + (0.10389774377677210794e-4 + (0.49404804463196316464e-6 + (-0.69722488229411164685e-8 + (0.52469254655951393842e-10 - 0.16507860650666666667e-12 * t) * t) * t) * t) * t) * t; + } + case 78: { + double t = 2*y100 - 157; + return 0.29404543811214459904e0 + (-0.78486728990364155356e-2 + (0.13190885683106990459e-4 + (0.44034158861387909694e-6 + (-0.64578942561562616481e-8 + (0.50354306498006928984e-10 - 0.18614473550222222222e-12 * t) * t) * t) * t) * t) * t; + } + case 79: { + double t = 2*y100 - 159; + return 0.27840427686253660515e0 + (-0.77908279176252742013e-2 + (0.15681928798708548349e-4 + (0.39066226205099807573e-6 + (-0.59658144820660420814e-8 + (0.48030086420373141763e-10 - 0.20018995173333333333e-12 * t) * t) * t) * t) * t) * t; + } + case 80: { + double t = 2*y100 - 161; + return 0.26288838011163800908e0 + (-0.77235993576119469018e-2 + (0.17886516796198660969e-4 + (0.34482457073472497720e-6 + (-0.54977066551955420066e-8 + (0.45572749379147269213e-10 - 0.20852924954666666667e-12 * t) * t) * t) * t) * t) * t; + } + case 81: { + double t = 2*y100 - 163; + return 0.24751539954181029717e0 + (-0.76480877165290370975e-2 + (0.19827114835033977049e-4 + (0.30263228619976332110e-6 + (-0.50545814570120129947e-8 + (0.43043879374212005966e-10 - 0.21228012028444444444e-12 * t) * t) * t) * t) * t) * t; + } + case 82: { + double t = 2*y100 - 165; + return 0.23230087411688914593e0 + (-0.75653060136384041587e-2 + (0.21524991113020016415e-4 + (0.26388338542539382413e-6 + (-0.46368974069671446622e-8 + (0.40492715758206515307e-10 - 0.21238627815111111111e-12 * t) * t) * t) * t) * t) * t; + } + case 83: { + double t = 2*y100 - 167; + return 0.21725840021297341931e0 + (-0.74761846305979730439e-2 + (0.23000194404129495243e-4 + (0.22837400135642906796e-6 + (-0.42446743058417541277e-8 + (0.37958104071765923728e-10 - 0.20963978568888888889e-12 * t) * t) * t) * t) * t) * t; + } + case 84: { + double t = 2*y100 - 169; + return 0.20239979200788191491e0 + (-0.73815761980493466516e-2 + (0.24271552727631854013e-4 + (0.19590154043390012843e-6 + (-0.38775884642456551753e-8 + (0.35470192372162901168e-10 - 0.20470131678222222222e-12 * t) * t) * t) * t) * t) * t; + } + case 85: { + double t = 2*y100 - 171; + return 0.18773523211558098962e0 + (-0.72822604530339834448e-2 + (0.25356688567841293697e-4 + (0.16626710297744290016e-6 + (-0.35350521468015310830e-8 + (0.33051896213898864306e-10 - 0.19811844544000000000e-12 * t) * t) * t) * t) * t) * t; + } + case 86: { + double t = 2*y100 - 173; + return 0.17327341258479649442e0 + (-0.71789490089142761950e-2 + (0.26272046822383820476e-4 + (0.13927732375657362345e-6 + (-0.32162794266956859603e-8 + (0.30720156036105652035e-10 - 0.19034196304000000000e-12 * t) * t) * t) * t) * t) * t; + } + case 87: { + double t = 2*y100 - 175; + return 0.15902166648328672043e0 + (-0.70722899934245504034e-2 + (0.27032932310132226025e-4 + (0.11474573347816568279e-6 + (-0.29203404091754665063e-8 + (0.28487010262547971859e-10 - 0.18174029063111111111e-12 * t) * t) * t) * t) * t) * t; + } + case 88: { + double t = 2*y100 - 177; + return 0.14498609036610283865e0 + (-0.69628725220045029273e-2 + (0.27653554229160596221e-4 + (0.92493727167393036470e-7 + (-0.26462055548683583849e-8 + (0.26360506250989943739e-10 - 0.17261211260444444444e-12 * t) * t) * t) * t) * t) * t; + } + case 89: { + double t = 2*y100 - 179; + return 0.13117165798208050667e0 + (-0.68512309830281084723e-2 + (0.28147075431133863774e-4 + (0.72351212437979583441e-7 + (-0.23927816200314358570e-8 + (0.24345469651209833155e-10 - 0.16319736960000000000e-12 * t) * t) * t) * t) * t) * t; + } + case 90: { + double t = 2*y100 - 181; + return 0.11758232561160626306e0 + (-0.67378491192463392927e-2 + (0.28525664781722907847e-4 + (0.54156999310046790024e-7 + (-0.21589405340123827823e-8 + (0.22444150951727334619e-10 - 0.15368675584000000000e-12 * t) * t) * t) * t) * t) * t; + } + case 91: { + double t = 2*y100 - 183; + return 0.10422112945361673560e0 + (-0.66231638959845581564e-2 + (0.28800551216363918088e-4 + (0.37758983397952149613e-7 + (-0.19435423557038933431e-8 + (0.20656766125421362458e-10 - 0.14422990012444444444e-12 * t) * t) * t) * t) * t) * t; + } + case 92: { + double t = 2*y100 - 185; + return 0.91090275493541084785e-1 + (-0.65075691516115160062e-2 + (0.28982078385527224867e-4 + (0.23014165807643012781e-7 + (-0.17454532910249875958e-8 + (0.18981946442680092373e-10 - 0.13494234691555555556e-12 * t) * t) * t) * t) * t) * t; + } + case 93: { + double t = 2*y100 - 187; + return 0.78191222288771379358e-1 + (-0.63914190297303976434e-2 + (0.29079759021299682675e-4 + (0.97885458059415717014e-8 + (-0.15635596116134296819e-8 + (0.17417110744051331974e-10 - 0.12591151763555555556e-12 * t) * t) * t) * t) * t) * t; + } + case 94: { + double t = 2*y100 - 189; + return 0.65524757106147402224e-1 + (-0.62750311956082444159e-2 + (0.29102328354323449795e-4 + (-0.20430838882727954582e-8 + (-0.13967781903855367270e-8 + (0.15958771833747057569e-10 - 0.11720175765333333333e-12 * t) * t) * t) * t) * t) * t; + } + case 95: { + double t = 2*y100 - 191; + return 0.53091065838453612773e-1 + (-0.61586898417077043662e-2 + (0.29057796072960100710e-4 + (-0.12597414620517987536e-7 + (-0.12440642607426861943e-8 + (0.14602787128447932137e-10 - 0.10885859114666666667e-12 * t) * t) * t) * t) * t) * t; + } + case 96: { + double t = 2*y100 - 193; + return 0.40889797115352738582e-1 + (-0.60426484889413678200e-2 + (0.28953496450191694606e-4 + (-0.21982952021823718400e-7 + (-0.11044169117553026211e-8 + (0.13344562332430552171e-10 - 0.10091231402844444444e-12 * t) * t) * t) * t) * t) * t; + } + case 97: case 98: + case 99: case 100: { // use Taylor expansion for small x (|x| <= 0.0309...) + // (2/sqrt(pi)) * (x - 2/3 x^3 + 4/15 x^5 - 8/105 x^7 + 16/945 x^9) + double x2 = x*x; + return x * (1.1283791670955125739 + - x2 * (0.75225277806367504925 + - x2 * (0.30090111122547001970 + - x2 * (0.085971746064420005629 + - x2 * 0.016931216931216931217)))); + } + } + /* Since 0 <= y100 < 101, this is only reached if x is NaN, + in which case we should return NaN. */ + return NaN; +} + +double FADDEEVA(w_im)(double x) +{ + if (x >= 0) { + if (x > 45) { // continued-fraction expansion is faster + const double ispi = 0.56418958354775628694807945156; // 1 / sqrt(pi) + if (x > 5e7) // 1-term expansion, important to avoid overflow + return ispi / x; + /* 5-term expansion (rely on compiler for CSE), simplified from: + ispi / (x-0.5/(x-1/(x-1.5/(x-2/x)))) */ + return ispi*((x*x) * (x*x-4.5) + 2) / (x * ((x*x) * (x*x-5) + 3.75)); + } + return w_im_y100(100/(1+x), x); + } + else { // = -FADDEEVA(w_im)(-x) + if (x < -45) { // continued-fraction expansion is faster + const double ispi = 0.56418958354775628694807945156; // 1 / sqrt(pi) + if (x < -5e7) // 1-term expansion, important to avoid overflow + return ispi / x; + /* 5-term expansion (rely on compiler for CSE), simplified from: + ispi / (x-0.5/(x-1/(x-1.5/(x-2/x)))) */ + return ispi*((x*x) * (x*x-4.5) + 2) / (x * ((x*x) * (x*x-5) + 3.75)); + } + return -w_im_y100(100/(1-x), -x); + } +} + +///////////////////////////////////////////////////////////////////////// + +// Compile with -DTEST_FADDEEVA to compile a little test program +#ifdef TEST_FADDEEVA + +#ifdef __cplusplus +# include +#else +# include +#endif + +// compute relative error |b-a|/|a|, handling case of NaN and Inf, +static double relerr(double a, double b) { + if (isnan(a) || isnan(b) || isinf(a) || isinf(b)) { + if ((isnan(a) && !isnan(b)) || (!isnan(a) && isnan(b)) || + (isinf(a) && !isinf(b)) || (!isinf(a) && isinf(b)) || + (isinf(a) && isinf(b) && a*b < 0)) + return Inf; // "infinite" error + return 0; // matching infinity/nan results counted as zero error + } + if (a == 0) + return b == 0 ? 0 : Inf; + else + return fabs((b-a) / a); +} + +int main(void) { + double errmax_all = 0; + { + printf("############# w(z) tests #############\n"); +#define NTST 57 // define instead of const for C compatibility + cmplx z[NTST] = { + C(624.2,-0.26123), + C(-0.4,3.), + C(0.6,2.), + C(-1.,1.), + C(-1.,-9.), + C(-1.,9.), + C(-0.0000000234545,1.1234), + C(-3.,5.1), + C(-53,30.1), + C(0.0,0.12345), + C(11,1), + C(-22,-2), + C(9,-28), + C(21,-33), + C(1e5,1e5), + C(1e14,1e14), + C(-3001,-1000), + C(1e160,-1e159), + C(-6.01,0.01), + C(-0.7,-0.7), + C(2.611780000000000e+01, 4.540909610972489e+03), + C(0.8e7,0.3e7), + C(-20,-19.8081), + C(1e-16,-1.1e-16), + C(2.3e-8,1.3e-8), + C(6.3,-1e-13), + C(6.3,1e-20), + C(1e-20,6.3), + C(1e-20,16.3), + C(9,1e-300), + C(6.01,0.11), + C(8.01,1.01e-10), + C(28.01,1e-300), + C(10.01,1e-200), + C(10.01,-1e-200), + C(10.01,0.99e-10), + C(10.01,-0.99e-10), + C(1e-20,7.01), + C(-1,7.01), + C(5.99,7.01), + C(1,0), + C(55,0), + C(-0.1,0), + C(1e-20,0), + C(0,5e-14), + C(0,51), + C(Inf,0), + C(-Inf,0), + C(0,Inf), + C(0,-Inf), + C(Inf,Inf), + C(Inf,-Inf), + C(NaN,NaN), + C(NaN,0), + C(0,NaN), + C(NaN,Inf), + C(Inf,NaN) + }; + cmplx w[NTST] = { /* w(z), computed with WolframAlpha + ... note that WolframAlpha is problematic + some of the above inputs, so I had to + use the continued-fraction expansion + in WolframAlpha in some cases, or switch + to Maple */ + C(-3.78270245518980507452677445620103199303131110e-7, + 0.000903861276433172057331093754199933411710053155), + C(0.1764906227004816847297495349730234591778719532788, + -0.02146550539468457616788719893991501311573031095617), + C(0.2410250715772692146133539023007113781272362309451, + 0.06087579663428089745895459735240964093522265589350), + C(0.30474420525691259245713884106959496013413834051768, + -0.20821893820283162728743734725471561394145872072738), + C(7.317131068972378096865595229600561710140617977e34, + 8.321873499714402777186848353320412813066170427e34), + C(0.0615698507236323685519612934241429530190806818395, + -0.00676005783716575013073036218018565206070072304635), + C(0.3960793007699874918961319170187598400134746631, + -5.593152259116644920546186222529802777409274656e-9), + C(0.08217199226739447943295069917990417630675021771804, + -0.04701291087643609891018366143118110965272615832184), + C(0.00457246000350281640952328010227885008541748668738, + -0.00804900791411691821818731763401840373998654987934), + C(0.8746342859608052666092782112565360755791467973338452, + 0.), + C(0.00468190164965444174367477874864366058339647648741, + 0.0510735563901306197993676329845149741675029197050), + C(-0.0023193175200187620902125853834909543869428763219, + -0.025460054739731556004902057663500272721780776336), + C(9.11463368405637174660562096516414499772662584e304, + 3.97101807145263333769664875189354358563218932e305), + C(-4.4927207857715598976165541011143706155432296e281, + -2.8019591213423077494444700357168707775769028e281), + C(2.820947917809305132678577516325951485807107151e-6, + 2.820947917668257736791638444590253942253354058e-6), + C(2.82094791773878143474039725787438662716372268e-15, + 2.82094791773878143474039725773333923127678361e-15), + C(-0.0000563851289696244350147899376081488003110150498, + -0.000169211755126812174631861529808288295454992688), + C(-5.586035480670854326218608431294778077663867e-162, + 5.586035480670854326218608431294778077663867e-161), + C(0.00016318325137140451888255634399123461580248456, + -0.095232456573009287370728788146686162555021209999), + C(0.69504753678406939989115375989939096800793577783885, + -1.8916411171103639136680830887017670616339912024317), + C(0.0001242418269653279656612334210746733213167234822, + 7.145975826320186888508563111992099992116786763e-7), + C(2.318587329648353318615800865959225429377529825e-8, + 6.182899545728857485721417893323317843200933380e-8), + C(-0.0133426877243506022053521927604277115767311800303, + -0.0148087097143220769493341484176979826888871576145), + C(1.00000000000000012412170838050638522857747934, + 1.12837916709551279389615890312156495593616433e-16), + C(0.9999999853310704677583504063775310832036830015, + 2.595272024519678881897196435157270184030360773e-8), + C(-1.4731421795638279504242963027196663601154624e-15, + 0.090727659684127365236479098488823462473074709), + C(5.79246077884410284575834156425396800754409308e-18, + 0.0907276596841273652364790985059772809093822374), + C(0.0884658993528521953466533278764830881245144368, + 1.37088352495749125283269718778582613192166760e-22), + C(0.0345480845419190424370085249304184266813447878, + 2.11161102895179044968099038990446187626075258e-23), + C(6.63967719958073440070225527042829242391918213e-36, + 0.0630820900592582863713653132559743161572639353), + C(0.00179435233208702644891092397579091030658500743634, + 0.0951983814805270647939647438459699953990788064762), + C(9.09760377102097999924241322094863528771095448e-13, + 0.0709979210725138550986782242355007611074966717), + C(7.2049510279742166460047102593255688682910274423e-304, + 0.0201552956479526953866611812593266285000876784321), + C(3.04543604652250734193622967873276113872279682e-44, + 0.0566481651760675042930042117726713294607499165), + C(3.04543604652250734193622967873276113872279682e-44, + 0.0566481651760675042930042117726713294607499165), + C(0.5659928732065273429286988428080855057102069081e-12, + 0.056648165176067504292998527162143030538756683302), + C(-0.56599287320652734292869884280802459698927645e-12, + 0.0566481651760675042929985271621430305387566833029), + C(0.0796884251721652215687859778119964009569455462, + 1.11474461817561675017794941973556302717225126e-22), + C(0.07817195821247357458545539935996687005781943386550, + -0.01093913670103576690766705513142246633056714279654), + C(0.04670032980990449912809326141164730850466208439937, + 0.03944038961933534137558064191650437353429669886545), + C(0.36787944117144232159552377016146086744581113103176, + 0.60715770584139372911503823580074492116122092866515), + C(0, + 0.010259688805536830986089913987516716056946786526145), + C(0.99004983374916805357390597718003655777207908125383, + -0.11208866436449538036721343053869621153527769495574), + C(0.99999999999999999999999999999999999999990000, + 1.12837916709551257389615890312154517168802603e-20), + C(0.999999999999943581041645226871305192054749891144158, + 0), + C(0.0110604154853277201542582159216317923453996211744250, + 0), + C(0,0), + C(0,0), + C(0,0), + C(Inf,0), + C(0,0), + C(NaN,NaN), + C(NaN,NaN), + C(NaN,NaN), + C(NaN,0), + C(NaN,NaN), + C(NaN,NaN) + }; + double errmax = 0; + for (int i = 0; i < NTST; ++i) { + cmplx fw = FADDEEVA(w)(z[i],0.); + double re_err = relerr(creal(w[i]), creal(fw)); + double im_err = relerr(cimag(w[i]), cimag(fw)); + printf("w(%g%+gi) = %g%+gi (vs. %g%+gi), re/im rel. err. = %0.2g/%0.2g)\n", + creal(z[i]),cimag(z[i]), creal(fw),cimag(fw), creal(w[i]),cimag(w[i]), + re_err, im_err); + if (re_err > errmax) errmax = re_err; + if (im_err > errmax) errmax = im_err; + } + if (errmax > 1e-13) { + printf("FAILURE -- relative error %g too large!\n", errmax); + return 1; + } + printf("SUCCESS (max relative error = %g)\n", errmax); + if (errmax > errmax_all) errmax_all = errmax; + } + { +#undef NTST +#define NTST 41 // define instead of const for C compatibility + cmplx z[NTST] = { + C(1,2), + C(-1,2), + C(1,-2), + C(-1,-2), + C(9,-28), + C(21,-33), + C(1e3,1e3), + C(-3001,-1000), + C(1e160,-1e159), + C(5.1e-3, 1e-8), + C(-4.9e-3, 4.95e-3), + C(4.9e-3, 0.5), + C(4.9e-4, -0.5e1), + C(-4.9e-5, -0.5e2), + C(5.1e-3, 0.5), + C(5.1e-4, -0.5e1), + C(-5.1e-5, -0.5e2), + C(1e-6,2e-6), + C(0,2e-6), + C(0,2), + C(0,20), + C(0,200), + C(Inf,0), + C(-Inf,0), + C(0,Inf), + C(0,-Inf), + C(Inf,Inf), + C(Inf,-Inf), + C(NaN,NaN), + C(NaN,0), + C(0,NaN), + C(NaN,Inf), + C(Inf,NaN), + C(1e-3,NaN), + C(7e-2,7e-2), + C(7e-2,-7e-4), + C(-9e-2,7e-4), + C(-9e-2,9e-2), + C(-7e-4,9e-2), + C(7e-2,0.9e-2), + C(7e-2,1.1e-2) + }; + cmplx w[NTST] = { // erf(z[i]), evaluated with Maple + C(-0.5366435657785650339917955593141927494421, + -5.049143703447034669543036958614140565553), + C(0.5366435657785650339917955593141927494421, + -5.049143703447034669543036958614140565553), + C(-0.5366435657785650339917955593141927494421, + 5.049143703447034669543036958614140565553), + C(0.5366435657785650339917955593141927494421, + 5.049143703447034669543036958614140565553), + C(0.3359473673830576996788000505817956637777e304, + -0.1999896139679880888755589794455069208455e304), + C(0.3584459971462946066523939204836760283645e278, + 0.3818954885257184373734213077678011282505e280), + C(0.9996020422657148639102150147542224526887, + 0.00002801044116908227889681753993542916894856), + C(-1, 0), + C(1, 0), + C(0.005754683859034800134412990541076554934877, + 0.1128349818335058741511924929801267822634e-7), + C(-0.005529149142341821193633460286828381876955, + 0.005585388387864706679609092447916333443570), + C(0.007099365669981359632319829148438283865814, + 0.6149347012854211635026981277569074001219), + C(0.3981176338702323417718189922039863062440e8, + -0.8298176341665249121085423917575122140650e10), + C(-Inf, + -Inf), + C(0.007389128308257135427153919483147229573895, + 0.6149332524601658796226417164791221815139), + C(0.4143671923267934479245651547534414976991e8, + -0.8298168216818314211557046346850921446950e10), + C(-Inf, + -Inf), + C(0.1128379167099649964175513742247082845155e-5, + 0.2256758334191777400570377193451519478895e-5), + C(0, + 0.2256758334194034158904576117253481476197e-5), + C(0, + 18.56480241457555259870429191324101719886), + C(0, + 0.1474797539628786202447733153131835124599e173), + C(0, + Inf), + C(1,0), + C(-1,0), + C(0,Inf), + C(0,-Inf), + C(NaN,NaN), + C(NaN,NaN), + C(NaN,NaN), + C(NaN,0), + C(0,NaN), + C(NaN,NaN), + C(NaN,NaN), + C(NaN,NaN), + C(0.07924380404615782687930591956705225541145, + 0.07872776218046681145537914954027729115247), + C(0.07885775828512276968931773651224684454495, + -0.0007860046704118224342390725280161272277506), + C(-0.1012806432747198859687963080684978759881, + 0.0007834934747022035607566216654982820299469), + C(-0.1020998418798097910247132140051062512527, + 0.1010030778892310851309082083238896270340), + C(-0.0007962891763147907785684591823889484764272, + 0.1018289385936278171741809237435404896152), + C(0.07886408666470478681566329888615410479530, + 0.01010604288780868961492224347707949372245), + C(0.07886723099940260286824654364807981336591, + 0.01235199327873258197931147306290916629654) + }; +#define TST(f,isc) \ + printf("############# " #f "(z) tests #############\n"); \ + double errmax = 0; \ + for (int i = 0; i < NTST; ++i) { \ + cmplx fw = FADDEEVA(f)(z[i],0.); \ + double re_err = relerr(creal(w[i]), creal(fw)); \ + double im_err = relerr(cimag(w[i]), cimag(fw)); \ + printf(#f "(%g%+gi) = %g%+gi (vs. %g%+gi), re/im rel. err. = %0.2g/%0.2g)\n", \ + creal(z[i]),cimag(z[i]), creal(fw),cimag(fw), creal(w[i]),cimag(w[i]), \ + re_err, im_err); \ + if (re_err > errmax) errmax = re_err; \ + if (im_err > errmax) errmax = im_err; \ + } \ + if (errmax > 1e-13) { \ + printf("FAILURE -- relative error %g too large!\n", errmax); \ + return 1; \ + } \ + printf("Checking " #f "(x) special case...\n"); \ + for (int i = 0; i < 10000; ++i) { \ + double x = pow(10., -300. + i * 600. / (10000 - 1)); \ + double re_err = relerr(FADDEEVA_RE(f)(x), \ + creal(FADDEEVA(f)(C(x,x*isc),0.))); \ + if (re_err > errmax) errmax = re_err; \ + re_err = relerr(FADDEEVA_RE(f)(-x), \ + creal(FADDEEVA(f)(C(-x,x*isc),0.))); \ + if (re_err > errmax) errmax = re_err; \ + } \ + { \ + double re_err = relerr(FADDEEVA_RE(f)(Inf), \ + creal(FADDEEVA(f)(C(Inf,0.),0.))); \ + if (re_err > errmax) errmax = re_err; \ + re_err = relerr(FADDEEVA_RE(f)(-Inf), \ + creal(FADDEEVA(f)(C(-Inf,0.),0.))); \ + if (re_err > errmax) errmax = re_err; \ + re_err = relerr(FADDEEVA_RE(f)(NaN), \ + creal(FADDEEVA(f)(C(NaN,0.),0.))); \ + if (re_err > errmax) errmax = re_err; \ + } \ + if (errmax > 1e-13) { \ + printf("FAILURE -- relative error %g too large!\n", errmax); \ + return 1; \ + } \ + printf("SUCCESS (max relative error = %g)\n", errmax); \ + if (errmax > errmax_all) errmax_all = errmax + + TST(erf, 1e-20); + } + { + // since erfi just calls through to erf, just one test should + // be sufficient to make sure I didn't screw up the signs or something +#undef NTST +#define NTST 1 // define instead of const for C compatibility + cmplx z[NTST] = { C(1.234,0.5678) }; + cmplx w[NTST] = { // erfi(z[i]), computed with Maple + C(1.081032284405373149432716643834106923212, + 1.926775520840916645838949402886591180834) + }; + TST(erfi, 0); + } + { + // since erfcx just calls through to w, just one test should + // be sufficient to make sure I didn't screw up the signs or something +#undef NTST +#define NTST 1 // define instead of const for C compatibility + cmplx z[NTST] = { C(1.234,0.5678) }; + cmplx w[NTST] = { // erfcx(z[i]), computed with Maple + C(0.3382187479799972294747793561190487832579, + -0.1116077470811648467464927471872945833154) + }; + TST(erfcx, 0); + } + { +#undef NTST +#define NTST 30 // define instead of const for C compatibility + cmplx z[NTST] = { + C(1,2), + C(-1,2), + C(1,-2), + C(-1,-2), + C(9,-28), + C(21,-33), + C(1e3,1e3), + C(-3001,-1000), + C(1e160,-1e159), + C(5.1e-3, 1e-8), + C(0,2e-6), + C(0,2), + C(0,20), + C(0,200), + C(2e-6,0), + C(2,0), + C(20,0), + C(200,0), + C(Inf,0), + C(-Inf,0), + C(0,Inf), + C(0,-Inf), + C(Inf,Inf), + C(Inf,-Inf), + C(NaN,NaN), + C(NaN,0), + C(0,NaN), + C(NaN,Inf), + C(Inf,NaN), + C(88,0) + }; + cmplx w[NTST] = { // erfc(z[i]), evaluated with Maple + C(1.536643565778565033991795559314192749442, + 5.049143703447034669543036958614140565553), + C(0.4633564342214349660082044406858072505579, + 5.049143703447034669543036958614140565553), + C(1.536643565778565033991795559314192749442, + -5.049143703447034669543036958614140565553), + C(0.4633564342214349660082044406858072505579, + -5.049143703447034669543036958614140565553), + C(-0.3359473673830576996788000505817956637777e304, + 0.1999896139679880888755589794455069208455e304), + C(-0.3584459971462946066523939204836760283645e278, + -0.3818954885257184373734213077678011282505e280), + C(0.0003979577342851360897849852457775473112748, + -0.00002801044116908227889681753993542916894856), + C(2, 0), + C(0, 0), + C(0.9942453161409651998655870094589234450651, + -0.1128349818335058741511924929801267822634e-7), + C(1, + -0.2256758334194034158904576117253481476197e-5), + C(1, + -18.56480241457555259870429191324101719886), + C(1, + -0.1474797539628786202447733153131835124599e173), + C(1, -Inf), + C(0.9999977432416658119838633199332831406314, + 0), + C(0.004677734981047265837930743632747071389108, + 0), + C(0.5395865611607900928934999167905345604088e-175, + 0), + C(0, 0), + C(0, 0), + C(2, 0), + C(1, -Inf), + C(1, Inf), + C(NaN, NaN), + C(NaN, NaN), + C(NaN, NaN), + C(NaN, 0), + C(1, NaN), + C(NaN, NaN), + C(NaN, NaN), + C(0,0) + }; + TST(erfc, 1e-20); + } + { +#undef NTST +#define NTST 48 // define instead of const for C compatibility + cmplx z[NTST] = { + C(2,1), + C(-2,1), + C(2,-1), + C(-2,-1), + C(-28,9), + C(33,-21), + C(1e3,1e3), + C(-1000,-3001), + C(1e-8, 5.1e-3), + C(4.95e-3, -4.9e-3), + C(5.1e-3, 5.1e-3), + C(0.5, 4.9e-3), + C(-0.5e1, 4.9e-4), + C(-0.5e2, -4.9e-5), + C(0.5e3, 4.9e-6), + C(0.5, 5.1e-3), + C(-0.5e1, 5.1e-4), + C(-0.5e2, -5.1e-5), + C(1e-6,2e-6), + C(2e-6,0), + C(2,0), + C(20,0), + C(200,0), + C(0,4.9e-3), + C(0,-5.1e-3), + C(0,2e-6), + C(0,-2), + C(0,20), + C(0,-200), + C(Inf,0), + C(-Inf,0), + C(0,Inf), + C(0,-Inf), + C(Inf,Inf), + C(Inf,-Inf), + C(NaN,NaN), + C(NaN,0), + C(0,NaN), + C(NaN,Inf), + C(Inf,NaN), + C(39, 6.4e-5), + C(41, 6.09e-5), + C(4.9e7, 5e-11), + C(5.1e7, 4.8e-11), + C(1e9, 2.4e-12), + C(1e11, 2.4e-14), + C(1e13, 2.4e-16), + C(1e300, 2.4e-303) + }; + cmplx w[NTST] = { // dawson(z[i]), evaluated with Maple + C(0.1635394094345355614904345232875688576839, + -0.1531245755371229803585918112683241066853), + C(-0.1635394094345355614904345232875688576839, + -0.1531245755371229803585918112683241066853), + C(0.1635394094345355614904345232875688576839, + 0.1531245755371229803585918112683241066853), + C(-0.1635394094345355614904345232875688576839, + 0.1531245755371229803585918112683241066853), + C(-0.01619082256681596362895875232699626384420, + -0.005210224203359059109181555401330902819419), + C(0.01078377080978103125464543240346760257008, + 0.006866888783433775382193630944275682670599), + C(-0.5808616819196736225612296471081337245459, + 0.6688593905505562263387760667171706325749), + C(Inf, + -Inf), + C(0.1000052020902036118082966385855563526705e-7, + 0.005100088434920073153418834680320146441685), + C(0.004950156837581592745389973960217444687524, + -0.004899838305155226382584756154100963570500), + C(0.005100176864319675957314822982399286703798, + 0.005099823128319785355949825238269336481254), + C(0.4244534840871830045021143490355372016428, + 0.002820278933186814021399602648373095266538), + C(-0.1021340733271046543881236523269967674156, + -0.00001045696456072005761498961861088944159916), + C(-0.01000200120119206748855061636187197886859, + 0.9805885888237419500266621041508714123763e-8), + C(0.001000002000012000023960527532953151819595, + -0.9800058800588007290937355024646722133204e-11), + C(0.4244549085628511778373438768121222815752, + 0.002935393851311701428647152230552122898291), + C(-0.1021340732357117208743299813648493928105, + -0.00001088377943049851799938998805451564893540), + C(-0.01000200120119126652710792390331206563616, + 0.1020612612857282306892368985525393707486e-7), + C(0.1000000000007333333333344266666666664457e-5, + 0.2000000000001333333333323199999999978819e-5), + C(0.1999999999994666666666675199999999990248e-5, + 0), + C(0.3013403889237919660346644392864226952119, + 0), + C(0.02503136792640367194699495234782353186858, + 0), + C(0.002500031251171948248596912483183760683918, + 0), + C(0,0.004900078433419939164774792850907128053308), + C(0,-0.005100088434920074173454208832365950009419), + C(0,0.2000000000005333333333341866666666676419e-5), + C(0,-48.16001211429122974789822893525016528191), + C(0,0.4627407029504443513654142715903005954668e174), + C(0,-Inf), + C(0,0), + C(-0,0), + C(0, Inf), + C(0, -Inf), + C(NaN, NaN), + C(NaN, NaN), + C(NaN, NaN), + C(NaN, 0), + C(0, NaN), + C(NaN, NaN), + C(NaN, NaN), + C(0.01282473148489433743567240624939698290584, + -0.2105957276516618621447832572909153498104e-7), + C(0.01219875253423634378984109995893708152885, + -0.1813040560401824664088425926165834355953e-7), + C(0.1020408163265306334945473399689037886997e-7, + -0.1041232819658476285651490827866174985330e-25), + C(0.9803921568627452865036825956835185367356e-8, + -0.9227220299884665067601095648451913375754e-26), + C(0.5000000000000000002500000000000000003750e-9, + -0.1200000000000000001800000188712838420241e-29), + C(5.00000000000000000000025000000000000000000003e-12, + -1.20000000000000000000018000000000000000000004e-36), + C(5.00000000000000000000000002500000000000000000e-14, + -1.20000000000000000000000001800000000000000000e-42), + C(5e-301, 0) + }; + TST(Dawson, 1e-20); + } + printf("#####################################\n"); + printf("SUCCESS (max relative error = %g)\n", errmax_all); +} + +#endif diff --git a/src/Faddeeva.h b/src/Faddeeva.h new file mode 100644 index 0000000000..4293861907 --- /dev/null +++ b/src/Faddeeva.h @@ -0,0 +1,68 @@ +/* Copyright (c) 2012 Massachusetts Institute of Technology + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* Available at: http://ab-initio.mit.edu/Faddeeva + + Header file for Faddeeva.c; see Faddeeva.cc for more information. */ + +#ifndef FADDEEVA_H +#define FADDEEVA_H 1 + +// Require C99 complex-number support +#include + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +// compute w(z) = exp(-z^2) erfc(-iz) [ Faddeeva / scaled complex error func ] +extern double complex Faddeeva_w(double complex z,double relerr); +extern double Faddeeva_w_im(double x); // special-case code for Im[w(x)] of real x + +// Various functions that we can compute with the help of w(z) + +// compute erfcx(z) = exp(z^2) erfc(z) +extern double complex Faddeeva_erfcx(double complex z, double relerr); +extern double Faddeeva_erfcx_re(double x); // special case for real x + +// compute erf(z), the error function of complex arguments +extern double complex Faddeeva_erf(double complex z, double relerr); +extern double Faddeeva_erf_re(double x); // special case for real x + +// compute erfi(z) = -i erf(iz), the imaginary error function +extern double complex Faddeeva_erfi(double complex z, double relerr); +extern double Faddeeva_erfi_re(double x); // special case for real x + +// compute erfc(z) = 1 - erf(z), the complementary error function +extern double complex Faddeeva_erfc(double complex z, double relerr); +extern double Faddeeva_erfc_re(double x); // special case for real x + +// compute Dawson(z) = sqrt(pi)/2 * exp(-z^2) * erfi(z) +extern double complex Faddeeva_Dawson(double complex z, double relerr); +extern double Faddeeva_Dawson_re(double x); // special case for real x + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif // FADDEEVA_H diff --git a/src/ace.F90 b/src/ace.F90 index e97338b558..dc9fdf7355 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -9,6 +9,8 @@ module ace use global use list_header, only: ListInt use material_header, only: Material + use multipole, only: multipole_read + use multipole_header, only: max_L, max_poles, max_poly use output, only: write_message use set_header, only: SetChar use string, only: to_str, to_lower @@ -105,6 +107,9 @@ contains end do end if + ! Read multipole file into the appropriate entry on the nuclides array + call read_multipole_data(i_nuclide) + ! Add name and alias to dictionary call already_read % add(name) call already_read % add(alias) @@ -408,6 +413,69 @@ contains end subroutine read_ace_table +!=============================================================================== +! READ_MULTIPOLE_DATA checks for the existence of a multipole library in the +! directory and loads it using multipole_read +!=============================================================================== + + subroutine read_multipole_data(i_table) + + integer, intent(in) :: i_table ! index in nuclides/sab_tables + + logical :: file_exists ! does multipole library exist? + character(7) :: readable ! is multipole library readable? + character(6) :: zaid_string ! String of the ZAID + character(9) :: filename ! path to multipole cross section library + type(Nuclide), pointer :: nuc => null() + + ! For the time being, and I know this is a bit hacky, we just assume + ! that the file will be zaid.h5. + nuc => nuclides(i_table) + + write(zaid_string,'(I6.6)') nuc % zaid + filename = zaid_string // ".h5" + + ! Check if Multipole library exists and is readable + inquire(FILE=filename, EXIST=file_exists, READ=readable) + if (.not. file_exists) then + nuc % mp_present = .FALSE. + return + elseif (readable(1:3) == 'NO') then + call fatal_error("Multipole library '" // trim(filename) // "' is not readable! & + &Change file permissions with chmod command.") + end if + + ! display message + call write_message("Loading Multipole XS table: " // filename, 6) + + allocate(nuc % multipole) + + ! Call the read routine + call multipole_read(filename, nuc % multipole, i_table) + nuc % mp_present = .TRUE. + + ! Update the maximum number of poles, l indices, and polynomial order + if(nuc % multipole % max_w > max_poles) then + max_poles = nuc % multipole % max_w + end if + + if(nuc % multipole % num_l > max_L) then + max_L = nuc % multipole % num_l + end if + + if(nuc % multipole % fit_order + 1 > max_poly) then + max_poly = nuc % multipole % fit_order + 1 + end if + + ! Recreate nu-fission tables + if(nuc % fissionable) then + call generate_nu_fission(nuc) + end if + + if(associated(nuc)) nullify(nuc) + + end subroutine read_multipole_data + !=============================================================================== ! READ_ESZ - reads through the ESZ block. This block contains the energy grid, ! total xs, absorption xs, elastic scattering xs, and heating numbers. diff --git a/src/ace_header.F90 b/src/ace_header.F90 index d7c298979c..2389545948 100644 --- a/src/ace_header.F90 +++ b/src/ace_header.F90 @@ -1,9 +1,10 @@ module ace_header - use constants, only: MAX_FILE_LEN, ZERO - use dict_header, only: DictIntInt - use endf_header, only: Tab1 - use stl_vector, only: VectorInt + use constants, only: MAX_FILE_LEN, ZERO + use dict_header, only: DictIntInt + use endf_header, only: Tab1 + use multipole_header, only: MultipoleArray + use stl_vector, only: VectorInt implicit none @@ -144,6 +145,10 @@ module ace_header integer :: urr_inelastic type(UrrData), pointer :: urr_data => null() + ! Multipole data + logical :: mp_present + type(MultipoleArray), pointer :: multipole => null() + ! Reactions integer :: n_reaction ! # of reactions type(Reaction), allocatable :: reactions(:) @@ -267,6 +272,9 @@ module ace_header ! Information for URR probability table use logical :: use_ptable ! in URR range with probability tables? real(8) :: last_prn + + ! Information for Doppler broadening + real(8) :: last_sqrtkT = ZERO ! last temperature in sqrt(Boltzmann constant * temperature (MeV)) end type NuclideMicroXS !=============================================================================== @@ -338,6 +346,11 @@ module ace_header deallocate(this % urr_data) end if + if (associated(this % multipole)) then + call this % multipole % clear() + deallocate(this % multipole) + end if + if (allocated(this % reactions)) then do i = 1, size(this % reactions) call this % reactions(i) % clear() diff --git a/src/constants.F90 b/src/constants.F90 index 1238677195..11d4849e1b 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -63,6 +63,7 @@ module constants real(8), parameter :: & PI = 3.1415926535898_8, & ! pi + SQRT_PI = 1.7724538509055_8, & ! square root of pi MASS_NEUTRON = 1.008664916_8, & ! mass of a neutron in amu MASS_NEUTRON_MEV = 939.565379_8, & ! mass of a neutron in MeV/c^2 MASS_PROTON = 1.007276466812_8, & ! mass of a proton in amu @@ -77,6 +78,7 @@ module constants TWO = 2.0_8, & THREE = 3.0_8, & FOUR = 4.0_8 + complex(8), parameter :: ONEI = (ZERO, ONE) ! ============================================================================ ! GEOMETRY-RELATED CONSTANTS diff --git a/src/cross_section.F90 b/src/cross_section.F90 index f874eb2a74..488ea21c4c 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -1,19 +1,31 @@ module cross_section - use ace_header, only: Nuclide, SAlphaBeta, Reaction, UrrData + use ace_header, only: Nuclide, SAlphaBeta, Reaction, UrrData use constants - use energy_grid, only: grid_method, log_spacing - use error, only: fatal_error - use fission, only: nu_total + use energy_grid, only: grid_method, log_spacing + use error, only: fatal_error + use fission, only: nu_total use global - use list_header, only: ListElemInt - use material_header, only: Material - use particle_header, only: Particle - use random_lcg, only: prn - use search, only: binary_search + use list_header, only: ListElemInt + use material_header, only: Material + use math, only: w, broaden_n_polynomials + use multipole_header, only: FORM_RM, FORM_MLBW, MP_EA, RM_RT, RM_RA, RM_RF, & + MLBW_RT, MLBW_RX, MLBW_RA, MLBW_RF, FIT_T, FIT_A, FIT_F, & + MultipoleArray, max_poly, max_L, max_poles + use particle_header, only: Particle + use random_lcg, only: prn + use search, only: binary_search implicit none + ! Allocatable arrays for multipole that are allocated once for speed purposes + complex(8), allocatable :: sigT_factor(:) + real(8), allocatable :: twophi(:) + real(8), allocatable :: broadened_polynomials(:) + logical :: mp_already_alloc = .FALSE. + +!$omp threadprivate(sigT_factor, twophi, broadened_polynomials, mp_already_alloc) + contains !=============================================================================== @@ -93,10 +105,10 @@ contains i_nuclide = mat % nuclide(i) ! 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, p % E, p % material, i, i_grid) + if (p % E /= micro_xs(i_nuclide) % last_E .or. mat % sqrtkT /= micro_xs(i_nuclide) % last_sqrtkT) then + call calculate_nuclide_xs(i_nuclide, i_sab, p % E, p % material, i, i_grid, mat % sqrtkT) else if (i_sab /= micro_xs(i_nuclide) % last_index_sab) then - call calculate_nuclide_xs(i_nuclide, i_sab, p % E, p % material, i, i_grid) + call calculate_nuclide_xs(i_nuclide, i_sab, p % E, p % material, i, i_grid, mat % sqrtkT) end if ! ======================================================================== @@ -133,7 +145,7 @@ contains ! given index in the nuclides array at the energy of the given particle !=============================================================================== - subroutine calculate_nuclide_xs(i_nuclide, i_sab, E, i_mat, i_nuc_mat, i_log_union) + subroutine calculate_nuclide_xs(i_nuclide, i_sab, E, i_mat, i_nuc_mat, i_log_union, sqrtkT) 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 @@ -141,11 +153,13 @@ contains integer, intent(in) :: i_nuc_mat ! index into nuclides array for a material integer, intent(in) :: i_log_union ! index into logarithmic mapping array or ! material union energy grid + real(8), intent(in) :: sqrtkT ! Square root of kT, material dependent integer :: i_grid ! index on nuclide energy grid integer :: i_low ! lower logarithmic mapping index integer :: i_high ! upper logarithmic mapping index real(8) :: f ! interp factor on nuclide energy grid + real(8) :: sigT, sigA, sigF ! Intermediate multipole variables type(Nuclide), pointer :: nuc type(Material), pointer :: mat @@ -153,53 +167,111 @@ contains nuc => nuclides(i_nuclide) mat => materials(i_mat) - ! Determine index on nuclide energy grid - select case (grid_method) - case (GRID_MAT_UNION) + ! If MP, don't interpolate, it's all already baked in. + if( nuc % mp_present .AND. & + (E >= nuc % multipole % start_E/1.0D6 .AND.& + E <= nuc % multipole % end_E/1.0D6)) then - i_grid = mat % nuclide_grid_index(i_nuc_mat, i_log_union) + ! Call multipole kernel + call multipole_eval(nuc % multipole, E, sqrtkT, sigT, sigA, sigF) - case (GRID_LOGARITHM) - ! Determine the energy grid index using a logarithmic mapping to reduce - ! the energy range over which a binary search needs to be performed + micro_xs(i_nuclide) % total = sigT + micro_xs(i_nuclide) % absorption = sigA + micro_xs(i_nuclide) % elastic = sigT - sigA - if (E < nuc % energy(1)) then - i_grid = 1 - elseif (E > nuc % energy(nuc % n_grid)) then - i_grid = nuc % n_grid - 1 + if (nuc % fissionable) then + micro_xs(i_nuclide) % fission = sigF + micro_xs(i_nuclide) % nu_fission = sigF * nu_total(nuc,E) else - ! Determine bounding indices based on which equal log-spaced interval - ! the energy is in - i_low = nuc % grid_index(i_log_union) - i_high = nuc % grid_index(i_log_union + 1) + 1 - - ! Perform binary search over reduced range - i_grid = binary_search(nuc % energy(i_low:i_high), & - i_high - i_low + 1, E) + i_low - 1 + micro_xs(i_nuclide) % fission = ZERO + micro_xs(i_nuclide) % nu_fission = ZERO end if - case (GRID_NUCLIDE) - ! Perform binary search on the nuclide energy grid in order to determine - ! which points to interpolate between + ! Ensure these values are set + ! Note, the only time either is used is in one of 4 places: + ! 1. physics.F90 - scatter - For inelastic scatter. + ! 2. physics.F90 - sample_fission - For partial fissions. + ! 3. tally.F90 - score_general - For tallying on MTxxx reactions. + ! 4. cross_section.F90 - calculate_urr_xs - For unresolved purposes. + ! It is worth noting that none of these occur in the resolved + ! resonance range, so the value here does not matter. + micro_xs(i_nuclide) % index_grid = 0 + micro_xs(i_nuclide) % interp_factor = ZERO + else + ! Determine index on nuclide energy grid + select case (grid_method) + case (GRID_MAT_UNION) - if (E <= nuc % energy(1)) then - i_grid = 1 - elseif (E > nuc % energy(nuc % n_grid)) then - i_grid = nuc % n_grid - 1 - else - i_grid = binary_search(nuc % energy, nuc % n_grid, E) + i_grid = mat % nuclide_grid_index(i_nuc_mat, i_log_union) + + case (GRID_LOGARITHM) + ! Determine the energy grid index using a logarithmic mapping to reduce + ! the energy range over which a binary search needs to be performed + + if (E < nuc % energy(1)) then + i_grid = 1 + elseif (E > nuc % energy(nuc % n_grid)) then + i_grid = nuc % n_grid - 1 + else + ! Determine bounding indices based on which equal log-spaced interval + ! the energy is in + i_low = nuc % grid_index(i_log_union) + i_high = nuc % grid_index(i_log_union + 1) + 1 + + ! Perform binary search over reduced range + i_grid = binary_search(nuc % energy(i_low:i_high), & + i_high - i_low + 1, E) + i_low - 1 + end if + + case (GRID_NUCLIDE) + ! Perform binary search on the nuclide energy grid in order to determine + ! which points to interpolate between + + if (E <= nuc % energy(1)) then + i_grid = 1 + elseif (E > nuc % energy(nuc % n_grid)) then + i_grid = nuc % n_grid - 1 + else + i_grid = binary_search(nuc % energy, nuc % n_grid, E) + end if + + end select + + ! check for rare case where two energy points are the same + if (nuc % energy(i_grid) == nuc % energy(i_grid+1)) i_grid = i_grid + 1 + + ! calculate interpolation factor + 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 + + ! Initialize nuclide cross-sections to zero + micro_xs(i_nuclide) % fission = ZERO + micro_xs(i_nuclide) % nu_fission = ZERO + + ! Calculate microscopic nuclide total cross section + micro_xs(i_nuclide) % total = (ONE - f) * nuc % total(i_grid) & + + f * nuc % total(i_grid+1) + + ! Calculate microscopic nuclide elastic cross section + micro_xs(i_nuclide) % elastic = (ONE - f) * nuc % elastic(i_grid) & + + f * nuc % elastic(i_grid+1) + + ! Calculate microscopic nuclide absorption cross section + micro_xs(i_nuclide) % absorption = (ONE - f) * nuc % absorption( & + i_grid) + f * nuc % absorption(i_grid+1) + + if (nuc % fissionable) then + ! Calculate microscopic nuclide total cross section + micro_xs(i_nuclide) % fission = (ONE - f) * nuc % fission(i_grid) & + + f * nuc % fission(i_grid+1) + + ! Calculate microscopic nuclide nu-fission cross section + micro_xs(i_nuclide) % nu_fission = (ONE - f) * nuc % nu_fission( & + i_grid) + f * nuc % nu_fission(i_grid+1) end if - - end select - - ! check for rare case where two energy points are the same - if (nuc % energy(i_grid) == nuc % energy(i_grid+1)) i_grid = i_grid + 1 - - ! calculate interpolation factor - 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 + end if ! Initialize sab treatment to false micro_xs(i_nuclide) % index_sab = NONE @@ -208,32 +280,6 @@ contains ! Initialize URR probability table treatment to false micro_xs(i_nuclide) % use_ptable = .false. - ! Initialize nuclide cross-sections to zero - micro_xs(i_nuclide) % fission = ZERO - micro_xs(i_nuclide) % nu_fission = ZERO - - ! Calculate microscopic nuclide total cross section - micro_xs(i_nuclide) % total = (ONE - f) * nuc % total(i_grid) & - + f * nuc % total(i_grid+1) - - ! Calculate microscopic nuclide elastic cross section - micro_xs(i_nuclide) % elastic = (ONE - f) * nuc % elastic(i_grid) & - + f * nuc % elastic(i_grid+1) - - ! Calculate microscopic nuclide absorption cross section - micro_xs(i_nuclide) % absorption = (ONE - f) * nuc % absorption( & - i_grid) + f * nuc % absorption(i_grid+1) - - if (nuc % fissionable) then - ! Calculate microscopic nuclide total cross section - micro_xs(i_nuclide) % fission = (ONE - f) * nuc % fission(i_grid) & - + f * nuc % fission(i_grid+1) - - ! Calculate microscopic nuclide nu-fission cross section - micro_xs(i_nuclide) % nu_fission = (ONE - f) * nuc % nu_fission( & - i_grid) + f * nuc % nu_fission(i_grid+1) - end if - ! If there is S(a,b) data for this nuclide, we need to do a few ! things. Since the total cross section was based on non-S(a,b) data, we ! need to correct it by subtracting the non-S(a,b) elastic cross section and @@ -525,6 +571,185 @@ contains end function find_energy_index +!=============================================================================== +! MULTIPOLE_EVAL_ALLOCATE allocates fixed-length arrays that vary based on +! what nuclides are loaded into the problem +!=============================================================================== + + subroutine multipole_eval_allocate() + allocate(sigT_factor(max_L)) + allocate(twophi(max_L)) + allocate(broadened_polynomials(max_poly)) + + mp_already_alloc = .TRUE. + end subroutine + +!=============================================================================== +! MULTIPOLE_EVAL evaluates the windowed multipole equations for cross +! sections in the resolved resonance regions +!=============================================================================== + + subroutine multipole_eval(multipole, Emev, sqrtkT, sigT, sigA, sigF) + type(MultipoleArray), intent(in) :: multipole !< The windowed multipole object to process. + real(8), intent(in) :: Emev !< The energy at which to evaluate the cross section in MeV + real(8), intent(in) :: sqrtkT !< The temperature in the form sqrt(kT (in eV)), at which to evaluate the cross section. + real(8), intent(out) :: sigT !< Total cross section + real(8), intent(out) :: sigA !< Absorption cross section + real(8), intent(out) :: sigF !< Fission cross section + complex(8) :: PSIIKI + complex(8) :: CDUM1 + complex(8) :: w_val + complex(8) :: Z + real(8) :: sqrtE + real(8) :: invE + real(8) :: DOPP + real(8) :: DOPP_ECOEF + real(8) :: temp + real(8) :: E + integer :: iP + integer :: iC + integer :: iW + integer :: startw + integer :: startw_1 + integer :: startw_endw + integer :: endw + + ! Convert to eV + E = Emev * 1.0D6 + + sqrtE = sqrt(E) + invE = E**(-1) + + if(mp_already_alloc .eqv. .FALSE.) then + call multipole_eval_allocate() + end if + + ! Locate us + iW = floor((sqrtE - sqrt(multipole % start_E))/multipole % spacing + 1.0_8) + + startw = multipole % w_start(iW) + startw_1 = startw - 1 ! This is an index shift parameter. + endw = multipole % w_end(iW) + startw_endw = endw - startw + 1 + + ! Fill in factors + if (startw <= endw) then + call fill_factors(multipole, sqrtE, sigT_factor, twophi, multipole % num_l) + end if + + ! Generate some doppler broadening parameters + + ! DOPP_ECOEF is inverse of dopp, divided by E, multiplied by sqrt(pi). + DOPP = multipole % sqrtAWR/sqrtKT + DOPP_ECOEF = DOPP*invE*SQRT_PI + + sigT = 0.0_8 + sigA = 0.0_8 + sigF = 0.0_8 + ! Evaluate linefit first + + if(sqrtkT /= 0 .AND. multipole % broaden_poly(iW) == 1) then ! Broaden the curvefit. + call broaden_n_polynomials(E, DOPP, multipole % fit_order + 1, broadened_polynomials) + + do iC = 1,multipole % fit_order+1 + sigT = sigT + multipole % curvefit(FIT_T, iC, iW)*broadened_polynomials(iC) + sigA = sigA + multipole % curvefit(FIT_A, iC, iW)*broadened_polynomials(iC) + if (multipole % fissionable) then + sigF = sigF + multipole % curvefit(FIT_F, iC, iW)*broadened_polynomials(iC) + end if + end do + else ! Evaluate as if it were a polynomial + temp = invE + do iC = 1,multipole % fit_order+1 + + sigT = sigT + multipole % curvefit(FIT_T, iC, iW)*temp + sigA = sigA + multipole % curvefit(FIT_A, iC, iW)*temp + if (multipole % fissionable) then + sigF = sigF + multipole % curvefit(FIT_F, iC, iW)*temp + end if + + temp = temp * sqrtE + end do + end if + + ! Then get the poles we want and broaden them. + + if (sqrtkT == 0.0_8) then + ! If at 0K, use asymptotic form. + do iP = startw, endw + PSIIKI = -ONEI/(multipole % data(MP_EA, iP) - sqrtE) + CDUM1 = PSIIKI/E + if (multipole % formalism == FORM_MLBW) then + sigT = sigT + real(multipole % data(MLBW_RT, iP)*CDUM1* & + sigT_factor(multipole % l_value(iP))) & + + real(multipole % data(MLBW_RX, iP)*CDUM1) + sigA = sigA + real(multipole % data(MLBW_RA, iP)*CDUM1) + sigF = sigF + real(multipole % data(MLBW_RF, iP)*CDUM1) + else if (multipole % formalism == FORM_RM) then + sigT = sigT + real(multipole % data(RM_RT, iP)*CDUM1* & + sigT_factor(multipole % l_value(iP))) + sigA = sigA + real(multipole % data(RM_RA, iP)*CDUM1) + sigF = sigF + real(multipole % data(RM_RF, iP)*CDUM1) + end if + end do + else + ! At temperature, use Faddeeva function-based form. + if(endw >= startw) then + do iP = startw, endw + Z = (sqrtE - multipole % data(MP_EA, iP))*DOPP + call w(Z, w_val) + w_val = w_val*DOPP_ECOEF + + if (multipole % formalism == FORM_MLBW) then + sigT = sigT + real((multipole % data(MLBW_RT, iP)* & + sigT_factor(multipole%l_value(iP)) + & + multipole % data(MLBW_RX, iP))*w_val) + sigA = sigA + real(multipole % data(MLBW_RA, iP)*w_val) + sigF = sigF + real(multipole % data(MLBW_RF, iP)*w_val) + else if (multipole % formalism == FORM_RM) then + sigT = sigT + real(multipole % data(RM_RT, iP)*w_val* & + sigT_factor(multipole % l_value(iP))) + sigA = sigA + real(multipole % data(RM_RA, iP)*w_val) + sigF = sigF + real(multipole % data(RM_RF, iP)*w_val) + end if + end do + end if + end if + end subroutine + +!=============================================================================== +! FILL_FACTORS calculates the value of phi, the hardsphere phase shift factor, +! and sigT_factor, a factor inside of the sigT equation not present in the +! sigA and sigF equations. +!=============================================================================== + + subroutine fill_factors(multipole, sqrtE, sigT_factor, twophi, max_L) + type(MultipoleArray), intent(in) :: multipole + real(8), intent(in) :: sqrtE + integer, intent(in) :: max_L + complex(8), intent(out) :: sigT_factor(max_L) + real(8), intent(out) :: twophi(max_L) + + integer :: iL + real(8) :: arg + + do iL = 1, max_L + twophi(iL) = multipole%pseudo_k0RS(iL)*sqrtE + if (iL == 2) then + twophi(iL) = twophi(iL) - atan(twophi(iL)) + else if (iL == 3) then + arg = 3.0_8*twophi(iL)/(3.0_8-twophi(iL)**2) + twophi(iL) = twophi(iL) - atan(arg) + else if (iL == 4) then + arg = twophi(iL)*(15.0_8-twophi(iL)**2)/(15.0_8-6.0_8*twophi(iL)**2) + twophi(iL) = twophi(iL) - atan(arg) + end if + end do + + twophi = 2.0_8 * twophi + sigT_factor = cmplx(cos(twophi),-sin(twophi), KIND=8) + end subroutine + !=============================================================================== ! 0K_ELASTIC_XS determines the microscopic 0K elastic cross section ! for a given nuclide at the trial relative energy used in resonance scattering diff --git a/src/hdf5_interface.F90 b/src/hdf5_interface.F90 index 01e50d983a..14c9b9eb19 100644 --- a/src/hdf5_interface.F90 +++ b/src/hdf5_interface.F90 @@ -62,6 +62,7 @@ module hdf5_interface module procedure read_string_1D module procedure read_tally_result_1D module procedure read_tally_result_2D + module procedure read_complex_2D end interface read_dataset public :: write_dataset @@ -1921,4 +1922,93 @@ contains mpio = (driver == H5FD_MPIO_F) end function using_mpio_device +!=============================================================================== +! READ_COMPLEX_2D reads double precision complex 2-D array data as output by +! the h5py HDF5 python module. +!=============================================================================== + + subroutine read_complex_2D(group_id, name, buffer, indep) + integer(HID_T), intent(in) :: group_id + character(*), intent(in) :: name ! name of data + complex(8), intent(inout), target :: buffer(:,:) ! data to write + logical, intent(in), optional :: indep ! independent I/O + + integer(HSIZE_T) :: dims(2) + + dims(:) = shape(buffer) + if (present(indep)) then + call read_complex_2D_explicit(group_id, dims, name, buffer, indep) + else + call read_complex_2D_explicit(group_id, dims, name, buffer) + end if + end subroutine read_complex_2D + + subroutine read_complex_2D_explicit(group_id, dims, name, buffer, indep) + integer(HID_T), intent(in) :: group_id + integer(HSIZE_T), intent(in) :: dims(2) + character(*), intent(in) :: name ! name of data + complex(8), intent(inout), target :: buffer(dims(1),dims(2)) + logical, intent(in), optional :: indep ! independent I/O + + real(8), target :: buffer_r(dims(1), dims(2)) + real(8), target :: buffer_i(dims(1), dims(2)) + + integer(HSIZE_T) :: i, j + + integer :: hdf5_err + integer :: data_xfer_mode +#ifdef PHDF5 + integer(HID_T) :: plist ! property list +#endif + integer(HID_T) :: dset ! data set handle + type(c_ptr) :: f_ptr_r, f_ptr_i + + ! Components needed for complex type support + integer(HID_T) :: dtype_real + integer(HID_T) :: dtype_imag + integer(SIZE_T) :: size_double + integer :: error + + ! Create the complex type + call h5tget_size_f(H5T_NATIVE_DOUBLE, size_double, error) + + ! Insert the 'r' and 'i' identifiers + call h5tcreate_f(H5T_COMPOUND_F, size_double, dtype_real, error) + call h5tcreate_f(H5T_COMPOUND_F, size_double, dtype_imag, error) + call h5tinsert_f(dtype_real, "r", 0_8, H5T_NATIVE_DOUBLE, error) + call h5tinsert_f(dtype_imag, "i", 0_8, H5T_NATIVE_DOUBLE, error) + + ! Set up collective vs. independent I/O + data_xfer_mode = H5FD_MPIO_COLLECTIVE_F + if (present(indep)) then + if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F + end if + + call h5dopen_f(group_id, trim(name), dset, hdf5_err) + f_ptr_r = c_loc(buffer_r) + f_ptr_i = c_loc(buffer_i) + + if (using_mpio_device(group_id)) then +#ifdef PHDF5 + call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) + call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) + call h5dread_f(dset, dtype_real, f_ptr_r, hdf5_err, xfer_prp=plist) + call h5dread_f(dset, dtype_imag, f_ptr_i, hdf5_err, xfer_prp=plist) + call h5pclose_f(plist, hdf5_err) +#endif + else + call h5dread_f(dset, dtype_real, f_ptr_r, hdf5_err) + call h5dread_f(dset, dtype_imag, f_ptr_i, hdf5_err) + end if + + ! Reconstitute the complex numbers + do i = 1,dims(1) + do j = 1,dims(2) + buffer(i,j) = cmplx(buffer_r(i,j), buffer_i(i,j), kind=8) + end do + end do + + call h5dclose_f(dset, hdf5_err) + end subroutine read_complex_2D_explicit + end module hdf5_interface diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 1427458901..73a1db453f 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -1854,6 +1854,7 @@ contains real(8) :: temp_dble ! temporary double prec. real logical :: file_exists ! does materials.xml exist? logical :: sum_density ! density is taken to be sum of nuclide densities + logical :: temp_known ! Has the temperature yet been defined? character(12) :: name ! name of isotope, e.g. 92235.03c character(12) :: alias ! alias of nuclide, e.g. U-235.03c character(MAX_WORD_LEN) :: units ! units on density @@ -1866,6 +1867,7 @@ contains type(Node), pointer :: doc => null() type(Node), pointer :: node_mat => null() type(Node), pointer :: node_dens => null() + type(Node), pointer :: node_temp => null() type(Node), pointer :: node_nuc => null() type(Node), pointer :: node_ele => null() type(Node), pointer :: node_sab => null() @@ -1936,6 +1938,17 @@ contains cycle end if + ! ======================================================================= + ! READ AND PARSE TAG + if (check_for_node(node_mat, "temperature")) then + call get_node_ptr(node_mat, "temperature", node_temp) + call get_node_value(node_temp, "value", temp_dble) + mat % sqrtkT = sqrt(temp_dble * K_BOLTZMANN * 1.0D6) + temp_known = .TRUE. + else + temp_known = .FALSE. + end if + ! ======================================================================= ! READ AND PARSE TAG @@ -2042,6 +2055,16 @@ contains call get_node_value(node_nuc, "xs", name) name = trim(temp_str) // "." // trim(name) + ! If needed, look up temperature + if (temp_known .eqv. .FALSE.) then + ! Find xs_listing and set the name/alias according to the listing + index_list = xs_listing_dict % get_key(to_lower(name)) + if(xs_listings(index_list) % kT /= 0.0_8) then + mat % sqrtkT = sqrt(xs_listings(index_list) % kT * 1.0D6) + temp_known = .TRUE. + end if + end if + ! save name and density to list call list_names % append(name) @@ -2130,6 +2153,16 @@ contains temp_str = "data" end if + ! If still needed, look up temperature + if (temp_known .eqv. .FALSE.) then + ! Find xs_listing and set kT + index_list = xs_listing_dict % get_key(to_lower(list_names % tail % data)) + if(xs_listings(index_list) % kT /= 0.0_8) then + mat % sqrtkT = sqrt(xs_listings(index_list) % kT * 1.0D6) + temp_known = .TRUE. + end if + end if + ! Set ace or iso-in-lab scattering for each nuclide in element do k = 1, n_nuc_ele if (adjustl(to_lower(temp_str)) == "iso-in-lab") then @@ -2144,6 +2177,12 @@ contains end do NATURAL_ELEMENTS + ! If still undefined, set the temperature to zero + if (temp_known .eqv. .FALSE.) then + mat % sqrtkT = 0.0_8 + temp_known = .TRUE. + end if + ! ======================================================================== ! COPY NUCLIDES TO ARRAYS IN MATERIAL diff --git a/src/material_header.F90 b/src/material_header.F90 index 91c4cdfb82..397fa0cd96 100644 --- a/src/material_header.F90 +++ b/src/material_header.F90 @@ -13,6 +13,7 @@ module material_header integer, allocatable :: nuclide(:) ! index in nuclides array real(8) :: density ! total atom density in atom/b-cm real(8), allocatable :: atom_density(:) ! nuclide atom density in atom/b-cm + real(8) :: sqrtkT ! sqrt(kT), kT in eV ! Energy grid information integer :: n_grid ! # of union material grid points diff --git a/src/math.F90 b/src/math.F90 index 9a64c88d7d..960047c991 100644 --- a/src/math.F90 +++ b/src/math.F90 @@ -2,9 +2,25 @@ module math use constants use random_lcg, only: prn + use ISO_C_BINDING implicit none +!=============================================================================== +! FADDEEVA_W evaluates the scaled complementary error function. This +! interfaces with the MIT C library +!=============================================================================== + + interface + COMPLEX (C_DOUBLE_COMPLEX) FUNCTION faddeeva_w & + (Z, RELERR) BIND(C, NAME='Faddeeva_w') + use ISO_C_BINDING + implicit none + COMPLEX(C_DOUBLE_COMPLEX), value :: Z + REAL(C_DOUBLE) , value :: RELERR + end function faddeeva_w + end interface + contains !=============================================================================== @@ -659,4 +675,90 @@ contains end function watt_spectrum +!=============================================================================== +! W acts as a front end to the MIT Faddeeva function, Faddeeva_w. +!=============================================================================== + + subroutine w(Z,wv) + use ISO_C_BINDING + complex(C_DOUBLE_COMPLEX), intent(inout) :: Z ! The point to evaluate Z at + complex(8), intent(out) :: wv ! The resulting w(Z) value + real(C_DOUBLE) :: relerr ! Target relative error in inner loop of MIT Faddeeva + logical :: mangle ! Do we need to perform the special mangling step? + + ! There is some special mangling the true W function in WHOPPER does. I + ! replicate it here. + if(aimag(Z) < 0) then + Z = conjg(Z) + mangle = .TRUE. + else + mangle = .FALSE. + end if + + ! Calculate Faddeeva + relerr = 0.0_8 + wv = faddeeva_w(Z,relerr) + + ! Finish mangling the results + if(mangle .eqv. .TRUE.) then + wv = -conjg(wv) + end if + end subroutine + +!=============================================================================== +! BROADEN_N_POLYNOMIALS doppler broadens polynomials of the form +! a/En + b/sqrt(En) + c + d sqrt(En) ... +! exactly and quickly. +!=============================================================================== + + subroutine broaden_n_polynomials(En, DOPP, n, factors) + real(8), intent(in) :: En ! Energy to evaluate at + real(8), intent(in) :: DOPP ! sqrt(atomic weight ratio / kT), kT given in eV. + integer, intent(in) :: n ! number of components to polynomial + real(8), intent(out):: factors(n) ! output leading coefficient + + integer :: i + + real(8) :: sqrtE + real(8) :: beta + real(8) :: halfinvDOPP2 + real(8) :: quarterinvDOPP4 + real(8) :: erfbeta + real(8) :: exp_m_beta2 + + sqrtE = sqrt(En) + beta = sqrtE*DOPP + halfinvDOPP2 = 0.5_8/DOPP**2 + quarterinvDOPP4 = 0.25_8/DOPP**4 + + if (beta > 6.0_8) then + ! Save time, ERF(6) is 1 to machine precision. + ! beta/sqrtpi*exp(-beta**2) is also approximately 1 machine epsilon. + erfBeta = 1.0_8 + exp_m_beta2 = 0.0_8 + else + erfBeta = erf(beta) + exp_m_beta2 = exp(-beta**2) + end if + + ! Assume that, for sure, we'll use a second order (1/E, 1/V, const) + ! fit, and no less. + + factors(1) = erfbeta/En + factors(2) = 1.0_8/sqrtE + factors(3) = factors(1)*(halfinvDOPP2 + En) + exp_m_beta2/(beta*SQRT_PI) + + ! Perform recursive broadening of high order components + do i = 1,n-3 + if (i /= 1) then + factors(i+3) = -factors(i-1)*(i - 1.0_8)*i*quarterinvDOPP4 + & + factors(i+1)*(En + (1.0_8 + 2.0_8*i)*halfinvDOPP2) + else + ! Although it's mathematically identical, factors(0) will contain + ! nothing, and we don't want to have to worry about memory. + factors(i+3) = factors(i+1)*(En + (1.0_8 + 2.0_8*i)*halfinvDOPP2) + end if + end do + end subroutine broaden_n_polynomials + end module math diff --git a/src/multipole.F90 b/src/multipole.F90 new file mode 100644 index 0000000000..cbfef07449 --- /dev/null +++ b/src/multipole.F90 @@ -0,0 +1,199 @@ +module multipole + + use constants + use global + use hdf5 + use hdf5_interface + use multipole_header, only: MultipoleArray, FIT_T, FIT_A, FIT_F, max_L, & + max_poles, max_poly, MP_FISS, FORM_MLBW, FORM_RM + + implicit none + +contains + +!--------------------------------------------------------------------------- +! MULTIPOLE_READ Reads in a multipole HDF5 file with the original API +! specification. Subject to change as the library format matures. +!--------------------------------------------------------------------------- + subroutine multipole_read(filename, multipole, i_table) + character(len=*), intent(in) :: filename ! Filename of the multipole library to load + type(MultipoleArray), intent(out), target :: multipole ! The object to fill + integer, intent(in) :: i_table ! index in nuclides/sab_tables + + type(Nuclide), pointer :: nuc => null() + + integer(HID_T) :: file_id + integer(HID_T) :: group_id + + ! Intermediate loading components + integer :: NMT + integer :: i, j, k + integer, allocatable :: MT(:) + logical :: accumulated_fission + character(len=3) :: MT_string + character(len=24) :: MT_n ! Takes the form '/nuclide/reactions/MT???' + integer :: is_fissionable + + nuc => nuclides(i_table) + + ! Open file for reading and move into the /isotope group + file_id = file_open(filename, 'r', parallel=.true.) + group_id = open_group(file_id, "/nuclide") + + ! Load in all the array size scalars + call read_dataset(group_id, "length", multipole % length) + call read_dataset(group_id, "windows", multipole % windows) + call read_dataset(group_id, "num_l", multipole % num_l) + call read_dataset(group_id, "fit_order", multipole % fit_order) + call read_dataset(group_id, "max_w", multipole % max_w) + call read_dataset(group_id, "fissionable", is_fissionable) + if (is_fissionable == MP_FISS) then + multipole % fissionable = .true. + else + multipole % fissionable = .false. + end if + call read_dataset(group_id, "formalism", multipole % formalism) + + call read_dataset(group_id, "spacing", multipole % spacing) + call read_dataset(group_id, "sqrtAWR", multipole % sqrtAWR) + call read_dataset(group_id, "start_E", multipole % start_E) + call read_dataset(group_id, "end_E", multipole % end_E) + + ! Allocate the multipole array components + call multipole % allocate() + + ! Read in arrays + call read_dataset(group_id, "data", multipole % data) + call read_dataset(group_id, "pseudo_K0RS", multipole % pseudo_k0RS) + call read_dataset(group_id, "l_value", multipole % l_value) + call read_dataset(group_id, "w_start", multipole % w_start) + call read_dataset(group_id, "w_end", multipole % w_end) + call read_dataset(group_id, "broaden_poly", multipole % broaden_poly) + + call read_dataset(group_id, "curvefit", multipole % curvefit) + + ! Delete ACE pointwise data + call read_dataset(group_id, "n_grid", nuc % n_grid) + + deallocate(nuc % energy) + deallocate(nuc % total) + deallocate(nuc % elastic) + deallocate(nuc % fission) + deallocate(nuc % nu_fission) + deallocate(nuc % absorption) + + allocate(nuc % energy(nuc % n_grid)) + allocate(nuc % total(nuc % n_grid)) + allocate(nuc % elastic(nuc % n_grid)) + allocate(nuc % fission(nuc % n_grid)) + allocate(nuc % nu_fission(nuc % n_grid)) + allocate(nuc % absorption(nuc % n_grid)) + + nuc % total = ZERO + nuc % absorption = ZERO + nuc % fission = ZERO + + ! Read in new energy axis (converting eV to MeV) + call read_dataset(group_id, "energy_points", nuc % energy) + nuc % energy = nuc % energy / 1.0D6 + + ! Get count and list of MT tables + call read_dataset(group_id, "MT_count", NMT) + allocate(MT(NMT)) + + call read_dataset(group_id, "MT_list", MT) + + call close_group(group_id) + + accumulated_fission = .false. + + ! Loop over each MT entry and load it into a reaction. + do i = 1, NMT + write(MT_string, '(I3.3)') MT(i) + MT_n = "/nuclide/reactions/MT" // MT_string + + group_id = open_group(file_id, MT_n) + + ! Each MT needs to be treated slightly differently. + select case (MT(i)) + case(ELASTIC) + call read_dataset(group_id, "MT_sigma", nuc % elastic) + nuc % total = nuc % total + nuc % elastic + case(N_FISSION) + call read_dataset(group_id, "MT_sigma", nuc % fission) + nuc % total = nuc % total + nuc % fission + nuc % absorption = nuc % absorption + nuc % fission + accumulated_fission = .true. + case default + ! Search through all of our secondary reactions + do j = 1, nuc % n_reaction + if (nuc % reactions(j) % MT == MT(i)) then + ! Match found + + ! Individual Fission components exist, so remove the combined + ! fission cross section. + if ( (MT(i) == N_F .OR. MT(i) == N_NF .OR. MT(i) == N_2NF & + .OR. MT(i) == N_3NF) .AND. (accumulated_fission .eqv. .TRUE.)) then + nuc % total = nuc % total - nuc % fission + nuc % absorption = nuc % absorption - nuc % fission + nuc % fission = 0.0_8 + accumulated_fission = .FALSE. + end if + + deallocate(nuc % reactions(j) % sigma) + allocate(nuc % reactions(j) % sigma(nuc % n_grid)) + + call read_dataset(group_id, "MT_sigma", nuc % reactions(j) % sigma) + call read_dataset(group_id, "Q_value", nuc % reactions(j) % Q_value) + call read_dataset(group_id, "threshold", nuc % reactions(j) % threshold) + nuc % reactions(j) % threshold = 1 ! TODO: reconsider implications. + nuc % reactions(j) % Q_value = nuc % reactions(j) % Q_value / 1.0D6 + + ! Update edist values TODO: does this do anything when + ! the version of data is identical? + if (associated(nuc % reactions(j) % edist)) then + if (nuc % reactions(j) % edist % law == 3) then + ! Search for first XS /= 0 for the threshold. + searchQ: do k = 1, nuc % n_grid + if (nuc % reactions(j) % sigma(k) /= ZERO) then + if (k /= 1) then + nuc % reactions(j) % edist % data(1) = nuc % energy(k-1) + end if + exit searchQ + end if + end do searchQ + end if + end if + + ! Accumulate total + if (MT(i) /= N_LEVEL .AND. MT(i) <= N_DA) then + nuc % total = nuc % total + nuc % reactions(j) % sigma + end if + + ! Accumulate absorption + if (MT(i) >= N_GAMMA .and. MT(i) <= N_DA) then + nuc % absorption = nuc % absorption + nuc % reactions(j) % sigma + end if + + ! Accumulate fission (if needed) + if ( (MT(i) == N_F .OR. MT(i) == N_NF .OR. MT(i) == N_2NF & + .OR. MT(i) == N_3NF) ) then + nuc % fission = nuc % fission + nuc % reactions(j) % sigma + nuc % absorption = nuc % absorption + nuc % reactions(j) % sigma + end if + end if + end do + end select + + call close_group(group_id) + end do + + ! Close file + call file_close(file_id) + + ! Close nuc + if(associated(nuc)) nullify(nuc) + + end subroutine multipole_read + +end module multipole diff --git a/src/multipole_header.F90 b/src/multipole_header.F90 new file mode 100644 index 0000000000..58153ae032 --- /dev/null +++ b/src/multipole_header.F90 @@ -0,0 +1,152 @@ +module multipole_header + + implicit none + + !======================================================================== + ! Multipole related constants + + ! Formalisms + integer, parameter :: FORM_MLBW = 2, & + FORM_RM = 3, & + FORM_LRM = 7 + + ! Constants that determine which value to access + integer, parameter :: MP_EA = 1 ! Pole + + ! Reich-Moore indices + integer, parameter :: RM_RT = 2, & ! Residue total + RM_RA = 3, & ! Residue absorption + RM_RF = 4 ! Residue fission + + ! Multi-level Breit Wigner indices + integer, parameter :: MLBW_RT = 2, & ! Residue total + MLBW_RX = 3, & ! Residue compettitive + MLBW_RA = 4, & ! Residue absorption + MLBW_RF = 5 ! Residue fission + + ! Polynomial fit indices + integer, parameter :: FIT_T = 1, & ! Total + FIT_A = 2, & ! Absorption + FIT_F = 3 ! Fission + + ! Value of 'true' when checking if nuclide is fissionable + integer, parameter :: MP_FISS = 1 + + ! These variables store the maximum value from every nuclide in order + ! to preallocate some arrays to improve performance. + integer :: max_poly ! Maximum number of polynomials we expect + integer :: max_poles ! Maximum number of poles in the problem for allocation + integer :: max_L ! Maximum L value for allocation + +!=============================================================================== +! MULTIPOLE contains all the components needed for the windowed multipole +! temperature dependent cross section libraries for the resolved resonance +! region. +!=============================================================================== + + type MultipoleArray + + !========================================================================= + ! Isotope Properties + logical :: fissionable = .false. ! Is this isotope fissionable? + integer :: length ! Number of poles + integer, allocatable :: l_value(:) ! The l index of the pole + real(8), allocatable :: pseudo_k0RS(:) ! pseudo_k0RS for each of l + complex(8), allocatable :: data(:,:) ! Contains all of the pole-residue data + real(8) :: sqrtAWR ! Square root of the atomic weight ratio + + !========================================================================= + ! Windows + + integer :: windows ! Number of windows + integer :: fit_order ! Order of the fit. 1 linear, 2 quadratic, etc. + real(8) :: start_E ! Start energy for the windows + real(8) :: end_E ! End energy for the windows + real(8) :: spacing ! The actual spacing in sqrt(E) space. + ! spacing = sqrt(multipole_w%endE - multipole_w%startE)/multipole_w%windows + integer, allocatable :: w_start(:) ! Contains the index of the pole at the start of the window + integer, allocatable :: w_end(:) ! Contains the index of the pole at the end of the window + real(8), allocatable :: curvefit(:,:,:) ! Contains the fitting function. (reaction type, coeff index, window index) + + integer, allocatable :: broaden_poly(:) ! if 1, broaden, if 0, don't. + + !========================================================================= + ! Storage Helpers + integer :: num_l + integer :: max_w + + integer :: formalism + + contains + procedure :: clear => multipole_clear ! Deallocates Multipole + procedure :: allocate => multipole_allocate ! Allocates Multipole + end type MultipoleArray + +contains + +!=============================================================================== +! MULTIPOLE_CLEAR resets and deallocates data in Multipole. +!=============================================================================== + + subroutine multipole_clear(this) + class(MultipoleArray), intent(inout) :: this + + if (allocated(this % data)) then + deallocate(this % data) + deallocate(this % w_start) + deallocate(this % w_end) + deallocate(this % curvefit) + + deallocate(this % l_value) + deallocate(this % pseudo_k0RS) + end if + end subroutine + +!=============================================================================== +! MULTIPOLE_ALLOCATE allocates necessary data for Multipole. +!=============================================================================== + + subroutine multipole_allocate(multipole) + class(MultipoleArray), intent(inout) :: multipole ! Multipole object to allocate. + + ! This function assumes length, numL, fissionable, windows, fitorder, + ! and formalism are known + + ! Allocate the pole-residue storage. + ! MLBW has one more pole than Reich-Moore, and fissionable nuclides + ! have further one more. + if (multipole % formalism == FORM_MLBW) then + if (multipole % fissionable) then + allocate(multipole % data(5, multipole % length)) + else + allocate(multipole % data(4, multipole % length)) + end if + else if (multipole % formalism == FORM_RM) then + if (multipole % fissionable) then + allocate(multipole % data(4, multipole % length)) + else + allocate(multipole % data(3, multipole % length)) + end if + end if + + ! Allocate the l value table for each pole-residue set. + allocate(multipole % l_value(multipole % length)) + + ! Allocate the table of pseudo_k0RS values at each l. + allocate(multipole % pseudo_k0RS(multipole % num_l)) + + ! Allocate window start, window end + allocate(multipole % w_start(multipole % windows)) + allocate(multipole % w_end(multipole % windows)) + + ! Allocate broaden_poly + allocate(multipole % broaden_poly(multipole % windows)) + + ! Allocate curvefit + if(multipole % fissionable) then + allocate(multipole % curvefit(FIT_F, multipole % fit_order+1, multipole % windows)) + else + allocate(multipole % curvefit(FIT_A, multipole % fit_order+1, multipole % windows)) + end if + end subroutine +end module multipole_header From cd20c2b82d13e4839cf6dbbbc0d5e0bc37cca358 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Mon, 18 Jan 2016 16:28:11 -0500 Subject: [PATCH 185/650] Fix error with void fills in universe.py --- openmc/universe.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/openmc/universe.py b/openmc/universe.py index ccd0cb27c3..a828d8da90 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -402,22 +402,23 @@ class Cell(object): if len(self._name) > 0: element.set("name", str(self._name)) - if isinstance(self._fill, openmc.Material): - element.set("material", str(self._fill._id)) + if isinstance(self.fill, basestring): + assert self.fill.strip().lower() == 'void' + element.set("material", "void") - elif isinstance(self._fill, Iterable): + elif isinstance(self.fill, openmc.Material): + element.set("material", str(self.fill.id)) + + elif isinstance(self.fill, Iterable): element.set("material", ' '.join([m if m == 'void' else str(m.id) for m in self.fill])) - elif isinstance(self._fill, (Universe, Lattice)): - element.set("fill", str(self._fill._id)) + elif isinstance(self.fill, (Universe, Lattice)): + element.set("fill", str(self.fill.id)) self._fill.create_xml_subelement(xml_element) - elif self._fill.strip().lower() == "void": - element.set("material", "void") - else: - element.set("fill", str(self._fill)) + element.set("fill", str(self.fill)) self._fill.create_xml_subelement(xml_element) if self.region is not None: From eb4a62e5f7c4f52181f90e4c9aa69d950238e4f1 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Mon, 18 Jan 2016 17:27:42 -0500 Subject: [PATCH 186/650] Allow link-time-optimization with GCC --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f0f06d47ba..18d028a4bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -122,7 +122,7 @@ if(CMAKE_Fortran_COMPILER_ID STREQUAL GNU) list(APPEND ldflags -pg) endif() if(optimize) - list(APPEND f90flags -O3) + list(APPEND f90flags -O3 -flto -fuse-linker-plugin) endif() if(openmp) list(APPEND f90flags -fopenmp) From 7bb00368f23aa2cfdd3cb3528a5e5eaa870808c5 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Mon, 18 Jan 2016 18:44:16 -0500 Subject: [PATCH 187/650] Added test for MGXS library subdomain-averaging across distribcells --- openmc/aggregate.py | 4 +- openmc/mgxs/mgxs.py | 2 +- .../test_mgxs_library_condense.py | 2 - .../inputs_true.dat | 1 + .../results_true.dat | 5 ++ .../test_mgxs_library_distribcell.py | 85 +++++++++++++++++++ 6 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 tests/test_mgxs_library_distribcell/inputs_true.dat create mode 100644 tests/test_mgxs_library_distribcell/results_true.dat create mode 100644 tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py diff --git a/openmc/aggregate.py b/openmc/aggregate.py index dae0f76818..011ad38506 100644 --- a/openmc/aggregate.py +++ b/openmc/aggregate.py @@ -405,5 +405,5 @@ class AggregateFilter(object): aggregate_bin_array = np.repeat(aggregate_bin_array, datasize) # Construct Pandas DataFrame for the AggregateFilter - df = pd.DataFrame({self.aggregate_filter.type: aggregate_bin_array}) - return df \ No newline at end of file + df = pd.DataFrame({self.type: aggregate_bin_array}) + return df diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index abc1ed4912..0eec6d4585 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1219,7 +1219,7 @@ class MGXS(object): df = self.xs_tally.get_pandas_dataframe(summary=summary) # Remove the score column since it is homogeneous and redundant - if summary and self.domain_type == 'distribcell': + if summary and 'distribcell' in self.domain_type: df = df.drop('score', level=0, axis=1) else: df = df.drop('score', axis=1) diff --git a/tests/test_mgxs_library_condense/test_mgxs_library_condense.py b/tests/test_mgxs_library_condense/test_mgxs_library_condense.py index 4c84de2bf6..82ce3acabc 100644 --- a/tests/test_mgxs_library_condense/test_mgxs_library_condense.py +++ b/tests/test_mgxs_library_condense/test_mgxs_library_condense.py @@ -63,8 +63,6 @@ class MGXSTestHarness(PyAPITestHarness): df = mgxs.get_pandas_dataframe() outstr += df.to_string() - print(outstr) - # Hash the results if necessary if hash_output: sha512 = hashlib.sha512() diff --git a/tests/test_mgxs_library_distribcell/inputs_true.dat b/tests/test_mgxs_library_distribcell/inputs_true.dat new file mode 100644 index 0000000000..04e56658f2 --- /dev/null +++ b/tests/test_mgxs_library_distribcell/inputs_true.dat @@ -0,0 +1 @@ +224a9e84e87c8a21385326d34ef27c046107d4a2ace6ee85d7a36142a3726e12532e2fc1a318ab707437e0b306a81c6d2b80c531d4c3210d4162242e6265ba70 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat new file mode 100644 index 0000000000..4936da4cec --- /dev/null +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -0,0 +1,5 @@ + sum(distribcell) group in nuclide mean std. dev. +0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 total 0.720213 1.424323 sum(distribcell) group in nuclide mean std. dev. +0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 total 0 0 sum(distribcell) group in group out nuclide mean std. dev. +0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 1 total 0.70466 1.403916 sum(distribcell) group out nuclide mean std. dev. +0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py new file mode 100644 index 0000000000..41aa1245d0 --- /dev/null +++ b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python + +import os +import sys +import glob +import hashlib +sys.path.insert(0, os.pardir) +from testing_harness import PyAPITestHarness +import openmc +import openmc.mgxs + + +class MGXSTestHarness(PyAPITestHarness): + def _build_inputs(self): + + # The openmc.mgxs module needs a summary.h5 file + self._input_set.settings.output = {'summary': True} + + # Generate inputs using parent class routine + super(MGXSTestHarness, self)._build_inputs() + + # Initialize a one-group structure + energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 20.]) + + # Initialize MGXS Library for a few cross section types + # for one material-filled cell in the geometry + self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry.geometry) + self.mgxs_lib.by_nuclide = False + self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', + 'nu-scatter matrix', 'chi'] + self.mgxs_lib.energy_groups = energy_groups + self.mgxs_lib.domain_type = 'distribcell' + material_cells = self.mgxs_lib.openmc_geometry.get_all_material_cells() + self.mgxs_lib.domains = [material_cells[-1]] + self.mgxs_lib.build_library() + + # Initialize a tallies file + self._input_set.tallies = openmc.TalliesFile() + self.mgxs_lib.add_to_tallies_file(self._input_set.tallies, merge=False) + self._input_set.tallies.export_to_xml() + + def _get_results(self, hash_output=False): + """Digest info in the statepoint and return as a string.""" + + # Read the statepoint file. + statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] + sp = openmc.StatePoint(statepoint) + + # Read the summary file. + summary = glob.glob(os.path.join(os.getcwd(), 'summary.h5'))[0] + su = openmc.Summary(summary) + sp.link_with_summary(su) + + # Load the MGXS library from the statepoint + self.mgxs_lib.load_from_statepoint(sp) + + # Average the MGXS across distribcell subdomains + avg_lib = self.mgxs_lib.get_subdomain_avg_library() + + # Build a string from Pandas Dataframe for each 1-group MGXS + outstr = '' + for domain in avg_lib.domains: + for mgxs_type in avg_lib.mgxs_types: + mgxs = avg_lib.get_mgxs(domain, mgxs_type) + df = mgxs.get_pandas_dataframe() + outstr += df.to_string() + + # Hash the results if necessary + if hash_output: + sha512 = hashlib.sha512() + sha512.update(outstr.encode('utf-8')) + outstr = sha512.hexdigest() + + return outstr + + + def _cleanup(self): + super(MGXSTestHarness, self)._cleanup() + f = os.path.join(os.getcwd(), 'tallies.xml') + if os.path.exists(f): os.remove(f) + + +if __name__ == '__main__': + harness = MGXSTestHarness('statepoint.10.*', True) + harness.main() From f34093f1589fc02edad27d27cc4a676d1bf24a09 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Mon, 18 Jan 2016 19:05:39 -0500 Subject: [PATCH 188/650] Use more properties over attributes --- openmc/universe.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/openmc/universe.py b/openmc/universe.py index a828d8da90..8e06ba1821 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -397,10 +397,10 @@ class Cell(object): def create_xml_subelement(self, xml_element): element = ET.Element("cell") - element.set("id", str(self._id)) + element.set("id", str(self.id)) if len(self._name) > 0: - element.set("name", str(self._name)) + element.set("name", str(self.name)) if isinstance(self.fill, basestring): assert self.fill.strip().lower() == 'void' @@ -415,11 +415,11 @@ class Cell(object): elif isinstance(self.fill, (Universe, Lattice)): element.set("fill", str(self.fill.id)) - self._fill.create_xml_subelement(xml_element) + self.fill.create_xml_subelement(xml_element) else: element.set("fill", str(self.fill)) - self._fill.create_xml_subelement(xml_element) + self.fill.create_xml_subelement(xml_element) if self.region is not None: # Set the region attribute with the region specification @@ -446,11 +446,11 @@ class Cell(object): # Call the recursive function from the top node create_surface_elements(self.region, xml_element) - if self._translation is not None: - element.set("translation", ' '.join(map(str, self._translation))) + if self.translation is not None: + element.set("translation", ' '.join(map(str, self.translation))) - if self._rotation is not None: - element.set("rotation", ' '.join(map(str, self._rotation))) + if self.rotation is not None: + element.set("rotation", ' '.join(map(str, self.rotation))) return element From 9d431fbbafd25486855ec9daabc7c1be6291b4f6 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Mon, 18 Jan 2016 19:11:40 -0500 Subject: [PATCH 189/650] Remove frivolous assertion --- openmc/universe.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openmc/universe.py b/openmc/universe.py index 8e06ba1821..237ddce1f7 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -403,7 +403,6 @@ class Cell(object): element.set("name", str(self.name)) if isinstance(self.fill, basestring): - assert self.fill.strip().lower() == 'void' element.set("material", "void") elif isinstance(self.fill, openmc.Material): From 37773034c4e141772e05692b5885aecb6743ec5a Mon Sep 17 00:00:00 2001 From: Colin Josey Date: Mon, 18 Jan 2016 22:28:40 -0500 Subject: [PATCH 190/650] Respond to comments on PR #560 This commit responds to the majority of comments so far on PR to handle Faddeeva.cc in CMakeLists.txt. --- src/ace.F90 | 12 +- src/ace_header.F90 | 7 +- src/cross_section.F90 | 131 +++++++++--------- src/input_xml.F90 | 16 +-- src/math.F90 | 93 ++++++------- src/multipole.F90 | 288 +++++++++++++++++++-------------------- src/multipole_header.F90 | 23 +--- src/output.F90 | 2 +- 8 files changed, 276 insertions(+), 296 deletions(-) diff --git a/src/ace.F90 b/src/ace.F90 index dc9fdf7355..3a647f990b 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -438,7 +438,7 @@ contains ! Check if Multipole library exists and is readable inquire(FILE=filename, EXIST=file_exists, READ=readable) if (.not. file_exists) then - nuc % mp_present = .FALSE. + nuc % mp_present = .false. return elseif (readable(1:3) == 'NO') then call fatal_error("Multipole library '" // trim(filename) // "' is not readable! & @@ -452,23 +452,23 @@ contains ! Call the read routine call multipole_read(filename, nuc % multipole, i_table) - nuc % mp_present = .TRUE. + nuc % mp_present = .true. ! Update the maximum number of poles, l indices, and polynomial order - if(nuc % multipole % max_w > max_poles) then + if (nuc % multipole % max_w > max_poles) then max_poles = nuc % multipole % max_w end if - if(nuc % multipole % num_l > max_L) then + if (nuc % multipole % num_l > max_L) then max_L = nuc % multipole % num_l end if - if(nuc % multipole % fit_order + 1 > max_poly) then + if (nuc % multipole % fit_order + 1 > max_poly) then max_poly = nuc % multipole % fit_order + 1 end if ! Recreate nu-fission tables - if(nuc % fissionable) then + if (nuc % fissionable) then call generate_nu_fission(nuc) end if diff --git a/src/ace_header.F90 b/src/ace_header.F90 index 2389545948..8d9238acbf 100644 --- a/src/ace_header.F90 +++ b/src/ace_header.F90 @@ -146,8 +146,8 @@ module ace_header type(UrrData), pointer :: urr_data => null() ! Multipole data - logical :: mp_present - type(MultipoleArray), pointer :: multipole => null() + logical :: mp_present + type(MultipoleArray), allocatable :: multipole ! Reactions integer :: n_reaction ! # of reactions @@ -346,8 +346,7 @@ module ace_header deallocate(this % urr_data) end if - if (associated(this % multipole)) then - call this % multipole % clear() + if (this % mp_present) then deallocate(this % multipole) end if diff --git a/src/cross_section.F90 b/src/cross_section.F90 index 488ea21c4c..53792362a0 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -22,7 +22,7 @@ module cross_section complex(8), allocatable :: sigT_factor(:) real(8), allocatable :: twophi(:) real(8), allocatable :: broadened_polynomials(:) - logical :: mp_already_alloc = .FALSE. + logical :: mp_already_alloc = .false. !$omp threadprivate(sigT_factor, twophi, broadened_polynomials, mp_already_alloc) @@ -168,9 +168,9 @@ contains mat => materials(i_mat) ! If MP, don't interpolate, it's all already baked in. - if( nuc % mp_present .AND. & - (E >= nuc % multipole % start_E/1.0D6 .AND.& - E <= nuc % multipole % end_E/1.0D6)) then + if (nuc % mp_present .and. & + (E >= nuc % multipole % start_E/1.0e6_8 .and.& + E <= nuc % multipole % end_E/1.0e6_8)) then ! Call multipole kernel call multipole_eval(nuc % multipole, E, sqrtkT, sigT, sigA, sigF) @@ -181,7 +181,7 @@ contains if (nuc % fissionable) then micro_xs(i_nuclide) % fission = sigF - micro_xs(i_nuclide) % nu_fission = sigF * nu_total(nuc,E) + micro_xs(i_nuclide) % nu_fission = sigF * nu_total(nuc, E) else micro_xs(i_nuclide) % fission = ZERO micro_xs(i_nuclide) % nu_fission = ZERO @@ -581,7 +581,7 @@ contains allocate(twophi(max_L)) allocate(broadened_polynomials(max_poly)) - mp_already_alloc = .TRUE. + mp_already_alloc = .true. end subroutine !=============================================================================== @@ -590,42 +590,42 @@ contains !=============================================================================== subroutine multipole_eval(multipole, Emev, sqrtkT, sigT, sigA, sigF) - type(MultipoleArray), intent(in) :: multipole !< The windowed multipole object to process. - real(8), intent(in) :: Emev !< The energy at which to evaluate the cross section in MeV - real(8), intent(in) :: sqrtkT !< The temperature in the form sqrt(kT (in eV)), at which to evaluate the cross section. - real(8), intent(out) :: sigT !< Total cross section - real(8), intent(out) :: sigA !< Absorption cross section - real(8), intent(out) :: sigF !< Fission cross section - complex(8) :: PSIIKI - complex(8) :: CDUM1 - complex(8) :: w_val - complex(8) :: Z - real(8) :: sqrtE - real(8) :: invE - real(8) :: DOPP - real(8) :: DOPP_ECOEF - real(8) :: temp - real(8) :: E - integer :: iP - integer :: iC - integer :: iW - integer :: startw - integer :: startw_1 - integer :: startw_endw - integer :: endw + type(MultipoleArray), intent(in) :: multipole ! The windowed multipole object to process. + real(8), intent(in) :: Emev ! The energy at which to evaluate the cross section in MeV + real(8), intent(in) :: sqrtkT ! The temperature in the form sqrt(kT (in eV)), at which to evaluate the cross section. + real(8), intent(out) :: sigT ! Total cross section + real(8), intent(out) :: sigA ! Absorption cross section + real(8), intent(out) :: sigF ! Fission cross section + complex(8) :: psi_ki ! The value of the psi-ki function for the asymptotic form + complex(8) :: c_temp ! complex temporary variable + complex(8) :: w_val ! The faddeeva function evaluated at Z + complex(8) :: Z ! sqrt(atomic weight ratio / kT) * (sqrt(E) - pole) + real(8) :: sqrtE ! sqrt(E), eV + real(8) :: invE ! 1/E, eV + real(8) :: dopp ! sqrt(atomic weight ratio / kT) + real(8) :: dopp_ecoef ! sqrt(atomic weight ratio * pi / kT) / E + real(8) :: temp ! real temporary value + real(8) :: E ! energy, eV + integer :: iP ! index of pole + integer :: iC ! index of curvefit + integer :: iW ! index of window + integer :: startw ! window start pointer (for poles) + integer :: startw_1 ! window start pointer - 1 + integer :: startw_endw ! window start pointer - window end pointer + integer :: endw ! window end pointer ! Convert to eV - E = Emev * 1.0D6 + E = Emev * 1.0e6_8 sqrtE = sqrt(E) - invE = E**(-1) + invE = ONE/E - if(mp_already_alloc .eqv. .FALSE.) then + if(.not. mp_already_alloc) then call multipole_eval_allocate() end if ! Locate us - iW = floor((sqrtE - sqrt(multipole % start_E))/multipole % spacing + 1.0_8) + iW = floor((sqrtE - sqrt(multipole % start_E))/multipole % spacing + ONE) startw = multipole % w_start(iW) startw_1 = startw - 1 ! This is an index shift parameter. @@ -639,19 +639,19 @@ contains ! Generate some doppler broadening parameters - ! DOPP_ECOEF is inverse of dopp, divided by E, multiplied by sqrt(pi). - DOPP = multipole % sqrtAWR/sqrtKT - DOPP_ECOEF = DOPP*invE*SQRT_PI + ! dopp_ecoef is inverse of dopp, divided by E, multiplied by sqrt(pi). + dopp = multipole % sqrtAWR / sqrtKT + dopp_ecoef = dopp * invE * SQRT_PI - sigT = 0.0_8 - sigA = 0.0_8 - sigF = 0.0_8 + sigT = ZERO + sigA = ZERO + sigF = ZERO ! Evaluate linefit first - if(sqrtkT /= 0 .AND. multipole % broaden_poly(iW) == 1) then ! Broaden the curvefit. - call broaden_n_polynomials(E, DOPP, multipole % fit_order + 1, broadened_polynomials) + if(sqrtkT /= 0 .and. multipole % broaden_poly(iW) == 1) then ! Broaden the curvefit. + call broaden_n_polynomials(E, dopp, multipole % fit_order + 1, broadened_polynomials) - do iC = 1,multipole % fit_order+1 + do iC = 1, multipole % fit_order+1 sigT = sigT + multipole % curvefit(FIT_T, iC, iW)*broadened_polynomials(iC) sigA = sigA + multipole % curvefit(FIT_A, iC, iW)*broadened_polynomials(iC) if (multipole % fissionable) then @@ -660,7 +660,7 @@ contains end do else ! Evaluate as if it were a polynomial temp = invE - do iC = 1,multipole % fit_order+1 + do iC = 1, multipole % fit_order+1 sigT = sigT + multipole % curvefit(FIT_T, iC, iW)*temp sigA = sigA + multipole % curvefit(FIT_A, iC, iW)*temp @@ -674,43 +674,42 @@ contains ! Then get the poles we want and broaden them. - if (sqrtkT == 0.0_8) then + if (sqrtkT == ZERO) then ! If at 0K, use asymptotic form. do iP = startw, endw - PSIIKI = -ONEI/(multipole % data(MP_EA, iP) - sqrtE) - CDUM1 = PSIIKI/E + psi_ki = -ONEI/(multipole % data(MP_EA, iP) - sqrtE) + c_temp = psi_ki/E if (multipole % formalism == FORM_MLBW) then - sigT = sigT + real(multipole % data(MLBW_RT, iP)*CDUM1* & + sigT = sigT + real(multipole % data(MLBW_RT, iP) * c_temp * & sigT_factor(multipole % l_value(iP))) & - + real(multipole % data(MLBW_RX, iP)*CDUM1) - sigA = sigA + real(multipole % data(MLBW_RA, iP)*CDUM1) - sigF = sigF + real(multipole % data(MLBW_RF, iP)*CDUM1) + + real(multipole % data(MLBW_RX, iP) * c_temp) + sigA = sigA + real(multipole % data(MLBW_RA, iP) * c_temp) + sigF = sigF + real(multipole % data(MLBW_RF, iP) * c_temp) else if (multipole % formalism == FORM_RM) then - sigT = sigT + real(multipole % data(RM_RT, iP)*CDUM1* & + sigT = sigT + real(multipole % data(RM_RT, iP) * c_temp* & sigT_factor(multipole % l_value(iP))) - sigA = sigA + real(multipole % data(RM_RA, iP)*CDUM1) - sigF = sigF + real(multipole % data(RM_RF, iP)*CDUM1) + sigA = sigA + real(multipole % data(RM_RA, iP) * c_temp) + sigF = sigF + real(multipole % data(RM_RF, iP) * c_temp) end if end do else ! At temperature, use Faddeeva function-based form. if(endw >= startw) then do iP = startw, endw - Z = (sqrtE - multipole % data(MP_EA, iP))*DOPP - call w(Z, w_val) - w_val = w_val*DOPP_ECOEF + Z = (sqrtE - multipole % data(MP_EA, iP)) * dopp + w_val = w(Z) * dopp_ecoef if (multipole % formalism == FORM_MLBW) then - sigT = sigT + real((multipole % data(MLBW_RT, iP)* & + sigT = sigT + real((multipole % data(MLBW_RT, iP) * & sigT_factor(multipole%l_value(iP)) + & - multipole % data(MLBW_RX, iP))*w_val) - sigA = sigA + real(multipole % data(MLBW_RA, iP)*w_val) - sigF = sigF + real(multipole % data(MLBW_RF, iP)*w_val) + multipole % data(MLBW_RX, iP)) * w_val) + sigA = sigA + real(multipole % data(MLBW_RA, iP) * w_val) + sigF = sigF + real(multipole % data(MLBW_RF, iP) * w_val) else if (multipole % formalism == FORM_RM) then - sigT = sigT + real(multipole % data(RM_RT, iP)*w_val* & + sigT = sigT + real(multipole % data(RM_RT, iP) * w_val * & sigT_factor(multipole % l_value(iP))) - sigA = sigA + real(multipole % data(RM_RA, iP)*w_val) - sigF = sigF + real(multipole % data(RM_RF, iP)*w_val) + sigA = sigA + real(multipole % data(RM_RA, iP) * w_val) + sigF = sigF + real(multipole % data(RM_RF, iP) * w_val) end if end do end if @@ -734,14 +733,14 @@ contains real(8) :: arg do iL = 1, max_L - twophi(iL) = multipole%pseudo_k0RS(iL)*sqrtE + twophi(iL) = multipole % pseudo_k0RS(iL) * sqrtE if (iL == 2) then twophi(iL) = twophi(iL) - atan(twophi(iL)) else if (iL == 3) then - arg = 3.0_8*twophi(iL)/(3.0_8-twophi(iL)**2) + arg = 3.0_8 * twophi(iL) / (3.0_8 - twophi(iL)**2) twophi(iL) = twophi(iL) - atan(arg) else if (iL == 4) then - arg = twophi(iL)*(15.0_8-twophi(iL)**2)/(15.0_8-6.0_8*twophi(iL)**2) + arg = twophi(iL) * (15.0_8 - twophi(iL)**2) / (15.0_8 - 6.0_8 * twophi(iL)**2) twophi(iL) = twophi(iL) - atan(arg) end if end do diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 73a1db453f..bbf4da4f9e 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -1944,9 +1944,9 @@ contains call get_node_ptr(node_mat, "temperature", node_temp) call get_node_value(node_temp, "value", temp_dble) mat % sqrtkT = sqrt(temp_dble * K_BOLTZMANN * 1.0D6) - temp_known = .TRUE. + temp_known = .true. else - temp_known = .FALSE. + temp_known = .false. end if ! ======================================================================= @@ -2056,12 +2056,12 @@ contains name = trim(temp_str) // "." // trim(name) ! If needed, look up temperature - if (temp_known .eqv. .FALSE.) then + if (.not. temp_known) then ! Find xs_listing and set the name/alias according to the listing index_list = xs_listing_dict % get_key(to_lower(name)) if(xs_listings(index_list) % kT /= 0.0_8) then mat % sqrtkT = sqrt(xs_listings(index_list) % kT * 1.0D6) - temp_known = .TRUE. + temp_known = .true. end if end if @@ -2154,12 +2154,12 @@ contains end if ! If still needed, look up temperature - if (temp_known .eqv. .FALSE.) then + if (.not. temp_known) then ! Find xs_listing and set kT index_list = xs_listing_dict % get_key(to_lower(list_names % tail % data)) if(xs_listings(index_list) % kT /= 0.0_8) then mat % sqrtkT = sqrt(xs_listings(index_list) % kT * 1.0D6) - temp_known = .TRUE. + temp_known = .true. end if end if @@ -2178,9 +2178,9 @@ contains end do NATURAL_ELEMENTS ! If still undefined, set the temperature to zero - if (temp_known .eqv. .FALSE.) then + if (.not. temp_known) then mat % sqrtkT = 0.0_8 - temp_known = .TRUE. + temp_known = .true. end if ! ======================================================================== diff --git a/src/math.F90 b/src/math.F90 index 960047c991..4047df7e7e 100644 --- a/src/math.F90 +++ b/src/math.F90 @@ -12,12 +12,12 @@ module math !=============================================================================== interface - COMPLEX (C_DOUBLE_COMPLEX) FUNCTION faddeeva_w & - (Z, RELERR) BIND(C, NAME='Faddeeva_w') - use ISO_C_BINDING - implicit none - COMPLEX(C_DOUBLE_COMPLEX), value :: Z - REAL(C_DOUBLE) , value :: RELERR + function faddeeva_w(z, relerr) bind(C, name='Faddeeva_w') result(w) + use ISO_C_BINDING + implicit none + complex(C_DOUBLE_COMPLEX), value :: z + real(C_DOUBLE), value :: relerr + complex(C_DOUBLE_COMPLEX) :: w end function faddeeva_w end interface @@ -679,31 +679,32 @@ contains ! W acts as a front end to the MIT Faddeeva function, Faddeeva_w. !=============================================================================== - subroutine w(Z,wv) - use ISO_C_BINDING - complex(C_DOUBLE_COMPLEX), intent(inout) :: Z ! The point to evaluate Z at - complex(8), intent(out) :: wv ! The resulting w(Z) value + function w(z) result(wv) + complex(C_DOUBLE_COMPLEX), intent(in) :: z ! The point to evaluate Z at + complex(8) :: wv ! The resulting w(z) value real(C_DOUBLE) :: relerr ! Target relative error in inner loop of MIT Faddeeva - logical :: mangle ! Do we need to perform the special mangling step? - ! There is some special mangling the true W function in WHOPPER does. I - ! replicate it here. - if(aimag(Z) < 0) then - Z = conjg(Z) - mangle = .TRUE. + ! Technically, the value we want is given by the equation: + ! w(z) = I/Pi * Integrate[Exp[-t^2]/(z-t), {t, -Infinity, Infinity}] + ! as shown in Equation 63 from Hwang, R. N. "A rigorous pole + ! representation of multilevel cross sections and its practical + ! applications." Nuclear Science and Engineering 96.3 (1987): 192-209. + ! + ! The MIT Faddeeva function evaluates w(z) = exp(-z^2)erfc(-iz). These + ! two forms of the Faddeeva function are related by a transformation. + ! + ! If we call the integral form w_int, and the function form w_fun: + ! For imag(z) > 0, w_int(z) = w_fun(z) + ! For imag(z) < 0, w_int(z) = -conjg(w_fun(conjg(z))) + + relerr = ZERO + if (aimag(z) > ZERO) then + wv = faddeeva_w(z, relerr) else - mangle = .FALSE. + wv = -conjg(faddeeva_w(conjg(z), relerr)) end if - ! Calculate Faddeeva - relerr = 0.0_8 - wv = faddeeva_w(Z,relerr) - - ! Finish mangling the results - if(mangle .eqv. .TRUE.) then - wv = -conjg(wv) - end if - end subroutine + end function w !=============================================================================== ! BROADEN_N_POLYNOMIALS doppler broadens polynomials of the form @@ -711,31 +712,31 @@ contains ! exactly and quickly. !=============================================================================== - subroutine broaden_n_polynomials(En, DOPP, n, factors) + subroutine broaden_n_polynomials(En, dopp, n, factors) real(8), intent(in) :: En ! Energy to evaluate at - real(8), intent(in) :: DOPP ! sqrt(atomic weight ratio / kT), kT given in eV. + real(8), intent(in) :: dopp ! sqrt(atomic weight ratio / kT), kT given in eV. integer, intent(in) :: n ! number of components to polynomial real(8), intent(out):: factors(n) ! output leading coefficient integer :: i - real(8) :: sqrtE - real(8) :: beta - real(8) :: halfinvDOPP2 - real(8) :: quarterinvDOPP4 - real(8) :: erfbeta - real(8) :: exp_m_beta2 + real(8) :: sqrtE ! Sqrt(energy) + real(8) :: beta ! sqrt(atomic weight ratio * E / kT) + real(8) :: half_inv_dopp2 ! 0.5 / dopp**2 + real(8) :: quarter_inv_dopp4 ! 0.25 / dopp**4 + real(8) :: erfbeta ! error function of beta + real(8) :: exp_m_beta2 ! exp(-beta**2) sqrtE = sqrt(En) - beta = sqrtE*DOPP - halfinvDOPP2 = 0.5_8/DOPP**2 - quarterinvDOPP4 = 0.25_8/DOPP**4 + beta = sqrtE * dopp + half_inv_dopp2 = HALF / dopp**2 + quarter_inv_dopp4 = half_inv_dopp2**2 if (beta > 6.0_8) then ! Save time, ERF(6) is 1 to machine precision. ! beta/sqrtpi*exp(-beta**2) is also approximately 1 machine epsilon. - erfBeta = 1.0_8 - exp_m_beta2 = 0.0_8 + erfBeta = ONE + exp_m_beta2 = ZERO else erfBeta = erf(beta) exp_m_beta2 = exp(-beta**2) @@ -744,19 +745,19 @@ contains ! Assume that, for sure, we'll use a second order (1/E, 1/V, const) ! fit, and no less. - factors(1) = erfbeta/En - factors(2) = 1.0_8/sqrtE - factors(3) = factors(1)*(halfinvDOPP2 + En) + exp_m_beta2/(beta*SQRT_PI) + factors(1) = erfbeta / En + factors(2) = ONE / sqrtE + factors(3) = factors(1) * (half_inv_dopp2 + En) + exp_m_beta2 / (beta * SQRT_PI) ! Perform recursive broadening of high order components - do i = 1,n-3 + do i = 1, n-3 if (i /= 1) then - factors(i+3) = -factors(i-1)*(i - 1.0_8)*i*quarterinvDOPP4 + & - factors(i+1)*(En + (1.0_8 + 2.0_8*i)*halfinvDOPP2) + factors(i+3) = -factors(i-1) * (i - ONE) * i * quarter_inv_dopp4 + & + factors(i+1) * (En + (ONE + TWO * i) * half_inv_dopp2) else ! Although it's mathematically identical, factors(0) will contain ! nothing, and we don't want to have to worry about memory. - factors(i+3) = factors(i+1)*(En + (1.0_8 + 2.0_8*i)*halfinvDOPP2) + factors(i+3) = factors(i+1)*(En + (ONE + TWO * i) * half_inv_dopp2) end if end do end subroutine broaden_n_polynomials diff --git a/src/multipole.F90 b/src/multipole.F90 index cbfef07449..9720b3591e 100644 --- a/src/multipole.F90 +++ b/src/multipole.F90 @@ -11,10 +11,11 @@ module multipole contains -!--------------------------------------------------------------------------- +!=============================================================================== ! MULTIPOLE_READ Reads in a multipole HDF5 file with the original API ! specification. Subject to change as the library format matures. -!--------------------------------------------------------------------------- +!=============================================================================== + subroutine multipole_read(filename, multipole, i_table) character(len=*), intent(in) :: filename ! Filename of the multipole library to load type(MultipoleArray), intent(out), target :: multipole ! The object to fill @@ -34,165 +35,164 @@ contains character(len=24) :: MT_n ! Takes the form '/nuclide/reactions/MT???' integer :: is_fissionable - nuc => nuclides(i_table) + associate (nuc => nuclides(i_table)) - ! Open file for reading and move into the /isotope group - file_id = file_open(filename, 'r', parallel=.true.) - group_id = open_group(file_id, "/nuclide") + ! Open file for reading and move into the /isotope group + file_id = file_open(filename, 'r', parallel=.true.) + group_id = open_group(file_id, "/nuclide") - ! Load in all the array size scalars - call read_dataset(group_id, "length", multipole % length) - call read_dataset(group_id, "windows", multipole % windows) - call read_dataset(group_id, "num_l", multipole % num_l) - call read_dataset(group_id, "fit_order", multipole % fit_order) - call read_dataset(group_id, "max_w", multipole % max_w) - call read_dataset(group_id, "fissionable", is_fissionable) - if (is_fissionable == MP_FISS) then - multipole % fissionable = .true. - else - multipole % fissionable = .false. - end if - call read_dataset(group_id, "formalism", multipole % formalism) + ! Load in all the array size scalars + call read_dataset(group_id, "length", multipole % length) + call read_dataset(group_id, "windows", multipole % windows) + call read_dataset(group_id, "num_l", multipole % num_l) + call read_dataset(group_id, "fit_order", multipole % fit_order) + call read_dataset(group_id, "max_w", multipole % max_w) + call read_dataset(group_id, "fissionable", is_fissionable) + if (is_fissionable == MP_FISS) then + multipole % fissionable = .true. + else + multipole % fissionable = .false. + end if + call read_dataset(group_id, "formalism", multipole % formalism) - call read_dataset(group_id, "spacing", multipole % spacing) - call read_dataset(group_id, "sqrtAWR", multipole % sqrtAWR) - call read_dataset(group_id, "start_E", multipole % start_E) - call read_dataset(group_id, "end_E", multipole % end_E) + call read_dataset(group_id, "spacing", multipole % spacing) + call read_dataset(group_id, "sqrtAWR", multipole % sqrtAWR) + call read_dataset(group_id, "start_E", multipole % start_E) + call read_dataset(group_id, "end_E", multipole % end_E) - ! Allocate the multipole array components - call multipole % allocate() + ! Allocate the multipole array components + call multipole % allocate() - ! Read in arrays - call read_dataset(group_id, "data", multipole % data) - call read_dataset(group_id, "pseudo_K0RS", multipole % pseudo_k0RS) - call read_dataset(group_id, "l_value", multipole % l_value) - call read_dataset(group_id, "w_start", multipole % w_start) - call read_dataset(group_id, "w_end", multipole % w_end) - call read_dataset(group_id, "broaden_poly", multipole % broaden_poly) + ! Read in arrays + call read_dataset(group_id, "data", multipole % data) + call read_dataset(group_id, "pseudo_K0RS", multipole % pseudo_k0RS) + call read_dataset(group_id, "l_value", multipole % l_value) + call read_dataset(group_id, "w_start", multipole % w_start) + call read_dataset(group_id, "w_end", multipole % w_end) + call read_dataset(group_id, "broaden_poly", multipole % broaden_poly) - call read_dataset(group_id, "curvefit", multipole % curvefit) + call read_dataset(group_id, "curvefit", multipole % curvefit) - ! Delete ACE pointwise data - call read_dataset(group_id, "n_grid", nuc % n_grid) + ! Delete ACE pointwise data + call read_dataset(group_id, "n_grid", nuc % n_grid) - deallocate(nuc % energy) - deallocate(nuc % total) - deallocate(nuc % elastic) - deallocate(nuc % fission) - deallocate(nuc % nu_fission) - deallocate(nuc % absorption) + deallocate(nuc % energy) + deallocate(nuc % total) + deallocate(nuc % elastic) + deallocate(nuc % fission) + deallocate(nuc % nu_fission) + deallocate(nuc % absorption) - allocate(nuc % energy(nuc % n_grid)) - allocate(nuc % total(nuc % n_grid)) - allocate(nuc % elastic(nuc % n_grid)) - allocate(nuc % fission(nuc % n_grid)) - allocate(nuc % nu_fission(nuc % n_grid)) - allocate(nuc % absorption(nuc % n_grid)) + allocate(nuc % energy(nuc % n_grid)) + allocate(nuc % total(nuc % n_grid)) + allocate(nuc % elastic(nuc % n_grid)) + allocate(nuc % fission(nuc % n_grid)) + allocate(nuc % nu_fission(nuc % n_grid)) + allocate(nuc % absorption(nuc % n_grid)) - nuc % total = ZERO - nuc % absorption = ZERO - nuc % fission = ZERO + nuc % total = ZERO + nuc % absorption = ZERO + nuc % fission = ZERO - ! Read in new energy axis (converting eV to MeV) - call read_dataset(group_id, "energy_points", nuc % energy) - nuc % energy = nuc % energy / 1.0D6 + ! Read in new energy axis (converting eV to MeV) + call read_dataset(group_id, "energy_points", nuc % energy) + nuc % energy = nuc % energy / 1.0D6 - ! Get count and list of MT tables - call read_dataset(group_id, "MT_count", NMT) - allocate(MT(NMT)) + ! Get count and list of MT tables + call read_dataset(group_id, "MT_count", NMT) + allocate(MT(NMT)) - call read_dataset(group_id, "MT_list", MT) - - call close_group(group_id) - - accumulated_fission = .false. - - ! Loop over each MT entry and load it into a reaction. - do i = 1, NMT - write(MT_string, '(I3.3)') MT(i) - MT_n = "/nuclide/reactions/MT" // MT_string - - group_id = open_group(file_id, MT_n) - - ! Each MT needs to be treated slightly differently. - select case (MT(i)) - case(ELASTIC) - call read_dataset(group_id, "MT_sigma", nuc % elastic) - nuc % total = nuc % total + nuc % elastic - case(N_FISSION) - call read_dataset(group_id, "MT_sigma", nuc % fission) - nuc % total = nuc % total + nuc % fission - nuc % absorption = nuc % absorption + nuc % fission - accumulated_fission = .true. - case default - ! Search through all of our secondary reactions - do j = 1, nuc % n_reaction - if (nuc % reactions(j) % MT == MT(i)) then - ! Match found - - ! Individual Fission components exist, so remove the combined - ! fission cross section. - if ( (MT(i) == N_F .OR. MT(i) == N_NF .OR. MT(i) == N_2NF & - .OR. MT(i) == N_3NF) .AND. (accumulated_fission .eqv. .TRUE.)) then - nuc % total = nuc % total - nuc % fission - nuc % absorption = nuc % absorption - nuc % fission - nuc % fission = 0.0_8 - accumulated_fission = .FALSE. - end if - - deallocate(nuc % reactions(j) % sigma) - allocate(nuc % reactions(j) % sigma(nuc % n_grid)) - - call read_dataset(group_id, "MT_sigma", nuc % reactions(j) % sigma) - call read_dataset(group_id, "Q_value", nuc % reactions(j) % Q_value) - call read_dataset(group_id, "threshold", nuc % reactions(j) % threshold) - nuc % reactions(j) % threshold = 1 ! TODO: reconsider implications. - nuc % reactions(j) % Q_value = nuc % reactions(j) % Q_value / 1.0D6 - - ! Update edist values TODO: does this do anything when - ! the version of data is identical? - if (associated(nuc % reactions(j) % edist)) then - if (nuc % reactions(j) % edist % law == 3) then - ! Search for first XS /= 0 for the threshold. - searchQ: do k = 1, nuc % n_grid - if (nuc % reactions(j) % sigma(k) /= ZERO) then - if (k /= 1) then - nuc % reactions(j) % edist % data(1) = nuc % energy(k-1) - end if - exit searchQ - end if - end do searchQ - end if - end if - - ! Accumulate total - if (MT(i) /= N_LEVEL .AND. MT(i) <= N_DA) then - nuc % total = nuc % total + nuc % reactions(j) % sigma - end if - - ! Accumulate absorption - if (MT(i) >= N_GAMMA .and. MT(i) <= N_DA) then - nuc % absorption = nuc % absorption + nuc % reactions(j) % sigma - end if - - ! Accumulate fission (if needed) - if ( (MT(i) == N_F .OR. MT(i) == N_NF .OR. MT(i) == N_2NF & - .OR. MT(i) == N_3NF) ) then - nuc % fission = nuc % fission + nuc % reactions(j) % sigma - nuc % absorption = nuc % absorption + nuc % reactions(j) % sigma - end if - end if - end do - end select + call read_dataset(group_id, "MT_list", MT) call close_group(group_id) - end do - ! Close file - call file_close(file_id) + accumulated_fission = .false. - ! Close nuc - if(associated(nuc)) nullify(nuc) + ! Loop over each MT entry and load it into a reaction. + do i = 1, NMT + write(MT_string, '(I3.3)') MT(i) + MT_n = "/nuclide/reactions/MT" // MT_string + + group_id = open_group(file_id, MT_n) + + ! Each MT needs to be treated slightly differently. + select case (MT(i)) + case(ELASTIC) + call read_dataset(group_id, "MT_sigma", nuc % elastic) + nuc % total = nuc % total + nuc % elastic + case(N_FISSION) + call read_dataset(group_id, "MT_sigma", nuc % fission) + nuc % total = nuc % total + nuc % fission + nuc % absorption = nuc % absorption + nuc % fission + accumulated_fission = .true. + case default + ! Search through all of our secondary reactions + do j = 1, nuc % n_reaction + if (nuc % reactions(j) % MT == MT(i)) then + ! Match found + + ! Individual Fission components exist, so remove the combined + ! fission cross section. + if ( (MT(i) == N_F .or. MT(i) == N_NF .or. MT(i) == N_2NF & + .or. MT(i) == N_3NF) .and. accumulated_fission) then + nuc % total = nuc % total - nuc % fission + nuc % absorption = nuc % absorption - nuc % fission + nuc % fission = 0.0_8 + accumulated_fission = .false. + end if + + deallocate(nuc % reactions(j) % sigma) + allocate(nuc % reactions(j) % sigma(nuc % n_grid)) + + call read_dataset(group_id, "MT_sigma", nuc % reactions(j) % sigma) + call read_dataset(group_id, "Q_value", nuc % reactions(j) % Q_value) + call read_dataset(group_id, "threshold", nuc % reactions(j) % threshold) + nuc % reactions(j) % threshold = 1 ! TODO: reconsider implications. + nuc % reactions(j) % Q_value = nuc % reactions(j) % Q_value / 1.0D6 + + ! Update edist values TODO: does this do anything when + ! the version of data is identical? + if (associated(nuc % reactions(j) % edist)) then + if (nuc % reactions(j) % edist % law == 3) then + ! Search for first XS /= 0 for the threshold. + searchQ: do k = 1, nuc % n_grid + if (nuc % reactions(j) % sigma(k) /= ZERO) then + if (k /= 1) then + nuc % reactions(j) % edist % data(1) = nuc % energy(k-1) + end if + exit searchQ + end if + end do searchQ + end if + end if + + ! Accumulate total + if (MT(i) /= N_LEVEL .and. MT(i) <= N_DA) then + nuc % total = nuc % total + nuc % reactions(j) % sigma + end if + + ! Accumulate absorption + if (MT(i) >= N_GAMMA .and. MT(i) <= N_DA) then + nuc % absorption = nuc % absorption + nuc % reactions(j) % sigma + end if + + ! Accumulate fission (if needed) + if ( (MT(i) == N_F .or. MT(i) == N_NF .or. MT(i) == N_2NF & + .or. MT(i) == N_3NF) ) then + nuc % fission = nuc % fission + nuc % reactions(j) % sigma + nuc % absorption = nuc % absorption + nuc % reactions(j) % sigma + end if + end if + end do + end select + + call close_group(group_id) + end do + + ! Close file + call file_close(file_id) + + end associate end subroutine multipole_read diff --git a/src/multipole_header.F90 b/src/multipole_header.F90 index 58153ae032..a3642b890b 100644 --- a/src/multipole_header.F90 +++ b/src/multipole_header.F90 @@ -8,7 +8,7 @@ module multipole_header ! Formalisms integer, parameter :: FORM_MLBW = 2, & FORM_RM = 3, & - FORM_LRM = 7 + FORM_RML = 7 ! Constants that determine which value to access integer, parameter :: MP_EA = 1 ! Pole @@ -51,7 +51,7 @@ module multipole_header logical :: fissionable = .false. ! Is this isotope fissionable? integer :: length ! Number of poles integer, allocatable :: l_value(:) ! The l index of the pole - real(8), allocatable :: pseudo_k0RS(:) ! pseudo_k0RS for each of l + real(8), allocatable :: pseudo_k0RS(:) ! The value (sqrt(2*mass neutron)/reduced planck constant) * AWR/(AWR + 1) * scattering radius for each l complex(8), allocatable :: data(:,:) ! Contains all of the pole-residue data real(8) :: sqrtAWR ! Square root of the atomic weight ratio @@ -78,30 +78,11 @@ module multipole_header integer :: formalism contains - procedure :: clear => multipole_clear ! Deallocates Multipole procedure :: allocate => multipole_allocate ! Allocates Multipole end type MultipoleArray contains -!=============================================================================== -! MULTIPOLE_CLEAR resets and deallocates data in Multipole. -!=============================================================================== - - subroutine multipole_clear(this) - class(MultipoleArray), intent(inout) :: this - - if (allocated(this % data)) then - deallocate(this % data) - deallocate(this % w_start) - deallocate(this % w_end) - deallocate(this % curvefit) - - deallocate(this % l_value) - deallocate(this % pseudo_k0RS) - end if - end subroutine - !=============================================================================== ! MULTIPOLE_ALLOCATE allocates necessary data for Multipole. !=============================================================================== diff --git a/src/output.F90 b/src/output.F90 index 66e6831371..de820c566c 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -1451,7 +1451,7 @@ contains do i = 1, n ! If the cell matches the goal and the offset matches final, write to the ! geometry stack - if (univ % cells(i) == goal .AND. offset == final) then + if (univ % cells(i) == goal .and. offset == final) then c => cells(univ % cells(i)) path = trim(path) // "->" // to_str(c % id) return From b163bacefa69634a0e72ef8040707d9f3e0509a2 Mon Sep 17 00:00:00 2001 From: Colin Josey Date: Mon, 18 Jan 2016 22:38:10 -0500 Subject: [PATCH 191/650] Fix performance regression, slight cleanup This commit fixes the performance regression that occurred when a check for last temperature was added, but last temperature was never set. Also, a few more lines were cleaned up in response to PR #560. --- src/cross_section.F90 | 5 +++-- src/math.F90 | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/cross_section.F90 b/src/cross_section.F90 index 53792362a0..b62d9b389c 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -299,6 +299,7 @@ contains micro_xs(i_nuclide) % last_E = E micro_xs(i_nuclide) % last_index_sab = i_sab + micro_xs(i_nuclide) % last_sqrtkT = sqrtkT end subroutine calculate_nuclide_xs @@ -597,13 +598,13 @@ contains real(8), intent(out) :: sigA ! Absorption cross section real(8), intent(out) :: sigF ! Fission cross section complex(8) :: psi_ki ! The value of the psi-ki function for the asymptotic form - complex(8) :: c_temp ! complex temporary variable + complex(8) :: c_temp ! complex temporary variable complex(8) :: w_val ! The faddeeva function evaluated at Z complex(8) :: Z ! sqrt(atomic weight ratio / kT) * (sqrt(E) - pole) real(8) :: sqrtE ! sqrt(E), eV real(8) :: invE ! 1/E, eV real(8) :: dopp ! sqrt(atomic weight ratio / kT) - real(8) :: dopp_ecoef ! sqrt(atomic weight ratio * pi / kT) / E + real(8) :: dopp_ecoef ! sqrt(atomic weight ratio * pi / kT) / E real(8) :: temp ! real temporary value real(8) :: E ! energy, eV integer :: iP ! index of pole diff --git a/src/math.F90 b/src/math.F90 index 4047df7e7e..ae3ed1a714 100644 --- a/src/math.F90 +++ b/src/math.F90 @@ -736,7 +736,7 @@ contains ! Save time, ERF(6) is 1 to machine precision. ! beta/sqrtpi*exp(-beta**2) is also approximately 1 machine epsilon. erfBeta = ONE - exp_m_beta2 = ZERO + exp_m_beta2 = ZERO else erfBeta = erf(beta) exp_m_beta2 = exp(-beta**2) From c27cb008d315a0d53788569fc8b758287434b50d Mon Sep 17 00:00:00 2001 From: Colin Josey Date: Mon, 18 Jan 2016 23:00:15 -0500 Subject: [PATCH 192/650] Fix one more issue from PR #560 --- src/ace.F90 | 66 ++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/ace.F90 b/src/ace.F90 index 3a647f990b..8ad8bc6377 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -430,49 +430,49 @@ contains ! For the time being, and I know this is a bit hacky, we just assume ! that the file will be zaid.h5. - nuc => nuclides(i_table) + associate (nuc => nuclides(i_table)) - write(zaid_string,'(I6.6)') nuc % zaid - filename = zaid_string // ".h5" + write(zaid_string,'(I6.6)') nuc % zaid + filename = zaid_string // ".h5" - ! Check if Multipole library exists and is readable - inquire(FILE=filename, EXIST=file_exists, READ=readable) - if (.not. file_exists) then - nuc % mp_present = .false. - return - elseif (readable(1:3) == 'NO') then - call fatal_error("Multipole library '" // trim(filename) // "' is not readable! & - &Change file permissions with chmod command.") - end if + ! Check if Multipole library exists and is readable + inquire(FILE=filename, EXIST=file_exists, READ=readable) + if (.not. file_exists) then + nuc % mp_present = .false. + return + elseif (readable(1:3) == 'NO') then + call fatal_error("Multipole library '" // trim(filename) // "' is not readable! & + &Change file permissions with chmod command.") + end if - ! display message - call write_message("Loading Multipole XS table: " // filename, 6) + ! display message + call write_message("Loading Multipole XS table: " // filename, 6) - allocate(nuc % multipole) + allocate(nuc % multipole) - ! Call the read routine - call multipole_read(filename, nuc % multipole, i_table) - nuc % mp_present = .true. + ! Call the read routine + call multipole_read(filename, nuc % multipole, i_table) + nuc % mp_present = .true. - ! Update the maximum number of poles, l indices, and polynomial order - if (nuc % multipole % max_w > max_poles) then - max_poles = nuc % multipole % max_w - end if + ! Update the maximum number of poles, l indices, and polynomial order + if (nuc % multipole % max_w > max_poles) then + max_poles = nuc % multipole % max_w + end if - if (nuc % multipole % num_l > max_L) then - max_L = nuc % multipole % num_l - end if + if (nuc % multipole % num_l > max_L) then + max_L = nuc % multipole % num_l + end if - if (nuc % multipole % fit_order + 1 > max_poly) then - max_poly = nuc % multipole % fit_order + 1 - end if + if (nuc % multipole % fit_order + 1 > max_poly) then + max_poly = nuc % multipole % fit_order + 1 + end if - ! Recreate nu-fission tables - if (nuc % fissionable) then - call generate_nu_fission(nuc) - end if + ! Recreate nu-fission tables + if (nuc % fissionable) then + call generate_nu_fission(nuc) + end if - if(associated(nuc)) nullify(nuc) + end associate end subroutine read_multipole_data From 2de30b8e389994fc872c745a34eac2f811f49ab5 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Tue, 19 Jan 2016 08:55:39 -0500 Subject: [PATCH 193/650] Removed blank line in test_mgxs_library_distribcell.py --- .../test_mgxs_library_distribcell.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py index 41aa1245d0..1de21a6037 100644 --- a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py +++ b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py @@ -73,7 +73,6 @@ class MGXSTestHarness(PyAPITestHarness): return outstr - def _cleanup(self): super(MGXSTestHarness, self)._cleanup() f = os.path.join(os.getcwd(), 'tallies.xml') From 254d68b69314655787d773188761186a853c21de Mon Sep 17 00:00:00 2001 From: Kelly Rowland Date: Tue, 19 Jan 2016 10:07:12 -0800 Subject: [PATCH 194/650] fix DOI link to burnup benchmark paper --- docs/source/publications.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/publications.rst b/docs/source/publications.rst index 369b9d9775..66300dc52a 100644 --- a/docs/source/publications.rst +++ b/docs/source/publications.rst @@ -28,7 +28,7 @@ Benchmarking - Khurrum S. Chaudri and Sikander M. Mirza, "Burnup dependent Monte Carlo neutron physics calculations of IAEA MTR benchmark," *Prog. Nucl. Energy*, - **81**, 43-52 (2015). ``_ + **81**, 43-52 (2015). ``_ - Daniel J. Kelly, Brian N. Aviles, Paul K. Romano, Bryan R. Herman, Nicholas E. Horelik, and Benoit Forget, "Analysis of select BEAVRS PWR From d4d86fb98cbe4ed34546cb4eb1b88418a707dd82 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 19 Jan 2016 12:56:42 -0600 Subject: [PATCH 195/650] Update quick install instructions --- docs/source/quickinstall.rst | 44 +++++++++++++++++++++++++----- docs/source/usersguide/install.rst | 9 ++++-- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/docs/source/quickinstall.rst b/docs/source/quickinstall.rst index 9ce752be7c..8bf95e245f 100644 --- a/docs/source/quickinstall.rst +++ b/docs/source/quickinstall.rst @@ -12,24 +12,55 @@ OpenMC, see :ref:`usersguide_install` in the User's Manual. Installing on Ubuntu through PPA -------------------------------- -For users with Ubuntu 11.10 or later, a binary package for OpenMC is available -through a `Personal Package Archive`_ (PPA) and can be installed through the `APT -package manager`_. Simply enter the following commands into the terminal: +For users with Ubuntu 15.04 or later, a binary package for OpenMC is available +through a `Personal Package Archive`_ (PPA) and can be installed through the +`APT package manager`_. First, add the following PPA to the repository sources: .. code-block:: sh sudo apt-add-repository ppa:paulromano/staging + +Next, resynchronize the package index files: + +.. code-block:: sh + sudo apt-get update + +Now OpenMC should be recognized within the repository and can be installed: + +.. code-block:: sh + sudo apt-get install openmc -Currently, the binary package does not allow for parallel simulations or use of -HDF5_. Users who need such capabilities should build OpenMC from source as is -described in :ref:`usersguide_install`. +Binary packages from this PPA may exist for earlier versions of Ubuntu, but they +are no longer supported. .. _Personal Package Archive: https://launchpad.net/~paulromano/+archive/staging .. _APT package manager: https://help.ubuntu.com/community/AptGet/Howto .. _HDF5: http://www.hdfgroup.org/HDF5/ +--------------------------------------- +Installing from Source on Ubuntu 15.04+ +--------------------------------------- + +To build OpenMC from source, several :ref:`prerequisites ` are +needed. If you are Ubuntu 15.04 or higher, all prerequisites can be installed +directly from the package manager. + +.. code-block:: sh + + sudo apt-get install gfortran + sudo apt-get install cmake + sudo apt-get install libhdf5-dev + +After the packages have been installed, follow the instructions below for +building and installing OpenMC from source. + +.. note:: Before Ubuntu 15.04, the HDF5 package included in the Ubuntu Package + archive was not built with support for the Fortran 2003 HDF5 + interface, which is needed by OpenMC. If you are using Ubuntu 14.10 or + before you will need to build HDF5 from source. + ------------------------------------------- Installing from Source on Linux or Mac OS X ------------------------------------------- @@ -42,7 +73,6 @@ entering the following commands in a terminal: git clone https://github.com/mit-crpg/openmc.git cd openmc - git checkout -b master origin/master mkdir build && cd build cmake .. make diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst index e3f0df5e91..4075e03033 100644 --- a/docs/source/usersguide/install.rst +++ b/docs/source/usersguide/install.rst @@ -9,8 +9,8 @@ Installing on Ubuntu with PPA ----------------------------- For users with Ubuntu 15.04 or later, a binary package for OpenMC is available -through a Personal Package Archive (PPA) and can be installed through the APT -package manager. First, add the following PPA to the repository sources: +through a `Personal Package Archive`_ (PPA) and can be installed through the +`APT package manager`_. First, add the following PPA to the repository sources: .. code-block:: sh @@ -31,10 +31,15 @@ Now OpenMC should be recognized within the repository and can be installed: Binary packages from this PPA may exist for earlier versions of Ubuntu, but they are no longer supported. +.. _Personal Package Archive: https://launchpad.net/~paulromano/+archive/staging +.. _APT package manager: https://help.ubuntu.com/community/AptGet/Howto + -------------------- Building from Source -------------------- +.. _prerequisites: + Prerequisites ------------- From 0e5a2ef3978cde06574e171a7f5e8ccfbe07b5bd Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 19 Jan 2016 08:37:50 -0600 Subject: [PATCH 196/650] Fix missing 'collision' in tallies.rnc --- src/relaxng/tallies.rnc | 4 ++-- src/relaxng/tallies.rng | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/relaxng/tallies.rnc b/src/relaxng/tallies.rnc index 0f3672c6f2..cc327f8048 100644 --- a/src/relaxng/tallies.rnc +++ b/src/relaxng/tallies.rnc @@ -19,8 +19,8 @@ element tallies { (element id { xsd:int } | attribute id { xsd:int }) & (element name { xsd:string { maxLength="52" } } | attribute name { xsd:string { maxLength="52" } })? & - (element estimator { ( "analog" | "tracklength" ) } | - attribute estimator { ( "analog" | "tracklength" ) })? & + (element estimator { ( "analog" | "tracklength" | "collision" ) } | + attribute estimator { ( "analog" | "tracklength" | "collision" ) })? & element filter { (element type { ( "cell" | "cellborn" | "material" | "universe" | "surface" | "distribcell" | "mesh" | "energy" | "energyout" | "mu" | diff --git a/src/relaxng/tallies.rng b/src/relaxng/tallies.rng index 36bd5cb85f..755e9e90dc 100644 --- a/src/relaxng/tallies.rng +++ b/src/relaxng/tallies.rng @@ -120,12 +120,14 @@ analog tracklength + collision analog tracklength + collision From 80b6da6176a93ae88709a52987a9b3a53f48d9cc Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 19 Jan 2016 08:39:36 -0600 Subject: [PATCH 197/650] Get coverage working with run_tests.py and generate HTML output --- CMakeLists.txt | 30 +++++++++++++----------------- tests/run_tests.py | 24 +++++++++++++++--------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f0f06d47ba..a143c3d3b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -316,14 +316,14 @@ file(GLOB_RECURSE TESTS ${CMAKE_CURRENT_SOURCE_DIR}/tests/test_*.py) # Check for MEM_CHECK and COVERAGE variables if (DEFINED ENV{MEM_CHECK}) set(MEM_CHECK $ENV{MEM_CHECK}) -else(DEFINED ENV{MEM_CHECK}) +else() set(MEM_CHECK FALSE) -endif(DEFINED ENV{MEM_CHECK}) +endif() if (DEFINED ENV{COVERAGE}) set(COVERAGE $ENV{COVERAGE}) -else(DEFINED ENV{COVERAGE}) +else() set(COVERAGE FALSE) -endif(DEFINED ENV{COVERAGE}) +endif() # Loop through all the tests foreach(test ${TESTS}) @@ -337,24 +337,20 @@ foreach(test ${TESTS}) # Check serial/parallel if (${MPI_ENABLED}) - # Preform a parallel test add_test(NAME ${TEST_NAME} WORKING_DIRECTORY ${TEST_PATH} COMMAND ${PYTHON_EXECUTABLE} ${TEST_NAME} --exe $ --mpi_exec $ENV{MPI_DIR}/bin/mpiexec) - - else(${MPI_ENABLED}) - + else() # Perform a serial test add_test(NAME ${TEST_NAME} WORKING_DIRECTORY ${TEST_PATH} COMMAND ${PYTHON_EXECUTABLE} ${TEST_NAME} --exe $) - - endif(${MPI_ENABLED}) + endif() # Handle special case for valgrind and gcov (run openmc directly, no python) - else(NOT ${MEM_CHECK} AND NOT ${COVERAGE}) + else() # If a plot test is encountered, run with "-p" if (${test} MATCHES "test_plot") @@ -392,9 +388,9 @@ foreach(test ${TESTS}) set(RESTART_FILE particle_9_555.h5) elseif(${test} MATCHES "test_particle_restart_fixed") set(RESTART_FILE particle_7_928.h5) - else(${test} MATCHES "test_statepoint_restart") + else() message(FATAL_ERROR "Restart test ${test} not recognized") - endif(${test} MATCHES "test_statepoint_restart") + endif() # Perform serial valgrind and coverage test add_test(NAME ${TEST_NAME} @@ -411,15 +407,15 @@ foreach(test ${TESTS}) # Handle standard tests for valgrind and gcov - else(${test} MATCHES "test_plot") + else() # Perform serial valgrind and coverage test add_test(NAME ${TEST_NAME} WORKING_DIRECTORY ${TEST_PATH} - COMMAND $ ${TEST_PATH}) + COMMAND ${PYTHON_EXECUTABLE} ${TEST_NAME} --exe $) - endif(${test} MATCHES "test_plot") + endif() - endif(NOT ${MEM_CHECK} AND NOT ${COVERAGE}) + endif() endforeach(test) diff --git a/tests/run_tests.py b/tests/run_tests.py index 338732c142..eb8d8c5187 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -42,9 +42,9 @@ parser.add_option("-s", "--script", action="store_true", dest="script", # Default compiler paths FC='gfortran' -MPI_DIR='/opt/mpich/3.1.3-gnu' -HDF5_DIR='/opt/hdf5/1.8.15-gnu' -PHDF5_DIR='/opt/phdf5/1.8.15-gnu' +MPI_DIR='/opt/mpich/3.2-gnu' +HDF5_DIR='/opt/hdf5/1.8.16-gnu' +PHDF5_DIR='/opt/phdf5/1.8.16-gnu' # Script mode for extra capability script_mode = False @@ -412,12 +412,12 @@ for key in iter(tests): continue # Set test specific CTest script vars. Not used in non-script mode - ctest_vars.update({'build_name' : test.get_build_name()}) - ctest_vars.update({'build_opts' : test.get_build_opts()}) - ctest_vars.update({'mem_check' : test.valgrind}) - ctest_vars.update({'coverage' : test.coverage}) - ctest_vars.update({'valgrind_cmd' : test.valgrind_cmd}) - ctest_vars.update({'gcov_cmd' : test.gcov_cmd}) + ctest_vars.update({'build_name': test.get_build_name()}) + ctest_vars.update({'build_opts': test.get_build_opts()}) + ctest_vars.update({'mem_check': test.valgrind}) + ctest_vars.update({'coverage': test.coverage}) + ctest_vars.update({'valgrind_cmd': test.valgrind_cmd}) + ctest_vars.update({'gcov_cmd': test.gcov_cmd}) # Check for user custom tests # INCLUDE is a CTest command that allows for a subset @@ -471,6 +471,12 @@ for key in iter(tests): logfilename = logfilename + '_{0}.log'.format(test.name) shutil.copy(logfile[0], logfilename) + # For coverage builds, use lcov to generate HTML output + if test.coverage: + call(['lcov', '--directory', '.', '--capture', + '--output-file', 'coverage.info']) + call(['genhtml', '--output-directory', 'coverage', 'coverage.info']) + # Clear build directory and remove binary and hdf5 files shutil.rmtree('build', ignore_errors=True) if script_mode: From 05ea729022d11ce69e144e216154986520a7dcf9 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 19 Jan 2016 10:37:25 -0600 Subject: [PATCH 198/650] Use same add_tests for valgrind/coverage configurations --- CMakeLists.txt | 96 +++++----------------------------------- tests/testing_harness.py | 17 +++++++ 2 files changed, 28 insertions(+), 85 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a143c3d3b2..19c4e0ddc1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -327,95 +327,21 @@ endif() # Loop through all the tests foreach(test ${TESTS}) - # Get test information get_filename_component(TEST_NAME ${test} NAME) get_filename_component(TEST_PATH ${test} PATH) - # Check for running standard tests (no valgrind, no gcov) - if(NOT ${MEM_CHECK} AND NOT ${COVERAGE}) - - # Check serial/parallel - if (${MPI_ENABLED}) - # Preform a parallel test - add_test(NAME ${TEST_NAME} - WORKING_DIRECTORY ${TEST_PATH} - COMMAND ${PYTHON_EXECUTABLE} ${TEST_NAME} --exe $ - --mpi_exec $ENV{MPI_DIR}/bin/mpiexec) - else() - # Perform a serial test - add_test(NAME ${TEST_NAME} - WORKING_DIRECTORY ${TEST_PATH} - COMMAND ${PYTHON_EXECUTABLE} ${TEST_NAME} --exe $) - endif() - - # Handle special case for valgrind and gcov (run openmc directly, no python) + # Check serial/parallel + if (${MPI_ENABLED}) + # Preform a parallel test + add_test(NAME ${TEST_NAME} + WORKING_DIRECTORY ${TEST_PATH} + COMMAND ${PYTHON_EXECUTABLE} ${TEST_NAME} --exe $ + --mpi_exec $ENV{MPI_DIR}/bin/mpiexec) else() - - # If a plot test is encountered, run with "-p" - if (${test} MATCHES "test_plot") - - # Perform serial valgrind and coverage test with plot flag - add_test(NAME ${TEST_NAME} - WORKING_DIRECTORY ${TEST_PATH} - COMMAND $ -p ${TEST_PATH}) - - elseif(${test} MATCHES "test_filter_distribcell") - - # Add each case for distribcell tests - add_test(NAME ${TEST_NAME}_case-1 - WORKING_DIRECTORY ${TEST_PATH}/case-1 - COMMAND $ ${TEST_PATH}/case-1) - add_test(NAME ${TEST_NAME}_case-2 - WORKING_DIRECTORY ${TEST_PATH}/case-2 - COMMAND $ ${TEST_PATH}/case-2) - add_test(NAME ${TEST_NAME}_case-3 - WORKING_DIRECTORY ${TEST_PATH}/case-3 - COMMAND $ ${TEST_PATH}/case-3) - add_test(NAME ${TEST_NAME}_case-4 - WORKING_DIRECTORY ${TEST_PATH}/case-4 - COMMAND $ ${TEST_PATH}/case-4) - - # If a restart test is encounted, need to run with -r and restart file(s) - elseif(${test} MATCHES "restart") - - # Handle restart tests separately - if(${test} MATCHES "test_statepoint_restart") - set(RESTART_FILE statepoint.07.h5) - elseif(${test} MATCHES "test_sourcepoint_restart") - set(RESTART_FILE statepoint.07.h5 source.07.h5) - elseif(${test} MATCHES "test_particle_restart_eigval") - set(RESTART_FILE particle_9_555.h5) - elseif(${test} MATCHES "test_particle_restart_fixed") - set(RESTART_FILE particle_7_928.h5) - else() - message(FATAL_ERROR "Restart test ${test} not recognized") - endif() - - # Perform serial valgrind and coverage test - add_test(NAME ${TEST_NAME} - WORKING_DIRECTORY ${TEST_PATH} - COMMAND $ ${TEST_PATH}) - - # Perform serial valgrind and coverage restart test - add_test(NAME ${TEST_NAME}_restart - WORKING_DIRECTORY ${TEST_PATH} - COMMAND $ -r ${RESTART_FILE} ${TEST_PATH}) - - # Set test dependency - set_tests_properties(${TEST_NAME}_restart PROPERTIES DEPENDS ${TEST_NAME}) - - - # Handle standard tests for valgrind and gcov - else() - - # Perform serial valgrind and coverage test - add_test(NAME ${TEST_NAME} - WORKING_DIRECTORY ${TEST_PATH} - COMMAND ${PYTHON_EXECUTABLE} ${TEST_NAME} --exe $) - - endif() - + # Perform a serial test + add_test(NAME ${TEST_NAME} + WORKING_DIRECTORY ${TEST_PATH} + COMMAND ${PYTHON_EXECUTABLE} ${TEST_NAME} --exe $) endif() - endforeach(test) diff --git a/tests/testing_harness.py b/tests/testing_harness.py index f1d72dd81c..190c702282 100644 --- a/tests/testing_harness.py +++ b/tests/testing_harness.py @@ -230,6 +230,23 @@ class CMFDTestHarness(TestHarness): class ParticleRestartTestHarness(TestHarness): """Specialized TestHarness for running OpenMC particle restart tests.""" + def _run_openmc(self): + # Set arguments + args = {'openmc_exec': self._opts.exe} + if self._opts.mpi_exec is not None: + args.update({'mpi_procs': self._opts.mpi_np, + 'mpi_exec': self._opts.mpi_exec}) + + # Initial run + executor = Executor() + returncode = executor.run_simulation(**args) + assert returncode == 0, 'OpenMC did not exit successfully.' + + # Run particle restart + args.update({'restart_file': self._sp_name}) + returncode = executor.run_simulation(**args) + assert returncode == 0, 'OpenMC did not exit successfully.' + def _test_output_created(self): """Make sure the restart file has been created.""" particle = glob.glob(os.path.join(os.getcwd(), self._sp_name)) From fbd66b94954c962e43dd0f1116765a430ac13ec8 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 19 Jan 2016 08:44:05 -0600 Subject: [PATCH 199/650] Replace many filter/score tests with a single test_tallies --- tests/test_filter_azimuthal/inputs_true.dat | 1 - tests/test_filter_azimuthal/results_true.dat | 76 - .../test_filter_azimuthal.py | 59 - tests/test_filter_cell/inputs_true.dat | 1 - tests/test_filter_cell/results_true.dat | 11 - tests/test_filter_cell/test_filter_cell.py | 29 - tests/test_filter_cellborn/inputs_true.dat | 1 - tests/test_filter_cellborn/results_true.dat | 11 - .../test_filter_cellborn.py | 29 - .../test_filter_delayedgroup/inputs_true.dat | 1 - .../test_filter_delayedgroup/results_true.dat | 15 - .../test_filter_delayedgroup.py | 30 - tests/test_filter_energy/inputs_true.dat | 1 - tests/test_filter_energy/results_true.dat | 11 - .../test_filter_energy/test_filter_energy.py | 30 - tests/test_filter_energyout/inputs_true.dat | 1 - tests/test_filter_energyout/results_true.dat | 11 - .../test_filter_energyout.py | 30 - .../inputs_true.dat | 1 - .../results_true.dat | 67 - .../test_filter_group_transfer.py | 34 - tests/test_filter_material/inputs_true.dat | 1 - tests/test_filter_material/results_true.dat | 11 - .../test_filter_material.py | 29 - tests/test_filter_mu/inputs_true.dat | 1 - tests/test_filter_mu/results_true.dat | 121 - tests/test_filter_mu/test_filter_mu.py | 53 - tests/test_filter_polar/inputs_true.dat | 1 - tests/test_filter_polar/results_true.dat | 76 - tests/test_filter_polar/test_filter_polar.py | 59 - tests/test_filter_universe/inputs_true.dat | 1 - tests/test_filter_universe/results_true.dat | 11 - .../test_filter_universe.py | 29 - tests/test_score_MT/inputs_true.dat | 1 - tests/test_score_MT/results_true.dat | 77 - tests/test_score_MT/test_score_MT.py | 34 - tests/test_score_absorption/inputs_true.dat | 1 - tests/test_score_absorption/results_true.dat | 29 - .../test_score_absorption.py | 32 - .../inputs_true.dat | 1 - .../results_true.dat | 29 - .../test_score_delayed_nufission.py | 32 - tests/test_score_events/inputs_true.dat | 1 - tests/test_score_events/results_true.dat | 12 - tests/test_score_events/test_score_events.py | 31 - tests/test_score_fission/inputs_true.dat | 1 - tests/test_score_fission/results_true.dat | 29 - .../test_score_fission/test_score_fission.py | 32 - tests/test_score_flux/inputs_true.dat | 1 - tests/test_score_flux/results_true.dat | 41 - tests/test_score_flux/test_score_flux.py | 32 - tests/test_score_flux_yn/inputs_true.dat | 1 - tests/test_score_flux_yn/results_true.dat | 1314 ------ .../test_score_flux_yn/test_score_flux_yn.py | 33 - .../inputs_true.dat | 1 - .../results_true.dat | 29 - .../test_score_inversevelocity.py | 32 - tests/test_score_kappafission/inputs_true.dat | 1 - .../test_score_kappafission/results_true.dat | 29 - .../test_score_kappafission.py | 32 - tests/test_score_nufission/inputs_true.dat | 1 - tests/test_score_nufission/results_true.dat | 29 - .../test_score_nufission.py | 32 - tests/test_score_nuscatter/inputs_true.dat | 1 - tests/test_score_nuscatter/results_true.dat | 11 - .../test_score_nuscatter.py | 34 - tests/test_score_nuscatter_n/inputs_true.dat | 1 - tests/test_score_nuscatter_n/results_true.dat | 33 - .../test_score_nuscatter_n.py | 38 - tests/test_score_nuscatter_pn/inputs_true.dat | 1 - .../test_score_nuscatter_pn/results_true.dat | 24 - .../test_score_nuscatter_pn.py | 42 - tests/test_score_nuscatter_yn/inputs_true.dat | 1 - .../test_score_nuscatter_yn/results_true.dat | 38 - .../test_score_nuscatter_yn.py | 38 - tests/test_score_scatter/inputs_true.dat | 1 - tests/test_score_scatter/results_true.dat | 29 - .../test_score_scatter/test_score_scatter.py | 32 - tests/test_score_scatter_n/inputs_true.dat | 1 - tests/test_score_scatter_n/results_true.dat | 33 - .../test_score_scatter_n.py | 33 - tests/test_score_scatter_pn/inputs_true.dat | 1 - tests/test_score_scatter_pn/results_true.dat | 24 - .../test_score_scatter_pn.py | 38 - tests/test_score_scatter_yn/inputs_true.dat | 1 - tests/test_score_scatter_yn/results_true.dat | 56 - .../test_score_scatter_yn.py | 34 - tests/test_score_total/inputs_true.dat | 1 - tests/test_score_total/results_true.dat | 29 - tests/test_score_total/test_score_total.py | 32 - tests/test_score_total_yn/inputs_true.dat | 1 - tests/test_score_total_yn/results_true.dat | 1214 ------ .../test_score_total_yn.py | 35 - tests/test_tallies/inputs_true.dat | 1 + tests/test_tallies/results_true.dat | 3697 +++++++++++++++++ tests/test_tallies/test_tallies.py | 209 + 96 files changed, 3907 insertions(+), 4650 deletions(-) delete mode 100644 tests/test_filter_azimuthal/inputs_true.dat delete mode 100644 tests/test_filter_azimuthal/results_true.dat delete mode 100644 tests/test_filter_azimuthal/test_filter_azimuthal.py delete mode 100644 tests/test_filter_cell/inputs_true.dat delete mode 100644 tests/test_filter_cell/results_true.dat delete mode 100644 tests/test_filter_cell/test_filter_cell.py delete mode 100644 tests/test_filter_cellborn/inputs_true.dat delete mode 100644 tests/test_filter_cellborn/results_true.dat delete mode 100644 tests/test_filter_cellborn/test_filter_cellborn.py delete mode 100644 tests/test_filter_delayedgroup/inputs_true.dat delete mode 100644 tests/test_filter_delayedgroup/results_true.dat delete mode 100644 tests/test_filter_delayedgroup/test_filter_delayedgroup.py delete mode 100644 tests/test_filter_energy/inputs_true.dat delete mode 100644 tests/test_filter_energy/results_true.dat delete mode 100644 tests/test_filter_energy/test_filter_energy.py delete mode 100644 tests/test_filter_energyout/inputs_true.dat delete mode 100644 tests/test_filter_energyout/results_true.dat delete mode 100644 tests/test_filter_energyout/test_filter_energyout.py delete mode 100644 tests/test_filter_group_transfer/inputs_true.dat delete mode 100644 tests/test_filter_group_transfer/results_true.dat delete mode 100644 tests/test_filter_group_transfer/test_filter_group_transfer.py delete mode 100644 tests/test_filter_material/inputs_true.dat delete mode 100644 tests/test_filter_material/results_true.dat delete mode 100644 tests/test_filter_material/test_filter_material.py delete mode 100644 tests/test_filter_mu/inputs_true.dat delete mode 100644 tests/test_filter_mu/results_true.dat delete mode 100644 tests/test_filter_mu/test_filter_mu.py delete mode 100644 tests/test_filter_polar/inputs_true.dat delete mode 100644 tests/test_filter_polar/results_true.dat delete mode 100644 tests/test_filter_polar/test_filter_polar.py delete mode 100644 tests/test_filter_universe/inputs_true.dat delete mode 100644 tests/test_filter_universe/results_true.dat delete mode 100644 tests/test_filter_universe/test_filter_universe.py delete mode 100644 tests/test_score_MT/inputs_true.dat delete mode 100644 tests/test_score_MT/results_true.dat delete mode 100644 tests/test_score_MT/test_score_MT.py delete mode 100644 tests/test_score_absorption/inputs_true.dat delete mode 100644 tests/test_score_absorption/results_true.dat delete mode 100644 tests/test_score_absorption/test_score_absorption.py delete mode 100644 tests/test_score_delayed_nufission/inputs_true.dat delete mode 100644 tests/test_score_delayed_nufission/results_true.dat delete mode 100644 tests/test_score_delayed_nufission/test_score_delayed_nufission.py delete mode 100644 tests/test_score_events/inputs_true.dat delete mode 100644 tests/test_score_events/results_true.dat delete mode 100644 tests/test_score_events/test_score_events.py delete mode 100644 tests/test_score_fission/inputs_true.dat delete mode 100644 tests/test_score_fission/results_true.dat delete mode 100644 tests/test_score_fission/test_score_fission.py delete mode 100644 tests/test_score_flux/inputs_true.dat delete mode 100644 tests/test_score_flux/results_true.dat delete mode 100644 tests/test_score_flux/test_score_flux.py delete mode 100644 tests/test_score_flux_yn/inputs_true.dat delete mode 100644 tests/test_score_flux_yn/results_true.dat delete mode 100755 tests/test_score_flux_yn/test_score_flux_yn.py delete mode 100644 tests/test_score_inverse_velocity/inputs_true.dat delete mode 100644 tests/test_score_inverse_velocity/results_true.dat delete mode 100644 tests/test_score_inverse_velocity/test_score_inversevelocity.py delete mode 100644 tests/test_score_kappafission/inputs_true.dat delete mode 100644 tests/test_score_kappafission/results_true.dat delete mode 100644 tests/test_score_kappafission/test_score_kappafission.py delete mode 100644 tests/test_score_nufission/inputs_true.dat delete mode 100644 tests/test_score_nufission/results_true.dat delete mode 100644 tests/test_score_nufission/test_score_nufission.py delete mode 100644 tests/test_score_nuscatter/inputs_true.dat delete mode 100644 tests/test_score_nuscatter/results_true.dat delete mode 100644 tests/test_score_nuscatter/test_score_nuscatter.py delete mode 100644 tests/test_score_nuscatter_n/inputs_true.dat delete mode 100644 tests/test_score_nuscatter_n/results_true.dat delete mode 100644 tests/test_score_nuscatter_n/test_score_nuscatter_n.py delete mode 100644 tests/test_score_nuscatter_pn/inputs_true.dat delete mode 100644 tests/test_score_nuscatter_pn/results_true.dat delete mode 100644 tests/test_score_nuscatter_pn/test_score_nuscatter_pn.py delete mode 100644 tests/test_score_nuscatter_yn/inputs_true.dat delete mode 100644 tests/test_score_nuscatter_yn/results_true.dat delete mode 100644 tests/test_score_nuscatter_yn/test_score_nuscatter_yn.py delete mode 100644 tests/test_score_scatter/inputs_true.dat delete mode 100644 tests/test_score_scatter/results_true.dat delete mode 100644 tests/test_score_scatter/test_score_scatter.py delete mode 100644 tests/test_score_scatter_n/inputs_true.dat delete mode 100644 tests/test_score_scatter_n/results_true.dat delete mode 100644 tests/test_score_scatter_n/test_score_scatter_n.py delete mode 100644 tests/test_score_scatter_pn/inputs_true.dat delete mode 100644 tests/test_score_scatter_pn/results_true.dat delete mode 100644 tests/test_score_scatter_pn/test_score_scatter_pn.py delete mode 100644 tests/test_score_scatter_yn/inputs_true.dat delete mode 100644 tests/test_score_scatter_yn/results_true.dat delete mode 100644 tests/test_score_scatter_yn/test_score_scatter_yn.py delete mode 100644 tests/test_score_total/inputs_true.dat delete mode 100644 tests/test_score_total/results_true.dat delete mode 100644 tests/test_score_total/test_score_total.py delete mode 100644 tests/test_score_total_yn/inputs_true.dat delete mode 100644 tests/test_score_total_yn/results_true.dat delete mode 100644 tests/test_score_total_yn/test_score_total_yn.py create mode 100644 tests/test_tallies/inputs_true.dat create mode 100644 tests/test_tallies/results_true.dat create mode 100644 tests/test_tallies/test_tallies.py diff --git a/tests/test_filter_azimuthal/inputs_true.dat b/tests/test_filter_azimuthal/inputs_true.dat deleted file mode 100644 index e4a964700f..0000000000 --- a/tests/test_filter_azimuthal/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -57d6fd9cb5180c38efd2729a5dea0708cbd5fd0bf7dcf0c9d5c9cef5d818aeab5a926d03e70dedcf1b60d5740938fb3ba80e6ccdb09c661d159c0893da3bd593 \ No newline at end of file diff --git a/tests/test_filter_azimuthal/results_true.dat b/tests/test_filter_azimuthal/results_true.dat deleted file mode 100644 index 7883a730d4..0000000000 --- a/tests/test_filter_azimuthal/results_true.dat +++ /dev/null @@ -1,76 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -4.215917E+01 -3.561920E+02 -4.174788E+01 -3.505184E+02 -4.603223E+01 -4.242918E+02 -4.496760E+01 -4.075599E+02 -4.088099E+01 -3.376516E+02 -tally 2: -4.157239E+01 -3.482158E+02 -4.227810E+01 -3.613293E+02 -4.376107E+01 -3.835007E+02 -4.644205E+01 -4.327195E+02 -4.191554E+01 -3.522147E+02 -tally 3: -4.215917E+01 -3.561920E+02 -4.174788E+01 -3.505184E+02 -4.603223E+01 -4.242918E+02 -4.496402E+01 -4.075053E+02 -4.088458E+01 -3.377000E+02 -tally 4: -1.531988E+01 -4.816326E+01 -9.274393E+00 -1.821174E+01 -1.595868E+01 -5.124238E+01 -1.299895E+00 -6.417145E-01 -1.510024E+01 -4.604170E+01 -8.533361E+00 -1.462765E+01 -1.658141E+01 -5.595629E+01 -1.427417E+00 -6.621807E-01 -1.683102E+01 -5.741400E+01 -9.845257E+00 -2.028406E+01 -1.773179E+01 -6.477077E+01 -1.536972E+00 -6.111079E-01 -1.586070E+01 -5.360975E+01 -9.928220E+00 -2.089005E+01 -1.737609E+01 -6.161847E+01 -1.700608E+00 -8.439708E-01 -1.607027E+01 -5.490113E+01 -7.569336E+00 -1.280955E+01 -1.606086E+01 -5.308665E+01 -9.898901E-01 -3.143027E-01 diff --git a/tests/test_filter_azimuthal/test_filter_azimuthal.py b/tests/test_filter_azimuthal/test_filter_azimuthal.py deleted file mode 100644 index 248ba00120..0000000000 --- a/tests/test_filter_azimuthal/test_filter_azimuthal.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - -class FilterAzimuthalTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt1 = openmc.Filter(type='azimuthal', - bins=(-3.1416, -1.8850, -0.6283, 0.6283, 1.8850, - 3.1416)) - tally1 = openmc.Tally(tally_id=1) - tally1.add_filter(filt1) - tally1.add_score('flux') - tally1.estimator = 'tracklength' - - tally2 = openmc.Tally(tally_id=2) - tally2.add_filter(filt1) - tally2.add_score('flux') - tally2.estimator = 'analog' - - filt3 = openmc.Filter(type='azimuthal', bins=(5,)) - tally3 = openmc.Tally(tally_id=3) - tally3.add_filter(filt3) - tally3.add_score('flux') - tally3.estimator = 'tracklength' - - mesh = openmc.Mesh(mesh_id=1) - mesh.lower_left = [-182.07, -182.07] - mesh.upper_right = [182.07, 182.07] - mesh.dimension = [2, 2] - filt_mesh = openmc.Filter(type='mesh', bins=(1,)) - tally4 = openmc.Tally(tally_id=4) - tally4.add_filter(filt3) - tally4.add_filter(filt_mesh) - tally4.add_score('flux') - tally4.estimator = 'tracklength' - - - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(tally1) - self._input_set.tallies.add_tally(tally2) - self._input_set.tallies.add_tally(tally3) - self._input_set.tallies.add_tally(tally4) - self._input_set.tallies.add_mesh(mesh) - - super(FilterAzimuthalTestHarness, self)._build_inputs() - - def _cleanup(self): - super(FilterAzimuthalTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = FilterAzimuthalTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_filter_cell/inputs_true.dat b/tests/test_filter_cell/inputs_true.dat deleted file mode 100644 index d7f0a9e7f8..0000000000 --- a/tests/test_filter_cell/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -f8359184c02fbab5dca5368689a84924066ab1fb09cae575588ceddd696d5461db577498df9959365d89fe933e9b338390e44e362c603c6f2aa5bcf4acc14b20 \ No newline at end of file diff --git a/tests/test_filter_cell/results_true.dat b/tests/test_filter_cell/results_true.dat deleted file mode 100644 index 47ff3c281a..0000000000 --- a/tests/test_filter_cell/results_true.dat +++ /dev/null @@ -1,11 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -0.000000E+00 -0.000000E+00 -1.767552E+01 -6.295417E+01 -3.863588E+00 -3.013300E+00 -5.356594E+01 -5.839391E+02 diff --git a/tests/test_filter_cell/test_filter_cell.py b/tests/test_filter_cell/test_filter_cell.py deleted file mode 100644 index d532d59cf8..0000000000 --- a/tests/test_filter_cell/test_filter_cell.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class FilterCellTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(10, 21, 22, 23)) - tally = openmc.Tally(tally_id=1) - tally.add_filter(filt) - tally.add_score('total') - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(tally) - - super(FilterCellTestHarness, self)._build_inputs() - - def _cleanup(self): - super(FilterCellTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = FilterCellTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_filter_cellborn/inputs_true.dat b/tests/test_filter_cellborn/inputs_true.dat deleted file mode 100644 index a4f1a74b8f..0000000000 --- a/tests/test_filter_cellborn/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -8ae662f8881ce8cdec550069c6233c2c91e9a10f7200af6892cf6f2d77712ccfa17895dbd2eee02e6daf3d665c6ed84b29e17d89ff519e70c37b36d75a431d53 \ No newline at end of file diff --git a/tests/test_filter_cellborn/results_true.dat b/tests/test_filter_cellborn/results_true.dat deleted file mode 100644 index d0ab58f4ed..0000000000 --- a/tests/test_filter_cellborn/results_true.dat +++ /dev/null @@ -1,11 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -0.000000E+00 -0.000000E+00 -8.921179E+01 -1.601939E+03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 diff --git a/tests/test_filter_cellborn/test_filter_cellborn.py b/tests/test_filter_cellborn/test_filter_cellborn.py deleted file mode 100644 index 2fac6a1fcd..0000000000 --- a/tests/test_filter_cellborn/test_filter_cellborn.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class FilterCellbornTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cellborn', bins=(10, 21, 22, 23)) - tally = openmc.Tally(tally_id=1) - tally.add_filter(filt) - tally.add_score('total') - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(tally) - - super(FilterCellbornTestHarness, self)._build_inputs() - - def _cleanup(self): - super(FilterCellbornTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = FilterCellbornTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_filter_delayedgroup/inputs_true.dat b/tests/test_filter_delayedgroup/inputs_true.dat deleted file mode 100644 index 6b06d41735..0000000000 --- a/tests/test_filter_delayedgroup/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -a7c8ce7ffbc3a7b965d8a3077a4d9132130561afef19047b279b2d23198e248b09664856a092a32394894e19fef7708cebad99b3839d735c4e98ae0c9af58cb7 \ No newline at end of file diff --git a/tests/test_filter_delayedgroup/results_true.dat b/tests/test_filter_delayedgroup/results_true.dat deleted file mode 100644 index 9db6de2562..0000000000 --- a/tests/test_filter_delayedgroup/results_true.dat +++ /dev/null @@ -1,15 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -8.141852E-04 -1.337187E-07 -4.849156E-03 -4.744020E-06 -4.460252E-03 -4.015453E-06 -1.028479E-02 -2.136252E-05 -5.002274E-03 -5.056965E-06 -1.974747E-03 -7.882970E-07 diff --git a/tests/test_filter_delayedgroup/test_filter_delayedgroup.py b/tests/test_filter_delayedgroup/test_filter_delayedgroup.py deleted file mode 100644 index bdad3cc958..0000000000 --- a/tests/test_filter_delayedgroup/test_filter_delayedgroup.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class FilterDelayedgroupTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='delayedgroup', - bins=(1, 2, 3, 4, 5, 6)) - tally = openmc.Tally(tally_id=1) - tally.add_filter(filt) - tally.add_score('delayed-nu-fission') - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(tally) - - super(FilterDelayedgroupTestHarness, self)._build_inputs() - - def _cleanup(self): - super(FilterDelayedgroupTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = FilterDelayedgroupTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_filter_energy/inputs_true.dat b/tests/test_filter_energy/inputs_true.dat deleted file mode 100644 index 4098aaece9..0000000000 --- a/tests/test_filter_energy/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -51d3e2c43f36712a7b26c5fa26e0e2ca6fb9af205af04f0f8cd44c6b100e36382417c2c63d711e4677ce3c1958d15072727d5fd32424a3f6eb08d1f3b1c7db5a \ No newline at end of file diff --git a/tests/test_filter_energy/results_true.dat b/tests/test_filter_energy/results_true.dat deleted file mode 100644 index 599e0bf888..0000000000 --- a/tests/test_filter_energy/results_true.dat +++ /dev/null @@ -1,11 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -2.844008E+01 -1.619630E+02 -4.425619E+01 -3.938244E+02 -5.527425E+01 -6.120383E+02 -9.799897E+00 -1.957877E+01 diff --git a/tests/test_filter_energy/test_filter_energy.py b/tests/test_filter_energy/test_filter_energy.py deleted file mode 100644 index 54d1dd4b7f..0000000000 --- a/tests/test_filter_energy/test_filter_energy.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class FilterEnergyTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='energy', - bins=(0.0, 0.253e-6, 1.0e-3, 1.0, 20.0)) - tally = openmc.Tally(tally_id=1) - tally.add_filter(filt) - tally.add_score('total') - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(tally) - - super(FilterEnergyTestHarness, self)._build_inputs() - - def _cleanup(self): - super(FilterEnergyTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = FilterEnergyTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_filter_energyout/inputs_true.dat b/tests/test_filter_energyout/inputs_true.dat deleted file mode 100644 index be1ade923f..0000000000 --- a/tests/test_filter_energyout/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -f0810606c5f947a9fe03bcfc87de3883ce46f59d8603e02ed30f853ebf301b2dc6bdcd109889801ada9e6e0b7be4932efeca97d4beea875af8c8e3ecb7511444 \ No newline at end of file diff --git a/tests/test_filter_energyout/results_true.dat b/tests/test_filter_energyout/results_true.dat deleted file mode 100644 index 814385d5a4..0000000000 --- a/tests/test_filter_energyout/results_true.dat +++ /dev/null @@ -1,11 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -2.842000E+01 -1.620214E+02 -4.361000E+01 -3.810139E+02 -5.297000E+01 -5.616595E+02 -6.530000E+00 -8.828900E+00 diff --git a/tests/test_filter_energyout/test_filter_energyout.py b/tests/test_filter_energyout/test_filter_energyout.py deleted file mode 100644 index 43a8c7d5a9..0000000000 --- a/tests/test_filter_energyout/test_filter_energyout.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class FilterEnergyoutTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='energyout', - bins=(0.0, 0.253e-6, 1.0e-3, 1.0, 20.0)) - tally = openmc.Tally(tally_id=1) - tally.add_filter(filt) - tally.add_score('scatter') - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(tally) - - super(FilterEnergyoutTestHarness, self)._build_inputs() - - def _cleanup(self): - super(FilterEnergyoutTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = FilterEnergyoutTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_filter_group_transfer/inputs_true.dat b/tests/test_filter_group_transfer/inputs_true.dat deleted file mode 100644 index 9e3bbdd1ce..0000000000 --- a/tests/test_filter_group_transfer/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -c4d4334d44956d6dc9abe854a5e9403d7f8a87ffb04a15a3d128e8d18eb4111f46ca277b751e1b0e836d69527502f9abba115a4b2fc64c38da63a9d57968d860 \ No newline at end of file diff --git a/tests/test_filter_group_transfer/results_true.dat b/tests/test_filter_group_transfer/results_true.dat deleted file mode 100644 index c41451e776..0000000000 --- a/tests/test_filter_group_transfer/results_true.dat +++ /dev/null @@ -1,67 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -2.576000E+01 -1.331666E+02 -0.000000E+00 -0.000000E+00 -7.000000E-02 -1.300000E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.050675E+00 -2.274991E-01 -0.000000E+00 -0.000000E+00 -2.070821E+00 -8.886068E-01 -2.660000E+00 -1.422000E+00 -0.000000E+00 -0.000000E+00 -3.897000E+01 -3.042635E+02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.352932E-01 -4.705717E-02 -0.000000E+00 -0.000000E+00 -1.018668E+00 -2.090017E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.570000E+00 -4.182700E+00 -0.000000E+00 -0.000000E+00 -4.968000E+01 -4.940534E+02 -6.537406E-02 -1.230788E-03 -0.000000E+00 -0.000000E+00 -8.678070E-02 -2.482037E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.290000E+00 -2.178900E+00 -1.610879E-01 -5.883677E-03 -6.530000E+00 -8.828900E+00 -3.151783E-01 -2.052521E-02 diff --git a/tests/test_filter_group_transfer/test_filter_group_transfer.py b/tests/test_filter_group_transfer/test_filter_group_transfer.py deleted file mode 100644 index cbea5e0a7f..0000000000 --- a/tests/test_filter_group_transfer/test_filter_group_transfer.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class FilterGroupTransferTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt1 = openmc.Filter(type='energy', - bins=(0.0, 0.253e-6, 1.0e-3, 1.0, 20.0)) - filt2 = openmc.Filter(type='energyout', - bins=(0.0, 0.253e-6, 1.0e-3, 1.0, 20.0)) - tally = openmc.Tally(tally_id=1) - tally.add_filter(filt1) - tally.add_filter(filt2) - tally.add_score('scatter') - tally.add_score('nu-fission') - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(tally) - - super(FilterGroupTransferTestHarness, self)._build_inputs() - - def _cleanup(self): - super(FilterGroupTransferTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = FilterGroupTransferTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_filter_material/inputs_true.dat b/tests/test_filter_material/inputs_true.dat deleted file mode 100644 index 59afbce647..0000000000 --- a/tests/test_filter_material/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -7689b2c88391128377b7f9bfcda347a42f77d69d194186629fa965ecd3fc51be0bfd1ac92fb9d7551128d8b6ed5241ead4fb94b27ae29d80230863e78fbbcb68 \ No newline at end of file diff --git a/tests/test_filter_material/results_true.dat b/tests/test_filter_material/results_true.dat deleted file mode 100644 index d2b23e2901..0000000000 --- a/tests/test_filter_material/results_true.dat +++ /dev/null @@ -1,11 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -2.868239E+01 -1.648549E+02 -6.779424E+00 -9.202676E+00 -6.446222E+01 -8.387204E+02 -3.367496E+01 -2.349072E+02 diff --git a/tests/test_filter_material/test_filter_material.py b/tests/test_filter_material/test_filter_material.py deleted file mode 100644 index 8e42d8c9a2..0000000000 --- a/tests/test_filter_material/test_filter_material.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class FilterMaterialTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='material', bins=(1, 2, 3, 4)) - tally = openmc.Tally(tally_id=1) - tally.add_filter(filt) - tally.add_score('total') - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(tally) - - super(FilterMaterialTestHarness, self)._build_inputs() - - def _cleanup(self): - super(FilterMaterialTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = FilterMaterialTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_filter_mu/inputs_true.dat b/tests/test_filter_mu/inputs_true.dat deleted file mode 100644 index 19d08cb457..0000000000 --- a/tests/test_filter_mu/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -ecc649936e2cc364b079944f47e18fb81ec7290017b4bd5837e5aa1e24e1146df77897f44c7c2a88500e3f525566b51777cd9b84ec6a636f5883e411e4c1f75c \ No newline at end of file diff --git a/tests/test_filter_mu/results_true.dat b/tests/test_filter_mu/results_true.dat deleted file mode 100644 index e647a46ec0..0000000000 --- a/tests/test_filter_mu/results_true.dat +++ /dev/null @@ -1,121 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -1.241000E+01 -3.088870E+01 -1.241000E+01 -3.088870E+01 -1.364000E+01 -3.727140E+01 -1.364000E+01 -3.727140E+01 -3.251000E+01 -2.118597E+02 -3.251000E+01 -2.118597E+02 -7.297000E+01 -1.066904E+03 -7.297000E+01 -1.066904E+03 -tally 2: -9.880000E+00 -1.964520E+01 -9.880000E+00 -1.964520E+01 -1.022000E+01 -2.099620E+01 -1.022000E+01 -2.099620E+01 -1.479000E+01 -4.397670E+01 -1.479000E+01 -4.397670E+01 -3.470000E+01 -2.412094E+02 -3.470000E+01 -2.412094E+02 -6.194000E+01 -7.687326E+02 -6.194000E+01 -7.687326E+02 -tally 3: -3.560000E+00 -2.681800E+00 -3.560000E+00 -2.681800E+00 -1.930000E+00 -7.915000E-01 -1.930000E+00 -7.915000E-01 -3.870000E+00 -3.109100E+00 -3.870000E+00 -3.109100E+00 -3.500000E-01 -3.630000E-02 -3.500000E-01 -3.630000E-02 -3.680000E+00 -2.840200E+00 -3.680000E+00 -2.840200E+00 -2.050000E+00 -8.735000E-01 -2.050000E+00 -8.735000E-01 -3.910000E+00 -3.085100E+00 -3.910000E+00 -3.085100E+00 -3.900000E-01 -3.610000E-02 -3.900000E-01 -3.610000E-02 -5.130000E+00 -5.422100E+00 -5.130000E+00 -5.422100E+00 -3.100000E+00 -1.959200E+00 -3.100000E+00 -1.959200E+00 -5.840000E+00 -6.914600E+00 -5.840000E+00 -6.914600E+00 -5.400000E-01 -8.980000E-02 -5.400000E-01 -8.980000E-02 -1.215000E+01 -3.061010E+01 -1.215000E+01 -3.061010E+01 -7.220000E+00 -1.081680E+01 -7.220000E+00 -1.081680E+01 -1.355000E+01 -3.699090E+01 -1.355000E+01 -3.699090E+01 -1.360000E+00 -5.098000E-01 -1.360000E+00 -5.098000E-01 -2.199000E+01 -9.837430E+01 -2.199000E+01 -9.837430E+01 -1.243000E+01 -3.167470E+01 -1.243000E+01 -3.167470E+01 -2.451000E+01 -1.233915E+02 -2.451000E+01 -1.233915E+02 -2.460000E+00 -1.687000E+00 -2.460000E+00 -1.687000E+00 diff --git a/tests/test_filter_mu/test_filter_mu.py b/tests/test_filter_mu/test_filter_mu.py deleted file mode 100644 index f59f8c63fd..0000000000 --- a/tests/test_filter_mu/test_filter_mu.py +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class FilterMuTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt1 = openmc.Filter(type='mu', - bins=(-1.0, -0.5, 0.0, 0.5, 1.0)) - tally1 = openmc.Tally(tally_id=1) - tally1.add_filter(filt1) - tally1.add_score('scatter') - tally1.add_score('nu-scatter') - - filt2 = openmc.Filter(type='mu', bins=(5,)) - tally2 = openmc.Tally(tally_id=2) - tally2.add_filter(filt2) - tally2.add_score('scatter') - tally2.add_score('nu-scatter') - - mesh = openmc.Mesh(mesh_id=1) - mesh.lower_left = [-182.07, -182.07] - mesh.upper_right = [182.07, 182.07] - mesh.dimension = [2, 2] - filt_mesh = openmc.Filter(type='mesh', bins=(1,)) - tally3 = openmc.Tally(tally_id=3) - tally3.add_filter(filt2) - tally3.add_filter(filt_mesh) - tally3.add_score('scatter') - tally3.add_score('nu-scatter') - - - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(tally1) - self._input_set.tallies.add_tally(tally2) - self._input_set.tallies.add_tally(tally3) - self._input_set.tallies.add_mesh(mesh) - - super(FilterMuTestHarness, self)._build_inputs() - - def _cleanup(self): - super(FilterMuTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = FilterMuTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_filter_polar/inputs_true.dat b/tests/test_filter_polar/inputs_true.dat deleted file mode 100644 index b3773a9d6b..0000000000 --- a/tests/test_filter_polar/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -301824991a022884215609f39797a61933faf7ccacf81ad6bb883af08857563e8bd74ab946fc4fd072860168d77f76d0c76d1467375158072dce431fc6a1c449 \ No newline at end of file diff --git a/tests/test_filter_polar/results_true.dat b/tests/test_filter_polar/results_true.dat deleted file mode 100644 index 2d822630e5..0000000000 --- a/tests/test_filter_polar/results_true.dat +++ /dev/null @@ -1,76 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -2.127061E+01 -9.220793E+01 -5.602776E+01 -6.373945E+02 -6.367492E+01 -8.138443E+02 -5.529942E+01 -6.140264E+02 -1.951517E+01 -7.668661E+01 -tally 2: -2.075936E+01 -8.757254E+01 -5.524881E+01 -6.153139E+02 -6.475252E+01 -8.402281E+02 -5.446664E+01 -5.961174E+02 -2.074180E+01 -8.681580E+01 -tally 3: -2.128073E+01 -9.230382E+01 -5.601764E+01 -6.371703E+02 -6.367492E+01 -8.138443E+02 -5.529942E+01 -6.140264E+02 -1.951517E+01 -7.668661E+01 -tally 4: -8.088647E+00 -1.396899E+01 -3.960907E+00 -3.249150E+00 -8.430714E+00 -1.435355E+01 -7.192159E-01 -1.641710E-01 -1.974619E+01 -8.105078E+01 -1.212452E+01 -3.016420E+01 -2.228348E+01 -1.050847E+02 -1.748809E+00 -9.501796E-01 -2.257423E+01 -1.038902E+02 -1.351331E+01 -3.969787E+01 -2.507638E+01 -1.283664E+02 -2.193118E+00 -1.424580E+00 -2.192232E+01 -9.859711E+01 -1.096779E+01 -2.506373E+01 -2.074138E+01 -8.670015E+01 -1.469145E+00 -8.072204E-01 -6.850719E+00 -9.425536E+00 -4.584038E+00 -4.399762E+00 -7.176883E+00 -1.090693E+01 -8.244944E-01 -1.794291E-01 diff --git a/tests/test_filter_polar/test_filter_polar.py b/tests/test_filter_polar/test_filter_polar.py deleted file mode 100644 index db7ed4f6d8..0000000000 --- a/tests/test_filter_polar/test_filter_polar.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - -class FilterPolarTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt1 = openmc.Filter(type='polar', - bins=(0.0, 0.6283, 1.2566, 1.8850, 2.5132, - 3.1416)) - tally1 = openmc.Tally(tally_id=1) - tally1.add_filter(filt1) - tally1.add_score('flux') - tally1.estimator = 'tracklength' - - tally2 = openmc.Tally(tally_id=2) - tally2.add_filter(filt1) - tally2.add_score('flux') - tally2.estimator = 'analog' - - filt3 = openmc.Filter(type='polar', bins=(5,)) - tally3 = openmc.Tally(tally_id=3) - tally3.add_filter(filt3) - tally3.add_score('flux') - tally3.estimator = 'tracklength' - - mesh = openmc.Mesh(mesh_id=1) - mesh.lower_left = [-182.07, -182.07] - mesh.upper_right = [182.07, 182.07] - mesh.dimension = [2, 2] - filt_mesh = openmc.Filter(type='mesh', bins=(1,)) - tally4 = openmc.Tally(tally_id=4) - tally4.add_filter(filt3) - tally4.add_filter(filt_mesh) - tally4.add_score('flux') - tally4.estimator = 'tracklength' - - - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(tally1) - self._input_set.tallies.add_tally(tally2) - self._input_set.tallies.add_tally(tally3) - self._input_set.tallies.add_tally(tally4) - self._input_set.tallies.add_mesh(mesh) - - super(FilterPolarTestHarness, self)._build_inputs() - - def _cleanup(self): - super(FilterPolarTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = FilterPolarTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_filter_universe/inputs_true.dat b/tests/test_filter_universe/inputs_true.dat deleted file mode 100644 index a55ba45f68..0000000000 --- a/tests/test_filter_universe/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -164804414f48a818c93e197f2901ce6ae375d88071a03e89c920dbc4462e7a2c8d2c85acf6560fcd6eb3d7c0c53d3b426ab1cc4b7721266fe8adec3e7231149e \ No newline at end of file diff --git a/tests/test_filter_universe/results_true.dat b/tests/test_filter_universe/results_true.dat deleted file mode 100644 index f71c4d2c21..0000000000 --- a/tests/test_filter_universe/results_true.dat +++ /dev/null @@ -1,11 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -7.510505E+01 -1.143811E+03 -8.792943E+00 -1.575416E+01 -4.214462E+01 -3.642975E+02 -4.335157E+00 -3.864423E+00 diff --git a/tests/test_filter_universe/test_filter_universe.py b/tests/test_filter_universe/test_filter_universe.py deleted file mode 100644 index 00dd166196..0000000000 --- a/tests/test_filter_universe/test_filter_universe.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class FilterUniverseTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='universe', bins=(1, 2, 3, 4)) - tally = openmc.Tally(tally_id=1) - tally.add_filter(filt) - tally.add_score('total') - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(tally) - - super(FilterUniverseTestHarness, self)._build_inputs() - - def _cleanup(self): - super(FilterUniverseTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = FilterUniverseTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_MT/inputs_true.dat b/tests/test_score_MT/inputs_true.dat deleted file mode 100644 index 33e732bcba..0000000000 --- a/tests/test_score_MT/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -0e8ecbc5afb7fb5e521913f239849febadbc969bbf99159b42d6d7e7930dcdb34f0e778e00a6e7c48170d4dd176b5776455ba96b722ad9cb6f2438e6ac3ce406 \ No newline at end of file diff --git a/tests/test_score_MT/results_true.dat b/tests/test_score_MT/results_true.dat deleted file mode 100644 index 04b9c5ca50..0000000000 --- a/tests/test_score_MT/results_true.dat +++ /dev/null @@ -1,77 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.538090E-03 -1.381456E-06 -3.974412E-01 -3.209809E-02 -1.373550E+00 -3.796357E-01 -5.252455E-06 -2.290531E-11 -3.359792E-02 -2.267331E-04 -2.459115E-02 -1.233078E-04 -0.000000E+00 -0.000000E+00 -7.004005E-05 -1.748739E-09 -8.104946E-02 -1.395618E-03 -tally 2: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-01 -9.000000E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-02 -2.000000E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -tally 3: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.408027E-03 -1.849607E-06 -3.946436E-01 -3.166261E-02 -1.288136E+00 -3.382059E-01 -2.179241E-05 -4.749090E-10 -3.146594E-02 -2.159308E-04 -4.278352E-02 -4.094478E-04 -0.000000E+00 -0.000000E+00 -1.736514E-04 -1.245171E-08 -7.989710E-02 -1.377742E-03 diff --git a/tests/test_score_MT/test_score_MT.py b/tests/test_score_MT/test_score_MT.py deleted file mode 100644 index fb8aa7cfb4..0000000000 --- a/tests/test_score_MT/test_score_MT.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreMTTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(10, 21, 22, 23)) - tallies = [openmc.Tally(tally_id=i) for i in range(1, 4)] - [t.add_filter(filt) for t in tallies] - [t.add_score('16') for t in tallies] - [t.add_score('51') for t in tallies] - [t.add_score('102') for t in tallies] - tallies[0].estimator = 'tracklength' - tallies[1].estimator = 'analog' - tallies[2].estimator = 'collision' - self._input_set.tallies = openmc.TalliesFile() - [self._input_set.tallies.add_tally(t) for t in tallies] - - super(ScoreMTTestHarness, self)._build_inputs() - - def _cleanup(self): - super(ScoreMTTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreMTTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_absorption/inputs_true.dat b/tests/test_score_absorption/inputs_true.dat deleted file mode 100644 index 7932cb78ec..0000000000 --- a/tests/test_score_absorption/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -df0089700d7ca25e997d9e6da4aa7132575298feb14398b2e806961fdb2e1d9bfbd23beb7bbc2a71b2ce18abe324702c2ab654af32e826bba5571a068b00a848 \ No newline at end of file diff --git a/tests/test_score_absorption/results_true.dat b/tests/test_score_absorption/results_true.dat deleted file mode 100644 index 72661f77f4..0000000000 --- a/tests/test_score_absorption/results_true.dat +++ /dev/null @@ -1,29 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -0.000000E+00 -0.000000E+00 -2.533174E+00 -1.298118E+00 -2.453769E-02 -1.227715E-04 -3.869051E-01 -3.180828E-02 -tally 2: -0.000000E+00 -0.000000E+00 -2.540000E+00 -1.293400E+00 -4.000000E-02 -6.000000E-04 -4.000000E-01 -3.600000E-02 -tally 3: -0.000000E+00 -0.000000E+00 -2.422314E+00 -1.193460E+00 -4.285618E-02 -4.109734E-04 -3.832282E-01 -3.169516E-02 diff --git a/tests/test_score_absorption/test_score_absorption.py b/tests/test_score_absorption/test_score_absorption.py deleted file mode 100644 index c7e3e130df..0000000000 --- a/tests/test_score_absorption/test_score_absorption.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreAbsorptionTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(10, 21, 22, 23)) - tallies = [openmc.Tally(tally_id=i) for i in range(1, 4)] - [t.add_filter(filt) for t in tallies] - [t.add_score('absorption') for t in tallies] - tallies[0].estimator = 'tracklength' - tallies[1].estimator = 'analog' - tallies[2].estimator = 'collision' - self._input_set.tallies = openmc.TalliesFile() - [self._input_set.tallies.add_tally(t) for t in tallies] - - super(ScoreAbsorptionTestHarness, self)._build_inputs() - - def _cleanup(self): - super(ScoreAbsorptionTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreAbsorptionTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_delayed_nufission/inputs_true.dat b/tests/test_score_delayed_nufission/inputs_true.dat deleted file mode 100644 index 11a92dea2c..0000000000 --- a/tests/test_score_delayed_nufission/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -2fb062798cab618153187fe3d8aaee4c6fb61132ab8215742e5939633ab321fb937d4d33a85856271bdf465257aca9cbba1b52716f233c22202ecfbbb9c15b1f \ No newline at end of file diff --git a/tests/test_score_delayed_nufission/results_true.dat b/tests/test_score_delayed_nufission/results_true.dat deleted file mode 100644 index bc2b8e8a7f..0000000000 --- a/tests/test_score_delayed_nufission/results_true.dat +++ /dev/null @@ -1,29 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -1.711611E-02 -5.967549E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.026930E-02 -2.198717E-05 -tally 2: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.976462E-02 -1.953328E-04 -tally 3: -1.686299E-02 -5.765477E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.061240E-02 -2.305936E-05 diff --git a/tests/test_score_delayed_nufission/test_score_delayed_nufission.py b/tests/test_score_delayed_nufission/test_score_delayed_nufission.py deleted file mode 100644 index 0738520e29..0000000000 --- a/tests/test_score_delayed_nufission/test_score_delayed_nufission.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreDelayedNuFissionTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(21, 22, 23, 27)) - tallies = [openmc.Tally(tally_id=i) for i in range(1, 4)] - [t.add_filter(filt) for t in tallies] - [t.add_score('delayed-nu-fission') for t in tallies] - tallies[0].estimator = 'tracklength' - tallies[1].estimator = 'analog' - tallies[2].estimator = 'collision' - self._input_set.tallies = openmc.TalliesFile() - [self._input_set.tallies.add_tally(t) for t in tallies] - - super(ScoreDelayedNuFissionTestHarness, self)._build_inputs() - - def _cleanup(self): - super(ScoreDelayedNuFissionTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreDelayedNuFissionTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_events/inputs_true.dat b/tests/test_score_events/inputs_true.dat deleted file mode 100644 index 4862547c16..0000000000 --- a/tests/test_score_events/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -1e43a3ef68b15aededc0466c913d2f784d237adc88827a980a3dcdcfd64e9bb73679cc3114d69caf389f9c478c439a8771602c397461b90ae0db58a81bfb739a \ No newline at end of file diff --git a/tests/test_score_events/results_true.dat b/tests/test_score_events/results_true.dat deleted file mode 100644 index 34b114fbcb..0000000000 --- a/tests/test_score_events/results_true.dat +++ /dev/null @@ -1,12 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -6.520000E+01 -8.551888E+02 -4.035000E+01 -3.351119E+02 -tally 2: -1.739000E+01 -6.083290E+01 -1.104000E+01 -2.498260E+01 diff --git a/tests/test_score_events/test_score_events.py b/tests/test_score_events/test_score_events.py deleted file mode 100644 index dce944592e..0000000000 --- a/tests/test_score_events/test_score_events.py +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreEventsTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(21, 27)) - tallies = [openmc.Tally(tally_id=i) for i in range(1, 3)] - [t.add_filter(filt) for t in tallies] - [t.add_score('events') for t in tallies] - tallies[0].estimator = 'tracklength' - tallies[1].estimator = 'analog' - self._input_set.tallies = openmc.TalliesFile() - [self._input_set.tallies.add_tally(t) for t in tallies] - - super(ScoreEventsTestHarness, self)._build_inputs() - - def _cleanup(self): - super(ScoreEventsTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreEventsTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_fission/inputs_true.dat b/tests/test_score_fission/inputs_true.dat deleted file mode 100644 index fb5e6f8915..0000000000 --- a/tests/test_score_fission/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -dc94fe38751001e3950450f8f6e7a865a42e699be76372ac7846da863283b6bb963c32b477ace4217be60e1f7a473e946d27238b3faf17d3b7426dbd1a34f9e6 \ No newline at end of file diff --git a/tests/test_score_fission/results_true.dat b/tests/test_score_fission/results_true.dat deleted file mode 100644 index 2b28cc825c..0000000000 --- a/tests/test_score_fission/results_true.dat +++ /dev/null @@ -1,29 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -1.156315E+00 -2.733527E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.971594E-01 -1.004973E-01 -tally 2: -1.225263E+00 -3.054971E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.475958E-01 -8.567154E-02 -tally 3: -1.131528E+00 -2.612886E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.021712E-01 -1.008605E-01 diff --git a/tests/test_score_fission/test_score_fission.py b/tests/test_score_fission/test_score_fission.py deleted file mode 100644 index 4026c0cabf..0000000000 --- a/tests/test_score_fission/test_score_fission.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreFissionTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(21, 22, 23, 27)) - tallies = [openmc.Tally(tally_id=i) for i in range(1, 4)] - [t.add_filter(filt) for t in tallies] - [t.add_score('fission') for t in tallies] - tallies[0].estimator = 'tracklength' - tallies[1].estimator = 'analog' - tallies[2].estimator = 'collision' - self._input_set.tallies = openmc.TalliesFile() - [self._input_set.tallies.add_tally(t) for t in tallies] - - super(ScoreFissionTestHarness, self)._build_inputs() - - def _cleanup(self): - super(ScoreFissionTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreFissionTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_flux/inputs_true.dat b/tests/test_score_flux/inputs_true.dat deleted file mode 100644 index 934ab9d120..0000000000 --- a/tests/test_score_flux/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -bd5362b44190406434cdaa086b7e7397e8f6841b86ad61eda2c3f604df03746832dbcff0e8e96e355f5ba5b4333d6a336358379f8ced51f7a1721ceacb620daa \ No newline at end of file diff --git a/tests/test_score_flux/results_true.dat b/tests/test_score_flux/results_true.dat deleted file mode 100644 index 5c366ea8c7..0000000000 --- a/tests/test_score_flux/results_true.dat +++ /dev/null @@ -1,41 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -3.890713E+01 -3.046363E+02 -1.366220E+01 -3.758161E+01 -6.561669E+01 -8.680729E+02 -2.382728E+01 -1.170590E+02 -8.047875E+00 -1.334796E+01 -4.056568E+01 -3.389623E+02 -tally 2: -3.862543E+01 -2.993190E+02 -1.438678E+01 -4.193571E+01 -6.400634E+01 -8.298077E+02 -2.426423E+01 -1.215124E+02 -7.600812E+00 -1.199814E+01 -4.104875E+01 -3.455300E+02 -tally 3: -3.862543E+01 -2.993190E+02 -1.438678E+01 -4.193571E+01 -6.400634E+01 -8.298077E+02 -2.426423E+01 -1.215124E+02 -7.600812E+00 -1.199814E+01 -4.104875E+01 -3.455300E+02 diff --git a/tests/test_score_flux/test_score_flux.py b/tests/test_score_flux/test_score_flux.py deleted file mode 100644 index 1eea55f45f..0000000000 --- a/tests/test_score_flux/test_score_flux.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreFluxTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(21, 22, 23, 27, 28, 29)) - tallies = [openmc.Tally(tally_id=i) for i in range(1, 4)] - [t.add_filter(filt) for t in tallies] - [t.add_score('flux') for t in tallies] - tallies[0].estimator = 'tracklength' - tallies[1].estimator = 'analog' - tallies[2].estimator = 'collision' - self._input_set.tallies = openmc.TalliesFile() - [self._input_set.tallies.add_tally(t) for t in tallies] - - super(ScoreFluxTestHarness, self)._build_inputs() - - def _cleanup(self): - super(ScoreFluxTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreFluxTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_flux_yn/inputs_true.dat b/tests/test_score_flux_yn/inputs_true.dat deleted file mode 100644 index 5ece3ef1ba..0000000000 --- a/tests/test_score_flux_yn/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -7909822f2ad84443506129719c664b71ac0eac875a7c234be42c553564435794b6028078b096b21e9fb5dad650495b84f2b53decf73e277c84a3ea52799c008e \ No newline at end of file diff --git a/tests/test_score_flux_yn/results_true.dat b/tests/test_score_flux_yn/results_true.dat deleted file mode 100644 index 28a1babb04..0000000000 --- a/tests/test_score_flux_yn/results_true.dat +++ /dev/null @@ -1,1314 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -3.890713E+01 -3.046363E+02 -1.366220E+01 -3.758161E+01 -6.561669E+01 -8.680729E+02 -2.382728E+01 -1.170590E+02 -8.047875E+00 -1.334796E+01 -4.056568E+01 -3.389623E+02 -tally 2: -3.890713E+01 -3.046363E+02 --1.623579E-01 -4.602199E-02 -4.860074E-01 -5.999399E-01 --7.895692E-01 -2.803790E-01 -2.525526E-01 -8.261176E-02 -9.103525E-02 -2.246700E-01 -4.583205E-01 -8.444556E-02 --1.246553E-01 -2.351010E-01 --3.534581E-01 -1.247916E-01 --3.700473E-01 -5.215562E-02 --1.831625E-01 -1.927381E-01 --1.540114E-01 -1.918221E-02 --1.266458E-01 -1.455875E-01 --6.796869E-01 -3.911926E-01 -1.987931E-02 -4.966442E-02 -4.443797E-01 -8.842717E-02 --1.073855E-01 -4.912428E-02 --3.999416E-02 -4.440138E-02 -2.857919E-01 -6.935717E-02 -4.174851E-01 -5.485570E-02 --2.178958E-01 -8.052149E-02 --1.179644E-02 -6.709330E-02 -8.843286E-01 -2.749681E-01 -2.935079E-01 -3.032897E-02 --1.809434E-01 -1.902413E-01 --2.091991E-01 -1.061912E-01 --7.137275E-02 -4.397656E-02 -2.311558E-01 -4.680679E-02 -9.927573E-02 -1.844111E-01 --2.821437E-02 -7.293762E-02 -6.224251E-01 -1.028351E-01 -4.136440E-01 -5.198207E-02 --7.833133E-02 -1.192960E-02 -1.041586E-01 -1.587417E-01 --3.595677E-01 -3.086335E-01 --2.096284E-01 -7.881012E-02 -1.366220E+01 -3.758161E+01 -1.461402E-02 -3.260482E-03 -8.325893E-02 -6.248769E-02 --2.785736E-01 -3.698417E-02 -1.932396E-03 -1.561742E-02 -8.063397E-02 -3.598680E-02 -8.565555E-02 -5.344369E-03 --3.899905E-02 -2.422867E-02 --1.215439E-01 -9.193858E-03 --1.982614E-01 -1.045860E-02 --7.712629E-02 -2.199979E-02 -3.626484E-02 -9.872078E-04 --6.305159E-02 -1.645879E-02 --3.052155E-01 -5.620564E-02 -3.507115E-02 -1.056383E-02 -1.297490E-02 -5.889958E-03 --1.208752E-02 -7.323602E-03 --3.441007E-03 -1.841496E-02 -5.543442E-02 -1.186636E-02 -8.000436E-02 -3.703835E-03 --3.636792E-02 -1.490603E-02 -8.753196E-02 -7.958027E-03 -2.066727E-01 -1.414130E-02 -3.652482E-02 -8.380395E-04 --1.652432E-01 -1.878732E-02 --1.375567E-01 -1.302400E-02 -3.692057E-03 -6.312506E-03 -9.016211E-02 -6.699735E-03 --5.875401E-02 -1.731945E-02 --3.960008E-02 -3.595906E-03 -1.653510E-01 -9.277293E-03 -4.064973E-02 -2.794606E-03 --1.729061E-02 -3.219772E-03 -5.764808E-02 -1.861051E-02 --5.970583E-02 -2.070164E-02 --6.739411E-02 -1.063341E-02 -6.561669E+01 -8.680729E+02 --7.938430E-01 -2.994198E-01 -9.278084E-01 -1.861899E+00 --1.432236E+00 -7.429647E-01 -7.460836E-02 -5.946808E-01 -6.140731E-02 -3.175177E-01 -1.212677E+00 -5.125288E-01 -1.952865E-02 -5.468421E-01 --2.965796E-01 -1.123288E-01 --5.334195E-01 -1.589612E-01 --6.340814E-01 -4.874650E-01 --4.264003E-02 -9.109571E-03 --4.323424E-01 -3.370329E-01 --1.186876E+00 -9.854644E-01 --2.420825E-01 -1.699455E-01 -2.920627E-02 -6.816643E-02 --2.684345E-01 -9.799236E-02 -1.281596E-01 -3.092987E-01 -3.746150E-01 -1.242044E-01 -1.035056E+00 -2.589772E-01 -2.005450E-01 -2.074622E-01 -5.412719E-01 -3.193584E-01 -1.070173E+00 -3.266747E-01 -2.657850E-01 -1.599950E-01 --4.694853E-01 -2.738937E-01 --7.761977E-01 -2.561652E-01 -3.673179E-02 -9.486916E-02 -3.309909E-01 -1.095243E-01 -1.623761E-01 -2.874582E-01 -2.846296E-01 -2.430397E-01 -7.384842E-01 -2.556480E-01 -3.577508E-01 -1.763210E-01 --2.917525E-01 -1.875646E-01 -1.634324E-01 -2.952144E-01 --4.329582E-01 -3.418652E-01 --2.719362E-01 -2.278925E-01 -2.382728E+01 -1.170590E+02 --4.718326E-01 -1.961501E-01 -1.612551E-02 -2.815245E-02 --6.390587E-01 -1.902968E-01 -2.290989E-01 -3.758858E-02 --1.568179E-01 -1.509162E-01 --2.363058E-01 -6.671396E-02 -4.350800E-02 -1.031680E-01 --2.956828E-01 -2.515141E-02 -4.835878E-01 -8.614200E-02 --5.365970E-02 -8.404087E-02 -6.079969E-02 -3.684343E-02 --1.313088E-02 -1.488843E-02 --2.603258E-02 -2.900625E-02 -1.249213E-01 -2.737277E-02 --4.491422E-01 -9.482600E-02 --1.095589E-01 -3.711500E-02 -2.248159E-01 -2.815827E-02 --5.976009E-02 -5.887828E-03 -6.097208E-02 -5.393315E-02 -3.449714E-02 -4.332442E-02 -1.030757E-01 -2.839453E-02 --4.399117E-01 -8.887569E-02 --4.564910E-01 -1.172398E-01 --2.528382E-01 -1.217655E-01 --3.443316E-01 -4.275616E-02 -5.437008E-02 -2.355567E-02 -5.505588E-02 -5.479129E-02 --8.326640E-02 -3.095858E-02 -1.888781E-01 -2.884542E-02 -1.981251E-01 -1.520694E-02 -5.279866E-02 -1.020641E-01 --1.465368E-01 -3.070686E-02 -2.356940E-01 -7.899657E-02 -4.109278E-01 -5.291082E-02 --2.572510E-01 -3.420895E-02 -8.047875E+00 -1.334796E+01 --1.707535E-01 -3.290927E-02 -1.024687E-01 -1.308811E-02 --1.805451E-01 -1.696222E-02 -3.519587E-02 -7.546726E-03 --1.034933E-01 -2.224207E-02 --1.580512E-01 -2.369625E-02 --4.302961E-02 -1.635623E-02 --2.992903E-02 -5.190220E-03 -2.130862E-01 -1.186351E-02 --3.321696E-02 -7.972404E-03 -4.992040E-02 -5.667098E-03 -1.261320E-02 -2.436872E-03 -8.314024E-04 -5.360616E-03 --6.318247E-02 -1.644558E-03 --1.373600E-01 -1.030707E-02 -1.511677E-03 -3.467685E-03 -1.923485E-02 -8.106508E-04 --1.180094E-01 -4.381376E-03 --2.798056E-02 -4.871288E-03 --7.689499E-02 -7.079493E-03 --5.842586E-02 -1.380713E-03 --9.946341E-02 -7.085062E-03 --8.061825E-02 -8.679468E-03 --9.229524E-03 -9.187483E-03 --1.048310E-01 -3.506026E-03 -3.666209E-02 -3.259203E-03 -1.190727E-01 -4.935341E-03 --7.391655E-02 -2.805554E-03 -2.029126E-02 -2.497736E-03 -2.787185E-02 -5.677987E-04 -6.873108E-02 -1.287727E-02 --5.262840E-02 -3.190440E-03 -3.910911E-02 -8.661121E-03 -1.076197E-01 -5.456176E-03 --7.476066E-02 -2.693605E-03 -4.056568E+01 -3.389623E+02 --6.428633E-01 -6.128893E-01 -4.878518E-01 -2.130257E-01 --9.548044E-01 -4.556949E-01 -2.234940E-01 -1.006817E-01 -1.080276E-01 -5.980158E-01 --3.639229E-01 -3.120105E-01 -3.237506E-01 -3.451548E-01 -1.143081E-01 -7.924550E-02 -6.456733E-01 -2.424413E-01 -1.478136E-01 -1.458665E-01 -2.134798E-02 -9.102875E-02 -3.633264E-01 -7.386463E-02 --2.213946E-01 -1.253249E-01 --3.153847E-01 -1.094273E-01 --7.161113E-01 -2.275500E-01 --2.461979E-01 -1.484452E-01 -2.332886E-01 -9.715521E-02 --7.029988E-02 -1.835254E-02 --1.982842E-01 -9.722998E-02 --2.089693E-01 -2.271404E-01 -7.316104E-02 -3.974665E-02 --3.266640E-01 -8.054809E-02 --5.126088E-01 -3.234942E-01 --3.048753E-01 -3.439501E-01 --4.872647E-01 -9.473730E-02 -1.590200E-01 -3.613462E-02 -4.641787E-01 -1.671339E-01 --1.391114E-01 -3.581561E-02 -2.209343E-01 -1.489367E-02 -3.015665E-01 -4.265694E-02 -1.334716E-01 -2.321929E-01 --3.702914E-01 -1.699549E-01 -8.891532E-02 -1.708595E-01 -6.123686E-01 -1.429184E-01 --5.891300E-01 -1.085467E-01 -tally 3: -3.862543E+01 -2.993190E+02 --5.083613E-01 -2.933365E-01 --4.356793E-01 -6.676831E-01 --6.093148E-01 -5.685331E-01 -2.512276E-01 -1.308652E-01 --1.075955E+00 -4.775270E-01 -3.660307E-01 -1.627691E-01 -5.402149E-01 -2.324946E-01 --3.887573E-01 -1.028105E-01 -4.324152E-01 -1.015147E-01 -3.306993E-02 -8.425069E-02 -2.127456E-01 -5.435453E-02 -2.977294E-01 -1.088039E-01 --1.055079E+00 -3.590635E-01 --6.740592E-01 -2.606281E-01 -3.329512E-01 -1.587428E-01 --1.248691E-01 -1.659045E-01 -2.306000E-01 -1.062057E-01 -9.127791E-02 -2.649459E-01 -2.629881E-01 -4.786229E-02 -2.286813E-01 -2.363629E-02 -6.338613E-01 -1.118828E-01 -7.466647E-01 -1.424535E-01 -7.955161E-02 -1.003327E-02 -1.082691E-01 -2.727882E-02 --5.295185E-01 -1.335133E-01 --6.321517E-01 -1.422916E-01 -1.236137E-01 -2.041422E-01 --5.389265E-02 -1.852888E-01 -3.746082E-01 -5.580885E-02 -1.383528E-01 -2.754456E-01 -5.081204E-01 -1.886515E-01 --4.022264E-01 -1.417397E-01 --3.377771E-01 -6.673888E-02 -1.170109E-01 -1.783182E-02 --2.097916E-01 -7.139323E-02 -1.438678E+01 -4.193571E+01 --6.547124E-01 -1.780450E-01 -2.207489E-01 -2.115835E-01 -4.952323E-02 -3.039341E-01 -6.681546E-01 -1.389250E-01 --4.078026E-02 -4.393667E-02 --8.695509E-01 -2.850853E-01 --1.792062E-01 -7.367253E-02 --5.657500E-01 -2.115125E-01 --8.525189E-02 -2.541971E-02 -5.227867E-02 -2.008468E-02 -6.825349E-02 -5.316522E-02 -3.763076E-01 -7.112554E-02 --1.279973E-02 -1.883096E-01 -7.775189E-02 -6.874374E-02 -1.119537E-01 -8.467755E-02 --1.600632E-01 -8.650448E-02 -6.210095E-01 -1.094309E-01 --9.997484E-02 -3.935353E-02 --2.300525E-01 -2.351925E-02 -2.486103E-02 -3.125565E-02 -1.289518E-02 -2.879251E-02 --3.166559E-01 -2.931428E-02 --1.379285E-02 -2.416257E-02 -1.220552E-02 -5.154030E-02 --1.431676E-01 -3.434080E-02 -8.148581E-02 -4.218412E-02 -8.541678E-03 -6.396306E-02 --7.851012E-03 -5.799658E-02 -2.435723E-01 -6.744263E-02 --2.429877E-01 -6.966516E-02 --1.638644E-01 -2.058798E-02 --8.986584E-03 -1.374824E-02 -3.547454E-01 -7.765460E-02 --1.570173E-01 -6.916960E-02 --1.056941E-02 -7.626528E-03 -6.400634E+01 -8.298077E+02 --3.894111E-01 -8.617494E-01 -1.796567E-01 -1.065356E+00 --1.561037E+00 -7.701475E-01 --2.237530E-01 -2.259442E-01 -1.109999E+00 -6.179412E-01 -1.636912E+00 -7.887441E-01 -4.661183E-01 -4.191138E-01 --1.040546E+00 -2.971961E-01 -1.044850E-01 -1.493530E-01 --4.991935E-01 -3.222404E-01 --4.205099E-01 -2.734911E-01 --7.583139E-01 -3.000853E-01 --3.750811E-01 -1.348273E-01 --6.355508E-01 -3.666139E-01 -5.233787E-01 -1.292414E-01 --2.869538E-02 -9.115092E-02 -6.851052E-01 -3.061040E-01 -1.703522E-01 -7.300335E-02 -4.541075E-01 -4.438507E-01 --2.674857E-01 -4.718588E-01 -3.022517E-02 -1.136781E-01 -5.755596E-01 -2.688162E-01 -2.698373E-01 -1.403188E-01 -8.772347E-01 -3.503562E-01 --4.258508E-01 -1.400825E-01 --1.384853E-01 -4.924947E-02 --1.009402E-01 -2.039230E-01 --1.339732E-01 -4.772083E-02 --3.249636E-01 -4.339747E-01 -1.564400E-01 -2.703717E-01 -2.536360E-01 -8.543919E-02 --3.622063E-01 -7.442240E-02 --2.074953E-02 -1.355614E-01 --3.909820E-02 -1.007999E-01 -3.162815E-01 -9.656425E-02 -2.426423E+01 -1.215124E+02 --9.628829E-01 -3.563586E-01 -2.964625E-01 -9.739638E-02 --3.680881E-01 -3.484018E-01 -4.339143E-01 -7.590564E-02 -4.633394E-02 -1.080030E-01 -3.091634E-01 -1.246585E-01 -4.520500E-02 -1.095704E-01 -2.479383E-01 -1.138276E-01 -6.457108E-02 -6.833667E-02 --5.623363E-02 -1.087254E-01 -3.675294E-01 -9.602246E-02 --1.459951E-01 -9.440544E-02 --6.817672E-02 -4.978066E-02 -1.076782E-02 -1.697440E-01 --1.024501E-02 -1.184830E-01 --1.654178E-01 -1.689209E-02 --1.006214E-01 -3.392546E-02 -5.070063E-01 -7.598100E-02 -2.251704E-01 -7.867348E-02 --1.693789E-01 -2.069974E-01 --2.790249E-01 -2.674643E-02 -3.888604E-01 -3.649330E-02 -7.614452E-02 -7.098023E-02 -1.236282E-02 -5.476895E-02 --3.151637E-01 -3.543466E-02 --6.363562E-01 -9.323507E-02 -2.808153E-01 -8.537981E-02 -2.197639E-01 -3.393653E-02 -8.660625E-02 -1.575544E-02 -3.733826E-02 -1.449783E-02 -8.800903E-04 -3.993931E-02 -3.304886E-01 -3.099095E-02 --4.149186E-02 -5.375091E-02 -2.448819E-01 -9.225028E-02 --1.230091E-01 -3.865008E-02 -7.600812E+00 -1.199814E+01 --8.738539E-01 -3.078183E-01 --2.592305E-01 -1.015952E-01 --6.391696E-02 -6.657129E-02 --2.857855E-01 -2.216294E-02 --3.516811E-01 -3.429194E-02 -4.585144E-02 -6.204056E-02 --1.599494E-01 -1.684846E-02 --2.364219E-01 -1.550644E-02 -1.197289E-01 -8.631394E-02 --1.364517E-01 -5.086560E-02 --2.213374E-01 -2.779096E-02 --7.328761E-02 -1.216230E-02 -2.476803E-01 -2.724500E-02 --6.356296E-02 -2.513244E-02 --3.886281E-01 -9.479377E-02 -1.006972E-01 -1.352120E-02 -6.932242E-02 -3.192705E-02 --3.232505E-02 -5.592418E-02 -9.582599E-02 -1.504811E-02 --2.887999E-01 -3.760482E-02 --2.372013E-01 -1.868786E-02 --1.655526E-01 -4.720116E-02 -8.611265E-02 -2.284310E-02 --2.142116E-01 -2.619080E-02 --1.811202E-01 -1.457105E-02 -1.430164E-01 -2.016598E-02 --4.066031E-01 -7.671356E-02 -1.364946E-01 -1.385677E-02 -8.357667E-02 -1.521943E-02 --2.235270E-02 -1.029570E-02 --7.920760E-02 -4.227880E-02 -2.622096E-01 -2.327728E-02 --7.787296E-03 -2.288300E-02 --1.645219E-02 -5.394704E-02 -7.274557E-02 -1.075570E-02 -4.104875E+01 -3.455300E+02 --9.827893E-01 -2.751051E-01 -3.227606E-01 -1.213711E-01 --1.272840E-02 -2.813639E-01 --1.910394E-01 -5.682320E-02 -4.136260E-01 -2.444497E-01 --5.123352E-02 -3.867174E-01 -4.424857E-02 -9.651204E-02 --3.975443E-02 -1.867060E-01 -7.618837E-01 -1.756891E-01 -4.259599E-01 -1.146646E-01 -5.658031E-02 -1.366891E-01 -2.464931E-01 -2.181122E-01 --1.593998E-01 -2.666678E-01 --1.928096E-01 -1.216164E-01 --7.020992E-01 -1.701086E-01 -3.914244E-01 -1.772217E-01 -3.285697E-01 -1.521826E-01 --2.947923E-02 -8.201284E-02 --1.346653E-01 -4.498340E-02 -2.112724E-01 -9.923303E-02 --8.551910E-02 -8.804286E-03 --3.631005E-01 -1.168145E-01 --1.840770E-01 -5.714283E-02 --2.709303E-02 -9.381338E-02 --2.104005E-02 -4.479215E-02 -4.059493E-01 -8.277066E-02 -2.877400E-01 -8.584721E-02 -4.881128E-02 -1.864179E-01 -8.584545E-02 -4.421744E-02 --4.392466E-01 -6.260373E-02 --3.143214E-02 -8.184856E-02 --5.630973E-01 -1.323469E-01 --8.010498E-02 -1.096975E-01 -1.818829E-01 -1.717701E-02 --1.062149E-01 -5.400365E-02 -tally 4: -3.862543E+01 -2.993190E+02 --5.083613E-01 -2.933365E-01 --4.356793E-01 -6.676831E-01 --6.093148E-01 -5.685331E-01 -2.512276E-01 -1.308652E-01 --1.075955E+00 -4.775270E-01 -3.660307E-01 -1.627691E-01 -5.402149E-01 -2.324946E-01 --3.887573E-01 -1.028105E-01 -4.324152E-01 -1.015147E-01 -3.306993E-02 -8.425069E-02 -2.127456E-01 -5.435453E-02 -2.977294E-01 -1.088039E-01 --1.055079E+00 -3.590635E-01 --6.740592E-01 -2.606281E-01 -3.329512E-01 -1.587428E-01 --1.248691E-01 -1.659045E-01 -2.306000E-01 -1.062057E-01 -9.127791E-02 -2.649459E-01 -2.629881E-01 -4.786229E-02 -2.286813E-01 -2.363629E-02 -6.338613E-01 -1.118828E-01 -7.466647E-01 -1.424535E-01 -7.955161E-02 -1.003327E-02 -1.082691E-01 -2.727882E-02 --5.295185E-01 -1.335133E-01 --6.321517E-01 -1.422916E-01 -1.236137E-01 -2.041422E-01 --5.389265E-02 -1.852888E-01 -3.746082E-01 -5.580885E-02 -1.383528E-01 -2.754456E-01 -5.081204E-01 -1.886515E-01 --4.022264E-01 -1.417397E-01 --3.377771E-01 -6.673888E-02 -1.170109E-01 -1.783182E-02 --2.097916E-01 -7.139323E-02 -1.438678E+01 -4.193571E+01 --6.547124E-01 -1.780450E-01 -2.207489E-01 -2.115835E-01 -4.952323E-02 -3.039341E-01 -6.681546E-01 -1.389250E-01 --4.078026E-02 -4.393667E-02 --8.695509E-01 -2.850853E-01 --1.792062E-01 -7.367253E-02 --5.657500E-01 -2.115125E-01 --8.525189E-02 -2.541971E-02 -5.227867E-02 -2.008468E-02 -6.825349E-02 -5.316522E-02 -3.763076E-01 -7.112554E-02 --1.279973E-02 -1.883096E-01 -7.775189E-02 -6.874374E-02 -1.119537E-01 -8.467755E-02 --1.600632E-01 -8.650448E-02 -6.210095E-01 -1.094309E-01 --9.997484E-02 -3.935353E-02 --2.300525E-01 -2.351925E-02 -2.486103E-02 -3.125565E-02 -1.289518E-02 -2.879251E-02 --3.166559E-01 -2.931428E-02 --1.379285E-02 -2.416257E-02 -1.220552E-02 -5.154030E-02 --1.431676E-01 -3.434080E-02 -8.148581E-02 -4.218412E-02 -8.541678E-03 -6.396306E-02 --7.851012E-03 -5.799658E-02 -2.435723E-01 -6.744263E-02 --2.429877E-01 -6.966516E-02 --1.638644E-01 -2.058798E-02 --8.986584E-03 -1.374824E-02 -3.547454E-01 -7.765460E-02 --1.570173E-01 -6.916960E-02 --1.056941E-02 -7.626528E-03 -6.400634E+01 -8.298077E+02 --3.894111E-01 -8.617494E-01 -1.796567E-01 -1.065356E+00 --1.561037E+00 -7.701475E-01 --2.237530E-01 -2.259442E-01 -1.109999E+00 -6.179412E-01 -1.636912E+00 -7.887441E-01 -4.661183E-01 -4.191138E-01 --1.040546E+00 -2.971961E-01 -1.044850E-01 -1.493530E-01 --4.991935E-01 -3.222404E-01 --4.205099E-01 -2.734911E-01 --7.583139E-01 -3.000853E-01 --3.750811E-01 -1.348273E-01 --6.355508E-01 -3.666139E-01 -5.233787E-01 -1.292414E-01 --2.869538E-02 -9.115092E-02 -6.851052E-01 -3.061040E-01 -1.703522E-01 -7.300335E-02 -4.541075E-01 -4.438507E-01 --2.674857E-01 -4.718588E-01 -3.022517E-02 -1.136781E-01 -5.755596E-01 -2.688162E-01 -2.698373E-01 -1.403188E-01 -8.772347E-01 -3.503562E-01 --4.258508E-01 -1.400825E-01 --1.384853E-01 -4.924947E-02 --1.009402E-01 -2.039230E-01 --1.339732E-01 -4.772083E-02 --3.249636E-01 -4.339747E-01 -1.564400E-01 -2.703717E-01 -2.536360E-01 -8.543919E-02 --3.622063E-01 -7.442240E-02 --2.074953E-02 -1.355614E-01 --3.909820E-02 -1.007999E-01 -3.162815E-01 -9.656425E-02 -2.426423E+01 -1.215124E+02 --9.628829E-01 -3.563586E-01 -2.964625E-01 -9.739638E-02 --3.680881E-01 -3.484018E-01 -4.339143E-01 -7.590564E-02 -4.633394E-02 -1.080030E-01 -3.091634E-01 -1.246585E-01 -4.520500E-02 -1.095704E-01 -2.479383E-01 -1.138276E-01 -6.457108E-02 -6.833667E-02 --5.623363E-02 -1.087254E-01 -3.675294E-01 -9.602246E-02 --1.459951E-01 -9.440544E-02 --6.817672E-02 -4.978066E-02 -1.076782E-02 -1.697440E-01 --1.024501E-02 -1.184830E-01 --1.654178E-01 -1.689209E-02 --1.006214E-01 -3.392546E-02 -5.070063E-01 -7.598100E-02 -2.251704E-01 -7.867348E-02 --1.693789E-01 -2.069974E-01 --2.790249E-01 -2.674643E-02 -3.888604E-01 -3.649330E-02 -7.614452E-02 -7.098023E-02 -1.236282E-02 -5.476895E-02 --3.151637E-01 -3.543466E-02 --6.363562E-01 -9.323507E-02 -2.808153E-01 -8.537981E-02 -2.197639E-01 -3.393653E-02 -8.660625E-02 -1.575544E-02 -3.733826E-02 -1.449783E-02 -8.800903E-04 -3.993931E-02 -3.304886E-01 -3.099095E-02 --4.149186E-02 -5.375091E-02 -2.448819E-01 -9.225028E-02 --1.230091E-01 -3.865008E-02 -7.600812E+00 -1.199814E+01 --8.738539E-01 -3.078183E-01 --2.592305E-01 -1.015952E-01 --6.391696E-02 -6.657129E-02 --2.857855E-01 -2.216294E-02 --3.516811E-01 -3.429194E-02 -4.585144E-02 -6.204056E-02 --1.599494E-01 -1.684846E-02 --2.364219E-01 -1.550644E-02 -1.197289E-01 -8.631394E-02 --1.364517E-01 -5.086560E-02 --2.213374E-01 -2.779096E-02 --7.328761E-02 -1.216230E-02 -2.476803E-01 -2.724500E-02 --6.356296E-02 -2.513244E-02 --3.886281E-01 -9.479377E-02 -1.006972E-01 -1.352120E-02 -6.932242E-02 -3.192705E-02 --3.232505E-02 -5.592418E-02 -9.582599E-02 -1.504811E-02 --2.887999E-01 -3.760482E-02 --2.372013E-01 -1.868786E-02 --1.655526E-01 -4.720116E-02 -8.611265E-02 -2.284310E-02 --2.142116E-01 -2.619080E-02 --1.811202E-01 -1.457105E-02 -1.430164E-01 -2.016598E-02 --4.066031E-01 -7.671356E-02 -1.364946E-01 -1.385677E-02 -8.357667E-02 -1.521943E-02 --2.235270E-02 -1.029570E-02 --7.920760E-02 -4.227880E-02 -2.622096E-01 -2.327728E-02 --7.787296E-03 -2.288300E-02 --1.645219E-02 -5.394704E-02 -7.274557E-02 -1.075570E-02 -4.104875E+01 -3.455300E+02 --9.827893E-01 -2.751051E-01 -3.227606E-01 -1.213711E-01 --1.272840E-02 -2.813639E-01 --1.910394E-01 -5.682320E-02 -4.136260E-01 -2.444497E-01 --5.123352E-02 -3.867174E-01 -4.424857E-02 -9.651204E-02 --3.975443E-02 -1.867060E-01 -7.618837E-01 -1.756891E-01 -4.259599E-01 -1.146646E-01 -5.658031E-02 -1.366891E-01 -2.464931E-01 -2.181122E-01 --1.593998E-01 -2.666678E-01 --1.928096E-01 -1.216164E-01 --7.020992E-01 -1.701086E-01 -3.914244E-01 -1.772217E-01 -3.285697E-01 -1.521826E-01 --2.947923E-02 -8.201284E-02 --1.346653E-01 -4.498340E-02 -2.112724E-01 -9.923303E-02 --8.551910E-02 -8.804286E-03 --3.631005E-01 -1.168145E-01 --1.840770E-01 -5.714283E-02 --2.709303E-02 -9.381338E-02 --2.104005E-02 -4.479215E-02 -4.059493E-01 -8.277066E-02 -2.877400E-01 -8.584721E-02 -4.881128E-02 -1.864179E-01 -8.584545E-02 -4.421744E-02 --4.392466E-01 -6.260373E-02 --3.143214E-02 -8.184856E-02 --5.630973E-01 -1.323469E-01 --8.010498E-02 -1.096975E-01 -1.818829E-01 -1.717701E-02 --1.062149E-01 -5.400365E-02 diff --git a/tests/test_score_flux_yn/test_score_flux_yn.py b/tests/test_score_flux_yn/test_score_flux_yn.py deleted file mode 100755 index 254069226c..0000000000 --- a/tests/test_score_flux_yn/test_score_flux_yn.py +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreFluxYnTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(21, 22, 23, 27, 28, 29)) - tallies = [openmc.Tally(tally_id=i) for i in range(1, 5)] - [t.add_filter(filt) for t in tallies] - tallies[0].add_score('flux') - [t.add_score('flux-y5') for t in tallies[1:]] - tallies[1].estimator = 'tracklength' - tallies[2].estimator = 'analog' - tallies[3].estimator = 'collision' - self._input_set.tallies = openmc.TalliesFile() - [self._input_set.tallies.add_tally(t) for t in tallies] - - super(ScoreFluxYnTestHarness, self)._build_inputs() - - def _cleanup(self): - super(ScoreFluxYnTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreFluxYnTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_inverse_velocity/inputs_true.dat b/tests/test_score_inverse_velocity/inputs_true.dat deleted file mode 100644 index 96cbc7378a..0000000000 --- a/tests/test_score_inverse_velocity/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -4eee301ac8b984041ded725f1b031602e823edec1dd0883481fba794d6301eb5b83a0e87cf77b1298901de518c783ee5a017a91b5ac962ab0db8b37bb9918053 \ No newline at end of file diff --git a/tests/test_score_inverse_velocity/results_true.dat b/tests/test_score_inverse_velocity/results_true.dat deleted file mode 100644 index 740d31f16b..0000000000 --- a/tests/test_score_inverse_velocity/results_true.dat +++ /dev/null @@ -1,29 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -1.049628E-05 -2.261930E-11 -4.056389E-06 -3.411247E-12 -2.243766E-05 -1.069671E-10 -6.354432E-06 -8.370608E-12 -tally 2: -1.029200E-05 -2.180706E-11 -4.353200E-06 -4.363747E-12 -2.211790E-05 -1.055892E-10 -6.086777E-06 -7.589579E-12 -tally 3: -1.029200E-05 -2.180706E-11 -4.353200E-06 -4.363747E-12 -2.211790E-05 -1.055892E-10 -6.086777E-06 -7.589579E-12 diff --git a/tests/test_score_inverse_velocity/test_score_inversevelocity.py b/tests/test_score_inverse_velocity/test_score_inversevelocity.py deleted file mode 100644 index 787e9df091..0000000000 --- a/tests/test_score_inverse_velocity/test_score_inversevelocity.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreInverseVelocityTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(21, 22, 23, 27)) - tallies = [openmc.Tally(tally_id=i) for i in range(1, 4)] - [t.add_filter(filt) for t in tallies] - [t.add_score('inverse-velocity') for t in tallies] - tallies[0].estimator = 'tracklength' - tallies[1].estimator = 'analog' - tallies[2].estimator = 'collision' - self._input_set.tallies = openmc.TalliesFile() - [self._input_set.tallies.add_tally(t) for t in tallies] - - super(ScoreInverseVelocityTestHarness, self)._build_inputs() - - def _cleanup(self): - super(ScoreInverseVelocityTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreInverseVelocityTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_kappafission/inputs_true.dat b/tests/test_score_kappafission/inputs_true.dat deleted file mode 100644 index b89696c82b..0000000000 --- a/tests/test_score_kappafission/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -32c8c6625dbeecd8ed670871234a0aa9878a29cd86d93328151d90eda209bf70ee83901418cb29f7e8ef66d6f9bdc74a350f2340b285abc64d772baf02ed6377 \ No newline at end of file diff --git a/tests/test_score_kappafission/results_true.dat b/tests/test_score_kappafission/results_true.dat deleted file mode 100644 index 976eefa36e..0000000000 --- a/tests/test_score_kappafission/results_true.dat +++ /dev/null @@ -1,29 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -2.266169E+02 -1.049923E+04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.366590E+02 -3.861651E+03 -tally 2: -2.403775E+02 -1.175130E+04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.270420E+02 -3.297537E+03 -tally 3: -2.217588E+02 -1.003581E+04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.376303E+02 -3.875598E+03 diff --git a/tests/test_score_kappafission/test_score_kappafission.py b/tests/test_score_kappafission/test_score_kappafission.py deleted file mode 100644 index 2e93b51c46..0000000000 --- a/tests/test_score_kappafission/test_score_kappafission.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreKappaFissionTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(21, 22, 23, 27)) - tallies = [openmc.Tally(tally_id=i) for i in range(1, 4)] - [t.add_filter(filt) for t in tallies] - [t.add_score('kappa-fission') for t in tallies] - tallies[0].estimator = 'tracklength' - tallies[1].estimator = 'analog' - tallies[2].estimator = 'collision' - self._input_set.tallies = openmc.TalliesFile() - [self._input_set.tallies.add_tally(t) for t in tallies] - - super(ScoreKappaFissionTestHarness, self)._build_inputs() - - def _cleanup(self): - super(ScoreKappaFissionTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreKappaFissionTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_nufission/inputs_true.dat b/tests/test_score_nufission/inputs_true.dat deleted file mode 100644 index 0e6d19262d..0000000000 --- a/tests/test_score_nufission/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -ef1c9dc1906068cb48427ffc8776d8b95810ca1aca4534692ab7f788d8dac84c5f4545c7edbd884b55fb3e2b35aa1f28b9277d359427fe89bed012b38bf6342e \ No newline at end of file diff --git a/tests/test_score_nufission/results_true.dat b/tests/test_score_nufission/results_true.dat deleted file mode 100644 index 31c6abe9d5..0000000000 --- a/tests/test_score_nufission/results_true.dat +++ /dev/null @@ -1,29 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -3.041781E+00 -1.891714E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.835166E+00 -6.963265E-01 -tally 2: -3.341227E+00 -2.322075E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.862652E+00 -7.112121E-01 -tally 3: -2.975121E+00 -1.806644E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.846861E+00 -6.985413E-01 diff --git a/tests/test_score_nufission/test_score_nufission.py b/tests/test_score_nufission/test_score_nufission.py deleted file mode 100644 index 3d540daac7..0000000000 --- a/tests/test_score_nufission/test_score_nufission.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreNuFissionTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(21, 22, 23, 27)) - tallies = [openmc.Tally(tally_id=i) for i in range(1, 4)] - [t.add_filter(filt) for t in tallies] - [t.add_score('nu-fission') for t in tallies] - tallies[0].estimator = 'tracklength' - tallies[1].estimator = 'analog' - tallies[2].estimator = 'collision' - self._input_set.tallies = openmc.TalliesFile() - [self._input_set.tallies.add_tally(t) for t in tallies] - - super(ScoreNuFissionTestHarness, self)._build_inputs() - - def _cleanup(self): - super(ScoreNuFissionTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreNuFissionTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_nuscatter/inputs_true.dat b/tests/test_score_nuscatter/inputs_true.dat deleted file mode 100644 index aaf16deca5..0000000000 --- a/tests/test_score_nuscatter/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -2ec83c8c9175d4fccd6421ef736cced51f90bf01f7e20992a0d1b49db04221132d483032467c9dcda5f562f10a67f5fde1967a025230e4ea2bf9668816881d21 \ No newline at end of file diff --git a/tests/test_score_nuscatter/results_true.dat b/tests/test_score_nuscatter/results_true.dat deleted file mode 100644 index 8f9fcba891..0000000000 --- a/tests/test_score_nuscatter/results_true.dat +++ /dev/null @@ -1,11 +0,0 @@ -k-combined: -1.034954E+00 1.782721E-02 -tally 1: -0.000000E+00 -0.000000E+00 -2.514000E+01 -6.511880E+01 -6.370000E+00 -4.230900E+00 -8.547000E+01 -7.481913E+02 diff --git a/tests/test_score_nuscatter/test_score_nuscatter.py b/tests/test_score_nuscatter/test_score_nuscatter.py deleted file mode 100644 index 6f33181265..0000000000 --- a/tests/test_score_nuscatter/test_score_nuscatter.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreNuScatterTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(10, 21, 22, 23)) - t = openmc.Tally(tally_id=1) - t.add_filter(filt) - t.add_score('nu-scatter') - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(t) - - self._input_set.build_default_materials_and_geometry() - self._input_set.build_default_settings() - - self._input_set.settings.inactive = 0 - - self._input_set.export() - - def _cleanup(self): - super(ScoreNuScatterTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreNuScatterTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_nuscatter_n/inputs_true.dat b/tests/test_score_nuscatter_n/inputs_true.dat deleted file mode 100644 index cd16f80122..0000000000 --- a/tests/test_score_nuscatter_n/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -b304e586966abb31fbe625a7a48547e51ea563061928c61bc8bbec01df94b4a61b8c874dd4b5cac86a74508e81dd3f7dd8d801fcc4fe75ded5eeb3f73cf113a2 \ No newline at end of file diff --git a/tests/test_score_nuscatter_n/results_true.dat b/tests/test_score_nuscatter_n/results_true.dat deleted file mode 100644 index 0c1315807f..0000000000 --- a/tests/test_score_nuscatter_n/results_true.dat +++ /dev/null @@ -1,33 +0,0 @@ -k-combined: -1.034954E+00 1.782721E-02 -tally 1: -2.514000E+01 -6.511880E+01 -2.724740E+00 -8.378120E-01 -1.521255E+00 -2.667071E-01 -7.903706E-01 -1.216244E-01 -5.770120E-01 -5.508594E-02 -6.370000E+00 -4.230900E+00 -8.075261E-01 -9.047897E-02 -5.879624E-01 -4.107777E-02 -2.034636E-01 -8.243025E-03 --2.744502E-02 -1.515916E-03 -8.547000E+01 -7.481913E+02 -4.446994E+01 -2.016855E+02 -1.664683E+01 -2.837713E+01 -1.373176E+00 -3.329601E-01 --1.663772E+00 -4.264485E-01 diff --git a/tests/test_score_nuscatter_n/test_score_nuscatter_n.py b/tests/test_score_nuscatter_n/test_score_nuscatter_n.py deleted file mode 100644 index 40029bd02c..0000000000 --- a/tests/test_score_nuscatter_n/test_score_nuscatter_n.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreNuScatterNTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(21, 22, 23)) - t = openmc.Tally(tally_id=1) - t.add_filter(filt) - t.add_score('nu-scatter') - t.add_score('nu-scatter-1') - t.add_score('nu-scatter-2') - t.add_score('nu-scatter-3') - t.add_score('nu-scatter-4') - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(t) - - self._input_set.build_default_materials_and_geometry() - self._input_set.build_default_settings() - - self._input_set.settings.inactive = 0 - - self._input_set.export() - - def _cleanup(self): - super(ScoreNuScatterNTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreNuScatterNTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_nuscatter_pn/inputs_true.dat b/tests/test_score_nuscatter_pn/inputs_true.dat deleted file mode 100644 index ae7c108b7a..0000000000 --- a/tests/test_score_nuscatter_pn/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -9c3d305ad2c4ac642db896100805c32ce0cf0bbf89958718a30afde7e1dd1329fb7946c35fc628355d29270760e5f1c3700890dfba1afe8d31f4deab63de86ff \ No newline at end of file diff --git a/tests/test_score_nuscatter_pn/results_true.dat b/tests/test_score_nuscatter_pn/results_true.dat deleted file mode 100644 index 603c13e701..0000000000 --- a/tests/test_score_nuscatter_pn/results_true.dat +++ /dev/null @@ -1,24 +0,0 @@ -k-combined: -1.034954E+00 1.782721E-02 -tally 1: -2.514000E+01 -6.511880E+01 -2.724740E+00 -8.378120E-01 -1.521255E+00 -2.667071E-01 -7.903706E-01 -1.216244E-01 -5.770120E-01 -5.508594E-02 -tally 2: -2.514000E+01 -6.511880E+01 -2.724740E+00 -8.378120E-01 -1.521255E+00 -2.667071E-01 -7.903706E-01 -1.216244E-01 -5.770120E-01 -5.508594E-02 diff --git a/tests/test_score_nuscatter_pn/test_score_nuscatter_pn.py b/tests/test_score_nuscatter_pn/test_score_nuscatter_pn.py deleted file mode 100644 index 6a69fe054d..0000000000 --- a/tests/test_score_nuscatter_pn/test_score_nuscatter_pn.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreNuScatterPNTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(21, )) - t1 = openmc.Tally(tally_id=1) - t1.add_filter(filt) - t1.add_score('nu-scatter-0') - t1.add_score('nu-scatter-1') - t1.add_score('nu-scatter-2') - t1.add_score('nu-scatter-3') - t1.add_score('nu-scatter-4') - t2 = openmc.Tally(tally_id=2) - t2.add_filter(filt) - t2.add_score('nu-scatter-p4') - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(t1) - self._input_set.tallies.add_tally(t2) - - self._input_set.build_default_materials_and_geometry() - self._input_set.build_default_settings() - - self._input_set.settings.inactive = 0 - - self._input_set.export() - - def _cleanup(self): - super(ScoreNuScatterPNTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreNuScatterPNTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_nuscatter_yn/inputs_true.dat b/tests/test_score_nuscatter_yn/inputs_true.dat deleted file mode 100644 index da8fc3f2fe..0000000000 --- a/tests/test_score_nuscatter_yn/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -c483f62afa60f7390bbd82d7372a1f629f6783f8fb85857c63a3912e8d980118eff38f356b53312d067daa0f190634ac89bebac19cfe15325fb2b440473addae \ No newline at end of file diff --git a/tests/test_score_nuscatter_yn/results_true.dat b/tests/test_score_nuscatter_yn/results_true.dat deleted file mode 100644 index 2b14a72560..0000000000 --- a/tests/test_score_nuscatter_yn/results_true.dat +++ /dev/null @@ -1,38 +0,0 @@ -k-combined: -1.034954E+00 1.782721E-02 -tally 1: -2.514000E+01 -6.511880E+01 -tally 2: -2.514000E+01 -6.511880E+01 -2.222467E-01 -2.881247E-02 -3.019176E-01 -3.014833E-02 --8.459006E-04 -4.773570E-02 -9.596964E-02 -1.009754E-02 -4.314855E-02 -6.207871E-03 -4.607677E-02 -9.205573E-03 -2.345994E-03 -1.243004E-02 -9.577397E-02 -6.605519E-03 -2.821584E-02 -3.834286E-03 --1.077389E-01 -6.570217E-03 -1.106443E-01 -1.006436E-02 -1.322104E-01 -7.721677E-03 --1.315548E-02 -5.488918E-04 --2.792171E-02 -5.816161E-03 -1.994370E-02 -1.169674E-03 diff --git a/tests/test_score_nuscatter_yn/test_score_nuscatter_yn.py b/tests/test_score_nuscatter_yn/test_score_nuscatter_yn.py deleted file mode 100644 index 6a6ad54956..0000000000 --- a/tests/test_score_nuscatter_yn/test_score_nuscatter_yn.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreNuScatterYNTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(21, )) - t1 = openmc.Tally(tally_id=1) - t1.add_filter(filt) - t1.add_score('nu-scatter-0') - t2 = openmc.Tally(tally_id=2) - t2.add_filter(filt) - t2.add_score('nu-scatter-y3') - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(t1) - self._input_set.tallies.add_tally(t2) - - self._input_set.build_default_materials_and_geometry() - self._input_set.build_default_settings() - - self._input_set.settings.inactive = 0 - - self._input_set.export() - - def _cleanup(self): - super(ScoreNuScatterYNTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreNuScatterYNTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_scatter/inputs_true.dat b/tests/test_score_scatter/inputs_true.dat deleted file mode 100644 index 28e2bebeee..0000000000 --- a/tests/test_score_scatter/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -b3e7dc8968d814e455866532c05702196bab7dbdaca3c6cd3eb4f22243efb67755b373a7c54de7d767c6f3e0c4b5db612c345832c8f07cd1f50bc08fc841b3b8 \ No newline at end of file diff --git a/tests/test_score_scatter/results_true.dat b/tests/test_score_scatter/results_true.dat deleted file mode 100644 index 8d3e0fdc03..0000000000 --- a/tests/test_score_scatter/results_true.dat +++ /dev/null @@ -1,29 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -0.000000E+00 -0.000000E+00 -1.514235E+01 -4.620490E+01 -3.839050E+00 -2.975620E+00 -5.317903E+01 -5.754103E+02 -tally 2: -0.000000E+00 -0.000000E+00 -1.485000E+01 -4.439790E+01 -4.120000E+00 -3.438000E+00 -5.173000E+01 -5.467243E+02 -tally 3: -0.000000E+00 -0.000000E+00 -1.496769E+01 -4.502714E+01 -4.117144E+00 -3.431861E+00 -5.174677E+01 -5.469474E+02 diff --git a/tests/test_score_scatter/test_score_scatter.py b/tests/test_score_scatter/test_score_scatter.py deleted file mode 100644 index 0b2621acd3..0000000000 --- a/tests/test_score_scatter/test_score_scatter.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreScatterTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(10, 21, 22, 23)) - tallies = [openmc.Tally(tally_id=i) for i in range(1, 4)] - [t.add_filter(filt) for t in tallies] - [t.add_score('scatter') for t in tallies] - tallies[0].estimator = 'tracklength' - tallies[1].estimator = 'analog' - tallies[2].estimator = 'collision' - self._input_set.tallies = openmc.TalliesFile() - [self._input_set.tallies.add_tally(t) for t in tallies] - - super(ScoreScatterTestHarness, self)._build_inputs() - - def _cleanup(self): - super(ScoreScatterTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreScatterTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_scatter_n/inputs_true.dat b/tests/test_score_scatter_n/inputs_true.dat deleted file mode 100644 index ea71722993..0000000000 --- a/tests/test_score_scatter_n/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -fae463e84fbb166a9ec03390824e359d162fae9f8556d44681c76907c22a0d48e69281dcce6ffd7f3d6e4b19dad3d705c516328d902878288300f87c4a72a671 \ No newline at end of file diff --git a/tests/test_score_scatter_n/results_true.dat b/tests/test_score_scatter_n/results_true.dat deleted file mode 100644 index 96e56bd6ab..0000000000 --- a/tests/test_score_scatter_n/results_true.dat +++ /dev/null @@ -1,33 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -1.485000E+01 -4.439790E+01 -1.259515E+00 -3.360064E-01 -7.983154E-01 -1.355632E-01 -3.425460E-01 -2.971972E-02 -2.949225E-01 -3.975603E-02 -4.120000E+00 -3.438000E+00 -6.222571E-01 -8.335984E-02 -1.670136E-01 -1.374768E-02 --5.819374E-02 -1.091808E-02 --6.389550E-02 -5.688533E-03 -5.173000E+01 -5.467243E+02 -2.669403E+01 -1.451361E+02 -9.691140E+00 -1.933574E+01 -5.860769E-01 -2.122377E-01 --1.190340E+00 -3.145785E-01 diff --git a/tests/test_score_scatter_n/test_score_scatter_n.py b/tests/test_score_scatter_n/test_score_scatter_n.py deleted file mode 100644 index 47fd12b2ed..0000000000 --- a/tests/test_score_scatter_n/test_score_scatter_n.py +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreScatterNTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(21, 22, 23)) - t = openmc.Tally(tally_id=1) - t.add_filter(filt) - t.add_score('scatter') - t.add_score('scatter-1') - t.add_score('scatter-2') - t.add_score('scatter-3') - t.add_score('scatter-4') - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(t) - - super(ScoreScatterNTestHarness, self)._build_inputs() - - def _cleanup(self): - super(ScoreScatterNTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreScatterNTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_scatter_pn/inputs_true.dat b/tests/test_score_scatter_pn/inputs_true.dat deleted file mode 100644 index 9c74a13f93..0000000000 --- a/tests/test_score_scatter_pn/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -2d2e8de66740bbed327dd926f59d75120b04d30ffb9d7c96876ba21c7768c367c63e3624c3ee40553dc40d9a5379fa0052a932a6c5f45d1ad4327c4ac83cdff2 \ No newline at end of file diff --git a/tests/test_score_scatter_pn/results_true.dat b/tests/test_score_scatter_pn/results_true.dat deleted file mode 100644 index 753216a8b7..0000000000 --- a/tests/test_score_scatter_pn/results_true.dat +++ /dev/null @@ -1,24 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -1.485000E+01 -4.439790E+01 -1.259515E+00 -3.360064E-01 -7.983154E-01 -1.355632E-01 -3.425460E-01 -2.971972E-02 -2.949225E-01 -3.975603E-02 -tally 2: -1.485000E+01 -4.439790E+01 -1.259515E+00 -3.360064E-01 -7.983154E-01 -1.355632E-01 -3.425460E-01 -2.971972E-02 -2.949225E-01 -3.975603E-02 diff --git a/tests/test_score_scatter_pn/test_score_scatter_pn.py b/tests/test_score_scatter_pn/test_score_scatter_pn.py deleted file mode 100644 index 9186fe5480..0000000000 --- a/tests/test_score_scatter_pn/test_score_scatter_pn.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreScatterPNTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(21, )) - t1 = openmc.Tally(tally_id=1) - t1.add_filter(filt) - t1.add_score('scatter-0') - t1.add_score('scatter-1') - t1.add_score('scatter-2') - t1.add_score('scatter-3') - t1.add_score('scatter-4') - t1.estimator = 'analog' - t2 = openmc.Tally(tally_id=2) - t2.add_filter(filt) - t2.add_score('scatter-p4') - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(t1) - self._input_set.tallies.add_tally(t2) - - super(ScoreScatterPNTestHarness, self)._build_inputs() - - def _cleanup(self): - super(ScoreScatterPNTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreScatterPNTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_scatter_yn/inputs_true.dat b/tests/test_score_scatter_yn/inputs_true.dat deleted file mode 100644 index 0bfb564ff8..0000000000 --- a/tests/test_score_scatter_yn/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -8dd146ebd2008801a4c83470e8d9fcc8d39fe5e687c65f980eca209dd5f7fb8d17bfadf3bf3d452eaa564ee5f35a8fc97adc3dda44160d6ad574b784f2dd0030 \ No newline at end of file diff --git a/tests/test_score_scatter_yn/results_true.dat b/tests/test_score_scatter_yn/results_true.dat deleted file mode 100644 index fb6b4749d1..0000000000 --- a/tests/test_score_scatter_yn/results_true.dat +++ /dev/null @@ -1,56 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -1.485000E+01 -4.439790E+01 -tally 2: -1.485000E+01 -4.439790E+01 --8.440076E-02 -1.135203E-02 -8.198663E-02 -3.887429E-02 --1.358080E-01 -2.890416E-02 --3.544823E-02 -9.843339E-04 --1.542072E-01 -8.228126E-03 -1.057111E-01 -3.758100E-03 --1.647870E-02 -4.827841E-03 -1.378297E-01 -1.566876E-02 -4.676778E-02 -4.809366E-03 -1.966204E-02 -7.447981E-04 -1.889258E-02 -6.841953E-04 -1.337703E-02 -1.250077E-03 --1.044684E-01 -6.969498E-03 --1.177995E-02 -8.208715E-03 --1.940058E-04 -5.128759E-03 --2.165868E-02 -1.335569E-03 --3.080886E-02 -4.544434E-04 -1.039856E-03 -1.209631E-03 --1.317068E-02 -1.469722E-03 --6.432758E-02 -2.106736E-03 -3.323023E-02 -4.513838E-03 -2.683700E-02 -1.146747E-03 --3.494912E-02 -1.006153E-03 -6.289525E-02 -3.700145E-03 diff --git a/tests/test_score_scatter_yn/test_score_scatter_yn.py b/tests/test_score_scatter_yn/test_score_scatter_yn.py deleted file mode 100644 index 9e6900031f..0000000000 --- a/tests/test_score_scatter_yn/test_score_scatter_yn.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreScatterYNTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(21, )) - t1 = openmc.Tally(tally_id=1) - t1.add_filter(filt) - t1.add_score('scatter-0') - t1.estimator = 'analog' - t2 = openmc.Tally(tally_id=2) - t2.add_filter(filt) - t2.add_score('scatter-y4') - self._input_set.tallies = openmc.TalliesFile() - self._input_set.tallies.add_tally(t1) - self._input_set.tallies.add_tally(t2) - - super(ScoreScatterYNTestHarness, self)._build_inputs() - - def _cleanup(self): - super(ScoreScatterYNTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreScatterYNTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_total/inputs_true.dat b/tests/test_score_total/inputs_true.dat deleted file mode 100644 index 45bebe24c2..0000000000 --- a/tests/test_score_total/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -7bf8aa36c31ca8b34f7c410901cb96e1ba7d389c33c850591519b15753c1322b75e5051c960dbc2e254cf46cc9720dd5e348aac0acbb70d10c71165e2f5ab9e4 \ No newline at end of file diff --git a/tests/test_score_total/results_true.dat b/tests/test_score_total/results_true.dat deleted file mode 100644 index 9b8a06f807..0000000000 --- a/tests/test_score_total/results_true.dat +++ /dev/null @@ -1,29 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -0.000000E+00 -0.000000E+00 -1.767552E+01 -6.295417E+01 -3.863588E+00 -3.013300E+00 -5.356594E+01 -5.839391E+02 -tally 2: -0.000000E+00 -0.000000E+00 -1.739000E+01 -6.083290E+01 -4.160000E+00 -3.501000E+00 -5.213000E+01 -5.552351E+02 -tally 3: -0.000000E+00 -0.000000E+00 -1.739000E+01 -6.083290E+01 -4.160000E+00 -3.501000E+00 -5.213000E+01 -5.552351E+02 diff --git a/tests/test_score_total/test_score_total.py b/tests/test_score_total/test_score_total.py deleted file mode 100644 index c6f3f335fc..0000000000 --- a/tests/test_score_total/test_score_total.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreTotalTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(10, 21, 22, 23)) - tallies = [openmc.Tally(tally_id=i) for i in range(1, 4)] - [t.add_filter(filt) for t in tallies] - [t.add_score('total') for t in tallies] - tallies[0].estimator = 'tracklength' - tallies[1].estimator = 'analog' - tallies[2].estimator = 'collision' - self._input_set.tallies = openmc.TalliesFile() - [self._input_set.tallies.add_tally(t) for t in tallies] - - super(ScoreTotalTestHarness, self)._build_inputs() - - def _cleanup(self): - super(ScoreTotalTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreTotalTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_score_total_yn/inputs_true.dat b/tests/test_score_total_yn/inputs_true.dat deleted file mode 100644 index 939252597c..0000000000 --- a/tests/test_score_total_yn/inputs_true.dat +++ /dev/null @@ -1 +0,0 @@ -3c05a49f78866eda267c9f8eab2669a3a1aeb4eabfade9697d551b13f482d9076190c63a52a8aade59c20d917cebdd3e9bedabda6bc5bfd549db43cc61d7466f \ No newline at end of file diff --git a/tests/test_score_total_yn/results_true.dat b/tests/test_score_total_yn/results_true.dat deleted file mode 100644 index b416b05ec3..0000000000 --- a/tests/test_score_total_yn/results_true.dat +++ /dev/null @@ -1,1214 +0,0 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -0.000000E+00 -0.000000E+00 -1.767552E+01 -6.295417E+01 -3.863588E+00 -3.013300E+00 -5.356594E+01 -5.839391E+02 -tally 2: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.780506E-01 -1.942072E-01 --4.170415E-02 -7.581469E-04 --2.419728E-03 -6.296241E-04 --8.163997E-03 -4.785197E-04 -3.971909E-03 -1.363304E-04 -1.585497E-02 -1.295251E-04 --7.029875E-02 -1.208194E-03 --1.524070E-02 -2.828843E-04 --2.141105E-02 -2.953327E-04 --2.147623E-02 -2.390414E-04 -5.592040E-04 -1.720605E-04 -3.022066E-03 -1.843720E-04 -1.489821E-02 -9.193290E-05 --1.354668E-02 -2.551940E-04 --5.692690E-04 -3.013453E-04 -2.324582E-02 -2.170615E-04 -1.883012E-02 -1.045949E-04 --3.997107E-03 -1.674058E-04 -1.616443E-02 -2.046286E-04 -1.625747E-02 -1.851351E-04 -1.120209E-02 -2.028649E-04 -4.240284E-03 -4.019011E-05 -1.535379E-02 -9.872559E-05 --8.973926E-03 -1.448680E-04 --3.933227E-03 -4.305328E-04 -1.767552E+01 -6.295417E+01 --1.458308E-01 -8.239551E-03 -1.976485E-01 -7.360520E-02 --2.647182E-01 -5.347815E-02 -1.828025E-01 -1.840743E-02 -1.865994E-01 -2.843407E-02 --6.438995E-02 -8.898045E-03 --1.416445E-01 -3.839856E-02 --3.298894E-01 -2.672141E-02 --1.462639E-01 -1.225250E-02 --6.410138E-02 -3.766615E-02 -4.701705E-02 -1.968428E-03 -2.953056E-02 -2.358647E-02 --1.717672E-01 -5.877351E-02 -1.927497E-02 -1.358953E-02 -1.708870E-01 -1.502033E-02 -4.453803E-02 -1.622532E-02 --2.076143E-02 -1.850686E-03 -1.111325E-01 -8.415150E-03 -1.249594E-01 -7.491280E-03 -1.381757E-02 -1.537264E-02 --7.286234E-03 -9.057874E-03 -3.162973E-01 -3.303388E-02 -1.012773E-01 -8.345375E-03 --5.238963E-02 -3.920421E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.863588E+00 -3.013300E+00 -5.075749E-02 -1.018210E-03 -3.445344E-02 -5.778215E-03 --6.239642E-02 -4.107408E-03 --1.475495E-02 -7.971898E-04 -5.809323E-02 -3.039895E-03 --2.510339E-02 -3.529134E-04 --9.731680E-03 -1.221628E-03 --5.815144E-02 -1.403261E-03 --4.936694E-02 -6.481626E-04 -5.141985E-03 -1.343973E-03 -1.515105E-02 -3.044735E-04 -4.474521E-03 -1.155268E-03 --6.855877E-02 -4.048417E-03 --2.701967E-05 -1.279041E-03 -2.197636E-02 -2.843662E-04 --1.780381E-02 -8.441574E-04 -2.916634E-02 -2.530602E-03 -2.289834E-02 -2.201375E-03 -3.283424E-02 -7.615219E-04 -9.623726E-03 -7.614092E-04 -2.808239E-02 -1.500381E-03 -4.835419E-02 -6.933678E-04 --2.636221E-02 -2.230834E-04 --4.957463E-02 -1.939266E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.356594E+01 -5.839391E+02 --1.198882E+00 -3.391100E-01 -3.952398E-01 -5.729760E-01 --1.045726E+00 -4.419194E-01 -2.683170E-01 -1.872580E-01 -5.059349E-01 -2.592209E-01 -4.561651E-01 -1.253696E-01 --4.273775E-01 -3.509266E-01 --6.300496E-01 -2.102051E-01 --3.094705E-01 -1.410278E-01 --6.840225E-01 -1.971765E-01 -4.123355E-02 -3.962538E-02 --1.554557E-01 -2.784362E-02 --4.698631E-01 -1.867413E-01 --7.016026E-02 -3.059344E-02 -2.922284E-01 -8.680517E-02 --1.252431E-01 -3.180591E-02 -1.825937E-01 -8.626653E-02 -1.637960E-01 -1.329538E-01 -6.662867E-01 -1.497985E-01 -4.662585E-01 -7.552145E-02 -1.198254E-03 -2.020899E-01 -5.281410E-01 -9.615758E-02 -6.396211E-02 -1.806992E-01 --1.898620E-01 -1.113751E-01 -tally 3: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.300000E-01 -1.839000E-01 -4.056201E-03 -8.670884E-04 --2.262959E-02 -2.263780E-03 --4.568371E-02 -4.078305E-03 -6.023055E-02 -1.099458E-03 --2.468374E-02 -3.403931E-03 --8.676202E-02 -2.444658E-03 -2.075016E-02 -5.432442E-03 -1.101095E-02 -3.129947E-04 -8.689134E-03 -2.422445E-03 --1.097503E-02 -4.670673E-04 -4.979355E-02 -1.791811E-03 -1.769845E-02 -6.074665E-04 --1.473469E-02 -1.257671E-03 --1.133757E-02 -1.555143E-03 -1.730195E-02 -1.841949E-03 --1.191492E-02 -1.859105E-03 -9.038577E-03 -4.401577E-04 -1.770047E-02 -4.158291E-04 -1.492809E-02 -5.488168E-04 -7.970152E-02 -1.597910E-03 -3.741348E-02 -5.704935E-04 -2.078478E-02 -5.379832E-04 --1.355930E-02 -6.747758E-04 -3.416200E-02 -8.262470E-04 -1.739000E+01 -6.083290E+01 --2.434171E-01 -3.049063E-02 --1.278707E-01 -9.585267E-02 --2.597328E-01 -8.692607E-02 -2.496700E-01 -3.750933E-02 --1.309937E-01 -4.217907E-02 --1.863241E-01 -1.738581E-02 -1.292679E-01 -1.799004E-02 --3.543191E-01 -3.682107E-02 -1.904413E-01 -1.455250E-02 --7.093238E-02 -1.473997E-02 -1.920412E-01 -1.308864E-02 -1.566093E-01 -1.913492E-02 --2.499642E-01 -3.036874E-02 --2.323022E-01 -3.794368E-02 -6.361729E-02 -3.266166E-02 -4.688479E-02 -2.806712E-02 -9.796563E-02 -1.419748E-02 -1.000847E-02 -3.233262E-02 -7.570231E-02 -4.626536E-03 -1.489091E-01 -1.159345E-02 -2.236285E-01 -1.480084E-02 -2.461305E-01 -1.643844E-02 -1.773523E-02 -1.626036E-03 -6.570774E-02 -1.069893E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.160000E+00 -3.501000E+00 --9.464171E-02 -8.682833E-03 -8.467800E-02 -1.402624E-02 -1.283471E-02 -2.630439E-02 -1.859869E-01 -1.189528E-02 -1.910311E-02 -2.907370E-03 --2.542253E-01 -2.143851E-02 --4.021473E-02 -5.812599E-03 --1.242140E-01 -1.017873E-02 --2.934198E-02 -2.409920E-03 -5.719767E-02 -2.211520E-03 -3.023903E-02 -2.870625E-03 -1.092479E-01 -6.089989E-03 -1.604743E-02 -1.110224E-02 -3.811062E-03 -5.234112E-03 -5.446762E-02 -5.323411E-03 --3.868978E-02 -4.949255E-03 -1.384260E-01 -4.903532E-03 --3.761889E-02 -2.524889E-03 --6.079772E-02 -2.328339E-03 -1.956623E-03 -4.096814E-03 -1.716402E-03 -2.022751E-03 --1.108600E-01 -3.227014E-03 --2.447622E-03 -4.075421E-03 -1.582493E-02 -4.847858E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.213000E+01 -5.552351E+02 --6.019876E-01 -2.938936E-01 -2.126970E-01 -3.363271E-01 --6.928646E-01 -3.077152E-01 --2.976474E-01 -5.830705E-02 -7.804821E-01 -3.967156E-01 -5.737502E-01 -1.090147E-01 --2.867929E-01 -1.312720E-01 --4.735578E-01 -6.714577E-02 --6.340442E-02 -4.240623E-02 --1.594570E-01 -1.167021E-01 --5.403124E-02 -6.452745E-02 --2.670969E-01 -5.822561E-02 --3.033558E-01 -4.890487E-02 --3.515557E-01 -5.069681E-02 -2.257462E-01 -4.682933E-02 --1.449924E-02 -1.625521E-02 -2.809498E-01 -6.883451E-02 -1.904808E-01 -1.004755E-01 -2.570005E-01 -4.301248E-02 -9.493600E-02 -7.708499E-02 --2.804222E-01 -4.455703E-02 -3.199914E-01 -7.435651E-02 --2.818069E-04 -7.231318E-02 -3.689494E-01 -1.349712E-01 -tally 4: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.453374E-01 -1.815824E-01 --4.552571E-02 -8.689847E-04 -4.192526E-03 -6.095248E-04 --4.085060E-03 -3.488081E-04 -3.074303E-02 -3.709785E-04 -1.949067E-02 -1.995057E-04 --7.372260E-02 -1.709765E-03 --5.140901E-03 -6.268082E-05 --2.589014E-02 -1.616678E-04 -1.683116E-02 -2.122512E-04 --1.074659E-02 -1.087471E-04 -3.762844E-03 -3.439135E-05 -1.365793E-02 -5.255161E-05 -5.869374E-05 -4.060049E-04 --7.715004E-03 -3.629588E-04 -8.240120E-03 -5.192031E-04 -1.662861E-02 -5.038262E-04 --2.845811E-03 -2.843348E-04 -1.826833E-03 -1.104947E-05 --5.596885E-04 -1.922661E-05 -1.398723E-02 -1.025178E-04 -1.733988E-02 -1.184228E-04 -1.250057E-02 -1.447801E-04 --5.450018E-03 -3.725923E-05 -2.390947E-02 -6.837656E-04 -1.739000E+01 -6.083290E+01 --2.434171E-01 -3.049063E-02 --1.278707E-01 -9.585267E-02 --2.597328E-01 -8.692607E-02 -2.496700E-01 -3.750933E-02 --1.309937E-01 -4.217907E-02 --1.863241E-01 -1.738581E-02 -1.292679E-01 -1.799004E-02 --3.543191E-01 -3.682107E-02 -1.904413E-01 -1.455250E-02 --7.093238E-02 -1.473997E-02 -1.920412E-01 -1.308864E-02 -1.566093E-01 -1.913492E-02 --2.499642E-01 -3.036874E-02 --2.323022E-01 -3.794368E-02 -6.361729E-02 -3.266166E-02 -4.688479E-02 -2.806712E-02 -9.796563E-02 -1.419748E-02 -1.000847E-02 -3.233262E-02 -7.570231E-02 -4.626536E-03 -1.489091E-01 -1.159345E-02 -2.236285E-01 -1.480084E-02 -2.461305E-01 -1.643844E-02 -1.773523E-02 -1.626036E-03 -6.570774E-02 -1.069893E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.160000E+00 -3.501000E+00 --9.464171E-02 -8.682833E-03 -8.467800E-02 -1.402624E-02 -1.283471E-02 -2.630439E-02 -1.859869E-01 -1.189528E-02 -1.910311E-02 -2.907370E-03 --2.542253E-01 -2.143851E-02 --4.021473E-02 -5.812599E-03 --1.242140E-01 -1.017873E-02 --2.934198E-02 -2.409920E-03 -5.719767E-02 -2.211520E-03 -3.023903E-02 -2.870625E-03 -1.092479E-01 -6.089989E-03 -1.604743E-02 -1.110224E-02 -3.811062E-03 -5.234112E-03 -5.446762E-02 -5.323411E-03 --3.868978E-02 -4.949255E-03 -1.384260E-01 -4.903532E-03 --3.761889E-02 -2.524889E-03 --6.079772E-02 -2.328339E-03 -1.956623E-03 -4.096814E-03 -1.716402E-03 -2.022751E-03 --1.108600E-01 -3.227014E-03 --2.447622E-03 -4.075421E-03 -1.582493E-02 -4.847858E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.213000E+01 -5.552351E+02 --6.019876E-01 -2.938936E-01 -2.126970E-01 -3.363271E-01 --6.928646E-01 -3.077152E-01 --2.976474E-01 -5.830705E-02 -7.804821E-01 -3.967156E-01 -5.737502E-01 -1.090147E-01 --2.867929E-01 -1.312720E-01 --4.735578E-01 -6.714577E-02 --6.340442E-02 -4.240623E-02 --1.594570E-01 -1.167021E-01 --5.403124E-02 -6.452745E-02 --2.670969E-01 -5.822561E-02 --3.033558E-01 -4.890487E-02 --3.515557E-01 -5.069681E-02 -2.257462E-01 -4.682933E-02 --1.449924E-02 -1.625521E-02 -2.809498E-01 -6.883451E-02 -1.904808E-01 -1.004755E-01 -2.570005E-01 -4.301248E-02 -9.493600E-02 -7.708499E-02 --2.804222E-01 -4.455703E-02 -3.199914E-01 -7.435651E-02 --2.818069E-04 -7.231318E-02 -3.689494E-01 -1.349712E-01 diff --git a/tests/test_score_total_yn/test_score_total_yn.py b/tests/test_score_total_yn/test_score_total_yn.py deleted file mode 100644 index 80f947f920..0000000000 --- a/tests/test_score_total_yn/test_score_total_yn.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness -import openmc - - -class ScoreTotalYNTestHarness(PyAPITestHarness): - def _build_inputs(self): - filt = openmc.Filter(type='cell', bins=(10, 21, 22, 23)) - tallies = [openmc.Tally(tally_id=i) for i in range(1, 5)] - [t.add_filter(filt) for t in tallies] - tallies[0].add_score('total') - [t.add_score('total-y4') for t in tallies[1:]] - [t.add_nuclide('U-235') for t in tallies[1:]] - [t.add_nuclide('total') for t in tallies[1:]] - tallies[1].estimator = 'tracklength' - tallies[2].estimator = 'analog' - tallies[3].estimator = 'collision' - self._input_set.tallies = openmc.TalliesFile() - [self._input_set.tallies.add_tally(t) for t in tallies] - - super(ScoreTotalYNTestHarness, self)._build_inputs() - - def _cleanup(self): - super(ScoreTotalYNTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') - if os.path.exists(f): os.remove(f) - - -if __name__ == '__main__': - harness = ScoreTotalYNTestHarness('statepoint.10.*', True) - harness.main() diff --git a/tests/test_tallies/inputs_true.dat b/tests/test_tallies/inputs_true.dat new file mode 100644 index 0000000000..727d6f369d --- /dev/null +++ b/tests/test_tallies/inputs_true.dat @@ -0,0 +1 @@ +fb9a9e5d829d924e94f4e1b3862edbefdb9dbed42b97930a5ebe41c0bc052ce668dcf7a07c42d985d005f68b37c1233b6110c86432b7ed0e561e1ef653d23eca \ No newline at end of file diff --git a/tests/test_tallies/results_true.dat b/tests/test_tallies/results_true.dat new file mode 100644 index 0000000000..76a31d6434 --- /dev/null +++ b/tests/test_tallies/results_true.dat @@ -0,0 +1,3697 @@ +k-combined: +9.903196E-01 4.279617E-02 +tally 1: +4.215917E+01 +3.561920E+02 +4.174788E+01 +3.505184E+02 +4.603223E+01 +4.242918E+02 +4.496760E+01 +4.075599E+02 +4.088099E+01 +3.376516E+02 +tally 2: +4.157239E+01 +3.482158E+02 +4.227810E+01 +3.613293E+02 +4.376107E+01 +3.835007E+02 +4.644205E+01 +4.327195E+02 +4.191554E+01 +3.522147E+02 +tally 3: +4.215917E+01 +3.561920E+02 +4.174788E+01 +3.505184E+02 +4.603223E+01 +4.242918E+02 +4.496402E+01 +4.075053E+02 +4.088458E+01 +3.377000E+02 +tally 4: +1.531988E+01 +4.816326E+01 +9.274393E+00 +1.821174E+01 +1.595868E+01 +5.124238E+01 +1.299895E+00 +6.417145E-01 +1.510024E+01 +4.604170E+01 +8.533361E+00 +1.462765E+01 +1.658141E+01 +5.595629E+01 +1.427417E+00 +6.621807E-01 +1.683102E+01 +5.741400E+01 +9.845257E+00 +2.028406E+01 +1.773179E+01 +6.477077E+01 +1.536972E+00 +6.111079E-01 +1.586070E+01 +5.360975E+01 +9.928220E+00 +2.089005E+01 +1.737609E+01 +6.161847E+01 +1.700608E+00 +8.439708E-01 +1.607027E+01 +5.490113E+01 +7.569336E+00 +1.280955E+01 +1.606086E+01 +5.308665E+01 +9.898901E-01 +3.143027E-01 +tally 5: +0.000000E+00 +0.000000E+00 +8.921179E+01 +1.601939E+03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +tally 6: +8.141852E-04 +1.337187E-07 +4.849156E-03 +4.744020E-06 +4.460252E-03 +4.015453E-06 +1.028479E-02 +2.136252E-05 +5.002274E-03 +5.056965E-06 +1.974747E-03 +7.882970E-07 +tally 7: +2.844008E+01 +1.619630E+02 +4.425619E+01 +3.938244E+02 +5.527425E+01 +6.120383E+02 +9.799897E+00 +1.957877E+01 +tally 8: +2.842000E+01 +1.620214E+02 +4.361000E+01 +3.810139E+02 +5.297000E+01 +5.616595E+02 +6.530000E+00 +8.828900E+00 +tally 9: +2.576000E+01 +1.331666E+02 +0.000000E+00 +0.000000E+00 +7.000000E-02 +1.300000E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.050675E+00 +2.274991E-01 +0.000000E+00 +0.000000E+00 +2.070821E+00 +8.886068E-01 +2.660000E+00 +1.422000E+00 +0.000000E+00 +0.000000E+00 +3.897000E+01 +3.042635E+02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.352932E-01 +4.705717E-02 +0.000000E+00 +0.000000E+00 +1.018668E+00 +2.090017E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.570000E+00 +4.182700E+00 +0.000000E+00 +0.000000E+00 +4.968000E+01 +4.940534E+02 +6.537406E-02 +1.230788E-03 +0.000000E+00 +0.000000E+00 +8.678070E-02 +2.482037E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.290000E+00 +2.178900E+00 +1.610879E-01 +5.883677E-03 +6.530000E+00 +8.828900E+00 +3.151783E-01 +2.052521E-02 +tally 10: +2.868239E+01 +1.648549E+02 +6.779424E+00 +9.202676E+00 +6.446222E+01 +8.387204E+02 +3.367496E+01 +2.349072E+02 +tally 11: +1.241000E+01 +3.088870E+01 +1.241000E+01 +3.088870E+01 +1.364000E+01 +3.727140E+01 +1.364000E+01 +3.727140E+01 +3.251000E+01 +2.118597E+02 +3.251000E+01 +2.118597E+02 +7.297000E+01 +1.066904E+03 +7.297000E+01 +1.066904E+03 +tally 12: +9.880000E+00 +1.964520E+01 +9.880000E+00 +1.964520E+01 +1.022000E+01 +2.099620E+01 +1.022000E+01 +2.099620E+01 +1.479000E+01 +4.397670E+01 +1.479000E+01 +4.397670E+01 +3.470000E+01 +2.412094E+02 +3.470000E+01 +2.412094E+02 +6.194000E+01 +7.687326E+02 +6.194000E+01 +7.687326E+02 +tally 13: +3.560000E+00 +2.681800E+00 +3.560000E+00 +2.681800E+00 +1.930000E+00 +7.915000E-01 +1.930000E+00 +7.915000E-01 +3.870000E+00 +3.109100E+00 +3.870000E+00 +3.109100E+00 +3.500000E-01 +3.630000E-02 +3.500000E-01 +3.630000E-02 +3.680000E+00 +2.840200E+00 +3.680000E+00 +2.840200E+00 +2.050000E+00 +8.735000E-01 +2.050000E+00 +8.735000E-01 +3.910000E+00 +3.085100E+00 +3.910000E+00 +3.085100E+00 +3.900000E-01 +3.610000E-02 +3.900000E-01 +3.610000E-02 +5.130000E+00 +5.422100E+00 +5.130000E+00 +5.422100E+00 +3.100000E+00 +1.959200E+00 +3.100000E+00 +1.959200E+00 +5.840000E+00 +6.914600E+00 +5.840000E+00 +6.914600E+00 +5.400000E-01 +8.980000E-02 +5.400000E-01 +8.980000E-02 +1.215000E+01 +3.061010E+01 +1.215000E+01 +3.061010E+01 +7.220000E+00 +1.081680E+01 +7.220000E+00 +1.081680E+01 +1.355000E+01 +3.699090E+01 +1.355000E+01 +3.699090E+01 +1.360000E+00 +5.098000E-01 +1.360000E+00 +5.098000E-01 +2.199000E+01 +9.837430E+01 +2.199000E+01 +9.837430E+01 +1.243000E+01 +3.167470E+01 +1.243000E+01 +3.167470E+01 +2.451000E+01 +1.233915E+02 +2.451000E+01 +1.233915E+02 +2.460000E+00 +1.687000E+00 +2.460000E+00 +1.687000E+00 +tally 14: +2.127061E+01 +9.220793E+01 +5.602776E+01 +6.373945E+02 +6.367492E+01 +8.138443E+02 +5.529942E+01 +6.140264E+02 +1.951517E+01 +7.668661E+01 +tally 15: +2.075936E+01 +8.757254E+01 +5.524881E+01 +6.153139E+02 +6.475252E+01 +8.402281E+02 +5.446664E+01 +5.961174E+02 +2.074180E+01 +8.681580E+01 +tally 16: +2.128073E+01 +9.230382E+01 +5.601764E+01 +6.371703E+02 +6.367492E+01 +8.138443E+02 +5.529942E+01 +6.140264E+02 +1.951517E+01 +7.668661E+01 +tally 17: +8.088647E+00 +1.396899E+01 +3.960907E+00 +3.249150E+00 +8.430714E+00 +1.435355E+01 +7.192159E-01 +1.641710E-01 +1.974619E+01 +8.105078E+01 +1.212452E+01 +3.016420E+01 +2.228348E+01 +1.050847E+02 +1.748809E+00 +9.501796E-01 +2.257423E+01 +1.038902E+02 +1.351331E+01 +3.969787E+01 +2.507638E+01 +1.283664E+02 +2.193118E+00 +1.424580E+00 +2.192232E+01 +9.859711E+01 +1.096779E+01 +2.506373E+01 +2.074138E+01 +8.670015E+01 +1.469145E+00 +8.072204E-01 +6.850719E+00 +9.425536E+00 +4.584038E+00 +4.399762E+00 +7.176883E+00 +1.090693E+01 +8.244944E-01 +1.794291E-01 +tally 18: +7.510505E+01 +1.143811E+03 +8.792943E+00 +1.575416E+01 +4.214462E+01 +3.642975E+02 +4.335157E+00 +3.864423E+00 +tally 19: +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.533174E+00 +1.298118E+00 +1.711611E-02 +5.967549E-05 +6.520000E+01 +8.551888E+02 +1.156315E+00 +2.733527E-01 +1.049628E-05 +2.261930E-11 +2.266169E+02 +1.049923E+04 +1.538090E-03 +1.381456E-06 +3.974412E-01 +3.209809E-02 +1.373550E+00 +3.796357E-01 +3.041781E+00 +1.891714E+00 +1.514235E+01 +4.620490E+01 +1.767552E+01 +6.295417E+01 +2.453769E-02 +1.227715E-04 +0.000000E+00 +0.000000E+00 +1.070200E+02 +2.305805E+03 +0.000000E+00 +0.000000E+00 +4.056389E-06 +3.411247E-12 +0.000000E+00 +0.000000E+00 +5.252455E-06 +2.290531E-11 +3.359792E-02 +2.267331E-04 +2.459115E-02 +1.233078E-04 +0.000000E+00 +0.000000E+00 +3.839050E+00 +2.975620E+00 +3.863588E+00 +3.013300E+00 +3.869051E-01 +3.180828E-02 +0.000000E+00 +0.000000E+00 +2.010800E+02 +8.160415E+03 +0.000000E+00 +0.000000E+00 +2.243766E-05 +1.069671E-10 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.004005E-05 +1.748739E-09 +8.104946E-02 +1.395618E-03 +0.000000E+00 +0.000000E+00 +5.317903E+01 +5.754103E+02 +5.356594E+01 +5.839391E+02 +tally 20: +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.540000E+00 +1.293400E+00 +0.000000E+00 +0.000000E+00 +1.739000E+01 +6.083290E+01 +1.225263E+00 +3.054971E-01 +1.029200E-05 +2.180706E-11 +2.403775E+02 +1.175130E+04 +0.000000E+00 +0.000000E+00 +2.000000E-01 +9.000000E-03 +0.000000E+00 +0.000000E+00 +3.341227E+00 +2.322075E+00 +1.485000E+01 +4.439790E+01 +1.739000E+01 +6.083290E+01 +4.000000E-02 +6.000000E-04 +0.000000E+00 +0.000000E+00 +4.160000E+00 +3.501000E+00 +0.000000E+00 +0.000000E+00 +4.353200E-06 +4.363747E-12 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.000000E-02 +2.000000E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.120000E+00 +3.438000E+00 +4.160000E+00 +3.501000E+00 +4.000000E-01 +3.600000E-02 +0.000000E+00 +0.000000E+00 +5.213000E+01 +5.552351E+02 +0.000000E+00 +0.000000E+00 +2.211790E-05 +1.055892E-10 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.173000E+01 +5.467243E+02 +5.213000E+01 +5.552351E+02 +tally 21: +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.422314E+00 +1.193460E+00 +1.686299E-02 +5.765477E-05 +1.739000E+01 +6.083290E+01 +1.131528E+00 +2.612886E-01 +1.029200E-05 +2.180706E-11 +2.217588E+02 +1.003581E+04 +1.408027E-03 +1.849607E-06 +3.946436E-01 +3.166261E-02 +1.288136E+00 +3.382059E-01 +2.975121E+00 +1.806644E+00 +1.496769E+01 +4.502714E+01 +1.739000E+01 +6.083290E+01 +4.285618E-02 +4.109734E-04 +0.000000E+00 +0.000000E+00 +4.160000E+00 +3.501000E+00 +0.000000E+00 +0.000000E+00 +4.353200E-06 +4.363747E-12 +0.000000E+00 +0.000000E+00 +2.179241E-05 +4.749090E-10 +3.146594E-02 +2.159308E-04 +4.278352E-02 +4.094478E-04 +0.000000E+00 +0.000000E+00 +4.117144E+00 +3.431861E+00 +4.160000E+00 +3.501000E+00 +3.832282E-01 +3.169516E-02 +0.000000E+00 +0.000000E+00 +5.213000E+01 +5.552351E+02 +0.000000E+00 +0.000000E+00 +2.211790E-05 +1.055892E-10 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.736514E-04 +1.245171E-08 +7.989710E-02 +1.377742E-03 +0.000000E+00 +0.000000E+00 +5.174677E+01 +5.469474E+02 +5.213000E+01 +5.552351E+02 +tally 22: +3.890713E+01 +3.046363E+02 +1.366220E+01 +3.758161E+01 +6.561669E+01 +8.680729E+02 +2.382728E+01 +1.170590E+02 +8.047875E+00 +1.334796E+01 +4.056568E+01 +3.389623E+02 +tally 23: +3.890713E+01 +3.046363E+02 +-1.623579E-01 +4.602199E-02 +4.860074E-01 +5.999399E-01 +-7.895692E-01 +2.803790E-01 +2.525526E-01 +8.261176E-02 +9.103525E-02 +2.246700E-01 +4.583205E-01 +8.444556E-02 +-1.246553E-01 +2.351010E-01 +-3.534581E-01 +1.247916E-01 +-3.700473E-01 +5.215562E-02 +-1.831625E-01 +1.927381E-01 +-1.540114E-01 +1.918221E-02 +-1.266458E-01 +1.455875E-01 +-6.796869E-01 +3.911926E-01 +1.987931E-02 +4.966442E-02 +4.443797E-01 +8.842717E-02 +-1.073855E-01 +4.912428E-02 +-3.999416E-02 +4.440138E-02 +2.857919E-01 +6.935717E-02 +4.174851E-01 +5.485570E-02 +-2.178958E-01 +8.052149E-02 +-1.179644E-02 +6.709330E-02 +8.843286E-01 +2.749681E-01 +2.935079E-01 +3.032897E-02 +-1.809434E-01 +1.902413E-01 +-2.091991E-01 +1.061912E-01 +-7.137275E-02 +4.397656E-02 +2.311558E-01 +4.680679E-02 +9.927573E-02 +1.844111E-01 +-2.821437E-02 +7.293762E-02 +6.224251E-01 +1.028351E-01 +4.136440E-01 +5.198207E-02 +-7.833133E-02 +1.192960E-02 +1.041586E-01 +1.587417E-01 +-3.595677E-01 +3.086335E-01 +-2.096284E-01 +7.881012E-02 +1.366220E+01 +3.758161E+01 +1.461402E-02 +3.260482E-03 +8.325893E-02 +6.248769E-02 +-2.785736E-01 +3.698417E-02 +1.932396E-03 +1.561742E-02 +8.063397E-02 +3.598680E-02 +8.565555E-02 +5.344369E-03 +-3.899905E-02 +2.422867E-02 +-1.215439E-01 +9.193858E-03 +-1.982614E-01 +1.045860E-02 +-7.712629E-02 +2.199979E-02 +3.626484E-02 +9.872078E-04 +-6.305159E-02 +1.645879E-02 +-3.052155E-01 +5.620564E-02 +3.507115E-02 +1.056383E-02 +1.297490E-02 +5.889958E-03 +-1.208752E-02 +7.323602E-03 +-3.441007E-03 +1.841496E-02 +5.543442E-02 +1.186636E-02 +8.000436E-02 +3.703835E-03 +-3.636792E-02 +1.490603E-02 +8.753196E-02 +7.958027E-03 +2.066727E-01 +1.414130E-02 +3.652482E-02 +8.380395E-04 +-1.652432E-01 +1.878732E-02 +-1.375567E-01 +1.302400E-02 +3.692057E-03 +6.312506E-03 +9.016211E-02 +6.699735E-03 +-5.875401E-02 +1.731945E-02 +-3.960008E-02 +3.595906E-03 +1.653510E-01 +9.277293E-03 +4.064973E-02 +2.794606E-03 +-1.729061E-02 +3.219772E-03 +5.764808E-02 +1.861051E-02 +-5.970583E-02 +2.070164E-02 +-6.739411E-02 +1.063341E-02 +6.561669E+01 +8.680729E+02 +-7.938430E-01 +2.994198E-01 +9.278084E-01 +1.861899E+00 +-1.432236E+00 +7.429647E-01 +7.460836E-02 +5.946808E-01 +6.140731E-02 +3.175177E-01 +1.212677E+00 +5.125288E-01 +1.952865E-02 +5.468421E-01 +-2.965796E-01 +1.123288E-01 +-5.334195E-01 +1.589612E-01 +-6.340814E-01 +4.874650E-01 +-4.264003E-02 +9.109571E-03 +-4.323424E-01 +3.370329E-01 +-1.186876E+00 +9.854644E-01 +-2.420825E-01 +1.699455E-01 +2.920627E-02 +6.816643E-02 +-2.684345E-01 +9.799236E-02 +1.281596E-01 +3.092987E-01 +3.746150E-01 +1.242044E-01 +1.035056E+00 +2.589772E-01 +2.005450E-01 +2.074622E-01 +5.412719E-01 +3.193584E-01 +1.070173E+00 +3.266747E-01 +2.657850E-01 +1.599950E-01 +-4.694853E-01 +2.738937E-01 +-7.761977E-01 +2.561652E-01 +3.673179E-02 +9.486916E-02 +3.309909E-01 +1.095243E-01 +1.623761E-01 +2.874582E-01 +2.846296E-01 +2.430397E-01 +7.384842E-01 +2.556480E-01 +3.577508E-01 +1.763210E-01 +-2.917525E-01 +1.875646E-01 +1.634324E-01 +2.952144E-01 +-4.329582E-01 +3.418652E-01 +-2.719362E-01 +2.278925E-01 +2.382728E+01 +1.170590E+02 +-4.718326E-01 +1.961501E-01 +1.612551E-02 +2.815245E-02 +-6.390587E-01 +1.902968E-01 +2.290989E-01 +3.758858E-02 +-1.568179E-01 +1.509162E-01 +-2.363058E-01 +6.671396E-02 +4.350800E-02 +1.031680E-01 +-2.956828E-01 +2.515141E-02 +4.835878E-01 +8.614200E-02 +-5.365970E-02 +8.404087E-02 +6.079969E-02 +3.684343E-02 +-1.313088E-02 +1.488843E-02 +-2.603258E-02 +2.900625E-02 +1.249213E-01 +2.737277E-02 +-4.491422E-01 +9.482600E-02 +-1.095589E-01 +3.711500E-02 +2.248159E-01 +2.815827E-02 +-5.976009E-02 +5.887828E-03 +6.097208E-02 +5.393315E-02 +3.449714E-02 +4.332442E-02 +1.030757E-01 +2.839453E-02 +-4.399117E-01 +8.887569E-02 +-4.564910E-01 +1.172398E-01 +-2.528382E-01 +1.217655E-01 +-3.443316E-01 +4.275616E-02 +5.437008E-02 +2.355567E-02 +5.505588E-02 +5.479129E-02 +-8.326640E-02 +3.095858E-02 +1.888781E-01 +2.884542E-02 +1.981251E-01 +1.520694E-02 +5.279866E-02 +1.020641E-01 +-1.465368E-01 +3.070686E-02 +2.356940E-01 +7.899657E-02 +4.109278E-01 +5.291082E-02 +-2.572510E-01 +3.420895E-02 +8.047875E+00 +1.334796E+01 +-1.707535E-01 +3.290927E-02 +1.024687E-01 +1.308811E-02 +-1.805451E-01 +1.696222E-02 +3.519587E-02 +7.546726E-03 +-1.034933E-01 +2.224207E-02 +-1.580512E-01 +2.369625E-02 +-4.302961E-02 +1.635623E-02 +-2.992903E-02 +5.190220E-03 +2.130862E-01 +1.186351E-02 +-3.321696E-02 +7.972404E-03 +4.992040E-02 +5.667098E-03 +1.261320E-02 +2.436872E-03 +8.314024E-04 +5.360616E-03 +-6.318247E-02 +1.644558E-03 +-1.373600E-01 +1.030707E-02 +1.511677E-03 +3.467685E-03 +1.923485E-02 +8.106508E-04 +-1.180094E-01 +4.381376E-03 +-2.798056E-02 +4.871288E-03 +-7.689499E-02 +7.079493E-03 +-5.842586E-02 +1.380713E-03 +-9.946341E-02 +7.085062E-03 +-8.061825E-02 +8.679468E-03 +-9.229524E-03 +9.187483E-03 +-1.048310E-01 +3.506026E-03 +3.666209E-02 +3.259203E-03 +1.190727E-01 +4.935341E-03 +-7.391655E-02 +2.805554E-03 +2.029126E-02 +2.497736E-03 +2.787185E-02 +5.677987E-04 +6.873108E-02 +1.287727E-02 +-5.262840E-02 +3.190440E-03 +3.910911E-02 +8.661121E-03 +1.076197E-01 +5.456176E-03 +-7.476066E-02 +2.693605E-03 +4.056568E+01 +3.389623E+02 +-6.428633E-01 +6.128893E-01 +4.878518E-01 +2.130257E-01 +-9.548044E-01 +4.556949E-01 +2.234940E-01 +1.006817E-01 +1.080276E-01 +5.980158E-01 +-3.639229E-01 +3.120105E-01 +3.237506E-01 +3.451548E-01 +1.143081E-01 +7.924550E-02 +6.456733E-01 +2.424413E-01 +1.478136E-01 +1.458665E-01 +2.134798E-02 +9.102875E-02 +3.633264E-01 +7.386463E-02 +-2.213946E-01 +1.253249E-01 +-3.153847E-01 +1.094273E-01 +-7.161113E-01 +2.275500E-01 +-2.461979E-01 +1.484452E-01 +2.332886E-01 +9.715521E-02 +-7.029988E-02 +1.835254E-02 +-1.982842E-01 +9.722998E-02 +-2.089693E-01 +2.271404E-01 +7.316104E-02 +3.974665E-02 +-3.266640E-01 +8.054809E-02 +-5.126088E-01 +3.234942E-01 +-3.048753E-01 +3.439501E-01 +-4.872647E-01 +9.473730E-02 +1.590200E-01 +3.613462E-02 +4.641787E-01 +1.671339E-01 +-1.391114E-01 +3.581561E-02 +2.209343E-01 +1.489367E-02 +3.015665E-01 +4.265694E-02 +1.334716E-01 +2.321929E-01 +-3.702914E-01 +1.699549E-01 +8.891532E-02 +1.708595E-01 +6.123686E-01 +1.429184E-01 +-5.891300E-01 +1.085467E-01 +tally 24: +3.862543E+01 +2.993190E+02 +-5.083613E-01 +2.933365E-01 +-4.356793E-01 +6.676831E-01 +-6.093148E-01 +5.685331E-01 +2.512276E-01 +1.308652E-01 +-1.075955E+00 +4.775270E-01 +3.660307E-01 +1.627691E-01 +5.402149E-01 +2.324946E-01 +-3.887573E-01 +1.028105E-01 +4.324152E-01 +1.015147E-01 +3.306993E-02 +8.425069E-02 +2.127456E-01 +5.435453E-02 +2.977294E-01 +1.088039E-01 +-1.055079E+00 +3.590635E-01 +-6.740592E-01 +2.606281E-01 +3.329512E-01 +1.587428E-01 +-1.248691E-01 +1.659045E-01 +2.306000E-01 +1.062057E-01 +9.127791E-02 +2.649459E-01 +2.629881E-01 +4.786229E-02 +2.286813E-01 +2.363629E-02 +6.338613E-01 +1.118828E-01 +7.466647E-01 +1.424535E-01 +7.955161E-02 +1.003327E-02 +1.082691E-01 +2.727882E-02 +-5.295185E-01 +1.335133E-01 +-6.321517E-01 +1.422916E-01 +1.236137E-01 +2.041422E-01 +-5.389265E-02 +1.852888E-01 +3.746082E-01 +5.580885E-02 +1.383528E-01 +2.754456E-01 +5.081204E-01 +1.886515E-01 +-4.022264E-01 +1.417397E-01 +-3.377771E-01 +6.673888E-02 +1.170109E-01 +1.783182E-02 +-2.097916E-01 +7.139323E-02 +1.438678E+01 +4.193571E+01 +-6.547124E-01 +1.780450E-01 +2.207489E-01 +2.115835E-01 +4.952323E-02 +3.039341E-01 +6.681546E-01 +1.389250E-01 +-4.078026E-02 +4.393667E-02 +-8.695509E-01 +2.850853E-01 +-1.792062E-01 +7.367253E-02 +-5.657500E-01 +2.115125E-01 +-8.525189E-02 +2.541971E-02 +5.227867E-02 +2.008468E-02 +6.825349E-02 +5.316522E-02 +3.763076E-01 +7.112554E-02 +-1.279973E-02 +1.883096E-01 +7.775189E-02 +6.874374E-02 +1.119537E-01 +8.467755E-02 +-1.600632E-01 +8.650448E-02 +6.210095E-01 +1.094309E-01 +-9.997484E-02 +3.935353E-02 +-2.300525E-01 +2.351925E-02 +2.486103E-02 +3.125565E-02 +1.289518E-02 +2.879251E-02 +-3.166559E-01 +2.931428E-02 +-1.379285E-02 +2.416257E-02 +1.220552E-02 +5.154030E-02 +-1.431676E-01 +3.434080E-02 +8.148581E-02 +4.218412E-02 +8.541678E-03 +6.396306E-02 +-7.851012E-03 +5.799658E-02 +2.435723E-01 +6.744263E-02 +-2.429877E-01 +6.966516E-02 +-1.638644E-01 +2.058798E-02 +-8.986584E-03 +1.374824E-02 +3.547454E-01 +7.765460E-02 +-1.570173E-01 +6.916960E-02 +-1.056941E-02 +7.626528E-03 +6.400634E+01 +8.298077E+02 +-3.894111E-01 +8.617494E-01 +1.796567E-01 +1.065356E+00 +-1.561037E+00 +7.701475E-01 +-2.237530E-01 +2.259442E-01 +1.109999E+00 +6.179412E-01 +1.636912E+00 +7.887441E-01 +4.661183E-01 +4.191138E-01 +-1.040546E+00 +2.971961E-01 +1.044850E-01 +1.493530E-01 +-4.991935E-01 +3.222404E-01 +-4.205099E-01 +2.734911E-01 +-7.583139E-01 +3.000853E-01 +-3.750811E-01 +1.348273E-01 +-6.355508E-01 +3.666139E-01 +5.233787E-01 +1.292414E-01 +-2.869538E-02 +9.115092E-02 +6.851052E-01 +3.061040E-01 +1.703522E-01 +7.300335E-02 +4.541075E-01 +4.438507E-01 +-2.674857E-01 +4.718588E-01 +3.022517E-02 +1.136781E-01 +5.755596E-01 +2.688162E-01 +2.698373E-01 +1.403188E-01 +8.772347E-01 +3.503562E-01 +-4.258508E-01 +1.400825E-01 +-1.384853E-01 +4.924947E-02 +-1.009402E-01 +2.039230E-01 +-1.339732E-01 +4.772083E-02 +-3.249636E-01 +4.339747E-01 +1.564400E-01 +2.703717E-01 +2.536360E-01 +8.543919E-02 +-3.622063E-01 +7.442240E-02 +-2.074953E-02 +1.355614E-01 +-3.909820E-02 +1.007999E-01 +3.162815E-01 +9.656425E-02 +2.426423E+01 +1.215124E+02 +-9.628829E-01 +3.563586E-01 +2.964625E-01 +9.739638E-02 +-3.680881E-01 +3.484018E-01 +4.339143E-01 +7.590564E-02 +4.633394E-02 +1.080030E-01 +3.091634E-01 +1.246585E-01 +4.520500E-02 +1.095704E-01 +2.479383E-01 +1.138276E-01 +6.457108E-02 +6.833667E-02 +-5.623363E-02 +1.087254E-01 +3.675294E-01 +9.602246E-02 +-1.459951E-01 +9.440544E-02 +-6.817672E-02 +4.978066E-02 +1.076782E-02 +1.697440E-01 +-1.024501E-02 +1.184830E-01 +-1.654178E-01 +1.689209E-02 +-1.006214E-01 +3.392546E-02 +5.070063E-01 +7.598100E-02 +2.251704E-01 +7.867348E-02 +-1.693789E-01 +2.069974E-01 +-2.790249E-01 +2.674643E-02 +3.888604E-01 +3.649330E-02 +7.614452E-02 +7.098023E-02 +1.236282E-02 +5.476895E-02 +-3.151637E-01 +3.543466E-02 +-6.363562E-01 +9.323507E-02 +2.808153E-01 +8.537981E-02 +2.197639E-01 +3.393653E-02 +8.660625E-02 +1.575544E-02 +3.733826E-02 +1.449783E-02 +8.800903E-04 +3.993931E-02 +3.304886E-01 +3.099095E-02 +-4.149186E-02 +5.375091E-02 +2.448819E-01 +9.225028E-02 +-1.230091E-01 +3.865008E-02 +7.600812E+00 +1.199814E+01 +-8.738539E-01 +3.078183E-01 +-2.592305E-01 +1.015952E-01 +-6.391696E-02 +6.657129E-02 +-2.857855E-01 +2.216294E-02 +-3.516811E-01 +3.429194E-02 +4.585144E-02 +6.204056E-02 +-1.599494E-01 +1.684846E-02 +-2.364219E-01 +1.550644E-02 +1.197289E-01 +8.631394E-02 +-1.364517E-01 +5.086560E-02 +-2.213374E-01 +2.779096E-02 +-7.328761E-02 +1.216230E-02 +2.476803E-01 +2.724500E-02 +-6.356296E-02 +2.513244E-02 +-3.886281E-01 +9.479377E-02 +1.006972E-01 +1.352120E-02 +6.932242E-02 +3.192705E-02 +-3.232505E-02 +5.592418E-02 +9.582599E-02 +1.504811E-02 +-2.887999E-01 +3.760482E-02 +-2.372013E-01 +1.868786E-02 +-1.655526E-01 +4.720116E-02 +8.611265E-02 +2.284310E-02 +-2.142116E-01 +2.619080E-02 +-1.811202E-01 +1.457105E-02 +1.430164E-01 +2.016598E-02 +-4.066031E-01 +7.671356E-02 +1.364946E-01 +1.385677E-02 +8.357667E-02 +1.521943E-02 +-2.235270E-02 +1.029570E-02 +-7.920760E-02 +4.227880E-02 +2.622096E-01 +2.327728E-02 +-7.787296E-03 +2.288300E-02 +-1.645219E-02 +5.394704E-02 +7.274557E-02 +1.075570E-02 +4.104875E+01 +3.455300E+02 +-9.827893E-01 +2.751051E-01 +3.227606E-01 +1.213711E-01 +-1.272840E-02 +2.813639E-01 +-1.910394E-01 +5.682320E-02 +4.136260E-01 +2.444497E-01 +-5.123352E-02 +3.867174E-01 +4.424857E-02 +9.651204E-02 +-3.975443E-02 +1.867060E-01 +7.618837E-01 +1.756891E-01 +4.259599E-01 +1.146646E-01 +5.658031E-02 +1.366891E-01 +2.464931E-01 +2.181122E-01 +-1.593998E-01 +2.666678E-01 +-1.928096E-01 +1.216164E-01 +-7.020992E-01 +1.701086E-01 +3.914244E-01 +1.772217E-01 +3.285697E-01 +1.521826E-01 +-2.947923E-02 +8.201284E-02 +-1.346653E-01 +4.498340E-02 +2.112724E-01 +9.923303E-02 +-8.551910E-02 +8.804286E-03 +-3.631005E-01 +1.168145E-01 +-1.840770E-01 +5.714283E-02 +-2.709303E-02 +9.381338E-02 +-2.104005E-02 +4.479215E-02 +4.059493E-01 +8.277066E-02 +2.877400E-01 +8.584721E-02 +4.881128E-02 +1.864179E-01 +8.584545E-02 +4.421744E-02 +-4.392466E-01 +6.260373E-02 +-3.143214E-02 +8.184856E-02 +-5.630973E-01 +1.323469E-01 +-8.010498E-02 +1.096975E-01 +1.818829E-01 +1.717701E-02 +-1.062149E-01 +5.400365E-02 +tally 25: +3.862543E+01 +2.993190E+02 +-5.083613E-01 +2.933365E-01 +-4.356793E-01 +6.676831E-01 +-6.093148E-01 +5.685331E-01 +2.512276E-01 +1.308652E-01 +-1.075955E+00 +4.775270E-01 +3.660307E-01 +1.627691E-01 +5.402149E-01 +2.324946E-01 +-3.887573E-01 +1.028105E-01 +4.324152E-01 +1.015147E-01 +3.306993E-02 +8.425069E-02 +2.127456E-01 +5.435453E-02 +2.977294E-01 +1.088039E-01 +-1.055079E+00 +3.590635E-01 +-6.740592E-01 +2.606281E-01 +3.329512E-01 +1.587428E-01 +-1.248691E-01 +1.659045E-01 +2.306000E-01 +1.062057E-01 +9.127791E-02 +2.649459E-01 +2.629881E-01 +4.786229E-02 +2.286813E-01 +2.363629E-02 +6.338613E-01 +1.118828E-01 +7.466647E-01 +1.424535E-01 +7.955161E-02 +1.003327E-02 +1.082691E-01 +2.727882E-02 +-5.295185E-01 +1.335133E-01 +-6.321517E-01 +1.422916E-01 +1.236137E-01 +2.041422E-01 +-5.389265E-02 +1.852888E-01 +3.746082E-01 +5.580885E-02 +1.383528E-01 +2.754456E-01 +5.081204E-01 +1.886515E-01 +-4.022264E-01 +1.417397E-01 +-3.377771E-01 +6.673888E-02 +1.170109E-01 +1.783182E-02 +-2.097916E-01 +7.139323E-02 +1.438678E+01 +4.193571E+01 +-6.547124E-01 +1.780450E-01 +2.207489E-01 +2.115835E-01 +4.952323E-02 +3.039341E-01 +6.681546E-01 +1.389250E-01 +-4.078026E-02 +4.393667E-02 +-8.695509E-01 +2.850853E-01 +-1.792062E-01 +7.367253E-02 +-5.657500E-01 +2.115125E-01 +-8.525189E-02 +2.541971E-02 +5.227867E-02 +2.008468E-02 +6.825349E-02 +5.316522E-02 +3.763076E-01 +7.112554E-02 +-1.279973E-02 +1.883096E-01 +7.775189E-02 +6.874374E-02 +1.119537E-01 +8.467755E-02 +-1.600632E-01 +8.650448E-02 +6.210095E-01 +1.094309E-01 +-9.997484E-02 +3.935353E-02 +-2.300525E-01 +2.351925E-02 +2.486103E-02 +3.125565E-02 +1.289518E-02 +2.879251E-02 +-3.166559E-01 +2.931428E-02 +-1.379285E-02 +2.416257E-02 +1.220552E-02 +5.154030E-02 +-1.431676E-01 +3.434080E-02 +8.148581E-02 +4.218412E-02 +8.541678E-03 +6.396306E-02 +-7.851012E-03 +5.799658E-02 +2.435723E-01 +6.744263E-02 +-2.429877E-01 +6.966516E-02 +-1.638644E-01 +2.058798E-02 +-8.986584E-03 +1.374824E-02 +3.547454E-01 +7.765460E-02 +-1.570173E-01 +6.916960E-02 +-1.056941E-02 +7.626528E-03 +6.400634E+01 +8.298077E+02 +-3.894111E-01 +8.617494E-01 +1.796567E-01 +1.065356E+00 +-1.561037E+00 +7.701475E-01 +-2.237530E-01 +2.259442E-01 +1.109999E+00 +6.179412E-01 +1.636912E+00 +7.887441E-01 +4.661183E-01 +4.191138E-01 +-1.040546E+00 +2.971961E-01 +1.044850E-01 +1.493530E-01 +-4.991935E-01 +3.222404E-01 +-4.205099E-01 +2.734911E-01 +-7.583139E-01 +3.000853E-01 +-3.750811E-01 +1.348273E-01 +-6.355508E-01 +3.666139E-01 +5.233787E-01 +1.292414E-01 +-2.869538E-02 +9.115092E-02 +6.851052E-01 +3.061040E-01 +1.703522E-01 +7.300335E-02 +4.541075E-01 +4.438507E-01 +-2.674857E-01 +4.718588E-01 +3.022517E-02 +1.136781E-01 +5.755596E-01 +2.688162E-01 +2.698373E-01 +1.403188E-01 +8.772347E-01 +3.503562E-01 +-4.258508E-01 +1.400825E-01 +-1.384853E-01 +4.924947E-02 +-1.009402E-01 +2.039230E-01 +-1.339732E-01 +4.772083E-02 +-3.249636E-01 +4.339747E-01 +1.564400E-01 +2.703717E-01 +2.536360E-01 +8.543919E-02 +-3.622063E-01 +7.442240E-02 +-2.074953E-02 +1.355614E-01 +-3.909820E-02 +1.007999E-01 +3.162815E-01 +9.656425E-02 +2.426423E+01 +1.215124E+02 +-9.628829E-01 +3.563586E-01 +2.964625E-01 +9.739638E-02 +-3.680881E-01 +3.484018E-01 +4.339143E-01 +7.590564E-02 +4.633394E-02 +1.080030E-01 +3.091634E-01 +1.246585E-01 +4.520500E-02 +1.095704E-01 +2.479383E-01 +1.138276E-01 +6.457108E-02 +6.833667E-02 +-5.623363E-02 +1.087254E-01 +3.675294E-01 +9.602246E-02 +-1.459951E-01 +9.440544E-02 +-6.817672E-02 +4.978066E-02 +1.076782E-02 +1.697440E-01 +-1.024501E-02 +1.184830E-01 +-1.654178E-01 +1.689209E-02 +-1.006214E-01 +3.392546E-02 +5.070063E-01 +7.598100E-02 +2.251704E-01 +7.867348E-02 +-1.693789E-01 +2.069974E-01 +-2.790249E-01 +2.674643E-02 +3.888604E-01 +3.649330E-02 +7.614452E-02 +7.098023E-02 +1.236282E-02 +5.476895E-02 +-3.151637E-01 +3.543466E-02 +-6.363562E-01 +9.323507E-02 +2.808153E-01 +8.537981E-02 +2.197639E-01 +3.393653E-02 +8.660625E-02 +1.575544E-02 +3.733826E-02 +1.449783E-02 +8.800903E-04 +3.993931E-02 +3.304886E-01 +3.099095E-02 +-4.149186E-02 +5.375091E-02 +2.448819E-01 +9.225028E-02 +-1.230091E-01 +3.865008E-02 +7.600812E+00 +1.199814E+01 +-8.738539E-01 +3.078183E-01 +-2.592305E-01 +1.015952E-01 +-6.391696E-02 +6.657129E-02 +-2.857855E-01 +2.216294E-02 +-3.516811E-01 +3.429194E-02 +4.585144E-02 +6.204056E-02 +-1.599494E-01 +1.684846E-02 +-2.364219E-01 +1.550644E-02 +1.197289E-01 +8.631394E-02 +-1.364517E-01 +5.086560E-02 +-2.213374E-01 +2.779096E-02 +-7.328761E-02 +1.216230E-02 +2.476803E-01 +2.724500E-02 +-6.356296E-02 +2.513244E-02 +-3.886281E-01 +9.479377E-02 +1.006972E-01 +1.352120E-02 +6.932242E-02 +3.192705E-02 +-3.232505E-02 +5.592418E-02 +9.582599E-02 +1.504811E-02 +-2.887999E-01 +3.760482E-02 +-2.372013E-01 +1.868786E-02 +-1.655526E-01 +4.720116E-02 +8.611265E-02 +2.284310E-02 +-2.142116E-01 +2.619080E-02 +-1.811202E-01 +1.457105E-02 +1.430164E-01 +2.016598E-02 +-4.066031E-01 +7.671356E-02 +1.364946E-01 +1.385677E-02 +8.357667E-02 +1.521943E-02 +-2.235270E-02 +1.029570E-02 +-7.920760E-02 +4.227880E-02 +2.622096E-01 +2.327728E-02 +-7.787296E-03 +2.288300E-02 +-1.645219E-02 +5.394704E-02 +7.274557E-02 +1.075570E-02 +4.104875E+01 +3.455300E+02 +-9.827893E-01 +2.751051E-01 +3.227606E-01 +1.213711E-01 +-1.272840E-02 +2.813639E-01 +-1.910394E-01 +5.682320E-02 +4.136260E-01 +2.444497E-01 +-5.123352E-02 +3.867174E-01 +4.424857E-02 +9.651204E-02 +-3.975443E-02 +1.867060E-01 +7.618837E-01 +1.756891E-01 +4.259599E-01 +1.146646E-01 +5.658031E-02 +1.366891E-01 +2.464931E-01 +2.181122E-01 +-1.593998E-01 +2.666678E-01 +-1.928096E-01 +1.216164E-01 +-7.020992E-01 +1.701086E-01 +3.914244E-01 +1.772217E-01 +3.285697E-01 +1.521826E-01 +-2.947923E-02 +8.201284E-02 +-1.346653E-01 +4.498340E-02 +2.112724E-01 +9.923303E-02 +-8.551910E-02 +8.804286E-03 +-3.631005E-01 +1.168145E-01 +-1.840770E-01 +5.714283E-02 +-2.709303E-02 +9.381338E-02 +-2.104005E-02 +4.479215E-02 +4.059493E-01 +8.277066E-02 +2.877400E-01 +8.584721E-02 +4.881128E-02 +1.864179E-01 +8.584545E-02 +4.421744E-02 +-4.392466E-01 +6.260373E-02 +-3.143214E-02 +8.184856E-02 +-5.630973E-01 +1.323469E-01 +-8.010498E-02 +1.096975E-01 +1.818829E-01 +1.717701E-02 +-1.062149E-01 +5.400365E-02 +tally 26: +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.485000E+01 +4.439790E+01 +1.259515E+00 +3.360064E-01 +7.983154E-01 +1.355632E-01 +3.425460E-01 +2.971972E-02 +2.949225E-01 +3.975603E-02 +1.485000E+01 +4.439790E+01 +1.259515E+00 +3.360064E-01 +7.983154E-01 +1.355632E-01 +3.425460E-01 +2.971972E-02 +2.949225E-01 +3.975603E-02 +4.120000E+00 +3.438000E+00 +6.222571E-01 +8.335984E-02 +1.670136E-01 +1.374768E-02 +-5.819374E-02 +1.091808E-02 +-6.389550E-02 +5.688533E-03 +4.120000E+00 +3.438000E+00 +6.222571E-01 +8.335984E-02 +1.670136E-01 +1.374768E-02 +-5.819374E-02 +1.091808E-02 +-6.389550E-02 +5.688533E-03 +5.173000E+01 +5.467243E+02 +2.669403E+01 +1.451361E+02 +9.691140E+00 +1.933574E+01 +5.860769E-01 +2.122377E-01 +-1.190340E+00 +3.145785E-01 +5.173000E+01 +5.467243E+02 +2.669403E+01 +1.451361E+02 +9.691140E+00 +1.933574E+01 +5.860769E-01 +2.122377E-01 +-1.190340E+00 +3.145785E-01 +tally 27: +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.485000E+01 +4.439790E+01 +1.259515E+00 +3.360064E-01 +7.983154E-01 +1.355632E-01 +3.425460E-01 +2.971972E-02 +2.949225E-01 +3.975603E-02 +1.485000E+01 +4.439790E+01 +-8.440076E-02 +1.135203E-02 +8.198663E-02 +3.887429E-02 +-1.358080E-01 +2.890416E-02 +-3.544823E-02 +9.843339E-04 +-1.542072E-01 +8.228126E-03 +1.057111E-01 +3.758100E-03 +-1.647870E-02 +4.827841E-03 +1.378297E-01 +1.566876E-02 +4.676778E-02 +4.809366E-03 +1.966204E-02 +7.447981E-04 +1.889258E-02 +6.841953E-04 +1.337703E-02 +1.250077E-03 +-1.044684E-01 +6.969498E-03 +-1.177995E-02 +8.208715E-03 +-1.940058E-04 +5.128759E-03 +-2.165868E-02 +1.335569E-03 +-3.080886E-02 +4.544434E-04 +1.039856E-03 +1.209631E-03 +-1.317068E-02 +1.469722E-03 +-6.432758E-02 +2.106736E-03 +3.323023E-02 +4.513838E-03 +2.683700E-02 +1.146747E-03 +-3.494912E-02 +1.006153E-03 +6.289525E-02 +3.700145E-03 +1.485000E+01 +4.439790E+01 +1.259515E+00 +3.360064E-01 +7.983154E-01 +1.355632E-01 +3.425460E-01 +2.971972E-02 +2.949225E-01 +3.975603E-02 +1.485000E+01 +4.439790E+01 +-8.440076E-02 +1.135203E-02 +8.198663E-02 +3.887429E-02 +-1.358080E-01 +2.890416E-02 +-3.544823E-02 +9.843339E-04 +-1.542072E-01 +8.228126E-03 +1.057111E-01 +3.758100E-03 +-1.647870E-02 +4.827841E-03 +1.378297E-01 +1.566876E-02 +4.676778E-02 +4.809366E-03 +1.966204E-02 +7.447981E-04 +1.889258E-02 +6.841953E-04 +1.337703E-02 +1.250077E-03 +-1.044684E-01 +6.969498E-03 +-1.177995E-02 +8.208715E-03 +-1.940058E-04 +5.128759E-03 +4.120000E+00 +3.438000E+00 +6.222571E-01 +8.335984E-02 +1.670136E-01 +1.374768E-02 +-5.819374E-02 +1.091808E-02 +-6.389550E-02 +5.688533E-03 +4.120000E+00 +3.438000E+00 +-1.628271E-01 +9.225450E-03 +-6.888325E-02 +1.539168E-03 +2.676973E-02 +5.653613E-03 +-3.337963E-03 +7.947252E-04 +-4.406165E-02 +8.602797E-04 +4.627072E-02 +2.635048E-03 +7.039651E-02 +2.623481E-03 +-3.841045E-02 +3.044564E-03 +9.237978E-03 +4.282545E-04 +-5.684456E-02 +7.512518E-04 +2.650251E-04 +5.448171E-04 +4.772861E-03 +5.040314E-04 +-2.147644E-02 +7.335266E-04 +1.905098E-02 +8.260721E-04 +5.429075E-02 +2.187346E-03 +5.159732E-03 +4.908243E-04 +-7.760747E-03 +1.158921E-03 +-8.149531E-03 +1.257165E-04 +-1.494397E-02 +4.274428E-04 +2.687381E-02 +4.665908E-04 +-1.770251E-02 +5.559502E-04 +1.017742E-03 +3.718233E-04 +3.490710E-02 +3.484712E-04 +-3.765157E-03 +8.337155E-04 +4.120000E+00 +3.438000E+00 +6.222571E-01 +8.335984E-02 +1.670136E-01 +1.374768E-02 +-5.819374E-02 +1.091808E-02 +-6.389550E-02 +5.688533E-03 +4.120000E+00 +3.438000E+00 +-1.628271E-01 +9.225450E-03 +-6.888325E-02 +1.539168E-03 +2.676973E-02 +5.653613E-03 +-3.337963E-03 +7.947252E-04 +-4.406165E-02 +8.602797E-04 +4.627072E-02 +2.635048E-03 +7.039651E-02 +2.623481E-03 +-3.841045E-02 +3.044564E-03 +9.237978E-03 +4.282545E-04 +-5.684456E-02 +7.512518E-04 +2.650251E-04 +5.448171E-04 +4.772861E-03 +5.040314E-04 +-2.147644E-02 +7.335266E-04 +1.905098E-02 +8.260721E-04 +5.429075E-02 +2.187346E-03 +5.173000E+01 +5.467243E+02 +2.669403E+01 +1.451361E+02 +9.691140E+00 +1.933574E+01 +5.860769E-01 +2.122377E-01 +-1.190340E+00 +3.145785E-01 +5.173000E+01 +5.467243E+02 +-1.983402E-01 +1.915674E-01 +-1.674839E-01 +1.869769E-01 +-5.653273E-01 +1.987939E-01 +-7.760837E-02 +4.789688E-02 +2.727635E-01 +2.457144E-02 +1.857970E-02 +1.847097E-02 +-3.630622E-01 +5.790100E-02 +-4.123237E-01 +5.700176E-02 +5.742532E-02 +1.032394E-02 +-5.735109E-02 +1.231577E-02 +1.272672E-01 +1.601764E-02 +2.270866E-01 +1.322803E-02 +-5.808421E-04 +9.816465E-03 +-1.579343E-01 +1.090331E-02 +-1.216659E-01 +5.662713E-03 +1.610713E-02 +1.269120E-02 +-9.673684E-03 +4.819562E-03 +1.263075E-01 +8.599309E-03 +1.318035E-01 +1.578558E-02 +-1.204668E-01 +4.835293E-03 +9.045915E-02 +4.701121E-03 +-1.149557E-02 +1.831502E-02 +4.573371E-02 +1.969365E-03 +2.654515E-02 +5.974645E-03 +5.173000E+01 +5.467243E+02 +2.669403E+01 +1.451361E+02 +9.691140E+00 +1.933574E+01 +5.860769E-01 +2.122377E-01 +-1.190340E+00 +3.145785E-01 +5.173000E+01 +5.467243E+02 +-1.983402E-01 +1.915674E-01 +-1.674839E-01 +1.869769E-01 +-5.653273E-01 +1.987939E-01 +-7.760837E-02 +4.789688E-02 +2.727635E-01 +2.457144E-02 +1.857970E-02 +1.847097E-02 +-3.630622E-01 +5.790100E-02 +-4.123237E-01 +5.700176E-02 +5.742532E-02 +1.032394E-02 +-5.735109E-02 +1.231577E-02 +1.272672E-01 +1.601764E-02 +2.270866E-01 +1.322803E-02 +-5.808421E-04 +9.816465E-03 +-1.579343E-01 +1.090331E-02 +-1.216659E-01 +5.662713E-03 +tally 28: +0.000000E+00 +0.000000E+00 +1.767552E+01 +6.295417E+01 +3.863588E+00 +3.013300E+00 +5.356594E+01 +5.839391E+02 +tally 29: +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.780506E-01 +1.942072E-01 +-4.170415E-02 +7.581469E-04 +-2.419728E-03 +6.296241E-04 +-8.163997E-03 +4.785197E-04 +3.971909E-03 +1.363304E-04 +1.585497E-02 +1.295251E-04 +-7.029875E-02 +1.208194E-03 +-1.524070E-02 +2.828843E-04 +-2.141105E-02 +2.953327E-04 +-2.147623E-02 +2.390414E-04 +5.592040E-04 +1.720605E-04 +3.022066E-03 +1.843720E-04 +1.489821E-02 +9.193290E-05 +-1.354668E-02 +2.551940E-04 +-5.692690E-04 +3.013453E-04 +2.324582E-02 +2.170615E-04 +1.883012E-02 +1.045949E-04 +-3.997107E-03 +1.674058E-04 +1.616443E-02 +2.046286E-04 +1.625747E-02 +1.851351E-04 +1.120209E-02 +2.028649E-04 +4.240284E-03 +4.019011E-05 +1.535379E-02 +9.872559E-05 +-8.973926E-03 +1.448680E-04 +-3.933227E-03 +4.305328E-04 +1.767552E+01 +6.295417E+01 +-1.458308E-01 +8.239551E-03 +1.976485E-01 +7.360520E-02 +-2.647182E-01 +5.347815E-02 +1.828025E-01 +1.840743E-02 +1.865994E-01 +2.843407E-02 +-6.438995E-02 +8.898045E-03 +-1.416445E-01 +3.839856E-02 +-3.298894E-01 +2.672141E-02 +-1.462639E-01 +1.225250E-02 +-6.410138E-02 +3.766615E-02 +4.701705E-02 +1.968428E-03 +2.953056E-02 +2.358647E-02 +-1.717672E-01 +5.877351E-02 +1.927497E-02 +1.358953E-02 +1.708870E-01 +1.502033E-02 +4.453803E-02 +1.622532E-02 +-2.076143E-02 +1.850686E-03 +1.111325E-01 +8.415150E-03 +1.249594E-01 +7.491280E-03 +1.381757E-02 +1.537264E-02 +-7.286234E-03 +9.057874E-03 +3.162973E-01 +3.303388E-02 +1.012773E-01 +8.345375E-03 +-5.238963E-02 +3.920421E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.863588E+00 +3.013300E+00 +5.075749E-02 +1.018210E-03 +3.445344E-02 +5.778215E-03 +-6.239642E-02 +4.107408E-03 +-1.475495E-02 +7.971898E-04 +5.809323E-02 +3.039895E-03 +-2.510339E-02 +3.529134E-04 +-9.731680E-03 +1.221628E-03 +-5.815144E-02 +1.403261E-03 +-4.936694E-02 +6.481626E-04 +5.141985E-03 +1.343973E-03 +1.515105E-02 +3.044735E-04 +4.474521E-03 +1.155268E-03 +-6.855877E-02 +4.048417E-03 +-2.701967E-05 +1.279041E-03 +2.197636E-02 +2.843662E-04 +-1.780381E-02 +8.441574E-04 +2.916634E-02 +2.530602E-03 +2.289834E-02 +2.201375E-03 +3.283424E-02 +7.615219E-04 +9.623726E-03 +7.614092E-04 +2.808239E-02 +1.500381E-03 +4.835419E-02 +6.933678E-04 +-2.636221E-02 +2.230834E-04 +-4.957463E-02 +1.939266E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.356594E+01 +5.839391E+02 +-1.198882E+00 +3.391100E-01 +3.952398E-01 +5.729760E-01 +-1.045726E+00 +4.419194E-01 +2.683170E-01 +1.872580E-01 +5.059349E-01 +2.592209E-01 +4.561651E-01 +1.253696E-01 +-4.273775E-01 +3.509266E-01 +-6.300496E-01 +2.102051E-01 +-3.094705E-01 +1.410278E-01 +-6.840225E-01 +1.971765E-01 +4.123355E-02 +3.962538E-02 +-1.554557E-01 +2.784362E-02 +-4.698631E-01 +1.867413E-01 +-7.016026E-02 +3.059344E-02 +2.922284E-01 +8.680517E-02 +-1.252431E-01 +3.180591E-02 +1.825937E-01 +8.626653E-02 +1.637960E-01 +1.329538E-01 +6.662867E-01 +1.497985E-01 +4.662585E-01 +7.552145E-02 +1.198254E-03 +2.020899E-01 +5.281410E-01 +9.615758E-02 +6.396211E-02 +1.806992E-01 +-1.898620E-01 +1.113751E-01 +tally 30: +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.300000E-01 +1.839000E-01 +4.056201E-03 +8.670884E-04 +-2.262959E-02 +2.263780E-03 +-4.568371E-02 +4.078305E-03 +6.023055E-02 +1.099458E-03 +-2.468374E-02 +3.403931E-03 +-8.676202E-02 +2.444658E-03 +2.075016E-02 +5.432442E-03 +1.101095E-02 +3.129947E-04 +8.689134E-03 +2.422445E-03 +-1.097503E-02 +4.670673E-04 +4.979355E-02 +1.791811E-03 +1.769845E-02 +6.074665E-04 +-1.473469E-02 +1.257671E-03 +-1.133757E-02 +1.555143E-03 +1.730195E-02 +1.841949E-03 +-1.191492E-02 +1.859105E-03 +9.038577E-03 +4.401577E-04 +1.770047E-02 +4.158291E-04 +1.492809E-02 +5.488168E-04 +7.970152E-02 +1.597910E-03 +3.741348E-02 +5.704935E-04 +2.078478E-02 +5.379832E-04 +-1.355930E-02 +6.747758E-04 +3.416200E-02 +8.262470E-04 +1.739000E+01 +6.083290E+01 +-2.434171E-01 +3.049063E-02 +-1.278707E-01 +9.585267E-02 +-2.597328E-01 +8.692607E-02 +2.496700E-01 +3.750933E-02 +-1.309937E-01 +4.217907E-02 +-1.863241E-01 +1.738581E-02 +1.292679E-01 +1.799004E-02 +-3.543191E-01 +3.682107E-02 +1.904413E-01 +1.455250E-02 +-7.093238E-02 +1.473997E-02 +1.920412E-01 +1.308864E-02 +1.566093E-01 +1.913492E-02 +-2.499642E-01 +3.036874E-02 +-2.323022E-01 +3.794368E-02 +6.361729E-02 +3.266166E-02 +4.688479E-02 +2.806712E-02 +9.796563E-02 +1.419748E-02 +1.000847E-02 +3.233262E-02 +7.570231E-02 +4.626536E-03 +1.489091E-01 +1.159345E-02 +2.236285E-01 +1.480084E-02 +2.461305E-01 +1.643844E-02 +1.773523E-02 +1.626036E-03 +6.570774E-02 +1.069893E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.160000E+00 +3.501000E+00 +-9.464171E-02 +8.682833E-03 +8.467800E-02 +1.402624E-02 +1.283471E-02 +2.630439E-02 +1.859869E-01 +1.189528E-02 +1.910311E-02 +2.907370E-03 +-2.542253E-01 +2.143851E-02 +-4.021473E-02 +5.812599E-03 +-1.242140E-01 +1.017873E-02 +-2.934198E-02 +2.409920E-03 +5.719767E-02 +2.211520E-03 +3.023903E-02 +2.870625E-03 +1.092479E-01 +6.089989E-03 +1.604743E-02 +1.110224E-02 +3.811062E-03 +5.234112E-03 +5.446762E-02 +5.323411E-03 +-3.868978E-02 +4.949255E-03 +1.384260E-01 +4.903532E-03 +-3.761889E-02 +2.524889E-03 +-6.079772E-02 +2.328339E-03 +1.956623E-03 +4.096814E-03 +1.716402E-03 +2.022751E-03 +-1.108600E-01 +3.227014E-03 +-2.447622E-03 +4.075421E-03 +1.582493E-02 +4.847858E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.213000E+01 +5.552351E+02 +-6.019876E-01 +2.938936E-01 +2.126970E-01 +3.363271E-01 +-6.928646E-01 +3.077152E-01 +-2.976474E-01 +5.830705E-02 +7.804821E-01 +3.967156E-01 +5.737502E-01 +1.090147E-01 +-2.867929E-01 +1.312720E-01 +-4.735578E-01 +6.714577E-02 +-6.340442E-02 +4.240623E-02 +-1.594570E-01 +1.167021E-01 +-5.403124E-02 +6.452745E-02 +-2.670969E-01 +5.822561E-02 +-3.033558E-01 +4.890487E-02 +-3.515557E-01 +5.069681E-02 +2.257462E-01 +4.682933E-02 +-1.449924E-02 +1.625521E-02 +2.809498E-01 +6.883451E-02 +1.904808E-01 +1.004755E-01 +2.570005E-01 +4.301248E-02 +9.493600E-02 +7.708499E-02 +-2.804222E-01 +4.455703E-02 +3.199914E-01 +7.435651E-02 +-2.818069E-04 +7.231318E-02 +3.689494E-01 +1.349712E-01 +tally 31: +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.453374E-01 +1.815824E-01 +-4.552571E-02 +8.689847E-04 +4.192526E-03 +6.095248E-04 +-4.085060E-03 +3.488081E-04 +3.074303E-02 +3.709785E-04 +1.949067E-02 +1.995057E-04 +-7.372260E-02 +1.709765E-03 +-5.140901E-03 +6.268082E-05 +-2.589014E-02 +1.616678E-04 +1.683116E-02 +2.122512E-04 +-1.074659E-02 +1.087471E-04 +3.762844E-03 +3.439135E-05 +1.365793E-02 +5.255161E-05 +5.869374E-05 +4.060049E-04 +-7.715004E-03 +3.629588E-04 +8.240120E-03 +5.192031E-04 +1.662861E-02 +5.038262E-04 +-2.845811E-03 +2.843348E-04 +1.826833E-03 +1.104947E-05 +-5.596885E-04 +1.922661E-05 +1.398723E-02 +1.025178E-04 +1.733988E-02 +1.184228E-04 +1.250057E-02 +1.447801E-04 +-5.450018E-03 +3.725923E-05 +2.390947E-02 +6.837656E-04 +1.739000E+01 +6.083290E+01 +-2.434171E-01 +3.049063E-02 +-1.278707E-01 +9.585267E-02 +-2.597328E-01 +8.692607E-02 +2.496700E-01 +3.750933E-02 +-1.309937E-01 +4.217907E-02 +-1.863241E-01 +1.738581E-02 +1.292679E-01 +1.799004E-02 +-3.543191E-01 +3.682107E-02 +1.904413E-01 +1.455250E-02 +-7.093238E-02 +1.473997E-02 +1.920412E-01 +1.308864E-02 +1.566093E-01 +1.913492E-02 +-2.499642E-01 +3.036874E-02 +-2.323022E-01 +3.794368E-02 +6.361729E-02 +3.266166E-02 +4.688479E-02 +2.806712E-02 +9.796563E-02 +1.419748E-02 +1.000847E-02 +3.233262E-02 +7.570231E-02 +4.626536E-03 +1.489091E-01 +1.159345E-02 +2.236285E-01 +1.480084E-02 +2.461305E-01 +1.643844E-02 +1.773523E-02 +1.626036E-03 +6.570774E-02 +1.069893E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.160000E+00 +3.501000E+00 +-9.464171E-02 +8.682833E-03 +8.467800E-02 +1.402624E-02 +1.283471E-02 +2.630439E-02 +1.859869E-01 +1.189528E-02 +1.910311E-02 +2.907370E-03 +-2.542253E-01 +2.143851E-02 +-4.021473E-02 +5.812599E-03 +-1.242140E-01 +1.017873E-02 +-2.934198E-02 +2.409920E-03 +5.719767E-02 +2.211520E-03 +3.023903E-02 +2.870625E-03 +1.092479E-01 +6.089989E-03 +1.604743E-02 +1.110224E-02 +3.811062E-03 +5.234112E-03 +5.446762E-02 +5.323411E-03 +-3.868978E-02 +4.949255E-03 +1.384260E-01 +4.903532E-03 +-3.761889E-02 +2.524889E-03 +-6.079772E-02 +2.328339E-03 +1.956623E-03 +4.096814E-03 +1.716402E-03 +2.022751E-03 +-1.108600E-01 +3.227014E-03 +-2.447622E-03 +4.075421E-03 +1.582493E-02 +4.847858E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.213000E+01 +5.552351E+02 +-6.019876E-01 +2.938936E-01 +2.126970E-01 +3.363271E-01 +-6.928646E-01 +3.077152E-01 +-2.976474E-01 +5.830705E-02 +7.804821E-01 +3.967156E-01 +5.737502E-01 +1.090147E-01 +-2.867929E-01 +1.312720E-01 +-4.735578E-01 +6.714577E-02 +-6.340442E-02 +4.240623E-02 +-1.594570E-01 +1.167021E-01 +-5.403124E-02 +6.452745E-02 +-2.670969E-01 +5.822561E-02 +-3.033558E-01 +4.890487E-02 +-3.515557E-01 +5.069681E-02 +2.257462E-01 +4.682933E-02 +-1.449924E-02 +1.625521E-02 +2.809498E-01 +6.883451E-02 +1.904808E-01 +1.004755E-01 +2.570005E-01 +4.301248E-02 +9.493600E-02 +7.708499E-02 +-2.804222E-01 +4.455703E-02 +3.199914E-01 +7.435651E-02 +-2.818069E-04 +7.231318E-02 +3.689494E-01 +1.349712E-01 diff --git a/tests/test_tallies/test_tallies.py b/tests/test_tallies/test_tallies.py new file mode 100644 index 0000000000..b6cdebe2d3 --- /dev/null +++ b/tests/test_tallies/test_tallies.py @@ -0,0 +1,209 @@ +#!/usr/bin/env python + +import os +import sys +sys.path.insert(0, os.pardir) +from testing_harness import PyAPITestHarness +from openmc import Filter, Mesh, Tally, TalliesFile + +class TalliesTestHarness(PyAPITestHarness): + def _build_inputs(self): + azimuthal_bins = (-3.1416, -1.8850, -0.6283, 0.6283, 1.8850, 3.1416) + azimuthal_filter1 = Filter(type='azimuthal', bins=azimuthal_bins) + azimuthal_tally1 = Tally() + azimuthal_tally1.add_filter(azimuthal_filter1) + azimuthal_tally1.add_score('flux') + azimuthal_tally1.estimator = 'tracklength' + + azimuthal_tally2 = Tally() + azimuthal_tally2.add_filter(azimuthal_filter1) + azimuthal_tally2.add_score('flux') + azimuthal_tally2.estimator = 'analog' + + azimuthal_filter2 = Filter(type='azimuthal', bins=(5,)) + azimuthal_tally3 = Tally() + azimuthal_tally3.add_filter(azimuthal_filter2) + azimuthal_tally3.add_score('flux') + azimuthal_tally3.estimator = 'tracklength' + + mesh_2x2 = Mesh(mesh_id=1) + mesh_2x2.lower_left = [-182.07, -182.07] + mesh_2x2.upper_right = [182.07, 182.07] + mesh_2x2.dimension = [2, 2] + mesh_filter = Filter(type='mesh', bins=(1,)) + azimuthal_tally4 = Tally() + azimuthal_tally4.add_filter(azimuthal_filter2) + azimuthal_tally4.add_filter(mesh_filter) + azimuthal_tally4.add_score('flux') + azimuthal_tally4.estimator = 'tracklength' + + cellborn_tally = Tally() + cellborn_tally.add_filter(Filter(type='cellborn', bins=(10, 21, 22, 23))) + cellborn_tally.add_score('total') + + dg_tally = Tally() + dg_tally.add_filter(Filter(type='delayedgroup', bins=(1, 2, 3, 4, 5, 6))) + dg_tally.add_score('delayed-nu-fission') + + four_groups = (0.0, 0.253e-6, 1.0e-3, 1.0, 20.0) + energy_filter = Filter(type='energy', bins=four_groups) + energy_tally = Tally() + energy_tally.add_filter(energy_filter) + energy_tally.add_score('total') + + energyout_filter = Filter(type='energyout', bins=four_groups) + energyout_tally = Tally() + energyout_tally.add_filter(energyout_filter) + energyout_tally.add_score('scatter') + + transfer_tally = Tally() + transfer_tally.add_filter(energy_filter) + transfer_tally.add_filter(energyout_filter) + transfer_tally.add_score('scatter') + transfer_tally.add_score('nu-fission') + + material_tally = Tally() + material_tally.add_filter(Filter(type='material', bins=(1, 2, 3, 4))) + material_tally.add_score('total') + + mu_tally1 = Tally() + mu_tally1.add_filter(Filter(type='mu', bins=(-1.0, -0.5, 0.0, 0.5, 1.0))) + mu_tally1.add_score('scatter') + mu_tally1.add_score('nu-scatter') + + mu_filter = Filter(type='mu', bins=(5,)) + mu_tally2 = Tally() + mu_tally2.add_filter(mu_filter) + mu_tally2.add_score('scatter') + mu_tally2.add_score('nu-scatter') + + mu_tally3 = Tally() + mu_tally3.add_filter(mu_filter) + mu_tally3.add_filter(mesh_filter) + mu_tally3.add_score('scatter') + mu_tally3.add_score('nu-scatter') + + polar_bins = (0.0, 0.6283, 1.2566, 1.8850, 2.5132, 3.1416) + polar_filter = Filter(type='polar', bins=polar_bins) + polar_tally1 = Tally() + polar_tally1.add_filter(polar_filter) + polar_tally1.add_score('flux') + polar_tally1.estimator = 'tracklength' + + polar_tally2 = Tally() + polar_tally2.add_filter(polar_filter) + polar_tally2.add_score('flux') + polar_tally2.estimator = 'analog' + + polar_filter2 = Filter(type='polar', bins=(5,)) + polar_tally3 = Tally() + polar_tally3.add_filter(polar_filter2) + polar_tally3.add_score('flux') + polar_tally3.estimator = 'tracklength' + + polar_tally4 = Tally() + polar_tally4.add_filter(polar_filter2) + polar_tally4.add_filter(mesh_filter) + polar_tally4.add_score('flux') + polar_tally4.estimator = 'tracklength' + + universe_tally = Tally() + universe_tally.add_filter(Filter(type='universe', bins=(1, 2, 3, 4))) + universe_tally.add_score('total') + + cell_filter = Filter(type='cell', bins=(10, 21, 22, 23)) + score_tallies = [Tally(), Tally(), Tally()] + for t in score_tallies: + t.add_filter(cell_filter) + t.add_score('absorption') + t.add_score('delayed-nu-fission') + t.add_score('events') + t.add_score('fission') + t.add_score('inverse-velocity') + t.add_score('kappa-fission') + t.add_score('(n,2n)') + t.add_score('(n,n1)') + t.add_score('(n,gamma)') + t.add_score('nu-fission') + t.add_score('scatter') + t.add_score('total') + score_tallies[0].estimator = 'tracklength' + score_tallies[1].estimator = 'analog' + score_tallies[2].estimator = 'collision' + + cell_filter2 = Filter(type='cell', bins=(21, 22, 23, 27, 28, 29)) + flux_tallies = [Tally() for i in range(4)] + [t.add_filter(cell_filter2) for t in flux_tallies] + flux_tallies[0].add_score('flux') + [t.add_score('flux-y5') for t in flux_tallies[1:]] + flux_tallies[1].estimator = 'tracklength' + flux_tallies[2].estimator = 'analog' + flux_tallies[3].estimator = 'collision' + + scatter_tally1 = Tally() + scatter_tally1.add_filter(cell_filter) + scatter_tally1.add_score('scatter') + scatter_tally1.add_score('scatter-1') + scatter_tally1.add_score('scatter-2') + scatter_tally1.add_score('scatter-3') + scatter_tally1.add_score('scatter-4') + scatter_tally1.add_score('nu-scatter') + scatter_tally1.add_score('nu-scatter-1') + scatter_tally1.add_score('nu-scatter-2') + scatter_tally1.add_score('nu-scatter-3') + scatter_tally1.add_score('nu-scatter-4') + + scatter_tally2 = Tally() + scatter_tally2.add_filter(cell_filter) + scatter_tally2.add_score('scatter-p4') + scatter_tally2.add_score('scatter-y4') + scatter_tally2.add_score('nu-scatter-p4') + scatter_tally2.add_score('nu-scatter-y3') + + total_tallies = [Tally() for i in range(4)] + [t.add_filter(cell_filter) for t in total_tallies] + total_tallies[0].add_score('total') + [t.add_score('total-y4') for t in total_tallies[1:]] + [t.add_nuclide('U-235') for t in total_tallies[1:]] + [t.add_nuclide('total') for t in total_tallies[1:]] + total_tallies[1].estimator = 'tracklength' + total_tallies[2].estimator = 'analog' + total_tallies[3].estimator = 'collision' + + self._input_set.tallies = TalliesFile() + self._input_set.tallies.add_tally(azimuthal_tally1) + self._input_set.tallies.add_tally(azimuthal_tally2) + self._input_set.tallies.add_tally(azimuthal_tally3) + self._input_set.tallies.add_tally(azimuthal_tally4) + self._input_set.tallies.add_tally(cellborn_tally) + self._input_set.tallies.add_tally(dg_tally) + self._input_set.tallies.add_tally(energy_tally) + self._input_set.tallies.add_tally(energyout_tally) + self._input_set.tallies.add_tally(transfer_tally) + self._input_set.tallies.add_tally(material_tally) + self._input_set.tallies.add_tally(mu_tally1) + self._input_set.tallies.add_tally(mu_tally2) + self._input_set.tallies.add_tally(mu_tally3) + self._input_set.tallies.add_tally(polar_tally1) + self._input_set.tallies.add_tally(polar_tally2) + self._input_set.tallies.add_tally(polar_tally3) + self._input_set.tallies.add_tally(polar_tally4) + self._input_set.tallies.add_tally(universe_tally) + [self._input_set.tallies.add_tally(t) for t in score_tallies] + [self._input_set.tallies.add_tally(t) for t in flux_tallies] + self._input_set.tallies.add_tally(scatter_tally1) + self._input_set.tallies.add_tally(scatter_tally2) + [self._input_set.tallies.add_tally(t) for t in total_tallies] + self._input_set.tallies.add_mesh(mesh_2x2) + + super(TalliesTestHarness, self)._build_inputs() + + def _cleanup(self): + super(TalliesTestHarness, self)._cleanup() + f = os.path.join(os.getcwd(), 'tallies.xml') + if os.path.exists(f): os.remove(f) + + +if __name__ == '__main__': + harness = TalliesTestHarness('statepoint.10.*', True) + harness.main() From 9be871419940b250fb290dc61bc3a405a5876132 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 19 Jan 2016 11:07:27 -0600 Subject: [PATCH 200/650] Replace four density tests with a single one --- tests/test_density/geometry.xml | 14 ++++++++++ tests/test_density/materials.xml | 26 +++++++++++++++++++ tests/test_density/results_true.dat | 2 ++ .../settings.xml | 0 .../test_density.py} | 0 tests/test_density_atombcm/geometry.xml | 8 ------ tests/test_density_atombcm/materials.xml | 9 ------- tests/test_density_atombcm/results_true.dat | 2 -- tests/test_density_atomcm3/geometry.xml | 8 ------ tests/test_density_atomcm3/materials.xml | 9 ------- tests/test_density_atomcm3/results_true.dat | 2 -- tests/test_density_atomcm3/settings.xml | 16 ------------ .../test_density_atomcm3.py | 11 -------- tests/test_density_kgm3/geometry.xml | 8 ------ tests/test_density_kgm3/materials.xml | 9 ------- tests/test_density_kgm3/results_true.dat | 2 -- tests/test_density_kgm3/settings.xml | 16 ------------ tests/test_density_kgm3/test_density_kgm3.py | 11 -------- tests/test_density_sum/geometry.xml | 8 ------ tests/test_density_sum/materials.xml | 11 -------- tests/test_density_sum/results_true.dat | 2 -- tests/test_density_sum/settings.xml | 16 ------------ tests/test_density_sum/test_density_sum.py | 11 -------- 23 files changed, 42 insertions(+), 159 deletions(-) create mode 100644 tests/test_density/geometry.xml create mode 100644 tests/test_density/materials.xml create mode 100644 tests/test_density/results_true.dat rename tests/{test_density_atombcm => test_density}/settings.xml (100%) rename tests/{test_density_atombcm/test_density_atombcm.py => test_density/test_density.py} (100%) delete mode 100644 tests/test_density_atombcm/geometry.xml delete mode 100644 tests/test_density_atombcm/materials.xml delete mode 100644 tests/test_density_atombcm/results_true.dat delete mode 100644 tests/test_density_atomcm3/geometry.xml delete mode 100644 tests/test_density_atomcm3/materials.xml delete mode 100644 tests/test_density_atomcm3/results_true.dat delete mode 100644 tests/test_density_atomcm3/settings.xml delete mode 100644 tests/test_density_atomcm3/test_density_atomcm3.py delete mode 100644 tests/test_density_kgm3/geometry.xml delete mode 100644 tests/test_density_kgm3/materials.xml delete mode 100644 tests/test_density_kgm3/results_true.dat delete mode 100644 tests/test_density_kgm3/settings.xml delete mode 100644 tests/test_density_kgm3/test_density_kgm3.py delete mode 100644 tests/test_density_sum/geometry.xml delete mode 100644 tests/test_density_sum/materials.xml delete mode 100644 tests/test_density_sum/results_true.dat delete mode 100644 tests/test_density_sum/settings.xml delete mode 100644 tests/test_density_sum/test_density_sum.py diff --git a/tests/test_density/geometry.xml b/tests/test_density/geometry.xml new file mode 100644 index 0000000000..c305754da9 --- /dev/null +++ b/tests/test_density/geometry.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/tests/test_density/materials.xml b/tests/test_density/materials.xml new file mode 100644 index 0000000000..36947d066d --- /dev/null +++ b/tests/test_density/materials.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/test_density/results_true.dat b/tests/test_density/results_true.dat new file mode 100644 index 0000000000..1dbadc039d --- /dev/null +++ b/tests/test_density/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +1.088237E+00 1.999252E-02 diff --git a/tests/test_density_atombcm/settings.xml b/tests/test_density/settings.xml similarity index 100% rename from tests/test_density_atombcm/settings.xml rename to tests/test_density/settings.xml diff --git a/tests/test_density_atombcm/test_density_atombcm.py b/tests/test_density/test_density.py similarity index 100% rename from tests/test_density_atombcm/test_density_atombcm.py rename to tests/test_density/test_density.py diff --git a/tests/test_density_atombcm/geometry.xml b/tests/test_density_atombcm/geometry.xml deleted file mode 100644 index bc56030e18..0000000000 --- a/tests/test_density_atombcm/geometry.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/tests/test_density_atombcm/materials.xml b/tests/test_density_atombcm/materials.xml deleted file mode 100644 index 10d0519685..0000000000 --- a/tests/test_density_atombcm/materials.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/tests/test_density_atombcm/results_true.dat b/tests/test_density_atombcm/results_true.dat deleted file mode 100644 index 2956b53888..0000000000 --- a/tests/test_density_atombcm/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -1.752274E+00 4.032481E-02 diff --git a/tests/test_density_atomcm3/geometry.xml b/tests/test_density_atomcm3/geometry.xml deleted file mode 100644 index bc56030e18..0000000000 --- a/tests/test_density_atomcm3/geometry.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/tests/test_density_atomcm3/materials.xml b/tests/test_density_atomcm3/materials.xml deleted file mode 100644 index 57d177afc7..0000000000 --- a/tests/test_density_atomcm3/materials.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/tests/test_density_atomcm3/results_true.dat b/tests/test_density_atomcm3/results_true.dat deleted file mode 100644 index 0bd16fc4de..0000000000 --- a/tests/test_density_atomcm3/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -1.092376E+00 1.759788E-02 diff --git a/tests/test_density_atomcm3/settings.xml b/tests/test_density_atomcm3/settings.xml deleted file mode 100644 index a6fd5da19e..0000000000 --- a/tests/test_density_atomcm3/settings.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - 10 - 5 - 1000 - - - - - -4 -4 -4 4 4 4 - - - - diff --git a/tests/test_density_atomcm3/test_density_atomcm3.py b/tests/test_density_atomcm3/test_density_atomcm3.py deleted file mode 100644 index 2a595f3e66..0000000000 --- a/tests/test_density_atomcm3/test_density_atomcm3.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness - - -if __name__ == '__main__': - harness = TestHarness('statepoint.10.*') - harness.main() diff --git a/tests/test_density_kgm3/geometry.xml b/tests/test_density_kgm3/geometry.xml deleted file mode 100644 index bc56030e18..0000000000 --- a/tests/test_density_kgm3/geometry.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/tests/test_density_kgm3/materials.xml b/tests/test_density_kgm3/materials.xml deleted file mode 100644 index 2f74574e75..0000000000 --- a/tests/test_density_kgm3/materials.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/tests/test_density_kgm3/results_true.dat b/tests/test_density_kgm3/results_true.dat deleted file mode 100644 index 6b008101fb..0000000000 --- a/tests/test_density_kgm3/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -7.994522E-01 1.065745E-02 diff --git a/tests/test_density_kgm3/settings.xml b/tests/test_density_kgm3/settings.xml deleted file mode 100644 index a6fd5da19e..0000000000 --- a/tests/test_density_kgm3/settings.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - 10 - 5 - 1000 - - - - - -4 -4 -4 4 4 4 - - - - diff --git a/tests/test_density_kgm3/test_density_kgm3.py b/tests/test_density_kgm3/test_density_kgm3.py deleted file mode 100644 index 2a595f3e66..0000000000 --- a/tests/test_density_kgm3/test_density_kgm3.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness - - -if __name__ == '__main__': - harness = TestHarness('statepoint.10.*') - harness.main() diff --git a/tests/test_density_sum/geometry.xml b/tests/test_density_sum/geometry.xml deleted file mode 100644 index bc56030e18..0000000000 --- a/tests/test_density_sum/geometry.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/tests/test_density_sum/materials.xml b/tests/test_density_sum/materials.xml deleted file mode 100644 index 713661196f..0000000000 --- a/tests/test_density_sum/materials.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/tests/test_density_sum/results_true.dat b/tests/test_density_sum/results_true.dat deleted file mode 100644 index 9b16f2d988..0000000000 --- a/tests/test_density_sum/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -3.231215E-01 6.421320E-03 diff --git a/tests/test_density_sum/settings.xml b/tests/test_density_sum/settings.xml deleted file mode 100644 index a6fd5da19e..0000000000 --- a/tests/test_density_sum/settings.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - 10 - 5 - 1000 - - - - - -4 -4 -4 4 4 4 - - - - diff --git a/tests/test_density_sum/test_density_sum.py b/tests/test_density_sum/test_density_sum.py deleted file mode 100644 index 2a595f3e66..0000000000 --- a/tests/test_density_sum/test_density_sum.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness - - -if __name__ == '__main__': - harness = TestHarness('statepoint.10.*') - harness.main() From cc261575447731897d9b817d3e2d6185e0739f6a Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 19 Jan 2016 11:21:24 -0600 Subject: [PATCH 201/650] Replace four plot tests with one --- .../geometry.xml | 0 .../materials.xml | 0 tests/{test_plot_mask => test_plot}/plots.xml | 7 +++--- tests/test_plot/results_true.dat | 1 + .../settings.xml | 6 +++++ .../test_plot.py} | 0 tests/test_plot_background/geometry.xml | 8 ------- tests/test_plot_background/materials.xml | 9 -------- tests/test_plot_background/plots.xml | 11 ---------- tests/test_plot_background/results_true.dat | 1 - .../test_plot_background.py | 11 ---------- tests/test_plot_basis/plots.xml | 22 ------------------- tests/test_plot_basis/results_true.dat | 1 - tests/test_plot_basis/settings.xml | 16 -------------- tests/test_plot_colspec/geometry.xml | 8 ------- tests/test_plot_colspec/materials.xml | 9 -------- tests/test_plot_colspec/plots.xml | 11 ---------- tests/test_plot_colspec/results_true.dat | 1 - tests/test_plot_colspec/settings.xml | 16 -------------- tests/test_plot_colspec/test_plot_colspec.py | 11 ---------- tests/test_plot_mask/geometry.xml | 13 ----------- tests/test_plot_mask/materials.xml | 19 ---------------- tests/test_plot_mask/results_true.dat | 1 - tests/test_plot_mask/settings.xml | 16 -------------- tests/test_plot_mask/test_plot_mask.py | 11 ---------- 25 files changed, 11 insertions(+), 198 deletions(-) rename tests/{test_plot_basis => test_plot}/geometry.xml (100%) rename tests/{test_plot_basis => test_plot}/materials.xml (100%) rename tests/{test_plot_mask => test_plot}/plots.xml (71%) create mode 100644 tests/test_plot/results_true.dat rename tests/{test_plot_background => test_plot}/settings.xml (66%) rename tests/{test_plot_basis/test_plot_basis.py => test_plot/test_plot.py} (100%) delete mode 100644 tests/test_plot_background/geometry.xml delete mode 100644 tests/test_plot_background/materials.xml delete mode 100644 tests/test_plot_background/plots.xml delete mode 100644 tests/test_plot_background/results_true.dat delete mode 100644 tests/test_plot_background/test_plot_background.py delete mode 100644 tests/test_plot_basis/plots.xml delete mode 100644 tests/test_plot_basis/results_true.dat delete mode 100644 tests/test_plot_basis/settings.xml delete mode 100644 tests/test_plot_colspec/geometry.xml delete mode 100644 tests/test_plot_colspec/materials.xml delete mode 100644 tests/test_plot_colspec/plots.xml delete mode 100644 tests/test_plot_colspec/results_true.dat delete mode 100644 tests/test_plot_colspec/settings.xml delete mode 100644 tests/test_plot_colspec/test_plot_colspec.py delete mode 100644 tests/test_plot_mask/geometry.xml delete mode 100644 tests/test_plot_mask/materials.xml delete mode 100644 tests/test_plot_mask/results_true.dat delete mode 100644 tests/test_plot_mask/settings.xml delete mode 100644 tests/test_plot_mask/test_plot_mask.py diff --git a/tests/test_plot_basis/geometry.xml b/tests/test_plot/geometry.xml similarity index 100% rename from tests/test_plot_basis/geometry.xml rename to tests/test_plot/geometry.xml diff --git a/tests/test_plot_basis/materials.xml b/tests/test_plot/materials.xml similarity index 100% rename from tests/test_plot_basis/materials.xml rename to tests/test_plot/materials.xml diff --git a/tests/test_plot_mask/plots.xml b/tests/test_plot/plots.xml similarity index 71% rename from tests/test_plot_mask/plots.xml rename to tests/test_plot/plots.xml index 72b40f72cf..e8848f6172 100644 --- a/tests/test_plot_mask/plots.xml +++ b/tests/test_plot/plots.xml @@ -5,7 +5,8 @@ 0. 0. 0. 25 25 200 200 - + + @@ -15,11 +16,11 @@ - + 0. 0. 0. 25 25 200 200 - + 0 0 0 diff --git a/tests/test_plot/results_true.dat b/tests/test_plot/results_true.dat new file mode 100644 index 0000000000..910e41a060 --- /dev/null +++ b/tests/test_plot/results_true.dat @@ -0,0 +1 @@ +f76183da6a581c17f9a1572e1f1573d784e3f2e3efa3e7a3bd8786991df7a086e0b5f7f1c6b00343fa61b601ec70ad619b5ff5d8120af32559b882ca57be6768 \ No newline at end of file diff --git a/tests/test_plot_background/settings.xml b/tests/test_plot/settings.xml similarity index 66% rename from tests/test_plot_background/settings.xml rename to tests/test_plot/settings.xml index a6fd5da19e..03985b3ae9 100644 --- a/tests/test_plot_background/settings.xml +++ b/tests/test_plot/settings.xml @@ -13,4 +13,10 @@ + + 5 4 3 + -10 -10 -10 + 10 10 10 + + diff --git a/tests/test_plot_basis/test_plot_basis.py b/tests/test_plot/test_plot.py similarity index 100% rename from tests/test_plot_basis/test_plot_basis.py rename to tests/test_plot/test_plot.py diff --git a/tests/test_plot_background/geometry.xml b/tests/test_plot_background/geometry.xml deleted file mode 100644 index bc56030e18..0000000000 --- a/tests/test_plot_background/geometry.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/tests/test_plot_background/materials.xml b/tests/test_plot_background/materials.xml deleted file mode 100644 index 315c0fa848..0000000000 --- a/tests/test_plot_background/materials.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/tests/test_plot_background/plots.xml b/tests/test_plot_background/plots.xml deleted file mode 100644 index 879d2b30df..0000000000 --- a/tests/test_plot_background/plots.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - 0. 0. 0. - 30. 30. - 200 200 - 0 0 0 - - - diff --git a/tests/test_plot_background/results_true.dat b/tests/test_plot_background/results_true.dat deleted file mode 100644 index cea27e38e2..0000000000 --- a/tests/test_plot_background/results_true.dat +++ /dev/null @@ -1 +0,0 @@ -d0a8c3cd2eb2b73430e0fcac2f5249c012ba678d08add40fc43563332e71873977b2271d1e93ba42b3c1298f987f7d01406f60115d2f1c0879d140a11b909598 \ No newline at end of file diff --git a/tests/test_plot_background/test_plot_background.py b/tests/test_plot_background/test_plot_background.py deleted file mode 100644 index 7890eca19d..0000000000 --- a/tests/test_plot_background/test_plot_background.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import PlotTestHarness - - -if __name__ == '__main__': - harness = PlotTestHarness(('1_plot.ppm', )) - harness.main() diff --git a/tests/test_plot_basis/plots.xml b/tests/test_plot_basis/plots.xml deleted file mode 100644 index 492236d376..0000000000 --- a/tests/test_plot_basis/plots.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - 0. 0. 0. - 25 25 - 200 200 - - - - 0. 0. 0. - 25 25 - 200 200 - - - - 0. 0. 0. - 25 25 - 200 200 - - - diff --git a/tests/test_plot_basis/results_true.dat b/tests/test_plot_basis/results_true.dat deleted file mode 100644 index b1d5dc8534..0000000000 --- a/tests/test_plot_basis/results_true.dat +++ /dev/null @@ -1 +0,0 @@ -368e0135c136d5c8a2dabb4c8085279dc7ac0bd81b2ec905bdf11ecb5fe99803868631cdff0b3ddec941323bcc661747d4c16edfd4f8d38582155bd6fd7e82e8 \ No newline at end of file diff --git a/tests/test_plot_basis/settings.xml b/tests/test_plot_basis/settings.xml deleted file mode 100644 index a6fd5da19e..0000000000 --- a/tests/test_plot_basis/settings.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - 10 - 5 - 1000 - - - - - -4 -4 -4 4 4 4 - - - - diff --git a/tests/test_plot_colspec/geometry.xml b/tests/test_plot_colspec/geometry.xml deleted file mode 100644 index bc56030e18..0000000000 --- a/tests/test_plot_colspec/geometry.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/tests/test_plot_colspec/materials.xml b/tests/test_plot_colspec/materials.xml deleted file mode 100644 index 315c0fa848..0000000000 --- a/tests/test_plot_colspec/materials.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/tests/test_plot_colspec/plots.xml b/tests/test_plot_colspec/plots.xml deleted file mode 100644 index 27edcb11b0..0000000000 --- a/tests/test_plot_colspec/plots.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - 0. 0. 0. - 30. 30. - 200 200 - - - - diff --git a/tests/test_plot_colspec/results_true.dat b/tests/test_plot_colspec/results_true.dat deleted file mode 100644 index 0e4eb9a59b..0000000000 --- a/tests/test_plot_colspec/results_true.dat +++ /dev/null @@ -1 +0,0 @@ -32acbbd7b0f777589b108333e4928b6ecd93bc9e553b04cc611da4079ff8738a03dd0667e7e17161708fde86180532f19907272356d23e8a827a736a5b4a697a \ No newline at end of file diff --git a/tests/test_plot_colspec/settings.xml b/tests/test_plot_colspec/settings.xml deleted file mode 100644 index a6fd5da19e..0000000000 --- a/tests/test_plot_colspec/settings.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - 10 - 5 - 1000 - - - - - -4 -4 -4 4 4 4 - - - - diff --git a/tests/test_plot_colspec/test_plot_colspec.py b/tests/test_plot_colspec/test_plot_colspec.py deleted file mode 100644 index 7890eca19d..0000000000 --- a/tests/test_plot_colspec/test_plot_colspec.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import PlotTestHarness - - -if __name__ == '__main__': - harness = PlotTestHarness(('1_plot.ppm', )) - harness.main() diff --git a/tests/test_plot_mask/geometry.xml b/tests/test_plot_mask/geometry.xml deleted file mode 100644 index 83619d9f78..0000000000 --- a/tests/test_plot_mask/geometry.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/tests/test_plot_mask/materials.xml b/tests/test_plot_mask/materials.xml deleted file mode 100644 index f90a5e7f81..0000000000 --- a/tests/test_plot_mask/materials.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/tests/test_plot_mask/results_true.dat b/tests/test_plot_mask/results_true.dat deleted file mode 100644 index a1e323203d..0000000000 --- a/tests/test_plot_mask/results_true.dat +++ /dev/null @@ -1 +0,0 @@ -a7cb65bf40c84c0540d45ff292c398f9ae51b3d9396e88b9b4e5cdf05e8730f409bddb53aec6d396058194c6293c5bd3ef39efd0b0f30f2423f696193c85176c \ No newline at end of file diff --git a/tests/test_plot_mask/settings.xml b/tests/test_plot_mask/settings.xml deleted file mode 100644 index a6fd5da19e..0000000000 --- a/tests/test_plot_mask/settings.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - 10 - 5 - 1000 - - - - - -4 -4 -4 4 4 4 - - - - diff --git a/tests/test_plot_mask/test_plot_mask.py b/tests/test_plot_mask/test_plot_mask.py deleted file mode 100644 index d45479e256..0000000000 --- a/tests/test_plot_mask/test_plot_mask.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import PlotTestHarness - - -if __name__ == '__main__': - harness = PlotTestHarness(('1_plot.ppm', '2_plot.ppm', '3_plot.ppm')) - harness.main() From a5f2d678921c39d640454b4f164d32522c7b6f22 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 19 Jan 2016 12:32:22 -0600 Subject: [PATCH 202/650] Add a voxel plot to test_plot --- tests/test_plot/plots.xml | 6 +++ tests/test_plot/results_true.dat | 2 +- tests/test_plot/test_plot.py | 64 +++++++++++++++++++++++++++++++- tests/testing_harness.py | 43 --------------------- 4 files changed, 69 insertions(+), 46 deletions(-) diff --git a/tests/test_plot/plots.xml b/tests/test_plot/plots.xml index e8848f6172..d5e03f598f 100644 --- a/tests/test_plot/plots.xml +++ b/tests/test_plot/plots.xml @@ -23,4 +23,10 @@ 0 0 0 + + 100 100 10 + 0. 0. 0. + 20 20 10 + + diff --git a/tests/test_plot/results_true.dat b/tests/test_plot/results_true.dat index 910e41a060..ba8a49226a 100644 --- a/tests/test_plot/results_true.dat +++ b/tests/test_plot/results_true.dat @@ -1 +1 @@ -f76183da6a581c17f9a1572e1f1573d784e3f2e3efa3e7a3bd8786991df7a086e0b5f7f1c6b00343fa61b601ec70ad619b5ff5d8120af32559b882ca57be6768 \ No newline at end of file +01ecda0f3820a49c8a41d8dc47d1e5c58767a04301621c2437231fcc04401ddea47b67d0529ca56a32d4d97b4f1416a2e0b6120d3bdc87d74a7e9889758a8808 \ No newline at end of file diff --git a/tests/test_plot/test_plot.py b/tests/test_plot/test_plot.py index d45479e256..62cea67df4 100644 --- a/tests/test_plot/test_plot.py +++ b/tests/test_plot/test_plot.py @@ -1,11 +1,71 @@ #!/usr/bin/env python +import glob +import hashlib import os import sys sys.path.insert(0, os.pardir) -from testing_harness import PlotTestHarness +from testing_harness import TestHarness + +import h5py + +from openmc import Executor + + +class PlotTestHarness(TestHarness): + """Specialized TestHarness for running OpenMC plotting tests.""" + def __init__(self, plot_names): + super(PlotTestHarness, self).__init__(None, False) + self._plot_names = plot_names + + def _run_openmc(self): + executor = Executor() + returncode = executor.plot_geometry(openmc_exec=self._opts.exe) + assert returncode == 0, 'OpenMC did not exit successfully.' + + def _test_output_created(self): + """Make sure *.ppm has been created.""" + for fname in self._plot_names: + assert os.path.exists(os.path.join(os.getcwd(), fname)), \ + 'Plot output file does not exist.' + + def _cleanup(self): + super(PlotTestHarness, self)._cleanup() + for fname in self._plot_names: + path = os.path.join(os.getcwd(), fname) + if os.path.exists(path): + #os.remove(path) + pass + + def _get_results(self): + """Return a string hash of the plot files.""" + outstr = bytes() + + # Add PPM output to results + ppm_files = glob.glob(os.path.join(os.getcwd(), '*.ppm')) + for fname in sorted(ppm_files): + with open(fname, 'rb') as fh: + outstr += fh.read() + + # Add voxel data to results + voxel_files = glob.glob(os.path.join(os.getcwd(), '*.voxel')) + for fname in sorted(voxel_files): + with h5py.File(fname, 'r') as fh: + outstr += fh['filetype'].value + outstr += fh['num_voxels'].value.tobytes() + outstr += fh['lower_left'].value.tobytes() + outstr += fh['voxel_width'].value.tobytes() + outstr += fh['data'].value.tobytes() + + # Hash the information and return. + sha512 = hashlib.sha512() + sha512.update(outstr) + outstr = sha512.hexdigest() + + return outstr if __name__ == '__main__': - harness = PlotTestHarness(('1_plot.ppm', '2_plot.ppm', '3_plot.ppm')) + harness = PlotTestHarness(('1_plot.ppm', '2_plot.ppm', '3_plot.ppm', + '4_plot.voxel')) harness.main() diff --git a/tests/testing_harness.py b/tests/testing_harness.py index 190c702282..66cadfe633 100644 --- a/tests/testing_harness.py +++ b/tests/testing_harness.py @@ -152,49 +152,6 @@ class HashedTestHarness(TestHarness): return super(HashedTestHarness, self)._get_results(True) -class PlotTestHarness(TestHarness): - """Specialized TestHarness for running OpenMC plotting tests.""" - def __init__(self, plot_names): - super(PlotTestHarness, self).__init__(None, False) - self._plot_names = plot_names - - def _run_openmc(self): - executor = Executor() - returncode = executor.plot_geometry(openmc_exec=self._opts.exe) - assert returncode == 0, 'OpenMC did not exit successfully.' - - def _test_output_created(self): - """Make sure *.ppm has been created.""" - for fname in self._plot_names: - assert os.path.exists(os.path.join(os.getcwd(), fname)), \ - 'Plot output file does not exist.' - - def _cleanup(self): - super(PlotTestHarness, self)._cleanup() - output = glob.glob(os.path.join(os.getcwd(), '*.ppm')) - for f in output: - if os.path.exists(f): - os.remove(f) - - def _get_results(self): - """Return a string hash of the plot files.""" - # Find the plot files. - plot_files = glob.glob(os.path.join(os.getcwd(), '*.ppm')) - - # Read the plot files. - outstr = bytes() - for fname in sorted(plot_files): - with open(fname, 'rb') as fh: - outstr += fh.read() - - # Hash the information and return. - sha512 = hashlib.sha512() - sha512.update(outstr) - outstr = sha512.hexdigest() - - return outstr - - class CMFDTestHarness(TestHarness): """Specialized TestHarness for running OpenMC CMFD tests.""" def _get_results(self): From 8f1f3a775b8b7b2196ca68232d4207d04e8280ca Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 19 Jan 2016 13:06:44 -0600 Subject: [PATCH 203/650] Remove test_basic as it doesn't affect coverage --- tests/test_basic/geometry.xml | 8 -------- tests/test_basic/materials.xml | 9 --------- tests/test_basic/results_true.dat | 2 -- tests/test_basic/settings.xml | 16 ---------------- tests/test_basic/test_basic.py | 11 ----------- 5 files changed, 46 deletions(-) delete mode 100644 tests/test_basic/geometry.xml delete mode 100644 tests/test_basic/materials.xml delete mode 100644 tests/test_basic/results_true.dat delete mode 100644 tests/test_basic/settings.xml delete mode 100755 tests/test_basic/test_basic.py diff --git a/tests/test_basic/geometry.xml b/tests/test_basic/geometry.xml deleted file mode 100644 index bc56030e18..0000000000 --- a/tests/test_basic/geometry.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/tests/test_basic/materials.xml b/tests/test_basic/materials.xml deleted file mode 100644 index 315c0fa848..0000000000 --- a/tests/test_basic/materials.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/tests/test_basic/results_true.dat b/tests/test_basic/results_true.dat deleted file mode 100644 index 5263a6b7fd..0000000000 --- a/tests/test_basic/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -3.021779E-01 3.813358E-03 diff --git a/tests/test_basic/settings.xml b/tests/test_basic/settings.xml deleted file mode 100644 index a6fd5da19e..0000000000 --- a/tests/test_basic/settings.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - 10 - 5 - 1000 - - - - - -4 -4 -4 4 4 4 - - - - diff --git a/tests/test_basic/test_basic.py b/tests/test_basic/test_basic.py deleted file mode 100755 index 2a595f3e66..0000000000 --- a/tests/test_basic/test_basic.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness - - -if __name__ == '__main__': - harness = TestHarness('statepoint.10.*') - harness.main() From d2df222c525c760fcd9db062a965fa9773889a9d Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 19 Jan 2016 13:18:12 -0600 Subject: [PATCH 204/650] Combine two S(a,b) tests into one --- tests/test_salphabeta/geometry.xml | 8 +- tests/test_salphabeta/materials.xml | 15 ++ tests/test_salphabeta/results_true.dat | 2 +- tests/test_salphabeta_multiple/geometry.xml | 96 ------------- tests/test_salphabeta_multiple/materials.xml | 130 ------------------ .../test_salphabeta_multiple/results_true.dat | 2 - tests/test_salphabeta_multiple/settings.xml | 20 --- .../test_salphabeta_multiple.py | 11 -- 8 files changed, 21 insertions(+), 263 deletions(-) delete mode 100644 tests/test_salphabeta_multiple/geometry.xml delete mode 100644 tests/test_salphabeta_multiple/materials.xml delete mode 100644 tests/test_salphabeta_multiple/results_true.dat delete mode 100644 tests/test_salphabeta_multiple/settings.xml delete mode 100644 tests/test_salphabeta_multiple/test_salphabeta_multiple.py diff --git a/tests/test_salphabeta/geometry.xml b/tests/test_salphabeta/geometry.xml index f9caa6c883..2b978b9148 100644 --- a/tests/test_salphabeta/geometry.xml +++ b/tests/test_salphabeta/geometry.xml @@ -3,11 +3,13 @@ - - + + + - + + diff --git a/tests/test_salphabeta/materials.xml b/tests/test_salphabeta/materials.xml index 9646e11159..b51395f184 100644 --- a/tests/test_salphabeta/materials.xml +++ b/tests/test_salphabeta/materials.xml @@ -23,6 +23,21 @@ + + + + + + + + + + + + + + + diff --git a/tests/test_salphabeta/results_true.dat b/tests/test_salphabeta/results_true.dat index a04ee8fc89..926af89bca 100644 --- a/tests/test_salphabeta/results_true.dat +++ b/tests/test_salphabeta/results_true.dat @@ -1,2 +1,2 @@ k-combined: -8.538165E-01 6.355606E-03 +8.350634E-01 6.010639E-02 diff --git a/tests/test_salphabeta_multiple/geometry.xml b/tests/test_salphabeta_multiple/geometry.xml deleted file mode 100644 index 13eb601660..0000000000 --- a/tests/test_salphabeta_multiple/geometry.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/test_salphabeta_multiple/materials.xml b/tests/test_salphabeta_multiple/materials.xml deleted file mode 100644 index f1a0d6f393..0000000000 --- a/tests/test_salphabeta_multiple/materials.xml +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - 71c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/test_salphabeta_multiple/results_true.dat b/tests/test_salphabeta_multiple/results_true.dat deleted file mode 100644 index 593c5adc74..0000000000 --- a/tests/test_salphabeta_multiple/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -9.141547E-01 2.728809E-02 diff --git a/tests/test_salphabeta_multiple/settings.xml b/tests/test_salphabeta_multiple/settings.xml deleted file mode 100644 index 4df1f124a6..0000000000 --- a/tests/test_salphabeta_multiple/settings.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - 10 - 5 - 400 - - - - - box - 0 0 0 1 1 1 - - - - - diff --git a/tests/test_salphabeta_multiple/test_salphabeta_multiple.py b/tests/test_salphabeta_multiple/test_salphabeta_multiple.py deleted file mode 100644 index 2a595f3e66..0000000000 --- a/tests/test_salphabeta_multiple/test_salphabeta_multiple.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness - - -if __name__ == '__main__': - harness = TestHarness('statepoint.10.*') - harness.main() From 918c1bf45991cc8dd4b10dbada78a6aa472f8bd9 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 19 Jan 2016 13:41:50 -0600 Subject: [PATCH 205/650] Fix typo. I am not Ubuntu. --- docs/source/quickinstall.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/quickinstall.rst b/docs/source/quickinstall.rst index 8bf95e245f..7faa4978dd 100644 --- a/docs/source/quickinstall.rst +++ b/docs/source/quickinstall.rst @@ -44,8 +44,8 @@ Installing from Source on Ubuntu 15.04+ --------------------------------------- To build OpenMC from source, several :ref:`prerequisites ` are -needed. If you are Ubuntu 15.04 or higher, all prerequisites can be installed -directly from the package manager. +needed. If you are using Ubuntu 15.04 or higher, all prerequisites can be +installed directly from the package manager. .. code-block:: sh From a31a121504ddbc98d6bd2a68f1f1ff6d1478136b Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 19 Jan 2016 14:44:32 -0600 Subject: [PATCH 206/650] Use older style ndarray.tostring() rather than ndarray.tobytes() --- tests/test_plot/test_plot.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_plot/test_plot.py b/tests/test_plot/test_plot.py index 62cea67df4..015577d215 100644 --- a/tests/test_plot/test_plot.py +++ b/tests/test_plot/test_plot.py @@ -52,10 +52,10 @@ class PlotTestHarness(TestHarness): for fname in sorted(voxel_files): with h5py.File(fname, 'r') as fh: outstr += fh['filetype'].value - outstr += fh['num_voxels'].value.tobytes() - outstr += fh['lower_left'].value.tobytes() - outstr += fh['voxel_width'].value.tobytes() - outstr += fh['data'].value.tobytes() + outstr += fh['num_voxels'].value.tostring() + outstr += fh['lower_left'].value.tostring() + outstr += fh['voxel_width'].value.tostring() + outstr += fh['data'].value.tostring() # Hash the information and return. sha512 = hashlib.sha512() From 9d7dbdb7d7e82f1251a7510c9c63fe041273f323 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Wed, 20 Jan 2016 18:04:20 -0500 Subject: [PATCH 207/650] Improved docs for Tally.get_slice(...) and fixed bug with redundant energy filter bins in sliced tallies --- .../pythonapi/examples/mgxs-part-ii.ipynb | 982 +----------------- .../pythonapi/examples/mgxs-part-iii.ipynb | 3 +- openmc/tallies.py | 66 +- 3 files changed, 87 insertions(+), 964 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index b41b322410..764bb0d412 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -34,14 +34,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python2.7/dist-packages/matplotlib/__init__.py:1318: UserWarning: This call to matplotlib.use() has no effect\n", + "/usr/lib/pymodules/python2.7/matplotlib/__init__.py:1173: UserWarning: This call to matplotlib.use() has no effect\n", "because the backend has already been chosen;\n", "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", "or matplotlib.backends is imported for the first time.\n", "\n", " warnings.warn(_use_error_msg)\n", - "/usr/local/lib/python2.7/dist-packages/ipykernel/__main__.py:11: QAWarning: pyne.rxname is not yet QA compliant.\n", - "/usr/local/lib/python2.7/dist-packages/ipykernel/__main__.py:11: QAWarning: pyne.ace is not yet QA compliant.\n" + "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:11: QAWarning: pyne.rxname is not yet QA compliant.\n", + "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:11: QAWarning: pyne.ace is not yet QA compliant.\n" ] } ], @@ -388,7 +388,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": { "collapsed": false }, @@ -425,7 +425,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": { "collapsed": false }, @@ -450,8 +450,9 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: ea9fb637f63f9374c7436456141afa850b84acf9\n", - " Date/Time: 2016-01-14 08:03:40\n", + " Git SHA1: 263266f4f8807fd38c6ac282fae259ae73fa1eee\n", + " Date/Time: 2016-01-20 17:57:53\n", + " MPI Processes: 1\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -509,101 +510,8 @@ " 30/1 1.23670 1.22056 +/- 0.00368\n", " 31/1 1.21396 1.22024 +/- 0.00352\n", " 32/1 1.21389 1.21995 +/- 0.00337\n", - " 33/1 1.24649 1.22111 +/- 0.00342\n", - " 34/1 1.23204 1.22156 +/- 0.00330\n", - " 35/1 1.20768 1.22101 +/- 0.00322\n", - " 36/1 1.22271 1.22107 +/- 0.00309\n", - " 37/1 1.21796 1.22096 +/- 0.00298\n", - " 38/1 1.23842 1.22158 +/- 0.00293\n", - " 39/1 1.23080 1.22190 +/- 0.00285\n", - " 40/1 1.23572 1.22236 +/- 0.00279\n", - " 41/1 1.21691 1.22218 +/- 0.00271\n", - " 42/1 1.24616 1.22293 +/- 0.00272\n", - " 43/1 1.21903 1.22282 +/- 0.00264\n", - " 44/1 1.22967 1.22302 +/- 0.00257\n", - " 45/1 1.22053 1.22295 +/- 0.00250\n", - " 46/1 1.24087 1.22344 +/- 0.00248\n", - " 47/1 1.20251 1.22288 +/- 0.00248\n", - " 48/1 1.20331 1.22236 +/- 0.00246\n", - " 49/1 1.22724 1.22249 +/- 0.00240\n", - " 50/1 1.24798 1.22313 +/- 0.00243\n", - " Triggers unsatisfied, max unc./thresh. is 1.32110 for scatter-p1 in tally 10054\n", - " The estimated number of batches is 80\n", - " Creating state point statepoint.050.h5...\n", - " 51/1 1.22253 1.22311 +/- 0.00237\n", - " 52/1 1.24330 1.22359 +/- 0.00236\n", - " 53/1 1.23251 1.22380 +/- 0.00231\n", - " 54/1 1.21133 1.22352 +/- 0.00228\n", - " 55/1 1.24503 1.22399 +/- 0.00228\n", - " 56/1 1.22013 1.22391 +/- 0.00223\n", - " 57/1 1.23877 1.22423 +/- 0.00220\n", - " 58/1 1.23793 1.22451 +/- 0.00218\n", - " 59/1 1.21018 1.22422 +/- 0.00215\n", - " 60/1 1.22417 1.22422 +/- 0.00211\n", - " 61/1 1.23094 1.22435 +/- 0.00207\n", - " 62/1 1.23310 1.22452 +/- 0.00204\n", - " 63/1 1.22488 1.22453 +/- 0.00200\n", - " 64/1 1.22702 1.22457 +/- 0.00196\n", - " 65/1 1.18834 1.22391 +/- 0.00204\n", - " 66/1 1.23112 1.22404 +/- 0.00200\n", - " 67/1 1.21611 1.22390 +/- 0.00197\n", - " 68/1 1.22513 1.22392 +/- 0.00194\n", - " 69/1 1.21741 1.22381 +/- 0.00191\n", - " 70/1 1.22484 1.22383 +/- 0.00188\n", - " 71/1 1.19662 1.22338 +/- 0.00190\n", - " 72/1 1.23315 1.22354 +/- 0.00187\n", - " 73/1 1.22796 1.22361 +/- 0.00185\n", - " 74/1 1.21417 1.22346 +/- 0.00182\n", - " 75/1 1.21020 1.22326 +/- 0.00181\n", - " 76/1 1.23413 1.22343 +/- 0.00179\n", - " 77/1 1.22184 1.22340 +/- 0.00176\n", - " 78/1 1.20309 1.22310 +/- 0.00176\n", - " 79/1 1.23458 1.22327 +/- 0.00174\n", - " 80/1 1.20724 1.22304 +/- 0.00173\n", - " Triggers satisfied for batch 80\n", - " Creating state point statepoint.080.h5...\n", - "\n", - " ===========================================================================\n", - " ======================> SIMULATION FINISHED <======================\n", - " ===========================================================================\n", - "\n", - "\n", - " =======================> TIMING STATISTICS <=======================\n", - "\n", - " Total time for initialization = 3.8300E-01 seconds\n", - " Reading cross sections = 1.0700E-01 seconds\n", - " Total time in simulation = 2.5629E+02 seconds\n", - " Time in transport only = 2.5623E+02 seconds\n", - " Time in inactive batches = 1.5743E+01 seconds\n", - " Time in active batches = 2.4055E+02 seconds\n", - " Time synchronizing fission bank = 3.4000E-02 seconds\n", - " Sampling source sites = 2.1000E-02 seconds\n", - " SEND/RECV source sites = 1.3000E-02 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", - " Total time for finalization = 7.0000E-03 seconds\n", - " Total time elapsed = 2.5674E+02 seconds\n", - " Calculation Rate (inactive) = 6352.03 neutrons/second\n", - " Calculation Rate (active) = 1662.87 neutrons/second\n", - "\n", - " ============================> RESULTS <============================\n", - "\n", - " k-effective (Collision) = 1.22327 +/- 0.00148\n", - " k-effective (Track-length) = 1.22304 +/- 0.00173\n", - " k-effective (Absorption) = 1.22407 +/- 0.00129\n", - " Combined k-effective = 1.22373 +/- 0.00113\n", - " Leakage Fraction = 0.00000 +/- 0.00000\n", - "\n" + " 33/1 1.24649 1.22111 +/- 0.00342\n" ] - }, - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ @@ -628,7 +536,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": { "collapsed": false }, @@ -647,7 +555,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": { "collapsed": true }, @@ -667,7 +575,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": { "collapsed": false }, @@ -702,46 +610,11 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Multi-Group XS\n", - "\tReaction Type =\tnu-fission\n", - "\tDomain Type =\tcell\n", - "\tDomain ID =\t10000\n", - "\tNuclide =\tU-235\n", - "\tCross Sections [barns]:\n", - " Group 1 [0.821 - 20.0 MeV]:\t3.31e+00 +/- 1.88e-01%\n", - " Group 2 [0.00553 - 0.821 MeV]:\t3.97e+00 +/- 1.24e-01%\n", - " Group 3 [4e-06 - 0.00553 MeV]:\t5.50e+01 +/- 2.02e-01%\n", - " Group 4 [6.25e-07 - 4e-06 MeV]:\t8.83e+01 +/- 3.56e-01%\n", - " Group 5 [2.8e-07 - 6.25e-07 MeV]:\t2.90e+02 +/- 4.54e-01%\n", - " Group 6 [1.4e-07 - 2.8e-07 MeV]:\t4.49e+02 +/- 4.10e-01%\n", - " Group 7 [5.8e-08 - 1.4e-07 MeV]:\t6.87e+02 +/- 2.56e-01%\n", - " Group 8 [0.0 - 5.8e-08 MeV]:\t1.44e+03 +/- 2.82e-01%\n", - "\n", - "\tNuclide =\tU-238\n", - "\tCross Sections [barns]:\n", - " Group 1 [0.821 - 20.0 MeV]:\t1.06e+00 +/- 2.30e-01%\n", - " Group 2 [0.00553 - 0.821 MeV]:\t1.21e-03 +/- 2.25e-01%\n", - " Group 3 [4e-06 - 0.00553 MeV]:\t5.82e-04 +/- 3.09e+00%\n", - " Group 4 [6.25e-07 - 4e-06 MeV]:\t6.54e-06 +/- 3.27e-01%\n", - " Group 5 [2.8e-07 - 6.25e-07 MeV]:\t1.07e-05 +/- 4.39e-01%\n", - " Group 6 [1.4e-07 - 2.8e-07 MeV]:\t1.55e-05 +/- 4.12e-01%\n", - " Group 7 [5.8e-08 - 1.4e-07 MeV]:\t2.30e-05 +/- 2.57e-01%\n", - " Group 8 [0.0 - 5.8e-08 MeV]:\t4.24e-05 +/- 2.81e-01%\n", - "\n", - "\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "nufission = xs_library[fuel_cell.id]['nu-fission']\n", "nufission.print_xs(xs_type='micro', nuclides=['U-235', 'U-238'])" @@ -756,34 +629,11 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Multi-Group XS\n", - "\tReaction Type =\tnu-fission\n", - "\tDomain Type =\tcell\n", - "\tDomain ID =\t10000\n", - "\tCross Sections [cm^-1]:\n", - " Group 1 [0.821 - 20.0 MeV]:\t2.52e-02 +/- 2.19e-01%\n", - " Group 2 [0.00553 - 0.821 MeV]:\t1.51e-03 +/- 1.22e-01%\n", - " Group 3 [4e-06 - 0.00553 MeV]:\t2.06e-02 +/- 2.02e-01%\n", - " Group 4 [6.25e-07 - 4e-06 MeV]:\t3.31e-02 +/- 3.56e-01%\n", - " Group 5 [2.8e-07 - 6.25e-07 MeV]:\t1.09e-01 +/- 4.54e-01%\n", - " Group 6 [1.4e-07 - 2.8e-07 MeV]:\t1.69e-01 +/- 4.10e-01%\n", - " Group 7 [5.8e-08 - 1.4e-07 MeV]:\t2.58e-01 +/- 2.56e-01%\n", - " Group 8 [0.0 - 5.8e-08 MeV]:\t5.40e-01 +/- 2.82e-01%\n", - "\n", - "\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "nufission = xs_library[fuel_cell.id]['nu-fission']\n", "nufission.print_xs(xs_type='macro', nuclides='sum')" @@ -798,151 +648,11 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", - " return c.reshape(shape_out)\n", - "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", - " return c.reshape(shape_out)\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cellgroup ingroup outnuclidemeanstd. dev.
1261000211H-10.2340220.003645
1271000211O-161.5603050.006280
1241000212H-11.5880250.002815
1251000212O-160.2851470.001392
1221000213H-10.0107760.000186
1231000213O-160.0000000.000000
1201000214H-10.0000230.000010
1211000214O-160.0000000.000000
1181000215H-10.0000000.000000
1191000215O-160.0000000.000000
\n", - "
" - ], - "text/plain": [ - " cell group in group out nuclide mean std. dev.\n", - "126 10002 1 1 H-1 0.234022 0.003645\n", - "127 10002 1 1 O-16 1.560305 0.006280\n", - "124 10002 1 2 H-1 1.588025 0.002815\n", - "125 10002 1 2 O-16 0.285147 0.001392\n", - "122 10002 1 3 H-1 0.010776 0.000186\n", - "123 10002 1 3 O-16 0.000000 0.000000\n", - "120 10002 1 4 H-1 0.000023 0.000010\n", - "121 10002 1 4 O-16 0.000000 0.000000\n", - "118 10002 1 5 H-1 0.000000 0.000000\n", - "119 10002 1 5 O-16 0.000000 0.000000" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "nuscatter = xs_library[moderator_cell.id]['nu-scatter']\n", "df = nuscatter.get_pandas_dataframe(xs_type='micro')\n", @@ -958,7 +668,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": { "collapsed": true }, @@ -980,143 +690,22 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Multi-Group XS\n", - "\tReaction Type =\ttransport\n", - "\tDomain Type =\tcell\n", - "\tDomain ID =\t10000\n", - "\tNuclide =\tU-235\n", - "\tCross Sections [cm^-1]:\n", - " Group 1 [6.25e-07 - 20.0 MeV]:\t7.81e-03 +/- 4.75e-01%\n", - " Group 2 [0.0 - 6.25e-07 MeV]:\t1.82e-01 +/- 1.89e-01%\n", - "\n", - "\tNuclide =\tU-238\n", - "\tCross Sections [cm^-1]:\n", - " Group 1 [6.25e-07 - 20.0 MeV]:\t2.17e-01 +/- 1.31e-01%\n", - " Group 2 [0.0 - 6.25e-07 MeV]:\t2.53e-01 +/- 2.08e-01%\n", - "\n", - "\tNuclide =\tO-16\n", - "\tCross Sections [cm^-1]:\n", - " Group 1 [6.25e-07 - 20.0 MeV]:\t1.45e-01 +/- 1.50e-01%\n", - " Group 2 [0.0 - 6.25e-07 MeV]:\t1.74e-01 +/- 2.66e-01%\n", - "\n", - "\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "condensed_xs.print_xs()" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", - " return c.reshape(shape_out)\n", - "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", - " return c.reshape(shape_out)\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cellgroup innuclidemeanstd. dev.
3100001U-23520.8281270.098842
4100001U-2389.5822950.012550
5100001O-163.1573580.004725
0100002U-235485.2176490.916465
1100002U-23811.1760810.023196
2100002O-163.7881670.010090
\n", - "
" - ], - "text/plain": [ - " cell group in nuclide mean std. dev.\n", - "3 10000 1 U-235 20.828127 0.098842\n", - "4 10000 1 U-238 9.582295 0.012550\n", - "5 10000 1 O-16 3.157358 0.004725\n", - "0 10000 2 U-235 485.217649 0.916465\n", - "1 10000 2 U-238 11.176081 0.023196\n", - "2 10000 2 O-16 3.788167 0.010090" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df = condensed_xs.get_pandas_dataframe(xs_type='micro')\n", "df" @@ -1138,7 +727,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1157,7 +746,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1202,187 +791,13 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ NORMAL ] Ray tracing for track segmentation...\n", - "[ NORMAL ] Dumping tracks to file...\n", - "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.574633\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.679931\tres = 4.254E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.660910\tres = 1.832E-01\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.658975\tres = 2.798E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.642976\tres = 2.927E-03\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.625710\tres = 2.428E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.606520\tres = 2.685E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.587277\tres = 3.067E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.568777\tres = 3.173E-02\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.551415\tres = 3.150E-02\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.535708\tres = 3.052E-02\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.521916\tres = 2.849E-02\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.510221\tres = 2.575E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.500691\tres = 2.241E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.493392\tres = 1.868E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.488318\tres = 1.458E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.485438\tres = 1.028E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.484705\tres = 5.896E-03\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.486046\tres = 1.510E-03\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.489362\tres = 2.766E-03\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.494546\tres = 6.824E-03\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.501481\tres = 1.059E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.510042\tres = 1.402E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.520095\tres = 1.707E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.531508\tres = 1.971E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.544144\tres = 2.194E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.557872\tres = 2.378E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.572557\tres = 2.523E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.588073\tres = 2.632E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.604293\tres = 2.710E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.621101\tres = 2.758E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.638382\tres = 2.781E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.656032\tres = 2.782E-02\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.673950\tres = 2.765E-02\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.692043\tres = 2.731E-02\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.710227\tres = 2.685E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.728423\tres = 2.628E-02\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.746558\tres = 2.562E-02\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.764569\tres = 2.490E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.782396\tres = 2.412E-02\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.799990\tres = 2.332E-02\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.817301\tres = 2.249E-02\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.834292\tres = 2.164E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.850928\tres = 2.079E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.867178\tres = 1.994E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.883018\tres = 1.910E-02\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.898427\tres = 1.827E-02\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.913390\tres = 1.745E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.927892\tres = 1.665E-02\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.941926\tres = 1.588E-02\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.955484\tres = 1.512E-02\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.968563\tres = 1.439E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.981162\tres = 1.369E-02\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.993283\tres = 1.301E-02\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.004929\tres = 1.235E-02\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.016105\tres = 1.172E-02\n", - "[ NORMAL ] Iteration 56:\tk_eff = 1.026818\tres = 1.112E-02\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.037075\tres = 1.054E-02\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.046885\tres = 9.989E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.056259\tres = 9.459E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.065206\tres = 8.954E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.073740\tres = 8.471E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.081872\tres = 8.012E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.089614\tres = 7.573E-03\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.096980\tres = 7.156E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.103981\tres = 6.760E-03\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.110631\tres = 6.382E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.116944\tres = 6.024E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.122932\tres = 5.684E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.128608\tres = 5.361E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.133985\tres = 5.055E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.139076\tres = 4.764E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.143892\tres = 4.490E-03\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.148447\tres = 4.228E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.152753\tres = 3.982E-03\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.156819\tres = 3.749E-03\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.160659\tres = 3.528E-03\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.164283\tres = 3.319E-03\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.167701\tres = 3.122E-03\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.170923\tres = 2.936E-03\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.173960\tres = 2.759E-03\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.176822\tres = 2.594E-03\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.179516\tres = 2.437E-03\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.182052\tres = 2.289E-03\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.184438\tres = 2.150E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.186682\tres = 2.018E-03\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.188792\tres = 1.895E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.190775\tres = 1.778E-03\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.192639\tres = 1.668E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.194389\tres = 1.565E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.196032\tres = 1.468E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.197575\tres = 1.375E-03\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.199023\tres = 1.290E-03\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.200381\tres = 1.209E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.201654\tres = 1.133E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.202848\tres = 1.061E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.203968\tres = 9.941E-04\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.205016\tres = 9.308E-04\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.205999\tres = 8.707E-04\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.206921\tres = 8.159E-04\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.207783\tres = 7.635E-04\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.208590\tres = 7.145E-04\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.209345\tres = 6.684E-04\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.210053\tres = 6.250E-04\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.210714\tres = 5.848E-04\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.211333\tres = 5.466E-04\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.211913\tres = 5.115E-04\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.212453\tres = 4.784E-04\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.212960\tres = 4.462E-04\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.213433\tres = 4.175E-04\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.213875\tres = 3.901E-04\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.214288\tres = 3.643E-04\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.214674\tres = 3.404E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.215036\tres = 3.181E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.215372\tres = 2.972E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.215686\tres = 2.772E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.215980\tres = 2.586E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.216255\tres = 2.416E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.216511\tres = 2.258E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.216749\tres = 2.105E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.216973\tres = 1.963E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.217181\tres = 1.834E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.217375\tres = 1.710E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.217556\tres = 1.595E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.217725\tres = 1.488E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.217883\tres = 1.389E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.218030\tres = 1.296E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.218167\tres = 1.208E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.218294\tres = 1.128E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.218414\tres = 1.041E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.218525\tres = 9.793E-05\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.218628\tres = 9.128E-05\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.218725\tres = 8.502E-05\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.218815\tres = 7.903E-05\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.218899\tres = 7.376E-05\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.218976\tres = 6.888E-05\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.219049\tres = 6.362E-05\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.219117\tres = 5.979E-05\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.219180\tres = 5.591E-05\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.219239\tres = 5.181E-05\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.219294\tres = 4.824E-05\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.219345\tres = 4.496E-05\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.219392\tres = 4.197E-05\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.219437\tres = 3.871E-05\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.219478\tres = 3.666E-05\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.219516\tres = 3.373E-05\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.219552\tres = 3.112E-05\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.219585\tres = 2.941E-05\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.219616\tres = 2.711E-05\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.219645\tres = 2.542E-05\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.219671\tres = 2.369E-05\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.219696\tres = 2.207E-05\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.219720\tres = 2.049E-05\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.219741\tres = 1.903E-05\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.219761\tres = 1.770E-05\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.219780\tres = 1.639E-05\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.219797\tres = 1.533E-05\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.219813\tres = 1.396E-05\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.219828\tres = 1.319E-05\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.219842\tres = 1.216E-05\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.219854\tres = 1.152E-05\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.219867\tres = 1.049E-05\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.219878\tres = 1.005E-05\n" - ] - } - ], + "outputs": [], "source": [ "# Generate tracks for OpenMOC\n", - "openmoc_geometry.initializeFlatSourceRegions()\n", "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=128, spacing=0.1)\n", "track_generator.generateTracks()\n", "\n", @@ -1400,21 +815,11 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "openmc keff = 1.223729\n", - "openmoc keff = 1.219878\n", - "bias [pcm]: -385.1\n" - ] - } - ], + "outputs": [], "source": [ "# Print report of keff and bias with OpenMC\n", "openmoc_keff = solver.getKeff()\n", @@ -1435,7 +840,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1475,254 +880,13 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ NORMAL ] Importing ray tracing data from file...\n", - "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.495594\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.557313\tres = 5.044E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.518115\tres = 1.245E-01\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.509017\tres = 7.033E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.496280\tres = 1.756E-02\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.488358\tres = 2.502E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.482660\tres = 1.596E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.479524\tres = 1.167E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.478569\tres = 6.497E-03\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.479591\tres = 1.992E-03\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.482389\tres = 2.136E-03\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.486774\tres = 5.834E-03\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.492576\tres = 9.091E-03\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.499632\tres = 1.192E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.507800\tres = 1.433E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.516944\tres = 1.635E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.526942\tres = 1.801E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.537682\tres = 1.934E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.549061\tres = 2.038E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.560985\tres = 2.116E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.573368\tres = 2.172E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.586133\tres = 2.207E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.599208\tres = 2.226E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.612528\tres = 2.231E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.626035\tres = 2.223E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.639676\tres = 2.205E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.653402\tres = 2.179E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.667171\tres = 2.146E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.680942\tres = 2.107E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.694681\tres = 2.064E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.708356\tres = 2.018E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.721940\tres = 1.969E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.735407\tres = 1.918E-02\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.748734\tres = 1.865E-02\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.761904\tres = 1.812E-02\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.774897\tres = 1.759E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.787700\tres = 1.705E-02\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.800299\tres = 1.652E-02\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.812684\tres = 1.599E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.824844\tres = 1.548E-02\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.836773\tres = 1.496E-02\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.848462\tres = 1.446E-02\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.859908\tres = 1.397E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.871105\tres = 1.349E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.882052\tres = 1.302E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.892745\tres = 1.257E-02\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.903184\tres = 1.212E-02\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.913368\tres = 1.169E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.923296\tres = 1.128E-02\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.932972\tres = 1.087E-02\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.942394\tres = 1.048E-02\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.951567\tres = 1.010E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.960491\tres = 9.733E-03\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.969168\tres = 9.378E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 0.977604\tres = 9.035E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 0.985801\tres = 8.704E-03\n", - "[ NORMAL ] Iteration 56:\tk_eff = 0.993762\tres = 8.384E-03\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.001491\tres = 8.076E-03\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.008992\tres = 7.778E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.016271\tres = 7.490E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.023329\tres = 7.214E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.030174\tres = 6.945E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.036809\tres = 6.689E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.043238\tres = 6.441E-03\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.049466\tres = 6.200E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.055498\tres = 5.970E-03\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.061338\tres = 5.748E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.066993\tres = 5.533E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.072465\tres = 5.328E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.077760\tres = 5.128E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.082882\tres = 4.937E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.087836\tres = 4.753E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.092627\tres = 4.575E-03\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.097260\tres = 4.404E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.101737\tres = 4.240E-03\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.106065\tres = 4.080E-03\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.110247\tres = 3.929E-03\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.114288\tres = 3.781E-03\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.118191\tres = 3.639E-03\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.121961\tres = 3.502E-03\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.125602\tres = 3.372E-03\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.129119\tres = 3.245E-03\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.132513\tres = 3.124E-03\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.135790\tres = 3.006E-03\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.138954\tres = 2.894E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.142008\tres = 2.786E-03\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.144954\tres = 2.681E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.147797\tres = 2.580E-03\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.150539\tres = 2.483E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.153185\tres = 2.389E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.155738\tres = 2.300E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.158201\tres = 2.214E-03\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.160575\tres = 2.130E-03\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.162865\tres = 2.050E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.165074\tres = 1.973E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.167202\tres = 1.899E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.169255\tres = 1.827E-03\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.171235\tres = 1.759E-03\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.173142\tres = 1.693E-03\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.174981\tres = 1.629E-03\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.176753\tres = 1.568E-03\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.178461\tres = 1.508E-03\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.180108\tres = 1.452E-03\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.181694\tres = 1.397E-03\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.183223\tres = 1.344E-03\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.184696\tres = 1.294E-03\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.186115\tres = 1.245E-03\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.187482\tres = 1.198E-03\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.188800\tres = 1.152E-03\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.190069\tres = 1.110E-03\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.191290\tres = 1.067E-03\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.192469\tres = 1.026E-03\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.193602\tres = 9.889E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.194694\tres = 9.503E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.195747\tres = 9.154E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.196759\tres = 8.808E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.197735\tres = 8.464E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.198674\tres = 8.155E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.199579\tres = 7.845E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.200450\tres = 7.550E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.201289\tres = 7.263E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.202097\tres = 6.984E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.202875\tres = 6.728E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.203623\tres = 6.470E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.204344\tres = 6.220E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.205037\tres = 5.994E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.205706\tres = 5.757E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.206349\tres = 5.551E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.206968\tres = 5.328E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.207565\tres = 5.132E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.208138\tres = 4.944E-04\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.208690\tres = 4.749E-04\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.209221\tres = 4.566E-04\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.209733\tres = 4.395E-04\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.210226\tres = 4.232E-04\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.210700\tres = 4.076E-04\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.211156\tres = 3.916E-04\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.211595\tres = 3.767E-04\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.212017\tres = 3.628E-04\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.212423\tres = 3.486E-04\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.212814\tres = 3.350E-04\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.213191\tres = 3.227E-04\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.213554\tres = 3.107E-04\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.213902\tres = 2.989E-04\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.214238\tres = 2.869E-04\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.214561\tres = 2.770E-04\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.214872\tres = 2.659E-04\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.215171\tres = 2.558E-04\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.215458\tres = 2.458E-04\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.215735\tres = 2.361E-04\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.216002\tres = 2.281E-04\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.216258\tres = 2.194E-04\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.216505\tres = 2.110E-04\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.216742\tres = 2.028E-04\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.216970\tres = 1.952E-04\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.217191\tres = 1.876E-04\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.217402\tres = 1.809E-04\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.217605\tres = 1.734E-04\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.217800\tres = 1.673E-04\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.217988\tres = 1.602E-04\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.218169\tres = 1.546E-04\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.218344\tres = 1.485E-04\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.218511\tres = 1.429E-04\n", - "[ NORMAL ] Iteration 163:\tk_eff = 1.218672\tres = 1.378E-04\n", - "[ NORMAL ] Iteration 164:\tk_eff = 1.218828\tres = 1.323E-04\n", - "[ NORMAL ] Iteration 165:\tk_eff = 1.218977\tres = 1.273E-04\n", - "[ NORMAL ] Iteration 166:\tk_eff = 1.219121\tres = 1.225E-04\n", - "[ NORMAL ] Iteration 167:\tk_eff = 1.219259\tres = 1.182E-04\n", - "[ NORMAL ] Iteration 168:\tk_eff = 1.219392\tres = 1.131E-04\n", - "[ NORMAL ] Iteration 169:\tk_eff = 1.219520\tres = 1.090E-04\n", - "[ NORMAL ] Iteration 170:\tk_eff = 1.219643\tres = 1.050E-04\n", - "[ NORMAL ] Iteration 171:\tk_eff = 1.219761\tres = 1.008E-04\n", - "[ NORMAL ] Iteration 172:\tk_eff = 1.219876\tres = 9.712E-05\n", - "[ NORMAL ] Iteration 173:\tk_eff = 1.219985\tres = 9.360E-05\n", - "[ NORMAL ] Iteration 174:\tk_eff = 1.220090\tres = 8.946E-05\n", - "[ NORMAL ] Iteration 175:\tk_eff = 1.220191\tres = 8.611E-05\n", - "[ NORMAL ] Iteration 176:\tk_eff = 1.220288\tres = 8.299E-05\n", - "[ NORMAL ] Iteration 177:\tk_eff = 1.220382\tres = 7.977E-05\n", - "[ NORMAL ] Iteration 178:\tk_eff = 1.220472\tres = 7.682E-05\n", - "[ NORMAL ] Iteration 179:\tk_eff = 1.220560\tres = 7.421E-05\n", - "[ NORMAL ] Iteration 180:\tk_eff = 1.220643\tres = 7.140E-05\n", - "[ NORMAL ] Iteration 181:\tk_eff = 1.220724\tres = 6.824E-05\n", - "[ NORMAL ] Iteration 182:\tk_eff = 1.220801\tres = 6.591E-05\n", - "[ NORMAL ] Iteration 183:\tk_eff = 1.220875\tres = 6.353E-05\n", - "[ NORMAL ] Iteration 184:\tk_eff = 1.220946\tres = 6.092E-05\n", - "[ NORMAL ] Iteration 185:\tk_eff = 1.221015\tres = 5.826E-05\n", - "[ NORMAL ] Iteration 186:\tk_eff = 1.221081\tres = 5.613E-05\n", - "[ NORMAL ] Iteration 187:\tk_eff = 1.221145\tres = 5.433E-05\n", - "[ NORMAL ] Iteration 188:\tk_eff = 1.221206\tres = 5.230E-05\n", - "[ NORMAL ] Iteration 189:\tk_eff = 1.221266\tres = 5.025E-05\n", - "[ NORMAL ] Iteration 190:\tk_eff = 1.221322\tres = 4.833E-05\n", - "[ NORMAL ] Iteration 191:\tk_eff = 1.221376\tres = 4.642E-05\n", - "[ NORMAL ] Iteration 192:\tk_eff = 1.221429\tres = 4.437E-05\n", - "[ NORMAL ] Iteration 193:\tk_eff = 1.221479\tres = 4.286E-05\n", - "[ NORMAL ] Iteration 194:\tk_eff = 1.221528\tres = 4.123E-05\n", - "[ NORMAL ] Iteration 195:\tk_eff = 1.221574\tres = 3.993E-05\n", - "[ NORMAL ] Iteration 196:\tk_eff = 1.221619\tres = 3.785E-05\n", - "[ NORMAL ] Iteration 197:\tk_eff = 1.221662\tres = 3.669E-05\n", - "[ NORMAL ] Iteration 198:\tk_eff = 1.221704\tres = 3.547E-05\n", - "[ NORMAL ] Iteration 199:\tk_eff = 1.221743\tres = 3.387E-05\n", - "[ NORMAL ] Iteration 200:\tk_eff = 1.221781\tres = 3.243E-05\n", - "[ NORMAL ] Iteration 201:\tk_eff = 1.221818\tres = 3.127E-05\n", - "[ NORMAL ] Iteration 202:\tk_eff = 1.221854\tres = 3.018E-05\n", - "[ NORMAL ] Iteration 203:\tk_eff = 1.221888\tres = 2.924E-05\n", - "[ NORMAL ] Iteration 204:\tk_eff = 1.221921\tres = 2.786E-05\n", - "[ NORMAL ] Iteration 205:\tk_eff = 1.221952\tres = 2.677E-05\n", - "[ NORMAL ] Iteration 206:\tk_eff = 1.221982\tres = 2.579E-05\n", - "[ NORMAL ] Iteration 207:\tk_eff = 1.222011\tres = 2.468E-05\n", - "[ NORMAL ] Iteration 208:\tk_eff = 1.222039\tres = 2.377E-05\n", - "[ NORMAL ] Iteration 209:\tk_eff = 1.222066\tres = 2.288E-05\n", - "[ NORMAL ] Iteration 210:\tk_eff = 1.222093\tres = 2.204E-05\n", - "[ NORMAL ] Iteration 211:\tk_eff = 1.222118\tres = 2.117E-05\n", - "[ NORMAL ] Iteration 212:\tk_eff = 1.222141\tres = 2.044E-05\n", - "[ NORMAL ] Iteration 213:\tk_eff = 1.222165\tres = 1.954E-05\n", - "[ NORMAL ] Iteration 214:\tk_eff = 1.222187\tres = 1.899E-05\n", - "[ NORMAL ] Iteration 215:\tk_eff = 1.222208\tres = 1.797E-05\n", - "[ NORMAL ] Iteration 216:\tk_eff = 1.222229\tres = 1.745E-05\n", - "[ NORMAL ] Iteration 217:\tk_eff = 1.222248\tres = 1.686E-05\n", - "[ NORMAL ] Iteration 218:\tk_eff = 1.222267\tres = 1.623E-05\n", - "[ NORMAL ] Iteration 219:\tk_eff = 1.222286\tres = 1.568E-05\n", - "[ NORMAL ] Iteration 220:\tk_eff = 1.222304\tres = 1.508E-05\n", - "[ NORMAL ] Iteration 221:\tk_eff = 1.222320\tres = 1.458E-05\n", - "[ NORMAL ] Iteration 222:\tk_eff = 1.222337\tres = 1.387E-05\n", - "[ NORMAL ] Iteration 223:\tk_eff = 1.222353\tres = 1.337E-05\n", - "[ NORMAL ] Iteration 224:\tk_eff = 1.222368\tres = 1.286E-05\n", - "[ NORMAL ] Iteration 225:\tk_eff = 1.222382\tres = 1.230E-05\n", - "[ NORMAL ] Iteration 226:\tk_eff = 1.222396\tres = 1.201E-05\n", - "[ NORMAL ] Iteration 227:\tk_eff = 1.222409\tres = 1.131E-05\n", - "[ NORMAL ] Iteration 228:\tk_eff = 1.222422\tres = 1.082E-05\n", - "[ NORMAL ] Iteration 229:\tk_eff = 1.222435\tres = 1.051E-05\n", - "[ NORMAL ] Iteration 230:\tk_eff = 1.222447\tres = 1.015E-05\n" - ] - } - ], + "outputs": [], "source": [ "# Generate tracks for OpenMOC\n", - "openmoc_geometry.initializeFlatSourceRegions()\n", "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=128, spacing=0.1)\n", "track_generator.generateTracks()\n", "\n", @@ -1733,21 +897,11 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "openmc keff = 1.223729\n", - "openmoc keff = 1.222447\n", - "bias [pcm]: -128.2\n" - ] - } - ], + "outputs": [], "source": [ "# Print report of keff and bias with OpenMC\n", "openmoc_keff = solver.getKeff()\n", @@ -1790,7 +944,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1816,32 +970,11 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "(9.9999999999999994e-12, 20.0)" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nHuXpp5/kt99+a/F9NifnkwJAYSFcc00NDz9cxbhxhVxwQRFr1qS7VMaYWCrPG02wtFO7HjNY2onK\n82K3EoBIZX7AAQczZ84bfPLJx5HZUd09mngc22effcLo0SMZPXokH3zwHj169OT7778DoHfvTZg8\n+QHuuOMefvllZeQ1m2++BQDffruMnXd2Zkrt1q07paWl/PbbrzHLC7DLLruSl5dHUVERW265FStW\n/NBi+ZrToU6bd989wJtvrueGGwoZOrSUu+6qYt99A+kuljEmSuWo0U128yRb796bUFVVyfPPP8O5\n546OzJoaCASorKzE5/OxdGnj+XU8Hg/BYF1dstNOuzB58gOR37t06cadd06gT59+dO3qdCF99NF/\n653xe73OOfoWW/Tl008/pl+/bfjll5WsW7eWzp03oKCggFWrfqFXr41ZsmQxffr0BZwWDTitjWXL\nlrLpppu36TPoUEkBoFMnmDixmjff9DNmTBGHHurnmmuqKSlJd8mMMekSPWi8//4H8vrr/8emm27G\nDz98j8fj4fjjT6o3S2n06wB23rk/Y8eOYcSIs2POjiqyLX/961huvvn6yDTYPXr04Kabbg0fKbLv\naaeNYPz4G3j77Teprq7i0kuvIi8vj1NO+TOXXDKGXr02pnPnzpH9169fz0UXjWLt2rWMGHFOveda\n9Vlk4iypItITmKmqA5vbr62zpP7+O1xxRRGffJLHPfdUMmBA8zc2ZNIshxYrs2KlOp7Fyq5YyYr3\n8cfzeeedN7n44ksTipVVs6SKiAe4BFiW7Fgbbgj33VfFFVdUc9ppxYwfX0CMRZGMMSYjRbdw2kvG\nJQXgXOBJIGVzn/7xj37eequChQvzOOSQEr78MhM/FmOMqa9//wFcdNEl7XrMlNZ+IrK7iLzlPvaK\nyP0i8r6IvCUiW7m7HQCMBAaJyHGpKlvPniGeeKKSs86q4dhji7nnnnwCNgZtjOlgUpYURORS4EGg\n0N10NFCgqnsClwO3A6jqcap6HjBPVV9IVfnAmVzvlFP8vPZaBbNn+zj66GKWLrVpMowxHUcqWwpf\nAcdSN8y+N/AagKrOA3aL3llV/5zCstWzxRYhXnyxksMO83PooSVMm5Zv02QYYzqElCUFVZ0ORK92\nUAaUR/0eEJGM6cz3euG882p5+eVKnnwyn5NPLubHH9NdKmOMSa503qdQjpMYwryqmtBk1z6fl86d\n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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Create a loglog plot of the U-235 continuous-energy fission cross section \n", "plt.loglog(u235.energy, fission.sigma, color='b', linewidth=1)\n", @@ -1877,22 +1010,11 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", - " return c.reshape(shape_out)\n", - "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", - " return c.reshape(shape_out)\n" - ] - } - ], + "outputs": [], "source": [ "# Construct a Pandas DataFrame for the microscopic nu-scattering matrix\n", "nuscatter = xs_library[moderator_cell.id]['nu-scatter']\n", @@ -1920,22 +1042,11 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "image/png": "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\nq6n/BzrS9bjl9QXqAAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Create plot of the H-1 scattering matrix\n", "fig = plt.subplot(121)\n", @@ -1956,6 +1067,15 @@ "# Show the plot on screen\n", "plt.show()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { @@ -1974,7 +1094,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.10" + "version": "2.7.6" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index 119fd0b564..a541efbf0b 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -1452,7 +1452,6 @@ ], "source": [ "# Generate tracks for OpenMOC\n", - "openmoc_geometry.initializeFlatSourceRegions()\n", "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=32, spacing=0.1)\n", "track_generator.generateTracks()\n", "\n", @@ -1638,7 +1637,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.10" + "version": "2.7.6" } }, "nbformat": 4, diff --git a/openmc/tallies.py b/openmc/tallies.py index 980c5fa2b5..9b75f35d48 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1003,16 +1003,17 @@ class Tally(object): A list of filter type strings (e.g., ['mesh', 'energy']; default is []) filter_bins : list of Iterables - A list of the filter bins corresponding to the filter_types - parameter (e.g., [(1,), (0., 0.625e-6)]; default is []). Each bin - in the list is the integer ID for 'material', 'surface', 'cell', - 'cellborn', and 'universe' Filters. Each bin is an integer for the - cell instance ID for 'distribcell' Filters. Each bin is a 2-tuple of - floats for 'energy' and 'energyout' filters corresponding to the - energy boundaries of the bin of interest. The bin is a (x,y,z) - 3-tuple for 'mesh' filters corresponding to the mesh cell of - interest. The order of the bins in the list must correspond to the - filter_types parameter. + A list of tuples of filter bins corresponding to the filter_types + parameter (e.g., [(1,), ((0., 0.625e-6),)]; default is []). Each + tuple contains bins for the corresponding filter type in the filters + parameter. Each bins is the integer ID for 'material', 'surface', + 'cell', 'cellborn', and 'universe' Filters. Each bin is an integer + for the cell instance ID for 'distribcell' Filters. Each bin is a + 2-tuple of floats for 'energy' and 'energyout' filters corresponding + to the energy boundaries of the bin of interest. The bin is an + (x,y,z) 3-tuple for 'mesh' filters corresponding to the mesh cell + of interest. The order of the bins in the list must correspond to + the filter_types parameter. Returns ------- @@ -1174,16 +1175,17 @@ class Tally(object): A list of filter type strings (e.g., ['mesh', 'energy']; default is []) filter_bins : list of Iterables - A list of the filter bins corresponding to the filter_types - parameter (e.g., [(1,), (0., 0.625e-6)]; default is []). Each bin - in the list is the integer ID for 'material', 'surface', 'cell', - 'cellborn', and 'universe' Filters. Each bin is an integer for the - cell instance ID for 'distribcell' Filters. Each bin is a 2-tuple of - floats for 'energy' and 'energyout' filters corresponding to the - energy boundaries of the bin of interest. The bin is a (x,y,z) - 3-tuple for 'mesh' filters corresponding to the mesh cell of - interest. The order of the bins in the list must correspond to the - filter_types parameter. + A list of tuples of filter bins corresponding to the filter_types + parameter (e.g., [(1,), ((0., 0.625e-6),)]; default is []). Each + tuple contains bins for the corresponding filter type in the filters + parameter. Each bins is the integer ID for 'material', 'surface', + 'cell', 'cellborn', and 'universe' Filters. Each bin is an integer + for the cell instance ID for 'distribcell' Filters. Each bin is a + 2-tuple of floats for 'energy' and 'energyout' filters corresponding + to the energy boundaries of the bin of interest. The bin is an + (x,y,z) 3-tuple for 'mesh' filters corresponding to the mesh cell + of interest. The order of the bins in the list must correspond to + the filter_types parameter. nuclides : list of str A list of nuclide name strings (e.g., ['U-235', 'U-238']; default is []) @@ -2641,16 +2643,17 @@ class Tally(object): A list of filter type strings (e.g., ['mesh', 'energy']; default is []) filter_bins : list of Iterables - A list of the filter bins corresponding to the filter_types - parameter (e.g., [(1,), (0., 0.625e-6)]; default is []). Each bin - in the list is the integer ID for 'material', 'surface', 'cell', - 'cellborn', and 'universe' Filters. Each bin is an integer for the - cell instance ID for 'distribcell' Filters. Each bin is a 2-tuple of - floats for 'energy' and 'energyout' filters corresponding to the - energy boundaries of the bin of interest. The bin is a (x,y,z) - 3-tuple for 'mesh' filters corresponding to the mesh cell of - interest. The order of the bins in the list must correspond to the - filter_types parameter. + A list of tuples of filter bins corresponding to the filter_types + parameter (e.g., [(1,), ((0., 0.625e-6),)]; default is []). Each + tuple contains bins to slice for the corresponding filter type in + the filters parameter. Each bins is the integer ID for 'material', + 'surface', 'cell', 'cellborn', and 'universe' Filters. Each bin is + an integer for the cell instance ID for 'distribcell' Filters. Each + bin is a 2-tuple of floats for 'energy' and 'energyout' filters + corresponding to the energy boundaries of the bin of interest. The + bin is an (x,y,z) 3-tuple for 'mesh' filters corresponding to the + mesh cell of interest. The order of the bins in the list must + correspond to the filter_types parameter. nuclides : list of str A list of nuclide name strings (e.g., ['U-235', 'U-238']; default is []) @@ -2736,6 +2739,7 @@ class Tally(object): for filter_bin in filter_bins[i]: bin_index = find_filter.get_bin_index(filter_bin) if filter_type in ['energy', 'energyout']: + bin_indices.extend([bin_index]) bin_indices.extend([bin_index, bin_index+1]) num_bins += 1 elif filter_type == 'distribcell': @@ -2745,7 +2749,7 @@ class Tally(object): bin_indices.append(bin_index) num_bins += 1 - find_filter.bins = find_filter.bins[bin_indices] + find_filter.bins = set(find_filter.bins[bin_indices]) find_filter.num_bins = num_bins # Update the new tally's filter strides From 454d624de5ae4a1d28ae49face918f33b3178146 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Wed, 20 Jan 2016 18:17:58 -0500 Subject: [PATCH 208/650] Fixed MGXS II Notebook which was only partially complete in last commit --- .../pythonapi/examples/mgxs-part-ii.ipynb | 959 +++++++++++++++++- 1 file changed, 923 insertions(+), 36 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index 764bb0d412..593d536474 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -388,7 +388,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": { "collapsed": false }, @@ -425,7 +425,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": { "collapsed": false }, @@ -451,7 +451,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", " Git SHA1: 263266f4f8807fd38c6ac282fae259ae73fa1eee\n", - " Date/Time: 2016-01-20 17:57:53\n", + " Date/Time: 2016-01-20 18:12:40\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -510,8 +510,101 @@ " 30/1 1.23670 1.22056 +/- 0.00368\n", " 31/1 1.21396 1.22024 +/- 0.00352\n", " 32/1 1.21389 1.21995 +/- 0.00337\n", - " 33/1 1.24649 1.22111 +/- 0.00342\n" + " 33/1 1.24649 1.22111 +/- 0.00342\n", + " 34/1 1.23204 1.22156 +/- 0.00330\n", + " 35/1 1.20768 1.22101 +/- 0.00322\n", + " 36/1 1.22271 1.22107 +/- 0.00309\n", + " 37/1 1.21796 1.22096 +/- 0.00298\n", + " 38/1 1.23842 1.22158 +/- 0.00293\n", + " 39/1 1.23080 1.22190 +/- 0.00285\n", + " 40/1 1.23572 1.22236 +/- 0.00279\n", + " 41/1 1.21691 1.22218 +/- 0.00271\n", + " 42/1 1.24616 1.22293 +/- 0.00272\n", + " 43/1 1.21903 1.22282 +/- 0.00264\n", + " 44/1 1.22967 1.22302 +/- 0.00257\n", + " 45/1 1.22053 1.22295 +/- 0.00250\n", + " 46/1 1.24087 1.22344 +/- 0.00248\n", + " 47/1 1.20251 1.22288 +/- 0.00248\n", + " 48/1 1.20331 1.22236 +/- 0.00246\n", + " 49/1 1.22724 1.22249 +/- 0.00240\n", + " 50/1 1.24798 1.22313 +/- 0.00243\n", + " Triggers unsatisfied, max unc./thresh. is 1.32110 for scatter-p1 in tally 10054\n", + " The estimated number of batches is 80\n", + " Creating state point statepoint.050.h5...\n", + " 51/1 1.22253 1.22311 +/- 0.00237\n", + " 52/1 1.24330 1.22359 +/- 0.00236\n", + " 53/1 1.23251 1.22380 +/- 0.00231\n", + " 54/1 1.21133 1.22352 +/- 0.00228\n", + " 55/1 1.24503 1.22399 +/- 0.00228\n", + " 56/1 1.22013 1.22391 +/- 0.00223\n", + " 57/1 1.23877 1.22423 +/- 0.00220\n", + " 58/1 1.23793 1.22451 +/- 0.00218\n", + " 59/1 1.21018 1.22422 +/- 0.00215\n", + " 60/1 1.22417 1.22422 +/- 0.00211\n", + " 61/1 1.23094 1.22435 +/- 0.00207\n", + " 62/1 1.23310 1.22452 +/- 0.00204\n", + " 63/1 1.22488 1.22453 +/- 0.00200\n", + " 64/1 1.22702 1.22457 +/- 0.00196\n", + " 65/1 1.18834 1.22391 +/- 0.00204\n", + " 66/1 1.23112 1.22404 +/- 0.00200\n", + " 67/1 1.21611 1.22390 +/- 0.00197\n", + " 68/1 1.22513 1.22392 +/- 0.00194\n", + " 69/1 1.21741 1.22381 +/- 0.00191\n", + " 70/1 1.22484 1.22383 +/- 0.00188\n", + " 71/1 1.19662 1.22338 +/- 0.00190\n", + " 72/1 1.23315 1.22354 +/- 0.00187\n", + " 73/1 1.22796 1.22361 +/- 0.00185\n", + " 74/1 1.21417 1.22346 +/- 0.00182\n", + " 75/1 1.21020 1.22326 +/- 0.00181\n", + " 76/1 1.23413 1.22343 +/- 0.00179\n", + " 77/1 1.22184 1.22340 +/- 0.00176\n", + " 78/1 1.20309 1.22310 +/- 0.00176\n", + " 79/1 1.23458 1.22327 +/- 0.00174\n", + " 80/1 1.20724 1.22304 +/- 0.00173\n", + " Triggers satisfied for batch 80\n", + " Creating state point statepoint.080.h5...\n", + "\n", + " ===========================================================================\n", + " ======================> SIMULATION FINISHED <======================\n", + " ===========================================================================\n", + "\n", + "\n", + " =======================> TIMING STATISTICS <=======================\n", + "\n", + " Total time for initialization = 4.3200E-01 seconds\n", + " Reading cross sections = 9.1000E-02 seconds\n", + " Total time in simulation = 2.2239E+02 seconds\n", + " Time in transport only = 2.2234E+02 seconds\n", + " Time in inactive batches = 1.3715E+01 seconds\n", + " Time in active batches = 2.0867E+02 seconds\n", + " Time synchronizing fission bank = 2.3000E-02 seconds\n", + " Sampling source sites = 1.7000E-02 seconds\n", + " SEND/RECV source sites = 6.0000E-03 seconds\n", + " Time accumulating tallies = 2.0000E-03 seconds\n", + " Total time for finalization = 9.0000E-03 seconds\n", + " Total time elapsed = 2.2288E+02 seconds\n", + " Calculation Rate (inactive) = 7291.29 neutrons/second\n", + " Calculation Rate (active) = 1916.88 neutrons/second\n", + "\n", + " ============================> RESULTS <============================\n", + "\n", + " k-effective (Collision) = 1.22327 +/- 0.00148\n", + " k-effective (Track-length) = 1.22304 +/- 0.00173\n", + " k-effective (Absorption) = 1.22407 +/- 0.00129\n", + " Combined k-effective = 1.22373 +/- 0.00113\n", + " Leakage Fraction = 0.00000 +/- 0.00000\n", + "\n" ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -536,7 +629,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": { "collapsed": false }, @@ -555,7 +648,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": { "collapsed": true }, @@ -575,7 +668,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -610,11 +703,46 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Multi-Group XS\n", + "\tReaction Type =\tnu-fission\n", + "\tDomain Type =\tcell\n", + "\tDomain ID =\t10000\n", + "\tNuclide =\tU-235\n", + "\tCross Sections [barns]:\n", + " Group 1 [0.821 - 20.0 MeV]:\t3.31e+00 +/- 1.88e-01%\n", + " Group 2 [0.00553 - 0.821 MeV]:\t3.97e+00 +/- 1.24e-01%\n", + " Group 3 [4e-06 - 0.00553 MeV]:\t5.50e+01 +/- 2.02e-01%\n", + " Group 4 [6.25e-07 - 4e-06 MeV]:\t8.83e+01 +/- 3.56e-01%\n", + " Group 5 [2.8e-07 - 6.25e-07 MeV]:\t2.90e+02 +/- 4.54e-01%\n", + " Group 6 [1.4e-07 - 2.8e-07 MeV]:\t4.49e+02 +/- 4.10e-01%\n", + " Group 7 [5.8e-08 - 1.4e-07 MeV]:\t6.87e+02 +/- 2.56e-01%\n", + " Group 8 [0.0 - 5.8e-08 MeV]:\t1.44e+03 +/- 2.82e-01%\n", + "\n", + "\tNuclide =\tU-238\n", + "\tCross Sections [barns]:\n", + " Group 1 [0.821 - 20.0 MeV]:\t1.06e+00 +/- 2.30e-01%\n", + " Group 2 [0.00553 - 0.821 MeV]:\t1.21e-03 +/- 2.25e-01%\n", + " Group 3 [4e-06 - 0.00553 MeV]:\t5.82e-04 +/- 3.09e+00%\n", + " Group 4 [6.25e-07 - 4e-06 MeV]:\t6.54e-06 +/- 3.27e-01%\n", + " Group 5 [2.8e-07 - 6.25e-07 MeV]:\t1.07e-05 +/- 4.39e-01%\n", + " Group 6 [1.4e-07 - 2.8e-07 MeV]:\t1.55e-05 +/- 4.12e-01%\n", + " Group 7 [5.8e-08 - 1.4e-07 MeV]:\t2.30e-05 +/- 2.57e-01%\n", + " Group 8 [0.0 - 5.8e-08 MeV]:\t4.24e-05 +/- 2.81e-01%\n", + "\n", + "\n", + "\n" + ] + } + ], "source": [ "nufission = xs_library[fuel_cell.id]['nu-fission']\n", "nufission.print_xs(xs_type='micro', nuclides=['U-235', 'U-238'])" @@ -629,11 +757,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Multi-Group XS\n", + "\tReaction Type =\tnu-fission\n", + "\tDomain Type =\tcell\n", + "\tDomain ID =\t10000\n", + "\tCross Sections [cm^-1]:\n", + " Group 1 [0.821 - 20.0 MeV]:\t2.52e-02 +/- 2.19e-01%\n", + " Group 2 [0.00553 - 0.821 MeV]:\t1.51e-03 +/- 1.22e-01%\n", + " Group 3 [4e-06 - 0.00553 MeV]:\t2.06e-02 +/- 2.02e-01%\n", + " Group 4 [6.25e-07 - 4e-06 MeV]:\t3.31e-02 +/- 3.56e-01%\n", + " Group 5 [2.8e-07 - 6.25e-07 MeV]:\t1.09e-01 +/- 4.54e-01%\n", + " Group 6 [1.4e-07 - 2.8e-07 MeV]:\t1.69e-01 +/- 4.10e-01%\n", + " Group 7 [5.8e-08 - 1.4e-07 MeV]:\t2.58e-01 +/- 2.56e-01%\n", + " Group 8 [0.0 - 5.8e-08 MeV]:\t5.40e-01 +/- 2.82e-01%\n", + "\n", + "\n", + "\n" + ] + } + ], "source": [ "nufission = xs_library[fuel_cell.id]['nu-fission']\n", "nufission.print_xs(xs_type='macro', nuclides='sum')" @@ -648,11 +799,152 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", + " return c.reshape(shape_out)\n", + "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", + " return c.reshape(shape_out)\n", + "/usr/local/lib/python2.7/dist-packages/openmc-0.7.1-py2.7.egg/openmc/mgxs/mgxs.py:1303: FutureWarning: sort(columns=....) is deprecated, use sort_values(by=.....)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
cellgroup ingroup outnuclidemeanstd. dev.
1261000211H-10.2340220.003645
1271000211O-161.5603050.006280
1241000212H-11.5880250.002815
1251000212O-160.2851470.001392
1221000213H-10.0107760.000186
1231000213O-160.0000000.000000
1201000214H-10.0000230.000010
1211000214O-160.0000000.000000
1181000215H-10.0000000.000000
1191000215O-160.0000000.000000
\n", + "
" + ], + "text/plain": [ + " cell group in group out nuclide mean std. dev.\n", + "126 10002 1 1 H-1 0.234022 0.003645\n", + "127 10002 1 1 O-16 1.560305 0.006280\n", + "124 10002 1 2 H-1 1.588025 0.002815\n", + "125 10002 1 2 O-16 0.285147 0.001392\n", + "122 10002 1 3 H-1 0.010776 0.000186\n", + "123 10002 1 3 O-16 0.000000 0.000000\n", + "120 10002 1 4 H-1 0.000023 0.000010\n", + "121 10002 1 4 O-16 0.000000 0.000000\n", + "118 10002 1 5 H-1 0.000000 0.000000\n", + "119 10002 1 5 O-16 0.000000 0.000000" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "nuscatter = xs_library[moderator_cell.id]['nu-scatter']\n", "df = nuscatter.get_pandas_dataframe(xs_type='micro')\n", @@ -668,7 +960,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": { "collapsed": true }, @@ -690,22 +982,143 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Multi-Group XS\n", + "\tReaction Type =\ttransport\n", + "\tDomain Type =\tcell\n", + "\tDomain ID =\t10000\n", + "\tNuclide =\tU-235\n", + "\tCross Sections [cm^-1]:\n", + " Group 1 [6.25e-07 - 20.0 MeV]:\t7.81e-03 +/- 4.75e-01%\n", + " Group 2 [0.0 - 6.25e-07 MeV]:\t1.82e-01 +/- 1.89e-01%\n", + "\n", + "\tNuclide =\tU-238\n", + "\tCross Sections [cm^-1]:\n", + " Group 1 [6.25e-07 - 20.0 MeV]:\t2.17e-01 +/- 1.31e-01%\n", + " Group 2 [0.0 - 6.25e-07 MeV]:\t2.53e-01 +/- 2.08e-01%\n", + "\n", + "\tNuclide =\tO-16\n", + "\tCross Sections [cm^-1]:\n", + " Group 1 [6.25e-07 - 20.0 MeV]:\t1.45e-01 +/- 1.50e-01%\n", + " Group 2 [0.0 - 6.25e-07 MeV]:\t1.74e-01 +/- 2.66e-01%\n", + "\n", + "\n", + "\n" + ] + } + ], "source": [ "condensed_xs.print_xs()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", + " return c.reshape(shape_out)\n", + "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", + " return c.reshape(shape_out)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
cellgroup innuclidemeanstd. dev.
3100001U-23520.8281270.098842
4100001U-2389.5822950.012550
5100001O-163.1573580.004725
0100002U-235485.2176490.916465
1100002U-23811.1760810.023196
2100002O-163.7881670.010090
\n", + "
" + ], + "text/plain": [ + " cell group in nuclide mean std. dev.\n", + "3 10000 1 U-235 20.828127 0.098842\n", + "4 10000 1 U-238 9.582295 0.012550\n", + "5 10000 1 O-16 3.157358 0.004725\n", + "0 10000 2 U-235 485.217649 0.916465\n", + "1 10000 2 U-238 11.176081 0.023196\n", + "2 10000 2 O-16 3.788167 0.010090" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df = condensed_xs.get_pandas_dataframe(xs_type='micro')\n", "df" @@ -727,7 +1140,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -746,7 +1159,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": { "collapsed": false }, @@ -791,11 +1204,182 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ NORMAL ] Importing ray tracing data from file...\n", + "[ NORMAL ] Computing the eigenvalue...\n", + "[ NORMAL ] Iteration 0:\tk_eff = 0.574633\tres = 5.948E-317\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.679931\tres = 4.254E-01\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.660910\tres = 1.832E-01\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.658975\tres = 2.797E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.642976\tres = 2.928E-03\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.625710\tres = 2.428E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.606520\tres = 2.685E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.587277\tres = 3.067E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.568777\tres = 3.173E-02\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.551415\tres = 3.150E-02\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.535708\tres = 3.052E-02\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.521916\tres = 2.849E-02\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.510221\tres = 2.575E-02\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.500691\tres = 2.241E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.493392\tres = 1.868E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.488317\tres = 1.458E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.485438\tres = 1.028E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.484705\tres = 5.896E-03\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.486045\tres = 1.510E-03\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.489362\tres = 2.766E-03\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.494546\tres = 6.824E-03\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.501481\tres = 1.059E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.510041\tres = 1.402E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.520094\tres = 1.707E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.531507\tres = 1.971E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.544144\tres = 2.194E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.557872\tres = 2.378E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.572557\tres = 2.523E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.588072\tres = 2.632E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.604293\tres = 2.710E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.621101\tres = 2.758E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.638382\tres = 2.781E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.656032\tres = 2.782E-02\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.673950\tres = 2.765E-02\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.692043\tres = 2.731E-02\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.710227\tres = 2.685E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.728423\tres = 2.628E-02\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.746558\tres = 2.562E-02\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.764569\tres = 2.490E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.782396\tres = 2.412E-02\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.799989\tres = 2.332E-02\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.817301\tres = 2.249E-02\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.834292\tres = 2.164E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.850927\tres = 2.079E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.867177\tres = 1.994E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.883017\tres = 1.910E-02\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.898427\tres = 1.827E-02\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.913389\tres = 1.745E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.927891\tres = 1.665E-02\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.941925\tres = 1.588E-02\n", + "[ NORMAL ] Iteration 50:\tk_eff = 0.955483\tres = 1.512E-02\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.968562\tres = 1.439E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.981161\tres = 1.369E-02\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.993282\tres = 1.301E-02\n", + "[ NORMAL ] Iteration 54:\tk_eff = 1.004928\tres = 1.235E-02\n", + "[ NORMAL ] Iteration 55:\tk_eff = 1.016104\tres = 1.172E-02\n", + "[ NORMAL ] Iteration 56:\tk_eff = 1.026816\tres = 1.112E-02\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.037073\tres = 1.054E-02\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.046883\tres = 9.989E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.056257\tres = 9.460E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.065205\tres = 8.954E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.073739\tres = 8.472E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.081871\tres = 8.012E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.089613\tres = 7.573E-03\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.096979\tres = 7.156E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.103980\tres = 6.760E-03\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.110631\tres = 6.382E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.116943\tres = 6.024E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.122931\tres = 5.684E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.128607\tres = 5.361E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.133984\tres = 5.055E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.139075\tres = 4.764E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.143892\tres = 4.489E-03\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.148447\tres = 4.229E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.152752\tres = 3.982E-03\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.156819\tres = 3.749E-03\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.160659\tres = 3.528E-03\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.164282\tres = 3.319E-03\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.167701\tres = 3.122E-03\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.170923\tres = 2.936E-03\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.173961\tres = 2.760E-03\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.176822\tres = 2.594E-03\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.179516\tres = 2.437E-03\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.182052\tres = 2.289E-03\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.184438\tres = 2.150E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.186682\tres = 2.019E-03\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.188792\tres = 1.895E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.190775\tres = 1.778E-03\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.192639\tres = 1.668E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.194389\tres = 1.565E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.196032\tres = 1.468E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.197575\tres = 1.376E-03\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.199023\tres = 1.290E-03\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.200381\tres = 1.209E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.201654\tres = 1.133E-03\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.202849\tres = 1.061E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.203968\tres = 9.939E-04\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.205017\tres = 9.307E-04\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.206000\tres = 8.714E-04\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.206921\tres = 8.157E-04\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.207783\tres = 7.634E-04\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.208590\tres = 7.144E-04\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.209346\tres = 6.684E-04\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.210053\tres = 6.252E-04\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.210715\tres = 5.848E-04\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.211334\tres = 5.468E-04\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.211913\tres = 5.113E-04\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.212454\tres = 4.779E-04\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.212960\tres = 4.467E-04\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.213434\tres = 4.175E-04\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.213876\tres = 3.901E-04\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.214289\tres = 3.644E-04\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.214675\tres = 3.404E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.215036\tres = 3.180E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.215373\tres = 2.969E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.215687\tres = 2.773E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.215981\tres = 2.589E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.216255\tres = 2.416E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.216511\tres = 2.256E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.216750\tres = 2.105E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.216973\tres = 1.964E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.217181\tres = 1.833E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.217376\tres = 1.710E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.217557\tres = 1.595E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.217726\tres = 1.488E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.217883\tres = 1.388E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.218030\tres = 1.294E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.218167\tres = 1.207E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.218295\tres = 1.125E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.218414\tres = 1.049E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.218525\tres = 9.777E-05\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.218629\tres = 9.113E-05\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.218725\tres = 8.494E-05\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.218815\tres = 7.916E-05\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.218899\tres = 7.376E-05\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.218977\tres = 6.873E-05\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.219050\tres = 6.404E-05\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.219117\tres = 5.966E-05\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.219180\tres = 5.557E-05\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.219239\tres = 5.177E-05\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.219294\tres = 4.822E-05\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.219345\tres = 4.491E-05\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.219392\tres = 4.182E-05\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.219437\tres = 3.894E-05\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.219478\tres = 3.626E-05\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.219516\tres = 3.376E-05\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.219552\tres = 3.144E-05\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.219585\tres = 2.927E-05\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.219616\tres = 2.724E-05\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.219645\tres = 2.536E-05\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.219672\tres = 2.361E-05\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.219696\tres = 2.197E-05\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.219720\tres = 2.045E-05\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.219741\tres = 1.903E-05\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.219761\tres = 1.771E-05\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.219780\tres = 1.648E-05\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.219797\tres = 1.534E-05\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.219814\tres = 1.427E-05\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.219829\tres = 1.328E-05\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.219843\tres = 1.235E-05\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.219856\tres = 1.149E-05\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.219868\tres = 1.069E-05\n" + ] + } + ], "source": [ "# Generate tracks for OpenMOC\n", "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=128, spacing=0.1)\n", @@ -815,11 +1399,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "openmc keff = 1.223729\n", + "openmoc keff = 1.219868\n", + "bias [pcm]: -386.1\n" + ] + } + ], "source": [ "# Print report of keff and bias with OpenMC\n", "openmoc_keff = solver.getKeff()\n", @@ -840,7 +1434,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -880,11 +1474,251 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ NORMAL ] Importing ray tracing data from file...\n", + "[ NORMAL ] Computing the eigenvalue...\n", + "[ NORMAL ] Iteration 0:\tk_eff = 0.495594\tres = 5.948E-317\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.557312\tres = 5.044E-01\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.518115\tres = 1.245E-01\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.509016\tres = 7.033E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.496279\tres = 1.756E-02\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.488357\tres = 2.502E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.482659\tres = 1.596E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.479523\tres = 1.167E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.478568\tres = 6.497E-03\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.479590\tres = 1.991E-03\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.482388\tres = 2.136E-03\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.486774\tres = 5.834E-03\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.492575\tres = 9.091E-03\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.499632\tres = 1.192E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.507799\tres = 1.433E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.516943\tres = 1.635E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.526942\tres = 1.801E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.537681\tres = 1.934E-02\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.549060\tres = 2.038E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.560984\tres = 2.116E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.573368\tres = 2.172E-02\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.586133\tres = 2.207E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.599207\tres = 2.226E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.612528\tres = 2.231E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.626035\tres = 2.223E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.639676\tres = 2.205E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.653402\tres = 2.179E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.667170\tres = 2.146E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.680942\tres = 2.107E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.694681\tres = 2.064E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.708356\tres = 2.018E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.721940\tres = 1.969E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.735406\tres = 1.918E-02\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.748734\tres = 1.865E-02\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.761904\tres = 1.812E-02\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.774897\tres = 1.759E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.787700\tres = 1.705E-02\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.800299\tres = 1.652E-02\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.812684\tres = 1.600E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.824844\tres = 1.547E-02\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.836772\tres = 1.496E-02\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.848462\tres = 1.446E-02\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.859908\tres = 1.397E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.871105\tres = 1.349E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.882052\tres = 1.302E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.892745\tres = 1.257E-02\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.903184\tres = 1.212E-02\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.913367\tres = 1.169E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.923297\tres = 1.128E-02\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.932972\tres = 1.087E-02\n", + "[ NORMAL ] Iteration 50:\tk_eff = 0.942394\tres = 1.048E-02\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.951566\tres = 1.010E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.960490\tres = 9.733E-03\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.969168\tres = 9.378E-03\n", + "[ NORMAL ] Iteration 54:\tk_eff = 0.977604\tres = 9.035E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 0.985800\tres = 8.704E-03\n", + "[ NORMAL ] Iteration 56:\tk_eff = 0.993761\tres = 8.384E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.001491\tres = 8.076E-03\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.008992\tres = 7.778E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.016271\tres = 7.490E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.023330\tres = 7.213E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.030174\tres = 6.946E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.036809\tres = 6.688E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.043238\tres = 6.440E-03\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.049466\tres = 6.201E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.055498\tres = 5.970E-03\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.061339\tres = 5.748E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.066993\tres = 5.534E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.072465\tres = 5.327E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.077760\tres = 5.129E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.082882\tres = 4.937E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.087837\tres = 4.753E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.092628\tres = 4.575E-03\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.097260\tres = 4.404E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.101737\tres = 4.239E-03\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.106065\tres = 4.081E-03\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.110247\tres = 3.928E-03\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.114288\tres = 3.781E-03\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.118191\tres = 3.639E-03\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.121961\tres = 3.503E-03\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.125603\tres = 3.372E-03\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.129119\tres = 3.245E-03\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.132513\tres = 3.124E-03\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.135790\tres = 3.007E-03\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.138954\tres = 2.894E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.142007\tres = 2.785E-03\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.144953\tres = 2.681E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.147796\tres = 2.580E-03\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.150539\tres = 2.483E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.153185\tres = 2.390E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.155738\tres = 2.300E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.158200\tres = 2.214E-03\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.160575\tres = 2.130E-03\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.162865\tres = 2.050E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.165073\tres = 1.973E-03\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.167202\tres = 1.899E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.169255\tres = 1.828E-03\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.171234\tres = 1.759E-03\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.173142\tres = 1.693E-03\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.174980\tres = 1.629E-03\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.176753\tres = 1.567E-03\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.178461\tres = 1.508E-03\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.180107\tres = 1.452E-03\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.181694\tres = 1.397E-03\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.183222\tres = 1.344E-03\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.184695\tres = 1.294E-03\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.186115\tres = 1.245E-03\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.187482\tres = 1.198E-03\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.188799\tres = 1.153E-03\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.190068\tres = 1.109E-03\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.191290\tres = 1.067E-03\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.192468\tres = 1.027E-03\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.193602\tres = 9.883E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.194694\tres = 9.510E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.195746\tres = 9.151E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.196759\tres = 8.805E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.197735\tres = 8.473E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.198674\tres = 8.152E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.199579\tres = 7.844E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.200450\tres = 7.548E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.201289\tres = 7.262E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.202097\tres = 6.988E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.202874\tres = 6.723E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.203623\tres = 6.469E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.204344\tres = 6.224E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.205038\tres = 5.989E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.205706\tres = 5.762E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.206349\tres = 5.544E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.206968\tres = 5.334E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.207564\tres = 5.132E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.208138\tres = 4.938E-04\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.208690\tres = 4.751E-04\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.209221\tres = 4.570E-04\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.209733\tres = 4.397E-04\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.210225\tres = 4.231E-04\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.210699\tres = 4.070E-04\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.211155\tres = 3.916E-04\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.211594\tres = 3.767E-04\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.212017\tres = 3.624E-04\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.212423\tres = 3.487E-04\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.212815\tres = 3.355E-04\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.213191\tres = 3.227E-04\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.213554\tres = 3.105E-04\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.213902\tres = 2.987E-04\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.214238\tres = 2.874E-04\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.214561\tres = 2.764E-04\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.214872\tres = 2.659E-04\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.215171\tres = 2.558E-04\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.215458\tres = 2.461E-04\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.215735\tres = 2.368E-04\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.216002\tres = 2.278E-04\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.216258\tres = 2.191E-04\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.216504\tres = 2.108E-04\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.216742\tres = 2.028E-04\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.216970\tres = 1.951E-04\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.217190\tres = 1.876E-04\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.217401\tres = 1.805E-04\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.217604\tres = 1.736E-04\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.217800\tres = 1.670E-04\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.217988\tres = 1.607E-04\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.218169\tres = 1.546E-04\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.218344\tres = 1.487E-04\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.218511\tres = 1.430E-04\n", + "[ NORMAL ] Iteration 163:\tk_eff = 1.218673\tres = 1.376E-04\n", + "[ NORMAL ] Iteration 164:\tk_eff = 1.218828\tres = 1.324E-04\n", + "[ NORMAL ] Iteration 165:\tk_eff = 1.218977\tres = 1.273E-04\n", + "[ NORMAL ] Iteration 166:\tk_eff = 1.219121\tres = 1.225E-04\n", + "[ NORMAL ] Iteration 167:\tk_eff = 1.219259\tres = 1.178E-04\n", + "[ NORMAL ] Iteration 168:\tk_eff = 1.219392\tres = 1.133E-04\n", + "[ NORMAL ] Iteration 169:\tk_eff = 1.219520\tres = 1.090E-04\n", + "[ NORMAL ] Iteration 170:\tk_eff = 1.219643\tres = 1.049E-04\n", + "[ NORMAL ] Iteration 171:\tk_eff = 1.219761\tres = 1.009E-04\n", + "[ NORMAL ] Iteration 172:\tk_eff = 1.219875\tres = 9.702E-05\n", + "[ NORMAL ] Iteration 173:\tk_eff = 1.219984\tres = 9.332E-05\n", + "[ NORMAL ] Iteration 174:\tk_eff = 1.220090\tres = 8.976E-05\n", + "[ NORMAL ] Iteration 175:\tk_eff = 1.220191\tres = 8.634E-05\n", + "[ NORMAL ] Iteration 176:\tk_eff = 1.220288\tres = 8.305E-05\n", + "[ NORMAL ] Iteration 177:\tk_eff = 1.220382\tres = 7.989E-05\n", + "[ NORMAL ] Iteration 178:\tk_eff = 1.220472\tres = 7.684E-05\n", + "[ NORMAL ] Iteration 179:\tk_eff = 1.220559\tres = 7.392E-05\n", + "[ NORMAL ] Iteration 180:\tk_eff = 1.220643\tres = 7.110E-05\n", + "[ NORMAL ] Iteration 181:\tk_eff = 1.220723\tres = 6.839E-05\n", + "[ NORMAL ] Iteration 182:\tk_eff = 1.220800\tres = 6.578E-05\n", + "[ NORMAL ] Iteration 183:\tk_eff = 1.220874\tres = 6.327E-05\n", + "[ NORMAL ] Iteration 184:\tk_eff = 1.220946\tres = 6.086E-05\n", + "[ NORMAL ] Iteration 185:\tk_eff = 1.221015\tres = 5.854E-05\n", + "[ NORMAL ] Iteration 186:\tk_eff = 1.221081\tres = 5.631E-05\n", + "[ NORMAL ] Iteration 187:\tk_eff = 1.221144\tres = 5.416E-05\n", + "[ NORMAL ] Iteration 188:\tk_eff = 1.221206\tres = 5.209E-05\n", + "[ NORMAL ] Iteration 189:\tk_eff = 1.221264\tres = 5.011E-05\n", + "[ NORMAL ] Iteration 190:\tk_eff = 1.221321\tres = 4.820E-05\n", + "[ NORMAL ] Iteration 191:\tk_eff = 1.221375\tres = 4.636E-05\n", + "[ NORMAL ] Iteration 192:\tk_eff = 1.221428\tres = 4.459E-05\n", + "[ NORMAL ] Iteration 193:\tk_eff = 1.221478\tres = 4.289E-05\n", + "[ NORMAL ] Iteration 194:\tk_eff = 1.221527\tres = 4.125E-05\n", + "[ NORMAL ] Iteration 195:\tk_eff = 1.221573\tres = 3.968E-05\n", + "[ NORMAL ] Iteration 196:\tk_eff = 1.221618\tres = 3.816E-05\n", + "[ NORMAL ] Iteration 197:\tk_eff = 1.221661\tres = 3.671E-05\n", + "[ NORMAL ] Iteration 198:\tk_eff = 1.221703\tres = 3.531E-05\n", + "[ NORMAL ] Iteration 199:\tk_eff = 1.221743\tres = 3.396E-05\n", + "[ NORMAL ] Iteration 200:\tk_eff = 1.221781\tres = 3.266E-05\n", + "[ NORMAL ] Iteration 201:\tk_eff = 1.221818\tres = 3.142E-05\n", + "[ NORMAL ] Iteration 202:\tk_eff = 1.221853\tres = 3.022E-05\n", + "[ NORMAL ] Iteration 203:\tk_eff = 1.221888\tres = 2.906E-05\n", + "[ NORMAL ] Iteration 204:\tk_eff = 1.221920\tres = 2.795E-05\n", + "[ NORMAL ] Iteration 205:\tk_eff = 1.221952\tres = 2.689E-05\n", + "[ NORMAL ] Iteration 206:\tk_eff = 1.221982\tres = 2.586E-05\n", + "[ NORMAL ] Iteration 207:\tk_eff = 1.222012\tres = 2.487E-05\n", + "[ NORMAL ] Iteration 208:\tk_eff = 1.222040\tres = 2.392E-05\n", + "[ NORMAL ] Iteration 209:\tk_eff = 1.222067\tres = 2.301E-05\n", + "[ NORMAL ] Iteration 210:\tk_eff = 1.222093\tres = 2.213E-05\n", + "[ NORMAL ] Iteration 211:\tk_eff = 1.222118\tres = 2.129E-05\n", + "[ NORMAL ] Iteration 212:\tk_eff = 1.222142\tres = 2.047E-05\n", + "[ NORMAL ] Iteration 213:\tk_eff = 1.222165\tres = 1.969E-05\n", + "[ NORMAL ] Iteration 214:\tk_eff = 1.222187\tres = 1.894E-05\n", + "[ NORMAL ] Iteration 215:\tk_eff = 1.222209\tres = 1.822E-05\n", + "[ NORMAL ] Iteration 216:\tk_eff = 1.222229\tres = 1.752E-05\n", + "[ NORMAL ] Iteration 217:\tk_eff = 1.222249\tres = 1.685E-05\n", + "[ NORMAL ] Iteration 218:\tk_eff = 1.222268\tres = 1.621E-05\n", + "[ NORMAL ] Iteration 219:\tk_eff = 1.222287\tres = 1.559E-05\n", + "[ NORMAL ] Iteration 220:\tk_eff = 1.222304\tres = 1.499E-05\n", + "[ NORMAL ] Iteration 221:\tk_eff = 1.222321\tres = 1.442E-05\n", + "[ NORMAL ] Iteration 222:\tk_eff = 1.222337\tres = 1.387E-05\n", + "[ NORMAL ] Iteration 223:\tk_eff = 1.222353\tres = 1.334E-05\n", + "[ NORMAL ] Iteration 224:\tk_eff = 1.222368\tres = 1.283E-05\n", + "[ NORMAL ] Iteration 225:\tk_eff = 1.222383\tres = 1.234E-05\n", + "[ NORMAL ] Iteration 226:\tk_eff = 1.222397\tres = 1.187E-05\n", + "[ NORMAL ] Iteration 227:\tk_eff = 1.222410\tres = 1.142E-05\n", + "[ NORMAL ] Iteration 228:\tk_eff = 1.222423\tres = 1.098E-05\n", + "[ NORMAL ] Iteration 229:\tk_eff = 1.222435\tres = 1.056E-05\n", + "[ NORMAL ] Iteration 230:\tk_eff = 1.222447\tres = 1.016E-05\n" + ] + } + ], "source": [ "# Generate tracks for OpenMOC\n", "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=128, spacing=0.1)\n", @@ -897,11 +1731,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "openmc keff = 1.223729\n", + "openmoc keff = 1.222447\n", + "bias [pcm]: -128.2\n" + ] + } + ], "source": [ "# Print report of keff and bias with OpenMC\n", "openmoc_keff = solver.getKeff()\n", @@ -944,7 +1788,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": { "collapsed": false }, @@ -970,11 +1814,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(9.9999999999999994e-12, 20.0)" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nRETE6eQvWE4Yr8iVHuYAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Create a loglog plot of the U-235 continuous-energy fission cross section \n", "plt.loglog(u235.energy, fission.sigma, color='b', linewidth=1)\n", @@ -1010,11 +1875,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", + " return c.reshape(shape_out)\n", + "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", + " return c.reshape(shape_out)\n" + ] + } + ], "source": [ "# Construct a Pandas DataFrame for the microscopic nu-scattering matrix\n", "nuscatter = xs_library[moderator_cell.id]['nu-scatter']\n", @@ -1042,11 +1918,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\nRK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Create plot of the H-1 scattering matrix\n", "fig = plt.subplot(121)\n", From c8c64338402824175330097577c7fdc14b478d7e Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 20 Jan 2016 07:15:11 -0600 Subject: [PATCH 209/650] Various improvements to run_tests.py --- .gitignore | 3 + CMakeLists.txt | 43 +++++++------- tests/cleanup | 10 ---- tests/run_tests.py | 145 +++++++++++++++++++++++++-------------------- 4 files changed, 105 insertions(+), 96 deletions(-) delete mode 100755 tests/cleanup diff --git a/.gitignore b/.gitignore index 85ba2945a4..815e978510 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,8 @@ results_test.dat # Test build files tests/build/ +tests/coverage/ +tests/memcheck/ tests/ctestscript.run # HDF5 files @@ -60,6 +62,7 @@ data/nndc #Images *.ppm +*.voxel # PyCharm project configuration files .idea diff --git a/CMakeLists.txt b/CMakeLists.txt index 19c4e0ddc1..6e2960c20e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -313,35 +313,36 @@ include(CTest) # Get a list of all the tests to run file(GLOB_RECURSE TESTS ${CMAKE_CURRENT_SOURCE_DIR}/tests/test_*.py) -# Check for MEM_CHECK and COVERAGE variables -if (DEFINED ENV{MEM_CHECK}) - set(MEM_CHECK $ENV{MEM_CHECK}) -else() - set(MEM_CHECK FALSE) -endif() -if (DEFINED ENV{COVERAGE}) - set(COVERAGE $ENV{COVERAGE}) -else() - set(COVERAGE FALSE) -endif() - # Loop through all the tests foreach(test ${TESTS}) # Get test information get_filename_component(TEST_NAME ${test} NAME) get_filename_component(TEST_PATH ${test} PATH) - # Check serial/parallel - if (${MPI_ENABLED}) - # Preform a parallel test + if (DEFINED ENV{MEM_CHECK}) + # Generate input files if needed + if (NOT EXISTS "${TEST_PATH}/geometry.xml") + execute_process(COMMAND ${PYTHON_EXECUTABLE} ${TEST_NAME} --build-inputs + WORKING_DIRECTORY ${TEST_PATH}) + endif() + + # Add serial test add_test(NAME ${TEST_NAME} WORKING_DIRECTORY ${TEST_PATH} - COMMAND ${PYTHON_EXECUTABLE} ${TEST_NAME} --exe $ - --mpi_exec $ENV{MPI_DIR}/bin/mpiexec) + COMMAND $) else() - # Perform a serial test - add_test(NAME ${TEST_NAME} - WORKING_DIRECTORY ${TEST_PATH} - COMMAND ${PYTHON_EXECUTABLE} ${TEST_NAME} --exe $) + # Check serial/parallel + if (${MPI_ENABLED}) + # Preform a parallel test + add_test(NAME ${TEST_NAME} + WORKING_DIRECTORY ${TEST_PATH} + COMMAND ${PYTHON_EXECUTABLE} ${TEST_NAME} --exe $ + --mpi_exec $ENV{MPI_DIR}/bin/mpiexec) + else() + # Perform a serial test + add_test(NAME ${TEST_NAME} + WORKING_DIRECTORY ${TEST_PATH} + COMMAND ${PYTHON_EXECUTABLE} ${TEST_NAME} --exe $) + endif() endif() endforeach(test) diff --git a/tests/cleanup b/tests/cleanup deleted file mode 100755 index 3369c797ee..0000000000 --- a/tests/cleanup +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -# This simple script ensures that all binary -# output files have been deleted in all the -# folders. This can occur if a previous error -# occurred and the test suite was rerun without -# deleting left over binary files. This will -# cause an assertion error in some of the -# tests. -find . \( -name "*.h5" -o -name "*.ppm" \) -exec rm -f {} \; diff --git a/tests/run_tests.py b/tests/run_tests.py index eb8d8c5187..de253c9670 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -8,7 +8,7 @@ import shutil import re import glob import socket -from subprocess import call +from subprocess import call, check_output from collections import OrderedDict from optparse import OptionParser @@ -73,11 +73,11 @@ set(CTEST_UPDATE_COMMAND "git") set(CTEST_CONFIGURE_COMMAND "${{CMAKE_COMMAND}} -H${{CTEST_SOURCE_DIRECTORY}} -B${{CTEST_BINARY_DIRECTORY}} ${{CTEST_BUILD_OPTIONS}}") set(CTEST_MEMORYCHECK_COMMAND "{valgrind_cmd}") set(CTEST_MEMORYCHECK_COMMAND_OPTIONS "--tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes") -set(CTEST_MEMORYCHECK_SUPPRESSIONS_FILE ${{CTEST_SOURCE_DIRECTORY}}/../tests/valgrind.supp) +#set(CTEST_MEMORYCHECK_SUPPRESSIONS_FILE ${{CTEST_SOURCE_DIRECTORY}}/../tests/valgrind.supp) set(MEM_CHECK {mem_check}) set(ENV{{MEM_CHECK}} ${{MEM_CHECK}}) -set(CTEST_COVERAGE_COMMAND "{gcov_cmd}") +set(CTEST_COVERAGE_COMMAND "gcov") set(COVERAGE {coverage}) set(ENV{{COVERAGE}} ${{COVERAGE}}) @@ -87,9 +87,11 @@ ctest_start("{dashboard}") ctest_configure(RETURN_VALUE res) {update} ctest_build(RETURN_VALUE res) +if(NOT MEM_CHECK) ctest_test({tests} PARALLEL_LEVEL {n_procs}, RETURN_VALUE res) +endif() if(MEM_CHECK) -ctest_memcheck({tests}, RETURN_VALUE res) +ctest_memcheck({tests} RETURN_VALUE res) endif(MEM_CHECK) if(COVERAGE) ctest_coverage(RETURN_VALUE res) @@ -105,6 +107,32 @@ endif() # Define test data structure tests = OrderedDict() +def cleanup(path): + """Remove generated output files.""" + for dirpath, dirnames, filenames in os.walk(path): + for fname in filenames: + for ext in ['.h5', '.ppm', '.voxel']: + if fname.endswith(ext): + os.remove(os.path.join(dirpath, fname)) + + +def which(program): + def is_exe(fpath): + return os.path.isfile(fpath) and os.access(fpath, os.X_OK) + + fpath, fname = os.path.split(program) + if fpath: + if is_exe(program): + return program + else: + for path in os.environ["PATH"].split(os.pathsep): + path = path.strip('"') + exe_file = os.path.join(path, program) + if is_exe(exe_file): + return exe_file + return None + + class Test(object): def __init__(self, name, debug=False, optimize=False, mpi=False, openmp=False, phdf5=False, valgrind=False, coverage=False): @@ -119,8 +147,6 @@ class Test(object): self.success = True self.msg = None self.skipped = False - self.valgrind_cmd = "" - self.gcov_cmd = "" self.cmake = ['cmake', '-H..', '-Bbuild', '-DPYTHON_EXECUTABLE=' + sys.executable] @@ -231,42 +257,6 @@ class Test(object): self.success = False self.msg = 'Failed on testing.' - # Checks to see if file exists in PWD or PATH - def check_compiler(self): - result = False - if os.path.isfile(self.fc): - result = True - for path in os.environ["PATH"].split(":"): - if os.path.isfile(os.path.join(path, self.fc)): - result = True - if not result: - self.msg = 'Compiler not found: {0}'.\ - format((os.path.join(path, self.fc))) - self.success = False - - # Get valgrind command from user's environment - def find_valgrind(self): - result = False - for path in os.environ["PATH"].split(":"): - if os.path.isfile(os.path.join(path, 'valgrind')): - self.valgrind_cmd = os.path.join(path, 'valgrind') - result = True - break - if not result: - self.msg = 'valgrind not found.' - self.success = False - - # Get coverage command from user's environment - def find_coverage(self): - result = False - for path in os.environ["PATH"].split(":"): - if os.path.isfile(os.path.join(path, 'gcov')): - self.gcov_cmd = os.path.join(path, 'gcov') - result = True - break - if not result: - self.msg = 'gcov not found.' - self.success = False # Simple function to add a test to the global tests dictionary def add_test(name, debug=False, optimize=False, mpi=False, openmp=False,\ @@ -342,7 +332,7 @@ else: # Setup CTest script vars. Not used in non-script mode pwd = os.getcwd() ctest_vars = { - 'source_dir': os.path.join(pwd, '..'), + 'source_dir': os.path.join(pwd, os.pardir), 'build_dir': os.path.join(pwd, 'build'), 'host_name': socket.gethostname(), 'dashboard': dash, @@ -363,10 +353,10 @@ else: # Set up default valgrind tests (subset of all tests) # Currently takes too long to run all the tests with valgrind # Only used in script mode -valgrind_default_tests = "basic|cmfd_feed|confidence_intervals|\ -density_atombcm|eigenvalue_genperbatch|energy_grid|entropy|\ -filter_cell|lattice_multiple|output|plot_background|reflective_plane|\ -rotation|salphabeta_multiple|score_absorption|seed|source_energy_mono|\ +valgrind_default_tests = "cmfd_feed|confidence_intervals|\ +density|eigenvalue_genperbatch|energy_grid|entropy|\ +lattice_multiple|output|plotreflective_plane|\ +rotation|salphabetascore_absorption|seed|source_energy_mono|\ sourcepoint_batch|statepoint_interval|survival_biasing|\ tally_assumesep|translation|uniform_fs|universe|void" @@ -383,7 +373,7 @@ if len(list(tests.keys())) == 0: # Begin testing shutil.rmtree('build', ignore_errors=True) -call(['./cleanup']) # removes all binary and hdf5 output files from tests +cleanup('.') for key in iter(tests): test = tests[key] @@ -395,29 +385,34 @@ for key in iter(tests): sys.stdout.flush() # Verify fortran compiler exists - test.check_compiler() - if not test.success: + if which(test.fc) is None: + self.msg = 'Compiler not found: {0}'.format(test.fc) + self.success = False continue - # Get valgrind command + # Verify valgrind command exists if test.valgrind: - test.find_valgrind() - if not test.success: - continue + valgrind_cmd = which('valgrind') + if valgrind_cmd is None: + self.msg = 'No valgrind executable found.' + self.success = False + continue + else: + valgrind_cmd = '' - # Get coverage command + # Verify gcov/lcov exist if test.coverage: - test.find_coverage() - if not test.success: - continue + if which('gcov') is None: + self.msg = 'No {} executable found.'.format(exe) + self.success = False + continue # Set test specific CTest script vars. Not used in non-script mode ctest_vars.update({'build_name': test.get_build_name()}) ctest_vars.update({'build_opts': test.get_build_opts()}) ctest_vars.update({'mem_check': test.valgrind}) ctest_vars.update({'coverage': test.coverage}) - ctest_vars.update({'valgrind_cmd': test.valgrind_cmd}) - ctest_vars.update({'gcov_cmd': test.gcov_cmd}) + ctest_vars.update({'valgrind_cmd': valgrind_cmd}) # Check for user custom tests # INCLUDE is a CTest command that allows for a subset @@ -458,7 +453,7 @@ for key in iter(tests): test.run_ctests() # Leave build directory - os.chdir('..') + os.chdir(os.pardir) # Copy over log file if script_mode: @@ -473,15 +468,35 @@ for key in iter(tests): # For coverage builds, use lcov to generate HTML output if test.coverage: - call(['lcov', '--directory', '.', '--capture', - '--output-file', 'coverage.info']) - call(['genhtml', '--output-directory', 'coverage', 'coverage.info']) + if which('lcov') is None or which('genhtml') is None: + print('No lcov/genhtml command found. ' + 'Could not generate coverage report.') + else: + shutil.rmtree('coverage', ignore_errors=True) + call(['lcov', '--directory', '.', '--capture', + '--output-file', 'coverage.info']) + call(['genhtml', '--output-directory', 'coverage', 'coverage.info']) + os.remove('coverage.info') + + if test.valgrind: + # Copy memcheck output to memcheck directory + shutil.rmtree('memcheck', ignore_errors=True) + os.mkdir('memcheck') + memcheck_out = glob.glob('build/Testing/Temporary/MemoryChecker.*.log') + for fname in memcheck_out: + shutil.copy(fname, 'memcheck/') + + # Remove generated XML files + xml_files = check_output(['git', 'ls-files', '.', '--exclude-standard', + '--others']).split() + for f in xml_files: + os.remove(f) # Clear build directory and remove binary and hdf5 files shutil.rmtree('build', ignore_errors=True) if script_mode: os.remove('ctestscript.run') - call(['./cleanup']) + cleanup('.') # Print out summary of results print('\n' + '='*54) From b0995e44c1bfef47855825b50453cf1fa9867efe Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 20 Jan 2016 09:19:17 -0600 Subject: [PATCH 210/650] Merge test_many_scores into test_tallies --- tests/test_many_scores/geometry.xml | 181 - tests/test_many_scores/materials.xml | 272 -- tests/test_many_scores/results_true.dat | 101 - tests/test_many_scores/settings.xml | 19 - tests/test_many_scores/tallies.xml | 13 - tests/test_many_scores/test_many_scores.py | 11 - tests/test_tallies/inputs_true.dat | 2 +- tests/test_tallies/results_true.dat | 3698 +------------------- tests/test_tallies/test_tallies.py | 34 +- 9 files changed, 34 insertions(+), 4297 deletions(-) delete mode 100644 tests/test_many_scores/geometry.xml delete mode 100644 tests/test_many_scores/materials.xml delete mode 100644 tests/test_many_scores/results_true.dat delete mode 100644 tests/test_many_scores/settings.xml delete mode 100644 tests/test_many_scores/tallies.xml delete mode 100644 tests/test_many_scores/test_many_scores.py diff --git a/tests/test_many_scores/geometry.xml b/tests/test_many_scores/geometry.xml deleted file mode 100644 index f6f067aadd..0000000000 --- a/tests/test_many_scores/geometry.xml +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 17 17 - -10.71 -10.71 - 1.26 1.26 - - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 - 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 1 - 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - - - - - - 17 17 - -10.71 -10.71 - 1.26 1.26 - - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 4 3 3 4 3 3 4 3 3 3 3 3 - 3 3 3 4 3 3 3 3 3 3 3 3 3 4 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 4 3 3 4 3 3 4 3 3 4 3 3 4 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 4 3 3 4 3 3 4 3 3 4 3 3 4 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 4 3 3 4 3 3 4 3 3 4 3 3 4 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 4 3 3 3 3 3 3 3 3 3 4 3 3 3 - 3 3 3 3 3 4 3 3 4 3 3 4 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - - - - - - 21 21 - -224.91 -224.91 - 21.42 21.42 - - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 6 6 6 6 6 6 6 5 5 5 5 5 5 5 - 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 - 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 - 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 - 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 - 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 - 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 - 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 - 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 - 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 - 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 - 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 - 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 - 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 - 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 - 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 - 5 5 5 5 5 5 5 6 6 6 6 6 6 6 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - - - - - - 21 21 - -224.91 -224.91 - 21.42 21.42 - - 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 - 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 - 7 7 7 7 7 7 7 8 8 8 8 8 8 8 7 7 7 7 7 7 7 - 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 - 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 - 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 - 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 - 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 - 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 - 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 - 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 - 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 - 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 - 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 - 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 - 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 - 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 - 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 - 7 7 7 7 7 7 7 8 8 8 8 8 8 8 7 7 7 7 7 7 7 - 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 - 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 - - - - diff --git a/tests/test_many_scores/materials.xml b/tests/test_many_scores/materials.xml deleted file mode 100644 index 9c0b74f3f1..0000000000 --- a/tests/test_many_scores/materials.xml +++ /dev/null @@ -1,272 +0,0 @@ - - - - 71c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/test_many_scores/results_true.dat b/tests/test_many_scores/results_true.dat deleted file mode 100644 index ae5430e30a..0000000000 --- a/tests/test_many_scores/results_true.dat +++ /dev/null @@ -1,101 +0,0 @@ -k-combined: -0.000000E+00 0.000000E+00 -tally 1: -2.247257E+01 -1.683779E+02 -1.014000E+01 -3.427342E+01 -8.628000E+00 -2.481430E+01 -8.632000E+00 -2.483728E+01 -5.102293E-01 -8.710841E-02 -5.087118E-01 -8.657086E-02 -9.212024E+00 -2.829472E+01 -8.628000E+00 -2.481430E+01 -1.512000E+00 -7.620560E-01 -1.816851E+00 -1.102658E+00 -1.337996E+02 -5.985519E+03 -2.247257E+01 -1.683779E+02 -1.512960E-01 -2.623972E-02 --3.775020E-01 -1.055377E-01 -1.916133E-01 -4.680798E-02 -2.754367E-02 -3.320008E-04 -2.028374E-02 -1.319357E-02 -8.974271E-03 -1.681081E-03 -1.658978E-01 -1.520448E-02 -2.878360E-01 -5.645480E-02 -1.014000E+01 -3.427342E+01 -4.798897E-02 -1.551226E-03 --1.818770E-01 -1.492633E-02 -6.340651E-02 -9.011305E-03 -3.395308E-02 -4.612818E-04 -2.640250E-02 -6.434787E-04 --8.242639E-03 -9.516540E-04 -8.378601E-02 -2.645988E-03 -9.567484E-02 -7.262477E-03 -8.628000E+00 -2.481430E+01 -4.712248E-02 -1.140942E-03 --6.431930E-02 -4.290580E-03 -9.251642E-02 -8.134201E-03 -1.020119E-04 -1.154184E-04 -2.994164E-02 -3.079076E-04 -2.128844E-02 -2.046549E-04 --1.637972E-02 -1.459209E-04 -4.629047E-02 -7.823267E-04 -8.632000E+00 -2.483728E+01 -4.651997E-02 -1.133839E-03 --6.416955E-02 -4.279418E-03 -9.280565E-02 -8.095106E-03 --2.078094E-04 -1.151292E-04 -3.005568E-02 -3.104764E-04 -2.199519E-02 -2.179172E-04 --1.660645E-02 -1.451345E-04 -4.607553E-02 -7.673412E-04 -1.014000E+01 -3.427342E+01 -7.652723E-03 -3.578992E-05 diff --git a/tests/test_many_scores/settings.xml b/tests/test_many_scores/settings.xml deleted file mode 100644 index 08dc0d2e12..0000000000 --- a/tests/test_many_scores/settings.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - 5 - 2 - 500 - - - - - - -160 -160 -183 - 160 160 183 - - - - - diff --git a/tests/test_many_scores/tallies.xml b/tests/test_many_scores/tallies.xml deleted file mode 100644 index b8a154f1ac..0000000000 --- a/tests/test_many_scores/tallies.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - flux total scatter nu-scatter scatter-2 nu-scatter-2 transport n1n - absorption nu-fission kappa-fission flux-y2 total-y2 scatter-y2 - nu-scatter-y2 events delayed-nu-fission - - - - diff --git a/tests/test_many_scores/test_many_scores.py b/tests/test_many_scores/test_many_scores.py deleted file mode 100644 index 88c3bdfb3d..0000000000 --- a/tests/test_many_scores/test_many_scores.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness - - -if __name__ == '__main__': - harness = TestHarness('statepoint.5.*', True) - harness.main() diff --git a/tests/test_tallies/inputs_true.dat b/tests/test_tallies/inputs_true.dat index 727d6f369d..657a9e77da 100644 --- a/tests/test_tallies/inputs_true.dat +++ b/tests/test_tallies/inputs_true.dat @@ -1 +1 @@ -fb9a9e5d829d924e94f4e1b3862edbefdb9dbed42b97930a5ebe41c0bc052ce668dcf7a07c42d985d005f68b37c1233b6110c86432b7ed0e561e1ef653d23eca \ No newline at end of file +5e168146d91b7b5fadecb80a32df9edc906718fb2d70b68b4c18dbed0641739251a1c16177c9f4d47516dfd528ec930879534292ff0eb82af89eca2c3fa4a3e0 \ No newline at end of file diff --git a/tests/test_tallies/results_true.dat b/tests/test_tallies/results_true.dat index 76a31d6434..4f8b3956b7 100644 --- a/tests/test_tallies/results_true.dat +++ b/tests/test_tallies/results_true.dat @@ -1,3697 +1 @@ -k-combined: -9.903196E-01 4.279617E-02 -tally 1: -4.215917E+01 -3.561920E+02 -4.174788E+01 -3.505184E+02 -4.603223E+01 -4.242918E+02 -4.496760E+01 -4.075599E+02 -4.088099E+01 -3.376516E+02 -tally 2: -4.157239E+01 -3.482158E+02 -4.227810E+01 -3.613293E+02 -4.376107E+01 -3.835007E+02 -4.644205E+01 -4.327195E+02 -4.191554E+01 -3.522147E+02 -tally 3: -4.215917E+01 -3.561920E+02 -4.174788E+01 -3.505184E+02 -4.603223E+01 -4.242918E+02 -4.496402E+01 -4.075053E+02 -4.088458E+01 -3.377000E+02 -tally 4: -1.531988E+01 -4.816326E+01 -9.274393E+00 -1.821174E+01 -1.595868E+01 -5.124238E+01 -1.299895E+00 -6.417145E-01 -1.510024E+01 -4.604170E+01 -8.533361E+00 -1.462765E+01 -1.658141E+01 -5.595629E+01 -1.427417E+00 -6.621807E-01 -1.683102E+01 -5.741400E+01 -9.845257E+00 -2.028406E+01 -1.773179E+01 -6.477077E+01 -1.536972E+00 -6.111079E-01 -1.586070E+01 -5.360975E+01 -9.928220E+00 -2.089005E+01 -1.737609E+01 -6.161847E+01 -1.700608E+00 -8.439708E-01 -1.607027E+01 -5.490113E+01 -7.569336E+00 -1.280955E+01 -1.606086E+01 -5.308665E+01 -9.898901E-01 -3.143027E-01 -tally 5: -0.000000E+00 -0.000000E+00 -8.921179E+01 -1.601939E+03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -tally 6: -8.141852E-04 -1.337187E-07 -4.849156E-03 -4.744020E-06 -4.460252E-03 -4.015453E-06 -1.028479E-02 -2.136252E-05 -5.002274E-03 -5.056965E-06 -1.974747E-03 -7.882970E-07 -tally 7: -2.844008E+01 -1.619630E+02 -4.425619E+01 -3.938244E+02 -5.527425E+01 -6.120383E+02 -9.799897E+00 -1.957877E+01 -tally 8: -2.842000E+01 -1.620214E+02 -4.361000E+01 -3.810139E+02 -5.297000E+01 -5.616595E+02 -6.530000E+00 -8.828900E+00 -tally 9: -2.576000E+01 -1.331666E+02 -0.000000E+00 -0.000000E+00 -7.000000E-02 -1.300000E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.050675E+00 -2.274991E-01 -0.000000E+00 -0.000000E+00 -2.070821E+00 -8.886068E-01 -2.660000E+00 -1.422000E+00 -0.000000E+00 -0.000000E+00 -3.897000E+01 -3.042635E+02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.352932E-01 -4.705717E-02 -0.000000E+00 -0.000000E+00 -1.018668E+00 -2.090017E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.570000E+00 -4.182700E+00 -0.000000E+00 -0.000000E+00 -4.968000E+01 -4.940534E+02 -6.537406E-02 -1.230788E-03 -0.000000E+00 -0.000000E+00 -8.678070E-02 -2.482037E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.290000E+00 -2.178900E+00 -1.610879E-01 -5.883677E-03 -6.530000E+00 -8.828900E+00 -3.151783E-01 -2.052521E-02 -tally 10: -2.868239E+01 -1.648549E+02 -6.779424E+00 -9.202676E+00 -6.446222E+01 -8.387204E+02 -3.367496E+01 -2.349072E+02 -tally 11: -1.241000E+01 -3.088870E+01 -1.241000E+01 -3.088870E+01 -1.364000E+01 -3.727140E+01 -1.364000E+01 -3.727140E+01 -3.251000E+01 -2.118597E+02 -3.251000E+01 -2.118597E+02 -7.297000E+01 -1.066904E+03 -7.297000E+01 -1.066904E+03 -tally 12: -9.880000E+00 -1.964520E+01 -9.880000E+00 -1.964520E+01 -1.022000E+01 -2.099620E+01 -1.022000E+01 -2.099620E+01 -1.479000E+01 -4.397670E+01 -1.479000E+01 -4.397670E+01 -3.470000E+01 -2.412094E+02 -3.470000E+01 -2.412094E+02 -6.194000E+01 -7.687326E+02 -6.194000E+01 -7.687326E+02 -tally 13: -3.560000E+00 -2.681800E+00 -3.560000E+00 -2.681800E+00 -1.930000E+00 -7.915000E-01 -1.930000E+00 -7.915000E-01 -3.870000E+00 -3.109100E+00 -3.870000E+00 -3.109100E+00 -3.500000E-01 -3.630000E-02 -3.500000E-01 -3.630000E-02 -3.680000E+00 -2.840200E+00 -3.680000E+00 -2.840200E+00 -2.050000E+00 -8.735000E-01 -2.050000E+00 -8.735000E-01 -3.910000E+00 -3.085100E+00 -3.910000E+00 -3.085100E+00 -3.900000E-01 -3.610000E-02 -3.900000E-01 -3.610000E-02 -5.130000E+00 -5.422100E+00 -5.130000E+00 -5.422100E+00 -3.100000E+00 -1.959200E+00 -3.100000E+00 -1.959200E+00 -5.840000E+00 -6.914600E+00 -5.840000E+00 -6.914600E+00 -5.400000E-01 -8.980000E-02 -5.400000E-01 -8.980000E-02 -1.215000E+01 -3.061010E+01 -1.215000E+01 -3.061010E+01 -7.220000E+00 -1.081680E+01 -7.220000E+00 -1.081680E+01 -1.355000E+01 -3.699090E+01 -1.355000E+01 -3.699090E+01 -1.360000E+00 -5.098000E-01 -1.360000E+00 -5.098000E-01 -2.199000E+01 -9.837430E+01 -2.199000E+01 -9.837430E+01 -1.243000E+01 -3.167470E+01 -1.243000E+01 -3.167470E+01 -2.451000E+01 -1.233915E+02 -2.451000E+01 -1.233915E+02 -2.460000E+00 -1.687000E+00 -2.460000E+00 -1.687000E+00 -tally 14: -2.127061E+01 -9.220793E+01 -5.602776E+01 -6.373945E+02 -6.367492E+01 -8.138443E+02 -5.529942E+01 -6.140264E+02 -1.951517E+01 -7.668661E+01 -tally 15: -2.075936E+01 -8.757254E+01 -5.524881E+01 -6.153139E+02 -6.475252E+01 -8.402281E+02 -5.446664E+01 -5.961174E+02 -2.074180E+01 -8.681580E+01 -tally 16: -2.128073E+01 -9.230382E+01 -5.601764E+01 -6.371703E+02 -6.367492E+01 -8.138443E+02 -5.529942E+01 -6.140264E+02 -1.951517E+01 -7.668661E+01 -tally 17: -8.088647E+00 -1.396899E+01 -3.960907E+00 -3.249150E+00 -8.430714E+00 -1.435355E+01 -7.192159E-01 -1.641710E-01 -1.974619E+01 -8.105078E+01 -1.212452E+01 -3.016420E+01 -2.228348E+01 -1.050847E+02 -1.748809E+00 -9.501796E-01 -2.257423E+01 -1.038902E+02 -1.351331E+01 -3.969787E+01 -2.507638E+01 -1.283664E+02 -2.193118E+00 -1.424580E+00 -2.192232E+01 -9.859711E+01 -1.096779E+01 -2.506373E+01 -2.074138E+01 -8.670015E+01 -1.469145E+00 -8.072204E-01 -6.850719E+00 -9.425536E+00 -4.584038E+00 -4.399762E+00 -7.176883E+00 -1.090693E+01 -8.244944E-01 -1.794291E-01 -tally 18: -7.510505E+01 -1.143811E+03 -8.792943E+00 -1.575416E+01 -4.214462E+01 -3.642975E+02 -4.335157E+00 -3.864423E+00 -tally 19: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.533174E+00 -1.298118E+00 -1.711611E-02 -5.967549E-05 -6.520000E+01 -8.551888E+02 -1.156315E+00 -2.733527E-01 -1.049628E-05 -2.261930E-11 -2.266169E+02 -1.049923E+04 -1.538090E-03 -1.381456E-06 -3.974412E-01 -3.209809E-02 -1.373550E+00 -3.796357E-01 -3.041781E+00 -1.891714E+00 -1.514235E+01 -4.620490E+01 -1.767552E+01 -6.295417E+01 -2.453769E-02 -1.227715E-04 -0.000000E+00 -0.000000E+00 -1.070200E+02 -2.305805E+03 -0.000000E+00 -0.000000E+00 -4.056389E-06 -3.411247E-12 -0.000000E+00 -0.000000E+00 -5.252455E-06 -2.290531E-11 -3.359792E-02 -2.267331E-04 -2.459115E-02 -1.233078E-04 -0.000000E+00 -0.000000E+00 -3.839050E+00 -2.975620E+00 -3.863588E+00 -3.013300E+00 -3.869051E-01 -3.180828E-02 -0.000000E+00 -0.000000E+00 -2.010800E+02 -8.160415E+03 -0.000000E+00 -0.000000E+00 -2.243766E-05 -1.069671E-10 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.004005E-05 -1.748739E-09 -8.104946E-02 -1.395618E-03 -0.000000E+00 -0.000000E+00 -5.317903E+01 -5.754103E+02 -5.356594E+01 -5.839391E+02 -tally 20: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.540000E+00 -1.293400E+00 -0.000000E+00 -0.000000E+00 -1.739000E+01 -6.083290E+01 -1.225263E+00 -3.054971E-01 -1.029200E-05 -2.180706E-11 -2.403775E+02 -1.175130E+04 -0.000000E+00 -0.000000E+00 -2.000000E-01 -9.000000E-03 -0.000000E+00 -0.000000E+00 -3.341227E+00 -2.322075E+00 -1.485000E+01 -4.439790E+01 -1.739000E+01 -6.083290E+01 -4.000000E-02 -6.000000E-04 -0.000000E+00 -0.000000E+00 -4.160000E+00 -3.501000E+00 -0.000000E+00 -0.000000E+00 -4.353200E-06 -4.363747E-12 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-02 -2.000000E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.120000E+00 -3.438000E+00 -4.160000E+00 -3.501000E+00 -4.000000E-01 -3.600000E-02 -0.000000E+00 -0.000000E+00 -5.213000E+01 -5.552351E+02 -0.000000E+00 -0.000000E+00 -2.211790E-05 -1.055892E-10 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.173000E+01 -5.467243E+02 -5.213000E+01 -5.552351E+02 -tally 21: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.422314E+00 -1.193460E+00 -1.686299E-02 -5.765477E-05 -1.739000E+01 -6.083290E+01 -1.131528E+00 -2.612886E-01 -1.029200E-05 -2.180706E-11 -2.217588E+02 -1.003581E+04 -1.408027E-03 -1.849607E-06 -3.946436E-01 -3.166261E-02 -1.288136E+00 -3.382059E-01 -2.975121E+00 -1.806644E+00 -1.496769E+01 -4.502714E+01 -1.739000E+01 -6.083290E+01 -4.285618E-02 -4.109734E-04 -0.000000E+00 -0.000000E+00 -4.160000E+00 -3.501000E+00 -0.000000E+00 -0.000000E+00 -4.353200E-06 -4.363747E-12 -0.000000E+00 -0.000000E+00 -2.179241E-05 -4.749090E-10 -3.146594E-02 -2.159308E-04 -4.278352E-02 -4.094478E-04 -0.000000E+00 -0.000000E+00 -4.117144E+00 -3.431861E+00 -4.160000E+00 -3.501000E+00 -3.832282E-01 -3.169516E-02 -0.000000E+00 -0.000000E+00 -5.213000E+01 -5.552351E+02 -0.000000E+00 -0.000000E+00 -2.211790E-05 -1.055892E-10 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.736514E-04 -1.245171E-08 -7.989710E-02 -1.377742E-03 -0.000000E+00 -0.000000E+00 -5.174677E+01 -5.469474E+02 -5.213000E+01 -5.552351E+02 -tally 22: -3.890713E+01 -3.046363E+02 -1.366220E+01 -3.758161E+01 -6.561669E+01 -8.680729E+02 -2.382728E+01 -1.170590E+02 -8.047875E+00 -1.334796E+01 -4.056568E+01 -3.389623E+02 -tally 23: -3.890713E+01 -3.046363E+02 --1.623579E-01 -4.602199E-02 -4.860074E-01 -5.999399E-01 --7.895692E-01 -2.803790E-01 -2.525526E-01 -8.261176E-02 -9.103525E-02 -2.246700E-01 -4.583205E-01 -8.444556E-02 --1.246553E-01 -2.351010E-01 --3.534581E-01 -1.247916E-01 --3.700473E-01 -5.215562E-02 --1.831625E-01 -1.927381E-01 --1.540114E-01 -1.918221E-02 --1.266458E-01 -1.455875E-01 --6.796869E-01 -3.911926E-01 -1.987931E-02 -4.966442E-02 -4.443797E-01 -8.842717E-02 --1.073855E-01 -4.912428E-02 --3.999416E-02 -4.440138E-02 -2.857919E-01 -6.935717E-02 -4.174851E-01 -5.485570E-02 --2.178958E-01 -8.052149E-02 --1.179644E-02 -6.709330E-02 -8.843286E-01 -2.749681E-01 -2.935079E-01 -3.032897E-02 --1.809434E-01 -1.902413E-01 --2.091991E-01 -1.061912E-01 --7.137275E-02 -4.397656E-02 -2.311558E-01 -4.680679E-02 -9.927573E-02 -1.844111E-01 --2.821437E-02 -7.293762E-02 -6.224251E-01 -1.028351E-01 -4.136440E-01 -5.198207E-02 --7.833133E-02 -1.192960E-02 -1.041586E-01 -1.587417E-01 --3.595677E-01 -3.086335E-01 --2.096284E-01 -7.881012E-02 -1.366220E+01 -3.758161E+01 -1.461402E-02 -3.260482E-03 -8.325893E-02 -6.248769E-02 --2.785736E-01 -3.698417E-02 -1.932396E-03 -1.561742E-02 -8.063397E-02 -3.598680E-02 -8.565555E-02 -5.344369E-03 --3.899905E-02 -2.422867E-02 --1.215439E-01 -9.193858E-03 --1.982614E-01 -1.045860E-02 --7.712629E-02 -2.199979E-02 -3.626484E-02 -9.872078E-04 --6.305159E-02 -1.645879E-02 --3.052155E-01 -5.620564E-02 -3.507115E-02 -1.056383E-02 -1.297490E-02 -5.889958E-03 --1.208752E-02 -7.323602E-03 --3.441007E-03 -1.841496E-02 -5.543442E-02 -1.186636E-02 -8.000436E-02 -3.703835E-03 --3.636792E-02 -1.490603E-02 -8.753196E-02 -7.958027E-03 -2.066727E-01 -1.414130E-02 -3.652482E-02 -8.380395E-04 --1.652432E-01 -1.878732E-02 --1.375567E-01 -1.302400E-02 -3.692057E-03 -6.312506E-03 -9.016211E-02 -6.699735E-03 --5.875401E-02 -1.731945E-02 --3.960008E-02 -3.595906E-03 -1.653510E-01 -9.277293E-03 -4.064973E-02 -2.794606E-03 --1.729061E-02 -3.219772E-03 -5.764808E-02 -1.861051E-02 --5.970583E-02 -2.070164E-02 --6.739411E-02 -1.063341E-02 -6.561669E+01 -8.680729E+02 --7.938430E-01 -2.994198E-01 -9.278084E-01 -1.861899E+00 --1.432236E+00 -7.429647E-01 -7.460836E-02 -5.946808E-01 -6.140731E-02 -3.175177E-01 -1.212677E+00 -5.125288E-01 -1.952865E-02 -5.468421E-01 --2.965796E-01 -1.123288E-01 --5.334195E-01 -1.589612E-01 --6.340814E-01 -4.874650E-01 --4.264003E-02 -9.109571E-03 --4.323424E-01 -3.370329E-01 --1.186876E+00 -9.854644E-01 --2.420825E-01 -1.699455E-01 -2.920627E-02 -6.816643E-02 --2.684345E-01 -9.799236E-02 -1.281596E-01 -3.092987E-01 -3.746150E-01 -1.242044E-01 -1.035056E+00 -2.589772E-01 -2.005450E-01 -2.074622E-01 -5.412719E-01 -3.193584E-01 -1.070173E+00 -3.266747E-01 -2.657850E-01 -1.599950E-01 --4.694853E-01 -2.738937E-01 --7.761977E-01 -2.561652E-01 -3.673179E-02 -9.486916E-02 -3.309909E-01 -1.095243E-01 -1.623761E-01 -2.874582E-01 -2.846296E-01 -2.430397E-01 -7.384842E-01 -2.556480E-01 -3.577508E-01 -1.763210E-01 --2.917525E-01 -1.875646E-01 -1.634324E-01 -2.952144E-01 --4.329582E-01 -3.418652E-01 --2.719362E-01 -2.278925E-01 -2.382728E+01 -1.170590E+02 --4.718326E-01 -1.961501E-01 -1.612551E-02 -2.815245E-02 --6.390587E-01 -1.902968E-01 -2.290989E-01 -3.758858E-02 --1.568179E-01 -1.509162E-01 --2.363058E-01 -6.671396E-02 -4.350800E-02 -1.031680E-01 --2.956828E-01 -2.515141E-02 -4.835878E-01 -8.614200E-02 --5.365970E-02 -8.404087E-02 -6.079969E-02 -3.684343E-02 --1.313088E-02 -1.488843E-02 --2.603258E-02 -2.900625E-02 -1.249213E-01 -2.737277E-02 --4.491422E-01 -9.482600E-02 --1.095589E-01 -3.711500E-02 -2.248159E-01 -2.815827E-02 --5.976009E-02 -5.887828E-03 -6.097208E-02 -5.393315E-02 -3.449714E-02 -4.332442E-02 -1.030757E-01 -2.839453E-02 --4.399117E-01 -8.887569E-02 --4.564910E-01 -1.172398E-01 --2.528382E-01 -1.217655E-01 --3.443316E-01 -4.275616E-02 -5.437008E-02 -2.355567E-02 -5.505588E-02 -5.479129E-02 --8.326640E-02 -3.095858E-02 -1.888781E-01 -2.884542E-02 -1.981251E-01 -1.520694E-02 -5.279866E-02 -1.020641E-01 --1.465368E-01 -3.070686E-02 -2.356940E-01 -7.899657E-02 -4.109278E-01 -5.291082E-02 --2.572510E-01 -3.420895E-02 -8.047875E+00 -1.334796E+01 --1.707535E-01 -3.290927E-02 -1.024687E-01 -1.308811E-02 --1.805451E-01 -1.696222E-02 -3.519587E-02 -7.546726E-03 --1.034933E-01 -2.224207E-02 --1.580512E-01 -2.369625E-02 --4.302961E-02 -1.635623E-02 --2.992903E-02 -5.190220E-03 -2.130862E-01 -1.186351E-02 --3.321696E-02 -7.972404E-03 -4.992040E-02 -5.667098E-03 -1.261320E-02 -2.436872E-03 -8.314024E-04 -5.360616E-03 --6.318247E-02 -1.644558E-03 --1.373600E-01 -1.030707E-02 -1.511677E-03 -3.467685E-03 -1.923485E-02 -8.106508E-04 --1.180094E-01 -4.381376E-03 --2.798056E-02 -4.871288E-03 --7.689499E-02 -7.079493E-03 --5.842586E-02 -1.380713E-03 --9.946341E-02 -7.085062E-03 --8.061825E-02 -8.679468E-03 --9.229524E-03 -9.187483E-03 --1.048310E-01 -3.506026E-03 -3.666209E-02 -3.259203E-03 -1.190727E-01 -4.935341E-03 --7.391655E-02 -2.805554E-03 -2.029126E-02 -2.497736E-03 -2.787185E-02 -5.677987E-04 -6.873108E-02 -1.287727E-02 --5.262840E-02 -3.190440E-03 -3.910911E-02 -8.661121E-03 -1.076197E-01 -5.456176E-03 --7.476066E-02 -2.693605E-03 -4.056568E+01 -3.389623E+02 --6.428633E-01 -6.128893E-01 -4.878518E-01 -2.130257E-01 --9.548044E-01 -4.556949E-01 -2.234940E-01 -1.006817E-01 -1.080276E-01 -5.980158E-01 --3.639229E-01 -3.120105E-01 -3.237506E-01 -3.451548E-01 -1.143081E-01 -7.924550E-02 -6.456733E-01 -2.424413E-01 -1.478136E-01 -1.458665E-01 -2.134798E-02 -9.102875E-02 -3.633264E-01 -7.386463E-02 --2.213946E-01 -1.253249E-01 --3.153847E-01 -1.094273E-01 --7.161113E-01 -2.275500E-01 --2.461979E-01 -1.484452E-01 -2.332886E-01 -9.715521E-02 --7.029988E-02 -1.835254E-02 --1.982842E-01 -9.722998E-02 --2.089693E-01 -2.271404E-01 -7.316104E-02 -3.974665E-02 --3.266640E-01 -8.054809E-02 --5.126088E-01 -3.234942E-01 --3.048753E-01 -3.439501E-01 --4.872647E-01 -9.473730E-02 -1.590200E-01 -3.613462E-02 -4.641787E-01 -1.671339E-01 --1.391114E-01 -3.581561E-02 -2.209343E-01 -1.489367E-02 -3.015665E-01 -4.265694E-02 -1.334716E-01 -2.321929E-01 --3.702914E-01 -1.699549E-01 -8.891532E-02 -1.708595E-01 -6.123686E-01 -1.429184E-01 --5.891300E-01 -1.085467E-01 -tally 24: -3.862543E+01 -2.993190E+02 --5.083613E-01 -2.933365E-01 --4.356793E-01 -6.676831E-01 --6.093148E-01 -5.685331E-01 -2.512276E-01 -1.308652E-01 --1.075955E+00 -4.775270E-01 -3.660307E-01 -1.627691E-01 -5.402149E-01 -2.324946E-01 --3.887573E-01 -1.028105E-01 -4.324152E-01 -1.015147E-01 -3.306993E-02 -8.425069E-02 -2.127456E-01 -5.435453E-02 -2.977294E-01 -1.088039E-01 --1.055079E+00 -3.590635E-01 --6.740592E-01 -2.606281E-01 -3.329512E-01 -1.587428E-01 --1.248691E-01 -1.659045E-01 -2.306000E-01 -1.062057E-01 -9.127791E-02 -2.649459E-01 -2.629881E-01 -4.786229E-02 -2.286813E-01 -2.363629E-02 -6.338613E-01 -1.118828E-01 -7.466647E-01 -1.424535E-01 -7.955161E-02 -1.003327E-02 -1.082691E-01 -2.727882E-02 --5.295185E-01 -1.335133E-01 --6.321517E-01 -1.422916E-01 -1.236137E-01 -2.041422E-01 --5.389265E-02 -1.852888E-01 -3.746082E-01 -5.580885E-02 -1.383528E-01 -2.754456E-01 -5.081204E-01 -1.886515E-01 --4.022264E-01 -1.417397E-01 --3.377771E-01 -6.673888E-02 -1.170109E-01 -1.783182E-02 --2.097916E-01 -7.139323E-02 -1.438678E+01 -4.193571E+01 --6.547124E-01 -1.780450E-01 -2.207489E-01 -2.115835E-01 -4.952323E-02 -3.039341E-01 -6.681546E-01 -1.389250E-01 --4.078026E-02 -4.393667E-02 --8.695509E-01 -2.850853E-01 --1.792062E-01 -7.367253E-02 --5.657500E-01 -2.115125E-01 --8.525189E-02 -2.541971E-02 -5.227867E-02 -2.008468E-02 -6.825349E-02 -5.316522E-02 -3.763076E-01 -7.112554E-02 --1.279973E-02 -1.883096E-01 -7.775189E-02 -6.874374E-02 -1.119537E-01 -8.467755E-02 --1.600632E-01 -8.650448E-02 -6.210095E-01 -1.094309E-01 --9.997484E-02 -3.935353E-02 --2.300525E-01 -2.351925E-02 -2.486103E-02 -3.125565E-02 -1.289518E-02 -2.879251E-02 --3.166559E-01 -2.931428E-02 --1.379285E-02 -2.416257E-02 -1.220552E-02 -5.154030E-02 --1.431676E-01 -3.434080E-02 -8.148581E-02 -4.218412E-02 -8.541678E-03 -6.396306E-02 --7.851012E-03 -5.799658E-02 -2.435723E-01 -6.744263E-02 --2.429877E-01 -6.966516E-02 --1.638644E-01 -2.058798E-02 --8.986584E-03 -1.374824E-02 -3.547454E-01 -7.765460E-02 --1.570173E-01 -6.916960E-02 --1.056941E-02 -7.626528E-03 -6.400634E+01 -8.298077E+02 --3.894111E-01 -8.617494E-01 -1.796567E-01 -1.065356E+00 --1.561037E+00 -7.701475E-01 --2.237530E-01 -2.259442E-01 -1.109999E+00 -6.179412E-01 -1.636912E+00 -7.887441E-01 -4.661183E-01 -4.191138E-01 --1.040546E+00 -2.971961E-01 -1.044850E-01 -1.493530E-01 --4.991935E-01 -3.222404E-01 --4.205099E-01 -2.734911E-01 --7.583139E-01 -3.000853E-01 --3.750811E-01 -1.348273E-01 --6.355508E-01 -3.666139E-01 -5.233787E-01 -1.292414E-01 --2.869538E-02 -9.115092E-02 -6.851052E-01 -3.061040E-01 -1.703522E-01 -7.300335E-02 -4.541075E-01 -4.438507E-01 --2.674857E-01 -4.718588E-01 -3.022517E-02 -1.136781E-01 -5.755596E-01 -2.688162E-01 -2.698373E-01 -1.403188E-01 -8.772347E-01 -3.503562E-01 --4.258508E-01 -1.400825E-01 --1.384853E-01 -4.924947E-02 --1.009402E-01 -2.039230E-01 --1.339732E-01 -4.772083E-02 --3.249636E-01 -4.339747E-01 -1.564400E-01 -2.703717E-01 -2.536360E-01 -8.543919E-02 --3.622063E-01 -7.442240E-02 --2.074953E-02 -1.355614E-01 --3.909820E-02 -1.007999E-01 -3.162815E-01 -9.656425E-02 -2.426423E+01 -1.215124E+02 --9.628829E-01 -3.563586E-01 -2.964625E-01 -9.739638E-02 --3.680881E-01 -3.484018E-01 -4.339143E-01 -7.590564E-02 -4.633394E-02 -1.080030E-01 -3.091634E-01 -1.246585E-01 -4.520500E-02 -1.095704E-01 -2.479383E-01 -1.138276E-01 -6.457108E-02 -6.833667E-02 --5.623363E-02 -1.087254E-01 -3.675294E-01 -9.602246E-02 --1.459951E-01 -9.440544E-02 --6.817672E-02 -4.978066E-02 -1.076782E-02 -1.697440E-01 --1.024501E-02 -1.184830E-01 --1.654178E-01 -1.689209E-02 --1.006214E-01 -3.392546E-02 -5.070063E-01 -7.598100E-02 -2.251704E-01 -7.867348E-02 --1.693789E-01 -2.069974E-01 --2.790249E-01 -2.674643E-02 -3.888604E-01 -3.649330E-02 -7.614452E-02 -7.098023E-02 -1.236282E-02 -5.476895E-02 --3.151637E-01 -3.543466E-02 --6.363562E-01 -9.323507E-02 -2.808153E-01 -8.537981E-02 -2.197639E-01 -3.393653E-02 -8.660625E-02 -1.575544E-02 -3.733826E-02 -1.449783E-02 -8.800903E-04 -3.993931E-02 -3.304886E-01 -3.099095E-02 --4.149186E-02 -5.375091E-02 -2.448819E-01 -9.225028E-02 --1.230091E-01 -3.865008E-02 -7.600812E+00 -1.199814E+01 --8.738539E-01 -3.078183E-01 --2.592305E-01 -1.015952E-01 --6.391696E-02 -6.657129E-02 --2.857855E-01 -2.216294E-02 --3.516811E-01 -3.429194E-02 -4.585144E-02 -6.204056E-02 --1.599494E-01 -1.684846E-02 --2.364219E-01 -1.550644E-02 -1.197289E-01 -8.631394E-02 --1.364517E-01 -5.086560E-02 --2.213374E-01 -2.779096E-02 --7.328761E-02 -1.216230E-02 -2.476803E-01 -2.724500E-02 --6.356296E-02 -2.513244E-02 --3.886281E-01 -9.479377E-02 -1.006972E-01 -1.352120E-02 -6.932242E-02 -3.192705E-02 --3.232505E-02 -5.592418E-02 -9.582599E-02 -1.504811E-02 --2.887999E-01 -3.760482E-02 --2.372013E-01 -1.868786E-02 --1.655526E-01 -4.720116E-02 -8.611265E-02 -2.284310E-02 --2.142116E-01 -2.619080E-02 --1.811202E-01 -1.457105E-02 -1.430164E-01 -2.016598E-02 --4.066031E-01 -7.671356E-02 -1.364946E-01 -1.385677E-02 -8.357667E-02 -1.521943E-02 --2.235270E-02 -1.029570E-02 --7.920760E-02 -4.227880E-02 -2.622096E-01 -2.327728E-02 --7.787296E-03 -2.288300E-02 --1.645219E-02 -5.394704E-02 -7.274557E-02 -1.075570E-02 -4.104875E+01 -3.455300E+02 --9.827893E-01 -2.751051E-01 -3.227606E-01 -1.213711E-01 --1.272840E-02 -2.813639E-01 --1.910394E-01 -5.682320E-02 -4.136260E-01 -2.444497E-01 --5.123352E-02 -3.867174E-01 -4.424857E-02 -9.651204E-02 --3.975443E-02 -1.867060E-01 -7.618837E-01 -1.756891E-01 -4.259599E-01 -1.146646E-01 -5.658031E-02 -1.366891E-01 -2.464931E-01 -2.181122E-01 --1.593998E-01 -2.666678E-01 --1.928096E-01 -1.216164E-01 --7.020992E-01 -1.701086E-01 -3.914244E-01 -1.772217E-01 -3.285697E-01 -1.521826E-01 --2.947923E-02 -8.201284E-02 --1.346653E-01 -4.498340E-02 -2.112724E-01 -9.923303E-02 --8.551910E-02 -8.804286E-03 --3.631005E-01 -1.168145E-01 --1.840770E-01 -5.714283E-02 --2.709303E-02 -9.381338E-02 --2.104005E-02 -4.479215E-02 -4.059493E-01 -8.277066E-02 -2.877400E-01 -8.584721E-02 -4.881128E-02 -1.864179E-01 -8.584545E-02 -4.421744E-02 --4.392466E-01 -6.260373E-02 --3.143214E-02 -8.184856E-02 --5.630973E-01 -1.323469E-01 --8.010498E-02 -1.096975E-01 -1.818829E-01 -1.717701E-02 --1.062149E-01 -5.400365E-02 -tally 25: -3.862543E+01 -2.993190E+02 --5.083613E-01 -2.933365E-01 --4.356793E-01 -6.676831E-01 --6.093148E-01 -5.685331E-01 -2.512276E-01 -1.308652E-01 --1.075955E+00 -4.775270E-01 -3.660307E-01 -1.627691E-01 -5.402149E-01 -2.324946E-01 --3.887573E-01 -1.028105E-01 -4.324152E-01 -1.015147E-01 -3.306993E-02 -8.425069E-02 -2.127456E-01 -5.435453E-02 -2.977294E-01 -1.088039E-01 --1.055079E+00 -3.590635E-01 --6.740592E-01 -2.606281E-01 -3.329512E-01 -1.587428E-01 --1.248691E-01 -1.659045E-01 -2.306000E-01 -1.062057E-01 -9.127791E-02 -2.649459E-01 -2.629881E-01 -4.786229E-02 -2.286813E-01 -2.363629E-02 -6.338613E-01 -1.118828E-01 -7.466647E-01 -1.424535E-01 -7.955161E-02 -1.003327E-02 -1.082691E-01 -2.727882E-02 --5.295185E-01 -1.335133E-01 --6.321517E-01 -1.422916E-01 -1.236137E-01 -2.041422E-01 --5.389265E-02 -1.852888E-01 -3.746082E-01 -5.580885E-02 -1.383528E-01 -2.754456E-01 -5.081204E-01 -1.886515E-01 --4.022264E-01 -1.417397E-01 --3.377771E-01 -6.673888E-02 -1.170109E-01 -1.783182E-02 --2.097916E-01 -7.139323E-02 -1.438678E+01 -4.193571E+01 --6.547124E-01 -1.780450E-01 -2.207489E-01 -2.115835E-01 -4.952323E-02 -3.039341E-01 -6.681546E-01 -1.389250E-01 --4.078026E-02 -4.393667E-02 --8.695509E-01 -2.850853E-01 --1.792062E-01 -7.367253E-02 --5.657500E-01 -2.115125E-01 --8.525189E-02 -2.541971E-02 -5.227867E-02 -2.008468E-02 -6.825349E-02 -5.316522E-02 -3.763076E-01 -7.112554E-02 --1.279973E-02 -1.883096E-01 -7.775189E-02 -6.874374E-02 -1.119537E-01 -8.467755E-02 --1.600632E-01 -8.650448E-02 -6.210095E-01 -1.094309E-01 --9.997484E-02 -3.935353E-02 --2.300525E-01 -2.351925E-02 -2.486103E-02 -3.125565E-02 -1.289518E-02 -2.879251E-02 --3.166559E-01 -2.931428E-02 --1.379285E-02 -2.416257E-02 -1.220552E-02 -5.154030E-02 --1.431676E-01 -3.434080E-02 -8.148581E-02 -4.218412E-02 -8.541678E-03 -6.396306E-02 --7.851012E-03 -5.799658E-02 -2.435723E-01 -6.744263E-02 --2.429877E-01 -6.966516E-02 --1.638644E-01 -2.058798E-02 --8.986584E-03 -1.374824E-02 -3.547454E-01 -7.765460E-02 --1.570173E-01 -6.916960E-02 --1.056941E-02 -7.626528E-03 -6.400634E+01 -8.298077E+02 --3.894111E-01 -8.617494E-01 -1.796567E-01 -1.065356E+00 --1.561037E+00 -7.701475E-01 --2.237530E-01 -2.259442E-01 -1.109999E+00 -6.179412E-01 -1.636912E+00 -7.887441E-01 -4.661183E-01 -4.191138E-01 --1.040546E+00 -2.971961E-01 -1.044850E-01 -1.493530E-01 --4.991935E-01 -3.222404E-01 --4.205099E-01 -2.734911E-01 --7.583139E-01 -3.000853E-01 --3.750811E-01 -1.348273E-01 --6.355508E-01 -3.666139E-01 -5.233787E-01 -1.292414E-01 --2.869538E-02 -9.115092E-02 -6.851052E-01 -3.061040E-01 -1.703522E-01 -7.300335E-02 -4.541075E-01 -4.438507E-01 --2.674857E-01 -4.718588E-01 -3.022517E-02 -1.136781E-01 -5.755596E-01 -2.688162E-01 -2.698373E-01 -1.403188E-01 -8.772347E-01 -3.503562E-01 --4.258508E-01 -1.400825E-01 --1.384853E-01 -4.924947E-02 --1.009402E-01 -2.039230E-01 --1.339732E-01 -4.772083E-02 --3.249636E-01 -4.339747E-01 -1.564400E-01 -2.703717E-01 -2.536360E-01 -8.543919E-02 --3.622063E-01 -7.442240E-02 --2.074953E-02 -1.355614E-01 --3.909820E-02 -1.007999E-01 -3.162815E-01 -9.656425E-02 -2.426423E+01 -1.215124E+02 --9.628829E-01 -3.563586E-01 -2.964625E-01 -9.739638E-02 --3.680881E-01 -3.484018E-01 -4.339143E-01 -7.590564E-02 -4.633394E-02 -1.080030E-01 -3.091634E-01 -1.246585E-01 -4.520500E-02 -1.095704E-01 -2.479383E-01 -1.138276E-01 -6.457108E-02 -6.833667E-02 --5.623363E-02 -1.087254E-01 -3.675294E-01 -9.602246E-02 --1.459951E-01 -9.440544E-02 --6.817672E-02 -4.978066E-02 -1.076782E-02 -1.697440E-01 --1.024501E-02 -1.184830E-01 --1.654178E-01 -1.689209E-02 --1.006214E-01 -3.392546E-02 -5.070063E-01 -7.598100E-02 -2.251704E-01 -7.867348E-02 --1.693789E-01 -2.069974E-01 --2.790249E-01 -2.674643E-02 -3.888604E-01 -3.649330E-02 -7.614452E-02 -7.098023E-02 -1.236282E-02 -5.476895E-02 --3.151637E-01 -3.543466E-02 --6.363562E-01 -9.323507E-02 -2.808153E-01 -8.537981E-02 -2.197639E-01 -3.393653E-02 -8.660625E-02 -1.575544E-02 -3.733826E-02 -1.449783E-02 -8.800903E-04 -3.993931E-02 -3.304886E-01 -3.099095E-02 --4.149186E-02 -5.375091E-02 -2.448819E-01 -9.225028E-02 --1.230091E-01 -3.865008E-02 -7.600812E+00 -1.199814E+01 --8.738539E-01 -3.078183E-01 --2.592305E-01 -1.015952E-01 --6.391696E-02 -6.657129E-02 --2.857855E-01 -2.216294E-02 --3.516811E-01 -3.429194E-02 -4.585144E-02 -6.204056E-02 --1.599494E-01 -1.684846E-02 --2.364219E-01 -1.550644E-02 -1.197289E-01 -8.631394E-02 --1.364517E-01 -5.086560E-02 --2.213374E-01 -2.779096E-02 --7.328761E-02 -1.216230E-02 -2.476803E-01 -2.724500E-02 --6.356296E-02 -2.513244E-02 --3.886281E-01 -9.479377E-02 -1.006972E-01 -1.352120E-02 -6.932242E-02 -3.192705E-02 --3.232505E-02 -5.592418E-02 -9.582599E-02 -1.504811E-02 --2.887999E-01 -3.760482E-02 --2.372013E-01 -1.868786E-02 --1.655526E-01 -4.720116E-02 -8.611265E-02 -2.284310E-02 --2.142116E-01 -2.619080E-02 --1.811202E-01 -1.457105E-02 -1.430164E-01 -2.016598E-02 --4.066031E-01 -7.671356E-02 -1.364946E-01 -1.385677E-02 -8.357667E-02 -1.521943E-02 --2.235270E-02 -1.029570E-02 --7.920760E-02 -4.227880E-02 -2.622096E-01 -2.327728E-02 --7.787296E-03 -2.288300E-02 --1.645219E-02 -5.394704E-02 -7.274557E-02 -1.075570E-02 -4.104875E+01 -3.455300E+02 --9.827893E-01 -2.751051E-01 -3.227606E-01 -1.213711E-01 --1.272840E-02 -2.813639E-01 --1.910394E-01 -5.682320E-02 -4.136260E-01 -2.444497E-01 --5.123352E-02 -3.867174E-01 -4.424857E-02 -9.651204E-02 --3.975443E-02 -1.867060E-01 -7.618837E-01 -1.756891E-01 -4.259599E-01 -1.146646E-01 -5.658031E-02 -1.366891E-01 -2.464931E-01 -2.181122E-01 --1.593998E-01 -2.666678E-01 --1.928096E-01 -1.216164E-01 --7.020992E-01 -1.701086E-01 -3.914244E-01 -1.772217E-01 -3.285697E-01 -1.521826E-01 --2.947923E-02 -8.201284E-02 --1.346653E-01 -4.498340E-02 -2.112724E-01 -9.923303E-02 --8.551910E-02 -8.804286E-03 --3.631005E-01 -1.168145E-01 --1.840770E-01 -5.714283E-02 --2.709303E-02 -9.381338E-02 --2.104005E-02 -4.479215E-02 -4.059493E-01 -8.277066E-02 -2.877400E-01 -8.584721E-02 -4.881128E-02 -1.864179E-01 -8.584545E-02 -4.421744E-02 --4.392466E-01 -6.260373E-02 --3.143214E-02 -8.184856E-02 --5.630973E-01 -1.323469E-01 --8.010498E-02 -1.096975E-01 -1.818829E-01 -1.717701E-02 --1.062149E-01 -5.400365E-02 -tally 26: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.485000E+01 -4.439790E+01 -1.259515E+00 -3.360064E-01 -7.983154E-01 -1.355632E-01 -3.425460E-01 -2.971972E-02 -2.949225E-01 -3.975603E-02 -1.485000E+01 -4.439790E+01 -1.259515E+00 -3.360064E-01 -7.983154E-01 -1.355632E-01 -3.425460E-01 -2.971972E-02 -2.949225E-01 -3.975603E-02 -4.120000E+00 -3.438000E+00 -6.222571E-01 -8.335984E-02 -1.670136E-01 -1.374768E-02 --5.819374E-02 -1.091808E-02 --6.389550E-02 -5.688533E-03 -4.120000E+00 -3.438000E+00 -6.222571E-01 -8.335984E-02 -1.670136E-01 -1.374768E-02 --5.819374E-02 -1.091808E-02 --6.389550E-02 -5.688533E-03 -5.173000E+01 -5.467243E+02 -2.669403E+01 -1.451361E+02 -9.691140E+00 -1.933574E+01 -5.860769E-01 -2.122377E-01 --1.190340E+00 -3.145785E-01 -5.173000E+01 -5.467243E+02 -2.669403E+01 -1.451361E+02 -9.691140E+00 -1.933574E+01 -5.860769E-01 -2.122377E-01 --1.190340E+00 -3.145785E-01 -tally 27: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.485000E+01 -4.439790E+01 -1.259515E+00 -3.360064E-01 -7.983154E-01 -1.355632E-01 -3.425460E-01 -2.971972E-02 -2.949225E-01 -3.975603E-02 -1.485000E+01 -4.439790E+01 --8.440076E-02 -1.135203E-02 -8.198663E-02 -3.887429E-02 --1.358080E-01 -2.890416E-02 --3.544823E-02 -9.843339E-04 --1.542072E-01 -8.228126E-03 -1.057111E-01 -3.758100E-03 --1.647870E-02 -4.827841E-03 -1.378297E-01 -1.566876E-02 -4.676778E-02 -4.809366E-03 -1.966204E-02 -7.447981E-04 -1.889258E-02 -6.841953E-04 -1.337703E-02 -1.250077E-03 --1.044684E-01 -6.969498E-03 --1.177995E-02 -8.208715E-03 --1.940058E-04 -5.128759E-03 --2.165868E-02 -1.335569E-03 --3.080886E-02 -4.544434E-04 -1.039856E-03 -1.209631E-03 --1.317068E-02 -1.469722E-03 --6.432758E-02 -2.106736E-03 -3.323023E-02 -4.513838E-03 -2.683700E-02 -1.146747E-03 --3.494912E-02 -1.006153E-03 -6.289525E-02 -3.700145E-03 -1.485000E+01 -4.439790E+01 -1.259515E+00 -3.360064E-01 -7.983154E-01 -1.355632E-01 -3.425460E-01 -2.971972E-02 -2.949225E-01 -3.975603E-02 -1.485000E+01 -4.439790E+01 --8.440076E-02 -1.135203E-02 -8.198663E-02 -3.887429E-02 --1.358080E-01 -2.890416E-02 --3.544823E-02 -9.843339E-04 --1.542072E-01 -8.228126E-03 -1.057111E-01 -3.758100E-03 --1.647870E-02 -4.827841E-03 -1.378297E-01 -1.566876E-02 -4.676778E-02 -4.809366E-03 -1.966204E-02 -7.447981E-04 -1.889258E-02 -6.841953E-04 -1.337703E-02 -1.250077E-03 --1.044684E-01 -6.969498E-03 --1.177995E-02 -8.208715E-03 --1.940058E-04 -5.128759E-03 -4.120000E+00 -3.438000E+00 -6.222571E-01 -8.335984E-02 -1.670136E-01 -1.374768E-02 --5.819374E-02 -1.091808E-02 --6.389550E-02 -5.688533E-03 -4.120000E+00 -3.438000E+00 --1.628271E-01 -9.225450E-03 --6.888325E-02 -1.539168E-03 -2.676973E-02 -5.653613E-03 --3.337963E-03 -7.947252E-04 --4.406165E-02 -8.602797E-04 -4.627072E-02 -2.635048E-03 -7.039651E-02 -2.623481E-03 --3.841045E-02 -3.044564E-03 -9.237978E-03 -4.282545E-04 --5.684456E-02 -7.512518E-04 -2.650251E-04 -5.448171E-04 -4.772861E-03 -5.040314E-04 --2.147644E-02 -7.335266E-04 -1.905098E-02 -8.260721E-04 -5.429075E-02 -2.187346E-03 -5.159732E-03 -4.908243E-04 --7.760747E-03 -1.158921E-03 --8.149531E-03 -1.257165E-04 --1.494397E-02 -4.274428E-04 -2.687381E-02 -4.665908E-04 --1.770251E-02 -5.559502E-04 -1.017742E-03 -3.718233E-04 -3.490710E-02 -3.484712E-04 --3.765157E-03 -8.337155E-04 -4.120000E+00 -3.438000E+00 -6.222571E-01 -8.335984E-02 -1.670136E-01 -1.374768E-02 --5.819374E-02 -1.091808E-02 --6.389550E-02 -5.688533E-03 -4.120000E+00 -3.438000E+00 --1.628271E-01 -9.225450E-03 --6.888325E-02 -1.539168E-03 -2.676973E-02 -5.653613E-03 --3.337963E-03 -7.947252E-04 --4.406165E-02 -8.602797E-04 -4.627072E-02 -2.635048E-03 -7.039651E-02 -2.623481E-03 --3.841045E-02 -3.044564E-03 -9.237978E-03 -4.282545E-04 --5.684456E-02 -7.512518E-04 -2.650251E-04 -5.448171E-04 -4.772861E-03 -5.040314E-04 --2.147644E-02 -7.335266E-04 -1.905098E-02 -8.260721E-04 -5.429075E-02 -2.187346E-03 -5.173000E+01 -5.467243E+02 -2.669403E+01 -1.451361E+02 -9.691140E+00 -1.933574E+01 -5.860769E-01 -2.122377E-01 --1.190340E+00 -3.145785E-01 -5.173000E+01 -5.467243E+02 --1.983402E-01 -1.915674E-01 --1.674839E-01 -1.869769E-01 --5.653273E-01 -1.987939E-01 --7.760837E-02 -4.789688E-02 -2.727635E-01 -2.457144E-02 -1.857970E-02 -1.847097E-02 --3.630622E-01 -5.790100E-02 --4.123237E-01 -5.700176E-02 -5.742532E-02 -1.032394E-02 --5.735109E-02 -1.231577E-02 -1.272672E-01 -1.601764E-02 -2.270866E-01 -1.322803E-02 --5.808421E-04 -9.816465E-03 --1.579343E-01 -1.090331E-02 --1.216659E-01 -5.662713E-03 -1.610713E-02 -1.269120E-02 --9.673684E-03 -4.819562E-03 -1.263075E-01 -8.599309E-03 -1.318035E-01 -1.578558E-02 --1.204668E-01 -4.835293E-03 -9.045915E-02 -4.701121E-03 --1.149557E-02 -1.831502E-02 -4.573371E-02 -1.969365E-03 -2.654515E-02 -5.974645E-03 -5.173000E+01 -5.467243E+02 -2.669403E+01 -1.451361E+02 -9.691140E+00 -1.933574E+01 -5.860769E-01 -2.122377E-01 --1.190340E+00 -3.145785E-01 -5.173000E+01 -5.467243E+02 --1.983402E-01 -1.915674E-01 --1.674839E-01 -1.869769E-01 --5.653273E-01 -1.987939E-01 --7.760837E-02 -4.789688E-02 -2.727635E-01 -2.457144E-02 -1.857970E-02 -1.847097E-02 --3.630622E-01 -5.790100E-02 --4.123237E-01 -5.700176E-02 -5.742532E-02 -1.032394E-02 --5.735109E-02 -1.231577E-02 -1.272672E-01 -1.601764E-02 -2.270866E-01 -1.322803E-02 --5.808421E-04 -9.816465E-03 --1.579343E-01 -1.090331E-02 --1.216659E-01 -5.662713E-03 -tally 28: -0.000000E+00 -0.000000E+00 -1.767552E+01 -6.295417E+01 -3.863588E+00 -3.013300E+00 -5.356594E+01 -5.839391E+02 -tally 29: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.780506E-01 -1.942072E-01 --4.170415E-02 -7.581469E-04 --2.419728E-03 -6.296241E-04 --8.163997E-03 -4.785197E-04 -3.971909E-03 -1.363304E-04 -1.585497E-02 -1.295251E-04 --7.029875E-02 -1.208194E-03 --1.524070E-02 -2.828843E-04 --2.141105E-02 -2.953327E-04 --2.147623E-02 -2.390414E-04 -5.592040E-04 -1.720605E-04 -3.022066E-03 -1.843720E-04 -1.489821E-02 -9.193290E-05 --1.354668E-02 -2.551940E-04 --5.692690E-04 -3.013453E-04 -2.324582E-02 -2.170615E-04 -1.883012E-02 -1.045949E-04 --3.997107E-03 -1.674058E-04 -1.616443E-02 -2.046286E-04 -1.625747E-02 -1.851351E-04 -1.120209E-02 -2.028649E-04 -4.240284E-03 -4.019011E-05 -1.535379E-02 -9.872559E-05 --8.973926E-03 -1.448680E-04 --3.933227E-03 -4.305328E-04 -1.767552E+01 -6.295417E+01 --1.458308E-01 -8.239551E-03 -1.976485E-01 -7.360520E-02 --2.647182E-01 -5.347815E-02 -1.828025E-01 -1.840743E-02 -1.865994E-01 -2.843407E-02 --6.438995E-02 -8.898045E-03 --1.416445E-01 -3.839856E-02 --3.298894E-01 -2.672141E-02 --1.462639E-01 -1.225250E-02 --6.410138E-02 -3.766615E-02 -4.701705E-02 -1.968428E-03 -2.953056E-02 -2.358647E-02 --1.717672E-01 -5.877351E-02 -1.927497E-02 -1.358953E-02 -1.708870E-01 -1.502033E-02 -4.453803E-02 -1.622532E-02 --2.076143E-02 -1.850686E-03 -1.111325E-01 -8.415150E-03 -1.249594E-01 -7.491280E-03 -1.381757E-02 -1.537264E-02 --7.286234E-03 -9.057874E-03 -3.162973E-01 -3.303388E-02 -1.012773E-01 -8.345375E-03 --5.238963E-02 -3.920421E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.863588E+00 -3.013300E+00 -5.075749E-02 -1.018210E-03 -3.445344E-02 -5.778215E-03 --6.239642E-02 -4.107408E-03 --1.475495E-02 -7.971898E-04 -5.809323E-02 -3.039895E-03 --2.510339E-02 -3.529134E-04 --9.731680E-03 -1.221628E-03 --5.815144E-02 -1.403261E-03 --4.936694E-02 -6.481626E-04 -5.141985E-03 -1.343973E-03 -1.515105E-02 -3.044735E-04 -4.474521E-03 -1.155268E-03 --6.855877E-02 -4.048417E-03 --2.701967E-05 -1.279041E-03 -2.197636E-02 -2.843662E-04 --1.780381E-02 -8.441574E-04 -2.916634E-02 -2.530602E-03 -2.289834E-02 -2.201375E-03 -3.283424E-02 -7.615219E-04 -9.623726E-03 -7.614092E-04 -2.808239E-02 -1.500381E-03 -4.835419E-02 -6.933678E-04 --2.636221E-02 -2.230834E-04 --4.957463E-02 -1.939266E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.356594E+01 -5.839391E+02 --1.198882E+00 -3.391100E-01 -3.952398E-01 -5.729760E-01 --1.045726E+00 -4.419194E-01 -2.683170E-01 -1.872580E-01 -5.059349E-01 -2.592209E-01 -4.561651E-01 -1.253696E-01 --4.273775E-01 -3.509266E-01 --6.300496E-01 -2.102051E-01 --3.094705E-01 -1.410278E-01 --6.840225E-01 -1.971765E-01 -4.123355E-02 -3.962538E-02 --1.554557E-01 -2.784362E-02 --4.698631E-01 -1.867413E-01 --7.016026E-02 -3.059344E-02 -2.922284E-01 -8.680517E-02 --1.252431E-01 -3.180591E-02 -1.825937E-01 -8.626653E-02 -1.637960E-01 -1.329538E-01 -6.662867E-01 -1.497985E-01 -4.662585E-01 -7.552145E-02 -1.198254E-03 -2.020899E-01 -5.281410E-01 -9.615758E-02 -6.396211E-02 -1.806992E-01 --1.898620E-01 -1.113751E-01 -tally 30: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.300000E-01 -1.839000E-01 -4.056201E-03 -8.670884E-04 --2.262959E-02 -2.263780E-03 --4.568371E-02 -4.078305E-03 -6.023055E-02 -1.099458E-03 --2.468374E-02 -3.403931E-03 --8.676202E-02 -2.444658E-03 -2.075016E-02 -5.432442E-03 -1.101095E-02 -3.129947E-04 -8.689134E-03 -2.422445E-03 --1.097503E-02 -4.670673E-04 -4.979355E-02 -1.791811E-03 -1.769845E-02 -6.074665E-04 --1.473469E-02 -1.257671E-03 --1.133757E-02 -1.555143E-03 -1.730195E-02 -1.841949E-03 --1.191492E-02 -1.859105E-03 -9.038577E-03 -4.401577E-04 -1.770047E-02 -4.158291E-04 -1.492809E-02 -5.488168E-04 -7.970152E-02 -1.597910E-03 -3.741348E-02 -5.704935E-04 -2.078478E-02 -5.379832E-04 --1.355930E-02 -6.747758E-04 -3.416200E-02 -8.262470E-04 -1.739000E+01 -6.083290E+01 --2.434171E-01 -3.049063E-02 --1.278707E-01 -9.585267E-02 --2.597328E-01 -8.692607E-02 -2.496700E-01 -3.750933E-02 --1.309937E-01 -4.217907E-02 --1.863241E-01 -1.738581E-02 -1.292679E-01 -1.799004E-02 --3.543191E-01 -3.682107E-02 -1.904413E-01 -1.455250E-02 --7.093238E-02 -1.473997E-02 -1.920412E-01 -1.308864E-02 -1.566093E-01 -1.913492E-02 --2.499642E-01 -3.036874E-02 --2.323022E-01 -3.794368E-02 -6.361729E-02 -3.266166E-02 -4.688479E-02 -2.806712E-02 -9.796563E-02 -1.419748E-02 -1.000847E-02 -3.233262E-02 -7.570231E-02 -4.626536E-03 -1.489091E-01 -1.159345E-02 -2.236285E-01 -1.480084E-02 -2.461305E-01 -1.643844E-02 -1.773523E-02 -1.626036E-03 -6.570774E-02 -1.069893E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.160000E+00 -3.501000E+00 --9.464171E-02 -8.682833E-03 -8.467800E-02 -1.402624E-02 -1.283471E-02 -2.630439E-02 -1.859869E-01 -1.189528E-02 -1.910311E-02 -2.907370E-03 --2.542253E-01 -2.143851E-02 --4.021473E-02 -5.812599E-03 --1.242140E-01 -1.017873E-02 --2.934198E-02 -2.409920E-03 -5.719767E-02 -2.211520E-03 -3.023903E-02 -2.870625E-03 -1.092479E-01 -6.089989E-03 -1.604743E-02 -1.110224E-02 -3.811062E-03 -5.234112E-03 -5.446762E-02 -5.323411E-03 --3.868978E-02 -4.949255E-03 -1.384260E-01 -4.903532E-03 --3.761889E-02 -2.524889E-03 --6.079772E-02 -2.328339E-03 -1.956623E-03 -4.096814E-03 -1.716402E-03 -2.022751E-03 --1.108600E-01 -3.227014E-03 --2.447622E-03 -4.075421E-03 -1.582493E-02 -4.847858E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.213000E+01 -5.552351E+02 --6.019876E-01 -2.938936E-01 -2.126970E-01 -3.363271E-01 --6.928646E-01 -3.077152E-01 --2.976474E-01 -5.830705E-02 -7.804821E-01 -3.967156E-01 -5.737502E-01 -1.090147E-01 --2.867929E-01 -1.312720E-01 --4.735578E-01 -6.714577E-02 --6.340442E-02 -4.240623E-02 --1.594570E-01 -1.167021E-01 --5.403124E-02 -6.452745E-02 --2.670969E-01 -5.822561E-02 --3.033558E-01 -4.890487E-02 --3.515557E-01 -5.069681E-02 -2.257462E-01 -4.682933E-02 --1.449924E-02 -1.625521E-02 -2.809498E-01 -6.883451E-02 -1.904808E-01 -1.004755E-01 -2.570005E-01 -4.301248E-02 -9.493600E-02 -7.708499E-02 --2.804222E-01 -4.455703E-02 -3.199914E-01 -7.435651E-02 --2.818069E-04 -7.231318E-02 -3.689494E-01 -1.349712E-01 -tally 31: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.453374E-01 -1.815824E-01 --4.552571E-02 -8.689847E-04 -4.192526E-03 -6.095248E-04 --4.085060E-03 -3.488081E-04 -3.074303E-02 -3.709785E-04 -1.949067E-02 -1.995057E-04 --7.372260E-02 -1.709765E-03 --5.140901E-03 -6.268082E-05 --2.589014E-02 -1.616678E-04 -1.683116E-02 -2.122512E-04 --1.074659E-02 -1.087471E-04 -3.762844E-03 -3.439135E-05 -1.365793E-02 -5.255161E-05 -5.869374E-05 -4.060049E-04 --7.715004E-03 -3.629588E-04 -8.240120E-03 -5.192031E-04 -1.662861E-02 -5.038262E-04 --2.845811E-03 -2.843348E-04 -1.826833E-03 -1.104947E-05 --5.596885E-04 -1.922661E-05 -1.398723E-02 -1.025178E-04 -1.733988E-02 -1.184228E-04 -1.250057E-02 -1.447801E-04 --5.450018E-03 -3.725923E-05 -2.390947E-02 -6.837656E-04 -1.739000E+01 -6.083290E+01 --2.434171E-01 -3.049063E-02 --1.278707E-01 -9.585267E-02 --2.597328E-01 -8.692607E-02 -2.496700E-01 -3.750933E-02 --1.309937E-01 -4.217907E-02 --1.863241E-01 -1.738581E-02 -1.292679E-01 -1.799004E-02 --3.543191E-01 -3.682107E-02 -1.904413E-01 -1.455250E-02 --7.093238E-02 -1.473997E-02 -1.920412E-01 -1.308864E-02 -1.566093E-01 -1.913492E-02 --2.499642E-01 -3.036874E-02 --2.323022E-01 -3.794368E-02 -6.361729E-02 -3.266166E-02 -4.688479E-02 -2.806712E-02 -9.796563E-02 -1.419748E-02 -1.000847E-02 -3.233262E-02 -7.570231E-02 -4.626536E-03 -1.489091E-01 -1.159345E-02 -2.236285E-01 -1.480084E-02 -2.461305E-01 -1.643844E-02 -1.773523E-02 -1.626036E-03 -6.570774E-02 -1.069893E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.160000E+00 -3.501000E+00 --9.464171E-02 -8.682833E-03 -8.467800E-02 -1.402624E-02 -1.283471E-02 -2.630439E-02 -1.859869E-01 -1.189528E-02 -1.910311E-02 -2.907370E-03 --2.542253E-01 -2.143851E-02 --4.021473E-02 -5.812599E-03 --1.242140E-01 -1.017873E-02 --2.934198E-02 -2.409920E-03 -5.719767E-02 -2.211520E-03 -3.023903E-02 -2.870625E-03 -1.092479E-01 -6.089989E-03 -1.604743E-02 -1.110224E-02 -3.811062E-03 -5.234112E-03 -5.446762E-02 -5.323411E-03 --3.868978E-02 -4.949255E-03 -1.384260E-01 -4.903532E-03 --3.761889E-02 -2.524889E-03 --6.079772E-02 -2.328339E-03 -1.956623E-03 -4.096814E-03 -1.716402E-03 -2.022751E-03 --1.108600E-01 -3.227014E-03 --2.447622E-03 -4.075421E-03 -1.582493E-02 -4.847858E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.213000E+01 -5.552351E+02 --6.019876E-01 -2.938936E-01 -2.126970E-01 -3.363271E-01 --6.928646E-01 -3.077152E-01 --2.976474E-01 -5.830705E-02 -7.804821E-01 -3.967156E-01 -5.737502E-01 -1.090147E-01 --2.867929E-01 -1.312720E-01 --4.735578E-01 -6.714577E-02 --6.340442E-02 -4.240623E-02 --1.594570E-01 -1.167021E-01 --5.403124E-02 -6.452745E-02 --2.670969E-01 -5.822561E-02 --3.033558E-01 -4.890487E-02 --3.515557E-01 -5.069681E-02 -2.257462E-01 -4.682933E-02 --1.449924E-02 -1.625521E-02 -2.809498E-01 -6.883451E-02 -1.904808E-01 -1.004755E-01 -2.570005E-01 -4.301248E-02 -9.493600E-02 -7.708499E-02 --2.804222E-01 -4.455703E-02 -3.199914E-01 -7.435651E-02 --2.818069E-04 -7.231318E-02 -3.689494E-01 -1.349712E-01 +5be9b80ecc189d4ee3a6a228d97b0c76b6b47e5204a86ecf03b8faa65c499f6861ffd85c153084bafd0835d10dfacc14f28802901ce966c8a803d60d0c2f42e5 \ No newline at end of file diff --git a/tests/test_tallies/test_tallies.py b/tests/test_tallies/test_tallies.py index b6cdebe2d3..9fca93bcab 100644 --- a/tests/test_tallies/test_tallies.py +++ b/tests/test_tallies/test_tallies.py @@ -5,9 +5,21 @@ import sys sys.path.insert(0, os.pardir) from testing_harness import PyAPITestHarness from openmc import Filter, Mesh, Tally, TalliesFile +from openmc.source import Source +from openmc.stats import Box class TalliesTestHarness(PyAPITestHarness): def _build_inputs(self): + # Build default materials/geometry + self._input_set.build_default_materials_and_geometry() + + # Set settings explicitly + self._input_set.settings.batches = 5 + self._input_set.settings.inactive = 0 + self._input_set.settings.particles = 400 + self._input_set.settings.source = Source(space=Box( + [-160, -160, -183], [160, 160, 183])) + azimuthal_bins = (-3.1416, -1.8850, -0.6283, 0.6283, 1.8850, 3.1416) azimuthal_filter1 = Filter(type='azimuthal', bins=azimuthal_bins) azimuthal_tally1 = Tally() @@ -126,6 +138,7 @@ class TalliesTestHarness(PyAPITestHarness): t.add_score('(n,gamma)') t.add_score('nu-fission') t.add_score('scatter') + t.add_score('elastic') t.add_score('total') score_tallies[0].estimator = 'tracklength' score_tallies[1].estimator = 'analog' @@ -170,6 +183,18 @@ class TalliesTestHarness(PyAPITestHarness): total_tallies[2].estimator = 'analog' total_tallies[3].estimator = 'collision' + questionable_tally = Tally() + questionable_tally.add_score('transport') + questionable_tally.add_score('n1n') + + all_nuclide_tallies = [Tally(), Tally()] + for t in all_nuclide_tallies: + t.add_filter(cell_filter) + t.add_nuclide('all') + t.add_score('total') + all_nuclide_tallies[0].estimator = 'tracklength' + all_nuclide_tallies[0].estimator = 'collision' + self._input_set.tallies = TalliesFile() self._input_set.tallies.add_tally(azimuthal_tally1) self._input_set.tallies.add_tally(azimuthal_tally2) @@ -194,9 +219,14 @@ class TalliesTestHarness(PyAPITestHarness): self._input_set.tallies.add_tally(scatter_tally1) self._input_set.tallies.add_tally(scatter_tally2) [self._input_set.tallies.add_tally(t) for t in total_tallies] + self._input_set.tallies.add_tally(questionable_tally) + [self._input_set.tallies.add_tally(t) for t in all_nuclide_tallies] self._input_set.tallies.add_mesh(mesh_2x2) - super(TalliesTestHarness, self)._build_inputs() + self._input_set.export() + + def _get_results(self): + return super(TalliesTestHarness, self)._get_results(hash_output=True) def _cleanup(self): super(TalliesTestHarness, self)._cleanup() @@ -205,5 +235,5 @@ class TalliesTestHarness(PyAPITestHarness): if __name__ == '__main__': - harness = TalliesTestHarness('statepoint.10.*', True) + harness = TalliesTestHarness('statepoint.5.*', True) harness.main() From f27d4797bd7eef64fb899c5fae7cfc026a29ff13 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 20 Jan 2016 09:20:40 -0600 Subject: [PATCH 211/650] Add tallies to test_survival_biasing --- tests/test_survival_biasing/results_true.dat | 18 ++++++++++++++++++ tests/test_survival_biasing/tallies.xml | 16 ++++++++++++++++ .../test_survival_biasing.py | 2 +- 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 tests/test_survival_biasing/tallies.xml diff --git a/tests/test_survival_biasing/results_true.dat b/tests/test_survival_biasing/results_true.dat index a97654cfa2..3e327841aa 100644 --- a/tests/test_survival_biasing/results_true.dat +++ b/tests/test_survival_biasing/results_true.dat @@ -1,2 +1,20 @@ k-combined: 9.997733E-01 2.995572E-02 +tally 1: +4.354055E+01 +3.793645E+02 +1.808636E+01 +6.546005E+01 +2.234465E+00 +9.989832E-01 +1.937431E+00 +7.510380E-01 +5.021671E+00 +5.045425E+00 +3.506791E-02 +2.460654E-04 +3.752351E+02 +2.817188E+04 +tally 2: +1.808636E+01 +6.546005E+01 diff --git a/tests/test_survival_biasing/tallies.xml b/tests/test_survival_biasing/tallies.xml new file mode 100644 index 0000000000..8d939dfffc --- /dev/null +++ b/tests/test_survival_biasing/tallies.xml @@ -0,0 +1,16 @@ + + + + + + flux total absorption fission nu-fission delayed-nu-fission kappa-fission + + analog + + + + total + collision + + + diff --git a/tests/test_survival_biasing/test_survival_biasing.py b/tests/test_survival_biasing/test_survival_biasing.py index 2a595f3e66..ed6addec45 100644 --- a/tests/test_survival_biasing/test_survival_biasing.py +++ b/tests/test_survival_biasing/test_survival_biasing.py @@ -7,5 +7,5 @@ from testing_harness import TestHarness if __name__ == '__main__': - harness = TestHarness('statepoint.10.*') + harness = TestHarness('statepoint.10.*', True) harness.main() From f0821bdef3c67972fc788517ea9a57e509e6d20e Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 21 Jan 2016 07:18:21 -0600 Subject: [PATCH 212/650] Make sure MEM_CHECK is not defined when it's not supposed to be --- tests/run_tests.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/run_tests.py b/tests/run_tests.py index de253c9670..48fc23d4af 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -75,7 +75,9 @@ set(CTEST_MEMORYCHECK_COMMAND "{valgrind_cmd}") set(CTEST_MEMORYCHECK_COMMAND_OPTIONS "--tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes") #set(CTEST_MEMORYCHECK_SUPPRESSIONS_FILE ${{CTEST_SOURCE_DIRECTORY}}/../tests/valgrind.supp) set(MEM_CHECK {mem_check}) +if(MEM_CHECK) set(ENV{{MEM_CHECK}} ${{MEM_CHECK}}) +endif() set(CTEST_COVERAGE_COMMAND "gcov") set(COVERAGE {coverage}) From c9d790eb3da3b3fa4896d53f96c1c815b4757950 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 21 Jan 2016 08:01:58 -0600 Subject: [PATCH 213/650] Check if offsets are allocated before writing to summary.h5 --- src/summary.F90 | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/summary.F90 b/src/summary.F90 index c06d2549c2..85d0146923 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -45,7 +45,7 @@ contains call write_attribute_string(file_id, "n_batches", & "description", "Total number of batches") - ! Write eigenvalue information + ! Write eigenvalue information if (run_mode == MODE_EIGENVALUE) then ! write number of inactive/active batches and generations/batch call write_dataset(file_id, "n_inactive", n_inactive) @@ -174,8 +174,10 @@ contains case (CELL_FILL) call write_dataset(cell_group, "fill_type", "universe") call write_dataset(cell_group, "fill", universes(c%fill)%id) - if (size(c%offset) > 0) then - call write_dataset(cell_group, "offset", c%offset) + if (allocated(c%offset)) then + if (size(c%offset) > 0) then + call write_dataset(cell_group, "offset", c%offset) + end if end if if (allocated(c%translation)) then @@ -362,8 +364,10 @@ contains call write_dataset(lattice_group, "outer", lat%outer) ! Write distribcell offsets if present - if (size(lat%offset) > 0) then - call write_dataset(lattice_group, "offsets", lat%offset) + if (allocated(lat%offset)) then + if (size(lat%offset) > 0) then + call write_dataset(lattice_group, "offsets", lat%offset) + end if end if select type (lat) From 679781da0a42e5a4ab1b49b2ae8279b5b30cc00c Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 21 Jan 2016 15:43:49 -0600 Subject: [PATCH 214/650] Disallow duplicate scores in tallies --- src/ace.F90 | 2 +- src/endf.F90 | 47 +++++++++++++++++++++++++++++++++++++++++++ src/input_xml.F90 | 27 +++++++++++++++++++++++++ src/state_point.F90 | 49 +-------------------------------------------- src/summary.F90 | 49 +-------------------------------------------- 5 files changed, 77 insertions(+), 97 deletions(-) diff --git a/src/ace.F90 b/src/ace.F90 index e97338b558..2947ff9de3 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -3,7 +3,7 @@ module ace use ace_header, only: Nuclide, Reaction, SAlphaBeta, XsListing, & DistEnergy use constants - use endf, only: reaction_name, is_fission, is_disappearance + use endf, only: is_fission, is_disappearance use error, only: fatal_error, warning use fission, only: nu_total use global diff --git a/src/endf.F90 b/src/endf.F90 index ba324722c3..64f26539a9 100644 --- a/src/endf.F90 +++ b/src/endf.F90 @@ -17,6 +17,53 @@ contains character(20) :: string select case (MT) + ! Special reactions for tallies + case (SCORE_FLUX) + string = "flux" + case (SCORE_TOTAL) + string = "total" + case (SCORE_SCATTER) + string = "scatter" + case (SCORE_NU_SCATTER) + string = "nu-scatter" + case (SCORE_SCATTER_N) + string = "scatter-n" + case (SCORE_SCATTER_PN) + string = "scatter-pn" + case (SCORE_NU_SCATTER_N) + string = "nu-scatter-n" + case (SCORE_NU_SCATTER_PN) + string = "nu-scatter-pn" + case (SCORE_TRANSPORT) + string = "transport" + case (SCORE_N_1N) + string = "n1n" + case (SCORE_ABSORPTION) + string = "absorption" + case (SCORE_FISSION) + string = "fission" + case (SCORE_NU_FISSION) + string = "nu-fission" + case (SCORE_DELAYED_NU_FISSION) + string = "delayed-nu-fission" + case (SCORE_KAPPA_FISSION) + string = "kappa-fission" + case (SCORE_CURRENT) + string = "current" + case (SCORE_FLUX_YN) + string = "flux-yn" + case (SCORE_TOTAL_YN) + string = "total-yn" + case (SCORE_SCATTER_YN) + string = "scatter-yn" + case (SCORE_NU_SCATTER_YN) + string = "nu-scatter-yn" + case (SCORE_EVENTS) + string = "events" + case (SCORE_INVERSE_VELOCITY) + string = "inverse-velocity" + + ! Normal ENDF-based reactions case (TOTAL_XS) string = '(n,total)' case (ELASTIC) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 1427458901..ec8a8a5a15 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -5,6 +5,7 @@ module input_xml use dict_header, only: DictIntInt, ElemKeyValueCI use distribution_multivariate use distribution_univariate + use endf, only: reaction_name use energy_grid, only: grid_method, n_log_bins use error, only: fatal_error, warning use geometry_header, only: Cell, Lattice, RectLattice, HexLattice @@ -3426,6 +3427,32 @@ contains ! Deallocate temporary string array of scores deallocate(sarray) + + ! Check that no duplicate scores exist + j = 1 + do while (j < n_scores) + ! Determine number of bins for scores with expansions + n_order = t % moment_order(j) + select case (t % score_bins(j)) + case (SCORE_SCATTER_PN, SCORE_NU_SCATTER_PN) + n_bins = n_order + 1 + case (SCORE_FLUX_YN, SCORE_TOTAL_YN, SCORE_SCATTER_YN, & + SCORE_NU_SCATTER_YN) + n_bins = (n_order + 1)**2 + case default + n_bins = 1 + end select + + do k = j + n_bins, n_scores + if (t % score_bins(j) == t % score_bins(k) .and. & + t % moment_order(j) == t % moment_order(k)) then + call fatal_error("Duplicate score of type '" // trim(& + reaction_name(t % score_bins(j))) // "' found in tally " & + // trim(to_str(t % id))) + end if + end do + j = j + n_bins + end do else call fatal_error("No specified on tally " & &// trim(to_str(t % id)) // ".") diff --git a/src/state_point.F90 b/src/state_point.F90 index e89cdf12a8..70ee2d06ad 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -310,54 +310,7 @@ contains call write_dataset(tally_group, "n_score_bins", tally%n_score_bins) allocate(str_array(size(tally%score_bins))) do j = 1, size(tally%score_bins) - select case(tally%score_bins(j)) - case (SCORE_FLUX) - str_array(j) = "flux" - case (SCORE_TOTAL) - str_array(j) = "total" - case (SCORE_SCATTER) - str_array(j) = "scatter" - case (SCORE_NU_SCATTER) - str_array(j) = "nu-scatter" - case (SCORE_SCATTER_N) - str_array(j) = "scatter-n" - case (SCORE_SCATTER_PN) - str_array(j) = "scatter-pn" - case (SCORE_NU_SCATTER_N) - str_array(j) = "nu-scatter-n" - case (SCORE_NU_SCATTER_PN) - str_array(j) = "nu-scatter-pn" - case (SCORE_TRANSPORT) - str_array(j) = "transport" - case (SCORE_N_1N) - str_array(j) = "n1n" - case (SCORE_ABSORPTION) - str_array(j) = "absorption" - case (SCORE_FISSION) - str_array(j) = "fission" - case (SCORE_NU_FISSION) - str_array(j) = "nu-fission" - case (SCORE_DELAYED_NU_FISSION) - str_array(j) = "delayed-nu-fission" - case (SCORE_KAPPA_FISSION) - str_array(j) = "kappa-fission" - case (SCORE_CURRENT) - str_array(j) = "current" - case (SCORE_FLUX_YN) - str_array(j) = "flux-yn" - case (SCORE_TOTAL_YN) - str_array(j) = "total-yn" - case (SCORE_SCATTER_YN) - str_array(j) = "scatter-yn" - case (SCORE_NU_SCATTER_YN) - str_array(j) = "nu-scatter-yn" - case (SCORE_EVENTS) - str_array(j) = "events" - case (SCORE_INVERSE_VELOCITY) - str_array(j) = "inverse-velocity" - case default - str_array(j) = reaction_name(tally%score_bins(j)) - end select + str_array(j) = reaction_name(tally%score_bins(j)) end do call write_dataset(tally_group, "score_bins", str_array) call write_dataset(tally_group, "n_user_score_bins", tally%n_user_score_bins) diff --git a/src/summary.F90 b/src/summary.F90 index 85d0146923..c31068eb9f 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -639,54 +639,7 @@ contains call write_dataset(tally_group, "n_score_bins", t%n_score_bins) allocate(str_array(size(t%score_bins))) do j = 1, size(t%score_bins) - select case(t%score_bins(j)) - case (SCORE_FLUX) - str_array(j) = "flux" - case (SCORE_TOTAL) - str_array(j) = "total" - case (SCORE_SCATTER) - str_array(j) = "scatter" - case (SCORE_NU_SCATTER) - str_array(j) = "nu-scatter" - case (SCORE_SCATTER_N) - str_array(j) = "scatter-n" - case (SCORE_SCATTER_PN) - str_array(j) = "scatter-pn" - case (SCORE_NU_SCATTER_N) - str_array(j) = "nu-scatter-n" - case (SCORE_NU_SCATTER_PN) - str_array(j) = "nu-scatter-pn" - case (SCORE_TRANSPORT) - str_array(j) = "transport" - case (SCORE_N_1N) - str_array(j) = "n1n" - case (SCORE_ABSORPTION) - str_array(j) = "absorption" - case (SCORE_FISSION) - str_array(j) = "fission" - case (SCORE_NU_FISSION) - str_array(j) = "nu-fission" - case (SCORE_DELAYED_NU_FISSION) - str_array(j) = "delayed-nu-fission" - case (SCORE_KAPPA_FISSION) - str_array(j) = "kappa-fission" - case (SCORE_CURRENT) - str_array(j) = "current" - case (SCORE_FLUX_YN) - str_array(j) = "flux-yn" - case (SCORE_TOTAL_YN) - str_array(j) = "total-yn" - case (SCORE_SCATTER_YN) - str_array(j) = "scatter-yn" - case (SCORE_NU_SCATTER_YN) - str_array(j) = "nu-scatter-yn" - case (SCORE_EVENTS) - str_array(j) = "events" - case (SCORE_INVERSE_VELOCITY) - str_array(j) = "inverse-velocity" - case default - str_array(j) = reaction_name(t%score_bins(j)) - end select + str_array(j) = reaction_name(t%score_bins(j)) end do call write_dataset(tally_group, "score_bins", str_array) From 0e1e67bc2edd1c0e84d2212f804c7e5dedecedf2 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 22 Jan 2016 07:18:13 -0600 Subject: [PATCH 215/650] Improve documentation on tally scores --- docs/source/_static/theme_overrides.css | 10 + docs/source/conf.py | 4 +- docs/source/usersguide/input.rst | 329 ++++++++++++++++-------- 3 files changed, 237 insertions(+), 106 deletions(-) create mode 100644 docs/source/_static/theme_overrides.css diff --git a/docs/source/_static/theme_overrides.css b/docs/source/_static/theme_overrides.css new file mode 100644 index 0000000000..7c1a520223 --- /dev/null +++ b/docs/source/_static/theme_overrides.css @@ -0,0 +1,10 @@ +/* override table width restrictions */ +.wy-table-responsive table td, .wy-table-responsive table th { + white-space: normal; +} + +.wy-table-responsive { + margin-bottom: 24px; + max-width: 100%; + overflow: visible; +} diff --git a/docs/source/conf.py b/docs/source/conf.py index 32154fa60f..65db07b25e 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -152,7 +152,9 @@ html_title = "OpenMC Documentation" # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -#html_static_path = ['_static'] +html_static_path = ['_static'] + +html_context = {'css_files': ['_static/theme_overrides.css']} # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 30e9ed07b9..ca16c8fef6 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -1475,114 +1475,233 @@ The ```` element accepts the following sub-elements: *Default*: ``tracklength`` but will revert to ``analog`` if necessary. :scores: - A space-separated list of the desired responses to be accumulated. Accepted - options are "flux", "total", "scatter", "absorption", "fission", - "nu-fission", "delayed-nu-fission", "kappa-fission", "nu-scatter", - "scatter-N", "scatter-PN", "scatter-YN", "nu-scatter-N", "nu-scatter-PN", - "nu-scatter-YN", "flux-YN", "total-YN", "current", "inverse-velocity" and - "events". These correspond to the following physical quantities: + A space-separated list of the desired responses to be accumulated. The accepted + options are listed in the following table: - :flux: - Total flux in particle-cm per source particle. + .. table:: Score types available in OpenMC - .. note:: - The ``analog`` estimator is actually identical to the ``collision`` - estimator for the flux score. + +----------------------+---------------------------------------------------+ + |Score | Description | + +======================+===================================================+ + |flux |Total flux in particle-cm per source particle. | + | | | + +----------------------+---------------------------------------------------+ + |total |Total reaction rate in reactions per source | + | |particle. | + +----------------------+---------------------------------------------------+ + |scatter |Total scattering rate. Can also be identified with | + | |the "scatter-0" response type. Units are reactions | + | |per source particle. | + +----------------------+---------------------------------------------------+ + |absorption |Total absorption rate. This accounts for all | + | |reactions which do not produce secondary | + | |neutrons. Units are reactions per source particle. | + +----------------------+---------------------------------------------------+ + |fission |Total fission rate in reactions per source | + | |particle. | + +----------------------+---------------------------------------------------+ + |nu-fission |Total production of neutrons due to fission. Units | + | |are neutrons produced per source neutron. | + +----------------------+---------------------------------------------------+ + |delayed-nu-fission |Total production of delayed neutrons due to | + | |fission. Units are neutrons produced per source | + | |neutron. | + +----------------------+---------------------------------------------------+ + |kappa-fission |The recoverable energy production rate due to | + | |fission. The recoverable energy is defined as the | + | |fission product kinetic energy, prompt and delayed | + | |neutron kinetic energies, prompt and delayed | + | |:math:`\gamma`-ray total energies, and the total | + | |energy released by the delayed :math:`\beta` | + | |particles. The neutrino energy does not contribute | + | |to this response. The prompt and delayed | + | |:math:`\gamma`-rays are assumed to deposit their | + | |energy locally. Units are MeV per source particle. | + +----------------------+---------------------------------------------------+ + |scatter-N |Tally the N\ :sup:`th` \ scattering moment, where N| + | |is the Legendre expansion order of the change in | + | |particle angle :math:`\left(\mu\right)`. N must be | + | |between 0 and 10. As an example, tallying the 2\ | + | |:sup:`nd` \ scattering moment would be specified as| + | |``scatter-2``. Units are reactions| + | |per source particle. | + +----------------------+---------------------------------------------------+ + |scatter-PN |Tally all of the scattering moments from order 0 to| + | |N, where N is the Legendre expansion order of the | + | |change in particle angle | + | |:math:`\left(\mu\right)`. That is, "scatter-P1" is | + | |equivalent to requesting tallies of "scatter-0" and| + | |"scatter-1". Like for "scatter-N", N must be | + | |between 0 and 10. As an example, tallying up to the| + | |2\ :sup:`nd` \ scattering moment would be specified| + | |as `` scatter-P2 ``. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |scatter-YN |"scatter-YN" is similar to "scatter-PN" except an | + | |additional expansion is performed for the incoming | + | |particle direction :math:`\left(\Omega\right)` | + | |using the real spherical harmonics. This is useful| + | |for performing angular flux moment weighting of the| + | |scattering moments. Like "scatter-PN", "scatter-YN"| + | |will tally all of the moments from order 0 to N; N | + | |again must be between 0 and 10. Units are reactions| + | |per source particle. | + +----------------------+---------------------------------------------------+ + |nu-scatter, |These scores are similar in functionality to their | + |nu-scatter-N, |``scatter*`` equivalents except the total | + |nu-scatter-PN, |production of neutrons due to scattering is scored | + |nu-scatter-YN |vice simply the scattering rate. This accounts for | + | |multiplicity from (n,2n), (n,3n), and (n,4n) | + | |reactions. Units are neutrons produced per source | + | |particle. | + +----------------------+---------------------------------------------------+ + |flux-YN |Spherical harmonic expansion of the direction of | + | |motion :math:`\left(\Omega\right)` of the total | + | |flux. This score will tally all of the harmonic | + | |moments of order 0 to N. N must be between 0 and | + | |10. Units are particle-cm per source particle. | + +----------------------+---------------------------------------------------+ + |total-YN |The total reaction rate expanded via spherical | + | |harmonics about the direction of motion of the | + | |neutron, :math:`\Omega`. This score will tally all | + | |of the harmonic moments of order 0 to N. N must be| + | |between 0 and 10. Units are reactions per source | + | |particle. | + +----------------------+---------------------------------------------------+ + |current |Partial currents on the boundaries of each cell in | + | |a mesh. Units are particles per source | + | |particle. Note that this score can only be used if | + | |a mesh filter has been specified. Furthermore, it | + | |may not be used in conjunction with any other | + | |score. | + +----------------------+---------------------------------------------------+ + |inverse-velocity |The flux-weighted inverse velocity where the | + | |velocity is in units of centimeters per second. | + +----------------------+---------------------------------------------------+ + |events |Number of scoring events. Units are events per | + | |source particle. | + +----------------------+---------------------------------------------------+ + |elastic |Elastic scattering reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,2nd) |(n,2nd) reaction rate. Units are reactions per | + | |source particle. | + +----------------------+---------------------------------------------------+ + |(n,2n) |(n,2n) reaction rate. Units are reactions per | + | |source particle. | + +----------------------+---------------------------------------------------+ + |(n,3n) |(n,3n) reaction rate. Units are reactions per | + | |source particle. | + +----------------------+---------------------------------------------------+ + |(n,na) |(n,n\ :math:`\alpha`\ ) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,n3a) |(n,n3\ :math:`\alpha`\ ) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,2na) |(n,2n\ :math:`\alpha`\ ) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,3na) |(n,3n\ :math:`\alpha`\ ) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,np) |(n,np) reaction rate. Units are reactions per | + | |source particle. | + +----------------------+---------------------------------------------------+ + |(n,n2a) |(n,n2\ :math:`\alpha`\ ) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,2n2a) |(n,2n2\ :math:`\alpha`\ ) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,nd) |(n,nd) reaction rate. Units are reactions per | + | |source particle. | + +----------------------+---------------------------------------------------+ + |(n,nt) |(n,nt) reaction rate. Units are reactions per | + | |source particle. | + +----------------------+---------------------------------------------------+ + |(n,nHe-3) |(n,n\ :sup:`3`\ He) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,nd2a) |(n,nd2\ :math:`\alpha`\ ) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,nt2a) |(n,nt2\ :math:`\alpha`\ ) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,4n) |(n,4n) reaction rate. Units are reactions per | + | |source particle. | + +----------------------+---------------------------------------------------+ + |(n,2np) |(n,2np) reaction rate. Units are reactions per | + | |source particle. | + +----------------------+---------------------------------------------------+ + |(n,3np) |(n,3np) reaction rate. Units are reactions per | + | |source particle. | + +----------------------+---------------------------------------------------+ + |(n,n2p) |(n,n2p) reaction rate. Units are reactions per | + | |source particle. | + +----------------------+---------------------------------------------------+ + |(n,n*X*) |Level inelastic scattering reaction rate. The *X* | + | |indicates what which inelastic level, e.g., (n,n3) | + | |is third-level inelastic scattering. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,nc) |Continuum level inelastic scattering reaction | + | |rate. Units are reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,gamma) |Radiative capture reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,p) |(n,p) reaction rate. Units are reactions per source| + | |particle. | + +----------------------+---------------------------------------------------+ + |(n,d) |(n,d) reaction rate. Units are reactions per source| + | |particle. | + +----------------------+---------------------------------------------------+ + |(n,t) |(n,t) reaction rate. Units are reactions per source| + | |particle. | + +----------------------+---------------------------------------------------+ + |(n,3He) |(n,\ :sup:`3`\ He) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,a) |(n,\ :math:`\alpha`\ ) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,2a) |(n,2\ :math:`\alpha`\ ) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,3a) |(n,3\ :math:`\alpha`\ ) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,2p) |(n,2p) reaction rate. Units are reactions per | + | |source particle. | + +----------------------+---------------------------------------------------+ + |(n,pa) |(n,p\ :math:`\alpha`\ ) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,t2a) |(n,t2\ :math:`\alpha`\ ) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,d2a) |(n,d2\ :math:`\alpha`\ ) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |(n,pd) |(n,pd) reaction rate. Units are reactions per | + | |source particle. | + +----------------------+---------------------------------------------------+ + |(n,pt) |(n,pt) reaction rate. Units are reactions per | + | |source particle. | + +----------------------+---------------------------------------------------+ + |(n,da) |(n,d\ :math:`\alpha`\ ) reaction rate. Units are | + | |reactions per source particle. | + +----------------------+---------------------------------------------------+ + |*Arbitrary integer* |An arbitrary integer is interpreted to mean the | + | |reaction rate for a reaction with a given ENDF MT | + | |number. Units are reactions per source particle. | + +----------------------+---------------------------------------------------+ - :total: - Total reaction rate in reactions per source particle. - - :scatter: - Total scattering rate. Can also be identified with the ``scatter-0`` - response type. Units are reactions per source particle. - - :absorption: - Total absorption rate. This accounts for all reactions which do not - produce secondary neutrons. Units are reactions per source particle. - - :fission: - Total fission rate in reactions per source particle. - - :nu-fission: - Total production of neutrons due to fission. Units are neutrons produced - per source neutron. - - :delayed-nu-fission: - Total production of delayed neutrons due to fission. Units are neutrons produced - per source neutron. - - :kappa-fission: - The recoverable energy production rate due to fission. The recoverable - energy is defined as the fission product kinetic energy, prompt and - delayed neutron kinetic energies, prompt and delayed :math:`\gamma`-ray - total energies, and the total energy released by the delayed :math:`\beta` - particles. The neutrino energy does not contribute to this response. The - prompt and delayed :math:`\gamma`-rays are assumed to deposit their energy - locally. Units are MeV per source particle. - - :scatter-N: - Tally the N\ :sup:`th` \ scattering moment, where N is the Legendre - expansion order of the change in particle angle :math:`\left(\mu\right)`. - N must be between 0 and 10. As an example, tallying the 2\ :sup:`nd` \ - scattering moment would be specified as `` scatter-2 - ``. Units are reactions per source particle. - - :scatter-PN: - Tally all of the scattering moments from order 0 to N, where N is the - Legendre expansion order of the change in particle angle - :math:`\left(\mu\right)`. That is, ``scatter-P1`` is equivalent to - requesting tallies of ``scatter-0`` and ``scatter-1``. Like for - ``scatter-N``, N must be between 0 and 10. As an example, tallying up to - the 2\ :sup:`nd` \ scattering moment would be specified as `` - scatter-P2 ``. Units are reactions per source particle. - - :scatter-YN: - ``scatter-YN`` is similar to ``scatter-PN`` except an additional expansion - is performed for the incoming particle direction - :math:`\left(\Omega\right)` using the real spherical harmonics. This is - useful for performing angular flux moment weighting of the scattering - moments. Like ``scatter-PN``, ``scatter-YN`` will tally all of the moments - from order 0 to N; N again must be between 0 and 10. Units are reactions - per source particle. - - :nu-scatter, nu-scatter-N, nu-scatter-PN, nu-scatter-YN: - These scores are similar in functionality to their ``scatter*`` - equivalents except the total production of neutrons due to scattering is - scored vice simply the scattering rate. This accounts for multiplicity - from (n,2n), (n,3n), and (n,4n) reactions. Units are neutrons produced per - source particle. - - :flux-YN: - Spherical harmonic expansion of the direction of motion - :math:`\left(\Omega\right)` of the total flux. This score will tally all - of the harmonic moments of order 0 to N. N must be between 0 - and 10. Units are particle-cm per source particle. - - :total-YN: - The total reaction rate expanded via spherical harmonics about the - direction of motion of the neutron, :math:`\Omega`. - This score will tally all of the harmonic moments of order 0 to N. N must - be between 0 and 10. Units are reactions per source particle. - - :current: - Partial currents on the boundaries of each cell in a mesh. Units are - particles per source particle. - - .. note:: - This score can only be used if a mesh filter has been - specified. Furthermore, it may not be used in conjunction with any - other score. - - :inverse-velocity: - The flux-weighted inverse velocity where the velocity is in units of - centimeters per second. - - .. note:: - The ``analog`` estimator is actually identical to the ``collision`` - estimator for the inverse-velocity score. - - :events: - Number of scoring events. Units are events per source particle. + .. note:: + The ``analog`` estimator is actually identical to the ``collision`` + estimator for the flux and inverse-velocity scores. :trigger: Precision trigger applied to all filter bins and nuclides for this tally. From 615d733cc8c1df038e8ac916239648e20ef298c2 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 22 Jan 2016 08:29:42 -0600 Subject: [PATCH 216/650] Add lots of comments --- src/angle_distribution.F90 | 22 +++-- src/energy_distribution.F90 | 153 +++++++++++++++++++++------------ src/physics.F90 | 4 +- src/secondary_correlated.F90 | 27 +++--- src/secondary_header.F90 | 32 ++++--- src/secondary_kalbach.F90 | 28 +++--- src/secondary_uncorrelated.F90 | 12 ++- 7 files changed, 177 insertions(+), 101 deletions(-) diff --git a/src/angle_distribution.F90 b/src/angle_distribution.F90 index 448bafd8f7..282d51b73b 100644 --- a/src/angle_distribution.F90 +++ b/src/angle_distribution.F90 @@ -8,6 +8,14 @@ module angle_distribution implicit none private +!=============================================================================== +! ANGLEDISTRIBUTION represents an angular distribution that is to be used in an +! uncorrelated angle-energy distribution. This occurs whenever the angle +! distrbution is given in File 4 in an ENDF file. The distribution of angles +! depends on the incoming energy of the neutron, so this type stores a +! distribution for each of a set of incoming energies. +!=============================================================================== + type, public :: AngleDistribution real(8), allocatable :: energy(:) type(DistributionContainer), allocatable :: distribution(:) @@ -19,17 +27,17 @@ contains function angle_sample(this, E) result(mu) class(AngleDistribution), intent(in) :: this - real(8), intent(in) :: E - real(8) :: mu + real(8), intent(in) :: E ! incoming energy + real(8) :: mu ! sampled cosine of scattering angle - integer :: i - integer :: n - real(8) :: r + integer :: i ! index on incoming energy grid + integer :: n ! number of incoming energies + real(8) :: r ! interpolation factor on incoming energy grid - ! determine number of incoming energies + ! Determine number of incoming energies n = size(this%energy) - ! find energy bin and calculate interpolation factor -- if the energy is + ! Find energy bin and calculate interpolation factor -- if the energy is ! outside the range of the tabulated energies, choose the first or last bins if (E < this%energy(1)) then i = 1 diff --git a/src/energy_distribution.F90 b/src/energy_distribution.F90 index a8b975879f..1dea1bfece 100644 --- a/src/energy_distribution.F90 +++ b/src/energy_distribution.F90 @@ -9,7 +9,9 @@ module energy_distribution !=============================================================================== ! ENERGYDISTRIBUTION (abstract) defines an energy distribution that is a -! function of the incident energy of a projectile +! function of the incident energy of a projectile. Each derived type must +! implement a sample() function that returns a sampled outgoing energy given an +! incoming energy !=============================================================================== type, abstract :: EnergyDistribution @@ -31,19 +33,31 @@ module energy_distribution end type EnergyDistributionContainer !=============================================================================== -! Derived classes +! Derived classes +!=============================================================================== + +!=============================================================================== +! TABULAREQUIPROBABLE represents an energy distribution with tabular +! equiprobable energy bins as given in ACE law 1. This is an older +! representation that has largely been replaced with ACE laws 4, 44, and 61. !=============================================================================== type, extends(EnergyDistribution) :: TabularEquiprobable - integer :: n_region - integer, allocatable :: breakpoints(:) - integer, allocatable :: interpolation(:) - real(8), allocatable :: energy_in(:) - real(8), allocatable :: energy_out(:,:) + integer :: n_region ! number of interpolation regions + integer, allocatable :: breakpoints(:) ! breakpoints of interpolation regions + integer, allocatable :: interpolation(:) ! interpolation region codes + real(8), allocatable :: energy_in(:) ! incoming energies + real(8), allocatable :: energy_out(:,:) ! table of outgoing energies for + ! each incoming energy contains procedure :: sample => equiprobable_sample end type TabularEquiprobable +!=============================================================================== +! LEVELINELASTIC gives the energy distribution for level inelastic scattering by +! neutrons as in ENDF MT=51--90. +!=============================================================================== + type, extends(EnergyDistribution) :: LevelInelastic real(8) :: threshold real(8) :: mass_ratio @@ -51,6 +65,12 @@ module energy_distribution procedure :: sample => level_inelastic_sample end type LevelInelastic +!=============================================================================== +! CONTINUOUSTABULAR gives an energy distribution represented as a tabular +! distribution with histogram or linear-linear interpolation. This corresponds +! to ACE law 4, which NJOY produces for a number of ENDF energy distributions. +!=============================================================================== + type CTTable integer :: interpolation integer :: n_discrete @@ -69,13 +89,23 @@ module energy_distribution procedure :: sample => continuous_sample end type ContinuousTabular +!=============================================================================== +! MAXWELLENERGY gives the energy distribution of neutrons emitted from a Maxwell +! fission spectrum. This corresponds to ACE law 7 and ENDF File 5, LF=7. +!=============================================================================== + type, extends(EnergyDistribution) :: MaxwellEnergy - type(Tab1) :: theta - real(8) :: u + type(Tab1) :: theta ! incoming-energy-dependent parameter + real(8) :: u ! restriction energy contains procedure :: sample => maxwellenergy_sample end type MaxwellEnergy +!=============================================================================== +! EVAPORATION represents an evaporation spectrum corresponding to ACE law 9 and +! ENDF File 5, LF=9. +!=============================================================================== + type, extends(EnergyDistribution) :: Evaporation type(Tab1) :: theta real(8) :: u @@ -83,6 +113,11 @@ module energy_distribution procedure :: sample => evaporation_sample end type Evaporation +!=============================================================================== +! EVAPORATION gives the energy distribution of neutrons emitted from a Watt +! fission spectrum. This corresponds to ACE law 11 and ENDF File 5, LF=11. +!=============================================================================== + type, extends(EnergyDistribution) :: WattEnergy type(Tab1) :: a type(Tab1) :: b @@ -91,6 +126,12 @@ module energy_distribution procedure :: sample => watt_sample end type WattEnergy +!=============================================================================== +! NBODYPHASESPACE gives the energy distribution for particles emitted from +! neutron and charged-particle reactions. This corresponds to ACE law 66 and +! ENDF File 6, LAW=6. +!=============================================================================== + type, extends(EnergyDistribution) :: NBodyPhaseSpace integer :: n_bodies real(8) :: mass_ratio @@ -104,12 +145,12 @@ contains function equiprobable_sample(this, E_in) result(E_out) class(TabularEquiprobable), intent(in) :: this - real(8), intent(in) :: E_in - real(8) :: E_out + real(8), intent(in) :: E_in ! incoming energy + real(8) :: E_out ! sampled outgoing energy - integer :: i, k, l - integer :: n_energy_in - integer :: n_energy_out + integer :: i, k, l ! indices + integer :: n_energy_in ! number of incoming energies + integer :: n_energy_out ! number of outgoing energies real(8) :: r ! interpolation factor on incoming energy real(8) :: E_i_1, E_i_K ! endpoints on outgoing grid i real(8) :: E_i1_1, E_i1_K ! endpoints on outgoing grid i+1 @@ -120,7 +161,7 @@ contains n_energy_in = size(this%energy_in) n_energy_out = size(this%energy_out, 1) - ! determine index on incoming energy grid and interpolation factor + ! Determine index on incoming energy grid and interpolation factor i = binary_search(this%energy_in, size(this%energy_in), E_in) r = (E_in - this%energy_in(i)) / & (this%energy_in(i+1) - this%energy_in(i)) @@ -171,31 +212,31 @@ contains function continuous_sample(this, E_in) result(E_out) class(ContinuousTabular), intent(in) :: this - real(8), intent(in) :: E_in - real(8) :: E_out + real(8), intent(in) :: E_in ! incoming energy + real(8) :: E_out ! sampled outgoing energy - integer :: i, k, l - integer :: n_energy_in - integer :: n_energy_out - real(8) :: r ! interpolation factor on incoming energy - real(8) :: r1 ! random number on [0,1) - real(8) :: frac ! interpolation factor on outgoing energy - real(8) :: E_i_1, E_i_K ! endpoints on outgoing grid i - real(8) :: E_i1_1, E_i1_K ! endpoints on outgoing grid i+1 - real(8) :: E_1, E_K ! endpoints interpolated between i and i+1 - real(8) :: E_l_k, E_l_k1 ! adjacent E on outgoing grid l - real(8) :: p_l_k, p_l_k1 ! adjacent p on outgoing grid l - real(8) :: c_k, c_k1 ! cumulative probability - logical :: histogram_interp + integer :: i, k, l ! indices + integer :: n_energy_in ! number of incoming energies + integer :: n_energy_out ! number of outgoing energies + real(8) :: r ! interpolation factor on incoming energy + real(8) :: r1 ! random number on [0,1) + real(8) :: frac ! interpolation factor on outgoing energy + real(8) :: E_i_1, E_i_K ! endpoints on outgoing grid i + real(8) :: E_i1_1, E_i1_K ! endpoints on outgoing grid i+1 + real(8) :: E_1, E_K ! endpoints interpolated between i and i+1 + real(8) :: E_l_k, E_l_k1 ! adjacent E on outgoing grid l + real(8) :: p_l_k, p_l_k1 ! adjacent p on outgoing grid l + real(8) :: c_k, c_k1 ! cumulative probability + logical :: histogram_interp ! whether histogram interpolation is used - ! read number of interpolation regions and incoming energies + ! Read number of interpolation regions and incoming energies if (this%n_region == 1) then histogram_interp = (this%interpolation(1) == 1) else histogram_interp = .false. end if - ! find energy bin and calculate interpolation factor -- if the energy is + ! Find energy bin and calculate interpolation factor -- if the energy is ! outside the range of the tabulated energies, choose the first or last bins n_energy_in = size(this%energy_in) if (E_in < this%energy_in(1)) then @@ -221,7 +262,7 @@ contains end if end if - ! interpolation for energy E1 and EK + ! Interpolation for energy E1 and EK n_energy_out = size(this%energy_out(i)%e_out) E_i_1 = this%energy_out(i)%e_out(1) E_i_K = this%energy_out(i)%e_out(n_energy_out) @@ -233,7 +274,7 @@ contains E_1 = E_i_1 + r*(E_i1_1 - E_i_1) E_K = E_i_K + r*(E_i1_K - E_i_K) - ! determine outgoing energy bin + ! Determine outgoing energy bin n_energy_out = size(this%energy_out(l)%e_out) r1 = prn() c_k = this%energy_out(l)%c(1) @@ -243,7 +284,7 @@ contains c_k = c_k1 end do - ! check to make sure k is <= NP - 1 + ! Check to make sure k is <= NP - 1 k = min(k, n_energy_out - 1) E_l_k = this%energy_out(l)%e_out(k) @@ -282,29 +323,29 @@ contains function maxwellenergy_sample(this, E_in) result(E_out) class(MaxwellEnergy), intent(in) :: this - real(8), intent(in) :: E_in - real(8) :: E_out + real(8), intent(in) :: E_in ! incoming energy + real(8) :: E_out ! sampled outgoing energy - real(8) :: theta + real(8) :: theta ! Maxwell distribution parameter ! Get temperature corresponding to incoming energy theta = interpolate_tab1(this%theta, E_in) do - ! sample maxwell fission spectrum + ! Sample maxwell fission spectrum E_out = maxwell_spectrum(theta) - ! accept energy based on restriction energy + ! Accept energy based on restriction energy if (E_out <= E_in - this%u) exit end do end function maxwellenergy_sample function evaporation_sample(this, E_in) result(E_out) class(Evaporation), intent(in) :: this - real(8), intent(in) :: E_in - real(8) :: E_out + real(8), intent(in) :: E_in ! incoming energy + real(8) :: E_out ! sampled outgoing energy - real(8) :: theta + real(8) :: theta ! evaporation spectrum parameter real(8) :: x, y, v ! Get temperature corresponding to incoming energy @@ -313,7 +354,7 @@ contains y = (E_in - this%U)/theta v = 1 - exp(-y) - ! sample outgoing energy based on evaporation spectrum probability + ! Sample outgoing energy based on evaporation spectrum probability ! density function do x = -log((ONE - v*prn())*(ONE - v*prn())) @@ -325,37 +366,37 @@ contains function watt_sample(this, E_in) result(E_out) class(WattEnergy), intent(in) :: this - real(8), intent(in) :: E_in - real(8) :: E_out + real(8), intent(in) :: E_in ! incoming energy + real(8) :: E_out ! sampled outgoing energy - real(8) :: a, b + real(8) :: a, b ! Watt spectrum parameters - ! determine Watt parameter 'a' from tabulated function + ! Determine Watt parameter 'a' from tabulated function a = interpolate_tab1(this%a, E_in) - ! determine Watt parameter 'b' from tabulated function + ! Determine Watt parameter 'b' from tabulated function b = interpolate_tab1(this%b, E_in) do ! Sample energy-dependent Watt fission spectrum E_out = watt_spectrum(a, b) - ! accept energy based on restriction energy + ! Accept energy based on restriction energy if (E_out <= E_in - this%u) exit end do end function watt_sample function nbody_sample(this, E_in) result(E_out) class(NBodyPhaseSpace), intent(in) :: this - real(8), intent(in) :: E_in - real(8) :: E_out + real(8), intent(in) :: E_in ! incoming energy + real(8) :: E_out ! sampled outgoing energy - real(8) :: Ap - real(8) :: E_max + real(8) :: Ap ! total mass of particles in neutron masses + real(8) :: E_max ! maximum possible COM energy real(8) :: x, y, v real(8) :: r1, r2, r3, r4, r5, r6 - ! determine E_max parameter + ! Determine E_max parameter Ap = this%mass_ratio E_max = (Ap - ONE)/Ap * (this%A/(this%A + ONE)*E_in + this%Q) @@ -380,7 +421,7 @@ contains y = -log(r1*r2*r3*r4) - log(r5) * cos(PI/TWO*r6)**2 end select - ! now determine v and E_out + ! Now determine v and E_out v = x/(x+y) E_out = E_max * v end function nbody_sample diff --git a/src/physics.F90 b/src/physics.F90 index 8519f4d2b0..31eb981abb 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -1315,7 +1315,7 @@ contains ! copy energy of neutron E_in = p % E - ! sample outgoing energy + ! sample outgoing energy and scattering cosine call rxn%secondary%sample(E_in, E, mu) ! if scattering system is in center-of-mass, transfer cosine of scattering @@ -1337,7 +1337,7 @@ contains ! or 1 if (abs(mu) > ONE) mu = sign(ONE,mu) - ! Set outgoing energy and scattering angle + ! Set outgoing energy and scattering angle p % E = E p % mu = mu diff --git a/src/secondary_correlated.F90 b/src/secondary_correlated.F90 index 5b1d49e28d..c0289d55eb 100644 --- a/src/secondary_correlated.F90 +++ b/src/secondary_correlated.F90 @@ -6,6 +6,11 @@ module secondary_correlated use random_lcg, only: prn use search, only: binary_search +!=============================================================================== +! CORRELATEDANGLEENERGY represents a correlated angle-energy distribution. This +! corresponds to ACE law 61 and ENDF File 6, LAW=1, LANG/=2. +!=============================================================================== + type AngleEnergyTable integer :: interpolation integer :: n_discrete @@ -16,11 +21,11 @@ module secondary_correlated end type AngleEnergyTable type, extends(AngleEnergy) :: CorrelatedAngleEnergy - integer :: n_region - integer, allocatable :: breakpoints(:) - integer, allocatable :: interpolation(:) - real(8), allocatable :: energy_in(:) - type(AngleEnergyTable), allocatable :: table(:) + integer :: n_region ! number of interpolation regions + integer, allocatable :: breakpoints(:) ! breakpoints of interpolation regions + integer, allocatable :: interpolation(:) ! interpolation region codes + real(8), allocatable :: energy_in(:) ! incoming energies + type(AngleEnergyTable), allocatable :: table(:) ! outgoing E/mu distributions contains procedure :: sample => correlated_sample end type CorrelatedAngleEnergy @@ -29,13 +34,13 @@ contains subroutine correlated_sample(this, E_in, E_out, mu) class(CorrelatedAngleEnergy), intent(in) :: this - real(8), intent(in) :: E_in - real(8), intent(out) :: E_out - real(8), intent(out) :: mu + real(8), intent(in) :: E_in ! incoming energy + real(8), intent(out) :: E_out ! sampled outgoing energy + real(8), intent(out) :: mu ! sapmled scattering cosine - integer :: i, k, l - integer :: n_energy_in - integer :: n_energy_out + integer :: i, k, l ! indices + integer :: n_energy_in ! number of incoming energies + integer :: n_energy_out ! number of outgoing energies real(8) :: r ! interpolation factor on incoming energy real(8) :: r1 ! random number on [0,1) real(8) :: frac ! interpolation factor on outgoing energy diff --git a/src/secondary_header.F90 b/src/secondary_header.F90 index e0c414826b..d858074129 100644 --- a/src/secondary_header.F90 +++ b/src/secondary_header.F90 @@ -4,15 +4,18 @@ module secondary_header use interpolation, only: interpolate_tab1 use random_lcg, only: prn +!=============================================================================== +! ANGLEENERGY (abstract) defines a correlated or uncorrelated angle-energy +! distribution that is a function of incoming energy. Each derived type must +! implement a sample() subroutine that returns an outgoing energy and scattering +! cosine given an incoming energy. +!=============================================================================== + type, abstract :: AngleEnergy contains procedure(iSampleAngleEnergy), deferred :: sample end type AngleEnergy - type :: AngleEnergyContainer - class(AngleEnergy), allocatable :: obj - end type AngleEnergyContainer - abstract interface subroutine iSampleAngleEnergy(this, E_in, E_out, mu) import AngleEnergy @@ -23,9 +26,16 @@ module secondary_header end subroutine iSampleAngleEnergy end interface + type :: AngleEnergyContainer + class(AngleEnergy), allocatable :: obj + end type AngleEnergyContainer + !=============================================================================== -! SECONDARYDISTRIBUTION stores a secondary distribution for angle and energy, -! whether correlated or uncorrelated. +! SECONDARYDISTRIBUTION stores multiple angle-energy distributions, each of +! which has a given probability of occurring for a given incoming energy. In +! general, most secondary distributions only have one angle-energy distribution, +! but for some cases (e.g., (n,2n) in certain nuclides) multiple distinct +! distributions exist. !=============================================================================== type :: SecondaryDistribution @@ -39,12 +49,12 @@ contains subroutine secondary_sample(this, E_in, E_out, mu) class(SecondaryDistribution), intent(in) :: this - real(8), intent(in) :: E_in - real(8), intent(out) :: E_out - real(8), intent(out) :: mu + real(8), intent(in) :: E_in ! incoming energy + real(8), intent(out) :: E_out ! sampled outgoing energy + real(8), intent(out) :: mu ! sampled scattering cosine - integer :: n - real(8) :: p_valid + integer :: n ! number of angle-energy distributions + real(8) :: p_valid ! probability that given distribution is valid n = size(this%applicability) if (n > 1) then diff --git a/src/secondary_kalbach.F90 b/src/secondary_kalbach.F90 index d38541edd5..5e6949206e 100644 --- a/src/secondary_kalbach.F90 +++ b/src/secondary_kalbach.F90 @@ -5,6 +5,12 @@ module secondary_kalbach use random_lcg, only: prn use search, only: binary_search +!=============================================================================== +! KalbachMann represents a correlated angle-energy distribution with the angular +! distribution represented using Kalbach-Mann systematics. This corresponds to +! ACE law 44 and ENDF File 6, LAW=1, LANG=2. +!=============================================================================== + type KalbachMannTable integer :: n_discrete integer :: interpolation @@ -16,11 +22,11 @@ module secondary_kalbach end type KalbachMannTable type, extends(AngleEnergy) :: KalbachMann - integer :: n_region - integer, allocatable :: breakpoints(:) - integer, allocatable :: interpolation(:) - real(8), allocatable :: energy_in(:) - type(KalbachMannTable), allocatable :: table(:) + integer :: n_region ! number of interpolation regions + integer, allocatable :: breakpoints(:) ! breakpoints of interpolation regions + integer, allocatable :: interpolation(:) ! interpolation region codes + real(8), allocatable :: energy_in(:) ! incoming energies + type(KalbachMannTable), allocatable :: table(:) ! outgoing E/mu parameters contains procedure :: sample => kalbachmann_sample end type KalbachMann @@ -29,13 +35,13 @@ contains subroutine kalbachmann_sample(this, E_in, E_out, mu) class(KalbachMann), intent(in) :: this - real(8), intent(in) :: E_in - real(8), intent(out) :: E_out - real(8), intent(out) :: mu + real(8), intent(in) :: E_in ! incoming energy + real(8), intent(out) :: E_out ! sampled outgoing energy + real(8), intent(out) :: mu ! sampled scattering cosine - integer :: i, k, l - integer :: n_energy_in - integer :: n_energy_out + integer :: i, k, l ! indices + integer :: n_energy_in ! number of incoming energies + integer :: n_energy_out ! number of outgoing energies real(8) :: r ! interpolation factor on incoming energy real(8) :: r1 ! random number on [0,1) real(8) :: frac ! interpolation factor on outgoing energy diff --git a/src/secondary_uncorrelated.F90 b/src/secondary_uncorrelated.F90 index 40fa53a382..22a56aa127 100644 --- a/src/secondary_uncorrelated.F90 +++ b/src/secondary_uncorrelated.F90 @@ -6,6 +6,12 @@ module secondary_uncorrelated use secondary_header, only: AngleEnergy use random_lcg, only: prn +!=============================================================================== +! UNCORRELATEDANGLEENERGY represents an uncorrelated angle-energy +! distribution. This corresponds to when an energy distribution is given in ENDF +! File 5/6 and an angular distribution is given in ENDF File 4. +!=============================================================================== + type, extends(AngleEnergy) :: UncorrelatedAngleEnergy logical :: fission = .false. type(AngleDistribution) :: angle @@ -18,9 +24,9 @@ contains subroutine uncorrelated_sample(this, E_in, E_out, mu) class(UncorrelatedAngleEnergy), intent(in) :: this - real(8), intent(in) :: E_in - real(8), intent(out) :: E_out - real(8), intent(out) :: mu + real(8), intent(in) :: E_in ! incoming energy + real(8), intent(out) :: E_out ! sampled outgoing energy + real(8), intent(out) :: mu ! sampled scattering cosine ! Sample cosine of scattering angle if (this%fission) then From 7bd0b2fe9749f3c6d6828588664b90a53ad965ff Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 22 Jan 2016 08:59:54 -0600 Subject: [PATCH 217/650] Cut down on print_nuclide routine --- src/output.F90 | 43 +++---------------------------------------- 1 file changed, 3 insertions(+), 40 deletions(-) diff --git a/src/output.F90 b/src/output.F90 index 3a48de02da..f133bad4bb 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -322,14 +322,8 @@ contains integer :: i ! loop index over nuclides integer :: unit_ ! unit to write to - integer :: size_total ! memory used by nuclide (bytes) - integer :: size_angle_total ! total memory used for angle dist. (bytes) - integer :: size_energy_total ! total memory used for energy dist. (bytes) integer :: size_xs ! memory used for cross-sections (bytes) - integer :: size_angle ! memory used for an angle distribution (bytes) - integer :: size_energy ! memory used for a energy distributions (bytes) integer :: size_urr ! memory used for probability tables (bytes) - character(11) :: law ! secondary energy distribution law type(UrrData), pointer :: urr ! set default unit for writing information @@ -340,8 +334,6 @@ contains end if ! Initialize totals - size_angle_total = 0 - size_energy_total = 0 size_urr = 0 size_xs = 0 @@ -356,36 +348,15 @@ contains write(unit_,*) ' # of reactions = ' // trim(to_str(nuc % n_reaction)) ! Information on each reaction - write(unit_,*) ' Reaction Q-value COM Law IE size(angle) size(energy)' + write(unit_,*) ' Reaction Q-value COM IE' do i = 1, nuc % n_reaction associate (rxn => nuc % reactions(i)) -!!$ ! Determine size of angle distribution -!!$ if (rxn % has_angle_dist) then -!!$ size_angle = rxn % adist % n_energy * 16 + size(rxn % adist % data) * 8 -!!$ else -!!$ size_angle = 0 -!!$ end if - size_angle = 0 - -!!$ ! Determine size of energy distribution and law -!!$ if (rxn % has_energy_dist) then -!!$ size_energy = size(rxn % edist % data) * 8 -!!$ law = to_str(rxn % edist % law) -!!$ else -!!$ size_energy = 0 -!!$ law = 'None' -!!$ end if - size_energy = 0 - law = 'None' - - write(unit_,'(3X,A11,1X,F8.3,3X,L1,3X,A4,1X,I6,1X,I11,1X,I11)') & + write(unit_,'(3X,A11,1X,F8.3,3X,L1,3X,I6)') & reaction_name(rxn % MT), rxn % Q_value, rxn % scatter_in_cm, & - law(1:4), rxn % threshold, size_angle, size_energy + rxn % threshold ! Accumulate data size size_xs = size_xs + (nuc % n_grid - rxn%threshold + 1) * 8 - size_angle_total = size_angle_total + size_angle - size_energy_total = size_energy_total + size_energy end associate end do @@ -411,19 +382,11 @@ contains size_urr = urr % n_energy * (urr % n_prob * 6 + 1) * 8 end if - ! Calculate total memory - size_total = size_xs + size_angle_total + size_energy_total + size_urr - ! Write memory used write(unit_,*) ' Memory Requirements' write(unit_,*) ' Cross sections = ' // trim(to_str(size_xs)) // ' bytes' - write(unit_,*) ' Secondary angle distributions = ' // & - trim(to_str(size_angle_total)) // ' bytes' - write(unit_,*) ' Secondary energy distributions = ' // & - trim(to_str(size_energy_total)) // ' bytes' write(unit_,*) ' Probability Tables = ' // & trim(to_str(size_urr)) // ' bytes' - write(unit_,*) ' Total = ' // trim(to_str(size_total)) // ' bytes' ! Blank line at end of nuclide write(unit_,*) From 869456ddcffbdd2a3546aeb756fab9ddb2563164 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 22 Jan 2016 09:45:43 -0600 Subject: [PATCH 218/650] Fix comment Evaporation -> WattEnergy --- src/energy_distribution.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/energy_distribution.F90 b/src/energy_distribution.F90 index 1dea1bfece..db3dcc4411 100644 --- a/src/energy_distribution.F90 +++ b/src/energy_distribution.F90 @@ -114,7 +114,7 @@ module energy_distribution end type Evaporation !=============================================================================== -! EVAPORATION gives the energy distribution of neutrons emitted from a Watt +! WATTENERGY gives the energy distribution of neutrons emitted from a Watt ! fission spectrum. This corresponds to ACE law 11 and ENDF File 5, LF=11. !=============================================================================== From c635084221860ee0347ae7699e955e644953aee9 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 22 Jan 2016 11:38:47 -0600 Subject: [PATCH 219/650] Add test to cover Watt, N-body phase space, and evaporation spectra. Fix bug with N-body phase space. --- src/ace.F90 | 2 +- tests/test_energy_laws/geometry.xml | 7 +++++++ tests/test_energy_laws/materials.xml | 11 +++++++++++ tests/test_energy_laws/results_true.dat | 2 ++ tests/test_energy_laws/settings.xml | 14 ++++++++++++++ tests/test_energy_laws/test_energy_laws.py | 21 +++++++++++++++++++++ 6 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 tests/test_energy_laws/geometry.xml create mode 100644 tests/test_energy_laws/materials.xml create mode 100644 tests/test_energy_laws/results_true.dat create mode 100644 tests/test_energy_laws/settings.xml create mode 100644 tests/test_energy_laws/test_energy_laws.py diff --git a/src/ace.F90 b/src/ace.F90 index 5b003d4067..1c49262985 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -1033,7 +1033,7 @@ contains ! Read energy law data call get_energy_dist(secondary%distribution(n)%obj, LAW, & - JXS(11), IDAT, nuc%awr, nuc%reactions(i)%Q_value) + JXS(11), IDAT, nuc%awr, nuc%reactions(i + 1)%Q_value) ! <<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<< ! Before the secondary distribution refactor, when the angle/energy diff --git a/tests/test_energy_laws/geometry.xml b/tests/test_energy_laws/geometry.xml new file mode 100644 index 0000000000..bb0e15d47f --- /dev/null +++ b/tests/test_energy_laws/geometry.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/tests/test_energy_laws/materials.xml b/tests/test_energy_laws/materials.xml new file mode 100644 index 0000000000..1a40aeb1db --- /dev/null +++ b/tests/test_energy_laws/materials.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/tests/test_energy_laws/results_true.dat b/tests/test_energy_laws/results_true.dat new file mode 100644 index 0000000000..777d0790d4 --- /dev/null +++ b/tests/test_energy_laws/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +2.421637E+00 5.324089E-03 diff --git a/tests/test_energy_laws/settings.xml b/tests/test_energy_laws/settings.xml new file mode 100644 index 0000000000..9f0e8ed05f --- /dev/null +++ b/tests/test_energy_laws/settings.xml @@ -0,0 +1,14 @@ + + + + + 10 + 5 + 1000 + + + + + + + diff --git a/tests/test_energy_laws/test_energy_laws.py b/tests/test_energy_laws/test_energy_laws.py new file mode 100644 index 0000000000..5f436e4694 --- /dev/null +++ b/tests/test_energy_laws/test_energy_laws.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +"""The purpose of this test is to provide coverage of Watt, N-body phase space, +and evaporation energy distributions. The only nuclide that uses a Watt fission +spectrum in ENDF/B-VII.1 is U-233. The only nuclide that has a reaction using +the N-body phase space distribution is H-2(n.2n). Several nuclides have +reactions with evaporation spectra. In this test, the material is composed of +U-233, H-2, and Na-23 (which has several reactions with evaporation spectra. + +""" + +import glob +import os +import sys +sys.path.insert(0, os.pardir) +from testing_harness import TestHarness + + +if __name__ == '__main__': + harness = TestHarness('statepoint.10.*') + harness.main() From 2ff33e55111a6ad7b9720c558f5918b05d52afd1 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 22 Jan 2016 13:29:59 -0600 Subject: [PATCH 220/650] Modify test_energy_laws to include Ta-181 Ta-181 is among a handful of nuclides that uses Kalbach-Mann systematics with linear-linear interpolation. --- tests/test_energy_laws/geometry.xml | 2 -- tests/test_energy_laws/materials.xml | 10 +++++----- tests/test_energy_laws/results_true.dat | 2 +- tests/test_energy_laws/settings.xml | 3 --- tests/test_energy_laws/test_energy_laws.py | 21 +++++++++++++++------ 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/tests/test_energy_laws/geometry.xml b/tests/test_energy_laws/geometry.xml index bb0e15d47f..c42f45597d 100644 --- a/tests/test_energy_laws/geometry.xml +++ b/tests/test_energy_laws/geometry.xml @@ -1,7 +1,5 @@ - - diff --git a/tests/test_energy_laws/materials.xml b/tests/test_energy_laws/materials.xml index 1a40aeb1db..97f9b84be1 100644 --- a/tests/test_energy_laws/materials.xml +++ b/tests/test_energy_laws/materials.xml @@ -1,11 +1,11 @@ - + 71c - - - + + + + - diff --git a/tests/test_energy_laws/results_true.dat b/tests/test_energy_laws/results_true.dat index 777d0790d4..48eb6bc81b 100644 --- a/tests/test_energy_laws/results_true.dat +++ b/tests/test_energy_laws/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.421637E+00 5.324089E-03 +2.130076E+00 1.938907E-03 diff --git a/tests/test_energy_laws/settings.xml b/tests/test_energy_laws/settings.xml index 9f0e8ed05f..1c3f444f0f 100644 --- a/tests/test_energy_laws/settings.xml +++ b/tests/test_energy_laws/settings.xml @@ -1,14 +1,11 @@ - 10 5 1000 - - diff --git a/tests/test_energy_laws/test_energy_laws.py b/tests/test_energy_laws/test_energy_laws.py index 5f436e4694..0e593876fc 100644 --- a/tests/test_energy_laws/test_energy_laws.py +++ b/tests/test_energy_laws/test_energy_laws.py @@ -1,11 +1,20 @@ #!/usr/bin/env python -"""The purpose of this test is to provide coverage of Watt, N-body phase space, -and evaporation energy distributions. The only nuclide that uses a Watt fission -spectrum in ENDF/B-VII.1 is U-233. The only nuclide that has a reaction using -the N-body phase space distribution is H-2(n.2n). Several nuclides have -reactions with evaporation spectra. In this test, the material is composed of -U-233, H-2, and Na-23 (which has several reactions with evaporation spectra. +"""The purpose of this test is to provide coverage of energy distributions that +are not covered in other tests. It has a single material with the following +nuclides: + +U-233: Only nuclide that has a Watt fission spectrum + +H-2: Only nuclide that has an N-body phase space distribution, in this case for +(n,2n) + +Na-23: Has an evaporation spectrum and also has reactions that have multiple +angle-energy distributions, so it provides coverage for both of those +situations. + +Ta-181: One of a few nuclides that has reactions with Kalbach-Mann distributions +that use linear-linear interpolation. """ From 79dea15ddfbe9b1726cb166af34cc12d37ca5900 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 13 Nov 2015 12:59:26 -0600 Subject: [PATCH 221/650] Allow fission to create secondary neutrons in fixed source simulations. --- src/particle_header.F90 | 2 +- src/physics.F90 | 36 +++++++++++++++++++++--------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/particle_header.F90 b/src/particle_header.F90 index 0b9b251ee5..30f5e8bb64 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -86,7 +86,7 @@ module particle_header logical :: write_track = .false. ! Secondary particles created - integer :: n_secondary = 0 + integer(8) :: n_secondary = 0 type(Bank) :: secondary_bank(MAX_SECONDARY) contains diff --git a/src/physics.F90 b/src/physics.F90 index 31eb981abb..03a4cb6086 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -88,9 +88,14 @@ contains ! change when sampling fission sites. The following block handles all ! absorption (including fission) - if (nuc % fissionable .and. run_mode == MODE_EIGENVALUE) then + if (nuc % fissionable) then call sample_fission(i_nuclide, i_reaction) - call create_fission_sites(p, i_nuclide, i_reaction) + if (run_mode == MODE_EIGENVALUE) then + call create_fission_sites(p, i_nuclide, i_reaction, fission_bank, n_bank) + elseif (run_mode == MODE_FIXEDSOURCE) then + call create_fission_sites(p, i_nuclide, i_reaction, & + p%secondary_bank, p%n_secondary) + end if end if ! If survival biasing is being used, the following subroutine adjusts the @@ -1071,10 +1076,12 @@ contains ! neutrons produced from fission and creates appropriate bank sites. !=============================================================================== - subroutine create_fission_sites(p, i_nuclide, i_reaction) + subroutine create_fission_sites(p, i_nuclide, i_reaction, bank_array, size_bank) type(Particle), intent(inout) :: p integer, intent(in) :: i_nuclide integer, intent(in) :: i_reaction + type(Bank), intent(inout) :: bank_array(:) + integer(8), intent(inout) :: size_bank integer :: nu_d(MAX_DELAYED_GROUPS) ! number of delayed neutrons born integer :: i ! loop index @@ -1124,26 +1131,26 @@ contains end if ! Check for fission bank size getting hit - if (n_bank + nu > size(fission_bank)) then + if (size_bank + nu > size(bank_array)) then if (master) call warning("Maximum number of sites in fission bank & &reached. This can result in irreproducible results using different & &numbers of processes/threads.") end if ! Bank source neutrons - if (nu == 0 .or. n_bank == size(fission_bank)) return + if (nu == 0 .or. size_bank == size(bank_array)) return ! Initialize counter of delayed neutrons encountered for each delayed group ! to zero. nu_d(:) = 0 p % fission = .true. ! Fission neutrons will be banked - do i = int(n_bank,4) + 1, int(min(n_bank + nu, int(size(fission_bank),8)),4) + do i = int(size_bank,4) + 1, int(min(size_bank + nu, int(size(bank_array),8)),4) ! Bank source neutrons by copying particle data - fission_bank(i) % xyz = p % coord(1) % xyz + bank_array(i) % xyz = p % coord(1) % xyz ! Set weight of fission bank site - fission_bank(i) % wgt = ONE/weight + bank_array(i) % wgt = ONE/weight ! Sample cosine of angle -- fission neutrons are always emitted ! isotropically. Sometimes in ACE data, fission reactions actually have @@ -1153,17 +1160,16 @@ contains ! Sample azimuthal angle uniformly in [0,2*pi) phi = TWO*PI*prn() - fission_bank(i) % uvw(1) = mu - fission_bank(i) % uvw(2) = sqrt(ONE - mu*mu) * cos(phi) - fission_bank(i) % uvw(3) = sqrt(ONE - mu*mu) * sin(phi) + bank_array(i) % uvw(1) = mu + bank_array(i) % uvw(2) = sqrt(ONE - mu*mu) * cos(phi) + bank_array(i) % uvw(3) = sqrt(ONE - mu*mu) * sin(phi) ! Sample secondary energy distribution for fission reaction and set energy ! in fission bank - fission_bank(i) % E = sample_fission_energy(nuc, nuc%reactions(& - i_reaction), p) + bank_array(i) % E = sample_fission_energy(nuc, nuc%reactions(i_reaction), p) ! Set the delayed group of the neutron - fission_bank(i) % delayed_group = p % delayed_group + bank_array(i) % delayed_group = p % delayed_group ! Increment the number of neutrons born delayed if (p % delayed_group > 0) then @@ -1172,7 +1178,7 @@ contains end do ! increment number of bank sites - n_bank = min(n_bank + nu, int(size(fission_bank),8)) + size_bank = min(size_bank + nu, int(size(bank_array),8)) ! Store total and delayed weight banked for analog fission tallies p % n_bank = nu From 0e0984a5ff770ce2274ad1d1c5b0c98e8c621e48 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 19 Nov 2015 14:54:52 -0600 Subject: [PATCH 222/650] Check if secondary particle bank limit is reached during subcritical multiplication --- src/physics.F90 | 16 ++++++++++++---- src/tracking.F90 | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/physics.F90 b/src/physics.F90 index 03a4cb6086..c6ecf4fe66 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -1130,11 +1130,19 @@ contains nu = int(nu_t) + 1 end if - ! Check for fission bank size getting hit + ! Check for bank size getting hit. For fixed source calculations, this is a + ! fatal error. For eigenvalue calculations, it just means that k-effective + ! was too high for a single batch. if (size_bank + nu > size(bank_array)) then - if (master) call warning("Maximum number of sites in fission bank & - &reached. This can result in irreproducible results using different & - &numbers of processes/threads.") + if (run_mode == MODE_FIXEDSOURCE) then + call fatal_error("Secondary particle bank size limit reached. If you & + &are running a subcritical multiplication problem, k-effective & + &may be too close to one.") + else + if (master) call warning("Maximum number of sites in fission bank & + &reached. This can result in irreproducible results using different & + &numbers of processes/threads.") + end if end if ! Bank source neutrons diff --git a/src/tracking.F90 b/src/tracking.F90 index 2e4503e139..7cc761055b 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -202,6 +202,7 @@ contains if (p % n_secondary > 0) then call p % initialize_from_source(p % secondary_bank(p % n_secondary)) p % n_secondary = p % n_secondary - 1 + n_event = 0 ! Enter new particle in particle track file if (p % write_track) call add_particle_track() From 2fc95bb5633bda3fe282ed5c13ee4896cd347eb7 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 25 Jan 2016 09:12:55 -0600 Subject: [PATCH 223/650] Include fissionable material in fixed source test --- tests/test_fixed_source/materials.xml | 1 + tests/test_fixed_source/results_true.dat | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/test_fixed_source/materials.xml b/tests/test_fixed_source/materials.xml index 5242021d34..ab7a76bc00 100644 --- a/tests/test_fixed_source/materials.xml +++ b/tests/test_fixed_source/materials.xml @@ -4,6 +4,7 @@ + diff --git a/tests/test_fixed_source/results_true.dat b/tests/test_fixed_source/results_true.dat index 0940301886..b3def050e8 100644 --- a/tests/test_fixed_source/results_true.dat +++ b/tests/test_fixed_source/results_true.dat @@ -1,6 +1,6 @@ tally 1: -4.538791E+02 -2.073271E+04 +4.563929E+02 +2.091711E+04 leakage: -9.830000E+00 -9.663900E+00 +9.780000E+00 +9.566400E+00 From e570f53b22c14ad04370d992eecca1c5a8b829fc Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Wed, 27 Jan 2016 11:45:09 -0500 Subject: [PATCH 224/650] Removed elementwise comparisons for subdomains and groups parameters to MGXS class methods --- openmc/mgxs/mgxs.py | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 0eec6d4585..bfa8b02c5c 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -673,14 +673,14 @@ class MGXS(object): filter_bins = [] # Construct a collection of the domain filter bins - if subdomains != 'all': + if not isinstance(subdomains, basestring): cv.check_iterable_type('subdomains', subdomains, Integral) for subdomain in subdomains: filters.append(self.domain_type) filter_bins.append((subdomain,)) # Construct list of energy group bounds tuples for all requested groups - if groups != 'all': + if not isinstance(groups, basestring): cv.check_iterable_type('groups', groups, Integral) for group in groups: filters.append('energy') @@ -838,7 +838,7 @@ class MGXS(object): """ # Construct a collection of the subdomain filter bins to average across - if subdomains != 'all': + if not isinstance(subdomains, basestring): cv.check_iterable_type('subdomains', subdomains, Integral) elif self.domain_type == 'distribcell': subdomains = np.arange(self.num_subdomains) @@ -881,7 +881,7 @@ class MGXS(object): """ # Construct a collection of the subdomains to report - if subdomains != 'all': + if not isinstance(subdomains, basestring): cv.check_iterable_type('subdomains', subdomains, Integral) elif self.domain_type == 'distribcell': subdomains = np.arange(self.num_subdomains, dtype=np.int) @@ -1010,7 +1010,7 @@ class MGXS(object): xs_results = h5py.File(filename, 'w') # Construct a collection of the subdomains to report - if subdomains != 'all': + if not isinstance(subdomains, basestring): cv.check_iterable_type('subdomains', subdomains, Integral) elif self.domain_type == 'distribcell': subdomains = np.arange(self.num_subdomains, dtype=np.int) @@ -1192,7 +1192,7 @@ class MGXS(object): """ - if groups != 'all': + if not isinstance(groups, basestring): cv.check_iterable_type('groups', groups, Integral) if nuclides != 'all' and nuclides != 'sum': cv.check_iterable_type('nuclides', nuclides, basestring) @@ -1252,7 +1252,7 @@ class MGXS(object): columns = ['group in'] # Select out those groups the user requested - if groups != 'all': + if not isinstance(groups, basestring): if 'group in' in df: df = df[df['group in'].isin(groups)] if 'group out' in df: @@ -1789,21 +1789,21 @@ class ScatterMatrixXS(MGXS): filter_bins = [] # Construct a collection of the domain filter bins - if subdomains != 'all': + if not isinstance(subdomains, basestring): cv.check_iterable_type('subdomains', subdomains, Integral) for subdomain in subdomains: filters.append(self.domain_type) filter_bins.append((subdomain,)) # Construct list of energy group bounds tuples for all requested groups - if in_groups != 'all': + if not isinstance(in_groups, basestring): cv.check_iterable_type('groups', in_groups, Integral) for group in in_groups: filters.append('energy') filter_bins.append((self.energy_groups.get_group_bounds(group),)) # Construct list of energy group bounds tuples for all requested groups - if out_groups != 'all': + if not isinstance(out_groups, basestring): cv.check_iterable_type('groups', out_groups, Integral) for group in out_groups: filters.append('energyout') @@ -1887,7 +1887,7 @@ class ScatterMatrixXS(MGXS): """ # Construct a collection of the subdomains to report - if subdomains != 'all': + if not isinstance(subdomains, basestring): cv.check_iterable_type('subdomains', subdomains, Integral) elif self.domain_type == 'distribcell': subdomains = np.arange(self.num_subdomains, dtype=np.int) @@ -1926,12 +1926,6 @@ class ScatterMatrixXS(MGXS): bounds = self.energy_groups.get_group_bounds(group) string += template.format('', group, bounds[0], bounds[1]) - if subdomains == 'all': - if self.domain_type == 'distribcell': - subdomains = np.arange(self.num_subdomains, dtype=np.int) - else: - subdomains = [self.domain.id] - # Loop over all subdomains for subdomain in subdomains: @@ -2135,14 +2129,14 @@ class Chi(MGXS): filter_bins = [] # Construct a collection of the domain filter bins - if subdomains != 'all': + if not isinstance(subdomains, basestring): cv.check_iterable_type('subdomains', subdomains, Integral) for subdomain in subdomains: filters.append(self.domain_type) filter_bins.append((subdomain,)) # Construct list of energy group bounds tuples for all requested groups - if groups != 'all': + if not isinstance(groups, basestring): cv.check_iterable_type('groups', groups, Integral) for group in groups: filters.append('energyout') From 45495b300f3418d9fe79bf9aac7527a0bba27559 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Wed, 27 Jan 2016 16:44:52 -0500 Subject: [PATCH 225/650] Fixed issues with typechecking for tally aggregation --- openmc/aggregate.py | 409 ------------------------------------------ openmc/cross.py | 422 +++++++++++++++++++++++++++++++++++++++++++- openmc/tallies.py | 11 +- 3 files changed, 419 insertions(+), 423 deletions(-) delete mode 100644 openmc/aggregate.py diff --git a/openmc/aggregate.py b/openmc/aggregate.py deleted file mode 100644 index 011ad38506..0000000000 --- a/openmc/aggregate.py +++ /dev/null @@ -1,409 +0,0 @@ -import sys -from numbers import Integral - -import numpy as np - -from openmc import Filter, Nuclide -from openmc.cross import CrossScore, CrossNuclide, CrossFilter -from openmc.filter import _FILTER_TYPES -import openmc.checkvalue as cv - - -if sys.version_info[0] >= 3: - basestring = str - -# Acceptable tally aggregation operations -_TALLY_AGGREGATE_OPS = ['sum', 'mean'] - - -class AggregateScore(object): - """A special-purpose tally score used to encapsulate an aggregate of a - subset or all of tally's scores for tally aggregation. - - Parameters - ---------- - scores : Iterable of str or CrossScore - The scores included in the aggregation - aggregate_op : str - The tally aggregation operator (e.g., 'sum', 'mean', etc.) used - to aggregate across a tally's scores with this AggregateScore - - Attributes - ---------- - scores : Iterable of str or CrossScore - The scores included in the aggregation - aggregate_op : str - The tally aggregation operator (e.g., 'sum', 'mean', etc.) used - to aggregate across a tally's scores with this AggregateScore - - """ - - def __init__(self, scores=None, aggregate_op=None): - - self._scores = None - self._aggregate_op = None - - if scores is not None: - self.scores = scores - if aggregate_op is not None: - self.aggregate_op = aggregate_op - - def __hash__(self): - return hash(repr(self)) - - def __eq__(self, other): - return str(other) == str(self) - - def __ne__(self, other): - return not self == other - - def __deepcopy__(self, memo): - existing = memo.get(id(self)) - - # If this is the first time we have tried to copy this object, create a copy - if existing is None: - clone = type(self).__new__(type(self)) - clone._scores = self.scores - clone._aggregate_op = self.aggregate_op - - memo[id(self)] = clone - - return clone - - # If this object has been copied before, return the first copy made - else: - return existing - - def __repr__(self): - string = ', '.join(map(str, self.scores)) - string = '{0}({1})'.format(self.aggregate_op, string) - return string - - @property - def scores(self): - return self._scores - - @property - def aggregate_op(self): - return self._aggregate_op - - @scores.setter - def scores(self, scores): - cv.check_iterable_type('scores', scores, basestring) - self._scores = scores - - @aggregate_op.setter - def aggregate_op(self, aggregate_op): - cv.check_type('aggregate_op', aggregate_op, (basestring, CrossScore)) - cv.check_value('aggregate_op', aggregate_op, _TALLY_AGGREGATE_OPS) - self._aggregate_op = aggregate_op - - -class AggregateNuclide(object): - """A special-purpose tally nuclide used to encapsulate an aggregate of a - subset or all of tally's nuclides for tally aggregation. - - Parameters - ---------- - nuclides : Iterable of str or Nuclide or CrossNuclide - The nuclides included in the aggregation - aggregate_op : str - The tally aggregation operator (e.g., 'sum', 'mean', etc.) used - to aggregate across a tally's nuclides with this AggregateNuclide - - Attributes - ---------- - nuclides : Iterable of str or Nuclide or CrossNuclide - The nuclides included in the aggregation - aggregate_op : str - The tally aggregation operator (e.g., 'sum', 'mean', etc.) used - to aggregate across a tally's nuclides with this AggregateNuclide - - """ - - def __init__(self, nuclides=None, aggregate_op=None): - - self._nuclides = None - self._aggregate_op = None - - if nuclides is not None: - self.nuclides = nuclides - if aggregate_op is not None: - self.aggregate_op = aggregate_op - - def __hash__(self): - return hash(repr(self)) - - def __eq__(self, other): - return str(other) == str(self) - - def __ne__(self, other): - return not self == other - - def __deepcopy__(self, memo): - existing = memo.get(id(self)) - - # If this is the first time we have tried to copy this object, create a copy - if existing is None: - clone = type(self).__new__(type(self)) - clone._nuclides = self.nuclides - clone._aggregate_op = self._aggregate_op - - memo[id(self)] = clone - - return clone - - # If this object has been copied before, return the first copy made - else: - return existing - - def __repr__(self): - - # Append each nuclide in the aggregate to the string - string = '{0}('.format(self.aggregate_op) - names = [nuclide.name if isinstance(nuclide, Nuclide) else str(nuclide) - for nuclide in self.nuclides] - string += ', '.join(map(str, names)) + ')' - return string - - @property - def nuclides(self): - return self._nuclides - - @property - def aggregate_op(self): - return self._aggregate_op - - @nuclides.setter - def nuclides(self, nuclides): - cv.check_iterable_type('nuclides', nuclides, - (basestring, Nuclide, CrossNuclide)) - self._nuclides = nuclides - - @aggregate_op.setter - def aggregate_op(self, aggregate_op): - cv.check_type('aggregate_op', aggregate_op, basestring) - cv.check_value('aggregate_op', aggregate_op, _TALLY_AGGREGATE_OPS) - self._aggregate_op = aggregate_op - - -class AggregateFilter(object): - """A special-purpose tally filter used to encapsulate an aggregate of a - subset or all of a tally filter's bins for tally aggregation. - - Parameters - ---------- - aggregate_filter : Filter or CrossFilter - The filter included in the aggregation - bins : Iterable of tuple - The filter bins included in the aggregation - aggregate_op : str - The tally aggregation operator (e.g., 'sum', 'mean', etc.) used - to aggregate across a tally filter's bins with this AggregateFilter - - Attributes - ---------- - type : str - The type of the aggregatefilter (e.g., 'sum(energy)', 'sum(cell)') - aggregate_filter : filter - The filter included in the aggregation - aggregate_op : str - The tally aggregation operator (e.g., 'sum', 'mean', etc.) used - to aggregate across a tally filter's bins with this AggregateFilter - bins : Iterable of tuple - The filter bins included in the aggregation - num_bins : Integral - The number of filter bins (always 1 if aggregate_filter is defined) - stride : Integral - The number of filter, nuclide and score bins within each of this - aggregatefilter's bins. - - """ - - def __init__(self, aggregate_filter=None, bins=None, aggregate_op=None): - - self._type = '{0}({1})'.format(aggregate_op, aggregate_filter.type) - self._bins = None - self._stride = None - - self._aggregate_filter = None - self._aggregate_op = None - - if aggregate_filter is not None: - self.aggregate_filter = aggregate_filter - if bins is not None: - self.bins = bins - if aggregate_op is not None: - self.aggregate_op = aggregate_op - - def __hash__(self): - return hash(repr(self)) - - def __eq__(self, other): - return str(other) == str(self) - - def __ne__(self, other): - return not self == other - - def __repr__(self): - string = 'AggregateFilter\n' - string += '{0: <16}{1}{2}\n'.format('\tType', '=\t', self.type) - string += '{0: <16}{1}{2}\n'.format('\tBins', '=\t', self.bins) - return string - - def __deepcopy__(self, memo): - existing = memo.get(id(self)) - - # If this is the first time we have tried to copy this object, create a copy - if existing is None: - clone = type(self).__new__(type(self)) - clone._type = self.type - clone._aggregate_filter = self.aggregate_filter - clone._aggregate_op = self.aggregate_op - clone._bins = self._bins - clone._stride = self.stride - - memo[id(self)] = clone - - return clone - - # If this object has been copied before, return the first copy made - else: - return existing - - @property - def aggregate_filter(self): - return self._aggregate_filter - - @property - def aggregate_op(self): - return self._aggregate_op - - @property - def type(self): - return self._type - - @property - def bins(self): - return self._bins - - @property - def num_bins(self): - return 1 if self.aggregate_filter else 0 - - @property - def stride(self): - return self._stride - - @type.setter - def type(self, filter_type): - if filter_type not in _FILTER_TYPES.values(): - msg = 'Unable to set AggregateFilter type to "{0}" since it ' \ - 'is not one of the supported types'.format(filter_type) - raise ValueError(msg) - - self._type = filter_type - - @aggregate_filter.setter - def aggregate_filter(self, aggregate_filter): - cv.check_type('aggregate_filter', aggregate_filter, (Filter, CrossFilter)) - self._aggregate_filter = aggregate_filter - - @bins.setter - def bins(self, bins): - cv.check_iterable_type('bins', bins, (Integral, tuple)) - self._bins = bins - - @aggregate_op.setter - def aggregate_op(self, aggregate_op): - cv.check_type('aggregate_op', aggregate_op, basestring) - cv.check_value('aggregate_op', aggregate_op, _TALLY_AGGREGATE_OPS) - self._aggregate_op = aggregate_op - - @stride.setter - def stride(self, stride): - self._stride = stride - - def get_bin_index(self, filter_bin): - """Returns the index in the AggregateFilter for some bin. - - Parameters - ---------- - filter_bin : Integral or tuple of Real - A tuple of value(s) corresponding to the bin of interest in - the aggregated filter. The bin is the integer ID for 'material', - 'surface', 'cell', 'cellborn', and 'universe' Filters. The bin - is the integer cell instance ID for 'distribcell' Filters. The - bin is a 2-tuple of floats for 'energy' and 'energyout' filters - corresponding to the energy boundaries of the bin of interest. - The bin is a (x,y,z) 3-tuple for 'mesh' filters corresponding to - the mesh cell of interest. - - Returns - ------- - filter_index : Integral - The index in the Tally data array for this filter bin. For an - AggregateTally the filter bin index is always unity. - - Raises - ------ - ValueError - When the filter_bin is not part of the aggregated filter's bins - - """ - - if filter_bin not in self.bins: - msg = 'Unable to get the bin index for AggregateFilter since ' \ - '"{0}" is not one of the bins'.format(filter_bin) - raise ValueError(msg) - else: - return 0 - - def get_pandas_dataframe(self, datasize, summary=None): - """Builds a Pandas DataFrame for the AggregateFilter's bins. - - This method constructs a Pandas DataFrame object for the AggregateFilter - with columns annotated by filter bin information. This is a helper - method for the Tally.get_pandas_dataframe(...) method. - - Parameters - ---------- - datasize : Integral - The total number of bins in the tally corresponding to this filter - summary : None or Summary - An optional Summary object to be used to construct columns for - distribcell tally filters (default is None). NOTE: This parameter - is not used by the AggregateFilter and simply mirrors the method - signature for the CrossFilter. - - Returns - ------- - pandas.DataFrame - A Pandas DataFrame with columns of strings that characterize the - aggregatefilter's bins. Each entry in the DataFrame will include - one or more aggregation operations used to construct the - aggregatefilter's bins. The number of rows in the DataFrame is the - same as the total number of bins in the corresponding tally, with - the filter bins appropriately tiled to map to the corresponding - tally bins. - - See also - -------- - Tally.get_pandas_dataframe(), Filter.get_pandas_dataframe(), - CrossFilter.get_pandas_dataframe() - - """ - - import pandas as pd - - # Construct a sring representing the filter aggregation - aggregate_bin = '{0}('.format(self.aggregate_op) - aggregate_bin += ', '.join(map(str, self.bins)) + ')' - - # Construct NumPy array of bin repeated for each element in dataframe - aggregate_bin_array = np.array([aggregate_bin]) - aggregate_bin_array = np.repeat(aggregate_bin_array, datasize) - - # Construct Pandas DataFrame for the AggregateFilter - df = pd.DataFrame({self.type: aggregate_bin_array}) - return df diff --git a/openmc/cross.py b/openmc/cross.py index ee0fcb4c82..65e12c5d27 100644 --- a/openmc/cross.py +++ b/openmc/cross.py @@ -1,16 +1,21 @@ import sys +from numbers import Integral + +import numpy as np from openmc import Filter, Nuclide from openmc.filter import _FILTER_TYPES import openmc.checkvalue as cv - if sys.version_info[0] >= 3: basestring = str # Acceptable tally arithmetic binary operations _TALLY_ARITHMETIC_OPS = ['+', '-', '*', '/', '^'] +# Acceptable tally aggregation operations +_TALLY_AGGREGATE_OPS = ['sum', 'mean'] + class CrossScore(object): """A special-purpose tally score used to encapsulate all combinations of two @@ -97,17 +102,19 @@ class CrossScore(object): @left_score.setter def left_score(self, left_score): - cv.check_type('left_score', left_score, (basestring, CrossScore)) + cv.check_type('left_score', left_score, + (basestring, CrossScore, AggregateScore)) self._left_score = left_score @right_score.setter def right_score(self, right_score): - cv.check_type('right_score', right_score, (basestring, CrossScore)) + cv.check_type('right_score', right_score, + (basestring, CrossScore, AggregateScore)) self._right_score = right_score @binary_op.setter def binary_op(self, binary_op): - cv.check_type('binary_op', binary_op, (basestring, CrossScore)) + cv.check_type('binary_op', binary_op, basestring) cv.check_value('binary_op', binary_op, _TALLY_ARITHMETIC_OPS) self._binary_op = binary_op @@ -214,12 +221,14 @@ class CrossNuclide(object): @left_nuclide.setter def left_nuclide(self, left_nuclide): - cv.check_type('left_nuclide', left_nuclide, (Nuclide, CrossNuclide)) + cv.check_type('left_nuclide', left_nuclide, + (Nuclide, CrossNuclide, AggregateNuclide)) self._left_nuclide = left_nuclide @right_nuclide.setter def right_nuclide(self, right_nuclide): - cv.check_type('right_nuclide', right_nuclide, (Nuclide, CrossNuclide)) + cv.check_type('right_nuclide', right_nuclide, + (Nuclide, CrossNuclide, AggregateNuclide)) self._right_nuclide = right_nuclide @binary_op.setter @@ -372,13 +381,15 @@ class CrossFilter(object): @left_filter.setter def left_filter(self, left_filter): - cv.check_type('left_filter', left_filter, (Filter, CrossFilter)) + cv.check_type('left_filter', left_filter, + (Filter, CrossFilter, AggregateFilter)) self._left_filter = left_filter self._bins['left'] = left_filter.bins @right_filter.setter def right_filter(self, right_filter): - cv.check_type('right_filter', right_filter, (Filter, CrossFilter)) + cv.check_type('right_filter', right_filter, + (Filter, CrossFilter, AggregateFilter)) self._right_filter = right_filter self._bins['right'] = right_filter.bins @@ -472,3 +483,398 @@ class CrossFilter(object): df = '(' + left_df + ' ' + self.binary_op + ' ' + right_df + ')' return df + + +class AggregateScore(object): + """A special-purpose tally score used to encapsulate an aggregate of a + subset or all of tally's scores for tally aggregation. + + Parameters + ---------- + scores : Iterable of str or CrossScore + The scores included in the aggregation + aggregate_op : str + The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + to aggregate across a tally's scores with this AggregateScore + + Attributes + ---------- + scores : Iterable of str or CrossScore + The scores included in the aggregation + aggregate_op : str + The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + to aggregate across a tally's scores with this AggregateScore + + """ + + def __init__(self, scores=None, aggregate_op=None): + + self._scores = None + self._aggregate_op = None + + if scores is not None: + self.scores = scores + if aggregate_op is not None: + self.aggregate_op = aggregate_op + + def __hash__(self): + return hash(repr(self)) + + def __eq__(self, other): + return str(other) == str(self) + + def __ne__(self, other): + return not self == other + + def __deepcopy__(self, memo): + existing = memo.get(id(self)) + + # If this is the first time we have tried to copy this object, create a copy + if existing is None: + clone = type(self).__new__(type(self)) + clone._scores = self.scores + clone._aggregate_op = self.aggregate_op + + memo[id(self)] = clone + + return clone + + # If this object has been copied before, return the first copy made + else: + return existing + + def __repr__(self): + string = ', '.join(map(str, self.scores)) + string = '{0}({1})'.format(self.aggregate_op, string) + return string + + @property + def scores(self): + return self._scores + + @property + def aggregate_op(self): + return self._aggregate_op + + @scores.setter + def scores(self, scores): + cv.check_iterable_type('scores', scores, + (basestring, CrossScore, AggregateScore)) + self._scores = scores + + @aggregate_op.setter + def aggregate_op(self, aggregate_op): + cv.check_type('aggregate_op', aggregate_op, (basestring, CrossScore)) + cv.check_value('aggregate_op', aggregate_op, _TALLY_AGGREGATE_OPS) + self._aggregate_op = aggregate_op + + +class AggregateNuclide(object): + """A special-purpose tally nuclide used to encapsulate an aggregate of a + subset or all of tally's nuclides for tally aggregation. + + Parameters + ---------- + nuclides : Iterable of str or Nuclide or CrossNuclide + The nuclides included in the aggregation + aggregate_op : str + The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + to aggregate across a tally's nuclides with this AggregateNuclide + + Attributes + ---------- + nuclides : Iterable of str or Nuclide or CrossNuclide + The nuclides included in the aggregation + aggregate_op : str + The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + to aggregate across a tally's nuclides with this AggregateNuclide + + """ + + def __init__(self, nuclides=None, aggregate_op=None): + + self._nuclides = None + self._aggregate_op = None + + if nuclides is not None: + self.nuclides = nuclides + if aggregate_op is not None: + self.aggregate_op = aggregate_op + + def __hash__(self): + return hash(repr(self)) + + def __eq__(self, other): + return str(other) == str(self) + + def __ne__(self, other): + return not self == other + + def __deepcopy__(self, memo): + existing = memo.get(id(self)) + + # If this is the first time we have tried to copy this object, create a copy + if existing is None: + clone = type(self).__new__(type(self)) + clone._nuclides = self.nuclides + clone._aggregate_op = self._aggregate_op + + memo[id(self)] = clone + + return clone + + # If this object has been copied before, return the first copy made + else: + return existing + + def __repr__(self): + + # Append each nuclide in the aggregate to the string + string = '{0}('.format(self.aggregate_op) + names = [nuclide.name if isinstance(nuclide, Nuclide) else str(nuclide) + for nuclide in self.nuclides] + string += ', '.join(map(str, names)) + ')' + return string + + @property + def nuclides(self): + return self._nuclides + + @property + def aggregate_op(self): + return self._aggregate_op + + @nuclides.setter + def nuclides(self, nuclides): + cv.check_iterable_type('nuclides', nuclides, + (basestring, Nuclide, CrossNuclide, AggregateNuclide)) + self._nuclides = nuclides + + @aggregate_op.setter + def aggregate_op(self, aggregate_op): + cv.check_type('aggregate_op', aggregate_op, basestring) + cv.check_value('aggregate_op', aggregate_op, _TALLY_AGGREGATE_OPS) + self._aggregate_op = aggregate_op + + +class AggregateFilter(object): + """A special-purpose tally filter used to encapsulate an aggregate of a + subset or all of a tally filter's bins for tally aggregation. + + Parameters + ---------- + aggregate_filter : Filter or CrossFilter + The filter included in the aggregation + bins : Iterable of tuple + The filter bins included in the aggregation + aggregate_op : str + The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + to aggregate across a tally filter's bins with this AggregateFilter + + Attributes + ---------- + type : str + The type of the aggregatefilter (e.g., 'sum(energy)', 'sum(cell)') + aggregate_filter : filter + The filter included in the aggregation + aggregate_op : str + The tally aggregation operator (e.g., 'sum', 'mean', etc.) used + to aggregate across a tally filter's bins with this AggregateFilter + bins : Iterable of tuple + The filter bins included in the aggregation + num_bins : Integral + The number of filter bins (always 1 if aggregate_filter is defined) + stride : Integral + The number of filter, nuclide and score bins within each of this + aggregatefilter's bins. + + """ + + def __init__(self, aggregate_filter=None, bins=None, aggregate_op=None): + + self._type = '{0}({1})'.format(aggregate_op, aggregate_filter.type) + self._bins = None + self._stride = None + + self._aggregate_filter = None + self._aggregate_op = None + + if aggregate_filter is not None: + self.aggregate_filter = aggregate_filter + if bins is not None: + self.bins = bins + if aggregate_op is not None: + self.aggregate_op = aggregate_op + + def __hash__(self): + return hash(repr(self)) + + def __eq__(self, other): + return str(other) == str(self) + + def __ne__(self, other): + return not self == other + + def __repr__(self): + string = 'AggregateFilter\n' + string += '{0: <16}{1}{2}\n'.format('\tType', '=\t', self.type) + string += '{0: <16}{1}{2}\n'.format('\tBins', '=\t', self.bins) + return string + + def __deepcopy__(self, memo): + existing = memo.get(id(self)) + + # If this is the first time we have tried to copy this object, create a copy + if existing is None: + clone = type(self).__new__(type(self)) + clone._type = self.type + clone._aggregate_filter = self.aggregate_filter + clone._aggregate_op = self.aggregate_op + clone._bins = self._bins + clone._stride = self.stride + + memo[id(self)] = clone + + return clone + + # If this object has been copied before, return the first copy made + else: + return existing + + @property + def aggregate_filter(self): + return self._aggregate_filter + + @property + def aggregate_op(self): + return self._aggregate_op + + @property + def type(self): + return self._type + + @property + def bins(self): + return self._bins + + @property + def num_bins(self): + return 1 if self.aggregate_filter else 0 + + @property + def stride(self): + return self._stride + + @type.setter + def type(self, filter_type): + if filter_type not in _FILTER_TYPES.values(): + msg = 'Unable to set AggregateFilter type to "{0}" since it ' \ + 'is not one of the supported types'.format(filter_type) + raise ValueError(msg) + + self._type = filter_type + + @aggregate_filter.setter + def aggregate_filter(self, aggregate_filter): + cv.check_type('aggregate_filter', aggregate_filter, + (Filter, CrossFilter, AggregateFilter)) + self._aggregate_filter = aggregate_filter + + @bins.setter + def bins(self, bins): + cv.check_iterable_type('bins', bins, (Integral, tuple)) + self._bins = bins + + @aggregate_op.setter + def aggregate_op(self, aggregate_op): + cv.check_type('aggregate_op', aggregate_op, basestring) + cv.check_value('aggregate_op', aggregate_op, _TALLY_AGGREGATE_OPS) + self._aggregate_op = aggregate_op + + @stride.setter + def stride(self, stride): + self._stride = stride + + def get_bin_index(self, filter_bin): + """Returns the index in the AggregateFilter for some bin. + + Parameters + ---------- + filter_bin : Integral or tuple of Real + A tuple of value(s) corresponding to the bin of interest in + the aggregated filter. The bin is the integer ID for 'material', + 'surface', 'cell', 'cellborn', and 'universe' Filters. The bin + is the integer cell instance ID for 'distribcell' Filters. The + bin is a 2-tuple of floats for 'energy' and 'energyout' filters + corresponding to the energy boundaries of the bin of interest. + The bin is a (x,y,z) 3-tuple for 'mesh' filters corresponding to + the mesh cell of interest. + + Returns + ------- + filter_index : Integral + The index in the Tally data array for this filter bin. For an + AggregateTally the filter bin index is always unity. + + Raises + ------ + ValueError + When the filter_bin is not part of the aggregated filter's bins + + """ + + if filter_bin not in self.bins: + msg = 'Unable to get the bin index for AggregateFilter since ' \ + '"{0}" is not one of the bins'.format(filter_bin) + raise ValueError(msg) + else: + return 0 + + def get_pandas_dataframe(self, datasize, summary=None): + """Builds a Pandas DataFrame for the AggregateFilter's bins. + + This method constructs a Pandas DataFrame object for the AggregateFilter + with columns annotated by filter bin information. This is a helper + method for the Tally.get_pandas_dataframe(...) method. + + Parameters + ---------- + datasize : Integral + The total number of bins in the tally corresponding to this filter + summary : None or Summary + An optional Summary object to be used to construct columns for + distribcell tally filters (default is None). NOTE: This parameter + is not used by the AggregateFilter and simply mirrors the method + signature for the CrossFilter. + + Returns + ------- + pandas.DataFrame + A Pandas DataFrame with columns of strings that characterize the + aggregatefilter's bins. Each entry in the DataFrame will include + one or more aggregation operations used to construct the + aggregatefilter's bins. The number of rows in the DataFrame is the + same as the total number of bins in the corresponding tally, with + the filter bins appropriately tiled to map to the corresponding + tally bins. + + See also + -------- + Tally.get_pandas_dataframe(), Filter.get_pandas_dataframe(), + CrossFilter.get_pandas_dataframe() + + """ + + import pandas as pd + + # Construct a sring representing the filter aggregation + aggregate_bin = '{0}('.format(self.aggregate_op) + aggregate_bin += ', '.join(map(str, self.bins)) + ')' + + # Construct NumPy array of bin repeated for each element in dataframe + aggregate_bin_array = np.array([aggregate_bin]) + aggregate_bin_array = np.repeat(aggregate_bin_array, datasize) + + # Construct Pandas DataFrame for the AggregateFilter + df = pd.DataFrame({self.type: aggregate_bin_array}) + return df diff --git a/openmc/tallies.py b/openmc/tallies.py index 9b75f35d48..fb07532a0e 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -12,8 +12,7 @@ import sys import numpy as np from openmc import Mesh, Filter, Trigger, Nuclide -from openmc.cross import CrossScore, CrossNuclide, CrossFilter -from openmc.aggregate import AggregateScore, AggregateNuclide, AggregateFilter +from openmc.cross import * from openmc.filter import _FILTER_TYPES import openmc.checkvalue as cv from openmc.clean_xml import * @@ -2680,11 +2679,11 @@ class Tally(object): new_tally = copy.deepcopy(self) new_tally.sparse = False - if self.sum is not None: + if not self.derived and self.sum is not None: new_sum = self.get_values(scores, filters, filter_bins, nuclides, 'sum') new_tally.sum = new_sum - if self.sum_sq is not None: + if not self.derived and self.sum_sq is not None: new_sum_sq = self.get_values(scores, filters, filter_bins, nuclides, 'sum_sq') new_tally.sum_sq = new_sum_sq @@ -2955,10 +2954,10 @@ class Tally(object): diag_indices[start:end] = indices + (i * new_filter.num_bins**2) # Inject this Tally's data along the diagonal of the diagonalized Tally - if self.sum is not None: + if not self.derived and self.sum is not None: new_tally._sum = np.zeros(new_tally.shape, dtype=np.float64) new_tally._sum[diag_indices, :, :] = self.sum - if self.sum_sq is not None: + if not self.derived and self.sum_sq is not None: new_tally._sum_sq = np.zeros(new_tally.shape, dtype=np.float64) new_tally._sum_sq[diag_indices, :, :] = self.sum_sq if self.mean is not None: From bd841a268f86117da6e9e370ef99088f9ea416d6 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 28 Jan 2016 12:56:52 -0500 Subject: [PATCH 226/650] Fixed bug in StatePoint.with_summary property --- openmc/statepoint.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 49ac43590e..4c6f956a49 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -451,7 +451,7 @@ class StatePoint(object): @property def with_summary(self): - return False if self.summary is None else True + return False if self.summary is False else True @sparse.setter def sparse(self, sparse): From 3d9353b086076cce4f0a95ee19d1b028c1c41c18 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 28 Jan 2016 13:41:08 -0500 Subject: [PATCH 227/650] Removed StatePoint.with_summary property --- openmc/mgxs/library.py | 2 +- openmc/mgxs/mgxs.py | 2 +- openmc/statepoint.py | 6 +----- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index ca9fa5d669..4b8d8a9149 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -396,7 +396,7 @@ class Library(object): cv.check_type('statepoint', statepoint, openmc.StatePoint) - if not statepoint.with_summary: + if statepoint.summary is None: msg = 'Unable to load data from a statepoint which has not been ' \ 'linked with a summary file' raise ValueError(msg) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index bfa8b02c5c..d1f3d4b069 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -583,7 +583,7 @@ class MGXS(object): cv.check_type('statepoint', statepoint, openmc.statepoint.StatePoint) - if not statepoint.with_summary: + if statepoint.summary is None: msg = 'Unable to load data from a statepoint which has not been ' \ 'linked with a summary file' raise ValueError(msg) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 4c6f956a49..b7af1a9618 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -1,4 +1,4 @@ -import sys +mport sys import re import numpy as np @@ -449,10 +449,6 @@ class StatePoint(object): def summary(self): return self._summary - @property - def with_summary(self): - return False if self.summary is False else True - @sparse.setter def sparse(self, sparse): """Convert tally data from NumPy arrays to SciPy list of lists (LIL) From 1e89fd53e6b5536b53ed23e2482a92a6e5fdcbff Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 28 Jan 2016 13:50:11 -0500 Subject: [PATCH 228/650] Fixed typo in imports for statepoint.py --- openmc/statepoint.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index b7af1a9618..f5b5b2e72d 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -1,4 +1,4 @@ -mport sys +import sys import re import numpy as np From 3cbea749cb7919a826bcc73f5fe1edbddcc2e497 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 28 Jan 2016 13:54:38 -0500 Subject: [PATCH 229/650] Now clear any old tallies in MGXS.load_from_statepoint(...) --- openmc/mgxs/mgxs.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index d1f3d4b069..f241274581 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -612,6 +612,11 @@ class MGXS(object): filters = [] filter_bins = [] + # Clear any tallies previously loaded from a statepoint + self._tallies = None + self._xs_tally = None + self._rxn_rate_tally = None + # Find, slice and store Tallies from StatePoint # The tally slicing is needed if tally merging was used for tally_type, tally in self.tallies.items(): From 6cafdd5b65c074ad02f25d1fe286f61d79354e56 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 28 Jan 2016 13:38:02 -0600 Subject: [PATCH 230/650] Reorganize score tables as per suggestions by @wbinventor --- docs/source/usersguide/input.rst | 364 ++++++++++++++----------------- 1 file changed, 167 insertions(+), 197 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index ca16c8fef6..a9dda8ff47 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -1476,36 +1476,186 @@ The ```` element accepts the following sub-elements: :scores: A space-separated list of the desired responses to be accumulated. The accepted - options are listed in the following table: + options are listed in the following tables: - .. table:: Score types available in OpenMC + .. table:: **Flux scores: units are particle-cm per source particle.** +----------------------+---------------------------------------------------+ |Score | Description | +======================+===================================================+ - |flux |Total flux in particle-cm per source particle. | - | | | + |flux |Total flux. | +----------------------+---------------------------------------------------+ - |total |Total reaction rate in reactions per source | - | |particle. | + |flux-YN |Spherical harmonic expansion of the direction of | + | |motion :math:`\left(\Omega\right)` of the total | + | |flux. This score will tally all of the harmonic | + | |moments of order 0 to N. N must be between 0 and | + | |10. | + +----------------------+---------------------------------------------------+ + + .. table:: **Reaction scores: units are reactions per source particle.** + + +----------------------+---------------------------------------------------+ + |Score | Description | + +======================+===================================================+ + |absorption |Total absorption rate. This accounts for all | + | |reactions which do not produce secondary neutrons. | + +----------------------+---------------------------------------------------+ + |elastic |Elastic scattering reaction rate. | + +----------------------+---------------------------------------------------+ + |fission |Total fission reaction rate. | +----------------------+---------------------------------------------------+ |scatter |Total scattering rate. Can also be identified with | - | |the "scatter-0" response type. Units are reactions | - | |per source particle. | + | |the "scatter-0" response type. | +----------------------+---------------------------------------------------+ - |absorption |Total absorption rate. This accounts for all | - | |reactions which do not produce secondary | - | |neutrons. Units are reactions per source particle. | + |scatter-N |Tally the N\ :sup:`th` \ scattering moment, where N| + | |is the Legendre expansion order of the change in | + | |particle angle :math:`\left(\mu\right)`. N must be | + | |between 0 and 10. As an example, tallying the 2\ | + | |:sup:`nd` \ scattering moment would be specified as| + | |``scatter-2``. | +----------------------+---------------------------------------------------+ - |fission |Total fission rate in reactions per source | - | |particle. | + |scatter-PN |Tally all of the scattering moments from order 0 to| + | |N, where N is the Legendre expansion order of the | + | |change in particle angle | + | |:math:`\left(\mu\right)`. That is, "scatter-P1" is | + | |equivalent to requesting tallies of "scatter-0" and| + | |"scatter-1". Like for "scatter-N", N must be | + | |between 0 and 10. As an example, tallying up to the| + | |2\ :sup:`nd` \ scattering moment would be specified| + | |as `` scatter-P2 ``. | +----------------------+---------------------------------------------------+ - |nu-fission |Total production of neutrons due to fission. Units | - | |are neutrons produced per source neutron. | + |scatter-YN |"scatter-YN" is similar to "scatter-PN" except an | + | |additional expansion is performed for the incoming | + | |particle direction :math:`\left(\Omega\right)` | + | |using the real spherical harmonics. This is useful| + | |for performing angular flux moment weighting of the| + | |scattering moments. Like "scatter-PN", "scatter-YN"| + | |will tally all of the moments from order 0 to N; N | + | |again must be between 0 and 10. | +----------------------+---------------------------------------------------+ + |total |Total reaction rate. | + +----------------------+---------------------------------------------------+ + |total-YN |The total reaction rate expanded via spherical | + | |harmonics about the direction of motion of the | + | |neutron, :math:`\Omega`. This score will tally all | + | |of the harmonic moments of order 0 to N. N must be| + | |between 0 and 10. | + +----------------------+---------------------------------------------------+ + |(n,2nd) |(n,2nd) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,2n) |(n,2n) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,3n) |(n,3n) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,na) |(n,n\ :math:`\alpha`\ ) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,n3a) |(n,n3\ :math:`\alpha`\ ) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,2na) |(n,2n\ :math:`\alpha`\ ) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,3na) |(n,3n\ :math:`\alpha`\ ) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,np) |(n,np) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,n2a) |(n,n2\ :math:`\alpha`\ ) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,2n2a) |(n,2n2\ :math:`\alpha`\ ) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,nd) |(n,nd) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,nt) |(n,nt) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,nHe-3) |(n,n\ :sup:`3`\ He) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,nd2a) |(n,nd2\ :math:`\alpha`\ ) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,nt2a) |(n,nt2\ :math:`\alpha`\ ) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,4n) |(n,4n) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,2np) |(n,2np) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,3np) |(n,3np) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,n2p) |(n,n2p) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,n*X*) |Level inelastic scattering reaction rate. The *X* | + | |indicates what which inelastic level, e.g., (n,n3) | + | |is third-level inelastic scattering. | + +----------------------+---------------------------------------------------+ + |(n,nc) |Continuum level inelastic scattering reaction rate.| + +----------------------+---------------------------------------------------+ + |(n,gamma) |Radiative capture reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,p) |(n,p) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,d) |(n,d) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,t) |(n,t) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,3He) |(n,\ :sup:`3`\ He) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,a) |(n,\ :math:`\alpha`\ ) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,2a) |(n,2\ :math:`\alpha`\ ) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,3a) |(n,3\ :math:`\alpha`\ ) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,2p) |(n,2p) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,pa) |(n,p\ :math:`\alpha`\ ) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,t2a) |(n,t2\ :math:`\alpha`\ ) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,d2a) |(n,d2\ :math:`\alpha`\ ) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,pd) |(n,pd) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,pt) |(n,pt) reaction rate. | + +----------------------+---------------------------------------------------+ + |(n,da) |(n,d\ :math:`\alpha`\ ) reaction rate. | + +----------------------+---------------------------------------------------+ + |*Arbitrary integer* |An arbitrary integer is interpreted to mean the | + | |reaction rate for a reaction with a given ENDF MT | + | |number. | + +----------------------+---------------------------------------------------+ + + .. table:: **Particle production scores: units are particles produced per + source particles.** + + +----------------------+---------------------------------------------------+ + |Score | Description | + +======================+===================================================+ |delayed-nu-fission |Total production of delayed neutrons due to | - | |fission. Units are neutrons produced per source | - | |neutron. | + | |fission. | + +----------------------+---------------------------------------------------+ + |nu-fission |Total production of neutrons due to fission. | + +----------------------+---------------------------------------------------+ + |nu-scatter, |These scores are similar in functionality to their | + |nu-scatter-N, |``scatter*`` equivalents except the total | + |nu-scatter-PN, |production of neutrons due to scattering is scored | + |nu-scatter-YN |vice simply the scattering rate. This accounts for | + | |multiplicity from (n,2n), (n,3n), and (n,4n) | + | |reactions. | + +----------------------+---------------------------------------------------+ + + .. table:: **Miscellaneous scores: units are indicated for each.** + + +----------------------+---------------------------------------------------+ + |Score | Description | + +======================+===================================================+ + |current |Partial currents on the boundaries of each cell in | + | |a mesh. Units are particles per source | + | |particle. Note that this score can only be used if | + | |a mesh filter has been specified. Furthermore, it | + | |may not be used in conjunction with any other | + | |score. | + +----------------------+---------------------------------------------------+ + |events |Number of scoring events. Units are events per | + | |source particle. | + +----------------------+---------------------------------------------------+ + |inverse-velocity |The flux-weighted inverse velocity where the | + | |velocity is in units of centimeters per second. | +----------------------+---------------------------------------------------+ |kappa-fission |The recoverable energy production rate due to | | |fission. The recoverable energy is defined as the | @@ -1518,186 +1668,6 @@ The ```` element accepts the following sub-elements: | |:math:`\gamma`-rays are assumed to deposit their | | |energy locally. Units are MeV per source particle. | +----------------------+---------------------------------------------------+ - |scatter-N |Tally the N\ :sup:`th` \ scattering moment, where N| - | |is the Legendre expansion order of the change in | - | |particle angle :math:`\left(\mu\right)`. N must be | - | |between 0 and 10. As an example, tallying the 2\ | - | |:sup:`nd` \ scattering moment would be specified as| - | |``scatter-2``. Units are reactions| - | |per source particle. | - +----------------------+---------------------------------------------------+ - |scatter-PN |Tally all of the scattering moments from order 0 to| - | |N, where N is the Legendre expansion order of the | - | |change in particle angle | - | |:math:`\left(\mu\right)`. That is, "scatter-P1" is | - | |equivalent to requesting tallies of "scatter-0" and| - | |"scatter-1". Like for "scatter-N", N must be | - | |between 0 and 10. As an example, tallying up to the| - | |2\ :sup:`nd` \ scattering moment would be specified| - | |as `` scatter-P2 ``. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |scatter-YN |"scatter-YN" is similar to "scatter-PN" except an | - | |additional expansion is performed for the incoming | - | |particle direction :math:`\left(\Omega\right)` | - | |using the real spherical harmonics. This is useful| - | |for performing angular flux moment weighting of the| - | |scattering moments. Like "scatter-PN", "scatter-YN"| - | |will tally all of the moments from order 0 to N; N | - | |again must be between 0 and 10. Units are reactions| - | |per source particle. | - +----------------------+---------------------------------------------------+ - |nu-scatter, |These scores are similar in functionality to their | - |nu-scatter-N, |``scatter*`` equivalents except the total | - |nu-scatter-PN, |production of neutrons due to scattering is scored | - |nu-scatter-YN |vice simply the scattering rate. This accounts for | - | |multiplicity from (n,2n), (n,3n), and (n,4n) | - | |reactions. Units are neutrons produced per source | - | |particle. | - +----------------------+---------------------------------------------------+ - |flux-YN |Spherical harmonic expansion of the direction of | - | |motion :math:`\left(\Omega\right)` of the total | - | |flux. This score will tally all of the harmonic | - | |moments of order 0 to N. N must be between 0 and | - | |10. Units are particle-cm per source particle. | - +----------------------+---------------------------------------------------+ - |total-YN |The total reaction rate expanded via spherical | - | |harmonics about the direction of motion of the | - | |neutron, :math:`\Omega`. This score will tally all | - | |of the harmonic moments of order 0 to N. N must be| - | |between 0 and 10. Units are reactions per source | - | |particle. | - +----------------------+---------------------------------------------------+ - |current |Partial currents on the boundaries of each cell in | - | |a mesh. Units are particles per source | - | |particle. Note that this score can only be used if | - | |a mesh filter has been specified. Furthermore, it | - | |may not be used in conjunction with any other | - | |score. | - +----------------------+---------------------------------------------------+ - |inverse-velocity |The flux-weighted inverse velocity where the | - | |velocity is in units of centimeters per second. | - +----------------------+---------------------------------------------------+ - |events |Number of scoring events. Units are events per | - | |source particle. | - +----------------------+---------------------------------------------------+ - |elastic |Elastic scattering reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,2nd) |(n,2nd) reaction rate. Units are reactions per | - | |source particle. | - +----------------------+---------------------------------------------------+ - |(n,2n) |(n,2n) reaction rate. Units are reactions per | - | |source particle. | - +----------------------+---------------------------------------------------+ - |(n,3n) |(n,3n) reaction rate. Units are reactions per | - | |source particle. | - +----------------------+---------------------------------------------------+ - |(n,na) |(n,n\ :math:`\alpha`\ ) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,n3a) |(n,n3\ :math:`\alpha`\ ) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,2na) |(n,2n\ :math:`\alpha`\ ) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,3na) |(n,3n\ :math:`\alpha`\ ) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,np) |(n,np) reaction rate. Units are reactions per | - | |source particle. | - +----------------------+---------------------------------------------------+ - |(n,n2a) |(n,n2\ :math:`\alpha`\ ) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,2n2a) |(n,2n2\ :math:`\alpha`\ ) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,nd) |(n,nd) reaction rate. Units are reactions per | - | |source particle. | - +----------------------+---------------------------------------------------+ - |(n,nt) |(n,nt) reaction rate. Units are reactions per | - | |source particle. | - +----------------------+---------------------------------------------------+ - |(n,nHe-3) |(n,n\ :sup:`3`\ He) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,nd2a) |(n,nd2\ :math:`\alpha`\ ) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,nt2a) |(n,nt2\ :math:`\alpha`\ ) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,4n) |(n,4n) reaction rate. Units are reactions per | - | |source particle. | - +----------------------+---------------------------------------------------+ - |(n,2np) |(n,2np) reaction rate. Units are reactions per | - | |source particle. | - +----------------------+---------------------------------------------------+ - |(n,3np) |(n,3np) reaction rate. Units are reactions per | - | |source particle. | - +----------------------+---------------------------------------------------+ - |(n,n2p) |(n,n2p) reaction rate. Units are reactions per | - | |source particle. | - +----------------------+---------------------------------------------------+ - |(n,n*X*) |Level inelastic scattering reaction rate. The *X* | - | |indicates what which inelastic level, e.g., (n,n3) | - | |is third-level inelastic scattering. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,nc) |Continuum level inelastic scattering reaction | - | |rate. Units are reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,gamma) |Radiative capture reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,p) |(n,p) reaction rate. Units are reactions per source| - | |particle. | - +----------------------+---------------------------------------------------+ - |(n,d) |(n,d) reaction rate. Units are reactions per source| - | |particle. | - +----------------------+---------------------------------------------------+ - |(n,t) |(n,t) reaction rate. Units are reactions per source| - | |particle. | - +----------------------+---------------------------------------------------+ - |(n,3He) |(n,\ :sup:`3`\ He) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,a) |(n,\ :math:`\alpha`\ ) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,2a) |(n,2\ :math:`\alpha`\ ) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,3a) |(n,3\ :math:`\alpha`\ ) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,2p) |(n,2p) reaction rate. Units are reactions per | - | |source particle. | - +----------------------+---------------------------------------------------+ - |(n,pa) |(n,p\ :math:`\alpha`\ ) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,t2a) |(n,t2\ :math:`\alpha`\ ) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,d2a) |(n,d2\ :math:`\alpha`\ ) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |(n,pd) |(n,pd) reaction rate. Units are reactions per | - | |source particle. | - +----------------------+---------------------------------------------------+ - |(n,pt) |(n,pt) reaction rate. Units are reactions per | - | |source particle. | - +----------------------+---------------------------------------------------+ - |(n,da) |(n,d\ :math:`\alpha`\ ) reaction rate. Units are | - | |reactions per source particle. | - +----------------------+---------------------------------------------------+ - |*Arbitrary integer* |An arbitrary integer is interpreted to mean the | - | |reaction rate for a reaction with a given ENDF MT | - | |number. Units are reactions per source particle. | - +----------------------+---------------------------------------------------+ .. note:: The ``analog`` estimator is actually identical to the ``collision`` From 0e2db9afee6d9bf35a5b5618e01b67c48b2449b5 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 28 Jan 2016 14:42:07 -0500 Subject: [PATCH 231/650] Renamed cross.py to arithmetic.py per suggestion by @paulromano --- openmc/{cross.py => arithmetic.py} | 0 openmc/tallies.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename openmc/{cross.py => arithmetic.py} (100%) diff --git a/openmc/cross.py b/openmc/arithmetic.py similarity index 100% rename from openmc/cross.py rename to openmc/arithmetic.py diff --git a/openmc/tallies.py b/openmc/tallies.py index fb07532a0e..3c4d99c730 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -12,7 +12,7 @@ import sys import numpy as np from openmc import Mesh, Filter, Trigger, Nuclide -from openmc.cross import * +from openmc.arithmetic import * from openmc.filter import _FILTER_TYPES import openmc.checkvalue as cv from openmc.clean_xml import * From 51deaa7cbf4a5bc06bb9ddc0dd2beef830115333 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 28 Jan 2016 15:56:28 -0600 Subject: [PATCH 232/650] Prevent segfault when user specifies '18' on tally scores --- src/input_xml.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index ec8a8a5a15..df9d28e13e 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -3247,7 +3247,7 @@ contains call fatal_error("Cannot tally absorption rate with an outgoing & &energy filter.") end if - case ('fission') + case ('fission', '18') t % score_bins(j) = SCORE_FISSION if (t % find_filter(FILTER_ENERGYOUT) > 0) then call fatal_error("Cannot tally fission rate with an outgoing & From 26c5e5e66b52c2768a6639c52745f2ca8d4e0533 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 29 Jan 2016 17:06:58 -0600 Subject: [PATCH 233/650] Fix spacing around % as pointed out by @wbinventor --- src/physics.F90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/physics.F90 b/src/physics.F90 index c6ecf4fe66..da2682ebf7 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -94,7 +94,7 @@ contains call create_fission_sites(p, i_nuclide, i_reaction, fission_bank, n_bank) elseif (run_mode == MODE_FIXEDSOURCE) then call create_fission_sites(p, i_nuclide, i_reaction, & - p%secondary_bank, p%n_secondary) + p % secondary_bank, p % n_secondary) end if end if @@ -1174,7 +1174,8 @@ contains ! Sample secondary energy distribution for fission reaction and set energy ! in fission bank - bank_array(i) % E = sample_fission_energy(nuc, nuc%reactions(i_reaction), p) + bank_array(i) % E = sample_fission_energy(nuc, & + nuc % reactions(i_reaction), p) ! Set the delayed group of the neutron bank_array(i) % delayed_group = p % delayed_group From c746d7a9faea3de7641bc4b0a08268fdd66569d6 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sat, 30 Jan 2016 11:44:54 -0500 Subject: [PATCH 234/650] Fixed issue with 3D lattice distribcell offsets --- openmc/summary.py | 1 - openmc/universe.py | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/openmc/summary.py b/openmc/summary.py index eb14d3bb81..29c30c2936 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -368,7 +368,6 @@ class Summary(object): lattice.universes = universes if offsets is not None: - offsets = np.swapaxes(offsets, 0, 2) lattice.offsets = offsets # Add the Lattice to the global dictionary of all Lattices diff --git a/openmc/universe.py b/openmc/universe.py index 237ddce1f7..319acc3302 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -1101,8 +1101,8 @@ class RectLattice(Lattice): # For 3D Lattices else: - offset = self._offsets[i[1]-1, i[2]-1, i[3]-1, distribcell_index-1] - offset += self._universes[i[1]-1][i[2]-1][i[3]-1].get_cell_instance( + offset = self._offsets[i[3]-1, i[2]-1, i[1]-1, distribcell_index-1] + offset += self._universes[i[3]-1][i[2]-1][i[1]-1].get_cell_instance( path, distribcell_index) return offset From 1bd815c52966c9285881d8c6ebca313dcac6c563 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sat, 30 Jan 2016 13:57:06 -0500 Subject: [PATCH 235/650] Fixed distribcell offsets for 2D lattices --- openmc/summary.py | 1 + openmc/universe.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/openmc/summary.py b/openmc/summary.py index 29c30c2936..3e10f8edbd 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -367,6 +367,7 @@ class Summary(object): # Set the universes for the lattice lattice.universes = universes + # Set the distribcell offsets for the lattice if offsets is not None: lattice.offsets = offsets diff --git a/openmc/universe.py b/openmc/universe.py index 319acc3302..74c438615c 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -1095,7 +1095,7 @@ class RectLattice(Lattice): # For 2D Lattices if len(self._dimension) == 2: - offset = self._offsets[i[1]-1, i[2]-1, 0, distribcell_index-1] + offset = self._offsets[i[3]-1, i[2]-1, i[1]-1, distribcell_index-1] offset += self._universes[i[1]-1][i[2]-1].get_cell_instance(path, distribcell_index) From fb0e166e1cd78caad2304701c525c528ae05967f Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sat, 30 Jan 2016 15:06:55 -0500 Subject: [PATCH 236/650] Fixed issue with double subdomain-avg MGXS --- openmc/arithmetic.py | 3 ++- openmc/mgxs/library.py | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/openmc/arithmetic.py b/openmc/arithmetic.py index 65e12c5d27..8574c4873e 100644 --- a/openmc/arithmetic.py +++ b/openmc/arithmetic.py @@ -823,7 +823,8 @@ class AggregateFilter(object): """ - if filter_bin not in self.bins: + if filter_bin not in self.bins and \ + filter_bin != self._aggregate_filter.bins: msg = 'Unable to get the bin index for AggregateFilter since ' \ '"{0}" is not one of the bins'.format(filter_bin) raise ValueError(msg) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 4b8d8a9149..e87b4bdaef 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -568,8 +568,9 @@ class Library(object): for domain in self.domains: for mgxs_type in self.mgxs_types: mgxs = subdomain_avg_library.get_mgxs(domain, mgxs_type) - avg_mgxs = mgxs.get_subdomain_avg_xs() - subdomain_avg_library.all_mgxs[domain.id][mgxs_type] = avg_mgxs + if mgxs.domain_type == 'distribcell': + avg_mgxs = mgxs.get_subdomain_avg_xs() + subdomain_avg_library.all_mgxs[domain.id][mgxs_type] = avg_mgxs return subdomain_avg_library From cc571091a3709452d3f4ae9dafac5554c4a5df73 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sun, 31 Jan 2016 17:47:21 -0500 Subject: [PATCH 237/650] Hotfix for OpenMC-OpenCG lattice conversions with y index reversal for OpenCG --- openmc/opencg_compatible.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openmc/opencg_compatible.py b/openmc/opencg_compatible.py index 0bda48c160..a5573d9eb4 100644 --- a/openmc/opencg_compatible.py +++ b/openmc/opencg_compatible.py @@ -922,6 +922,9 @@ def get_opencg_lattice(openmc_lattice): universe_id = universes[z][y][x].id universe_array[z][y][x] = unique_universes[universe_id] + # Reverse y-dimension in array to match ordering in OpenCG + universe_array = universe_array[:, ::-1, :] + opencg_lattice = opencg.Lattice(lattice_id, name) opencg_lattice.dimension = dimension opencg_lattice.width = pitch From 01b799afdff525a1bf203529b240e3bff8399e91 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 1 Feb 2016 12:27:51 -0600 Subject: [PATCH 238/650] Build C source separately as library --- CMakeLists.txt | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aebeafb9c0..528a22e81d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -107,7 +107,7 @@ if(CMAKE_Fortran_COMPILER_ID STREQUAL GNU) message(FATAL_ERROR "gfortran version must be 4.6 or higher") endif() - # GNU Fortran compiler options + # GCC compiler options list(APPEND f90flags -cpp -std=f2008 -fbacktrace) list(APPEND cflags -cpp -std=c99) if(debug) @@ -142,7 +142,7 @@ if(CMAKE_Fortran_COMPILER_ID STREQUAL GNU) endif() elseif(CMAKE_Fortran_COMPILER_ID STREQUAL Intel) - # Intel Fortran compiler options + # Intel compiler options list(APPEND f90flags -fpp -std08 -assume byterecl -traceback) list(APPEND cflags -std=c99) if(debug) @@ -257,12 +257,18 @@ add_subdirectory(src/xml/fox) # which point to directories outside the build tree to the install RPATH set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) +#=============================================================================== +# Build faddeeva library +#=============================================================================== + +add_library(faddeeva STATIC src/Faddeeva.c) + #=============================================================================== # Build OpenMC executable #=============================================================================== set(program "openmc") -file(GLOB source src/Faddeeva.c src/*.F90 src/xml/openmc_fox.F90) +file(GLOB source src/*.F90 src/xml/openmc_fox.F90) add_executable(${program} ${source}) # target_include_directories was added in CMake 2.8.11 and is the recommended @@ -274,19 +280,18 @@ else() endif() # target_compile_options was added in CMake 2.8.12 and is the recommended way to -# set compile flag, but it doesn't seem to work with both Fortran and C. In -# theory the commented code below might work but I couldn't get it running. -# Maybe it requires a newer version of CMake? -#target_compile_options(${program} PUBLIC -# $<$:${f90flags}> -# $<$:${cflags}>) -# This is not the recommended method, but it is a functional method. Convert -# the semicolon-delineated lists into space-delineated ones then set them as the -# compiler flags. +# set compile flags. Note that this sets the COMPILE_OPTIONS property (also +# available only in 2.8.12+) rather than the COMPILE_FLAGS property, which is +# deprecated. The former can handle lists whereas the latter cannot. +if (CMAKE_VERSION VERSION_LESS 2.8.12) string(REPLACE ";" " " f90flags "${f90flags}") -string(REPLACE ";" " " cflags "${cflags}") -set(CMAKE_C_FLAGS "${cflags}") -set(CMAKE_Fortran_FLAGS "${f90flags}") + string(REPLACE ";" " " cflags "${cflags}") + set_property(TARGET ${program} PROPERTY COMPILE_FLAGS "${f90flags}") + set_property(TARGET faddeeva PROPERTY COMPILE_FLAGS "${cflags}") +else() + target_compile_options(${program} PUBLIC ${f90flags}) + target_compile_options(faddeeva PRIVATE ${cflags}) +endif() # Add HDF5 library directories to link line with -L foreach(LIBDIR ${HDF5_LIBRARY_DIRS}) @@ -295,7 +300,7 @@ endforeach() # target_link_libraries treats any arguments starting with - but not -l as # linker flags. Thus, we can pass both linker flags and libraries together. -target_link_libraries(${program} ${ldflags} ${HDF5_LIBRARIES} fox_dom) +target_link_libraries(${program} ${ldflags} ${HDF5_LIBRARIES} fox_dom faddeeva) #=============================================================================== # Install executable, scripts, manpage, license From 55f5fa18a3b0d3e3a94eaa2df3d423dfbea427c9 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 1 Feb 2016 12:58:15 -0600 Subject: [PATCH 239/650] Fix CSS override for RTD documentation builds --- docs/source/conf.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 65db07b25e..6ca551a431 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -154,7 +154,8 @@ html_title = "OpenMC Documentation" # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] -html_context = {'css_files': ['_static/theme_overrides.css']} +def setup(app): + app.add_stylesheet('theme_overrides.css') # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. From ec05e52089cdc8506db4d09cfd253381db2959c1 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Mon, 1 Feb 2016 15:56:40 -0500 Subject: [PATCH 240/650] Fixed issue in Pandas DataFrame compatibility with OpenCG lattice indexing --- openmc/filter.py | 4 +++- openmc/opencg_compatible.py | 3 --- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/openmc/filter.py b/openmc/filter.py index a0c777fa07..54814a6b6f 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -673,9 +673,11 @@ class Filter(object): # Assign entry to Lattice Multi-index column else: + # Reverse y index per lattice ordering in OpenCG level_dict[lat_id_key][offset] = coords._lattice._id level_dict[lat_x_key][offset] = coords._lat_x - level_dict[lat_y_key][offset] = coords._lat_y + level_dict[lat_y_key][offset] = \ + coords._lattice.dimension[1] - coords._lat_y - 1 level_dict[lat_z_key][offset] = coords._lat_z # Move to next node in LocalCoords linked list diff --git a/openmc/opencg_compatible.py b/openmc/opencg_compatible.py index a5573d9eb4..0bda48c160 100644 --- a/openmc/opencg_compatible.py +++ b/openmc/opencg_compatible.py @@ -922,9 +922,6 @@ def get_opencg_lattice(openmc_lattice): universe_id = universes[z][y][x].id universe_array[z][y][x] = unique_universes[universe_id] - # Reverse y-dimension in array to match ordering in OpenCG - universe_array = universe_array[:, ::-1, :] - opencg_lattice = opencg.Lattice(lattice_id, name) opencg_lattice.dimension = dimension opencg_lattice.width = pitch From e413bf30e5f6437ac3a48f78ede9ed2a834a8050 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Mon, 1 Feb 2016 19:24:43 -0500 Subject: [PATCH 241/650] Fixed issue with discrepancy in indexing of y-dimension in lattice universes and offsets --- openmc/summary.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/summary.py b/openmc/summary.py index 3e10f8edbd..d22e367c95 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -369,7 +369,7 @@ class Summary(object): # Set the distribcell offsets for the lattice if offsets is not None: - lattice.offsets = offsets + lattice.offsets = offsets[:, ::-1, :] # Add the Lattice to the global dictionary of all Lattices self.lattices[index] = lattice From a62dc7868f26ffcbcc8fc78129ec760257c6bc15 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Tue, 2 Feb 2016 15:53:27 -0500 Subject: [PATCH 242/650] Added test for distribcell tallies in an asymmetric lattice --- tests/test_asymmetric_lattice/inputs_true.dat | 1 + .../test_asymmetric_lattice/results_true.dat | 1 + .../test_asymmetric_lattice.py | 127 ++++++++++++++++++ 3 files changed, 129 insertions(+) create mode 100644 tests/test_asymmetric_lattice/inputs_true.dat create mode 100644 tests/test_asymmetric_lattice/results_true.dat create mode 100644 tests/test_asymmetric_lattice/test_asymmetric_lattice.py diff --git a/tests/test_asymmetric_lattice/inputs_true.dat b/tests/test_asymmetric_lattice/inputs_true.dat new file mode 100644 index 0000000000..70073c6bd2 --- /dev/null +++ b/tests/test_asymmetric_lattice/inputs_true.dat @@ -0,0 +1 @@ +dd39c0ae6327e6e74cb077d56e37c112611b95c4c10d96203e672b3e7f928211cc991ec7ebbf9eeadabd968dcdcb651b250233169b62d43ef6994ab9a46cb34a \ No newline at end of file diff --git a/tests/test_asymmetric_lattice/results_true.dat b/tests/test_asymmetric_lattice/results_true.dat new file mode 100644 index 0000000000..d809e6409d --- /dev/null +++ b/tests/test_asymmetric_lattice/results_true.dat @@ -0,0 +1 @@ +7e75ad5b7979e65e52ce564bfbd8fac819013ef8ba35fe184569b452dd9a1ba98d267b6e33d357fdd1c943f201125ff8a4f8601147b87036525870528063dcae \ No newline at end of file diff --git a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py new file mode 100644 index 0000000000..7b83a590ef --- /dev/null +++ b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python + +import os +import sys +import glob +import hashlib +sys.path.insert(0, os.pardir) +from testing_harness import PyAPITestHarness +import openmc +from openmc.source import Source +from openmc.stats import Box + + +class AsymmetricLatticeTestHarness(PyAPITestHarness): + + def _build_inputs(self): + """Build an axis-asymmetric lattice of fuel assemblies""" + + # Build full core geometry from underlying input set + self._input_set.build_default_materials_and_geometry() + + # Extract all universes from the full core geometry + geometry = self._input_set.geometry.geometry + all_univs = geometry.get_all_universes() + print(all_univs.keys()) + + # Extract universes encapsulating fuel and water assemblies + water = all_univs[7] + fuel = all_univs[8] + + # Construct a 3x3 lattice of fuel assemblies + core_lat = openmc.RectLattice(name='3x3 Core Lattice', lattice_id=202) + core_lat.dimension = (3, 3) + core_lat.lower_left = (-32.13, -32.13) + core_lat.pitch = (21.42, 21.42) + core_lat.universes = [[fuel, water, water], + [fuel, fuel, fuel], + [water, water, water]] + + # Create bounding surfaces + min_x = openmc.XPlane(x0=-32.13, boundary_type='reflective') + max_x = openmc.XPlane(x0=+32.13, boundary_type='reflective') + min_y = openmc.YPlane(y0=-32.13, boundary_type='reflective') + max_y = openmc.YPlane(y0=+32.13, boundary_type='reflective') + min_z = openmc.ZPlane(z0=0, boundary_type='reflective') + max_z = openmc.ZPlane(z0=+32.13, boundary_type='reflective') + + # Define root universe + root_univ = openmc.Universe(universe_id=0, name='root universe') + root_cell = openmc.Cell(cell_id=1) + root_cell.region = +min_x & -max_x & +min_y & -max_y & +min_z & -max_z + root_cell.fill = core_lat + root_univ.add_cell(root_cell) + + # Over-ride geometry in the input set with this 3x3 lattice + self._input_set.geometry.geometry.root_universe = root_univ + + # Initialize a "distribcell" filter for the cold fuel pin cell + distrib_filter = openmc.Filter(type='distribcell', bins=[27]) + + # Initialize the tallies + tally = openmc.Tally(name='distribcell tally', tally_id=27) + tally.add_filter(distrib_filter) + tally.add_score('nu-fission') + + # Initialize the tallies file + tallies_file = openmc.TalliesFile() + tallies_file.add_tally(tally) + + # Assign the tallies file to the input set + self._input_set.tallies = tallies_file + + # Specify summary output and correct source sampling box + self._input_set.build_default_settings() + self._input_set.settings.output = {'summary': True} + self._input_set.settings.source = Source(space=Box( + [0, 0, 0], [32.13, 32.13, 32.13])) + + # Write input XML files + self._input_set.export() + + def _get_results(self, hash_output=True): + """Digest info in statepoint and summary and return as a string.""" + + # Read the statepoint file + statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] + sp = openmc.StatePoint(statepoint) + + # Read the summary file + summary = glob.glob(os.path.join(os.getcwd(), 'summary.h5'))[0] + su = openmc.Summary(summary) + sp.link_with_summary(su) + + # Extract the tally of interest + tally = sp.get_tally(name='distribcell tally') + + # Create a string of all mean, std. dev. values for both tallies + outstr = '' + outstr += ', '.join(map(str, tally.mean.flatten())) + '\n' + outstr += ', '.join(map(str, tally.std_dev.flatten())) + '\n' + + # Extract fuel assembly lattices from the summary + all_cells = su.openmc_geometry.get_all_cells() + fuel = all_cells[80].fill + core = all_cells[1].fill + + # Append a string of lattice distribcell offsets to the string + outstr += ', '.join(map(str, fuel.offsets.flatten())) + '\n' + outstr += ', '.join(map(str, core.offsets.flatten())) + '\n' + + # Hash the results if necessary + if hash_output: + sha512 = hashlib.sha512() + sha512.update(outstr.encode('utf-8')) + outstr = sha512.hexdigest() + + return outstr + + def _cleanup(self): + super(AsymmetricLatticeTestHarness, self)._cleanup() + f = os.path.join(os.getcwd(), 'tallies.xml') + if os.path.exists(f): os.remove(f) + + +if __name__ == '__main__': + harness = AsymmetricLatticeTestHarness('statepoint.10.h5', True) + harness.main() From 63744db9097e6d59ab9c9fdd357d398bcbcbb8ae Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 3 Feb 2016 10:36:16 -0500 Subject: [PATCH 243/650] Fixing bugs, partially there --- src/ace.F90 | 8 +++-- src/distribution_multivariate.F90 | 6 ++-- src/distribution_univariate.F90 | 10 +++--- src/energy_distribution.F90 | 2 +- src/interpolation.F90 | 6 ++-- src/nuclide_header.F90 | 42 +++++++++-------------- src/output.F90 | 2 +- src/physics.F90 | 4 +-- src/physics_common.F90 | 53 ----------------------------- src/physics_mg.F90 | 6 +--- src/sab_header.F90 | 43 ++++++++++++------------ src/spectra.F90 | 56 ++++++++++++++++++++++++++++++- 12 files changed, 113 insertions(+), 125 deletions(-) diff --git a/src/ace.F90 b/src/ace.F90 index a92d8b8c5a..57564f0b91 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -1,6 +1,6 @@ module ace - use ace_header, only: Nuclide, Reaction, SAlphaBeta, XsListing + use ace_header, only: Reaction use constants use distribution_univariate, only: Uniform, Equiprobable, Tabular use endf, only: is_fission, is_disappearance @@ -11,13 +11,15 @@ module ace use global use list_header, only: ListInt use material_header, only: Material + use nuclide_header use output, only: write_message + use sab_header use set_header, only: SetChar use secondary_header, only: AngleEnergy use secondary_correlated, only: CorrelatedAngleEnergy use secondary_kalbach, only: KalbachMann use secondary_uncorrelated, only: UncorrelatedAngleEnergy - use string, only: to_str, to_lower + use simple_string, only: to_str, to_lower implicit none @@ -1472,7 +1474,7 @@ contains !=============================================================================== subroutine generate_nu_fission(nuc) - type(Nuclide), intent(inout) :: nuc + type(Nuclide_CE), intent(inout) :: nuc integer :: i ! index on nuclide energy grid real(8) :: E ! energy diff --git a/src/distribution_multivariate.F90 b/src/distribution_multivariate.F90 index c288c40c19..e7be36db84 100644 --- a/src/distribution_multivariate.F90 +++ b/src/distribution_multivariate.F90 @@ -1,9 +1,9 @@ module distribution_multivariate - use constants, only: ONE, TWO, PI + use constants, only: ONE, TWO, PI use distribution_univariate, only: Distribution - use math, only: rotate_angle - use random_lcg, only: prn + use random_lcg, only: prn + use spectra, only: rotate_angle implicit none diff --git a/src/distribution_univariate.F90 b/src/distribution_univariate.F90 index f596536d0b..274c6b1155 100644 --- a/src/distribution_univariate.F90 +++ b/src/distribution_univariate.F90 @@ -1,11 +1,11 @@ module distribution_univariate - use constants, only: ZERO, ONE, HALF, HISTOGRAM, LINEAR_LINEAR, & + use constants, only: ZERO, ONE, HALF, HISTOGRAM, LINEAR_LINEAR, & MAX_LINE_LEN, MAX_WORD_LEN - use error, only: fatal_error - use math, only: maxwell_spectrum, watt_spectrum - use random_lcg, only: prn - use string, only: to_lower + use error, only: fatal_error + use random_lcg, only: prn + use spectra, only: maxwell_spectrum, watt_spectrum + use simple_string, only: to_lower use xml_interface implicit none diff --git a/src/energy_distribution.F90 b/src/energy_distribution.F90 index db3dcc4411..7d136ab10e 100644 --- a/src/energy_distribution.F90 +++ b/src/energy_distribution.F90 @@ -3,9 +3,9 @@ module energy_distribution use constants, only: ZERO, ONE, TWO, PI, HISTOGRAM, LINEAR_LINEAR use endf_header, only: Tab1 use interpolation, only: interpolate_tab1 - use math, only: maxwell_spectrum, watt_spectrum use random_lcg, only: prn use search, only: binary_search + use spectra, only: maxwell_spectrum, watt_spectrum !=============================================================================== ! ENERGYDISTRIBUTION (abstract) defines an energy distribution that is a diff --git a/src/interpolation.F90 b/src/interpolation.F90 index 5f87870677..49d3de7fe8 100644 --- a/src/interpolation.F90 +++ b/src/interpolation.F90 @@ -1,9 +1,9 @@ module interpolation use constants - use endf_header, only: Tab1 - use search, only: binary_search - use string, only: to_str + use endf_header, only: Tab1 + use search, only: binary_search + use simple_string, only: to_str implicit none diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index a632f0fc13..72e1a4dc66 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -94,7 +94,7 @@ module nuclide_header integer :: n_precursor ! # of delayed neutron precursors real(8), allocatable :: nu_d_data(:) real(8), allocatable :: nu_d_precursor_data(:) - type(DistEnergy), pointer :: nu_d_edist(:) => null() + type(AngleEnergyContainer), allocatable :: nu_d_edist(:) ! Unresolved resonance data logical :: urr_present @@ -308,16 +308,7 @@ module nuclide_header integer :: i ! Loop counter - if (associated(this % nu_d_edist)) then - do i = 1, size(this % nu_d_edist) - call this % nu_d_edist(i) % clear() - end do - deallocate(this % nu_d_edist) - end if - - if (associated(this % urr_data)) then - deallocate(this % urr_data) - end if + if (associated(this % urr_data)) deallocate(this % urr_data) if (allocated(this % reactions)) then do i = 1, size(this % reactions) @@ -389,7 +380,6 @@ module nuclide_header subroutine nuclide_ce_print(this, unit) class(Nuclide_CE), intent(in) :: this - type(Nuclide), intent(in) :: nuc integer, intent(in), optional :: unit integer :: i ! loop index over nuclides @@ -410,36 +400,36 @@ module nuclide_header size_xs = 0 ! Basic nuclide information - write(unit_,*) 'Nuclide ' // trim(nuc % name) - write(unit_,*) ' zaid = ' // trim(to_str(nuc % zaid)) - write(unit_,*) ' awr = ' // trim(to_str(nuc % awr)) - write(unit_,*) ' kT = ' // trim(to_str(nuc % kT)) - write(unit_,*) ' # of grid points = ' // trim(to_str(nuc % n_grid)) - write(unit_,*) ' Fissionable = ', nuc % fissionable - write(unit_,*) ' # of fission reactions = ' // trim(to_str(nuc % n_fission)) - write(unit_,*) ' # of reactions = ' // trim(to_str(nuc % n_reaction)) + write(unit_,*) 'Nuclide ' // trim(this % name) + write(unit_,*) ' zaid = ' // trim(to_str(this % zaid)) + write(unit_,*) ' awr = ' // trim(to_str(this % awr)) + write(unit_,*) ' kT = ' // trim(to_str(this % kT)) + write(unit_,*) ' # of grid points = ' // trim(to_str(this % n_grid)) + write(unit_,*) ' Fissionable = ', this % fissionable + write(unit_,*) ' # of fission reactions = ' // trim(to_str(this % n_fission)) + write(unit_,*) ' # of reactions = ' // trim(to_str(this % n_reaction)) ! Information on each reaction write(unit_,*) ' Reaction Q-value COM IE' - do i = 1, nuc % n_reaction - associate (rxn => nuc % reactions(i)) + do i = 1, this % n_reaction + associate (rxn => this % reactions(i)) write(unit_,'(3X,A11,1X,F8.3,3X,L1,3X,I6)') & reaction_name(rxn % MT), rxn % Q_value, rxn % scatter_in_cm, & rxn % threshold ! Accumulate data size - size_xs = size_xs + (nuc % n_grid - rxn%threshold + 1) * 8 + size_xs = size_xs + (this % n_grid - rxn%threshold + 1) * 8 end associate end do ! Add memory required for summary reactions (total, absorption, fission, ! nu-fission) - size_xs = 8 * nuc % n_grid * 4 + size_xs = 8 * this % n_grid * 4 ! Write information about URR probability tables size_urr = 0 - if (nuc % urr_present) then - urr => nuc % urr_data + if (this % urr_present) then + urr => this % urr_data write(unit_,*) ' Unresolved resonance probability table:' write(unit_,*) ' # of energies = ' // trim(to_str(urr % n_energy)) write(unit_,*) ' # of probabilities = ' // trim(to_str(urr % n_prob)) diff --git a/src/output.F90 b/src/output.F90 index 826bff10cb..5379555ff0 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -2,7 +2,7 @@ module output use, intrinsic :: ISO_FORTRAN_ENV - use ace_header, only: Nuclide, Reaction, UrrData + use ace_header, only: Reaction, UrrData use constants use endf, only: reaction_name use error, only: fatal_error, warning diff --git a/src/physics.F90 b/src/physics.F90 index 9afd6146e4..2212269209 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -1,6 +1,6 @@ module physics - use ace_header, only: Reaction, DistEnergy + use ace_header, only: Reaction use constants use cross_section, only: elastic_xs_0K use endf, only: reaction_name @@ -1343,7 +1343,7 @@ contains p % wgt = yield * p % wgt else do i = 1, rxn % multiplicity - 1 - call p % create_secondary(p % coord(1) % uvw, NEUTRON) + call p % create_secondary(p % coord(1) % uvw, NEUTRON, run_CE=.True.) end do end if diff --git a/src/physics_common.F90 b/src/physics_common.F90 index 9fa45d324b..98d240c077 100644 --- a/src/physics_common.F90 +++ b/src/physics_common.F90 @@ -30,57 +30,4 @@ contains end subroutine russian_roulette -!=============================================================================== -! ROTATE_ANGLE rotates direction cosines through a polar angle whose cosine is -! mu and through an azimuthal angle sampled uniformly. Note that this is done -! with direct sampling rather than rejection as is done in MCNP and SERPENT. -!=============================================================================== - - function rotate_angle(uvw0, mu, phi) result(uvw) - real(8), intent(in) :: uvw0(3) ! directional cosine - real(8), intent(in) :: mu ! cosine of angle in lab or CM - real(8), optional :: phi ! azimuthal angle - real(8) :: uvw(3) ! rotated directional cosine - - real(8) :: phi_ ! azimuthal angle - real(8) :: sinphi ! sine of azimuthal angle - real(8) :: cosphi ! cosine of azimuthal angle - real(8) :: a ! sqrt(1 - mu^2) - real(8) :: b ! sqrt(1 - w^2) - real(8) :: u0 ! original cosine in x direction - real(8) :: v0 ! original cosine in y direction - real(8) :: w0 ! original cosine in z direction - - ! Copy original directional cosines - u0 = uvw0(1) - v0 = uvw0(2) - w0 = uvw0(3) - - ! Sample azimuthal angle in [0,2pi) if none provided - if (present(phi)) then - phi_ = phi - else - phi_ = TWO * PI * prn() - end if - - ! Precompute factors to save flops - sinphi = sin(phi_) - cosphi = cos(phi_) - a = sqrt(max(ZERO, ONE - mu*mu)) - b = sqrt(max(ZERO, ONE - w0*w0)) - - ! Need to treat special case where sqrt(1 - w**2) is close to zero by - ! expanding about the v component rather than the w component - if (b > 1e-10) then - uvw(1) = mu*u0 + a*(u0*w0*cosphi - v0*sinphi)/b - uvw(2) = mu*v0 + a*(v0*w0*cosphi + u0*sinphi)/b - uvw(3) = mu*w0 - a*b*cosphi - else - b = sqrt(ONE - v0*v0) - uvw(1) = mu*u0 + a*(u0*v0*cosphi + w0*sinphi)/b - uvw(2) = mu*v0 - a*b*cosphi - uvw(3) = mu*w0 + a*(v0*w0*cosphi - u0*sinphi)/b - end if - - end function rotate_angle end module physics_common diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index 5d6167d788..a5272e1f47 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -16,6 +16,7 @@ module physics_mg use random_lcg, only: prn use scattdata_header use simple_string, only: to_str + use spectra, only: rotate_angle implicit none @@ -71,7 +72,6 @@ contains ! absorption (including fission) if (mat % fissionable) then - call sample_fission(i_nuclide, i_reaction) if (run_mode == MODE_EIGENVALUE) then call create_fission_sites(p, fission_bank, n_bank) elseif (run_mode == MODE_FIXEDSOURCE) then @@ -234,10 +234,6 @@ contains ! Bank source neutrons if (nu == 0 .or. size_bank == size(bank_array)) return - ! Initialize counter of delayed neutrons encountered for each delayed group - ! to zero. - nu_d(:) = 0 - p % fission = .true. ! Fission neutrons will be banked do i = int(size_bank,4) + 1, int(min(size_bank + nu, int(size(bank_array),8)),4) ! Bank source neutrons by copying particle data diff --git a/src/sab_header.F90 b/src/sab_header.F90 index b303fee688..a2d70d4f21 100644 --- a/src/sab_header.F90 +++ b/src/sab_header.F90 @@ -66,19 +66,18 @@ module sab_header contains - !=============================================================================== ! PRINT_SAB_TABLE displays information about a S(a,b) table containing data ! describing thermal scattering from bound materials such as hydrogen in water. !=============================================================================== subroutine print_sab_table(this, unit) - type(SAlphaBeta), intent(in) :: sab + class(SAlphaBeta), intent(in) :: this integer, intent(in), optional :: unit integer :: size_sab ! memory used by S(a,b) table integer :: unit_ ! unit to write to - integer :: i ! Loop counter for parsing through sab % zaid + integer :: i ! Loop counter for parsing through this % zaid integer :: char_count ! Counter for the number of characters on a line ! set default unit for writing information @@ -89,11 +88,11 @@ module sab_header end if ! Basic S(a,b) table information - write(unit_,*) 'S(a,b) Table ' // trim(sab % name) + write(unit_,*) 'S(a,b) Table ' // trim(this % name) write(unit_,'(A)',advance="no") ' zaids = ' ! Initialize the counter based on the above string char_count = 11 - do i = 1, sab % n_zaid + do i = 1, this % n_zaid ! Deal with a line thats too long if (char_count >= 73) then ! 73 = 80 - (5 ZAID chars + 1 space + 1 comma) ! End the line @@ -103,44 +102,44 @@ module sab_header ! reset the counter to 11 char_count = 11 end if - if (i < sab % n_zaid) then + if (i < this % n_zaid) then ! Include a comma - write(unit_,'(A)',advance="no") trim(to_str(sab % zaid(i))) // ", " - char_count = char_count + len(trim(to_str(sab % zaid(i)))) + 2 + write(unit_,'(A)',advance="no") trim(to_str(this % zaid(i))) // ", " + char_count = char_count + len(trim(to_str(this % zaid(i)))) + 2 else ! Don't include a comma, since we are all done - write(unit_,'(A)',advance="no") trim(to_str(sab % zaid(i))) + write(unit_,'(A)',advance="no") trim(to_str(this % zaid(i))) end if end do write(unit_,*) "" ! Move to next line - write(unit_,*) ' awr = ' // trim(to_str(sab % awr)) - write(unit_,*) ' kT = ' // trim(to_str(sab % kT)) + write(unit_,*) ' awr = ' // trim(to_str(this % awr)) + write(unit_,*) ' kT = ' // trim(to_str(this % kT)) ! Inelastic data write(unit_,*) ' # of Incoming Energies (Inelastic) = ' // & - trim(to_str(sab % n_inelastic_e_in)) + trim(to_str(this % n_inelastic_e_in)) write(unit_,*) ' # of Outgoing Energies (Inelastic) = ' // & - trim(to_str(sab % n_inelastic_e_out)) + trim(to_str(this % n_inelastic_e_out)) write(unit_,*) ' # of Outgoing Angles (Inelastic) = ' // & - trim(to_str(sab % n_inelastic_mu)) + trim(to_str(this % n_inelastic_mu)) write(unit_,*) ' Threshold for Inelastic = ' // & - trim(to_str(sab % threshold_inelastic)) + trim(to_str(this % threshold_inelastic)) ! Elastic data - if (sab % n_elastic_e_in > 0) then + if (this % n_elastic_e_in > 0) then write(unit_,*) ' # of Incoming Energies (Elastic) = ' // & - trim(to_str(sab % n_elastic_e_in)) + trim(to_str(this % n_elastic_e_in)) write(unit_,*) ' # of Outgoing Angles (Elastic) = ' // & - trim(to_str(sab % n_elastic_mu)) + trim(to_str(this % n_elastic_mu)) write(unit_,*) ' Threshold for Elastic = ' // & - trim(to_str(sab % threshold_elastic)) + trim(to_str(this % threshold_elastic)) end if ! Determine memory used by S(a,b) table and write out - size_sab = 8 * (sab % n_inelastic_e_in * (2 + sab % n_inelastic_e_out * & - (1 + sab % n_inelastic_mu)) + sab % n_elastic_e_in * & - (2 + sab % n_elastic_mu)) + size_sab = 8 * (this % n_inelastic_e_in * (2 + this % n_inelastic_e_out * & + (1 + this % n_inelastic_mu)) + this % n_elastic_e_in * & + (2 + this % n_elastic_mu)) write(unit_,*) ' Memory Used = ' // trim(to_str(size_sab)) // ' bytes' ! Blank line at end diff --git a/src/spectra.F90 b/src/spectra.F90 index acdde78206..7f96bb69e5 100644 --- a/src/spectra.F90 +++ b/src/spectra.F90 @@ -1,6 +1,6 @@ module spectra -use constants, only: ONE, TWO, PI +use constants, only: ZERO, ONE, TWO, PI use random_lcg, only: prn implicit none @@ -55,4 +55,58 @@ contains end function watt_spectrum +!=============================================================================== +! ROTATE_ANGLE rotates direction cosines through a polar angle whose cosine is +! mu and through an azimuthal angle sampled uniformly. Note that this is done +! with direct sampling rather than rejection as is done in MCNP and SERPENT. +!=============================================================================== + + function rotate_angle(uvw0, mu, phi) result(uvw) + real(8), intent(in) :: uvw0(3) ! directional cosine + real(8), intent(in) :: mu ! cosine of angle in lab or CM + real(8), optional :: phi ! azimuthal angle + real(8) :: uvw(3) ! rotated directional cosine + + real(8) :: phi_ ! azimuthal angle + real(8) :: sinphi ! sine of azimuthal angle + real(8) :: cosphi ! cosine of azimuthal angle + real(8) :: a ! sqrt(1 - mu^2) + real(8) :: b ! sqrt(1 - w^2) + real(8) :: u0 ! original cosine in x direction + real(8) :: v0 ! original cosine in y direction + real(8) :: w0 ! original cosine in z direction + + ! Copy original directional cosines + u0 = uvw0(1) + v0 = uvw0(2) + w0 = uvw0(3) + + ! Sample azimuthal angle in [0,2pi) if none provided + if (present(phi)) then + phi_ = phi + else + phi_ = TWO * PI * prn() + end if + + ! Precompute factors to save flops + sinphi = sin(phi_) + cosphi = cos(phi_) + a = sqrt(max(ZERO, ONE - mu*mu)) + b = sqrt(max(ZERO, ONE - w0*w0)) + + ! Need to treat special case where sqrt(1 - w**2) is close to zero by + ! expanding about the v component rather than the w component + if (b > 1e-10) then + uvw(1) = mu*u0 + a*(u0*w0*cosphi - v0*sinphi)/b + uvw(2) = mu*v0 + a*(v0*w0*cosphi + u0*sinphi)/b + uvw(3) = mu*w0 - a*b*cosphi + else + b = sqrt(ONE - v0*v0) + uvw(1) = mu*u0 + a*(u0*v0*cosphi + w0*sinphi)/b + uvw(2) = mu*v0 - a*b*cosphi + uvw(3) = mu*w0 + a*(v0*w0*cosphi - u0*sinphi)/b + end if + + end function rotate_angle + end module spectra \ No newline at end of file From f83d6344ca79ff4aa0a155a74f81ad392b11bc4e Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 3 Feb 2016 10:42:24 -0500 Subject: [PATCH 244/650] Wow. I think I survived that merge... that was brutal --- src/constants.F90 | 4 ++-- src/input_xml.F90 | 15 --------------- src/mgxs_data.F90 | 18 +++++++++--------- 3 files changed, 11 insertions(+), 26 deletions(-) diff --git a/src/constants.F90 b/src/constants.F90 index 6d4d2a0d54..0c208e6d34 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -214,8 +214,8 @@ module constants ! MGXS Table Types integer, parameter :: & - ISOTROPIC = 1, & ! Isotropically Weighted Data - ANGLE = 2 ! Data by Angular Bins + MGXS_ISOTROPIC = 1, & ! Isotropically Weighted Data + MGXS_ANGLE = 2 ! Data by Angular Bins ! Fission neutron emission (nu) type integer, parameter :: & diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 81e5896306..fde77f498e 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -428,22 +428,7 @@ contains &// "' does not exist!") end if - ! Read parameters for spatial distribution - if (n < coeffs_reqd) then - call fatal_error("Not enough parameters specified for spatial & - &distribution of external source.") - elseif (n > coeffs_reqd) then - call fatal_error("Too many parameters specified for spatial & - &distribution of external source.") - elseif (n > 0) then - allocate(external_source % params_space(n)) - call get_node_array(node_dist, "parameters", & - external_source % params_space) - end if else - call fatal_error("No spatial distribution specified for external & - &source.") - end if ! Spatial distribution for external source if (check_for_node(node_source, "space")) then diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 8109087363..f48238afa9 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -106,22 +106,22 @@ contains call get_node_value(node_xsdata, "representation", temp_str) temp_str = trim(to_lower(temp_str)) if (temp_str == 'isotropic' .or. temp_str == 'iso') then - representation = ISOTROPIC + representation = MGXS_ISOTROPIC else if (temp_str == 'angle') then - representation = ANGLE + representation = MGXS_ANGLE else call fatal_error("Invalid Data Representation!") end if else ! Default to isotropic representation - representation = ISOTROPIC + representation = MGXS_ISOTROPIC end if ! Now allocate accordingly select case(representation) - case(ISOTROPIC) + case(MGXS_ISOTROPIC) allocate(Nuclide_Iso :: nuclides_MG(i_nuclide) % obj) - case(ANGLE) + case(MGXS_ANGLE) allocate(Nuclide_Angle :: nuclides_MG(i_nuclide) % obj) end select @@ -677,17 +677,17 @@ contains legendre_mu_points = nuclides_MG(mat % nuclide(1)) % obj % legendre_mu_points select type(nuc => nuclides_MG(mat % nuclide(1)) % obj) type is (Nuclide_Iso) - representation = ISOTROPIC + representation = MGXS_ISOTROPIC type is (Nuclide_Angle) - representation = ANGLE + representation = MGXS_ANGLE end select scatt_type = nuclides_MG(mat % nuclide(1)) % obj % scatt_type ! Now allocate accordingly select case(representation) - case(ISOTROPIC) + case(MGXS_ISOTROPIC) allocate(MacroXS_Iso :: macro_xs(i_mat) % obj) - case(ANGLE) + case(MGXS_ANGLE) allocate(MacroXS_Angle :: macro_xs(i_mat) % obj) end select From dd18376d3f8de550ff2c0e74ea8fd7d8ee301cf9 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Wed, 3 Feb 2016 11:18:50 -0500 Subject: [PATCH 245/650] Made source only fissionable for asymmetric lattice test --- openmc/tallies.py | 2 +- tests/test_asymmetric_lattice/inputs_true.dat | 2 +- tests/test_asymmetric_lattice/results_true.dat | 2 +- .../test_asymmetric_lattice.py | 12 +++++++----- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index 3c4d99c730..3294a1d062 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -2748,7 +2748,7 @@ class Tally(object): bin_indices.append(bin_index) num_bins += 1 - find_filter.bins = set(find_filter.bins[bin_indices]) + find_filter.bins = np.unique(find_filter.bins[bin_indices]) find_filter.num_bins = num_bins # Update the new tally's filter strides diff --git a/tests/test_asymmetric_lattice/inputs_true.dat b/tests/test_asymmetric_lattice/inputs_true.dat index 70073c6bd2..552c8d039e 100644 --- a/tests/test_asymmetric_lattice/inputs_true.dat +++ b/tests/test_asymmetric_lattice/inputs_true.dat @@ -1 +1 @@ -dd39c0ae6327e6e74cb077d56e37c112611b95c4c10d96203e672b3e7f928211cc991ec7ebbf9eeadabd968dcdcb651b250233169b62d43ef6994ab9a46cb34a \ No newline at end of file +fe07eb28fd0dbb56edaecd510f5e8e4db7271e5c9aecf3d880cce92b69872a0aacf825b8e88cd2e9b1ff709f578b269b1835f53cf2561a390062e1e7e03b5276 \ No newline at end of file diff --git a/tests/test_asymmetric_lattice/results_true.dat b/tests/test_asymmetric_lattice/results_true.dat index d809e6409d..0cf2315ea4 100644 --- a/tests/test_asymmetric_lattice/results_true.dat +++ b/tests/test_asymmetric_lattice/results_true.dat @@ -1 +1 @@ -7e75ad5b7979e65e52ce564bfbd8fac819013ef8ba35fe184569b452dd9a1ba98d267b6e33d357fdd1c943f201125ff8a4f8601147b87036525870528063dcae \ No newline at end of file +cea61172ecad5554ef86f52d6adad6ad5e21931cf3d67feb37b8bf9d75e618786f638685e458051d4a39afe1a924fd651cf6674a88cf1f1842fd69cd851e1f17 \ No newline at end of file diff --git a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py index 7b83a590ef..3b9e2029b2 100644 --- a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py +++ b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py @@ -22,7 +22,6 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): # Extract all universes from the full core geometry geometry = self._input_set.geometry.geometry all_univs = geometry.get_all_universes() - print(all_univs.keys()) # Extract universes encapsulating fuel and water assemblies water = all_univs[7] @@ -55,7 +54,7 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): # Over-ride geometry in the input set with this 3x3 lattice self._input_set.geometry.geometry.root_universe = root_univ - # Initialize a "distribcell" filter for the cold fuel pin cell + # Initialize a "distribcell" filter for the fuel pin cell distrib_filter = openmc.Filter(type='distribcell', bins=[27]) # Initialize the tallies @@ -70,11 +69,14 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): # Assign the tallies file to the input set self._input_set.tallies = tallies_file - # Specify summary output and correct source sampling box + self._input_set.build_default_settings() + + # Specify summary output and correct source sampling box + source = Source(space=Box([-32, -32, 0], [32, 32, 32])) + source.only_fissionable = True + self._input_set.settings.source = source self._input_set.settings.output = {'summary': True} - self._input_set.settings.source = Source(space=Box( - [0, 0, 0], [32.13, 32.13, 32.13])) # Write input XML files self._input_set.export() From 1aa80bbac86be7f1e13072e82caaec836a71aa89 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 3 Feb 2016 13:00:55 -0500 Subject: [PATCH 246/650] I think I fixed the failing tests. Travis, do your thing --- openmc/settings.py | 2 ++ tests/input_set.py | 3 ++- tests/test_mg_basic/inputs_true.dat | 2 +- tests/test_mg_max_order/inputs_true.dat | 2 +- tests/test_mg_max_order/test_mg_max_order.py | 8 ++++---- tests/test_mg_nuclide/inputs_true.dat | 2 +- tests/test_mg_nuclide/test_mg_nuclide.py | 2 +- tests/test_mg_tallies/inputs_true.dat | 2 +- tests/testing_harness.py | 2 +- 9 files changed, 14 insertions(+), 11 deletions(-) diff --git a/openmc/settings.py b/openmc/settings.py index 2e4a3f3ce8..2777e8cc14 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -1063,6 +1063,8 @@ class SettingsFile(object): self._create_confidence_intervals() self._create_cross_sections_subelement() self._create_energy_grid_subelement() + self._create_energy_mode_subelement() + self._create_max_order_subelement() self._create_ptables_subelement() self._create_run_cmfd_subelement() self._create_seed_subelement() diff --git a/tests/input_set.py b/tests/input_set.py index 956fa81ce1..daff38ba1e 100644 --- a/tests/input_set.py +++ b/tests/input_set.py @@ -641,7 +641,8 @@ class MGInputSet(InputSet): self.settings.batches = 10 self.settings.inactive = 5 self.settings.particles = 100 - self.settings.set_source_space('box', (0.0, 0.0, 0.0, 10.0, 10.0, 2.0)) + self.settings.source = Source(space=Box([0.0, 0.0, 0.0], + [10.0, 10.0, 2.0])) self.settings.energy_mode = "multi-group" self.settings.cross_sections = "../1d_mgxs.xml" diff --git a/tests/test_mg_basic/inputs_true.dat b/tests/test_mg_basic/inputs_true.dat index 549172b1a9..fdbdb1c968 100644 --- a/tests/test_mg_basic/inputs_true.dat +++ b/tests/test_mg_basic/inputs_true.dat @@ -1 +1 @@ -be47096ff6382e07c58c67870eb1c77402c961ee8cb9a4671b52627f6432fe282403e70f5825c90764758fcabe5a480653a961e24d7a0349929283848e79667d \ No newline at end of file +04b4a5099f0097bbe02983c67dea691d0d0d4ece7fb7c264b9b2c29955baa9e870b6fa999480da08ead1e5a0c078ae33ce1b0a5c8594ad465aedf9bf3933e104 \ No newline at end of file diff --git a/tests/test_mg_max_order/inputs_true.dat b/tests/test_mg_max_order/inputs_true.dat index 3529d50921..1ad336e195 100644 --- a/tests/test_mg_max_order/inputs_true.dat +++ b/tests/test_mg_max_order/inputs_true.dat @@ -1 +1 @@ -7bd8b00b5aaad3913e0022269cf6ef92dfd0051bd79fb136838ea5a65d322d9711b454e62ef03dcf2b9dd75e31a4febcc633f968d7d07dcb6da2e0d36daf45db \ No newline at end of file +abe20c626d613e73ccb1a3f8468ad1b9aecca528afa9e8131a411d754eb86b8ab64a6fb1fdc9c0b8b8158ff7c82f548de5912041bf035aa5a2d4532cfe0c9510 \ No newline at end of file diff --git a/tests/test_mg_max_order/test_mg_max_order.py b/tests/test_mg_max_order/test_mg_max_order.py index 423f068f71..2f5ee4e4e6 100644 --- a/tests/test_mg_max_order/test_mg_max_order.py +++ b/tests/test_mg_max_order/test_mg_max_order.py @@ -70,16 +70,16 @@ class MGNuclideInputSet(MGInputSet): self.geometry.geometry = geometry -class MGNuclideTestHarness(PyAPITestHarness): +class MGMaxOrderTestHarness(PyAPITestHarness): def __init__(self, statepoint_name, tallies_present, mg=False): - TestHarness.__init__(self, statepoint_name, tallies_present) + PyAPITestHarness.__init__(self, statepoint_name, tallies_present) self._input_set = MGNuclideInputSet() def _build_inputs(self): - super(MGNuclideTestHarness, self)._build_inputs() + super(MGMaxOrderTestHarness, self)._build_inputs() # Set P1 scattering self._input_set.settings.max_order = 1 if __name__ == '__main__': - harness = MGNuclideTestHarness('statepoint.10.*', False, mg=True) + harness = MGMaxOrderTestHarness('statepoint.10.*', False, mg=True) harness.main() diff --git a/tests/test_mg_nuclide/inputs_true.dat b/tests/test_mg_nuclide/inputs_true.dat index ea61b92221..eb643bbaf4 100644 --- a/tests/test_mg_nuclide/inputs_true.dat +++ b/tests/test_mg_nuclide/inputs_true.dat @@ -1 +1 @@ -f3d614294177f34186bf0d439330d144438ac6a2402af9b5433efb7bf6a311043140c487c86f4d3cae9d51742f5042823d224c9da6365da6c8972b44edb7fb71 \ No newline at end of file +c9f9e7211bfb2af58130bedfd64592d093b7bfa424953eba433ecf08940595a96b8de7a892f12d1ab465cebd8e5dd784114c1b1299b534ed329df92752c9ed1f \ No newline at end of file diff --git a/tests/test_mg_nuclide/test_mg_nuclide.py b/tests/test_mg_nuclide/test_mg_nuclide.py index 736473bd9f..deb784bad9 100644 --- a/tests/test_mg_nuclide/test_mg_nuclide.py +++ b/tests/test_mg_nuclide/test_mg_nuclide.py @@ -71,7 +71,7 @@ class MGNuclideInputSet(MGInputSet): class MGNuclideTestHarness(PyAPITestHarness): def __init__(self, statepoint_name, tallies_present, mg=False): - TestHarness.__init__(self, statepoint_name, tallies_present) + PyAPITestHarness.__init__(self, statepoint_name, tallies_present) self._input_set = MGNuclideInputSet() def _build_inputs(self): diff --git a/tests/test_mg_tallies/inputs_true.dat b/tests/test_mg_tallies/inputs_true.dat index 063b36923d..304d2e8880 100644 --- a/tests/test_mg_tallies/inputs_true.dat +++ b/tests/test_mg_tallies/inputs_true.dat @@ -1 +1 @@ -dcde495bd5d0ace409154be3529ae91d454e92f7060e38f00bc0880350d53c889b87edcfd481e6c8bcec2450bdf780e6fdc52240978eb1c67a6ef290ad85442d \ No newline at end of file +ca8490e0e4549fed727ddc75b6d92cfe5162e11b905218a0afaa3ce2ee0763e2ff38074de27aaa678818624f49c5823650475dfa8f66f502a98fc03145399c0d \ No newline at end of file diff --git a/tests/testing_harness.py b/tests/testing_harness.py index 78e6e1076d..7d6dbc914f 100644 --- a/tests/testing_harness.py +++ b/tests/testing_harness.py @@ -244,7 +244,7 @@ class ParticleRestartTestHarness(TestHarness): class PyAPITestHarness(TestHarness): def __init__(self, statepoint_name, tallies_present=False, mg=False): - super(PyAPITestHarness, self).__init__(statepoint_name, tallies_present) + super(PyAPITestHarness, self).__init__(statepoint_name, tallies_present) self.parser.add_option('--build-inputs', dest='build_only', action='store_true', default=False) if mg: From 89910d71fd75dcd7013837df7369752fbfef47f1 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 3 Feb 2016 13:20:01 -0500 Subject: [PATCH 247/650] Removed need for simple string, merged back in with string --- src/ace.F90 | 2 +- src/cmfd_data.F90 | 30 ++-- src/cmfd_execute.F90 | 22 +-- src/cmfd_input.F90 | 6 +- src/distribution_univariate.F90 | 10 +- src/eigenvalue.F90 | 16 +- src/endf.F90 | 2 +- src/geometry.F90 | 2 +- src/initialize.F90 | 49 +++-- src/input_xml.F90 | 4 +- src/interpolation.F90 | 6 +- src/mgxs_data.F90 | 10 +- src/nuclide_header.F90 | 3 +- src/output.F90 | 2 +- src/particle_restart_write.F90 | 6 +- src/physics.F90 | 2 +- src/physics_mg.F90 | 2 +- src/plot.F90 | 2 +- src/sab_header.F90 | 2 +- src/simple_string.F90 | 308 -------------------------------- src/simulation.F90 | 2 +- src/source.F90 | 2 +- src/state_point.F90 | 3 +- src/string.F90 | 305 ++++++++++++++++++++++++++++++- src/summary.F90 | 2 +- src/tally.F90 | 2 +- src/track_output.F90 | 4 +- src/tracking.F90 | 2 +- src/trigger.F90 | 12 +- 29 files changed, 403 insertions(+), 417 deletions(-) delete mode 100644 src/simple_string.F90 diff --git a/src/ace.F90 b/src/ace.F90 index 57564f0b91..45b58a8d54 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -19,7 +19,7 @@ module ace use secondary_correlated, only: CorrelatedAngleEnergy use secondary_kalbach, only: KalbachMann use secondary_uncorrelated, only: UncorrelatedAngleEnergy - use simple_string, only: to_str, to_lower + use string, only: to_str, to_lower implicit none diff --git a/src/cmfd_data.F90 b/src/cmfd_data.F90 index b624e839d7..347351e318 100644 --- a/src/cmfd_data.F90 +++ b/src/cmfd_data.F90 @@ -49,17 +49,17 @@ contains subroutine compute_xs() - use constants, only: FILTER_MESH, FILTER_ENERGYIN, FILTER_ENERGYOUT, & - FILTER_SURFACE, IN_RIGHT, OUT_RIGHT, IN_FRONT, & - OUT_FRONT, IN_TOP, OUT_TOP, CMFD_NOACCEL, ZERO, & - ONE, TINY_BIT - use error, only: fatal_error - use global, only: cmfd, n_cmfd_tallies, cmfd_tallies, meshes,& - matching_bins - use mesh, only: mesh_indices_to_bin - use mesh_header, only: RegularMesh - use simple_string, only: to_str - use tally_header, only: TallyObject + use constants, only: FILTER_MESH, FILTER_ENERGYIN, FILTER_ENERGYOUT, & + FILTER_SURFACE, IN_RIGHT, OUT_RIGHT, IN_FRONT, & + OUT_FRONT, IN_TOP, OUT_TOP, CMFD_NOACCEL, ZERO, & + ONE, TINY_BIT + use error, only: fatal_error + use global, only: cmfd, n_cmfd_tallies, cmfd_tallies, meshes,& + matching_bins + use mesh, only: mesh_indices_to_bin + use mesh_header, only: RegularMesh + use string, only: to_str + use tally_header, only: TallyObject integer :: nx ! number of mesh cells in x direction integer :: ny ! number of mesh cells in y direction @@ -625,10 +625,10 @@ contains subroutine compute_dhat() - use constants, only: CMFD_NOACCEL, ZERO - use global, only: cmfd, cmfd_coremap, dhat_reset - use output, only: write_message - use simple_string, only: to_str + use constants, only: CMFD_NOACCEL, ZERO + use global, only: cmfd, cmfd_coremap, dhat_reset + use output, only: write_message + use string, only: to_str integer :: nx ! maximum number of cells in x direction integer :: ny ! maximum number of cells in y direction diff --git a/src/cmfd_execute.F90 b/src/cmfd_execute.F90 index af6991e47d..b7d0cc3879 100644 --- a/src/cmfd_execute.F90 +++ b/src/cmfd_execute.F90 @@ -89,9 +89,9 @@ contains subroutine calc_fission_source() - use constants, only: CMFD_NOACCEL, ZERO, TWO - use global, only: cmfd, cmfd_coremap, master, entropy_on, current_batch - use simple_string, only: to_str + use constants, only: CMFD_NOACCEL, ZERO, TWO + use global, only: cmfd, cmfd_coremap, master, entropy_on, current_batch + use string, only: to_str #ifdef MPI use global, only: mpi_err @@ -213,14 +213,14 @@ contains subroutine cmfd_reweight(new_weights) - use constants, only: ZERO, ONE - use error, only: warning, fatal_error - use global, only: meshes, source_bank, work, n_user_meshes, cmfd, & - master - use mesh_header, only: RegularMesh - use mesh, only: count_bank_sites, get_mesh_indices - use search, only: binary_search - use simple_string, only: to_str + use constants, only: ZERO, ONE + use error, only: warning, fatal_error + use global, only: meshes, source_bank, work, n_user_meshes, cmfd, & + master + use mesh_header, only: RegularMesh + use mesh, only: count_bank_sites, get_mesh_indices + use search, only: binary_search + use string, only: to_str #ifdef MPI use global, only: mpi_err diff --git a/src/cmfd_input.F90 b/src/cmfd_input.F90 index 5e22d38559..2d9df4182c 100644 --- a/src/cmfd_input.F90 +++ b/src/cmfd_input.F90 @@ -45,10 +45,10 @@ contains subroutine read_cmfd_xml() use constants, only: ZERO, ONE - use error, only: fatal_error, warning + use error, only: fatal_error, warning use global - use output, only: write_message - use simple_string, only: to_lower + use output, only: write_message + use string, only: to_lower use xml_interface use, intrinsic :: ISO_FORTRAN_ENV diff --git a/src/distribution_univariate.F90 b/src/distribution_univariate.F90 index 274c6b1155..0ec2959c3b 100644 --- a/src/distribution_univariate.F90 +++ b/src/distribution_univariate.F90 @@ -1,11 +1,11 @@ module distribution_univariate - use constants, only: ZERO, ONE, HALF, HISTOGRAM, LINEAR_LINEAR, & + use constants, only: ZERO, ONE, HALF, HISTOGRAM, LINEAR_LINEAR, & MAX_LINE_LEN, MAX_WORD_LEN - use error, only: fatal_error - use random_lcg, only: prn - use spectra, only: maxwell_spectrum, watt_spectrum - use simple_string, only: to_lower + use error, only: fatal_error + use random_lcg, only: prn + use spectra, only: maxwell_spectrum, watt_spectrum + use string, only: to_lower use xml_interface implicit none diff --git a/src/eigenvalue.F90 b/src/eigenvalue.F90 index 7ed6c34f01..e735bc8d8a 100644 --- a/src/eigenvalue.F90 +++ b/src/eigenvalue.F90 @@ -4,15 +4,15 @@ module eigenvalue use message_passing #endif - use constants, only: ZERO - use error, only: fatal_error, warning + use constants, only: ZERO + use error, only: fatal_error, warning use global - use math, only: t_percentile - use mesh, only: count_bank_sites - use mesh_header, only: RegularMesh - use random_lcg, only: prn, set_particle_seed, prn_skip - use search, only: binary_search - use simple_string, only: to_str + use math, only: t_percentile + use mesh, only: count_bank_sites + use mesh_header, only: RegularMesh + use random_lcg, only: prn, set_particle_seed, prn_skip + use search, only: binary_search + use string, only: to_str implicit none diff --git a/src/endf.F90 b/src/endf.F90 index 0539e8b9d2..64f26539a9 100644 --- a/src/endf.F90 +++ b/src/endf.F90 @@ -1,7 +1,7 @@ module endf use constants - use simple_string, only: to_str + use string, only: to_str implicit none diff --git a/src/geometry.F90 b/src/geometry.F90 index 53e2f29fc2..8a38f982b5 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -10,7 +10,7 @@ module geometry use particle_restart_write, only: write_particle_restart use surface_header use stl_vector, only: VectorInt - use simple_string, only: to_str + use string, only: to_str use tally, only: score_surface_current implicit none diff --git a/src/initialize.F90 b/src/initialize.F90 index 00e5bab443..74bba03e72 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -1,32 +1,31 @@ module initialize - use ace, only: read_ace_xs, same_nuclide_list - use bank_header, only: Bank + use ace, only: read_ace_xs, same_nuclide_list + use bank_header, only: Bank use constants - use dict_header, only: DictIntInt, ElemKeyValueII - use set_header, only: SetInt - use energy_grid, only: logarithmic_grid, grid_method, unionized_grid - use error, only: fatal_error, warning - use geometry, only: neighbor_lists, count_instance, calc_offsets, & - maximum_levels - use geometry_header, only: Cell, Universe, Lattice, RectLattice, HexLattice,& - &BASE_UNIVERSE + use dict_header, only: DictIntInt, ElemKeyValueII + use set_header, only: SetInt + use energy_grid, only: logarithmic_grid, grid_method, unionized_grid + use error, only: fatal_error, warning + use geometry, only: neighbor_lists, count_instance, calc_offsets, & + maximum_levels + use geometry_header, only: Cell, Universe, Lattice, RectLattice, HexLattice,& + &BASE_UNIVERSE use global - use hdf5_interface, only: file_open, read_dataset, file_close, hdf5_bank_t,& - hdf5_tallyresult_t, hdf5_integer8_t - use input_xml, only: read_input_xml, cells_in_univ_dict, read_plots_xml - use material_header, only: Material - use mgxs_data, only: read_mgxs, same_nuclide_mg_list, create_macro_xs - use output, only: title, header, print_version, write_message, & - print_usage, write_xs_summary, print_plot - use random_lcg, only: initialize_prng - use state_point, only: load_state_point - use simple_string, only: to_str, starts_with, ends_with - use string, only: str_to_int - use summary, only: write_summary - use tally_header, only: TallyObject, TallyResult, TallyFilter - use tally_initialize, only: configure_tallies - use tally, only: init_tally_routines + use hdf5_interface, only: file_open, read_dataset, file_close, hdf5_bank_t,& + hdf5_tallyresult_t, hdf5_integer8_t + use input_xml, only: read_input_xml, cells_in_univ_dict, read_plots_xml + use material_header, only: Material + use mgxs_data, only: read_mgxs, same_nuclide_mg_list, create_macro_xs + use output, only: title, header, print_version, write_message, & + print_usage, write_xs_summary, print_plot + use random_lcg, only: initialize_prng + use state_point, only: load_state_point + use string, only: to_str, starts_with, ends_with, str_to_int + use summary, only: write_summary + use tally_header, only: TallyObject, TallyResult, TallyFilter + use tally_initialize,only: configure_tallies + use tally, only: init_tally_routines #ifdef MPI use message_passing diff --git a/src/input_xml.F90 b/src/input_xml.F90 index fde77f498e..e726b6f403 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -17,8 +17,8 @@ module input_xml use random_lcg, only: prn, seed use surface_header use stl_vector, only: VectorInt - use simple_string, only: to_lower, to_str, starts_with, ends_with - use string, only: str_to_int, str_to_real, tokenize + use string, only: str_to_int, str_to_real, tokenize, & + to_lower, to_str, starts_with, ends_with use tally_header, only: TallyObject, TallyFilter use tally_initialize, only: add_tallies use xml_interface diff --git a/src/interpolation.F90 b/src/interpolation.F90 index 49d3de7fe8..5f87870677 100644 --- a/src/interpolation.F90 +++ b/src/interpolation.F90 @@ -1,9 +1,9 @@ module interpolation use constants - use endf_header, only: Tab1 - use search, only: binary_search - use simple_string, only: to_str + use endf_header, only: Tab1 + use search, only: binary_search + use string, only: to_str implicit none diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index f48238afa9..880764edad 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -1,14 +1,14 @@ module mgxs_data use constants - use error, only: fatal_error + use error, only: fatal_error use global use macroxs_header - use material_header, only: Material + use material_header, only: Material use nuclide_header - use output, only: write_message - use set_header, only: SetChar - use simple_string, only: to_lower + use output, only: write_message + use set_header, only: SetChar + use string, only: to_lower use xml_interface implicit none diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 72e1a4dc66..398e91eb20 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -7,8 +7,7 @@ module nuclide_header use endf, only: reaction_name use list_header, only: ListInt use math, only: evaluate_legendre - !use scattdata_header - use simple_string + use string implicit none diff --git a/src/output.F90 b/src/output.F90 index 5379555ff0..29844076e6 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -16,7 +16,7 @@ module output use particle_header, only: LocalCoord, Particle use plot_header use sab_header, only: SAlphaBeta - use simple_string, only: to_upper, to_str + use string, only: to_upper, to_str use tally_header, only: TallyObject implicit none diff --git a/src/particle_restart_write.F90 b/src/particle_restart_write.F90 index 324e96bc7a..e1a280e9fa 100644 --- a/src/particle_restart_write.F90 +++ b/src/particle_restart_write.F90 @@ -1,10 +1,10 @@ module particle_restart_write - use bank_header, only: Bank + use bank_header, only: Bank use global use hdf5_interface - use particle_header, only: Particle - use simple_string, only: to_str + use particle_header, only: Particle + use string, only: to_str use hdf5 diff --git a/src/physics.F90 b/src/physics.F90 index 2212269209..cb216467cd 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -18,7 +18,7 @@ module physics use random_lcg, only: prn use search, only: binary_search use secondary_uncorrelated, only: UncorrelatedAngleEnergy - use simple_string, only: to_str + use string, only: to_str use spectra implicit none diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index a5272e1f47..a8a9084171 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -15,7 +15,7 @@ module physics_mg use physics_common use random_lcg, only: prn use scattdata_header - use simple_string, only: to_str + use string, only: to_str use spectra, only: rotate_angle implicit none diff --git a/src/plot.F90 b/src/plot.F90 index cdddc6d706..796cce6afa 100644 --- a/src/plot.F90 +++ b/src/plot.F90 @@ -14,7 +14,7 @@ module plot use ppmlib, only: Image, init_image, allocate_image, & deallocate_image, set_pixel use progress_header, only: ProgressBar - use simple_string, only: to_str + use string, only: to_str use hdf5 diff --git a/src/sab_header.F90 b/src/sab_header.F90 index a2d70d4f21..56617dd01d 100644 --- a/src/sab_header.F90 +++ b/src/sab_header.F90 @@ -3,7 +3,7 @@ module sab_header use, intrinsic :: ISO_FORTRAN_ENV use constants - use simple_string, only: to_str + use string, only: to_str implicit none diff --git a/src/simple_string.F90 b/src/simple_string.F90 deleted file mode 100644 index 65eb58ac0b..0000000000 --- a/src/simple_string.F90 +++ /dev/null @@ -1,308 +0,0 @@ -module simple_string - - use constants, only: ERROR_REAL, ERROR_INT, MAX_LINE_LEN - - implicit none - - interface to_str - module procedure int4_to_str, int8_to_str, real_to_str - end interface - -contains - -!=============================================================================== -! TO_LOWER converts a string to all lower case characters -!=============================================================================== - - pure function to_lower(word) result(word_lower) - character(*), intent(in) :: word - character(len=len(word)) :: word_lower - - integer :: i - integer :: ic - - do i = 1, len(word) - ic = ichar(word(i:i)) - if (ic >= 65 .and. ic <= 90) then - word_lower(i:i) = char(ic+32) - else - word_lower(i:i) = word(i:i) - end if - end do - - end function to_lower - -!=============================================================================== -! TO_UPPER converts a string to all upper case characters -!=============================================================================== - - pure function to_upper(word) result(word_upper) - character(*), intent(in) :: word - character(len=len(word)) :: word_upper - - integer :: i - integer :: ic - - do i = 1, len(word) - ic = ichar(word(i:i)) - if (ic >= 97 .and. ic <= 122) then - word_upper(i:i) = char(ic-32) - else - word_upper(i:i) = word(i:i) - end if - end do - - end function to_upper - -!=============================================================================== -! IS_NUMBER determines whether a string of characters is all 0-9 characters -!=============================================================================== - - pure function is_number(word) result(number) - character(*), intent(in) :: word - logical :: number - - integer :: i - integer :: ic - - number = .true. - do i = 1, len_trim(word) - ic = ichar(word(i:i)) - if (ic < 48 .or. ic >= 58) number = .false. - end do - - end function is_number - -!=============================================================================== -! STARTS_WITH determines whether a string starts with a certain -! sequence of characters -!=============================================================================== - - pure logical function starts_with(str, seq) - character(*), intent(in) :: str ! string to check - character(*), intent(in) :: seq ! sequence of characters - - integer :: i - integer :: i_start - integer :: str_len - integer :: seq_len - - str_len = len_trim(str) - seq_len = len_trim(seq) - - ! determine how many spaces are at beginning of string - i_start = 0 - do i = 1, str_len - if (str(i:i) == ' ' .or. str(i:i) == achar(9)) cycle - i_start = i - exit - end do - - ! Check if string starts with sequence using INDEX intrinsic - if (index(str(1:str_len), seq(1:seq_len)) == i_start) then - starts_with = .true. - else - starts_with = .false. - end if - - end function starts_with - -!=============================================================================== -! ENDS_WITH determines whether a string ends with a certain sequence -! of characters -!=============================================================================== - - pure logical function ends_with(str, seq) - character(*), intent(in) :: str ! string to check - character(*), intent(in) :: seq ! sequence of characters - - integer :: i_start - integer :: str_len - integer :: seq_len - - str_len = len_trim(str) - seq_len = len_trim(seq) - - ! determine how many spaces are at beginning of string - i_start = str_len - seq_len + 1 - - ! Check if string starts with sequence using INDEX intrinsic - if (index(str(1:str_len), seq(1:seq_len), .true.) == i_start) then - ends_with = .true. - else - ends_with = .false. - end if - - end function ends_with - -!=============================================================================== -! COUNT_DIGITS returns the number of digits needed to represent the input -! integer. -!=============================================================================== - - pure function count_digits(num) result(n_digits) - integer, intent(in) :: num - integer :: n_digits - - n_digits = 1 - do while (num / 10**(n_digits) /= 0 .and. abs(num / 10 **(n_digits-1)) /= 1& - &.and. n_digits /= 10) - ! Note that 10 digits is the maximum needed to represent an integer(4) so - ! the loop automatically exits when n_digits = 10. - n_digits = n_digits + 1 - end do - - end function count_digits - -!=============================================================================== -! INT4_TO_STR converts an integer(4) to a string. -!=============================================================================== - - pure function int4_to_str(num) result(str) - - integer, intent(in) :: num - character(11) :: str - - write (str, '(I11)') num - str = adjustl(str) - - end function int4_to_str - -!=============================================================================== -! INT8_TO_STR converts an integer(8) to a string. -!=============================================================================== - - pure function int8_to_str(num) result(str) - - integer(8), intent(in) :: num - character(21) :: str - - write (str, '(I21)') num - str = adjustl(str) - - end function int8_to_str - -!=============================================================================== -! REAL_TO_STR converts a real(8) to a string based on how large the value is and -! how many significant digits are desired. By default, six significants digits -! are used. -!=============================================================================== - - pure function real_to_str(num, sig_digits) result(string) - - real(8), intent(in) :: num ! number to convert - integer, optional, intent(in) :: sig_digits ! # of significant digits - character(15) :: string ! string returned - - integer :: decimal ! number of places after decimal - integer :: width ! total field width - real(8) :: num2 ! absolute value of number - character(9) :: fmt ! format specifier for writing number - - ! set default field width - width = 15 - - ! set number of places after decimal - if (present(sig_digits)) then - decimal = sig_digits - else - decimal = 6 - end if - - ! Create format specifier for writing character - num2 = abs(num) - if (num2 == 0.0_8) then - write(fmt, '("(F",I2,".",I2,")")') width, 1 - elseif (num2 < 1.0e-1_8) then - write(fmt, '("(ES",I2,".",I2,")")') width, decimal - 1 - elseif (num2 >= 1.0e-1_8 .and. num2 < 1.0_8) then - write(fmt, '("(F",I2,".",I2,")")') width, decimal - elseif (num2 >= 1.0_8 .and. num2 < 10.0_8) then - write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-1, 0) - elseif (num2 >= 10.0_8 .and. num2 < 100.0_8) then - write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-2, 0) - elseif (num2 >= 100.0_8 .and. num2 < 1000.0_8) then - write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-3, 0) - elseif (num2 >= 100.0_8 .and. num2 < 10000.0_8) then - write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-4, 0) - elseif (num2 >= 10000.0_8 .and. num2 < 100000.0_8) then - write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-5, 0) - else - write(fmt, '("(ES",I2,".",I2,")")') width, decimal - 1 - end if - - ! Write string and left adjust - write(string, fmt) num - string = adjustl(string) - - end function real_to_str - -!=============================================================================== -! STR_TO_INT converts a string to an integer. -!=============================================================================== - - pure function str_to_int(str) result(num) - - character(*), intent(in) :: str - integer(8) :: num - - character(5) :: fmt - integer :: w - integer :: ioError - - ! Determine width of string - w = len_trim(str) - - ! Create format specifier for reading string - write(UNIT=fmt, FMT='("(I",I2,")")') w - - ! read string into integer - read(UNIT=str, FMT=fmt, IOSTAT=ioError) num - if (ioError > 0) num = ERROR_INT - - end function str_to_int - -!=============================================================================== -! STR_TO_REAL converts an arbitrary string to a real(8) -!=============================================================================== - - pure function str_to_real(string) result(num) - - character(*), intent(in) :: string - real(8) :: num - - integer :: ioError - - ! Read string - read(UNIT=string, FMT=*, IOSTAT=ioError) num - if (ioError > 0) num = ERROR_REAL - - end function str_to_real - -!=============================================================================== -! CONCATENATE takes an array of words and concatenates them together in one -! string with a single space between words -! -! Arguments: -! words = array of words -! n_words = total number of words -! string = concatenated string -!=============================================================================== - - pure function concatenate(words, n_words) result(string) - - integer, intent(in) :: n_words - character(*), intent(in) :: words(n_words) - character(MAX_LINE_LEN) :: string - - integer :: i ! index - - string = words(1) - if (n_words == 1) return - do i = 2, n_words - string = trim(string) // ' ' // words(i) - end do - - end function concatenate - -end module simple_string \ No newline at end of file diff --git a/src/simulation.F90 b/src/simulation.F90 index d1b96d8b08..4a419df906 100644 --- a/src/simulation.F90 +++ b/src/simulation.F90 @@ -19,7 +19,7 @@ module simulation use random_lcg, only: set_particle_seed use source, only: initialize_source use state_point, only: write_state_point, write_source_point - use simple_string, only: to_str + use string, only: to_str use tally, only: synchronize_tallies, setup_active_usertallies, & reset_result use trigger, only: check_triggers diff --git a/src/source.F90 b/src/source.F90 index 7f56b240b7..601232192a 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -13,7 +13,7 @@ module source use particle_header, only: Particle use random_lcg, only: prn, set_particle_seed, prn_set_stream use search, only: binary_search - use simple_string, only: to_str + use string, only: to_str use spectra use state_point, only: read_source_bank, write_source_bank diff --git a/src/state_point.F90 b/src/state_point.F90 index a46450fc5a..2249e3d45e 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -18,8 +18,7 @@ module state_point use global use hdf5_interface use output, only: write_message, time_stamp - use simple_string, only: to_str, count_digits - use string, only: zero_padded + use string, only: to_str, count_digits, zero_padded use tally_header, only: TallyObject use mesh_header, only: RegularMesh use dict_header, only: ElemKeyValueII, ElemKeyValueCI diff --git a/src/string.F90 b/src/string.F90 index e5f09a50d4..b51763a611 100644 --- a/src/string.F90 +++ b/src/string.F90 @@ -1,13 +1,16 @@ module string - use constants, only: MAX_WORDS, MAX_LINE_LEN, ERROR_INT, ERROR_REAL, & + use constants, only: MAX_WORDS, MAX_LINE_LEN, ERROR_INT, ERROR_REAL, & OP_LEFT_PAREN, OP_RIGHT_PAREN, OP_COMPLEMENT, OP_INTERSECTION, OP_UNION - use error, only: fatal_error, warning - use simple_string, only: str_to_int, str_to_real - use stl_vector, only: VectorInt + use error, only: fatal_error, warning + use stl_vector, only: VectorInt implicit none + interface to_str + module procedure int4_to_str, int8_to_str, real_to_str + end interface + contains !=============================================================================== @@ -151,6 +154,75 @@ contains end if end subroutine tokenize +!=============================================================================== +! CONCATENATE takes an array of words and concatenates them together in one +! string with a single space between words +! +! Arguments: +! words = array of words +! n_words = total number of words +! string = concatenated string +!=============================================================================== + + pure function concatenate(words, n_words) result(string) + + integer, intent(in) :: n_words + character(*), intent(in) :: words(n_words) + character(MAX_LINE_LEN) :: string + + integer :: i ! index + + string = words(1) + if (n_words == 1) return + do i = 2, n_words + string = trim(string) // ' ' // words(i) + end do + + end function concatenate + +!=============================================================================== +! TO_LOWER converts a string to all lower case characters +!=============================================================================== + + pure function to_lower(word) result(word_lower) + character(*), intent(in) :: word + character(len=len(word)) :: word_lower + + integer :: i + integer :: ic + + do i = 1, len(word) + ic = ichar(word(i:i)) + if (ic >= 65 .and. ic <= 90) then + word_lower(i:i) = char(ic+32) + else + word_lower(i:i) = word(i:i) + end if + end do + + end function to_lower + +!=============================================================================== +! TO_UPPER converts a string to all upper case characters +!=============================================================================== + + pure function to_upper(word) result(word_upper) + character(*), intent(in) :: word + character(len=len(word)) :: word_upper + + integer :: i + integer :: ic + + do i = 1, len(word) + ic = ichar(word(i:i)) + if (ic >= 97 .and. ic <= 122) then + word_upper(i:i) = char(ic-32) + else + word_upper(i:i) = word(i:i) + end if + end do + + end function to_upper !=============================================================================== ! ZERO_PADDED returns a string of the input integer padded with zeros to the @@ -185,4 +257,229 @@ contains write(str, zp_form) num end function zero_padded +!=============================================================================== +! IS_NUMBER determines whether a string of characters is all 0-9 characters +!=============================================================================== + + pure function is_number(word) result(number) + character(*), intent(in) :: word + logical :: number + + integer :: i + integer :: ic + + number = .true. + do i = 1, len_trim(word) + ic = ichar(word(i:i)) + if (ic < 48 .or. ic >= 58) number = .false. + end do + + end function is_number + +!=============================================================================== +! STARTS_WITH determines whether a string starts with a certain +! sequence of characters +!=============================================================================== + + pure logical function starts_with(str, seq) + character(*), intent(in) :: str ! string to check + character(*), intent(in) :: seq ! sequence of characters + + integer :: i + integer :: i_start + integer :: str_len + integer :: seq_len + + str_len = len_trim(str) + seq_len = len_trim(seq) + + ! determine how many spaces are at beginning of string + i_start = 0 + do i = 1, str_len + if (str(i:i) == ' ' .or. str(i:i) == achar(9)) cycle + i_start = i + exit + end do + + ! Check if string starts with sequence using INDEX intrinsic + if (index(str(1:str_len), seq(1:seq_len)) == i_start) then + starts_with = .true. + else + starts_with = .false. + end if + + end function starts_with + +!=============================================================================== +! ENDS_WITH determines whether a string ends with a certain sequence +! of characters +!=============================================================================== + + pure logical function ends_with(str, seq) + character(*), intent(in) :: str ! string to check + character(*), intent(in) :: seq ! sequence of characters + + integer :: i_start + integer :: str_len + integer :: seq_len + + str_len = len_trim(str) + seq_len = len_trim(seq) + + ! determine how many spaces are at beginning of string + i_start = str_len - seq_len + 1 + + ! Check if string starts with sequence using INDEX intrinsic + if (index(str(1:str_len), seq(1:seq_len), .true.) == i_start) then + ends_with = .true. + else + ends_with = .false. + end if + + end function ends_with + +!=============================================================================== +! COUNT_DIGITS returns the number of digits needed to represent the input +! integer. +!=============================================================================== + + pure function count_digits(num) result(n_digits) + integer, intent(in) :: num + integer :: n_digits + + n_digits = 1 + do while (num / 10**(n_digits) /= 0 .and. abs(num / 10 **(n_digits-1)) /= 1& + &.and. n_digits /= 10) + ! Note that 10 digits is the maximum needed to represent an integer(4) so + ! the loop automatically exits when n_digits = 10. + n_digits = n_digits + 1 + end do + + end function count_digits + +!=============================================================================== +! INT4_TO_STR converts an integer(4) to a string. +!=============================================================================== + + pure function int4_to_str(num) result(str) + + integer, intent(in) :: num + character(11) :: str + + write (str, '(I11)') num + str = adjustl(str) + + end function int4_to_str + +!=============================================================================== +! INT8_TO_STR converts an integer(8) to a string. +!=============================================================================== + + pure function int8_to_str(num) result(str) + + integer(8), intent(in) :: num + character(21) :: str + + write (str, '(I21)') num + str = adjustl(str) + + end function int8_to_str + +!=============================================================================== +! STR_TO_INT converts a string to an integer. +!=============================================================================== + + pure function str_to_int(str) result(num) + + character(*), intent(in) :: str + integer(8) :: num + + character(5) :: fmt + integer :: w + integer :: ioError + + ! Determine width of string + w = len_trim(str) + + ! Create format specifier for reading string + write(UNIT=fmt, FMT='("(I",I2,")")') w + + ! read string into integer + read(UNIT=str, FMT=fmt, IOSTAT=ioError) num + if (ioError > 0) num = ERROR_INT + + end function str_to_int + +!=============================================================================== +! STR_TO_REAL converts an arbitrary string to a real(8) +!=============================================================================== + + pure function str_to_real(string) result(num) + + character(*), intent(in) :: string + real(8) :: num + + integer :: ioError + + ! Read string + read(UNIT=string, FMT=*, IOSTAT=ioError) num + if (ioError > 0) num = ERROR_REAL + + end function str_to_real + +!=============================================================================== +! REAL_TO_STR converts a real(8) to a string based on how large the value is and +! how many significant digits are desired. By default, six significants digits +! are used. +!=============================================================================== + + pure function real_to_str(num, sig_digits) result(string) + + real(8), intent(in) :: num ! number to convert + integer, optional, intent(in) :: sig_digits ! # of significant digits + character(15) :: string ! string returned + + integer :: decimal ! number of places after decimal + integer :: width ! total field width + real(8) :: num2 ! absolute value of number + character(9) :: fmt ! format specifier for writing number + + ! set default field width + width = 15 + + ! set number of places after decimal + if (present(sig_digits)) then + decimal = sig_digits + else + decimal = 6 + end if + + ! Create format specifier for writing character + num2 = abs(num) + if (num2 == 0.0_8) then + write(fmt, '("(F",I2,".",I2,")")') width, 1 + elseif (num2 < 1.0e-1_8) then + write(fmt, '("(ES",I2,".",I2,")")') width, decimal - 1 + elseif (num2 >= 1.0e-1_8 .and. num2 < 1.0_8) then + write(fmt, '("(F",I2,".",I2,")")') width, decimal + elseif (num2 >= 1.0_8 .and. num2 < 10.0_8) then + write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-1, 0) + elseif (num2 >= 10.0_8 .and. num2 < 100.0_8) then + write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-2, 0) + elseif (num2 >= 100.0_8 .and. num2 < 1000.0_8) then + write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-3, 0) + elseif (num2 >= 100.0_8 .and. num2 < 10000.0_8) then + write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-4, 0) + elseif (num2 >= 10000.0_8 .and. num2 < 100000.0_8) then + write(fmt, '("(F",I2,".",I2,")")') width, max(decimal-5, 0) + else + write(fmt, '("(ES",I2,".",I2,")")') width, decimal - 1 + end if + + ! Write string and left adjust + write(string, fmt) num + string = adjustl(string) + + end function real_to_str + end module string diff --git a/src/summary.F90 b/src/summary.F90 index 2f255a4fc5..e662aa473b 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -12,7 +12,7 @@ module summary use nuclide_header use output, only: time_stamp use surface_header - use simple_string, only: to_str + use string, only: to_str use tally_header, only: TallyObject use hdf5 diff --git a/src/tally.F90 b/src/tally.F90 index 842b7644ea..bbe099c3e4 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -13,7 +13,7 @@ module tally use output, only: header use particle_header, only: LocalCoord, Particle use search, only: binary_search - use simple_string, only: to_str + use string, only: to_str use tally_header, only: TallyResult, TallyMapItem, TallyMapElement use fission, only: nu_total, nu_delayed, yield_delayed use interpolation, only: interpolate_tab1 diff --git a/src/track_output.F90 b/src/track_output.F90 index 87dbfbfa44..1411738622 100644 --- a/src/track_output.F90 +++ b/src/track_output.F90 @@ -7,8 +7,8 @@ module track_output use global use hdf5_interface - use particle_header, only: Particle - use simple_string, only: to_str + use particle_header, only: Particle + use string, only: to_str use hdf5 diff --git a/src/tracking.F90 b/src/tracking.F90 index 992cc2ca95..0b2719ef5d 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -13,7 +13,7 @@ module tracking use physics, only: collision use physics_mg, only: collision_mg use random_lcg, only: prn - use simple_string, only: to_str + use string, only: to_str use tally, only: score_analog_tally, score_tracklength_tally, & score_collision_tally, score_surface_current use track_output, only: initialize_particle_track, write_particle_track, & diff --git a/src/trigger.F90 b/src/trigger.F90 index 967d74b14e..ed362154b4 100644 --- a/src/trigger.F90 +++ b/src/trigger.F90 @@ -6,12 +6,12 @@ module trigger use constants use global - use simple_string, only: to_str - use output, only: warning, write_message - use mesh, only: mesh_indices_to_bin - use mesh_header, only: RegularMesh - use trigger_header, only: TriggerObject - use tally, only: TallyObject + use string, only: to_str + use output, only: warning, write_message + use mesh, only: mesh_indices_to_bin + use mesh_header, only: RegularMesh + use trigger_header, only: TriggerObject + use tally, only: TallyObject implicit none From 989569ac5e4adb3eb8ea989768c87d5e3e1943fd Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 3 Feb 2016 13:25:51 -0500 Subject: [PATCH 248/650] Removing need for spectra (putting back in math) --- src/distribution_multivariate.F90 | 2 +- src/distribution_univariate.F90 | 2 +- src/energy_distribution.F90 | 10 +-- src/math.F90 | 106 +++++++++++++++++++++++++++- src/physics.F90 | 2 +- src/physics_mg.F90 | 2 +- src/source.F90 | 2 +- src/spectra.F90 | 112 ------------------------------ 8 files changed, 115 insertions(+), 123 deletions(-) delete mode 100644 src/spectra.F90 diff --git a/src/distribution_multivariate.F90 b/src/distribution_multivariate.F90 index e7be36db84..694fac3013 100644 --- a/src/distribution_multivariate.F90 +++ b/src/distribution_multivariate.F90 @@ -3,7 +3,7 @@ module distribution_multivariate use constants, only: ONE, TWO, PI use distribution_univariate, only: Distribution use random_lcg, only: prn - use spectra, only: rotate_angle + use math, only: rotate_angle implicit none diff --git a/src/distribution_univariate.F90 b/src/distribution_univariate.F90 index 0ec2959c3b..f3e4fdee2e 100644 --- a/src/distribution_univariate.F90 +++ b/src/distribution_univariate.F90 @@ -4,7 +4,7 @@ module distribution_univariate MAX_LINE_LEN, MAX_WORD_LEN use error, only: fatal_error use random_lcg, only: prn - use spectra, only: maxwell_spectrum, watt_spectrum + use math, only: maxwell_spectrum, watt_spectrum use string, only: to_lower use xml_interface diff --git a/src/energy_distribution.F90 b/src/energy_distribution.F90 index 7d136ab10e..2cfc1b1841 100644 --- a/src/energy_distribution.F90 +++ b/src/energy_distribution.F90 @@ -1,11 +1,11 @@ module energy_distribution - use constants, only: ZERO, ONE, TWO, PI, HISTOGRAM, LINEAR_LINEAR - use endf_header, only: Tab1 + use constants, only: ZERO, ONE, TWO, PI, HISTOGRAM, LINEAR_LINEAR + use endf_header, only: Tab1 use interpolation, only: interpolate_tab1 - use random_lcg, only: prn - use search, only: binary_search - use spectra, only: maxwell_spectrum, watt_spectrum + use math, only: maxwell_spectrum, watt_spectrum + use random_lcg, only: prn + use search, only: binary_search !=============================================================================== ! ENERGYDISTRIBUTION (abstract) defines an energy distribution that is a diff --git a/src/math.F90 b/src/math.F90 index 9ed82dabb2..aedf182358 100644 --- a/src/math.F90 +++ b/src/math.F90 @@ -1,6 +1,7 @@ module math use constants + use random_lcg, only: prn implicit none @@ -580,7 +581,8 @@ contains end function expand_harmonic !=============================================================================== -! EVALUATE_LEGENDRE +! EVALUATE_LEGENDRE Find the value of f(x) given a set of Legendre coefficients +! and the value of x !=============================================================================== pure function evaluate_legendre(data, x) result(val) real(8), intent(in) :: data(:) @@ -596,4 +598,106 @@ contains end function evaluate_legendre +!=============================================================================== +! ROTATE_ANGLE rotates direction cosines through a polar angle whose cosine is +! mu and through an azimuthal angle sampled uniformly. Note that this is done +! with direct sampling rather than rejection as is done in MCNP and SERPENT. +!=============================================================================== + + function rotate_angle(uvw0, mu, phi) result(uvw) + real(8), intent(in) :: uvw0(3) ! directional cosine + real(8), intent(in) :: mu ! cosine of angle in lab or CM + real(8), optional :: phi ! azimuthal angle + real(8) :: uvw(3) ! rotated directional cosine + + real(8) :: phi_ ! azimuthal angle + real(8) :: sinphi ! sine of azimuthal angle + real(8) :: cosphi ! cosine of azimuthal angle + real(8) :: a ! sqrt(1 - mu^2) + real(8) :: b ! sqrt(1 - w^2) + real(8) :: u0 ! original cosine in x direction + real(8) :: v0 ! original cosine in y direction + real(8) :: w0 ! original cosine in z direction + + ! Copy original directional cosines + u0 = uvw0(1) + v0 = uvw0(2) + w0 = uvw0(3) + + ! Sample azimuthal angle in [0,2pi) if none provided + if (present(phi)) then + phi_ = phi + else + phi_ = TWO * PI * prn() + end if + + ! Precompute factors to save flops + sinphi = sin(phi_) + cosphi = cos(phi_) + a = sqrt(max(ZERO, ONE - mu*mu)) + b = sqrt(max(ZERO, ONE - w0*w0)) + + ! Need to treat special case where sqrt(1 - w**2) is close to zero by + ! expanding about the v component rather than the w component + if (b > 1e-10) then + uvw(1) = mu*u0 + a*(u0*w0*cosphi - v0*sinphi)/b + uvw(2) = mu*v0 + a*(v0*w0*cosphi + u0*sinphi)/b + uvw(3) = mu*w0 - a*b*cosphi + else + b = sqrt(ONE - v0*v0) + uvw(1) = mu*u0 + a*(u0*v0*cosphi + w0*sinphi)/b + uvw(2) = mu*v0 - a*b*cosphi + uvw(3) = mu*w0 + a*(v0*w0*cosphi - u0*sinphi)/b + end if + + end function rotate_angle + +!=============================================================================== +! 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 diff --git a/src/physics.F90 b/src/physics.F90 index cb216467cd..13a311d5e3 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -9,6 +9,7 @@ module physics use global use interpolation, only: interpolate_tab1 use material_header, only: Material + use math use mesh, only: get_mesh_indices use nuclide_header use output, only: write_message @@ -19,7 +20,6 @@ module physics use search, only: binary_search use secondary_uncorrelated, only: UncorrelatedAngleEnergy use string, only: to_str - use spectra implicit none diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index a8a9084171..048f3ce54f 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -8,6 +8,7 @@ module physics_mg use macroxs_header, only: MacroXS_Base, MacroXSContainer use macroxs, only: sample_fission_energy, sample_scatter use material_header, only: Material + use math, only: rotate_angle use mesh, only: get_mesh_indices use output, only: write_message use particle_header, only: Particle @@ -16,7 +17,6 @@ module physics_mg use random_lcg, only: prn use scattdata_header use string, only: to_str - use spectra, only: rotate_angle implicit none diff --git a/src/source.F90 b/src/source.F90 index 601232192a..1fb9de5c58 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -14,7 +14,7 @@ module source use random_lcg, only: prn, set_particle_seed, prn_set_stream use search, only: binary_search use string, only: to_str - use spectra + use math use state_point, only: read_source_bank, write_source_bank #ifdef MPI diff --git a/src/spectra.F90 b/src/spectra.F90 deleted file mode 100644 index 7f96bb69e5..0000000000 --- a/src/spectra.F90 +++ /dev/null @@ -1,112 +0,0 @@ -module spectra - -use constants, only: ZERO, ONE, TWO, PI -use random_lcg, only: prn - -implicit none - -contains - -!=============================================================================== -! 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.0_8 + (TWO*prn() - ONE)*sqrt(a*a*b*w) - - end function watt_spectrum - -!=============================================================================== -! ROTATE_ANGLE rotates direction cosines through a polar angle whose cosine is -! mu and through an azimuthal angle sampled uniformly. Note that this is done -! with direct sampling rather than rejection as is done in MCNP and SERPENT. -!=============================================================================== - - function rotate_angle(uvw0, mu, phi) result(uvw) - real(8), intent(in) :: uvw0(3) ! directional cosine - real(8), intent(in) :: mu ! cosine of angle in lab or CM - real(8), optional :: phi ! azimuthal angle - real(8) :: uvw(3) ! rotated directional cosine - - real(8) :: phi_ ! azimuthal angle - real(8) :: sinphi ! sine of azimuthal angle - real(8) :: cosphi ! cosine of azimuthal angle - real(8) :: a ! sqrt(1 - mu^2) - real(8) :: b ! sqrt(1 - w^2) - real(8) :: u0 ! original cosine in x direction - real(8) :: v0 ! original cosine in y direction - real(8) :: w0 ! original cosine in z direction - - ! Copy original directional cosines - u0 = uvw0(1) - v0 = uvw0(2) - w0 = uvw0(3) - - ! Sample azimuthal angle in [0,2pi) if none provided - if (present(phi)) then - phi_ = phi - else - phi_ = TWO * PI * prn() - end if - - ! Precompute factors to save flops - sinphi = sin(phi_) - cosphi = cos(phi_) - a = sqrt(max(ZERO, ONE - mu*mu)) - b = sqrt(max(ZERO, ONE - w0*w0)) - - ! Need to treat special case where sqrt(1 - w**2) is close to zero by - ! expanding about the v component rather than the w component - if (b > 1e-10) then - uvw(1) = mu*u0 + a*(u0*w0*cosphi - v0*sinphi)/b - uvw(2) = mu*v0 + a*(v0*w0*cosphi + u0*sinphi)/b - uvw(3) = mu*w0 - a*b*cosphi - else - b = sqrt(ONE - v0*v0) - uvw(1) = mu*u0 + a*(u0*v0*cosphi + w0*sinphi)/b - uvw(2) = mu*v0 - a*b*cosphi - uvw(3) = mu*w0 + a*(v0*w0*cosphi - u0*sinphi)/b - end if - - end function rotate_angle - -end module spectra \ No newline at end of file From bd195ca069a2893c605c9c4d8dda9afede2a479d Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Wed, 3 Feb 2016 14:13:41 -0500 Subject: [PATCH 249/650] Now setting the source space Box to be fissionable in asymmetric lattice test --- tests/test_asymmetric_lattice/inputs_true.dat | 2 +- tests/test_asymmetric_lattice/results_true.dat | 2 +- tests/test_asymmetric_lattice/test_asymmetric_lattice.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_asymmetric_lattice/inputs_true.dat b/tests/test_asymmetric_lattice/inputs_true.dat index 552c8d039e..e3b00b185c 100644 --- a/tests/test_asymmetric_lattice/inputs_true.dat +++ b/tests/test_asymmetric_lattice/inputs_true.dat @@ -1 +1 @@ -fe07eb28fd0dbb56edaecd510f5e8e4db7271e5c9aecf3d880cce92b69872a0aacf825b8e88cd2e9b1ff709f578b269b1835f53cf2561a390062e1e7e03b5276 \ No newline at end of file +b9b4222c4beea80fe6083590f6b785303d174972d80671fb661bac8e030db6f4a61648240cfad6162799361fc0e08a23c61d31aff844d978528d6dad5b5fbc63 \ No newline at end of file diff --git a/tests/test_asymmetric_lattice/results_true.dat b/tests/test_asymmetric_lattice/results_true.dat index 0cf2315ea4..ec4b883886 100644 --- a/tests/test_asymmetric_lattice/results_true.dat +++ b/tests/test_asymmetric_lattice/results_true.dat @@ -1 +1 @@ -cea61172ecad5554ef86f52d6adad6ad5e21931cf3d67feb37b8bf9d75e618786f638685e458051d4a39afe1a924fd651cf6674a88cf1f1842fd69cd851e1f17 \ No newline at end of file +b5f96919ca474cd1c9c9d0acde3b8aac4a1cf636443c72a38b6c5a4221a8ce3e90182aaef2f664e44b9175ca257a89db2328b63e19388ee0e5006de4b3d92ce6 \ No newline at end of file diff --git a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py index 3b9e2029b2..0080078aa3 100644 --- a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py +++ b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py @@ -74,7 +74,7 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): # Specify summary output and correct source sampling box source = Source(space=Box([-32, -32, 0], [32, 32, 32])) - source.only_fissionable = True + source.space.only_fissionable = True self._input_set.settings.source = source self._input_set.settings.output = {'summary': True} From cd921b74bf3b7febb34da50a36c7a414170c0f8e Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Wed, 3 Feb 2016 14:14:52 -0500 Subject: [PATCH 250/650] Now setting the source space Box to be fissionable in asymmetric lattice test --- tests/test_asymmetric_lattice/inputs_true.dat | 2 +- tests/test_asymmetric_lattice/results_true.dat | 2 +- tests/test_asymmetric_lattice/test_asymmetric_lattice.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_asymmetric_lattice/inputs_true.dat b/tests/test_asymmetric_lattice/inputs_true.dat index 552c8d039e..e3b00b185c 100644 --- a/tests/test_asymmetric_lattice/inputs_true.dat +++ b/tests/test_asymmetric_lattice/inputs_true.dat @@ -1 +1 @@ -fe07eb28fd0dbb56edaecd510f5e8e4db7271e5c9aecf3d880cce92b69872a0aacf825b8e88cd2e9b1ff709f578b269b1835f53cf2561a390062e1e7e03b5276 \ No newline at end of file +b9b4222c4beea80fe6083590f6b785303d174972d80671fb661bac8e030db6f4a61648240cfad6162799361fc0e08a23c61d31aff844d978528d6dad5b5fbc63 \ No newline at end of file diff --git a/tests/test_asymmetric_lattice/results_true.dat b/tests/test_asymmetric_lattice/results_true.dat index 0cf2315ea4..ec4b883886 100644 --- a/tests/test_asymmetric_lattice/results_true.dat +++ b/tests/test_asymmetric_lattice/results_true.dat @@ -1 +1 @@ -cea61172ecad5554ef86f52d6adad6ad5e21931cf3d67feb37b8bf9d75e618786f638685e458051d4a39afe1a924fd651cf6674a88cf1f1842fd69cd851e1f17 \ No newline at end of file +b5f96919ca474cd1c9c9d0acde3b8aac4a1cf636443c72a38b6c5a4221a8ce3e90182aaef2f664e44b9175ca257a89db2328b63e19388ee0e5006de4b3d92ce6 \ No newline at end of file diff --git a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py index 3b9e2029b2..0080078aa3 100644 --- a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py +++ b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py @@ -74,7 +74,7 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): # Specify summary output and correct source sampling box source = Source(space=Box([-32, -32, 0], [32, 32, 32])) - source.only_fissionable = True + source.space.only_fissionable = True self._input_set.settings.source = source self._input_set.settings.output = {'summary': True} From 0b80ef0509b1baab5de9a5e5494541b472d66313 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Wed, 3 Feb 2016 16:50:09 -0500 Subject: [PATCH 251/650] Added MGXS slice class method --- openmc/mgxs/mgxs.py | 87 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 84 insertions(+), 3 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index f241274581..b199933863 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -66,6 +66,10 @@ class MGXS(object): The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain + nuclides : Iterable of basestring + The user-specified nuclides to compute cross sections. If by_nuclide + is True but nuclides are not specified by the user, all nuclides in the + spatial domain will be used. name : str, optional Name of the multi-group cross section. Used as a label to identify tallies in OpenMC 'tallies.xml' file. @@ -122,6 +126,7 @@ class MGXS(object): self._name = '' self._rxn_type = None self._by_nuclide = None + self._nuclides = None self._domain = None self._domain_type = None self._energy_groups = None @@ -150,6 +155,7 @@ class MGXS(object): clone._name = self.name clone._rxn_type = self.rxn_type clone._by_nuclide = self.by_nuclide + clone._nuclides = self._nuclides clone._domain = self.domain clone._domain_type = self.domain_type clone._energy_groups = copy.deepcopy(self.energy_groups, memo) @@ -259,6 +265,11 @@ class MGXS(object): cv.check_type('by_nuclide', by_nuclide, bool) self._by_nuclide = by_nuclide + @nuclides.setter + def nuclides(self, nuclides): + cv.check_iterable_type('nuclides', nuclides, basestring) + self._nuclides = nuclides + @domain.setter def domain(self, domain): cv.check_type('domain', domain, tuple(_DOMAINS)) @@ -386,8 +397,14 @@ class MGXS(object): if self.domain is None: raise ValueError('Unable to get all nuclides without a domain') - nuclides = self.domain.get_all_nuclides() - return nuclides.keys() + # If the user defined nuclides, return them + if self._nuclides: + return self._nuclides + + # Otherwise, return all nuclides in the spatial domain + else: + nuclides = self.domain.get_all_nuclides() + return nuclides.keys() def get_nuclide_density(self, nuclide): """Get the atomic number density in units of atoms/b-cm for a nuclide @@ -550,7 +567,7 @@ class MGXS(object): # If computing xs for each nuclide, replace CrossNuclides with originals if self.by_nuclide: self.xs_tally._nuclides = [] - nuclides = self.domain.get_all_nuclides() + nuclides = self.get_all_nuclides() for nuclide in nuclides: self.xs_tally.add_nuclide(openmc.Nuclide(nuclide)) @@ -865,6 +882,70 @@ class MGXS(object): avg_xs.sparse = self.sparse return avg_xs + def get_slice(self, nuclides=[], groups=[]): + """Build a sliced MGXS for the specified nuclides and energy groups. + + This method constructs a new MGXS to encapsulate a subset of the data + represented by this MGXS. The subset of data to include in the tally + slice is determined by the nuclides and energy groups specified in + the input parameters. + + Parameters + ---------- + nuclides : list of str + A list of nuclide name strings + (e.g., ['U-235', 'U-238']; default is []) + groups : list of Integral + A list of energy group indices starting at 1 for the high energies + (e.g., [1, 2, 3]; default is []) + + Returns + ------- + MGXS + A new tally which encapsulates the subset of data requested for the + nuclide(s) and/or energy group(s) requested in the parameters. + + """ + + cv.check_iterable_type('nuclides', nuclides, basestring) + cv.check_iterable_type('energy_groups', groups, Integral) + + # Build lists of filters and filter bins to slice + if len(groups) == 0: + filters = [] + filter_bins = [] + else: + filter_bins = [] + for group in groups: + group_bounds = self.energy_groups.get_group_bounds(group) + filter_bins.append(group_bounds) + filter_bins = [tuple(filter_bins)] + filters = ['energy'] + + # Clone this MGXS to initialize the sliced version + slice_xs = copy.deepcopy(self) + slice_xs._rxn_rate_tally = None + slice_xs._xs_tally = None + + # Slice each of the tallies across nuclides and energy groups + for tally_type, tally in slice_xs.tallies.items(): + slice_nuclides = [nuc for nuc in nuclides if nuc in tally.nuclides] + tally_slice = tally.get_slice(filters=filters, + filter_bins=filter_bins, nuclides=slice_nuclides) + slice_xs.tallies[tally_type] = tally_slice + + # Assign sliced energy group structure to sliced MGXS + if groups: + energy_filter = slice_xs.tallies.values()[0].find_filter('energy') + slice_xs.energy_groups.group_edges = energy_filter.bins + + # Assign sliced nuclides to sliced MGXS + if nuclides: + slice_xs.nuclides = nuclides + + slice_xs.sparse = self.sparse + return slice_xs + def print_xs(self, subdomains='all', nuclides='all', xs_type='macro'): """Print a string representation for the multi-group cross section. From a5c51aa71532297afca8c0f9577bac2bf8153664 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Wed, 3 Feb 2016 17:20:12 -0500 Subject: [PATCH 252/650] Added slice method to ScatterMatrixXS along with new Tally.contains_filter(...) --- openmc/mgxs/mgxs.py | 54 +++++++++++++++++++++++++++++++++++++++++++-- openmc/tallies.py | 26 ++++++++++++++++++++++ 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index b199933863..d4d949d1b2 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -930,8 +930,11 @@ class MGXS(object): # Slice each of the tallies across nuclides and energy groups for tally_type, tally in slice_xs.tallies.items(): slice_nuclides = [nuc for nuc in nuclides if nuc in tally.nuclides] - tally_slice = tally.get_slice(filters=filters, - filter_bins=filter_bins, nuclides=slice_nuclides) + if len(groups) != 0 and tally.contains_filter('energy'): + tally_slice = tally.get_slice(filters=filters, + filter_bins=filter_bins, nuclides=slice_nuclides) + else: + tally_slice = tally.get_slice(nuclides=slice_nuclides) slice_xs.tallies[tally_type] = tally_slice # Assign sliced energy group structure to sliced MGXS @@ -1822,6 +1825,53 @@ class ScatterMatrixXS(MGXS): cv.check_value('correction', correction, ('P0', None)) self._correction = correction + def get_slice(self, nuclides=[], groups=[]): + """Build a sliced MGXS for the specified nuclides and energy groups. + + This method constructs a new MGXS to encapsulate a subset of the data + represented by this MGXS. The subset of data to include in the tally + slice is determined by the nuclides and energy groups specified in + the input parameters. + + Parameters + ---------- + nuclides : list of str + A list of nuclide name strings + (e.g., ['U-235', 'U-238']; default is []) + groups : list of Integral + A list of energy group indices starting at 1 for the high energies + (e.g., [1, 2, 3]; default is []) + + Returns + ------- + MGXS + A new tally which encapsulates the subset of data requested for the + nuclide(s) and/or energy group(s) requested in the parameters. + + """ + + slice_xs = super(ScatterMatrixXS, self).get_slice(nuclides, groups) + slice_xs._rxn_rate_tally = None + slice_xs._xs_tally = None + + # Build lists of filters and filter bins to slice + if len(groups) != 0: + filter_bins = [] + for group in groups: + group_bounds = self.energy_groups.get_group_bounds(group) + filter_bins.append(group_bounds) + filter_bins = [tuple(filter_bins)] + + # Slice each of the tallies across nuclides and energy groups + for tally_type, tally in slice_xs.tallies.items(): + if tally.contains_filter('energyout'): + tally_slice = tally.get_slice(filters=['energyout'], + filter_bins=filter_bins) + slice_xs.tallies[tally_type] = tally_slice + + slice_xs.sparse = self.sparse + return slice_xs + def get_xs(self, in_groups='all', out_groups='all', subdomains='all', nuclides='all', xs_type='macro', order_groups='increasing', value='mean'): diff --git a/openmc/tallies.py b/openmc/tallies.py index 1ad62e33ab..66b99cb00c 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -846,6 +846,32 @@ class Tally(object): return element + def contains_filter(self, filter_type): + """Looks for a filter in the tally that matches a specified type + + Parameters + ---------- + filter_type : str + Type of the filter, e.g. 'mesh' + + Returns + ------- + filter_found : bool + True if the tally contains a filter of the requested type; + otherwise false + + """ + + filter_found = False + + # Look through all of this Tally's Filters for the type requested + for test_filter in self.filters: + if test_filter.type == filter_type: + filter_found = True + break + + return filter_found + def find_filter(self, filter_type): """Return a filter in the tally that matches a specified type From d66f2b108aaa23b0c69fc192f372a7b009c1c256 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Wed, 3 Feb 2016 18:10:33 -0500 Subject: [PATCH 253/650] Added Chi.get_slice(...) method --- openmc/mgxs/mgxs.py | 70 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 66 insertions(+), 4 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index d4d949d1b2..272d5e0402 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -939,8 +939,12 @@ class MGXS(object): # Assign sliced energy group structure to sliced MGXS if groups: - energy_filter = slice_xs.tallies.values()[0].find_filter('energy') - slice_xs.energy_groups.group_edges = energy_filter.bins + new_group_edges = [] + for group in groups: + group_edges = self.energy_groups.get_group_bounds(group) + new_group_edges.extend(group_edges) + new_group_edges = np.unique(new_group_edges) + slice_xs.energy_groups.group_edges = sorted(new_group_edges) # Assign sliced nuclides to sliced MGXS if nuclides: @@ -1850,11 +1854,12 @@ class ScatterMatrixXS(MGXS): """ + # Call super class method and null out derived tallies slice_xs = super(ScatterMatrixXS, self).get_slice(nuclides, groups) slice_xs._rxn_rate_tally = None slice_xs._xs_tally = None - # Build lists of filters and filter bins to slice + # Slice energy groups if needed if len(groups) != 0: filter_bins = [] for group in groups: @@ -1862,7 +1867,7 @@ class ScatterMatrixXS(MGXS): filter_bins.append(group_bounds) filter_bins = [tuple(filter_bins)] - # Slice each of the tallies across nuclides and energy groups + # Slice each of the tallies across energyout groups for tally_type, tally in slice_xs.tallies.items(): if tally.contains_filter('energyout'): tally_slice = tally.get_slice(filters=['energyout'], @@ -2215,6 +2220,63 @@ class Chi(MGXS): return self._xs_tally + def get_slice(self, nuclides=[], groups=[]): + """Build a sliced MGXS for the specified nuclides and energy groups. + + This method constructs a new MGXS to encapsulate a subset of the data + represented by this MGXS. The subset of data to include in the tally + slice is determined by the nuclides and energy groups specified in + the input parameters. + + Parameters + ---------- + nuclides : list of str + A list of nuclide name strings + (e.g., ['U-235', 'U-238']; default is []) + groups : list of Integral + A list of energy group indices starting at 1 for the high energies + (e.g., [1, 2, 3]; default is []) + + Returns + ------- + MGXS + A new tally which encapsulates the subset of data requested for the + nuclide(s) and/or energy group(s) requested in the parameters. + + """ + + # Temporarily remove energy filter from nu-fission-in since its + # group structure will work in super MGXS.get_slice(...) method + nu_fission_in = self.tallies['nu-fission-in'] + energy_filter = nu_fission_in.find_filter('energy') + nu_fission_in.remove_filter(energy_filter) + + # Call super class method and null out derived tallies + slice_xs = super(Chi, self).get_slice(nuclides, groups) + slice_xs._rxn_rate_tally = None + slice_xs._xs_tally = None + + # Slice energy groups if needed + if len(groups) != 0: + filter_bins = [] + for group in groups: + group_bounds = self.energy_groups.get_group_bounds(group) + filter_bins.append(group_bounds) + filter_bins = [tuple(filter_bins)] + + # Slice nu-fission-out tally along energyout filter + nu_fission_out = slice_xs.tallies['nu-fission-out'] + tally_slice = nu_fission_out.get_slice(filters=['energyout'], + filter_bins=filter_bins) + slice_xs._tallies['nu-fission-out'] = tally_slice + + # Add energy filter back to nu-fission-in tallies + self.tallies['nu-fission-in'].add_filter(energy_filter) + slice_xs._tallies['nu-fission-in'].add_filter(energy_filter) + + slice_xs.sparse = self.sparse + return slice_xs + def get_xs(self, groups='all', subdomains='all', nuclides='all', xs_type='macro', order_groups='increasing', value='mean'): """Returns an array of the fission spectrum. From 4748f43f9a78449bf618d863af7a098fee6b2568 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Wed, 3 Feb 2016 20:32:20 -0500 Subject: [PATCH 254/650] Switch temperature tag from materials to cells Note that this allows for distributed temperatures --- src/cross_section.F90 | 36 ++++++++++++------- src/geometry.F90 | 30 ++++++++++++++++ src/geometry_header.F90 | 3 ++ src/initialize.F90 | 78 +++++++++++++++++++++++++++++++++++++---- src/input_xml.F90 | 72 ++++++++++++++++++------------------- src/material_header.F90 | 1 - src/particle_header.F90 | 6 +++- 7 files changed, 168 insertions(+), 58 deletions(-) diff --git a/src/cross_section.F90 b/src/cross_section.F90 index b62d9b389c..033e80b174 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -105,10 +105,13 @@ contains i_nuclide = mat % nuclide(i) ! Calculate microscopic cross section for this nuclide - if (p % E /= micro_xs(i_nuclide) % last_E .or. mat % sqrtkT /= micro_xs(i_nuclide) % last_sqrtkT) then - call calculate_nuclide_xs(i_nuclide, i_sab, p % E, p % material, i, i_grid, mat % sqrtkT) + if (p % E /= micro_xs(i_nuclide) % last_E & + .or. p % sqrtkT /= micro_xs(i_nuclide) % last_sqrtkT) then + call calculate_nuclide_xs(i_nuclide, i_sab, p % E, p % material, i, & + i_grid, p % sqrtkT) else if (i_sab /= micro_xs(i_nuclide) % last_index_sab) then - call calculate_nuclide_xs(i_nuclide, i_sab, p % E, p % material, i, i_grid, mat % sqrtkT) + call calculate_nuclide_xs(i_nuclide, i_sab, p % E, p % material, i, & + i_grid, p % sqrtkT) end if ! ======================================================================== @@ -145,7 +148,8 @@ contains ! given index in the nuclides array at the energy of the given particle !=============================================================================== - subroutine calculate_nuclide_xs(i_nuclide, i_sab, E, i_mat, i_nuc_mat, i_log_union, sqrtkT) + subroutine calculate_nuclide_xs(i_nuclide, i_sab, E, i_mat, i_nuc_mat, & + i_log_union, sqrtkT) 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 @@ -590,14 +594,20 @@ contains ! sections in the resolved resonance regions !=============================================================================== - subroutine multipole_eval(multipole, Emev, sqrtkT, sigT, sigA, sigF) - type(MultipoleArray), intent(in) :: multipole ! The windowed multipole object to process. - real(8), intent(in) :: Emev ! The energy at which to evaluate the cross section in MeV - real(8), intent(in) :: sqrtkT ! The temperature in the form sqrt(kT (in eV)), at which to evaluate the cross section. - real(8), intent(out) :: sigT ! Total cross section - real(8), intent(out) :: sigA ! Absorption cross section - real(8), intent(out) :: sigF ! Fission cross section - complex(8) :: psi_ki ! The value of the psi-ki function for the asymptotic form + subroutine multipole_eval(multipole, Emev, sqrtkT_, sigT, sigA, sigF) + type(MultipoleArray), intent(in) :: multipole ! The windowed multipole + ! object to process. + real(8), intent(in) :: Emev ! The energy at which to + ! evaluate the cross section + ! in MeV + real(8), intent(in) :: sqrtkT_ ! The temperature in the form + ! sqrt(kT (in MeV)), at which + ! to evaluate the XS. + real(8), intent(out) :: sigT ! Total cross section + real(8), intent(out) :: sigA ! Absorption cross section + real(8), intent(out) :: sigF ! Fission cross section + complex(8) :: psi_ki ! The value of the psi-ki function for the asymptotic + ! form complex(8) :: c_temp ! complex temporary variable complex(8) :: w_val ! The faddeeva function evaluated at Z complex(8) :: Z ! sqrt(atomic weight ratio / kT) * (sqrt(E) - pole) @@ -607,6 +617,7 @@ contains real(8) :: dopp_ecoef ! sqrt(atomic weight ratio * pi / kT) / E real(8) :: temp ! real temporary value real(8) :: E ! energy, eV + real(8) :: sqrtkT ! sqrt(kT (in eV)) integer :: iP ! index of pole integer :: iC ! index of curvefit integer :: iW ! index of window @@ -617,6 +628,7 @@ contains ! Convert to eV E = Emev * 1.0e6_8 + sqrtkT = sqrtkT_ * 1.0e3_8 sqrtE = sqrt(E) invE = ONE/E diff --git a/src/geometry.F90 b/src/geometry.F90 index 8a38f982b5..5f37f1047b 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -279,6 +279,36 @@ contains p % material = c % material(offset + 1) end if + ! Set the particle temperature + if (size(c % sqrtkT) == 1) then + ! Only one temperature for this cell; assign that one to the particle. + p % sqrtkT = c % sqrtkT(1) + else + ! Distributed instances of this cell have different temperatures. + ! Determine which instance this is and assign the matching temp. + distribcell_index = c % distribcell_index + offset = 0 + do k = 1, p % n_coord + if (cells(p % coord(k) % cell) % type == CELL_FILL) then + offset = offset + cells(p % coord(k) % cell) % & + offset(distribcell_index) + elseif (cells(p % coord(k) % cell) % type == CELL_LATTICE) then + if (lattices(p % coord(k + 1) % lattice) % obj & + % are_valid_indices([& + p % coord(k + 1) % lattice_x, & + p % coord(k + 1) % lattice_y, & + p % coord(k + 1) % lattice_z])) then + offset = offset + lattices(p % coord(k + 1) % lattice) % obj % & + offset(distribcell_index, & + p % coord(k + 1) % lattice_x, & + p % coord(k + 1) % lattice_y, & + p % coord(k + 1) % lattice_z) + end if + end if + end do + p % sqrtkT = c % sqrtkT(offset + 1) + end if + elseif (c % type == CELL_FILL) then CELL_TYPE ! ====================================================================== ! CELL CONTAINS LOWER UNIVERSE, RECURSIVELY FIND CELL diff --git a/src/geometry_header.F90 b/src/geometry_header.F90 index 519b15bff4..0756e23dc4 100644 --- a/src/geometry_header.F90 +++ b/src/geometry_header.F90 @@ -139,6 +139,9 @@ module geometry_header ! only) integer :: distribcell_index ! Index corresponding to this cell in ! distribcell arrays + real(8), allocatable :: sqrtkT(:) ! Square root of k_Boltzmann * + ! temperature in MeV. Multiple for + ! distribcell ! Rotation matrix and translation vector real(8), allocatable :: translation(:) diff --git a/src/initialize.F90 b/src/initialize.F90 index de681fb949..610bfe538b 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -120,6 +120,9 @@ contains ! Create linked lists for multiple instances of the same nuclide call same_nuclide_list() + ! Set undefined cell temperatures to match the material data. + call lookup_material_temperatures() + ! Construct unionized or log energy grid for cross-sections select case (grid_method) case (GRID_NUCLIDE) @@ -967,10 +970,11 @@ contains end do end do - ! We also need distribcell if any distributed materials are present. + ! We also need distribcell if any distributed materials or distributed + ! temperatues are present. if (.not. distribcell_active) then do i = 1, n_cells - if (size(cells(i) % material) > 1) then + if (size(cells(i) % material) > 1 .or. size(cells(i) % sqrtkT) > 1) then distribcell_active = .true. exit end if @@ -995,8 +999,8 @@ contains end do end do - ! Make sure the number of materials matches the number of cell instances for - ! distributed materials. + ! Make sure the number of materials and temperatures matches the number of + ! cell instances. do i = 1, n_cells associate (c => cells(i)) if (size(c % material) > 1) then @@ -1008,6 +1012,15 @@ contains &equal one or the number of instances.") end if end if + if (size(c % sqrtkT) > 1) then + if (size(c % sqrtkT) /= c % instances) then + call fatal_error("Cell " // trim(to_str(c % id)) // " was & + &specified with " // trim(to_str(size(c % sqrtkT))) & + // " temperatures but has " // trim(to_str(c % instances)) & + // " distributed instances. The number of temperatures must & + &equal one or the number of instances.") + end if + end if end associate end do @@ -1049,9 +1062,9 @@ contains end do end do - ! List all cells with multiple (distributed) materials. + ! List all cells with multiple (distributed) materials or temperatures. do i = 1, n_cells - if (size(cells(i) % material) > 1) then + if (size(cells(i) % material) > 1 .or. size(cells(i) % sqrtkT) > 1) then call cell_list % add(i) end if end do @@ -1120,4 +1133,57 @@ contains end subroutine allocate_offsets +!=============================================================================== +! LOOKUP_MATERIAL_TEMPERATURES If any cells have undefined temperatures, try to +! find their temperatures from material data. +!=============================================================================== + + subroutine lookup_material_temperatures() + integer :: i, j, k + real(8) :: min_temp + logical :: warning_given + + warning_given = .false. + do i = 1, n_cells + ! Ignore non-normal cells and cells with defined temperature. + if (cells(i) % type /= CELL_NORMAL) cycle + if (cells(i) % sqrtkT(1) /= ERROR_REAL) cycle + + ! Set the number of temperatures equal to the number of materials. + deallocate(cells(i) % sqrtkT) + allocate(cells(i) % sqrtkT(size(cells(i) % material))) + + ! Check each of the cell materials for temperature data. + do j = 1, size(cells(i) % material) + ! Arbitrarily set void regions to 0K. + if (cells(i) % material(j) == MATERIAL_VOID) then + cells(i) % sqrtkT(j) = ZERO + cycle + end if + + associate (mat => materials(cells(i) % material(j))) + ! Find the temperature of the coldest nuclide. + min_temp = nuclides(mat % nuclide(1)) % kT + do k = 2, mat % n_nuclides + ! Warn the user if the nuclides don't have identical temperatues. + if (nuclides(mat % nuclide(k)) % kT /= min_temp & + .and. .not. warning_given) then + call warning("OpenMC cannot & + &identify the temperature of at least one cell. For the & + &purposes of multipole cross section evaluations, all cells & + &with unknown temperature will be set to the coldest & + &temperature found in the nuclear data for that cell's & + &material") + warning_given = .true. + end if + min_temp = min(min_temp, nuclides(mat % nuclide(k)) % kT) + end do + + ! Set the temperature for this cell instance. + cells(i) % sqrtkT(j) = sqrt(min_temp) + end associate + end do + end do + end subroutine lookup_material_temperatures + end module initialize diff --git a/src/input_xml.F90 b/src/input_xml.F90 index bbf4da4f9e..34cd0f1b95 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -1297,6 +1297,40 @@ contains call get_node_array(node_cell, "translation", c % translation) end if + ! Read cell temperatures. If the temperature is not specified, set it to + ! ERROR_REAL for now. During initialization we'll replace ERROR_REAL with + ! the temperature from the material data. + if (check_for_node(node_cell, "temperature")) then + n = get_arraysize_double(node_cell, "temperature") + if (n > 0) then + ! Make sure this is a "normal" cell. + if (c % material(1) == NONE) call fatal_error("Cell " & + // trim(to_str(c % id)) // " was specified with a temperature & + &but no material. Temperature specification is only valid for & + &cells filled with a material.") + + ! Copy in temperatures + allocate(c % sqrtkT(n)) + call get_node_array(node_cell, "temperature", c % sqrtkT) + + ! Make sure all temperatues are positive + do j = 1, size(c % sqrtkT) + if (c % sqrtkT(j) < ZERO) call fatal_error("Cell " & + // trim(to_str(c % id)) // " was specified with a negative & + &temperature. All cell temperatures must be non-negative.") + end do + + ! Convert to sqrt(kT) + c % sqrtkT(:) = sqrt(K_BOLTZMANN * c % sqrtkT(:)) + else + allocate(c % sqrtkT(1)) + c % sqrtkT(1) = ERROR_REAL + end if + else + allocate(c % sqrtkT(1)) + c % sqrtkT = ERROR_REAL + end if + ! Add cell to dictionary call cell_dict % add_key(c % id, i) @@ -1854,7 +1888,6 @@ contains real(8) :: temp_dble ! temporary double prec. real logical :: file_exists ! does materials.xml exist? logical :: sum_density ! density is taken to be sum of nuclide densities - logical :: temp_known ! Has the temperature yet been defined? character(12) :: name ! name of isotope, e.g. 92235.03c character(12) :: alias ! alias of nuclide, e.g. U-235.03c character(MAX_WORD_LEN) :: units ! units on density @@ -1938,17 +1971,6 @@ contains cycle end if - ! ======================================================================= - ! READ AND PARSE TAG - if (check_for_node(node_mat, "temperature")) then - call get_node_ptr(node_mat, "temperature", node_temp) - call get_node_value(node_temp, "value", temp_dble) - mat % sqrtkT = sqrt(temp_dble * K_BOLTZMANN * 1.0D6) - temp_known = .true. - else - temp_known = .false. - end if - ! ======================================================================= ! READ AND PARSE TAG @@ -2055,16 +2077,6 @@ contains call get_node_value(node_nuc, "xs", name) name = trim(temp_str) // "." // trim(name) - ! If needed, look up temperature - if (.not. temp_known) then - ! Find xs_listing and set the name/alias according to the listing - index_list = xs_listing_dict % get_key(to_lower(name)) - if(xs_listings(index_list) % kT /= 0.0_8) then - mat % sqrtkT = sqrt(xs_listings(index_list) % kT * 1.0D6) - temp_known = .true. - end if - end if - ! save name and density to list call list_names % append(name) @@ -2153,16 +2165,6 @@ contains temp_str = "data" end if - ! If still needed, look up temperature - if (.not. temp_known) then - ! Find xs_listing and set kT - index_list = xs_listing_dict % get_key(to_lower(list_names % tail % data)) - if(xs_listings(index_list) % kT /= 0.0_8) then - mat % sqrtkT = sqrt(xs_listings(index_list) % kT * 1.0D6) - temp_known = .true. - end if - end if - ! Set ace or iso-in-lab scattering for each nuclide in element do k = 1, n_nuc_ele if (adjustl(to_lower(temp_str)) == "iso-in-lab") then @@ -2177,12 +2179,6 @@ contains end do NATURAL_ELEMENTS - ! If still undefined, set the temperature to zero - if (.not. temp_known) then - mat % sqrtkT = 0.0_8 - temp_known = .true. - end if - ! ======================================================================== ! COPY NUCLIDES TO ARRAYS IN MATERIAL diff --git a/src/material_header.F90 b/src/material_header.F90 index 397fa0cd96..91c4cdfb82 100644 --- a/src/material_header.F90 +++ b/src/material_header.F90 @@ -13,7 +13,6 @@ module material_header integer, allocatable :: nuclide(:) ! index in nuclides array real(8) :: density ! total atom density in atom/b-cm real(8), allocatable :: atom_density(:) ! nuclide atom density in atom/b-cm - real(8) :: sqrtkT ! sqrt(kT), kT in eV ! Energy grid information integer :: n_grid ! # of union material grid points diff --git a/src/particle_header.F90 b/src/particle_header.F90 index 0b9b251ee5..f1d7375d7a 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -2,7 +2,7 @@ module particle_header use bank_header, only: Bank use constants, only: NEUTRON, ONE, NONE, ZERO, MAX_SECONDARY, & - MAX_DELAYED_GROUPS + MAX_DELAYED_GROUPS, ERROR_REAL use error, only: fatal_error use geometry_header, only: BASE_UNIVERSE @@ -79,6 +79,9 @@ module particle_header integer :: material ! index for current material integer :: last_material ! index for last material + ! Temperature of the current cell + real(8) :: sqrtkT ! sqrt(k_Boltzmann * temperature) in MeV + ! Statistical data integer :: n_collision ! # of collisions @@ -124,6 +127,7 @@ contains this % absorb_wgt = ZERO this % n_bank = 0 this % wgt_bank = ZERO + this % sqrtkT = ERROR_REAL this % n_collision = 0 this % fission = .false. this % delayed_group = 0 From c835dab6f8598915dd56056f59c8b9d91a75921b Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 3 Feb 2016 20:49:10 -0600 Subject: [PATCH 255/650] Get rid of -ffpe-trap flag for CFLAGS --- CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 528a22e81d..ba89e04506 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -117,8 +117,7 @@ if(CMAKE_Fortran_COMPILER_ID STREQUAL GNU) endif() list(APPEND f90flags -g -pedantic -fbounds-check -ffpe-trap=invalid,overflow,underflow) - list(APPEND cflags -g -pedantic -fbounds-check - -ffpe-trap=invalid,overflow,underflow) + list(APPEND cflags -g -pedantic -fbounds-check) list(APPEND ldflags -g) endif() if(profile) From 0f8ac7bf8754d2341abae7ea0cde2b2046f69213 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Wed, 3 Feb 2016 22:49:12 -0500 Subject: [PATCH 256/650] Update PyAPI for multipole --- openmc/summary.py | 3 +++ openmc/universe.py | 37 ++++++++++++++++++++++++-- src/summary.F90 | 8 ++++++ tests/test_distribmat/results_true.dat | 1 + 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/openmc/summary.py b/openmc/summary.py index eb14d3bb81..d8f8978306 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -264,6 +264,9 @@ class Summary(object): self._f['geometry/cells'][key]['rotation'][...] rotation = np.asarray(rotation, dtype=np.int) cell.rotation = rotation + elif fill_type == 'normal': + cell.temperature = \ + self._f['geometry/cells'][key]['temperature'][...] # Store Cell fill information for after Universe/Lattice creation self._cell_fills[index] = (fill_type, fill) diff --git a/openmc/universe.py b/openmc/universe.py index 237ddce1f7..027d43fc77 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -51,9 +51,13 @@ class Cell(object): name : str Name of the cell fill : Material or Universe or Lattice or 'void' or iterable of Material - Indicates what the region of space is filled with + Indicates what the region of space is filled with. Multiple materials + can be given to give each distributed cell instance a unique material. region : openmc.region.Region Region of space that is assigned to the cell. + temperature : float or iterable of float + Temperature of the cell in Kelvin. Multiple temperatures can be given + to give each distributed cell instance a unique temperature. rotation : ndarray If the cell is filled with a universe, this array specifies the angles in degrees about the x, y, and z axes that the filled universe should be @@ -75,6 +79,7 @@ class Cell(object): self._fill = None self._type = None self._region = None + self._temperature = None self._rotation = None self._translation = None self._offsets = None @@ -91,6 +96,8 @@ class Cell(object): return False elif self.region != other.region: return False + elif self.temperature != other.temperature: + return False elif self.rotation != other.rotation: return False elif self.translation != other.translation: @@ -126,6 +133,10 @@ class Cell(object): string += '{0: <16}{1}{2}\n'.format('\tRegion', '=\t', self._region) + if self.fill_type == 'material': + string += '\t{0: <15}=\t{1}\n'.format('Temperature', + self.temperature) + string += '{0: <16}{1}{2}\n'.format('\tRotation', '=\t', self._rotation) string += '{0: <16}{1}{2}\n'.format('\tTranslation', '=\t', @@ -150,7 +161,7 @@ class Cell(object): @property def fill_type(self): - if isinstance(self.fill, openmc.Material): + if isinstance(self.fill, (openmc.Material, Iterable)): return 'material' elif isinstance(self.fill, openmc.Universe): return 'universe' @@ -163,6 +174,10 @@ class Cell(object): def region(self): return self._region + @property + def temperature(self): + return self._temperature + @property def rotation(self): return self._rotation @@ -251,6 +266,17 @@ class Cell(object): cv.check_type('cell region', region, Region) self._region = region + @temperature.setter + def temperature(self, temperature): + cv.check_type('cell temperature', temperature, (Iterable, Real)) + if isinstance(temperature, Iterable): + cv.check_type('cell temperature', temperature, Iterable, Real) + for T in temperature: + cv.check_greater_than('cell temperature', T, 0.0, True) + else: + cv.check_greater_than('cell temperature', temperature, 0.0, True) + self._temperature = temperature + @distribcell_index.setter def distribcell_index(self, ind): cv.check_type('distribcell index', ind, Integral) @@ -445,6 +471,13 @@ class Cell(object): # Call the recursive function from the top node create_surface_elements(self.region, xml_element) + if self.temperature is not None: + if isinstance(self.temperature, Iterable): + element.set("temperature", ' '.join( + [str(t) for t in self.temperature])) + else: + element.set("temperature", str(self.temperature)) + if self.translation is not None: element.set("translation", ' '.join(map(str, self.translation))) diff --git a/src/summary.F90 b/src/summary.F90 index c06d2549c2..2d8001e845 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -108,6 +108,7 @@ contains integer :: i, j, k, m integer, allocatable :: lattice_universes(:,:,:) integer, allocatable :: cell_materials(:) + real(8), allocatable :: cell_temperatures(:) integer(HID_T) :: geom_group integer(HID_T) :: cells_group, cell_group integer(HID_T) :: surfaces_group, surface_group @@ -151,6 +152,7 @@ contains select case (c%type) case (CELL_NORMAL) call write_dataset(cell_group, "fill_type", "normal") + if (size(c % material) == 1) then if (c % material(1) == MATERIAL_VOID) then call write_dataset(cell_group, "material", MATERIAL_VOID) @@ -171,6 +173,12 @@ contains deallocate(cell_materials) end if + allocate(cell_temperatures(size(c % sqrtkT))) + cell_temperatures(:) = c % sqrtkT(:) + cell_temperatures(:) = cell_temperatures(:)**2 / K_BOLTZMANN + call write_dataset(cell_group, "temperature", cell_temperatures) + deallocate(cell_temperatures) + case (CELL_FILL) call write_dataset(cell_group, "fill_type", "universe") call write_dataset(cell_group, "fill", universes(c%fill)%id) diff --git a/tests/test_distribmat/results_true.dat b/tests/test_distribmat/results_true.dat index 70464fbc6c..73a48907cb 100644 --- a/tests/test_distribmat/results_true.dat +++ b/tests/test_distribmat/results_true.dat @@ -5,6 +5,7 @@ Cell Name = Material = [2, 3, void, 2] Region = -10000 + Temperature = [ 293.60594237 293.60594237 0. 293.60594237] Rotation = None Translation = None Offset = None From d4d8e63475ac95ddec2ba990bda82243818ab6e9 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Wed, 3 Feb 2016 23:10:44 -0500 Subject: [PATCH 257/650] Update multipole docs and add a test --- docs/source/usersguide/input.rst | 9 ++ docs/source/usersguide/output/summary.rst | 4 + src/relaxng/geometry.rnc | 2 + src/relaxng/geometry.rng | 18 +++ tests/test_multipole/inputs_true.dat | 1 + tests/test_multipole/results_true.dat | 12 ++ tests/test_multipole/test_multipole.py | 133 ++++++++++++++++++++++ 7 files changed, 179 insertions(+) create mode 100644 tests/test_multipole/inputs_true.dat create mode 100644 tests/test_multipole/results_true.dat create mode 100644 tests/test_multipole/test_multipole.py diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 30e9ed07b9..0f9a3be18a 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -987,6 +987,15 @@ Each ```` element can have the following attributes or sub-elements: *Default*: A region filling all space. + :temperature: + The temperature of the cell in Kelvin. If windowed-multipole data is + avalable, this temperature will be used to Doppler broaden some cross + sections in the resolved resonance region. A list of temperatures can be + specified for the "distributed temperature" feature. This will give each + unique instance of the cell its own temperature. + + *Default*: The temperature of the coldest nuclide in the cell's material(s) + :rotation: If the cell is filled with a universe, this element specifies the angles in degrees about the x, y, and z axes that the filled universe should be diff --git a/docs/source/usersguide/output/summary.rst b/docs/source/usersguide/output/summary.rst index 83602e5065..3be0cfdfe9 100644 --- a/docs/source/usersguide/output/summary.rst +++ b/docs/source/usersguide/output/summary.rst @@ -98,6 +98,10 @@ The current revision of the summary file format is 1. material. The data is an array if the cell uses distributed materials, otherwise it is a scalar. +**/geometry/cells/cell /temperature** (*double[]*) + + Temperature of the cell in Kelvin. + **/geometry/cells/cell /offset** (*int[]*) Offsets used for distribcell tally filter. This dataset is present only if diff --git a/src/relaxng/geometry.rnc b/src/relaxng/geometry.rnc index 8d25789f5a..1bca009a61 100644 --- a/src/relaxng/geometry.rnc +++ b/src/relaxng/geometry.rnc @@ -9,6 +9,8 @@ element geometry { (element material { ( xsd:int | "void" )+ } | attribute material { ( xsd:int | "void" )+ }) ) & + (element temperature { list { xsd:double+ } } | + attribute temperature { list { xsd:double+ } } )? & (element region { xsd:string } | attribute region { xsd:string })? & (element rotation { list { xsd:double+ } } | attribute rotation { list { xsd:double+ } })? & (element translation { list { xsd:double+ } } | attribute translation { list { xsd:double+ } })? diff --git a/src/relaxng/geometry.rng b/src/relaxng/geometry.rng index d40401b281..ba8eab73d3 100644 --- a/src/relaxng/geometry.rng +++ b/src/relaxng/geometry.rng @@ -64,6 +64,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/tests/test_multipole/inputs_true.dat b/tests/test_multipole/inputs_true.dat new file mode 100644 index 0000000000..a429c9b8d0 --- /dev/null +++ b/tests/test_multipole/inputs_true.dat @@ -0,0 +1 @@ +5c1cec635da5c4c869bdf58f62924a4cb1648e4ddecf0ce71b823cf45178767ba7f2e089b76d36e8616b1b21ffa43b32ab1b17d20bb74120f900b9e3e9ab9bcc \ No newline at end of file diff --git a/tests/test_multipole/results_true.dat b/tests/test_multipole/results_true.dat new file mode 100644 index 0000000000..19dd4d26b7 --- /dev/null +++ b/tests/test_multipole/results_true.dat @@ -0,0 +1,12 @@ +k-combined: +1.445285E+00 9.521660E-03 +Cell + ID = 11 + Name = + Material = 2 + Region = -10000 + Temperature = [ 500. 0. 700. 800.] + Rotation = None + Translation = None + Offset = None + Distribcell index= 1 diff --git a/tests/test_multipole/test_multipole.py b/tests/test_multipole/test_multipole.py new file mode 100644 index 0000000000..a5437e433a --- /dev/null +++ b/tests/test_multipole/test_multipole.py @@ -0,0 +1,133 @@ +#!/usr/bin/env python + +import os +import sys +sys.path.insert(0, os.pardir) +from testing_harness import TestHarness, PyAPITestHarness +import openmc +from openmc.stats import Box +from openmc.source import Source + + +class DistribmatTestHarness(PyAPITestHarness): + def _build_inputs(self): + #################### + # Materials + #################### + + moderator = openmc.Material(material_id=1) + moderator.set_density('g/cc', 1.0) + moderator.add_nuclide('H-1', 2.0) + moderator.add_nuclide('O-16', 1.0) + + dense_fuel = openmc.Material(material_id=2) + dense_fuel.set_density('g/cc', 4.5) + dense_fuel.add_nuclide('U-235', 1.0) + + mats_file = openmc.MaterialsFile() + mats_file.default_xs = '71c' + mats_file.add_materials([moderator, dense_fuel]) + mats_file.export_to_xml() + + + #################### + # Geometry + #################### + + c1 = openmc.Cell(cell_id=1) + c1.fill = moderator + mod_univ = openmc.Universe(universe_id=1) + mod_univ.add_cell(c1) + + r0 = openmc.ZCylinder(R=0.3) + c11 = openmc.Cell(cell_id=11) + c11.region = -r0 + c11.fill = dense_fuel + c11.temperature = [500, 0, 700, 800] + c12 = openmc.Cell(cell_id=12) + c12.region = +r0 + c12.fill = moderator + fuel_univ = openmc.Universe(universe_id=11) + fuel_univ.add_cells((c11, c12)) + + lat = openmc.RectLattice(lattice_id=101) + lat.dimension = [2, 2] + lat.lower_left = [-2.0, -2.0] + lat.pitch = [2.0, 2.0] + lat.universes = [[fuel_univ]*2]*2 + lat.outer = mod_univ + + x0 = openmc.XPlane(x0=-3.0) + x1 = openmc.XPlane(x0=3.0) + y0 = openmc.YPlane(y0=-3.0) + y1 = openmc.YPlane(y0=3.0) + for s in [x0, x1, y0, y1]: + s.boundary_type = 'reflective' + c101 = openmc.Cell(cell_id=101) + c101.region = +x0 & -x1 & +y0 & -y1 + c101.fill = lat + root_univ = openmc.Universe(universe_id=0) + root_univ.add_cell(c101) + + geometry = openmc.Geometry() + geometry.root_universe = root_univ + geo_file = openmc.GeometryFile() + geo_file.geometry = geometry + geo_file.export_to_xml() + + + #################### + # Settings + #################### + + sets_file = openmc.SettingsFile() + sets_file.batches = 5 + sets_file.inactive = 0 + sets_file.particles = 1000 + sets_file.source = Source(space=Box([-1, -1, -1], [1, 1, 1])) + sets_file.output = {'summary': True} + sets_file.export_to_xml() + + + #################### + # Plots + #################### + + plots_file = openmc.PlotsFile() + + plot = openmc.Plot(plot_id=1) + plot.basis = 'xy' + plot.color = 'cell' + plot.filename = 'cellplot' + plot.origin = (0, 0, 0) + plot.width = (7, 7) + plot.pixels = (400, 400) + plots_file.add_plot(plot) + + plot = openmc.Plot(plot_id=2) + plot.basis = 'xy' + plot.color = 'mat' + plot.filename = 'matplot' + plot.origin = (0, 0, 0) + plot.width = (7, 7) + plot.pixels = (400, 400) + plots_file.add_plot(plot) + + plots_file.export_to_xml() + + def _get_results(self): + outstr = super(DistribmatTestHarness, self)._get_results() + su = openmc.Summary('summary.h5') + outstr += str(su.get_cell_by_id(11)) + return outstr + + def _cleanup(self): + f = os.path.join(os.getcwd(), 'plots.xml') + if os.path.exists(f): + os.remove(f) + super(DistribmatTestHarness, self)._cleanup() + + +if __name__ == '__main__': + harness = DistribmatTestHarness('statepoint.5.*') + harness.main() From 628daeb48a2bafc7f40dbddc8642d7e9c1d3199f Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 4 Feb 2016 09:11:47 -0500 Subject: [PATCH 258/650] Now require numpy >=1.9 in install_requires per request by @paulromano --- setup.py | 2 +- tests/test_asymmetric_lattice/test_asymmetric_lattice.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 0bf4549c03..87fdff68cf 100644 --- a/setup.py +++ b/setup.py @@ -32,7 +32,7 @@ kwargs = {'name': 'openmc', if have_setuptools: kwargs.update({ # Required dependencies - 'install_requires': ['numpy', 'h5py', 'matplotlib'], + 'install_requires': ['numpy>=1.9', 'h5py', 'matplotlib'], # Optional dependencies 'extras_require': { diff --git a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py index 0080078aa3..5a1d47ef85 100644 --- a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py +++ b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py @@ -69,7 +69,7 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): # Assign the tallies file to the input set self._input_set.tallies = tallies_file - + # Build default settings self._input_set.build_default_settings() # Specify summary output and correct source sampling box From 0439b6cc6d3f7d6f51441f3edfd1c88eface0f88 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 4 Feb 2016 09:13:06 -0500 Subject: [PATCH 259/650] Now require numpy >=1.9 in install_requires per request by @paulromano --- setup.py | 2 +- tests/test_asymmetric_lattice/test_asymmetric_lattice.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 0bf4549c03..87fdff68cf 100644 --- a/setup.py +++ b/setup.py @@ -32,7 +32,7 @@ kwargs = {'name': 'openmc', if have_setuptools: kwargs.update({ # Required dependencies - 'install_requires': ['numpy', 'h5py', 'matplotlib'], + 'install_requires': ['numpy>=1.9', 'h5py', 'matplotlib'], # Optional dependencies 'extras_require': { diff --git a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py index 0080078aa3..5a1d47ef85 100644 --- a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py +++ b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py @@ -69,7 +69,7 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): # Assign the tallies file to the input set self._input_set.tallies = tallies_file - + # Build default settings self._input_set.build_default_settings() # Specify summary output and correct source sampling box From 076117c3aa1d1d73d0fde21ca9c230725848d0e0 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 4 Feb 2016 19:30:11 -0500 Subject: [PATCH 260/650] MGXS Library now properly deep copies domains dictionary --- openmc/mgxs/library.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index e87b4bdaef..a38e42d245 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -116,11 +116,11 @@ class Library(object): clone._by_nuclide = self.by_nuclide clone._mgxs_types = self.mgxs_types clone._domain_type = self.domain_type - clone._domains = self.domains + clone._domains = copy.deepcopy(self.domains) clone._correction = self.correction clone._energy_groups = copy.deepcopy(self.energy_groups, memo) clone._tally_trigger = copy.deepcopy(self.tally_trigger, memo) - clone._all_mgxs = self.all_mgxs + clone._all_mgxs = copy.deepcopy(self.all_mgxs) clone._sp_filename = self._sp_filename clone._keff = self._keff clone._sparse = self.sparse From 5f2e466d868bb6629b28983b0909ebcc6169acd9 Mon Sep 17 00:00:00 2001 From: Colin Josey Date: Thu, 4 Feb 2016 20:55:15 -0500 Subject: [PATCH 261/650] Remove obsolete multipole edist update --- src/multipole.F90 | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/multipole.F90 b/src/multipole.F90 index 9720b3591e..4ed28a2dbf 100644 --- a/src/multipole.F90 +++ b/src/multipole.F90 @@ -150,22 +150,6 @@ contains nuc % reactions(j) % threshold = 1 ! TODO: reconsider implications. nuc % reactions(j) % Q_value = nuc % reactions(j) % Q_value / 1.0D6 - ! Update edist values TODO: does this do anything when - ! the version of data is identical? - if (associated(nuc % reactions(j) % edist)) then - if (nuc % reactions(j) % edist % law == 3) then - ! Search for first XS /= 0 for the threshold. - searchQ: do k = 1, nuc % n_grid - if (nuc % reactions(j) % sigma(k) /= ZERO) then - if (k /= 1) then - nuc % reactions(j) % edist % data(1) = nuc % energy(k-1) - end if - exit searchQ - end if - end do searchQ - end if - end if - ! Accumulate total if (MT(i) /= N_LEVEL .and. MT(i) <= N_DA) then nuc % total = nuc % total + nuc % reactions(j) % sigma From 86d5600eb25e75b60bcdbfab175a71c7d45e8598 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 5 Feb 2016 05:37:50 -0500 Subject: [PATCH 262/650] fixes per @smharpers comments --- docs/source/usersguide/mgxs_library.rst | 25 +- .../python/pincell_multigroup/build-xml.py | 2 +- openmc/macroscopic.py | 2 +- src/global.F90 | 4 - src/input_xml.F90 | 2 +- src/macroxs.F90 | 2 +- src/macroxs_header.F90 | 213 +----------------- src/math.F90 | 2 +- src/mgxs_data.F90 | 3 +- src/nuclide_header.F90 | 10 +- src/particle_header.F90 | 1 - src/scattdata_header.F90 | 87 ++----- src/tally.F90 | 148 ++++++------ 13 files changed, 124 insertions(+), 377 deletions(-) diff --git a/docs/source/usersguide/mgxs_library.rst b/docs/source/usersguide/mgxs_library.rst index d0dc1e54f5..478b060024 100644 --- a/docs/source/usersguide/mgxs_library.rst +++ b/docs/source/usersguide/mgxs_library.rst @@ -114,20 +114,25 @@ attributes/sub-elements required to describe the meta-data: *Default*: "isotropic" :num_azimuthal: - This element provides the number of equi-width bins that the azimuthal - angular domain is subdivided in the case of angle-dependent cross sections - (i.e., "angle" is passed to the ``representation`` element). + This element provides the number of equal width angular bins that the + azimuthal angular domain is subdivided in the case of angle-dependent + cross sections (i.e., "angle" is passed to the ``representation`` element). + Note that these bins are equal in azimuthal angle widths, not equal in the + cosine of the azimuthal angle widths. - *Default*: If ``representation`` is "angle", this must be provided. If - not, this parameter is not used. + *Default*: If ``representation`` is "angle", this must be provided. This + parameter is not used for other ``representation`` types. :num_polar: - This element provides the number of equi-width bins that the polar angular - domain is subdivided in the case of angle-dependent cross sections - (i.e., "angle" is passed to the ``representation`` element). + This element provides the number of equal width angular bins that the + polar angular domain is subdivided in the case of angle-dependent + cross sections (i.e., "angle" is passed to the ``representation`` element). + Note that these bins are equal in polar angle widths, not equal in the + cosine of the polar angle widths. - *Default*: If ``representation`` is "angle", this must be provided. If - not, this parameter is not used. + + *Default*: If ``representation`` is "angle", this must be provided. This + parameter is not used for other ``representation`` types. :scatt_type: This element provides the representation of the angular distribution diff --git a/examples/python/pincell_multigroup/build-xml.py b/examples/python/pincell_multigroup/build-xml.py index ba15370c3b..17fbae9941 100644 --- a/examples/python/pincell_multigroup/build-xml.py +++ b/examples/python/pincell_multigroup/build-xml.py @@ -72,7 +72,7 @@ mg_cross_sections_file.export_to_xml() uo2_data = openmc.Macroscopic('UO2', '300K') h2o_data = openmc.Macroscopic('LWTR', '300K') -# Instantiate some Materials and register the appropriate Nuclides +# Instantiate some Materials and register the appropriate Macroscopic objects uo2 = openmc.Material(material_id=1, name='UO2 fuel') uo2.set_density('macro', 1.0) uo2.add_macroscopic(uo2_data) diff --git a/openmc/macroscopic.py b/openmc/macroscopic.py index 094fa50421..9f67a50ba4 100644 --- a/openmc/macroscopic.py +++ b/openmc/macroscopic.py @@ -8,7 +8,7 @@ if sys.version_info[0] >= 3: class Macroscopic(object): - """A nuclide that can be used in a material. + """A Macroscopic object that can be used in a material. Parameters ---------- diff --git a/src/global.F90 b/src/global.F90 index 9b68eab6a4..dda4e0aea2 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -490,10 +490,6 @@ contains end if if (allocated(macro_xs)) then - ! First call the clear routines - do i = 1, size(macro_xs) - call macro_xs(i) % obj % clear() - end do deallocate(macro_xs) end if diff --git a/src/input_xml.F90 b/src/input_xml.F90 index e726b6f403..2a21bac215 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -2071,7 +2071,7 @@ contains call get_list_item(node_macro_list, 1, node_nuc) ! Check for empty name on nuclide - if (.not.check_for_node(node_nuc, "name")) then + if (.not. check_for_node(node_nuc, "name")) then call fatal_error("No name specified on macroscopic data in material " & // trim(to_str(mat % id))) end if diff --git a/src/macroxs.F90 b/src/macroxs.F90 index c26e9e888b..f44f87f66f 100644 --- a/src/macroxs.F90 +++ b/src/macroxs.F90 @@ -140,7 +140,7 @@ contains !=============================================================================== subroutine macroxs_sample_scatter(scatt, gin, gout, mu, wgt) - Class(ScattData_Base), intent(in) :: scatt ! Scattering Object to Use + class(ScattData_Base), intent(in) :: scatt ! Scattering Object to Use integer, intent(in) :: gin ! Incoming neutron group integer, intent(out) :: gout ! Sampled outgoin group real(8), intent(out) :: mu ! Sampled change in angle diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index 63e6fecaed..17ee8a1e0e 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -19,10 +19,9 @@ module macroxs_header integer :: order ! Type-Bound procedures - contains - procedure(macroxs_init_), deferred, pass :: init ! initializes object - procedure(macroxs_clear_), deferred, pass :: clear ! Deallocates object - procedure(macroxs_get_xs_), deferred, pass :: get_xs ! Return xs + contains + procedure(macroxs_init_), deferred, pass :: init ! initializes object + procedure(macroxs_get_xs_), deferred, pass :: get_xs ! Return xs end type MacroXS_Base abstract interface @@ -79,11 +78,10 @@ module macroxs_header real(8), allocatable :: scattxs(:) ! scattering xs real(8), allocatable :: chi(:,:) ! fission spectra - ! Type-Bound procedures - contains - procedure, pass :: init => macroxs_iso_init ! inits object - procedure, pass :: clear => macroxs_iso_clear ! Deallocates object - procedure, pass :: get_xs => macroxs_iso_get_xs ! Returns xs + ! Type-Bound procedures + contains + procedure, pass :: init => macroxs_iso_init ! inits object + procedure, pass :: get_xs => macroxs_iso_get_xs ! Returns xs end type MacroXS_Iso type, extends(MacroXS_Base) :: MacroXS_Angle @@ -99,11 +97,10 @@ module macroxs_header real(8), allocatable :: polar(:) ! polar angles real(8), allocatable :: azimuthal(:) ! azimuthal angles - ! Type-Bound procedures - contains - procedure, pass :: init => macroxs_angle_init ! inits object - procedure, pass :: clear => macroxs_angle_clear ! Deallocates object - procedure, pass :: get_xs => macroxs_angle_get_xs ! Returns xs + ! Type-Bound procedures + contains + procedure, pass :: init => macroxs_angle_init ! inits object + procedure, pass :: get_xs => macroxs_angle_get_xs ! Returns xs end type MacroXS_Angle !=============================================================================== @@ -657,68 +654,6 @@ contains end subroutine macroxs_angle_init -!=============================================================================== -! MACROXS*_CLEAR resets and deallocates data in MacroXS. -!=============================================================================== - - subroutine macroxs_iso_clear(this) - - class(MacroXS_Iso), intent(inout) :: this ! The MacroXS to clear - - if (allocated(this % total)) then - deallocate(this % total, this % absorption, & - this % nu_fission) - end if - - if (allocated(this % fission)) then - deallocate(this % fission) - end if - - if (allocated(this % k_fission)) then - deallocate(this % k_fission) - end if - - call this % scatter % clear() - - if (allocated(this % chi)) then - deallocate(this % chi) - end if - - end subroutine macroxs_iso_clear - - subroutine macroxs_angle_clear(this) - - class(MacroXS_Angle), intent(inout) :: this ! The MacroXS to clear - integer :: i, j - - if (allocated(this % total)) then - deallocate(this % total, this % absorption, & - this % nu_fission) - end if - - if (allocated(this % fission)) then - deallocate(this % fission) - end if - - if (allocated(this % k_fission)) then - deallocate(this % k_fission) - end if - - do i = 1, size(this % scatter,dim=2) - do j = 1, size(this % scatter,dim=1) - call this % scatter(j,i) % obj % clear() - end do - end do - if (allocated(this % scatter)) then - deallocate(this % scatter) - end if - - if (allocated(this % chi)) then - deallocate(this % chi) - end if - - end subroutine macroxs_angle_clear - !=============================================================================== ! MACROXS_*_GET_XS returns the requested data type !=============================================================================== @@ -790,130 +725,4 @@ contains end function macroxs_angle_get_xs -!=============================================================================== -! THIN_GRID thins an (x,y) set while also thinning an associated y2 -!=============================================================================== - - subroutine thin_grid(xout, yout, yout2, tol, compression, maxerr) - real(8), allocatable, intent(inout) :: xout(:) ! Resultant x grid - real(8), allocatable, intent(inout) :: yout(:) ! Resultant y values - real(8), allocatable, intent(inout) :: yout2(:) ! Secondary y values - real(8), intent(in) :: tol ! Desired fractional error to maintain - real(8), intent(out) :: compression ! Data reduction fraction - real(8), intent(inout) :: maxerr ! Maximum error due to compression - - real(8), allocatable :: xin(:) ! Incoming x grid - real(8), allocatable :: yin(:) ! Incoming y values - real(8), allocatable :: yin2(:) ! Secondary Incoming y values - integer :: k, klo, khi - integer :: all_ok - real(8) :: x1, y1, x2, y2, x, y, testval - integer :: num_keep, remove_it - real(8) :: initial_size - real(8) :: error - real(8) :: x_frac - - initial_size = real(size(xout), 8) - - allocate(xin(size(xout))) - xin = xout - allocate(yin(size(yout))) - yin = yout - allocate(yin2(size(yout2))) - yin2 = yout2 - - all_ok = size(yin) - maxerr = 0.0_8 - - ! This loop will step through each entry in dim==3 and check to see if - ! all of the values in other 2 dims can be replaced with linear interp. - ! If not, the value will be saved to a new array, if so, it will be - ! skipped. - - xout = 0.0_8 - yout = 0.0_8 - - ! Keep first point's data - xout(1) = xin(1) - yout(1) = yin(1) - yout2(1) = yin2(1) - - ! Initialize data - num_keep = 1 - klo = 1 - khi = 3 - k = 2 - do while (khi <= size(xin)) - remove_it = 0 - x1 = xin(klo) - x2 = xin(khi) - x = xin(k) - x_frac = 1.0_8 / (x2 - x1) * (x - x1) ! Linear interp. - - ! Check for removal. Otherwise, it stays. This is accomplished by leaving - ! remove_it as 0, entering the else portion of if(remove_it==all_ok) - y1 = yin(klo) - y2 = yin(khi) - y = yin(k) - - testval = y1 + (y2 - y1) * x_frac - error = abs(testval - y) - if (y /= 0.0_8) then - error = error / y - end if - if (error <= tol) then - remove_it = remove_it + 1 - if (error > maxerr) then - maxerr = abs(testval - y) - end if - end if - ! Now place the point in to the proper bin and advance iterators. - if (remove_it /= 0) then - ! Then don't put it in the new grid but advance iterators - k = k + 1 - khi = khi + 1 - else - ! Put it in new grid and advance iterators accordingly - num_keep = num_keep + 1 - xout(num_keep) = xin(k) - yout(num_keep) = yin(k) - yout2(num_keep) = yin2(k) - klo = k - k = k + 1 - khi = khi + 1 - end if - end do - ! Save the last point's data - num_keep = num_keep + 1 - xout(num_keep) = xin(size(xin)) - yout(num_keep) = yin(size(xin)) - yout2(num_keep) = yin2(size(xin)) - - ! Finally, xout and yout were sized to match xin and yin since we knew - ! they would be no larger than those. Now we must resize these arrays - ! and copy only the useful data in. Will use xin/yin for temp arrays. - xin = xout(1:num_keep) - yin = yout(1:num_keep) - yin2 = yout2(1:num_keep) - - deallocate(xout) - deallocate(yout) - deallocate(yout2) - allocate(xout(num_keep)) - allocate(yout(size(yin))) - allocate(yout2(size(yin2))) - - xout = xin(1:num_keep) - yout = yin(1:num_keep) - yout2 = yin2(1:num_keep) - - ! Clean up - deallocate(xin) - deallocate(yin) - deallocate(yin2) - - compression = (initial_size - real(size(xout),8)) / initial_size - - end subroutine thin_grid - end module macroxs_header diff --git a/src/math.F90 b/src/math.F90 index aedf182358..36c65a2402 100644 --- a/src/math.F90 +++ b/src/math.F90 @@ -558,7 +558,7 @@ contains end function calc_rn !=============================================================================== -! EXPAND_HARMONIC expands a given series of harmonics +! EXPAND_HARMONIC expands a given series of real spherical harmonics !=============================================================================== pure function expand_harmonic(data, order, uvw) result(val) real(8), intent(in) :: data(:) diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 880764edad..f73f3f5a27 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -76,8 +76,7 @@ contains get_fiss = .true. end if end do - if (get_kfiss .and. get_fiss) & - exit + if (get_kfiss .and. get_fiss) exit end do ! ========================================================================== diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 398e91eb20..95f9833b4c 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -155,7 +155,7 @@ module nuclide_header end function nuclide_calc_f_ end interface - !=============================================================================== +!=============================================================================== ! NUCLIDE_ISO contains the base MGXS data for a nuclide specifically for ! isotropically weighted MGXS !=============================================================================== @@ -688,11 +688,12 @@ module nuclide_header end function nuclide_angle_get_xs !=============================================================================== -! NUCLIDE_*_CALC_F Finds the value of f(mu), the scattering probability, given mu +! NUCLIDE_*_CALC_F Finds the value of f(mu), the scattering angle probability, +! given mu !=============================================================================== - pure function nuclide_mg_iso_calc_f(this, gin, gout, mu, uvw, i_azi, i_pol) & - result(f) + pure function nuclide_mg_iso_calc_f(this, gin, gout, mu, uvw, i_azi, i_pol) & + result(f) class(Nuclide_Iso), intent(in) :: this integer, intent(in) :: gin ! Incoming Energy Group integer, intent(in) :: gout ! Outgoing Energy Group @@ -791,6 +792,7 @@ module nuclide_header end if end function nuclide_mg_angle_calc_f + !=============================================================================== ! find_angle finds the closest angle on the data grid and returns that index !=============================================================================== diff --git a/src/particle_header.F90 b/src/particle_header.F90 index 0e9fc0263a..0426acd924 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -132,7 +132,6 @@ contains this % fission = .false. this % delayed_group = 0 this % n_delayed_bank(:) = 0 - ! Initialize this % g so there is always at least some initialized value this % g = 1 ! Set up base level coordinates diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index 29ab616e0a..091a77741a 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -16,11 +16,10 @@ module scattdata_header real(8), allocatable :: mult(:,:) ! (Gout x Gin) real(8), allocatable :: data(:,:,:) ! (Order/Nmu x Gout x Gin) - ! Type-Bound procedures - contains - procedure(init_), deferred, pass :: init ! Initializes ScattData - procedure(calc_f_), deferred, pass :: calc_f ! Calculates f, given mu - procedure(clear_), deferred, pass :: clear ! Deallocates ScattData + ! Type-Bound procedures + contains + procedure(init_), deferred, pass :: init ! Initializes ScattData + procedure(calc_f_), deferred, pass :: calc_f ! Calculates f, given mu end type ScattData_Base abstract interface @@ -42,37 +41,29 @@ module scattdata_header real(8) :: f ! Return value of f(mu) end function calc_f_ - - subroutine clear_(this) - import ScattData_Base - class(ScattData_Base), intent(inout) :: this ! The ScattData to clear - end subroutine clear_ end interface type, extends(ScattData_Base) :: ScattData_Legendre - contains - procedure, pass :: init => scattdata_legendre_init - procedure, pass :: calc_f => scattdata_legendre_calc_f - procedure, pass :: clear => scattdata_legendre_clear + contains + procedure, pass :: init => scattdata_legendre_init + procedure, pass :: calc_f => scattdata_legendre_calc_f end type ScattData_Legendre type, extends(ScattData_Base) :: ScattData_Histogram real(8), allocatable :: mu(:) ! Mu bins real(8) :: dmu ! Mu spacing - contains - procedure, pass :: init => scattdata_histogram_init - procedure, pass :: calc_f => scattdata_histogram_calc_f - procedure, pass :: clear => scattdata_histogram_clear + contains + procedure, pass :: init => scattdata_histogram_init + procedure, pass :: calc_f => scattdata_histogram_calc_f end type ScattData_Histogram type, extends(ScattData_Base) :: ScattData_Tabular real(8), allocatable :: mu(:) ! Mu bins real(8) :: dmu ! Mu spacing real(8), allocatable :: fmu(:,:,:) ! PDF of f(mu) - contains - procedure, pass :: init => scattdata_tabular_init - procedure, pass :: calc_f => scattdata_tabular_calc_f - procedure, pass :: clear => scattdata_tabular_clear + contains + procedure, pass :: init => scattdata_tabular_init + procedure, pass :: calc_f => scattdata_tabular_calc_f end type ScattData_Tabular !=============================================================================== @@ -239,56 +230,6 @@ contains end subroutine scattdata_tabular_init -!=============================================================================== -! SCATTDATA_CLEAR resets and deallocates data in ScattData. -!=============================================================================== - - subroutine scattdata_base_clear(this) - class(ScattData_Base), intent(inout) :: this - - if (allocated(this % energy)) then - deallocate(this % energy) - end if - - if (allocated(this % mult)) then - deallocate(this % mult) - end if - - if (allocated(this % data)) then - deallocate(this % data) - end if - - end subroutine scattdata_base_clear - - subroutine scattdata_legendre_clear(this) - class(ScattData_Legendre), intent(inout) :: this - - call scattdata_base_clear(this) - - end subroutine scattdata_legendre_clear - - subroutine scattdata_histogram_clear(this) - class(ScattData_Histogram), intent(inout) :: this - - call scattdata_base_clear(this) - - if (allocated(this % mu)) then - deallocate(this % mu) - end if - - end subroutine scattdata_histogram_clear - - subroutine scattdata_tabular_clear(this) - class(ScattData_Tabular), intent(inout) :: this - - call scattdata_base_clear(this) - - if (allocated(this % mu)) then - deallocate(this % mu) - end if - - end subroutine scattdata_tabular_clear - !=============================================================================== ! SCATTDATA_*_CALC_F Calculates the value of f given mu (and gin,gout pair) !=============================================================================== @@ -350,6 +291,4 @@ contains end function scattdata_tabular_calc_f - - end module scattdata_header \ No newline at end of file diff --git a/src/tally.F90 b/src/tally.F90 index bbe099c3e4..e127cf0378 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -26,6 +26,8 @@ module tally integer :: position(N_FILTER_TYPES - 3) = 0 ! Tally map positioning array +!$omp threadprivate(position) + procedure(score_general_intfc), pointer :: score_general => null() procedure(get_scoring_bins_intfc), pointer :: get_scoring_bins => null() @@ -52,8 +54,6 @@ module tally end interface -!$omp threadprivate(position) - contains !=============================================================================== @@ -1255,97 +1255,95 @@ contains real(8) :: uvw(3) select case(score_bin) - - - case (SCORE_SCATTER_N, SCORE_NU_SCATTER_N) - ! Find the scattering order for a singly requested moment, and - ! store its moment contribution. - if (t % moment_order(i) == 1) then - score = score * p % mu ! avoid function call overhead - else - score = score * calc_pn(t % moment_order(i), p % mu) - endif + case (SCORE_SCATTER_N, SCORE_NU_SCATTER_N) + ! Find the scattering order for a singly requested moment, and + ! store its moment contribution. + if (t % moment_order(i) == 1) then + score = score * p % mu ! avoid function call overhead + else + score = score * calc_pn(t % moment_order(i), p % mu) + endif !$omp atomic - t % results(score_index, filter_index) % value = & - t % results(score_index, filter_index) % value + score + t % results(score_index, filter_index) % value = & + t % results(score_index, filter_index) % value + score - case(SCORE_SCATTER_YN, SCORE_NU_SCATTER_YN) - score_index = score_index - 1 - num_nm = 1 - ! Find the order for a collection of requested moments - ! and store the moment contribution of each - do n = 0, t % moment_order(i) - ! determine scoring bin index - score_index = score_index + num_nm - ! Update number of total n,m bins for this n (m = [-n: n]) - num_nm = 2 * n + 1 + case(SCORE_SCATTER_YN, SCORE_NU_SCATTER_YN) + score_index = score_index - 1 + num_nm = 1 + ! Find the order for a collection of requested moments + ! and store the moment contribution of each + do n = 0, t % moment_order(i) + ! determine scoring bin index + score_index = score_index + num_nm + ! Update number of total n,m bins for this n (m = [-n: n]) + num_nm = 2 * n + 1 - ! multiply score by the angular flux moments and store + ! multiply score by the angular flux moments and store !$omp critical (score_general_scatt_yn) - t % results(score_index: score_index + num_nm - 1, filter_index) & - % value = t & - % results(score_index: score_index + num_nm - 1, filter_index)& - % value & - + score * calc_pn(n, p % mu) * calc_rn(n, p % last_uvw) + t % results(score_index: score_index + num_nm - 1, filter_index) & + % value = t & + % results(score_index: score_index + num_nm - 1, filter_index)& + % value & + + score * calc_pn(n, p % mu) * calc_rn(n, p % last_uvw) !$omp end critical (score_general_scatt_yn) - end do - i = i + (t % moment_order(i) + 1)**2 - 1 + end do + i = i + (t % moment_order(i) + 1)**2 - 1 - case(SCORE_FLUX_YN, SCORE_TOTAL_YN) - score_index = score_index - 1 - num_nm = 1 - if (t % estimator == ESTIMATOR_ANALOG .or. & - t % estimator == ESTIMATOR_COLLISION) then - uvw = p % last_uvw - else if (t % estimator == ESTIMATOR_TRACKLENGTH) then - uvw = p % coord(1) % uvw - end if - ! Find the order for a collection of requested moments - ! and store the moment contribution of each - do n = 0, t % moment_order(i) - ! determine scoring bin index - score_index = score_index + num_nm - ! Update number of total n,m bins for this n (m = [-n: n]) - num_nm = 2 * n + 1 + case(SCORE_FLUX_YN, SCORE_TOTAL_YN) + score_index = score_index - 1 + num_nm = 1 + if (t % estimator == ESTIMATOR_ANALOG .or. & + t % estimator == ESTIMATOR_COLLISION) then + uvw = p % last_uvw + else if (t % estimator == ESTIMATOR_TRACKLENGTH) then + uvw = p % coord(1) % uvw + end if + ! Find the order for a collection of requested moments + ! and store the moment contribution of each + do n = 0, t % moment_order(i) + ! determine scoring bin index + score_index = score_index + num_nm + ! Update number of total n,m bins for this n (m = [-n: n]) + num_nm = 2 * n + 1 - ! multiply score by the angular flux moments and store + ! multiply score by the angular flux moments and store !$omp critical (score_general_flux_tot_yn) - t % results(score_index: score_index + num_nm - 1, filter_index) & - % value = t & - % results(score_index: score_index + num_nm - 1, filter_index)& - % value & - + score * calc_rn(n, uvw) + t % results(score_index: score_index + num_nm - 1, filter_index) & + % value = t & + % results(score_index: score_index + num_nm - 1, filter_index)& + % value & + + score * calc_rn(n, uvw) !$omp end critical (score_general_flux_tot_yn) - end do - i = i + (t % moment_order(i) + 1)**2 - 1 + end do + i = i + (t % moment_order(i) + 1)**2 - 1 - case (SCORE_SCATTER_PN, SCORE_NU_SCATTER_PN) - score_index = score_index - 1 - ! Find the scattering order for a collection of requested moments - ! and store the moment contribution of each - do n = 0, t % moment_order(i) - ! determine scoring bin index - score_index = score_index + 1 + case (SCORE_SCATTER_PN, SCORE_NU_SCATTER_PN) + score_index = score_index - 1 + ! Find the scattering order for a collection of requested moments + ! and store the moment contribution of each + do n = 0, t % moment_order(i) + ! determine scoring bin index + score_index = score_index + 1 - ! get the score and tally it -!$omp atomic - t % results(score_index, filter_index) % value = & - t % results(score_index, filter_index) % value & - + score * calc_pn(n, p % mu) - end do - i = i + t % moment_order(i) - - - case default + ! get the score and tally it !$omp atomic t % results(score_index, filter_index) % value = & - t % results(score_index, filter_index) % value + score + t % results(score_index, filter_index) % value & + + score * calc_pn(n, p % mu) + end do + i = i + t % moment_order(i) - end select + case default +!$omp atomic + t % results(score_index, filter_index) % value = & + t % results(score_index, filter_index) % value + score + + + end select end subroutine expand_and_score From 4d27f7eab042f050bbe83dfa20e57cf1a23f0146 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 5 Feb 2016 21:13:54 -0500 Subject: [PATCH 263/650] Renaming Nuclide_* to Nuclide* --- src/ace.F90 | 18 ++--- src/cross_section.F90 | 6 +- src/energy_grid.F90 | 6 +- src/fission.F90 | 10 +-- src/global.F90 | 2 +- src/initialize.F90 | 4 +- src/macroxs.F90 | 2 +- src/macroxs_header.F90 | 18 ++--- src/mgxs_data.F90 | 40 +++++----- src/nuclide_header.F90 | 162 ++++++++++++++++++++--------------------- src/output.F90 | 4 +- src/physics.F90 | 18 ++--- 12 files changed, 145 insertions(+), 145 deletions(-) diff --git a/src/ace.F90 b/src/ace.F90 index 45b58a8d54..5012c9b884 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -54,7 +54,7 @@ contains character(12) :: name ! name of isotope, e.g. 92235.03c character(12) :: alias ! alias of nuclide, e.g. U-235.03c type(Material), pointer :: mat - type(Nuclide_CE), pointer :: nuc + type(NuclideCE), pointer :: nuc type(SAlphaBeta), pointer :: sab type(SetChar) :: already_read @@ -265,7 +265,7 @@ contains character(10) :: mat ! material identifier character(70) :: comment ! comment for ACE table character(MAX_FILE_LEN) :: filename ! path to ACE cross section library - type(Nuclide_CE), pointer :: nuc + type(NuclideCE), pointer :: nuc type(SAlphaBeta), pointer :: sab type(XsListing), pointer :: listing @@ -422,7 +422,7 @@ contains !=============================================================================== subroutine read_esz(nuc, data_0K) - type(Nuclide_CE), intent(inout) :: nuc + type(NuclideCE), intent(inout) :: nuc logical, intent(in) :: data_0K ! are we reading 0K data? integer :: NE ! number of energy points for total and elastic cross sections @@ -510,7 +510,7 @@ contains !=============================================================================== subroutine read_nu_data(nuc) - type(Nuclide_CE), intent(inout) :: nuc + type(NuclideCE), intent(inout) :: nuc integer :: i ! loop index integer :: JXS2 ! location for fission nu data @@ -714,7 +714,7 @@ contains !=============================================================================== subroutine read_reactions(nuc) - type(Nuclide_CE), intent(inout) :: nuc + type(NuclideCE), intent(inout) :: nuc integer :: i ! loop indices integer :: i_fission ! index in nuc % index_fission @@ -894,7 +894,7 @@ contains !=============================================================================== subroutine read_angular_dist(nuc) - type(Nuclide_CE), intent(inout) :: nuc + type(NuclideCE), intent(inout) :: nuc integer :: LOCB ! location of angular distribution for given MT integer :: NE ! number of incoming energies @@ -998,7 +998,7 @@ contains !=============================================================================== subroutine read_energy_dist(nuc) - type(Nuclide_CE), intent(inout) :: nuc + type(NuclideCE), intent(inout) :: nuc integer :: i ! loop index integer :: n @@ -1386,7 +1386,7 @@ contains !=============================================================================== subroutine read_unr_res(nuc) - type(Nuclide_CE), intent(inout) :: nuc + type(NuclideCE), intent(inout) :: nuc integer :: JXS23 ! location of URR data integer :: lc ! locator @@ -1474,7 +1474,7 @@ contains !=============================================================================== subroutine generate_nu_fission(nuc) - type(Nuclide_CE), intent(inout) :: nuc + type(NuclideCE), intent(inout) :: nuc integer :: i ! index on nuclide energy grid real(8) :: E ! energy diff --git a/src/cross_section.F90 b/src/cross_section.F90 index e6422de1f8..4f5d2252ce 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -148,7 +148,7 @@ contains integer :: i_low ! lower logarithmic mapping index integer :: i_high ! upper logarithmic mapping index real(8) :: f ! interp factor on nuclide energy grid - type(Nuclide_CE), pointer :: nuc + type(NuclideCE), pointer :: nuc type(Material), pointer :: mat ! Set pointer to nuclide and material @@ -367,7 +367,7 @@ contains real(8) :: inelastic ! inelastic cross section logical :: same_nuc ! do we know the xs for this nuclide at this energy? type(UrrData), pointer :: urr - type(Nuclide_CE), pointer :: nuc + type(NuclideCE), pointer :: nuc micro_xs(i_nuclide) % use_ptable = .true. @@ -534,7 +534,7 @@ contains pure function elastic_xs_0K(E, nuc) result(xs_out) real(8), intent(in) :: E ! trial energy - type(Nuclide_CE), intent(in) :: nuc ! target nuclide at temperature + type(NuclideCE), intent(in) :: nuc ! target nuclide at temperature real(8) :: xs_out ! 0K xs at trial energy integer :: i_grid ! index on nuclide energy grid diff --git a/src/energy_grid.F90 b/src/energy_grid.F90 index fa56b04956..248462f70c 100644 --- a/src/energy_grid.F90 +++ b/src/energy_grid.F90 @@ -27,7 +27,7 @@ contains integer :: i ! index in nuclides array integer :: j ! index in materials array type(ListReal) :: list - type(Nuclide_CE), pointer :: nuc + type(NuclideCE), pointer :: nuc type(Material), pointer :: mat call write_message("Creating unionized energy grid...", 5) @@ -70,7 +70,7 @@ contains real(8) :: E_max ! Maximum energy in MeV real(8) :: E_min ! Minimum energy in MeV real(8), allocatable :: umesh(:) ! Equally log-spaced energy grid - type(Nuclide_CE), pointer :: nuc + type(NuclideCE), pointer :: nuc ! Set minimum/maximum energies E_max = energy_max_neutron @@ -179,7 +179,7 @@ contains integer :: index_e ! index on union energy grid real(8) :: union_energy ! energy on union grid real(8) :: energy ! energy on nuclide grid - type(Nuclide_CE), pointer :: nuc + type(NuclideCE), pointer :: nuc type(Material), pointer :: mat do k = 1, n_materials diff --git a/src/fission.F90 b/src/fission.F90 index 98cccc5582..77ee641787 100644 --- a/src/fission.F90 +++ b/src/fission.F90 @@ -1,6 +1,6 @@ module fission - use nuclide_header, only: Nuclide_CE + use nuclide_header, only: NuclideCE use constants use error, only: fatal_error use interpolation, only: interpolate_tab1 @@ -16,7 +16,7 @@ contains !=============================================================================== pure function nu_total(nuc, E) result(nu) - type(Nuclide_CE), intent(in) :: nuc ! nuclide from which to find nu + type(NuclideCE), intent(in) :: nuc ! nuclide from which to find nu real(8), intent(in) :: E ! energy of incoming neutron real(8) :: nu ! number of total neutrons emitted per fission @@ -49,7 +49,7 @@ contains !=============================================================================== pure function nu_prompt(nuc, E) result(nu) - type(Nuclide_CE), intent(in) :: nuc ! nuclide from which to find nu + type(NuclideCE), intent(in) :: nuc ! nuclide from which to find nu real(8), intent(in) :: E ! energy of incoming neutron real(8) :: nu ! number of prompt neutrons emitted per fission @@ -86,7 +86,7 @@ contains !=============================================================================== pure function nu_delayed(nuc, E) result(nu) - type(Nuclide_CE), intent(in) :: nuc ! nuclide from which to find nu + type(NuclideCE), intent(in) :: nuc ! nuclide from which to find nu real(8), intent(in) :: E ! energy of incoming neutron real(8) :: nu ! number of delayed neutrons emitted per fission @@ -109,7 +109,7 @@ contains !=============================================================================== pure function yield_delayed(nuc, E, g) result(yield) - type(Nuclide_CE), intent(in) :: nuc ! nuclide from which to find nu + type(NuclideCE), intent(in) :: nuc ! nuclide from which to find nu real(8), intent(in) :: E ! energy of incoming neutron real(8) :: yield ! delayed neutron precursor yield integer, intent(in) :: g ! the delayed neutron precursor group diff --git a/src/global.F90 b/src/global.F90 index dda4e0aea2..dcbf7b1e48 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -86,7 +86,7 @@ module global ! CONTINUOUS-ENERGY CROSS SECTION RELATED VARIABLES ! Cross section arrays - type(Nuclide_CE), allocatable, target :: nuclides(:) ! Nuclide cross-sections + type(NuclideCE), allocatable, target :: nuclides(:) ! Nuclide cross-sections type(SAlphaBeta), allocatable, target :: sab_tables(:) ! S(a,b) tables integer :: n_sab_tables ! Number of S(a,b) thermal scattering tables diff --git a/src/initialize.F90 b/src/initialize.F90 index 74bba03e72..88a10fb550 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -16,7 +16,7 @@ module initialize hdf5_tallyresult_t, hdf5_integer8_t use input_xml, only: read_input_xml, cells_in_univ_dict, read_plots_xml use material_header, only: Material - use mgxs_data, only: read_mgxs, same_nuclide_mg_list, create_macro_xs + use mgxs_data, only: read_mgxs, same_NuclideMG_list, create_macro_xs use output, only: title, header, print_version, write_message, & print_usage, write_xs_summary, print_plot use random_lcg, only: initialize_prng @@ -126,7 +126,7 @@ contains if (run_CE) then call same_nuclide_list() else - call same_nuclide_mg_list() + call same_NuclideMG_list() end if ! Construct information needed for nuclear data diff --git a/src/macroxs.F90 b/src/macroxs.F90 index f44f87f66f..170f5fb19a 100644 --- a/src/macroxs.F90 +++ b/src/macroxs.F90 @@ -6,7 +6,7 @@ module macroxs use material_header, only: Material use math use nuclide_header, only: find_angle, MaterialMacroXS, NuclideMicroXS, & - Nuclide_MG, NuclideMGContainer + NuclideMG, NuclideMGContainer use random_lcg, only: prn use scattdata_header use search diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index 17ee8a1e0e..95053789f5 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -135,7 +135,7 @@ contains integer :: i ! loop index over nuclides integer :: gin, gout ! group indices real(8) :: atom_density ! atom density of a nuclide - ! class(Nuclide_Base), pointer :: nuc ! current nuclide + ! class(NuclideBase), pointer :: nuc ! current nuclide integer :: imu real(8) :: norm integer :: mat_max_order, order, l @@ -239,7 +239,7 @@ contains ! Perform our operations which depend upon the type select type(nuc => nuclides(mat % nuclide(i)) % obj) - type is (Nuclide_Iso) + type is (NuclideIso) ! Add contributions to total, absorption, and fission data (if necessary) this % total = this % total + atom_density * nuc % total @@ -305,9 +305,9 @@ contains nuc % mult(gout,gin) end do end do - type is (Nuclide_Angle) + type is (NuclideAngle) error_code = 1 - error_text = "Invalid Passing of Nuclide_Angle to MacroXS_Iso Object" + error_text = "Invalid Passing of NuclideAngle to MacroXS_Iso Object" return end select end do @@ -393,12 +393,12 @@ contains error_text = '' ! Get the number of each polar and azi angles and make sure all the - ! Nuclide_Angle types have the same number of these angles + ! NuclideAngle types have the same number of these angles npol = -1 nazi = -1 do i = 1, mat % n_nuclides select type(nuc => nuclides(mat % nuclide(i)) % obj) - type is (Nuclide_Angle) + type is (NuclideAngle) if (npol == -1) then npol = nuc % Npol nazi = nuc % Nazi @@ -522,11 +522,11 @@ contains ! Perform our operations which depend upon the type select type(nuc => nuclides(mat % nuclide(i)) % obj) - type is (Nuclide_Iso) + type is (NuclideIso) error_code = 1 - error_text = "Invalid Passing of Nuclide_Iso to MacroXS_Angle Object" + error_text = "Invalid Passing of NuclideIso to MacroXS_Angle Object" return - type is (Nuclide_Angle) + type is (NuclideAngle) ! Add contributions to total, absorption, and fission data (if necessary) this % total = this % total + atom_density * nuc % total this % absorption = this % absorption + & diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index f73f3f5a27..d9c397f5bb 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -119,13 +119,13 @@ contains ! Now allocate accordingly select case(representation) case(MGXS_ISOTROPIC) - allocate(Nuclide_Iso :: nuclides_MG(i_nuclide) % obj) + allocate(NuclideIso :: nuclides_MG(i_nuclide) % obj) case(MGXS_ANGLE) - allocate(Nuclide_Angle :: nuclides_MG(i_nuclide) % obj) + allocate(NuclideAngle :: nuclides_MG(i_nuclide) % obj) end select ! Now read in the data specific to the type we just declared - call nuclide_mg_init(nuclides_MG(i_nuclide) % obj, node_xsdata, & + call NuclideMG_init(nuclides_MG(i_nuclide) % obj, node_xsdata, & energy_groups, get_kfiss, get_fiss, error_code, & error_text) @@ -175,7 +175,7 @@ contains ! in multiple entries in the nuclides array for a single zaid number. !=============================================================================== - subroutine same_nuclide_mg_list() + subroutine same_NuclideMG_list() integer :: i ! index in nuclides array integer :: j ! index in nuclides array @@ -188,15 +188,15 @@ contains end do end do - end subroutine same_nuclide_mg_list + end subroutine same_NuclideMG_list !=============================================================================== ! NUCLIDE_*_INIT reads in the data from the XML file, as already accessed !=============================================================================== - subroutine nuclide_mg_init(this, node_xsdata, groups, get_kfiss, get_fiss, & + subroutine NuclideMG_init(this, node_xsdata, groups, get_kfiss, get_fiss, & error_code, error_text) - class(Nuclide_MG), intent(inout) :: this ! Working Object + class(NuclideMG), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml integer, intent(in) :: groups ! Number of Energy groups logical, intent(in) :: get_kfiss ! Need Kappa-Fission? @@ -296,19 +296,19 @@ contains end if select type(this) - type is (Nuclide_Iso) - call nuclide_iso_init(this, node_xsdata, groups, get_kfiss, get_fiss, & + type is (NuclideIso) + call NuclideIso_init(this, node_xsdata, groups, get_kfiss, get_fiss, & error_code, error_text) - type is (Nuclide_Angle) - call nuclide_angle_init(this, node_xsdata, groups, get_kfiss, get_fiss, & + type is (NuclideAngle) + call NuclideAngle_init(this, node_xsdata, groups, get_kfiss, get_fiss, & error_code, error_text) end select - end subroutine nuclide_mg_init + end subroutine NuclideMG_init - subroutine nuclide_iso_init(this, node_xsdata, groups, get_kfiss, get_fiss, & + subroutine NuclideIso_init(this, node_xsdata, groups, get_kfiss, get_fiss, & error_code, error_text) - class(Nuclide_Iso), intent(inout) :: this ! Working Object + class(NuclideIso), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml integer, intent(in) :: groups ! Number of Energy groups logical, intent(in) :: get_kfiss ! Need Kappa-Fission? @@ -435,11 +435,11 @@ contains this % mult = ONE end if - end subroutine nuclide_iso_init + end subroutine NuclideIso_init - subroutine nuclide_angle_init(this, node_xsdata, groups, get_kfiss, get_fiss, & + subroutine NuclideAngle_init(this, node_xsdata, groups, get_kfiss, get_fiss, & error_code, error_text) - class(Nuclide_Angle), intent(inout) :: this ! Working Object + class(NuclideAngle), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml integer, intent(in) :: groups ! Number of Energy groups logical, intent(in) :: get_kfiss ! Need Kappa-Fission? @@ -627,7 +627,7 @@ contains this % mult = ONE end if - end subroutine nuclide_angle_init + end subroutine NuclideAngle_init !=============================================================================== @@ -675,9 +675,9 @@ contains ! how we allocate the scatter object within macroxs legendre_mu_points = nuclides_MG(mat % nuclide(1)) % obj % legendre_mu_points select type(nuc => nuclides_MG(mat % nuclide(1)) % obj) - type is (Nuclide_Iso) + type is (NuclideIso) representation = MGXS_ISOTROPIC - type is (Nuclide_Angle) + type is (NuclideAngle) representation = MGXS_ANGLE end select scatt_type = nuclides_MG(mat % nuclide(1)) % obj % scatt_type diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 95f9833b4c..fc9c53ff30 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -12,12 +12,12 @@ module nuclide_header implicit none !=============================================================================== -! NUCLIDE_BASE contains the base nuclidic data for a nuclide, which does not depend +! NuclideBase contains the base nuclidic data for a nuclide, which does not depend ! upon how the nuclear data is represented (i.e., CE, or any variant of MG). -! The extended types, Nuclide_CE and Nuclide_MG deal with the rest +! The extended types, NuclideCE and NuclideMG deal with the rest !=============================================================================== - type, abstract :: Nuclide_Base + type, abstract :: NuclideBase character(12) :: name ! name of nuclide, e.g. 92235.03c integer :: zaid ! Z and A identifier, e.g. 92235 real(8) :: awr ! Atomic Weight Ratio @@ -31,26 +31,26 @@ module nuclide_header logical :: fissionable ! nuclide is fissionable? contains - procedure(nuclide_base_clear_), deferred, pass :: clear ! Deallocates Nuclide - procedure(print_nuclide_), deferred, pass :: print ! Writes nuclide info - end type Nuclide_Base + procedure(nuclidebase_clear_), deferred, pass :: clear ! Deallocates Nuclide + procedure(print_nuclide_), deferred, pass :: print ! Writes nuclide info + end type NuclideBase abstract interface - subroutine nuclide_base_clear_(this) - import Nuclide_Base - class(Nuclide_Base), intent(inout) :: this - end subroutine nuclide_base_clear_ + subroutine nuclidebase_clear_(this) + import NuclideBase + class(NuclideBase), intent(inout) :: this + end subroutine nuclidebase_clear_ subroutine print_nuclide_(this, unit) - import Nuclide_Base - class(Nuclide_Base),intent(in) :: this + import NuclideBase + class(NuclideBase),intent(in) :: this integer, optional, intent(in) :: unit end subroutine print_nuclide_ end interface - type, extends(Nuclide_Base) :: Nuclide_CE + type, extends(NuclideBase) :: NuclideCE ! Energy grid information integer :: n_grid ! # of nuclide grid points integer, allocatable :: grid_index(:) ! log grid mapping indices @@ -108,29 +108,29 @@ module nuclide_header ! Type-Bound procedures contains - procedure, pass :: clear => nuclide_ce_clear - procedure, pass :: print => nuclide_ce_print - end type Nuclide_CE + procedure, pass :: clear => nuclidece_clear + procedure, pass :: print => nuclidece_print + end type NuclideCE - type, abstract, extends(Nuclide_Base) :: Nuclide_MG + type, abstract, extends(NuclideBase) :: NuclideMG ! Scattering Order Information - integer :: order ! Order of data (Scattering for Nuclide_Iso, - ! Number of angles for all in Nuclide_Angle) + integer :: order ! Order of data (Scattering for NuclideIso, + ! Number of angles for all in NuclideAngle) integer :: scatt_type ! either legendre, histogram, or tabular. integer :: legendre_mu_points ! Number of tabular points to use to represent ! Legendre distribs, -1 if sample with the ! Legendres themselves ! Type-Bound procedures contains - procedure(nuclide_mg_get_xs_), deferred, pass :: get_xs ! Get the xs - procedure(nuclide_calc_f_), deferred, pass :: calc_f ! Calculates f, given mu - end type Nuclide_MG + procedure(nuclidemg_get_xs), deferred, pass :: get_xs ! Get the xs + procedure(nuclide_calc_f_), deferred, pass :: calc_f ! Calculates f, given mu + end type NuclideMG abstract interface - function nuclide_mg_get_xs_(this, g, xstype, gout, uvw, mu, i_azi, i_pol) & + function nuclidemg_get_xs(this, g, xstype, gout, uvw, mu, i_azi, i_pol) & result(xs) - import Nuclide_MG - class(Nuclide_MG), intent(in) :: this + import NuclideMG + class(NuclideMG), intent(in) :: this integer, intent(in) :: g ! Incoming Energy group character(*), intent(in) :: xstype ! Cross Section Type integer, optional, intent(in) :: gout ! Outgoing Group @@ -139,11 +139,11 @@ module nuclide_header integer, optional, intent(in) :: i_azi ! Azimuthal Index integer, optional, intent(in) :: i_pol ! Polar Index real(8) :: xs ! Resultant xs - end function nuclide_mg_get_xs_ + end function nuclidemg_get_xs pure function nuclide_calc_f_(this, gin, gout, mu, uvw, i_azi, i_pol) result(f) - import Nuclide_MG - class(Nuclide_MG), intent(in) :: this + import NuclideMG + class(NuclideMG), intent(in) :: this integer, intent(in) :: gin ! Incoming Energy Group integer, intent(in) :: gout ! Outgoing Energy Group real(8), intent(in) :: mu ! Angle of interest @@ -156,11 +156,11 @@ module nuclide_header end interface !=============================================================================== -! NUCLIDE_ISO contains the base MGXS data for a nuclide specifically for +! NuclideIso contains the base MGXS data for a nuclide specifically for ! isotropically weighted MGXS !=============================================================================== - type, extends(Nuclide_MG) :: Nuclide_Iso + type, extends(NuclideMG) :: NuclideIso ! Microscopic cross sections real(8), allocatable :: total(:) ! total cross section @@ -174,18 +174,18 @@ module nuclide_header ! Type-Bound procedures contains - procedure, pass :: clear => nuclide_iso_clear ! Deallocates Nuclide - procedure, pass :: print => nuclide_iso_print ! Writes nuclide info - procedure, pass :: get_xs => nuclide_iso_get_xs ! Gets Size of Data w/in Object - procedure, pass :: calc_f => nuclide_mg_iso_calc_f ! Calcs f given mu - end type Nuclide_Iso + procedure, pass :: clear => nuclideiso_clear ! Deallocates Nuclide + procedure, pass :: print => nuclideiso_print ! Writes nuclide info + procedure, pass :: get_xs => nuclideiso_get_xs ! Gets Size of Data w/in Object + procedure, pass :: calc_f => nuclideiso_calc_f ! Calcs f given mu + end type NuclideIso !=============================================================================== -! NUCLIDE_ANGLE contains the base MGXS data for a nuclide specifically for +! NuclideAngle contains the base MGXS data for a nuclide specifically for ! explicit angle-dependent weighted MGXS !=============================================================================== - type, extends(Nuclide_MG) :: Nuclide_Angle + type, extends(NuclideMG) :: NuclideAngle ! Microscopic cross sections. Dimensions are: (Npol, Nazi, Nl, Ng, Ng) real(8), allocatable :: total(:,:,:) ! total cross section @@ -205,23 +205,23 @@ module nuclide_header ! Type-Bound procedures contains - procedure, pass :: clear => nuclide_angle_clear ! Deallocates Nuclide - procedure, pass :: print => nuclide_angle_print ! Gets Size of Data w/in Object - procedure, pass :: get_xs => nuclide_angle_get_xs ! Gets Size of Data w/in Object - procedure, pass :: calc_f => nuclide_mg_angle_calc_f ! Calcs f given mu - end type Nuclide_Angle + procedure, pass :: clear => nuclideangle_clear ! Deallocates Nuclide + procedure, pass :: print => nuclideangle_print ! Gets Size of Data w/in Object + procedure, pass :: get_xs => nuclideangle_get_xs ! Gets Size of Data w/in Object + procedure, pass :: calc_f => nuclideangle_calc_f ! Calcs f given mu + end type NuclideAngle !=============================================================================== ! NUCLIDEMGCONTAINER pointer array for storing Nuclides !=============================================================================== type NuclideMGContainer - class(Nuclide_MG), pointer :: obj + class(NuclideMG), pointer :: obj end type NuclideMGContainer !=============================================================================== ! NUCLIDE0K temporarily contains all 0K cross section data and other parameters -! needed to treat resonance scattering before transferring them to NUCLIDE_CE +! needed to treat resonance scattering before transferring them to NuclideCE !=============================================================================== type Nuclide0K @@ -297,13 +297,13 @@ module nuclide_header contains !=============================================================================== -! NUCLIDE_*_CLEAR resets and deallocates data in Nuclide_Base, Nuclide_Iso -! or Nuclide_Angle +! NUCLIDE_*_CLEAR resets and deallocates data in NuclideBase, NuclideIso +! or NuclideAngle !=============================================================================== - subroutine nuclide_ce_clear(this) + subroutine nuclidece_clear(this) - class(Nuclide_CE), intent(inout) :: this ! The Nuclide object to clear + class(NuclideCE), intent(inout) :: this ! The Nuclide object to clear integer :: i ! Loop counter @@ -317,11 +317,11 @@ module nuclide_header call this % reaction_index % clear() - end subroutine nuclide_ce_clear + end subroutine nuclidece_clear - subroutine nuclide_iso_clear(this) + subroutine nuclideiso_clear(this) - class(Nuclide_Iso), intent(inout) :: this ! The Nuclide object to clear + class(NuclideIso), intent(inout) :: this ! The Nuclide object to clear ! Cler the extended information if (allocated(this % total)) then @@ -340,11 +340,11 @@ module nuclide_header deallocate(this % mult) end if - end subroutine nuclide_iso_clear + end subroutine nuclideiso_clear - subroutine nuclide_angle_clear(this) + subroutine nuclideangle_clear(this) - class(Nuclide_Angle), intent(inout) :: this ! The Nuclide object to clear + class(NuclideAngle), intent(inout) :: this ! The Nuclide object to clear ! Cler the extended information if (allocated(this % total)) then @@ -370,15 +370,15 @@ module nuclide_header deallocate(this % mult) end if - end subroutine nuclide_angle_clear + end subroutine nuclideangle_clear !=============================================================================== ! PRINT_NUCLIDE_* displays information about a continuous-energy neutron ! cross_section table and its reactions and secondary angle/energy distributions !=============================================================================== - subroutine nuclide_ce_print(this, unit) - class(Nuclide_CE), intent(in) :: this + subroutine nuclidece_print(this, unit) + class(NuclideCE), intent(in) :: this integer, intent(in), optional :: unit integer :: i ! loop index over nuclides @@ -451,10 +451,10 @@ module nuclide_header ! Blank line at end of nuclide write(unit_,*) - end subroutine nuclide_ce_print + end subroutine nuclidece_print - subroutine nuclide_mg_print(this, unit_) - class(Nuclide_MG), intent(in) :: this + subroutine nuclidemg_print(this, unit_) + class(NuclideMG), intent(in) :: this integer, intent(in) :: unit_ character(MAX_LINE_LEN) :: temp_str @@ -484,11 +484,11 @@ module nuclide_header end if write(unit_,*) ' Fissionable = ', this % fissionable - end subroutine nuclide_mg_print + end subroutine nuclidemg_print - subroutine nuclide_iso_print(this, unit) + subroutine nuclideiso_print(this, unit) - class(Nuclide_Iso), intent(in) :: this + class(NuclideIso), intent(in) :: this integer, optional, intent(in) :: unit integer :: unit_ ! unit to write to @@ -502,7 +502,7 @@ module nuclide_header end if ! Write Basic Nuclide Information - call nuclide_mg_print(this, unit_) + call nuclidemg_print(this, unit_) ! Determine size of mgxs and scattering matrices size_scattmat = (size(this % scatter) + size(this % mult)) * 8 @@ -524,11 +524,11 @@ module nuclide_header ! Blank line at end of nuclide write(unit_,*) - end subroutine nuclide_iso_print + end subroutine nuclideiso_print - subroutine nuclide_angle_print(this, unit) + subroutine nuclideangle_print(this, unit) - class(Nuclide_Angle), intent(in) :: this + class(NuclideAngle), intent(in) :: this integer, optional, intent(in) :: unit integer :: unit_ ! unit to write to @@ -542,7 +542,7 @@ module nuclide_header end if ! Write Basic Nuclide Information - call nuclide_mg_print(this, unit_) + call nuclidemg_print(this, unit_) write(unit_,*) ' # of Polar Angles = ' // trim(to_str(this % Npol)) write(unit_,*) ' # of Azimuthal Angles = ' // trim(to_str(this % Nazi)) @@ -567,15 +567,15 @@ module nuclide_header write(unit_,*) - end subroutine nuclide_angle_print + end subroutine nuclideangle_print !=============================================================================== ! NUCLIDE_*_GET_XS Returns the requested data type !=============================================================================== - function nuclide_iso_get_xs(this, g, xstype, gout, uvw, mu, i_azi, i_pol) & + function nuclideiso_get_xs(this, g, xstype, gout, uvw, mu, i_azi, i_pol) & result(xs) - class(Nuclide_Iso), intent(in) :: this + class(NuclideIso), intent(in) :: this integer, intent(in) :: g ! Incoming Energy group character(*), intent(in) :: xstype ! Cross Section Type integer, optional, intent(in) :: gout ! Outgoing Group @@ -622,11 +622,11 @@ module nuclide_header xs = this % total(g) - this % absorption(g) end select end if - end function nuclide_iso_get_xs + end function nuclideiso_get_xs - function nuclide_angle_get_xs(this, g, xstype, gout, uvw, mu, i_azi, i_pol) & + function nuclideangle_get_xs(this, g, xstype, gout, uvw, mu, i_azi, i_pol) & result(xs) - class(Nuclide_Angle), intent(in) :: this + class(NuclideAngle), intent(in) :: this integer, intent(in) :: g ! Incoming Energy group character(*), intent(in) :: xstype ! Cross Section Type integer, optional, intent(in) :: gout ! Outgoing Group @@ -685,16 +685,16 @@ module nuclide_header end select end if - end function nuclide_angle_get_xs + end function nuclideangle_get_xs !=============================================================================== ! NUCLIDE_*_CALC_F Finds the value of f(mu), the scattering angle probability, ! given mu !=============================================================================== - pure function nuclide_mg_iso_calc_f(this, gin, gout, mu, uvw, i_azi, i_pol) & + pure function nuclideiso_calc_f(this, gin, gout, mu, uvw, i_azi, i_pol) & result(f) - class(Nuclide_Iso), intent(in) :: this + class(NuclideIso), intent(in) :: this integer, intent(in) :: gin ! Incoming Energy Group integer, intent(in) :: gout ! Outgoing Energy Group real(8), intent(in) :: mu ! Angle of interest @@ -737,11 +737,11 @@ module nuclide_header end if - end function nuclide_mg_iso_calc_f + end function nuclideiso_calc_f - pure function nuclide_mg_angle_calc_f(this, gin, gout, mu, uvw, i_azi, & + pure function nuclideangle_calc_f(this, gin, gout, mu, uvw, i_azi, & i_pol) result(f) - class(Nuclide_Angle), intent(in) :: this + class(NuclideAngle), intent(in) :: this integer, intent(in) :: gin ! Incoming Energy Group integer, intent(in) :: gout ! Outgoing Energy Group real(8), intent(in) :: mu ! Angle of interest @@ -791,7 +791,7 @@ module nuclide_header end if - end function nuclide_mg_angle_calc_f + end function nuclideangle_calc_f !=============================================================================== ! find_angle finds the closest angle on the data grid and returns that index diff --git a/src/output.F90 b/src/output.F90 index 29844076e6..125fe010bc 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -350,10 +350,10 @@ contains call sab_tables(i) % print(unit=unit_xs) end do SAB_TABLES_LOOP else - NUCLIDE_MG_LOOP: do i = 1, n_nuclides_total + NuclideMG_LOOP: do i = 1, n_nuclides_total ! Print information about nuclide call nuclides_mg(i) % obj % print(unit=unit_xs) - end do NUCLIDE_MG_LOOP + end do NuclideMG_LOOP end if ! Close cross section summary file diff --git a/src/physics.F90 b/src/physics.F90 index 13a311d5e3..e41b3b4e9e 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -75,7 +75,7 @@ contains integer :: i_nuclide ! index in nuclides array integer :: i_nuc_mat ! index in material's nuclides array integer :: i_reaction ! index in nuc % reactions array - type(Nuclide_CE), pointer :: nuc + type(NuclideCE), pointer :: nuc call sample_nuclide(p, 'total ', i_nuclide, i_nuc_mat) @@ -198,7 +198,7 @@ contains real(8) :: f real(8) :: prob real(8) :: cutoff - type(Nuclide_CE), pointer :: nuc + type(NuclideCE), pointer :: nuc ! Get pointer to nuclide nuc => nuclides(i_nuclide) @@ -296,7 +296,7 @@ contains real(8) :: uvw_new(3) ! outgoing uvw for iso-in-lab scattering real(8) :: uvw_old(3) ! incoming uvw for iso-in-lab scattering real(8) :: phi ! azimuthal angle for iso-in-lab scattering - type(Nuclide_CE), pointer :: nuc + type(NuclideCE), pointer :: nuc ! copy incoming direction uvw_old(:) = p % coord(1) % uvw @@ -411,7 +411,7 @@ contains real(8) :: v_cm(3) ! velocity of center-of-mass real(8) :: v_t(3) ! velocity of target nucleus real(8) :: uvw_cm(3) ! directional cosines in center-of-mass - type(Nuclide_CE), pointer :: nuc + type(NuclideCE), pointer :: nuc ! get pointer to nuclide nuc => nuclides(i_nuclide) @@ -737,7 +737,7 @@ contains !=============================================================================== subroutine sample_target_velocity(nuc, v_target, E, uvw, v_neut, wgt, xs_eff) - type(Nuclide_CE), intent(in) :: nuc ! target nuclide at temperature T + type(NuclideCE), intent(in) :: nuc ! target nuclide at temperature T real(8), intent(out) :: v_target(3) ! target velocity real(8), intent(in) :: v_neut(3) ! neutron velocity real(8), intent(in) :: E ! particle energy @@ -982,7 +982,7 @@ contains !=============================================================================== subroutine sample_cxs_target_velocity(nuc, v_target, E, uvw) - type(Nuclide_CE), intent(in) :: nuc ! target nuclide at temperature + type(NuclideCE), intent(in) :: nuc ! target nuclide at temperature real(8), intent(out) :: v_target(3) real(8), intent(in) :: E real(8), intent(in) :: uvw(3) @@ -1070,7 +1070,7 @@ contains real(8) :: phi ! fission neutron azimuthal angle real(8) :: weight ! weight adjustment for ufs method logical :: in_mesh ! source site in ufs mesh? - type(Nuclide_CE), pointer :: nuc + type(NuclideCE), pointer :: nuc ! Get pointers nuc => nuclides(i_nuclide) @@ -1180,7 +1180,7 @@ contains function sample_fission_energy(nuc, rxn, p) result(E_out) - type(Nuclide_CE), intent(in) :: nuc + type(NuclideCE), intent(in) :: nuc type(Reaction), intent(in) :: rxn type(Particle), intent(inout) :: p ! Particle causing fission real(8) :: E_out ! outgoing energy of fission neutron @@ -1293,7 +1293,7 @@ contains !=============================================================================== subroutine inelastic_scatter(nuc, rxn, p) - type(Nuclide_CE), intent(in) :: nuc + type(NuclideCE), intent(in) :: nuc type(Reaction), intent(in) :: rxn type(Particle), intent(inout) :: p From cf213cf86e5b2f23fabc608922cf084271652b4b Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 5 Feb 2016 21:25:42 -0500 Subject: [PATCH 264/650] Clearing up the clear routines from NuclideMG extended types. Now THATS punny --- src/global.F90 | 4 --- src/nuclide_header.F90 | 69 +++--------------------------------------- 2 files changed, 4 insertions(+), 69 deletions(-) diff --git a/src/global.F90 b/src/global.F90 index dcbf7b1e48..02f53a4f7d 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -482,10 +482,6 @@ contains end if if (allocated(nuclides_MG)) then - ! First call the clear routines - do i = 1, size(nuclides_MG) - call nuclides_MG(i) % obj % clear() - end do deallocate(nuclides_MG) end if diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index fc9c53ff30..095155a33b 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -31,17 +31,11 @@ module nuclide_header logical :: fissionable ! nuclide is fissionable? contains - procedure(nuclidebase_clear_), deferred, pass :: clear ! Deallocates Nuclide procedure(print_nuclide_), deferred, pass :: print ! Writes nuclide info end type NuclideBase abstract interface - subroutine nuclidebase_clear_(this) - import NuclideBase - class(NuclideBase), intent(inout) :: this - end subroutine nuclidebase_clear_ - subroutine print_nuclide_(this, unit) import NuclideBase class(NuclideBase),intent(in) :: this @@ -174,7 +168,6 @@ module nuclide_header ! Type-Bound procedures contains - procedure, pass :: clear => nuclideiso_clear ! Deallocates Nuclide procedure, pass :: print => nuclideiso_print ! Writes nuclide info procedure, pass :: get_xs => nuclideiso_get_xs ! Gets Size of Data w/in Object procedure, pass :: calc_f => nuclideiso_calc_f ! Calcs f given mu @@ -205,7 +198,6 @@ module nuclide_header ! Type-Bound procedures contains - procedure, pass :: clear => nuclideangle_clear ! Deallocates Nuclide procedure, pass :: print => nuclideangle_print ! Gets Size of Data w/in Object procedure, pass :: get_xs => nuclideangle_get_xs ! Gets Size of Data w/in Object procedure, pass :: calc_f => nuclideangle_calc_f ! Calcs f given mu @@ -297,7 +289,7 @@ module nuclide_header contains !=============================================================================== -! NUCLIDE_*_CLEAR resets and deallocates data in NuclideBase, NuclideIso +! NUCLIDECE_CLEAR resets and deallocates data in NuclideBase, NuclideIso ! or NuclideAngle !=============================================================================== @@ -319,61 +311,8 @@ module nuclide_header end subroutine nuclidece_clear - subroutine nuclideiso_clear(this) - - class(NuclideIso), intent(inout) :: this ! The Nuclide object to clear - - ! Cler the extended information - if (allocated(this % total)) then - deallocate(this % total, this % absorption, this % scatter) - end if - if (allocated(this % fission)) then - deallocate(this % fission, this % nu_fission) - end if - if (allocated(this % k_fission)) then - deallocate(this % k_fission) - end if - if (allocated(this % chi)) then - deallocate(this % chi) - end if - if (allocated(this % mult)) then - deallocate(this % mult) - end if - - end subroutine nuclideiso_clear - - subroutine nuclideangle_clear(this) - - class(NuclideAngle), intent(inout) :: this ! The Nuclide object to clear - - ! Cler the extended information - if (allocated(this % total)) then - deallocate(this % total, this % absorption, this % scatter) - end if - if (allocated(this % fission)) then - deallocate(this % fission, this % nu_fission) - end if - if (allocated(this % k_fission)) then - deallocate(this % k_fission) - end if - if (allocated(this % chi)) then - deallocate(this % chi) - end if - - if (allocated(this % polar)) then - deallocate(this % polar) - end if - if (allocated(this % azimuthal)) then - deallocate(this % azimuthal) - end if - if (allocated(this % mult)) then - deallocate(this % mult) - end if - - end subroutine nuclideangle_clear - !=============================================================================== -! PRINT_NUCLIDE_* displays information about a continuous-energy neutron +! NUCLIDE*_PRINT displays information about a continuous-energy neutron ! cross_section table and its reactions and secondary angle/energy distributions !=============================================================================== @@ -570,7 +509,7 @@ module nuclide_header end subroutine nuclideangle_print !=============================================================================== -! NUCLIDE_*_GET_XS Returns the requested data type +! NUCLIDE*_GET_XS Returns the requested data type !=============================================================================== function nuclideiso_get_xs(this, g, xstype, gout, uvw, mu, i_azi, i_pol) & @@ -688,7 +627,7 @@ module nuclide_header end function nuclideangle_get_xs !=============================================================================== -! NUCLIDE_*_CALC_F Finds the value of f(mu), the scattering angle probability, +! NUCLIDE*_CALC_F Finds the value of f(mu), the scattering angle probability, ! given mu !=============================================================================== From 7543e9df661623b424b6f3d5a9c12ca48cf1742c Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 6 Feb 2016 08:12:12 -0500 Subject: [PATCH 265/650] Updating output file revision numbers as i neglected to do so earlier --- docs/source/usersguide/output/particle_restart.rst | 10 ++++++++-- docs/source/usersguide/output/statepoint.rst | 2 +- src/constants.F90 | 6 +++--- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/docs/source/usersguide/output/particle_restart.rst b/docs/source/usersguide/output/particle_restart.rst index e0d89a5156..eeb40a526e 100644 --- a/docs/source/usersguide/output/particle_restart.rst +++ b/docs/source/usersguide/output/particle_restart.rst @@ -4,7 +4,7 @@ Particle Restart File Format ============================ -The current revision of the particle restart file format is 1. +The current revision of the particle restart file format is 2. **/filetype** (*char[]*) @@ -46,7 +46,13 @@ The current revision of the particle restart file format is 1. **/energy** (*double*) - Energy of the particle in MeV. + Energy of the particle in MeV. This is always provided but only used + for continuous-energy mode. + +**/energy_group** (*double*) + + Energy group of the particle. This is always provided but only used + for multi-group mode. **/xyz** (*double[3]*) diff --git a/docs/source/usersguide/output/statepoint.rst b/docs/source/usersguide/output/statepoint.rst index 2921258c97..2251619653 100644 --- a/docs/source/usersguide/output/statepoint.rst +++ b/docs/source/usersguide/output/statepoint.rst @@ -4,7 +4,7 @@ State Point File Format ======================= -The current revision of the statepoint file format is 14. +The current revision of the statepoint file format is 15. **/filetype** (*char[]*) diff --git a/src/constants.F90 b/src/constants.F90 index 0c208e6d34..b93abae2b7 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -11,10 +11,10 @@ module constants integer, parameter :: VERSION_RELEASE = 1 ! Revision numbers for binary files - integer, parameter :: REVISION_STATEPOINT = 14 - integer, parameter :: REVISION_PARTICLE_RESTART = 1 + integer, parameter :: REVISION_STATEPOINT = 15 + integer, parameter :: REVISION_PARTICLE_RESTART = 2 integer, parameter :: REVISION_TRACK = 1 - integer, parameter :: REVISION_SUMMARY = 2 + integer, parameter :: REVISION_SUMMARY = 3 ! ============================================================================ ! ADJUSTABLE PARAMETERS From 7fa2be860af63d2118fb9a7451e5ad56f05f6129 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sat, 6 Feb 2016 15:04:56 -0500 Subject: [PATCH 266/650] Improved modular functionalization of tally merging --- openmc/filter.py | 23 +++- openmc/tallies.py | 287 ++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 267 insertions(+), 43 deletions(-) diff --git a/openmc/filter.py b/openmc/filter.py index 54814a6b6f..430b2415f0 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -257,9 +257,17 @@ class Filter(object): elif self.type == 'mesh': return False - # Different energy bins are not mergeable + # Different energy bins structures must be mutually exclusive and + # share only one shared bin edge at the minimum or maximum energy elif 'energy' in self.type: - return False + # This low energy edge coincides with other's high energy edge + if self.bins[0] == other.bins[-1]: + return True + # This high energy edge coincides with other's low energy edge + elif self.bins[-1] == other.bins[0]: + return True + else: + return False else: return True @@ -288,9 +296,14 @@ class Filter(object): merged_filter = copy.deepcopy(self) # Merge unique filter bins - merged_bins = list(set(np.concatenate((self.bins, other.bins)))) - merged_filter.bins = merged_bins - merged_filter.num_bins = len(merged_bins) + merged_bins = set(np.concatenate((self.bins, other.bins))) + merged_filter.bins = list(sorted(merged_bins)) + + # Count bins in the merged filter + if 'energy' in merged_filter.type: + merged_filter.num_bins = len(merged_bins) -1 + else: + merged_filter.num_bins = len(merged_bins) return merged_filter diff --git a/openmc/tallies.py b/openmc/tallies.py index 66b99cb00c..dabbeb04ae 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -673,66 +673,162 @@ class Tally(object): self._nuclides.remove(nuclide) - def can_merge(self, tally): - """Determine if another tally can be merged with this one + def _can_merge_filters(self, other): + """Determine if another tally's filters can be merged with this one's + + The types of filters between the two tallies must match identically. + The bins in all of the filters must match identically, or be mergeable + in only one filter. This is a helper method for the can_merge(...) + and merge(...) methods. Parameters ---------- - tally : Tally - Tally to check for merging + other : Tally + Tally to check for mergeable scores """ - if not isinstance(tally, Tally): + # Two tallys must have the same number of filters + if len(self.filters) != len(other.filters): return False - # Must have same estimator - if self.estimator != tally.estimator: - return False - - # Must have same nuclides - if len(self.nuclides) != len(tally.nuclides): - return False - - for nuclide in self.nuclides: - if nuclide not in tally.nuclides: - return False - - # Must have same or mergeable filters - if len(self.filters) != len(tally.filters): - return False - - # Check if only one tally contains a delayed group filter - tally1_dg = False - for filter1 in self.filters: - if filter1.type == 'delayedgroup': - tally1_dg = True - - tally2_dg = False - for filter2 in tally.filters: - if filter2.type == 'delayedgroup': - tally2_dg = True - # Return False if only one tally has a delayed group filter - if (tally1_dg or tally2_dg) and not (tally1_dg and tally2_dg): + tally1_dg = self.contains_filter('delayedgroup') + tally2_dg = other.contains_filter('delayedgroup') + if sum(tally1_dg, tally2_dg) == 1: return False # Look to see if all filters are the same, or one or more can be merged for filter1 in self.filters: mergeable_filter = False - for filter2 in tally.filters: - if filter1 == filter2 or filter1.can_merge(filter2): + for filter2 in other.filters: + + # If filters match, they are mergeable + if filter1 == filter2: mergeable_filter = True break + # If filters are first mergeable filters encountered + elif filter1.can_merge(filter2) and not merge_filters: + merge_filters = True + mergeable_filter = True + break + + # If filters are the second mergeable filters encountered + elif filter1.can_merge(filter2) and merge_filters: + return False + # If no mergeable filter was found, the tallies are not mergeable if not mergeable_filter: return False - # Tallies are mergeable if all conditional checks passed + # Tally filters are mergeable if all conditional checks passed return True + def _can_merge_nuclides(self, other): + """Determine if another tally's nuclides can be merged with this one's + + The nuclides between the two tallies must be mutually exclusive or + identically matching. This is a helper method for the can_merge(...) + and merge(...) methods. + + Parameters + ---------- + other : Tally + Tally to check for mergeable nuclides + + """ + + no_nuclides_match = True + all_nuclides_match = True + + # Search for each of this tally's nuclides in the other tally + for nuclide in self.nuclides: + if nuclide not in other.nuclides: + all_nuclides_match = False + else: + no_nuclides_match = False + + # Search for each of the other tally's nuclides in this tally + for nuclide in other.nuclides: + if nuclide not in self.nuclides: + all_nuclides_match = False + else: + no_nuclides_match = False + + # Either all nuclides should match, or none should + if no_nuclides_match: + return True + if not no_nuclides_match and not all_nuclides_match: + return False + + def _can_merge_scores(self, other): + """Determine if another tally's scores can be merged with this one's + + The scores between the two tallies must be mutually exclusive or + identically matching. This is a helper method for the can_merge(...) + and merge(...) methods. + + Parameters + ---------- + other : Tally + Tally to check for mergeable scores + + """ + + no_scores_match = True + all_scores_match = True + + # Search for each of this tally's scores in the other tally + for score in self.scores: + if score not in other.scores: + all_scores_match = False + else: + no_scores_match = False + + # Search for each of the other tally's scores in this tally + for score in other.scores: + if score not in self.scores: + all_scores_match = False + else: + no_scores_match = False + + # Either all scores should match, or none should + if no_scores_match: + return True + elif not no_scores_match and not all_scores_match: + return False + + def can_merge(self, other): + """Determine if another tally can be merged with this one + + Parameters + ---------- + other : Tally + Tally to check for merging + + """ + + if not isinstance(other, Tally): + return False + + # Must have same estimator + if self.estimator != other.estimator: + return False + + # Variables to indicate matching filter bins, nuclides and scores + merge_filters = self._can_merge_filters(other) + merge_nuclides = self._can_merge_nuclides(other) + merge_scores = self._can_merge_scores(other) + + # Tallies are mergeable if only one of filters, nuclides and + # scores is mergeable + if sum(merge_filters, merge_nuclides, merge_scores) == 1: + return True + else: + return False + def merge(self, tally): """Merge another tally with this one @@ -778,6 +874,116 @@ class Tally(object): return merged_tally + def join(self, other): + """Join another tally with this one + + Parameters + ---------- + tally : Tally + Tally to join with this one + + Returns + ------- + joined_tally : Tally + Joined tallies + + """ + + if not self.can_merge(other): + msg = 'Unable to join tally ID="{0}" with ' + \ + '"{1}"'.format(other.id, self.id) + raise ValueError(msg) + + # Create deep copy of tally to return as merged tally + joined_tally = copy.deepcopy(self) + + # Differentiate Tally with a new auto-generated Tally ID + joined_tally.id = None + + # Create deep copy of other tally to use for array concatenation + other_copy = copy.deepcopy(other) + + # If two tallies can be merged along a filter's bins + if self._can_merge_filters(other): + + # Search for mergeable filters + for i, filter1 in enumerate(self.filters): + for j, filter2 in enumerate(other.filters): + if filter1 != filter2 and filter1.can_merge(filter2): + other_copy._swap_filters(other_copy.filters[i], filter1) + joined_tally.filters[i] = filter1.merge(filter2) + join_axis = i + break + + # If two tallies can be merged along nuclide bins + elif self._can_merge_nuclides(other): + join_axis = self.num_filters + + # Add unique nuclides from other tally to merged tally + for nuclide in other.nuclides: + if nuclide not in joined_tally.nuclides: + joined_tally.add_score(nuclide) + + # If two tallies can be merged along score bins + elif self._can_merge_scores(other): + join_axis = self.num_filters + 1 + + # Add unique scores from other tally to merged tally + for score in other.scores: + if score not in joined_tally.scores: + joined_tally.add_score(score) + + else: + raise ValueError('Unable to merge tallies') + + # Update filter strides in joined tally + joined_tally._update_filter_strides() + + # Concatenate sum arrays if present in both tallies + if self.sum is not None and other_copy.sum is not None: + self_sum = self.get_reshaped_data(value='sum') + other_sum = other_copy.get_reshaped_data(value='sum') + joined_tally._sum = \ + np.concatenate((self_sum, other_sum), axis=join_axis) + joined_tally._sum = \ + np.reshape(joined_tally._sum, joined_tally.shape) + + # Concatenate sum_sq arrays if present in both tallies + if self.sum_sq is not None and other.sum_sq is not None: + self_sum_sq = self.get_reshaped_data(value='sum_sq') + other_sum_sq = other_copy.get_reshaped_data(value='sum_sq') + joined_tally._sum_sq = \ + np.concatenate((self_sum_sq, other_sum_sq), axis=join_axis) + joined_tally._sum_sq = \ + np.reshape(joined_tally._sum_sq, joined_tally.shape) + + # Concatenate mean arrays if present in both tallies + if self.mean is not None and other.mean is not None: + self_mean = self.get_reshaped_data(value='mean') + other_mean = other_copy.get_reshaped_data(value='mean') + joined_tally._mean = \ + np.concatenate((self_mean, other_mean), axis=join_axis) + joined_tally._mean = \ + np.reshape(joined_tally._mean, joined_tally.shape) + + # Concatenate std. dev. arrays if present in both tallies + if self.std_dev is not None and other.std_dev is not None: + self_std_dev = self.get_reshaped_data(value='std_dev') + other_std_dev = other_copy.get_reshaped_data(value='std_dev') + joined_tally._std_dev = \ + np.concatenate((self_std_dev, other_std_dev), axis=join_axis) + joined_tally._std_dev = \ + np.reshape(joined_tally._std_dev, joined_tally.shape) + + # Sparsify joined tally if both tallies are sparse + joined_tally.sparse = self.sparse and other.sparse + + # Add triggers from other tally to merged tally + for trigger in other.triggers: + joined_tally.add_trigger(trigger) + + return joined_tally + def get_tally_xml(self): """Return XML representation of the tally @@ -1980,8 +2186,7 @@ class Tally(object): # Check that the filters exist in the tally and are not the same if filter1 == filter2: - msg = 'Unable to swap a filter with itself' - raise ValueError(msg) + return elif filter1 not in self.filters: msg = 'Unable to swap "{0}" filter1 in Tally ID="{1}" since it ' \ 'does not contain such a filter'.format(filter1.type, self.id) @@ -2012,6 +2217,8 @@ class Tally(object): else: filter2_bins = [filter2.get_bin(i) for i in range(filter2.num_bins)] + # FIXME: Why doesn't this swap data for sum and sum_sq??? + # Adjust the mean data array to relect the new filter order if self.mean is not None: for bin1, bin2 in itertools.product(filter1_bins, filter2_bins): @@ -2083,6 +2290,8 @@ class Tally(object): self.nuclides[nuclide1_index] = nuclide2 self.nuclides[nuclide2_index] = nuclide1 + # FIXME: Why doesn't this swap data for sum and sum_sq??? + # Adjust the mean data array to relect the new nuclide order if self.mean is not None: nuclide1_mean = self.mean[:, nuclide1_index, :].copy() @@ -2155,6 +2364,8 @@ class Tally(object): self.scores[score1_index] = score2 self.scores[score2_index] = score1 + # FIXME: Why doesn't this swap data for sum and sum_sq??? + # Adjust the mean data array to relect the new nuclide order if self.mean is not None: score1_mean = self.mean[:, :, score1_index].copy() From 76f9c462b583b0567c8fbeca89066527996d8740 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sat, 6 Feb 2016 15:09:02 -0500 Subject: [PATCH 267/650] Removed old tally merge method --- openmc/tallies.py | 49 ++--------------------------------------------- 1 file changed, 2 insertions(+), 47 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index dabbeb04ae..51633186e7 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -684,7 +684,7 @@ class Tally(object): Parameters ---------- other : Tally - Tally to check for mergeable scores + Tally to check for mergeable filters """ @@ -829,52 +829,7 @@ class Tally(object): else: return False - def merge(self, tally): - """Merge another tally with this one - - Parameters - ---------- - tally : Tally - Tally to merge with this one - - Returns - ------- - merged_tally : Tally - Merged tallies - - """ - - if not self.can_merge(tally): - msg = 'Unable to merge tally ID="{0}" with ' + \ - '"{1}"'.format(tally.id, self.id) - raise ValueError(msg) - - # Create deep copy of tally to return as merged tally - merged_tally = copy.deepcopy(self) - - # Differentiate Tally with a new auto-generated Tally ID - merged_tally.id = None - - # Merge filters - for i, filter1 in enumerate(merged_tally.filters): - for filter2 in tally.filters: - if filter1 != filter2 and filter1.can_merge(filter2): - merged_filter = filter1.merge(filter2) - merged_tally.filters[i] = merged_filter - break - - # Add unique scores from second tally to merged tally - for score in tally.scores: - if score not in merged_tally.scores: - merged_tally.add_score(score) - - # Add triggers from second tally to merged tally - for trigger in tally.triggers: - merged_tally.add_trigger(trigger) - - return merged_tally - - def join(self, other): + def merge(self, other): """Join another tally with this one Parameters From 596c819be7650c299d4f97d673e009e5f719382b Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 6 Feb 2016 15:54:53 -0500 Subject: [PATCH 268/650] 2 more revision nmbers to update in python api --- openmc/particle_restart.py | 4 ++-- openmc/statepoint.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openmc/particle_restart.py b/openmc/particle_restart.py index 72bf3ac3de..4aad111325 100644 --- a/openmc/particle_restart.py +++ b/openmc/particle_restart.py @@ -43,11 +43,11 @@ class Particle(object): if 'filetype' not in self._f or self._f[ 'filetype'].value.decode() != 'particle restart': raise IOError('{} is not a particle restart file.'.format(filename)) - if self._f['revision'].value != 1: + if self._f['revision'].value != 2: raise IOError('Particle restart file has a file revision of {} ' 'which is not consistent with the revision this ' 'version of OpenMC expects ({}).'.format( - self._f['revision'].value, 1)) + self._f['revision'].value, 2)) @property def current_batch(self): diff --git a/openmc/statepoint.py b/openmc/statepoint.py index f5b5b2e72d..003b088180 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -103,11 +103,11 @@ class StatePoint(object): raise IOError('Could not read statepoint file. This most likely ' 'means the statepoint file was produced by a different ' 'version of OpenMC than the one you are using.') - if self._f['revision'].value != 14: + if self._f['revision'].value != 15: raise IOError('Statepoint file has a file revision of {} ' 'which is not consistent with the revision this ' 'version of OpenMC expects ({}).'.format( - self._f['revision'].value, 14)) + self._f['revision'].value, 15)) # Set flags for what data has been read self._meshes_read = False From 0710e35233180ac750c178697d66829d5493b7d1 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sat, 6 Feb 2016 15:10:13 -0500 Subject: [PATCH 269/650] Output Pandas energy bins as two columns of floats --- .../pythonapi/examples/mgxs-part-i.ipynb | 201 +- .../examples/pandas-dataframes.ipynb | 1664 +++++++++-------- .../pythonapi/examples/tally-arithmetic.ipynb | 521 +++--- openmc/filter.py | 31 +- openmc/mgxs/mgxs.py | 21 +- 5 files changed, 1280 insertions(+), 1158 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index 94deeec7b4..319c6d1dfd 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -518,8 +518,9 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: ea9fb637f63f9374c7436456141afa850b84acf9\n", - " Date/Time: 2016-01-14 07:16:05\n", + " Git SHA1: 34381b40a9445a727e360873aaa6ef892af1cb6a\n", + " Date/Time: 2016-02-06 15:29:23\n", + " MPI Processes: 1\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -604,20 +605,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 1.1720E+00 seconds\n", - " Reading cross sections = 9.0300E-01 seconds\n", - " Total time in simulation = 1.7319E+01 seconds\n", - " Time in transport only = 1.7310E+01 seconds\n", - " Time in inactive batches = 1.9120E+00 seconds\n", - " Time in active batches = 1.5407E+01 seconds\n", - " Time synchronizing fission bank = 2.0000E-03 seconds\n", + " Total time for initialization = 3.7300E-01 seconds\n", + " Reading cross sections = 9.8000E-02 seconds\n", + " Total time in simulation = 8.5810E+00 seconds\n", + " Time in transport only = 8.5650E+00 seconds\n", + " Time in inactive batches = 1.2990E+00 seconds\n", + " Time in active batches = 7.2820E+00 seconds\n", + " Time synchronizing fission bank = 4.0000E-03 seconds\n", " Sampling source sites = 2.0000E-03 seconds\n", - " SEND/RECV source sites = 0.0000E+00 seconds\n", + " SEND/RECV source sites = 2.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 1.0000E-03 seconds\n", - " Total time elapsed = 1.8507E+01 seconds\n", - " Calculation Rate (inactive) = 13075.3 neutrons/second\n", - " Calculation Rate (active) = 6490.56 neutrons/second\n", + " Total time for finalization = 0.0000E+00 seconds\n", + " Total time elapsed = 8.9680E+00 seconds\n", + " Calculation Rate (inactive) = 19245.6 neutrons/second\n", + " Calculation Rate (active) = 13732.5 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -794,19 +795,19 @@ " \n", " \n", " 1\n", - " 1\n", - " 1\n", - " total\n", - " 0.668323\n", - " 0.001264\n", + " 1\n", + " 1\n", + " total\n", + " 0.668323\n", + " 0.001264\n", " \n", " \n", " 0\n", - " 1\n", - " 2\n", - " total\n", - " 1.293258\n", - " 0.007624\n", + " 1\n", + " 2\n", + " total\n", + " 1.293258\n", + " 0.007624\n", " \n", " \n", "\n", @@ -896,7 +897,8 @@ " \n", " \n", " cell\n", - " energy [MeV]\n", + " energy low [MeV]\n", + " energy high [MeV]\n", " nuclide\n", " score\n", " mean\n", @@ -906,30 +908,32 @@ " \n", " \n", " 0\n", - " 1\n", - " (0.0e+00 - 6.3e-07)\n", - " total\n", - " (((total / flux) - (absorption / flux)) - (sca...\n", - " 4.884981e-15\n", - " 0.011274\n", + " 1\n", + " 0.000000\n", + " 0.000001\n", + " total\n", + " (((total / flux) - (absorption / flux)) - (sca...\n", + " 4.884981e-15\n", + " 0.011274\n", " \n", " \n", " 1\n", - " 1\n", - " (6.3e-07 - 2.0e+01)\n", - " total\n", - " (((total / flux) - (absorption / flux)) - (sca...\n", - " 1.221245e-15\n", - " 0.001802\n", + " 1\n", + " 0.000001\n", + " 20.000000\n", + " total\n", + " (((total / flux) - (absorption / flux)) - (sca...\n", + " 1.221245e-15\n", + " 0.001802\n", " \n", " \n", "\n", "
" ], "text/plain": [ - " cell energy [MeV] nuclide \\\n", - "0 1 (0.0e+00 - 6.3e-07) total \n", - "1 1 (6.3e-07 - 2.0e+01) total \n", + " cell energy low [MeV] energy high [MeV] nuclide \\\n", + "0 1 0.000000 0.000001 total \n", + "1 1 0.000001 20.000000 total \n", "\n", " score mean std. dev. \n", "0 (((total / flux) - (absorption / flux)) - (sca... 4.884981e-15 0.011274 \n", @@ -972,7 +976,8 @@ " \n", " \n", " cell\n", - " energy [MeV]\n", + " energy low [MeV]\n", + " energy high [MeV]\n", " nuclide\n", " score\n", " mean\n", @@ -982,34 +987,36 @@ " \n", " \n", " 0\n", - " 1\n", - " (0.0e+00 - 6.3e-07)\n", - " total\n", - " ((absorption / flux) / (total / flux))\n", - " 0.076219\n", - " 0.000651\n", + " 1\n", + " 0.000000\n", + " 0.000001\n", + " total\n", + " ((absorption / flux) / (total / flux))\n", + " 0.076219\n", + " 0.000651\n", " \n", " \n", " 1\n", - " 1\n", - " (6.3e-07 - 2.0e+01)\n", - " total\n", - " ((absorption / flux) / (total / flux))\n", - " 0.019319\n", - " 0.000086\n", + " 1\n", + " 0.000001\n", + " 20.000000\n", + " total\n", + " ((absorption / flux) / (total / flux))\n", + " 0.019319\n", + " 0.000086\n", " \n", " \n", "\n", "
" ], "text/plain": [ - " cell energy [MeV] nuclide score \\\n", - "0 1 (0.0e+00 - 6.3e-07) total ((absorption / flux) / (total / flux)) \n", - "1 1 (6.3e-07 - 2.0e+01) total ((absorption / flux) / (total / flux)) \n", + " cell energy low [MeV] energy high [MeV] nuclide \\\n", + "0 1 0.000000 0.000001 total \n", + "1 1 0.000001 20.000000 total \n", "\n", - " mean std. dev. \n", - "0 0.076219 0.000651 \n", - "1 0.019319 0.000086 " + " score mean std. dev. \n", + "0 ((absorption / flux) / (total / flux)) 0.076219 0.000651 \n", + "1 ((absorption / flux) / (total / flux)) 0.019319 0.000086 " ] }, "execution_count": 24, @@ -1041,7 +1048,8 @@ " \n", " \n", " cell\n", - " energy [MeV]\n", + " energy low [MeV]\n", + " energy high [MeV]\n", " nuclide\n", " score\n", " mean\n", @@ -1051,34 +1059,36 @@ " \n", " \n", " 0\n", - " 1\n", - " (0.0e+00 - 6.3e-07)\n", - " total\n", - " ((scatter / flux) / (total / flux))\n", - " 0.923781\n", - " 0.007714\n", + " 1\n", + " 0.000000\n", + " 0.000001\n", + " total\n", + " ((scatter / flux) / (total / flux))\n", + " 0.923781\n", + " 0.007714\n", " \n", " \n", " 1\n", - " 1\n", - " (6.3e-07 - 2.0e+01)\n", - " total\n", - " ((scatter / flux) / (total / flux))\n", - " 0.980681\n", - " 0.002617\n", + " 1\n", + " 0.000001\n", + " 20.000000\n", + " total\n", + " ((scatter / flux) / (total / flux))\n", + " 0.980681\n", + " 0.002617\n", " \n", " \n", "\n", "
" ], "text/plain": [ - " cell energy [MeV] nuclide score \\\n", - "0 1 (0.0e+00 - 6.3e-07) total ((scatter / flux) / (total / flux)) \n", - "1 1 (6.3e-07 - 2.0e+01) total ((scatter / flux) / (total / flux)) \n", + " cell energy low [MeV] energy high [MeV] nuclide \\\n", + "0 1 0.000000 0.000001 total \n", + "1 1 0.000001 20.000000 total \n", "\n", - " mean std. dev. \n", - "0 0.923781 0.007714 \n", - "1 0.980681 0.002617 " + " score mean std. dev. \n", + "0 ((scatter / flux) / (total / flux)) 0.923781 0.007714 \n", + "1 ((scatter / flux) / (total / flux)) 0.980681 0.002617 " ] }, "execution_count": 25, @@ -1117,7 +1127,8 @@ " \n", " \n", " cell\n", - " energy [MeV]\n", + " energy low [MeV]\n", + " energy high [MeV]\n", " nuclide\n", " score\n", " mean\n", @@ -1127,30 +1138,32 @@ " \n", " \n", " 0\n", - " 1\n", - " (0.0e+00 - 6.3e-07)\n", - " total\n", - " (((absorption / flux) / (total / flux)) + ((sc...\n", - " 1\n", - " 0.007741\n", + " 1\n", + " 0.000000\n", + " 0.000001\n", + " total\n", + " (((absorption / flux) / (total / flux)) + ((sc...\n", + " 1\n", + " 0.007741\n", " \n", " \n", " 1\n", - " 1\n", - " (6.3e-07 - 2.0e+01)\n", - " total\n", - " (((absorption / flux) / (total / flux)) + ((sc...\n", - " 1\n", - " 0.002619\n", + " 1\n", + " 0.000001\n", + " 20.000000\n", + " total\n", + " (((absorption / flux) / (total / flux)) + ((sc...\n", + " 1\n", + " 0.002619\n", " \n", " \n", "\n", "
" ], "text/plain": [ - " cell energy [MeV] nuclide \\\n", - "0 1 (0.0e+00 - 6.3e-07) total \n", - "1 1 (6.3e-07 - 2.0e+01) total \n", + " cell energy low [MeV] energy high [MeV] nuclide \\\n", + "0 1 0.000000 0.000001 total \n", + "1 1 0.000001 20.000000 total \n", "\n", " score mean std. dev. \n", "0 (((absorption / flux) / (total / flux)) + ((sc... 1 0.007741 \n", diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index 60c2c1c403..16fa16f21b 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -382,7 +382,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ABDg0IE0OQtyQAAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAxLTE0VDA3OjA4OjE5LTA2OjAwSFm98wAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMS0xNFQwNzowODoxOS0wNjowMDkEBU8AAAAASUVORK5C\nYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ACBhQuBnxwGisAAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAyLTA2VDE1OjQ2OjA2LTA1OjAwkB0d7wAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMi0wNlQxNTo0NjowNi0wNTowMOFApVMAAAAASUVORK5C\nYII=\n", "text/plain": [ "" ] @@ -571,8 +571,9 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: ea9fb637f63f9374c7436456141afa850b84acf9\n", - " Date/Time: 2016-01-14 07:08:19\n", + " Git SHA1: 34381b40a9445a727e360873aaa6ef892af1cb6a\n", + " Date/Time: 2016-02-06 15:46:08\n", + " MPI Processes: 1\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -636,20 +637,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 1.2110E+00 seconds\n", - " Reading cross sections = 9.4900E-01 seconds\n", - " Total time in simulation = 1.0453E+01 seconds\n", - " Time in transport only = 1.0440E+01 seconds\n", - " Time in inactive batches = 1.5590E+00 seconds\n", - " Time in active batches = 8.8940E+00 seconds\n", - " Time synchronizing fission bank = 4.0000E-03 seconds\n", + " Total time for initialization = 3.1900E-01 seconds\n", + " Reading cross sections = 8.7000E-02 seconds\n", + " Total time in simulation = 4.8710E+00 seconds\n", + " Time in transport only = 4.8580E+00 seconds\n", + " Time in inactive batches = 7.1900E-01 seconds\n", + " Time in active batches = 4.1520E+00 seconds\n", + " Time synchronizing fission bank = 3.0000E-03 seconds\n", " Sampling source sites = 3.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.1681E+01 seconds\n", - " Calculation Rate (inactive) = 8017.96 neutrons/second\n", - " Calculation Rate (active) = 4216.33 neutrons/second\n", + " Total time elapsed = 5.1990E+00 seconds\n", + " Calculation Rate (inactive) = 17385.3 neutrons/second\n", + " Calculation Rate (active) = 9031.79 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -774,13 +775,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.21161313]]\n", + "[[[ 0.18257268]]\n", "\n", - " [[ 0.07979747]]\n", + " [[ 0.07111957]]\n", "\n", - " [[ 0.40532194]]\n", + " [[ 0.40880276]]\n", "\n", - " [[ 0.19458598]]]\n" + " [[ 0.16407535]]]\n" ] } ], @@ -806,253 +807,287 @@ "
\n", "\n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
mesh 1energy [MeV](mesh 1, x)(mesh 1, y)(mesh 1, z)energy low [MeV]energy high [MeV]scoremeanstd. dev.
xyz
0111(0.0e+00 - 6.3e-07)fission0.0001650.0000350 1 1 1 0.000000 0.000001 fission 0.000202 0.000037
1111(0.0e+00 - 6.3e-07)nu-fission0.0004030.0000851 1 1 1 0.000000 0.000001 nu-fission 0.000492 0.000090
2111(6.3e-07 - 2.0e+01)fission0.0000770.0000042 1 1 1 0.000001 20.000000 fission 0.000076 0.000004
3111(6.3e-07 - 2.0e+01)nu-fission0.0002070.0000113 1 1 1 0.000001 20.000000 nu-fission 0.000204 0.000010
4121(0.0e+00 - 6.3e-07)fission0.0003500.0000434 1 2 1 0.000000 0.000001 fission 0.000375 0.000039
5121(0.0e+00 - 6.3e-07)nu-fission0.0008530.0001055 1 2 1 0.000000 0.000001 nu-fission 0.000914 0.000094
6121(6.3e-07 - 2.0e+01)fission0.0001060.0000156 1 2 1 0.000001 20.000000 fission 0.000107 0.000013
7121(6.3e-07 - 2.0e+01)nu-fission0.0002740.0000397 1 2 1 0.000001 20.000000 nu-fission 0.000278 0.000032
8131(0.0e+00 - 6.3e-07)fission0.0005520.0000608 1 3 1 0.000000 0.000001 fission 0.000564 0.000056
9131(0.0e+00 - 6.3e-07)nu-fission0.0013460.0001469 1 3 1 0.000000 0.000001 nu-fission 0.001374 0.000137
10131(6.3e-07 - 2.0e+01)fission0.0001480.000008 1 3 1 0.000001 20.000000 fission 0.000149 0.000007
11131(6.3e-07 - 2.0e+01)nu-fission0.0003840.000021 1 3 1 0.000001 20.000000 nu-fission 0.000388 0.000018
12141(0.0e+00 - 6.3e-07)fission0.0006820.000054 1 4 1 0.000000 0.000001 fission 0.000669 0.000044
13141(0.0e+00 - 6.3e-07)nu-fission0.0016620.000132 1 4 1 0.000000 0.000001 nu-fission 0.001631 0.000108
14141(6.3e-07 - 2.0e+01)fission0.0001620.000012 1 4 1 0.000001 20.000000 fission 0.000165 0.000011
15141(6.3e-07 - 2.0e+01)nu-fission0.0004240.000031 1 4 1 0.000001 20.000000 nu-fission 0.000433 0.000029
16151(0.0e+00 - 6.3e-07)fission0.0009110.000076 1 5 1 0.000000 0.000001 fission 0.000932 0.000069
17151(0.0e+00 - 6.3e-07)nu-fission0.0022210.000186 1 5 1 0.000000 0.000001 nu-fission 0.002270 0.000168
18151(6.3e-07 - 2.0e+01)fission0.0001780.000013 1 5 1 0.000001 20.000000 fission 0.000183 0.000011
19151(6.3e-07 - 2.0e+01)nu-fission0.0004640.000032 1 5 1 0.000001 20.000000 nu-fission 0.000477 0.000028
\n", "
" ], "text/plain": [ - " mesh 1 energy [MeV] score mean std. dev.\n", - " x y z \n", - "0 1 1 1 (0.0e+00 - 6.3e-07) fission 0.000165 0.000035\n", - "1 1 1 1 (0.0e+00 - 6.3e-07) nu-fission 0.000403 0.000085\n", - "2 1 1 1 (6.3e-07 - 2.0e+01) fission 0.000077 0.000004\n", - "3 1 1 1 (6.3e-07 - 2.0e+01) nu-fission 0.000207 0.000011\n", - "4 1 2 1 (0.0e+00 - 6.3e-07) fission 0.000350 0.000043\n", - "5 1 2 1 (0.0e+00 - 6.3e-07) nu-fission 0.000853 0.000105\n", - "6 1 2 1 (6.3e-07 - 2.0e+01) fission 0.000106 0.000015\n", - "7 1 2 1 (6.3e-07 - 2.0e+01) nu-fission 0.000274 0.000039\n", - "8 1 3 1 (0.0e+00 - 6.3e-07) fission 0.000552 0.000060\n", - "9 1 3 1 (0.0e+00 - 6.3e-07) nu-fission 0.001346 0.000146\n", - "10 1 3 1 (6.3e-07 - 2.0e+01) fission 0.000148 0.000008\n", - "11 1 3 1 (6.3e-07 - 2.0e+01) nu-fission 0.000384 0.000021\n", - "12 1 4 1 (0.0e+00 - 6.3e-07) fission 0.000682 0.000054\n", - "13 1 4 1 (0.0e+00 - 6.3e-07) nu-fission 0.001662 0.000132\n", - "14 1 4 1 (6.3e-07 - 2.0e+01) fission 0.000162 0.000012\n", - "15 1 4 1 (6.3e-07 - 2.0e+01) nu-fission 0.000424 0.000031\n", - "16 1 5 1 (0.0e+00 - 6.3e-07) fission 0.000911 0.000076\n", - "17 1 5 1 (0.0e+00 - 6.3e-07) nu-fission 0.002221 0.000186\n", - "18 1 5 1 (6.3e-07 - 2.0e+01) fission 0.000178 0.000013\n", - "19 1 5 1 (6.3e-07 - 2.0e+01) nu-fission 0.000464 0.000032" + " (mesh 1, x) (mesh 1, y) (mesh 1, z) energy low [MeV] \\\n", + "0 1 1 1 0.000000 \n", + "1 1 1 1 0.000000 \n", + "2 1 1 1 0.000001 \n", + "3 1 1 1 0.000001 \n", + "4 1 2 1 0.000000 \n", + "5 1 2 1 0.000000 \n", + "6 1 2 1 0.000001 \n", + "7 1 2 1 0.000001 \n", + "8 1 3 1 0.000000 \n", + "9 1 3 1 0.000000 \n", + "10 1 3 1 0.000001 \n", + "11 1 3 1 0.000001 \n", + "12 1 4 1 0.000000 \n", + "13 1 4 1 0.000000 \n", + "14 1 4 1 0.000001 \n", + "15 1 4 1 0.000001 \n", + "16 1 5 1 0.000000 \n", + "17 1 5 1 0.000000 \n", + "18 1 5 1 0.000001 \n", + "19 1 5 1 0.000001 \n", + "\n", + " energy high [MeV] score mean std. dev. \n", + "0 0.000001 fission 0.000202 0.000037 \n", + "1 0.000001 nu-fission 0.000492 0.000090 \n", + "2 20.000000 fission 0.000076 0.000004 \n", + "3 20.000000 nu-fission 0.000204 0.000010 \n", + "4 0.000001 fission 0.000375 0.000039 \n", + "5 0.000001 nu-fission 0.000914 0.000094 \n", + "6 20.000000 fission 0.000107 0.000013 \n", + "7 20.000000 nu-fission 0.000278 0.000032 \n", + "8 0.000001 fission 0.000564 0.000056 \n", + "9 0.000001 nu-fission 0.001374 0.000137 \n", + "10 20.000000 fission 0.000149 0.000007 \n", + "11 20.000000 nu-fission 0.000388 0.000018 \n", + "12 0.000001 fission 0.000669 0.000044 \n", + "13 0.000001 nu-fission 0.001631 0.000108 \n", + "14 20.000000 fission 0.000165 0.000011 \n", + "15 20.000000 nu-fission 0.000433 0.000029 \n", + "16 0.000001 fission 0.000932 0.000069 \n", + "17 0.000001 nu-fission 0.002270 0.000168 \n", + "18 20.000000 fission 0.000183 0.000011 \n", + "19 20.000000 nu-fission 0.000477 0.000028 " ] }, "execution_count": 25, @@ -1077,9 +1112,9 @@ "outputs": [ { "data": { - "image/png": "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\n/j8k35yq9tqQdwAAAABJRU5ErkJggg==\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1102,26 +1137,18 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python2.7/dist-packages/matplotlib/collections.py:590: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n", - " if self._edgecolors == str('face'):\n" - ] - }, { "data": { - "image/png": "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\nAAAASUVORK5CYII=\n", + "image/png": "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\ngg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1131,7 +1158,7 @@ "source": [ "# Extract thermal nu-fission rates from pandas\n", "fiss = df[df['score'] == 'nu-fission']\n", - "fiss = fiss[fiss['energy [MeV]'] == '(0.0e+00 - 6.3e-07)']\n", + "fiss = fiss[fiss['energy low [MeV]'] == 0.0]\n", "\n", "# Extract mean and reshape as 2D NumPy arrays\n", "mean = fiss['mean'].reshape((17,17))\n", @@ -1205,148 +1232,148 @@ " \n", " \n", " \n", - " 0\n", - " 10000\n", - " U-235\n", - " scatter-Y0,0\n", - " 0.038027\n", - " 0.001350\n", + " 0 \n", + " 10000\n", + " U-235\n", + " scatter-Y0,0\n", + " 0.037095\n", + " 0.001150\n", " \n", " \n", - " 1\n", - " 10000\n", - " U-235\n", - " scatter-Y1,-1\n", - " 0.000071\n", - " 0.000383\n", + " 1 \n", + " 10000\n", + " U-235\n", + " scatter-Y1,-1\n", + " 0.000266\n", + " 0.000323\n", " \n", " \n", - " 2\n", - " 10000\n", - " U-235\n", - " scatter-Y1,0\n", - " -0.000579\n", - " 0.000250\n", + " 2 \n", + " 10000\n", + " U-235\n", + " scatter-Y1,0\n", + " -0.000417\n", + " 0.000274\n", " \n", " \n", - " 3\n", - " 10000\n", - " U-235\n", - " scatter-Y1,1\n", - " -0.000176\n", - " 0.000282\n", + " 3 \n", + " 10000\n", + " U-235\n", + " scatter-Y1,1\n", + " -0.000228\n", + " 0.000237\n", " \n", " \n", - " 4\n", - " 10000\n", - " U-235\n", - " scatter-Y2,-2\n", - " 0.000105\n", - " 0.000224\n", + " 4 \n", + " 10000\n", + " U-235\n", + " scatter-Y2,-2\n", + " 0.000026\n", + " 0.000199\n", " \n", " \n", - " 5\n", - " 10000\n", - " U-235\n", - " scatter-Y2,-1\n", - " -0.000077\n", - " 0.000221\n", + " 5 \n", + " 10000\n", + " U-235\n", + " scatter-Y2,-1\n", + " -0.000115\n", + " 0.000185\n", " \n", " \n", - " 6\n", - " 10000\n", - " U-235\n", - " scatter-Y2,0\n", - " 0.000134\n", - " 0.000181\n", + " 6 \n", + " 10000\n", + " U-235\n", + " scatter-Y2,0\n", + " 0.000151\n", + " 0.000159\n", " \n", " \n", - " 7\n", - " 10000\n", - " U-235\n", - " scatter-Y2,1\n", - " -0.000117\n", - " 0.000308\n", + " 7 \n", + " 10000\n", + " U-235\n", + " scatter-Y2,1\n", + " -0.000122\n", + " 0.000280\n", " \n", " \n", - " 8\n", - " 10000\n", - " U-235\n", - " scatter-Y2,2\n", - " 0.000039\n", - " 0.000211\n", + " 8 \n", + " 10000\n", + " U-235\n", + " scatter-Y2,2\n", + " 0.000008\n", + " 0.000181\n", " \n", " \n", - " 9\n", - " 10000\n", - " U-238\n", - " scatter-Y0,0\n", - " 2.340987\n", - " 0.014310\n", + " 9 \n", + " 10000\n", + " U-238\n", + " scatter-Y0,0\n", + " 2.328632\n", + " 0.013107\n", " \n", " \n", " 10\n", - " 10000\n", - " U-238\n", - " scatter-Y1,-1\n", - " 0.022817\n", - " 0.002458\n", + " 10000\n", + " U-238\n", + " scatter-Y1,-1\n", + " 0.024530\n", + " 0.002272\n", " \n", " \n", " 11\n", - " 10000\n", - " U-238\n", - " scatter-Y1,0\n", - " 0.001589\n", - " 0.003051\n", + " 10000\n", + " U-238\n", + " scatter-Y1,0\n", + " -0.000059\n", + " 0.002804\n", " \n", " \n", " 12\n", - " 10000\n", - " U-238\n", - " scatter-Y1,1\n", - " -0.027146\n", - " 0.002511\n", + " 10000\n", + " U-238\n", + " scatter-Y1,1\n", + " -0.027990\n", + " 0.002536\n", " \n", " \n", " 13\n", - " 10000\n", - " U-238\n", - " scatter-Y2,-2\n", - " -0.004146\n", - " 0.001722\n", + " 10000\n", + " U-238\n", + " scatter-Y2,-2\n", + " -0.004861\n", + " 0.001575\n", " \n", " \n", " 14\n", - " 10000\n", - " U-238\n", - " scatter-Y2,-1\n", - " 0.001765\n", - " 0.002474\n", + " 10000\n", + " U-238\n", + " scatter-Y2,-1\n", + " 0.000557\n", + " 0.002018\n", " \n", " \n", " 15\n", - " 10000\n", - " U-238\n", - " scatter-Y2,0\n", - " 0.006038\n", - " 0.001917\n", + " 10000\n", + " U-238\n", + " scatter-Y2,0\n", + " 0.006236\n", + " 0.001627\n", " \n", " \n", " 16\n", - " 10000\n", - " U-238\n", - " scatter-Y2,1\n", - " 0.000167\n", - " 0.001438\n", + " 10000\n", + " U-238\n", + " scatter-Y2,1\n", + " -0.000648\n", + " 0.001551\n", " \n", " \n", " 17\n", - " 10000\n", - " U-238\n", - " scatter-Y2,2\n", - " -0.001684\n", - " 0.001535\n", + " 10000\n", + " U-238\n", + " scatter-Y2,2\n", + " -0.001031\n", + " 0.001310\n", " \n", " \n", "\n", @@ -1354,24 +1381,24 @@ ], "text/plain": [ " cell nuclide score mean std. dev.\n", - "0 10000 U-235 scatter-Y0,0 0.038027 0.001350\n", - "1 10000 U-235 scatter-Y1,-1 0.000071 0.000383\n", - "2 10000 U-235 scatter-Y1,0 -0.000579 0.000250\n", - "3 10000 U-235 scatter-Y1,1 -0.000176 0.000282\n", - "4 10000 U-235 scatter-Y2,-2 0.000105 0.000224\n", - "5 10000 U-235 scatter-Y2,-1 -0.000077 0.000221\n", - "6 10000 U-235 scatter-Y2,0 0.000134 0.000181\n", - "7 10000 U-235 scatter-Y2,1 -0.000117 0.000308\n", - "8 10000 U-235 scatter-Y2,2 0.000039 0.000211\n", - "9 10000 U-238 scatter-Y0,0 2.340987 0.014310\n", - "10 10000 U-238 scatter-Y1,-1 0.022817 0.002458\n", - "11 10000 U-238 scatter-Y1,0 0.001589 0.003051\n", - "12 10000 U-238 scatter-Y1,1 -0.027146 0.002511\n", - "13 10000 U-238 scatter-Y2,-2 -0.004146 0.001722\n", - "14 10000 U-238 scatter-Y2,-1 0.001765 0.002474\n", - "15 10000 U-238 scatter-Y2,0 0.006038 0.001917\n", - "16 10000 U-238 scatter-Y2,1 0.000167 0.001438\n", - "17 10000 U-238 scatter-Y2,2 -0.001684 0.001535" + "0 10000 U-235 scatter-Y0,0 0.037095 0.001150\n", + "1 10000 U-235 scatter-Y1,-1 0.000266 0.000323\n", + "2 10000 U-235 scatter-Y1,0 -0.000417 0.000274\n", + "3 10000 U-235 scatter-Y1,1 -0.000228 0.000237\n", + "4 10000 U-235 scatter-Y2,-2 0.000026 0.000199\n", + "5 10000 U-235 scatter-Y2,-1 -0.000115 0.000185\n", + "6 10000 U-235 scatter-Y2,0 0.000151 0.000159\n", + "7 10000 U-235 scatter-Y2,1 -0.000122 0.000280\n", + "8 10000 U-235 scatter-Y2,2 0.000008 0.000181\n", + "9 10000 U-238 scatter-Y0,0 2.328632 0.013107\n", + "10 10000 U-238 scatter-Y1,-1 0.024530 0.002272\n", + "11 10000 U-238 scatter-Y1,0 -0.000059 0.002804\n", + "12 10000 U-238 scatter-Y1,1 -0.027990 0.002536\n", + "13 10000 U-238 scatter-Y2,-2 -0.004861 0.001575\n", + "14 10000 U-238 scatter-Y2,-1 0.000557 0.002018\n", + "15 10000 U-238 scatter-Y2,0 0.006236 0.001627\n", + "16 10000 U-238 scatter-Y2,1 -0.000648 0.001551\n", + "17 10000 U-238 scatter-Y2,2 -0.001031 0.001310" ] }, "execution_count": 29, @@ -1405,8 +1432,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.00153535 0.0143096 ]\n", - " [ 0.00021107 0.00135025]]]\n" + "[[[ 0.00131009 0.01310707]\n", + " [ 0.00018089 0.00114976]]]\n" ] } ], @@ -1474,7 +1501,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.04318886]]]\n" + "[[[ 0.04537029]]]\n" ] } ], @@ -1517,143 +1544,143 @@ " \n", " \n", " 558\n", - " 279\n", - " absorption\n", - " 0.000102\n", - " 0.000016\n", + " 279\n", + " absorption\n", + " 0.000093\n", + " 0.000013\n", " \n", " \n", " 559\n", - " 279\n", - " scatter\n", - " 0.013889\n", - " 0.000964\n", + " 279\n", + " scatter\n", + " 0.013504\n", + " 0.000805\n", " \n", " \n", " 560\n", - " 280\n", - " absorption\n", - " 0.000087\n", - " 0.000012\n", + " 280\n", + " absorption\n", + " 0.000084\n", + " 0.000010\n", " \n", " \n", " 561\n", - " 280\n", - " scatter\n", - " 0.014347\n", - " 0.000652\n", + " 280\n", + " scatter\n", + " 0.014215\n", + " 0.000612\n", " \n", " \n", " 562\n", - " 281\n", - " absorption\n", - " 0.000087\n", - " 0.000010\n", + " 281\n", + " absorption\n", + " 0.000091\n", + " 0.000008\n", " \n", " \n", " 563\n", - " 281\n", - " scatter\n", - " 0.014283\n", - " 0.000715\n", + " 281\n", + " scatter\n", + " 0.014545\n", + " 0.000590\n", " \n", " \n", " 564\n", - " 282\n", - " absorption\n", - " 0.000111\n", - " 0.000012\n", + " 282\n", + " absorption\n", + " 0.000112\n", + " 0.000012\n", " \n", " \n", " 565\n", - " 282\n", - " scatter\n", - " 0.016374\n", - " 0.000865\n", + " 282\n", + " scatter\n", + " 0.016321\n", + " 0.000729\n", " \n", " \n", " 566\n", - " 283\n", - " absorption\n", - " 0.000090\n", - " 0.000008\n", + " 283\n", + " absorption\n", + " 0.000092\n", + " 0.000007\n", " \n", " \n", " 567\n", - " 283\n", - " scatter\n", - " 0.015839\n", - " 0.000795\n", + " 283\n", + " scatter\n", + " 0.016163\n", + " 0.000661\n", " \n", " \n", " 568\n", - " 284\n", - " absorption\n", - " 0.000103\n", - " 0.000012\n", + " 284\n", + " absorption\n", + " 0.000104\n", + " 0.000011\n", " \n", " \n", " 569\n", - " 284\n", - " scatter\n", - " 0.017182\n", - " 0.000660\n", + " 284\n", + " scatter\n", + " 0.017384\n", + " 0.000599\n", " \n", " \n", " 570\n", - " 285\n", - " absorption\n", - " 0.000111\n", - " 0.000014\n", + " 285\n", + " absorption\n", + " 0.000111\n", + " 0.000011\n", " \n", " \n", " 571\n", - " 285\n", - " scatter\n", - " 0.017565\n", - " 0.000862\n", + " 285\n", + " scatter\n", + " 0.018015\n", + " 0.000774\n", " \n", " \n", " 572\n", - " 286\n", - " absorption\n", - " 0.000125\n", - " 0.000014\n", + " 286\n", + " absorption\n", + " 0.000125\n", + " 0.000012\n", " \n", " \n", " 573\n", - " 286\n", - " scatter\n", - " 0.018128\n", - " 0.000931\n", + " 286\n", + " scatter\n", + " 0.018294\n", + " 0.000828\n", " \n", " \n", " 574\n", - " 287\n", - " absorption\n", - " 0.000124\n", - " 0.000016\n", + " 287\n", + " absorption\n", + " 0.000119\n", + " 0.000013\n", " \n", " \n", " 575\n", - " 287\n", - " scatter\n", - " 0.017253\n", - " 0.000902\n", + " 287\n", + " scatter\n", + " 0.017483\n", + " 0.000757\n", " \n", " \n", " 576\n", - " 288\n", - " absorption\n", - " 0.000119\n", - " 0.000016\n", + " 288\n", + " absorption\n", + " 0.000113\n", + " 0.000014\n", " \n", " \n", " 577\n", - " 288\n", - " scatter\n", - " 0.018482\n", - " 0.000861\n", + " 288\n", + " scatter\n", + " 0.018248\n", + " 0.000782\n", " \n", " \n", "\n", @@ -1661,26 +1688,26 @@ ], "text/plain": [ " distribcell score mean std. dev.\n", - "558 279 absorption 0.000102 0.000016\n", - "559 279 scatter 0.013889 0.000964\n", - "560 280 absorption 0.000087 0.000012\n", - "561 280 scatter 0.014347 0.000652\n", - "562 281 absorption 0.000087 0.000010\n", - "563 281 scatter 0.014283 0.000715\n", - "564 282 absorption 0.000111 0.000012\n", - "565 282 scatter 0.016374 0.000865\n", - "566 283 absorption 0.000090 0.000008\n", - "567 283 scatter 0.015839 0.000795\n", - "568 284 absorption 0.000103 0.000012\n", - "569 284 scatter 0.017182 0.000660\n", - "570 285 absorption 0.000111 0.000014\n", - "571 285 scatter 0.017565 0.000862\n", - "572 286 absorption 0.000125 0.000014\n", - "573 286 scatter 0.018128 0.000931\n", - "574 287 absorption 0.000124 0.000016\n", - "575 287 scatter 0.017253 0.000902\n", - "576 288 absorption 0.000119 0.000016\n", - "577 288 scatter 0.018482 0.000861" + "558 279 absorption 0.000093 0.000013\n", + "559 279 scatter 0.013504 0.000805\n", + "560 280 absorption 0.000084 0.000010\n", + "561 280 scatter 0.014215 0.000612\n", + "562 281 absorption 0.000091 0.000008\n", + "563 281 scatter 0.014545 0.000590\n", + "564 282 absorption 0.000112 0.000012\n", + "565 282 scatter 0.016321 0.000729\n", + "566 283 absorption 0.000092 0.000007\n", + "567 283 scatter 0.016163 0.000661\n", + "568 284 absorption 0.000104 0.000011\n", + "569 284 scatter 0.017384 0.000599\n", + "570 285 absorption 0.000111 0.000011\n", + "571 285 scatter 0.018015 0.000774\n", + "572 286 absorption 0.000125 0.000012\n", + "573 286 scatter 0.018294 0.000828\n", + "574 287 absorption 0.000119 0.000013\n", + "575 287 scatter 0.017483 0.000757\n", + "576 288 absorption 0.000113 0.000014\n", + "577 288 scatter 0.018248 0.000782" ] }, "execution_count": 33, @@ -1716,397 +1743,415 @@ "
\n", "\n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
level 1level 2level 3(level 1, cell, id)(level 1, univ, id)(level 2, lat, id)(level 2, lat, x)(level 2, lat, y)(level 2, lat, z)(level 3, cell, id)(level 3, univ, id)distribcellscoremeanstd. dev.
cellunivlatcelluniv
idididxyzidid
01000301000100010002100000absorption0.0001130.0000130 10003 0 10001 0 0 0 10002 10000 0 absorption 0.000123 0.000012
11000301000100010002100000scatter0.0173370.0007491 10003 0 10001 0 0 0 10002 10000 0 scatter 0.017805 0.000808
21000301000101010002100001absorption0.0002040.0000212 10003 0 10001 0 1 0 10002 10000 1 absorption 0.000217 0.000020
31000301000101010002100001scatter0.0276310.0013483 10003 0 10001 0 1 0 10002 10000 1 scatter 0.028867 0.001263
41000301000102010002100002absorption0.0003190.0000254 10003 0 10001 0 2 0 10002 10000 2 absorption 0.000318 0.000020
51000301000102010002100002scatter0.0400520.0014275 10003 0 10001 0 2 0 10002 10000 2 scatter 0.040493 0.001269
61000301000103010002100003absorption0.0003880.0000226 10003 0 10001 0 3 0 10002 10000 3 absorption 0.000386 0.000018
71000301000103010002100003scatter0.0485780.0015617 10003 0 10001 0 3 0 10002 10000 3 scatter 0.048576 0.001337
81000301000104010002100004absorption0.0005110.0000308 10003 0 10001 0 4 0 10002 10000 4 absorption 0.000501 0.000026
91000301000104010002100004scatter0.0579030.0019889 10003 0 10001 0 4 0 10002 10000 4 scatter 0.057063 0.001715
101000301000105010002100005absorption0.0004810.000033 10003 0 10001 0 5 0 10002 10000 5 absorption 0.000484 0.000026
111000301000105010002100005scatter0.0612110.001989 10003 0 10001 0 5 0 10002 10000 5 scatter 0.060822 0.001581
121000301000106010002100006absorption0.0005420.000045 10003 0 10001 0 6 0 10002 10000 6 absorption 0.000532 0.000039
131000301000106010002100006scatter0.0708880.002497 10003 0 10001 0 6 0 10002 10000 6 scatter 0.069101 0.002249
141000301000107010002100007absorption0.0005870.000047 10003 0 10001 0 7 0 10002 10000 7 absorption 0.000577 0.000039
151000301000107010002100007scatter0.0781070.002794 10003 0 10001 0 7 0 10002 10000 7 scatter 0.076722 0.002335
161000301000108010002100008absorption0.0006270.000033 10003 0 10001 0 8 0 10002 10000 8 absorption 0.000649 0.000039
171000301000108010002100008scatter0.0820310.001740 10003 0 10001 0 8 0 10002 10000 8 scatter 0.081564 0.001610
181000301000109010002100009absorption0.0006670.000028 10003 0 10001 0 9 0 10002 10000 9 absorption 0.000680 0.000032
191000301000109010002100009scatter0.0885160.002037 10003 0 10001 0 9 0 10002 10000 9 scatter 0.087715 0.001959
\n", "
" ], "text/plain": [ - " level 1 level 2 level 3 distribcell score \\\n", - " cell univ lat cell univ \n", - " id id id x y z id id \n", - "0 10003 0 10001 0 0 0 10002 10000 0 absorption \n", - "1 10003 0 10001 0 0 0 10002 10000 0 scatter \n", - "2 10003 0 10001 0 1 0 10002 10000 1 absorption \n", - "3 10003 0 10001 0 1 0 10002 10000 1 scatter \n", - "4 10003 0 10001 0 2 0 10002 10000 2 absorption \n", - "5 10003 0 10001 0 2 0 10002 10000 2 scatter \n", - "6 10003 0 10001 0 3 0 10002 10000 3 absorption \n", - "7 10003 0 10001 0 3 0 10002 10000 3 scatter \n", - "8 10003 0 10001 0 4 0 10002 10000 4 absorption \n", - "9 10003 0 10001 0 4 0 10002 10000 4 scatter \n", - "10 10003 0 10001 0 5 0 10002 10000 5 absorption \n", - "11 10003 0 10001 0 5 0 10002 10000 5 scatter \n", - "12 10003 0 10001 0 6 0 10002 10000 6 absorption \n", - "13 10003 0 10001 0 6 0 10002 10000 6 scatter \n", - "14 10003 0 10001 0 7 0 10002 10000 7 absorption \n", - "15 10003 0 10001 0 7 0 10002 10000 7 scatter \n", - "16 10003 0 10001 0 8 0 10002 10000 8 absorption \n", - "17 10003 0 10001 0 8 0 10002 10000 8 scatter \n", - "18 10003 0 10001 0 9 0 10002 10000 9 absorption \n", - "19 10003 0 10001 0 9 0 10002 10000 9 scatter \n", + " (level 1, cell, id) (level 1, univ, id) (level 2, lat, id) \\\n", + "0 10003 0 10001 \n", + "1 10003 0 10001 \n", + "2 10003 0 10001 \n", + "3 10003 0 10001 \n", + "4 10003 0 10001 \n", + "5 10003 0 10001 \n", + "6 10003 0 10001 \n", + "7 10003 0 10001 \n", + "8 10003 0 10001 \n", + "9 10003 0 10001 \n", + "10 10003 0 10001 \n", + "11 10003 0 10001 \n", + "12 10003 0 10001 \n", + "13 10003 0 10001 \n", + "14 10003 0 10001 \n", + "15 10003 0 10001 \n", + "16 10003 0 10001 \n", + "17 10003 0 10001 \n", + "18 10003 0 10001 \n", + "19 10003 0 10001 \n", "\n", - " mean std. dev. \n", - " \n", - " \n", - "0 0.000113 0.000013 \n", - "1 0.017337 0.000749 \n", - "2 0.000204 0.000021 \n", - "3 0.027631 0.001348 \n", - "4 0.000319 0.000025 \n", - "5 0.040052 0.001427 \n", - "6 0.000388 0.000022 \n", - "7 0.048578 0.001561 \n", - "8 0.000511 0.000030 \n", - "9 0.057903 0.001988 \n", - "10 0.000481 0.000033 \n", - "11 0.061211 0.001989 \n", - "12 0.000542 0.000045 \n", - "13 0.070888 0.002497 \n", - "14 0.000587 0.000047 \n", - "15 0.078107 0.002794 \n", - "16 0.000627 0.000033 \n", - "17 0.082031 0.001740 \n", - "18 0.000667 0.000028 \n", - "19 0.088516 0.002037 " + " (level 2, lat, x) (level 2, lat, y) (level 2, lat, z) \\\n", + "0 0 0 0 \n", + "1 0 0 0 \n", + "2 0 1 0 \n", + "3 0 1 0 \n", + "4 0 2 0 \n", + "5 0 2 0 \n", + "6 0 3 0 \n", + "7 0 3 0 \n", + "8 0 4 0 \n", + "9 0 4 0 \n", + "10 0 5 0 \n", + "11 0 5 0 \n", + "12 0 6 0 \n", + "13 0 6 0 \n", + "14 0 7 0 \n", + "15 0 7 0 \n", + "16 0 8 0 \n", + "17 0 8 0 \n", + "18 0 9 0 \n", + "19 0 9 0 \n", + "\n", + " (level 3, cell, id) (level 3, univ, id) distribcell score \\\n", + "0 10002 10000 0 absorption \n", + "1 10002 10000 0 scatter \n", + "2 10002 10000 1 absorption \n", + "3 10002 10000 1 scatter \n", + "4 10002 10000 2 absorption \n", + "5 10002 10000 2 scatter \n", + "6 10002 10000 3 absorption \n", + "7 10002 10000 3 scatter \n", + "8 10002 10000 4 absorption \n", + "9 10002 10000 4 scatter \n", + "10 10002 10000 5 absorption \n", + "11 10002 10000 5 scatter \n", + "12 10002 10000 6 absorption \n", + "13 10002 10000 6 scatter \n", + "14 10002 10000 7 absorption \n", + "15 10002 10000 7 scatter \n", + "16 10002 10000 8 absorption \n", + "17 10002 10000 8 scatter \n", + "18 10002 10000 9 absorption \n", + "19 10002 10000 9 scatter \n", + "\n", + " mean std. dev. \n", + "0 0.000123 0.000012 \n", + "1 0.017805 0.000808 \n", + "2 0.000217 0.000020 \n", + "3 0.028867 0.001263 \n", + "4 0.000318 0.000020 \n", + "5 0.040493 0.001269 \n", + "6 0.000386 0.000018 \n", + "7 0.048576 0.001337 \n", + "8 0.000501 0.000026 \n", + "9 0.057063 0.001715 \n", + "10 0.000484 0.000026 \n", + "11 0.060822 0.001581 \n", + "12 0.000532 0.000039 \n", + "13 0.069101 0.002249 \n", + "14 0.000577 0.000039 \n", + "15 0.076722 0.002335 \n", + "16 0.000649 0.000039 \n", + "17 0.081564 0.001610 \n", + "18 0.000680 0.000032 \n", + "19 0.087715 0.001959 " ] }, "execution_count": 34, @@ -2135,62 +2180,52 @@ "
\n", "\n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
meanstd. dev.
count289.000000289.000000 289.000000 289.000000
mean0.0004190.000024 0.000418 0.000022
std0.0002370.000010 0.000239 0.000009
min0.0000150.000003 0.000018 0.000004
25%0.0002070.000017 0.000202 0.000015
50%0.0004150.000023 0.000402 0.000021
75%0.0006150.000030 0.000615 0.000027
max0.0009010.000055 0.000892 0.000044
\n", @@ -2198,16 +2233,14 @@ ], "text/plain": [ " mean std. dev.\n", - " \n", - " \n", "count 289.000000 289.000000\n", - "mean 0.000419 0.000024\n", - "std 0.000237 0.000010\n", - "min 0.000015 0.000003\n", - "25% 0.000207 0.000017\n", - "50% 0.000415 0.000023\n", - "75% 0.000615 0.000030\n", - "max 0.000901 0.000055" + "mean 0.000418 0.000022\n", + "std 0.000239 0.000009\n", + "min 0.000018 0.000004\n", + "25% 0.000202 0.000015\n", + "50% 0.000402 0.000021\n", + "75% 0.000615 0.000027\n", + "max 0.000892 0.000044" ] }, "execution_count": 35, @@ -2242,7 +2275,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Mann-Whitney Test p-value: 0.456115837774\n" + "Mann-Whitney Test p-value: 0.414863173548\n" ] } ], @@ -2280,7 +2313,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Mann-Whitney Test p-value: 4.59783355073e-42\n" + "Mann-Whitney Test p-value: 3.28554363741e-42\n" ] } ], @@ -2316,7 +2349,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python2.7/dist-packages/ipykernel/__main__.py:4: SettingWithCopyWarning: \n", + "/home/smharper/.local/lib/python2.7/site-packages/ipykernel/__main__.py:4: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", @@ -2326,7 +2359,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 38, @@ -2335,9 +2368,9 @@ }, { "data": { - "image/png": "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\nTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2364,7 +2397,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 39, @@ -2373,9 +2406,9 @@ }, { "data": { - "image/png": "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\nwXh7GWfQoEFRh1AjaurCcmlKCiJSrrC+eKR6wkzYaj4SEZE4JQUREYlTUhARkTglBRERiVNSEJFa\nJTc3l8mTJ8dfjx07ln322Yf333+frKwscnJyyMnJoW3btvTt25dJkyZ9r3yjRo3i2+Xk5HDNNdek\nuhppS0lBRGoVM4v3vhk1ahRXXXUVr732Gp07dwZg48aNFBUVMWfOHE4++WTOOussRo0aVaL8K6+8\nQlFRUXwaPnx4JHVJR0oKIlLruDuPPfYYN9xwAxMnTuSYY4753jatW7fmmmuuYdiwYdx0000RRFk7\nKSmISK3z8MMPc/vtt/P222/Ts2fPCrc966yzWLt2LZ9++ml8me6/KJ9uXhORKrHf18wNVH575b6g\n3Z1JkybRp08funfvvsft27dvD8A333wTL3/mmWdSr95/v/7uueceLr300krFkamUFESkSir7ZV5T\nzIxHH32UO++8k1/+8peMHDmywu2//PJLAPbZZ594+Zdffpk+ffqEHmttpOYjEal12rRpw+TJk5ky\nZQq/+tWvKtz2xRdfpE2bNnTr1i1F0dVuSgoiUiu1a9eOyZMn88Ybb3D99dfHlxdfL1izZg0PPfQQ\nd9xxB3fffXeJsrqmUD41H4lIrdWpUyfefvttevfuzerVqwFo3rw57k7jxo056qijGDduHKecckqJ\ncn379iU7Ozv++pRTTuH5559PaezpSklBRGqVpUuXlnidm5vL8uXLASgoKKh0eSlJzUciIhKnpCAi\nInFKCiIiEqekICIicUoKIiISp6QgIiJxSgoiIhKnpCAiInFKCiKSUbp37877778fdRi1lpKCiCSl\n+IlnYU7JKP04ToAnn3ySE088EYC5c+fSu3fvCvexbNkysrKy2L17d9X+GBlMw1yISCWEOZBcckmh\nMglkT8IaGG/Xrl0lxlaqTXSmICIZJTc3l7fffhuAGTNmcOSRR9KsWTPatm3LDTfcABA/k2jevDk5\nOTl8+OGHuDt/+MMfyM3NpU2bNlx88cV8++238f0+9dRTdOnShZYtW8a3Kz7OsGHDOOecc7jwwgtp\n1qwZo0aN4t///jfHHnssLVq0oH379lx99dXs2LEjvr+srCweeeQRDjzwQJo2bcptt93G4sWLOfbY\nY2nevDkDBgwosX2qKCmISK1T0S/8xLOIa6+9luuuu46NGzeyZMkSzj33XACmTJkCwMaNGykqKqJX\nr1488cQTjBo1infffZclS5awadMmrrrqKgDmzZvHlVdeyZgxY1i1ahUbN25k5cqVJY47fvx4zj33\nXDZu3MjAgQPJzs7mgQce4Ouvv2batGlMnjyZhx9+uESZiRMnMmvWLKZPn86f/vQnhgwZwpgxY1i+\nfDmFhYWMGTOmRv5elaGkIGmrOu3OkrmKH6fZokWL+HTllVeW+dlo0KABn332GV999RWNGjWiV69e\n8X2UNnr0aH7961+Tm5tL48aNufvuuxk7diy7du1i3Lhx9OvXj+OOO4769etzxx13fO94xx13HP36\n9QNgr732omfPnhx99NFkZWXRpUsXhg4dynvvvVeizI033kiTJk3Iz8/n0EMP5bTTTiM3N5emTZty\n2mmnMWvWrJr6syVNSUHSnJeapK4rfpzm+vXr49PDDz9c5hf9yJEjWbhwIXl5eRx99NG8+uqr5e53\n1apVdOnSJf66c+fO7Ny5kzVr1rBq1So6duwYX7f33nuz7777liifuB5g4cKFnH766bRr145mzZpx\n66238vXXX5fYpk2bNiX2Wfr1pk2b9vDXqHlKCiJS65XXnHTAAQdQUFDAunXruOmmmzjnnHPYsmVL\nmWcV7du3Z9myZfHXy5cvp169erRt25Z27dqxYsWK+LotW7Z87wu+9D6vuOIK8vPzWbRoERs3buSu\nu+6qFb2dlBREJGM9/fTTrFu3DoBmzZphZmRlZdGqVSuysrJYvHhxfNvzzz+f+++/n2XLlrFp0yZu\nueUWBgwYQFZWFv3792fChAlMmzaN7du3M2zYsD32XNq0aRM5OTk0atSIBQsW8Mgjj+wx3sR9RvXI\nUCUFEakEC3GqRlTlXG9688036d69Ozk5OVx33XWMHTuWhg0b0qhRI2699VaOP/54WrRowYwZM/jF\nL37BhRdeSO/evdlvv/1o1KgRDz74IACHHHIIDz74IAMGDKB9+/bk5OTQunVrGjZsWO7x77nnHgoK\nCmjatClDhw5lwIABJbYpK97S66O4hmZhZSMz6wQ8BbQm1hj8uLsPN7N9gGeALsAy4OfuvqFUWc/k\nB2sXFBQwcODAqMMITU3VL/YfovTnwCJ/6Hpdef/Mov9bp6tNmzbRokULFi1aVOI6RKqU994Ey6uV\nScI8U9gBXOfuhwDHAFeaWR5wM/CWux8ETA5ei4iktQkTJrB582a+++47brjhBg477LBIEkLYQksK\n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\nReuGFnegfMcAAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2390,6 +2423,15 @@ "pylab.xlabel('Mean')\n", "pylab.legend(['KDE', 'Histogram'])" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index 87cdc9b663..91514719db 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -366,7 +366,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ABDg0ADuhPUfUAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDEtMTRUMDc6MDA6\nMTQtMDY6MDA6WZzHAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAxLTE0VDA3OjAwOjE0LTA2OjAw\nSwQkewAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ACBhQ1GVhO3EQAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDItMDZUMTU6NTM6\nMjQtMDU6MDBiAB8/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAyLTA2VDE1OjUzOjI0LTA1OjAw\nE12ngwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -472,7 +472,7 @@ "# Resonance Escape Probability tallies\n", "therm_abs_rate = openmc.Tally(name='therm. abs. rate')\n", "therm_abs_rate.add_score('absorption')\n", - "therm_abs_rate.add_filter(openmc.Filter(type='energy', bins=[0., 0.625]))\n", + "therm_abs_rate.add_filter(openmc.Filter(type='energy', bins=[0., 0.625e-6]))\n", "tallies_file.add_tally(therm_abs_rate)" ] }, @@ -487,7 +487,7 @@ "# Thermal Flux Utilization tallies\n", "fuel_therm_abs_rate = openmc.Tally(name='fuel therm. abs. rate')\n", "fuel_therm_abs_rate.add_score('absorption')\n", - "fuel_therm_abs_rate.add_filter(openmc.Filter(type='energy', bins=[0., 0.625]))\n", + "fuel_therm_abs_rate.add_filter(openmc.Filter(type='energy', bins=[0., 0.625e-6]))\n", "fuel_therm_abs_rate.add_filter(openmc.Filter(type='cell', bins=[fuel_cell.id]))\n", "tallies_file.add_tally(fuel_therm_abs_rate)" ] @@ -503,7 +503,7 @@ "# Fast Fission Factor tallies\n", "therm_fiss_rate = openmc.Tally(name='therm. fiss. rate')\n", "therm_fiss_rate.add_score('nu-fission')\n", - "therm_fiss_rate.add_filter(openmc.Filter(type='energy', bins=[0., 0.625]))\n", + "therm_fiss_rate.add_filter(openmc.Filter(type='energy', bins=[0., 0.625e-6]))\n", "tallies_file.add_tally(therm_fiss_rate)" ] }, @@ -576,8 +576,9 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: ea9fb637f63f9374c7436456141afa850b84acf9\n", - " Date/Time: 2016-01-14 07:00:14\n", + " Git SHA1: 34381b40a9445a727e360873aaa6ef892af1cb6a\n", + " Date/Time: 2016-02-06 15:53:27\n", + " MPI Processes: 1\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -633,20 +634,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 1.2510E+00 seconds\n", - " Reading cross sections = 9.7600E-01 seconds\n", - " Total time in simulation = 1.5844E+01 seconds\n", - " Time in transport only = 1.5834E+01 seconds\n", - " Time in inactive batches = 2.2840E+00 seconds\n", - " Time in active batches = 1.3560E+01 seconds\n", + " Total time for initialization = 3.8900E-01 seconds\n", + " Reading cross sections = 8.8000E-02 seconds\n", + " Total time in simulation = 8.0560E+00 seconds\n", + " Time in transport only = 8.0400E+00 seconds\n", + " Time in inactive batches = 1.1570E+00 seconds\n", + " Time in active batches = 6.8990E+00 seconds\n", " Time synchronizing fission bank = 3.0000E-03 seconds\n", - " Sampling source sites = 2.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Sampling source sites = 3.0000E-03 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 1.0000E-03 seconds\n", - " Total time elapsed = 1.7110E+01 seconds\n", - " Calculation Rate (inactive) = 5472.85 neutrons/second\n", - " Calculation Rate (active) = 2765.49 neutrons/second\n", + " Total time for finalization = 2.0000E-03 seconds\n", + " Total time elapsed = 8.4560E+00 seconds\n", + " Calculation Rate (inactive) = 10803.8 neutrons/second\n", + " Calculation Rate (active) = 5435.57 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -758,10 +759,10 @@ " \n", " \n", " 0\n", - " total\n", - " (nu-fission / absorption)\n", - " 1.040166\n", - " 0.009069\n", + " total\n", + " (nu-fission / absorption)\n", + " 1.040166\n", + " 0.009069\n", " \n", " \n", "\n", @@ -809,7 +810,8 @@ " \n", " \n", " \n", - " energy [MeV]\n", + " energy low [MeV]\n", + " energy high [MeV]\n", " nuclide\n", " score\n", " mean\n", @@ -819,19 +821,23 @@ " \n", " \n", " 0\n", - " (0.0e+00 - 6.2e-01)\n", - " total\n", - " absorption\n", - " 0.95938\n", - " 0.008187\n", + " 0\n", + " 0.000001\n", + " total\n", + " absorption\n", + " 0.694707\n", + " 0.006699\n", " \n", " \n", "\n", "
" ], "text/plain": [ - " energy [MeV] nuclide score mean std. dev.\n", - "0 (0.0e+00 - 6.2e-01) total absorption 0.95938 0.008187" + " energy low [MeV] energy high [MeV] nuclide score mean \\\n", + "0 0 0.000001 total absorption 0.694707 \n", + "\n", + " std. dev. \n", + "0 0.006699 " ] }, "execution_count": 27, @@ -869,7 +875,8 @@ " \n", " \n", " \n", - " energy [MeV]\n", + " energy low [MeV]\n", + " energy high [MeV]\n", " nuclide\n", " score\n", " mean\n", @@ -879,19 +886,23 @@ " \n", " \n", " 0\n", - " (0.0e+00 - 6.2e-01)\n", - " total\n", - " nu-fission\n", - " 1.090899\n", - " 0.010602\n", + " 0\n", + " 0.000001\n", + " total\n", + " nu-fission\n", + " 1.201216\n", + " 0.012288\n", " \n", " \n", "\n", "
" ], "text/plain": [ - " energy [MeV] nuclide score mean std. dev.\n", - "0 (0.0e+00 - 6.2e-01) total nu-fission 1.090899 0.010602" + " energy low [MeV] energy high [MeV] nuclide score mean \\\n", + "0 0 0.000001 total nu-fission 1.201216 \n", + "\n", + " std. dev. \n", + "0 0.012288 " ] }, "execution_count": 28, @@ -930,7 +941,8 @@ " \n", " \n", " \n", - " energy [MeV]\n", + " energy low [MeV]\n", + " energy high [MeV]\n", " cell\n", " nuclide\n", " score\n", @@ -941,20 +953,24 @@ " \n", " \n", " 0\n", - " (0.0e+00 - 6.2e-01)\n", - " 10000\n", - " total\n", - " absorption\n", - " 0.803413\n", - " 0.007031\n", + " 0\n", + " 0.000001\n", + " 10000\n", + " total\n", + " absorption\n", + " 0.74925\n", + " 0.008257\n", " \n", " \n", "\n", "
" ], "text/plain": [ - " energy [MeV] cell nuclide score mean std. dev.\n", - "0 (0.0e+00 - 6.2e-01) 10000 total absorption 0.803413 0.007031" + " energy low [MeV] energy high [MeV] cell nuclide score mean \\\n", + "0 0 0.000001 10000 total absorption 0.74925 \n", + "\n", + " std. dev. \n", + "0 0.008257 " ] }, "execution_count": 29, @@ -991,7 +1007,8 @@ " \n", " \n", " \n", - " energy [MeV]\n", + " energy low [MeV]\n", + " energy high [MeV]\n", " cell\n", " nuclide\n", " score\n", @@ -1002,23 +1019,24 @@ " \n", " \n", " 0\n", - " (0.0e+00 - 6.2e-01)\n", - " 10000\n", - " total\n", - " (nu-fission / absorption)\n", - " 1.237053\n", - " 0.011765\n", + " 0\n", + " 0.000001\n", + " 10000\n", + " total\n", + " (nu-fission / absorption)\n", + " 1.663616\n", + " 0.018624\n", " \n", " \n", "\n", "
" ], "text/plain": [ - " energy [MeV] cell nuclide score mean \\\n", - "0 (0.0e+00 - 6.2e-01) 10000 total (nu-fission / absorption) 1.237053 \n", + " energy low [MeV] energy high [MeV] cell nuclide \\\n", + "0 0 0.000001 10000 total \n", "\n", - " std. dev. \n", - "0 0.011765 " + " score mean std. dev. \n", + "0 (nu-fission / absorption) 1.663616 0.018624 " ] }, "execution_count": 30, @@ -1054,7 +1072,8 @@ " \n", " \n", " \n", - " energy [MeV]\n", + " energy low [MeV]\n", + " energy high [MeV]\n", " cell\n", " nuclide\n", " score\n", @@ -1065,23 +1084,24 @@ " \n", " \n", " 0\n", - " (0.0e+00 - 6.2e-01)\n", - " 10000\n", - " total\n", - " (((absorption * nu-fission) * absorption) * (n...\n", - " 1.040166\n", - " 0.019018\n", + " 0\n", + " 0.000001\n", + " 10000\n", + " total\n", + " (((absorption * nu-fission) * absorption) * (n...\n", + " 1.040166\n", + " 0.021928\n", " \n", " \n", "\n", "
" ], "text/plain": [ - " energy [MeV] cell nuclide \\\n", - "0 (0.0e+00 - 6.2e-01) 10000 total \n", + " energy low [MeV] energy high [MeV] cell nuclide \\\n", + "0 0 0.000001 10000 total \n", "\n", " score mean std. dev. \n", - "0 (((absorption * nu-fission) * absorption) * (n... 1.040166 0.019018 " + "0 (((absorption * nu-fission) * absorption) * (n... 1.040166 0.021928 " ] }, "execution_count": 31, @@ -1135,7 +1155,8 @@ " \n", " \n", " cell\n", - " energy [MeV]\n", + " energy low [MeV]\n", + " energy high [MeV]\n", " nuclide\n", " score\n", " mean\n", @@ -1145,100 +1166,108 @@ " \n", " \n", " 0\n", - " 10000\n", - " (0.0e+00 - 6.3e-07)\n", - " (U-238 / total)\n", - " (nu-fission / flux)\n", - " 0.000001\n", - " 7.377419e-09\n", + " 10000\n", + " 0.000000\n", + " 0.000001\n", + " (U-238 / total)\n", + " (nu-fission / flux)\n", + " 0.000001\n", + " 7.377419e-09\n", " \n", " \n", " 1\n", - " 10000\n", - " (0.0e+00 - 6.3e-07)\n", - " (U-238 / total)\n", - " (scatter / flux)\n", - " 0.209989\n", - " 2.303838e-03\n", + " 10000\n", + " 0.000000\n", + " 0.000001\n", + " (U-238 / total)\n", + " (scatter / flux)\n", + " 0.209989\n", + " 2.303838e-03\n", " \n", " \n", " 2\n", - " 10000\n", - " (0.0e+00 - 6.3e-07)\n", - " (U-235 / total)\n", - " (nu-fission / flux)\n", - " 0.356420\n", - " 3.951669e-03\n", + " 10000\n", + " 0.000000\n", + " 0.000001\n", + " (U-235 / total)\n", + " (nu-fission / flux)\n", + " 0.356420\n", + " 3.951669e-03\n", " \n", " \n", " 3\n", - " 10000\n", - " (0.0e+00 - 6.3e-07)\n", - " (U-235 / total)\n", - " (scatter / flux)\n", - " 0.005555\n", - " 6.101004e-05\n", + " 10000\n", + " 0.000000\n", + " 0.000001\n", + " (U-235 / total)\n", + " (scatter / flux)\n", + " 0.005555\n", + " 6.101004e-05\n", " \n", " \n", " 4\n", - " 10000\n", - " (6.3e-07 - 2.0e+01)\n", - " (U-238 / total)\n", - " (nu-fission / flux)\n", - " 0.007155\n", - " 8.053460e-05\n", + " 10000\n", + " 0.000001\n", + " 20.000000\n", + " (U-238 / total)\n", + " (nu-fission / flux)\n", + " 0.007155\n", + " 8.053460e-05\n", " \n", " \n", " 5\n", - " 10000\n", - " (6.3e-07 - 2.0e+01)\n", - " (U-238 / total)\n", - " (scatter / flux)\n", - " 0.227770\n", - " 1.079289e-03\n", + " 10000\n", + " 0.000001\n", + " 20.000000\n", + " (U-238 / total)\n", + " (scatter / flux)\n", + " 0.227770\n", + " 1.079289e-03\n", " \n", " \n", " 6\n", - " 10000\n", - " (6.3e-07 - 2.0e+01)\n", - " (U-235 / total)\n", - " (nu-fission / flux)\n", - " 0.008067\n", - " 5.254797e-05\n", + " 10000\n", + " 0.000001\n", + " 20.000000\n", + " (U-235 / total)\n", + " (nu-fission / flux)\n", + " 0.008067\n", + " 5.254797e-05\n", " \n", " \n", " 7\n", - " 10000\n", - " (6.3e-07 - 2.0e+01)\n", - " (U-235 / total)\n", - " (scatter / flux)\n", - " 0.003367\n", - " 1.647058e-05\n", + " 10000\n", + " 0.000001\n", + " 20.000000\n", + " (U-235 / total)\n", + " (scatter / flux)\n", + " 0.003367\n", + " 1.647058e-05\n", " \n", " \n", "\n", "" ], "text/plain": [ - " cell energy [MeV] nuclide score mean \\\n", - "0 10000 (0.0e+00 - 6.3e-07) (U-238 / total) (nu-fission / flux) 0.000001 \n", - "1 10000 (0.0e+00 - 6.3e-07) (U-238 / total) (scatter / flux) 0.209989 \n", - "2 10000 (0.0e+00 - 6.3e-07) (U-235 / total) (nu-fission / flux) 0.356420 \n", - "3 10000 (0.0e+00 - 6.3e-07) (U-235 / total) (scatter / flux) 0.005555 \n", - "4 10000 (6.3e-07 - 2.0e+01) (U-238 / total) (nu-fission / flux) 0.007155 \n", - "5 10000 (6.3e-07 - 2.0e+01) (U-238 / total) (scatter / flux) 0.227770 \n", - "6 10000 (6.3e-07 - 2.0e+01) (U-235 / total) (nu-fission / flux) 0.008067 \n", - "7 10000 (6.3e-07 - 2.0e+01) (U-235 / total) (scatter / flux) 0.003367 \n", + " cell energy low [MeV] energy high [MeV] nuclide \\\n", + "0 10000 0.000000 0.000001 (U-238 / total) \n", + "1 10000 0.000000 0.000001 (U-238 / total) \n", + "2 10000 0.000000 0.000001 (U-235 / total) \n", + "3 10000 0.000000 0.000001 (U-235 / total) \n", + "4 10000 0.000001 20.000000 (U-238 / total) \n", + "5 10000 0.000001 20.000000 (U-238 / total) \n", + "6 10000 0.000001 20.000000 (U-235 / total) \n", + "7 10000 0.000001 20.000000 (U-235 / total) \n", "\n", - " std. dev. \n", - "0 7.377419e-09 \n", - "1 2.303838e-03 \n", - "2 3.951669e-03 \n", - "3 6.101004e-05 \n", - "4 8.053460e-05 \n", - "5 1.079289e-03 \n", - "6 5.254797e-05 \n", - "7 1.647058e-05 " + " score mean std. dev. \n", + "0 (nu-fission / flux) 0.000001 7.377419e-09 \n", + "1 (scatter / flux) 0.209989 2.303838e-03 \n", + "2 (nu-fission / flux) 0.356420 3.951669e-03 \n", + "3 (scatter / flux) 0.005555 6.101004e-05 \n", + "4 (nu-fission / flux) 0.007155 8.053460e-05 \n", + "5 (scatter / flux) 0.227770 1.079289e-03 \n", + "6 (nu-fission / flux) 0.008067 5.254797e-05 \n", + "7 (scatter / flux) 0.003367 1.647058e-05 " ] }, "execution_count": 33, @@ -1361,7 +1390,8 @@ " \n", " \n", " cell\n", - " energy [MeV]\n", + " energy low [MeV]\n", + " energy high [MeV]\n", " nuclide\n", " score\n", " mean\n", @@ -1371,50 +1401,60 @@ " \n", " \n", " 0\n", - " 10000\n", - " (0.0e+00 - 6.3e-07)\n", - " U-238\n", - " nu-fission\n", - " 0.000002\n", - " 1.283958e-08\n", + " 10000\n", + " 0.000000\n", + " 0.000001\n", + " U-238\n", + " nu-fission\n", + " 0.000002\n", + " 1.283958e-08\n", " \n", " \n", " 1\n", - " 10000\n", - " (0.0e+00 - 6.3e-07)\n", - " U-235\n", - " nu-fission\n", - " 0.868553\n", - " 6.880390e-03\n", + " 10000\n", + " 0.000000\n", + " 0.000001\n", + " U-235\n", + " nu-fission\n", + " 0.868553\n", + " 6.880390e-03\n", " \n", " \n", " 2\n", - " 10000\n", - " (6.3e-07 - 2.0e+01)\n", - " U-238\n", - " nu-fission\n", - " 0.082149\n", - " 8.837250e-04\n", + " 10000\n", + " 0.000001\n", + " 20.000000\n", + " U-238\n", + " nu-fission\n", + " 0.082149\n", + " 8.837250e-04\n", " \n", " \n", " 3\n", - " 10000\n", - " (6.3e-07 - 2.0e+01)\n", - " U-235\n", - " nu-fission\n", - " 0.092618\n", - " 5.195308e-04\n", + " 10000\n", + " 0.000001\n", + " 20.000000\n", + " U-235\n", + " nu-fission\n", + " 0.092618\n", + " 5.195308e-04\n", " \n", " \n", "\n", "" ], "text/plain": [ - " cell energy [MeV] nuclide score mean std. dev.\n", - "0 10000 (0.0e+00 - 6.3e-07) U-238 nu-fission 0.000002 1.283958e-08\n", - "1 10000 (0.0e+00 - 6.3e-07) U-235 nu-fission 0.868553 6.880390e-03\n", - "2 10000 (6.3e-07 - 2.0e+01) U-238 nu-fission 0.082149 8.837250e-04\n", - "3 10000 (6.3e-07 - 2.0e+01) U-235 nu-fission 0.092618 5.195308e-04" + " cell energy low [MeV] energy high [MeV] nuclide score mean \\\n", + "0 10000 0.000000 0.000001 U-238 nu-fission 0.000002 \n", + "1 10000 0.000000 0.000001 U-235 nu-fission 0.868553 \n", + "2 10000 0.000001 20.000000 U-238 nu-fission 0.082149 \n", + "3 10000 0.000001 20.000000 U-235 nu-fission 0.092618 \n", + "\n", + " std. dev. \n", + "0 1.283958e-08 \n", + "1 6.880390e-03 \n", + "2 8.837250e-04 \n", + "3 5.195308e-04 " ] }, "execution_count": 37, @@ -1444,7 +1484,8 @@ " \n", " \n", " cell\n", - " energy [MeV]\n", + " energy low [MeV]\n", + " energy high [MeV]\n", " nuclide\n", " score\n", " mean\n", @@ -1454,100 +1495,120 @@ " \n", " \n", " 0\n", - " 10002\n", - " (1.0e-08 - 1.1e-07)\n", - " H-1\n", - " scatter\n", - " 4.619398\n", - " 0.040124\n", + " 10002\n", + " 1.000000e-08\n", + " 0.000000\n", + " H-1\n", + " scatter\n", + " 4.619398\n", + " 0.040124\n", " \n", " \n", " 1\n", - " 10002\n", - " (1.1e-07 - 1.2e-06)\n", - " H-1\n", - " scatter\n", - " 2.030757\n", - " 0.011239\n", + " 10002\n", + " 1.080060e-07\n", + " 0.000001\n", + " H-1\n", + " scatter\n", + " 2.030757\n", + " 0.011239\n", " \n", " \n", " 2\n", - " 10002\n", - " (1.2e-06 - 1.3e-05)\n", - " H-1\n", - " scatter\n", - " 1.658488\n", - " 0.009777\n", + " 10002\n", + " 1.166529e-06\n", + " 0.000013\n", + " H-1\n", + " scatter\n", + " 1.658488\n", + " 0.009777\n", " \n", " \n", " 3\n", - " 10002\n", - " (1.3e-05 - 1.4e-04)\n", - " H-1\n", - " scatter\n", - " 1.853002\n", - " 0.007378\n", + " 10002\n", + " 1.259921e-05\n", + " 0.000136\n", + " H-1\n", + " scatter\n", + " 1.853002\n", + " 0.007378\n", " \n", " \n", " 4\n", - " 10002\n", - " (1.4e-04 - 1.5e-03)\n", - " H-1\n", - " scatter\n", - " 2.050773\n", - " 0.012484\n", + " 10002\n", + " 1.360790e-04\n", + " 0.001470\n", + " H-1\n", + " scatter\n", + " 2.050773\n", + " 0.012484\n", " \n", " \n", " 5\n", - " 10002\n", - " (1.5e-03 - 1.6e-02)\n", - " H-1\n", - " scatter\n", - " 2.131759\n", - " 0.007821\n", + " 10002\n", + " 1.469734e-03\n", + " 0.015874\n", + " H-1\n", + " scatter\n", + " 2.131759\n", + " 0.007821\n", " \n", " \n", " 6\n", - " 10002\n", - " (1.6e-02 - 1.7e-01)\n", - " H-1\n", - " scatter\n", - " 2.213710\n", - " 0.015159\n", + " 10002\n", + " 1.587401e-02\n", + " 0.171449\n", + " H-1\n", + " scatter\n", + " 2.213710\n", + " 0.015159\n", " \n", " \n", " 7\n", - " 10002\n", - " (1.7e-01 - 1.9e+00)\n", - " H-1\n", - " scatter\n", - " 2.011925\n", - " 0.009406\n", + " 10002\n", + " 1.714488e-01\n", + " 1.851749\n", + " H-1\n", + " scatter\n", + " 2.011925\n", + " 0.009406\n", " \n", " \n", " 8\n", - " 10002\n", - " (1.9e+00 - 2.0e+01)\n", - " H-1\n", - " scatter\n", - " 0.371280\n", - " 0.003949\n", + " 10002\n", + " 1.851749e+00\n", + " 20.000000\n", + " H-1\n", + " scatter\n", + " 0.371280\n", + " 0.003949\n", " \n", " \n", "\n", "" ], "text/plain": [ - " cell energy [MeV] nuclide score mean std. dev.\n", - "0 10002 (1.0e-08 - 1.1e-07) H-1 scatter 4.619398 0.040124\n", - "1 10002 (1.1e-07 - 1.2e-06) H-1 scatter 2.030757 0.011239\n", - "2 10002 (1.2e-06 - 1.3e-05) H-1 scatter 1.658488 0.009777\n", - "3 10002 (1.3e-05 - 1.4e-04) H-1 scatter 1.853002 0.007378\n", - "4 10002 (1.4e-04 - 1.5e-03) H-1 scatter 2.050773 0.012484\n", - "5 10002 (1.5e-03 - 1.6e-02) H-1 scatter 2.131759 0.007821\n", - "6 10002 (1.6e-02 - 1.7e-01) H-1 scatter 2.213710 0.015159\n", - "7 10002 (1.7e-01 - 1.9e+00) H-1 scatter 2.011925 0.009406\n", - "8 10002 (1.9e+00 - 2.0e+01) H-1 scatter 0.371280 0.003949" + " cell energy low [MeV] energy high [MeV] nuclide score mean \\\n", + "0 10002 1.000000e-08 0.000000 H-1 scatter 4.619398 \n", + "1 10002 1.080060e-07 0.000001 H-1 scatter 2.030757 \n", + "2 10002 1.166529e-06 0.000013 H-1 scatter 1.658488 \n", + "3 10002 1.259921e-05 0.000136 H-1 scatter 1.853002 \n", + "4 10002 1.360790e-04 0.001470 H-1 scatter 2.050773 \n", + "5 10002 1.469734e-03 0.015874 H-1 scatter 2.131759 \n", + "6 10002 1.587401e-02 0.171449 H-1 scatter 2.213710 \n", + "7 10002 1.714488e-01 1.851749 H-1 scatter 2.011925 \n", + "8 10002 1.851749e+00 20.000000 H-1 scatter 0.371280 \n", + "\n", + " std. dev. \n", + "0 0.040124 \n", + "1 0.011239 \n", + "2 0.009777 \n", + "3 0.007378 \n", + "4 0.012484 \n", + "5 0.007821 \n", + "6 0.015159 \n", + "7 0.009406 \n", + "8 0.003949 " ] }, "execution_count": 38, diff --git a/openmc/filter.py b/openmc/filter.py index 54814a6b6f..ace98dc424 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -502,9 +502,9 @@ class Filter(object): 2. separate columns for the cell IDs, universe IDs, and lattice IDs and x,y,z cell indices corresponding to each (with summary info). - For 'energy' and 'energyout' filters, the DataFrame include a single - column with each element comprising a string with the lower, upper - energy bounds for each filter bin. + For 'energy' and 'energyout' filters, the DataFrame includes one + column for the lower energy bound and one column for the upper + energy bound for each filter bin. For 'mesh' filters, the DataFrame includes three columns for the x,y,z mesh cell indices corresponding to each filter bin. @@ -719,21 +719,20 @@ class Filter(object): # energy, energyout filters elif 'energy' in self.type: - bins = self.bins - num_bins = self.num_bins + # Extract the lower and upper energy bounds for each result. + lo_bins = self.bins[:-1] + hi_bins = self.bins[1:] - # Create strings for - template = '({0:.1e} - {1:.1e})' - filter_bins = [] - for i in range(num_bins): - filter_bins.append(template.format(bins[i], bins[i+1])) + # Repeat and tile them as necessary to account for other filters. + lo_bins = np.repeat(lo_bins, self.stride) + hi_bins = np.repeat(hi_bins, self.stride) + tile_factor = data_size / len(lo_bins) + lo_bins = np.tile(lo_bins, tile_factor) + hi_bins = np.tile(hi_bins, tile_factor) - # Tile the energy bins into a DataFrame column - filter_bins = np.repeat(filter_bins, self.stride) - tile_factor = data_size / len(filter_bins) - filter_bins = np.tile(filter_bins, tile_factor) - filter_bins = filter_bins - df = pd.concat([df, pd.DataFrame({self.type + ' [MeV]' : filter_bins})]) + # Now stick 'em in the DataFrame. + df.loc[:, self.type + ' low [MeV]'] = lo_bins + df.loc[:, self.type + ' high [MeV]'] = hi_bins # universe, material, surface, cell, and cellborn filters else: diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index f241274581..875a82c468 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1232,28 +1232,35 @@ class MGXS(object): # Override energy groups bounds with indices all_groups = np.arange(self.num_groups, 0, -1, dtype=np.int) all_groups = np.repeat(all_groups, self.num_nuclides) - if 'energy [MeV]' in df and 'energyout [MeV]' in df: - df.rename(columns={'energy [MeV]': 'group in'}, inplace=True) + if 'energy low [MeV]' in df and 'energyout low [MeV]' in df: + df.rename(columns={'energy low [MeV]': 'group in'}, + inplace=True) in_groups = np.tile(all_groups, self.num_subdomains) in_groups = np.repeat(in_groups, self.num_groups) df['group in'] = in_groups + del df['energy high [MeV]'] - df.rename(columns={'energyout [MeV]': 'group out'}, inplace=True) + df.rename(columns={'energyout low [MeV]': 'group out'}, + inplace=True) out_groups = \ np.tile(all_groups, self.num_subdomains * self.num_groups) df['group out'] = out_groups + del df['energyout high [MeV]'] columns = ['group in', 'group out'] - elif 'energyout [MeV]' in df: - df.rename(columns={'energyout [MeV]': 'group out'}, inplace=True) + elif 'energyout low [MeV]' in df: + df.rename(columns={'energyout low [MeV]': 'group out'}, + inplace=True) in_groups = np.tile(all_groups, self.num_subdomains) df['group out'] = in_groups + del df['energyout high [MeV]'] columns = ['group out'] - elif 'energy [MeV]' in df: - df.rename(columns={'energy [MeV]': 'group in'}, inplace=True) + elif 'energy low [MeV]' in df: + df.rename(columns={'energy low [MeV]': 'group in'}, inplace=True) in_groups = np.tile(all_groups, self.num_subdomains) df['group in'] = in_groups + del df['energy high [MeV]'] columns = ['group in'] # Select out those groups the user requested From a2ac93a84389d400b39ad6eccf9bfc3ee4c788a6 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sat, 6 Feb 2016 20:53:52 -0500 Subject: [PATCH 270/650] Fixed bugs in tally merge method --- openmc/mgxs/mgxs.py | 4 ++ openmc/tallies.py | 124 ++++++++++++++++++++++++-------------------- 2 files changed, 71 insertions(+), 57 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 272d5e0402..a382c629b1 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -953,6 +953,10 @@ class MGXS(object): slice_xs.sparse = self.sparse return slice_xs + # FIXME + def merge(self, other): + raise NotImplementedError('not yet implemented') + def print_xs(self, subdomains='all', nuclides='all', xs_type='macro'): """Print a string representation for the multi-group cross section. diff --git a/openmc/tallies.py b/openmc/tallies.py index 51633186e7..c966fbcf88 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -695,10 +695,11 @@ class Tally(object): # Return False if only one tally has a delayed group filter tally1_dg = self.contains_filter('delayedgroup') tally2_dg = other.contains_filter('delayedgroup') - if sum(tally1_dg, tally2_dg) == 1: + if sum([tally1_dg, tally2_dg]) == 1: return False # Look to see if all filters are the same, or one or more can be merged + merge_filters = False for filter1 in self.filters: mergeable_filter = False @@ -758,9 +759,9 @@ class Tally(object): no_nuclides_match = False # Either all nuclides should match, or none should - if no_nuclides_match: + if no_nuclides_match or all_nuclides_match: return True - if not no_nuclides_match and not all_nuclides_match: + else: return False def _can_merge_scores(self, other): @@ -794,15 +795,23 @@ class Tally(object): else: no_scores_match = False + # Nuclides cannot be specified on 'flux' scores + if 'flux' in self.scores or 'flux' in other.scores: + if self.nuclides != other.nuclides: + return False + # Either all scores should match, or none should - if no_scores_match: + if no_scores_match or all_scores_match: return True - elif not no_scores_match and not all_scores_match: + else: return False def can_merge(self, other): """Determine if another tally can be merged with this one + If results have been loaded from a statepoint, then tallies are only + mergeable along one and only one of filter bins, nuclides or scores. + Parameters ---------- other : Tally @@ -821,39 +830,43 @@ class Tally(object): merge_filters = self._can_merge_filters(other) merge_nuclides = self._can_merge_nuclides(other) merge_scores = self._can_merge_scores(other) + mergeability = [merge_filters, merge_nuclides, merge_scores] - # Tallies are mergeable if only one of filters, nuclides and - # scores is mergeable - if sum(merge_filters, merge_nuclides, merge_scores) == 1: - return True - else: + # If the tally results have been read from the statepoint, we can only + # merge along one of filter bins, scores or nuclides + if self._results_read and sum(mergeability) > 1: return False + else: + return all([merge_filters, merge_nuclides, merge_scores]) def merge(self, other): - """Join another tally with this one + """Merge another tally with this one + + If results have been loaded from a statepoint, then tallies are only + mergeable along one and only one of filter bins, nuclides or scores. Parameters ---------- tally : Tally - Tally to join with this one + Tally to merge with this one Returns ------- - joined_tally : Tally - Joined tallies + merged_tally : Tally + Merged tallies """ if not self.can_merge(other): - msg = 'Unable to join tally ID="{0}" with ' + \ + msg = 'Unable to merge tally ID="{0}" with ' \ '"{1}"'.format(other.id, self.id) raise ValueError(msg) # Create deep copy of tally to return as merged tally - joined_tally = copy.deepcopy(self) + merged_tally = copy.deepcopy(self) # Differentiate Tally with a new auto-generated Tally ID - joined_tally.id = None + merged_tally.id = None # Create deep copy of other tally to use for array concatenation other_copy = copy.deepcopy(other) @@ -865,79 +878,76 @@ class Tally(object): for i, filter1 in enumerate(self.filters): for j, filter2 in enumerate(other.filters): if filter1 != filter2 and filter1.can_merge(filter2): - other_copy._swap_filters(other_copy.filters[i], filter1) - joined_tally.filters[i] = filter1.merge(filter2) - join_axis = i + other_copy._swap_filters(other_copy.filters[i], filter2) + merged_tally.filters[i] = filter1.merge(filter2) + merge_axis = i break # If two tallies can be merged along nuclide bins - elif self._can_merge_nuclides(other): - join_axis = self.num_filters + if self._can_merge_nuclides(other): + merge_axis = self.num_filters # Add unique nuclides from other tally to merged tally for nuclide in other.nuclides: - if nuclide not in joined_tally.nuclides: - joined_tally.add_score(nuclide) + if nuclide not in merged_tally.nuclides: + merged_tally.add_nuclide(nuclide) # If two tallies can be merged along score bins - elif self._can_merge_scores(other): - join_axis = self.num_filters + 1 + if self._can_merge_scores(other): + merge_axis = self.num_filters + 1 # Add unique scores from other tally to merged tally for score in other.scores: - if score not in joined_tally.scores: - joined_tally.add_score(score) + if score not in merged_tally.scores: + merged_tally.add_score(score) - else: - raise ValueError('Unable to merge tallies') - - # Update filter strides in joined tally - joined_tally._update_filter_strides() + # Update filter strides in merged tally + merged_tally._update_filter_strides() # Concatenate sum arrays if present in both tallies if self.sum is not None and other_copy.sum is not None: self_sum = self.get_reshaped_data(value='sum') other_sum = other_copy.get_reshaped_data(value='sum') - joined_tally._sum = \ - np.concatenate((self_sum, other_sum), axis=join_axis) - joined_tally._sum = \ - np.reshape(joined_tally._sum, joined_tally.shape) + merged_tally._sum = \ + np.concatenate((self_sum, other_sum), axis=merge_axis) + merged_tally._sum = \ + np.reshape(merged_tally._sum, merged_tally.shape) # Concatenate sum_sq arrays if present in both tallies if self.sum_sq is not None and other.sum_sq is not None: self_sum_sq = self.get_reshaped_data(value='sum_sq') other_sum_sq = other_copy.get_reshaped_data(value='sum_sq') - joined_tally._sum_sq = \ - np.concatenate((self_sum_sq, other_sum_sq), axis=join_axis) - joined_tally._sum_sq = \ - np.reshape(joined_tally._sum_sq, joined_tally.shape) + merged_tally._sum_sq = \ + np.concatenate((self_sum_sq, other_sum_sq), axis=merge_axis) + merged_tally._sum_sq = \ + np.reshape(merged_tally._sum_sq, merged_tally.shape) # Concatenate mean arrays if present in both tallies if self.mean is not None and other.mean is not None: self_mean = self.get_reshaped_data(value='mean') other_mean = other_copy.get_reshaped_data(value='mean') - joined_tally._mean = \ - np.concatenate((self_mean, other_mean), axis=join_axis) - joined_tally._mean = \ - np.reshape(joined_tally._mean, joined_tally.shape) + merged_tally._mean = \ + np.concatenate((self_mean, other_mean), axis=merge_axis) + merged_tally._mean = \ + np.reshape(merged_tally._mean, merged_tally.shape) # Concatenate std. dev. arrays if present in both tallies if self.std_dev is not None and other.std_dev is not None: self_std_dev = self.get_reshaped_data(value='std_dev') other_std_dev = other_copy.get_reshaped_data(value='std_dev') - joined_tally._std_dev = \ - np.concatenate((self_std_dev, other_std_dev), axis=join_axis) - joined_tally._std_dev = \ - np.reshape(joined_tally._std_dev, joined_tally.shape) + merged_tally._std_dev = \ + np.concatenate((self_std_dev, other_std_dev), axis=merge_axis) + merged_tally._std_dev = \ + np.reshape(merged_tally._std_dev, merged_tally.shape) - # Sparsify joined tally if both tallies are sparse - joined_tally.sparse = self.sparse and other.sparse + # Sparsify merged tally if both tallies are sparse + merged_tally.sparse = self.sparse and other.sparse # Add triggers from other tally to merged tally for trigger in other.triggers: - joined_tally.add_trigger(trigger) + merged_tally.add_trigger(trigger) - return joined_tally + return merged_tally def get_tally_xml(self): """Return XML representation of the tally @@ -2131,10 +2141,10 @@ class Tally(object): """ # Check that results have been read - if not self.derived and self.sum is None: - msg = 'Unable to use tally arithmetic with Tally ID="{0}" ' \ - 'since it does not contain any results.'.format(self.id) - raise ValueError(msg) +# if not self.derived and self.sum is None: +# msg = 'Unable to use tally arithmetic with Tally ID="{0}" ' \ +# 'since it does not contain any results.'.format(self.id) +# raise ValueError(msg) cv.check_type('filter1', filter1, Filter) cv.check_type('filter2', filter2, Filter) From 2098487bcbb13e7d43cd06d7f3df4fbb1756caf0 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 7 Feb 2016 05:37:07 -0500 Subject: [PATCH 271/650] Correcting some more EnergyGroups.num_group issues --- openmc/mgxs/groups.py | 2 +- openmc/mgxs_library.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openmc/mgxs/groups.py b/openmc/mgxs/groups.py index e6838b36ba..253df520ee 100644 --- a/openmc/mgxs/groups.py +++ b/openmc/mgxs/groups.py @@ -24,7 +24,7 @@ class EnergyGroups(object): ---------- group_edges : Iterable of Real The energy group boundaries [MeV] - num_group : Integral + num_groups : Integral The number of energy groups """ diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 3b6b7753ea..f3e7b92184 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -418,12 +418,12 @@ class XSdata(object): @multiplicity.setter def multiplicity(self, multiplicity): if self._representation is 'isotropic': - shape = (self._energy_groups.num_group, + shape = (self._energy_groups.num_groups, self._energy_groups.num_groups) max_depth = 2 elif self._representation is 'angle': shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_group, + self._energy_groups.num_groups, self._energy_groups.num_groups) max_depth = 4 # check we have a numpy list @@ -455,7 +455,7 @@ class XSdata(object): shape_vec = (self._num_polar, self._num_azimuthal, self._energy_groups.num_groups) shape_mat = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_group, + self._energy_groups.num_groups, self._energy_groups.num_groups) # Begin by checking the case when chi has already been given and thus From a5be5cf7f87a0ed70d650d093d8c2d787b1aeb31 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sun, 7 Feb 2016 13:01:56 -0500 Subject: [PATCH 272/650] Address #582 review comments --- openmc/filter.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/openmc/filter.py b/openmc/filter.py index ace98dc424..a27e17cd96 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -719,18 +719,15 @@ class Filter(object): # energy, energyout filters elif 'energy' in self.type: - # Extract the lower and upper energy bounds for each result. - lo_bins = self.bins[:-1] - hi_bins = self.bins[1:] - - # Repeat and tile them as necessary to account for other filters. - lo_bins = np.repeat(lo_bins, self.stride) - hi_bins = np.repeat(hi_bins, self.stride) + # Extract the lower and upper energy bounds, then repeat and tile + # them as necessary to account for other filters. + lo_bins = np.repeat(self.bins[:-1], self.stride) + hi_bins = np.repeat(self.bins[1:], self.stride) tile_factor = data_size / len(lo_bins) lo_bins = np.tile(lo_bins, tile_factor) hi_bins = np.tile(hi_bins, tile_factor) - # Now stick 'em in the DataFrame. + # Add the new energy columns to the DataFrame. df.loc[:, self.type + ' low [MeV]'] = lo_bins df.loc[:, self.type + ' high [MeV]'] = hi_bins From 077eff7f19bbab9a411d5c3356a93b9b7c9279b2 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sun, 7 Feb 2016 13:24:14 -0500 Subject: [PATCH 273/650] Fixed some bugs in tally merging with introduction of comparison operators for filers and nuclides --- openmc/element.py | 6 ++++ openmc/filter.py | 25 ++++++++++++- openmc/nuclide.py | 6 ++++ openmc/tallies.py | 92 +++++++++++++++++++++++++++++++++++------------ 4 files changed, 106 insertions(+), 23 deletions(-) diff --git a/openmc/element.py b/openmc/element.py index 9f04abfdab..4880dfaf23 100644 --- a/openmc/element.py +++ b/openmc/element.py @@ -57,6 +57,12 @@ class Element(object): def __ne__(self, other): return not self == other + def __lt__(self, other): + return not self > other + + def __hash__(self): + return hash(repr(self)) + def __hash__(self): return hash(repr(self)) diff --git a/openmc/filter.py b/openmc/filter.py index 430b2415f0..21797264b3 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -77,6 +77,23 @@ class Filter(object): def __ne__(self, other): return not self == other + def __gt__(self, other): + if self.type != other.type: + if self.type in _FILTER_TYPES and other.type in _FILTER_TYPES: + delta = _FILTER_TYPES.index(self.type) - \ + _FILTER_TYPES.index(other.type) + return True if delta > 0 else False + else: + return False + else: + if 'energy' in self.type and 'energy' in other.type: + return self.bins[0] >= other.bins[-1] + else: + return max(self.bins) > max(other.bins) + + def __lt__(self, other): + return not self > other + def __hash__(self): return hash(repr(self)) @@ -297,7 +314,13 @@ class Filter(object): # Merge unique filter bins merged_bins = set(np.concatenate((self.bins, other.bins))) - merged_filter.bins = list(sorted(merged_bins)) + + # Sort energy bin edges + if 'energy' in self.type: + merged_bins = sorted(merged_bins) + + # Assign merged bins to merged filter + merged_filter.bins = list(merged_bins) # Count bins in the merged filter if 'energy' in merged_filter.type: diff --git a/openmc/nuclide.py b/openmc/nuclide.py index 01fb2aa459..8e97f1a1c6 100644 --- a/openmc/nuclide.py +++ b/openmc/nuclide.py @@ -60,6 +60,12 @@ class Nuclide(object): def __ne__(self, other): return not self == other + def __gt__(self, other): + return repr(self) > repr(other) + + def __lt__(self, other): + return not self > other + def __hash__(self): return hash(repr(self)) diff --git a/openmc/tallies.py b/openmc/tallies.py index c966fbcf88..d88519ba3b 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -826,18 +826,30 @@ class Tally(object): if self.estimator != other.estimator: return False + equal_filters = sorted(self.filters) == sorted(other.filters) + equal_nuclides = sorted(self.nuclides) == sorted(other.nuclides) + equal_scores = sorted(self.scores) == sorted(other.scores) + equality = [equal_filters, equal_nuclides, equal_scores] + + # If all filters, nuclides and scores match then tallies are mergeable + if equal_filters and equal_nuclides and equal_scores: + return True + # Variables to indicate matching filter bins, nuclides and scores merge_filters = self._can_merge_filters(other) merge_nuclides = self._can_merge_nuclides(other) merge_scores = self._can_merge_scores(other) mergeability = [merge_filters, merge_nuclides, merge_scores] + if not all(mergeability): + return False + # If the tally results have been read from the statepoint, we can only - # merge along one of filter bins, scores or nuclides - if self._results_read and sum(mergeability) > 1: + # at least two of filters, nuclides and scores must match + elif self._results_read and sum(equality) < 2: return False else: - return all([merge_filters, merge_nuclides, merge_scores]) + return True def merge(self, other): """Merge another tally with this one @@ -871,8 +883,16 @@ class Tally(object): # Create deep copy of other tally to use for array concatenation other_copy = copy.deepcopy(other) + # FIXME: document and create vars for merge_filters, etc. + merge_filters = self._can_merge_filters(other) + merge_nuclides = self._can_merge_nuclides(other) + merge_scores = self._can_merge_scores(other) + equal_filters = sorted(self.filters) == sorted(other.filters) + equal_nuclides = sorted(self.nuclides) == sorted(other.nuclides) + equal_scores = sorted(self.scores) == sorted(other.scores) + # If two tallies can be merged along a filter's bins - if self._can_merge_filters(other): + if merge_filters and not equal_filters: # Search for mergeable filters for i, filter1 in enumerate(self.filters): @@ -880,12 +900,14 @@ class Tally(object): if filter1 != filter2 and filter1.can_merge(filter2): other_copy._swap_filters(other_copy.filters[i], filter2) merged_tally.filters[i] = filter1.merge(filter2) + join_right = filter1 < filter2 merge_axis = i break # If two tallies can be merged along nuclide bins - if self._can_merge_nuclides(other): + if merge_nuclides and not equal_nuclides: merge_axis = self.num_filters + join_right = True # Add unique nuclides from other tally to merged tally for nuclide in other.nuclides: @@ -893,8 +915,9 @@ class Tally(object): merged_tally.add_nuclide(nuclide) # If two tallies can be merged along score bins - if self._can_merge_scores(other): + if merge_scores and not equal_scores: merge_axis = self.num_filters + 1 + join_right = True # Add unique scores from other tally to merged tally for score in other.scores: @@ -908,37 +931,57 @@ class Tally(object): if self.sum is not None and other_copy.sum is not None: self_sum = self.get_reshaped_data(value='sum') other_sum = other_copy.get_reshaped_data(value='sum') - merged_tally._sum = \ - np.concatenate((self_sum, other_sum), axis=merge_axis) - merged_tally._sum = \ - np.reshape(merged_tally._sum, merged_tally.shape) + + if join_right: + merged_sum = \ + np.concatenate((self_sum, other_sum), axis=merge_axis) + else: + merged_sum = \ + np.concatenate((other_sum, self_sum), axis=merge_axis) + + merged_tally._sum = np.reshape(merged_sum, merged_tally.shape) # Concatenate sum_sq arrays if present in both tallies if self.sum_sq is not None and other.sum_sq is not None: self_sum_sq = self.get_reshaped_data(value='sum_sq') other_sum_sq = other_copy.get_reshaped_data(value='sum_sq') - merged_tally._sum_sq = \ - np.concatenate((self_sum_sq, other_sum_sq), axis=merge_axis) - merged_tally._sum_sq = \ - np.reshape(merged_tally._sum_sq, merged_tally.shape) + + if join_right: + merged_sum_sq = \ + np.concatenate((self_sum_sq, other_sum_sq), axis=merge_axis) + else: + merged_sum_sq = \ + np.concatenate((other_sum_sq, self_sum_sq), axis=merge_axis) + + merged_tally._sum_sq = np.reshape(merged_sum_sq, merged_tally.shape) # Concatenate mean arrays if present in both tallies if self.mean is not None and other.mean is not None: self_mean = self.get_reshaped_data(value='mean') other_mean = other_copy.get_reshaped_data(value='mean') - merged_tally._mean = \ - np.concatenate((self_mean, other_mean), axis=merge_axis) - merged_tally._mean = \ - np.reshape(merged_tally._mean, merged_tally.shape) + + if join_right: + merged_mean = \ + np.concatenate((self_mean, other_mean), axis=merge_axis) + else: + merged_mean = \ + np.concatenate((other_mean, self_mean), axis=merge_axis) + + merged_tally._mean = np.reshape(merged_mean, merged_tally.shape) # Concatenate std. dev. arrays if present in both tallies if self.std_dev is not None and other.std_dev is not None: self_std_dev = self.get_reshaped_data(value='std_dev') other_std_dev = other_copy.get_reshaped_data(value='std_dev') - merged_tally._std_dev = \ - np.concatenate((self_std_dev, other_std_dev), axis=merge_axis) - merged_tally._std_dev = \ - np.reshape(merged_tally._std_dev, merged_tally.shape) + + if join_right: + merged_std_dev = \ + np.concatenate((self_std_dev, other_std_dev), axis=merge_axis) + else: + merged_std_dev = \ + np.concatenate((other_std_dev, self_std_dev), axis=merge_axis) + + merged_tally._std_dev = np.reshape(merged_std_dev, merged_tally.shape) # Sparsify merged tally if both tallies are sparse merged_tally.sparse = self.sparse and other.sparse @@ -2878,7 +2921,12 @@ class Tally(object): 'since it does not contain any results.'.format(self.id) raise ValueError(msg) + # Create deep copy of tally to return as sliced tally new_tally = copy.deepcopy(self) + + # Differentiate Tally with a new auto-generated Tally ID + new_tally.id = None + new_tally.sparse = False if not self.derived and self.sum is not None: From 5501d1b42a93bff148df2f25a0623d109228d16a Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sun, 7 Feb 2016 14:18:17 -0500 Subject: [PATCH 274/650] Prefer string formatting for Pandas DataFrames --- .../pythonapi/examples/mgxs-part-i.ipynb | 93 ++++---- .../examples/pandas-dataframes.ipynb | 208 +++++++++--------- .../pythonapi/examples/tally-arithmetic.ipynb | 208 +++++++++--------- openmc/arithmetic.py | 21 +- openmc/filter.py | 16 +- openmc/tallies.py | 13 +- 6 files changed, 298 insertions(+), 261 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index 319c6d1dfd..211829be64 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -519,7 +519,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", " Git SHA1: 34381b40a9445a727e360873aaa6ef892af1cb6a\n", - " Date/Time: 2016-02-06 15:29:23\n", + " Date/Time: 2016-02-07 14:10:52\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -605,20 +605,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.7300E-01 seconds\n", - " Reading cross sections = 9.8000E-02 seconds\n", - " Total time in simulation = 8.5810E+00 seconds\n", - " Time in transport only = 8.5650E+00 seconds\n", - " Time in inactive batches = 1.2990E+00 seconds\n", - " Time in active batches = 7.2820E+00 seconds\n", - " Time synchronizing fission bank = 4.0000E-03 seconds\n", + " Total time for initialization = 8.7800E-01 seconds\n", + " Reading cross sections = 1.9200E-01 seconds\n", + " Total time in simulation = 1.3677E+01 seconds\n", + " Time in transport only = 1.3579E+01 seconds\n", + " Time in inactive batches = 1.7900E+00 seconds\n", + " Time in active batches = 1.1887E+01 seconds\n", + " Time synchronizing fission bank = 6.0000E-03 seconds\n", " Sampling source sites = 2.0000E-03 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 8.9680E+00 seconds\n", - " Calculation Rate (inactive) = 19245.6 neutrons/second\n", - " Calculation Rate (active) = 13732.5 neutrons/second\n", + " SEND/RECV source sites = 3.0000E-03 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for finalization = 1.0000E-03 seconds\n", + " Total time elapsed = 1.4578E+01 seconds\n", + " Calculation Rate (inactive) = 13966.5 neutrons/second\n", + " Calculation Rate (active) = 8412.55 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -909,8 +909,8 @@ " \n", " 0\n", " 1\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " total\n", " (((total / flux) - (absorption / flux)) - (sca...\n", " 4.884981e-15\n", @@ -919,8 +919,8 @@ " \n", " 1\n", " 1\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " total\n", " (((total / flux) - (absorption / flux)) - (sca...\n", " 1.221245e-15\n", @@ -931,9 +931,9 @@ "" ], "text/plain": [ - " cell energy low [MeV] energy high [MeV] nuclide \\\n", - "0 1 0.000000 0.000001 total \n", - "1 1 0.000001 20.000000 total \n", + " cell energy low [MeV] energy high [MeV] nuclide \\\n", + "0 1 0.00e+00 6.25e-07 total \n", + "1 1 6.25e-07 2.00e+01 total \n", "\n", " score mean std. dev. \n", "0 (((total / flux) - (absorption / flux)) - (sca... 4.884981e-15 0.011274 \n", @@ -988,8 +988,8 @@ " \n", " 0\n", " 1\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " total\n", " ((absorption / flux) / (total / flux))\n", " 0.076219\n", @@ -998,8 +998,8 @@ " \n", " 1\n", " 1\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " total\n", " ((absorption / flux) / (total / flux))\n", " 0.019319\n", @@ -1010,9 +1010,9 @@ "" ], "text/plain": [ - " cell energy low [MeV] energy high [MeV] nuclide \\\n", - "0 1 0.000000 0.000001 total \n", - "1 1 0.000001 20.000000 total \n", + " cell energy low [MeV] energy high [MeV] nuclide \\\n", + "0 1 0.00e+00 6.25e-07 total \n", + "1 1 6.25e-07 2.00e+01 total \n", "\n", " score mean std. dev. \n", "0 ((absorption / flux) / (total / flux)) 0.076219 0.000651 \n", @@ -1060,8 +1060,8 @@ " \n", " 0\n", " 1\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " total\n", " ((scatter / flux) / (total / flux))\n", " 0.923781\n", @@ -1070,8 +1070,8 @@ " \n", " 1\n", " 1\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " total\n", " ((scatter / flux) / (total / flux))\n", " 0.980681\n", @@ -1082,9 +1082,9 @@ "" ], "text/plain": [ - " cell energy low [MeV] energy high [MeV] nuclide \\\n", - "0 1 0.000000 0.000001 total \n", - "1 1 0.000001 20.000000 total \n", + " cell energy low [MeV] energy high [MeV] nuclide \\\n", + "0 1 0.00e+00 6.25e-07 total \n", + "1 1 6.25e-07 2.00e+01 total \n", "\n", " score mean std. dev. \n", "0 ((scatter / flux) / (total / flux)) 0.923781 0.007714 \n", @@ -1139,8 +1139,8 @@ " \n", " 0\n", " 1\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " total\n", " (((absorption / flux) / (total / flux)) + ((sc...\n", " 1\n", @@ -1149,8 +1149,8 @@ " \n", " 1\n", " 1\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " total\n", " (((absorption / flux) / (total / flux)) + ((sc...\n", " 1\n", @@ -1161,9 +1161,9 @@ "" ], "text/plain": [ - " cell energy low [MeV] energy high [MeV] nuclide \\\n", - "0 1 0.000000 0.000001 total \n", - "1 1 0.000001 20.000000 total \n", + " cell energy low [MeV] energy high [MeV] nuclide \\\n", + "0 1 0.00e+00 6.25e-07 total \n", + "1 1 6.25e-07 2.00e+01 total \n", "\n", " score mean std. dev. \n", "0 (((absorption / flux) / (total / flux)) + ((sc... 1 0.007741 \n", @@ -1182,6 +1182,15 @@ "# The scattering-to-total ratio is a derived tally which can generate Pandas DataFrames for inspection\n", "sum_ratio.get_pandas_dataframe()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index 16fa16f21b..45868ab769 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -382,7 +382,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ACBhQuBnxwGisAAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAyLTA2VDE1OjQ2OjA2LTA1OjAwkB0d7wAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMi0wNlQxNTo0NjowNi0wNTowMOFApVMAAAAASUVORK5C\nYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ACBxMOKxHYExwAAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAyLTA3VDE0OjE0OjQzLTA1OjAwQDMI2QAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMi0wN1QxNDoxNDo0My0wNTowMDFusGUAAAAASUVORK5C\nYII=\n", "text/plain": [ "" ] @@ -572,7 +572,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", " Git SHA1: 34381b40a9445a727e360873aaa6ef892af1cb6a\n", - " Date/Time: 2016-02-06 15:46:08\n", + " Date/Time: 2016-02-07 14:14:45\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -637,20 +637,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.1900E-01 seconds\n", - " Reading cross sections = 8.7000E-02 seconds\n", - " Total time in simulation = 4.8710E+00 seconds\n", - " Time in transport only = 4.8580E+00 seconds\n", - " Time in inactive batches = 7.1900E-01 seconds\n", - " Time in active batches = 4.1520E+00 seconds\n", + " Total time for initialization = 3.1700E-01 seconds\n", + " Reading cross sections = 8.0000E-02 seconds\n", + " Total time in simulation = 4.7680E+00 seconds\n", + " Time in transport only = 4.7530E+00 seconds\n", + " Time in inactive batches = 7.0700E-01 seconds\n", + " Time in active batches = 4.0610E+00 seconds\n", " Time synchronizing fission bank = 3.0000E-03 seconds\n", - " Sampling source sites = 3.0000E-03 seconds\n", - " SEND/RECV source sites = 0.0000E+00 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", + " Sampling source sites = 2.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 5.1990E+00 seconds\n", - " Calculation Rate (inactive) = 17385.3 neutrons/second\n", - " Calculation Rate (active) = 9031.79 neutrons/second\n", + " Total time elapsed = 5.0960E+00 seconds\n", + " Calculation Rate (inactive) = 17680.3 neutrons/second\n", + " Calculation Rate (active) = 9234.18 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -825,8 +825,8 @@ " 1\n", " 1\n", " 1\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " fission\n", " 0.000202\n", " 0.000037\n", @@ -836,8 +836,8 @@ " 1\n", " 1\n", " 1\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " nu-fission\n", " 0.000492\n", " 0.000090\n", @@ -847,8 +847,8 @@ " 1\n", " 1\n", " 1\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " fission\n", " 0.000076\n", " 0.000004\n", @@ -858,8 +858,8 @@ " 1\n", " 1\n", " 1\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " nu-fission\n", " 0.000204\n", " 0.000010\n", @@ -869,8 +869,8 @@ " 1\n", " 2\n", " 1\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " fission\n", " 0.000375\n", " 0.000039\n", @@ -880,8 +880,8 @@ " 1\n", " 2\n", " 1\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " nu-fission\n", " 0.000914\n", " 0.000094\n", @@ -891,8 +891,8 @@ " 1\n", " 2\n", " 1\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " fission\n", " 0.000107\n", " 0.000013\n", @@ -902,8 +902,8 @@ " 1\n", " 2\n", " 1\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " nu-fission\n", " 0.000278\n", " 0.000032\n", @@ -913,8 +913,8 @@ " 1\n", " 3\n", " 1\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " fission\n", " 0.000564\n", " 0.000056\n", @@ -924,8 +924,8 @@ " 1\n", " 3\n", " 1\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " nu-fission\n", " 0.001374\n", " 0.000137\n", @@ -935,8 +935,8 @@ " 1\n", " 3\n", " 1\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " fission\n", " 0.000149\n", " 0.000007\n", @@ -946,8 +946,8 @@ " 1\n", " 3\n", " 1\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " nu-fission\n", " 0.000388\n", " 0.000018\n", @@ -957,8 +957,8 @@ " 1\n", " 4\n", " 1\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " fission\n", " 0.000669\n", " 0.000044\n", @@ -968,8 +968,8 @@ " 1\n", " 4\n", " 1\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " nu-fission\n", " 0.001631\n", " 0.000108\n", @@ -979,8 +979,8 @@ " 1\n", " 4\n", " 1\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " fission\n", " 0.000165\n", " 0.000011\n", @@ -990,8 +990,8 @@ " 1\n", " 4\n", " 1\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " nu-fission\n", " 0.000433\n", " 0.000029\n", @@ -1001,8 +1001,8 @@ " 1\n", " 5\n", " 1\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " fission\n", " 0.000932\n", " 0.000069\n", @@ -1012,8 +1012,8 @@ " 1\n", " 5\n", " 1\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " nu-fission\n", " 0.002270\n", " 0.000168\n", @@ -1023,8 +1023,8 @@ " 1\n", " 5\n", " 1\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " fission\n", " 0.000183\n", " 0.000011\n", @@ -1034,8 +1034,8 @@ " 1\n", " 5\n", " 1\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " nu-fission\n", " 0.000477\n", " 0.000028\n", @@ -1045,49 +1045,49 @@ "" ], "text/plain": [ - " (mesh 1, x) (mesh 1, y) (mesh 1, z) energy low [MeV] \\\n", - "0 1 1 1 0.000000 \n", - "1 1 1 1 0.000000 \n", - "2 1 1 1 0.000001 \n", - "3 1 1 1 0.000001 \n", - "4 1 2 1 0.000000 \n", - "5 1 2 1 0.000000 \n", - "6 1 2 1 0.000001 \n", - "7 1 2 1 0.000001 \n", - "8 1 3 1 0.000000 \n", - "9 1 3 1 0.000000 \n", - "10 1 3 1 0.000001 \n", - "11 1 3 1 0.000001 \n", - "12 1 4 1 0.000000 \n", - "13 1 4 1 0.000000 \n", - "14 1 4 1 0.000001 \n", - "15 1 4 1 0.000001 \n", - "16 1 5 1 0.000000 \n", - "17 1 5 1 0.000000 \n", - "18 1 5 1 0.000001 \n", - "19 1 5 1 0.000001 \n", + " (mesh 1, x) (mesh 1, y) (mesh 1, z) energy low [MeV] energy high [MeV] \\\n", + "0 1 1 1 0.00e+00 6.25e-07 \n", + "1 1 1 1 0.00e+00 6.25e-07 \n", + "2 1 1 1 6.25e-07 2.00e+01 \n", + "3 1 1 1 6.25e-07 2.00e+01 \n", + "4 1 2 1 0.00e+00 6.25e-07 \n", + "5 1 2 1 0.00e+00 6.25e-07 \n", + "6 1 2 1 6.25e-07 2.00e+01 \n", + "7 1 2 1 6.25e-07 2.00e+01 \n", + "8 1 3 1 0.00e+00 6.25e-07 \n", + "9 1 3 1 0.00e+00 6.25e-07 \n", + "10 1 3 1 6.25e-07 2.00e+01 \n", + "11 1 3 1 6.25e-07 2.00e+01 \n", + "12 1 4 1 0.00e+00 6.25e-07 \n", + "13 1 4 1 0.00e+00 6.25e-07 \n", + "14 1 4 1 6.25e-07 2.00e+01 \n", + "15 1 4 1 6.25e-07 2.00e+01 \n", + "16 1 5 1 0.00e+00 6.25e-07 \n", + "17 1 5 1 0.00e+00 6.25e-07 \n", + "18 1 5 1 6.25e-07 2.00e+01 \n", + "19 1 5 1 6.25e-07 2.00e+01 \n", "\n", - " energy high [MeV] score mean std. dev. \n", - "0 0.000001 fission 0.000202 0.000037 \n", - "1 0.000001 nu-fission 0.000492 0.000090 \n", - "2 20.000000 fission 0.000076 0.000004 \n", - "3 20.000000 nu-fission 0.000204 0.000010 \n", - "4 0.000001 fission 0.000375 0.000039 \n", - "5 0.000001 nu-fission 0.000914 0.000094 \n", - "6 20.000000 fission 0.000107 0.000013 \n", - "7 20.000000 nu-fission 0.000278 0.000032 \n", - "8 0.000001 fission 0.000564 0.000056 \n", - "9 0.000001 nu-fission 0.001374 0.000137 \n", - "10 20.000000 fission 0.000149 0.000007 \n", - "11 20.000000 nu-fission 0.000388 0.000018 \n", - "12 0.000001 fission 0.000669 0.000044 \n", - "13 0.000001 nu-fission 0.001631 0.000108 \n", - "14 20.000000 fission 0.000165 0.000011 \n", - "15 20.000000 nu-fission 0.000433 0.000029 \n", - "16 0.000001 fission 0.000932 0.000069 \n", - "17 0.000001 nu-fission 0.002270 0.000168 \n", - "18 20.000000 fission 0.000183 0.000011 \n", - "19 20.000000 nu-fission 0.000477 0.000028 " + " score mean std. dev. \n", + "0 fission 0.000202 0.000037 \n", + "1 nu-fission 0.000492 0.000090 \n", + "2 fission 0.000076 0.000004 \n", + "3 nu-fission 0.000204 0.000010 \n", + "4 fission 0.000375 0.000039 \n", + "5 nu-fission 0.000914 0.000094 \n", + "6 fission 0.000107 0.000013 \n", + "7 nu-fission 0.000278 0.000032 \n", + "8 fission 0.000564 0.000056 \n", + "9 nu-fission 0.001374 0.000137 \n", + "10 fission 0.000149 0.000007 \n", + "11 nu-fission 0.000388 0.000018 \n", + "12 fission 0.000669 0.000044 \n", + "13 nu-fission 0.001631 0.000108 \n", + "14 fission 0.000165 0.000011 \n", + "15 nu-fission 0.000433 0.000029 \n", + "16 fission 0.000932 0.000069 \n", + "17 nu-fission 0.002270 0.000168 \n", + "18 fission 0.000183 0.000011 \n", + "19 nu-fission 0.000477 0.000028 " ] }, "execution_count": 25, @@ -1114,7 +1114,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1137,7 +1137,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 27, @@ -1148,7 +1148,7 @@ "data": { "image/png": "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\ngg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1158,7 +1158,7 @@ "source": [ "# Extract thermal nu-fission rates from pandas\n", "fiss = df[df['score'] == 'nu-fission']\n", - "fiss = fiss[fiss['energy low [MeV]'] == 0.0]\n", + "fiss = fiss[fiss['energy low [MeV]'] == '0.00e+00']\n", "\n", "# Extract mean and reshape as 2D NumPy arrays\n", "mean = fiss['mean'].reshape((17,17))\n", @@ -2359,7 +2359,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 38, @@ -2370,7 +2370,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2397,7 +2397,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 39, @@ -2408,7 +2408,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index 91514719db..5c77dcf9cd 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -366,7 +366,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ACBhQ1GVhO3EQAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDItMDZUMTU6NTM6\nMjQtMDU6MDBiAB8/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAyLTA2VDE1OjUzOjI0LTA1OjAw\nE12ngwAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ACBxMQBoBGcLYAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDItMDdUMTQ6MTY6\nMDYtMDU6MDCStPm5AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAyLTA3VDE0OjE2OjA2LTA1OjAw\n4+lBBQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -577,7 +577,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", " Git SHA1: 34381b40a9445a727e360873aaa6ef892af1cb6a\n", - " Date/Time: 2016-02-06 15:53:27\n", + " Date/Time: 2016-02-07 14:16:08\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -634,20 +634,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.8900E-01 seconds\n", - " Reading cross sections = 8.8000E-02 seconds\n", - " Total time in simulation = 8.0560E+00 seconds\n", - " Time in transport only = 8.0400E+00 seconds\n", - " Time in inactive batches = 1.1570E+00 seconds\n", - " Time in active batches = 6.8990E+00 seconds\n", - " Time synchronizing fission bank = 3.0000E-03 seconds\n", - " Sampling source sites = 3.0000E-03 seconds\n", - " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Total time for initialization = 4.0900E-01 seconds\n", + " Reading cross sections = 1.0100E-01 seconds\n", + " Total time in simulation = 7.8100E+00 seconds\n", + " Time in transport only = 7.7980E+00 seconds\n", + " Time in inactive batches = 1.3850E+00 seconds\n", + " Time in active batches = 6.4250E+00 seconds\n", + " Time synchronizing fission bank = 1.0000E-03 seconds\n", + " Sampling source sites = 0.0000E+00 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 2.0000E-03 seconds\n", - " Total time elapsed = 8.4560E+00 seconds\n", - " Calculation Rate (inactive) = 10803.8 neutrons/second\n", - " Calculation Rate (active) = 5435.57 neutrons/second\n", + " Total time for finalization = 1.0000E-03 seconds\n", + " Total time elapsed = 8.2360E+00 seconds\n", + " Calculation Rate (inactive) = 9025.27 neutrons/second\n", + " Calculation Rate (active) = 5836.58 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -821,8 +821,8 @@ " \n", " \n", " 0\n", - " 0\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " total\n", " absorption\n", " 0.694707\n", @@ -833,11 +833,8 @@ "" ], "text/plain": [ - " energy low [MeV] energy high [MeV] nuclide score mean \\\n", - "0 0 0.000001 total absorption 0.694707 \n", - "\n", - " std. dev. \n", - "0 0.006699 " + " energy low [MeV] energy high [MeV] nuclide score mean std. dev.\n", + "0 0.00e+00 6.25e-07 total absorption 0.694707 0.006699" ] }, "execution_count": 27, @@ -886,8 +883,8 @@ " \n", " \n", " 0\n", - " 0\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " total\n", " nu-fission\n", " 1.201216\n", @@ -898,11 +895,8 @@ "" ], "text/plain": [ - " energy low [MeV] energy high [MeV] nuclide score mean \\\n", - "0 0 0.000001 total nu-fission 1.201216 \n", - "\n", - " std. dev. \n", - "0 0.012288 " + " energy low [MeV] energy high [MeV] nuclide score mean std. dev.\n", + "0 0.00e+00 6.25e-07 total nu-fission 1.201216 0.012288" ] }, "execution_count": 28, @@ -953,8 +947,8 @@ " \n", " \n", " 0\n", - " 0\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " 10000\n", " total\n", " absorption\n", @@ -966,8 +960,8 @@ "" ], "text/plain": [ - " energy low [MeV] energy high [MeV] cell nuclide score mean \\\n", - "0 0 0.000001 10000 total absorption 0.74925 \n", + " energy low [MeV] energy high [MeV] cell nuclide score mean \\\n", + "0 0.00e+00 6.25e-07 10000 total absorption 0.74925 \n", "\n", " std. dev. \n", "0 0.008257 " @@ -1019,8 +1013,8 @@ " \n", " \n", " 0\n", - " 0\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " 10000\n", " total\n", " (nu-fission / absorption)\n", @@ -1032,8 +1026,8 @@ "" ], "text/plain": [ - " energy low [MeV] energy high [MeV] cell nuclide \\\n", - "0 0 0.000001 10000 total \n", + " energy low [MeV] energy high [MeV] cell nuclide \\\n", + "0 0.00e+00 6.25e-07 10000 total \n", "\n", " score mean std. dev. \n", "0 (nu-fission / absorption) 1.663616 0.018624 " @@ -1084,8 +1078,8 @@ " \n", " \n", " 0\n", - " 0\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " 10000\n", " total\n", " (((absorption * nu-fission) * absorption) * (n...\n", @@ -1097,8 +1091,8 @@ "" ], "text/plain": [ - " energy low [MeV] energy high [MeV] cell nuclide \\\n", - "0 0 0.000001 10000 total \n", + " energy low [MeV] energy high [MeV] cell nuclide \\\n", + "0 0.00e+00 6.25e-07 10000 total \n", "\n", " score mean std. dev. \n", "0 (((absorption * nu-fission) * absorption) * (n... 1.040166 0.021928 " @@ -1167,8 +1161,8 @@ " \n", " 0\n", " 10000\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " (U-238 / total)\n", " (nu-fission / flux)\n", " 0.000001\n", @@ -1177,8 +1171,8 @@ " \n", " 1\n", " 10000\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " (U-238 / total)\n", " (scatter / flux)\n", " 0.209989\n", @@ -1187,8 +1181,8 @@ " \n", " 2\n", " 10000\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " (U-235 / total)\n", " (nu-fission / flux)\n", " 0.356420\n", @@ -1197,8 +1191,8 @@ " \n", " 3\n", " 10000\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " (U-235 / total)\n", " (scatter / flux)\n", " 0.005555\n", @@ -1207,8 +1201,8 @@ " \n", " 4\n", " 10000\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " (U-238 / total)\n", " (nu-fission / flux)\n", " 0.007155\n", @@ -1217,8 +1211,8 @@ " \n", " 5\n", " 10000\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " (U-238 / total)\n", " (scatter / flux)\n", " 0.227770\n", @@ -1227,8 +1221,8 @@ " \n", " 6\n", " 10000\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " (U-235 / total)\n", " (nu-fission / flux)\n", " 0.008067\n", @@ -1237,8 +1231,8 @@ " \n", " 7\n", " 10000\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " (U-235 / total)\n", " (scatter / flux)\n", " 0.003367\n", @@ -1249,15 +1243,15 @@ "" ], "text/plain": [ - " cell energy low [MeV] energy high [MeV] nuclide \\\n", - "0 10000 0.000000 0.000001 (U-238 / total) \n", - "1 10000 0.000000 0.000001 (U-238 / total) \n", - "2 10000 0.000000 0.000001 (U-235 / total) \n", - "3 10000 0.000000 0.000001 (U-235 / total) \n", - "4 10000 0.000001 20.000000 (U-238 / total) \n", - "5 10000 0.000001 20.000000 (U-238 / total) \n", - "6 10000 0.000001 20.000000 (U-235 / total) \n", - "7 10000 0.000001 20.000000 (U-235 / total) \n", + " cell energy low [MeV] energy high [MeV] nuclide \\\n", + "0 10000 0.00e+00 6.25e-07 (U-238 / total) \n", + "1 10000 0.00e+00 6.25e-07 (U-238 / total) \n", + "2 10000 0.00e+00 6.25e-07 (U-235 / total) \n", + "3 10000 0.00e+00 6.25e-07 (U-235 / total) \n", + "4 10000 6.25e-07 2.00e+01 (U-238 / total) \n", + "5 10000 6.25e-07 2.00e+01 (U-238 / total) \n", + "6 10000 6.25e-07 2.00e+01 (U-235 / total) \n", + "7 10000 6.25e-07 2.00e+01 (U-235 / total) \n", "\n", " score mean std. dev. \n", "0 (nu-fission / flux) 0.000001 7.377419e-09 \n", @@ -1402,8 +1396,8 @@ " \n", " 0\n", " 10000\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " U-238\n", " nu-fission\n", " 0.000002\n", @@ -1412,8 +1406,8 @@ " \n", " 1\n", " 10000\n", - " 0.000000\n", - " 0.000001\n", + " 0.00e+00\n", + " 6.25e-07\n", " U-235\n", " nu-fission\n", " 0.868553\n", @@ -1422,8 +1416,8 @@ " \n", " 2\n", " 10000\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " U-238\n", " nu-fission\n", " 0.082149\n", @@ -1432,8 +1426,8 @@ " \n", " 3\n", " 10000\n", - " 0.000001\n", - " 20.000000\n", + " 6.25e-07\n", + " 2.00e+01\n", " U-235\n", " nu-fission\n", " 0.092618\n", @@ -1444,11 +1438,11 @@ "" ], "text/plain": [ - " cell energy low [MeV] energy high [MeV] nuclide score mean \\\n", - "0 10000 0.000000 0.000001 U-238 nu-fission 0.000002 \n", - "1 10000 0.000000 0.000001 U-235 nu-fission 0.868553 \n", - "2 10000 0.000001 20.000000 U-238 nu-fission 0.082149 \n", - "3 10000 0.000001 20.000000 U-235 nu-fission 0.092618 \n", + " cell energy low [MeV] energy high [MeV] nuclide score mean \\\n", + "0 10000 0.00e+00 6.25e-07 U-238 nu-fission 0.000002 \n", + "1 10000 0.00e+00 6.25e-07 U-235 nu-fission 0.868553 \n", + "2 10000 6.25e-07 2.00e+01 U-238 nu-fission 0.082149 \n", + "3 10000 6.25e-07 2.00e+01 U-235 nu-fission 0.092618 \n", "\n", " std. dev. \n", "0 1.283958e-08 \n", @@ -1496,8 +1490,8 @@ " \n", " 0\n", " 10002\n", - " 1.000000e-08\n", - " 0.000000\n", + " 1.00e-08\n", + " 1.08e-07\n", " H-1\n", " scatter\n", " 4.619398\n", @@ -1506,8 +1500,8 @@ " \n", " 1\n", " 10002\n", - " 1.080060e-07\n", - " 0.000001\n", + " 1.08e-07\n", + " 1.17e-06\n", " H-1\n", " scatter\n", " 2.030757\n", @@ -1516,8 +1510,8 @@ " \n", " 2\n", " 10002\n", - " 1.166529e-06\n", - " 0.000013\n", + " 1.17e-06\n", + " 1.26e-05\n", " H-1\n", " scatter\n", " 1.658488\n", @@ -1526,8 +1520,8 @@ " \n", " 3\n", " 10002\n", - " 1.259921e-05\n", - " 0.000136\n", + " 1.26e-05\n", + " 1.36e-04\n", " H-1\n", " scatter\n", " 1.853002\n", @@ -1536,8 +1530,8 @@ " \n", " 4\n", " 10002\n", - " 1.360790e-04\n", - " 0.001470\n", + " 1.36e-04\n", + " 1.47e-03\n", " H-1\n", " scatter\n", " 2.050773\n", @@ -1546,8 +1540,8 @@ " \n", " 5\n", " 10002\n", - " 1.469734e-03\n", - " 0.015874\n", + " 1.47e-03\n", + " 1.59e-02\n", " H-1\n", " scatter\n", " 2.131759\n", @@ -1556,8 +1550,8 @@ " \n", " 6\n", " 10002\n", - " 1.587401e-02\n", - " 0.171449\n", + " 1.59e-02\n", + " 1.71e-01\n", " H-1\n", " scatter\n", " 2.213710\n", @@ -1566,8 +1560,8 @@ " \n", " 7\n", " 10002\n", - " 1.714488e-01\n", - " 1.851749\n", + " 1.71e-01\n", + " 1.85e+00\n", " H-1\n", " scatter\n", " 2.011925\n", @@ -1576,8 +1570,8 @@ " \n", " 8\n", " 10002\n", - " 1.851749e+00\n", - " 20.000000\n", + " 1.85e+00\n", + " 2.00e+01\n", " H-1\n", " scatter\n", " 0.371280\n", @@ -1588,16 +1582,16 @@ "" ], "text/plain": [ - " cell energy low [MeV] energy high [MeV] nuclide score mean \\\n", - "0 10002 1.000000e-08 0.000000 H-1 scatter 4.619398 \n", - "1 10002 1.080060e-07 0.000001 H-1 scatter 2.030757 \n", - "2 10002 1.166529e-06 0.000013 H-1 scatter 1.658488 \n", - "3 10002 1.259921e-05 0.000136 H-1 scatter 1.853002 \n", - "4 10002 1.360790e-04 0.001470 H-1 scatter 2.050773 \n", - "5 10002 1.469734e-03 0.015874 H-1 scatter 2.131759 \n", - "6 10002 1.587401e-02 0.171449 H-1 scatter 2.213710 \n", - "7 10002 1.714488e-01 1.851749 H-1 scatter 2.011925 \n", - "8 10002 1.851749e+00 20.000000 H-1 scatter 0.371280 \n", + " cell energy low [MeV] energy high [MeV] nuclide score mean \\\n", + "0 10002 1.00e-08 1.08e-07 H-1 scatter 4.619398 \n", + "1 10002 1.08e-07 1.17e-06 H-1 scatter 2.030757 \n", + "2 10002 1.17e-06 1.26e-05 H-1 scatter 1.658488 \n", + "3 10002 1.26e-05 1.36e-04 H-1 scatter 1.853002 \n", + "4 10002 1.36e-04 1.47e-03 H-1 scatter 2.050773 \n", + "5 10002 1.47e-03 1.59e-02 H-1 scatter 2.131759 \n", + "6 10002 1.59e-02 1.71e-01 H-1 scatter 2.213710 \n", + "7 10002 1.71e-01 1.85e+00 H-1 scatter 2.011925 \n", + "8 10002 1.85e+00 2.00e+01 H-1 scatter 0.371280 \n", "\n", " std. dev. \n", "0 0.040124 \n", diff --git a/openmc/arithmetic.py b/openmc/arithmetic.py index 8574c4873e..f6094533a7 100644 --- a/openmc/arithmetic.py +++ b/openmc/arithmetic.py @@ -430,7 +430,7 @@ class CrossFilter(object): filter_index = left_index * self.right_filter.num_bins + right_index return filter_index - def get_pandas_dataframe(self, datasize, summary=None): + def get_pandas_dataframe(self, datasize, summary=None, **kwargs): """Builds a Pandas DataFrame for the CrossFilter's bins. This method constructs a Pandas DataFrame object for the CrossFilter @@ -454,6 +454,14 @@ class CrossFilter(object): column with a geometric "path" to each distribcell instance. NOTE: This option requires the OpenCG Python package. + Keyword arguments + ----------------- + energy_fmt : None or string + If a format string is provided, energy and energyout filter bins + will be converted from floats to strings using the given format. If + None is provided, the values will be left as floats. The default is + '{:.2e}'. + Returns ------- pandas.DataFrame @@ -472,12 +480,15 @@ class CrossFilter(object): # If left and right filters are identical, do not combine bins if self.left_filter == self.right_filter: - df = self.left_filter.get_pandas_dataframe(datasize, summary) + df = self.left_filter.get_pandas_dataframe(datasize, summary, + **kwargs) # If left and right filters are different, combine their bins else: - left_df = self.left_filter.get_pandas_dataframe(datasize, summary) - right_df = self.right_filter.get_pandas_dataframe(datasize, summary) + left_df = self.left_filter.get_pandas_dataframe(datasize, summary, + **kwargs) + right_df = self.right_filter.get_pandas_dataframe(datasize, summary, + **kwargs) left_df = left_df.astype(str) right_df = right_df.astype(str) df = '(' + left_df + ' ' + self.binary_op + ' ' + right_df + ')' @@ -831,7 +842,7 @@ class AggregateFilter(object): else: return 0 - def get_pandas_dataframe(self, datasize, summary=None): + def get_pandas_dataframe(self, datasize, summary=None, **kwargs): """Builds a Pandas DataFrame for the AggregateFilter's bins. This method constructs a Pandas DataFrame object for the AggregateFilter diff --git a/openmc/filter.py b/openmc/filter.py index a27e17cd96..d6f604108c 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -462,7 +462,7 @@ class Filter(object): return filter_bin - def get_pandas_dataframe(self, data_size, summary=None): + def get_pandas_dataframe(self, data_size, summary=None, **kwargs): """Builds a Pandas DataFrame for the Filter's bins. This method constructs a Pandas DataFrame object for the filter with @@ -484,6 +484,14 @@ class Filter(object): column with a geometric "path" to each distribcell instance. NOTE: This option requires the OpenCG Python package. + Keyword arguments + ----------------- + energy_fmt : None or string + If a format string is provided, energy and energyout filter bins + will be converted from floats to strings using the given format. If + None is provided, the values will be left as floats. The default is + '{:.2e}'. + Returns ------- pandas.DataFrame @@ -727,6 +735,12 @@ class Filter(object): lo_bins = np.tile(lo_bins, tile_factor) hi_bins = np.tile(hi_bins, tile_factor) + # Format the energy values, if necessary. + energy_fmt = kwargs.setdefault('energy_fmt', '{:.2e}') + if energy_fmt is not None: + lo_bins = [energy_fmt.format(E) for E in lo_bins] + hi_bins = [energy_fmt.format(E) for E in hi_bins] + # Add the new energy columns to the DataFrame. df.loc[:, self.type + ' low [MeV]'] = lo_bins df.loc[:, self.type + ' high [MeV]'] = hi_bins diff --git a/openmc/tallies.py b/openmc/tallies.py index 3294a1d062..f98be83a2a 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1244,7 +1244,7 @@ class Tally(object): return data def get_pandas_dataframe(self, filters=True, nuclides=True, - scores=True, summary=None): + scores=True, summary=None, **kwargs): """Build a Pandas DataFrame for the Tally data. This method constructs a Pandas DataFrame object for the Tally data @@ -1269,6 +1269,14 @@ class Tally(object): column with a geometric "path" to each distribcell intance. NOTE: This option requires the OpenCG Python package. + Keyword arguments + ----------------- + energy_fmt : None or string + If a format string is provided, energy and energyout filter bins + will be converted from floats to strings using the given format. If + None is provided, the values will be left as floats. The default is + '{:.2e}'. + Returns ------- pandas.DataFrame @@ -1316,7 +1324,8 @@ class Tally(object): # Append each Filter's DataFrame to the overall DataFrame for self_filter in self.filters: - filter_df = self_filter.get_pandas_dataframe(data_size, summary) + filter_df = self_filter.get_pandas_dataframe(data_size, summary, + **kwargs) df = pd.concat([df, filter_df], axis=1) # Include DataFrame column for nuclides if user requested it From 912aa360caac20a563263bf2624482e29172d54d Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sun, 7 Feb 2016 15:00:18 -0500 Subject: [PATCH 275/650] Implement azim. and polar filters in Pandas output --- openmc/filter.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/openmc/filter.py b/openmc/filter.py index 54814a6b6f..0535a80d7d 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -735,6 +735,19 @@ class Filter(object): filter_bins = filter_bins df = pd.concat([df, pd.DataFrame({self.type + ' [MeV]' : filter_bins})]) + elif self.type in ('azimuthal', 'polar'): + # Extract the lower and upper angle bounds, then repeat and tile + # them as necessary to account for other filters. + lo_bins = np.repeat(self.bins[:-1], self.stride) + hi_bins = np.repeat(self.bins[1:], self.stride) + tile_factor = data_size / len(lo_bins) + lo_bins = np.tile(lo_bins, tile_factor) + hi_bins = np.tile(hi_bins, tile_factor) + + # Add the new angle columns to the DataFrame. + df.loc[:, self.type + ' low'] = lo_bins + df.loc[:, self.type + ' high'] = hi_bins + # universe, material, surface, cell, and cellborn filters else: filter_bins = np.repeat(self.bins, self.stride) From 5dfc9e91fcac03766e86b6a145989dd8b67c32f0 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sun, 7 Feb 2016 16:06:33 -0500 Subject: [PATCH 276/650] Improve Pandas float handling --- .../pythonapi/examples/mgxs-part-i.ipynb | 115 ++- .../examples/pandas-dataframes.ipynb | 703 +++++++++--------- .../pythonapi/examples/tally-arithmetic.ipynb | 262 +++---- openmc/arithmetic.py | 21 +- openmc/filter.py | 16 +- openmc/tallies.py | 21 +- 6 files changed, 549 insertions(+), 589 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index 211829be64..104fbe759b 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -519,7 +519,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", " Git SHA1: 34381b40a9445a727e360873aaa6ef892af1cb6a\n", - " Date/Time: 2016-02-07 14:10:52\n", + " Date/Time: 2016-02-07 15:58:16\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -605,20 +605,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 8.7800E-01 seconds\n", - " Reading cross sections = 1.9200E-01 seconds\n", - " Total time in simulation = 1.3677E+01 seconds\n", - " Time in transport only = 1.3579E+01 seconds\n", - " Time in inactive batches = 1.7900E+00 seconds\n", - " Time in active batches = 1.1887E+01 seconds\n", - " Time synchronizing fission bank = 6.0000E-03 seconds\n", - " Sampling source sites = 2.0000E-03 seconds\n", + " Total time for initialization = 3.2100E-01 seconds\n", + " Reading cross sections = 7.4000E-02 seconds\n", + " Total time in simulation = 8.3830E+00 seconds\n", + " Time in transport only = 8.3670E+00 seconds\n", + " Time in inactive batches = 1.0330E+00 seconds\n", + " Time in active batches = 7.3500E+00 seconds\n", + " Time synchronizing fission bank = 4.0000E-03 seconds\n", + " Sampling source sites = 1.0000E-03 seconds\n", " SEND/RECV source sites = 3.0000E-03 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 1.0000E-03 seconds\n", - " Total time elapsed = 1.4578E+01 seconds\n", - " Calculation Rate (inactive) = 13966.5 neutrons/second\n", - " Calculation Rate (active) = 8412.55 neutrons/second\n", + " Total time elapsed = 8.7140E+00 seconds\n", + " Calculation Rate (inactive) = 24201.4 neutrons/second\n", + " Calculation Rate (active) = 13605.4 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -909,8 +909,8 @@ " \n", " 0\n", " 1\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.000000\n", + " 0.000001\n", " total\n", " (((total / flux) - (absorption / flux)) - (sca...\n", " 4.884981e-15\n", @@ -919,8 +919,8 @@ " \n", " 1\n", " 1\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 0.000001\n", + " 20.000000\n", " total\n", " (((total / flux) - (absorption / flux)) - (sca...\n", " 1.221245e-15\n", @@ -931,13 +931,13 @@ "" ], "text/plain": [ - " cell energy low [MeV] energy high [MeV] nuclide \\\n", - "0 1 0.00e+00 6.25e-07 total \n", - "1 1 6.25e-07 2.00e+01 total \n", + " cell energy low [MeV] energy high [MeV] nuclide \\\n", + "0 1 0.00e+00 6.25e-07 total \n", + "1 1 6.25e-07 2.00e+01 total \n", "\n", - " score mean std. dev. \n", - "0 (((total / flux) - (absorption / flux)) - (sca... 4.884981e-15 0.011274 \n", - "1 (((total / flux) - (absorption / flux)) - (sca... 1.221245e-15 0.001802 " + " score mean std. dev. \n", + "0 (((total / flux) - (absorption / flux)) - (sca... 4.88e-15 1.13e-02 \n", + "1 (((total / flux) - (absorption / flux)) - (sca... 1.22e-15 1.80e-03 " ] }, "execution_count": 23, @@ -988,8 +988,8 @@ " \n", " 0\n", " 1\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.000000\n", + " 0.000001\n", " total\n", " ((absorption / flux) / (total / flux))\n", " 0.076219\n", @@ -998,8 +998,8 @@ " \n", " 1\n", " 1\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 0.000001\n", + " 20.000000\n", " total\n", " ((absorption / flux) / (total / flux))\n", " 0.019319\n", @@ -1010,13 +1010,13 @@ "" ], "text/plain": [ - " cell energy low [MeV] energy high [MeV] nuclide \\\n", - "0 1 0.00e+00 6.25e-07 total \n", - "1 1 6.25e-07 2.00e+01 total \n", + " cell energy low [MeV] energy high [MeV] nuclide \\\n", + "0 1 0.00e+00 6.25e-07 total \n", + "1 1 6.25e-07 2.00e+01 total \n", "\n", - " score mean std. dev. \n", - "0 ((absorption / flux) / (total / flux)) 0.076219 0.000651 \n", - "1 ((absorption / flux) / (total / flux)) 0.019319 0.000086 " + " score mean std. dev. \n", + "0 ((absorption / flux) / (total / flux)) 7.62e-02 6.51e-04 \n", + "1 ((absorption / flux) / (total / flux)) 1.93e-02 8.65e-05 " ] }, "execution_count": 24, @@ -1060,8 +1060,8 @@ " \n", " 0\n", " 1\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.000000\n", + " 0.000001\n", " total\n", " ((scatter / flux) / (total / flux))\n", " 0.923781\n", @@ -1070,8 +1070,8 @@ " \n", " 1\n", " 1\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 0.000001\n", + " 20.000000\n", " total\n", " ((scatter / flux) / (total / flux))\n", " 0.980681\n", @@ -1082,13 +1082,13 @@ "" ], "text/plain": [ - " cell energy low [MeV] energy high [MeV] nuclide \\\n", - "0 1 0.00e+00 6.25e-07 total \n", - "1 1 6.25e-07 2.00e+01 total \n", + " cell energy low [MeV] energy high [MeV] nuclide \\\n", + "0 1 0.00e+00 6.25e-07 total \n", + "1 1 6.25e-07 2.00e+01 total \n", "\n", - " score mean std. dev. \n", - "0 ((scatter / flux) / (total / flux)) 0.923781 0.007714 \n", - "1 ((scatter / flux) / (total / flux)) 0.980681 0.002617 " + " score mean std. dev. \n", + "0 ((scatter / flux) / (total / flux)) 9.24e-01 7.71e-03 \n", + "1 ((scatter / flux) / (total / flux)) 9.81e-01 2.62e-03 " ] }, "execution_count": 25, @@ -1139,8 +1139,8 @@ " \n", " 0\n", " 1\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.000000\n", + " 0.000001\n", " total\n", " (((absorption / flux) / (total / flux)) + ((sc...\n", " 1\n", @@ -1149,8 +1149,8 @@ " \n", " 1\n", " 1\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 0.000001\n", + " 20.000000\n", " total\n", " (((absorption / flux) / (total / flux)) + ((sc...\n", " 1\n", @@ -1161,13 +1161,13 @@ "" ], "text/plain": [ - " cell energy low [MeV] energy high [MeV] nuclide \\\n", - "0 1 0.00e+00 6.25e-07 total \n", - "1 1 6.25e-07 2.00e+01 total \n", + " cell energy low [MeV] energy high [MeV] nuclide \\\n", + "0 1 0.00e+00 6.25e-07 total \n", + "1 1 6.25e-07 2.00e+01 total \n", "\n", - " score mean std. dev. \n", - "0 (((absorption / flux) / (total / flux)) + ((sc... 1 0.007741 \n", - "1 (((absorption / flux) / (total / flux)) + ((sc... 1 0.002619 " + " score mean std. dev. \n", + "0 (((absorption / flux) / (total / flux)) + ((sc... 1.00e+00 7.74e-03 \n", + "1 (((absorption / flux) / (total / flux)) + ((sc... 1.00e+00 2.62e-03 " ] }, "execution_count": 26, @@ -1182,15 +1182,6 @@ "# The scattering-to-total ratio is a derived tally which can generate Pandas DataFrames for inspection\n", "sum_ratio.get_pandas_dataframe()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index 45868ab769..9e08acccda 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -382,7 +382,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ACBxMOKxHYExwAAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAyLTA3VDE0OjE0OjQzLTA1OjAwQDMI2QAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMi0wN1QxNDoxNDo0My0wNTowMDFusGUAAAAASUVORK5C\nYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ACBxUBN4bMLy4AAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAyLTA3VDE2OjAxOjU1LTA1OjAwqLKcsgAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMi0wN1QxNjowMTo1NS0wNTowMNnvJA4AAAAASUVORK5C\nYII=\n", "text/plain": [ "" ] @@ -572,7 +572,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", " Git SHA1: 34381b40a9445a727e360873aaa6ef892af1cb6a\n", - " Date/Time: 2016-02-07 14:14:45\n", + " Date/Time: 2016-02-07 16:01:57\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -637,20 +637,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.1700E-01 seconds\n", - " Reading cross sections = 8.0000E-02 seconds\n", - " Total time in simulation = 4.7680E+00 seconds\n", - " Time in transport only = 4.7530E+00 seconds\n", - " Time in inactive batches = 7.0700E-01 seconds\n", - " Time in active batches = 4.0610E+00 seconds\n", - " Time synchronizing fission bank = 3.0000E-03 seconds\n", - " Sampling source sites = 2.0000E-03 seconds\n", + " Total time for initialization = 3.0900E-01 seconds\n", + " Reading cross sections = 7.8000E-02 seconds\n", + " Total time in simulation = 4.9560E+00 seconds\n", + " Time in transport only = 4.9400E+00 seconds\n", + " Time in inactive batches = 7.3100E-01 seconds\n", + " Time in active batches = 4.2250E+00 seconds\n", + " Time synchronizing fission bank = 4.0000E-03 seconds\n", + " Sampling source sites = 3.0000E-03 seconds\n", " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 5.0960E+00 seconds\n", - " Calculation Rate (inactive) = 17680.3 neutrons/second\n", - " Calculation Rate (active) = 9234.18 neutrons/second\n", + " Total time elapsed = 5.2780E+00 seconds\n", + " Calculation Rate (inactive) = 17099.9 neutrons/second\n", + " Calculation Rate (active) = 8875.74 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -825,269 +825,269 @@ " 1\n", " 1\n", " 1\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.00e+00\n", + " 6.25e-07\n", " fission\n", - " 0.000202\n", - " 0.000037\n", + " 2.02e-04\n", + " 3.69e-05\n", " \n", " \n", " 1 \n", " 1\n", " 1\n", " 1\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.00e+00\n", + " 6.25e-07\n", " nu-fission\n", - " 0.000492\n", - " 0.000090\n", + " 4.92e-04\n", + " 8.98e-05\n", " \n", " \n", " 2 \n", " 1\n", " 1\n", " 1\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 6.25e-07\n", + " 2.00e+01\n", " fission\n", - " 0.000076\n", - " 0.000004\n", + " 7.62e-05\n", + " 3.74e-06\n", " \n", " \n", " 3 \n", " 1\n", " 1\n", " 1\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 6.25e-07\n", + " 2.00e+01\n", " nu-fission\n", - " 0.000204\n", - " 0.000010\n", + " 2.04e-04\n", + " 9.88e-06\n", " \n", " \n", " 4 \n", " 1\n", " 2\n", " 1\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.00e+00\n", + " 6.25e-07\n", " fission\n", - " 0.000375\n", - " 0.000039\n", + " 3.75e-04\n", + " 3.86e-05\n", " \n", " \n", " 5 \n", " 1\n", " 2\n", " 1\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.00e+00\n", + " 6.25e-07\n", " nu-fission\n", - " 0.000914\n", - " 0.000094\n", + " 9.14e-04\n", + " 9.41e-05\n", " \n", " \n", " 6 \n", " 1\n", " 2\n", " 1\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 6.25e-07\n", + " 2.00e+01\n", " fission\n", - " 0.000107\n", - " 0.000013\n", + " 1.07e-04\n", + " 1.26e-05\n", " \n", " \n", " 7 \n", " 1\n", " 2\n", " 1\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 6.25e-07\n", + " 2.00e+01\n", " nu-fission\n", - " 0.000278\n", - " 0.000032\n", + " 2.78e-04\n", + " 3.16e-05\n", " \n", " \n", " 8 \n", " 1\n", " 3\n", " 1\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.00e+00\n", + " 6.25e-07\n", " fission\n", - " 0.000564\n", - " 0.000056\n", + " 5.64e-04\n", + " 5.60e-05\n", " \n", " \n", " 9 \n", " 1\n", " 3\n", " 1\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.00e+00\n", + " 6.25e-07\n", " nu-fission\n", - " 0.001374\n", - " 0.000137\n", + " 1.37e-03\n", + " 1.37e-04\n", " \n", " \n", " 10\n", " 1\n", " 3\n", " 1\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 6.25e-07\n", + " 2.00e+01\n", " fission\n", - " 0.000149\n", - " 0.000007\n", + " 1.49e-04\n", + " 7.25e-06\n", " \n", " \n", " 11\n", " 1\n", " 3\n", " 1\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 6.25e-07\n", + " 2.00e+01\n", " nu-fission\n", - " 0.000388\n", - " 0.000018\n", + " 3.88e-04\n", + " 1.78e-05\n", " \n", " \n", " 12\n", " 1\n", " 4\n", " 1\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.00e+00\n", + " 6.25e-07\n", " fission\n", - " 0.000669\n", - " 0.000044\n", + " 6.69e-04\n", + " 4.44e-05\n", " \n", " \n", " 13\n", " 1\n", " 4\n", " 1\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.00e+00\n", + " 6.25e-07\n", " nu-fission\n", - " 0.001631\n", - " 0.000108\n", + " 1.63e-03\n", + " 1.08e-04\n", " \n", " \n", " 14\n", " 1\n", " 4\n", " 1\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 6.25e-07\n", + " 2.00e+01\n", " fission\n", - " 0.000165\n", - " 0.000011\n", + " 1.65e-04\n", + " 1.09e-05\n", " \n", " \n", " 15\n", " 1\n", " 4\n", " 1\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 6.25e-07\n", + " 2.00e+01\n", " nu-fission\n", - " 0.000433\n", - " 0.000029\n", + " 4.33e-04\n", + " 2.89e-05\n", " \n", " \n", " 16\n", " 1\n", " 5\n", " 1\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.00e+00\n", + " 6.25e-07\n", " fission\n", - " 0.000932\n", - " 0.000069\n", + " 9.32e-04\n", + " 6.90e-05\n", " \n", " \n", " 17\n", " 1\n", " 5\n", " 1\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.00e+00\n", + " 6.25e-07\n", " nu-fission\n", - " 0.002270\n", - " 0.000168\n", + " 2.27e-03\n", + " 1.68e-04\n", " \n", " \n", " 18\n", " 1\n", " 5\n", " 1\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 6.25e-07\n", + " 2.00e+01\n", " fission\n", - " 0.000183\n", - " 0.000011\n", + " 1.83e-04\n", + " 1.10e-05\n", " \n", " \n", " 19\n", " 1\n", " 5\n", " 1\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 6.25e-07\n", + " 2.00e+01\n", " nu-fission\n", - " 0.000477\n", - " 0.000028\n", + " 4.77e-04\n", + " 2.77e-05\n", " \n", " \n", "\n", "" ], "text/plain": [ - " (mesh 1, x) (mesh 1, y) (mesh 1, z) energy low [MeV] energy high [MeV] \\\n", - "0 1 1 1 0.00e+00 6.25e-07 \n", - "1 1 1 1 0.00e+00 6.25e-07 \n", - "2 1 1 1 6.25e-07 2.00e+01 \n", - "3 1 1 1 6.25e-07 2.00e+01 \n", - "4 1 2 1 0.00e+00 6.25e-07 \n", - "5 1 2 1 0.00e+00 6.25e-07 \n", - "6 1 2 1 6.25e-07 2.00e+01 \n", - "7 1 2 1 6.25e-07 2.00e+01 \n", - "8 1 3 1 0.00e+00 6.25e-07 \n", - "9 1 3 1 0.00e+00 6.25e-07 \n", - "10 1 3 1 6.25e-07 2.00e+01 \n", - "11 1 3 1 6.25e-07 2.00e+01 \n", - "12 1 4 1 0.00e+00 6.25e-07 \n", - "13 1 4 1 0.00e+00 6.25e-07 \n", - "14 1 4 1 6.25e-07 2.00e+01 \n", - "15 1 4 1 6.25e-07 2.00e+01 \n", - "16 1 5 1 0.00e+00 6.25e-07 \n", - "17 1 5 1 0.00e+00 6.25e-07 \n", - "18 1 5 1 6.25e-07 2.00e+01 \n", - "19 1 5 1 6.25e-07 2.00e+01 \n", + " (mesh 1, x) (mesh 1, y) (mesh 1, z) energy low [MeV] \\\n", + "0 1 1 1 0.00e+00 \n", + "1 1 1 1 0.00e+00 \n", + "2 1 1 1 6.25e-07 \n", + "3 1 1 1 6.25e-07 \n", + "4 1 2 1 0.00e+00 \n", + "5 1 2 1 0.00e+00 \n", + "6 1 2 1 6.25e-07 \n", + "7 1 2 1 6.25e-07 \n", + "8 1 3 1 0.00e+00 \n", + "9 1 3 1 0.00e+00 \n", + "10 1 3 1 6.25e-07 \n", + "11 1 3 1 6.25e-07 \n", + "12 1 4 1 0.00e+00 \n", + "13 1 4 1 0.00e+00 \n", + "14 1 4 1 6.25e-07 \n", + "15 1 4 1 6.25e-07 \n", + "16 1 5 1 0.00e+00 \n", + "17 1 5 1 0.00e+00 \n", + "18 1 5 1 6.25e-07 \n", + "19 1 5 1 6.25e-07 \n", "\n", - " score mean std. dev. \n", - "0 fission 0.000202 0.000037 \n", - "1 nu-fission 0.000492 0.000090 \n", - "2 fission 0.000076 0.000004 \n", - "3 nu-fission 0.000204 0.000010 \n", - "4 fission 0.000375 0.000039 \n", - "5 nu-fission 0.000914 0.000094 \n", - "6 fission 0.000107 0.000013 \n", - "7 nu-fission 0.000278 0.000032 \n", - "8 fission 0.000564 0.000056 \n", - "9 nu-fission 0.001374 0.000137 \n", - "10 fission 0.000149 0.000007 \n", - "11 nu-fission 0.000388 0.000018 \n", - "12 fission 0.000669 0.000044 \n", - "13 nu-fission 0.001631 0.000108 \n", - "14 fission 0.000165 0.000011 \n", - "15 nu-fission 0.000433 0.000029 \n", - "16 fission 0.000932 0.000069 \n", - "17 nu-fission 0.002270 0.000168 \n", - "18 fission 0.000183 0.000011 \n", - "19 nu-fission 0.000477 0.000028 " + " energy high [MeV] score mean std. dev. \n", + "0 6.25e-07 fission 2.02e-04 3.69e-05 \n", + "1 6.25e-07 nu-fission 4.92e-04 8.98e-05 \n", + "2 2.00e+01 fission 7.62e-05 3.74e-06 \n", + "3 2.00e+01 nu-fission 2.04e-04 9.88e-06 \n", + "4 6.25e-07 fission 3.75e-04 3.86e-05 \n", + "5 6.25e-07 nu-fission 9.14e-04 9.41e-05 \n", + "6 2.00e+01 fission 1.07e-04 1.26e-05 \n", + "7 2.00e+01 nu-fission 2.78e-04 3.16e-05 \n", + "8 6.25e-07 fission 5.64e-04 5.60e-05 \n", + "9 6.25e-07 nu-fission 1.37e-03 1.37e-04 \n", + "10 2.00e+01 fission 1.49e-04 7.25e-06 \n", + "11 2.00e+01 nu-fission 3.88e-04 1.78e-05 \n", + "12 6.25e-07 fission 6.69e-04 4.44e-05 \n", + "13 6.25e-07 nu-fission 1.63e-03 1.08e-04 \n", + "14 2.00e+01 fission 1.65e-04 1.09e-05 \n", + "15 2.00e+01 nu-fission 4.33e-04 2.89e-05 \n", + "16 6.25e-07 fission 9.32e-04 6.90e-05 \n", + "17 6.25e-07 nu-fission 2.27e-03 1.68e-04 \n", + "18 2.00e+01 fission 1.83e-04 1.10e-05 \n", + "19 2.00e+01 nu-fission 4.77e-04 2.77e-05 " ] }, "execution_count": 25, @@ -1099,6 +1099,10 @@ "# Get a pandas dataframe for the mesh tally data\n", "df = tally.get_pandas_dataframe(nuclides=False)\n", "\n", + "# Set the Pandas float display settings\n", + "import pandas as pd\n", + "pd.set_option('display.float_format', '{:.2e}'.format)\n", + "\n", "# Print the first twenty rows in the dataframe\n", "df.head(20)" ] @@ -1114,7 +1118,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1137,7 +1141,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 27, @@ -1148,7 +1152,7 @@ "data": { "image/png": "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\ngg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1158,7 +1162,7 @@ "source": [ "# Extract thermal nu-fission rates from pandas\n", "fiss = df[df['score'] == 'nu-fission']\n", - "fiss = fiss[fiss['energy low [MeV]'] == '0.00e+00']\n", + "fiss = fiss[fiss['energy low [MeV]'] == 0.0]\n", "\n", "# Extract mean and reshape as 2D NumPy arrays\n", "mean = fiss['mean'].reshape((17,17))\n", @@ -1236,144 +1240,144 @@ " 10000\n", " U-235\n", " scatter-Y0,0\n", - " 0.037095\n", - " 0.001150\n", + " 3.71e-02\n", + " 1.15e-03\n", " \n", " \n", " 1 \n", " 10000\n", " U-235\n", " scatter-Y1,-1\n", - " 0.000266\n", - " 0.000323\n", + " 2.66e-04\n", + " 3.23e-04\n", " \n", " \n", " 2 \n", " 10000\n", " U-235\n", " scatter-Y1,0\n", - " -0.000417\n", - " 0.000274\n", + " -4.17e-04\n", + " 2.74e-04\n", " \n", " \n", " 3 \n", " 10000\n", " U-235\n", " scatter-Y1,1\n", - " -0.000228\n", - " 0.000237\n", + " -2.28e-04\n", + " 2.37e-04\n", " \n", " \n", " 4 \n", " 10000\n", " U-235\n", " scatter-Y2,-2\n", - " 0.000026\n", - " 0.000199\n", + " 2.57e-05\n", + " 1.99e-04\n", " \n", " \n", " 5 \n", " 10000\n", " U-235\n", " scatter-Y2,-1\n", - " -0.000115\n", - " 0.000185\n", + " -1.15e-04\n", + " 1.85e-04\n", " \n", " \n", " 6 \n", " 10000\n", " U-235\n", " scatter-Y2,0\n", - " 0.000151\n", - " 0.000159\n", + " 1.51e-04\n", + " 1.59e-04\n", " \n", " \n", " 7 \n", " 10000\n", " U-235\n", " scatter-Y2,1\n", - " -0.000122\n", - " 0.000280\n", + " -1.22e-04\n", + " 2.80e-04\n", " \n", " \n", " 8 \n", " 10000\n", " U-235\n", " scatter-Y2,2\n", - " 0.000008\n", - " 0.000181\n", + " 7.65e-06\n", + " 1.81e-04\n", " \n", " \n", " 9 \n", " 10000\n", " U-238\n", " scatter-Y0,0\n", - " 2.328632\n", - " 0.013107\n", + " 2.33e+00\n", + " 1.31e-02\n", " \n", " \n", " 10\n", " 10000\n", " U-238\n", " scatter-Y1,-1\n", - " 0.024530\n", - " 0.002272\n", + " 2.45e-02\n", + " 2.27e-03\n", " \n", " \n", " 11\n", " 10000\n", " U-238\n", " scatter-Y1,0\n", - " -0.000059\n", - " 0.002804\n", + " -5.87e-05\n", + " 2.80e-03\n", " \n", " \n", " 12\n", " 10000\n", " U-238\n", " scatter-Y1,1\n", - " -0.027990\n", - " 0.002536\n", + " -2.80e-02\n", + " 2.54e-03\n", " \n", " \n", " 13\n", " 10000\n", " U-238\n", " scatter-Y2,-2\n", - " -0.004861\n", - " 0.001575\n", + " -4.86e-03\n", + " 1.58e-03\n", " \n", " \n", " 14\n", " 10000\n", " U-238\n", " scatter-Y2,-1\n", - " 0.000557\n", - " 0.002018\n", + " 5.57e-04\n", + " 2.02e-03\n", " \n", " \n", " 15\n", " 10000\n", " U-238\n", " scatter-Y2,0\n", - " 0.006236\n", - " 0.001627\n", + " 6.24e-03\n", + " 1.63e-03\n", " \n", " \n", " 16\n", " 10000\n", " U-238\n", " scatter-Y2,1\n", - " -0.000648\n", - " 0.001551\n", + " -6.48e-04\n", + " 1.55e-03\n", " \n", " \n", " 17\n", " 10000\n", " U-238\n", " scatter-Y2,2\n", - " -0.001031\n", - " 0.001310\n", + " -1.03e-03\n", + " 1.31e-03\n", " \n", " \n", "\n", @@ -1381,24 +1385,24 @@ ], "text/plain": [ " cell nuclide score mean std. dev.\n", - "0 10000 U-235 scatter-Y0,0 0.037095 0.001150\n", - "1 10000 U-235 scatter-Y1,-1 0.000266 0.000323\n", - "2 10000 U-235 scatter-Y1,0 -0.000417 0.000274\n", - "3 10000 U-235 scatter-Y1,1 -0.000228 0.000237\n", - "4 10000 U-235 scatter-Y2,-2 0.000026 0.000199\n", - "5 10000 U-235 scatter-Y2,-1 -0.000115 0.000185\n", - "6 10000 U-235 scatter-Y2,0 0.000151 0.000159\n", - "7 10000 U-235 scatter-Y2,1 -0.000122 0.000280\n", - "8 10000 U-235 scatter-Y2,2 0.000008 0.000181\n", - "9 10000 U-238 scatter-Y0,0 2.328632 0.013107\n", - "10 10000 U-238 scatter-Y1,-1 0.024530 0.002272\n", - "11 10000 U-238 scatter-Y1,0 -0.000059 0.002804\n", - "12 10000 U-238 scatter-Y1,1 -0.027990 0.002536\n", - "13 10000 U-238 scatter-Y2,-2 -0.004861 0.001575\n", - "14 10000 U-238 scatter-Y2,-1 0.000557 0.002018\n", - "15 10000 U-238 scatter-Y2,0 0.006236 0.001627\n", - "16 10000 U-238 scatter-Y2,1 -0.000648 0.001551\n", - "17 10000 U-238 scatter-Y2,2 -0.001031 0.001310" + "0 10000 U-235 scatter-Y0,0 3.71e-02 1.15e-03\n", + "1 10000 U-235 scatter-Y1,-1 2.66e-04 3.23e-04\n", + "2 10000 U-235 scatter-Y1,0 -4.17e-04 2.74e-04\n", + "3 10000 U-235 scatter-Y1,1 -2.28e-04 2.37e-04\n", + "4 10000 U-235 scatter-Y2,-2 2.57e-05 1.99e-04\n", + "5 10000 U-235 scatter-Y2,-1 -1.15e-04 1.85e-04\n", + "6 10000 U-235 scatter-Y2,0 1.51e-04 1.59e-04\n", + "7 10000 U-235 scatter-Y2,1 -1.22e-04 2.80e-04\n", + "8 10000 U-235 scatter-Y2,2 7.65e-06 1.81e-04\n", + "9 10000 U-238 scatter-Y0,0 2.33e+00 1.31e-02\n", + "10 10000 U-238 scatter-Y1,-1 2.45e-02 2.27e-03\n", + "11 10000 U-238 scatter-Y1,0 -5.87e-05 2.80e-03\n", + "12 10000 U-238 scatter-Y1,1 -2.80e-02 2.54e-03\n", + "13 10000 U-238 scatter-Y2,-2 -4.86e-03 1.58e-03\n", + "14 10000 U-238 scatter-Y2,-1 5.57e-04 2.02e-03\n", + "15 10000 U-238 scatter-Y2,0 6.24e-03 1.63e-03\n", + "16 10000 U-238 scatter-Y2,1 -6.48e-04 1.55e-03\n", + "17 10000 U-238 scatter-Y2,2 -1.03e-03 1.31e-03" ] }, "execution_count": 29, @@ -1546,168 +1550,168 @@ " 558\n", " 279\n", " absorption\n", - " 0.000093\n", - " 0.000013\n", + " 9.27e-05\n", + " 1.33e-05\n", " \n", " \n", " 559\n", " 279\n", " scatter\n", - " 0.013504\n", - " 0.000805\n", + " 1.35e-02\n", + " 8.05e-04\n", " \n", " \n", " 560\n", " 280\n", " absorption\n", - " 0.000084\n", - " 0.000010\n", + " 8.41e-05\n", + " 9.92e-06\n", " \n", " \n", " 561\n", " 280\n", " scatter\n", - " 0.014215\n", - " 0.000612\n", + " 1.42e-02\n", + " 6.12e-04\n", " \n", " \n", " 562\n", " 281\n", " absorption\n", - " 0.000091\n", - " 0.000008\n", + " 9.12e-05\n", + " 8.26e-06\n", " \n", " \n", " 563\n", " 281\n", " scatter\n", - " 0.014545\n", - " 0.000590\n", + " 1.45e-02\n", + " 5.90e-04\n", " \n", " \n", " 564\n", " 282\n", " absorption\n", - " 0.000112\n", - " 0.000012\n", + " 1.12e-04\n", + " 1.24e-05\n", " \n", " \n", " 565\n", " 282\n", " scatter\n", - " 0.016321\n", - " 0.000729\n", + " 1.63e-02\n", + " 7.29e-04\n", " \n", " \n", " 566\n", " 283\n", " absorption\n", - " 0.000092\n", - " 0.000007\n", + " 9.18e-05\n", + " 7.12e-06\n", " \n", " \n", " 567\n", " 283\n", " scatter\n", - " 0.016163\n", - " 0.000661\n", + " 1.62e-02\n", + " 6.61e-04\n", " \n", " \n", " 568\n", " 284\n", " absorption\n", - " 0.000104\n", - " 0.000011\n", + " 1.04e-04\n", + " 1.10e-05\n", " \n", " \n", " 569\n", " 284\n", " scatter\n", - " 0.017384\n", - " 0.000599\n", + " 1.74e-02\n", + " 5.99e-04\n", " \n", " \n", " 570\n", " 285\n", " absorption\n", - " 0.000111\n", - " 0.000011\n", + " 1.11e-04\n", + " 1.14e-05\n", " \n", " \n", " 571\n", " 285\n", " scatter\n", - " 0.018015\n", - " 0.000774\n", + " 1.80e-02\n", + " 7.74e-04\n", " \n", " \n", " 572\n", " 286\n", " absorption\n", - " 0.000125\n", - " 0.000012\n", + " 1.25e-04\n", + " 1.20e-05\n", " \n", " \n", " 573\n", " 286\n", " scatter\n", - " 0.018294\n", - " 0.000828\n", + " 1.83e-02\n", + " 8.28e-04\n", " \n", " \n", " 574\n", " 287\n", " absorption\n", - " 0.000119\n", - " 0.000013\n", + " 1.19e-04\n", + " 1.30e-05\n", " \n", " \n", " 575\n", " 287\n", " scatter\n", - " 0.017483\n", - " 0.000757\n", + " 1.75e-02\n", + " 7.57e-04\n", " \n", " \n", " 576\n", " 288\n", " absorption\n", - " 0.000113\n", - " 0.000014\n", + " 1.13e-04\n", + " 1.40e-05\n", " \n", " \n", " 577\n", " 288\n", " scatter\n", - " 0.018248\n", - " 0.000782\n", + " 1.82e-02\n", + " 7.82e-04\n", " \n", " \n", "\n", "" ], "text/plain": [ - " distribcell score mean std. dev.\n", - "558 279 absorption 0.000093 0.000013\n", - "559 279 scatter 0.013504 0.000805\n", - "560 280 absorption 0.000084 0.000010\n", - "561 280 scatter 0.014215 0.000612\n", - "562 281 absorption 0.000091 0.000008\n", - "563 281 scatter 0.014545 0.000590\n", - "564 282 absorption 0.000112 0.000012\n", - "565 282 scatter 0.016321 0.000729\n", - "566 283 absorption 0.000092 0.000007\n", - "567 283 scatter 0.016163 0.000661\n", - "568 284 absorption 0.000104 0.000011\n", - "569 284 scatter 0.017384 0.000599\n", - "570 285 absorption 0.000111 0.000011\n", - "571 285 scatter 0.018015 0.000774\n", - "572 286 absorption 0.000125 0.000012\n", - "573 286 scatter 0.018294 0.000828\n", - "574 287 absorption 0.000119 0.000013\n", - "575 287 scatter 0.017483 0.000757\n", - "576 288 absorption 0.000113 0.000014\n", - "577 288 scatter 0.018248 0.000782" + " distribcell score mean std. dev.\n", + "558 279 absorption 9.27e-05 1.33e-05\n", + "559 279 scatter 1.35e-02 8.05e-04\n", + "560 280 absorption 8.41e-05 9.92e-06\n", + "561 280 scatter 1.42e-02 6.12e-04\n", + "562 281 absorption 9.12e-05 8.26e-06\n", + "563 281 scatter 1.45e-02 5.90e-04\n", + "564 282 absorption 1.12e-04 1.24e-05\n", + "565 282 scatter 1.63e-02 7.29e-04\n", + "566 283 absorption 9.18e-05 7.12e-06\n", + "567 283 scatter 1.62e-02 6.61e-04\n", + "568 284 absorption 1.04e-04 1.10e-05\n", + "569 284 scatter 1.74e-02 5.99e-04\n", + "570 285 absorption 1.11e-04 1.14e-05\n", + "571 285 scatter 1.80e-02 7.74e-04\n", + "572 286 absorption 1.25e-04 1.20e-05\n", + "573 286 scatter 1.83e-02 8.28e-04\n", + "574 287 absorption 1.19e-04 1.30e-05\n", + "575 287 scatter 1.75e-02 7.57e-04\n", + "576 288 absorption 1.13e-04 1.40e-05\n", + "577 288 scatter 1.82e-02 7.82e-04" ] }, "execution_count": 33, @@ -1772,8 +1776,8 @@ " 10000\n", " 0\n", " absorption\n", - " 0.000123\n", - " 0.000012\n", + " 1.23e-04\n", + " 1.19e-05\n", " \n", " \n", " 1 \n", @@ -1787,8 +1791,8 @@ " 10000\n", " 0\n", " scatter\n", - " 0.017805\n", - " 0.000808\n", + " 1.78e-02\n", + " 8.08e-04\n", " \n", " \n", " 2 \n", @@ -1802,8 +1806,8 @@ " 10000\n", " 1\n", " absorption\n", - " 0.000217\n", - " 0.000020\n", + " 2.17e-04\n", + " 1.96e-05\n", " \n", " \n", " 3 \n", @@ -1817,8 +1821,8 @@ " 10000\n", " 1\n", " scatter\n", - " 0.028867\n", - " 0.001263\n", + " 2.89e-02\n", + " 1.26e-03\n", " \n", " \n", " 4 \n", @@ -1832,8 +1836,8 @@ " 10000\n", " 2\n", " absorption\n", - " 0.000318\n", - " 0.000020\n", + " 3.18e-04\n", + " 2.03e-05\n", " \n", " \n", " 5 \n", @@ -1847,8 +1851,8 @@ " 10000\n", " 2\n", " scatter\n", - " 0.040493\n", - " 0.001269\n", + " 4.05e-02\n", + " 1.27e-03\n", " \n", " \n", " 6 \n", @@ -1862,8 +1866,8 @@ " 10000\n", " 3\n", " absorption\n", - " 0.000386\n", - " 0.000018\n", + " 3.86e-04\n", + " 1.80e-05\n", " \n", " \n", " 7 \n", @@ -1877,8 +1881,8 @@ " 10000\n", " 3\n", " scatter\n", - " 0.048576\n", - " 0.001337\n", + " 4.86e-02\n", + " 1.34e-03\n", " \n", " \n", " 8 \n", @@ -1892,8 +1896,8 @@ " 10000\n", " 4\n", " absorption\n", - " 0.000501\n", - " 0.000026\n", + " 5.01e-04\n", + " 2.60e-05\n", " \n", " \n", " 9 \n", @@ -1907,8 +1911,8 @@ " 10000\n", " 4\n", " scatter\n", - " 0.057063\n", - " 0.001715\n", + " 5.71e-02\n", + " 1.72e-03\n", " \n", " \n", " 10\n", @@ -1922,8 +1926,8 @@ " 10000\n", " 5\n", " absorption\n", - " 0.000484\n", - " 0.000026\n", + " 4.84e-04\n", + " 2.58e-05\n", " \n", " \n", " 11\n", @@ -1937,8 +1941,8 @@ " 10000\n", " 5\n", " scatter\n", - " 0.060822\n", - " 0.001581\n", + " 6.08e-02\n", + " 1.58e-03\n", " \n", " \n", " 12\n", @@ -1952,8 +1956,8 @@ " 10000\n", " 6\n", " absorption\n", - " 0.000532\n", - " 0.000039\n", + " 5.32e-04\n", + " 3.90e-05\n", " \n", " \n", " 13\n", @@ -1967,8 +1971,8 @@ " 10000\n", " 6\n", " scatter\n", - " 0.069101\n", - " 0.002249\n", + " 6.91e-02\n", + " 2.25e-03\n", " \n", " \n", " 14\n", @@ -1982,8 +1986,8 @@ " 10000\n", " 7\n", " absorption\n", - " 0.000577\n", - " 0.000039\n", + " 5.77e-04\n", + " 3.92e-05\n", " \n", " \n", " 15\n", @@ -1997,8 +2001,8 @@ " 10000\n", " 7\n", " scatter\n", - " 0.076722\n", - " 0.002335\n", + " 7.67e-02\n", + " 2.34e-03\n", " \n", " \n", " 16\n", @@ -2012,8 +2016,8 @@ " 10000\n", " 8\n", " absorption\n", - " 0.000649\n", - " 0.000039\n", + " 6.49e-04\n", + " 3.90e-05\n", " \n", " \n", " 17\n", @@ -2027,8 +2031,8 @@ " 10000\n", " 8\n", " scatter\n", - " 0.081564\n", - " 0.001610\n", + " 8.16e-02\n", + " 1.61e-03\n", " \n", " \n", " 18\n", @@ -2042,8 +2046,8 @@ " 10000\n", " 9\n", " absorption\n", - " 0.000680\n", - " 0.000032\n", + " 6.80e-04\n", + " 3.17e-05\n", " \n", " \n", " 19\n", @@ -2057,8 +2061,8 @@ " 10000\n", " 9\n", " scatter\n", - " 0.087715\n", - " 0.001959\n", + " 8.77e-02\n", + " 1.96e-03\n", " \n", " \n", "\n", @@ -2131,27 +2135,27 @@ "18 10002 10000 9 absorption \n", "19 10002 10000 9 scatter \n", "\n", - " mean std. dev. \n", - "0 0.000123 0.000012 \n", - "1 0.017805 0.000808 \n", - "2 0.000217 0.000020 \n", - "3 0.028867 0.001263 \n", - "4 0.000318 0.000020 \n", - "5 0.040493 0.001269 \n", - "6 0.000386 0.000018 \n", - "7 0.048576 0.001337 \n", - "8 0.000501 0.000026 \n", - "9 0.057063 0.001715 \n", - "10 0.000484 0.000026 \n", - "11 0.060822 0.001581 \n", - "12 0.000532 0.000039 \n", - "13 0.069101 0.002249 \n", - "14 0.000577 0.000039 \n", - "15 0.076722 0.002335 \n", - "16 0.000649 0.000039 \n", - "17 0.081564 0.001610 \n", - "18 0.000680 0.000032 \n", - "19 0.087715 0.001959 " + " mean std. dev. \n", + "0 1.23e-04 1.19e-05 \n", + "1 1.78e-02 8.08e-04 \n", + "2 2.17e-04 1.96e-05 \n", + "3 2.89e-02 1.26e-03 \n", + "4 3.18e-04 2.03e-05 \n", + "5 4.05e-02 1.27e-03 \n", + "6 3.86e-04 1.80e-05 \n", + "7 4.86e-02 1.34e-03 \n", + "8 5.01e-04 2.60e-05 \n", + "9 5.71e-02 1.72e-03 \n", + "10 4.84e-04 2.58e-05 \n", + "11 6.08e-02 1.58e-03 \n", + "12 5.32e-04 3.90e-05 \n", + "13 6.91e-02 2.25e-03 \n", + "14 5.77e-04 3.92e-05 \n", + "15 7.67e-02 2.34e-03 \n", + "16 6.49e-04 3.90e-05 \n", + "17 8.16e-02 1.61e-03 \n", + "18 6.80e-04 3.17e-05 \n", + "19 8.77e-02 1.96e-03 " ] }, "execution_count": 34, @@ -2189,58 +2193,58 @@ " \n", " \n", " count\n", - " 289.000000\n", - " 289.000000\n", + " 2.89e+02\n", + " 2.89e+02\n", " \n", " \n", " mean\n", - " 0.000418\n", - " 0.000022\n", + " 4.18e-04\n", + " 2.17e-05\n", " \n", " \n", " std\n", - " 0.000239\n", - " 0.000009\n", + " 2.39e-04\n", + " 8.82e-06\n", " \n", " \n", " min\n", - " 0.000018\n", - " 0.000004\n", + " 1.81e-05\n", + " 3.82e-06\n", " \n", " \n", " 25%\n", - " 0.000202\n", - " 0.000015\n", + " 2.02e-04\n", + " 1.49e-05\n", " \n", " \n", " 50%\n", - " 0.000402\n", - " 0.000021\n", + " 4.02e-04\n", + " 2.11e-05\n", " \n", " \n", " 75%\n", - " 0.000615\n", - " 0.000027\n", + " 6.15e-04\n", + " 2.67e-05\n", " \n", " \n", " max\n", - " 0.000892\n", - " 0.000044\n", + " 8.92e-04\n", + " 4.43e-05\n", " \n", " \n", "\n", "" ], "text/plain": [ - " mean std. dev.\n", - "count 289.000000 289.000000\n", - "mean 0.000418 0.000022\n", - "std 0.000239 0.000009\n", - "min 0.000018 0.000004\n", - "25% 0.000202 0.000015\n", - "50% 0.000402 0.000021\n", - "75% 0.000615 0.000027\n", - "max 0.000892 0.000044" + " mean std. dev.\n", + "count 2.89e+02 2.89e+02\n", + "mean 4.18e-04 2.17e-05\n", + "std 2.39e-04 8.82e-06\n", + "min 1.81e-05 3.82e-06\n", + "25% 2.02e-04 1.49e-05\n", + "50% 4.02e-04 2.11e-05\n", + "75% 6.15e-04 2.67e-05\n", + "max 8.92e-04 4.43e-05" ] }, "execution_count": 35, @@ -2359,7 +2363,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 38, @@ -2370,7 +2374,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2397,7 +2401,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 39, @@ -2408,7 +2412,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2423,15 +2427,6 @@ "pylab.xlabel('Mean')\n", "pylab.legend(['KDE', 'Histogram'])" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index 5c77dcf9cd..e357e73fcd 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -366,7 +366,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ACBxMQBoBGcLYAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDItMDdUMTQ6MTY6\nMDYtMDU6MDCStPm5AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAyLTA3VDE0OjE2OjA2LTA1OjAw\n4+lBBQAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ACBxUFD8qiUrQAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDItMDdUMTY6MDU6\nMTUtMDU6MDAlEzIyAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAyLTA3VDE2OjA1OjE1LTA1OjAw\nVE6KjgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -577,7 +577,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", " Git SHA1: 34381b40a9445a727e360873aaa6ef892af1cb6a\n", - " Date/Time: 2016-02-07 14:16:08\n", + " Date/Time: 2016-02-07 16:05:17\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -634,20 +634,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.0900E-01 seconds\n", - " Reading cross sections = 1.0100E-01 seconds\n", - " Total time in simulation = 7.8100E+00 seconds\n", - " Time in transport only = 7.7980E+00 seconds\n", - " Time in inactive batches = 1.3850E+00 seconds\n", - " Time in active batches = 6.4250E+00 seconds\n", - " Time synchronizing fission bank = 1.0000E-03 seconds\n", - " Sampling source sites = 0.0000E+00 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Total time for initialization = 3.4700E-01 seconds\n", + " Reading cross sections = 9.1000E-02 seconds\n", + " Total time in simulation = 7.3920E+00 seconds\n", + " Time in transport only = 7.3820E+00 seconds\n", + " Time in inactive batches = 1.0930E+00 seconds\n", + " Time in active batches = 6.2990E+00 seconds\n", + " Time synchronizing fission bank = 2.0000E-03 seconds\n", + " Sampling source sites = 1.0000E-03 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 1.0000E-03 seconds\n", - " Total time elapsed = 8.2360E+00 seconds\n", - " Calculation Rate (inactive) = 9025.27 neutrons/second\n", - " Calculation Rate (active) = 5836.58 neutrons/second\n", + " Total time for finalization = 2.0000E-03 seconds\n", + " Total time elapsed = 7.7510E+00 seconds\n", + " Calculation Rate (inactive) = 11436.4 neutrons/second\n", + " Calculation Rate (active) = 5953.33 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -769,8 +769,8 @@ "" ], "text/plain": [ - " nuclide score mean std. dev.\n", - "0 total (nu-fission / absorption) 1.040166 0.009069" + " nuclide score mean std. dev.\n", + "0 total (nu-fission / absorption) 1.04e+00 9.07e-03" ] }, "execution_count": 26, @@ -821,8 +821,8 @@ " \n", " \n", " 0\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0\n", + " 0.000001\n", " total\n", " absorption\n", " 0.694707\n", @@ -833,8 +833,8 @@ "" ], "text/plain": [ - " energy low [MeV] energy high [MeV] nuclide score mean std. dev.\n", - "0 0.00e+00 6.25e-07 total absorption 0.694707 0.006699" + " energy low [MeV] energy high [MeV] nuclide score mean std. dev.\n", + "0 0.00e+00 6.25e-07 total absorption 6.95e-01 6.70e-03" ] }, "execution_count": 27, @@ -883,8 +883,8 @@ " \n", " \n", " 0\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0\n", + " 0.000001\n", " total\n", " nu-fission\n", " 1.201216\n", @@ -895,8 +895,8 @@ "" ], "text/plain": [ - " energy low [MeV] energy high [MeV] nuclide score mean std. dev.\n", - "0 0.00e+00 6.25e-07 total nu-fission 1.201216 0.012288" + " energy low [MeV] energy high [MeV] nuclide score mean std. dev.\n", + "0 0.00e+00 6.25e-07 total nu-fission 1.20e+00 1.23e-02" ] }, "execution_count": 28, @@ -947,8 +947,8 @@ " \n", " \n", " 0\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0\n", + " 0.000001\n", " 10000\n", " total\n", " absorption\n", @@ -960,11 +960,11 @@ "" ], "text/plain": [ - " energy low [MeV] energy high [MeV] cell nuclide score mean \\\n", - "0 0.00e+00 6.25e-07 10000 total absorption 0.74925 \n", + " energy low [MeV] energy high [MeV] cell nuclide score mean \\\n", + "0 0.00e+00 6.25e-07 10000 total absorption 7.49e-01 \n", "\n", " std. dev. \n", - "0 0.008257 " + "0 8.26e-03 " ] }, "execution_count": 29, @@ -1013,8 +1013,8 @@ " \n", " \n", " 0\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0\n", + " 0.000001\n", " 10000\n", " total\n", " (nu-fission / absorption)\n", @@ -1026,11 +1026,11 @@ "" ], "text/plain": [ - " energy low [MeV] energy high [MeV] cell nuclide \\\n", - "0 0.00e+00 6.25e-07 10000 total \n", + " energy low [MeV] energy high [MeV] cell nuclide \\\n", + "0 0.00e+00 6.25e-07 10000 total \n", "\n", - " score mean std. dev. \n", - "0 (nu-fission / absorption) 1.663616 0.018624 " + " score mean std. dev. \n", + "0 (nu-fission / absorption) 1.66e+00 1.86e-02 " ] }, "execution_count": 30, @@ -1078,8 +1078,8 @@ " \n", " \n", " 0\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0\n", + " 0.000001\n", " 10000\n", " total\n", " (((absorption * nu-fission) * absorption) * (n...\n", @@ -1091,11 +1091,11 @@ "" ], "text/plain": [ - " energy low [MeV] energy high [MeV] cell nuclide \\\n", - "0 0.00e+00 6.25e-07 10000 total \n", + " energy low [MeV] energy high [MeV] cell nuclide \\\n", + "0 0.00e+00 6.25e-07 10000 total \n", "\n", - " score mean std. dev. \n", - "0 (((absorption * nu-fission) * absorption) * (n... 1.040166 0.021928 " + " score mean std. dev. \n", + "0 (((absorption * nu-fission) * absorption) * (n... 1.04e+00 2.19e-02 " ] }, "execution_count": 31, @@ -1161,8 +1161,8 @@ " \n", " 0\n", " 10000\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.000000\n", + " 0.000001\n", " (U-238 / total)\n", " (nu-fission / flux)\n", " 0.000001\n", @@ -1171,8 +1171,8 @@ " \n", " 1\n", " 10000\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.000000\n", + " 0.000001\n", " (U-238 / total)\n", " (scatter / flux)\n", " 0.209989\n", @@ -1181,8 +1181,8 @@ " \n", " 2\n", " 10000\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.000000\n", + " 0.000001\n", " (U-235 / total)\n", " (nu-fission / flux)\n", " 0.356420\n", @@ -1191,8 +1191,8 @@ " \n", " 3\n", " 10000\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.000000\n", + " 0.000001\n", " (U-235 / total)\n", " (scatter / flux)\n", " 0.005555\n", @@ -1201,8 +1201,8 @@ " \n", " 4\n", " 10000\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 0.000001\n", + " 20.000000\n", " (U-238 / total)\n", " (nu-fission / flux)\n", " 0.007155\n", @@ -1211,8 +1211,8 @@ " \n", " 5\n", " 10000\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 0.000001\n", + " 20.000000\n", " (U-238 / total)\n", " (scatter / flux)\n", " 0.227770\n", @@ -1221,8 +1221,8 @@ " \n", " 6\n", " 10000\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 0.000001\n", + " 20.000000\n", " (U-235 / total)\n", " (nu-fission / flux)\n", " 0.008067\n", @@ -1231,8 +1231,8 @@ " \n", " 7\n", " 10000\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 0.000001\n", + " 20.000000\n", " (U-235 / total)\n", " (scatter / flux)\n", " 0.003367\n", @@ -1243,25 +1243,25 @@ "" ], "text/plain": [ - " cell energy low [MeV] energy high [MeV] nuclide \\\n", - "0 10000 0.00e+00 6.25e-07 (U-238 / total) \n", - "1 10000 0.00e+00 6.25e-07 (U-238 / total) \n", - "2 10000 0.00e+00 6.25e-07 (U-235 / total) \n", - "3 10000 0.00e+00 6.25e-07 (U-235 / total) \n", - "4 10000 6.25e-07 2.00e+01 (U-238 / total) \n", - "5 10000 6.25e-07 2.00e+01 (U-238 / total) \n", - "6 10000 6.25e-07 2.00e+01 (U-235 / total) \n", - "7 10000 6.25e-07 2.00e+01 (U-235 / total) \n", + " cell energy low [MeV] energy high [MeV] nuclide \\\n", + "0 10000 0.00e+00 6.25e-07 (U-238 / total) \n", + "1 10000 0.00e+00 6.25e-07 (U-238 / total) \n", + "2 10000 0.00e+00 6.25e-07 (U-235 / total) \n", + "3 10000 0.00e+00 6.25e-07 (U-235 / total) \n", + "4 10000 6.25e-07 2.00e+01 (U-238 / total) \n", + "5 10000 6.25e-07 2.00e+01 (U-238 / total) \n", + "6 10000 6.25e-07 2.00e+01 (U-235 / total) \n", + "7 10000 6.25e-07 2.00e+01 (U-235 / total) \n", "\n", - " score mean std. dev. \n", - "0 (nu-fission / flux) 0.000001 7.377419e-09 \n", - "1 (scatter / flux) 0.209989 2.303838e-03 \n", - "2 (nu-fission / flux) 0.356420 3.951669e-03 \n", - "3 (scatter / flux) 0.005555 6.101004e-05 \n", - "4 (nu-fission / flux) 0.007155 8.053460e-05 \n", - "5 (scatter / flux) 0.227770 1.079289e-03 \n", - "6 (nu-fission / flux) 0.008067 5.254797e-05 \n", - "7 (scatter / flux) 0.003367 1.647058e-05 " + " score mean std. dev. \n", + "0 (nu-fission / flux) 6.66e-07 7.38e-09 \n", + "1 (scatter / flux) 2.10e-01 2.30e-03 \n", + "2 (nu-fission / flux) 3.56e-01 3.95e-03 \n", + "3 (scatter / flux) 5.56e-03 6.10e-05 \n", + "4 (nu-fission / flux) 7.15e-03 8.05e-05 \n", + "5 (scatter / flux) 2.28e-01 1.08e-03 \n", + "6 (nu-fission / flux) 8.07e-03 5.25e-05 \n", + "7 (scatter / flux) 3.37e-03 1.65e-05 " ] }, "execution_count": 33, @@ -1396,8 +1396,8 @@ " \n", " 0\n", " 10000\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.000000\n", + " 0.000001\n", " U-238\n", " nu-fission\n", " 0.000002\n", @@ -1406,8 +1406,8 @@ " \n", " 1\n", " 10000\n", - " 0.00e+00\n", - " 6.25e-07\n", + " 0.000000\n", + " 0.000001\n", " U-235\n", " nu-fission\n", " 0.868553\n", @@ -1416,8 +1416,8 @@ " \n", " 2\n", " 10000\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 0.000001\n", + " 20.000000\n", " U-238\n", " nu-fission\n", " 0.082149\n", @@ -1426,8 +1426,8 @@ " \n", " 3\n", " 10000\n", - " 6.25e-07\n", - " 2.00e+01\n", + " 0.000001\n", + " 20.000000\n", " U-235\n", " nu-fission\n", " 0.092618\n", @@ -1438,17 +1438,17 @@ "" ], "text/plain": [ - " cell energy low [MeV] energy high [MeV] nuclide score mean \\\n", - "0 10000 0.00e+00 6.25e-07 U-238 nu-fission 0.000002 \n", - "1 10000 0.00e+00 6.25e-07 U-235 nu-fission 0.868553 \n", - "2 10000 6.25e-07 2.00e+01 U-238 nu-fission 0.082149 \n", - "3 10000 6.25e-07 2.00e+01 U-235 nu-fission 0.092618 \n", + " cell energy low [MeV] energy high [MeV] nuclide score mean \\\n", + "0 10000 0.00e+00 6.25e-07 U-238 nu-fission 1.62e-06 \n", + "1 10000 0.00e+00 6.25e-07 U-235 nu-fission 8.69e-01 \n", + "2 10000 6.25e-07 2.00e+01 U-238 nu-fission 8.21e-02 \n", + "3 10000 6.25e-07 2.00e+01 U-235 nu-fission 9.26e-02 \n", "\n", - " std. dev. \n", - "0 1.283958e-08 \n", - "1 6.880390e-03 \n", - "2 8.837250e-04 \n", - "3 5.195308e-04 " + " std. dev. \n", + "0 1.28e-08 \n", + "1 6.88e-03 \n", + "2 8.84e-04 \n", + "3 5.20e-04 " ] }, "execution_count": 37, @@ -1490,8 +1490,8 @@ " \n", " 0\n", " 10002\n", - " 1.00e-08\n", - " 1.08e-07\n", + " 1.000000e-08\n", + " 0.000000\n", " H-1\n", " scatter\n", " 4.619398\n", @@ -1500,8 +1500,8 @@ " \n", " 1\n", " 10002\n", - " 1.08e-07\n", - " 1.17e-06\n", + " 1.080060e-07\n", + " 0.000001\n", " H-1\n", " scatter\n", " 2.030757\n", @@ -1510,8 +1510,8 @@ " \n", " 2\n", " 10002\n", - " 1.17e-06\n", - " 1.26e-05\n", + " 1.166529e-06\n", + " 0.000013\n", " H-1\n", " scatter\n", " 1.658488\n", @@ -1520,8 +1520,8 @@ " \n", " 3\n", " 10002\n", - " 1.26e-05\n", - " 1.36e-04\n", + " 1.259921e-05\n", + " 0.000136\n", " H-1\n", " scatter\n", " 1.853002\n", @@ -1530,8 +1530,8 @@ " \n", " 4\n", " 10002\n", - " 1.36e-04\n", - " 1.47e-03\n", + " 1.360790e-04\n", + " 0.001470\n", " H-1\n", " scatter\n", " 2.050773\n", @@ -1540,8 +1540,8 @@ " \n", " 5\n", " 10002\n", - " 1.47e-03\n", - " 1.59e-02\n", + " 1.469734e-03\n", + " 0.015874\n", " H-1\n", " scatter\n", " 2.131759\n", @@ -1550,8 +1550,8 @@ " \n", " 6\n", " 10002\n", - " 1.59e-02\n", - " 1.71e-01\n", + " 1.587401e-02\n", + " 0.171449\n", " H-1\n", " scatter\n", " 2.213710\n", @@ -1560,8 +1560,8 @@ " \n", " 7\n", " 10002\n", - " 1.71e-01\n", - " 1.85e+00\n", + " 1.714488e-01\n", + " 1.851749\n", " H-1\n", " scatter\n", " 2.011925\n", @@ -1570,8 +1570,8 @@ " \n", " 8\n", " 10002\n", - " 1.85e+00\n", - " 2.00e+01\n", + " 1.851749e+00\n", + " 20.000000\n", " H-1\n", " scatter\n", " 0.371280\n", @@ -1582,27 +1582,27 @@ "" ], "text/plain": [ - " cell energy low [MeV] energy high [MeV] nuclide score mean \\\n", - "0 10002 1.00e-08 1.08e-07 H-1 scatter 4.619398 \n", - "1 10002 1.08e-07 1.17e-06 H-1 scatter 2.030757 \n", - "2 10002 1.17e-06 1.26e-05 H-1 scatter 1.658488 \n", - "3 10002 1.26e-05 1.36e-04 H-1 scatter 1.853002 \n", - "4 10002 1.36e-04 1.47e-03 H-1 scatter 2.050773 \n", - "5 10002 1.47e-03 1.59e-02 H-1 scatter 2.131759 \n", - "6 10002 1.59e-02 1.71e-01 H-1 scatter 2.213710 \n", - "7 10002 1.71e-01 1.85e+00 H-1 scatter 2.011925 \n", - "8 10002 1.85e+00 2.00e+01 H-1 scatter 0.371280 \n", + " cell energy low [MeV] energy high [MeV] nuclide score mean \\\n", + "0 10002 1.00e-08 1.08e-07 H-1 scatter 4.62e+00 \n", + "1 10002 1.08e-07 1.17e-06 H-1 scatter 2.03e+00 \n", + "2 10002 1.17e-06 1.26e-05 H-1 scatter 1.66e+00 \n", + "3 10002 1.26e-05 1.36e-04 H-1 scatter 1.85e+00 \n", + "4 10002 1.36e-04 1.47e-03 H-1 scatter 2.05e+00 \n", + "5 10002 1.47e-03 1.59e-02 H-1 scatter 2.13e+00 \n", + "6 10002 1.59e-02 1.71e-01 H-1 scatter 2.21e+00 \n", + "7 10002 1.71e-01 1.85e+00 H-1 scatter 2.01e+00 \n", + "8 10002 1.85e+00 2.00e+01 H-1 scatter 3.71e-01 \n", "\n", " std. dev. \n", - "0 0.040124 \n", - "1 0.011239 \n", - "2 0.009777 \n", - "3 0.007378 \n", - "4 0.012484 \n", - "5 0.007821 \n", - "6 0.015159 \n", - "7 0.009406 \n", - "8 0.003949 " + "0 4.01e-02 \n", + "1 1.12e-02 \n", + "2 9.78e-03 \n", + "3 7.38e-03 \n", + "4 1.25e-02 \n", + "5 7.82e-03 \n", + "6 1.52e-02 \n", + "7 9.41e-03 \n", + "8 3.95e-03 " ] }, "execution_count": 38, diff --git a/openmc/arithmetic.py b/openmc/arithmetic.py index f6094533a7..8574c4873e 100644 --- a/openmc/arithmetic.py +++ b/openmc/arithmetic.py @@ -430,7 +430,7 @@ class CrossFilter(object): filter_index = left_index * self.right_filter.num_bins + right_index return filter_index - def get_pandas_dataframe(self, datasize, summary=None, **kwargs): + def get_pandas_dataframe(self, datasize, summary=None): """Builds a Pandas DataFrame for the CrossFilter's bins. This method constructs a Pandas DataFrame object for the CrossFilter @@ -454,14 +454,6 @@ class CrossFilter(object): column with a geometric "path" to each distribcell instance. NOTE: This option requires the OpenCG Python package. - Keyword arguments - ----------------- - energy_fmt : None or string - If a format string is provided, energy and energyout filter bins - will be converted from floats to strings using the given format. If - None is provided, the values will be left as floats. The default is - '{:.2e}'. - Returns ------- pandas.DataFrame @@ -480,15 +472,12 @@ class CrossFilter(object): # If left and right filters are identical, do not combine bins if self.left_filter == self.right_filter: - df = self.left_filter.get_pandas_dataframe(datasize, summary, - **kwargs) + df = self.left_filter.get_pandas_dataframe(datasize, summary) # If left and right filters are different, combine their bins else: - left_df = self.left_filter.get_pandas_dataframe(datasize, summary, - **kwargs) - right_df = self.right_filter.get_pandas_dataframe(datasize, summary, - **kwargs) + left_df = self.left_filter.get_pandas_dataframe(datasize, summary) + right_df = self.right_filter.get_pandas_dataframe(datasize, summary) left_df = left_df.astype(str) right_df = right_df.astype(str) df = '(' + left_df + ' ' + self.binary_op + ' ' + right_df + ')' @@ -842,7 +831,7 @@ class AggregateFilter(object): else: return 0 - def get_pandas_dataframe(self, datasize, summary=None, **kwargs): + def get_pandas_dataframe(self, datasize, summary=None): """Builds a Pandas DataFrame for the AggregateFilter's bins. This method constructs a Pandas DataFrame object for the AggregateFilter diff --git a/openmc/filter.py b/openmc/filter.py index d6f604108c..a27e17cd96 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -462,7 +462,7 @@ class Filter(object): return filter_bin - def get_pandas_dataframe(self, data_size, summary=None, **kwargs): + def get_pandas_dataframe(self, data_size, summary=None): """Builds a Pandas DataFrame for the Filter's bins. This method constructs a Pandas DataFrame object for the filter with @@ -484,14 +484,6 @@ class Filter(object): column with a geometric "path" to each distribcell instance. NOTE: This option requires the OpenCG Python package. - Keyword arguments - ----------------- - energy_fmt : None or string - If a format string is provided, energy and energyout filter bins - will be converted from floats to strings using the given format. If - None is provided, the values will be left as floats. The default is - '{:.2e}'. - Returns ------- pandas.DataFrame @@ -735,12 +727,6 @@ class Filter(object): lo_bins = np.tile(lo_bins, tile_factor) hi_bins = np.tile(hi_bins, tile_factor) - # Format the energy values, if necessary. - energy_fmt = kwargs.setdefault('energy_fmt', '{:.2e}') - if energy_fmt is not None: - lo_bins = [energy_fmt.format(E) for E in lo_bins] - hi_bins = [energy_fmt.format(E) for E in hi_bins] - # Add the new energy columns to the DataFrame. df.loc[:, self.type + ' low [MeV]'] = lo_bins df.loc[:, self.type + ' high [MeV]'] = hi_bins diff --git a/openmc/tallies.py b/openmc/tallies.py index f98be83a2a..d1666694fe 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -2,6 +2,7 @@ from __future__ import division from collections import Iterable, defaultdict import copy +from functools import partial import os import pickle import itertools @@ -1244,7 +1245,7 @@ class Tally(object): return data def get_pandas_dataframe(self, filters=True, nuclides=True, - scores=True, summary=None, **kwargs): + scores=True, summary=None, float_format='{:.2e}'): """Build a Pandas DataFrame for the Tally data. This method constructs a Pandas DataFrame object for the Tally data @@ -1268,14 +1269,9 @@ class Tally(object): information in the Summary object is embedded into a Multi-index column with a geometric "path" to each distribcell intance. NOTE: This option requires the OpenCG Python package. - - Keyword arguments - ----------------- - energy_fmt : None or string - If a format string is provided, energy and energyout filter bins - will be converted from floats to strings using the given format. If - None is provided, the values will be left as floats. The default is - '{:.2e}'. + float_format : string + All floats in the DataFrame will be formatted using the given + format string before printing. Returns ------- @@ -1324,8 +1320,7 @@ class Tally(object): # Append each Filter's DataFrame to the overall DataFrame for self_filter in self.filters: - filter_df = self_filter.get_pandas_dataframe(data_size, summary, - **kwargs) + filter_df = self_filter.get_pandas_dataframe(data_size, summary) df = pd.concat([df, filter_df], axis=1) # Include DataFrame column for nuclides if user requested it @@ -1376,6 +1371,10 @@ class Tally(object): # Create and set a MultiIndex for the DataFrame's columns df.columns = pd.MultiIndex.from_tuples(columns) + # Modify the df.to_string method so that it prints formatted strings. + # Credit to http://stackoverflow.com/users/3657742/chrisb for this trick + df.to_string = partial(df.to_string, float_format=float_format.format) + return df def get_reshaped_data(self, value='mean'): From 184ed3733b2e81463b1f83aaa98b81ce0229f3a3 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Mon, 8 Feb 2016 00:36:49 -0500 Subject: [PATCH 277/650] Fixed bugs in pandas dataframe construction for AggregateFilter --- openmc/arithmetic.py | 120 +++++++++++++++--- openmc/filter.py | 34 +++-- openmc/mgxs/mgxs.py | 1 - openmc/tallies.py | 34 ++--- .../results_true.dat | 8 +- 5 files changed, 146 insertions(+), 51 deletions(-) diff --git a/openmc/arithmetic.py b/openmc/arithmetic.py index f6f701d095..13f300968a 100644 --- a/openmc/arithmetic.py +++ b/openmc/arithmetic.py @@ -1,5 +1,7 @@ import sys +import copy from numbers import Integral +from collections import Iterable import numpy as np @@ -430,7 +432,7 @@ class CrossFilter(object): filter_index = left_index * self.right_filter.num_bins + right_index return filter_index - def get_pandas_dataframe(self, datasize, summary=None): + def get_pandas_dataframe(self, data_size, summary=None): """Builds a Pandas DataFrame for the CrossFilter's bins. This method constructs a Pandas DataFrame object for the CrossFilter @@ -445,7 +447,7 @@ class CrossFilter(object): Parameters ---------- - datasize : Integral + data_size : Integral The total number of bins in the tally corresponding to this filter summary : None or Summary An optional Summary object to be used to construct columns for @@ -472,12 +474,12 @@ class CrossFilter(object): # If left and right filters are identical, do not combine bins if self.left_filter == self.right_filter: - df = self.left_filter.get_pandas_dataframe(datasize, summary) + df = self.left_filter.get_pandas_dataframe(data_size, summary) # If left and right filters are different, combine their bins else: - left_df = self.left_filter.get_pandas_dataframe(datasize, summary) - right_df = self.right_filter.get_pandas_dataframe(datasize, summary) + left_df = self.left_filter.get_pandas_dataframe(data_size, summary) + right_df = self.right_filter.get_pandas_dataframe(data_size, summary) left_df = left_df.astype(str) right_df = right_df.astype(str) df = '(' + left_df + ' ' + self.binary_op + ' ' + right_df + ')' @@ -713,6 +715,13 @@ class AggregateFilter(object): def __ne__(self, other): return not self == other + def __gt__(self, other): + # FIXME + return False + + def __lt__(self, other): + return not self > other + def __repr__(self): string = 'AggregateFilter\n' string += '{0: <16}{1}{2}\n'.format('\tType', '=\t', self.type) @@ -757,7 +766,7 @@ class AggregateFilter(object): @property def num_bins(self): - return 1 if self.aggregate_filter else 0 + return len(self.bins) if self.aggregate_filter else 0 @property def stride(self): @@ -779,8 +788,10 @@ class AggregateFilter(object): @bins.setter def bins(self, bins): - cv.check_iterable_type('bins', bins, (Integral, tuple)) - self._bins = bins + cv.check_iterable_type('bins', bins, Iterable) + self._bins = [] + for bin in bins: + self._bins.append(tuple(bin)) @aggregate_op.setter def aggregate_op(self, aggregate_op): @@ -825,9 +836,9 @@ class AggregateFilter(object): '"{0}" is not one of the bins'.format(filter_bin) raise ValueError(msg) else: - return 0 + return self.bins.index(filter_bin) - def get_pandas_dataframe(self, datasize, summary=None): + def get_pandas_dataframe(self, data_size, summary=None): """Builds a Pandas DataFrame for the AggregateFilter's bins. This method constructs a Pandas DataFrame object for the AggregateFilter @@ -836,7 +847,7 @@ class AggregateFilter(object): Parameters ---------- - datasize : Integral + data_size : Integral The total number of bins in the tally corresponding to this filter summary : None or Summary An optional Summary object to be used to construct columns for @@ -864,14 +875,85 @@ class AggregateFilter(object): import pandas as pd - # Construct a sring representing the filter aggregation - aggregate_bin = '{0}('.format(self.aggregate_op) - aggregate_bin += ', '.join(map(str, self.bins)) + ')' + # Create NumPy array of the bin tuples for repeating / tiling + filter_bins = np.empty(self.num_bins, dtype=tuple) + for i, bin in enumerate(self.bins): + filter_bins[i] = bin - # Construct NumPy array of bin repeated for each element in dataframe - aggregate_bin_array = np.array([aggregate_bin]) - aggregate_bin_array = np.repeat(aggregate_bin_array, datasize) + # Repeat and tile bins as needed for DataFrame + filter_bins = np.repeat(filter_bins, self.stride) + tile_factor = data_size / len(filter_bins) + filter_bins = np.tile(filter_bins, tile_factor) - # Construct Pandas DataFrame for the AggregateFilter - df = pd.DataFrame({self.type: aggregate_bin_array}) + # Create DataFrame with aggregated bins + df = pd.DataFrame({self.type: filter_bins}) return df + + def can_merge(self, other): + """Determine if AggregateFilter can be merged with another. + + Parameters + ---------- + other : AggregateFilter + Filter to compare with + + Returns + ------- + bool + Whether the filter can be merged + + """ + + if not isinstance(other, AggregateFilter): + return False + + # Filters must be of the same type + elif self.type != other.type: + return False + + # None of the bins in this filter should match in the other filter + for bin in self.bins: + if bin in other.bins: + return False + + # None of the bins in the other filter should match in this filter + for bin in other.bins: + if bin in self.bins: + return False + + # If all conditional checks passed then filters are mergeable + return True + + def merge(self, other): + """Merge this aggregatefilter with another. + + Parameters + ---------- + other : AggregateFilter + Filter to merge with + + Returns + ------- + merged_filter : AggregateFilter + Filter resulting from the merge + + """ + + if not self.can_merge(other): + msg = 'Unable to merge "{0}" with "{1}" ' \ + 'filters'.format(self.type, other.type) + raise ValueError(msg) + + # Create deep copy of filter to return as merged filter + merged_filter = copy.deepcopy(self) + + # Merge unique filter bins + merged_bins = self.bins + other.bins + + # Sort energy bin edges + if 'energy' in self.type: + merged_bins = sorted(merged_bins) + + # Assign merged bins to merged filter + merged_filter.bins = list(merged_bins) + return merged_filter \ No newline at end of file diff --git a/openmc/filter.py b/openmc/filter.py index 21797264b3..f8484ec767 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -263,11 +263,11 @@ class Filter(object): return False # Filters must be of the same type - elif self.type != other.type: + if self.type != other.type: return False # Distribcell filters cannot have more than one bin - elif self.type == 'distribcell': + if self.type == 'distribcell': return False # Mesh filters cannot have more than one bin @@ -289,6 +289,24 @@ class Filter(object): else: return True + ''' + # FIXME: Should all bins be completely separate??? + # FIMXE: This is necessary if merging will choose out unique bins + else: + # None of the bins in this filter should match in the other filter + for bin in self.bins: + if bin in other.bins: + return False + + # None of the bins in the other filter should match in this filter + for bin in other.bins: + if bin in self.bins: + return False + + # If all conditional checks pass then filters are mergeable + return True + ''' + def merge(self, other): """Merge this filter with another. @@ -313,7 +331,8 @@ class Filter(object): merged_filter = copy.deepcopy(self) # Merge unique filter bins - merged_bins = set(np.concatenate((self.bins, other.bins))) + merged_bins = np.concatenate((self.bins, other.bins)) + merged_bins = np.unique(merged_bins) # Sort energy bin edges if 'energy' in self.type: @@ -557,14 +576,8 @@ class Filter(object): """ - # Attempt to import Pandas - try: - import pandas as pd - except ImportError: - msg = 'The Pandas Python package must be installed on your system' - raise ImportError(msg) - # Initialize Pandas DataFrame + import pandas as pd df = pd.DataFrame() # mesh filters @@ -743,7 +756,6 @@ class Filter(object): filter_bins = np.repeat(filter_bins, self.stride) tile_factor = data_size / len(filter_bins) filter_bins = np.tile(filter_bins, tile_factor) - filter_bins = filter_bins df = pd.DataFrame({self.type : filter_bins}) # If OpenCG level info DataFrame was created, concatenate diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index a382c629b1..b82426e7df 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1368,7 +1368,6 @@ class MGXS(object): # Sort the dataframe by domain type id (e.g., distribcell id) and # energy groups such that data is from fast to thermal df.sort([self.domain_type] + columns, inplace=True) - return df diff --git a/openmc/tallies.py b/openmc/tallies.py index d88519ba3b..c04ee001a7 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -301,7 +301,7 @@ class Tally(object): @property def sum(self): - if not self._sp_filename: + if not self._sp_filename or self.derived: return None if not self._results_read: @@ -924,6 +924,17 @@ class Tally(object): if score not in merged_tally.scores: merged_tally.add_score(score) + # Add triggers from other tally to merged tally + for trigger in other.triggers: + merged_tally.add_trigger(trigger) + + # If results have not been read, then return tally for input generation + if self._sp_filename is None: + return merged_tally + #Otherwise, this is a derived tally which needs merged results arrays + else: + self._derived = True + # Update filter strides in merged tally merged_tally._update_filter_strides() @@ -986,10 +997,6 @@ class Tally(object): # Sparsify merged tally if both tallies are sparse merged_tally.sparse = self.sparse and other.sparse - # Add triggers from other tally to merged tally - for trigger in other.triggers: - merged_tally.add_trigger(trigger) - return merged_tally def get_tally_xml(self): @@ -1538,14 +1545,8 @@ class Tally(object): 'Summary info'.format(self.id) raise KeyError(msg) - # Attempt to import Pandas - try: - import pandas as pd - except ImportError: - msg = 'The Pandas Python package must be installed on your system' - raise ImportError(msg) - # Initialize a pandas dataframe for the tally data + import pandas as pd df = pd.DataFrame() # Find the total length of the tally data array @@ -2189,8 +2190,8 @@ class Tally(object): # 'since it does not contain any results.'.format(self.id) # raise ValueError(msg) - cv.check_type('filter1', filter1, Filter) - cv.check_type('filter2', filter2, Filter) + cv.check_type('filter1', filter1, (Filter, CrossFilter, AggregateFilter)) + cv.check_type('filter2', filter2, (Filter, CrossFilter, AggregateFilter)) # Check that the filters exist in the tally and are not the same if filter1 == filter2: @@ -2923,6 +2924,7 @@ class Tally(object): # Create deep copy of tally to return as sliced tally new_tally = copy.deepcopy(self) + new_tally._derived = True # Differentiate Tally with a new auto-generated Tally ID new_tally.id = None @@ -3094,7 +3096,7 @@ class Tally(object): # Add AggregateFilter to the tally sum if not remove_filter: filter_sum = \ - AggregateFilter(self_filter, filter_bins, 'sum') + AggregateFilter(self_filter, [tuple(filter_bins)], 'sum') tally_sum.add_filter(filter_sum) # Add a copy of each filter not summed across to the tally sum @@ -3243,7 +3245,7 @@ class Tally(object): # Add AggregateFilter to the tally avg if not remove_filter: filter_sum = \ - AggregateFilter(self_filter, filter_bins, 'avg') + AggregateFilter(self_filter, [tuple(filter_bins)], 'avg') tally_avg.add_filter(filter_sum) # Add a copy of each filter not averaged across to the tally avg diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index 4936da4cec..7b4be0f468 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,5 +1,5 @@ sum(distribcell) group in nuclide mean std. dev. -0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 total 0.720213 1.424323 sum(distribcell) group in nuclide mean std. dev. -0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 total 0 0 sum(distribcell) group in group out nuclide mean std. dev. -0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 1 total 0.70466 1.403916 sum(distribcell) group out nuclide mean std. dev. -0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 total 0 0 \ No newline at end of file +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.720213 1.424323 sum(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 sum(distribcell) group in group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.70466 1.403916 sum(distribcell) group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 \ No newline at end of file From ef60d9d2f5e22a5d23654f23906a553c52d79c81 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Mon, 8 Feb 2016 15:40:58 -0500 Subject: [PATCH 278/650] Implemented MGXS merging --- openmc/filter.py | 18 --------- openmc/mgxs/groups.py | 67 +++++++++++++++++++++++++++++++- openmc/mgxs/mgxs.py | 90 +++++++++++++++++++++++++++++++++++++++++-- openmc/tallies.py | 6 ++- 4 files changed, 157 insertions(+), 24 deletions(-) diff --git a/openmc/filter.py b/openmc/filter.py index f8484ec767..2c310bebb4 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -289,24 +289,6 @@ class Filter(object): else: return True - ''' - # FIXME: Should all bins be completely separate??? - # FIMXE: This is necessary if merging will choose out unique bins - else: - # None of the bins in this filter should match in the other filter - for bin in self.bins: - if bin in other.bins: - return False - - # None of the bins in the other filter should match in this filter - for bin in other.bins: - if bin in self.bins: - return False - - # If all conditional checks pass then filters are mergeable - return True - ''' - def merge(self, other): """Merge this filter with another. diff --git a/openmc/mgxs/groups.py b/openmc/mgxs/groups.py index 3436c0e037..16e94ee451 100644 --- a/openmc/mgxs/groups.py +++ b/openmc/mgxs/groups.py @@ -54,10 +54,12 @@ class EnergyGroups(object): def __eq__(self, other): if not isinstance(other, EnergyGroups): return False - elif self.group_edges != other.group_edges: + elif self.num_groups != other.num_groups: return False - else: + elif np.allclose(self.group_edges, other.group_edges): return True + else: + return False def __ne__(self, other): return not self == other @@ -236,3 +238,64 @@ class EnergyGroups(object): condensed_groups.group_edges = group_edges return condensed_groups + + def can_merge(self, other): + """Determine if energy groups can be merged with another. + + Parameters + ---------- + other : EnergyGroups + EnergyGroups to compare with + + Returns + ------- + bool + Whether the energy groups can be merged + + """ + + if not isinstance(other, EnergyGroups): + return False + + # If the energy group structures match then groups are mergeable + if self == other: + return True + + # This low energy edge coincides with other's high energy edge + if self.group_edges[0] == other.group_edges[-1]: + return True + # This high energy edge coincides with other's low energy edge + elif self.group_edges[-1] == other.group_edges[0]: + return True + else: + return False + + def merge(self, other): + """Merge this energy groups with another. + + Parameters + ---------- + other : EnergyGroups + EnergyGroups to merge with + + Returns + ------- + merged_groups : EnergyGroups + EnergyGroups resulting from the merge + + """ + + if not self.can_merge(other): + raise ValueError('Unable to merge energy groups') + + # Create deep copy to return as merged energy groups + merged_groups = copy.deepcopy(self) + + # Merge unique filter bins + merged_edges = np.concatenate((self.group_edges, other.group_edges)) + merged_edges = np.unique(merged_edges) + merged_edges = sorted(merged_edges) + + # Assign merged edges to merged groups + merged_groups.group_edges = list(merged_edges) + return merged_groups \ No newline at end of file diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index b82426e7df..b4c107139d 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -155,7 +155,7 @@ class MGXS(object): clone._name = self.name clone._rxn_type = self.rxn_type clone._by_nuclide = self.by_nuclide - clone._nuclides = self._nuclides + clone._nuclides = copy.deepcopy(self._nuclides) clone._domain = self.domain clone._domain_type = self.domain_type clone._energy_groups = copy.deepcopy(self.energy_groups, memo) @@ -953,9 +953,93 @@ class MGXS(object): slice_xs.sparse = self.sparse return slice_xs - # FIXME + def can_merge(self, other): + """Determine if another MGXS can be merged with this one + + If results have been loaded from a statepoint, then MGXS are only + mergeable along one and only one of enegy groups or nuclides. + + Parameters + ---------- + other : MGXS + MGXS to check for merging + + """ + + if not isinstance(other, type(self)): + return False + + # Compare reaction type, energy groups, nuclides, domain type + if self.rxn_type != other.rxn_type: + return False + elif not self.energy_groups.can_merge(other.energy_groups): + return False + elif self.by_nuclide != other.by_nuclide: + return False + elif self.domain_type != other.domain_type: + return False + elif 'distribcell' not in self.domain_type and self.domain != other.domain: + return False + elif len(self.tallies) != len(other.tallies): + return False + + # See if each individual tally is mergeable + for tally_key in self.tallies: + if not self.tallies[tally_key].can_merge(other.tallies[tally_key]): + return False + + # If all conditionals pass then MGXS are mergeable + return True + def merge(self, other): - raise NotImplementedError('not yet implemented') + """Merge another MGXS with this one + + If results have been loaded from a statepoint, then MGXS are only + mergeable along one and only one of energy groups or nuclides. + + Parameters + ---------- + other : MGXS + MGXS to merge with this one + + Returns + ------- + merged_mgxs : MGXS + Merged MGXS + + """ + + if not self.can_merge(other): + raise ValueError('Unable to merge MGXS') + + # Create deep copy of tally to return as merged tally + merged_mgxs = copy.deepcopy(self) + merged_mgxs._rxn_rate_tally = None + merged_mgxs._xs_tally = None + + # Merge energy groups + if self.energy_groups != other.energy_groups: + merged_groups = self.energy_groups.merge(other.energy_groups) + merged_mgxs.energy_groups = merged_groups + + # Merge nuclides + if self.nuclides != other.nuclides: + + # The nuclides must be mutually exclusive + for nuclide in self.nuclides: + if nuclide in other.nuclides: + msg = 'Unable to merge MGXS with shared nuclides' + raise ValueError(msg) + + # Concatenate lists of nuclides for the merged MGXS + merged_mgxs.nuclides = self.nuclides + other.nuclides + + # Merge tallies + for tally_key in self.tallies: + merged_tally = self.tallies[tally_key].merge(other.tallies[tally_key]) + merged_mgxs.tallies[tally_key] = merged_tally + + return merged_mgxs def print_xs(self, subdomains='all', nuclides='all', xs_type='macro'): """Print a string representation for the multi-group cross section. diff --git a/openmc/tallies.py b/openmc/tallies.py index c04ee001a7..6b04403329 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -859,7 +859,7 @@ class Tally(object): Parameters ---------- - tally : Tally + other : Tally Tally to merge with this one Returns @@ -880,6 +880,10 @@ class Tally(object): # Differentiate Tally with a new auto-generated Tally ID merged_tally.id = None + # If the two tallies are equal, simpy return copy + if self == other: + return merged_tally + # Create deep copy of other tally to use for array concatenation other_copy = copy.deepcopy(other) From 65825b1b4ff68acff6f01c41c0efd3942a534b15 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 8 Feb 2016 19:43:35 -0500 Subject: [PATCH 279/650] Resolving style comments from @paulromano --- .../usersguide/output/particle_restart.rst | 2 +- src/ace_header.F90 | 5 +- src/global.F90 | 2 +- src/macroxs_header.F90 | 97 ++++++-------- src/{macroxs.F90 => macroxs_operations.F90} | 62 ++++----- src/mgxs_data.F90 | 8 +- src/nuclide_header.F90 | 64 +++++---- src/particle_header.F90 | 8 +- src/physics_mg.F90 | 6 +- src/sab_header.F90 | 4 +- src/scattdata_header.F90 | 121 +++++++++--------- src/tracking.F90 | 34 ++--- 12 files changed, 194 insertions(+), 219 deletions(-) rename src/{macroxs.F90 => macroxs_operations.F90} (80%) diff --git a/docs/source/usersguide/output/particle_restart.rst b/docs/source/usersguide/output/particle_restart.rst index eeb40a526e..1ed6077108 100644 --- a/docs/source/usersguide/output/particle_restart.rst +++ b/docs/source/usersguide/output/particle_restart.rst @@ -49,7 +49,7 @@ The current revision of the particle restart file format is 2. Energy of the particle in MeV. This is always provided but only used for continuous-energy mode. -**/energy_group** (*double*) +**/energy_group** (*int*) Energy group of the particle. This is always provided but only used for multi-group mode. diff --git a/src/ace_header.F90 b/src/ace_header.F90 index 497a16d3bf..ae5000e5ab 100644 --- a/src/ace_header.F90 +++ b/src/ace_header.F90 @@ -24,9 +24,8 @@ module ace_header real(8), allocatable :: sigma(:) ! Cross section values type(SecondaryDistribution) :: secondary - ! Type-Bound procedures - contains - procedure :: clear => reaction_clear ! Deallocates Reaction + contains + procedure :: clear => reaction_clear ! Deallocates Reaction end type Reaction !=============================================================================== diff --git a/src/global.F90 b/src/global.F90 index 02f53a4f7d..17477ed80b 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -5,7 +5,7 @@ module global use constants use dict_header, only: DictCharInt, DictIntInt use geometry_header, only: Cell, Universe, Lattice, LatticeContainer - use macroxs_header, only: MacroXS_Base, MacroXSContainer + use macroxs_header, only: MacroXSContainer use material_header, only: Material use mesh_header, only: RegularMesh use nuclide_header diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index 95053789f5..0f838967ea 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -14,26 +14,24 @@ module macroxs_header ! particle is traveling through !=============================================================================== - type, abstract :: MacroXS_Base + type, abstract :: MacroXS ! Data Order integer :: order - ! Type-Bound procedures contains - procedure(macroxs_init_), deferred, pass :: init ! initializes object - procedure(macroxs_get_xs_), deferred, pass :: get_xs ! Return xs - end type MacroXS_Base + procedure(macroxs_init_), deferred :: init ! initializes object + procedure(macroxs_get_xs_), deferred :: get_xs ! Return xs + end type MacroXS abstract interface subroutine macroxs_init_(this, mat, nuclides, groups, get_kfiss, get_fiss, & max_order, scatt_type, legendre_mu_points, & error_code, error_text) - - import MacroXS_Base + import MacroXS import Material import NuclideMGContainer import MAX_LINE_LEN - class(MacroXS_Base), intent(inout) :: this ! The MacroXS to initialize + class(MacroXS), intent(inout) :: this ! The MacroXS to initialize type(Material), pointer, intent(in) :: mat ! base material type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from integer, intent(in) :: groups ! Number of E groups @@ -44,47 +42,36 @@ module macroxs_header integer, intent(in) :: legendre_mu_points ! Treat as Leg or Tabular? integer, intent(inout) :: error_code ! Code signifying error character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print - end subroutine macroxs_init_ function macroxs_get_xs_(this, g, xstype, gout, uvw) result(xs) - import MacroXS_Base - class(MacroXS_Base), intent(in) :: this ! The MacroXS to initialize + import MacroXS + class(MacroXS), intent(in) :: this ! The MacroXS to initialize integer, intent(in) :: g ! Incoming Energy group character(*) , intent(in) :: xstype ! Cross Section Type integer, optional, intent(in) :: gout ! Outgoing Energy group real(8), optional, intent(in) :: uvw(3) ! Requested Angle real(8) :: xs ! Resultant xs - end function macroxs_get_xs_ - - subroutine macroxs_clear_(this) - - import MacroXS_Base - class(MacroXS_Base), intent(inout) :: this ! The MacroXS to clear - - end subroutine macroxs_clear_ - end interface - type, extends(MacroXS_Base) :: MacroXS_Iso + type, extends(MacroXS) :: MacroXSIso ! Microscopic cross sections real(8), allocatable :: total(:) ! total cross section real(8), allocatable :: absorption(:) ! absorption cross section - class(ScattData_Base), allocatable :: scatter ! scattering information + class(ScattData), allocatable :: scatter ! scattering information real(8), allocatable :: nu_fission(:) ! nu-fission real(8), allocatable :: k_fission(:) ! kappa-fission real(8), allocatable :: fission(:) ! fission x/s real(8), allocatable :: scattxs(:) ! scattering xs real(8), allocatable :: chi(:,:) ! fission spectra - ! Type-Bound procedures contains - procedure, pass :: init => macroxs_iso_init ! inits object - procedure, pass :: get_xs => macroxs_iso_get_xs ! Returns xs - end type MacroXS_Iso + procedure :: init => macroxsiso_init ! inits object + procedure :: get_xs => macroxsiso_get_xs ! Returns xs + end type MacroXSIso - type, extends(MacroXS_Base) :: MacroXS_Angle + type, extends(MacroXS) :: MacroXSAngle ! Macroscopic cross sections real(8), allocatable :: total(:,:,:) ! total cross section real(8), allocatable :: absorption(:,:,:) ! absorption cross section @@ -97,18 +84,17 @@ module macroxs_header real(8), allocatable :: polar(:) ! polar angles real(8), allocatable :: azimuthal(:) ! azimuthal angles - ! Type-Bound procedures contains - procedure, pass :: init => macroxs_angle_init ! inits object - procedure, pass :: get_xs => macroxs_angle_get_xs ! Returns xs - end type MacroXS_Angle + procedure :: init => macroxsangle_init ! inits object + procedure :: get_xs => macroxsangle_get_xs ! Returns xs + end type MacroXSAngle !=============================================================================== ! MACROXSCONTAINER pointer array for storing MacroXS objects. !=============================================================================== type MacroXSContainer - class(MacroXS_Base), allocatable :: obj + class(MacroXS), allocatable :: obj end type MacroXSContainer contains @@ -117,10 +103,9 @@ contains ! MACROXS*_INIT sets the MacroXS Data !=============================================================================== - subroutine macroxs_iso_init(this, mat, nuclides, groups, get_kfiss, get_fiss, & + subroutine macroxsiso_init(this, mat, nuclides, groups, get_kfiss, get_fiss, & max_order, scatt_type, legendre_mu_points, error_code, error_text) - - class(MacroXS_Iso), intent(inout) :: this ! The MacroXS to initialize + class(MacroXSIso), intent(inout) :: this ! The MacroXS to initialize type(Material), pointer, intent(in) :: mat ! base material type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from integer, intent(in) :: groups ! Number of E groups @@ -135,7 +120,6 @@ contains integer :: i ! loop index over nuclides integer :: gin, gout ! group indices real(8) :: atom_density ! atom density of a nuclide - ! class(NuclideBase), pointer :: nuc ! current nuclide integer :: imu real(8) :: norm integer :: mat_max_order, order, l @@ -164,7 +148,7 @@ contains ! Allocate stuff for later allocate(scatt_coeffs(order, groups, groups)) scatt_coeffs = ZERO - allocate(ScattData_Histogram :: this % scatter) + allocate(ScattDataHistogram :: this % scatter) else if (scatt_type == ANGLE_TABULAR) then ! Check all scattering data of same size @@ -182,7 +166,7 @@ contains ! Allocate stuff for later allocate(scatt_coeffs(order, groups, groups)) scatt_coeffs = ZERO - allocate(ScattData_Tabular :: this % scatter) + allocate(ScattDataTabular :: this % scatter) else if (scatt_type == ANGLE_LEGENDRE) then ! Otherwise find the maximum scattering order @@ -203,9 +187,9 @@ contains allocate(scatt_coeffs(order + 1, groups, groups)) scatt_coeffs = ZERO if (legendre_mu_points == 1) then - allocate(ScattData_Legendre :: this % scatter) + allocate(ScattDataLegendre :: this % scatter) else - allocate(ScattData_Tabular :: this % scatter) + allocate(ScattDataTabular :: this % scatter) end if end if @@ -307,7 +291,7 @@ contains end do type is (NuclideAngle) error_code = 1 - error_text = "Invalid Passing of NuclideAngle to MacroXS_Iso Object" + error_text = "Invalid Passing of NuclideAngle to MacroXSIso Object" return end select end do @@ -360,12 +344,11 @@ contains ! Deallocate temporaries for the next material deallocate(scatt_coeffs, temp_energy, temp_mult) - end subroutine macroxs_iso_init + end subroutine macroxsiso_init - subroutine macroxs_angle_init(this, mat, nuclides, groups, get_kfiss, get_fiss, & + subroutine macroxsangle_init(this, mat, nuclides, groups, get_kfiss, get_fiss, & max_order, scatt_type, legendre_mu_points, error_code, error_text) - - class(MacroXS_Angle), intent(inout) :: this ! The MacroXS to initialize + class(MacroXSAngle), intent(inout) :: this ! The MacroXS to initialize type(Material), pointer, intent(in) :: mat ! base material type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from integer, intent(in) :: groups ! Number of E groups @@ -435,7 +418,7 @@ contains allocate(this % scatter(nazi, npol)) do ipol = 1, npol do iazi = 1, nazi - allocate(ScattData_Histogram :: this % scatter(iazi, ipol) % obj) + allocate(ScattDataHistogram :: this % scatter(iazi, ipol) % obj) end do end do @@ -458,7 +441,7 @@ contains allocate(this % scatter(nazi, npol)) do ipol = 1, npol do iazi = 1, nazi - allocate(ScattData_Tabular :: this % scatter(iazi, ipol) % obj) + allocate(ScattDataTabular :: this % scatter(iazi, ipol) % obj) end do end do @@ -484,9 +467,9 @@ contains do ipol = 1, npol do iazi = 1, nazi if (legendre_mu_points == 1) then - allocate(ScattData_Legendre :: this % scatter(iazi, ipol) % obj) + allocate(ScattDataLegendre :: this % scatter(iazi, ipol) % obj) else - allocate(ScattData_Tabular :: this % scatter(iazi, ipol) % obj) + allocate(ScattDataTabular :: this % scatter(iazi, ipol) % obj) end if end do end do @@ -524,7 +507,7 @@ contains select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (NuclideIso) error_code = 1 - error_text = "Invalid Passing of NuclideIso to MacroXS_Angle Object" + error_text = "Invalid Passing of NuclideIso to MacroXSAngle Object" return type is (NuclideAngle) ! Add contributions to total, absorption, and fission data (if necessary) @@ -652,14 +635,14 @@ contains ! Deallocate temporaries for the next material deallocate(scatt_coeffs, temp_energy, temp_mult) - end subroutine macroxs_angle_init + end subroutine macroxsangle_init !=============================================================================== ! MACROXS_*_GET_XS returns the requested data type !=============================================================================== - function macroxs_iso_get_xs(this, g, xstype, gout, uvw) result(xs) - class(MacroXS_Iso), intent(in) :: this ! The MacroXS to initialize + function macroxsiso_get_xs(this, g, xstype, gout, uvw) result(xs) + class(MacroXSIso), intent(in) :: this ! The MacroXS to initialize integer, intent(in) :: g ! Incoming Energy group character(*) , intent(in) :: xstype ! Type of xs requested integer, optional, intent(in) :: gout ! Outgoing Energy group @@ -687,10 +670,10 @@ contains end if end select - end function macroxs_iso_get_xs + end function macroxsiso_get_xs - function macroxs_angle_get_xs(this, g, xstype, gout,uvw) result(xs) - class(MacroXS_Angle), intent(in) :: this ! The MacroXS to initialize + function macroxsangle_get_xs(this, g, xstype, gout,uvw) result(xs) + class(MacroXSAngle), intent(in) :: this ! The MacroXS to initialize integer, intent(in) :: g ! Incoming Energy group character(*) , intent(in) :: xstype ! Type of xs requested integer, optional, intent(in) :: gout ! Outgoing Energy group @@ -723,6 +706,6 @@ contains end select end if - end function macroxs_angle_get_xs + end function macroxsangle_get_xs end module macroxs_header diff --git a/src/macroxs.F90 b/src/macroxs_operations.F90 similarity index 80% rename from src/macroxs.F90 rename to src/macroxs_operations.F90 index 170f5fb19a..4fc13910ca 100644 --- a/src/macroxs.F90 +++ b/src/macroxs_operations.F90 @@ -1,7 +1,7 @@ -module macroxs +module macroxs_operations use constants - use macroxs_header, only: MacroXS_Base, MacroXS_Iso, MacroXS_Angle, & + use macroxs_header, only: MacroXS, MacroXSIso, MacroXSAngle, & expand_harmonic use material_header, only: Material use math @@ -20,7 +20,7 @@ contains !=============================================================================== subroutine calculate_mgxs(this, gin, uvw, xs) - class(MacroXS_Base), intent(in) :: this + class(MacroXS), intent(in) :: this integer, intent(in) :: gin ! Incoming neutron group real(8), intent(in) :: uvw(3) ! Incoming neutron direction type(MaterialMacroXS), intent(inout) :: xs @@ -28,13 +28,13 @@ contains integer :: iazi, ipol select type(this) - type is (MacroXS_Iso) + type is (MacroXSIso) xs % total = this % total(gin) xs % elastic = this % scattxs(gin) xs % absorption = this % absorption(gin) xs % nu_fission = this % nu_fission(gin) - type is (MacroXS_Angle) + type is (MacroXSAngle) call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) xs % total = this % total(gin, iazi, ipol) xs % elastic = this % scattxs(gin, iazi, ipol) @@ -50,16 +50,16 @@ contains !=============================================================================== function sample_fission_energy(this, gin, uvw) result(gout) - class(MacroXS_Base), intent(in) :: this ! Data to work with + class(MacroXS), intent(in) :: this ! Data to work with integer, intent(in) :: gin ! Incoming energy group real(8), intent(in) :: uvw(3) ! Particle Direction integer :: gout ! Sampled outgoing group select type(this) - type is (MacroXS_Iso) - gout = macroxs_iso_sample_fission_energy(this, gin, uvw) - type is (MacroXS_Angle) - gout = macroxs_angle_sample_fission_energy(this, gin, uvw) + type is (MacroXSIso) + gout = macroxsiso_sample_fission_energy(this, gin, uvw) + type is (MacroXSAngle) + gout = macroxsangle_sample_fission_energy(this, gin, uvw) end select end function sample_fission_energy @@ -69,11 +69,11 @@ contains ! Implemented as % scatter. !=============================================================================== - function macroxs_iso_sample_fission_energy(this, gin, uvw) result(gout) - class(MacroXS_Iso), intent(in) :: this ! Data to work with - integer, intent(in) :: gin ! Incoming energy group - real(8), intent(in) :: uvw(3) ! Particle Direction - integer :: gout ! Sampled outgoing group + function macroxsiso_sample_fission_energy(this, gin, uvw) result(gout) + class(MacroXSIso), intent(in) :: this ! Data to work with + integer, intent(in) :: gin ! Incoming energy group + real(8), intent(in) :: uvw(3) ! Particle Direction + integer :: gout ! Sampled outgoing group real(8) :: xi ! Our random number real(8) :: prob ! Running probability @@ -86,10 +86,10 @@ contains prob = prob + this % chi(gout,gin) end do - end function macroxs_iso_sample_fission_energy + end function macroxsiso_sample_fission_energy - function macroxs_angle_sample_fission_energy(this, gin, uvw) result(gout) - class(MacroXS_Angle), intent(in) :: this ! Data to work with + function macroxsangle_sample_fission_energy(this, gin, uvw) result(gout) + class(MacroXSAngle), intent(in) :: this ! Data to work with integer, intent(in) :: gin ! Incoming energy group real(8), intent(in) :: uvw(3) ! Particle Direction integer :: gout ! Sampled outgoing group @@ -108,14 +108,14 @@ contains prob = prob + this % chi(gout,gin,iazi,ipol) end do - end function macroxs_angle_sample_fission_energy + end function macroxsangle_sample_fission_energy !=============================================================================== ! SAMPLE_SCATTER acts as a templating code for macroxs_*_sample_scatter !=============================================================================== subroutine sample_scatter(this, uvw, gin, gout, mu, wgt) - class(MacroXS_Base), intent(in) :: this + class(MacroXS), intent(in) :: this real(8), intent(in) :: uvw(3) ! Incoming neutron direction integer, intent(in) :: gin ! Incoming neutron group integer, intent(out) :: gout ! Sampled outgoin group @@ -125,9 +125,9 @@ contains integer :: iazi, ipol ! Angular indices select type(this) - type is (MacroXS_Iso) + type is (MacroXSIso) call macroxs_sample_scatter(this % scatter, gin, gout, mu, wgt) - type is (MacroXS_Angle) + type is (MacroXSAngle) call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) call macroxs_sample_scatter(this % scatter(iazi,ipol) % obj,gin,gout,mu,wgt) end select @@ -140,11 +140,11 @@ contains !=============================================================================== subroutine macroxs_sample_scatter(scatt, gin, gout, mu, wgt) - class(ScattData_Base), intent(in) :: scatt ! Scattering Object to Use - integer, intent(in) :: gin ! Incoming neutron group - integer, intent(out) :: gout ! Sampled outgoin group - real(8), intent(out) :: mu ! Sampled change in angle - real(8), intent(inout) :: wgt ! Particle weight + class(ScattData), intent(in) :: scatt ! Scattering Object to Use + integer, intent(in) :: gin ! Incoming neutron group + integer, intent(out) :: gout ! Sampled outgoin group + real(8), intent(out) :: mu ! Sampled change in angle + real(8), intent(inout) :: wgt ! Particle weight real(8) :: xi ! Our random number real(8) :: prob ! Running probability @@ -164,7 +164,7 @@ contains end do select type (scatt) - type is (ScattData_Histogram) + type is (ScattDataHistogram) xi = prn() if (xi < scatt % data(1,gout,gin)) then imu = 1 @@ -176,7 +176,7 @@ contains ! Randomly select a mu in this bin. mu = prn() * scatt % dmu + scatt % mu(imu) - type is (ScattData_Tabular) + type is (ScattDataTabular) ! determine outgoing cosine bin NP = size(scatt % data(:,gout,gin)) xi = prn() @@ -211,7 +211,7 @@ contains mu = ONE end if - type is (ScattData_Legendre) + type is (ScattDataLegendre) ! Now we can sample mu using the legendre representation of the scattering ! kernel in data(1:this % order) @@ -240,4 +240,4 @@ contains end subroutine macroxs_sample_scatter -end module macroxs \ No newline at end of file +end module macroxs_operations \ No newline at end of file diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index d9c397f5bb..94546c10dc 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -486,7 +486,7 @@ contains return call get_node_array(node_xsdata, "polar", this % polar) else - dangle = PI / (real(this % Npol,8)) + dangle = PI / real(this % Npol,8) do iangle = 1, this % Npol this % polar(iangle) = (real(iangle,8) - 0.5_8) * dangle end do @@ -497,7 +497,7 @@ contains return call get_node_array(node_xsdata, "azimuthal", this % azimuthal) else - dangle = TWO * PI / (real(this % Nazi,8)) + dangle = TWO * PI / real(this % Nazi,8) do iangle = 1, this % Nazi this % azimuthal(iangle) = -PI + (real(iangle,8) - 0.5_8) * dangle end do @@ -685,9 +685,9 @@ contains ! Now allocate accordingly select case(representation) case(MGXS_ISOTROPIC) - allocate(MacroXS_Iso :: macro_xs(i_mat) % obj) + allocate(MacroXSIso :: macro_xs(i_mat) % obj) case(MGXS_ANGLE) - allocate(MacroXS_Angle :: macro_xs(i_mat) % obj) + allocate(MacroXSAngle :: macro_xs(i_mat) % obj) end select call macro_xs(i_mat) % obj % init(mat, nuclides_MG, energy_groups, & diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 095155a33b..caf0c10729 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -12,12 +12,12 @@ module nuclide_header implicit none !=============================================================================== -! NuclideBase contains the base nuclidic data for a nuclide, which does not depend +! Nuclide contains the base nuclidic data for a nuclide, which does not depend ! upon how the nuclear data is represented (i.e., CE, or any variant of MG). ! The extended types, NuclideCE and NuclideMG deal with the rest !=============================================================================== - type, abstract :: NuclideBase + type, abstract :: Nuclide character(12) :: name ! name of nuclide, e.g. 92235.03c integer :: zaid ! Z and A identifier, e.g. 92235 real(8) :: awr ! Atomic Weight Ratio @@ -30,21 +30,21 @@ module nuclide_header ! Fission information logical :: fissionable ! nuclide is fissionable? - contains - procedure(print_nuclide_), deferred, pass :: print ! Writes nuclide info - end type NuclideBase + contains + procedure(print_nuclide_), deferred :: print ! Writes nuclide info + end type Nuclide abstract interface subroutine print_nuclide_(this, unit) - import NuclideBase - class(NuclideBase),intent(in) :: this - integer, optional, intent(in) :: unit + import Nuclide + class(Nuclide),intent(in) :: this + integer, optional, intent(in) :: unit end subroutine print_nuclide_ end interface - type, extends(NuclideBase) :: NuclideCE + type, extends(Nuclide) :: NuclideCE ! Energy grid information integer :: n_grid ! # of nuclide grid points integer, allocatable :: grid_index(:) ! log grid mapping indices @@ -100,13 +100,12 @@ module nuclide_header type(DictIntInt) :: reaction_index ! map MT values to index in reactions ! array; used at tally-time - ! Type-Bound procedures - contains - procedure, pass :: clear => nuclidece_clear - procedure, pass :: print => nuclidece_print + contains + procedure :: clear => nuclidece_clear + procedure :: print => nuclidece_print end type NuclideCE - type, abstract, extends(NuclideBase) :: NuclideMG + type, abstract, extends(Nuclide) :: NuclideMG ! Scattering Order Information integer :: order ! Order of data (Scattering for NuclideIso, ! Number of angles for all in NuclideAngle) @@ -114,10 +113,9 @@ module nuclide_header integer :: legendre_mu_points ! Number of tabular points to use to represent ! Legendre distribs, -1 if sample with the ! Legendres themselves -! Type-Bound procedures - contains - procedure(nuclidemg_get_xs), deferred, pass :: get_xs ! Get the xs - procedure(nuclide_calc_f_), deferred, pass :: calc_f ! Calculates f, given mu + contains + procedure(nuclidemg_get_xs), deferred :: get_xs ! Get the xs + procedure(nuclide_calc_f_), deferred :: calc_f ! Calculates f, given mu end type NuclideMG abstract interface @@ -166,11 +164,10 @@ module nuclide_header real(8), allocatable :: chi(:) ! Fission Spectra real(8), allocatable :: mult(:,:) ! Scatter multiplicity (Gout x Gin) - ! Type-Bound procedures - contains - procedure, pass :: print => nuclideiso_print ! Writes nuclide info - procedure, pass :: get_xs => nuclideiso_get_xs ! Gets Size of Data w/in Object - procedure, pass :: calc_f => nuclideiso_calc_f ! Calcs f given mu + contains + procedure :: print => nuclideiso_print ! Writes nuclide info + procedure :: get_xs => nuclideiso_get_xs ! Gets Size of Data w/in Object + procedure :: calc_f => nuclideiso_calc_f ! Calcs f given mu end type NuclideIso !=============================================================================== @@ -196,11 +193,10 @@ module nuclide_header real(8), allocatable :: polar(:) ! polar angles real(8), allocatable :: azimuthal(:) ! azimuthal angles - ! Type-Bound procedures - contains - procedure, pass :: print => nuclideangle_print ! Gets Size of Data w/in Object - procedure, pass :: get_xs => nuclideangle_get_xs ! Gets Size of Data w/in Object - procedure, pass :: calc_f => nuclideangle_calc_f ! Calcs f given mu + contains + procedure :: print => nuclideangle_print ! Gets Size of Data w/in Object + procedure :: get_xs => nuclideangle_get_xs ! Gets Size of Data w/in Object + procedure :: calc_f => nuclideangle_calc_f ! Calcs f given mu end type NuclideAngle !=============================================================================== @@ -217,14 +213,12 @@ module nuclide_header !=============================================================================== type Nuclide0K - character(10) :: nuclide ! name of nuclide, e.g. U-238 character(16) :: scheme = 'ares' ! target velocity sampling scheme character(10) :: name ! name of nuclide, e.g. 92235.03c character(10) :: name_0K ! name of 0K nuclide, e.g. 92235.00c real(8) :: E_min = 0.01e-6_8 ! lower cutoff energy for res scattering real(8) :: E_max = 1000.0e-6_8 ! upper cutoff energy for res scattering - end type Nuclide0K !=============================================================================== @@ -289,7 +283,7 @@ module nuclide_header contains !=============================================================================== -! NUCLIDECE_CLEAR resets and deallocates data in NuclideBase, NuclideIso +! NUCLIDECE_CLEAR resets and deallocates data in Nuclide, NuclideIso ! or NuclideAngle !=============================================================================== @@ -648,7 +642,7 @@ module nuclide_header if (this % scatt_type == ANGLE_LEGENDRE) then f = evaluate_legendre(this % scatter(gout,gin,:), mu) else if (this % scatt_type == ANGLE_TABULAR) then - dmu = TWO / (real(this % order) - 1) + dmu = TWO / real(this % order - 1) ! Find mu bin algebraically, knowing that the spacing is equal f = (mu + ONE) / dmu + ONE imu = floor(f) @@ -702,7 +696,7 @@ module nuclide_header if (this % scatt_type == ANGLE_LEGENDRE) then f = evaluate_legendre(this % scatter(gout,gin,:,i_azi_,i_pol_), mu) else if (this % scatt_type == ANGLE_TABULAR) then - dmu = TWO / (real(this % order) - 1) + dmu = TWO / real(this % order - 1) ! Find mu bin algebraically, knowing that the spacing is equal f = (mu + ONE) / dmu + ONE imu = floor(f) @@ -751,9 +745,9 @@ module nuclide_header my_azi = atan2(uvw(2), uvw(1)) ! Search for equi-binned angles - dangle = PI / (real(size(polar),8)) + dangle = PI / real(size(polar),8) i_pol = floor(my_pol / dangle + ONE) - dangle = TWO * PI / (real(size(azimuthal),8)) + dangle = TWO * PI / real(size(azimuthal),8) i_azi = floor((my_azi + PI) / dangle + ONE) end subroutine find_angle diff --git a/src/particle_header.F90 b/src/particle_header.F90 index 0426acd924..3c687eb02f 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -94,10 +94,10 @@ module particle_header type(Bank) :: secondary_bank(MAX_SECONDARY) contains - procedure, pass :: initialize => initialize_particle - procedure, pass :: clear => clear_particle - procedure, pass :: initialize_from_source => initialize_from_source - procedure, pass :: create_secondary => create_secondary + procedure :: initialize => initialize_particle + procedure :: clear => clear_particle + procedure :: initialize_from_source => initialize_from_source + procedure :: create_secondary => create_secondary end type Particle contains diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index 048f3ce54f..a0d8eb6e1d 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -5,8 +5,8 @@ module physics_mg use constants use error, only: fatal_error, warning use global - use macroxs_header, only: MacroXS_Base, MacroXSContainer - use macroxs, only: sample_fission_energy, sample_scatter + use macroxs_header, only: MacroXS, MacroXSContainer + use macroxs_operations, only: sample_fission_energy, sample_scatter use material_header, only: Material use math, only: rotate_angle use mesh, only: get_mesh_indices @@ -179,7 +179,7 @@ contains real(8) :: phi ! fission neutron azimuthal angle real(8) :: weight ! weight adjustment for ufs method logical :: in_mesh ! source site in ufs mesh? - class(MacroXS_Base), pointer :: xs + class(MacroXS), pointer :: xs ! Get Pointers xs => macro_xs(p % material) % obj diff --git a/src/sab_header.F90 b/src/sab_header.F90 index 56617dd01d..695f735c05 100644 --- a/src/sab_header.F90 +++ b/src/sab_header.F90 @@ -60,8 +60,8 @@ module sab_header real(8), allocatable :: elastic_e_in(:) real(8), allocatable :: elastic_P(:) real(8), allocatable :: elastic_mu(:,:) - contains - procedure, pass :: print => print_sab_table + contains + procedure :: print => print_sab_table end type SAlphaBeta contains diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index 091a77741a..62b382d36c 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -10,68 +10,67 @@ module scattdata_header ! angular distribution !=============================================================================== - type, abstract :: ScattData_Base + type, abstract :: ScattData ! p0 matrix on its own for sampling energy real(8), allocatable :: energy(:,:) ! (Gout x Gin) real(8), allocatable :: mult(:,:) ! (Gout x Gin) real(8), allocatable :: data(:,:,:) ! (Order/Nmu x Gout x Gin) - ! Type-Bound procedures contains - procedure(init_), deferred, pass :: init ! Initializes ScattData - procedure(calc_f_), deferred, pass :: calc_f ! Calculates f, given mu - end type ScattData_Base + procedure(init_), deferred :: init ! Initializes ScattData + procedure(calc_f_), deferred :: calc_f ! Calculates f, given mu + end type ScattData abstract interface subroutine init_(this, order, energy, mult, coeffs) - import ScattData_Base - class(ScattData_Base), intent(inout) :: this ! Object to work on - integer, intent(in) :: order ! Data Order - real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix - real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix - real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use + import ScattData + class(ScattData), intent(inout) :: this ! Object to work on + integer, intent(in) :: order ! Data Order + real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix + real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix + real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use end subroutine init_ pure function calc_f_(this, gin, gout, mu) result(f) - import ScattData_Base - class(ScattData_Base), intent(in) :: this ! The ScattData to evaluate - integer, intent(in) :: gin ! Incoming Energy Group - integer, intent(in) :: gout ! Outgoing Energy Group - real(8), intent(in) :: mu ! Angle of interest - real(8) :: f ! Return value of f(mu) + import ScattData + class(ScattData), intent(in) :: this ! The ScattData to evaluate + integer, intent(in) :: gin ! Incoming Energy Group + integer, intent(in) :: gout ! Outgoing Energy Group + real(8), intent(in) :: mu ! Angle of interest + real(8) :: f ! Return value of f(mu) end function calc_f_ end interface - type, extends(ScattData_Base) :: ScattData_Legendre + type, extends(ScattData) :: ScattDataLegendre contains - procedure, pass :: init => scattdata_legendre_init - procedure, pass :: calc_f => scattdata_legendre_calc_f - end type ScattData_Legendre + procedure :: init => scattdatalegendre_init + procedure :: calc_f => scattdatalegendre_calc_f + end type ScattDataLegendre - type, extends(ScattData_Base) :: ScattData_Histogram - real(8), allocatable :: mu(:) ! Mu bins - real(8) :: dmu ! Mu spacing + type, extends(ScattData) :: ScattDataHistogram + real(8), allocatable :: mu(:) ! Mu bins + real(8) :: dmu ! Mu spacing contains - procedure, pass :: init => scattdata_histogram_init - procedure, pass :: calc_f => scattdata_histogram_calc_f - end type ScattData_Histogram + procedure :: init => scattdatahistogram_init + procedure :: calc_f => scattdatahistogram_calc_f + end type ScattDataHistogram - type, extends(ScattData_Base) :: ScattData_Tabular - real(8), allocatable :: mu(:) ! Mu bins - real(8) :: dmu ! Mu spacing - real(8), allocatable :: fmu(:,:,:) ! PDF of f(mu) + type, extends(ScattData) :: ScattDataTabular + real(8), allocatable :: mu(:) ! Mu bins + real(8) :: dmu ! Mu spacing + real(8), allocatable :: fmu(:,:,:) ! PDF of f(mu) contains - procedure, pass :: init => scattdata_tabular_init - procedure, pass :: calc_f => scattdata_tabular_calc_f - end type ScattData_Tabular + procedure :: init => scattdatatabular_init + procedure :: calc_f => scattdatatabular_calc_f + end type ScattDataTabular !=============================================================================== ! SCATTDATACONTAINER allocatable array for storing ScattData Objects (for angle) !=============================================================================== type ScattDataContainer - class(ScattData_Base), allocatable :: obj + class(ScattData), allocatable :: obj end type ScattDataContainer contains @@ -80,8 +79,8 @@ contains ! SCATTDATA_INIT builds the scattdata object !=============================================================================== - subroutine scattdata_base_init(this, order, energy, mult) - class(ScattData_Base), intent(inout) :: this ! Object to work on + subroutine scattdatabase_init(this, order, energy, mult) + class(ScattData), intent(inout) :: this ! Object to work on integer, intent(in) :: order ! Data Order real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix @@ -97,23 +96,23 @@ contains allocate(this % data(order, groups, groups)) this % data = ZERO - end subroutine scattdata_base_init + end subroutine scattdatabase_init - subroutine scattdata_legendre_init(this, order, energy, mult, coeffs) - class(ScattData_Legendre), intent(inout) :: this ! Object to work on + subroutine scattdatalegendre_init(this, order, energy, mult, coeffs) + class(ScattDataLegendre), intent(inout) :: this ! Object to work on integer, intent(in) :: order ! Data Order real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use - call scattdata_base_init(this, order, energy, mult) + call scattdatabase_init(this, order, energy, mult) this % data = coeffs - end subroutine scattdata_legendre_init + end subroutine scattdatalegendre_init - subroutine scattdata_histogram_init(this, order, energy, mult, coeffs) - class(ScattData_Histogram), intent(inout) :: this ! Object to work on + subroutine scattdatahistogram_init(this, order, energy, mult, coeffs) + class(ScattDataHistogram), intent(inout) :: this ! Object to work on integer, intent(in) :: order ! Data Order real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix @@ -124,10 +123,10 @@ contains groups = size(energy,dim=1) - call scattdata_base_init(this, order, energy, mult) + call scattdatabase_init(this, order, energy, mult) allocate(this % mu(order)) - this % dmu = TWO / (real(order,8)) + this % dmu = TWO / real(order,8) this % mu(1) = -ONE do imu = 2, order this % mu(imu) = -ONE + (imu - 1) * this % dmu @@ -152,10 +151,10 @@ contains end do end do - end subroutine scattdata_histogram_init + end subroutine scattdatahistogram_init - subroutine scattdata_tabular_init(this, order, energy, mult, coeffs) - class(ScattData_Tabular), intent(inout) :: this ! Object to work on + subroutine scattdatatabular_init(this, order, energy, mult, coeffs) + class(ScattDataTabular), intent(inout) :: this ! Object to work on integer, intent(in) :: order ! Data Order real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix @@ -176,10 +175,10 @@ contains groups = size(energy,dim=1) - call scattdata_base_init(this, this_order, energy, mult) + call scattdatabase_init(this, this_order, energy, mult) allocate(this % mu(this_order)) - this % dmu = TWO / (real(this_order) - 1) + this % dmu = TWO / real(this_order - 1) do imu = 1, this_order - 1 this % mu(imu) = -ONE + real(imu - 1) * this % dmu end do @@ -228,14 +227,14 @@ contains end do end do - end subroutine scattdata_tabular_init + end subroutine scattdatatabular_init !=============================================================================== ! SCATTDATA_*_CALC_F Calculates the value of f given mu (and gin,gout pair) !=============================================================================== - pure function scattdata_legendre_calc_f(this, gin, gout, mu) result(f) - class(ScattData_Legendre), intent(in) :: this ! The ScattData to evaluate + pure function scattdatalegendre_calc_f(this, gin, gout, mu) result(f) + class(ScattDataLegendre), intent(in) :: this ! The ScattData to evaluate integer, intent(in) :: gin ! Incoming Energy Group integer, intent(in) :: gout ! Outgoing Energy Group real(8), intent(in) :: mu ! Angle of interest @@ -244,10 +243,10 @@ contains ! Plug mu in to the legendre expansion and go from there f = evaluate_legendre(this % data(:, gout, gin), mu) - end function scattdata_legendre_calc_f + end function scattdatalegendre_calc_f - pure function scattdata_histogram_calc_f(this, gin, gout, mu) result(f) - class(ScattData_Histogram), intent(in) :: this ! The ScattData to evaluate + pure function scattdatahistogram_calc_f(this, gin, gout, mu) result(f) + class(ScattDataHistogram), intent(in) :: this ! The ScattData to evaluate integer, intent(in) :: gin ! Incoming Energy Group integer, intent(in) :: gout ! Outgoing Energy Group real(8), intent(in) :: mu ! Angle of interest @@ -265,10 +264,10 @@ contains ! Use histogram interpolation to find f(mu) f = this % data(imu, gout, gin) - end function scattdata_histogram_calc_f + end function scattdatahistogram_calc_f - pure function scattdata_tabular_calc_f(this, gin, gout, mu) result(f) - class(ScattData_Tabular), intent(in) :: this ! The ScattData to evaluate + pure function scattdatatabular_calc_f(this, gin, gout, mu) result(f) + class(ScattDataTabular), intent(in) :: this ! The ScattData to evaluate integer, intent(in) :: gin ! Incoming Energy Group integer, intent(in) :: gout ! Outgoing Energy Group real(8), intent(in) :: mu ! Angle of interest @@ -289,6 +288,6 @@ contains f = (ONE - r) * this % data(imu, gout, gin) + & r * this % data(imu + 1, gout, gin) - end function scattdata_tabular_calc_f + end function scattdatatabular_calc_f end module scattdata_header \ No newline at end of file diff --git a/src/tracking.F90 b/src/tracking.F90 index 0b2719ef5d..98e5483a0a 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -1,23 +1,23 @@ module tracking - use constants, only: MODE_EIGENVALUE - 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 constants, only: MODE_EIGENVALUE + 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 macroxs, only: calculate_mgxs - use output, only: write_message - use particle_header, only: LocalCoord, Particle - use physics, only: collision - use physics_mg, only: collision_mg - use random_lcg, only: prn - use string, only: to_str - use tally, only: score_analog_tally, score_tracklength_tally, & - score_collision_tally, score_surface_current - use track_output, only: initialize_particle_track, write_particle_track, & - add_particle_track, finalize_particle_track + use macroxs_operations, only: calculate_mgxs + use output, only: write_message + use particle_header, only: LocalCoord, Particle + use physics, only: collision + use physics_mg, only: collision_mg + use random_lcg, only: prn + use string, only: to_str + use tally, only: score_analog_tally, score_tracklength_tally, & + score_collision_tally, score_surface_current + use track_output, only: initialize_particle_track, write_particle_track, & + add_particle_track, finalize_particle_track implicit none From 307617538c887a3ed8db2fd0a19640b6383553b4 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 10 Feb 2016 20:39:03 -0500 Subject: [PATCH 280/650] Fixing bugs associated with enabling tabular representation of legendre data --- openmc/mgxs_library.py | 5 ++++- src/mgxs_data.F90 | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index f3e7b92184..ea6407f968 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -289,7 +289,10 @@ class XSdata(object): check_value('num_points', num_points, Integral) check_greater_than('num_points', num_points, 0) else: - num_points = 33 + if enable == False: + num_points = 1 + else: + num_points = 33 self._tabular_legendre = {'enable': enable, 'num_points': num_points} @num_polar.setter diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 94546c10dc..715b52b132 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -261,6 +261,7 @@ contains enable_leg_mu = .true. elseif (temp_str == 'false' .or. temp_str == '0') then enable_leg_mu = .false. + this % legendre_mu_points = 1 else call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) end if From bbbb115196b479a117d6dc48021c1a2bdb62bbe8 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 11 Feb 2016 12:07:23 -0500 Subject: [PATCH 281/650] Implemented __gt__ method for AggregateFilter --- openmc/arithmetic.py | 20 +++++++++++++------- openmc/element.py | 3 +++ openmc/mgxs/mgxs.py | 5 +++-- openmc/tallies.py | 6 ------ 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/openmc/arithmetic.py b/openmc/arithmetic.py index 13f300968a..bbb303b140 100644 --- a/openmc/arithmetic.py +++ b/openmc/arithmetic.py @@ -647,7 +647,7 @@ class AggregateNuclide(object): @nuclides.setter def nuclides(self, nuclides): cv.check_iterable_type('nuclides', nuclides, - (basestring, Nuclide, CrossNuclide)) + (basestring, Nuclide, CrossNuclide)) self._nuclides = nuclides @aggregate_op.setter @@ -716,8 +716,16 @@ class AggregateFilter(object): return not self == other def __gt__(self, other): - # FIXME - return False + if self.type != other.type: + if self.aggregate_filter.type in _FILTER_TYPES and \ + other.aggregate_filter.type in _FILTER_TYPES: + delta = _FILTER_TYPES.index(self.aggregate_filter.type) - \ + _FILTER_TYPES.index(other.aggregate_filter.type) + return True if delta > 0 else False + else: + return False + else: + return False def __lt__(self, other): return not self > other @@ -789,9 +797,7 @@ class AggregateFilter(object): @bins.setter def bins(self, bins): cv.check_iterable_type('bins', bins, Iterable) - self._bins = [] - for bin in bins: - self._bins.append(tuple(bin)) + self._bins = map(tuple, bins) @aggregate_op.setter def aggregate_op(self, aggregate_op): @@ -956,4 +962,4 @@ class AggregateFilter(object): # Assign merged bins to merged filter merged_filter.bins = list(merged_bins) - return merged_filter \ No newline at end of file + return merged_filter diff --git a/openmc/element.py b/openmc/element.py index 4880dfaf23..dda110ea7a 100644 --- a/openmc/element.py +++ b/openmc/element.py @@ -57,6 +57,9 @@ class Element(object): def __ne__(self, other): return not self == other + def __gt__(self, other): + return repr(self) > repr(other) + def __lt__(self, other): return not self > other diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index b4c107139d..fb70b1bc8d 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1917,7 +1917,8 @@ class ScatterMatrixXS(MGXS): self._correction = correction def get_slice(self, nuclides=[], groups=[]): - """Build a sliced MGXS for the specified nuclides and energy groups. + """Build a sliced ScatterMatrix for the specified nuclides and + energy groups. This method constructs a new MGXS to encapsulate a subset of the data represented by this MGXS. The subset of data to include in the tally @@ -2308,7 +2309,7 @@ class Chi(MGXS): return self._xs_tally def get_slice(self, nuclides=[], groups=[]): - """Build a sliced MGXS for the specified nuclides and energy groups. + """Build a sliced Chi for the specified nuclides and energy groups. This method constructs a new MGXS to encapsulate a subset of the data represented by this MGXS. The subset of data to include in the tally diff --git a/openmc/tallies.py b/openmc/tallies.py index 6b04403329..b15e730386 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -2188,12 +2188,6 @@ class Tally(object): """ - # Check that results have been read -# if not self.derived and self.sum is None: -# msg = 'Unable to use tally arithmetic with Tally ID="{0}" ' \ -# 'since it does not contain any results.'.format(self.id) -# raise ValueError(msg) - cv.check_type('filter1', filter1, (Filter, CrossFilter, AggregateFilter)) cv.check_type('filter2', filter2, (Filter, CrossFilter, AggregateFilter)) From 23353fa097ec736a813386ceecd1b89cd26173dc Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 11 Feb 2016 12:59:14 -0500 Subject: [PATCH 282/650] Added new tally slice and merge test --- openmc/arithmetic.py | 2 +- tests/test_tally_slice_merge/inputs_true.dat | 1 + tests/test_tally_slice_merge/results_true.dat | 49 ++++++ .../test_tally_slice_merge.py | 165 ++++++++++++++++++ 4 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 tests/test_tally_slice_merge/inputs_true.dat create mode 100644 tests/test_tally_slice_merge/results_true.dat create mode 100644 tests/test_tally_slice_merge/test_tally_slice_merge.py diff --git a/openmc/arithmetic.py b/openmc/arithmetic.py index bbb303b140..4ddf3b1f91 100644 --- a/openmc/arithmetic.py +++ b/openmc/arithmetic.py @@ -797,7 +797,7 @@ class AggregateFilter(object): @bins.setter def bins(self, bins): cv.check_iterable_type('bins', bins, Iterable) - self._bins = map(tuple, bins) + self._bins = list(map(tuple, bins)) @aggregate_op.setter def aggregate_op(self, aggregate_op): diff --git a/tests/test_tally_slice_merge/inputs_true.dat b/tests/test_tally_slice_merge/inputs_true.dat new file mode 100644 index 0000000000..29f0f1d827 --- /dev/null +++ b/tests/test_tally_slice_merge/inputs_true.dat @@ -0,0 +1 @@ +8d1ab9e4add51b99045e990ac9c3dad9447e9720d811bc430d4bfdd7c2c035424bcb7750e4a4d0ec0460ea1ef4be46ac58372ed01d55f5d8cfeebbce75559066 \ No newline at end of file diff --git a/tests/test_tally_slice_merge/results_true.dat b/tests/test_tally_slice_merge/results_true.dat new file mode 100644 index 0000000000..6aeb5735a8 --- /dev/null +++ b/tests/test_tally_slice_merge/results_true.dat @@ -0,0 +1,49 @@ + energy [MeV] cell nuclide score mean std. dev. +0 (0.0e+00 - 6.3e-07) 21 U-235 fission 0.098638 0.009195 energy [MeV] cell nuclide score mean std. dev. +0 (0.0e+00 - 6.3e-07) 21 U-235 nu-fission 0.240351 0.022405 energy [MeV] cell nuclide score mean std. dev. +0 (0.0e+00 - 6.3e-07) 21 U-238 fission 1.371663e-07 1.284884e-08 energy [MeV] cell nuclide score mean std. dev. +0 (0.0e+00 - 6.3e-07) 21 U-238 nu-fission 3.418304e-07 3.202044e-08 energy [MeV] cell nuclide score mean std. dev. +0 (6.3e-07 - 2.0e+01) 21 U-235 fission 0.027879 0.000602 energy [MeV] cell nuclide score mean std. dev. +0 (6.3e-07 - 2.0e+01) 21 U-235 nu-fission 0.068241 0.001458 energy [MeV] cell nuclide score mean std. dev. +0 (6.3e-07 - 2.0e+01) 21 U-238 fission 0.016638 0.001146 energy [MeV] cell nuclide score mean std. dev. +0 (6.3e-07 - 2.0e+01) 21 U-238 nu-fission 0.045776 0.003342 energy [MeV] cell nuclide score mean std. dev. +0 (0.0e+00 - 6.3e-07) 27 U-235 fission 0.057752 0.004818 energy [MeV] cell nuclide score mean std. dev. +0 (0.0e+00 - 6.3e-07) 27 U-235 nu-fission 0.140724 0.011739 energy [MeV] cell nuclide score mean std. dev. +0 (0.0e+00 - 6.3e-07) 27 U-238 fission 8.177167e-08 7.061683e-09 energy [MeV] cell nuclide score mean std. dev. +0 (0.0e+00 - 6.3e-07) 27 U-238 nu-fission 2.037822e-07 1.759834e-08 energy [MeV] cell nuclide score mean std. dev. +0 (6.3e-07 - 2.0e+01) 27 U-235 fission 0.01763 0.001937 energy [MeV] cell nuclide score mean std. dev. +0 (6.3e-07 - 2.0e+01) 27 U-235 nu-fission 0.04314 0.004737 energy [MeV] cell nuclide score mean std. dev. +0 (6.3e-07 - 2.0e+01) 27 U-238 fission 0.009883 0.001934 energy [MeV] cell nuclide score mean std. dev. +0 (6.3e-07 - 2.0e+01) 27 U-238 nu-fission 0.027068 0.005207 energy [MeV] cell nuclide score mean std. dev. +0 (0.0e+00 - 6.3e-07) 21 U-235 fission 9.863775e-02 9.194846e-03 +1 (0.0e+00 - 6.3e-07) 21 U-235 nu-fission 2.403506e-01 2.240508e-02 +2 (0.0e+00 - 6.3e-07) 21 U-238 fission 1.371663e-07 1.284884e-08 +3 (0.0e+00 - 6.3e-07) 21 U-238 nu-fission 3.418304e-07 3.202044e-08 +4 (0.0e+00 - 6.3e-07) 27 U-235 fission 5.775195e-02 4.817512e-03 +5 (0.0e+00 - 6.3e-07) 27 U-235 nu-fission 1.407242e-01 1.173883e-02 +6 (0.0e+00 - 6.3e-07) 27 U-238 fission 8.177167e-08 7.061683e-09 +7 (0.0e+00 - 6.3e-07) 27 U-238 nu-fission 2.037822e-07 1.759834e-08 +8 (6.3e-07 - 2.0e+01) 21 U-235 fission 2.787911e-02 6.020399e-04 +9 (6.3e-07 - 2.0e+01) 21 U-235 nu-fission 6.824140e-02 1.457590e-03 +10 (6.3e-07 - 2.0e+01) 21 U-238 fission 1.663756e-02 1.145703e-03 +11 (6.3e-07 - 2.0e+01) 21 U-238 nu-fission 4.577562e-02 3.342394e-03 +12 (6.3e-07 - 2.0e+01) 27 U-235 fission 1.763014e-02 1.937151e-03 +13 (6.3e-07 - 2.0e+01) 27 U-235 nu-fission 4.313951e-02 4.737423e-03 +14 (6.3e-07 - 2.0e+01) 27 U-238 fission 9.883451e-03 1.933519e-03 +15 (6.3e-07 - 2.0e+01) 27 U-238 nu-fission 2.706776e-02 5.206818e-03 sum(distribcell) energy [MeV] nuclide score mean std. dev. +0 (0, 100, 2000, 30000) (0.0e+00 - 6.3e-07) U-235 fission 0 0 +1 (0, 100, 2000, 30000) (0.0e+00 - 6.3e-07) U-235 nu-fission 0 0 +2 (0, 100, 2000, 30000) (0.0e+00 - 6.3e-07) U-238 fission 0 0 +3 (0, 100, 2000, 30000) (0.0e+00 - 6.3e-07) U-238 nu-fission 0 0 +4 (0, 100, 2000, 30000) (6.3e-07 - 2.0e+01) U-235 fission 0 0 +5 (0, 100, 2000, 30000) (6.3e-07 - 2.0e+01) U-235 nu-fission 0 0 +6 (0, 100, 2000, 30000) (6.3e-07 - 2.0e+01) U-238 fission 0 0 +7 (0, 100, 2000, 30000) (6.3e-07 - 2.0e+01) U-238 nu-fission 0 0 +8 (500, 5000, 50000) (0.0e+00 - 6.3e-07) U-235 fission 0 0 +9 (500, 5000, 50000) (0.0e+00 - 6.3e-07) U-235 nu-fission 0 0 +10 (500, 5000, 50000) (0.0e+00 - 6.3e-07) U-238 fission 0 0 +11 (500, 5000, 50000) (0.0e+00 - 6.3e-07) U-238 nu-fission 0 0 +12 (500, 5000, 50000) (6.3e-07 - 2.0e+01) U-235 fission 0 0 +13 (500, 5000, 50000) (6.3e-07 - 2.0e+01) U-235 nu-fission 0 0 +14 (500, 5000, 50000) (6.3e-07 - 2.0e+01) U-238 fission 0 0 +15 (500, 5000, 50000) (6.3e-07 - 2.0e+01) U-238 nu-fission 0 0 \ No newline at end of file diff --git a/tests/test_tally_slice_merge/test_tally_slice_merge.py b/tests/test_tally_slice_merge/test_tally_slice_merge.py new file mode 100644 index 0000000000..403f1827dd --- /dev/null +++ b/tests/test_tally_slice_merge/test_tally_slice_merge.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python + +import os +import sys +import glob +import hashlib +import itertools +sys.path.insert(0, os.pardir) +from testing_harness import PyAPITestHarness +import openmc + + +class TallySliceMergeTestHarness(PyAPITestHarness): + def _build_inputs(self): + + # The summary.h5 file needs to be created to read in the tallies + self._input_set.settings.output = {'summary': True} + + # Initialize the tallies file + tallies_file = openmc.TalliesFile() + + # Define nuclides and scores to add to both tallies + self.nuclides = ['U-235', 'U-238'] + self.scores = ['fission', 'nu-fission'] + + # Define filters for energy and spatial domain + + low_energy = openmc.Filter(type='energy', bins=[0., 0.625e-6]) + high_energy = openmc.Filter(type='energy', bins=[0.625e-6, 20.]) + merged_energies = low_energy.merge(high_energy) + + cell_21 = openmc.Filter(type='cell', bins=[21]) + cell_27 = openmc.Filter(type='cell', bins=[27]) + distribcell_filter = openmc.Filter(type='distribcell', bins=[21]) + + self.cell_filters = [cell_21, cell_27] + self.energy_filters = [low_energy, high_energy] + + # Initialize cell tallies with filters, nuclides and scores + tallies = [] + for cell_filter in self.energy_filters: + for energy_filter in self.cell_filters: + for nuclide in self.nuclides: + for score in self.scores: + tally = openmc.Tally() + tally.estimator = 'tracklength' + tally.add_score(score) + tally.add_nuclide(nuclide) + tally.add_filter(cell_filter) + tally.add_filter(energy_filter) + tallies.append(tally) + + # Merge all cell tallies together + while len(tallies) != 1: + halfway = int(len(tallies) / 2) + zip_split = zip(tallies[:halfway], tallies[halfway:]) + tallies = list(map(lambda xy: xy[0].merge(xy[1]), zip_split)) + + # Specify a name for the tally + tallies[0].name = 'cell tally' + + # Initialize a distribcell tally + distribcell_tally = openmc.Tally(name='distribcell tally') + distribcell_tally.estimator = 'tracklength' + distribcell_tally.add_filter(distribcell_filter) + distribcell_tally.add_filter(merged_energies) + for score in self.scores: + distribcell_tally.add_score(score) + for nuclide in self.nuclides: + distribcell_tally.add_nuclide(nuclide) + + # Add tallies to a TalliesFile + tallies_file = openmc.TalliesFile() + tallies_file.add_tally(tallies[0]) + tallies_file.add_tally(distribcell_tally) + + # Export tallies to file + self._input_set.tallies = tallies_file + super(TallySliceMergeTestHarness, self)._build_inputs() + + def _get_results(self, hash_output=False): + """Digest info in the statepoint and return as a string.""" + + # Read the statepoint file. + statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] + sp = openmc.StatePoint(statepoint) + + # Read the summary file. + summary = glob.glob(os.path.join(os.getcwd(), 'summary.h5'))[0] + su = openmc.Summary(summary) + sp.link_with_summary(su) + + # Extract the cell tally + tallies = [sp.get_tally(name='cell tally')] + + # Slice the tallies by cell filter bins + cell_filter_prod = itertools.product(tallies, self.cell_filters) + tallies = map(lambda tf: tf[0].get_slice(filters=[tf[1].type], + filter_bins=[tf[1].get_bin(0)]), cell_filter_prod) + + # Slice the tallies by energy filter bins + energy_filter_prod = itertools.product(tallies, self.energy_filters) + tallies = map(lambda tf: tf[0].get_slice(filters=[tf[1].type], + filter_bins=[(tf[1].get_bin(0),)]), energy_filter_prod) + + # Slice the tallies by nuclide + nuclide_prod = itertools.product(tallies, self.nuclides) + tallies = map(lambda tn: tn[0].get_slice(nuclides=[tn[1]]), nuclide_prod) + + # Slice the tallies by score + score_prod = itertools.product(tallies, self.scores) + tallies = map(lambda ts: ts[0].get_slice(scores=[ts[1]]), score_prod) + + # Initialize an output string + outstr = '' + + # Append sliced Tally Pandas DataFrames to output string + for tally in tallies: + df = tally.get_pandas_dataframe() + outstr += df.to_string() + + # Merge all tallies together + while len(list(tallies)) != 1: + tallies = list(tallies) + halfway = int(len(tallies) / 2) + zip_split = zip(tallies[:halfway], tallies[halfway:]) + tallies = map(lambda xy: xy[0].merge(xy[1]), zip_split) + + # Append merged Tally Pandas DataFrame to output string + df = tallies[0].get_pandas_dataframe() + outstr += df.to_string() + + # Extract the distribcell tally + distribcell_tally = sp.get_tally(name='distribcell tally') + + # Sum up a few subdomains from the distribcell tally + sum1 = distribcell_tally.summation(filter_type='distribcell', + filter_bins=[0,100,2000,30000]) + # Sum up a few subdomains from the distribcell tally + sum2 = distribcell_tally.summation(filter_type='distribcell', + filter_bins=[500,5000,50000]) + + # Merge the distribcell tally slices + merge_tally = sum1.merge(sum2) + + # Append merged Tally Pandas DataFrame to output string + df = merge_tally.get_pandas_dataframe() + outstr += df.to_string() + + # Hash the results if necessary + if hash_output: + sha512 = hashlib.sha512() + sha512.update(outstr.encode('utf-8')) + outstr = sha512.hexdigest() + + return outstr + + def _cleanup(self): + super(TallySliceMergeTestHarness, self)._cleanup() + f = os.path.join(os.getcwd(), 'tallies.xml') + if os.path.exists(f): os.remove(f) + +if __name__ == '__main__': + harness = TallySliceMergeTestHarness('statepoint.10.h5', True) + harness.main() From baad8a998a33173f70c239b4741437936c9ed35a Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 11 Feb 2016 16:27:03 -0500 Subject: [PATCH 283/650] Fixed Python 3 issue in tally slice-merge test --- tests/test_tally_slice_merge/test_tally_slice_merge.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_tally_slice_merge/test_tally_slice_merge.py b/tests/test_tally_slice_merge/test_tally_slice_merge.py index 403f1827dd..79acf182d6 100644 --- a/tests/test_tally_slice_merge/test_tally_slice_merge.py +++ b/tests/test_tally_slice_merge/test_tally_slice_merge.py @@ -110,6 +110,7 @@ class TallySliceMergeTestHarness(PyAPITestHarness): # Slice the tallies by score score_prod = itertools.product(tallies, self.scores) tallies = map(lambda ts: ts[0].get_slice(scores=[ts[1]]), score_prod) + tallies = list(tallies) # Initialize an output string outstr = '' @@ -120,11 +121,10 @@ class TallySliceMergeTestHarness(PyAPITestHarness): outstr += df.to_string() # Merge all tallies together - while len(list(tallies)) != 1: - tallies = list(tallies) + while len(tallies) != 1: halfway = int(len(tallies) / 2) zip_split = zip(tallies[:halfway], tallies[halfway:]) - tallies = map(lambda xy: xy[0].merge(xy[1]), zip_split) + tallies = list(map(lambda xy: xy[0].merge(xy[1]), zip_split)) # Append merged Tally Pandas DataFrame to output string df = tallies[0].get_pandas_dataframe() From e40fd13d80e228c3edc173b87cc6a170dc7baa2d Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 11 Feb 2016 17:17:36 -0500 Subject: [PATCH 284/650] Removed old FIXME comment tags from tallies.py --- openmc/tallies.py | 8 +- tests/test_tally_arithmetic/geometry.xml | 148 ++++++++++++ tests/test_tally_arithmetic/inputs_test.dat | 1 + tests/test_tally_arithmetic/materials.xml | 246 ++++++++++++++++++++ tests/test_tally_arithmetic/settings.xml | 16 ++ tests/test_tally_arithmetic/tallies.xml | 21 ++ 6 files changed, 433 insertions(+), 7 deletions(-) create mode 100644 tests/test_tally_arithmetic/geometry.xml create mode 100644 tests/test_tally_arithmetic/inputs_test.dat create mode 100644 tests/test_tally_arithmetic/materials.xml create mode 100644 tests/test_tally_arithmetic/settings.xml create mode 100644 tests/test_tally_arithmetic/tallies.xml diff --git a/openmc/tallies.py b/openmc/tallies.py index b15e730386..91a1fb0eef 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -887,7 +887,7 @@ class Tally(object): # Create deep copy of other tally to use for array concatenation other_copy = copy.deepcopy(other) - # FIXME: document and create vars for merge_filters, etc. + # Identify if filters, nuclides and scores are mergeable and/or equal merge_filters = self._can_merge_filters(other) merge_nuclides = self._can_merge_nuclides(other) merge_scores = self._can_merge_scores(other) @@ -2224,8 +2224,6 @@ class Tally(object): else: filter2_bins = [filter2.get_bin(i) for i in range(filter2.num_bins)] - # FIXME: Why doesn't this swap data for sum and sum_sq??? - # Adjust the mean data array to relect the new filter order if self.mean is not None: for bin1, bin2 in itertools.product(filter1_bins, filter2_bins): @@ -2297,8 +2295,6 @@ class Tally(object): self.nuclides[nuclide1_index] = nuclide2 self.nuclides[nuclide2_index] = nuclide1 - # FIXME: Why doesn't this swap data for sum and sum_sq??? - # Adjust the mean data array to relect the new nuclide order if self.mean is not None: nuclide1_mean = self.mean[:, nuclide1_index, :].copy() @@ -2371,8 +2367,6 @@ class Tally(object): self.scores[score1_index] = score2 self.scores[score2_index] = score1 - # FIXME: Why doesn't this swap data for sum and sum_sq??? - # Adjust the mean data array to relect the new nuclide order if self.mean is not None: score1_mean = self.mean[:, :, score1_index].copy() diff --git a/tests/test_tally_arithmetic/geometry.xml b/tests/test_tally_arithmetic/geometry.xml new file mode 100644 index 0000000000..ed66ef8e6b --- /dev/null +++ b/tests/test_tally_arithmetic/geometry.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.26 1.26 + 17 17 + -10.71 -10.71 + +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 +1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 1 +1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + + + 1.26 1.26 + 17 17 + -10.71 -10.71 + +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 4 3 3 4 3 3 4 3 3 3 3 3 +3 3 3 4 3 3 3 3 3 3 3 3 3 4 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +3 3 4 3 3 4 3 3 4 3 3 4 3 3 4 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +3 3 4 3 3 4 3 3 4 3 3 4 3 3 4 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +3 3 4 3 3 4 3 3 4 3 3 4 3 3 4 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 4 3 3 3 3 3 3 3 3 3 4 3 3 3 +3 3 3 3 3 4 3 3 4 3 3 4 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + + + 21.42 21.42 + 21 21 + -224.91 -224.91 + +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 +5 5 5 5 5 5 5 6 6 6 6 6 6 6 5 5 5 5 5 5 5 +5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 +5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 +5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 +5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 +5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 +5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 +5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 +5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 +5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 +5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 +5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 +5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 +5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 +5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 +5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 +5 5 5 5 5 5 5 6 6 6 6 6 6 6 5 5 5 5 5 5 5 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + + + 21.42 21.42 + 21 21 + -224.91 -224.91 + +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 +7 7 7 7 7 7 7 8 8 8 8 8 8 8 7 7 7 7 7 7 7 +7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 +7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 +7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 +7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 +7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 +7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 +7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 +7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 +7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 +7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 +7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 +7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 +7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 +7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 +7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 +7 7 7 7 7 7 7 8 8 8 8 8 8 8 7 7 7 7 7 7 7 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + + + + + + + + + + + + + + + + + + + diff --git a/tests/test_tally_arithmetic/inputs_test.dat b/tests/test_tally_arithmetic/inputs_test.dat new file mode 100644 index 0000000000..1b6046f1ae --- /dev/null +++ b/tests/test_tally_arithmetic/inputs_test.dat @@ -0,0 +1 @@ +57384883e37964076aa82c19fa542434331cdb09735d710485b5aa0ca3445d543729e40cb9c7b6a70e7101ef186923eb1ff6315c73b01ff257052838add68fc7 \ No newline at end of file diff --git a/tests/test_tally_arithmetic/materials.xml b/tests/test_tally_arithmetic/materials.xml new file mode 100644 index 0000000000..9454c0d8e6 --- /dev/null +++ b/tests/test_tally_arithmetic/materials.xml @@ -0,0 +1,246 @@ + + + 71c + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/test_tally_arithmetic/settings.xml b/tests/test_tally_arithmetic/settings.xml new file mode 100644 index 0000000000..64f95a3a46 --- /dev/null +++ b/tests/test_tally_arithmetic/settings.xml @@ -0,0 +1,16 @@ + + + + 100 + 10 + 5 + + + + -160 -160 -183 160 160 183 + + + + true + + diff --git a/tests/test_tally_arithmetic/tallies.xml b/tests/test_tally_arithmetic/tallies.xml new file mode 100644 index 0000000000..ab4d1c37d8 --- /dev/null +++ b/tests/test_tally_arithmetic/tallies.xml @@ -0,0 +1,21 @@ + + + + 2 2 2 + -160.0 -160.0 -183.0 + 160.0 160.0 183.0 + + + + + + U-235 Pu-239 + nu-fission total + + + + + U-238 U-235 + total fission + + From 1cb7ef8f1cb3bf035e00b6d005df82596e168d08 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 11 Feb 2016 17:21:37 -0500 Subject: [PATCH 285/650] Removed XML files from tally arithmetic test --- tests/test_tally_arithmetic/geometry.xml | 148 ------------ tests/test_tally_arithmetic/inputs_test.dat | 1 - tests/test_tally_arithmetic/materials.xml | 246 -------------------- tests/test_tally_arithmetic/settings.xml | 16 -- tests/test_tally_arithmetic/tallies.xml | 21 -- 5 files changed, 432 deletions(-) delete mode 100644 tests/test_tally_arithmetic/geometry.xml delete mode 100644 tests/test_tally_arithmetic/inputs_test.dat delete mode 100644 tests/test_tally_arithmetic/materials.xml delete mode 100644 tests/test_tally_arithmetic/settings.xml delete mode 100644 tests/test_tally_arithmetic/tallies.xml diff --git a/tests/test_tally_arithmetic/geometry.xml b/tests/test_tally_arithmetic/geometry.xml deleted file mode 100644 index ed66ef8e6b..0000000000 --- a/tests/test_tally_arithmetic/geometry.xml +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1.26 1.26 - 17 17 - -10.71 -10.71 - -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 -1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 1 -1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - - - 1.26 1.26 - 17 17 - -10.71 -10.71 - -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 4 3 3 4 3 3 4 3 3 3 3 3 -3 3 3 4 3 3 3 3 3 3 3 3 3 4 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 4 3 3 4 3 3 4 3 3 4 3 3 4 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 4 3 3 4 3 3 4 3 3 4 3 3 4 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 4 3 3 4 3 3 4 3 3 4 3 3 4 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 4 3 3 3 3 3 3 3 3 3 4 3 3 3 -3 3 3 3 3 4 3 3 4 3 3 4 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - - - 21.42 21.42 - 21 21 - -224.91 -224.91 - -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 6 6 6 6 6 6 6 5 5 5 5 5 5 5 -5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 -5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 -5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 -5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 -5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 -5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 -5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 -5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 -5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 -5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 -5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 -5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 -5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 -5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 -5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 -5 5 5 5 5 5 5 6 6 6 6 6 6 6 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - - - 21.42 21.42 - 21 21 - -224.91 -224.91 - -7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 7 7 8 8 8 8 8 8 8 7 7 7 7 7 7 7 -7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 -7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 -7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 -7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 -7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 -7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 -7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 -7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 -7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 -7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 -7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 -7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 -7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 -7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 -7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 -7 7 7 7 7 7 7 8 8 8 8 8 8 8 7 7 7 7 7 7 7 -7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 - - - - - - - - - - - - - - - - - - - diff --git a/tests/test_tally_arithmetic/inputs_test.dat b/tests/test_tally_arithmetic/inputs_test.dat deleted file mode 100644 index 1b6046f1ae..0000000000 --- a/tests/test_tally_arithmetic/inputs_test.dat +++ /dev/null @@ -1 +0,0 @@ -57384883e37964076aa82c19fa542434331cdb09735d710485b5aa0ca3445d543729e40cb9c7b6a70e7101ef186923eb1ff6315c73b01ff257052838add68fc7 \ No newline at end of file diff --git a/tests/test_tally_arithmetic/materials.xml b/tests/test_tally_arithmetic/materials.xml deleted file mode 100644 index 9454c0d8e6..0000000000 --- a/tests/test_tally_arithmetic/materials.xml +++ /dev/null @@ -1,246 +0,0 @@ - - - 71c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/test_tally_arithmetic/settings.xml b/tests/test_tally_arithmetic/settings.xml deleted file mode 100644 index 64f95a3a46..0000000000 --- a/tests/test_tally_arithmetic/settings.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - 100 - 10 - 5 - - - - -160 -160 -183 160 160 183 - - - - true - - diff --git a/tests/test_tally_arithmetic/tallies.xml b/tests/test_tally_arithmetic/tallies.xml deleted file mode 100644 index ab4d1c37d8..0000000000 --- a/tests/test_tally_arithmetic/tallies.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - 2 2 2 - -160.0 -160.0 -183.0 - 160.0 160.0 183.0 - - - - - - U-235 Pu-239 - nu-fission total - - - - - U-238 U-235 - total fission - - From 9f02388647d31d529d10a4c0e179fcbfab364d4a Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 12 Feb 2016 04:58:11 -0500 Subject: [PATCH 286/650] Implementing minor edits from review on 1/11 by @paulromano --- src/initialize.F90 | 2 +- src/input_xml.F90 | 68 ++++++++------------ src/macroxs_header.F90 | 11 ++-- src/math.F90 | 6 +- src/mgxs_data.F90 | 131 ++++++++++++++++++--------------------- src/nuclide_header.F90 | 10 +-- src/particle_header.F90 | 4 +- src/scattdata_header.F90 | 10 +-- src/source.F90 | 48 +++++++------- 9 files changed, 130 insertions(+), 160 deletions(-) diff --git a/src/initialize.F90 b/src/initialize.F90 index 88a10fb550..d8bbcb0d8c 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -126,7 +126,7 @@ contains if (run_CE) then call same_nuclide_list() else - call same_NuclideMG_list() + call same_nuclidemg_list() end if ! Construct information needed for nuclear data diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 2a21bac215..50e8ca30dc 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -216,8 +216,8 @@ contains end if ! Make sure that either eigenvalue or fixed source was specified - if (.not.check_for_node(doc, "eigenvalue") .and. & - .not.check_for_node(doc, "fixed_source")) then + if (.not. check_for_node(doc, "eigenvalue") .and. & + .not. check_for_node(doc, "fixed_source")) then call fatal_error(" or not specified.") end if @@ -230,7 +230,7 @@ contains call get_node_ptr(doc, "eigenvalue", node_mode) ! Check number of particles - if (.not.check_for_node(node_mode, "particles")) then + if (.not. check_for_node(node_mode, "particles")) then call fatal_error("Need to specify number of particles per generation.") end if @@ -300,7 +300,7 @@ contains call get_node_ptr(doc, "fixed_source", node_mode) ! Check number of particles - if (.not.check_for_node(node_mode, "particles")) then + if (.not. check_for_node(node_mode, "particles")) then call fatal_error("Need to specify number of particles per batch.") end if @@ -2050,9 +2050,9 @@ contains ! READ AND PARSE TAGS ! Check to ensure material has at least one nuclide - if ((.not. check_for_node(node_mat, "nuclide") .and. & - .not. check_for_node(node_mat, "element")) .and. & - (.not. check_for_node(node_mat, "macroscopic"))) then + if (.not. check_for_node(node_mat, "nuclide") .and. & + .not. check_for_node(node_mat, "element") .and. & + .not. check_for_node(node_mat, "macroscopic")) then call fatal_error("No macroscopic data, nuclides or natural elements & &specified on material " // trim(to_str(mat % id))) end if @@ -2061,7 +2061,7 @@ contains ! them as nuclides. This is all really a facade so the user thinks they ! are entering in macroscopic data but the code treats them the same ! as nuclides internally. - ! Get pointer list of XML + ! Get pointer list of XML call get_node_list(node_mat, "macroscopic", node_macro_list) if (get_list_size(node_macro_list) > 1) then call fatal_error("Only one macroscopic object permitted per material, " & @@ -2077,7 +2077,7 @@ contains end if ! Check for cross section - if (.not.check_for_node(node_nuc, "xs")) then + if (.not. check_for_node(node_nuc, "xs")) then if (default_xs == '') then call fatal_error("No cross section specified for macroscopic data & & in material " // trim(to_str(mat % id))) @@ -2130,13 +2130,13 @@ contains call get_list_item(node_nuc_list, j, node_nuc) ! Check for empty name on nuclide - if (.not.check_for_node(node_nuc, "name")) then + if (.not. check_for_node(node_nuc, "name")) then call fatal_error("No name specified on nuclide in material " & // trim(to_str(mat % id))) end if ! Check for cross section - if (.not.check_for_node(node_nuc, "xs")) then + if (.not. check_for_node(node_nuc, "xs")) then if (default_xs == '') then call fatal_error("No cross section specified for nuclide in & &material " // trim(to_str(mat % id))) @@ -2160,8 +2160,8 @@ contains if (units == 'macro') then call list_density % append(ONE) else - if (.not.check_for_node(node_nuc, "ao") .and. & - .not.check_for_node(node_nuc, "wo")) then + if (.not. check_for_node(node_nuc, "ao") .and. & + .not. check_for_node(node_nuc, "wo")) then call fatal_error("No atom or weight percent specified for nuclide " & // trim(name)) elseif (check_for_node(node_nuc, "ao") .and. & @@ -2192,7 +2192,7 @@ contains call get_list_item(node_ele_list, j, node_ele) ! Check for empty name on natural element - if (.not.check_for_node(node_ele, "name")) then + if (.not. check_for_node(node_ele, "name")) then call fatal_error("No name specified on nuclide in material " & // trim(to_str(mat % id))) end if @@ -2212,8 +2212,8 @@ contains ! Check if no atom/weight percents were specified or if both atom and ! weight percents were specified - if (.not.check_for_node(node_ele, "ao") .and. & - .not.check_for_node(node_ele, "wo")) then + if (.not. check_for_node(node_ele, "ao") .and. & + .not. check_for_node(node_ele, "wo")) then call fatal_error("No atom or weight percent specified for element " & // trim(name)) elseif (check_for_node(node_ele, "ao") .and. & @@ -2357,8 +2357,8 @@ contains call get_list_item(node_sab_list, j, node_sab) ! Determine name of S(a,b) table - if (.not.check_for_node(node_sab, "name") .or. & - .not.check_for_node(node_sab, "xs")) then + if (.not. check_for_node(node_sab, "name") .or. & + .not. check_for_node(node_sab, "xs")) then call fatal_error("Need to specify and for S(a,b) & &table.") end if @@ -2588,8 +2588,8 @@ contains end if ! Make sure either upper-right or width was specified - if (.not.check_for_node(node_mesh, "upper_right") .and. & - .not.check_for_node(node_mesh, "width")) then + if (.not. check_for_node(node_mesh, "upper_right") .and. & + .not. check_for_node(node_mesh, "width")) then call fatal_error("Must specify either and on a & &tally mesh.") end if @@ -3377,30 +3377,12 @@ contains case ('n2n', '(n,2n)') t % score_bins(j) = N_2N - ! Disallow for MG mode since data not present - if (.not. run_CE) then - call fatal_error("Cannot tally (n,2n) reaction rate in & - &multi-group mode") - end if - case ('n3n', '(n,3n)') t % score_bins(j) = N_3N - ! Disallow for MG mode since data not present - if (.not. run_CE) then - call fatal_error("Cannot tally (n,3n) reaction rate in & - &multi-group mode") - end if - case ('n4n', '(n,4n)') t % score_bins(j) = N_4N - ! Disallow for MG mode since data not present - if (.not. run_CE) then - call fatal_error("Cannot tally (n,4n) reaction rate in & - &multi-group mode") - end if - case ('absorption') t % score_bins(j) = SCORE_ABSORPTION if (t % find_filter(FILTER_ENERGYOUT) > 0) then @@ -3590,10 +3572,10 @@ contains ! Do a check at the end (instead of for every case) to make sure ! the tallies are compatible with MG mode where we have less detailed ! nuclear data - if (.not. run_CE .and. t % score_bins(j) > 0) then - call fatal_error("Cannot tally " // trim(score_name) // & - " reaction rate in multi-group mode") - end if + if (.not. run_CE .and. t % score_bins(j) > 0) then + call fatal_error("Cannot tally " // trim(score_name) // & + " reaction rate in multi-group mode") + end if end do t % n_score_bins = n_scores @@ -4455,7 +4437,7 @@ contains end if ! determine metastable state - if (.not.check_for_node(node_ace, "metastable")) then + if (.not. check_for_node(node_ace, "metastable")) then listing % metastable = .false. else listing % metastable = .true. diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index 0f838967ea..c435686b5d 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -27,10 +27,7 @@ module macroxs_header subroutine macroxs_init_(this, mat, nuclides, groups, get_kfiss, get_fiss, & max_order, scatt_type, legendre_mu_points, & error_code, error_text) - import MacroXS - import Material - import NuclideMGContainer - import MAX_LINE_LEN + import MacroXS, Material, NuclideMGContainer, MAX_LINE_LEN class(MacroXS), intent(inout) :: this ! The MacroXS to initialize type(Material), pointer, intent(in) :: mat ! base material type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from @@ -383,14 +380,14 @@ contains select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (NuclideAngle) if (npol == -1) then - npol = nuc % Npol - nazi = nuc % Nazi + npol = nuc % n_pol + nazi = nuc % n_azi allocate(this % polar(npol)) this % polar = nuc % polar allocate(this % azimuthal(nazi)) this % azimuthal = nuc % azimuthal else - if ((npol /= nuc % Npol) .or. (nazi /= nuc % Nazi)) then + if ((npol /= nuc % n_pol) .or. (nazi /= nuc % n_azi)) then error_code = 1 error_text = "All Angular Data Must Be Same Length!" end if diff --git a/src/math.F90 b/src/math.F90 index 36c65a2402..c7ede8d2a5 100644 --- a/src/math.F90 +++ b/src/math.F90 @@ -560,6 +560,7 @@ contains !=============================================================================== ! EXPAND_HARMONIC expands a given series of real spherical harmonics !=============================================================================== + pure function expand_harmonic(data, order, uvw) result(val) real(8), intent(in) :: data(:) integer, intent(in) :: order @@ -584,6 +585,7 @@ contains ! EVALUATE_LEGENDRE Find the value of f(x) given a set of Legendre coefficients ! and the value of x !=============================================================================== + pure function evaluate_legendre(data, x) result(val) real(8), intent(in) :: data(:) real(8), intent(in) :: x @@ -591,9 +593,9 @@ contains integer :: l - val = 0.5_8 * data(1) + val = HALF * data(1) do l = 1, size(data) - 1 - val = val + (real(l,8) + 0.5_8) * data(l + 1) * calc_pn(l,x) + val = val + (real(l,8) + HALF) * data(l + 1) * calc_pn(l,x) end do end function evaluate_legendre diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 715b52b132..9fa0aeb2ba 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -125,7 +125,7 @@ contains end select ! Now read in the data specific to the type we just declared - call NuclideMG_init(nuclides_MG(i_nuclide) % obj, node_xsdata, & + call nuclidemg_init(nuclides_MG(i_nuclide) % obj, node_xsdata, & energy_groups, get_kfiss, get_fiss, error_code, & error_text) @@ -169,13 +169,13 @@ contains end subroutine read_mgxs !=============================================================================== -! SAME_NUCLIDE_LIST creates a linked list for each nuclide containing the +! SAME_NUCLIDEMG_LIST creates a linked list for each nuclide containing the ! indices in the nuclides array of all other instances of that nuclide. For ! example, the same nuclide may exist at multiple temperatures resulting ! in multiple entries in the nuclides array for a single zaid number. !=============================================================================== - subroutine same_NuclideMG_list() + subroutine same_nuclidemg_list() integer :: i ! index in nuclides array integer :: j ! index in nuclides array @@ -188,21 +188,21 @@ contains end do end do - end subroutine same_NuclideMG_list + end subroutine same_nuclidemg_list !=============================================================================== ! NUCLIDE_*_INIT reads in the data from the XML file, as already accessed !=============================================================================== - subroutine NuclideMG_init(this, node_xsdata, groups, get_kfiss, get_fiss, & + subroutine nuclidemg_init(this, node_xsdata, groups, get_kfiss, get_fiss, & error_code, error_text) class(NuclideMG), intent(inout) :: this ! Working Object - type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml - integer, intent(in) :: groups ! Number of Energy groups - logical, intent(in) :: get_kfiss ! Need Kappa-Fission? - logical, intent(in) :: get_fiss ! Should we get fiss data? - integer, intent(inout) :: error_code ! Code signifying error - character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print + type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml + integer, intent(in) :: groups ! Number of Energy groups + logical, intent(in) :: get_kfiss ! Need Kappa-Fission? + logical, intent(in) :: get_fiss ! Should we get fiss data? + integer, intent(inout) :: error_code ! Code signifying error + character(MAX_LINE_LEN), intent(inout) :: error_text ! Error to print type(Node), pointer :: node_legendre_mu character(MAX_LINE_LEN) :: temp_str @@ -298,16 +298,16 @@ contains select type(this) type is (NuclideIso) - call NuclideIso_init(this, node_xsdata, groups, get_kfiss, get_fiss, & + call nuclideiso_init(this, node_xsdata, groups, get_kfiss, get_fiss, & error_code, error_text) type is (NuclideAngle) - call NuclideAngle_init(this, node_xsdata, groups, get_kfiss, get_fiss, & + call nuclideangle_init(this, node_xsdata, groups, get_kfiss, get_fiss, & error_code, error_text) end select - end subroutine NuclideMG_init + end subroutine nuclidemg_init - subroutine NuclideIso_init(this, node_xsdata, groups, get_kfiss, get_fiss, & + subroutine nuclideiso_init(this, node_xsdata, groups, get_kfiss, get_fiss, & error_code, error_text) class(NuclideIso), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml @@ -436,10 +436,10 @@ contains this % mult = ONE end if - end subroutine NuclideIso_init + end subroutine nuclideiso_init - subroutine NuclideAngle_init(this, node_xsdata, groups, get_kfiss, get_fiss, & - error_code, error_text) + subroutine nuclideangle_init(this, node_xsdata, groups, get_kfiss, get_fiss, & + error_code, error_text) class(NuclideAngle), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml integer, intent(in) :: groups ! Number of Energy groups @@ -463,7 +463,7 @@ contains end if if (check_for_node(node_xsdata, "num_polar")) then - call get_node_value(node_xsdata, "num_polar", this % Npol) + call get_node_value(node_xsdata, "num_polar", this % n_pol) else error_code = 1 error_text = "num_polar Must Be Provided!" @@ -471,7 +471,7 @@ contains end if if (check_for_node(node_xsdata, "num_azimuthal")) then - call get_node_value(node_xsdata, "num_azimuthal", this % Nazi) + call get_node_value(node_xsdata, "num_azimuthal", this % n_azi) else error_code = 1 error_text = "num_azimuthal Must Be Provided!" @@ -479,17 +479,17 @@ contains end if ! Load angle data, if present (else equally spaced) - allocate(this % polar(this % Npol)) - allocate(this % azimuthal(this % Nazi)) + allocate(this % polar(this % n_pol)) + allocate(this % azimuthal(this % n_azi)) if (check_for_node(node_xsdata, "polar")) then error_code = 1 error_text = "User-Specified polar angle bins not yet supported!" return call get_node_array(node_xsdata, "polar", this % polar) else - dangle = PI / real(this % Npol,8) - do iangle = 1, this % Npol - this % polar(iangle) = (real(iangle,8) - 0.5_8) * dangle + dangle = PI / real(this % n_pol,8) + do iangle = 1, this % n_pol + this % polar(iangle) = (real(iangle,8) - HALF) * dangle end do end if if (check_for_node(node_xsdata, "azimuthal")) then @@ -498,9 +498,9 @@ contains return call get_node_array(node_xsdata, "azimuthal", this % azimuthal) else - dangle = TWO * PI / real(this % Nazi,8) - do iangle = 1, this % Nazi - this % azimuthal(iangle) = -PI + (real(iangle,8) - 0.5_8) * dangle + dangle = TWO * PI / real(this % n_azi,8) + do iangle = 1, this % n_azi + this % azimuthal(iangle) = -PI + (real(iangle,8) - HALF) * dangle end do end if @@ -509,19 +509,19 @@ contains if (check_for_node(node_xsdata, "chi")) then ! Get chi - allocate(temp_arr(groups * this % Nazi * this % Npol)) + allocate(temp_arr(groups * this % n_azi * this % n_pol)) call get_node_array(node_xsdata, "chi", temp_arr) - allocate(this % chi(groups, this % Nazi, this % Npol)) - this % chi = reshape(temp_arr, (/groups, this % Nazi, this % Npol/)) + allocate(this % chi(groups, this % n_azi, this % n_pol)) + this % chi = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) deallocate(temp_arr) ! Get nu_fission (as a vector) if (check_for_node(node_xsdata, "nu_fission")) then - allocate(temp_arr(groups * this % Nazi * this % Npol)) + allocate(temp_arr(groups * this % n_azi * this % n_pol)) call get_node_array(node_xsdata, "nu_fission", temp_arr) - allocate(this % nu_fission(groups, 1, this % Nazi, this % Npol)) - this % nu_fission = reshape(temp_arr, (/groups, 1, this % Nazi, & - this % Npol/)) + allocate(this % nu_fission(groups, 1, this % n_azi, this % n_pol)) + this % nu_fission = reshape(temp_arr, (/groups, 1, this % n_azi, & + this % n_pol/)) deallocate(temp_arr) else error_code = 1 @@ -533,11 +533,11 @@ contains ! Get nu_fission (as a matrix) if (check_for_node(node_xsdata, "nu_fission")) then - allocate(temp_arr(groups * this % Nazi * this % Npol)) + allocate(temp_arr(groups * this % n_azi * this % n_pol)) call get_node_array(node_xsdata, "nu_fission", temp_arr) - allocate(this % nu_fission(groups, groups, this % Nazi, this % Npol)) + allocate(this % nu_fission(groups, groups, this % n_azi, this % n_pol)) this % nu_fission = reshape(temp_arr, (/groups, groups, & - this % Nazi, this % Npol/)) + this % n_azi, this % n_pol/)) deallocate(temp_arr) else error_code = 1 @@ -547,10 +547,10 @@ contains end if if (get_fiss) then if (check_for_node(node_xsdata, "fission")) then - allocate(temp_arr(groups * this % Nazi * this % Npol)) + allocate(temp_arr(groups * this % n_azi * this % n_pol)) call get_node_array(node_xsdata, "fission", temp_arr) - allocate(this % fission(groups, this % Nazi, this % Npol)) - this % fission = reshape(temp_arr, (/groups, this % Nazi, this % Npol/)) + allocate(this % fission(groups, this % n_azi, this % n_pol)) + this % fission = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) deallocate(temp_arr) else error_code = 1 @@ -561,10 +561,10 @@ contains end if if (get_kfiss) then if (check_for_node(node_xsdata, "kappa_fission")) then - allocate(temp_arr(groups * this % Nazi * this % Npol)) + allocate(temp_arr(groups * this % n_azi * this % n_pol)) call get_node_array(node_xsdata, "kappa_fission", temp_arr) - allocate(this % k_fission(groups, this % Nazi, this % Npol)) - this % k_fission = reshape(temp_arr, (/groups, this % Nazi, this % Npol/)) + allocate(this % k_fission(groups, this % n_azi, this % n_pol)) + this % k_fission = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) deallocate(temp_arr) else error_code = 1 @@ -576,10 +576,10 @@ contains end if if (check_for_node(node_xsdata, "absorption")) then - allocate(temp_arr(groups * this % Nazi * this % Npol)) + allocate(temp_arr(groups * this % n_azi * this % n_pol)) call get_node_array(node_xsdata, "absorption", temp_arr) - allocate(this % absorption(groups, this % Nazi, this % Npol)) - this % absorption = reshape(temp_arr, (/groups, this % Nazi, this % Npol/)) + allocate(this % absorption(groups, this % n_azi, this % n_pol)) + this % absorption = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) deallocate(temp_arr) else error_code = 1 @@ -587,12 +587,12 @@ contains return end if - allocate(this % scatter(groups, groups, order_dim, this % Nazi, this % Npol)) + allocate(this % scatter(groups, groups, order_dim, this % n_azi, this % n_pol)) if (check_for_node(node_xsdata, "scatter")) then - allocate(temp_arr(groups * groups * order_dim * this % Nazi * this%Npol)) + allocate(temp_arr(groups * groups * order_dim * this % n_azi * this%n_pol)) call get_node_array(node_xsdata, "scatter", temp_arr) this % scatter = reshape(temp_arr, (/groups, groups, order_dim, & - this%Nazi,this%Npol/)) + this%n_azi,this%n_pol/)) deallocate(temp_arr) else error_code = 1 @@ -601,23 +601,23 @@ contains end if if (check_for_node(node_xsdata, "total")) then - allocate(temp_arr(groups * this % Nazi * this % Npol)) + allocate(temp_arr(groups * this % n_azi * this % n_pol)) call get_node_array(node_xsdata, "total", temp_arr) - allocate(this % total(groups, this % Nazi, this % Npol)) - this % total = reshape(temp_arr, (/groups, this % Nazi, this % Npol/)) + allocate(this % total(groups, this % n_azi, this % n_pol)) + this % total = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) deallocate(temp_arr) else this % total = this % absorption + sum(this%scatter(:,:,1,:,:),dim=1) end if ! Get Mult Data - allocate(this % mult(groups, groups, this % Nazi, this % Npol)) + allocate(this % mult(groups, groups, this % n_azi, this % n_pol)) if (check_for_node(node_xsdata, "multiplicity")) then arr_len = get_arraysize_double(node_xsdata, "multiplicity") - if (arr_len == groups * groups * this % Nazi * this % Npol) then + if (arr_len == groups * groups * this % n_azi * this % n_pol) then allocate(temp_arr(arr_len)) call get_node_array(node_xsdata, "multiplicity", temp_arr) - this % mult = reshape(temp_arr, (/groups, groups, this % Nazi, this % Npol/)) + this % mult = reshape(temp_arr, (/groups, groups, this % n_azi, this % n_pol/)) deallocate(temp_arr) else error_code = 1 @@ -628,7 +628,7 @@ contains this % mult = ONE end if - end subroutine NuclideAngle_init + end subroutine nuclideangle_init !=============================================================================== @@ -643,7 +643,6 @@ contains logical :: get_kfiss, get_fiss integer :: error_code character(MAX_LINE_LEN) :: error_text - integer :: representation integer :: scatt_type integer :: legendre_mu_points @@ -675,19 +674,11 @@ contains ! At the same time, we will find the scattering type, as that will dictate ! how we allocate the scatter object within macroxs legendre_mu_points = nuclides_MG(mat % nuclide(1)) % obj % legendre_mu_points + scatt_type = nuclides_MG(mat % nuclide(1)) % obj % scatt_type select type(nuc => nuclides_MG(mat % nuclide(1)) % obj) type is (NuclideIso) - representation = MGXS_ISOTROPIC - type is (NuclideAngle) - representation = MGXS_ANGLE - end select - scatt_type = nuclides_MG(mat % nuclide(1)) % obj % scatt_type - - ! Now allocate accordingly - select case(representation) - case(MGXS_ISOTROPIC) allocate(MacroXSIso :: macro_xs(i_mat) % obj) - case(MGXS_ANGLE) + type is (NuclideAngle) allocate(MacroXSAngle :: macro_xs(i_mat) % obj) end select @@ -696,9 +687,7 @@ contains scatt_type, legendre_mu_points, & error_code, error_text) ! Handle any errors - if (error_code /= 0) then - call fatal_error(trim(error_text)) - end if + if (error_code /= 0) call fatal_error(trim(error_text)) end do end subroutine create_macro_xs diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index caf0c10729..2f62b86672 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -177,7 +177,7 @@ module nuclide_header type, extends(NuclideMG) :: NuclideAngle - ! Microscopic cross sections. Dimensions are: (Npol, Nazi, Nl, Ng, Ng) + ! Microscopic cross sections. Dimensions are: (n_pol, n_azi, Nl, Ng, Ng) real(8), allocatable :: total(:,:,:) ! total cross section real(8), allocatable :: absorption(:,:,:) ! absorption cross section real(8), allocatable :: scatter(:,:,:,:,:) ! scattering information @@ -188,8 +188,8 @@ module nuclide_header real(8), allocatable :: mult(:,:,:,:) ! Scatter multiplicity (Gout x Gin) ! In all cases, right-most indices are theta, phi - integer :: Npol ! Number of polar angles - integer :: Nazi ! Number of azimuthal angles + integer :: n_pol ! Number of polar angles + integer :: n_azi ! Number of azimuthal angles real(8), allocatable :: polar(:) ! polar angles real(8), allocatable :: azimuthal(:) ! azimuthal angles @@ -476,8 +476,8 @@ module nuclide_header ! Write Basic Nuclide Information call nuclidemg_print(this, unit_) - write(unit_,*) ' # of Polar Angles = ' // trim(to_str(this % Npol)) - write(unit_,*) ' # of Azimuthal Angles = ' // trim(to_str(this % Nazi)) + write(unit_,*) ' # of Polar Angles = ' // trim(to_str(this % n_pol)) + write(unit_,*) ' # of Azimuthal Angles = ' // trim(to_str(this % n_azi)) ! Determine size of mgxs and scattering matrices size_scattmat = (size(this % scatter) + size(this % mult)) * 8 diff --git a/src/particle_header.F90 b/src/particle_header.F90 index 3c687eb02f..bf820ceb35 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -96,8 +96,8 @@ module particle_header contains procedure :: initialize => initialize_particle procedure :: clear => clear_particle - procedure :: initialize_from_source => initialize_from_source - procedure :: create_secondary => create_secondary + procedure :: initialize_from_source + procedure :: create_secondary end type Particle contains diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index 62b382d36c..b9dcdadd41 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -79,7 +79,7 @@ contains ! SCATTDATA_INIT builds the scattdata object !=============================================================================== - subroutine scattdatabase_init(this, order, energy, mult) + subroutine scattdata_init(this, order, energy, mult) class(ScattData), intent(inout) :: this ! Object to work on integer, intent(in) :: order ! Data Order real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix @@ -96,7 +96,7 @@ contains allocate(this % data(order, groups, groups)) this % data = ZERO - end subroutine scattdatabase_init + end subroutine scattdata_init subroutine scattdatalegendre_init(this, order, energy, mult, coeffs) class(ScattDataLegendre), intent(inout) :: this ! Object to work on @@ -105,7 +105,7 @@ contains real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use - call scattdatabase_init(this, order, energy, mult) + call scattdata_init(this, order, energy, mult) this % data = coeffs @@ -123,7 +123,7 @@ contains groups = size(energy,dim=1) - call scattdatabase_init(this, order, energy, mult) + call scattdata_init(this, order, energy, mult) allocate(this % mu(order)) this % dmu = TWO / real(order,8) @@ -175,7 +175,7 @@ contains groups = size(energy,dim=1) - call scattdatabase_init(this, this_order, energy, mult) + call scattdata_init(this, this_order, energy, mult) allocate(this % mu(this_order)) this % dmu = TWO / real(this_order - 1) diff --git a/src/source.F90 b/src/source.F90 index 1fb9de5c58..0a7fa790d5 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -110,7 +110,7 @@ contains integer, save :: num_resamples = 0 ! Number of resamples encountered ! Set weight to one by default - site%wgt = ONE + site % wgt = ONE ! Set the random number generator to the source stream. call prn_set_stream(STREAM_SOURCE) @@ -118,10 +118,10 @@ contains ! Sample from among multiple source distributions n_source = size(external_source) if (n_source > 1) then - r(1) = prn()*sum(external_source(:)%strength) + r(1) = prn()*sum(external_source(:) % strength) c = ZERO do i = 1, n_source - c = c + external_source(i)%strength + c = c + external_source(i) % strength if (r(1) < c) exit end do else @@ -132,14 +132,14 @@ contains found = .false. do while (.not.found) ! Set particle defaults - call p%initialize() + call p % initialize() ! Sample spatial distribution - site%xyz(:) = external_source(i)%space%sample() + site % xyz(:) = external_source(i) % space % sample() ! Fill p with needed data - p%coord(1)%xyz(:) = site%xyz - p%coord(1)%uvw(:) = [ ONE, ZERO, ZERO ] + p % coord(1) % xyz(:) = site % xyz + p % coord(1) % uvw(:) = [ ONE, ZERO, ZERO ] ! Now search to see if location exists in geometry call find_cell(p, found) @@ -152,27 +152,27 @@ contains end if ! Check if spatial site is in fissionable material - select type (space => external_source(i)%space) + select type (space => external_source(i) % space) type is (SpatialBox) - if (space%only_fissionable) then - if (p%material == MATERIAL_VOID) then + if (space % only_fissionable) then + if (p % material == MATERIAL_VOID) then found = .false. - elseif (.not. materials(p%material)%fissionable) then + elseif (.not. materials(p % material) % fissionable) then found = .false. end if end if end select end do - call p%clear() + call p % clear() ! Sample angle - site%uvw(:) = external_source(i)%angle%sample() + site % uvw(:) = external_source(i) % angle % sample() ! Check for monoenergetic source above maximum neutron energy - select type (energy => external_source(i)%energy) + select type (energy => external_source(i) % energy) type is (Discrete) - if (any(energy%x >= energy_max_neutron)) then + if (any(energy % x >= energy_max_neutron)) then call fatal_error("Source energy above range of energies of at least & &one cross section table") end if @@ -180,23 +180,23 @@ contains do ! Sample energy spectrum - site%E = external_source(i)%energy%sample() + site % E = external_source(i) % energy % sample() ! resample if energy is greater than maximum neutron energy - if (site%E < energy_max_neutron) exit + if (site % E < energy_max_neutron) exit end do ! Set delayed group - site%delayed_group = 0 + site % delayed_group = 0 - ! If running in MG, convert site%E to group + ! If running in MG, convert site % E to group if (.not. run_CE) then - if (site%E <= energy_bins(1)) then - site%g = 1 - else if (site%E > energy_bins(energy_groups + 1)) then - site%g = energy_groups + if (site % E <= energy_bins(1)) then + site % g = 1 + else if (site % E > energy_bins(energy_groups + 1)) then + site % g = energy_groups else - site%g = binary_search(energy_bins, energy_groups + 1, site%E) + site % g = binary_search(energy_bins, energy_groups + 1, site % E) end if end if From 02a9441522163bd0092285e6e7241018a7ee723b Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 12 Feb 2016 05:22:18 -0500 Subject: [PATCH 287/650] Fixes to move nuclidemg_init routines to the actual class, now that circular dependencies are gone --- src/mgxs_data.F90 | 454 +---------------------------------------- src/nuclide_header.F90 | 417 ++++++++++++++++++++++++++++++++++++- 2 files changed, 412 insertions(+), 459 deletions(-) diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 9fa0aeb2ba..796269151c 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -35,8 +35,7 @@ contains type(Node), pointer :: node_xsdata type(NodeList), pointer :: node_xsdata_list => null() logical :: file_exists - integer :: error_code - character(MAX_LINE_LEN) :: error_text, temp_str + character(MAX_LINE_LEN) :: temp_str logical :: get_kfiss, get_fiss integer :: l @@ -125,18 +124,12 @@ contains end select ! Now read in the data specific to the type we just declared - call nuclidemg_init(nuclides_MG(i_nuclide) % obj, node_xsdata, & - energy_groups, get_kfiss, get_fiss, error_code, & - error_text) + call nuclides_MG(i_nuclide) % obj % init(node_xsdata, energy_groups, & + get_kfiss, get_fiss) ! Keep track of what listing is associated with this nuclide nuclides_MG(i_nuclide) % obj % listing = i_listing - ! Handle any errors - if (error_code /= 0) then - call fatal_error(trim(error_text)) - end if - ! Add name and alias to dictionary call already_read % add(name) call already_read % add(alias) @@ -190,447 +183,6 @@ contains end subroutine same_nuclidemg_list -!=============================================================================== -! NUCLIDE_*_INIT reads in the data from the XML file, as already accessed -!=============================================================================== - - subroutine nuclidemg_init(this, node_xsdata, groups, get_kfiss, get_fiss, & - error_code, error_text) - class(NuclideMG), intent(inout) :: this ! Working Object - type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml - integer, intent(in) :: groups ! Number of Energy groups - logical, intent(in) :: get_kfiss ! Need Kappa-Fission? - logical, intent(in) :: get_fiss ! Should we get fiss data? - integer, intent(inout) :: error_code ! Code signifying error - character(MAX_LINE_LEN), intent(inout) :: error_text ! Error to print - - type(Node), pointer :: node_legendre_mu - character(MAX_LINE_LEN) :: temp_str - logical :: enable_leg_mu - - ! Initialize error data - error_code = 0 - error_text = '' - - ! Load the data - call get_node_value(node_xsdata, "name", this % name) - this % name = to_lower(this % name) - if (check_for_node(node_xsdata, "kT")) then - call get_node_value(node_xsdata, "kT", this % kT) - else - this % kT = ZERO - end if - if (check_for_node(node_xsdata, "zaid")) then - call get_node_value(node_xsdata, "zaid", this % zaid) - else - this % zaid = -1 - end if - if (check_for_node(node_xsdata, "scatt_type")) then - call get_node_value(node_xsdata, "scatt_type", temp_str) - temp_str = trim(to_lower(temp_str)) - if (temp_str == 'legendre') then - this % scatt_type = ANGLE_LEGENDRE - else if (temp_str == 'histogram') then - this % scatt_type = ANGLE_HISTOGRAM - else if (temp_str == 'tabular') then - this % scatt_type = ANGLE_TABULAR - else - error_code = 1 - error_text = "Invalid Scatt Type Option!" - return - end if - else - this % scatt_type = ANGLE_LEGENDRE - end if - - if (check_for_node(node_xsdata, "order")) then - call get_node_value(node_xsdata, "order", this % order) - else - error_code = 1 - error_text = "Order Must Be Provided!" - return - end if - - ! Get scattering treatment - if (check_for_node(node_xsdata, "tabular_legendre")) then - call get_node_ptr(node_xsdata, "tabular_legendre", node_legendre_mu) - if (check_for_node(node_legendre_mu, "enable")) then - call get_node_value(node_legendre_mu, "enable", temp_str) - temp_str = trim(to_lower(temp_str)) - if (temp_str == 'true' .or. temp_str == '1') then - enable_leg_mu = .true. - elseif (temp_str == 'false' .or. temp_str == '0') then - enable_leg_mu = .false. - this % legendre_mu_points = 1 - else - call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) - end if - else - enable_leg_mu = .true. - this % legendre_mu_points = 33 - end if - if (enable_leg_mu .and. & - check_for_node(node_legendre_mu, "num_points")) then - call get_node_value(node_legendre_mu, "num_points", & - this % legendre_mu_points) - if (this % legendre_mu_points <= 0) then - call fatal_error("num_points element must be positive and non-zero!") - end if - this % legendre_mu_points = -1 * this % legendre_mu_points - end if - else - this % legendre_mu_points = 1 - end if - - if (check_for_node(node_xsdata, "fissionable")) then - call get_node_value(node_xsdata, "fissionable", temp_str) - temp_str = to_lower(temp_str) - if (trim(temp_str) == 'true' .or. trim(temp_str) == '1') then - this % fissionable = .true. - else - this % fissionable = .false. - end if - else - error_code = 1 - error_text = "Fissionable element must be set!" - return - end if - - select type(this) - type is (NuclideIso) - call nuclideiso_init(this, node_xsdata, groups, get_kfiss, get_fiss, & - error_code, error_text) - type is (NuclideAngle) - call nuclideangle_init(this, node_xsdata, groups, get_kfiss, get_fiss, & - error_code, error_text) - end select - - end subroutine nuclidemg_init - - subroutine nuclideiso_init(this, node_xsdata, groups, get_kfiss, get_fiss, & - error_code, error_text) - class(NuclideIso), intent(inout) :: this ! Working Object - type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml - integer, intent(in) :: groups ! Number of Energy groups - logical, intent(in) :: get_kfiss ! Need Kappa-Fission? - logical, intent(in) :: get_fiss ! Need fiss data? - integer, intent(inout) :: error_code ! Code signifying error - character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print - - real(8), allocatable :: temp_arr(:) - integer :: arr_len - integer :: order_dim - - ! Load the more specific data - if (this % fissionable) then - - if (check_for_node(node_xsdata, "chi")) then - ! Get chi - allocate(this % chi(groups)) - call get_node_array(node_xsdata, "chi", this % chi) - - ! Get nu_fission (as a vector) - if (check_for_node(node_xsdata, "nu_fission")) then - allocate(temp_arr(groups * 1)) - call get_node_array(node_xsdata, "nu_fission", temp_arr) - allocate(this % nu_fission(groups, 1)) - this % nu_fission = reshape(temp_arr, (/groups, 1/)) - deallocate(temp_arr) - else - error_code = 1 - error_text = "If fissionable, must provide nu_fission!" - return - end if - - else - ! Get nu_fission (as a matrix) - if (check_for_node(node_xsdata, "nu_fission")) then - - allocate(temp_arr(groups*groups)) - call get_node_array(node_xsdata, "nu_fission", temp_arr) - allocate(this % nu_fission(groups, groups)) - this % nu_fission = reshape(temp_arr, (/groups, groups/)) - deallocate(temp_arr) - else - error_code = 1 - error_text = "If fissionable, must provide nu_fission!" - return - end if - end if - if (get_fiss) then - allocate(this % fission(groups)) - if (check_for_node(node_xsdata, "fission")) then - call get_node_array(node_xsdata, "fission", this % fission) - else - error_code = 1 - error_text = "Fission data missing, required due to fission& - & tallies in tallies.xml file!" - return - end if - end if - if (get_kfiss) then - allocate(this % k_fission(groups)) - if (check_for_node(node_xsdata, "kappa_fission")) then - call get_node_array(node_xsdata, "kappa_fission", this % k_fission) - else - error_code = 1 - error_text = "kappa_fission data missing, required due to & - &kappa-fission tallies in tallies.xml file!" - return - end if - end if - end if - - allocate(this % absorption(groups)) - if (check_for_node(node_xsdata, "absorption")) then - call get_node_array(node_xsdata, "absorption", this % absorption) - else - error_code = 1 - error_text = "Must provide absorption!" - return - end if - - if (this % scatt_type == ANGLE_LEGENDRE) then - order_dim = this % order + 1 - else if (this % scatt_type == ANGLE_HISTOGRAM) then - order_dim = this % order - else if (this % scatt_type == ANGLE_TABULAR) then - order_dim = this % order - end if - - allocate(this % scatter(groups, groups, order_dim)) - if (check_for_node(node_xsdata, "scatter")) then - allocate(temp_arr(groups * groups * order_dim)) - call get_node_array(node_xsdata, "scatter", temp_arr) - this % scatter = reshape(temp_arr, (/groups, groups, order_dim/)) - deallocate(temp_arr) - else - error_code = 1 - error_text = "Must provide scatter!" - return - end if - - - allocate(this % total(groups)) - if (check_for_node(node_xsdata, "total")) then - call get_node_array(node_xsdata, "total", this % total) - else - this % total = this % absorption + sum(this%scatter(:,:,1),dim=1) - end if - - ! Get Mult Data - allocate(this % mult(groups, groups)) - if (check_for_node(node_xsdata, "multiplicity")) then - arr_len = get_arraysize_double(node_xsdata, "multiplicity") - if (arr_len == groups * groups) then - allocate(temp_arr(arr_len)) - call get_node_array(node_xsdata, "multiplicity", temp_arr) - this % mult = reshape(temp_arr, (/groups, groups/)) - deallocate(temp_arr) - else - error_code = 1 - error_text = "Multiplicity Length Not Same as number of groups squared!" - return - end if - else - this % mult = ONE - end if - - end subroutine nuclideiso_init - - subroutine nuclideangle_init(this, node_xsdata, groups, get_kfiss, get_fiss, & - error_code, error_text) - class(NuclideAngle), intent(inout) :: this ! Working Object - type(Node), pointer, intent(in) :: node_xsdata ! Data from data.xml - integer, intent(in) :: groups ! Number of Energy groups - logical, intent(in) :: get_kfiss ! Need Kappa-Fission? - logical, intent(in) :: get_fiss ! Should we get fiss data? - integer, intent(inout) :: error_code ! Code signifying error - character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print - - real(8), allocatable :: temp_arr(:) - integer :: arr_len - real(8) :: dangle - integer :: iangle - integer :: order_dim - - if (this % scatt_type == ANGLE_LEGENDRE) then - order_dim = this % order + 1 - else if (this % scatt_type == ANGLE_HISTOGRAM) then - order_dim = this % order - else if (this % scatt_type == ANGLE_TABULAR) then - order_dim = this % order - end if - - if (check_for_node(node_xsdata, "num_polar")) then - call get_node_value(node_xsdata, "num_polar", this % n_pol) - else - error_code = 1 - error_text = "num_polar Must Be Provided!" - return - end if - - if (check_for_node(node_xsdata, "num_azimuthal")) then - call get_node_value(node_xsdata, "num_azimuthal", this % n_azi) - else - error_code = 1 - error_text = "num_azimuthal Must Be Provided!" - return - end if - - ! Load angle data, if present (else equally spaced) - allocate(this % polar(this % n_pol)) - allocate(this % azimuthal(this % n_azi)) - if (check_for_node(node_xsdata, "polar")) then - error_code = 1 - error_text = "User-Specified polar angle bins not yet supported!" - return - call get_node_array(node_xsdata, "polar", this % polar) - else - dangle = PI / real(this % n_pol,8) - do iangle = 1, this % n_pol - this % polar(iangle) = (real(iangle,8) - HALF) * dangle - end do - end if - if (check_for_node(node_xsdata, "azimuthal")) then - error_code = 1 - error_text = "User-Specified azimuthal angle bins not yet supported!" - return - call get_node_array(node_xsdata, "azimuthal", this % azimuthal) - else - dangle = TWO * PI / real(this % n_azi,8) - do iangle = 1, this % n_azi - this % azimuthal(iangle) = -PI + (real(iangle,8) - HALF) * dangle - end do - end if - - ! Load the more specific data - if (this % fissionable) then - - if (check_for_node(node_xsdata, "chi")) then - ! Get chi - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata, "chi", temp_arr) - allocate(this % chi(groups, this % n_azi, this % n_pol)) - this % chi = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) - deallocate(temp_arr) - - ! Get nu_fission (as a vector) - if (check_for_node(node_xsdata, "nu_fission")) then - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata, "nu_fission", temp_arr) - allocate(this % nu_fission(groups, 1, this % n_azi, this % n_pol)) - this % nu_fission = reshape(temp_arr, (/groups, 1, this % n_azi, & - this % n_pol/)) - deallocate(temp_arr) - else - error_code = 1 - error_text = "If fissionable, must provide nu_fission!" - return - end if - - else - ! Get nu_fission (as a matrix) - if (check_for_node(node_xsdata, "nu_fission")) then - - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata, "nu_fission", temp_arr) - allocate(this % nu_fission(groups, groups, this % n_azi, this % n_pol)) - this % nu_fission = reshape(temp_arr, (/groups, groups, & - this % n_azi, this % n_pol/)) - deallocate(temp_arr) - else - error_code = 1 - error_text = "If fissionable, must provide nu_fission!" - return - end if - end if - if (get_fiss) then - if (check_for_node(node_xsdata, "fission")) then - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata, "fission", temp_arr) - allocate(this % fission(groups, this % n_azi, this % n_pol)) - this % fission = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) - deallocate(temp_arr) - else - error_code = 1 - error_text = "Fission data missing, required due to fission& - & tallies in tallies.xml file!" - return - end if - end if - if (get_kfiss) then - if (check_for_node(node_xsdata, "kappa_fission")) then - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata, "kappa_fission", temp_arr) - allocate(this % k_fission(groups, this % n_azi, this % n_pol)) - this % k_fission = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) - deallocate(temp_arr) - else - error_code = 1 - error_text = "kappa_fission data missing, required due to & - &kappa-fission tallies in tallies.xml file!" - return - end if - end if - end if - - if (check_for_node(node_xsdata, "absorption")) then - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata, "absorption", temp_arr) - allocate(this % absorption(groups, this % n_azi, this % n_pol)) - this % absorption = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) - deallocate(temp_arr) - else - error_code = 1 - error_text = "Must provide absorption!" - return - end if - - allocate(this % scatter(groups, groups, order_dim, this % n_azi, this % n_pol)) - if (check_for_node(node_xsdata, "scatter")) then - allocate(temp_arr(groups * groups * order_dim * this % n_azi * this%n_pol)) - call get_node_array(node_xsdata, "scatter", temp_arr) - this % scatter = reshape(temp_arr, (/groups, groups, order_dim, & - this%n_azi,this%n_pol/)) - deallocate(temp_arr) - else - error_code = 1 - error_text = "Must provide scatter!" - return - end if - - if (check_for_node(node_xsdata, "total")) then - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata, "total", temp_arr) - allocate(this % total(groups, this % n_azi, this % n_pol)) - this % total = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) - deallocate(temp_arr) - else - this % total = this % absorption + sum(this%scatter(:,:,1,:,:),dim=1) - end if - - ! Get Mult Data - allocate(this % mult(groups, groups, this % n_azi, this % n_pol)) - if (check_for_node(node_xsdata, "multiplicity")) then - arr_len = get_arraysize_double(node_xsdata, "multiplicity") - if (arr_len == groups * groups * this % n_azi * this % n_pol) then - allocate(temp_arr(arr_len)) - call get_node_array(node_xsdata, "multiplicity", temp_arr) - this % mult = reshape(temp_arr, (/groups, groups, this % n_azi, this % n_pol/)) - deallocate(temp_arr) - else - error_code = 1 - error_text = "Multiplicity Length Does Not Match!" - return - end if - else - this % mult = ONE - end if - - end subroutine nuclideangle_init - - !=============================================================================== ! CREATE_MACRO_XS generates the macroscopic x/s from the microscopic input data !=============================================================================== diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 2f62b86672..7569d9ea80 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -5,10 +5,11 @@ module nuclide_header use ace_header use constants use endf, only: reaction_name + use error, only: fatal_error use list_header, only: ListInt use math, only: evaluate_legendre use string - + use xml_interface implicit none !=============================================================================== @@ -31,7 +32,7 @@ module nuclide_header logical :: fissionable ! nuclide is fissionable? contains - procedure(print_nuclide_), deferred :: print ! Writes nuclide info + procedure(print_nuclide_), deferred :: print ! Writes nuclide info end type Nuclide abstract interface @@ -114,12 +115,23 @@ module nuclide_header ! Legendre distribs, -1 if sample with the ! Legendres themselves contains - procedure(nuclidemg_get_xs), deferred :: get_xs ! Get the xs - procedure(nuclide_calc_f_), deferred :: calc_f ! Calculates f, given mu + procedure(nuclidemg_init_), deferred :: init ! Initialize the data + procedure(nuclidemg_get_xs_), deferred :: get_xs ! Get the requested xs + procedure(nuclidemg_calc_f_), deferred :: calc_f ! Calculates f, given mu end type NuclideMG abstract interface - function nuclidemg_get_xs(this, g, xstype, gout, uvw, mu, i_azi, i_pol) & + + subroutine nuclidemg_init_(this, node_xsdata, groups, get_kfiss, get_fiss) + import NuclideMG, Node + class(NuclideMG), intent(inout) :: this ! Working Object + type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml + integer, intent(in) :: groups ! Number of Energy groups + logical, intent(in) :: get_kfiss ! Need Kappa-Fission? + logical, intent(in) :: get_fiss ! Should we get fiss data? + end subroutine nuclidemg_init_ + + function nuclidemg_get_xs_(this, g, xstype, gout, uvw, mu, i_azi, i_pol) & result(xs) import NuclideMG class(NuclideMG), intent(in) :: this @@ -131,9 +143,9 @@ module nuclide_header integer, optional, intent(in) :: i_azi ! Azimuthal Index integer, optional, intent(in) :: i_pol ! Polar Index real(8) :: xs ! Resultant xs - end function nuclidemg_get_xs + end function nuclidemg_get_xs_ - pure function nuclide_calc_f_(this, gin, gout, mu, uvw, i_azi, i_pol) result(f) + pure function nuclidemg_calc_f_(this, gin, gout, mu, uvw, i_azi, i_pol) result(f) import NuclideMG class(NuclideMG), intent(in) :: this integer, intent(in) :: gin ! Incoming Energy Group @@ -144,7 +156,7 @@ module nuclide_header integer, intent(in), optional :: i_pol ! Outgoing Energy Group real(8) :: f ! Return value of f(mu) - end function nuclide_calc_f_ + end function nuclidemg_calc_f_ end interface !=============================================================================== @@ -165,6 +177,7 @@ module nuclide_header real(8), allocatable :: mult(:,:) ! Scatter multiplicity (Gout x Gin) contains + procedure :: init => nuclideiso_init ! Initialize Nuclidic MGXS Data procedure :: print => nuclideiso_print ! Writes nuclide info procedure :: get_xs => nuclideiso_get_xs ! Gets Size of Data w/in Object procedure :: calc_f => nuclideiso_calc_f ! Calcs f given mu @@ -194,6 +207,7 @@ module nuclide_header real(8), allocatable :: azimuthal(:) ! azimuthal angles contains + procedure :: init => nuclideangle_init ! Initialize Nuclidic MGXS Data procedure :: print => nuclideangle_print ! Gets Size of Data w/in Object procedure :: get_xs => nuclideangle_get_xs ! Gets Size of Data w/in Object procedure :: calc_f => nuclideangle_calc_f ! Calcs f given mu @@ -282,6 +296,393 @@ module nuclide_header contains +!=============================================================================== +! NUCLIDE_*_INIT reads in the data from the XML file, as already accessed +!=============================================================================== + + subroutine nuclidemg_init(this, node_xsdata, groups, get_kfiss, get_fiss) + class(NuclideMG), intent(inout) :: this ! Working Object + type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml + integer, intent(in) :: groups ! Number of Energy groups + logical, intent(in) :: get_kfiss ! Need Kappa-Fission? + logical, intent(in) :: get_fiss ! Should we get fiss data? + + type(Node), pointer :: node_legendre_mu + character(MAX_LINE_LEN) :: temp_str + logical :: enable_leg_mu + + ! Load the data + call get_node_value(node_xsdata, "name", this % name) + this % name = to_lower(this % name) + if (check_for_node(node_xsdata, "kT")) then + call get_node_value(node_xsdata, "kT", this % kT) + else + this % kT = ZERO + end if + if (check_for_node(node_xsdata, "zaid")) then + call get_node_value(node_xsdata, "zaid", this % zaid) + else + this % zaid = -1 + end if + if (check_for_node(node_xsdata, "scatt_type")) then + call get_node_value(node_xsdata, "scatt_type", temp_str) + temp_str = trim(to_lower(temp_str)) + if (temp_str == 'legendre') then + this % scatt_type = ANGLE_LEGENDRE + else if (temp_str == 'histogram') then + this % scatt_type = ANGLE_HISTOGRAM + else if (temp_str == 'tabular') then + this % scatt_type = ANGLE_TABULAR + else + call fatal_error("Invalid Scatt Type Option!") + end if + else + this % scatt_type = ANGLE_LEGENDRE + end if + + if (check_for_node(node_xsdata, "order")) then + call get_node_value(node_xsdata, "order", this % order) + else + call fatal_error("Order Must Be Provided!") + end if + + ! Get scattering treatment + if (check_for_node(node_xsdata, "tabular_legendre")) then + call get_node_ptr(node_xsdata, "tabular_legendre", node_legendre_mu) + if (check_for_node(node_legendre_mu, "enable")) then + call get_node_value(node_legendre_mu, "enable", temp_str) + temp_str = trim(to_lower(temp_str)) + if (temp_str == 'true' .or. temp_str == '1') then + enable_leg_mu = .true. + elseif (temp_str == 'false' .or. temp_str == '0') then + enable_leg_mu = .false. + this % legendre_mu_points = 1 + else + call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) + end if + else + enable_leg_mu = .true. + this % legendre_mu_points = 33 + end if + if (enable_leg_mu .and. & + check_for_node(node_legendre_mu, "num_points")) then + call get_node_value(node_legendre_mu, "num_points", & + this % legendre_mu_points) + if (this % legendre_mu_points <= 0) then + call fatal_error("num_points element must be positive and non-zero!") + end if + this % legendre_mu_points = -1 * this % legendre_mu_points + end if + else + this % legendre_mu_points = 1 + end if + + if (check_for_node(node_xsdata, "fissionable")) then + call get_node_value(node_xsdata, "fissionable", temp_str) + temp_str = to_lower(temp_str) + if (trim(temp_str) == 'true' .or. trim(temp_str) == '1') then + this % fissionable = .true. + else + this % fissionable = .false. + end if + else + call fatal_error("Fissionable element must be set!") + end if + + end subroutine nuclidemg_init + + subroutine nuclideiso_init(this, node_xsdata, groups, get_kfiss, get_fiss) + class(NuclideIso), intent(inout) :: this ! Working Object + type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml + integer, intent(in) :: groups ! Number of Energy groups + logical, intent(in) :: get_kfiss ! Need Kappa-Fission? + logical, intent(in) :: get_fiss ! Need fiss data? + + real(8), allocatable :: temp_arr(:) + integer :: arr_len + integer :: order_dim + + ! Call generic data gathering routine + call nuclidemg_init(this, node_xsdata, groups, get_kfiss, get_fiss) + + ! Load the more specific data + if (this % fissionable) then + + if (check_for_node(node_xsdata, "chi")) then + ! Get chi + allocate(this % chi(groups)) + call get_node_array(node_xsdata, "chi", this % chi) + + ! Get nu_fission (as a vector) + if (check_for_node(node_xsdata, "nu_fission")) then + allocate(temp_arr(groups * 1)) + call get_node_array(node_xsdata, "nu_fission", temp_arr) + allocate(this % nu_fission(groups, 1)) + this % nu_fission = reshape(temp_arr, (/groups, 1/)) + deallocate(temp_arr) + else + call fatal_error("If fissionable, must provide nu_fission!") + end if + + else + ! Get nu_fission (as a matrix) + if (check_for_node(node_xsdata, "nu_fission")) then + + allocate(temp_arr(groups*groups)) + call get_node_array(node_xsdata, "nu_fission", temp_arr) + allocate(this % nu_fission(groups, groups)) + this % nu_fission = reshape(temp_arr, (/groups, groups/)) + deallocate(temp_arr) + else + call fatal_error("If fissionable, must provide nu_fission!") + end if + end if + if (get_fiss) then + allocate(this % fission(groups)) + if (check_for_node(node_xsdata, "fission")) then + call get_node_array(node_xsdata, "fission", this % fission) + else + call fatal_error("Fission data missing, required due to fission& + & tallies in tallies.xml file!") + end if + end if + if (get_kfiss) then + allocate(this % k_fission(groups)) + if (check_for_node(node_xsdata, "kappa_fission")) then + call get_node_array(node_xsdata, "kappa_fission", this % k_fission) + else + call fatal_error("kappa_fission data missing, required due to & + &kappa-fission tallies in tallies.xml file!") + end if + end if + end if + + allocate(this % absorption(groups)) + if (check_for_node(node_xsdata, "absorption")) then + call get_node_array(node_xsdata, "absorption", this % absorption) + else + call fatal_error("Must provide absorption!") + end if + + if (this % scatt_type == ANGLE_LEGENDRE) then + order_dim = this % order + 1 + else if (this % scatt_type == ANGLE_HISTOGRAM) then + order_dim = this % order + else if (this % scatt_type == ANGLE_TABULAR) then + order_dim = this % order + end if + + allocate(this % scatter(groups, groups, order_dim)) + if (check_for_node(node_xsdata, "scatter")) then + allocate(temp_arr(groups * groups * order_dim)) + call get_node_array(node_xsdata, "scatter", temp_arr) + this % scatter = reshape(temp_arr, (/groups, groups, order_dim/)) + deallocate(temp_arr) + else + call fatal_error("Must provide scatter!") + return + end if + + + allocate(this % total(groups)) + if (check_for_node(node_xsdata, "total")) then + call get_node_array(node_xsdata, "total", this % total) + else + this % total = this % absorption + sum(this%scatter(:,:,1),dim=1) + end if + + ! Get Mult Data + allocate(this % mult(groups, groups)) + if (check_for_node(node_xsdata, "multiplicity")) then + arr_len = get_arraysize_double(node_xsdata, "multiplicity") + if (arr_len == groups * groups) then + allocate(temp_arr(arr_len)) + call get_node_array(node_xsdata, "multiplicity", temp_arr) + this % mult = reshape(temp_arr, (/groups, groups/)) + deallocate(temp_arr) + else + call fatal_error("Multiplicity length not same as number of groups& + & squared!") + return + end if + else + this % mult = ONE + end if + + end subroutine nuclideiso_init + + subroutine nuclideangle_init(this, node_xsdata, groups, get_kfiss, get_fiss) + class(NuclideAngle), intent(inout) :: this ! Working Object + type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml + integer, intent(in) :: groups ! Number of Energy groups + logical, intent(in) :: get_kfiss ! Need Kappa-Fission? + logical, intent(in) :: get_fiss ! Should we get fiss data? + + real(8), allocatable :: temp_arr(:) + integer :: arr_len + real(8) :: dangle + integer :: iangle + integer :: order_dim + + ! Call generic data gathering routine + call nuclidemg_init(this, node_xsdata, groups, get_kfiss, get_fiss) + + if (this % scatt_type == ANGLE_LEGENDRE) then + order_dim = this % order + 1 + else if (this % scatt_type == ANGLE_HISTOGRAM) then + order_dim = this % order + else if (this % scatt_type == ANGLE_TABULAR) then + order_dim = this % order + end if + + if (check_for_node(node_xsdata, "num_polar")) then + call get_node_value(node_xsdata, "num_polar", this % n_pol) + else + call fatal_error("num_polar Must Be Provided!") + end if + + if (check_for_node(node_xsdata, "num_azimuthal")) then + call get_node_value(node_xsdata, "num_azimuthal", this % n_azi) + else + call fatal_error("num_azimuthal Must Be Provided!") + end if + + ! Load angle data, if present (else equally spaced) + allocate(this % polar(this % n_pol)) + allocate(this % azimuthal(this % n_azi)) + if (check_for_node(node_xsdata, "polar")) then + call fatal_error("User-Specified polar angle bins not yet supported!") + ! When this feature is supported, this line will be activated + call get_node_array(node_xsdata, "polar", this % polar) + else + dangle = PI / real(this % n_pol,8) + do iangle = 1, this % n_pol + this % polar(iangle) = (real(iangle,8) - HALF) * dangle + end do + end if + if (check_for_node(node_xsdata, "azimuthal")) then + call fatal_error("User-Specified azimuthal angle bins not yet supported!") + ! When this feature is supported, this line will be activated + call get_node_array(node_xsdata, "azimuthal", this % azimuthal) + else + dangle = TWO * PI / real(this % n_azi,8) + do iangle = 1, this % n_azi + this % azimuthal(iangle) = -PI + (real(iangle,8) - HALF) * dangle + end do + end if + + ! Load the more specific data + if (this % fissionable) then + + if (check_for_node(node_xsdata, "chi")) then + ! Get chi + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata, "chi", temp_arr) + allocate(this % chi(groups, this % n_azi, this % n_pol)) + this % chi = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) + deallocate(temp_arr) + + ! Get nu_fission (as a vector) + if (check_for_node(node_xsdata, "nu_fission")) then + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata, "nu_fission", temp_arr) + allocate(this % nu_fission(groups, 1, this % n_azi, this % n_pol)) + this % nu_fission = reshape(temp_arr, (/groups, 1, this % n_azi, & + this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("If fissionable, must provide nu_fission!") + end if + + else + ! Get nu_fission (as a matrix) + if (check_for_node(node_xsdata, "nu_fission")) then + + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata, "nu_fission", temp_arr) + allocate(this % nu_fission(groups, groups, this % n_azi, this % n_pol)) + this % nu_fission = reshape(temp_arr, (/groups, groups, & + this % n_azi, this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("If fissionable, must provide nu_fission!") + end if + end if + if (get_fiss) then + if (check_for_node(node_xsdata, "fission")) then + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata, "fission", temp_arr) + allocate(this % fission(groups, this % n_azi, this % n_pol)) + this % fission = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("Fission data missing, required due to fission& + & tallies in tallies.xml file!") + end if + end if + if (get_kfiss) then + if (check_for_node(node_xsdata, "kappa_fission")) then + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata, "kappa_fission", temp_arr) + allocate(this % k_fission(groups, this % n_azi, this % n_pol)) + this % k_fission = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("kappa_fission data missing, required due to & + &kappa-fission tallies in tallies.xml file!") + end if + end if + end if + + if (check_for_node(node_xsdata, "absorption")) then + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata, "absorption", temp_arr) + allocate(this % absorption(groups, this % n_azi, this % n_pol)) + this % absorption = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("Must provide absorption!") + end if + + allocate(this % scatter(groups, groups, order_dim, this % n_azi, this % n_pol)) + if (check_for_node(node_xsdata, "scatter")) then + allocate(temp_arr(groups * groups * order_dim * this % n_azi * this%n_pol)) + call get_node_array(node_xsdata, "scatter", temp_arr) + this % scatter = reshape(temp_arr, (/groups, groups, order_dim, & + this%n_azi,this%n_pol/)) + deallocate(temp_arr) + else + call fatal_error("Must provide scatter!") + end if + + if (check_for_node(node_xsdata, "total")) then + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata, "total", temp_arr) + allocate(this % total(groups, this % n_azi, this % n_pol)) + this % total = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) + deallocate(temp_arr) + else + this % total = this % absorption + sum(this%scatter(:,:,1,:,:),dim=1) + end if + + ! Get Mult Data + allocate(this % mult(groups, groups, this % n_azi, this % n_pol)) + if (check_for_node(node_xsdata, "multiplicity")) then + arr_len = get_arraysize_double(node_xsdata, "multiplicity") + if (arr_len == groups * groups * this % n_azi * this % n_pol) then + allocate(temp_arr(arr_len)) + call get_node_array(node_xsdata, "multiplicity", temp_arr) + this % mult = reshape(temp_arr, (/groups, groups, this % n_azi, this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("Multiplicity Length Does Not Match!") + end if + else + this % mult = ONE + end if + + end subroutine nuclideangle_init + !=============================================================================== ! NUCLIDECE_CLEAR resets and deallocates data in Nuclide, NuclideIso ! or NuclideAngle From 8a14d600b08b7046409fc332f03a2803bbb49a55 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 12 Feb 2016 06:23:23 -0500 Subject: [PATCH 288/650] fixed check_source finds --- src/input_xml.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 50e8ca30dc..eca7e8ca15 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -2051,8 +2051,8 @@ contains ! Check to ensure material has at least one nuclide if (.not. check_for_node(node_mat, "nuclide") .and. & - .not. check_for_node(node_mat, "element") .and. & - .not. check_for_node(node_mat, "macroscopic")) then + .not. check_for_node(node_mat, "element") .and. & + .not. check_for_node(node_mat, "macroscopic")) then call fatal_error("No macroscopic data, nuclides or natural elements & &specified on material " // trim(to_str(mat % id))) end if From db48ed6fb744867f3f4d2413228847dc99bfb504 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 12 Feb 2016 18:20:38 -0500 Subject: [PATCH 289/650] Fixed bug when merging tallies with more than two filters --- openmc/tallies.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index 91a1fb0eef..79baf2b503 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -699,8 +699,8 @@ class Tally(object): return False # Look to see if all filters are the same, or one or more can be merged - merge_filters = False for filter1 in self.filters: + merge_filters = False mergeable_filter = False for filter2 in other.filters: From 8c43a32130664e6173d1448727f83c2717e2f81c Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 12 Feb 2016 21:44:21 -0500 Subject: [PATCH 290/650] Resolved almost all of the comments from @paulromano, save for rejection sampling of the Legendre polynomial. also fixed @samuelshaner comment about the pincell_multigroup problem --- docs/source/usersguide/mgxs_library.rst | 6 +- .../python/pincell_multigroup/build-xml.py | 15 +- examples/xml/pincell_multigroup/materials.xml | 4 +- .../pincell_multigroup/mg_cross_sections.xml | 32 +-- src/input_xml.F90 | 5 +- src/macroxs_header.F90 | 162 +++++++++++- src/macroxs_operations.F90 | 243 ------------------ src/math.F90 | 27 ++ src/nuclide_header.F90 | 50 +--- src/physics_mg.F90 | 9 +- src/scattdata_header.F90 | 164 +++++++++++- src/tracking.F90 | 6 +- 12 files changed, 400 insertions(+), 323 deletions(-) delete mode 100644 src/macroxs_operations.F90 diff --git a/docs/source/usersguide/mgxs_library.rst b/docs/source/usersguide/mgxs_library.rst index 478b060024..ae4ee6681e 100644 --- a/docs/source/usersguide/mgxs_library.rst +++ b/docs/source/usersguide/mgxs_library.rst @@ -82,7 +82,11 @@ well as the actual cross section data. The following are the attributes/sub-elements required to describe the meta-data: :name: - The name of the microscopic or macroscopic data set. + The name of the microscopic or macroscopic data set. An extension to the + name must be provided (e.g., the ``.70m`` in ``UO2.70m``). This extension, + similar to the equivalent in the continuous-energy ``cross_sections.xml`` + file is used to denote variants of the particular nuclide or material of + interest (i.e. the ``UO2`` in this example). *Default*: None, this must be provided. diff --git a/examples/python/pincell_multigroup/build-xml.py b/examples/python/pincell_multigroup/build-xml.py index 17fbae9941..7b8926c346 100644 --- a/examples/python/pincell_multigroup/build-xml.py +++ b/examples/python/pincell_multigroup/build-xml.py @@ -1,5 +1,7 @@ import openmc import openmc.mgxs +from openmc.source import Source +from openmc.stats import Box import numpy as np ############################################################################### @@ -20,7 +22,7 @@ groups = openmc.mgxs.EnergyGroups(group_edges=[1E-11, 0.0635E-6, 10.0E-6, 1.0E-4, 1.0E-3, 0.5, 1.0, 20.0]) # Instantiate the 7-group (C5G7) cross section data -uo2_xsdata = openmc.XSdata('UO2.300K', groups) +uo2_xsdata = openmc.XSdata('UO2.70m', groups) uo2_xsdata.order = 0 uo2_xsdata.total = np.array([0.1779492, 0.3298048, 0.4803882, 0.5543674, 0.3118013, 0.3951678, 0.5644058]) @@ -43,7 +45,7 @@ uo2_xsdata.nu_fission = np.array([2.005998E-02, 2.027303E-03, 1.570599E-02, uo2_xsdata.chi = np.array([5.8791E-01, 4.1176E-01, 3.3906E-04, 1.1761E-07, 0.0000E+00, 0.0000E+00, 0.0000E+00]) -h2o_xsdata = openmc.XSdata('LWTR.300K', groups) +h2o_xsdata = openmc.XSdata('LWTR.70m', groups) h2o_xsdata.order = 0 h2o_xsdata.total = np.array([0.15920605, 0.412969593, 0.59030986, 0.58435, 0.718, 1.2544497, 2.650379]) @@ -69,8 +71,8 @@ mg_cross_sections_file.export_to_xml() ############################################################################### # Instantiate some Macroscopic Data -uo2_data = openmc.Macroscopic('UO2', '300K') -h2o_data = openmc.Macroscopic('LWTR', '300K') +uo2_data = openmc.Macroscopic('UO2', '70m') +h2o_data = openmc.Macroscopic('LWTR', '70m') # Instantiate some Materials and register the appropriate Macroscopic objects uo2 = openmc.Material(material_id=1, name='UO2 fuel') @@ -83,7 +85,7 @@ water.add_macroscopic(h2o_data) # Instantiate a MaterialsFile, register all Materials, and export to XML materials_file = openmc.MaterialsFile() -materials_file.default_xs = '300K' +materials_file.default_xs = '70m' materials_file.add_materials([uo2, water]) materials_file.export_to_xml() @@ -143,8 +145,7 @@ settings_file.cross_sections = "./mg_cross_sections.xml" settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.set_source_space('box', [-0.63, -0.63, -1, \ - 0.63, 0.63, 1]) +settings_file.source = Source(space=Box([-0.63, -0.63, -1.], [0.63, 0.63, 1.])) ############################################################################### # Exporting to OpenMC tallies.xml File diff --git a/examples/xml/pincell_multigroup/materials.xml b/examples/xml/pincell_multigroup/materials.xml index 4b14f4a795..c94629665b 100644 --- a/examples/xml/pincell_multigroup/materials.xml +++ b/examples/xml/pincell_multigroup/materials.xml @@ -1,7 +1,7 @@ - - 300K + + 70m diff --git a/examples/xml/pincell_multigroup/mg_cross_sections.xml b/examples/xml/pincell_multigroup/mg_cross_sections.xml index ec85d4b593..d38d2d9c21 100644 --- a/examples/xml/pincell_multigroup/mg_cross_sections.xml +++ b/examples/xml/pincell_multigroup/mg_cross_sections.xml @@ -11,8 +11,8 @@ --> - UO2.71c - UO2.71c + UO2.70m + UO2.70m 2.53E-8 0 true @@ -67,8 +67,8 @@ - MOX1.71c - MOX1.71c + MOX1.70m + MOX1.70m 2.53E-8 0 true @@ -124,8 +124,8 @@ - MOX2.71c - MOX2.71c + MOX2.70m + MOX2.70m 2.53E-8 0 true @@ -180,8 +180,8 @@ - MOX3.71c - MOX3.71c + MOX3.70m + MOX3.70m 2.53E-8 0 true @@ -236,8 +236,8 @@ - FC.71c - FC.71c + FC.70m + FC.70m 2.53E-8 0 true @@ -286,8 +286,8 @@ - GT.71c - GT.71c + GT.70m + GT.70m 2.53E-8 0 false @@ -318,8 +318,8 @@ - LWTR.71c - LWTR.71c + LWTR.70m + LWTR.70m 2.53E-8 0 false @@ -351,8 +351,8 @@ - CR.71c - CR.71c + CR.70m + CR.70m 2.53E-8 0 false diff --git a/src/input_xml.F90 b/src/input_xml.F90 index eca7e8ca15..9fc490a33b 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -2063,7 +2063,10 @@ contains ! as nuclides internally. ! Get pointer list of XML call get_node_list(node_mat, "macroscopic", node_macro_list) - if (get_list_size(node_macro_list) > 1) then + if (run_CE .and. (get_list_size(node_macro_list) > 0)) then + call fatal_error("Macroscopic can not be used in continuous-energy& + & mode!") + else if (get_list_size(node_macro_list) > 1) then call fatal_error("Only one macroscopic object permitted per material, " & // trim(to_str(mat % id))) else if (get_list_size(node_macro_list) == 1) then diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index c435686b5d..2a12345108 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -3,8 +3,9 @@ module macroxs_header use constants, only: MAX_FILE_LEN, ZERO, ONE, TWO, PI use list_header, only: ListInt use material_header, only: material - use math, only: calc_pn, calc_rn, expand_harmonic + use math, only: calc_pn, calc_rn, expand_harmonic, find_angle use nuclide_header + use random_lcg, only: prn use scattdata_header implicit none @@ -19,8 +20,14 @@ module macroxs_header integer :: order contains - procedure(macroxs_init_), deferred :: init ! initializes object - procedure(macroxs_get_xs_), deferred :: get_xs ! Return xs + procedure(macroxs_init_), deferred :: init ! initializes object + procedure(macroxs_get_xs_), deferred :: get_xs ! Return xs + ! Sample the outgoing energy from a fission event + procedure(macroxs_sample_fission_), deferred :: sample_fission_energy + ! Sample the outgoing energy and angle from a scatter event + procedure(macroxs_sample_scatter_), deferred :: sample_scatter + ! Calculate the material specific MGXS data from the nuclides + procedure(macroxs_calculate_xs_), deferred :: calculate_xs end type MacroXS abstract interface @@ -50,6 +57,33 @@ module macroxs_header real(8), optional, intent(in) :: uvw(3) ! Requested Angle real(8) :: xs ! Resultant xs end function macroxs_get_xs_ + + function macroxs_sample_fission_(this, gin, uvw) result(gout) + import MacroXS + class(MacroXS), intent(in) :: this ! Data to work with + integer, intent(in) :: gin ! Incoming energy group + real(8), intent(in) :: uvw(3) ! Particle Direction + integer :: gout ! Sampled outgoing group + + end function macroxs_sample_fission_ + + subroutine macroxs_sample_scatter_(this, uvw, gin, gout, mu, wgt) + import MacroXS + class(MacroXS), intent(in) :: this + real(8), intent(in) :: uvw(3) ! Incoming neutron direction + integer, intent(in) :: gin ! Incoming neutron group + integer, intent(out) :: gout ! Sampled outgoin group + real(8), intent(out) :: mu ! Sampled change in angle + real(8), intent(inout) :: wgt ! Particle weight + end subroutine macroxs_sample_scatter_ + + subroutine macroxs_calculate_xs_(this, gin, uvw, xs) + import MacroXS, MaterialMacroXS + class(MacroXS), intent(in) :: this + integer, intent(in) :: gin ! Incoming neutron group + real(8), intent(in) :: uvw(3) ! Incoming neutron direction + type(MaterialMacroXS), intent(inout) :: xs + end subroutine macroxs_calculate_xs_ end interface type, extends(MacroXS) :: MacroXSIso @@ -64,8 +98,11 @@ module macroxs_header real(8), allocatable :: chi(:,:) ! fission spectra contains - procedure :: init => macroxsiso_init ! inits object - procedure :: get_xs => macroxsiso_get_xs ! Returns xs + procedure :: init => macroxsiso_init ! inits object + procedure :: get_xs => macroxsiso_get_xs ! Returns xs + procedure :: sample_fission_energy => macroxsiso_sample_fission_energy + procedure :: sample_scatter => macroxsiso_sample_scatter + procedure :: calculate_xs => macroxsiso_calculate_xs end type MacroXSIso type, extends(MacroXS) :: MacroXSAngle @@ -84,6 +121,9 @@ module macroxs_header contains procedure :: init => macroxsangle_init ! inits object procedure :: get_xs => macroxsangle_get_xs ! Returns xs + procedure :: sample_fission_energy => macroxsangle_sample_fission_energy + procedure :: sample_scatter => macroxsangle_sample_scatter + procedure :: calculate_xs => macroxsangle_calculate_xs end type MacroXSAngle !=============================================================================== @@ -705,4 +745,116 @@ contains end function macroxsangle_get_xs +!=============================================================================== +! MACROXS_*_SAMPLE_FISSION_ENERGY samples the outgoing energy from a fission +! event +!=============================================================================== + + function macroxsiso_sample_fission_energy(this, gin, uvw) result(gout) + class(MacroXSIso), intent(in) :: this ! Data to work with + integer, intent(in) :: gin ! Incoming energy group + real(8), intent(in) :: uvw(3) ! Particle Direction + integer :: gout ! Sampled outgoing group + real(8) :: xi ! Our random number + real(8) :: prob ! Running probability + + xi = prn() + prob = ZERO + gout = 0 + + do while (prob < xi) + gout = gout + 1 + prob = prob + this % chi(gout,gin) + end do + + end function macroxsiso_sample_fission_energy + + function macroxsangle_sample_fission_energy(this, gin, uvw) result(gout) + class(MacroXSAngle), intent(in) :: this ! Data to work with + integer, intent(in) :: gin ! Incoming energy group + real(8), intent(in) :: uvw(3) ! Particle Direction + integer :: gout ! Sampled outgoing group + real(8) :: xi ! Our random number + real(8) :: prob ! Running probability + integer :: iazi, ipol + + call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) + + xi = prn() + prob = ZERO + gout = 0 + + do while (prob < xi) + gout = gout + 1 + prob = prob + this % chi(gout,gin,iazi,ipol) + end do + + end function macroxsangle_sample_fission_energy + +!=============================================================================== +! MACROXS*_SAMPLE_SCATTER Selects outgoing energy and angle after a scatter +! event +!=============================================================================== + + subroutine macroxsiso_sample_scatter(this, uvw, gin, gout, mu, wgt) + class(MacroXSIso), intent(in) :: this + real(8), intent(in) :: uvw(3) ! Incoming neutron direction + integer, intent(in) :: gin ! Incoming neutron group + integer, intent(out) :: gout ! Sampled outgoin group + real(8), intent(out) :: mu ! Sampled change in angle + real(8), intent(inout) :: wgt ! Particle weight + + call this % scatter % sample(gin, gout, mu, wgt) + + end subroutine macroxsiso_sample_scatter + + subroutine macroxsangle_sample_scatter(this, uvw, gin, gout, mu, wgt) + class(MacroXSAngle), intent(in) :: this + real(8), intent(in) :: uvw(3) ! Incoming neutron direction + integer, intent(in) :: gin ! Incoming neutron group + integer, intent(out) :: gout ! Sampled outgoin group + real(8), intent(out) :: mu ! Sampled change in angle + real(8), intent(inout) :: wgt ! Particle weight + + integer :: iazi, ipol ! Angular indices + + call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) + call this % scatter(iazi,ipol) % obj % sample(gin,gout,mu,wgt) + + end subroutine macroxsangle_sample_scatter + +!=============================================================================== +! MACROXS*_CALCULATE_XS determines the multi-group macroscopic cross sections +! for the material the particle is currently traveling through. +!=============================================================================== + + subroutine macroxsiso_calculate_xs(this, gin, uvw, xs) + class(MacroXSIso), intent(in) :: this + integer, intent(in) :: gin ! Incoming neutron group + real(8), intent(in) :: uvw(3) ! Incoming neutron direction + type(MaterialMacroXS), intent(inout) :: xs ! Resultant MacroXS Data + + xs % total = this % total(gin) + xs % elastic = this % scattxs(gin) + xs % absorption = this % absorption(gin) + xs % nu_fission = this % nu_fission(gin) + + end subroutine macroxsiso_calculate_xs + + subroutine macroxsangle_calculate_xs(this, gin, uvw, xs) + class(MacroXSAngle), intent(in) :: this + integer, intent(in) :: gin ! Incoming neutron group + real(8), intent(in) :: uvw(3) ! Incoming neutron direction + type(MaterialMacroXS), intent(inout) :: xs ! Resultant MacroXS Data + + integer :: iazi, ipol + + call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) + xs % total = this % total(gin, iazi, ipol) + xs % elastic = this % scattxs(gin, iazi, ipol) + xs % absorption = this % absorption(gin, iazi, ipol) + xs % nu_fission = this % nu_fission(gin, iazi, ipol) + + end subroutine macroxsangle_calculate_xs + end module macroxs_header diff --git a/src/macroxs_operations.F90 b/src/macroxs_operations.F90 deleted file mode 100644 index 4fc13910ca..0000000000 --- a/src/macroxs_operations.F90 +++ /dev/null @@ -1,243 +0,0 @@ -module macroxs_operations - - use constants - use macroxs_header, only: MacroXS, MacroXSIso, MacroXSAngle, & - expand_harmonic - use material_header, only: Material - use math - use nuclide_header, only: find_angle, MaterialMacroXS, NuclideMicroXS, & - NuclideMG, NuclideMGContainer - use random_lcg, only: prn - use scattdata_header - use search - - implicit none - -contains - -!=============================================================================== -! UPDATE_XS stores the xs to work with -!=============================================================================== - - subroutine calculate_mgxs(this, gin, uvw, xs) - class(MacroXS), intent(in) :: this - integer, intent(in) :: gin ! Incoming neutron group - real(8), intent(in) :: uvw(3) ! Incoming neutron direction - type(MaterialMacroXS), intent(inout) :: xs - - integer :: iazi, ipol - - select type(this) - type is (MacroXSIso) - xs % total = this % total(gin) - xs % elastic = this % scattxs(gin) - xs % absorption = this % absorption(gin) - xs % nu_fission = this % nu_fission(gin) - - type is (MacroXSAngle) - call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) - xs % total = this % total(gin, iazi, ipol) - xs % elastic = this % scattxs(gin, iazi, ipol) - xs % absorption = this % absorption(gin, iazi, ipol) - xs % nu_fission = this % nu_fission(gin, iazi, ipol) - end select - - end subroutine calculate_mgxs - - -!=============================================================================== -! SAMPLE_FISSION_ENERGY acts as a templating code for macroxs_*_sample_fission_energy -!=============================================================================== - - function sample_fission_energy(this, gin, uvw) result(gout) - class(MacroXS), intent(in) :: this ! Data to work with - integer, intent(in) :: gin ! Incoming energy group - real(8), intent(in) :: uvw(3) ! Particle Direction - integer :: gout ! Sampled outgoing group - - select type(this) - type is (MacroXSIso) - gout = macroxsiso_sample_fission_energy(this, gin, uvw) - type is (MacroXSAngle) - gout = macroxsangle_sample_fission_energy(this, gin, uvw) - end select - - end function sample_fission_energy - -!=============================================================================== -! MACROXS_*_SAMPLE_FISSION_ENERGY samples the outgoing energy and mu from a scatter event. -! Implemented as % scatter. -!=============================================================================== - - function macroxsiso_sample_fission_energy(this, gin, uvw) result(gout) - class(MacroXSIso), intent(in) :: this ! Data to work with - integer, intent(in) :: gin ! Incoming energy group - real(8), intent(in) :: uvw(3) ! Particle Direction - integer :: gout ! Sampled outgoing group - real(8) :: xi ! Our random number - real(8) :: prob ! Running probability - - xi = prn() - prob = ZERO - gout = 0 - - do while (prob < xi) - gout = gout + 1 - prob = prob + this % chi(gout,gin) - end do - - end function macroxsiso_sample_fission_energy - - function macroxsangle_sample_fission_energy(this, gin, uvw) result(gout) - class(MacroXSAngle), intent(in) :: this ! Data to work with - integer, intent(in) :: gin ! Incoming energy group - real(8), intent(in) :: uvw(3) ! Particle Direction - integer :: gout ! Sampled outgoing group - real(8) :: xi ! Our random number - real(8) :: prob ! Running probability - integer :: iazi, ipol - - call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) - - xi = prn() - prob = ZERO - gout = 0 - - do while (prob < xi) - gout = gout + 1 - prob = prob + this % chi(gout,gin,iazi,ipol) - end do - - end function macroxsangle_sample_fission_energy - -!=============================================================================== -! SAMPLE_SCATTER acts as a templating code for macroxs_*_sample_scatter -!=============================================================================== - - subroutine sample_scatter(this, uvw, gin, gout, mu, wgt) - class(MacroXS), intent(in) :: this - real(8), intent(in) :: uvw(3) ! Incoming neutron direction - integer, intent(in) :: gin ! Incoming neutron group - integer, intent(out) :: gout ! Sampled outgoin group - real(8), intent(out) :: mu ! Sampled change in angle - real(8), intent(inout) :: wgt ! Particle weight - - integer :: iazi, ipol ! Angular indices - - select type(this) - type is (MacroXSIso) - call macroxs_sample_scatter(this % scatter, gin, gout, mu, wgt) - type is (MacroXSAngle) - call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) - call macroxs_sample_scatter(this % scatter(iazi,ipol) % obj,gin,gout,mu,wgt) - end select - - end subroutine sample_scatter - -!=============================================================================== -! MACROXS_SAMPLE_SCATTER performs the work with ScattData to sample outgoing -! energy and change in angle. -!=============================================================================== - - subroutine macroxs_sample_scatter(scatt, gin, gout, mu, wgt) - class(ScattData), intent(in) :: scatt ! Scattering Object to Use - integer, intent(in) :: gin ! Incoming neutron group - integer, intent(out) :: gout ! Sampled outgoin group - real(8), intent(out) :: mu ! Sampled change in angle - real(8), intent(inout) :: wgt ! Particle weight - - real(8) :: xi ! Our random number - real(8) :: prob ! Running probability - integer :: imu - real(8) :: u, f, M - real(8) :: mu0, frac, mu1 - real(8) :: c_k, c_k1, p0, p1 - integer :: k, NP, samples - - xi = prn() - prob = ZERO - gout = 0 - - do while (prob < xi) - gout = gout + 1 - prob = prob + scatt % energy(gout,gin) - end do - - select type (scatt) - type is (ScattDataHistogram) - xi = prn() - if (xi < scatt % data(1,gout,gin)) then - imu = 1 - else - imu = binary_search(scatt % data(:,gout,gin), & - size(scatt % data(:,gout,gin)), xi) - end if - - ! Randomly select a mu in this bin. - mu = prn() * scatt % dmu + scatt % mu(imu) - - type is (ScattDataTabular) - ! determine outgoing cosine bin - NP = size(scatt % data(:,gout,gin)) - xi = prn() - - c_k = scatt % data(1,gout,gin) - do k = 1, NP - 1 - c_k1 = scatt % data(k+1,gout,gin) - if (xi < c_k1) exit - c_k = c_k1 - end do - - ! check to make sure k is <= NP - 1 - k = min(k, NP - 1) - - p0 = scatt % fmu(k,gout,gin) - mu0 = scatt % mu(k) - ! Linear-linear interpolation to find mu value w/in bin. - p1 = scatt % fmu(k+1,gout,gin) - mu1 = scatt % mu(k+1) - - frac = (p1 - p0)/(mu1 - mu0) - - if (frac == ZERO) then - mu = mu0 + (xi - c_k)/p0 - else - mu = mu0 + (sqrt(max(ZERO, p0*p0 + TWO*frac*(xi - c_k))) - p0)/frac - end if - - if (mu <= -ONE) then - mu = -ONE - else if (mu >= ONE) then - mu = ONE - end if - - type is (ScattDataLegendre) - ! Now we can sample mu using the legendre representation of the scattering - ! kernel in data(1:this % order) - - ! Do with rejection sampling - ! Set upper bound (instead of searching for max - though this is inefficient) - M = 4.0_8 - samples = 0 - do - mu = TWO * prn() - ONE - f = scatt % calc_f(gin,gout,mu) - if (f > ZERO) then - u = prn() * M - if (u <= f) then - exit - end if - end if - samples = samples + 1 - if (samples > MAX_SAMPLE) then - ! Exit with an isotropic event. - exit - end if - end do - end select - - wgt = wgt * scatt % mult(gout,gin) - - end subroutine macroxs_sample_scatter - -end module macroxs_operations \ No newline at end of file diff --git a/src/math.F90 b/src/math.F90 index c7ede8d2a5..f49220da76 100644 --- a/src/math.F90 +++ b/src/math.F90 @@ -702,4 +702,31 @@ contains end function watt_spectrum + +!=============================================================================== +! find_angle finds the closest angle on the data grid and returns that index +!=============================================================================== + + pure subroutine find_angle(polar, azimuthal, uvw, i_azi, i_pol) + real(8), intent(in) :: polar(:) ! Polar angles [0,pi] + real(8), intent(in) :: azimuthal(:) ! Azi. angles [-pi,pi] + real(8), intent(in) :: uvw(3) ! Direction of motion + integer, intent(inout) :: i_pol ! Closest polar bin + integer, intent(inout) :: i_azi ! Closest azi bin + + real(8) :: my_pol, my_azi, dangle + + ! Convert uvw to polar and azi + + my_pol = acos(uvw(3)) + my_azi = atan2(uvw(2), uvw(1)) + + ! Search for equi-binned angles + dangle = PI / real(size(polar),8) + i_pol = floor(my_pol / dangle + ONE) + dangle = TWO * PI / real(size(azimuthal),8) + i_azi = floor((my_azi + PI) / dangle + ONE) + + end subroutine find_angle + end module math diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 7569d9ea80..9bcce57a75 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -7,9 +7,10 @@ module nuclide_header use endf, only: reaction_name use error, only: fatal_error use list_header, only: ListInt - use math, only: evaluate_legendre + use math, only: evaluate_legendre, find_angle use string use xml_interface + implicit none !=============================================================================== @@ -300,12 +301,9 @@ module nuclide_header ! NUCLIDE_*_INIT reads in the data from the XML file, as already accessed !=============================================================================== - subroutine nuclidemg_init(this, node_xsdata, groups, get_kfiss, get_fiss) + subroutine nuclidemg_init(this, node_xsdata) class(NuclideMG), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml - integer, intent(in) :: groups ! Number of Energy groups - logical, intent(in) :: get_kfiss ! Need Kappa-Fission? - logical, intent(in) :: get_fiss ! Should we get fiss data? type(Node), pointer :: node_legendre_mu character(MAX_LINE_LEN) :: temp_str @@ -403,7 +401,7 @@ module nuclide_header integer :: order_dim ! Call generic data gathering routine - call nuclidemg_init(this, node_xsdata, groups, get_kfiss, get_fiss) + call nuclidemg_init(this, node_xsdata) ! Load the more specific data if (this % fissionable) then @@ -525,7 +523,7 @@ module nuclide_header integer :: order_dim ! Call generic data gathering routine - call nuclidemg_init(this, node_xsdata, groups, get_kfiss, get_fiss) + call nuclidemg_init(this, node_xsdata) if (this % scatt_type == ANGLE_LEGENDRE) then order_dim = this % order + 1 @@ -1043,13 +1041,13 @@ module nuclide_header if (this % scatt_type == ANGLE_LEGENDRE) then f = evaluate_legendre(this % scatter(gout,gin,:), mu) else if (this % scatt_type == ANGLE_TABULAR) then - dmu = TWO / real(this % order - 1) + dmu = TWO / real(this % order - 1,8) ! Find mu bin algebraically, knowing that the spacing is equal f = (mu + ONE) / dmu + ONE imu = floor(f) ! But save the amount that mu is past the previous index ! so we can use interpolation later. - f = f - real(imu) + f = f - real(imu,8) ! Adjust so interpolation works on the last bin if necessary if (imu == size(this % scatter, dim=3)) then imu = imu - 1 @@ -1060,7 +1058,7 @@ module nuclide_header f = (ONE - r) * this % scatter(gout,gin,imu) + & r * this % scatter(gout,gin,imu+1) else ! (ANGLE_HISTOGRAM) - dmu = TWO / real(this % order) + dmu = TWO / real(this % order,8) ! Find mu bin algebraically, knowing that the spacing is equal imu = floor((mu + ONE) / dmu + ONE) ! Adjust so interpolation works on the last bin if necessary @@ -1097,13 +1095,13 @@ module nuclide_header if (this % scatt_type == ANGLE_LEGENDRE) then f = evaluate_legendre(this % scatter(gout,gin,:,i_azi_,i_pol_), mu) else if (this % scatt_type == ANGLE_TABULAR) then - dmu = TWO / real(this % order - 1) + dmu = TWO / real(this % order - 1,8) ! Find mu bin algebraically, knowing that the spacing is equal f = (mu + ONE) / dmu + ONE imu = floor(f) ! But save the amount that mu is past the previous index ! so we can use interpolation later. - f = f - real(imu) + f = f - real(imu,8) ! Adjust so interpolation works on the last bin if necessary if (imu == size(this % scatter, dim=3)) then imu = imu - 1 @@ -1114,7 +1112,7 @@ module nuclide_header f = (ONE - r) * this % scatter(gout,gin,imu,i_azi_,i_pol_) + & r * this % scatter(gout,gin,imu+1,i_azi_,i_pol_) else ! (ANGLE_HISTOGRAM) - dmu = TWO / real(this % order) + dmu = TWO / real(this % order,8) ! Find mu bin algebraically, knowing that the spacing is equal imu = floor((mu + ONE) / dmu + ONE) ! Adjust so interpolation works on the last bin if necessary @@ -1127,30 +1125,4 @@ module nuclide_header end function nuclideangle_calc_f -!=============================================================================== -! find_angle finds the closest angle on the data grid and returns that index -!=============================================================================== - - pure subroutine find_angle(polar, azimuthal, uvw, i_azi, i_pol) - real(8), intent(in) :: polar(:) ! Polar angles [0,pi] - real(8), intent(in) :: azimuthal(:) ! Azi. angles [-pi,pi] - real(8), intent(in) :: uvw(3) ! Direction of motion - integer, intent(inout) :: i_pol ! Closest polar bin - integer, intent(inout) :: i_azi ! Closest azi bin - - real(8) my_pol, my_azi, dangle - - ! Convert uvw to polar and azi - - my_pol = acos(uvw(3)) - my_azi = atan2(uvw(2), uvw(1)) - - ! Search for equi-binned angles - dangle = PI / real(size(polar),8) - i_pol = floor(my_pol / dangle + ONE) - dangle = TWO * PI / real(size(azimuthal),8) - i_azi = floor((my_azi + PI) / dangle + ONE) - - end subroutine find_angle - end module nuclide_header diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index a0d8eb6e1d..ce296c48e6 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -6,7 +6,6 @@ module physics_mg use error, only: fatal_error, warning use global use macroxs_header, only: MacroXS, MacroXSContainer - use macroxs_operations, only: sample_fission_energy, sample_scatter use material_header, only: Material use math, only: rotate_angle use mesh, only: get_mesh_indices @@ -146,9 +145,9 @@ contains type(Particle), intent(inout) :: p - call sample_scatter(macro_xs(p % material) % obj, & - p % coord(1) % uvw, p % last_g, p % g, & - p % mu, p % wgt) + call macro_xs(p % material) % obj % sample_scatter(p % coord(1) % uvw, & + p % last_g, p % g, & + p % mu, p % wgt) ! Update energy value for downstream compatability (in tallying) p % E = energy_bin_avg(p % g) @@ -256,7 +255,7 @@ contains ! Sample secondary energy distribution for fission reaction and set energy ! in fission bank - bank_array(i) % g = sample_fission_energy(xs, p % g, fission_bank(i) % uvw) + bank_array(i) % g = xs % sample_fission_energy(p % g, fission_bank(i) % uvw) bank_array(i) % E = energy_bin_avg(fission_bank(i) % g) end do diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index b9dcdadd41..e02ba9172f 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -1,7 +1,10 @@ module scattdata_header - use math use constants + use error, only: fatal_error + use math + use random_lcg, only: prn + use search, only: binary_search implicit none @@ -19,6 +22,7 @@ module scattdata_header contains procedure(init_), deferred :: init ! Initializes ScattData procedure(calc_f_), deferred :: calc_f ! Calculates f, given mu + procedure(sample_), deferred :: sample ! sample the scatter event end type ScattData abstract interface @@ -40,12 +44,22 @@ module scattdata_header real(8) :: f ! Return value of f(mu) end function calc_f_ + + subroutine sample_(this, gin, gout, mu, wgt) + import ScattData + class(ScattData), intent(in) :: this ! Scattering Object to Use + integer, intent(in) :: gin ! Incoming neutron group + integer, intent(out) :: gout ! Sampled outgoin group + real(8), intent(out) :: mu ! Sampled change in angle + real(8), intent(inout) :: wgt ! Particle weight + end subroutine sample_ end interface type, extends(ScattData) :: ScattDataLegendre contains procedure :: init => scattdatalegendre_init procedure :: calc_f => scattdatalegendre_calc_f + procedure :: sample => scattdatalegendre_sample end type ScattDataLegendre type, extends(ScattData) :: ScattDataHistogram @@ -54,6 +68,7 @@ module scattdata_header contains procedure :: init => scattdatahistogram_init procedure :: calc_f => scattdatahistogram_calc_f + procedure :: sample => scattdatahistogram_sample end type ScattDataHistogram type, extends(ScattData) :: ScattDataTabular @@ -63,6 +78,7 @@ module scattdata_header contains procedure :: init => scattdatatabular_init procedure :: calc_f => scattdatatabular_calc_f + procedure :: sample => scattdatatabular_sample end type ScattDataTabular !=============================================================================== @@ -290,4 +306,150 @@ contains end function scattdatatabular_calc_f +!=============================================================================== +! SCATTDATA*_SCATTER Samples the outgoing energy and change in angle. +!=============================================================================== + + subroutine scattdatalegendre_sample(this, gin, gout, mu, wgt) + class(ScattDataLegendre), intent(in) :: this ! Scattering object to use + integer, intent(in) :: gin ! Incoming neutron group + integer, intent(out) :: gout ! Sampled outgoin group + real(8), intent(out) :: mu ! Sampled change in angle + real(8), intent(inout) :: wgt ! Particle weight + + real(8) :: xi ! Our random number + real(8) :: prob ! Running probability + real(8) :: u, f, M + integer :: samples + + xi = prn() + prob = ZERO + gout = 0 + + do while (prob < xi) + gout = gout + 1 + prob = prob + this % energy(gout,gin) + end do + + ! Now we can sample mu using the legendre representation of the thisering + ! kernel in data(1:this % order) + + ! Do with rejection sampling + ! Set upper bound (instead of searching for max - though this is inefficient) + M = 4.0_8 + samples = 0 + do + mu = TWO * prn() - ONE + f = this % calc_f(gin,gout,mu) + if (f > ZERO) then + u = prn() * M + if (u <= f) then + exit + end if + end if + samples = samples + 1 + if (samples > MAX_SAMPLE) then + call fatal_error("Maximum number of Legendre expansion samples reached!") + end if + end do + + wgt = wgt * this % mult(gout,gin) + + end subroutine scattdatalegendre_sample + + subroutine scattdatahistogram_sample(this, gin, gout, mu, wgt) + class(ScattDataHistogram), intent(in) :: this ! Scattering object to use + integer, intent(in) :: gin ! Incoming neutron group + integer, intent(out) :: gout ! Sampled outgoin group + real(8), intent(out) :: mu ! Sampled change in angle + real(8), intent(inout) :: wgt ! Particle weight + + real(8) :: xi ! Our random number + real(8) :: prob ! Running probability + integer :: imu + + xi = prn() + prob = ZERO + gout = 0 + + do while (prob < xi) + gout = gout + 1 + prob = prob + this % energy(gout,gin) + end do + + xi = prn() + if (xi < this % data(1,gout,gin)) then + imu = 1 + else + imu = binary_search(this % data(:,gout,gin), & + size(this % data(:,gout,gin)), xi) + end if + + ! Randomly select a mu in this bin. + mu = prn() * this % dmu + this % mu(imu) + + wgt = wgt * this % mult(gout,gin) + + end subroutine scattdatahistogram_sample + + subroutine scattdatatabular_sample(this, gin, gout, mu, wgt) + class(ScattDataTabular), intent(in) :: this ! Scattering object to use + integer, intent(in) :: gin ! Incoming neutron group + integer, intent(out) :: gout ! Sampled outgoin group + real(8), intent(out) :: mu ! Sampled change in angle + real(8), intent(inout) :: wgt ! Particle weight + + real(8) :: xi ! Our random number + real(8) :: prob ! Running probability + real(8) :: mu0, frac, mu1 + real(8) :: c_k, c_k1, p0, p1 + integer :: k, NP + + xi = prn() + prob = ZERO + gout = 0 + + do while (prob < xi) + gout = gout + 1 + prob = prob + this % energy(gout,gin) + end do + + ! determine outgoing cosine bin + NP = size(this % data(:,gout,gin)) + xi = prn() + + c_k = this % data(1,gout,gin) + do k = 1, NP - 1 + c_k1 = this % data(k+1,gout,gin) + if (xi < c_k1) exit + c_k = c_k1 + end do + + ! check to make sure k is <= NP - 1 + k = min(k, NP - 1) + + p0 = this % fmu(k,gout,gin) + mu0 = this % mu(k) + ! Linear-linear interpolation to find mu value w/in bin. + p1 = this % fmu(k+1,gout,gin) + mu1 = this % mu(k+1) + + frac = (p1 - p0)/(mu1 - mu0) + + if (frac == ZERO) then + mu = mu0 + (xi - c_k)/p0 + else + mu = mu0 + (sqrt(max(ZERO, p0*p0 + TWO*frac*(xi - c_k))) - p0)/frac + end if + + if (mu <= -ONE) then + mu = -ONE + else if (mu >= ONE) then + mu = ONE + end if + + wgt = wgt * this % mult(gout,gin) + + end subroutine scattdatatabular_sample + end module scattdata_header \ No newline at end of file diff --git a/src/tracking.F90 b/src/tracking.F90 index 98e5483a0a..17fc855591 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -7,7 +7,7 @@ module tracking cross_lattice, check_cell_overlap use geometry_header, only: Universe, BASE_UNIVERSE use global - use macroxs_operations, only: calculate_mgxs + use macroxs_header, only: MacroXS use output, only: write_message use particle_header, only: LocalCoord, Particle use physics, only: collision @@ -92,8 +92,8 @@ contains ! Since the MGXS can be angle dependent, this needs to be done ! After every collision for the MGXS mode if (p % material /= MATERIAL_VOID) then - call calculate_mgxs(macro_xs(p % material) % obj, p % g, & - p % coord(p % n_coord) % uvw, material_xs) + call macro_xs(p % material) % obj % calculate_xs(p % g, & + p % coord(p % n_coord) % uvw, material_xs) else material_xs % total = ZERO material_xs % elastic = ZERO From 391e8b18058df84330a80db7cb2eb9797f6d800e Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 13 Feb 2016 05:18:19 -0500 Subject: [PATCH 291/650] previous commit changed library extension from example problem to 70m from 300K. This puts them back to being 300K and then adds size to the default_xs variable to allow for 5 total characters in the extension.' --- docs/source/usersguide/mgxs_library.rst | 9 ++++-- .../python/pincell_multigroup/build-xml.py | 10 +++--- examples/xml/pincell_multigroup/materials.xml | 4 +-- .../pincell_multigroup/mg_cross_sections.xml | 32 +++++++++---------- src/global.F90 | 4 +-- src/input_xml.F90 | 2 +- 6 files changed, 32 insertions(+), 29 deletions(-) diff --git a/docs/source/usersguide/mgxs_library.rst b/docs/source/usersguide/mgxs_library.rst index ae4ee6681e..4cc36f1e89 100644 --- a/docs/source/usersguide/mgxs_library.rst +++ b/docs/source/usersguide/mgxs_library.rst @@ -83,10 +83,13 @@ attributes/sub-elements required to describe the meta-data: :name: The name of the microscopic or macroscopic data set. An extension to the - name must be provided (e.g., the ``.70m`` in ``UO2.70m``). This extension, + name must be provided (e.g., the ``.300K`` in ``UO2.300K``). The name and + extension together must be twelve or less characters in length. This + extension must follow a period and be five characters or less in length. similar to the equivalent in the continuous-energy ``cross_sections.xml`` - file is used to denote variants of the particular nuclide or material of - interest (i.e. the ``UO2`` in this example). + file, is used to denote variants of the particular nuclide or material of + interest (i.e. the ``UO2`` data in this example could have been generated + at a temperature of 300K). *Default*: None, this must be provided. diff --git a/examples/python/pincell_multigroup/build-xml.py b/examples/python/pincell_multigroup/build-xml.py index 7b8926c346..ff75a64d93 100644 --- a/examples/python/pincell_multigroup/build-xml.py +++ b/examples/python/pincell_multigroup/build-xml.py @@ -22,7 +22,7 @@ groups = openmc.mgxs.EnergyGroups(group_edges=[1E-11, 0.0635E-6, 10.0E-6, 1.0E-4, 1.0E-3, 0.5, 1.0, 20.0]) # Instantiate the 7-group (C5G7) cross section data -uo2_xsdata = openmc.XSdata('UO2.70m', groups) +uo2_xsdata = openmc.XSdata('UO2.300K', groups) uo2_xsdata.order = 0 uo2_xsdata.total = np.array([0.1779492, 0.3298048, 0.4803882, 0.5543674, 0.3118013, 0.3951678, 0.5644058]) @@ -45,7 +45,7 @@ uo2_xsdata.nu_fission = np.array([2.005998E-02, 2.027303E-03, 1.570599E-02, uo2_xsdata.chi = np.array([5.8791E-01, 4.1176E-01, 3.3906E-04, 1.1761E-07, 0.0000E+00, 0.0000E+00, 0.0000E+00]) -h2o_xsdata = openmc.XSdata('LWTR.70m', groups) +h2o_xsdata = openmc.XSdata('LWTR.300K', groups) h2o_xsdata.order = 0 h2o_xsdata.total = np.array([0.15920605, 0.412969593, 0.59030986, 0.58435, 0.718, 1.2544497, 2.650379]) @@ -71,8 +71,8 @@ mg_cross_sections_file.export_to_xml() ############################################################################### # Instantiate some Macroscopic Data -uo2_data = openmc.Macroscopic('UO2', '70m') -h2o_data = openmc.Macroscopic('LWTR', '70m') +uo2_data = openmc.Macroscopic('UO2', '300K') +h2o_data = openmc.Macroscopic('LWTR', '300K') # Instantiate some Materials and register the appropriate Macroscopic objects uo2 = openmc.Material(material_id=1, name='UO2 fuel') @@ -85,7 +85,7 @@ water.add_macroscopic(h2o_data) # Instantiate a MaterialsFile, register all Materials, and export to XML materials_file = openmc.MaterialsFile() -materials_file.default_xs = '70m' +materials_file.default_xs = '300K' materials_file.add_materials([uo2, water]) materials_file.export_to_xml() diff --git a/examples/xml/pincell_multigroup/materials.xml b/examples/xml/pincell_multigroup/materials.xml index c94629665b..6961166541 100644 --- a/examples/xml/pincell_multigroup/materials.xml +++ b/examples/xml/pincell_multigroup/materials.xml @@ -1,7 +1,7 @@ - - 70m + + 300K diff --git a/examples/xml/pincell_multigroup/mg_cross_sections.xml b/examples/xml/pincell_multigroup/mg_cross_sections.xml index d38d2d9c21..3c671a1922 100644 --- a/examples/xml/pincell_multigroup/mg_cross_sections.xml +++ b/examples/xml/pincell_multigroup/mg_cross_sections.xml @@ -11,8 +11,8 @@ --> - UO2.70m - UO2.70m + UO2.300K + UO2.300K 2.53E-8 0 true @@ -67,8 +67,8 @@ - MOX1.70m - MOX1.70m + MOX1.300K + MOX1.300K 2.53E-8 0 true @@ -124,8 +124,8 @@ - MOX2.70m - MOX2.70m + MOX2.300K + MOX2.300K 2.53E-8 0 true @@ -180,8 +180,8 @@ - MOX3.70m - MOX3.70m + MOX3.300K + MOX3.300K 2.53E-8 0 true @@ -236,8 +236,8 @@ - FC.70m - FC.70m + FC.300K + FC.300K 2.53E-8 0 true @@ -286,8 +286,8 @@ - GT.70m - GT.70m + GT.300K + GT.300K 2.53E-8 0 false @@ -318,8 +318,8 @@ - LWTR.70m - LWTR.70m + LWTR.300K + LWTR.300K 2.53E-8 0 false @@ -351,8 +351,8 @@ - CR.70m - CR.70m + CR.300K + CR.300K 2.53E-8 0 false diff --git a/src/global.F90 b/src/global.F90 index 17477ed80b..970f89f9ba 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -79,8 +79,8 @@ module global type(DictCharInt) :: nuclide_dict type(DictCharInt) :: xs_listing_dict - ! Default xs identifier (e.g. 70c) - character(3):: default_xs + ! Default xs identifier (e.g. 70c or 300K) + character(5):: default_xs ! ============================================================================ ! CONTINUOUS-ENERGY CROSS SECTION RELATED VARIABLES diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 9fc490a33b..eb504f43a1 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -3072,7 +3072,7 @@ contains ! Append default_xs specifier to nuclide if needed if ((default_xs /= '') .and. (.not. ends_with(sarray(j), 'c'))) then - word = trim(word) // "." // default_xs + word = trim(word) // "." // trim(default_xs) end if ! Search through nuclides From e89b584a7b434c68c91c3550e413f9f9fa9eb4d9 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 13 Feb 2016 05:48:36 -0500 Subject: [PATCH 292/650] added in smarter maximal value detection for rejection sampling of scattering angles represented as polynomial legendres --- src/scattdata_header.F90 | 49 +++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index e02ba9172f..b2c8ba3e3c 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -56,6 +56,8 @@ module scattdata_header end interface type, extends(ScattData) :: ScattDataLegendre + ! Maximal value for rejection sampling from rectangle + real(8), allocatable :: max_val(:,:) contains procedure :: init => scattdatalegendre_init procedure :: calc_f => scattdatalegendre_calc_f @@ -116,15 +118,47 @@ contains subroutine scattdatalegendre_init(this, order, energy, mult, coeffs) class(ScattDataLegendre), intent(inout) :: this ! Object to work on - integer, intent(in) :: order ! Data Order - real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix - real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix + integer, intent(in) :: order ! Data Order + real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix + real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use + real(8) :: dmu, mu, f + integer :: imu, Nmu, gout, gin, groups + call scattdata_init(this, order, energy, mult) this % data = coeffs + groups = size(this % energy,dim=1) + + allocate(this % max_val(groups, groups)) + this % max_val = ZERO + ! Step through the polynomial with fixed number of points to identify + ! the maximal value. + Nmu = 1001 + dmu = TWO / real(Nmu,8) + do imu = 1, Nmu + ! Update mu. Do first and last seperate to avoid float errors + if (imu == 1) then + mu = -ONE + else if (imu == Nmu) then + mu = ONE + end if + mu = -ONE + real(imu - 1,8) * dmu + do gin = 1, groups + do gout = 1, groups + ! Calculate probability + f = this % calc_f(gin,gout,mu) + ! If this is a new max, store it. + if (f > this % max_val(gout,gin)) this % max_val(gout,gin) = f + end do + end do + end do + + ! Finally, since we may not have caught the exact max, add 10% margin + this % max_val = this % max_val * 1.1_8 + end subroutine scattdatalegendre_init subroutine scattdatahistogram_init(this, order, energy, mult, coeffs) @@ -145,7 +179,7 @@ contains this % dmu = TWO / real(order,8) this % mu(1) = -ONE do imu = 2, order - this % mu(imu) = -ONE + (imu - 1) * this % dmu + this % mu(imu) = -ONE + real(imu - 1,8) * this % dmu end do ! Best to integrate this histogram so we can avoid rejection sampling @@ -335,12 +369,15 @@ contains ! kernel in data(1:this % order) ! Do with rejection sampling - ! Set upper bound (instead of searching for max - though this is inefficient) - M = 4.0_8 + ! Set maximal value + M = this % max_val(gout,gin) samples = 0 do mu = TWO * prn() - ONE f = this % calc_f(gin,gout,mu) +if (f > M) then +call fatal_error("Legendre exceeds Max Value!!!") +end if if (f > ZERO) then u = prn() * M if (u <= f) then From 2c4917bd3f1958fcd31d53c4f04ca12d94e21c0a Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 13 Feb 2016 06:07:19 -0500 Subject: [PATCH 293/650] Updating MG tests which previously failed due to change in rejection sampling algorithm --- tests/test_mg_basic/results_true.dat | 2 +- tests/test_mg_max_order/results_true.dat | 2 +- tests/test_mg_nuclide/results_true.dat | 2 +- tests/test_mg_tallies/results_true.dat | 1306 +++++++++++----------- 4 files changed, 656 insertions(+), 656 deletions(-) diff --git a/tests/test_mg_basic/results_true.dat b/tests/test_mg_basic/results_true.dat index 35e2af7c06..35f3e73d40 100644 --- a/tests/test_mg_basic/results_true.dat +++ b/tests/test_mg_basic/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.035488E+00 4.058903E-02 +1.045320E+00 5.851680E-02 diff --git a/tests/test_mg_max_order/results_true.dat b/tests/test_mg_max_order/results_true.dat index dfb1c02d79..1b23005602 100644 --- a/tests/test_mg_max_order/results_true.dat +++ b/tests/test_mg_max_order/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.106635E+00 4.503267E-02 +1.083030E+00 1.855038E-02 diff --git a/tests/test_mg_nuclide/results_true.dat b/tests/test_mg_nuclide/results_true.dat index 26a41ade87..5b60cef222 100644 --- a/tests/test_mg_nuclide/results_true.dat +++ b/tests/test_mg_nuclide/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.271009E-01 6.377851E-03 +1.380785E-01 5.556526E-03 diff --git a/tests/test_mg_tallies/results_true.dat b/tests/test_mg_tallies/results_true.dat index 4e27ab66b9..0cb47a712d 100644 --- a/tests/test_mg_tallies/results_true.dat +++ b/tests/test_mg_tallies/results_true.dat @@ -1,86 +1,86 @@ k-combined: -1.035488E+00 4.058903E-02 +1.045320E+00 5.851680E-02 tally 1: -2.737079E+00 -1.545362E+00 -7.475678E-02 -1.182688E-03 -3.895146E+00 -3.143927E+00 -3.051980E-02 -2.030656E-04 -7.566509E-02 -1.248142E-03 -2.564678E+00 -1.356531E+00 -6.888583E-02 -1.027172E-03 -3.639176E+00 -2.763465E+00 -2.785332E-02 -1.756457E-04 -6.905430E-02 -1.079605E-03 -2.513858E+00 -1.360648E+00 -7.106151E-02 -1.063532E-03 -3.598310E+00 -2.766916E+00 -2.957807E-02 -1.830650E-04 -7.333034E-02 -1.125208E-03 -2.680537E+00 -1.557625E+00 -7.458823E-02 -1.153071E-03 -3.874223E+00 -3.178628E+00 -3.085079E-02 -1.987973E-04 -7.648569E-02 -1.221907E-03 -2.747094E+00 -1.661126E+00 -7.366404E-02 -1.200019E-03 -3.949477E+00 -3.398210E+00 -2.983494E-02 -2.006053E-04 -7.396717E-02 -1.233020E-03 -2.832153E+00 -1.688117E+00 -7.768421E-02 -1.263525E-03 -4.057661E+00 -3.441857E+00 -3.181289E-02 -2.134911E-04 -7.887092E-02 -1.312222E-03 -2.818292E+00 -1.727700E+00 -8.151103E-02 -1.400727E-03 -4.087366E+00 -3.555489E+00 -3.440824E-02 -2.483234E-04 -8.530537E-02 -1.526319E-03 -2.673498E+00 -1.597867E+00 -8.179404E-02 -1.455604E-03 -4.005194E+00 -3.520971E+00 -3.564373E-02 -2.749065E-04 -8.836840E-02 -1.689712E-03 +2.286064E+00 +1.057353E+00 +6.503987E-02 +8.851627E-04 +3.376363E+00 +2.323627E+00 +2.733240E-02 +1.607534E-04 +6.776283E-02 +9.880704E-04 +2.391658E+00 +1.201477E+00 +7.241106E-02 +1.103780E-03 +3.614949E+00 +2.730438E+00 +3.146867E-02 +2.110753E-04 +7.801752E-02 +1.297373E-03 +2.762725E+00 +1.705088E+00 +8.684520E-02 +1.654173E-03 +4.172232E+00 +3.847245E+00 +3.834947E-02 +3.212662E-04 +9.507651E-02 +1.974662E-03 +2.802290E+00 +1.773339E+00 +8.347451E-02 +1.574952E-03 +4.206829E+00 +3.971225E+00 +3.593646E-02 +2.967708E-04 +8.909414E-02 +1.824101E-03 +2.383708E+00 +1.176784E+00 +7.337273E-02 +1.097240E-03 +3.624903E+00 +2.690697E+00 +3.213890E-02 +2.139948E-04 +7.967917E-02 +1.315319E-03 +2.398216E+00 +1.234567E+00 +6.905889E-02 +9.879327E-04 +3.479138E+00 +2.538252E+00 +2.911091E-02 +1.750648E-04 +7.217215E-02 +1.076035E-03 +2.563998E+00 +1.354089E+00 +7.357381E-02 +1.097086E-03 +3.753156E+00 +2.867475E+00 +3.097034E-02 +1.948794E-04 +7.678206E-02 +1.197826E-03 +2.293243E+00 +1.172767E+00 +6.702582E-02 +9.267762E-04 +3.407144E+00 +2.469472E+00 +2.857514E-02 +1.688581E-04 +7.084385E-02 +1.037886E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -171,86 +171,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.694430E+00 -1.482997E+00 -7.661360E-02 -1.219010E-03 -3.956809E+00 -3.231298E+00 -3.211518E-02 -2.179122E-04 -7.962036E-02 -1.339397E-03 -2.572758E+00 -1.418791E+00 -7.213692E-02 -1.094985E-03 -3.692753E+00 -2.869867E+00 -2.991749E-02 -1.926648E-04 -7.417183E-02 -1.184214E-03 -2.477980E+00 -1.312803E+00 -6.912091E-02 -9.790394E-04 -3.581706E+00 -2.674317E+00 -2.863743E-02 -1.680509E-04 -7.099830E-02 -1.032924E-03 -2.845088E+00 -1.688617E+00 -8.173799E-02 -1.368439E-03 -4.131147E+00 -3.544636E+00 -3.438554E-02 -2.417440E-04 -8.524908E-02 -1.485879E-03 -2.793685E+00 -1.647743E+00 -8.194563E-02 -1.421503E-03 -4.186293E+00 -3.695916E+00 -3.501635E-02 -2.621854E-04 -8.681299E-02 -1.611522E-03 -2.638366E+00 -1.500052E+00 -8.011857E-02 -1.356165E-03 -4.000991E+00 -3.395409E+00 -3.487592E-02 -2.544883E-04 -8.646482E-02 -1.564211E-03 -2.842735E+00 -1.690237E+00 -8.154955E-02 -1.356837E-03 -4.156256E+00 -3.570439E+00 -3.435028E-02 -2.398488E-04 -8.516165E-02 -1.474230E-03 -2.196972E+00 -9.871590E-01 -6.781939E-02 -9.725975E-04 -3.352539E+00 -2.320436E+00 -2.976179E-02 -1.937147E-04 -7.378580E-02 -1.190667E-03 +2.604127E+00 +1.442914E+00 +7.142299E-02 +1.083324E-03 +3.786547E+00 +2.990260E+00 +2.935394E-02 +1.905369E-04 +7.277467E-02 +1.171135E-03 +2.457755E+00 +1.228862E+00 +6.655630E-02 +9.411086E-04 +3.528688E+00 +2.561047E+00 +2.709124E-02 +1.640319E-04 +6.716494E-02 +1.008221E-03 +2.450846E+00 +1.295337E+00 +6.779278E-02 +9.992248E-04 +3.519409E+00 +2.693620E+00 +2.793186E-02 +1.714064E-04 +6.924902E-02 +1.053549E-03 +2.469234E+00 +1.300419E+00 +7.347034E-02 +1.175743E-03 +3.675903E+00 +2.880386E+00 +3.155996E-02 +2.200036E-04 +7.824386E-02 +1.352252E-03 +2.576106E+00 +1.365945E+00 +7.241428E-02 +1.090052E-03 +3.719498E+00 +2.861357E+00 +3.008961E-02 +1.906170E-04 +7.459854E-02 +1.171627E-03 +2.503651E+00 +1.290812E+00 +7.432507E-02 +1.132918E-03 +3.702398E+00 +2.813425E+00 +3.186491E-02 +2.091477E-04 +7.899991E-02 +1.285525E-03 +2.395349E+00 +1.202098E+00 +7.095925E-02 +1.051988E-03 +3.559388E+00 +2.628753E+00 +3.041477E-02 +1.959992E-04 +7.540470E-02 +1.204709E-03 +1.910174E+00 +7.331782E-01 +6.366813E-02 +8.166135E-04 +2.966770E+00 +1.762376E+00 +2.893278E-02 +1.712979E-04 +7.173053E-02 +1.052882E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -341,86 +341,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.641273E+00 -1.597870E+00 -7.598644E-02 -1.292899E-03 -3.853049E+00 -3.336280E+00 -3.203862E-02 -2.292746E-04 -7.943056E-02 -1.409235E-03 -2.708082E+00 -1.522839E+00 -7.654337E-02 -1.221093E-03 -3.905027E+00 -3.156770E+00 -3.189847E-02 -2.134574E-04 -7.908310E-02 -1.312015E-03 -2.691233E+00 -1.524379E+00 -8.054050E-02 -1.365756E-03 -3.962250E+00 -3.258368E+00 -3.462881E-02 -2.628049E-04 -8.585218E-02 -1.615329E-03 -3.018386E+00 -1.917223E+00 -8.348614E-02 -1.445746E-03 -4.283272E+00 -3.833787E+00 -3.429972E-02 -2.430307E-04 -8.503630E-02 -1.493787E-03 -2.929994E+00 -1.836911E+00 -8.927512E-02 -1.624433E-03 -4.372984E+00 -4.002348E+00 -3.882367E-02 -3.051257E-04 -9.625215E-02 -1.875454E-03 -3.119790E+00 -2.050856E+00 -9.534078E-02 -1.868390E-03 -4.698804E+00 -4.587809E+00 -4.157799E-02 -3.523492E-04 -1.030807E-01 -2.165713E-03 -2.868621E+00 -1.702964E+00 -8.398565E-02 -1.456555E-03 -4.247485E+00 -3.715607E+00 -3.580655E-02 -2.676357E-04 -8.877207E-02 -1.645022E-03 -2.497455E+00 -1.252375E+00 -6.446362E-02 -8.477811E-04 -3.507541E+00 -2.474088E+00 -2.542963E-02 -1.367733E-04 -6.304548E-02 -8.406768E-04 +2.593479E+00 +1.421618E+00 +7.731733E-02 +1.249860E-03 +3.880469E+00 +3.167768E+00 +3.330331E-02 +2.319171E-04 +8.256599E-02 +1.425478E-03 +2.563470E+00 +1.449702E+00 +7.411043E-02 +1.158986E-03 +3.692974E+00 +2.935486E+00 +3.125554E-02 +2.061246E-04 +7.748913E-02 +1.266944E-03 +2.657580E+00 +1.493736E+00 +7.749682E-02 +1.277831E-03 +3.892576E+00 +3.190262E+00 +3.289903E-02 +2.334764E-04 +8.156370E-02 +1.435062E-03 +2.701357E+00 +1.517431E+00 +8.804410E-02 +1.639744E-03 +4.161224E+00 +3.606273E+00 +3.959674E-02 +3.345554E-04 +9.816875E-02 +2.056343E-03 +2.745200E+00 +1.523378E+00 +7.925308E-02 +1.270874E-03 +3.962649E+00 +3.165021E+00 +3.340000E-02 +2.283904E-04 +8.280570E-02 +1.403801E-03 +2.678775E+00 +1.492394E+00 +8.646776E-02 +1.554919E-03 +4.147456E+00 +3.551060E+00 +3.875994E-02 +3.125295E-04 +9.609415E-02 +1.920962E-03 +2.678888E+00 +1.497390E+00 +7.616647E-02 +1.203778E-03 +3.868905E+00 +3.108718E+00 +3.186093E-02 +2.136540E-04 +7.899003E-02 +1.313223E-03 +2.189117E+00 +9.756340E-01 +6.824988E-02 +9.549688E-04 +3.259136E+00 +2.150849E+00 +2.997262E-02 +1.883650E-04 +7.430850E-02 +1.157785E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -511,86 +511,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.623441E+00 -1.490238E+00 -8.737054E-02 -1.670677E-03 -4.075246E+00 -3.570201E+00 -3.969459E-02 -3.510115E-04 -9.841135E-02 -2.157491E-03 -2.429458E+00 -1.296272E+00 -7.433515E-02 -1.195439E-03 -3.603045E+00 -2.814355E+00 -3.233556E-02 -2.266091E-04 -8.016674E-02 -1.392852E-03 -2.655653E+00 -1.503631E+00 -7.556244E-02 -1.216313E-03 -3.876149E+00 -3.192723E+00 -3.167217E-02 -2.160892E-04 -7.852205E-02 -1.328191E-03 -2.687380E+00 -1.496815E+00 -7.570314E-02 -1.262722E-03 -3.940616E+00 -3.291028E+00 -3.159442E-02 -2.339022E-04 -7.832928E-02 -1.437679E-03 -2.990160E+00 -1.889612E+00 -7.623143E-02 -1.208898E-03 -4.207001E+00 -3.697140E+00 -2.984188E-02 -1.859848E-04 -7.398438E-02 -1.143155E-03 -2.853430E+00 -1.655915E+00 -7.908369E-02 -1.262135E-03 -4.101975E+00 -3.406862E+00 -3.260559E-02 -2.168450E-04 -8.083620E-02 -1.332837E-03 -2.730969E+00 -1.615691E+00 -7.764021E-02 -1.314394E-03 -3.991873E+00 -3.443169E+00 -3.252644E-02 -2.371617E-04 -8.063998E-02 -1.457714E-03 -2.187664E+00 -9.957750E-01 -6.436381E-02 -8.515751E-04 -3.270736E+00 -2.197812E+00 -2.754849E-02 -1.554780E-04 -6.829858E-02 -9.556448E-04 +2.761165E+00 +1.657839E+00 +7.810542E-02 +1.334149E-03 +4.026290E+00 +3.495574E+00 +3.264226E-02 +2.359256E-04 +8.092710E-02 +1.450116E-03 +2.601284E+00 +1.465130E+00 +7.485486E-02 +1.239170E-03 +3.829638E+00 +3.199488E+00 +3.159745E-02 +2.288567E-04 +7.833681E-02 +1.406667E-03 +2.419174E+00 +1.228134E+00 +7.422066E-02 +1.117508E-03 +3.667795E+00 +2.787048E+00 +3.244938E-02 +2.129012E-04 +8.044893E-02 +1.308597E-03 +2.491535E+00 +1.259222E+00 +7.470359E-02 +1.133979E-03 +3.773164E+00 +2.887196E+00 +3.234132E-02 +2.142511E-04 +8.018101E-02 +1.316894E-03 +2.430358E+00 +1.305969E+00 +7.236826E-02 +1.077801E-03 +3.691969E+00 +2.914191E+00 +3.123416E-02 +2.001679E-04 +7.743613E-02 +1.230332E-03 +3.133682E+00 +1.984584E+00 +8.337467E-02 +1.392595E-03 +4.451265E+00 +3.978527E+00 +3.354318E-02 +2.282172E-04 +8.316070E-02 +1.402736E-03 +2.662704E+00 +1.448336E+00 +7.530385E-02 +1.164529E-03 +3.880423E+00 +3.054138E+00 +3.144058E-02 +2.085301E-04 +7.794791E-02 +1.281730E-03 +2.130205E+00 +9.297660E-01 +6.583066E-02 +8.790174E-04 +3.226341E+00 +2.120506E+00 +2.889944E-02 +1.698754E-04 +7.164788E-02 +1.044139E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -681,86 +681,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.126226E+00 -2.054101E+00 -9.308386E-02 -1.840170E-03 -4.585435E+00 -4.425166E+00 -3.991071E-02 -3.454637E-04 -9.894716E-02 -2.123391E-03 -2.628975E+00 -1.442927E+00 -7.480586E-02 -1.136055E-03 -3.849243E+00 -3.050079E+00 -3.136784E-02 -1.990547E-04 -7.776755E-02 -1.223489E-03 -2.740162E+00 -1.737335E+00 -7.647229E-02 -1.263465E-03 -4.009845E+00 -3.586955E+00 -3.173845E-02 -2.147512E-04 -7.868637E-02 -1.319968E-03 -2.761943E+00 -1.619005E+00 -7.846740E-02 -1.320872E-03 -4.097351E+00 -3.568014E+00 -3.295230E-02 -2.361898E-04 -8.169577E-02 -1.451740E-03 -2.855074E+00 -1.670686E+00 -7.845369E-02 -1.263464E-03 -4.103374E+00 -3.452249E+00 -3.220431E-02 -2.141592E-04 -7.984135E-02 -1.316329E-03 -2.690178E+00 -1.491926E+00 -7.527503E-02 -1.160972E-03 -3.903606E+00 -3.122977E+00 -3.125741E-02 -2.022968E-04 -7.749378E-02 -1.243417E-03 -2.512911E+00 -1.314036E+00 -7.800028E-02 -1.259212E-03 -3.791186E+00 -2.970061E+00 -3.426379E-02 -2.436930E-04 -8.494722E-02 -1.497858E-03 -2.273876E+00 -1.107297E+00 -7.120819E-02 -1.019386E-03 -3.428794E+00 -2.426375E+00 -3.139941E-02 -1.998412E-04 -7.784582E-02 -1.228323E-03 +2.599461E+00 +1.458035E+00 +7.809884E-02 +1.305214E-03 +3.901359E+00 +3.258238E+00 +3.379142E-02 +2.432493E-04 +8.377612E-02 +1.495131E-03 +2.748044E+00 +1.595569E+00 +8.641555E-02 +1.591494E-03 +4.133038E+00 +3.610482E+00 +3.815976E-02 +3.125423E-04 +9.460617E-02 +1.921040E-03 +2.827693E+00 +1.681951E+00 +9.214026E-02 +1.815952E-03 +4.343252E+00 +3.980138E+00 +4.139309E-02 +3.763771E-04 +1.026223E-01 +2.313401E-03 +2.848302E+00 +1.709266E+00 +8.618471E-02 +1.555247E-03 +4.293029E+00 +3.893924E+00 +3.742129E-02 +2.947160E-04 +9.277535E-02 +1.811471E-03 +3.107129E+00 +1.985180E+00 +9.390982E-02 +1.778566E-03 +4.705512E+00 +4.502266E+00 +4.077729E-02 +3.361217E-04 +1.010956E-01 +2.065971E-03 +3.176743E+00 +2.076916E+00 +9.535836E-02 +1.843238E-03 +4.782883E+00 +4.655802E+00 +4.125628E-02 +3.453802E-04 +1.022831E-01 +2.122878E-03 +3.158364E+00 +2.020031E+00 +9.047734E-02 +1.652565E-03 +4.641857E+00 +4.326900E+00 +3.809128E-02 +2.983406E-04 +9.443638E-02 +1.833749E-03 +2.750064E+00 +1.515295E+00 +7.550745E-02 +1.157933E-03 +4.022702E+00 +3.249004E+00 +3.106532E-02 +2.005988E-04 +7.701755E-02 +1.232980E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -851,86 +851,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.416875E+00 -1.198797E+00 -7.051645E-02 -1.018987E-03 -3.608689E+00 -2.679252E+00 -3.004052E-02 -1.872854E-04 -7.447684E-02 -1.151149E-03 -2.573490E+00 -1.402205E+00 -6.633005E-02 -9.194585E-04 -3.559859E+00 -2.675099E+00 -2.604699E-02 -1.426679E-04 -6.457603E-02 -8.769077E-04 -2.701686E+00 -1.530274E+00 -7.570621E-02 -1.220650E-03 -3.972619E+00 -3.322266E+00 -3.152781E-02 -2.138949E-04 -7.816415E-02 -1.314704E-03 -2.920710E+00 -1.813750E+00 -8.167632E-02 -1.397805E-03 -4.220218E+00 -3.751891E+00 -3.388045E-02 -2.397875E-04 -8.399686E-02 -1.473853E-03 -2.886624E+00 -1.697663E+00 -8.812015E-02 -1.584550E-03 -4.350341E+00 -3.846411E+00 -3.842467E-02 -3.055861E-04 -9.526294E-02 -1.878284E-03 -2.805388E+00 -1.631826E+00 -9.017775E-02 -1.681160E-03 -4.264591E+00 -3.742270E+00 -4.026469E-02 -3.387007E-04 -9.982475E-02 -2.081823E-03 -2.789842E+00 -1.599838E+00 -9.325901E-02 -1.771117E-03 -4.331678E+00 -3.825425E+00 -4.241710E-02 -3.690107E-04 -1.051610E-01 -2.268123E-03 -2.406721E+00 -1.197504E+00 -7.197982E-02 -1.055123E-03 -3.523223E+00 -2.545571E+00 -3.093417E-02 -1.962555E-04 -7.669239E-02 -1.206284E-03 +2.571690E+00 +1.405222E+00 +6.998368E-02 +1.010782E-03 +3.645470E+00 +2.775516E+00 +2.848750E-02 +1.694087E-04 +7.062657E-02 +1.041270E-03 +3.305320E+00 +2.344814E+00 +9.985328E-02 +2.111130E-03 +4.992554E+00 +5.332303E+00 +4.332586E-02 +3.970490E-04 +1.074140E-01 +2.440461E-03 +2.746305E+00 +1.652960E+00 +9.402849E-02 +1.982149E-03 +4.315533E+00 +4.099428E+00 +4.322622E-02 +4.235148E-04 +1.071670E-01 +2.603132E-03 +2.975372E+00 +1.824531E+00 +9.627993E-02 +1.863677E-03 +4.624041E+00 +4.351874E+00 +4.324350E-02 +3.743520E-04 +1.072099E-01 +2.300953E-03 +2.968077E+00 +1.807761E+00 +9.337061E-02 +1.790184E-03 +4.455263E+00 +4.056544E+00 +4.122926E-02 +3.540009E-04 +1.022161E-01 +2.175865E-03 +3.337278E+00 +2.233238E+00 +1.017763E-01 +2.083989E-03 +4.981699E+00 +4.981154E+00 +4.428100E-02 +3.964318E-04 +1.097820E-01 +2.436667E-03 +3.083638E+00 +1.958766E+00 +9.111141E-02 +1.726305E-03 +4.546082E+00 +4.260420E+00 +3.895365E-02 +3.200133E-04 +9.657439E-02 +1.966961E-03 +2.644733E+00 +1.407404E+00 +8.635553E-02 +1.527997E-03 +4.094426E+00 +3.382785E+00 +3.888081E-02 +3.161126E-04 +9.639381E-02 +1.942985E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1021,86 +1021,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.670387E+00 -1.493829E+00 -7.916152E-02 -1.323249E-03 -3.980792E+00 -3.341124E+00 -3.398399E-02 -2.477152E-04 -8.425355E-02 -1.522581E-03 -2.643712E+00 -1.525085E+00 -7.477643E-02 -1.211244E-03 -3.829765E+00 -3.171826E+00 -3.119267E-02 -2.143333E-04 -7.733327E-02 -1.317399E-03 -2.775846E+00 -1.674648E+00 -8.464107E-02 -1.549143E-03 -4.133594E+00 -3.716316E+00 -3.679183E-02 -2.932382E-04 -9.121478E-02 -1.802388E-03 -2.954816E+00 -1.930285E+00 -7.887852E-02 -1.287632E-03 -4.192638E+00 -3.786782E+00 -3.177353E-02 -2.052824E-04 -7.877335E-02 -1.261768E-03 -3.031795E+00 -1.932684E+00 -9.082125E-02 -1.719186E-03 -4.462842E+00 -4.170125E+00 -3.909991E-02 -3.173523E-04 -9.693701E-02 -1.950605E-03 -2.773807E+00 -1.592371E+00 -8.755961E-02 -1.597915E-03 -4.234664E+00 -3.713430E+00 -3.882039E-02 -3.159470E-04 -9.624401E-02 -1.941967E-03 -2.528366E+00 -1.320356E+00 -8.486472E-02 -1.488520E-03 -3.935024E+00 -3.188413E+00 -3.866268E-02 -3.104697E-04 -9.585301E-02 -1.908301E-03 -2.814891E+00 -1.783998E+00 -7.956633E-02 -1.440608E-03 -4.087076E+00 -3.738124E+00 -3.321370E-02 -2.578118E-04 -8.234384E-02 -1.584639E-03 +3.316522E+00 +2.302876E+00 +8.987919E-02 +1.676655E-03 +4.716109E+00 +4.596488E+00 +3.654407E-02 +2.855910E-04 +9.060053E-02 +1.755384E-03 +3.091331E+00 +2.117646E+00 +8.528196E-02 +1.564336E-03 +4.492326E+00 +4.405850E+00 +3.513814E-02 +2.665883E-04 +8.711494E-02 +1.638584E-03 +2.649730E+00 +1.444519E+00 +8.510948E-02 +1.506094E-03 +4.117595E+00 +3.501517E+00 +3.810553E-02 +3.052819E-04 +9.447172E-02 +1.876414E-03 +2.875773E+00 +1.758531E+00 +9.127582E-02 +1.780419E-03 +4.328266E+00 +3.989840E+00 +4.045386E-02 +3.513542E-04 +1.002937E-01 +2.159598E-03 +3.102792E+00 +1.949906E+00 +9.153879E-02 +1.691646E-03 +4.578530E+00 +4.235906E+00 +3.913672E-02 +3.094156E-04 +9.702826E-02 +1.901822E-03 +3.238743E+00 +2.146355E+00 +8.902551E-02 +1.593536E-03 +4.683916E+00 +4.438028E+00 +3.660342E-02 +2.683183E-04 +9.074766E-02 +1.649218E-03 +3.006635E+00 +1.887385E+00 +8.716712E-02 +1.586834E-03 +4.383965E+00 +4.008888E+00 +3.688262E-02 +2.862513E-04 +9.143987E-02 +1.759443E-03 +2.749904E+00 +1.550561E+00 +9.244273E-02 +1.748082E-03 +4.241273E+00 +3.669144E+00 +4.208622E-02 +3.633241E-04 +1.043407E-01 +2.233170E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1191,86 +1191,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.360566E+00 -1.164965E+00 -7.582328E-02 -1.239719E-03 -3.614813E+00 -2.742787E+00 -3.388042E-02 -2.553121E-04 -8.399678E-02 -1.569275E-03 -2.546108E+00 -1.399288E+00 -7.762813E-02 -1.316168E-03 -3.859937E+00 -3.260243E+00 -3.384404E-02 -2.538541E-04 -8.390659E-02 -1.560314E-03 -3.332352E+00 -2.369626E+00 -8.799788E-02 -1.625343E-03 -4.655099E+00 -4.594468E+00 -3.514406E-02 -2.612097E-04 -8.712961E-02 -1.605525E-03 -2.601466E+00 -1.427019E+00 -7.052544E-02 -1.078356E-03 -3.725846E+00 -2.956429E+00 -2.871825E-02 -1.843049E-04 -7.119865E-02 -1.132829E-03 -2.954221E+00 -1.775439E+00 -8.854750E-02 -1.593113E-03 -4.427465E+00 -3.982350E+00 -3.824403E-02 -2.969669E-04 -9.481508E-02 -1.825306E-03 -2.855301E+00 -1.652640E+00 -8.473899E-02 -1.471257E-03 -4.218821E+00 -3.612250E+00 -3.633488E-02 -2.751925E-04 -9.008191E-02 -1.691470E-03 -2.632066E+00 -1.437779E+00 -7.298646E-02 -1.093885E-03 -3.785199E+00 -2.966958E+00 -3.009667E-02 -1.863207E-04 -7.461606E-02 -1.145219E-03 -2.629725E+00 -1.564381E+00 -8.162764E-02 -1.547184E-03 -3.953052E+00 -3.585289E+00 -3.581386E-02 -3.025695E-04 -8.879019E-02 -1.859742E-03 +2.556952E+00 +1.416458E+00 +8.087467E-02 +1.431667E-03 +3.806748E+00 +3.158182E+00 +3.571995E-02 +2.831832E-04 +8.855737E-02 +1.740585E-03 +2.546384E+00 +1.446967E+00 +8.000281E-02 +1.363415E-03 +3.844739E+00 +3.222133E+00 +3.533522E-02 +2.621956E-04 +8.760354E-02 +1.611584E-03 +2.474418E+00 +1.302438E+00 +7.728372E-02 +1.265047E-03 +3.818517E+00 +3.076074E+00 +3.414744E-02 +2.483215E-04 +8.465877E-02 +1.526307E-03 +2.478272E+00 +1.299434E+00 +7.866430E-02 +1.293627E-03 +3.758685E+00 +2.973817E+00 +3.491240E-02 +2.542033E-04 +8.655529E-02 +1.562460E-03 +2.941937E+00 +1.842278E+00 +9.491310E-02 +1.902183E-03 +4.564730E+00 +4.427111E+00 +4.252722E-02 +3.828960E-04 +1.054340E-01 +2.353469E-03 +2.850564E+00 +1.719152E+00 +8.118192E-02 +1.404765E-03 +4.190858E+00 +3.722715E+00 +3.411695E-02 +2.522778E-04 +8.458318E-02 +1.550625E-03 +2.726097E+00 +1.648250E+00 +7.879124E-02 +1.424955E-03 +3.940978E+00 +3.461222E+00 +3.322044E-02 +2.688615E-04 +8.236053E-02 +1.652557E-03 +2.304822E+00 +1.153775E+00 +7.500010E-02 +1.314077E-03 +3.542935E+00 +2.786864E+00 +3.369367E-02 +2.798215E-04 +8.353377E-02 +1.719922E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2892,15 +2892,15 @@ tally 1: 0.000000E+00 0.000000E+00 tally 2: -4.012713E+01 -3.286443E+02 -4.014931E+01 -3.290078E+02 -5.982856E+00 -7.510508E+00 -5.983297E+00 -7.511618E+00 -1.223283E+02 -3.075680E+03 -1.223283E+02 -3.075680E+03 +4.283244E+01 +3.698890E+02 +4.285612E+01 +3.702981E+02 +6.926001E+00 +9.669342E+00 +6.926497E+00 +9.670727E+00 +1.223563E+02 +3.025594E+03 +1.223563E+02 +3.025594E+03 From 03b433f8f3f8baee2d433279f87391d4393d67c1 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 13 Feb 2016 14:06:48 -0500 Subject: [PATCH 294/650] Whoops... left in a debug check from rejection sampling. cleaned it up --- src/scattdata_header.F90 | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index b2c8ba3e3c..b04115e570 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -375,9 +375,6 @@ contains do mu = TWO * prn() - ONE f = this % calc_f(gin,gout,mu) -if (f > M) then -call fatal_error("Legendre exceeds Max Value!!!") -end if if (f > ZERO) then u = prn() * M if (u <= f) then From 3ee4325410357de315359b92e58b3c5844fe3862 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Mon, 15 Feb 2016 12:24:10 -0500 Subject: [PATCH 295/650] HDF5 stores now work with subdomain-avg MGXS --- openmc/mgxs/mgxs.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index fb70b1bc8d..39da487d0e 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -696,7 +696,7 @@ class MGXS(object): # Construct a collection of the domain filter bins if not isinstance(subdomains, basestring): - cv.check_iterable_type('subdomains', subdomains, Integral) + cv.check_iterable_type('subdomains', subdomains, Integral, max_depth=2) for subdomain in subdomains: filters.append(self.domain_type) filter_bins.append((subdomain,)) @@ -1195,6 +1195,9 @@ class MGXS(object): cv.check_iterable_type('subdomains', subdomains, Integral) elif self.domain_type == 'distribcell': subdomains = np.arange(self.num_subdomains, dtype=np.int) + elif self.domain_type == 'sum(distribcell)': + domain_filter = self.xs_tally.find_filter('sum(distribcell)') + subdomains = domain_filter.bins else: subdomains = [self.domain.id] @@ -2019,7 +2022,7 @@ class ScatterMatrixXS(MGXS): # Construct a collection of the domain filter bins if not isinstance(subdomains, basestring): - cv.check_iterable_type('subdomains', subdomains, Integral) + cv.check_iterable_type('subdomains', subdomains, Integral, max_depth=2) for subdomain in subdomains: filters.append(self.domain_type) filter_bins.append((subdomain,)) @@ -2416,7 +2419,7 @@ class Chi(MGXS): # Construct a collection of the domain filter bins if not isinstance(subdomains, basestring): - cv.check_iterable_type('subdomains', subdomains, Integral) + cv.check_iterable_type('subdomains', subdomains, Integral, max_depth=2) for subdomain in subdomains: filters.append(self.domain_type) filter_bins.append((subdomain,)) From 7fdca5b9cb24eba20c433965c9e2f80ff6db1562 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Mon, 15 Feb 2016 22:42:57 -0500 Subject: [PATCH 296/650] Added name property to CrossNuclide to fix bug --- openmc/arithmetic.py | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/openmc/arithmetic.py b/openmc/arithmetic.py index 4ddf3b1f91..521d33e9f0 100644 --- a/openmc/arithmetic.py +++ b/openmc/arithmetic.py @@ -188,6 +188,23 @@ class CrossNuclide(object): return existing def __repr__(self): + return self.name + + + @property + def left_nuclide(self): + return self._left_nuclide + + @property + def right_nuclide(self): + return self._right_nuclide + + @property + def binary_op(self): + return self._binary_op + + @property + def name(self): string = '' @@ -209,18 +226,6 @@ class CrossNuclide(object): return string - @property - def left_nuclide(self): - return self._left_nuclide - - @property - def right_nuclide(self): - return self._right_nuclide - - @property - def binary_op(self): - return self._binary_op - @left_nuclide.setter def left_nuclide(self, left_nuclide): cv.check_type('left_nuclide', left_nuclide, From d23149ff94209f9a2b3ecabfd27543e08665b079 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Tue, 16 Feb 2016 10:50:53 -0500 Subject: [PATCH 297/650] Fixed bug in a check for results when merging tallies --- openmc/tallies.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index 79baf2b503..272896d834 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -933,7 +933,7 @@ class Tally(object): merged_tally.add_trigger(trigger) # If results have not been read, then return tally for input generation - if self._sp_filename is None: + if self._results_read is None: return merged_tally #Otherwise, this is a derived tally which needs merged results arrays else: From 6e685e71b5823fcb8bc7813bdd2daa83f8d24525 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Tue, 16 Feb 2016 13:53:12 -0500 Subject: [PATCH 298/650] Remove lto from cflags Otherwise a compile error is raised --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 05f03626e7..16cf914e58 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,7 +127,7 @@ if(CMAKE_Fortran_COMPILER_ID STREQUAL GNU) endif() if(optimize) list(APPEND f90flags -O3 -flto -fuse-linker-plugin) - list(APPEND cflags -O3 -flto -fuse-linker-plugin) + list(APPEND cflags -O3) endif() if(openmp) list(APPEND f90flags -fopenmp) From 81ec5700b6e58c1802e1d27c349b9899d3df478f Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Tue, 16 Feb 2016 13:55:46 -0500 Subject: [PATCH 299/650] Add script to download multipole data --- .gitignore | 6 +- data/get_multipole_data.py | 120 +++++++++++++++++++++++++++++++++++++ data/get_nndc_data.py | 2 +- 3 files changed, 125 insertions(+), 3 deletions(-) create mode 100755 data/get_multipole_data.py diff --git a/.gitignore b/.gitignore index 815e978510..f4532824a7 100644 --- a/.gitignore +++ b/.gitignore @@ -57,10 +57,12 @@ src/bin/ src/cmake_install.cmake src/install_manifest.txt -# Data downloaded from NNDC +# Nuclear data data/nndc +data/wmp +data/multipole_lib.tar.gz -#Images +# Images *.ppm *.voxel diff --git a/data/get_multipole_data.py b/data/get_multipole_data.py new file mode 100755 index 0000000000..cb87865a82 --- /dev/null +++ b/data/get_multipole_data.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python + +from __future__ import print_function +import os +import shutil +import subprocess +import sys +import tarfile +import glob +import hashlib +import argparse + +parser = argparse.ArgumentParser() +parser.add_argument('-b', '--batch', action = 'store_true', + help = 'supresses standard in') +args = parser.parse_args() + +try: + from urllib.request import urlopen +except ImportError: + from urllib2 import urlopen + +cwd = os.getcwd() +sys.path.insert(0, os.path.join(cwd, '..')) + +baseUrl = 'http://web.mit.edu/smharper/Public/' +files = ['multipole_lib.tar.gz'] +checksums = ['9f0307132fe5beca78b8fc7a01fb401c'] +block_size = 16384 + +# ============================================================================== +# DOWNLOAD FILES FROM ATHENA LOCKER + +filesComplete = [] +for f in files: + # Establish connection to URL + url = baseUrl + f + req = urlopen(url) + + # Get file size from header + if sys.version_info[0] < 3: + file_size = int(req.info().getheaders('Content-Length')[0]) + else: + file_size = req.length + downloaded = 0 + + # Check if file already downloaded + if os.path.exists(f): + if os.path.getsize(f) == file_size: + print('Skipping ' + f) + filesComplete.append(f) + continue + else: + if sys.version_info[0] < 3: + overwrite = raw_input('Overwrite {0}? ([y]/n) '.format(f)) + else: + overwrite = input('Overwrite {0}? ([y]/n) '.format(f)) + if overwrite.lower().startswith('n'): + continue + + # Copy file to disk + print('Downloading {0}... '.format(f), end='') + with open(f, 'wb') as fh: + while True: + chunk = req.read(block_size) + if not chunk: break + fh.write(chunk) + downloaded += len(chunk) + status = '{0:10} [{1:3.2f}%]'.format(downloaded, downloaded * 100. / file_size) + print(status + chr(8)*len(status), end='') + print('') + filesComplete.append(f) + +# ============================================================================== +# VERIFY MD5 CHECKSUMS + +print('Verifying MD5 checksums...') +for f, checksum in zip(files, checksums): + downloadsum = hashlib.md5(open(f, 'rb').read()).hexdigest() + if downloadsum != checksum: + raise IOError("MD5 checksum for {} does not match. If this is your first " + "time receiving this message, please re-run the script. " + "Otherwise, please contact OpenMC developers by emailing " + "openmc-users@googlegroups.com.".format(f)) + +# ============================================================================== +# EXTRACT FILES FROM TGZ + +for f in files: + if not f in filesComplete: + continue + + # Extract files + with tarfile.open(f, 'r') as tgz: + print('Extracting {0}...'.format(f)) + tgz.extractall(path='wmp/') + +# Move data files down one level +for filename in glob.glob('wmp/multipole_lib/*'): + shutil.move(filename, 'wmp/') +os.rmdir('wmp/multipole_lib') + +# ============================================================================== +# PROMPT USER TO DELETE .TAR.GZ FILES + +# Ask user to delete +if not args.batch: + if sys.version_info[0] < 3: + response = raw_input('Delete *.tar.gz files? ([y]/n) ') + else: + response = input('Delete *.tar.gz files? ([y]/n) ') +else: + response = 'y' + +# Delete files if requested +if not response or response.lower().startswith('y'): + for f in files: + if os.path.exists(f): + print('Removing {0}...'.format(f)) + os.remove(f) diff --git a/data/get_nndc_data.py b/data/get_nndc_data.py index 18c94dd64f..cd3c6c4dcf 100755 --- a/data/get_nndc_data.py +++ b/data/get_nndc_data.py @@ -84,7 +84,7 @@ for f, checksum in zip(files, checksums): raise IOError("MD5 checksum for {} does not match. If this is your first " "time receiving this message, please re-run the script. " "Otherwise, please contact OpenMC developers by emailing " - "openmc-users@googlegroups.com.") + "openmc-users@googlegroups.com.".format(f)) # ============================================================================== # EXTRACT FILES FROM TGZ From e78933d0d316279e47ebade0a9a4227da269a75a Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Tue, 16 Feb 2016 14:57:01 -0500 Subject: [PATCH 300/650] Allow user to specify multipole library location --- docs/source/usersguide/input.rst | 10 ++++++++++ openmc/settings.py | 20 ++++++++++++++++++++ src/ace.F90 | 13 ++++++------- src/global.F90 | 1 + src/input_xml.F90 | 16 +++++++++++++++- src/multipole.F90 | 11 ++++++----- src/relaxng/settings.rnc | 2 ++ src/relaxng/settings.rng | 7 +++++++ 8 files changed, 67 insertions(+), 13 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 0ea3d8bde5..b54b255c63 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -264,6 +264,16 @@ based on the recommended value in LA-UR-14-24530_. *Default*: 8000 +```` Element +------------------------------- + +The ```` element has no attributes and indicates the +directory containing a windowed multipole library. If a windowed multipole +library is available, OpenMC can use it for on-the-fly Doppler-broadening of +resolved resonance range cross sections. If this element is absent from the +settings.xml file, the :envvar:`MULTIPOLE_LIBRARY` environment variable will be +used. + .. _natural_elements: ```` Element diff --git a/openmc/settings.py b/openmc/settings.py index 4ad207c7a3..71e5ebbc3e 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -72,6 +72,10 @@ class SettingsFile(object): cross_sections.xml). If it is not set, the :envvar:`CROSS_SECTIONS` environment variable will be used to find the path to the XML cross section listing. + multipole_library : str + Indicates the path to a directory containing a windowed multipole + cross section library. If it is not set, the :envvar:`MULTIPOLE_LIBRARY' + environment variable will be used. A multipole library is optional. energy_grid : str Set the method used to search energy grids. Acceptable values are 'nuclide', 'logarithm', and 'material-union'. @@ -139,6 +143,7 @@ class SettingsFile(object): self._confidence_intervals = None self._cross_sections = None + self._multipole_library = None self._energy_grid = None self._ptables = None self._run_cmfd = None @@ -233,6 +238,10 @@ class SettingsFile(object): def cross_sections(self): return self._cross_sections + @property + def multipole_library(self): + return self._multipole_library + @property def energy_grid(self): return self._energy_grid @@ -528,6 +537,11 @@ class SettingsFile(object): check_type('cross sections', cross_sections, basestring) self._cross_sections = cross_sections + @multipole_library.setter + def multipole_library(self, multipole_library): + check_type('cross sections', multipole_library, basestring) + self._multipole_library = multipole_library + @energy_grid.setter def energy_grid(self, energy_grid): check_value('energy grid', energy_grid, @@ -861,6 +875,11 @@ class SettingsFile(object): element = ET.SubElement(self._settings_file, "cross_sections") element.text = str(self._cross_sections) + def _create_multipole_library_subelement(self): + if self._multipole_library is not None: + element = ET.SubElement(self._settings_file, "multipole_library") + element.text = str(self._multipole_library) + def _create_energy_grid_subelement(self): if self._energy_grid is not None: element = ET.SubElement(self._settings_file, "energy_grid") @@ -1024,6 +1043,7 @@ class SettingsFile(object): self._create_sourcepoint_subelement() self._create_confidence_intervals() self._create_cross_sections_subelement() + self._create_multipole_library_subelement() self._create_energy_grid_subelement() self._create_ptables_subelement() self._create_run_cmfd_subelement() diff --git a/src/ace.F90 b/src/ace.F90 index 813e06ec2a..4ef77229ee 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -431,15 +431,14 @@ contains logical :: file_exists ! does multipole library exist? character(7) :: readable ! is multipole library readable? character(6) :: zaid_string ! String of the ZAID - character(9) :: filename ! path to multipole cross section library - type(Nuclide), pointer :: nuc => null() + character(MAX_FILE_LEN+9) :: filename ! path to multipole xs library ! For the time being, and I know this is a bit hacky, we just assume ! that the file will be zaid.h5. associate (nuc => nuclides(i_table)) - write(zaid_string,'(I6.6)') nuc % zaid - filename = zaid_string // ".h5" + write(zaid_string, '(I6.6)') nuc % zaid + filename = trim(path_multipole) // zaid_string // ".h5" ! Check if Multipole library exists and is readable inquire(FILE=filename, EXIST=file_exists, READ=readable) @@ -447,11 +446,11 @@ contains nuc % mp_present = .false. return elseif (readable(1:3) == 'NO') then - call fatal_error("Multipole library '" // trim(filename) // "' is not readable! & - &Change file permissions with chmod command.") + call fatal_error("Multipole library '" // trim(filename) // "' is not & + &readable! Change file permissions with chmod command.") end if - ! display message + ! Display message call write_message("Loading Multipole XS table: " // filename, 6) allocate(nuc % multipole) diff --git a/src/global.F90 b/src/global.F90 index 4c243ee41f..15a88d2059 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -282,6 +282,7 @@ module global character(MAX_FILE_LEN) :: path_input ! Path to input file character(MAX_FILE_LEN) :: path_cross_sections ! Path to cross_sections.xml + character(MAX_FILE_LEN) :: path_multipole ! Path to wmp library character(MAX_FILE_LEN) :: path_source = '' ! Path to binary source character(MAX_FILE_LEN) :: path_state_point ! Path to binary state point character(MAX_FILE_LEN) :: path_source_point ! Path to binary source point diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 99fbb67734..dc67d4b1fd 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -127,6 +127,21 @@ contains end if end if + ! Find the windowed multipole library + if (run_mode /= MODE_PLOTTING) then + if (.not. check_for_node(doc, "multipole_library") .and. & + run_mode /= MODE_PLOTTING) then + ! No library location specified in settings.xml, check + ! environment variable + call get_environment_variable("MULTIPOLE_LIBRARY", env_variable) + path_multipole = trim(env_variable) + else + call get_node_value(doc, "multipole_library", path_multipole) + end if + if (.not. ends_with(path_multipole, "/")) & + path_multipole = trim(path_multipole) // "/" + end if + ! Set output directory if a path has been specified on the ! element if (check_for_node(doc, "output_path")) then @@ -1901,7 +1916,6 @@ contains type(Node), pointer :: doc => null() type(Node), pointer :: node_mat => null() type(Node), pointer :: node_dens => null() - type(Node), pointer :: node_temp => null() type(Node), pointer :: node_nuc => null() type(Node), pointer :: node_ele => null() type(Node), pointer :: node_sab => null() diff --git a/src/multipole.F90 b/src/multipole.F90 index 4ed28a2dbf..da57c96a29 100644 --- a/src/multipole.F90 +++ b/src/multipole.F90 @@ -17,18 +17,19 @@ contains !=============================================================================== subroutine multipole_read(filename, multipole, i_table) - character(len=*), intent(in) :: filename ! Filename of the multipole library to load + character(len=*), intent(in) :: filename ! Filename of the + ! multipole library + ! to load type(MultipoleArray), intent(out), target :: multipole ! The object to fill - integer, intent(in) :: i_table ! index in nuclides/sab_tables - - type(Nuclide), pointer :: nuc => null() + integer, intent(in) :: i_table ! index in nuclides/ + ! sab_tables integer(HID_T) :: file_id integer(HID_T) :: group_id ! Intermediate loading components integer :: NMT - integer :: i, j, k + integer :: i, j integer, allocatable :: MT(:) logical :: accumulated_fission character(len=3) :: MT_string diff --git a/src/relaxng/settings.rnc b/src/relaxng/settings.rnc index 68f221f677..34886c6505 100644 --- a/src/relaxng/settings.rnc +++ b/src/relaxng/settings.rnc @@ -27,6 +27,8 @@ element settings { element cross_sections { xsd:string { maxLength = "255" } }? & + element multipole_library { xsd:string { maxLength = "255" } }? & + element cutoff { (element weight { xsd:double } | attribute weight { xsd:double })? & (element weight_avg { xsd:double } | attribute weight_avg { xsd:double })? diff --git a/src/relaxng/settings.rng b/src/relaxng/settings.rng index ea3efaff9f..1880153e2a 100644 --- a/src/relaxng/settings.rng +++ b/src/relaxng/settings.rng @@ -95,6 +95,13 @@ + + + + 255 + + + From e138fb25ea351cd17c9226b482399f011e9f9cdb Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Tue, 16 Feb 2016 16:20:22 -0500 Subject: [PATCH 301/650] Fixed bug in tiling of energies for ScatterMatrix MGXS objects --- openmc/mgxs/mgxs.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 39da487d0e..cc91e9483f 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1414,12 +1414,11 @@ class MGXS(object): if 'energy [MeV]' in df and 'energyout [MeV]' in df: df.rename(columns={'energy [MeV]': 'group in'}, inplace=True) in_groups = np.tile(all_groups, self.num_subdomains) - in_groups = np.repeat(in_groups, self.num_groups) + in_groups = np.repeat(in_groups, df.shape[0] / in_groups.size) df['group in'] = in_groups df.rename(columns={'energyout [MeV]': 'group out'}, inplace=True) - out_groups = \ - np.tile(all_groups, self.num_subdomains * self.num_groups) + out_groups = np.tile(all_groups, df.shape[0] / all_groups.size) df['group out'] = out_groups columns = ['group in', 'group out'] @@ -1919,7 +1918,7 @@ class ScatterMatrixXS(MGXS): cv.check_value('correction', correction, ('P0', None)) self._correction = correction - def get_slice(self, nuclides=[], groups=[]): + def get_slice(self, nuclides=[], in_groups=[], out_groups=[]): """Build a sliced ScatterMatrix for the specified nuclides and energy groups. @@ -1933,9 +1932,12 @@ class ScatterMatrixXS(MGXS): nuclides : list of str A list of nuclide name strings (e.g., ['U-235', 'U-238']; default is []) - groups : list of Integral - A list of energy group indices starting at 1 for the high energies - (e.g., [1, 2, 3]; default is []) + in_groups : list of Integral + A list of incoming energy group indices starting at 1 for the high + energies (e.g., [1, 2, 3]; default is []) + out_groups : list of Integral + A list of outgoing energy group indices starting at 1 for the high + energies (e.g., [1, 2, 3]; default is []) Returns ------- @@ -1946,14 +1948,14 @@ class ScatterMatrixXS(MGXS): """ # Call super class method and null out derived tallies - slice_xs = super(ScatterMatrixXS, self).get_slice(nuclides, groups) + slice_xs = super(ScatterMatrixXS, self).get_slice(nuclides, in_groups) slice_xs._rxn_rate_tally = None slice_xs._xs_tally = None - # Slice energy groups if needed - if len(groups) != 0: + # Slice outgoing energy groups if needed + if len(out_groups) != 0: filter_bins = [] - for group in groups: + for group in out_groups: group_bounds = self.energy_groups.get_group_bounds(group) filter_bins.append(group_bounds) filter_bins = [tuple(filter_bins)] From dc0907a294dc5ce27f6774a281e78d30d086e6df Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Tue, 16 Feb 2016 18:34:39 -0500 Subject: [PATCH 302/650] Add a toggle to turn multipole on/off --- docs/source/usersguide/input.rst | 25 +++++++++++++++++++------ openmc/settings.py | 20 ++++++++++++++++++++ src/ace.F90 | 2 +- src/ace_header.F90 | 2 +- src/global.F90 | 3 +++ src/input_xml.F90 | 14 ++++++++++++++ src/relaxng/settings.rnc | 4 +++- src/relaxng/settings.rng | 5 +++++ tests/test_multipole/inputs_true.dat | 2 +- tests/test_multipole/test_multipole.py | 1 + 10 files changed, 68 insertions(+), 10 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index b54b255c63..1937bc1090 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -267,12 +267,14 @@ based on the recommended value in LA-UR-14-24530_. ```` Element ------------------------------- -The ```` element has no attributes and indicates the -directory containing a windowed multipole library. If a windowed multipole -library is available, OpenMC can use it for on-the-fly Doppler-broadening of -resolved resonance range cross sections. If this element is absent from the -settings.xml file, the :envvar:`MULTIPOLE_LIBRARY` environment variable will be -used. +The ```` element indicates the directory containing a +windowed multipole library. If a windowed multipole library is available, +OpenMC can use it for on-the-fly Doppler-broadening of resolved resonance range +cross sections. If this element is absent from the settings.xml file, the +:envvar:`MULTIPOLE_LIBRARY` environment variable will be used. + + .. note:: The element must also be set to "True" + for windowed multipole functionality. .. _natural_elements: @@ -775,6 +777,17 @@ problem. It has the following attributes/sub-elements: *Default*: None + +```` Element +------------------------------------ + +The ```` element toggles the windowed multipole +capability on or off. If this element is set to "True" and the relevant data is +available, OpenMC will use the windowed multipole method to evaluate and Doppler +broaden cross sections in the resolved resonance range. + + *Default*: False + ```` Element ----------------------- diff --git a/openmc/settings.py b/openmc/settings.py index 71e5ebbc3e..ec386c2f89 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -125,6 +125,9 @@ class SettingsFile(object): Coordinates of the lower-left point of the UFS mesh ufs_upper_right : tuple or list Coordinates of the upper-right point of the UFS mesh + use_windowed_multipole : bool + Whether or not windowed multipole can be used to evaluate resolved + resonance cross sections. """ @@ -201,6 +204,7 @@ class SettingsFile(object): self._settings_file = ET.Element("settings") self._run_mode_subelement = None self._source_element = None + self._multipole_active = None @property def run_mode(self): @@ -386,6 +390,10 @@ class SettingsFile(object): def dd_count_interactions(self): return self._dd_count_interactions + @property + def use_windowed_multipole(self): + return self._multipole_active + @run_mode.setter def run_mode(self, run_mode): if 'run_mode' not in ['eigenvalue', 'fixed source']: @@ -750,6 +758,11 @@ class SettingsFile(object): self._dd_count_interactions = interactions + @use_windowed_multipole.setter + def use_windowed_multipole(self, active): + check_type('use_windowed_multipole', active, bool) + self._multipole_active = active + def _create_run_mode_subelement(self): if self.run_mode == 'eigenvalue': @@ -1024,6 +1037,12 @@ class SettingsFile(object): subelement = ET.SubElement(element, "count_interactions") subelement.text = str(self._dd_count_interactions).lower() + def _create_use_multipole_subelement(self): + if self._multipole_active is not None: + element = ET.SubElement(self._settings_file, + "use_windowed_multipole") + element.text = str(self._multipole_active) + def export_to_xml(self): """Create a settings.xml file that can be used for a simulation. @@ -1059,6 +1078,7 @@ class SettingsFile(object): self._create_track_subelement() self._create_ufs_subelement() self._create_dd_subelement() + self._create_use_multipole_subelement() # Clean the indentation in the file to be user-readable clean_xml_indentation(self._settings_file) diff --git a/src/ace.F90 b/src/ace.F90 index 4ef77229ee..f84b820301 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -114,7 +114,7 @@ contains end if ! Read multipole file into the appropriate entry on the nuclides array - call read_multipole_data(i_nuclide) + if (multipole_active) call read_multipole_data(i_nuclide) ! Add name and alias to dictionary call already_read % add(name) diff --git a/src/ace_header.F90 b/src/ace_header.F90 index 2d1ca94751..9decc49e74 100644 --- a/src/ace_header.F90 +++ b/src/ace_header.F90 @@ -112,7 +112,7 @@ module ace_header type(UrrData), pointer :: urr_data => null() ! Multipole data - logical :: mp_present + logical :: mp_present = .false. type(MultipoleArray), allocatable :: multipole ! Reactions diff --git a/src/global.F90 b/src/global.F90 index 15a88d2059..81d634c77f 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -91,6 +91,9 @@ module global ! What to assume for expanding natural elements integer :: default_expand = ENDF_BVII1 + ! Whether or not windowed multipole cross sections should be used. + logical :: multipole_active = .false. + ! ============================================================================ ! TALLY-RELATED VARIABLES diff --git a/src/input_xml.F90 b/src/input_xml.F90 index dc67d4b1fd..c3e180257a 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -1054,6 +1054,20 @@ contains end select end if + ! Check to see if windowed multipole functionality is requested + if (check_for_node(doc, "use_windowed_multipole")) then + call get_node_value(doc, "use_windowed_multipole", temp_str) + select case (to_lower(temp_str)) + case ('true', 't', '1', 'y') + multipole_active = .true. + case ('false', 'f', '0', 'n') + multipole_active = .false. + case default + call fatal_error("Unrecognized value for in & + &settings.xml") + end select + end if + ! Close settings XML file call close_xmldoc(doc) diff --git a/src/relaxng/settings.rnc b/src/relaxng/settings.rnc index 34886c6505..c4fc79ad25 100644 --- a/src/relaxng/settings.rnc +++ b/src/relaxng/settings.rnc @@ -162,5 +162,7 @@ element settings { (element E_max { xsd:double } | attribute E_max { xsd:double })? }* - }? + }? & + + element use_windowed_multipole { xsd:boolean }? } diff --git a/src/relaxng/settings.rng b/src/relaxng/settings.rng index 1880153e2a..15c37cc6ec 100644 --- a/src/relaxng/settings.rng +++ b/src/relaxng/settings.rng @@ -738,5 +738,10 @@ + + + + + diff --git a/tests/test_multipole/inputs_true.dat b/tests/test_multipole/inputs_true.dat index a429c9b8d0..04fc11746b 100644 --- a/tests/test_multipole/inputs_true.dat +++ b/tests/test_multipole/inputs_true.dat @@ -1 +1 @@ -5c1cec635da5c4c869bdf58f62924a4cb1648e4ddecf0ce71b823cf45178767ba7f2e089b76d36e8616b1b21ffa43b32ab1b17d20bb74120f900b9e3e9ab9bcc \ No newline at end of file +7658bebe2b6f93feae06417a05bfd4bbbfca668eebd100d976543326439b82d16ea23752ac0537284e1839d9681714df116828daf30857bc83e86cc67e4550d7 \ No newline at end of file diff --git a/tests/test_multipole/test_multipole.py b/tests/test_multipole/test_multipole.py index a5437e433a..ea3108557f 100644 --- a/tests/test_multipole/test_multipole.py +++ b/tests/test_multipole/test_multipole.py @@ -86,6 +86,7 @@ class DistribmatTestHarness(PyAPITestHarness): sets_file.particles = 1000 sets_file.source = Source(space=Box([-1, -1, -1], [1, 1, 1])) sets_file.output = {'summary': True} + sets_file.use_windowed_multipole=True sets_file.export_to_xml() From 7e70156513266bbe2b863389a87427c7302a00ec Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Tue, 16 Feb 2016 18:42:14 -0500 Subject: [PATCH 303/650] Add multipole to Travis --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index efdc457a11..b406a1013e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,6 +45,9 @@ before_script: - cat nndc_xs/nndc.tar.gza* | tar xzvf - - rm -rf nndc_xs - export CROSS_SECTIONS=$PWD/nndc/cross_sections.xml + - wget http://web.mit.edu/smharper/Public/multipole_lib.tar.gz + - tar -xzf multipole_lib.tar.gz + - export MULTIPOLE_LIBRARY=$PWD/multipole_lib - cd .. script: From d5ea097fdac41a877efdd01f6a46c4a7eb35121d Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Tue, 16 Feb 2016 18:48:38 -0500 Subject: [PATCH 304/650] Convert multipole alloctable back to a pointer --- src/ace_header.F90 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ace_header.F90 b/src/ace_header.F90 index 9decc49e74..1dfa06872c 100644 --- a/src/ace_header.F90 +++ b/src/ace_header.F90 @@ -112,8 +112,8 @@ module ace_header type(UrrData), pointer :: urr_data => null() ! Multipole data - logical :: mp_present = .false. - type(MultipoleArray), allocatable :: multipole + logical :: mp_present = .false. + type(MultipoleArray), pointer :: multipole => null() ! Reactions integer :: n_reaction ! # of reactions @@ -291,6 +291,8 @@ module ace_header call this % reaction_index % clear() + if (associated(this % multipole)) deallocate(this % multipole) + end subroutine nuclide_clear end module ace_header From f046829c1448e32a6c291bb2c7d9b8827c6e1b64 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 17 Feb 2016 09:36:23 -0600 Subject: [PATCH 305/650] Write summary.h5 by default --- src/global.F90 | 2 +- src/input_xml.F90 | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/global.F90 b/src/global.F90 index 4c243ee41f..7652d15804 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -390,7 +390,7 @@ module global type(SetInt) :: sourcepoint_batch ! Various output options - logical :: output_summary = .false. + logical :: output_summary = .true. logical :: output_xs = .false. logical :: output_tallies = .true. diff --git a/src/input_xml.F90 b/src/input_xml.F90 index df9d28e13e..92840db5a4 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -905,8 +905,8 @@ contains if (check_for_node(node_output, "summary")) then call get_node_value(node_output, "summary", temp_str) temp_str = to_lower(temp_str) - if (trim(temp_str) == 'true' .or. & - trim(temp_str) == '1') output_summary = .true. + if (trim(temp_str) == 'false' .or. & + trim(temp_str) == '0') output_summary = .false. end if ! Check for cross sections option From 8f3b6147742cc1779443d0f73682e35cb255a5e6 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 17 Feb 2016 20:47:18 -0600 Subject: [PATCH 306/650] Update documentation/notebooks to reflect default writing of summary.h5 --- docs/source/pythonapi/examples/mgxs-part-i.ipynb | 2 +- docs/source/pythonapi/examples/mgxs-part-ii.ipynb | 2 +- docs/source/pythonapi/examples/mgxs-part-iii.ipynb | 2 +- docs/source/pythonapi/examples/pandas-dataframes.ipynb | 2 +- docs/source/pythonapi/examples/tally-arithmetic.ipynb | 2 +- docs/source/usersguide/input.rst | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index 104fbe759b..6b78e9d536 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -341,7 +341,7 @@ "settings_file.batches = batches\n", "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", - "settings_file.output = {'tallies': True, 'summary': True}\n", + "settings_file.output = {'tallies': True}\n", "bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", "settings_file.source = Source(space=Box(\n", " bounds[:3], bounds[3:], only_fissionable=True))\n", diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index 593d536474..0a8d7230eb 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -286,7 +286,7 @@ "settings_file.batches = batches\n", "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", - "settings_file.output = {'tallies': True, 'summary': True}\n", + "settings_file.output = {'tallies': True}\n", "bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", "settings_file.source = Source(space=Box(\n", " bounds[:3], bounds[3:], only_fissionable=True))\n", diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index a541efbf0b..dcb496160e 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -392,7 +392,7 @@ "settings_file.batches = batches\n", "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", - "settings_file.output = {'tallies': False, 'summary': True}\n", + "settings_file.output = {'tallies': False}\n", "source_bounds = [-10.71, -10.71, -10, 10.71, 10.71, 10.]\n", "settings_file.source = Source(Box(\n", " source_bounds[:3], source_bounds[3:], only_fissionable=True))\n", diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index 9e08acccda..ac5d4e4109 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -302,7 +302,7 @@ "settings_file.batches = min_batches\n", "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", - "settings_file.output = {'tallies': False, 'summary': True}\n", + "settings_file.output = {'tallies': False}\n", "settings_file.trigger_active = True\n", "settings_file.trigger_max_batches = max_batches\n", "source_bounds = [-10.71, -10.71, -10, 10.71, 10.71, 10.]\n", diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index e357e73fcd..3a61b09790 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -288,7 +288,7 @@ "settings_file.batches = batches\n", "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", - "settings_file.output = {'tallies': True, 'summary': True}\n", + "settings_file.output = {'tallies': True}\n", "source_bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", "settings_file.source = Source(space=Box(\n", " source_bounds[:3], source_bounds[3:]))\n", diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index a9dda8ff47..85736334a9 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -312,10 +312,10 @@ out the file and "false" will not. *Default*: false :summary: - Writes out an ASCII summary file describing all of the user input files that + Writes out an HDF5 summary file describing all of the user input files that were read in. - *Default*: false + *Default*: true :tallies: Write out an ASCII file of tally results. From 128f25fe2b5bedd6b3d9cdaf537a808e2a3767c0 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Thu, 18 Feb 2016 00:45:49 -0500 Subject: [PATCH 307/650] Added methods to Python APIs Geometry class to extract objects by string name --- openmc/geometry.py | 256 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 253 insertions(+), 3 deletions(-) diff --git a/openmc/geometry.py b/openmc/geometry.py index 9788671f5c..fb43bd77f2 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -1,5 +1,6 @@ from collections import Iterable, OrderedDict from xml.etree import ElementTree as ET +import re import openmc from openmc.clean_xml import * @@ -94,7 +95,16 @@ class Geometry(object): """ - return self._root_universe.get_all_cells() + all_cells = self._root_universe.get_all_cells() + cells = set() + + for cell_id, cell in all_cells.items(): + if cell._type == 'normal': + cells.add(cell) + + cells = list(cells) + cells.sort(key=lambda x: x.id) + return cells def get_all_universes(self): """Return all universes defined @@ -106,7 +116,16 @@ class Geometry(object): """ - return self._root_universe.get_all_universes() + all_universes = self._root_universe.get_all_universes() + universes = set() + + for universe_id, universe in all_universes.items(): + if universe._type == 'normal': + universes.add(universe) + + universes = list(universes) + universes.sort(key=lambda x: x.id) + return universes def get_all_nuclides(self): """Return all nuclides assigned to a material in the geometry @@ -150,6 +169,15 @@ class Geometry(object): return materials def get_all_material_cells(self): + """Return all cells filled by a material + + Returns + ------- + list of openmc.universe.Cell + Cells filled by Materials in the geometry + + """ + all_cells = self.get_all_cells() material_cells = set() @@ -175,7 +203,7 @@ class Geometry(object): material_universes = set() for universe_id, universe in all_universes.items(): - cells = universe._cells + cells = universe.cells for cell_id, cell in cells.items(): if cell._type == 'normal': material_universes.add(universe) @@ -184,6 +212,228 @@ class Geometry(object): material_universes.sort(key=lambda x: x.id) return material_universes + def get_all_lattices(self): + """Return all lattices defined + + Returns + ------- + list of openmc.universe.Lattice + Lattices in the geometry + + """ + + cells = self.get_all_cells() + lattices = set() + + for cell in cells: + if isinstance(cell.fill, openmc.Lattice): + lattices.add(cell.fill) + + lattices = list(lattices) + lattices.sort(key=lambda x: x.id) + return lattices + + def get_materials_by_name(self, name, case_sensitive=False, matching=False): + """Return a list of materials with names matching a regular expression. + + Parameters + ---------- + name : str + The name to search for (regular expressions are acceptable) + case_sensitive : bool + Whether to distinguish upper and lower case letters in each + material's name (default is True) + matching : bool + Whether the names must match completely (default is True) + + Returns + ------- + list of openmc.material.Material + Materials matching the queried name + + """ + + regex = re.compile(b'{0}'.format(name)) + + all_materials = self.get_all_materials() + materials = set() + + for material in all_materials: + material_name = material.name + if not case_sensitive: + material_name = material_name.lower() + + match = regex.findall(material_name) + if match and matching: + materials.add(material) + elif match and match[0] == name: + materials.add(material) + + materials = list(materials) + materials.sort(key=lambda x: x.id) + return materials + + def get_cells_by_name(self, name, case_sensitive=False, matching=False): + """Return a list of cells with names matching a regular expression. + + Parameters + ---------- + name : str + The name to search for (regular expressions are acceptable) + case_sensitive : bool + Whether to distinguish upper and lower case letters in each + cell's name (default is True) + matching : bool + Whether the names must match completely (default is True) + + Returns + ------- + list of openmc.universe.Cell + Cells matching the queried name + + """ + + regex = re.compile(b'{0}'.format(name)) + + all_cells = self.get_all_cells() + cells = set() + + for cell in all_cells: + cell_name = cell.name + if not case_sensitive: + cell_name = cell_name.lower() + + match = regex.findall(cell_name) + if match and matching: + cells.add(cell) + elif match and match[0] == name: + cells.add(cell) + + cells = list(cells) + cells.sort(key=lambda x: x.id) + return cells + + def get_cells_by_fill_name(self, name, case_sensitive=False, matching=False): + """Return a list of cells with fills with names matching a + regular expression. + + Parameters + ---------- + name : str + The name to search for (regular expressions are acceptable) + case_sensitive : bool + Whether to distinguish upper and lower case letters in each + cell's name (default is True) + matching : bool + Whether the names must match completely (default is True) + + Returns + ------- + list of openmc.universe.Cell + Cells with fills matching the queried name + + """ + + regex = re.compile(b'{0}'.format(name)) + + all_cells = self.get_all_cells() + cells = set() + + for cell in all_cells: + cell_fill_name = cell.fill.name + if not case_sensitive: + cell_fill_name = cell_fill_name.lower() + + match = regex.findall(cell_fill_name) + if match and matching: + cells.add(cell) + elif match and match[0] == name: + cells.add(cell) + + cells = list(cells) + cells.sort(key=lambda x: x.id) + return cells + + def get_universes_by_name(self, name, case_sensitive=False, matching=False): + """Return a list of universes with names matching a regular expression. + + Parameters + ---------- + name : str + The name to search for (regular expressions are acceptable) + case_sensitive : bool + Whether to distinguish upper and lower case letters in each + universe's name (default is True) + matching : bool + Whether the names must match completely (default is True) + + Returns + ------- + list of openmc.universe.Universe + Universes matching the queried name + + """ + + regex = re.compile(b'{0}'.format(name)) + + all_universes = self.get_all_universes() + universes = set() + + for universe in all_universes: + universe_name = universe.name + if not case_sensitive: + universe_name = universe_name.lower() + + match = regex.findall(universe_name) + if match and matching: + universes.add(universe) + elif match and match[0] == name: + universes.add(universe) + + universes = list(universes) + universes.sort(key=lambda x: x.id) + return universes + + def get_lattices_by_name(self, name, case_sensitive=False, matching=False): + """Return a list of lattices with names matching a regular expression. + + Parameters + ---------- + name : str + The name to search for (regular expressions are acceptable) + case_sensitive : bool + Whether to distinguish upper and lower case letters in each + lattice's name (default is True) + matching : bool + Whether the names must match completely (default is True) + + Returns + ------- + list of openmc.universe.Lattice + Lattices matching the queried name + + """ + + regex = re.compile(b'{0}'.format(name)) + + all_lattices = self.get_all_lattices() + lattices = set() + + for lattice in all_lattices: + lattice_name = lattice.name + if not case_sensitive: + lattice_name = lattice_name.lower() + + match = regex.findall(lattice_name) + if match and matching: + lattices.add(lattice) + elif match and match[0] == name: + lattices.add(lattice) + + lattices = list(lattices) + lattices.sort(key=lambda x: x.id) + return lattices + class GeometryFile(object): """Geometry file used for an OpenMC simulation. Corresponds directly to the From 3b719d7a469a13811c4d6430faffa66a870afea9 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Thu, 18 Feb 2016 11:49:03 -0500 Subject: [PATCH 308/650] Fix methods/geometry doc typo --- docs/source/methods/geometry.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/methods/geometry.rst b/docs/source/methods/geometry.rst index c1be68f72e..f642cca108 100644 --- a/docs/source/methods/geometry.rst +++ b/docs/source/methods/geometry.rst @@ -84,10 +84,10 @@ to fully define the surface. | Plane perpendicular | x-plane | :math:`x - x_0 = 0` | :math:`x_0` | | to :math:`x`-axis | | | | +----------------------+------------+------------------------------+-------------------------+ - | Plane perpendicular | y-plane | :math:`x - x_0 = 0` | :math:`y_0` | + | Plane perpendicular | y-plane | :math:`y - y_0 = 0` | :math:`y_0` | | to :math:`y`-axis | | | | +----------------------+------------+------------------------------+-------------------------+ - | Plane perpendicular | z-plane | :math:`x - x_0 = 0` | :math:`z_0` | + | Plane perpendicular | z-plane | :math:`z - z_0 = 0` | :math:`z_0` | | to :math:`z`-axis | | | | +----------------------+------------+------------------------------+-------------------------+ | Arbitrary plane | plane | :math:`Ax + By + Cz = D` | :math:`A\;B\;C\;D` | From 0227f4823080a686e8130df065762d8d855d6f3d Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 19 Feb 2016 07:07:46 -0600 Subject: [PATCH 309/650] Fix bug when sampling multiple energy distributions --- src/secondary_header.F90 | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/secondary_header.F90 b/src/secondary_header.F90 index d858074129..7449a5793b 100644 --- a/src/secondary_header.F90 +++ b/src/secondary_header.F90 @@ -1,5 +1,6 @@ module secondary_header + use constants, only: ZERO use endf_header, only: Tab1 use interpolation, only: interpolate_tab1 use random_lcg, only: prn @@ -54,16 +55,19 @@ contains real(8), intent(out) :: mu ! sampled scattering cosine integer :: n ! number of angle-energy distributions - real(8) :: p_valid ! probability that given distribution is valid + real(8) :: prob ! cumulative probability + real(8) :: c ! sampled cumulative probability n = size(this%applicability) if (n > 1) then + prob = ZERO + c = prn() do i = 1, n ! Determine probability that i-th energy distribution is sampled - p_valid = interpolate_tab1(this%applicability(i), E_in) + prob = prob + interpolate_tab1(this%applicability(i), E_in) ! If i-th distribution is sampled, sample energy from the distribution - if (prn() <= p_valid) then + if (c <= prob) then call this%distribution(i)%obj%sample(E_in, E_out, mu) exit end if From 988105dbc3f6a95743b4cfc76dbff048770adac7 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 19 Feb 2016 13:10:20 -0500 Subject: [PATCH 310/650] Fixed Geometry object getter methods to reflect changes in last commit --- openmc/geometry.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/openmc/geometry.py b/openmc/geometry.py index fb43bd77f2..74feaef64b 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -66,8 +66,10 @@ class Geometry(object): # Find the distribcell index of the cell. cells = self.get_all_cells() - if path[-1] in cells: - distribcell_index = cells[path[-1]].distribcell_index + for cell in cells: + if cell.id == path[-1]: + distribcell_index = cell.distribcell_index + break else: raise RuntimeError('Could not find cell {} specified in a \ distribcell filter'.format(path[-1])) @@ -181,7 +183,7 @@ class Geometry(object): all_cells = self.get_all_cells() material_cells = set() - for cell_id, cell in all_cells.items(): + for cell in all_cells: if cell._type == 'normal': material_cells.add(cell) @@ -202,9 +204,9 @@ class Geometry(object): all_universes = self.get_all_universes() material_universes = set() - for universe_id, universe in all_universes.items(): + for universe in all_universes: cells = universe.cells - for cell_id, cell in cells.items(): + for cell in cells: if cell._type == 'normal': material_universes.add(universe) From 5ffaed9507f5628f65517d566446ea8b54d93700 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Fri, 19 Feb 2016 15:11:39 -0500 Subject: [PATCH 311/650] Fix load_statepoint bugs, improve restart test --- src/state_point.F90 | 8 +- .../test_statepoint_restart/results_true.dat | 2774 ++++++++--------- .../test_statepoint_restart.py | 15 +- 3 files changed, 1405 insertions(+), 1392 deletions(-) diff --git a/src/state_point.F90 b/src/state_point.F90 index 70ee2d06ad..799610c4ce 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -658,7 +658,10 @@ contains file_id = file_open(path_state_point, 'r', parallel=.true.) ! Read filetype - call read_dataset(file_id, "filetype", int_array(1)) + call read_dataset(file_id, "filetype", word) + if (trim(word) /= 'statepoint') then + call fatal_error("OpenMC tried to restart from a non-statepoint file.") + end if ! Read revision number for state point file and make sure it matches with ! current version @@ -755,7 +758,8 @@ contains ! Check if tally results are present tallies_group = open_group(file_id, "tallies") - call read_dataset(file_id, "tallies_present", int_array(1), indep=.true.) + call read_dataset(tallies_group, "tallies_present", int_array(1), & + indep=.true.) ! Read in sum and sum squared if (int_array(1) == 1) then diff --git a/tests/test_statepoint_restart/results_true.dat b/tests/test_statepoint_restart/results_true.dat index 7fb39ef0ac..0e4eef9a9d 100644 --- a/tests/test_statepoint_restart/results_true.dat +++ b/tests/test_statepoint_restart/results_true.dat @@ -1,16 +1,96 @@ k-combined: -0.000000E+00 0.000000E+00 +3.021779E-01 3.813358E-03 tally 1: +7.000000E-03 +2.100000E-05 +1.127639E-03 +7.464355E-07 +-1.264355E-03 +1.192757E-06 +8.769846E-04 +1.117508E-06 +3.359153E-03 +4.366438E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.107648E-04 +3.730336E-07 1.000000E-03 1.000000E-06 -6.655302E-04 -4.429305E-07 -1.643958E-04 -2.702597E-08 --2.613362E-04 -6.829663E-08 -9.306024E-04 -8.660208E-07 +6.713061E-04 +4.506518E-07 +1.759778E-04 +3.096817E-08 +-2.506458E-04 +6.282332E-08 +6.069794E-04 +3.684240E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.000000E-03 +1.500000E-05 +4.398928E-03 +8.198908E-06 +1.784486E-03 +3.422315E-06 +8.494423E-04 +9.262242E-07 +4.566637E-03 +5.646039E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.069794E-04 +3.684240E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.000000E-03 +3.000000E-06 +-1.419189E-03 +9.791601E-07 +-3.125982E-05 +5.086129E-07 +3.291570E-04 +1.943609E-07 +1.525426E-03 +8.346311E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -43,14 +123,14 @@ tally 1: 0.000000E+00 1.000000E-03 1.000000E-06 -3.222834E-05 -1.038666E-09 --4.984420E-04 -2.484444E-07 --4.825883E-05 -2.328915E-09 -1.221939E-03 -7.467452E-07 +-1.542107E-05 +2.378095E-10 +-4.996433E-04 +2.496434E-07 +2.312244E-05 +5.346472E-10 +3.053824E-04 +9.325841E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -81,16 +161,136 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.000000E-02 +8.600000E-05 +3.995253E-03 +1.648172E-05 +3.349403E-03 +1.166653E-05 +4.208940E-03 +7.077664E-06 +1.033905E-02 +2.197265E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.029991E-04 +1.818050E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.600000E-02 +1.620000E-04 +7.996640E-03 +1.882484E-05 +3.921034E-03 +1.157453E-05 +1.644629E-03 +3.217857E-06 +1.159182E-02 +3.534975E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.100000E-02 +2.500000E-05 +4.691861E-03 +7.999548E-06 +1.771537E-03 +3.385525E-06 +7.888659E-04 +1.911759E-06 +4.561602E-03 +4.337486E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.107648E-04 +3.730336E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 1.000000E-03 1.000000E-06 --5.510082E-04 -3.036101E-07 --4.458491E-05 -1.987814E-09 -4.082832E-04 -1.666952E-07 -3.102008E-04 -9.622454E-08 +-3.878617E-04 +1.504367E-07 +-2.743449E-04 +7.526515E-08 +4.359210E-04 +1.900271E-07 +3.034897E-04 +9.210600E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -121,216 +321,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.000000E-03 -2.000000E-05 --1.959329E-04 -1.780222E-06 --1.481510E-03 -1.429609E-06 -2.196341E-04 -1.036368E-06 -3.355616E-03 -5.662237E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007686E-04 -9.046177E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.000000E-03 -4.100000E-05 -5.210818E-03 -1.357783E-05 -1.394382E-03 -9.898987E-07 -2.796067E-04 -6.984712E-07 -3.684681E-03 -7.605759E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.000000E-03 -8.000000E-06 -1.019723E-03 -2.941013E-06 -3.796068E-04 -1.213513E-06 -6.991567E-04 -2.907192E-07 -2.133677E-03 -2.313409E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.000000E-03 -3.200000E-05 -7.394988E-04 -4.098659E-07 -4.040769E-04 -3.143715E-07 -1.784935E-04 -3.163907E-07 -2.744646E-03 -3.801137E-06 +1.600000E-02 +5.600000E-05 +4.563082E-03 +6.119552E-06 +1.839038E-03 +1.089339E-06 +1.944879E-03 +2.372975E-06 +8.524215E-03 +1.874218E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -361,16 +361,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.000000E-03 -4.500000E-05 -4.871111E-03 -1.225810E-05 -2.381697E-03 -2.840243E-06 -2.498800E-03 -3.161161E-06 -3.656384E-03 -6.838240E-06 +1.300000E-02 +5.300000E-05 +6.763364E-03 +1.445064E-05 +2.970216E-03 +3.071874E-06 +2.622002E-03 +3.547897E-06 +5.177618E-03 +8.040228E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -401,16 +401,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.000000E-03 -5.000000E-06 -9.405302E-04 -8.589283E-07 -2.623590E-03 -3.990114E-06 -6.768145E-04 -3.652890E-07 -1.212507E-03 -9.103805E-07 +8.000000E-03 +1.400000E-05 +1.172941E-04 +1.212454E-06 +4.110442E-04 +5.740547E-06 +1.788140E-03 +9.775061E-07 +3.946448E-03 +3.956113E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -481,16 +481,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.200000E-02 -8.000000E-05 -6.636635E-03 -2.425315E-05 -4.338045E-03 -1.464490E-05 -3.621511E-03 -1.385488E-05 -7.040297E-03 -2.530812E-05 +3.000000E-02 +2.020000E-04 +1.305502E-02 +4.343057E-05 +8.214305E-03 +2.001202E-05 +3.511762E-03 +1.412559E-05 +1.401995E-02 +4.269615E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -521,16 +521,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.000000E-02 -5.800000E-05 -1.624971E-03 -3.694766E-06 -1.160491E-03 -1.280447E-06 --8.692024E-05 -3.035696E-06 -4.305083E-03 -1.106984E-05 +2.400000E-02 +1.320000E-04 +5.207205E-03 +9.311400E-06 +3.232372E-03 +3.475980E-06 +2.062884E-03 +4.773104E-06 +1.039066E-02 +2.611825E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -539,8 +539,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.102008E-04 -9.622454E-08 +9.171802E-04 +4.646485E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -561,16 +561,16 @@ tally 1: 8.970946E-07 0.000000E+00 0.000000E+00 -2.000000E-03 -4.000000E-06 -3.249184E-04 -1.055720E-07 -9.928009E-04 -9.856536E-07 -1.088489E-03 -1.184808E-06 -9.023059E-04 -8.141559E-07 +1.200000E-02 +5.000000E-05 +2.602864E-03 +4.471106E-06 +4.677566E-03 +1.033338E-05 +3.640584E-03 +3.605122E-06 +4.845169E-03 +8.244364E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -601,16 +601,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.000000E-03 -1.000000E-06 -9.686373E-04 -9.382582E-07 -9.073874E-04 -8.233518E-07 -8.191239E-04 -6.709640E-07 -6.204016E-04 -3.848982E-07 +1.100000E-02 +3.700000E-05 +3.786358E-03 +5.908272E-06 +3.416266E-03 +7.032934E-06 +3.353945E-03 +5.140933E-06 +4.261660E-03 +4.981501E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -619,8 +619,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.102008E-04 -9.622454E-08 +6.136905E-04 +1.883305E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -641,16 +641,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.500000E-02 -1.530000E-04 -1.597072E-03 -3.005651E-06 -2.949088E-03 -4.679665E-06 -3.631393E-03 -7.090560E-06 -5.460996E-03 -1.769365E-05 +2.700000E-02 +2.090000E-04 +7.046302E-03 +1.594429E-05 +6.489218E-03 +1.057182E-05 +5.057204E-03 +8.269888E-06 +1.274541E-02 +3.591083E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -661,16 +661,16 @@ tally 1: 0.000000E+00 1.503843E-03 2.261544E-06 -2.000000E-03 -4.000000E-06 --1.555019E-04 -2.418085E-08 --6.469952E-05 -4.186027E-09 --1.256495E-04 -1.578779E-08 -2.462742E-03 -3.825930E-06 +3.000000E-03 +5.000000E-06 +3.434984E-04 +2.731822E-07 +-1.911976E-04 +2.018778E-08 +-5.635206E-04 +2.075189E-07 +2.764973E-03 +3.917274E-06 2.000000E-03 2.000000E-06 1.802029E-03 @@ -681,16 +681,16 @@ tally 1: 4.622600E-07 0.000000E+00 0.000000E+00 -1.400000E-02 -1.060000E-04 -3.845354E-03 -1.771893E-05 -7.969986E-04 -1.251583E-05 -2.663540E-03 -3.580311E-06 -7.322201E-03 -2.693121E-05 +2.600000E-02 +1.540000E-04 +1.210267E-02 +4.180540E-05 +5.431699E-03 +2.284317E-05 +6.108638E-03 +1.136078E-05 +1.309420E-02 +3.810504E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -699,8 +699,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.102008E-04 -9.622454E-08 +6.124312E-04 +1.875678E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -709,28 +709,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-02 -5.800000E-05 -7.529857E-03 -3.304826E-05 -4.385729E-03 -1.180121E-05 -2.219847E-03 -3.711400E-06 -4.549258E-03 -1.248547E-05 +6.044609E-04 +3.653729E-07 +1.000000E-03 +1.000000E-06 +9.341546E-04 +8.726448E-07 +8.089673E-04 +6.544280E-07 +6.367311E-04 +4.054265E-07 +3.022304E-04 +9.134324E-08 +2.100000E-02 +9.900000E-05 +1.206996E-02 +4.033646E-05 +6.345510E-03 +1.603169E-05 +1.976558E-03 +4.386164E-06 +1.001209E-02 +2.316074E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -749,28 +749,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.815901E-03 +1.829916E-06 +2.000000E-03 +2.000000E-06 +1.977802E-03 +1.955858E-06 +1.933788E-03 +1.869841E-06 +1.868714E-03 +1.746332E-06 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.000000E-03 -5.000000E-06 -1.328181E-03 -8.967072E-07 --4.616880E-04 -2.148940E-07 --1.029769E-03 -5.645716E-07 -1.522708E-03 -1.199054E-06 +1.100000E-02 +3.900000E-05 +2.604154E-03 +9.668124E-06 +1.503936E-04 +1.170450E-06 +5.645599E-04 +1.841604E-06 +5.455481E-03 +1.116233E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -801,16 +801,16 @@ tally 1: 9.256927E-07 0.000000E+00 0.000000E+00 -2.000000E-02 -2.000000E-04 -7.111929E-03 -2.528978E-05 -1.084601E-03 -1.073353E-06 -1.275976E-03 -2.215783E-06 -7.350498E-03 -2.790619E-05 +4.100000E-02 +3.610000E-04 +1.275568E-02 +3.756672E-05 +7.436840E-03 +1.784918E-05 +6.238119E-03 +1.114039E-05 +1.706095E-02 +6.393171E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -819,8 +819,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.015373E-04 -3.618471E-07 +1.510747E-03 +8.216143E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -841,16 +841,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.000000E-03 -2.500000E-05 -1.990597E-03 -2.484498E-06 --4.860874E-04 -2.969876E-07 -6.661989E-04 -2.268944E-07 -4.577555E-03 -1.050456E-05 +2.500000E-02 +1.570000E-04 +4.743361E-03 +1.500512E-05 +2.243747E-03 +1.216909E-05 +6.504387E-04 +5.012686E-06 +1.369930E-02 +4.220232E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -859,8 +859,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.102008E-04 -9.622454E-08 +6.124312E-04 +1.875678E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -869,28 +869,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.015373E-04 -3.618471E-07 -1.000000E-03 -1.000000E-06 -9.615527E-04 -9.245836E-07 -8.868754E-04 -7.865479E-07 -7.802605E-04 -6.088065E-07 +1.205998E-03 +7.272200E-07 +2.000000E-03 +2.000000E-06 +1.935082E-03 +1.872342E-06 +1.808514E-03 +1.635965E-06 +1.626644E-03 +1.325172E-06 0.000000E+00 0.000000E+00 -1.000000E-03 -1.000000E-06 --3.730183E-04 -1.391426E-07 --2.912860E-04 -8.484756E-08 -4.297706E-04 -1.847027E-07 -9.306024E-04 -8.660208E-07 +1.800000E-02 +1.180000E-04 +6.144587E-03 +1.810176E-05 +3.517233E-03 +7.894223E-06 +5.434668E-03 +1.689927E-05 +7.002945E-03 +1.633731E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -899,6 +899,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.111025E-04 +2.767076E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -919,18 +921,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -3.000000E-03 -5.000000E-06 -2.287183E-03 -2.659902E-06 -1.571504E-03 -1.313687E-06 -1.459898E-03 -1.179754E-06 -9.117381E-04 -4.580716E-07 +6.000000E-03 +1.400000E-05 +2.937841E-03 +3.083257E-06 +1.316488E-03 +1.378720E-06 +1.917209E-03 +1.388887E-06 +2.434865E-03 +1.665821E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -961,16 +961,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.200000E-02 -2.600000E-04 -6.732483E-03 -2.695948E-05 -5.717821E-03 -2.889220E-05 --2.356418E-04 -7.546819E-07 -8.892069E-03 -4.212262E-05 +4.100000E-02 +4.290000E-04 +1.555575E-02 +6.845536E-05 +1.492622E-02 +7.523417E-05 +4.779064E-03 +1.568962E-05 +1.858109E-02 +9.770216E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1001,16 +1001,16 @@ tally 1: 1.396226E-10 0.000000E+00 0.000000E+00 -1.300000E-02 -1.450000E-04 -5.254317E-03 -2.007625E-05 -1.153872E-03 -6.667482E-07 -1.643586E-03 -1.926972E-06 -5.733468E-03 -2.652835E-05 +2.300000E-02 +1.870000E-04 +8.530317E-03 +2.513821E-05 +2.769866E-03 +1.832987E-06 +3.367000E-03 +3.408158E-06 +1.029151E-02 +3.475479E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1041,16 +1041,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.100000E-02 -6.100000E-05 -6.423451E-03 -2.063127E-05 -3.306770E-03 -5.779309E-06 -2.784620E-03 -3.970295E-06 -3.976017E-03 -7.971626E-06 +2.300000E-02 +1.110000E-04 +1.493458E-02 +4.520237E-05 +8.130453E-03 +1.434362E-05 +5.917132E-03 +7.829616E-06 +1.005025E-02 +2.033292E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1081,16 +1081,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.000000E-03 -8.000000E-06 -6.140550E-04 -1.773047E-06 --1.620585E-04 -8.222999E-07 -1.423762E-03 -1.013556E-06 -1.832908E-03 -1.680177E-06 +7.000000E-03 +1.100000E-05 +2.102923E-03 +3.237003E-06 +5.338761E-04 +1.665334E-06 +2.177563E-03 +1.210407E-06 +3.049393E-03 +2.236660E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1121,16 +1121,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.500000E-02 -1.250000E-04 -4.942916E-03 -1.235885E-05 -1.021964E-03 -5.222106E-07 -9.236822E-04 -1.479238E-06 -7.322201E-03 -2.693121E-05 +3.300000E-02 +2.470000E-04 +1.392809E-02 +4.644694E-05 +6.658849E-03 +2.448402E-05 +2.971606E-03 +4.596585E-06 +1.583003E-02 +5.281056E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1139,8 +1139,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.102008E-04 -9.622454E-08 +9.146617E-04 +4.615975E-07 1.000000E-03 1.000000E-06 5.742336E-04 @@ -1149,68 +1149,28 @@ tally 1: 2.898371E-11 -3.879749E-04 1.505245E-07 -3.007686E-04 -9.046177E-08 -1.000000E-03 -1.000000E-06 -9.585989E-04 -9.189118E-07 -8.783677E-04 -7.715298E-07 -7.642712E-04 -5.841105E-07 -3.007686E-04 -9.046177E-08 -1.300000E-02 -8.900000E-05 -5.419508E-03 -1.767227E-05 -2.993901E-03 -4.531596E-06 -2.675067E-03 -3.968688E-06 -5.780629E-03 -1.774150E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007686E-04 -9.046177E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.221939E-03 -7.467452E-07 +1.213130E-03 +5.521442E-07 2.000000E-03 2.000000E-06 -1.775152E-03 -1.597527E-06 -1.396291E-03 -1.130413E-06 -9.794822E-04 -9.115176E-07 -0.000000E+00 -0.000000E+00 -8.000000E-03 -5.000000E-05 -2.406686E-03 -4.825540E-06 -4.960582E-04 -1.033420E-06 -1.240589E-03 -2.480639E-06 -5.226253E-03 -1.611788E-05 +1.895662E-03 +1.796999E-06 +1.695499E-03 +1.439233E-06 +1.415735E-03 +1.008516E-06 +3.007686E-04 +9.046177E-08 +4.000000E-02 +3.460000E-04 +1.325054E-02 +4.611581E-05 +4.279513E-03 +1.445432E-05 +5.681074E-03 +8.701686E-06 +1.883326E-02 +7.820565E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1219,8 +1179,48 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.052295E-04 +4.558347E-07 0.000000E+00 0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.525429E-03 +8.388512E-07 +3.000000E-03 +3.000000E-06 +2.694249E-03 +2.442268E-06 +2.163402E-03 +1.718872E-06 +1.541834E-03 +1.227757E-06 +0.000000E+00 +0.000000E+00 +2.000000E-02 +1.000000E-04 +5.928221E-03 +9.217060E-06 +5.152240E-03 +1.183310E-05 +2.057268E-03 +2.929338E-06 +9.478909E-03 +2.313196E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.057201E-04 +1.834492E-07 1.000000E-03 1.000000E-06 9.405199E-04 @@ -1229,8 +1229,168 @@ tally 1: 6.837084E-07 6.691277E-04 4.477318E-07 -3.102008E-04 -9.622454E-08 +6.124312E-04 +1.875678E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.124312E-04 +1.875678E-07 +1.400000E-02 +5.200000E-05 +6.537971E-03 +1.724690E-05 +3.839523E-03 +8.693753E-06 +4.048043E-03 +5.450370E-06 +7.581656E-03 +1.459334E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.069794E-04 +3.684240E-07 +1.000000E-03 +1.000000E-06 +5.703488E-04 +3.252978E-07 +-1.205336E-05 +1.452836E-10 +-3.916902E-04 +1.534212E-07 +0.000000E+00 +0.000000E+00 +3.200000E-02 +2.340000E-04 +1.368605E-02 +4.005184E-05 +6.894848E-03 +1.073483E-05 +5.553663E-03 +7.001843E-06 +1.492310E-02 +4.851599E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.224455E-03 +5.613642E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.800000E-02 +1.860000E-04 +1.044511E-02 +6.915901E-05 +6.444951E-03 +3.586496E-05 +5.196826E-03 +1.312451E-05 +1.156517E-02 +3.164422E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.057201E-04 +1.834492E-07 +1.000000E-03 +1.000000E-06 +-6.535773E-04 +4.271632E-07 +1.407448E-04 +1.980911E-08 +2.824055E-04 +7.975284E-08 +1.822205E-03 +1.106831E-06 +2.000000E-03 +2.000000E-06 +1.954998E-03 +1.911525E-06 +1.867287E-03 +1.747820E-06 +1.741309E-03 +1.532659E-06 +0.000000E+00 +0.000000E+00 +1.900000E-02 +1.010000E-04 +1.062788E-02 +3.182295E-05 +6.707513E-03 +1.259151E-05 +6.889024E-03 +1.429877E-05 +8.202036E-03 +2.430378E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.306024E-04 +8.660208E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.306024E-04 +8.660208E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1241,16 +1401,176 @@ tally 1: 0.000000E+00 3.102008E-04 9.622454E-08 -6.000000E-03 -2.600000E-05 -8.982135E-05 -2.560934E-07 --7.114096E-04 -2.713326E-07 -8.252336E-04 -1.794332E-06 -2.716350E-03 -5.885778E-06 +1.500000E-02 +4.500000E-05 +3.192578E-03 +7.201112E-06 +4.457942E-03 +6.346144E-06 +3.572536E-03 +4.921318E-06 +7.292620E-03 +1.123722E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.111025E-04 +2.767076E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.069794E-04 +3.684240E-07 +1.000000E-03 +1.000000E-06 +9.537549E-04 +9.096483E-07 +8.644725E-04 +7.473127E-07 +7.383215E-04 +5.451186E-07 +0.000000E+00 +0.000000E+00 +2.300000E-02 +1.310000E-04 +7.696543E-03 +2.602323E-05 +5.553275E-03 +1.677303E-05 +3.110421E-03 +1.605284E-05 +1.157943E-02 +3.065139E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.102008E-04 +9.622454E-08 +1.000000E-03 +1.000000E-06 +-1.849356E-05 +3.420117E-10 +-4.994870E-04 +2.494872E-07 +2.772452E-05 +7.686492E-10 +9.104691E-04 +8.289540E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.600000E-02 +1.460000E-04 +1.097600E-02 +2.696995E-05 +8.425033E-03 +2.480653E-05 +3.259803E-03 +4.519527E-06 +1.278442E-02 +3.571130E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.102008E-04 +9.622454E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.600000E-02 +6.000000E-05 +2.471171E-03 +8.220215E-06 +2.563821E-04 +8.785791E-07 +1.300883E-03 +3.079168E-06 +7.314002E-03 +1.134821E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.022304E-04 +9.134324E-08 +1.000000E-03 +1.000000E-06 +-5.657444E-04 +3.200667E-07 +-1.989995E-05 +3.960081E-10 +3.959267E-04 +1.567580E-07 +3.007686E-04 +9.046177E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.000000E-03 +1.800000E-05 +5.436075E-03 +7.868978E-06 +2.425522E-03 +1.963607E-06 +7.168734E-04 +1.273978E-06 +4.589694E-03 +5.548791E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1281,16 +1601,216 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.100000E-02 +1.070000E-04 +7.539735E-03 +2.068189E-05 +3.936810E-03 +7.972494E-06 +2.420366E-04 +1.148364E-06 +9.428594E-03 +2.131421E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.053824E-04 +9.325841E-08 +2.000000E-03 +2.000000E-06 +1.606787E-04 +1.589809E-06 +1.384713E-03 +1.050316E-06 +7.117279E-04 +6.789060E-07 +9.257840E-04 +4.781566E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.600000E-02 +5.100000E-04 +1.468472E-02 +4.705766E-05 +8.285657E-03 +2.501121E-05 +5.066048E-03 +7.892505E-06 +1.769628E-02 +7.226941E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.216485E-03 +5.564829E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.300000E-02 +1.130000E-04 +9.030313E-03 +2.036594E-05 +5.561323E-03 +2.088769E-05 +3.949070E-03 +5.399490E-06 +1.065996E-02 +2.405722E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.124312E-04 +1.875678E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.044609E-04 +3.653729E-07 +1.000000E-03 +1.000000E-06 +9.969425E-04 +9.938944E-07 +9.908416E-04 +9.817670E-07 +9.817251E-04 +9.637842E-07 +0.000000E+00 +0.000000E+00 1.300000E-02 -8.900000E-05 -6.195490E-03 -1.953479E-05 -2.111239E-03 -2.311139E-06 -2.268320E-03 -3.353244E-06 -5.808926E-03 -1.694986E-05 +4.300000E-05 +1.119189E-03 +4.668647E-06 +-1.976393E-04 +4.632517E-06 +2.358914E-03 +3.047107E-06 +6.688330E-03 +1.125860E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.102008E-04 +9.622454E-08 +1.000000E-03 +1.000000E-06 +-3.353539E-04 +1.124622E-07 +-3.313067E-04 +1.097641E-07 +4.087442E-04 +1.670718E-07 +9.161472E-04 +8.393257E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.600000E-02 +1.980000E-04 +1.024848E-02 +3.100622E-05 +-1.145555E-04 +2.521646E-06 +1.453177E-03 +1.505423E-06 +1.124135E-02 +3.412415E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.029991E-04 +1.818050E-07 +1.000000E-03 +1.000000E-06 +-2.499079E-04 +6.245395E-08 +-4.063191E-04 +1.650952E-07 +3.358425E-04 +1.127902E-07 +6.044609E-04 +3.653729E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +8.700000E-05 +6.743817E-03 +2.313239E-05 +1.353852E-03 +7.358462E-06 +3.054381E-03 +5.051576E-06 +7.932519E-03 +1.438883E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1321,98 +1841,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.000000E-03 -4.100000E-05 --8.217874E-04 -4.663323E-07 -7.383083E-04 -5.193896E-06 -8.200240E-04 -3.424935E-07 -3.976017E-03 -7.971626E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.000000E-03 -8.000000E-06 -2.748347E-03 -4.220881E-06 -2.045316E-03 -2.683544E-06 -2.280529E-03 -2.612273E-06 -6.015373E-04 -3.618471E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.306024E-04 -8.660208E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.306024E-04 -8.660208E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -6.000000E-03 -1.800000E-05 -2.626871E-03 -3.665081E-06 -1.681981E-03 -1.510257E-06 -1.862830E-03 -2.103749E-06 -2.735214E-03 -4.122645E-06 -0.000000E+00 -0.000000E+00 +2.000000E-02 +9.000000E-05 +4.678519E-03 +8.162854E-06 +2.588181E-03 +7.958110E-06 +2.322176E-03 +3.426024E-06 +8.534070E-03 +1.767419E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1421,6 +1859,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.029991E-04 +1.818050E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1442,15 +1882,15 @@ tally 1: 0.000000E+00 0.000000E+00 1.100000E-02 -6.500000E-05 -6.880553E-03 -2.448726E-05 -3.974657E-03 -9.611600E-06 -3.058908E-03 -1.181515E-05 -4.295650E-03 -1.005573E-05 +3.300000E-05 +7.244624E-03 +1.778235E-05 +2.926133E-03 +9.287629E-06 +9.851866E-04 +6.097573E-06 +3.660351E-03 +3.716102E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1459,8 +1899,48 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.102008E-04 -9.622454E-08 +3.034897E-04 +9.210600E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.053824E-04 +9.325841E-08 +1.000000E-03 +1.000000E-06 +1.744930E-04 +3.044781E-08 +-4.543283E-04 +2.064142E-07 +-2.484572E-04 +6.173098E-08 +0.000000E+00 +0.000000E+00 +1.000000E-02 +2.600000E-05 +3.641369E-03 +6.818931E-06 +2.110606E-03 +2.176630E-06 +1.892973E-03 +1.812944E-06 +5.777456E-03 +9.494012E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.034897E-04 +9.210600E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1481,16 +1961,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.200000E-02 -7.200000E-05 -6.025175E-03 -1.856579E-05 -5.884402E-03 -2.141913E-05 -1.752856E-03 -2.842294E-06 -6.401031E-03 -2.082068E-05 +1.300000E-02 +3.900000E-05 +1.682557E-03 +1.846926E-06 +4.172846E-04 +1.892148E-06 +7.276646E-04 +1.085417E-06 +6.092709E-03 +8.907893E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1499,8 +1979,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.102008E-04 -9.622454E-08 +3.053824E-04 +9.325841E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1522,15 +2002,25 @@ tally 1: 0.000000E+00 0.000000E+00 5.000000E-03 -1.700000E-05 -3.189581E-03 -6.250530E-06 -1.000837E-03 -5.036982E-07 --3.117653E-04 -2.901990E-07 -2.754079E-03 -3.853002E-06 +7.000000E-06 +1.580450E-03 +1.753085E-06 +3.349602E-04 +3.639488E-07 +2.690006E-04 +2.374932E-07 +1.830811E-03 +9.321096E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.102008E-04 +9.622454E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1541,638 +2031,146 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.034897E-04 +9.210600E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +1.250000E-04 +2.138118E-03 +8.791773E-06 +2.868574E-03 +9.339641E-06 +5.807501E-04 +1.660344E-06 +8.165982E-03 +2.226036E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.102008E-04 +9.622454E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.044609E-04 +3.653729E-07 1.000000E-03 1.000000E-06 --5.657444E-04 -3.200667E-07 --1.989995E-05 -3.960081E-10 -3.959267E-04 -1.567580E-07 +2.312419E-04 +5.347280E-08 +-4.197908E-04 +1.762243E-07 +-3.159499E-04 +9.982435E-08 +0.000000E+00 +0.000000E+00 +2.100000E-02 +1.070000E-04 +2.216472E-03 +6.388960E-06 +4.896969E-03 +6.428816E-06 +2.155707E-03 +2.884510E-06 +1.038058E-02 +2.477423E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 3.007686E-04 9.046177E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.000000E-03 -9.000000E-06 -1.797289E-03 -3.230248E-06 -7.121477E-04 -5.071544E-07 -4.492929E-04 -2.018641E-07 -1.551004E-03 -2.405613E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.100000E-02 -6.500000E-05 -6.283851E-03 -1.995229E-05 -1.355416E-03 -1.756870E-06 --4.317669E-04 -7.579610E-07 -4.267354E-03 -9.253637E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 1.000000E-03 1.000000E-06 -9.682863E-04 -9.375784E-07 -9.063676E-04 -8.215023E-07 -8.171815E-04 -6.677855E-07 -6.204016E-04 -3.848982E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.800000E-02 -1.640000E-04 -7.069243E-03 -2.506156E-05 -4.321329E-03 -1.796567E-05 -2.557673E-03 -3.894493E-06 -6.438760E-03 -2.205150E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.200000E-02 -7.200000E-05 -4.666186E-03 -1.284828E-05 -2.641891E-03 -1.762435E-05 -9.754238E-04 -2.039232E-06 -5.498725E-03 -1.512159E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.000000E-03 -8.000000E-06 -1.714892E-04 -9.981511E-07 --4.305094E-04 -9.268480E-08 --2.287903E-04 -5.786188E-08 -2.443878E-03 -2.986981E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.100000E-02 -8.500000E-05 -4.472745E-03 -1.447325E-05 -6.072016E-04 -5.846134E-07 -9.336487E-04 -9.381432E-07 -5.169660E-03 -1.440996E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007686E-04 -9.046177E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.000000E-03 -3.400000E-05 -3.030014E-03 -1.297316E-05 -1.879812E-03 -5.805316E-06 -2.471474E-03 -4.341265E-06 -3.374480E-03 -6.162391E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.000000E-03 -2.900000E-05 --7.617232E-05 -3.053607E-08 -1.791545E-04 -5.297145E-08 -1.386068E-03 -1.737839E-06 -3.054847E-03 -4.667158E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007686E-04 -9.046177E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-03 -4.000000E-06 -1.083160E-03 -1.173236E-06 --4.570050E-05 -2.088536E-09 --6.290949E-04 -3.957604E-07 -6.204016E-04 -3.848982E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +7.019813E-04 +4.927778E-07 +2.391667E-04 +5.720072E-08 +-1.881699E-04 +3.540793E-08 +2.131373E-03 +2.696833E-06 +1.000000E-03 +1.000000E-06 +9.937981E-04 +9.876347E-07 +9.814521E-04 +9.632483E-07 +9.630767E-04 +9.275168E-07 0.000000E+00 0.000000E+00 6.000000E-03 -2.000000E-05 -2.716180E-03 -5.893679E-06 -1.554292E-03 -1.376524E-06 -7.264867E-04 -1.331497E-06 -3.045415E-03 -4.796216E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.000000E-03 -2.500000E-05 -9.648146E-04 -5.981145E-07 -4.634865E-05 -7.955048E-07 --1.328560E-04 -3.379815E-07 -3.355616E-03 -5.662237E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.000000E-03 -5.000000E-06 -1.289998E-03 -8.380263E-07 --3.762753E-05 -1.288533E-07 --2.613682E-04 -4.197617E-08 -1.221939E-03 -7.467452E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.100000E-02 -8.500000E-05 -3.095504E-03 -7.078598E-06 --9.175432E-04 -6.837255E-07 --7.570383E-04 -4.237745E-07 -4.530394E-03 -1.567294E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.100000E-02 -7.300000E-05 -3.067467E-03 -5.676919E-06 -2.403624E-03 -2.913670E-06 -1.402382E-03 -1.691430E-06 -5.216821E-03 -1.489979E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007686E-04 -9.046177E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.000000E-03 -5.000000E-06 -1.008832E-03 -8.754929E-07 --8.318856E-04 -3.573666E-07 --9.886180E-04 -7.790297E-07 -1.851773E-03 -2.496075E-06 -0.000000E+00 -0.000000E+00 +1.000000E-05 +2.774441E-03 +2.455060E-06 +-4.125360E-04 +1.557128E-06 +-9.369606E-04 +2.349382E-06 +3.666415E-03 +4.871762E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2181,6 +2179,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.057201E-04 +1.834492E-07 1.000000E-03 1.000000E-06 8.429685E-04 @@ -2241,6 +2241,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.000000E-03 +4.000000E-05 +-7.915490E-05 +1.150292E-07 +2.293529E-03 +2.932682E-06 +1.356149E-03 +9.471925E-07 +4.579650E-03 +7.918475E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2249,8 +2259,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.204016E-04 -3.848982E-07 +3.022304E-04 +9.134324E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2271,26 +2281,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.000000E-03 -9.000000E-06 -2.576209E-03 -6.636855E-06 -1.844839E-03 -3.403429E-06 -9.997002E-04 -9.994005E-07 -1.240803E-03 -1.539593E-06 +1.100000E-02 +3.300000E-05 +5.093647E-03 +1.217545E-05 +1.852586E-03 +4.478970E-06 +9.768799E-04 +1.395189E-06 +4.578572E-03 +5.491453E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2309,6 +2309,46 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.053824E-04 +9.325841E-08 +1.000000E-03 +1.000000E-06 +9.817451E-04 +9.638234E-07 +9.457351E-04 +8.944149E-07 +8.929546E-04 +7.973680E-07 +0.000000E+00 +0.000000E+00 +4.000000E-03 +4.000000E-06 +-1.284380E-03 +9.356368E-07 +-5.965448E-04 +6.643272E-07 +3.352677E-04 +2.956621E-07 +1.526686E-03 +6.527074E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2323,54 +2363,14 @@ tally 1: 0.000000E+00 1.000000E-03 1.000000E-06 -1.590395E-04 -2.529356E-08 --4.620597E-04 -2.134991E-07 --2.285026E-04 -5.221342E-08 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +-3.965739E-04 +1.572709E-07 +-2.640937E-04 +6.974547E-08 +4.389371E-04 +1.926657E-07 +3.053824E-04 +9.325841E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2402,11 +2402,11 @@ tally 1: 0.000000E+00 0.000000E+00 tally 2: -2.288800E-01 -2.621372E-02 -2.489848E-01 -3.102301E-02 -1.451035E+00 -1.053707E+00 -1.618797E+01 -1.311489E+02 +5.720364E-01 +6.548043E-02 +6.217988E-01 +7.736906E-02 +3.624477E+00 +2.628737E+00 +4.047526E+01 +3.278231E+02 diff --git a/tests/test_statepoint_restart/test_statepoint_restart.py b/tests/test_statepoint_restart/test_statepoint_restart.py index 59b77a8213..c842689d99 100644 --- a/tests/test_statepoint_restart/test_statepoint_restart.py +++ b/tests/test_statepoint_restart/test_statepoint_restart.py @@ -10,6 +10,11 @@ from openmc.executor import Executor class StatepointRestartTestHarness(TestHarness): + def __init__(self, final_sp, restart_sp, tallies_present=False): + super(StatepointRestartTestHarness, self).__init__(final_sp, + tallies_present) + self._restart_sp = restart_sp + def execute_test(self): """Run OpenMC with the appropriate arguments and check the outputs.""" try: @@ -40,7 +45,9 @@ class StatepointRestartTestHarness(TestHarness): def _run_openmc_restart(self): # Get the name of the statepoint file. - statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name)) + statepoint = glob.glob(os.path.join(os.getcwd(), self._restart_sp)) + assert len(statepoint) == 1 + statepoint = statepoint[0] # Run OpenMC executor = Executor() @@ -52,11 +59,13 @@ class StatepointRestartTestHarness(TestHarness): mpi_exec=self._opts.mpi_exec) else: - returncode = executor.run_simulation(openmc_exec=self._opts.exe) + returncode = executor.run_simulation(openmc_exec=self._opts.exe, + restart_file=statepoint) assert returncode == 0, 'OpenMC did not exit successfully.' if __name__ == '__main__': - harness = StatepointRestartTestHarness('statepoint.07.*', True) + harness = StatepointRestartTestHarness('statepoint.10.h5', + 'statepoint.07.h5', True) harness.main() From a322437f0c218a5111d3cb632c29c4507f309d2e Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 19 Feb 2016 18:21:39 -0500 Subject: [PATCH 312/650] Now using tally averaging for subdomain averaging of MGXS --- openmc/mgxs/mgxs.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 8d0ecdb867..35830ff712 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -874,11 +874,11 @@ class MGXS(object): # Average each of the tallies across subdomains for tally_type, tally in avg_xs.tallies.items(): - tally_avg = tally.summation(filter_type=self.domain_type, - filter_bins=subdomains) + tally_avg = tally.average(filter_type=self.domain_type, + filter_bins=subdomains) avg_xs.tallies[tally_type] = tally_avg - avg_xs._domain_type = 'sum({0})'.format(self.domain_type) + avg_xs._domain_type = 'avg({0})'.format(self.domain_type) avg_xs.sparse = self.sparse return avg_xs @@ -1195,8 +1195,8 @@ class MGXS(object): cv.check_iterable_type('subdomains', subdomains, Integral) elif self.domain_type == 'distribcell': subdomains = np.arange(self.num_subdomains, dtype=np.int) - elif self.domain_type == 'sum(distribcell)': - domain_filter = self.xs_tally.find_filter('sum(distribcell)') + elif self.domain_type == 'avg(distribcell)': + domain_filter = self.xs_tally.find_filter('avg(distribcell)') subdomains = domain_filter.bins else: subdomains = [self.domain.id] From c6c3ff74dcec5cea5dbfc92edb57ad0d2e6c95bb Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sat, 20 Feb 2016 12:28:21 -0500 Subject: [PATCH 313/650] Fixed issues with object retrieval by name from Geometry in Python API --- openmc/geometry.py | 65 +++++++++---------- .../test_asymmetric_lattice.py | 16 ++--- .../results_true.dat | 8 +-- 3 files changed, 42 insertions(+), 47 deletions(-) diff --git a/openmc/geometry.py b/openmc/geometry.py index 74feaef64b..807dcf7c66 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -1,6 +1,5 @@ from collections import Iterable, OrderedDict from xml.etree import ElementTree as ET -import re import openmc from openmc.clean_xml import * @@ -122,8 +121,7 @@ class Geometry(object): universes = set() for universe_id, universe in all_universes.items(): - if universe._type == 'normal': - universes.add(universe) + universes.add(universe) universes = list(universes) universes.sort(key=lambda x: x.id) @@ -236,12 +234,12 @@ class Geometry(object): return lattices def get_materials_by_name(self, name, case_sensitive=False, matching=False): - """Return a list of materials with names matching a regular expression. + """Return a list of materials with matching names. Parameters ---------- name : str - The name to search for (regular expressions are acceptable) + The name to match case_sensitive : bool Whether to distinguish upper and lower case letters in each material's name (default is True) @@ -255,7 +253,8 @@ class Geometry(object): """ - regex = re.compile(b'{0}'.format(name)) + if case_sensitive: + name = name.lower() all_materials = self.get_all_materials() materials = set() @@ -265,10 +264,9 @@ class Geometry(object): if not case_sensitive: material_name = material_name.lower() - match = regex.findall(material_name) - if match and matching: + if material_name == name: materials.add(material) - elif match and match[0] == name: + elif not matching and name in material_name: materials.add(material) materials = list(materials) @@ -276,12 +274,12 @@ class Geometry(object): return materials def get_cells_by_name(self, name, case_sensitive=False, matching=False): - """Return a list of cells with names matching a regular expression. + """Return a list of cells with matching names. Parameters ---------- name : str - The name to search for (regular expressions are acceptable) + The name to search match case_sensitive : bool Whether to distinguish upper and lower case letters in each cell's name (default is True) @@ -295,7 +293,8 @@ class Geometry(object): """ - regex = re.compile(b'{0}'.format(name)) + if case_sensitive: + name = name.lower() all_cells = self.get_all_cells() cells = set() @@ -305,10 +304,9 @@ class Geometry(object): if not case_sensitive: cell_name = cell_name.lower() - match = regex.findall(cell_name) - if match and matching: + if cell_name == name: cells.add(cell) - elif match and match[0] == name: + elif not matching and name in cell_name: cells.add(cell) cells = list(cells) @@ -316,13 +314,12 @@ class Geometry(object): return cells def get_cells_by_fill_name(self, name, case_sensitive=False, matching=False): - """Return a list of cells with fills with names matching a - regular expression. + """Return a list of cells with fills with matching names. Parameters ---------- name : str - The name to search for (regular expressions are acceptable) + The name to match case_sensitive : bool Whether to distinguish upper and lower case letters in each cell's name (default is True) @@ -336,7 +333,8 @@ class Geometry(object): """ - regex = re.compile(b'{0}'.format(name)) + if case_sensitive: + name = name.lower() all_cells = self.get_all_cells() cells = set() @@ -346,10 +344,9 @@ class Geometry(object): if not case_sensitive: cell_fill_name = cell_fill_name.lower() - match = regex.findall(cell_fill_name) - if match and matching: + if cell_fill_name == name: cells.add(cell) - elif match and match[0] == name: + elif not matching and name in cell_fill_name: cells.add(cell) cells = list(cells) @@ -357,12 +354,12 @@ class Geometry(object): return cells def get_universes_by_name(self, name, case_sensitive=False, matching=False): - """Return a list of universes with names matching a regular expression. + """Return a list of universes with matching names. Parameters ---------- name : str - The name to search for (regular expressions are acceptable) + The name to match case_sensitive : bool Whether to distinguish upper and lower case letters in each universe's name (default is True) @@ -376,7 +373,8 @@ class Geometry(object): """ - regex = re.compile(b'{0}'.format(name)) + if case_sensitive: + name = name.lower() all_universes = self.get_all_universes() universes = set() @@ -386,10 +384,9 @@ class Geometry(object): if not case_sensitive: universe_name = universe_name.lower() - match = regex.findall(universe_name) - if match and matching: + if universe_name == name: universes.add(universe) - elif match and match[0] == name: + elif not matching and name in universe_name: universes.add(universe) universes = list(universes) @@ -397,12 +394,12 @@ class Geometry(object): return universes def get_lattices_by_name(self, name, case_sensitive=False, matching=False): - """Return a list of lattices with names matching a regular expression. + """Return a list of lattices with matching names. Parameters ---------- name : str - The name to search for (regular expressions are acceptable) + The name to match case_sensitive : bool Whether to distinguish upper and lower case letters in each lattice's name (default is True) @@ -416,7 +413,8 @@ class Geometry(object): """ - regex = re.compile(b'{0}'.format(name)) + if case_sensitive: + name = name.lower() all_lattices = self.get_all_lattices() lattices = set() @@ -426,10 +424,9 @@ class Geometry(object): if not case_sensitive: lattice_name = lattice_name.lower() - match = regex.findall(lattice_name) - if match and matching: + if lattice_name == name: lattices.add(lattice) - elif match and match[0] == name: + elif not matching and name in lattice_name: lattices.add(lattice) lattices = list(lattices) diff --git a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py index 5a1d47ef85..fdb21db33c 100644 --- a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py +++ b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py @@ -19,13 +19,10 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): # Build full core geometry from underlying input set self._input_set.build_default_materials_and_geometry() - # Extract all universes from the full core geometry - geometry = self._input_set.geometry.geometry - all_univs = geometry.get_all_universes() - # Extract universes encapsulating fuel and water assemblies - water = all_univs[7] - fuel = all_univs[8] + geometry = self._input_set.geometry.geometry + water = geometry.get_universes_by_name('water assembly (hot)')[0] + fuel = geometry.get_universes_by_name('fuel assembly (hot)')[0] # Construct a 3x3 lattice of fuel assemblies core_lat = openmc.RectLattice(name='3x3 Core Lattice', lattice_id=202) @@ -102,9 +99,10 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): outstr += ', '.join(map(str, tally.std_dev.flatten())) + '\n' # Extract fuel assembly lattices from the summary - all_cells = su.openmc_geometry.get_all_cells() - fuel = all_cells[80].fill - core = all_cells[1].fill + core = su.get_cell_by_id(1) + fuel = su.get_cell_by_id(80) + fuel = fuel.fill + core = core.fill # Append a string of lattice distribcell offsets to the string outstr += ', '.join(map(str, fuel.offsets.flatten())) + '\n' diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index 7b4be0f468..ad9b949de9 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,5 +1,5 @@ - sum(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.720213 1.424323 sum(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 sum(distribcell) group in group out nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.70466 1.403916 sum(distribcell) group out nuclide mean std. dev. + avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.720213 1.424323 avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 avg(distribcell) group in group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.70466 1.403916 avg(distribcell) group out nuclide mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 \ No newline at end of file From 6ecc683e2fa450489987291a50ea1ea641dae7ac Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 20 Feb 2016 13:14:45 -0500 Subject: [PATCH 314/650] Python API fix to allow settings UFS Dimension attribute of settings.xml file correctly --- openmc/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/settings.py b/openmc/settings.py index 4ad207c7a3..3d9ec72b91 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -970,7 +970,7 @@ class SettingsFile(object): element = ET.SubElement(self._settings_file, "uniform_fs") subelement = ET.SubElement(element, "dimension") - subelement.text = str(self._ufs_dimension) + subelement.text = ' '.join(map(str, self._ufs_dimension)) subelement = ET.SubElement(element, "lower_left") subelement.text = ' '.join(map(str, self._ufs_lower_left)) From 411e7f241a840d952d95aef171a98323388e1fbb Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sun, 21 Feb 2016 17:15:03 -0500 Subject: [PATCH 315/650] Fixed issue with MGXS merging - now null out base tallies since fluxes cannot be merged and reused to compute merged cross sections --- openmc/mgxs/mgxs.py | 69 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 63 insertions(+), 6 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 35830ff712..f5c23dfd55 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -114,6 +114,8 @@ class MGXS(object): sparse : bool Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format for compressed data storage + derived : bool + Whether or not the MGXS is merged from one or more other MGXS """ @@ -135,6 +137,7 @@ class MGXS(object): self._rxn_rate_tally = None self._xs_tally = None self._sparse = False + self._derived = False self.name = name self.by_nuclide = by_nuclide @@ -163,6 +166,7 @@ class MGXS(object): clone._rxn_rate_tally = copy.deepcopy(self._rxn_rate_tally, memo) clone._xs_tally = copy.deepcopy(self._xs_tally, memo) clone._sparse = self.sparse + clone._derived = self.derived clone._tallies = OrderedDict() for tally_type, tally in self.tallies.items(): @@ -255,6 +259,10 @@ class MGXS(object): else: return 'sum' + @property + def derived(self): + return self._derived + @name.setter def name(self, name): cv.check_type('name', name, basestring) @@ -1014,8 +1022,7 @@ class MGXS(object): # Create deep copy of tally to return as merged tally merged_mgxs = copy.deepcopy(self) - merged_mgxs._rxn_rate_tally = None - merged_mgxs._xs_tally = None + merged_mgxs._derived = True # Merge energy groups if self.energy_groups != other.energy_groups: @@ -1034,10 +1041,10 @@ class MGXS(object): # Concatenate lists of nuclides for the merged MGXS merged_mgxs.nuclides = self.nuclides + other.nuclides - # Merge tallies - for tally_key in self.tallies: - merged_tally = self.tallies[tally_key].merge(other.tallies[tally_key]) - merged_mgxs.tallies[tally_key] = merged_tally + # Null base tallies but merge reaction rate and cross section tallies + merged_mgxs._tallies = OrderedDict() + merged_mgxs._rxn_rate_tally = self.rxn_rate_tally.merge(other.rxn_rate_tally) + merged_mgxs._xs_tally = self.xs_tally.merge(other.xs_tally) return merged_mgxs @@ -2377,6 +2384,56 @@ class Chi(MGXS): slice_xs.sparse = self.sparse return slice_xs + def merge(self, other): + """Merge another Chi with this one + + If results have been loaded from a statepoint, then Chi are only + mergeable along one and only one of energy groups or nuclides. + + Parameters + ---------- + other : MGXS + MGXS to merge with this one + + Returns + ------- + merged_mgxs : MGXS + Merged MGXS + """ + + if not self.can_merge(other): + raise ValueError('Unable to merge Chi') + + # Create deep copy of tally to return as merged tally + merged_mgxs = copy.deepcopy(self) + merged_mgxs._derived = True + merged_mgxs._rxn_rate_tally = None + merged_mgxs._xs_tally = None + + # Merge energy groups + if self.energy_groups != other.energy_groups: + merged_groups = self.energy_groups.merge(other.energy_groups) + merged_mgxs.energy_groups = merged_groups + + # Merge nuclides + if self.nuclides != other.nuclides: + + # The nuclides must be mutually exclusive + for nuclide in self.nuclides: + if nuclide in other.nuclides: + msg = 'Unable to merge Chi with shared nuclides' + raise ValueError(msg) + + # Concatenate lists of nuclides for the merged MGXS + merged_mgxs.nuclides = self.nuclides + other.nuclides + + # Merge tallies + for tally_key in self.tallies: + merged_tally = self.tallies[tally_key].merge(other.tallies[tally_key]) + merged_mgxs.tallies[tally_key] = merged_tally + + return merged_mgxs + def get_xs(self, groups='all', subdomains='all', nuclides='all', xs_type='macro', order_groups='increasing', value='mean'): """Returns an array of the fission spectrum. From ead3f50d27ae7b96e5050fb8127f9f12ede93600 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sun, 21 Feb 2016 21:29:49 -0500 Subject: [PATCH 316/650] Eliminated Pandas deprecation warning from MGXS Pandas DataFrame builder method --- openmc/mgxs/mgxs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index f5c23dfd55..022acef5f4 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1467,7 +1467,7 @@ class MGXS(object): # Sort the dataframe by domain type id (e.g., distribcell id) and # energy groups such that data is from fast to thermal - df.sort([self.domain_type] + columns, inplace=True) + df.sort_values(by=[self.domain_type] + columns, inplace=True) return df From 63cac1adba85b7e8b041f07c55c3bfa75f9bcea6 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 22 Feb 2016 11:30:07 -0600 Subject: [PATCH 317/650] Add a necessary missing blank line in installation documentation --- docs/source/usersguide/install.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst index 4075e03033..be8bc3cf84 100644 --- a/docs/source/usersguide/install.rst +++ b/docs/source/usersguide/install.rst @@ -227,6 +227,7 @@ your PATH environment variable and subsequently uses it to determine library locations and compile flags. If you have multiple installations of HDF5 or one that does not appear on your PATH, you can set the HDF5_ROOT environment variable to the root directory of the HDF5 installation, e.g. + .. code-block:: sh export HDF5_ROOT=/opt/hdf5/1.8.15 From f44446e20e3362849b1abfd92f924c598d6b96bc Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Mon, 22 Feb 2016 15:54:59 -0500 Subject: [PATCH 318/650] Add tally % n_realizations to statepoint restarts --- src/state_point.F90 | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/state_point.F90 b/src/state_point.F90 index 799610c4ce..fb7c17788f 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -659,7 +659,7 @@ contains ! Read filetype call read_dataset(file_id, "filetype", word) - if (trim(word) /= 'statepoint') then + if (word /= 'statepoint') then call fatal_error("OpenMC tried to restart from a non-statepoint file.") end if @@ -767,10 +767,12 @@ contains ! Set pointer to tally tally => tallies(i) - ! Read sum and sum_sq for each bin + ! Read sum, sum_sq, and N for each bin tally_group = open_group(tallies_group, "tally " // & - trim(to_str(tally%id))) - call read_dataset(tally_group, "results", tally%results) + trim(to_str(tally % id))) + call read_dataset(tally_group, "results", tally % results) + call read_dataset(tally_group, "n_realizations", & + &tally % n_realizations) call close_group(tally_group) end do TALLY_RESULTS end if From 7261a2d068e4e632123c0c2e715a590f091004d0 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Mon, 22 Feb 2016 17:20:08 -0500 Subject: [PATCH 319/650] Use all processors when restarting in PHDF5 --- src/state_point.F90 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/state_point.F90 b/src/state_point.F90 index fb7c17788f..82c53c80b8 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -747,8 +747,13 @@ contains &file") end if - ! Read tallies to master + ! Read tallies to master. If we are using Parallel HDF5, all processors + ! need to be included in the HDF5 calls. +#ifdef PHDF5 + if (.true.) then +#else if (master) then +#endif ! Read number of realizations for global tallies call read_dataset(file_id, "n_realizations", n_realizations, indep=.true.) From 9cbc1180d03d4ffe019ae4eb991b432057405e04 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 22 Feb 2016 19:51:34 -0500 Subject: [PATCH 320/650] Modified *CROSS_SECTIONS envvar to be OPENMC_*CROSS_SECTIONS, incorporated latest comments from @paulromano. Next is to work on fixing up bank --- docs/source/usersguide/input.rst | 11 ++++++----- docs/source/usersguide/install.rst | 25 ++++++++++++++----------- docs/source/usersguide/mgxs_library.rst | 2 +- openmc/mgxs_library.py | 13 +++++++------ src/bank_header.F90 | 2 +- src/input_xml.F90 | 12 ++++++------ src/relaxng/materials.rnc | 22 +++++++++++----------- 7 files changed, 46 insertions(+), 41 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index bee60f2218..eb620b650c 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -112,10 +112,11 @@ standard deviation. The ```` element has no attributes and simply indicates the path to an XML cross section listing file (usually named cross_sections.xml). If this -element is absent from the settings.xml file, the :envvar:`CROSS_SECTIONS` -environment variable will be used to find the path to the XML cross section -listing when in continuous-energy mode, and the :envvar:`MG_CROSS_SECTIONS` -environment variable will be used in multi-group mode. +element is absent from the settings.xml file, the +:envvar:`OPENMC_CROSS_SECTIONS` environment variable will be used to find the +path to the XML cross section listing when in continuous-energy mode, and the +:envvar:`OPENMC_MG_CROSS_SECTIONS` environment variable will be used in +multi-group mode. ```` Element -------------------- @@ -1728,7 +1729,7 @@ The ```` element accepts the following sub-elements: |inverse-velocity |The flux-weighted inverse velocity where the | | |velocity is in units of centimeters per second. | | |This score type is not used in the | - | |multi-group :ref:`energy_mode`. | + | |multi-group :ref:`energy_mode`. | +----------------------+---------------------------------------------------+ |kappa-fission |The recoverable energy production rate due to | | |fission. The recoverable energy is defined as the | diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst index bbb593beb1..2c7ec1b41f 100644 --- a/docs/source/usersguide/install.rst +++ b/docs/source/usersguide/install.rst @@ -355,7 +355,7 @@ Testing Build ------------- If you have ENDF/B-VII.1 cross sections from NNDC_ you can test your build. -Make sure the **CROSS_SECTIONS** environmental variable is set to the +Make sure the **OPENMC_CROSS_SECTIONS** environmental variable is set to the *cross_sections.xml* file in the *data/nndc* directory. There are two ways to run tests. The first is to use the Makefile present in the source directory and run the following: @@ -405,9 +405,10 @@ extract, and set up a confiuration file: cd openmc/data python get_nndc_data.py -At this point, you should set the :envvar:`CROSS_SECTIONS` environment variable -to the absolute path of the file ``openmc/data/nndc/cross_sections.xml``. This -cross section set is used by the test suite. +At this point, you should set the :envvar:`OPENMC_CROSS_SECTIONS` environment +variable to the absolute path of the file +``openmc/data/nndc/cross_sections.xml``. This cross section set is used by the +test suite. Using JEFF Cross Sections from OECD/NEA --------------------------------------- @@ -433,8 +434,8 @@ the following steps must be taken: 4. Additionally, you may need to change any occurrences of upper-case "ACE" within the ``cross_sections.xml`` file to lower-case. 5. Either set the :ref:`cross_sections` in a settings.xml file or the - :envvar:`CROSS_SECTIONS` environment variable to the absolute path of the - ``cross_sections.xml`` file. + :envvar:`OPENMC_CROSS_SECTIONS` environment variable to the absolute path of + the ``cross_sections.xml`` file. Using Cross Sections from MCNP ------------------------------ @@ -442,8 +443,9 @@ Using Cross Sections from MCNP To use cross sections distributed with MCNP, change the element in the ``cross_sections.xml`` file in the root directory of the OpenMC distribution to the location of the MCNP cross sections. Then, either set the -:ref:`cross_sections` in a settings.xml file or the :envvar:`CROSS_SECTIONS` -environment variable to the absolute path of the ``cross_sections.xml`` file. +:ref:`cross_sections` in a settings.xml file or the +:envvar:`OPENMC_CROSS_SECTIONS` environment variable to the absolute path of +the ``cross_sections.xml`` file. Using Cross Sections from Serpent --------------------------------- @@ -451,8 +453,9 @@ Using Cross Sections from Serpent To use cross sections distributed with Serpent, change the element in the ``cross_sections_serpent.xml`` file in the root directory of the OpenMC distribution to the location of the Serpent cross sections. Then, either set the -:ref:`cross_sections` in a settings.xml file or the :envvar:`CROSS_SECTIONS` -environment variable to the absolute path of the ``cross_sections_serpent.xml`` +:ref:`cross_sections` in a settings.xml file or the +:envvar:`OPENMC_CROSS_SECTIONS` environment variable to the absolute path of +the ``cross_sections_serpent.xml`` file. Using Multi-Group Cross Sections @@ -462,7 +465,7 @@ Multi-group cross section libraries are generally tailored to the specific calculation to be performed. Therefore, at this point in time, OpenMC is not distributed with any pre-existing multi-group cross section libraries. However, if the user has obtained or generated their own library, the user -should set the :envvar:`MG_CROSS_SECTIONS` environment variable +should set the :envvar:`OPENMC_MG_CROSS_SECTIONS` environment variable to the absolute path of the file library expected to used most frequently. .. _NJOY: http://t2.lanl.gov/nis/codes.shtml diff --git a/docs/source/usersguide/mgxs_library.rst b/docs/source/usersguide/mgxs_library.rst index 4cc36f1e89..a5d2ec0d06 100644 --- a/docs/source/usersguide/mgxs_library.rst +++ b/docs/source/usersguide/mgxs_library.rst @@ -270,7 +270,7 @@ attributes/sub-elements required to describe the meta-data: with the inner-dimension being groups, intermediate-dimension being azimuthal angles and outer-dimension being the polar angles. - *Default*: None, this is required only if :ref:`kappa_fission` tallies are + *Default*: None, this is required only if kappa_fission tallies are requested and the material is fissionable. :chi: diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index ea6407f968..b6dd9f09fe 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -17,6 +17,7 @@ from openmc.clean_xml import * # Supported incoming particle MGXS angular treatment representations _REPRESENTATIONS = ['isotropic', 'angle'] + def ndarray_to_string(arr): """Converts a numpy ndarray in to a join with spaces between entries similar to ' '.join(map(str,arr)) but applied to all sub-dimensions. @@ -48,14 +49,14 @@ def ndarray_to_string(arr): for i in range(shape[0]): text += tab for j in range(shape[1]): - text += '{:.7E} '.format(arr[i,j]) + text += '{:.7E} '.format(arr[i, j]) text += indent elif ndim == 3: for i in range(shape[0]): for j in range(shape[1]): text += tab for k in range(shape[2]): - text += '{:.7E} '.format(arr[i,j,k]) + text += '{:.7E} '.format(arr[i, j, k]) text += indent elif ndim == 4: for i in range(shape[0]): @@ -63,7 +64,7 @@ def ndarray_to_string(arr): for k in range(shape[2]): text += tab for l in range(shape[3]): - text += '{:.7E} '.format(arr[i,j,k,l]) + text += '{:.7E} '.format(arr[i, j, k, l]) text += indent elif ndim == 5: for i in range(shape[0]): @@ -72,7 +73,7 @@ def ndarray_to_string(arr): for l in range(shape[3]): text += tab for m in range(shape[4]): - text += '{:.7E} '.format(arr[i,j,k,l,m]) + text += '{:.7E} '.format(arr[i, j, k, l, m]) text += indent return text @@ -289,7 +290,7 @@ class XSdata(object): check_value('num_points', num_points, Integral) check_greater_than('num_points', num_points, 0) else: - if enable == False: + if not enable: num_points = 1 else: num_points = 33 @@ -563,6 +564,7 @@ class XSdata(object): return element + class MGXSLibraryFile(object): """Multi-Group Cross Sections file used for an OpenMC simulation. Corresponds directly to the MG version of the cross_sections.xml input file. @@ -686,7 +688,6 @@ class MGXSLibraryFile(object): xml_element = xsdata._get_xsdata_xml() self._cross_sections_file.append(xml_element) - def export_to_xml(self, filename='mg_cross_sections.xml'): """Create an mg_cross_sections.xml file that can be used for a simulation. diff --git a/src/bank_header.F90 b/src/bank_header.F90 index ad829341f0..c10a93e569 100644 --- a/src/bank_header.F90 +++ b/src/bank_header.F90 @@ -5,7 +5,7 @@ module bank_header implicit none !=============================================================================== -! BANK* is used for storing fission sites in eigenvalue calculations. Since all +! BANK is used for storing fission sites in eigenvalue calculations. Since all ! the state information of a neutron is not needed, this type allows sites to be ! stored with less memory !=============================================================================== diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 49600939c3..9ef439bb04 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -129,11 +129,11 @@ contains ! No cross_sections.xml file specified in settings.xml, check ! environment variable if (run_CE) then - call get_environment_variable("CROSS_SECTIONS", env_variable) + call get_environment_variable("OPENMC_CROSS_SECTIONS", env_variable) if (len_trim(env_variable) == 0) then call fatal_error("No cross_sections.xml file was specified in & - &settings.xml or in the CROSS_SECTIONS environment variable. & - &OpenMC needs such a file to identify where to & + &settings.xml or in the OPENMC_CROSS_SECTIONS environment & + &variable. OpenMC needs such a file to identify where to & &find ACE cross section libraries. Please consult the user's & &guide at http://mit-crpg.github.io/openmc for information on & &how to set up ACE cross section libraries.") @@ -141,11 +141,11 @@ contains path_cross_sections = trim(env_variable) end if else - call get_environment_variable("MG_CROSS_SECTIONS", env_variable) + call get_environment_variable("OPENMC_MG_CROSS_SECTIONS", env_variable) if (len_trim(env_variable) == 0) then call fatal_error("No cross_sections.xml file was specified in & - &settings.xml or in the MG_CROSS_SECTIONS environment variable. & - &OpenMC needs such a file to identify where to & + &settings.xml or in the OPENMC_MG_CROSS_SECTIONS environment & + &variable. OpenMC needs such a file to identify where to & &find the cross section libraries. Please consult the user's & &guide at http://mit-crpg.github.io/openmc for information on & &how to set up the cross section libraries.") diff --git a/src/relaxng/materials.rnc b/src/relaxng/materials.rnc index aec3fbcbc2..21b36c07e1 100644 --- a/src/relaxng/materials.rnc +++ b/src/relaxng/materials.rnc @@ -13,8 +13,8 @@ element materials { element nuclide { (element name { xsd:string { maxLength = "7" } } | attribute name { xsd:string { maxLength = "7" } }) & - (element xs { xsd:string { maxLength = "3" } } | - attribute xs { xsd:string { maxLength = "3" } })? & + (element xs { xsd:string { maxLength = "5" } } | + attribute xs { xsd:string { maxLength = "5" } })? & (element scattering { ( "data" | "iso-in-lab" ) } | attribute scattering { ( "data" | "iso-in-lab" ) })? & ( @@ -24,17 +24,17 @@ element materials { }* & element macroscopic { - (element name { xsd:string { maxLength = "7" } } | - attribute name { xsd:string { maxLength = "7" } }) & - (element xs { xsd:string { maxLength = "3" } } | - attribute xs { xsd:string { maxLength = "3" } }) + (element name { xsd:string } | + attribute name { xsd:string }) & + (element xs { xsd:string { maxLength = "5" } } | + attribute xs { xsd:string { maxLength = "5" } }) }* & element element { (element name { xsd:string { maxLength = "2" } } | attribute name { xsd:string { maxLength = "2" } }) & - (element xs { xsd:string { maxLength = "3" } } | - attribute xs { xsd:string { maxLength = "3" } })? & + (element xs { xsd:string { maxLength = "5" } } | + attribute xs { xsd:string { maxLength = "5" } })? & (element scattering { ( "data" | "iso-in-lab" ) } | attribute scattering { ( "data" | "iso-in-lab" ) })? & ( @@ -46,10 +46,10 @@ element materials { element sab { (element name { xsd:string { maxLength = "7" } } | attribute name { xsd:string { maxLength = "7" } }) & - (element xs { xsd:string { maxLength = "3" } } | - attribute xs { xsd:string { maxLength = "3" } })? + (element xs { xsd:string { maxLength = "5" } } | + attribute xs { xsd:string { maxLength = "5" } })? }* }+ & - element default_xs { xsd:string { maxLength = "3" } }? + element default_xs { xsd:string { maxLength = "5" } }? } From c0a6582248855736604d0c3054f339d1d4b24622 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 22 Feb 2016 20:18:12 -0500 Subject: [PATCH 321/650] Replacing Bank % g with Bank % E which is cast to an integer. --- .../usersguide/output/particle_restart.rst | 11 +++------ docs/source/usersguide/output/source.rst | 2 +- src/bank_header.F90 | 3 +-- src/constants.F90 | 2 +- src/initialize.F90 | 2 -- src/particle_header.F90 | 23 +++++++++++-------- src/particle_restart_write.F90 | 1 - src/physics_mg.F90 | 4 ++-- src/simulation.F90 | 3 ++- src/source.F90 | 7 +++--- src/tally.F90 | 2 +- src/tracking.F90 | 2 +- 12 files changed, 29 insertions(+), 33 deletions(-) diff --git a/docs/source/usersguide/output/particle_restart.rst b/docs/source/usersguide/output/particle_restart.rst index 1ed6077108..70f00a930f 100644 --- a/docs/source/usersguide/output/particle_restart.rst +++ b/docs/source/usersguide/output/particle_restart.rst @@ -4,7 +4,7 @@ Particle Restart File Format ============================ -The current revision of the particle restart file format is 2. +The current revision of the particle restart file format is 1. **/filetype** (*char[]*) @@ -46,13 +46,8 @@ The current revision of the particle restart file format is 2. **/energy** (*double*) - Energy of the particle in MeV. This is always provided but only used - for continuous-energy mode. - -**/energy_group** (*int*) - - Energy group of the particle. This is always provided but only used - for multi-group mode. + Energy of the particle in MeV for continuous-energy mode, or the energy + group of the particle for multi-group mode. **/xyz** (*double[3]*) diff --git a/docs/source/usersguide/output/source.rst b/docs/source/usersguide/output/source.rst index e8867083c1..53841a5ebc 100644 --- a/docs/source/usersguide/output/source.rst +++ b/docs/source/usersguide/output/source.rst @@ -15,6 +15,6 @@ is that documented here. **/source_bank** (Compound type) Source bank information for each particle. The compound type has fields - ``wgt``, ``xyz``, ``uvw``, ``E``, ``g``, and ``delayed_group``, which + ``wgt``, ``xyz``, ``uvw``, ``E``, and ``delayed_group``, which represent the weight, position, direction, energy, energy group, and delayed_group of the source particle, respectively. diff --git a/src/bank_header.F90 b/src/bank_header.F90 index c10a93e569..97fb1f11fa 100644 --- a/src/bank_header.F90 +++ b/src/bank_header.F90 @@ -14,8 +14,7 @@ module bank_header real(C_DOUBLE) :: wgt ! weight of bank site real(C_DOUBLE) :: xyz(3) ! location of bank particle real(C_DOUBLE) :: uvw(3) ! diretional cosines - real(C_DOUBLE) :: E ! energy - integer(C_INT) :: g ! energy group + real(C_DOUBLE) :: E ! energy / energy group if in MG mode. integer(C_INT) :: delayed_group ! delayed group end type Bank diff --git a/src/constants.F90 b/src/constants.F90 index b93abae2b7..0c6f09cdda 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -12,7 +12,7 @@ module constants ! Revision numbers for binary files integer, parameter :: REVISION_STATEPOINT = 15 - integer, parameter :: REVISION_PARTICLE_RESTART = 2 + integer, parameter :: REVISION_PARTICLE_RESTART = 1 integer, parameter :: REVISION_TRACK = 1 integer, parameter :: REVISION_SUMMARY = 3 diff --git a/src/initialize.F90 b/src/initialize.F90 index d8bbcb0d8c..68426d5686 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -327,8 +327,6 @@ contains c_loc(tmpb(1)%uvw)), coordinates_t, hdf5_err) call h5tinsert_f(hdf5_bank_t, "E", h5offsetof(c_loc(tmpb(1)), & c_loc(tmpb(1)%E)), H5T_NATIVE_DOUBLE, hdf5_err) - call h5tinsert_f(hdf5_bank_t, "g", h5offsetof(c_loc(tmpb(1)), & - c_loc(tmpb(1)%g)), H5T_NATIVE_INTEGER, hdf5_err) call h5tinsert_f(hdf5_bank_t, "delayed_group", h5offsetof(c_loc(tmpb(1)), & c_loc(tmpb(1)%delayed_group)), H5T_NATIVE_INTEGER, hdf5_err) diff --git a/src/particle_header.F90 b/src/particle_header.F90 index bf820ceb35..c1f02eca24 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -179,10 +179,11 @@ contains ! fission, or simply as a secondary particle. !=============================================================================== - subroutine initialize_from_source(this, src, run_CE) - class(Particle), intent(inout) :: this - type(Bank), intent(in) :: src - logical, intent(in) :: run_CE + subroutine initialize_from_source(this, src, run_CE, energy_bin_avg) + class(Particle), intent(inout) :: this + type(Bank), intent(in) :: src + logical, intent(in) :: run_CE + real(8), allocatable, intent(in) :: energy_bin_avg(:) ! set defaults call this % initialize() @@ -194,12 +195,14 @@ contains this % coord(1) % uvw = src % uvw this % last_xyz = src % xyz this % last_uvw = src % uvw - this % E = src % E - this % last_E = src % E - if (.not. run_CE) then - this % g = src % g - this % last_g = src % g + if (run_CE) then + this % E = src % E + else + this % g = int(src % E) + this % last_g = int(src % E) + this % E = energy_bin_avg(this % g) end if + this % last_E = src % E end subroutine initialize_from_source @@ -229,7 +232,7 @@ contains this % n_secondary = n this % secondary_bank(this % n_secondary) % E = this % E if (.not. run_CE) then - this % secondary_bank(this % n_secondary) % g = this % g + this % secondary_bank(this % n_secondary) % E = real(this % g, 8) end if end subroutine create_secondary diff --git a/src/particle_restart_write.F90 b/src/particle_restart_write.F90 index e1a280e9fa..d983b3db8a 100644 --- a/src/particle_restart_write.F90 +++ b/src/particle_restart_write.F90 @@ -57,7 +57,6 @@ contains call write_dataset(file_id, 'id', p%id) call write_dataset(file_id, 'weight', src%wgt) call write_dataset(file_id, 'energy', src%E) - call write_dataset(file_id, 'energy_group', src%g) call write_dataset(file_id, 'xyz', src%xyz) call write_dataset(file_id, 'uvw', src%uvw) diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index ce296c48e6..6a58540c17 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -255,8 +255,8 @@ contains ! Sample secondary energy distribution for fission reaction and set energy ! in fission bank - bank_array(i) % g = xs % sample_fission_energy(p % g, fission_bank(i) % uvw) - bank_array(i) % E = energy_bin_avg(fission_bank(i) % g) + bank_array(i) % E = & + real(xs % sample_fission_energy(p % g, fission_bank(i) % uvw), 8) end do ! increment number of bank sites diff --git a/src/simulation.F90 b/src/simulation.F90 index 4a419df906..41a28741c3 100644 --- a/src/simulation.F90 +++ b/src/simulation.F90 @@ -131,7 +131,8 @@ contains integer :: i ! set defaults - call p % initialize_from_source(source_bank(index_source), run_CE) + call p % initialize_from_source(source_bank(index_source), run_CE, & + energy_bin_avg) ! set identifier for particle p % id = work_index(rank) + index_source diff --git a/src/source.F90 b/src/source.F90 index 0a7fa790d5..ad565c95c0 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -192,11 +192,12 @@ contains ! If running in MG, convert site % E to group if (.not. run_CE) then if (site % E <= energy_bins(1)) then - site % g = 1 + site % E = real(1, 8) else if (site % E > energy_bins(energy_groups + 1)) then - site % g = energy_groups + site % E = real(energy_groups, 8) else - site % g = binary_search(energy_bins, energy_groups + 1, site % E) + site % E = real(binary_search(energy_bins, energy_groups + 1, & + site % E), 8) end if end if diff --git a/src/tally.F90 b/src/tally.F90 index e127cf0378..f265bdb274 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -1601,7 +1601,7 @@ contains if (t % energyout_matches_groups) then ! determine outgoing energy from fission bank - gout = fission_bank(n_bank - p % n_bank + k) % g + gout = int(fission_bank(n_bank - p % n_bank + k) % E) ! change outgoing energy bin matching_bins(i) = gout diff --git a/src/tracking.F90 b/src/tracking.F90 index 17fc855591..e634112bc6 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -223,7 +223,7 @@ contains if (.not. p % alive) then if (p % n_secondary > 0) then call p % initialize_from_source(p % secondary_bank(p % n_secondary), & - run_CE) + run_CE, energy_bin_avg) p % n_secondary = p % n_secondary - 1 n_event = 0 From ee55476ff025380f6edadc3f1e53d7c49034b4e1 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 22 Feb 2016 20:20:25 -0500 Subject: [PATCH 322/650] Aaand environment variables did not match between my machine and travis. Oh travis. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index efdc457a11..acec278ed6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -44,7 +44,7 @@ before_script: - git clone --branch=master git://github.com/bhermanmit/nndc_xs nndc_xs - cat nndc_xs/nndc.tar.gza* | tar xzvf - - rm -rf nndc_xs - - export CROSS_SECTIONS=$PWD/nndc/cross_sections.xml + - export OPENMC_CROSS_SECTIONS=$PWD/nndc/cross_sections.xml - cd .. script: From 4212a951d2c379affe82e368ef1f37564ef8e656 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 22 Feb 2016 21:07:51 -0500 Subject: [PATCH 323/650] Updated particle_restart file reversion number in particle_restart.py --- openmc/particle_restart.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmc/particle_restart.py b/openmc/particle_restart.py index 4aad111325..72bf3ac3de 100644 --- a/openmc/particle_restart.py +++ b/openmc/particle_restart.py @@ -43,11 +43,11 @@ class Particle(object): if 'filetype' not in self._f or self._f[ 'filetype'].value.decode() != 'particle restart': raise IOError('{} is not a particle restart file.'.format(filename)) - if self._f['revision'].value != 2: + if self._f['revision'].value != 1: raise IOError('Particle restart file has a file revision of {} ' 'which is not consistent with the revision this ' 'version of OpenMC expects ({}).'.format( - self._f['revision'].value, 2)) + self._f['revision'].value, 1)) @property def current_batch(self): From 095f3e05103575e0a6139ccdb9ffc338dd147ad5 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 22 Feb 2016 21:39:22 -0500 Subject: [PATCH 324/650] Think I fixed the mpi problems --- src/initialize.F90 | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/initialize.F90 b/src/initialize.F90 index 68426d5686..5b7cc8c063 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -203,15 +203,15 @@ contains integer :: bank_blocks(6) ! Count for each datatype #ifdef MPIF08 - type(MPI_Datatype) :: bank_types(6) + type(MPI_Datatype) :: bank_types(5) type(MPI_Datatype) :: result_types(1) type(MPI_Datatype) :: temp_type #else - integer :: bank_types(6) ! Datatypes + integer :: bank_types(5) ! Datatypes integer :: result_types(1) ! Datatypes integer :: temp_type ! temporary derived type #endif - integer(MPI_ADDRESS_KIND) :: bank_disp(6) ! Displacements + integer(MPI_ADDRESS_KIND) :: bank_disp(5) ! Displacements integer :: result_blocks(1) ! Count for each datatype integer(MPI_ADDRESS_KIND) :: result_disp(1) ! Displacements integer(MPI_ADDRESS_KIND) :: result_base_disp ! Base displacement @@ -245,17 +245,15 @@ contains call MPI_GET_ADDRESS(b % xyz, bank_disp(2), mpi_err) call MPI_GET_ADDRESS(b % uvw, bank_disp(3), mpi_err) call MPI_GET_ADDRESS(b % E, bank_disp(4), mpi_err) - call MPI_GET_ADDRESS(b % g, bank_disp(5), mpi_err) - call MPI_GET_ADDRESS(b % delayed_group, bank_disp(6), mpi_err) + call MPI_GET_ADDRESS(b % delayed_group, bank_disp(5), mpi_err) ! Adjust displacements bank_disp = bank_disp - bank_disp(1) ! Define MPI_BANK for fission sites - bank_blocks = (/ 1, 3, 3, 1, 1, 1 /) - bank_types = (/ MPI_REAL8, MPI_REAL8, MPI_REAL8, MPI_REAL8, & - MPI_INTEGER, MPI_INTEGER /) - call MPI_TYPE_CREATE_STRUCT(6, bank_blocks, bank_disp, & + bank_blocks = (/ 1, 3, 3, 1, 1 /) + bank_types = (/ MPI_REAL8, MPI_REAL8, MPI_REAL8, MPI_REAL8, MPI_INTEGER /) + call MPI_TYPE_CREATE_STRUCT(5, bank_blocks, bank_disp, & bank_types, MPI_BANK, mpi_err) call MPI_TYPE_COMMIT(MPI_BANK, mpi_err) From 3aa332e8d28452ebb8e8f41289a9222d563b7f68 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 22 Feb 2016 21:43:03 -0500 Subject: [PATCH 325/650] Think I fixed the mpi problems; #2 --- src/initialize.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/initialize.F90 b/src/initialize.F90 index 5b7cc8c063..52853f72ff 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -201,7 +201,7 @@ contains subroutine initialize_mpi() - integer :: bank_blocks(6) ! Count for each datatype + integer :: bank_blocks(5) ! Count for each datatype #ifdef MPIF08 type(MPI_Datatype) :: bank_types(5) type(MPI_Datatype) :: result_types(1) From 76a99e44860593ffeb3970d3dcad44ca181ae34f Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Mon, 22 Feb 2016 22:13:17 -0500 Subject: [PATCH 326/650] Minor fixes for #589 --- src/state_point.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/state_point.F90 b/src/state_point.F90 index 82c53c80b8..bb674e2cdc 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -747,7 +747,7 @@ contains &file") end if - ! Read tallies to master. If we are using Parallel HDF5, all processors + ! Read tallies to master. If we are using Parallel HDF5, all processes ! need to be included in the HDF5 calls. #ifdef PHDF5 if (.true.) then @@ -777,7 +777,7 @@ contains trim(to_str(tally % id))) call read_dataset(tally_group, "results", tally % results) call read_dataset(tally_group, "n_realizations", & - &tally % n_realizations) + tally % n_realizations) call close_group(tally_group) end do TALLY_RESULTS end if From 9b152b0ddf91d5b2efbf8fe81a80d6310728ddfa Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 2 Feb 2016 10:07:08 -0600 Subject: [PATCH 327/650] Add property setters for Tally.scores, nuclides, filters, triggers --- examples/python/basic/build-xml.py | 23 +- .../python/lattice/hexagonal/build-xml.py | 4 +- examples/python/lattice/nested/build-xml.py | 4 +- examples/python/lattice/simple/build-xml.py | 8 +- examples/python/pincell/build-xml.py | 7 +- openmc/checkvalue.py | 16 +- openmc/mgxs/mgxs.py | 20 +- openmc/statepoint.py | 6 +- openmc/summary.py | 6 +- openmc/tallies.py | 229 +++++++++--------- openmc/trigger.py | 35 ++- tests/test_tallies/test_tallies.py | 149 +++++------- .../test_tally_aggregation.py | 10 +- .../test_tally_arithmetic.py | 19 +- 14 files changed, 257 insertions(+), 279 deletions(-) diff --git a/examples/python/basic/build-xml.py b/examples/python/basic/build-xml.py index 97591c9920..eb8fbd23f5 100644 --- a/examples/python/basic/build-xml.py +++ b/examples/python/basic/build-xml.py @@ -109,29 +109,20 @@ energyout_filter = openmc.Filter(type='energyout', bins=[0., 20.]) # Instantiate the first Tally first_tally = openmc.Tally(tally_id=1, name='first tally') -first_tally.add_filter(cell_filter) -scores = ['total', 'scatter', 'nu-scatter', \ +first_tally.filters = [cell_filter] +scores = ['total', 'scatter', 'nu-scatter', 'absorption', 'fission', 'nu-fission'] -for score in scores: - first_tally.add_score(score) +first_tally.scores = scores # Instantiate the second Tally second_tally = openmc.Tally(tally_id=2, name='second tally') -second_tally.add_filter(cell_filter) -second_tally.add_filter(energy_filter) -scores = ['total', 'scatter', 'nu-scatter', \ - 'absorption', 'fission', 'nu-fission'] -for score in scores: - second_tally.add_score(score) +second_tally.filters = [cell_filter, energy_filter] +second_tally.scores = scores # Instantiate the third Tally third_tally = openmc.Tally(tally_id=3, name='third tally') -third_tally.add_filter(cell_filter) -third_tally.add_filter(energy_filter) -third_tally.add_filter(energyout_filter) -scores = ['scatter', 'nu-scatter', 'nu-fission'] -for score in scores: - third_tally.add_score(score) +third_tally.filters = [cell_filter, energy_filter, energyout_filter] +third_tally.scores = ['scatter', 'nu-scatter', 'nu-fission'] # Instantiate a TalliesFile, register all Tallies, and export to XML tallies_file = openmc.TalliesFile() diff --git a/examples/python/lattice/hexagonal/build-xml.py b/examples/python/lattice/hexagonal/build-xml.py index 1125e8ce04..d1144cd918 100644 --- a/examples/python/lattice/hexagonal/build-xml.py +++ b/examples/python/lattice/hexagonal/build-xml.py @@ -166,8 +166,8 @@ plot_file.export_to_xml() # Instantiate a distribcell Tally tally = openmc.Tally(tally_id=1) -tally.add_filter(openmc.Filter(type='distribcell', bins=[cell2.id])) -tally.add_score('total') +tally.filters = [openmc.Filter(type='distribcell', bins=[cell2.id])] +tally.scores = ['total'] # Instantiate a TalliesFile, register Tally/Mesh, and export to XML tallies_file = openmc.TalliesFile() diff --git a/examples/python/lattice/nested/build-xml.py b/examples/python/lattice/nested/build-xml.py index 389af8e9b7..e4ac848396 100644 --- a/examples/python/lattice/nested/build-xml.py +++ b/examples/python/lattice/nested/build-xml.py @@ -175,8 +175,8 @@ mesh_filter.mesh = mesh # Instantiate the Tally tally = openmc.Tally(tally_id=1) -tally.add_filter(mesh_filter) -tally.add_score('total') +tally.filters = [mesh_filter] +tally.scores = ['total'] # Instantiate a TalliesFile, register Tally/Mesh, and export to XML tallies_file = openmc.TalliesFile() diff --git a/examples/python/lattice/simple/build-xml.py b/examples/python/lattice/simple/build-xml.py index e648c3d5b3..78ee61eb46 100644 --- a/examples/python/lattice/simple/build-xml.py +++ b/examples/python/lattice/simple/build-xml.py @@ -167,13 +167,13 @@ mesh_filter.mesh = mesh # Instantiate tally Trigger trigger = openmc.Trigger(trigger_type='rel_err', threshold=1E-2) -trigger.add_score('all') +trigger.scores = ['all'] # Instantiate the Tally tally = openmc.Tally(tally_id=1) -tally.add_filter(mesh_filter) -tally.add_score('total') -tally.add_trigger(trigger) +tally.filters = [mesh_filter] +tally.scores = ['total'] +tally.triggers = [trigger] # Instantiate a TalliesFile, register Tally/Mesh, and export to XML tallies_file = openmc.TalliesFile() diff --git a/examples/python/pincell/build-xml.py b/examples/python/pincell/build-xml.py index ca71b04e5c..aa87148381 100644 --- a/examples/python/pincell/build-xml.py +++ b/examples/python/pincell/build-xml.py @@ -196,11 +196,8 @@ mesh_filter.mesh = mesh # Instantiate the Tally tally = openmc.Tally(tally_id=1, name='tally 1') -tally.add_filter(energy_filter) -tally.add_filter(mesh_filter) -tally.add_score('flux') -tally.add_score('fission') -tally.add_score('nu-fission') +tally.filters = [energy_filter, mesh_filter] +tally.scores = ['flux', 'fission', 'nu-fission'] # Instantiate a TalliesFile, register all Tallies, and export to XML tallies_file = openmc.TalliesFile() diff --git a/openmc/checkvalue.py b/openmc/checkvalue.py index 787052f5d6..0e9dc9ef4b 100644 --- a/openmc/checkvalue.py +++ b/openmc/checkvalue.py @@ -41,9 +41,9 @@ def check_type(name, value, expected_type, expected_iter_type=None): Description of value being checked value : object Object to check type of - expected_type : type + expected_type : type or Iterable of type type to check object against - expected_iter_type : type or None, optional + expected_iter_type : type or Iterable of type or None, optional Expected type of each element in value, assuming it is iterable. If None, no check will be performed. @@ -57,9 +57,15 @@ def check_type(name, value, expected_type, expected_iter_type=None): if expected_iter_type: for item in value: if not _isinstance(item, expected_iter_type): - msg = 'Unable to set "{0}" to "{1}" since each item must be ' \ - 'of type "{2}"'.format(name, value, - expected_iter_type.__name__) + if isinstance(expected_iter_type, Iterable): + msg = 'Unable to set "{0}" to "{1}" since each item must be ' \ + 'one of the following types: "{2}"'.format( + name, value, ', '.join([t.__name__ for t in + expected_iter_type])) + else: + msg = 'Unable to set "{0}" to "{1}" since each item must be ' \ + 'of type "{2}"'.format(name, value, + expected_iter_type.__name__) raise ValueError(msg) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 875a82c468..ad987d70f1 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -510,27 +510,27 @@ class MGXS(object): # Create each Tally needed to compute the multi group cross section for score, key, filters in zip(scores, keys, all_filters): self.tallies[key] = openmc.Tally(name=self.name) - self.tallies[key].add_score(score) + self.tallies[key].scores.append(score) self.tallies[key].estimator = estimator - self.tallies[key].add_filter(domain_filter) + self.tallies[key].filters.append(domain_filter) # If a tally trigger was specified, add it to each tally if self.tally_trigger: trigger_clone = copy.deepcopy(self.tally_trigger) - trigger_clone.add_score(score) - self.tallies[key].add_trigger(trigger_clone) + trigger_clone.scores.append(score) + self.tallies[key].triggers.append(trigger_clone) # Add all non-domain specific Filters (e.g., 'energy') to the Tally for add_filter in filters: - self.tallies[key].add_filter(add_filter) + self.tallies[key].filters.append(add_filter) # If this is a by-nuclide cross-section, add all nuclides to Tally if self.by_nuclide and score != 'flux': all_nuclides = self.domain.get_all_nuclides() for nuclide in all_nuclides: - self.tallies[key].add_nuclide(nuclide) + self.tallies[key].nuclides.append(nuclide) else: - self.tallies[key].add_nuclide('total') + self.tallies[key].nuclides.append('total') def _compute_xs(self): """Performs generic cleanup after a subclass' uses tally arithmetic to @@ -552,7 +552,7 @@ class MGXS(object): self.xs_tally._nuclides = [] nuclides = self.domain.get_all_nuclides() for nuclide in nuclides: - self.xs_tally.add_nuclide(openmc.Nuclide(nuclide)) + self.xs_tally.nuclides.append(openmc.Nuclide(nuclide)) # Remove NaNs which may have resulted from divide-by-zero operations self.xs_tally._mean = np.nan_to_num(self.xs_tally.mean) @@ -2087,7 +2087,7 @@ class Chi(MGXS): super(Chi, self)._compute_xs() # Add the coarse energy filter back to the nu-fission tally - nu_fission_in.add_filter(energy_filter) + nu_fission_in.filters.append(energy_filter) return self._xs_tally @@ -2179,7 +2179,7 @@ class Chi(MGXS): xs_tally = nu_fission_out / nu_fission_in # Add the coarse energy filter back to the nu-fission tally - nu_fission_in.add_filter(energy_filter) + nu_fission_in.filters.append(energy_filter) xs = xs_tally.get_values(filters=filters, filter_bins=filter_bins, value=value) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index f5b5b2e72d..05a3896110 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -389,7 +389,7 @@ class StatePoint(object): new_filter.mesh = self.meshes[key] # Add Filter to the Tally - tally.add_filter(new_filter) + tally.filters.append(new_filter) # Read Nuclide bins nuclide_names = \ @@ -398,7 +398,7 @@ class StatePoint(object): # Add all Nuclides to the Tally for name in nuclide_names: nuclide = openmc.Nuclide(name.decode().strip()) - tally.add_nuclide(nuclide) + tally.nuclides.append(nuclide) scores = self._f['{0}{1}/score_bins'.format( base, tally_key)].value @@ -425,7 +425,7 @@ class StatePoint(object): pattern = r'-n$|-pn$|-yn$' score = re.sub(pattern, '-' + moments[j].decode(), score) - tally.add_score(score) + tally.scores.append(score) # Add Tally to the global dictionary of all Tallies tally.sparse = self.sparse diff --git a/openmc/summary.py b/openmc/summary.py index d22e367c95..a4d1d694c9 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -276,7 +276,7 @@ class Summary(object): # Get the distribcell index ind = self._f['geometry/cells'][key]['distribcell_index'].value if ind != 0: - cell.distribcell_index = ind + cell.distribcell_index = ind # Add the Cell to the global dictionary of all Cells self.cells[index] = cell @@ -539,7 +539,7 @@ class Summary(object): # If this is a moment, use generic moment order pattern = r'-n$|-pn$|-yn$' score = re.sub(pattern, '-' + moments[j].decode(), score) - tally.add_score(score) + tally.scores.append(score) # Read filter metadata num_filters = self._f['{0}/n_filters'.format(subbase)].value @@ -560,7 +560,7 @@ class Summary(object): new_filter.num_bins = num_bins # Add Filter to the Tally - tally.add_filter(new_filter) + tally.filters.append(new_filter) # Add Tally to the global dictionary of all Tallies self.tallies[tally_id] = tally diff --git a/openmc/tallies.py b/openmc/tallies.py index d1666694fe..f471dbdf37 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -7,8 +7,9 @@ import os import pickle import itertools from numbers import Integral, Real -from xml.etree import ElementTree as ET import sys +import warnings +from xml.etree import ElementTree as ET import numpy as np @@ -18,10 +19,13 @@ from openmc.filter import _FILTER_TYPES import openmc.checkvalue as cv from openmc.clean_xml import * - if sys.version_info[0] >= 3: basestring = str + +# DeprecationWarning filter for the Tally.add_*(...) methods +warnings.simplefilter('always', DeprecationWarning) + # "Static" variable for auto-generated Tally IDs AUTO_TALLY_ID = 10000 @@ -75,7 +79,7 @@ class Tally(object): num_bins : Integral Total number of bins for the tally shape : 3-tuple of Integral - The shape of the tally data array ordered as the number of filter bins, + The shape of the tally data array ordered as the number of filter bins, nuclide bins and score bins num_realizations : Integral Total number of realizations @@ -145,19 +149,19 @@ class Tally(object): clone._filters = [] for self_filter in self.filters: - clone.add_filter(copy.deepcopy(self_filter, memo)) + clone.filters.append(copy.deepcopy(self_filter, memo)) clone._nuclides = [] for nuclide in self.nuclides: - clone.add_nuclide(copy.deepcopy(nuclide, memo)) + clone.nuclides.append(copy.deepcopy(nuclide, memo)) clone._scores = [] for score in self.scores: - clone.add_score(score) + clone.scores.append(score) clone._triggers = [] for trigger in self.triggers: - clone.add_trigger(trigger) + clone.triggers.append(trigger) memo[id(self)] = clone @@ -423,6 +427,11 @@ class Tally(object): ['analog', 'tracklength', 'collision']) self._estimator = estimator + @triggers.setter + def triggers(self, triggers): + cv.check_type('tally triggers', trigger, Iterable, Trigger) + self._triggers = triggers + def add_trigger(self, trigger): """Add a tally trigger to the tally @@ -433,13 +442,11 @@ class Tally(object): """ - if not isinstance(trigger, Trigger): - msg = 'Unable to add a tally trigger for Tally ID="{0}" to ' \ - 'since "{1}" is not a Trigger'.format(self.id, trigger) - raise ValueError(msg) - - if trigger not in self.triggers: - self.triggers.append(trigger) + warnings.warn("Tally.add_trigger(...) has been deprecated and may be " + "removed in a future version. Tally triggers should be " + "defined using the triggers property directly.", + DeprecationWarning) + self.triggers.append(trigger) @id.setter def id(self, tally_id): @@ -460,6 +467,55 @@ class Tally(object): else: self._name = '' + @filters.setter + def filters(self, filters): + cv.check_type('tally filters', filters, Iterable, + (Filter, CrossFilter, AggregateFilter)) + + # If the filter is already in the Tally, raise an error + for i, f in enumerate(filters[:-1]): + if f in filters[i+1:]: + msg = 'Unable to add a duplicate filter "{0}" to Tally ID="{1}" ' \ + 'since duplicate filters are not supported in the OpenMC ' \ + 'Python API'.format(f, self.id) + raise ValueError(msg) + + self._filters = filters + + @nuclides.setter + def nuclides(self, nuclides): + cv.check_type('tally nuclides', nuclides, Iterable, + (basestring, Nuclide, CrossNuclide, AggregateNuclide)) + + # If the nuclide is already in the Tally, raise an error + for i, nuclide in enumerate(nuclides[:-1]): + if nuclide in nuclides[i+1:]: + msg = 'Unable to add a duplicate nuclide "{0}" to Tally ID="{1}" ' \ + 'since duplicate nuclides are not supported in the OpenMC ' \ + 'Python API'.format(nuclide, self.id) + raise ValueError(msg) + + self._nuclides = nuclides + + @scores.setter + def scores(self, scores): + cv.check_type('tally scores', scores, Iterable, + (basestring, CrossScore, AggregateScore)) + + for i, score in enumerate(scores[:-1]): + # If the score is already in the Tally, raise an error + if score in scores[i+1:]: + msg = 'Unable to add a duplicate score "{0}" to Tally ID="{1}" ' \ + 'since duplicate scores are not supported in the OpenMC ' \ + 'Python API'.format(score, self.id) + raise ValueError(msg) + + # If score is a string, strip whitespace + if isinstance(score, basestring): + scores[i] = score.strip() + + self._scores = scores + def add_filter(self, new_filter): """Add a filter to the tally @@ -475,19 +531,11 @@ class Tally(object): """ - if not isinstance(new_filter, (Filter, CrossFilter, AggregateFilter)): - msg = 'Unable to add Filter "{0}" to Tally ID="{1}" since it is ' \ - 'not a Filter object'.format(new_filter, self.id) - raise ValueError(msg) - - # If the filter is already in the Tally, raise an error - if new_filter in self.filters: - msg = 'Unable to add a duplicate filter "{0}" to Tally ID="{1}" ' \ - 'since duplicate filters are not supported in the OpenMC ' \ - 'Python API'.format(new_filter, self.id) - raise ValueError(msg) - - self._filters.append(new_filter) + warnings.warn("Tally.add_filter(...) has been deprecated and may be " + "removed in a future version. Tally filters should be " + "defined using the filters property directly.", + DeprecationWarning) + self.filters.append(new_filter) def add_nuclide(self, nuclide): """Specify that scores for a particular nuclide should be accumulated @@ -504,20 +552,11 @@ class Tally(object): """ - if not isinstance(nuclide, (basestring, Nuclide, - CrossNuclide, AggregateNuclide)): - msg = 'Unable to add nuclide "{0}" to Tally ID="{1}" since it is ' \ - 'not a Nuclide object'.format(nuclide) - raise ValueError(msg) - - # If the nuclide is already in the Tally, raise an error - if nuclide in self.nuclides: - msg = 'Unable to add a duplicate nuclide "{0}" to Tally ID="{1}" ' \ - 'since duplicate nuclides are not supported in the OpenMC ' \ - 'Python API'.format(nuclide, self.id) - raise ValueError(msg) - - self._nuclides.append(nuclide) + warnings.warn("Tally.add_nuclide(...) has been deprecated and may be " + "removed in a future version. Tally nuclides should be " + "defined using the nuclides property directly.", + DeprecationWarning) + self.nuclides.append(nuclide) def add_score(self, score): """Specify a quantity to be scored @@ -533,24 +572,11 @@ class Tally(object): """ - if not isinstance(score, (basestring, CrossScore, AggregateScore)): - msg = 'Unable to add score "{0}" to Tally ID="{1}" since it is ' \ - 'not a string'.format(score, self.id) - raise ValueError(msg) - - # If the score is already in the Tally, raise an error - if score in self.scores: - msg = 'Unable to add a duplicate score "{0}" to Tally ID="{1}" ' \ - 'since duplicate scores are not supported in the OpenMC ' \ - 'Python API'.format(score, self.id) - raise ValueError(msg) - - # Normal score strings - if isinstance(score, basestring): - self._scores.append(score.strip()) - # CrossScores and AggrgateScore - else: - self._scores.append(score) + warnings.warn("Tally.add_score(...) has been deprecated and may be " + "removed in a future version. Tally scores should be " + "defined using the scores property directly.", + DeprecationWarning) + self.scores.append(score) @num_realizations.setter def num_realizations(self, num_realizations): @@ -771,11 +797,11 @@ class Tally(object): # Add unique scores from second tally to merged tally for score in tally.scores: if score not in merged_tally.scores: - merged_tally.add_score(score) + merged_tally.scores.append(score) # Add triggers from second tally to merged tally for trigger in tally.triggers: - merged_tally.add_trigger(trigger) + merged_tally.triggers.append(trigger) return merged_tally @@ -1723,33 +1749,33 @@ class Tally(object): # Add filters to the new tally if filter_product == 'entrywise': for self_filter in self_copy.filters: - new_tally.add_filter(self_filter) + new_tally.filters.append(self_filter) else: all_filters = [self_copy.filters, other_copy.filters] for self_filter, other_filter in itertools.product(*all_filters): new_filter = CrossFilter(self_filter, other_filter, binary_op) - new_tally.add_filter(new_filter) + new_tally.filters.append(new_filter) # Add nuclides to the new tally if nuclide_product == 'entrywise': for self_nuclide in self_copy.nuclides: - new_tally.add_nuclide(self_nuclide) + new_tally.nuclides.append(self_nuclide) else: all_nuclides = [self_copy.nuclides, other_copy.nuclides] for self_nuclide, other_nuclide in itertools.product(*all_nuclides): new_nuclide = \ CrossNuclide(self_nuclide, other_nuclide, binary_op) - new_tally.add_nuclide(new_nuclide) + new_tally.nuclides.append(new_nuclide) # Add scores to the new tally if score_product == 'entrywise': for self_score in self_copy.scores: - new_tally.add_score(self_score) + new_tally.scores.append(self_score) else: all_scores = [self_copy.scores, other_copy.scores] for self_score, other_score in itertools.product(*all_scores): new_score = CrossScore(self_score, other_score, binary_op) - new_tally.add_score(new_score) + new_tally.scores.append(new_score) # Update the new tally's filter strides new_tally._update_filter_strides() @@ -1812,14 +1838,14 @@ class Tally(object): filter_copy = copy.deepcopy(other_filter) other._mean = np.repeat(other.mean, filter_copy.num_bins, axis=0) other._std_dev = np.repeat(other.std_dev, filter_copy.num_bins, axis=0) - other.add_filter(filter_copy) + other.filters.append(filter_copy) # Add filters present in other but not in self to self for self_filter in self_missing_filters: filter_copy = copy.deepcopy(self_filter) self._mean = np.repeat(self.mean, filter_copy.num_bins, axis=0) self._std_dev = np.repeat(self.std_dev, filter_copy.num_bins, axis=0) - self.add_filter(filter_copy) + self.filters.append(filter_copy) # Align other filters with self filters for i, self_filter in enumerate(self.filters): @@ -1842,7 +1868,7 @@ class Tally(object): np.tile(other.std_dev, (1, self.num_nuclides, 1)) # Add nuclides to each tally such that each tally contains the complete - # set of nuclides necessary to perform an entrywise product. New + # set of nuclides necessary to perform an entrywise product. New # nuclides added to a tally will have all their scores set to zero. else: @@ -1858,7 +1884,7 @@ class Tally(object): np.insert(other.mean, other.num_nuclides, 0, axis=1) other._std_dev = \ np.insert(other.std_dev, other.num_nuclides, 0, axis=1) - other.add_nuclide(nuclide) + other.nuclides.append(nuclide) # Add nuclides present in other but not in self to self for nuclide in self_missing_nuclides: @@ -1866,7 +1892,7 @@ class Tally(object): np.insert(self.mean, self.num_nuclides, 0, axis=1) self._std_dev = \ np.insert(self.std_dev, self.num_nuclides, 0, axis=1) - self.add_nuclide(nuclide) + self.nuclides.append(nuclide) # Align other nuclides with self nuclides for i, nuclide in enumerate(self.nuclides): @@ -1899,13 +1925,13 @@ class Tally(object): for score in other_missing_scores: other._mean = np.insert(other.mean, other.num_scores, 0, axis=2) other._std_dev = np.insert(other.std_dev, other.num_scores, 0, axis=2) - other.add_score(score) + other.scores.append(score) # Add scores present in other but not in self to self for score in self_missing_scores: self._mean = np.insert(self.mean, self.num_scores, 0, axis=2) self._std_dev = np.insert(self.std_dev, self.num_scores, 0, axis=2) - self.add_score(score) + self.scores.append(score) # Align other scores with self scores for i, score in enumerate(self.scores): @@ -2210,12 +2236,9 @@ class Tally(object): new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - for self_filter in self.filters: - new_tally.add_filter(self_filter) - for nuclide in self.nuclides: - new_tally.add_nuclide(nuclide) - for score in self.scores: - new_tally.add_score(score) + new_tally.filters = self.filters + new_tally.nuclides = self.nuclides + new_tally.scores = self.scores # If this tally operand is sparse, sparsify the new tally new_tally.sparse = self.sparse @@ -2284,12 +2307,9 @@ class Tally(object): new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - for self_filter in self.filters: - new_tally.add_filter(self_filter) - for nuclide in self.nuclides: - new_tally.add_nuclide(nuclide) - for score in self.scores: - new_tally.add_score(score) + new_tally.filters = self.filters + new_tally.nuclides = self.nuclides + new_tally.scores = self.scores # If this tally operand is sparse, sparsify the new tally new_tally.sparse = self.sparse @@ -2359,12 +2379,9 @@ class Tally(object): new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - for self_filter in self.filters: - new_tally.add_filter(self_filter) - for nuclide in self.nuclides: - new_tally.add_nuclide(nuclide) - for score in self.scores: - new_tally.add_score(score) + new_tally.filters = self.filters + new_tally.nuclides = self.nuclides + new_tally.scores = self.scores # If this tally operand is sparse, sparsify the new tally new_tally.sparse = self.sparse @@ -2434,12 +2451,9 @@ class Tally(object): new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - for self_filter in self.filters: - new_tally.add_filter(self_filter) - for nuclide in self.nuclides: - new_tally.add_nuclide(nuclide) - for score in self.scores: - new_tally.add_score(score) + new_tally.filters = self.filters + new_tally.nuclides = self.nuclides + new_tally.scores = self.scores # If this tally operand is sparse, sparsify the new tally new_tally.sparse = self.sparse @@ -2513,12 +2527,9 @@ class Tally(object): new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - for self_filter in self.filters: - new_tally.add_filter(self_filter) - for nuclide in self.nuclides: - new_tally.add_nuclide(nuclide) - for score in self.scores: - new_tally.add_score(score) + new_tally.filters = self.filters + new_tally.nuclides = self.nuclides + new_tally.scores = self.scores # If original tally was sparse, sparsify the exponentiated tally new_tally.sparse = self.sparse @@ -2853,11 +2864,11 @@ class Tally(object): if not remove_filter: filter_sum = \ AggregateFilter(self_filter, filter_bins, 'sum') - tally_sum.add_filter(filter_sum) + tally_sum.filters.append(filter_sum) # Add a copy of each filter not summed across to the tally sum else: - tally_sum.add_filter(copy.deepcopy(self_filter)) + tally_sum.filters.append(copy.deepcopy(self_filter)) # Add a copy of this tally's filters to the tally sum else: @@ -2875,7 +2886,7 @@ class Tally(object): # Add AggregateNuclide to the tally sum nuclide_sum = AggregateNuclide(nuclides, 'sum') - tally_sum.add_nuclide(nuclide_sum) + tally_sum.nuclides.append(nuclide_sum) # Add a copy of this tally's nuclides to the tally sum else: @@ -2893,7 +2904,7 @@ class Tally(object): # Add AggregateScore to the tally sum score_sum = AggregateScore(scores, 'sum') - tally_sum.add_score(score_sum) + tally_sum.scores.append(score_sum) # Add a copy of this tally's scores to the tally sum else: @@ -2946,7 +2957,7 @@ class Tally(object): # Add the new filter to a copy of this Tally new_tally = copy.deepcopy(self) - new_tally.add_filter(new_filter) + new_tally.filters.append(new_filter) # Determine "base" indices along the new "diagonal", and the factor # by which the "base" indices should be repeated to account for all diff --git a/openmc/trigger.py b/openmc/trigger.py index bcac8c31c6..f03703328b 100644 --- a/openmc/trigger.py +++ b/openmc/trigger.py @@ -1,6 +1,7 @@ from numbers import Real from xml.etree import ElementTree as ET import sys +import warnings from openmc.checkvalue import check_type, check_value @@ -8,6 +9,10 @@ if sys.version_info[0] >= 3: basestring = str +# DeprecationWarning filter for the Trigger.add_score(...) method +warnings.simplefilter('always', DeprecationWarning) + + class Trigger(object): """A criterion for when to finish a simulation based on tally uncertainties. @@ -46,9 +51,7 @@ class Trigger(object): clone._trigger_type = self._trigger_type clone._threshold = self._threshold - clone._scores = [] - for score in self._scores: - clone.add_score(score) + clone.scores = self.scores memo[id(self)] = clone @@ -97,6 +100,17 @@ class Trigger(object): check_type('tally trigger threshold', threshold, Real) self._threshold = threshold + @scores.setter + def scores(self, scores): + cv.check_type('trigger scores', scores, Iterable, basestring) + + # Set scores making sure not to have duplicates + self._scores = [] + for score in scores: + if score not in self._scores: + self._scores.append(score) + + def add_score(self, score): """Add a score to the list of scores to be checked against the trigger. @@ -107,16 +121,11 @@ class Trigger(object): """ - if not isinstance(score, basestring): - msg = 'Unable to add score "{0}" to tally trigger since ' \ - 'it is not a string'.format(score) - raise ValueError(msg) - - # If the score is already in the Tally, don't add it again - if score in self._scores: - return - else: - self._scores.append(score) + warnings.warn("Trigger.add_score(...) has been deprecated and may be " + "removed in a future version. Tally trigger scores should " + "be defined using the scores property directly.", + DeprecationWarning) + self.scores.append(score) def get_trigger_xml(self, element): """Return XML representation of the trigger diff --git a/tests/test_tallies/test_tallies.py b/tests/test_tallies/test_tallies.py index 9fca93bcab..81e8641dec 100644 --- a/tests/test_tallies/test_tallies.py +++ b/tests/test_tallies/test_tallies.py @@ -23,19 +23,19 @@ class TalliesTestHarness(PyAPITestHarness): azimuthal_bins = (-3.1416, -1.8850, -0.6283, 0.6283, 1.8850, 3.1416) azimuthal_filter1 = Filter(type='azimuthal', bins=azimuthal_bins) azimuthal_tally1 = Tally() - azimuthal_tally1.add_filter(azimuthal_filter1) - azimuthal_tally1.add_score('flux') + azimuthal_tally1.filters = [azimuthal_filter1] + azimuthal_tally1.scores = ['flux'] azimuthal_tally1.estimator = 'tracklength' azimuthal_tally2 = Tally() - azimuthal_tally2.add_filter(azimuthal_filter1) - azimuthal_tally2.add_score('flux') + azimuthal_tally2.filters = [azimuthal_filter1] + azimuthal_tally2.scores = ['flux'] azimuthal_tally2.estimator = 'analog' azimuthal_filter2 = Filter(type='azimuthal', bins=(5,)) azimuthal_tally3 = Tally() - azimuthal_tally3.add_filter(azimuthal_filter2) - azimuthal_tally3.add_score('flux') + azimuthal_tally3.filters = [azimuthal_filter2] + azimuthal_tally3.scores = ['flux'] azimuthal_tally3.estimator = 'tracklength' mesh_2x2 = Mesh(mesh_id=1) @@ -44,154 +44,129 @@ class TalliesTestHarness(PyAPITestHarness): mesh_2x2.dimension = [2, 2] mesh_filter = Filter(type='mesh', bins=(1,)) azimuthal_tally4 = Tally() - azimuthal_tally4.add_filter(azimuthal_filter2) - azimuthal_tally4.add_filter(mesh_filter) - azimuthal_tally4.add_score('flux') + azimuthal_tally4.filters = [azimuthal_filter2, mesh_filter] + azimuthal_tally4.scores = ['flux'] azimuthal_tally4.estimator = 'tracklength' cellborn_tally = Tally() - cellborn_tally.add_filter(Filter(type='cellborn', bins=(10, 21, 22, 23))) - cellborn_tally.add_score('total') + cellborn_tally.filters = [Filter(type='cellborn', bins=(10, 21, 22, 23))] + cellborn_tally.scores = ['total'] dg_tally = Tally() - dg_tally.add_filter(Filter(type='delayedgroup', bins=(1, 2, 3, 4, 5, 6))) - dg_tally.add_score('delayed-nu-fission') + dg_tally.filters = [Filter(type='delayedgroup', bins=(1, 2, 3, 4, 5, 6))] + dg_tally.scores = ['delayed-nu-fission'] four_groups = (0.0, 0.253e-6, 1.0e-3, 1.0, 20.0) energy_filter = Filter(type='energy', bins=four_groups) energy_tally = Tally() - energy_tally.add_filter(energy_filter) - energy_tally.add_score('total') + energy_tally.filters = [energy_filter] + energy_tally.scores = ['total'] energyout_filter = Filter(type='energyout', bins=four_groups) energyout_tally = Tally() - energyout_tally.add_filter(energyout_filter) - energyout_tally.add_score('scatter') + energyout_tally.filters = [energyout_filter] + energyout_tally.scores = ['scatter'] transfer_tally = Tally() - transfer_tally.add_filter(energy_filter) - transfer_tally.add_filter(energyout_filter) - transfer_tally.add_score('scatter') - transfer_tally.add_score('nu-fission') + transfer_tally.filters = [energy_filter, energyout_filter] + transfer_tally.scores = ['scatter', 'nu-fission'] material_tally = Tally() - material_tally.add_filter(Filter(type='material', bins=(1, 2, 3, 4))) - material_tally.add_score('total') + material_tally.filters = [Filter(type='material', bins=(1, 2, 3, 4))] + material_tally.scores = ['total'] mu_tally1 = Tally() - mu_tally1.add_filter(Filter(type='mu', bins=(-1.0, -0.5, 0.0, 0.5, 1.0))) - mu_tally1.add_score('scatter') - mu_tally1.add_score('nu-scatter') + mu_tally1.filters = [Filter(type='mu', bins=(-1.0, -0.5, 0.0, 0.5, 1.0))] + mu_tally1.scores = ['scatter', 'nu-scatter'] mu_filter = Filter(type='mu', bins=(5,)) mu_tally2 = Tally() - mu_tally2.add_filter(mu_filter) - mu_tally2.add_score('scatter') - mu_tally2.add_score('nu-scatter') + mu_tally2.filters = [mu_filter] + mu_tally2.scores = ['scatter', 'nu-scatter'] mu_tally3 = Tally() - mu_tally3.add_filter(mu_filter) - mu_tally3.add_filter(mesh_filter) - mu_tally3.add_score('scatter') - mu_tally3.add_score('nu-scatter') + mu_tally3.filters = [mu_filter, mesh_filter] + mu_tally3.scores = ['scatter', 'nu-scatter'] polar_bins = (0.0, 0.6283, 1.2566, 1.8850, 2.5132, 3.1416) polar_filter = Filter(type='polar', bins=polar_bins) polar_tally1 = Tally() - polar_tally1.add_filter(polar_filter) - polar_tally1.add_score('flux') + polar_tally1.filters = [polar_filter] + polar_tally1.scores = ['flux'] polar_tally1.estimator = 'tracklength' polar_tally2 = Tally() - polar_tally2.add_filter(polar_filter) - polar_tally2.add_score('flux') + polar_tally2.filters = [polar_filter] + polar_tally2.scores = ['flux'] polar_tally2.estimator = 'analog' polar_filter2 = Filter(type='polar', bins=(5,)) polar_tally3 = Tally() - polar_tally3.add_filter(polar_filter2) - polar_tally3.add_score('flux') + polar_tally3.filters = [polar_filter2] + polar_tally3.scores = ['flux'] polar_tally3.estimator = 'tracklength' polar_tally4 = Tally() - polar_tally4.add_filter(polar_filter2) - polar_tally4.add_filter(mesh_filter) - polar_tally4.add_score('flux') + polar_tally4.filters = [polar_filter2, mesh_filter] + polar_tally4.scores = ['flux'] polar_tally4.estimator = 'tracklength' universe_tally = Tally() - universe_tally.add_filter(Filter(type='universe', bins=(1, 2, 3, 4))) - universe_tally.add_score('total') + universe_tally.filters = [Filter(type='universe', bins=(1, 2, 3, 4))] + universe_tally.scores = ['total'] cell_filter = Filter(type='cell', bins=(10, 21, 22, 23)) score_tallies = [Tally(), Tally(), Tally()] for t in score_tallies: - t.add_filter(cell_filter) - t.add_score('absorption') - t.add_score('delayed-nu-fission') - t.add_score('events') - t.add_score('fission') - t.add_score('inverse-velocity') - t.add_score('kappa-fission') - t.add_score('(n,2n)') - t.add_score('(n,n1)') - t.add_score('(n,gamma)') - t.add_score('nu-fission') - t.add_score('scatter') - t.add_score('elastic') - t.add_score('total') + t.filters = [cell_filter] + t.scores = ['absorption', 'delayed-nu-fission', 'events', 'fission', + 'inverse-velocity', 'kappa-fission', '(n,2n)', '(n,n1)', + '(n,gamma)', 'nu-fission', 'scatter', 'elastic', 'total'] score_tallies[0].estimator = 'tracklength' score_tallies[1].estimator = 'analog' score_tallies[2].estimator = 'collision' cell_filter2 = Filter(type='cell', bins=(21, 22, 23, 27, 28, 29)) flux_tallies = [Tally() for i in range(4)] - [t.add_filter(cell_filter2) for t in flux_tallies] - flux_tallies[0].add_score('flux') - [t.add_score('flux-y5') for t in flux_tallies[1:]] + for t in flux_tallies: + t.filters = [cell_filter2] + flux_tallies[0].scores = ['flux'] + for t in flux_tallies[1:]: + t.scores = ['flux-y5'] flux_tallies[1].estimator = 'tracklength' flux_tallies[2].estimator = 'analog' flux_tallies[3].estimator = 'collision' scatter_tally1 = Tally() - scatter_tally1.add_filter(cell_filter) - scatter_tally1.add_score('scatter') - scatter_tally1.add_score('scatter-1') - scatter_tally1.add_score('scatter-2') - scatter_tally1.add_score('scatter-3') - scatter_tally1.add_score('scatter-4') - scatter_tally1.add_score('nu-scatter') - scatter_tally1.add_score('nu-scatter-1') - scatter_tally1.add_score('nu-scatter-2') - scatter_tally1.add_score('nu-scatter-3') - scatter_tally1.add_score('nu-scatter-4') + scatter_tally1.filters = [cell_filter] + scatter_tally1.scores = ['scatter', 'scatter-1', 'scatter-2', 'scatter-3', + 'scatter-4', 'nu-scatter', 'nu-scatter-1', + 'nu-scatter-2', 'nu-scatter-3', 'nu-scatter-4'] scatter_tally2 = Tally() - scatter_tally2.add_filter(cell_filter) - scatter_tally2.add_score('scatter-p4') - scatter_tally2.add_score('scatter-y4') - scatter_tally2.add_score('nu-scatter-p4') - scatter_tally2.add_score('nu-scatter-y3') + scatter_tally2.filters = [cell_filter] + scatter_tally2.scores = ['scatter-p4', 'scatter-y4', 'nu-scatter-p4', + 'nu-scatter-y3'] total_tallies = [Tally() for i in range(4)] - [t.add_filter(cell_filter) for t in total_tallies] - total_tallies[0].add_score('total') - [t.add_score('total-y4') for t in total_tallies[1:]] - [t.add_nuclide('U-235') for t in total_tallies[1:]] - [t.add_nuclide('total') for t in total_tallies[1:]] + for t in total_tallies: + t.filters = [cell_filter] + total_tallies[0].scores = ['total'] + for t in total_tallies[1:]: + t.scores = ['total-y4'] + t.nuclides = ['U-235', 'total'] total_tallies[1].estimator = 'tracklength' total_tallies[2].estimator = 'analog' total_tallies[3].estimator = 'collision' questionable_tally = Tally() - questionable_tally.add_score('transport') - questionable_tally.add_score('n1n') + questionable_tally.scores = ['transport', 'n1n'] all_nuclide_tallies = [Tally(), Tally()] for t in all_nuclide_tallies: - t.add_filter(cell_filter) - t.add_nuclide('all') - t.add_score('total') + t.filters = [cell_filter] + t.nuclides = ['all'] + t.scores = ['total'] all_nuclide_tallies[0].estimator = 'tracklength' all_nuclide_tallies[0].estimator = 'collision' diff --git a/tests/test_tally_aggregation/test_tally_aggregation.py b/tests/test_tally_aggregation/test_tally_aggregation.py index a5c8d94141..7d682b6986 100644 --- a/tests/test_tally_aggregation/test_tally_aggregation.py +++ b/tests/test_tally_aggregation/test_tally_aggregation.py @@ -30,13 +30,9 @@ class TallyAggregationTestHarness(PyAPITestHarness): # Initialized the tallies tally = openmc.Tally(name='distribcell tally') - tally.add_filter(energy_filter) - tally.add_filter(distrib_filter) - tally.add_score('nu-fission') - tally.add_score('total') - tally.add_nuclide(u235) - tally.add_nuclide(u238) - tally.add_nuclide(pu239) + tally.filters = [energy_filter, distrib_filter] + tally.scores = ['nu-fission', 'total'] + tally.nuclides = [u235, u238, pu239] tallies_file.add_tally(tally) # Export tallies to file diff --git a/tests/test_tally_arithmetic/test_tally_arithmetic.py b/tests/test_tally_arithmetic/test_tally_arithmetic.py index 1954334b7f..cf8d012e8c 100644 --- a/tests/test_tally_arithmetic/test_tally_arithmetic.py +++ b/tests/test_tally_arithmetic/test_tally_arithmetic.py @@ -40,22 +40,15 @@ class TallyArithmeticTestHarness(PyAPITestHarness): # Initialized the tallies tally = openmc.Tally(name='tally 1') - tally.add_filter(material_filter) - tally.add_filter(energy_filter) - tally.add_filter(distrib_filter) - tally.add_score('nu-fission') - tally.add_score('total') - tally.add_nuclide(u235) - tally.add_nuclide(pu239) + tally.filters = [material_filter, energy_filter, distrib_filter] + tally.scores = ['nu-fission', 'total'] + tally.nuclides = [u235, pu239] tallies_file.add_tally(tally) tally = openmc.Tally(name='tally 2') - tally.add_filter(energy_filter) - tally.add_filter(mesh_filter) - tally.add_score('total') - tally.add_score('fission') - tally.add_nuclide(u238) - tally.add_nuclide(u235) + tally.filters = [energy_filter, mesh_filter] + tally.scores = ['total', 'fission'] + tally.nuclides = [u238, u235] tallies_file.add_tally(tally) tallies_file.add_mesh(mesh) From 72659506e06d6df8b47186e7878196b5bbb56457 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 18 Feb 2016 11:27:09 -0600 Subject: [PATCH 328/650] Use universal newlines in openmc.Executor --- openmc/executor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openmc/executor.py b/openmc/executor.py index 58cb912465..214517d6ed 100644 --- a/openmc/executor.py +++ b/openmc/executor.py @@ -27,7 +27,8 @@ class Executor(object): # Launch a subprocess to run OpenMC p = subprocess.Popen(command, shell=True, cwd=self._working_directory, - stdout=subprocess.PIPE) + stdout=subprocess.PIPE, + universal_newlines=True) # Capture and re-print OpenMC output in real-time while True: From 5fef6f4f66aed7ee26173c7e5deac96de10de2ff Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 18 Feb 2016 11:30:39 -0600 Subject: [PATCH 329/650] Remove warnings filter for DeprecationWarning --- openmc/tallies.py | 3 --- openmc/trigger.py | 4 ---- openmc/universe.py | 3 --- 3 files changed, 10 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index f471dbdf37..f938ae708e 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -23,9 +23,6 @@ if sys.version_info[0] >= 3: basestring = str -# DeprecationWarning filter for the Tally.add_*(...) methods -warnings.simplefilter('always', DeprecationWarning) - # "Static" variable for auto-generated Tally IDs AUTO_TALLY_ID = 10000 diff --git a/openmc/trigger.py b/openmc/trigger.py index f03703328b..ce7d432c2e 100644 --- a/openmc/trigger.py +++ b/openmc/trigger.py @@ -9,10 +9,6 @@ if sys.version_info[0] >= 3: basestring = str -# DeprecationWarning filter for the Trigger.add_score(...) method -warnings.simplefilter('always', DeprecationWarning) - - class Trigger(object): """A criterion for when to finish a simulation based on tally uncertainties. diff --git a/openmc/universe.py b/openmc/universe.py index 74c438615c..9a1effdde1 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -16,9 +16,6 @@ if sys.version_info[0] >= 3: basestring = str -# DeprecationWarning filter for the Cell.add_surface(...) method -warnings.simplefilter('always', DeprecationWarning) - # A static variable for auto-generated Cell IDs AUTO_CELL_ID = 10000 From 1e674ebbdbc2aa7b0d3f6b1946a2e9ad4e14515a Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 23 Feb 2016 09:48:42 -0600 Subject: [PATCH 330/650] Have setters for scores, nuclide, filters, and triggers expect a MutableSequence --- openmc/tallies.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index f938ae708e..a808c11dc6 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1,6 +1,6 @@ from __future__ import division -from collections import Iterable, defaultdict +from collections import Iterable, MutableSequence, defaultdict import copy from functools import partial import os @@ -426,7 +426,7 @@ class Tally(object): @triggers.setter def triggers(self, triggers): - cv.check_type('tally triggers', trigger, Iterable, Trigger) + cv.check_type('tally triggers', trigger, MutableSequence, Trigger) self._triggers = triggers def add_trigger(self, trigger): @@ -466,7 +466,7 @@ class Tally(object): @filters.setter def filters(self, filters): - cv.check_type('tally filters', filters, Iterable, + cv.check_type('tally filters', filters, MutableSequence, (Filter, CrossFilter, AggregateFilter)) # If the filter is already in the Tally, raise an error @@ -481,7 +481,7 @@ class Tally(object): @nuclides.setter def nuclides(self, nuclides): - cv.check_type('tally nuclides', nuclides, Iterable, + cv.check_type('tally nuclides', nuclides, MutableSequence, (basestring, Nuclide, CrossNuclide, AggregateNuclide)) # If the nuclide is already in the Tally, raise an error @@ -496,7 +496,7 @@ class Tally(object): @scores.setter def scores(self, scores): - cv.check_type('tally scores', scores, Iterable, + cv.check_type('tally scores', scores, MutableSequence, (basestring, CrossScore, AggregateScore)) for i, score in enumerate(scores[:-1]): From 713f6bf0fb6e207d315b42a485abed8bc66c8815 Mon Sep 17 00:00:00 2001 From: Derek Gaston Date: Mon, 22 Feb 2016 17:35:01 -0700 Subject: [PATCH 331/650] Add KappaFission capability to MGXS --- openmc/mgxs/mgxs.py | 139 ++++++++++++++++++++------------------------ 1 file changed, 63 insertions(+), 76 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 875a82c468..09e0f95907 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -25,6 +25,7 @@ MGXS_TYPES = ['total', 'capture', 'fission', 'nu-fission', + 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', @@ -315,7 +316,7 @@ class MGXS(object): Parameters ---------- - mgxs_type : {'total', 'transport', 'absorption', 'capture', 'fission', 'nu-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'chi'} + mgxs_type : {'total', 'transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'chi'} The type of multi-group cross section object to return domain : Material or Cell or Universe The domain for spatial homogenization @@ -352,6 +353,8 @@ class MGXS(object): mgxs = FissionXS(domain, domain_type, energy_groups) elif mgxs_type == 'nu-fission': mgxs = NuFissionXS(domain, domain_type, energy_groups) + elif mgxs_type == 'kappa-fission': + mgxs = KappaFissionXS(domain, domain_type, energy_groups) elif mgxs_type == 'scatter': mgxs = ScatterXS(domain, domain_type, energy_groups) elif mgxs_type == 'nu-scatter': @@ -1484,96 +1487,80 @@ class CaptureXS(MGXS): self._rxn_rate_tally.sparse = self.sparse return self._rxn_rate_tally +class FissionXSBase(MGXS): + """A fission production multi-group cross section base class + for NuFission and KappaFission + """ -class FissionXS(MGXS): + # This is an abstract class which cannot be instantiated + __metaclass__ = abc.ABCMeta + + def __init__(self, rxn_type, domain=None, domain_type=None, + groups=None, by_nuclide=False, name=''): + super(FissionXSBase, self).__init__(domain, domain_type, + groups, by_nuclide, name) + self._rxn_type = rxn_type + + @property + def tallies(self): + """Construct the OpenMC tallies needed to compute this cross section. + + This method constructs two tracklength tallies to compute the 'flux' + and 'rxn_type' reaction rates in the spatial domain and energy + groups of interest. + + """ + + # Instantiate tallies if they do not exist + if self._tallies is None: + + # Create a list of scores for each Tally to be created + scores = ['flux', self._rxn_type] + estimator = 'tracklength' + keys = scores + + # Create the non-domain specific Filters for the Tallies + group_edges = self.energy_groups.group_edges + energy_filter = openmc.Filter('energy', group_edges) + filters = [[energy_filter], [energy_filter]] + + # Initialize the Tallies + self._create_tallies(scores, filters, keys, estimator) + + return self._tallies + + @property + def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + self._rxn_rate_tally = self.tallies[self._rxn_type] + self._rxn_rate_tally.sparse = self.sparse + return self._rxn_rate_tally + + +class FissionXS(FissionXSBase): """A fission multi-group cross section.""" def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): - super(FissionXS, self).__init__(domain, domain_type, + super(FissionXS, self).__init__('fission', domain, domain_type, groups, by_nuclide, name) - self._rxn_type = 'fission' - - @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. - - This method constructs two tracklength tallies to compute the 'flux' - and 'fission' reaction rates in the spatial domain and energy - groups of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', 'fission'] - estimator = 'tracklength' - keys = scores - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - filters = [[energy_filter], [energy_filter]] - - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies - - @property - def rxn_rate_tally(self): - if self._rxn_rate_tally is None: - self._rxn_rate_tally = self.tallies['fission'] - self._rxn_rate_tally.sparse = self.sparse - return self._rxn_rate_tally -class NuFissionXS(MGXS): +class NuFissionXS(FissionXSBase): """A fission production multi-group cross section.""" def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): - super(NuFissionXS, self).__init__(domain, domain_type, + super(NuFissionXS, self).__init__('nu-fission', domain, domain_type, groups, by_nuclide, name) - self._rxn_type = 'nu-fission' - @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. - - This method constructs two tracklength tallies to compute the 'flux' - and 'nu-fission' reaction rates in the spatial domain and energy - groups of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', 'nu-fission'] - estimator = 'tracklength' - keys = scores - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - filters = [[energy_filter], [energy_filter]] - - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies - - @property - def rxn_rate_tally(self): - if self._rxn_rate_tally is None: - self._rxn_rate_tally = self.tallies['nu-fission'] - self._rxn_rate_tally.sparse = self.sparse - return self._rxn_rate_tally +class KappaFissionXS(FissionXSBase): + """A recoverable fission energy production rate multi-group cross section.""" + def __init__(self, domain=None, domain_type=None, + groups=None, by_nuclide=False, name=''): + super(KappaFissionXS, self).__init__('kappa-fission', domain, domain_type, + groups, by_nuclide, name) class ScatterXS(MGXS): """A scatter multi-group cross section.""" From a4ed73fc113619269c21db6ead8b5845fde1d712 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 23 Feb 2016 10:48:47 -0600 Subject: [PATCH 332/650] Update Jupyter notebooks based on Tally property changes --- .../pythonapi/examples/mgxs-part-iii.ipynb | 5 +- .../examples/pandas-dataframes.ipynb | 22 +- .../pythonapi/examples/post-processing.ipynb | 5 +- .../pythonapi/examples/tally-arithmetic.ipynb | 455 +++++++++--------- 4 files changed, 237 insertions(+), 250 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index dcb496160e..c3f19aa226 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -689,9 +689,8 @@ "\n", "# Instantiate the Tally\n", "tally = openmc.Tally(name='mesh tally')\n", - "tally.add_filter(mesh_filter)\n", - "tally.add_score('fission')\n", - "tally.add_score('nu-fission')\n", + "tally.filters = [mesh_filter]\n", + "tally.scores = ['fission', 'nu-fission']\n", "\n", "# Add mesh and Tally to TalliesFile\n", "tallies_file.add_mesh(mesh)\n", diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index ac5d4e4109..85f64ff6fa 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -453,10 +453,8 @@ "\n", "# Instantiate the Tally\n", "tally = openmc.Tally(name='mesh tally')\n", - "tally.add_filter(mesh_filter)\n", - "tally.add_filter(energy_filter)\n", - "tally.add_score('fission')\n", - "tally.add_score('nu-fission')\n", + "tally.filters = [mesh_filter, energy_filter]\n", + "tally.scores = ['fission', 'nu-fission']\n", "\n", "# Add mesh and Tally to TalliesFile\n", "tallies_file.add_mesh(mesh)\n", @@ -483,10 +481,9 @@ "\n", "# Instantiate the tally\n", "tally = openmc.Tally(name='cell tally')\n", - "tally.add_filter(cell_filter)\n", - "tally.add_score('scatter-y2')\n", - "tally.add_nuclide(u235)\n", - "tally.add_nuclide(u238)\n", + "tally.filters = [cell_filter]\n", + "tally.scores = ['scatter-y2']\n", + "tally.nuclides = [u235, u238]\n", "\n", "# Add mesh and tally to TalliesFile\n", "tallies_file.add_tally(tally)" @@ -512,14 +509,13 @@ "\n", "# Instantiate tally Trigger for kicks\n", "trigger = openmc.Trigger(trigger_type='std_dev', threshold=5e-5)\n", - "trigger.add_score('absorption')\n", + "trigger.scores = ['absorption']\n", "\n", "# Instantiate the Tally\n", "tally = openmc.Tally(name='distribcell tally')\n", - "tally.add_filter(distribcell_filter)\n", - "tally.add_score('absorption')\n", - "tally.add_score('scatter')\n", - "tally.add_trigger(trigger)\n", + "tally.filters = [distribcell_filter]\n", + "tally.scores = ['absorption', 'scatter']\n", + "tally.triggers = [trigger]\n", "\n", "# Add mesh and tally to TalliesFile\n", "tallies_file.add_tally(tally)" diff --git a/docs/source/pythonapi/examples/post-processing.ipynb b/docs/source/pythonapi/examples/post-processing.ipynb index 7fbca68644..6526f03077 100644 --- a/docs/source/pythonapi/examples/post-processing.ipynb +++ b/docs/source/pythonapi/examples/post-processing.ipynb @@ -408,9 +408,8 @@ "\n", "# Create mesh tally to score flux and fission rate\n", "tally = openmc.Tally(name='flux')\n", - "tally.add_filter(mesh_filter)\n", - "tally.add_score('flux')\n", - "tally.add_score('fission')\n", + "tally.filters = [mesh_filter]\n", + "tally.scores = ['flux', 'fission']\n", "tallies_file.add_tally(tally)" ] }, diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index 3a61b09790..d1325e4878 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -418,29 +418,25 @@ "\n", "# Instantiate flux Tally in moderator and fuel\n", "tally = openmc.Tally(name='flux')\n", - "tally.add_filter(openmc.Filter(type='cell', bins=[fuel_cell.id, moderator_cell.id]))\n", - "tally.add_filter(energy_filter)\n", - "tally.add_score('flux')\n", + "tally.filters = [openmc.Filter(type='cell', bins=[fuel_cell.id, moderator_cell.id]),\n", + " energy_filter]\n", + "tally.scores = ['flux']\n", "tallies_file.add_tally(tally)\n", "\n", "# Instantiate reaction rate Tally in fuel\n", "tally = openmc.Tally(name='fuel rxn rates')\n", - "tally.add_filter(openmc.Filter(type='cell', bins=[fuel_cell.id]))\n", - "tally.add_filter(energy_filter)\n", - "tally.add_score('nu-fission')\n", - "tally.add_score('scatter')\n", - "tally.add_nuclide(u238)\n", - "tally.add_nuclide(u235)\n", + "tally.filters = [openmc.Filter(type='cell', bins=[fuel_cell.id]),\n", + " energy_filter]\n", + "tally.scores = ['nu-fission', 'scatter']\n", + "tally.nuclides = [u238, u235]\n", "tallies_file.add_tally(tally)\n", "\n", "# Instantiate reaction rate Tally in moderator\n", "tally = openmc.Tally(name='moderator rxn rates')\n", - "tally.add_filter(openmc.Filter(type='cell', bins=[moderator_cell.id]))\n", - "tally.add_filter(energy_filter)\n", - "tally.add_score('absorption')\n", - "tally.add_score('total')\n", - "tally.add_nuclide(o16)\n", - "tally.add_nuclide(h1)\n", + "tally.filters = [openmc.Filter(type='cell', bins=[moderator_cell.id])]\n", + "tally.filters.append(energy_filter)\n", + "tally.scores = ['absorption', 'total']\n", + "tally.nuclides = [o16, h1]\n", "tallies_file.add_tally(tally)" ] }, @@ -455,8 +451,8 @@ "# K-Eigenvalue (infinity) tallies\n", "fiss_rate = openmc.Tally(name='fiss. rate')\n", "abs_rate = openmc.Tally(name='abs. rate')\n", - "fiss_rate.add_score('nu-fission')\n", - "abs_rate.add_score('absorption')\n", + "fiss_rate.scores = ['nu-fission']\n", + "abs_rate.scores = ['absorption']\n", "tallies_file.add_tally(fiss_rate)\n", "tallies_file.add_tally(abs_rate)" ] @@ -471,8 +467,8 @@ "source": [ "# Resonance Escape Probability tallies\n", "therm_abs_rate = openmc.Tally(name='therm. abs. rate')\n", - "therm_abs_rate.add_score('absorption')\n", - "therm_abs_rate.add_filter(openmc.Filter(type='energy', bins=[0., 0.625e-6]))\n", + "therm_abs_rate.scores = ['absorption']\n", + "therm_abs_rate.filters = [openmc.Filter(type='energy', bins=[0., 0.625e-6])]\n", "tallies_file.add_tally(therm_abs_rate)" ] }, @@ -486,9 +482,9 @@ "source": [ "# Thermal Flux Utilization tallies\n", "fuel_therm_abs_rate = openmc.Tally(name='fuel therm. abs. rate')\n", - "fuel_therm_abs_rate.add_score('absorption')\n", - "fuel_therm_abs_rate.add_filter(openmc.Filter(type='energy', bins=[0., 0.625e-6]))\n", - "fuel_therm_abs_rate.add_filter(openmc.Filter(type='cell', bins=[fuel_cell.id]))\n", + "fuel_therm_abs_rate.scores = ['absorption']\n", + "fuel_therm_abs_rate.filters = [openmc.Filter(type='energy', bins=[0., 0.625e-6]),\n", + " openmc.Filter(type='cell', bins=[fuel_cell.id])]\n", "tallies_file.add_tally(fuel_therm_abs_rate)" ] }, @@ -502,8 +498,8 @@ "source": [ "# Fast Fission Factor tallies\n", "therm_fiss_rate = openmc.Tally(name='therm. fiss. rate')\n", - "therm_fiss_rate.add_score('nu-fission')\n", - "therm_fiss_rate.add_filter(openmc.Filter(type='energy', bins=[0., 0.625e-6]))\n", + "therm_fiss_rate.scores = ['nu-fission']\n", + "therm_fiss_rate.filters = [openmc.Filter(type='energy', bins=[0., 0.625e-6])]\n", "tallies_file.add_tally(therm_fiss_rate)" ] }, @@ -520,12 +516,10 @@ "\n", "# Instantiate flux Tally in moderator and fuel\n", "tally = openmc.Tally(name='need-to-slice')\n", - "tally.add_filter(openmc.Filter(type='cell', bins=[fuel_cell.id, moderator_cell.id]))\n", - "tally.add_filter(energy_filter)\n", - "tally.add_score('nu-fission')\n", - "tally.add_score('scatter')\n", - "tally.add_nuclide(h1)\n", - "tally.add_nuclide(u238)\n", + "tally.filters = [openmc.Filter(type='cell', bins=[fuel_cell.id, moderator_cell.id]),\n", + " energy_filter]\n", + "tally.scores = ['nu-fission', 'scatter']\n", + "tally.nuclides = [h1, u238]\n", "tallies_file.add_tally(tally)" ] }, @@ -533,7 +527,7 @@ "cell_type": "code", "execution_count": 22, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ @@ -576,9 +570,8 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 34381b40a9445a727e360873aaa6ef892af1cb6a\n", - " Date/Time: 2016-02-07 16:05:17\n", - " MPI Processes: 1\n", + " Git SHA1: b9efc990c7eb58f4a41524d59ae73396c9929436\n", + " Date/Time: 2016-02-23 10:52:44\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -634,20 +627,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.4700E-01 seconds\n", - " Reading cross sections = 9.1000E-02 seconds\n", - " Total time in simulation = 7.3920E+00 seconds\n", - " Time in transport only = 7.3820E+00 seconds\n", - " Time in inactive batches = 1.0930E+00 seconds\n", - " Time in active batches = 6.2990E+00 seconds\n", - " Time synchronizing fission bank = 2.0000E-03 seconds\n", - " Sampling source sites = 1.0000E-03 seconds\n", - " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Total time for initialization = 8.4700E-01 seconds\n", + " Reading cross sections = 5.8300E-01 seconds\n", + " Total time in simulation = 1.6037E+01 seconds\n", + " Time in transport only = 1.6026E+01 seconds\n", + " Time in inactive batches = 2.3070E+00 seconds\n", + " Time in active batches = 1.3730E+01 seconds\n", + " Time synchronizing fission bank = 5.0000E-03 seconds\n", + " Sampling source sites = 4.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 2.0000E-03 seconds\n", - " Total time elapsed = 7.7510E+00 seconds\n", - " Calculation Rate (inactive) = 11436.4 neutrons/second\n", - " Calculation Rate (active) = 5953.33 neutrons/second\n", + " Total time for finalization = 3.0000E-03 seconds\n", + " Total time elapsed = 1.6899E+01 seconds\n", + " Calculation Rate (inactive) = 5418.29 neutrons/second\n", + " Calculation Rate (active) = 2731.25 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -759,10 +752,10 @@ " \n", " \n", " 0\n", - " total\n", - " (nu-fission / absorption)\n", - " 1.040166\n", - " 0.009069\n", + " total\n", + " (nu-fission / absorption)\n", + " 1.040166\n", + " 0.009069\n", " \n", " \n", "\n", @@ -821,12 +814,12 @@ " \n", " \n", " 0\n", - " 0\n", - " 0.000001\n", - " total\n", - " absorption\n", - " 0.694707\n", - " 0.006699\n", + " 0\n", + " 0.000001\n", + " total\n", + " absorption\n", + " 0.694707\n", + " 0.006699\n", " \n", " \n", "\n", @@ -883,12 +876,12 @@ " \n", " \n", " 0\n", - " 0\n", - " 0.000001\n", - " total\n", - " nu-fission\n", - " 1.201216\n", - " 0.012288\n", + " 0\n", + " 0.000001\n", + " total\n", + " nu-fission\n", + " 1.201216\n", + " 0.012288\n", " \n", " \n", "\n", @@ -947,13 +940,13 @@ " \n", " \n", " 0\n", - " 0\n", - " 0.000001\n", - " 10000\n", - " total\n", - " absorption\n", - " 0.74925\n", - " 0.008257\n", + " 0\n", + " 0.000001\n", + " 10000\n", + " total\n", + " absorption\n", + " 0.74925\n", + " 0.008257\n", " \n", " \n", "\n", @@ -1013,13 +1006,13 @@ " \n", " \n", " 0\n", - " 0\n", - " 0.000001\n", - " 10000\n", - " total\n", - " (nu-fission / absorption)\n", - " 1.663616\n", - " 0.018624\n", + " 0\n", + " 0.000001\n", + " 10000\n", + " total\n", + " (nu-fission / absorption)\n", + " 1.663616\n", + " 0.018624\n", " \n", " \n", "\n", @@ -1078,13 +1071,13 @@ " \n", " \n", " 0\n", - " 0\n", - " 0.000001\n", - " 10000\n", - " total\n", - " (((absorption * nu-fission) * absorption) * (n...\n", - " 1.040166\n", - " 0.021928\n", + " 0\n", + " 0.000001\n", + " 10000\n", + " total\n", + " (((absorption * nu-fission) * absorption) * (n...\n", + " 1.040166\n", + " 0.021928\n", " \n", " \n", "\n", @@ -1160,83 +1153,83 @@ " \n", " \n", " 0\n", - " 10000\n", - " 0.000000\n", - " 0.000001\n", - " (U-238 / total)\n", - " (nu-fission / flux)\n", - " 0.000001\n", - " 7.377419e-09\n", + " 10000\n", + " 0.000000\n", + " 0.000001\n", + " (U-238 / total)\n", + " (nu-fission / flux)\n", + " 0.000001\n", + " 7.377419e-09\n", " \n", " \n", " 1\n", - " 10000\n", - " 0.000000\n", - " 0.000001\n", - " (U-238 / total)\n", - " (scatter / flux)\n", - " 0.209989\n", - " 2.303838e-03\n", + " 10000\n", + " 0.000000\n", + " 0.000001\n", + " (U-238 / total)\n", + " (scatter / flux)\n", + " 0.209989\n", + " 2.303838e-03\n", " \n", " \n", " 2\n", - " 10000\n", - " 0.000000\n", - " 0.000001\n", - " (U-235 / total)\n", - " (nu-fission / flux)\n", - " 0.356420\n", - " 3.951669e-03\n", + " 10000\n", + " 0.000000\n", + " 0.000001\n", + " (U-235 / total)\n", + " (nu-fission / flux)\n", + " 0.356420\n", + " 3.951669e-03\n", " \n", " \n", " 3\n", - " 10000\n", - " 0.000000\n", - " 0.000001\n", - " (U-235 / total)\n", - " (scatter / flux)\n", - " 0.005555\n", - " 6.101004e-05\n", + " 10000\n", + " 0.000000\n", + " 0.000001\n", + " (U-235 / total)\n", + " (scatter / flux)\n", + " 0.005555\n", + " 6.101004e-05\n", " \n", " \n", " 4\n", - " 10000\n", - " 0.000001\n", - " 20.000000\n", - " (U-238 / total)\n", - " (nu-fission / flux)\n", - " 0.007155\n", - " 8.053460e-05\n", + " 10000\n", + " 0.000001\n", + " 20.000000\n", + " (U-238 / total)\n", + " (nu-fission / flux)\n", + " 0.007155\n", + " 8.053460e-05\n", " \n", " \n", " 5\n", - " 10000\n", - " 0.000001\n", - " 20.000000\n", - " (U-238 / total)\n", - " (scatter / flux)\n", - " 0.227770\n", - " 1.079289e-03\n", + " 10000\n", + " 0.000001\n", + " 20.000000\n", + " (U-238 / total)\n", + " (scatter / flux)\n", + " 0.227770\n", + " 1.079289e-03\n", " \n", " \n", " 6\n", - " 10000\n", - " 0.000001\n", - " 20.000000\n", - " (U-235 / total)\n", - " (nu-fission / flux)\n", - " 0.008067\n", - " 5.254797e-05\n", + " 10000\n", + " 0.000001\n", + " 20.000000\n", + " (U-235 / total)\n", + " (nu-fission / flux)\n", + " 0.008067\n", + " 5.254797e-05\n", " \n", " \n", " 7\n", - " 10000\n", - " 0.000001\n", - " 20.000000\n", - " (U-235 / total)\n", - " (scatter / flux)\n", - " 0.003367\n", - " 1.647058e-05\n", + " 10000\n", + " 0.000001\n", + " 20.000000\n", + " (U-235 / total)\n", + " (scatter / flux)\n", + " 0.003367\n", + " 1.647058e-05\n", " \n", " \n", "\n", @@ -1395,43 +1388,43 @@ " \n", " \n", " 0\n", - " 10000\n", - " 0.000000\n", - " 0.000001\n", - " U-238\n", - " nu-fission\n", - " 0.000002\n", - " 1.283958e-08\n", + " 10000\n", + " 0.000000\n", + " 0.000001\n", + " U-238\n", + " nu-fission\n", + " 0.000002\n", + " 1.283958e-08\n", " \n", " \n", " 1\n", - " 10000\n", - " 0.000000\n", - " 0.000001\n", - " U-235\n", - " nu-fission\n", - " 0.868553\n", - " 6.880390e-03\n", + " 10000\n", + " 0.000000\n", + " 0.000001\n", + " U-235\n", + " nu-fission\n", + " 0.868553\n", + " 6.880390e-03\n", " \n", " \n", " 2\n", - " 10000\n", - " 0.000001\n", - " 20.000000\n", - " U-238\n", - " nu-fission\n", - " 0.082149\n", - " 8.837250e-04\n", + " 10000\n", + " 0.000001\n", + " 20.000000\n", + " U-238\n", + " nu-fission\n", + " 0.082149\n", + " 8.837250e-04\n", " \n", " \n", " 3\n", - " 10000\n", - " 0.000001\n", - " 20.000000\n", - " U-235\n", - " nu-fission\n", - " 0.092618\n", - " 5.195308e-04\n", + " 10000\n", + " 0.000001\n", + " 20.000000\n", + " U-235\n", + " nu-fission\n", + " 0.092618\n", + " 5.195308e-04\n", " \n", " \n", "\n", @@ -1489,93 +1482,93 @@ " \n", " \n", " 0\n", - " 10002\n", - " 1.000000e-08\n", - " 0.000000\n", - " H-1\n", - " scatter\n", - " 4.619398\n", - " 0.040124\n", + " 10002\n", + " 1.000000e-08\n", + " 0.000000\n", + " H-1\n", + " scatter\n", + " 4.619398\n", + " 0.040124\n", " \n", " \n", " 1\n", - " 10002\n", - " 1.080060e-07\n", - " 0.000001\n", - " H-1\n", - " scatter\n", - " 2.030757\n", - " 0.011239\n", + " 10002\n", + " 1.080060e-07\n", + " 0.000001\n", + " H-1\n", + " scatter\n", + " 2.030757\n", + " 0.011239\n", " \n", " \n", " 2\n", - " 10002\n", - " 1.166529e-06\n", - " 0.000013\n", - " H-1\n", - " scatter\n", - " 1.658488\n", - " 0.009777\n", + " 10002\n", + " 1.166529e-06\n", + " 0.000013\n", + " H-1\n", + " scatter\n", + " 1.658488\n", + " 0.009777\n", " \n", " \n", " 3\n", - " 10002\n", - " 1.259921e-05\n", - " 0.000136\n", - " H-1\n", - " scatter\n", - " 1.853002\n", - " 0.007378\n", + " 10002\n", + " 1.259921e-05\n", + " 0.000136\n", + " H-1\n", + " scatter\n", + " 1.853002\n", + " 0.007378\n", " \n", " \n", " 4\n", - " 10002\n", - " 1.360790e-04\n", - " 0.001470\n", - " H-1\n", - " scatter\n", - " 2.050773\n", - " 0.012484\n", + " 10002\n", + " 1.360790e-04\n", + " 0.001470\n", + " H-1\n", + " scatter\n", + " 2.050773\n", + " 0.012484\n", " \n", " \n", " 5\n", - " 10002\n", - " 1.469734e-03\n", - " 0.015874\n", - " H-1\n", - " scatter\n", - " 2.131759\n", - " 0.007821\n", + " 10002\n", + " 1.469734e-03\n", + " 0.015874\n", + " H-1\n", + " scatter\n", + " 2.131759\n", + " 0.007821\n", " \n", " \n", " 6\n", - " 10002\n", - " 1.587401e-02\n", - " 0.171449\n", - " H-1\n", - " scatter\n", - " 2.213710\n", - " 0.015159\n", + " 10002\n", + " 1.587401e-02\n", + " 0.171449\n", + " H-1\n", + " scatter\n", + " 2.213710\n", + " 0.015159\n", " \n", " \n", " 7\n", - " 10002\n", - " 1.714488e-01\n", - " 1.851749\n", - " H-1\n", - " scatter\n", - " 2.011925\n", - " 0.009406\n", + " 10002\n", + " 1.714488e-01\n", + " 1.851749\n", + " H-1\n", + " scatter\n", + " 2.011925\n", + " 0.009406\n", " \n", " \n", " 8\n", - " 10002\n", - " 1.851749e+00\n", - " 20.000000\n", - " H-1\n", - " scatter\n", - " 0.371280\n", - " 0.003949\n", + " 10002\n", + " 1.851749e+00\n", + " 20.000000\n", + " H-1\n", + " scatter\n", + " 0.371280\n", + " 0.003949\n", " \n", " \n", "\n", From 2f3059930d15684c400893dad092d9d9e59c9870 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 23 Feb 2016 11:05:15 -0600 Subject: [PATCH 333/650] Add note about deprecation of add_ methods in documentation --- openmc/tallies.py | 16 ++++++++++++++++ openmc/universe.py | 4 ++++ 2 files changed, 20 insertions(+) diff --git a/openmc/tallies.py b/openmc/tallies.py index a808c11dc6..343062aa84 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -432,6 +432,10 @@ class Tally(object): def add_trigger(self, trigger): """Add a tally trigger to the tally + .. deprecated:: 0.8 + Use the Tally.triggers property directly, i.e., + Tally.triggers.append(...) + Parameters ---------- trigger : openmc.trigger.Trigger @@ -516,6 +520,10 @@ class Tally(object): def add_filter(self, new_filter): """Add a filter to the tally + .. deprecated:: 0.8 + Use the Tally.filters property directly, i.e., + Tally.filters.append(...) + Parameters ---------- new_filter : Filter, CrossFilter or AggregateFilter @@ -537,6 +545,10 @@ class Tally(object): def add_nuclide(self, nuclide): """Specify that scores for a particular nuclide should be accumulated + .. deprecated:: 0.8 + Use the Tally.nuclides property directly, i.e., + Tally.nuclides.append(...) + Parameters ---------- nuclide : str, Nuclide, CrossNuclide or AggregateNuclide @@ -558,6 +570,10 @@ class Tally(object): def add_score(self, score): """Specify a quantity to be scored + .. deprecated:: 0.8 + Use the Tally.scores property directly, i.e., + Tally.scores.append(...) + Parameters ---------- score : str, CrossScore or AggregateScore diff --git a/openmc/universe.py b/openmc/universe.py index 9a1effdde1..1729aa7e23 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -257,6 +257,10 @@ class Cell(object): """Add a half-space to the list of half-spaces whose intersection defines the cell. + .. deprecated:: 0.7.1 + Use the Cell.region property to directly specify a Region + expression. + Parameters ---------- surface : openmc.surface.Surface From da4de9c4df7216a776849dd581429a95f01e4a28 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Tue, 23 Feb 2016 20:43:47 -0500 Subject: [PATCH 334/650] Now check nu_fission data in mgxs_library python api when determining if dataset is fissionable or not. --- openmc/mgxs_library.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index b6dd9f09fe..06b369c68a 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -487,6 +487,8 @@ class XSdata(object): # check we have a numpy list check_type("nu_fission", nu_fission, np.ndarray, expected_iter_type=Real) self._nu_fission = np.copy(nu_fission) + if np.sum(self._nu_fission) > 0.0: + self._fissionable = True def _get_xsdata_xml(self): element = ET.Element("xsdata") From da6f5d98a8d1c26b1383e958e252c91bb985d87c Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 24 Feb 2016 07:11:09 -0600 Subject: [PATCH 335/650] Use common naming scheme for all abstract interfaces --- src/distribution_multivariate.F90 | 12 ++++++------ src/distribution_univariate.F90 | 6 +++--- src/energy_distribution.F90 | 6 +++--- src/geometry_header.F90 | 22 ++++++++++------------ src/input_xml.F90 | 22 ++++++++++++++-------- src/nuclide_header.F90 | 8 +++----- src/particle_header.F90 | 2 +- src/scattdata_header.F90 | 20 ++++++++++---------- src/secondary_header.F90 | 7 ++++--- src/surface_header.F90 | 18 +++++++++--------- src/tally.F90 | 15 +++++++-------- 11 files changed, 70 insertions(+), 68 deletions(-) diff --git a/src/distribution_multivariate.F90 b/src/distribution_multivariate.F90 index 694fac3013..68b246df84 100644 --- a/src/distribution_multivariate.F90 +++ b/src/distribution_multivariate.F90 @@ -16,15 +16,15 @@ module distribution_multivariate type, abstract :: UnitSphereDistribution real(8) :: reference_uvw(3) contains - procedure(iSample), deferred :: sample + procedure(unitsphere_distribution_sample_), deferred :: sample end type UnitSphereDistribution abstract interface - function iSample(this) result(uvw) + function unitsphere_distribution_sample_(this) result(uvw) import UnitSphereDistribution class(UnitSphereDistribution), intent(in) :: this real(8) :: uvw(3) - end function iSample + end function unitsphere_distribution_sample_ end interface !=============================================================================== @@ -58,15 +58,15 @@ module distribution_multivariate type, abstract :: SpatialDistribution contains - procedure(iSampleSpatial), deferred :: sample + procedure(spatial_distribution_sample_), deferred :: sample end type SpatialDistribution abstract interface - function iSampleSpatial(this) result(xyz) + function spatial_distribution_sample_(this) result(xyz) import SpatialDistribution class(SpatialDistribution), intent(in) :: this real(8) :: xyz(3) - end function iSampleSpatial + end function spatial_distribution_sample_ end interface type, extends(SpatialDistribution) :: CartesianIndependent diff --git a/src/distribution_univariate.F90 b/src/distribution_univariate.F90 index f3e4fdee2e..6c053e5942 100644 --- a/src/distribution_univariate.F90 +++ b/src/distribution_univariate.F90 @@ -16,7 +16,7 @@ module distribution_univariate type, abstract :: Distribution contains - procedure(iSample), deferred :: sample + procedure(distribution_sample_), deferred :: sample end type Distribution type DistributionContainer @@ -24,11 +24,11 @@ module distribution_univariate end type DistributionContainer abstract interface - function iSample(this) result(x) + function distribution_sample_(this) result(x) import Distribution class(Distribution), intent(in) :: this real(8) :: x - end function iSample + end function distribution_sample_ end interface !=============================================================================== diff --git a/src/energy_distribution.F90 b/src/energy_distribution.F90 index 2cfc1b1841..8b2cc10c9c 100644 --- a/src/energy_distribution.F90 +++ b/src/energy_distribution.F90 @@ -16,16 +16,16 @@ module energy_distribution type, abstract :: EnergyDistribution contains - procedure(iSampleEnergy), deferred :: sample + procedure(energy_distribution_sample_), deferred :: sample end type EnergyDistribution abstract interface - function iSampleEnergy(this, E_in) result(E_out) + function energy_distribution_sample_(this, E_in) result(E_out) import EnergyDistribution class(EnergyDistribution), intent(in) :: this real(8), intent(in) :: E_in real(8) :: E_out - end function iSampleEnergy + end function energy_distribution_sample_ end interface type :: EnergyDistributionContainer diff --git a/src/geometry_header.F90 b/src/geometry_header.F90 index 519b15bff4..1adda3ea34 100644 --- a/src/geometry_header.F90 +++ b/src/geometry_header.F90 @@ -31,12 +31,10 @@ module geometry_header integer :: outer ! universe to tile outside the lat logical :: is_3d ! Lattice has cells on z axis integer, allocatable :: offset(:,:,:,:) ! Distribcell offsets - - contains - - procedure(are_valid_indices_), deferred :: are_valid_indices - procedure(get_indices_), deferred :: get_indices - procedure(get_local_xyz_), deferred :: get_local_xyz + contains + procedure(lattice_are_valid_indices_), deferred :: are_valid_indices + procedure(lattice_get_indices_), deferred :: get_indices + procedure(lattice_get_local_xyz_), deferred :: get_local_xyz end type Lattice abstract interface @@ -45,33 +43,33 @@ module geometry_header ! ARE_VALID_INDICES returns .true. if the given lattice indices fit within the ! bounds of the lattice. Returns false otherwise. - function are_valid_indices_(this, i_xyz) result(is_valid) + function lattice_are_valid_indices_(this, i_xyz) result(is_valid) import Lattice class(Lattice), intent(in) :: this integer, intent(in) :: i_xyz(3) logical :: is_valid - end function are_valid_indices_ + end function lattice_are_valid_indices_ !=============================================================================== ! GET_INDICES returns the indices in a lattice for the given global xyz. - function get_indices_(this, global_xyz) result(i_xyz) + function lattice_get_indices_(this, global_xyz) result(i_xyz) import Lattice class(Lattice), intent(in) :: this real(8), intent(in) :: global_xyz(3) integer :: i_xyz(3) - end function get_indices_ + end function lattice_get_indices_ !=============================================================================== ! GET_LOCAL_XYZ returns the translated local version of the given global xyz. - function get_local_xyz_(this, global_xyz, i_xyz) result(local_xyz) + function lattice_get_local_xyz_(this, global_xyz, i_xyz) result(local_xyz) import Lattice class(Lattice), intent(in) :: this real(8), intent(in) :: global_xyz(3) integer, intent(in) :: i_xyz(3) real(8) :: local_xyz(3) - end function get_local_xyz_ + end function lattice_get_local_xyz_ end interface !=============================================================================== diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 9ef439bb04..03ef8dcbc4 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -131,15 +131,21 @@ contains if (run_CE) then call get_environment_variable("OPENMC_CROSS_SECTIONS", env_variable) if (len_trim(env_variable) == 0) then - call fatal_error("No cross_sections.xml file was specified in & - &settings.xml or in the OPENMC_CROSS_SECTIONS environment & - &variable. OpenMC needs such a file to identify where to & - &find ACE cross section libraries. Please consult the user's & - &guide at http://mit-crpg.github.io/openmc for information on & - &how to set up ACE cross section libraries.") - else - path_cross_sections = trim(env_variable) + call get_environment_variable("CROSS_SECTIONS", env_variable) + if (len_trim(env_variable) == 0) then + call fatal_error("No cross_sections.xml file was specified in & + &settings.xml or in the OPENMC_CROSS_SECTIONS environment & + &variable. OpenMC needs such a file to identify where to & + &find ACE cross section libraries. Please consult the user's & + &guide at http://mit-crpg.github.io/openmc for information on & + &how to set up ACE cross section libraries.") + else + call warning("The CROSS_SECTIONS environment variable is & + &deprecated. Please update your environment to use & + &OPENMC_CROSS_SECTIONS instead.") + end if end if + path_cross_sections = trim(env_variable) else call get_environment_variable("OPENMC_MG_CROSS_SECTIONS", env_variable) if (len_trim(env_variable) == 0) then diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 9bcce57a75..43fea77b65 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -33,17 +33,15 @@ module nuclide_header logical :: fissionable ! nuclide is fissionable? contains - procedure(print_nuclide_), deferred :: print ! Writes nuclide info + procedure(nuclide_print_), deferred :: print ! Writes nuclide info end type Nuclide abstract interface - - subroutine print_nuclide_(this, unit) + subroutine nuclide_print_(this, unit) import Nuclide class(Nuclide),intent(in) :: this integer, optional, intent(in) :: unit - end subroutine print_nuclide_ - + end subroutine nuclide_print_ end interface type, extends(Nuclide) :: NuclideCE diff --git a/src/particle_header.F90 b/src/particle_header.F90 index c1f02eca24..4ad4119b76 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -217,7 +217,7 @@ contains integer, intent(in) :: type logical, intent(in) :: run_CE - integer :: n + integer(8) :: n ! Check to make sure that the hard-limit on secondary particles is not ! exceeded. diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index b04115e570..f8fddbc6b3 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -20,22 +20,22 @@ module scattdata_header real(8), allocatable :: data(:,:,:) ! (Order/Nmu x Gout x Gin) contains - procedure(init_), deferred :: init ! Initializes ScattData - procedure(calc_f_), deferred :: calc_f ! Calculates f, given mu - procedure(sample_), deferred :: sample ! sample the scatter event + procedure(scattdata_init_), deferred :: init ! Initializes ScattData + procedure(scattdata_calc_f_), deferred :: calc_f ! Calculates f, given mu + procedure(scattdata_sample_), deferred :: sample ! sample the scatter event end type ScattData abstract interface - subroutine init_(this, order, energy, mult, coeffs) + subroutine scattdata_init_(this, order, energy, mult, coeffs) import ScattData class(ScattData), intent(inout) :: this ! Object to work on integer, intent(in) :: order ! Data Order real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use - end subroutine init_ + end subroutine scattdata_init_ - pure function calc_f_(this, gin, gout, mu) result(f) + pure function scattdata_calc_f_(this, gin, gout, mu) result(f) import ScattData class(ScattData), intent(in) :: this ! The ScattData to evaluate integer, intent(in) :: gin ! Incoming Energy Group @@ -43,16 +43,16 @@ module scattdata_header real(8), intent(in) :: mu ! Angle of interest real(8) :: f ! Return value of f(mu) - end function calc_f_ + end function scattdata_calc_f_ - subroutine sample_(this, gin, gout, mu, wgt) + subroutine scattdata_sample_(this, gin, gout, mu, wgt) import ScattData class(ScattData), intent(in) :: this ! Scattering Object to Use integer, intent(in) :: gin ! Incoming neutron group integer, intent(out) :: gout ! Sampled outgoin group real(8), intent(out) :: mu ! Sampled change in angle real(8), intent(inout) :: wgt ! Particle weight - end subroutine sample_ + end subroutine scattdata_sample_ end interface type, extends(ScattData) :: ScattDataLegendre @@ -486,4 +486,4 @@ contains end subroutine scattdatatabular_sample -end module scattdata_header \ No newline at end of file +end module scattdata_header diff --git a/src/secondary_header.F90 b/src/secondary_header.F90 index 7449a5793b..d9a18b6b15 100644 --- a/src/secondary_header.F90 +++ b/src/secondary_header.F90 @@ -14,17 +14,17 @@ module secondary_header type, abstract :: AngleEnergy contains - procedure(iSampleAngleEnergy), deferred :: sample + procedure(angleenergy_sample_), deferred :: sample end type AngleEnergy abstract interface - subroutine iSampleAngleEnergy(this, E_in, E_out, mu) + subroutine angleenergy_sample_(this, E_in, E_out, mu) import AngleEnergy class(AngleEnergy), intent(in) :: this real(8), intent(in) :: E_in real(8), intent(out) :: E_out real(8), intent(out) :: mu - end subroutine iSampleAngleEnergy + end subroutine angleenergy_sample_ end interface type :: AngleEnergyContainer @@ -54,6 +54,7 @@ contains real(8), intent(out) :: E_out ! sampled outgoing energy real(8), intent(out) :: mu ! sampled scattering cosine + integer :: i ! loop counter integer :: n ! number of angle-energy distributions real(8) :: prob ! cumulative probability real(8) :: c ! sampled cumulative probability diff --git a/src/surface_header.F90 b/src/surface_header.F90 index 76562f4937..4686552176 100644 --- a/src/surface_header.F90 +++ b/src/surface_header.F90 @@ -19,34 +19,34 @@ module surface_header contains procedure :: sense procedure :: reflect - procedure(iEvaluate), deferred :: evaluate - procedure(iDistance), deferred :: distance - procedure(iNormal), deferred :: normal + procedure(surface_evaluate_), deferred :: evaluate + procedure(surface_distance_), deferred :: distance + procedure(surface_normal_), deferred :: normal end type Surface abstract interface - pure function iEvaluate(this, xyz) result(f) + pure function surface_evaluate_(this, xyz) result(f) import Surface class(Surface), intent(in) :: this real(8), intent(in) :: xyz(3) real(8) :: f - end function iEvaluate + end function surface_evaluate_ - pure function iDistance(this, xyz, uvw, coincident) result(d) + pure function surface_distance_(this, xyz, uvw, coincident) result(d) import Surface class(Surface), intent(in) :: this real(8), intent(in) :: xyz(3) real(8), intent(in) :: uvw(3) logical, intent(in) :: coincident real(8) :: d - end function iDistance + end function surface_distance_ - pure function iNormal(this, xyz) result(uvw) + pure function surface_normal_(this, xyz) result(uvw) import Surface class(Surface), intent(in) :: this real(8), intent(in) :: xyz(3) real(8) :: uvw(3) - end function iNormal + end function surface_normal_ end interface !=============================================================================== diff --git a/src/tally.F90 b/src/tally.F90 index f265bdb274..5a54d9846e 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -28,12 +28,12 @@ module tally !$omp threadprivate(position) - procedure(score_general_intfc), pointer :: score_general => null() - procedure(get_scoring_bins_intfc), pointer :: get_scoring_bins => null() + procedure(score_general_), pointer :: score_general => null() + procedure(get_scoring_bins_), pointer :: get_scoring_bins => null() abstract interface - subroutine score_general_intfc(p, t, start_index, filter_index, i_nuclide, & - atom_density, flux) + subroutine score_general_(p, t, start_index, filter_index, i_nuclide, & + atom_density, flux) import Particle import TallyObject type(Particle), intent(in) :: p @@ -43,15 +43,14 @@ module tally integer, intent(in) :: filter_index ! for % results real(8), intent(in) :: flux ! flux estimate real(8), intent(in) :: atom_density ! atom/b-cm - end subroutine score_general_intfc + end subroutine score_general_ - subroutine get_scoring_bins_intfc(p, i_tally, found_bin) + subroutine get_scoring_bins_(p, i_tally, found_bin) import Particle type(Particle), intent(in) :: p integer, intent(in) :: i_tally logical, intent(out) :: found_bin - end subroutine get_scoring_bins_intfc - + end subroutine get_scoring_bins_ end interface contains From f9146abeea0610a4c8cddea53ac031eeabd79d47 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 26 Feb 2016 04:57:12 -0500 Subject: [PATCH 336/650] Got the low hanging fruit for implementing MG theory in the theory manual. The majority of work will be in the physics.rst and cross_sections.rst files which I have not attacked yet. I also noticed that the theory wasnt updated for the new secondary particle bank (Ive only seen one place where it needed to be mentioned so far) and for the polar/azimuthal/mu filters. Both have been incorporated. --- docs/source/methods/introduction.rst | 34 ++++++++++++++++++++-------- docs/source/methods/tallies.rst | 18 ++++++++------- docs/source/usersguide/beginners.rst | 2 +- 3 files changed, 36 insertions(+), 18 deletions(-) diff --git a/docs/source/methods/introduction.rst b/docs/source/methods/introduction.rst index 508ac99193..7e4f94633f 100644 --- a/docs/source/methods/introduction.rst +++ b/docs/source/methods/introduction.rst @@ -8,7 +8,7 @@ The physical process by which a population of particles evolves over time is governed by a number of `probability distributions`_. For instance, given a particle traveling through some material, there is a probability distribution for the distance it will travel until its next collision (an exponential -distribution). Then, when it collides with a nucleus, there is associated +distribution). Then, when it collides with a nucleus, there is an associated probability of undergoing each possible reaction with that nucleus. While the behavior of any single particle is unpredictable, the average behavior of a large population of particles originating from the same source is well defined. @@ -45,10 +45,15 @@ following steps: - Initialize the pseudorandom number generator. - - Read ACE format cross sections specified in the problem. + - Read the contiuous-energy or multi-group cross section data specified in + the problem. - If using a special energy grid treatment such as a union energy grid or - lethargy bins, that must be initialized as well. + lethargy bins, that must be initialized as well in a continuous-energy + problem. + + - In a multi-group problem, individual nuclide cross section information is + combined to produce material-specific cross section data. - In a fixed source problem, source sites are sampled from the specified source. In an eigenvalue problem, source sites are sampled from some initial @@ -95,6 +100,10 @@ proceed. The life of a single particle will proceed as follows: P(i) = \frac{\Sigma_{t,i}}{\Sigma_t}. + Note that the above selection of collided nuclide only applies to + continuous-energy simulations as multi-group simulations use nuclide + data which has already been combined in to material-specific data. + 8. Once the specific nuclide is sampled, the random samples a reaction for that nuclide based on the microscopic cross sections. If the microscopic cross section for some reaction :math:`x` is :math:`\sigma_x` and the total @@ -105,13 +114,20 @@ proceed. The life of a single particle will proceed as follows: P(x) = \frac{\sigma_x}{\sigma_t}. + Since multi-group simulations use material-specific data, the above is + performed with those material multi-group cross sections (i.e., + macroscopic cross sections for the material) instead of microscopic + cross sections for the nuclide). + 9. If the sampled reaction is elastic or inelastic scattering, the outgoing - energy and angle is sampled from the appropriate distribution. Reactions - of type :math:`(n,xn)` are treated as scattering and the weight of the - particle is increased by the multiplicity of the reaction. The particle - then continues from step 3. If the reaction is absorption or fission, the - particle dies and if necessary, fission sites are created and stored in the - fission bank. + energy and angle is sampled from the appropriate distribution. In + continuous-energy simulation, reactions of type :math:`(n,xn)` are treated + as scattering and any additional particles which may be created are added + to a secondary particle bank to be tracked later. In a multi-group + simulation, this secondary bank is ont used but the particle weight is + increased accordingly. The original particle then continues from step 3. + If the reaction is absorption or fission, the particle dies and if + necessary, fission sites are created and stored in the fission bank. After all particles have been simulated, there are a few final tasks that must be performed before the run is finished. This include the following: diff --git a/docs/source/methods/tallies.rst b/docs/source/methods/tallies.rst index 65a0989ac7..60a2b9a632 100644 --- a/docs/source/methods/tallies.rst +++ b/docs/source/methods/tallies.rst @@ -32,8 +32,9 @@ OpenMC: flux, total reaction rate, scattering reaction rate, neutron production from scattering, higher scattering moments, :math:`(n,xn)` reaction rates, absorption reaction rate, fission reaction rate, neutron production rate from fission, and surface currents. The following variables can be used as filters: -universe, material, cell, birth cell, surface, mesh, pre-collision energy, and -post-collision energy. +universe, material, cell, birth cell, surface, mesh, pre-collision energy, +post-collision energy, polar angle, azimuthal angle, and the cosine of the +change-in-angle due to a scattering event. With filters for pre- and post-collision energy and scoring functions for scattering and fission production, it is possible to use OpenMC to generate @@ -55,9 +56,9 @@ be scored to for each value of the filter variable. If a particle is in cell :math:`n`, the mapping would identify what tally/bin combinations specify cell :math:`n` for the cell filter variable. In this manner, it is not necessary to check the phase space variables against each tally. Note that this technique -only applies to discrete filter variables and cannot be applied to energy -bins. For energy filters, it is necessary to perform a binary search on the -specified energy grid. +only applies to discrete filter variables and cannot be applied to energy, +angle, or change-in-angle bins. For these filters, it is necessary to perform +a binary search on the specified energy grid. ----------------------------------------- Volume-Integrated Flux and Reaction Rates @@ -196,8 +197,9 @@ One important fact to take into consideration is that the use of a track-length estimator precludes us from using any filter that requires knowledge of the particle's state following a collision because by definition, it will not have had a collision at every event. Thus, for tallies with outgoing-energy filters -(which require the post-collision energy) or for tallies of scattering moments -(which require the scattering cosine), we must use an analog estimator. +(which require the post-collision energy), scattering change-in-angle filters, +or for tallies of scattering moments (which require the scattering cosine of +the change-in-angle), we must use an analog estimator. .. TODO: Add description of surface current tallies @@ -430,7 +432,7 @@ analytically. For one degree of freedom, the t-distribution becomes a standard .. math:: :label: cauchy-cdf - c(x) = \frac{1}{\pi} \arctan x + \frac{1}{2}. + c(x) = \frac{1}{\pi} \arctan x + \frac{1}{2}. Thus, inverting the cumulative distribution function, we find the :math:`x` percentile of the standard Cauchy distribution to be diff --git a/docs/source/usersguide/beginners.rst b/docs/source/usersguide/beginners.rst index 9ecffe3f67..2487e9c416 100644 --- a/docs/source/usersguide/beginners.rst +++ b/docs/source/usersguide/beginners.rst @@ -65,7 +65,7 @@ Now let's look at the pros and cons of Monte Carlo methods: - **Pro**: Running simulations in parallel is conceptually very simple. -- **Con**: Because they related on repeated random sampling, they are +- **Con**: Because they rely on repeated random sampling, they are computationally very expensive. - **Con**: A simulation doesn't automatically give you the global solution From d66556a6375add6c855bae66af6f8a170482fe36 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 26 Feb 2016 19:44:03 -0500 Subject: [PATCH 337/650] Addressed comments by @samuelshaner --- openmc/arithmetic.py | 5 ----- openmc/filter.py | 2 ++ openmc/geometry.py | 10 +++++----- openmc/mgxs/mgxs.py | 30 ++++++++++++++++++------------ openmc/tallies.py | 4 ++-- 5 files changed, 27 insertions(+), 24 deletions(-) diff --git a/openmc/arithmetic.py b/openmc/arithmetic.py index 521d33e9f0..5271e49a61 100644 --- a/openmc/arithmetic.py +++ b/openmc/arithmetic.py @@ -927,11 +927,6 @@ class AggregateFilter(object): if bin in other.bins: return False - # None of the bins in the other filter should match in this filter - for bin in other.bins: - if bin in self.bins: - return False - # If all conditional checks passed then filters are mergeable return True diff --git a/openmc/filter.py b/openmc/filter.py index 0c45d67d9a..67e15605ba 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -86,6 +86,8 @@ class Filter(object): else: return False else: + # Compare largest/smallest energy bin edges in energy filters + # This logic is used when merging tallies with energy filters if 'energy' in self.type and 'energy' in other.type: return self.bins[0] >= other.bins[-1] else: diff --git a/openmc/geometry.py b/openmc/geometry.py index 807dcf7c66..ab3af872f6 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -253,7 +253,7 @@ class Geometry(object): """ - if case_sensitive: + if not case_sensitive: name = name.lower() all_materials = self.get_all_materials() @@ -293,7 +293,7 @@ class Geometry(object): """ - if case_sensitive: + if not case_sensitive: name = name.lower() all_cells = self.get_all_cells() @@ -333,7 +333,7 @@ class Geometry(object): """ - if case_sensitive: + if not case_sensitive: name = name.lower() all_cells = self.get_all_cells() @@ -373,7 +373,7 @@ class Geometry(object): """ - if case_sensitive: + if not case_sensitive: name = name.lower() all_universes = self.get_all_universes() @@ -413,7 +413,7 @@ class Geometry(object): """ - if case_sensitive: + if not case_sensitive: name = name.lower() all_lattices = self.get_all_lattices() diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 022acef5f4..ce02a4393d 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -241,8 +241,7 @@ class MGXS(object): @property def num_subdomains(self): - tally = list(self.tallies.values())[0] - domain_filter = tally.find_filter(self.domain_type) + domain_filter = self.xs_tally.find_filter(self.domain_type) return domain_filter.num_bins @property @@ -877,14 +876,19 @@ class MGXS(object): # Clone this MGXS to initialize the subdomain-averaged version avg_xs = copy.deepcopy(self) - avg_xs._rxn_rate_tally = None - avg_xs._xs_tally = None - # Average each of the tallies across subdomains - for tally_type, tally in avg_xs.tallies.items(): - tally_avg = tally.average(filter_type=self.domain_type, - filter_bins=subdomains) - avg_xs.tallies[tally_type] = tally_avg + if self.derived: + avg_xs._rxn_rate_tally = avg_xs.rxn_rate_tally.average( + filter_type=self.domain_type, filter_bins=subdomains) + else: + avg_xs._rxn_rate_tally = None + avg_xs._xs_tally = None + + # Average each of the tallies across subdomains + for tally_type, tally in avg_xs.tallies.items(): + tally_avg = tally.average(filter_type=self.domain_type, + filter_bins=subdomains) + avg_xs.tallies[tally_type] = tally_avg avg_xs._domain_type = 'avg({0})'.format(self.domain_type) avg_xs.sparse = self.sparse @@ -1002,8 +1006,10 @@ class MGXS(object): def merge(self, other): """Merge another MGXS with this one - If results have been loaded from a statepoint, then MGXS are only - mergeable along one and only one of energy groups or nuclides. + MGXS are only mergeable if their energy groups and nuclides are either + identical or mutually exclusive. If results have been loaded from a + statepoint, then MGXS are only mergeable along one and only one of + energy groups or nuclides. Parameters ---------- @@ -1510,7 +1516,7 @@ class TotalXS(MGXS): @property def rxn_rate_tally(self): - if self._rxn_rate_tally is None: + if self._rxn_rate_tally is None : self._rxn_rate_tally = self.tallies['total'] self._rxn_rate_tally.sparse = self.sparse return self._rxn_rate_tally diff --git a/openmc/tallies.py b/openmc/tallies.py index 60200a2012..cba7ff9276 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -881,7 +881,7 @@ class Tally(object): # Differentiate Tally with a new auto-generated Tally ID merged_tally.id = None - # If the two tallies are equal, simpy return copy + # If the two tallies are equal, simply return copy if self == other: return merged_tally @@ -936,7 +936,7 @@ class Tally(object): # If results have not been read, then return tally for input generation if self._results_read is None: return merged_tally - #Otherwise, this is a derived tally which needs merged results arrays + # Otherwise, this is a derived tally which needs merged results arrays else: self._derived = True From 3c2a38fa4ec3a38c0527838aa2e628d966076438 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 26 Feb 2016 20:38:42 -0500 Subject: [PATCH 338/650] Revised reporting of AggregateNuclides and AggregateScores in Pandas DataFrames --- openmc/arithmetic.py | 16 ++++++++++++++++ openmc/tallies.py | 19 ++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/openmc/arithmetic.py b/openmc/arithmetic.py index 5271e49a61..e9ba378d52 100644 --- a/openmc/arithmetic.py +++ b/openmc/arithmetic.py @@ -562,6 +562,13 @@ class AggregateScore(object): def aggregate_op(self): return self._aggregate_op + @property + def name(self): + + # Append each score in the aggregate to the string + string = '(' + ', '.join(map(str, self.scores)) + ')' + return string + @scores.setter def scores(self, scores): cv.check_iterable_type('scores', scores, basestring) @@ -649,6 +656,15 @@ class AggregateNuclide(object): def aggregate_op(self): return self._aggregate_op + @property + def name(self): + + # Append each nuclide in the aggregate to the string + names = [nuclide.name if isinstance(nuclide, Nuclide) else str(nuclide) + for nuclide in self.nuclides] + string = '(' + ', '.join(map(str, names)) + ')' + return string + @nuclides.setter def nuclides(self, nuclides): cv.check_iterable_type('nuclides', nuclides, diff --git a/openmc/tallies.py b/openmc/tallies.py index cba7ff9276..fb66eb77f8 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1571,23 +1571,36 @@ class Tally(object): # Include DataFrame column for nuclides if user requested it if nuclides: nuclides = [] + column_name = 'nuclide' for nuclide in self.nuclides: - # Write Nuclide name if Summary info was linked with StatePoint if isinstance(nuclide, Nuclide): nuclides.append(nuclide.name) + elif isinstance(nuclide, AggregateNuclide): + nuclides.append(nuclide.name) + column_name = '{0}(nuclide)'.format(nuclide.aggregate_op) else: nuclides.append(nuclide) # Tile the nuclide bins into a DataFrame column nuclides = np.repeat(nuclides, len(self.scores)) tile_factor = data_size / len(nuclides) - df['nuclide'] = np.tile(nuclides, int(tile_factor)) + df[column_name] = np.tile(nuclides, int(tile_factor)) # Include column for scores if user requested it if scores: + scores = [] + column_name = 'score' + + for score in self.scores: + if isinstance(score, (basestring, CrossScore)): + scores.append(score) + elif isinstance(score, AggregateScore): + scores.append(score.name) + column_name = '{0}(score)'.format(score.aggregate_op) + tile_factor = data_size / len(self.scores) - df['score'] = np.tile(self.scores, int(tile_factor)) + df[column_name] = np.tile(scores, int(tile_factor)) # Append columns with mean, std. dev. for each tally bin df['mean'] = self.mean.ravel() From 08176672a22c112f15bf75841dbfca377352f361 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 26 Feb 2016 21:15:08 -0500 Subject: [PATCH 339/650] Fixed issue in MGXS.can_merge(...) method such that it now compares xs_tally and rxn_rate_tally attributes --- openmc/mgxs/mgxs.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index ce02a4393d..4b2ec5d3fb 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -992,13 +992,10 @@ class MGXS(object): return False elif 'distribcell' not in self.domain_type and self.domain != other.domain: return False - elif len(self.tallies) != len(other.tallies): + elif not self.xs_tally.can_merge(other.xs_tally): + return False + elif not self.rxn_rate_tally.can_merge(other.rxn_rate_tally): return False - - # See if each individual tally is mergeable - for tally_key in self.tallies: - if not self.tallies[tally_key].can_merge(other.tallies[tally_key]): - return False # If all conditionals pass then MGXS are mergeable return True From 910bd62b1f693664eeb00f8a6c885fe5e15c63dd Mon Sep 17 00:00:00 2001 From: jingang Date: Mon, 29 Feb 2016 15:11:28 -0500 Subject: [PATCH 340/650] A new, simpler LCG approach (by Sterling) to re-use random number for calculating URR cross sections Xi(URR) = skipping ahead 'ZZAAA'(zaid) times from the seed 'xs_seed' + 'ZZAAA' where 'xs_seed' a copy of normal tracking prn seed but updated until the particle undergoes a scattering event. A global variable xs_seed is added in this implementation --- src/cross_section.F90 | 30 ++++++++++-------------------- src/global.F90 | 8 ++++++++ src/random_lcg.F90 | 22 +++++++++++++++++++++- src/tracking.F90 | 13 +++++++++++-- 4 files changed, 50 insertions(+), 23 deletions(-) diff --git a/src/cross_section.F90 b/src/cross_section.F90 index 4f5d2252ce..b4de32d080 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -10,7 +10,7 @@ module cross_section use material_header, only: Material use nuclide_header use particle_header, only: Particle - use random_lcg, only: prn + use random_lcg, only: prn, prn_ahead use sab_header, only: SAlphaBeta use search, only: binary_search @@ -365,7 +365,6 @@ contains real(8) :: capture ! (n,gamma) cross section real(8) :: fission ! fission cross section real(8) :: inelastic ! inelastic cross section - logical :: same_nuc ! do we know the xs for this nuclide at this energy? type(UrrData), pointer :: urr type(NuclideCE), pointer :: nuc @@ -388,24 +387,15 @@ contains ! sample probability table using the cumulative distribution - ! if we're dealing with a nuclide that we've previously encountered at - ! this energy but a different temperature, use the original random number to - ! preserve correlation of temperature in probability tables - same_nuc = .false. - do i = 1, nuc % nuc_list % size() - if (E /= ZERO .and. E == micro_xs(nuc % nuc_list % data(i)) % last_E) then - same_nuc = .true. - same_nuc_idx = i - exit - end if - end do - - if (same_nuc) then - r = micro_xs(nuc % nuc_list % data(same_nuc_idx)) % last_prn - else - r = prn() - micro_xs(i_nuclide) % last_prn = r - end if + ! random numbers for xs calculation are sampled in a way separate from + ! tracking. 'xs_seed' is a copy of normal tracking prn seed but updated + ! until the particle undergoes a scattering event. Random number is + ! calculated by skipping ahead 'ZZAAA'(zaid) times from the seed + ! 'xs_seed' + 'ZZAAA'. + ! This guarantees the randomness and, at the same time, makes sure we reuse + ! random number for the same nuclide at different temperatures, therefore + ! preserving correlation of temperature in probability tables. + r = prn_ahead(int(nuc % zaid, 8), xs_seed + nuc % zaid) i_low = 1 do diff --git a/src/global.F90 b/src/global.F90 index 2abbe42120..9f5bd6567f 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -104,6 +104,14 @@ module global ! What to assume for expanding natural elements integer :: default_expand = ENDF_BVII1 + ! Random number seed for cross sections, specially for URR ptables + ! This number is copied from normal tracking random number sequence but + ! updated until the particle undergoes a scattering event. It is shared for + ! all nuclides. + integer(8) :: xs_seed = 1_8 + +!$omp threadprivate(xs_seed) + ! ============================================================================ ! MULTI-GROUP CROSS SECTION RELATED VARIABLES diff --git a/src/random_lcg.F90 b/src/random_lcg.F90 index 8f50477c5b..1e92fa6cee 100644 --- a/src/random_lcg.F90 +++ b/src/random_lcg.F90 @@ -11,7 +11,7 @@ module random_lcg integer(8), public :: seed = 1_8 integer(8) :: prn_seed0 ! original seed - integer(8) :: prn_seed(N_STREAMS) ! current seed + integer(8), public :: prn_seed(N_STREAMS) ! current seed integer(8) :: prn_mult ! multiplication factor, g integer(8) :: prn_add ! additive factor, c integer :: prn_bits ! number of bits, M @@ -24,6 +24,7 @@ module random_lcg !$omp threadprivate(prn_seed, stream) public :: prn + public :: prn_ahead public :: initialize_prng public :: set_particle_seed public :: prn_skip @@ -52,6 +53,25 @@ contains end function prn +!=============================================================================== +! PRN_AHEAD generates a pseudo-random number which is 'n' times ahead from a +! specific seed. This function does not changed current LCG status. +!=============================================================================== + + function prn_ahead(n, seed) result(pseudo_rn) + + integer(8), intent(in) :: n ! number of prns to skip + integer(8), intent(in) :: seed ! starting seed + + real(8) :: pseudo_rn + + ! prn_skip_ahead(n, seed) return the new seed S(n) + ! Xi(n) = S(n) / M + + pseudo_rn = prn_skip_ahead(n, seed) * prn_norm + + end function prn_ahead + !=============================================================================== ! INITIALIZE_PRNG sets up the random number generator, determining the seed and ! values for g, c, and m. diff --git a/src/tracking.F90 b/src/tracking.F90 index e634112bc6..b17f8ba59f 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -1,6 +1,6 @@ module tracking - use constants, only: MODE_EIGENVALUE + use constants, only: MODE_EIGENVALUE, STREAM_TRACKING use cross_section, only: calculate_xs use error, only: fatal_error, warning use geometry, only: find_cell, distance_to_boundary, cross_surface, & @@ -12,7 +12,7 @@ module tracking use particle_header, only: LocalCoord, Particle use physics, only: collision use physics_mg, only: collision_mg - use random_lcg, only: prn + use random_lcg, only: prn, prn_seed use string, only: to_str use tally, only: score_analog_tally, score_tracklength_tally, & score_collision_tally, score_surface_current @@ -59,6 +59,9 @@ contains micro_xs % last_E = ZERO end if + ! Set xs_seed to be current tracking prn seed + xs_seed = prn_seed(STREAM_TRACKING) + ! Prepare to write out particle track. if (p % write_track) then call initialize_particle_track() @@ -197,6 +200,9 @@ contains ! re-evaluated p % last_material = NONE + ! Update xs_seed to be current tracking seed after a collision + if (p % E /= p % last_E) xs_seed = prn_seed(STREAM_TRACKING) + ! Set all uvws to base level -- right now, after a collision, only the ! base level uvws are changed do j = 1, p % n_coord - 1 @@ -227,6 +233,9 @@ contains p % n_secondary = p % n_secondary - 1 n_event = 0 + ! Set xs_seed to be current tracking prn seed for new particle + xs_seed = prn_seed(STREAM_TRACKING) + ! Enter new particle in particle track file if (p % write_track) call add_particle_track() else From 32bf38953d8ac986afbf8acabd963d7af57295dd Mon Sep 17 00:00:00 2001 From: jingang Date: Mon, 29 Feb 2016 21:24:08 -0500 Subject: [PATCH 341/650] Remove the old approach (mainly introduced in pull request #282) https://github.com/mit-crpg/openmc/pull/282 --- src/ace.F90 | 22 ---------------------- src/initialize.F90 | 11 ++--------- src/mgxs_data.F90 | 22 ---------------------- src/nuclide_header.F90 | 4 ---- 4 files changed, 2 insertions(+), 57 deletions(-) diff --git a/src/ace.F90 b/src/ace.F90 index 5012c9b884..fbc1b7ee7c 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -1667,26 +1667,4 @@ contains end function get_real -!=============================================================================== -! SAME_NUCLIDE_LIST creates a linked list for each nuclide containing the -! indices in the nuclides array of all other instances of that nuclide. For -! example, the same nuclide may exist at multiple temperatures resulting -! in multiple entries in the nuclides array for a single zaid number. -!=============================================================================== - - subroutine same_nuclide_list() - - integer :: i ! index in nuclides array - integer :: j ! index in nuclides array - - do i = 1, n_nuclides_total - do j = 1, n_nuclides_total - if (nuclides(i) % zaid == nuclides(j) % zaid) then - call nuclides(i) % nuc_list % push_back(j) - end if - end do - end do - - end subroutine same_nuclide_list - end module ace diff --git a/src/initialize.F90 b/src/initialize.F90 index 52853f72ff..09bedb1388 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -1,6 +1,6 @@ module initialize - use ace, only: read_ace_xs, same_nuclide_list + use ace, only: read_ace_xs use bank_header, only: Bank use constants use dict_header, only: DictIntInt, ElemKeyValueII @@ -16,7 +16,7 @@ module initialize hdf5_tallyresult_t, hdf5_integer8_t use input_xml, only: read_input_xml, cells_in_univ_dict, read_plots_xml use material_header, only: Material - use mgxs_data, only: read_mgxs, same_NuclideMG_list, create_macro_xs + use mgxs_data, only: read_mgxs, create_macro_xs use output, only: title, header, print_version, write_message, & print_usage, write_xs_summary, print_plot use random_lcg, only: initialize_prng @@ -122,13 +122,6 @@ contains end if call time_read_xs%stop() - ! Create linked lists for multiple instances of the same nuclide - if (run_CE) then - call same_nuclide_list() - else - call same_nuclidemg_list() - end if - ! Construct information needed for nuclear data if (run_CE) then ! Construct unionized or log energy grid for cross-sections diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 796269151c..08941870cd 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -161,28 +161,6 @@ contains end subroutine read_mgxs -!=============================================================================== -! SAME_NUCLIDEMG_LIST creates a linked list for each nuclide containing the -! indices in the nuclides array of all other instances of that nuclide. For -! example, the same nuclide may exist at multiple temperatures resulting -! in multiple entries in the nuclides array for a single zaid number. -!=============================================================================== - - subroutine same_nuclidemg_list() - - integer :: i ! index in nuclides array - integer :: j ! index in nuclides array - - do i = 1, n_nuclides_total - do j = 1, n_nuclides_total - if (nuclides_MG(i) % obj % zaid == nuclides_MG(j) % obj % zaid) then - call nuclides_MG(i) % obj % nuc_list % push_back(j) - end if - end do - end do - - end subroutine same_nuclidemg_list - !=============================================================================== ! CREATE_MACRO_XS generates the macroscopic x/s from the microscopic input data !=============================================================================== diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 43fea77b65..c6cf583f20 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -26,9 +26,6 @@ module nuclide_header integer :: listing ! index in xs_listings real(8) :: kT ! temperature in MeV (k*T) - ! Linked list of indices in nuclides array of instances of this same nuclide - type(VectorInt) :: nuc_list - ! Fission information logical :: fissionable ! nuclide is fissionable? @@ -257,7 +254,6 @@ module nuclide_header ! Information for URR probability table use logical :: use_ptable ! in URR range with probability tables? - real(8) :: last_prn end type NuclideMicroXS !=============================================================================== From 364b30ee2d9556b825fb01a61124421e42b76677 Mon Sep 17 00:00:00 2001 From: jingang Date: Tue, 1 Mar 2016 17:01:45 -0500 Subject: [PATCH 342/650] Update skip ahead scheme to guarantee no repeat of random number --- src/cross_section.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cross_section.F90 b/src/cross_section.F90 index b4de32d080..f059c9c07e 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -390,12 +390,12 @@ contains ! random numbers for xs calculation are sampled in a way separate from ! tracking. 'xs_seed' is a copy of normal tracking prn seed but updated ! until the particle undergoes a scattering event. Random number is - ! calculated by skipping ahead 'ZZAAA'(zaid) times from the seed + ! calculated by skipping ahead 'xs_seed + ZZAAA'(zaid) times from the seed ! 'xs_seed' + 'ZZAAA'. ! This guarantees the randomness and, at the same time, makes sure we reuse ! random number for the same nuclide at different temperatures, therefore ! preserving correlation of temperature in probability tables. - r = prn_ahead(int(nuc % zaid, 8), xs_seed + nuc % zaid) + r = prn_ahead(xs_seed + nuc % zaid, xs_seed + nuc % zaid) i_low = 1 do From 4686a4ce888ae528ee967bc4bf95fcd5b9697d29 Mon Sep 17 00:00:00 2001 From: jingang Date: Tue, 1 Mar 2016 18:14:31 -0500 Subject: [PATCH 343/650] Updated regress tests as the new URR sampling approach changed the results --- .../test_asymmetric_lattice/results_true.dat | 2 +- tests/test_cmfd_feed/results_true.dat | 500 +-- tests/test_cmfd_nofeed/results_true.dat | 498 +-- tests/test_complex_cell/results_true.dat | 18 +- .../results_true.dat | 6 +- tests/test_density/results_true.dat | 2 +- tests/test_distribmat/results_true.dat | 2 +- .../results_true.dat | 2 +- .../results_true.dat | 2 +- tests/test_energy_grid/results_true.dat | 2 +- tests/test_energy_laws/results_true.dat | 2 +- tests/test_entropy/results_true.dat | 22 +- .../case-1/results_true.dat | 20 +- .../case-2/results_true.dat | 16 +- .../case-3/results_true.dat | 2 +- .../case-4/results_true.dat | 28 +- tests/test_filter_mesh_2d/results_true.dat | 672 +-- tests/test_filter_mesh_3d/results_true.dat | 1958 ++++----- tests/test_fixed_source/results_true.dat | 8 +- tests/test_infinite_cell/results_true.dat | 2 +- tests/test_lattice/results_true.dat | 2 +- tests/test_lattice_hex/results_true.dat | 2 +- tests/test_lattice_mixed/results_true.dat | 2 +- tests/test_lattice_multiple/results_true.dat | 2 +- .../results_true.dat | 40 +- .../results_true.dat | 8 +- tests/test_mgxs_library_hdf5/results_true.dat | 90 +- .../results_true.dat | 92 +- .../results_true.dat | 730 ++-- tests/test_natural_element/results_true.dat | 2 +- tests/test_output/results_true.dat | 2 +- .../results_true.dat | 10 +- .../test_particle_restart_eigval.py | 2 +- tests/test_quadric_surfaces/results_true.dat | 2 +- tests/test_reflective_plane/results_true.dat | 2 +- .../results_true.dat | 2 +- tests/test_rotation/results_true.dat | 2 +- tests/test_salphabeta/results_true.dat | 2 +- tests/test_score_current/results_true.dat | 2 +- tests/test_seed/results_true.dat | 2 +- tests/test_source/results_true.dat | 2 +- tests/test_source_file/results_true.dat | 2 +- .../test_sourcepoint_latest/results_true.dat | 2 +- .../test_sourcepoint_restart/results_true.dat | 3804 ++++++++--------- tests/test_statepoint_batch/results_true.dat | 2 +- .../test_statepoint_interval/results_true.dat | 2 +- .../test_statepoint_restart/results_true.dat | 3804 ++++++++--------- .../results_true.dat | 2 +- tests/test_survival_biasing/results_true.dat | 34 +- tests/test_tallies/results_true.dat | 2 +- tests/test_tally_aggregation/results_true.dat | 2 +- tests/test_tally_arithmetic/results_true.dat | 208 +- tests/test_tally_assumesep/results_true.dat | 14 +- tests/test_tally_nuclides/results_true.dat | 50 +- tests/test_trace/results_true.dat | 2 +- tests/test_translation/results_true.dat | 2 +- .../results_true.dat | 50 +- .../test_trigger_batch_interval.py | 2 +- .../results_true.dat | 50 +- .../test_trigger_no_batch_interval.py | 2 +- tests/test_trigger_no_status/results_true.dat | 50 +- tests/test_trigger_tallies/results_true.dat | 50 +- tests/test_uniform_fs/results_true.dat | 2 +- .../test_union_energy_grids/results_true.dat | 2 +- tests/test_universe/results_true.dat | 2 +- tests/test_void/results_true.dat | 2 +- 66 files changed, 6454 insertions(+), 6454 deletions(-) diff --git a/tests/test_asymmetric_lattice/results_true.dat b/tests/test_asymmetric_lattice/results_true.dat index ec4b883886..8b861fea3d 100644 --- a/tests/test_asymmetric_lattice/results_true.dat +++ b/tests/test_asymmetric_lattice/results_true.dat @@ -1 +1 @@ -b5f96919ca474cd1c9c9d0acde3b8aac4a1cf636443c72a38b6c5a4221a8ce3e90182aaef2f664e44b9175ca257a89db2328b63e19388ee0e5006de4b3d92ce6 \ No newline at end of file +ed3818f25cb19b957222c3b6f02d3d96a0646c5264903da07c25547bb9035d5283f7719e6af564d7b9e2d56d95070f1a3ca7b2eda9092058b8390ca484ea3e33 \ No newline at end of file diff --git a/tests/test_cmfd_feed/results_true.dat b/tests/test_cmfd_feed/results_true.dat index 9c109db6ab..e27093930d 100644 --- a/tests/test_cmfd_feed/results_true.dat +++ b/tests/test_cmfd_feed/results_true.dat @@ -1,128 +1,128 @@ k-combined: -1.168349E+00 1.145333E-02 +1.166652E+00 1.018306E-02 tally 1: -1.167844E+01 -1.366808E+01 -2.141846E+01 -4.598143E+01 -2.928738E+01 -8.615095E+01 -3.513015E+01 -1.241914E+02 -3.715164E+01 -1.384553E+02 -3.639309E+01 -1.327919E+02 -3.370872E+01 -1.138391E+02 -2.875251E+01 -8.292323E+01 -2.117740E+01 -4.512961E+01 -1.130554E+01 -1.289872E+01 +1.182022E+01 +1.405442E+01 +2.218673E+01 +4.943577E+01 +2.893897E+01 +8.398894E+01 +3.440863E+01 +1.184768E+02 +3.720329E+01 +1.385691E+02 +3.715391E+01 +1.384461E+02 +3.433438E+01 +1.180609E+02 +2.934569E+01 +8.617544E+01 +2.096787E+01 +4.419802E+01 +1.199678E+01 +1.446718E+01 tally 2: -2.339531E+01 -2.755922E+01 -1.646762E+01 -1.365289E+01 -2.146174E+00 -2.369613E-01 -4.309769E+01 -9.312913E+01 -3.054873E+01 -4.681242E+01 -4.076365E+00 -8.462370E-01 -5.840647E+01 -1.715260E+02 -4.161366E+01 -8.713062E+01 -5.382541E+00 -1.473814E+00 -6.927641E+01 -2.411359E+02 -4.943841E+01 -1.228850E+02 -6.282202E+00 -1.990021E+00 -7.308593E+01 -2.678848E+02 -5.202069E+01 -1.357621E+02 -6.826145E+00 -2.353974E+00 -7.117026E+01 -2.543546E+02 -5.068896E+01 -1.290261E+02 -6.342979E+00 -2.033850E+00 -6.615720E+01 -2.193712E+02 -4.725156E+01 -1.119514E+02 -6.024815E+00 -1.833752E+00 -5.738164E+01 -1.651944E+02 -4.081217E+01 -8.360122E+01 -5.326191E+00 -1.435896E+00 -4.208669E+01 -8.911740E+01 -2.994944E+01 -4.517409E+01 -3.905846E+00 -7.855247E-01 -2.273578E+01 -2.615080E+01 -1.603853E+01 -1.303560E+01 -2.160924E+00 -2.473278E-01 +2.306034E+01 +2.682494E+01 +1.611671E+01 +1.310632E+01 +2.197367E+00 +2.477887E-01 +4.203949E+01 +8.913100E+01 +2.976604E+01 +4.469984E+01 +4.006763E+00 +8.150909E-01 +5.779747E+01 +1.677749E+02 +4.095248E+01 +8.422524E+01 +5.363780E+00 +1.449264E+00 +6.807553E+01 +2.321452E+02 +4.845787E+01 +1.176610E+02 +6.171810E+00 +1.923022E+00 +7.340764E+01 +2.699083E+02 +5.221062E+01 +1.365619E+02 +6.847946E+00 +2.384879E+00 +7.293589E+01 +2.670385E+02 +5.179311E+01 +1.347019E+02 +6.772230E+00 +2.324004E+00 +6.790926E+01 +2.314671E+02 +4.827712E+01 +1.170966E+02 +6.209376E+00 +1.944617E+00 +5.892254E+01 +1.739942E+02 +4.193348E+01 +8.817331E+01 +5.580011E+00 +1.573783E+00 +4.349678E+01 +9.505407E+01 +3.078366E+01 +4.763277E+01 +4.132281E+00 +8.658909E-01 +2.390602E+01 +2.879339E+01 +1.671966E+01 +1.409820E+01 +2.408409E+00 +3.004268E-01 tally 3: -1.584939E+01 -1.265206E+01 -1.096930E+00 -6.173135E-02 -2.940258E+01 -4.337818E+01 -1.932931E+00 -1.884749E-01 -4.008186E+01 -8.086427E+01 -2.512704E+00 -3.189987E-01 -4.759648E+01 -1.139252E+02 -3.041630E+00 -4.683237E-01 -5.006181E+01 -1.257467E+02 -3.137042E+00 -4.981005E-01 -4.883211E+01 -1.197646E+02 -3.130686E+00 -4.987337E-01 -4.550029E+01 -1.038199E+02 -2.853740E+00 -4.127265E-01 -3.937822E+01 -7.785807E+01 -2.488983E+00 -3.156421E-01 -2.884912E+01 -4.192640E+01 -1.855316E+00 -1.745109E-01 -1.543635E+01 -1.208459E+01 -1.025635E+00 -5.351565E-02 +1.552079E+01 +1.215917E+01 +1.020059E+00 +5.282882E-02 +2.870674E+01 +4.158022E+01 +1.804035E+00 +1.660452E-01 +3.946503E+01 +7.823691E+01 +2.547969E+00 +3.299415E-01 +4.671591E+01 +1.093585E+02 +2.859632E+00 +4.124601E-01 +5.032154E+01 +1.268658E+02 +3.343751E+00 +5.614915E-01 +4.984325E+01 +1.247751E+02 +3.167240E+00 +5.081974E-01 +4.649606E+01 +1.086583E+02 +3.036950E+00 +4.666173E-01 +4.037729E+01 +8.175938E+01 +2.638125E+00 +3.519509E-01 +2.966728E+01 +4.424057E+01 +1.908438E+00 +1.845564E-01 +1.614337E+01 +1.314776E+01 +1.059193E+00 +5.820056E-02 tally 4: 0.000000E+00 0.000000E+00 @@ -160,8 +160,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -3.119914E+00 -4.908283E-01 +3.093457E+00 +4.811225E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -208,10 +208,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.567786E+00 -1.556825E+00 -2.766088E+00 -3.864023E-01 +5.492347E+00 +1.516052E+00 +2.700262E+00 +3.703359E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -256,10 +256,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.491891E+00 -2.819491E+00 -5.235154E+00 -1.377898E+00 +7.476943E+00 +2.814145E+00 +5.178084E+00 +1.351641E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -304,10 +304,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.810357E+00 -3.898704E+00 -7.233068E+00 -2.630659E+00 +8.761435E+00 +3.851635E+00 +7.186008E+00 +2.593254E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -352,10 +352,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.374583E+00 -4.414420E+00 -8.565683E+00 -3.687428E+00 +9.309416E+00 +4.344697E+00 +8.490837E+00 +3.612406E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -400,10 +400,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.001252E+00 -4.073267E+00 -8.974821E+00 -4.050120E+00 +9.132849E+00 +4.184794E+00 +9.243248E+00 +4.287529E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -448,10 +448,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.236452E+00 -3.401934E+00 -9.042286E+00 -4.102906E+00 +8.483092E+00 +3.612901E+00 +9.279260E+00 +4.328361E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -496,10 +496,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.028546E+00 -2.482380E+00 -8.577643E+00 -3.691947E+00 +7.127826E+00 +2.546707E+00 +8.665903E+00 +3.765209E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -544,10 +544,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.159585E+00 -1.342512E+00 -7.389236E+00 -2.745028E+00 +5.402585E+00 +1.465890E+00 +7.635138E+00 +2.927813E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -592,10 +592,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.762685E+00 -3.914181E-01 -5.471849E+00 -1.509910E+00 +2.828867E+00 +4.049626E-01 +5.637356E+00 +1.595316E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -642,8 +642,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -3.038522E+00 -4.643520E-01 +3.153056E+00 +4.991433E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -662,114 +662,114 @@ k cmfd 0.000000E+00 0.000000E+00 0.000000E+00 -1.180802E+00 -1.162698E+00 -1.162794E+00 -1.159752E+00 -1.152596E+00 -1.151652E+00 -1.148131E+00 -1.151875E+00 -1.151434E+00 -1.158833E+00 -1.160751E+00 -1.155305E+00 -1.155356E+00 -1.158866E+00 -1.161574E+00 -1.154691E+00 +1.179172E+00 +1.178968E+00 +1.188362E+00 +1.179504E+00 +1.171392E+00 +1.171387E+00 +1.167180E+00 +1.166119E+00 +1.174682E+00 +1.168971E+00 +1.169981E+00 +1.168234E+00 +1.167956E+00 +1.170486E+00 +1.171287E+00 +1.174181E+00 cmfd entropy 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.214195E+00 -3.225164E+00 -3.227316E+00 -3.225663E+00 -3.226390E+00 -3.225832E+00 -3.226707E+00 -3.227866E+00 -3.229948E+00 -3.229269E+00 -3.230044E+00 -3.231568E+00 -3.234694E+00 -3.234771E+00 -3.234915E+00 -3.235876E+00 +3.225935E+00 +3.221297E+00 +3.218564E+00 +3.219662E+00 +3.217459E+00 +3.219000E+00 +3.219073E+00 +3.220798E+00 +3.220489E+00 +3.223146E+00 +3.223646E+00 +3.226356E+00 +3.225204E+00 +3.224716E+00 +3.224318E+00 +3.224577E+00 cmfd balance 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.742525E-03 -2.646417E-03 -1.981783E-03 -1.856593E-03 -1.797685E-03 -2.122587E-03 -1.200823E-03 -2.177249E-03 -1.442840E-03 -1.477754E-03 -1.236325E-03 -1.048988E-03 -8.395164E-04 -7.380254E-04 -7.742837E-04 -8.235911E-04 +4.216001E-03 +3.716007E-03 +3.317665E-03 +3.237220E-03 +2.978765E-03 +2.525223E-03 +1.971612E-03 +1.780968E-03 +1.792648E-03 +1.426282E-03 +1.521307E-03 +1.322495E-03 +1.292716E-03 +1.257458E-03 +1.162537E-03 +1.050447E-03 cmfd dominance ratio 0.000E+00 0.000E+00 0.000E+00 0.000E+00 - 5.467E-01 - 5.518E-01 - 5.535E-01 - 5.500E-01 - 5.481E-01 - 5.478E-01 - 5.467E-01 + 5.532E-01 + 5.521E-01 + 5.496E-01 + 5.508E-01 + 5.456E-01 + 5.444E-01 + 5.454E-01 5.465E-01 - 5.493E-01 - 5.488E-01 - 5.491E-01 - 5.503E-01 - 5.529E-01 - 5.531E-01 - 5.534E-01 - 5.552E-01 + 5.448E-01 + 5.446E-01 + 5.458E-01 + 5.478E-01 + 5.470E-01 + 5.461E-01 + 5.451E-01 + 5.452E-01 cmfd openmc source comparison 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.168094E-03 -5.978693E-03 -4.369223E-03 -4.546309E-03 -4.222522E-03 -4.221686E-03 -4.604208E-03 -3.950286E-03 -2.939283E-03 -3.667020E-03 -2.592899E-03 -2.272158E-03 -1.229170E-03 -1.114150E-03 -1.060490E-03 -1.714222E-03 +7.905726E-03 +7.520876E-03 +8.184797E-03 +8.179625E-03 +8.961315E-03 +7.968151E-03 +7.670324E-03 +4.715437E-03 +5.520638E-03 +3.875711E-03 +3.787811E-03 +2.956290E-03 +3.185591E-03 +2.608673E-03 +2.426394E-03 +3.587478E-03 cmfd source -4.724285E-02 -8.305825E-02 -1.081058E-01 -1.314542E-01 -1.357299E-01 -1.359417E-01 -1.240918E-01 -1.087580E-01 -8.111239E-02 -4.450518E-02 +4.265675E-02 +7.580707E-02 +1.074866E-01 +1.214515E-01 +1.436608E-01 +1.371140E-01 +1.316659E-01 +1.136553E-01 +8.144140E-02 +4.506063E-02 diff --git a/tests/test_cmfd_nofeed/results_true.dat b/tests/test_cmfd_nofeed/results_true.dat index 308dd7d827..97a6598964 100644 --- a/tests/test_cmfd_nofeed/results_true.dat +++ b/tests/test_cmfd_nofeed/results_true.dat @@ -1,128 +1,128 @@ k-combined: -1.171115E+00 6.173328E-03 +1.162636E+00 7.934609E-03 tally 1: -1.151618E+01 -1.331859E+01 -2.120660E+01 -4.514836E+01 -2.759616E+01 -7.639131E+01 -3.216668E+01 -1.036501E+02 -3.664720E+01 -1.345450E+02 -3.771246E+01 -1.424209E+02 -3.523750E+01 -1.245225E+02 -2.973298E+01 -8.860064E+01 -2.152108E+01 -4.647187E+01 -1.169538E+01 -1.375047E+01 +1.135686E+01 +1.298528E+01 +2.071747E+01 +4.321110E+01 +2.819700E+01 +7.960910E+01 +3.332373E+01 +1.115433E+02 +3.709368E+01 +1.380544E+02 +3.739969E+01 +1.402784E+02 +3.426637E+01 +1.177472E+02 +2.803195E+01 +7.875785E+01 +2.016620E+01 +4.078448E+01 +1.108479E+01 +1.233250E+01 tally 2: -2.274639E+01 -2.606952E+01 -1.588200E+01 -1.270445E+01 -2.140989E+00 -2.357207E-01 -4.205792E+01 -8.880940E+01 -2.970000E+01 -4.427086E+01 -3.919645E+00 -7.773724E-01 -5.560960E+01 -1.559764E+02 -3.947900E+01 -7.872700E+01 -5.238942E+00 -1.400918E+00 -6.492259E+01 -2.117369E+02 -4.612200E+01 -1.069035E+02 -5.989449E+00 -1.813201E+00 -7.217377E+01 -2.608499E+02 -5.148500E+01 -1.327923E+02 -6.607336E+00 -2.205529E+00 -7.305896E+01 -2.681514E+02 -5.187500E+01 -1.352457E+02 -6.722921E+00 -2.290262E+00 -6.884269E+01 -2.380550E+02 -4.904800E+01 -1.208314E+02 -6.177320E+00 -1.927173E+00 -5.902100E+01 -1.748370E+02 -4.201000E+01 -8.858460E+01 -5.542381E+00 -1.549108E+00 -4.268091E+01 -9.151405E+01 -3.029500E+01 -4.614050E+01 -3.822093E+00 -7.420139E-01 -2.362279E+01 -2.812041E+01 -1.653100E+01 -1.377737E+01 -2.336090E+00 -2.851840E-01 +2.287981E+01 +2.636157E+01 +1.596700E+01 +1.284147E+01 +2.244451E+00 +2.572247E-01 +4.133263E+01 +8.604098E+01 +2.935200E+01 +4.341844E+01 +3.848434E+00 +7.503255E-01 +5.785079E+01 +1.679230E+02 +4.121800E+01 +8.525151E+01 +5.430500E+00 +1.486044E+00 +6.775200E+01 +2.303407E+02 +4.833300E+01 +1.173098E+02 +6.301059E+00 +1.998392E+00 +7.351217E+01 +2.710999E+02 +5.241700E+01 +1.379065E+02 +6.679600E+00 +2.255575E+00 +7.445204E+01 +2.781907E+02 +5.286300E+01 +1.402744E+02 +6.930494E+00 +2.424751E+00 +6.790326E+01 +2.315864E+02 +4.823200E+01 +1.168627E+02 +6.460814E+00 +2.114375E+00 +5.708920E+01 +1.635219E+02 +4.052800E+01 +8.243096E+01 +5.346027E+00 +1.442848E+00 +4.210443E+01 +8.918253E+01 +2.973500E+01 +4.450833E+01 +3.975207E+00 +8.045528E-01 +2.247144E+01 +2.543735E+01 +1.563900E+01 +1.232686E+01 +2.123798E+00 +2.366770E-01 tally 3: -1.524100E+01 -1.171023E+01 -1.071050E+00 -5.839198E-02 -2.862800E+01 -4.113148E+01 -1.892774E+00 -1.812712E-01 -3.804600E+01 -7.316097E+01 -2.423654E+00 -2.968521E-01 -4.434600E+01 -9.882906E+01 -2.823929E+00 -4.033633E-01 -4.955300E+01 -1.230293E+02 -3.226029E+00 -5.265680E-01 -4.999400E+01 -1.256474E+02 -3.232464E+00 -5.286388E-01 -4.724300E+01 -1.121029E+02 -3.015553E+00 -4.606928E-01 -4.051300E+01 -8.239672E+01 -2.592073E+00 -3.412174E-01 -2.912700E+01 -4.265700E+01 -1.875109E+00 -1.785438E-01 -1.593500E+01 -1.280638E+01 -1.038638E+00 -5.538157E-02 +1.535500E+01 +1.188779E+01 +1.072376E+00 +5.918356E-02 +2.825000E+01 +4.023490E+01 +1.793632E+00 +1.647594E-01 +3.966400E+01 +7.895763E+01 +2.634662E+00 +3.493770E-01 +4.659700E+01 +1.090464E+02 +2.967403E+00 +4.433197E-01 +5.047200E+01 +1.278853E+02 +3.273334E+00 +5.383728E-01 +5.092700E+01 +1.302177E+02 +3.300198E+00 +5.511893E-01 +4.642600E+01 +1.082721E+02 +2.975932E+00 +4.459641E-01 +3.894500E+01 +7.613859E+01 +2.530949E+00 +3.228046E-01 +2.864900E+01 +4.133838E+01 +1.903069E+00 +1.833780E-01 +1.505600E+01 +1.142871E+01 +1.018078E+00 +5.366335E-02 tally 4: 0.000000E+00 0.000000E+00 @@ -160,8 +160,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -3.065000E+00 -4.742170E-01 +2.996000E+00 +4.526620E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -208,10 +208,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.420000E+00 -1.474674E+00 -2.693000E+00 -3.667090E-01 +5.397000E+00 +1.464555E+00 +2.755000E+00 +3.852250E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -256,10 +256,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.243000E+00 -2.637431E+00 -5.092000E+00 -1.305200E+00 +7.389000E+00 +2.741345E+00 +5.200000E+00 +1.361978E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -304,10 +304,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.280000E+00 -3.445670E+00 -6.765000E+00 -2.307253E+00 +8.644000E+00 +3.751978E+00 +7.139000E+00 +2.565059E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -352,10 +352,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.980000E+00 -4.046484E+00 -8.108000E+00 -3.299338E+00 +9.219000E+00 +4.266743E+00 +8.493000E+00 +3.619533E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -400,10 +400,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.016000E+00 -4.079320E+00 -8.962000E+00 -4.034032E+00 +9.255000E+00 +4.299595E+00 +9.339000E+00 +4.378285E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -448,10 +448,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.465000E+00 -3.595665E+00 -9.296000E+00 -4.340524E+00 +8.492000E+00 +3.616398E+00 +9.420000E+00 +4.454308E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -496,10 +496,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.247000E+00 -2.638527E+00 -8.865000E+00 -3.946315E+00 +6.996000E+00 +2.460916E+00 +8.640000E+00 +3.743262E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -544,10 +544,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.179000E+00 -1.353661E+00 -7.492000E+00 -2.817588E+00 +5.120000E+00 +1.320024E+00 +7.306000E+00 +2.680980E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -592,10 +592,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.821000E+00 -4.067990E-01 -5.617000E+00 -1.587757E+00 +2.681000E+00 +3.659390E-01 +5.413000E+00 +1.474787E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -642,8 +642,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -3.134000E+00 -4.937920E-01 +3.061000E+00 +4.714170E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -662,114 +662,114 @@ k cmfd 0.000000E+00 0.000000E+00 0.000000E+00 -1.180802E+00 -1.163440E+00 -1.148572E+00 -1.151423E+00 -1.143374E+00 -1.144091E+00 -1.146212E+00 -1.144900E+00 -1.153511E+00 -1.158766E+00 -1.159179E+00 -1.156627E+00 -1.160647E+00 -1.162860E+00 -1.164312E+00 -1.164928E+00 +1.179172E+00 +1.181948E+00 +1.176599E+00 +1.175082E+00 +1.176011E+00 +1.183277E+00 +1.179605E+00 +1.181446E+00 +1.182887E+00 +1.182806E+00 +1.181451E+00 +1.176065E+00 +1.173438E+00 +1.171644E+00 +1.173251E+00 +1.178969E+00 cmfd entropy 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.214195E+00 -3.222259E+00 -3.225989E+00 -3.230436E+00 -3.228875E+00 -3.229003E+00 -3.228502E+00 -3.230397E+00 -3.231417E+00 -3.231192E+00 -3.229995E+00 -3.229396E+00 -3.228730E+00 -3.228091E+00 -3.227600E+00 -3.229723E+00 +3.225935E+00 +3.222178E+00 +3.226354E+00 +3.222407E+00 +3.218763E+00 +3.213551E+00 +3.217941E+00 +3.219897E+00 +3.223185E+00 +3.221321E+00 +3.223037E+00 +3.222984E+00 +3.225563E+00 +3.226058E+00 +3.225377E+00 +3.224158E+00 cmfd balance 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.742525E-03 -3.110598E-03 -2.490108E-03 -2.114137E-03 -2.190200E-03 -3.281877E-03 -2.219193E-03 -2.458372E-03 -2.200863E-03 -2.181858E-03 -2.064212E-03 -1.961178E-03 -1.713250E-03 -1.665361E-03 -1.436016E-03 -1.193462E-03 +4.216001E-03 +3.765736E-03 +3.232512E-03 +2.946657E-03 +2.620043E-03 +3.102942E-03 +1.718566E-03 +1.560898E-03 +1.349125E-03 +1.376832E-03 +1.125073E-03 +1.244068E-03 +8.541401E-04 +1.038410E-03 +9.946921E-04 +1.032684E-03 cmfd dominance ratio 0.000E+00 0.000E+00 0.000E+00 0.000E+00 - 5.467E-01 - 5.505E-01 - 5.514E-01 + 5.532E-01 5.531E-01 - 5.529E-01 - 5.501E-01 - 5.484E-01 - 5.500E-01 - 5.506E-01 - 5.508E-01 - 5.504E-01 - 5.500E-01 - 5.480E-01 + 3.223E-01 + 5.531E-01 + 5.492E-01 + 5.122E-01 + 5.456E-01 + 5.460E-01 + 5.479E-01 + 5.469E-01 + 5.469E-01 + 5.467E-01 + 5.469E-01 5.482E-01 - 5.475E-01 - 5.493E-01 + 5.467E-01 + 5.455E-01 cmfd openmc source comparison 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.168094E-03 -5.976241E-03 -4.426550E-03 -4.107499E-03 -4.957716E-03 -4.026213E-03 -3.986000E-03 -2.702714E-03 -3.619345E-03 -4.909616E-03 -3.355042E-03 -2.945724E-03 -3.010811E-03 -2.965662E-03 -2.673073E-03 -1.669634E-03 +7.905726E-03 +7.474785E-03 +3.875412E-03 +4.088264E-03 +4.267612E-03 +4.332761E-03 +3.099731E-03 +4.562882E-03 +2.179728E-03 +3.149706E-03 +2.068544E-03 +2.125510E-03 +1.508170E-03 +1.306280E-03 +1.668890E-03 +2.087329E-03 cmfd source -4.539734E-02 -8.104913E-02 -1.045143E-01 -1.221516E-01 -1.398002E-01 -1.400323E-01 -1.304628E-01 -1.120006E-01 -8.038230E-02 -4.420934E-02 +4.468330E-02 +7.547146E-02 +1.117685E-01 +1.265505E-01 +1.401455E-01 +1.414979E-01 +1.275260E-01 +1.083491E-01 +8.102235E-02 +4.298544E-02 diff --git a/tests/test_complex_cell/results_true.dat b/tests/test_complex_cell/results_true.dat index 97f228e3ee..b39f4c77a0 100644 --- a/tests/test_complex_cell/results_true.dat +++ b/tests/test_complex_cell/results_true.dat @@ -1,11 +1,11 @@ k-combined: -2.565769E-01 8.980879E-04 +2.638275E-01 6.152901E-03 tally 1: -2.584080E+00 -1.335682E+00 -2.763580E+00 -1.528633E+00 -1.007148E+00 -2.031543E-01 -1.113696E-01 -2.485351E-03 +2.700382E+00 +1.460303E+00 +2.789417E+00 +1.556280E+00 +1.066357E+00 +2.277317E-01 +1.107069E-01 +2.453478E-03 diff --git a/tests/test_confidence_intervals/results_true.dat b/tests/test_confidence_intervals/results_true.dat index fb13bdad29..0a693a2e7c 100644 --- a/tests/test_confidence_intervals/results_true.dat +++ b/tests/test_confidence_intervals/results_true.dat @@ -1,5 +1,5 @@ k-combined: -2.913599E-01 6.738749E-03 +2.955471E-01 7.000859E-03 tally 1: -6.420923E+01 -5.190738E+02 +6.492140E+01 +5.290622E+02 diff --git a/tests/test_density/results_true.dat b/tests/test_density/results_true.dat index 1dbadc039d..b3cfb0fcae 100644 --- a/tests/test_density/results_true.dat +++ b/tests/test_density/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.088237E+00 1.999252E-02 +1.112894E+00 2.781412E-03 diff --git a/tests/test_distribmat/results_true.dat b/tests/test_distribmat/results_true.dat index 70464fbc6c..32ba9d6d1d 100644 --- a/tests/test_distribmat/results_true.dat +++ b/tests/test_distribmat/results_true.dat @@ -1,5 +1,5 @@ k-combined: -1.309285E+00 1.263629E-02 +1.276930E+00 1.716859E-02 Cell ID = 11 Name = diff --git a/tests/test_eigenvalue_genperbatch/results_true.dat b/tests/test_eigenvalue_genperbatch/results_true.dat index 9e87c901d9..48052821bb 100644 --- a/tests/test_eigenvalue_genperbatch/results_true.dat +++ b/tests/test_eigenvalue_genperbatch/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.015627E-01 5.978844E-03 +2.966731E-01 1.565084E-03 diff --git a/tests/test_eigenvalue_no_inactive/results_true.dat b/tests/test_eigenvalue_no_inactive/results_true.dat index fbbe84cc37..a606f7b47e 100644 --- a/tests/test_eigenvalue_no_inactive/results_true.dat +++ b/tests/test_eigenvalue_no_inactive/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.130246E-01 6.960311E-03 +3.058585E-01 8.025063E-03 diff --git a/tests/test_energy_grid/results_true.dat b/tests/test_energy_grid/results_true.dat index 9556a981bc..3958614d05 100644 --- a/tests/test_energy_grid/results_true.dat +++ b/tests/test_energy_grid/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.155788E-01 7.559348E-03 +3.218570E-01 2.269572E-03 diff --git a/tests/test_energy_laws/results_true.dat b/tests/test_energy_laws/results_true.dat index 48eb6bc81b..cf020287be 100644 --- a/tests/test_energy_laws/results_true.dat +++ b/tests/test_energy_laws/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.130076E+00 1.938907E-03 +2.152985E+00 2.340453E-02 diff --git a/tests/test_entropy/results_true.dat b/tests/test_entropy/results_true.dat index 8b37789c32..773bedfd87 100644 --- a/tests/test_entropy/results_true.dat +++ b/tests/test_entropy/results_true.dat @@ -1,13 +1,13 @@ k-combined: -3.021779E-01 3.813358E-03 +2.938252E-01 5.852966E-03 entropy: -7.608094E+00 -8.167702E+00 -8.273634E+00 -8.239452E+00 -8.234598E+00 -8.278421E+00 -8.260773E+00 -8.351860E+00 -8.303719E+00 -8.271058E+00 +7.601626E+00 +8.075430E+00 +8.265647E+00 +8.334421E+00 +8.279373E+00 +8.243909E+00 +8.346594E+00 +8.308991E+00 +8.300603E+00 +8.293250E+00 diff --git a/tests/test_filter_distribcell/case-1/results_true.dat b/tests/test_filter_distribcell/case-1/results_true.dat index 49bf3ed4ee..74d8d5bb77 100644 --- a/tests/test_filter_distribcell/case-1/results_true.dat +++ b/tests/test_filter_distribcell/case-1/results_true.dat @@ -1,14 +1,14 @@ k-combined: 0.000000E+00 0.000000E+00 tally 1: -1.440759E-02 -2.075788E-04 -1.222930E-02 -1.495558E-04 -1.407292E-02 -1.980471E-04 -1.034365E-02 -1.069911E-04 +1.394835E-02 +1.945563E-04 +1.278875E-02 +1.635521E-04 +1.421770E-02 +2.021430E-04 +1.022974E-02 +1.046477E-04 tally 2: -5.105347E-02 -2.606457E-03 +5.118454E-02 +2.619857E-03 diff --git a/tests/test_filter_distribcell/case-2/results_true.dat b/tests/test_filter_distribcell/case-2/results_true.dat index bb2f498cbf..51eb8ea56d 100644 --- a/tests/test_filter_distribcell/case-2/results_true.dat +++ b/tests/test_filter_distribcell/case-2/results_true.dat @@ -1,11 +1,11 @@ k-combined: 0.000000E+00 0.000000E+00 tally 1: -7.326285E-03 -5.367445E-05 -8.565980E-03 -7.337601E-05 -9.027116E-03 -8.148882E-05 -8.045879E-03 -6.473617E-05 +7.622903E-03 +5.810865E-05 +8.364469E-03 +6.996434E-05 +8.637033E-03 +7.459834E-05 +8.126637E-03 +6.604223E-05 diff --git a/tests/test_filter_distribcell/case-3/results_true.dat b/tests/test_filter_distribcell/case-3/results_true.dat index f5f85d29f5..4e3ad0e43b 100644 --- a/tests/test_filter_distribcell/case-3/results_true.dat +++ b/tests/test_filter_distribcell/case-3/results_true.dat @@ -1 +1 @@ -6008cf2ba8eecaaa5a600fa337cf54cef018e98bdba8e3bd26c6f44587376a838d5bc5e86301b2e308f9eb248e3efafd45a5336f4023d962d7921d158a621e0c \ No newline at end of file +e3382c4ccff9d80b66a49ad88d8ff98ba489d39810f8fcacda565b857c93be7c3f92f8d06fae1d109d7b87f3c35f8768631b400a0f31c092f19c33b1773057e5 \ No newline at end of file diff --git a/tests/test_filter_distribcell/case-4/results_true.dat b/tests/test_filter_distribcell/case-4/results_true.dat index b8bd2b3390..85630c5e1e 100644 --- a/tests/test_filter_distribcell/case-4/results_true.dat +++ b/tests/test_filter_distribcell/case-4/results_true.dat @@ -1,17 +1,17 @@ k-combined: 0.000000E+00 0.000000E+00 tally 1: -2.166056E-02 -4.691799E-04 -2.281665E-02 -5.205994E-04 -1.938848E-02 -3.759132E-04 -3.055366E-02 -9.335264E-04 -2.338209E-02 -5.467222E-04 -2.719869E-02 -7.397689E-04 -1.895698E-02 -3.593670E-04 +2.274500E-02 +5.173351E-04 +2.035606E-02 +4.143691E-04 +2.057338E-02 +4.232638E-04 +3.100600E-02 +9.613721E-04 +2.355567E-02 +5.548698E-04 +2.563651E-02 +6.572304E-04 +2.020567E-02 +4.082692E-04 diff --git a/tests/test_filter_mesh_2d/results_true.dat b/tests/test_filter_mesh_2d/results_true.dat index 21946086b9..7d0fda7bd8 100644 --- a/tests/test_filter_mesh_2d/results_true.dat +++ b/tests/test_filter_mesh_2d/results_true.dat @@ -1,5 +1,5 @@ k-combined: -1.005983E+00 2.248579E-02 +9.090848E-01 2.183589E-02 tally 1: 0.000000E+00 0.000000E+00 @@ -43,12 +43,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.589207E-02 +2.106082E-03 0.000000E+00 0.000000E+00 -3.228098E-02 -1.042062E-03 -3.222708E-01 -1.038585E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -63,6 +61,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.810181E-01 +1.943018E-01 +8.477458E-01 +7.186730E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -71,16 +73,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.389407E-01 +1.595676E-01 +1.024430E+00 +3.365012E-01 +9.196572E-01 +3.159409E-01 +4.091014E-02 +1.673639E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -8.182335E-01 -3.748630E-01 -2.711997E-01 -5.338821E-02 -3.359680E-01 -5.168399E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -91,16 +95,26 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.937300E-01 +1.561304E-01 +1.330480E+00 +5.750628E-01 0.000000E+00 0.000000E+00 -3.706070E-01 -1.373496E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +5.824955E-01 +1.707684E-01 +4.866910E+00 +5.700093E+00 +2.363570E+00 +1.406009E+00 +2.500848E-01 +2.908147E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -109,238 +123,352 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.931419E-01 -9.002841E-02 -1.092722E+00 -3.733055E-01 -2.384227E+00 -1.926937E+00 -9.101131E-01 -3.634496E-01 -3.284661E-01 -1.078900E-01 +1.726734E+00 +1.008362E+00 +5.696123E-01 +1.623003E-01 +2.077579E-02 +4.316336E-04 +1.433993E+00 +9.499213E-01 +7.566294E-01 +2.345886E-01 +6.841025E-03 +4.679962E-05 0.000000E+00 0.000000E+00 -6.885295E-02 -4.740728E-03 0.000000E+00 0.000000E+00 -2.419633E-02 -5.854622E-04 -9.286912E-02 -7.247209E-03 -5.629729E-01 -9.281109E-02 -7.345786E-01 -1.755550E-01 -1.219449E-01 -1.487057E-02 0.000000E+00 0.000000E+00 +7.173413E-01 +5.145786E-01 +6.358264E-01 +2.499324E-01 +4.142134E-01 +1.715727E-01 0.000000E+00 0.000000E+00 -1.983303E-01 -3.797884E-02 -4.840974E-02 -1.266547E-03 -1.183485E+00 -4.184814E-01 -3.027254E-01 -8.598449E-02 -9.889868E-01 -4.608531E-01 -8.698103E-01 -4.598559E-01 -1.332831E+00 -4.809984E-01 -1.564949E+00 -5.782651E-01 -1.143572E+00 -4.399439E-01 -1.326651E+00 -6.376565E-01 -1.716813E+00 -1.314280E+00 -7.673229E-01 -2.364966E-01 -2.539284E+00 -1.945563E+00 -1.263219E+00 -4.919339E-01 -5.430042E-01 -1.300266E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -7.553587E-01 -1.738170E-01 -2.048487E+00 -1.239856E+00 -3.761862E-01 -8.452912E-02 -0.000000E+00 -0.000000E+00 -9.675232E-02 -9.361012E-03 -2.319594E-01 -2.331698E-02 -1.573495E+00 -6.394722E-01 -4.432570E-01 -1.005943E-01 -9.353148E-01 -3.125416E-01 -8.359366E-01 -2.985072E-01 -1.657665E+00 -9.207020E-01 -3.737550E+00 -3.558505E+00 -1.742376E+00 -8.732217E-01 -5.153816E+00 -6.543973E+00 -1.653035E+00 -1.061068E+00 -9.963191E-01 -3.716347E-01 -2.282805E-01 -2.383414E-02 -8.749983E-01 -2.714666E-01 -1.728411E-01 -1.190218E-02 -9.250054E-02 -4.341922E-03 -6.353807E-02 -4.037086E-03 -1.811729E-01 -1.711154E-02 -3.218800E-01 -7.906855E-02 -1.057036E+00 -3.778638E-01 -9.231639E-01 -2.991795E-01 -3.375678E-01 -1.041383E-01 -1.181686E-01 -8.023920E-03 -4.912969E-01 -2.073894E-01 -9.395786E-01 -4.653730E-01 -6.998437E-01 -2.917085E-01 -3.074214E+00 -2.819088E+00 -2.570673E+00 -1.358321E+00 -1.108912E+00 -3.843307E-01 -4.950896E-02 -2.451137E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 +4.011416E-01 +1.609146E-01 +3.368420E-02 +1.134625E-03 +1.030071E+00 +3.122720E-01 +1.143612E+00 +3.253839E-01 +2.540223E-02 +6.452733E-04 +1.928674E-01 +2.540533E-02 +5.020644E-01 +1.001572E-01 +7.725983E-02 +5.969081E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.761929E-01 +1.415211E-01 +3.337719E-01 +1.114037E-01 +1.458352E-01 +1.101801E-02 +1.004092E-02 +1.008200E-04 0.000000E+00 -8.757958E-02 -7.670183E-03 +0.000000E+00 +1.456669E-02 +2.121884E-04 +9.828001E-01 +3.081076E-01 +7.752974E-01 +2.561541E-01 +2.210823E-01 +4.887738E-02 +5.096186E-01 +1.463671E-01 +9.189234E-03 +8.444202E-05 +9.466643E-02 +8.690023E-03 +3.476240E-01 +1.208424E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.776242E-02 +1.426000E-03 +2.838898E-01 +4.967809E-02 +3.681563E-01 +6.318539E-02 +1.810931E+00 +9.978486E-01 +7.373658E-01 +1.908335E-01 +5.104435E-02 +2.605526E-03 +2.373628E-01 +5.634111E-02 +1.619103E+00 +9.529343E-01 +3.924287E-01 +7.734575E-02 +2.295855E-01 +1.859566E-02 +0.000000E+00 +0.000000E+00 +9.399897E-01 +4.960289E-01 +1.747530E+00 +7.216683E-01 +6.696830E-01 +2.245084E-01 +1.077525E+00 +4.429656E-01 +1.584679E-02 +2.511207E-04 +7.184233E-02 +5.161321E-03 +1.759958E-01 +1.571544E-02 +6.649229E-01 +1.552335E-01 +2.313062E+00 +1.350964E+00 +4.351564E-01 +8.470997E-02 +8.760661E-02 +3.966567E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.403358E+00 +5.895449E-01 +1.252504E+00 +3.739918E-01 +8.089149E-01 +2.438434E-01 +3.543859E-01 +8.574508E-02 +2.047540E+00 +1.321581E+00 +1.463028E+00 +5.756583E-01 +1.611632E+00 +9.690304E-01 +7.271044E-01 +2.145542E-01 +4.694874E-03 +2.204184E-05 +4.718730E-01 +2.106227E-01 +4.047996E-01 +1.189989E-01 +0.000000E+00 +0.000000E+00 +4.536343E-02 +1.094112E-03 +2.969731E-02 +8.819302E-04 +3.790737E-01 +7.738056E-02 +3.695761E-01 +1.011168E-01 +1.192047E+00 +4.200074E-01 +4.362940E+00 +6.186599E+00 +4.986916E+00 +7.007443E+00 +3.727941E+00 +3.366778E+00 +1.372362E-01 +8.458071E-03 +1.272595E+00 +3.719182E-01 +1.371121E+00 +6.115963E-01 +3.881464E-01 +7.668321E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.181124E-01 +1.395053E-02 +1.218119E-01 +1.206118E-02 +1.634449E-02 +2.671424E-04 +4.552904E-01 +1.865599E-01 +2.988611E-02 +8.931799E-04 +1.948983E-01 +3.003358E-02 +4.577426E-01 +6.147655E-02 +2.286747E+00 +1.767929E+00 +2.459226E+00 +1.547942E+00 +7.936611E+00 +1.446313E+01 +1.949417E+00 +1.320611E+00 +2.052310E-01 +4.120539E-02 +1.147100E-01 +7.231156E-03 +6.967033E-01 +1.779982E-01 +3.093709E-01 +5.019469E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.389385E-01 +1.679638E-01 +6.897133E-01 +2.074373E-01 +1.252516E-01 +1.568795E-02 +0.000000E+00 +0.000000E+00 +5.377296E-01 +7.798805E-02 +3.413563E+00 +2.875271E+00 +2.853407E-01 +4.232457E-02 +1.680380E+00 +7.792461E-01 +5.197599E+00 +1.167591E+01 +1.489144E+00 +1.644073E+00 +8.799716E-01 +5.514111E-01 +0.000000E+00 +0.000000E+00 +1.019508E+00 +3.954690E-01 +1.615211E+00 +5.906163E-01 +6.971393E-04 +4.860032E-07 0.000000E+00 0.000000E+00 -6.469411E-01 -1.789549E-01 -7.829878E-01 -2.033989E-01 -8.994770E-01 -2.351438E-01 -4.712797E-01 -7.213659E-02 -2.133532E+00 -9.765422E-01 -4.533607E-01 -1.511497E-01 -1.878729E+00 -2.099266E+00 -4.287190E+00 -4.748691E+00 -1.961229E+00 -1.085868E+00 0.000000E+00 0.000000E+00 +2.512285E-01 +3.531844E-02 +2.049880E-01 +2.500201E-02 +1.283410E+00 +7.357671E-01 +9.917693E-01 +3.339985E-01 +1.147483E-01 +8.509586E-03 +5.790502E-01 +9.680085E-02 +1.192232E+00 +4.459713E-01 +3.331876E-01 +4.746118E-02 +3.281132E-01 +7.974258E-02 +3.979931E-02 +1.583985E-03 0.000000E+00 0.000000E+00 +3.008273E-01 +5.804921E-02 +3.403375E+00 +2.756946E+00 +3.923179E-01 +4.065809E-02 +7.175236E-01 +2.579798E-01 0.000000E+00 0.000000E+00 +2.829294E-02 +8.004902E-04 +3.487502E-01 +8.673548E-02 +6.183549E-01 +2.131095E-01 +5.065445E-01 +1.543839E-01 +2.853090E+00 +3.049743E+00 +7.252805E-03 +5.260317E-05 +8.802479E-01 +2.996449E-01 +1.457582E+00 +6.219158E-01 +8.593620E-01 +2.316194E-01 +5.073156E-01 +1.305767E-01 0.000000E+00 0.000000E+00 +1.291473E-01 +1.667902E-02 +1.363309E-01 +1.126574E-02 +3.322153E-01 +7.213414E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.061692E-01 -1.127190E-02 -1.912282E-01 -3.656822E-02 -3.289827E-01 -1.075283E-01 -1.750908E+00 -8.092384E-01 -2.156426E+00 -9.498067E-01 -1.480596E+00 -6.002164E-01 -3.249216E-01 -1.005106E-01 -8.875810E-02 -7.878000E-03 -2.458176E-01 -4.377921E-02 -2.766784E+00 -2.677426E+00 -2.703501E+00 -2.548083E+00 0.000000E+00 0.000000E+00 +5.428888E-01 +2.947282E-01 +1.807993E+00 +7.223647E-01 +9.224400E-01 +2.724689E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.267439E-01 +5.141278E-02 +6.305037E-02 +3.751423E-03 +6.275215E-01 +3.937832E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.981880E-01 -3.927848E-02 -2.789456E-01 -5.304261E-02 -3.897689E-01 -9.413685E-02 -9.140885E-01 -2.822974E-01 -1.887726E+00 -7.592780E-01 -1.841624E+00 -1.680236E+00 -4.059938E-01 -1.562853E-01 -2.897077E-01 -8.393057E-02 +1.394098E+00 +7.405116E-01 0.000000E+00 0.000000E+00 -2.445051E-01 -5.978276E-02 -2.234657E-01 -2.716625E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -351,114 +479,34 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.783335E-02 -2.288029E-03 -5.606011E-01 -1.607491E-01 -1.908325E+00 -1.505641E+00 -1.255795E-01 -1.541635E-02 -7.395548E-01 -2.274416E-01 -5.986733E-01 -9.576988E-02 -1.095026E+00 -4.872910E-01 -1.043470E+00 -3.153965E-01 -1.004973E+00 -6.046910E-01 -1.724071E-01 -2.775427E-02 +2.096899E-01 +4.396987E-02 +2.774706E-02 +7.698995E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.244277E-01 -1.548225E-02 -1.222119E-01 -1.493575E-02 0.000000E+00 0.000000E+00 -5.470039E-01 -2.992133E-01 -4.313918E-01 -1.128703E-01 -1.088037E+00 -6.007745E-01 -1.013469E+00 -5.646900E-01 -4.738741E-01 -2.245567E-01 -6.086518E-02 -3.704570E-03 -1.126662E+00 -4.675322E-01 -1.008459E+00 -4.616352E-01 -1.309592E+00 -5.665211E-01 -1.334050E+00 -5.264819E-01 -7.324996E-01 -2.577124E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.227736E-01 -1.041828E-01 -9.218244E-01 -2.000301E-01 -2.119900E+00 -1.123846E+00 -4.366404E-02 -1.015133E-03 0.000000E+00 0.000000E+00 -2.309730E-01 -2.570742E-02 -1.270911E+00 -4.617932E-01 -1.107069E+00 -4.574496E-01 -1.269137E-01 -1.610709E-02 -2.207099E-01 -4.871286E-02 -9.075694E-02 -8.236821E-03 -1.046380E-01 -7.875036E-03 -2.836364E-01 -3.508209E-02 -4.509177E-01 -7.393615E-02 -1.077505E+00 -3.209541E-01 -1.204982E-02 -1.451982E-04 +0.000000E+00 +0.000000E+00 +1.974546E-01 +2.384975E-02 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.502937E-01 -5.035125E-02 -1.367234E+00 -5.128884E-01 -5.563575E-01 -2.510519E-01 -3.174809E-01 -1.007941E-01 -9.152129E-01 -2.609325E-01 -9.040668E-01 -2.263595E-01 -7.868812E-01 -2.436310E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -467,60 +515,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.390904E-01 -4.907887E-02 -6.577001E-01 -2.346964E-01 -1.023735E-01 -8.287220E-03 -1.499600E-02 -2.248801E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.395650E-01 -1.947839E-02 -1.040555E+00 -3.043523E-01 -1.426976E+00 -6.218295E-01 -8.342758E-01 -2.539692E-01 -3.101170E-01 -9.617255E-02 -6.319919E-02 -3.629541E-03 -1.292774E-01 -8.674372E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.056616E-01 -4.198926E-01 -7.349640E-02 -5.401721E-03 -5.146331E-01 -1.555789E-01 -2.464783E-01 -5.430051E-02 -7.263842E-02 -5.276340E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.587357E-01 -4.992769E-01 -1.756477E+00 -7.884472E-01 -2.541705E-01 -4.325743E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -533,14 +543,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.496519E-02 -4.948061E-03 -1.596404E-01 -2.548506E-02 -2.454011E-02 -6.022168E-04 -1.235276E-01 -1.525907E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -551,8 +553,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.422913E-01 -5.870510E-02 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/tests/test_filter_mesh_3d/results_true.dat b/tests/test_filter_mesh_3d/results_true.dat index 239a9f01a6..67622e74e5 100644 --- a/tests/test_filter_mesh_3d/results_true.dat +++ b/tests/test_filter_mesh_3d/results_true.dat @@ -1,5 +1,5 @@ k-combined: -1.005983E+00 2.248579E-02 +9.090848E-01 2.183589E-02 tally 1: 0.000000E+00 0.000000E+00 @@ -727,6 +727,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.589207E-02 +2.106082E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -753,8 +755,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.228098E-02 -1.042062E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -787,8 +787,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.222708E-01 -1.038585E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1043,6 +1041,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.810181E-01 +1.943018E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1075,10 +1075,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.745569E-01 +3.301156E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.731890E-01 +7.463221E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1235,6 +1239,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.389407E-01 +1.595676E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1261,16 +1267,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.009463E-01 -4.037943E-02 -1.741795E-01 -3.033850E-02 -4.431077E-01 -1.023945E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +7.907491E-01 +2.279094E-01 +2.336811E-01 +4.472648E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1299,10 +1303,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.699856E-01 -1.749182E-02 -1.012141E-01 -1.024430E-02 +2.908033E-01 +7.557454E-02 +6.288540E-01 +1.326512E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1329,14 +1333,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.427282E-01 -4.346756E-02 -8.576175E-02 -6.594648E-03 -7.478060E-03 -5.592138E-05 0.000000E+00 0.000000E+00 +4.091014E-02 +1.673639E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1579,10 +1579,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.645869E-02 -4.416757E-03 -3.041483E-01 -9.250621E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1621,12 +1617,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.916366E-02 +3.134904E-03 +4.865603E-01 +1.180911E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +4.800600E-02 +2.304576E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1649,8 +1651,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.914739E-01 +1.532518E-01 +8.773135E-01 +2.204709E-01 +1.855659E-02 +3.443471E-04 0.000000E+00 0.000000E+00 +8.943203E-03 +7.998089E-05 +3.419252E-02 +1.169128E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1803,6 +1815,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.721710E-01 +6.466430E-02 +1.083499E-01 +9.099135E-03 +2.019746E-01 +4.079373E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1829,6 +1847,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.008195E-01 +1.016457E-02 +3.669925E+00 +2.917222E+00 +9.397013E-01 +3.618502E-01 +1.564633E-01 +1.042011E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1843,8 +1869,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.931419E-01 -9.002841E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1857,6 +1881,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.077922E+00 +4.201997E-01 +1.214218E+00 +3.617486E-01 +2.241499E-03 +5.024317E-06 +6.918747E-02 +4.786906E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1875,18 +1907,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.775906E-01 -3.153842E-02 -8.691809E-01 -2.255229E-01 -4.595089E-02 -2.111485E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.816209E-02 +1.456345E-03 +1.349124E-01 +9.186049E-03 +7.701033E-02 +4.608092E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1907,14 +1939,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.073032E-01 -5.796376E-03 -6.104378E-01 -1.438907E-01 -1.357192E+00 -7.800106E-01 -3.092946E-01 -4.828943E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1943,10 +1967,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.051275E-01 -9.608655E-02 -4.049856E-01 -1.640133E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2001,10 +2021,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.816781E-02 -3.300694E-04 -3.102983E-01 -9.628505E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2047,8 +2063,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.885295E-02 -4.740728E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2067,6 +2081,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.958692E-01 +9.468103E-02 +1.975910E-01 +3.904222E-02 +1.033274E+00 +6.828182E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2095,6 +2115,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.067038E-01 +5.047096E-02 +9.980964E-03 +6.692276E-05 +2.085328E-01 +2.278714E-02 +4.439471E-02 +1.970890E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2119,8 +2147,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.419633E-02 -5.854622E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2145,6 +2171,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.077579E-02 +4.316336E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2157,18 +2185,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.098236E-02 -1.206123E-04 -5.047052E-02 -2.547273E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.065577E-02 -7.244766E-05 -2.076046E-02 -4.309969E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2177,10 +2197,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.003127E-02 +3.603753E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.116389E-01 +1.246324E-02 +1.262323E+00 +7.549729E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2191,18 +2217,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.209931E-01 -7.784762E-03 -1.059137E-01 -1.121770E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.883880E-01 -1.626283E-02 -1.476781E-01 -2.180883E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2213,28 +2231,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.064320E-02 +4.261416E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +5.729541E-01 +1.482544E-01 +1.630320E-01 +2.657945E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -5.464783E-03 -2.986386E-05 -4.827060E-01 -1.236578E-01 -2.938269E-02 -8.633425E-04 -1.103939E-01 -1.218681E-02 -1.066312E-01 -7.137023E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2259,16 +2273,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.841025E-03 +4.679962E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.448951E-03 -4.158897E-05 -1.154960E-01 -1.333932E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2353,10 +2365,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.230857E-01 -1.515010E-02 -7.524451E-02 -5.162294E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2387,12 +2395,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.738188E-03 -3.292680E-05 -1.158207E-02 -1.341443E-04 -3.108948E-02 -9.665557E-04 +5.888287E-01 +3.467192E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2409,6 +2413,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.246536E-02 +3.901921E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2419,14 +2425,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.756796E-02 +1.411352E-03 +1.257573E-01 +1.581491E-02 +3.206767E-01 +1.028336E-01 0.000000E+00 0.000000E+00 -8.670560E-01 -3.010896E-01 -2.777708E-01 -4.851013E-02 -3.865801E-02 -1.326182E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2441,6 +2447,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.381825E-02 +5.673093E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2451,14 +2459,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.080085E-01 +9.486923E-02 +1.062049E-01 +1.127948E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.205825E-02 -8.474722E-03 -2.106671E-01 -4.049979E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2487,14 +2495,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.518202E-01 -6.341342E-02 -3.500938E-01 -5.019217E-02 -1.285282E-01 -1.588441E-02 -2.585446E-01 -6.684532E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2523,10 +2523,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.653135E-01 -1.287514E-01 -2.216045E-03 -4.910856E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2545,8 +2541,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.022807E-01 -1.147015E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2579,10 +2573,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.172250E+00 -3.690965E-01 -1.605816E-01 -1.294116E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2611,12 +2601,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.892971E-02 -3.472710E-03 -1.338644E+00 -4.668912E-01 -1.673747E-01 -1.423295E-02 +1.664575E-02 +2.770809E-04 +3.844958E-01 +1.478370E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2625,14 +2613,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.452260E-01 -2.109060E-02 -5.921989E-01 -1.326829E-01 -3.816328E-02 -1.456436E-03 -9.153520E-02 -8.378692E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2645,10 +2625,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.905792E-01 -3.632041E-02 -8.586907E-02 -7.373497E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2659,16 +2635,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.474985E-02 -6.125553E-04 -7.610286E-01 -2.001560E-01 -4.516947E-01 -1.062402E-01 -8.917764E-02 -4.968510E-03 0.000000E+00 0.000000E+00 +3.368420E-02 +1.134625E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2689,22 +2659,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.500778E-01 +1.824030E-01 +3.751043E-01 +6.960597E-02 +4.889101E-03 +2.390331E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.101299E+00 -7.922298E-01 -4.529165E-02 -2.051333E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -5.702227E-01 -1.629185E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2723,6 +2693,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.552067E-01 +7.965862E-02 +5.884053E-01 +1.128861E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2735,16 +2709,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.749741E-01 -3.841679E-02 -1.876567E-01 -2.180115E-02 -4.802267E-02 -2.306177E-03 -2.219757E-01 -2.083367E-02 -3.469381E-02 -1.203661E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2769,16 +2733,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.220451E-03 -8.501673E-05 -2.421186E-01 -2.296140E-02 -5.301518E-01 -1.266721E-01 -1.676517E+00 -1.032348E+00 -8.127651E-02 -4.329985E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2795,6 +2749,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.540223E-02 +6.452733E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2805,14 +2761,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.516265E-01 -6.305270E-02 -3.999873E-02 -1.599899E-03 -5.487047E-01 -1.292105E-01 -3.228887E-01 -1.042571E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2833,6 +2781,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.203949E-03 +4.857393E-06 +1.906635E-01 +2.524226E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2843,10 +2795,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.407100E-01 -4.223910E-02 -2.022942E-01 -4.092294E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2869,6 +2817,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.924777E-01 +9.702070E-02 +9.586698E-03 +9.190478E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2899,6 +2851,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.725983E-02 +5.969081E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2933,8 +2887,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.553587E-01 -1.738170E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2965,14 +2917,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.145563E-02 -3.776795E-03 -2.005189E-01 -2.429212E-02 -5.673596E-01 -1.649938E-01 -4.875014E-01 -2.376576E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2981,10 +2925,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.157679E-01 -3.770273E-01 -1.588325E-02 -2.522777E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3015,10 +2955,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.592065E-01 -4.120974E-02 -1.169797E-01 -8.650603E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3037,6 +2973,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.150067E-01 +1.322653E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3051,6 +2989,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.341735E-02 +5.483721E-04 +8.143485E-02 +6.631634E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3065,6 +3007,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.406100E-02 +5.485032E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3079,14 +3023,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.347202E-02 +1.814953E-04 +4.752215E-02 +2.258354E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.675232E-02 -9.361012E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3101,6 +3047,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.157492E-02 +1.339789E-04 +8.567464E-02 +5.764769E-03 +4.858562E-02 +2.360563E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3123,10 +3075,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.767592E-02 -5.284927E-03 -1.342835E-01 -1.803205E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3137,10 +3085,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.408666E-01 -1.984341E-02 -2.912093E-02 -8.480284E-04 +1.004092E-02 +1.008200E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3155,12 +3101,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.575074E-02 -4.323159E-03 -1.123042E+00 -4.745625E-01 -2.147144E-01 -2.841768E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3173,8 +3113,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.138141E-01 -1.295364E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3191,10 +3129,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.478967E-01 -2.397512E-02 -8.154628E-02 -5.533841E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3203,14 +3137,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.673829E-01 -2.801704E-02 -6.238670E-01 -1.323614E-01 -1.087831E-01 -8.027300E-03 -3.528173E-02 -1.244801E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3231,20 +3157,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.456669E-02 +2.121884E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.125593E-03 -9.769332E-06 -5.982046E-01 -2.380250E-01 -1.595969E-01 -1.273945E-02 -7.500945E-02 -5.626417E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3257,6 +3177,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.177876E-01 +6.984115E-02 +5.414528E-01 +1.217187E-01 +1.235597E-01 +1.225844E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3279,16 +3205,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.004455E-02 -4.017842E-04 -1.241994E+00 -5.276343E-01 -3.956269E-01 -6.857794E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +6.438708E-02 +4.145696E-03 +3.829900E-03 +1.466813E-05 +3.333043E-01 +8.477399E-02 +3.737762E-01 +6.094548E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3305,24 +3233,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.420493E-01 -2.017799E-02 -1.139866E-02 -1.299295E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.517820E-01 -4.088147E-02 -5.984204E-01 -1.119676E-01 -1.600304E+00 -1.060307E+00 -6.251595E-01 -1.631053E-01 -5.084364E-01 -8.750385E-02 +1.024361E-01 +1.049315E-02 +1.186462E-01 +1.407692E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3349,24 +3267,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.482851E-01 -2.198847E-02 -8.661057E-02 -3.979426E-03 -5.328694E-01 -1.185445E-01 -9.819716E-02 -6.261752E-03 -1.971175E-01 -3.885531E-02 -5.055466E-01 -1.332461E-01 -1.737497E-01 -3.018896E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +6.575968E-02 +2.208187E-03 +4.438589E-01 +1.133195E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3383,22 +3291,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.448612E-01 -3.179981E-02 -1.336292E+00 -6.509631E-01 -1.788953E+00 -9.402141E-01 -6.484030E-01 -1.952075E-01 -1.239995E-01 -9.457065E-03 -5.379761E-01 -9.948097E-02 -3.422476E-01 -3.688467E-02 -1.310833E-01 -9.116867E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3419,20 +3311,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.452794E-01 -7.962998E-03 -4.950124E-01 -1.019817E-01 -5.154252E-01 -1.349222E-01 -2.369650E-01 -5.615241E-02 -3.458235E-02 -1.195939E-03 -1.129905E-02 -1.276685E-04 -2.144713E-01 -2.715780E-02 +9.189234E-03 +8.444202E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3463,26 +3343,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.439196E-02 -4.146324E-03 -9.319271E-01 -3.289332E-01 0.000000E+00 0.000000E+00 +1.457530E-03 +2.124393E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -8.887911E-02 -4.077886E-03 -1.394014E-01 -1.214028E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.728727E-02 +1.390341E-03 +5.592163E-02 +3.127228E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3509,12 +3387,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.093347E-01 -4.640925E-02 -5.656636E-01 -1.123158E-01 0.000000E+00 0.000000E+00 +1.868110E-01 +3.489837E-02 +1.608129E-01 +2.586079E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3559,8 +3437,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.728411E-01 -1.190218E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3593,10 +3469,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.275913E-02 -8.900081E-05 -7.974141E-02 -3.206666E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3629,8 +3501,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.353807E-02 -4.037086E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3663,14 +3533,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.092912E-01 -1.194458E-02 +3.776242E-02 +1.426000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -7.188161E-02 -5.166966E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3689,22 +3557,26 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.312464E-02 +8.672198E-03 +7.277455E-02 +3.337798E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +9.793932E-02 +5.547426E-03 +2.005125E-02 +4.020525E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.224855E-01 -3.374440E-02 -9.939443E-02 -9.879253E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3715,16 +3587,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.008926E-02 -1.017932E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +6.885218E-02 +4.740623E-03 +5.102997E-02 +2.604058E-03 +2.413011E-02 +5.822622E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.999624E-01 +2.172553E-02 +2.418161E-02 +4.017912E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3733,14 +3613,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.203590E-02 -1.448628E-04 -8.166865E-01 -2.864876E-01 -2.182247E-01 -3.276791E-02 0.000000E+00 0.000000E+00 +3.486695E-01 +1.215704E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3749,12 +3625,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.286761E-01 -1.655753E-02 -1.350478E-01 -8.850865E-03 -3.262324E-01 -5.081260E-02 +1.871991E-01 +3.504350E-02 +4.746788E-01 +8.097271E-02 +8.003839E-01 +2.085673E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3769,14 +3645,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.880416E-02 -7.940924E-04 -2.944035E-01 -5.470290E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +9.441534E-02 +8.914256E-03 +2.174907E-02 +4.730221E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3785,10 +3661,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.039618E-01 +5.462503E-03 +5.172396E-01 +1.418615E-01 0.000000E+00 0.000000E+00 -3.375678E-01 -1.041383E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3815,12 +3693,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.443462E-02 -2.083582E-04 -6.747523E-02 -4.552907E-03 0.000000E+00 0.000000E+00 +9.611614E-03 +9.238313E-05 +4.143274E-02 +1.716672E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3831,8 +3709,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.625873E-02 -1.314696E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3849,8 +3725,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.743814E-02 -1.401614E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3859,14 +3733,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.282000E-01 -1.643523E-02 -8.992357E-04 -8.086249E-07 -4.549792E-02 -2.070061E-03 -2.792616E-01 -7.798705E-02 +2.218092E-01 +4.919934E-02 +1.555359E-02 +2.419141E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3883,12 +3753,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.561753E-01 -3.750508E-02 -4.494863E-01 -2.020380E-01 -1.524811E-02 -2.325049E-04 +2.923037E-01 +8.544147E-02 +1.105886E+00 +4.954938E-01 +1.801721E-01 +1.643267E-02 +4.074186E-02 +1.659899E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3897,8 +3769,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.186688E-01 -4.781605E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3919,10 +3789,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.756295E-01 -3.084572E-02 +2.093595E-01 +4.383141E-02 0.000000E+00 0.000000E+00 +1.830692E-01 +3.351434E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3933,18 +3805,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.799587E-02 -7.837689E-04 0.000000E+00 0.000000E+00 -2.165781E-01 -4.136640E-02 -1.206583E-01 -1.455843E-02 -3.350979E-02 -1.122906E-03 -1.254721E-01 -1.574324E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3961,24 +3823,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.255610E-02 -1.576557E-04 -2.059029E-01 -2.931063E-02 -9.625207E-02 -9.264462E-03 -4.926052E-01 -1.231087E-01 -3.607423E-01 -6.495313E-02 -2.101048E-01 -2.385810E-02 -7.843494E-01 -1.955825E-01 -9.077784E-01 -3.297447E-01 -3.922359E-03 -1.538490E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3993,24 +3837,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.557970E-01 +1.315091E-02 +4.836104E-02 +2.338790E-03 +2.542750E-02 +6.465577E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.913074E-02 -1.799353E-03 -1.249107E-02 -1.560268E-04 0.000000E+00 0.000000E+00 -1.115404E+00 -4.366528E-01 -3.732357E-01 -4.158215E-02 -3.846227E-01 -8.126419E-02 -6.157885E-01 -1.590298E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4037,14 +3875,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.663121E-01 -1.953137E-01 -4.644811E-01 -1.590726E-01 -5.000400E-02 -1.273713E-03 -2.811483E-02 -7.904436E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4053,22 +3883,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.950896E-02 -2.451137E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +4.114172E-01 +8.463618E-02 +6.482386E-02 +4.202133E-03 0.000000E+00 0.000000E+00 +1.562146E-01 +2.440299E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.075341E-01 +9.457725E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4087,12 +3923,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.987385E-02 +4.216342E-03 +3.775725E-01 +7.128418E-02 +1.229306E-01 +8.980437E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.072363E-01 +4.294688E-02 +7.605871E-01 +2.470259E-01 +2.093299E-01 +4.381902E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4111,6 +3959,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.869734E-01 +6.608107E-02 +3.758837E-01 +7.851736E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4119,6 +3971,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.825953E-03 +4.659364E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4141,6 +3995,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.820587E-01 +7.154947E-02 +6.954661E-01 +3.034029E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4171,6 +4029,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.584679E-02 +2.511207E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4217,6 +4077,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.184233E-02 +5.161321E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4241,10 +4103,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.294981E-02 +3.962679E-03 +3.572915E-02 +1.276572E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +7.731687E-02 +5.977899E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4269,20 +4137,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.080327E-01 +1.167107E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +4.026670E-01 +6.339813E-02 +1.542231E-01 +2.378478E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.933218E-02 -1.547021E-03 -4.824739E-02 -2.327811E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4301,10 +4171,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.460357E-02 +1.989478E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.818917E-02 +7.946292E-04 +1.893802E+00 +8.370429E-01 +3.464673E-01 +7.243677E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4315,6 +4193,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.758467E-03 +6.019381E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4325,14 +4205,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.013752E-01 +3.437520E-02 +2.160993E-02 +3.780757E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.675416E-01 -4.683926E-02 -2.020206E-01 -3.139390E-02 +2.044128E-01 +4.178460E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4341,16 +4223,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.281618E-01 -1.642545E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.921707E-02 -2.422320E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4361,24 +4239,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.580196E-02 +2.405069E-03 +3.180466E-02 +8.211954E-04 0.000000E+00 0.000000E+00 -3.451622E-02 -1.191369E-03 -2.791548E-02 -7.007752E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.429077E-02 -2.042262E-04 -5.105813E-01 -9.939542E-02 -1.956841E-01 -3.829226E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4407,12 +4279,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.524256E-01 -3.390159E-02 -5.341258E-01 -7.612387E-02 -1.129256E-01 -5.367542E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4427,10 +4293,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.208683E-02 -4.878280E-04 -2.729156E-02 -7.448293E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4439,16 +4301,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.789538E-02 -3.202447E-04 -1.070161E-01 -1.145246E-02 -2.004171E-01 -4.016700E-02 -9.277615E-02 -4.350522E-03 -3.796585E-03 -1.441406E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4459,14 +4311,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.717932E-01 -2.951289E-02 -3.342321E-01 -6.344565E-02 -4.457955E-01 -9.943168E-02 -4.346780E-03 -1.889450E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4475,14 +4319,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.812701E-02 -7.911289E-04 0.000000E+00 0.000000E+00 -7.255598E-01 -2.637695E-01 -4.236781E-01 -1.206021E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4499,10 +4337,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.516279E-03 +3.042934E-05 +2.109966E-01 +4.451955E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.204701E-02 +1.451304E-04 +9.777737E-01 +3.216046E-01 +1.970243E-01 +3.497367E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4513,10 +4361,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.455666E-01 -1.088929E-01 -1.077941E-01 -5.813092E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4525,10 +4369,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.022569E-01 +4.090786E-02 +2.829187E-01 +5.992985E-02 +3.909183E-03 +1.528171E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.769412E-02 +7.669642E-04 +2.293319E-01 +2.291139E-02 +5.063929E-01 +8.839948E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4541,22 +4397,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.759532E-03 -7.672939E-05 -3.873698E-01 -1.500554E-01 -3.320720E-02 -5.664804E-04 -9.751133E-01 -4.762440E-01 -3.549373E-01 -1.259805E-01 0.000000E+00 0.000000E+00 -4.558589E-03 -2.078073E-05 -1.147837E-01 -1.317530E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4573,28 +4415,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.240276E-01 +6.259831E-02 +4.821705E-01 +1.465719E-01 +2.716753E-03 +7.380744E-06 0.000000E+00 0.000000E+00 -1.491942E-01 -1.942842E-02 -1.215608E-02 -7.465030E-05 -9.749153E-01 -3.525441E-01 -1.238276E+00 -4.724746E-01 -7.559328E-01 -1.539006E-01 -7.550630E-01 -2.671451E-01 -4.016529E-01 -1.049033E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +7.007063E-02 +4.909893E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4613,16 +4449,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.843153E-01 +8.083519E-02 0.000000E+00 0.000000E+00 -1.915923E-01 -1.106962E-02 -1.039274E+00 -3.820648E-01 -6.748249E-01 -1.513006E-01 -5.553735E-02 -3.084397E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4633,6 +4463,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.637517E-01 +6.344334E-02 +1.611871E-01 +9.780279E-03 +1.369946E+00 +7.310512E-01 +1.790727E-01 +2.421811E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4643,6 +4481,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.358261E-02 +2.750165E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4659,12 +4499,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.520557E-02 +3.629997E-03 +3.104068E-01 +3.585841E-02 +8.961225E-01 +3.152521E-01 +8.118983E-02 +6.591789E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.213483E-02 +4.899508E-04 +6.796855E-02 +4.619724E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4683,12 +4535,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.636814E-03 +7.459456E-05 +6.558296E-01 +2.206348E-01 +7.105868E-01 +2.014504E-01 +7.356863E-02 +5.412344E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.630097E-01 +2.657217E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4709,6 +4571,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.780793E-02 +8.160032E-04 +6.228699E-01 +1.860172E-01 +6.642653E-02 +1.937778E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4741,6 +4609,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.694874E-03 +2.204184E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4783,6 +4653,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.203382E-01 +1.166708E-02 +3.515349E-01 +1.235768E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4807,8 +4681,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.527081E-03 +3.054862E-05 +6.191315E-04 +3.833239E-07 0.000000E+00 0.000000E+00 +3.986534E-01 +1.182222E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4833,8 +4713,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.061692E-01 -1.127190E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4867,8 +4745,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.912282E-01 -3.656822E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4879,8 +4755,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.697245E-02 +2.880642E-04 0.000000E+00 0.000000E+00 +2.839097E-02 +8.060473E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4905,6 +4785,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.969731E-02 +8.819302E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4919,8 +4801,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.289827E-01 -1.075283E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4937,6 +4817,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.068802E-01 +4.279940E-02 +1.721936E-01 +1.999610E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4951,12 +4835,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.805117E-03 +3.258447E-06 0.000000E+00 0.000000E+00 -1.320797E+00 -4.972727E-01 -4.301105E-01 -6.331514E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4975,6 +4857,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.019718E-01 +1.039824E-02 +2.657993E-01 +4.762038E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4983,14 +4869,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.915487E-02 -2.416202E-03 -9.120705E-02 -8.318727E-03 -1.320105E+00 -4.411682E-01 -6.959590E-01 -2.389648E-01 +5.306944E-01 +1.477186E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5003,8 +4883,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.662623E-02 -3.206529E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5013,22 +4891,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.023013E-01 +2.462801E-02 +4.590510E-01 +6.395545E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.166586E-02 -1.360923E-04 -1.891160E-02 -3.576487E-04 -1.256901E+00 -4.792247E-01 -1.364915E-01 -1.696517E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.216151E-01 +2.494977E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5037,14 +4913,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.940292E-01 -8.336788E-02 -3.089242E-02 -8.049394E-04 +1.796653E-02 +3.227963E-04 +1.254571E-01 +1.153518E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +4.798254E-02 +2.302324E-03 +5.031134E-01 +2.531231E-01 +2.554328E+00 +1.871232E+00 +6.528166E-01 +1.601847E-01 +2.396607E-01 +3.096977E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5059,10 +4945,26 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.020566E-02 +2.520608E-03 +2.933276E-01 +2.725757E-02 +1.772073E+00 +7.789301E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +5.741968E-04 +3.297019E-07 +4.096107E-02 +1.677809E-03 +1.145151E+00 +6.780541E-01 +1.549730E+00 +9.904989E-01 +1.348937E-01 +1.258874E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5073,18 +4975,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.875810E-02 -7.878000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +4.310363E-02 +1.857923E-03 +9.519794E-01 +2.619604E-01 +2.722131E-01 +4.120812E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.365154E-01 +5.215993E-02 +1.740307E+00 +9.539805E-01 +4.838221E-01 +8.982260E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5103,6 +5015,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.831912E-03 +7.800267E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5111,6 +5025,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.594878E-02 +3.130266E-03 +7.245552E-02 +5.249803E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5123,14 +5041,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.925951E-02 -4.796880E-03 -1.765581E-01 -2.014257E-02 +6.999607E-02 +2.229669E-03 +1.085851E+00 +3.131386E-01 +2.346814E-02 +3.212775E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +6.121136E-02 +3.746830E-03 +3.206848E-02 +1.028387E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5153,22 +5077,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.912672E-01 +5.254983E-02 +8.701937E-02 +7.572371E-03 +1.700075E-02 +2.890254E-04 +2.993514E-01 +4.786535E-02 +6.764819E-01 +2.492324E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.007236E-01 -1.014525E-02 -3.069376E-01 -6.982061E-02 -1.339942E+00 -5.632235E-01 -8.027545E-01 -2.263816E-01 -1.881835E-01 -3.541303E-02 -2.824222E-02 -7.976228E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5193,16 +5115,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.475515E-01 -1.949499E-01 -8.916929E-01 -2.187649E-01 -9.737449E-01 -4.547148E-01 -1.905118E-01 -3.629474E-02 0.000000E+00 0.000000E+00 +1.590925E-01 +2.264019E-02 +2.290539E-01 +5.246570E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5313,10 +5231,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.003849E-01 +1.007713E-02 +1.772745E-02 +3.142623E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +7.289766E-02 +5.314069E-03 +3.618562E-02 +1.309399E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5339,6 +5265,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.272864E-02 +1.620182E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5347,6 +5275,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.634449E-02 +2.671424E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5393,6 +5323,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.212518E-01 +4.895234E-02 +2.100048E-01 +4.410203E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5403,6 +5337,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.403382E-02 +5.776247E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5411,10 +5347,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.851330E-02 -8.130086E-04 -1.696747E-01 -2.878950E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5427,6 +5359,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.988611E-02 +8.931799E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5443,12 +5377,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.859875E-01 +2.705213E-02 +8.910831E-03 +7.940291E-05 0.000000E+00 0.000000E+00 -2.753509E-02 -7.581810E-04 -2.514105E-01 -5.075004E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5477,6 +5411,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.477605E-01 +1.085632E-02 +2.188892E-01 +1.430397E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5485,10 +5423,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.198658E-01 -8.925041E-02 0.000000E+00 0.000000E+00 +2.196720E-02 +4.825581E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5497,8 +5435,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.990313E-02 -4.886448E-03 +6.912571E-02 +4.778363E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5507,6 +5445,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.562066E-01 +6.564182E-02 +1.021109E-01 +1.042665E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5517,24 +5459,30 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.101070E-01 +3.281373E-01 +2.258964E-02 +5.102917E-04 0.000000E+00 0.000000E+00 -5.642875E-02 -3.184204E-03 -1.235957E-01 -1.527591E-02 0.000000E+00 0.000000E+00 +2.242398E-01 +5.028348E-02 +5.303166E-01 +1.259944E-01 +2.813696E-01 +7.586511E-02 +5.980735E-02 +3.576919E-03 0.000000E+00 0.000000E+00 -6.620581E-01 -1.938858E-01 -4.607570E-02 -1.247203E-03 0.000000E+00 0.000000E+00 -2.593018E-02 -6.723742E-04 +1.770640E-01 +3.135167E-02 +8.386975E-02 +7.034135E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5543,12 +5491,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.460936E-01 +5.438186E-02 +3.774668E-01 +4.409491E-02 +1.951430E-01 +3.808079E-02 0.000000E+00 0.000000E+00 -3.904410E-02 -1.524442E-03 0.000000E+00 0.000000E+00 +1.308324E-01 +1.711712E-02 +6.446435E-01 +1.469357E-01 +5.953597E-01 +2.237589E-01 +8.752834E-03 +7.661211E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5561,30 +5521,32 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.389223E-01 -5.464846E-02 -1.061647E-01 -1.127094E-02 -1.313508E+00 -4.346493E-01 -4.161910E-02 -1.732150E-03 0.000000E+00 0.000000E+00 +2.474912E-01 +4.482820E-02 +2.558944E+00 +1.501846E+00 +2.498522E+00 +2.037541E+00 +4.592114E-01 +9.549920E-02 +2.651761E-03 +7.031834E-06 +6.728509E-03 +4.527283E-05 +7.206739E-02 +2.632777E-03 +1.258432E+00 +5.033118E-01 +8.325623E-01 +3.432848E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.016283E-01 -1.613053E-01 -5.599819E-01 -9.812234E-02 -5.139185E-01 -1.322866E-01 -2.373992E-01 -5.635838E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5595,10 +5557,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.644227E-02 +2.703482E-04 +9.177910E-01 +3.528077E-01 +4.331510E-01 +6.954968E-02 +2.750792E-01 +3.874842E-02 +5.245578E-02 +2.751608E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.100342E-01 +8.936587E-03 +1.444636E-01 +1.217721E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5607,22 +5583,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.028376E-01 +4.114311E-02 +1.409534E-04 +1.986787E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.913120E-03 -8.486266E-06 -9.098084E-02 -8.277514E-03 0.000000E+00 0.000000E+00 -2.641663E-01 -6.553611E-02 -4.793354E-02 -2.069463E-03 0.000000E+00 0.000000E+00 +2.252382E-03 +5.073226E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5643,18 +5617,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.646738E-02 +2.711747E-04 +1.091128E-02 +1.190561E-04 +9.598634E-03 +5.702904E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.914111E-02 +8.492040E-04 +4.859163E-02 +2.361147E-03 0.000000E+00 0.000000E+00 -6.430714E-02 -4.135408E-03 -2.254006E-01 -5.080543E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5675,10 +5655,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.204163E-02 +4.858335E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +4.278990E-01 +1.061206E-01 +2.467626E-01 +3.061051E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5709,6 +5695,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.474672E-03 +5.587072E-05 +3.018962E-01 +5.003703E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5735,16 +5725,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.532915E-01 -2.349830E-02 0.000000E+00 0.000000E+00 -2.637807E-03 -6.958026E-06 -9.521605E-03 -9.066095E-05 -7.905417E-02 -6.249562E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5773,10 +5755,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.147382E-02 -2.649554E-03 -1.719918E-01 -1.490049E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5839,6 +5817,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.148943E-01 +1.583098E-02 +3.145520E-01 +5.430577E-02 +1.094922E-01 +1.198853E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5867,6 +5851,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.643295E-01 +6.464662E-02 +3.253838E-01 +5.116839E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5927,6 +5915,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.816236E-03 +7.772602E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5957,10 +5947,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.771011E-02 -3.136480E-04 -3.012324E-02 -9.074096E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5969,8 +5955,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.571548E-01 +5.132783E-02 +2.087595E-02 +2.190083E-04 +2.648409E-02 +3.512423E-04 0.000000E+00 0.000000E+00 +1.332148E-01 +1.774618E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5989,20 +5983,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.305564E-01 -1.704497E-02 -3.518664E-01 -6.212556E-02 -7.817833E-02 -6.111852E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.103340E+00 +1.240889E+00 +8.819452E-01 +3.181477E-01 +3.827031E-01 +1.404169E-01 0.000000E+00 0.000000E+00 +3.650407E-02 +1.332547E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6017,24 +6013,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.070770E-03 +8.227887E-05 0.000000E+00 0.000000E+00 -5.114916E-02 -2.616236E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.740424E-01 -8.028915E-02 -8.000570E-01 -3.176809E-01 -5.666391E-01 -2.831913E-01 -1.643713E-02 -2.701791E-04 0.000000E+00 0.000000E+00 +1.160355E-01 +5.419152E-03 +4.555830E-02 +2.075558E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6043,6 +6035,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.452794E-02 +1.982737E-03 +7.921897E-02 +6.275645E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6053,8 +6049,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.425066E-03 -2.030813E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6063,10 +6057,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.314479E-02 -3.987265E-03 -6.100963E-02 -3.722175E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6079,10 +6069,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.888042E-01 +1.912239E-01 +9.253612E-01 +2.196512E-01 +5.331610E-03 +2.842606E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +6.088258E-02 +3.706689E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6091,30 +6089,34 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.873816E-02 -9.749225E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.179053E-03 -3.818070E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.154173E-01 -1.332115E-02 -5.192203E-01 -1.359491E-01 0.000000E+00 0.000000E+00 +1.765580E-01 +1.679632E-02 +1.567743E+00 +1.480433E+00 +1.729034E+00 +1.162221E+00 +2.450066E-01 +5.312041E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +4.772601E-01 +1.750320E-01 +1.001997E+00 +4.479877E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6123,10 +6125,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.643669E-01 -3.773661E-02 -1.333650E-01 -1.778623E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6137,14 +6135,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.198859E-01 +9.794083E-03 +1.970259E-01 +1.355094E-02 +2.437112E-01 +5.939515E-02 +3.383869E-01 +1.145057E-01 +3.802531E-01 +1.445924E-01 0.000000E+00 0.000000E+00 -3.057922E-02 -4.821714E-04 -2.611439E-02 -4.539126E-04 0.000000E+00 0.000000E+00 +2.098808E-01 +4.404995E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6157,14 +6163,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.328371E-01 -6.083581E-02 -3.822069E-02 -1.398374E-03 -1.903328E-01 -2.231214E-02 -3.952764E-01 -1.486302E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6173,6 +6171,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.650113E-02 +1.619032E-03 +5.180023E-01 +1.718152E-01 +3.054682E-01 +9.331081E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6191,14 +6195,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.256222E-02 -1.578095E-04 -9.794148E-02 -9.592534E-03 -1.849303E-01 -1.553794E-02 -7.480357E-01 -1.929178E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6229,12 +6225,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.330682E-01 -1.770714E-02 -8.228934E-01 -3.735503E-01 -4.901155E-02 -2.402132E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6247,6 +6237,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.290812E-02 +1.666195E-04 +5.118466E-01 +2.619870E-01 +1.379429E-01 +1.766885E-02 +3.568103E-01 +6.413693E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6267,14 +6265,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.664911E-01 -2.771927E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.428902E-01 +2.041760E-02 +2.714910E-01 +7.137827E-02 +6.198367E-01 +1.870530E-01 +5.809933E-01 +2.020653E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6305,6 +6309,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.971393E-04 +4.860032E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6389,6 +6395,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.689765E-01 +2.855304E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6417,14 +6425,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.486338E-02 -2.012723E-03 -7.956432E-02 -6.330481E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +6.121427E-02 +3.747187E-03 +1.313244E-01 +9.930563E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6451,16 +6459,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.194798E-01 -1.427541E-02 -2.732161E-03 -7.464701E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.295197E-01 +1.677535E-02 +1.924219E-01 +2.512176E-02 +1.826581E-01 +3.336399E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6489,6 +6499,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.963040E-01 +2.117115E-01 +1.954654E-01 +1.664314E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6503,8 +6517,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.470039E-01 -2.992133E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6521,6 +6533,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.465142E-02 +3.921415E-04 +9.009686E-02 +8.117444E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6535,10 +6551,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.748612E-02 -3.057643E-04 -4.139057E-01 -1.021512E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6555,10 +6567,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.375350E-01 +7.745005E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.296036E-02 +5.271783E-04 +1.185548E-01 +1.257056E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6567,12 +6585,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.334625E-01 -1.130142E-02 -5.401229E-01 -1.621043E-01 -4.144518E-01 -1.156846E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6587,8 +6599,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.742732E-02 +5.994990E-03 +4.153920E-01 +8.269451E-02 +1.732018E-01 +2.586439E-02 0.000000E+00 0.000000E+00 +3.164105E-02 +1.001156E-03 +4.945695E-01 +1.153516E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6597,20 +6619,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.643310E-02 -9.299344E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.362808E-01 -5.091357E-02 -7.208810E-03 -5.196695E-05 -5.757630E-01 -2.687941E-01 -9.778317E-02 -4.820693E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6623,6 +6635,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.055273E-01 +4.669609E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6631,12 +6645,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.732678E-01 -1.393289E-01 -1.006063E-01 -1.012163E-02 0.000000E+00 0.000000E+00 +2.766028E-02 +7.650912E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6669,10 +6681,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.022896E-02 +2.522948E-03 +2.586997E-01 +6.692555E-02 +1.918447E-02 +3.680440E-04 0.000000E+00 0.000000E+00 -6.086518E-02 -3.704570E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6701,20 +6717,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.399905E-04 +7.055840E-07 0.000000E+00 0.000000E+00 -4.249148E-02 -1.805526E-03 -1.045383E+00 -4.214718E-01 -3.878770E-02 -1.504486E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.895932E-02 +1.517828E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6737,12 +6751,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.784801E-02 -7.755114E-04 -6.779315E-01 -3.352682E-01 -3.026790E-01 -9.161460E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6767,20 +6775,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.879990E-01 -2.203070E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.811002E-01 -4.685901E-01 -1.404927E-01 -1.080893E-02 0.000000E+00 0.000000E+00 +2.310985E-01 +5.309190E-02 0.000000E+00 0.000000E+00 +6.972879E-02 +4.862104E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6801,22 +6807,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.572692E-01 -2.087347E-01 -2.362405E-01 -4.910426E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.965530E-01 -1.979508E-02 -3.230928E-02 -1.043889E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.355608E+00 +6.784243E-01 +1.559912E+00 +6.765918E-01 +4.878546E-01 +1.956002E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6835,16 +6839,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.751268E-03 -3.066940E-06 -1.553462E-01 -2.413243E-02 -1.672350E-01 -2.796753E-02 0.000000E+00 0.000000E+00 -1.836178E-02 -3.371549E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6853,6 +6849,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.239030E-02 +8.535968E-03 +7.362813E-02 +2.487558E-03 +1.539035E-01 +1.472121E-02 +7.239598E-02 +5.241178E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6881,6 +6885,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.299792E-01 +9.530852E-02 +3.641896E-02 +1.168215E-03 +3.511255E-01 +1.232891E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6929,6 +6939,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.815281E-03 +1.455637E-05 +2.447765E-02 +5.991556E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6941,10 +6955,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.696487E-02 -1.366401E-03 -2.858087E-01 -8.168661E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6961,6 +6971,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.509075E-01 +5.120090E-02 +6.346139E-02 +4.027348E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6973,10 +6987,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.258698E-01 -1.150919E-02 -6.798857E-01 -1.661025E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6995,10 +7005,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.503760E-02 -7.231393E-03 -3.103135E-02 -9.629449E-04 +1.279297E-02 +8.440309E-05 +1.992059E-01 +3.968299E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7007,12 +7017,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.008727E+00 -3.651038E-01 -9.120679E-01 -2.558101E-01 -8.721740E-03 -7.606874E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7029,10 +7033,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.649741E-01 -2.721647E-02 -2.540880E-02 -6.456072E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7041,12 +7041,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.739345E-02 -7.504010E-04 -1.627060E-02 -2.647323E-04 0.000000E+00 0.000000E+00 +2.055205E-01 +2.183994E-02 +1.147614E-01 +9.795585E-03 +1.862626E-01 +3.469375E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7075,6 +7077,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.923698E+00 +1.294950E+00 +8.345353E-01 +3.317169E-01 +9.485640E-02 +5.815957E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7103,12 +7111,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.252805E-03 +5.260317E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.309730E-01 -2.570742E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7141,14 +7149,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.115905E+00 -4.082126E-01 -2.502204E-02 -6.261023E-04 +9.708035E-02 +9.424594E-03 +3.352764E-01 +4.028247E-02 +4.250527E-01 +8.344337E-02 +2.283848E-02 +5.215963E-04 0.000000E+00 0.000000E+00 -3.825879E-03 -1.463735E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7167,16 +7177,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.151722E-01 +4.629909E-02 +4.760109E-01 +1.931711E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.880574E-01 +4.653885E-02 +3.526314E-01 +4.256262E-02 +1.257097E-01 +1.580294E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.975077E-01 -1.600492E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7195,8 +7213,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.312274E-01 +9.446273E-02 0.000000E+00 0.000000E+00 +3.356486E-01 +8.519671E-02 +1.924860E-01 +2.805063E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7209,8 +7233,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.269137E-01 -1.610709E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7227,6 +7249,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.025814E-01 +4.103921E-02 +3.047342E-01 +5.638103E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7249,8 +7275,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.207099E-01 -4.871286E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7283,8 +7307,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.075694E-02 -8.236821E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7315,14 +7337,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.767451E-02 -3.123882E-04 -8.696348E-02 -7.562648E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.291473E-01 +1.667902E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7339,8 +7359,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.926562E-02 +1.541789E-03 0.000000E+00 0.000000E+00 +3.675944E-02 +1.351256E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7349,12 +7373,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.690390E-01 -2.753878E-02 -1.145975E-01 -7.543314E-03 0.000000E+00 0.000000E+00 +6.030587E-02 +3.636797E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7371,6 +7393,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.969216E-03 +8.044683E-05 +2.539237E-01 +3.783876E-02 +6.932239E-02 +4.805594E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7379,12 +7407,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.712297E-01 -3.081804E-02 -1.728614E-01 -2.076746E-02 -6.826625E-03 -4.660281E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7413,12 +7435,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.649622E-02 -7.020499E-04 -4.161446E-01 -8.806248E-02 -6.348647E-01 -9.989011E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7451,8 +7467,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.204982E-02 -1.451982E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7503,6 +7517,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.179485E-01 +1.391185E-02 +4.249402E-01 +1.805742E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7531,6 +7549,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.537757E-01 +1.696554E-01 +8.876105E-01 +2.032335E-01 +1.666064E-01 +2.775768E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7553,16 +7577,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.282300E-01 -4.986445E-02 -2.206365E-02 -4.868048E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +7.024841E-01 +2.020292E-01 +2.199558E-01 +3.376160E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7585,12 +7609,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.875562E-01 -3.517735E-02 -7.738485E-01 -2.045432E-01 -4.058292E-01 -8.243188E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7621,18 +7639,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.994213E-01 -2.494217E-01 -2.744213E-02 -7.530707E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.949405E-02 -7.018464E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7661,10 +7673,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.459022E-03 -7.155505E-05 -3.090219E-01 -9.549453E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7685,8 +7693,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.226097E-01 -1.395661E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7719,12 +7725,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.316493E-01 -1.591047E-02 -6.576990E-01 -1.877309E-01 0.000000E+00 0.000000E+00 +1.260572E-01 +1.589042E-02 +1.006866E-01 +1.013780E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7753,14 +7759,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.546941E-01 -7.107193E-02 -3.321871E-01 -6.515778E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +6.305037E-02 +3.751423E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7791,6 +7795,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.434563E-02 +1.179623E-03 +5.931758E-01 +3.518576E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7909,6 +7917,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.901538E-02 +3.482815E-03 +1.298430E+00 +6.450758E-01 +3.665245E-02 +1.343402E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7927,12 +7941,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.249399E-02 -4.667888E-03 -1.814462E-01 -3.292273E-02 -7.515014E-02 -5.647544E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7959,12 +7967,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.109046E-01 -8.622176E-02 -2.380422E-01 -3.181133E-02 -1.087532E-01 -6.035666E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7993,12 +7995,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.246408E-03 -2.752480E-05 -3.760855E-02 -1.251291E-03 -5.951856E-02 -3.037461E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8027,8 +8023,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.499600E-02 -2.248801E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8135,14 +8129,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.020604E-02 +1.041632E-04 +1.994839E-01 +3.979382E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.395650E-01 -1.947839E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8165,20 +8161,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.822292E-01 -4.829456E-02 -6.080756E-02 -3.418907E-03 +2.270281E-03 +5.154175E-06 +2.547678E-02 +6.490664E-04 0.000000E+00 0.000000E+00 -1.804108E-01 -2.405851E-02 -5.413665E-02 -2.930777E-03 -4.041026E-01 -8.374291E-02 -5.886833E-02 -3.465481E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8201,16 +8189,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.093664E-02 -5.032006E-03 -5.703113E-02 -3.252549E-03 -7.402747E-01 -2.678271E-01 -2.389658E-02 -5.209213E-04 -5.348373E-01 -8.455667E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8239,12 +8217,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.453284E-01 -1.497004E-01 -1.851055E-01 -1.721223E-02 -1.038418E-01 -1.078313E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8263,8 +8235,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.010211E-02 -3.612264E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8297,8 +8267,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.319919E-02 -3.629541E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8331,8 +8299,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.292774E-01 -8.674372E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8475,8 +8441,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.056616E-01 -4.198926E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8509,8 +8473,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.349640E-02 -5.401721E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.708003E-03 +5.941330E-05 +1.376862E-01 +1.895748E-02 +5.206040E-02 +2.710285E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8537,14 +8579,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.494349E-01 -2.233077E-02 -2.761806E-01 -7.611993E-02 -6.289098E-02 -3.955276E-03 -2.612667E-02 -6.826026E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8571,12 +8605,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.326118E-01 -5.410823E-02 -9.912199E-03 -9.825168E-05 -3.954397E-03 -1.563725E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8605,8 +8633,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.263842E-02 -5.276340E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8749,12 +8775,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.601224E-01 -1.283387E-01 -4.851011E-01 -1.238875E-01 -1.351214E-02 -1.825779E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8781,12 +8801,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.746478E-03 -6.000792E-05 -1.551243E+00 -5.797918E-01 -1.974875E-01 -1.837196E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8817,8 +8831,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.541705E-01 -4.325743E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -9053,8 +9065,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.496519E-02 -4.948061E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -9087,8 +9097,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.596404E-01 -2.548506E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -9115,8 +9123,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.454011E-02 -6.022168E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -9149,8 +9155,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.235276E-01 -1.525907E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -9359,10 +9363,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.668786E-02 -2.784846E-04 -2.256035E-01 -5.089693E-02 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/tests/test_fixed_source/results_true.dat b/tests/test_fixed_source/results_true.dat index b3def050e8..c4019d9c80 100644 --- a/tests/test_fixed_source/results_true.dat +++ b/tests/test_fixed_source/results_true.dat @@ -1,6 +1,6 @@ tally 1: -4.563929E+02 -2.091711E+04 +4.518781E+02 +2.056383E+04 leakage: -9.780000E+00 -9.566400E+00 +9.750000E+00 +9.508100E+00 diff --git a/tests/test_infinite_cell/results_true.dat b/tests/test_infinite_cell/results_true.dat index 0b8d929518..1cbb837696 100644 --- a/tests/test_infinite_cell/results_true.dat +++ b/tests/test_infinite_cell/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.788797E-02 1.378250E-03 +9.757696E-02 3.308939E-03 diff --git a/tests/test_lattice/results_true.dat b/tests/test_lattice/results_true.dat index cf51dd5d73..1d20d33c47 100644 --- a/tests/test_lattice/results_true.dat +++ b/tests/test_lattice/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.042388E+00 1.575316E-01 +9.682250E-01 3.051607E-02 diff --git a/tests/test_lattice_hex/results_true.dat b/tests/test_lattice_hex/results_true.dat index b88285ff2e..0b7aa64b49 100644 --- a/tests/test_lattice_hex/results_true.dat +++ b/tests/test_lattice_hex/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.831014E-01 2.269849E-02 +2.726715E-01 1.182884E-02 diff --git a/tests/test_lattice_mixed/results_true.dat b/tests/test_lattice_mixed/results_true.dat index 7cea76ba00..013e57b258 100644 --- a/tests/test_lattice_mixed/results_true.dat +++ b/tests/test_lattice_mixed/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.922449E-01 1.281824E-02 +1.012317E+00 2.704182E-02 diff --git a/tests/test_lattice_multiple/results_true.dat b/tests/test_lattice_multiple/results_true.dat index 6caffdd953..bf50a27562 100644 --- a/tests/test_lattice_multiple/results_true.dat +++ b/tests/test_lattice_multiple/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.005983E+00 2.248579E-02 +9.090848E-01 2.183589E-02 diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index 45891fc300..c9be10e74a 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -1,19 +1,19 @@ material group in nuclide mean std. dev. -0 1 1 total 0.419289 0.01638 material group in nuclide mean std. dev. -0 1 1 total 0.07774 0.003273 material group in group out nuclide mean std. dev. -0 1 1 1 total 0.352665 0.015654 material group out nuclide mean std. dev. -0 1 1 total 1 0.119622 material group in nuclide mean std. dev. -0 2 1 total 0.247316 0.009562 material group in nuclide mean std. dev. +0 1 1 total 0.410245 0.027062 material group in nuclide mean std. dev. +0 1 1 total 0.078746 0.008749 material group in group out nuclide mean std. dev. +0 1 1 1 total 0.344581 0.025142 material group out nuclide mean std. dev. +0 1 1 total 1 0.056776 material group in nuclide mean std. dev. +0 2 1 total 0.24133 0.020122 material group in nuclide mean std. dev. 0 2 1 total 0 0 material group in group out nuclide mean std. dev. -0 2 1 1 total 0.244838 0.009996 material group out nuclide mean std. dev. +0 2 1 1 total 0.240146 0.020265 material group out nuclide mean std. dev. 0 2 1 total 0 0 material group in nuclide mean std. dev. -0 3 1 total 0.409938 0.042262 material group in nuclide mean std. dev. +0 3 1 total 0.421036 0.034969 material group in nuclide mean std. dev. 0 3 1 total 0 0 material group in group out nuclide mean std. dev. -0 3 1 1 total 0.403354 0.041386 material group out nuclide mean std. dev. +0 3 1 1 total 0.413828 0.034945 material group out nuclide mean std. dev. 0 3 1 total 0 0 material group in nuclide mean std. dev. -0 4 1 total 0.344007 0.05352 material group in nuclide mean std. dev. +0 4 1 total 0.330201 0.044281 material group in nuclide mean std. dev. 0 4 1 total 0 0 material group in group out nuclide mean std. dev. -0 4 1 1 total 0.340438 0.052067 material group out nuclide mean std. dev. +0 4 1 1 total 0.324648 0.043395 material group out nuclide mean std. dev. 0 4 1 total 0 0 material group in nuclide mean std. dev. 0 5 1 total 0 0 material group in nuclide mean std. dev. 0 5 1 total 0 0 material group in group out nuclide mean std. dev. @@ -30,20 +30,20 @@ 0 8 1 total 0 0 material group in nuclide mean std. dev. 0 8 1 total 0 0 material group in group out nuclide mean std. dev. 0 8 1 1 total 0 0 material group out nuclide mean std. dev. -0 8 1 total 0 0 material group in nuclide mean std. dev. -0 9 1 total 0.751873 0.559701 material group in nuclide mean std. dev. -0 9 1 total 0 0 material group in group out nuclide mean std. dev. -0 9 1 1 total 0.695491 0.50757 material group out nuclide mean std. dev. +0 8 1 total 0 0 material group in nuclide mean std. dev. +0 9 1 total 0 0 material group in nuclide mean std. dev. +0 9 1 total 0 0 material group in group out nuclide mean std. dev. +0 9 1 1 total 0 0 material group out nuclide mean std. dev. 0 9 1 total 0 0 material group in nuclide mean std. dev. 0 10 1 total 0 0 material group in nuclide mean std. dev. 0 10 1 total 0 0 material group in group out nuclide mean std. dev. 0 10 1 1 total 0 0 material group out nuclide mean std. dev. 0 10 1 total 0 0 material group in nuclide mean std. dev. -0 11 1 total 0.457329 0.403578 material group in nuclide mean std. dev. +0 11 1 total 0.467451 0.672448 material group in nuclide mean std. dev. 0 11 1 total 0 0 material group in group out nuclide mean std. dev. -0 11 1 1 total 0.446737 0.392775 material group out nuclide mean std. dev. -0 11 1 total 0 0 material group in nuclide mean std. dev. -0 12 1 total 0.574978 0.38864 material group in nuclide mean std. dev. -0 12 1 total 0 0 material group in group out nuclide mean std. dev. -0 12 1 1 total 0.559478 0.377512 material group out nuclide mean std. dev. +0 11 1 1 total 0.444299 0.638051 material group out nuclide mean std. dev. +0 11 1 total 0 0 material group in nuclide mean std. dev. +0 12 1 total 0 0 material group in nuclide mean std. dev. +0 12 1 total 0 0 material group in group out nuclide mean std. dev. +0 12 1 1 total 0 0 material group out nuclide mean std. dev. 0 12 1 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index 4936da4cec..c86696a586 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,5 +1,5 @@ - sum(distribcell) group in nuclide mean std. dev. -0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 total 0.720213 1.424323 sum(distribcell) group in nuclide mean std. dev. -0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 total 0 0 sum(distribcell) group in group out nuclide mean std. dev. -0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 1 total 0.70466 1.403916 sum(distribcell) group out nuclide mean std. dev. + sum(distribcell) group in nuclide mean std. dev. +0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 total 0 0 sum(distribcell) group in nuclide mean std. dev. +0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 total 0 0 sum(distribcell) group in group out nuclide mean std. dev. +0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 1 total 0 0 sum(distribcell) group out nuclide mean std. dev. 0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_hdf5/results_true.dat b/tests/test_mgxs_library_hdf5/results_true.dat index eec581046d..8364500615 100644 --- a/tests/test_mgxs_library_hdf5/results_true.dat +++ b/tests/test_mgxs_library_hdf5/results_true.dat @@ -1,56 +1,56 @@ domain=1 type=transport -[ 0.38437891 0.81208747] -[ 0.01648997 0.07418959] +[ 0.37396684 0.80006722] +[ 0.02769982 0.08850146] domain=1 type=nu-fission -[ 0.02127008 0.69604034] -[ 0.0008939 0.05345764] +[ 0.02299634 0.70592004] +[ 0.00148378 0.12890576] domain=1 type=nu-scatter matrix -[[ 3.49923892e-01 1.73140769e-04] - [ 1.94810926e-03 3.79607212e-01]] -[[ 0.01664928 0.0001732 ] - [ 0.00195193 0.04007819]] +[[ 0.34086643 0.00069685] + [ 0. 0.37700333]] +[[ 0.02663397 0.0001772 ] + [ 0. 0.06914186]] domain=1 type=chi [ 1. 0.] -[ 0.11962178 0. ] +[ 0.05677619 0. ] domain=2 type=transport -[ 0.24504295 0.26645769] -[ 0.00882749 0.05220872] +[ 0.23796562 0.27436119] +[ 0.02150652 0.05068359] domain=2 type=nu-fission [ 0. 0.] [ 0. 0.] domain=2 type=nu-scatter matrix -[[ 0.24365718 0. ] - [ 0. 0.25478661]] -[[ 0.00908307 0. ] - [ 0. 0.05556256]] +[[ 0.23622579 0.00043496] + [ 0. 0.27436119]] +[[ 0.02164652 0.00043568] + [ 0. 0.05068359]] domain=2 type=chi [ 0. 0.] [ 0. 0.] domain=3 type=transport -[ 0.28227749 1.42731974] -[ 0.03724175 0.24712746] +[ 0.28810874 1.42423201] +[ 0.03173526 0.17486068] domain=3 type=nu-fission [ 0. 0.] [ 0. 0.] domain=3 type=nu-scatter matrix -[[ 0.25396726 0.02727268] - [ 0. 1.37652669]] -[[ 0.03617307 0.00180698] - [ 0. 0.2402569 ]] +[[ 0.25843468 0.02889657] + [ 0.00195588 1.36653358]] +[[ 0.03144996 0.0015335 ] + [ 0.00120568 0.17179408]] domain=3 type=chi [ 0. 0.] [ 0. 0.] domain=4 type=transport -[ 0.25572316 1.17976682] -[ 0.05191655 0.22938034] +[ 0.24606392 1.21935024] +[ 0.03881796 0.34515333] domain=4 type=nu-fission [ 0. 0.] [ 0. 0.] domain=4 type=nu-scatter matrix -[[ 0.23297756 0.02228141] - [ 0. 1.14680862]] -[[ 0.04977114 0.00262525] - [ 0. 0.22219839]] +[[ 0.22348748 0.02170811] + [ 0. 1.16429193]] +[[ 0.03791013 0.00162276] + [ 0. 0.33459821]] domain=4 type=chi [ 0. 0.] [ 0. 0.] @@ -111,16 +111,16 @@ domain=8 type=chi [ 0. 0.] [ 0. 0.] domain=9 type=transport -[ 0.50403601 1.68709544] -[ 0.37962374 2.53662237] +[ 0. 0.] +[ 0. 0.] domain=9 type=nu-fission [ 0. 0.] [ 0. 0.] domain=9 type=nu-scatter matrix -[[ 0.50403601 0. ] - [ 0. 1.41795483]] -[[ 0.37962374 0. ] - [ 0. 2.15802716]] +[[ 0. 0.] + [ 0. 0.]] +[[ 0. 0.] + [ 0. 0.]] domain=9 type=chi [ 0. 0.] [ 0. 0.] @@ -139,30 +139,30 @@ domain=10 type=chi [ 0. 0.] [ 0. 0.] domain=11 type=transport -[ 0.30282618 1.00614519] -[ 0.40131081 1.09163785] +[ 0.43011949 0.85701927] +[ 0.69238877 1.94756366] domain=11 type=nu-fission [ 0. 0.] [ 0. 0.] domain=11 type=nu-scatter matrix -[[ 0.27567871 0.02714747] - [ 0. 0.95792921]] -[[ 0.38567601 0.02000859] - [ 0. 1.05195936]] +[[ 0.40474879 0.02537069] + [ 0. 0.59226474]] +[[ 0.65713809 0.03587957] + [ 0. 1.62427067]] domain=11 type=chi [ 0. 0.] [ 0. 0.] domain=12 type=transport -[ 0.25593293 1.11334475] -[ 0.26842571 0.98867569] +[ 0. 0.] +[ 0. 0.] domain=12 type=nu-fission [ 0. 0.] [ 0. 0.] domain=12 type=nu-scatter matrix -[[ 0.22631045 0.02962248] - [ 0. 1.07168976]] -[[ 0.25487194 0.0177599 ] - [ 0. 0.95829029]] +[[ 0. 0.] + [ 0. 0.]] +[[ 0. 0.] + [ 0. 0.]] domain=12 type=chi [ 0. 0.] [ 0. 0.] diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index 7618512689..f16afb897c 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -1,42 +1,42 @@ material group in nuclide mean std. dev. -1 1 1 total 0.384379 0.01649 -0 1 2 total 0.812087 0.07419 material group in nuclide mean std. dev. -1 1 1 total 0.02127 0.000894 -0 1 2 total 0.69604 0.053458 material group in group out nuclide mean std. dev. -3 1 1 1 total 0.349924 0.016649 -2 1 1 2 total 0.000173 0.000173 -1 1 2 1 total 0.001948 0.001952 -0 1 2 2 total 0.379607 0.040078 material group out nuclide mean std. dev. -1 1 1 total 1 0.119622 +1 1 1 total 0.373967 0.027700 +0 1 2 total 0.800067 0.088501 material group in nuclide mean std. dev. +1 1 1 total 0.022996 0.001484 +0 1 2 total 0.705920 0.128906 material group in group out nuclide mean std. dev. +3 1 1 1 total 0.340866 0.026634 +2 1 1 2 total 0.000697 0.000177 +1 1 2 1 total 0.000000 0.000000 +0 1 2 2 total 0.377003 0.069142 material group out nuclide mean std. dev. +1 1 1 total 1 0.056776 0 1 2 total 0 0.000000 material group in nuclide mean std. dev. -1 2 1 total 0.245043 0.008827 -0 2 2 total 0.266458 0.052209 material group in nuclide mean std. dev. +1 2 1 total 0.237966 0.021507 +0 2 2 total 0.274361 0.050684 material group in nuclide mean std. dev. 1 2 1 total 0 0 0 2 2 total 0 0 material group in group out nuclide mean std. dev. -3 2 1 1 total 0.243657 0.009083 -2 2 1 2 total 0.000000 0.000000 +3 2 1 1 total 0.236226 0.021647 +2 2 1 2 total 0.000435 0.000436 1 2 2 1 total 0.000000 0.000000 -0 2 2 2 total 0.254787 0.055563 material group out nuclide mean std. dev. +0 2 2 2 total 0.274361 0.050684 material group out nuclide mean std. dev. 1 2 1 total 0 0 0 2 2 total 0 0 material group in nuclide mean std. dev. -1 3 1 total 0.282277 0.037242 -0 3 2 total 1.427320 0.247127 material group in nuclide mean std. dev. +1 3 1 total 0.288109 0.031735 +0 3 2 total 1.424232 0.174861 material group in nuclide mean std. dev. 1 3 1 total 0 0 0 3 2 total 0 0 material group in group out nuclide mean std. dev. -3 3 1 1 total 0.253967 0.036173 -2 3 1 2 total 0.027273 0.001807 -1 3 2 1 total 0.000000 0.000000 -0 3 2 2 total 1.376527 0.240257 material group out nuclide mean std. dev. +3 3 1 1 total 0.258435 0.031450 +2 3 1 2 total 0.028897 0.001533 +1 3 2 1 total 0.001956 0.001206 +0 3 2 2 total 1.366534 0.171794 material group out nuclide mean std. dev. 1 3 1 total 0 0 0 3 2 total 0 0 material group in nuclide mean std. dev. -1 4 1 total 0.255723 0.051917 -0 4 2 total 1.179767 0.229380 material group in nuclide mean std. dev. +1 4 1 total 0.246064 0.038818 +0 4 2 total 1.219350 0.345153 material group in nuclide mean std. dev. 1 4 1 total 0 0 0 4 2 total 0 0 material group in group out nuclide mean std. dev. -3 4 1 1 total 0.232978 0.049771 -2 4 1 2 total 0.022281 0.002625 +3 4 1 1 total 0.223487 0.037910 +2 4 1 2 total 0.021708 0.001623 1 4 2 1 total 0.000000 0.000000 -0 4 2 2 total 1.146809 0.222198 material group out nuclide mean std. dev. +0 4 2 2 total 1.164292 0.334598 material group out nuclide mean std. dev. 1 4 1 total 0 0 0 4 2 total 0 0 material group in nuclide mean std. dev. 1 5 1 total 0 0 @@ -78,15 +78,15 @@ 1 8 2 1 total 0 0 0 8 2 2 total 0 0 material group out nuclide mean std. dev. 1 8 1 total 0 0 -0 8 2 total 0 0 material group in nuclide mean std. dev. -1 9 1 total 0.504036 0.379624 -0 9 2 total 1.687095 2.536622 material group in nuclide mean std. dev. +0 8 2 total 0 0 material group in nuclide mean std. dev. 1 9 1 total 0 0 -0 9 2 total 0 0 material group in group out nuclide mean std. dev. -3 9 1 1 total 0.504036 0.379624 -2 9 1 2 total 0.000000 0.000000 -1 9 2 1 total 0.000000 0.000000 -0 9 2 2 total 1.417955 2.158027 material group out nuclide mean std. dev. +0 9 2 total 0 0 material group in nuclide mean std. dev. +1 9 1 total 0 0 +0 9 2 total 0 0 material group in group out nuclide mean std. dev. +3 9 1 1 total 0 0 +2 9 1 2 total 0 0 +1 9 2 1 total 0 0 +0 9 2 2 total 0 0 material group out nuclide mean std. dev. 1 9 1 total 0 0 0 9 2 total 0 0 material group in nuclide mean std. dev. 1 10 1 total 0 0 @@ -99,23 +99,23 @@ 0 10 2 2 total 0 0 material group out nuclide mean std. dev. 1 10 1 total 0 0 0 10 2 total 0 0 material group in nuclide mean std. dev. -1 11 1 total 0.302826 0.401311 -0 11 2 total 1.006145 1.091638 material group in nuclide mean std. dev. +1 11 1 total 0.430119 0.692389 +0 11 2 total 0.857019 1.947564 material group in nuclide mean std. dev. 1 11 1 total 0 0 0 11 2 total 0 0 material group in group out nuclide mean std. dev. -3 11 1 1 total 0.275679 0.385676 -2 11 1 2 total 0.027147 0.020009 +3 11 1 1 total 0.404749 0.657138 +2 11 1 2 total 0.025371 0.035880 1 11 2 1 total 0.000000 0.000000 -0 11 2 2 total 0.957929 1.051959 material group out nuclide mean std. dev. +0 11 2 2 total 0.592265 1.624271 material group out nuclide mean std. dev. 1 11 1 total 0 0 -0 11 2 total 0 0 material group in nuclide mean std. dev. -1 12 1 total 0.255933 0.268426 -0 12 2 total 1.113345 0.988676 material group in nuclide mean std. dev. +0 11 2 total 0 0 material group in nuclide mean std. dev. 1 12 1 total 0 0 -0 12 2 total 0 0 material group in group out nuclide mean std. dev. -3 12 1 1 total 0.226310 0.254872 -2 12 1 2 total 0.029622 0.017760 -1 12 2 1 total 0.000000 0.000000 -0 12 2 2 total 1.071690 0.958290 material group out nuclide mean std. dev. +0 12 2 total 0 0 material group in nuclide mean std. dev. +1 12 1 total 0 0 +0 12 2 total 0 0 material group in group out nuclide mean std. dev. +3 12 1 1 total 0 0 +2 12 1 2 total 0 0 +1 12 2 1 total 0 0 +0 12 2 2 total 0 0 material group out nuclide mean std. dev. 1 12 1 total 0 0 0 12 2 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index 23ac0e423d..c3d1093018 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -1,14 +1,14 @@ material group in nuclide mean std. dev. -34 1 1 U-234 0.000000 0.000000 -35 1 1 U-235 0.008559 0.001742 -36 1 1 U-236 0.002643 0.000794 -37 1 1 U-238 0.213622 0.010911 +34 1 1 U-234 0.000164 0.000175 +35 1 1 U-235 0.008231 0.001132 +36 1 1 U-236 0.001233 0.001217 +37 1 1 U-238 0.202077 0.017282 38 1 1 Np-237 0.000000 0.000000 39 1 1 Pu-238 0.000000 0.000000 -40 1 1 Pu-239 0.005787 0.001050 -41 1 1 Pu-240 0.005702 0.000850 -42 1 1 Pu-241 0.000869 0.000366 -43 1 1 Pu-242 0.000655 0.000537 +40 1 1 Pu-239 0.004777 0.001236 +41 1 1 Pu-240 0.005654 0.000687 +42 1 1 Pu-241 0.001077 0.000847 +43 1 1 Pu-242 0.000000 0.000000 44 1 1 Am-241 0.000000 0.000000 45 1 1 Am-242m 0.000000 0.000000 46 1 1 Am-243 0.000000 0.000000 @@ -16,74 +16,74 @@ 48 1 1 Cm-243 0.000000 0.000000 49 1 1 Cm-244 0.000000 0.000000 50 1 1 Cm-245 0.000000 0.000000 -51 1 1 Mo-95 0.000302 0.000216 -52 1 1 Tc-99 0.000782 0.000434 -53 1 1 Ru-101 0.000346 0.000212 +51 1 1 Mo-95 0.000563 0.000254 +52 1 1 Tc-99 0.000625 0.000364 +53 1 1 Ru-101 0.000129 0.000180 54 1 1 Ru-103 0.000000 0.000000 55 1 1 Ag-109 0.000000 0.000000 56 1 1 Xe-135 0.000000 0.000000 -57 1 1 Cs-133 0.000189 0.000264 -58 1 1 Nd-143 0.000721 0.000364 -59 1 1 Nd-145 0.000637 0.000253 -60 1 1 Sm-147 0.000009 0.000238 +57 1 1 Cs-133 0.000352 0.000274 +58 1 1 Nd-143 0.000991 0.000577 +59 1 1 Nd-145 0.000517 0.000369 +60 1 1 Sm-147 0.000000 0.000000 61 1 1 Sm-149 0.000000 0.000000 -62 1 1 Sm-150 0.000003 0.000243 +62 1 1 Sm-150 0.000191 0.000175 63 1 1 Sm-151 0.000000 0.000000 -64 1 1 Sm-152 0.000874 0.000388 -65 1 1 Eu-153 0.000173 0.000173 +64 1 1 Sm-152 0.001106 0.000310 +65 1 1 Eu-153 0.000174 0.000174 66 1 1 Gd-155 0.000000 0.000000 -67 1 1 O-16 0.142506 0.008222 -0 1 2 U-234 0.001948 0.001952 -1 1 2 U-235 0.179956 0.028209 +67 1 1 O-16 0.146107 0.011033 +0 1 2 U-234 0.000000 0.000000 +1 1 2 U-235 0.175076 0.016125 2 1 2 U-236 0.000000 0.000000 -3 1 2 U-238 0.239279 0.039048 +3 1 2 U-238 0.216781 0.038123 4 1 2 Np-237 0.000000 0.000000 5 1 2 Pu-238 0.000000 0.000000 -6 1 2 Pu-239 0.159745 0.015751 -7 1 2 Pu-240 0.007792 0.003677 -8 1 2 Pu-241 0.017533 0.003806 +6 1 2 Pu-239 0.159673 0.015238 +7 1 2 Pu-240 0.018720 0.005305 +8 1 2 Pu-241 0.022464 0.009775 9 1 2 Pu-242 0.000000 0.000000 -10 1 2 Am-241 0.000000 0.000000 +10 1 2 Am-241 0.001872 0.001877 11 1 2 Am-242m 0.000000 0.000000 12 1 2 Am-243 0.000000 0.000000 13 1 2 Cm-242 0.000000 0.000000 14 1 2 Cm-243 0.000000 0.000000 15 1 2 Cm-244 0.000000 0.000000 16 1 2 Cm-245 0.000000 0.000000 -17 1 2 Mo-95 0.002250 0.004232 -18 1 2 Tc-99 0.003544 0.002528 +17 1 2 Mo-95 0.000000 0.000000 +18 1 2 Tc-99 0.000000 0.000000 19 1 2 Ru-101 0.000000 0.000000 20 1 2 Ru-103 0.000000 0.000000 21 1 2 Ag-109 0.000000 0.000000 -22 1 2 Xe-135 0.027274 0.004025 -23 1 2 Cs-133 0.000000 0.000000 -24 1 2 Nd-143 0.006532 0.002517 -25 1 2 Nd-145 0.001948 0.001952 +22 1 2 Xe-135 0.014792 0.004201 +23 1 2 Cs-133 0.001872 0.001877 +24 1 2 Nd-143 0.007258 0.003270 +25 1 2 Nd-145 0.003755 0.002966 26 1 2 Sm-147 0.000000 0.000000 -27 1 2 Sm-149 0.007792 0.005701 -28 1 2 Sm-150 0.000000 0.000000 -29 1 2 Sm-151 0.000000 0.000000 +27 1 2 Sm-149 0.001872 0.001877 +28 1 2 Sm-150 0.001872 0.001877 +29 1 2 Sm-151 0.003744 0.002309 30 1 2 Sm-152 0.000000 0.000000 -31 1 2 Eu-153 0.001686 0.001968 +31 1 2 Eu-153 0.000000 0.000000 32 1 2 Gd-155 0.000000 0.000000 -33 1 2 O-16 0.154807 0.023798 material group in nuclide mean std. dev. -34 1 1 U-234 6.771527e-06 2.982583e-07 -35 1 1 U-235 9.687933e-03 4.305720e-04 -36 1 1 U-236 6.279974e-05 3.653120e-06 -37 1 1 U-238 6.335930e-03 4.715525e-04 -38 1 1 Np-237 1.237030e-05 6.333955e-07 -39 1 1 Pu-238 7.369063e-06 5.017525e-07 -40 1 1 Pu-239 4.007893e-03 2.607619e-04 -41 1 1 Pu-240 6.479096e-05 3.728060e-06 -42 1 1 Pu-241 1.074454e-03 4.688479e-05 -43 1 1 Pu-242 5.512610e-06 2.976651e-07 -44 1 1 Am-241 1.088373e-06 8.489934e-08 -45 1 1 Am-242m 1.143307e-06 9.912400e-08 -46 1 1 Am-243 7.745526e-07 5.413923e-08 -47 1 1 Cm-242 4.311566e-07 1.922427e-08 -48 1 1 Cm-243 2.363328e-07 2.235666e-08 -49 1 1 Cm-244 2.840125e-07 2.412051e-08 -50 1 1 Cm-245 3.017505e-07 1.594090e-08 +33 1 2 O-16 0.170318 0.040164 material group in nuclide mean std. dev. +34 1 1 U-234 7.238811e-06 5.898159e-07 +35 1 1 U-235 1.025668e-02 7.748371e-04 +36 1 1 U-236 8.347436e-05 5.733633e-06 +37 1 1 U-238 7.211700e-03 6.985444e-04 +38 1 1 Np-237 1.316022e-05 1.028609e-06 +39 1 1 Pu-238 7.923472e-06 5.003103e-07 +40 1 1 Pu-239 4.217305e-03 3.227135e-04 +41 1 1 Pu-240 7.114707e-05 5.058746e-06 +42 1 1 Pu-241 1.117266e-03 6.330109e-05 +43 1 1 Pu-242 5.957920e-06 5.003279e-07 +44 1 1 Am-241 1.271200e-06 6.380801e-08 +45 1 1 Am-242m 1.105610e-06 5.834143e-08 +46 1 1 Am-243 8.498728e-07 6.946281e-08 +47 1 1 Cm-242 4.705032e-07 3.420756e-08 +48 1 1 Cm-243 2.054524e-07 1.656685e-08 +49 1 1 Cm-244 3.011697e-07 4.129449e-08 +50 1 1 Cm-245 2.771160e-07 1.432237e-08 51 1 1 Mo-95 0.000000e+00 0.000000e+00 52 1 1 Tc-99 0.000000e+00 0.000000e+00 53 1 1 Ru-101 0.000000e+00 0.000000e+00 @@ -101,23 +101,23 @@ 65 1 1 Eu-153 0.000000e+00 0.000000e+00 66 1 1 Gd-155 0.000000e+00 0.000000e+00 67 1 1 O-16 0.000000e+00 0.000000e+00 -0 1 2 U-234 4.267300e-07 3.529845e-08 -1 1 2 U-235 3.629246e-01 2.964548e-02 -2 1 2 U-236 5.921657e-06 4.881464e-07 -3 1 2 U-238 5.196256e-07 4.286610e-08 -4 1 2 Np-237 2.424211e-07 1.741823e-08 -5 1 2 Pu-238 3.255627e-05 2.692686e-06 -6 1 2 Pu-239 2.868384e-01 2.056896e-02 -7 1 2 Pu-240 4.398266e-06 3.658267e-07 -8 1 2 Pu-241 4.607239e-02 3.797176e-03 -9 1 2 Pu-242 8.451967e-08 6.979002e-09 -10 1 2 Am-241 4.678607e-06 3.253889e-07 -11 1 2 Am-242m 1.417675e-04 1.218350e-05 -12 1 2 Am-243 7.648834e-08 6.303843e-09 -13 1 2 Cm-242 9.433314e-07 7.794362e-08 -14 1 2 Cm-243 1.767995e-06 1.454123e-07 -15 1 2 Cm-244 1.533962e-07 1.266951e-08 -16 1 2 Cm-245 1.145063e-05 9.419051e-07 +0 1 2 U-234 4.396211e-07 8.415758e-08 +1 1 2 U-235 3.756376e-01 7.229188e-02 +2 1 2 U-236 6.080198e-06 1.134149e-06 +3 1 2 U-238 5.336844e-07 1.001346e-07 +4 1 2 Np-237 2.578615e-07 4.431602e-08 +5 1 2 Pu-238 3.455264e-05 7.228008e-06 +6 1 2 Pu-239 2.843774e-01 4.965537e-02 +7 1 2 Pu-240 4.575101e-06 7.913823e-07 +8 1 2 Pu-241 4.569839e-02 8.558032e-03 +9 1 2 Pu-242 8.689493e-08 1.642236e-08 +10 1 2 Am-241 5.035346e-06 7.998367e-07 +11 1 2 Am-242m 1.398348e-04 2.569623e-05 +12 1 2 Am-243 7.882610e-08 1.449885e-08 +13 1 2 Cm-242 9.701077e-07 1.841283e-07 +14 1 2 Cm-243 1.830906e-06 3.314797e-07 +15 1 2 Cm-244 1.576930e-07 2.984998e-08 +16 1 2 Cm-245 1.213282e-05 2.473385e-06 17 1 2 Mo-95 0.000000e+00 0.000000e+00 18 1 2 Tc-99 0.000000e+00 0.000000e+00 19 1 2 Ru-101 0.000000e+00 0.000000e+00 @@ -135,16 +135,16 @@ 31 1 2 Eu-153 0.000000e+00 0.000000e+00 32 1 2 Gd-155 0.000000e+00 0.000000e+00 33 1 2 O-16 0.000000e+00 0.000000e+00 material group in group out nuclide mean std. dev. -102 1 1 1 U-234 0.000000 0.000000 -103 1 1 1 U-235 0.002846 0.001185 -104 1 1 1 U-236 0.001951 0.000829 -105 1 1 1 U-238 0.197520 0.011618 +102 1 1 1 U-234 0.000164 0.000175 +103 1 1 1 U-235 0.003179 0.000940 +104 1 1 1 U-236 0.001058 0.001049 +105 1 1 1 U-238 0.184481 0.016782 106 1 1 1 Np-237 0.000000 0.000000 107 1 1 1 Pu-238 0.000000 0.000000 -108 1 1 1 Pu-239 0.001285 0.000461 -109 1 1 1 Pu-240 0.001027 0.000635 -110 1 1 1 Pu-241 0.000004 0.000242 -111 1 1 1 Pu-242 0.000481 0.000372 +108 1 1 1 Pu-239 0.001989 0.000808 +109 1 1 1 Pu-240 0.000950 0.000532 +110 1 1 1 Pu-241 0.000554 0.000524 +111 1 1 1 Pu-242 0.000000 0.000000 112 1 1 1 Am-241 0.000000 0.000000 113 1 1 1 Am-242m 0.000000 0.000000 114 1 1 1 Am-243 0.000000 0.000000 @@ -152,23 +152,23 @@ 116 1 1 1 Cm-243 0.000000 0.000000 117 1 1 1 Cm-244 0.000000 0.000000 118 1 1 1 Cm-245 0.000000 0.000000 -119 1 1 1 Mo-95 0.000302 0.000216 -120 1 1 1 Tc-99 0.000262 0.000195 -121 1 1 1 Ru-101 0.000000 0.000000 +119 1 1 1 Mo-95 0.000388 0.000282 +120 1 1 1 Tc-99 0.000277 0.000203 +121 1 1 1 Ru-101 0.000129 0.000180 122 1 1 1 Ru-103 0.000000 0.000000 123 1 1 1 Ag-109 0.000000 0.000000 124 1 1 1 Xe-135 0.000000 0.000000 -125 1 1 1 Cs-133 0.000016 0.000234 -126 1 1 1 Nd-143 0.000721 0.000364 -127 1 1 1 Nd-145 0.000463 0.000281 -128 1 1 1 Sm-147 0.000009 0.000238 +125 1 1 1 Cs-133 0.000004 0.000244 +126 1 1 1 Nd-143 0.000643 0.000505 +127 1 1 1 Nd-145 0.000342 0.000389 +128 1 1 1 Sm-147 0.000000 0.000000 129 1 1 1 Sm-149 0.000000 0.000000 -130 1 1 1 Sm-150 0.000003 0.000243 +130 1 1 1 Sm-150 0.000191 0.000175 131 1 1 1 Sm-151 0.000000 0.000000 -132 1 1 1 Sm-152 0.000700 0.000424 +132 1 1 1 Sm-152 0.001106 0.000310 133 1 1 1 Eu-153 0.000000 0.000000 134 1 1 1 Gd-155 0.000000 0.000000 -135 1 1 1 O-16 0.142333 0.008156 +135 1 1 1 O-16 0.145411 0.010996 68 1 1 2 U-234 0.000000 0.000000 69 1 1 2 U-235 0.000000 0.000000 70 1 1 2 U-236 0.000000 0.000000 @@ -202,7 +202,7 @@ 98 1 1 2 Sm-152 0.000000 0.000000 99 1 1 2 Eu-153 0.000000 0.000000 100 1 1 2 Gd-155 0.000000 0.000000 -101 1 1 2 O-16 0.000173 0.000173 +101 1 1 2 O-16 0.000697 0.000177 34 1 2 1 U-234 0.000000 0.000000 35 1 2 1 U-235 0.000000 0.000000 36 1 2 1 U-236 0.000000 0.000000 @@ -236,14 +236,14 @@ 64 1 2 1 Sm-152 0.000000 0.000000 65 1 2 1 Eu-153 0.000000 0.000000 66 1 2 1 Gd-155 0.000000 0.000000 -67 1 2 1 O-16 0.001948 0.001952 +67 1 2 1 O-16 0.000000 0.000000 0 1 2 2 U-234 0.000000 0.000000 -1 1 2 2 U-235 0.010470 0.006106 +1 1 2 2 U-235 0.012215 0.007232 2 1 2 2 U-236 0.000000 0.000000 -3 1 2 2 U-238 0.208109 0.039197 +3 1 2 2 U-238 0.184958 0.030436 4 1 2 2 Np-237 0.000000 0.000000 5 1 2 2 Pu-238 0.000000 0.000000 -6 1 2 2 Pu-239 0.000000 0.000000 +6 1 2 2 Pu-239 0.002428 0.001961 7 1 2 2 Pu-240 0.000000 0.000000 8 1 2 2 Pu-241 0.000000 0.000000 9 1 2 2 Pu-242 0.000000 0.000000 @@ -254,32 +254,32 @@ 14 1 2 2 Cm-243 0.000000 0.000000 15 1 2 2 Cm-244 0.000000 0.000000 16 1 2 2 Cm-245 0.000000 0.000000 -17 1 2 2 Mo-95 0.000302 0.002551 -18 1 2 2 Tc-99 0.003544 0.002528 +17 1 2 2 Mo-95 0.000000 0.000000 +18 1 2 2 Tc-99 0.000000 0.000000 19 1 2 2 Ru-101 0.000000 0.000000 20 1 2 2 Ru-103 0.000000 0.000000 21 1 2 2 Ag-109 0.000000 0.000000 -22 1 2 2 Xe-135 0.000000 0.000000 +22 1 2 2 Xe-135 0.003560 0.003090 23 1 2 2 Cs-133 0.000000 0.000000 -24 1 2 2 Nd-143 0.002636 0.002073 -25 1 2 2 Nd-145 0.000000 0.000000 +24 1 2 2 Nd-143 0.003514 0.002641 +25 1 2 2 Nd-145 0.000011 0.002640 26 1 2 2 Sm-147 0.000000 0.000000 27 1 2 2 Sm-149 0.000000 0.000000 28 1 2 2 Sm-150 0.000000 0.000000 29 1 2 2 Sm-151 0.000000 0.000000 30 1 2 2 Sm-152 0.000000 0.000000 -31 1 2 2 Eu-153 0.001686 0.001968 +31 1 2 2 Eu-153 0.000000 0.000000 32 1 2 2 Gd-155 0.000000 0.000000 -33 1 2 2 O-16 0.152859 0.022894 material group out nuclide mean std. dev. +33 1 2 2 O-16 0.170318 0.040164 material group out nuclide mean std. dev. 34 1 1 U-234 0 0.000000 -35 1 1 U-235 1 0.127079 -36 1 1 U-236 0 0.000000 -37 1 1 U-238 1 0.153215 +35 1 1 U-235 1 0.036464 +36 1 1 U-236 1 1.414214 +37 1 1 U-238 1 0.232666 38 1 1 Np-237 0 0.000000 39 1 1 Pu-238 0 0.000000 -40 1 1 Pu-239 1 0.150979 +40 1 1 Pu-239 1 0.106688 41 1 1 Pu-240 0 0.000000 -42 1 1 Pu-241 1 0.203534 +42 1 1 Pu-241 1 0.317035 43 1 1 Pu-242 0 0.000000 44 1 1 Am-241 0 0.000000 45 1 1 Am-242m 0 0.000000 @@ -339,16 +339,16 @@ 31 1 2 Eu-153 0 0.000000 32 1 2 Gd-155 0 0.000000 33 1 2 O-16 0 0.000000 material group in nuclide mean std. dev. -5 2 1 Zr-90 0.118578 0.008347 -6 2 1 Zr-91 0.040887 0.002988 -7 2 1 Zr-92 0.033882 0.004365 -8 2 1 Zr-94 0.046281 0.005422 -9 2 1 Zr-96 0.005415 0.002113 -0 2 2 Zr-90 0.122479 0.032627 -1 2 2 Zr-91 0.035669 0.009683 -2 2 2 Zr-92 0.049331 0.021936 -3 2 2 Zr-94 0.058978 0.020081 -4 2 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. +5 2 1 Zr-90 0.107693 0.014218 +6 2 1 Zr-91 0.035302 0.006932 +7 2 1 Zr-92 0.045224 0.003966 +8 2 1 Zr-94 0.043310 0.007048 +9 2 1 Zr-96 0.006437 0.001752 +0 2 2 Zr-90 0.134757 0.026961 +1 2 2 Zr-91 0.040725 0.010553 +2 2 2 Zr-92 0.014433 0.019906 +3 2 2 Zr-94 0.074322 0.020213 +4 2 2 Zr-96 0.010124 0.008870 material group in nuclide mean std. dev. 5 2 1 Zr-90 0 0 6 2 1 Zr-91 0 0 7 2 1 Zr-92 0 0 @@ -359,26 +359,26 @@ 2 2 2 Zr-92 0 0 3 2 2 Zr-94 0 0 4 2 2 Zr-96 0 0 material group in group out nuclide mean std. dev. -15 2 1 1 Zr-90 0.118578 0.008347 -16 2 1 1 Zr-91 0.039963 0.003053 -17 2 1 1 Zr-92 0.033882 0.004365 -18 2 1 1 Zr-94 0.046281 0.005422 -19 2 1 1 Zr-96 0.004953 0.002087 +15 2 1 1 Zr-90 0.107693 0.014218 +16 2 1 1 Zr-91 0.034432 0.007212 +17 2 1 1 Zr-92 0.044789 0.004020 +18 2 1 1 Zr-94 0.042875 0.007257 +19 2 1 1 Zr-96 0.006437 0.001752 10 2 1 2 Zr-90 0.000000 0.000000 11 2 1 2 Zr-91 0.000000 0.000000 12 2 1 2 Zr-92 0.000000 0.000000 -13 2 1 2 Zr-94 0.000000 0.000000 +13 2 1 2 Zr-94 0.000435 0.000436 14 2 1 2 Zr-96 0.000000 0.000000 5 2 2 1 Zr-90 0.000000 0.000000 6 2 2 1 Zr-91 0.000000 0.000000 7 2 2 1 Zr-92 0.000000 0.000000 8 2 2 1 Zr-94 0.000000 0.000000 9 2 2 1 Zr-96 0.000000 0.000000 -0 2 2 2 Zr-90 0.122479 0.032627 -1 2 2 2 Zr-91 0.023998 0.011915 -2 2 2 2 Zr-92 0.049331 0.021936 -3 2 2 2 Zr-94 0.058978 0.020081 -4 2 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. +0 2 2 2 Zr-90 0.134757 0.026961 +1 2 2 2 Zr-91 0.040725 0.010553 +2 2 2 2 Zr-92 0.014433 0.019906 +3 2 2 2 Zr-94 0.074322 0.020213 +4 2 2 2 Zr-96 0.010124 0.008870 material group out nuclide mean std. dev. 5 2 1 Zr-90 0 0 6 2 1 Zr-91 0 0 7 2 1 Zr-92 0 0 @@ -389,14 +389,14 @@ 2 2 2 Zr-92 0 0 3 2 2 Zr-94 0 0 4 2 2 Zr-96 0 0 material group in nuclide mean std. dev. -4 3 1 H-1 0.206179 0.034791 -5 3 1 O-16 0.075190 0.004750 -6 3 1 B-10 0.000741 0.000470 -7 3 1 B-11 0.000167 0.000208 -0 3 2 H-1 1.323003 0.239067 -1 3 2 O-16 0.071243 0.013291 -2 3 2 B-10 0.033075 0.004283 -3 3 2 B-11 0.000000 0.000000 material group in nuclide mean std. dev. +4 3 1 H-1 0.211941 0.029479 +5 3 1 O-16 0.075510 0.004901 +6 3 1 B-10 0.000648 0.000291 +7 3 1 B-11 0.000009 0.000177 +0 3 2 H-1 1.268594 0.168369 +1 3 2 O-16 0.105889 0.012655 +2 3 2 B-10 0.047919 0.009174 +3 3 2 B-11 0.001830 0.001303 material group in nuclide mean std. dev. 4 3 1 H-1 0 0 5 3 1 O-16 0 0 6 3 1 B-10 0 0 @@ -405,22 +405,22 @@ 1 3 2 O-16 0 0 2 3 2 B-10 0 0 3 3 2 B-11 0 0 material group in group out nuclide mean std. dev. -12 3 1 1 H-1 0.178758 0.033618 -13 3 1 1 O-16 0.075042 0.004782 +12 3 1 1 H-1 0.183045 0.029114 +13 3 1 1 O-16 0.075381 0.004923 14 3 1 1 B-10 0.000000 0.000000 -15 3 1 1 B-11 0.000167 0.000208 -8 3 1 2 H-1 0.027124 0.001806 -9 3 1 2 O-16 0.000148 0.000148 +15 3 1 1 B-11 0.000009 0.000177 +8 3 1 2 H-1 0.028897 0.001533 +9 3 1 2 O-16 0.000000 0.000000 10 3 1 2 B-10 0.000000 0.000000 11 3 1 2 B-11 0.000000 0.000000 -4 3 2 1 H-1 0.000000 0.000000 -5 3 2 1 O-16 0.000000 0.000000 +4 3 2 1 H-1 0.000978 0.000980 +5 3 2 1 O-16 0.000978 0.000980 6 3 2 1 B-10 0.000000 0.000000 7 3 2 1 B-11 0.000000 0.000000 -0 3 2 2 H-1 1.305284 0.235145 -1 3 2 2 O-16 0.071243 0.013291 +0 3 2 2 H-1 1.259793 0.167200 +1 3 2 2 O-16 0.104911 0.012500 2 3 2 2 B-10 0.000000 0.000000 -3 3 2 2 B-11 0.000000 0.000000 material group out nuclide mean std. dev. +3 3 2 2 B-11 0.001830 0.001303 material group out nuclide mean std. dev. 4 3 1 H-1 0 0 5 3 1 O-16 0 0 6 3 1 B-10 0 0 @@ -429,13 +429,13 @@ 1 3 2 O-16 0 0 2 3 2 B-10 0 0 3 3 2 B-11 0 0 material group in nuclide mean std. dev. -4 4 1 H-1 0.188813 0.045599 -5 4 1 O-16 0.066636 0.008217 -6 4 1 B-10 0.000232 0.000233 -7 4 1 B-11 0.000042 0.000300 -0 4 2 H-1 1.088920 0.221595 -1 4 2 O-16 0.064481 0.014318 -2 4 2 B-10 0.026367 0.010478 +4 4 1 H-1 0.174218 0.038828 +5 4 1 O-16 0.070445 0.006116 +6 4 1 B-10 0.000868 0.000356 +7 4 1 B-11 0.000533 0.000379 +0 4 2 H-1 1.101947 0.312129 +1 4 2 O-16 0.074580 0.031899 +2 4 2 B-10 0.042823 0.011148 3 4 2 B-11 0.000000 0.000000 material group in nuclide mean std. dev. 4 4 1 H-1 0 0 5 4 1 O-16 0 0 @@ -445,20 +445,20 @@ 1 4 2 O-16 0 0 2 4 2 B-10 0 0 3 4 2 B-11 0 0 material group in group out nuclide mean std. dev. -12 4 1 1 H-1 0.166764 0.043861 -13 4 1 1 O-16 0.066172 0.007943 +12 4 1 1 H-1 0.152799 0.038054 +13 4 1 1 O-16 0.070155 0.006104 14 4 1 1 B-10 0.000000 0.000000 -15 4 1 1 B-11 0.000042 0.000300 -8 4 1 2 H-1 0.021817 0.002327 -9 4 1 2 O-16 0.000464 0.000466 +15 4 1 1 B-11 0.000533 0.000379 +8 4 1 2 H-1 0.021419 0.001438 +9 4 1 2 O-16 0.000289 0.000290 10 4 1 2 B-10 0.000000 0.000000 11 4 1 2 B-11 0.000000 0.000000 4 4 2 1 H-1 0.000000 0.000000 5 4 2 1 O-16 0.000000 0.000000 6 4 2 1 B-10 0.000000 0.000000 7 4 2 1 B-11 0.000000 0.000000 -0 4 2 2 H-1 1.082328 0.222438 -1 4 2 2 O-16 0.064481 0.014318 +0 4 2 2 H-1 1.089712 0.310379 +1 4 2 2 O-16 0.074580 0.031899 2 4 2 2 B-10 0.000000 0.000000 3 4 2 2 B-11 0.000000 0.000000 material group out nuclide mean std. dev. 4 4 1 H-1 0 0 @@ -1368,49 +1368,7 @@ 17 8 2 Cr-50 0 0 18 8 2 Cr-52 0 0 19 8 2 Cr-53 0 0 -20 8 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 9 1 H-1 0.106160 0.179178 -22 9 1 O-16 0.272020 0.171699 -23 9 1 B-10 0.000000 0.000000 -24 9 1 B-11 0.000000 0.000000 -25 9 1 Fe-54 0.000000 0.000000 -26 9 1 Fe-56 0.000000 0.000000 -27 9 1 Fe-57 0.000000 0.000000 -28 9 1 Fe-58 0.000000 0.000000 -29 9 1 Ni-58 0.000000 0.000000 -30 9 1 Ni-60 0.000000 0.000000 -31 9 1 Ni-61 0.000000 0.000000 -32 9 1 Ni-62 0.000000 0.000000 -33 9 1 Ni-64 0.000000 0.000000 -34 9 1 Mn-55 0.085133 0.082479 -35 9 1 Si-28 0.000000 0.000000 -36 9 1 Si-29 0.000000 0.000000 -37 9 1 Si-30 0.000000 0.000000 -38 9 1 Cr-50 0.000000 0.000000 -39 9 1 Cr-52 0.000000 0.000000 -40 9 1 Cr-53 0.040723 0.079827 -41 9 1 Cr-54 0.000000 0.000000 -0 9 2 H-1 1.417955 2.158027 -1 9 2 O-16 0.000000 0.000000 -2 9 2 B-10 0.269141 0.380622 -3 9 2 B-11 0.000000 0.000000 -4 9 2 Fe-54 0.000000 0.000000 -5 9 2 Fe-56 0.000000 0.000000 -6 9 2 Fe-57 0.000000 0.000000 -7 9 2 Fe-58 0.000000 0.000000 -8 9 2 Ni-58 0.000000 0.000000 -9 9 2 Ni-60 0.000000 0.000000 -10 9 2 Ni-61 0.000000 0.000000 -11 9 2 Ni-62 0.000000 0.000000 -12 9 2 Ni-64 0.000000 0.000000 -13 9 2 Mn-55 0.000000 0.000000 -14 9 2 Si-28 0.000000 0.000000 -15 9 2 Si-29 0.000000 0.000000 -16 9 2 Si-30 0.000000 0.000000 -17 9 2 Cr-50 0.000000 0.000000 -18 9 2 Cr-52 0.000000 0.000000 -19 9 2 Cr-53 0.000000 0.000000 -20 9 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. +20 8 2 Cr-54 0 0 material group in nuclide mean std. dev. 21 9 1 H-1 0 0 22 9 1 O-16 0 0 23 9 1 B-10 0 0 @@ -1452,91 +1410,133 @@ 17 9 2 Cr-50 0 0 18 9 2 Cr-52 0 0 19 9 2 Cr-53 0 0 -20 9 2 Cr-54 0 0 material group in group out nuclide mean std. dev. -63 9 1 1 H-1 0.106160 0.179178 -64 9 1 1 O-16 0.272020 0.171699 -65 9 1 1 B-10 0.000000 0.000000 -66 9 1 1 B-11 0.000000 0.000000 -67 9 1 1 Fe-54 0.000000 0.000000 -68 9 1 1 Fe-56 0.000000 0.000000 -69 9 1 1 Fe-57 0.000000 0.000000 -70 9 1 1 Fe-58 0.000000 0.000000 -71 9 1 1 Ni-58 0.000000 0.000000 -72 9 1 1 Ni-60 0.000000 0.000000 -73 9 1 1 Ni-61 0.000000 0.000000 -74 9 1 1 Ni-62 0.000000 0.000000 -75 9 1 1 Ni-64 0.000000 0.000000 -76 9 1 1 Mn-55 0.085133 0.082479 -77 9 1 1 Si-28 0.000000 0.000000 -78 9 1 1 Si-29 0.000000 0.000000 -79 9 1 1 Si-30 0.000000 0.000000 -80 9 1 1 Cr-50 0.000000 0.000000 -81 9 1 1 Cr-52 0.000000 0.000000 -82 9 1 1 Cr-53 0.040723 0.079827 -83 9 1 1 Cr-54 0.000000 0.000000 -42 9 1 2 H-1 0.000000 0.000000 -43 9 1 2 O-16 0.000000 0.000000 -44 9 1 2 B-10 0.000000 0.000000 -45 9 1 2 B-11 0.000000 0.000000 -46 9 1 2 Fe-54 0.000000 0.000000 -47 9 1 2 Fe-56 0.000000 0.000000 -48 9 1 2 Fe-57 0.000000 0.000000 -49 9 1 2 Fe-58 0.000000 0.000000 -50 9 1 2 Ni-58 0.000000 0.000000 -51 9 1 2 Ni-60 0.000000 0.000000 -52 9 1 2 Ni-61 0.000000 0.000000 -53 9 1 2 Ni-62 0.000000 0.000000 -54 9 1 2 Ni-64 0.000000 0.000000 -55 9 1 2 Mn-55 0.000000 0.000000 -56 9 1 2 Si-28 0.000000 0.000000 -57 9 1 2 Si-29 0.000000 0.000000 -58 9 1 2 Si-30 0.000000 0.000000 -59 9 1 2 Cr-50 0.000000 0.000000 -60 9 1 2 Cr-52 0.000000 0.000000 -61 9 1 2 Cr-53 0.000000 0.000000 -62 9 1 2 Cr-54 0.000000 0.000000 -21 9 2 1 H-1 0.000000 0.000000 -22 9 2 1 O-16 0.000000 0.000000 -23 9 2 1 B-10 0.000000 0.000000 -24 9 2 1 B-11 0.000000 0.000000 -25 9 2 1 Fe-54 0.000000 0.000000 -26 9 2 1 Fe-56 0.000000 0.000000 -27 9 2 1 Fe-57 0.000000 0.000000 -28 9 2 1 Fe-58 0.000000 0.000000 -29 9 2 1 Ni-58 0.000000 0.000000 -30 9 2 1 Ni-60 0.000000 0.000000 -31 9 2 1 Ni-61 0.000000 0.000000 -32 9 2 1 Ni-62 0.000000 0.000000 -33 9 2 1 Ni-64 0.000000 0.000000 -34 9 2 1 Mn-55 0.000000 0.000000 -35 9 2 1 Si-28 0.000000 0.000000 -36 9 2 1 Si-29 0.000000 0.000000 -37 9 2 1 Si-30 0.000000 0.000000 -38 9 2 1 Cr-50 0.000000 0.000000 -39 9 2 1 Cr-52 0.000000 0.000000 -40 9 2 1 Cr-53 0.000000 0.000000 -41 9 2 1 Cr-54 0.000000 0.000000 -0 9 2 2 H-1 1.417955 2.158027 -1 9 2 2 O-16 0.000000 0.000000 -2 9 2 2 B-10 0.000000 0.000000 -3 9 2 2 B-11 0.000000 0.000000 -4 9 2 2 Fe-54 0.000000 0.000000 -5 9 2 2 Fe-56 0.000000 0.000000 -6 9 2 2 Fe-57 0.000000 0.000000 -7 9 2 2 Fe-58 0.000000 0.000000 -8 9 2 2 Ni-58 0.000000 0.000000 -9 9 2 2 Ni-60 0.000000 0.000000 -10 9 2 2 Ni-61 0.000000 0.000000 -11 9 2 2 Ni-62 0.000000 0.000000 -12 9 2 2 Ni-64 0.000000 0.000000 -13 9 2 2 Mn-55 0.000000 0.000000 -14 9 2 2 Si-28 0.000000 0.000000 -15 9 2 2 Si-29 0.000000 0.000000 -16 9 2 2 Si-30 0.000000 0.000000 -17 9 2 2 Cr-50 0.000000 0.000000 -18 9 2 2 Cr-52 0.000000 0.000000 -19 9 2 2 Cr-53 0.000000 0.000000 -20 9 2 2 Cr-54 0.000000 0.000000 material group out nuclide mean std. dev. +20 9 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 9 1 H-1 0 0 +22 9 1 O-16 0 0 +23 9 1 B-10 0 0 +24 9 1 B-11 0 0 +25 9 1 Fe-54 0 0 +26 9 1 Fe-56 0 0 +27 9 1 Fe-57 0 0 +28 9 1 Fe-58 0 0 +29 9 1 Ni-58 0 0 +30 9 1 Ni-60 0 0 +31 9 1 Ni-61 0 0 +32 9 1 Ni-62 0 0 +33 9 1 Ni-64 0 0 +34 9 1 Mn-55 0 0 +35 9 1 Si-28 0 0 +36 9 1 Si-29 0 0 +37 9 1 Si-30 0 0 +38 9 1 Cr-50 0 0 +39 9 1 Cr-52 0 0 +40 9 1 Cr-53 0 0 +41 9 1 Cr-54 0 0 +0 9 2 H-1 0 0 +1 9 2 O-16 0 0 +2 9 2 B-10 0 0 +3 9 2 B-11 0 0 +4 9 2 Fe-54 0 0 +5 9 2 Fe-56 0 0 +6 9 2 Fe-57 0 0 +7 9 2 Fe-58 0 0 +8 9 2 Ni-58 0 0 +9 9 2 Ni-60 0 0 +10 9 2 Ni-61 0 0 +11 9 2 Ni-62 0 0 +12 9 2 Ni-64 0 0 +13 9 2 Mn-55 0 0 +14 9 2 Si-28 0 0 +15 9 2 Si-29 0 0 +16 9 2 Si-30 0 0 +17 9 2 Cr-50 0 0 +18 9 2 Cr-52 0 0 +19 9 2 Cr-53 0 0 +20 9 2 Cr-54 0 0 material group in group out nuclide mean std. dev. +63 9 1 1 H-1 0 0 +64 9 1 1 O-16 0 0 +65 9 1 1 B-10 0 0 +66 9 1 1 B-11 0 0 +67 9 1 1 Fe-54 0 0 +68 9 1 1 Fe-56 0 0 +69 9 1 1 Fe-57 0 0 +70 9 1 1 Fe-58 0 0 +71 9 1 1 Ni-58 0 0 +72 9 1 1 Ni-60 0 0 +73 9 1 1 Ni-61 0 0 +74 9 1 1 Ni-62 0 0 +75 9 1 1 Ni-64 0 0 +76 9 1 1 Mn-55 0 0 +77 9 1 1 Si-28 0 0 +78 9 1 1 Si-29 0 0 +79 9 1 1 Si-30 0 0 +80 9 1 1 Cr-50 0 0 +81 9 1 1 Cr-52 0 0 +82 9 1 1 Cr-53 0 0 +83 9 1 1 Cr-54 0 0 +42 9 1 2 H-1 0 0 +43 9 1 2 O-16 0 0 +44 9 1 2 B-10 0 0 +45 9 1 2 B-11 0 0 +46 9 1 2 Fe-54 0 0 +47 9 1 2 Fe-56 0 0 +48 9 1 2 Fe-57 0 0 +49 9 1 2 Fe-58 0 0 +50 9 1 2 Ni-58 0 0 +51 9 1 2 Ni-60 0 0 +52 9 1 2 Ni-61 0 0 +53 9 1 2 Ni-62 0 0 +54 9 1 2 Ni-64 0 0 +55 9 1 2 Mn-55 0 0 +56 9 1 2 Si-28 0 0 +57 9 1 2 Si-29 0 0 +58 9 1 2 Si-30 0 0 +59 9 1 2 Cr-50 0 0 +60 9 1 2 Cr-52 0 0 +61 9 1 2 Cr-53 0 0 +62 9 1 2 Cr-54 0 0 +21 9 2 1 H-1 0 0 +22 9 2 1 O-16 0 0 +23 9 2 1 B-10 0 0 +24 9 2 1 B-11 0 0 +25 9 2 1 Fe-54 0 0 +26 9 2 1 Fe-56 0 0 +27 9 2 1 Fe-57 0 0 +28 9 2 1 Fe-58 0 0 +29 9 2 1 Ni-58 0 0 +30 9 2 1 Ni-60 0 0 +31 9 2 1 Ni-61 0 0 +32 9 2 1 Ni-62 0 0 +33 9 2 1 Ni-64 0 0 +34 9 2 1 Mn-55 0 0 +35 9 2 1 Si-28 0 0 +36 9 2 1 Si-29 0 0 +37 9 2 1 Si-30 0 0 +38 9 2 1 Cr-50 0 0 +39 9 2 1 Cr-52 0 0 +40 9 2 1 Cr-53 0 0 +41 9 2 1 Cr-54 0 0 +0 9 2 2 H-1 0 0 +1 9 2 2 O-16 0 0 +2 9 2 2 B-10 0 0 +3 9 2 2 B-11 0 0 +4 9 2 2 Fe-54 0 0 +5 9 2 2 Fe-56 0 0 +6 9 2 2 Fe-57 0 0 +7 9 2 2 Fe-58 0 0 +8 9 2 2 Ni-58 0 0 +9 9 2 2 Ni-60 0 0 +10 9 2 2 Ni-61 0 0 +11 9 2 2 Ni-62 0 0 +12 9 2 2 Ni-64 0 0 +13 9 2 2 Mn-55 0 0 +14 9 2 2 Si-28 0 0 +15 9 2 2 Si-29 0 0 +16 9 2 2 Si-30 0 0 +17 9 2 2 Cr-50 0 0 +18 9 2 2 Cr-52 0 0 +19 9 2 2 Cr-53 0 0 +20 9 2 2 Cr-54 0 0 material group out nuclide mean std. dev. 21 9 1 H-1 0 0 22 9 1 O-16 0 0 23 9 1 B-10 0 0 @@ -1789,23 +1789,23 @@ 18 10 2 Cr-52 0 0 19 10 2 Cr-53 0 0 20 10 2 Cr-54 0 0 material group in nuclide mean std. dev. -9 11 1 H-1 0.138558 0.260695 -10 11 1 O-16 0.042575 0.049271 +9 11 1 H-1 0.143342 0.405094 +10 11 1 O-16 0.048701 0.059664 11 11 1 B-10 0.000000 0.000000 12 11 1 B-11 0.000000 0.000000 -13 11 1 Zr-90 0.041034 0.049102 -14 11 1 Zr-91 0.027328 0.021092 -15 11 1 Zr-92 0.009788 0.009282 -16 11 1 Zr-94 0.043543 0.036697 +13 11 1 Zr-90 0.140978 0.178138 +14 11 1 Zr-91 0.000000 0.000000 +15 11 1 Zr-92 0.057496 0.076982 +16 11 1 Zr-94 0.039602 0.049138 17 11 1 Zr-96 0.000000 0.000000 -0 11 2 H-1 0.824153 0.917955 -1 11 2 O-16 0.041986 0.060727 -2 11 2 B-10 0.048216 0.042726 +0 11 2 H-1 0.570204 1.298303 +1 11 2 O-16 0.022061 0.359836 +2 11 2 B-10 0.264755 0.374419 3 11 2 B-11 0.000000 0.000000 -4 11 2 Zr-90 0.048596 0.067712 +4 11 2 Zr-90 0.000000 0.000000 5 11 2 Zr-91 0.000000 0.000000 6 11 2 Zr-92 0.000000 0.000000 -7 11 2 Zr-94 0.043195 0.041363 +7 11 2 Zr-94 0.000000 0.000000 8 11 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. 9 11 1 H-1 0 0 10 11 1 O-16 0 0 @@ -1825,16 +1825,16 @@ 6 11 2 Zr-92 0 0 7 11 2 Zr-94 0 0 8 11 2 Zr-96 0 0 material group in group out nuclide mean std. dev. -27 11 1 1 H-1 0.111411 0.247294 -28 11 1 1 O-16 0.042575 0.049271 +27 11 1 1 H-1 0.117971 0.376005 +28 11 1 1 O-16 0.048701 0.059664 29 11 1 1 B-10 0.000000 0.000000 30 11 1 1 B-11 0.000000 0.000000 -31 11 1 1 Zr-90 0.041034 0.049102 -32 11 1 1 Zr-91 0.027328 0.021092 -33 11 1 1 Zr-92 0.009788 0.009282 -34 11 1 1 Zr-94 0.043543 0.036697 +31 11 1 1 Zr-90 0.140978 0.178138 +32 11 1 1 Zr-91 0.000000 0.000000 +33 11 1 1 Zr-92 0.057496 0.076982 +34 11 1 1 Zr-94 0.039602 0.049138 35 11 1 1 Zr-96 0.000000 0.000000 -18 11 1 2 H-1 0.027147 0.020009 +18 11 1 2 H-1 0.025371 0.035880 19 11 1 2 O-16 0.000000 0.000000 20 11 1 2 B-10 0.000000 0.000000 21 11 1 2 B-11 0.000000 0.000000 @@ -1852,14 +1852,14 @@ 15 11 2 1 Zr-92 0.000000 0.000000 16 11 2 1 Zr-94 0.000000 0.000000 17 11 2 1 Zr-96 0.000000 0.000000 -0 11 2 2 H-1 0.824153 0.917955 -1 11 2 2 O-16 0.041986 0.060727 +0 11 2 2 H-1 0.570204 1.298303 +1 11 2 2 O-16 0.022061 0.359836 2 11 2 2 B-10 0.000000 0.000000 3 11 2 2 B-11 0.000000 0.000000 -4 11 2 2 Zr-90 0.048596 0.067712 +4 11 2 2 Zr-90 0.000000 0.000000 5 11 2 2 Zr-91 0.000000 0.000000 6 11 2 2 Zr-92 0.000000 0.000000 -7 11 2 2 Zr-94 0.043195 0.041363 +7 11 2 2 Zr-94 0.000000 0.000000 8 11 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. 9 11 1 H-1 0 0 10 11 1 O-16 0 0 @@ -1878,25 +1878,7 @@ 5 11 2 Zr-91 0 0 6 11 2 Zr-92 0 0 7 11 2 Zr-94 0 0 -8 11 2 Zr-96 0 0 material group in nuclide mean std. dev. -9 12 1 H-1 0.151924 0.200147 -10 12 1 O-16 0.039280 0.026086 -11 12 1 B-10 0.000000 0.000000 -12 12 1 B-11 0.000000 0.000000 -13 12 1 Zr-90 0.017578 0.022079 -14 12 1 Zr-91 0.039984 0.025285 -15 12 1 Zr-92 0.001172 0.006230 -16 12 1 Zr-94 0.001668 0.005966 -17 12 1 Zr-96 0.004328 0.005325 -0 12 2 H-1 0.942412 0.866849 -1 12 2 O-16 0.047438 0.048161 -2 12 2 B-10 0.041655 0.031202 -3 12 2 B-11 0.000000 0.000000 -4 12 2 Zr-90 0.021193 0.017456 -5 12 2 Zr-91 0.007901 0.009268 -6 12 2 Zr-92 0.009422 0.012802 -7 12 2 Zr-94 0.043324 0.027551 -8 12 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. +8 11 2 Zr-96 0 0 material group in nuclide mean std. dev. 9 12 1 H-1 0 0 10 12 1 O-16 0 0 11 12 1 B-10 0 0 @@ -1914,43 +1896,61 @@ 5 12 2 Zr-91 0 0 6 12 2 Zr-92 0 0 7 12 2 Zr-94 0 0 -8 12 2 Zr-96 0 0 material group in group out nuclide mean std. dev. -27 12 1 1 H-1 0.122301 0.187298 -28 12 1 1 O-16 0.039280 0.026086 -29 12 1 1 B-10 0.000000 0.000000 -30 12 1 1 B-11 0.000000 0.000000 -31 12 1 1 Zr-90 0.017578 0.022079 -32 12 1 1 Zr-91 0.039984 0.025285 -33 12 1 1 Zr-92 0.001172 0.006230 -34 12 1 1 Zr-94 0.001668 0.005966 -35 12 1 1 Zr-96 0.004328 0.005325 -18 12 1 2 H-1 0.029622 0.017760 -19 12 1 2 O-16 0.000000 0.000000 -20 12 1 2 B-10 0.000000 0.000000 -21 12 1 2 B-11 0.000000 0.000000 -22 12 1 2 Zr-90 0.000000 0.000000 -23 12 1 2 Zr-91 0.000000 0.000000 -24 12 1 2 Zr-92 0.000000 0.000000 -25 12 1 2 Zr-94 0.000000 0.000000 -26 12 1 2 Zr-96 0.000000 0.000000 -9 12 2 1 H-1 0.000000 0.000000 -10 12 2 1 O-16 0.000000 0.000000 -11 12 2 1 B-10 0.000000 0.000000 -12 12 2 1 B-11 0.000000 0.000000 -13 12 2 1 Zr-90 0.000000 0.000000 -14 12 2 1 Zr-91 0.000000 0.000000 -15 12 2 1 Zr-92 0.000000 0.000000 -16 12 2 1 Zr-94 0.000000 0.000000 -17 12 2 1 Zr-96 0.000000 0.000000 -0 12 2 2 H-1 0.942412 0.866849 -1 12 2 2 O-16 0.047438 0.048161 -2 12 2 2 B-10 0.000000 0.000000 -3 12 2 2 B-11 0.000000 0.000000 -4 12 2 2 Zr-90 0.021193 0.017456 -5 12 2 2 Zr-91 0.007901 0.009268 -6 12 2 2 Zr-92 0.009422 0.012802 -7 12 2 2 Zr-94 0.043324 0.027551 -8 12 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. +8 12 2 Zr-96 0 0 material group in nuclide mean std. dev. +9 12 1 H-1 0 0 +10 12 1 O-16 0 0 +11 12 1 B-10 0 0 +12 12 1 B-11 0 0 +13 12 1 Zr-90 0 0 +14 12 1 Zr-91 0 0 +15 12 1 Zr-92 0 0 +16 12 1 Zr-94 0 0 +17 12 1 Zr-96 0 0 +0 12 2 H-1 0 0 +1 12 2 O-16 0 0 +2 12 2 B-10 0 0 +3 12 2 B-11 0 0 +4 12 2 Zr-90 0 0 +5 12 2 Zr-91 0 0 +6 12 2 Zr-92 0 0 +7 12 2 Zr-94 0 0 +8 12 2 Zr-96 0 0 material group in group out nuclide mean std. dev. +27 12 1 1 H-1 0 0 +28 12 1 1 O-16 0 0 +29 12 1 1 B-10 0 0 +30 12 1 1 B-11 0 0 +31 12 1 1 Zr-90 0 0 +32 12 1 1 Zr-91 0 0 +33 12 1 1 Zr-92 0 0 +34 12 1 1 Zr-94 0 0 +35 12 1 1 Zr-96 0 0 +18 12 1 2 H-1 0 0 +19 12 1 2 O-16 0 0 +20 12 1 2 B-10 0 0 +21 12 1 2 B-11 0 0 +22 12 1 2 Zr-90 0 0 +23 12 1 2 Zr-91 0 0 +24 12 1 2 Zr-92 0 0 +25 12 1 2 Zr-94 0 0 +26 12 1 2 Zr-96 0 0 +9 12 2 1 H-1 0 0 +10 12 2 1 O-16 0 0 +11 12 2 1 B-10 0 0 +12 12 2 1 B-11 0 0 +13 12 2 1 Zr-90 0 0 +14 12 2 1 Zr-91 0 0 +15 12 2 1 Zr-92 0 0 +16 12 2 1 Zr-94 0 0 +17 12 2 1 Zr-96 0 0 +0 12 2 2 H-1 0 0 +1 12 2 2 O-16 0 0 +2 12 2 2 B-10 0 0 +3 12 2 2 B-11 0 0 +4 12 2 2 Zr-90 0 0 +5 12 2 2 Zr-91 0 0 +6 12 2 2 Zr-92 0 0 +7 12 2 2 Zr-94 0 0 +8 12 2 2 Zr-96 0 0 material group out nuclide mean std. dev. 9 12 1 H-1 0 0 10 12 1 O-16 0 0 11 12 1 B-10 0 0 diff --git a/tests/test_natural_element/results_true.dat b/tests/test_natural_element/results_true.dat index 1c8668e128..47b49b1441 100644 --- a/tests/test_natural_element/results_true.dat +++ b/tests/test_natural_element/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.013112E+00 2.551515E-02 +1.000870E+00 2.861252E-02 diff --git a/tests/test_output/results_true.dat b/tests/test_output/results_true.dat index 5263a6b7fd..bf062f283c 100644 --- a/tests/test_output/results_true.dat +++ b/tests/test_output/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.021779E-01 3.813358E-03 +2.938252E-01 5.852966E-03 diff --git a/tests/test_particle_restart_eigval/results_true.dat b/tests/test_particle_restart_eigval/results_true.dat index f343978533..a0cced44c0 100644 --- a/tests/test_particle_restart_eigval/results_true.dat +++ b/tests/test_particle_restart_eigval/results_true.dat @@ -1,16 +1,16 @@ current batch: -9.000000E+00 +1.100000E+01 current gen: 1.000000E+00 particle id: -5.550000E+02 +5.730000E+02 run mode: k-eigenvalue particle weight: 1.000000E+00 particle energy: -2.831611E-01 +4.522511E+00 particle xyz: -4.973847E+01 6.971699E+00 -5.201827E+01 +-3.306412E+01 -1.396998E+01 5.715368E+01 particle uvw: -6.945105E-01 6.295355E-01 -3.483393E-01 +-6.019192E-01 -6.419527E-01 4.749632E-01 diff --git a/tests/test_particle_restart_eigval/test_particle_restart_eigval.py b/tests/test_particle_restart_eigval/test_particle_restart_eigval.py index 139cb2b9f5..f022c0cced 100644 --- a/tests/test_particle_restart_eigval/test_particle_restart_eigval.py +++ b/tests/test_particle_restart_eigval/test_particle_restart_eigval.py @@ -7,5 +7,5 @@ from testing_harness import ParticleRestartTestHarness if __name__ == '__main__': - harness = ParticleRestartTestHarness('particle_9_555.*') + harness = ParticleRestartTestHarness('particle_11_573.*') harness.main() diff --git a/tests/test_quadric_surfaces/results_true.dat b/tests/test_quadric_surfaces/results_true.dat index b2e02fdbb7..a8b0ec11b4 100644 --- a/tests/test_quadric_surfaces/results_true.dat +++ b/tests/test_quadric_surfaces/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.706301E-01 4.351374E-02 +1.013363E+00 4.701127E-03 diff --git a/tests/test_reflective_plane/results_true.dat b/tests/test_reflective_plane/results_true.dat index c5ba8e63fb..1ccd430f67 100644 --- a/tests/test_reflective_plane/results_true.dat +++ b/tests/test_reflective_plane/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.276127E+00 4.678320E-03 +2.274474E+00 9.235910E-03 diff --git a/tests/test_resonance_scattering/results_true.dat b/tests/test_resonance_scattering/results_true.dat index 0dda991cac..eaad05767a 100644 --- a/tests/test_resonance_scattering/results_true.dat +++ b/tests/test_resonance_scattering/results_true.dat @@ -1,2 +1,2 @@ k-combined: -6.842112E-02 8.480934E-04 +6.842156E-02 8.481004E-04 diff --git a/tests/test_rotation/results_true.dat b/tests/test_rotation/results_true.dat index 5263a6b7fd..bf062f283c 100644 --- a/tests/test_rotation/results_true.dat +++ b/tests/test_rotation/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.021779E-01 3.813358E-03 +2.938252E-01 5.852966E-03 diff --git a/tests/test_salphabeta/results_true.dat b/tests/test_salphabeta/results_true.dat index 926af89bca..8c3d0341c6 100644 --- a/tests/test_salphabeta/results_true.dat +++ b/tests/test_salphabeta/results_true.dat @@ -1,2 +1,2 @@ k-combined: -8.350634E-01 6.010639E-02 +8.339490E-01 3.462133E-03 diff --git a/tests/test_score_current/results_true.dat b/tests/test_score_current/results_true.dat index 936e2d04bc..4aeb9b16cb 100644 --- a/tests/test_score_current/results_true.dat +++ b/tests/test_score_current/results_true.dat @@ -1 +1 @@ -1e6945632c55491d4584f4976cc6f5c7340874703cfaf739dd956b7124b4260955efb5b6ba041b32536f9a74572d071e0293dced55a41ea305223f698b734c2a \ No newline at end of file +57847fd9bf48a1be56d2ea891adbdd29d8277672bef65271cb021e0027aa4bcb8024ae915422abb7dfcceb7a688daf598d3a8476c5f454f45f45cca682f13502 \ No newline at end of file diff --git a/tests/test_seed/results_true.dat b/tests/test_seed/results_true.dat index df79ce1ced..3ef545edee 100644 --- a/tests/test_seed/results_true.dat +++ b/tests/test_seed/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.951164E-01 2.504580E-03 +2.977739E-01 4.992896E-03 diff --git a/tests/test_source/results_true.dat b/tests/test_source/results_true.dat index 18fb895f77..0c85ba194e 100644 --- a/tests/test_source/results_true.dat +++ b/tests/test_source/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.014392E-01 7.185055E-03 +2.971106E-01 8.263510E-03 diff --git a/tests/test_source_file/results_true.dat b/tests/test_source_file/results_true.dat index fee61dda26..b32c85631d 100644 --- a/tests/test_source_file/results_true.dat +++ b/tests/test_source_file/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.962911E-01 4.073420E-03 +2.967126E-01 5.952317E-04 diff --git a/tests/test_sourcepoint_latest/results_true.dat b/tests/test_sourcepoint_latest/results_true.dat index 5263a6b7fd..bf062f283c 100644 --- a/tests/test_sourcepoint_latest/results_true.dat +++ b/tests/test_sourcepoint_latest/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.021779E-01 3.813358E-03 +2.938252E-01 5.852966E-03 diff --git a/tests/test_sourcepoint_restart/results_true.dat b/tests/test_sourcepoint_restart/results_true.dat index 0e4eef9a9d..a03d8885b1 100644 --- a/tests/test_sourcepoint_restart/results_true.dat +++ b/tests/test_sourcepoint_restart/results_true.dat @@ -1,16 +1,16 @@ k-combined: -3.021779E-01 3.813358E-03 +2.938252E-01 5.852966E-03 tally 1: -7.000000E-03 -2.100000E-05 -1.127639E-03 -7.464355E-07 --1.264355E-03 -1.192757E-06 -8.769846E-04 -1.117508E-06 -3.359153E-03 -4.366438E-06 +1.500000E-02 +6.100000E-05 +6.140730E-03 +1.827778E-05 +5.466817E-03 +1.172967E-05 +4.386203E-03 +6.988762E-06 +7.799017E-03 +1.730653E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -19,18 +19,58 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.107648E-04 -3.730336E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.982678E-04 +3.579243E-07 1.000000E-03 1.000000E-06 -6.713061E-04 -4.506518E-07 -1.759778E-04 -3.096817E-08 --2.506458E-04 -6.282332E-08 -6.069794E-04 -3.684240E-07 +9.657483E-04 +9.326697E-07 +8.990046E-04 +8.082092E-07 +8.031880E-04 +6.451110E-07 +0.000000E+00 +0.000000E+00 +7.000000E-03 +1.100000E-05 +-3.133071E-05 +2.698671E-06 +2.623750E-04 +1.344791E-06 +-2.483720E-03 +1.649588E-06 +3.294650E-03 +2.242064E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +6.245980E-04 +3.901227E-07 +8.518403E-05 +7.256319E-09 +-3.277224E-04 +1.074020E-07 +2.989325E-04 +8.936066E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -42,25 +82,15 @@ tally 1: 0.000000E+00 0.000000E+00 7.000000E-03 -1.500000E-05 -4.398928E-03 -8.198908E-06 -1.784486E-03 -3.422315E-06 -8.494423E-04 -9.262242E-07 -4.566637E-03 -5.646039E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.069794E-04 -3.684240E-07 +1.100000E-05 +2.955972E-03 +4.718865E-06 +2.296283E-03 +1.893728E-06 +1.374242E-03 +1.154127E-06 +4.505145E-03 +6.063009E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -81,16 +111,266 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.000000E-03 -3.000000E-06 --1.419189E-03 -9.791601E-07 --3.125982E-05 -5.086129E-07 -3.291570E-04 -1.943609E-07 -1.525426E-03 -8.346311E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.100000E-02 +1.230000E-04 +4.489511E-03 +2.028537E-05 +1.946623E-03 +1.610367E-06 +1.647952E-03 +1.769319E-06 +1.077022E-02 +2.893664E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.000807E-04 +2.700544E-07 +1.000000E-03 +1.000000E-06 +-9.045723E-04 +8.182510E-07 +7.273765E-04 +5.290766E-07 +-4.935596E-04 +2.436011E-07 +2.989325E-04 +8.936066E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +1.050000E-04 +2.386082E-03 +3.497107E-06 +4.555769E-03 +1.058977E-05 +1.879180E-03 +5.304853E-06 +7.792317E-03 +1.670472E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.198624E-03 +3.591835E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +3.327793E-04 +1.107421E-07 +-3.338869E-04 +1.114804E-07 +-4.070373E-04 +1.656794E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.995454E-04 +8.972747E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-02 +2.400000E-05 +5.261857E-03 +7.471221E-06 +5.280154E-03 +9.529481E-06 +5.060306E-03 +6.646531E-06 +6.894561E-03 +1.267269E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.000000E-03 +1.800000E-05 +-2.025476E-04 +1.858789E-06 +-6.686398E-04 +1.065456E-06 +6.586587E-04 +4.841450E-07 +2.994327E-03 +2.684002E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -123,146 +403,14 @@ tally 1: 0.000000E+00 1.000000E-03 1.000000E-06 --1.542107E-05 -2.378095E-10 --4.996433E-04 -2.496434E-07 -2.312244E-05 -5.346472E-10 -3.053824E-04 -9.325841E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-02 -8.600000E-05 -3.995253E-03 -1.648172E-05 -3.349403E-03 -1.166653E-05 -4.208940E-03 -7.077664E-06 -1.033905E-02 -2.197265E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.029991E-04 -1.818050E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.600000E-02 -1.620000E-04 -7.996640E-03 -1.882484E-05 -3.921034E-03 -1.157453E-05 -1.644629E-03 -3.217857E-06 -1.159182E-02 -3.534975E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.100000E-02 -2.500000E-05 -4.691861E-03 -7.999548E-06 -1.771537E-03 -3.385525E-06 -7.888659E-04 -1.911759E-06 -4.561602E-03 -4.337486E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.107648E-04 -3.730336E-07 -0.000000E+00 -0.000000E+00 +9.104915E-04 +8.289948E-07 +7.434921E-04 +5.527806E-07 +5.212445E-04 +2.716958E-07 +1.201894E-03 +7.222931E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -281,16 +429,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.990909E-04 +3.589099E-07 1.000000E-03 1.000000E-06 --3.878617E-04 -1.504367E-07 --2.743449E-04 -7.526515E-08 -4.359210E-04 -1.900271E-07 -3.034897E-04 -9.210600E-08 +-5.260403E-04 +2.767184E-07 +-8.492233E-05 +7.211803E-09 +4.251479E-04 +1.807507E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -321,26 +469,108 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.400000E-02 +3.540000E-04 +1.553475E-02 +6.367842E-05 +1.520994E-02 +7.741012E-05 +8.930877E-03 +2.739654E-05 +1.405733E-02 +6.608052E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.031624E-04 +4.543315E-07 +1.000000E-03 +1.000000E-06 +-2.223524E-04 +4.944060E-08 +-4.258391E-04 +1.813389E-07 +3.060456E-04 +9.366388E-08 +6.040285E-04 +3.648505E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.200000E-02 +3.400000E-05 +3.889614E-03 +6.587628E-06 +2.115055E-03 +3.167536E-06 +3.463231E-04 +5.504681E-06 +5.710120E-03 +1.043566E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.981320E-04 +8.888272E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 1.600000E-02 5.600000E-05 -4.563082E-03 -6.119552E-06 -1.839038E-03 -1.089339E-06 -1.944879E-03 -2.372975E-06 -8.524215E-03 -1.874218E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.015373E-04 -3.618471E-07 +3.164928E-03 +1.114752E-05 +3.143660E-03 +3.198813E-06 +1.287643E-03 +7.268133E-07 +8.988217E-03 +1.652319E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -351,46 +581,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.300000E-02 -5.300000E-05 -6.763364E-03 -1.445064E-05 -2.970216E-03 -3.071874E-06 -2.622002E-03 -3.547897E-06 -5.177618E-03 -8.040228E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007686E-04 -9.046177E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 +1.000000E-03 +1.000000E-06 +9.617800E-04 +9.250208E-07 +8.875312E-04 +7.877116E-07 +7.814962E-04 +6.107364E-07 +2.981320E-04 +8.888272E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -403,14 +603,14 @@ tally 1: 0.000000E+00 8.000000E-03 1.400000E-05 -1.172941E-04 -1.212454E-06 -4.110442E-04 -5.740547E-06 -1.788140E-03 -9.775061E-07 -3.946448E-03 -3.956113E-06 +2.562256E-03 +5.938938E-06 +3.215552E-03 +2.429308E-06 +2.809239E-03 +2.320949E-06 +2.396627E-03 +1.615072E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -419,8 +619,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.109694E-04 -1.866863E-07 +6.015597E-04 +1.809401E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -441,26 +641,436 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.100000E-02 +2.150000E-04 +1.898034E-02 +7.784899E-05 +1.264567E-02 +4.010917E-05 +8.079721E-03 +1.493258E-05 +1.529918E-02 +5.419874E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.966100E-04 +2.679708E-07 +1.000000E-03 +1.000000E-06 +1.982438E-04 +3.930062E-08 +-4.410491E-04 +1.945243E-07 +-2.778880E-04 +7.722173E-08 +8.967976E-04 +8.042459E-07 +1.000000E-03 +1.000000E-06 +9.755714E-04 +9.517396E-07 +9.276094E-04 +8.604592E-07 +8.578678E-04 +7.359371E-07 +0.000000E+00 +0.000000E+00 +1.600000E-02 +5.400000E-05 +3.332422E-03 +1.335735E-05 +4.814665E-03 +5.403574E-06 +8.177949E-04 +2.462505E-06 +7.189603E-03 +1.112704E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.196133E-03 +7.153669E-07 +2.000000E-03 +2.000000E-06 +9.961345E-04 +5.766569E-07 +-1.350146E-04 +1.888753E-07 +-5.756575E-04 +1.828150E-07 +2.089751E-03 +2.580978E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.500000E-02 +5.900000E-05 +3.574847E-03 +7.661052E-06 +2.411448E-03 +4.875571E-06 +-4.456628E-04 +3.620849E-06 +5.991484E-03 +9.329446E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.953980E-04 +4.450119E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.402987E-03 +2.352531E-06 +4.000000E-03 +6.000000E-06 +3.730318E-03 +5.177826E-06 +3.229766E-03 +3.845053E-06 +2.569348E-03 +2.470333E-06 +0.000000E+00 +0.000000E+00 +2.200000E-02 +1.140000E-04 +1.157227E-02 +3.152553E-05 +5.993470E-03 +9.940306E-06 +6.549523E-03 +9.865076E-06 +8.969741E-03 +1.911355E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.980234E-04 +4.482705E-07 +1.000000E-03 +1.000000E-06 +4.538235E-04 +2.059558E-07 +-1.910664E-04 +3.650635E-08 +-4.470663E-04 +1.998683E-07 +6.040285E-04 +3.648505E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.200000E-02 +1.020000E-04 +4.042627E-03 +9.476178E-06 +2.881083E-03 +5.928110E-06 +3.065234E-03 +4.444894E-06 +1.168502E-02 +2.989919E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.020143E-04 +9.121262E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.100000E-02 +1.250000E-04 +9.991177E-03 +3.139502E-05 +2.556450E-03 +1.824566E-06 +3.329841E-03 +5.163205E-06 +9.576327E-03 +2.773298E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.959971E-04 +4.463253E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.200651E-03 +8.987598E-07 +1.000000E-03 +1.000000E-06 +9.522533E-04 +9.067863E-07 +8.601795E-04 +7.399088E-07 +7.303458E-04 +5.334049E-07 +3.020143E-04 +9.121262E-08 +2.100000E-02 +1.150000E-04 +1.242804E-03 +3.619176E-06 +1.867552E-03 +1.359691E-06 +2.306130E-03 +5.045915E-06 +9.000544E-03 +2.094585E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.989325E-04 +8.936066E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.990909E-04 +3.589099E-07 +1.000000E-03 +1.000000E-06 +9.669322E-04 +9.349578E-07 +9.024367E-04 +8.143920E-07 +8.097037E-04 +6.556200E-07 +0.000000E+00 +0.000000E+00 +1.800000E-02 +7.600000E-05 +7.900751E-03 +1.937232E-05 +5.101355E-03 +8.800793E-06 +4.128814E-03 +6.665133E-06 +7.790979E-03 +1.525891E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.986793E-04 +1.792085E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.020143E-04 +9.121262E-08 +1.000000E-03 +1.000000E-06 +9.912755E-04 +9.826271E-07 +9.739406E-04 +9.485603E-07 +9.482220E-04 +8.991250E-07 +0.000000E+00 +0.000000E+00 +2.200000E-02 +1.260000E-04 +7.579348E-03 +2.124946E-05 +6.787172E-03 +1.874543E-05 +3.914660E-03 +8.731250E-06 +1.167769E-02 +3.750609E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.986793E-04 +1.792085E-07 +2.000000E-03 +2.000000E-06 +3.631413E-04 +1.401984E-06 +1.102976E-03 +1.004698E-06 +1.304621E-03 +1.083698E-06 +2.993714E-03 +2.324726E-06 +5.000000E-03 +7.000000E-06 +4.239270E-03 +4.739399E-06 +2.968259E-03 +2.239642E-06 +1.575924E-03 +1.063419E-06 +2.989325E-04 +8.936066E-08 +2.700000E-02 +1.610000E-04 +8.295783E-03 +1.670306E-05 +5.150584E-03 +1.540799E-05 +2.687614E-03 +7.461732E-06 +1.197674E-02 +3.010342E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.195131E-03 +5.358064E-07 +1.000000E-03 +1.000000E-06 +-7.791468E-04 +6.070697E-07 +4.106046E-04 +1.685961E-07 +-1.377092E-05 +1.896382E-10 +1.803453E-03 +1.268084E-06 +2.000000E-03 +2.000000E-06 +1.885433E-03 +1.778733E-06 +1.668099E-03 +1.401699E-06 +1.370094E-03 +9.733671E-07 +2.995454E-04 +8.972747E-08 +2.500000E-02 +1.690000E-04 +7.306400E-03 +1.879755E-05 +5.910494E-03 +7.423636E-06 +4.158757E-03 +8.004612E-06 +1.136957E-02 +3.132992E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 1.000000E-03 1.000000E-06 -9.168648E-04 -8.406410E-07 -7.609615E-04 -5.790624E-07 -5.515881E-04 -3.042494E-07 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 +-1.294470E-04 +1.675653E-08 +-4.748652E-04 +2.254970E-07 +1.887478E-04 +3.562574E-08 +5.990909E-04 +3.589099E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -471,6 +1081,196 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.900000E-02 +1.270000E-04 +7.644698E-03 +2.593978E-05 +4.291971E-03 +7.952406E-06 +1.754591E-03 +1.626852E-06 +8.970335E-03 +2.698525E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.981320E-04 +8.888272E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.100000E-02 +9.900000E-05 +9.175459E-03 +3.081816E-05 +6.537841E-03 +1.693021E-05 +3.371815E-03 +6.901863E-06 +1.109875E-02 +2.912624E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.991339E-04 +8.948108E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.100000E-02 +3.150000E-04 +7.491923E-03 +2.563522E-05 +4.484513E-03 +1.087903E-05 +5.244220E-03 +1.284762E-05 +1.256302E-02 +4.702441E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.972659E-04 +1.783638E-07 +1.000000E-03 +1.000000E-06 +1.684904E-04 +2.838901E-08 +-4.574165E-04 +2.092298E-07 +-2.407774E-04 +5.797376E-08 +1.503908E-03 +1.178356E-06 +2.000000E-03 +2.000000E-06 +1.675714E-03 +1.446154E-06 +1.169231E-03 +9.498292E-07 +6.921651E-04 +8.538185E-07 +3.020143E-04 +9.121262E-08 +2.000000E-02 +8.600000E-05 +9.188471E-03 +2.173815E-05 +1.860120E-03 +4.452062E-06 +2.429984E-03 +2.502873E-06 +1.048716E-02 +2.272644E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.974105E-04 +4.471701E-07 +2.000000E-03 +2.000000E-06 +1.794485E-03 +1.610365E-06 +1.415547E-03 +1.003887E-06 +9.217303E-04 +4.304779E-07 +0.000000E+00 +0.000000E+00 +1.800000E-02 +7.400000E-05 +3.179742E-03 +4.790936E-06 +-6.355126E-04 +5.202988E-06 +1.151706E-03 +3.152245E-06 +7.489949E-03 +1.301150E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +6.585165E-04 +4.336439E-07 +1.504659E-04 +2.263998E-08 +-2.738705E-04 +7.500507E-08 +1.196133E-03 +7.153669E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -482,15 +1282,15 @@ tally 1: 0.000000E+00 0.000000E+00 3.000000E-02 -2.020000E-04 -1.305502E-02 -4.343057E-05 -8.214305E-03 -2.001202E-05 -3.511762E-03 -1.412559E-05 -1.401995E-02 -4.269615E-05 +2.060000E-04 +1.541898E-02 +5.863846E-05 +9.395114E-03 +2.654761E-05 +8.661018E-03 +2.160642E-05 +1.049373E-02 +2.404605E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -499,6 +1299,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.396224E-03 +1.614108E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -507,6 +1309,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.600725E-03 +5.038163E-06 +4.000000E-03 +8.000000E-06 +3.781504E-03 +7.153441E-06 +3.368106E-03 +5.701400E-06 +2.804131E-03 +4.034404E-06 +2.989325E-04 +8.936066E-08 +1.900000E-02 +7.900000E-05 +6.408930E-03 +1.103823E-05 +3.228416E-03 +7.109320E-06 +4.961615E-04 +2.423816E-06 +1.079243E-02 +2.644603E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -515,792 +1339,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.400000E-02 -1.320000E-04 -5.207205E-03 -9.311400E-06 -3.232372E-03 -3.475980E-06 -2.062884E-03 -4.773104E-06 -1.039066E-02 -2.611825E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.171802E-04 -4.646485E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.221939E-03 -7.467452E-07 -1.000000E-03 -1.000000E-06 -9.910929E-04 -9.822652E-07 -9.733978E-04 -9.475032E-07 -9.471508E-04 -8.970946E-07 -0.000000E+00 -0.000000E+00 -1.200000E-02 -5.000000E-05 -2.602864E-03 -4.471106E-06 -4.677566E-03 -1.033338E-05 -3.640584E-03 -3.605122E-06 -4.845169E-03 -8.244364E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.100000E-02 -3.700000E-05 -3.786358E-03 -5.908272E-06 -3.416266E-03 -7.032934E-06 -3.353945E-03 -5.140933E-06 -4.261660E-03 -4.981501E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.136905E-04 -1.883305E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.700000E-02 -2.090000E-04 -7.046302E-03 -1.594429E-05 -6.489218E-03 -1.057182E-05 -5.057204E-03 -8.269888E-06 -1.274541E-02 -3.591083E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.503843E-03 -2.261544E-06 -3.000000E-03 -5.000000E-06 -3.434984E-04 -2.731822E-07 --1.911976E-04 -2.018778E-08 --5.635206E-04 -2.075189E-07 -2.764973E-03 -3.917274E-06 -2.000000E-03 -2.000000E-06 -1.802029E-03 -1.623906E-06 -1.435858E-03 -1.032682E-06 -9.559957E-04 -4.622600E-07 -0.000000E+00 -0.000000E+00 -2.600000E-02 -1.540000E-04 -1.210267E-02 -4.180540E-05 -5.431699E-03 -2.284317E-05 -6.108638E-03 -1.136078E-05 -1.309420E-02 -3.810504E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.124312E-04 -1.875678E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.044609E-04 -3.653729E-07 -1.000000E-03 -1.000000E-06 -9.341546E-04 -8.726448E-07 -8.089673E-04 -6.544280E-07 -6.367311E-04 -4.054265E-07 -3.022304E-04 -9.134324E-08 -2.100000E-02 -9.900000E-05 -1.206996E-02 -4.033646E-05 -6.345510E-03 -1.603169E-05 -1.976558E-03 -4.386164E-06 -1.001209E-02 -2.316074E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007686E-04 -9.046177E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.815901E-03 -1.829916E-06 -2.000000E-03 -2.000000E-06 -1.977802E-03 -1.955858E-06 -1.933788E-03 -1.869841E-06 -1.868714E-03 -1.746332E-06 -0.000000E+00 -0.000000E+00 -1.100000E-02 -3.900000E-05 -2.604154E-03 -9.668124E-06 -1.503936E-04 -1.170450E-06 -5.645599E-04 -1.841604E-06 -5.455481E-03 -1.116233E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.015373E-04 -3.618471E-07 -1.000000E-03 -1.000000E-06 -9.936377E-04 -9.873159E-07 -9.809739E-04 -9.623097E-07 -9.621293E-04 -9.256927E-07 -0.000000E+00 -0.000000E+00 -4.100000E-02 -3.610000E-04 -1.275568E-02 -3.756672E-05 -7.436840E-03 -1.784918E-05 -6.238119E-03 -1.114039E-05 -1.706095E-02 -6.393171E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.510747E-03 -8.216143E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.500000E-02 -1.570000E-04 -4.743361E-03 -1.500512E-05 -2.243747E-03 -1.216909E-05 -6.504387E-04 -5.012686E-06 -1.369930E-02 -4.220232E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.124312E-04 -1.875678E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.205998E-03 -7.272200E-07 -2.000000E-03 -2.000000E-06 -1.935082E-03 -1.872342E-06 -1.808514E-03 -1.635965E-06 -1.626644E-03 -1.325172E-06 -0.000000E+00 -0.000000E+00 -1.800000E-02 -1.180000E-04 -6.144587E-03 -1.810176E-05 -3.517233E-03 -7.894223E-06 -5.434668E-03 -1.689927E-05 -7.002945E-03 -1.633731E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.111025E-04 -2.767076E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.000000E-03 -1.400000E-05 -2.937841E-03 -3.083257E-06 -1.316488E-03 -1.378720E-06 -1.917209E-03 -1.388887E-06 -2.434865E-03 -1.665821E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.100000E-02 -4.290000E-04 -1.555575E-02 -6.845536E-05 -1.492622E-02 -7.523417E-05 -4.779064E-03 -1.568962E-05 -1.858109E-02 -9.770216E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007686E-04 -9.046177E-08 -1.000000E-03 -1.000000E-06 --7.961895E-04 -6.339178E-07 -4.508767E-04 -2.032898E-07 --6.751245E-05 -4.557931E-09 -2.105380E-03 -4.432627E-06 -1.000000E-03 -1.000000E-06 -7.706275E-04 -5.938667E-07 -3.908001E-04 -1.527247E-07 --1.181620E-05 -1.396226E-10 -0.000000E+00 -0.000000E+00 -2.300000E-02 -1.870000E-04 -8.530317E-03 -2.513821E-05 -2.769866E-03 -1.832987E-06 -3.367000E-03 -3.408158E-06 -1.029151E-02 -3.475479E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007686E-04 -9.046177E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.300000E-02 -1.110000E-04 -1.493458E-02 -4.520237E-05 -8.130453E-03 -1.434362E-05 -5.917132E-03 -7.829616E-06 -1.005025E-02 -2.033292E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007686E-04 -9.046177E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.000000E-03 -1.100000E-05 -2.102923E-03 -3.237003E-06 -5.338761E-04 -1.665334E-06 -2.177563E-03 -1.210407E-06 -3.049393E-03 -2.236660E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.300000E-02 -2.470000E-04 -1.392809E-02 -4.644694E-05 -6.658849E-03 -2.448402E-05 -2.971606E-03 -4.596585E-06 -1.583003E-02 -5.281056E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.146617E-04 -4.615975E-07 -1.000000E-03 -1.000000E-06 -5.742336E-04 -3.297442E-07 --5.383652E-06 -2.898371E-11 --3.879749E-04 -1.505245E-07 -1.213130E-03 -5.521442E-07 -2.000000E-03 -2.000000E-06 -1.895662E-03 -1.796999E-06 -1.695499E-03 -1.439233E-06 -1.415735E-03 -1.008516E-06 -3.007686E-04 -9.046177E-08 -4.000000E-02 -3.460000E-04 -1.325054E-02 -4.611581E-05 -4.279513E-03 -1.445432E-05 -5.681074E-03 -8.701686E-06 -1.883326E-02 -7.820565E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.052295E-04 -4.558347E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.525429E-03 -8.388512E-07 -3.000000E-03 -3.000000E-06 -2.694249E-03 -2.442268E-06 -2.163402E-03 -1.718872E-06 -1.541834E-03 -1.227757E-06 -0.000000E+00 -0.000000E+00 -2.000000E-02 -1.000000E-04 -5.928221E-03 -9.217060E-06 -5.152240E-03 -1.183310E-05 -2.057268E-03 -2.929338E-06 -9.478909E-03 -2.313196E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.057201E-04 -1.834492E-07 -1.000000E-03 -1.000000E-06 -9.405199E-04 -8.845778E-07 -8.268666E-04 -6.837084E-07 -6.691277E-04 -4.477318E-07 -6.124312E-04 -1.875678E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.124312E-04 -1.875678E-07 -1.400000E-02 -5.200000E-05 -6.537971E-03 -1.724690E-05 -3.839523E-03 -8.693753E-06 -4.048043E-03 -5.450370E-06 -7.581656E-03 -1.459334E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.069794E-04 -3.684240E-07 -1.000000E-03 -1.000000E-06 -5.703488E-04 -3.252978E-07 --1.205336E-05 -1.452836E-10 --3.916902E-04 -1.534212E-07 -0.000000E+00 -0.000000E+00 -3.200000E-02 -2.340000E-04 -1.368605E-02 -4.005184E-05 -6.894848E-03 -1.073483E-05 -5.553663E-03 -7.001843E-06 -1.492310E-02 -4.851599E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.224455E-03 -5.613642E-07 +3.020143E-04 +9.121262E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1322,15 +1362,15 @@ tally 1: 0.000000E+00 0.000000E+00 2.800000E-02 -1.860000E-04 -1.044511E-02 -6.915901E-05 -6.444951E-03 -3.586496E-05 -5.196826E-03 -1.312451E-05 -1.156517E-02 -3.164422E-05 +1.660000E-04 +1.585913E-02 +6.353606E-05 +1.000709E-02 +2.500587E-05 +6.237459E-03 +8.453167E-06 +1.108880E-02 +2.616665E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1339,328 +1379,278 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.057201E-04 -1.834492E-07 +1.194532E-03 +7.134552E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.800000E-02 +8.200000E-05 +8.780691E-03 +2.358452E-05 +1.816210E-03 +1.543496E-06 +1.880620E-03 +1.310997E-06 +7.183087E-03 +1.306174E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.995454E-04 +8.972747E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.981320E-04 +8.888272E-08 1.000000E-03 1.000000E-06 --6.535773E-04 -4.271632E-07 -1.407448E-04 -1.980911E-08 -2.824055E-04 -7.975284E-08 -1.822205E-03 -1.106831E-06 +1.324970E-04 +1.755546E-08 +-4.736668E-04 +2.243602E-07 +-1.929304E-04 +3.722214E-08 +0.000000E+00 +0.000000E+00 +3.300000E-02 +2.390000E-04 +9.004426E-03 +3.202491E-05 +8.390638E-03 +2.225399E-05 +7.671245E-03 +2.173426E-05 +1.526879E-02 +4.932937E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.196357E-03 +5.372737E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.990909E-04 +3.589099E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.200000E-02 +4.600000E-05 +1.118075E-03 +5.126429E-06 +1.131273E-04 +9.269523E-07 +-4.997208E-04 +2.049174E-07 +4.186564E-03 +4.464187E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.981320E-04 +8.888272E-08 +1.000000E-03 +1.000000E-06 +1.681598E-04 +2.827772E-08 +-4.575834E-04 +2.093826E-07 +-2.403518E-04 +5.776898E-08 +2.093736E-03 +3.310679E-06 +3.000000E-03 +5.000000E-06 +2.887280E-03 +4.581616E-06 +2.669986E-03 +3.835050E-06 +2.363696E-03 +2.915580E-06 +0.000000E+00 +0.000000E+00 +1.500000E-02 +5.900000E-05 +3.685307E-03 +1.268655E-05 +5.360583E-03 +1.364253E-05 +1.590442E-03 +2.811111E-06 +7.793073E-03 +1.277581E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.981320E-04 +8.888272E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.000000E-03 +1.300000E-05 +3.106624E-03 +9.484025E-06 +4.505496E-03 +5.432355E-06 +2.355878E-03 +2.623009E-06 +2.690622E-03 +1.877213E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.989325E-04 +8.936066E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.195730E-03 +1.429770E-06 +1.000000E-03 +1.000000E-06 +9.838946E-04 +9.680486E-07 +9.520729E-04 +9.064428E-07 +9.053026E-04 +8.195728E-07 +0.000000E+00 +0.000000E+00 +2.500000E-02 +1.390000E-04 +9.492341E-03 +2.448502E-05 +3.248123E-03 +2.577618E-06 +1.941360E-03 +2.063052E-06 +1.137644E-02 +3.026289E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.989325E-04 +8.936066E-08 +1.000000E-03 +1.000000E-06 +-6.411363E-05 +4.110558E-09 +-4.938342E-04 +2.438722E-07 +9.551160E-05 +9.122465E-09 +2.684602E-03 +5.778221E-06 2.000000E-03 2.000000E-06 -1.954998E-03 -1.911525E-06 -1.867287E-03 -1.747820E-06 -1.741309E-03 -1.532659E-06 -0.000000E+00 -0.000000E+00 -1.900000E-02 -1.010000E-04 -1.062788E-02 -3.182295E-05 -6.707513E-03 -1.259151E-05 -6.889024E-03 -1.429877E-05 -8.202036E-03 -2.430378E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.306024E-04 -8.660208E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.306024E-04 -8.660208E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -1.500000E-02 -4.500000E-05 -3.192578E-03 -7.201112E-06 -4.457942E-03 -6.346144E-06 -3.572536E-03 -4.921318E-06 -7.292620E-03 -1.123722E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.111025E-04 -2.767076E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.069794E-04 -3.684240E-07 -1.000000E-03 -1.000000E-06 -9.537549E-04 -9.096483E-07 -8.644725E-04 -7.473127E-07 -7.383215E-04 -5.451186E-07 -0.000000E+00 -0.000000E+00 -2.300000E-02 -1.310000E-04 -7.696543E-03 -2.602323E-05 -5.553275E-03 -1.677303E-05 -3.110421E-03 -1.605284E-05 -1.157943E-02 -3.065139E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -1.000000E-03 -1.000000E-06 --1.849356E-05 -3.420117E-10 --4.994870E-04 -2.494872E-07 -2.772452E-05 -7.686492E-10 -9.104691E-04 -8.289540E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.600000E-02 -1.460000E-04 -1.097600E-02 -2.696995E-05 -8.425033E-03 -2.480653E-05 -3.259803E-03 -4.519527E-06 -1.278442E-02 -3.571130E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.600000E-02 -6.000000E-05 -2.471171E-03 -8.220215E-06 -2.563821E-04 -8.785791E-07 -1.300883E-03 -3.079168E-06 -7.314002E-03 -1.134821E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.022304E-04 -9.134324E-08 -1.000000E-03 -1.000000E-06 --5.657444E-04 -3.200667E-07 --1.989995E-05 -3.960081E-10 -3.959267E-04 -1.567580E-07 -3.007686E-04 -9.046177E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.000000E-03 -1.800000E-05 -5.436075E-03 -7.868978E-06 -2.425522E-03 -1.963607E-06 -7.168734E-04 -1.273978E-06 -4.589694E-03 -5.548791E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +1.975537E-03 +1.951439E-06 +1.927159E-03 +1.857550E-06 +1.855946E-03 +1.724502E-06 0.000000E+00 0.000000E+00 2.100000E-02 -1.070000E-04 -7.539735E-03 -2.068189E-05 -3.936810E-03 -7.972494E-06 -2.420366E-04 -1.148364E-06 -9.428594E-03 -2.131421E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.053824E-04 -9.325841E-08 -2.000000E-03 -2.000000E-06 -1.606787E-04 -1.589809E-06 -1.384713E-03 -1.050316E-06 -7.117279E-04 -6.789060E-07 -9.257840E-04 -4.781566E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.600000E-02 -5.100000E-04 -1.468472E-02 -4.705766E-05 -8.285657E-03 -2.501121E-05 -5.066048E-03 -7.892505E-06 -1.769628E-02 -7.226941E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.216485E-03 -5.564829E-07 +9.500000E-05 +3.106757E-03 +7.530480E-06 +2.693211E-04 +3.828657E-06 +1.317058E-03 +3.136131E-06 +1.017555E-02 +2.236513E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1679,18 +1669,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -2.300000E-02 -1.130000E-04 -9.030313E-03 -2.036594E-05 -5.561323E-03 -2.088769E-05 -3.949070E-03 -5.399490E-06 -1.065996E-02 -2.405722E-05 +5.990909E-04 +3.589099E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1699,8 +1679,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.124312E-04 -1.875678E-07 +0.000000E+00 +0.000000E+00 +1.400000E-02 +5.400000E-05 +5.944397E-03 +1.655215E-05 +1.726828E-03 +5.006812E-06 +-1.657930E-03 +4.261204E-06 +5.696729E-03 +8.356388E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1709,48 +1699,48 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.044609E-04 -3.653729E-07 +2.989325E-04 +8.936066E-08 1.000000E-03 1.000000E-06 -9.969425E-04 -9.938944E-07 -9.908416E-04 -9.817670E-07 -9.817251E-04 -9.637842E-07 -0.000000E+00 -0.000000E+00 -1.300000E-02 -4.300000E-05 -1.119189E-03 -4.668647E-06 --1.976393E-04 -4.632517E-06 -2.358914E-03 -3.047107E-06 -6.688330E-03 -1.125860E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 +6.866979E-04 +4.715540E-07 +2.073310E-04 +4.298614E-08 +-2.205090E-04 +4.862422E-08 +1.496493E-03 +1.164240E-06 1.000000E-03 1.000000E-06 --3.353539E-04 -1.124622E-07 --3.313067E-04 -1.097641E-07 -4.087442E-04 -1.670718E-07 -9.161472E-04 -8.393257E-07 +-9.623002E-04 +9.260217E-07 +8.890326E-04 +7.903789E-07 +-7.843269E-04 +6.151687E-07 +0.000000E+00 +0.000000E+00 +1.000000E-02 +3.600000E-05 +4.361597E-03 +7.003332E-06 +1.326662E-03 +8.159669E-07 +-1.380710E-04 +7.198742E-08 +4.786948E-03 +7.321215E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.981320E-04 +8.888272E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1761,16 +1751,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.600000E-02 -1.980000E-04 -1.024848E-02 -3.100622E-05 --1.145555E-04 -2.521646E-06 -1.453177E-03 -1.505423E-06 -1.124135E-02 -3.412415E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1779,8 +1759,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.029991E-04 -1.818050E-07 +0.000000E+00 +0.000000E+00 +3.900000E-02 +3.870000E-04 +1.427389E-02 +8.090929E-05 +8.826225E-03 +2.660607E-05 +4.117139E-03 +7.490443E-06 +2.216995E-02 +1.059100E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.198182E-03 +1.435639E-06 1.000000E-03 1.000000E-06 -2.499079E-04 @@ -1789,40 +1789,28 @@ tally 1: 1.650952E-07 3.358425E-04 1.127902E-07 -6.044609E-04 -3.653729E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.900000E-02 -8.700000E-05 -6.743817E-03 -2.313239E-05 -1.353852E-03 -7.358462E-06 -3.054381E-03 -5.051576E-06 -7.932519E-03 -1.438883E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 +8.943961E-04 +7.999445E-07 +1.000000E-03 +1.000000E-06 +9.401483E-04 +8.838788E-07 +8.258183E-04 +6.819758E-07 +6.672205E-04 +4.451832E-07 +0.000000E+00 +0.000000E+00 +3.700000E-02 +3.250000E-04 +5.676482E-03 +1.840790E-05 +7.927554E-03 +2.448188E-05 +2.237603E-03 +2.700519E-06 +1.646685E-02 +6.188122E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1831,6 +1819,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.800372E-03 +1.258824E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1839,18 +1829,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.798328E-03 +1.615735E-06 +4.000000E-03 +6.000000E-06 +3.770169E-03 +5.325612E-06 +3.332954E-03 +4.161563E-06 +2.730616E-03 +2.811353E-06 0.000000E+00 0.000000E+00 2.000000E-02 -9.000000E-05 -4.678519E-03 -8.162854E-06 -2.588181E-03 -7.958110E-06 -2.322176E-03 -3.426024E-06 -8.534070E-03 -1.767419E-05 +9.600000E-05 +5.093280E-03 +1.425830E-05 +2.794340E-03 +1.663793E-05 +4.103789E-03 +6.867085E-06 +8.700108E-03 +1.850749E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1859,8 +1859,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.029991E-04 -1.818050E-07 +9.029611E-04 +4.542111E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1881,16 +1881,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.100000E-02 -3.300000E-05 -7.244624E-03 -1.778235E-05 -2.926133E-03 -9.287629E-06 -9.851866E-04 -6.097573E-06 -3.660351E-03 -3.716102E-06 +6.000000E-03 +1.400000E-05 +4.561928E-03 +8.999493E-06 +2.729392E-03 +4.924575E-06 +1.659472E-03 +3.263660E-06 +2.095047E-03 +1.698704E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1899,8 +1899,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.034897E-04 -9.210600E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1909,28 +1907,30 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.053824E-04 -9.325841E-08 +0.000000E+00 +0.000000E+00 +5.962641E-04 +3.555309E-07 1.000000E-03 1.000000E-06 -1.744930E-04 -3.044781E-08 --4.543283E-04 -2.064142E-07 --2.484572E-04 -6.173098E-08 +9.213015E-04 +8.487964E-07 +7.731946E-04 +5.978298E-07 +5.730412E-04 +3.283762E-07 0.000000E+00 0.000000E+00 1.000000E-02 2.600000E-05 -3.641369E-03 -6.818931E-06 -2.110606E-03 -2.176630E-06 -1.892973E-03 -1.812944E-06 -5.777456E-03 -9.494012E-06 +5.481204E-03 +1.421903E-05 +2.241220E-03 +8.639111E-06 +2.375771E-03 +4.453036E-06 +4.791983E-03 +5.914853E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1939,8 +1939,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.034897E-04 -9.210600E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1951,186 +1949,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.300000E-02 -3.900000E-05 -1.682557E-03 -1.846926E-06 -4.172846E-04 -1.892148E-06 -7.276646E-04 -1.085417E-06 -6.092709E-03 -8.907893E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.053824E-04 -9.325841E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.000000E-03 -7.000000E-06 -1.580450E-03 -1.753085E-06 -3.349602E-04 -3.639488E-07 -2.690006E-04 -2.374932E-07 -1.830811E-03 -9.321096E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.034897E-04 -9.210600E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.900000E-02 -1.250000E-04 -2.138118E-03 -8.791773E-06 -2.868574E-03 -9.339641E-06 -5.807501E-04 -1.660344E-06 -8.165982E-03 -2.226036E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.044609E-04 -3.653729E-07 +1.193329E-03 +8.893051E-07 1.000000E-03 1.000000E-06 -2.312419E-04 -5.347280E-08 --4.197908E-04 -1.762243E-07 --3.159499E-04 -9.982435E-08 -0.000000E+00 -0.000000E+00 -2.100000E-02 -1.070000E-04 -2.216472E-03 -6.388960E-06 -4.896969E-03 -6.428816E-06 -2.155707E-03 -2.884510E-06 -1.038058E-02 -2.477423E-05 +8.827246E-04 +7.792028E-07 +6.688042E-04 +4.472990E-07 +3.954668E-04 +1.563940E-07 +2.989325E-04 +8.936066E-08 +9.000000E-03 +2.100000E-05 +4.651230E-03 +4.741702E-06 +2.150788E-03 +1.086619E-06 +2.092494E-03 +1.840170E-06 +4.800173E-03 +5.412689E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2139,38 +1979,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.007686E-04 -9.046177E-08 -1.000000E-03 -1.000000E-06 -7.019813E-04 -4.927778E-07 -2.391667E-04 -5.720072E-08 --1.881699E-04 -3.540793E-08 -2.131373E-03 -2.696833E-06 -1.000000E-03 -1.000000E-06 -9.937981E-04 -9.876347E-07 -9.814521E-04 -9.632483E-07 -9.630767E-04 -9.275168E-07 -0.000000E+00 -0.000000E+00 -6.000000E-03 -1.000000E-05 -2.774441E-03 -2.455060E-06 --4.125360E-04 -1.557128E-06 --9.369606E-04 -2.349382E-06 -3.666415E-03 -4.871762E-06 +6.040285E-04 +3.648505E-07 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2179,18 +1991,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.057201E-04 -1.834492E-07 -1.000000E-03 -1.000000E-06 -8.429685E-04 -7.105959E-07 -5.658938E-04 -3.202358E-07 -2.330721E-04 -5.432261E-08 -6.015373E-04 -3.618471E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2202,15 +2002,335 @@ tally 1: 0.000000E+00 0.000000E+00 3.000000E-03 +3.000000E-06 +7.652902E-05 +1.571253E-06 +8.568788E-04 +1.094232E-06 +-7.206134E-04 +4.649382E-07 +9.000807E-04 +2.700544E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +9.101753E-04 +8.284190E-07 +7.426285E-04 +5.514972E-07 +5.197534E-04 +2.701436E-07 +2.989325E-04 +8.936066E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.989325E-04 +8.936066E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.400000E-02 +4.600000E-05 +6.259455E-03 +1.284922E-05 +2.076794E-03 +2.552816E-06 +6.278684E-04 +2.094249E-06 +6.584175E-03 +1.056233E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.990909E-04 +3.589099E-07 +1.000000E-03 +1.000000E-06 +6.257846E-04 +3.916063E-07 +8.740950E-05 +7.640421E-09 +-3.260239E-04 +1.062916E-07 +5.962641E-04 +3.555309E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.500000E-02 +7.500000E-05 +4.663045E-03 +1.215939E-05 +4.830409E-03 +8.682038E-06 +3.887884E-03 +4.756968E-06 +8.095588E-03 +1.984557E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.995454E-04 +8.972747E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.958095E-04 +4.452583E-07 +2.000000E-03 +2.000000E-06 +1.906393E-03 +1.818122E-06 +1.727184E-03 +1.499401E-06 +1.477537E-03 +1.118575E-06 +0.000000E+00 +0.000000E+00 +5.000000E-03 +7.000000E-06 +1.973804E-03 +3.852738E-06 +1.299550E-03 +2.189071E-06 +2.037626E-03 +1.354116E-06 +2.097904E-03 +9.889505E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +-9.618754E-04 +9.252042E-07 +8.878063E-04 +7.882000E-07 +-7.820147E-04 +6.115471E-07 +2.995454E-04 +8.972747E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.995454E-04 +8.972747E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.400000E-02 +6.600000E-05 +2.900274E-03 +2.656005E-06 +-1.326535E-04 +7.657613E-07 +2.692899E-03 +2.374742E-06 +7.492257E-03 +1.481323E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.976775E-04 +1.786102E-07 +1.000000E-03 +1.000000E-06 +-5.336276E-04 +2.847584E-07 +-7.286246E-05 +5.308937E-09 +4.205541E-04 +1.768657E-07 +6.040285E-04 +3.648505E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.100000E-02 +9.500000E-05 +1.100185E-02 +2.519922E-05 +5.296622E-03 +6.181448E-06 +4.290056E-03 +6.437184E-06 +9.878051E-03 +2.067153E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.981320E-04 +8.888272E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.494265E-03 +8.042497E-07 +3.000000E-03 +3.000000E-06 +6.851013E-04 +1.571044E-06 +8.565666E-04 +1.043968E-06 +7.365013E-04 +1.098388E-06 +0.000000E+00 +0.000000E+00 +3.000000E-03 5.000000E-06 -1.596397E-03 -1.275630E-06 -4.822532E-04 -1.627925E-07 -2.983020E-04 -9.401537E-08 -1.221939E-03 -7.467452E-07 +1.355880E-03 +1.020443E-06 +1.249756E-03 +8.001666E-07 +1.419322E-03 +1.107335E-06 +2.397825E-03 +2.688348E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2219,6 +2339,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.989325E-04 +8.936066E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2241,16 +2363,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.000000E-03 -4.000000E-05 --7.915490E-05 -1.150292E-07 -2.293529E-03 -2.932682E-06 -1.356149E-03 -9.471925E-07 -4.579650E-03 -7.918475E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2259,118 +2371,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.022304E-04 -9.134324E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.100000E-02 -3.300000E-05 -5.093647E-03 -1.217545E-05 -1.852586E-03 -4.478970E-06 -9.768799E-04 -1.395189E-06 -4.578572E-03 -5.491453E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.053824E-04 -9.325841E-08 -1.000000E-03 -1.000000E-06 -9.817451E-04 -9.638234E-07 -9.457351E-04 -8.944149E-07 -8.929546E-04 -7.973680E-07 -0.000000E+00 -0.000000E+00 -4.000000E-03 -4.000000E-06 --1.284380E-03 -9.356368E-07 --5.965448E-04 -6.643272E-07 -3.352677E-04 -2.956621E-07 -1.526686E-03 -6.527074E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-03 -1.000000E-06 --3.965739E-04 -1.572709E-07 --2.640937E-04 -6.974547E-08 -4.389371E-04 -1.926657E-07 -3.053824E-04 -9.325841E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2402,11 +2402,11 @@ tally 1: 0.000000E+00 0.000000E+00 tally 2: -5.720364E-01 -6.548043E-02 -6.217988E-01 -7.736906E-02 -3.624477E+00 -2.628737E+00 -4.047526E+01 -3.278231E+02 +5.712389E-01 +6.528048E-02 +6.215724E-01 +7.729703E-02 +3.619520E+00 +2.620927E+00 +4.040217E+01 +3.265313E+02 diff --git a/tests/test_statepoint_batch/results_true.dat b/tests/test_statepoint_batch/results_true.dat index 95b536997e..259b9fb1eb 100644 --- a/tests/test_statepoint_batch/results_true.dat +++ b/tests/test_statepoint_batch/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.051173E-01 6.930168E-04 +2.896118E-01 5.112161E-03 diff --git a/tests/test_statepoint_interval/results_true.dat b/tests/test_statepoint_interval/results_true.dat index 5263a6b7fd..bf062f283c 100644 --- a/tests/test_statepoint_interval/results_true.dat +++ b/tests/test_statepoint_interval/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.021779E-01 3.813358E-03 +2.938252E-01 5.852966E-03 diff --git a/tests/test_statepoint_restart/results_true.dat b/tests/test_statepoint_restart/results_true.dat index 0e4eef9a9d..a03d8885b1 100644 --- a/tests/test_statepoint_restart/results_true.dat +++ b/tests/test_statepoint_restart/results_true.dat @@ -1,16 +1,16 @@ k-combined: -3.021779E-01 3.813358E-03 +2.938252E-01 5.852966E-03 tally 1: -7.000000E-03 -2.100000E-05 -1.127639E-03 -7.464355E-07 --1.264355E-03 -1.192757E-06 -8.769846E-04 -1.117508E-06 -3.359153E-03 -4.366438E-06 +1.500000E-02 +6.100000E-05 +6.140730E-03 +1.827778E-05 +5.466817E-03 +1.172967E-05 +4.386203E-03 +6.988762E-06 +7.799017E-03 +1.730653E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -19,18 +19,58 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.107648E-04 -3.730336E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.982678E-04 +3.579243E-07 1.000000E-03 1.000000E-06 -6.713061E-04 -4.506518E-07 -1.759778E-04 -3.096817E-08 --2.506458E-04 -6.282332E-08 -6.069794E-04 -3.684240E-07 +9.657483E-04 +9.326697E-07 +8.990046E-04 +8.082092E-07 +8.031880E-04 +6.451110E-07 +0.000000E+00 +0.000000E+00 +7.000000E-03 +1.100000E-05 +-3.133071E-05 +2.698671E-06 +2.623750E-04 +1.344791E-06 +-2.483720E-03 +1.649588E-06 +3.294650E-03 +2.242064E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +6.245980E-04 +3.901227E-07 +8.518403E-05 +7.256319E-09 +-3.277224E-04 +1.074020E-07 +2.989325E-04 +8.936066E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -42,25 +82,15 @@ tally 1: 0.000000E+00 0.000000E+00 7.000000E-03 -1.500000E-05 -4.398928E-03 -8.198908E-06 -1.784486E-03 -3.422315E-06 -8.494423E-04 -9.262242E-07 -4.566637E-03 -5.646039E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.069794E-04 -3.684240E-07 +1.100000E-05 +2.955972E-03 +4.718865E-06 +2.296283E-03 +1.893728E-06 +1.374242E-03 +1.154127E-06 +4.505145E-03 +6.063009E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -81,16 +111,266 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.000000E-03 -3.000000E-06 --1.419189E-03 -9.791601E-07 --3.125982E-05 -5.086129E-07 -3.291570E-04 -1.943609E-07 -1.525426E-03 -8.346311E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.100000E-02 +1.230000E-04 +4.489511E-03 +2.028537E-05 +1.946623E-03 +1.610367E-06 +1.647952E-03 +1.769319E-06 +1.077022E-02 +2.893664E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.000807E-04 +2.700544E-07 +1.000000E-03 +1.000000E-06 +-9.045723E-04 +8.182510E-07 +7.273765E-04 +5.290766E-07 +-4.935596E-04 +2.436011E-07 +2.989325E-04 +8.936066E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +1.050000E-04 +2.386082E-03 +3.497107E-06 +4.555769E-03 +1.058977E-05 +1.879180E-03 +5.304853E-06 +7.792317E-03 +1.670472E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.198624E-03 +3.591835E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +3.327793E-04 +1.107421E-07 +-3.338869E-04 +1.114804E-07 +-4.070373E-04 +1.656794E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.995454E-04 +8.972747E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-02 +2.400000E-05 +5.261857E-03 +7.471221E-06 +5.280154E-03 +9.529481E-06 +5.060306E-03 +6.646531E-06 +6.894561E-03 +1.267269E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.000000E-03 +1.800000E-05 +-2.025476E-04 +1.858789E-06 +-6.686398E-04 +1.065456E-06 +6.586587E-04 +4.841450E-07 +2.994327E-03 +2.684002E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -123,146 +403,14 @@ tally 1: 0.000000E+00 1.000000E-03 1.000000E-06 --1.542107E-05 -2.378095E-10 --4.996433E-04 -2.496434E-07 -2.312244E-05 -5.346472E-10 -3.053824E-04 -9.325841E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-02 -8.600000E-05 -3.995253E-03 -1.648172E-05 -3.349403E-03 -1.166653E-05 -4.208940E-03 -7.077664E-06 -1.033905E-02 -2.197265E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.029991E-04 -1.818050E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.600000E-02 -1.620000E-04 -7.996640E-03 -1.882484E-05 -3.921034E-03 -1.157453E-05 -1.644629E-03 -3.217857E-06 -1.159182E-02 -3.534975E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.100000E-02 -2.500000E-05 -4.691861E-03 -7.999548E-06 -1.771537E-03 -3.385525E-06 -7.888659E-04 -1.911759E-06 -4.561602E-03 -4.337486E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.107648E-04 -3.730336E-07 -0.000000E+00 -0.000000E+00 +9.104915E-04 +8.289948E-07 +7.434921E-04 +5.527806E-07 +5.212445E-04 +2.716958E-07 +1.201894E-03 +7.222931E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -281,16 +429,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.990909E-04 +3.589099E-07 1.000000E-03 1.000000E-06 --3.878617E-04 -1.504367E-07 --2.743449E-04 -7.526515E-08 -4.359210E-04 -1.900271E-07 -3.034897E-04 -9.210600E-08 +-5.260403E-04 +2.767184E-07 +-8.492233E-05 +7.211803E-09 +4.251479E-04 +1.807507E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -321,26 +469,108 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.400000E-02 +3.540000E-04 +1.553475E-02 +6.367842E-05 +1.520994E-02 +7.741012E-05 +8.930877E-03 +2.739654E-05 +1.405733E-02 +6.608052E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.031624E-04 +4.543315E-07 +1.000000E-03 +1.000000E-06 +-2.223524E-04 +4.944060E-08 +-4.258391E-04 +1.813389E-07 +3.060456E-04 +9.366388E-08 +6.040285E-04 +3.648505E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.200000E-02 +3.400000E-05 +3.889614E-03 +6.587628E-06 +2.115055E-03 +3.167536E-06 +3.463231E-04 +5.504681E-06 +5.710120E-03 +1.043566E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.981320E-04 +8.888272E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 1.600000E-02 5.600000E-05 -4.563082E-03 -6.119552E-06 -1.839038E-03 -1.089339E-06 -1.944879E-03 -2.372975E-06 -8.524215E-03 -1.874218E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.015373E-04 -3.618471E-07 +3.164928E-03 +1.114752E-05 +3.143660E-03 +3.198813E-06 +1.287643E-03 +7.268133E-07 +8.988217E-03 +1.652319E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -351,46 +581,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.300000E-02 -5.300000E-05 -6.763364E-03 -1.445064E-05 -2.970216E-03 -3.071874E-06 -2.622002E-03 -3.547897E-06 -5.177618E-03 -8.040228E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007686E-04 -9.046177E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 +1.000000E-03 +1.000000E-06 +9.617800E-04 +9.250208E-07 +8.875312E-04 +7.877116E-07 +7.814962E-04 +6.107364E-07 +2.981320E-04 +8.888272E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -403,14 +603,14 @@ tally 1: 0.000000E+00 8.000000E-03 1.400000E-05 -1.172941E-04 -1.212454E-06 -4.110442E-04 -5.740547E-06 -1.788140E-03 -9.775061E-07 -3.946448E-03 -3.956113E-06 +2.562256E-03 +5.938938E-06 +3.215552E-03 +2.429308E-06 +2.809239E-03 +2.320949E-06 +2.396627E-03 +1.615072E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -419,8 +619,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.109694E-04 -1.866863E-07 +6.015597E-04 +1.809401E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -441,26 +641,436 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.100000E-02 +2.150000E-04 +1.898034E-02 +7.784899E-05 +1.264567E-02 +4.010917E-05 +8.079721E-03 +1.493258E-05 +1.529918E-02 +5.419874E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.966100E-04 +2.679708E-07 +1.000000E-03 +1.000000E-06 +1.982438E-04 +3.930062E-08 +-4.410491E-04 +1.945243E-07 +-2.778880E-04 +7.722173E-08 +8.967976E-04 +8.042459E-07 +1.000000E-03 +1.000000E-06 +9.755714E-04 +9.517396E-07 +9.276094E-04 +8.604592E-07 +8.578678E-04 +7.359371E-07 +0.000000E+00 +0.000000E+00 +1.600000E-02 +5.400000E-05 +3.332422E-03 +1.335735E-05 +4.814665E-03 +5.403574E-06 +8.177949E-04 +2.462505E-06 +7.189603E-03 +1.112704E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.196133E-03 +7.153669E-07 +2.000000E-03 +2.000000E-06 +9.961345E-04 +5.766569E-07 +-1.350146E-04 +1.888753E-07 +-5.756575E-04 +1.828150E-07 +2.089751E-03 +2.580978E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.500000E-02 +5.900000E-05 +3.574847E-03 +7.661052E-06 +2.411448E-03 +4.875571E-06 +-4.456628E-04 +3.620849E-06 +5.991484E-03 +9.329446E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.953980E-04 +4.450119E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.402987E-03 +2.352531E-06 +4.000000E-03 +6.000000E-06 +3.730318E-03 +5.177826E-06 +3.229766E-03 +3.845053E-06 +2.569348E-03 +2.470333E-06 +0.000000E+00 +0.000000E+00 +2.200000E-02 +1.140000E-04 +1.157227E-02 +3.152553E-05 +5.993470E-03 +9.940306E-06 +6.549523E-03 +9.865076E-06 +8.969741E-03 +1.911355E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.980234E-04 +4.482705E-07 +1.000000E-03 +1.000000E-06 +4.538235E-04 +2.059558E-07 +-1.910664E-04 +3.650635E-08 +-4.470663E-04 +1.998683E-07 +6.040285E-04 +3.648505E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.200000E-02 +1.020000E-04 +4.042627E-03 +9.476178E-06 +2.881083E-03 +5.928110E-06 +3.065234E-03 +4.444894E-06 +1.168502E-02 +2.989919E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.020143E-04 +9.121262E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.100000E-02 +1.250000E-04 +9.991177E-03 +3.139502E-05 +2.556450E-03 +1.824566E-06 +3.329841E-03 +5.163205E-06 +9.576327E-03 +2.773298E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.959971E-04 +4.463253E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.200651E-03 +8.987598E-07 +1.000000E-03 +1.000000E-06 +9.522533E-04 +9.067863E-07 +8.601795E-04 +7.399088E-07 +7.303458E-04 +5.334049E-07 +3.020143E-04 +9.121262E-08 +2.100000E-02 +1.150000E-04 +1.242804E-03 +3.619176E-06 +1.867552E-03 +1.359691E-06 +2.306130E-03 +5.045915E-06 +9.000544E-03 +2.094585E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.989325E-04 +8.936066E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.990909E-04 +3.589099E-07 +1.000000E-03 +1.000000E-06 +9.669322E-04 +9.349578E-07 +9.024367E-04 +8.143920E-07 +8.097037E-04 +6.556200E-07 +0.000000E+00 +0.000000E+00 +1.800000E-02 +7.600000E-05 +7.900751E-03 +1.937232E-05 +5.101355E-03 +8.800793E-06 +4.128814E-03 +6.665133E-06 +7.790979E-03 +1.525891E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.986793E-04 +1.792085E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.020143E-04 +9.121262E-08 +1.000000E-03 +1.000000E-06 +9.912755E-04 +9.826271E-07 +9.739406E-04 +9.485603E-07 +9.482220E-04 +8.991250E-07 +0.000000E+00 +0.000000E+00 +2.200000E-02 +1.260000E-04 +7.579348E-03 +2.124946E-05 +6.787172E-03 +1.874543E-05 +3.914660E-03 +8.731250E-06 +1.167769E-02 +3.750609E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.986793E-04 +1.792085E-07 +2.000000E-03 +2.000000E-06 +3.631413E-04 +1.401984E-06 +1.102976E-03 +1.004698E-06 +1.304621E-03 +1.083698E-06 +2.993714E-03 +2.324726E-06 +5.000000E-03 +7.000000E-06 +4.239270E-03 +4.739399E-06 +2.968259E-03 +2.239642E-06 +1.575924E-03 +1.063419E-06 +2.989325E-04 +8.936066E-08 +2.700000E-02 +1.610000E-04 +8.295783E-03 +1.670306E-05 +5.150584E-03 +1.540799E-05 +2.687614E-03 +7.461732E-06 +1.197674E-02 +3.010342E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.195131E-03 +5.358064E-07 +1.000000E-03 +1.000000E-06 +-7.791468E-04 +6.070697E-07 +4.106046E-04 +1.685961E-07 +-1.377092E-05 +1.896382E-10 +1.803453E-03 +1.268084E-06 +2.000000E-03 +2.000000E-06 +1.885433E-03 +1.778733E-06 +1.668099E-03 +1.401699E-06 +1.370094E-03 +9.733671E-07 +2.995454E-04 +8.972747E-08 +2.500000E-02 +1.690000E-04 +7.306400E-03 +1.879755E-05 +5.910494E-03 +7.423636E-06 +4.158757E-03 +8.004612E-06 +1.136957E-02 +3.132992E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 1.000000E-03 1.000000E-06 -9.168648E-04 -8.406410E-07 -7.609615E-04 -5.790624E-07 -5.515881E-04 -3.042494E-07 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 +-1.294470E-04 +1.675653E-08 +-4.748652E-04 +2.254970E-07 +1.887478E-04 +3.562574E-08 +5.990909E-04 +3.589099E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -471,6 +1081,196 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.900000E-02 +1.270000E-04 +7.644698E-03 +2.593978E-05 +4.291971E-03 +7.952406E-06 +1.754591E-03 +1.626852E-06 +8.970335E-03 +2.698525E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.981320E-04 +8.888272E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.100000E-02 +9.900000E-05 +9.175459E-03 +3.081816E-05 +6.537841E-03 +1.693021E-05 +3.371815E-03 +6.901863E-06 +1.109875E-02 +2.912624E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.991339E-04 +8.948108E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.100000E-02 +3.150000E-04 +7.491923E-03 +2.563522E-05 +4.484513E-03 +1.087903E-05 +5.244220E-03 +1.284762E-05 +1.256302E-02 +4.702441E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.972659E-04 +1.783638E-07 +1.000000E-03 +1.000000E-06 +1.684904E-04 +2.838901E-08 +-4.574165E-04 +2.092298E-07 +-2.407774E-04 +5.797376E-08 +1.503908E-03 +1.178356E-06 +2.000000E-03 +2.000000E-06 +1.675714E-03 +1.446154E-06 +1.169231E-03 +9.498292E-07 +6.921651E-04 +8.538185E-07 +3.020143E-04 +9.121262E-08 +2.000000E-02 +8.600000E-05 +9.188471E-03 +2.173815E-05 +1.860120E-03 +4.452062E-06 +2.429984E-03 +2.502873E-06 +1.048716E-02 +2.272644E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.974105E-04 +4.471701E-07 +2.000000E-03 +2.000000E-06 +1.794485E-03 +1.610365E-06 +1.415547E-03 +1.003887E-06 +9.217303E-04 +4.304779E-07 +0.000000E+00 +0.000000E+00 +1.800000E-02 +7.400000E-05 +3.179742E-03 +4.790936E-06 +-6.355126E-04 +5.202988E-06 +1.151706E-03 +3.152245E-06 +7.489949E-03 +1.301150E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +6.585165E-04 +4.336439E-07 +1.504659E-04 +2.263998E-08 +-2.738705E-04 +7.500507E-08 +1.196133E-03 +7.153669E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -482,15 +1282,15 @@ tally 1: 0.000000E+00 0.000000E+00 3.000000E-02 -2.020000E-04 -1.305502E-02 -4.343057E-05 -8.214305E-03 -2.001202E-05 -3.511762E-03 -1.412559E-05 -1.401995E-02 -4.269615E-05 +2.060000E-04 +1.541898E-02 +5.863846E-05 +9.395114E-03 +2.654761E-05 +8.661018E-03 +2.160642E-05 +1.049373E-02 +2.404605E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -499,6 +1299,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.396224E-03 +1.614108E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -507,6 +1309,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.600725E-03 +5.038163E-06 +4.000000E-03 +8.000000E-06 +3.781504E-03 +7.153441E-06 +3.368106E-03 +5.701400E-06 +2.804131E-03 +4.034404E-06 +2.989325E-04 +8.936066E-08 +1.900000E-02 +7.900000E-05 +6.408930E-03 +1.103823E-05 +3.228416E-03 +7.109320E-06 +4.961615E-04 +2.423816E-06 +1.079243E-02 +2.644603E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -515,792 +1339,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.400000E-02 -1.320000E-04 -5.207205E-03 -9.311400E-06 -3.232372E-03 -3.475980E-06 -2.062884E-03 -4.773104E-06 -1.039066E-02 -2.611825E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.171802E-04 -4.646485E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.221939E-03 -7.467452E-07 -1.000000E-03 -1.000000E-06 -9.910929E-04 -9.822652E-07 -9.733978E-04 -9.475032E-07 -9.471508E-04 -8.970946E-07 -0.000000E+00 -0.000000E+00 -1.200000E-02 -5.000000E-05 -2.602864E-03 -4.471106E-06 -4.677566E-03 -1.033338E-05 -3.640584E-03 -3.605122E-06 -4.845169E-03 -8.244364E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.100000E-02 -3.700000E-05 -3.786358E-03 -5.908272E-06 -3.416266E-03 -7.032934E-06 -3.353945E-03 -5.140933E-06 -4.261660E-03 -4.981501E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.136905E-04 -1.883305E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.700000E-02 -2.090000E-04 -7.046302E-03 -1.594429E-05 -6.489218E-03 -1.057182E-05 -5.057204E-03 -8.269888E-06 -1.274541E-02 -3.591083E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.503843E-03 -2.261544E-06 -3.000000E-03 -5.000000E-06 -3.434984E-04 -2.731822E-07 --1.911976E-04 -2.018778E-08 --5.635206E-04 -2.075189E-07 -2.764973E-03 -3.917274E-06 -2.000000E-03 -2.000000E-06 -1.802029E-03 -1.623906E-06 -1.435858E-03 -1.032682E-06 -9.559957E-04 -4.622600E-07 -0.000000E+00 -0.000000E+00 -2.600000E-02 -1.540000E-04 -1.210267E-02 -4.180540E-05 -5.431699E-03 -2.284317E-05 -6.108638E-03 -1.136078E-05 -1.309420E-02 -3.810504E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.124312E-04 -1.875678E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.044609E-04 -3.653729E-07 -1.000000E-03 -1.000000E-06 -9.341546E-04 -8.726448E-07 -8.089673E-04 -6.544280E-07 -6.367311E-04 -4.054265E-07 -3.022304E-04 -9.134324E-08 -2.100000E-02 -9.900000E-05 -1.206996E-02 -4.033646E-05 -6.345510E-03 -1.603169E-05 -1.976558E-03 -4.386164E-06 -1.001209E-02 -2.316074E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007686E-04 -9.046177E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.815901E-03 -1.829916E-06 -2.000000E-03 -2.000000E-06 -1.977802E-03 -1.955858E-06 -1.933788E-03 -1.869841E-06 -1.868714E-03 -1.746332E-06 -0.000000E+00 -0.000000E+00 -1.100000E-02 -3.900000E-05 -2.604154E-03 -9.668124E-06 -1.503936E-04 -1.170450E-06 -5.645599E-04 -1.841604E-06 -5.455481E-03 -1.116233E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.015373E-04 -3.618471E-07 -1.000000E-03 -1.000000E-06 -9.936377E-04 -9.873159E-07 -9.809739E-04 -9.623097E-07 -9.621293E-04 -9.256927E-07 -0.000000E+00 -0.000000E+00 -4.100000E-02 -3.610000E-04 -1.275568E-02 -3.756672E-05 -7.436840E-03 -1.784918E-05 -6.238119E-03 -1.114039E-05 -1.706095E-02 -6.393171E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.510747E-03 -8.216143E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.500000E-02 -1.570000E-04 -4.743361E-03 -1.500512E-05 -2.243747E-03 -1.216909E-05 -6.504387E-04 -5.012686E-06 -1.369930E-02 -4.220232E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.124312E-04 -1.875678E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.205998E-03 -7.272200E-07 -2.000000E-03 -2.000000E-06 -1.935082E-03 -1.872342E-06 -1.808514E-03 -1.635965E-06 -1.626644E-03 -1.325172E-06 -0.000000E+00 -0.000000E+00 -1.800000E-02 -1.180000E-04 -6.144587E-03 -1.810176E-05 -3.517233E-03 -7.894223E-06 -5.434668E-03 -1.689927E-05 -7.002945E-03 -1.633731E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.111025E-04 -2.767076E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.000000E-03 -1.400000E-05 -2.937841E-03 -3.083257E-06 -1.316488E-03 -1.378720E-06 -1.917209E-03 -1.388887E-06 -2.434865E-03 -1.665821E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.100000E-02 -4.290000E-04 -1.555575E-02 -6.845536E-05 -1.492622E-02 -7.523417E-05 -4.779064E-03 -1.568962E-05 -1.858109E-02 -9.770216E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007686E-04 -9.046177E-08 -1.000000E-03 -1.000000E-06 --7.961895E-04 -6.339178E-07 -4.508767E-04 -2.032898E-07 --6.751245E-05 -4.557931E-09 -2.105380E-03 -4.432627E-06 -1.000000E-03 -1.000000E-06 -7.706275E-04 -5.938667E-07 -3.908001E-04 -1.527247E-07 --1.181620E-05 -1.396226E-10 -0.000000E+00 -0.000000E+00 -2.300000E-02 -1.870000E-04 -8.530317E-03 -2.513821E-05 -2.769866E-03 -1.832987E-06 -3.367000E-03 -3.408158E-06 -1.029151E-02 -3.475479E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007686E-04 -9.046177E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.300000E-02 -1.110000E-04 -1.493458E-02 -4.520237E-05 -8.130453E-03 -1.434362E-05 -5.917132E-03 -7.829616E-06 -1.005025E-02 -2.033292E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007686E-04 -9.046177E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.000000E-03 -1.100000E-05 -2.102923E-03 -3.237003E-06 -5.338761E-04 -1.665334E-06 -2.177563E-03 -1.210407E-06 -3.049393E-03 -2.236660E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.300000E-02 -2.470000E-04 -1.392809E-02 -4.644694E-05 -6.658849E-03 -2.448402E-05 -2.971606E-03 -4.596585E-06 -1.583003E-02 -5.281056E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.146617E-04 -4.615975E-07 -1.000000E-03 -1.000000E-06 -5.742336E-04 -3.297442E-07 --5.383652E-06 -2.898371E-11 --3.879749E-04 -1.505245E-07 -1.213130E-03 -5.521442E-07 -2.000000E-03 -2.000000E-06 -1.895662E-03 -1.796999E-06 -1.695499E-03 -1.439233E-06 -1.415735E-03 -1.008516E-06 -3.007686E-04 -9.046177E-08 -4.000000E-02 -3.460000E-04 -1.325054E-02 -4.611581E-05 -4.279513E-03 -1.445432E-05 -5.681074E-03 -8.701686E-06 -1.883326E-02 -7.820565E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.052295E-04 -4.558347E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.525429E-03 -8.388512E-07 -3.000000E-03 -3.000000E-06 -2.694249E-03 -2.442268E-06 -2.163402E-03 -1.718872E-06 -1.541834E-03 -1.227757E-06 -0.000000E+00 -0.000000E+00 -2.000000E-02 -1.000000E-04 -5.928221E-03 -9.217060E-06 -5.152240E-03 -1.183310E-05 -2.057268E-03 -2.929338E-06 -9.478909E-03 -2.313196E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.057201E-04 -1.834492E-07 -1.000000E-03 -1.000000E-06 -9.405199E-04 -8.845778E-07 -8.268666E-04 -6.837084E-07 -6.691277E-04 -4.477318E-07 -6.124312E-04 -1.875678E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.124312E-04 -1.875678E-07 -1.400000E-02 -5.200000E-05 -6.537971E-03 -1.724690E-05 -3.839523E-03 -8.693753E-06 -4.048043E-03 -5.450370E-06 -7.581656E-03 -1.459334E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.069794E-04 -3.684240E-07 -1.000000E-03 -1.000000E-06 -5.703488E-04 -3.252978E-07 --1.205336E-05 -1.452836E-10 --3.916902E-04 -1.534212E-07 -0.000000E+00 -0.000000E+00 -3.200000E-02 -2.340000E-04 -1.368605E-02 -4.005184E-05 -6.894848E-03 -1.073483E-05 -5.553663E-03 -7.001843E-06 -1.492310E-02 -4.851599E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.224455E-03 -5.613642E-07 +3.020143E-04 +9.121262E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1322,15 +1362,15 @@ tally 1: 0.000000E+00 0.000000E+00 2.800000E-02 -1.860000E-04 -1.044511E-02 -6.915901E-05 -6.444951E-03 -3.586496E-05 -5.196826E-03 -1.312451E-05 -1.156517E-02 -3.164422E-05 +1.660000E-04 +1.585913E-02 +6.353606E-05 +1.000709E-02 +2.500587E-05 +6.237459E-03 +8.453167E-06 +1.108880E-02 +2.616665E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1339,328 +1379,278 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.057201E-04 -1.834492E-07 +1.194532E-03 +7.134552E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.800000E-02 +8.200000E-05 +8.780691E-03 +2.358452E-05 +1.816210E-03 +1.543496E-06 +1.880620E-03 +1.310997E-06 +7.183087E-03 +1.306174E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.995454E-04 +8.972747E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.981320E-04 +8.888272E-08 1.000000E-03 1.000000E-06 --6.535773E-04 -4.271632E-07 -1.407448E-04 -1.980911E-08 -2.824055E-04 -7.975284E-08 -1.822205E-03 -1.106831E-06 +1.324970E-04 +1.755546E-08 +-4.736668E-04 +2.243602E-07 +-1.929304E-04 +3.722214E-08 +0.000000E+00 +0.000000E+00 +3.300000E-02 +2.390000E-04 +9.004426E-03 +3.202491E-05 +8.390638E-03 +2.225399E-05 +7.671245E-03 +2.173426E-05 +1.526879E-02 +4.932937E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.196357E-03 +5.372737E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.990909E-04 +3.589099E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.200000E-02 +4.600000E-05 +1.118075E-03 +5.126429E-06 +1.131273E-04 +9.269523E-07 +-4.997208E-04 +2.049174E-07 +4.186564E-03 +4.464187E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.981320E-04 +8.888272E-08 +1.000000E-03 +1.000000E-06 +1.681598E-04 +2.827772E-08 +-4.575834E-04 +2.093826E-07 +-2.403518E-04 +5.776898E-08 +2.093736E-03 +3.310679E-06 +3.000000E-03 +5.000000E-06 +2.887280E-03 +4.581616E-06 +2.669986E-03 +3.835050E-06 +2.363696E-03 +2.915580E-06 +0.000000E+00 +0.000000E+00 +1.500000E-02 +5.900000E-05 +3.685307E-03 +1.268655E-05 +5.360583E-03 +1.364253E-05 +1.590442E-03 +2.811111E-06 +7.793073E-03 +1.277581E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.981320E-04 +8.888272E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.000000E-03 +1.300000E-05 +3.106624E-03 +9.484025E-06 +4.505496E-03 +5.432355E-06 +2.355878E-03 +2.623009E-06 +2.690622E-03 +1.877213E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.989325E-04 +8.936066E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.195730E-03 +1.429770E-06 +1.000000E-03 +1.000000E-06 +9.838946E-04 +9.680486E-07 +9.520729E-04 +9.064428E-07 +9.053026E-04 +8.195728E-07 +0.000000E+00 +0.000000E+00 +2.500000E-02 +1.390000E-04 +9.492341E-03 +2.448502E-05 +3.248123E-03 +2.577618E-06 +1.941360E-03 +2.063052E-06 +1.137644E-02 +3.026289E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.989325E-04 +8.936066E-08 +1.000000E-03 +1.000000E-06 +-6.411363E-05 +4.110558E-09 +-4.938342E-04 +2.438722E-07 +9.551160E-05 +9.122465E-09 +2.684602E-03 +5.778221E-06 2.000000E-03 2.000000E-06 -1.954998E-03 -1.911525E-06 -1.867287E-03 -1.747820E-06 -1.741309E-03 -1.532659E-06 -0.000000E+00 -0.000000E+00 -1.900000E-02 -1.010000E-04 -1.062788E-02 -3.182295E-05 -6.707513E-03 -1.259151E-05 -6.889024E-03 -1.429877E-05 -8.202036E-03 -2.430378E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.306024E-04 -8.660208E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.306024E-04 -8.660208E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -1.500000E-02 -4.500000E-05 -3.192578E-03 -7.201112E-06 -4.457942E-03 -6.346144E-06 -3.572536E-03 -4.921318E-06 -7.292620E-03 -1.123722E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.111025E-04 -2.767076E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.069794E-04 -3.684240E-07 -1.000000E-03 -1.000000E-06 -9.537549E-04 -9.096483E-07 -8.644725E-04 -7.473127E-07 -7.383215E-04 -5.451186E-07 -0.000000E+00 -0.000000E+00 -2.300000E-02 -1.310000E-04 -7.696543E-03 -2.602323E-05 -5.553275E-03 -1.677303E-05 -3.110421E-03 -1.605284E-05 -1.157943E-02 -3.065139E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -1.000000E-03 -1.000000E-06 --1.849356E-05 -3.420117E-10 --4.994870E-04 -2.494872E-07 -2.772452E-05 -7.686492E-10 -9.104691E-04 -8.289540E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.600000E-02 -1.460000E-04 -1.097600E-02 -2.696995E-05 -8.425033E-03 -2.480653E-05 -3.259803E-03 -4.519527E-06 -1.278442E-02 -3.571130E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.600000E-02 -6.000000E-05 -2.471171E-03 -8.220215E-06 -2.563821E-04 -8.785791E-07 -1.300883E-03 -3.079168E-06 -7.314002E-03 -1.134821E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.022304E-04 -9.134324E-08 -1.000000E-03 -1.000000E-06 --5.657444E-04 -3.200667E-07 --1.989995E-05 -3.960081E-10 -3.959267E-04 -1.567580E-07 -3.007686E-04 -9.046177E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.000000E-03 -1.800000E-05 -5.436075E-03 -7.868978E-06 -2.425522E-03 -1.963607E-06 -7.168734E-04 -1.273978E-06 -4.589694E-03 -5.548791E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +1.975537E-03 +1.951439E-06 +1.927159E-03 +1.857550E-06 +1.855946E-03 +1.724502E-06 0.000000E+00 0.000000E+00 2.100000E-02 -1.070000E-04 -7.539735E-03 -2.068189E-05 -3.936810E-03 -7.972494E-06 -2.420366E-04 -1.148364E-06 -9.428594E-03 -2.131421E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.053824E-04 -9.325841E-08 -2.000000E-03 -2.000000E-06 -1.606787E-04 -1.589809E-06 -1.384713E-03 -1.050316E-06 -7.117279E-04 -6.789060E-07 -9.257840E-04 -4.781566E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.600000E-02 -5.100000E-04 -1.468472E-02 -4.705766E-05 -8.285657E-03 -2.501121E-05 -5.066048E-03 -7.892505E-06 -1.769628E-02 -7.226941E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.216485E-03 -5.564829E-07 +9.500000E-05 +3.106757E-03 +7.530480E-06 +2.693211E-04 +3.828657E-06 +1.317058E-03 +3.136131E-06 +1.017555E-02 +2.236513E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1679,18 +1669,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -2.300000E-02 -1.130000E-04 -9.030313E-03 -2.036594E-05 -5.561323E-03 -2.088769E-05 -3.949070E-03 -5.399490E-06 -1.065996E-02 -2.405722E-05 +5.990909E-04 +3.589099E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1699,8 +1679,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.124312E-04 -1.875678E-07 +0.000000E+00 +0.000000E+00 +1.400000E-02 +5.400000E-05 +5.944397E-03 +1.655215E-05 +1.726828E-03 +5.006812E-06 +-1.657930E-03 +4.261204E-06 +5.696729E-03 +8.356388E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1709,48 +1699,48 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.044609E-04 -3.653729E-07 +2.989325E-04 +8.936066E-08 1.000000E-03 1.000000E-06 -9.969425E-04 -9.938944E-07 -9.908416E-04 -9.817670E-07 -9.817251E-04 -9.637842E-07 -0.000000E+00 -0.000000E+00 -1.300000E-02 -4.300000E-05 -1.119189E-03 -4.668647E-06 --1.976393E-04 -4.632517E-06 -2.358914E-03 -3.047107E-06 -6.688330E-03 -1.125860E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 +6.866979E-04 +4.715540E-07 +2.073310E-04 +4.298614E-08 +-2.205090E-04 +4.862422E-08 +1.496493E-03 +1.164240E-06 1.000000E-03 1.000000E-06 --3.353539E-04 -1.124622E-07 --3.313067E-04 -1.097641E-07 -4.087442E-04 -1.670718E-07 -9.161472E-04 -8.393257E-07 +-9.623002E-04 +9.260217E-07 +8.890326E-04 +7.903789E-07 +-7.843269E-04 +6.151687E-07 +0.000000E+00 +0.000000E+00 +1.000000E-02 +3.600000E-05 +4.361597E-03 +7.003332E-06 +1.326662E-03 +8.159669E-07 +-1.380710E-04 +7.198742E-08 +4.786948E-03 +7.321215E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.981320E-04 +8.888272E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1761,16 +1751,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.600000E-02 -1.980000E-04 -1.024848E-02 -3.100622E-05 --1.145555E-04 -2.521646E-06 -1.453177E-03 -1.505423E-06 -1.124135E-02 -3.412415E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1779,8 +1759,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.029991E-04 -1.818050E-07 +0.000000E+00 +0.000000E+00 +3.900000E-02 +3.870000E-04 +1.427389E-02 +8.090929E-05 +8.826225E-03 +2.660607E-05 +4.117139E-03 +7.490443E-06 +2.216995E-02 +1.059100E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.198182E-03 +1.435639E-06 1.000000E-03 1.000000E-06 -2.499079E-04 @@ -1789,40 +1789,28 @@ tally 1: 1.650952E-07 3.358425E-04 1.127902E-07 -6.044609E-04 -3.653729E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.900000E-02 -8.700000E-05 -6.743817E-03 -2.313239E-05 -1.353852E-03 -7.358462E-06 -3.054381E-03 -5.051576E-06 -7.932519E-03 -1.438883E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 +8.943961E-04 +7.999445E-07 +1.000000E-03 +1.000000E-06 +9.401483E-04 +8.838788E-07 +8.258183E-04 +6.819758E-07 +6.672205E-04 +4.451832E-07 +0.000000E+00 +0.000000E+00 +3.700000E-02 +3.250000E-04 +5.676482E-03 +1.840790E-05 +7.927554E-03 +2.448188E-05 +2.237603E-03 +2.700519E-06 +1.646685E-02 +6.188122E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1831,6 +1819,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.800372E-03 +1.258824E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1839,18 +1829,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.798328E-03 +1.615735E-06 +4.000000E-03 +6.000000E-06 +3.770169E-03 +5.325612E-06 +3.332954E-03 +4.161563E-06 +2.730616E-03 +2.811353E-06 0.000000E+00 0.000000E+00 2.000000E-02 -9.000000E-05 -4.678519E-03 -8.162854E-06 -2.588181E-03 -7.958110E-06 -2.322176E-03 -3.426024E-06 -8.534070E-03 -1.767419E-05 +9.600000E-05 +5.093280E-03 +1.425830E-05 +2.794340E-03 +1.663793E-05 +4.103789E-03 +6.867085E-06 +8.700108E-03 +1.850749E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1859,8 +1859,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.029991E-04 -1.818050E-07 +9.029611E-04 +4.542111E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1881,16 +1881,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.100000E-02 -3.300000E-05 -7.244624E-03 -1.778235E-05 -2.926133E-03 -9.287629E-06 -9.851866E-04 -6.097573E-06 -3.660351E-03 -3.716102E-06 +6.000000E-03 +1.400000E-05 +4.561928E-03 +8.999493E-06 +2.729392E-03 +4.924575E-06 +1.659472E-03 +3.263660E-06 +2.095047E-03 +1.698704E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1899,8 +1899,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.034897E-04 -9.210600E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1909,28 +1907,30 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.053824E-04 -9.325841E-08 +0.000000E+00 +0.000000E+00 +5.962641E-04 +3.555309E-07 1.000000E-03 1.000000E-06 -1.744930E-04 -3.044781E-08 --4.543283E-04 -2.064142E-07 --2.484572E-04 -6.173098E-08 +9.213015E-04 +8.487964E-07 +7.731946E-04 +5.978298E-07 +5.730412E-04 +3.283762E-07 0.000000E+00 0.000000E+00 1.000000E-02 2.600000E-05 -3.641369E-03 -6.818931E-06 -2.110606E-03 -2.176630E-06 -1.892973E-03 -1.812944E-06 -5.777456E-03 -9.494012E-06 +5.481204E-03 +1.421903E-05 +2.241220E-03 +8.639111E-06 +2.375771E-03 +4.453036E-06 +4.791983E-03 +5.914853E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1939,8 +1939,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.034897E-04 -9.210600E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1951,186 +1949,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.300000E-02 -3.900000E-05 -1.682557E-03 -1.846926E-06 -4.172846E-04 -1.892148E-06 -7.276646E-04 -1.085417E-06 -6.092709E-03 -8.907893E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.053824E-04 -9.325841E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.000000E-03 -7.000000E-06 -1.580450E-03 -1.753085E-06 -3.349602E-04 -3.639488E-07 -2.690006E-04 -2.374932E-07 -1.830811E-03 -9.321096E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.034897E-04 -9.210600E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.900000E-02 -1.250000E-04 -2.138118E-03 -8.791773E-06 -2.868574E-03 -9.339641E-06 -5.807501E-04 -1.660344E-06 -8.165982E-03 -2.226036E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.044609E-04 -3.653729E-07 +1.193329E-03 +8.893051E-07 1.000000E-03 1.000000E-06 -2.312419E-04 -5.347280E-08 --4.197908E-04 -1.762243E-07 --3.159499E-04 -9.982435E-08 -0.000000E+00 -0.000000E+00 -2.100000E-02 -1.070000E-04 -2.216472E-03 -6.388960E-06 -4.896969E-03 -6.428816E-06 -2.155707E-03 -2.884510E-06 -1.038058E-02 -2.477423E-05 +8.827246E-04 +7.792028E-07 +6.688042E-04 +4.472990E-07 +3.954668E-04 +1.563940E-07 +2.989325E-04 +8.936066E-08 +9.000000E-03 +2.100000E-05 +4.651230E-03 +4.741702E-06 +2.150788E-03 +1.086619E-06 +2.092494E-03 +1.840170E-06 +4.800173E-03 +5.412689E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2139,38 +1979,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.007686E-04 -9.046177E-08 -1.000000E-03 -1.000000E-06 -7.019813E-04 -4.927778E-07 -2.391667E-04 -5.720072E-08 --1.881699E-04 -3.540793E-08 -2.131373E-03 -2.696833E-06 -1.000000E-03 -1.000000E-06 -9.937981E-04 -9.876347E-07 -9.814521E-04 -9.632483E-07 -9.630767E-04 -9.275168E-07 -0.000000E+00 -0.000000E+00 -6.000000E-03 -1.000000E-05 -2.774441E-03 -2.455060E-06 --4.125360E-04 -1.557128E-06 --9.369606E-04 -2.349382E-06 -3.666415E-03 -4.871762E-06 +6.040285E-04 +3.648505E-07 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2179,18 +1991,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.057201E-04 -1.834492E-07 -1.000000E-03 -1.000000E-06 -8.429685E-04 -7.105959E-07 -5.658938E-04 -3.202358E-07 -2.330721E-04 -5.432261E-08 -6.015373E-04 -3.618471E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2202,15 +2002,335 @@ tally 1: 0.000000E+00 0.000000E+00 3.000000E-03 +3.000000E-06 +7.652902E-05 +1.571253E-06 +8.568788E-04 +1.094232E-06 +-7.206134E-04 +4.649382E-07 +9.000807E-04 +2.700544E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +9.101753E-04 +8.284190E-07 +7.426285E-04 +5.514972E-07 +5.197534E-04 +2.701436E-07 +2.989325E-04 +8.936066E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.989325E-04 +8.936066E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.400000E-02 +4.600000E-05 +6.259455E-03 +1.284922E-05 +2.076794E-03 +2.552816E-06 +6.278684E-04 +2.094249E-06 +6.584175E-03 +1.056233E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.990909E-04 +3.589099E-07 +1.000000E-03 +1.000000E-06 +6.257846E-04 +3.916063E-07 +8.740950E-05 +7.640421E-09 +-3.260239E-04 +1.062916E-07 +5.962641E-04 +3.555309E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.500000E-02 +7.500000E-05 +4.663045E-03 +1.215939E-05 +4.830409E-03 +8.682038E-06 +3.887884E-03 +4.756968E-06 +8.095588E-03 +1.984557E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.995454E-04 +8.972747E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.958095E-04 +4.452583E-07 +2.000000E-03 +2.000000E-06 +1.906393E-03 +1.818122E-06 +1.727184E-03 +1.499401E-06 +1.477537E-03 +1.118575E-06 +0.000000E+00 +0.000000E+00 +5.000000E-03 +7.000000E-06 +1.973804E-03 +3.852738E-06 +1.299550E-03 +2.189071E-06 +2.037626E-03 +1.354116E-06 +2.097904E-03 +9.889505E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +-9.618754E-04 +9.252042E-07 +8.878063E-04 +7.882000E-07 +-7.820147E-04 +6.115471E-07 +2.995454E-04 +8.972747E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.995454E-04 +8.972747E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.400000E-02 +6.600000E-05 +2.900274E-03 +2.656005E-06 +-1.326535E-04 +7.657613E-07 +2.692899E-03 +2.374742E-06 +7.492257E-03 +1.481323E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.976775E-04 +1.786102E-07 +1.000000E-03 +1.000000E-06 +-5.336276E-04 +2.847584E-07 +-7.286246E-05 +5.308937E-09 +4.205541E-04 +1.768657E-07 +6.040285E-04 +3.648505E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.100000E-02 +9.500000E-05 +1.100185E-02 +2.519922E-05 +5.296622E-03 +6.181448E-06 +4.290056E-03 +6.437184E-06 +9.878051E-03 +2.067153E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.981320E-04 +8.888272E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.494265E-03 +8.042497E-07 +3.000000E-03 +3.000000E-06 +6.851013E-04 +1.571044E-06 +8.565666E-04 +1.043968E-06 +7.365013E-04 +1.098388E-06 +0.000000E+00 +0.000000E+00 +3.000000E-03 5.000000E-06 -1.596397E-03 -1.275630E-06 -4.822532E-04 -1.627925E-07 -2.983020E-04 -9.401537E-08 -1.221939E-03 -7.467452E-07 +1.355880E-03 +1.020443E-06 +1.249756E-03 +8.001666E-07 +1.419322E-03 +1.107335E-06 +2.397825E-03 +2.688348E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2219,6 +2339,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.989325E-04 +8.936066E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2241,16 +2363,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.000000E-03 -4.000000E-05 --7.915490E-05 -1.150292E-07 -2.293529E-03 -2.932682E-06 -1.356149E-03 -9.471925E-07 -4.579650E-03 -7.918475E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2259,118 +2371,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.022304E-04 -9.134324E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.100000E-02 -3.300000E-05 -5.093647E-03 -1.217545E-05 -1.852586E-03 -4.478970E-06 -9.768799E-04 -1.395189E-06 -4.578572E-03 -5.491453E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.102008E-04 -9.622454E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.053824E-04 -9.325841E-08 -1.000000E-03 -1.000000E-06 -9.817451E-04 -9.638234E-07 -9.457351E-04 -8.944149E-07 -8.929546E-04 -7.973680E-07 -0.000000E+00 -0.000000E+00 -4.000000E-03 -4.000000E-06 --1.284380E-03 -9.356368E-07 --5.965448E-04 -6.643272E-07 -3.352677E-04 -2.956621E-07 -1.526686E-03 -6.527074E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-03 -1.000000E-06 --3.965739E-04 -1.572709E-07 --2.640937E-04 -6.974547E-08 -4.389371E-04 -1.926657E-07 -3.053824E-04 -9.325841E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2402,11 +2402,11 @@ tally 1: 0.000000E+00 0.000000E+00 tally 2: -5.720364E-01 -6.548043E-02 -6.217988E-01 -7.736906E-02 -3.624477E+00 -2.628737E+00 -4.047526E+01 -3.278231E+02 +5.712389E-01 +6.528048E-02 +6.215724E-01 +7.729703E-02 +3.619520E+00 +2.620927E+00 +4.040217E+01 +3.265313E+02 diff --git a/tests/test_statepoint_sourcesep/results_true.dat b/tests/test_statepoint_sourcesep/results_true.dat index 5263a6b7fd..bf062f283c 100644 --- a/tests/test_statepoint_sourcesep/results_true.dat +++ b/tests/test_statepoint_sourcesep/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.021779E-01 3.813358E-03 +2.938252E-01 5.852966E-03 diff --git a/tests/test_survival_biasing/results_true.dat b/tests/test_survival_biasing/results_true.dat index 3e327841aa..de5cf150e4 100644 --- a/tests/test_survival_biasing/results_true.dat +++ b/tests/test_survival_biasing/results_true.dat @@ -1,20 +1,20 @@ k-combined: -9.997733E-01 2.995572E-02 +9.810103E-01 1.609702E-03 tally 1: -4.354055E+01 -3.793645E+02 -1.808636E+01 -6.546005E+01 -2.234465E+00 -9.989832E-01 -1.937431E+00 -7.510380E-01 -5.021671E+00 -5.045425E+00 -3.506791E-02 -2.460654E-04 -3.752351E+02 -2.817188E+04 +4.313495E+01 +3.721921E+02 +1.792866E+01 +6.430423E+01 +2.200731E+00 +9.690384E-01 +1.908978E+00 +7.291363E-01 +4.948871E+00 +4.900154E+00 +3.465589E-02 +2.402752E-04 +3.697361E+02 +2.735204E+04 tally 2: -1.808636E+01 -6.546005E+01 +1.792866E+01 +6.430423E+01 diff --git a/tests/test_tallies/results_true.dat b/tests/test_tallies/results_true.dat index 4f8b3956b7..164ab307cc 100644 --- a/tests/test_tallies/results_true.dat +++ b/tests/test_tallies/results_true.dat @@ -1 +1 @@ -5be9b80ecc189d4ee3a6a228d97b0c76b6b47e5204a86ecf03b8faa65c499f6861ffd85c153084bafd0835d10dfacc14f28802901ce966c8a803d60d0c2f42e5 \ No newline at end of file +bafeb65c4596d719bcab7ebbfbb789b28b858a16b9a3755b62356bf1a806c142d5becc0b5a52382cddf57267ff4477c7b5e7e1528bd3dde3ac29b0467a137a29 \ No newline at end of file diff --git a/tests/test_tally_aggregation/results_true.dat b/tests/test_tally_aggregation/results_true.dat index cde3e281c2..879a8797a0 100644 --- a/tests/test_tally_aggregation/results_true.dat +++ b/tests/test_tally_aggregation/results_true.dat @@ -1 +1 @@ -ba8bfe764fcc0484a4fdab8fdc4ff8ad0e4a98b1ff33e8687899c8cc6bf80cb28b3a59aeaec84bd74681b8b5f19f714292ccaa9c9d4ba852b2cc29872f612e10 \ No newline at end of file +fa410f505a1e9b7b01b127251751942ad362f39141b7e9c9d1c59b19f395d4d78a7aab3f35f03fcdb9fc13fa03ea9950c57943bb73917dac5e32f01fda0078fd \ No newline at end of file diff --git a/tests/test_tally_arithmetic/results_true.dat b/tests/test_tally_arithmetic/results_true.dat index ded2efa665..ef2741cc12 100644 --- a/tests/test_tally_arithmetic/results_true.dat +++ b/tests/test_tally_arithmetic/results_true.dat @@ -1,134 +1,134 @@ -[[[ 8.90240785e-05 8.31464209e-11 4.41507090e-05 4.12357364e-11] - [ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] - [ 4.69276830e-05 4.38293656e-11 2.35903380e-05 2.20328275e-11] - [ 3.84607356e-05 3.15690405e-05 1.93340411e-05 1.58696166e-05]] +[[[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] - [[ 8.90240785e-05 8.31464209e-11 4.41507090e-05 4.12357364e-11] - [ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] - [ 4.69276830e-05 4.38293656e-11 2.35903380e-05 2.20328275e-11] - [ 3.84607356e-05 3.15690405e-05 1.93340411e-05 1.58696166e-05]] + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] - [[ 8.90240785e-05 8.31464209e-11 4.41507090e-05 4.12357364e-11] - [ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] - [ 4.69276830e-05 4.38293656e-11 2.35903380e-05 2.20328275e-11] - [ 3.84607356e-05 3.15690405e-05 1.93340411e-05 1.58696166e-05]] + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] ..., - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]][[[ 8.90240785e-05 8.31464209e-11 4.41507090e-05 4.12357364e-11] - [ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] - [ 4.69276830e-05 4.38293656e-11 2.35903380e-05 2.20328275e-11] - [ 3.84607356e-05 3.15690405e-05 1.93340411e-05 1.58696166e-05]] + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]]][[[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] - [[ 8.90240785e-05 8.31464209e-11 4.41507090e-05 4.12357364e-11] - [ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] - [ 4.69276830e-05 4.38293656e-11 2.35903380e-05 2.20328275e-11] - [ 3.84607356e-05 3.15690405e-05 1.93340411e-05 1.58696166e-05]] + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] - [[ 8.90240785e-05 8.31464209e-11 4.41507090e-05 4.12357364e-11] - [ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] - [ 4.69276830e-05 4.38293656e-11 2.35903380e-05 2.20328275e-11] - [ 3.84607356e-05 3.15690405e-05 1.93340411e-05 1.58696166e-05]] + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] ..., - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]][[[ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]]][[[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] - [[ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] - [[ 7.29618709e-05 5.98879928e-05 3.61847984e-05 2.97009235e-05] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] ..., - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]][[[ 0.00000000e+00 4.41507090e-05 0.00000000e+00] - [ 0.00000000e+00 3.61847984e-05 0.00000000e+00] - [ 0.00000000e+00 2.35903380e-05 0.00000000e+00] - [ 0.00000000e+00 1.93340411e-05 0.00000000e+00]] + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]]][[[ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.]] - [[ 0.00000000e+00 4.41507090e-05 0.00000000e+00] - [ 0.00000000e+00 3.61847984e-05 0.00000000e+00] - [ 0.00000000e+00 2.35903380e-05 0.00000000e+00] - [ 0.00000000e+00 1.93340411e-05 0.00000000e+00]] + [[ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.]] - [[ 0.00000000e+00 4.41507090e-05 0.00000000e+00] - [ 0.00000000e+00 3.61847984e-05 0.00000000e+00] - [ 0.00000000e+00 2.35903380e-05 0.00000000e+00] - [ 0.00000000e+00 1.93340411e-05 0.00000000e+00]] + [[ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.]] ..., - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + [[ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.]] - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + [[ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.]] - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]]][[[ 0.00000000e+00 3.61847984e-05 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + [[ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.]]][[[ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.]] - [[ 0.00000000e+00 3.61847984e-05 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + [[ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.]] - [[ 0.00000000e+00 3.61847984e-05 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + [[ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.]] ..., - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + [[ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.]] - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]] + [[ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.]] - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 0.00000000e+00 0.00000000e+00 0.00000000e+00]]] \ No newline at end of file + [[ 0. 0. 0.] + [ 0. 0. 0.] + [ 0. 0. 0.]]] \ No newline at end of file diff --git a/tests/test_tally_assumesep/results_true.dat b/tests/test_tally_assumesep/results_true.dat index 4835227f24..995c9ade6e 100644 --- a/tests/test_tally_assumesep/results_true.dat +++ b/tests/test_tally_assumesep/results_true.dat @@ -1,11 +1,11 @@ k-combined: -1.005983E+00 2.248579E-02 +9.090848E-01 2.183589E-02 tally 1: -1.423676E+01 -4.330937E+01 +1.247086E+01 +3.154055E+01 tally 2: -2.914798E+00 -1.831649E+00 +2.524688E+00 +1.288895E+00 tally 3: -4.088282E+01 -3.662539E+02 +3.704082E+01 +2.775735E+02 diff --git a/tests/test_tally_nuclides/results_true.dat b/tests/test_tally_nuclides/results_true.dat index b8e903049b..adfed45572 100644 --- a/tests/test_tally_nuclides/results_true.dat +++ b/tests/test_tally_nuclides/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.851180E-01 1.587642E-02 +9.344992E-01 5.409376E-02 tally 1: -7.516940E+00 -1.149356E+01 -1.700884E+00 -5.835345E-01 -1.635327E+00 -5.385674E-01 -5.816056E+00 -6.901370E+00 -7.516940E+00 -1.149356E+01 -1.700884E+00 -5.835345E-01 -1.635327E+00 -5.385674E-01 -5.816056E+00 -6.901370E+00 +6.493491E+00 +8.501932E+00 +1.474098E+00 +4.371503E-01 +1.430824E+00 +4.117407E-01 +5.019393E+00 +5.084622E+00 +6.493491E+00 +8.501932E+00 +1.474098E+00 +4.371503E-01 +1.430824E+00 +4.117407E-01 +5.019393E+00 +5.084622E+00 tally 2: -7.516940E+00 -1.149356E+01 -1.700884E+00 -5.835345E-01 -1.635327E+00 -5.385674E-01 -5.816056E+00 -6.901370E+00 +6.493491E+00 +8.501932E+00 +1.474098E+00 +4.371503E-01 +1.430824E+00 +4.117407E-01 +5.019393E+00 +5.084622E+00 diff --git a/tests/test_trace/results_true.dat b/tests/test_trace/results_true.dat index 5263a6b7fd..bf062f283c 100644 --- a/tests/test_trace/results_true.dat +++ b/tests/test_trace/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.021779E-01 3.813358E-03 +2.938252E-01 5.852966E-03 diff --git a/tests/test_translation/results_true.dat b/tests/test_translation/results_true.dat index 5263a6b7fd..bf062f283c 100644 --- a/tests/test_translation/results_true.dat +++ b/tests/test_translation/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.021779E-01 3.813358E-03 +2.938252E-01 5.852966E-03 diff --git a/tests/test_trigger_batch_interval/results_true.dat b/tests/test_trigger_batch_interval/results_true.dat index c901e1e54d..4adde2afc1 100644 --- a/tests/test_trigger_batch_interval/results_true.dat +++ b/tests/test_trigger_batch_interval/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.875001E-01 3.961945E-03 +9.945341E-01 2.319345E-03 tally 1: -2.128147E+01 -3.021699E+01 -4.842434E+00 -1.563989E+00 -4.695086E+00 -1.470132E+00 -1.643904E+01 -1.803258E+01 -2.128147E+01 -3.021699E+01 -4.842434E+00 -1.563989E+00 -4.695086E+00 -1.470132E+00 -1.643904E+01 -1.803258E+01 +1.417551E+01 +2.010253E+01 +3.226230E+00 +1.041189E+00 +3.130685E+00 +9.804156E-01 +1.094928E+01 +1.199387E+01 +1.417551E+01 +2.010253E+01 +3.226230E+00 +1.041189E+00 +3.130685E+00 +9.804156E-01 +1.094928E+01 +1.199387E+01 tally 2: -2.128147E+01 -3.021699E+01 -4.842434E+00 -1.563989E+00 -4.695086E+00 -1.470132E+00 -1.643904E+01 -1.803258E+01 +1.417551E+01 +2.010253E+01 +3.226230E+00 +1.041189E+00 +3.130685E+00 +9.804156E-01 +1.094928E+01 +1.199387E+01 diff --git a/tests/test_trigger_batch_interval/test_trigger_batch_interval.py b/tests/test_trigger_batch_interval/test_trigger_batch_interval.py index 59b900e503..a0b2119dea 100644 --- a/tests/test_trigger_batch_interval/test_trigger_batch_interval.py +++ b/tests/test_trigger_batch_interval/test_trigger_batch_interval.py @@ -7,5 +7,5 @@ from testing_harness import TestHarness if __name__ == '__main__': - harness = TestHarness('statepoint.20.*', True) + harness = TestHarness('statepoint.15.*', True) harness.main() diff --git a/tests/test_trigger_no_batch_interval/results_true.dat b/tests/test_trigger_no_batch_interval/results_true.dat index d06a91646c..4adde2afc1 100644 --- a/tests/test_trigger_no_batch_interval/results_true.dat +++ b/tests/test_trigger_no_batch_interval/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.853099E-01 3.825057E-03 +9.945341E-01 2.319345E-03 tally 1: -2.409492E+01 -3.417475E+01 -5.477076E+00 -1.765385E+00 -5.309347E+00 -1.658803E+00 -1.861784E+01 -2.040621E+01 -2.409492E+01 -3.417475E+01 -5.477076E+00 -1.765385E+00 -5.309347E+00 -1.658803E+00 -1.861784E+01 -2.040621E+01 +1.417551E+01 +2.010253E+01 +3.226230E+00 +1.041189E+00 +3.130685E+00 +9.804156E-01 +1.094928E+01 +1.199387E+01 +1.417551E+01 +2.010253E+01 +3.226230E+00 +1.041189E+00 +3.130685E+00 +9.804156E-01 +1.094928E+01 +1.199387E+01 tally 2: -2.409492E+01 -3.417475E+01 -5.477076E+00 -1.765385E+00 -5.309347E+00 -1.658803E+00 -1.861784E+01 -2.040621E+01 +1.417551E+01 +2.010253E+01 +3.226230E+00 +1.041189E+00 +3.130685E+00 +9.804156E-01 +1.094928E+01 +1.199387E+01 diff --git a/tests/test_trigger_no_batch_interval/test_trigger_no_batch_interval.py b/tests/test_trigger_no_batch_interval/test_trigger_no_batch_interval.py index f9cb68d627..a0b2119dea 100644 --- a/tests/test_trigger_no_batch_interval/test_trigger_no_batch_interval.py +++ b/tests/test_trigger_no_batch_interval/test_trigger_no_batch_interval.py @@ -7,5 +7,5 @@ from testing_harness import TestHarness if __name__ == '__main__': - harness = TestHarness('statepoint.22.*', True) + harness = TestHarness('statepoint.15.*', True) harness.main() diff --git a/tests/test_trigger_no_status/results_true.dat b/tests/test_trigger_no_status/results_true.dat index 0b541099b9..94c10b1253 100644 --- a/tests/test_trigger_no_status/results_true.dat +++ b/tests/test_trigger_no_status/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.906276E-01 1.800527E-03 +9.910702E-01 3.412288E-03 tally 1: -7.043320E+00 -9.922203E+00 -1.610208E+00 -5.185662E-01 -1.564118E+00 -4.893096E-01 -5.433111E+00 -5.904259E+00 -7.043320E+00 -9.922203E+00 -1.610208E+00 -5.185662E-01 -1.564118E+00 -4.893096E-01 -5.433111E+00 -5.904259E+00 +7.085995E+00 +1.004872E+01 +1.615776E+00 +5.224041E-01 +1.569264E+00 +4.927483E-01 +5.470219E+00 +5.988844E+00 +7.085995E+00 +1.004872E+01 +1.615776E+00 +5.224041E-01 +1.569264E+00 +4.927483E-01 +5.470219E+00 +5.988844E+00 tally 2: -7.043320E+00 -9.922203E+00 -1.610208E+00 -5.185662E-01 -1.564118E+00 -4.893096E-01 -5.433111E+00 -5.904259E+00 +7.085995E+00 +1.004872E+01 +1.615776E+00 +5.224041E-01 +1.569264E+00 +4.927483E-01 +5.470219E+00 +5.988844E+00 diff --git a/tests/test_trigger_tallies/results_true.dat b/tests/test_trigger_tallies/results_true.dat index 0519260ddc..4adde2afc1 100644 --- a/tests/test_trigger_tallies/results_true.dat +++ b/tests/test_trigger_tallies/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.875396E-01 4.095985E-03 +9.945341E-01 2.319345E-03 tally 1: -1.415943E+01 -2.006888E+01 -3.225529E+00 -1.040975E+00 -3.128858E+00 -9.794019E-01 -1.093390E+01 -1.196901E+01 -1.415943E+01 -2.006888E+01 -3.225529E+00 -1.040975E+00 -3.128858E+00 -9.794019E-01 -1.093390E+01 -1.196901E+01 +1.417551E+01 +2.010253E+01 +3.226230E+00 +1.041189E+00 +3.130685E+00 +9.804156E-01 +1.094928E+01 +1.199387E+01 +1.417551E+01 +2.010253E+01 +3.226230E+00 +1.041189E+00 +3.130685E+00 +9.804156E-01 +1.094928E+01 +1.199387E+01 tally 2: -1.415943E+01 -2.006888E+01 -3.225529E+00 -1.040975E+00 -3.128858E+00 -9.794019E-01 -1.093390E+01 -1.196901E+01 +1.417551E+01 +2.010253E+01 +3.226230E+00 +1.041189E+00 +3.130685E+00 +9.804156E-01 +1.094928E+01 +1.199387E+01 diff --git a/tests/test_uniform_fs/results_true.dat b/tests/test_uniform_fs/results_true.dat index a29a363b25..80fee7685a 100644 --- a/tests/test_uniform_fs/results_true.dat +++ b/tests/test_uniform_fs/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.546115E-01 2.982307E-03 +3.495292E-01 1.234736E-02 diff --git a/tests/test_union_energy_grids/results_true.dat b/tests/test_union_energy_grids/results_true.dat index 9556a981bc..3958614d05 100644 --- a/tests/test_union_energy_grids/results_true.dat +++ b/tests/test_union_energy_grids/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.155788E-01 7.559348E-03 +3.218570E-01 2.269572E-03 diff --git a/tests/test_universe/results_true.dat b/tests/test_universe/results_true.dat index 5263a6b7fd..bf062f283c 100644 --- a/tests/test_universe/results_true.dat +++ b/tests/test_universe/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.021779E-01 3.813358E-03 +2.938252E-01 5.852966E-03 diff --git a/tests/test_void/results_true.dat b/tests/test_void/results_true.dat index 4e99b86760..fd78557fc9 100644 --- a/tests/test_void/results_true.dat +++ b/tests/test_void/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.045350E+00 2.750547E-02 +1.032938E+00 5.005507E-02 From a4d20444f867d11018f2bae86ab129a97c3644be Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Wed, 2 Mar 2016 11:35:26 -0500 Subject: [PATCH 344/650] Fixed code per comments by @paulromano --- openmc/arithmetic.py | 4 ++-- openmc/filter.py | 4 ++-- openmc/geometry.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/openmc/arithmetic.py b/openmc/arithmetic.py index e9ba378d52..5869cad802 100644 --- a/openmc/arithmetic.py +++ b/openmc/arithmetic.py @@ -566,7 +566,7 @@ class AggregateScore(object): def name(self): # Append each score in the aggregate to the string - string = '(' + ', '.join(map(str, self.scores)) + ')' + string = '(' + ', '.join(self.scores) + ')' return string @scores.setter @@ -742,7 +742,7 @@ class AggregateFilter(object): other.aggregate_filter.type in _FILTER_TYPES: delta = _FILTER_TYPES.index(self.aggregate_filter.type) - \ _FILTER_TYPES.index(other.aggregate_filter.type) - return True if delta > 0 else False + return delta > 0 else: return False else: diff --git a/openmc/filter.py b/openmc/filter.py index 67e15605ba..2ae8eeb626 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -82,7 +82,7 @@ class Filter(object): if self.type in _FILTER_TYPES and other.type in _FILTER_TYPES: delta = _FILTER_TYPES.index(self.type) - \ _FILTER_TYPES.index(other.type) - return True if delta > 0 else False + return delta > 0 else: return False else: @@ -327,7 +327,7 @@ class Filter(object): # Count bins in the merged filter if 'energy' in merged_filter.type: - merged_filter.num_bins = len(merged_bins) -1 + merged_filter.num_bins = len(merged_bins) - 1 else: merged_filter.num_bins = len(merged_bins) diff --git a/openmc/geometry.py b/openmc/geometry.py index ab3af872f6..dac0bd90f1 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -99,7 +99,7 @@ class Geometry(object): all_cells = self._root_universe.get_all_cells() cells = set() - for cell_id, cell in all_cells.items(): + for cell in all_cells.values(): if cell._type == 'normal': cells.add(cell) @@ -120,7 +120,7 @@ class Geometry(object): all_universes = self._root_universe.get_all_universes() universes = set() - for universe_id, universe in all_universes.items(): + for universe in all_universes.values(): universes.add(universe) universes = list(universes) From df4cc8e0f21458703ef6264c57d2dbe529de2c40 Mon Sep 17 00:00:00 2001 From: jingang Date: Fri, 4 Mar 2016 10:35:13 -0500 Subject: [PATCH 345/650] LCG approach Al.5(by Paul): skip f(ZAID) states starting from xs_seed To guarantee random numbers are not re-used, advance the seed N times from its original position after energy changed. 0. Initialization of f and N 0. At the beginning of a particle life(including secondary particle): xs_seed = tracking_seed 1. When calculating xs: Xi_urr(ZAID) = prn(skipping f(ZAID) from xs_seed) 2. If particle changes energy, xs_seed = prn_seed (skipping N from xs_seed) where N is the number of nuclides which have different zaid, f is a map of zaid. --- src/cross_section.F90 | 12 +++++------- src/global.F90 | 11 ++++++++--- src/input_xml.F90 | 41 ++++++++++++++++++++++++++--------------- src/random_lcg.F90 | 9 +++++---- src/tracking.F90 | 7 ++++--- 5 files changed, 48 insertions(+), 32 deletions(-) diff --git a/src/cross_section.F90 b/src/cross_section.F90 index f059c9c07e..a668707145 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -10,7 +10,7 @@ module cross_section use material_header, only: Material use nuclide_header use particle_header, only: Particle - use random_lcg, only: prn, prn_ahead + use random_lcg, only: prn, get_prn_ahead use sab_header, only: SAlphaBeta use search, only: binary_search @@ -387,15 +387,13 @@ contains ! sample probability table using the cumulative distribution - ! random numbers for xs calculation are sampled in a way separate from - ! tracking. 'xs_seed' is a copy of normal tracking prn seed but updated - ! until the particle undergoes a scattering event. Random number is - ! calculated by skipping ahead 'xs_seed + ZZAAA'(zaid) times from the seed - ! 'xs_seed' + 'ZZAAA'. + ! Random numbers for xs calculation are sampled by skipping ahead + ! f(zaid) times from the seed 'xs_seed' + 'zaid'. ! This guarantees the randomness and, at the same time, makes sure we reuse ! random number for the same nuclide at different temperatures, therefore ! preserving correlation of temperature in probability tables. - r = prn_ahead(xs_seed + nuc % zaid, xs_seed + nuc % zaid) + r = get_prn_ahead(int(nuc_zaid_dict % get_key(nuc % zaid), 8), & + xs_seed + nuc % zaid) i_low = 1 do diff --git a/src/global.F90 b/src/global.F90 index 9f5bd6567f..93fe3c5984 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -105,11 +105,16 @@ module global integer :: default_expand = ENDF_BVII1 ! Random number seed for cross sections, specially for URR ptables - ! This number is copied from normal tracking random number sequence but - ! updated until the particle undergoes a scattering event. It is shared for - ! all nuclides. + ! This number is shared by all nuclides and updated after particle + ! changed its energy. integer(8) :: xs_seed = 1_8 + ! Dictionary to look up the skip distance to get prn when sampling URR + type(DictIntInt) :: nuc_zaid_dict + + ! Total amount of nuclide zaid instances + integer(8) :: n_nuc_zaid_total + !$omp threadprivate(xs_seed) ! ============================================================================ diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 03ef8dcbc4..47b0aaacf6 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -1891,21 +1891,23 @@ contains subroutine read_materials_xml() - integer :: i ! loop index for materials - integer :: j ! loop index for nuclides - integer :: k ! loop index for elements - integer :: n ! number of nuclides - integer :: n_sab ! number of sab tables for a material - integer :: n_nuc_ele ! number of nuclides in an element - integer :: index_list ! index in xs_listings array - integer :: index_nuclide ! index in nuclides - integer :: index_sab ! index in sab_tables - real(8) :: val ! value entered for density - real(8) :: temp_dble ! temporary double prec. real - logical :: file_exists ! does materials.xml exist? - logical :: sum_density ! density is taken to be sum of nuclide densities - character(12) :: name ! name of isotope, e.g. 92235.03c - character(12) :: alias ! alias of nuclide, e.g. U-235.03c + integer :: i ! loop index for materials + integer :: j ! loop index for nuclides + integer :: k ! loop index for elements + integer :: n ! number of nuclides + integer :: n_sab ! number of sab tables for a material + integer :: n_nuc_ele ! number of nuclides in an element + integer :: index_list ! index in xs_listings array + integer :: index_nuclide ! index in nuclides + integer :: index_nuc_zaid ! index in nuclide ZAID + integer :: index_sab ! index in sab_tables + real(8) :: val ! value entered for density + real(8) :: temp_dble ! temporary double prec. real + logical :: file_exists ! does materials.xml exist? + logical :: sum_density ! density is taken to be sum of nuclide densities + integer :: zaid ! ZAID of nuclide + character(12) :: name ! name of isotope, e.g. 92235.03c + character(12) :: alias ! alias of nuclide, e.g. U-235.03c character(MAX_WORD_LEN) :: units ! units on density character(MAX_LINE_LEN) :: filename ! absolute path to materials.xml character(MAX_LINE_LEN) :: temp_str ! temporary string when reading @@ -1955,6 +1957,7 @@ contains ! Initialize count for number of nuclides/S(a,b) tables index_nuclide = 0 + index_nuc_zaid = 0 index_sab = 0 do i = 1, n_materials @@ -2300,6 +2303,7 @@ contains index_list = xs_listing_dict % get_key(to_lower(name)) name = xs_listings(index_list) % name alias = xs_listings(index_list) % alias + zaid = xs_listings(index_list) % zaid ! If this nuclide hasn't been encountered yet, we need to add its name ! and alias to the nuclide_dict @@ -2313,6 +2317,12 @@ contains mat % nuclide(j) = nuclide_dict % get_key(to_lower(name)) end if + ! Construct dict of nuclide zaid + if (.not. nuc_zaid_dict % has_key(zaid)) then + index_nuc_zaid = index_nuc_zaid + 1 + call nuc_zaid_dict % add_key(zaid, index_nuc_zaid) + end if + ! Copy name and atom/weight percent mat % names(j) = name mat % atom_density(j) = list_density % get_item(j) @@ -2407,6 +2417,7 @@ contains ! Set total number of nuclides and S(a,b) tables n_nuclides_total = index_nuclide n_sab_tables = index_sab + n_nuc_zaid_total = index_nuc_zaid ! Close materials XML file call close_xmldoc(doc) diff --git a/src/random_lcg.F90 b/src/random_lcg.F90 index 1e92fa6cee..755ee673ff 100644 --- a/src/random_lcg.F90 +++ b/src/random_lcg.F90 @@ -24,7 +24,8 @@ module random_lcg !$omp threadprivate(prn_seed, stream) public :: prn - public :: prn_ahead + public :: get_prn_ahead + public :: prn_skip_ahead public :: initialize_prng public :: set_particle_seed public :: prn_skip @@ -54,11 +55,11 @@ contains end function prn !=============================================================================== -! PRN_AHEAD generates a pseudo-random number which is 'n' times ahead from a +! GET_PRN_AHEAD generates a pseudo-random number which is 'n' times ahead from a ! specific seed. This function does not changed current LCG status. !=============================================================================== - function prn_ahead(n, seed) result(pseudo_rn) + function get_prn_ahead(n, seed) result(pseudo_rn) integer(8), intent(in) :: n ! number of prns to skip integer(8), intent(in) :: seed ! starting seed @@ -70,7 +71,7 @@ contains pseudo_rn = prn_skip_ahead(n, seed) * prn_norm - end function prn_ahead + end function get_prn_ahead !=============================================================================== ! INITIALIZE_PRNG sets up the random number generator, determining the seed and diff --git a/src/tracking.F90 b/src/tracking.F90 index b17f8ba59f..86f0eded52 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -12,7 +12,7 @@ module tracking use particle_header, only: LocalCoord, Particle use physics, only: collision use physics_mg, only: collision_mg - use random_lcg, only: prn, prn_seed + use random_lcg, only: prn, prn_seed, prn_skip_ahead use string, only: to_str use tally, only: score_analog_tally, score_tracklength_tally, & score_collision_tally, score_surface_current @@ -200,8 +200,9 @@ contains ! re-evaluated p % last_material = NONE - ! Update xs_seed to be current tracking seed after a collision - if (p % E /= p % last_E) xs_seed = prn_seed(STREAM_TRACKING) + ! Advance xs_seed N times ahead to avoid re-using prn + if (p % E /= p % last_E) & + xs_seed = prn_skip_ahead(n_nuc_zaid_total, xs_seed) ! Set all uvws to base level -- right now, after a collision, only the ! base level uvws are changed From 42285d775e6996b0c74d42fcd1e35a16453ad1d8 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 5 Mar 2016 09:26:23 -0500 Subject: [PATCH 346/650] Made scattdata % energy sparse as a test bed (and where speedup benefit occurs from) --- src/scattdata_header.F90 | 213 ++++++++++++++++++++++++++++++++------- 1 file changed, 177 insertions(+), 36 deletions(-) diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index f8fddbc6b3..8dc64a653f 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -8,6 +8,49 @@ module scattdata_header implicit none + +!=============================================================================== +! JAGGED1D and JAGGED2D is a type which allows for jagged 1-D or 2-D array. +!=============================================================================== + + type :: Jagged2D + real(8), allocatable :: data(:,:) + end type Jagged2D + + type :: Jagged1D + real(8), allocatable :: data(:) + end type Jagged1D + + +!=============================================================================== +! OUTGOINGTRANSFER contains sparse outgoing scattering matrices for a single +! incoming group +!=============================================================================== + + type OutgoingTransfer + real(8), allocatable :: data(:,:) ! Outgoing transfer probabilities + ! Dimension of (moments, gmin:gmax) + integer :: gmin + integer :: gmax + contains + ! Initialize OutgoingTransfer given a dense (GoutxL) matrix + procedure:: init => outgoingtransfer_init + end type OutgoingTransfer + + +!=============================================================================== +! GROUPTRANSFER contains sparse outgoing scattering matrices for all +! incoming groups +!=============================================================================== + + type GroupTransfer + type(OutgoingTransfer), allocatable :: outgoing(:) ! Outgoing transfer probabilities + contains + ! Initialize GroupTransfer given a dense (GinxGoutxL) matrix + procedure:: init => grouptransfer_init + end type GroupTransfer + + !=============================================================================== ! SCATTDATA contains all the data to describe the scattering energy and ! angular distribution @@ -15,9 +58,11 @@ module scattdata_header type, abstract :: ScattData ! p0 matrix on its own for sampling energy - real(8), allocatable :: energy(:,:) ! (Gout x Gin) + type(Jagged1D), allocatable :: energy(:) ! (Gin % data(Gout)) real(8), allocatable :: mult(:,:) ! (Gout x Gin) real(8), allocatable :: data(:,:,:) ! (Order/Nmu x Gout x Gin) + integer, allocatable :: gmin(:) ! Minimum outgoing group + integer, allocatable :: gmax(:) ! Maximum outgoing group contains procedure(scattdata_init_), deferred :: init ! Initializes ScattData @@ -93,22 +138,109 @@ module scattdata_header contains +!=============================================================================== +! GROUPTRANSFER_INIT builds the OutgoingTransfer object given a dense scattering +! matrix of (GoutxL) dimensionality. +!=============================================================================== + + subroutine grouptransfer_init(this, dense) + class(GroupTransfer), intent(inout) :: this ! Object to Initialize + real(8), intent(in) :: dense(:,:,:) ! Source Dense Matrix of + ! (GinxGoutxL) dims. + + integer :: gin, groups + + groups = size(dense,dim=1) + allocate(this % outgoing(groups)) + do gin = 1, groups + call this % outgoing(gin) % init(dense(gin,:,:),gin) + end do + + end subroutine grouptransfer_init + + +!=============================================================================== +! OUTGOINGTRANSFER_INIT builds the OutgoingTransfer object given a dense scattering +! matrix of (GoutxL) dimensionality. +!=============================================================================== + + subroutine outgoingtransfer_init(this, dense, gin) + class(OutgoingTransfer), intent(inout) :: this ! Object to Initialize + real(8), intent(in) :: dense(:,:) ! Source Dense Matrix of + ! (GoutxL) dims. + integer, intent(in) :: gin ! Incoming group + + integer :: groups, order, gmin, gmax, gout, l + + groups = size(dense,dim=1) + order = size(dense,dim=2) + + ! Find gmin by checking the P0 moment + do gmin = 1, groups + if (dense(gmin,1) > ZERO) exit + end do + ! Find gmax by checking the P0 moment + do gmax = groups, 1, -1 + if (dense(gmax,1) > ZERO) exit + end do + ! Treat the case of all zeros + if (gmin > gmax) then + gmin = gin + gmax = gin + end if + + ! Now we can allocate our OutgoingTransfer object and place data + allocate(this % data(order, gmin:gmax)) + do gout = gmin, gmax + do l = 1, order + this % data(l,gout) = dense(gout,l) + end do + end do + this % gmin = gmin + this % gmax = gmax + + end subroutine outgoingtransfer_init + !=============================================================================== ! SCATTDATA_INIT builds the scattdata object !=============================================================================== subroutine scattdata_init(this, order, energy, mult) class(ScattData), intent(inout) :: this ! Object to work on - integer, intent(in) :: order ! Data Order - real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix - real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix + integer, intent(in) :: order ! Data Order + real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix + real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix - integer :: groups + integer :: groups, gmin, gmax, gin groups = size(energy, dim=1) - allocate(this % energy(groups, groups)) - this % energy = energy + allocate(this % gmin(groups)) + allocate(this % gmax(groups)) + allocate(this % energy(groups)) + ! Use energy to find the gmin and gmax values + ! Also set energy values when doing it + do gin = 1, groups + ! Find gmin by checking the P0 moment + do gmin = 1, groups + if (energy(gmin,gin) > ZERO) exit + end do + ! Find gmax by checking the P0 moment + do gmax = groups, 1, -1 + if (energy(gmax,gin) > ZERO) exit + end do + ! Treat the case of all zeros + if (gmin > gmax) then + gmin = gin + gmax = gin + ! By not changing energy(gin) here we are leaving it as zero + end if + allocate(this % energy(gin) % data(gmin:gmax)) + this % energy(gin) % data(gmin:gmax) = energy(gmin:gmax,gin) + this % gmin(gin) = gmin + this % gmax(gin) = gmax + end do + allocate(this % mult(groups, groups)) this % mult = mult allocate(this % data(order, groups, groups)) @@ -117,11 +249,11 @@ contains end subroutine scattdata_init subroutine scattdatalegendre_init(this, order, energy, mult, coeffs) - class(ScattDataLegendre), intent(inout) :: this ! Object to work on - integer, intent(in) :: order ! Data Order - real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix - real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix - real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use + class(ScattDataLegendre), intent(inout) :: this ! Object to work on + integer, intent(in) :: order ! Data Order + real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix + real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix + real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use real(8) :: dmu, mu, f integer :: imu, Nmu, gout, gin, groups @@ -285,10 +417,10 @@ contains pure function scattdatalegendre_calc_f(this, gin, gout, mu) result(f) class(ScattDataLegendre), intent(in) :: this ! The ScattData to evaluate - integer, intent(in) :: gin ! Incoming Energy Group - integer, intent(in) :: gout ! Outgoing Energy Group - real(8), intent(in) :: mu ! Angle of interest - real(8) :: f ! Return value of f(mu) + integer, intent(in) :: gin ! Incoming Energy Group + integer, intent(in) :: gout ! Outgoing Energy Group + real(8), intent(in) :: mu ! Angle of interest + real(8) :: f ! Return value of f(mu) ! Plug mu in to the legendre expansion and go from there f = evaluate_legendre(this % data(:, gout, gin), mu) @@ -297,10 +429,10 @@ contains pure function scattdatahistogram_calc_f(this, gin, gout, mu) result(f) class(ScattDataHistogram), intent(in) :: this ! The ScattData to evaluate - integer, intent(in) :: gin ! Incoming Energy Group - integer, intent(in) :: gout ! Outgoing Energy Group - real(8), intent(in) :: mu ! Angle of interest - real(8) :: f ! Return value of f(mu) + integer, intent(in) :: gin ! Incoming Energy Group + integer, intent(in) :: gout ! Outgoing Energy Group + real(8), intent(in) :: mu ! Angle of interest + real(8) :: f ! Return value of f(mu) integer :: imu @@ -318,10 +450,10 @@ contains pure function scattdatatabular_calc_f(this, gin, gout, mu) result(f) class(ScattDataTabular), intent(in) :: this ! The ScattData to evaluate - integer, intent(in) :: gin ! Incoming Energy Group - integer, intent(in) :: gout ! Outgoing Energy Group - real(8), intent(in) :: mu ! Angle of interest - real(8) :: f ! Return value of f(mu) + integer, intent(in) :: gin ! Incoming Energy Group + integer, intent(in) :: gout ! Outgoing Energy Group + real(8), intent(in) :: mu ! Angle of interest + real(8) :: f ! Return value of f(mu) integer :: imu real(8) :: r @@ -357,12 +489,15 @@ contains integer :: samples xi = prn() - prob = ZERO - gout = 0 + ! Assuming highest group will be closest to the highest probability of + ! transfer (not always true, but generally so for few to multi-group + ! scenarios in all but water), so start there and go down in energy + gout = this % gmax(gin) + prob = this % energy(gin) % data(gout) do while (prob < xi) - gout = gout + 1 - prob = prob + this % energy(gout,gin) + gout = gout - 1 + prob = prob + this % energy(gin) % data(gout) end do ! Now we can sample mu using the legendre representation of the thisering @@ -403,12 +538,15 @@ contains integer :: imu xi = prn() - prob = ZERO - gout = 0 + ! Assuming highest group will be closest to the highest probability of + ! transfer (not always true, but generally so for few to multi-group + ! scenarios in all but water), so start there and go down in energy + gout = this % gmax(gin) + prob = this % energy(gin) % data(gout) do while (prob < xi) - gout = gout + 1 - prob = prob + this % energy(gout,gin) + gout = gout - 1 + prob = prob + this % energy(gin) % data(gout) end do xi = prn() @@ -440,12 +578,15 @@ contains integer :: k, NP xi = prn() - prob = ZERO - gout = 0 + ! Assuming highest group will be closest to the highest probability of + ! transfer (not always true, but generally so for few to multi-group + ! scenarios in all but water), so start there and go down in energy + gout = this % gmax(gin) + prob = this % energy(gin) % data(gout) do while (prob < xi) - gout = gout + 1 - prob = prob + this % energy(gout,gin) + gout = gout - 1 + prob = prob + this % energy(gin) % data(gout) end do ! determine outgoing cosine bin From d1baa3bae7f5ede66e14ce655521baea4e896f31 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 5 Mar 2016 09:41:15 -0500 Subject: [PATCH 347/650] Removed GroupTransfer and OutgoingTransfer code as I no longer need it. Changed outgoing energy pdf checking from top-down to bottom-up counting. --- src/scattdata_header.F90 | 113 +++------------------------------------ 1 file changed, 6 insertions(+), 107 deletions(-) diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index 8dc64a653f..14e049f7f2 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -22,35 +22,6 @@ module scattdata_header end type Jagged1D -!=============================================================================== -! OUTGOINGTRANSFER contains sparse outgoing scattering matrices for a single -! incoming group -!=============================================================================== - - type OutgoingTransfer - real(8), allocatable :: data(:,:) ! Outgoing transfer probabilities - ! Dimension of (moments, gmin:gmax) - integer :: gmin - integer :: gmax - contains - ! Initialize OutgoingTransfer given a dense (GoutxL) matrix - procedure:: init => outgoingtransfer_init - end type OutgoingTransfer - - -!=============================================================================== -! GROUPTRANSFER contains sparse outgoing scattering matrices for all -! incoming groups -!=============================================================================== - - type GroupTransfer - type(OutgoingTransfer), allocatable :: outgoing(:) ! Outgoing transfer probabilities - contains - ! Initialize GroupTransfer given a dense (GinxGoutxL) matrix - procedure:: init => grouptransfer_init - end type GroupTransfer - - !=============================================================================== ! SCATTDATA contains all the data to describe the scattering energy and ! angular distribution @@ -138,69 +109,6 @@ module scattdata_header contains -!=============================================================================== -! GROUPTRANSFER_INIT builds the OutgoingTransfer object given a dense scattering -! matrix of (GoutxL) dimensionality. -!=============================================================================== - - subroutine grouptransfer_init(this, dense) - class(GroupTransfer), intent(inout) :: this ! Object to Initialize - real(8), intent(in) :: dense(:,:,:) ! Source Dense Matrix of - ! (GinxGoutxL) dims. - - integer :: gin, groups - - groups = size(dense,dim=1) - allocate(this % outgoing(groups)) - do gin = 1, groups - call this % outgoing(gin) % init(dense(gin,:,:),gin) - end do - - end subroutine grouptransfer_init - - -!=============================================================================== -! OUTGOINGTRANSFER_INIT builds the OutgoingTransfer object given a dense scattering -! matrix of (GoutxL) dimensionality. -!=============================================================================== - - subroutine outgoingtransfer_init(this, dense, gin) - class(OutgoingTransfer), intent(inout) :: this ! Object to Initialize - real(8), intent(in) :: dense(:,:) ! Source Dense Matrix of - ! (GoutxL) dims. - integer, intent(in) :: gin ! Incoming group - - integer :: groups, order, gmin, gmax, gout, l - - groups = size(dense,dim=1) - order = size(dense,dim=2) - - ! Find gmin by checking the P0 moment - do gmin = 1, groups - if (dense(gmin,1) > ZERO) exit - end do - ! Find gmax by checking the P0 moment - do gmax = groups, 1, -1 - if (dense(gmax,1) > ZERO) exit - end do - ! Treat the case of all zeros - if (gmin > gmax) then - gmin = gin - gmax = gin - end if - - ! Now we can allocate our OutgoingTransfer object and place data - allocate(this % data(order, gmin:gmax)) - do gout = gmin, gmax - do l = 1, order - this % data(l,gout) = dense(gout,l) - end do - end do - this % gmin = gmin - this % gmax = gmax - - end subroutine outgoingtransfer_init - !=============================================================================== ! SCATTDATA_INIT builds the scattdata object !=============================================================================== @@ -489,14 +397,11 @@ contains integer :: samples xi = prn() - ! Assuming highest group will be closest to the highest probability of - ! transfer (not always true, but generally so for few to multi-group - ! scenarios in all but water), so start there and go down in energy - gout = this % gmax(gin) + gout = this % gmin(gin) prob = this % energy(gin) % data(gout) do while (prob < xi) - gout = gout - 1 + gout = gout + 1 prob = prob + this % energy(gin) % data(gout) end do @@ -538,14 +443,11 @@ contains integer :: imu xi = prn() - ! Assuming highest group will be closest to the highest probability of - ! transfer (not always true, but generally so for few to multi-group - ! scenarios in all but water), so start there and go down in energy - gout = this % gmax(gin) + gout = this % gmin(gin) prob = this % energy(gin) % data(gout) do while (prob < xi) - gout = gout - 1 + gout = gout + 1 prob = prob + this % energy(gin) % data(gout) end do @@ -578,14 +480,11 @@ contains integer :: k, NP xi = prn() - ! Assuming highest group will be closest to the highest probability of - ! transfer (not always true, but generally so for few to multi-group - ! scenarios in all but water), so start there and go down in energy - gout = this % gmax(gin) + gout = this % gmin(gin) prob = this % energy(gin) % data(gout) do while (prob < xi) - gout = gout - 1 + gout = gout + 1 prob = prob + this % energy(gin) % data(gout) end do From 812153a11416943c2f1a62eb5857df17030e01eb Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 5 Mar 2016 10:26:40 -0500 Subject: [PATCH 348/650] Revised all relevant data within scattdata classes to utilize a sparse format. Testing in progress --- src/macroxs_header.F90 | 8 +- src/scattdata_header.F90 | 218 +++++++++++++++++++++------------------ 2 files changed, 120 insertions(+), 106 deletions(-) diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index 2a12345108..233832d6f0 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -701,9 +701,9 @@ contains xs = this % scattxs(g) case('mult') if (present(gout)) then - xs = this % scatter % mult(gout,g) + xs = this % scatter % mult(g) % data(gout) else - xs = sum(this % scatter % mult(:,g)) + xs = sum(this % scatter % mult(g) % data(:)) end if end select @@ -736,9 +736,9 @@ contains xs = this % scattxs(g,iazi,ipol) case('mult') if (present(gout)) then - xs = this % scatter(iazi,ipol) % obj % mult(gout,g) + xs = this % scatter(iazi,ipol) % obj % mult(g) % data(gout) else - xs = sum(this % scatter(iazi,ipol) % obj % mult(:,g)) + xs = sum(this % scatter(iazi,ipol) % obj % mult(g) % data(:)) end if end select end if diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index 14e049f7f2..54b9e14f15 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -28,10 +28,12 @@ module scattdata_header !=============================================================================== type, abstract :: ScattData - ! p0 matrix on its own for sampling energy + ! normalized p0 matrix on its own for sampling energy type(Jagged1D), allocatable :: energy(:) ! (Gin % data(Gout)) - real(8), allocatable :: mult(:,:) ! (Gout x Gin) - real(8), allocatable :: data(:,:,:) ! (Order/Nmu x Gout x Gin) + ! nu-scatter multiplication (i.e. nu-scatt/scatt) + type(Jagged1D), allocatable :: mult(:) ! (Gin % data(Gout)) + ! Angular distribution + type(Jagged2D), allocatable :: dist(:) ! (Gin % data(Order/Nmu x Gout) integer, allocatable :: gmin(:) ! Minimum outgoing group integer, allocatable :: gmax(:) ! Maximum outgoing group @@ -73,7 +75,7 @@ module scattdata_header type, extends(ScattData) :: ScattDataLegendre ! Maximal value for rejection sampling from rectangle - real(8), allocatable :: max_val(:,:) + type(Jagged1D), allocatable :: max_val(:) ! (Gin % data(Gout)) contains procedure :: init => scattdatalegendre_init procedure :: calc_f => scattdatalegendre_calc_f @@ -90,9 +92,10 @@ module scattdata_header end type ScattDataHistogram type, extends(ScattData) :: ScattDataTabular - real(8), allocatable :: mu(:) ! Mu bins - real(8) :: dmu ! Mu spacing - real(8), allocatable :: fmu(:,:,:) ! PDF of f(mu) + real(8), allocatable :: mu(:) ! Mu bins + real(8) :: dmu ! Mu spacing + ! PDF of f(mu) + type(Jagged2D), allocatable :: fmu(:) ! (Gin % data(Order/Nmu x Gout) contains procedure :: init => scattdatatabular_init procedure :: calc_f => scattdatatabular_calc_f @@ -126,6 +129,8 @@ contains allocate(this % gmin(groups)) allocate(this % gmax(groups)) allocate(this % energy(groups)) + allocate(this % mult(groups)) + allocate(this % dist(groups)) ! Use energy to find the gmin and gmax values ! Also set energy values when doing it do gin = 1, groups @@ -145,15 +150,14 @@ contains end if allocate(this % energy(gin) % data(gmin:gmax)) this % energy(gin) % data(gmin:gmax) = energy(gmin:gmax,gin) + allocate(this % mult(gin) % data(gmin:gmax)) + this % mult(gin) % data(gmin:gmax) = mult(gmin:gmax,gin) + allocate(this % dist(gin) % data(order,gmin:gmax)) + this % dist(gin) % data = ZERO this % gmin(gin) = gmin this % gmax(gin) = gmax end do - allocate(this % mult(groups, groups)) - this % mult = mult - allocate(this % data(order, groups, groups)) - this % data = ZERO - end subroutine scattdata_init subroutine scattdatalegendre_init(this, order, energy, mult, coeffs) @@ -168,37 +172,43 @@ contains call scattdata_init(this, order, energy, mult) - this % data = coeffs - groups = size(this % energy,dim=1) - allocate(this % max_val(groups, groups)) - this % max_val = ZERO + allocate(this % max_val(groups)) + ! Set dist values from coeffs and initialize max_val + do gin = 1, groups + this % dist(gin) % data(:,this % gmin(gin):this % gmax(gin)) = & + coeffs(:,this % gmin(gin):this % gmax(gin),gin) + allocate(this % max_val(gin) % data(this % gmin(gin):this % gmax(gin))) + this % max_val(gin) % data = ZERO + end do + ! Step through the polynomial with fixed number of points to identify ! the maximal value. Nmu = 1001 dmu = TWO / real(Nmu,8) - do imu = 1, Nmu - ! Update mu. Do first and last seperate to avoid float errors - if (imu == 1) then - mu = -ONE - else if (imu == Nmu) then - mu = ONE - end if - mu = -ONE + real(imu - 1,8) * dmu - do gin = 1, groups - do gout = 1, groups + do gin = 1, groups + do gout = this % gmin(gin), this % gmax(gin) + do imu = 1, Nmu + ! Update mu. Do first and last seperate to avoid float errors + if (imu == 1) then + mu = -ONE + else if (imu == Nmu) then + mu = ONE + else + mu = -ONE + real(imu - 1,8) * dmu + end if ! Calculate probability f = this % calc_f(gin,gout,mu) ! If this is a new max, store it. - if (f > this % max_val(gout,gin)) this % max_val(gout,gin) = f + if (f > this % max_val(gin) % data(gout)) & + this % max_val(gin) % data(gout) = f end do end do + ! Finally, since we may not have caught the exact max, add 10% margin + this % max_val(gin) % data = this % max_val(gin) % data * 1.1_8 end do - ! Finally, since we may not have caught the exact max, add 10% margin - this % max_val = this % max_val * 1.1_8 - end subroutine scattdatalegendre_init subroutine scattdatahistogram_init(this, order, energy, mult, coeffs) @@ -224,19 +234,18 @@ contains ! Best to integrate this histogram so we can avoid rejection sampling do gin = 1, groups - do gout = 1, groups - if (energy(gout,gin) > ZERO) then - ! Integrate the histogram - this % data(1,gout,gin) = this % dmu * coeffs(1,gout,gin) - do imu = 2, order - this % data(imu,gout,gin) = this % dmu * coeffs(imu,gout,gin) + & - this % data(imu-1,gout,gin) - end do - ! Now make sure integral norms to zero - norm = this % data(order,gout,gin) - if (norm > ZERO) then - this % data(:,gout,gin) = this % data(:,gout,gin) / norm - end if + do gout = this % gmin(gin), this % gmax(gin) + ! Integrate the histogram + this % dist(gin) % data(1,gout) = this % dmu * coeffs(1,gout,gin) + do imu = 2, order + this % dist(gin) % data(imu,gout) = this % dmu * coeffs(imu,gout,gin) + & + this % dist(gin) % data(imu - 1,gout) + end do + ! Now make sure integral norms to zero + norm = this % dist(gin) % data(order,gout) + if (norm > ZERO) then + this % dist(gin) % data(:,gout) = & + this % dist(gin) % data(:,gout) / norm end if end do end do @@ -274,46 +283,51 @@ contains end do this % mu(this_order) = ONE - ! Best to integrate this histogram so we can avoid rejection sampling - allocate(this % fmu(this_order,groups,groups)) + ! Calculate f(mu) and integrate it so we can avoid rejection sampling + allocate(this % fmu(groups)) do gin = 1, groups - do gout = 1, groups - if (energy(gout,gin) > ZERO) then - if (legendre_flag) then - ! Coeffs are legendre coeffs. Need to build f(mu) then integrate - ! and store the integral in this % data - ! Ensure the coeffs are normalized - norm = ONE / coeffs(1,gout,gin) - do imu = 1, this_order - this % fmu(imu,gout,gin) = evaluate_legendre(norm * coeffs(:,gout,gin), this % mu(imu)) - ! Force positivity - if (this % fmu(imu,gout,gin) < ZERO) then - this % fmu(imu,gout,gin) = ZERO - end if - end do - else - ! Coeffs contain f(mu), put in f(mu) to save duplicate. - this % fmu(:,gout,gin) = this % data(:,gout,gin) - end if - - ! Re-normalize fmu for numerical integration issues and in case - ! the negative fix-up introduced un-normalized data - norm = ZERO - do imu = 2, this_order - norm = norm + HALF * this % dmu * (this % fmu(imu-1,gout,gin) + this % fmu(imu,gout,gin)) + do gout = this % gmin(gin), this % gmax(gin) + allocate(this % fmu(gin) % data(this_order,& + this % gmin(gin):this % gmax(gin))) + if (legendre_flag) then + ! Coeffs are legendre coeffs. Need to build f(mu) then integrate + ! and store the integral in this % dist + ! Ensure the coeffs are normalized + norm = ONE / coeffs(1,gout,gin) + do imu = 1, this_order + this % fmu(gin) % data(imu,gout) = evaluate_legendre(norm * coeffs(:,gout,gin), this % mu(imu)) + ! Force positivity + if (this % fmu(gin) % data(imu,gout) < ZERO) then + this % fmu(gin) % data(imu,gout) = ZERO + end if end do - if (norm > ZERO) then - this % fmu(:,gout,gin) = this % fmu(:,gout,gin) / norm - end if - - ! Now create CDF from fmu with trapezoidal rule - this % data(1,gout,gin) = ZERO - do imu = 2, this_order - 1 - this % data(imu,gout,gin) = this % data(imu-1,gout,gin) + & - HALF * this % dmu * (this % fmu(imu-1,gout,gin) + this % fmu(imu,gout,gin)) - end do - this % data(this_order,gout,gin) = ONE + else + ! Coeffs contain f(mu), put in f(mu) as that is where the + ! PDF lives + this % fmu(gin) % data(:,gout) = this % dist(gin) % data(:,gout) end if + + ! Re-normalize fmu for numerical integration issues and in case + ! the negative fix-up introduced un-normalized data + norm = ZERO + do imu = 2, this_order + norm = norm + HALF * this % dmu * & + (this % fmu(gin) % data(imu - 1,gout) + & + this % fmu(gin) % data(imu,gout)) + end do + if (norm > ZERO) then + this % fmu(gin) % data(:,gout) = this % fmu(gin) % data(:,gout) / norm + end if + + ! Now create CDF from fmu with trapezoidal rule + this % dist(gin) % data(1,gout) = ZERO + do imu = 2, this_order - 1 + this % dist(gin) % data(imu,gout) = & + this % dist(gin) % data(imu - 1,gout) + & + HALF * this % dmu * (this % fmu(gin) % data(imu - 1,gout) + & + this % fmu(gin) % data(imu,gout)) + end do + this % dist(gin) % data(this_order,gout) = ONE end do end do @@ -331,7 +345,7 @@ contains real(8) :: f ! Return value of f(mu) ! Plug mu in to the legendre expansion and go from there - f = evaluate_legendre(this % data(:, gout, gin), mu) + f = evaluate_legendre(this % dist(gin) % data(:,gout),mu) end function scattdatalegendre_calc_f @@ -347,12 +361,12 @@ contains ! Find mu bin imu = floor((mu + ONE)/ this % dmu + ONE) ! Adjust so interpolation works on the last bin if necessary - if (imu == size(this % data, dim=1)) then + if (imu == size(this % dist, dim=1)) then imu = imu - 1 end if ! Use histogram interpolation to find f(mu) - f = this % data(imu, gout, gin) + f = this % dist(gin) % data(imu,gout) end function scattdatahistogram_calc_f @@ -369,14 +383,14 @@ contains ! Find mu bin imu = floor((mu + ONE)/ this % dmu + ONE) ! Adjust so interpolation works on the last bin if necessary - if (imu == size(this % data, dim=1)) then + if (imu == size(this % dist, dim=1)) then imu = imu - 1 end if - ! ! Now interpolate to find f(mu) + ! Now interpolate to find f(mu) r = (mu - this % mu(imu)) / (this % mu(imu + 1) - this % mu(imu)) - f = (ONE - r) * this % data(imu, gout, gin) + & - r * this % data(imu + 1, gout, gin) + f = (ONE - r) * this % dist(gin) % data(imu,gout) + & + r * this % dist(gin) % data(imu + 1,gout) end function scattdatatabular_calc_f @@ -405,12 +419,12 @@ contains prob = prob + this % energy(gin) % data(gout) end do - ! Now we can sample mu using the legendre representation of the thisering + ! Now we can sample mu using the legendre representation of the scattering ! kernel in data(1:this % order) ! Do with rejection sampling ! Set maximal value - M = this % max_val(gout,gin) + M = this % max_val(gin) % data(gout) samples = 0 do mu = TWO * prn() - ONE @@ -427,7 +441,7 @@ contains end if end do - wgt = wgt * this % mult(gout,gin) + wgt = wgt * this % mult(gin) % data(gout) end subroutine scattdatalegendre_sample @@ -452,17 +466,17 @@ contains end do xi = prn() - if (xi < this % data(1,gout,gin)) then + if (xi < this % dist(gin) % data(1,gout)) then imu = 1 else - imu = binary_search(this % data(:,gout,gin), & - size(this % data(:,gout,gin)), xi) + imu = binary_search(this % dist(gin) % data(:,gout), & + size(this % dist(gin) % data(:,gout)), xi) end if ! Randomly select a mu in this bin. mu = prn() * this % dmu + this % mu(imu) - wgt = wgt * this % mult(gout,gin) + wgt = wgt * this % mult(gin) % data(gout) end subroutine scattdatahistogram_sample @@ -489,12 +503,12 @@ contains end do ! determine outgoing cosine bin - NP = size(this % data(:,gout,gin)) + NP = size(this % dist(gin) % data(:,gout)) xi = prn() - c_k = this % data(1,gout,gin) + c_k = this % dist(gin) % data(1,gout) do k = 1, NP - 1 - c_k1 = this % data(k+1,gout,gin) + c_k1 = this % dist(gin) % data(k + 1,gout) if (xi < c_k1) exit c_k = c_k1 end do @@ -502,18 +516,18 @@ contains ! check to make sure k is <= NP - 1 k = min(k, NP - 1) - p0 = this % fmu(k,gout,gin) + p0 = this % fmu(gin) % data(k,gout) mu0 = this % mu(k) ! Linear-linear interpolation to find mu value w/in bin. - p1 = this % fmu(k+1,gout,gin) - mu1 = this % mu(k+1) + p0 = this % fmu(gin) % data(k + 1,gout) + mu1 = this % mu(k + 1) frac = (p1 - p0)/(mu1 - mu0) if (frac == ZERO) then mu = mu0 + (xi - c_k)/p0 else - mu = mu0 + (sqrt(max(ZERO, p0*p0 + TWO*frac*(xi - c_k))) - p0)/frac + mu = mu0 + (sqrt(max(ZERO, p0 * p0 + TWO * frac * (xi - c_k))) - p0) / frac end if if (mu <= -ONE) then @@ -522,7 +536,7 @@ contains mu = ONE end if - wgt = wgt * this % mult(gout,gin) + wgt = wgt * this % mult(gin) % data(gout) end subroutine scattdatatabular_sample From 1705e0c7df68a9f284a5ed56928ce1c8fd098c60 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 5 Mar 2016 13:09:56 -0500 Subject: [PATCH 349/650] Bug fixes after testing --- src/scattdata_header.F90 | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index 54b9e14f15..46b1de8267 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -21,7 +21,6 @@ module scattdata_header real(8), allocatable :: data(:) end type Jagged1D - !=============================================================================== ! SCATTDATA contains all the data to describe the scattering energy and ! angular distribution @@ -177,8 +176,9 @@ contains allocate(this % max_val(groups)) ! Set dist values from coeffs and initialize max_val do gin = 1, groups - this % dist(gin) % data(:,this % gmin(gin):this % gmax(gin)) = & - coeffs(:,this % gmin(gin):this % gmax(gin),gin) + do gout = this % gmin(gin), this % gmax(gin) + this % dist(gin) % data(:,gout) = coeffs(:,gout,gin) + end do allocate(this % max_val(gin) % data(this % gmin(gin):this % gmax(gin))) this % max_val(gin) % data = ZERO end do @@ -278,7 +278,8 @@ contains allocate(this % mu(this_order)) this % dmu = TWO / real(this_order - 1) - do imu = 1, this_order - 1 + this % mu = -ONE + do imu = 2, this_order - 1 this % mu(imu) = -ONE + real(imu - 1) * this % dmu end do this % mu(this_order) = ONE @@ -286,16 +287,21 @@ contains ! Calculate f(mu) and integrate it so we can avoid rejection sampling allocate(this % fmu(groups)) do gin = 1, groups - do gout = this % gmin(gin), this % gmax(gin) - allocate(this % fmu(gin) % data(this_order,& + allocate(this % fmu(gin) % data(this_order,& this % gmin(gin):this % gmax(gin))) + do gout = this % gmin(gin), this % gmax(gin) if (legendre_flag) then ! Coeffs are legendre coeffs. Need to build f(mu) then integrate ! and store the integral in this % dist ! Ensure the coeffs are normalized - norm = ONE / coeffs(1,gout,gin) + if (coeffs(1,gout,gin) /= ZERO) then + norm = ONE / coeffs(1,gout,gin) + else + norm = ONE + end if do imu = 1, this_order - this % fmu(gin) % data(imu,gout) = evaluate_legendre(norm * coeffs(:,gout,gin), this % mu(imu)) + this % fmu(gin) % data(imu,gout) = & + evaluate_legendre(norm * coeffs(:,gout,gin), this % mu(imu)) ! Force positivity if (this % fmu(gin) % data(imu,gout) < ZERO) then this % fmu(gin) % data(imu,gout) = ZERO @@ -422,7 +428,7 @@ contains ! Now we can sample mu using the legendre representation of the scattering ! kernel in data(1:this % order) - ! Do with rejection sampling + ! Do with rejection sampling from a rectangular bounding box ! Set maximal value M = this % max_val(gin) % data(gout) samples = 0 @@ -519,7 +525,7 @@ contains p0 = this % fmu(gin) % data(k,gout) mu0 = this % mu(k) ! Linear-linear interpolation to find mu value w/in bin. - p0 = this % fmu(gin) % data(k + 1,gout) + p1 = this % fmu(gin) % data(k + 1,gout) mu1 = this % mu(k + 1) frac = (p1 - p0)/(mu1 - mu0) From 92e1794b43152cd31a60b156cffe12cb7a30921b Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 5 Mar 2016 13:50:34 -0500 Subject: [PATCH 350/650] Ok, all bug fixes incorporated, now this method matches what was in the original (after fixing a minor bug in the original which was of no statistical consequence --- src/scattdata_header.F90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index 46b1de8267..949bd8707e 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -204,9 +204,10 @@ contains if (f > this % max_val(gin) % data(gout)) & this % max_val(gin) % data(gout) = f end do + ! Finally, since we may not have caught the exact max, add 10% margin + this % max_val(gin) % data(gout) = & + this % max_val(gin) % data(gout) * 1.1_8 end do - ! Finally, since we may not have caught the exact max, add 10% margin - this % max_val(gin) % data = this % max_val(gin) % data * 1.1_8 end do end subroutine scattdatalegendre_init From deec7eef4f2f2dce0261027f94e5814509673733 Mon Sep 17 00:00:00 2001 From: jingang Date: Sat, 5 Mar 2016 13:52:07 -0500 Subject: [PATCH 351/650] Update regression tests results for Al.5 --- .../test_asymmetric_lattice/results_true.dat | 2 +- tests/test_cmfd_feed/results_true.dat | 498 +- tests/test_cmfd_nofeed/results_true.dat | 1384 +-- tests/test_complex_cell/results_true.dat | 18 +- .../results_true.dat | 6 +- tests/test_density/results_true.dat | 2 +- tests/test_distribmat/results_true.dat | 2 +- .../results_true.dat | 2 +- .../results_true.dat | 2 +- tests/test_energy_grid/results_true.dat | 2 +- tests/test_energy_laws/results_true.dat | 2 +- tests/test_entropy/results_true.dat | 20 +- .../case-1/results_true.dat | 20 +- .../case-2/results_true.dat | 16 +- .../case-3/results_true.dat | 2 +- .../case-4/results_true.dat | 28 +- tests/test_filter_mesh_2d/results_true.dat | 664 +- tests/test_filter_mesh_3d/results_true.dat | 9400 ++++++++--------- tests/test_infinite_cell/results_true.dat | 2 +- tests/test_lattice/results_true.dat | 2 +- tests/test_lattice_hex/results_true.dat | 2 +- tests/test_lattice_mixed/results_true.dat | 2 +- tests/test_lattice_multiple/results_true.dat | 2 +- .../results_true.dat | 28 +- .../results_true.dat | 8 +- tests/test_mgxs_library_hdf5/results_true.dat | 66 +- .../results_true.dat | 58 +- .../results_true.dat | 362 +- tests/test_natural_element/results_true.dat | 2 +- tests/test_output/results_true.dat | 2 +- .../results_true.dat | 8 +- .../test_particle_restart_eigval.py | 2 +- tests/test_quadric_surfaces/results_true.dat | 2 +- tests/test_reflective_plane/results_true.dat | 2 +- .../results_true.dat | 2 +- tests/test_rotation/results_true.dat | 2 +- tests/test_salphabeta/results_true.dat | 2 +- tests/test_score_current/results_true.dat | 2 +- tests/test_seed/results_true.dat | 2 +- tests/test_source/results_true.dat | 2 +- tests/test_source_file/results_true.dat | 2 +- .../test_sourcepoint_latest/results_true.dat | 2 +- .../test_sourcepoint_restart/results_true.dat | 4076 +++---- tests/test_statepoint_batch/results_true.dat | 2 +- .../test_statepoint_interval/results_true.dat | 2 +- .../test_statepoint_restart/results_true.dat | 4076 +++---- .../results_true.dat | 2 +- tests/test_survival_biasing/results_true.dat | 34 +- tests/test_tallies/results_true.dat | 2 +- tests/test_tally_aggregation/results_true.dat | 2 +- tests/test_tally_assumesep/results_true.dat | 14 +- tests/test_tally_nuclides/results_true.dat | 50 +- tests/test_trace/results_true.dat | 2 +- tests/test_translation/results_true.dat | 2 +- .../results_true.dat | 50 +- .../results_true.dat | 50 +- tests/test_trigger_no_status/results_true.dat | 50 +- tests/test_trigger_tallies/results_true.dat | 50 +- tests/test_uniform_fs/results_true.dat | 2 +- .../test_union_energy_grids/results_true.dat | 2 +- tests/test_universe/results_true.dat | 2 +- tests/test_void/results_true.dat | 2 +- 62 files changed, 10554 insertions(+), 10554 deletions(-) diff --git a/tests/test_asymmetric_lattice/results_true.dat b/tests/test_asymmetric_lattice/results_true.dat index 8b861fea3d..fa3a412a57 100644 --- a/tests/test_asymmetric_lattice/results_true.dat +++ b/tests/test_asymmetric_lattice/results_true.dat @@ -1 +1 @@ -ed3818f25cb19b957222c3b6f02d3d96a0646c5264903da07c25547bb9035d5283f7719e6af564d7b9e2d56d95070f1a3ca7b2eda9092058b8390ca484ea3e33 \ No newline at end of file +e059d757333d522575bfac076cbf2faa0212062b16e200c021c79e0cbeb378f6dc70e011b2bf910d507e3b14fe01330a7a07474ec113321cfcd42d9fb41c7053 \ No newline at end of file diff --git a/tests/test_cmfd_feed/results_true.dat b/tests/test_cmfd_feed/results_true.dat index e27093930d..36cc01d84d 100644 --- a/tests/test_cmfd_feed/results_true.dat +++ b/tests/test_cmfd_feed/results_true.dat @@ -1,128 +1,128 @@ k-combined: -1.166652E+00 1.018306E-02 +1.182357E+00 5.974030E-03 tally 1: -1.182022E+01 -1.405442E+01 -2.218673E+01 -4.943577E+01 -2.893897E+01 -8.398894E+01 -3.440863E+01 -1.184768E+02 -3.720329E+01 -1.385691E+02 -3.715391E+01 -1.384461E+02 -3.433438E+01 -1.180609E+02 -2.934569E+01 -8.617544E+01 -2.096787E+01 -4.419802E+01 -1.199678E+01 -1.446718E+01 +1.088662E+01 +1.190872E+01 +2.048880E+01 +4.219873E+01 +2.876282E+01 +8.305037E+01 +3.379778E+01 +1.144766E+02 +3.770283E+01 +1.426032E+02 +3.830206E+01 +1.471567E+02 +3.592772E+01 +1.292701E+02 +2.991123E+01 +8.986773E+01 +2.146951E+01 +4.617825E+01 +1.203028E+01 +1.448499E+01 tally 2: -2.306034E+01 -2.682494E+01 -1.611671E+01 -1.310632E+01 -2.197367E+00 -2.477887E-01 -4.203949E+01 -8.913100E+01 -2.976604E+01 -4.469984E+01 -4.006763E+00 -8.150909E-01 -5.779747E+01 -1.677749E+02 -4.095248E+01 -8.422524E+01 -5.363780E+00 -1.449264E+00 -6.807553E+01 -2.321452E+02 -4.845787E+01 -1.176610E+02 -6.171810E+00 -1.923022E+00 -7.340764E+01 -2.699083E+02 -5.221062E+01 -1.365619E+02 -6.847946E+00 -2.384879E+00 -7.293589E+01 -2.670385E+02 -5.179311E+01 -1.347019E+02 -6.772230E+00 -2.324004E+00 -6.790926E+01 -2.314671E+02 -4.827712E+01 -1.170966E+02 -6.209376E+00 -1.944617E+00 -5.892254E+01 -1.739942E+02 -4.193348E+01 -8.817331E+01 -5.580011E+00 -1.573783E+00 -4.349678E+01 -9.505407E+01 -3.078366E+01 -4.763277E+01 -4.132281E+00 -8.658909E-01 -2.390602E+01 -2.879339E+01 -1.671966E+01 -1.409820E+01 -2.408409E+00 -3.004268E-01 +2.194698E+01 +2.431353E+01 +1.531030E+01 +1.183711E+01 +2.005791E+00 +2.073861E-01 +4.066089E+01 +8.307356E+01 +2.875607E+01 +4.160648E+01 +3.795240E+00 +7.283392E-01 +5.694473E+01 +1.629010E+02 +4.039366E+01 +8.198752E+01 +5.355319E+00 +1.450356E+00 +6.785682E+01 +2.311231E+02 +4.850705E+01 +1.181432E+02 +6.096531E+00 +1.875560E+00 +7.450798E+01 +2.784140E+02 +5.308226E+01 +1.413486E+02 +6.833051E+00 +2.357243E+00 +7.509346E+01 +2.831529E+02 +5.357157E+01 +1.441080E+02 +6.871605E+00 +2.376576E+00 +6.981210E+01 +2.445219E+02 +4.976894E+01 +1.243009E+02 +6.297010E+00 +2.008175E+00 +5.844228E+01 +1.716823E+02 +4.161341E+01 +8.709864E+01 +5.266312E+00 +1.407459E+00 +4.264401E+01 +9.124183E+01 +3.019716E+01 +4.575834E+01 +4.214008E+00 +8.998009E-01 +2.360554E+01 +2.810966E+01 +1.651062E+01 +1.374852E+01 +2.253099E+00 +2.643227E-01 tally 3: -1.552079E+01 -1.215917E+01 -1.020059E+00 -5.282882E-02 -2.870674E+01 -4.158022E+01 -1.804035E+00 -1.660452E-01 -3.946503E+01 -7.823691E+01 -2.547969E+00 -3.299415E-01 -4.671591E+01 -1.093585E+02 -2.859632E+00 -4.124601E-01 -5.032154E+01 -1.268658E+02 -3.343751E+00 -5.614915E-01 -4.984325E+01 -1.247751E+02 -3.167240E+00 -5.081974E-01 -4.649606E+01 -1.086583E+02 -3.036950E+00 -4.666173E-01 -4.037729E+01 -8.175938E+01 -2.638125E+00 -3.519509E-01 -2.966728E+01 -4.424057E+01 -1.908438E+00 -1.845564E-01 -1.614337E+01 -1.314776E+01 -1.059193E+00 -5.820056E-02 +1.477479E+01 +1.102597E+01 +9.629052E-01 +4.805270E-02 +2.767228E+01 +3.853758E+01 +1.875024E+00 +1.791921E-01 +3.889173E+01 +7.603662E+01 +2.514324E+00 +3.179473E-01 +4.669914E+01 +1.095214E+02 +2.899863E+00 +4.244220E-01 +5.113294E+01 +1.311853E+02 +3.370751E+00 +5.745169E-01 +5.155018E+01 +1.334689E+02 +3.240491E+00 +5.309493E-01 +4.798026E+01 +1.155563E+02 +3.140727E+00 +4.976607E-01 +4.006831E+01 +8.074622E+01 +2.652324E+00 +3.555555E-01 +2.910962E+01 +4.252913E+01 +1.868334E+00 +1.764790E-01 +1.594882E+01 +1.283117E+01 +1.050541E+00 +5.741461E-02 tally 4: 0.000000E+00 0.000000E+00 @@ -160,8 +160,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -3.093457E+00 -4.811225E-01 +2.970156E+00 +4.442680E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -208,10 +208,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.492347E+00 -1.516052E+00 -2.700262E+00 -3.703359E-01 +5.256812E+00 +1.387940E+00 +2.600466E+00 +3.411564E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -256,10 +256,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.476943E+00 -2.814145E+00 -5.178084E+00 -1.351641E+00 +7.205451E+00 +2.606110E+00 +5.064606E+00 +1.288462E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -304,10 +304,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.761435E+00 -3.851635E+00 -7.186008E+00 -2.593254E+00 +8.686485E+00 +3.787609E+00 +7.168705E+00 +2.578927E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -352,10 +352,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.309416E+00 -4.344697E+00 -8.490837E+00 -3.612406E+00 +9.401928E+00 +4.436352E+00 +8.541906E+00 +3.659201E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -400,10 +400,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.132849E+00 -4.184794E+00 -9.243248E+00 -4.287529E+00 +9.281127E+00 +4.316075E+00 +9.309092E+00 +4.349093E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -448,10 +448,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.483092E+00 -3.612901E+00 -9.279260E+00 -4.328361E+00 +8.714652E+00 +3.818254E+00 +9.438396E+00 +4.478823E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -496,10 +496,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.127826E+00 -2.546707E+00 -8.665903E+00 -3.765209E+00 +7.224112E+00 +2.623879E+00 +8.791109E+00 +3.886534E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -544,10 +544,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.402585E+00 -1.465890E+00 -7.635138E+00 -2.927813E+00 +5.268159E+00 +1.396589E+00 +7.474226E+00 +2.802732E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -592,10 +592,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.828867E+00 -4.049626E-01 -5.637356E+00 -1.595316E+00 +2.786206E+00 +3.930708E-01 +5.555956E+00 +1.549697E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -642,8 +642,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -3.153056E+00 -4.991433E-01 +3.146865E+00 +4.971483E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -662,114 +662,114 @@ k cmfd 0.000000E+00 0.000000E+00 0.000000E+00 -1.179172E+00 -1.178968E+00 -1.188362E+00 -1.179504E+00 -1.171392E+00 -1.171387E+00 -1.167180E+00 -1.166119E+00 -1.174682E+00 -1.168971E+00 -1.169981E+00 -1.168234E+00 -1.167956E+00 -1.170486E+00 -1.171287E+00 -1.174181E+00 +1.188165E+00 +1.185424E+00 +1.186077E+00 +1.186240E+00 +1.180518E+00 +1.182338E+00 +1.176633E+00 +1.173733E+00 +1.183101E+00 +1.187581E+00 +1.187456E+00 +1.182071E+00 +1.181707E+00 +1.182390E+00 +1.185681E+00 +1.184114E+00 cmfd entropy 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.225935E+00 -3.221297E+00 -3.218564E+00 -3.219662E+00 -3.217459E+00 -3.219000E+00 -3.219073E+00 -3.220798E+00 -3.220489E+00 -3.223146E+00 -3.223646E+00 -3.226356E+00 -3.225204E+00 -3.224716E+00 -3.224318E+00 -3.224577E+00 +3.221649E+00 +3.223000E+00 +3.222787E+00 +3.217662E+00 +3.216780E+00 +3.217779E+00 +3.216196E+00 +3.216949E+00 +3.215722E+00 +3.213663E+00 +3.212987E+00 +3.214740E+00 +3.216346E+00 +3.218373E+00 +3.218918E+00 +3.218693E+00 cmfd balance 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.216001E-03 -3.716007E-03 -3.317665E-03 -3.237220E-03 -2.978765E-03 -2.525223E-03 -1.971612E-03 -1.780968E-03 -1.792648E-03 -1.426282E-03 -1.521307E-03 -1.322495E-03 -1.292716E-03 -1.257458E-03 -1.162537E-03 -1.050447E-03 +4.065965E-03 +3.525507E-03 +3.021079E-03 +2.955766E-03 +2.838990E-03 +2.857085E-03 +2.260444E-03 +2.098638E-03 +2.096129E-03 +1.901194E-03 +1.977879E-03 +1.713346E-03 +1.550359E-03 +1.354824E-03 +1.132190E-03 +1.161818E-03 cmfd dominance ratio 0.000E+00 0.000E+00 0.000E+00 0.000E+00 - 5.532E-01 - 5.521E-01 - 5.496E-01 - 5.508E-01 - 5.456E-01 - 5.444E-01 5.454E-01 - 5.465E-01 - 5.448E-01 - 5.446E-01 - 5.458E-01 + 5.414E-01 5.478E-01 - 5.470E-01 - 5.461E-01 - 5.451E-01 - 5.452E-01 + 5.459E-01 + 5.472E-01 + 5.326E-01 + 5.474E-01 + 5.472E-01 + 5.447E-01 + 5.411E-01 + 5.404E-01 + 5.427E-01 + 5.443E-01 + 5.453E-01 + 5.448E-01 + 5.449E-01 cmfd openmc source comparison 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -7.905726E-03 -7.520876E-03 -8.184797E-03 -8.179625E-03 -8.961315E-03 -7.968151E-03 -7.670324E-03 -4.715437E-03 -5.520638E-03 -3.875711E-03 -3.787811E-03 -2.956290E-03 -3.185591E-03 -2.608673E-03 -2.426394E-03 -3.587478E-03 +7.780512E-03 +5.257528E-03 +4.347076E-03 +4.603868E-03 +5.268996E-03 +3.413250E-03 +4.217852E-03 +3.250039E-03 +4.404406E-03 +4.238172E-03 +3.834536E-03 +3.319549E-03 +2.393064E-03 +1.907225E-03 +1.855030E-03 +1.959869E-03 cmfd source -4.265675E-02 -7.580707E-02 -1.074866E-01 -1.214515E-01 -1.436608E-01 -1.371140E-01 -1.316659E-01 -1.136553E-01 -8.144140E-02 -4.506063E-02 +4.027103E-02 +7.892225E-02 +1.063098E-01 +1.229671E-01 +1.434918E-01 +1.383041E-01 +1.341394E-01 +1.130845E-01 +7.866073E-02 +4.384927E-02 diff --git a/tests/test_cmfd_nofeed/results_true.dat b/tests/test_cmfd_nofeed/results_true.dat index 97a6598964..270b46752b 100644 --- a/tests/test_cmfd_nofeed/results_true.dat +++ b/tests/test_cmfd_nofeed/results_true.dat @@ -1,128 +1,128 @@ k-combined: -1.162636E+00 7.934609E-03 +1.175970E+00 1.022524E-02 tally 1: -1.135686E+01 -1.298528E+01 -2.071747E+01 -4.321110E+01 -2.819700E+01 -7.960910E+01 -3.332373E+01 -1.115433E+02 -3.709368E+01 -1.380544E+02 -3.739969E+01 -1.402784E+02 -3.426637E+01 -1.177472E+02 -2.803195E+01 -7.875785E+01 -2.016620E+01 -4.078448E+01 -1.108479E+01 -1.233250E+01 +1.158237E+01 +1.352745E+01 +2.179923E+01 +4.823751E+01 +2.918721E+01 +8.579451E+01 +3.411842E+01 +1.167131E+02 +3.714172E+01 +1.382918E+02 +3.783707E+01 +1.437136E+02 +3.614436E+01 +1.309976E+02 +2.969137E+01 +8.849248E+01 +2.111839E+01 +4.471900E+01 +1.133459E+01 +1.289353E+01 tally 2: -2.287981E+01 -2.636157E+01 -1.596700E+01 -1.284147E+01 -2.244451E+00 -2.572247E-01 -4.133263E+01 -8.604098E+01 -2.935200E+01 -4.341844E+01 -3.848434E+00 -7.503255E-01 -5.785079E+01 -1.679230E+02 -4.121800E+01 -8.525151E+01 -5.430500E+00 -1.486044E+00 -6.775200E+01 -2.303407E+02 -4.833300E+01 -1.173098E+02 -6.301059E+00 -1.998392E+00 -7.351217E+01 -2.710999E+02 -5.241700E+01 -1.379065E+02 -6.679600E+00 -2.255575E+00 -7.445204E+01 -2.781907E+02 -5.286300E+01 -1.402744E+02 -6.930494E+00 -2.424751E+00 -6.790326E+01 -2.315864E+02 -4.823200E+01 -1.168627E+02 -6.460814E+00 -2.114375E+00 -5.708920E+01 -1.635219E+02 -4.052800E+01 -8.243096E+01 -5.346027E+00 -1.442848E+00 -4.210443E+01 -8.918253E+01 -2.973500E+01 -4.450833E+01 -3.975207E+00 -8.045528E-01 -2.247144E+01 -2.543735E+01 -1.563900E+01 -1.232686E+01 -2.123798E+00 -2.366770E-01 +2.285666E+01 +2.632725E+01 +1.592200E+01 +1.279985E+01 +2.354335E+00 +2.818304E-01 +4.206665E+01 +8.923811E+01 +2.971400E+01 +4.458975E+01 +4.024411E+00 +8.205124E-01 +5.769235E+01 +1.671496E+02 +4.092500E+01 +8.415372E+01 +5.406039E+00 +1.478617E+00 +6.816911E+01 +2.331129E+02 +4.867500E+01 +1.188855E+02 +6.103922E+00 +1.881092E+00 +7.441705E+01 +2.776763E+02 +5.332500E+01 +1.425916E+02 +6.670349E+00 +2.252978E+00 +7.501123E+01 +2.821949E+02 +5.369500E+01 +1.446772E+02 +6.711425E+00 +2.274957E+00 +7.001950E+01 +2.460955E+02 +5.000600E+01 +1.255806E+02 +6.490622E+00 +2.130330E+00 +5.803532E+01 +1.691736E+02 +4.150500E+01 +8.653752E+01 +5.356227E+00 +1.455369E+00 +4.231248E+01 +8.984067E+01 +3.012800E+01 +4.555195E+01 +4.023117E+00 +8.251027E-01 +2.326609E+01 +2.729288E+01 +1.636300E+01 +1.348720E+01 +2.043151E+00 +2.201626E-01 tally 3: -1.535500E+01 -1.188779E+01 -1.072376E+00 -5.918356E-02 -2.825000E+01 -4.023490E+01 -1.793632E+00 -1.647594E-01 -3.966400E+01 -7.895763E+01 -2.634662E+00 -3.493770E-01 -4.659700E+01 -1.090464E+02 -2.967403E+00 -4.433197E-01 -5.047200E+01 -1.278853E+02 -3.273334E+00 -5.383728E-01 -5.092700E+01 -1.302177E+02 -3.300198E+00 -5.511893E-01 -4.642600E+01 -1.082721E+02 -2.975932E+00 -4.459641E-01 -3.894500E+01 -7.613859E+01 -2.530949E+00 -3.228046E-01 -2.864900E+01 -4.133838E+01 -1.903069E+00 -1.833780E-01 -1.505600E+01 -1.142871E+01 -1.018078E+00 -5.366335E-02 +1.532800E+01 +1.186246E+01 +1.054240E+00 +5.699889E-02 +2.862200E+01 +4.139083E+01 +1.917898E+00 +1.872272E-01 +3.941000E+01 +7.805265E+01 +2.548698E+00 +3.263827E-01 +4.685700E+01 +1.101835E+02 +2.915064E+00 +4.273240E-01 +5.143600E+01 +1.326606E+02 +3.195201E+00 +5.159753E-01 +5.172300E+01 +1.342849E+02 +3.397114E+00 +5.811083E-01 +4.816600E+01 +1.165387E+02 +2.996374E+00 +4.526135E-01 +4.001200E+01 +8.042168E+01 +2.615438E+00 +3.486860E-01 +2.903100E+01 +4.229303E+01 +1.899116E+00 +1.823251E-01 +1.575800E+01 +1.251088E+01 +1.015498E+00 +5.311788E-02 tally 4: 0.000000E+00 0.000000E+00 @@ -160,490 +160,490 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.996000E+00 -4.526620E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.397000E+00 -1.464555E+00 -2.755000E+00 -3.852250E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.389000E+00 -2.741345E+00 -5.200000E+00 -1.361978E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.644000E+00 -3.751978E+00 -7.139000E+00 -2.565059E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.219000E+00 -4.266743E+00 -8.493000E+00 -3.619533E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.255000E+00 -4.299595E+00 -9.339000E+00 -4.378285E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.492000E+00 -3.616398E+00 -9.420000E+00 -4.454308E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.996000E+00 -2.460916E+00 -8.640000E+00 -3.743262E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.120000E+00 -1.320024E+00 -7.306000E+00 -2.680980E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.681000E+00 -3.659390E-01 -5.413000E+00 -1.474787E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 3.061000E+00 -4.714170E-01 +4.712730E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.495000E+00 +1.521499E+00 +2.783000E+00 +3.954290E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.290000E+00 +2.671490E+00 +5.148000E+00 +1.340000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.720000E+00 +3.820712E+00 +7.225000E+00 +2.625189E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.361000E+00 +4.398063E+00 +8.510000E+00 +3.633548E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.354000E+00 +4.392402E+00 +9.308000E+00 +4.353558E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.645000E+00 +3.752875E+00 +9.473000E+00 +4.510221E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.224000E+00 +2.621330E+00 +8.753000E+00 +3.851203E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.181000E+00 +1.346925E+00 +7.383000E+00 +2.733921E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.770000E+00 +3.870080E-01 +5.492000E+00 +1.515162E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.024000E+00 +4.598380E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -662,114 +662,114 @@ k cmfd 0.000000E+00 0.000000E+00 0.000000E+00 -1.179172E+00 -1.181948E+00 -1.176599E+00 -1.175082E+00 -1.176011E+00 -1.183277E+00 -1.179605E+00 -1.181446E+00 -1.182887E+00 -1.182806E+00 -1.181451E+00 -1.176065E+00 -1.173438E+00 -1.171644E+00 -1.173251E+00 -1.178969E+00 +1.188165E+00 +1.187432E+00 +1.183060E+00 +1.181898E+00 +1.177316E+00 +1.180396E+00 +1.183040E+00 +1.180335E+00 +1.176231E+00 +1.177895E+00 +1.180046E+00 +1.182650E+00 +1.185585E+00 +1.189670E+00 +1.186010E+00 +1.182861E+00 cmfd entropy 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.225935E+00 -3.222178E+00 -3.226354E+00 -3.222407E+00 -3.218763E+00 -3.213551E+00 -3.217941E+00 -3.219897E+00 -3.223185E+00 -3.221321E+00 -3.223037E+00 -3.222984E+00 -3.225563E+00 -3.226058E+00 -3.225377E+00 -3.224158E+00 +3.221649E+00 +3.223243E+00 +3.223437E+00 +3.227374E+00 +3.223652E+00 +3.226298E+00 +3.224154E+00 +3.226033E+00 +3.228121E+00 +3.229091E+00 +3.227082E+00 +3.226168E+00 +3.226627E+00 +3.225070E+00 +3.225044E+00 +3.225384E+00 cmfd balance 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.216001E-03 -3.765736E-03 -3.232512E-03 -2.946657E-03 -2.620043E-03 -3.102942E-03 -1.718566E-03 -1.560898E-03 -1.349125E-03 -1.376832E-03 -1.125073E-03 -1.244068E-03 -8.541401E-04 -1.038410E-03 -9.946921E-04 -1.032684E-03 +4.065965E-03 +3.184316E-03 +2.738317E-03 +2.519700E-03 +2.342444E-03 +1.813264E-03 +2.187197E-03 +1.765666E-03 +1.579152E-03 +1.494719E-03 +1.650439E-03 +1.603349E-03 +1.515152E-03 +1.671731E-03 +1.434242E-03 +1.264261E-03 cmfd dominance ratio 0.000E+00 0.000E+00 0.000E+00 0.000E+00 - 5.532E-01 - 5.531E-01 - 3.223E-01 - 5.531E-01 - 5.492E-01 - 5.122E-01 - 5.456E-01 - 5.460E-01 - 5.479E-01 - 5.469E-01 - 5.469E-01 + 5.454E-01 + 5.470E-01 + 5.474E-01 + 5.480E-01 + 5.450E-01 + 5.446E-01 + 5.441E-01 + 5.458E-01 + 5.486E-01 + 5.481E-01 + 5.470E-01 5.467E-01 - 5.469E-01 - 5.482E-01 + 5.464E-01 5.467E-01 - 5.455E-01 + 5.467E-01 + 5.475E-01 cmfd openmc source comparison 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -7.905726E-03 -7.474785E-03 -3.875412E-03 -4.088264E-03 -4.267612E-03 -4.332761E-03 -3.099731E-03 -4.562882E-03 -2.179728E-03 -3.149706E-03 -2.068544E-03 -2.125510E-03 -1.508170E-03 -1.306280E-03 -1.668890E-03 -2.087329E-03 +7.780512E-03 +5.487778E-03 +6.783383E-03 +4.345691E-03 +4.732876E-03 +3.587393E-03 +3.608858E-03 +4.182060E-03 +2.493256E-03 +2.356484E-03 +2.605494E-03 +2.441777E-03 +2.343211E-03 +3.167611E-03 +2.123139E-03 +2.579320E-03 cmfd source -4.468330E-02 -7.547146E-02 -1.117685E-01 -1.265505E-01 -1.401455E-01 -1.414979E-01 -1.275260E-01 -1.083491E-01 -8.102235E-02 -4.298544E-02 +4.365045E-02 +8.011141E-02 +1.073840E-01 +1.235726E-01 +1.360563E-01 +1.451378E-01 +1.281146E-01 +1.120500E-01 +8.097935E-02 +4.294339E-02 diff --git a/tests/test_complex_cell/results_true.dat b/tests/test_complex_cell/results_true.dat index b39f4c77a0..fac000acbd 100644 --- a/tests/test_complex_cell/results_true.dat +++ b/tests/test_complex_cell/results_true.dat @@ -1,11 +1,11 @@ k-combined: -2.638275E-01 6.152901E-03 +2.613143E-01 4.327291E-03 tally 1: -2.700382E+00 -1.460303E+00 -2.789417E+00 -1.556280E+00 -1.066357E+00 -2.277317E-01 -1.107069E-01 -2.453478E-03 +2.660051E+00 +1.415808E+00 +2.714532E+00 +1.475275E+00 +9.954839E-01 +1.988210E-01 +1.075268E-01 +2.315698E-03 diff --git a/tests/test_confidence_intervals/results_true.dat b/tests/test_confidence_intervals/results_true.dat index 0a693a2e7c..5849fa1f58 100644 --- a/tests/test_confidence_intervals/results_true.dat +++ b/tests/test_confidence_intervals/results_true.dat @@ -1,5 +1,5 @@ k-combined: -2.955471E-01 7.000859E-03 +2.990520E-01 4.413813E-03 tally 1: -6.492140E+01 -5.290622E+02 +6.518836E+01 +5.331909E+02 diff --git a/tests/test_density/results_true.dat b/tests/test_density/results_true.dat index b3cfb0fcae..c79671dbf9 100644 --- a/tests/test_density/results_true.dat +++ b/tests/test_density/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.112894E+00 2.781412E-03 +1.095099E+00 7.174355E-03 diff --git a/tests/test_distribmat/results_true.dat b/tests/test_distribmat/results_true.dat index 32ba9d6d1d..6d915f643d 100644 --- a/tests/test_distribmat/results_true.dat +++ b/tests/test_distribmat/results_true.dat @@ -1,5 +1,5 @@ k-combined: -1.276930E+00 1.716859E-02 +1.292367E+00 2.783049E-02 Cell ID = 11 Name = diff --git a/tests/test_eigenvalue_genperbatch/results_true.dat b/tests/test_eigenvalue_genperbatch/results_true.dat index 48052821bb..73921460bb 100644 --- a/tests/test_eigenvalue_genperbatch/results_true.dat +++ b/tests/test_eigenvalue_genperbatch/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.966731E-01 1.565084E-03 +2.896963E-01 1.152441E-02 diff --git a/tests/test_eigenvalue_no_inactive/results_true.dat b/tests/test_eigenvalue_no_inactive/results_true.dat index a606f7b47e..945003e7b2 100644 --- a/tests/test_eigenvalue_no_inactive/results_true.dat +++ b/tests/test_eigenvalue_no_inactive/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.058585E-01 8.025063E-03 +3.086025E-01 7.823119E-03 diff --git a/tests/test_energy_grid/results_true.dat b/tests/test_energy_grid/results_true.dat index 3958614d05..04c1a2b4cd 100644 --- a/tests/test_energy_grid/results_true.dat +++ b/tests/test_energy_grid/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.218570E-01 2.269572E-03 +3.195980E-01 5.629840E-03 diff --git a/tests/test_energy_laws/results_true.dat b/tests/test_energy_laws/results_true.dat index cf020287be..2cafa0fe83 100644 --- a/tests/test_energy_laws/results_true.dat +++ b/tests/test_energy_laws/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.152985E+00 2.340453E-02 +2.136934E+00 5.025409E-03 diff --git a/tests/test_entropy/results_true.dat b/tests/test_entropy/results_true.dat index 773bedfd87..a450c887ef 100644 --- a/tests/test_entropy/results_true.dat +++ b/tests/test_entropy/results_true.dat @@ -1,13 +1,13 @@ k-combined: -2.938252E-01 5.852966E-03 +2.993693E-01 1.470880E-03 entropy: 7.601626E+00 -8.075430E+00 -8.265647E+00 -8.334421E+00 -8.279373E+00 -8.243909E+00 -8.346594E+00 -8.308991E+00 -8.300603E+00 -8.293250E+00 +8.073602E+00 +8.285649E+00 +8.254254E+00 +8.288322E+00 +8.328178E+00 +8.351350E+00 +8.239166E+00 +8.305642E+00 +8.384493E+00 diff --git a/tests/test_filter_distribcell/case-1/results_true.dat b/tests/test_filter_distribcell/case-1/results_true.dat index 74d8d5bb77..e889c51894 100644 --- a/tests/test_filter_distribcell/case-1/results_true.dat +++ b/tests/test_filter_distribcell/case-1/results_true.dat @@ -1,14 +1,14 @@ k-combined: 0.000000E+00 0.000000E+00 tally 1: -1.394835E-02 -1.945563E-04 -1.278875E-02 -1.635521E-04 -1.421770E-02 -2.021430E-04 -1.022974E-02 -1.046477E-04 +1.388230E-02 +1.927181E-04 +1.274703E-02 +1.624868E-04 +1.413512E-02 +1.998017E-04 +1.014096E-02 +1.028390E-04 tally 2: -5.118454E-02 -2.619857E-03 +5.090541E-02 +2.591361E-03 diff --git a/tests/test_filter_distribcell/case-2/results_true.dat b/tests/test_filter_distribcell/case-2/results_true.dat index 51eb8ea56d..1bf180f565 100644 --- a/tests/test_filter_distribcell/case-2/results_true.dat +++ b/tests/test_filter_distribcell/case-2/results_true.dat @@ -1,11 +1,11 @@ k-combined: 0.000000E+00 0.000000E+00 tally 1: -7.622903E-03 -5.810865E-05 -8.364469E-03 -6.996434E-05 -8.637033E-03 -7.459834E-05 -8.126637E-03 -6.604223E-05 +7.522719E-03 +5.659131E-05 +8.295569E-03 +6.881647E-05 +8.554455E-03 +7.317870E-05 +8.075834E-03 +6.521910E-05 diff --git a/tests/test_filter_distribcell/case-3/results_true.dat b/tests/test_filter_distribcell/case-3/results_true.dat index 4e3ad0e43b..559b8232d0 100644 --- a/tests/test_filter_distribcell/case-3/results_true.dat +++ b/tests/test_filter_distribcell/case-3/results_true.dat @@ -1 +1 @@ -e3382c4ccff9d80b66a49ad88d8ff98ba489d39810f8fcacda565b857c93be7c3f92f8d06fae1d109d7b87f3c35f8768631b400a0f31c092f19c33b1773057e5 \ No newline at end of file +d6a3f2a020a25814fde0eb731b7ceb0928910b139460c13a9739855901818fcaf45e3d48d70f5829fc3af7164954cacefcbf2860582728bf071b57a96be336be \ No newline at end of file diff --git a/tests/test_filter_distribcell/case-4/results_true.dat b/tests/test_filter_distribcell/case-4/results_true.dat index 85630c5e1e..3570c59771 100644 --- a/tests/test_filter_distribcell/case-4/results_true.dat +++ b/tests/test_filter_distribcell/case-4/results_true.dat @@ -1,17 +1,17 @@ k-combined: 0.000000E+00 0.000000E+00 tally 1: -2.274500E-02 -5.173351E-04 -2.035606E-02 -4.143691E-04 -2.057338E-02 -4.232638E-04 -3.100600E-02 -9.613721E-04 -2.355567E-02 -5.548698E-04 -2.563651E-02 -6.572304E-04 -2.020567E-02 -4.082692E-04 +2.281161E-02 +5.203696E-04 +2.026380E-02 +4.106216E-04 +2.051818E-02 +4.209955E-04 +3.105331E-02 +9.643082E-04 +2.361926E-02 +5.578696E-04 +2.559396E-02 +6.550505E-04 +2.047153E-02 +4.190836E-04 diff --git a/tests/test_filter_mesh_2d/results_true.dat b/tests/test_filter_mesh_2d/results_true.dat index 7d0fda7bd8..93b5e8b240 100644 --- a/tests/test_filter_mesh_2d/results_true.dat +++ b/tests/test_filter_mesh_2d/results_true.dat @@ -1,5 +1,5 @@ k-combined: -9.090848E-01 2.183589E-02 +1.102447E+00 7.056170E-03 tally 1: 0.000000E+00 0.000000E+00 @@ -17,6 +17,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.004731E-01 +1.603787E-01 +7.197162E-02 +5.179914E-03 +1.604976E-02 +2.575947E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -37,14 +43,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.825592E-01 +3.332786E-02 +1.735601E-01 +3.012310E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +4.929301E-01 +1.292096E-01 +1.170085E+00 +4.383162E-01 +2.378040E+00 +1.465005E+00 +1.178600E-01 +1.251541E-02 0.000000E+00 0.000000E+00 -4.589207E-02 -2.106082E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -61,10 +77,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.810181E-01 -1.943018E-01 -8.477458E-01 -7.186730E-01 +6.161419E-02 +3.796309E-03 +1.346477E+00 +4.828090E-01 +1.058790E-01 +1.121036E-02 +4.136497E-01 +1.711061E-01 +1.243458E+00 +4.647755E-01 +2.245781E+00 +1.580849E+00 +5.654811E-01 +9.706540E-02 +9.429516E-01 +2.435071E-01 +1.051027E-02 +1.104657E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -73,18 +103,32 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.389407E-01 -1.595676E-01 -1.024430E+00 -3.365012E-01 -9.196572E-01 -3.159409E-01 -4.091014E-02 -1.673639E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +8.027188E-02 +3.522204E-03 +4.079328E-01 +8.766787E-02 +2.841433E-01 +5.943838E-02 +1.056161E+00 +4.599956E-01 +1.290005E-01 +1.027599E-02 +9.363444E-02 +7.224796E-03 +4.775813E-01 +2.280839E-01 +1.338854E+00 +5.648386E-01 +1.890323E+00 +1.335290E+00 +1.319736E+00 +3.546244E-01 +4.228786E-01 +1.311699E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -95,378 +139,340 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.937300E-01 -1.561304E-01 -1.330480E+00 -5.750628E-01 +1.446649E+00 +1.013796E+00 +9.490590E-01 +2.557034E-01 +1.533479E+00 +7.125528E-01 +1.303857E+00 +5.880199E-01 +3.822788E-01 +7.558920E-02 +8.548820E-01 +2.763157E-01 +4.714297E-01 +1.588901E-01 0.000000E+00 0.000000E+00 +1.109572E-01 +9.514310E-03 +1.621894E+00 +7.323979E-01 +2.329788E+00 +1.522693E+00 +6.995477E-01 +2.446957E-01 +7.586629E-02 +5.755693E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -5.824955E-01 -1.707684E-01 -4.866910E+00 -5.700093E+00 -2.363570E+00 -1.406009E+00 -2.500848E-01 -2.908147E-02 +3.455670E-02 +1.194166E-03 +1.113155E+00 +4.133643E-01 +1.212634E+00 +3.599153E-01 +1.548704E+00 +7.470060E-01 +1.916353E+00 +9.678959E-01 +3.617247E-01 +1.308448E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +6.906731E-02 +4.770293E-03 +1.184237E+00 +5.476329E-01 +9.482305E-01 +5.075797E-01 +5.056772E-01 +1.132023E-01 +2.538689E-01 +6.444941E-02 0.000000E+00 0.000000E+00 -1.726734E+00 -1.008362E+00 -5.696123E-01 -1.623003E-01 -2.077579E-02 -4.316336E-04 -1.433993E+00 -9.499213E-01 -7.566294E-01 -2.345886E-01 -6.841025E-03 -4.679962E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +6.148786E-01 +3.780757E-01 +9.371058E-01 +4.364939E-01 +4.650093E-01 +1.448489E-01 +5.028267E-01 +1.557262E-01 +1.710986E+00 +1.146930E+00 +1.323640E-01 +8.859409E-03 0.000000E+00 0.000000E+00 -7.173413E-01 -5.145786E-01 -6.358264E-01 -2.499324E-01 -4.142134E-01 -1.715727E-01 +1.208034E-01 +1.459347E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.011416E-01 -1.609146E-01 -3.368420E-02 -1.134625E-03 -1.030071E+00 -3.122720E-01 -1.143612E+00 -3.253839E-01 -2.540223E-02 -6.452733E-04 -1.928674E-01 -2.540533E-02 -5.020644E-01 -1.001572E-01 -7.725983E-02 -5.969081E-03 +4.949505E-03 +2.449760E-05 0.000000E+00 0.000000E+00 +3.911928E-01 +1.530318E-01 +4.287020E-02 +1.837854E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.761929E-01 -1.415211E-01 -3.337719E-01 -1.114037E-01 -1.458352E-01 -1.101801E-02 -1.004092E-02 -1.008200E-04 0.000000E+00 0.000000E+00 -1.456669E-02 -2.121884E-04 -9.828001E-01 -3.081076E-01 -7.752974E-01 -2.561541E-01 -2.210823E-01 -4.887738E-02 -5.096186E-01 -1.463671E-01 -9.189234E-03 -8.444202E-05 -9.466643E-02 -8.690023E-03 -3.476240E-01 -1.208424E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.776242E-02 -1.426000E-03 -2.838898E-01 -4.967809E-02 -3.681563E-01 -6.318539E-02 -1.810931E+00 -9.978486E-01 -7.373658E-01 -1.908335E-01 -5.104435E-02 -2.605526E-03 -2.373628E-01 -5.634111E-02 -1.619103E+00 -9.529343E-01 -3.924287E-01 -7.734575E-02 -2.295855E-01 -1.859566E-02 -0.000000E+00 -0.000000E+00 -9.399897E-01 -4.960289E-01 -1.747530E+00 -7.216683E-01 -6.696830E-01 -2.245084E-01 -1.077525E+00 -4.429656E-01 -1.584679E-02 -2.511207E-04 -7.184233E-02 -5.161321E-03 -1.759958E-01 -1.571544E-02 -6.649229E-01 -1.552335E-01 -2.313062E+00 -1.350964E+00 -4.351564E-01 -8.470997E-02 -8.760661E-02 -3.966567E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.403358E+00 -5.895449E-01 -1.252504E+00 -3.739918E-01 -8.089149E-01 -2.438434E-01 -3.543859E-01 -8.574508E-02 -2.047540E+00 -1.321581E+00 -1.463028E+00 -5.756583E-01 -1.611632E+00 -9.690304E-01 -7.271044E-01 -2.145542E-01 -4.694874E-03 -2.204184E-05 -4.718730E-01 -2.106227E-01 -4.047996E-01 -1.189989E-01 -0.000000E+00 -0.000000E+00 -4.536343E-02 -1.094112E-03 -2.969731E-02 -8.819302E-04 -3.790737E-01 -7.738056E-02 -3.695761E-01 -1.011168E-01 -1.192047E+00 -4.200074E-01 -4.362940E+00 -6.186599E+00 -4.986916E+00 -7.007443E+00 -3.727941E+00 -3.366778E+00 -1.372362E-01 -8.458071E-03 -1.272595E+00 -3.719182E-01 -1.371121E+00 -6.115963E-01 -3.881464E-01 -7.668321E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.181124E-01 -1.395053E-02 -1.218119E-01 -1.206118E-02 -1.634449E-02 -2.671424E-04 -4.552904E-01 -1.865599E-01 -2.988611E-02 -8.931799E-04 -1.948983E-01 -3.003358E-02 -4.577426E-01 -6.147655E-02 -2.286747E+00 -1.767929E+00 -2.459226E+00 -1.547942E+00 -7.936611E+00 -1.446313E+01 -1.949417E+00 -1.320611E+00 -2.052310E-01 -4.120539E-02 -1.147100E-01 -7.231156E-03 -6.967033E-01 -1.779982E-01 -3.093709E-01 -5.019469E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.389385E-01 -1.679638E-01 -6.897133E-01 -2.074373E-01 -1.252516E-01 -1.568795E-02 -0.000000E+00 -0.000000E+00 -5.377296E-01 -7.798805E-02 -3.413563E+00 -2.875271E+00 -2.853407E-01 -4.232457E-02 -1.680380E+00 -7.792461E-01 -5.197599E+00 -1.167591E+01 -1.489144E+00 -1.644073E+00 -8.799716E-01 -5.514111E-01 -0.000000E+00 -0.000000E+00 -1.019508E+00 -3.954690E-01 -1.615211E+00 -5.906163E-01 -6.971393E-04 -4.860032E-07 -0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.512285E-01 -3.531844E-02 -2.049880E-01 -2.500201E-02 -1.283410E+00 -7.357671E-01 -9.917693E-01 -3.339985E-01 -1.147483E-01 -8.509586E-03 -5.790502E-01 -9.680085E-02 -1.192232E+00 -4.459713E-01 -3.331876E-01 -4.746118E-02 -3.281132E-01 -7.974258E-02 -3.979931E-02 -1.583985E-03 0.000000E+00 +7.898461E-03 +6.238568E-05 +6.061890E-02 +3.674651E-03 +1.191815E+00 +5.156780E-01 +1.250062E+00 +5.649280E-01 +7.783636E-01 +1.954889E-01 0.000000E+00 -3.008273E-01 -5.804921E-02 -3.403375E+00 -2.756946E+00 -3.923179E-01 -4.065809E-02 -7.175236E-01 -2.579798E-01 0.000000E+00 +2.476065E-01 +3.116371E-02 +2.531217E-01 +6.407059E-02 +5.942646E-01 +3.531504E-01 0.000000E+00 -2.829294E-02 -8.004902E-04 -3.487502E-01 -8.673548E-02 -6.183549E-01 -2.131095E-01 -5.065445E-01 -1.543839E-01 -2.853090E+00 -3.049743E+00 -7.252805E-03 -5.260317E-05 -8.802479E-01 -2.996449E-01 -1.457582E+00 -6.219158E-01 -8.593620E-01 -2.316194E-01 -5.073156E-01 -1.305767E-01 0.000000E+00 +3.092327E-01 +9.562486E-02 0.000000E+00 -1.291473E-01 -1.667902E-02 -1.363309E-01 -1.126574E-02 -3.322153E-01 -7.213414E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -5.428888E-01 -2.947282E-01 -1.807993E+00 -7.223647E-01 -9.224400E-01 -2.724689E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.564746E-04 +4.309589E-07 +0.000000E+00 +0.000000E+00 +1.178847E+00 +6.216556E-01 +6.230410E-01 +1.302106E-01 +1.454551E+00 +8.690328E-01 +1.771536E+00 +1.297657E+00 +2.378308E+00 +2.005719E+00 +1.151353E+00 +4.354728E-01 +6.385651E-01 +4.077654E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.631232E+00 +8.012828E-01 +7.231079E-01 +2.170171E-01 +2.989568E+00 +2.300501E+00 +2.435710E+00 +1.419918E+00 +1.948580E+00 +9.273897E-01 +1.532501E+00 +1.032633E+00 +5.846831E-01 +1.355003E-01 +3.486854E-02 +1.023386E-03 +3.724253E-01 +1.387006E-01 +7.611368E-01 +2.029035E-01 +3.688050E-01 +8.361566E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.197843E-01 +1.434827E-02 +8.437264E-02 +2.569811E-03 +1.103891E+00 +7.153760E-01 +4.308994E+00 +4.839398E+00 +5.714286E+00 +6.750719E+00 +1.258551E+00 +5.098425E-01 +6.527455E-01 +1.164772E-01 +8.086924E-01 +2.259358E-01 +9.011204E-02 +3.479554E-03 +3.369886E+00 +2.480226E+00 +2.919336E+00 +2.088649E+00 +2.378050E+00 +1.715263E+00 +6.674360E-01 +1.744526E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.680789E+00 +1.144287E+00 +4.552955E+00 +4.489852E+00 +1.437564E+00 +7.142378E-01 +3.234705E-01 +8.846508E-02 +2.175232E+00 +1.092719E+00 +4.103202E-01 +8.470461E-02 +0.000000E+00 +0.000000E+00 +1.853475E-01 +3.435371E-02 +1.052712E+00 +4.225138E-01 +3.085971E+00 +2.340600E+00 +2.880463E+00 +1.858654E+00 +5.363409E-01 +1.501708E-01 +9.139296E-02 +8.352674E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.507123E-01 +2.271418E-02 +1.339282E+00 +4.656236E-01 +4.906674E+00 +5.217886E+00 +3.087876E+00 +2.437506E+00 +8.916777E-03 +7.950892E-05 +2.824518E-02 +7.977901E-04 +0.000000E+00 +0.000000E+00 +7.713739E-02 +5.950177E-03 +6.251875E-01 +2.055219E-01 +4.039604E-01 +7.463355E-02 +3.426711E-01 +5.326745E-02 +2.683602E-01 +6.063009E-02 +1.846638E-01 +2.687635E-02 +3.624780E-01 +1.313903E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.621874E-01 +4.229418E-01 +1.099406E+00 +6.578946E-01 +5.308277E-01 +1.009121E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.267439E-01 -5.141278E-02 -6.305037E-02 -3.751423E-03 -6.275215E-01 -3.937832E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.394098E+00 -7.405116E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -479,10 +485,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.096899E-01 -4.396987E-02 -2.774706E-02 -7.698995E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -499,8 +501,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.974546E-01 -2.384975E-02 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/tests/test_filter_mesh_3d/results_true.dat b/tests/test_filter_mesh_3d/results_true.dat index 67622e74e5..54cdf89f11 100644 --- a/tests/test_filter_mesh_3d/results_true.dat +++ b/tests/test_filter_mesh_3d/results_true.dat @@ -1,5 +1,5 @@ k-combined: -9.090848E-01 2.183589E-02 +1.102447E+00 7.056170E-03 tally 1: 0.000000E+00 0.000000E+00 @@ -277,6 +277,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.455587E-01 +1.194108E-01 +5.491443E-02 +3.015594E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -309,6 +313,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.197162E-02 +5.179914E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -341,6 +347,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.604976E-02 +2.575947E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -727,8 +735,4304 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.589207E-02 -2.106082E-03 +7.525171E-02 +5.662820E-03 +1.073075E-01 +1.151490E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.267212E-02 +3.927795E-03 +1.108880E-01 +1.229614E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.353054E-04 +6.977351E-07 +2.372472E-01 +2.848702E-02 +2.548476E-01 +4.367046E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.772100E-01 +2.187938E-02 +7.493226E-01 +1.828061E-01 +2.435524E-01 +4.711427E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.099304E-02 +3.720151E-03 +2.004048E+00 +1.188065E+00 +3.129991E-01 +2.986664E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.299620E-02 +8.468282E-05 +1.048639E-01 +1.099643E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.155649E-03 +5.120332E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.445854E-02 +2.965733E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.147771E-02 +9.908465E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.884852E-01 +7.962353E-02 +5.867779E-01 +1.793277E-01 +1.150562E-01 +1.323793E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.262199E-01 +1.064194E-01 +8.742986E-02 +7.643980E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.960590E-01 +1.231335E-01 +2.156140E-01 +3.612957E-02 +9.941460E-02 +9.384197E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.285531E-01 +1.652591E-02 +1.471896E-02 +2.166477E-04 +2.890978E-01 +8.357755E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.914131E-01 +2.944950E-02 +1.647075E+00 +9.299333E-01 +2.222233E-01 +4.938322E-02 +0.000000E+00 +0.000000E+00 +1.180474E-02 +1.393518E-04 +1.022453E-02 +1.045410E-04 +6.303992E-02 +3.974031E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.518422E-02 +2.041614E-03 +3.381222E-01 +3.980183E-02 +1.557458E-01 +8.146833E-03 +2.642893E-02 +6.984881E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.316047E-01 +5.029141E-02 +3.858085E-01 +1.160218E-01 +4.204735E-02 +1.767980E-03 +1.834910E-01 +3.366896E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.051027E-02 +1.104657E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.294315E-02 +1.675252E-04 +3.944874E-02 +1.556203E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.787999E-02 +7.772938E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.567260E-01 +2.456305E-02 +0.000000E+00 +0.000000E+00 +2.512067E-01 +6.310483E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.709463E-03 +4.501689E-05 +3.771567E-02 +1.422472E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.316348E-01 +5.365469E-02 +8.083327E-03 +6.534017E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.099300E-01 +1.167835E-02 +5.545853E-01 +1.737656E-01 +3.867892E-01 +8.614803E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.323184E-02 +1.104355E-03 +0.000000E+00 +0.000000E+00 +1.507683E-02 +2.273108E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.363444E-02 +7.224796E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.157530E-01 +1.339876E-02 +3.618283E-01 +1.309197E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.285959E-03 +6.865712E-05 +1.313378E+00 +5.513788E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.718986E-02 +2.954913E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.296288E-01 +5.795578E-02 +7.161786E-01 +1.991675E-01 +7.445160E-01 +2.633450E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.177984E-01 +1.675365E-01 +7.019374E-01 +1.644350E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.834216E-01 +1.046386E-01 +3.945703E-02 +1.556857E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.246376E-01 +4.161497E-01 +6.220109E-01 +1.940589E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.387289E-02 +2.819990E-03 +6.155787E-01 +1.274394E-01 +5.052725E-02 +2.319554E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.090801E-01 +4.371451E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.339126E-02 +5.620796E-04 +6.387238E-01 +1.626685E-01 +3.779905E-01 +4.562692E-02 +4.833733E-01 +1.415891E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.684179E-01 +2.231177E-01 +5.853687E-01 +1.084102E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.784202E-02 +7.751779E-04 +2.222881E-02 +4.941200E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.822788E-01 +7.558920E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.217368E-01 +2.483684E-02 +1.466478E-01 +1.270155E-02 +1.285656E-04 +1.652912E-08 +3.178480E-02 +1.010274E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.481850E-01 +6.159578E-02 +2.232447E-01 +2.677357E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.449953E-02 +2.102363E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.645763E-02 +9.304074E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.536373E-01 +2.360442E-02 +9.693646E-01 +3.033065E-01 +3.946779E-01 +6.568242E-02 +1.042143E-01 +1.086063E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.992811E-02 +3.971296E-04 +2.140057E+00 +1.238253E+00 +1.698022E-01 +2.038365E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.427449E-02 +8.929237E-04 +6.652732E-01 +2.415872E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.586629E-02 +5.755693E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.455670E-02 +1.194166E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.651100E-01 +2.656838E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.911969E-01 +4.555906E-02 +6.568479E-01 +1.795652E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.343222E-02 +1.804245E-04 +2.569814E-02 +6.603942E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.470699E-01 +2.162955E-02 +9.856539E-01 +2.416634E-01 +4.077959E-02 +1.255968E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.524918E-02 +5.662438E-03 +1.717303E-01 +1.484790E-02 +6.639556E-01 +2.493087E-01 +4.575248E-01 +1.048110E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.802438E-01 +2.382206E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.428757E-02 +4.132892E-03 +1.902984E-01 +3.621346E-02 +8.210030E-01 +2.428821E-01 +1.405790E-02 +1.976246E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.382237E-02 +1.910579E-04 +8.020721E-01 +2.560767E-01 +1.081172E-02 +1.168933E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.948014E-01 +8.690785E-02 +6.692334E-02 +4.478733E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.906731E-02 +4.770293E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.469410E-02 +2.556178E-03 +1.106087E+00 +5.114564E-01 +1.969939E-02 +3.880658E-04 +3.756472E-03 +1.411108E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.588566E-01 +1.821769E-01 +3.450410E-01 +7.871452E-02 +1.443328E-01 +2.083197E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.868296E-01 +5.481086E-02 +1.188475E-01 +1.412473E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.093336E-01 +4.382056E-02 +4.453526E-02 +1.983389E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.629045E-01 +2.653788E-02 +0.000000E+00 +0.000000E+00 +3.664429E-01 +1.342804E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.598342E-01 +1.489123E-02 +6.017219E-01 +2.662981E-01 +1.755496E-01 +2.703254E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.027682E-02 +6.727755E-03 +3.577032E-01 +8.891660E-02 +1.702927E-02 +2.899959E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.689802E-01 +2.855432E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.010375E-03 +8.118685E-05 +2.267671E-01 +2.573879E-02 +9.806896E-02 +9.617521E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.273906E-01 +1.572310E-02 +1.583595E+00 +1.033645E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.913601E-02 +3.497068E-03 +7.322801E-02 +5.362341E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.292948E-02 +6.877299E-03 +3.787396E-02 +1.434437E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.949505E-03 +2.449760E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.861209E-02 +2.363135E-03 +3.408107E-01 +1.161519E-01 +1.770047E-03 +3.133067E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.287020E-02 +1.837854E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.898461E-03 +6.238568E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.061890E-02 +3.674651E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.323913E-01 +4.809925E-02 +6.786172E-01 +2.239554E-01 +2.667098E-01 +2.391140E-02 +1.409635E-02 +1.987071E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.942849E-02 +3.774662E-04 +2.622051E-01 +5.220350E-02 +3.235576E-01 +5.246702E-02 +6.448711E-01 +1.549424E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.740834E-02 +1.399384E-03 +1.958654E-01 +2.003447E-02 +1.399837E-02 +1.959544E-04 +3.614817E-01 +7.414981E-02 +1.696098E-01 +1.015431E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.078466E-01 +1.163089E-02 +1.397599E-01 +1.953282E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.158374E-02 +1.729207E-03 +2.115379E-01 +4.474830E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.006225E-01 +9.037389E-02 +9.880798E-02 +9.763018E-03 +1.353787E-01 +1.832739E-02 +5.945539E-02 +3.534943E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.653119E-01 +7.039040E-02 +4.392080E-02 +1.929037E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.564746E-04 +4.309589E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.561666E-01 +2.160076E-02 +6.169654E-01 +1.918667E-01 +4.057149E-01 +1.164413E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.478793E-02 +6.144415E-04 +2.499233E-01 +5.915712E-02 +1.483368E-02 +2.200380E-04 +2.989395E-01 +4.649231E-02 +3.455659E-02 +1.194158E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.400244E-03 +5.761172E-06 +3.733464E-01 +1.393875E-01 +1.976972E-02 +3.908419E-04 +6.704194E-01 +2.256237E-01 +2.377531E-01 +2.460351E-02 +0.000000E+00 +0.000000E+00 +1.508621E-01 +2.275936E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.065690E-02 +3.679260E-03 +2.180734E-01 +2.631317E-02 +7.260315E-02 +3.330470E-03 +1.470977E-01 +2.163773E-02 +7.528543E-01 +2.868962E-01 +5.202503E-01 +1.741595E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.187038E-01 +3.142772E-02 +1.895944E-01 +2.049257E-02 +2.864194E-02 +8.203607E-04 +9.568016E-02 +5.337143E-03 +2.980826E-01 +8.610513E-02 +1.094206E+00 +7.586699E-01 +4.533990E-01 +8.701800E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.941168E-02 +1.566312E-03 +5.819380E-01 +1.632552E-01 +3.760498E-02 +1.414135E-03 +0.000000E+00 +0.000000E+00 +4.506052E-01 +2.030450E-01 +3.179351E-02 +1.010827E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.159266E-01 +1.343898E-02 +5.226385E-01 +2.731510E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1041,8 +5345,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.810181E-01 -1.943018E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1075,18 +5377,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.745569E-01 -3.301156E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.731890E-01 -7.463221E-02 +7.463223E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.585103E-01 +2.512553E-02 +1.397611E-01 +6.883554E-03 +1.059772E+00 +4.178726E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1109,6 +5415,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.777314E-03 +2.282273E-05 +1.000486E-01 +5.059980E-03 +3.582039E-01 +6.432855E-02 +9.731871E-03 +9.470932E-05 +1.372111E-01 +1.324202E-02 +1.131350E-01 +6.526806E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1133,6 +5451,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.115470E-01 +1.110930E-01 +5.943022E-01 +1.606657E-01 +6.362069E-02 +2.288086E-03 +4.271496E-01 +1.001382E-01 +5.590730E-01 +1.980612E-01 +2.587580E-02 +6.695571E-04 +4.957978E-01 +1.478440E-01 +4.122015E-01 +6.559436E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1153,10 +5487,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.315108E-02 +5.359723E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +4.413343E-01 +6.576614E-02 +8.189078E-01 +3.886598E-01 +6.218186E-02 +2.320102E-03 +8.994055E-01 +3.484588E-01 +1.907294E-01 +3.637772E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1177,6 +5523,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.411392E-01 +1.368736E-02 +2.806299E-01 +4.304438E-02 +9.034349E-02 +3.010544E-03 +1.457798E-01 +1.214742E-02 +5.355302E-01 +1.674120E-01 +5.378071E-01 +1.611076E-01 +2.173503E-01 +2.791086E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1197,8 +5557,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.888138E-03 +9.777527E-05 +4.328034E-01 +7.018169E-02 +1.783531E-01 +1.043350E-02 0.000000E+00 0.000000E+00 +4.359871E-01 +1.319768E-01 +2.848605E-01 +8.114553E-02 +1.906091E-01 +3.106247E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1211,10 +5583,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.749687E-03 +1.906602E-05 +1.931554E-01 +3.730901E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +5.672424E-02 +3.217639E-03 +1.788734E-01 +3.199570E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1223,6 +5603,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.138858E-01 +6.550852E-03 +3.629454E-02 +1.317294E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1233,14 +5617,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.486854E-02 +1.023386E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -5.389407E-01 -1.595676E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1265,16 +5649,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.876298E-01 +8.273087E-02 +8.479551E-02 +7.190278E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -7.907491E-01 -2.279094E-01 -2.336811E-01 -4.472648E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1297,16 +5681,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.966966E-01 +7.585142E-02 +2.993081E-01 +3.825902E-02 +1.651321E-01 +2.726862E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.908033E-01 -7.557454E-02 -6.288540E-01 -1.326512E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1327,6 +5713,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.632059E-01 +3.716460E-02 +1.055991E-01 +1.115116E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1335,8 +5725,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.091014E-02 -1.673639E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1547,6 +5935,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.197843E-01 +1.434827E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1579,6 +5969,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.313115E-02 +2.118609E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1587,6 +5979,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.124150E-02 +4.512011E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1597,6 +5991,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.259978E-01 +9.120084E-03 +3.029379E-01 +4.720304E-02 +7.711380E-02 +5.946538E-03 +5.578537E-01 +2.228200E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1607,6 +6009,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.998826E-02 +1.599061E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1617,20 +6021,30 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.916366E-02 -3.134904E-03 -4.865603E-01 -1.180911E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +6.738231E-01 +3.083875E-01 +8.792963E-02 +7.365684E-03 0.000000E+00 0.000000E+00 -4.800600E-02 -2.304576E-03 +6.859429E-01 +4.381930E-01 +4.475603E-02 +2.003102E-03 0.000000E+00 0.000000E+00 +1.062099E-02 +1.128054E-04 +6.084179E-01 +1.928178E-01 +1.211741E+00 +3.822834E-01 +9.857623E-01 +5.764008E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1651,22 +6065,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.914739E-01 -1.532518E-01 -8.773135E-01 -2.204709E-01 -1.855659E-02 -3.443471E-04 0.000000E+00 0.000000E+00 -8.943203E-03 -7.998089E-05 -3.419252E-02 -1.169128E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.578908E+00 +1.504342E+00 +1.531060E+00 +5.479843E-01 +7.091821E-01 +1.623053E-01 +8.951355E-01 +2.588366E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1693,6 +6105,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.078068E-01 +5.681691E-02 +5.382700E-01 +1.356178E-01 +1.432722E-01 +2.052691E-02 +1.692017E-01 +1.246774E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1717,8 +6137,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.122446E-02 +1.259886E-04 +3.558429E-01 +5.554412E-02 +1.692925E-01 +2.865995E-02 0.000000E+00 0.000000E+00 +1.163856E-01 +1.354561E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1731,6 +6159,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.704844E-02 +2.213555E-03 +5.346674E-01 +9.802160E-02 +2.269765E-01 +3.013916E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1759,6 +6193,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.349738E-02 +2.861969E-03 +2.033921E-02 +2.165773E-04 +1.627545E-02 +1.064467E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1783,6 +6223,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.496326E-02 +2.021695E-03 +6.129324E-01 +1.687388E-01 +2.278420E+00 +1.455838E+00 +4.335699E-01 +1.339468E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1809,18 +6257,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.817151E-01 +5.082293E-02 +1.070149E+00 +2.667041E-01 +1.439164E+00 +9.211140E-01 +1.283074E-01 +1.481969E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.721710E-01 -6.466430E-02 -1.083499E-01 -9.099135E-03 -2.019746E-01 -4.079373E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1841,20 +6291,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.049881E-01 +1.883453E-02 +1.508866E+00 +7.549587E-01 +4.010098E-01 +1.524411E-01 +2.631862E-01 +6.926699E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.008195E-01 -1.016457E-02 -3.669925E+00 -2.917222E+00 -9.397013E-01 -3.618502E-01 -1.564633E-01 -1.042011E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1875,20 +6325,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.295989E-01 +1.440027E-01 +1.090817E-01 +1.189883E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.077922E+00 -4.201997E-01 -1.214218E+00 -3.617486E-01 -2.241499E-03 -5.024317E-06 -6.918747E-02 -4.786906E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1913,12 +6359,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.816209E-02 -1.456345E-03 -1.349124E-01 -9.186049E-03 -7.701033E-02 -4.608092E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2073,6 +6513,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.013002E+00 +7.342944E-01 +1.389340E-01 +1.930266E-02 +3.765825E-01 +1.199979E-01 +1.221292E-01 +6.075446E-03 +3.014078E-02 +8.665341E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2081,12 +6531,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.958692E-01 -9.468103E-02 -1.975910E-01 -3.904222E-02 -1.033274E+00 -6.828182E-01 +2.962754E-03 +8.777912E-06 +3.776620E-01 +5.172631E-02 +4.136599E-01 +9.399949E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2097,6 +6547,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.693384E-01 +2.373996E-01 +1.910629E+00 +1.172406E+00 +2.881727E-01 +5.767501E-02 +4.855482E-02 +1.892682E-03 +6.546034E-01 +2.318763E-01 +1.873724E-01 +3.510840E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2105,6 +6567,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.193374E-01 +1.051560E-01 +7.105558E-01 +3.208231E-01 +7.151171E-03 +5.113925E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2115,14 +6583,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.067038E-01 -5.047096E-02 -9.980964E-03 -6.692276E-05 -2.085328E-01 -2.278714E-02 -4.439471E-02 -1.970890E-03 +2.933512E-03 +8.605494E-06 +1.069486E-02 +1.143799E-04 +8.689115E-02 +7.550072E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2137,6 +6603,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.954092E-04 +8.726658E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2149,8 +6617,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.699938E-02 +7.289665E-04 0.000000E+00 0.000000E+00 +2.961757E-01 +8.772007E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2171,14 +6643,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.077579E-02 -4.316336E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.625541E-01 +3.467106E-02 +1.228650E+00 +3.645409E-01 +3.254588E-01 +4.866345E-02 +3.393231E-01 +7.059711E-02 +1.924584E-02 +3.704024E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2197,18 +6677,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.003127E-02 -3.603753E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.116389E-01 -1.246324E-02 -1.262323E+00 -7.549729E-01 0.000000E+00 0.000000E+00 +2.213353E-01 +4.898934E-02 +9.693731E-02 +9.396841E-03 +4.445791E-02 +1.976506E-03 +4.758963E-02 +2.264773E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2231,18 +6713,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.064320E-02 -4.261416E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -5.729541E-01 -1.482544E-01 -1.630320E-01 -2.657945E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2263,6 +6739,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.853475E-01 +3.435371E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2273,8 +6751,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.841025E-03 -4.679962E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2293,6 +6769,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.813316E-02 +1.454138E-03 +3.041824E-01 +2.629618E-02 +7.103962E-01 +3.022410E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2319,6 +6801,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.043939E-01 +2.089814E-02 +9.015318E-01 +3.525237E-01 +1.419016E+00 +4.815865E-01 +5.610289E-01 +1.580760E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2345,6 +6835,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.456215E-01 +6.032991E-02 +9.586129E-01 +3.180953E-01 +1.504620E+00 +5.555003E-01 +4.344080E-02 +1.887103E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2371,6 +6869,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.833469E-01 +8.028547E-02 +1.596169E-01 +1.573140E-02 +9.337714E-02 +8.719290E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2395,14 +6899,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.888287E-01 -3.467192E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +9.139296E-02 +8.352674E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2413,8 +6917,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.246536E-02 -3.901921E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2425,12 +6927,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.756796E-02 -1.411352E-03 -1.257573E-01 -1.581491E-02 -3.206767E-01 -1.028336E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2447,8 +6943,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.381825E-02 -5.673093E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2459,10 +6953,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.080085E-01 -9.486923E-02 -1.062049E-01 -1.127948E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2565,6 +7055,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.507123E-01 +2.271418E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2587,6 +7079,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.671004E-01 +3.719394E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2595,18 +7089,34 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.655630E-02 +1.336363E-03 +1.711147E-01 +2.580079E-02 +5.510676E-02 +1.633869E-03 +3.842463E-01 +6.997051E-02 +4.251576E-01 +7.043236E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.664575E-02 -2.770809E-04 -3.844958E-01 -1.478370E-01 0.000000E+00 0.000000E+00 +6.138585E-01 +1.892076E-01 +4.509104E-01 +6.106776E-02 +5.473296E-01 +8.446369E-02 +1.371447E+00 +7.575889E-01 +4.929697E-03 +2.430192E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2615,12 +7125,32 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.501235E-01 +3.140143E-02 +1.212750E+00 +6.220960E-01 +2.707969E-01 +5.067333E-02 +9.097656E-02 +6.115551E-03 +9.355126E-02 +4.387198E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.098030E+00 +7.326929E-01 +6.181269E-01 +2.930526E-01 +5.709431E-01 +1.684348E-01 +3.185796E-01 +7.293711E-02 +1.228362E-02 +1.508873E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2629,20 +7159,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.813618E-01 +8.312020E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +8.855122E-02 +7.841319E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.368420E-02 -1.134625E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +8.916777E-03 +7.950892E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2659,12 +7193,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.500778E-01 -1.824030E-01 -3.751043E-01 -6.960597E-02 -4.889101E-03 -2.390331E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2693,10 +7221,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.552067E-01 -7.965862E-02 -5.884053E-01 -1.128861E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2705,6 +7229,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.824518E-02 +7.977901E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2749,8 +7275,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.540223E-02 -6.452733E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2759,6 +7283,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.713739E-02 +5.950177E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2781,10 +7307,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.203949E-03 -4.857393E-06 -1.906635E-01 -2.524226E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2795,6 +7317,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.251875E-01 +2.055219E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2817,16 +7341,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.924777E-01 -9.702070E-02 -9.586698E-03 -9.190478E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +5.349067E-02 +2.861252E-03 +8.385996E-02 +4.216710E-03 +2.666097E-01 +5.081994E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2851,14 +7377,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.725983E-02 -5.969081E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.374934E-01 +5.115209E-02 +5.177677E-03 +2.680834E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2889,6 +7417,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.683602E-01 +6.063009E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2919,6 +7449,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.620554E-01 +2.004315E-02 +2.260846E-02 +5.111425E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2947,6 +7481,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.517572E-01 +6.338168E-02 +1.107208E-01 +1.225909E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2973,8 +7511,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.150067E-01 -1.322653E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2989,10 +7525,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.341735E-02 -5.483721E-04 -8.143485E-02 -6.631634E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3007,8 +7539,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.406100E-02 -5.485032E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3023,10 +7553,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.347202E-02 -1.814953E-04 -4.752215E-02 -2.258354E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3047,12 +7573,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.157492E-02 -1.339789E-04 -8.567464E-02 -5.764769E-03 -4.858562E-02 -2.360563E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3085,8 +7605,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.004092E-02 -1.008200E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3151,16 +7669,32 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.337649E-01 +4.427485E-02 +8.822533E-02 +7.783708E-03 +2.279217E-01 +2.627022E-02 +4.122755E-01 +1.699711E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.456669E-02 -2.121884E-04 0.000000E+00 0.000000E+00 +3.702534E-03 +1.370875E-05 +2.384372E-01 +5.685228E-02 +2.211845E-01 +4.083378E-02 +1.896563E-01 +2.817529E-02 +3.458758E-01 +1.196300E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3169,6 +7703,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.005501E-01 +7.885603E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3177,18 +7713,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.177876E-01 -6.984115E-02 -5.414528E-01 -1.217187E-01 -1.235597E-01 -1.225844E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +4.054580E-02 +1.643962E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3205,18 +7737,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.902819E-01 +8.268688E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.438708E-02 -4.145696E-03 -3.829900E-03 -1.466813E-05 -3.333043E-01 -8.477399E-02 -3.737762E-01 -6.094548E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3237,10 +7763,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.024361E-01 -1.049315E-02 -1.186462E-01 -1.407692E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3271,10 +7793,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.575968E-02 -2.208187E-03 -4.438589E-01 -1.133195E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3311,8 +7829,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.189234E-03 -8.444202E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3345,8 +7861,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.457530E-03 -2.124393E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3357,10 +7871,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.728727E-02 -1.390341E-03 -5.592163E-02 -3.127228E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3389,10 +7899,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.868110E-01 -3.489837E-02 -1.608129E-01 -2.586079E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3533,8 +8039,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.776242E-02 -1.426000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3557,20 +8061,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.312464E-02 -8.672198E-03 -7.277455E-02 -3.337798E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.793932E-02 -5.547426E-03 -2.005125E-02 -4.020525E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3591,20 +8087,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.885218E-02 -4.740623E-03 -5.102997E-02 -2.604058E-03 -2.413011E-02 -5.822622E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.999624E-01 -2.172553E-02 -2.418161E-02 -4.017912E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3615,8 +8101,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.486695E-01 -1.215704E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3625,12 +8109,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.871991E-01 -3.504350E-02 -4.746788E-01 -8.097271E-02 -8.003839E-01 -2.085673E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3649,10 +8127,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.441534E-02 -8.914256E-03 -2.174907E-02 -4.730221E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3661,10 +8135,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.039618E-01 -5.462503E-03 -5.172396E-01 -1.418615E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3695,10 +8165,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.611614E-03 -9.238313E-05 -4.143274E-02 -1.716672E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3733,10 +8199,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.218092E-01 -4.919934E-02 -1.555359E-02 -2.419141E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3753,14 +8215,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.923037E-01 -8.544147E-02 -1.105886E+00 -4.954938E-01 -1.801721E-01 -1.643267E-02 -4.074186E-02 -1.659899E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3789,12 +8243,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.093595E-01 -4.383141E-02 0.000000E+00 0.000000E+00 -1.830692E-01 -3.351434E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3837,12 +8287,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.557970E-01 -1.315091E-02 -4.836104E-02 -2.338790E-03 -2.542750E-02 -6.465577E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3889,22 +8333,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.114172E-01 -8.463618E-02 -6.482386E-02 -4.202133E-03 0.000000E+00 0.000000E+00 -1.562146E-01 -2.440299E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.075341E-01 -9.457725E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3923,24 +8359,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.987385E-02 -4.216342E-03 -3.775725E-01 -7.128418E-02 -1.229306E-01 -8.980437E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.072363E-01 -4.294688E-02 -7.605871E-01 -2.470259E-01 -2.093299E-01 -4.381902E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3959,10 +8383,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.869734E-01 -6.608107E-02 -3.758837E-01 -7.851736E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3971,8 +8391,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.825953E-03 -4.659364E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3995,10 +8413,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.820587E-01 -7.154947E-02 -6.954661E-01 -3.034029E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4029,8 +8443,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.584679E-02 -2.511207E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4077,8 +8489,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.184233E-02 -5.161321E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4103,4416 +8513,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.294981E-02 -3.962679E-03 -3.572915E-02 -1.276572E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.731687E-02 -5.977899E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.080327E-01 -1.167107E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.026670E-01 -6.339813E-02 -1.542231E-01 -2.378478E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.460357E-02 -1.989478E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.818917E-02 -7.946292E-04 -1.893802E+00 -8.370429E-01 -3.464673E-01 -7.243677E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.758467E-03 -6.019381E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.013752E-01 -3.437520E-02 -2.160993E-02 -3.780757E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.044128E-01 -4.178460E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.580196E-02 -2.405069E-03 -3.180466E-02 -8.211954E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.516279E-03 -3.042934E-05 -2.109966E-01 -4.451955E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.204701E-02 -1.451304E-04 -9.777737E-01 -3.216046E-01 -1.970243E-01 -3.497367E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.022569E-01 -4.090786E-02 -2.829187E-01 -5.992985E-02 -3.909183E-03 -1.528171E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.769412E-02 -7.669642E-04 -2.293319E-01 -2.291139E-02 -5.063929E-01 -8.839948E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.240276E-01 -6.259831E-02 -4.821705E-01 -1.465719E-01 -2.716753E-03 -7.380744E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.007063E-02 -4.909893E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.843153E-01 -8.083519E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.637517E-01 -6.344334E-02 -1.611871E-01 -9.780279E-03 -1.369946E+00 -7.310512E-01 -1.790727E-01 -2.421811E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.358261E-02 -2.750165E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.520557E-02 -3.629997E-03 -3.104068E-01 -3.585841E-02 -8.961225E-01 -3.152521E-01 -8.118983E-02 -6.591789E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.213483E-02 -4.899508E-04 -6.796855E-02 -4.619724E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.636814E-03 -7.459456E-05 -6.558296E-01 -2.206348E-01 -7.105868E-01 -2.014504E-01 -7.356863E-02 -5.412344E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.630097E-01 -2.657217E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.780793E-02 -8.160032E-04 -6.228699E-01 -1.860172E-01 -6.642653E-02 -1.937778E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.694874E-03 -2.204184E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.203382E-01 -1.166708E-02 -3.515349E-01 -1.235768E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.527081E-03 -3.054862E-05 -6.191315E-04 -3.833239E-07 -0.000000E+00 -0.000000E+00 -3.986534E-01 -1.182222E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.697245E-02 -2.880642E-04 -0.000000E+00 -0.000000E+00 -2.839097E-02 -8.060473E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.969731E-02 -8.819302E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.068802E-01 -4.279940E-02 -1.721936E-01 -1.999610E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.805117E-03 -3.258447E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.019718E-01 -1.039824E-02 -2.657993E-01 -4.762038E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.306944E-01 -1.477186E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.023013E-01 -2.462801E-02 -4.590510E-01 -6.395545E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.216151E-01 -2.494977E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.796653E-02 -3.227963E-04 -1.254571E-01 -1.153518E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.798254E-02 -2.302324E-03 -5.031134E-01 -2.531231E-01 -2.554328E+00 -1.871232E+00 -6.528166E-01 -1.601847E-01 -2.396607E-01 -3.096977E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.020566E-02 -2.520608E-03 -2.933276E-01 -2.725757E-02 -1.772073E+00 -7.789301E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.741968E-04 -3.297019E-07 -4.096107E-02 -1.677809E-03 -1.145151E+00 -6.780541E-01 -1.549730E+00 -9.904989E-01 -1.348937E-01 -1.258874E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.310363E-02 -1.857923E-03 -9.519794E-01 -2.619604E-01 -2.722131E-01 -4.120812E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.365154E-01 -5.215993E-02 -1.740307E+00 -9.539805E-01 -4.838221E-01 -8.982260E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.831912E-03 -7.800267E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.594878E-02 -3.130266E-03 -7.245552E-02 -5.249803E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.999607E-02 -2.229669E-03 -1.085851E+00 -3.131386E-01 -2.346814E-02 -3.212775E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.121136E-02 -3.746830E-03 -3.206848E-02 -1.028387E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.912672E-01 -5.254983E-02 -8.701937E-02 -7.572371E-03 -1.700075E-02 -2.890254E-04 -2.993514E-01 -4.786535E-02 -6.764819E-01 -2.492324E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.590925E-01 -2.264019E-02 -2.290539E-01 -5.246570E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.003849E-01 -1.007713E-02 -1.772745E-02 -3.142623E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.289766E-02 -5.314069E-03 -3.618562E-02 -1.309399E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.272864E-02 -1.620182E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.634449E-02 -2.671424E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.212518E-01 -4.895234E-02 -2.100048E-01 -4.410203E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.403382E-02 -5.776247E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.988611E-02 -8.931799E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.859875E-01 -2.705213E-02 -8.910831E-03 -7.940291E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.477605E-01 -1.085632E-02 -2.188892E-01 -1.430397E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.196720E-02 -4.825581E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.912571E-02 -4.778363E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.562066E-01 -6.564182E-02 -1.021109E-01 -1.042665E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.101070E-01 -3.281373E-01 -2.258964E-02 -5.102917E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.242398E-01 -5.028348E-02 -5.303166E-01 -1.259944E-01 -2.813696E-01 -7.586511E-02 -5.980735E-02 -3.576919E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.770640E-01 -3.135167E-02 -8.386975E-02 -7.034135E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.460936E-01 -5.438186E-02 -3.774668E-01 -4.409491E-02 -1.951430E-01 -3.808079E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.308324E-01 -1.711712E-02 -6.446435E-01 -1.469357E-01 -5.953597E-01 -2.237589E-01 -8.752834E-03 -7.661211E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.474912E-01 -4.482820E-02 -2.558944E+00 -1.501846E+00 -2.498522E+00 -2.037541E+00 -4.592114E-01 -9.549920E-02 -2.651761E-03 -7.031834E-06 -6.728509E-03 -4.527283E-05 -7.206739E-02 -2.632777E-03 -1.258432E+00 -5.033118E-01 -8.325623E-01 -3.432848E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.644227E-02 -2.703482E-04 -9.177910E-01 -3.528077E-01 -4.331510E-01 -6.954968E-02 -2.750792E-01 -3.874842E-02 -5.245578E-02 -2.751608E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.100342E-01 -8.936587E-03 -1.444636E-01 -1.217721E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.028376E-01 -4.114311E-02 -1.409534E-04 -1.986787E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.252382E-03 -5.073226E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.646738E-02 -2.711747E-04 -1.091128E-02 -1.190561E-04 -9.598634E-03 -5.702904E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.914111E-02 -8.492040E-04 -4.859163E-02 -2.361147E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.204163E-02 -4.858335E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.278990E-01 -1.061206E-01 -2.467626E-01 -3.061051E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.474672E-03 -5.587072E-05 -3.018962E-01 -5.003703E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.148943E-01 -1.583098E-02 -3.145520E-01 -5.430577E-02 -1.094922E-01 -1.198853E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.643295E-01 -6.464662E-02 -3.253838E-01 -5.116839E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.816236E-03 -7.772602E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.571548E-01 -5.132783E-02 -2.087595E-02 -2.190083E-04 -2.648409E-02 -3.512423E-04 -0.000000E+00 -0.000000E+00 -1.332148E-01 -1.774618E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.103340E+00 -1.240889E+00 -8.819452E-01 -3.181477E-01 -3.827031E-01 -1.404169E-01 -0.000000E+00 -0.000000E+00 -3.650407E-02 -1.332547E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.070770E-03 -8.227887E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.160355E-01 -5.419152E-03 -4.555830E-02 -2.075558E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.452794E-02 -1.982737E-03 -7.921897E-02 -6.275645E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.888042E-01 -1.912239E-01 -9.253612E-01 -2.196512E-01 -5.331610E-03 -2.842606E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.088258E-02 -3.706689E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.765580E-01 -1.679632E-02 -1.567743E+00 -1.480433E+00 -1.729034E+00 -1.162221E+00 -2.450066E-01 -5.312041E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.772601E-01 -1.750320E-01 -1.001997E+00 -4.479877E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.198859E-01 -9.794083E-03 -1.970259E-01 -1.355094E-02 -2.437112E-01 -5.939515E-02 -3.383869E-01 -1.145057E-01 -3.802531E-01 -1.445924E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.098808E-01 -4.404995E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.650113E-02 -1.619032E-03 -5.180023E-01 -1.718152E-01 -3.054682E-01 -9.331081E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.290812E-02 -1.666195E-04 -5.118466E-01 -2.619870E-01 -1.379429E-01 -1.766885E-02 -3.568103E-01 -6.413693E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.428902E-01 -2.041760E-02 -2.714910E-01 -7.137827E-02 -6.198367E-01 -1.870530E-01 -5.809933E-01 -2.020653E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.971393E-04 -4.860032E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.689765E-01 -2.855304E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.121427E-02 -3.747187E-03 -1.313244E-01 -9.930563E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.295197E-01 -1.677535E-02 -1.924219E-01 -2.512176E-02 -1.826581E-01 -3.336399E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.963040E-01 -2.117115E-01 -1.954654E-01 -1.664314E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.465142E-02 -3.921415E-04 -9.009686E-02 -8.117444E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.375350E-01 -7.745005E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.296036E-02 -5.271783E-04 -1.185548E-01 -1.257056E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.742732E-02 -5.994990E-03 -4.153920E-01 -8.269451E-02 -1.732018E-01 -2.586439E-02 -0.000000E+00 -0.000000E+00 -3.164105E-02 -1.001156E-03 -4.945695E-01 -1.153516E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.055273E-01 -4.669609E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.766028E-02 -7.650912E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.022896E-02 -2.522948E-03 -2.586997E-01 -6.692555E-02 -1.918447E-02 -3.680440E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.399905E-04 -7.055840E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.895932E-02 -1.517828E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.310985E-01 -5.309190E-02 -0.000000E+00 -0.000000E+00 -6.972879E-02 -4.862104E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.355608E+00 -6.784243E-01 -1.559912E+00 -6.765918E-01 -4.878546E-01 -1.956002E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.239030E-02 -8.535968E-03 -7.362813E-02 -2.487558E-03 -1.539035E-01 -1.472121E-02 -7.239598E-02 -5.241178E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.299792E-01 -9.530852E-02 -3.641896E-02 -1.168215E-03 -3.511255E-01 -1.232891E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.815281E-03 -1.455637E-05 -2.447765E-02 -5.991556E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.509075E-01 -5.120090E-02 -6.346139E-02 -4.027348E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.279297E-02 -8.440309E-05 -1.992059E-01 -3.968299E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.055205E-01 -2.183994E-02 -1.147614E-01 -9.795585E-03 -1.862626E-01 -3.469375E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.923698E+00 -1.294950E+00 -8.345353E-01 -3.317169E-01 -9.485640E-02 -5.815957E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.252805E-03 -5.260317E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.708035E-02 -9.424594E-03 -3.352764E-01 -4.028247E-02 -4.250527E-01 -8.344337E-02 -2.283848E-02 -5.215963E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.151722E-01 -4.629909E-02 -4.760109E-01 -1.931711E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.880574E-01 -4.653885E-02 -3.526314E-01 -4.256262E-02 -1.257097E-01 -1.580294E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.312274E-01 -9.446273E-02 -0.000000E+00 -0.000000E+00 -3.356486E-01 -8.519671E-02 -1.924860E-01 -2.805063E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.025814E-01 -4.103921E-02 -3.047342E-01 -5.638103E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.291473E-01 -1.667902E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.926562E-02 -1.541789E-03 -0.000000E+00 -0.000000E+00 -3.675944E-02 -1.351256E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.030587E-02 -3.636797E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.969216E-03 -8.044683E-05 -2.539237E-01 -3.783876E-02 -6.932239E-02 -4.805594E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.179485E-01 -1.391185E-02 -4.249402E-01 -1.805742E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.537757E-01 -1.696554E-01 -8.876105E-01 -2.032335E-01 -1.666064E-01 -2.775768E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.024841E-01 -2.020292E-01 -2.199558E-01 -3.376160E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.260572E-01 -1.589042E-02 -1.006866E-01 -1.013780E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.305037E-02 -3.751423E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.434563E-02 -1.179623E-03 -5.931758E-01 -3.518576E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.901538E-02 -3.482815E-03 -1.298430E+00 -6.450758E-01 -3.665245E-02 -1.343402E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.020604E-02 -1.041632E-04 -1.994839E-01 -3.979382E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.270281E-03 -5.154175E-06 -2.547678E-02 -6.490664E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.708003E-03 -5.941330E-05 -1.376862E-01 -1.895748E-02 -5.206040E-02 -2.710285E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/tests/test_infinite_cell/results_true.dat b/tests/test_infinite_cell/results_true.dat index 1cbb837696..d24fba45b5 100644 --- a/tests/test_infinite_cell/results_true.dat +++ b/tests/test_infinite_cell/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.757696E-02 3.308939E-03 +9.901399E-02 2.451460E-03 diff --git a/tests/test_lattice/results_true.dat b/tests/test_lattice/results_true.dat index 1d20d33c47..334ccba33f 100644 --- a/tests/test_lattice/results_true.dat +++ b/tests/test_lattice/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.682250E-01 3.051607E-02 +9.608917E-01 5.170585E-02 diff --git a/tests/test_lattice_hex/results_true.dat b/tests/test_lattice_hex/results_true.dat index 0b7aa64b49..aca8f5eb5b 100644 --- a/tests/test_lattice_hex/results_true.dat +++ b/tests/test_lattice_hex/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.726715E-01 1.182884E-02 +2.578422E-01 1.020501E-02 diff --git a/tests/test_lattice_mixed/results_true.dat b/tests/test_lattice_mixed/results_true.dat index 013e57b258..068ec5abd7 100644 --- a/tests/test_lattice_mixed/results_true.dat +++ b/tests/test_lattice_mixed/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.012317E+00 2.704182E-02 +9.882168E-01 1.190961E-02 diff --git a/tests/test_lattice_multiple/results_true.dat b/tests/test_lattice_multiple/results_true.dat index bf50a27562..445f1386e3 100644 --- a/tests/test_lattice_multiple/results_true.dat +++ b/tests/test_lattice_multiple/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.090848E-01 2.183589E-02 +1.102447E+00 7.056170E-03 diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index c9be10e74a..feb234bba0 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -1,19 +1,19 @@ material group in nuclide mean std. dev. -0 1 1 total 0.410245 0.027062 material group in nuclide mean std. dev. -0 1 1 total 0.078746 0.008749 material group in group out nuclide mean std. dev. -0 1 1 1 total 0.344581 0.025142 material group out nuclide mean std. dev. -0 1 1 total 1 0.056776 material group in nuclide mean std. dev. -0 2 1 total 0.24133 0.020122 material group in nuclide mean std. dev. +0 1 1 total 0.411633 0.011133 material group in nuclide mean std. dev. +0 1 1 total 0.076642 0.004088 material group in group out nuclide mean std. dev. +0 1 1 1 total 0.349336 0.010391 material group out nuclide mean std. dev. +0 1 1 total 1 0.035459 material group in nuclide mean std. dev. +0 2 1 total 0.247014 0.017374 material group in nuclide mean std. dev. 0 2 1 total 0 0 material group in group out nuclide mean std. dev. -0 2 1 1 total 0.240146 0.020265 material group out nuclide mean std. dev. -0 2 1 total 0 0 material group in nuclide mean std. dev. -0 3 1 total 0.421036 0.034969 material group in nuclide mean std. dev. +0 2 1 1 total 0.245818 0.016929 material group out nuclide mean std. dev. +0 2 1 total 0 0 material group in nuclide mean std. dev. +0 3 1 total 0.38971 0.050064 material group in nuclide mean std. dev. 0 3 1 total 0 0 material group in group out nuclide mean std. dev. -0 3 1 1 total 0.413828 0.034945 material group out nuclide mean std. dev. +0 3 1 1 total 0.383139 0.04919 material group out nuclide mean std. dev. 0 3 1 total 0 0 material group in nuclide mean std. dev. -0 4 1 total 0.330201 0.044281 material group in nuclide mean std. dev. +0 4 1 total 0.333404 0.029065 material group in nuclide mean std. dev. 0 4 1 total 0 0 material group in group out nuclide mean std. dev. -0 4 1 1 total 0.324648 0.043395 material group out nuclide mean std. dev. +0 4 1 1 total 0.327175 0.028684 material group out nuclide mean std. dev. 0 4 1 total 0 0 material group in nuclide mean std. dev. 0 5 1 total 0 0 material group in nuclide mean std. dev. 0 5 1 total 0 0 material group in group out nuclide mean std. dev. @@ -38,10 +38,10 @@ 0 10 1 total 0 0 material group in nuclide mean std. dev. 0 10 1 total 0 0 material group in group out nuclide mean std. dev. 0 10 1 1 total 0 0 material group out nuclide mean std. dev. -0 10 1 total 0 0 material group in nuclide mean std. dev. -0 11 1 total 0.467451 0.672448 material group in nuclide mean std. dev. +0 10 1 total 0 0 material group in nuclide mean std. dev. +0 11 1 total 0.5826 0.456605 material group in nuclide mean std. dev. 0 11 1 total 0 0 material group in group out nuclide mean std. dev. -0 11 1 1 total 0.444299 0.638051 material group out nuclide mean std. dev. +0 11 1 1 total 0.565899 0.441588 material group out nuclide mean std. dev. 0 11 1 total 0 0 material group in nuclide mean std. dev. 0 12 1 total 0 0 material group in nuclide mean std. dev. 0 12 1 total 0 0 material group in group out nuclide mean std. dev. diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index c86696a586..1c79348c78 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,5 +1,5 @@ - sum(distribcell) group in nuclide mean std. dev. -0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 total 0 0 sum(distribcell) group in nuclide mean std. dev. -0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 total 0 0 sum(distribcell) group in group out nuclide mean std. dev. -0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 1 total 0 0 sum(distribcell) group out nuclide mean std. dev. + sum(distribcell) group in nuclide mean std. dev. +0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 total 0.651951 1.469284 sum(distribcell) group in nuclide mean std. dev. +0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 total 0 0 sum(distribcell) group in group out nuclide mean std. dev. +0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 1 total 0.53214 1.320678 sum(distribcell) group out nuclide mean std. dev. 0 sum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ... 1 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_hdf5/results_true.dat b/tests/test_mgxs_library_hdf5/results_true.dat index 8364500615..0c30cdde60 100644 --- a/tests/test_mgxs_library_hdf5/results_true.dat +++ b/tests/test_mgxs_library_hdf5/results_true.dat @@ -1,56 +1,56 @@ domain=1 type=transport -[ 0.37396684 0.80006722] -[ 0.02769982 0.08850146] +[ 0.37483545 0.81182796] +[ 0.00975656 0.09252336] domain=1 type=nu-fission -[ 0.02299634 0.70592004] -[ 0.00148378 0.12890576] +[ 0.02084086 0.6657263 ] +[ 0.00101232 0.0576272 ] domain=1 type=nu-scatter matrix -[[ 0.34086643 0.00069685] - [ 0. 0.37700333]] -[[ 0.02663397 0.0001772 ] - [ 0. 0.06914186]] +[[ 3.42223019e-01 3.29418484e-04] + [ 0.00000000e+00 4.23113552e-01]] +[[ 0.00959152 0.00020181] + [ 0. 0.06751478]] domain=1 type=chi [ 1. 0.] -[ 0.05677619 0. ] +[ 0.03545939 0. ] domain=2 type=transport -[ 0.23796562 0.27436119] -[ 0.02150652 0.05068359] +[ 0.24589766 0.25842474] +[ 0.01860222 0.0422331 ] domain=2 type=nu-fission [ 0. 0.] [ 0. 0.] domain=2 type=nu-scatter matrix -[[ 0.23622579 0.00043496] - [ 0. 0.27436119]] -[[ 0.02164652 0.00043568] - [ 0. 0.05068359]] +[[ 0.24458479 0. ] + [ 0. 0.25842474]] +[[ 0.01809844 0. ] + [ 0. 0.0422331 ]] domain=2 type=chi [ 0. 0.] [ 0. 0.] domain=3 type=transport -[ 0.28810874 1.42423201] -[ 0.03173526 0.17486068] +[ 0.27657178 1.36782402] +[ 0.04377331 0.31728543] domain=3 type=nu-fission [ 0. 0.] [ 0. 0.] domain=3 type=nu-scatter matrix -[[ 0.25843468 0.02889657] - [ 0.00195588 1.36653358]] -[[ 0.03144996 0.0015335 ] - [ 0.00120568 0.17179408]] +[[ 0.24863329 0.02615518] + [ 0. 1.31985949]] +[[ 0.0423232 0.00168668] + [ 0. 0.31396901]] domain=3 type=chi [ 0. 0.] [ 0. 0.] domain=4 type=transport -[ 0.24606392 1.21935024] -[ 0.03881796 0.34515333] +[ 0.25159164 1.13749254] +[ 0.02889307 0.113413 ] domain=4 type=nu-fission [ 0. 0.] [ 0. 0.] domain=4 type=nu-scatter matrix -[[ 0.22348748 0.02170811] - [ 0. 1.16429193]] -[[ 0.03791013 0.00162276] - [ 0. 0.33459821]] +[[ 0.22741674 0.02292717] + [ 0. 1.08230769]] +[[ 0.02822188 0.00123647] + [ 0. 0.11058743]] domain=4 type=chi [ 0. 0.] [ 0. 0.] @@ -139,16 +139,16 @@ domain=10 type=chi [ 0. 0.] [ 0. 0.] domain=11 type=transport -[ 0.43011949 0.85701927] -[ 0.69238877 1.94756366] +[ 0.32838473 1.08549606] +[ 0.42249726 1.10815395] domain=11 type=nu-fission [ 0. 0.] [ 0. 0.] domain=11 type=nu-scatter matrix -[[ 0.40474879 0.02537069] - [ 0. 0.59226474]] -[[ 0.65713809 0.03587957] - [ 0. 1.62427067]] +[[ 0.3032413 0.02514343] + [ 0. 1.03575664]] +[[ 0.40403607 0.02113257] + [ 0. 1.0667609 ]] domain=11 type=chi [ 0. 0.] [ 0. 0.] diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index f16afb897c..a12693d544 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -1,42 +1,42 @@ material group in nuclide mean std. dev. -1 1 1 total 0.373967 0.027700 -0 1 2 total 0.800067 0.088501 material group in nuclide mean std. dev. -1 1 1 total 0.022996 0.001484 -0 1 2 total 0.705920 0.128906 material group in group out nuclide mean std. dev. -3 1 1 1 total 0.340866 0.026634 -2 1 1 2 total 0.000697 0.000177 +1 1 1 total 0.374835 0.009757 +0 1 2 total 0.811828 0.092523 material group in nuclide mean std. dev. +1 1 1 total 0.020841 0.001012 +0 1 2 total 0.665726 0.057627 material group in group out nuclide mean std. dev. +3 1 1 1 total 0.342223 0.009592 +2 1 1 2 total 0.000329 0.000202 1 1 2 1 total 0.000000 0.000000 -0 1 2 2 total 0.377003 0.069142 material group out nuclide mean std. dev. -1 1 1 total 1 0.056776 +0 1 2 2 total 0.423114 0.067515 material group out nuclide mean std. dev. +1 1 1 total 1 0.035459 0 1 2 total 0 0.000000 material group in nuclide mean std. dev. -1 2 1 total 0.237966 0.021507 -0 2 2 total 0.274361 0.050684 material group in nuclide mean std. dev. +1 2 1 total 0.245898 0.018602 +0 2 2 total 0.258425 0.042233 material group in nuclide mean std. dev. 1 2 1 total 0 0 0 2 2 total 0 0 material group in group out nuclide mean std. dev. -3 2 1 1 total 0.236226 0.021647 -2 2 1 2 total 0.000435 0.000436 +3 2 1 1 total 0.244585 0.018098 +2 2 1 2 total 0.000000 0.000000 1 2 2 1 total 0.000000 0.000000 -0 2 2 2 total 0.274361 0.050684 material group out nuclide mean std. dev. +0 2 2 2 total 0.258425 0.042233 material group out nuclide mean std. dev. 1 2 1 total 0 0 0 2 2 total 0 0 material group in nuclide mean std. dev. -1 3 1 total 0.288109 0.031735 -0 3 2 total 1.424232 0.174861 material group in nuclide mean std. dev. +1 3 1 total 0.276572 0.043773 +0 3 2 total 1.367824 0.317285 material group in nuclide mean std. dev. 1 3 1 total 0 0 0 3 2 total 0 0 material group in group out nuclide mean std. dev. -3 3 1 1 total 0.258435 0.031450 -2 3 1 2 total 0.028897 0.001533 -1 3 2 1 total 0.001956 0.001206 -0 3 2 2 total 1.366534 0.171794 material group out nuclide mean std. dev. +3 3 1 1 total 0.248633 0.042323 +2 3 1 2 total 0.026155 0.001687 +1 3 2 1 total 0.000000 0.000000 +0 3 2 2 total 1.319859 0.313969 material group out nuclide mean std. dev. 1 3 1 total 0 0 0 3 2 total 0 0 material group in nuclide mean std. dev. -1 4 1 total 0.246064 0.038818 -0 4 2 total 1.219350 0.345153 material group in nuclide mean std. dev. +1 4 1 total 0.251592 0.028893 +0 4 2 total 1.137493 0.113413 material group in nuclide mean std. dev. 1 4 1 total 0 0 0 4 2 total 0 0 material group in group out nuclide mean std. dev. -3 4 1 1 total 0.223487 0.037910 -2 4 1 2 total 0.021708 0.001623 +3 4 1 1 total 0.227417 0.028222 +2 4 1 2 total 0.022927 0.001236 1 4 2 1 total 0.000000 0.000000 -0 4 2 2 total 1.164292 0.334598 material group out nuclide mean std. dev. +0 4 2 2 total 1.082308 0.110587 material group out nuclide mean std. dev. 1 4 1 total 0 0 0 4 2 total 0 0 material group in nuclide mean std. dev. 1 5 1 total 0 0 @@ -99,14 +99,14 @@ 0 10 2 2 total 0 0 material group out nuclide mean std. dev. 1 10 1 total 0 0 0 10 2 total 0 0 material group in nuclide mean std. dev. -1 11 1 total 0.430119 0.692389 -0 11 2 total 0.857019 1.947564 material group in nuclide mean std. dev. +1 11 1 total 0.328385 0.422497 +0 11 2 total 1.085496 1.108154 material group in nuclide mean std. dev. 1 11 1 total 0 0 0 11 2 total 0 0 material group in group out nuclide mean std. dev. -3 11 1 1 total 0.404749 0.657138 -2 11 1 2 total 0.025371 0.035880 +3 11 1 1 total 0.303241 0.404036 +2 11 1 2 total 0.025143 0.021133 1 11 2 1 total 0.000000 0.000000 -0 11 2 2 total 0.592265 1.624271 material group out nuclide mean std. dev. +0 11 2 2 total 1.035757 1.066761 material group out nuclide mean std. dev. 1 11 1 total 0 0 0 11 2 total 0 0 material group in nuclide mean std. dev. 1 12 1 total 0 0 diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index c3d1093018..6226b7b817 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -1,14 +1,14 @@ material group in nuclide mean std. dev. -34 1 1 U-234 0.000164 0.000175 -35 1 1 U-235 0.008231 0.001132 -36 1 1 U-236 0.001233 0.001217 -37 1 1 U-238 0.202077 0.017282 -38 1 1 Np-237 0.000000 0.000000 +34 1 1 U-234 0.000074 0.000188 +35 1 1 U-235 0.007460 0.000634 +36 1 1 U-236 0.001766 0.000430 +37 1 1 U-238 0.211760 0.008955 +38 1 1 Np-237 0.000252 0.000216 39 1 1 Pu-238 0.000000 0.000000 -40 1 1 Pu-239 0.004777 0.001236 -41 1 1 Pu-240 0.005654 0.000687 -42 1 1 Pu-241 0.001077 0.000847 -43 1 1 Pu-242 0.000000 0.000000 +40 1 1 Pu-239 0.003526 0.000782 +41 1 1 Pu-240 0.003507 0.000688 +42 1 1 Pu-241 0.000426 0.000213 +43 1 1 Pu-242 0.000329 0.000329 44 1 1 Am-241 0.000000 0.000000 45 1 1 Am-242m 0.000000 0.000000 46 1 1 Am-243 0.000000 0.000000 @@ -16,34 +16,34 @@ 48 1 1 Cm-243 0.000000 0.000000 49 1 1 Cm-244 0.000000 0.000000 50 1 1 Cm-245 0.000000 0.000000 -51 1 1 Mo-95 0.000563 0.000254 -52 1 1 Tc-99 0.000625 0.000364 -53 1 1 Ru-101 0.000129 0.000180 +51 1 1 Mo-95 0.000081 0.000185 +52 1 1 Tc-99 0.001119 0.000411 +53 1 1 Ru-101 0.000000 0.000000 54 1 1 Ru-103 0.000000 0.000000 -55 1 1 Ag-109 0.000000 0.000000 +55 1 1 Ag-109 0.000165 0.000165 56 1 1 Xe-135 0.000000 0.000000 -57 1 1 Cs-133 0.000352 0.000274 -58 1 1 Nd-143 0.000991 0.000577 -59 1 1 Nd-145 0.000517 0.000369 +57 1 1 Cs-133 0.000429 0.000225 +58 1 1 Nd-143 0.000340 0.000301 +59 1 1 Nd-145 0.000945 0.000432 60 1 1 Sm-147 0.000000 0.000000 61 1 1 Sm-149 0.000000 0.000000 -62 1 1 Sm-150 0.000191 0.000175 -63 1 1 Sm-151 0.000000 0.000000 -64 1 1 Sm-152 0.001106 0.000310 -65 1 1 Eu-153 0.000174 0.000174 +62 1 1 Sm-150 0.000060 0.000195 +63 1 1 Sm-151 0.000165 0.000165 +64 1 1 Sm-152 0.000567 0.000249 +65 1 1 Eu-153 0.000329 0.000202 66 1 1 Gd-155 0.000000 0.000000 -67 1 1 O-16 0.146107 0.011033 +67 1 1 O-16 0.141533 0.006851 0 1 2 U-234 0.000000 0.000000 -1 1 2 U-235 0.175076 0.016125 -2 1 2 U-236 0.000000 0.000000 -3 1 2 U-238 0.216781 0.038123 -4 1 2 Np-237 0.000000 0.000000 +1 1 2 U-235 0.177240 0.019675 +2 1 2 U-236 0.004312 0.003674 +3 1 2 U-238 0.260438 0.055946 +4 1 2 Np-237 0.001791 0.001797 5 1 2 Pu-238 0.000000 0.000000 -6 1 2 Pu-239 0.159673 0.015238 -7 1 2 Pu-240 0.018720 0.005305 -8 1 2 Pu-241 0.022464 0.009775 +6 1 2 Pu-239 0.143305 0.017349 +7 1 2 Pu-240 0.001791 0.001797 +8 1 2 Pu-241 0.016637 0.005253 9 1 2 Pu-242 0.000000 0.000000 -10 1 2 Am-241 0.001872 0.001877 +10 1 2 Am-241 0.000000 0.000000 11 1 2 Am-242m 0.000000 0.000000 12 1 2 Am-243 0.000000 0.000000 13 1 2 Cm-242 0.000000 0.000000 @@ -55,35 +55,35 @@ 19 1 2 Ru-101 0.000000 0.000000 20 1 2 Ru-103 0.000000 0.000000 21 1 2 Ag-109 0.000000 0.000000 -22 1 2 Xe-135 0.014792 0.004201 -23 1 2 Cs-133 0.001872 0.001877 -24 1 2 Nd-143 0.007258 0.003270 -25 1 2 Nd-145 0.003755 0.002966 +22 1 2 Xe-135 0.018241 0.005630 +23 1 2 Cs-133 0.001791 0.001797 +24 1 2 Nd-143 0.007763 0.003677 +25 1 2 Nd-145 0.000000 0.000000 26 1 2 Sm-147 0.000000 0.000000 -27 1 2 Sm-149 0.001872 0.001877 -28 1 2 Sm-150 0.001872 0.001877 -29 1 2 Sm-151 0.003744 0.002309 -30 1 2 Sm-152 0.000000 0.000000 -31 1 2 Eu-153 0.000000 0.000000 +27 1 2 Sm-149 0.005374 0.002238 +28 1 2 Sm-150 0.001791 0.001797 +29 1 2 Sm-151 0.000000 0.000000 +30 1 2 Sm-152 0.001791 0.001797 +31 1 2 Eu-153 0.001791 0.001797 32 1 2 Gd-155 0.000000 0.000000 -33 1 2 O-16 0.170318 0.040164 material group in nuclide mean std. dev. -34 1 1 U-234 7.238811e-06 5.898159e-07 -35 1 1 U-235 1.025668e-02 7.748371e-04 -36 1 1 U-236 8.347436e-05 5.733633e-06 -37 1 1 U-238 7.211700e-03 6.985444e-04 -38 1 1 Np-237 1.316022e-05 1.028609e-06 -39 1 1 Pu-238 7.923472e-06 5.003103e-07 -40 1 1 Pu-239 4.217305e-03 3.227135e-04 -41 1 1 Pu-240 7.114707e-05 5.058746e-06 -42 1 1 Pu-241 1.117266e-03 6.330109e-05 -43 1 1 Pu-242 5.957920e-06 5.003279e-07 -44 1 1 Am-241 1.271200e-06 6.380801e-08 -45 1 1 Am-242m 1.105610e-06 5.834143e-08 -46 1 1 Am-243 8.498728e-07 6.946281e-08 -47 1 1 Cm-242 4.705032e-07 3.420756e-08 -48 1 1 Cm-243 2.054524e-07 1.656685e-08 -49 1 1 Cm-244 3.011697e-07 4.129449e-08 -50 1 1 Cm-245 2.771160e-07 1.432237e-08 +33 1 2 O-16 0.167770 0.025149 material group in nuclide mean std. dev. +34 1 1 U-234 6.845790e-06 3.227706e-07 +35 1 1 U-235 9.347056e-03 3.928662e-04 +36 1 1 U-236 6.211042e-05 2.226027e-06 +37 1 1 U-238 6.351733e-03 3.790179e-04 +38 1 1 Np-237 1.271771e-05 5.545845e-07 +39 1 1 Pu-238 7.663212e-06 4.860133e-07 +40 1 1 Pu-239 3.926921e-03 3.043267e-04 +41 1 1 Pu-240 6.508634e-05 2.793072e-06 +42 1 1 Pu-241 1.050916e-03 6.999147e-05 +43 1 1 Pu-242 5.640937e-06 2.366815e-07 +44 1 1 Am-241 1.047764e-06 4.427465e-08 +45 1 1 Am-242m 9.826994e-07 7.585438e-08 +46 1 1 Am-243 7.721583e-07 4.007024e-08 +47 1 1 Cm-242 5.401883e-07 4.235379e-08 +48 1 1 Cm-243 2.064355e-07 1.860162e-08 +49 1 1 Cm-244 2.918438e-07 2.207478e-08 +50 1 1 Cm-245 3.264085e-07 3.150469e-08 51 1 1 Mo-95 0.000000e+00 0.000000e+00 52 1 1 Tc-99 0.000000e+00 0.000000e+00 53 1 1 Ru-101 0.000000e+00 0.000000e+00 @@ -101,23 +101,23 @@ 65 1 1 Eu-153 0.000000e+00 0.000000e+00 66 1 1 Gd-155 0.000000e+00 0.000000e+00 67 1 1 O-16 0.000000e+00 0.000000e+00 -0 1 2 U-234 4.396211e-07 8.415758e-08 -1 1 2 U-235 3.756376e-01 7.229188e-02 -2 1 2 U-236 6.080198e-06 1.134149e-06 -3 1 2 U-238 5.336844e-07 1.001346e-07 -4 1 2 Np-237 2.578615e-07 4.431602e-08 -5 1 2 Pu-238 3.455264e-05 7.228008e-06 -6 1 2 Pu-239 2.843774e-01 4.965537e-02 -7 1 2 Pu-240 4.575101e-06 7.913823e-07 -8 1 2 Pu-241 4.569839e-02 8.558032e-03 -9 1 2 Pu-242 8.689493e-08 1.642236e-08 -10 1 2 Am-241 5.035346e-06 7.998367e-07 -11 1 2 Am-242m 1.398348e-04 2.569623e-05 -12 1 2 Am-243 7.882610e-08 1.449885e-08 -13 1 2 Cm-242 9.701077e-07 1.841283e-07 -14 1 2 Cm-243 1.830906e-06 3.314797e-07 -15 1 2 Cm-244 1.576930e-07 2.984998e-08 -16 1 2 Cm-245 1.213282e-05 2.473385e-06 +0 1 2 U-234 4.104195e-07 3.065579e-08 +1 1 2 U-235 3.490566e-01 2.635060e-02 +2 1 2 U-236 5.741696e-06 4.389191e-07 +3 1 2 U-238 5.027672e-07 3.822823e-08 +4 1 2 Np-237 2.593520e-07 2.536889e-08 +5 1 2 Pu-238 3.098896e-05 2.214628e-06 +6 1 2 Pu-239 2.727718e-01 2.870084e-02 +7 1 2 Pu-240 4.413447e-06 3.622781e-07 +8 1 2 Pu-241 4.370225e-02 3.791177e-03 +9 1 2 Pu-242 8.159609e-08 6.163540e-09 +10 1 2 Am-241 4.495589e-06 5.183237e-07 +11 1 2 Am-242m 1.349582e-04 1.062926e-05 +12 1 2 Am-243 7.470727e-08 5.781858e-09 +13 1 2 Cm-242 9.093231e-07 6.842831e-08 +14 1 2 Cm-243 1.742377e-06 1.369426e-07 +15 1 2 Cm-244 1.479902e-07 1.116327e-08 +16 1 2 Cm-245 1.099337e-05 7.987632e-07 17 1 2 Mo-95 0.000000e+00 0.000000e+00 18 1 2 Tc-99 0.000000e+00 0.000000e+00 19 1 2 Ru-101 0.000000e+00 0.000000e+00 @@ -135,15 +135,15 @@ 31 1 2 Eu-153 0.000000e+00 0.000000e+00 32 1 2 Gd-155 0.000000e+00 0.000000e+00 33 1 2 O-16 0.000000e+00 0.000000e+00 material group in group out nuclide mean std. dev. -102 1 1 1 U-234 0.000164 0.000175 -103 1 1 1 U-235 0.003179 0.000940 -104 1 1 1 U-236 0.001058 0.001049 -105 1 1 1 U-238 0.184481 0.016782 -106 1 1 1 Np-237 0.000000 0.000000 +102 1 1 1 U-234 0.000074 0.000188 +103 1 1 1 U-235 0.002518 0.000812 +104 1 1 1 U-236 0.001437 0.000445 +105 1 1 1 U-238 0.192819 0.008439 +106 1 1 1 Np-237 0.000087 0.000182 107 1 1 1 Pu-238 0.000000 0.000000 -108 1 1 1 Pu-239 0.001989 0.000808 -109 1 1 1 Pu-240 0.000950 0.000532 -110 1 1 1 Pu-241 0.000554 0.000524 +108 1 1 1 Pu-239 0.001055 0.000364 +109 1 1 1 Pu-240 0.000378 0.000277 +110 1 1 1 Pu-241 0.000097 0.000178 111 1 1 1 Pu-242 0.000000 0.000000 112 1 1 1 Am-241 0.000000 0.000000 113 1 1 1 Am-242m 0.000000 0.000000 @@ -152,23 +152,23 @@ 116 1 1 1 Cm-243 0.000000 0.000000 117 1 1 1 Cm-244 0.000000 0.000000 118 1 1 1 Cm-245 0.000000 0.000000 -119 1 1 1 Mo-95 0.000388 0.000282 -120 1 1 1 Tc-99 0.000277 0.000203 -121 1 1 1 Ru-101 0.000129 0.000180 +119 1 1 1 Mo-95 0.000081 0.000185 +120 1 1 1 Tc-99 0.000625 0.000394 +121 1 1 1 Ru-101 0.000000 0.000000 122 1 1 1 Ru-103 0.000000 0.000000 123 1 1 1 Ag-109 0.000000 0.000000 124 1 1 1 Xe-135 0.000000 0.000000 -125 1 1 1 Cs-133 0.000004 0.000244 -126 1 1 1 Nd-143 0.000643 0.000505 -127 1 1 1 Nd-145 0.000342 0.000389 +125 1 1 1 Cs-133 0.000265 0.000193 +126 1 1 1 Nd-143 0.000340 0.000301 +127 1 1 1 Nd-145 0.000616 0.000399 128 1 1 1 Sm-147 0.000000 0.000000 129 1 1 1 Sm-149 0.000000 0.000000 -130 1 1 1 Sm-150 0.000191 0.000175 +130 1 1 1 Sm-150 0.000060 0.000195 131 1 1 1 Sm-151 0.000000 0.000000 -132 1 1 1 Sm-152 0.001106 0.000310 +132 1 1 1 Sm-152 0.000567 0.000249 133 1 1 1 Eu-153 0.000000 0.000000 134 1 1 1 Gd-155 0.000000 0.000000 -135 1 1 1 O-16 0.145411 0.010996 +135 1 1 1 O-16 0.141203 0.006870 68 1 1 2 U-234 0.000000 0.000000 69 1 1 2 U-235 0.000000 0.000000 70 1 1 2 U-236 0.000000 0.000000 @@ -202,7 +202,7 @@ 98 1 1 2 Sm-152 0.000000 0.000000 99 1 1 2 Eu-153 0.000000 0.000000 100 1 1 2 Gd-155 0.000000 0.000000 -101 1 1 2 O-16 0.000697 0.000177 +101 1 1 2 O-16 0.000329 0.000202 34 1 2 1 U-234 0.000000 0.000000 35 1 2 1 U-235 0.000000 0.000000 36 1 2 1 U-236 0.000000 0.000000 @@ -238,14 +238,14 @@ 66 1 2 1 Gd-155 0.000000 0.000000 67 1 2 1 O-16 0.000000 0.000000 0 1 2 2 U-234 0.000000 0.000000 -1 1 2 2 U-235 0.012215 0.007232 -2 1 2 2 U-236 0.000000 0.000000 -3 1 2 2 U-238 0.184958 0.030436 +1 1 2 2 U-235 0.017813 0.004846 +2 1 2 2 U-236 0.002521 0.001945 +3 1 2 2 U-238 0.228195 0.049264 4 1 2 2 Np-237 0.000000 0.000000 5 1 2 2 Pu-238 0.000000 0.000000 -6 1 2 2 Pu-239 0.002428 0.001961 +6 1 2 2 Pu-239 0.000000 0.000000 7 1 2 2 Pu-240 0.000000 0.000000 -8 1 2 2 Pu-241 0.000000 0.000000 +8 1 2 2 Pu-241 0.000515 0.002200 9 1 2 2 Pu-242 0.000000 0.000000 10 1 2 2 Am-241 0.000000 0.000000 11 1 2 2 Am-242m 0.000000 0.000000 @@ -259,10 +259,10 @@ 19 1 2 2 Ru-101 0.000000 0.000000 20 1 2 2 Ru-103 0.000000 0.000000 21 1 2 2 Ag-109 0.000000 0.000000 -22 1 2 2 Xe-135 0.003560 0.003090 +22 1 2 2 Xe-135 0.002119 0.003874 23 1 2 2 Cs-133 0.000000 0.000000 -24 1 2 2 Nd-143 0.003514 0.002641 -25 1 2 2 Nd-145 0.000011 0.002640 +24 1 2 2 Nd-143 0.004181 0.002609 +25 1 2 2 Nd-145 0.000000 0.000000 26 1 2 2 Sm-147 0.000000 0.000000 27 1 2 2 Sm-149 0.000000 0.000000 28 1 2 2 Sm-150 0.000000 0.000000 @@ -270,16 +270,16 @@ 30 1 2 2 Sm-152 0.000000 0.000000 31 1 2 2 Eu-153 0.000000 0.000000 32 1 2 2 Gd-155 0.000000 0.000000 -33 1 2 2 O-16 0.170318 0.040164 material group out nuclide mean std. dev. +33 1 2 2 O-16 0.167770 0.025149 material group out nuclide mean std. dev. 34 1 1 U-234 0 0.000000 -35 1 1 U-235 1 0.036464 +35 1 1 U-235 1 0.083157 36 1 1 U-236 1 1.414214 -37 1 1 U-238 1 0.232666 +37 1 1 U-238 1 0.175094 38 1 1 Np-237 0 0.000000 39 1 1 Pu-238 0 0.000000 -40 1 1 Pu-239 1 0.106688 +40 1 1 Pu-239 1 0.080013 41 1 1 Pu-240 0 0.000000 -42 1 1 Pu-241 1 0.317035 +42 1 1 Pu-241 1 0.272314 43 1 1 Pu-242 0 0.000000 44 1 1 Am-241 0 0.000000 45 1 1 Am-242m 0 0.000000 @@ -339,16 +339,16 @@ 31 1 2 Eu-153 0 0.000000 32 1 2 Gd-155 0 0.000000 33 1 2 O-16 0 0.000000 material group in nuclide mean std. dev. -5 2 1 Zr-90 0.107693 0.014218 -6 2 1 Zr-91 0.035302 0.006932 -7 2 1 Zr-92 0.045224 0.003966 -8 2 1 Zr-94 0.043310 0.007048 -9 2 1 Zr-96 0.006437 0.001752 -0 2 2 Zr-90 0.134757 0.026961 -1 2 2 Zr-91 0.040725 0.010553 -2 2 2 Zr-92 0.014433 0.019906 -3 2 2 Zr-94 0.074322 0.020213 -4 2 2 Zr-96 0.010124 0.008870 material group in nuclide mean std. dev. +5 2 1 Zr-90 0.123212 0.010296 +6 2 1 Zr-91 0.041136 0.005109 +7 2 1 Zr-92 0.038640 0.004343 +8 2 1 Zr-94 0.039928 0.006609 +9 2 1 Zr-96 0.002982 0.001882 +0 2 2 Zr-90 0.103289 0.030798 +1 2 2 Zr-91 0.064487 0.017642 +2 2 2 Zr-92 0.035554 0.022411 +3 2 2 Zr-94 0.052741 0.014095 +4 2 2 Zr-96 0.002354 0.004958 material group in nuclide mean std. dev. 5 2 1 Zr-90 0 0 6 2 1 Zr-91 0 0 7 2 1 Zr-92 0 0 @@ -359,26 +359,26 @@ 2 2 2 Zr-92 0 0 3 2 2 Zr-94 0 0 4 2 2 Zr-96 0 0 material group in group out nuclide mean std. dev. -15 2 1 1 Zr-90 0.107693 0.014218 -16 2 1 1 Zr-91 0.034432 0.007212 -17 2 1 1 Zr-92 0.044789 0.004020 -18 2 1 1 Zr-94 0.042875 0.007257 -19 2 1 1 Zr-96 0.006437 0.001752 +15 2 1 1 Zr-90 0.123212 0.010296 +16 2 1 1 Zr-91 0.040260 0.004742 +17 2 1 1 Zr-92 0.038640 0.004343 +18 2 1 1 Zr-94 0.039490 0.006845 +19 2 1 1 Zr-96 0.002982 0.001882 10 2 1 2 Zr-90 0.000000 0.000000 11 2 1 2 Zr-91 0.000000 0.000000 12 2 1 2 Zr-92 0.000000 0.000000 -13 2 1 2 Zr-94 0.000435 0.000436 +13 2 1 2 Zr-94 0.000000 0.000000 14 2 1 2 Zr-96 0.000000 0.000000 5 2 2 1 Zr-90 0.000000 0.000000 6 2 2 1 Zr-91 0.000000 0.000000 7 2 2 1 Zr-92 0.000000 0.000000 8 2 2 1 Zr-94 0.000000 0.000000 9 2 2 1 Zr-96 0.000000 0.000000 -0 2 2 2 Zr-90 0.134757 0.026961 -1 2 2 2 Zr-91 0.040725 0.010553 -2 2 2 2 Zr-92 0.014433 0.019906 -3 2 2 2 Zr-94 0.074322 0.020213 -4 2 2 2 Zr-96 0.010124 0.008870 material group out nuclide mean std. dev. +0 2 2 2 Zr-90 0.103289 0.030798 +1 2 2 2 Zr-91 0.064487 0.017642 +2 2 2 2 Zr-92 0.035554 0.022411 +3 2 2 2 Zr-94 0.052741 0.014095 +4 2 2 2 Zr-96 0.002354 0.004958 material group out nuclide mean std. dev. 5 2 1 Zr-90 0 0 6 2 1 Zr-91 0 0 7 2 1 Zr-92 0 0 @@ -389,14 +389,14 @@ 2 2 2 Zr-92 0 0 3 2 2 Zr-94 0 0 4 2 2 Zr-96 0 0 material group in nuclide mean std. dev. -4 3 1 H-1 0.211941 0.029479 -5 3 1 O-16 0.075510 0.004901 -6 3 1 B-10 0.000648 0.000291 -7 3 1 B-11 0.000009 0.000177 -0 3 2 H-1 1.268594 0.168369 -1 3 2 O-16 0.105889 0.012655 -2 3 2 B-10 0.047919 0.009174 -3 3 2 B-11 0.001830 0.001303 material group in nuclide mean std. dev. +4 3 1 H-1 0.201049 0.041488 +5 3 1 O-16 0.074334 0.007160 +6 3 1 B-10 0.001189 0.000730 +7 3 1 B-11 0.000000 0.000000 +0 3 2 H-1 1.231384 0.305890 +1 3 2 O-16 0.097440 0.020608 +2 3 2 B-10 0.037686 0.008653 +3 3 2 B-11 0.001313 0.001766 material group in nuclide mean std. dev. 4 3 1 H-1 0 0 5 3 1 O-16 0 0 6 3 1 B-10 0 0 @@ -405,22 +405,22 @@ 1 3 2 O-16 0 0 2 3 2 B-10 0 0 3 3 2 B-11 0 0 material group in group out nuclide mean std. dev. -12 3 1 1 H-1 0.183045 0.029114 -13 3 1 1 O-16 0.075381 0.004923 +12 3 1 1 H-1 0.174497 0.040671 +13 3 1 1 O-16 0.074136 0.007210 14 3 1 1 B-10 0.000000 0.000000 -15 3 1 1 B-11 0.000009 0.000177 -8 3 1 2 H-1 0.028897 0.001533 +15 3 1 1 B-11 0.000000 0.000000 +8 3 1 2 H-1 0.026155 0.001687 9 3 1 2 O-16 0.000000 0.000000 10 3 1 2 B-10 0.000000 0.000000 11 3 1 2 B-11 0.000000 0.000000 -4 3 2 1 H-1 0.000978 0.000980 -5 3 2 1 O-16 0.000978 0.000980 +4 3 2 1 H-1 0.000000 0.000000 +5 3 2 1 O-16 0.000000 0.000000 6 3 2 1 B-10 0.000000 0.000000 7 3 2 1 B-11 0.000000 0.000000 -0 3 2 2 H-1 1.259793 0.167200 -1 3 2 2 O-16 0.104911 0.012500 +0 3 2 2 H-1 1.221106 0.302782 +1 3 2 2 O-16 0.097440 0.020608 2 3 2 2 B-10 0.000000 0.000000 -3 3 2 2 B-11 0.001830 0.001303 material group out nuclide mean std. dev. +3 3 2 2 B-11 0.001313 0.001766 material group out nuclide mean std. dev. 4 3 1 H-1 0 0 5 3 1 O-16 0 0 6 3 1 B-10 0 0 @@ -429,13 +429,13 @@ 1 3 2 O-16 0 0 2 3 2 B-10 0 0 3 3 2 B-11 0 0 material group in nuclide mean std. dev. -4 4 1 H-1 0.174218 0.038828 -5 4 1 O-16 0.070445 0.006116 -6 4 1 B-10 0.000868 0.000356 -7 4 1 B-11 0.000533 0.000379 -0 4 2 H-1 1.101947 0.312129 -1 4 2 O-16 0.074580 0.031899 -2 4 2 B-10 0.042823 0.011148 +4 4 1 H-1 0.178673 0.023950 +5 4 1 O-16 0.071869 0.007853 +6 4 1 B-10 0.000624 0.000158 +7 4 1 B-11 0.000425 0.000318 +0 4 2 H-1 1.010325 0.104936 +1 4 2 O-16 0.079647 0.012666 +2 4 2 B-10 0.047520 0.003811 3 4 2 B-11 0.000000 0.000000 material group in nuclide mean std. dev. 4 4 1 H-1 0 0 5 4 1 O-16 0 0 @@ -445,20 +445,20 @@ 1 4 2 O-16 0 0 2 4 2 B-10 0 0 3 4 2 B-11 0 0 material group in group out nuclide mean std. dev. -12 4 1 1 H-1 0.152799 0.038054 -13 4 1 1 O-16 0.070155 0.006104 +12 4 1 1 H-1 0.155278 0.023436 +13 4 1 1 O-16 0.071713 0.007769 14 4 1 1 B-10 0.000000 0.000000 -15 4 1 1 B-11 0.000533 0.000379 -8 4 1 2 H-1 0.021419 0.001438 -9 4 1 2 O-16 0.000289 0.000290 +15 4 1 1 B-11 0.000425 0.000318 +8 4 1 2 H-1 0.022927 0.001236 +9 4 1 2 O-16 0.000000 0.000000 10 4 1 2 B-10 0.000000 0.000000 11 4 1 2 B-11 0.000000 0.000000 4 4 2 1 H-1 0.000000 0.000000 5 4 2 1 O-16 0.000000 0.000000 6 4 2 1 B-10 0.000000 0.000000 7 4 2 1 B-11 0.000000 0.000000 -0 4 2 2 H-1 1.089712 0.310379 -1 4 2 2 O-16 0.074580 0.031899 +0 4 2 2 H-1 1.002661 0.104168 +1 4 2 2 O-16 0.079647 0.012666 2 4 2 2 B-10 0.000000 0.000000 3 4 2 2 B-11 0.000000 0.000000 material group out nuclide mean std. dev. 4 4 1 H-1 0 0 @@ -1789,23 +1789,23 @@ 18 10 2 Cr-52 0 0 19 10 2 Cr-53 0 0 20 10 2 Cr-54 0 0 material group in nuclide mean std. dev. -9 11 1 H-1 0.143342 0.405094 -10 11 1 O-16 0.048701 0.059664 +9 11 1 H-1 0.170249 0.307631 +10 11 1 O-16 0.059703 0.040511 11 11 1 B-10 0.000000 0.000000 12 11 1 B-11 0.000000 0.000000 -13 11 1 Zr-90 0.140978 0.178138 -14 11 1 Zr-91 0.000000 0.000000 -15 11 1 Zr-92 0.057496 0.076982 -16 11 1 Zr-94 0.039602 0.049138 +13 11 1 Zr-90 0.048335 0.045106 +14 11 1 Zr-91 0.021080 0.020176 +15 11 1 Zr-92 0.015959 0.020345 +16 11 1 Zr-94 0.013058 0.019576 17 11 1 Zr-96 0.000000 0.000000 -0 11 2 H-1 0.570204 1.298303 -1 11 2 O-16 0.022061 0.359836 -2 11 2 B-10 0.264755 0.374419 +0 11 2 H-1 0.899793 0.954128 +1 11 2 O-16 0.075037 0.081039 +2 11 2 B-10 0.033160 0.038885 3 11 2 B-11 0.000000 0.000000 -4 11 2 Zr-90 0.000000 0.000000 -5 11 2 Zr-91 0.000000 0.000000 -6 11 2 Zr-92 0.000000 0.000000 -7 11 2 Zr-94 0.000000 0.000000 +4 11 2 Zr-90 0.016580 0.019443 +5 11 2 Zr-91 0.018732 0.020277 +6 11 2 Zr-92 0.026213 0.025010 +7 11 2 Zr-94 0.015981 0.019263 8 11 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. 9 11 1 H-1 0 0 10 11 1 O-16 0 0 @@ -1825,16 +1825,16 @@ 6 11 2 Zr-92 0 0 7 11 2 Zr-94 0 0 8 11 2 Zr-96 0 0 material group in group out nuclide mean std. dev. -27 11 1 1 H-1 0.117971 0.376005 -28 11 1 1 O-16 0.048701 0.059664 +27 11 1 1 H-1 0.145106 0.291322 +28 11 1 1 O-16 0.059703 0.040511 29 11 1 1 B-10 0.000000 0.000000 30 11 1 1 B-11 0.000000 0.000000 -31 11 1 1 Zr-90 0.140978 0.178138 -32 11 1 1 Zr-91 0.000000 0.000000 -33 11 1 1 Zr-92 0.057496 0.076982 -34 11 1 1 Zr-94 0.039602 0.049138 +31 11 1 1 Zr-90 0.048335 0.045106 +32 11 1 1 Zr-91 0.021080 0.020176 +33 11 1 1 Zr-92 0.015959 0.020345 +34 11 1 1 Zr-94 0.013058 0.019576 35 11 1 1 Zr-96 0.000000 0.000000 -18 11 1 2 H-1 0.025371 0.035880 +18 11 1 2 H-1 0.025143 0.021133 19 11 1 2 O-16 0.000000 0.000000 20 11 1 2 B-10 0.000000 0.000000 21 11 1 2 B-11 0.000000 0.000000 @@ -1852,14 +1852,14 @@ 15 11 2 1 Zr-92 0.000000 0.000000 16 11 2 1 Zr-94 0.000000 0.000000 17 11 2 1 Zr-96 0.000000 0.000000 -0 11 2 2 H-1 0.570204 1.298303 -1 11 2 2 O-16 0.022061 0.359836 +0 11 2 2 H-1 0.899793 0.954128 +1 11 2 2 O-16 0.075037 0.081039 2 11 2 2 B-10 0.000000 0.000000 3 11 2 2 B-11 0.000000 0.000000 4 11 2 2 Zr-90 0.000000 0.000000 -5 11 2 2 Zr-91 0.000000 0.000000 -6 11 2 2 Zr-92 0.000000 0.000000 -7 11 2 2 Zr-94 0.000000 0.000000 +5 11 2 2 Zr-91 0.018732 0.020277 +6 11 2 2 Zr-92 0.026213 0.025010 +7 11 2 2 Zr-94 0.015981 0.019263 8 11 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. 9 11 1 H-1 0 0 10 11 1 O-16 0 0 diff --git a/tests/test_natural_element/results_true.dat b/tests/test_natural_element/results_true.dat index 47b49b1441..444f0df4f0 100644 --- a/tests/test_natural_element/results_true.dat +++ b/tests/test_natural_element/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.000870E+00 2.861252E-02 +9.693693E-01 1.054925E-01 diff --git a/tests/test_output/results_true.dat b/tests/test_output/results_true.dat index bf062f283c..cb1493aba2 100644 --- a/tests/test_output/results_true.dat +++ b/tests/test_output/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.938252E-01 5.852966E-03 +2.993693E-01 1.470880E-03 diff --git a/tests/test_particle_restart_eigval/results_true.dat b/tests/test_particle_restart_eigval/results_true.dat index a0cced44c0..c68f4864ee 100644 --- a/tests/test_particle_restart_eigval/results_true.dat +++ b/tests/test_particle_restart_eigval/results_true.dat @@ -3,14 +3,14 @@ current batch: current gen: 1.000000E+00 particle id: -5.730000E+02 +6.850000E+02 run mode: k-eigenvalue particle weight: 1.000000E+00 particle energy: -4.522511E+00 +5.680443E-01 particle xyz: --3.306412E+01 -1.396998E+01 5.715368E+01 +-4.117903E+01 4.165935E+01 4.265251E+01 particle uvw: --6.019192E-01 -6.419527E-01 4.749632E-01 +1.106369E-01 -5.940833E-01 7.967587E-01 diff --git a/tests/test_particle_restart_eigval/test_particle_restart_eigval.py b/tests/test_particle_restart_eigval/test_particle_restart_eigval.py index f022c0cced..6b98d3bbd8 100644 --- a/tests/test_particle_restart_eigval/test_particle_restart_eigval.py +++ b/tests/test_particle_restart_eigval/test_particle_restart_eigval.py @@ -7,5 +7,5 @@ from testing_harness import ParticleRestartTestHarness if __name__ == '__main__': - harness = ParticleRestartTestHarness('particle_11_573.*') + harness = ParticleRestartTestHarness('particle_11_685.*') harness.main() diff --git a/tests/test_quadric_surfaces/results_true.dat b/tests/test_quadric_surfaces/results_true.dat index a8b0ec11b4..b90b7e71a1 100644 --- a/tests/test_quadric_surfaces/results_true.dat +++ b/tests/test_quadric_surfaces/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.013363E+00 4.701127E-03 +1.006356E+00 7.889455E-03 diff --git a/tests/test_reflective_plane/results_true.dat b/tests/test_reflective_plane/results_true.dat index 1ccd430f67..ad23f3c9ff 100644 --- a/tests/test_reflective_plane/results_true.dat +++ b/tests/test_reflective_plane/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.274474E+00 9.235910E-03 +2.284154E+00 3.063055E-03 diff --git a/tests/test_resonance_scattering/results_true.dat b/tests/test_resonance_scattering/results_true.dat index eaad05767a..43ef009398 100644 --- a/tests/test_resonance_scattering/results_true.dat +++ b/tests/test_resonance_scattering/results_true.dat @@ -1,2 +1,2 @@ k-combined: -6.842156E-02 8.481004E-04 +6.842177E-02 8.480479E-04 diff --git a/tests/test_rotation/results_true.dat b/tests/test_rotation/results_true.dat index bf062f283c..cb1493aba2 100644 --- a/tests/test_rotation/results_true.dat +++ b/tests/test_rotation/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.938252E-01 5.852966E-03 +2.993693E-01 1.470880E-03 diff --git a/tests/test_salphabeta/results_true.dat b/tests/test_salphabeta/results_true.dat index 8c3d0341c6..77bbb266f0 100644 --- a/tests/test_salphabeta/results_true.dat +++ b/tests/test_salphabeta/results_true.dat @@ -1,2 +1,2 @@ k-combined: -8.339490E-01 3.462133E-03 +8.103883E-01 1.688384E-02 diff --git a/tests/test_score_current/results_true.dat b/tests/test_score_current/results_true.dat index 4aeb9b16cb..054fa5c007 100644 --- a/tests/test_score_current/results_true.dat +++ b/tests/test_score_current/results_true.dat @@ -1 +1 @@ -57847fd9bf48a1be56d2ea891adbdd29d8277672bef65271cb021e0027aa4bcb8024ae915422abb7dfcceb7a688daf598d3a8476c5f454f45f45cca682f13502 \ No newline at end of file +5e2576ac4c3b21d6acd1b308a3683ec274051d864ea9305ad59e2c8fa071ce33f591dfc05bae2321d0f98dce1fb882b54c64d5471056cd053953fc8f7bd2af62 \ No newline at end of file diff --git a/tests/test_seed/results_true.dat b/tests/test_seed/results_true.dat index 3ef545edee..b09bdf8635 100644 --- a/tests/test_seed/results_true.dat +++ b/tests/test_seed/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.977739E-01 4.992896E-03 +2.994082E-01 3.643057E-03 diff --git a/tests/test_source/results_true.dat b/tests/test_source/results_true.dat index 0c85ba194e..2a78dd7a5a 100644 --- a/tests/test_source/results_true.dat +++ b/tests/test_source/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.971106E-01 8.263510E-03 +3.054797E-01 3.094015E-03 diff --git a/tests/test_source_file/results_true.dat b/tests/test_source_file/results_true.dat index b32c85631d..51161b3a6c 100644 --- a/tests/test_source_file/results_true.dat +++ b/tests/test_source_file/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.967126E-01 5.952317E-04 +2.996134E-01 2.910656E-03 diff --git a/tests/test_sourcepoint_latest/results_true.dat b/tests/test_sourcepoint_latest/results_true.dat index bf062f283c..cb1493aba2 100644 --- a/tests/test_sourcepoint_latest/results_true.dat +++ b/tests/test_sourcepoint_latest/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.938252E-01 5.852966E-03 +2.993693E-01 1.470880E-03 diff --git a/tests/test_sourcepoint_restart/results_true.dat b/tests/test_sourcepoint_restart/results_true.dat index a03d8885b1..8d848b4cf0 100644 --- a/tests/test_sourcepoint_restart/results_true.dat +++ b/tests/test_sourcepoint_restart/results_true.dat @@ -1,16 +1,66 @@ k-combined: -2.938252E-01 5.852966E-03 +2.993693E-01 1.470880E-03 tally 1: +1.300000E-02 +4.300000E-05 +5.553260E-03 +1.267186E-05 +2.953436E-03 +6.351136E-06 +2.295617E-03 +4.617429E-06 +6.420875E-03 +9.259556E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 1.500000E-02 -6.100000E-05 -6.140730E-03 -1.827778E-05 -5.466817E-03 -1.172967E-05 -4.386203E-03 -6.988762E-06 -7.799017E-03 -1.730653E-05 +5.100000E-05 +8.675993E-03 +1.761431E-05 +3.327517E-03 +4.194966E-06 +7.274324E-04 +2.158075E-06 +6.423659E-03 +1.003735E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.071818E-04 +9.436064E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -29,30 +79,258 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.982678E-04 -3.579243E-07 +0.000000E+00 +0.000000E+00 +4.000000E-03 +1.000000E-05 +2.838403E-04 +8.774323E-07 +-4.663243E-04 +9.976861E-07 +5.379858E-04 +2.458806E-07 +1.830193E-03 +1.871531E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.800000E-02 +7.200000E-05 +7.892468E-03 +1.531545E-05 +5.418392E-03 +6.620060E-06 +4.884861E-03 +5.600362E-06 +7.948555E-03 +1.365782E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.120582E-04 +2.773023E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.014657E-04 +3.617610E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.000000E-02 +1.020000E-04 +6.418727E-03 +9.985775E-06 +6.251711E-03 +1.053337E-05 +4.720285E-03 +7.809860E-06 +9.455548E-03 +2.200500E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.052208E-04 +1.831532E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.136748E-04 +3.765967E-07 +2.000000E-03 +4.000000E-06 +1.977646E-03 +3.911083E-06 +1.933313E-03 +3.737699E-06 +1.867746E-03 +3.488475E-06 +3.068374E-04 +9.414918E-08 +6.000000E-03 +1.400000E-05 +1.048233E-03 +1.572686E-06 +1.209182E-05 +5.233234E-09 +1.086944E-03 +4.015851E-07 +3.362867E-03 +3.082582E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.007329E-04 +9.044026E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.000000E-03 +3.000000E-06 +2.874586E-03 +2.757041E-06 +2.635561E-03 +2.337016E-06 +2.305139E-03 +1.846818E-06 +1.227985E-03 +5.657187E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.068374E-04 +9.414918E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.143635E-04 +3.774426E-07 1.000000E-03 1.000000E-06 -9.657483E-04 -9.326697E-07 -8.990046E-04 -8.082092E-07 -8.031880E-04 -6.451110E-07 -0.000000E+00 -0.000000E+00 -7.000000E-03 -1.100000E-05 --3.133071E-05 -2.698671E-06 -2.623750E-04 -1.344791E-06 --2.483720E-03 -1.649588E-06 -3.294650E-03 -2.242064E-06 +9.888336E-04 +9.777919E-07 +9.666878E-04 +9.344854E-07 +9.339333E-04 +8.722314E-07 0.000000E+00 0.000000E+00 +1.800000E-02 +6.600000E-05 +3.521497E-03 +1.124575E-05 +-1.106505E-03 +1.298962E-06 +2.307061E-03 +1.995982E-06 +7.955988E-03 +1.333038E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -61,16 +339,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.204584E-04 +2.824254E-07 1.000000E-03 1.000000E-06 -6.245980E-04 -3.901227E-07 -8.518403E-05 -7.256319E-09 --3.277224E-04 -1.074020E-07 -2.989325E-04 -8.936066E-08 +-2.015923E-04 +4.063947E-08 +-4.390408E-04 +1.927568E-07 +2.819070E-04 +7.947154E-08 +3.007329E-04 +9.044026E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -81,16 +361,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.000000E-03 -1.100000E-05 -2.955972E-03 -4.718865E-06 -2.296283E-03 -1.893728E-06 -1.374242E-03 -1.154127E-06 -4.505145E-03 -6.063009E-06 +9.000000E-03 +2.300000E-05 +8.049890E-04 +1.664654E-06 +2.892684E-03 +4.445095E-06 +5.132099E-04 +7.081387E-07 +3.678767E-03 +3.207908E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -99,98 +379,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.100000E-02 -1.230000E-04 -4.489511E-03 -2.028537E-05 -1.946623E-03 -1.610367E-06 -1.647952E-03 -1.769319E-06 -1.077022E-02 -2.893664E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.000807E-04 -2.700544E-07 +6.136210E-04 +1.882762E-07 1.000000E-03 1.000000E-06 --9.045723E-04 -8.182510E-07 -7.273765E-04 -5.290766E-07 --4.935596E-04 -2.436011E-07 -2.989325E-04 -8.936066E-08 +3.974827E-04 +1.579925E-07 +-2.630113E-04 +6.917494E-08 +-4.392258E-04 +1.929193E-07 +3.007329E-04 +9.044026E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -201,16 +401,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.900000E-02 -1.050000E-04 -2.386082E-03 -3.497107E-06 -4.555769E-03 -1.058977E-05 -1.879180E-03 -5.304853E-06 -7.792317E-03 -1.670472E-05 +5.000000E-03 +9.000000E-06 +2.095603E-03 +4.046946E-06 +2.670798E-03 +2.492128E-06 +1.379100E-04 +2.471643E-06 +2.750651E-03 +2.153957E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -219,8 +419,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.198624E-03 -3.591835E-07 +3.044879E-04 +9.271290E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.014657E-04 +3.617610E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -241,158 +451,126 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.400000E-02 +4.200000E-05 +5.756515E-03 +9.296704E-06 +1.251623E-03 +5.182413E-06 +2.207579E-03 +5.475159E-06 +5.492134E-03 +6.869563E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.182662E-04 +3.822531E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.300000E-02 +1.310000E-04 +8.875791E-03 +3.047020E-05 +5.194493E-03 +1.122408E-05 +2.565521E-03 +5.889229E-06 +9.193064E-03 +2.295619E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.539123E-03 +8.532105E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.021986E-04 +8.139623E-07 1.000000E-03 1.000000E-06 -3.327793E-04 -1.107421E-07 --3.338869E-04 -1.114804E-07 --4.070373E-04 -1.656794E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.995454E-04 -8.972747E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-02 -2.400000E-05 -5.261857E-03 -7.471221E-06 -5.280154E-03 -9.529481E-06 -5.060306E-03 -6.646531E-06 -6.894561E-03 -1.267269E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.000000E-03 -1.800000E-05 --2.025476E-04 -1.858789E-06 --6.686398E-04 -1.065456E-06 -6.586587E-04 -4.841450E-07 -2.994327E-03 -2.684002E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +9.693968E-04 +9.397302E-07 +9.095953E-04 +8.273636E-07 +8.233334E-04 +6.778780E-07 0.000000E+00 0.000000E+00 +2.800000E-02 +1.820000E-04 +8.903131E-03 +2.397214E-05 +1.010587E-02 +2.531134E-05 +4.754028E-03 +9.649119E-06 +1.378015E-02 +4.259630E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -401,116 +579,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.208028E-04 +2.826368E-07 1.000000E-03 1.000000E-06 -9.104915E-04 -8.289948E-07 -7.434921E-04 -5.527806E-07 -5.212445E-04 -2.716958E-07 -1.201894E-03 -7.222931E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.990909E-04 -3.589099E-07 -1.000000E-03 -1.000000E-06 --5.260403E-04 -2.767184E-07 --8.492233E-05 -7.211803E-09 -4.251479E-04 -1.807507E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.400000E-02 -3.540000E-04 -1.553475E-02 -6.367842E-05 -1.520994E-02 -7.741012E-05 -8.930877E-03 -2.739654E-05 -1.405733E-02 -6.608052E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.031624E-04 -4.543315E-07 -1.000000E-03 -1.000000E-06 --2.223524E-04 -4.944060E-08 --4.258391E-04 -1.813389E-07 -3.060456E-04 -9.366388E-08 -6.040285E-04 -3.648505E-07 +-4.279762E-04 +1.831637E-07 +-2.252545E-04 +5.073960E-08 +4.459901E-04 +1.989072E-07 +6.089759E-04 +3.708516E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -522,15 +602,15 @@ tally 1: 0.000000E+00 0.000000E+00 1.200000E-02 -3.400000E-05 -3.889614E-03 -6.587628E-06 -2.115055E-03 -3.167536E-06 -3.463231E-04 -5.504681E-06 -5.710120E-03 -1.043566E-05 +4.000000E-05 +4.239853E-03 +1.158537E-05 +1.052249E-03 +2.609268E-06 +1.581467E-03 +5.643069E-07 +6.112773E-03 +1.209962E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -539,8 +619,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.981320E-04 -8.888272E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -561,18 +639,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.600000E-02 -5.600000E-05 -3.164928E-03 -1.114752E-05 -3.143660E-03 -3.198813E-06 -1.287643E-03 -7.268133E-07 -8.988217E-03 -1.652319E-05 0.000000E+00 0.000000E+00 +3.800000E-02 +2.980000E-04 +1.590359E-02 +8.465362E-05 +1.095039E-02 +3.846682E-05 +8.674652E-03 +2.116226E-05 +1.953871E-02 +7.808840E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -581,16 +659,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.000000E-03 -1.000000E-06 -9.617800E-04 -9.250208E-07 -8.875312E-04 -7.877116E-07 -7.814962E-04 -6.107364E-07 -2.981320E-04 -8.888272E-08 +6.098660E-04 +1.860035E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -601,676 +671,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.000000E-03 -1.400000E-05 -2.562256E-03 -5.938938E-06 -3.215552E-03 -2.429308E-06 -2.809239E-03 -2.320949E-06 -2.396627E-03 -1.615072E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.015597E-04 -1.809401E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.100000E-02 -2.150000E-04 -1.898034E-02 -7.784899E-05 -1.264567E-02 -4.010917E-05 -8.079721E-03 -1.493258E-05 -1.529918E-02 -5.419874E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.966100E-04 -2.679708E-07 -1.000000E-03 -1.000000E-06 -1.982438E-04 -3.930062E-08 --4.410491E-04 -1.945243E-07 --2.778880E-04 -7.722173E-08 -8.967976E-04 -8.042459E-07 -1.000000E-03 -1.000000E-06 -9.755714E-04 -9.517396E-07 -9.276094E-04 -8.604592E-07 -8.578678E-04 -7.359371E-07 -0.000000E+00 -0.000000E+00 -1.600000E-02 -5.400000E-05 -3.332422E-03 -1.335735E-05 -4.814665E-03 -5.403574E-06 -8.177949E-04 -2.462505E-06 -7.189603E-03 -1.112704E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.196133E-03 -7.153669E-07 -2.000000E-03 -2.000000E-06 -9.961345E-04 -5.766569E-07 --1.350146E-04 -1.888753E-07 --5.756575E-04 -1.828150E-07 -2.089751E-03 -2.580978E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.500000E-02 -5.900000E-05 -3.574847E-03 -7.661052E-06 -2.411448E-03 -4.875571E-06 --4.456628E-04 -3.620849E-06 -5.991484E-03 -9.329446E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.953980E-04 -4.450119E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.402987E-03 -2.352531E-06 -4.000000E-03 -6.000000E-06 -3.730318E-03 -5.177826E-06 -3.229766E-03 -3.845053E-06 -2.569348E-03 -2.470333E-06 -0.000000E+00 -0.000000E+00 -2.200000E-02 -1.140000E-04 -1.157227E-02 -3.152553E-05 -5.993470E-03 -9.940306E-06 -6.549523E-03 -9.865076E-06 -8.969741E-03 -1.911355E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.980234E-04 -4.482705E-07 -1.000000E-03 -1.000000E-06 -4.538235E-04 -2.059558E-07 --1.910664E-04 -3.650635E-08 --4.470663E-04 -1.998683E-07 -6.040285E-04 -3.648505E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.200000E-02 -1.020000E-04 -4.042627E-03 -9.476178E-06 -2.881083E-03 -5.928110E-06 -3.065234E-03 -4.444894E-06 -1.168502E-02 -2.989919E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.020143E-04 -9.121262E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.100000E-02 -1.250000E-04 -9.991177E-03 -3.139502E-05 -2.556450E-03 -1.824566E-06 -3.329841E-03 -5.163205E-06 -9.576327E-03 -2.773298E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.959971E-04 -4.463253E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.200651E-03 -8.987598E-07 -1.000000E-03 -1.000000E-06 -9.522533E-04 -9.067863E-07 -8.601795E-04 -7.399088E-07 -7.303458E-04 -5.334049E-07 -3.020143E-04 -9.121262E-08 -2.100000E-02 -1.150000E-04 -1.242804E-03 -3.619176E-06 -1.867552E-03 -1.359691E-06 -2.306130E-03 -5.045915E-06 -9.000544E-03 -2.094585E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.989325E-04 -8.936066E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.990909E-04 -3.589099E-07 -1.000000E-03 -1.000000E-06 -9.669322E-04 -9.349578E-07 -9.024367E-04 -8.143920E-07 -8.097037E-04 -6.556200E-07 -0.000000E+00 -0.000000E+00 -1.800000E-02 -7.600000E-05 -7.900751E-03 -1.937232E-05 -5.101355E-03 -8.800793E-06 -4.128814E-03 -6.665133E-06 -7.790979E-03 -1.525891E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.986793E-04 -1.792085E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.020143E-04 -9.121262E-08 -1.000000E-03 -1.000000E-06 -9.912755E-04 -9.826271E-07 -9.739406E-04 -9.485603E-07 -9.482220E-04 -8.991250E-07 -0.000000E+00 -0.000000E+00 -2.200000E-02 -1.260000E-04 -7.579348E-03 -2.124946E-05 -6.787172E-03 -1.874543E-05 -3.914660E-03 -8.731250E-06 -1.167769E-02 -3.750609E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.986793E-04 -1.792085E-07 -2.000000E-03 -2.000000E-06 -3.631413E-04 -1.401984E-06 -1.102976E-03 -1.004698E-06 -1.304621E-03 -1.083698E-06 -2.993714E-03 -2.324726E-06 -5.000000E-03 -7.000000E-06 -4.239270E-03 -4.739399E-06 -2.968259E-03 -2.239642E-06 -1.575924E-03 -1.063419E-06 -2.989325E-04 -8.936066E-08 -2.700000E-02 -1.610000E-04 -8.295783E-03 -1.670306E-05 -5.150584E-03 -1.540799E-05 -2.687614E-03 -7.461732E-06 -1.197674E-02 -3.010342E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.195131E-03 -5.358064E-07 -1.000000E-03 -1.000000E-06 --7.791468E-04 -6.070697E-07 -4.106046E-04 -1.685961E-07 --1.377092E-05 -1.896382E-10 -1.803453E-03 -1.268084E-06 -2.000000E-03 -2.000000E-06 -1.885433E-03 -1.778733E-06 -1.668099E-03 -1.401699E-06 -1.370094E-03 -9.733671E-07 -2.995454E-04 -8.972747E-08 -2.500000E-02 -1.690000E-04 -7.306400E-03 -1.879755E-05 -5.910494E-03 -7.423636E-06 -4.158757E-03 -8.004612E-06 -1.136957E-02 -3.132992E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-03 -1.000000E-06 --1.294470E-04 -1.675653E-08 --4.748652E-04 -2.254970E-07 -1.887478E-04 -3.562574E-08 -5.990909E-04 -3.589099E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.900000E-02 -1.270000E-04 -7.644698E-03 -2.593978E-05 -4.291971E-03 -7.952406E-06 -1.754591E-03 -1.626852E-06 -8.970335E-03 -2.698525E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.981320E-04 -8.888272E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.100000E-02 -9.900000E-05 -9.175459E-03 -3.081816E-05 -6.537841E-03 -1.693021E-05 -3.371815E-03 -6.901863E-06 -1.109875E-02 -2.912624E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.991339E-04 -8.948108E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.100000E-02 -3.150000E-04 -7.491923E-03 -2.563522E-05 -4.484513E-03 -1.087903E-05 -5.244220E-03 -1.284762E-05 -1.256302E-02 -4.702441E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.972659E-04 -1.783638E-07 -1.000000E-03 -1.000000E-06 -1.684904E-04 -2.838901E-08 --4.574165E-04 -2.092298E-07 --2.407774E-04 -5.797376E-08 -1.503908E-03 -1.178356E-06 -2.000000E-03 -2.000000E-06 -1.675714E-03 -1.446154E-06 -1.169231E-03 -9.498292E-07 -6.921651E-04 -8.538185E-07 -3.020143E-04 -9.121262E-08 -2.000000E-02 -8.600000E-05 -9.188471E-03 -2.173815E-05 -1.860120E-03 -4.452062E-06 -2.429984E-03 -2.502873E-06 -1.048716E-02 -2.272644E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.974105E-04 -4.471701E-07 -2.000000E-03 -2.000000E-06 -1.794485E-03 -1.610365E-06 -1.415547E-03 -1.003887E-06 -9.217303E-04 -4.304779E-07 -0.000000E+00 -0.000000E+00 -1.800000E-02 -7.400000E-05 -3.179742E-03 -4.790936E-06 --6.355126E-04 -5.202988E-06 -1.151706E-03 -3.152245E-06 -7.489949E-03 -1.301150E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-03 -1.000000E-06 -6.585165E-04 -4.336439E-07 -1.504659E-04 -2.263998E-08 --2.738705E-04 -7.500507E-08 -1.196133E-03 -7.153669E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1282,15 +682,15 @@ tally 1: 0.000000E+00 0.000000E+00 3.000000E-02 -2.060000E-04 -1.541898E-02 -5.863846E-05 -9.395114E-03 -2.654761E-05 -8.661018E-03 -2.160642E-05 -1.049373E-02 -2.404605E-05 +2.100000E-04 +1.396274E-02 +5.377392E-05 +7.263833E-03 +1.550401E-05 +2.406305E-03 +2.774873E-06 +1.067173E-02 +2.834689E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1299,8 +699,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.396224E-03 -1.614108E-06 +6.159705E-04 +1.897125E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1309,28 +709,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.600725E-03 -5.038163E-06 -4.000000E-03 -8.000000E-06 -3.781504E-03 -7.153441E-06 -3.368106E-03 -5.701400E-06 -2.804131E-03 -4.034404E-06 -2.989325E-04 -8.936066E-08 -1.900000E-02 -7.900000E-05 -6.408930E-03 -1.103823E-05 -3.228416E-03 -7.109320E-06 -4.961615E-04 -2.423816E-06 -1.079243E-02 -2.644603E-05 +6.089759E-04 +3.708516E-07 +1.000000E-03 +1.000000E-06 +-3.845548E-04 +1.478824E-07 +-2.781765E-04 +7.738214E-08 +4.346600E-04 +1.889293E-07 +0.000000E+00 +0.000000E+00 +3.100000E-02 +2.010000E-04 +5.656932E-03 +1.902755E-05 +4.255795E-04 +5.923041E-06 +-1.665451E-03 +3.618806E-06 +1.254348E-02 +3.367259E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1339,8 +739,528 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.020143E-04 -9.121262E-08 +6.089759E-04 +3.708516E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.007329E-04 +9.044026E-08 +1.000000E-03 +1.000000E-06 +9.418397E-04 +8.870620E-07 +8.305930E-04 +6.898847E-07 +6.759159E-04 +4.568623E-07 +0.000000E+00 +0.000000E+00 +1.700000E-02 +1.070000E-04 +9.563321E-03 +3.797495E-05 +3.872248E-03 +6.913143E-06 +1.851726E-03 +2.042684E-06 +7.032800E-03 +1.543729E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.091331E-04 +9.556328E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.800000E-02 +3.300000E-04 +1.666359E-02 +6.918668E-05 +5.166835E-03 +1.583235E-05 +6.193613E-03 +1.014626E-05 +1.654613E-02 +6.758065E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.218842E-03 +5.568551E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.222651E-03 +7.474483E-07 +2.000000E-03 +2.000000E-06 +1.859309E-03 +1.730661E-06 +1.595992E-03 +1.290291E-06 +1.243306E-03 +8.262391E-07 +0.000000E+00 +0.000000E+00 +3.200000E-02 +2.140000E-04 +1.125786E-02 +3.535152E-05 +6.340891E-03 +1.186849E-05 +-6.739003E-04 +6.238152E-06 +1.194483E-02 +3.174072E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.528427E-03 +1.032143E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.091331E-04 +9.556328E-08 +1.000000E-03 +1.000000E-06 +8.883829E-04 +7.892241E-07 +6.838361E-04 +4.676319E-07 +4.202586E-04 +1.766173E-07 +0.000000E+00 +0.000000E+00 +2.000000E-02 +1.060000E-04 +6.707526E-03 +2.735840E-05 +6.937679E-03 +1.338587E-05 +5.832553E-03 +1.828962E-05 +1.101850E-02 +3.215320E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.105988E-04 +4.573243E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.227694E-03 +9.417032E-07 +1.000000E-03 +1.000000E-06 +9.408116E-04 +8.851265E-07 +8.276898E-04 +6.850703E-07 +6.706258E-04 +4.497390E-07 +0.000000E+00 +0.000000E+00 +1.800000E-02 +7.800000E-05 +2.843265E-03 +6.035154E-06 +4.322434E-03 +7.469456E-06 +2.900345E-03 +4.663845E-06 +7.631460E-03 +1.236685E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.007329E-04 +9.044026E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.000000E-02 +9.200000E-05 +6.856783E-03 +1.381342E-05 +2.931050E-03 +7.384807E-06 +1.856596E-03 +2.302567E-06 +1.130923E-02 +3.279819E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +2.509363E-04 +6.296901E-08 +-4.055465E-04 +1.644679E-07 +-3.369014E-04 +1.135025E-07 +6.182662E-04 +3.822531E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.091331E-04 +9.556328E-08 +2.900000E-02 +2.010000E-04 +1.040068E-02 +4.442598E-05 +7.909288E-03 +1.634388E-05 +2.600276E-03 +1.084582E-05 +1.160235E-02 +3.244276E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.227694E-03 +9.417032E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.091331E-04 +9.556328E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.091331E-04 +9.556328E-08 +2.900000E-02 +1.890000E-04 +3.796494E-03 +2.573465E-05 +5.901410E-03 +9.723225E-06 +2.069453E-03 +9.510548E-06 +1.438173E-02 +4.416319E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.136748E-04 +3.765967E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.400000E-02 +1.240000E-04 +6.672638E-03 +1.840846E-05 +4.370801E-03 +7.557992E-06 +4.585753E-03 +1.441383E-05 +1.162351E-02 +2.791423E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.089759E-04 +3.708516E-07 +1.000000E-03 +1.000000E-06 +-8.175500E-04 +6.683879E-07 +5.025819E-04 +2.525886E-07 +-1.397764E-04 +1.953744E-08 +3.071818E-04 +9.436064E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.700000E-02 +2.910000E-04 +8.304483E-03 +2.250088E-05 +7.798128E-03 +2.325505E-05 +6.917154E-03 +2.136255E-05 +1.649875E-02 +5.805120E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.071818E-04 +9.436064E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.500000E-02 +2.550000E-04 +1.934687E-03 +1.279246E-05 +1.742063E-03 +9.283511E-06 +5.580823E-03 +1.402955E-05 +1.465296E-02 +4.425100E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.535220E-03 +1.225842E-06 +2.000000E-03 +2.000000E-06 +1.954328E-03 +1.909945E-06 +1.864917E-03 +1.741066E-06 +1.735530E-03 +1.513893E-06 +0.000000E+00 +0.000000E+00 +3.100000E-02 +2.150000E-04 +8.788723E-03 +4.052825E-05 +7.277307E-03 +2.646372E-05 +4.235689E-03 +1.237842E-05 +1.375310E-02 +4.363256E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.068374E-04 +9.414918E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.143635E-04 +3.774426E-07 +1.000000E-03 +1.000000E-06 +9.752141E-04 +9.510426E-07 +9.265639E-04 +8.585207E-07 +8.558543E-04 +7.324865E-07 +0.000000E+00 +0.000000E+00 +2.000000E-02 +9.400000E-05 +5.446779E-03 +8.175340E-06 +2.952745E-03 +6.944505E-06 +9.137774E-04 +1.227091E-06 +7.662475E-03 +1.309219E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.225836E-03 +5.668425E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1363,14 +1283,14 @@ tally 1: 0.000000E+00 2.800000E-02 1.660000E-04 -1.585913E-02 -6.353606E-05 -1.000709E-02 -2.500587E-05 -6.237459E-03 -8.453167E-06 -1.108880E-02 -2.616665E-05 +7.579645E-03 +3.038397E-05 +6.894753E-03 +2.399109E-05 +5.371715E-03 +1.603319E-05 +1.344654E-02 +4.055142E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1379,8 +1299,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.194532E-03 -7.134552E-07 +3.091331E-04 +9.556328E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1401,16 +1321,616 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.400000E-02 +1.300000E-04 +4.257114E-03 +3.224130E-05 +8.813774E-03 +2.583867E-05 +4.664136E-03 +1.410529E-05 +1.287730E-02 +3.681324E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +-6.367370E-04 +4.054341E-07 +1.081511E-04 +1.169666E-08 +3.097184E-04 +9.592546E-08 +6.182662E-04 +3.822531E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.400000E-02 +1.300000E-04 +1.378482E-02 +5.592497E-05 +9.034738E-03 +2.624250E-05 +5.658518E-03 +1.317424E-05 +1.068557E-02 +2.727026E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.091331E-04 +9.556328E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.182662E-04 +3.822531E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.200000E-02 +2.260000E-04 +6.941116E-03 +2.215550E-05 +6.749352E-03 +1.648121E-05 +5.910808E-03 +1.357613E-05 +1.528788E-02 +5.372220E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.136210E-04 +1.882762E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.900000E-02 +2.030000E-04 +4.508769E-03 +3.192756E-05 +4.194184E-03 +7.918516E-06 +2.186680E-03 +9.265062E-06 +1.406557E-02 +4.964272E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.518169E-03 +1.003675E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.300000E-02 +1.410000E-04 +7.122769E-03 +1.478437E-05 +4.717800E-03 +1.137509E-05 +2.766174E-03 +2.862748E-06 +9.770364E-03 +2.547043E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.007329E-04 +9.044026E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.000000E-02 +9.400000E-05 +-2.546403E-03 +8.587879E-06 +3.329285E-04 +1.032543E-06 +-6.526073E-04 +5.693572E-06 +7.947562E-03 +1.421771E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.091331E-04 +9.556328E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.273993E-04 +8.600695E-07 +1.000000E-03 +1.000000E-06 +9.887237E-04 +9.775745E-07 +9.663618E-04 +9.338551E-07 +9.332922E-04 +8.710343E-07 +0.000000E+00 +0.000000E+00 +1.000000E-02 +3.400000E-05 +2.083696E-03 +6.707681E-06 +2.664177E-03 +4.483757E-06 +-3.543315E-04 +7.233059E-07 +3.654309E-03 +3.704263E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.007329E-04 +9.044026E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.700000E-02 +7.500000E-05 +7.751840E-03 +1.439369E-05 +5.032178E-03 +1.282123E-05 +5.077992E-03 +8.054934E-06 +7.339781E-03 +1.254543E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.068374E-04 +9.414918E-08 +1.000000E-03 +1.000000E-06 +-5.691245E-04 +3.239027E-07 +-1.414588E-05 +2.001060E-10 +3.928343E-04 +1.543188E-07 +6.182662E-04 +3.822531E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.000000E-02 +9.000000E-05 +4.292093E-03 +1.162566E-05 +1.911635E-03 +6.462803E-06 +7.144938E-04 +3.566046E-06 +8.845087E-03 +1.787718E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.098660E-04 +1.860035E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +7.900000E-05 +7.074706E-03 +1.339988E-05 +3.301242E-03 +3.627546E-06 +3.676901E-03 +5.025480E-06 +7.044700E-03 +1.063679E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.211332E-03 +9.095256E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.068374E-04 +9.414918E-08 +1.000000E-03 +1.000000E-06 +9.924008E-04 +9.848594E-07 +9.772891E-04 +9.550940E-07 +9.548370E-04 +9.117137E-07 +0.000000E+00 +0.000000E+00 +1.200000E-02 +4.200000E-05 +1.994203E-03 +9.474986E-06 +4.797034E-03 +7.209992E-06 +7.461820E-04 +7.384105E-07 +5.186835E-03 +7.184830E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.044879E-04 +9.271290E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.100000E-02 +2.070000E-04 +1.654377E-02 +5.944129E-05 +1.297328E-02 +4.003873E-05 +7.211206E-03 +1.234310E-05 +1.739706E-02 +6.870884E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.086475E-04 +4.561217E-07 +2.000000E-03 +4.000000E-06 +-1.560749E-03 +2.435936E-06 +8.504262E-04 +7.232247E-07 +-1.266477E-04 +1.603963E-08 +2.148895E-03 +2.355633E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.068374E-04 +9.414918E-08 +2.100000E-02 +9.900000E-05 +8.524679E-03 +1.919497E-05 +5.830060E-03 +1.195983E-05 +4.439133E-03 +4.446488E-06 +8.535001E-03 +1.828799E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.044879E-04 +9.271290E-08 +3.000000E-03 +5.000000E-06 +3.626106E-04 +7.014271E-07 +2.355907E-04 +3.451505E-07 +1.623342E-03 +1.603144E-06 +3.056692E-03 +2.433689E-06 +3.000000E-03 +5.000000E-06 +2.377207E-03 +2.907996E-06 +1.593038E-03 +1.320423E-06 +1.150471E-03 +8.926966E-07 +0.000000E+00 +0.000000E+00 +1.700000E-02 +6.300000E-05 +8.432455E-03 +1.718164E-05 +2.701919E-03 +5.016066E-06 +2.357556E-03 +3.687074E-06 +7.025349E-03 +1.109437E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.052208E-04 +1.831532E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.215453E-04 +8.492458E-07 +1.000000E-03 +1.000000E-06 +9.959310E-04 +9.918786E-07 +9.878179E-04 +9.757842E-07 +9.757102E-04 +9.520103E-07 +0.000000E+00 +0.000000E+00 +1.100000E-02 +4.900000E-05 +5.546222E-03 +1.139525E-05 +1.289839E-03 +2.123481E-06 +1.011230E-03 +1.426586E-06 +5.215344E-03 +8.818614E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.136210E-04 +1.882762E-07 +1.000000E-03 +1.000000E-06 +3.587682E-04 +1.287146E-07 +-3.069281E-04 +9.420486E-08 +-4.227055E-04 +1.786799E-07 +1.228132E-03 +9.505098E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 1.800000E-02 -8.200000E-05 -8.780691E-03 -2.358452E-05 -1.816210E-03 -1.543496E-06 -1.880620E-03 -1.310997E-06 -7.183087E-03 -1.306174E-05 +8.600000E-05 +4.110494E-03 +1.042545E-05 +2.304908E-03 +4.602048E-06 +1.132856E-03 +1.141229E-06 +9.161625E-03 +2.374582E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1419,8 +1939,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.995454E-04 -8.972747E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1429,444 +1947,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.981320E-04 -8.888272E-08 -1.000000E-03 -1.000000E-06 -1.324970E-04 -1.755546E-08 --4.736668E-04 -2.243602E-07 --1.929304E-04 -3.722214E-08 -0.000000E+00 -0.000000E+00 -3.300000E-02 -2.390000E-04 -9.004426E-03 -3.202491E-05 -8.390638E-03 -2.225399E-05 -7.671245E-03 -2.173426E-05 -1.526879E-02 -4.932937E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.196357E-03 -5.372737E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.990909E-04 -3.589099E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.200000E-02 -4.600000E-05 -1.118075E-03 -5.126429E-06 -1.131273E-04 -9.269523E-07 --4.997208E-04 -2.049174E-07 -4.186564E-03 -4.464187E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.981320E-04 -8.888272E-08 -1.000000E-03 -1.000000E-06 -1.681598E-04 -2.827772E-08 --4.575834E-04 -2.093826E-07 --2.403518E-04 -5.776898E-08 -2.093736E-03 -3.310679E-06 -3.000000E-03 -5.000000E-06 -2.887280E-03 -4.581616E-06 -2.669986E-03 -3.835050E-06 -2.363696E-03 -2.915580E-06 -0.000000E+00 -0.000000E+00 -1.500000E-02 -5.900000E-05 -3.685307E-03 -1.268655E-05 -5.360583E-03 -1.364253E-05 -1.590442E-03 -2.811111E-06 -7.793073E-03 -1.277581E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.981320E-04 -8.888272E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.000000E-03 -1.300000E-05 -3.106624E-03 -9.484025E-06 -4.505496E-03 -5.432355E-06 -2.355878E-03 -2.623009E-06 -2.690622E-03 -1.877213E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.989325E-04 -8.936066E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.195730E-03 -1.429770E-06 -1.000000E-03 -1.000000E-06 -9.838946E-04 -9.680486E-07 -9.520729E-04 -9.064428E-07 -9.053026E-04 -8.195728E-07 -0.000000E+00 -0.000000E+00 -2.500000E-02 -1.390000E-04 -9.492341E-03 -2.448502E-05 -3.248123E-03 -2.577618E-06 -1.941360E-03 -2.063052E-06 -1.137644E-02 -3.026289E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.989325E-04 -8.936066E-08 -1.000000E-03 -1.000000E-06 --6.411363E-05 -4.110558E-09 --4.938342E-04 -2.438722E-07 -9.551160E-05 -9.122465E-09 -2.684602E-03 -5.778221E-06 -2.000000E-03 -2.000000E-06 -1.975537E-03 -1.951439E-06 -1.927159E-03 -1.857550E-06 -1.855946E-03 -1.724502E-06 -0.000000E+00 -0.000000E+00 -2.100000E-02 -9.500000E-05 -3.106757E-03 -7.530480E-06 -2.693211E-04 -3.828657E-06 -1.317058E-03 -3.136131E-06 -1.017555E-02 -2.236513E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.990909E-04 -3.589099E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.400000E-02 -5.400000E-05 -5.944397E-03 -1.655215E-05 -1.726828E-03 -5.006812E-06 --1.657930E-03 -4.261204E-06 -5.696729E-03 -8.356388E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.989325E-04 -8.936066E-08 -1.000000E-03 -1.000000E-06 -6.866979E-04 -4.715540E-07 -2.073310E-04 -4.298614E-08 --2.205090E-04 -4.862422E-08 -1.496493E-03 -1.164240E-06 -1.000000E-03 -1.000000E-06 --9.623002E-04 -9.260217E-07 -8.890326E-04 -7.903789E-07 --7.843269E-04 -6.151687E-07 -0.000000E+00 -0.000000E+00 -1.000000E-02 -3.600000E-05 -4.361597E-03 -7.003332E-06 -1.326662E-03 -8.159669E-07 --1.380710E-04 -7.198742E-08 -4.786948E-03 -7.321215E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.981320E-04 -8.888272E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.900000E-02 -3.870000E-04 -1.427389E-02 -8.090929E-05 -8.826225E-03 -2.660607E-05 -4.117139E-03 -7.490443E-06 -2.216995E-02 -1.059100E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.198182E-03 -1.435639E-06 -1.000000E-03 -1.000000E-06 --2.499079E-04 -6.245395E-08 --4.063191E-04 -1.650952E-07 -3.358425E-04 -1.127902E-07 -8.943961E-04 -7.999445E-07 -1.000000E-03 -1.000000E-06 -9.401483E-04 -8.838788E-07 -8.258183E-04 -6.819758E-07 -6.672205E-04 -4.451832E-07 -0.000000E+00 -0.000000E+00 -3.700000E-02 -3.250000E-04 -5.676482E-03 -1.840790E-05 -7.927554E-03 -2.448188E-05 -2.237603E-03 -2.700519E-06 -1.646685E-02 -6.188122E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.800372E-03 -1.258824E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.798328E-03 -1.615735E-06 -4.000000E-03 -6.000000E-06 -3.770169E-03 -5.325612E-06 -3.332954E-03 -4.161563E-06 -2.730616E-03 -2.811353E-06 -0.000000E+00 -0.000000E+00 -2.000000E-02 -9.600000E-05 -5.093280E-03 -1.425830E-05 -2.794340E-03 -1.663793E-05 -4.103789E-03 -6.867085E-06 -8.700108E-03 -1.850749E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.029611E-04 -4.542111E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1882,15 +1962,15 @@ tally 1: 0.000000E+00 0.000000E+00 6.000000E-03 -1.400000E-05 -4.561928E-03 -8.999493E-06 -2.729392E-03 -4.924575E-06 -1.659472E-03 -3.263660E-06 -2.095047E-03 -1.698704E-06 +1.000000E-05 +7.480298E-04 +2.696134E-07 +1.010259E-03 +2.525363E-06 +2.404343E-03 +2.960244E-06 +5.213048E-03 +8.232507E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1899,6 +1979,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.007329E-04 +9.044026E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1909,28 +1991,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.962641E-04 -3.555309E-07 -1.000000E-03 -1.000000E-06 -9.213015E-04 -8.487964E-07 -7.731946E-04 -5.978298E-07 -5.730412E-04 -3.283762E-07 0.000000E+00 0.000000E+00 -1.000000E-02 -2.600000E-05 -5.481204E-03 -1.421903E-05 -2.241220E-03 -8.639111E-06 -2.375771E-03 -4.453036E-06 -4.791983E-03 -5.914853E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1939,408 +2001,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.193329E-03 -8.893051E-07 -1.000000E-03 -1.000000E-06 -8.827246E-04 -7.792028E-07 -6.688042E-04 -4.472990E-07 -3.954668E-04 -1.563940E-07 -2.989325E-04 -8.936066E-08 -9.000000E-03 -2.100000E-05 -4.651230E-03 -4.741702E-06 -2.150788E-03 -1.086619E-06 -2.092494E-03 -1.840170E-06 -4.800173E-03 -5.412689E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.040285E-04 -3.648505E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.000000E-03 -3.000000E-06 -7.652902E-05 -1.571253E-06 -8.568788E-04 -1.094232E-06 --7.206134E-04 -4.649382E-07 -9.000807E-04 -2.700544E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-03 -1.000000E-06 -9.101753E-04 -8.284190E-07 -7.426285E-04 -5.514972E-07 -5.197534E-04 -2.701436E-07 -2.989325E-04 -8.936066E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.989325E-04 -8.936066E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.400000E-02 -4.600000E-05 -6.259455E-03 -1.284922E-05 -2.076794E-03 -2.552816E-06 -6.278684E-04 -2.094249E-06 -6.584175E-03 -1.056233E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.990909E-04 -3.589099E-07 -1.000000E-03 -1.000000E-06 -6.257846E-04 -3.916063E-07 -8.740950E-05 -7.640421E-09 --3.260239E-04 -1.062916E-07 -5.962641E-04 -3.555309E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.500000E-02 -7.500000E-05 -4.663045E-03 -1.215939E-05 -4.830409E-03 -8.682038E-06 -3.887884E-03 -4.756968E-06 -8.095588E-03 -1.984557E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.995454E-04 -8.972747E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.958095E-04 -4.452583E-07 -2.000000E-03 -2.000000E-06 -1.906393E-03 -1.818122E-06 -1.727184E-03 -1.499401E-06 -1.477537E-03 -1.118575E-06 -0.000000E+00 -0.000000E+00 -5.000000E-03 -7.000000E-06 -1.973804E-03 -3.852738E-06 -1.299550E-03 -2.189071E-06 -2.037626E-03 -1.354116E-06 -2.097904E-03 -9.889505E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-03 -1.000000E-06 --9.618754E-04 -9.252042E-07 -8.878063E-04 -7.882000E-07 --7.820147E-04 -6.115471E-07 -2.995454E-04 -8.972747E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.995454E-04 -8.972747E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.400000E-02 -6.600000E-05 -2.900274E-03 -2.656005E-06 --1.326535E-04 -7.657613E-07 -2.692899E-03 -2.374742E-06 -7.492257E-03 -1.481323E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.976775E-04 -1.786102E-07 -1.000000E-03 -1.000000E-06 --5.336276E-04 -2.847584E-07 --7.286246E-05 -5.308937E-09 -4.205541E-04 -1.768657E-07 -6.040285E-04 -3.648505E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.100000E-02 -9.500000E-05 -1.100185E-02 -2.519922E-05 -5.296622E-03 -6.181448E-06 -4.290056E-03 -6.437184E-06 -9.878051E-03 -2.067153E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.981320E-04 -8.888272E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.494265E-03 -8.042497E-07 -3.000000E-03 -3.000000E-06 -6.851013E-04 -1.571044E-06 -8.565666E-04 -1.043968E-06 -7.365013E-04 -1.098388E-06 -0.000000E+00 -0.000000E+00 3.000000E-03 5.000000E-06 -1.355880E-03 -1.020443E-06 -1.249756E-03 -8.001666E-07 -1.419322E-03 -1.107335E-06 -2.397825E-03 -2.688348E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.989325E-04 -8.936066E-08 +7.647871E-04 +1.000926E-06 +8.702327E-05 +1.587846E-06 +1.118717E-03 +8.177417E-07 +2.147037E-03 +1.226733E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2401,12 +2071,342 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.600000E-02 +6.200000E-05 +9.988601E-03 +3.022832E-05 +6.166188E-03 +1.173350E-05 +3.417134E-03 +5.700622E-06 +7.649352E-03 +1.360625E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.136748E-04 +3.765967E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-02 +3.400000E-05 +3.889110E-03 +7.557500E-06 +1.015827E-04 +2.744147E-06 +7.497308E-04 +3.373523E-06 +4.583807E-03 +6.264955E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.052208E-04 +1.831532E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.182662E-04 +3.822531E-07 +2.000000E-03 +4.000000E-06 +1.798872E-03 +3.235939E-06 +1.446227E-03 +2.091573E-06 +1.026515E-03 +1.053733E-06 +3.091331E-04 +9.556328E-08 +2.000000E-03 +2.000000E-06 +1.796026E-03 +1.613093E-06 +1.419639E-03 +1.009421E-06 +9.284786E-04 +4.359755E-07 +6.113253E-04 +1.868621E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +8.755578E-04 +7.666014E-07 +6.499021E-04 +4.223727E-07 +3.646728E-04 +1.329863E-07 +3.044879E-04 +9.271290E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.000000E-03 +1.100000E-05 +7.911817E-04 +5.000480E-06 +3.670154E-03 +5.136246E-06 +7.963899E-04 +3.142130E-06 +2.757965E-03 +1.792319E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +9.128685E-04 +8.333290E-07 +7.499935E-04 +5.624902E-07 +5.324967E-04 +2.835528E-07 +3.068374E-04 +9.414918E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.000000E-03 +2.000000E-06 +-3.575073E-05 +3.447056E-08 +-9.482942E-04 +4.497282E-07 +4.906190E-05 +7.285661E-08 +6.159705E-04 +1.897125E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.000000E-03 +5.000000E-06 +1.728228E-03 +1.868156E-06 +1.372668E-04 +1.772598E-07 +-7.147632E-04 +2.712801E-07 +1.225291E-03 +5.607755E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.044879E-04 +9.271290E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 tally 2: -5.712389E-01 -6.528048E-02 -6.215724E-01 -7.729703E-02 -3.619520E+00 -2.620927E+00 -4.040217E+01 -3.265313E+02 +5.688123E-01 +6.473815E-02 +6.189326E-01 +7.665427E-02 +3.614785E+00 +2.614396E+00 +4.026586E+01 +3.243814E+02 diff --git a/tests/test_statepoint_batch/results_true.dat b/tests/test_statepoint_batch/results_true.dat index 259b9fb1eb..3ebd5cfff0 100644 --- a/tests/test_statepoint_batch/results_true.dat +++ b/tests/test_statepoint_batch/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.896118E-01 5.112161E-03 +2.985054E-01 9.345354E-04 diff --git a/tests/test_statepoint_interval/results_true.dat b/tests/test_statepoint_interval/results_true.dat index bf062f283c..cb1493aba2 100644 --- a/tests/test_statepoint_interval/results_true.dat +++ b/tests/test_statepoint_interval/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.938252E-01 5.852966E-03 +2.993693E-01 1.470880E-03 diff --git a/tests/test_statepoint_restart/results_true.dat b/tests/test_statepoint_restart/results_true.dat index a03d8885b1..8d848b4cf0 100644 --- a/tests/test_statepoint_restart/results_true.dat +++ b/tests/test_statepoint_restart/results_true.dat @@ -1,16 +1,66 @@ k-combined: -2.938252E-01 5.852966E-03 +2.993693E-01 1.470880E-03 tally 1: +1.300000E-02 +4.300000E-05 +5.553260E-03 +1.267186E-05 +2.953436E-03 +6.351136E-06 +2.295617E-03 +4.617429E-06 +6.420875E-03 +9.259556E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 1.500000E-02 -6.100000E-05 -6.140730E-03 -1.827778E-05 -5.466817E-03 -1.172967E-05 -4.386203E-03 -6.988762E-06 -7.799017E-03 -1.730653E-05 +5.100000E-05 +8.675993E-03 +1.761431E-05 +3.327517E-03 +4.194966E-06 +7.274324E-04 +2.158075E-06 +6.423659E-03 +1.003735E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.071818E-04 +9.436064E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -29,30 +79,258 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.982678E-04 -3.579243E-07 +0.000000E+00 +0.000000E+00 +4.000000E-03 +1.000000E-05 +2.838403E-04 +8.774323E-07 +-4.663243E-04 +9.976861E-07 +5.379858E-04 +2.458806E-07 +1.830193E-03 +1.871531E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.800000E-02 +7.200000E-05 +7.892468E-03 +1.531545E-05 +5.418392E-03 +6.620060E-06 +4.884861E-03 +5.600362E-06 +7.948555E-03 +1.365782E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.120582E-04 +2.773023E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.014657E-04 +3.617610E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.000000E-02 +1.020000E-04 +6.418727E-03 +9.985775E-06 +6.251711E-03 +1.053337E-05 +4.720285E-03 +7.809860E-06 +9.455548E-03 +2.200500E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.052208E-04 +1.831532E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.136748E-04 +3.765967E-07 +2.000000E-03 +4.000000E-06 +1.977646E-03 +3.911083E-06 +1.933313E-03 +3.737699E-06 +1.867746E-03 +3.488475E-06 +3.068374E-04 +9.414918E-08 +6.000000E-03 +1.400000E-05 +1.048233E-03 +1.572686E-06 +1.209182E-05 +5.233234E-09 +1.086944E-03 +4.015851E-07 +3.362867E-03 +3.082582E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.007329E-04 +9.044026E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.000000E-03 +3.000000E-06 +2.874586E-03 +2.757041E-06 +2.635561E-03 +2.337016E-06 +2.305139E-03 +1.846818E-06 +1.227985E-03 +5.657187E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.068374E-04 +9.414918E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.143635E-04 +3.774426E-07 1.000000E-03 1.000000E-06 -9.657483E-04 -9.326697E-07 -8.990046E-04 -8.082092E-07 -8.031880E-04 -6.451110E-07 -0.000000E+00 -0.000000E+00 -7.000000E-03 -1.100000E-05 --3.133071E-05 -2.698671E-06 -2.623750E-04 -1.344791E-06 --2.483720E-03 -1.649588E-06 -3.294650E-03 -2.242064E-06 +9.888336E-04 +9.777919E-07 +9.666878E-04 +9.344854E-07 +9.339333E-04 +8.722314E-07 0.000000E+00 0.000000E+00 +1.800000E-02 +6.600000E-05 +3.521497E-03 +1.124575E-05 +-1.106505E-03 +1.298962E-06 +2.307061E-03 +1.995982E-06 +7.955988E-03 +1.333038E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -61,16 +339,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.204584E-04 +2.824254E-07 1.000000E-03 1.000000E-06 -6.245980E-04 -3.901227E-07 -8.518403E-05 -7.256319E-09 --3.277224E-04 -1.074020E-07 -2.989325E-04 -8.936066E-08 +-2.015923E-04 +4.063947E-08 +-4.390408E-04 +1.927568E-07 +2.819070E-04 +7.947154E-08 +3.007329E-04 +9.044026E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -81,16 +361,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.000000E-03 -1.100000E-05 -2.955972E-03 -4.718865E-06 -2.296283E-03 -1.893728E-06 -1.374242E-03 -1.154127E-06 -4.505145E-03 -6.063009E-06 +9.000000E-03 +2.300000E-05 +8.049890E-04 +1.664654E-06 +2.892684E-03 +4.445095E-06 +5.132099E-04 +7.081387E-07 +3.678767E-03 +3.207908E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -99,98 +379,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.100000E-02 -1.230000E-04 -4.489511E-03 -2.028537E-05 -1.946623E-03 -1.610367E-06 -1.647952E-03 -1.769319E-06 -1.077022E-02 -2.893664E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.000807E-04 -2.700544E-07 +6.136210E-04 +1.882762E-07 1.000000E-03 1.000000E-06 --9.045723E-04 -8.182510E-07 -7.273765E-04 -5.290766E-07 --4.935596E-04 -2.436011E-07 -2.989325E-04 -8.936066E-08 +3.974827E-04 +1.579925E-07 +-2.630113E-04 +6.917494E-08 +-4.392258E-04 +1.929193E-07 +3.007329E-04 +9.044026E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -201,16 +401,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.900000E-02 -1.050000E-04 -2.386082E-03 -3.497107E-06 -4.555769E-03 -1.058977E-05 -1.879180E-03 -5.304853E-06 -7.792317E-03 -1.670472E-05 +5.000000E-03 +9.000000E-06 +2.095603E-03 +4.046946E-06 +2.670798E-03 +2.492128E-06 +1.379100E-04 +2.471643E-06 +2.750651E-03 +2.153957E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -219,8 +419,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.198624E-03 -3.591835E-07 +3.044879E-04 +9.271290E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.014657E-04 +3.617610E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -241,158 +451,126 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.400000E-02 +4.200000E-05 +5.756515E-03 +9.296704E-06 +1.251623E-03 +5.182413E-06 +2.207579E-03 +5.475159E-06 +5.492134E-03 +6.869563E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.182662E-04 +3.822531E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.300000E-02 +1.310000E-04 +8.875791E-03 +3.047020E-05 +5.194493E-03 +1.122408E-05 +2.565521E-03 +5.889229E-06 +9.193064E-03 +2.295619E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.539123E-03 +8.532105E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.021986E-04 +8.139623E-07 1.000000E-03 1.000000E-06 -3.327793E-04 -1.107421E-07 --3.338869E-04 -1.114804E-07 --4.070373E-04 -1.656794E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.995454E-04 -8.972747E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-02 -2.400000E-05 -5.261857E-03 -7.471221E-06 -5.280154E-03 -9.529481E-06 -5.060306E-03 -6.646531E-06 -6.894561E-03 -1.267269E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.000000E-03 -1.800000E-05 --2.025476E-04 -1.858789E-06 --6.686398E-04 -1.065456E-06 -6.586587E-04 -4.841450E-07 -2.994327E-03 -2.684002E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +9.693968E-04 +9.397302E-07 +9.095953E-04 +8.273636E-07 +8.233334E-04 +6.778780E-07 0.000000E+00 0.000000E+00 +2.800000E-02 +1.820000E-04 +8.903131E-03 +2.397214E-05 +1.010587E-02 +2.531134E-05 +4.754028E-03 +9.649119E-06 +1.378015E-02 +4.259630E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -401,116 +579,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.208028E-04 +2.826368E-07 1.000000E-03 1.000000E-06 -9.104915E-04 -8.289948E-07 -7.434921E-04 -5.527806E-07 -5.212445E-04 -2.716958E-07 -1.201894E-03 -7.222931E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.990909E-04 -3.589099E-07 -1.000000E-03 -1.000000E-06 --5.260403E-04 -2.767184E-07 --8.492233E-05 -7.211803E-09 -4.251479E-04 -1.807507E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.400000E-02 -3.540000E-04 -1.553475E-02 -6.367842E-05 -1.520994E-02 -7.741012E-05 -8.930877E-03 -2.739654E-05 -1.405733E-02 -6.608052E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.031624E-04 -4.543315E-07 -1.000000E-03 -1.000000E-06 --2.223524E-04 -4.944060E-08 --4.258391E-04 -1.813389E-07 -3.060456E-04 -9.366388E-08 -6.040285E-04 -3.648505E-07 +-4.279762E-04 +1.831637E-07 +-2.252545E-04 +5.073960E-08 +4.459901E-04 +1.989072E-07 +6.089759E-04 +3.708516E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -522,15 +602,15 @@ tally 1: 0.000000E+00 0.000000E+00 1.200000E-02 -3.400000E-05 -3.889614E-03 -6.587628E-06 -2.115055E-03 -3.167536E-06 -3.463231E-04 -5.504681E-06 -5.710120E-03 -1.043566E-05 +4.000000E-05 +4.239853E-03 +1.158537E-05 +1.052249E-03 +2.609268E-06 +1.581467E-03 +5.643069E-07 +6.112773E-03 +1.209962E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -539,8 +619,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.981320E-04 -8.888272E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -561,18 +639,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.600000E-02 -5.600000E-05 -3.164928E-03 -1.114752E-05 -3.143660E-03 -3.198813E-06 -1.287643E-03 -7.268133E-07 -8.988217E-03 -1.652319E-05 0.000000E+00 0.000000E+00 +3.800000E-02 +2.980000E-04 +1.590359E-02 +8.465362E-05 +1.095039E-02 +3.846682E-05 +8.674652E-03 +2.116226E-05 +1.953871E-02 +7.808840E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -581,16 +659,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.000000E-03 -1.000000E-06 -9.617800E-04 -9.250208E-07 -8.875312E-04 -7.877116E-07 -7.814962E-04 -6.107364E-07 -2.981320E-04 -8.888272E-08 +6.098660E-04 +1.860035E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -601,676 +671,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.000000E-03 -1.400000E-05 -2.562256E-03 -5.938938E-06 -3.215552E-03 -2.429308E-06 -2.809239E-03 -2.320949E-06 -2.396627E-03 -1.615072E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.015597E-04 -1.809401E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.100000E-02 -2.150000E-04 -1.898034E-02 -7.784899E-05 -1.264567E-02 -4.010917E-05 -8.079721E-03 -1.493258E-05 -1.529918E-02 -5.419874E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.966100E-04 -2.679708E-07 -1.000000E-03 -1.000000E-06 -1.982438E-04 -3.930062E-08 --4.410491E-04 -1.945243E-07 --2.778880E-04 -7.722173E-08 -8.967976E-04 -8.042459E-07 -1.000000E-03 -1.000000E-06 -9.755714E-04 -9.517396E-07 -9.276094E-04 -8.604592E-07 -8.578678E-04 -7.359371E-07 -0.000000E+00 -0.000000E+00 -1.600000E-02 -5.400000E-05 -3.332422E-03 -1.335735E-05 -4.814665E-03 -5.403574E-06 -8.177949E-04 -2.462505E-06 -7.189603E-03 -1.112704E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.196133E-03 -7.153669E-07 -2.000000E-03 -2.000000E-06 -9.961345E-04 -5.766569E-07 --1.350146E-04 -1.888753E-07 --5.756575E-04 -1.828150E-07 -2.089751E-03 -2.580978E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.500000E-02 -5.900000E-05 -3.574847E-03 -7.661052E-06 -2.411448E-03 -4.875571E-06 --4.456628E-04 -3.620849E-06 -5.991484E-03 -9.329446E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.953980E-04 -4.450119E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.402987E-03 -2.352531E-06 -4.000000E-03 -6.000000E-06 -3.730318E-03 -5.177826E-06 -3.229766E-03 -3.845053E-06 -2.569348E-03 -2.470333E-06 -0.000000E+00 -0.000000E+00 -2.200000E-02 -1.140000E-04 -1.157227E-02 -3.152553E-05 -5.993470E-03 -9.940306E-06 -6.549523E-03 -9.865076E-06 -8.969741E-03 -1.911355E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.980234E-04 -4.482705E-07 -1.000000E-03 -1.000000E-06 -4.538235E-04 -2.059558E-07 --1.910664E-04 -3.650635E-08 --4.470663E-04 -1.998683E-07 -6.040285E-04 -3.648505E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.200000E-02 -1.020000E-04 -4.042627E-03 -9.476178E-06 -2.881083E-03 -5.928110E-06 -3.065234E-03 -4.444894E-06 -1.168502E-02 -2.989919E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.020143E-04 -9.121262E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.100000E-02 -1.250000E-04 -9.991177E-03 -3.139502E-05 -2.556450E-03 -1.824566E-06 -3.329841E-03 -5.163205E-06 -9.576327E-03 -2.773298E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.959971E-04 -4.463253E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.200651E-03 -8.987598E-07 -1.000000E-03 -1.000000E-06 -9.522533E-04 -9.067863E-07 -8.601795E-04 -7.399088E-07 -7.303458E-04 -5.334049E-07 -3.020143E-04 -9.121262E-08 -2.100000E-02 -1.150000E-04 -1.242804E-03 -3.619176E-06 -1.867552E-03 -1.359691E-06 -2.306130E-03 -5.045915E-06 -9.000544E-03 -2.094585E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.989325E-04 -8.936066E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.990909E-04 -3.589099E-07 -1.000000E-03 -1.000000E-06 -9.669322E-04 -9.349578E-07 -9.024367E-04 -8.143920E-07 -8.097037E-04 -6.556200E-07 -0.000000E+00 -0.000000E+00 -1.800000E-02 -7.600000E-05 -7.900751E-03 -1.937232E-05 -5.101355E-03 -8.800793E-06 -4.128814E-03 -6.665133E-06 -7.790979E-03 -1.525891E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.986793E-04 -1.792085E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.020143E-04 -9.121262E-08 -1.000000E-03 -1.000000E-06 -9.912755E-04 -9.826271E-07 -9.739406E-04 -9.485603E-07 -9.482220E-04 -8.991250E-07 -0.000000E+00 -0.000000E+00 -2.200000E-02 -1.260000E-04 -7.579348E-03 -2.124946E-05 -6.787172E-03 -1.874543E-05 -3.914660E-03 -8.731250E-06 -1.167769E-02 -3.750609E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.986793E-04 -1.792085E-07 -2.000000E-03 -2.000000E-06 -3.631413E-04 -1.401984E-06 -1.102976E-03 -1.004698E-06 -1.304621E-03 -1.083698E-06 -2.993714E-03 -2.324726E-06 -5.000000E-03 -7.000000E-06 -4.239270E-03 -4.739399E-06 -2.968259E-03 -2.239642E-06 -1.575924E-03 -1.063419E-06 -2.989325E-04 -8.936066E-08 -2.700000E-02 -1.610000E-04 -8.295783E-03 -1.670306E-05 -5.150584E-03 -1.540799E-05 -2.687614E-03 -7.461732E-06 -1.197674E-02 -3.010342E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.195131E-03 -5.358064E-07 -1.000000E-03 -1.000000E-06 --7.791468E-04 -6.070697E-07 -4.106046E-04 -1.685961E-07 --1.377092E-05 -1.896382E-10 -1.803453E-03 -1.268084E-06 -2.000000E-03 -2.000000E-06 -1.885433E-03 -1.778733E-06 -1.668099E-03 -1.401699E-06 -1.370094E-03 -9.733671E-07 -2.995454E-04 -8.972747E-08 -2.500000E-02 -1.690000E-04 -7.306400E-03 -1.879755E-05 -5.910494E-03 -7.423636E-06 -4.158757E-03 -8.004612E-06 -1.136957E-02 -3.132992E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-03 -1.000000E-06 --1.294470E-04 -1.675653E-08 --4.748652E-04 -2.254970E-07 -1.887478E-04 -3.562574E-08 -5.990909E-04 -3.589099E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.900000E-02 -1.270000E-04 -7.644698E-03 -2.593978E-05 -4.291971E-03 -7.952406E-06 -1.754591E-03 -1.626852E-06 -8.970335E-03 -2.698525E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.981320E-04 -8.888272E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.100000E-02 -9.900000E-05 -9.175459E-03 -3.081816E-05 -6.537841E-03 -1.693021E-05 -3.371815E-03 -6.901863E-06 -1.109875E-02 -2.912624E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.991339E-04 -8.948108E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.100000E-02 -3.150000E-04 -7.491923E-03 -2.563522E-05 -4.484513E-03 -1.087903E-05 -5.244220E-03 -1.284762E-05 -1.256302E-02 -4.702441E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.972659E-04 -1.783638E-07 -1.000000E-03 -1.000000E-06 -1.684904E-04 -2.838901E-08 --4.574165E-04 -2.092298E-07 --2.407774E-04 -5.797376E-08 -1.503908E-03 -1.178356E-06 -2.000000E-03 -2.000000E-06 -1.675714E-03 -1.446154E-06 -1.169231E-03 -9.498292E-07 -6.921651E-04 -8.538185E-07 -3.020143E-04 -9.121262E-08 -2.000000E-02 -8.600000E-05 -9.188471E-03 -2.173815E-05 -1.860120E-03 -4.452062E-06 -2.429984E-03 -2.502873E-06 -1.048716E-02 -2.272644E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.974105E-04 -4.471701E-07 -2.000000E-03 -2.000000E-06 -1.794485E-03 -1.610365E-06 -1.415547E-03 -1.003887E-06 -9.217303E-04 -4.304779E-07 -0.000000E+00 -0.000000E+00 -1.800000E-02 -7.400000E-05 -3.179742E-03 -4.790936E-06 --6.355126E-04 -5.202988E-06 -1.151706E-03 -3.152245E-06 -7.489949E-03 -1.301150E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-03 -1.000000E-06 -6.585165E-04 -4.336439E-07 -1.504659E-04 -2.263998E-08 --2.738705E-04 -7.500507E-08 -1.196133E-03 -7.153669E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1282,15 +682,15 @@ tally 1: 0.000000E+00 0.000000E+00 3.000000E-02 -2.060000E-04 -1.541898E-02 -5.863846E-05 -9.395114E-03 -2.654761E-05 -8.661018E-03 -2.160642E-05 -1.049373E-02 -2.404605E-05 +2.100000E-04 +1.396274E-02 +5.377392E-05 +7.263833E-03 +1.550401E-05 +2.406305E-03 +2.774873E-06 +1.067173E-02 +2.834689E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1299,8 +699,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.396224E-03 -1.614108E-06 +6.159705E-04 +1.897125E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1309,28 +709,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.600725E-03 -5.038163E-06 -4.000000E-03 -8.000000E-06 -3.781504E-03 -7.153441E-06 -3.368106E-03 -5.701400E-06 -2.804131E-03 -4.034404E-06 -2.989325E-04 -8.936066E-08 -1.900000E-02 -7.900000E-05 -6.408930E-03 -1.103823E-05 -3.228416E-03 -7.109320E-06 -4.961615E-04 -2.423816E-06 -1.079243E-02 -2.644603E-05 +6.089759E-04 +3.708516E-07 +1.000000E-03 +1.000000E-06 +-3.845548E-04 +1.478824E-07 +-2.781765E-04 +7.738214E-08 +4.346600E-04 +1.889293E-07 +0.000000E+00 +0.000000E+00 +3.100000E-02 +2.010000E-04 +5.656932E-03 +1.902755E-05 +4.255795E-04 +5.923041E-06 +-1.665451E-03 +3.618806E-06 +1.254348E-02 +3.367259E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1339,8 +739,528 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.020143E-04 -9.121262E-08 +6.089759E-04 +3.708516E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.007329E-04 +9.044026E-08 +1.000000E-03 +1.000000E-06 +9.418397E-04 +8.870620E-07 +8.305930E-04 +6.898847E-07 +6.759159E-04 +4.568623E-07 +0.000000E+00 +0.000000E+00 +1.700000E-02 +1.070000E-04 +9.563321E-03 +3.797495E-05 +3.872248E-03 +6.913143E-06 +1.851726E-03 +2.042684E-06 +7.032800E-03 +1.543729E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.091331E-04 +9.556328E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.800000E-02 +3.300000E-04 +1.666359E-02 +6.918668E-05 +5.166835E-03 +1.583235E-05 +6.193613E-03 +1.014626E-05 +1.654613E-02 +6.758065E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.218842E-03 +5.568551E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.222651E-03 +7.474483E-07 +2.000000E-03 +2.000000E-06 +1.859309E-03 +1.730661E-06 +1.595992E-03 +1.290291E-06 +1.243306E-03 +8.262391E-07 +0.000000E+00 +0.000000E+00 +3.200000E-02 +2.140000E-04 +1.125786E-02 +3.535152E-05 +6.340891E-03 +1.186849E-05 +-6.739003E-04 +6.238152E-06 +1.194483E-02 +3.174072E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.528427E-03 +1.032143E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.091331E-04 +9.556328E-08 +1.000000E-03 +1.000000E-06 +8.883829E-04 +7.892241E-07 +6.838361E-04 +4.676319E-07 +4.202586E-04 +1.766173E-07 +0.000000E+00 +0.000000E+00 +2.000000E-02 +1.060000E-04 +6.707526E-03 +2.735840E-05 +6.937679E-03 +1.338587E-05 +5.832553E-03 +1.828962E-05 +1.101850E-02 +3.215320E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.105988E-04 +4.573243E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.227694E-03 +9.417032E-07 +1.000000E-03 +1.000000E-06 +9.408116E-04 +8.851265E-07 +8.276898E-04 +6.850703E-07 +6.706258E-04 +4.497390E-07 +0.000000E+00 +0.000000E+00 +1.800000E-02 +7.800000E-05 +2.843265E-03 +6.035154E-06 +4.322434E-03 +7.469456E-06 +2.900345E-03 +4.663845E-06 +7.631460E-03 +1.236685E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.007329E-04 +9.044026E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.000000E-02 +9.200000E-05 +6.856783E-03 +1.381342E-05 +2.931050E-03 +7.384807E-06 +1.856596E-03 +2.302567E-06 +1.130923E-02 +3.279819E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +2.509363E-04 +6.296901E-08 +-4.055465E-04 +1.644679E-07 +-3.369014E-04 +1.135025E-07 +6.182662E-04 +3.822531E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.091331E-04 +9.556328E-08 +2.900000E-02 +2.010000E-04 +1.040068E-02 +4.442598E-05 +7.909288E-03 +1.634388E-05 +2.600276E-03 +1.084582E-05 +1.160235E-02 +3.244276E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.227694E-03 +9.417032E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.091331E-04 +9.556328E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.091331E-04 +9.556328E-08 +2.900000E-02 +1.890000E-04 +3.796494E-03 +2.573465E-05 +5.901410E-03 +9.723225E-06 +2.069453E-03 +9.510548E-06 +1.438173E-02 +4.416319E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.136748E-04 +3.765967E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.400000E-02 +1.240000E-04 +6.672638E-03 +1.840846E-05 +4.370801E-03 +7.557992E-06 +4.585753E-03 +1.441383E-05 +1.162351E-02 +2.791423E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.089759E-04 +3.708516E-07 +1.000000E-03 +1.000000E-06 +-8.175500E-04 +6.683879E-07 +5.025819E-04 +2.525886E-07 +-1.397764E-04 +1.953744E-08 +3.071818E-04 +9.436064E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.700000E-02 +2.910000E-04 +8.304483E-03 +2.250088E-05 +7.798128E-03 +2.325505E-05 +6.917154E-03 +2.136255E-05 +1.649875E-02 +5.805120E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.071818E-04 +9.436064E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.500000E-02 +2.550000E-04 +1.934687E-03 +1.279246E-05 +1.742063E-03 +9.283511E-06 +5.580823E-03 +1.402955E-05 +1.465296E-02 +4.425100E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.535220E-03 +1.225842E-06 +2.000000E-03 +2.000000E-06 +1.954328E-03 +1.909945E-06 +1.864917E-03 +1.741066E-06 +1.735530E-03 +1.513893E-06 +0.000000E+00 +0.000000E+00 +3.100000E-02 +2.150000E-04 +8.788723E-03 +4.052825E-05 +7.277307E-03 +2.646372E-05 +4.235689E-03 +1.237842E-05 +1.375310E-02 +4.363256E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.068374E-04 +9.414918E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.143635E-04 +3.774426E-07 +1.000000E-03 +1.000000E-06 +9.752141E-04 +9.510426E-07 +9.265639E-04 +8.585207E-07 +8.558543E-04 +7.324865E-07 +0.000000E+00 +0.000000E+00 +2.000000E-02 +9.400000E-05 +5.446779E-03 +8.175340E-06 +2.952745E-03 +6.944505E-06 +9.137774E-04 +1.227091E-06 +7.662475E-03 +1.309219E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.225836E-03 +5.668425E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1363,14 +1283,14 @@ tally 1: 0.000000E+00 2.800000E-02 1.660000E-04 -1.585913E-02 -6.353606E-05 -1.000709E-02 -2.500587E-05 -6.237459E-03 -8.453167E-06 -1.108880E-02 -2.616665E-05 +7.579645E-03 +3.038397E-05 +6.894753E-03 +2.399109E-05 +5.371715E-03 +1.603319E-05 +1.344654E-02 +4.055142E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1379,8 +1299,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.194532E-03 -7.134552E-07 +3.091331E-04 +9.556328E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1401,16 +1321,616 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.400000E-02 +1.300000E-04 +4.257114E-03 +3.224130E-05 +8.813774E-03 +2.583867E-05 +4.664136E-03 +1.410529E-05 +1.287730E-02 +3.681324E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +-6.367370E-04 +4.054341E-07 +1.081511E-04 +1.169666E-08 +3.097184E-04 +9.592546E-08 +6.182662E-04 +3.822531E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.400000E-02 +1.300000E-04 +1.378482E-02 +5.592497E-05 +9.034738E-03 +2.624250E-05 +5.658518E-03 +1.317424E-05 +1.068557E-02 +2.727026E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.091331E-04 +9.556328E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.182662E-04 +3.822531E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.200000E-02 +2.260000E-04 +6.941116E-03 +2.215550E-05 +6.749352E-03 +1.648121E-05 +5.910808E-03 +1.357613E-05 +1.528788E-02 +5.372220E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.136210E-04 +1.882762E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.900000E-02 +2.030000E-04 +4.508769E-03 +3.192756E-05 +4.194184E-03 +7.918516E-06 +2.186680E-03 +9.265062E-06 +1.406557E-02 +4.964272E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.518169E-03 +1.003675E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.300000E-02 +1.410000E-04 +7.122769E-03 +1.478437E-05 +4.717800E-03 +1.137509E-05 +2.766174E-03 +2.862748E-06 +9.770364E-03 +2.547043E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.007329E-04 +9.044026E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.000000E-02 +9.400000E-05 +-2.546403E-03 +8.587879E-06 +3.329285E-04 +1.032543E-06 +-6.526073E-04 +5.693572E-06 +7.947562E-03 +1.421771E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.091331E-04 +9.556328E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.273993E-04 +8.600695E-07 +1.000000E-03 +1.000000E-06 +9.887237E-04 +9.775745E-07 +9.663618E-04 +9.338551E-07 +9.332922E-04 +8.710343E-07 +0.000000E+00 +0.000000E+00 +1.000000E-02 +3.400000E-05 +2.083696E-03 +6.707681E-06 +2.664177E-03 +4.483757E-06 +-3.543315E-04 +7.233059E-07 +3.654309E-03 +3.704263E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.007329E-04 +9.044026E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.700000E-02 +7.500000E-05 +7.751840E-03 +1.439369E-05 +5.032178E-03 +1.282123E-05 +5.077992E-03 +8.054934E-06 +7.339781E-03 +1.254543E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.068374E-04 +9.414918E-08 +1.000000E-03 +1.000000E-06 +-5.691245E-04 +3.239027E-07 +-1.414588E-05 +2.001060E-10 +3.928343E-04 +1.543188E-07 +6.182662E-04 +3.822531E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.000000E-02 +9.000000E-05 +4.292093E-03 +1.162566E-05 +1.911635E-03 +6.462803E-06 +7.144938E-04 +3.566046E-06 +8.845087E-03 +1.787718E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.098660E-04 +1.860035E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +7.900000E-05 +7.074706E-03 +1.339988E-05 +3.301242E-03 +3.627546E-06 +3.676901E-03 +5.025480E-06 +7.044700E-03 +1.063679E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.211332E-03 +9.095256E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.068374E-04 +9.414918E-08 +1.000000E-03 +1.000000E-06 +9.924008E-04 +9.848594E-07 +9.772891E-04 +9.550940E-07 +9.548370E-04 +9.117137E-07 +0.000000E+00 +0.000000E+00 +1.200000E-02 +4.200000E-05 +1.994203E-03 +9.474986E-06 +4.797034E-03 +7.209992E-06 +7.461820E-04 +7.384105E-07 +5.186835E-03 +7.184830E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.044879E-04 +9.271290E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.100000E-02 +2.070000E-04 +1.654377E-02 +5.944129E-05 +1.297328E-02 +4.003873E-05 +7.211206E-03 +1.234310E-05 +1.739706E-02 +6.870884E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.086475E-04 +4.561217E-07 +2.000000E-03 +4.000000E-06 +-1.560749E-03 +2.435936E-06 +8.504262E-04 +7.232247E-07 +-1.266477E-04 +1.603963E-08 +2.148895E-03 +2.355633E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.068374E-04 +9.414918E-08 +2.100000E-02 +9.900000E-05 +8.524679E-03 +1.919497E-05 +5.830060E-03 +1.195983E-05 +4.439133E-03 +4.446488E-06 +8.535001E-03 +1.828799E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.044879E-04 +9.271290E-08 +3.000000E-03 +5.000000E-06 +3.626106E-04 +7.014271E-07 +2.355907E-04 +3.451505E-07 +1.623342E-03 +1.603144E-06 +3.056692E-03 +2.433689E-06 +3.000000E-03 +5.000000E-06 +2.377207E-03 +2.907996E-06 +1.593038E-03 +1.320423E-06 +1.150471E-03 +8.926966E-07 +0.000000E+00 +0.000000E+00 +1.700000E-02 +6.300000E-05 +8.432455E-03 +1.718164E-05 +2.701919E-03 +5.016066E-06 +2.357556E-03 +3.687074E-06 +7.025349E-03 +1.109437E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.052208E-04 +1.831532E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.215453E-04 +8.492458E-07 +1.000000E-03 +1.000000E-06 +9.959310E-04 +9.918786E-07 +9.878179E-04 +9.757842E-07 +9.757102E-04 +9.520103E-07 +0.000000E+00 +0.000000E+00 +1.100000E-02 +4.900000E-05 +5.546222E-03 +1.139525E-05 +1.289839E-03 +2.123481E-06 +1.011230E-03 +1.426586E-06 +5.215344E-03 +8.818614E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.136210E-04 +1.882762E-07 +1.000000E-03 +1.000000E-06 +3.587682E-04 +1.287146E-07 +-3.069281E-04 +9.420486E-08 +-4.227055E-04 +1.786799E-07 +1.228132E-03 +9.505098E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 1.800000E-02 -8.200000E-05 -8.780691E-03 -2.358452E-05 -1.816210E-03 -1.543496E-06 -1.880620E-03 -1.310997E-06 -7.183087E-03 -1.306174E-05 +8.600000E-05 +4.110494E-03 +1.042545E-05 +2.304908E-03 +4.602048E-06 +1.132856E-03 +1.141229E-06 +9.161625E-03 +2.374582E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1419,8 +1939,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.995454E-04 -8.972747E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1429,444 +1947,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.981320E-04 -8.888272E-08 -1.000000E-03 -1.000000E-06 -1.324970E-04 -1.755546E-08 --4.736668E-04 -2.243602E-07 --1.929304E-04 -3.722214E-08 -0.000000E+00 -0.000000E+00 -3.300000E-02 -2.390000E-04 -9.004426E-03 -3.202491E-05 -8.390638E-03 -2.225399E-05 -7.671245E-03 -2.173426E-05 -1.526879E-02 -4.932937E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.196357E-03 -5.372737E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.990909E-04 -3.589099E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.200000E-02 -4.600000E-05 -1.118075E-03 -5.126429E-06 -1.131273E-04 -9.269523E-07 --4.997208E-04 -2.049174E-07 -4.186564E-03 -4.464187E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.981320E-04 -8.888272E-08 -1.000000E-03 -1.000000E-06 -1.681598E-04 -2.827772E-08 --4.575834E-04 -2.093826E-07 --2.403518E-04 -5.776898E-08 -2.093736E-03 -3.310679E-06 -3.000000E-03 -5.000000E-06 -2.887280E-03 -4.581616E-06 -2.669986E-03 -3.835050E-06 -2.363696E-03 -2.915580E-06 -0.000000E+00 -0.000000E+00 -1.500000E-02 -5.900000E-05 -3.685307E-03 -1.268655E-05 -5.360583E-03 -1.364253E-05 -1.590442E-03 -2.811111E-06 -7.793073E-03 -1.277581E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.981320E-04 -8.888272E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.000000E-03 -1.300000E-05 -3.106624E-03 -9.484025E-06 -4.505496E-03 -5.432355E-06 -2.355878E-03 -2.623009E-06 -2.690622E-03 -1.877213E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.989325E-04 -8.936066E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.195730E-03 -1.429770E-06 -1.000000E-03 -1.000000E-06 -9.838946E-04 -9.680486E-07 -9.520729E-04 -9.064428E-07 -9.053026E-04 -8.195728E-07 -0.000000E+00 -0.000000E+00 -2.500000E-02 -1.390000E-04 -9.492341E-03 -2.448502E-05 -3.248123E-03 -2.577618E-06 -1.941360E-03 -2.063052E-06 -1.137644E-02 -3.026289E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.989325E-04 -8.936066E-08 -1.000000E-03 -1.000000E-06 --6.411363E-05 -4.110558E-09 --4.938342E-04 -2.438722E-07 -9.551160E-05 -9.122465E-09 -2.684602E-03 -5.778221E-06 -2.000000E-03 -2.000000E-06 -1.975537E-03 -1.951439E-06 -1.927159E-03 -1.857550E-06 -1.855946E-03 -1.724502E-06 -0.000000E+00 -0.000000E+00 -2.100000E-02 -9.500000E-05 -3.106757E-03 -7.530480E-06 -2.693211E-04 -3.828657E-06 -1.317058E-03 -3.136131E-06 -1.017555E-02 -2.236513E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.990909E-04 -3.589099E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.400000E-02 -5.400000E-05 -5.944397E-03 -1.655215E-05 -1.726828E-03 -5.006812E-06 --1.657930E-03 -4.261204E-06 -5.696729E-03 -8.356388E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.989325E-04 -8.936066E-08 -1.000000E-03 -1.000000E-06 -6.866979E-04 -4.715540E-07 -2.073310E-04 -4.298614E-08 --2.205090E-04 -4.862422E-08 -1.496493E-03 -1.164240E-06 -1.000000E-03 -1.000000E-06 --9.623002E-04 -9.260217E-07 -8.890326E-04 -7.903789E-07 --7.843269E-04 -6.151687E-07 -0.000000E+00 -0.000000E+00 -1.000000E-02 -3.600000E-05 -4.361597E-03 -7.003332E-06 -1.326662E-03 -8.159669E-07 --1.380710E-04 -7.198742E-08 -4.786948E-03 -7.321215E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.981320E-04 -8.888272E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.900000E-02 -3.870000E-04 -1.427389E-02 -8.090929E-05 -8.826225E-03 -2.660607E-05 -4.117139E-03 -7.490443E-06 -2.216995E-02 -1.059100E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.198182E-03 -1.435639E-06 -1.000000E-03 -1.000000E-06 --2.499079E-04 -6.245395E-08 --4.063191E-04 -1.650952E-07 -3.358425E-04 -1.127902E-07 -8.943961E-04 -7.999445E-07 -1.000000E-03 -1.000000E-06 -9.401483E-04 -8.838788E-07 -8.258183E-04 -6.819758E-07 -6.672205E-04 -4.451832E-07 -0.000000E+00 -0.000000E+00 -3.700000E-02 -3.250000E-04 -5.676482E-03 -1.840790E-05 -7.927554E-03 -2.448188E-05 -2.237603E-03 -2.700519E-06 -1.646685E-02 -6.188122E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.800372E-03 -1.258824E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.798328E-03 -1.615735E-06 -4.000000E-03 -6.000000E-06 -3.770169E-03 -5.325612E-06 -3.332954E-03 -4.161563E-06 -2.730616E-03 -2.811353E-06 -0.000000E+00 -0.000000E+00 -2.000000E-02 -9.600000E-05 -5.093280E-03 -1.425830E-05 -2.794340E-03 -1.663793E-05 -4.103789E-03 -6.867085E-06 -8.700108E-03 -1.850749E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.029611E-04 -4.542111E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1882,15 +1962,15 @@ tally 1: 0.000000E+00 0.000000E+00 6.000000E-03 -1.400000E-05 -4.561928E-03 -8.999493E-06 -2.729392E-03 -4.924575E-06 -1.659472E-03 -3.263660E-06 -2.095047E-03 -1.698704E-06 +1.000000E-05 +7.480298E-04 +2.696134E-07 +1.010259E-03 +2.525363E-06 +2.404343E-03 +2.960244E-06 +5.213048E-03 +8.232507E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1899,6 +1979,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.007329E-04 +9.044026E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1909,28 +1991,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.962641E-04 -3.555309E-07 -1.000000E-03 -1.000000E-06 -9.213015E-04 -8.487964E-07 -7.731946E-04 -5.978298E-07 -5.730412E-04 -3.283762E-07 0.000000E+00 0.000000E+00 -1.000000E-02 -2.600000E-05 -5.481204E-03 -1.421903E-05 -2.241220E-03 -8.639111E-06 -2.375771E-03 -4.453036E-06 -4.791983E-03 -5.914853E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1939,408 +2001,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.193329E-03 -8.893051E-07 -1.000000E-03 -1.000000E-06 -8.827246E-04 -7.792028E-07 -6.688042E-04 -4.472990E-07 -3.954668E-04 -1.563940E-07 -2.989325E-04 -8.936066E-08 -9.000000E-03 -2.100000E-05 -4.651230E-03 -4.741702E-06 -2.150788E-03 -1.086619E-06 -2.092494E-03 -1.840170E-06 -4.800173E-03 -5.412689E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.040285E-04 -3.648505E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.000000E-03 -3.000000E-06 -7.652902E-05 -1.571253E-06 -8.568788E-04 -1.094232E-06 --7.206134E-04 -4.649382E-07 -9.000807E-04 -2.700544E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-03 -1.000000E-06 -9.101753E-04 -8.284190E-07 -7.426285E-04 -5.514972E-07 -5.197534E-04 -2.701436E-07 -2.989325E-04 -8.936066E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.989325E-04 -8.936066E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.400000E-02 -4.600000E-05 -6.259455E-03 -1.284922E-05 -2.076794E-03 -2.552816E-06 -6.278684E-04 -2.094249E-06 -6.584175E-03 -1.056233E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.990909E-04 -3.589099E-07 -1.000000E-03 -1.000000E-06 -6.257846E-04 -3.916063E-07 -8.740950E-05 -7.640421E-09 --3.260239E-04 -1.062916E-07 -5.962641E-04 -3.555309E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.500000E-02 -7.500000E-05 -4.663045E-03 -1.215939E-05 -4.830409E-03 -8.682038E-06 -3.887884E-03 -4.756968E-06 -8.095588E-03 -1.984557E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.995454E-04 -8.972747E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.958095E-04 -4.452583E-07 -2.000000E-03 -2.000000E-06 -1.906393E-03 -1.818122E-06 -1.727184E-03 -1.499401E-06 -1.477537E-03 -1.118575E-06 -0.000000E+00 -0.000000E+00 -5.000000E-03 -7.000000E-06 -1.973804E-03 -3.852738E-06 -1.299550E-03 -2.189071E-06 -2.037626E-03 -1.354116E-06 -2.097904E-03 -9.889505E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-03 -1.000000E-06 --9.618754E-04 -9.252042E-07 -8.878063E-04 -7.882000E-07 --7.820147E-04 -6.115471E-07 -2.995454E-04 -8.972747E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.995454E-04 -8.972747E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.400000E-02 -6.600000E-05 -2.900274E-03 -2.656005E-06 --1.326535E-04 -7.657613E-07 -2.692899E-03 -2.374742E-06 -7.492257E-03 -1.481323E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.976775E-04 -1.786102E-07 -1.000000E-03 -1.000000E-06 --5.336276E-04 -2.847584E-07 --7.286246E-05 -5.308937E-09 -4.205541E-04 -1.768657E-07 -6.040285E-04 -3.648505E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.100000E-02 -9.500000E-05 -1.100185E-02 -2.519922E-05 -5.296622E-03 -6.181448E-06 -4.290056E-03 -6.437184E-06 -9.878051E-03 -2.067153E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.981320E-04 -8.888272E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.494265E-03 -8.042497E-07 -3.000000E-03 -3.000000E-06 -6.851013E-04 -1.571044E-06 -8.565666E-04 -1.043968E-06 -7.365013E-04 -1.098388E-06 -0.000000E+00 -0.000000E+00 3.000000E-03 5.000000E-06 -1.355880E-03 -1.020443E-06 -1.249756E-03 -8.001666E-07 -1.419322E-03 -1.107335E-06 -2.397825E-03 -2.688348E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.989325E-04 -8.936066E-08 +7.647871E-04 +1.000926E-06 +8.702327E-05 +1.587846E-06 +1.118717E-03 +8.177417E-07 +2.147037E-03 +1.226733E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2401,12 +2071,342 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.600000E-02 +6.200000E-05 +9.988601E-03 +3.022832E-05 +6.166188E-03 +1.173350E-05 +3.417134E-03 +5.700622E-06 +7.649352E-03 +1.360625E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.136748E-04 +3.765967E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-02 +3.400000E-05 +3.889110E-03 +7.557500E-06 +1.015827E-04 +2.744147E-06 +7.497308E-04 +3.373523E-06 +4.583807E-03 +6.264955E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.052208E-04 +1.831532E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.182662E-04 +3.822531E-07 +2.000000E-03 +4.000000E-06 +1.798872E-03 +3.235939E-06 +1.446227E-03 +2.091573E-06 +1.026515E-03 +1.053733E-06 +3.091331E-04 +9.556328E-08 +2.000000E-03 +2.000000E-06 +1.796026E-03 +1.613093E-06 +1.419639E-03 +1.009421E-06 +9.284786E-04 +4.359755E-07 +6.113253E-04 +1.868621E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +8.755578E-04 +7.666014E-07 +6.499021E-04 +4.223727E-07 +3.646728E-04 +1.329863E-07 +3.044879E-04 +9.271290E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.000000E-03 +1.100000E-05 +7.911817E-04 +5.000480E-06 +3.670154E-03 +5.136246E-06 +7.963899E-04 +3.142130E-06 +2.757965E-03 +1.792319E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-03 +1.000000E-06 +9.128685E-04 +8.333290E-07 +7.499935E-04 +5.624902E-07 +5.324967E-04 +2.835528E-07 +3.068374E-04 +9.414918E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.000000E-03 +2.000000E-06 +-3.575073E-05 +3.447056E-08 +-9.482942E-04 +4.497282E-07 +4.906190E-05 +7.285661E-08 +6.159705E-04 +1.897125E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.000000E-03 +5.000000E-06 +1.728228E-03 +1.868156E-06 +1.372668E-04 +1.772598E-07 +-7.147632E-04 +2.712801E-07 +1.225291E-03 +5.607755E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.044879E-04 +9.271290E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 tally 2: -5.712389E-01 -6.528048E-02 -6.215724E-01 -7.729703E-02 -3.619520E+00 -2.620927E+00 -4.040217E+01 -3.265313E+02 +5.688123E-01 +6.473815E-02 +6.189326E-01 +7.665427E-02 +3.614785E+00 +2.614396E+00 +4.026586E+01 +3.243814E+02 diff --git a/tests/test_statepoint_sourcesep/results_true.dat b/tests/test_statepoint_sourcesep/results_true.dat index bf062f283c..cb1493aba2 100644 --- a/tests/test_statepoint_sourcesep/results_true.dat +++ b/tests/test_statepoint_sourcesep/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.938252E-01 5.852966E-03 +2.993693E-01 1.470880E-03 diff --git a/tests/test_survival_biasing/results_true.dat b/tests/test_survival_biasing/results_true.dat index de5cf150e4..904a2ef7ec 100644 --- a/tests/test_survival_biasing/results_true.dat +++ b/tests/test_survival_biasing/results_true.dat @@ -1,20 +1,20 @@ k-combined: -9.810103E-01 1.609702E-03 +9.939120E-01 9.319846E-03 tally 1: -4.313495E+01 -3.721921E+02 -1.792866E+01 -6.430423E+01 -2.200731E+00 -9.690384E-01 -1.908978E+00 -7.291363E-01 -4.948871E+00 -4.900154E+00 -3.465589E-02 -2.402752E-04 -3.697361E+02 -2.735204E+04 +4.354779E+01 +3.793738E+02 +1.814974E+01 +6.591525E+01 +2.217235E+00 +9.837360E-01 +1.919728E+00 +7.373585E-01 +4.971723E+00 +4.945321E+00 +3.485412E-02 +2.430294E-04 +3.718202E+02 +2.766078E+04 tally 2: -1.792866E+01 -6.430423E+01 +1.814974E+01 +6.591525E+01 diff --git a/tests/test_tallies/results_true.dat b/tests/test_tallies/results_true.dat index 164ab307cc..e5ec97453e 100644 --- a/tests/test_tallies/results_true.dat +++ b/tests/test_tallies/results_true.dat @@ -1 +1 @@ -bafeb65c4596d719bcab7ebbfbb789b28b858a16b9a3755b62356bf1a806c142d5becc0b5a52382cddf57267ff4477c7b5e7e1528bd3dde3ac29b0467a137a29 \ No newline at end of file +4622766eb676b86e58307ae9c6af24f15427243f49d1f16e061854df0c389b36ba1ed83f8c8d769df0cb1c25a3d66d0119e32f730df145f5590c0beea0f4cc6e \ No newline at end of file diff --git a/tests/test_tally_aggregation/results_true.dat b/tests/test_tally_aggregation/results_true.dat index 879a8797a0..572d85efaf 100644 --- a/tests/test_tally_aggregation/results_true.dat +++ b/tests/test_tally_aggregation/results_true.dat @@ -1 +1 @@ -fa410f505a1e9b7b01b127251751942ad362f39141b7e9c9d1c59b19f395d4d78a7aab3f35f03fcdb9fc13fa03ea9950c57943bb73917dac5e32f01fda0078fd \ No newline at end of file +bb3d417db2e127ac0307ebdbde43f0483613df75c7fd9cb85543ec8047d99c69926cb2299a09b575a3dbaaa74fd197aa685ac005a3fc949e2413741870dd8a68 \ No newline at end of file diff --git a/tests/test_tally_assumesep/results_true.dat b/tests/test_tally_assumesep/results_true.dat index 995c9ade6e..b99a54daaa 100644 --- a/tests/test_tally_assumesep/results_true.dat +++ b/tests/test_tally_assumesep/results_true.dat @@ -1,11 +1,11 @@ k-combined: -9.090848E-01 2.183589E-02 +1.102447E+00 7.056170E-03 tally 1: -1.247086E+01 -3.154055E+01 +1.560445E+01 +4.918297E+01 tally 2: -2.524688E+00 -1.288895E+00 +3.014547E+00 +1.838255E+00 tally 3: -3.704082E+01 -2.775735E+02 +4.466613E+01 +4.017825E+02 diff --git a/tests/test_tally_nuclides/results_true.dat b/tests/test_tally_nuclides/results_true.dat index adfed45572..ae66471ef9 100644 --- a/tests/test_tally_nuclides/results_true.dat +++ b/tests/test_tally_nuclides/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.344992E-01 5.409376E-02 +9.404984E-01 5.010334E-02 tally 1: -6.493491E+00 -8.501932E+00 -1.474098E+00 -4.371503E-01 -1.430824E+00 -4.117407E-01 -5.019393E+00 -5.084622E+00 -6.493491E+00 -8.501932E+00 -1.474098E+00 -4.371503E-01 -1.430824E+00 -4.117407E-01 -5.019393E+00 -5.084622E+00 +6.716608E+00 +9.111797E+00 +1.520164E+00 +4.654833E-01 +1.475303E+00 +4.381727E-01 +5.196444E+00 +5.459040E+00 +6.716608E+00 +9.111797E+00 +1.520164E+00 +4.654833E-01 +1.475303E+00 +4.381727E-01 +5.196444E+00 +5.459040E+00 tally 2: -6.493491E+00 -8.501932E+00 -1.474098E+00 -4.371503E-01 -1.430824E+00 -4.117407E-01 -5.019393E+00 -5.084622E+00 +6.716608E+00 +9.111797E+00 +1.520164E+00 +4.654833E-01 +1.475303E+00 +4.381727E-01 +5.196444E+00 +5.459040E+00 diff --git a/tests/test_trace/results_true.dat b/tests/test_trace/results_true.dat index bf062f283c..cb1493aba2 100644 --- a/tests/test_trace/results_true.dat +++ b/tests/test_trace/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.938252E-01 5.852966E-03 +2.993693E-01 1.470880E-03 diff --git a/tests/test_translation/results_true.dat b/tests/test_translation/results_true.dat index bf062f283c..cb1493aba2 100644 --- a/tests/test_translation/results_true.dat +++ b/tests/test_translation/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.938252E-01 5.852966E-03 +2.993693E-01 1.470880E-03 diff --git a/tests/test_trigger_batch_interval/results_true.dat b/tests/test_trigger_batch_interval/results_true.dat index 4adde2afc1..3c9bfa98e8 100644 --- a/tests/test_trigger_batch_interval/results_true.dat +++ b/tests/test_trigger_batch_interval/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.945341E-01 2.319345E-03 +9.828074E-01 6.099782E-03 tally 1: -1.417551E+01 -2.010253E+01 -3.226230E+00 -1.041189E+00 -3.130685E+00 -9.804156E-01 -1.094928E+01 -1.199387E+01 -1.417551E+01 -2.010253E+01 -3.226230E+00 -1.041189E+00 -3.130685E+00 -9.804156E-01 -1.094928E+01 -1.199387E+01 +1.388719E+01 +1.930049E+01 +3.161546E+00 +1.000275E+00 +3.068293E+00 +9.421307E-01 +1.072564E+01 +1.151347E+01 +1.388719E+01 +1.930049E+01 +3.161546E+00 +1.000275E+00 +3.068293E+00 +9.421307E-01 +1.072564E+01 +1.151347E+01 tally 2: -1.417551E+01 -2.010253E+01 -3.226230E+00 -1.041189E+00 -3.130685E+00 -9.804156E-01 -1.094928E+01 -1.199387E+01 +1.388719E+01 +1.930049E+01 +3.161546E+00 +1.000275E+00 +3.068293E+00 +9.421307E-01 +1.072564E+01 +1.151347E+01 diff --git a/tests/test_trigger_no_batch_interval/results_true.dat b/tests/test_trigger_no_batch_interval/results_true.dat index 4adde2afc1..3c9bfa98e8 100644 --- a/tests/test_trigger_no_batch_interval/results_true.dat +++ b/tests/test_trigger_no_batch_interval/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.945341E-01 2.319345E-03 +9.828074E-01 6.099782E-03 tally 1: -1.417551E+01 -2.010253E+01 -3.226230E+00 -1.041189E+00 -3.130685E+00 -9.804156E-01 -1.094928E+01 -1.199387E+01 -1.417551E+01 -2.010253E+01 -3.226230E+00 -1.041189E+00 -3.130685E+00 -9.804156E-01 -1.094928E+01 -1.199387E+01 +1.388719E+01 +1.930049E+01 +3.161546E+00 +1.000275E+00 +3.068293E+00 +9.421307E-01 +1.072564E+01 +1.151347E+01 +1.388719E+01 +1.930049E+01 +3.161546E+00 +1.000275E+00 +3.068293E+00 +9.421307E-01 +1.072564E+01 +1.151347E+01 tally 2: -1.417551E+01 -2.010253E+01 -3.226230E+00 -1.041189E+00 -3.130685E+00 -9.804156E-01 -1.094928E+01 -1.199387E+01 +1.388719E+01 +1.930049E+01 +3.161546E+00 +1.000275E+00 +3.068293E+00 +9.421307E-01 +1.072564E+01 +1.151347E+01 diff --git a/tests/test_trigger_no_status/results_true.dat b/tests/test_trigger_no_status/results_true.dat index 94c10b1253..8e12ff5f11 100644 --- a/tests/test_trigger_no_status/results_true.dat +++ b/tests/test_trigger_no_status/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.910702E-01 3.412288E-03 +9.917430E-01 1.687838E-02 tally 1: -7.085995E+00 -1.004872E+01 -1.615776E+00 -5.224041E-01 -1.569264E+00 -4.927483E-01 -5.470219E+00 -5.988844E+00 -7.085995E+00 -1.004872E+01 -1.615776E+00 -5.224041E-01 -1.569264E+00 -4.927483E-01 -5.470219E+00 -5.988844E+00 +6.979642E+00 +9.753201E+00 +1.591841E+00 +5.071926E-01 +1.545245E+00 +4.779221E-01 +5.387801E+00 +5.812351E+00 +6.979642E+00 +9.753201E+00 +1.591841E+00 +5.071926E-01 +1.545245E+00 +4.779221E-01 +5.387801E+00 +5.812351E+00 tally 2: -7.085995E+00 -1.004872E+01 -1.615776E+00 -5.224041E-01 -1.569264E+00 -4.927483E-01 -5.470219E+00 -5.988844E+00 +6.979642E+00 +9.753201E+00 +1.591841E+00 +5.071926E-01 +1.545245E+00 +4.779221E-01 +5.387801E+00 +5.812351E+00 diff --git a/tests/test_trigger_tallies/results_true.dat b/tests/test_trigger_tallies/results_true.dat index 4adde2afc1..3c9bfa98e8 100644 --- a/tests/test_trigger_tallies/results_true.dat +++ b/tests/test_trigger_tallies/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.945341E-01 2.319345E-03 +9.828074E-01 6.099782E-03 tally 1: -1.417551E+01 -2.010253E+01 -3.226230E+00 -1.041189E+00 -3.130685E+00 -9.804156E-01 -1.094928E+01 -1.199387E+01 -1.417551E+01 -2.010253E+01 -3.226230E+00 -1.041189E+00 -3.130685E+00 -9.804156E-01 -1.094928E+01 -1.199387E+01 +1.388719E+01 +1.930049E+01 +3.161546E+00 +1.000275E+00 +3.068293E+00 +9.421307E-01 +1.072564E+01 +1.151347E+01 +1.388719E+01 +1.930049E+01 +3.161546E+00 +1.000275E+00 +3.068293E+00 +9.421307E-01 +1.072564E+01 +1.151347E+01 tally 2: -1.417551E+01 -2.010253E+01 -3.226230E+00 -1.041189E+00 -3.130685E+00 -9.804156E-01 -1.094928E+01 -1.199387E+01 +1.388719E+01 +1.930049E+01 +3.161546E+00 +1.000275E+00 +3.068293E+00 +9.421307E-01 +1.072564E+01 +1.151347E+01 diff --git a/tests/test_uniform_fs/results_true.dat b/tests/test_uniform_fs/results_true.dat index 80fee7685a..dbde84bd88 100644 --- a/tests/test_uniform_fs/results_true.dat +++ b/tests/test_uniform_fs/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.495292E-01 1.234736E-02 +3.754438E-01 1.896941E-03 diff --git a/tests/test_union_energy_grids/results_true.dat b/tests/test_union_energy_grids/results_true.dat index 3958614d05..04c1a2b4cd 100644 --- a/tests/test_union_energy_grids/results_true.dat +++ b/tests/test_union_energy_grids/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.218570E-01 2.269572E-03 +3.195980E-01 5.629840E-03 diff --git a/tests/test_universe/results_true.dat b/tests/test_universe/results_true.dat index bf062f283c..cb1493aba2 100644 --- a/tests/test_universe/results_true.dat +++ b/tests/test_universe/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.938252E-01 5.852966E-03 +2.993693E-01 1.470880E-03 diff --git a/tests/test_void/results_true.dat b/tests/test_void/results_true.dat index fd78557fc9..fa9f4eb7a0 100644 --- a/tests/test_void/results_true.dat +++ b/tests/test_void/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.032938E+00 5.005507E-02 +1.015355E+00 3.427659E-02 From 0b50205ff71b667843b550fd188698d5548fe586 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sun, 6 Mar 2016 09:48:27 -0500 Subject: [PATCH 352/650] Fixed malformed error message in Library.get_mgxs(...) --- openmc/mgxs/library.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index a38e42d245..c36d8d516e 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -426,7 +426,7 @@ class Library(object): ---------- domain : Material or Cell or Universe or Integral The material, cell, or universe object of interest (or its ID) - mgxs_type : {'total', 'transport', 'absorption', 'capture', 'fission', 'nu-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'chi'} + mgxs_type : {'total', 'transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'chi'} The type of multi-group cross section object to return Returns @@ -457,7 +457,7 @@ class Library(object): break else: msg = 'Unable to find MGXS for {0} "{1}" in ' \ - 'library'.format(self.domain_type, domain) + 'library'.format(self.domain_type, domain_id) raise ValueError(msg) else: domain_id = domain.id From 748fb058d7a3339a1392512cd8dd6da23d7d1d3a Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sun, 6 Mar 2016 09:56:46 -0500 Subject: [PATCH 353/650] Now using checkvalue module for OpenCG compatiblity module --- openmc/opencg_compatible.py | 102 +++++++++--------------------------- 1 file changed, 24 insertions(+), 78 deletions(-) diff --git a/openmc/opencg_compatible.py b/openmc/opencg_compatible.py index 0bda48c160..cd45030631 100644 --- a/openmc/opencg_compatible.py +++ b/openmc/opencg_compatible.py @@ -11,6 +11,7 @@ except ImportError: import openmc from openmc.region import Intersection from openmc.surface import Halfspace +import openmc.checkvalue as cv # A dictionary of all OpenMC Materials created @@ -79,10 +80,7 @@ def get_opencg_material(openmc_material): """ - if not isinstance(openmc_material, openmc.Material): - msg = 'Unable to create an OpenCG Material from "{0}" ' \ - 'which is not an OpenMC Material'.format(openmc_material) - raise ValueError(msg) + cv.check_type('openmc_material', openmc_material, openmc.Material) global OPENCG_MATERIALS material_id = openmc_material.id @@ -119,10 +117,7 @@ def get_openmc_material(opencg_material): """ - if not isinstance(opencg_material, opencg.Material): - msg = 'Unable to create an OpenMC Material from "{0}" ' \ - 'which is not an OpenCG Material'.format(opencg_material) - raise ValueError(msg) + cv.check_type('opencg_material', opencg_material, opencg.Material) global OPENMC_MATERIALS material_id = opencg_material.id @@ -165,10 +160,7 @@ def is_opencg_surface_compatible(opencg_surface): """ - if not isinstance(opencg_surface, opencg.Surface): - msg = 'Unable to check if OpenCG Surface is compatible' \ - 'since "{0}" is not a Surface'.format(opencg_surface) - raise ValueError(msg) + cv.check_type('opencg_surface', opencg_surface, opencg.Surface) if opencg_surface.type in ['x-squareprism', 'y-squareprism', 'z-squareprism']: @@ -192,10 +184,7 @@ def get_opencg_surface(openmc_surface): """ - if not isinstance(openmc_surface, openmc.Surface): - msg = 'Unable to create an OpenCG Surface from "{0}" ' \ - 'which is not an OpenMC Surface'.format(openmc_surface) - raise ValueError(msg) + cv.check_type('openmc_surface', openmc_surface, openmc.Surface) global OPENCG_SURFACES surface_id = openmc_surface.id @@ -278,10 +267,7 @@ def get_openmc_surface(opencg_surface): """ - if not isinstance(opencg_surface, opencg.Surface): - msg = 'Unable to create an OpenMC Surface from "{0}" which ' \ - 'is not an OpenCG Surface'.format(opencg_surface) - raise ValueError(msg) + cv.check_type('opencg_surface', opencg_surface, opencg.Surface) global openmc_surface surface_id = opencg_surface.id @@ -369,10 +355,7 @@ def get_compatible_opencg_surfaces(opencg_surface): """ - if not isinstance(opencg_surface, opencg.Surface): - msg = 'Unable to create an OpenMC Surface from "{0}" which ' \ - 'is not an OpenCG Surface'.format(opencg_surface) - raise ValueError(msg) + cv.check_type('opencg_surface', opencg_surface, opencg.Surface) global OPENMC_SURFACES surface_id = opencg_surface.id @@ -451,10 +434,7 @@ def get_opencg_cell(openmc_cell): """ - if not isinstance(openmc_cell, openmc.Cell): - msg = 'Unable to create an OpenCG Cell from "{0}" which ' \ - 'is not an OpenMC Cell'.format(openmc_cell) - raise ValueError(msg) + cv.check_type('openmc_cell', openmc_cell, openmc.Cell) global OPENCG_CELLS cell_id = openmc_cell.id @@ -469,9 +449,9 @@ def get_opencg_cell(openmc_cell): fill = openmc_cell.fill - if (openmc_cell.fill_type == 'material'): + if openmc_cell.fill_type == 'material': opencg_cell.fill = get_opencg_material(fill) - elif (openmc_cell.fill_type == 'universe'): + elif openmc_cell.fill_type == 'universe': opencg_cell.fill = get_opencg_universe(fill) else: opencg_cell.fill = get_opencg_lattice(fill) @@ -533,20 +513,10 @@ def get_compatible_opencg_cells(opencg_cell, opencg_surface, halfspace): OpenMC """ - if not isinstance(opencg_cell, opencg.Cell): - msg = 'Unable to create compatible OpenMC Cell from "{0}" which ' \ - 'is not an OpenCG Cell'.format(opencg_cell) - raise ValueError(msg) - elif not isinstance(opencg_surface, opencg.Surface): - msg = 'Unable to create compatible OpenMC Cell since "{0}" is ' \ - 'not an OpenCG Surface'.format(opencg_surface) - raise ValueError(msg) - - elif halfspace not in [-1, +1]: - msg = 'Unable to create compatible Cell since "{0}"' \ - 'is not a +/-1 halfspace'.format(halfspace) - raise ValueError(msg) + cv.check_type('opencg_cell', opencg_cell, opencg.Cell) + cv.check_type('opencg_surface', opencg_surface, opencg.Surface) + cv.check_value('halfspace', halfspace, (-1, +1)) # Initialize an empty list for the new compatible cells compatible_cells = [] @@ -575,7 +545,7 @@ def get_compatible_opencg_cells(opencg_cell, opencg_surface, halfspace): num_clones = 8 for clone_id in range(num_clones): - # Create a cloned OpenCG Cell with Surfaces compatible with OpenMC + # Create cloned OpenCG Cell with Surfaces compatible with OpenMC clone = opencg_cell.clone() compatible_cells.append(clone) @@ -641,10 +611,7 @@ def make_opencg_cells_compatible(opencg_universe): """ - if not isinstance(opencg_universe, opencg.Universe): - msg = 'Unable to make compatible OpenCG Cells for "{0}" which ' \ - 'is not an OpenCG Universe'.format(opencg_universe) - raise ValueError(msg) + cv.check_type('opencg_universe', opencg_universe, opencg.Universe) # Check all OpenCG Cells in this Universe for compatibility with OpenMC opencg_cells = opencg_universe.cells @@ -700,10 +667,7 @@ def get_openmc_cell(opencg_cell): """ - if not isinstance(opencg_cell, opencg.Cell): - msg = 'Unable to create an OpenMC Cell from "{0}" which ' \ - 'is not an OpenCG Cell'.format(opencg_cell) - raise ValueError(msg) + cv.check_type('opencg_cell', opencg_cell, opencg.Cell) global OPENMC_CELLS cell_id = opencg_cell.id @@ -718,9 +682,9 @@ def get_openmc_cell(opencg_cell): fill = opencg_cell.fill - if (opencg_cell.type == 'universe'): + if opencg_cell.type == 'universe': openmc_cell.fill = get_openmc_universe(fill) - elif (opencg_cell.type == 'lattice'): + elif opencg_cell.type == 'lattice': openmc_cell.fill = get_openmc_lattice(fill) else: openmc_cell.fill = get_openmc_material(fill) @@ -764,10 +728,7 @@ def get_opencg_universe(openmc_universe): """ - if not isinstance(openmc_universe, openmc.Universe): - msg = 'Unable to create an OpenCG Universe from "{0}" which ' \ - 'is not an OpenMC Universe'.format(openmc_universe) - raise ValueError(msg) + cv.check_type('openmc_universe', openmc_universe, openmc.Universe) global OPENCG_UNIVERSES universe_id = openmc_universe.id @@ -811,10 +772,7 @@ def get_openmc_universe(opencg_universe): """ - if not isinstance(opencg_universe, opencg.Universe): - msg = 'Unable to create an OpenMC Universe from "{0}" which ' \ - 'is not an OpenCG Universe'.format(opencg_universe) - raise ValueError(msg) + cv.check_type('opencg_universe', opencg_universe, opencg.Universe) global OPENMC_UNIVERSES universe_id = opencg_universe.id @@ -861,10 +819,7 @@ def get_opencg_lattice(openmc_lattice): """ - if not isinstance(openmc_lattice, openmc.Lattice): - msg = 'Unable to create an OpenCG Lattice from "{0}" which ' \ - 'is not an OpenMC Lattice'.format(openmc_lattice) - raise ValueError(msg) + cv.check_type('openmc_lattice', openmc_lattice, openmc.Lattice) global OPENCG_LATTICES lattice_id = openmc_lattice.id @@ -958,10 +913,7 @@ def get_openmc_lattice(opencg_lattice): """ - if not isinstance(opencg_lattice, opencg.Lattice): - msg = 'Unable to create an OpenMC Lattice from "{0}" which ' \ - 'is not an OpenCG Lattice'.format(opencg_lattice) - raise ValueError(msg) + cv.check_type('opencg_lattice', opencg_lattice, opencg.Lattice) global OPENMC_LATTICES lattice_id = opencg_lattice.id @@ -1032,10 +984,7 @@ def get_opencg_geometry(openmc_geometry): """ - if not isinstance(openmc_geometry, openmc.Geometry): - msg = 'Unable to get OpenCG geometry from "{0}" which is ' \ - 'not an OpenMC Geometry object'.format(openmc_geometry) - raise ValueError(msg) + cv.check_type('openmc_geometry', openmc_geometry, openmc.Geometry) # Clear dictionaries and auto-generated IDs OPENMC_SURFACES.clear() @@ -1072,10 +1021,7 @@ def get_openmc_geometry(opencg_geometry): """ - if not isinstance(opencg_geometry, opencg.Geometry): - msg = 'Unable to get OpenMC geometry from "{0}" which is ' \ - 'not an OpenCG Geometry object'.format(opencg_geometry) - raise ValueError(msg) + cv.check_type('opencg_geometry', opencg_geometry, opencg.Geometry) # Deep copy the goemetry since it may be modified to make all Surfaces # compatible with OpenMC's specifications From 1f33f93e63472063e27336eae163db8b13c57176 Mon Sep 17 00:00:00 2001 From: jingang Date: Mon, 7 Mar 2016 10:22:22 -0500 Subject: [PATCH 354/650] Implemented in a different way: using a additional stream ('STREAM_URR_PTABLE') to sample urr prn --- src/constants.F90 | 9 +- src/cross_section.F90 | 10 +- src/global.F90 | 13 +- src/physics.F90 | 9 +- src/random_lcg.F90 | 15 +- src/tracking.F90 | 14 +- .../test_asymmetric_lattice/results_true.dat | 2 +- tests/test_cmfd_feed/results_true.dat | 502 +-- tests/test_cmfd_nofeed/results_true.dat | 502 +-- tests/test_complex_cell/results_true.dat | 18 +- .../results_true.dat | 6 +- tests/test_density/results_true.dat | 2 +- tests/test_distribmat/results_true.dat | 2 +- .../results_true.dat | 2 +- .../results_true.dat | 2 +- tests/test_energy_grid/results_true.dat | 2 +- tests/test_energy_laws/results_true.dat | 2 +- tests/test_entropy/results_true.dat | 20 +- .../case-1/results_true.dat | 20 +- .../case-2/results_true.dat | 16 +- .../case-3/results_true.dat | 2 +- .../case-4/results_true.dat | 28 +- tests/test_filter_mesh_2d/results_true.dat | 558 +-- tests/test_filter_mesh_3d/results_true.dat | 1706 ++++---- tests/test_fixed_source/results_true.dat | 4 +- tests/test_infinite_cell/results_true.dat | 2 +- tests/test_lattice/results_true.dat | 2 +- tests/test_lattice_hex/results_true.dat | 2 +- tests/test_lattice_mixed/results_true.dat | 2 +- tests/test_lattice_multiple/results_true.dat | 2 +- .../results_true.dat | 52 +- .../results_true.dat | 6 +- tests/test_mgxs_library_hdf5/results_true.dat | 102 +- .../results_true.dat | 102 +- .../results_true.dat | 980 ++--- tests/test_natural_element/results_true.dat | 2 +- tests/test_output/results_true.dat | 2 +- .../results_true.dat | 10 +- .../test_particle_restart_eigval.py | 2 +- tests/test_quadric_surfaces/results_true.dat | 2 +- tests/test_reflective_plane/results_true.dat | 2 +- .../results_true.dat | 2 +- tests/test_rotation/results_true.dat | 2 +- tests/test_salphabeta/results_true.dat | 2 +- tests/test_score_current/results_true.dat | 2 +- tests/test_seed/results_true.dat | 2 +- tests/test_source/results_true.dat | 2 +- tests/test_source_file/results_true.dat | 2 +- .../test_sourcepoint_latest/results_true.dat | 2 +- .../test_sourcepoint_restart/results_true.dat | 3596 ++++++++--------- tests/test_statepoint_batch/results_true.dat | 2 +- .../test_statepoint_interval/results_true.dat | 2 +- .../test_statepoint_restart/results_true.dat | 3596 ++++++++--------- .../results_true.dat | 2 +- tests/test_survival_biasing/results_true.dat | 34 +- tests/test_tallies/results_true.dat | 2 +- tests/test_tally_aggregation/results_true.dat | 2 +- tests/test_tally_assumesep/results_true.dat | 14 +- tests/test_tally_nuclides/results_true.dat | 50 +- tests/test_tally_slice_merge/results_true.dat | 64 +- tests/test_trace/results_true.dat | 2 +- tests/test_translation/results_true.dat | 2 +- .../results_true.dat | 50 +- .../results_true.dat | 50 +- tests/test_trigger_no_status/results_true.dat | 50 +- tests/test_trigger_tallies/results_true.dat | 50 +- tests/test_uniform_fs/results_true.dat | 2 +- .../test_union_energy_grids/results_true.dat | 2 +- tests/test_universe/results_true.dat | 2 +- tests/test_void/results_true.dat | 2 +- 70 files changed, 6157 insertions(+), 6173 deletions(-) diff --git a/src/constants.F90 b/src/constants.F90 index 0c6f09cdda..5d91d2be8f 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -365,10 +365,11 @@ module constants ! ============================================================================ ! RANDOM NUMBER STREAM CONSTANTS - integer, parameter :: N_STREAMS = 3 - integer, parameter :: STREAM_TRACKING = 1 - integer, parameter :: STREAM_TALLIES = 2 - integer, parameter :: STREAM_SOURCE = 3 + integer, parameter :: N_STREAMS = 4 + integer, parameter :: STREAM_TRACKING = 1 + integer, parameter :: STREAM_TALLIES = 2 + integer, parameter :: STREAM_SOURCE = 3 + integer, parameter :: STREAM_URR_PTABLE = 4 ! ============================================================================ ! MISCELLANEOUS CONSTANTS diff --git a/src/cross_section.F90 b/src/cross_section.F90 index a668707145..5ae113b005 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -10,7 +10,7 @@ module cross_section use material_header, only: Material use nuclide_header use particle_header, only: Particle - use random_lcg, only: prn, get_prn_ahead + use random_lcg, only: prn, get_prn_ahead, prn_set_stream use sab_header, only: SAlphaBeta use search, only: binary_search @@ -387,13 +387,13 @@ contains ! sample probability table using the cumulative distribution - ! Random numbers for xs calculation are sampled by skipping ahead - ! f(zaid) times from the seed 'xs_seed' + 'zaid'. + ! Random numbers for xs calculation are sampled from a separated stream. ! This guarantees the randomness and, at the same time, makes sure we reuse ! random number for the same nuclide at different temperatures, therefore ! preserving correlation of temperature in probability tables. - r = get_prn_ahead(int(nuc_zaid_dict % get_key(nuc % zaid), 8), & - xs_seed + nuc % zaid) + call prn_set_stream(STREAM_URR_PTABLE) + r = get_prn_ahead(int(nuc_zaid_dict % get_key(nuc % zaid), 8)) + call prn_set_stream(STREAM_TRACKING) i_low = 1 do diff --git a/src/global.F90 b/src/global.F90 index 93fe3c5984..6befa828ff 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -104,18 +104,9 @@ module global ! What to assume for expanding natural elements integer :: default_expand = ENDF_BVII1 - ! Random number seed for cross sections, specially for URR ptables - ! This number is shared by all nuclides and updated after particle - ! changed its energy. - integer(8) :: xs_seed = 1_8 - - ! Dictionary to look up the skip distance to get prn when sampling URR - type(DictIntInt) :: nuc_zaid_dict - - ! Total amount of nuclide zaid instances + ! Total amount of nuclide ZAID and dictionary of nuclide ZAID and index integer(8) :: n_nuc_zaid_total - -!$omp threadprivate(xs_seed) + type(DictIntInt) :: nuc_zaid_dict ! ============================================================================ ! MULTI-GROUP CROSS SECTION RELATED VARIABLES diff --git a/src/physics.F90 b/src/physics.F90 index e41b3b4e9e..faeec1b8a8 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -16,7 +16,7 @@ module physics use particle_header, only: Particle use particle_restart_write, only: write_particle_restart use physics_common - use random_lcg, only: prn + use random_lcg, only: prn, prn_skip, prn_set_stream use search, only: binary_search use secondary_uncorrelated, only: UncorrelatedAngleEnergy use string, only: to_str @@ -58,6 +58,13 @@ contains if (master) call warning("Killing neutron with extremely low energy") end if + ! Advance URR seed stream 'N' times after energy changes + if (p % E /= p % last_E) then + call prn_set_stream(STREAM_URR_PTABLE) + call prn_skip(n_nuc_zaid_total) + call prn_set_stream(STREAM_TRACKING) + endif + end subroutine collision !=============================================================================== diff --git a/src/random_lcg.F90 b/src/random_lcg.F90 index 755ee673ff..4e98a06630 100644 --- a/src/random_lcg.F90 +++ b/src/random_lcg.F90 @@ -11,7 +11,7 @@ module random_lcg integer(8), public :: seed = 1_8 integer(8) :: prn_seed0 ! original seed - integer(8), public :: prn_seed(N_STREAMS) ! current seed + integer(8) :: prn_seed(N_STREAMS) ! current seed integer(8) :: prn_mult ! multiplication factor, g integer(8) :: prn_add ! additive factor, c integer :: prn_bits ! number of bits, M @@ -25,7 +25,6 @@ module random_lcg public :: prn public :: get_prn_ahead - public :: prn_skip_ahead public :: initialize_prng public :: set_particle_seed public :: prn_skip @@ -55,21 +54,17 @@ contains end function prn !=============================================================================== -! GET_PRN_AHEAD generates a pseudo-random number which is 'n' times ahead from a -! specific seed. This function does not changed current LCG status. +! GET_PRN_AHEAD generates a pseudo-random number which is 'n' times ahead from +! current seed. !=============================================================================== - function get_prn_ahead(n, seed) result(pseudo_rn) + function get_prn_ahead(n) result(pseudo_rn) integer(8), intent(in) :: n ! number of prns to skip - integer(8), intent(in) :: seed ! starting seed real(8) :: pseudo_rn - ! prn_skip_ahead(n, seed) return the new seed S(n) - ! Xi(n) = S(n) / M - - pseudo_rn = prn_skip_ahead(n, seed) * prn_norm + pseudo_rn = prn_skip_ahead(n, prn_seed(stream)) * prn_norm end function get_prn_ahead diff --git a/src/tracking.F90 b/src/tracking.F90 index 7c500a8164..e634112bc6 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -1,6 +1,6 @@ module tracking - use constants, only: MODE_EIGENVALUE, STREAM_TRACKING + use constants, only: MODE_EIGENVALUE use cross_section, only: calculate_xs use error, only: fatal_error, warning use geometry, only: find_cell, distance_to_boundary, cross_surface, & @@ -12,7 +12,7 @@ module tracking use particle_header, only: LocalCoord, Particle use physics, only: collision use physics_mg, only: collision_mg - use random_lcg, only: prn, prn_seed, prn_skip_ahead + use random_lcg, only: prn use string, only: to_str use tally, only: score_analog_tally, score_tracklength_tally, & score_collision_tally, score_surface_current @@ -59,9 +59,6 @@ contains micro_xs % last_E = ZERO end if - ! Set xs_seed to be current tracking prn seed - xs_seed = prn_seed(STREAM_TRACKING) - ! Prepare to write out particle track. if (p % write_track) then call initialize_particle_track() @@ -200,10 +197,6 @@ contains ! re-evaluated p % last_material = NONE - ! Advance xs_seed N times ahead to avoid re-using prn - if (p % E /= p % last_E) & - xs_seed = prn_skip_ahead(n_nuc_zaid_total, xs_seed) - ! Set all uvws to base level -- right now, after a collision, only the ! base level uvws are changed do j = 1, p % n_coord - 1 @@ -234,9 +227,6 @@ contains p % n_secondary = p % n_secondary - 1 n_event = 0 - ! Set xs_seed to be current tracking prn seed for new particle - xs_seed = prn_seed(STREAM_TRACKING) - ! Enter new particle in particle track file if (p % write_track) call add_particle_track() else diff --git a/tests/test_asymmetric_lattice/results_true.dat b/tests/test_asymmetric_lattice/results_true.dat index fa3a412a57..31b09c4da4 100644 --- a/tests/test_asymmetric_lattice/results_true.dat +++ b/tests/test_asymmetric_lattice/results_true.dat @@ -1 +1 @@ -e059d757333d522575bfac076cbf2faa0212062b16e200c021c79e0cbeb378f6dc70e011b2bf910d507e3b14fe01330a7a07474ec113321cfcd42d9fb41c7053 \ No newline at end of file +219ee21902e83b0f1b8e92ca4977db998e3a4a5ca36da5be9490f9ec4f30ab90cf15a257fe4113d2f1f9eb85cab159ed65638412b9751ce786d263870c208581 \ No newline at end of file diff --git a/tests/test_cmfd_feed/results_true.dat b/tests/test_cmfd_feed/results_true.dat index 36cc01d84d..4579fa5459 100644 --- a/tests/test_cmfd_feed/results_true.dat +++ b/tests/test_cmfd_feed/results_true.dat @@ -1,128 +1,128 @@ k-combined: -1.182357E+00 5.974030E-03 +1.169891E+00 6.289481E-03 tally 1: -1.088662E+01 -1.190872E+01 -2.048880E+01 -4.219873E+01 -2.876282E+01 -8.305037E+01 -3.379778E+01 -1.144766E+02 -3.770283E+01 -1.426032E+02 -3.830206E+01 -1.471567E+02 -3.592772E+01 -1.292701E+02 -2.991123E+01 -8.986773E+01 -2.146951E+01 -4.617825E+01 -1.203028E+01 -1.448499E+01 +1.173921E+01 +1.385460E+01 +2.164076E+01 +4.699369E+01 +2.906462E+01 +8.464935E+01 +3.382312E+01 +1.147095E+02 +3.632006E+01 +1.323878E+02 +3.655412E+01 +1.341064E+02 +3.347756E+01 +1.124264E+02 +2.931337E+01 +8.607243E+01 +2.182947E+01 +4.789563E+01 +1.147668E+01 +1.325716E+01 tally 2: -2.194698E+01 -2.431353E+01 -1.531030E+01 -1.183711E+01 -2.005791E+00 -2.073861E-01 -4.066089E+01 -8.307356E+01 -2.875607E+01 -4.160648E+01 -3.795240E+00 -7.283392E-01 -5.694473E+01 -1.629010E+02 -4.039366E+01 -8.198752E+01 -5.355319E+00 -1.450356E+00 -6.785682E+01 -2.311231E+02 -4.850705E+01 -1.181432E+02 -6.096531E+00 -1.875560E+00 -7.450798E+01 -2.784140E+02 -5.308226E+01 -1.413486E+02 -6.833051E+00 -2.357243E+00 -7.509346E+01 -2.831529E+02 -5.357157E+01 -1.441080E+02 -6.871605E+00 -2.376576E+00 -6.981210E+01 -2.445219E+02 -4.976894E+01 -1.243009E+02 -6.297010E+00 -2.008175E+00 -5.844228E+01 -1.716823E+02 -4.161341E+01 -8.709864E+01 -5.266312E+00 -1.407459E+00 -4.264401E+01 -9.124183E+01 -3.019716E+01 -4.575834E+01 -4.214008E+00 -8.998009E-01 -2.360554E+01 -2.810966E+01 -1.651062E+01 -1.374852E+01 -2.253099E+00 -2.643227E-01 +2.298190E+01 +2.667071E+01 +1.600292E+01 +1.293670E+01 +2.252427E+00 +2.605738E-01 +4.268506E+01 +9.161215E+01 +3.022909E+01 +4.598915E+01 +3.873926E+00 +7.615035E-01 +5.680399E+01 +1.623878E+02 +4.033805E+01 +8.196263E+01 +5.280610E+00 +1.414008E+00 +6.814741E+01 +2.331778E+02 +4.851618E+01 +1.182330E+02 +6.261805E+00 +1.983205E+00 +7.392922E+01 +2.740255E+02 +5.253586E+01 +1.384152E+02 +6.733810E+00 +2.278242E+00 +7.332860E+01 +2.698608E+02 +5.227405E+01 +1.371810E+02 +6.714658E+00 +2.273652E+00 +6.830172E+01 +2.340687E+02 +4.867159E+01 +1.188724E+02 +6.215002E+00 +1.956978E+00 +5.885634E+01 +1.736180E+02 +4.170434E+01 +8.719622E+01 +5.253064E+00 +1.396224E+00 +4.372001E+01 +9.593570E+01 +3.106511E+01 +4.844647E+01 +3.817991E+00 +7.509063E-01 +2.338260E+01 +2.752103E+01 +1.636606E+01 +1.347591E+01 +2.220013E+00 +2.515671E-01 tally 3: -1.477479E+01 -1.102597E+01 -9.629052E-01 -4.805270E-02 -2.767228E+01 -3.853758E+01 -1.875024E+00 -1.791921E-01 -3.889173E+01 -7.603662E+01 -2.514324E+00 -3.179473E-01 -4.669914E+01 -1.095214E+02 -2.899863E+00 -4.244220E-01 -5.113294E+01 -1.311853E+02 -3.370751E+00 -5.745169E-01 -5.155018E+01 -1.334689E+02 -3.240491E+00 -5.309493E-01 -4.798026E+01 -1.155563E+02 -3.140727E+00 -4.976607E-01 -4.006831E+01 -8.074622E+01 -2.652324E+00 -3.555555E-01 -2.910962E+01 -4.252913E+01 -1.868334E+00 -1.764790E-01 -1.594882E+01 -1.283117E+01 -1.050541E+00 -5.741461E-02 +1.538752E+01 +1.196478E+01 +1.079685E+00 +6.010786E-02 +2.911906E+01 +4.269070E+01 +1.822657E+00 +1.671851E-01 +3.885421E+01 +7.608218E+01 +2.541517E+00 +3.262452E-01 +4.673300E+01 +1.097036E+02 +2.885308E+00 +4.214444E-01 +5.059247E+01 +1.283984E+02 +3.222797E+00 +5.237329E-01 +5.034856E+01 +1.272538E+02 +3.230225E+00 +5.273425E-01 +4.688476E+01 +1.103152E+02 +2.941287E+00 +4.363750E-01 +4.013746E+01 +8.077506E+01 +2.634234E+00 +3.520271E-01 +2.996995E+01 +4.510282E+01 +1.946504E+00 +1.919104E-01 +1.575153E+01 +1.248536E+01 +1.020705E+00 +5.413570E-02 tally 4: 0.000000E+00 0.000000E+00 @@ -160,8 +160,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.970156E+00 -4.442680E-01 +3.049469E+00 +4.677325E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -208,10 +208,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.256812E+00 -1.387940E+00 -2.600466E+00 -3.411564E-01 +5.514939E+00 +1.528899E+00 +2.770358E+00 +3.879191E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -256,10 +256,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.205451E+00 -2.606110E+00 -5.064606E+00 -1.288462E+00 +7.294002E+00 +2.675589E+00 +5.032131E+00 +1.275040E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -304,10 +304,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.686485E+00 -3.787609E+00 -7.168705E+00 -2.578927E+00 +8.668860E+00 +3.776102E+00 +7.036008E+00 +2.490719E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -352,10 +352,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.401928E+00 -4.436352E+00 -8.541906E+00 -3.659201E+00 +9.345868E+00 +4.380719E+00 +8.352414E+00 +3.501945E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -400,10 +400,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.281127E+00 -4.316075E+00 -9.309092E+00 -4.349093E+00 +9.223771E+00 +4.270119E+00 +9.093766E+00 +4.158282E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -448,10 +448,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.714652E+00 -3.818254E+00 -9.438396E+00 -4.478823E+00 +8.530966E+00 +3.651778E+00 +9.219150E+00 +4.264346E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -496,10 +496,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.224112E+00 -2.623879E+00 -8.791109E+00 -3.886534E+00 +7.204424E+00 +2.604203E+00 +8.690373E+00 +3.785262E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -544,10 +544,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.268159E+00 -1.396589E+00 -7.474226E+00 -2.802732E+00 +5.326721E+00 +1.426975E+00 +7.513640E+00 +2.833028E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -592,10 +592,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.786206E+00 -3.930708E-01 -5.555956E+00 -1.549697E+00 +2.847310E+00 +4.090440E-01 +5.661144E+00 +1.607138E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -642,8 +642,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -3.146865E+00 -4.971483E-01 +3.025812E+00 +4.597241E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -662,114 +662,114 @@ k cmfd 0.000000E+00 0.000000E+00 0.000000E+00 -1.188165E+00 -1.185424E+00 -1.186077E+00 -1.186240E+00 -1.180518E+00 -1.182338E+00 -1.176633E+00 -1.173733E+00 -1.183101E+00 -1.187581E+00 -1.187456E+00 -1.182071E+00 -1.181707E+00 -1.182390E+00 -1.185681E+00 -1.184114E+00 +1.170416E+00 +1.172966E+00 +1.165537E+00 +1.170979E+00 +1.161922E+00 +1.157523E+00 +1.158873E+00 +1.162877E+00 +1.167102E+00 +1.168130E+00 +1.170570E+00 +1.168115E+00 +1.174081E+00 +1.169458E+00 +1.167848E+00 +1.165116E+00 cmfd entropy 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.221649E+00 -3.223000E+00 -3.222787E+00 -3.217662E+00 -3.216780E+00 -3.217779E+00 -3.216196E+00 -3.216949E+00 -3.215722E+00 -3.213663E+00 -3.212987E+00 -3.214740E+00 -3.216346E+00 -3.218373E+00 -3.218918E+00 -3.218693E+00 +3.203643E+00 +3.207943E+00 +3.213367E+00 +3.214360E+00 +3.219634E+00 +3.222232E+00 +3.221744E+00 +3.224544E+00 +3.225990E+00 +3.227769E+00 +3.227417E+00 +3.230728E+00 +3.231662E+00 +3.233316E+00 +3.233193E+00 +3.232564E+00 cmfd balance 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.065965E-03 -3.525507E-03 -3.021079E-03 -2.955766E-03 -2.838990E-03 -2.857085E-03 -2.260444E-03 -2.098638E-03 -2.096129E-03 -1.901194E-03 -1.977879E-03 -1.713346E-03 -1.550359E-03 -1.354824E-03 -1.132190E-03 -1.161818E-03 +4.009063E-03 +4.431773E-03 +3.152698E-03 +3.510424E-03 +2.052087E-03 +2.068633E-03 +1.502416E-03 +1.589822E-03 +1.566016E-03 +1.219159E-03 +1.017888E-03 +9.771569E-04 +1.010126E-03 +1.073397E-03 +1.172784E-03 +9.827488E-04 cmfd dominance ratio 0.000E+00 0.000E+00 0.000E+00 0.000E+00 - 5.454E-01 - 5.414E-01 - 5.478E-01 - 5.459E-01 - 5.472E-01 - 5.326E-01 - 5.474E-01 - 5.472E-01 - 5.447E-01 - 5.411E-01 - 5.404E-01 - 5.427E-01 - 5.443E-01 - 5.453E-01 - 5.448E-01 - 5.449E-01 + 5.397E-01 + 5.425E-01 + 5.481E-01 + 5.473E-01 + 5.503E-01 + 5.502E-01 + 5.483E-01 + 5.520E-01 + 5.505E-01 + 3.216E-01 + 5.373E-01 + 5.517E-01 + 5.508E-01 + 5.524E-01 + 5.524E-01 + 5.523E-01 cmfd openmc source comparison 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -7.780512E-03 -5.257528E-03 -4.347076E-03 -4.603868E-03 -5.268996E-03 -3.413250E-03 -4.217852E-03 -3.250039E-03 -4.404406E-03 -4.238172E-03 -3.834536E-03 -3.319549E-03 -2.393064E-03 -1.907225E-03 -1.855030E-03 -1.959869E-03 +6.959835E-03 +5.655657E-03 +3.886178E-03 +4.035110E-03 +3.043277E-03 +5.455479E-03 +4.515313E-03 +2.439842E-03 +2.114036E-03 +2.673135E-03 +2.431753E-03 +4.330931E-03 +3.404650E-03 +3.680302E-03 +3.309625E-03 +3.705544E-03 cmfd source -4.027103E-02 -7.892225E-02 -1.063098E-01 -1.229671E-01 -1.434918E-01 -1.383041E-01 -1.341394E-01 -1.130845E-01 -7.866073E-02 -4.384927E-02 +4.697085E-02 +7.920706E-02 +1.107968E-01 +1.250932E-01 +1.383930E-01 +1.380648E-01 +1.246874E-01 +1.113705E-01 +8.203754E-02 +4.337882E-02 diff --git a/tests/test_cmfd_nofeed/results_true.dat b/tests/test_cmfd_nofeed/results_true.dat index 270b46752b..d8a17d676b 100644 --- a/tests/test_cmfd_nofeed/results_true.dat +++ b/tests/test_cmfd_nofeed/results_true.dat @@ -1,128 +1,128 @@ k-combined: -1.175970E+00 1.022524E-02 +1.167381E+00 9.433736E-03 tally 1: -1.158237E+01 -1.352745E+01 -2.179923E+01 -4.823751E+01 -2.918721E+01 -8.579451E+01 -3.411842E+01 -1.167131E+02 -3.714172E+01 -1.382918E+02 -3.783707E+01 -1.437136E+02 -3.614436E+01 -1.309976E+02 -2.969137E+01 -8.849248E+01 -2.111839E+01 -4.471900E+01 -1.133459E+01 -1.289353E+01 +1.196136E+01 +1.442468E+01 +2.133857E+01 +4.600706E+01 +2.874353E+01 +8.287538E+01 +3.400779E+01 +1.158949E+02 +3.736443E+01 +1.398466E+02 +3.705095E+01 +1.376767E+02 +3.486173E+01 +1.220362E+02 +2.910935E+01 +8.507181E+01 +2.034762E+01 +4.156717E+01 +1.074970E+01 +1.160733E+01 tally 2: -2.285666E+01 -2.632725E+01 -1.592200E+01 -1.279985E+01 -2.354335E+00 -2.818304E-01 -4.206665E+01 -8.923811E+01 -2.971400E+01 -4.458975E+01 -4.024411E+00 -8.205124E-01 -5.769235E+01 -1.671496E+02 -4.092500E+01 -8.415372E+01 -5.406039E+00 -1.478617E+00 -6.816911E+01 -2.331129E+02 -4.867500E+01 -1.188855E+02 -6.103922E+00 -1.881092E+00 -7.441705E+01 -2.776763E+02 -5.332500E+01 -1.425916E+02 -6.670349E+00 -2.252978E+00 -7.501123E+01 -2.821949E+02 -5.369500E+01 -1.446772E+02 -6.711425E+00 -2.274957E+00 -7.001950E+01 -2.460955E+02 -5.000600E+01 -1.255806E+02 -6.490622E+00 -2.130330E+00 -5.803532E+01 -1.691736E+02 -4.150500E+01 -8.653752E+01 -5.356227E+00 -1.455369E+00 -4.231248E+01 -8.984067E+01 -3.012800E+01 -4.555195E+01 -4.023117E+00 -8.251027E-01 -2.326609E+01 -2.729288E+01 -1.636300E+01 -1.348720E+01 -2.043151E+00 -2.201626E-01 +2.321994E+01 +2.726751E+01 +1.624000E+01 +1.334217E+01 +2.239367E+00 +2.607315E-01 +4.184801E+01 +8.813953E+01 +2.955600E+01 +4.401685E+01 +3.937924E+00 +7.877545E-01 +5.620223E+01 +1.589242E+02 +3.981400E+01 +7.983679E+01 +5.183337E+00 +1.367303E+00 +6.834724E+01 +2.342244E+02 +4.869600E+01 +1.189597E+02 +6.288549E+00 +1.997858E+00 +7.481522E+01 +2.802998E+02 +5.346500E+01 +1.431835E+02 +6.691123E+00 +2.252645E+00 +7.381412E+01 +2.733775E+02 +5.269700E+01 +1.393729E+02 +6.846095E+00 +2.360683E+00 +6.907775E+01 +2.396751E+02 +4.918500E+01 +1.215909E+02 +6.400076E+00 +2.073871E+00 +5.783260E+01 +1.680814E+02 +4.107800E+01 +8.480751E+01 +5.269220E+00 +1.404986E+00 +4.120212E+01 +8.516646E+01 +2.930300E+01 +4.310295E+01 +3.730803E+00 +7.015777E-01 +2.228419E+01 +2.504033E+01 +1.554100E+01 +1.217931E+01 +2.126451E+00 +2.315275E-01 tally 3: -1.532800E+01 -1.186246E+01 -1.054240E+00 -5.699889E-02 -2.862200E+01 -4.139083E+01 -1.917898E+00 -1.872272E-01 -3.941000E+01 -7.805265E+01 -2.548698E+00 -3.263827E-01 -4.685700E+01 -1.101835E+02 -2.915064E+00 -4.273240E-01 -5.143600E+01 -1.326606E+02 -3.195201E+00 -5.159753E-01 -5.172300E+01 -1.342849E+02 -3.397114E+00 -5.811083E-01 -4.816600E+01 -1.165387E+02 -2.996374E+00 -4.526135E-01 -4.001200E+01 -8.042168E+01 -2.615438E+00 -3.486860E-01 -2.903100E+01 -4.229303E+01 -1.899116E+00 -1.823251E-01 -1.575800E+01 -1.251088E+01 -1.015498E+00 -5.311788E-02 +1.561100E+01 +1.233967E+01 +1.095984E+00 +6.181387E-02 +2.847800E+01 +4.088161E+01 +1.815210E+00 +1.669969E-01 +3.834200E+01 +7.408022E+01 +2.446117E+00 +3.017834E-01 +4.687600E+01 +1.102381E+02 +2.954924E+00 +4.412809E-01 +5.155100E+01 +1.331461E+02 +3.204714E+00 +5.178544E-01 +5.067700E+01 +1.289238E+02 +3.246710E+00 +5.326374E-01 +4.738600E+01 +1.128834E+02 +3.035962E+00 +4.640211E-01 +3.953600E+01 +7.858196E+01 +2.507574E+00 +3.186456E-01 +2.819300E+01 +3.991455E+01 +1.846612E+00 +1.725570E-01 +1.497500E+01 +1.131312E+01 +9.213728E-01 +4.422001E-02 tally 4: 0.000000E+00 0.000000E+00 @@ -160,8 +160,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -3.061000E+00 -4.712730E-01 +3.090000E+00 +4.810640E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -208,10 +208,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.495000E+00 -1.521499E+00 -2.783000E+00 -3.954290E-01 +5.555000E+00 +1.551579E+00 +2.833000E+00 +4.078910E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -256,10 +256,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.290000E+00 -2.671490E+00 -5.148000E+00 -1.340000E+00 +7.271000E+00 +2.659755E+00 +5.095000E+00 +1.310819E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -304,10 +304,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.720000E+00 -3.820712E+00 -7.225000E+00 -2.625189E+00 +8.577000E+00 +3.703215E+00 +7.026000E+00 +2.486552E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -352,10 +352,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.361000E+00 -4.398063E+00 -8.510000E+00 -3.633548E+00 +9.393000E+00 +4.422429E+00 +8.572000E+00 +3.680852E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -400,10 +400,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.354000E+00 -4.392402E+00 -9.308000E+00 -4.353558E+00 +9.265000E+00 +4.305625E+00 +9.261000E+00 +4.304411E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -448,10 +448,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.645000E+00 -3.752875E+00 -9.473000E+00 -4.510221E+00 +8.535000E+00 +3.659395E+00 +9.303000E+00 +4.350791E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -496,10 +496,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.224000E+00 -2.621330E+00 -8.753000E+00 -3.851203E+00 +7.104000E+00 +2.544182E+00 +8.693000E+00 +3.799545E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -544,10 +544,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.181000E+00 -1.346925E+00 -7.383000E+00 -2.733921E+00 +5.168000E+00 +1.344390E+00 +7.334000E+00 +2.700052E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -592,10 +592,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.770000E+00 -3.870080E-01 -5.492000E+00 -1.515162E+00 +2.724000E+00 +3.745680E-01 +5.416000E+00 +1.471086E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -642,8 +642,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -3.024000E+00 -4.598380E-01 +2.960000E+00 +4.397840E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -662,114 +662,114 @@ k cmfd 0.000000E+00 0.000000E+00 0.000000E+00 -1.188165E+00 -1.187432E+00 -1.183060E+00 -1.181898E+00 -1.177316E+00 -1.180396E+00 -1.183040E+00 -1.180335E+00 -1.176231E+00 -1.177895E+00 -1.180046E+00 -1.182650E+00 -1.185585E+00 -1.189670E+00 -1.186010E+00 -1.182861E+00 +1.170416E+00 +1.172572E+00 +1.171159E+00 +1.170281E+00 +1.159698E+00 +1.151967E+00 +1.146706E+00 +1.147137E+00 +1.152154E+00 +1.156980E+00 +1.156370E+00 +1.155975E+00 +1.155295E+00 +1.154881E+00 +1.153714E+00 +1.159485E+00 cmfd entropy 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.221649E+00 -3.223243E+00 -3.223437E+00 -3.227374E+00 -3.223652E+00 -3.226298E+00 -3.224154E+00 -3.226033E+00 -3.228121E+00 -3.229091E+00 -3.227082E+00 -3.226168E+00 -3.226627E+00 -3.225070E+00 -3.225044E+00 -3.225384E+00 +3.203643E+00 +3.204555E+00 +3.210935E+00 +3.213980E+00 +3.219204E+00 +3.222234E+00 +3.226210E+00 +3.226808E+00 +3.224445E+00 +3.222460E+00 +3.222458E+00 +3.222447E+00 +3.220832E+00 +3.220841E+00 +3.221580E+00 +3.220523E+00 cmfd balance 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.065965E-03 -3.184316E-03 -2.738317E-03 -2.519700E-03 -2.342444E-03 -1.813264E-03 -2.187197E-03 -1.765666E-03 -1.579152E-03 -1.494719E-03 -1.650439E-03 -1.603349E-03 -1.515152E-03 -1.671731E-03 -1.434242E-03 -1.264261E-03 +4.009063E-03 +4.869662E-03 +2.997290E-03 +2.711191E-03 +1.688329E-03 +1.855396E-03 +1.403977E-03 +1.398430E-03 +1.818402E-03 +1.761252E-03 +1.646650E-03 +1.480120E-03 +1.399560E-03 +1.400162E-03 +1.178362E-03 +1.292279E-03 cmfd dominance ratio 0.000E+00 0.000E+00 0.000E+00 0.000E+00 - 5.454E-01 - 5.470E-01 - 5.474E-01 - 5.480E-01 - 5.450E-01 - 5.446E-01 - 5.441E-01 - 5.458E-01 - 5.486E-01 - 5.481E-01 - 5.470E-01 - 5.467E-01 - 5.464E-01 - 5.467E-01 - 5.467E-01 - 5.475E-01 + 5.397E-01 + 5.405E-01 + 5.412E-01 + 5.428E-01 + 5.460E-01 + 4.531E-01 + 5.528E-01 + 5.531E-01 + 5.493E-01 + 5.468E-01 + 5.482E-01 + 5.487E-01 + 5.471E-01 + 5.465E-01 + 5.461E-01 + 5.443E-01 cmfd openmc source comparison 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -7.780512E-03 -5.487778E-03 -6.783383E-03 -4.345691E-03 -4.732876E-03 -3.587393E-03 -3.608858E-03 -4.182060E-03 -2.493256E-03 -2.356484E-03 -2.605494E-03 -2.441777E-03 -2.343211E-03 -3.167611E-03 -2.123139E-03 -2.579320E-03 +6.959835E-03 +5.494668E-03 +4.076255E-03 +4.451120E-03 +3.035589E-03 +3.391773E-03 +1.907995E-03 +2.482495E-03 +2.994917E-03 +3.104683E-03 +2.309343E-03 +2.151358E-03 +2.348850E-03 +1.976731E-03 +2.080638E-03 +2.301327E-03 cmfd source -4.365045E-02 -8.011141E-02 -1.073840E-01 -1.235726E-01 -1.360563E-01 -1.451378E-01 -1.281146E-01 -1.120500E-01 -8.097935E-02 -4.294339E-02 +4.638920E-02 +7.751172E-02 +1.056089E-01 +1.282509E-01 +1.396713E-01 +1.415740E-01 +1.323405E-01 +1.092839E-01 +7.981779E-02 +3.955174E-02 diff --git a/tests/test_complex_cell/results_true.dat b/tests/test_complex_cell/results_true.dat index fac000acbd..da3acd2aa3 100644 --- a/tests/test_complex_cell/results_true.dat +++ b/tests/test_complex_cell/results_true.dat @@ -1,11 +1,11 @@ k-combined: -2.613143E-01 4.327291E-03 +2.531110E-01 3.041974E-03 tally 1: -2.660051E+00 -1.415808E+00 -2.714532E+00 -1.475275E+00 -9.954839E-01 -1.988210E-01 -1.075268E-01 -2.315698E-03 +2.594626E+00 +1.346701E+00 +2.683653E+00 +1.440725E+00 +9.933862E-01 +1.977011E-01 +1.112289E-01 +2.476655E-03 diff --git a/tests/test_confidence_intervals/results_true.dat b/tests/test_confidence_intervals/results_true.dat index 5849fa1f58..e519180c83 100644 --- a/tests/test_confidence_intervals/results_true.dat +++ b/tests/test_confidence_intervals/results_true.dat @@ -1,5 +1,5 @@ k-combined: -2.990520E-01 4.413813E-03 +2.955487E-01 7.001017E-03 tally 1: -6.518836E+01 -5.331909E+02 +6.492201E+01 +5.290724E+02 diff --git a/tests/test_density/results_true.dat b/tests/test_density/results_true.dat index c79671dbf9..65135bbc95 100644 --- a/tests/test_density/results_true.dat +++ b/tests/test_density/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.095099E+00 7.174355E-03 +1.102244E+00 1.114944E-02 diff --git a/tests/test_distribmat/results_true.dat b/tests/test_distribmat/results_true.dat index 6d915f643d..15a00ee7d0 100644 --- a/tests/test_distribmat/results_true.dat +++ b/tests/test_distribmat/results_true.dat @@ -1,5 +1,5 @@ k-combined: -1.292367E+00 2.783049E-02 +1.291341E+00 1.269369E-02 Cell ID = 11 Name = diff --git a/tests/test_eigenvalue_genperbatch/results_true.dat b/tests/test_eigenvalue_genperbatch/results_true.dat index 73921460bb..846a17e082 100644 --- a/tests/test_eigenvalue_genperbatch/results_true.dat +++ b/tests/test_eigenvalue_genperbatch/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.896963E-01 1.152441E-02 +3.001412E-01 2.669737E-03 diff --git a/tests/test_eigenvalue_no_inactive/results_true.dat b/tests/test_eigenvalue_no_inactive/results_true.dat index 945003e7b2..2b4373e7e5 100644 --- a/tests/test_eigenvalue_no_inactive/results_true.dat +++ b/tests/test_eigenvalue_no_inactive/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.086025E-01 7.823119E-03 +3.080574E-01 6.889659E-03 diff --git a/tests/test_energy_grid/results_true.dat b/tests/test_energy_grid/results_true.dat index 04c1a2b4cd..0a607592c8 100644 --- a/tests/test_energy_grid/results_true.dat +++ b/tests/test_energy_grid/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.195980E-01 5.629840E-03 +3.330789E-01 2.216495E-03 diff --git a/tests/test_energy_laws/results_true.dat b/tests/test_energy_laws/results_true.dat index 2cafa0fe83..02465fa798 100644 --- a/tests/test_energy_laws/results_true.dat +++ b/tests/test_energy_laws/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.136934E+00 5.025409E-03 +2.122164E+00 1.946222E-02 diff --git a/tests/test_entropy/results_true.dat b/tests/test_entropy/results_true.dat index a450c887ef..e3e0daea0b 100644 --- a/tests/test_entropy/results_true.dat +++ b/tests/test_entropy/results_true.dat @@ -1,13 +1,13 @@ k-combined: -2.993693E-01 1.470880E-03 +2.943619E-01 3.309635E-03 entropy: 7.601626E+00 -8.073602E+00 -8.285649E+00 -8.254254E+00 -8.288322E+00 -8.328178E+00 -8.351350E+00 -8.239166E+00 -8.305642E+00 -8.384493E+00 +8.085658E+00 +8.263983E+00 +8.284792E+00 +8.420379E+00 +8.302840E+00 +8.316079E+00 +8.299781E+00 +8.329297E+00 +8.361325E+00 diff --git a/tests/test_filter_distribcell/case-1/results_true.dat b/tests/test_filter_distribcell/case-1/results_true.dat index e889c51894..a1f062e1ba 100644 --- a/tests/test_filter_distribcell/case-1/results_true.dat +++ b/tests/test_filter_distribcell/case-1/results_true.dat @@ -1,14 +1,14 @@ k-combined: 0.000000E+00 0.000000E+00 tally 1: -1.388230E-02 -1.927181E-04 -1.274703E-02 -1.624868E-04 -1.413512E-02 -1.998017E-04 -1.014096E-02 -1.028390E-04 +1.548980E-02 +2.399339E-04 +1.278780E-02 +1.635279E-04 +1.426319E-02 +2.034385E-04 +1.018927E-02 +1.038213E-04 tally 2: -5.090541E-02 -2.591361E-03 +5.273007E-02 +2.780460E-03 diff --git a/tests/test_filter_distribcell/case-2/results_true.dat b/tests/test_filter_distribcell/case-2/results_true.dat index 1bf180f565..4e2583f3ef 100644 --- a/tests/test_filter_distribcell/case-2/results_true.dat +++ b/tests/test_filter_distribcell/case-2/results_true.dat @@ -1,11 +1,11 @@ k-combined: 0.000000E+00 0.000000E+00 tally 1: -7.522719E-03 -5.659131E-05 -8.295569E-03 -6.881647E-05 -8.554455E-03 -7.317870E-05 -8.075834E-03 -6.521910E-05 +7.588170E-03 +5.758032E-05 +8.402486E-03 +7.060177E-05 +8.682518E-03 +7.538613E-05 +8.119997E-03 +6.593435E-05 diff --git a/tests/test_filter_distribcell/case-3/results_true.dat b/tests/test_filter_distribcell/case-3/results_true.dat index 559b8232d0..32c1fced16 100644 --- a/tests/test_filter_distribcell/case-3/results_true.dat +++ b/tests/test_filter_distribcell/case-3/results_true.dat @@ -1 +1 @@ -d6a3f2a020a25814fde0eb731b7ceb0928910b139460c13a9739855901818fcaf45e3d48d70f5829fc3af7164954cacefcbf2860582728bf071b57a96be336be \ No newline at end of file +7bef4810e3bba5df56fef96d9a946dc8dc8ac136ba5282d2975456f3de8fc47ea4ba557d6c83d0938579e11e2a0da5e8e4d03b3cd1f0c0d969d25c218b2ec0bc \ No newline at end of file diff --git a/tests/test_filter_distribcell/case-4/results_true.dat b/tests/test_filter_distribcell/case-4/results_true.dat index 3570c59771..88e78d7575 100644 --- a/tests/test_filter_distribcell/case-4/results_true.dat +++ b/tests/test_filter_distribcell/case-4/results_true.dat @@ -1,17 +1,17 @@ k-combined: 0.000000E+00 0.000000E+00 tally 1: -2.281161E-02 -5.203696E-04 -2.026380E-02 -4.106216E-04 -2.051818E-02 -4.209955E-04 -3.105331E-02 -9.643082E-04 -2.361926E-02 -5.578696E-04 -2.559396E-02 -6.550505E-04 -2.047153E-02 -4.190836E-04 +2.265319E-02 +5.131669E-04 +2.026852E-02 +4.108129E-04 +2.051718E-02 +4.209546E-04 +3.015130E-02 +9.091009E-04 +2.356397E-02 +5.552606E-04 +2.558974E-02 +6.548348E-04 +2.012046E-02 +4.048330E-04 diff --git a/tests/test_filter_mesh_2d/results_true.dat b/tests/test_filter_mesh_2d/results_true.dat index 93b5e8b240..3e43ffe880 100644 --- a/tests/test_filter_mesh_2d/results_true.dat +++ b/tests/test_filter_mesh_2d/results_true.dat @@ -1,5 +1,5 @@ k-combined: -1.102447E+00 7.056170E-03 +9.581523E-01 4.261823E-02 tally 1: 0.000000E+00 0.000000E+00 @@ -17,12 +17,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.004731E-01 -1.603787E-01 -7.197162E-02 -5.179914E-03 -1.604976E-02 -2.575947E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -43,22 +37,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.825592E-01 -3.332786E-02 -1.735601E-01 -3.012310E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.929301E-01 -1.292096E-01 -1.170085E+00 -4.383162E-01 -2.378040E+00 -1.465005E+00 -1.178600E-01 -1.251541E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -71,34 +53,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.474078E-01 +2.172907E-02 +6.386562E-02 +4.078817E-03 0.000000E+00 0.000000E+00 +2.905797E-02 +8.443654E-04 +7.532560E-03 +5.673946E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.161419E-02 -3.796309E-03 -1.346477E+00 -4.828090E-01 -1.058790E-01 -1.121036E-02 -4.136497E-01 -1.711061E-01 -1.243458E+00 -4.647755E-01 -2.245781E+00 -1.580849E+00 -5.654811E-01 -9.706540E-02 -9.429516E-01 -2.435071E-01 -1.051027E-02 -1.104657E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.149324E-01 +1.320945E-02 +2.465049E-02 +3.049064E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -107,30 +83,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.027188E-02 -3.522204E-03 -4.079328E-01 -8.766787E-02 -2.841433E-01 -5.943838E-02 -1.056161E+00 -4.599956E-01 -1.290005E-01 -1.027599E-02 -9.363444E-02 -7.224796E-03 -4.775813E-01 -2.280839E-01 -1.338854E+00 -5.648386E-01 -1.890323E+00 -1.335290E+00 -1.319736E+00 -3.546244E-01 -4.228786E-01 -1.311699E-01 0.000000E+00 0.000000E+00 +7.002118E-02 +4.902966E-03 +5.128548E-01 +1.258296E-01 +1.379070E+00 +4.300261E-01 +1.040956E+00 +3.089103E-01 +1.237157E+00 +6.284409E-01 +9.539296E-01 +5.206980E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -139,164 +105,292 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.446649E+00 -1.013796E+00 -9.490590E-01 -2.557034E-01 -1.533479E+00 -7.125528E-01 -1.303857E+00 -5.880199E-01 -3.822788E-01 -7.558920E-02 -8.548820E-01 -2.763157E-01 -4.714297E-01 -1.588901E-01 +2.001407E+00 +1.600000E+00 +7.159080E-01 +2.988090E-01 0.000000E+00 0.000000E+00 -1.109572E-01 -9.514310E-03 -1.621894E+00 -7.323979E-01 -2.329788E+00 -1.522693E+00 -6.995477E-01 -2.446957E-01 -7.586629E-02 -5.755693E-03 0.000000E+00 0.000000E+00 +3.473499E-01 +1.206520E-01 +1.597805E-01 +1.297695E-02 +1.438568E-01 +1.597365E-02 +8.612279E-02 +5.910825E-03 +9.004672E-01 +2.791173E-01 +6.485841E+00 +1.046238E+01 +6.743595E+00 +1.135216E+01 +7.681047E-01 +1.896253E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.455670E-02 -1.194166E-03 -1.113155E+00 -4.133643E-01 -1.212634E+00 -3.599153E-01 -1.548704E+00 -7.470060E-01 -1.916353E+00 -9.678959E-01 -3.617247E-01 -1.308448E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.906731E-02 -4.770293E-03 -1.184237E+00 -5.476329E-01 -9.482305E-01 -5.075797E-01 -5.056772E-01 -1.132023E-01 -2.538689E-01 -6.444941E-02 +9.572791E-01 +8.942065E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.148786E-01 -3.780757E-01 -9.371058E-01 -4.364939E-01 -4.650093E-01 -1.448489E-01 -5.028267E-01 -1.557262E-01 -1.710986E+00 -1.146930E+00 -1.323640E-01 -8.859409E-03 +5.299733E-01 +2.205463E-01 +1.349846E+00 +6.808561E-01 +6.874433E-01 +2.287801E-01 +5.651386E-01 +1.286874E-01 +5.729904E-01 +2.680764E-01 +5.509254E-01 +1.200498E-01 +1.494910E+00 +6.327940E-01 +2.444256E-01 +2.804968E-02 +6.927475E-01 +2.317744E-01 0.000000E+00 0.000000E+00 -1.208034E-01 -1.459347E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.949505E-03 -2.449760E-05 0.000000E+00 0.000000E+00 -3.911928E-01 -1.530318E-01 -4.287020E-02 -1.837854E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +4.425042E-01 +5.854257E-02 +2.237774E+00 +1.109643E+00 +7.495197E-01 +1.939234E-01 +3.804197E-01 +1.225870E-01 +1.009880E-01 +9.392498E-03 +2.424177E+00 +1.613025E+00 +2.226123E+00 +1.203764E+00 +1.939766E+00 +1.132042E+00 +3.953753E-01 +1.420303E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -7.898461E-03 -6.238568E-05 -6.061890E-02 -3.674651E-03 -1.191815E+00 -5.156780E-01 -1.250062E+00 -5.649280E-01 -7.783636E-01 -1.954889E-01 0.000000E+00 0.000000E+00 -2.476065E-01 -3.116371E-02 -2.531217E-01 -6.407059E-02 -5.942646E-01 -3.531504E-01 0.000000E+00 0.000000E+00 -3.092327E-01 -9.562486E-02 +2.501130E-02 +6.255649E-04 +3.984785E-01 +1.486414E-01 +1.251028E-01 +1.306358E-02 0.000000E+00 0.000000E+00 +9.831996E-01 +4.846833E-01 +4.237107E-01 +6.002592E-02 +8.922533E-01 +2.835397E-01 0.000000E+00 0.000000E+00 +3.174349E-01 +1.007649E-01 +1.260449E+00 +5.881747E-01 +3.147407E+00 +3.333589E+00 +2.021896E+00 +1.425606E+00 +1.377786E-01 +1.716503E-02 +3.011081E-02 +9.066609E-04 0.000000E+00 0.000000E+00 +5.118695E-02 +2.620104E-03 +0.000000E+00 +0.000000E+00 +1.484996E-01 +2.205214E-02 +9.889831E-01 +3.657975E-01 +2.850134E+00 +2.250972E+00 +4.131352E-01 +6.756111E-02 +8.393183E-03 +7.044551E-05 +0.000000E+00 +0.000000E+00 +7.462571E-02 +5.568996E-03 +0.000000E+00 +0.000000E+00 +2.560771E-01 +6.557550E-02 +9.262861E-03 +8.580059E-05 +2.505905E-01 +6.279558E-02 +5.136552E-01 +2.638417E-01 +1.441275E+00 +5.086866E-01 +2.913900E+00 +1.841912E+00 +6.978650E-01 +2.584000E-01 +1.451562E-02 +2.107031E-04 +0.000000E+00 +0.000000E+00 +3.079994E-03 +9.486363E-06 +1.492571E+00 +6.318792E-01 +2.083542E+00 +1.599782E+00 +2.677440E+00 +2.382024E+00 +4.457483E-01 +5.194318E-02 +5.424180E-02 +2.942173E-03 +0.000000E+00 +0.000000E+00 +2.355899E-02 +5.550260E-04 +3.571813E-02 +1.275785E-03 +6.588191E-01 +2.543824E-01 +4.171440E-01 +8.701395E-02 +7.735493E-01 +1.575534E-01 +4.033076E-01 +5.492660E-02 +4.513269E+00 +5.611449E+00 +1.653243E+00 +8.369762E-01 +1.045336E-01 +1.092727E-02 +2.486634E-01 +2.561523E-02 +1.090478E+00 +5.381842E-01 +6.314497E-01 +1.552199E-01 +3.417016E+00 +2.972256E+00 +5.709899E+00 +7.095076E+00 +1.194169E+00 +4.790399E-01 +1.420269E-01 +2.017164E-02 +0.000000E+00 +0.000000E+00 +3.214463E-01 +1.033278E-01 +2.222164E-02 +4.938014E-04 +2.028040E-01 +4.112944E-02 +1.417427E+00 +9.671327E-01 +1.453489E+00 +6.697189E-01 +8.534416E-01 +2.290345E-01 +5.367405E+00 +6.853344E+00 +1.237276E+00 +4.961691E-01 +5.835684E-02 +3.405521E-03 +5.574899E-01 +1.049542E-01 +4.235354E+00 +5.638989E+00 +2.034494E+00 +1.162774E+00 +1.533605E+00 +8.644494E-01 +4.663027E+00 +5.641430E+00 +1.261505E+00 +7.705207E-01 +1.954689E+00 +9.874394E-01 +1.449729E-01 +2.101714E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.564746E-04 -4.309589E-07 +1.398153E-01 +1.954831E-02 +5.089636E-01 +8.836228E-02 +1.422521E+00 +6.953668E-01 +1.137705E+00 +5.670907E-01 +3.521780E-01 +6.575561E-02 0.000000E+00 0.000000E+00 -1.178847E+00 -6.216556E-01 -6.230410E-01 -1.302106E-01 -1.454551E+00 -8.690328E-01 -1.771536E+00 -1.297657E+00 -2.378308E+00 -2.005719E+00 -1.151353E+00 -4.354728E-01 -6.385651E-01 -4.077654E-01 +7.713789E-01 +2.948263E-01 +3.267703E-01 +4.763836E-02 +1.252153E+00 +4.563947E-01 +1.962807E-01 +2.410165E-02 +1.357567E+00 +4.362757E-01 +2.356462E-01 +3.082678E-02 +1.380025E+00 +4.289689E-01 +1.876891E-01 +1.675278E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -307,38 +401,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.940736E-01 +2.763730E-02 +6.059470E-02 +3.671718E-03 +3.479381E-01 +1.210609E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.452042E-02 +1.191659E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.631232E+00 -8.012828E-01 -7.231079E-01 -2.170171E-01 -2.989568E+00 -2.300501E+00 -2.435710E+00 -1.419918E+00 -1.948580E+00 -9.273897E-01 -1.532501E+00 -1.032633E+00 -5.846831E-01 -1.355003E-01 -3.486854E-02 -1.023386E-03 -3.724253E-01 -1.387006E-01 -7.611368E-01 -2.029035E-01 -3.688050E-01 -8.361566E-02 +3.679763E-01 +1.354065E-01 +5.043842E-02 +2.544034E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -349,32 +433,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.197843E-01 -1.434827E-02 -8.437264E-02 -2.569811E-03 -1.103891E+00 -7.153760E-01 -4.308994E+00 -4.839398E+00 -5.714286E+00 -6.750719E+00 -1.258551E+00 -5.098425E-01 -6.527455E-01 -1.164772E-01 -8.086924E-01 -2.259358E-01 -9.011204E-02 -3.479554E-03 -3.369886E+00 -2.480226E+00 -2.919336E+00 -2.088649E+00 -2.378050E+00 -1.715263E+00 -6.674360E-01 -1.744526E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -383,80 +441,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.680789E+00 -1.144287E+00 -4.552955E+00 -4.489852E+00 -1.437564E+00 -7.142378E-01 -3.234705E-01 -8.846508E-02 -2.175232E+00 -1.092719E+00 -4.103202E-01 -8.470461E-02 0.000000E+00 0.000000E+00 -1.853475E-01 -3.435371E-02 -1.052712E+00 -4.225138E-01 -3.085971E+00 -2.340600E+00 -2.880463E+00 -1.858654E+00 -5.363409E-01 -1.501708E-01 -9.139296E-02 -8.352674E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.507123E-01 -2.271418E-02 -1.339282E+00 -4.656236E-01 -4.906674E+00 -5.217886E+00 -3.087876E+00 -2.437506E+00 -8.916777E-03 -7.950892E-05 -2.824518E-02 -7.977901E-04 -0.000000E+00 -0.000000E+00 -7.713739E-02 -5.950177E-03 -6.251875E-01 -2.055219E-01 -4.039604E-01 -7.463355E-02 -3.426711E-01 -5.326745E-02 -2.683602E-01 -6.063009E-02 -1.846638E-01 -2.687635E-02 -3.624780E-01 -1.313903E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.621874E-01 -4.229418E-01 -1.099406E+00 -6.578946E-01 -5.308277E-01 -1.009121E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -481,6 +467,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.678278E-01 +2.097037E-02 +5.312751E-02 +1.423243E-03 +3.374418E-01 +1.138670E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -509,6 +501,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.208007E-01 +2.057625E-01 +1.050464E+00 +5.524605E-01 +7.171592E-02 +5.143173E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -539,6 +537,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.214580E-02 +2.719184E-03 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/tests/test_filter_mesh_3d/results_true.dat b/tests/test_filter_mesh_3d/results_true.dat index 54cdf89f11..15724025cb 100644 --- a/tests/test_filter_mesh_3d/results_true.dat +++ b/tests/test_filter_mesh_3d/results_true.dat @@ -1,5 +1,5 @@ k-combined: -1.102447E+00 7.056170E-03 +9.581523E-01 4.261823E-02 tally 1: 0.000000E+00 0.000000E+00 @@ -277,10 +277,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.455587E-01 -1.194108E-01 -5.491443E-02 -3.015594E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -313,8 +309,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.197162E-02 -5.179914E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -347,8 +341,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.604976E-02 -2.575947E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -735,10 +727,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.525171E-02 -5.662820E-03 -1.073075E-01 -1.151490E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -769,10 +757,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.267212E-02 -3.927795E-03 -1.108880E-01 -1.229614E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -853,12 +837,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.353054E-04 -6.977351E-07 -2.372472E-01 -2.848702E-02 -2.548476E-01 -4.367046E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -889,12 +867,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.772100E-01 -2.187938E-02 -7.493226E-01 -1.828061E-01 -2.435524E-01 -4.711427E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -923,14 +895,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.099304E-02 -3.720151E-03 -2.004048E+00 -1.188065E+00 -3.129991E-01 -2.986664E-02 0.000000E+00 0.000000E+00 +1.083670E-01 +1.174340E-02 +3.904086E-02 +1.524189E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -959,12 +929,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.299620E-02 -8.468282E-05 -1.048639E-01 -1.099643E-02 0.000000E+00 0.000000E+00 +6.386562E-02 +4.078817E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1031,6 +999,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.905797E-02 +8.443654E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1063,6 +1033,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.532560E-03 +5.673946E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1285,6 +1257,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.306116E-02 +1.705939E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1313,16 +1287,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.155649E-03 -5.120332E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -5.445854E-02 -2.965733E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1347,20 +1317,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.147771E-02 -9.908465E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.884852E-01 -7.962353E-02 -5.867779E-01 -1.793277E-01 -1.150562E-01 -1.323793E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1397,10 +1359,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.262199E-01 -1.064194E-01 -8.742986E-02 -7.643980E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1431,22 +1389,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.960590E-01 -1.231335E-01 -2.156140E-01 -3.612957E-02 -9.941460E-02 -9.384197E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.285531E-01 -1.652591E-02 -1.471896E-02 -2.166477E-04 -2.890978E-01 -8.357755E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1467,20 +1413,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.914131E-01 -2.944950E-02 -1.647075E+00 -9.299333E-01 -2.222233E-01 -4.938322E-02 0.000000E+00 0.000000E+00 -1.180474E-02 -1.393518E-04 -1.022453E-02 -1.045410E-04 -6.303992E-02 -3.974031E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1501,14 +1435,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.518422E-02 -2.041614E-03 -3.381222E-01 -3.980183E-02 -1.557458E-01 -8.146833E-03 -2.642893E-02 -6.984881E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1517,6 +1443,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.002118E-02 +4.902966E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1537,22 +1465,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.316047E-01 -5.029141E-02 -3.858085E-01 -1.160218E-01 -4.204735E-02 -1.767980E-03 -1.834910E-01 -3.366896E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.465169E-02 +6.077057E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.623543E-01 +4.112455E-02 +2.258488E-01 +5.100769E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1573,10 +1499,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.051027E-02 -1.104657E-04 0.000000E+00 0.000000E+00 +1.729718E-01 +2.991925E-02 +2.994456E-02 +8.966769E-04 +9.977770E-03 +9.955589E-05 +4.396029E-01 +6.352575E-02 +5.669837E-01 +1.209384E-01 +1.423672E-01 +1.771243E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1591,6 +1527,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.722215E-02 +2.966023E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1601,6 +1539,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.565669E-02 +2.451320E-04 +8.200689E-01 +2.392979E-01 +1.748649E-01 +1.584562E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1617,6 +1561,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.036512E-02 +9.220404E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1629,6 +1575,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.998386E-02 +7.936690E-03 +1.089115E+00 +5.614559E-01 +4.805841E-02 +2.309610E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1657,6 +1609,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.742414E-01 +7.520835E-02 +6.796882E-01 +2.348838E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1813,10 +1769,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.294315E-02 -1.675252E-04 -3.944874E-02 -1.556203E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1833,8 +1785,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.787999E-02 -7.772938E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1845,16 +1795,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.567260E-01 -2.456305E-02 0.000000E+00 0.000000E+00 -2.512067E-01 -6.310483E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.448096E-01 +5.774877E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1887,22 +1835,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.033873E-01 +2.672168E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.709463E-03 -4.501689E-05 -3.771567E-02 -1.422472E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.316348E-01 -5.365469E-02 -8.083327E-03 -6.534017E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1933,12 +1875,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.099300E-01 -1.167835E-02 -5.545853E-01 -1.737656E-01 -3.867892E-01 -8.614803E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1967,12 +1903,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.323184E-02 -1.104355E-03 0.000000E+00 0.000000E+00 -1.507683E-02 -2.273108E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2001,8 +1933,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.363444E-02 -7.224796E-03 +5.319541E-03 +2.829751E-05 +3.420304E-01 +1.169848E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2021,10 +1955,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.157530E-01 -1.339876E-02 -3.618283E-01 -1.309197E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2033,8 +1963,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.315614E-02 +2.242266E-03 +6.974266E-02 +4.864039E-03 0.000000E+00 0.000000E+00 +2.688171E-02 +7.226262E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2045,10 +1981,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.285959E-03 -6.865712E-05 -1.313378E+00 -5.513788E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2057,8 +1989,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.718986E-02 -2.954913E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2069,6 +1999,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.896347E-02 +1.518152E-03 +1.048933E-01 +7.753481E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2081,12 +2015,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.296288E-01 -5.795578E-02 -7.161786E-01 -1.991675E-01 -7.445160E-01 -2.633450E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2105,6 +2033,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.396515E-03 +5.743285E-06 +8.372628E-02 +5.869222E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2113,14 +2045,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.409443E-02 +1.944319E-03 +2.812104E-01 +7.907929E-02 0.000000E+00 0.000000E+00 +1.125733E-01 +1.267274E-02 +3.364086E-01 +6.085431E-02 +8.236284E-02 +4.869311E-03 0.000000E+00 0.000000E+00 -6.177984E-01 -1.675365E-01 -7.019374E-01 -1.644350E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2135,10 +2073,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.381770E-02 +1.919990E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +8.563908E-02 +4.712912E-03 +9.597166E-01 +3.206571E-01 +3.164476E-01 +5.280988E-02 +2.073790E+00 +1.188596E+00 +9.609430E-01 +2.621642E-01 +4.350510E-01 +1.399885E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2151,14 +2103,26 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.834216E-01 -1.046386E-01 -3.945703E-02 -1.556857E-03 +5.412546E-04 +2.929565E-07 +1.480967E+00 +5.223268E-01 +1.727443E-01 +1.798769E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +4.254526E-01 +1.810099E-01 +2.391190E-01 +2.413267E-02 +3.823231E-01 +4.488287E-02 +4.156040E+00 +4.315161E+00 +1.009424E+00 +3.060875E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2175,6 +2139,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.308084E-01 +5.110266E-02 +2.004281E-01 +2.595071E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2183,6 +2151,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.052675E-02 +8.195093E-03 +3.050953E-01 +3.658883E-02 +1.622477E-01 +1.848987E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2197,6 +2171,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.164981E-01 +1.357182E-02 +9.373673E-02 +4.377146E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2353,10 +2331,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.246376E-01 -4.161497E-01 -6.220109E-01 -1.940589E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2387,12 +2361,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.387289E-02 -2.819990E-03 -6.155787E-01 -1.274394E-01 -5.052725E-02 -2.319554E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2411,8 +2379,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.090801E-01 -4.371451E-02 +1.370265E-01 +1.583750E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2421,14 +2389,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.339126E-02 -5.620796E-04 -6.387238E-01 -1.626685E-01 -3.779905E-01 -4.562692E-02 -4.833733E-01 -1.415891E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2457,10 +2417,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.684179E-01 -2.231177E-01 -5.853687E-01 -1.084102E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2471,10 +2427,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.784202E-02 -7.751779E-04 -2.222881E-02 -4.941200E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2515,8 +2467,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.822788E-01 -7.558920E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2543,14 +2493,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.217368E-01 -2.483684E-02 -1.466478E-01 -1.270155E-02 -1.285656E-04 -1.652912E-08 -3.178480E-02 -1.010274E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2563,6 +2505,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.602121E-02 +1.297527E-03 +2.054694E-02 +4.221767E-04 +3.699789E-01 +1.099867E-01 +1.034262E-01 +6.886192E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2577,10 +2527,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.481850E-01 -6.159578E-02 -2.232447E-01 -2.677357E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2595,6 +2541,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.974406E-01 +3.947626E-01 +3.006400E-01 +3.566201E-02 +5.176521E-02 +2.679637E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2623,16 +2575,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.449953E-02 -2.102363E-04 +1.613312E-01 +2.177880E-02 +4.750136E-01 +1.508283E-01 +5.109846E-02 +1.598242E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.645763E-02 -9.304074E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2657,22 +2611,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.936906E-01 +7.202020E-02 +1.714480E-01 +1.505050E-02 0.000000E+00 0.000000E+00 -1.536373E-01 -2.360442E-02 -9.693646E-01 -3.033065E-01 -3.946779E-01 -6.568242E-02 -1.042143E-01 -1.086063E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +4.226996E-01 +1.360325E-01 +7.317899E-02 +5.355164E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2693,24 +2647,26 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.992811E-02 -3.971296E-04 -2.140057E+00 -1.238253E+00 -1.698022E-01 -2.038365E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +7.711190E-02 +5.946246E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.946067E-02 +8.679308E-04 +1.124255E-01 +1.263950E-02 0.000000E+00 0.000000E+00 +8.878742E-02 +7.053770E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2727,10 +2683,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.427449E-02 -8.929237E-04 -6.652732E-01 -2.415872E-01 +1.561577E-01 +2.112454E-02 +1.640941E-01 +2.692689E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2739,6 +2695,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.508419E-01 +2.275329E-02 +2.887902E-01 +4.216076E-02 +4.015411E-01 +7.884729E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2755,6 +2717,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.595965E-02 +2.146289E-03 +3.159701E-01 +3.538767E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2763,8 +2729,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.586629E-02 -5.755693E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2787,8 +2751,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.403984E-02 +3.220777E-03 +1.220496E-01 +1.051103E-02 0.000000E+00 0.000000E+00 +4.308559E-02 +1.856368E-03 +1.206585E-01 +1.455847E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2815,6 +2787,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.069737E-01 +1.407934E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2921,8 +2895,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.455670E-02 -1.194166E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2933,8 +2905,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.651100E-01 -2.656838E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2955,20 +2925,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.911969E-01 -4.555906E-02 -6.568479E-01 -1.795652E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.343222E-02 -1.804245E-04 -2.569814E-02 -6.603942E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2987,26 +2949,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.470699E-01 -2.162955E-02 -9.856539E-01 -2.416634E-01 -4.077959E-02 -1.255968E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -7.524918E-02 -5.662438E-03 -1.717303E-01 -1.484790E-02 -6.639556E-01 -2.493087E-01 -4.575248E-01 -1.048110E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3017,8 +2965,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.802438E-01 -2.382206E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3033,14 +2979,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.428757E-02 -4.132892E-03 -1.902984E-01 -3.621346E-02 -8.210030E-01 -2.428821E-01 -1.405790E-02 -1.976246E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3049,12 +2987,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.382237E-02 -1.910579E-04 -8.020721E-01 -2.560767E-01 -1.081172E-02 -1.168933E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3071,10 +3003,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.948014E-01 -8.690785E-02 -6.692334E-02 -4.478733E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3155,6 +3083,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.614711E-02 +2.607292E-04 +9.531928E-02 +6.215764E-03 +2.906510E-01 +2.666265E-02 +4.038687E-02 +1.631099E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3181,6 +3117,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.367395E-03 +1.869768E-06 +6.997755E-01 +1.672455E-01 +9.975381E-01 +3.048346E-01 +5.390926E-01 +9.312562E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3209,10 +3153,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.906731E-02 -4.770293E-03 0.000000E+00 0.000000E+00 +6.670089E-01 +1.688817E-01 +8.251078E-02 +3.717992E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3237,18 +3183,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.469410E-02 -2.556178E-03 -1.106087E+00 -5.114564E-01 -1.969939E-02 -3.880658E-04 -3.756472E-03 -1.411108E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +9.683051E-03 +9.376148E-05 +3.707367E-01 +1.159281E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3271,12 +3213,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.588566E-01 -1.821769E-01 -3.450410E-01 -7.871452E-02 -1.443328E-01 -2.083197E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3293,6 +3229,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.009880E-01 +9.392498E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3301,14 +3239,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.739446E-01 +3.025673E-02 0.000000E+00 0.000000E+00 +2.075805E-02 +4.308965E-04 +8.573312E-01 +2.242081E-01 +2.267548E-01 +2.900095E-02 0.000000E+00 0.000000E+00 -3.868296E-01 -5.481086E-02 -1.188475E-01 -1.412473E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3319,12 +3261,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.978837E-01 +1.583114E-01 +7.475044E-01 +2.090484E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.630182E-02 +1.317822E-03 +6.960537E-02 +4.844908E-03 +3.721248E-03 +1.384769E-05 +7.406530E-02 +5.485669E-03 +1.330296E+00 +6.633077E-01 +1.862835E-02 +3.470153E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3339,22 +3297,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.329778E-01 +1.118274E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.162108E+00 +5.854785E-01 +5.640780E-01 +1.059726E-01 0.000000E+00 0.000000E+00 +1.426667E-01 +2.035380E-02 0.000000E+00 0.000000E+00 +7.091381E-02 +5.028768E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.093336E-01 -4.382056E-02 -4.453526E-02 -1.983389E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3373,6 +3337,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.987372E-02 +2.032332E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3399,6 +3365,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.471871E-02 +5.582886E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3497,12 +3465,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.629045E-01 -2.653788E-02 0.000000E+00 0.000000E+00 -3.664429E-01 -1.342804E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3531,12 +3495,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.598342E-01 -1.489123E-02 -6.017219E-01 -2.662981E-01 -1.755496E-01 -2.703254E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3565,12 +3523,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.027682E-02 -6.727755E-03 -3.577032E-01 -8.891660E-02 -1.702927E-02 -2.899959E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3581,10 +3533,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.501130E-02 +6.255649E-04 0.000000E+00 0.000000E+00 -1.689802E-01 -2.855432E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3593,12 +3545,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.010375E-03 -8.118685E-05 -2.267671E-01 -2.573879E-02 -9.806896E-02 -9.617521E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3621,16 +3567,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.907151E-02 +7.933735E-03 +3.094070E-01 +8.793386E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.273906E-01 -1.572310E-02 -1.583595E+00 -1.033645E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3657,12 +3603,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.251028E-01 +1.306358E-02 0.000000E+00 0.000000E+00 -5.913601E-02 -3.497068E-03 -7.322801E-02 -5.362341E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3721,6 +3665,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.420413E-02 +1.954005E-03 +9.389955E-01 +4.408852E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3731,10 +3679,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.292948E-02 -6.877299E-03 -3.787396E-02 -1.434437E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3755,6 +3699,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.525008E-01 +1.765369E-02 +2.712099E-01 +3.687123E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3783,6 +3731,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.028972E-02 +4.229428E-03 +8.019636E-01 +2.406005E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3825,6 +3777,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.849679E-01 +3.421312E-02 +1.324670E-01 +1.754750E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3851,18 +3807,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.949505E-03 -2.449760E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +4.562052E-01 +1.041492E-01 +6.039508E-02 +3.647565E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +4.751513E-01 +1.205013E-01 +2.686970E-01 +3.401364E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3883,10 +3845,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.680079E-01 +7.239471E-02 +9.309308E-01 +5.812760E-01 +7.945599E-03 +6.313254E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +8.567972E-02 +7.341014E-03 +1.754088E+00 +8.632559E-01 +7.548732E-04 +5.698335E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3905,6 +3879,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.211417E-01 +1.467532E-02 +1.144903E+00 +4.944035E-01 +7.558522E-01 +3.387696E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3927,12 +3907,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.861209E-02 -2.363135E-03 -3.408107E-01 -1.161519E-01 -1.770047E-03 -3.133067E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3941,8 +3915,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.257462E-01 +1.456033E-02 +1.755760E-03 +3.082694E-06 0.000000E+00 0.000000E+00 +1.027660E-02 +1.056086E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3963,8 +3943,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.287020E-02 -1.837854E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3977,6 +3955,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.011081E-02 +9.066609E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4057,6 +4037,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.118695E-02 +2.620104E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4129,6 +4111,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.484996E-01 +2.205214E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4145,16 +4129,26 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.508012E-02 +1.230615E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.522719E-01 +2.318672E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.071904E-01 +2.889953E-02 +1.077088E-01 +1.160118E-02 +4.867319E-01 +8.396510E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4169,16 +4163,26 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.491740E-02 +2.225288E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -7.898461E-03 -6.238568E-05 0.000000E+00 0.000000E+00 +4.099507E-01 +6.290297E-02 +3.631685E-01 +1.318914E-01 0.000000E+00 0.000000E+00 +1.023202E+00 +7.786623E-01 +7.978888E-01 +2.156290E-01 +2.410067E-01 +5.808423E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4195,6 +4199,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.728851E-03 +7.619283E-05 +1.582575E-01 +2.504545E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4203,12 +4211,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.698392E-01 +1.770322E-02 +7.630963E-02 +2.320465E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.061890E-02 -3.674651E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4235,14 +4245,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.323913E-01 -4.809925E-02 -6.786172E-01 -2.239554E-01 -2.667098E-01 -2.391140E-02 -1.409635E-02 -1.987071E-04 +8.393183E-03 +7.044551E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4269,14 +4273,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.942849E-02 -3.774662E-04 -2.622051E-01 -5.220350E-02 -3.235576E-01 -5.246702E-02 -6.448711E-01 -1.549424E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4303,16 +4299,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.740834E-02 -1.399384E-03 -1.958654E-01 -2.003447E-02 -1.399837E-02 -1.959544E-04 -3.614817E-01 -7.414981E-02 -1.696098E-01 -1.015431E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4323,6 +4309,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.462571E-02 +5.568996E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4377,10 +4365,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.078466E-01 -1.163089E-02 -1.397599E-01 -1.953282E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4395,16 +4379,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.524617E-01 +6.373692E-02 +3.615407E-03 +1.307117E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.158374E-02 -1.729207E-03 -2.115379E-01 -4.474830E-02 0.000000E+00 0.000000E+00 +9.262861E-03 +8.580059E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4433,14 +4419,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.006225E-01 -9.037389E-02 -9.880798E-02 -9.763018E-03 -1.353787E-01 -1.832739E-02 -5.945539E-02 -3.534943E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4457,6 +4435,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.701983E-01 +2.896747E-02 +8.039213E-02 +6.462895E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4485,6 +4467,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +6.715403E-02 +4.509664E-03 +4.465012E-01 +1.993633E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4505,12 +4491,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.653119E-01 -7.039040E-02 -4.392080E-02 -1.929037E-03 0.000000E+00 0.000000E+00 +2.157774E-03 +4.655987E-06 +6.310711E-02 +2.175397E-03 +8.322469E-02 +3.984732E-03 +8.945208E-02 +4.272340E-03 +7.510697E-01 +2.592974E-01 +1.811101E-01 +3.280086E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4521,6 +4515,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.927050E-03 +8.567625E-06 +2.682269E-01 +7.194567E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4531,6 +4529,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.678545E-02 +1.353169E-03 +3.580129E-01 +9.576000E-02 +4.871555E-01 +9.900006E-02 +1.399012E+00 +6.326647E-01 +4.954947E-01 +1.916585E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4539,6 +4547,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.374400E-01 +1.888975E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4559,6 +4569,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.262772E-01 +9.802531E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4569,6 +4581,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.699970E-01 +4.178443E-02 +1.590778E-03 +2.530575E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4599,6 +4615,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.451562E-02 +2.107031E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4663,6 +4681,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.079994E-03 +9.486363E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4687,12 +4707,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.429072E-01 +2.042247E-02 +4.016991E-02 +1.613622E-03 0.000000E+00 0.000000E+00 +3.890880E-02 +1.513895E-03 +1.234219E+00 +4.999183E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.636704E-02 +1.322562E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4711,8 +4741,26 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.985580E-01 +4.742470E-02 +3.209188E-02 +1.029889E-03 +1.385335E-02 +1.919154E-04 +2.009712E-01 +3.766426E-02 +5.245829E-01 +7.576339E-02 0.000000E+00 0.000000E+00 +4.241176E-01 +9.055699E-02 +3.230798E-01 +3.896400E-02 +2.621971E-01 +4.860490E-02 +4.089900E-03 +9.541983E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4727,10 +4775,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.046129E-01 +1.094386E-02 +1.524559E+00 +7.117854E-01 +7.244019E-01 +2.009724E-01 +1.834594E-02 +3.365736E-04 0.000000E+00 0.000000E+00 +1.021145E-01 +1.042738E-02 0.000000E+00 0.000000E+00 +1.047304E-01 +5.484511E-03 +9.867531E-02 +9.736817E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4749,10 +4811,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.457483E-01 +5.194318E-02 0.000000E+00 0.000000E+00 -6.564746E-04 -4.309589E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4783,6 +4845,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.424180E-02 +2.942173E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4811,12 +4875,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.561666E-01 -2.160076E-02 -6.169654E-01 -1.918667E-01 -4.057149E-01 -1.164413E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4845,16 +4903,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.478793E-02 -6.144415E-04 -2.499233E-01 -5.915712E-02 -1.483368E-02 -2.200380E-04 -2.989395E-01 -4.649231E-02 -3.455659E-02 -1.194158E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4875,20 +4923,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.400244E-03 -5.761172E-06 -3.733464E-01 -1.393875E-01 -1.976972E-02 -3.908419E-04 -6.704194E-01 -2.256237E-01 -2.377531E-01 -2.460351E-02 +2.355899E-02 +5.550260E-04 0.000000E+00 0.000000E+00 -1.508621E-01 -2.275936E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4913,24 +4951,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.065690E-02 -3.679260E-03 -2.180734E-01 -2.631317E-02 -7.260315E-02 -3.330470E-03 -1.470977E-01 -2.163773E-02 -7.528543E-01 -2.868962E-01 -5.202503E-01 -1.741595E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.453315E-02 +2.112125E-04 +2.118498E-02 +4.488034E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4945,20 +4975,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.187038E-01 -3.142772E-02 -1.895944E-01 -2.049257E-02 -2.864194E-02 -8.203607E-04 -9.568016E-02 -5.337143E-03 -2.980826E-01 -8.610513E-02 -1.094206E+00 -7.586699E-01 -4.533990E-01 -8.701800E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4975,22 +4991,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.015914E-02 +2.515939E-03 +5.972803E-01 +2.058844E-01 +1.137974E-02 +1.294985E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.941168E-02 -1.566312E-03 -5.819380E-01 -1.632552E-01 -3.760498E-02 -1.414135E-03 0.000000E+00 0.000000E+00 -4.506052E-01 -2.030450E-01 -3.179351E-02 -1.010827E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5007,16 +5019,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.075776E-01 +1.157293E-02 +1.876736E-02 +3.142669E-04 0.000000E+00 0.000000E+00 +8.266087E-02 +6.832819E-03 +8.619422E-02 +6.961732E-03 +1.219440E-01 +1.487034E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.159266E-01 -1.343898E-02 -5.226385E-01 -2.731510E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5025,12 +5043,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.137535E-02 +2.639427E-03 +1.001959E-01 +1.003923E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.324866E-01 +1.755269E-02 +4.894914E-01 +7.732641E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5049,6 +5075,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.034037E-01 +3.976882E-03 +4.274866E-02 +1.827448E-03 +1.074496E-01 +1.154542E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5057,6 +5089,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.693308E-02 +6.692039E-04 +3.591875E-02 +1.290157E-03 +8.685374E-02 +7.543573E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5067,6 +5105,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.358167E-02 +5.560954E-04 +4.196949E-01 +8.821559E-02 +9.766237E-01 +3.187064E-01 +2.263564E+00 +1.440716E+00 +6.206466E-01 +1.107636E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5077,6 +5125,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.770925E-01 +1.577698E-02 +3.206601E-02 +8.744270E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5087,6 +5139,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.668276E-01 +2.783144E-02 +9.642655E-02 +9.273190E-03 +5.348043E-02 +2.860156E-03 +4.290530E-02 +1.295592E-03 +8.510644E-02 +4.903433E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5097,6 +5159,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.084059E-01 +1.536167E-01 +5.000907E-01 +1.141659E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5127,12 +5193,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.751278E-02 +3.307719E-03 +4.702080E-02 +2.210956E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.784082E-02 +1.431928E-03 +2.013938E-02 +4.055947E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5155,12 +5229,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.397100E-02 +5.746087E-04 +1.667122E-01 +1.609363E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.919075E-02 +1.535915E-03 +7.785033E-03 +6.060673E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5177,12 +5259,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.573597E-01 +5.360516E-02 +1.067391E-01 +1.139323E-02 +5.230381E-02 +2.735689E-03 +5.802912E-01 +1.787062E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +7.532992E-02 +5.674597E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5199,8 +5291,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.333296E-03 +1.777678E-06 +6.053656E-02 +3.664676E-03 0.000000E+00 0.000000E+00 +1.526715E-02 +2.330858E-04 +4.636650E-02 +2.149852E-03 +1.962851E-01 +3.852783E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5217,6 +5319,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.715682E-01 +6.930003E-02 +1.711787E+00 +1.416936E+00 +4.750553E-01 +9.493584E-02 +4.064748E-01 +9.731062E-02 +5.521307E-01 +1.121121E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5233,12 +5345,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.089221E-02 +2.590017E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.355127E-01 +7.824603E-02 +2.225245E+00 +1.498774E+00 +1.675068E+00 +7.021248E-01 +5.221919E-01 +2.558641E-01 +1.298371E-01 +1.330104E-02 +5.996349E-01 +1.076801E-01 +1.715162E-01 +1.827797E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5251,14 +5379,26 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.032011E-01 +1.065047E-02 +2.415666E-01 +2.918472E-02 +4.165840E-02 +1.735423E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +4.628620E-01 +9.960984E-02 +3.325684E-01 +5.701948E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.231222E-02 +9.616114E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5283,6 +5423,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.420269E-01 +2.017164E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5359,6 +5501,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.878870E-01 +8.287890E-02 +3.355938E-02 +1.126232E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5381,22 +5527,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.731890E-01 -7.463223E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.585103E-01 -2.512553E-02 -1.397611E-01 -6.883554E-03 -1.059772E+00 -4.178726E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.222164E-02 +4.938014E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5415,18 +5555,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.777314E-03 -2.282273E-05 -1.000486E-01 -5.059980E-03 -3.582039E-01 -6.432855E-02 -9.731871E-03 -9.470932E-05 -1.372111E-01 -1.324202E-02 -1.131350E-01 -6.526806E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5437,6 +5565,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.028040E-01 +4.112944E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5451,22 +5581,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.115470E-01 -1.110930E-01 -5.943022E-01 -1.606657E-01 -6.362069E-02 -2.288086E-03 -4.271496E-01 -1.001382E-01 -5.590730E-01 -1.980612E-01 -2.587580E-02 -6.695571E-04 -4.957978E-01 -1.478440E-01 -4.122015E-01 -6.559436E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5483,60 +5597,50 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.408839E-01 +9.930466E-03 +1.266345E+00 +7.682957E-01 0.000000E+00 0.000000E+00 +1.019759E-02 +1.039909E-04 0.000000E+00 0.000000E+00 -2.315108E-02 -5.359723E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.413343E-01 -6.576614E-02 -8.189078E-01 -3.886598E-01 -6.218186E-02 -2.320102E-03 -8.994055E-01 -3.484588E-01 -1.907294E-01 -3.637772E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.753697E-01 +3.075454E-02 +1.022426E-01 +9.085949E-03 0.000000E+00 0.000000E+00 +2.054517E-01 +4.221041E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.157485E-01 +2.724497E-02 +7.546768E-01 +2.070655E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.411392E-01 -1.368736E-02 -2.806299E-01 -4.304438E-02 -9.034349E-02 -3.010544E-03 -1.457798E-01 -1.214742E-02 -5.355302E-01 -1.674120E-01 -5.378071E-01 -1.611076E-01 -2.173503E-01 -2.791086E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5549,6 +5653,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.731061E-01 +1.428980E-01 +2.729010E-01 +4.130164E-02 +7.434457E-03 +5.527115E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5557,20 +5667,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.888138E-03 -9.777527E-05 -4.328034E-01 -7.018169E-02 -1.783531E-01 -1.043350E-02 0.000000E+00 0.000000E+00 -4.359871E-01 -1.319768E-01 -2.848605E-01 -8.114553E-02 -1.906091E-01 -3.106247E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5583,18 +5681,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.749687E-03 -1.906602E-05 -1.931554E-01 -3.730901E-02 0.000000E+00 0.000000E+00 +1.892564E-01 +3.581800E-02 +6.573175E-01 +3.473163E-01 +1.641852E+00 +9.021845E-01 +2.844653E+00 +1.857026E+00 +3.432563E-02 +1.076561E-03 0.000000E+00 0.000000E+00 -5.672424E-02 -3.217639E-03 -1.788734E-01 -3.199570E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5603,10 +5703,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.138858E-01 -6.550852E-03 -3.629454E-02 -1.317294E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5617,12 +5713,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.486854E-02 -1.023386E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.382909E-01 +1.912437E-02 +5.463078E-01 +1.319680E-01 +2.874488E-01 +4.930982E-02 +2.593320E-01 +3.729386E-02 +5.896045E-03 +3.476335E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5649,16 +5753,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.876298E-01 -8.273087E-02 -8.479551E-02 -7.190278E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +5.835684E-02 +3.405521E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5679,14 +5781,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.718543E-03 +3.270174E-05 +1.244175E-01 +1.547972E-02 0.000000E+00 0.000000E+00 -2.966966E-01 -7.585142E-02 -2.993081E-01 -3.825902E-02 -1.651321E-01 -2.726862E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5707,16 +5807,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.165202E-01 +6.930471E-03 +2.882402E-01 +4.938325E-02 +1.786607E-02 +3.191964E-04 0.000000E+00 0.000000E+00 +7.373020E-01 +2.296999E-01 +1.076125E+00 +3.620665E-01 +2.958840E-01 +7.992999E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.632059E-01 -3.716460E-02 -1.055991E-01 -1.115116E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5727,10 +5835,26 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.215623E-02 +4.908984E-04 +7.663116E-02 +5.274653E-03 +2.330690E-01 +5.432115E-02 +4.899884E-02 +2.400887E-03 +2.509994E-01 +3.312022E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.646169E-01 +2.722514E-02 +2.779035E-01 +3.159895E-02 +2.470258E-01 +3.094096E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5745,6 +5869,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.545269E-01 +1.316670E-01 +3.866882E-01 +1.202701E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5755,8 +5883,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.327759E-01 +1.698162E-02 0.000000E+00 0.000000E+00 +8.606674E-02 +7.407484E-03 +1.553405E-01 +1.453017E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5765,6 +5899,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.685770E-02 +2.841820E-04 +4.475530E-02 +2.003037E-03 +7.510889E-01 +3.262838E-01 +1.518297E-01 +1.402100E-02 +1.948898E-01 +3.798205E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5777,12 +5921,32 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.650200E-01 +7.121133E-02 +2.384503E+00 +1.209500E+00 +2.214217E-01 +2.168033E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.375452E-01 +1.835673E-02 +1.548402E-01 +2.397550E-02 +6.058355E-02 +1.850618E-03 +1.431855E-01 +2.050210E-02 +7.003130E-01 +2.735249E-01 +3.979720E-01 +1.307259E-01 +9.764192E-02 +9.533945E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5793,6 +5957,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.762615E-01 +3.559292E-02 +8.969160E-01 +4.355459E-01 +8.832719E-02 +7.801693E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5823,6 +5993,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.149703E+00 +3.989107E-01 +8.049860E-01 +1.599684E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5853,6 +6027,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.449729E-01 +2.101714E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5935,8 +6111,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.197843E-01 -1.434827E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5969,8 +6143,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.313115E-02 -2.118609E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5979,8 +6151,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.124150E-02 -4.512011E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5991,14 +6161,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.259978E-01 -9.120084E-03 -3.029379E-01 -4.720304E-02 -7.711380E-02 -5.946538E-03 -5.578537E-01 -2.228200E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6009,14 +6171,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.998826E-02 -1.599061E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.355862E-01 +1.838362E-02 +4.229078E-03 +1.788510E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6025,28 +6189,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.738231E-01 -3.083875E-01 -8.792963E-02 -7.365684E-03 0.000000E+00 0.000000E+00 -6.859429E-01 -4.381930E-01 -4.475603E-02 -2.003102E-03 0.000000E+00 0.000000E+00 -1.062099E-02 -1.128054E-04 -6.084179E-01 -1.928178E-01 -1.211741E+00 -3.822834E-01 -9.857623E-01 -5.764008E-01 0.000000E+00 0.000000E+00 +9.929650E-02 +9.859794E-03 +2.615062E-01 +3.533944E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6059,6 +6211,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.481609E-01 +2.195166E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6071,18 +6225,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.578908E+00 -1.504342E+00 -1.531060E+00 -5.479843E-01 -7.091821E-01 -1.623053E-01 -8.951355E-01 -2.588366E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.071176E-01 +5.415798E-02 +1.115403E+00 +3.834870E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6105,14 +6255,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.078068E-01 -5.681691E-02 -5.382700E-01 -1.356178E-01 -1.432722E-01 -2.052691E-02 -1.692017E-01 -1.246774E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6121,6 +6263,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.432122E-01 +1.520012E-02 +5.073845E-01 +9.507188E-02 +4.871086E-01 +1.359461E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6137,16 +6285,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.122446E-02 -1.259886E-04 -3.558429E-01 -5.554412E-02 -1.692925E-01 -2.865995E-02 0.000000E+00 0.000000E+00 -1.163856E-01 -1.354561E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6159,12 +6299,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.704844E-02 -2.213555E-03 -5.346674E-01 -9.802160E-02 -2.269765E-01 -3.013916E-02 +1.164369E-01 +1.355755E-02 +2.357411E-01 +2.637254E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6193,12 +6331,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.349738E-02 -2.861969E-03 -2.033921E-02 -2.165773E-04 -1.627545E-02 -1.064467E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6223,20 +6355,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.496326E-02 -2.021695E-03 -6.129324E-01 -1.687388E-01 -2.278420E+00 -1.455838E+00 -4.335699E-01 -1.339468E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +6.200446E-02 +3.844553E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6257,20 +6383,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.817151E-01 -5.082293E-02 -1.070149E+00 -2.667041E-01 -1.439164E+00 -9.211140E-01 -1.283074E-01 -1.481969E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.186127E-01 +1.335481E-02 +2.870320E-01 +4.518339E-02 0.000000E+00 0.000000E+00 +1.235293E-01 +1.096341E-02 +1.895015E-01 +3.591083E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6291,14 +6417,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.049881E-01 -1.883453E-02 -1.508866E+00 -7.549587E-01 -4.010098E-01 -1.524411E-01 -2.631862E-01 -6.926699E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6309,6 +6427,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.297200E-01 +5.369804E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6325,12 +6445,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.295989E-01 -1.440027E-01 -1.090817E-01 -1.189883E-02 0.000000E+00 0.000000E+00 +9.183632E-01 +2.857439E-01 +4.069857E-03 +1.656373E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6341,6 +6461,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.895403E-02 +2.396497E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6363,6 +6485,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.473267E-01 +2.170516E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6375,6 +6499,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.853336E-01 +3.434853E-02 +4.612134E-01 +1.063957E-01 +1.223026E-01 +1.495794E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6389,6 +6519,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.750173E-01 +1.153950E-01 +2.136998E-01 +4.566760E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6401,6 +6535,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.771223E-02 +3.137232E-04 +1.358408E-01 +1.019608E-02 +8.209316E-02 +3.505892E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6431,6 +6571,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.078001E-01 +1.757558E-01 +5.722245E-01 +9.204133E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6461,6 +6605,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.354717E-01 +9.718740E-03 +5.221741E-02 +2.726658E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6513,16 +6661,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.013002E+00 -7.342944E-01 -1.389340E-01 -1.930266E-02 -3.765825E-01 -1.199979E-01 -1.221292E-01 -6.075446E-03 -3.014078E-02 -8.665341E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6531,12 +6669,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.962754E-03 -8.777912E-06 -3.776620E-01 -5.172631E-02 -4.136599E-01 -9.399949E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6547,18 +6679,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.693384E-01 -2.373996E-01 -1.910629E+00 -1.172406E+00 -2.881727E-01 -5.767501E-02 -4.855482E-02 -1.892682E-03 -6.546034E-01 -2.318763E-01 -1.873724E-01 -3.510840E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6567,12 +6687,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.193374E-01 -1.051560E-01 -7.105558E-01 -3.208231E-01 -7.151171E-03 -5.113925E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6583,12 +6697,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.933512E-03 -8.605494E-06 -1.069486E-02 -1.143799E-04 -8.689115E-02 -7.550072E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6603,8 +6711,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.954092E-04 -8.726658E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6617,12 +6723,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.699938E-02 -7.289665E-04 0.000000E+00 0.000000E+00 -2.961757E-01 -8.772007E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6649,16 +6751,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.625541E-01 -3.467106E-02 -1.228650E+00 -3.645409E-01 -3.254588E-01 -4.866345E-02 -3.393231E-01 -7.059711E-02 -1.924584E-02 -3.704024E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6683,14 +6775,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.213353E-01 -4.898934E-02 -9.693731E-02 -9.396841E-03 -4.445791E-02 -1.976506E-03 -4.758963E-02 -2.264773E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6723,6 +6807,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.663835E-02 +8.107319E-04 +1.574352E-01 +2.355445E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6739,8 +6827,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.853475E-01 -3.435371E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6759,6 +6845,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.788668E-02 +1.435401E-03 +2.270802E-02 +5.156542E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6769,12 +6859,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.813316E-02 -1.454138E-03 -3.041824E-01 -2.629618E-02 -7.103962E-01 -3.022410E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6795,20 +6879,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.896789E-03 +7.915286E-05 +4.847729E-02 +2.350047E-03 +2.905640E-01 +8.442745E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.043939E-01 -2.089814E-02 -9.015318E-01 -3.525237E-01 -1.419016E+00 -4.815865E-01 -5.610289E-01 -1.580760E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6835,14 +6917,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.456215E-01 -6.032991E-02 -9.586129E-01 -3.180953E-01 -1.504620E+00 -5.555003E-01 -4.344080E-02 -1.887103E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6869,12 +6943,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.833469E-01 -8.028547E-02 -1.596169E-01 -1.573140E-02 -9.337714E-02 -8.719290E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6905,8 +6973,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.139296E-02 -8.352674E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6959,6 +7025,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.452042E-02 +1.191659E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7049,14 +7117,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.679763E-01 +1.354065E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.507123E-01 -2.271418E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7079,26 +7147,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.671004E-01 -3.719394E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.727350E-02 +1.389314E-03 +1.316492E-02 +1.733151E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.655630E-02 -1.336363E-03 -1.711147E-01 -2.580079E-02 -5.510676E-02 -1.633869E-03 -3.842463E-01 -6.997051E-02 -4.251576E-01 -7.043236E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7107,16 +7167,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.138585E-01 -1.892076E-01 -4.509104E-01 -6.106776E-02 -5.473296E-01 -8.446369E-02 -1.371447E+00 -7.575889E-01 -4.929697E-03 -2.430192E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7125,32 +7175,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.501235E-01 -3.140143E-02 -1.212750E+00 -6.220960E-01 -2.707969E-01 -5.067333E-02 -9.097656E-02 -6.115551E-03 -9.355126E-02 -4.387198E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.098030E+00 -7.326929E-01 -6.181269E-01 -2.930526E-01 -5.709431E-01 -1.684348E-01 -3.185796E-01 -7.293711E-02 -1.228362E-02 -1.508873E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7159,14 +7189,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.813618E-01 -8.312020E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -8.855122E-02 -7.841319E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7175,8 +7201,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.916777E-03 -7.950892E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7229,8 +7253,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.824518E-02 -7.977901E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7283,8 +7305,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.713739E-02 -5.950177E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7317,8 +7337,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.251875E-01 -2.055219E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7347,12 +7365,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.349067E-02 -2.861252E-03 -8.385996E-02 -4.216710E-03 -2.666097E-01 -5.081994E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7383,10 +7395,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.374934E-01 -5.115209E-02 -5.177677E-03 -2.680834E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7417,8 +7425,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.683602E-01 -6.063009E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7449,10 +7455,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.620554E-01 -2.004315E-02 -2.260846E-02 -5.111425E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7481,10 +7483,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.517572E-01 -6.338168E-02 -1.107208E-01 -1.225909E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7669,14 +7667,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.337649E-01 -4.427485E-02 -8.822533E-02 -7.783708E-03 -2.279217E-01 -2.627022E-02 -4.122755E-01 -1.699711E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7685,16 +7675,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.702534E-03 -1.370875E-05 -2.384372E-01 -5.685228E-02 -2.211845E-01 -4.083378E-02 -1.896563E-01 -2.817529E-02 -3.458758E-01 -1.196300E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7703,8 +7683,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.005501E-01 -7.885603E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7719,8 +7697,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.054580E-02 -1.643962E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7737,14 +7713,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.902819E-01 -8.268688E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7977,6 +7945,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.589438E-01 +2.060098E-02 +8.883974E-03 +7.892500E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8001,8 +7973,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.085624E-02 +1.178580E-04 +1.326034E-02 +1.758367E-04 0.000000E+00 0.000000E+00 +2.901092E-02 +8.416334E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8027,6 +8005,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.582984E-01 +2.505838E-02 +1.460448E-01 +2.132907E-02 +3.309870E-02 +1.095524E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8539,6 +8523,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.924729E-01 +2.024222E-01 +2.832772E-02 +8.024597E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8565,6 +8553,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.155931E-01 +1.336177E-02 +2.362143E-01 +5.579719E-02 +6.926634E-01 +2.428255E-01 +5.993455E-03 +3.592151E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8593,6 +8589,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.171592E-02 +5.143173E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -9137,6 +9135,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.214580E-02 +2.719184E-03 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/tests/test_fixed_source/results_true.dat b/tests/test_fixed_source/results_true.dat index c4019d9c80..c7ddf3c0b5 100644 --- a/tests/test_fixed_source/results_true.dat +++ b/tests/test_fixed_source/results_true.dat @@ -1,6 +1,6 @@ tally 1: -4.518781E+02 -2.056383E+04 +4.518784E+02 +2.056386E+04 leakage: 9.750000E+00 9.508100E+00 diff --git a/tests/test_infinite_cell/results_true.dat b/tests/test_infinite_cell/results_true.dat index d24fba45b5..b909c92bbf 100644 --- a/tests/test_infinite_cell/results_true.dat +++ b/tests/test_infinite_cell/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.901399E-02 2.451460E-03 +9.893460E-02 1.178316E-03 diff --git a/tests/test_lattice/results_true.dat b/tests/test_lattice/results_true.dat index 334ccba33f..1d3d47fc45 100644 --- a/tests/test_lattice/results_true.dat +++ b/tests/test_lattice/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.608917E-01 5.170585E-02 +9.413559E-01 6.157522E-02 diff --git a/tests/test_lattice_hex/results_true.dat b/tests/test_lattice_hex/results_true.dat index aca8f5eb5b..4ba727dbfe 100644 --- a/tests/test_lattice_hex/results_true.dat +++ b/tests/test_lattice_hex/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.578422E-01 1.020501E-02 +2.496460E-01 1.257055E-02 diff --git a/tests/test_lattice_mixed/results_true.dat b/tests/test_lattice_mixed/results_true.dat index 068ec5abd7..d3c19b11a5 100644 --- a/tests/test_lattice_mixed/results_true.dat +++ b/tests/test_lattice_mixed/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.882168E-01 1.190961E-02 +9.790311E-01 9.660522E-03 diff --git a/tests/test_lattice_multiple/results_true.dat b/tests/test_lattice_multiple/results_true.dat index 445f1386e3..318bd92356 100644 --- a/tests/test_lattice_multiple/results_true.dat +++ b/tests/test_lattice_multiple/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.102447E+00 7.056170E-03 +9.581523E-01 4.261823E-02 diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index feb234bba0..8b8556ffaa 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -1,19 +1,19 @@ material group in nuclide mean std. dev. -0 1 1 total 0.411633 0.011133 material group in nuclide mean std. dev. -0 1 1 total 0.076642 0.004088 material group in group out nuclide mean std. dev. -0 1 1 1 total 0.349336 0.010391 material group out nuclide mean std. dev. -0 1 1 total 1 0.035459 material group in nuclide mean std. dev. -0 2 1 total 0.247014 0.017374 material group in nuclide mean std. dev. +0 1 1 total 0.412084 0.02359 material group in nuclide mean std. dev. +0 1 1 total 0.076425 0.003691 material group in group out nuclide mean std. dev. +0 1 1 1 total 0.345643 0.021487 material group out nuclide mean std. dev. +0 1 1 total 1 0.055333 material group in nuclide mean std. dev. +0 2 1 total 0.241262 0.00841 material group in nuclide mean std. dev. 0 2 1 total 0 0 material group in group out nuclide mean std. dev. -0 2 1 1 total 0.245818 0.016929 material group out nuclide mean std. dev. -0 2 1 total 0 0 material group in nuclide mean std. dev. -0 3 1 total 0.38971 0.050064 material group in nuclide mean std. dev. +0 2 1 1 total 0.241262 0.00841 material group out nuclide mean std. dev. +0 2 1 total 0 0 material group in nuclide mean std. dev. +0 3 1 total 0.400028 0.034667 material group in nuclide mean std. dev. 0 3 1 total 0 0 material group in group out nuclide mean std. dev. -0 3 1 1 total 0.383139 0.04919 material group out nuclide mean std. dev. +0 3 1 1 total 0.393462 0.033646 material group out nuclide mean std. dev. 0 3 1 total 0 0 material group in nuclide mean std. dev. -0 4 1 total 0.333404 0.029065 material group in nuclide mean std. dev. +0 4 1 total 0.377402 0.072937 material group in nuclide mean std. dev. 0 4 1 total 0 0 material group in group out nuclide mean std. dev. -0 4 1 1 total 0.327175 0.028684 material group out nuclide mean std. dev. +0 4 1 1 total 0.371473 0.071226 material group out nuclide mean std. dev. 0 4 1 total 0 0 material group in nuclide mean std. dev. 0 5 1 total 0 0 material group in nuclide mean std. dev. 0 5 1 total 0 0 material group in group out nuclide mean std. dev. @@ -30,20 +30,20 @@ 0 8 1 total 0 0 material group in nuclide mean std. dev. 0 8 1 total 0 0 material group in group out nuclide mean std. dev. 0 8 1 1 total 0 0 material group out nuclide mean std. dev. -0 8 1 total 0 0 material group in nuclide mean std. dev. -0 9 1 total 0 0 material group in nuclide mean std. dev. -0 9 1 total 0 0 material group in group out nuclide mean std. dev. -0 9 1 1 total 0 0 material group out nuclide mean std. dev. -0 9 1 total 0 0 material group in nuclide mean std. dev. -0 10 1 total 0 0 material group in nuclide mean std. dev. -0 10 1 total 0 0 material group in group out nuclide mean std. dev. -0 10 1 1 total 0 0 material group out nuclide mean std. dev. -0 10 1 total 0 0 material group in nuclide mean std. dev. -0 11 1 total 0.5826 0.456605 material group in nuclide mean std. dev. +0 8 1 total 0 0 material group in nuclide mean std. dev. +0 9 1 total 0.600536 0.748875 material group in nuclide mean std. dev. +0 9 1 total 0 0 material group in group out nuclide mean std. dev. +0 9 1 1 total 0.600536 0.748875 material group out nuclide mean std. dev. +0 9 1 total 0 0 material group in nuclide mean std. dev. +0 10 1 total 0.235515 0.613974 material group in nuclide mean std. dev. +0 10 1 total 0 0 material group in group out nuclide mean std. dev. +0 10 1 1 total 0.235515 0.613974 material group out nuclide mean std. dev. +0 10 1 total 0 0 material group in nuclide mean std. dev. +0 11 1 total 0.510145 0.741941 material group in nuclide mean std. dev. 0 11 1 total 0 0 material group in group out nuclide mean std. dev. -0 11 1 1 total 0.565899 0.441588 material group out nuclide mean std. dev. -0 11 1 total 0 0 material group in nuclide mean std. dev. -0 12 1 total 0 0 material group in nuclide mean std. dev. -0 12 1 total 0 0 material group in group out nuclide mean std. dev. -0 12 1 1 total 0 0 material group out nuclide mean std. dev. +0 11 1 1 total 0.491857 0.715554 material group out nuclide mean std. dev. +0 11 1 total 0 0 material group in nuclide mean std. dev. +0 12 1 total 0.73836 0.825631 material group in nuclide mean std. dev. +0 12 1 total 0 0 material group in group out nuclide mean std. dev. +0 12 1 1 total 0.723265 0.808231 material group out nuclide mean std. dev. 0 12 1 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index 4c1b33a2da..99c373f998 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,5 +1,5 @@ avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.651951 1.469284 avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 avg(distribcell) group in group out nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.53214 1.320678 avg(distribcell) group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.718919 0.520644 avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 avg(distribcell) group in group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.695166 0.510606 avg(distribcell) group out nuclide mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_hdf5/results_true.dat b/tests/test_mgxs_library_hdf5/results_true.dat index 0c30cdde60..629bf60156 100644 --- a/tests/test_mgxs_library_hdf5/results_true.dat +++ b/tests/test_mgxs_library_hdf5/results_true.dat @@ -1,56 +1,56 @@ domain=1 type=transport -[ 0.37483545 0.81182796] -[ 0.00975656 0.09252336] +[ 0.37274472 0.86160691] +[ 0.02426918 0.03234902] domain=1 type=nu-fission -[ 0.02084086 0.6657263 ] -[ 0.00101232 0.0576272 ] +[ 0.021789 0.71407573] +[ 0.00118188 0.04055226] domain=1 type=nu-scatter matrix -[[ 3.42223019e-01 3.29418484e-04] - [ 0.00000000e+00 4.23113552e-01]] -[[ 0.00959152 0.00020181] - [ 0. 0.06751478]] +[[ 0.3373971 0.00155945] + [ 0. 0.42205129]] +[[ 0.02303884 0.00051015] + [ 0. 0.02161702]] domain=1 type=chi [ 1. 0.] -[ 0.03545939 0. ] +[ 0.05533321 0. ] domain=2 type=transport -[ 0.24589766 0.25842474] -[ 0.01860222 0.0422331 ] +[ 0.23725441 0.28593027] +[ 0.00818357 0.04879593] domain=2 type=nu-fission [ 0. 0.] [ 0. 0.] domain=2 type=nu-scatter matrix -[[ 0.24458479 0. ] - [ 0. 0.25842474]] -[[ 0.01809844 0. ] - [ 0. 0.0422331 ]] +[[ 0.23725441 0. ] + [ 0. 0.28593027]] +[[ 0.00818357 0. ] + [ 0. 0.04879593]] domain=2 type=chi [ 0. 0.] [ 0. 0.] domain=3 type=transport -[ 0.27657178 1.36782402] -[ 0.04377331 0.31728543] +[ 0.28690578 1.41815062] +[ 0.02740142 0.26530756] domain=3 type=nu-fission [ 0. 0.] [ 0. 0.] domain=3 type=nu-scatter matrix -[[ 0.24863329 0.02615518] - [ 0. 1.31985949]] -[[ 0.0423232 0.00168668] - [ 0. 0.31396901]] +[[ 0.25993686 0.02618721] + [ 0. 1.35952132]] +[[ 0.02611466 0.00166461] + [ 0. 0.2585046 ]] domain=3 type=chi [ 0. 0.] [ 0. 0.] domain=4 type=transport -[ 0.25159164 1.13749254] -[ 0.02889307 0.113413 ] +[ 0.24244686 1.25395921] +[ 0.06103082 0.38836257] domain=4 type=nu-fission [ 0. 0.] [ 0. 0.] domain=4 type=nu-scatter matrix -[[ 0.22741674 0.02292717] - [ 0. 1.08230769]] -[[ 0.02822188 0.00123647] - [ 0. 0.11058743]] +[[ 0.2179296 0.023662 ] + [ 0. 1.21507398]] +[[ 0.0585649 0.00308328] + [ 0. 0.3810251 ]] domain=4 type=chi [ 0. 0.] [ 0. 0.] @@ -111,58 +111,58 @@ domain=8 type=chi [ 0. 0.] [ 0. 0.] domain=9 type=transport -[ 0. 0.] -[ 0. 0.] +[ 0.60053598 0. ] +[ 0.74887543 0. ] domain=9 type=nu-fission [ 0. 0.] [ 0. 0.] domain=9 type=nu-scatter matrix -[[ 0. 0.] - [ 0. 0.]] -[[ 0. 0.] - [ 0. 0.]] +[[ 0.60053598 0. ] + [ 0. 0. ]] +[[ 0.74887543 0. ] + [ 0. 0. ]] domain=9 type=chi [ 0. 0.] [ 0. 0.] domain=10 type=transport -[ 0. 0.] -[ 0. 0.] +[ 0.23551495 0. ] +[ 0.61397415 0. ] domain=10 type=nu-fission [ 0. 0.] [ 0. 0.] domain=10 type=nu-scatter matrix -[[ 0. 0.] - [ 0. 0.]] -[[ 0. 0.] - [ 0. 0.]] +[[ 0.23551495 0. ] + [ 0. 0. ]] +[[ 0.61397415 0. ] + [ 0. 0. ]] domain=10 type=chi [ 0. 0.] [ 0. 0.] domain=11 type=transport -[ 0.32838473 1.08549606] -[ 0.42249726 1.10815395] +[ 0.18632392 0.94598628] +[ 0.63212919 1.59113341] domain=11 type=nu-fission [ 0. 0.] [ 0. 0.] domain=11 type=nu-scatter matrix -[[ 0.3032413 0.02514343] - [ 0. 1.03575664]] -[[ 0.40403607 0.02113257] - [ 0. 1.0667609 ]] +[[ 0.15444875 0.03187517] + [ 0. 0.90308451]] +[[ 0.59768579 0.0450783 ] + [ 0. 1.53214394]] domain=11 type=chi [ 0. 0.] [ 0. 0.] domain=12 type=transport -[ 0. 0.] -[ 0. 0.] +[ 0.21329208 1.3909745 ] +[ 0.27144387 2.13734565] domain=12 type=nu-fission [ 0. 0.] [ 0. 0.] domain=12 type=nu-scatter matrix -[[ 0. 0.] - [ 0. 0.]] -[[ 0. 0.] - [ 0. 0.]] +[[ 0.18605249 0.02723959] + [ 0. 1.35711799]] +[[ 0.25763254 0.02955488] + [ 0. 2.08984614]] domain=12 type=chi [ 0. 0.] [ 0. 0.] diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index a12693d544..29b94f44f6 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -1,42 +1,42 @@ material group in nuclide mean std. dev. -1 1 1 total 0.374835 0.009757 -0 1 2 total 0.811828 0.092523 material group in nuclide mean std. dev. -1 1 1 total 0.020841 0.001012 -0 1 2 total 0.665726 0.057627 material group in group out nuclide mean std. dev. -3 1 1 1 total 0.342223 0.009592 -2 1 1 2 total 0.000329 0.000202 +1 1 1 total 0.372745 0.024269 +0 1 2 total 0.861607 0.032349 material group in nuclide mean std. dev. +1 1 1 total 0.021789 0.001182 +0 1 2 total 0.714076 0.040552 material group in group out nuclide mean std. dev. +3 1 1 1 total 0.337397 0.023039 +2 1 1 2 total 0.001559 0.000510 1 1 2 1 total 0.000000 0.000000 -0 1 2 2 total 0.423114 0.067515 material group out nuclide mean std. dev. -1 1 1 total 1 0.035459 +0 1 2 2 total 0.422051 0.021617 material group out nuclide mean std. dev. +1 1 1 total 1 0.055333 0 1 2 total 0 0.000000 material group in nuclide mean std. dev. -1 2 1 total 0.245898 0.018602 -0 2 2 total 0.258425 0.042233 material group in nuclide mean std. dev. +1 2 1 total 0.237254 0.008184 +0 2 2 total 0.285930 0.048796 material group in nuclide mean std. dev. 1 2 1 total 0 0 0 2 2 total 0 0 material group in group out nuclide mean std. dev. -3 2 1 1 total 0.244585 0.018098 +3 2 1 1 total 0.237254 0.008184 2 2 1 2 total 0.000000 0.000000 1 2 2 1 total 0.000000 0.000000 -0 2 2 2 total 0.258425 0.042233 material group out nuclide mean std. dev. +0 2 2 2 total 0.285930 0.048796 material group out nuclide mean std. dev. 1 2 1 total 0 0 0 2 2 total 0 0 material group in nuclide mean std. dev. -1 3 1 total 0.276572 0.043773 -0 3 2 total 1.367824 0.317285 material group in nuclide mean std. dev. +1 3 1 total 0.286906 0.027401 +0 3 2 total 1.418151 0.265308 material group in nuclide mean std. dev. 1 3 1 total 0 0 0 3 2 total 0 0 material group in group out nuclide mean std. dev. -3 3 1 1 total 0.248633 0.042323 -2 3 1 2 total 0.026155 0.001687 +3 3 1 1 total 0.259937 0.026115 +2 3 1 2 total 0.026187 0.001665 1 3 2 1 total 0.000000 0.000000 -0 3 2 2 total 1.319859 0.313969 material group out nuclide mean std. dev. +0 3 2 2 total 1.359521 0.258505 material group out nuclide mean std. dev. 1 3 1 total 0 0 0 3 2 total 0 0 material group in nuclide mean std. dev. -1 4 1 total 0.251592 0.028893 -0 4 2 total 1.137493 0.113413 material group in nuclide mean std. dev. +1 4 1 total 0.242447 0.061031 +0 4 2 total 1.253959 0.388363 material group in nuclide mean std. dev. 1 4 1 total 0 0 0 4 2 total 0 0 material group in group out nuclide mean std. dev. -3 4 1 1 total 0.227417 0.028222 -2 4 1 2 total 0.022927 0.001236 +3 4 1 1 total 0.217930 0.058565 +2 4 1 2 total 0.023662 0.003083 1 4 2 1 total 0.000000 0.000000 -0 4 2 2 total 1.082308 0.110587 material group out nuclide mean std. dev. +0 4 2 2 total 1.215074 0.381025 material group out nuclide mean std. dev. 1 4 1 total 0 0 0 4 2 total 0 0 material group in nuclide mean std. dev. 1 5 1 total 0 0 @@ -78,44 +78,44 @@ 1 8 2 1 total 0 0 0 8 2 2 total 0 0 material group out nuclide mean std. dev. 1 8 1 total 0 0 -0 8 2 total 0 0 material group in nuclide mean std. dev. +0 8 2 total 0 0 material group in nuclide mean std. dev. +1 9 1 total 0.600536 0.748875 +0 9 2 total 0.000000 0.000000 material group in nuclide mean std. dev. 1 9 1 total 0 0 -0 9 2 total 0 0 material group in nuclide mean std. dev. -1 9 1 total 0 0 -0 9 2 total 0 0 material group in group out nuclide mean std. dev. -3 9 1 1 total 0 0 -2 9 1 2 total 0 0 -1 9 2 1 total 0 0 -0 9 2 2 total 0 0 material group out nuclide mean std. dev. +0 9 2 total 0 0 material group in group out nuclide mean std. dev. +3 9 1 1 total 0.600536 0.748875 +2 9 1 2 total 0.000000 0.000000 +1 9 2 1 total 0.000000 0.000000 +0 9 2 2 total 0.000000 0.000000 material group out nuclide mean std. dev. 1 9 1 total 0 0 -0 9 2 total 0 0 material group in nuclide mean std. dev. +0 9 2 total 0 0 material group in nuclide mean std. dev. +1 10 1 total 0.235515 0.613974 +0 10 2 total 0.000000 0.000000 material group in nuclide mean std. dev. 1 10 1 total 0 0 -0 10 2 total 0 0 material group in nuclide mean std. dev. -1 10 1 total 0 0 -0 10 2 total 0 0 material group in group out nuclide mean std. dev. -3 10 1 1 total 0 0 -2 10 1 2 total 0 0 -1 10 2 1 total 0 0 -0 10 2 2 total 0 0 material group out nuclide mean std. dev. +0 10 2 total 0 0 material group in group out nuclide mean std. dev. +3 10 1 1 total 0.235515 0.613974 +2 10 1 2 total 0.000000 0.000000 +1 10 2 1 total 0.000000 0.000000 +0 10 2 2 total 0.000000 0.000000 material group out nuclide mean std. dev. 1 10 1 total 0 0 0 10 2 total 0 0 material group in nuclide mean std. dev. -1 11 1 total 0.328385 0.422497 -0 11 2 total 1.085496 1.108154 material group in nuclide mean std. dev. +1 11 1 total 0.186324 0.632129 +0 11 2 total 0.945986 1.591133 material group in nuclide mean std. dev. 1 11 1 total 0 0 0 11 2 total 0 0 material group in group out nuclide mean std. dev. -3 11 1 1 total 0.303241 0.404036 -2 11 1 2 total 0.025143 0.021133 +3 11 1 1 total 0.154449 0.597686 +2 11 1 2 total 0.031875 0.045078 1 11 2 1 total 0.000000 0.000000 -0 11 2 2 total 1.035757 1.066761 material group out nuclide mean std. dev. +0 11 2 2 total 0.903085 1.532144 material group out nuclide mean std. dev. 1 11 1 total 0 0 -0 11 2 total 0 0 material group in nuclide mean std. dev. +0 11 2 total 0 0 material group in nuclide mean std. dev. +1 12 1 total 0.213292 0.271444 +0 12 2 total 1.390975 2.137346 material group in nuclide mean std. dev. 1 12 1 total 0 0 -0 12 2 total 0 0 material group in nuclide mean std. dev. -1 12 1 total 0 0 -0 12 2 total 0 0 material group in group out nuclide mean std. dev. -3 12 1 1 total 0 0 -2 12 1 2 total 0 0 -1 12 2 1 total 0 0 -0 12 2 2 total 0 0 material group out nuclide mean std. dev. +0 12 2 total 0 0 material group in group out nuclide mean std. dev. +3 12 1 1 total 0.186052 0.257633 +2 12 1 2 total 0.027240 0.029555 +1 12 2 1 total 0.000000 0.000000 +0 12 2 2 total 1.357118 2.089846 material group out nuclide mean std. dev. 1 12 1 total 0 0 0 12 2 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index 6226b7b817..6c34647ebe 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -1,47 +1,47 @@ material group in nuclide mean std. dev. -34 1 1 U-234 0.000074 0.000188 -35 1 1 U-235 0.007460 0.000634 -36 1 1 U-236 0.001766 0.000430 -37 1 1 U-238 0.211760 0.008955 -38 1 1 Np-237 0.000252 0.000216 +34 1 1 U-234 0.000173 0.000173 +35 1 1 U-235 0.010677 0.001889 +36 1 1 U-236 0.002390 0.001055 +37 1 1 U-238 0.213680 0.013272 +38 1 1 Np-237 0.000000 0.000000 39 1 1 Pu-238 0.000000 0.000000 -40 1 1 Pu-239 0.003526 0.000782 -41 1 1 Pu-240 0.003507 0.000688 -42 1 1 Pu-241 0.000426 0.000213 -43 1 1 Pu-242 0.000329 0.000329 -44 1 1 Am-241 0.000000 0.000000 +40 1 1 Pu-239 0.002911 0.000639 +41 1 1 Pu-240 0.004426 0.000806 +42 1 1 Pu-241 0.000690 0.000387 +43 1 1 Pu-242 0.000000 0.000000 +44 1 1 Am-241 0.000173 0.000173 45 1 1 Am-242m 0.000000 0.000000 46 1 1 Am-243 0.000000 0.000000 47 1 1 Cm-242 0.000000 0.000000 48 1 1 Cm-243 0.000000 0.000000 49 1 1 Cm-244 0.000000 0.000000 50 1 1 Cm-245 0.000000 0.000000 -51 1 1 Mo-95 0.000081 0.000185 -52 1 1 Tc-99 0.001119 0.000411 -53 1 1 Ru-101 0.000000 0.000000 -54 1 1 Ru-103 0.000000 0.000000 -55 1 1 Ag-109 0.000165 0.000165 +51 1 1 Mo-95 0.000000 0.000000 +52 1 1 Tc-99 0.000173 0.000173 +53 1 1 Ru-101 0.000238 0.000254 +54 1 1 Ru-103 0.000002 0.000243 +55 1 1 Ag-109 0.000000 0.000000 56 1 1 Xe-135 0.000000 0.000000 -57 1 1 Cs-133 0.000429 0.000225 -58 1 1 Nd-143 0.000340 0.000301 -59 1 1 Nd-145 0.000945 0.000432 +57 1 1 Cs-133 0.000347 0.000213 +58 1 1 Nd-143 0.000447 0.000292 +59 1 1 Nd-145 0.000564 0.000294 60 1 1 Sm-147 0.000000 0.000000 61 1 1 Sm-149 0.000000 0.000000 -62 1 1 Sm-150 0.000060 0.000195 -63 1 1 Sm-151 0.000165 0.000165 -64 1 1 Sm-152 0.000567 0.000249 -65 1 1 Eu-153 0.000329 0.000202 +62 1 1 Sm-150 0.000472 0.000239 +63 1 1 Sm-151 0.000000 0.000000 +64 1 1 Sm-152 0.000492 0.000352 +65 1 1 Eu-153 0.000173 0.000173 66 1 1 Gd-155 0.000000 0.000000 -67 1 1 O-16 0.141533 0.006851 +67 1 1 O-16 0.134715 0.009801 0 1 2 U-234 0.000000 0.000000 -1 1 2 U-235 0.177240 0.019675 -2 1 2 U-236 0.004312 0.003674 -3 1 2 U-238 0.260438 0.055946 -4 1 2 Np-237 0.001791 0.001797 +1 1 2 U-235 0.199907 0.007776 +2 1 2 U-236 0.001501 0.002037 +3 1 2 U-238 0.255355 0.029743 +4 1 2 Np-237 0.000000 0.000000 5 1 2 Pu-238 0.000000 0.000000 -6 1 2 Pu-239 0.143305 0.017349 -7 1 2 Pu-240 0.001791 0.001797 -8 1 2 Pu-241 0.016637 0.005253 +6 1 2 Pu-239 0.160378 0.011366 +7 1 2 Pu-240 0.007920 0.003710 +8 1 2 Pu-241 0.017820 0.003733 9 1 2 Pu-242 0.000000 0.000000 10 1 2 Am-241 0.000000 0.000000 11 1 2 Am-242m 0.000000 0.000000 @@ -55,35 +55,35 @@ 19 1 2 Ru-101 0.000000 0.000000 20 1 2 Ru-103 0.000000 0.000000 21 1 2 Ag-109 0.000000 0.000000 -22 1 2 Xe-135 0.018241 0.005630 -23 1 2 Cs-133 0.001791 0.001797 -24 1 2 Nd-143 0.007763 0.003677 +22 1 2 Xe-135 0.013860 0.003976 +23 1 2 Cs-133 0.000000 0.000000 +24 1 2 Nd-143 0.003960 0.002427 25 1 2 Nd-145 0.000000 0.000000 26 1 2 Sm-147 0.000000 0.000000 -27 1 2 Sm-149 0.005374 0.002238 -28 1 2 Sm-150 0.001791 0.001797 -29 1 2 Sm-151 0.000000 0.000000 -30 1 2 Sm-152 0.001791 0.001797 -31 1 2 Eu-153 0.001791 0.001797 +27 1 2 Sm-149 0.001980 0.001981 +28 1 2 Sm-150 0.000000 0.000000 +29 1 2 Sm-151 0.001980 0.001981 +30 1 2 Sm-152 0.000000 0.000000 +31 1 2 Eu-153 0.000000 0.000000 32 1 2 Gd-155 0.000000 0.000000 -33 1 2 O-16 0.167770 0.025149 material group in nuclide mean std. dev. -34 1 1 U-234 6.845790e-06 3.227706e-07 -35 1 1 U-235 9.347056e-03 3.928662e-04 -36 1 1 U-236 6.211042e-05 2.226027e-06 -37 1 1 U-238 6.351733e-03 3.790179e-04 -38 1 1 Np-237 1.271771e-05 5.545845e-07 -39 1 1 Pu-238 7.663212e-06 4.860133e-07 -40 1 1 Pu-239 3.926921e-03 3.043267e-04 -41 1 1 Pu-240 6.508634e-05 2.793072e-06 -42 1 1 Pu-241 1.050916e-03 6.999147e-05 -43 1 1 Pu-242 5.640937e-06 2.366815e-07 -44 1 1 Am-241 1.047764e-06 4.427465e-08 -45 1 1 Am-242m 9.826994e-07 7.585438e-08 -46 1 1 Am-243 7.721583e-07 4.007024e-08 -47 1 1 Cm-242 5.401883e-07 4.235379e-08 -48 1 1 Cm-243 2.064355e-07 1.860162e-08 -49 1 1 Cm-244 2.918438e-07 2.207478e-08 -50 1 1 Cm-245 3.264085e-07 3.150469e-08 +33 1 2 O-16 0.196946 0.014729 material group in nuclide mean std. dev. +34 1 1 U-234 7.274436e-06 4.419480e-07 +35 1 1 U-235 9.587789e-03 5.936867e-04 +36 1 1 U-236 7.566085e-05 7.523984e-06 +37 1 1 U-238 7.178361e-03 6.505657e-04 +38 1 1 Np-237 1.315681e-05 8.036505e-07 +39 1 1 Pu-238 7.746149e-06 3.992846e-07 +40 1 1 Pu-239 3.805332e-03 3.637556e-04 +41 1 1 Pu-240 6.941315e-05 4.729734e-06 +42 1 1 Pu-241 1.033846e-03 9.084007e-05 +43 1 1 Pu-242 5.995329e-06 3.821724e-07 +44 1 1 Am-241 1.148582e-06 8.271558e-08 +45 1 1 Am-242m 1.101985e-06 6.376129e-08 +46 1 1 Am-243 8.323823e-07 5.841794e-08 +47 1 1 Cm-242 5.088975e-07 5.258061e-08 +48 1 1 Cm-243 2.245435e-07 1.459031e-08 +49 1 1 Cm-244 2.993205e-07 2.746134e-08 +50 1 1 Cm-245 3.063614e-07 3.057777e-08 51 1 1 Mo-95 0.000000e+00 0.000000e+00 52 1 1 Tc-99 0.000000e+00 0.000000e+00 53 1 1 Ru-101 0.000000e+00 0.000000e+00 @@ -101,23 +101,23 @@ 65 1 1 Eu-153 0.000000e+00 0.000000e+00 66 1 1 Gd-155 0.000000e+00 0.000000e+00 67 1 1 O-16 0.000000e+00 0.000000e+00 -0 1 2 U-234 4.104195e-07 3.065579e-08 -1 1 2 U-235 3.490566e-01 2.635060e-02 -2 1 2 U-236 5.741696e-06 4.389191e-07 -3 1 2 U-238 5.027672e-07 3.822823e-08 -4 1 2 Np-237 2.593520e-07 2.536889e-08 -5 1 2 Pu-238 3.098896e-05 2.214628e-06 -6 1 2 Pu-239 2.727718e-01 2.870084e-02 -7 1 2 Pu-240 4.413447e-06 3.622781e-07 -8 1 2 Pu-241 4.370225e-02 3.791177e-03 -9 1 2 Pu-242 8.159609e-08 6.163540e-09 -10 1 2 Am-241 4.495589e-06 5.183237e-07 -11 1 2 Am-242m 1.349582e-04 1.062926e-05 -12 1 2 Am-243 7.470727e-08 5.781858e-09 -13 1 2 Cm-242 9.093231e-07 6.842831e-08 -14 1 2 Cm-243 1.742377e-06 1.369426e-07 -15 1 2 Cm-244 1.479902e-07 1.116327e-08 -16 1 2 Cm-245 1.099337e-05 7.987632e-07 +0 1 2 U-234 4.408571e-07 2.828333e-08 +1 1 2 U-235 3.768090e-01 2.445691e-02 +2 1 2 U-236 6.097532e-06 3.733076e-07 +3 1 2 U-238 5.353069e-07 3.310577e-08 +4 1 2 Np-237 2.702979e-07 2.098942e-08 +5 1 2 Pu-238 3.463104e-05 2.638405e-06 +6 1 2 Pu-239 2.889640e-01 1.376023e-02 +7 1 2 Pu-240 4.533642e-06 2.544334e-07 +8 1 2 Pu-241 4.809358e-02 2.778366e-03 +9 1 2 Pu-242 8.715316e-08 5.460943e-09 +10 1 2 Am-241 4.611731e-06 2.155065e-07 +11 1 2 Am-242m 1.428045e-04 8.436508e-06 +12 1 2 Am-243 7.883889e-08 4.734559e-09 +13 1 2 Cm-242 9.731014e-07 6.143805e-08 +14 1 2 Cm-243 1.825829e-06 1.074864e-07 +15 1 2 Cm-244 1.581821e-07 9.938154e-09 +16 1 2 Cm-245 1.213384e-05 8.812070e-07 17 1 2 Mo-95 0.000000e+00 0.000000e+00 18 1 2 Tc-99 0.000000e+00 0.000000e+00 19 1 2 Ru-101 0.000000e+00 0.000000e+00 @@ -135,15 +135,15 @@ 31 1 2 Eu-153 0.000000e+00 0.000000e+00 32 1 2 Gd-155 0.000000e+00 0.000000e+00 33 1 2 O-16 0.000000e+00 0.000000e+00 material group in group out nuclide mean std. dev. -102 1 1 1 U-234 0.000074 0.000188 -103 1 1 1 U-235 0.002518 0.000812 -104 1 1 1 U-236 0.001437 0.000445 -105 1 1 1 U-238 0.192819 0.008439 -106 1 1 1 Np-237 0.000087 0.000182 +102 1 1 1 U-234 0.000000 0.000000 +103 1 1 1 U-235 0.003226 0.001139 +104 1 1 1 U-236 0.001697 0.000923 +105 1 1 1 U-238 0.194620 0.013297 +106 1 1 1 Np-237 0.000000 0.000000 107 1 1 1 Pu-238 0.000000 0.000000 -108 1 1 1 Pu-239 0.001055 0.000364 -109 1 1 1 Pu-240 0.000378 0.000277 -110 1 1 1 Pu-241 0.000097 0.000178 +108 1 1 1 Pu-239 0.001005 0.000477 +109 1 1 1 Pu-240 0.001307 0.000295 +110 1 1 1 Pu-241 0.000344 0.000244 111 1 1 1 Pu-242 0.000000 0.000000 112 1 1 1 Am-241 0.000000 0.000000 113 1 1 1 Am-242m 0.000000 0.000000 @@ -152,27 +152,27 @@ 116 1 1 1 Cm-243 0.000000 0.000000 117 1 1 1 Cm-244 0.000000 0.000000 118 1 1 1 Cm-245 0.000000 0.000000 -119 1 1 1 Mo-95 0.000081 0.000185 -120 1 1 1 Tc-99 0.000625 0.000394 -121 1 1 1 Ru-101 0.000000 0.000000 -122 1 1 1 Ru-103 0.000000 0.000000 +119 1 1 1 Mo-95 0.000000 0.000000 +120 1 1 1 Tc-99 0.000000 0.000000 +121 1 1 1 Ru-101 0.000238 0.000254 +122 1 1 1 Ru-103 0.000002 0.000243 123 1 1 1 Ag-109 0.000000 0.000000 124 1 1 1 Xe-135 0.000000 0.000000 -125 1 1 1 Cs-133 0.000265 0.000193 -126 1 1 1 Nd-143 0.000340 0.000301 -127 1 1 1 Nd-145 0.000616 0.000399 +125 1 1 1 Cs-133 0.000000 0.000000 +126 1 1 1 Nd-143 0.000447 0.000292 +127 1 1 1 Nd-145 0.000564 0.000294 128 1 1 1 Sm-147 0.000000 0.000000 129 1 1 1 Sm-149 0.000000 0.000000 -130 1 1 1 Sm-150 0.000060 0.000195 +130 1 1 1 Sm-150 0.000299 0.000238 131 1 1 1 Sm-151 0.000000 0.000000 -132 1 1 1 Sm-152 0.000567 0.000249 +132 1 1 1 Sm-152 0.000492 0.000352 133 1 1 1 Eu-153 0.000000 0.000000 134 1 1 1 Gd-155 0.000000 0.000000 -135 1 1 1 O-16 0.141203 0.006870 +135 1 1 1 O-16 0.133156 0.009821 68 1 1 2 U-234 0.000000 0.000000 69 1 1 2 U-235 0.000000 0.000000 70 1 1 2 U-236 0.000000 0.000000 -71 1 1 2 U-238 0.000000 0.000000 +71 1 1 2 U-238 0.000173 0.000173 72 1 1 2 Np-237 0.000000 0.000000 73 1 1 2 Pu-238 0.000000 0.000000 74 1 1 2 Pu-239 0.000000 0.000000 @@ -202,7 +202,7 @@ 98 1 1 2 Sm-152 0.000000 0.000000 99 1 1 2 Eu-153 0.000000 0.000000 100 1 1 2 Gd-155 0.000000 0.000000 -101 1 1 2 O-16 0.000329 0.000202 +101 1 1 2 O-16 0.001386 0.000446 34 1 2 1 U-234 0.000000 0.000000 35 1 2 1 U-235 0.000000 0.000000 36 1 2 1 U-236 0.000000 0.000000 @@ -238,14 +238,14 @@ 66 1 2 1 Gd-155 0.000000 0.000000 67 1 2 1 O-16 0.000000 0.000000 0 1 2 2 U-234 0.000000 0.000000 -1 1 2 2 U-235 0.017813 0.004846 -2 1 2 2 U-236 0.002521 0.001945 -3 1 2 2 U-238 0.228195 0.049264 +1 1 2 2 U-235 0.003889 0.003962 +2 1 2 2 U-236 0.001501 0.002037 +3 1 2 2 U-238 0.219715 0.025984 4 1 2 2 Np-237 0.000000 0.000000 5 1 2 2 Pu-238 0.000000 0.000000 6 1 2 2 Pu-239 0.000000 0.000000 7 1 2 2 Pu-240 0.000000 0.000000 -8 1 2 2 Pu-241 0.000515 0.002200 +8 1 2 2 Pu-241 0.000000 0.000000 9 1 2 2 Pu-242 0.000000 0.000000 10 1 2 2 Am-241 0.000000 0.000000 11 1 2 2 Am-242m 0.000000 0.000000 @@ -259,9 +259,9 @@ 19 1 2 2 Ru-101 0.000000 0.000000 20 1 2 2 Ru-103 0.000000 0.000000 21 1 2 2 Ag-109 0.000000 0.000000 -22 1 2 2 Xe-135 0.002119 0.003874 +22 1 2 2 Xe-135 0.000000 0.000000 23 1 2 2 Cs-133 0.000000 0.000000 -24 1 2 2 Nd-143 0.004181 0.002609 +24 1 2 2 Nd-143 0.000000 0.000000 25 1 2 2 Nd-145 0.000000 0.000000 26 1 2 2 Sm-147 0.000000 0.000000 27 1 2 2 Sm-149 0.000000 0.000000 @@ -270,16 +270,16 @@ 30 1 2 2 Sm-152 0.000000 0.000000 31 1 2 2 Eu-153 0.000000 0.000000 32 1 2 2 Gd-155 0.000000 0.000000 -33 1 2 2 O-16 0.167770 0.025149 material group out nuclide mean std. dev. +33 1 2 2 O-16 0.196946 0.014729 material group out nuclide mean std. dev. 34 1 1 U-234 0 0.000000 -35 1 1 U-235 1 0.083157 -36 1 1 U-236 1 1.414214 -37 1 1 U-238 1 0.175094 +35 1 1 U-235 1 0.066362 +36 1 1 U-236 0 0.000000 +37 1 1 U-238 1 0.093082 38 1 1 Np-237 0 0.000000 39 1 1 Pu-238 0 0.000000 -40 1 1 Pu-239 1 0.080013 +40 1 1 Pu-239 1 0.104567 41 1 1 Pu-240 0 0.000000 -42 1 1 Pu-241 1 0.272314 +42 1 1 Pu-241 1 0.263696 43 1 1 Pu-242 0 0.000000 44 1 1 Am-241 0 0.000000 45 1 1 Am-242m 0 0.000000 @@ -339,16 +339,16 @@ 31 1 2 Eu-153 0 0.000000 32 1 2 Gd-155 0 0.000000 33 1 2 O-16 0 0.000000 material group in nuclide mean std. dev. -5 2 1 Zr-90 0.123212 0.010296 -6 2 1 Zr-91 0.041136 0.005109 -7 2 1 Zr-92 0.038640 0.004343 -8 2 1 Zr-94 0.039928 0.006609 -9 2 1 Zr-96 0.002982 0.001882 -0 2 2 Zr-90 0.103289 0.030798 -1 2 2 Zr-91 0.064487 0.017642 -2 2 2 Zr-92 0.035554 0.022411 -3 2 2 Zr-94 0.052741 0.014095 -4 2 2 Zr-96 0.002354 0.004958 material group in nuclide mean std. dev. +5 2 1 Zr-90 0.104734 0.008915 +6 2 1 Zr-91 0.036155 0.003735 +7 2 1 Zr-92 0.042422 0.003029 +8 2 1 Zr-94 0.046148 0.006251 +9 2 1 Zr-96 0.007794 0.001536 +0 2 2 Zr-90 0.121688 0.034934 +1 2 2 Zr-91 0.061792 0.024317 +2 2 2 Zr-92 0.041633 0.016323 +3 2 2 Zr-94 0.060818 0.021483 +4 2 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. 5 2 1 Zr-90 0 0 6 2 1 Zr-91 0 0 7 2 1 Zr-92 0 0 @@ -359,11 +359,11 @@ 2 2 2 Zr-92 0 0 3 2 2 Zr-94 0 0 4 2 2 Zr-96 0 0 material group in group out nuclide mean std. dev. -15 2 1 1 Zr-90 0.123212 0.010296 -16 2 1 1 Zr-91 0.040260 0.004742 -17 2 1 1 Zr-92 0.038640 0.004343 -18 2 1 1 Zr-94 0.039490 0.006845 -19 2 1 1 Zr-96 0.002982 0.001882 +15 2 1 1 Zr-90 0.104734 0.008915 +16 2 1 1 Zr-91 0.036155 0.003735 +17 2 1 1 Zr-92 0.042422 0.003029 +18 2 1 1 Zr-94 0.046148 0.006251 +19 2 1 1 Zr-96 0.007794 0.001536 10 2 1 2 Zr-90 0.000000 0.000000 11 2 1 2 Zr-91 0.000000 0.000000 12 2 1 2 Zr-92 0.000000 0.000000 @@ -374,11 +374,11 @@ 7 2 2 1 Zr-92 0.000000 0.000000 8 2 2 1 Zr-94 0.000000 0.000000 9 2 2 1 Zr-96 0.000000 0.000000 -0 2 2 2 Zr-90 0.103289 0.030798 -1 2 2 2 Zr-91 0.064487 0.017642 -2 2 2 2 Zr-92 0.035554 0.022411 -3 2 2 2 Zr-94 0.052741 0.014095 -4 2 2 2 Zr-96 0.002354 0.004958 material group out nuclide mean std. dev. +0 2 2 2 Zr-90 0.121688 0.034934 +1 2 2 2 Zr-91 0.061792 0.024317 +2 2 2 2 Zr-92 0.041633 0.016323 +3 2 2 2 Zr-94 0.060818 0.021483 +4 2 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. 5 2 1 Zr-90 0 0 6 2 1 Zr-91 0 0 7 2 1 Zr-92 0 0 @@ -389,14 +389,14 @@ 2 2 2 Zr-92 0 0 3 2 2 Zr-94 0 0 4 2 2 Zr-96 0 0 material group in nuclide mean std. dev. -4 3 1 H-1 0.201049 0.041488 -5 3 1 O-16 0.074334 0.007160 -6 3 1 B-10 0.001189 0.000730 +4 3 1 H-1 0.207103 0.023028 +5 3 1 O-16 0.079282 0.005197 +6 3 1 B-10 0.000521 0.000244 7 3 1 B-11 0.000000 0.000000 -0 3 2 H-1 1.231384 0.305890 -1 3 2 O-16 0.097440 0.020608 -2 3 2 B-10 0.037686 0.008653 -3 3 2 B-11 0.001313 0.001766 material group in nuclide mean std. dev. +0 3 2 H-1 1.283344 0.250946 +1 3 2 O-16 0.085363 0.014001 +2 3 2 B-10 0.049249 0.008232 +3 3 2 B-11 0.000195 0.001527 material group in nuclide mean std. dev. 4 3 1 H-1 0 0 5 3 1 O-16 0 0 6 3 1 B-10 0 0 @@ -405,22 +405,22 @@ 1 3 2 O-16 0 0 2 3 2 B-10 0 0 3 3 2 B-11 0 0 material group in group out nuclide mean std. dev. -12 3 1 1 H-1 0.174497 0.040671 -13 3 1 1 O-16 0.074136 0.007210 +12 3 1 1 H-1 0.181306 0.022102 +13 3 1 1 O-16 0.078631 0.005044 14 3 1 1 B-10 0.000000 0.000000 15 3 1 1 B-11 0.000000 0.000000 -8 3 1 2 H-1 0.026155 0.001687 -9 3 1 2 O-16 0.000000 0.000000 +8 3 1 2 H-1 0.025666 0.001582 +9 3 1 2 O-16 0.000521 0.000131 10 3 1 2 B-10 0.000000 0.000000 11 3 1 2 B-11 0.000000 0.000000 4 3 2 1 H-1 0.000000 0.000000 5 3 2 1 O-16 0.000000 0.000000 6 3 2 1 B-10 0.000000 0.000000 7 3 2 1 B-11 0.000000 0.000000 -0 3 2 2 H-1 1.221106 0.302782 -1 3 2 2 O-16 0.097440 0.020608 +0 3 2 2 H-1 1.273963 0.250623 +1 3 2 2 O-16 0.085363 0.014001 2 3 2 2 B-10 0.000000 0.000000 -3 3 2 2 B-11 0.001313 0.001766 material group out nuclide mean std. dev. +3 3 2 2 B-11 0.000195 0.001527 material group out nuclide mean std. dev. 4 3 1 H-1 0 0 5 3 1 O-16 0 0 6 3 1 B-10 0 0 @@ -429,13 +429,13 @@ 1 3 2 O-16 0 0 2 3 2 B-10 0 0 3 3 2 B-11 0 0 material group in nuclide mean std. dev. -4 4 1 H-1 0.178673 0.023950 -5 4 1 O-16 0.071869 0.007853 -6 4 1 B-10 0.000624 0.000158 -7 4 1 B-11 0.000425 0.000318 -0 4 2 H-1 1.010325 0.104936 -1 4 2 O-16 0.079647 0.012666 -2 4 2 B-10 0.047520 0.003811 +4 4 1 H-1 0.175242 0.053715 +5 4 1 O-16 0.066545 0.010083 +6 4 1 B-10 0.000570 0.000352 +7 4 1 B-11 0.000089 0.000346 +0 4 2 H-1 1.142895 0.365140 +1 4 2 O-16 0.085141 0.028073 +2 4 2 B-10 0.025923 0.007276 3 4 2 B-11 0.000000 0.000000 material group in nuclide mean std. dev. 4 4 1 H-1 0 0 5 4 1 O-16 0 0 @@ -445,11 +445,11 @@ 1 4 2 O-16 0 0 2 4 2 B-10 0 0 3 4 2 B-11 0 0 material group in group out nuclide mean std. dev. -12 4 1 1 H-1 0.155278 0.023436 -13 4 1 1 O-16 0.071713 0.007769 +12 4 1 1 H-1 0.151295 0.051491 +13 4 1 1 O-16 0.066545 0.010083 14 4 1 1 B-10 0.000000 0.000000 -15 4 1 1 B-11 0.000425 0.000318 -8 4 1 2 H-1 0.022927 0.001236 +15 4 1 1 B-11 0.000089 0.000346 +8 4 1 2 H-1 0.023662 0.003083 9 4 1 2 O-16 0.000000 0.000000 10 4 1 2 B-10 0.000000 0.000000 11 4 1 2 B-11 0.000000 0.000000 @@ -457,8 +457,8 @@ 5 4 2 1 O-16 0.000000 0.000000 6 4 2 1 B-10 0.000000 0.000000 7 4 2 1 B-11 0.000000 0.000000 -0 4 2 2 H-1 1.002661 0.104168 -1 4 2 2 O-16 0.079647 0.012666 +0 4 2 2 H-1 1.129933 0.361681 +1 4 2 2 O-16 0.085141 0.028073 2 4 2 2 B-10 0.000000 0.000000 3 4 2 2 B-11 0.000000 0.000000 material group out nuclide mean std. dev. 4 4 1 H-1 0 0 @@ -1368,7 +1368,49 @@ 17 8 2 Cr-50 0 0 18 8 2 Cr-52 0 0 19 8 2 Cr-53 0 0 -20 8 2 Cr-54 0 0 material group in nuclide mean std. dev. +20 8 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 9 1 H-1 0.150655 0.480993 +22 9 1 O-16 0.116221 0.114089 +23 9 1 B-10 0.000000 0.000000 +24 9 1 B-11 0.000000 0.000000 +25 9 1 Fe-54 0.000000 0.000000 +26 9 1 Fe-56 0.186217 0.199795 +27 9 1 Fe-57 0.000000 0.000000 +28 9 1 Fe-58 0.000000 0.000000 +29 9 1 Ni-58 0.000000 0.000000 +30 9 1 Ni-60 0.000000 0.000000 +31 9 1 Ni-61 0.000000 0.000000 +32 9 1 Ni-62 0.000000 0.000000 +33 9 1 Ni-64 0.000000 0.000000 +34 9 1 Mn-55 0.000000 0.000000 +35 9 1 Si-28 0.000000 0.000000 +36 9 1 Si-29 0.000000 0.000000 +37 9 1 Si-30 0.000000 0.000000 +38 9 1 Cr-50 0.000000 0.000000 +39 9 1 Cr-52 0.000000 0.000000 +40 9 1 Cr-53 0.147443 0.139574 +41 9 1 Cr-54 0.000000 0.000000 +0 9 2 H-1 0.000000 0.000000 +1 9 2 O-16 0.000000 0.000000 +2 9 2 B-10 0.000000 0.000000 +3 9 2 B-11 0.000000 0.000000 +4 9 2 Fe-54 0.000000 0.000000 +5 9 2 Fe-56 0.000000 0.000000 +6 9 2 Fe-57 0.000000 0.000000 +7 9 2 Fe-58 0.000000 0.000000 +8 9 2 Ni-58 0.000000 0.000000 +9 9 2 Ni-60 0.000000 0.000000 +10 9 2 Ni-61 0.000000 0.000000 +11 9 2 Ni-62 0.000000 0.000000 +12 9 2 Ni-64 0.000000 0.000000 +13 9 2 Mn-55 0.000000 0.000000 +14 9 2 Si-28 0.000000 0.000000 +15 9 2 Si-29 0.000000 0.000000 +16 9 2 Si-30 0.000000 0.000000 +17 9 2 Cr-50 0.000000 0.000000 +18 9 2 Cr-52 0.000000 0.000000 +19 9 2 Cr-53 0.000000 0.000000 +20 9 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. 21 9 1 H-1 0 0 22 9 1 O-16 0 0 23 9 1 B-10 0 0 @@ -1410,133 +1452,91 @@ 17 9 2 Cr-50 0 0 18 9 2 Cr-52 0 0 19 9 2 Cr-53 0 0 -20 9 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 9 1 H-1 0 0 -22 9 1 O-16 0 0 -23 9 1 B-10 0 0 -24 9 1 B-11 0 0 -25 9 1 Fe-54 0 0 -26 9 1 Fe-56 0 0 -27 9 1 Fe-57 0 0 -28 9 1 Fe-58 0 0 -29 9 1 Ni-58 0 0 -30 9 1 Ni-60 0 0 -31 9 1 Ni-61 0 0 -32 9 1 Ni-62 0 0 -33 9 1 Ni-64 0 0 -34 9 1 Mn-55 0 0 -35 9 1 Si-28 0 0 -36 9 1 Si-29 0 0 -37 9 1 Si-30 0 0 -38 9 1 Cr-50 0 0 -39 9 1 Cr-52 0 0 -40 9 1 Cr-53 0 0 -41 9 1 Cr-54 0 0 -0 9 2 H-1 0 0 -1 9 2 O-16 0 0 -2 9 2 B-10 0 0 -3 9 2 B-11 0 0 -4 9 2 Fe-54 0 0 -5 9 2 Fe-56 0 0 -6 9 2 Fe-57 0 0 -7 9 2 Fe-58 0 0 -8 9 2 Ni-58 0 0 -9 9 2 Ni-60 0 0 -10 9 2 Ni-61 0 0 -11 9 2 Ni-62 0 0 -12 9 2 Ni-64 0 0 -13 9 2 Mn-55 0 0 -14 9 2 Si-28 0 0 -15 9 2 Si-29 0 0 -16 9 2 Si-30 0 0 -17 9 2 Cr-50 0 0 -18 9 2 Cr-52 0 0 -19 9 2 Cr-53 0 0 -20 9 2 Cr-54 0 0 material group in group out nuclide mean std. dev. -63 9 1 1 H-1 0 0 -64 9 1 1 O-16 0 0 -65 9 1 1 B-10 0 0 -66 9 1 1 B-11 0 0 -67 9 1 1 Fe-54 0 0 -68 9 1 1 Fe-56 0 0 -69 9 1 1 Fe-57 0 0 -70 9 1 1 Fe-58 0 0 -71 9 1 1 Ni-58 0 0 -72 9 1 1 Ni-60 0 0 -73 9 1 1 Ni-61 0 0 -74 9 1 1 Ni-62 0 0 -75 9 1 1 Ni-64 0 0 -76 9 1 1 Mn-55 0 0 -77 9 1 1 Si-28 0 0 -78 9 1 1 Si-29 0 0 -79 9 1 1 Si-30 0 0 -80 9 1 1 Cr-50 0 0 -81 9 1 1 Cr-52 0 0 -82 9 1 1 Cr-53 0 0 -83 9 1 1 Cr-54 0 0 -42 9 1 2 H-1 0 0 -43 9 1 2 O-16 0 0 -44 9 1 2 B-10 0 0 -45 9 1 2 B-11 0 0 -46 9 1 2 Fe-54 0 0 -47 9 1 2 Fe-56 0 0 -48 9 1 2 Fe-57 0 0 -49 9 1 2 Fe-58 0 0 -50 9 1 2 Ni-58 0 0 -51 9 1 2 Ni-60 0 0 -52 9 1 2 Ni-61 0 0 -53 9 1 2 Ni-62 0 0 -54 9 1 2 Ni-64 0 0 -55 9 1 2 Mn-55 0 0 -56 9 1 2 Si-28 0 0 -57 9 1 2 Si-29 0 0 -58 9 1 2 Si-30 0 0 -59 9 1 2 Cr-50 0 0 -60 9 1 2 Cr-52 0 0 -61 9 1 2 Cr-53 0 0 -62 9 1 2 Cr-54 0 0 -21 9 2 1 H-1 0 0 -22 9 2 1 O-16 0 0 -23 9 2 1 B-10 0 0 -24 9 2 1 B-11 0 0 -25 9 2 1 Fe-54 0 0 -26 9 2 1 Fe-56 0 0 -27 9 2 1 Fe-57 0 0 -28 9 2 1 Fe-58 0 0 -29 9 2 1 Ni-58 0 0 -30 9 2 1 Ni-60 0 0 -31 9 2 1 Ni-61 0 0 -32 9 2 1 Ni-62 0 0 -33 9 2 1 Ni-64 0 0 -34 9 2 1 Mn-55 0 0 -35 9 2 1 Si-28 0 0 -36 9 2 1 Si-29 0 0 -37 9 2 1 Si-30 0 0 -38 9 2 1 Cr-50 0 0 -39 9 2 1 Cr-52 0 0 -40 9 2 1 Cr-53 0 0 -41 9 2 1 Cr-54 0 0 -0 9 2 2 H-1 0 0 -1 9 2 2 O-16 0 0 -2 9 2 2 B-10 0 0 -3 9 2 2 B-11 0 0 -4 9 2 2 Fe-54 0 0 -5 9 2 2 Fe-56 0 0 -6 9 2 2 Fe-57 0 0 -7 9 2 2 Fe-58 0 0 -8 9 2 2 Ni-58 0 0 -9 9 2 2 Ni-60 0 0 -10 9 2 2 Ni-61 0 0 -11 9 2 2 Ni-62 0 0 -12 9 2 2 Ni-64 0 0 -13 9 2 2 Mn-55 0 0 -14 9 2 2 Si-28 0 0 -15 9 2 2 Si-29 0 0 -16 9 2 2 Si-30 0 0 -17 9 2 2 Cr-50 0 0 -18 9 2 2 Cr-52 0 0 -19 9 2 2 Cr-53 0 0 -20 9 2 2 Cr-54 0 0 material group out nuclide mean std. dev. +20 9 2 Cr-54 0 0 material group in group out nuclide mean std. dev. +63 9 1 1 H-1 0.150655 0.480993 +64 9 1 1 O-16 0.116221 0.114089 +65 9 1 1 B-10 0.000000 0.000000 +66 9 1 1 B-11 0.000000 0.000000 +67 9 1 1 Fe-54 0.000000 0.000000 +68 9 1 1 Fe-56 0.186217 0.199795 +69 9 1 1 Fe-57 0.000000 0.000000 +70 9 1 1 Fe-58 0.000000 0.000000 +71 9 1 1 Ni-58 0.000000 0.000000 +72 9 1 1 Ni-60 0.000000 0.000000 +73 9 1 1 Ni-61 0.000000 0.000000 +74 9 1 1 Ni-62 0.000000 0.000000 +75 9 1 1 Ni-64 0.000000 0.000000 +76 9 1 1 Mn-55 0.000000 0.000000 +77 9 1 1 Si-28 0.000000 0.000000 +78 9 1 1 Si-29 0.000000 0.000000 +79 9 1 1 Si-30 0.000000 0.000000 +80 9 1 1 Cr-50 0.000000 0.000000 +81 9 1 1 Cr-52 0.000000 0.000000 +82 9 1 1 Cr-53 0.147443 0.139574 +83 9 1 1 Cr-54 0.000000 0.000000 +42 9 1 2 H-1 0.000000 0.000000 +43 9 1 2 O-16 0.000000 0.000000 +44 9 1 2 B-10 0.000000 0.000000 +45 9 1 2 B-11 0.000000 0.000000 +46 9 1 2 Fe-54 0.000000 0.000000 +47 9 1 2 Fe-56 0.000000 0.000000 +48 9 1 2 Fe-57 0.000000 0.000000 +49 9 1 2 Fe-58 0.000000 0.000000 +50 9 1 2 Ni-58 0.000000 0.000000 +51 9 1 2 Ni-60 0.000000 0.000000 +52 9 1 2 Ni-61 0.000000 0.000000 +53 9 1 2 Ni-62 0.000000 0.000000 +54 9 1 2 Ni-64 0.000000 0.000000 +55 9 1 2 Mn-55 0.000000 0.000000 +56 9 1 2 Si-28 0.000000 0.000000 +57 9 1 2 Si-29 0.000000 0.000000 +58 9 1 2 Si-30 0.000000 0.000000 +59 9 1 2 Cr-50 0.000000 0.000000 +60 9 1 2 Cr-52 0.000000 0.000000 +61 9 1 2 Cr-53 0.000000 0.000000 +62 9 1 2 Cr-54 0.000000 0.000000 +21 9 2 1 H-1 0.000000 0.000000 +22 9 2 1 O-16 0.000000 0.000000 +23 9 2 1 B-10 0.000000 0.000000 +24 9 2 1 B-11 0.000000 0.000000 +25 9 2 1 Fe-54 0.000000 0.000000 +26 9 2 1 Fe-56 0.000000 0.000000 +27 9 2 1 Fe-57 0.000000 0.000000 +28 9 2 1 Fe-58 0.000000 0.000000 +29 9 2 1 Ni-58 0.000000 0.000000 +30 9 2 1 Ni-60 0.000000 0.000000 +31 9 2 1 Ni-61 0.000000 0.000000 +32 9 2 1 Ni-62 0.000000 0.000000 +33 9 2 1 Ni-64 0.000000 0.000000 +34 9 2 1 Mn-55 0.000000 0.000000 +35 9 2 1 Si-28 0.000000 0.000000 +36 9 2 1 Si-29 0.000000 0.000000 +37 9 2 1 Si-30 0.000000 0.000000 +38 9 2 1 Cr-50 0.000000 0.000000 +39 9 2 1 Cr-52 0.000000 0.000000 +40 9 2 1 Cr-53 0.000000 0.000000 +41 9 2 1 Cr-54 0.000000 0.000000 +0 9 2 2 H-1 0.000000 0.000000 +1 9 2 2 O-16 0.000000 0.000000 +2 9 2 2 B-10 0.000000 0.000000 +3 9 2 2 B-11 0.000000 0.000000 +4 9 2 2 Fe-54 0.000000 0.000000 +5 9 2 2 Fe-56 0.000000 0.000000 +6 9 2 2 Fe-57 0.000000 0.000000 +7 9 2 2 Fe-58 0.000000 0.000000 +8 9 2 2 Ni-58 0.000000 0.000000 +9 9 2 2 Ni-60 0.000000 0.000000 +10 9 2 2 Ni-61 0.000000 0.000000 +11 9 2 2 Ni-62 0.000000 0.000000 +12 9 2 2 Ni-64 0.000000 0.000000 +13 9 2 2 Mn-55 0.000000 0.000000 +14 9 2 2 Si-28 0.000000 0.000000 +15 9 2 2 Si-29 0.000000 0.000000 +16 9 2 2 Si-30 0.000000 0.000000 +17 9 2 2 Cr-50 0.000000 0.000000 +18 9 2 2 Cr-52 0.000000 0.000000 +19 9 2 2 Cr-53 0.000000 0.000000 +20 9 2 2 Cr-54 0.000000 0.000000 material group out nuclide mean std. dev. 21 9 1 H-1 0 0 22 9 1 O-16 0 0 23 9 1 B-10 0 0 @@ -1578,7 +1578,49 @@ 17 9 2 Cr-50 0 0 18 9 2 Cr-52 0 0 19 9 2 Cr-53 0 0 -20 9 2 Cr-54 0 0 material group in nuclide mean std. dev. +20 9 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 10 1 H-1 0.123944 0.541390 +22 10 1 O-16 0.000000 0.000000 +23 10 1 B-10 0.000000 0.000000 +24 10 1 B-11 0.000000 0.000000 +25 10 1 Fe-54 0.000000 0.000000 +26 10 1 Fe-56 0.000000 0.000000 +27 10 1 Fe-57 0.000000 0.000000 +28 10 1 Fe-58 0.000000 0.000000 +29 10 1 Ni-58 0.000000 0.000000 +30 10 1 Ni-60 0.000000 0.000000 +31 10 1 Ni-61 0.000000 0.000000 +32 10 1 Ni-62 0.000000 0.000000 +33 10 1 Ni-64 0.000000 0.000000 +34 10 1 Mn-55 0.000000 0.000000 +35 10 1 Si-28 0.000000 0.000000 +36 10 1 Si-29 0.000000 0.000000 +37 10 1 Si-30 0.000000 0.000000 +38 10 1 Cr-50 0.111571 0.138458 +39 10 1 Cr-52 0.000000 0.000000 +40 10 1 Cr-53 0.000000 0.000000 +41 10 1 Cr-54 0.000000 0.000000 +0 10 2 H-1 0.000000 0.000000 +1 10 2 O-16 0.000000 0.000000 +2 10 2 B-10 0.000000 0.000000 +3 10 2 B-11 0.000000 0.000000 +4 10 2 Fe-54 0.000000 0.000000 +5 10 2 Fe-56 0.000000 0.000000 +6 10 2 Fe-57 0.000000 0.000000 +7 10 2 Fe-58 0.000000 0.000000 +8 10 2 Ni-58 0.000000 0.000000 +9 10 2 Ni-60 0.000000 0.000000 +10 10 2 Ni-61 0.000000 0.000000 +11 10 2 Ni-62 0.000000 0.000000 +12 10 2 Ni-64 0.000000 0.000000 +13 10 2 Mn-55 0.000000 0.000000 +14 10 2 Si-28 0.000000 0.000000 +15 10 2 Si-29 0.000000 0.000000 +16 10 2 Si-30 0.000000 0.000000 +17 10 2 Cr-50 0.000000 0.000000 +18 10 2 Cr-52 0.000000 0.000000 +19 10 2 Cr-53 0.000000 0.000000 +20 10 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. 21 10 1 H-1 0 0 22 10 1 O-16 0 0 23 10 1 B-10 0 0 @@ -1620,133 +1662,91 @@ 17 10 2 Cr-50 0 0 18 10 2 Cr-52 0 0 19 10 2 Cr-53 0 0 -20 10 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 10 1 H-1 0 0 -22 10 1 O-16 0 0 -23 10 1 B-10 0 0 -24 10 1 B-11 0 0 -25 10 1 Fe-54 0 0 -26 10 1 Fe-56 0 0 -27 10 1 Fe-57 0 0 -28 10 1 Fe-58 0 0 -29 10 1 Ni-58 0 0 -30 10 1 Ni-60 0 0 -31 10 1 Ni-61 0 0 -32 10 1 Ni-62 0 0 -33 10 1 Ni-64 0 0 -34 10 1 Mn-55 0 0 -35 10 1 Si-28 0 0 -36 10 1 Si-29 0 0 -37 10 1 Si-30 0 0 -38 10 1 Cr-50 0 0 -39 10 1 Cr-52 0 0 -40 10 1 Cr-53 0 0 -41 10 1 Cr-54 0 0 -0 10 2 H-1 0 0 -1 10 2 O-16 0 0 -2 10 2 B-10 0 0 -3 10 2 B-11 0 0 -4 10 2 Fe-54 0 0 -5 10 2 Fe-56 0 0 -6 10 2 Fe-57 0 0 -7 10 2 Fe-58 0 0 -8 10 2 Ni-58 0 0 -9 10 2 Ni-60 0 0 -10 10 2 Ni-61 0 0 -11 10 2 Ni-62 0 0 -12 10 2 Ni-64 0 0 -13 10 2 Mn-55 0 0 -14 10 2 Si-28 0 0 -15 10 2 Si-29 0 0 -16 10 2 Si-30 0 0 -17 10 2 Cr-50 0 0 -18 10 2 Cr-52 0 0 -19 10 2 Cr-53 0 0 -20 10 2 Cr-54 0 0 material group in group out nuclide mean std. dev. -63 10 1 1 H-1 0 0 -64 10 1 1 O-16 0 0 -65 10 1 1 B-10 0 0 -66 10 1 1 B-11 0 0 -67 10 1 1 Fe-54 0 0 -68 10 1 1 Fe-56 0 0 -69 10 1 1 Fe-57 0 0 -70 10 1 1 Fe-58 0 0 -71 10 1 1 Ni-58 0 0 -72 10 1 1 Ni-60 0 0 -73 10 1 1 Ni-61 0 0 -74 10 1 1 Ni-62 0 0 -75 10 1 1 Ni-64 0 0 -76 10 1 1 Mn-55 0 0 -77 10 1 1 Si-28 0 0 -78 10 1 1 Si-29 0 0 -79 10 1 1 Si-30 0 0 -80 10 1 1 Cr-50 0 0 -81 10 1 1 Cr-52 0 0 -82 10 1 1 Cr-53 0 0 -83 10 1 1 Cr-54 0 0 -42 10 1 2 H-1 0 0 -43 10 1 2 O-16 0 0 -44 10 1 2 B-10 0 0 -45 10 1 2 B-11 0 0 -46 10 1 2 Fe-54 0 0 -47 10 1 2 Fe-56 0 0 -48 10 1 2 Fe-57 0 0 -49 10 1 2 Fe-58 0 0 -50 10 1 2 Ni-58 0 0 -51 10 1 2 Ni-60 0 0 -52 10 1 2 Ni-61 0 0 -53 10 1 2 Ni-62 0 0 -54 10 1 2 Ni-64 0 0 -55 10 1 2 Mn-55 0 0 -56 10 1 2 Si-28 0 0 -57 10 1 2 Si-29 0 0 -58 10 1 2 Si-30 0 0 -59 10 1 2 Cr-50 0 0 -60 10 1 2 Cr-52 0 0 -61 10 1 2 Cr-53 0 0 -62 10 1 2 Cr-54 0 0 -21 10 2 1 H-1 0 0 -22 10 2 1 O-16 0 0 -23 10 2 1 B-10 0 0 -24 10 2 1 B-11 0 0 -25 10 2 1 Fe-54 0 0 -26 10 2 1 Fe-56 0 0 -27 10 2 1 Fe-57 0 0 -28 10 2 1 Fe-58 0 0 -29 10 2 1 Ni-58 0 0 -30 10 2 1 Ni-60 0 0 -31 10 2 1 Ni-61 0 0 -32 10 2 1 Ni-62 0 0 -33 10 2 1 Ni-64 0 0 -34 10 2 1 Mn-55 0 0 -35 10 2 1 Si-28 0 0 -36 10 2 1 Si-29 0 0 -37 10 2 1 Si-30 0 0 -38 10 2 1 Cr-50 0 0 -39 10 2 1 Cr-52 0 0 -40 10 2 1 Cr-53 0 0 -41 10 2 1 Cr-54 0 0 -0 10 2 2 H-1 0 0 -1 10 2 2 O-16 0 0 -2 10 2 2 B-10 0 0 -3 10 2 2 B-11 0 0 -4 10 2 2 Fe-54 0 0 -5 10 2 2 Fe-56 0 0 -6 10 2 2 Fe-57 0 0 -7 10 2 2 Fe-58 0 0 -8 10 2 2 Ni-58 0 0 -9 10 2 2 Ni-60 0 0 -10 10 2 2 Ni-61 0 0 -11 10 2 2 Ni-62 0 0 -12 10 2 2 Ni-64 0 0 -13 10 2 2 Mn-55 0 0 -14 10 2 2 Si-28 0 0 -15 10 2 2 Si-29 0 0 -16 10 2 2 Si-30 0 0 -17 10 2 2 Cr-50 0 0 -18 10 2 2 Cr-52 0 0 -19 10 2 2 Cr-53 0 0 -20 10 2 2 Cr-54 0 0 material group out nuclide mean std. dev. +20 10 2 Cr-54 0 0 material group in group out nuclide mean std. dev. +63 10 1 1 H-1 0.123944 0.541390 +64 10 1 1 O-16 0.000000 0.000000 +65 10 1 1 B-10 0.000000 0.000000 +66 10 1 1 B-11 0.000000 0.000000 +67 10 1 1 Fe-54 0.000000 0.000000 +68 10 1 1 Fe-56 0.000000 0.000000 +69 10 1 1 Fe-57 0.000000 0.000000 +70 10 1 1 Fe-58 0.000000 0.000000 +71 10 1 1 Ni-58 0.000000 0.000000 +72 10 1 1 Ni-60 0.000000 0.000000 +73 10 1 1 Ni-61 0.000000 0.000000 +74 10 1 1 Ni-62 0.000000 0.000000 +75 10 1 1 Ni-64 0.000000 0.000000 +76 10 1 1 Mn-55 0.000000 0.000000 +77 10 1 1 Si-28 0.000000 0.000000 +78 10 1 1 Si-29 0.000000 0.000000 +79 10 1 1 Si-30 0.000000 0.000000 +80 10 1 1 Cr-50 0.111571 0.138458 +81 10 1 1 Cr-52 0.000000 0.000000 +82 10 1 1 Cr-53 0.000000 0.000000 +83 10 1 1 Cr-54 0.000000 0.000000 +42 10 1 2 H-1 0.000000 0.000000 +43 10 1 2 O-16 0.000000 0.000000 +44 10 1 2 B-10 0.000000 0.000000 +45 10 1 2 B-11 0.000000 0.000000 +46 10 1 2 Fe-54 0.000000 0.000000 +47 10 1 2 Fe-56 0.000000 0.000000 +48 10 1 2 Fe-57 0.000000 0.000000 +49 10 1 2 Fe-58 0.000000 0.000000 +50 10 1 2 Ni-58 0.000000 0.000000 +51 10 1 2 Ni-60 0.000000 0.000000 +52 10 1 2 Ni-61 0.000000 0.000000 +53 10 1 2 Ni-62 0.000000 0.000000 +54 10 1 2 Ni-64 0.000000 0.000000 +55 10 1 2 Mn-55 0.000000 0.000000 +56 10 1 2 Si-28 0.000000 0.000000 +57 10 1 2 Si-29 0.000000 0.000000 +58 10 1 2 Si-30 0.000000 0.000000 +59 10 1 2 Cr-50 0.000000 0.000000 +60 10 1 2 Cr-52 0.000000 0.000000 +61 10 1 2 Cr-53 0.000000 0.000000 +62 10 1 2 Cr-54 0.000000 0.000000 +21 10 2 1 H-1 0.000000 0.000000 +22 10 2 1 O-16 0.000000 0.000000 +23 10 2 1 B-10 0.000000 0.000000 +24 10 2 1 B-11 0.000000 0.000000 +25 10 2 1 Fe-54 0.000000 0.000000 +26 10 2 1 Fe-56 0.000000 0.000000 +27 10 2 1 Fe-57 0.000000 0.000000 +28 10 2 1 Fe-58 0.000000 0.000000 +29 10 2 1 Ni-58 0.000000 0.000000 +30 10 2 1 Ni-60 0.000000 0.000000 +31 10 2 1 Ni-61 0.000000 0.000000 +32 10 2 1 Ni-62 0.000000 0.000000 +33 10 2 1 Ni-64 0.000000 0.000000 +34 10 2 1 Mn-55 0.000000 0.000000 +35 10 2 1 Si-28 0.000000 0.000000 +36 10 2 1 Si-29 0.000000 0.000000 +37 10 2 1 Si-30 0.000000 0.000000 +38 10 2 1 Cr-50 0.000000 0.000000 +39 10 2 1 Cr-52 0.000000 0.000000 +40 10 2 1 Cr-53 0.000000 0.000000 +41 10 2 1 Cr-54 0.000000 0.000000 +0 10 2 2 H-1 0.000000 0.000000 +1 10 2 2 O-16 0.000000 0.000000 +2 10 2 2 B-10 0.000000 0.000000 +3 10 2 2 B-11 0.000000 0.000000 +4 10 2 2 Fe-54 0.000000 0.000000 +5 10 2 2 Fe-56 0.000000 0.000000 +6 10 2 2 Fe-57 0.000000 0.000000 +7 10 2 2 Fe-58 0.000000 0.000000 +8 10 2 2 Ni-58 0.000000 0.000000 +9 10 2 2 Ni-60 0.000000 0.000000 +10 10 2 2 Ni-61 0.000000 0.000000 +11 10 2 2 Ni-62 0.000000 0.000000 +12 10 2 2 Ni-64 0.000000 0.000000 +13 10 2 2 Mn-55 0.000000 0.000000 +14 10 2 2 Si-28 0.000000 0.000000 +15 10 2 2 Si-29 0.000000 0.000000 +16 10 2 2 Si-30 0.000000 0.000000 +17 10 2 2 Cr-50 0.000000 0.000000 +18 10 2 2 Cr-52 0.000000 0.000000 +19 10 2 2 Cr-53 0.000000 0.000000 +20 10 2 2 Cr-54 0.000000 0.000000 material group out nuclide mean std. dev. 21 10 1 H-1 0 0 22 10 1 O-16 0 0 23 10 1 B-10 0 0 @@ -1789,23 +1789,23 @@ 18 10 2 Cr-52 0 0 19 10 2 Cr-53 0 0 20 10 2 Cr-54 0 0 material group in nuclide mean std. dev. -9 11 1 H-1 0.170249 0.307631 -10 11 1 O-16 0.059703 0.040511 +9 11 1 H-1 0.131470 0.476035 +10 11 1 O-16 0.028684 0.043000 11 11 1 B-10 0.000000 0.000000 12 11 1 B-11 0.000000 0.000000 -13 11 1 Zr-90 0.048335 0.045106 -14 11 1 Zr-91 0.021080 0.020176 -15 11 1 Zr-92 0.015959 0.020345 -16 11 1 Zr-94 0.013058 0.019576 +13 11 1 Zr-90 0.021980 0.039963 +14 11 1 Zr-91 0.000000 0.000000 +15 11 1 Zr-92 0.000000 0.000000 +16 11 1 Zr-94 0.004191 0.087344 17 11 1 Zr-96 0.000000 0.000000 -0 11 2 H-1 0.899793 0.954128 -1 11 2 O-16 0.075037 0.081039 -2 11 2 B-10 0.033160 0.038885 +0 11 2 H-1 0.687243 1.239217 +1 11 2 O-16 0.000000 0.000000 +2 11 2 B-10 0.042902 0.060672 3 11 2 B-11 0.000000 0.000000 -4 11 2 Zr-90 0.016580 0.019443 -5 11 2 Zr-91 0.018732 0.020277 -6 11 2 Zr-92 0.026213 0.025010 -7 11 2 Zr-94 0.015981 0.019263 +4 11 2 Zr-90 0.039576 0.105193 +5 11 2 Zr-91 0.000000 0.000000 +6 11 2 Zr-92 0.084226 0.103161 +7 11 2 Zr-94 0.092039 0.125985 8 11 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. 9 11 1 H-1 0 0 10 11 1 O-16 0 0 @@ -1825,16 +1825,16 @@ 6 11 2 Zr-92 0 0 7 11 2 Zr-94 0 0 8 11 2 Zr-96 0 0 material group in group out nuclide mean std. dev. -27 11 1 1 H-1 0.145106 0.291322 -28 11 1 1 O-16 0.059703 0.040511 +27 11 1 1 H-1 0.099594 0.442578 +28 11 1 1 O-16 0.028684 0.043000 29 11 1 1 B-10 0.000000 0.000000 30 11 1 1 B-11 0.000000 0.000000 -31 11 1 1 Zr-90 0.048335 0.045106 -32 11 1 1 Zr-91 0.021080 0.020176 -33 11 1 1 Zr-92 0.015959 0.020345 -34 11 1 1 Zr-94 0.013058 0.019576 +31 11 1 1 Zr-90 0.021980 0.039963 +32 11 1 1 Zr-91 0.000000 0.000000 +33 11 1 1 Zr-92 0.000000 0.000000 +34 11 1 1 Zr-94 0.004191 0.087344 35 11 1 1 Zr-96 0.000000 0.000000 -18 11 1 2 H-1 0.025143 0.021133 +18 11 1 2 H-1 0.031875 0.045078 19 11 1 2 O-16 0.000000 0.000000 20 11 1 2 B-10 0.000000 0.000000 21 11 1 2 B-11 0.000000 0.000000 @@ -1852,14 +1852,14 @@ 15 11 2 1 Zr-92 0.000000 0.000000 16 11 2 1 Zr-94 0.000000 0.000000 17 11 2 1 Zr-96 0.000000 0.000000 -0 11 2 2 H-1 0.899793 0.954128 -1 11 2 2 O-16 0.075037 0.081039 +0 11 2 2 H-1 0.687243 1.239217 +1 11 2 2 O-16 0.000000 0.000000 2 11 2 2 B-10 0.000000 0.000000 3 11 2 2 B-11 0.000000 0.000000 -4 11 2 2 Zr-90 0.000000 0.000000 -5 11 2 2 Zr-91 0.018732 0.020277 -6 11 2 2 Zr-92 0.026213 0.025010 -7 11 2 2 Zr-94 0.015981 0.019263 +4 11 2 2 Zr-90 0.039576 0.105193 +5 11 2 2 Zr-91 0.000000 0.000000 +6 11 2 2 Zr-92 0.084226 0.103161 +7 11 2 2 Zr-94 0.092039 0.125985 8 11 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. 9 11 1 H-1 0 0 10 11 1 O-16 0 0 @@ -1878,7 +1878,25 @@ 5 11 2 Zr-91 0 0 6 11 2 Zr-92 0 0 7 11 2 Zr-94 0 0 -8 11 2 Zr-96 0 0 material group in nuclide mean std. dev. +8 11 2 Zr-96 0 0 material group in nuclide mean std. dev. +9 12 1 H-1 0.098944 0.178543 +10 12 1 O-16 0.013270 0.020403 +11 12 1 B-10 0.000000 0.000000 +12 12 1 B-11 0.000000 0.000000 +13 12 1 Zr-90 0.089997 0.075538 +14 12 1 Zr-91 0.000000 0.000000 +15 12 1 Zr-92 0.003501 0.017031 +16 12 1 Zr-94 0.004850 0.016327 +17 12 1 Zr-96 0.002730 0.017476 +0 12 2 H-1 1.261686 1.980336 +1 12 2 O-16 0.079159 0.104796 +2 12 2 B-10 0.016928 0.023940 +3 12 2 B-11 0.000000 0.000000 +4 12 2 Zr-90 0.000000 0.000000 +5 12 2 Zr-91 0.033201 0.040665 +6 12 2 Zr-92 0.000000 0.000000 +7 12 2 Zr-94 0.000000 0.000000 +8 12 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. 9 12 1 H-1 0 0 10 12 1 O-16 0 0 11 12 1 B-10 0 0 @@ -1896,61 +1914,43 @@ 5 12 2 Zr-91 0 0 6 12 2 Zr-92 0 0 7 12 2 Zr-94 0 0 -8 12 2 Zr-96 0 0 material group in nuclide mean std. dev. -9 12 1 H-1 0 0 -10 12 1 O-16 0 0 -11 12 1 B-10 0 0 -12 12 1 B-11 0 0 -13 12 1 Zr-90 0 0 -14 12 1 Zr-91 0 0 -15 12 1 Zr-92 0 0 -16 12 1 Zr-94 0 0 -17 12 1 Zr-96 0 0 -0 12 2 H-1 0 0 -1 12 2 O-16 0 0 -2 12 2 B-10 0 0 -3 12 2 B-11 0 0 -4 12 2 Zr-90 0 0 -5 12 2 Zr-91 0 0 -6 12 2 Zr-92 0 0 -7 12 2 Zr-94 0 0 -8 12 2 Zr-96 0 0 material group in group out nuclide mean std. dev. -27 12 1 1 H-1 0 0 -28 12 1 1 O-16 0 0 -29 12 1 1 B-10 0 0 -30 12 1 1 B-11 0 0 -31 12 1 1 Zr-90 0 0 -32 12 1 1 Zr-91 0 0 -33 12 1 1 Zr-92 0 0 -34 12 1 1 Zr-94 0 0 -35 12 1 1 Zr-96 0 0 -18 12 1 2 H-1 0 0 -19 12 1 2 O-16 0 0 -20 12 1 2 B-10 0 0 -21 12 1 2 B-11 0 0 -22 12 1 2 Zr-90 0 0 -23 12 1 2 Zr-91 0 0 -24 12 1 2 Zr-92 0 0 -25 12 1 2 Zr-94 0 0 -26 12 1 2 Zr-96 0 0 -9 12 2 1 H-1 0 0 -10 12 2 1 O-16 0 0 -11 12 2 1 B-10 0 0 -12 12 2 1 B-11 0 0 -13 12 2 1 Zr-90 0 0 -14 12 2 1 Zr-91 0 0 -15 12 2 1 Zr-92 0 0 -16 12 2 1 Zr-94 0 0 -17 12 2 1 Zr-96 0 0 -0 12 2 2 H-1 0 0 -1 12 2 2 O-16 0 0 -2 12 2 2 B-10 0 0 -3 12 2 2 B-11 0 0 -4 12 2 2 Zr-90 0 0 -5 12 2 2 Zr-91 0 0 -6 12 2 2 Zr-92 0 0 -7 12 2 2 Zr-94 0 0 -8 12 2 2 Zr-96 0 0 material group out nuclide mean std. dev. +8 12 2 Zr-96 0 0 material group in group out nuclide mean std. dev. +27 12 1 1 H-1 0.071704 0.167588 +28 12 1 1 O-16 0.013270 0.020403 +29 12 1 1 B-10 0.000000 0.000000 +30 12 1 1 B-11 0.000000 0.000000 +31 12 1 1 Zr-90 0.089997 0.075538 +32 12 1 1 Zr-91 0.000000 0.000000 +33 12 1 1 Zr-92 0.003501 0.017031 +34 12 1 1 Zr-94 0.004850 0.016327 +35 12 1 1 Zr-96 0.002730 0.017476 +18 12 1 2 H-1 0.027240 0.029555 +19 12 1 2 O-16 0.000000 0.000000 +20 12 1 2 B-10 0.000000 0.000000 +21 12 1 2 B-11 0.000000 0.000000 +22 12 1 2 Zr-90 0.000000 0.000000 +23 12 1 2 Zr-91 0.000000 0.000000 +24 12 1 2 Zr-92 0.000000 0.000000 +25 12 1 2 Zr-94 0.000000 0.000000 +26 12 1 2 Zr-96 0.000000 0.000000 +9 12 2 1 H-1 0.000000 0.000000 +10 12 2 1 O-16 0.000000 0.000000 +11 12 2 1 B-10 0.000000 0.000000 +12 12 2 1 B-11 0.000000 0.000000 +13 12 2 1 Zr-90 0.000000 0.000000 +14 12 2 1 Zr-91 0.000000 0.000000 +15 12 2 1 Zr-92 0.000000 0.000000 +16 12 2 1 Zr-94 0.000000 0.000000 +17 12 2 1 Zr-96 0.000000 0.000000 +0 12 2 2 H-1 1.244758 1.956675 +1 12 2 2 O-16 0.079159 0.104796 +2 12 2 2 B-10 0.000000 0.000000 +3 12 2 2 B-11 0.000000 0.000000 +4 12 2 2 Zr-90 0.000000 0.000000 +5 12 2 2 Zr-91 0.033201 0.040665 +6 12 2 2 Zr-92 0.000000 0.000000 +7 12 2 2 Zr-94 0.000000 0.000000 +8 12 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. 9 12 1 H-1 0 0 10 12 1 O-16 0 0 11 12 1 B-10 0 0 diff --git a/tests/test_natural_element/results_true.dat b/tests/test_natural_element/results_true.dat index 444f0df4f0..cc4a12f749 100644 --- a/tests/test_natural_element/results_true.dat +++ b/tests/test_natural_element/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.693693E-01 1.054925E-01 +1.034427E+00 1.583807E-02 diff --git a/tests/test_output/results_true.dat b/tests/test_output/results_true.dat index cb1493aba2..7b2fbf37f5 100644 --- a/tests/test_output/results_true.dat +++ b/tests/test_output/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.993693E-01 1.470880E-03 +2.943619E-01 3.309635E-03 diff --git a/tests/test_particle_restart_eigval/results_true.dat b/tests/test_particle_restart_eigval/results_true.dat index c68f4864ee..2bc4632935 100644 --- a/tests/test_particle_restart_eigval/results_true.dat +++ b/tests/test_particle_restart_eigval/results_true.dat @@ -1,16 +1,16 @@ current batch: -1.100000E+01 +1.000000E+01 current gen: 1.000000E+00 particle id: -6.850000E+02 +1.030000E+03 run mode: k-eigenvalue particle weight: 1.000000E+00 particle energy: -5.680443E-01 +3.158576E+00 particle xyz: --4.117903E+01 4.165935E+01 4.265251E+01 +5.846530E+01 -3.717881E+01 -3.787515E+00 particle uvw: -1.106369E-01 -5.940833E-01 7.967587E-01 +6.197114E-01 -2.450461E-01 -7.455939E-01 diff --git a/tests/test_particle_restart_eigval/test_particle_restart_eigval.py b/tests/test_particle_restart_eigval/test_particle_restart_eigval.py index 6b98d3bbd8..59f76d93b8 100644 --- a/tests/test_particle_restart_eigval/test_particle_restart_eigval.py +++ b/tests/test_particle_restart_eigval/test_particle_restart_eigval.py @@ -7,5 +7,5 @@ from testing_harness import ParticleRestartTestHarness if __name__ == '__main__': - harness = ParticleRestartTestHarness('particle_11_685.*') + harness = ParticleRestartTestHarness('particle_10_1030.*') harness.main() diff --git a/tests/test_quadric_surfaces/results_true.dat b/tests/test_quadric_surfaces/results_true.dat index b90b7e71a1..1f0dd54262 100644 --- a/tests/test_quadric_surfaces/results_true.dat +++ b/tests/test_quadric_surfaces/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.006356E+00 7.889455E-03 +9.570770E-01 2.513234E-02 diff --git a/tests/test_reflective_plane/results_true.dat b/tests/test_reflective_plane/results_true.dat index ad23f3c9ff..4860c1ed90 100644 --- a/tests/test_reflective_plane/results_true.dat +++ b/tests/test_reflective_plane/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.284154E+00 3.063055E-03 +2.271202E+00 3.876146E-03 diff --git a/tests/test_resonance_scattering/results_true.dat b/tests/test_resonance_scattering/results_true.dat index 43ef009398..a649013c07 100644 --- a/tests/test_resonance_scattering/results_true.dat +++ b/tests/test_resonance_scattering/results_true.dat @@ -1,2 +1,2 @@ k-combined: -6.842177E-02 8.480479E-04 +6.842159E-02 8.481029E-04 diff --git a/tests/test_rotation/results_true.dat b/tests/test_rotation/results_true.dat index cb1493aba2..7b2fbf37f5 100644 --- a/tests/test_rotation/results_true.dat +++ b/tests/test_rotation/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.993693E-01 1.470880E-03 +2.943619E-01 3.309635E-03 diff --git a/tests/test_salphabeta/results_true.dat b/tests/test_salphabeta/results_true.dat index 77bbb266f0..fb691f1686 100644 --- a/tests/test_salphabeta/results_true.dat +++ b/tests/test_salphabeta/results_true.dat @@ -1,2 +1,2 @@ k-combined: -8.103883E-01 1.688384E-02 +8.331430E-01 3.074913E-03 diff --git a/tests/test_score_current/results_true.dat b/tests/test_score_current/results_true.dat index 054fa5c007..461681c764 100644 --- a/tests/test_score_current/results_true.dat +++ b/tests/test_score_current/results_true.dat @@ -1 +1 @@ -5e2576ac4c3b21d6acd1b308a3683ec274051d864ea9305ad59e2c8fa071ce33f591dfc05bae2321d0f98dce1fb882b54c64d5471056cd053953fc8f7bd2af62 \ No newline at end of file +e1bf6c8d9e29f4b6ec8a0eadb3802248eea1cc42fe17b2257ee28eabcdc63958073e226e04a2e751f92f12ef7cb8de330991de395707d9fab2a826ca6946181d \ No newline at end of file diff --git a/tests/test_seed/results_true.dat b/tests/test_seed/results_true.dat index b09bdf8635..35e9c968b0 100644 --- a/tests/test_seed/results_true.dat +++ b/tests/test_seed/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.994082E-01 3.643057E-03 +3.131925E-01 7.639726E-03 diff --git a/tests/test_source/results_true.dat b/tests/test_source/results_true.dat index 2a78dd7a5a..e7ef218ad2 100644 --- a/tests/test_source/results_true.dat +++ b/tests/test_source/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.054797E-01 3.094015E-03 +3.026614E-01 3.952004E-03 diff --git a/tests/test_source_file/results_true.dat b/tests/test_source_file/results_true.dat index 51161b3a6c..782e471766 100644 --- a/tests/test_source_file/results_true.dat +++ b/tests/test_source_file/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.996134E-01 2.910656E-03 +2.939526E-01 6.311736E-03 diff --git a/tests/test_sourcepoint_latest/results_true.dat b/tests/test_sourcepoint_latest/results_true.dat index cb1493aba2..7b2fbf37f5 100644 --- a/tests/test_sourcepoint_latest/results_true.dat +++ b/tests/test_sourcepoint_latest/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.993693E-01 1.470880E-03 +2.943619E-01 3.309635E-03 diff --git a/tests/test_sourcepoint_restart/results_true.dat b/tests/test_sourcepoint_restart/results_true.dat index 8d848b4cf0..49afeb1d52 100644 --- a/tests/test_sourcepoint_restart/results_true.dat +++ b/tests/test_sourcepoint_restart/results_true.dat @@ -1,16 +1,16 @@ k-combined: -2.993693E-01 1.470880E-03 +2.943619E-01 3.309635E-03 tally 1: -1.300000E-02 -4.300000E-05 -5.553260E-03 -1.267186E-05 -2.953436E-03 -6.351136E-06 -2.295617E-03 -4.617429E-06 -6.420875E-03 -9.259556E-06 +1.100000E-02 +3.700000E-05 +1.307570E-03 +2.851451E-06 +1.564980E-03 +2.368303E-06 +3.138136E-03 +5.769887E-06 +7.719235E-03 +2.632583E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -19,6 +19,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.976389E-04 +8.858892E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -27,8 +29,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.816169E-04 +7.772484E-07 +1.000000E-03 +1.000000E-06 +8.782909E-04 +7.713950E-07 +6.570925E-04 +4.317705E-07 +3.763366E-04 +1.416293E-07 0.000000E+00 0.000000E+00 +7.000000E-03 +1.500000E-05 +3.445754E-03 +3.819507E-06 +2.124056E-03 +1.976201E-06 +1.542203E-03 +1.531669E-06 +4.135720E-03 +4.532612E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -37,240 +59,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.500000E-02 -5.100000E-05 -8.675993E-03 -1.761431E-05 -3.327517E-03 -4.194966E-06 -7.274324E-04 -2.158075E-06 -6.423659E-03 -1.003735E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.071818E-04 -9.436064E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.000000E-03 -1.000000E-05 -2.838403E-04 -8.774323E-07 --4.663243E-04 -9.976861E-07 -5.379858E-04 -2.458806E-07 -1.830193E-03 -1.871531E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.800000E-02 -7.200000E-05 -7.892468E-03 -1.531545E-05 -5.418392E-03 -6.620060E-06 -4.884861E-03 -5.600362E-06 -7.948555E-03 -1.365782E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.120582E-04 -2.773023E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.014657E-04 -3.617610E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-02 -1.020000E-04 -6.418727E-03 -9.985775E-06 -6.251711E-03 -1.053337E-05 -4.720285E-03 -7.809860E-06 -9.455548E-03 -2.200500E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.052208E-04 -1.831532E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.136748E-04 -3.765967E-07 -2.000000E-03 -4.000000E-06 -1.977646E-03 -3.911083E-06 -1.933313E-03 -3.737699E-06 -1.867746E-03 -3.488475E-06 -3.068374E-04 -9.414918E-08 -6.000000E-03 -1.400000E-05 -1.048233E-03 -1.572686E-06 -1.209182E-05 -5.233234E-09 -1.086944E-03 -4.015851E-07 -3.362867E-03 -3.082582E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007329E-04 -9.044026E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +5.874391E-04 +1.725424E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -279,18 +69,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.079655E-04 +9.484274E-08 +1.000000E-03 +1.000000E-06 +9.451745E-04 +8.933548E-07 +8.400323E-04 +7.056542E-07 +6.931788E-04 +4.804969E-07 0.000000E+00 0.000000E+00 3.000000E-03 3.000000E-06 -2.874586E-03 -2.757041E-06 -2.635561E-03 -2.337016E-06 -2.305139E-03 -1.846818E-06 -1.227985E-03 -5.657187E-07 +1.134842E-03 +1.040850E-06 +6.127525E-05 +3.988312E-07 +4.938488E-05 +2.738492E-07 +1.484493E-03 +9.722888E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -299,8 +99,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.068374E-04 -9.414918E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -309,28 +107,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.143635E-04 -3.774426E-07 -1.000000E-03 -1.000000E-06 -9.888336E-04 -9.777919E-07 -9.666878E-04 -9.344854E-07 -9.339333E-04 -8.722314E-07 0.000000E+00 0.000000E+00 -1.800000E-02 -6.600000E-05 -3.521497E-03 -1.124575E-05 --1.106505E-03 -1.298962E-06 -2.307061E-03 -1.995982E-06 -7.955988E-03 -1.333038E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -339,18 +117,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.204584E-04 -2.824254E-07 -1.000000E-03 -1.000000E-06 --2.015923E-04 -4.063947E-08 --4.390408E-04 -1.927568E-07 -2.819070E-04 -7.947154E-08 -3.007329E-04 -9.044026E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -361,16 +127,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.000000E-03 -2.300000E-05 -8.049890E-04 -1.664654E-06 -2.892684E-03 -4.445095E-06 -5.132099E-04 -7.081387E-07 -3.678767E-03 -3.207908E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -379,18 +135,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.136210E-04 -1.882762E-07 -1.000000E-03 -1.000000E-06 -3.974827E-04 -1.579925E-07 --2.630113E-04 -6.917494E-08 --4.392258E-04 -1.929193E-07 -3.007329E-04 -9.044026E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -401,16 +145,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.000000E-03 -9.000000E-06 -2.095603E-03 -4.046946E-06 -2.670798E-03 -2.492128E-06 -1.379100E-04 -2.471643E-06 -2.750651E-03 -2.153957E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -419,8 +153,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.044879E-04 -9.271290E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -429,8 +161,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.014657E-04 -3.617610E-07 +1.700000E-02 +7.100000E-05 +5.492922E-03 +1.013834E-05 +5.773309E-04 +3.561549E-06 +2.550048E-03 +3.841061E-06 +8.048523E-03 +1.583844E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -439,6 +179,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.915762E-04 +1.749886E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -459,158 +201,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.400000E-02 -4.200000E-05 -5.756515E-03 -9.296704E-06 -1.251623E-03 -5.182413E-06 -2.207579E-03 -5.475159E-06 -5.492134E-03 -6.869563E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.182662E-04 -3.822531E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.300000E-02 -1.310000E-04 -8.875791E-03 -3.047020E-05 -5.194493E-03 -1.122408E-05 -2.565521E-03 -5.889229E-06 -9.193064E-03 -2.295619E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.539123E-03 -8.532105E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.021986E-04 -8.139623E-07 -1.000000E-03 -1.000000E-06 -9.693968E-04 -9.397302E-07 -9.095953E-04 -8.273636E-07 -8.233334E-04 -6.778780E-07 -0.000000E+00 -0.000000E+00 -2.800000E-02 -1.820000E-04 -8.903131E-03 -2.397214E-05 -1.010587E-02 -2.531134E-05 -4.754028E-03 -9.649119E-06 -1.378015E-02 -4.259630E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.208028E-04 -2.826368E-07 -1.000000E-03 -1.000000E-06 --4.279762E-04 -1.831637E-07 --2.252545E-04 -5.073960E-08 -4.459901E-04 -1.989072E-07 -6.089759E-04 -3.708516E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 1.200000E-02 -4.000000E-05 -4.239853E-03 -1.158537E-05 -1.052249E-03 -2.609268E-06 -1.581467E-03 -5.643069E-07 -6.112773E-03 -1.209962E-05 +4.600000E-05 +9.302157E-04 +3.853850E-06 +1.874541E-03 +3.092623E-06 +-1.511552E-03 +4.053466E-06 +5.941986E-03 +9.853873E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -619,6 +219,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.186549E-03 +5.291648E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -627,110 +229,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.800000E-02 -2.980000E-04 -1.590359E-02 -8.465362E-05 -1.095039E-02 -3.846682E-05 -8.674652E-03 -2.116226E-05 -1.953871E-02 -7.808840E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.098660E-04 -1.860035E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.000000E-02 -2.100000E-04 -1.396274E-02 -5.377392E-05 -7.263833E-03 -1.550401E-05 -2.406305E-03 -2.774873E-06 -1.067173E-02 -2.834689E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.159705E-04 -1.897125E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.089759E-04 -3.708516E-07 +2.935668E-04 +8.618149E-08 1.000000E-03 1.000000E-06 --3.845548E-04 -1.478824E-07 --2.781765E-04 -7.738214E-08 -4.346600E-04 -1.889293E-07 +9.893707E-04 +9.788543E-07 +9.682814E-04 +9.375689E-07 +9.370683E-04 +8.780970E-07 0.000000E+00 0.000000E+00 -3.100000E-02 -2.010000E-04 -5.656932E-03 -1.902755E-05 -4.255795E-04 -5.923041E-06 --1.665451E-03 -3.618806E-06 -1.254348E-02 -3.367259E-05 +8.000000E-03 +2.000000E-05 +3.721382E-03 +4.736982E-06 +-1.037031E-04 +6.648392E-07 +-5.996856E-04 +9.642316E-07 +3.248622E-03 +4.063214E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -739,48 +259,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.089759E-04 -3.708516E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007329E-04 -9.044026E-08 -1.000000E-03 -1.000000E-06 -9.418397E-04 -8.870620E-07 -8.305930E-04 -6.898847E-07 -6.759159E-04 -4.568623E-07 -0.000000E+00 -0.000000E+00 -1.700000E-02 -1.070000E-04 -9.563321E-03 -3.797495E-05 -3.872248E-03 -6.913143E-06 -1.851726E-03 -2.042684E-06 -7.032800E-03 -1.543729E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.091331E-04 -9.556328E-08 +2.938723E-04 +8.636093E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -801,56 +281,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.800000E-02 -3.300000E-04 -1.666359E-02 -6.918668E-05 -5.166835E-03 -1.583235E-05 -6.193613E-03 -1.014626E-05 -1.654613E-02 -6.758065E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.218842E-03 -5.568551E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.222651E-03 -7.474483E-07 2.000000E-03 2.000000E-06 -1.859309E-03 -1.730661E-06 -1.595992E-03 -1.290291E-06 -1.243306E-03 -8.262391E-07 -0.000000E+00 -0.000000E+00 -3.200000E-02 -2.140000E-04 -1.125786E-02 -3.535152E-05 -6.340891E-03 -1.186849E-05 --6.739003E-04 -6.238152E-06 -1.194483E-02 -3.174072E-05 +1.502634E-03 +1.146555E-06 +7.198331E-04 +3.484978E-07 +-3.426513E-05 +1.342349E-07 +1.511030E-03 +1.198311E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -859,8 +299,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.528427E-03 -1.032143E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -869,28 +307,70 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.091331E-04 -9.556328E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.300000E-02 +3.700000E-05 +3.121167E-03 +2.465327E-06 +4.474559E-04 +1.522316E-06 +9.193982E-04 +3.247292E-06 +5.365660E-03 +6.567981E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.056044E-04 +1.834317E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.977039E-04 +8.862764E-08 1.000000E-03 1.000000E-06 -8.883829E-04 -7.892241E-07 -6.838361E-04 -4.676319E-07 -4.202586E-04 -1.766173E-07 +2.390376E-04 +5.713899E-08 +-4.142915E-04 +1.716375E-07 +-3.244105E-04 +1.052422E-07 0.000000E+00 0.000000E+00 -2.000000E-02 -1.060000E-04 -6.707526E-03 -2.735840E-05 -6.937679E-03 -1.338587E-05 -5.832553E-03 -1.828962E-05 -1.101850E-02 -3.215320E-05 +1.500000E-02 +5.500000E-05 +2.209492E-03 +2.545503E-06 +5.991182E-03 +1.290780E-05 +1.772063E-03 +2.006265E-06 +5.944487E-03 +1.042417E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -899,8 +379,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.105988E-04 -4.573243E-07 +3.079655E-04 +9.484274E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -909,308 +389,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.227694E-03 -9.417032E-07 -1.000000E-03 -1.000000E-06 -9.408116E-04 -8.851265E-07 -8.276898E-04 -6.850703E-07 -6.706258E-04 -4.497390E-07 -0.000000E+00 -0.000000E+00 -1.800000E-02 -7.800000E-05 -2.843265E-03 -6.035154E-06 -4.322434E-03 -7.469456E-06 -2.900345E-03 -4.663845E-06 -7.631460E-03 -1.236685E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007329E-04 -9.044026E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-02 -9.200000E-05 -6.856783E-03 -1.381342E-05 -2.931050E-03 -7.384807E-06 -1.856596E-03 -2.302567E-06 -1.130923E-02 -3.279819E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-03 -1.000000E-06 -2.509363E-04 -6.296901E-08 --4.055465E-04 -1.644679E-07 --3.369014E-04 -1.135025E-07 -6.182662E-04 -3.822531E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.091331E-04 -9.556328E-08 -2.900000E-02 -2.010000E-04 -1.040068E-02 -4.442598E-05 -7.909288E-03 -1.634388E-05 -2.600276E-03 -1.084582E-05 -1.160235E-02 -3.244276E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.227694E-03 -9.417032E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.091331E-04 -9.556328E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.091331E-04 -9.556328E-08 -2.900000E-02 -1.890000E-04 -3.796494E-03 -2.573465E-05 -5.901410E-03 -9.723225E-06 -2.069453E-03 -9.510548E-06 -1.438173E-02 -4.416319E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.136748E-04 -3.765967E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.400000E-02 -1.240000E-04 -6.672638E-03 -1.840846E-05 -4.370801E-03 -7.557992E-06 -4.585753E-03 -1.441383E-05 -1.162351E-02 -2.791423E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.089759E-04 -3.708516E-07 -1.000000E-03 -1.000000E-06 --8.175500E-04 -6.683879E-07 -5.025819E-04 -2.525886E-07 --1.397764E-04 -1.953744E-08 -3.071818E-04 -9.436064E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.700000E-02 -2.910000E-04 -8.304483E-03 -2.250088E-05 -7.798128E-03 -2.325505E-05 -6.917154E-03 -2.136255E-05 -1.649875E-02 -5.805120E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.071818E-04 -9.436064E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.500000E-02 -2.550000E-04 -1.934687E-03 -1.279246E-05 -1.742063E-03 -9.283511E-06 -5.580823E-03 -1.402955E-05 -1.465296E-02 -4.425100E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.535220E-03 -1.225842E-06 +1.190621E-03 +8.859279E-07 2.000000E-03 2.000000E-06 -1.954328E-03 -1.909945E-06 -1.864917E-03 -1.741066E-06 -1.735530E-03 -1.513893E-06 +1.908405E-03 +1.821879E-06 +1.732819E-03 +1.508498E-06 +1.487670E-03 +1.131430E-06 0.000000E+00 0.000000E+00 -3.100000E-02 -2.150000E-04 -8.788723E-03 -4.052825E-05 -7.277307E-03 -2.646372E-05 -4.235689E-03 -1.237842E-05 -1.375310E-02 -4.363256E-05 +4.000000E-03 +4.000000E-06 +3.379122E-03 +2.880429E-06 +2.320644E-03 +1.498759E-06 +1.119131E-03 +6.212863E-07 +1.494579E-03 +6.241237E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1219,8 +419,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.068374E-04 -9.414918E-08 +2.976389E-04 +8.858892E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1229,278 +429,148 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.143635E-04 -3.774426E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.100000E-02 +1.150000E-04 +5.280651E-03 +1.222273E-05 +5.235520E-03 +1.202448E-05 +5.064093E-03 +1.787892E-05 +1.071093E-02 +2.748613E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.954046E-04 +2.673852E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.600000E-02 +1.560000E-04 +6.314886E-03 +1.168542E-05 +6.676680E-04 +9.930437E-06 +-2.103247E-04 +2.815945E-07 +1.249410E-02 +3.501590E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.159310E-04 +3.793709E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 1.000000E-03 1.000000E-06 -9.752141E-04 -9.510426E-07 -9.265639E-04 -8.585207E-07 -8.558543E-04 -7.324865E-07 -0.000000E+00 -0.000000E+00 -2.000000E-02 -9.400000E-05 -5.446779E-03 -8.175340E-06 -2.952745E-03 -6.944505E-06 -9.137774E-04 -1.227091E-06 -7.662475E-03 -1.309219E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.225836E-03 -5.668425E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.800000E-02 -1.660000E-04 -7.579645E-03 -3.038397E-05 -6.894753E-03 -2.399109E-05 -5.371715E-03 -1.603319E-05 -1.344654E-02 -4.055142E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.091331E-04 -9.556328E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.400000E-02 -1.300000E-04 -4.257114E-03 -3.224130E-05 -8.813774E-03 -2.583867E-05 -4.664136E-03 -1.410529E-05 -1.287730E-02 -3.681324E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-03 -1.000000E-06 --6.367370E-04 -4.054341E-07 -1.081511E-04 -1.169666E-08 -3.097184E-04 -9.592546E-08 -6.182662E-04 -3.822531E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.400000E-02 -1.300000E-04 -1.378482E-02 -5.592497E-05 -9.034738E-03 -2.624250E-05 -5.658518E-03 -1.317424E-05 -1.068557E-02 -2.727026E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.091331E-04 -9.556328E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.182662E-04 -3.822531E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.200000E-02 -2.260000E-04 -6.941116E-03 -2.215550E-05 -6.749352E-03 -1.648121E-05 -5.910808E-03 -1.357613E-05 -1.528788E-02 -5.372220E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.136210E-04 -1.882762E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.900000E-02 -2.030000E-04 -4.508769E-03 -3.192756E-05 -4.194184E-03 -7.918516E-06 -2.186680E-03 -9.265062E-06 -1.406557E-02 -4.964272E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.518169E-03 -1.003675E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +9.514029E-04 +9.051675E-07 +8.577513E-04 +7.357373E-07 +7.258432E-04 +5.268483E-07 0.000000E+00 0.000000E+00 2.300000E-02 -1.410000E-04 -7.122769E-03 -1.478437E-05 -4.717800E-03 -1.137509E-05 -2.766174E-03 -2.862748E-06 -9.770364E-03 -2.547043E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007329E-04 -9.044026E-08 +1.650000E-04 +9.507197E-03 +3.773476E-05 +6.295609E-03 +2.127696E-05 +6.339840E-03 +1.601206E-05 +1.065253E-02 +3.447908E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1511,66 +581,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-02 -9.400000E-05 --2.546403E-03 -8.587879E-06 -3.329285E-04 -1.032543E-06 --6.526073E-04 -5.693572E-06 -7.947562E-03 -1.421771E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.091331E-04 -9.556328E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.273993E-04 -8.600695E-07 1.000000E-03 1.000000E-06 -9.887237E-04 -9.775745E-07 -9.663618E-04 -9.338551E-07 -9.332922E-04 -8.710343E-07 -0.000000E+00 -0.000000E+00 -1.000000E-02 -3.400000E-05 -2.083696E-03 -6.707681E-06 -2.664177E-03 -4.483757E-06 --3.543315E-04 -7.233059E-07 -3.654309E-03 -3.704263E-06 +-1.117213E-04 +1.248165E-08 +-4.812775E-04 +2.316281E-07 +1.640958E-04 +2.692743E-08 +5.871337E-04 +3.447260E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1579,8 +599,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.007329E-04 -9.044026E-08 +0.000000E+00 +0.000000E+00 +1.500000E-02 +6.300000E-05 +5.790211E-03 +1.210465E-05 +8.591246E-04 +1.950998E-06 +1.987991E-03 +4.703397E-06 +6.572185E-03 +9.479067E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.954079E-04 +3.545105E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1601,16 +641,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.700000E-02 -7.500000E-05 -7.751840E-03 -1.439369E-05 -5.032178E-03 -1.282123E-05 -5.077992E-03 -8.054934E-06 -7.339781E-03 -1.254543E-05 +2.700000E-02 +1.670000E-04 +1.789444E-02 +8.260005E-05 +1.049872E-02 +2.774537E-05 +5.665111E-03 +8.560197E-06 +1.100708E-02 +2.835296E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1619,18 +659,38 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.068374E-04 -9.414918E-08 +3.079655E-04 +9.484274E-08 1.000000E-03 1.000000E-06 --5.691245E-04 -3.239027E-07 --1.414588E-05 -2.001060E-10 -3.928343E-04 -1.543188E-07 -6.182662E-04 -3.822531E-07 +-2.856031E-04 +8.156913E-08 +-3.776463E-04 +1.426167E-07 +3.701637E-04 +1.370211E-07 +1.203065E-03 +7.240969E-07 +1.000000E-03 +1.000000E-06 +9.705482E-04 +9.419638E-07 +9.129457E-04 +8.334699E-07 +8.297310E-04 +6.884535E-07 +0.000000E+00 +0.000000E+00 +2.300000E-02 +1.230000E-04 +5.099566E-03 +9.143616E-06 +4.738751E-03 +7.819254E-06 +3.929250E-03 +6.884420E-06 +1.015650E-02 +2.236950E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1639,18 +699,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-02 -9.000000E-05 -4.292093E-03 -1.162566E-05 -1.911635E-03 -6.462803E-06 -7.144938E-04 -3.566046E-06 -8.845087E-03 -1.787718E-05 +2.977039E-04 +8.862764E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1659,8 +709,38 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.098660E-04 -1.860035E-07 +5.912708E-04 +1.748091E-07 +2.000000E-03 +2.000000E-06 +1.762035E-03 +1.552542E-06 +1.328812E-03 +8.839688E-07 +7.771806E-04 +3.049398E-07 +0.000000E+00 +0.000000E+00 +2.800000E-02 +1.780000E-04 +1.190615E-02 +4.434442E-05 +7.332993E-03 +2.337416E-05 +6.867008E-03 +1.321552E-05 +1.283876E-02 +3.527488E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.954079E-04 +3.545105E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1682,15 +762,15 @@ tally 1: 0.000000E+00 0.000000E+00 1.900000E-02 -7.900000E-05 -7.074706E-03 -1.339988E-05 -3.301242E-03 -3.627546E-06 -3.676901E-03 -5.025480E-06 -7.044700E-03 -1.063679E-05 +1.030000E-04 +3.892013E-03 +8.267134E-06 +3.385502E-03 +6.457947E-06 +4.380506E-03 +1.060881E-05 +7.130795E-03 +1.485135E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1699,8 +779,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.211332E-03 -9.095256E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1709,28 +787,30 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.068374E-04 -9.414918E-08 +0.000000E+00 +0.000000E+00 +8.816169E-04 +7.772484E-07 1.000000E-03 1.000000E-06 -9.924008E-04 -9.848594E-07 -9.772891E-04 -9.550940E-07 -9.548370E-04 -9.117137E-07 +9.951010E-04 +9.902260E-07 +9.853389E-04 +9.708928E-07 +9.707856E-04 +9.424246E-07 0.000000E+00 0.000000E+00 -1.200000E-02 -4.200000E-05 -1.994203E-03 -9.474986E-06 -4.797034E-03 -7.209992E-06 -7.461820E-04 -7.384105E-07 -5.186835E-03 -7.184830E-06 +2.900000E-02 +2.230000E-04 +6.260565E-03 +1.544092E-05 +7.061757E-03 +2.562385E-05 +3.982541E-03 +7.962565E-06 +1.486928E-02 +5.763902E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1739,8 +819,48 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.044879E-04 -9.271290E-08 +5.915762E-04 +1.749886E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.954079E-04 +3.545105E-07 +1.000000E-03 +1.000000E-06 +9.938157E-04 +9.876697E-07 +9.815046E-04 +9.633512E-07 +9.631807E-04 +9.277170E-07 +0.000000E+00 +0.000000E+00 +2.600000E-02 +1.460000E-04 +7.818547E-03 +3.176773E-05 +5.200193E-03 +1.419001E-05 +3.947828E-03 +8.417104E-06 +9.232714E-03 +1.900222E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.186919E-03 +5.294604E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1762,15 +882,15 @@ tally 1: 0.000000E+00 0.000000E+00 3.100000E-02 -2.070000E-04 -1.654377E-02 -5.944129E-05 -1.297328E-02 -4.003873E-05 -7.211206E-03 -1.234310E-05 -1.739706E-02 -6.870884E-05 +1.950000E-04 +1.338410E-02 +5.097757E-05 +6.794436E-03 +1.428226E-05 +3.939298E-03 +9.052046E-06 +1.250316E-02 +3.147176E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1779,118 +899,118 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.086475E-04 -4.561217E-07 +5.953428E-04 +1.772166E-07 +1.000000E-03 +1.000000E-06 +-5.747626E-05 +3.303520E-09 +-4.950447E-04 +2.450693E-07 +8.573970E-05 +7.351297E-09 +5.954079E-04 +3.545105E-07 +1.000000E-03 +1.000000E-06 +9.748367E-04 +9.503066E-07 +9.254598E-04 +8.564759E-07 +8.537292E-04 +7.288535E-07 +0.000000E+00 +0.000000E+00 +1.000000E-02 +2.600000E-05 +5.875085E-04 +4.563904E-07 +-9.207198E-05 +5.154496E-07 +3.674257E-05 +1.178281E-06 +5.048984E-03 +5.880390E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.079655E-04 +9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.952778E-04 +3.543557E-07 +1.000000E-03 +1.000000E-06 +9.362621E-04 +8.765867E-07 +8.148801E-04 +6.640295E-07 +6.473941E-04 +4.191191E-07 +0.000000E+00 +0.000000E+00 +3.100000E-02 +2.130000E-04 +1.472240E-02 +5.500913E-05 +1.077445E-02 +2.987369E-05 +6.729425E-03 +1.249089E-05 +1.363637E-02 +4.345511E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.182717E-03 +5.268981E-07 2.000000E-03 -4.000000E-06 --1.560749E-03 -2.435936E-06 -8.504262E-04 -7.232247E-07 --1.266477E-04 -1.603963E-08 -2.148895E-03 -2.355633E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.068374E-04 -9.414918E-08 -2.100000E-02 -9.900000E-05 -8.524679E-03 -1.919497E-05 -5.830060E-03 -1.195983E-05 -4.439133E-03 -4.446488E-06 -8.535001E-03 -1.828799E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.044879E-04 -9.271290E-08 -3.000000E-03 -5.000000E-06 -3.626106E-04 -7.014271E-07 -2.355907E-04 -3.451505E-07 -1.623342E-03 -1.603144E-06 -3.056692E-03 -2.433689E-06 -3.000000E-03 -5.000000E-06 -2.377207E-03 -2.907996E-06 -1.593038E-03 -1.320423E-06 -1.150471E-03 -8.926966E-07 -0.000000E+00 -0.000000E+00 -1.700000E-02 -6.300000E-05 -8.432455E-03 -1.718164E-05 -2.701919E-03 -5.016066E-06 -2.357556E-03 -3.687074E-06 -7.025349E-03 -1.109437E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.052208E-04 -1.831532E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.215453E-04 -8.492458E-07 +2.000000E-06 +-1.367978E-03 +9.381191E-07 +4.071787E-04 +9.316064E-08 +4.394728E-04 +1.064342E-07 +2.110881E-03 +1.737594E-06 1.000000E-03 1.000000E-06 -9.959310E-04 -9.918786E-07 -9.878179E-04 -9.757842E-07 -9.757102E-04 -9.520103E-07 -0.000000E+00 -0.000000E+00 -1.100000E-02 -4.900000E-05 -5.546222E-03 -1.139525E-05 -1.289839E-03 -2.123481E-06 -1.011230E-03 -1.426586E-06 -5.215344E-03 -8.818614E-06 +9.347357E-04 +8.737309E-07 +8.105963E-04 +6.570664E-07 +6.396651E-04 +4.091714E-07 +2.938723E-04 +8.636093E-08 +2.900000E-02 +1.950000E-04 +8.928267E-03 +2.594547E-05 +4.752762E-03 +1.522378E-05 +5.376579E-03 +1.088620E-05 +1.461149E-02 +4.367386E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1899,18 +1019,538 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.136210E-04 -1.882762E-07 +5.912057E-04 +1.747704E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.100000E-02 +2.030000E-04 +1.194795E-02 +4.198084E-05 +8.484089E-03 +1.631808E-05 +5.880364E-03 +1.308096E-05 +1.342551E-02 +3.842917E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.915762E-04 +1.749886E-07 1.000000E-03 1.000000E-06 -3.587682E-04 -1.287146E-07 --3.069281E-04 -9.420486E-08 --4.227055E-04 -1.786799E-07 -1.228132E-03 -9.505098E-07 +-5.881991E-05 +3.459782E-09 +-4.948103E-04 +2.448373E-07 +8.772111E-05 +7.694993E-09 +5.871337E-04 +3.447260E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +1.030000E-04 +3.010784E-03 +6.984061E-06 +5.243839E-03 +8.093978E-06 +-2.502286E-04 +2.564795E-06 +7.760559E-03 +1.654842E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 +1.000000E-03 +1.000000E-06 +9.333938E-04 +8.712239E-07 +8.068359E-04 +6.509841E-07 +6.328968E-04 +4.005583E-07 +0.000000E+00 +0.000000E+00 +4.400000E-02 +4.320000E-04 +1.141886E-02 +4.208707E-05 +9.213446E-03 +2.259305E-05 +9.177440E-03 +2.088782E-05 +2.116869E-02 +9.629049E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.501009E-03 +6.405023E-07 +1.000000E-03 +1.000000E-06 +5.882614E-04 +3.460515E-07 +1.907719E-05 +3.639390E-10 +-3.734703E-04 +1.394801E-07 +1.472277E-03 +9.506220E-07 +2.000000E-03 +2.000000E-06 +1.830192E-03 +1.679505E-06 +1.519257E-03 +1.189525E-06 +1.118506E-03 +7.332971E-07 +2.977039E-04 +8.862764E-08 +3.100000E-02 +2.250000E-04 +1.389831E-02 +5.927254E-05 +9.999959E-03 +3.379365E-05 +4.584291E-03 +1.665226E-05 +1.729188E-02 +6.078654E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.792523E-03 +8.900699E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.000000E-02 +3.880000E-04 +6.620484E-03 +3.751545E-05 +9.255367E-03 +1.963463E-05 +7.761524E-03 +1.694944E-05 +1.659048E-02 +7.200875E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +1.000000E-03 +1.000000E-06 +-5.273064E-04 +2.780520E-07 +-8.292201E-05 +6.876059E-09 +4.244131E-04 +1.801265E-07 +8.891501E-04 +4.407166E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.900000E-02 +1.970000E-04 +4.944370E-03 +2.340271E-05 +3.891346E-03 +1.137205E-05 +5.738303E-03 +9.169816E-06 +1.046961E-02 +2.353871E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.056694E-04 +1.834704E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.203065E-03 +7.240969E-07 +2.000000E-03 +2.000000E-06 +1.696621E-03 +1.449397E-06 +1.174096E-03 +7.548933E-07 +5.719051E-04 +3.184788E-07 +0.000000E+00 +0.000000E+00 +2.900000E-02 +1.990000E-04 +1.237546E-02 +3.198261E-05 +8.287792E-03 +2.747313E-05 +3.254969E-03 +8.653294E-06 +1.189702E-02 +3.303341E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.033083E-04 +2.720593E-07 +3.000000E-03 +3.000000E-06 +3.649225E-04 +1.756075E-06 +1.134112E-03 +8.940601E-07 +-9.392028E-04 +5.872882E-07 +1.484188E-03 +9.721094E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.600000E-02 +2.740000E-04 +9.407788E-03 +2.403566E-05 +4.480017E-03 +6.102099E-06 +5.941113E-03 +1.265337E-05 +1.462273E-02 +4.551799E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.056694E-04 +1.834704E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.807005E-04 +7.756334E-07 +1.000000E-03 +1.000000E-06 +8.905295E-04 +7.930427E-07 +6.895641E-04 +4.754986E-07 +4.297756E-04 +1.847070E-07 +0.000000E+00 +0.000000E+00 +2.600000E-02 +1.800000E-04 +1.225587E-02 +3.757196E-05 +7.670283E-03 +2.316758E-05 +5.282346E-03 +1.407031E-05 +1.162837E-02 +3.241151E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.874391E-04 +1.725424E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.000000E-02 +9.000000E-05 +5.358616E-03 +1.697599E-05 +3.060277E-03 +7.132281E-06 +2.485730E-03 +7.247489E-06 +9.248313E-03 +1.738407E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.991712E-04 +2.696131E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.954079E-04 +3.545105E-07 +1.000000E-03 +1.000000E-06 +9.816220E-04 +9.635817E-07 +9.453726E-04 +8.937294E-07 +8.922496E-04 +7.961093E-07 +0.000000E+00 +0.000000E+00 +2.300000E-02 +1.330000E-04 +1.081756E-02 +3.675127E-05 +2.530156E-03 +6.960955E-06 +-1.930911E-03 +4.910249E-06 +1.162826E-02 +3.490280E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.957101E-04 +4.402865E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +9.700000E-05 +1.046968E-02 +3.828445E-05 +6.704767E-03 +2.668260E-05 +2.659611E-03 +1.143518E-05 +1.099391E-02 +2.847330E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.655540E-03 +2.523801E-06 +3.000000E-03 +5.000000E-06 +2.960960E-03 +4.866206E-06 +2.884206E-03 +4.608867E-06 +2.772329E-03 +4.247272E-06 +2.976389E-04 +8.858892E-08 +1.900000E-02 +8.700000E-05 +5.469796E-03 +1.029265E-05 +4.923561E-04 +2.403244E-06 +2.579361E-03 +5.814745E-06 +8.693503E-03 +1.682274E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1922,15 +1562,15 @@ tally 1: 0.000000E+00 0.000000E+00 1.800000E-02 -8.600000E-05 -4.110494E-03 -1.042545E-05 -2.304908E-03 -4.602048E-06 -1.132856E-03 -1.141229E-06 -9.161625E-03 -2.374582E-05 +1.220000E-04 +6.860987E-03 +2.966806E-05 +4.229750E-03 +1.617998E-05 +1.295452E-03 +8.613003E-07 +7.815193E-03 +2.039363E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1939,6 +1579,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.935668E-04 +8.618149E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1959,72 +1601,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -6.000000E-03 -1.000000E-05 -7.480298E-04 -2.696134E-07 -1.010259E-03 -2.525363E-06 -2.404343E-03 -2.960244E-06 -5.213048E-03 -8.232507E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007329E-04 -9.044026E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.000000E-03 -5.000000E-06 -7.647871E-04 -1.000926E-06 -8.702327E-05 -1.587846E-06 -1.118717E-03 -8.177417E-07 -2.147037E-03 -1.226733E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +2.000000E-02 +1.080000E-04 +8.640372E-03 +1.765553E-05 +5.688468E-03 +1.038555E-05 +2.447898E-03 +4.466055E-06 +8.949668E-03 +1.935056E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2033,6 +1619,38 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.977039E-04 +8.862764E-08 +1.000000E-03 +1.000000E-06 +-3.805163E-04 +1.447926E-07 +-2.828111E-04 +7.998210E-08 +4.330345E-04 +1.875189E-07 +2.121142E-03 +1.958355E-06 +1.000000E-03 +1.000000E-06 +9.260022E-04 +8.574800E-07 +7.862200E-04 +6.181419E-07 +5.960676E-04 +3.552966E-07 +2.938723E-04 +8.636093E-08 +1.700000E-02 +7.100000E-05 +3.566805E-03 +2.049908E-05 +5.418617E-03 +7.496014E-06 +2.451897E-03 +2.115374E-06 +7.760001E-03 +1.634548E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2041,6 +1659,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.977039E-04 +8.862764E-08 +1.000000E-03 +1.000000E-06 +-7.119580E-04 +5.068842E-07 +2.603263E-04 +6.776977E-08 +1.657364E-04 +2.746855E-08 +8.807005E-04 +7.756334E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2051,6 +1681,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.200000E-02 +3.400000E-05 +5.905081E-03 +1.535048E-05 +3.856089E-03 +8.589511E-06 +3.244585E-03 +5.882222E-06 +5.074321E-03 +5.793166E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2082,15 +1722,337 @@ tally 1: 0.000000E+00 0.000000E+00 1.600000E-02 -6.200000E-05 -9.988601E-03 -3.022832E-05 -6.166188E-03 -1.173350E-05 -3.417134E-03 -5.700622E-06 -7.649352E-03 -1.360625E-05 +5.400000E-05 +7.937805E-03 +1.353584E-05 +4.065443E-03 +5.658333E-06 +3.432476E-03 +3.530320E-06 +6.546903E-03 +9.343145E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.500000E-02 +1.390000E-04 +1.511834E-02 +5.459835E-05 +7.753447E-03 +2.291820E-05 +6.142979E-03 +1.359405E-05 +1.043467E-02 +2.526769E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.912057E-04 +1.747704E-07 +1.000000E-03 +1.000000E-06 +-1.098110E-04 +1.205846E-08 +-4.819123E-04 +2.322395E-07 +1.614061E-04 +2.605194E-08 +8.813115E-04 +4.316252E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 +1.200000E-02 +3.000000E-05 +4.798420E-03 +7.171924E-06 +1.417651E-03 +4.997963E-06 +2.131704E-03 +3.253030E-06 +7.754475E-03 +1.333333E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.938723E-04 +8.636093E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.484383E-03 +1.504224E-06 +3.000000E-03 +5.000000E-06 +2.760812E-03 +4.139104E-06 +2.336063E-03 +2.844690E-06 +1.817042E-03 +1.656152E-06 +0.000000E+00 +0.000000E+00 +1.900000E-02 +9.900000E-05 +7.244455E-03 +2.708286E-05 +4.601657E-03 +5.366244E-06 +-1.675270E-03 +3.867377E-06 +9.216755E-03 +2.272207E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.079655E-04 +9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.159310E-04 +3.793709E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.000000E-03 +1.800000E-05 +4.925975E-03 +6.260377E-06 +3.176938E-03 +2.631319E-06 +2.008278E-03 +1.484516E-06 +3.844641E-03 +4.075869E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.977039E-04 +8.862764E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.238964E-04 +8.535846E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-02 +3.400000E-05 +4.086838E-03 +5.900874E-06 +1.812330E-03 +3.716159E-06 +2.138941E-03 +3.006748E-06 +5.414129E-03 +8.079335E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.079655E-04 +9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.000000E-03 +8.000000E-06 +2.104495E-03 +2.749678E-06 +8.451272E-04 +9.362821E-07 +5.355137E-04 +3.419837E-07 +2.683856E-03 +1.512640E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +1.000000E-03 +1.000000E-06 +9.374310E-04 +8.787769E-07 +8.181653E-04 +6.693944E-07 +6.533352E-04 +4.268468E-07 +2.976389E-04 +8.858892E-08 +8.000000E-03 +1.600000E-05 +5.411154E-03 +8.076329E-06 +3.145940E-03 +4.212660E-06 +2.637510E-03 +3.210372E-06 +3.866944E-03 +3.257876E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.175489E-03 +1.381775E-06 +1.000000E-03 +1.000000E-06 +7.809681E-04 +6.099112E-07 +4.148668E-04 +1.721145E-07 +1.935089E-05 +3.744570E-10 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2099,8 +2061,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.136748E-04 -3.765967E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2123,14 +2083,108 @@ tally 1: 0.000000E+00 1.000000E-02 3.400000E-05 -3.889110E-03 -7.557500E-06 -1.015827E-04 -2.744147E-06 -7.497308E-04 -3.373523E-06 -4.583807E-03 -6.264955E-06 +4.840884E-03 +1.080853E-05 +3.402096E-03 +4.113972E-06 +1.374077E-03 +2.333511E-06 +4.754696E-03 +7.172310E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.079655E-04 +9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.900000E-02 +2.030000E-04 +6.527719E-03 +1.422798E-05 +1.560049E-03 +2.934829E-06 +1.548553E-03 +8.929308E-06 +1.108618E-02 +3.019578E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.174573E-03 +8.619943E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.000000E-03 +8.000000E-06 +1.520286E-03 +4.076900E-06 +2.191143E-03 +3.717004E-06 +1.161623E-03 +3.726099E-06 +3.570376E-03 +5.251427E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2139,8 +2193,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.052208E-04 -1.831532E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2149,28 +2201,136 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.182662E-04 -3.822531E-07 -2.000000E-03 -4.000000E-06 -1.798872E-03 -3.235939E-06 -1.446227E-03 -2.091573E-06 -1.026515E-03 -1.053733E-06 -3.091331E-04 -9.556328E-08 2.000000E-03 2.000000E-06 -1.796026E-03 -1.613093E-06 -1.419639E-03 -1.009421E-06 -9.284786E-04 -4.359755E-07 -6.113253E-04 -1.868621E-07 +1.447007E-04 +7.721849E-07 +1.582773E-04 +4.841114E-08 +1.981705E-04 +2.166687E-07 +9.135699E-04 +4.679599E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +1.030000E-04 +1.035735E-02 +3.119381E-05 +6.483551E-03 +1.164471E-05 +3.924334E-03 +6.047577E-06 +9.748673E-03 +2.956634E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.079655E-04 +9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 +1.000000E-03 +1.000000E-06 +8.623139E-04 +7.435852E-07 +6.153778E-04 +3.786899E-07 +3.095388E-04 +9.581428E-08 +0.000000E+00 +0.000000E+00 +1.900000E-02 +9.900000E-05 +7.385212E-03 +2.033270E-05 +6.336514E-03 +2.028060E-05 +3.967026E-03 +1.027239E-05 +1.066281E-02 +2.937591E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.000000E-03 +1.000000E-05 +1.316884E-03 +2.894217E-06 +2.095957E-03 +1.439521E-06 +1.013831E-04 +8.405300E-07 +2.404012E-03 +1.641294E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2203,174 +2363,14 @@ tally 1: 0.000000E+00 1.000000E-03 1.000000E-06 -8.755578E-04 -7.666014E-07 -6.499021E-04 -4.223727E-07 -3.646728E-04 -1.329863E-07 -3.044879E-04 -9.271290E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.000000E-03 -1.100000E-05 -7.911817E-04 -5.000480E-06 -3.670154E-03 -5.136246E-06 -7.963899E-04 -3.142130E-06 -2.757965E-03 -1.792319E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-03 -1.000000E-06 -9.128685E-04 -8.333290E-07 -7.499935E-04 -5.624902E-07 -5.324967E-04 -2.835528E-07 -3.068374E-04 -9.414918E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-03 -2.000000E-06 --3.575073E-05 -3.447056E-08 --9.482942E-04 -4.497282E-07 -4.906190E-05 -7.285661E-08 -6.159705E-04 -1.897125E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.000000E-03 -5.000000E-06 -1.728228E-03 -1.868156E-06 -1.372668E-04 -1.772598E-07 --7.147632E-04 -2.712801E-07 -1.225291E-03 -5.607755E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.044879E-04 -9.271290E-08 +-3.865739E-04 +1.494394E-07 +-2.758409E-04 +7.608820E-08 +4.354374E-04 +1.896058E-07 +5.871337E-04 +3.447260E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2402,11 +2402,11 @@ tally 1: 0.000000E+00 0.000000E+00 tally 2: -5.688123E-01 -6.473815E-02 -6.189326E-01 -7.665427E-02 -3.614785E+00 -2.614396E+00 -4.026586E+01 -3.243814E+02 +5.656887E-01 +6.401442E-02 +6.158976E-01 +7.588371E-02 +3.588479E+00 +2.575762E+00 +4.003041E+01 +3.205440E+02 diff --git a/tests/test_statepoint_batch/results_true.dat b/tests/test_statepoint_batch/results_true.dat index 3ebd5cfff0..dd5195ef0d 100644 --- a/tests/test_statepoint_batch/results_true.dat +++ b/tests/test_statepoint_batch/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.985054E-01 9.345354E-04 +3.003258E-01 3.388059E-03 diff --git a/tests/test_statepoint_interval/results_true.dat b/tests/test_statepoint_interval/results_true.dat index cb1493aba2..7b2fbf37f5 100644 --- a/tests/test_statepoint_interval/results_true.dat +++ b/tests/test_statepoint_interval/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.993693E-01 1.470880E-03 +2.943619E-01 3.309635E-03 diff --git a/tests/test_statepoint_restart/results_true.dat b/tests/test_statepoint_restart/results_true.dat index 8d848b4cf0..49afeb1d52 100644 --- a/tests/test_statepoint_restart/results_true.dat +++ b/tests/test_statepoint_restart/results_true.dat @@ -1,16 +1,16 @@ k-combined: -2.993693E-01 1.470880E-03 +2.943619E-01 3.309635E-03 tally 1: -1.300000E-02 -4.300000E-05 -5.553260E-03 -1.267186E-05 -2.953436E-03 -6.351136E-06 -2.295617E-03 -4.617429E-06 -6.420875E-03 -9.259556E-06 +1.100000E-02 +3.700000E-05 +1.307570E-03 +2.851451E-06 +1.564980E-03 +2.368303E-06 +3.138136E-03 +5.769887E-06 +7.719235E-03 +2.632583E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -19,6 +19,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.976389E-04 +8.858892E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -27,8 +29,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.816169E-04 +7.772484E-07 +1.000000E-03 +1.000000E-06 +8.782909E-04 +7.713950E-07 +6.570925E-04 +4.317705E-07 +3.763366E-04 +1.416293E-07 0.000000E+00 0.000000E+00 +7.000000E-03 +1.500000E-05 +3.445754E-03 +3.819507E-06 +2.124056E-03 +1.976201E-06 +1.542203E-03 +1.531669E-06 +4.135720E-03 +4.532612E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -37,240 +59,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.500000E-02 -5.100000E-05 -8.675993E-03 -1.761431E-05 -3.327517E-03 -4.194966E-06 -7.274324E-04 -2.158075E-06 -6.423659E-03 -1.003735E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.071818E-04 -9.436064E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.000000E-03 -1.000000E-05 -2.838403E-04 -8.774323E-07 --4.663243E-04 -9.976861E-07 -5.379858E-04 -2.458806E-07 -1.830193E-03 -1.871531E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.800000E-02 -7.200000E-05 -7.892468E-03 -1.531545E-05 -5.418392E-03 -6.620060E-06 -4.884861E-03 -5.600362E-06 -7.948555E-03 -1.365782E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.120582E-04 -2.773023E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.014657E-04 -3.617610E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-02 -1.020000E-04 -6.418727E-03 -9.985775E-06 -6.251711E-03 -1.053337E-05 -4.720285E-03 -7.809860E-06 -9.455548E-03 -2.200500E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.052208E-04 -1.831532E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.136748E-04 -3.765967E-07 -2.000000E-03 -4.000000E-06 -1.977646E-03 -3.911083E-06 -1.933313E-03 -3.737699E-06 -1.867746E-03 -3.488475E-06 -3.068374E-04 -9.414918E-08 -6.000000E-03 -1.400000E-05 -1.048233E-03 -1.572686E-06 -1.209182E-05 -5.233234E-09 -1.086944E-03 -4.015851E-07 -3.362867E-03 -3.082582E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007329E-04 -9.044026E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +5.874391E-04 +1.725424E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -279,18 +69,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.079655E-04 +9.484274E-08 +1.000000E-03 +1.000000E-06 +9.451745E-04 +8.933548E-07 +8.400323E-04 +7.056542E-07 +6.931788E-04 +4.804969E-07 0.000000E+00 0.000000E+00 3.000000E-03 3.000000E-06 -2.874586E-03 -2.757041E-06 -2.635561E-03 -2.337016E-06 -2.305139E-03 -1.846818E-06 -1.227985E-03 -5.657187E-07 +1.134842E-03 +1.040850E-06 +6.127525E-05 +3.988312E-07 +4.938488E-05 +2.738492E-07 +1.484493E-03 +9.722888E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -299,8 +99,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.068374E-04 -9.414918E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -309,28 +107,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.143635E-04 -3.774426E-07 -1.000000E-03 -1.000000E-06 -9.888336E-04 -9.777919E-07 -9.666878E-04 -9.344854E-07 -9.339333E-04 -8.722314E-07 0.000000E+00 0.000000E+00 -1.800000E-02 -6.600000E-05 -3.521497E-03 -1.124575E-05 --1.106505E-03 -1.298962E-06 -2.307061E-03 -1.995982E-06 -7.955988E-03 -1.333038E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -339,18 +117,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.204584E-04 -2.824254E-07 -1.000000E-03 -1.000000E-06 --2.015923E-04 -4.063947E-08 --4.390408E-04 -1.927568E-07 -2.819070E-04 -7.947154E-08 -3.007329E-04 -9.044026E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -361,16 +127,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.000000E-03 -2.300000E-05 -8.049890E-04 -1.664654E-06 -2.892684E-03 -4.445095E-06 -5.132099E-04 -7.081387E-07 -3.678767E-03 -3.207908E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -379,18 +135,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.136210E-04 -1.882762E-07 -1.000000E-03 -1.000000E-06 -3.974827E-04 -1.579925E-07 --2.630113E-04 -6.917494E-08 --4.392258E-04 -1.929193E-07 -3.007329E-04 -9.044026E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -401,16 +145,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.000000E-03 -9.000000E-06 -2.095603E-03 -4.046946E-06 -2.670798E-03 -2.492128E-06 -1.379100E-04 -2.471643E-06 -2.750651E-03 -2.153957E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -419,8 +153,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.044879E-04 -9.271290E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -429,8 +161,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.014657E-04 -3.617610E-07 +1.700000E-02 +7.100000E-05 +5.492922E-03 +1.013834E-05 +5.773309E-04 +3.561549E-06 +2.550048E-03 +3.841061E-06 +8.048523E-03 +1.583844E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -439,6 +179,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.915762E-04 +1.749886E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -459,158 +201,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.400000E-02 -4.200000E-05 -5.756515E-03 -9.296704E-06 -1.251623E-03 -5.182413E-06 -2.207579E-03 -5.475159E-06 -5.492134E-03 -6.869563E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.182662E-04 -3.822531E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.300000E-02 -1.310000E-04 -8.875791E-03 -3.047020E-05 -5.194493E-03 -1.122408E-05 -2.565521E-03 -5.889229E-06 -9.193064E-03 -2.295619E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.539123E-03 -8.532105E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.021986E-04 -8.139623E-07 -1.000000E-03 -1.000000E-06 -9.693968E-04 -9.397302E-07 -9.095953E-04 -8.273636E-07 -8.233334E-04 -6.778780E-07 -0.000000E+00 -0.000000E+00 -2.800000E-02 -1.820000E-04 -8.903131E-03 -2.397214E-05 -1.010587E-02 -2.531134E-05 -4.754028E-03 -9.649119E-06 -1.378015E-02 -4.259630E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.208028E-04 -2.826368E-07 -1.000000E-03 -1.000000E-06 --4.279762E-04 -1.831637E-07 --2.252545E-04 -5.073960E-08 -4.459901E-04 -1.989072E-07 -6.089759E-04 -3.708516E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 1.200000E-02 -4.000000E-05 -4.239853E-03 -1.158537E-05 -1.052249E-03 -2.609268E-06 -1.581467E-03 -5.643069E-07 -6.112773E-03 -1.209962E-05 +4.600000E-05 +9.302157E-04 +3.853850E-06 +1.874541E-03 +3.092623E-06 +-1.511552E-03 +4.053466E-06 +5.941986E-03 +9.853873E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -619,6 +219,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.186549E-03 +5.291648E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -627,110 +229,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.800000E-02 -2.980000E-04 -1.590359E-02 -8.465362E-05 -1.095039E-02 -3.846682E-05 -8.674652E-03 -2.116226E-05 -1.953871E-02 -7.808840E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.098660E-04 -1.860035E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.000000E-02 -2.100000E-04 -1.396274E-02 -5.377392E-05 -7.263833E-03 -1.550401E-05 -2.406305E-03 -2.774873E-06 -1.067173E-02 -2.834689E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.159705E-04 -1.897125E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.089759E-04 -3.708516E-07 +2.935668E-04 +8.618149E-08 1.000000E-03 1.000000E-06 --3.845548E-04 -1.478824E-07 --2.781765E-04 -7.738214E-08 -4.346600E-04 -1.889293E-07 +9.893707E-04 +9.788543E-07 +9.682814E-04 +9.375689E-07 +9.370683E-04 +8.780970E-07 0.000000E+00 0.000000E+00 -3.100000E-02 -2.010000E-04 -5.656932E-03 -1.902755E-05 -4.255795E-04 -5.923041E-06 --1.665451E-03 -3.618806E-06 -1.254348E-02 -3.367259E-05 +8.000000E-03 +2.000000E-05 +3.721382E-03 +4.736982E-06 +-1.037031E-04 +6.648392E-07 +-5.996856E-04 +9.642316E-07 +3.248622E-03 +4.063214E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -739,48 +259,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.089759E-04 -3.708516E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007329E-04 -9.044026E-08 -1.000000E-03 -1.000000E-06 -9.418397E-04 -8.870620E-07 -8.305930E-04 -6.898847E-07 -6.759159E-04 -4.568623E-07 -0.000000E+00 -0.000000E+00 -1.700000E-02 -1.070000E-04 -9.563321E-03 -3.797495E-05 -3.872248E-03 -6.913143E-06 -1.851726E-03 -2.042684E-06 -7.032800E-03 -1.543729E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.091331E-04 -9.556328E-08 +2.938723E-04 +8.636093E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -801,56 +281,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.800000E-02 -3.300000E-04 -1.666359E-02 -6.918668E-05 -5.166835E-03 -1.583235E-05 -6.193613E-03 -1.014626E-05 -1.654613E-02 -6.758065E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.218842E-03 -5.568551E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.222651E-03 -7.474483E-07 2.000000E-03 2.000000E-06 -1.859309E-03 -1.730661E-06 -1.595992E-03 -1.290291E-06 -1.243306E-03 -8.262391E-07 -0.000000E+00 -0.000000E+00 -3.200000E-02 -2.140000E-04 -1.125786E-02 -3.535152E-05 -6.340891E-03 -1.186849E-05 --6.739003E-04 -6.238152E-06 -1.194483E-02 -3.174072E-05 +1.502634E-03 +1.146555E-06 +7.198331E-04 +3.484978E-07 +-3.426513E-05 +1.342349E-07 +1.511030E-03 +1.198311E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -859,8 +299,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.528427E-03 -1.032143E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -869,28 +307,70 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.091331E-04 -9.556328E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.300000E-02 +3.700000E-05 +3.121167E-03 +2.465327E-06 +4.474559E-04 +1.522316E-06 +9.193982E-04 +3.247292E-06 +5.365660E-03 +6.567981E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.056044E-04 +1.834317E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.977039E-04 +8.862764E-08 1.000000E-03 1.000000E-06 -8.883829E-04 -7.892241E-07 -6.838361E-04 -4.676319E-07 -4.202586E-04 -1.766173E-07 +2.390376E-04 +5.713899E-08 +-4.142915E-04 +1.716375E-07 +-3.244105E-04 +1.052422E-07 0.000000E+00 0.000000E+00 -2.000000E-02 -1.060000E-04 -6.707526E-03 -2.735840E-05 -6.937679E-03 -1.338587E-05 -5.832553E-03 -1.828962E-05 -1.101850E-02 -3.215320E-05 +1.500000E-02 +5.500000E-05 +2.209492E-03 +2.545503E-06 +5.991182E-03 +1.290780E-05 +1.772063E-03 +2.006265E-06 +5.944487E-03 +1.042417E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -899,8 +379,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.105988E-04 -4.573243E-07 +3.079655E-04 +9.484274E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -909,308 +389,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.227694E-03 -9.417032E-07 -1.000000E-03 -1.000000E-06 -9.408116E-04 -8.851265E-07 -8.276898E-04 -6.850703E-07 -6.706258E-04 -4.497390E-07 -0.000000E+00 -0.000000E+00 -1.800000E-02 -7.800000E-05 -2.843265E-03 -6.035154E-06 -4.322434E-03 -7.469456E-06 -2.900345E-03 -4.663845E-06 -7.631460E-03 -1.236685E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007329E-04 -9.044026E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-02 -9.200000E-05 -6.856783E-03 -1.381342E-05 -2.931050E-03 -7.384807E-06 -1.856596E-03 -2.302567E-06 -1.130923E-02 -3.279819E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-03 -1.000000E-06 -2.509363E-04 -6.296901E-08 --4.055465E-04 -1.644679E-07 --3.369014E-04 -1.135025E-07 -6.182662E-04 -3.822531E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.091331E-04 -9.556328E-08 -2.900000E-02 -2.010000E-04 -1.040068E-02 -4.442598E-05 -7.909288E-03 -1.634388E-05 -2.600276E-03 -1.084582E-05 -1.160235E-02 -3.244276E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.227694E-03 -9.417032E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.091331E-04 -9.556328E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.091331E-04 -9.556328E-08 -2.900000E-02 -1.890000E-04 -3.796494E-03 -2.573465E-05 -5.901410E-03 -9.723225E-06 -2.069453E-03 -9.510548E-06 -1.438173E-02 -4.416319E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.136748E-04 -3.765967E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.400000E-02 -1.240000E-04 -6.672638E-03 -1.840846E-05 -4.370801E-03 -7.557992E-06 -4.585753E-03 -1.441383E-05 -1.162351E-02 -2.791423E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.089759E-04 -3.708516E-07 -1.000000E-03 -1.000000E-06 --8.175500E-04 -6.683879E-07 -5.025819E-04 -2.525886E-07 --1.397764E-04 -1.953744E-08 -3.071818E-04 -9.436064E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.700000E-02 -2.910000E-04 -8.304483E-03 -2.250088E-05 -7.798128E-03 -2.325505E-05 -6.917154E-03 -2.136255E-05 -1.649875E-02 -5.805120E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.071818E-04 -9.436064E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.500000E-02 -2.550000E-04 -1.934687E-03 -1.279246E-05 -1.742063E-03 -9.283511E-06 -5.580823E-03 -1.402955E-05 -1.465296E-02 -4.425100E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.535220E-03 -1.225842E-06 +1.190621E-03 +8.859279E-07 2.000000E-03 2.000000E-06 -1.954328E-03 -1.909945E-06 -1.864917E-03 -1.741066E-06 -1.735530E-03 -1.513893E-06 +1.908405E-03 +1.821879E-06 +1.732819E-03 +1.508498E-06 +1.487670E-03 +1.131430E-06 0.000000E+00 0.000000E+00 -3.100000E-02 -2.150000E-04 -8.788723E-03 -4.052825E-05 -7.277307E-03 -2.646372E-05 -4.235689E-03 -1.237842E-05 -1.375310E-02 -4.363256E-05 +4.000000E-03 +4.000000E-06 +3.379122E-03 +2.880429E-06 +2.320644E-03 +1.498759E-06 +1.119131E-03 +6.212863E-07 +1.494579E-03 +6.241237E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1219,8 +419,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.068374E-04 -9.414918E-08 +2.976389E-04 +8.858892E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1229,278 +429,148 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.143635E-04 -3.774426E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.100000E-02 +1.150000E-04 +5.280651E-03 +1.222273E-05 +5.235520E-03 +1.202448E-05 +5.064093E-03 +1.787892E-05 +1.071093E-02 +2.748613E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.954046E-04 +2.673852E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.600000E-02 +1.560000E-04 +6.314886E-03 +1.168542E-05 +6.676680E-04 +9.930437E-06 +-2.103247E-04 +2.815945E-07 +1.249410E-02 +3.501590E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.159310E-04 +3.793709E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 1.000000E-03 1.000000E-06 -9.752141E-04 -9.510426E-07 -9.265639E-04 -8.585207E-07 -8.558543E-04 -7.324865E-07 -0.000000E+00 -0.000000E+00 -2.000000E-02 -9.400000E-05 -5.446779E-03 -8.175340E-06 -2.952745E-03 -6.944505E-06 -9.137774E-04 -1.227091E-06 -7.662475E-03 -1.309219E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.225836E-03 -5.668425E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.800000E-02 -1.660000E-04 -7.579645E-03 -3.038397E-05 -6.894753E-03 -2.399109E-05 -5.371715E-03 -1.603319E-05 -1.344654E-02 -4.055142E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.091331E-04 -9.556328E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.400000E-02 -1.300000E-04 -4.257114E-03 -3.224130E-05 -8.813774E-03 -2.583867E-05 -4.664136E-03 -1.410529E-05 -1.287730E-02 -3.681324E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-03 -1.000000E-06 --6.367370E-04 -4.054341E-07 -1.081511E-04 -1.169666E-08 -3.097184E-04 -9.592546E-08 -6.182662E-04 -3.822531E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.400000E-02 -1.300000E-04 -1.378482E-02 -5.592497E-05 -9.034738E-03 -2.624250E-05 -5.658518E-03 -1.317424E-05 -1.068557E-02 -2.727026E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.091331E-04 -9.556328E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.182662E-04 -3.822531E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.200000E-02 -2.260000E-04 -6.941116E-03 -2.215550E-05 -6.749352E-03 -1.648121E-05 -5.910808E-03 -1.357613E-05 -1.528788E-02 -5.372220E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.136210E-04 -1.882762E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.900000E-02 -2.030000E-04 -4.508769E-03 -3.192756E-05 -4.194184E-03 -7.918516E-06 -2.186680E-03 -9.265062E-06 -1.406557E-02 -4.964272E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.518169E-03 -1.003675E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +9.514029E-04 +9.051675E-07 +8.577513E-04 +7.357373E-07 +7.258432E-04 +5.268483E-07 0.000000E+00 0.000000E+00 2.300000E-02 -1.410000E-04 -7.122769E-03 -1.478437E-05 -4.717800E-03 -1.137509E-05 -2.766174E-03 -2.862748E-06 -9.770364E-03 -2.547043E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007329E-04 -9.044026E-08 +1.650000E-04 +9.507197E-03 +3.773476E-05 +6.295609E-03 +2.127696E-05 +6.339840E-03 +1.601206E-05 +1.065253E-02 +3.447908E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1511,66 +581,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-02 -9.400000E-05 --2.546403E-03 -8.587879E-06 -3.329285E-04 -1.032543E-06 --6.526073E-04 -5.693572E-06 -7.947562E-03 -1.421771E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.091331E-04 -9.556328E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.273993E-04 -8.600695E-07 1.000000E-03 1.000000E-06 -9.887237E-04 -9.775745E-07 -9.663618E-04 -9.338551E-07 -9.332922E-04 -8.710343E-07 -0.000000E+00 -0.000000E+00 -1.000000E-02 -3.400000E-05 -2.083696E-03 -6.707681E-06 -2.664177E-03 -4.483757E-06 --3.543315E-04 -7.233059E-07 -3.654309E-03 -3.704263E-06 +-1.117213E-04 +1.248165E-08 +-4.812775E-04 +2.316281E-07 +1.640958E-04 +2.692743E-08 +5.871337E-04 +3.447260E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1579,8 +599,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.007329E-04 -9.044026E-08 +0.000000E+00 +0.000000E+00 +1.500000E-02 +6.300000E-05 +5.790211E-03 +1.210465E-05 +8.591246E-04 +1.950998E-06 +1.987991E-03 +4.703397E-06 +6.572185E-03 +9.479067E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.954079E-04 +3.545105E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1601,16 +641,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.700000E-02 -7.500000E-05 -7.751840E-03 -1.439369E-05 -5.032178E-03 -1.282123E-05 -5.077992E-03 -8.054934E-06 -7.339781E-03 -1.254543E-05 +2.700000E-02 +1.670000E-04 +1.789444E-02 +8.260005E-05 +1.049872E-02 +2.774537E-05 +5.665111E-03 +8.560197E-06 +1.100708E-02 +2.835296E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1619,18 +659,38 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.068374E-04 -9.414918E-08 +3.079655E-04 +9.484274E-08 1.000000E-03 1.000000E-06 --5.691245E-04 -3.239027E-07 --1.414588E-05 -2.001060E-10 -3.928343E-04 -1.543188E-07 -6.182662E-04 -3.822531E-07 +-2.856031E-04 +8.156913E-08 +-3.776463E-04 +1.426167E-07 +3.701637E-04 +1.370211E-07 +1.203065E-03 +7.240969E-07 +1.000000E-03 +1.000000E-06 +9.705482E-04 +9.419638E-07 +9.129457E-04 +8.334699E-07 +8.297310E-04 +6.884535E-07 +0.000000E+00 +0.000000E+00 +2.300000E-02 +1.230000E-04 +5.099566E-03 +9.143616E-06 +4.738751E-03 +7.819254E-06 +3.929250E-03 +6.884420E-06 +1.015650E-02 +2.236950E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1639,18 +699,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-02 -9.000000E-05 -4.292093E-03 -1.162566E-05 -1.911635E-03 -6.462803E-06 -7.144938E-04 -3.566046E-06 -8.845087E-03 -1.787718E-05 +2.977039E-04 +8.862764E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1659,8 +709,38 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.098660E-04 -1.860035E-07 +5.912708E-04 +1.748091E-07 +2.000000E-03 +2.000000E-06 +1.762035E-03 +1.552542E-06 +1.328812E-03 +8.839688E-07 +7.771806E-04 +3.049398E-07 +0.000000E+00 +0.000000E+00 +2.800000E-02 +1.780000E-04 +1.190615E-02 +4.434442E-05 +7.332993E-03 +2.337416E-05 +6.867008E-03 +1.321552E-05 +1.283876E-02 +3.527488E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.954079E-04 +3.545105E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1682,15 +762,15 @@ tally 1: 0.000000E+00 0.000000E+00 1.900000E-02 -7.900000E-05 -7.074706E-03 -1.339988E-05 -3.301242E-03 -3.627546E-06 -3.676901E-03 -5.025480E-06 -7.044700E-03 -1.063679E-05 +1.030000E-04 +3.892013E-03 +8.267134E-06 +3.385502E-03 +6.457947E-06 +4.380506E-03 +1.060881E-05 +7.130795E-03 +1.485135E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1699,8 +779,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.211332E-03 -9.095256E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1709,28 +787,30 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.068374E-04 -9.414918E-08 +0.000000E+00 +0.000000E+00 +8.816169E-04 +7.772484E-07 1.000000E-03 1.000000E-06 -9.924008E-04 -9.848594E-07 -9.772891E-04 -9.550940E-07 -9.548370E-04 -9.117137E-07 +9.951010E-04 +9.902260E-07 +9.853389E-04 +9.708928E-07 +9.707856E-04 +9.424246E-07 0.000000E+00 0.000000E+00 -1.200000E-02 -4.200000E-05 -1.994203E-03 -9.474986E-06 -4.797034E-03 -7.209992E-06 -7.461820E-04 -7.384105E-07 -5.186835E-03 -7.184830E-06 +2.900000E-02 +2.230000E-04 +6.260565E-03 +1.544092E-05 +7.061757E-03 +2.562385E-05 +3.982541E-03 +7.962565E-06 +1.486928E-02 +5.763902E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1739,8 +819,48 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.044879E-04 -9.271290E-08 +5.915762E-04 +1.749886E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.954079E-04 +3.545105E-07 +1.000000E-03 +1.000000E-06 +9.938157E-04 +9.876697E-07 +9.815046E-04 +9.633512E-07 +9.631807E-04 +9.277170E-07 +0.000000E+00 +0.000000E+00 +2.600000E-02 +1.460000E-04 +7.818547E-03 +3.176773E-05 +5.200193E-03 +1.419001E-05 +3.947828E-03 +8.417104E-06 +9.232714E-03 +1.900222E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.186919E-03 +5.294604E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1762,15 +882,15 @@ tally 1: 0.000000E+00 0.000000E+00 3.100000E-02 -2.070000E-04 -1.654377E-02 -5.944129E-05 -1.297328E-02 -4.003873E-05 -7.211206E-03 -1.234310E-05 -1.739706E-02 -6.870884E-05 +1.950000E-04 +1.338410E-02 +5.097757E-05 +6.794436E-03 +1.428226E-05 +3.939298E-03 +9.052046E-06 +1.250316E-02 +3.147176E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1779,118 +899,118 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.086475E-04 -4.561217E-07 +5.953428E-04 +1.772166E-07 +1.000000E-03 +1.000000E-06 +-5.747626E-05 +3.303520E-09 +-4.950447E-04 +2.450693E-07 +8.573970E-05 +7.351297E-09 +5.954079E-04 +3.545105E-07 +1.000000E-03 +1.000000E-06 +9.748367E-04 +9.503066E-07 +9.254598E-04 +8.564759E-07 +8.537292E-04 +7.288535E-07 +0.000000E+00 +0.000000E+00 +1.000000E-02 +2.600000E-05 +5.875085E-04 +4.563904E-07 +-9.207198E-05 +5.154496E-07 +3.674257E-05 +1.178281E-06 +5.048984E-03 +5.880390E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.079655E-04 +9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.952778E-04 +3.543557E-07 +1.000000E-03 +1.000000E-06 +9.362621E-04 +8.765867E-07 +8.148801E-04 +6.640295E-07 +6.473941E-04 +4.191191E-07 +0.000000E+00 +0.000000E+00 +3.100000E-02 +2.130000E-04 +1.472240E-02 +5.500913E-05 +1.077445E-02 +2.987369E-05 +6.729425E-03 +1.249089E-05 +1.363637E-02 +4.345511E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.182717E-03 +5.268981E-07 2.000000E-03 -4.000000E-06 --1.560749E-03 -2.435936E-06 -8.504262E-04 -7.232247E-07 --1.266477E-04 -1.603963E-08 -2.148895E-03 -2.355633E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.068374E-04 -9.414918E-08 -2.100000E-02 -9.900000E-05 -8.524679E-03 -1.919497E-05 -5.830060E-03 -1.195983E-05 -4.439133E-03 -4.446488E-06 -8.535001E-03 -1.828799E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.044879E-04 -9.271290E-08 -3.000000E-03 -5.000000E-06 -3.626106E-04 -7.014271E-07 -2.355907E-04 -3.451505E-07 -1.623342E-03 -1.603144E-06 -3.056692E-03 -2.433689E-06 -3.000000E-03 -5.000000E-06 -2.377207E-03 -2.907996E-06 -1.593038E-03 -1.320423E-06 -1.150471E-03 -8.926966E-07 -0.000000E+00 -0.000000E+00 -1.700000E-02 -6.300000E-05 -8.432455E-03 -1.718164E-05 -2.701919E-03 -5.016066E-06 -2.357556E-03 -3.687074E-06 -7.025349E-03 -1.109437E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.052208E-04 -1.831532E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.215453E-04 -8.492458E-07 +2.000000E-06 +-1.367978E-03 +9.381191E-07 +4.071787E-04 +9.316064E-08 +4.394728E-04 +1.064342E-07 +2.110881E-03 +1.737594E-06 1.000000E-03 1.000000E-06 -9.959310E-04 -9.918786E-07 -9.878179E-04 -9.757842E-07 -9.757102E-04 -9.520103E-07 -0.000000E+00 -0.000000E+00 -1.100000E-02 -4.900000E-05 -5.546222E-03 -1.139525E-05 -1.289839E-03 -2.123481E-06 -1.011230E-03 -1.426586E-06 -5.215344E-03 -8.818614E-06 +9.347357E-04 +8.737309E-07 +8.105963E-04 +6.570664E-07 +6.396651E-04 +4.091714E-07 +2.938723E-04 +8.636093E-08 +2.900000E-02 +1.950000E-04 +8.928267E-03 +2.594547E-05 +4.752762E-03 +1.522378E-05 +5.376579E-03 +1.088620E-05 +1.461149E-02 +4.367386E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1899,18 +1019,538 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.136210E-04 -1.882762E-07 +5.912057E-04 +1.747704E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.100000E-02 +2.030000E-04 +1.194795E-02 +4.198084E-05 +8.484089E-03 +1.631808E-05 +5.880364E-03 +1.308096E-05 +1.342551E-02 +3.842917E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.915762E-04 +1.749886E-07 1.000000E-03 1.000000E-06 -3.587682E-04 -1.287146E-07 --3.069281E-04 -9.420486E-08 --4.227055E-04 -1.786799E-07 -1.228132E-03 -9.505098E-07 +-5.881991E-05 +3.459782E-09 +-4.948103E-04 +2.448373E-07 +8.772111E-05 +7.694993E-09 +5.871337E-04 +3.447260E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +1.030000E-04 +3.010784E-03 +6.984061E-06 +5.243839E-03 +8.093978E-06 +-2.502286E-04 +2.564795E-06 +7.760559E-03 +1.654842E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 +1.000000E-03 +1.000000E-06 +9.333938E-04 +8.712239E-07 +8.068359E-04 +6.509841E-07 +6.328968E-04 +4.005583E-07 +0.000000E+00 +0.000000E+00 +4.400000E-02 +4.320000E-04 +1.141886E-02 +4.208707E-05 +9.213446E-03 +2.259305E-05 +9.177440E-03 +2.088782E-05 +2.116869E-02 +9.629049E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.501009E-03 +6.405023E-07 +1.000000E-03 +1.000000E-06 +5.882614E-04 +3.460515E-07 +1.907719E-05 +3.639390E-10 +-3.734703E-04 +1.394801E-07 +1.472277E-03 +9.506220E-07 +2.000000E-03 +2.000000E-06 +1.830192E-03 +1.679505E-06 +1.519257E-03 +1.189525E-06 +1.118506E-03 +7.332971E-07 +2.977039E-04 +8.862764E-08 +3.100000E-02 +2.250000E-04 +1.389831E-02 +5.927254E-05 +9.999959E-03 +3.379365E-05 +4.584291E-03 +1.665226E-05 +1.729188E-02 +6.078654E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.792523E-03 +8.900699E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.000000E-02 +3.880000E-04 +6.620484E-03 +3.751545E-05 +9.255367E-03 +1.963463E-05 +7.761524E-03 +1.694944E-05 +1.659048E-02 +7.200875E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +1.000000E-03 +1.000000E-06 +-5.273064E-04 +2.780520E-07 +-8.292201E-05 +6.876059E-09 +4.244131E-04 +1.801265E-07 +8.891501E-04 +4.407166E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.900000E-02 +1.970000E-04 +4.944370E-03 +2.340271E-05 +3.891346E-03 +1.137205E-05 +5.738303E-03 +9.169816E-06 +1.046961E-02 +2.353871E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.056694E-04 +1.834704E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.203065E-03 +7.240969E-07 +2.000000E-03 +2.000000E-06 +1.696621E-03 +1.449397E-06 +1.174096E-03 +7.548933E-07 +5.719051E-04 +3.184788E-07 +0.000000E+00 +0.000000E+00 +2.900000E-02 +1.990000E-04 +1.237546E-02 +3.198261E-05 +8.287792E-03 +2.747313E-05 +3.254969E-03 +8.653294E-06 +1.189702E-02 +3.303341E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.033083E-04 +2.720593E-07 +3.000000E-03 +3.000000E-06 +3.649225E-04 +1.756075E-06 +1.134112E-03 +8.940601E-07 +-9.392028E-04 +5.872882E-07 +1.484188E-03 +9.721094E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.600000E-02 +2.740000E-04 +9.407788E-03 +2.403566E-05 +4.480017E-03 +6.102099E-06 +5.941113E-03 +1.265337E-05 +1.462273E-02 +4.551799E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.056694E-04 +1.834704E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.807005E-04 +7.756334E-07 +1.000000E-03 +1.000000E-06 +8.905295E-04 +7.930427E-07 +6.895641E-04 +4.754986E-07 +4.297756E-04 +1.847070E-07 +0.000000E+00 +0.000000E+00 +2.600000E-02 +1.800000E-04 +1.225587E-02 +3.757196E-05 +7.670283E-03 +2.316758E-05 +5.282346E-03 +1.407031E-05 +1.162837E-02 +3.241151E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.874391E-04 +1.725424E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.000000E-02 +9.000000E-05 +5.358616E-03 +1.697599E-05 +3.060277E-03 +7.132281E-06 +2.485730E-03 +7.247489E-06 +9.248313E-03 +1.738407E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.991712E-04 +2.696131E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.954079E-04 +3.545105E-07 +1.000000E-03 +1.000000E-06 +9.816220E-04 +9.635817E-07 +9.453726E-04 +8.937294E-07 +8.922496E-04 +7.961093E-07 +0.000000E+00 +0.000000E+00 +2.300000E-02 +1.330000E-04 +1.081756E-02 +3.675127E-05 +2.530156E-03 +6.960955E-06 +-1.930911E-03 +4.910249E-06 +1.162826E-02 +3.490280E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.957101E-04 +4.402865E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +9.700000E-05 +1.046968E-02 +3.828445E-05 +6.704767E-03 +2.668260E-05 +2.659611E-03 +1.143518E-05 +1.099391E-02 +2.847330E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.655540E-03 +2.523801E-06 +3.000000E-03 +5.000000E-06 +2.960960E-03 +4.866206E-06 +2.884206E-03 +4.608867E-06 +2.772329E-03 +4.247272E-06 +2.976389E-04 +8.858892E-08 +1.900000E-02 +8.700000E-05 +5.469796E-03 +1.029265E-05 +4.923561E-04 +2.403244E-06 +2.579361E-03 +5.814745E-06 +8.693503E-03 +1.682274E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1922,15 +1562,15 @@ tally 1: 0.000000E+00 0.000000E+00 1.800000E-02 -8.600000E-05 -4.110494E-03 -1.042545E-05 -2.304908E-03 -4.602048E-06 -1.132856E-03 -1.141229E-06 -9.161625E-03 -2.374582E-05 +1.220000E-04 +6.860987E-03 +2.966806E-05 +4.229750E-03 +1.617998E-05 +1.295452E-03 +8.613003E-07 +7.815193E-03 +2.039363E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1939,6 +1579,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.935668E-04 +8.618149E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1959,72 +1601,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -6.000000E-03 -1.000000E-05 -7.480298E-04 -2.696134E-07 -1.010259E-03 -2.525363E-06 -2.404343E-03 -2.960244E-06 -5.213048E-03 -8.232507E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.007329E-04 -9.044026E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.000000E-03 -5.000000E-06 -7.647871E-04 -1.000926E-06 -8.702327E-05 -1.587846E-06 -1.118717E-03 -8.177417E-07 -2.147037E-03 -1.226733E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +2.000000E-02 +1.080000E-04 +8.640372E-03 +1.765553E-05 +5.688468E-03 +1.038555E-05 +2.447898E-03 +4.466055E-06 +8.949668E-03 +1.935056E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2033,6 +1619,38 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.977039E-04 +8.862764E-08 +1.000000E-03 +1.000000E-06 +-3.805163E-04 +1.447926E-07 +-2.828111E-04 +7.998210E-08 +4.330345E-04 +1.875189E-07 +2.121142E-03 +1.958355E-06 +1.000000E-03 +1.000000E-06 +9.260022E-04 +8.574800E-07 +7.862200E-04 +6.181419E-07 +5.960676E-04 +3.552966E-07 +2.938723E-04 +8.636093E-08 +1.700000E-02 +7.100000E-05 +3.566805E-03 +2.049908E-05 +5.418617E-03 +7.496014E-06 +2.451897E-03 +2.115374E-06 +7.760001E-03 +1.634548E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2041,6 +1659,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.977039E-04 +8.862764E-08 +1.000000E-03 +1.000000E-06 +-7.119580E-04 +5.068842E-07 +2.603263E-04 +6.776977E-08 +1.657364E-04 +2.746855E-08 +8.807005E-04 +7.756334E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2051,6 +1681,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.200000E-02 +3.400000E-05 +5.905081E-03 +1.535048E-05 +3.856089E-03 +8.589511E-06 +3.244585E-03 +5.882222E-06 +5.074321E-03 +5.793166E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2082,15 +1722,337 @@ tally 1: 0.000000E+00 0.000000E+00 1.600000E-02 -6.200000E-05 -9.988601E-03 -3.022832E-05 -6.166188E-03 -1.173350E-05 -3.417134E-03 -5.700622E-06 -7.649352E-03 -1.360625E-05 +5.400000E-05 +7.937805E-03 +1.353584E-05 +4.065443E-03 +5.658333E-06 +3.432476E-03 +3.530320E-06 +6.546903E-03 +9.343145E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.500000E-02 +1.390000E-04 +1.511834E-02 +5.459835E-05 +7.753447E-03 +2.291820E-05 +6.142979E-03 +1.359405E-05 +1.043467E-02 +2.526769E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.912057E-04 +1.747704E-07 +1.000000E-03 +1.000000E-06 +-1.098110E-04 +1.205846E-08 +-4.819123E-04 +2.322395E-07 +1.614061E-04 +2.605194E-08 +8.813115E-04 +4.316252E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 +1.200000E-02 +3.000000E-05 +4.798420E-03 +7.171924E-06 +1.417651E-03 +4.997963E-06 +2.131704E-03 +3.253030E-06 +7.754475E-03 +1.333333E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.938723E-04 +8.636093E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.484383E-03 +1.504224E-06 +3.000000E-03 +5.000000E-06 +2.760812E-03 +4.139104E-06 +2.336063E-03 +2.844690E-06 +1.817042E-03 +1.656152E-06 +0.000000E+00 +0.000000E+00 +1.900000E-02 +9.900000E-05 +7.244455E-03 +2.708286E-05 +4.601657E-03 +5.366244E-06 +-1.675270E-03 +3.867377E-06 +9.216755E-03 +2.272207E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.079655E-04 +9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.159310E-04 +3.793709E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.000000E-03 +1.800000E-05 +4.925975E-03 +6.260377E-06 +3.176938E-03 +2.631319E-06 +2.008278E-03 +1.484516E-06 +3.844641E-03 +4.075869E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.977039E-04 +8.862764E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.238964E-04 +8.535846E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-02 +3.400000E-05 +4.086838E-03 +5.900874E-06 +1.812330E-03 +3.716159E-06 +2.138941E-03 +3.006748E-06 +5.414129E-03 +8.079335E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.079655E-04 +9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.000000E-03 +8.000000E-06 +2.104495E-03 +2.749678E-06 +8.451272E-04 +9.362821E-07 +5.355137E-04 +3.419837E-07 +2.683856E-03 +1.512640E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +1.000000E-03 +1.000000E-06 +9.374310E-04 +8.787769E-07 +8.181653E-04 +6.693944E-07 +6.533352E-04 +4.268468E-07 +2.976389E-04 +8.858892E-08 +8.000000E-03 +1.600000E-05 +5.411154E-03 +8.076329E-06 +3.145940E-03 +4.212660E-06 +2.637510E-03 +3.210372E-06 +3.866944E-03 +3.257876E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.175489E-03 +1.381775E-06 +1.000000E-03 +1.000000E-06 +7.809681E-04 +6.099112E-07 +4.148668E-04 +1.721145E-07 +1.935089E-05 +3.744570E-10 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2099,8 +2061,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.136748E-04 -3.765967E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2123,14 +2083,108 @@ tally 1: 0.000000E+00 1.000000E-02 3.400000E-05 -3.889110E-03 -7.557500E-06 -1.015827E-04 -2.744147E-06 -7.497308E-04 -3.373523E-06 -4.583807E-03 -6.264955E-06 +4.840884E-03 +1.080853E-05 +3.402096E-03 +4.113972E-06 +1.374077E-03 +2.333511E-06 +4.754696E-03 +7.172310E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.079655E-04 +9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.900000E-02 +2.030000E-04 +6.527719E-03 +1.422798E-05 +1.560049E-03 +2.934829E-06 +1.548553E-03 +8.929308E-06 +1.108618E-02 +3.019578E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.174573E-03 +8.619943E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.000000E-03 +8.000000E-06 +1.520286E-03 +4.076900E-06 +2.191143E-03 +3.717004E-06 +1.161623E-03 +3.726099E-06 +3.570376E-03 +5.251427E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2139,8 +2193,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.052208E-04 -1.831532E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2149,28 +2201,136 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.182662E-04 -3.822531E-07 -2.000000E-03 -4.000000E-06 -1.798872E-03 -3.235939E-06 -1.446227E-03 -2.091573E-06 -1.026515E-03 -1.053733E-06 -3.091331E-04 -9.556328E-08 2.000000E-03 2.000000E-06 -1.796026E-03 -1.613093E-06 -1.419639E-03 -1.009421E-06 -9.284786E-04 -4.359755E-07 -6.113253E-04 -1.868621E-07 +1.447007E-04 +7.721849E-07 +1.582773E-04 +4.841114E-08 +1.981705E-04 +2.166687E-07 +9.135699E-04 +4.679599E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +1.030000E-04 +1.035735E-02 +3.119381E-05 +6.483551E-03 +1.164471E-05 +3.924334E-03 +6.047577E-06 +9.748673E-03 +2.956634E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.079655E-04 +9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 +1.000000E-03 +1.000000E-06 +8.623139E-04 +7.435852E-07 +6.153778E-04 +3.786899E-07 +3.095388E-04 +9.581428E-08 +0.000000E+00 +0.000000E+00 +1.900000E-02 +9.900000E-05 +7.385212E-03 +2.033270E-05 +6.336514E-03 +2.028060E-05 +3.967026E-03 +1.027239E-05 +1.066281E-02 +2.937591E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.000000E-03 +1.000000E-05 +1.316884E-03 +2.894217E-06 +2.095957E-03 +1.439521E-06 +1.013831E-04 +8.405300E-07 +2.404012E-03 +1.641294E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2203,174 +2363,14 @@ tally 1: 0.000000E+00 1.000000E-03 1.000000E-06 -8.755578E-04 -7.666014E-07 -6.499021E-04 -4.223727E-07 -3.646728E-04 -1.329863E-07 -3.044879E-04 -9.271290E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.000000E-03 -1.100000E-05 -7.911817E-04 -5.000480E-06 -3.670154E-03 -5.136246E-06 -7.963899E-04 -3.142130E-06 -2.757965E-03 -1.792319E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-03 -1.000000E-06 -9.128685E-04 -8.333290E-07 -7.499935E-04 -5.624902E-07 -5.324967E-04 -2.835528E-07 -3.068374E-04 -9.414918E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-03 -2.000000E-06 --3.575073E-05 -3.447056E-08 --9.482942E-04 -4.497282E-07 -4.906190E-05 -7.285661E-08 -6.159705E-04 -1.897125E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.000000E-03 -5.000000E-06 -1.728228E-03 -1.868156E-06 -1.372668E-04 -1.772598E-07 --7.147632E-04 -2.712801E-07 -1.225291E-03 -5.607755E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.044879E-04 -9.271290E-08 +-3.865739E-04 +1.494394E-07 +-2.758409E-04 +7.608820E-08 +4.354374E-04 +1.896058E-07 +5.871337E-04 +3.447260E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2402,11 +2402,11 @@ tally 1: 0.000000E+00 0.000000E+00 tally 2: -5.688123E-01 -6.473815E-02 -6.189326E-01 -7.665427E-02 -3.614785E+00 -2.614396E+00 -4.026586E+01 -3.243814E+02 +5.656887E-01 +6.401442E-02 +6.158976E-01 +7.588371E-02 +3.588479E+00 +2.575762E+00 +4.003041E+01 +3.205440E+02 diff --git a/tests/test_statepoint_sourcesep/results_true.dat b/tests/test_statepoint_sourcesep/results_true.dat index cb1493aba2..7b2fbf37f5 100644 --- a/tests/test_statepoint_sourcesep/results_true.dat +++ b/tests/test_statepoint_sourcesep/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.993693E-01 1.470880E-03 +2.943619E-01 3.309635E-03 diff --git a/tests/test_survival_biasing/results_true.dat b/tests/test_survival_biasing/results_true.dat index 904a2ef7ec..e44ec289a7 100644 --- a/tests/test_survival_biasing/results_true.dat +++ b/tests/test_survival_biasing/results_true.dat @@ -1,20 +1,20 @@ k-combined: -9.939120E-01 9.319846E-03 +9.686215E-01 1.511499E-02 tally 1: -4.354779E+01 -3.793738E+02 -1.814974E+01 -6.591525E+01 -2.217235E+00 -9.837360E-01 -1.919728E+00 -7.373585E-01 -4.971723E+00 -4.945321E+00 -3.485412E-02 -2.430294E-04 -3.718202E+02 -2.766078E+04 +4.243782E+01 +3.604528E+02 +1.770205E+01 +6.273029E+01 +2.176094E+00 +9.477949E-01 +1.881775E+00 +7.087350E-01 +4.868971E+00 +4.744828E+00 +3.400887E-02 +2.314715E-04 +3.644408E+02 +2.658287E+04 tally 2: -1.814974E+01 -6.591525E+01 +1.770205E+01 +6.273029E+01 diff --git a/tests/test_tallies/results_true.dat b/tests/test_tallies/results_true.dat index e5ec97453e..4ee2177b89 100644 --- a/tests/test_tallies/results_true.dat +++ b/tests/test_tallies/results_true.dat @@ -1 +1 @@ -4622766eb676b86e58307ae9c6af24f15427243f49d1f16e061854df0c389b36ba1ed83f8c8d769df0cb1c25a3d66d0119e32f730df145f5590c0beea0f4cc6e \ No newline at end of file +80bb207ab79131ff264a205703fcc798e3353dbead81e39dadf262979d6d6ad786123588e330c8d0bccddbcb7b7ce9af8447c73a317174019977d2392edf31f6 \ No newline at end of file diff --git a/tests/test_tally_aggregation/results_true.dat b/tests/test_tally_aggregation/results_true.dat index 572d85efaf..f5efc19347 100644 --- a/tests/test_tally_aggregation/results_true.dat +++ b/tests/test_tally_aggregation/results_true.dat @@ -1 +1 @@ -bb3d417db2e127ac0307ebdbde43f0483613df75c7fd9cb85543ec8047d99c69926cb2299a09b575a3dbaaa74fd197aa685ac005a3fc949e2413741870dd8a68 \ No newline at end of file +0c46f4198850c6bedcd3294fbbed9a6814568344f39d389f0b05aa0198bf4bb8a8bac4c6aa698bf66879c3037d1352f2cf6d8dff479d5b64be41fd88d93d3a04 \ No newline at end of file diff --git a/tests/test_tally_assumesep/results_true.dat b/tests/test_tally_assumesep/results_true.dat index b99a54daaa..e8ff199a05 100644 --- a/tests/test_tally_assumesep/results_true.dat +++ b/tests/test_tally_assumesep/results_true.dat @@ -1,11 +1,11 @@ k-combined: -1.102447E+00 7.056170E-03 +9.581523E-01 4.261823E-02 tally 1: -1.560445E+01 -4.918297E+01 +1.529084E+01 +4.769011E+01 tally 2: -3.014547E+00 -1.838255E+00 +3.198905E+00 +2.114129E+00 tally 3: -4.466613E+01 -4.017825E+02 +4.510603E+01 +4.183089E+02 diff --git a/tests/test_tally_nuclides/results_true.dat b/tests/test_tally_nuclides/results_true.dat index ae66471ef9..36250aba74 100644 --- a/tests/test_tally_nuclides/results_true.dat +++ b/tests/test_tally_nuclides/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.404984E-01 5.010334E-02 +9.752414E-01 4.425137E-02 tally 1: -6.716608E+00 -9.111797E+00 -1.520164E+00 -4.654833E-01 -1.475303E+00 -4.381727E-01 -5.196444E+00 -5.459040E+00 -6.716608E+00 -9.111797E+00 -1.520164E+00 -4.654833E-01 -1.475303E+00 -4.381727E-01 -5.196444E+00 -5.459040E+00 +6.903183E+00 +9.661095E+00 +1.569337E+00 +4.971849E-01 +1.521894E+00 +4.673221E-01 +5.333846E+00 +5.778631E+00 +6.903183E+00 +9.661095E+00 +1.569337E+00 +4.971849E-01 +1.521894E+00 +4.673221E-01 +5.333846E+00 +5.778631E+00 tally 2: -6.716608E+00 -9.111797E+00 -1.520164E+00 -4.654833E-01 -1.475303E+00 -4.381727E-01 -5.196444E+00 -5.459040E+00 +6.903183E+00 +9.661095E+00 +1.569337E+00 +4.971849E-01 +1.521894E+00 +4.673221E-01 +5.333846E+00 +5.778631E+00 diff --git a/tests/test_tally_slice_merge/results_true.dat b/tests/test_tally_slice_merge/results_true.dat index b5b5e322cf..ed04152d48 100644 --- a/tests/test_tally_slice_merge/results_true.dat +++ b/tests/test_tally_slice_merge/results_true.dat @@ -1,36 +1,36 @@ energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 21 U-235 fission 7.75e-02 6.68e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 21 U-235 nu-fission 1.89e-01 1.63e-02 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 21 U-238 fission 1.09e-07 9.57e-09 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 21 U-238 nu-fission 2.71e-07 2.39e-08 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 6.25e-07 2.00e+01 21 U-235 fission 1.92e-02 1.23e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 6.25e-07 2.00e+01 21 U-235 nu-fission 4.69e-02 2.99e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 6.25e-07 2.00e+01 21 U-238 fission 1.22e-02 1.16e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 6.25e-07 2.00e+01 21 U-238 nu-fission 3.41e-02 3.39e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 27 U-235 fission 8.32e-02 1.82e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 27 U-235 nu-fission 2.03e-01 4.44e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 27 U-238 fission 1.17e-07 2.95e-09 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 27 U-238 nu-fission 2.93e-07 7.36e-09 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 6.25e-07 2.00e+01 27 U-235 fission 2.60e-02 1.70e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 6.25e-07 2.00e+01 27 U-235 nu-fission 6.38e-02 4.14e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 6.25e-07 2.00e+01 27 U-238 fission 1.47e-02 6.22e-04 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 6.25e-07 2.00e+01 27 U-238 nu-fission 4.12e-02 1.97e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 21 U-235 fission 7.75e-02 6.68e-03 -1 0.00e+00 6.25e-07 21 U-235 nu-fission 1.89e-01 1.63e-02 -2 0.00e+00 6.25e-07 21 U-238 fission 1.09e-07 9.57e-09 -3 0.00e+00 6.25e-07 21 U-238 nu-fission 2.71e-07 2.39e-08 -4 0.00e+00 6.25e-07 27 U-235 fission 8.32e-02 1.82e-03 -5 0.00e+00 6.25e-07 27 U-235 nu-fission 2.03e-01 4.44e-03 -6 0.00e+00 6.25e-07 27 U-238 fission 1.17e-07 2.95e-09 -7 0.00e+00 6.25e-07 27 U-238 nu-fission 2.93e-07 7.36e-09 -8 6.25e-07 2.00e+01 21 U-235 fission 1.92e-02 1.23e-03 -9 6.25e-07 2.00e+01 21 U-235 nu-fission 4.69e-02 2.99e-03 -10 6.25e-07 2.00e+01 21 U-238 fission 1.22e-02 1.16e-03 -11 6.25e-07 2.00e+01 21 U-238 nu-fission 3.41e-02 3.39e-03 -12 6.25e-07 2.00e+01 27 U-235 fission 2.60e-02 1.70e-03 -13 6.25e-07 2.00e+01 27 U-235 nu-fission 6.38e-02 4.14e-03 -14 6.25e-07 2.00e+01 27 U-238 fission 1.47e-02 6.22e-04 -15 6.25e-07 2.00e+01 27 U-238 nu-fission 4.12e-02 1.97e-03 sum(distribcell) energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 0.00e+00 6.25e-07 21 U-235 fission 1.08e-01 7.94e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. +0 0.00e+00 6.25e-07 21 U-235 nu-fission 2.64e-01 1.94e-02 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. +0 0.00e+00 6.25e-07 21 U-238 fission 1.51e-07 1.00e-08 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. +0 0.00e+00 6.25e-07 21 U-238 nu-fission 3.76e-07 2.50e-08 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. +0 6.25e-07 2.00e+01 21 U-235 fission 3.12e-02 2.56e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. +0 6.25e-07 2.00e+01 21 U-235 nu-fission 7.65e-02 6.24e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. +0 6.25e-07 2.00e+01 21 U-238 fission 2.00e-02 1.30e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. +0 6.25e-07 2.00e+01 21 U-238 nu-fission 5.56e-02 3.78e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. +0 0.00e+00 6.25e-07 27 U-235 fission 4.43e-02 7.21e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. +0 0.00e+00 6.25e-07 27 U-235 nu-fission 1.08e-01 1.76e-02 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. +0 0.00e+00 6.25e-07 27 U-238 fission 6.14e-08 9.64e-09 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. +0 0.00e+00 6.25e-07 27 U-238 nu-fission 1.53e-07 2.40e-08 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. +0 6.25e-07 2.00e+01 27 U-235 fission 1.39e-02 1.06e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. +0 6.25e-07 2.00e+01 27 U-235 nu-fission 3.40e-02 2.61e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. +0 6.25e-07 2.00e+01 27 U-238 fission 9.72e-03 1.21e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. +0 6.25e-07 2.00e+01 27 U-238 nu-fission 2.71e-02 3.80e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. +0 0.00e+00 6.25e-07 21 U-235 fission 1.08e-01 7.94e-03 +1 0.00e+00 6.25e-07 21 U-235 nu-fission 2.64e-01 1.94e-02 +2 0.00e+00 6.25e-07 21 U-238 fission 1.51e-07 1.00e-08 +3 0.00e+00 6.25e-07 21 U-238 nu-fission 3.76e-07 2.50e-08 +4 0.00e+00 6.25e-07 27 U-235 fission 4.43e-02 7.21e-03 +5 0.00e+00 6.25e-07 27 U-235 nu-fission 1.08e-01 1.76e-02 +6 0.00e+00 6.25e-07 27 U-238 fission 6.14e-08 9.64e-09 +7 0.00e+00 6.25e-07 27 U-238 nu-fission 1.53e-07 2.40e-08 +8 6.25e-07 2.00e+01 21 U-235 fission 3.12e-02 2.56e-03 +9 6.25e-07 2.00e+01 21 U-235 nu-fission 7.65e-02 6.24e-03 +10 6.25e-07 2.00e+01 21 U-238 fission 2.00e-02 1.30e-03 +11 6.25e-07 2.00e+01 21 U-238 nu-fission 5.56e-02 3.78e-03 +12 6.25e-07 2.00e+01 27 U-235 fission 1.39e-02 1.06e-03 +13 6.25e-07 2.00e+01 27 U-235 nu-fission 3.40e-02 2.61e-03 +14 6.25e-07 2.00e+01 27 U-238 fission 9.72e-03 1.21e-03 +15 6.25e-07 2.00e+01 27 U-238 nu-fission 2.71e-02 3.80e-03 sum(distribcell) energy low [MeV] energy high [MeV] nuclide score mean std. dev. 0 (0, 100, 2000, 30000) 0.00e+00 6.25e-07 U-235 fission 0.00e+00 0.00e+00 1 (0, 100, 2000, 30000) 0.00e+00 6.25e-07 U-235 nu-fission 0.00e+00 0.00e+00 2 (0, 100, 2000, 30000) 0.00e+00 6.25e-07 U-238 fission 0.00e+00 0.00e+00 diff --git a/tests/test_trace/results_true.dat b/tests/test_trace/results_true.dat index cb1493aba2..7b2fbf37f5 100644 --- a/tests/test_trace/results_true.dat +++ b/tests/test_trace/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.993693E-01 1.470880E-03 +2.943619E-01 3.309635E-03 diff --git a/tests/test_translation/results_true.dat b/tests/test_translation/results_true.dat index cb1493aba2..7b2fbf37f5 100644 --- a/tests/test_translation/results_true.dat +++ b/tests/test_translation/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.993693E-01 1.470880E-03 +2.943619E-01 3.309635E-03 diff --git a/tests/test_trigger_batch_interval/results_true.dat b/tests/test_trigger_batch_interval/results_true.dat index 3c9bfa98e8..af6eea6238 100644 --- a/tests/test_trigger_batch_interval/results_true.dat +++ b/tests/test_trigger_batch_interval/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.828074E-01 6.099782E-03 +9.722624E-01 1.010453E-02 tally 1: -1.388719E+01 -1.930049E+01 -3.161546E+00 -1.000275E+00 -3.068293E+00 -9.421307E-01 -1.072564E+01 -1.151347E+01 -1.388719E+01 -1.930049E+01 -3.161546E+00 -1.000275E+00 -3.068293E+00 -9.421307E-01 -1.072564E+01 -1.151347E+01 +1.392936E+01 +1.941888E+01 +3.159556E+00 +9.989777E-01 +3.063616E+00 +9.391667E-01 +1.076980E+01 +1.160931E+01 +1.392936E+01 +1.941888E+01 +3.159556E+00 +9.989777E-01 +3.063616E+00 +9.391667E-01 +1.076980E+01 +1.160931E+01 tally 2: -1.388719E+01 -1.930049E+01 -3.161546E+00 -1.000275E+00 -3.068293E+00 -9.421307E-01 -1.072564E+01 -1.151347E+01 +1.392936E+01 +1.941888E+01 +3.159556E+00 +9.989777E-01 +3.063616E+00 +9.391667E-01 +1.076980E+01 +1.160931E+01 diff --git a/tests/test_trigger_no_batch_interval/results_true.dat b/tests/test_trigger_no_batch_interval/results_true.dat index 3c9bfa98e8..af6eea6238 100644 --- a/tests/test_trigger_no_batch_interval/results_true.dat +++ b/tests/test_trigger_no_batch_interval/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.828074E-01 6.099782E-03 +9.722624E-01 1.010453E-02 tally 1: -1.388719E+01 -1.930049E+01 -3.161546E+00 -1.000275E+00 -3.068293E+00 -9.421307E-01 -1.072564E+01 -1.151347E+01 -1.388719E+01 -1.930049E+01 -3.161546E+00 -1.000275E+00 -3.068293E+00 -9.421307E-01 -1.072564E+01 -1.151347E+01 +1.392936E+01 +1.941888E+01 +3.159556E+00 +9.989777E-01 +3.063616E+00 +9.391667E-01 +1.076980E+01 +1.160931E+01 +1.392936E+01 +1.941888E+01 +3.159556E+00 +9.989777E-01 +3.063616E+00 +9.391667E-01 +1.076980E+01 +1.160931E+01 tally 2: -1.388719E+01 -1.930049E+01 -3.161546E+00 -1.000275E+00 -3.068293E+00 -9.421307E-01 -1.072564E+01 -1.151347E+01 +1.392936E+01 +1.941888E+01 +3.159556E+00 +9.989777E-01 +3.063616E+00 +9.391667E-01 +1.076980E+01 +1.160931E+01 diff --git a/tests/test_trigger_no_status/results_true.dat b/tests/test_trigger_no_status/results_true.dat index 8e12ff5f11..c7f1b407a9 100644 --- a/tests/test_trigger_no_status/results_true.dat +++ b/tests/test_trigger_no_status/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.917430E-01 1.687838E-02 +9.733783E-01 1.678094E-02 tally 1: -6.979642E+00 -9.753201E+00 -1.591841E+00 -5.071926E-01 -1.545245E+00 -4.779221E-01 -5.387801E+00 -5.812351E+00 -6.979642E+00 -9.753201E+00 -1.591841E+00 -5.071926E-01 -1.545245E+00 -4.779221E-01 -5.387801E+00 -5.812351E+00 +6.901811E+00 +9.536643E+00 +1.572259E+00 +4.947922E-01 +1.527087E+00 +4.667459E-01 +5.329553E+00 +5.686973E+00 +6.901811E+00 +9.536643E+00 +1.572259E+00 +4.947922E-01 +1.527087E+00 +4.667459E-01 +5.329553E+00 +5.686973E+00 tally 2: -6.979642E+00 -9.753201E+00 -1.591841E+00 -5.071926E-01 -1.545245E+00 -4.779221E-01 -5.387801E+00 -5.812351E+00 +6.901811E+00 +9.536643E+00 +1.572259E+00 +4.947922E-01 +1.527087E+00 +4.667459E-01 +5.329553E+00 +5.686973E+00 diff --git a/tests/test_trigger_tallies/results_true.dat b/tests/test_trigger_tallies/results_true.dat index 3c9bfa98e8..af6eea6238 100644 --- a/tests/test_trigger_tallies/results_true.dat +++ b/tests/test_trigger_tallies/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.828074E-01 6.099782E-03 +9.722624E-01 1.010453E-02 tally 1: -1.388719E+01 -1.930049E+01 -3.161546E+00 -1.000275E+00 -3.068293E+00 -9.421307E-01 -1.072564E+01 -1.151347E+01 -1.388719E+01 -1.930049E+01 -3.161546E+00 -1.000275E+00 -3.068293E+00 -9.421307E-01 -1.072564E+01 -1.151347E+01 +1.392936E+01 +1.941888E+01 +3.159556E+00 +9.989777E-01 +3.063616E+00 +9.391667E-01 +1.076980E+01 +1.160931E+01 +1.392936E+01 +1.941888E+01 +3.159556E+00 +9.989777E-01 +3.063616E+00 +9.391667E-01 +1.076980E+01 +1.160931E+01 tally 2: -1.388719E+01 -1.930049E+01 -3.161546E+00 -1.000275E+00 -3.068293E+00 -9.421307E-01 -1.072564E+01 -1.151347E+01 +1.392936E+01 +1.941888E+01 +3.159556E+00 +9.989777E-01 +3.063616E+00 +9.391667E-01 +1.076980E+01 +1.160931E+01 diff --git a/tests/test_uniform_fs/results_true.dat b/tests/test_uniform_fs/results_true.dat index dbde84bd88..d27d63f565 100644 --- a/tests/test_uniform_fs/results_true.dat +++ b/tests/test_uniform_fs/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.754438E-01 1.896941E-03 +3.634132E-01 6.507584E-03 diff --git a/tests/test_union_energy_grids/results_true.dat b/tests/test_union_energy_grids/results_true.dat index 04c1a2b4cd..0a607592c8 100644 --- a/tests/test_union_energy_grids/results_true.dat +++ b/tests/test_union_energy_grids/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.195980E-01 5.629840E-03 +3.330789E-01 2.216495E-03 diff --git a/tests/test_universe/results_true.dat b/tests/test_universe/results_true.dat index cb1493aba2..7b2fbf37f5 100644 --- a/tests/test_universe/results_true.dat +++ b/tests/test_universe/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.993693E-01 1.470880E-03 +2.943619E-01 3.309635E-03 diff --git a/tests/test_void/results_true.dat b/tests/test_void/results_true.dat index fa9f4eb7a0..48be2778a4 100644 --- a/tests/test_void/results_true.dat +++ b/tests/test_void/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.015355E+00 3.427659E-02 +1.062505E+00 2.674375E-02 From 3f3a1aa125c7696681dbc29e57c0591b3709fae1 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 7 Mar 2016 12:29:36 -0500 Subject: [PATCH 355/650] Cleaning up of code so that nuclide and macroxs use scattdata and use it efficiently and sensically. Also found a few trivially small bugs along the way (mu values being off slightly in calculation of f(mu), for example --- src/input_xml.F90 | 2 +- src/macroxs_header.F90 | 351 ++++++++-------------- src/mgxs_data.F90 | 12 +- src/nuclide_header.F90 | 622 ++++++++++++++++++++------------------- src/scattdata_header.F90 | 291 ++++++++++++------ 5 files changed, 633 insertions(+), 645 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 03ef8dcbc4..b89b8807f3 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -170,7 +170,7 @@ contains call get_node_value(doc, "max_order", max_order) else ! Set to default of largest int, which means to use whatever is contained in library - max_order = huge(0) + max_order = huge(0) - 1 end if else max_order = 0 diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index 233832d6f0..d32cde96e3 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -1,6 +1,7 @@ module macroxs_header use constants, only: MAX_FILE_LEN, ZERO, ONE, TWO, PI + use error, only: fatal_error use list_header, only: ListInt use material_header, only: material use math, only: calc_pn, calc_rn, expand_harmonic, find_angle @@ -32,8 +33,7 @@ module macroxs_header abstract interface subroutine macroxs_init_(this, mat, nuclides, groups, get_kfiss, get_fiss, & - max_order, scatt_type, legendre_mu_points, & - error_code, error_text) + max_order, scatt_type) import MacroXS, Material, NuclideMGContainer, MAX_LINE_LEN class(MacroXS), intent(inout) :: this ! The MacroXS to initialize type(Material), pointer, intent(in) :: mat ! base material @@ -43,9 +43,6 @@ module macroxs_header logical, intent(in) :: get_fiss ! Should we get fiss data? integer, intent(in) :: max_order ! Maximum requested order integer, intent(in) :: scatt_type ! Legendre or Tabular Scatt? - integer, intent(in) :: legendre_mu_points ! Treat as Leg or Tabular? - integer, intent(inout) :: error_code ! Code signifying error - character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print end subroutine macroxs_init_ function macroxs_get_xs_(this, g, xstype, gout, uvw) result(xs) @@ -94,7 +91,6 @@ module macroxs_header real(8), allocatable :: nu_fission(:) ! nu-fission real(8), allocatable :: k_fission(:) ! kappa-fission real(8), allocatable :: fission(:) ! fission x/s - real(8), allocatable :: scattxs(:) ! scattering xs real(8), allocatable :: chi(:,:) ! fission spectra contains @@ -114,7 +110,6 @@ module macroxs_header real(8), allocatable :: k_fission(:,:,:) ! kappa-fission real(8), allocatable :: fission(:,:,:) ! fission x/s real(8), allocatable :: chi(:,:,:,:) ! fission spectra - real(8), allocatable :: scattxs(:,:,:) ! scattering xs real(8), allocatable :: polar(:) ! polar angles real(8), allocatable :: azimuthal(:) ! azimuthal angles @@ -141,7 +136,7 @@ contains !=============================================================================== subroutine macroxsiso_init(this, mat, nuclides, groups, get_kfiss, get_fiss, & - max_order, scatt_type, legendre_mu_points, error_code, error_text) + max_order, scatt_type) class(MacroXSIso), intent(inout) :: this ! The MacroXS to initialize type(Material), pointer, intent(in) :: mat ! base material type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from @@ -150,9 +145,6 @@ contains logical, intent(in) :: get_fiss ! Should we get fiss data? integer, intent(in) :: max_order ! Maximum requested order integer, intent(in) :: scatt_type ! How is data presented - integer, intent(in) :: legendre_mu_points ! Treat as Leg or Tabular? - integer, intent(inout) :: error_code ! Code signifying error - character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print integer :: i ! loop index over nuclides integer :: gin, gout ! group indices @@ -161,22 +153,15 @@ contains real(8) :: norm integer :: mat_max_order, order, l real(8), allocatable :: temp_mult(:,:) - real(8), allocatable :: temp_energy(:,:) real(8), allocatable :: scatt_coeffs(:,:,:) - ! Initialize error data - error_code = 0 - error_text = '' - ! If we have tabular only data, then make sure all datasets have same size if (scatt_type == ANGLE_HISTOGRAM) then ! Check all scattering data of same size order = nuclides(mat % nuclide(1)) % obj % order do i = 2, mat % n_nuclides if (order /= nuclides(mat % nuclide(i)) % obj % order) then - error_code = 1 - error_text = "All Histogram Scattering Entries Must Be Same Length!" - return + call fatal_error("All Histogram Scattering Entries Must Be Same Length!") end if end do ! Ok, got our order, store it @@ -192,8 +177,7 @@ contains order = nuclides(mat % nuclide(1)) % obj % order do i = 2, mat % n_nuclides if (order /= nuclides(mat % nuclide(i)) % obj % order) then - error_code = 1 - error_text = "All Tabular Scattering Entries Must Be Same Length!" + call fatal_error("All Tabular Scattering Entries Must Be Same Length!") return end if end do @@ -201,7 +185,7 @@ contains this % order = order ! Allocate stuff for later - allocate(scatt_coeffs(order, groups, groups)) + allocate(scatt_coeffs(this % order, groups, groups)) scatt_coeffs = ZERO allocate(ScattDataTabular :: this % scatter) @@ -217,17 +201,13 @@ contains ! Now need to compare this material maximum scattering order with ! the problem wide max scatt order and use whichever is lower - order = min(mat_max_order, max_order) - this % order = order + 1 + order = min(mat_max_order, max_order) + 1 + this % order = order ! Now we can allocate our scatt_coeffs object accordingly - allocate(scatt_coeffs(order + 1, groups, groups)) + allocate(scatt_coeffs(this % order, groups, groups)) scatt_coeffs = ZERO - if (legendre_mu_points == 1) then - allocate(ScattDataLegendre :: this % scatter) - else - allocate(ScattDataTabular :: this % scatter) - end if + allocate(ScattDataLegendre :: this % scatter) end if ! Allocate and initialize data within macro_xs(i_mat) object @@ -247,11 +227,8 @@ contains this % nu_fission = ZERO allocate(this % chi(groups, groups)) this % chi = ZERO - allocate(temp_energy(groups, groups)) - temp_energy = ZERO allocate(temp_mult(groups, groups)) temp_mult = ZERO - allocate(this % scattxs(groups)) ! Add contribution from each nuclide in material do i = 1, mat % n_nuclides @@ -261,7 +238,6 @@ contains ! Perform our operations which depend upon the type select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (NuclideIso) - ! Add contributions to total, absorption, and fission data (if necessary) this % total = this % total + atom_density * nuc % total this % absorption = this % absorption + & @@ -291,81 +267,25 @@ contains end if end if - ! Now time to do the scattering + ! Get the multiplication matrix do gin = 1, groups - do gout = 1, groups - if (scatt_type == ANGLE_HISTOGRAM .or. scatt_type == ANGLE_TABULAR) then - ! Transfer matrix - temp_energy(gout,gin) = temp_energy(gout,gin) + atom_density * & - sum(nuc % scatter(gout,gin,:)) - - ! Determine the angular distribution - do imu = 1, order - scatt_coeffs(imu, gout, gin) = scatt_coeffs(imu, gout, gin) + & - nuc % scatter(gout,gin,imu) * & - atom_density - end do - - else if (scatt_type == ANGLE_LEGENDRE) then - ! Transfer matrix - temp_energy(gout,gin) = temp_energy(gout,gin) + atom_density * & - nuc % scatter(gout,gin,1) - - ! Determine the angular distribution coefficients so we can later - ! expand do the complete distribution - do l = 1, min(nuc % order, order) + 1 - scatt_coeffs(l, gout, gin) = scatt_coeffs(l, gout, gin) + & - nuc % scatter(gout,gin,l) * & - atom_density - end do - - end if - - ! Multiplicity matrix + do gout = nuc % scatter % gmin(gin), nuc % scatter % gmax(gin) temp_mult(gout,gin) = temp_mult(gout,gin) + atom_density * & - nuc % mult(gout,gin) + nuc % scatter % mult(gin) % data(gout) end do end do + + ! Get the complete scattering matrix + scatt_coeffs(1:min(nuc % order, order),:,:) = scatt_coeffs + & + atom_density * & + nuc % scatter % get_matrix(min(nuc % order, order)) + type is (NuclideAngle) - error_code = 1 - error_text = "Invalid Passing of NuclideAngle to MacroXSIso Object" - return + call fatal_error("Invalid Passing of NuclideAngle to MacroXSIso Object") end select end do - ! Store the scattering xs - if (scatt_type == ANGLE_HISTOGRAM .or. scatt_type == ANGLE_TABULAR) then - this % scattxs(:) = sum(sum(scatt_coeffs(:,:,:),dim=1),dim=1) - else if (scatt_type == ANGLE_LEGENDRE) then - this % scattxs(:) = sum(scatt_coeffs(1,:,:),dim=1) - end if - - ! Normalize the scatt_coeffs - do gin = 1, groups - do gout = 1, groups - if (scatt_type == ANGLE_HISTOGRAM .or. scatt_type == ANGLE_TABULAR) then - norm = sum(scatt_coeffs(:,gout,gin)) - else if (scatt_type == ANGLE_LEGENDRE) then - norm = scatt_coeffs(1,gout,gin) - end if - if (norm /= ZERO) then - scatt_coeffs(:, gout, gin) = scatt_coeffs(:, gout,gin) / norm - end if - end do - ! Now normalize temp_energy (outgoing scattering energy probabilities) - norm = sum(temp_energy(:,gin)) - if (norm > ZERO) then - temp_energy(:,gin) = temp_energy(:,gin) / norm - end if - end do - - if (scatt_type == ANGLE_LEGENDRE .and. legendre_mu_points /= 1) then - call this % scatter % init(legendre_mu_points, temp_energy, temp_mult, & - scatt_coeffs) - else - call this % scatter % init(this % order, temp_energy, temp_mult, & - scatt_coeffs) - end if + call this % scatter % init(temp_mult,scatt_coeffs) ! Now normalize chi if (mat % fissionable) then @@ -379,12 +299,12 @@ contains end if ! Deallocate temporaries for the next material - deallocate(scatt_coeffs, temp_energy, temp_mult) + deallocate(scatt_coeffs, temp_mult) end subroutine macroxsiso_init subroutine macroxsangle_init(this, mat, nuclides, groups, get_kfiss, get_fiss, & - max_order, scatt_type, legendre_mu_points, error_code, error_text) + max_order, scatt_type) class(MacroXSAngle), intent(inout) :: this ! The MacroXS to initialize type(Material), pointer, intent(in) :: mat ! base material type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from @@ -393,43 +313,34 @@ contains logical, intent(in) :: get_fiss ! Should we get fiss data? integer, intent(in) :: max_order ! Maximum requested order integer, intent(in) :: scatt_type ! Legendre or Tabular Scatt? - integer, intent(in) :: legendre_mu_points ! Treat as Leg or Tabular? - integer, intent(inout) :: error_code ! Code signifying error - character(MAX_LINE_LEN), intent(inout) :: error_text ! Error message to print integer :: i ! loop index over nuclides integer :: gin, gout ! group indices real(8) :: atom_density ! atom density of a nuclide - integer :: ipol, iazi, npol, nazi + integer :: ipol, iazi, n_pol, n_azi integer :: imu real(8) :: norm integer :: mat_max_order, order, l real(8), allocatable :: temp_mult(:,:,:,:) - real(8), allocatable :: temp_energy(:,:,:,:) real(8), allocatable :: scatt_coeffs(:,:,:,:,:) - ! Initialize error data - error_code = 0 - error_text = '' - ! Get the number of each polar and azi angles and make sure all the ! NuclideAngle types have the same number of these angles - npol = -1 - nazi = -1 + n_pol = -1 + n_azi = -1 do i = 1, mat % n_nuclides select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (NuclideAngle) - if (npol == -1) then - npol = nuc % n_pol - nazi = nuc % n_azi - allocate(this % polar(npol)) + if (n_pol == -1) then + n_pol = nuc % n_pol + n_azi = nuc % n_azi + allocate(this % polar(n_pol)) this % polar = nuc % polar - allocate(this % azimuthal(nazi)) + allocate(this % azimuthal(n_azi)) this % azimuthal = nuc % azimuthal else - if ((npol /= nuc % n_pol) .or. (nazi /= nuc % n_azi)) then - error_code = 1 - error_text = "All Angular Data Must Be Same Length!" + if ((n_pol /= nuc % n_pol) .or. (n_azi /= nuc % n_azi)) then + call fatal_error("All Angular Data Must Be Same Length!") end if end if end select @@ -441,20 +352,18 @@ contains order = nuclides(mat % nuclide(1)) % obj % order do i = 2, mat % n_nuclides if (order /= nuclides(mat % nuclide(i)) % obj % order) then - error_code = 1 - error_text = "All Histogram Scattering Entries Must Be Same Length!" - return + call fatal_error("All Histogram Scattering Entries Must Be Same Length!") end if end do ! Ok, got our order, store it this % order = order ! Allocate stuff for later - allocate(scatt_coeffs(order, groups, groups, nazi, npol)) + allocate(scatt_coeffs(this % order,groups,groups,n_azi,n_pol)) scatt_coeffs = ZERO - allocate(this % scatter(nazi, npol)) - do ipol = 1, npol - do iazi = 1, nazi + allocate(this % scatter(n_azi, n_pol)) + do ipol = 1, n_pol + do iazi = 1, n_azi allocate(ScattDataHistogram :: this % scatter(iazi, ipol) % obj) end do end do @@ -464,20 +373,18 @@ contains order = nuclides(mat % nuclide(1)) % obj % order do i = 2, mat % n_nuclides if (order /= nuclides(mat % nuclide(i)) % obj % order) then - error_code = 1 - error_text = "All Tabular Scattering Entries Must Be Same Length!" - return + call fatal_error("All Tabular Scattering Entries Must Be Same Length!") end if end do ! Ok, got our order, store it this % order = order ! Allocate stuff for later - allocate(scatt_coeffs(order, groups, groups, nazi, npol)) + allocate(scatt_coeffs(this % order, groups, groups, n_azi, n_pol)) scatt_coeffs = ZERO - allocate(this % scatter(nazi, npol)) - do ipol = 1, npol - do iazi = 1, nazi + allocate(this % scatter(n_azi, n_pol)) + do ipol = 1, n_pol + do iazi = 1, n_azi allocate(ScattDataTabular :: this % scatter(iazi, ipol) % obj) end do end do @@ -498,42 +405,35 @@ contains this % order = order + 1 ! Now we can allocate our scatt_coeffs object accordingly - allocate(scatt_coeffs(order + 1, groups, groups, nazi, npol)) + allocate(scatt_coeffs(this % order, groups, groups, n_azi, n_pol)) scatt_coeffs = ZERO - allocate(this % scatter(nazi, npol)) - do ipol = 1, npol - do iazi = 1, nazi - if (legendre_mu_points == 1) then - allocate(ScattDataLegendre :: this % scatter(iazi, ipol) % obj) - else - allocate(ScattDataTabular :: this % scatter(iazi, ipol) % obj) - end if + allocate(this % scatter(n_azi, n_pol)) + do ipol = 1, n_pol + do iazi = 1, n_azi + allocate(ScattDataLegendre :: this % scatter(iazi, ipol) % obj) end do end do end if ! Allocate and initialize data within macro_xs(i_mat) object - allocate(this % total(groups,nazi,npol)) + allocate(this % total(groups,n_azi,n_pol)) this % total = ZERO - allocate(this % absorption(groups,nazi,npol)) + allocate(this % absorption(groups,n_azi,n_pol)) this % absorption = ZERO if (get_fiss) then - allocate(this % fission(groups,nazi,npol)) + allocate(this % fission(groups,n_azi,n_pol)) this % fission = ZERO end if if (get_kfiss) then - allocate(this % k_fission(groups,nazi,npol)) + allocate(this % k_fission(groups,n_azi,n_pol)) this % k_fission = ZERO end if - allocate(this % nu_fission(groups,nazi,npol)) + allocate(this % nu_fission(groups,n_azi,n_pol)) this % nu_fission = ZERO - allocate(this % chi(groups, groups, nazi, npol)) + allocate(this % chi(groups, groups, n_azi, n_pol)) this % chi = ZERO - allocate(temp_energy(groups,groups,nazi,npol)) - temp_energy = ZERO - allocate(temp_mult(groups,groups,nazi,npol)) + allocate(temp_mult(groups,groups,n_azi,n_pol)) temp_mult = ZERO - allocate(this % scattxs(groups,nazi,npol)) ! Add contribution from each nuclide in material do i = 1, mat % n_nuclides @@ -543,9 +443,7 @@ contains ! Perform our operations which depend upon the type select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (NuclideIso) - error_code = 1 - error_text = "Invalid Passing of NuclideIso to MacroXSAngle Object" - return + call fatal_error("Invalid Passing of NuclideIso to MacroXSAngle Object") type is (NuclideAngle) ! Add contributions to total, absorption, and fission data (if necessary) this % total = this % total + atom_density * nuc % total @@ -577,87 +475,70 @@ contains end if ! Now time to do the scattering - do gin = 1, groups - do gout = 1, groups - if (scatt_type == ANGLE_HISTOGRAM .or. scatt_type == ANGLE_TABULAR) then - ! Transfer matrix - temp_energy(gout,gin,:,:) = temp_energy(gout,gin,:,:) + atom_density * & - sum(nuc % scatter(gout,gin,:,:,:),dim=1) + do ipol = 1, n_pol + do iazi = 1, n_azi + do gin = 1, groups +!!! Needs to be updated to match iso!!! +! this % scattxs(gin,iazi,ipol) = this % scattxs(gin,iazi,ipol) + & +! atom_density * nuc % scattxs(gin,iazi,ipol) + do gout = nuc % scatter(iazi,ipol) % obj % gmin(gin), & + nuc % scatter(iazi,ipol) % obj % gmax(gin) - ! Determine the angular distribution - do imu = 1, order - scatt_coeffs(imu,gout,gin,:,:) = scatt_coeffs(imu,gout,gin,:,:) + & - nuc % scatter(gout,gin,imu,:,:) * & - atom_density + ! Multiplicity matrix + temp_mult(gout,gin,iazi,ipol) = & + temp_mult(gout,gin,iazi,ipol) + atom_density * & + nuc % scatter(iazi,ipol) % obj % mult(gin) % data(gout) + + if (scatt_type == ANGLE_HISTOGRAM) then + ! Determine the angular distribution + do imu = 1, order + scatt_coeffs(imu,gout,gin,iazi,ipol) = & + scatt_coeffs(imu,gout,gin,iazi,ipol) + & + atom_density * & + nuc % scatter(iazi,ipol) % obj % dist(gin) % data(imu,gout) + end do + else if (scatt_type == ANGLE_TABULAR) then + select type(scatt =>nuc % scatter(iazi,ipol) % obj) + type is (ScattDataTabular) + do imu = 1, order + scatt_coeffs(imu,gout,gin,iazi,ipol) = & + scatt_coeffs(imu,gout,gin,iazi,ipol) + & + atom_density * scatt % fmu(gin) % data(imu,gout) + end do + end select + else if (scatt_type == ANGLE_LEGENDRE) then + ! Determine the angular distribution coefficients so we can later + ! expand do the complete distribution + do l = 1, min(nuc % order, order) + 1 + scatt_coeffs(l,gout,gin,iazi,ipol) = & + scatt_coeffs(l,gout,gin,iazi,ipol) + & + atom_density * & + nuc % scatter(iazi,ipol) % obj % dist(gin) % data(l,gout) + end do + end if + ! Incorporate outgoing energy PDF information + scatt_coeffs(:,gout,gin,iazi,ipol) = & + scatt_coeffs(:,gout,gin,iazi,ipol) * & + nuc % scatter(iazi,ipol) % obj % energy(gin) % data(gout) end do - else if (scatt_type == ANGLE_LEGENDRE) then - ! Transfer matrix - temp_energy(gout,gin,:,:) = temp_energy(gout,gin,:,:) + atom_density * & - nuc % scatter(gout,gin,1,:,:) - - ! Determine the angular distribution coefficients so we can later - ! expand do the complete distribution - do l = 1, min(nuc % order, order) + 1 - scatt_coeffs(l, gout, gin,:,:) = scatt_coeffs(l, gout, gin,:,:) + & - nuc % scatter(gout,gin,l,:,:) * & - atom_density - end do - end if - - ! Multiplicity matrix - temp_mult(gout,gin,:,:) = temp_mult(gout,gin,:,:) + atom_density * & - nuc % mult(gout,gin,:,:) + end do end do end do end select end do - ! Store the scattering xs - if (scatt_type == ANGLE_HISTOGRAM .or. scatt_type == ANGLE_TABULAR) then - this % scattxs(:,:,:) = sum(sum(scatt_coeffs(:,:,:,:,:),dim=1),dim=1) - else if (scatt_type == ANGLE_LEGENDRE) then - this % scattxs(:,:,:) = sum(scatt_coeffs(1,:,:,:,:),dim=1) - end if - - ! Normalize the scatt_coeffs - do ipol = 1, npol - do iazi = 1, nazi - do gin = 1, groups - do gout = 1, groups - if (scatt_type == ANGLE_HISTOGRAM .or. scatt_type == ANGLE_TABULAR) then - norm = sum(scatt_coeffs(:,gout,gin,iazi,ipol)) - else if (scatt_type == ANGLE_LEGENDRE) then - norm = scatt_coeffs(1,gout,gin,iazi,ipol) - end if - if (norm /= ZERO) then - scatt_coeffs(:,gout,gin,iazi,ipol) = & - scatt_coeffs(:,gout,gin,iazi,ipol) / norm - end if - end do - ! Now normalize temp_energy (outgoing scattering energy probabilities) - norm = sum(temp_energy(:,gin,iazi,ipol)) - if (norm > ZERO) then - temp_energy(:,gin,iazi,ipol) = temp_energy(:,gin,iazi,ipol) / norm - end if - end do - - if (scatt_type == ANGLE_LEGENDRE .and. legendre_mu_points /= 1) then - call this % scatter(iazi, ipol) % obj % init(legendre_mu_points, & - temp_energy(:,:,iazi,ipol), temp_mult(:,:,iazi,ipol), & - scatt_coeffs(:,:,:,iazi,ipol)) - else - call this % scatter(iazi, ipol) % obj % init(this % order, & - temp_energy(:,:,iazi,ipol), temp_mult(:,:,iazi,ipol), & - scatt_coeffs(:,:,:,iazi,ipol)) - end if - + ! Initialize the scattering data + do ipol = 1, n_pol + do iazi = 1, n_azi + call this % scatter(iazi, ipol) % obj % init( & + temp_mult(:,:,iazi,ipol), scatt_coeffs(:,:,:,iazi,ipol)) end do end do ! Now go through and normalize chi if (mat % fissionable) then - do ipol = 1, npol - do iazi = 1, nazi + do ipol = 1, n_pol + do iazi = 1, n_azi do gin = 1, groups ! Normalize Chi norm = sum(this % chi(:,gin,iazi,ipol)) @@ -670,7 +551,7 @@ contains end if ! Deallocate temporaries for the next material - deallocate(scatt_coeffs, temp_energy, temp_mult) + deallocate(scatt_coeffs, temp_mult) end subroutine macroxsangle_init @@ -698,7 +579,7 @@ contains case('nu_fission') xs = this % nu_fission(g) case('scatter') - xs = this % scattxs(g) + xs = this % scatter % scattxs(g) case('mult') if (present(gout)) then xs = this % scatter % mult(g) % data(gout) @@ -733,7 +614,7 @@ contains case('nu_fission') xs = this % nu_fission(g,iazi,ipol) case('scatter') - xs = this % scattxs(g,iazi,ipol) + xs = this % scatter(iazi,ipol) % obj % scattxs(g) case('mult') if (present(gout)) then xs = this % scatter(iazi,ipol) % obj % mult(g) % data(gout) @@ -835,7 +716,7 @@ contains type(MaterialMacroXS), intent(inout) :: xs ! Resultant MacroXS Data xs % total = this % total(gin) - xs % elastic = this % scattxs(gin) + xs % elastic = this % scatter % scattxs(gin) xs % absorption = this % absorption(gin) xs % nu_fission = this % nu_fission(gin) @@ -850,10 +731,10 @@ contains integer :: iazi, ipol call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) - xs % total = this % total(gin, iazi, ipol) - xs % elastic = this % scattxs(gin, iazi, ipol) - xs % absorption = this % absorption(gin, iazi, ipol) - xs % nu_fission = this % nu_fission(gin, iazi, ipol) + xs % total = this % total(gin,iazi,ipol) + xs % elastic = this % scatter(iazi,ipol) % obj % scattxs(gin) + xs % absorption = this % absorption(gin,iazi,ipol) + xs % nu_fission = this % nu_fission(gin,iazi,ipol) end subroutine macroxsangle_calculate_xs diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 796269151c..b998a96d62 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -125,7 +125,7 @@ contains ! Now read in the data specific to the type we just declared call nuclides_MG(i_nuclide) % obj % init(node_xsdata, energy_groups, & - get_kfiss, get_fiss) + get_kfiss, get_fiss, max_order) ! Keep track of what listing is associated with this nuclide nuclides_MG(i_nuclide) % obj % listing = i_listing @@ -193,10 +193,7 @@ contains integer :: l ! Loop over score bins type(Material), pointer :: mat ! current material logical :: get_kfiss, get_fiss - integer :: error_code - character(MAX_LINE_LEN) :: error_text integer :: scatt_type - integer :: legendre_mu_points ! Find out if we need fission & kappa fission ! (i.e., are there any SCORE_FISSION or SCORE_KAPPA_FISSION tallies?) @@ -225,7 +222,6 @@ contains ! Therefore type(nuclides(mat % nuclide(1)) % obj) dictates type(macroxs) ! At the same time, we will find the scattering type, as that will dictate ! how we allocate the scatter object within macroxs - legendre_mu_points = nuclides_MG(mat % nuclide(1)) % obj % legendre_mu_points scatt_type = nuclides_MG(mat % nuclide(1)) % obj % scatt_type select type(nuc => nuclides_MG(mat % nuclide(1)) % obj) type is (NuclideIso) @@ -233,13 +229,9 @@ contains type is (NuclideAngle) allocate(MacroXSAngle :: macro_xs(i_mat) % obj) end select - call macro_xs(i_mat) % obj % init(mat, nuclides_MG, energy_groups, & get_kfiss, get_fiss, max_order, & - scatt_type, legendre_mu_points, & - error_code, error_text) - ! Handle any errors - if (error_code /= 0) call fatal_error(trim(error_text)) + scatt_type) end do end subroutine create_macro_xs diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 43fea77b65..88d7ce0ea3 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -8,6 +8,7 @@ module nuclide_header use error, only: fatal_error use list_header, only: ListInt use math, only: evaluate_legendre, find_angle + use scattdata_header use string use xml_interface @@ -110,24 +111,22 @@ module nuclide_header integer :: order ! Order of data (Scattering for NuclideIso, ! Number of angles for all in NuclideAngle) integer :: scatt_type ! either legendre, histogram, or tabular. - integer :: legendre_mu_points ! Number of tabular points to use to represent - ! Legendre distribs, -1 if sample with the - ! Legendres themselves contains procedure(nuclidemg_init_), deferred :: init ! Initialize the data procedure(nuclidemg_get_xs_), deferred :: get_xs ! Get the requested xs - procedure(nuclidemg_calc_f_), deferred :: calc_f ! Calculates f, given mu end type NuclideMG abstract interface - subroutine nuclidemg_init_(this, node_xsdata, groups, get_kfiss, get_fiss) + subroutine nuclidemg_init_(this, node_xsdata, groups, get_kfiss, get_fiss, & + max_order) import NuclideMG, Node class(NuclideMG), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml integer, intent(in) :: groups ! Number of Energy groups logical, intent(in) :: get_kfiss ! Need Kappa-Fission? logical, intent(in) :: get_fiss ! Should we get fiss data? + integer, intent(in) :: max_order ! Maximum requested order end subroutine nuclidemg_init_ function nuclidemg_get_xs_(this, g, xstype, gout, uvw, mu, i_azi, i_pol) & @@ -168,18 +167,16 @@ module nuclide_header ! Microscopic cross sections real(8), allocatable :: total(:) ! total cross section real(8), allocatable :: absorption(:) ! absorption cross section - real(8), allocatable :: scatter(:,:,:) ! scattering information + class(ScattData), allocatable :: scatter ! scattering information real(8), allocatable :: nu_fission(:,:) ! fission matrix (Gout x Gin) real(8), allocatable :: k_fission(:) ! kappa-fission real(8), allocatable :: fission(:) ! neutron production real(8), allocatable :: chi(:) ! Fission Spectra - real(8), allocatable :: mult(:,:) ! Scatter multiplicity (Gout x Gin) contains procedure :: init => nuclideiso_init ! Initialize Nuclidic MGXS Data procedure :: print => nuclideiso_print ! Writes nuclide info procedure :: get_xs => nuclideiso_get_xs ! Gets Size of Data w/in Object - procedure :: calc_f => nuclideiso_calc_f ! Calcs f given mu end type NuclideIso !=============================================================================== @@ -192,7 +189,7 @@ module nuclide_header ! Microscopic cross sections. Dimensions are: (n_pol, n_azi, Nl, Ng, Ng) real(8), allocatable :: total(:,:,:) ! total cross section real(8), allocatable :: absorption(:,:,:) ! absorption cross section - real(8), allocatable :: scatter(:,:,:,:,:) ! scattering information + type(ScattDataContainer), allocatable :: scatter(:,:) ! scattering information real(8), allocatable :: nu_fission(:,:,:,:) ! fission matrix (Gout x Gin) real(8), allocatable :: k_fission(:,:,:) ! kappa-fission real(8), allocatable :: fission(:,:,:) ! neutron production @@ -209,7 +206,6 @@ module nuclide_header procedure :: init => nuclideangle_init ! Initialize Nuclidic MGXS Data procedure :: print => nuclideangle_print ! Gets Size of Data w/in Object procedure :: get_xs => nuclideangle_get_xs ! Gets Size of Data w/in Object - procedure :: calc_f => nuclideangle_calc_f ! Calcs f given mu end type NuclideAngle !=============================================================================== @@ -303,9 +299,7 @@ module nuclide_header class(NuclideMG), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml - type(Node), pointer :: node_legendre_mu character(MAX_LINE_LEN) :: temp_str - logical :: enable_leg_mu ! Load the data call get_node_value(node_xsdata, "name", this % name) @@ -342,37 +336,6 @@ module nuclide_header call fatal_error("Order Must Be Provided!") end if - ! Get scattering treatment - if (check_for_node(node_xsdata, "tabular_legendre")) then - call get_node_ptr(node_xsdata, "tabular_legendre", node_legendre_mu) - if (check_for_node(node_legendre_mu, "enable")) then - call get_node_value(node_legendre_mu, "enable", temp_str) - temp_str = trim(to_lower(temp_str)) - if (temp_str == 'true' .or. temp_str == '1') then - enable_leg_mu = .true. - elseif (temp_str == 'false' .or. temp_str == '0') then - enable_leg_mu = .false. - this % legendre_mu_points = 1 - else - call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) - end if - else - enable_leg_mu = .true. - this % legendre_mu_points = 33 - end if - if (enable_leg_mu .and. & - check_for_node(node_legendre_mu, "num_points")) then - call get_node_value(node_legendre_mu, "num_points", & - this % legendre_mu_points) - if (this % legendre_mu_points <= 0) then - call fatal_error("num_points element must be positive and non-zero!") - end if - this % legendre_mu_points = -1 * this % legendre_mu_points - end if - else - this % legendre_mu_points = 1 - end if - if (check_for_node(node_xsdata, "fissionable")) then call get_node_value(node_xsdata, "fissionable", temp_str) temp_str = to_lower(temp_str) @@ -387,16 +350,26 @@ module nuclide_header end subroutine nuclidemg_init - subroutine nuclideiso_init(this, node_xsdata, groups, get_kfiss, get_fiss) + subroutine nuclideiso_init(this, node_xsdata, groups, get_kfiss, get_fiss, & + max_order) class(NuclideIso), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml integer, intent(in) :: groups ! Number of Energy groups logical, intent(in) :: get_kfiss ! Need Kappa-Fission? logical, intent(in) :: get_fiss ! Need fiss data? + integer, intent(in) :: max_order ! Maximum requested order - real(8), allocatable :: temp_arr(:) - integer :: arr_len - integer :: order_dim + type(Node), pointer :: node_legendre_mu + character(MAX_LINE_LEN) :: temp_str + logical :: enable_leg_mu + real(8), allocatable :: temp_arr(:) + real(8), allocatable :: temp_mult(:,:) + real(8), allocatable :: scatt_coeffs(:,:,:) + real(8), allocatable :: input_scatt(:,:,:) + real(8), allocatable :: temp_scatt(:,:,:) + real(8) :: dmu, mu, norm + integer :: order_dim, gin, gout, l, arr_len + integer :: legendre_mu_points, imu ! Call generic data gathering routine call nuclidemg_init(this, node_xsdata) @@ -460,6 +433,33 @@ module nuclide_header call fatal_error("Must provide absorption!") end if + ! Get scattering treatment + if (check_for_node(node_xsdata, "tabular_legendre")) then + call get_node_ptr(node_xsdata, "tabular_legendre", node_legendre_mu) + if (check_for_node(node_legendre_mu, "enable")) then + call get_node_value(node_legendre_mu, "enable", temp_str) + temp_str = trim(to_lower(temp_str)) + if (temp_str == 'true' .or. temp_str == '1') then + enable_leg_mu = .true. + elseif (temp_str == 'false' .or. temp_str == '0') then + enable_leg_mu = .false. + else + call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) + end if + else + enable_leg_mu = .true. + legendre_mu_points = 33 + end if + if (enable_leg_mu .and. & + check_for_node(node_legendre_mu, "num_points")) then + call get_node_value(node_legendre_mu, "num_points", & + legendre_mu_points) + if (legendre_mu_points <= 0) then + call fatal_error("num_points element must be positive and non-zero!") + end if + end if + end if + if (this % scatt_type == ANGLE_LEGENDRE) then order_dim = this % order + 1 else if (this % scatt_type == ANGLE_HISTOGRAM) then @@ -468,33 +468,94 @@ module nuclide_header order_dim = this % order end if - allocate(this % scatter(groups, groups, order_dim)) + allocate(input_scatt(groups, groups, order_dim)) if (check_for_node(node_xsdata, "scatter")) then allocate(temp_arr(groups * groups * order_dim)) call get_node_array(node_xsdata, "scatter", temp_arr) - this % scatter = reshape(temp_arr, (/groups, groups, order_dim/)) + input_scatt = reshape(temp_arr, (/groups, groups, order_dim/)) deallocate(temp_arr) + + ! Compare the number of orders given with the maximum order of the + ! problem. Strip off the supefluous orders if needed. + if (this % scatt_type == ANGLE_LEGENDRE) then + order_dim = min(order_dim, max_order + 1) + this % order = order_dim + end if + allocate(temp_scatt(groups, groups, order_dim)) + do gin = 1, groups + do gout = 1, groups + do l = 1, order_dim + temp_scatt(gout,gin,l) = input_scatt(gout,gin,l) + end do + end do + end do + + ! Take input format (groups, groups, order) and convert to + ! the more useful format needed for scattdata: (order, groups, groups) + ! However, if scatt_type was ANGLE_LEGENDRE (i.e., the data was + ! provided as Legendre coefficients), and the user requested that + ! these legendres be converted to tabular form (note this is also + ! the default behavior), convert that now. + if (this % scatt_type == ANGLE_LEGENDRE .and. enable_leg_mu) then + ! Convert input parameters to what we need for the rest. + this % scatt_type = ANGLE_TABULAR + order_dim = legendre_mu_points + this % order = order_dim + dmu = TWO / real(this % order - 1,8) + + allocate(scatt_coeffs(order_dim, groups, groups)) + do gin = 1, groups + do gout = 1, groups + norm = ZERO + do imu = 1, order_dim + if (imu == 1) then + mu = -ONE + else if (imu == order_dim) then + mu = ONE + else + mu = -ONE + real(imu - 1,8) * dmu + end if + scatt_coeffs(imu,gout,gin) = & + evaluate_legendre(temp_scatt(gout,gin,:),mu) + if (scatt_coeffs(imu,gout,gin) < ZERO) & + scatt_coeffs(imu,gout,gin) = ZERO + if (imu > 1) then + norm = norm + HALF * dmu * (scatt_coeffs(imu-1,gout,gin) + & + scatt_coeffs(imu,gout,gin)) + end if + end do + if (norm > ZERO) then + scatt_coeffs(:,gout,gin) = scatt_coeffs(:,gout,gin) * & + temp_scatt(gout,gin,1) / norm + end if + end do + end do + else + ! Sticking with current representation, carry forward but change + ! the array ordering + allocate(scatt_coeffs(order_dim, groups, groups)) + do gin = 1, groups + do gout = 1, groups + do l = 1, order_dim + scatt_coeffs(l,gout,gin) = temp_scatt(gout,gin,l) + end do + end do + end do + end if + deallocate(temp_scatt) else call fatal_error("Must provide scatter!") return end if - - allocate(this % total(groups)) - if (check_for_node(node_xsdata, "total")) then - call get_node_array(node_xsdata, "total", this % total) - else - this % total = this % absorption + sum(this%scatter(:,:,1),dim=1) - end if - ! Get Mult Data - allocate(this % mult(groups, groups)) + allocate(temp_mult(groups, groups)) if (check_for_node(node_xsdata, "multiplicity")) then arr_len = get_arraysize_double(node_xsdata, "multiplicity") if (arr_len == groups * groups) then allocate(temp_arr(arr_len)) call get_node_array(node_xsdata, "multiplicity", temp_arr) - this % mult = reshape(temp_arr, (/groups, groups/)) + temp_mult = reshape(temp_arr, (/groups, groups/)) deallocate(temp_arr) else call fatal_error("Multiplicity length not same as number of groups& @@ -502,17 +563,42 @@ module nuclide_header return end if else - this % mult = ONE + temp_mult = ONE end if + ! Allocate and initialize our ScattData Object.. + if (this % scatt_type == ANGLE_HISTOGRAM) then + allocate(ScattDataHistogram :: this % scatter) + else if (this % scatt_type == ANGLE_TABULAR) then + allocate(ScattDataTabular :: this % scatter) + else if (this % scatt_type == ANGLE_LEGENDRE) then + allocate(ScattDataLegendre :: this % scatter) + end if + + ! Initialize the ScattData Object + call this % scatter % init(temp_mult, scatt_coeffs(:,:,:)) + + ! Get, or infer, total xs data. + allocate(this % total(groups)) + if (check_for_node(node_xsdata, "total")) then + call get_node_array(node_xsdata, "total", this % total) + else + this % total = this % absorption + this % scatter % scattxs + end if + + ! Deallocate temporaries for the next material + deallocate(scatt_coeffs, temp_mult) + end subroutine nuclideiso_init - subroutine nuclideangle_init(this, node_xsdata, groups, get_kfiss, get_fiss) + subroutine nuclideangle_init(this, node_xsdata, groups, get_kfiss, get_fiss, & + max_order) class(NuclideAngle), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml integer, intent(in) :: groups ! Number of Energy groups logical, intent(in) :: get_kfiss ! Need Kappa-Fission? logical, intent(in) :: get_fiss ! Should we get fiss data? + integer, intent(in) :: max_order ! Maximum requested order real(8), allocatable :: temp_arr(:) integer :: arr_len @@ -531,151 +617,151 @@ module nuclide_header order_dim = this % order end if - if (check_for_node(node_xsdata, "num_polar")) then - call get_node_value(node_xsdata, "num_polar", this % n_pol) - else - call fatal_error("num_polar Must Be Provided!") - end if + ! if (check_for_node(node_xsdata, "num_polar")) then + ! call get_node_value(node_xsdata, "num_polar", this % n_pol) + ! else + ! call fatal_error("num_polar Must Be Provided!") + ! end if - if (check_for_node(node_xsdata, "num_azimuthal")) then - call get_node_value(node_xsdata, "num_azimuthal", this % n_azi) - else - call fatal_error("num_azimuthal Must Be Provided!") - end if + ! if (check_for_node(node_xsdata, "num_azimuthal")) then + ! call get_node_value(node_xsdata, "num_azimuthal", this % n_azi) + ! else + ! call fatal_error("num_azimuthal Must Be Provided!") + ! end if - ! Load angle data, if present (else equally spaced) - allocate(this % polar(this % n_pol)) - allocate(this % azimuthal(this % n_azi)) - if (check_for_node(node_xsdata, "polar")) then - call fatal_error("User-Specified polar angle bins not yet supported!") - ! When this feature is supported, this line will be activated - call get_node_array(node_xsdata, "polar", this % polar) - else - dangle = PI / real(this % n_pol,8) - do iangle = 1, this % n_pol - this % polar(iangle) = (real(iangle,8) - HALF) * dangle - end do - end if - if (check_for_node(node_xsdata, "azimuthal")) then - call fatal_error("User-Specified azimuthal angle bins not yet supported!") - ! When this feature is supported, this line will be activated - call get_node_array(node_xsdata, "azimuthal", this % azimuthal) - else - dangle = TWO * PI / real(this % n_azi,8) - do iangle = 1, this % n_azi - this % azimuthal(iangle) = -PI + (real(iangle,8) - HALF) * dangle - end do - end if + ! ! Load angle data, if present (else equally spaced) + ! allocate(this % polar(this % n_pol)) + ! allocate(this % azimuthal(this % n_azi)) + ! if (check_for_node(node_xsdata, "polar")) then + ! call fatal_error("User-Specified polar angle bins not yet supported!") + ! ! When this feature is supported, this line will be activated + ! call get_node_array(node_xsdata, "polar", this % polar) + ! else + ! dangle = PI / real(this % n_pol,8) + ! do iangle = 1, this % n_pol + ! this % polar(iangle) = (real(iangle,8) - HALF) * dangle + ! end do + ! end if + ! if (check_for_node(node_xsdata, "azimuthal")) then + ! call fatal_error("User-Specified azimuthal angle bins not yet supported!") + ! ! When this feature is supported, this line will be activated + ! call get_node_array(node_xsdata, "azimuthal", this % azimuthal) + ! else + ! dangle = TWO * PI / real(this % n_azi,8) + ! do iangle = 1, this % n_azi + ! this % azimuthal(iangle) = -PI + (real(iangle,8) - HALF) * dangle + ! end do + ! end if - ! Load the more specific data - if (this % fissionable) then + ! ! Load the more specific data + ! if (this % fissionable) then - if (check_for_node(node_xsdata, "chi")) then - ! Get chi - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata, "chi", temp_arr) - allocate(this % chi(groups, this % n_azi, this % n_pol)) - this % chi = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) - deallocate(temp_arr) + ! if (check_for_node(node_xsdata, "chi")) then + ! ! Get chi + ! allocate(temp_arr(groups * this % n_azi * this % n_pol)) + ! call get_node_array(node_xsdata, "chi", temp_arr) + ! allocate(this % chi(groups, this % n_azi, this % n_pol)) + ! this % chi = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) + ! deallocate(temp_arr) - ! Get nu_fission (as a vector) - if (check_for_node(node_xsdata, "nu_fission")) then - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata, "nu_fission", temp_arr) - allocate(this % nu_fission(groups, 1, this % n_azi, this % n_pol)) - this % nu_fission = reshape(temp_arr, (/groups, 1, this % n_azi, & - this % n_pol/)) - deallocate(temp_arr) - else - call fatal_error("If fissionable, must provide nu_fission!") - end if + ! ! Get nu_fission (as a vector) + ! if (check_for_node(node_xsdata, "nu_fission")) then + ! allocate(temp_arr(groups * this % n_azi * this % n_pol)) + ! call get_node_array(node_xsdata, "nu_fission", temp_arr) + ! allocate(this % nu_fission(groups, 1, this % n_azi, this % n_pol)) + ! this % nu_fission = reshape(temp_arr, (/groups, 1, this % n_azi, & + ! this % n_pol/)) + ! deallocate(temp_arr) + ! else + ! call fatal_error("If fissionable, must provide nu_fission!") + ! end if - else - ! Get nu_fission (as a matrix) - if (check_for_node(node_xsdata, "nu_fission")) then + ! else + ! ! Get nu_fission (as a matrix) + ! if (check_for_node(node_xsdata, "nu_fission")) then - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata, "nu_fission", temp_arr) - allocate(this % nu_fission(groups, groups, this % n_azi, this % n_pol)) - this % nu_fission = reshape(temp_arr, (/groups, groups, & - this % n_azi, this % n_pol/)) - deallocate(temp_arr) - else - call fatal_error("If fissionable, must provide nu_fission!") - end if - end if - if (get_fiss) then - if (check_for_node(node_xsdata, "fission")) then - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata, "fission", temp_arr) - allocate(this % fission(groups, this % n_azi, this % n_pol)) - this % fission = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) - deallocate(temp_arr) - else - call fatal_error("Fission data missing, required due to fission& - & tallies in tallies.xml file!") - end if - end if - if (get_kfiss) then - if (check_for_node(node_xsdata, "kappa_fission")) then - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata, "kappa_fission", temp_arr) - allocate(this % k_fission(groups, this % n_azi, this % n_pol)) - this % k_fission = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) - deallocate(temp_arr) - else - call fatal_error("kappa_fission data missing, required due to & - &kappa-fission tallies in tallies.xml file!") - end if - end if - end if + ! allocate(temp_arr(groups * this % n_azi * this % n_pol)) + ! call get_node_array(node_xsdata, "nu_fission", temp_arr) + ! allocate(this % nu_fission(groups, groups, this % n_azi, this % n_pol)) + ! this % nu_fission = reshape(temp_arr, (/groups, groups, & + ! this % n_azi, this % n_pol/)) + ! deallocate(temp_arr) + ! else + ! call fatal_error("If fissionable, must provide nu_fission!") + ! end if + ! end if + ! if (get_fiss) then + ! if (check_for_node(node_xsdata, "fission")) then + ! allocate(temp_arr(groups * this % n_azi * this % n_pol)) + ! call get_node_array(node_xsdata, "fission", temp_arr) + ! allocate(this % fission(groups, this % n_azi, this % n_pol)) + ! this % fission = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) + ! deallocate(temp_arr) + ! else + ! call fatal_error("Fission data missing, required due to fission& + ! & tallies in tallies.xml file!") + ! end if + ! end if + ! if (get_kfiss) then + ! if (check_for_node(node_xsdata, "kappa_fission")) then + ! allocate(temp_arr(groups * this % n_azi * this % n_pol)) + ! call get_node_array(node_xsdata, "kappa_fission", temp_arr) + ! allocate(this % k_fission(groups, this % n_azi, this % n_pol)) + ! this % k_fission = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) + ! deallocate(temp_arr) + ! else + ! call fatal_error("kappa_fission data missing, required due to & + ! &kappa-fission tallies in tallies.xml file!") + ! end if + ! end if + ! end if - if (check_for_node(node_xsdata, "absorption")) then - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata, "absorption", temp_arr) - allocate(this % absorption(groups, this % n_azi, this % n_pol)) - this % absorption = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) - deallocate(temp_arr) - else - call fatal_error("Must provide absorption!") - end if + ! if (check_for_node(node_xsdata, "absorption")) then + ! allocate(temp_arr(groups * this % n_azi * this % n_pol)) + ! call get_node_array(node_xsdata, "absorption", temp_arr) + ! allocate(this % absorption(groups, this % n_azi, this % n_pol)) + ! this % absorption = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) + ! deallocate(temp_arr) + ! else + ! call fatal_error("Must provide absorption!") + ! end if - allocate(this % scatter(groups, groups, order_dim, this % n_azi, this % n_pol)) - if (check_for_node(node_xsdata, "scatter")) then - allocate(temp_arr(groups * groups * order_dim * this % n_azi * this%n_pol)) - call get_node_array(node_xsdata, "scatter", temp_arr) - this % scatter = reshape(temp_arr, (/groups, groups, order_dim, & - this%n_azi,this%n_pol/)) - deallocate(temp_arr) - else - call fatal_error("Must provide scatter!") - end if + ! allocate(this % scatter(groups, groups, order_dim, this % n_azi, this % n_pol)) + ! if (check_for_node(node_xsdata, "scatter")) then + ! allocate(temp_arr(groups * groups * order_dim * this % n_azi * this%n_pol)) + ! call get_node_array(node_xsdata, "scatter", temp_arr) + ! this % scatter = reshape(temp_arr, (/groups, groups, order_dim, & + ! this%n_azi,this%n_pol/)) + ! deallocate(temp_arr) + ! else + ! call fatal_error("Must provide scatter!") + ! end if - if (check_for_node(node_xsdata, "total")) then - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata, "total", temp_arr) - allocate(this % total(groups, this % n_azi, this % n_pol)) - this % total = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) - deallocate(temp_arr) - else - this % total = this % absorption + sum(this%scatter(:,:,1,:,:),dim=1) - end if + ! if (check_for_node(node_xsdata, "total")) then + ! allocate(temp_arr(groups * this % n_azi * this % n_pol)) + ! call get_node_array(node_xsdata, "total", temp_arr) + ! allocate(this % total(groups, this % n_azi, this % n_pol)) + ! this % total = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) + ! deallocate(temp_arr) + ! else + ! this % total = this % absorption + sum(this%scatter(:,:,1,:,:),dim=1) + ! end if - ! Get Mult Data - allocate(this % mult(groups, groups, this % n_azi, this % n_pol)) - if (check_for_node(node_xsdata, "multiplicity")) then - arr_len = get_arraysize_double(node_xsdata, "multiplicity") - if (arr_len == groups * groups * this % n_azi * this % n_pol) then - allocate(temp_arr(arr_len)) - call get_node_array(node_xsdata, "multiplicity", temp_arr) - this % mult = reshape(temp_arr, (/groups, groups, this % n_azi, this % n_pol/)) - deallocate(temp_arr) - else - call fatal_error("Multiplicity Length Does Not Match!") - end if - else - this % mult = ONE - end if + ! ! Get Mult Data + ! allocate(this % mult(groups, groups, this % n_azi, this % n_pol)) + ! if (check_for_node(node_xsdata, "multiplicity")) then + ! arr_len = get_arraysize_double(node_xsdata, "multiplicity") + ! if (arr_len == groups * groups * this % n_azi * this % n_pol) then + ! allocate(temp_arr(arr_len)) + ! call get_node_array(node_xsdata, "multiplicity", temp_arr) + ! this % mult = reshape(temp_arr, (/groups, groups, this % n_azi, this % n_pol/)) + ! deallocate(temp_arr) + ! else + ! call fatal_error("Multiplicity Length Does Not Match!") + ! end if + ! else + ! this % mult = ONE + ! end if end subroutine nuclideangle_init @@ -823,6 +909,7 @@ module nuclide_header integer :: unit_ ! unit to write to integer :: size_total, size_scattmat, size_mgxs + integer :: gin ! set default unit for writing information if (present(unit)) then @@ -835,7 +922,15 @@ module nuclide_header call nuclidemg_print(this, unit_) ! Determine size of mgxs and scattering matrices - size_scattmat = (size(this % scatter) + size(this % mult)) * 8 + size_scattmat = 0 + do gin = 1, size(this % scatter % energy) + size_scattmat = size_scattmat + & + 2 * size(this % scatter % energy(gin) % data) + & + size(this % scatter % dist(gin) % data) + & + size(this % scatter % scattxs) + end do + size_scattmat = size_scattmat * 8 + size_mgxs = size(this % total) + size(this % absorption) + & size(this % nu_fission) + size(this % k_fission) + & size(this % fission) + size(this % chi) @@ -863,6 +958,7 @@ module nuclide_header integer :: unit_ ! unit to write to integer :: size_total, size_scattmat, size_mgxs + integer :: i_pol, i_azi, gin ! set default unit for writing information if (present(unit)) then @@ -877,6 +973,18 @@ module nuclide_header write(unit_,*) ' # of Azimuthal Angles = ' // trim(to_str(this % n_azi)) ! Determine size of mgxs and scattering matrices + size_scattmat = 0 + do i_pol = 1, this % n_pol + do i_azi = 1, this % n_azi + do gin = 1, size(this % scatter(i_azi,i_pol) % obj % energy) + size_scattmat = size_scattmat + & + 2 * size(this % scatter(i_azi,i_pol) % obj % energy(gin) % data) + & + size(this % scatter(i_azi,i_pol) % obj % dist(gin) % data) + end do + end do + end do + size_scattmat = size_scattmat * 8 + size_scattmat = (size(this % scatter) + size(this % mult)) * 8 size_mgxs = size(this % total) + size(this % absorption) + & size(this % nu_fission) + size(this % k_fission) + & @@ -925,13 +1033,13 @@ module nuclide_header if (present(gout)) then select case(xstype) case('mult') - xs = this % mult(gout,g) + xs = this % scatter % mult(g) % data(gout) case('nu_fission') xs = this % nu_fission(gout,g) case('f_mu', 'f_mu/mult') - xs = this % calc_f(g, gout, mu) + xs = this % scatter % calc_f(g, gout, mu) if (xstype == 'f_mu/mult') then - xs = xs / this % mult(gout,g) + xs = xs / this % scatter % mult(g) % data(gout) end if end select else @@ -949,7 +1057,7 @@ module nuclide_header case('chi') xs = this % chi(g) case('scatter') - xs = this % total(g) - this % absorption(g) + xs = this % scatter % scattxs(g) end select end if end function nuclideiso_get_xs @@ -985,15 +1093,15 @@ module nuclide_header if (present(gout)) then select case(xstype) case('mult') - xs = this % mult(gout,g,i_azi_,i_pol_) + xs = this % scatter(i_azi_,i_pol_) % obj % mult(g) % data(gout) case('nu_fission') xs = this % nu_fission(gout,g,i_azi_,i_pol_) case('chi') xs = this % chi(gout,i_azi_,i_pol_) case('f_mu', 'f_mu/mult') - xs = this % calc_f(g, gout, mu, I_AZI=i_azi_, I_POL=i_pol_) + xs = this % scatter(i_azi_,i_pol_) % obj % calc_f(g,gout,mu) if (xstype == 'f_mu/mult') then - xs = xs / this % mult(gout,g,i_azi_,i_pol_) + xs = xs / this % scatter(i_azi_,i_pol_) % obj % mult(g) % data(gout) end if end select else @@ -1011,116 +1119,10 @@ module nuclide_header case('chi') xs = this % chi(g,i_azi_,i_pol_) case('scatter') - xs = this % total(g,i_azi_,i_pol_) - this % absorption(g,i_azi_,i_pol_) + xs = this % scatter(i_azi_,i_pol_) % obj % scattxs(g) end select end if end function nuclideangle_get_xs -!=============================================================================== -! NUCLIDE*_CALC_F Finds the value of f(mu), the scattering angle probability, -! given mu -!=============================================================================== - - pure function nuclideiso_calc_f(this, gin, gout, mu, uvw, i_azi, i_pol) & - result(f) - class(NuclideIso), intent(in) :: this - integer, intent(in) :: gin ! Incoming Energy Group - integer, intent(in) :: gout ! Outgoing Energy Group - real(8), intent(in) :: mu ! Angle of interest - real(8), intent(in), optional :: uvw(3) ! Direction vector - integer, intent(in), optional :: i_azi ! Incoming Energy Group - integer, intent(in), optional :: i_pol ! Outgoing Energy Group - real(8) :: f ! Return value of f(mu) - - real(8) :: dmu, r - integer :: imu - - if (this % scatt_type == ANGLE_LEGENDRE) then - f = evaluate_legendre(this % scatter(gout,gin,:), mu) - else if (this % scatt_type == ANGLE_TABULAR) then - dmu = TWO / real(this % order - 1,8) - ! Find mu bin algebraically, knowing that the spacing is equal - f = (mu + ONE) / dmu + ONE - imu = floor(f) - ! But save the amount that mu is past the previous index - ! so we can use interpolation later. - f = f - real(imu,8) - ! Adjust so interpolation works on the last bin if necessary - if (imu == size(this % scatter, dim=3)) then - imu = imu - 1 - end if - - ! Now intepolate to find f(mu) - r = f / dmu - f = (ONE - r) * this % scatter(gout,gin,imu) + & - r * this % scatter(gout,gin,imu+1) - else ! (ANGLE_HISTOGRAM) - dmu = TWO / real(this % order,8) - ! Find mu bin algebraically, knowing that the spacing is equal - imu = floor((mu + ONE) / dmu + ONE) - ! Adjust so interpolation works on the last bin if necessary - if (imu == size(this % scatter, dim=3)) then - imu = imu - 1 - end if - f = this % scatter(gout, gin, imu) - - end if - - end function nuclideiso_calc_f - - pure function nuclideangle_calc_f(this, gin, gout, mu, uvw, i_azi, & - i_pol) result(f) - class(NuclideAngle), intent(in) :: this - integer, intent(in) :: gin ! Incoming Energy Group - integer, intent(in) :: gout ! Outgoing Energy Group - real(8), intent(in) :: mu ! Angle of interest - real(8), intent(in), optional :: uvw(3) ! Direction vector - integer, intent(in), optional :: i_azi ! Incoming Energy Group - integer, intent(in), optional :: i_pol ! Outgoing Energy Group - real(8) :: f ! Return value of f(mu) - - real(8) :: dmu, r - integer :: imu - integer :: i_azi_, i_pol_ - if (present(i_azi) .and. present(i_pol)) then - i_azi_ = i_azi - i_pol_ = i_pol - else if (present(uvw)) then - call find_angle(this % polar, this % azimuthal, uvw, i_azi_, i_pol_) - end if - - if (this % scatt_type == ANGLE_LEGENDRE) then - f = evaluate_legendre(this % scatter(gout,gin,:,i_azi_,i_pol_), mu) - else if (this % scatt_type == ANGLE_TABULAR) then - dmu = TWO / real(this % order - 1,8) - ! Find mu bin algebraically, knowing that the spacing is equal - f = (mu + ONE) / dmu + ONE - imu = floor(f) - ! But save the amount that mu is past the previous index - ! so we can use interpolation later. - f = f - real(imu,8) - ! Adjust so interpolation works on the last bin if necessary - if (imu == size(this % scatter, dim=3)) then - imu = imu - 1 - end if - - ! Now intepolate to find f(mu) - r = f / dmu - f = (ONE - r) * this % scatter(gout,gin,imu,i_azi_,i_pol_) + & - r * this % scatter(gout,gin,imu+1,i_azi_,i_pol_) - else ! (ANGLE_HISTOGRAM) - dmu = TWO / real(this % order,8) - ! Find mu bin algebraically, knowing that the spacing is equal - imu = floor((mu + ONE) / dmu + ONE) - ! Adjust so interpolation works on the last bin if necessary - if (imu == size(this % scatter, dim=3)) then - imu = imu - 1 - end if - f = this % scatter(gout, gin, imu,i_azi_,i_pol_) - - end if - - end function nuclideangle_calc_f - end module nuclide_header diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index 949bd8707e..003b31d87d 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -35,26 +35,27 @@ module scattdata_header type(Jagged2D), allocatable :: dist(:) ! (Gin % data(Order/Nmu x Gout) integer, allocatable :: gmin(:) ! Minimum outgoing group integer, allocatable :: gmax(:) ! Maximum outgoing group + real(8), allocatable :: scattxs(:) ! Isotropic Sigma_{s,g_{in}} contains procedure(scattdata_init_), deferred :: init ! Initializes ScattData procedure(scattdata_calc_f_), deferred :: calc_f ! Calculates f, given mu procedure(scattdata_sample_), deferred :: sample ! sample the scatter event + ! Reproduces an unnormalized scattering matrix + procedure :: get_matrix => scattdata_get_matrix end type ScattData abstract interface - subroutine scattdata_init_(this, order, energy, mult, coeffs) + subroutine scattdata_init_(this, mult, coeffs) import ScattData - class(ScattData), intent(inout) :: this ! Object to work on - integer, intent(in) :: order ! Data Order - real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix + class(ScattData), intent(inout) :: this ! Scattering Object to work with real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix - real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use + real(8), intent(inout) :: coeffs(:,:,:) ! Coefficients to use end subroutine scattdata_init_ pure function scattdata_calc_f_(this, gin, gout, mu) result(f) import ScattData - class(ScattData), intent(in) :: this ! The ScattData to evaluate + class(ScattData), intent(in) :: this !! Scattering Object to work with integer, intent(in) :: gin ! Incoming Energy Group integer, intent(in) :: gout ! Outgoing Energy Group real(8), intent(in) :: mu ! Angle of interest @@ -64,7 +65,7 @@ module scattdata_header subroutine scattdata_sample_(this, gin, gout, mu, wgt) import ScattData - class(ScattData), intent(in) :: this ! Scattering Object to Use + class(ScattData), intent(in) :: this !! Scattering Object to work with integer, intent(in) :: gin ! Incoming neutron group integer, intent(out) :: gout ! Sampled outgoin group real(8), intent(out) :: mu ! Sampled change in angle @@ -76,18 +77,20 @@ module scattdata_header ! Maximal value for rejection sampling from rectangle type(Jagged1D), allocatable :: max_val(:) ! (Gin % data(Gout)) contains - procedure :: init => scattdatalegendre_init - procedure :: calc_f => scattdatalegendre_calc_f - procedure :: sample => scattdatalegendre_sample + procedure :: init => scattdatalegendre_init + procedure :: calc_f => scattdatalegendre_calc_f + procedure :: sample => scattdatalegendre_sample + ! procedure :: get_matrix => scattdatalegendre_get_matrix end type ScattDataLegendre type, extends(ScattData) :: ScattDataHistogram real(8), allocatable :: mu(:) ! Mu bins real(8) :: dmu ! Mu spacing contains - procedure :: init => scattdatahistogram_init - procedure :: calc_f => scattdatahistogram_calc_f - procedure :: sample => scattdatahistogram_sample + procedure :: init => scattdatahistogram_init + procedure :: calc_f => scattdatahistogram_calc_f + procedure :: sample => scattdatahistogram_sample + ! procedure :: get_matrix => scattdatahistogram_get_matrix end type ScattDataHistogram type, extends(ScattData) :: ScattDataTabular @@ -96,9 +99,10 @@ module scattdata_header ! PDF of f(mu) type(Jagged2D), allocatable :: fmu(:) ! (Gin % data(Order/Nmu x Gout) contains - procedure :: init => scattdatatabular_init - procedure :: calc_f => scattdatatabular_calc_f - procedure :: sample => scattdatatabular_sample + procedure :: init => scattdatatabular_init + procedure :: calc_f => scattdatatabular_calc_f + procedure :: sample => scattdatatabular_sample + procedure :: get_matrix => scattdatatabular_get_matrix end type ScattDataTabular !=============================================================================== @@ -112,16 +116,17 @@ module scattdata_header contains !=============================================================================== -! SCATTDATA_INIT builds the scattdata object +! SCATTDATA*_INIT builds the scattdata object !=============================================================================== subroutine scattdata_init(this, order, energy, mult) class(ScattData), intent(inout) :: this ! Object to work on integer, intent(in) :: order ! Data Order - real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix + real(8), intent(inout) :: energy(:,:) ! Energy Transfer Matrix real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix integer :: groups, gmin, gmax, gin + real(8) :: norm groups = size(energy, dim=1) @@ -133,6 +138,9 @@ contains ! Use energy to find the gmin and gmax values ! Also set energy values when doing it do gin = 1, groups + ! Make sure energy is normalized (i.e., CDF is 1) + norm = sum(energy(:,gin)) + if (norm /= ZERO) energy(:,gin) = energy(:,gin) / norm ! Find gmin by checking the P0 moment do gmin = 1, groups if (energy(gmin,gin) > ZERO) exit @@ -156,23 +164,42 @@ contains this % gmin(gin) = gmin this % gmax(gin) = gmax end do - end subroutine scattdata_init - subroutine scattdatalegendre_init(this, order, energy, mult, coeffs) + subroutine scattdatalegendre_init(this, mult, coeffs) class(ScattDataLegendre), intent(inout) :: this ! Object to work on - integer, intent(in) :: order ! Data Order - real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix - real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use + real(8), intent(inout) :: coeffs(:,:,:) ! Coefficients to use - real(8) :: dmu, mu, f - integer :: imu, Nmu, gout, gin, groups + real(8) :: dmu, mu, f, norm + integer :: imu, Nmu, gout, gin, groups, order + real(8), allocatable :: energy(:,:) + + groups = size(coeffs,dim=3) + order = size(coeffs,dim=1) + + ! Get scattxs value first before anything happens to coeffs + allocate(this % scattxs(groups)) + ! Get this by summing the now un-normalized P0 coefficient in coeffs + ! over all outgoing groups + this % scattxs = sum(coeffs(1,:,:),dim=1) + + allocate(energy(groups,groups)) + energy = ZERO + ! Build energy transfer probability matrix from data in coeffs + ! while also normalizing coeffs itself (making CDF of f(mu=1)=1) + do gin = 1, groups + do gout = 1, groups + norm = coeffs(1,gout,gin) + energy(gout,gin) = norm + if (norm /= ZERO) then + coeffs(:,gout,gin) = coeffs(:,gout,gin) / norm + end if + end do + end do call scattdata_init(this, order, energy, mult) - groups = size(this % energy,dim=1) - allocate(this % max_val(groups)) ! Set dist values from coeffs and initialize max_val do gin = 1, groups @@ -186,7 +213,7 @@ contains ! Step through the polynomial with fixed number of points to identify ! the maximal value. Nmu = 1001 - dmu = TWO / real(Nmu,8) + dmu = TWO / real(Nmu - 1,8) do gin = 1, groups do gout = this % gmin(gin), this % gmax(gin) do imu = 1, Nmu @@ -209,20 +236,39 @@ contains this % max_val(gin) % data(gout) * 1.1_8 end do end do - end subroutine scattdatalegendre_init - subroutine scattdatahistogram_init(this, order, energy, mult, coeffs) + subroutine scattdatahistogram_init(this, mult, coeffs) class(ScattDataHistogram), intent(inout) :: this ! Object to work on - integer, intent(in) :: order ! Data Order - real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix - real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix - real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use + real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix + real(8), intent(inout) :: coeffs(:,:,:) ! Coefficients to use - integer :: imu, gin, gout, groups + integer :: imu, gin, gout, groups, order real(8) :: norm + real(8), allocatable :: energy(:,:) - groups = size(energy,dim=1) + groups = size(coeffs,dim=3) + order = size(coeffs,dim=1) + + ! Get scattxs value first before anything happens to coeffs + allocate(this % scattxs(groups)) + ! Get this by summing the now un-normalized P0 coefficient in coeffs + ! over all outgoing groups + this % scattxs = sum(sum(coeffs(:,:,:),dim=1),dim=1) + + allocate(energy(groups,groups)) + energy = ZERO + ! Build energy transfer probability matrix from data in coeffs + ! while also normalizing coeffs itself (making CDF of f(mu=1)=1) + do gin = 1, groups + do gout = 1, groups + norm = sum(coeffs(:,gout,gin)) + energy(gout,gin) = norm + if (norm /= ZERO) then + coeffs(:,gout,gin) = coeffs(:,gout,gin) / norm + end if + end do + end do call scattdata_init(this, order, energy, mult) @@ -253,91 +299,105 @@ contains end subroutine scattdatahistogram_init - subroutine scattdatatabular_init(this, order, energy, mult, coeffs) + subroutine scattdatatabular_init(this, mult, coeffs) class(ScattDataTabular), intent(inout) :: this ! Object to work on - integer, intent(in) :: order ! Data Order - real(8), intent(in) :: energy(:,:) ! Energy Transfer Matrix - real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix - real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use + real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix + real(8), intent(inout) :: coeffs(:,:,:) ! Coefficients to use - integer :: imu, gin, gout, groups + integer :: imu, gin, gout, groups, order real(8) :: norm - logical :: legendre_flag - integer :: this_order + real(8), allocatable :: energy(:,:) - if (order < 0) then - legendre_flag = .true. - this_order = -1 * order - else - legendre_flag = .false. - this_order = order - end if + groups = size(coeffs,dim=3) + order = size(coeffs,dim=1) - groups = size(energy,dim=1) - - call scattdata_init(this, this_order, energy, mult) - - allocate(this % mu(this_order)) - this % dmu = TWO / real(this_order - 1) - this % mu = -ONE - do imu = 2, this_order - 1 - this % mu(imu) = -ONE + real(imu - 1) * this % dmu + ! Build the angular distribution mu values + allocate(this % mu(order)) + this % dmu = TWO / real(order - 1,8) + this % mu(1) = -ONE + do imu = 2, order - 1 + this % mu(imu) = -ONE + real(imu - 1,8) * this % dmu end do - this % mu(this_order) = ONE + this % mu(order) = ONE + + ! Get scattxs before anything happens to coeffs + allocate(this % scattxs(groups)) + ! Get this by integrating the scattering distribution over all mu points + ! and then combining over all outgoing groups + ! over all outgoing groups + do gin = 1, groups + norm = ZERO + do gout = 1, groups + do imu = 2, order + norm = norm + HALF * this % dmu * (coeffs(imu - 1,gout,gin) + & + coeffs(imu,gout,gin)) + end do + end do + this % scattxs(gin) = norm + end do + + allocate(energy(groups,groups)) + energy = ZERO + ! Build energy transfer probability matrix from data in coeffs + do gin = 1, groups + do gout = 1, groups + norm = ZERO + do imu = 2, order + norm = norm + HALF * this % dmu * & + (coeffs(imu - 1,gout,gin) + coeffs(imu,gout,gin)) + end do + ! energy(gout,gin) = sum(coeffs(:,gout,gin)) + energy(gout,gin) = norm + end do + end do + call scattdata_init(this, order, energy, mult) ! Calculate f(mu) and integrate it so we can avoid rejection sampling allocate(this % fmu(groups)) do gin = 1, groups - allocate(this % fmu(gin) % data(this_order,& - this % gmin(gin):this % gmax(gin))) + allocate(this % fmu(gin) % data(order, & + this % gmin(gin):this % gmax(gin))) do gout = this % gmin(gin), this % gmax(gin) - if (legendre_flag) then - ! Coeffs are legendre coeffs. Need to build f(mu) then integrate - ! and store the integral in this % dist - ! Ensure the coeffs are normalized - if (coeffs(1,gout,gin) /= ZERO) then - norm = ONE / coeffs(1,gout,gin) - else - norm = ONE + ! Coeffs contain f(mu), put in f(mu) as that is where the + ! PDF lives + this % fmu(gin) % data(:,gout) = coeffs(:,gout,gin) + + ! Force positivity + do imu = 1, order + if (this % fmu(gin) % data(imu,gout) < ZERO) then + this % fmu(gin) % data(imu,gout) = ZERO end if - do imu = 1, this_order - this % fmu(gin) % data(imu,gout) = & - evaluate_legendre(norm * coeffs(:,gout,gin), this % mu(imu)) - ! Force positivity - if (this % fmu(gin) % data(imu,gout) < ZERO) then - this % fmu(gin) % data(imu,gout) = ZERO - end if - end do - else - ! Coeffs contain f(mu), put in f(mu) as that is where the - ! PDF lives - this % fmu(gin) % data(:,gout) = this % dist(gin) % data(:,gout) - end if + end do ! Re-normalize fmu for numerical integration issues and in case ! the negative fix-up introduced un-normalized data norm = ZERO - do imu = 2, this_order + do imu = 2, order norm = norm + HALF * this % dmu * & (this % fmu(gin) % data(imu - 1,gout) + & this % fmu(gin) % data(imu,gout)) end do if (norm > ZERO) then - this % fmu(gin) % data(:,gout) = this % fmu(gin) % data(:,gout) / norm + this % fmu(gin) % data(:,gout) = & + this % fmu(gin) % data(:,gout) / norm end if ! Now create CDF from fmu with trapezoidal rule this % dist(gin) % data(1,gout) = ZERO - do imu = 2, this_order - 1 + do imu = 2, order this % dist(gin) % data(imu,gout) = & this % dist(gin) % data(imu - 1,gout) + & HALF * this % dmu * (this % fmu(gin) % data(imu - 1,gout) + & this % fmu(gin) % data(imu,gout)) end do - this % dist(gin) % data(this_order,gout) = ONE + ! Ensure we normalize to 1 still + norm = this % dist(gin) % data(order,gout) + if (norm > ZERO) then + this % dist(gin) % data(:,gout) = & + this % dist(gin) % data(:,gout) / norm + end if end do end do - end subroutine scattdatatabular_init !=============================================================================== @@ -547,4 +607,57 @@ contains end subroutine scattdatatabular_sample +!=============================================================================== +! SCATTDATA*_GET_MATRIX Reproduces the original scattering matrix (densely) +! using ScattData's information of fmu/dist, energy, and scattxs +!=============================================================================== + + function scattdata_get_matrix(this, req_order) result(matrix) + class(ScattData), intent(in) :: this ! Scattering Object to work with + integer, intent(in) :: req_order ! Requested order of matrix + real(8), allocatable :: matrix(:,:,:) ! Resultant matrix just built + + integer :: order, groups, gin, gout + + groups = size(this % energy) + order = min(req_order,size(this % dist(1) % data(:,1))) + + allocate(matrix(order,groups,groups)) + ! Initialize to 0; this way the zero entries in the dense matrix dont + ! need to be explicitly set, requiring a significant increase in the + ! lines of code. + matrix = ZERO + do gin = 1, groups + do gout = this % gmin(gin), this % gmax(gin) + matrix(:,gout,gin) = this % scattxs(gin) * & + this % energy(gin) % data(gout) * & + this % dist(gin) % data(1:order,gout) + end do + end do + end function scattdata_get_matrix + + function scattdatatabular_get_matrix(this, req_order) result(matrix) + class(ScattDataTabular), intent(in) :: this ! Scattering Object to work with + integer, intent(in) :: req_order ! Requested order of matrix + real(8), allocatable :: matrix(:,:,:) ! Resultant matrix just built + + integer :: order, groups, gin, gout + + groups = size(this % energy) + order = min(req_order,size(this % dist(1) % data(:,1))) + + allocate(matrix(order,groups,groups)) + ! Initialize to 0; this way the zero entries in the dense matrix dont + ! need to be explicitly set, requiring a significant increase in the + ! lines of code. + matrix = ZERO + do gin = 1, groups + do gout = this % gmin(gin), this % gmax(gin) + matrix(:,gout,gin) = this % scattxs(gin) * & + this % energy(gin) % data(gout) * & + this % fmu(gin) % data(1:order,gout) + end do + end do + end function scattdatatabular_get_matrix + end module scattdata_header From c2aa26411a4b57824067f1e1dba61b10bc3af146 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 7 Mar 2016 16:01:01 -0500 Subject: [PATCH 356/650] incorporated the latest features angle-dependent mgxs --- src/macroxs_header.F90 | 224 +++++++------ src/nuclide_header.F90 | 665 +++++++++++++++++++++++++-------------- src/scattdata_header.F90 | 9 +- 3 files changed, 535 insertions(+), 363 deletions(-) diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index d32cde96e3..9eb3ea8640 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -17,9 +17,6 @@ module macroxs_header !=============================================================================== type, abstract :: MacroXS - ! Data Order - integer :: order - contains procedure(macroxs_init_), deferred :: init ! initializes object procedure(macroxs_get_xs_), deferred :: get_xs ! Return xs @@ -149,68 +146,73 @@ contains integer :: i ! loop index over nuclides integer :: gin, gout ! group indices real(8) :: atom_density ! atom density of a nuclide - integer :: imu real(8) :: norm - integer :: mat_max_order, order, l + integer :: mat_max_order, order, order_dim, nuc_order_dim real(8), allocatable :: temp_mult(:,:) real(8), allocatable :: scatt_coeffs(:,:,:) + ! Determine the scattering type of our data and ensure all scattering orders + ! are the same. + select type(nuc => nuclides(mat % nuclide(1)) % obj) + type is (NuclideIso) + order = size(nuc % scatter % dist(1) % data, dim=1) + end select ! If we have tabular only data, then make sure all datasets have same size if (scatt_type == ANGLE_HISTOGRAM) then - ! Check all scattering data of same size - order = nuclides(mat % nuclide(1)) % obj % order + ! Check all scattering data to ensure it is the same size + ! order = size(nuclides(mat % nuclide(1)) % obj % scatter % data,dim=1) do i = 2, mat % n_nuclides - if (order /= nuclides(mat % nuclide(i)) % obj % order) then - call fatal_error("All Histogram Scattering Entries Must Be Same Length!") - end if + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (NuclideIso) + if (order /= size(nuc % scatter % dist(1) % data,dim=1)) & + call fatal_error("All Histogram Scattering Entries Must Be& + & Same Length!") + end select end do - ! Ok, got our order, store it - this % order = order + ! Ok, got our order, store the dimensionality + order_dim = order - ! Allocate stuff for later - allocate(scatt_coeffs(order, groups, groups)) - scatt_coeffs = ZERO + ! Set our Scatter Object Type allocate(ScattDataHistogram :: this % scatter) else if (scatt_type == ANGLE_TABULAR) then - ! Check all scattering data of same size - order = nuclides(mat % nuclide(1)) % obj % order + ! Check all scattering data to ensure it is the same size do i = 2, mat % n_nuclides - if (order /= nuclides(mat % nuclide(i)) % obj % order) then - call fatal_error("All Tabular Scattering Entries Must Be Same Length!") - return - end if + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (NuclideIso) + if (order /= size(nuc % scatter % dist(1) % data,dim=1)) & + call fatal_error("All Tabular Scattering Entries Must Be& + & Same Length!") + end select end do - ! Ok, got our order, store it - this % order = order + ! Ok, got our order, store the dimensionality + order_dim = order - ! Allocate stuff for later - allocate(scatt_coeffs(this % order, groups, groups)) - scatt_coeffs = ZERO + ! Set our Scatter Object Type allocate(ScattDataTabular :: this % scatter) else if (scatt_type == ANGLE_LEGENDRE) then - ! Otherwise find the maximum scattering order ! Need to determine the maximum scattering order of all data in this material mat_max_order = 0 do i = 1, mat % n_nuclides - if (nuclides(mat % nuclide(i)) % obj % order > mat_max_order) then - mat_max_order = nuclides(mat % nuclide(i)) % obj % order - end if + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (NuclideIso) + if (size(nuc % scatter % dist(1) % data,dim=1) > mat_max_order) & + mat_max_order = size(nuc % scatter % dist(1) % data,dim=1) + end select end do ! Now need to compare this material maximum scattering order with ! the problem wide max scatt order and use whichever is lower - order = min(mat_max_order, max_order) + 1 - this % order = order + order = min(mat_max_order, max_order) + ! Ok, got our order, store the dimensionality + order_dim = order + 1 - ! Now we can allocate our scatt_coeffs object accordingly - allocate(scatt_coeffs(this % order, groups, groups)) - scatt_coeffs = ZERO + ! Set our Scatter Object Type allocate(ScattDataLegendre :: this % scatter) end if - ! Allocate and initialize data within macro_xs(i_mat) object + ! Allocate and initialize data needed for macro_xs(i_mat) object allocate(this % total(groups)) this % total = ZERO allocate(this % absorption(groups)) @@ -225,10 +227,12 @@ contains end if allocate(this % nu_fission(groups)) this % nu_fission = ZERO - allocate(this % chi(groups, groups)) + allocate(this % chi(groups,groups)) this % chi = ZERO - allocate(temp_mult(groups, groups)) + allocate(temp_mult(groups,groups)) temp_mult = ZERO + allocate(scatt_coeffs(order_dim,groups,groups)) + scatt_coeffs = ZERO ! Add contribution from each nuclide in material do i = 1, mat % n_nuclides @@ -276,21 +280,23 @@ contains end do ! Get the complete scattering matrix - scatt_coeffs(1:min(nuc % order, order),:,:) = scatt_coeffs + & + nuc_order_dim = size(nuc % scatter % dist(1) % data,dim=1) + scatt_coeffs(1:min(nuc_order_dim, order_dim),:,:) = & + scatt_coeffs(1:min(nuc_order_dim, order_dim),:,:) + & atom_density * & - nuc % scatter % get_matrix(min(nuc % order, order)) + nuc % scatter % get_matrix(min(nuc_order_dim,order_dim)) type is (NuclideAngle) call fatal_error("Invalid Passing of NuclideAngle to MacroXSIso Object") end select end do + ! Initialize the ScattData Object call this % scatter % init(temp_mult,scatt_coeffs) ! Now normalize chi if (mat % fissionable) then do gin = 1, groups - ! Normalize Chi norm = sum(this % chi(:,gin)) if (norm > ZERO) then this % chi(:,gin) = this % chi(:,gin) / norm @@ -298,7 +304,7 @@ contains end do end if - ! Deallocate temporaries for the next material + ! Deallocate temporaries deallocate(scatt_coeffs, temp_mult) end subroutine macroxsiso_init @@ -318,9 +324,8 @@ contains integer :: gin, gout ! group indices real(8) :: atom_density ! atom density of a nuclide integer :: ipol, iazi, n_pol, n_azi - integer :: imu real(8) :: norm - integer :: mat_max_order, order, l + integer :: mat_max_order, order, order_dim, nuc_order_dim real(8), allocatable :: temp_mult(:,:,:,:) real(8), allocatable :: scatt_coeffs(:,:,:,:,:) @@ -346,21 +351,28 @@ contains end select end do + ! Determine the scattering type of our data and ensure all scattering orders + ! are the same. + select type(nuc => nuclides(mat % nuclide(1)) % obj) + type is (NuclideAngle) + order = size(nuc % scatter(1,1) % obj % dist(1) % data, dim=1) + end select ! If we have tabular only data, then make sure all datasets have same size if (scatt_type == ANGLE_HISTOGRAM) then - ! Check all scattering data of same size - order = nuclides(mat % nuclide(1)) % obj % order + ! Check all scattering data to ensure it is the same size + ! order = size(nuclides(mat % nuclide(1)) % obj % scatter % data,dim=1) do i = 2, mat % n_nuclides - if (order /= nuclides(mat % nuclide(i)) % obj % order) then - call fatal_error("All Histogram Scattering Entries Must Be Same Length!") - end if + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (NuclideAngle) + if (order /= size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1)) & + call fatal_error("All Histogram Scattering Entries Must Be& + & Same Length!") + end select end do - ! Ok, got our order, store it - this % order = order + ! Ok, got our order, store the dimensionality + order_dim = order - ! Allocate stuff for later - allocate(scatt_coeffs(this % order,groups,groups,n_azi,n_pol)) - scatt_coeffs = ZERO + ! Set our Scatter Object Type allocate(this % scatter(n_azi, n_pol)) do ipol = 1, n_pol do iazi = 1, n_azi @@ -369,19 +381,19 @@ contains end do else if (scatt_type == ANGLE_TABULAR) then - ! Check all scattering data of same size - order = nuclides(mat % nuclide(1)) % obj % order + ! Check all scattering data to ensure it is the same size do i = 2, mat % n_nuclides - if (order /= nuclides(mat % nuclide(i)) % obj % order) then - call fatal_error("All Tabular Scattering Entries Must Be Same Length!") - end if + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (NuclideAngle) + if (order /= size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1)) & + call fatal_error("All Tabular Scattering Entries Must Be& + & Same Length!") + end select end do - ! Ok, got our order, store it - this % order = order + ! Ok, got our order, store the dimensionality + order_dim = order - ! Allocate stuff for later - allocate(scatt_coeffs(this % order, groups, groups, n_azi, n_pol)) - scatt_coeffs = ZERO + ! Set our Scatter Object Type allocate(this % scatter(n_azi, n_pol)) do ipol = 1, n_pol do iazi = 1, n_azi @@ -390,23 +402,23 @@ contains end do else if (scatt_type == ANGLE_LEGENDRE) then - ! Otherwise find the maximum scattering order ! Need to determine the maximum scattering order of all data in this material mat_max_order = 0 do i = 1, mat % n_nuclides - if (nuclides(mat % nuclide(i)) % obj % order > mat_max_order) then - mat_max_order = nuclides(mat % nuclide(i)) % obj % order - end if + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (NuclideAngle) + if (size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1) > mat_max_order) & + mat_max_order = size(nuc % scatter(1,1) % obj% dist(1) % data,dim=1) + end select end do ! Now need to compare this material maximum scattering order with ! the problem wide max scatt order and use whichever is lower order = min(mat_max_order, max_order) - this % order = order + 1 + ! Ok, got our order, store the dimensionality + order_dim = order + 1 - ! Now we can allocate our scatt_coeffs object accordingly - allocate(scatt_coeffs(this % order, groups, groups, n_azi, n_pol)) - scatt_coeffs = ZERO + ! Set our Scatter Object Type allocate(this % scatter(n_azi, n_pol)) do ipol = 1, n_pol do iazi = 1, n_azi @@ -430,10 +442,12 @@ contains end if allocate(this % nu_fission(groups,n_azi,n_pol)) this % nu_fission = ZERO - allocate(this % chi(groups, groups, n_azi, n_pol)) + allocate(this % chi(groups, groups,n_azi,n_pol)) this % chi = ZERO allocate(temp_mult(groups,groups,n_azi,n_pol)) temp_mult = ZERO + allocate(scatt_coeffs(order_dim,groups,groups,n_azi,n_pol)) + scatt_coeffs = ZERO ! Add contribution from each nuclide in material do i = 1, mat % n_nuclides @@ -474,60 +488,35 @@ contains end if end if - ! Now time to do the scattering + ! Get the multiplication matrix do ipol = 1, n_pol do iazi = 1, n_azi do gin = 1, groups -!!! Needs to be updated to match iso!!! -! this % scattxs(gin,iazi,ipol) = this % scattxs(gin,iazi,ipol) + & -! atom_density * nuc % scattxs(gin,iazi,ipol) do gout = nuc % scatter(iazi,ipol) % obj % gmin(gin), & - nuc % scatter(iazi,ipol) % obj % gmax(gin) - - ! Multiplicity matrix - temp_mult(gout,gin,iazi,ipol) = & - temp_mult(gout,gin,iazi,ipol) + atom_density * & - nuc % scatter(iazi,ipol) % obj % mult(gin) % data(gout) - - if (scatt_type == ANGLE_HISTOGRAM) then - ! Determine the angular distribution - do imu = 1, order - scatt_coeffs(imu,gout,gin,iazi,ipol) = & - scatt_coeffs(imu,gout,gin,iazi,ipol) + & - atom_density * & - nuc % scatter(iazi,ipol) % obj % dist(gin) % data(imu,gout) - end do - else if (scatt_type == ANGLE_TABULAR) then - select type(scatt =>nuc % scatter(iazi,ipol) % obj) - type is (ScattDataTabular) - do imu = 1, order - scatt_coeffs(imu,gout,gin,iazi,ipol) = & - scatt_coeffs(imu,gout,gin,iazi,ipol) + & - atom_density * scatt % fmu(gin) % data(imu,gout) - end do - end select - else if (scatt_type == ANGLE_LEGENDRE) then - ! Determine the angular distribution coefficients so we can later - ! expand do the complete distribution - do l = 1, min(nuc % order, order) + 1 - scatt_coeffs(l,gout,gin,iazi,ipol) = & - scatt_coeffs(l,gout,gin,iazi,ipol) + & - atom_density * & - nuc % scatter(iazi,ipol) % obj % dist(gin) % data(l,gout) - end do - end if - ! Incorporate outgoing energy PDF information - scatt_coeffs(:,gout,gin,iazi,ipol) = & - scatt_coeffs(:,gout,gin,iazi,ipol) * & - nuc % scatter(iazi,ipol) % obj % energy(gin) % data(gout) + nuc % scatter(iazi,ipol) % obj % gmax(gin) + temp_mult(gout,gin,iazi,ipol) = temp_mult(gout,gin,iazi,ipol) + & + atom_density * & + nuc % scatter(iazi,ipol) % obj % mult(gin) % data(gout) end do end do end do end do + + ! Get the complete scattering matrix + nuc_order_dim = size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1) + do ipol = 1, n_pol + do iazi = 1, n_azi + scatt_coeffs(1:min(nuc_order_dim, order_dim),:,:,iazi,ipol) = & + scatt_coeffs(1:min(nuc_order_dim, order_dim),:,:,iazi,ipol) + & + atom_density * & + nuc % scatter(iazi,ipol) % obj % get_matrix(& + min(nuc_order_dim,order_dim,iazi,ipol)) + end do + end do end select end do - ! Initialize the scattering data + ! Initialize the ScattData Object do ipol = 1, n_pol do iazi = 1, n_azi call this % scatter(iazi, ipol) % obj % init( & @@ -535,12 +524,11 @@ contains end do end do - ! Now go through and normalize chi + ! Now normalize chi if (mat % fissionable) then do ipol = 1, n_pol do iazi = 1, n_azi do gin = 1, groups - ! Normalize Chi norm = sum(this % chi(:,gin,iazi,ipol)) if (norm > ZERO) then this % chi(:,gin,iazi,ipol) = this % chi(:,gin,iazi,ipol) / norm diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 88d7ce0ea3..d2020a1e0f 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -107,9 +107,6 @@ module nuclide_header end type NuclideCE type, abstract, extends(Nuclide) :: NuclideMG - ! Scattering Order Information - integer :: order ! Order of data (Scattering for NuclideIso, - ! Number of angles for all in NuclideAngle) integer :: scatt_type ! either legendre, histogram, or tabular. contains procedure(nuclidemg_init_), deferred :: init ! Initialize the data @@ -301,7 +298,7 @@ module nuclide_header character(MAX_LINE_LEN) :: temp_str - ! Load the data + ! Load the nuclide metadata call get_node_value(node_xsdata, "name", this % name) this % name = to_lower(this % name) if (check_for_node(node_xsdata, "kT")) then @@ -330,12 +327,6 @@ module nuclide_header this % scatt_type = ANGLE_LEGENDRE end if - if (check_for_node(node_xsdata, "order")) then - call get_node_value(node_xsdata, "order", this % order) - else - call fatal_error("Order Must Be Provided!") - end if - if (check_for_node(node_xsdata, "fissionable")) then call get_node_value(node_xsdata, "fissionable", temp_str) temp_str = to_lower(temp_str) @@ -368,26 +359,26 @@ module nuclide_header real(8), allocatable :: input_scatt(:,:,:) real(8), allocatable :: temp_scatt(:,:,:) real(8) :: dmu, mu, norm - integer :: order_dim, gin, gout, l, arr_len + integer :: order, order_dim, gin, gout, l, arr_len integer :: legendre_mu_points, imu - ! Call generic data gathering routine + ! Call generic data gathering routine (will populate the metadata) call nuclidemg_init(this, node_xsdata) ! Load the more specific data if (this % fissionable) then - if (check_for_node(node_xsdata, "chi")) then + if (check_for_node(node_xsdata,"chi")) then ! Get chi allocate(this % chi(groups)) - call get_node_array(node_xsdata, "chi", this % chi) + call get_node_array(node_xsdata,"chi",this % chi) ! Get nu_fission (as a vector) - if (check_for_node(node_xsdata, "nu_fission")) then + if (check_for_node(node_xsdata,"nu_fission")) then allocate(temp_arr(groups * 1)) - call get_node_array(node_xsdata, "nu_fission", temp_arr) - allocate(this % nu_fission(groups, 1)) - this % nu_fission = reshape(temp_arr, (/groups, 1/)) + call get_node_array(node_xsdata,"nu_fission",temp_arr) + allocate(this % nu_fission(groups,1)) + this % nu_fission = reshape(temp_arr,(/groups,1/)) deallocate(temp_arr) else call fatal_error("If fissionable, must provide nu_fission!") @@ -395,21 +386,23 @@ module nuclide_header else ! Get nu_fission (as a matrix) - if (check_for_node(node_xsdata, "nu_fission")) then + if (check_for_node(node_xsdata,"nu_fission")) then allocate(temp_arr(groups*groups)) - call get_node_array(node_xsdata, "nu_fission", temp_arr) + call get_node_array(node_xsdata,"nu_fission",temp_arr) allocate(this % nu_fission(groups, groups)) - this % nu_fission = reshape(temp_arr, (/groups, groups/)) + this % nu_fission = reshape(temp_arr,(/groups,groups/)) deallocate(temp_arr) else call fatal_error("If fissionable, must provide nu_fission!") end if end if + ! If we have a need* for the fission and kappa-fission x/s, get them + ! (*Need is defined as will be using it to tally) if (get_fiss) then allocate(this % fission(groups)) - if (check_for_node(node_xsdata, "fission")) then - call get_node_array(node_xsdata, "fission", this % fission) + if (check_for_node(node_xsdata,"fission")) then + call get_node_array(node_xsdata,"fission",this % fission) else call fatal_error("Fission data missing, required due to fission& & tallies in tallies.xml file!") @@ -417,8 +410,8 @@ module nuclide_header end if if (get_kfiss) then allocate(this % k_fission(groups)) - if (check_for_node(node_xsdata, "kappa_fission")) then - call get_node_array(node_xsdata, "kappa_fission", this % k_fission) + if (check_for_node(node_xsdata,"kappa_fission")) then + call get_node_array(node_xsdata,"kappa_fission",this % k_fission) else call fatal_error("kappa_fission data missing, required due to & &kappa-fission tallies in tallies.xml file!") @@ -427,17 +420,37 @@ module nuclide_header end if allocate(this % absorption(groups)) - if (check_for_node(node_xsdata, "absorption")) then - call get_node_array(node_xsdata, "absorption", this % absorption) + if (check_for_node(node_xsdata,"absorption")) then + call get_node_array(node_xsdata,"absorption",this % absorption) else call fatal_error("Must provide absorption!") end if - ! Get scattering treatment - if (check_for_node(node_xsdata, "tabular_legendre")) then - call get_node_ptr(node_xsdata, "tabular_legendre", node_legendre_mu) + ! Get multiplication data if present + allocate(temp_mult(groups, groups)) + if (check_for_node(node_xsdata,"multiplicity")) then + arr_len = get_arraysize_double(node_xsdata,"multiplicity") + if (arr_len == groups * groups) then + allocate(temp_arr(arr_len)) + call get_node_array(node_xsdata,"multiplicity",temp_arr) + temp_mult = reshape(temp_arr, (/groups, groups/)) + deallocate(temp_arr) + else + call fatal_error("Multiplicity length not same as number of groups& + & squared!") + end if + else + temp_mult = ONE + end if + + ! Get scattering treatment information + ! Tabular_legendre tells us if we are to treat the provided + ! Legendre polynomials as tabular data (if enable is true) or leaving + ! them as Legendres (if enable is false, or the default) + if (check_for_node(node_xsdata,"tabular_legendre")) then + call get_node_ptr(node_xsdata,"tabular_legendre",node_legendre_mu) if (check_for_node(node_legendre_mu, "enable")) then - call get_node_value(node_legendre_mu, "enable", temp_str) + call get_node_value(node_legendre_mu,"enable",temp_str) temp_str = trim(to_lower(temp_str)) if (temp_str == 'true' .or. temp_str == '1') then enable_leg_mu = .true. @@ -447,48 +460,62 @@ module nuclide_header call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) end if else - enable_leg_mu = .true. - legendre_mu_points = 33 + ! Set the default (leave as Legendre polynomials) + enable_leg_mu = .false. end if - if (enable_leg_mu .and. & - check_for_node(node_legendre_mu, "num_points")) then - call get_node_value(node_legendre_mu, "num_points", & - legendre_mu_points) - if (legendre_mu_points <= 0) then - call fatal_error("num_points element must be positive and non-zero!") + ! Ok, so if we need to convert to a tabular form, get the user provided + ! number of points + if (enable_leg_mu) then + if (check_for_node(node_legendre_mu,"num_points")) then + call get_node_value(node_legendre_mu,"num_points", & + legendre_mu_points) + if (legendre_mu_points <= 0) & + call fatal_error("num_points element must be positive& + & and non-zero!") + else + ! Set the default number of points (0.0625 spacing) + legendre_mu_points = 33 end if end if end if - if (this % scatt_type == ANGLE_LEGENDRE) then - order_dim = this % order + 1 - else if (this % scatt_type == ANGLE_HISTOGRAM) then - order_dim = this % order - else if (this % scatt_type == ANGLE_TABULAR) then - order_dim = this % order + ! Get the library's value for the order + if (check_for_node(node_xsdata,"order")) then + call get_node_value(node_xsdata,"order",order) + else + call fatal_error("Order Must Be Provided!") end if + ! Before retrieving the data, store the dimensionality of the data in + ! order_dim. For Legendre data, we usually refer to it as Pn where + ! n is the order. However Pn has n+1 sets of points (since you need to + ! the count the P0 moment). Adjust for that. Histogram and Tabular + ! formats dont need this adjustment. + if (this % scatt_type == ANGLE_LEGENDRE) then + order_dim = order + 1 + else + order_dim = order + end if + + ! The input is gathered in the more user-friendly facing format of + ! Gout x Gin x Order. We will get it in that format in input_scatt, + ! but then need to convert it to a more useful ordering for processing + ! (Order x Gout x Gin). allocate(input_scatt(groups, groups, order_dim)) - if (check_for_node(node_xsdata, "scatter")) then + if (check_for_node(node_xsdata,"scatter")) then allocate(temp_arr(groups * groups * order_dim)) - call get_node_array(node_xsdata, "scatter", temp_arr) - input_scatt = reshape(temp_arr, (/groups, groups, order_dim/)) + call get_node_array(node_xsdata,"scatter",temp_arr) + input_scatt = reshape(temp_arr,(/groups,groups,order_dim/)) deallocate(temp_arr) ! Compare the number of orders given with the maximum order of the ! problem. Strip off the supefluous orders if needed. if (this % scatt_type == ANGLE_LEGENDRE) then - order_dim = min(order_dim, max_order + 1) - this % order = order_dim + order = min(order_dim - 1, max_order) + order_dim = order + 1 end if - allocate(temp_scatt(groups, groups, order_dim)) - do gin = 1, groups - do gout = 1, groups - do l = 1, order_dim - temp_scatt(gout,gin,l) = input_scatt(gout,gin,l) - end do - end do - end do + allocate(temp_scatt(groups,groups,order_dim)) + temp_scatt(:,:,:) = input_scatt(:,:,1:order_dim) ! Take input format (groups, groups, order) and convert to ! the more useful format needed for scattdata: (order, groups, groups) @@ -500,10 +527,10 @@ module nuclide_header ! Convert input parameters to what we need for the rest. this % scatt_type = ANGLE_TABULAR order_dim = legendre_mu_points - this % order = order_dim - dmu = TWO / real(this % order - 1,8) + order = order_dim + dmu = TWO / real(order - 1,8) - allocate(scatt_coeffs(order_dim, groups, groups)) + allocate(scatt_coeffs(order_dim,groups,groups)) do gin = 1, groups do gout = 1, groups norm = ZERO @@ -517,13 +544,17 @@ module nuclide_header end if scatt_coeffs(imu,gout,gin) = & evaluate_legendre(temp_scatt(gout,gin,:),mu) + ! Ensure positivity of distribution if (scatt_coeffs(imu,gout,gin) < ZERO) & scatt_coeffs(imu,gout,gin) = ZERO + ! And accrue the integral if (imu > 1) then norm = norm + HALF * dmu * (scatt_coeffs(imu-1,gout,gin) + & scatt_coeffs(imu,gout,gin)) end if end do + ! Now that we have the integral, lets ensure that the distribution + ! is normalized such that it preserves the original scattering xs if (norm > ZERO) then scatt_coeffs(:,gout,gin) = scatt_coeffs(:,gout,gin) * & temp_scatt(gout,gin,1) / norm @@ -533,7 +564,7 @@ module nuclide_header else ! Sticking with current representation, carry forward but change ! the array ordering - allocate(scatt_coeffs(order_dim, groups, groups)) + allocate(scatt_coeffs(order_dim,groups,groups)) do gin = 1, groups do gout = 1, groups do l = 1, order_dim @@ -545,28 +576,9 @@ module nuclide_header deallocate(temp_scatt) else call fatal_error("Must provide scatter!") - return end if - ! Get Mult Data - allocate(temp_mult(groups, groups)) - if (check_for_node(node_xsdata, "multiplicity")) then - arr_len = get_arraysize_double(node_xsdata, "multiplicity") - if (arr_len == groups * groups) then - allocate(temp_arr(arr_len)) - call get_node_array(node_xsdata, "multiplicity", temp_arr) - temp_mult = reshape(temp_arr, (/groups, groups/)) - deallocate(temp_arr) - else - call fatal_error("Multiplicity length not same as number of groups& - & squared!") - return - end if - else - temp_mult = ONE - end if - - ! Allocate and initialize our ScattData Object.. + ! Allocate and initialize our ScattData Object. if (this % scatt_type == ANGLE_HISTOGRAM) then allocate(ScattDataHistogram :: this % scatter) else if (this % scatt_type == ANGLE_TABULAR) then @@ -576,18 +588,18 @@ module nuclide_header end if ! Initialize the ScattData Object - call this % scatter % init(temp_mult, scatt_coeffs(:,:,:)) + call this % scatter % init(temp_mult, scatt_coeffs) ! Get, or infer, total xs data. allocate(this % total(groups)) - if (check_for_node(node_xsdata, "total")) then - call get_node_array(node_xsdata, "total", this % total) + if (check_for_node(node_xsdata,"total")) then + call get_node_array(node_xsdata,"total",this % total) else this % total = this % absorption + this % scatter % scattxs end if ! Deallocate temporaries for the next material - deallocate(scatt_coeffs, temp_mult) + deallocate(input_scatt,scatt_coeffs,temp_mult) end subroutine nuclideiso_init @@ -600,168 +612,331 @@ module nuclide_header logical, intent(in) :: get_fiss ! Should we get fiss data? integer, intent(in) :: max_order ! Maximum requested order - real(8), allocatable :: temp_arr(:) - integer :: arr_len - real(8) :: dangle - integer :: iangle - integer :: order_dim + type(Node), pointer :: node_legendre_mu + character(MAX_LINE_LEN) :: temp_str + logical :: enable_leg_mu + real(8), allocatable :: temp_arr(:) + real(8), allocatable :: temp_mult(:,:,:,:) + real(8), allocatable :: scatt_coeffs(:,:,:,:,:) + real(8), allocatable :: input_scatt(:,:,:,:,:) + real(8), allocatable :: temp_scatt(:,:,:,:,:) + real(8) :: dmu, mu, norm, dangle + integer :: order, order_dim, gin, gout, l, arr_len + integer :: legendre_mu_points, imu, i_pol, i_azi - ! Call generic data gathering routine + ! Call generic data gathering routine (will populate the metadata) call nuclidemg_init(this, node_xsdata) - if (this % scatt_type == ANGLE_LEGENDRE) then - order_dim = this % order + 1 - else if (this % scatt_type == ANGLE_HISTOGRAM) then - order_dim = this % order - else if (this % scatt_type == ANGLE_TABULAR) then - order_dim = this % order + if (check_for_node(node_xsdata, "num_polar")) then + call get_node_value(node_xsdata, "num_polar", this % n_pol) + else + call fatal_error("num_polar Must Be Provided!") end if - ! if (check_for_node(node_xsdata, "num_polar")) then - ! call get_node_value(node_xsdata, "num_polar", this % n_pol) - ! else - ! call fatal_error("num_polar Must Be Provided!") - ! end if + if (check_for_node(node_xsdata, "num_azimuthal")) then + call get_node_value(node_xsdata, "num_azimuthal", this % n_azi) + else + call fatal_error("num_azimuthal Must Be Provided!") + end if - ! if (check_for_node(node_xsdata, "num_azimuthal")) then - ! call get_node_value(node_xsdata, "num_azimuthal", this % n_azi) - ! else - ! call fatal_error("num_azimuthal Must Be Provided!") - ! end if + ! Load angle data, if present (else equally spaced) + allocate(this % polar(this % n_pol)) + allocate(this % azimuthal(this % n_azi)) + if (check_for_node(node_xsdata, "polar")) then + call fatal_error("User-Specified polar angle bins not yet supported!") + ! When this feature is supported, this line will be activated + call get_node_array(node_xsdata, "polar", this % polar) + else + dangle = PI / real(this % n_pol,8) + do i_pol = 1, this % n_pol + this % polar(i_pol) = (real(i_pol,8) - HALF) * dangle + end do + end if + if (check_for_node(node_xsdata, "azimuthal")) then + call fatal_error("User-Specified azimuthal angle bins not yet supported!") + ! When this feature is supported, this line will be activated + call get_node_array(node_xsdata, "azimuthal", this % azimuthal) + else + dangle = TWO * PI / real(this % n_azi,8) + do i_azi = 1, this % n_azi + this % azimuthal(i_azi) = -PI + (real(i_azi,8) - HALF) * dangle + end do + end if - ! ! Load angle data, if present (else equally spaced) - ! allocate(this % polar(this % n_pol)) - ! allocate(this % azimuthal(this % n_azi)) - ! if (check_for_node(node_xsdata, "polar")) then - ! call fatal_error("User-Specified polar angle bins not yet supported!") - ! ! When this feature is supported, this line will be activated - ! call get_node_array(node_xsdata, "polar", this % polar) - ! else - ! dangle = PI / real(this % n_pol,8) - ! do iangle = 1, this % n_pol - ! this % polar(iangle) = (real(iangle,8) - HALF) * dangle - ! end do - ! end if - ! if (check_for_node(node_xsdata, "azimuthal")) then - ! call fatal_error("User-Specified azimuthal angle bins not yet supported!") - ! ! When this feature is supported, this line will be activated - ! call get_node_array(node_xsdata, "azimuthal", this % azimuthal) - ! else - ! dangle = TWO * PI / real(this % n_azi,8) - ! do iangle = 1, this % n_azi - ! this % azimuthal(iangle) = -PI + (real(iangle,8) - HALF) * dangle - ! end do - ! end if + ! Load the more specific data + if (this % fissionable) then - ! ! Load the more specific data - ! if (this % fissionable) then + if (check_for_node(node_xsdata,"chi")) then + ! Get chi + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata,"chi",temp_arr) + allocate(this % chi(groups,this % n_azi,this % n_pol)) + this % chi = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) + deallocate(temp_arr) - ! if (check_for_node(node_xsdata, "chi")) then - ! ! Get chi - ! allocate(temp_arr(groups * this % n_azi * this % n_pol)) - ! call get_node_array(node_xsdata, "chi", temp_arr) - ! allocate(this % chi(groups, this % n_azi, this % n_pol)) - ! this % chi = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) - ! deallocate(temp_arr) + ! Get nu_fission (as a vector) + if (check_for_node(node_xsdata,"nu_fission")) then + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata,"nu_fission", temp_arr) + allocate(this % nu_fission(groups,1,this % n_azi,this % n_pol)) + this % nu_fission = reshape(temp_arr, (/groups,1,this % n_azi, & + this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("If fissionable, must provide nu_fission!") + end if - ! ! Get nu_fission (as a vector) - ! if (check_for_node(node_xsdata, "nu_fission")) then - ! allocate(temp_arr(groups * this % n_azi * this % n_pol)) - ! call get_node_array(node_xsdata, "nu_fission", temp_arr) - ! allocate(this % nu_fission(groups, 1, this % n_azi, this % n_pol)) - ! this % nu_fission = reshape(temp_arr, (/groups, 1, this % n_azi, & - ! this % n_pol/)) - ! deallocate(temp_arr) - ! else - ! call fatal_error("If fissionable, must provide nu_fission!") - ! end if + else + ! Get nu_fission (as a matrix) + if (check_for_node(node_xsdata,"nu_fission")) then - ! else - ! ! Get nu_fission (as a matrix) - ! if (check_for_node(node_xsdata, "nu_fission")) then + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata,"nu_fission",temp_arr) + allocate(this % nu_fission(groups,groups,this % n_azi,this % n_pol)) + this % nu_fission = reshape(temp_arr,(/groups,groups, & + this % n_azi,this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("If fissionable, must provide nu_fission!") + end if + end if + ! If we have a need* for the fission and kappa-fission x/s, get them + ! (*Need is defined as will be using it to tally) + if (get_fiss) then + if (check_for_node(node_xsdata,"fission")) then + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata,"fission",temp_arr) + allocate(this % fission(groups,this % n_azi,this % n_pol)) + this % fission = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("Fission data missing, required due to fission& + & tallies in tallies.xml file!") + end if + end if + if (get_kfiss) then + if (check_for_node(node_xsdata,"kappa_fission")) then + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata,"kappa_fission",temp_arr) + allocate(this % k_fission(groups,this % n_azi,this % n_pol)) + this % k_fission = reshape(temp_arr,(/groups, this % n_azi,this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("kappa_fission data missing, required due to & + &kappa-fission tallies in tallies.xml file!") + end if + end if + end if - ! allocate(temp_arr(groups * this % n_azi * this % n_pol)) - ! call get_node_array(node_xsdata, "nu_fission", temp_arr) - ! allocate(this % nu_fission(groups, groups, this % n_azi, this % n_pol)) - ! this % nu_fission = reshape(temp_arr, (/groups, groups, & - ! this % n_azi, this % n_pol/)) - ! deallocate(temp_arr) - ! else - ! call fatal_error("If fissionable, must provide nu_fission!") - ! end if - ! end if - ! if (get_fiss) then - ! if (check_for_node(node_xsdata, "fission")) then - ! allocate(temp_arr(groups * this % n_azi * this % n_pol)) - ! call get_node_array(node_xsdata, "fission", temp_arr) - ! allocate(this % fission(groups, this % n_azi, this % n_pol)) - ! this % fission = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) - ! deallocate(temp_arr) - ! else - ! call fatal_error("Fission data missing, required due to fission& - ! & tallies in tallies.xml file!") - ! end if - ! end if - ! if (get_kfiss) then - ! if (check_for_node(node_xsdata, "kappa_fission")) then - ! allocate(temp_arr(groups * this % n_azi * this % n_pol)) - ! call get_node_array(node_xsdata, "kappa_fission", temp_arr) - ! allocate(this % k_fission(groups, this % n_azi, this % n_pol)) - ! this % k_fission = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) - ! deallocate(temp_arr) - ! else - ! call fatal_error("kappa_fission data missing, required due to & - ! &kappa-fission tallies in tallies.xml file!") - ! end if - ! end if - ! end if + if (check_for_node(node_xsdata,"absorption")) then + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata,"absorption",temp_arr) + allocate(this % absorption(groups,this % n_azi,this % n_pol)) + this % absorption = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("Must provide absorption!") + end if - ! if (check_for_node(node_xsdata, "absorption")) then - ! allocate(temp_arr(groups * this % n_azi * this % n_pol)) - ! call get_node_array(node_xsdata, "absorption", temp_arr) - ! allocate(this % absorption(groups, this % n_azi, this % n_pol)) - ! this % absorption = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) - ! deallocate(temp_arr) - ! else - ! call fatal_error("Must provide absorption!") - ! end if + ! Get multiplication data if present + allocate(temp_mult(groups,groups,this % n_azi,this % n_pol)) + if (check_for_node(node_xsdata,"multiplicity")) then + arr_len = get_arraysize_double(node_xsdata,"multiplicity") + if (arr_len == groups * groups * this % n_azi * this % n_pol) then + allocate(temp_arr(arr_len)) + call get_node_array(node_xsdata,"multiplicity",temp_arr) + temp_mult = reshape(temp_arr,(/groups,groups,this % n_azi,this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("Multiplicity length not same as number of groups& + & squared!") + end if + else + temp_mult = ONE + end if - ! allocate(this % scatter(groups, groups, order_dim, this % n_azi, this % n_pol)) - ! if (check_for_node(node_xsdata, "scatter")) then - ! allocate(temp_arr(groups * groups * order_dim * this % n_azi * this%n_pol)) - ! call get_node_array(node_xsdata, "scatter", temp_arr) - ! this % scatter = reshape(temp_arr, (/groups, groups, order_dim, & - ! this%n_azi,this%n_pol/)) - ! deallocate(temp_arr) - ! else - ! call fatal_error("Must provide scatter!") - ! end if + ! Get scattering treatment information + ! Tabular_legendre tells us if we are to treat the provided + ! Legendre polynomials as tabular data (if enable is true) or leaving + ! them as Legendres (if enable is false, or the default) + if (check_for_node(node_xsdata,"tabular_legendre")) then + call get_node_ptr(node_xsdata,"tabular_legendre",node_legendre_mu) + if (check_for_node(node_legendre_mu, "enable")) then + call get_node_value(node_legendre_mu,"enable",temp_str) + temp_str = trim(to_lower(temp_str)) + if (temp_str == 'true' .or. temp_str == '1') then + enable_leg_mu = .true. + elseif (temp_str == 'false' .or. temp_str == '0') then + enable_leg_mu = .false. + else + call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) + end if + else + ! Set the default (leave as Legendre polynomials) + enable_leg_mu = .false. + end if + ! Ok, so if we need to convert to a tabular form, get the user provided + ! number of points + if (enable_leg_mu) then + if (check_for_node(node_legendre_mu,"num_points")) then + call get_node_value(node_legendre_mu,"num_points", & + legendre_mu_points) + if (legendre_mu_points <= 0) & + call fatal_error("num_points element must be positive& + & and non-zero!") + else + ! Set the default number of points (0.0625 spacing) + legendre_mu_points = 33 + end if + end if + end if - ! if (check_for_node(node_xsdata, "total")) then - ! allocate(temp_arr(groups * this % n_azi * this % n_pol)) - ! call get_node_array(node_xsdata, "total", temp_arr) - ! allocate(this % total(groups, this % n_azi, this % n_pol)) - ! this % total = reshape(temp_arr, (/groups, this % n_azi, this % n_pol/)) - ! deallocate(temp_arr) - ! else - ! this % total = this % absorption + sum(this%scatter(:,:,1,:,:),dim=1) - ! end if + ! Get the library's value for the order + if (check_for_node(node_xsdata,"order")) then + call get_node_value(node_xsdata,"order",order) + else + call fatal_error("Order Must Be Provided!") + end if - ! ! Get Mult Data - ! allocate(this % mult(groups, groups, this % n_azi, this % n_pol)) - ! if (check_for_node(node_xsdata, "multiplicity")) then - ! arr_len = get_arraysize_double(node_xsdata, "multiplicity") - ! if (arr_len == groups * groups * this % n_azi * this % n_pol) then - ! allocate(temp_arr(arr_len)) - ! call get_node_array(node_xsdata, "multiplicity", temp_arr) - ! this % mult = reshape(temp_arr, (/groups, groups, this % n_azi, this % n_pol/)) - ! deallocate(temp_arr) - ! else - ! call fatal_error("Multiplicity Length Does Not Match!") - ! end if - ! else - ! this % mult = ONE - ! end if + ! Before retrieving the data, store the dimensionality of the data in + ! order_dim. For Legendre data, we usually refer to it as Pn where + ! n is the order. However Pn has n+1 sets of points (since you need to + ! the count the P0 moment). Adjust for that. Histogram and Tabular + ! formats dont need this adjustment. + if (this % scatt_type == ANGLE_LEGENDRE) then + order_dim = order + 1 + else + order_dim = order + end if + + ! The input is gathered in the more user-friendly facing format of + ! Gout x Gin x Order x Azi x Pol. We will get it in that format in + ! input_scatt, but then need to convert it to a more useful ordering + ! for processing (Order x Gout x Gin x Azi x Pol). + allocate(input_scatt(groups,groups,order_dim,this % n_azi,this % n_pol)) + if (check_for_node(node_xsdata,"scatter")) then + allocate(temp_arr(groups * groups * order_dim * this % n_azi * & + this % n_pol)) + call get_node_array(node_xsdata,"scatter",temp_arr) + input_scatt = reshape(temp_arr,(/groups,groups,order_dim,this % n_azi, & + this % n_pol/)) + deallocate(temp_arr) + + ! Compare the number of orders given with the maximum order of the + ! problem. Strip off the supefluous orders if needed. + if (this % scatt_type == ANGLE_LEGENDRE) then + order = min(order_dim - 1, max_order) + order_dim = order + 1 + end if + allocate(temp_scatt(groups,groups,order_dim,this % n_azi,this % n_pol)) + temp_scatt(:,:,:,:,:) = input_scatt(:,:,1:order_dim,:,:) + + ! Take input format (groups, groups, order) and convert to + ! the more useful format needed for scattdata: (order, groups, groups) + ! However, if scatt_type was ANGLE_LEGENDRE (i.e., the data was + ! provided as Legendre coefficients), and the user requested that + ! these legendres be converted to tabular form (note this is also + ! the default behavior), convert that now. + if (this % scatt_type == ANGLE_LEGENDRE .and. enable_leg_mu) then + ! Convert input parameters to what we need for the rest. + this % scatt_type = ANGLE_TABULAR + order_dim = legendre_mu_points + order = order_dim + dmu = TWO / real(order - 1,8) + + allocate(scatt_coeffs(order_dim,groups,groups,this % n_azi,this % n_pol)) + do i_pol = 1, this % n_pol + do i_azi = 1, this % n_azi + do gin = 1, groups + do gout = 1, groups + norm = ZERO + do imu = 1, order_dim + if (imu == 1) then + mu = -ONE + else if (imu == order_dim) then + mu = ONE + else + mu = -ONE + real(imu - 1,8) * dmu + end if + scatt_coeffs(imu,gout,gin,i_azi,i_pol) = & + evaluate_legendre(temp_scatt(gout,gin,:,i_azi,i_pol),mu) + ! Ensure positivity of distribution + if (scatt_coeffs(imu,gout,gin,i_azi,i_pol) < ZERO) & + scatt_coeffs(imu,gout,gin,i_azi,i_pol) = ZERO + ! And accrue the integral + if (imu > 1) then + norm = norm + HALF * dmu * & + (scatt_coeffs(imu-1,gout,gin,i_azi,i_pol) + & + scatt_coeffs(imu,gout,gin,i_azi,i_pol)) + end if + end do + ! Now that we have the integral, lets ensure that the distribution + ! is normalized such that it preserves the original scattering xs + if (norm > ZERO) then + scatt_coeffs(:,gout,gin,i_azi,i_pol) = & + scatt_coeffs(:,gout,gin,i_azi,i_pol) * & + temp_scatt(gout,gin,1,i_azi,i_pol) / norm + end if + end do + end do + end do + end do + else + ! Sticking with current representation, carry forward but change + ! the array ordering + allocate(scatt_coeffs(order_dim,groups,groups,i_azi,i_pol)) + do i_pol = 1, this % n_pol + do i_azi = 1, this % n_azi + do gin = 1, groups + do gout = 1, groups + do l = 1, order_dim + scatt_coeffs(l,gout,gin,i_azi,i_pol) = & + temp_scatt(gout,gin,l,i_azi,i_pol) + end do + end do + end do + end do + end do + end if + deallocate(temp_scatt) + else + call fatal_error("Must provide scatter!") + end if + + allocate(this % scatter(this % n_azi, this % n_pol)) + do i_pol = 1, this % n_pol + do i_azi = 1, this % n_azi + ! Allocate and initialize our ScattData Object. + if (this % scatt_type == ANGLE_HISTOGRAM) then + allocate(ScattDataHistogram :: this % scatter(i_azi,i_pol) % obj) + else if (this % scatt_type == ANGLE_TABULAR) then + allocate(ScattDataTabular :: this % scatter(i_azi,i_pol) % obj) + else if (this % scatt_type == ANGLE_LEGENDRE) then + allocate(ScattDataLegendre :: this % scatter(i_azi,i_pol) % obj) + end if + + ! Initialize the ScattData Object + call this % scatter(i_azi,i_pol) % obj % init(& + temp_mult(:,:,i_azi,i_pol), scatt_coeffs(:,:,:,i_azi,i_pol)) + end do + end do + ! Deallocate temporaries for the next material + deallocate(input_scatt,scatt_coeffs,temp_mult) + + allocate(this % total(groups,this % n_azi,this % n_pol)) + if (check_for_node(node_xsdata,"total")) then + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata,"total",temp_arr) + this % total = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) + deallocate(temp_arr) + else + do i_pol = 1, this % n_pol + do i_azi = 1, this % n_azi + this % total(:,i_azi,i_pol) = this % absorption(:,i_azi,i_pol) + & + this % scatter(i_azi,i_pol) % obj % scattxs(:) + end do + end do + end if end subroutine nuclideangle_init @@ -886,17 +1061,27 @@ module nuclide_header if (this % scatt_type == ANGLE_LEGENDRE) then temp_str = "Legendre" write(unit_,*) ' Scattering Type = ' // trim(temp_str) - write(unit_,*) ' # of Scatter Moments = ' // & - trim(to_str(this % order)) + select type(this) + type is (NuclideIso) + temp_str = to_str(size(this % scatter % dist(1) % data,dim=1) - 1) + end select + write(unit_,*) ' Scattering Order = ' // trim(temp_str) else if (this % scatt_type == ANGLE_HISTOGRAM) then temp_str = "Histogram" write(unit_,*) ' Scattering Type = ' // trim(temp_str) - write(unit_,*) ' # of Scatter Bins = ' // & - trim(to_str(this % order)) + select type(this) + type is (NuclideIso) + temp_str = to_str(size(this % scatter % dist(1) % data,dim=1)) + end select + write(unit_,*) ' Num. Distribution Bins = ' // trim(temp_str) else if (this % scatt_type == ANGLE_TABULAR) then temp_str = "Tabular" write(unit_,*) ' Scattering Type = ' // trim(temp_str) - write(unit_,*) ' # of Scatter Points = ' // trim(to_str(this % order)) + select type(this) + type is (NuclideIso) + temp_str = to_str(size(this % scatter % dist(1) % data,dim=1)) + end select + write(unit_,*) ' Num. Distribution Points = ' // trim(temp_str) end if write(unit_,*) ' Fissionable = ', this % fissionable @@ -926,9 +1111,9 @@ module nuclide_header do gin = 1, size(this % scatter % energy) size_scattmat = size_scattmat + & 2 * size(this % scatter % energy(gin) % data) + & - size(this % scatter % dist(gin) % data) + & - size(this % scatter % scattxs) + size(this % scatter % dist(gin) % data) end do + size_scattmat = size_scattmat + size(this % scatter % scattxs) size_scattmat = size_scattmat * 8 size_mgxs = size(this % total) + size(this % absorption) + & @@ -981,6 +1166,8 @@ module nuclide_header 2 * size(this % scatter(i_azi,i_pol) % obj % energy(gin) % data) + & size(this % scatter(i_azi,i_pol) % obj % dist(gin) % data) end do + size_scattmat = size_scattmat + & + size(this % scatter(i_azi,i_pol) % obj % scattxs) end do end do size_scattmat = size_scattmat * 8 diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index 003b31d87d..cf965f3975 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -41,8 +41,7 @@ module scattdata_header procedure(scattdata_init_), deferred :: init ! Initializes ScattData procedure(scattdata_calc_f_), deferred :: calc_f ! Calculates f, given mu procedure(scattdata_sample_), deferred :: sample ! sample the scatter event - ! Reproduces an unnormalized scattering matrix - procedure :: get_matrix => scattdata_get_matrix + procedure :: get_matrix => scattdata_get_matrix ! Rebuild scattering matrix end type ScattData abstract interface @@ -55,7 +54,7 @@ module scattdata_header pure function scattdata_calc_f_(this, gin, gout, mu) result(f) import ScattData - class(ScattData), intent(in) :: this !! Scattering Object to work with + class(ScattData), intent(in) :: this ! Scattering Object to work with integer, intent(in) :: gin ! Incoming Energy Group integer, intent(in) :: gout ! Outgoing Energy Group real(8), intent(in) :: mu ! Angle of interest @@ -65,7 +64,7 @@ module scattdata_header subroutine scattdata_sample_(this, gin, gout, mu, wgt) import ScattData - class(ScattData), intent(in) :: this !! Scattering Object to work with + class(ScattData), intent(in) :: this ! Scattering Object to work with integer, intent(in) :: gin ! Incoming neutron group integer, intent(out) :: gout ! Sampled outgoin group real(8), intent(out) :: mu ! Sampled change in angle @@ -80,7 +79,6 @@ module scattdata_header procedure :: init => scattdatalegendre_init procedure :: calc_f => scattdatalegendre_calc_f procedure :: sample => scattdatalegendre_sample - ! procedure :: get_matrix => scattdatalegendre_get_matrix end type ScattDataLegendre type, extends(ScattData) :: ScattDataHistogram @@ -90,7 +88,6 @@ module scattdata_header procedure :: init => scattdatahistogram_init procedure :: calc_f => scattdatahistogram_calc_f procedure :: sample => scattdatahistogram_sample - ! procedure :: get_matrix => scattdatahistogram_get_matrix end type ScattDataHistogram type, extends(ScattData) :: ScattDataTabular From 7294a1363485c64b4ee7cb1a5a8e4f0bb67d8ec7 Mon Sep 17 00:00:00 2001 From: jingang Date: Tue, 8 Mar 2016 13:15:13 -0500 Subject: [PATCH 357/650] Fix incorrect checking 'cmfd.xml' --- src/cmfd_input.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmfd_input.F90 b/src/cmfd_input.F90 index 2d9df4182c..f69c09fe1c 100644 --- a/src/cmfd_input.F90 +++ b/src/cmfd_input.F90 @@ -70,7 +70,7 @@ contains inquire(FILE=filename, EXIST=file_exists) if (.not. file_exists) then ! CMFD is optional unless it is in on from settings - if (cmfd_on) then + if (cmfd_run) then call fatal_error("No CMFD XML file, '" // trim(filename) // "' does not& & exist!") end if From 33f74b5c909e884a593c420a3488f451f7db85b1 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 9 Mar 2016 06:48:10 -0500 Subject: [PATCH 358/650] tested nuclideangle implementation and worked out some kinks after my changes the other day --- src/macroxs_header.F90 | 6 +- src/nuclide_header.F90 | 148 ++++++++++++++++++++------------------- src/scattdata_header.F90 | 77 ++++++++++++++------ 3 files changed, 133 insertions(+), 98 deletions(-) diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index 9eb3ea8640..f86da17299 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -506,11 +506,11 @@ contains nuc_order_dim = size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1) do ipol = 1, n_pol do iazi = 1, n_azi - scatt_coeffs(1:min(nuc_order_dim, order_dim),:,:,iazi,ipol) = & + scatt_coeffs(1:min(nuc_order_dim,order_dim),:,:,iazi,ipol) = & scatt_coeffs(1:min(nuc_order_dim, order_dim),:,:,iazi,ipol) + & atom_density * & nuc % scatter(iazi,ipol) % obj % get_matrix(& - min(nuc_order_dim,order_dim,iazi,ipol)) + min(nuc_order_dim,order_dim)) end do end do end select @@ -519,7 +519,7 @@ contains ! Initialize the ScattData Object do ipol = 1, n_pol do iazi = 1, n_azi - call this % scatter(iazi, ipol) % obj % init( & + call this % scatter(iazi,ipol) % obj % init( & temp_mult(:,:,iazi,ipol), scatt_coeffs(:,:,:,iazi,ipol)) end do end do diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index d2020a1e0f..e4dc717a8f 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -126,7 +126,7 @@ module nuclide_header integer, intent(in) :: max_order ! Maximum requested order end subroutine nuclidemg_init_ - function nuclidemg_get_xs_(this, g, xstype, gout, uvw, mu, i_azi, i_pol) & + function nuclidemg_get_xs_(this, g, xstype, gout, uvw, mu, iazi, ipol) & result(xs) import NuclideMG class(NuclideMG), intent(in) :: this @@ -135,20 +135,20 @@ module nuclide_header integer, optional, intent(in) :: gout ! Outgoing Group real(8), optional, intent(in) :: uvw(3) ! Requested Angle real(8), optional, intent(in) :: mu ! Change in angle - integer, optional, intent(in) :: i_azi ! Azimuthal Index - integer, optional, intent(in) :: i_pol ! Polar Index + integer, optional, intent(in) :: iazi ! Azimuthal Index + integer, optional, intent(in) :: ipol ! Polar Index real(8) :: xs ! Resultant xs end function nuclidemg_get_xs_ - pure function nuclidemg_calc_f_(this, gin, gout, mu, uvw, i_azi, i_pol) result(f) + pure function nuclidemg_calc_f_(this, gin, gout, mu, uvw, iazi, ipol) result(f) import NuclideMG class(NuclideMG), intent(in) :: this integer, intent(in) :: gin ! Incoming Energy Group integer, intent(in) :: gout ! Outgoing Energy Group real(8), intent(in) :: mu ! Angle of interest real(8), intent(in), optional :: uvw(3) ! Direction vector - integer, intent(in), optional :: i_azi ! Incoming Energy Group - integer, intent(in), optional :: i_pol ! Outgoing Energy Group + integer, intent(in), optional :: iazi ! Incoming Energy Group + integer, intent(in), optional :: ipol ! Outgoing Energy Group real(8) :: f ! Return value of f(mu) end function nuclidemg_calc_f_ @@ -447,6 +447,9 @@ module nuclide_header ! Tabular_legendre tells us if we are to treat the provided ! Legendre polynomials as tabular data (if enable is true) or leaving ! them as Legendres (if enable is false, or the default) + + ! Set the default (leave as Legendre polynomials) + enable_leg_mu = .false. if (check_for_node(node_xsdata,"tabular_legendre")) then call get_node_ptr(node_xsdata,"tabular_legendre",node_legendre_mu) if (check_for_node(node_legendre_mu, "enable")) then @@ -459,9 +462,6 @@ module nuclide_header else call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) end if - else - ! Set the default (leave as Legendre polynomials) - enable_leg_mu = .false. end if ! Ok, so if we need to convert to a tabular form, get the user provided ! number of points @@ -622,7 +622,7 @@ module nuclide_header real(8), allocatable :: temp_scatt(:,:,:,:,:) real(8) :: dmu, mu, norm, dangle integer :: order, order_dim, gin, gout, l, arr_len - integer :: legendre_mu_points, imu, i_pol, i_azi + integer :: legendre_mu_points, imu, ipol, iazi ! Call generic data gathering routine (will populate the metadata) call nuclidemg_init(this, node_xsdata) @@ -648,8 +648,8 @@ module nuclide_header call get_node_array(node_xsdata, "polar", this % polar) else dangle = PI / real(this % n_pol,8) - do i_pol = 1, this % n_pol - this % polar(i_pol) = (real(i_pol,8) - HALF) * dangle + do ipol = 1, this % n_pol + this % polar(ipol) = (real(ipol,8) - HALF) * dangle end do end if if (check_for_node(node_xsdata, "azimuthal")) then @@ -658,8 +658,8 @@ module nuclide_header call get_node_array(node_xsdata, "azimuthal", this % azimuthal) else dangle = TWO * PI / real(this % n_azi,8) - do i_azi = 1, this % n_azi - this % azimuthal(i_azi) = -PI + (real(i_azi,8) - HALF) * dangle + do iazi = 1, this % n_azi + this % azimuthal(iazi) = -PI + (real(iazi,8) - HALF) * dangle end do end if @@ -759,6 +759,9 @@ module nuclide_header ! Tabular_legendre tells us if we are to treat the provided ! Legendre polynomials as tabular data (if enable is true) or leaving ! them as Legendres (if enable is false, or the default) + + ! Set the default (leave as Legendre polynomials) + enable_leg_mu = .false. if (check_for_node(node_xsdata,"tabular_legendre")) then call get_node_ptr(node_xsdata,"tabular_legendre",node_legendre_mu) if (check_for_node(node_legendre_mu, "enable")) then @@ -771,9 +774,6 @@ module nuclide_header else call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) end if - else - ! Set the default (leave as Legendre polynomials) - enable_leg_mu = .false. end if ! Ok, so if we need to convert to a tabular form, get the user provided ! number of points @@ -828,6 +828,7 @@ module nuclide_header order = min(order_dim - 1, max_order) order_dim = order + 1 end if + allocate(temp_scatt(groups,groups,order_dim,this % n_azi,this % n_pol)) temp_scatt(:,:,:,:,:) = input_scatt(:,:,1:order_dim,:,:) @@ -838,6 +839,7 @@ module nuclide_header ! these legendres be converted to tabular form (note this is also ! the default behavior), convert that now. if (this % scatt_type == ANGLE_LEGENDRE .and. enable_leg_mu) then + ! Convert input parameters to what we need for the rest. this % scatt_type = ANGLE_TABULAR order_dim = legendre_mu_points @@ -845,8 +847,8 @@ module nuclide_header dmu = TWO / real(order - 1,8) allocate(scatt_coeffs(order_dim,groups,groups,this % n_azi,this % n_pol)) - do i_pol = 1, this % n_pol - do i_azi = 1, this % n_azi + do ipol = 1, this % n_pol + do iazi = 1, this % n_azi do gin = 1, groups do gout = 1, groups norm = ZERO @@ -858,24 +860,24 @@ module nuclide_header else mu = -ONE + real(imu - 1,8) * dmu end if - scatt_coeffs(imu,gout,gin,i_azi,i_pol) = & - evaluate_legendre(temp_scatt(gout,gin,:,i_azi,i_pol),mu) + scatt_coeffs(imu,gout,gin,iazi,ipol) = & + evaluate_legendre(temp_scatt(gout,gin,:,iazi,ipol),mu) ! Ensure positivity of distribution - if (scatt_coeffs(imu,gout,gin,i_azi,i_pol) < ZERO) & - scatt_coeffs(imu,gout,gin,i_azi,i_pol) = ZERO + if (scatt_coeffs(imu,gout,gin,iazi,ipol) < ZERO) & + scatt_coeffs(imu,gout,gin,iazi,ipol) = ZERO ! And accrue the integral if (imu > 1) then norm = norm + HALF * dmu * & - (scatt_coeffs(imu-1,gout,gin,i_azi,i_pol) + & - scatt_coeffs(imu,gout,gin,i_azi,i_pol)) + (scatt_coeffs(imu-1,gout,gin,iazi,ipol) + & + scatt_coeffs(imu,gout,gin,iazi,ipol)) end if end do ! Now that we have the integral, lets ensure that the distribution ! is normalized such that it preserves the original scattering xs if (norm > ZERO) then - scatt_coeffs(:,gout,gin,i_azi,i_pol) = & - scatt_coeffs(:,gout,gin,i_azi,i_pol) * & - temp_scatt(gout,gin,1,i_azi,i_pol) / norm + scatt_coeffs(:,gout,gin,iazi,ipol) = & + scatt_coeffs(:,gout,gin,iazi,ipol) * & + temp_scatt(gout,gin,1,iazi,ipol) / norm end if end do end do @@ -884,14 +886,14 @@ module nuclide_header else ! Sticking with current representation, carry forward but change ! the array ordering - allocate(scatt_coeffs(order_dim,groups,groups,i_azi,i_pol)) - do i_pol = 1, this % n_pol - do i_azi = 1, this % n_azi + allocate(scatt_coeffs(order_dim,groups,groups,this % n_azi,this % n_pol)) + do ipol = 1, this % n_pol + do iazi = 1, this % n_azi do gin = 1, groups do gout = 1, groups do l = 1, order_dim - scatt_coeffs(l,gout,gin,i_azi,i_pol) = & - temp_scatt(gout,gin,l,i_azi,i_pol) + scatt_coeffs(l,gout,gin,iazi,ipol) = & + temp_scatt(gout,gin,l,iazi,ipol) end do end do end do @@ -904,20 +906,20 @@ module nuclide_header end if allocate(this % scatter(this % n_azi, this % n_pol)) - do i_pol = 1, this % n_pol - do i_azi = 1, this % n_azi + do ipol = 1, this % n_pol + do iazi = 1, this % n_azi ! Allocate and initialize our ScattData Object. if (this % scatt_type == ANGLE_HISTOGRAM) then - allocate(ScattDataHistogram :: this % scatter(i_azi,i_pol) % obj) + allocate(ScattDataHistogram :: this % scatter(iazi,ipol) % obj) else if (this % scatt_type == ANGLE_TABULAR) then - allocate(ScattDataTabular :: this % scatter(i_azi,i_pol) % obj) + allocate(ScattDataTabular :: this % scatter(iazi,ipol) % obj) else if (this % scatt_type == ANGLE_LEGENDRE) then - allocate(ScattDataLegendre :: this % scatter(i_azi,i_pol) % obj) + allocate(ScattDataLegendre :: this % scatter(iazi,ipol) % obj) end if ! Initialize the ScattData Object - call this % scatter(i_azi,i_pol) % obj % init(& - temp_mult(:,:,i_azi,i_pol), scatt_coeffs(:,:,:,i_azi,i_pol)) + call this % scatter(iazi,ipol) % obj % init(& + temp_mult(:,:,iazi,ipol), scatt_coeffs(:,:,:,iazi,ipol)) end do end do ! Deallocate temporaries for the next material @@ -930,10 +932,10 @@ module nuclide_header this % total = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) deallocate(temp_arr) else - do i_pol = 1, this % n_pol - do i_azi = 1, this % n_azi - this % total(:,i_azi,i_pol) = this % absorption(:,i_azi,i_pol) + & - this % scatter(i_azi,i_pol) % obj % scattxs(:) + do ipol = 1, this % n_pol + do iazi = 1, this % n_azi + this % total(:,iazi,ipol) = this % absorption(:,iazi,ipol) + & + this % scatter(iazi,ipol) % obj % scattxs(:) end do end do end if @@ -1143,7 +1145,7 @@ module nuclide_header integer :: unit_ ! unit to write to integer :: size_total, size_scattmat, size_mgxs - integer :: i_pol, i_azi, gin + integer :: ipol, iazi, gin ! set default unit for writing information if (present(unit)) then @@ -1159,15 +1161,15 @@ module nuclide_header ! Determine size of mgxs and scattering matrices size_scattmat = 0 - do i_pol = 1, this % n_pol - do i_azi = 1, this % n_azi - do gin = 1, size(this % scatter(i_azi,i_pol) % obj % energy) + do ipol = 1, this % n_pol + do iazi = 1, this % n_azi + do gin = 1, size(this % scatter(iazi,ipol) % obj % energy) size_scattmat = size_scattmat + & - 2 * size(this % scatter(i_azi,i_pol) % obj % energy(gin) % data) + & - size(this % scatter(i_azi,i_pol) % obj % dist(gin) % data) + 2 * size(this % scatter(iazi,ipol) % obj % energy(gin) % data) + & + size(this % scatter(iazi,ipol) % obj % dist(gin) % data) end do size_scattmat = size_scattmat + & - size(this % scatter(i_azi,i_pol) % obj % scattxs) + size(this % scatter(iazi,ipol) % obj % scattxs) end do end do size_scattmat = size_scattmat * 8 @@ -1198,7 +1200,7 @@ module nuclide_header ! NUCLIDE*_GET_XS Returns the requested data type !=============================================================================== - function nuclideiso_get_xs(this, g, xstype, gout, uvw, mu, i_azi, i_pol) & + function nuclideiso_get_xs(this, g, xstype, gout, uvw, mu, iazi, ipol) & result(xs) class(NuclideIso), intent(in) :: this integer, intent(in) :: g ! Incoming Energy group @@ -1206,8 +1208,8 @@ module nuclide_header integer, optional, intent(in) :: gout ! Outgoing Group real(8), optional, intent(in) :: uvw(3) ! Requested Angle real(8), optional, intent(in) :: mu ! Change in angle - integer, optional, intent(in) :: i_azi ! Azimuthal Index - integer, optional, intent(in) :: i_pol ! Polar Index + integer, optional, intent(in) :: iazi ! Azimuthal Index + integer, optional, intent(in) :: ipol ! Polar Index real(8) :: xs ! Resultant xs xs = ZERO @@ -1249,7 +1251,7 @@ module nuclide_header end if end function nuclideiso_get_xs - function nuclideangle_get_xs(this, g, xstype, gout, uvw, mu, i_azi, i_pol) & + function nuclideangle_get_xs(this, g, xstype, gout, uvw, mu, iazi, ipol) & result(xs) class(NuclideAngle), intent(in) :: this integer, intent(in) :: g ! Incoming Energy group @@ -1257,11 +1259,11 @@ module nuclide_header integer, optional, intent(in) :: gout ! Outgoing Group real(8), optional, intent(in) :: mu ! Change in angle real(8), optional, intent(in) :: uvw(3) ! Requested Angle - integer, optional, intent(in) :: i_azi ! Azimuthal Index - integer, optional, intent(in) :: i_pol ! Polar Index + integer, optional, intent(in) :: iazi ! Azimuthal Index + integer, optional, intent(in) :: ipol ! Polar Index real(8) :: xs ! Resultant xs - integer :: i_azi_, i_pol_ + integer :: iazi_, ipol_ xs = ZERO @@ -1270,43 +1272,43 @@ module nuclide_header return end if - if (present(i_azi) .and. present(i_pol)) then - i_azi_ = i_azi - i_pol_ = i_pol + if (present(iazi) .and. present(ipol)) then + iazi_ = iazi + ipol_ = ipol else - call find_angle(this % polar, this % azimuthal, uvw, i_azi_, i_pol_) + call find_angle(this % polar, this % azimuthal, uvw, iazi_, ipol_) end if if (present(gout)) then select case(xstype) case('mult') - xs = this % scatter(i_azi_,i_pol_) % obj % mult(g) % data(gout) + xs = this % scatter(iazi_,ipol_) % obj % mult(g) % data(gout) case('nu_fission') - xs = this % nu_fission(gout,g,i_azi_,i_pol_) + xs = this % nu_fission(gout,g,iazi_,ipol_) case('chi') - xs = this % chi(gout,i_azi_,i_pol_) + xs = this % chi(gout,iazi_,ipol_) case('f_mu', 'f_mu/mult') - xs = this % scatter(i_azi_,i_pol_) % obj % calc_f(g,gout,mu) + xs = this % scatter(iazi_,ipol_) % obj % calc_f(g,gout,mu) if (xstype == 'f_mu/mult') then - xs = xs / this % scatter(i_azi_,i_pol_) % obj % mult(g) % data(gout) + xs = xs / this % scatter(iazi_,ipol_) % obj % mult(g) % data(gout) end if end select else select case(xstype) case('total') - xs = this % total(g,i_azi_,i_pol_) + xs = this % total(g,iazi_,ipol_) case('absorption') - xs = this % absorption(g,i_azi_,i_pol_) + xs = this % absorption(g,iazi_,ipol_) case('fission') - xs = this % fission(g,i_azi_,i_pol_) + xs = this % fission(g,iazi_,ipol_) case('k_fission') if (allocated(this % k_fission)) then - xs = this % k_fission(g,i_azi_,i_pol_) + xs = this % k_fission(g,iazi_,ipol_) end if case('chi') - xs = this % chi(g,i_azi_,i_pol_) + xs = this % chi(g,iazi_,ipol_) case('scatter') - xs = this % scatter(i_azi_,i_pol_) % obj % scattxs(g) + xs = this % scatter(iazi_,ipol_) % obj % scattxs(g) end select end if diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index cf965f3975..dbbedc6399 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -81,19 +81,22 @@ module scattdata_header procedure :: sample => scattdatalegendre_sample end type ScattDataLegendre - type, extends(ScattData) :: ScattDataHistogram - real(8), allocatable :: mu(:) ! Mu bins - real(8) :: dmu ! Mu spacing + type, extends(ScattData) :: ScattDataHistogram + real(8), allocatable :: mu(:) ! Mu bins + real(8) :: dmu ! Mu spacing + ! Histogram of f(mu) (dist has CDF) + type(Jagged2D), allocatable :: fmu(:) ! (Gin % data(Order/Nmu x Gout) contains procedure :: init => scattdatahistogram_init procedure :: calc_f => scattdatahistogram_calc_f procedure :: sample => scattdatahistogram_sample + procedure :: get_matrix => scattdatahistogram_get_matrix end type ScattDataHistogram - type, extends(ScattData) :: ScattDataTabular - real(8), allocatable :: mu(:) ! Mu bins - real(8) :: dmu ! Mu spacing - ! PDF of f(mu) + type, extends(ScattData) :: ScattDataTabular + real(8), allocatable :: mu(:) ! Mu bins + real(8) :: dmu ! Mu spacing + ! PDF of f(mu) (dist has CDF) type(Jagged2D), allocatable :: fmu(:) ! (Gin % data(Order/Nmu x Gout) contains procedure :: init => scattdatatabular_init @@ -276,15 +279,22 @@ contains this % mu(imu) = -ONE + real(imu - 1,8) * this % dmu end do - ! Best to integrate this histogram so we can avoid rejection sampling + ! Integrate this histogram so we can avoid rejection sampling while + ! also saving the original histogram in fmu + allocate(this % fmu(groups)) do gin = 1, groups + allocate(this % fmu(gin) % data(order, & + this % gmin(gin):this % gmax(gin))) do gout = this % gmin(gin), this % gmax(gin) + ! Store the histogram + this % fmu(gin) % data(:,gout) = coeffs(:,gout,gin) ! Integrate the histogram this % dist(gin) % data(1,gout) = this % dmu * coeffs(1,gout,gin) do imu = 2, order this % dist(gin) % data(imu,gout) = this % dmu * coeffs(imu,gout,gin) + & this % dist(gin) % data(imu - 1,gout) end do + ! Now make sure integral norms to zero norm = this % dist(gin) % data(order,gout) if (norm > ZERO) then @@ -423,14 +433,13 @@ contains integer :: imu ! Find mu bin - imu = floor((mu + ONE)/ this % dmu + ONE) - ! Adjust so interpolation works on the last bin if necessary - if (imu == size(this % dist, dim=1)) then - imu = imu - 1 + if (mu == ONE) then + imu = size(this % fmu(gin) % data,dim=1) + else + imu = floor((mu + ONE)/ this % dmu + ONE) end if - ! Use histogram interpolation to find f(mu) - f = this % dist(gin) % data(imu,gout) + f = this % fmu(gin) % data(imu,gout) end function scattdatahistogram_calc_f @@ -445,16 +454,16 @@ contains real(8) :: r ! Find mu bin - imu = floor((mu + ONE)/ this % dmu + ONE) - ! Adjust so interpolation works on the last bin if necessary - if (imu == size(this % dist, dim=1)) then - imu = imu - 1 + if (mu == ONE) then + imu = size(this % fmu(gin) % data,dim=1) - 1 + else + imu = floor((mu + ONE)/ this % dmu + ONE) end if ! Now interpolate to find f(mu) r = (mu - this % mu(imu)) / (this % mu(imu + 1) - this % mu(imu)) - f = (ONE - r) * this % dist(gin) % data(imu,gout) + & - r * this % dist(gin) % data(imu + 1,gout) + f = (ONE - r) * this % fmu(gin) % data(imu,gout) + & + r * this % fmu(gin) % data(imu + 1,gout) end function scattdatatabular_calc_f @@ -609,7 +618,7 @@ contains ! using ScattData's information of fmu/dist, energy, and scattxs !=============================================================================== - function scattdata_get_matrix(this, req_order) result(matrix) + pure function scattdata_get_matrix(this, req_order) result(matrix) class(ScattData), intent(in) :: this ! Scattering Object to work with integer, intent(in) :: req_order ! Requested order of matrix real(8), allocatable :: matrix(:,:,:) ! Resultant matrix just built @@ -633,7 +642,31 @@ contains end do end function scattdata_get_matrix - function scattdatatabular_get_matrix(this, req_order) result(matrix) + pure function scattdatahistogram_get_matrix(this, req_order) result(matrix) + class(ScattDataHistogram), intent(in) :: this ! Scattering Object to work with + integer, intent(in) :: req_order ! Requested order of matrix + real(8), allocatable :: matrix(:,:,:) ! Resultant matrix just built + + integer :: order, groups, gin, gout + + groups = size(this % energy) + order = min(req_order,size(this % dist(1) % data(:,1))) + + allocate(matrix(order,groups,groups)) + ! Initialize to 0; this way the zero entries in the dense matrix dont + ! need to be explicitly set, requiring a significant increase in the + ! lines of code. + matrix = ZERO + do gin = 1, groups + do gout = this % gmin(gin), this % gmax(gin) + matrix(:,gout,gin) = this % scattxs(gin) * & + this % energy(gin) % data(gout) * & + this % fmu(gin) % data(1:order,gout) + end do + end do + end function scattdatahistogram_get_matrix + + pure function scattdatatabular_get_matrix(this, req_order) result(matrix) class(ScattDataTabular), intent(in) :: this ! Scattering Object to work with integer, intent(in) :: req_order ! Requested order of matrix real(8), allocatable :: matrix(:,:,:) ! Resultant matrix just built From bfcb1753b28329d33c654ec5b5f96f1e7b7383b1 Mon Sep 17 00:00:00 2001 From: jingang Date: Tue, 8 Mar 2016 22:10:47 -0500 Subject: [PATCH 359/650] Changed some confusing names in module random_lcg --- src/cross_section.F90 | 4 ++-- src/eigenvalue.F90 | 4 ++-- src/physics.F90 | 4 ++-- src/random_lcg.F90 | 29 +++++++++++++++-------------- 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/cross_section.F90 b/src/cross_section.F90 index 5ae113b005..cd22a8f055 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -10,7 +10,7 @@ module cross_section use material_header, only: Material use nuclide_header use particle_header, only: Particle - use random_lcg, only: prn, get_prn_ahead, prn_set_stream + use random_lcg, only: prn, future_prn, prn_set_stream use sab_header, only: SAlphaBeta use search, only: binary_search @@ -392,7 +392,7 @@ contains ! random number for the same nuclide at different temperatures, therefore ! preserving correlation of temperature in probability tables. call prn_set_stream(STREAM_URR_PTABLE) - r = get_prn_ahead(int(nuc_zaid_dict % get_key(nuc % zaid), 8)) + r = future_prn(int(nuc_zaid_dict % get_key(nuc % zaid), 8)) call prn_set_stream(STREAM_TRACKING) i_low = 1 diff --git a/src/eigenvalue.F90 b/src/eigenvalue.F90 index e735bc8d8a..9befbe3c3d 100644 --- a/src/eigenvalue.F90 +++ b/src/eigenvalue.F90 @@ -10,7 +10,7 @@ module eigenvalue use math, only: t_percentile use mesh, only: count_bank_sites use mesh_header, only: RegularMesh - use random_lcg, only: prn, set_particle_seed, prn_skip + use random_lcg, only: prn, set_particle_seed, advance_prn_seed use search, only: binary_search use string, only: to_str @@ -99,7 +99,7 @@ contains call set_particle_seed(int((current_batch - 1)*gen_per_batch + & current_gen,8)) - call prn_skip(start) + call advance_prn_seed(start) ! Determine how many fission sites we need to sample from the source bank ! and the probability for selecting a site. diff --git a/src/physics.F90 b/src/physics.F90 index faeec1b8a8..6fda4c393c 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -16,7 +16,7 @@ module physics use particle_header, only: Particle use particle_restart_write, only: write_particle_restart use physics_common - use random_lcg, only: prn, prn_skip, prn_set_stream + use random_lcg, only: prn, advance_prn_seed, prn_set_stream use search, only: binary_search use secondary_uncorrelated, only: UncorrelatedAngleEnergy use string, only: to_str @@ -61,7 +61,7 @@ contains ! Advance URR seed stream 'N' times after energy changes if (p % E /= p % last_E) then call prn_set_stream(STREAM_URR_PTABLE) - call prn_skip(n_nuc_zaid_total) + call advance_prn_seed(n_nuc_zaid_total) call prn_set_stream(STREAM_TRACKING) endif diff --git a/src/random_lcg.F90 b/src/random_lcg.F90 index 4e98a06630..08f1034ab7 100644 --- a/src/random_lcg.F90 +++ b/src/random_lcg.F90 @@ -24,10 +24,10 @@ module random_lcg !$omp threadprivate(prn_seed, stream) public :: prn - public :: get_prn_ahead + public :: future_prn public :: initialize_prng public :: set_particle_seed - public :: prn_skip + public :: advance_prn_seed public :: prn_set_stream public :: STREAM_TRACKING, STREAM_TALLIES @@ -54,19 +54,19 @@ contains end function prn !=============================================================================== -! GET_PRN_AHEAD generates a pseudo-random number which is 'n' times ahead from +! FUTURE_PRN generates a pseudo-random number which is 'n' times ahead from the ! current seed. !=============================================================================== - function get_prn_ahead(n) result(pseudo_rn) + function future_prn(n) result(pseudo_rn) integer(8), intent(in) :: n ! number of prns to skip real(8) :: pseudo_rn - pseudo_rn = prn_skip_ahead(n, prn_seed(stream)) * prn_norm + pseudo_rn = future_seed(n, prn_seed(stream)) * prn_norm - end function get_prn_ahead + end function future_prn !=============================================================================== ! INITIALIZE_PRNG sets up the random number generator, determining the seed and @@ -106,31 +106,32 @@ contains integer :: i do i = 1, N_STREAMS - prn_seed(i) = prn_skip_ahead(id*prn_stride, prn_seed0 + i - 1) + prn_seed(i) = future_seed(id*prn_stride, prn_seed0 + i - 1) end do end subroutine set_particle_seed !=============================================================================== -! PRN_SKIP advances the random number seed 'n' times from the current seed +! ADVANCE_PRN_SEED advances the random number seed 'n' times from the current +! seed. !=============================================================================== - subroutine prn_skip(n) + subroutine advance_prn_seed(n) integer(8), intent(in) :: n ! number of seeds to skip - prn_seed(stream) = prn_skip_ahead(n, prn_seed(stream)) + prn_seed(stream) = future_seed(n, prn_seed(stream)) - end subroutine prn_skip + end subroutine advance_prn_seed !=============================================================================== -! PRN_SKIP_AHEAD advances the random number seed 'skip' times. This is usually +! FUTURE_SEED advances the random number seed 'skip' times. This is usually ! used to skip a fixed number of random numbers (the stride) so that a given ! particle always has the same starting seed regardless of how many processors ! are used !=============================================================================== - function prn_skip_ahead(n, seed) result(new_seed) + function future_seed(n, seed) result(new_seed) integer(8), intent(in) :: n ! number of seeds to skip integer(8), intent(in) :: seed ! original seed @@ -182,7 +183,7 @@ contains ! With G and C, we can now find the new seed new_seed = iand(g_new*seed + c_new, prn_mask) - end function prn_skip_ahead + end function future_seed !=============================================================================== ! PRN_SET_STREAM changes the random number stream. If random numbers are needed From b8c1ab68e90b794c1789996045273ba5459be4e4 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 8 Mar 2016 21:54:07 -0600 Subject: [PATCH 360/650] Introduce CheckedList for type-checking Tally attributes that are lists --- openmc/checkvalue.py | 56 ++++++++++++++++++++++++++++++++++++++++++-- openmc/tallies.py | 34 +++++++++++++++------------ 2 files changed, 73 insertions(+), 17 deletions(-) diff --git a/openmc/checkvalue.py b/openmc/checkvalue.py index 0e9dc9ef4b..53d77036ab 100644 --- a/openmc/checkvalue.py +++ b/openmc/checkvalue.py @@ -50,8 +50,13 @@ def check_type(name, value, expected_type, expected_iter_type=None): """ if not _isinstance(value, expected_type): - msg = 'Unable to set "{0}" to "{1}" which is not of type "{2}"'.format( - name, value, expected_type.__name__) + if isinstance(expected_type, Iterable): + msg = 'Unable to set "{0}" to "{1}" which is not one of the ' \ + 'following types: "{2}"'.format(name, value, ', '.join( + [t.__name__ for t in expected_type])) + else: + msg = 'Unable to set "{0}" to "{1}" which is not of type "{2}"'.format( + name, value, expected_type.__name__) raise ValueError(msg) if expected_iter_type: @@ -251,3 +256,50 @@ def check_greater_than(name, value, minimum, equality=False): msg = 'Unable to set "{0}" to "{1}" since it is less than ' \ 'or equal to "{2}"'.format(name, value, minimum) raise ValueError(msg) + + +class CheckedList(list): + """A list for which each element is type-checked as it's added + + Parameters + ---------- + expected_type : type or Iterable of type + Type(s) which each element should be + name : str + Name of data being checked + items : Iterable, optional + Items to initialize the list with + + """ + + def __init__(self, expected_type, name, items=[]): + self.expected_type = expected_type + self.name = name + for item in items: + self.append(item) + + def append(self, item): + """Append item to list + + Parameters + ---------- + item : object + Item to append + + """ + check_type(self.name, item, self.expected_type) + super(CheckedList, self).append(item) + + def insert(self, index, item): + """Insert item before index + + Parameters + ---------- + index : int + Index in list + item : object + Item to insert + + """ + check_type(self.name, item, self.expected_type) + super(CheckedList, self).insert(index, item) diff --git a/openmc/tallies.py b/openmc/tallies.py index 343062aa84..9d6ed4b7f1 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -33,6 +33,12 @@ AUTO_TALLY_ID = 10000 # specified axis. _PRODUCT_TYPES = ['tensor', 'entrywise'] +# The following indicate acceptable types when setting Tally.scores, +# Tally.nuclides, and Tally.filters +_SCORE_CLASSES = (basestring, CrossScore, AggregateScore) +_NUCLIDE_CLASSES = (basestring, Nuclide, CrossNuclide, AggregateNuclide) +_FILTER_CLASSES = (Filter, CrossFilter, AggregateFilter) + def reset_auto_tally_id(): global AUTO_TALLY_ID @@ -103,11 +109,11 @@ class Tally(object): # Initialize Tally class attributes self.id = tally_id self.name = name - self._filters = [] - self._nuclides = [] - self._scores = [] + self._filters = cv.CheckedList(_FILTER_CLASSES, 'tally filters') + self._nuclides = cv.CheckedList(_NUCLIDE_CLASSES, 'tally nuclides') + self._scores = cv.CheckedList(_SCORE_CLASSES, 'tally scores') self._estimator = None - self._triggers = [] + self._triggers = cv.CheckedList(Trigger, 'tally triggers') self._num_realizations = 0 self._with_summary = False @@ -426,8 +432,8 @@ class Tally(object): @triggers.setter def triggers(self, triggers): - cv.check_type('tally triggers', trigger, MutableSequence, Trigger) - self._triggers = triggers + cv.check_type('tally triggers', triggers, MutableSequence) + self._triggers = cv.CheckedList(Trigger, 'tally triggers', triggers) def add_trigger(self, trigger): """Add a tally trigger to the tally @@ -470,8 +476,7 @@ class Tally(object): @filters.setter def filters(self, filters): - cv.check_type('tally filters', filters, MutableSequence, - (Filter, CrossFilter, AggregateFilter)) + cv.check_type('tally filters', filters, MutableSequence) # If the filter is already in the Tally, raise an error for i, f in enumerate(filters[:-1]): @@ -481,12 +486,11 @@ class Tally(object): 'Python API'.format(f, self.id) raise ValueError(msg) - self._filters = filters + self._filters = cv.CheckedList(_FILTER_CLASSES, 'tally filters', filters) @nuclides.setter def nuclides(self, nuclides): - cv.check_type('tally nuclides', nuclides, MutableSequence, - (basestring, Nuclide, CrossNuclide, AggregateNuclide)) + cv.check_type('tally nuclides', nuclides, MutableSequence) # If the nuclide is already in the Tally, raise an error for i, nuclide in enumerate(nuclides[:-1]): @@ -496,12 +500,12 @@ class Tally(object): 'Python API'.format(nuclide, self.id) raise ValueError(msg) - self._nuclides = nuclides + self._nuclides = cv.CheckedList(_NUCLIDE_CLASSES, 'tally nuclides', + nuclides) @scores.setter def scores(self, scores): - cv.check_type('tally scores', scores, MutableSequence, - (basestring, CrossScore, AggregateScore)) + cv.check_type('tally scores', scores, MutableSequence) for i, score in enumerate(scores[:-1]): # If the score is already in the Tally, raise an error @@ -515,7 +519,7 @@ class Tally(object): if isinstance(score, basestring): scores[i] = score.strip() - self._scores = scores + self._scores = cv.CheckedList(_SCORE_CLASSES, 'tally scores', scores) def add_filter(self, new_filter): """Add a filter to the tally From 809eff970a85ae8ae2ae286a6217a28015893880 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 9 Mar 2016 08:25:47 -0600 Subject: [PATCH 361/650] Respond to @wbinventor comments on #593 --- .../pythonapi/examples/tally-arithmetic.ipynb | 12 ++--- openmc/mgxs/mgxs.py | 6 +-- openmc/tallies.py | 48 +++++++++---------- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index d1325e4878..bbadd1ac4d 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -418,15 +418,15 @@ "\n", "# Instantiate flux Tally in moderator and fuel\n", "tally = openmc.Tally(name='flux')\n", - "tally.filters = [openmc.Filter(type='cell', bins=[fuel_cell.id, moderator_cell.id]),\n", - " energy_filter]\n", + "tally.filters = [openmc.Filter(type='cell', bins=[fuel_cell.id, moderator_cell.id])]\n", + "tally.filters.append(energy_filter)\n", "tally.scores = ['flux']\n", "tallies_file.add_tally(tally)\n", "\n", "# Instantiate reaction rate Tally in fuel\n", "tally = openmc.Tally(name='fuel rxn rates')\n", - "tally.filters = [openmc.Filter(type='cell', bins=[fuel_cell.id]),\n", - " energy_filter]\n", + "tally.filters = [openmc.Filter(type='cell', bins=[fuel_cell.id])]\n", + "tally.filters.append(energy_filter)\n", "tally.scores = ['nu-fission', 'scatter']\n", "tally.nuclides = [u238, u235]\n", "tallies_file.add_tally(tally)\n", @@ -516,8 +516,8 @@ "\n", "# Instantiate flux Tally in moderator and fuel\n", "tally = openmc.Tally(name='need-to-slice')\n", - "tally.filters = [openmc.Filter(type='cell', bins=[fuel_cell.id, moderator_cell.id]),\n", - " energy_filter]\n", + "tally.filters = [openmc.Filter(type='cell', bins=[fuel_cell.id, moderator_cell.id])]\n", + "tally.filters.append(energy_filter)\n", "tally.scores = ['nu-fission', 'scatter']\n", "tally.nuclides = [h1, u238]\n", "tallies_file.add_tally(tally)" diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index ad987d70f1..68d34dce38 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -510,14 +510,14 @@ class MGXS(object): # Create each Tally needed to compute the multi group cross section for score, key, filters in zip(scores, keys, all_filters): self.tallies[key] = openmc.Tally(name=self.name) - self.tallies[key].scores.append(score) + self.tallies[key].scores = [score] self.tallies[key].estimator = estimator - self.tallies[key].filters.append(domain_filter) + self.tallies[key].filters = [domain_filter] # If a tally trigger was specified, add it to each tally if self.tally_trigger: trigger_clone = copy.deepcopy(self.tally_trigger) - trigger_clone.scores.append(score) + trigger_clone.scores = [score] self.tallies[key].triggers.append(trigger_clone) # Add all non-domain specific Filters (e.g., 'energy') to the Tally diff --git a/openmc/tallies.py b/openmc/tallies.py index 9d6ed4b7f1..d565121555 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -449,9 +449,9 @@ class Tally(object): """ - warnings.warn("Tally.add_trigger(...) has been deprecated and may be " - "removed in a future version. Tally triggers should be " - "defined using the triggers property directly.", + warnings.warn('Tally.add_trigger(...) has been deprecated and may be ' + 'removed in a future version. Tally triggers should be ' + 'defined using the triggers property directly.', DeprecationWarning) self.triggers.append(trigger) @@ -540,9 +540,9 @@ class Tally(object): """ - warnings.warn("Tally.add_filter(...) has been deprecated and may be " - "removed in a future version. Tally filters should be " - "defined using the filters property directly.", + warnings.warn('Tally.add_filter(...) has been deprecated and may be ' + 'removed in a future version. Tally filters should be ' + 'defined using the filters property directly.', DeprecationWarning) self.filters.append(new_filter) @@ -565,9 +565,9 @@ class Tally(object): """ - warnings.warn("Tally.add_nuclide(...) has been deprecated and may be " - "removed in a future version. Tally nuclides should be " - "defined using the nuclides property directly.", + warnings.warn('Tally.add_nuclide(...) has been deprecated and may be ' + 'removed in a future version. Tally nuclides should be ' + 'defined using the nuclides property directly.', DeprecationWarning) self.nuclides.append(nuclide) @@ -589,9 +589,9 @@ class Tally(object): """ - warnings.warn("Tally.add_score(...) has been deprecated and may be " - "removed in a future version. Tally scores should be " - "defined using the scores property directly.", + warnings.warn('Tally.add_score(...) has been deprecated and may be ' + 'removed in a future version. Tally scores should be ' + 'defined using the scores property directly.', DeprecationWarning) self.scores.append(score) @@ -2324,9 +2324,9 @@ class Tally(object): new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - new_tally.filters = self.filters - new_tally.nuclides = self.nuclides - new_tally.scores = self.scores + new_tally.filters = copy.deepcopy(self.filters) + new_tally.nuclides = copy.deepcopy(self.nuclides) + new_tally.scores = copy.deepcopy(self.scores) # If this tally operand is sparse, sparsify the new tally new_tally.sparse = self.sparse @@ -2396,9 +2396,9 @@ class Tally(object): new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - new_tally.filters = self.filters - new_tally.nuclides = self.nuclides - new_tally.scores = self.scores + new_tally.filters = copy.deepcopy(self.filters) + new_tally.nuclides = copy.deepcopy(self.nuclides) + new_tally.scores = copy.deepcopy(self.scores) # If this tally operand is sparse, sparsify the new tally new_tally.sparse = self.sparse @@ -2468,9 +2468,9 @@ class Tally(object): new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - new_tally.filters = self.filters - new_tally.nuclides = self.nuclides - new_tally.scores = self.scores + new_tally.filters = copy.deepcopy(self.filters) + new_tally.nuclides = copy.deepcopy(self.nuclides) + new_tally.scores = copy.deepcopy(self.scores) # If this tally operand is sparse, sparsify the new tally new_tally.sparse = self.sparse @@ -2544,9 +2544,9 @@ class Tally(object): new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - new_tally.filters = self.filters - new_tally.nuclides = self.nuclides - new_tally.scores = self.scores + new_tally.filters = copy.deepcopy(self.filters) + new_tally.nuclides = copy.deepcopy(self.nuclides) + new_tally.scores = copy.deepcopy(self.scores) # If original tally was sparse, sparsify the exponentiated tally new_tally.sparse = self.sparse From 0138f0c4a26f8c54809de51e30344ef15f1d8642 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 9 Mar 2016 08:47:14 -0600 Subject: [PATCH 362/650] Indicate minimum version of pandas in setup.py --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 87fdff68cf..e66b0b7a0f 100644 --- a/setup.py +++ b/setup.py @@ -36,7 +36,7 @@ if have_setuptools: # Optional dependencies 'extras_require': { - 'pandas': ['pandas'], + 'pandas': ['pandas>=0.17.0'], 'sparse' : ['scipy'], 'vtk': ['vtk', 'silomesh'], 'validate': ['lxml'] From 7c2890baec4e3a873f45be54c9d89a3cb703ec64 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 9 Mar 2016 08:50:38 -0600 Subject: [PATCH 363/650] Change a few double quotes to single quotes in openmc.trigger --- openmc/trigger.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openmc/trigger.py b/openmc/trigger.py index ce7d432c2e..ad2e9d6814 100644 --- a/openmc/trigger.py +++ b/openmc/trigger.py @@ -117,9 +117,9 @@ class Trigger(object): """ - warnings.warn("Trigger.add_score(...) has been deprecated and may be " - "removed in a future version. Tally trigger scores should " - "be defined using the scores property directly.", + warnings.warn('Trigger.add_score(...) has been deprecated and may be ' + 'removed in a future version. Tally trigger scores should ' + 'be defined using the scores property directly.', DeprecationWarning) self.scores.append(score) From ff49b0eaac50038c4faf79b3209516b3262b442d Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 9 Mar 2016 08:53:22 -0600 Subject: [PATCH 364/650] deepcopy some more filters, scores, nuclides --- openmc/tallies.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index 73a69bbcf8..1e47811e34 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -2504,9 +2504,9 @@ class Tally(object): new_tally.with_summary = self.with_summary new_tally.num_realization = self.num_realizations - new_tally.filters = self.filters - new_tally.nuclides = self.nuclides - new_tally.scores = self.scores + new_tally.filters = copy.deepcopy(self.filters) + new_tally.nuclides = copy.deepcopy(self.nuclides) + new_tally.scores = copy.deepcopy(self.scores) # If this tally operand is sparse, sparsify the new tally new_tally.sparse = self.sparse From a6d153d3949983dae42d51c5fbe632b52b31a4ef Mon Sep 17 00:00:00 2001 From: jingang Date: Wed, 9 Mar 2016 12:49:52 -0500 Subject: [PATCH 365/650] Remove unused variable --- src/cross_section.F90 | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/cross_section.F90 b/src/cross_section.F90 index cd22a8f055..2f2e7fd7e9 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -354,19 +354,17 @@ contains integer, intent(in) :: i_nuclide ! index into nuclides array real(8), intent(in) :: E ! energy - integer :: i ! loop index integer :: i_energy ! index for energy integer :: i_low ! band index at lower bounding energy integer :: i_up ! band index at upper bounding energy - integer :: same_nuc_idx ! index of same nuclide real(8) :: f ! interpolation factor real(8) :: r ! pseudo-random number real(8) :: elastic ! elastic cross section real(8) :: capture ! (n,gamma) cross section real(8) :: fission ! fission cross section real(8) :: inelastic ! inelastic cross section - type(UrrData), pointer :: urr - type(NuclideCE), pointer :: nuc + type(UrrData), pointer :: urr + type(NuclideCE), pointer :: nuc micro_xs(i_nuclide) % use_ptable = .true. From a5c6a940991bcf5b99fcb1dad98c5b47d7879708 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Wed, 9 Mar 2016 18:23:46 -0500 Subject: [PATCH 366/650] Add resonance scattering to the Python API Also fix the resonance scattering test to have thermal neutrons that actually use the RS models. Also fix a typo in settings.xml that didn't allow fixed source calculations. --- openmc/settings.py | 136 +++++++++++++++++- tests/test_resonance_scattering/geometry.xml | 8 -- .../test_resonance_scattering/inputs_true.dat | 1 + tests/test_resonance_scattering/materials.xml | 9 -- .../results_true.dat | 2 +- tests/test_resonance_scattering/settings.xml | 27 ---- .../test_resonance_scattering.py | 76 +++++++++- 7 files changed, 211 insertions(+), 48 deletions(-) delete mode 100644 tests/test_resonance_scattering/geometry.xml create mode 100644 tests/test_resonance_scattering/inputs_true.dat delete mode 100644 tests/test_resonance_scattering/materials.xml delete mode 100644 tests/test_resonance_scattering/settings.xml diff --git a/openmc/settings.py b/openmc/settings.py index cb0207e71a..01e665c6e6 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -9,6 +9,7 @@ import numpy as np from openmc.clean_xml import * from openmc.checkvalue import (check_type, check_length, check_value, check_greater_than, check_less_than) +from openmc.nuclide import Nuclide from openmc.source import Source if sys.version_info[0] >= 3: @@ -125,6 +126,8 @@ class SettingsFile(object): Coordinates of the lower-left point of the UFS mesh ufs_upper_right : tuple or list Coordinates of the upper-right point of the UFS mesh + resonance_scattering : ResonanceScattering or iterable thereof + The elastic scattering model to use for resonant isotopes. """ @@ -205,6 +208,8 @@ class SettingsFile(object): self._run_mode_subelement = None self._source_element = None + self._resonance_scattering = None + @property def run_mode(self): return self._run_mode @@ -393,9 +398,13 @@ class SettingsFile(object): def dd_count_interactions(self): return self._dd_count_interactions + @property + def resonance_scattering(self): + return self._resonance_scattering + @run_mode.setter def run_mode(self, run_mode): - if 'run_mode' not in ['eigenvalue', 'fixed source']: + if run_mode not in ['eigenvalue', 'fixed source']: msg = 'Unable to set run mode to "{0}". Only "eigenvalue" ' \ 'and "fixed source" are supported."'.format(run_mode) raise ValueError(msg) @@ -764,6 +773,15 @@ class SettingsFile(object): self._dd_count_interactions = interactions + @resonance_scattering.setter + def resonance_scattering(self, res): + if isinstance(res, Iterable): + check_type('resonance_scattering', res, Iterable, + ResonanceScattering) + else: + check_type('resonance_scattering', res, ResonanceScattering) + self._resonance_scattering = res + def _create_run_mode_subelement(self): if self.run_mode == 'eigenvalue': @@ -1043,6 +1061,36 @@ class SettingsFile(object): subelement = ET.SubElement(element, "count_interactions") subelement.text = str(self._dd_count_interactions).lower() + def _create_resonance_scattering_element(self): + if self.resonance_scattering is None: return + + element = ET.SubElement(self._settings_file, "resonance_scattering") + + # Create an iterable version of resonance_scattering + if isinstance(self.resonance_scattering, Iterable): + res = self.resonance_scattering + else: + res = [self.resonance_scattering] + + for r in res: + if r.nuclide.name != r.nuclide_0K.name: + raise ValueError("The `nuclide` and `nuclide_0K` attributes of " + "a ResonantScattering object must have identical names.") + scatterer = ET.SubElement(element, "scatterer") + subelement = ET.SubElement(scatterer, 'nuclide') + subelement.text = r.nuclide.name + subelement = ET.SubElement(scatterer, 'method') + subelement.text = r.method + subelement = ET.SubElement(scatterer, 'xs_label') + subelement.text = str(r.nuclide.zaid) + '.' + str(r.nuclide.xs) + subelement = ET.SubElement(scatterer, 'xs_label_0K') + subelement.text = str(r.nuclide_0K.zaid) + '.' \ + + str(r.nuclide_0K.xs) + subelement = ET.SubElement(scatterer, 'E_min') + subelement.text = str(r.E_min) + subelement = ET.SubElement(scatterer, 'E_max') + subelement.text = str(r.E_max) + def export_to_xml(self): """Create a settings.xml file that can be used for a simulation. @@ -1079,6 +1127,7 @@ class SettingsFile(object): self._create_track_subelement() self._create_ufs_subelement() self._create_dd_subelement() + self._create_resonance_scattering_element() # Clean the indentation in the file to be user-readable clean_xml_indentation(self._settings_file) @@ -1087,3 +1136,88 @@ class SettingsFile(object): tree = ET.ElementTree(self._settings_file) tree.write("settings.xml", xml_declaration=True, encoding='utf-8', method="xml") + + +class ResonanceScattering(object): + """Specification of the elastic scattering model for resonant isotopes. + + Attributes + ---------- + nuclide : openmc.nuclide.Nuclide + The nuclide affected by this resonance scattering treatment. + nuclide_0K : openmc.nuclide.Nuclide + This should be the same isotope as `nuclide`, but it should have an + `xs` attribute that identifies 0 Kelvin data. + method : str + The method used to sample outgoing scattering energies. Valid options + are 'ARES', 'CXS' (constant cross section), 'DBRC' (Doppler broadening + rejection correction), and 'WCM' (weight correction method). + E_min : float + The minimum energy above which the specified method is applied. By + default, CXS will be used below `E_min`. + E_max : float + The maximum energy below which the specified method is applied. By + default, the asymptotic target-at-rest model is applied above `E_max`. + + """ + + def __init__(self): + self._nuclide = None + self._nuclide_0K = None + self._method = None + self._E_min = None + self._E_max = None + + @property + def nuclide(self): + return self._nuclide + + @property + def nuclide_0K(self): + return self._nuclide_0K + + @property + def method(self): + return self._method + + @property + def E_min(self): + return self._E_min + + @property + def E_max(self): + return self._E_max + + @nuclide.setter + def nuclide(self, nuc): + check_type('nuclide', nuc, Nuclide) + if nuc.zaid == None: raise ValueError("The `nuclide` must have an " + "explicitly defined `zaid` attribute.") + self._nuclide = nuc + + @nuclide_0K.setter + def nuclide_0K(self, nuc): + check_type('nuclide_0K', nuc, Nuclide) + if nuc.zaid == None: raise ValueError("The `nuclide_0K` must have an " + "explicitly defined `zaid` attribute.") + self._nuclide_0K = nuc + + @method.setter + def method(self, m): + check_type('method', m, basestring) + if m not in ('ARES', 'CXS', 'DBRC', 'WCM'): + raise ValueError("Invalid resonance scattering method specified. " + "Valid methods are 'ARES', 'CXS', 'DBRC', and 'WCM'.") + self._method = m + + @E_min.setter + def E_min(self, E): + check_type('E_min', E, Real) + check_greater_than('E_min', E, 0, True) + self._E_min = E + + @E_max.setter + def E_max(self, E): + check_type('E_max', E, Real) + check_greater_than('E_max', E, 0, True) + self._E_max = E diff --git a/tests/test_resonance_scattering/geometry.xml b/tests/test_resonance_scattering/geometry.xml deleted file mode 100644 index bc56030e18..0000000000 --- a/tests/test_resonance_scattering/geometry.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/tests/test_resonance_scattering/inputs_true.dat b/tests/test_resonance_scattering/inputs_true.dat new file mode 100644 index 0000000000..f2a875c7eb --- /dev/null +++ b/tests/test_resonance_scattering/inputs_true.dat @@ -0,0 +1 @@ +ece83bb075ed8144af89ce7cebf1577dcb2489d2e9ce4afbe61a3e4398837e7a9aaa2ae0cea0a6542f51ca5e0d119b570c675ed1dca0d74237cd5fdce0b606a3 \ No newline at end of file diff --git a/tests/test_resonance_scattering/materials.xml b/tests/test_resonance_scattering/materials.xml deleted file mode 100644 index 52a8c04be2..0000000000 --- a/tests/test_resonance_scattering/materials.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/tests/test_resonance_scattering/results_true.dat b/tests/test_resonance_scattering/results_true.dat index a649013c07..e7056e4fab 100644 --- a/tests/test_resonance_scattering/results_true.dat +++ b/tests/test_resonance_scattering/results_true.dat @@ -1,2 +1,2 @@ k-combined: -6.842159E-02 8.481029E-04 +1.440556E+00 6.383274E-02 diff --git a/tests/test_resonance_scattering/settings.xml b/tests/test_resonance_scattering/settings.xml deleted file mode 100644 index 7ce4f23ac7..0000000000 --- a/tests/test_resonance_scattering/settings.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - U-238 - cxs - 92238.71c - 92238.71c - 5.0e-6 - 40.0e-6 - - - - - 10 - 5 - 1000 - - - - - -4 -4 -4 4 4 4 - - - - diff --git a/tests/test_resonance_scattering/test_resonance_scattering.py b/tests/test_resonance_scattering/test_resonance_scattering.py index 2a595f3e66..04a2916a3d 100644 --- a/tests/test_resonance_scattering/test_resonance_scattering.py +++ b/tests/test_resonance_scattering/test_resonance_scattering.py @@ -3,9 +3,81 @@ import os import sys sys.path.insert(0, os.pardir) -from testing_harness import TestHarness +from testing_harness import TestHarness, PyAPITestHarness +import openmc + + +class ResonanceScatteringTestHarness(PyAPITestHarness): + def _build_inputs(self): + # Materials + mat = openmc.Material(material_id=1) + mat.set_density('g/cc', 1.0) + mat.add_nuclide('U-238', 1.0) + mat.add_nuclide('U-235', 0.02) + mat.add_nuclide('Pu-239', 0.02) + mat.add_nuclide('H-1', 20.0) + + mats_file = openmc.MaterialsFile() + mats_file.default_xs = '71c' + mats_file.add_material(mat) + mats_file.export_to_xml() + + # Geometry + dumb_surface = openmc.XPlane(x0=100) + dumb_surface.boundary_type = 'reflective' + + c1 = openmc.Cell(cell_id=1) + c1.fill = mat + c1.region = -dumb_surface + + root_univ = openmc.Universe(universe_id=0) + root_univ.add_cell(c1) + + geometry = openmc.Geometry() + geometry.root_universe = root_univ + geo_file = openmc.GeometryFile() + geo_file.geometry = geometry + geo_file.export_to_xml() + + # Settings + nuclide = openmc.Nuclide('U-238', '71c') + nuclide.zaid = 92238 + res_scatt_dbrc = openmc.ResonanceScattering() + res_scatt_dbrc.nuclide = nuclide + res_scatt_dbrc.nuclide_0K = nuclide # This is a bad idea! Just for tests + res_scatt_dbrc.method = 'DBRC' + res_scatt_dbrc.E_min = 1e-6 + res_scatt_dbrc.E_max = 210e-6 + + nuclide = openmc.Nuclide('U-235', '71c') + nuclide.zaid = 92235 + res_scatt_wcm = openmc.ResonanceScattering() + res_scatt_wcm.nuclide = nuclide + res_scatt_wcm.nuclide_0K = nuclide + res_scatt_wcm.method = 'WCM' + res_scatt_wcm.E_min = 1e-6 + res_scatt_wcm.E_max = 210e-6 + + nuclide = openmc.Nuclide('Pu-239', '71c') + nuclide.zaid = 94239 + res_scatt_ares = openmc.ResonanceScattering() + res_scatt_ares.nuclide = nuclide + res_scatt_ares.nuclide_0K = nuclide + res_scatt_ares.method = 'ARES' + res_scatt_ares.E_min = 1e-6 + res_scatt_ares.E_max = 210e-6 + + sets_file = openmc.SettingsFile() + sets_file.batches = 10 + sets_file.inactive = 5 + sets_file.particles = 1000 + sets_file.source = openmc.source.Source( + space=openmc.stats.Box([-4, -4, -4], [4, 4, 4])) + sets_file.resonance_scattering = [res_scatt_dbrc, res_scatt_wcm, + res_scatt_ares] + sets_file.export_to_xml() if __name__ == '__main__': - harness = TestHarness('statepoint.10.*') + harness = ResonanceScatteringTestHarness('statepoint.10.*') harness.main() From 8088eda6fd4bcc19f37c291b7d087b1cc4dd20c2 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 9 Mar 2016 20:01:47 -0500 Subject: [PATCH 367/650] Removing need to have coeffs (inout) in the scattdata_init routines --- src/scattdata_header.F90 | 76 ++++++++++++++++++++++++---------------- 1 file changed, 45 insertions(+), 31 deletions(-) diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index dbbedc6399..955e667831 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -49,7 +49,7 @@ module scattdata_header import ScattData class(ScattData), intent(inout) :: this ! Scattering Object to work with real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix - real(8), intent(inout) :: coeffs(:,:,:) ! Coefficients to use + real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use end subroutine scattdata_init_ pure function scattdata_calc_f_(this, gin, gout, mu) result(f) @@ -169,31 +169,36 @@ contains subroutine scattdatalegendre_init(this, mult, coeffs) class(ScattDataLegendre), intent(inout) :: this ! Object to work on real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix - real(8), intent(inout) :: coeffs(:,:,:) ! Coefficients to use + real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use real(8) :: dmu, mu, f, norm integer :: imu, Nmu, gout, gin, groups, order real(8), allocatable :: energy(:,:) + real(8), allocatable :: matrix(:,:,:) groups = size(coeffs,dim=3) order = size(coeffs,dim=1) - ! Get scattxs value first before anything happens to coeffs + ! make a copy of coeffs that we can use to extract data and normalize + allocate(matrix(order,groups,groups)) + matrix = coeffs + + ! Get scattxs value allocate(this % scattxs(groups)) - ! Get this by summing the now un-normalized P0 coefficient in coeffs + ! Get this by summing the un-normalized P0 coefficient in matrix ! over all outgoing groups - this % scattxs = sum(coeffs(1,:,:),dim=1) + this % scattxs = sum(matrix(1,:,:),dim=1) allocate(energy(groups,groups)) energy = ZERO - ! Build energy transfer probability matrix from data in coeffs - ! while also normalizing coeffs itself (making CDF of f(mu=1)=1) + ! Build energy transfer probability matrix from data in matrix + ! while also normalizing matrix itself (making CDF of f(mu=1)=1) do gin = 1, groups do gout = 1, groups - norm = coeffs(1,gout,gin) + norm = matrix(1,gout,gin) energy(gout,gin) = norm if (norm /= ZERO) then - coeffs(:,gout,gin) = coeffs(:,gout,gin) / norm + matrix(:,gout,gin) = matrix(:,gout,gin) / norm end if end do end do @@ -201,10 +206,10 @@ contains call scattdata_init(this, order, energy, mult) allocate(this % max_val(groups)) - ! Set dist values from coeffs and initialize max_val + ! Set dist values from matrix and initialize max_val do gin = 1, groups do gout = this % gmin(gin), this % gmax(gin) - this % dist(gin) % data(:,gout) = coeffs(:,gout,gin) + this % dist(gin) % data(:,gout) = matrix(:,gout,gin) end do allocate(this % max_val(gin) % data(this % gmin(gin):this % gmax(gin))) this % max_val(gin) % data = ZERO @@ -240,32 +245,37 @@ contains subroutine scattdatahistogram_init(this, mult, coeffs) class(ScattDataHistogram), intent(inout) :: this ! Object to work on - real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix - real(8), intent(inout) :: coeffs(:,:,:) ! Coefficients to use + real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix + real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use integer :: imu, gin, gout, groups, order real(8) :: norm real(8), allocatable :: energy(:,:) + real(8), allocatable :: matrix(:,:,:) groups = size(coeffs,dim=3) order = size(coeffs,dim=1) - ! Get scattxs value first before anything happens to coeffs + ! make a copy of coeffs that we can use to extract data and normalize + allocate(matrix(order,groups,groups)) + matrix = coeffs + + ! Get scattxs value allocate(this % scattxs(groups)) - ! Get this by summing the now un-normalized P0 coefficient in coeffs + ! Get this by summing the un-normalized P0 coefficient in matrix ! over all outgoing groups - this % scattxs = sum(sum(coeffs(:,:,:),dim=1),dim=1) + this % scattxs = sum(sum(matrix(:,:,:),dim=1),dim=1) allocate(energy(groups,groups)) energy = ZERO - ! Build energy transfer probability matrix from data in coeffs - ! while also normalizing coeffs itself (making CDF of f(mu=1)=1) + ! Build energy transfer probability matrix from data in matrix + ! while also normalizing matrix itself (making CDF of f(mu=1)=1) do gin = 1, groups do gout = 1, groups - norm = sum(coeffs(:,gout,gin)) + norm = sum(matrix(:,gout,gin)) energy(gout,gin) = norm if (norm /= ZERO) then - coeffs(:,gout,gin) = coeffs(:,gout,gin) / norm + matrix(:,gout,gin) = matrix(:,gout,gin) / norm end if end do end do @@ -287,11 +297,11 @@ contains this % gmin(gin):this % gmax(gin))) do gout = this % gmin(gin), this % gmax(gin) ! Store the histogram - this % fmu(gin) % data(:,gout) = coeffs(:,gout,gin) + this % fmu(gin) % data(:,gout) = matrix(:,gout,gin) ! Integrate the histogram - this % dist(gin) % data(1,gout) = this % dmu * coeffs(1,gout,gin) + this % dist(gin) % data(1,gout) = this % dmu * matrix(1,gout,gin) do imu = 2, order - this % dist(gin) % data(imu,gout) = this % dmu * coeffs(imu,gout,gin) + & + this % dist(gin) % data(imu,gout) = this % dmu * matrix(imu,gout,gin) + & this % dist(gin) % data(imu - 1,gout) end do @@ -309,15 +319,20 @@ contains subroutine scattdatatabular_init(this, mult, coeffs) class(ScattDataTabular), intent(inout) :: this ! Object to work on real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix - real(8), intent(inout) :: coeffs(:,:,:) ! Coefficients to use + real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use integer :: imu, gin, gout, groups, order real(8) :: norm real(8), allocatable :: energy(:,:) + real(8), allocatable :: matrix(:,:,:) groups = size(coeffs,dim=3) order = size(coeffs,dim=1) + ! make a copy of coeffs that we can use to extract data and normalize + allocate(matrix(order,groups,groups)) + matrix = coeffs + ! Build the angular distribution mu values allocate(this % mu(order)) this % dmu = TWO / real(order - 1,8) @@ -327,7 +342,7 @@ contains end do this % mu(order) = ONE - ! Get scattxs before anything happens to coeffs + ! Get scattxs allocate(this % scattxs(groups)) ! Get this by integrating the scattering distribution over all mu points ! and then combining over all outgoing groups @@ -336,8 +351,8 @@ contains norm = ZERO do gout = 1, groups do imu = 2, order - norm = norm + HALF * this % dmu * (coeffs(imu - 1,gout,gin) + & - coeffs(imu,gout,gin)) + norm = norm + HALF * this % dmu * (matrix(imu - 1,gout,gin) + & + matrix(imu,gout,gin)) end do end do this % scattxs(gin) = norm @@ -345,15 +360,14 @@ contains allocate(energy(groups,groups)) energy = ZERO - ! Build energy transfer probability matrix from data in coeffs + ! Build energy transfer probability matrix from data in matrix do gin = 1, groups do gout = 1, groups norm = ZERO do imu = 2, order norm = norm + HALF * this % dmu * & - (coeffs(imu - 1,gout,gin) + coeffs(imu,gout,gin)) + (matrix(imu - 1,gout,gin) + matrix(imu,gout,gin)) end do - ! energy(gout,gin) = sum(coeffs(:,gout,gin)) energy(gout,gin) = norm end do end do @@ -367,7 +381,7 @@ contains do gout = this % gmin(gin), this % gmax(gin) ! Coeffs contain f(mu), put in f(mu) as that is where the ! PDF lives - this % fmu(gin) % data(:,gout) = coeffs(:,gout,gin) + this % fmu(gin) % data(:,gout) = matrix(:,gout,gin) ! Force positivity do imu = 1, order From a53b3fc781f78334e75e6872088895daf8f33df8 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 9 Mar 2016 21:01:26 -0500 Subject: [PATCH 368/650] Updated test results, made fission sampling in MG mode a smidge faster --- src/macroxs_header.F90 | 8 +- src/scattdata_header.F90 | 2 + tests/test_mg_basic/results_true.dat | 2 +- tests/test_mg_max_order/inputs_true.dat | 2 +- tests/test_mg_max_order/results_true.dat | 2 +- tests/test_mg_max_order/test_mg_max_order.py | 3 +- tests/test_mg_nuclide/results_true.dat | 2 +- tests/test_mg_tallies/results_true.dat | 1306 +++++++++--------- 8 files changed, 665 insertions(+), 662 deletions(-) diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index f86da17299..2fd7dfe28c 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -628,8 +628,8 @@ contains real(8) :: prob ! Running probability xi = prn() - prob = ZERO - gout = 0 + gout = 1 + prob = this % chi(gout,gin) do while (prob < xi) gout = gout + 1 @@ -650,8 +650,8 @@ contains call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) xi = prn() - prob = ZERO - gout = 0 + gout = 1 + prob = this % chi(gout,gin,iazi,ipol) do while (prob < xi) gout = gout + 1 diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index 955e667831..04d48d22fd 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -308,6 +308,8 @@ contains ! Now make sure integral norms to zero norm = this % dist(gin) % data(order,gout) if (norm > ZERO) then + this % fmu(gin) % data(:,gout) = & + this % fmu(gin) % data(:,gout) / norm this % dist(gin) % data(:,gout) = & this % dist(gin) % data(:,gout) / norm end if diff --git a/tests/test_mg_basic/results_true.dat b/tests/test_mg_basic/results_true.dat index 35f3e73d40..55c2af8136 100644 --- a/tests/test_mg_basic/results_true.dat +++ b/tests/test_mg_basic/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.045320E+00 5.851680E-02 +1.033731E+00 4.974463E-02 diff --git a/tests/test_mg_max_order/inputs_true.dat b/tests/test_mg_max_order/inputs_true.dat index 1ad336e195..937ceb462b 100644 --- a/tests/test_mg_max_order/inputs_true.dat +++ b/tests/test_mg_max_order/inputs_true.dat @@ -1 +1 @@ -abe20c626d613e73ccb1a3f8468ad1b9aecca528afa9e8131a411d754eb86b8ab64a6fb1fdc9c0b8b8158ff7c82f548de5912041bf035aa5a2d4532cfe0c9510 \ No newline at end of file +322483933c38fe6ecfa41d632c7214b5cd35af4a56415872585914d9c775dc99171e918eebf3221ab6292689c37269b8c3ce5ff85b3633b5c05ee481bf1b212a \ No newline at end of file diff --git a/tests/test_mg_max_order/results_true.dat b/tests/test_mg_max_order/results_true.dat index 1b23005602..f75c1300ab 100644 --- a/tests/test_mg_max_order/results_true.dat +++ b/tests/test_mg_max_order/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.083030E+00 1.855038E-02 +1.055274E+00 1.715904E-02 diff --git a/tests/test_mg_max_order/test_mg_max_order.py b/tests/test_mg_max_order/test_mg_max_order.py index 2f5ee4e4e6..d64956fbf5 100644 --- a/tests/test_mg_max_order/test_mg_max_order.py +++ b/tests/test_mg_max_order/test_mg_max_order.py @@ -76,9 +76,10 @@ class MGMaxOrderTestHarness(PyAPITestHarness): self._input_set = MGNuclideInputSet() def _build_inputs(self): - super(MGMaxOrderTestHarness, self)._build_inputs() # Set P1 scattering self._input_set.settings.max_order = 1 + # Call standard input build + super(MGMaxOrderTestHarness, self)._build_inputs() if __name__ == '__main__': harness = MGMaxOrderTestHarness('statepoint.10.*', False, mg=True) diff --git a/tests/test_mg_nuclide/results_true.dat b/tests/test_mg_nuclide/results_true.dat index 5b60cef222..5e05e24513 100644 --- a/tests/test_mg_nuclide/results_true.dat +++ b/tests/test_mg_nuclide/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.380785E-01 5.556526E-03 +1.317412E-01 5.926047E-03 diff --git a/tests/test_mg_tallies/results_true.dat b/tests/test_mg_tallies/results_true.dat index 0cb47a712d..5f4964a4ee 100644 --- a/tests/test_mg_tallies/results_true.dat +++ b/tests/test_mg_tallies/results_true.dat @@ -1,86 +1,86 @@ k-combined: -1.045320E+00 5.851680E-02 +1.033731E+00 4.974463E-02 tally 1: -2.286064E+00 -1.057353E+00 -6.503987E-02 -8.851627E-04 -3.376363E+00 -2.323627E+00 -2.733240E-02 -1.607534E-04 -6.776283E-02 -9.880704E-04 -2.391658E+00 -1.201477E+00 -7.241106E-02 -1.103780E-03 -3.614949E+00 -2.730438E+00 -3.146867E-02 -2.110753E-04 -7.801752E-02 -1.297373E-03 -2.762725E+00 -1.705088E+00 -8.684520E-02 -1.654173E-03 -4.172232E+00 -3.847245E+00 -3.834947E-02 -3.212662E-04 -9.507651E-02 -1.974662E-03 -2.802290E+00 -1.773339E+00 -8.347451E-02 -1.574952E-03 -4.206829E+00 -3.971225E+00 -3.593646E-02 -2.967708E-04 -8.909414E-02 -1.824101E-03 -2.383708E+00 -1.176784E+00 -7.337273E-02 -1.097240E-03 -3.624903E+00 -2.690697E+00 -3.213890E-02 -2.139948E-04 -7.967917E-02 -1.315319E-03 -2.398216E+00 -1.234567E+00 -6.905889E-02 -9.879327E-04 -3.479138E+00 -2.538252E+00 -2.911091E-02 -1.750648E-04 -7.217215E-02 -1.076035E-03 -2.563998E+00 -1.354089E+00 -7.357381E-02 -1.097086E-03 -3.753156E+00 -2.867475E+00 -3.097034E-02 -1.948794E-04 -7.678206E-02 -1.197826E-03 -2.293243E+00 -1.172767E+00 -6.702582E-02 -9.267762E-04 -3.407144E+00 -2.469472E+00 -2.857514E-02 -1.688581E-04 -7.084385E-02 -1.037886E-03 +3.163666E+00 +2.165097E+00 +9.964133E-02 +2.052446E-03 +4.861844E+00 +4.978206E+00 +4.417216E-02 +4.040216E-04 +1.095122E-01 +2.483317E-03 +3.324437E+00 +2.299850E+00 +9.574329E-02 +1.968438E-03 +4.881821E+00 +4.943976E+00 +4.041706E-02 +3.650255E-04 +1.002025E-01 +2.243628E-03 +3.199995E+00 +2.091126E+00 +8.859707E-02 +1.592091E-03 +4.671522E+00 +4.439001E+00 +3.660515E-02 +2.728602E-04 +9.075197E-02 +1.677135E-03 +2.910284E+00 +1.723356E+00 +9.207508E-02 +1.744614E-03 +4.421737E+00 +3.979362E+00 +4.080063E-02 +3.481887E-04 +1.011535E-01 +2.140141E-03 +2.506574E+00 +1.326705E+00 +8.637880E-02 +1.598941E-03 +3.920683E+00 +3.263607E+00 +3.978214E-02 +3.424111E-04 +9.862841E-02 +2.104629E-03 +2.951103E+00 +1.826551E+00 +8.748324E-02 +1.648479E-03 +4.309848E+00 +3.903067E+00 +3.741466E-02 +3.141687E-04 +9.275891E-02 +1.931037E-03 +3.048521E+00 +2.007251E+00 +9.483162E-02 +1.935789E-03 +4.599534E+00 +4.527383E+00 +4.168244E-02 +3.813062E-04 +1.033396E-01 +2.343697E-03 +2.982958E+00 +1.966657E+00 +9.896454E-02 +2.016812E-03 +4.645921E+00 +4.599347E+00 +4.489740E-02 +4.108900E-04 +1.113102E-01 +2.525534E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -171,86 +171,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.604127E+00 -1.442914E+00 -7.142299E-02 -1.083324E-03 -3.786547E+00 -2.990260E+00 -2.935394E-02 -1.905369E-04 -7.277467E-02 -1.171135E-03 -2.457755E+00 -1.228862E+00 -6.655630E-02 -9.411086E-04 -3.528688E+00 -2.561047E+00 -2.709124E-02 -1.640319E-04 -6.716494E-02 -1.008221E-03 -2.450846E+00 -1.295337E+00 -6.779278E-02 -9.992248E-04 -3.519409E+00 -2.693620E+00 -2.793186E-02 -1.714064E-04 -6.924902E-02 -1.053549E-03 -2.469234E+00 -1.300419E+00 -7.347034E-02 -1.175743E-03 -3.675903E+00 -2.880386E+00 -3.155996E-02 -2.200036E-04 -7.824386E-02 -1.352252E-03 -2.576106E+00 -1.365945E+00 -7.241428E-02 -1.090052E-03 -3.719498E+00 -2.861357E+00 -3.008961E-02 -1.906170E-04 -7.459854E-02 -1.171627E-03 -2.503651E+00 -1.290812E+00 -7.432507E-02 -1.132918E-03 -3.702398E+00 -2.813425E+00 -3.186491E-02 -2.091477E-04 -7.899991E-02 -1.285525E-03 -2.395349E+00 -1.202098E+00 -7.095925E-02 -1.051988E-03 -3.559388E+00 -2.628753E+00 -3.041477E-02 -1.959992E-04 -7.540470E-02 -1.204709E-03 -1.910174E+00 -7.331782E-01 -6.366813E-02 -8.166135E-04 -2.966770E+00 -1.762376E+00 -2.893278E-02 -1.712979E-04 -7.173053E-02 -1.052882E-03 +2.806322E+00 +1.650116E+00 +8.677689E-02 +1.577748E-03 +4.271173E+00 +3.787053E+00 +3.812147E-02 +3.107861E-04 +9.451124E-02 +1.910246E-03 +2.767101E+00 +1.574082E+00 +8.523508E-02 +1.523190E-03 +4.143067E+00 +3.546386E+00 +3.725690E-02 +2.974028E-04 +9.236779E-02 +1.827986E-03 +2.767691E+00 +1.557585E+00 +7.816996E-02 +1.254835E-03 +4.015666E+00 +3.289915E+00 +3.260527E-02 +2.211412E-04 +8.083542E-02 +1.359243E-03 +2.734236E+00 +1.510579E+00 +8.505695E-02 +1.474976E-03 +4.114798E+00 +3.424404E+00 +3.737976E-02 +2.870194E-04 +9.267239E-02 +1.764164E-03 +2.421441E+00 +1.195490E+00 +8.292263E-02 +1.384777E-03 +3.817448E+00 +2.942804E+00 +3.814207E-02 +2.931372E-04 +9.456230E-02 +1.801767E-03 +2.724650E+00 +1.519118E+00 +9.238437E-02 +1.725646E-03 +4.305602E+00 +3.753830E+00 +4.235399E-02 +3.657508E-04 +1.050046E-01 +2.248086E-03 +2.703678E+00 +1.593893E+00 +8.744732E-02 +1.597761E-03 +4.110489E+00 +3.592877E+00 +3.913038E-02 +3.184391E-04 +9.701255E-02 +1.957285E-03 +2.707705E+00 +1.792230E+00 +8.754036E-02 +1.760104E-03 +4.203619E+00 +4.162497E+00 +3.927598E-02 +3.456207E-04 +9.737351E-02 +2.124357E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -341,86 +341,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.593479E+00 -1.421618E+00 -7.731733E-02 -1.249860E-03 -3.880469E+00 -3.167768E+00 -3.330331E-02 -2.319171E-04 -8.256599E-02 -1.425478E-03 -2.563470E+00 -1.449702E+00 -7.411043E-02 -1.158986E-03 -3.692974E+00 -2.935486E+00 -3.125554E-02 -2.061246E-04 -7.748913E-02 -1.266944E-03 -2.657580E+00 -1.493736E+00 -7.749682E-02 -1.277831E-03 -3.892576E+00 -3.190262E+00 -3.289903E-02 -2.334764E-04 -8.156370E-02 -1.435062E-03 -2.701357E+00 -1.517431E+00 -8.804410E-02 -1.639744E-03 -4.161224E+00 -3.606273E+00 -3.959674E-02 -3.345554E-04 -9.816875E-02 -2.056343E-03 -2.745200E+00 -1.523378E+00 -7.925308E-02 -1.270874E-03 -3.962649E+00 -3.165021E+00 -3.340000E-02 -2.283904E-04 -8.280570E-02 -1.403801E-03 -2.678775E+00 -1.492394E+00 -8.646776E-02 -1.554919E-03 -4.147456E+00 -3.551060E+00 -3.875994E-02 -3.125295E-04 -9.609415E-02 -1.920962E-03 -2.678888E+00 -1.497390E+00 -7.616647E-02 -1.203778E-03 -3.868905E+00 -3.108718E+00 -3.186093E-02 -2.136540E-04 -7.899003E-02 -1.313223E-03 -2.189117E+00 -9.756340E-01 -6.824988E-02 -9.549688E-04 -3.259136E+00 -2.150849E+00 -2.997262E-02 -1.883650E-04 -7.430850E-02 -1.157785E-03 +2.333969E+00 +1.124588E+00 +6.982134E-02 +1.014762E-03 +3.448351E+00 +2.435965E+00 +3.004987E-02 +1.926319E-04 +7.450003E-02 +1.184011E-03 +3.086286E+00 +1.981929E+00 +1.016918E-01 +2.146313E-03 +4.741530E+00 +4.626144E+00 +4.593581E-02 +4.489950E-04 +1.138847E-01 +2.759746E-03 +2.871515E+00 +1.672027E+00 +8.533571E-02 +1.469319E-03 +4.221958E+00 +3.599412E+00 +3.658547E-02 +2.721530E-04 +9.070318E-02 +1.672788E-03 +2.715053E+00 +1.498990E+00 +8.595576E-02 +1.530999E-03 +4.139891E+00 +3.493193E+00 +3.815373E-02 +3.059779E-04 +9.459122E-02 +1.880692E-03 +2.265823E+00 +1.080584E+00 +6.709890E-02 +9.696052E-04 +3.397886E+00 +2.446009E+00 +2.882467E-02 +1.820798E-04 +7.146249E-02 +1.119153E-03 +2.443336E+00 +1.255468E+00 +8.222450E-02 +1.373726E-03 +3.836077E+00 +3.019588E+00 +3.754438E-02 +2.866712E-04 +9.308051E-02 +1.762024E-03 +2.450506E+00 +1.305510E+00 +7.897423E-02 +1.293368E-03 +3.725732E+00 +2.954033E+00 +3.530661E-02 +2.549027E-04 +8.753260E-02 +1.566759E-03 +2.463151E+00 +1.385265E+00 +8.072623E-02 +1.376083E-03 +3.828575E+00 +3.178469E+00 +3.645911E-02 +2.733269E-04 +9.038989E-02 +1.680003E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -511,86 +511,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.761165E+00 -1.657839E+00 -7.810542E-02 -1.334149E-03 -4.026290E+00 -3.495574E+00 -3.264226E-02 -2.359256E-04 -8.092710E-02 -1.450116E-03 -2.601284E+00 -1.465130E+00 -7.485486E-02 -1.239170E-03 -3.829638E+00 -3.199488E+00 -3.159745E-02 -2.288567E-04 -7.833681E-02 -1.406667E-03 -2.419174E+00 -1.228134E+00 -7.422066E-02 -1.117508E-03 -3.667795E+00 -2.787048E+00 -3.244938E-02 -2.129012E-04 -8.044893E-02 -1.308597E-03 -2.491535E+00 -1.259222E+00 -7.470359E-02 -1.133979E-03 -3.773164E+00 -2.887196E+00 -3.234132E-02 -2.142511E-04 -8.018101E-02 -1.316894E-03 -2.430358E+00 -1.305969E+00 -7.236826E-02 -1.077801E-03 -3.691969E+00 -2.914191E+00 -3.123416E-02 -2.001679E-04 -7.743613E-02 -1.230332E-03 -3.133682E+00 -1.984584E+00 -8.337467E-02 -1.392595E-03 -4.451265E+00 -3.978527E+00 -3.354318E-02 -2.282172E-04 -8.316070E-02 -1.402736E-03 -2.662704E+00 -1.448336E+00 -7.530385E-02 -1.164529E-03 -3.880423E+00 -3.054138E+00 -3.144058E-02 -2.085301E-04 -7.794791E-02 -1.281730E-03 -2.130205E+00 -9.297660E-01 -6.583066E-02 -8.790174E-04 -3.226341E+00 -2.120506E+00 -2.889944E-02 -1.698754E-04 -7.164788E-02 -1.044139E-03 +2.433621E+00 +1.298731E+00 +7.126855E-02 +1.084489E-03 +3.556720E+00 +2.723689E+00 +3.032075E-02 +1.974495E-04 +7.517159E-02 +1.213623E-03 +2.717435E+00 +1.549804E+00 +7.064960E-02 +1.006179E-03 +3.808148E+00 +2.988456E+00 +2.796674E-02 +1.570090E-04 +6.933552E-02 +9.650556E-04 +2.679858E+00 +1.486542E+00 +8.030738E-02 +1.319629E-03 +4.018748E+00 +3.302325E+00 +3.467552E-02 +2.467113E-04 +8.596801E-02 +1.516410E-03 +2.404649E+00 +1.193262E+00 +6.941086E-02 +9.897421E-04 +3.496702E+00 +2.518136E+00 +2.928903E-02 +1.763988E-04 +7.261375E-02 +1.084234E-03 +2.147183E+00 +9.523277E-01 +6.709152E-02 +9.314107E-04 +3.232389E+00 +2.147105E+00 +2.954891E-02 +1.829794E-04 +7.325805E-02 +1.124682E-03 +2.636339E+00 +1.437307E+00 +7.792975E-02 +1.238873E-03 +3.915670E+00 +3.133618E+00 +3.338754E-02 +2.290709E-04 +8.277483E-02 +1.407984E-03 +2.771906E+00 +1.608332E+00 +8.667994E-02 +1.535886E-03 +4.183761E+00 +3.623671E+00 +3.819000E-02 +2.976177E-04 +9.468114E-02 +1.829306E-03 +2.269663E+00 +1.042807E+00 +7.391262E-02 +1.128121E-03 +3.476219E+00 +2.457866E+00 +3.321742E-02 +2.316107E-04 +8.235305E-02 +1.423595E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -681,86 +681,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.599461E+00 -1.458035E+00 -7.809884E-02 -1.305214E-03 -3.901359E+00 -3.258238E+00 -3.379142E-02 -2.432493E-04 -8.377612E-02 -1.495131E-03 -2.748044E+00 -1.595569E+00 -8.641555E-02 -1.591494E-03 -4.133038E+00 -3.610482E+00 -3.815976E-02 -3.125423E-04 -9.460617E-02 -1.921040E-03 -2.827693E+00 -1.681951E+00 -9.214026E-02 -1.815952E-03 -4.343252E+00 -3.980138E+00 -4.139309E-02 -3.763771E-04 -1.026223E-01 -2.313401E-03 -2.848302E+00 -1.709266E+00 -8.618471E-02 -1.555247E-03 -4.293029E+00 -3.893924E+00 -3.742129E-02 -2.947160E-04 -9.277535E-02 -1.811471E-03 -3.107129E+00 -1.985180E+00 -9.390982E-02 -1.778566E-03 -4.705512E+00 -4.502266E+00 -4.077729E-02 -3.361217E-04 -1.010956E-01 -2.065971E-03 -3.176743E+00 -2.076916E+00 -9.535836E-02 -1.843238E-03 -4.782883E+00 -4.655802E+00 -4.125628E-02 -3.453802E-04 -1.022831E-01 -2.122878E-03 -3.158364E+00 -2.020031E+00 -9.047734E-02 -1.652565E-03 -4.641857E+00 -4.326900E+00 -3.809128E-02 -2.983406E-04 -9.443638E-02 -1.833749E-03 -2.750064E+00 -1.515295E+00 -7.550745E-02 -1.157933E-03 -4.022702E+00 -3.249004E+00 -3.106532E-02 -2.005988E-04 -7.701755E-02 -1.232980E-03 +2.364354E+00 +1.160200E+00 +6.641096E-02 +8.852085E-04 +3.392824E+00 +2.329004E+00 +2.757158E-02 +1.580033E-04 +6.835582E-02 +9.711667E-04 +2.524962E+00 +1.341947E+00 +7.077935E-02 +1.024802E-03 +3.665788E+00 +2.770692E+00 +2.942129E-02 +1.757498E-04 +7.294165E-02 +1.080245E-03 +2.400937E+00 +1.186871E+00 +6.912946E-02 +9.715758E-04 +3.511555E+00 +2.501540E+00 +2.915335E-02 +1.747298E-04 +7.227736E-02 +1.073976E-03 +2.114087E+00 +8.990260E-01 +7.043720E-02 +1.000660E-03 +3.333143E+00 +2.235823E+00 +3.206435E-02 +2.087641E-04 +7.949434E-02 +1.283168E-03 +2.130919E+00 +9.474100E-01 +7.007826E-02 +9.974302E-04 +3.308019E+00 +2.242723E+00 +3.167506E-02 +2.044420E-04 +7.852922E-02 +1.256602E-03 +2.315558E+00 +1.159276E+00 +6.983615E-02 +1.023301E-03 +3.433129E+00 +2.511229E+00 +3.018652E-02 +1.890787E-04 +7.483880E-02 +1.162171E-03 +2.729503E+00 +1.530826E+00 +8.250917E-02 +1.373688E-03 +4.093393E+00 +3.424963E+00 +3.577102E-02 +2.569031E-04 +8.868397E-02 +1.579054E-03 +2.303613E+00 +1.077186E+00 +6.880069E-02 +9.471902E-04 +3.366481E+00 +2.277404E+00 +2.953353E-02 +1.751404E-04 +7.321992E-02 +1.076500E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -851,86 +851,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.571690E+00 -1.405222E+00 -6.998368E-02 -1.010782E-03 -3.645470E+00 -2.775516E+00 -2.848750E-02 -1.694087E-04 -7.062657E-02 -1.041270E-03 -3.305320E+00 -2.344814E+00 -9.985328E-02 -2.111130E-03 -4.992554E+00 -5.332303E+00 -4.332586E-02 -3.970490E-04 -1.074140E-01 -2.440461E-03 -2.746305E+00 -1.652960E+00 -9.402849E-02 -1.982149E-03 -4.315533E+00 -4.099428E+00 -4.322622E-02 -4.235148E-04 -1.071670E-01 -2.603132E-03 -2.975372E+00 -1.824531E+00 -9.627993E-02 -1.863677E-03 -4.624041E+00 -4.351874E+00 -4.324350E-02 -3.743520E-04 -1.072099E-01 -2.300953E-03 -2.968077E+00 -1.807761E+00 -9.337061E-02 -1.790184E-03 -4.455263E+00 -4.056544E+00 -4.122926E-02 -3.540009E-04 -1.022161E-01 -2.175865E-03 -3.337278E+00 -2.233238E+00 -1.017763E-01 -2.083989E-03 -4.981699E+00 -4.981154E+00 -4.428100E-02 -3.964318E-04 -1.097820E-01 -2.436667E-03 -3.083638E+00 -1.958766E+00 -9.111141E-02 -1.726305E-03 -4.546082E+00 -4.260420E+00 -3.895365E-02 -3.200133E-04 -9.657439E-02 -1.966961E-03 -2.644733E+00 -1.407404E+00 -8.635553E-02 -1.527997E-03 -4.094426E+00 -3.382785E+00 -3.888081E-02 -3.161126E-04 -9.639381E-02 -1.942985E-03 +2.603449E+00 +1.382310E+00 +7.044110E-02 +1.048854E-03 +3.683939E+00 +2.770822E+00 +2.858207E-02 +1.846566E-04 +7.086104E-02 +1.134991E-03 +2.458052E+00 +1.211571E+00 +7.271340E-02 +1.061659E-03 +3.628656E+00 +2.636961E+00 +3.113049E-02 +1.956492E-04 +7.717911E-02 +1.202557E-03 +2.200265E+00 +9.745445E-01 +7.058665E-02 +1.016272E-03 +3.372745E+00 +2.298238E+00 +3.151097E-02 +2.069373E-04 +7.812240E-02 +1.271940E-03 +2.154223E+00 +9.469347E-01 +6.893166E-02 +1.008453E-03 +3.298063E+00 +2.220933E+00 +3.075978E-02 +2.125545E-04 +7.626005E-02 +1.306466E-03 +2.057172E+00 +8.672290E-01 +6.372568E-02 +8.190278E-04 +3.108552E+00 +1.951197E+00 +2.795535E-02 +1.595890E-04 +6.930727E-02 +9.809131E-04 +2.295642E+00 +1.124640E+00 +6.209725E-02 +8.275041E-04 +3.320499E+00 +2.339919E+00 +2.530846E-02 +1.388437E-04 +6.274506E-02 +8.534023E-04 +2.411516E+00 +1.208668E+00 +7.127755E-02 +1.051206E-03 +3.599456E+00 +2.675604E+00 +3.057946E-02 +1.929511E-04 +7.581300E-02 +1.185973E-03 +2.170599E+00 +9.911770E-01 +6.225331E-02 +8.096954E-04 +3.174400E+00 +2.102442E+00 +2.621745E-02 +1.490631E-04 +6.499865E-02 +9.162161E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1021,86 +1021,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.316522E+00 -2.302876E+00 -8.987919E-02 -1.676655E-03 -4.716109E+00 -4.596488E+00 -3.654407E-02 -2.855910E-04 -9.060053E-02 -1.755384E-03 -3.091331E+00 -2.117646E+00 -8.528196E-02 -1.564336E-03 -4.492326E+00 -4.405850E+00 -3.513814E-02 -2.665883E-04 -8.711494E-02 -1.638584E-03 -2.649730E+00 -1.444519E+00 -8.510948E-02 -1.506094E-03 -4.117595E+00 -3.501517E+00 -3.810553E-02 -3.052819E-04 -9.447172E-02 -1.876414E-03 -2.875773E+00 -1.758531E+00 -9.127582E-02 -1.780419E-03 -4.328266E+00 -3.989840E+00 -4.045386E-02 -3.513542E-04 -1.002937E-01 -2.159598E-03 -3.102792E+00 -1.949906E+00 -9.153879E-02 -1.691646E-03 -4.578530E+00 -4.235906E+00 -3.913672E-02 -3.094156E-04 -9.702826E-02 -1.901822E-03 -3.238743E+00 -2.146355E+00 -8.902551E-02 -1.593536E-03 -4.683916E+00 -4.438028E+00 -3.660342E-02 -2.683183E-04 -9.074766E-02 -1.649218E-03 -3.006635E+00 -1.887385E+00 -8.716712E-02 -1.586834E-03 -4.383965E+00 -4.008888E+00 -3.688262E-02 -2.862513E-04 -9.143987E-02 -1.759443E-03 -2.749904E+00 -1.550561E+00 -9.244273E-02 -1.748082E-03 -4.241273E+00 -3.669144E+00 -4.208622E-02 -3.633241E-04 -1.043407E-01 -2.233170E-03 +2.374348E+00 +1.146696E+00 +6.443426E-02 +8.746572E-04 +3.428224E+00 +2.405912E+00 +2.629872E-02 +1.523681E-04 +6.520012E-02 +9.365302E-04 +2.464893E+00 +1.229701E+00 +7.050588E-02 +1.022217E-03 +3.660115E+00 +2.719644E+00 +2.971255E-02 +1.859463E-04 +7.366374E-02 +1.142918E-03 +2.086598E+00 +8.776819E-01 +6.304625E-02 +8.239181E-04 +3.124875E+00 +1.968039E+00 +2.731211E-02 +1.609716E-04 +6.771252E-02 +9.894116E-04 +2.314873E+00 +1.083111E+00 +5.761556E-02 +6.762901E-04 +3.205662E+00 +2.074555E+00 +2.215216E-02 +1.044406E-04 +5.491992E-02 +6.419437E-04 +2.313273E+00 +1.119912E+00 +6.126598E-02 +7.845228E-04 +3.266340E+00 +2.226545E+00 +2.455456E-02 +1.271226E-04 +6.087598E-02 +7.813588E-04 +2.283282E+00 +1.100474E+00 +6.665553E-02 +9.193170E-04 +3.364565E+00 +2.364829E+00 +2.834631E-02 +1.672037E-04 +7.027653E-02 +1.027717E-03 +2.186072E+00 +9.712029E-01 +7.000241E-02 +1.019717E-03 +3.374290E+00 +2.313941E+00 +3.125803E-02 +2.124583E-04 +7.749531E-02 +1.305874E-03 +2.250156E+00 +1.052173E+00 +6.400255E-02 +8.818690E-04 +3.268015E+00 +2.245559E+00 +2.679559E-02 +1.634377E-04 +6.643197E-02 +1.004569E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1191,86 +1191,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.556952E+00 -1.416458E+00 -8.087467E-02 -1.431667E-03 -3.806748E+00 -3.158182E+00 -3.571995E-02 -2.831832E-04 -8.855737E-02 -1.740585E-03 -2.546384E+00 -1.446967E+00 -8.000281E-02 -1.363415E-03 -3.844739E+00 -3.222133E+00 -3.533522E-02 -2.621956E-04 -8.760354E-02 -1.611584E-03 -2.474418E+00 -1.302438E+00 -7.728372E-02 -1.265047E-03 -3.818517E+00 -3.076074E+00 -3.414744E-02 -2.483215E-04 -8.465877E-02 -1.526307E-03 -2.478272E+00 -1.299434E+00 -7.866430E-02 -1.293627E-03 -3.758685E+00 -2.973817E+00 -3.491240E-02 -2.542033E-04 -8.655529E-02 -1.562460E-03 -2.941937E+00 -1.842278E+00 -9.491310E-02 -1.902183E-03 -4.564730E+00 -4.427111E+00 -4.252722E-02 -3.828960E-04 -1.054340E-01 -2.353469E-03 -2.850564E+00 -1.719152E+00 -8.118192E-02 -1.404765E-03 -4.190858E+00 -3.722715E+00 -3.411695E-02 -2.522778E-04 -8.458318E-02 -1.550625E-03 -2.726097E+00 -1.648250E+00 -7.879124E-02 -1.424955E-03 -3.940978E+00 -3.461222E+00 -3.322044E-02 -2.688615E-04 -8.236053E-02 -1.652557E-03 -2.304822E+00 -1.153775E+00 -7.500010E-02 -1.314077E-03 -3.542935E+00 -2.786864E+00 -3.369367E-02 -2.798215E-04 -8.353377E-02 -1.719922E-03 +2.149693E+00 +9.566763E-01 +6.325375E-02 +8.781459E-04 +3.163781E+00 +2.089993E+00 +2.699802E-02 +1.754950E-04 +6.693384E-02 +1.078679E-03 +2.368262E+00 +1.206255E+00 +6.517665E-02 +9.363557E-04 +3.403305E+00 +2.501730E+00 +2.677251E-02 +1.620249E-04 +6.637476E-02 +9.958857E-04 +2.280249E+00 +1.070455E+00 +7.456831E-02 +1.147671E-03 +3.475673E+00 +2.476848E+00 +3.352210E-02 +2.345869E-04 +8.310842E-02 +1.441888E-03 +2.226928E+00 +1.011037E+00 +7.770236E-02 +1.243393E-03 +3.524398E+00 +2.538453E+00 +3.601410E-02 +2.702997E-04 +8.928663E-02 +1.661396E-03 +2.407411E+00 +1.170093E+00 +7.171133E-02 +1.029235E-03 +3.502484E+00 +2.461827E+00 +3.070568E-02 +1.889715E-04 +7.612591E-02 +1.161513E-03 +2.331359E+00 +1.134448E+00 +6.734317E-02 +9.407363E-04 +3.333577E+00 +2.267345E+00 +2.832929E-02 +1.772720E-04 +7.023433E-02 +1.089602E-03 +2.008838E+00 +8.722179E-01 +5.586199E-02 +7.051708E-04 +2.903675E+00 +1.807255E+00 +2.309145E-02 +1.322637E-04 +5.724863E-02 +8.129585E-04 +2.226061E+00 +1.048269E+00 +6.536859E-02 +9.623671E-04 +3.297988E+00 +2.324450E+00 +2.791406E-02 +1.866630E-04 +6.920490E-02 +1.147324E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2892,15 +2892,15 @@ tally 1: 0.000000E+00 0.000000E+00 tally 2: -4.283244E+01 -3.698890E+02 -4.285612E+01 -3.702981E+02 -6.926001E+00 -9.669342E+00 -6.926497E+00 -9.670727E+00 -1.223563E+02 -3.025594E+03 -1.223563E+02 -3.025594E+03 +4.075585E+01 +3.339527E+02 +4.077838E+01 +3.343221E+02 +6.274554E+00 +7.936999E+00 +6.275007E+00 +7.938146E+00 +1.122968E+02 +2.557771E+03 +1.122968E+02 +2.557771E+03 From a1764196ce703a305a7068e21a264d07cb17d3cd Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 9 Mar 2016 21:03:53 -0500 Subject: [PATCH 369/650] small editorial comment --- src/input_xml.F90 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index b89b8807f3..a7366d2cda 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -169,7 +169,11 @@ contains if (check_for_node(doc, "max_order")) then call get_node_value(doc, "max_order", max_order) else - ! Set to default of largest int, which means to use whatever is contained in library + ! Set to default of largest int - 1, which means to use whatever is + ! contained in library. + ! This is largest int - 1 because for legendre scattering, a value of + ! 1 is added to the order; adding 1 to huge(0) gets you the largest + ! negative integer, which is not what we want. max_order = huge(0) - 1 end if else From 9187c6fa2cbe3abb685d835f2b1fd8db644e2f2a Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Thu, 10 Mar 2016 00:13:31 -0500 Subject: [PATCH 370/650] Minor changes for #607 --- openmc/settings.py | 71 +++++++++---------- .../test_resonance_scattering.py | 2 +- 2 files changed, 34 insertions(+), 39 deletions(-) diff --git a/openmc/settings.py b/openmc/settings.py index 01e665c6e6..5c3c92008e 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -9,7 +9,7 @@ import numpy as np from openmc.clean_xml import * from openmc.checkvalue import (check_type, check_length, check_value, check_greater_than, check_less_than) -from openmc.nuclide import Nuclide +from openmc import Nuclide from openmc.source import Source if sys.version_info[0] >= 3: @@ -778,9 +778,10 @@ class SettingsFile(object): if isinstance(res, Iterable): check_type('resonance_scattering', res, Iterable, ResonanceScattering) + self._resonance_scattering = res else: check_type('resonance_scattering', res, ResonanceScattering) - self._resonance_scattering = res + self._resonance_scattering = [res] def _create_run_mode_subelement(self): @@ -1066,30 +1067,11 @@ class SettingsFile(object): element = ET.SubElement(self._settings_file, "resonance_scattering") - # Create an iterable version of resonance_scattering - if isinstance(self.resonance_scattering, Iterable): - res = self.resonance_scattering - else: - res = [self.resonance_scattering] - - for r in res: + for r in self.resonance_scattering: if r.nuclide.name != r.nuclide_0K.name: - raise ValueError("The `nuclide` and `nuclide_0K` attributes of " + raise ValueError("The nuclide and nuclide_0K attributes of " "a ResonantScattering object must have identical names.") - scatterer = ET.SubElement(element, "scatterer") - subelement = ET.SubElement(scatterer, 'nuclide') - subelement.text = r.nuclide.name - subelement = ET.SubElement(scatterer, 'method') - subelement.text = r.method - subelement = ET.SubElement(scatterer, 'xs_label') - subelement.text = str(r.nuclide.zaid) + '.' + str(r.nuclide.xs) - subelement = ET.SubElement(scatterer, 'xs_label_0K') - subelement.text = str(r.nuclide_0K.zaid) + '.' \ - + str(r.nuclide_0K.xs) - subelement = ET.SubElement(scatterer, 'E_min') - subelement.text = str(r.E_min) - subelement = ET.SubElement(scatterer, 'E_max') - subelement.text = str(r.E_max) + r.create_xml_subelement(element) def export_to_xml(self): """Create a settings.xml file that can be used for a simulation. @@ -1146,18 +1128,18 @@ class ResonanceScattering(object): nuclide : openmc.nuclide.Nuclide The nuclide affected by this resonance scattering treatment. nuclide_0K : openmc.nuclide.Nuclide - This should be the same isotope as `nuclide`, but it should have an - `xs` attribute that identifies 0 Kelvin data. + This should be the same isotope as the nuclide attribute above, but it + should have an xs attribute that identifies 0 Kelvin data. method : str The method used to sample outgoing scattering energies. Valid options are 'ARES', 'CXS' (constant cross section), 'DBRC' (Doppler broadening rejection correction), and 'WCM' (weight correction method). - E_min : float + E_min : Real The minimum energy above which the specified method is applied. By - default, CXS will be used below `E_min`. - E_max : float + default, CXS will be used below E_min. + E_max : Real The maximum energy below which the specified method is applied. By - default, the asymptotic target-at-rest model is applied above `E_max`. + default, the asymptotic target-at-rest model is applied above E_max. """ @@ -1191,23 +1173,20 @@ class ResonanceScattering(object): @nuclide.setter def nuclide(self, nuc): check_type('nuclide', nuc, Nuclide) - if nuc.zaid == None: raise ValueError("The `nuclide` must have an " - "explicitly defined `zaid` attribute.") + if nuc.zaid == None: raise ValueError("The nuclide must have an " + "explicitly defined zaid attribute.") self._nuclide = nuc @nuclide_0K.setter def nuclide_0K(self, nuc): check_type('nuclide_0K', nuc, Nuclide) - if nuc.zaid == None: raise ValueError("The `nuclide_0K` must have an " - "explicitly defined `zaid` attribute.") + if nuc.zaid == None: raise ValueError("The nuclide_0K must have an " + "explicitly defined zaid attribute.") self._nuclide_0K = nuc @method.setter def method(self, m): - check_type('method', m, basestring) - if m not in ('ARES', 'CXS', 'DBRC', 'WCM'): - raise ValueError("Invalid resonance scattering method specified. " - "Valid methods are 'ARES', 'CXS', 'DBRC', and 'WCM'.") + check_value('method', m, ('ARES', 'CXS', 'DBRC', 'WCM')) self._method = m @E_min.setter @@ -1221,3 +1200,19 @@ class ResonanceScattering(object): check_type('E_max', E, Real) check_greater_than('E_max', E, 0, True) self._E_max = E + + def create_xml_subelement(self, xml_element): + scatterer = ET.SubElement(xml_element, "scatterer") + subelement = ET.SubElement(scatterer, 'nuclide') + subelement.text = self.nuclide.name + subelement = ET.SubElement(scatterer, 'method') + subelement.text = self.method + subelement = ET.SubElement(scatterer, 'xs_label') + subelement.text = str(self.nuclide.zaid) + '.' + str(self.nuclide.xs) + subelement = ET.SubElement(scatterer, 'xs_label_0K') + subelement.text = str(self.nuclide_0K.zaid) + '.' \ + + str(self.nuclide_0K.xs) + subelement = ET.SubElement(scatterer, 'E_min') + subelement.text = str(self.E_min) + subelement = ET.SubElement(scatterer, 'E_max') + subelement.text = str(self.E_max) diff --git a/tests/test_resonance_scattering/test_resonance_scattering.py b/tests/test_resonance_scattering/test_resonance_scattering.py index 04a2916a3d..d977488bfe 100644 --- a/tests/test_resonance_scattering/test_resonance_scattering.py +++ b/tests/test_resonance_scattering/test_resonance_scattering.py @@ -3,7 +3,7 @@ import os import sys sys.path.insert(0, os.pardir) -from testing_harness import TestHarness, PyAPITestHarness +from testing_harness import PyAPITestHarness import openmc From e86e287f3465e41a3e81c8fe716083e5b690b604 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Thu, 10 Mar 2016 10:05:50 -0500 Subject: [PATCH 371/650] Small fixes for #607 --- openmc/settings.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/openmc/settings.py b/openmc/settings.py index 5c3c92008e..271932b84f 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -126,8 +126,8 @@ class SettingsFile(object): Coordinates of the lower-left point of the UFS mesh ufs_upper_right : tuple or list Coordinates of the upper-right point of the UFS mesh - resonance_scattering : ResonanceScattering or iterable thereof - The elastic scattering model to use for resonant isotopes. + resonance_scattering : ResonanceScattering or iterable of ResonanceScattering + The elastic scattering model to use for resonant isotopes """ @@ -1121,7 +1121,7 @@ class SettingsFile(object): class ResonanceScattering(object): - """Specification of the elastic scattering model for resonant isotopes. + """Specification of the elastic scattering model for resonant isotopes Attributes ---------- @@ -1205,14 +1205,17 @@ class ResonanceScattering(object): scatterer = ET.SubElement(xml_element, "scatterer") subelement = ET.SubElement(scatterer, 'nuclide') subelement.text = self.nuclide.name - subelement = ET.SubElement(scatterer, 'method') - subelement.text = self.method + if self.method is not None: + subelement = ET.SubElement(scatterer, 'method') + subelement.text = self.method subelement = ET.SubElement(scatterer, 'xs_label') subelement.text = str(self.nuclide.zaid) + '.' + str(self.nuclide.xs) subelement = ET.SubElement(scatterer, 'xs_label_0K') subelement.text = str(self.nuclide_0K.zaid) + '.' \ + str(self.nuclide_0K.xs) - subelement = ET.SubElement(scatterer, 'E_min') - subelement.text = str(self.E_min) - subelement = ET.SubElement(scatterer, 'E_max') - subelement.text = str(self.E_max) + if self.E_min is not None: + subelement = ET.SubElement(scatterer, 'E_min') + subelement.text = str(self.E_min) + if self.E_max is not None: + subelement = ET.SubElement(scatterer, 'E_max') + subelement.text = str(self.E_max) From 28c0cebe386a6aacc94ff8dc8ef1227254c6542e Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Thu, 10 Mar 2016 19:20:14 -0500 Subject: [PATCH 372/650] Added checks for gout value to see if it is included in the new sparse format when querying the scattering distro info. --- src/macroxs_header.F90 | 54 +++++++++++--------- src/nuclide_header.F90 | 94 +++++++++++++++++++---------------- src/output.F90 | 6 ++- src/scattdata_header.F90 | 44 +++++++++++------ src/tally.F90 | 103 +++++++++++++++++++++++---------------- 5 files changed, 177 insertions(+), 124 deletions(-) diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index 2fd7dfe28c..6d74b081a6 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -42,11 +42,11 @@ module macroxs_header integer, intent(in) :: scatt_type ! Legendre or Tabular Scatt? end subroutine macroxs_init_ - function macroxs_get_xs_(this, g, xstype, gout, uvw) result(xs) + function macroxs_get_xs_(this, xstype, gin, gout, uvw) result(xs) import MacroXS class(MacroXS), intent(in) :: this ! The MacroXS to initialize - integer, intent(in) :: g ! Incoming Energy group character(*) , intent(in) :: xstype ! Cross Section Type + integer, intent(in) :: gin ! Incoming Energy group integer, optional, intent(in) :: gout ! Outgoing Energy group real(8), optional, intent(in) :: uvw(3) ! Requested Angle real(8) :: xs ! Resultant xs @@ -547,41 +547,46 @@ contains ! MACROXS_*_GET_XS returns the requested data type !=============================================================================== - function macroxsiso_get_xs(this, g, xstype, gout, uvw) result(xs) + function macroxsiso_get_xs(this, xstype, gin, gout, uvw) result(xs) class(MacroXSIso), intent(in) :: this ! The MacroXS to initialize - integer, intent(in) :: g ! Incoming Energy group character(*) , intent(in) :: xstype ! Type of xs requested + integer, intent(in) :: gin ! Incoming Energy group integer, optional, intent(in) :: gout ! Outgoing Energy group real(8), optional, intent(in) :: uvw(3) ! Requested Angle real(8) :: xs ! Requested x/s select case(xstype) case('total') - xs = this % total(g) + xs = this % total(gin) case('absorption') - xs = this % absorption(g) + xs = this % absorption(gin) case('fission') - xs = this % fission(g) + xs = this % fission(gin) case('k_fission') - xs = this % k_fission(g) + xs = this % k_fission(gin) case('nu_fission') - xs = this % nu_fission(g) + xs = this % nu_fission(gin) case('scatter') - xs = this % scatter % scattxs(g) + xs = this % scatter % scattxs(gin) case('mult') if (present(gout)) then - xs = this % scatter % mult(g) % data(gout) + if (gout < this % scatter % gmin(gin) .or. & + gout > this % scatter % gmax(gin)) then + xs = ZERO + else + xs = this % scatter % mult(gin) % data(gout) + end if else - xs = sum(this % scatter % mult(g) % data(:)) + xs = sum(this % scatter % mult(gin) % data(:)) end if end select end function macroxsiso_get_xs - function macroxsangle_get_xs(this, g, xstype, gout,uvw) result(xs) + function macroxsangle_get_xs(this, xstype, gin, gout, uvw) result(xs) class(MacroXSAngle), intent(in) :: this ! The MacroXS to initialize - integer, intent(in) :: g ! Incoming Energy group character(*) , intent(in) :: xstype ! Type of xs requested + integer, intent(in) :: gin ! Incoming Energy group integer, optional, intent(in) :: gout ! Outgoing Energy group real(8), optional, intent(in) :: uvw(3) ! Requested Angle real(8) :: xs ! Requested x/s @@ -592,22 +597,27 @@ contains call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) select case(xstype) case('total') - xs = this % total(g,iazi,ipol) + xs = this % total(gin,iazi,ipol) case('absorption') - xs = this % absorption(g,iazi,ipol) + xs = this % absorption(gin,iazi,ipol) case('fission') - xs = this % fission(g,iazi,ipol) + xs = this % fission(gin,iazi,ipol) case('k_fission') - xs = this % k_fission(g,iazi,ipol) + xs = this % k_fission(gin,iazi,ipol) case('nu_fission') - xs = this % nu_fission(g,iazi,ipol) + xs = this % nu_fission(gin,iazi,ipol) case('scatter') - xs = this % scatter(iazi,ipol) % obj % scattxs(g) + xs = this % scatter(iazi,ipol) % obj % scattxs(gin) case('mult') if (present(gout)) then - xs = this % scatter(iazi,ipol) % obj % mult(g) % data(gout) + if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & + gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then + xs = ZERO + else + xs = this % scatter(iazi,ipol) % obj % mult(gin) % data(gout) + end if else - xs = sum(this % scatter(iazi,ipol) % obj % mult(g) % data(:)) + xs = sum(this % scatter(iazi,ipol) % obj % mult(gin) % data(:)) end if end select end if diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index e4dc717a8f..35048454ef 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -126,12 +126,12 @@ module nuclide_header integer, intent(in) :: max_order ! Maximum requested order end subroutine nuclidemg_init_ - function nuclidemg_get_xs_(this, g, xstype, gout, uvw, mu, iazi, ipol) & + function nuclidemg_get_xs_(this, xstype, gin, gout, uvw, mu, iazi, ipol) & result(xs) import NuclideMG class(NuclideMG), intent(in) :: this - integer, intent(in) :: g ! Incoming Energy group character(*), intent(in) :: xstype ! Cross Section Type + integer, intent(in) :: gin ! Incoming Energy group integer, optional, intent(in) :: gout ! Outgoing Group real(8), optional, intent(in) :: uvw(3) ! Requested Angle real(8), optional, intent(in) :: mu ! Change in angle @@ -1200,17 +1200,17 @@ module nuclide_header ! NUCLIDE*_GET_XS Returns the requested data type !=============================================================================== - function nuclideiso_get_xs(this, g, xstype, gout, uvw, mu, iazi, ipol) & + function nuclideiso_get_xs(this, xstype, gin, gout, uvw, mu, iazi, ipol) & result(xs) class(NuclideIso), intent(in) :: this - integer, intent(in) :: g ! Incoming Energy group - character(*), intent(in) :: xstype ! Cross Section Type - integer, optional, intent(in) :: gout ! Outgoing Group - real(8), optional, intent(in) :: uvw(3) ! Requested Angle - real(8), optional, intent(in) :: mu ! Change in angle - integer, optional, intent(in) :: iazi ! Azimuthal Index - integer, optional, intent(in) :: ipol ! Polar Index - real(8) :: xs ! Resultant xs + character(*), intent(in) :: xstype ! Cross Section Type + integer, intent(in) :: gin ! Incoming Energy group + integer, optional, intent(in) :: gout ! Outgoing Group + real(8), optional, intent(in) :: uvw(3) ! Requested Angle + real(8), optional, intent(in) :: mu ! Change in angle + integer, optional, intent(in) :: iazi ! Azimuthal Index + integer, optional, intent(in) :: ipol ! Polar Index + real(8) :: xs ! Resultant xs xs = ZERO @@ -1222,46 +1222,51 @@ module nuclide_header if (present(gout)) then select case(xstype) case('mult') - xs = this % scatter % mult(g) % data(gout) + xs = this % scatter % mult(gin) % data(gout) case('nu_fission') - xs = this % nu_fission(gout,g) + xs = this % nu_fission(gout,gin) case('f_mu', 'f_mu/mult') - xs = this % scatter % calc_f(g, gout, mu) - if (xstype == 'f_mu/mult') then - xs = xs / this % scatter % mult(g) % data(gout) + if (gout < this % scatter % gmin(gin) .or. & + gout > this % scatter % gmax(gin)) then + xs = ZERO + else + xs = this % scatter % calc_f(gin, gout, mu) + if (xstype == 'f_mu/mult') then + xs = xs / this % scatter % mult(gin) % data(gout) + end if end if end select else select case(xstype) case('total') - xs = this % total(g) + xs = this % total(gin) case('absorption') - xs = this % absorption(g) + xs = this % absorption(gin) case('fission') - xs = this % fission(g) + xs = this % fission(gin) case('k_fission') if (allocated(this % k_fission)) then - xs = this % k_fission(g) + xs = this % k_fission(gin) end if case('chi') - xs = this % chi(g) + xs = this % chi(gin) case('scatter') - xs = this % scatter % scattxs(g) + xs = this % scatter % scattxs(gin) end select end if end function nuclideiso_get_xs - function nuclideangle_get_xs(this, g, xstype, gout, uvw, mu, iazi, ipol) & + function nuclideangle_get_xs(this, xstype, gin, gout, uvw, mu, iazi, ipol) & result(xs) class(NuclideAngle), intent(in) :: this - integer, intent(in) :: g ! Incoming Energy group - character(*), intent(in) :: xstype ! Cross Section Type - integer, optional, intent(in) :: gout ! Outgoing Group - real(8), optional, intent(in) :: mu ! Change in angle - real(8), optional, intent(in) :: uvw(3) ! Requested Angle - integer, optional, intent(in) :: iazi ! Azimuthal Index - integer, optional, intent(in) :: ipol ! Polar Index - real(8) :: xs ! Resultant xs + character(*), intent(in) :: xstype ! Cross Section Type + integer, intent(in) :: gin ! Incoming Energy group + integer, optional, intent(in) :: gout ! Outgoing Group + real(8), optional, intent(in) :: mu ! Change in angle + real(8), optional, intent(in) :: uvw(3) ! Requested Angle + integer, optional, intent(in) :: iazi ! Azimuthal Index + integer, optional, intent(in) :: ipol ! Polar Index + real(8) :: xs ! Resultant xs integer :: iazi_, ipol_ @@ -1282,33 +1287,38 @@ module nuclide_header if (present(gout)) then select case(xstype) case('mult') - xs = this % scatter(iazi_,ipol_) % obj % mult(g) % data(gout) + xs = this % scatter(iazi_,ipol_) % obj % mult(gin) % data(gout) case('nu_fission') - xs = this % nu_fission(gout,g,iazi_,ipol_) + xs = this % nu_fission(gout,gin,iazi_,ipol_) case('chi') xs = this % chi(gout,iazi_,ipol_) case('f_mu', 'f_mu/mult') - xs = this % scatter(iazi_,ipol_) % obj % calc_f(g,gout,mu) - if (xstype == 'f_mu/mult') then - xs = xs / this % scatter(iazi_,ipol_) % obj % mult(g) % data(gout) + if (gout < this % scatter(iazi_,ipol) % obj % gmin(gin) .or. & + gout > this % scatter(iazi_,ipol) % obj % gmax(gin)) then + xs = ZERO + else + xs = this % scatter(iazi_,ipol_) % obj % calc_f(gin,gout,mu) + if (xstype == 'f_mu/mult') then + xs = xs / this % scatter(iazi_,ipol_) % obj % mult(gin) % data(gout) + end if end if end select else select case(xstype) case('total') - xs = this % total(g,iazi_,ipol_) + xs = this % total(gin,iazi_,ipol_) case('absorption') - xs = this % absorption(g,iazi_,ipol_) + xs = this % absorption(gin,iazi_,ipol_) case('fission') - xs = this % fission(g,iazi_,ipol_) + xs = this % fission(gin,iazi_,ipol_) case('k_fission') if (allocated(this % k_fission)) then - xs = this % k_fission(g,iazi_,ipol_) + xs = this % k_fission(gin,iazi_,ipol_) end if case('chi') - xs = this % chi(g,iazi_,ipol_) + xs = this % chi(gin,iazi_,ipol_) case('scatter') - xs = this % scatter(iazi_,ipol_) % obj % scattxs(g) + xs = this % scatter(iazi_,ipol_) % obj % scattxs(gin) end select end if diff --git a/src/output.F90 b/src/output.F90 index 125fe010bc..768f197757 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -904,7 +904,11 @@ contains write(UNIT=unit_tally, FMT='(1X,2A,1X,A)') repeat(" ", indent), & "Total Material" else - i_listing = nuclides(i_nuclide) % listing + if (run_CE) then + i_listing = nuclides(i_nuclide) % listing + else + i_listing = nuclides_MG(i_nuclide) % obj % listing + end if write(UNIT=unit_tally, FMT='(1X,2A,1X,A)') repeat(" ", indent), & trim(xs_listings(i_listing) % alias) end if diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index 04d48d22fd..f36fe6043e 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -435,7 +435,11 @@ contains real(8) :: f ! Return value of f(mu) ! Plug mu in to the legendre expansion and go from there - f = evaluate_legendre(this % dist(gin) % data(:,gout),mu) + if (gout < this % gmin(gin) .or. gout > this % gmax(gin)) then + f = ZERO + else + f = evaluate_legendre(this % dist(gin) % data(:,gout),mu) + end if end function scattdatalegendre_calc_f @@ -448,14 +452,18 @@ contains integer :: imu - ! Find mu bin - if (mu == ONE) then - imu = size(this % fmu(gin) % data,dim=1) + if (gout < this % gmin(gin) .or. gout > this % gmax(gin)) then + f = ZERO else - imu = floor((mu + ONE)/ this % dmu + ONE) - end if + ! Find mu bin + if (mu == ONE) then + imu = size(this % fmu(gin) % data,dim=1) + else + imu = floor((mu + ONE)/ this % dmu + ONE) + end if - f = this % fmu(gin) % data(imu,gout) + f = this % fmu(gin) % data(imu,gout) + end if end function scattdatahistogram_calc_f @@ -469,17 +477,21 @@ contains integer :: imu real(8) :: r - ! Find mu bin - if (mu == ONE) then - imu = size(this % fmu(gin) % data,dim=1) - 1 + if (gout < this % gmin(gin) .or. gout > this % gmax(gin)) then + f = ZERO else - imu = floor((mu + ONE)/ this % dmu + ONE) - end if + ! Find mu bin + if (mu == ONE) then + imu = size(this % fmu(gin) % data,dim=1) - 1 + else + imu = floor((mu + ONE)/ this % dmu + ONE) + end if - ! Now interpolate to find f(mu) - r = (mu - this % mu(imu)) / (this % mu(imu + 1) - this % mu(imu)) - f = (ONE - r) * this % fmu(gin) % data(imu,gout) + & - r * this % fmu(gin) % data(imu + 1,gout) + ! Now interpolate to find f(mu) + r = (mu - this % mu(imu)) / (this % mu(imu + 1) - this % mu(imu)) + f = (ONE - r) * this % fmu(gin) % data(imu,gout) + & + r * this % fmu(gin) % data(imu + 1,gout) + end if end function scattdatatabular_calc_f diff --git a/src/tally.F90 b/src/tally.F90 index 5a54d9846e..94ca2812c5 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -806,6 +806,7 @@ contains real(8) :: macro_scatt ! material macro scatt xs real(8) :: micro_abs ! nuclidic microscopic abs real(8) :: p_uvw(3) ! Particle's current uvw + real(8) :: mult ! Weight multiplier ! Set the direction, if needed for nuclidic data, so that nuc % get_xs ! knows wihch direction it should be using for direction-dependent @@ -866,7 +867,7 @@ contains else if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs(p % g, 'total', UVW=p_uvw) * & + score = nuc % get_xs('total',p % g,UVW=p_uvw) * & atom_density * flux end associate else @@ -908,7 +909,7 @@ contains ! Note SCORE_SCATTER_N not available for tracklength/collision. if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs(p % g, 'scatter', UVW=p_uvw) * & + score = nuc % get_xs('scatter',p % g,UVW=p_uvw) * & atom_density * flux end associate else @@ -917,16 +918,28 @@ contains end if end if +!!! CURRENT PROBLEMS: +!!! 1) See comment jus below +!!! 2) groups and energy filters are in reverse order (i.e., low E filter is bin 1) +!!! 3) nuclide sigt/macro sigt weight change +!!! 4) do i have right p % g vs p % last_g everywhere throughout?? + +!!! This next if/else block (and equivalent in nu scatter & PN/YN) +!!! is incorrect. There is no outgoing energy group if using tracklength +!!! scoring. if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = score * nuc % get_xs(p % g, 'f_mu/mult', p % last_g, & - p % last_uvw, p % mu) + score = score * nuc % get_xs('f_mu/mult',p % last_g,p % g, & + p % last_uvw,p % mu) end associate else - score = score / & - macro_xs(p % material) % obj % get_xs(p % g, 'mult', & - p % last_g, & - p % last_uvw) + mult = macro_xs(p % material) % obj % get_xs('mult',p % last_g,p % g, & + p % last_uvw) + if (mult > ZERO) then + score = score / mult + else + score = ZERO + end if end if @@ -944,14 +957,17 @@ contains if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = score * nuc % get_xs(p % g, 'f_mu/mult', p % last_g, & - p % last_uvw, p % mu) + score = score * nuc % get_xs('f_mu/mult',p % last_g,p % g, & + p % last_uvw,p % mu) end associate else - score = score / & - macro_xs(p % material) % obj % get_xs(p % g, 'mult', & - p % last_g, & - p % last_uvw) + mult = macro_xs(p % material) % obj % get_xs('mult',p % last_g,p % g, & + p % last_uvw) + if (mult > ZERO) then + score = score / mult + else + score = ZERO + end if end if @@ -969,14 +985,17 @@ contains if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = score * nuc % get_xs(p % g, 'f_mu/mult', p % last_g, & - p % last_uvw, p % mu) + score = score * nuc % get_xs('f_mu/mult',p % last_g,p % g, & + p % last_uvw,p % mu) end associate else - score = score / & - macro_xs(p % material) % obj % get_xs(p % g, 'mult', & - p % last_g, & - p % last_uvw) + mult = macro_xs(p % material) % obj % get_xs('mult',p % last_g,p % g, & + p % last_uvw) + if (mult > ZERO) then + score = score / mult + else + score = ZERO + end if end if @@ -990,7 +1009,7 @@ contains score = p % wgt if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = score * nuc % get_xs(p % g, 'f_mu', p % last_g, & + score = score * nuc % get_xs('f_mu',p % last_g,p % g, & p % last_uvw, p % mu) end associate end if @@ -1009,7 +1028,7 @@ contains score = p % wgt if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = score * nuc % get_xs(p % g, 'f_mu', p % last_g, & + score = score * nuc % get_xs('f_mu',p % last_g,p % g, & p % last_uvw, p % mu) end associate end if @@ -1028,7 +1047,7 @@ contains score = p % wgt if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = score * nuc % get_xs(p % g, 'f_mu', p % last_g, & + score = score * nuc % get_xs('f_mu',p % last_g,p % g, & p % last_uvw, p % mu) end associate end if @@ -1075,7 +1094,7 @@ contains else if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs(p % g, 'absorption', UVW=p_uvw) & + score = nuc % get_xs('absorption',p % g,UVW=p_uvw) & * atom_density * flux end associate else @@ -1091,11 +1110,10 @@ contains ! calculate fraction of absorptions that would have resulted in ! fission associate (nuc => nuclides_MG(i_nuclide) % obj) - micro_abs = nuc % get_xs(p % g, 'absorption', UVW=p_uvw) + micro_abs = nuc % get_xs('absorption',p % g,UVW=p_uvw) if (micro_abs > ZERO) then score = p % absorb_wgt * & - nuc % get_xs(p % g, 'fission', UVW=p_uvw) & - / micro_abs + nuc % get_xs('fission',p % g,UVW=p_uvw) / micro_abs else score = ZERO end if @@ -1108,20 +1126,20 @@ contains ! fission reaction rate associate (nuc => nuclides_MG(i_nuclide) % obj) score = p % last_wgt & - * nuc % get_xs(p % g, 'fission', UVW=p_uvw) & - / nuc % get_xs(p % g, 'absorption', UVW=p_uvw) + * nuc % get_xs('fission',p % g,UVW=p_uvw) & + / nuc % get_xs('absorption',p % g,UVW=p_uvw) end associate end if else if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs(p % g, 'fission', UVW=p_uvw) * & + score = nuc % get_xs('fission',p % g,UVW=p_uvw) * & atom_density * flux end associate else - score = flux * macro_xs(p % material) % obj % get_xs(p % g, & - 'fission', UVW=p_uvw) + score = flux * macro_xs(p % material) % obj % get_xs('fission',& + p % g,UVW=p_uvw) end if end if @@ -1145,11 +1163,10 @@ contains ! calculate fraction of absorptions that would have resulted in ! nu-fission associate (nuc => nuclides_MG(i_nuclide) % obj) - micro_abs = nuc % get_xs(p % g, 'absorption', UVW=p_uvw) + micro_abs = nuc % get_xs('absorption',p % g,UVW=p_uvw) if (micro_abs > ZERO) then score = p % absorb_wgt * & - nuc % get_xs(p % g, 'fission', UVW=p_uvw) / & - micro_abs + nuc % get_xs('fission',p % g,UVW=p_uvw) / micro_abs else score = ZERO end if @@ -1168,7 +1185,7 @@ contains else if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs(p % g, 'nu_fission', UVW=p_uvw) & + score = nuc % get_xs('nu_fission',p % g,UVW=p_uvw) & * atom_density * flux end associate else @@ -1186,10 +1203,10 @@ contains ! calculate fraction of absorptions that would have resulted in ! fission scale by kappa-fission associate (nuc => nuclides_MG(i_nuclide) % obj) - micro_abs = nuc % get_xs(p % g, 'absorption', UVW=p_uvw) + micro_abs = nuc % get_xs('absorption',p % g,UVW=p_uvw) if (micro_abs > ZERO) then score = p % absorb_wgt * & - nuc % get_xs(p % g, 'k_fission', UVW=p_uvw) / & + nuc % get_xs('k_fission',p % g,UVW=p_uvw) / & micro_abs end if end associate @@ -1201,20 +1218,20 @@ contains ! the fission energy production rate associate (nuc => nuclides_MG(i_nuclide) % obj) score = p % last_wgt * & - nuc % get_xs(p % g, 'k_fission', UVW=p_uvw) / & - nuc % get_xs(p % g, 'absorption', UVW=p_uvw) + nuc % get_xs('k_fission',p % g,UVW=p_uvw) / & + nuc % get_xs('absorption',p % g,UVW=p_uvw) end associate end if else if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs(p % g, 'k_fission', UVW=p_uvw) & + score = nuc % get_xs('k_fission',p % g,UVW=p_uvw) & * atom_density * flux end associate else - score = flux * macro_xs(p % material) % obj % get_xs(p % g, & - 'k_fission', UVW=p_uvw) + score = flux * macro_xs(p % material) % obj % get_xs('k_fission', & + p % g,UVW=p_uvw) end if end if From de6573300930e7e3a1a69d6e05bbf2b2c4b4f4ee Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Thu, 10 Mar 2016 19:54:42 -0500 Subject: [PATCH 373/650] Fixed the problem identified by @wbinventor in issue #608. --- docs/source/usersguide/input.rst | 8 ++++ src/input_xml.F90 | 64 +++++++++++++++++--------------- 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index eb620b650c..2158e1d8ca 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -1258,6 +1258,9 @@ Each ``material`` element can have the following attributes or sub-elements: *Default*: None + .. note:: The ``scattering`` attribute/sub-element is not used in the + multi-group :ref:`energy_mode`. + :element: Specifies that a natural element is present in the material. The natural @@ -1293,6 +1296,9 @@ Each ``material`` element can have the following attributes or sub-elements: *Default*: None + .. note:: The ``scattering`` attribute/sub-element is not used in the + multi-group :ref:`energy_mode`. + :sab: Associates an S(a,b) table with the material. This element has attributes/sub-elements called ``name`` and ``xs``. The ``name`` attribute @@ -1301,6 +1307,8 @@ Each ``material`` element can have the following attributes or sub-elements: *Default*: None + .. note:: This element is not used in the multi-group :ref:`energy_mode`. + :macroscopic: The ``macroscopic`` element is similar to the ``nuclide`` element, but, recognizes that some multi-group libraries may be providing material diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 47b0aaacf6..2954225335 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -2098,21 +2098,6 @@ contains end if end if - ! Check enforced isotropic lab scattering - if (check_for_node(node_nuc, "scattering")) then - call get_node_value(node_nuc, "scattering", temp_str) - if (adjustl(to_lower(temp_str)) == "iso-in-lab") then - call list_iso_lab % append(1) - else if (adjustl(to_lower(temp_str)) == "data") then - call list_iso_lab % append(0) - else - call fatal_error("Scattering must be isotropic in lab or follow& - & the ACE file data") - end if - else - call list_iso_lab % append(0) - end if - ! store full name call get_node_value(node_nuc, "name", temp_str) if (check_for_node(node_nuc, "xs")) & @@ -2157,6 +2142,23 @@ contains end if end if + ! Check enforced isotropic lab scattering + if (run_CE) then + if (check_for_node(node_nuc, "scattering")) then + call get_node_value(node_nuc, "scattering", temp_str) + if (adjustl(to_lower(temp_str)) == "iso-in-lab") then + call list_iso_lab % append(1) + else if (adjustl(to_lower(temp_str)) == "data") then + call list_iso_lab % append(0) + else + call fatal_error("Scattering must be isotropic in lab or follow& + & the ACE file data") + end if + else + call list_iso_lab % append(0) + end if + end if + ! store full name call get_node_value(node_nuc, "name", temp_str) if (check_for_node(node_nuc, "xs")) & @@ -2251,23 +2253,25 @@ contains n_nuc_ele = list_names % size() - n_nuc_ele ! Check enforced isotropic lab scattering - if (check_for_node(node_ele, "scattering")) then - call get_node_value(node_ele, "scattering", temp_str) - else - temp_str = "data" - end if - - ! Set ace or iso-in-lab scattering for each nuclide in element - do k = 1, n_nuc_ele - if (adjustl(to_lower(temp_str)) == "iso-in-lab") then - call list_iso_lab % append(1) - else if (adjustl(to_lower(temp_str)) == "data") then - call list_iso_lab % append(0) + if (run_CE) then + if (check_for_node(node_ele, "scattering")) then + call get_node_value(node_ele, "scattering", temp_str) else - call fatal_error("Scattering must be isotropic in lab or follow& - & the ACE file data") + temp_str = "data" end if - end do + + ! Set ace or iso-in-lab scattering for each nuclide in element + do k = 1, n_nuc_ele + if (adjustl(to_lower(temp_str)) == "iso-in-lab") then + call list_iso_lab % append(1) + else if (adjustl(to_lower(temp_str)) == "data") then + call list_iso_lab % append(0) + else + call fatal_error("Scattering must be isotropic in lab or follow& + & the ACE file data") + end if + end do + end if end do NATURAL_ELEMENTS From dba40a91aa826339610eb2bb336da45637257629 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 11 Mar 2016 06:43:40 -0500 Subject: [PATCH 374/650] Saving status on updating tallying for nuclide specifi quantities --- src/input_xml.F90 | 29 ++++-- src/macroxs_header.F90 | 8 +- src/nuclide_header.F90 | 20 ++-- src/particle_header.F90 | 2 +- src/physics_mg.F90 | 2 +- src/tally.F90 | 203 ++++++++++++++++++++++++++++------------ 6 files changed, 184 insertions(+), 80 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index a7366d2cda..64016b8d5e 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -2842,11 +2842,15 @@ contains allocate(t % filters(j) % real_bins(n_words)) call get_node_array(node_filt, "bins", t % filters(j) % real_bins) + ! We can save tallying time if we know that the tally bins + ! match the energy group structure. In that case, the matching bin + ! index is simply the group (after flipping for the different + ! ordering of the library and tallying systems). if (.not. run_CE) then - if (n_words /= energy_groups + 1) then - t % energy_matches_groups = .false. - else if (all(t % filters(j) % real_bins == energy_bins)) then - t % energy_matches_groups = .false. + if (n_words == energy_groups + 1) then + if (all(t % filters(j) % real_bins == & + energy_bins(energy_groups + 1:1:-1))) & + t % energy_matches_groups = .true. end if end if @@ -2861,11 +2865,15 @@ contains allocate(t % filters(j) % real_bins(n_words)) call get_node_array(node_filt, "bins", t % filters(j) % real_bins) + ! We can save tallying time if we know that the tally bins + ! match the energy group structure. In that case, the matching bin + ! index is simply the group (after flipping for the different + ! ordering of the library and tallying systems). if (.not. run_CE) then - if (n_words /= energy_groups + 1) then - t % energy_matches_groups = .false. - else if (all(t % filters(j) % real_bins == energy_bins)) then - t % energy_matches_groups = .false. + if (n_words == energy_groups + 1) then + if (all(t % filters(j) % real_bins == & + energy_bins(energy_groups + 1:1:-1))) & + t % energyout_matches_groups = .true. end if end if @@ -4502,6 +4510,7 @@ contains type(Node), pointer :: doc => null() type(Node), pointer :: node_xsdata => null() type(NodeList), pointer :: node_xsdata_list => null() + real(8), allocatable :: rev_energy_bins(:) ! Check if cross_sections.xml exists inquire(FILE=path_cross_sections, EXIST=file_exists) @@ -4523,6 +4532,7 @@ contains call fatal_error("groups element must exist!") end if + allocate(rev_energy_bins(energy_groups + 1)) allocate(energy_bins(energy_groups + 1)) if (check_for_node(doc, "group_structure")) then ! Get neutron group structure @@ -4531,6 +4541,9 @@ contains call fatal_error("group_structures element must exist!") end if + ! First reverse the order of energy_groups + energy_bins = energy_bins(energy_groups + 1:1:-1) + allocate(energy_bin_avg(energy_groups)) do i = 1, energy_groups energy_bin_avg(i) = HALF * (energy_bins(i) + energy_bins(i + 1)) diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index 6d74b081a6..db1ffc479f 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -251,11 +251,11 @@ contains do gin = 1, groups do gout = 1, groups this % chi(gout,gin) = this % chi(gout,gin) + atom_density * & - nuc % chi(gout) * nuc % nu_fission(gin,1) + nuc % chi(gout) * nuc % nu_fission(1,gin) end do end do this % nu_fission = this % nu_fission + atom_density * & - nuc % nu_fission(:,1) + nuc % nu_fission(1,:) else this % chi = this % chi + atom_density * nuc % nu_fission do gin = 1, groups @@ -468,11 +468,11 @@ contains do gin = 1, groups do gout = 1, groups this % chi(gout,gin,:,:) = this % chi(gout,gin,:,:) + atom_density * & - nuc % chi(gout,:,:) * nuc % nu_fission(gin,1,:,:) + nuc % chi(gout,:,:) * nuc % nu_fission(1,gin,:,:) end do end do this % nu_fission = this % nu_fission + atom_density * & - nuc % nu_fission(:,1,:,:) + nuc % nu_fission(1,:,:,:) else this % chi = this % chi + atom_density * nuc % nu_fission do gin = 1, groups diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 35048454ef..809ecdfa43 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -375,10 +375,10 @@ module nuclide_header ! Get nu_fission (as a vector) if (check_for_node(node_xsdata,"nu_fission")) then - allocate(temp_arr(groups * 1)) + allocate(temp_arr(1 * groups)) call get_node_array(node_xsdata,"nu_fission",temp_arr) - allocate(this % nu_fission(groups,1)) - this % nu_fission = reshape(temp_arr,(/groups,1/)) + allocate(this % nu_fission(1,groups)) + this % nu_fission = reshape(temp_arr,(/1,groups/)) deallocate(temp_arr) else call fatal_error("If fissionable, must provide nu_fission!") @@ -676,10 +676,10 @@ module nuclide_header ! Get nu_fission (as a vector) if (check_for_node(node_xsdata,"nu_fission")) then - allocate(temp_arr(groups * this % n_azi * this % n_pol)) + allocate(temp_arr(1 * groups * this % n_azi * this % n_pol)) call get_node_array(node_xsdata,"nu_fission", temp_arr) - allocate(this % nu_fission(groups,1,this % n_azi,this % n_pol)) - this % nu_fission = reshape(temp_arr, (/groups,1,this % n_azi, & + allocate(this % nu_fission(1,groups,this % n_azi,this % n_pol)) + this % nu_fission = reshape(temp_arr, (/1,groups,this % n_azi, & this % n_pol/)) deallocate(temp_arr) else @@ -1242,6 +1242,8 @@ module nuclide_header xs = this % total(gin) case('absorption') xs = this % absorption(gin) + case('nu_fission') + xs = sum(this % nu_fission(:,gin)) case('fission') xs = this % fission(gin) case('k_fission') @@ -1293,8 +1295,8 @@ module nuclide_header case('chi') xs = this % chi(gout,iazi_,ipol_) case('f_mu', 'f_mu/mult') - if (gout < this % scatter(iazi_,ipol) % obj % gmin(gin) .or. & - gout > this % scatter(iazi_,ipol) % obj % gmax(gin)) then + if (gout < this % scatter(iazi_,ipol_) % obj % gmin(gin) .or. & + gout > this % scatter(iazi_,ipol_) % obj % gmax(gin)) then xs = ZERO else xs = this % scatter(iazi_,ipol_) % obj % calc_f(gin,gout,mu) @@ -1309,6 +1311,8 @@ module nuclide_header xs = this % total(gin,iazi_,ipol_) case('absorption') xs = this % absorption(gin,iazi_,ipol_) + case('nu_fission') + xs = sum(this % nu_fission(:,gin,iazi_,ipol_)) case('fission') xs = this % fission(gin,iazi_,ipol_) case('k_fission') diff --git a/src/particle_header.F90 b/src/particle_header.F90 index 4ad4119b76..8544cb38bb 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -202,7 +202,7 @@ contains this % last_g = int(src % E) this % E = energy_bin_avg(this % g) end if - this % last_E = src % E + this % last_E = this % E end subroutine initialize_from_source diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index 6a58540c17..93a0c81e2b 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -248,7 +248,7 @@ contains mu = TWO * prn() - ONE ! Sample azimuthal angle uniformly in [0,2*pi) - phi = TWO*PI*prn() + phi = TWO * PI * prn() bank_array(i) % uvw(1) = mu bank_array(i) % uvw(2) = sqrt(ONE - mu*mu) * cos(phi) bank_array(i) % uvw(3) = sqrt(ONE - mu*mu) * sin(phi) diff --git a/src/tally.F90 b/src/tally.F90 index 94ca2812c5..50daa86fd1 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -28,8 +28,9 @@ module tally !$omp threadprivate(position) - procedure(score_general_), pointer :: score_general => null() - procedure(get_scoring_bins_), pointer :: get_scoring_bins => null() + procedure(score_general_), pointer :: score_general => null() + procedure(score_analog_tally_), pointer :: score_analog_tally => null() + procedure(get_scoring_bins_), pointer :: get_scoring_bins => null() abstract interface subroutine score_general_(p, t, start_index, filter_index, i_nuclide, & @@ -45,6 +46,11 @@ module tally real(8), intent(in) :: atom_density ! atom/b-cm end subroutine score_general_ + subroutine score_analog_tally_(p) + import Particle + type(Particle), intent(in) :: p + end subroutine score_analog_tally_ + subroutine get_scoring_bins_(p, i_tally, found_bin) import Particle type(Particle), intent(in) :: p @@ -62,11 +68,13 @@ contains subroutine init_tally_routines() if (run_CE) then - score_general => score_general_ce - get_scoring_bins => get_scoring_bins_ce + score_general => score_general_ce + score_analog_tally => score_analog_tally_ce + get_scoring_bins => get_scoring_bins_ce else - score_general => score_general_mg - get_scoring_bins => get_scoring_bins_mg + score_general => score_general_mg + score_analog_tally => score_analog_tally_mg + get_scoring_bins => get_scoring_bins_mg end if end subroutine init_tally_routines @@ -808,7 +816,7 @@ contains real(8) :: p_uvw(3) ! Particle's current uvw real(8) :: mult ! Weight multiplier - ! Set the direction, if needed for nuclidic data, so that nuc % get_xs + ! Set the direction, if needed, for nuclidic data, so that nuc % get_xs ! knows wihch direction it should be using for direction-dependent ! mgxs if (i_nuclide > 0) then @@ -918,19 +926,10 @@ contains end if end if -!!! CURRENT PROBLEMS: -!!! 1) See comment jus below -!!! 2) groups and energy filters are in reverse order (i.e., low E filter is bin 1) -!!! 3) nuclide sigt/macro sigt weight change -!!! 4) do i have right p % g vs p % last_g everywhere throughout?? - -!!! This next if/else block (and equivalent in nu scatter & PN/YN) -!!! is incorrect. There is no outgoing energy group if using tracklength -!!! scoring. if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) score = score * nuc % get_xs('f_mu/mult',p % last_g,p % g, & - p % last_uvw,p % mu) + p % last_uvw,p % mu) * TWO end associate else mult = macro_xs(p % material) % obj % get_xs('mult',p % last_g,p % g, & @@ -1124,11 +1123,13 @@ contains ! All fission events will contribute, so again we can use ! particle's weight entering the collision as the estimate for the ! fission reaction rate - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = p % last_wgt & - * nuc % get_xs('fission',p % g,UVW=p_uvw) & - / nuc % get_xs('absorption',p % g,UVW=p_uvw) - end associate + if (i_nuclide > 0) then + associate (nuc => nuclides_MG(i_nuclide) % obj) + score = p % last_wgt & + * nuc % get_xs('fission',p % g,UVW=p_uvw) & + / nuc % get_xs('absorption',p % g,UVW=p_uvw) + end associate + end if end if else @@ -1162,15 +1163,17 @@ contains ! No fission events occur if survival biasing is on -- need to ! calculate fraction of absorptions that would have resulted in ! nu-fission - associate (nuc => nuclides_MG(i_nuclide) % obj) - micro_abs = nuc % get_xs('absorption',p % g,UVW=p_uvw) - if (micro_abs > ZERO) then - score = p % absorb_wgt * & - nuc % get_xs('fission',p % g,UVW=p_uvw) / micro_abs - else - score = ZERO - end if - end associate + if (i_nuclide > 0) then + associate (nuc => nuclides_MG(i_nuclide) % obj) + micro_abs = nuc % get_xs('absorption',p % g,UVW=p_uvw) + if (micro_abs > ZERO) then + score = p % absorb_wgt * & + nuc % get_xs('fission',p % g,UVW=p_uvw) / micro_abs + else + score = ZERO + end if + end associate + end if else ! Skip any non-fission events if (.not. p % fission) cycle SCORE_LOOP @@ -1185,8 +1188,8 @@ contains else if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs('nu_fission',p % g,UVW=p_uvw) & - * atom_density * flux + score = nuc % get_xs('nu_fission',p % g,UVW=p_uvw) * & + atom_density * flux end associate else score = material_xs % nu_fission * flux @@ -1202,25 +1205,29 @@ contains ! No fission events occur if survival biasing is on -- need to ! calculate fraction of absorptions that would have resulted in ! fission scale by kappa-fission - associate (nuc => nuclides_MG(i_nuclide) % obj) - micro_abs = nuc % get_xs('absorption',p % g,UVW=p_uvw) - if (micro_abs > ZERO) then - score = p % absorb_wgt * & - nuc % get_xs('k_fission',p % g,UVW=p_uvw) / & - micro_abs - end if - end associate + if (i_nuclide > 0) then + associate (nuc => nuclides_MG(i_nuclide) % obj) + micro_abs = nuc % get_xs('absorption',p % g,UVW=p_uvw) + if (micro_abs > ZERO) then + score = p % absorb_wgt * & + nuc % get_xs('k_fission',p % g,UVW=p_uvw) / & + micro_abs + end if + end associate + end if else ! Skip any non-absorption events if (p % event == EVENT_SCATTER) cycle SCORE_LOOP ! All fission events will contribute, so again we can use ! particle's weight entering the collision as the estimate for ! the fission energy production rate - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = p % last_wgt * & - nuc % get_xs('k_fission',p % g,UVW=p_uvw) / & - nuc % get_xs('absorption',p % g,UVW=p_uvw) - end associate + if (i_nuclide > 0) then + associate (nuc => nuclides_MG(i_nuclide) % obj) + score = p % last_wgt * & + nuc % get_xs('k_fission',p % g,UVW=p_uvw) / & + nuc % get_xs('absorption',p % g,UVW=p_uvw) + end associate + end if end if else @@ -1242,6 +1249,16 @@ contains end select + ! If we have a nuclidic tally, we need to scale the score by the nuclides + ! macroscopic total xs over the material's macroscopic total, since we did + ! not sample a specfic nuclide in the physics module. + if (t % estimator == ESTIMATOR_ANALOG .and. i_nuclide > 0) then + associate (nuc => nuclides_MG(i_nuclide) % obj) + score = score * (nuc % get_xs('total',p % g,UVW=p_uvw) * & + atom_density / material_xs % total) + end associate + end if + !######################################################################### ! Expand score if necessary and add to tally results. call expand_and_score(p, t, score_index, filter_index, score_bin, & @@ -1422,7 +1439,7 @@ contains ! triggered at every collision, not every event !=============================================================================== - subroutine score_analog_tally(p) + subroutine score_analog_tally_ce(p) type(Particle), intent(in) :: p @@ -1432,17 +1449,9 @@ contains ! position during the loop integer :: filter_index ! single index for single bin integer :: i_nuclide ! index in nuclides array - real(8) :: last_wgt ! pre-collision particle weight - real(8) :: wgt ! post-collision particle weight - real(8) :: mu ! cosine of angle of collision logical :: found_bin ! scoring bin found? type(TallyObject), pointer :: t - ! Copy particle's pre- and post-collision weight and angle - last_wgt = p % last_wgt - wgt = p % wgt - mu = p % mu - ! A loop over all tallies is necessary because we need to simultaneously ! determine different filter bins for the same tally in order to score to it @@ -1521,7 +1530,87 @@ contains ! Reset tally map positioning position = 0 - end subroutine score_analog_tally + end subroutine score_analog_tally_ce + + subroutine score_analog_tally_mg(p) + + type(Particle), intent(in) :: p + + integer :: i, m + integer :: i_tally + integer :: k ! loop index for nuclide bins + ! position during the loop + integer :: filter_index ! single index for single bin + integer :: i_nuclide ! index in nuclides array + logical :: found_bin ! scoring bin found? + type(TallyObject), pointer :: t + type(Material), pointer :: mat + real(8) :: atom_density + + ! A loop over all tallies is necessary because we need to simultaneously + ! determine different filter bins for the same tally in order to score to it + + TALLY_LOOP: do i = 1, active_analog_tallies % size() + ! Get index of tally and pointer to tally + i_tally = active_analog_tallies % get_item(i) + t => tallies(i_tally) + + ! Get pointer to current material. We need this in order to determine what + ! nuclides are in the material + mat => materials(p % material) + + ! ======================================================================= + ! DETERMINE SCORING BIN COMBINATION + + call get_scoring_bins(p, i_tally, found_bin) + if (.not. found_bin) cycle + + ! ======================================================================= + ! CALCULATE RESULTS AND ACCUMULATE TALLY + + ! If we have made it here, we have a scoring combination of bins for this + ! tally -- now we need to determine where in the results array we should + ! be accumulating the tally values + + ! Determine scoring index for this filter combination + filter_index = sum((matching_bins(1:t%n_filters) - 1) * t % stride) + 1 + + ! Check for nuclide bins + k = 0 + NUCLIDE_LOOP: do while (k < t % n_nuclide_bins) + + ! Increment the index in the list of nuclide bins + k = k + 1 + + i_nuclide = t % nuclide_bins(k) + + ! Check to see if this nuclide was in the material of our collision. + do m = 1, mat % n_nuclides + if (mat % nuclide(m) == i_nuclide) then + atom_density = mat % atom_density(m) + exit + end if + end do + + ! Determine score for each bin + call score_general(p, t, (k-1)*t % n_score_bins, filter_index, & + i_nuclide, atom_density, ZERO) + + end do NUCLIDE_LOOP + + ! If the user has specified that we can assume all tallies are spatially + ! separate, this implies that once a tally has been scored to, we needn't + ! check the others. This cuts down on overhead when there are many + ! tallies specified + + if (assume_separate) exit TALLY_LOOP + + end do TALLY_LOOP + + ! Reset tally map positioning + position = 0 + + end subroutine score_analog_tally_mg !=============================================================================== ! SCORE_FISSION_EOUT handles a special case where we need to store neutron @@ -2619,7 +2708,6 @@ contains end if end if - case (FILTER_ENERGYOUT) if (t % energyout_matches_groups) then ! Since all groups are filters, the filter bin is the group @@ -2643,7 +2731,6 @@ contains end if end if - case (FILTER_MU) ! determine mu bin n = t % filters(i) % n_bins From a2d8e9580456e73f2af2999160bba37202d2e4b1 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 12 Mar 2016 15:23:32 -0500 Subject: [PATCH 375/650] 1) MG tallies were all sorts of messed up, mostly for nuclidic tallies which i am not a common user for sadly. Now all should be good to go, but i still want to thoroughly test this by seeing if i can create a mgxs library from mg mode and compare that library to the inputted library - both should be the same!. 2) fixed state_point reading/writing issue when using MG mode and nuclidic tallies (pointing to CE nuclide array not MG array), 3) removed N_1N from MG mode, makes no sense to include and at best is a duplicate of scatter, 4) cleaned up MG general tallying routine by combining select cases for all the SCORE_SCATTER* options, and did same for nu-scatter, 5) added ability to do nu-scatter or nu-scatter-0 score type with tracklength if no outgoing E filters applied in MG mode, just like scatter or scatter-0 --- src/input_xml.F90 | 27 +++- src/macroxs_header.F90 | 55 ++++++-- src/nuclide_header.F90 | 20 ++- src/physics_mg.F90 | 3 +- src/state_point.F90 | 6 +- src/summary.F90 | 6 +- src/tally.F90 | 290 ++++++++++++++++------------------------- 7 files changed, 201 insertions(+), 206 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 64016b8d5e..89dcc5e997 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -3332,8 +3332,13 @@ contains case ('nu-scatter') t % score_bins(j) = SCORE_NU_SCATTER - ! Set tally estimator to analog - t % estimator = ESTIMATOR_ANALOG + ! Set tally estimator to analog for CE mode + ! (MG mode has all data available without a collision being + ! necessary) + if (run_CE) then + t % estimator = ESTIMATOR_ANALOG + end if + case ('scatter-n') if (n_order == 0) then t % score_bins(j) = SCORE_SCATTER @@ -3345,12 +3350,16 @@ contains t % moment_order(j) = n_order case ('nu-scatter-n') - ! Set tally estimator to analog - t % estimator = ESTIMATOR_ANALOG if (n_order == 0) then t % score_bins(j) = SCORE_NU_SCATTER else t % score_bins(j) = SCORE_NU_SCATTER_N + ! Set tally estimator to analog for CE mode + ! (MG mode has all data available without a collision being + ! necessary) + if (run_CE) then + t % estimator = ESTIMATOR_ANALOG + end if end if t % moment_order(j) = n_order @@ -3391,10 +3400,14 @@ contains call fatal_error("Diffusion score no longer supported for tallies, & &please remove") case ('n1n') - t % score_bins(j) = SCORE_N_1N + if (run_CE) then + t % score_bins(j) = SCORE_N_1N - ! Set tally estimator to analog - t % estimator = ESTIMATOR_ANALOG + ! Set tally estimator to analog + t % estimator = ESTIMATOR_ANALOG + else + call fatal_error("Cannot tally n1n rate in multi-group mode!") + end if case ('n2n', '(n,2n)') t % score_bins(j) = N_2N diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 index db1ffc479f..ff04d8a4e3 100644 --- a/src/macroxs_header.F90 +++ b/src/macroxs_header.F90 @@ -42,13 +42,14 @@ module macroxs_header integer, intent(in) :: scatt_type ! Legendre or Tabular Scatt? end subroutine macroxs_init_ - function macroxs_get_xs_(this, xstype, gin, gout, uvw) result(xs) + function macroxs_get_xs_(this, xstype, gin, gout, uvw, mu) result(xs) import MacroXS class(MacroXS), intent(in) :: this ! The MacroXS to initialize character(*) , intent(in) :: xstype ! Cross Section Type integer, intent(in) :: gin ! Incoming Energy group integer, optional, intent(in) :: gout ! Outgoing Energy group real(8), optional, intent(in) :: uvw(3) ! Requested Angle + real(8), optional, intent(in) :: mu ! Change in angle real(8) :: xs ! Resultant xs end function macroxs_get_xs_ @@ -547,12 +548,13 @@ contains ! MACROXS_*_GET_XS returns the requested data type !=============================================================================== - function macroxsiso_get_xs(this, xstype, gin, gout, uvw) result(xs) + function macroxsiso_get_xs(this, xstype, gin, gout, uvw, mu) result(xs) class(MacroXSIso), intent(in) :: this ! The MacroXS to initialize character(*) , intent(in) :: xstype ! Type of xs requested integer, intent(in) :: gin ! Incoming Energy group integer, optional, intent(in) :: gout ! Outgoing Energy group real(8), optional, intent(in) :: uvw(3) ! Requested Angle + real(8), optional, intent(in) :: mu ! Change in angle real(8) :: xs ! Requested x/s select case(xstype) @@ -562,7 +564,7 @@ contains xs = this % absorption(gin) case('fission') xs = this % fission(gin) - case('k_fission') + case('kappa_fission') xs = this % k_fission(gin) case('nu_fission') xs = this % nu_fission(gin) @@ -577,19 +579,33 @@ contains xs = this % scatter % mult(gin) % data(gout) end if else - xs = sum(this % scatter % mult(gin) % data(:)) + xs = dot_product(this % scatter % mult(gin) % data, & + this % scatter % scattxs(gin) * & + this % scatter % energy(gin) % data) + xs = xs / this % scatter % scattxs(gin) + end if + case('f_mu', 'f_mu/mult') + if (gout < this % scatter % gmin(gin) .or. & + gout > this % scatter % gmax(gin)) then + xs = ZERO + else + xs = this % scatter % calc_f(gin, gout, mu) + if (xstype == 'f_mu/mult') then + xs = xs / this % scatter % mult(gin) % data(gout) + end if end if end select end function macroxsiso_get_xs - function macroxsangle_get_xs(this, xstype, gin, gout, uvw) result(xs) - class(MacroXSAngle), intent(in) :: this ! The MacroXS to initialize - character(*) , intent(in) :: xstype ! Type of xs requested - integer, intent(in) :: gin ! Incoming Energy group - integer, optional, intent(in) :: gout ! Outgoing Energy group - real(8), optional, intent(in) :: uvw(3) ! Requested Angle - real(8) :: xs ! Requested x/s + function macroxsangle_get_xs(this, xstype, gin, gout, uvw, mu) result(xs) + class(MacroXSAngle), intent(in) :: this ! The MacroXS to initialize + character(*) , intent(in) :: xstype ! Type of xs requested + integer, intent(in) :: gin ! Incoming Energy group + integer, optional, intent(in) :: gout ! Outgoing Energy group + real(8), optional, intent(in) :: uvw(3) ! Requested Angle + real(8), optional, intent(in) :: mu ! Change in angle + real(8) :: xs ! Requested x/s integer :: iazi, ipol @@ -602,7 +618,7 @@ contains xs = this % absorption(gin,iazi,ipol) case('fission') xs = this % fission(gin,iazi,ipol) - case('k_fission') + case('kappa_fission') xs = this % k_fission(gin,iazi,ipol) case('nu_fission') xs = this % nu_fission(gin,iazi,ipol) @@ -617,7 +633,20 @@ contains xs = this % scatter(iazi,ipol) % obj % mult(gin) % data(gout) end if else - xs = sum(this % scatter(iazi,ipol) % obj % mult(gin) % data(:)) + xs = dot_product(this % scatter(iazi,ipol) % obj % mult(gin) % data, & + this % scatter(iazi,ipol) % obj % scattxs(gin) * & + this % scatter(iazi,ipol) % obj % energy(gin) % data) + xs = xs / this % scatter(iazi,ipol) % obj % scattxs(gin) + end if + case('f_mu', 'f_mu/mult') + if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & + gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then + xs = ZERO + else + xs = this % scatter(iazi,ipol) % obj % calc_f(gin,gout,mu) + if (xstype == 'f_mu/mult') then + xs = xs / this % scatter(iazi,ipol) % obj % mult(gin) % data(gout) + end if end if end select end if diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 809ecdfa43..7a093fa778 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -1215,7 +1215,7 @@ module nuclide_header xs = ZERO if ((xstype == 'nu_fission' .or. xstype == 'fission' .or. xstype =='chi' & - .or. xstype =='k_fission') .and. (.not. this % fissionable)) then + .or. xstype =='kappa_fission') .and. (.not. this % fissionable)) then return end if @@ -1246,7 +1246,7 @@ module nuclide_header xs = sum(this % nu_fission(:,gin)) case('fission') xs = this % fission(gin) - case('k_fission') + case('kappa_fission') if (allocated(this % k_fission)) then xs = this % k_fission(gin) end if @@ -1254,6 +1254,11 @@ module nuclide_header xs = this % chi(gin) case('scatter') xs = this % scatter % scattxs(gin) + case('mult') + xs = dot_product(this % scatter % mult(gin) % data, & + this % scatter % scattxs(gin) * & + this % scatter % energy(gin) % data) + xs = xs / this % scatter % scattxs(gin) end select end if end function nuclideiso_get_xs @@ -1264,8 +1269,8 @@ module nuclide_header character(*), intent(in) :: xstype ! Cross Section Type integer, intent(in) :: gin ! Incoming Energy group integer, optional, intent(in) :: gout ! Outgoing Group - real(8), optional, intent(in) :: mu ! Change in angle real(8), optional, intent(in) :: uvw(3) ! Requested Angle + real(8), optional, intent(in) :: mu ! Change in angle integer, optional, intent(in) :: iazi ! Azimuthal Index integer, optional, intent(in) :: ipol ! Polar Index real(8) :: xs ! Resultant xs @@ -1275,7 +1280,7 @@ module nuclide_header xs = ZERO if ((xstype == 'nu_fission' .or. xstype == 'fission' .or. xstype =='chi' & - .or. xstype =='k_fission') .and. (.not. this % fissionable)) then + .or. xstype =='kappa_fission') .and. (.not. this % fissionable)) then return end if @@ -1315,7 +1320,7 @@ module nuclide_header xs = sum(this % nu_fission(:,gin,iazi_,ipol_)) case('fission') xs = this % fission(gin,iazi_,ipol_) - case('k_fission') + case('kappa_fission') if (allocated(this % k_fission)) then xs = this % k_fission(gin,iazi_,ipol_) end if @@ -1323,6 +1328,11 @@ module nuclide_header xs = this % chi(gin,iazi_,ipol_) case('scatter') xs = this % scatter(iazi_,ipol_) % obj % scattxs(gin) + case('mult') + xs = dot_product(this % scatter(iazi_,ipol_) % obj % mult(gin) % data, & + this % scatter(iazi_,ipol_) % obj % scattxs(gin) * & + this % scatter(iazi_,ipol_) % obj % energy(gin) % data) + xs = xs / this % scatter(iazi_,ipol_) % obj % scattxs(gin) end select end if diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index 93a0c81e2b..209808dc97 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -77,6 +77,7 @@ contains call create_fission_sites(p, p % secondary_bank, p % n_secondary) end if end if + ! If survival biasing is being used, the following subroutine adjusts the ! weight of the particle. Otherwise, it checks to see if absorption occurs @@ -256,7 +257,7 @@ contains ! Sample secondary energy distribution for fission reaction and set energy ! in fission bank bank_array(i) % E = & - real(xs % sample_fission_energy(p % g, fission_bank(i) % uvw), 8) + real(xs % sample_fission_energy(p % g, bank_array(i) % uvw), 8) end do ! increment number of bank sites diff --git a/src/state_point.F90 b/src/state_point.F90 index 6c0e309e2f..ccd368b493 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -295,7 +295,11 @@ contains NUCLIDE_LOOP: do j = 1, tally%n_nuclide_bins if (tally%nuclide_bins(j) > 0) then ! Get index in cross section listings for this nuclide - i_list = nuclides(tally%nuclide_bins(j))%listing + if (run_CE) then + i_list = nuclides(tally % nuclide_bins(j)) % listing + else + i_list = nuclides_MG(tally % nuclide_bins(j)) % obj % listing + end if ! Determine position of . in alias string (e.g. "U-235.71c"). If ! no . is found, just use the entire string. diff --git a/src/summary.F90 b/src/summary.F90 index e662aa473b..41dbee7020 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -630,7 +630,11 @@ contains allocate(str_array(t%n_nuclide_bins)) NUCLIDE_LOOP: do j = 1, t%n_nuclide_bins if (t%nuclide_bins(j) > 0) then - i_list = nuclides(t%nuclide_bins(j))%listing + if (run_CE) then + i_list = nuclides(t % nuclide_bins(j)) % listing + else + i_list = nuclides_MG(t % nuclide_bins(j)) % obj % listing + end if i_xs = index(xs_listings(i_list)%alias, '.') if (i_xs > 0) then str_array(j) = xs_listings(i_list)%alias(1:i_xs - 1) diff --git a/src/tally.F90 b/src/tally.F90 index 50daa86fd1..d23cd86919 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -814,12 +814,11 @@ contains real(8) :: macro_scatt ! material macro scatt xs real(8) :: micro_abs ! nuclidic microscopic abs real(8) :: p_uvw(3) ! Particle's current uvw - real(8) :: mult ! Weight multiplier - ! Set the direction, if needed, for nuclidic data, so that nuc % get_xs - ! knows wihch direction it should be using for direction-dependent - ! mgxs - if (i_nuclide > 0) then + ! Set the direction to use with get_xs + if (t % estimator == ESTIMATOR_ANALOG) then + p_uvw = p % last_uvw + else p_uvw = p % coord(p % n_coord) % uvw end if @@ -904,153 +903,92 @@ contains end if - case (SCORE_SCATTER, SCORE_SCATTER_N) + case (SCORE_SCATTER, SCORE_SCATTER_N, SCORE_SCATTER_PN, SCORE_SCATTER_YN) if (t % estimator == ESTIMATOR_ANALOG) then ! Skip any event where the particle didn't scatter - if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP + if (p % event /= EVENT_SCATTER) then + if (score_bin == SCORE_SCATTER_PN) then + i = i + t % moment_order(i) + else + i = i + (t % moment_order(i) + 1)**2 - 1 + end if + cycle SCORE_LOOP + end if + ! Since only scattering events make it here, again we can use ! the weight entering the collision as the estimator for the ! reaction rate score = p % last_wgt + if (i_nuclide > 0) then + associate (nuc => nuclides_MG(i_nuclide) % obj) + score = score * nuc % get_xs('f_mu',p % last_g,p % g, & + UVW=p_uvw,MU=p % mu) / & + macro_xs(p % material) % obj % get_xs('f_mu',p % last_g, & + p % g, UVW=p_uvw, & + MU=p % mu) + end associate + end if + else ! Note SCORE_SCATTER_N not available for tracklength/collision. + if (i_nuclide > 0) then + associate (nuc => nuclides_MG(i_nuclide) % obj) + score = nuc % get_xs('scatter',p % g,UVW=p_uvw) * & + atom_density * flux / & + nuc % get_xs('mult',p % g,UVW=p_uvw) + end associate + else + ! Get the scattering x/s (stored in % elastic) and take away + ! the multiplication baked in to sigS + score = material_xs % elastic * flux / & + macro_xs(p % material) % obj % get_xs('mult',p % g,UVW=p_uvw) + end if + end if + + + case (SCORE_NU_SCATTER, SCORE_NU_SCATTER_N, SCORE_NU_SCATTER_PN, & + SCORE_NU_SCATTER_YN) + if (t % estimator == ESTIMATOR_ANALOG) then + ! Skip any event where the particle didn't scatter + if (p % event /= EVENT_SCATTER) then + if (score_bin == SCORE_NU_SCATTER_PN) then + i = i + t % moment_order(i) + else if (score_bin == SCORE_NU_SCATTER_YN) then + i = i + (t % moment_order(i) + 1)**2 - 1 + end if + cycle SCORE_LOOP + end if + + ! For scattering production, we need to use the pre-collision + ! weight times the multiplicity as the estimate for the number of + ! neutrons exiting a reaction with neutrons in the exit channel + score = p % wgt + + if (i_nuclide > 0) then + associate (nuc => nuclides_MG(i_nuclide) % obj) + score = score * nuc % get_xs('f_mu',p % last_g,p % g, & + UVW=p_uvw,MU=p % mu) / & + macro_xs(p % material) % obj % get_xs('f_mu',p % last_g, & + p % g, UVW=p_uvw, & + MU=p % mu) + end associate + end if + + else + ! Note SCORE_NU_SCATTER_* not available for tracklength/collision. if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) score = nuc % get_xs('scatter',p % g,UVW=p_uvw) * & atom_density * flux end associate else - ! Get the scattering x/s (stored in % elastic) + ! Get the scattering x/s (stored in % elastic) and take away + ! the multiplication baked in to sigS score = material_xs % elastic * flux end if end if - if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = score * nuc % get_xs('f_mu/mult',p % last_g,p % g, & - p % last_uvw,p % mu) * TWO - end associate - else - mult = macro_xs(p % material) % obj % get_xs('mult',p % last_g,p % g, & - p % last_uvw) - if (mult > ZERO) then - score = score / mult - else - score = ZERO - end if - end if - - - case (SCORE_SCATTER_PN) - ! Only analog estimators are available. - ! Skip any event where the particle didn't scatter - if (p % event /= EVENT_SCATTER) then - i = i + t % moment_order(i) - cycle SCORE_LOOP - end if - ! Since only scattering events make it here, again we can use - ! the weight entering the collision as the estimator for the - ! reaction rate - score = p % last_wgt - - if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = score * nuc % get_xs('f_mu/mult',p % last_g,p % g, & - p % last_uvw,p % mu) - end associate - else - mult = macro_xs(p % material) % obj % get_xs('mult',p % last_g,p % g, & - p % last_uvw) - if (mult > ZERO) then - score = score / mult - else - score = ZERO - end if - end if - - - case (SCORE_SCATTER_YN) - ! Only analog estimators are available. - ! Skip any event where the particle didn't scatter - if (p % event /= EVENT_SCATTER) then - i = i + (t % moment_order(i) + 1)**2 - 1 - cycle SCORE_LOOP - end if - ! Since only scattering events make it here, again we can use - ! the weight entering the collision as the estimator for the - ! reaction rate - score = p % last_wgt - - if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = score * nuc % get_xs('f_mu/mult',p % last_g,p % g, & - p % last_uvw,p % mu) - end associate - else - mult = macro_xs(p % material) % obj % get_xs('mult',p % last_g,p % g, & - p % last_uvw) - if (mult > ZERO) then - score = score / mult - else - score = ZERO - end if - end if - - - case (SCORE_NU_SCATTER, SCORE_NU_SCATTER_N) - ! Only analog estimators are available. - ! Skip any event where the particle didn't scatter - if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP - ! For scattering production, we need to use the pre-collision - ! weight times the multiplicity as the estimate for the number of - ! neutrons exiting a reaction with neutrons in the exit channel - score = p % wgt - if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = score * nuc % get_xs('f_mu',p % last_g,p % g, & - p % last_uvw, p % mu) - end associate - end if - - - case (SCORE_NU_SCATTER_PN) - ! Only analog estimators are available. - ! Skip any event where the particle didn't scatter - if (p % event /= EVENT_SCATTER) then - i = i + t % moment_order(i) - cycle SCORE_LOOP - end if - ! For scattering production, we need to use the pre-collision - ! weight times the multiplicity as the estimate for the number of - ! neutrons exiting a reaction with neutrons in the exit channel - score = p % wgt - if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = score * nuc % get_xs('f_mu',p % last_g,p % g, & - p % last_uvw, p % mu) - end associate - end if - - - case (SCORE_NU_SCATTER_YN) - ! Only analog estimators are available. - ! Skip any event where the particle didn't scatter - if (p % event /= EVENT_SCATTER) then - i = i + (t % moment_order(i) + 1)**2 - 1 - cycle SCORE_LOOP - end if - ! For scattering production, we need to use the pre-collision - ! weight times the multiplicity as the estimate for the number of - ! neutrons exiting a reaction with neutrons in the exit channel - score = p % wgt - if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = score * nuc % get_xs('f_mu',p % last_g,p % g, & - p % last_uvw, p % mu) - end associate - end if - case (SCORE_TRANSPORT) ! Only analog estimators are available. @@ -1066,16 +1004,6 @@ contains score = (macro_total - p % mu * macro_scatt) * (ONE / macro_scatt) - case (SCORE_N_1N) - ! Only analog estimators are available. - ! Skip any event where the particle didn't scatter - if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP - ! Skip any events where weight of particle changed - if (p % wgt /= p % last_wgt) cycle SCORE_LOOP - ! All events that reach this point are (n,1n) reactions - score = p % last_wgt - - case (SCORE_ABSORPTION) if (t % estimator == ESTIMATOR_ANALOG) then if (survival_biasing) then @@ -1125,10 +1053,19 @@ contains ! fission reaction rate if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = p % last_wgt & - * nuc % get_xs('fission',p % g,UVW=p_uvw) & - / nuc % get_xs('absorption',p % g,UVW=p_uvw) + score = p % last_wgt * & + nuc % get_xs('fission',p % g,UVW=p_uvw) * & + atom_density / & + macro_xs(p % material) % obj % get_xs('absorption',& + p % g,UVW=p_uvw) end associate + else + score = p % last_wgt * & + macro_xs(p % material) % obj % get_xs('fission', & + p % g,UVW=p_uvw) * & + atom_density / & + macro_xs(p % material) % obj % get_xs('absorption', & + p % g,UVW=p_uvw) end if end if @@ -1139,7 +1076,7 @@ contains atom_density * flux end associate else - score = flux * macro_xs(p % material) % obj % get_xs('fission',& + score = flux * macro_xs(p % material) % obj % get_xs('fission', & p % g,UVW=p_uvw) end if @@ -1168,7 +1105,7 @@ contains micro_abs = nuc % get_xs('absorption',p % g,UVW=p_uvw) if (micro_abs > ZERO) then score = p % absorb_wgt * & - nuc % get_xs('fission',p % g,UVW=p_uvw) / micro_abs + nuc % get_xs('nu_fission',p % g,UVW=p_uvw) / micro_abs else score = ZERO end if @@ -1198,47 +1135,54 @@ contains case (SCORE_KAPPA_FISSION) - ! Determine kappa-fission cross section - score = ZERO if (t % estimator == ESTIMATOR_ANALOG) then if (survival_biasing) then ! No fission events occur if survival biasing is on -- need to ! calculate fraction of absorptions that would have resulted in - ! fission scale by kappa-fission - if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - micro_abs = nuc % get_xs('absorption',p % g,UVW=p_uvw) - if (micro_abs > ZERO) then - score = p % absorb_wgt * & - nuc % get_xs('k_fission',p % g,UVW=p_uvw) / & - micro_abs - end if - end associate - end if + ! fission + associate (nuc => nuclides_MG(i_nuclide) % obj) + micro_abs = nuc % get_xs('absorption',p % g,UVW=p_uvw) + if (micro_abs > ZERO) then + score = p % absorb_wgt * & + nuc % get_xs('kappa_fission',p % g,UVW=p_uvw) / micro_abs + else + score = ZERO + end if + end associate else ! Skip any non-absorption events if (p % event == EVENT_SCATTER) cycle SCORE_LOOP ! All fission events will contribute, so again we can use - ! particle's weight entering the collision as the estimate for - ! the fission energy production rate + ! particle's weight entering the collision as the estimate for the + ! fission reaction rate if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) score = p % last_wgt * & - nuc % get_xs('k_fission',p % g,UVW=p_uvw) / & - nuc % get_xs('absorption',p % g,UVW=p_uvw) + nuc % get_xs('kappa_fission',p % g,UVW=p_uvw) * & + atom_density / & + macro_xs(p % material) % obj % get_xs('absorption',& + p % g,UVW=p_uvw) end associate + else + score = p % last_wgt * & + macro_xs(p % material) % obj % get_xs('kappa_fission', & + p % g,UVW=p_uvw) * & + atom_density / & + macro_xs(p % material) % obj % get_xs('absorption', & + p % g,UVW=p_uvw) end if end if else if (i_nuclide > 0) then associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs('k_fission',p % g,UVW=p_uvw) & - * atom_density * flux + score = nuc % get_xs('kappa_fission',p % g,UVW=p_uvw) * & + atom_density * flux end associate else - score = flux * macro_xs(p % material) % obj % get_xs('k_fission', & + score = flux * macro_xs(p % material) % obj % get_xs('kappa_fission', & p % g,UVW=p_uvw) + end if end if @@ -1249,16 +1193,6 @@ contains end select - ! If we have a nuclidic tally, we need to scale the score by the nuclides - ! macroscopic total xs over the material's macroscopic total, since we did - ! not sample a specfic nuclide in the physics module. - if (t % estimator == ESTIMATOR_ANALOG .and. i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = score * (nuc % get_xs('total',p % g,UVW=p_uvw) * & - atom_density / material_xs % total) - end associate - end if - !######################################################################### ! Expand score if necessary and add to tally results. call expand_and_score(p, t, score_index, filter_index, score_bin, & From a3e3c8278ef5e7aa55e79ebf92706ca8e6278653 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 12 Mar 2016 15:30:44 -0500 Subject: [PATCH 376/650] Updating tallying test for previous commit --- tests/test_mg_tallies/results_true.dat | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_mg_tallies/results_true.dat b/tests/test_mg_tallies/results_true.dat index 5f4964a4ee..debbfa537c 100644 --- a/tests/test_mg_tallies/results_true.dat +++ b/tests/test_mg_tallies/results_true.dat @@ -2892,12 +2892,12 @@ tally 1: 0.000000E+00 0.000000E+00 tally 2: -4.075585E+01 -3.339527E+02 +4.076711E+01 +3.341374E+02 4.077838E+01 3.343221E+02 -6.274554E+00 -7.936999E+00 +6.274781E+00 +7.937573E+00 6.275007E+00 7.938146E+00 1.122968E+02 From eb75826cae283d7b93bdfbad9ea188ca91785f0a Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 12 Mar 2016 15:52:54 -0500 Subject: [PATCH 377/650] Added abstract class for the mgxs data. Still need to do the actual extended types Iso and Angle --- src/mgxs_header.F90 | 129 +++++++++++++++++++++++++++++++++++++++++ src/nuclide_header.F90 | 2 +- 2 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 src/mgxs_header.F90 diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 new file mode 100644 index 0000000000..8ae55da94c --- /dev/null +++ b/src/mgxs_header.F90 @@ -0,0 +1,129 @@ +module mgxs_header + + use constants, only: MAX_FILE_LEN, ZERO, ONE, TWO, PI + use error, only: fatal_error + use list_header, only: ListInt + use material_header, only: material + use math, only: calc_pn, calc_rn, expand_harmonic, & + evaluate_legendre, find_angle + use nuclide_header, only: NuclideMGContainer, MaterialMacroXS + use random_lcg, only: prn + use scattdata_header + use string + use xml_interface + +!=============================================================================== +! MGXS contains the base mgxs data for a nuclide/material +!=============================================================================== + + type, abstract :: Mgxs + character(12) :: name ! name of dataset, e.g. 92235.03c + integer :: zaid ! Z and A identifier, e.g. 92235 + real(8) :: awr ! Atomic Weight Ratio + integer :: listing ! index in xs_listings + real(8) :: kT ! temperature in MeV (k*T) + + ! Fission information + logical :: fissionable ! mgxs object is fissionable? + integer :: scatt_type ! either legendre, histogram, or tabular. + + contains + procedure(mgxs_print_), deferred :: print ! Writes object info + procedure(mgxs_init_xml_), deferred :: init_xml ! Initialize the data + procedure(mgxs_get_xs_), deferred :: get_xs ! Get the requested xs + procedure(mgxs_combine_), deferred :: combine ! initializes object + ! Sample the outgoing energy from a fission event + procedure(mgxs_sample_fission_), deferred :: sample_fission_energy + ! Sample the outgoing energy and angle from a scatter event + procedure(mgxs_sample_scatter_), deferred :: sample_scatter + ! Calculate the material specific MGXS data from the nuclides + procedure(mgxs_calculate_xs_), deferred :: calculate_xs + end type Mgxs + + abstract interface + subroutine mgxs_print_(this, unit) + import Mgxs + class(Mgxs),intent(in) :: this + integer, optional, intent(in) :: unit + end subroutine mgxs_print_ + + subroutine mgxs_init_xml_(this, node_xsdata, groups, get_kfiss, get_fiss, & + max_order) + import Mgxs, Node + class(Mgxs), intent(inout) :: this ! Working Object + type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml + integer, intent(in) :: groups ! Number of Energy groups + logical, intent(in) :: get_kfiss ! Need Kappa-Fission? + logical, intent(in) :: get_fiss ! Should we get fiss data? + integer, intent(in) :: max_order ! Maximum requested order + end subroutine mgxs_init_xml_ + + function mgxs_get_xs_(this, xstype, gin, gout, uvw, mu, iazi, ipol) & + result(xs) + import Mgxs + class(Mgxs), intent(in) :: this + character(*), intent(in) :: xstype ! Cross Section Type + integer, intent(in) :: gin ! Incoming Energy group + integer, optional, intent(in) :: gout ! Outgoing Group + real(8), optional, intent(in) :: uvw(3) ! Requested Angle + real(8), optional, intent(in) :: mu ! Change in angle + integer, optional, intent(in) :: iazi ! Azimuthal Index + integer, optional, intent(in) :: ipol ! Polar Index + real(8) :: xs ! Resultant xs + end function mgxs_get_xs_ + + pure function mgxs_calc_f_(this, gin, gout, mu, uvw, iazi, ipol) result(f) + import Mgxs + class(Mgxs), intent(in) :: this + integer, intent(in) :: gin ! Incoming Energy Group + integer, intent(in) :: gout ! Outgoing Energy Group + real(8), intent(in) :: mu ! Angle of interest + real(8), intent(in), optional :: uvw(3) ! Direction vector + integer, intent(in), optional :: iazi ! Incoming Energy Group + integer, intent(in), optional :: ipol ! Outgoing Energy Group + real(8) :: f ! Return value of f(mu) + + end function mgxs_calc_f_ + + subroutine mgxs_combine_(this, mat, nuclides, groups, get_kfiss, get_fiss, & + max_order, scatt_type) + import Mgxs, Material, NuclideMGContainer, MAX_LINE_LEN + class(Mgxs), intent(inout) :: this ! The Mgxs to initialize + type(Material), pointer, intent(in) :: mat ! base material + type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from + integer, intent(in) :: groups ! Number of E groups + logical, intent(in) :: get_kfiss ! Should we get kfiss data? + logical, intent(in) :: get_fiss ! Should we get fiss data? + integer, intent(in) :: max_order ! Maximum requested order + integer, intent(in) :: scatt_type ! Legendre or Tabular Scatt? + end subroutine mgxs_combine_ + + function mgxs_sample_fission_(this, gin, uvw) result(gout) + import Mgxs + class(Mgxs), intent(in) :: this ! Data to work with + integer, intent(in) :: gin ! Incoming energy group + real(8), intent(in) :: uvw(3) ! Particle Direction + integer :: gout ! Sampled outgoing group + + end function mgxs_sample_fission_ + + subroutine mgxs_sample_scatter_(this, uvw, gin, gout, mu, wgt) + import Mgxs + class(Mgxs), intent(in) :: this + real(8), intent(in) :: uvw(3) ! Incoming neutron direction + integer, intent(in) :: gin ! Incoming neutron group + integer, intent(out) :: gout ! Sampled outgoin group + real(8), intent(out) :: mu ! Sampled change in angle + real(8), intent(inout) :: wgt ! Particle weight + end subroutine mgxs_sample_scatter_ + + subroutine mgxs_calculate_xs_(this, gin, uvw, xs) + import Mgxs, MaterialMacroXS + class(Mgxs), intent(in) :: this + integer, intent(in) :: gin ! Incoming neutron group + real(8), intent(in) :: uvw(3) ! Incoming neutron direction + type(MaterialMacroXS), intent(inout) :: xs + end subroutine mgxs_calculate_xs_ + end interface + +end module mgxs_header \ No newline at end of file diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 3a75e8b610..e964e970d8 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -28,7 +28,7 @@ module nuclide_header real(8) :: kT ! temperature in MeV (k*T) ! Fission information - logical :: fissionable ! nuclide is fissionable? + logical :: fissionable ! nuclide is fissionable? contains procedure(nuclide_print_), deferred :: print ! Writes nuclide info From 96c5e42858b3d6819632becbd763fead1d988429 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 13 Mar 2016 09:00:45 -0400 Subject: [PATCH 378/650] Implemented the Mgxs objects member functions so now we can start replacing NuclideMG and MacroXS directly --- src/mgxs_header.F90 | 1657 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1637 insertions(+), 20 deletions(-) diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index 8ae55da94c..36e3964da9 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -2,6 +2,7 @@ module mgxs_header use constants, only: MAX_FILE_LEN, ZERO, ONE, TWO, PI use error, only: fatal_error + use, intrinsic :: ISO_FORTRAN_ENV, only: OUTPUT_UNIT use list_header, only: ListInt use material_header, only: material use math, only: calc_pn, calc_rn, expand_harmonic, & @@ -28,27 +29,21 @@ module mgxs_header integer :: scatt_type ! either legendre, histogram, or tabular. contains - procedure(mgxs_print_), deferred :: print ! Writes object info - procedure(mgxs_init_xml_), deferred :: init_xml ! Initialize the data - procedure(mgxs_get_xs_), deferred :: get_xs ! Get the requested xs - procedure(mgxs_combine_), deferred :: combine ! initializes object - ! Sample the outgoing energy from a fission event + procedure(mgxs_init_file_), deferred :: init_file ! Initialize the data + procedure(mgxs_print_), deferred :: print ! Writes object info + procedure(mgxs_get_xs_), deferred :: get_xs ! Get the requested xs + ! procedure(mgxs_combine_), deferred :: combine ! initializes object + ! ! Sample the outgoing energy from a fission event procedure(mgxs_sample_fission_), deferred :: sample_fission_energy - ! Sample the outgoing energy and angle from a scatter event + ! ! Sample the outgoing energy and angle from a scatter event procedure(mgxs_sample_scatter_), deferred :: sample_scatter - ! Calculate the material specific MGXS data from the nuclides + ! ! Calculate the material specific MGXS data from the nuclides procedure(mgxs_calculate_xs_), deferred :: calculate_xs end type Mgxs abstract interface - subroutine mgxs_print_(this, unit) - import Mgxs - class(Mgxs),intent(in) :: this - integer, optional, intent(in) :: unit - end subroutine mgxs_print_ - - subroutine mgxs_init_xml_(this, node_xsdata, groups, get_kfiss, get_fiss, & - max_order) + subroutine mgxs_init_file_(this, node_xsdata, groups, get_kfiss, get_fiss, & + max_order) import Mgxs, Node class(Mgxs), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml @@ -56,10 +51,15 @@ module mgxs_header logical, intent(in) :: get_kfiss ! Need Kappa-Fission? logical, intent(in) :: get_fiss ! Should we get fiss data? integer, intent(in) :: max_order ! Maximum requested order - end subroutine mgxs_init_xml_ + end subroutine mgxs_init_file_ - function mgxs_get_xs_(this, xstype, gin, gout, uvw, mu, iazi, ipol) & - result(xs) + subroutine mgxs_print_(this, unit) + import Mgxs + class(Mgxs),intent(in) :: this + integer, optional, intent(in) :: unit + end subroutine mgxs_print_ + + function mgxs_get_xs_(this, xstype, gin, gout, uvw, mu) result(xs) import Mgxs class(Mgxs), intent(in) :: this character(*), intent(in) :: xstype ! Cross Section Type @@ -67,8 +67,6 @@ module mgxs_header integer, optional, intent(in) :: gout ! Outgoing Group real(8), optional, intent(in) :: uvw(3) ! Requested Angle real(8), optional, intent(in) :: mu ! Change in angle - integer, optional, intent(in) :: iazi ! Azimuthal Index - integer, optional, intent(in) :: ipol ! Polar Index real(8) :: xs ! Resultant xs end function mgxs_get_xs_ @@ -126,4 +124,1623 @@ module mgxs_header end subroutine mgxs_calculate_xs_ end interface +!=============================================================================== +! MGXSISO contains the base MGXS data specifically for +! isotropically weighted MGXS +!=============================================================================== + + type, extends(Mgxs) :: MgxsIso + + ! Microscopic cross sections + real(8), allocatable :: total(:) ! total cross section + real(8), allocatable :: absorption(:) ! absorption cross section + class(ScattData), allocatable :: scatter ! scattering information + real(8), allocatable :: nu_fission(:) ! fission matrix (Gout x Gin) + real(8), allocatable :: k_fission(:) ! kappa-fission + real(8), allocatable :: fission(:) ! neutron production + real(8), allocatable :: chi(:,:) ! Fission Spectra + + contains + procedure :: init_file => mgxsiso_init_file ! Initialize Nuclidic MGXS Data + procedure :: print => mgxsiso_print ! Writes nuclide info + procedure :: get_xs => mgxsiso_get_xs ! Gets Size of Data w/in Object + ! procedure :: combine => mgxsiso_combine ! inits object + procedure :: sample_fission_energy => mgxsiso_sample_fission_energy + procedure :: sample_scatter => mgxsiso_sample_scatter + procedure :: calculate_xs => mgxsiso_calculate_xs + end type MgxsIso + +!=============================================================================== +! MGXSANGLE contains the base MGXS data specifically for +! angular flux weighted MGXS +!=============================================================================== + + type, extends(Mgxs) :: MgxsAngle + + ! Microscopic cross sections + real(8), allocatable :: total(:,:,:) ! total cross section + real(8), allocatable :: absorption(:,:,:) ! absorption cross section + class(ScattDataContainer), allocatable :: scatter(:,:) ! scattering information + real(8), allocatable :: nu_fission(:,:,:) ! fission matrix (Gout x Gin) + real(8), allocatable :: k_fission(:,:,:) ! kappa-fission + real(8), allocatable :: fission(:,:,:) ! neutron production + real(8), allocatable :: chi(:,:,:,:) ! Fission Spectra + ! In all cases, right-most indices are theta, phi + integer :: n_pol ! Number of polar angles + integer :: n_azi ! Number of azimuthal angles + real(8), allocatable :: polar(:) ! polar angles + real(8), allocatable :: azimuthal(:) ! azimuthal angles + + contains + procedure :: init_file => mgxsang_init_file ! Initialize Nuclidic MGXS Data + procedure :: print => mgxsang_print ! Writes nuclide info + procedure :: get_xs => mgxsang_get_xs ! Gets Size of Data w/in Object + ! procedure :: combine => mgxsang_combine ! inits object + procedure :: sample_fission_energy => mgxsang_sample_fission_energy + procedure :: sample_scatter => mgxsang_sample_scatter + procedure :: calculate_xs => mgxsang_calculate_xs + end type MgxsAngle + +!=============================================================================== +! MGXSCONTAINER pointer array for storing Nuclides +!=============================================================================== + + type MgxsContainer + class(Mgxs), pointer :: obj + end type MgxsContainer + + contains + +!=============================================================================== +! MGXS*_INIT reads in the data from the XML file. At the point of entry +! the file would have been opened and metadata read. This routine begins with +! the xsdata object node itself. +!=============================================================================== + + subroutine mgxs_init_file(this, node_xsdata) + class(Mgxs), intent(inout) :: this ! Working Object + type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml + + character(MAX_LINE_LEN) :: temp_str + + ! Load the nuclide metadata + call get_node_value(node_xsdata, "name", this % name) + this % name = to_lower(this % name) + if (check_for_node(node_xsdata, "kT")) then + call get_node_value(node_xsdata, "kT", this % kT) + else + this % kT = ZERO + end if + if (check_for_node(node_xsdata, "zaid")) then + call get_node_value(node_xsdata, "zaid", this % zaid) + else + this % zaid = -1 + end if + if (check_for_node(node_xsdata, "scatt_type")) then + call get_node_value(node_xsdata, "scatt_type", temp_str) + temp_str = trim(to_lower(temp_str)) + if (temp_str == 'legendre') then + this % scatt_type = ANGLE_LEGENDRE + else if (temp_str == 'histogram') then + this % scatt_type = ANGLE_HISTOGRAM + else if (temp_str == 'tabular') then + this % scatt_type = ANGLE_TABULAR + else + call fatal_error("Invalid Scatt Type Option!") + end if + else + this % scatt_type = ANGLE_LEGENDRE + end if + + if (check_for_node(node_xsdata, "fissionable")) then + call get_node_value(node_xsdata, "fissionable", temp_str) + temp_str = to_lower(temp_str) + if (trim(temp_str) == 'true' .or. trim(temp_str) == '1') then + this % fissionable = .true. + else + this % fissionable = .false. + end if + else + call fatal_error("Fissionable element must be set!") + end if + + end subroutine mgxs_init_file + + subroutine mgxsiso_init_file(this,node_xsdata,groups,get_kfiss,get_fiss,max_order) + class(MgxsIso), intent(inout) :: this ! Working Object + type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml + integer, intent(in) :: groups ! Number of Energy groups + logical, intent(in) :: get_kfiss ! Need Kappa-Fission? + logical, intent(in) :: get_fiss ! Need fiss data? + integer, intent(in) :: max_order ! Maximum requested order + + type(Node), pointer :: node_legendre_mu + character(MAX_LINE_LEN) :: temp_str + logical :: enable_leg_mu + real(8), allocatable :: temp_arr(:), temp_2d(:,:) + real(8), allocatable :: temp_mult(:,:) + real(8), allocatable :: scatt_coeffs(:,:,:) + real(8), allocatable :: input_scatt(:,:,:) + real(8), allocatable :: temp_scatt(:,:,:) + real(8) :: dmu, mu, norm + integer :: order, order_dim, gin, gout, l, arr_len + integer :: legendre_mu_points, imu + + ! Call generic data gathering routine (will populate the metadata) + call mgxs_init_file(this, node_xsdata) + + ! Load the more specific data + allocate(this % nu_fission(groups)) + allocate(this % chi(groups,groups)) + if (this % fissionable) then + if (check_for_node(node_xsdata,"chi")) then + ! Chi was provided, that means they are giving chi and nu-fission + ! vectors + ! Get chi + allocate(temp_arr(1 * groups)) + call get_node_array(node_xsdata,"chi",temp_arr) + do gin = 1, groups + do gout = 1, groups + this % chi(gout,gin) = temp_arr(gout) + end do + ! Normalize chi so its CDF goes to 1 + this % chi(:,gin) = this % chi(:,gin) / sum(this % chi(:,gin)) + end do + deallocate(temp_arr) + + ! Get nu_fission (as a vector) + if (check_for_node(node_xsdata,"nu_fission")) then + call get_node_array(node_xsdata,"nu_fission",this % nu_fission) + else + call fatal_error("If fissionable, must provide nu_fission!") + end if + + else + ! chi isnt provided but is within nu_fission, existing as a matrix + ! So, get nu_fission (as a matrix) + if (check_for_node(node_xsdata,"nu_fission")) then + allocate(temp_arr(groups*groups)) + call get_node_array(node_xsdata,"nu_fission",temp_arr) + allocate(temp_2d(groups,groups)) + temp_2d = reshape(temp_arr,(/groups,groups/)) + deallocate(temp_arr) + else + call fatal_error("If fissionable, must provide nu_fission!") + end if + + ! Set the vector nu-fission from the matrix nu-fission + do gin = 1, groups + this % nu_fission(gin) = sum(temp_2d(:,gin)) + end do + + ! Now pull out information needed for chi + this % chi = temp_2d + ! Normalize chi so its CDF goes to 1 + do gin = 1, groups + this % chi(:,gin) = this % chi(:,gin) / sum(this % chi(:,gin)) + end do + deallocate(temp_2d) + end if + ! If we have a need* for the fission and kappa-fission x/s, get them + ! (*Need is defined as will be using it to tally) + if (get_fiss) then + allocate(this % fission(groups)) + if (check_for_node(node_xsdata,"fission")) then + call get_node_array(node_xsdata,"fission",this % fission) + else + call fatal_error("Fission data missing, required due to fission& + & tallies in tallies.xml file!") + end if + end if + if (get_kfiss) then + allocate(this % k_fission(groups)) + if (check_for_node(node_xsdata,"kappa_fission")) then + call get_node_array(node_xsdata,"kappa_fission",this % k_fission) + else + call fatal_error("kappa_fission data missing, required due to & + &kappa-fission tallies in tallies.xml file!") + end if + end if + else + this % nu_fission = ZERO + this % chi = ZERO + end if + + allocate(this % absorption(groups)) + if (check_for_node(node_xsdata,"absorption")) then + call get_node_array(node_xsdata,"absorption",this % absorption) + else + call fatal_error("Must provide absorption!") + end if + + ! Get multiplication data if present + allocate(temp_mult(groups, groups)) + if (check_for_node(node_xsdata,"multiplicity")) then + arr_len = get_arraysize_double(node_xsdata,"multiplicity") + if (arr_len == groups * groups) then + allocate(temp_arr(arr_len)) + call get_node_array(node_xsdata,"multiplicity",temp_arr) + temp_mult = reshape(temp_arr, (/groups, groups/)) + deallocate(temp_arr) + else + call fatal_error("Multiplicity length not same as number of groups& + & squared!") + end if + else + temp_mult = ONE + end if + + ! Get scattering treatment information + ! Tabular_legendre tells us if we are to treat the provided + ! Legendre polynomials as tabular data (if enable is true) or leaving + ! them as Legendres (if enable is false, or the default) + + ! Set the default (leave as Legendre polynomials) + enable_leg_mu = .false. + if (check_for_node(node_xsdata,"tabular_legendre")) then + call get_node_ptr(node_xsdata,"tabular_legendre",node_legendre_mu) + if (check_for_node(node_legendre_mu, "enable")) then + call get_node_value(node_legendre_mu,"enable",temp_str) + temp_str = trim(to_lower(temp_str)) + if (temp_str == 'true' .or. temp_str == '1') then + enable_leg_mu = .true. + elseif (temp_str == 'false' .or. temp_str == '0') then + enable_leg_mu = .false. + else + call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) + end if + end if + ! Ok, so if we need to convert to a tabular form, get the user provided + ! number of points + if (enable_leg_mu) then + if (check_for_node(node_legendre_mu,"num_points")) then + call get_node_value(node_legendre_mu,"num_points", & + legendre_mu_points) + if (legendre_mu_points <= 0) & + call fatal_error("num_points element must be positive& + & and non-zero!") + else + ! Set the default number of points (0.0625 spacing) + legendre_mu_points = 33 + end if + end if + end if + + ! Get the library's value for the order + if (check_for_node(node_xsdata,"order")) then + call get_node_value(node_xsdata,"order",order) + else + call fatal_error("Order Must Be Provided!") + end if + + ! Before retrieving the data, store the dimensionality of the data in + ! order_dim. For Legendre data, we usually refer to it as Pn where + ! n is the order. However Pn has n+1 sets of points (since you need to + ! the count the P0 moment). Adjust for that. Histogram and Tabular + ! formats dont need this adjustment. + if (this % scatt_type == ANGLE_LEGENDRE) then + order_dim = order + 1 + else + order_dim = order + end if + + ! The input is gathered in the more user-friendly facing format of + ! Gout x Gin x Order. We will get it in that format in input_scatt, + ! but then need to convert it to a more useful ordering for processing + ! (Order x Gout x Gin). + allocate(input_scatt(groups, groups, order_dim)) + if (check_for_node(node_xsdata,"scatter")) then + allocate(temp_arr(groups * groups * order_dim)) + call get_node_array(node_xsdata,"scatter",temp_arr) + input_scatt = reshape(temp_arr,(/groups,groups,order_dim/)) + deallocate(temp_arr) + + ! Compare the number of orders given with the maximum order of the + ! problem. Strip off the supefluous orders if needed. + if (this % scatt_type == ANGLE_LEGENDRE) then + order = min(order_dim - 1, max_order) + order_dim = order + 1 + end if + allocate(temp_scatt(groups,groups,order_dim)) + temp_scatt(:,:,:) = input_scatt(:,:,1:order_dim) + + ! Take input format (groups, groups, order) and convert to + ! the more useful format needed for scattdata: (order, groups, groups) + ! However, if scatt_type was ANGLE_LEGENDRE (i.e., the data was + ! provided as Legendre coefficients), and the user requested that + ! these legendres be converted to tabular form (note this is also + ! the default behavior), convert that now. + if (this % scatt_type == ANGLE_LEGENDRE .and. enable_leg_mu) then + ! Convert input parameters to what we need for the rest. + this % scatt_type = ANGLE_TABULAR + order_dim = legendre_mu_points + order = order_dim + dmu = TWO / real(order - 1,8) + + allocate(scatt_coeffs(order_dim,groups,groups)) + do gin = 1, groups + do gout = 1, groups + norm = ZERO + do imu = 1, order_dim + if (imu == 1) then + mu = -ONE + else if (imu == order_dim) then + mu = ONE + else + mu = -ONE + real(imu - 1,8) * dmu + end if + scatt_coeffs(imu,gout,gin) = & + evaluate_legendre(temp_scatt(gout,gin,:),mu) + ! Ensure positivity of distribution + if (scatt_coeffs(imu,gout,gin) < ZERO) & + scatt_coeffs(imu,gout,gin) = ZERO + ! And accrue the integral + if (imu > 1) then + norm = norm + HALF * dmu * (scatt_coeffs(imu-1,gout,gin) + & + scatt_coeffs(imu,gout,gin)) + end if + end do + ! Now that we have the integral, lets ensure that the distribution + ! is normalized such that it preserves the original scattering xs + if (norm > ZERO) then + scatt_coeffs(:,gout,gin) = scatt_coeffs(:,gout,gin) * & + temp_scatt(gout,gin,1) / norm + end if + end do + end do + else + ! Sticking with current representation, carry forward but change + ! the array ordering + allocate(scatt_coeffs(order_dim,groups,groups)) + do gin = 1, groups + do gout = 1, groups + do l = 1, order_dim + scatt_coeffs(l,gout,gin) = temp_scatt(gout,gin,l) + end do + end do + end do + end if + deallocate(temp_scatt) + else + call fatal_error("Must provide scatter!") + end if + + ! Allocate and initialize our ScattData Object. + if (this % scatt_type == ANGLE_HISTOGRAM) then + allocate(ScattDataHistogram :: this % scatter) + else if (this % scatt_type == ANGLE_TABULAR) then + allocate(ScattDataTabular :: this % scatter) + else if (this % scatt_type == ANGLE_LEGENDRE) then + allocate(ScattDataLegendre :: this % scatter) + end if + + ! Initialize the ScattData Object + call this % scatter % init(temp_mult, scatt_coeffs) + + ! Get, or infer, total xs data. + allocate(this % total(groups)) + if (check_for_node(node_xsdata,"total")) then + call get_node_array(node_xsdata,"total",this % total) + else + this % total = this % absorption + this % scatter % scattxs + end if + + ! Deallocate temporaries for the next material + deallocate(input_scatt,scatt_coeffs,temp_mult) + + end subroutine mgxsiso_init_file + + subroutine mgxsang_init_file(this,node_xsdata,groups,get_kfiss,get_fiss,max_order) + class(MgxsAngle), intent(inout) :: this ! Working Object + type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml + integer, intent(in) :: groups ! Number of Energy groups + logical, intent(in) :: get_kfiss ! Need Kappa-Fission? + logical, intent(in) :: get_fiss ! Should we get fiss data? + integer, intent(in) :: max_order ! Maximum requested order + + type(Node), pointer :: node_legendre_mu + character(MAX_LINE_LEN) :: temp_str + logical :: enable_leg_mu + real(8), allocatable :: temp_arr(:), temp_4d(:,:,:,:) + real(8), allocatable :: temp_mult(:,:,:,:) + real(8), allocatable :: scatt_coeffs(:,:,:,:,:) + real(8), allocatable :: input_scatt(:,:,:,:,:) + real(8), allocatable :: temp_scatt(:,:,:,:,:) + real(8) :: dmu, mu, norm, dangle + integer :: order, order_dim, gin, gout, l, arr_len + integer :: legendre_mu_points, imu, ipol, iazi + + ! Call generic data gathering routine (will populate the metadata) + call mgxs_init_file(this, node_xsdata) + + if (check_for_node(node_xsdata, "num_polar")) then + call get_node_value(node_xsdata, "num_polar", this % n_pol) + else + call fatal_error("num_polar Must Be Provided!") + end if + + if (check_for_node(node_xsdata, "num_azimuthal")) then + call get_node_value(node_xsdata, "num_azimuthal", this % n_azi) + else + call fatal_error("num_azimuthal Must Be Provided!") + end if + + ! Load angle data, if present (else equally spaced) + allocate(this % polar(this % n_pol)) + allocate(this % azimuthal(this % n_azi)) + if (check_for_node(node_xsdata, "polar")) then + call fatal_error("User-Specified polar angle bins not yet supported!") + ! When this feature is supported, this line will be activated + call get_node_array(node_xsdata, "polar", this % polar) + else + dangle = PI / real(this % n_pol,8) + do ipol = 1, this % n_pol + this % polar(ipol) = (real(ipol,8) - HALF) * dangle + end do + end if + if (check_for_node(node_xsdata, "azimuthal")) then + call fatal_error("User-Specified azimuthal angle bins not yet supported!") + ! When this feature is supported, this line will be activated + call get_node_array(node_xsdata, "azimuthal", this % azimuthal) + else + dangle = TWO * PI / real(this % n_azi,8) + do iazi = 1, this % n_azi + this % azimuthal(iazi) = -PI + (real(iazi,8) - HALF) * dangle + end do + end if + + ! Load the more specific data + allocate(this % nu_fission(groups,this % n_azi,this % n_pol)) + allocate(this % chi(groups,groups,this % n_azi,this % n_pol)) + if (this % fissionable) then + if (check_for_node(node_xsdata,"chi")) then + ! Chi was provided, that means they are giving chi and nu-fission + ! vectors + ! Get chi + allocate(temp_arr(1 * groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata,"chi",temp_arr) + ! Initialize counter for temp_arr + l = 0 + gin = 1 + do ipol = 1, this % n_pol + do iazi = 1, this % n_azi + do gout = 1, groups + l = l + 1 + this % chi(gout,gin,iazi,ipol) = temp_arr(l) + end do + ! Normalize chi so its CDF goes to 1 + this % chi(:,gin,iazi,ipol) = this % chi(:,gin,iazi,ipol) / & + sum(this % chi(:,gin,iazi,ipol)) + end do + end do + + ! Now set all the other gin values + do ipol = 1, this % n_pol + do iazi = 1, this % n_azi + do gin = 2, groups + this % chi(:,gin,iazi,ipol) = this % chi(:,1,iazi,ipol) + end do + end do + end do + deallocate(temp_arr) + + ! Get nu_fission (as a vector) + if (check_for_node(node_xsdata,"nu_fission")) then + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata,"nu_fission",temp_arr) + this % nu_fission = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("If fissionable, must provide nu_fission!") + end if + + else + ! chi isnt provided but is within nu_fission, existing as a matrix + ! So, get nu_fission (as a matrix) + if (check_for_node(node_xsdata,"nu_fission")) then + allocate(temp_arr(groups * groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata,"nu_fission",temp_arr) + allocate(temp_4d(groups,groups,this % n_azi,this % n_pol)) + temp_4d = reshape(temp_arr,(/groups,groups,this % n_azi,this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("If fissionable, must provide nu_fission!") + end if + + ! Set the vector nu-fission from the matrix nu-fission + do ipol = 1, this % n_pol + do iazi = 1, this % n_azi + do gin = 1, groups + this % nu_fission(gin,iazi,ipol) = sum(temp_4d(:,gin,iazi,ipol)) + end do + end do + end do + + ! Now pull out information needed for chi + this % chi = temp_4d + ! Normalize chi so its CDF goes to 1 + do ipol = 1, this % n_pol + do iazi = 1, this % n_azi + do gin = 1, groups + this % chi(:,gin,iazi,ipol) = this % chi(:,gin,iazi,ipol) / & + sum(this % chi(:,gin,iazi,ipol)) + end do + end do + end do + deallocate(temp_4d) + end if + + ! If we have a need* for the fission and kappa-fission x/s, get them + ! (*Need is defined as will be using it to tally) + if (get_fiss) then + if (check_for_node(node_xsdata,"fission")) then + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata,"fission",temp_arr) + allocate(this % fission(groups,this % n_azi,this % n_pol)) + this % fission = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("Fission data missing, required due to fission& + & tallies in tallies.xml file!") + end if + end if + if (get_kfiss) then + if (check_for_node(node_xsdata,"kappa_fission")) then + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata,"kappa_fission",temp_arr) + allocate(this % k_fission(groups,this % n_azi,this % n_pol)) + this % k_fission = reshape(temp_arr,(/groups, this % n_azi,this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("kappa_fission data missing, required due to & + &kappa-fission tallies in tallies.xml file!") + end if + end if + else + this % nu_fission = ZERO + this % chi = ZERO + end if + + if (check_for_node(node_xsdata,"absorption")) then + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata,"absorption",temp_arr) + allocate(this % absorption(groups,this % n_azi,this % n_pol)) + this % absorption = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("Must provide absorption!") + end if + + ! Get multiplication data if present + allocate(temp_mult(groups,groups,this % n_azi,this % n_pol)) + if (check_for_node(node_xsdata,"multiplicity")) then + arr_len = get_arraysize_double(node_xsdata,"multiplicity") + if (arr_len == groups * groups * this % n_azi * this % n_pol) then + allocate(temp_arr(arr_len)) + call get_node_array(node_xsdata,"multiplicity",temp_arr) + temp_mult = reshape(temp_arr,(/groups,groups,this % n_azi,this % n_pol/)) + deallocate(temp_arr) + else + call fatal_error("Multiplicity length not same as number of groups& + & squared!") + end if + else + temp_mult = ONE + end if + + ! Get scattering treatment information + ! Tabular_legendre tells us if we are to treat the provided + ! Legendre polynomials as tabular data (if enable is true) or leaving + ! them as Legendres (if enable is false, or the default) + + ! Set the default (leave as Legendre polynomials) + enable_leg_mu = .false. + if (check_for_node(node_xsdata,"tabular_legendre")) then + call get_node_ptr(node_xsdata,"tabular_legendre",node_legendre_mu) + if (check_for_node(node_legendre_mu, "enable")) then + call get_node_value(node_legendre_mu,"enable",temp_str) + temp_str = trim(to_lower(temp_str)) + if (temp_str == 'true' .or. temp_str == '1') then + enable_leg_mu = .true. + elseif (temp_str == 'false' .or. temp_str == '0') then + enable_leg_mu = .false. + else + call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) + end if + end if + ! Ok, so if we need to convert to a tabular form, get the user provided + ! number of points + if (enable_leg_mu) then + if (check_for_node(node_legendre_mu,"num_points")) then + call get_node_value(node_legendre_mu,"num_points", & + legendre_mu_points) + if (legendre_mu_points <= 0) & + call fatal_error("num_points element must be positive& + & and non-zero!") + else + ! Set the default number of points (0.0625 spacing) + legendre_mu_points = 33 + end if + end if + end if + + ! Get the library's value for the order + if (check_for_node(node_xsdata,"order")) then + call get_node_value(node_xsdata,"order",order) + else + call fatal_error("Order Must Be Provided!") + end if + + ! Before retrieving the data, store the dimensionality of the data in + ! order_dim. For Legendre data, we usually refer to it as Pn where + ! n is the order. However Pn has n+1 sets of points (since you need to + ! the count the P0 moment). Adjust for that. Histogram and Tabular + ! formats dont need this adjustment. + if (this % scatt_type == ANGLE_LEGENDRE) then + order_dim = order + 1 + else + order_dim = order + end if + + ! The input is gathered in the more user-friendly facing format of + ! Gout x Gin x Order x Azi x Pol. We will get it in that format in + ! input_scatt, but then need to convert it to a more useful ordering + ! for processing (Order x Gout x Gin x Azi x Pol). + allocate(input_scatt(groups,groups,order_dim,this % n_azi,this % n_pol)) + if (check_for_node(node_xsdata,"scatter")) then + allocate(temp_arr(groups * groups * order_dim * this % n_azi * & + this % n_pol)) + call get_node_array(node_xsdata,"scatter",temp_arr) + input_scatt = reshape(temp_arr,(/groups,groups,order_dim,this % n_azi, & + this % n_pol/)) + deallocate(temp_arr) + + ! Compare the number of orders given with the maximum order of the + ! problem. Strip off the supefluous orders if needed. + if (this % scatt_type == ANGLE_LEGENDRE) then + order = min(order_dim - 1, max_order) + order_dim = order + 1 + end if + + allocate(temp_scatt(groups,groups,order_dim,this % n_azi,this % n_pol)) + temp_scatt(:,:,:,:,:) = input_scatt(:,:,1:order_dim,:,:) + + ! Take input format (groups, groups, order) and convert to + ! the more useful format needed for scattdata: (order, groups, groups) + ! However, if scatt_type was ANGLE_LEGENDRE (i.e., the data was + ! provided as Legendre coefficients), and the user requested that + ! these legendres be converted to tabular form (note this is also + ! the default behavior), convert that now. + if (this % scatt_type == ANGLE_LEGENDRE .and. enable_leg_mu) then + + ! Convert input parameters to what we need for the rest. + this % scatt_type = ANGLE_TABULAR + order_dim = legendre_mu_points + order = order_dim + dmu = TWO / real(order - 1,8) + + allocate(scatt_coeffs(order_dim,groups,groups,this % n_azi,this % n_pol)) + do ipol = 1, this % n_pol + do iazi = 1, this % n_azi + do gin = 1, groups + do gout = 1, groups + norm = ZERO + do imu = 1, order_dim + if (imu == 1) then + mu = -ONE + else if (imu == order_dim) then + mu = ONE + else + mu = -ONE + real(imu - 1,8) * dmu + end if + scatt_coeffs(imu,gout,gin,iazi,ipol) = & + evaluate_legendre(temp_scatt(gout,gin,:,iazi,ipol),mu) + ! Ensure positivity of distribution + if (scatt_coeffs(imu,gout,gin,iazi,ipol) < ZERO) & + scatt_coeffs(imu,gout,gin,iazi,ipol) = ZERO + ! And accrue the integral + if (imu > 1) then + norm = norm + HALF * dmu * & + (scatt_coeffs(imu-1,gout,gin,iazi,ipol) + & + scatt_coeffs(imu,gout,gin,iazi,ipol)) + end if + end do + ! Now that we have the integral, lets ensure that the distribution + ! is normalized such that it preserves the original scattering xs + if (norm > ZERO) then + scatt_coeffs(:,gout,gin,iazi,ipol) = & + scatt_coeffs(:,gout,gin,iazi,ipol) * & + temp_scatt(gout,gin,1,iazi,ipol) / norm + end if + end do + end do + end do + end do + else + ! Sticking with current representation, carry forward but change + ! the array ordering + allocate(scatt_coeffs(order_dim,groups,groups,this % n_azi,this % n_pol)) + do ipol = 1, this % n_pol + do iazi = 1, this % n_azi + do gin = 1, groups + do gout = 1, groups + do l = 1, order_dim + scatt_coeffs(l,gout,gin,iazi,ipol) = & + temp_scatt(gout,gin,l,iazi,ipol) + end do + end do + end do + end do + end do + end if + deallocate(temp_scatt) + else + call fatal_error("Must provide scatter!") + end if + + allocate(this % scatter(this % n_azi, this % n_pol)) + do ipol = 1, this % n_pol + do iazi = 1, this % n_azi + ! Allocate and initialize our ScattData Object. + if (this % scatt_type == ANGLE_HISTOGRAM) then + allocate(ScattDataHistogram :: this % scatter(iazi,ipol) % obj) + else if (this % scatt_type == ANGLE_TABULAR) then + allocate(ScattDataTabular :: this % scatter(iazi,ipol) % obj) + else if (this % scatt_type == ANGLE_LEGENDRE) then + allocate(ScattDataLegendre :: this % scatter(iazi,ipol) % obj) + end if + + ! Initialize the ScattData Object + call this % scatter(iazi,ipol) % obj % init(& + temp_mult(:,:,iazi,ipol), scatt_coeffs(:,:,:,iazi,ipol)) + end do + end do + ! Deallocate temporaries for the next material + deallocate(input_scatt,scatt_coeffs,temp_mult) + + allocate(this % total(groups,this % n_azi,this % n_pol)) + if (check_for_node(node_xsdata,"total")) then + allocate(temp_arr(groups * this % n_azi * this % n_pol)) + call get_node_array(node_xsdata,"total",temp_arr) + this % total = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) + deallocate(temp_arr) + else + do ipol = 1, this % n_pol + do iazi = 1, this % n_azi + this % total(:,iazi,ipol) = this % absorption(:,iazi,ipol) + & + this % scatter(iazi,ipol) % obj % scattxs(:) + end do + end do + end if + + end subroutine mgxsang_init_file + +!=============================================================================== +! MGXS*_PRINT displays information about a continuous-energy neutron +! cross_section table and its reactions and secondary angle/energy distributions +!=============================================================================== + + subroutine mgxs_print(this, unit_) + class(Mgxs), intent(in) :: this + integer, intent(in) :: unit_ + + character(MAX_LINE_LEN) :: temp_str + + ! Basic nuclide information + write(unit_,*) 'MGXS Entry ' // trim(this % name) + if (this % zaid > 0) then + ! Dont print if data was macroscopic and thus zaid & AWR would be nonsense + write(unit_,*) ' zaid = ' // trim(to_str(this % zaid)) + write(unit_,*) ' awr = ' // trim(to_str(this % awr)) + end if + write(unit_,*) ' kT = ' // trim(to_str(this % kT)) + if (this % scatt_type == ANGLE_LEGENDRE) then + temp_str = "Legendre" + write(unit_,*) ' Scattering Type = ' // trim(temp_str) + select type(this) + type is (MgxsIso) + temp_str = to_str(size(this % scatter % dist(1) % data,dim=1) - 1) + end select + write(unit_,*) ' Scattering Order = ' // trim(temp_str) + else if (this % scatt_type == ANGLE_HISTOGRAM) then + temp_str = "Histogram" + write(unit_,*) ' Scattering Type = ' // trim(temp_str) + select type(this) + type is (MgxsIso) + temp_str = to_str(size(this % scatter % dist(1) % data,dim=1)) + end select + write(unit_,*) ' Num. Distribution Bins = ' // trim(temp_str) + else if (this % scatt_type == ANGLE_TABULAR) then + temp_str = "Tabular" + write(unit_,*) ' Scattering Type = ' // trim(temp_str) + select type(this) + type is (MgxsIso) + temp_str = to_str(size(this % scatter % dist(1) % data,dim=1)) + end select + write(unit_,*) ' Num. Distribution Points = ' // trim(temp_str) + end if + write(unit_,*) ' Fissionable = ', this % fissionable + + end subroutine mgxs_print + + subroutine mgxsiso_print(this, unit) + + class(MgxsIso), intent(in) :: this + integer, optional, intent(in) :: unit + + integer :: unit_ ! unit to write to + integer :: size_total, size_scattmat, size_mgxs + integer :: gin + + ! set default unit for writing information + if (present(unit)) then + unit_ = unit + else + unit_ = OUTPUT_UNIT + end if + + ! Write Basic Nuclide Information + call mgxs_print(this, unit_) + + ! Determine size of mgxs and scattering matrices + size_scattmat = 0 + do gin = 1, size(this % scatter % energy) + size_scattmat = size_scattmat + & + 2 * size(this % scatter % energy(gin) % data) + & + size(this % scatter % dist(gin) % data) + end do + size_scattmat = size_scattmat + size(this % scatter % scattxs) + size_scattmat = size_scattmat * 8 + + size_mgxs = size(this % total) + size(this % absorption) + & + size(this % nu_fission) + size(this % k_fission) + & + size(this % fission) + size(this % chi) + size_mgxs = size_mgxs * 8 + + ! Calculate total memory + size_total = size_scattmat + size_mgxs + + ! Write memory used + write(unit_,*) ' Memory Requirements' + write(unit_,*) ' Cross sections = ' // trim(to_str(size_mgxs)) // ' bytes' + write(unit_,*) ' Scattering Matrices = ' // & + trim(to_str(size_scattmat)) // ' bytes' + write(unit_,*) ' Total = ' // trim(to_str(size_total)) // ' bytes' + + ! Blank line at end of nuclide + write(unit_,*) + + end subroutine mgxsiso_print + + subroutine mgxsang_print(this, unit) + + class(MgxsAngle), intent(in) :: this + integer, optional, intent(in) :: unit + + integer :: unit_ ! unit to write to + integer :: size_total, size_scattmat, size_mgxs + integer :: ipol, iazi, gin + + ! set default unit for writing information + if (present(unit)) then + unit_ = unit + else + unit_ = OUTPUT_UNIT + end if + + ! Write Basic Nuclide Information + call mgxs_print(this, unit_) + + write(unit_,*) ' # of Polar Angles = ' // trim(to_str(this % n_pol)) + write(unit_,*) ' # of Azimuthal Angles = ' // trim(to_str(this % n_azi)) + + ! Determine size of mgxs and scattering matrices + size_scattmat = 0 + do ipol = 1, this % n_pol + do iazi = 1, this % n_azi + do gin = 1, size(this % scatter(iazi,ipol) % obj % energy) + size_scattmat = size_scattmat + & + 2 * size(this % scatter(iazi,ipol) % obj % energy(gin) % data) + & + size(this % scatter(iazi,ipol) % obj % dist(gin) % data) + end do + size_scattmat = size_scattmat + & + size(this % scatter(iazi,ipol) % obj % scattxs) + end do + end do + size_scattmat = size_scattmat * 8 + + size_mgxs = size(this % total) + size(this % absorption) + & + size(this % nu_fission) + size(this % k_fission) + & + size(this % fission) + size(this % chi) + size_mgxs = size_mgxs * 8 + + ! Calculate total memory + size_total = size_scattmat + size_mgxs + + ! Write memory used + write(unit_,*) ' Memory Requirements' + write(unit_,*) ' Cross sections = ' // trim(to_str(size_mgxs)) // ' bytes' + write(unit_,*) ' Scattering Matrices = ' // & + trim(to_str(size_scattmat)) // ' bytes' + write(unit_,*) ' Total = ' // trim(to_str(size_total)) // ' bytes' + + ! Blank line at end of nuclide + write(unit_,*) + end subroutine mgxsang_print + +!=============================================================================== +! MGXS*_GET_XS returns the requested data cross section data +!=============================================================================== + + function mgxsiso_get_xs(this, xstype, gin, gout, uvw, mu) result(xs) + class(MgxsIso), intent(in) :: this ! The MacroXS to initialize + character(*) , intent(in) :: xstype ! Type of xs requested + integer, intent(in) :: gin ! Incoming Energy group + integer, optional, intent(in) :: gout ! Outgoing Energy group + real(8), optional, intent(in) :: uvw(3) ! Requested Angle + real(8), optional, intent(in) :: mu ! Change in angle + real(8) :: xs ! Requested x/s + + select case(xstype) + case('total') + xs = this % total(gin) + case('absorption') + xs = this % absorption(gin) + case('fission') + if (allocated(this % fission)) then + xs = this % fission(gin) + else + xs = ZERO + end if + case('kappa_fission') + if (allocated(this % k_fission)) then + xs = this % k_fission(gin) + else + xs = ZERO + end if + case('nu_fission') + xs = this % nu_fission(gin) + case('chi') + if (present(gout)) then + xs = this % chi(gout,gin) + else + ! Not sure youd want a 1 or a 0, but here you go! + xs = sum(this % chi(:,gin)) + end if + case('scatter') + if (present(gout)) then + xs = this % scatter % scattxs(gin) * & + this % scatter % energy(gin) % data(gout) + else + xs = this % scatter % scattxs(gin) + end if + case('mult') + if (present(gout)) then + if (gout < this % scatter % gmin(gin) .or. & + gout > this % scatter % gmax(gin)) then + xs = ZERO + else + xs = this % scatter % mult(gin) % data(gout) + end if + else + xs = dot_product(this % scatter % mult(gin) % data, & + this % scatter % scattxs(gin) * & + this % scatter % energy(gin) % data) + xs = xs / this % scatter % scattxs(gin) + end if + case('f_mu', 'f_mu/mult') + if (present(gout) .and. present(mu)) then + if (gout < this % scatter % gmin(gin) .or. & + gout > this % scatter % gmax(gin)) then + xs = ZERO + else + xs = this % scatter % calc_f(gin, gout, mu) + if (xstype == 'f_mu/mult') then + xs = xs / this % scatter % mult(gin) % data(gout) + end if + end if + else + xs = ZERO + ! TODO (Not likely needed) + ! (asking for f_mu without asking for a group or mu would mean the + ! user of this code wants the complete 1-outgoing group distribution + ! which Im not sure what they would do with that. + end if + case default + xs = ZERO + end select + + end function mgxsiso_get_xs + + function mgxsang_get_xs(this, xstype, gin, gout, uvw, mu) result(xs) + class(MgxsAngle), intent(in) :: this ! The MacroXS to initialize + character(*) , intent(in) :: xstype ! Type of xs requested + integer, intent(in) :: gin ! Incoming Energy group + integer, optional, intent(in) :: gout ! Outgoing Energy group + real(8), optional, intent(in) :: uvw(3) ! Requested Angle + real(8), optional, intent(in) :: mu ! Change in angle + real(8) :: xs ! Requested x/s + + integer :: iazi, ipol + + if (present(uvw)) then + call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) + select case(xstype) + case('total') + xs = this % total(gin,iazi,ipol) + case('absorption') + xs = this % absorption(gin,iazi,ipol) + case('fission') + if (allocated(this % fission)) then + xs = this % fission(gin,iazi,ipol) + else + xs = ZERO + end if + case('kappa_fission') + if (allocated(this % k_fission)) then + xs = this % k_fission(gin,iazi,ipol) + else + xs = ZERO + end if + case('nu_fission') + xs = this % nu_fission(gin,iazi,ipol) + case('chi') + if (present(gout)) then + xs = this % chi(gout,gin,iazi,ipol) + else + ! Not sure youd want a 1 or a 0, but here you go! + xs = sum(this % chi(:,gin,iazi,ipol)) + end if + case('scatter') + if (present(gout)) then + xs = this % scatter(iazi,ipol) % obj % scattxs(gin) * & + this % scatter(iazi,ipol) % obj % energy(gin) % data(gout) + else + xs = this % scatter(iazi,ipol) % obj % scattxs(gin) + end if + case('mult') + if (present(gout)) then + if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & + gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then + xs = ZERO + else + xs = this % scatter(iazi,ipol) % obj % mult(gin) % data(gout) + end if + else + xs = dot_product(this % scatter(iazi,ipol) % obj % mult(gin) % data, & + this % scatter(iazi,ipol) % obj % scattxs(gin) * & + this % scatter(iazi,ipol) % obj % energy(gin) % data) + xs = xs / this % scatter(iazi,ipol) % obj % scattxs(gin) + end if + case('f_mu', 'f_mu/mult') + if (present(gout) .and. present(mu)) then + if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & + gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then + xs = ZERO + else + xs = this % scatter(iazi,ipol) % obj % calc_f(gin, gout, mu) + if (xstype == 'f_mu/mult') then + xs = xs / & + this % scatter(iazi,ipol) % obj % mult(gin) % data(gout) + end if + end if + else + xs = ZERO + ! TODO (Not likely needed) + ! (asking for f_mu without asking for a group or mu would mean the + ! user of this code wants the complete 1-outgoing group distribution + ! which Im not sure what they would do with that. + end if + case default + xs = ZERO + end select + else + xs = ZERO + end if + + end function mgxsang_get_xs + +!=============================================================================== +! MACROXS*_COMBINE Builds a macroscopic Mgxs object from microscopic Mgxs +! objects +!=============================================================================== + + subroutine mgxsiso_combine(this, mat, nuclides, groups, get_kfiss, get_fiss, & + max_order, scatt_type) + class(MgxsIso), intent(inout) :: this ! The MacroXS to initialize + type(Material), pointer, intent(in) :: mat ! base material + type(MgxsContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from + integer, intent(in) :: groups ! Number of E groups + logical, intent(in) :: get_kfiss ! Should we get kfiss data? + logical, intent(in) :: get_fiss ! Should we get fiss data? + integer, intent(in) :: max_order ! Maximum requested order + integer, intent(in) :: scatt_type ! How is data presented + + integer :: i ! loop index over nuclides + integer :: gin, gout ! group indices + real(8) :: atom_density ! atom density of a nuclide + real(8) :: norm + integer :: mat_max_order, order, order_dim, nuc_order_dim + real(8), allocatable :: temp_mult(:,:) + real(8), allocatable :: scatt_coeffs(:,:,:) + + ! Determine the scattering type of our data and ensure all scattering orders + ! are the same. + select type(nuc => nuclides(mat % nuclide(1)) % obj) + type is (MgxsIso) + order = size(nuc % scatter % dist(1) % data, dim=1) + end select + ! If we have tabular only data, then make sure all datasets have same size + if (scatt_type == ANGLE_HISTOGRAM) then + ! Check all scattering data to ensure it is the same size + ! order = size(nuclides(mat % nuclide(1)) % obj % scatter % data,dim=1) + do i = 2, mat % n_nuclides + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (MgxsIso) + if (order /= size(nuc % scatter % dist(1) % data,dim=1)) & + call fatal_error("All Histogram Scattering Entries Must Be& + & Same Length!") + end select + end do + ! Ok, got our order, store the dimensionality + order_dim = order + + ! Set our Scatter Object Type + allocate(ScattDataHistogram :: this % scatter) + + else if (scatt_type == ANGLE_TABULAR) then + ! Check all scattering data to ensure it is the same size + do i = 2, mat % n_nuclides + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (MgxsIso) + if (order /= size(nuc % scatter % dist(1) % data,dim=1)) & + call fatal_error("All Tabular Scattering Entries Must Be& + & Same Length!") + end select + end do + ! Ok, got our order, store the dimensionality + order_dim = order + + ! Set our Scatter Object Type + allocate(ScattDataTabular :: this % scatter) + + else if (scatt_type == ANGLE_LEGENDRE) then + ! Need to determine the maximum scattering order of all data in this material + mat_max_order = 0 + do i = 1, mat % n_nuclides + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (MgxsIso) + if (size(nuc % scatter % dist(1) % data,dim=1) > mat_max_order) & + mat_max_order = size(nuc % scatter % dist(1) % data,dim=1) + end select + end do + + ! Now need to compare this material maximum scattering order with + ! the problem wide max scatt order and use whichever is lower + order = min(mat_max_order, max_order) + ! Ok, got our order, store the dimensionality + order_dim = order + 1 + + ! Set our Scatter Object Type + allocate(ScattDataLegendre :: this % scatter) + end if + + ! Allocate and initialize data needed for macro_xs(i_mat) object + allocate(this % total(groups)) + this % total = ZERO + allocate(this % absorption(groups)) + this % absorption = ZERO + if (get_fiss) then + allocate(this % fission(groups)) + this % fission = ZERO + end if + if (get_kfiss) then + allocate(this % k_fission(groups)) + this % k_fission = ZERO + end if + allocate(this % nu_fission(groups)) + this % nu_fission = ZERO + allocate(this % chi(groups,groups)) + this % chi = ZERO + allocate(temp_mult(groups,groups)) + temp_mult = ZERO + allocate(scatt_coeffs(order_dim,groups,groups)) + scatt_coeffs = ZERO + + ! Add contribution from each nuclide in material + do i = 1, mat % n_nuclides + ! Copy atom density of nuclide in material + atom_density = mat % atom_density(i) + + ! Perform our operations which depend upon the type + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (MgxsIso) + ! Add contributions to total, absorption, and fission data (if necessary) + this % total = this % total + atom_density * nuc % total + this % absorption = this % absorption + & + atom_density * nuc % absorption + if (nuc % fissionable) then + this % chi = this % chi + atom_density * nuc % chi + this % nu_fission = this % nu_fission + atom_density * & + nuc % nu_fission + if (get_fiss) then + this % fission = this % fission + atom_density * nuc % fission + end if + if (get_kfiss) then + this % k_fission = this % k_fission + atom_density * nuc % k_fission + end if + end if + + ! Get the multiplication matrix + do gin = 1, groups + do gout = nuc % scatter % gmin(gin), nuc % scatter % gmax(gin) + temp_mult(gout,gin) = temp_mult(gout,gin) + atom_density * & + nuc % scatter % mult(gin) % data(gout) + end do + end do + + ! Get the complete scattering matrix + nuc_order_dim = size(nuc % scatter % dist(1) % data,dim=1) + scatt_coeffs(1:min(nuc_order_dim, order_dim),:,:) = & + scatt_coeffs(1:min(nuc_order_dim, order_dim),:,:) + & + atom_density * & + nuc % scatter % get_matrix(min(nuc_order_dim,order_dim)) + + type is (MgxsAngle) + call fatal_error("Invalid Passing of MgxsAngle to MacroXSIso Object") + end select + end do + + ! Initialize the ScattData Object + call this % scatter % init(temp_mult,scatt_coeffs) + + ! Now normalize chi + if (mat % fissionable) then + do gin = 1, groups + norm = sum(this % chi(:,gin)) + if (norm > ZERO) then + this % chi(:,gin) = this % chi(:,gin) / norm + end if + end do + end if + + ! Deallocate temporaries + deallocate(scatt_coeffs, temp_mult) + + end subroutine mgxsiso_combine + + subroutine mgxsang_combine(this, mat, nuclides, groups, get_kfiss, get_fiss, & + max_order, scatt_type) + class(MgxsAngle), intent(inout) :: this ! The MacroXS to initialize + type(Material), pointer, intent(in) :: mat ! base material + type(MgxsContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from + integer, intent(in) :: groups ! Number of E groups + logical, intent(in) :: get_kfiss ! Should we get kfiss data? + logical, intent(in) :: get_fiss ! Should we get fiss data? + integer, intent(in) :: max_order ! Maximum requested order + integer, intent(in) :: scatt_type ! Legendre or Tabular Scatt? + + integer :: i ! loop index over nuclides + integer :: gin, gout ! group indices + real(8) :: atom_density ! atom density of a nuclide + integer :: ipol, iazi, n_pol, n_azi + real(8) :: norm + integer :: mat_max_order, order, order_dim, nuc_order_dim + real(8), allocatable :: temp_mult(:,:,:,:) + real(8), allocatable :: scatt_coeffs(:,:,:,:,:) + + ! Get the number of each polar and azi angles and make sure all the + ! NuclideAngle types have the same number of these angles + n_pol = -1 + n_azi = -1 + do i = 1, mat % n_nuclides + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (MgxsAngle) + if (n_pol == -1) then + n_pol = nuc % n_pol + n_azi = nuc % n_azi + allocate(this % polar(n_pol)) + this % polar = nuc % polar + allocate(this % azimuthal(n_azi)) + this % azimuthal = nuc % azimuthal + else + if ((n_pol /= nuc % n_pol) .or. (n_azi /= nuc % n_azi)) then + call fatal_error("All Angular Data Must Be Same Length!") + end if + end if + end select + end do + + ! Determine the scattering type of our data and ensure all scattering orders + ! are the same. + select type(nuc => nuclides(mat % nuclide(1)) % obj) + type is (MgxsAngle) + order = size(nuc % scatter(1,1) % obj % dist(1) % data, dim=1) + end select + ! If we have tabular only data, then make sure all datasets have same size + if (scatt_type == ANGLE_HISTOGRAM) then + ! Check all scattering data to ensure it is the same size + ! order = size(nuclides(mat % nuclide(1)) % obj % scatter % data,dim=1) + do i = 2, mat % n_nuclides + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (MgxsAngle) + if (order /= size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1)) & + call fatal_error("All Histogram Scattering Entries Must Be& + & Same Length!") + end select + end do + ! Ok, got our order, store the dimensionality + order_dim = order + + ! Set our Scatter Object Type + allocate(this % scatter(n_azi, n_pol)) + do ipol = 1, n_pol + do iazi = 1, n_azi + allocate(ScattDataHistogram :: this % scatter(iazi, ipol) % obj) + end do + end do + + else if (scatt_type == ANGLE_TABULAR) then + ! Check all scattering data to ensure it is the same size + do i = 2, mat % n_nuclides + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (MgxsAngle) + if (order /= size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1)) & + call fatal_error("All Tabular Scattering Entries Must Be& + & Same Length!") + end select + end do + ! Ok, got our order, store the dimensionality + order_dim = order + + ! Set our Scatter Object Type + allocate(this % scatter(n_azi, n_pol)) + do ipol = 1, n_pol + do iazi = 1, n_azi + allocate(ScattDataTabular :: this % scatter(iazi, ipol) % obj) + end do + end do + + else if (scatt_type == ANGLE_LEGENDRE) then + ! Need to determine the maximum scattering order of all data in this material + mat_max_order = 0 + do i = 1, mat % n_nuclides + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (MgxsAngle) + if (size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1) > mat_max_order) & + mat_max_order = size(nuc % scatter(1,1) % obj% dist(1) % data,dim=1) + end select + end do + + ! Now need to compare this material maximum scattering order with + ! the problem wide max scatt order and use whichever is lower + order = min(mat_max_order, max_order) + ! Ok, got our order, store the dimensionality + order_dim = order + 1 + + ! Set our Scatter Object Type + allocate(this % scatter(n_azi, n_pol)) + do ipol = 1, n_pol + do iazi = 1, n_azi + allocate(ScattDataLegendre :: this % scatter(iazi, ipol) % obj) + end do + end do + end if + + ! Allocate and initialize data within macro_xs(i_mat) object + allocate(this % total(groups,n_azi,n_pol)) + this % total = ZERO + allocate(this % absorption(groups,n_azi,n_pol)) + this % absorption = ZERO + if (get_fiss) then + allocate(this % fission(groups,n_azi,n_pol)) + this % fission = ZERO + end if + if (get_kfiss) then + allocate(this % k_fission(groups,n_azi,n_pol)) + this % k_fission = ZERO + end if + allocate(this % nu_fission(groups,n_azi,n_pol)) + this % nu_fission = ZERO + allocate(this % chi(groups,groups,n_azi,n_pol)) + this % chi = ZERO + allocate(temp_mult(groups,groups,n_azi,n_pol)) + temp_mult = ZERO + allocate(scatt_coeffs(order_dim,groups,groups,n_azi,n_pol)) + scatt_coeffs = ZERO + + ! Add contribution from each nuclide in material + do i = 1, mat % n_nuclides + ! Copy atom density of nuclide in material + atom_density = mat % atom_density(i) + + ! Perform our operations which depend upon the type + select type(nuc => nuclides(mat % nuclide(i)) % obj) + type is (MgxsIso) + call fatal_error("Invalid Passing of MgxsIso to MacroXSAngle Object") + type is (MgxsAngle) + ! Add contributions to total, absorption, and fission data (if necessary) + this % total = this % total + atom_density * nuc % total + this % absorption = this % absorption + & + atom_density * nuc % absorption + if (nuc % fissionable) then + this % chi = this % chi + atom_density * nuc % chi + this % nu_fission = this % nu_fission + atom_density * & + nuc % nu_fission + if (get_fiss) then + this % fission = this % fission + atom_density * nuc % fission + end if + if (get_kfiss) then + this % k_fission = this % k_fission + atom_density * nuc % k_fission + end if + end if + + ! Get the multiplication matrix + do ipol = 1, n_pol + do iazi = 1, n_azi + do gin = 1, groups + do gout = nuc % scatter(iazi,ipol) % obj % gmin(gin), & + nuc % scatter(iazi,ipol) % obj % gmax(gin) + temp_mult(gout,gin,iazi,ipol) = temp_mult(gout,gin,iazi,ipol) + & + atom_density * & + nuc % scatter(iazi,ipol) % obj % mult(gin) % data(gout) + end do + end do + end do + end do + + ! Get the complete scattering matrix + nuc_order_dim = size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1) + do ipol = 1, n_pol + do iazi = 1, n_azi + scatt_coeffs(1:min(nuc_order_dim,order_dim),:,:,iazi,ipol) = & + scatt_coeffs(1:min(nuc_order_dim, order_dim),:,:,iazi,ipol) + & + atom_density * & + nuc % scatter(iazi,ipol) % obj % get_matrix(& + min(nuc_order_dim,order_dim)) + end do + end do + end select + end do + + ! Initialize the ScattData Object + do ipol = 1, n_pol + do iazi = 1, n_azi + call this % scatter(iazi,ipol) % obj % init( & + temp_mult(:,:,iazi,ipol), scatt_coeffs(:,:,:,iazi,ipol)) + end do + end do + + ! Now normalize chi + if (mat % fissionable) then + do ipol = 1, n_pol + do iazi = 1, n_azi + do gin = 1, groups + norm = sum(this % chi(:,gin,iazi,ipol)) + if (norm > ZERO) then + this % chi(:,gin,iazi,ipol) = this % chi(:,gin,iazi,ipol) / norm + end if + end do + end do + end do + end if + + ! Deallocate temporaries for the next material + deallocate(scatt_coeffs, temp_mult) + + end subroutine mgxsang_combine + +!=============================================================================== +! MGXS*_SAMPLE_FISSION_ENERGY samples the outgoing energy from a fission event +!=============================================================================== + + function mgxsiso_sample_fission_energy(this, gin, uvw) result(gout) + class(MgxsIso), intent(in) :: this ! Data to work with + integer, intent(in) :: gin ! Incoming energy group + real(8), intent(in) :: uvw(3) ! Particle Direction + integer :: gout ! Sampled outgoing group + real(8) :: xi ! Our random number + real(8) :: prob ! Running probability + + xi = prn() + gout = 1 + prob = this % chi(gout,gin) + + do while (prob < xi) + gout = gout + 1 + prob = prob + this % chi(gout,gin) + end do + + end function mgxsiso_sample_fission_energy + + function mgxsang_sample_fission_energy(this, gin, uvw) result(gout) + class(MgxsAngle), intent(in) :: this ! Data to work with + integer, intent(in) :: gin ! Incoming energy group + real(8), intent(in) :: uvw(3) ! Particle Direction + integer :: gout ! Sampled outgoing group + real(8) :: xi ! Our random number + real(8) :: prob ! Running probability + integer :: iazi, ipol + + call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) + + xi = prn() + gout = 1 + prob = this % chi(gout,gin,iazi,ipol) + + do while (prob < xi) + gout = gout + 1 + prob = prob + this % chi(gout,gin,iazi,ipol) + end do + + end function mgxsang_sample_fission_energy + +!=============================================================================== +! MGXS*_SAMPLE_SCATTER Selects outgoing energy and angle after a scatter event +!=============================================================================== + + subroutine mgxsiso_sample_scatter(this, uvw, gin, gout, mu, wgt) + class(MgxsIso), intent(in) :: this + real(8), intent(in) :: uvw(3) ! Incoming neutron direction + integer, intent(in) :: gin ! Incoming neutron group + integer, intent(out) :: gout ! Sampled outgoin group + real(8), intent(out) :: mu ! Sampled change in angle + real(8), intent(inout) :: wgt ! Particle weight + + call this % scatter % sample(gin, gout, mu, wgt) + + end subroutine mgxsiso_sample_scatter + + subroutine mgxsang_sample_scatter(this, uvw, gin, gout, mu, wgt) + class(MgxsAngle), intent(in) :: this + real(8), intent(in) :: uvw(3) ! Incoming neutron direction + integer, intent(in) :: gin ! Incoming neutron group + integer, intent(out) :: gout ! Sampled outgoin group + real(8), intent(out) :: mu ! Sampled change in angle + real(8), intent(inout) :: wgt ! Particle weight + + integer :: iazi, ipol ! Angular indices + + call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) + call this % scatter(iazi,ipol) % obj % sample(gin,gout,mu,wgt) + + end subroutine mgxsang_sample_scatter + +!=============================================================================== +! MGXS*_CALCULATE_XS determines the multi-group cross sections +! for the material the particle is currently traveling through. +!=============================================================================== + + subroutine mgxsiso_calculate_xs(this, gin, uvw, xs) + class(MgxsIso), intent(in) :: this + integer, intent(in) :: gin ! Incoming neutron group + real(8), intent(in) :: uvw(3) ! Incoming neutron direction + type(MaterialMacroXS), intent(inout) :: xs ! Resultant MacroXS Data + + xs % total = this % total(gin) + xs % elastic = this % scatter % scattxs(gin) + xs % absorption = this % absorption(gin) + xs % nu_fission = this % nu_fission(gin) + + end subroutine mgxsiso_calculate_xs + + subroutine mgxsang_calculate_xs(this, gin, uvw, xs) + class(MgxsAngle), intent(in) :: this + integer, intent(in) :: gin ! Incoming neutron group + real(8), intent(in) :: uvw(3) ! Incoming neutron direction + type(MaterialMacroXS), intent(inout) :: xs ! Resultant MacroXS Data + + integer :: iazi, ipol + + call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) + xs % total = this % total(gin,iazi,ipol) + xs % elastic = this % scatter(iazi,ipol) % obj % scattxs(gin) + xs % absorption = this % absorption(gin,iazi,ipol) + xs % nu_fission = this % nu_fission(gin,iazi,ipol) + + end subroutine mgxsang_calculate_xs + +!!!TODO: +! Move find_angle from math to here after we fully implement this and are ready +! to delete macroxs_header and relevant portions from nuclide_header. end module mgxs_header \ No newline at end of file From 03bca3db4bbd973b513e55e82a491a5b58ad13e0 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 13 Mar 2016 12:54:48 -0400 Subject: [PATCH 379/650] Removed NuclideMG and MacroXS data types and completely replaced with the new Mgxs types. Also cleaned up some output related to the new type --- src/ace.F90 | 18 +- src/cross_section.F90 | 6 +- src/energy_grid.F90 | 6 +- src/fission.F90 | 10 +- src/global.F90 | 8 +- src/macroxs_header.F90 | 768 ---------------------------- src/mgxs_data.F90 | 27 +- src/mgxs_header.F90 | 203 +++++--- src/nuclide_header.F90 | 1099 +--------------------------------------- src/output.F90 | 13 +- src/physics.F90 | 18 +- src/physics_mg.F90 | 4 +- src/tracking.F90 | 1 - 13 files changed, 199 insertions(+), 1982 deletions(-) delete mode 100644 src/macroxs_header.F90 diff --git a/src/ace.F90 b/src/ace.F90 index fbc1b7ee7c..8652e8ce8d 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -54,7 +54,7 @@ contains character(12) :: name ! name of isotope, e.g. 92235.03c character(12) :: alias ! alias of nuclide, e.g. U-235.03c type(Material), pointer :: mat - type(NuclideCE), pointer :: nuc + type(Nuclide), pointer :: nuc type(SAlphaBeta), pointer :: sab type(SetChar) :: already_read @@ -265,7 +265,7 @@ contains character(10) :: mat ! material identifier character(70) :: comment ! comment for ACE table character(MAX_FILE_LEN) :: filename ! path to ACE cross section library - type(NuclideCE), pointer :: nuc + type(Nuclide), pointer :: nuc type(SAlphaBeta), pointer :: sab type(XsListing), pointer :: listing @@ -422,7 +422,7 @@ contains !=============================================================================== subroutine read_esz(nuc, data_0K) - type(NuclideCE), intent(inout) :: nuc + type(Nuclide), intent(inout) :: nuc logical, intent(in) :: data_0K ! are we reading 0K data? integer :: NE ! number of energy points for total and elastic cross sections @@ -510,7 +510,7 @@ contains !=============================================================================== subroutine read_nu_data(nuc) - type(NuclideCE), intent(inout) :: nuc + type(Nuclide), intent(inout) :: nuc integer :: i ! loop index integer :: JXS2 ! location for fission nu data @@ -714,7 +714,7 @@ contains !=============================================================================== subroutine read_reactions(nuc) - type(NuclideCE), intent(inout) :: nuc + type(Nuclide), intent(inout) :: nuc integer :: i ! loop indices integer :: i_fission ! index in nuc % index_fission @@ -894,7 +894,7 @@ contains !=============================================================================== subroutine read_angular_dist(nuc) - type(NuclideCE), intent(inout) :: nuc + type(Nuclide), intent(inout) :: nuc integer :: LOCB ! location of angular distribution for given MT integer :: NE ! number of incoming energies @@ -998,7 +998,7 @@ contains !=============================================================================== subroutine read_energy_dist(nuc) - type(NuclideCE), intent(inout) :: nuc + type(Nuclide), intent(inout) :: nuc integer :: i ! loop index integer :: n @@ -1386,7 +1386,7 @@ contains !=============================================================================== subroutine read_unr_res(nuc) - type(NuclideCE), intent(inout) :: nuc + type(Nuclide), intent(inout) :: nuc integer :: JXS23 ! location of URR data integer :: lc ! locator @@ -1474,7 +1474,7 @@ contains !=============================================================================== subroutine generate_nu_fission(nuc) - type(NuclideCE), intent(inout) :: nuc + type(Nuclide), intent(inout) :: nuc integer :: i ! index on nuclide energy grid real(8) :: E ! energy diff --git a/src/cross_section.F90 b/src/cross_section.F90 index 2f2e7fd7e9..e29215f08d 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -148,7 +148,7 @@ contains integer :: i_low ! lower logarithmic mapping index integer :: i_high ! upper logarithmic mapping index real(8) :: f ! interp factor on nuclide energy grid - type(NuclideCE), pointer :: nuc + type(Nuclide), pointer :: nuc type(Material), pointer :: mat ! Set pointer to nuclide and material @@ -364,7 +364,7 @@ contains real(8) :: fission ! fission cross section real(8) :: inelastic ! inelastic cross section type(UrrData), pointer :: urr - type(NuclideCE), pointer :: nuc + type(Nuclide), pointer :: nuc micro_xs(i_nuclide) % use_ptable = .true. @@ -520,7 +520,7 @@ contains pure function elastic_xs_0K(E, nuc) result(xs_out) real(8), intent(in) :: E ! trial energy - type(NuclideCE), intent(in) :: nuc ! target nuclide at temperature + type(Nuclide), intent(in) :: nuc ! target nuclide at temperature real(8) :: xs_out ! 0K xs at trial energy integer :: i_grid ! index on nuclide energy grid diff --git a/src/energy_grid.F90 b/src/energy_grid.F90 index 248462f70c..66419f83cc 100644 --- a/src/energy_grid.F90 +++ b/src/energy_grid.F90 @@ -27,7 +27,7 @@ contains integer :: i ! index in nuclides array integer :: j ! index in materials array type(ListReal) :: list - type(NuclideCE), pointer :: nuc + type(Nuclide), pointer :: nuc type(Material), pointer :: mat call write_message("Creating unionized energy grid...", 5) @@ -70,7 +70,7 @@ contains real(8) :: E_max ! Maximum energy in MeV real(8) :: E_min ! Minimum energy in MeV real(8), allocatable :: umesh(:) ! Equally log-spaced energy grid - type(NuclideCE), pointer :: nuc + type(Nuclide), pointer :: nuc ! Set minimum/maximum energies E_max = energy_max_neutron @@ -179,7 +179,7 @@ contains integer :: index_e ! index on union energy grid real(8) :: union_energy ! energy on union grid real(8) :: energy ! energy on nuclide grid - type(NuclideCE), pointer :: nuc + type(Nuclide), pointer :: nuc type(Material), pointer :: mat do k = 1, n_materials diff --git a/src/fission.F90 b/src/fission.F90 index 77ee641787..3a0b9348fc 100644 --- a/src/fission.F90 +++ b/src/fission.F90 @@ -1,6 +1,6 @@ module fission - use nuclide_header, only: NuclideCE + use nuclide_header, only: Nuclide use constants use error, only: fatal_error use interpolation, only: interpolate_tab1 @@ -16,7 +16,7 @@ contains !=============================================================================== pure function nu_total(nuc, E) result(nu) - type(NuclideCE), intent(in) :: nuc ! nuclide from which to find nu + type(Nuclide), intent(in) :: nuc ! nuclide from which to find nu real(8), intent(in) :: E ! energy of incoming neutron real(8) :: nu ! number of total neutrons emitted per fission @@ -49,7 +49,7 @@ contains !=============================================================================== pure function nu_prompt(nuc, E) result(nu) - type(NuclideCE), intent(in) :: nuc ! nuclide from which to find nu + type(Nuclide), intent(in) :: nuc ! nuclide from which to find nu real(8), intent(in) :: E ! energy of incoming neutron real(8) :: nu ! number of prompt neutrons emitted per fission @@ -86,7 +86,7 @@ contains !=============================================================================== pure function nu_delayed(nuc, E) result(nu) - type(NuclideCE), intent(in) :: nuc ! nuclide from which to find nu + type(Nuclide), intent(in) :: nuc ! nuclide from which to find nu real(8), intent(in) :: E ! energy of incoming neutron real(8) :: nu ! number of delayed neutrons emitted per fission @@ -109,7 +109,7 @@ contains !=============================================================================== pure function yield_delayed(nuc, E, g) result(yield) - type(NuclideCE), intent(in) :: nuc ! nuclide from which to find nu + type(Nuclide), intent(in) :: nuc ! nuclide from which to find nu real(8), intent(in) :: E ! energy of incoming neutron real(8) :: yield ! delayed neutron precursor yield integer, intent(in) :: g ! the delayed neutron precursor group diff --git a/src/global.F90 b/src/global.F90 index 6befa828ff..bb7bf50efc 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -5,9 +5,9 @@ module global use constants use dict_header, only: DictCharInt, DictIntInt use geometry_header, only: Cell, Universe, Lattice, LatticeContainer - use macroxs_header, only: MacroXSContainer use material_header, only: Material use mesh_header, only: RegularMesh + use mgxs_header, only: Mgxs, MgxsContainer use nuclide_header use plot_header, only: ObjectPlot use sab_header, only: SAlphaBeta @@ -86,7 +86,7 @@ module global ! CONTINUOUS-ENERGY CROSS SECTION RELATED VARIABLES ! Cross section arrays - type(NuclideCE), allocatable, target :: nuclides(:) ! Nuclide cross-sections + type(Nuclide), allocatable, target :: nuclides(:) ! Nuclide cross-sections type(SAlphaBeta), allocatable, target :: sab_tables(:) ! S(a,b) tables integer :: n_sab_tables ! Number of S(a,b) thermal scattering tables @@ -112,10 +112,10 @@ module global ! MULTI-GROUP CROSS SECTION RELATED VARIABLES ! Cross section arrays - type(NuclideMGContainer), allocatable, target :: nuclides_MG(:) + type(MgxsContainer), allocatable, target :: nuclides_MG(:) ! Cross section caches - type(MacroXSContainer), target, allocatable :: macro_xs(:) + type(MgxsContainer), target, allocatable :: macro_xs(:) ! Number of energy groups integer :: energy_groups diff --git a/src/macroxs_header.F90 b/src/macroxs_header.F90 deleted file mode 100644 index ff04d8a4e3..0000000000 --- a/src/macroxs_header.F90 +++ /dev/null @@ -1,768 +0,0 @@ -module macroxs_header - - use constants, only: MAX_FILE_LEN, ZERO, ONE, TWO, PI - use error, only: fatal_error - use list_header, only: ListInt - use material_header, only: material - use math, only: calc_pn, calc_rn, expand_harmonic, find_angle - use nuclide_header - use random_lcg, only: prn - use scattdata_header - - implicit none - -!=============================================================================== -! MACROXS_* contains cached macroscopic cross sections for the material a -! particle is traveling through -!=============================================================================== - - type, abstract :: MacroXS - contains - procedure(macroxs_init_), deferred :: init ! initializes object - procedure(macroxs_get_xs_), deferred :: get_xs ! Return xs - ! Sample the outgoing energy from a fission event - procedure(macroxs_sample_fission_), deferred :: sample_fission_energy - ! Sample the outgoing energy and angle from a scatter event - procedure(macroxs_sample_scatter_), deferred :: sample_scatter - ! Calculate the material specific MGXS data from the nuclides - procedure(macroxs_calculate_xs_), deferred :: calculate_xs - end type MacroXS - - abstract interface - subroutine macroxs_init_(this, mat, nuclides, groups, get_kfiss, get_fiss, & - max_order, scatt_type) - import MacroXS, Material, NuclideMGContainer, MAX_LINE_LEN - class(MacroXS), intent(inout) :: this ! The MacroXS to initialize - type(Material), pointer, intent(in) :: mat ! base material - type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from - integer, intent(in) :: groups ! Number of E groups - logical, intent(in) :: get_kfiss ! Should we get kfiss data? - logical, intent(in) :: get_fiss ! Should we get fiss data? - integer, intent(in) :: max_order ! Maximum requested order - integer, intent(in) :: scatt_type ! Legendre or Tabular Scatt? - end subroutine macroxs_init_ - - function macroxs_get_xs_(this, xstype, gin, gout, uvw, mu) result(xs) - import MacroXS - class(MacroXS), intent(in) :: this ! The MacroXS to initialize - character(*) , intent(in) :: xstype ! Cross Section Type - integer, intent(in) :: gin ! Incoming Energy group - integer, optional, intent(in) :: gout ! Outgoing Energy group - real(8), optional, intent(in) :: uvw(3) ! Requested Angle - real(8), optional, intent(in) :: mu ! Change in angle - real(8) :: xs ! Resultant xs - end function macroxs_get_xs_ - - function macroxs_sample_fission_(this, gin, uvw) result(gout) - import MacroXS - class(MacroXS), intent(in) :: this ! Data to work with - integer, intent(in) :: gin ! Incoming energy group - real(8), intent(in) :: uvw(3) ! Particle Direction - integer :: gout ! Sampled outgoing group - - end function macroxs_sample_fission_ - - subroutine macroxs_sample_scatter_(this, uvw, gin, gout, mu, wgt) - import MacroXS - class(MacroXS), intent(in) :: this - real(8), intent(in) :: uvw(3) ! Incoming neutron direction - integer, intent(in) :: gin ! Incoming neutron group - integer, intent(out) :: gout ! Sampled outgoin group - real(8), intent(out) :: mu ! Sampled change in angle - real(8), intent(inout) :: wgt ! Particle weight - end subroutine macroxs_sample_scatter_ - - subroutine macroxs_calculate_xs_(this, gin, uvw, xs) - import MacroXS, MaterialMacroXS - class(MacroXS), intent(in) :: this - integer, intent(in) :: gin ! Incoming neutron group - real(8), intent(in) :: uvw(3) ! Incoming neutron direction - type(MaterialMacroXS), intent(inout) :: xs - end subroutine macroxs_calculate_xs_ - end interface - - type, extends(MacroXS) :: MacroXSIso - ! Microscopic cross sections - real(8), allocatable :: total(:) ! total cross section - real(8), allocatable :: absorption(:) ! absorption cross section - class(ScattData), allocatable :: scatter ! scattering information - real(8), allocatable :: nu_fission(:) ! nu-fission - real(8), allocatable :: k_fission(:) ! kappa-fission - real(8), allocatable :: fission(:) ! fission x/s - real(8), allocatable :: chi(:,:) ! fission spectra - - contains - procedure :: init => macroxsiso_init ! inits object - procedure :: get_xs => macroxsiso_get_xs ! Returns xs - procedure :: sample_fission_energy => macroxsiso_sample_fission_energy - procedure :: sample_scatter => macroxsiso_sample_scatter - procedure :: calculate_xs => macroxsiso_calculate_xs - end type MacroXSIso - - type, extends(MacroXS) :: MacroXSAngle - ! Macroscopic cross sections - real(8), allocatable :: total(:,:,:) ! total cross section - real(8), allocatable :: absorption(:,:,:) ! absorption cross section - type(ScattDataContainer), allocatable :: scatter(:,:) ! scattering information - real(8), allocatable :: nu_fission(:,:,:) ! nu-fission - real(8), allocatable :: k_fission(:,:,:) ! kappa-fission - real(8), allocatable :: fission(:,:,:) ! fission x/s - real(8), allocatable :: chi(:,:,:,:) ! fission spectra - real(8), allocatable :: polar(:) ! polar angles - real(8), allocatable :: azimuthal(:) ! azimuthal angles - - contains - procedure :: init => macroxsangle_init ! inits object - procedure :: get_xs => macroxsangle_get_xs ! Returns xs - procedure :: sample_fission_energy => macroxsangle_sample_fission_energy - procedure :: sample_scatter => macroxsangle_sample_scatter - procedure :: calculate_xs => macroxsangle_calculate_xs - end type MacroXSAngle - -!=============================================================================== -! MACROXSCONTAINER pointer array for storing MacroXS objects. -!=============================================================================== - - type MacroXSContainer - class(MacroXS), allocatable :: obj - end type MacroXSContainer - -contains - -!=============================================================================== -! MACROXS*_INIT sets the MacroXS Data -!=============================================================================== - - subroutine macroxsiso_init(this, mat, nuclides, groups, get_kfiss, get_fiss, & - max_order, scatt_type) - class(MacroXSIso), intent(inout) :: this ! The MacroXS to initialize - type(Material), pointer, intent(in) :: mat ! base material - type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from - integer, intent(in) :: groups ! Number of E groups - logical, intent(in) :: get_kfiss ! Should we get kfiss data? - logical, intent(in) :: get_fiss ! Should we get fiss data? - integer, intent(in) :: max_order ! Maximum requested order - integer, intent(in) :: scatt_type ! How is data presented - - integer :: i ! loop index over nuclides - integer :: gin, gout ! group indices - real(8) :: atom_density ! atom density of a nuclide - real(8) :: norm - integer :: mat_max_order, order, order_dim, nuc_order_dim - real(8), allocatable :: temp_mult(:,:) - real(8), allocatable :: scatt_coeffs(:,:,:) - - ! Determine the scattering type of our data and ensure all scattering orders - ! are the same. - select type(nuc => nuclides(mat % nuclide(1)) % obj) - type is (NuclideIso) - order = size(nuc % scatter % dist(1) % data, dim=1) - end select - ! If we have tabular only data, then make sure all datasets have same size - if (scatt_type == ANGLE_HISTOGRAM) then - ! Check all scattering data to ensure it is the same size - ! order = size(nuclides(mat % nuclide(1)) % obj % scatter % data,dim=1) - do i = 2, mat % n_nuclides - select type(nuc => nuclides(mat % nuclide(i)) % obj) - type is (NuclideIso) - if (order /= size(nuc % scatter % dist(1) % data,dim=1)) & - call fatal_error("All Histogram Scattering Entries Must Be& - & Same Length!") - end select - end do - ! Ok, got our order, store the dimensionality - order_dim = order - - ! Set our Scatter Object Type - allocate(ScattDataHistogram :: this % scatter) - - else if (scatt_type == ANGLE_TABULAR) then - ! Check all scattering data to ensure it is the same size - do i = 2, mat % n_nuclides - select type(nuc => nuclides(mat % nuclide(i)) % obj) - type is (NuclideIso) - if (order /= size(nuc % scatter % dist(1) % data,dim=1)) & - call fatal_error("All Tabular Scattering Entries Must Be& - & Same Length!") - end select - end do - ! Ok, got our order, store the dimensionality - order_dim = order - - ! Set our Scatter Object Type - allocate(ScattDataTabular :: this % scatter) - - else if (scatt_type == ANGLE_LEGENDRE) then - ! Need to determine the maximum scattering order of all data in this material - mat_max_order = 0 - do i = 1, mat % n_nuclides - select type(nuc => nuclides(mat % nuclide(i)) % obj) - type is (NuclideIso) - if (size(nuc % scatter % dist(1) % data,dim=1) > mat_max_order) & - mat_max_order = size(nuc % scatter % dist(1) % data,dim=1) - end select - end do - - ! Now need to compare this material maximum scattering order with - ! the problem wide max scatt order and use whichever is lower - order = min(mat_max_order, max_order) - ! Ok, got our order, store the dimensionality - order_dim = order + 1 - - ! Set our Scatter Object Type - allocate(ScattDataLegendre :: this % scatter) - end if - - ! Allocate and initialize data needed for macro_xs(i_mat) object - allocate(this % total(groups)) - this % total = ZERO - allocate(this % absorption(groups)) - this % absorption = ZERO - if (get_fiss) then - allocate(this % fission(groups)) - this % fission = ZERO - end if - if (get_kfiss) then - allocate(this % k_fission(groups)) - this % k_fission = ZERO - end if - allocate(this % nu_fission(groups)) - this % nu_fission = ZERO - allocate(this % chi(groups,groups)) - this % chi = ZERO - allocate(temp_mult(groups,groups)) - temp_mult = ZERO - allocate(scatt_coeffs(order_dim,groups,groups)) - scatt_coeffs = ZERO - - ! Add contribution from each nuclide in material - do i = 1, mat % n_nuclides - ! Copy atom density of nuclide in material - atom_density = mat % atom_density(i) - - ! Perform our operations which depend upon the type - select type(nuc => nuclides(mat % nuclide(i)) % obj) - type is (NuclideIso) - ! Add contributions to total, absorption, and fission data (if necessary) - this % total = this % total + atom_density * nuc % total - this % absorption = this % absorption + & - atom_density * nuc % absorption - if (nuc % fissionable) then - if (allocated(nuc % chi)) then - do gin = 1, groups - do gout = 1, groups - this % chi(gout,gin) = this % chi(gout,gin) + atom_density * & - nuc % chi(gout) * nuc % nu_fission(1,gin) - end do - end do - this % nu_fission = this % nu_fission + atom_density * & - nuc % nu_fission(1,:) - else - this % chi = this % chi + atom_density * nuc % nu_fission - do gin = 1, groups - this % nu_fission(gin) = this % nu_fission(gin) + atom_density * & - sum(nuc % nu_fission(:,gin)) - end do - end if - if (get_fiss) then - this % fission = this % fission + atom_density * nuc % fission - end if - if (get_kfiss) then - this % k_fission = this % k_fission + atom_density * nuc % k_fission - end if - end if - - ! Get the multiplication matrix - do gin = 1, groups - do gout = nuc % scatter % gmin(gin), nuc % scatter % gmax(gin) - temp_mult(gout,gin) = temp_mult(gout,gin) + atom_density * & - nuc % scatter % mult(gin) % data(gout) - end do - end do - - ! Get the complete scattering matrix - nuc_order_dim = size(nuc % scatter % dist(1) % data,dim=1) - scatt_coeffs(1:min(nuc_order_dim, order_dim),:,:) = & - scatt_coeffs(1:min(nuc_order_dim, order_dim),:,:) + & - atom_density * & - nuc % scatter % get_matrix(min(nuc_order_dim,order_dim)) - - type is (NuclideAngle) - call fatal_error("Invalid Passing of NuclideAngle to MacroXSIso Object") - end select - end do - - ! Initialize the ScattData Object - call this % scatter % init(temp_mult,scatt_coeffs) - - ! Now normalize chi - if (mat % fissionable) then - do gin = 1, groups - norm = sum(this % chi(:,gin)) - if (norm > ZERO) then - this % chi(:,gin) = this % chi(:,gin) / norm - end if - end do - end if - - ! Deallocate temporaries - deallocate(scatt_coeffs, temp_mult) - - end subroutine macroxsiso_init - - subroutine macroxsangle_init(this, mat, nuclides, groups, get_kfiss, get_fiss, & - max_order, scatt_type) - class(MacroXSAngle), intent(inout) :: this ! The MacroXS to initialize - type(Material), pointer, intent(in) :: mat ! base material - type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from - integer, intent(in) :: groups ! Number of E groups - logical, intent(in) :: get_kfiss ! Should we get kfiss data? - logical, intent(in) :: get_fiss ! Should we get fiss data? - integer, intent(in) :: max_order ! Maximum requested order - integer, intent(in) :: scatt_type ! Legendre or Tabular Scatt? - - integer :: i ! loop index over nuclides - integer :: gin, gout ! group indices - real(8) :: atom_density ! atom density of a nuclide - integer :: ipol, iazi, n_pol, n_azi - real(8) :: norm - integer :: mat_max_order, order, order_dim, nuc_order_dim - real(8), allocatable :: temp_mult(:,:,:,:) - real(8), allocatable :: scatt_coeffs(:,:,:,:,:) - - ! Get the number of each polar and azi angles and make sure all the - ! NuclideAngle types have the same number of these angles - n_pol = -1 - n_azi = -1 - do i = 1, mat % n_nuclides - select type(nuc => nuclides(mat % nuclide(i)) % obj) - type is (NuclideAngle) - if (n_pol == -1) then - n_pol = nuc % n_pol - n_azi = nuc % n_azi - allocate(this % polar(n_pol)) - this % polar = nuc % polar - allocate(this % azimuthal(n_azi)) - this % azimuthal = nuc % azimuthal - else - if ((n_pol /= nuc % n_pol) .or. (n_azi /= nuc % n_azi)) then - call fatal_error("All Angular Data Must Be Same Length!") - end if - end if - end select - end do - - ! Determine the scattering type of our data and ensure all scattering orders - ! are the same. - select type(nuc => nuclides(mat % nuclide(1)) % obj) - type is (NuclideAngle) - order = size(nuc % scatter(1,1) % obj % dist(1) % data, dim=1) - end select - ! If we have tabular only data, then make sure all datasets have same size - if (scatt_type == ANGLE_HISTOGRAM) then - ! Check all scattering data to ensure it is the same size - ! order = size(nuclides(mat % nuclide(1)) % obj % scatter % data,dim=1) - do i = 2, mat % n_nuclides - select type(nuc => nuclides(mat % nuclide(i)) % obj) - type is (NuclideAngle) - if (order /= size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1)) & - call fatal_error("All Histogram Scattering Entries Must Be& - & Same Length!") - end select - end do - ! Ok, got our order, store the dimensionality - order_dim = order - - ! Set our Scatter Object Type - allocate(this % scatter(n_azi, n_pol)) - do ipol = 1, n_pol - do iazi = 1, n_azi - allocate(ScattDataHistogram :: this % scatter(iazi, ipol) % obj) - end do - end do - - else if (scatt_type == ANGLE_TABULAR) then - ! Check all scattering data to ensure it is the same size - do i = 2, mat % n_nuclides - select type(nuc => nuclides(mat % nuclide(i)) % obj) - type is (NuclideAngle) - if (order /= size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1)) & - call fatal_error("All Tabular Scattering Entries Must Be& - & Same Length!") - end select - end do - ! Ok, got our order, store the dimensionality - order_dim = order - - ! Set our Scatter Object Type - allocate(this % scatter(n_azi, n_pol)) - do ipol = 1, n_pol - do iazi = 1, n_azi - allocate(ScattDataTabular :: this % scatter(iazi, ipol) % obj) - end do - end do - - else if (scatt_type == ANGLE_LEGENDRE) then - ! Need to determine the maximum scattering order of all data in this material - mat_max_order = 0 - do i = 1, mat % n_nuclides - select type(nuc => nuclides(mat % nuclide(i)) % obj) - type is (NuclideAngle) - if (size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1) > mat_max_order) & - mat_max_order = size(nuc % scatter(1,1) % obj% dist(1) % data,dim=1) - end select - end do - - ! Now need to compare this material maximum scattering order with - ! the problem wide max scatt order and use whichever is lower - order = min(mat_max_order, max_order) - ! Ok, got our order, store the dimensionality - order_dim = order + 1 - - ! Set our Scatter Object Type - allocate(this % scatter(n_azi, n_pol)) - do ipol = 1, n_pol - do iazi = 1, n_azi - allocate(ScattDataLegendre :: this % scatter(iazi, ipol) % obj) - end do - end do - end if - - ! Allocate and initialize data within macro_xs(i_mat) object - allocate(this % total(groups,n_azi,n_pol)) - this % total = ZERO - allocate(this % absorption(groups,n_azi,n_pol)) - this % absorption = ZERO - if (get_fiss) then - allocate(this % fission(groups,n_azi,n_pol)) - this % fission = ZERO - end if - if (get_kfiss) then - allocate(this % k_fission(groups,n_azi,n_pol)) - this % k_fission = ZERO - end if - allocate(this % nu_fission(groups,n_azi,n_pol)) - this % nu_fission = ZERO - allocate(this % chi(groups, groups,n_azi,n_pol)) - this % chi = ZERO - allocate(temp_mult(groups,groups,n_azi,n_pol)) - temp_mult = ZERO - allocate(scatt_coeffs(order_dim,groups,groups,n_azi,n_pol)) - scatt_coeffs = ZERO - - ! Add contribution from each nuclide in material - do i = 1, mat % n_nuclides - ! Copy atom density of nuclide in material - atom_density = mat % atom_density(i) - - ! Perform our operations which depend upon the type - select type(nuc => nuclides(mat % nuclide(i)) % obj) - type is (NuclideIso) - call fatal_error("Invalid Passing of NuclideIso to MacroXSAngle Object") - type is (NuclideAngle) - ! Add contributions to total, absorption, and fission data (if necessary) - this % total = this % total + atom_density * nuc % total - this % absorption = this % absorption + & - atom_density * nuc % absorption - if (nuc % fissionable) then - if (allocated(nuc % chi)) then - do gin = 1, groups - do gout = 1, groups - this % chi(gout,gin,:,:) = this % chi(gout,gin,:,:) + atom_density * & - nuc % chi(gout,:,:) * nuc % nu_fission(1,gin,:,:) - end do - end do - this % nu_fission = this % nu_fission + atom_density * & - nuc % nu_fission(1,:,:,:) - else - this % chi = this % chi + atom_density * nuc % nu_fission - do gin = 1, groups - this % nu_fission(gin,:,:) = this % nu_fission(gin,:,:) + atom_density * & - sum(nuc % nu_fission(:,gin,:,:),dim=1) - end do - end if - if (get_fiss) then - this % fission = this % fission + atom_density * nuc % fission - end if - if (get_kfiss) then - this % k_fission = this % k_fission + atom_density * nuc % k_fission - end if - end if - - ! Get the multiplication matrix - do ipol = 1, n_pol - do iazi = 1, n_azi - do gin = 1, groups - do gout = nuc % scatter(iazi,ipol) % obj % gmin(gin), & - nuc % scatter(iazi,ipol) % obj % gmax(gin) - temp_mult(gout,gin,iazi,ipol) = temp_mult(gout,gin,iazi,ipol) + & - atom_density * & - nuc % scatter(iazi,ipol) % obj % mult(gin) % data(gout) - end do - end do - end do - end do - - ! Get the complete scattering matrix - nuc_order_dim = size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1) - do ipol = 1, n_pol - do iazi = 1, n_azi - scatt_coeffs(1:min(nuc_order_dim,order_dim),:,:,iazi,ipol) = & - scatt_coeffs(1:min(nuc_order_dim, order_dim),:,:,iazi,ipol) + & - atom_density * & - nuc % scatter(iazi,ipol) % obj % get_matrix(& - min(nuc_order_dim,order_dim)) - end do - end do - end select - end do - - ! Initialize the ScattData Object - do ipol = 1, n_pol - do iazi = 1, n_azi - call this % scatter(iazi,ipol) % obj % init( & - temp_mult(:,:,iazi,ipol), scatt_coeffs(:,:,:,iazi,ipol)) - end do - end do - - ! Now normalize chi - if (mat % fissionable) then - do ipol = 1, n_pol - do iazi = 1, n_azi - do gin = 1, groups - norm = sum(this % chi(:,gin,iazi,ipol)) - if (norm > ZERO) then - this % chi(:,gin,iazi,ipol) = this % chi(:,gin,iazi,ipol) / norm - end if - end do - end do - end do - end if - - ! Deallocate temporaries for the next material - deallocate(scatt_coeffs, temp_mult) - - end subroutine macroxsangle_init - -!=============================================================================== -! MACROXS_*_GET_XS returns the requested data type -!=============================================================================== - - function macroxsiso_get_xs(this, xstype, gin, gout, uvw, mu) result(xs) - class(MacroXSIso), intent(in) :: this ! The MacroXS to initialize - character(*) , intent(in) :: xstype ! Type of xs requested - integer, intent(in) :: gin ! Incoming Energy group - integer, optional, intent(in) :: gout ! Outgoing Energy group - real(8), optional, intent(in) :: uvw(3) ! Requested Angle - real(8), optional, intent(in) :: mu ! Change in angle - real(8) :: xs ! Requested x/s - - select case(xstype) - case('total') - xs = this % total(gin) - case('absorption') - xs = this % absorption(gin) - case('fission') - xs = this % fission(gin) - case('kappa_fission') - xs = this % k_fission(gin) - case('nu_fission') - xs = this % nu_fission(gin) - case('scatter') - xs = this % scatter % scattxs(gin) - case('mult') - if (present(gout)) then - if (gout < this % scatter % gmin(gin) .or. & - gout > this % scatter % gmax(gin)) then - xs = ZERO - else - xs = this % scatter % mult(gin) % data(gout) - end if - else - xs = dot_product(this % scatter % mult(gin) % data, & - this % scatter % scattxs(gin) * & - this % scatter % energy(gin) % data) - xs = xs / this % scatter % scattxs(gin) - end if - case('f_mu', 'f_mu/mult') - if (gout < this % scatter % gmin(gin) .or. & - gout > this % scatter % gmax(gin)) then - xs = ZERO - else - xs = this % scatter % calc_f(gin, gout, mu) - if (xstype == 'f_mu/mult') then - xs = xs / this % scatter % mult(gin) % data(gout) - end if - end if - end select - - end function macroxsiso_get_xs - - function macroxsangle_get_xs(this, xstype, gin, gout, uvw, mu) result(xs) - class(MacroXSAngle), intent(in) :: this ! The MacroXS to initialize - character(*) , intent(in) :: xstype ! Type of xs requested - integer, intent(in) :: gin ! Incoming Energy group - integer, optional, intent(in) :: gout ! Outgoing Energy group - real(8), optional, intent(in) :: uvw(3) ! Requested Angle - real(8), optional, intent(in) :: mu ! Change in angle - real(8) :: xs ! Requested x/s - - integer :: iazi, ipol - - if (present(uvw)) then - call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) - select case(xstype) - case('total') - xs = this % total(gin,iazi,ipol) - case('absorption') - xs = this % absorption(gin,iazi,ipol) - case('fission') - xs = this % fission(gin,iazi,ipol) - case('kappa_fission') - xs = this % k_fission(gin,iazi,ipol) - case('nu_fission') - xs = this % nu_fission(gin,iazi,ipol) - case('scatter') - xs = this % scatter(iazi,ipol) % obj % scattxs(gin) - case('mult') - if (present(gout)) then - if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & - gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then - xs = ZERO - else - xs = this % scatter(iazi,ipol) % obj % mult(gin) % data(gout) - end if - else - xs = dot_product(this % scatter(iazi,ipol) % obj % mult(gin) % data, & - this % scatter(iazi,ipol) % obj % scattxs(gin) * & - this % scatter(iazi,ipol) % obj % energy(gin) % data) - xs = xs / this % scatter(iazi,ipol) % obj % scattxs(gin) - end if - case('f_mu', 'f_mu/mult') - if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & - gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then - xs = ZERO - else - xs = this % scatter(iazi,ipol) % obj % calc_f(gin,gout,mu) - if (xstype == 'f_mu/mult') then - xs = xs / this % scatter(iazi,ipol) % obj % mult(gin) % data(gout) - end if - end if - end select - end if - - end function macroxsangle_get_xs - -!=============================================================================== -! MACROXS_*_SAMPLE_FISSION_ENERGY samples the outgoing energy from a fission -! event -!=============================================================================== - - function macroxsiso_sample_fission_energy(this, gin, uvw) result(gout) - class(MacroXSIso), intent(in) :: this ! Data to work with - integer, intent(in) :: gin ! Incoming energy group - real(8), intent(in) :: uvw(3) ! Particle Direction - integer :: gout ! Sampled outgoing group - real(8) :: xi ! Our random number - real(8) :: prob ! Running probability - - xi = prn() - gout = 1 - prob = this % chi(gout,gin) - - do while (prob < xi) - gout = gout + 1 - prob = prob + this % chi(gout,gin) - end do - - end function macroxsiso_sample_fission_energy - - function macroxsangle_sample_fission_energy(this, gin, uvw) result(gout) - class(MacroXSAngle), intent(in) :: this ! Data to work with - integer, intent(in) :: gin ! Incoming energy group - real(8), intent(in) :: uvw(3) ! Particle Direction - integer :: gout ! Sampled outgoing group - real(8) :: xi ! Our random number - real(8) :: prob ! Running probability - integer :: iazi, ipol - - call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) - - xi = prn() - gout = 1 - prob = this % chi(gout,gin,iazi,ipol) - - do while (prob < xi) - gout = gout + 1 - prob = prob + this % chi(gout,gin,iazi,ipol) - end do - - end function macroxsangle_sample_fission_energy - -!=============================================================================== -! MACROXS*_SAMPLE_SCATTER Selects outgoing energy and angle after a scatter -! event -!=============================================================================== - - subroutine macroxsiso_sample_scatter(this, uvw, gin, gout, mu, wgt) - class(MacroXSIso), intent(in) :: this - real(8), intent(in) :: uvw(3) ! Incoming neutron direction - integer, intent(in) :: gin ! Incoming neutron group - integer, intent(out) :: gout ! Sampled outgoin group - real(8), intent(out) :: mu ! Sampled change in angle - real(8), intent(inout) :: wgt ! Particle weight - - call this % scatter % sample(gin, gout, mu, wgt) - - end subroutine macroxsiso_sample_scatter - - subroutine macroxsangle_sample_scatter(this, uvw, gin, gout, mu, wgt) - class(MacroXSAngle), intent(in) :: this - real(8), intent(in) :: uvw(3) ! Incoming neutron direction - integer, intent(in) :: gin ! Incoming neutron group - integer, intent(out) :: gout ! Sampled outgoin group - real(8), intent(out) :: mu ! Sampled change in angle - real(8), intent(inout) :: wgt ! Particle weight - - integer :: iazi, ipol ! Angular indices - - call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) - call this % scatter(iazi,ipol) % obj % sample(gin,gout,mu,wgt) - - end subroutine macroxsangle_sample_scatter - -!=============================================================================== -! MACROXS*_CALCULATE_XS determines the multi-group macroscopic cross sections -! for the material the particle is currently traveling through. -!=============================================================================== - - subroutine macroxsiso_calculate_xs(this, gin, uvw, xs) - class(MacroXSIso), intent(in) :: this - integer, intent(in) :: gin ! Incoming neutron group - real(8), intent(in) :: uvw(3) ! Incoming neutron direction - type(MaterialMacroXS), intent(inout) :: xs ! Resultant MacroXS Data - - xs % total = this % total(gin) - xs % elastic = this % scatter % scattxs(gin) - xs % absorption = this % absorption(gin) - xs % nu_fission = this % nu_fission(gin) - - end subroutine macroxsiso_calculate_xs - - subroutine macroxsangle_calculate_xs(this, gin, uvw, xs) - class(MacroXSAngle), intent(in) :: this - integer, intent(in) :: gin ! Incoming neutron group - real(8), intent(in) :: uvw(3) ! Incoming neutron direction - type(MaterialMacroXS), intent(inout) :: xs ! Resultant MacroXS Data - - integer :: iazi, ipol - - call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) - xs % total = this % total(gin,iazi,ipol) - xs % elastic = this % scatter(iazi,ipol) % obj % scattxs(gin) - xs % absorption = this % absorption(gin,iazi,ipol) - xs % nu_fission = this % nu_fission(gin,iazi,ipol) - - end subroutine macroxsangle_calculate_xs - -end module macroxs_header diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index db2b149363..283024e294 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -3,9 +3,8 @@ module mgxs_data use constants use error, only: fatal_error use global - use macroxs_header use material_header, only: Material - use nuclide_header + use mgxs_header use output, only: write_message use set_header, only: SetChar use string, only: to_lower @@ -118,17 +117,14 @@ contains ! Now allocate accordingly select case(representation) case(MGXS_ISOTROPIC) - allocate(NuclideIso :: nuclides_MG(i_nuclide) % obj) + allocate(MgxsIso :: nuclides_MG(i_nuclide) % obj) case(MGXS_ANGLE) - allocate(NuclideAngle :: nuclides_MG(i_nuclide) % obj) + allocate(MgxsAngle :: nuclides_MG(i_nuclide) % obj) end select ! Now read in the data specific to the type we just declared - call nuclides_MG(i_nuclide) % obj % init(node_xsdata, energy_groups, & - get_kfiss, get_fiss, max_order) - - ! Keep track of what listing is associated with this nuclide - nuclides_MG(i_nuclide) % obj % listing = i_listing + call nuclides_MG(i_nuclide) % obj % init_file(node_xsdata, & + energy_groups,get_kfiss,get_fiss,max_order,i_listing) ! Add name and alias to dictionary call already_read % add(name) @@ -202,14 +198,13 @@ contains ! how we allocate the scatter object within macroxs scatt_type = nuclides_MG(mat % nuclide(1)) % obj % scatt_type select type(nuc => nuclides_MG(mat % nuclide(1)) % obj) - type is (NuclideIso) - allocate(MacroXSIso :: macro_xs(i_mat) % obj) - type is (NuclideAngle) - allocate(MacroXSAngle :: macro_xs(i_mat) % obj) + type is (MgxsIso) + allocate(MgxsIso :: macro_xs(i_mat) % obj) + type is (MgxsAngle) + allocate(MgxsAngle :: macro_xs(i_mat) % obj) end select - call macro_xs(i_mat) % obj % init(mat, nuclides_MG, energy_groups, & - get_kfiss, get_fiss, max_order, & - scatt_type) + call macro_xs(i_mat) % obj % combine(mat,nuclides_MG,energy_groups, & + get_kfiss,get_fiss,max_order,scatt_type,i_mat) end do end subroutine create_macro_xs diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index 36e3964da9..c87b37ce22 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -7,7 +7,7 @@ module mgxs_header use material_header, only: material use math, only: calc_pn, calc_rn, expand_harmonic, & evaluate_legendre, find_angle - use nuclide_header, only: NuclideMGContainer, MaterialMacroXS + use nuclide_header, only: MaterialMacroXS use random_lcg, only: prn use scattdata_header use string @@ -18,11 +18,11 @@ module mgxs_header !=============================================================================== type, abstract :: Mgxs - character(12) :: name ! name of dataset, e.g. 92235.03c - integer :: zaid ! Z and A identifier, e.g. 92235 - real(8) :: awr ! Atomic Weight Ratio - integer :: listing ! index in xs_listings - real(8) :: kT ! temperature in MeV (k*T) + character(len=104) :: name ! name of dataset, e.g. 92235.03c + integer :: zaid ! Z and A identifier, e.g. 92235 + real(8) :: awr ! Atomic Weight Ratio + integer :: listing ! index in xs_listings + real(8) :: kT ! temperature in MeV (k*T) ! Fission information logical :: fissionable ! mgxs object is fissionable? @@ -32,25 +32,38 @@ module mgxs_header procedure(mgxs_init_file_), deferred :: init_file ! Initialize the data procedure(mgxs_print_), deferred :: print ! Writes object info procedure(mgxs_get_xs_), deferred :: get_xs ! Get the requested xs - ! procedure(mgxs_combine_), deferred :: combine ! initializes object - ! ! Sample the outgoing energy from a fission event + procedure(mgxs_combine_), deferred :: combine ! initializes object + ! Sample the outgoing energy from a fission event procedure(mgxs_sample_fission_), deferred :: sample_fission_energy - ! ! Sample the outgoing energy and angle from a scatter event + ! Sample the outgoing energy and angle from a scatter event procedure(mgxs_sample_scatter_), deferred :: sample_scatter - ! ! Calculate the material specific MGXS data from the nuclides + ! Calculate the material specific MGXS data from the nuclides procedure(mgxs_calculate_xs_), deferred :: calculate_xs end type Mgxs +!=============================================================================== +! MGXSCONTAINER pointer array for storing Nuclides +!=============================================================================== + + type MgxsContainer + class(Mgxs), pointer :: obj + end type MgxsContainer + +!=============================================================================== +! Interfaces for MGXS +!=============================================================================== + abstract interface - subroutine mgxs_init_file_(this, node_xsdata, groups, get_kfiss, get_fiss, & - max_order) + subroutine mgxs_init_file_(this,node_xsdata,groups,get_kfiss,get_fiss, & + max_order,i_listing) import Mgxs, Node class(Mgxs), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml integer, intent(in) :: groups ! Number of Energy groups logical, intent(in) :: get_kfiss ! Need Kappa-Fission? logical, intent(in) :: get_fiss ! Should we get fiss data? - integer, intent(in) :: max_order ! Maximum requested order + integer, intent(in) :: max_order ! Maximum requested order + integer, intent(in) :: i_listing ! Index of listings array end subroutine mgxs_init_file_ subroutine mgxs_print_(this, unit) @@ -59,7 +72,7 @@ module mgxs_header integer, optional, intent(in) :: unit end subroutine mgxs_print_ - function mgxs_get_xs_(this, xstype, gin, gout, uvw, mu) result(xs) + function mgxs_get_xs_(this,xstype,gin,gout,uvw,mu) result(xs) import Mgxs class(Mgxs), intent(in) :: this character(*), intent(in) :: xstype ! Cross Section Type @@ -70,7 +83,7 @@ module mgxs_header real(8) :: xs ! Resultant xs end function mgxs_get_xs_ - pure function mgxs_calc_f_(this, gin, gout, mu, uvw, iazi, ipol) result(f) + pure function mgxs_calc_f_(this,gin,gout,mu,uvw,iazi,ipol) result(f) import Mgxs class(Mgxs), intent(in) :: this integer, intent(in) :: gin ! Incoming Energy Group @@ -83,17 +96,18 @@ module mgxs_header end function mgxs_calc_f_ - subroutine mgxs_combine_(this, mat, nuclides, groups, get_kfiss, get_fiss, & - max_order, scatt_type) - import Mgxs, Material, NuclideMGContainer, MAX_LINE_LEN + subroutine mgxs_combine_(this,mat,nuclides,groups,get_kfiss,get_fiss, & + max_order,scatt_type,i_listing) + import Mgxs, Material, MgxsContainer class(Mgxs), intent(inout) :: this ! The Mgxs to initialize type(Material), pointer, intent(in) :: mat ! base material - type(NuclideMGContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from - integer, intent(in) :: groups ! Number of E groups - logical, intent(in) :: get_kfiss ! Should we get kfiss data? - logical, intent(in) :: get_fiss ! Should we get fiss data? - integer, intent(in) :: max_order ! Maximum requested order + type(MgxsContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from + integer, intent(in) :: groups ! Number of E groups + logical, intent(in) :: get_kfiss ! Should we get kfiss data? + logical, intent(in) :: get_fiss ! Should we get fiss data? + integer, intent(in) :: max_order ! Maximum requested order integer, intent(in) :: scatt_type ! Legendre or Tabular Scatt? + integer, intent(in) :: i_listing ! Index in listings end subroutine mgxs_combine_ function mgxs_sample_fission_(this, gin, uvw) result(gout) @@ -118,9 +132,9 @@ module mgxs_header subroutine mgxs_calculate_xs_(this, gin, uvw, xs) import Mgxs, MaterialMacroXS class(Mgxs), intent(in) :: this - integer, intent(in) :: gin ! Incoming neutron group - real(8), intent(in) :: uvw(3) ! Incoming neutron direction - type(MaterialMacroXS), intent(inout) :: xs + integer, intent(in) :: gin ! Incoming neutron group + real(8), intent(in) :: uvw(3) ! Incoming neutron direction + type(MaterialMacroXS), intent(inout) :: xs ! Resultant Mgxs Data end subroutine mgxs_calculate_xs_ end interface @@ -144,7 +158,7 @@ module mgxs_header procedure :: init_file => mgxsiso_init_file ! Initialize Nuclidic MGXS Data procedure :: print => mgxsiso_print ! Writes nuclide info procedure :: get_xs => mgxsiso_get_xs ! Gets Size of Data w/in Object - ! procedure :: combine => mgxsiso_combine ! inits object + procedure :: combine => mgxsiso_combine ! inits object procedure :: sample_fission_energy => mgxsiso_sample_fission_energy procedure :: sample_scatter => mgxsiso_sample_scatter procedure :: calculate_xs => mgxsiso_calculate_xs @@ -175,20 +189,12 @@ module mgxs_header procedure :: init_file => mgxsang_init_file ! Initialize Nuclidic MGXS Data procedure :: print => mgxsang_print ! Writes nuclide info procedure :: get_xs => mgxsang_get_xs ! Gets Size of Data w/in Object - ! procedure :: combine => mgxsang_combine ! inits object + procedure :: combine => mgxsang_combine ! inits object procedure :: sample_fission_energy => mgxsang_sample_fission_energy procedure :: sample_scatter => mgxsang_sample_scatter procedure :: calculate_xs => mgxsang_calculate_xs end type MgxsAngle -!=============================================================================== -! MGXSCONTAINER pointer array for storing Nuclides -!=============================================================================== - - type MgxsContainer - class(Mgxs), pointer :: obj - end type MgxsContainer - contains !=============================================================================== @@ -197,9 +203,10 @@ module mgxs_header ! the xsdata object node itself. !=============================================================================== - subroutine mgxs_init_file(this, node_xsdata) + subroutine mgxs_init_file(this,node_xsdata,i_listing) class(Mgxs), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml + integer, intent(in) :: i_listing ! Index in listings array character(MAX_LINE_LEN) :: temp_str @@ -214,7 +221,7 @@ module mgxs_header if (check_for_node(node_xsdata, "zaid")) then call get_node_value(node_xsdata, "zaid", this % zaid) else - this % zaid = -1 + this % zaid = 0 end if if (check_for_node(node_xsdata, "scatt_type")) then call get_node_value(node_xsdata, "scatt_type", temp_str) @@ -244,15 +251,20 @@ module mgxs_header call fatal_error("Fissionable element must be set!") end if + ! Keep track of what listing is associated with this nuclide + this % listing = i_listing + end subroutine mgxs_init_file - subroutine mgxsiso_init_file(this,node_xsdata,groups,get_kfiss,get_fiss,max_order) + subroutine mgxsiso_init_file(this,node_xsdata,groups,get_kfiss,get_fiss, & + max_order,i_listing) class(MgxsIso), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml integer, intent(in) :: groups ! Number of Energy groups logical, intent(in) :: get_kfiss ! Need Kappa-Fission? logical, intent(in) :: get_fiss ! Need fiss data? integer, intent(in) :: max_order ! Maximum requested order + integer, intent(in) :: i_listing ! Index in listings array type(Node), pointer :: node_legendre_mu character(MAX_LINE_LEN) :: temp_str @@ -267,7 +279,7 @@ module mgxs_header integer :: legendre_mu_points, imu ! Call generic data gathering routine (will populate the metadata) - call mgxs_init_file(this, node_xsdata) + call mgxs_init_file(this,node_xsdata,i_listing) ! Load the more specific data allocate(this % nu_fission(groups)) @@ -530,13 +542,15 @@ module mgxs_header end subroutine mgxsiso_init_file - subroutine mgxsang_init_file(this,node_xsdata,groups,get_kfiss,get_fiss,max_order) + subroutine mgxsang_init_file(this,node_xsdata,groups,get_kfiss,get_fiss, & + max_order,i_listing) class(MgxsAngle), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml integer, intent(in) :: groups ! Number of Energy groups logical, intent(in) :: get_kfiss ! Need Kappa-Fission? logical, intent(in) :: get_fiss ! Should we get fiss data? integer, intent(in) :: max_order ! Maximum requested order + integer, intent(in) :: i_listing ! Index in listings array type(Node), pointer :: node_legendre_mu character(MAX_LINE_LEN) :: temp_str @@ -551,7 +565,7 @@ module mgxs_header integer :: legendre_mu_points, imu, ipol, iazi ! Call generic data gathering routine (will populate the metadata) - call mgxs_init_file(this, node_xsdata) + call mgxs_init_file(this,node_xsdata,i_listing) if (check_for_node(node_xsdata, "num_polar")) then call get_node_value(node_xsdata, "num_polar", this % n_pol) @@ -927,13 +941,18 @@ module mgxs_header character(MAX_LINE_LEN) :: temp_str ! Basic nuclide information - write(unit_,*) 'MGXS Entry ' // trim(this % name) + write(unit_,*) 'MGXS Entry: ' // trim(this % name) if (this % zaid > 0) then - ! Dont print if data was macroscopic and thus zaid & AWR would be nonsense - write(unit_,*) ' zaid = ' // trim(to_str(this % zaid)) - write(unit_,*) ' awr = ' // trim(to_str(this % awr)) + write(unit_,*) ' ZAID = ' // trim(to_str(this % zaid)) + else if (this % zaid < 0) then + write(unit_,*) ' Material id = ' // trim(to_str(-this % zaid)) + end if + if (this % awr > ZERO) then + write(unit_,*) ' AWR = ' // trim(to_str(this % awr)) + end if + if (this % kT > ZERO) then + write(unit_,*) ' kT = ' // trim(to_str(this % kT)) end if - write(unit_,*) ' kT = ' // trim(to_str(this % kT)) if (this % scatt_type == ANGLE_LEGENDRE) then temp_str = "Legendre" write(unit_,*) ' Scattering Type = ' // trim(temp_str) @@ -941,7 +960,7 @@ module mgxs_header type is (MgxsIso) temp_str = to_str(size(this % scatter % dist(1) % data,dim=1) - 1) end select - write(unit_,*) ' Scattering Order = ' // trim(temp_str) + write(unit_,*) ' Scattering Order = ' // trim(temp_str) else if (this % scatt_type == ANGLE_HISTOGRAM) then temp_str = "Histogram" write(unit_,*) ' Scattering Type = ' // trim(temp_str) @@ -949,7 +968,7 @@ module mgxs_header type is (MgxsIso) temp_str = to_str(size(this % scatter % dist(1) % data,dim=1)) end select - write(unit_,*) ' Num. Distribution Bins = ' // trim(temp_str) + write(unit_,*) ' Num. Distribution Bins = ' // trim(temp_str) else if (this % scatt_type == ANGLE_TABULAR) then temp_str = "Tabular" write(unit_,*) ' Scattering Type = ' // trim(temp_str) @@ -957,7 +976,7 @@ module mgxs_header type is (MgxsIso) temp_str = to_str(size(this % scatter % dist(1) % data,dim=1)) end select - write(unit_,*) ' Num. Distribution Points = ' // trim(temp_str) + write(unit_,*) ' Num. Distribution Points = ' // trim(temp_str) end if write(unit_,*) ' Fissionable = ', this % fissionable @@ -1073,7 +1092,7 @@ module mgxs_header !=============================================================================== function mgxsiso_get_xs(this, xstype, gin, gout, uvw, mu) result(xs) - class(MgxsIso), intent(in) :: this ! The MacroXS to initialize + class(MgxsIso), intent(in) :: this ! The Mgxs to initialize character(*) , intent(in) :: xstype ! Type of xs requested integer, intent(in) :: gin ! Incoming Energy group integer, optional, intent(in) :: gout ! Outgoing Energy group @@ -1117,7 +1136,7 @@ module mgxs_header case('mult') if (present(gout)) then if (gout < this % scatter % gmin(gin) .or. & - gout > this % scatter % gmax(gin)) then + gout > this % scatter % gmax(gin)) then xs = ZERO else xs = this % scatter % mult(gin) % data(gout) @@ -1131,7 +1150,7 @@ module mgxs_header case('f_mu', 'f_mu/mult') if (present(gout) .and. present(mu)) then if (gout < this % scatter % gmin(gin) .or. & - gout > this % scatter % gmax(gin)) then + gout > this % scatter % gmax(gin)) then xs = ZERO else xs = this % scatter % calc_f(gin, gout, mu) @@ -1153,7 +1172,7 @@ module mgxs_header end function mgxsiso_get_xs function mgxsang_get_xs(this, xstype, gin, gout, uvw, mu) result(xs) - class(MgxsAngle), intent(in) :: this ! The MacroXS to initialize + class(MgxsAngle), intent(in) :: this ! The Mgxs to initialize character(*) , intent(in) :: xstype ! Type of xs requested integer, intent(in) :: gin ! Incoming Energy group integer, optional, intent(in) :: gout ! Outgoing Energy group @@ -1201,7 +1220,7 @@ module mgxs_header case('mult') if (present(gout)) then if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & - gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then + gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then xs = ZERO else xs = this % scatter(iazi,ipol) % obj % mult(gin) % data(gout) @@ -1215,7 +1234,7 @@ module mgxs_header case('f_mu', 'f_mu/mult') if (present(gout) .and. present(mu)) then if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & - gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then + gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then xs = ZERO else xs = this % scatter(iazi,ipol) % obj % calc_f(gin, gout, mu) @@ -1245,16 +1264,41 @@ module mgxs_header ! objects !=============================================================================== - subroutine mgxsiso_combine(this, mat, nuclides, groups, get_kfiss, get_fiss, & - max_order, scatt_type) - class(MgxsIso), intent(inout) :: this ! The MacroXS to initialize + subroutine mgxs_combine(this,mat,scatt_type,i_listing) + class(Mgxs), intent(inout) :: this ! The Mgxs to initialize + type(Material), pointer, intent(in) :: mat ! base material + integer, intent(in) :: scatt_type ! How is data presented + integer, intent(in) :: i_listing ! Index in listings + + ! Fill in meta-data from material information + if (mat % name == "") then + this % name = trim(to_str(mat % id)) + else + this % name = mat % name + end if + this % zaid = -mat % id + this % listing = i_listing + this % fissionable = mat % fissionable + this % scatt_type = scatt_type + + ! The following info we should initialize, but we dont need it nor + ! does it have guaranteed meaning. + this % awr = -ONE + this % kT = -ONE + + end subroutine mgxs_combine + + subroutine mgxsiso_combine(this,mat,nuclides,groups,get_kfiss,get_fiss, & + max_order,scatt_type,i_listing) + class(MgxsIso), intent(inout) :: this ! The Mgxs to initialize type(Material), pointer, intent(in) :: mat ! base material type(MgxsContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from - integer, intent(in) :: groups ! Number of E groups - logical, intent(in) :: get_kfiss ! Should we get kfiss data? - logical, intent(in) :: get_fiss ! Should we get fiss data? - integer, intent(in) :: max_order ! Maximum requested order + integer, intent(in) :: groups ! Number of E groups + logical, intent(in) :: get_kfiss ! Should we get kfiss data? + logical, intent(in) :: get_fiss ! Should we get fiss data? + integer, intent(in) :: max_order ! Maximum requested order integer, intent(in) :: scatt_type ! How is data presented + integer, intent(in) :: i_listing ! Index in listings integer :: i ! loop index over nuclides integer :: gin, gout ! group indices @@ -1264,6 +1308,9 @@ module mgxs_header real(8), allocatable :: temp_mult(:,:) real(8), allocatable :: scatt_coeffs(:,:,:) + ! Set the meta-data + call mgxs_combine(this,mat,scatt_type,i_listing) + ! Determine the scattering type of our data and ensure all scattering orders ! are the same. select type(nuc => nuclides(mat % nuclide(1)) % obj) @@ -1387,7 +1434,7 @@ module mgxs_header nuc % scatter % get_matrix(min(nuc_order_dim,order_dim)) type is (MgxsAngle) - call fatal_error("Invalid Passing of MgxsAngle to MacroXSIso Object") + call fatal_error("Invalid Passing of MgxsAngle to MgxsIso Object") end select end do @@ -1409,16 +1456,17 @@ module mgxs_header end subroutine mgxsiso_combine - subroutine mgxsang_combine(this, mat, nuclides, groups, get_kfiss, get_fiss, & - max_order, scatt_type) - class(MgxsAngle), intent(inout) :: this ! The MacroXS to initialize + subroutine mgxsang_combine(this,mat,nuclides,groups,get_kfiss,get_fiss, & + max_order,scatt_type,i_listing) + class(MgxsAngle), intent(inout) :: this ! The Mgxs to initialize type(Material), pointer, intent(in) :: mat ! base material type(MgxsContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from - integer, intent(in) :: groups ! Number of E groups - logical, intent(in) :: get_kfiss ! Should we get kfiss data? - logical, intent(in) :: get_fiss ! Should we get fiss data? - integer, intent(in) :: max_order ! Maximum requested order + integer, intent(in) :: groups ! Number of E groups + logical, intent(in) :: get_kfiss ! Should we get kfiss data? + logical, intent(in) :: get_fiss ! Should we get fiss data? + integer, intent(in) :: max_order ! Maximum requested order integer, intent(in) :: scatt_type ! Legendre or Tabular Scatt? + integer, intent(in) :: i_listing ! Index in listings integer :: i ! loop index over nuclides integer :: gin, gout ! group indices @@ -1429,6 +1477,9 @@ module mgxs_header real(8), allocatable :: temp_mult(:,:,:,:) real(8), allocatable :: scatt_coeffs(:,:,:,:,:) + ! Set the meta-data + call mgxs_combine(this,mat,scatt_type,i_listing) + ! Get the number of each polar and azi angles and make sure all the ! NuclideAngle types have the same number of these angles n_pol = -1 @@ -1557,7 +1608,7 @@ module mgxs_header ! Perform our operations which depend upon the type select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (MgxsIso) - call fatal_error("Invalid Passing of MgxsIso to MacroXSAngle Object") + call fatal_error("Invalid Passing of MgxsIso to MgxsAngle Object") type is (MgxsAngle) ! Add contributions to total, absorption, and fission data (if necessary) this % total = this % total + atom_density * nuc % total @@ -1712,10 +1763,10 @@ module mgxs_header !=============================================================================== subroutine mgxsiso_calculate_xs(this, gin, uvw, xs) - class(MgxsIso), intent(in) :: this + class(MgxsIso), intent(in) :: this integer, intent(in) :: gin ! Incoming neutron group real(8), intent(in) :: uvw(3) ! Incoming neutron direction - type(MaterialMacroXS), intent(inout) :: xs ! Resultant MacroXS Data + type(MaterialMacroXS), intent(inout) :: xs ! Resultant Mgxs Data xs % total = this % total(gin) xs % elastic = this % scatter % scattxs(gin) @@ -1725,10 +1776,10 @@ module mgxs_header end subroutine mgxsiso_calculate_xs subroutine mgxsang_calculate_xs(this, gin, uvw, xs) - class(MgxsAngle), intent(in) :: this + class(MgxsAngle), intent(in) :: this integer, intent(in) :: gin ! Incoming neutron group real(8), intent(in) :: uvw(3) ! Incoming neutron direction - type(MaterialMacroXS), intent(inout) :: xs ! Resultant MacroXS Data + type(MaterialMacroXS), intent(inout) :: xs ! Resultant Mgxs Data integer :: iazi, ipol diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index e964e970d8..9600e67398 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -7,7 +7,6 @@ module nuclide_header use endf, only: reaction_name use error, only: fatal_error use list_header, only: ListInt - use math, only: evaluate_legendre, find_angle use scattdata_header use string use xml_interface @@ -15,12 +14,12 @@ module nuclide_header implicit none !=============================================================================== -! Nuclide contains the base nuclidic data for a nuclide, which does not depend -! upon how the nuclear data is represented (i.e., CE, or any variant of MG). -! The extended types, NuclideCE and NuclideMG deal with the rest +! Nuclide contains the base nuclidic data for a nuclide described as needed +! for continuous-energy neutron transport. !=============================================================================== - type, abstract :: Nuclide + type :: Nuclide + ! Nuclide meta-data character(12) :: name ! name of nuclide, e.g. 92235.03c integer :: zaid ! Z and A identifier, e.g. 92235 real(8) :: awr ! Atomic Weight Ratio @@ -30,19 +29,6 @@ module nuclide_header ! Fission information logical :: fissionable ! nuclide is fissionable? - contains - procedure(nuclide_print_), deferred :: print ! Writes nuclide info - end type Nuclide - - abstract interface - subroutine nuclide_print_(this, unit) - import Nuclide - class(Nuclide),intent(in) :: this - integer, optional, intent(in) :: unit - end subroutine nuclide_print_ - end interface - - type, extends(Nuclide) :: NuclideCE ! Energy grid information integer :: n_grid ! # of nuclide grid points integer, allocatable :: grid_index(:) ! log grid mapping indices @@ -99,120 +85,13 @@ module nuclide_header ! array; used at tally-time contains - procedure :: clear => nuclidece_clear - procedure :: print => nuclidece_print - end type NuclideCE - - type, abstract, extends(Nuclide) :: NuclideMG - integer :: scatt_type ! either legendre, histogram, or tabular. - contains - procedure(nuclidemg_init_), deferred :: init ! Initialize the data - procedure(nuclidemg_get_xs_), deferred :: get_xs ! Get the requested xs - end type NuclideMG - - abstract interface - - subroutine nuclidemg_init_(this, node_xsdata, groups, get_kfiss, get_fiss, & - max_order) - import NuclideMG, Node - class(NuclideMG), intent(inout) :: this ! Working Object - type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml - integer, intent(in) :: groups ! Number of Energy groups - logical, intent(in) :: get_kfiss ! Need Kappa-Fission? - logical, intent(in) :: get_fiss ! Should we get fiss data? - integer, intent(in) :: max_order ! Maximum requested order - end subroutine nuclidemg_init_ - - function nuclidemg_get_xs_(this, xstype, gin, gout, uvw, mu, iazi, ipol) & - result(xs) - import NuclideMG - class(NuclideMG), intent(in) :: this - character(*), intent(in) :: xstype ! Cross Section Type - integer, intent(in) :: gin ! Incoming Energy group - integer, optional, intent(in) :: gout ! Outgoing Group - real(8), optional, intent(in) :: uvw(3) ! Requested Angle - real(8), optional, intent(in) :: mu ! Change in angle - integer, optional, intent(in) :: iazi ! Azimuthal Index - integer, optional, intent(in) :: ipol ! Polar Index - real(8) :: xs ! Resultant xs - end function nuclidemg_get_xs_ - - pure function nuclidemg_calc_f_(this, gin, gout, mu, uvw, iazi, ipol) result(f) - import NuclideMG - class(NuclideMG), intent(in) :: this - integer, intent(in) :: gin ! Incoming Energy Group - integer, intent(in) :: gout ! Outgoing Energy Group - real(8), intent(in) :: mu ! Angle of interest - real(8), intent(in), optional :: uvw(3) ! Direction vector - integer, intent(in), optional :: iazi ! Incoming Energy Group - integer, intent(in), optional :: ipol ! Outgoing Energy Group - real(8) :: f ! Return value of f(mu) - - end function nuclidemg_calc_f_ - end interface - -!=============================================================================== -! NuclideIso contains the base MGXS data for a nuclide specifically for -! isotropically weighted MGXS -!=============================================================================== - - type, extends(NuclideMG) :: NuclideIso - - ! Microscopic cross sections - real(8), allocatable :: total(:) ! total cross section - real(8), allocatable :: absorption(:) ! absorption cross section - class(ScattData), allocatable :: scatter ! scattering information - real(8), allocatable :: nu_fission(:,:) ! fission matrix (Gout x Gin) - real(8), allocatable :: k_fission(:) ! kappa-fission - real(8), allocatable :: fission(:) ! neutron production - real(8), allocatable :: chi(:) ! Fission Spectra - - contains - procedure :: init => nuclideiso_init ! Initialize Nuclidic MGXS Data - procedure :: print => nuclideiso_print ! Writes nuclide info - procedure :: get_xs => nuclideiso_get_xs ! Gets Size of Data w/in Object - end type NuclideIso - -!=============================================================================== -! NuclideAngle contains the base MGXS data for a nuclide specifically for -! explicit angle-dependent weighted MGXS -!=============================================================================== - - type, extends(NuclideMG) :: NuclideAngle - - ! Microscopic cross sections. Dimensions are: (n_pol, n_azi, Nl, Ng, Ng) - real(8), allocatable :: total(:,:,:) ! total cross section - real(8), allocatable :: absorption(:,:,:) ! absorption cross section - type(ScattDataContainer), allocatable :: scatter(:,:) ! scattering information - real(8), allocatable :: nu_fission(:,:,:,:) ! fission matrix (Gout x Gin) - real(8), allocatable :: k_fission(:,:,:) ! kappa-fission - real(8), allocatable :: fission(:,:,:) ! neutron production - real(8), allocatable :: chi(:,:,:) ! Fission Spectra - real(8), allocatable :: mult(:,:,:,:) ! Scatter multiplicity (Gout x Gin) - - ! In all cases, right-most indices are theta, phi - integer :: n_pol ! Number of polar angles - integer :: n_azi ! Number of azimuthal angles - real(8), allocatable :: polar(:) ! polar angles - real(8), allocatable :: azimuthal(:) ! azimuthal angles - - contains - procedure :: init => nuclideangle_init ! Initialize Nuclidic MGXS Data - procedure :: print => nuclideangle_print ! Gets Size of Data w/in Object - procedure :: get_xs => nuclideangle_get_xs ! Gets Size of Data w/in Object - end type NuclideAngle - -!=============================================================================== -! NUCLIDEMGCONTAINER pointer array for storing Nuclides -!=============================================================================== - - type NuclideMGContainer - class(NuclideMG), pointer :: obj - end type NuclideMGContainer + procedure :: clear => nuclide_clear + procedure :: print => nuclide_print + end type Nuclide !=============================================================================== ! NUCLIDE0K temporarily contains all 0K cross section data and other parameters -! needed to treat resonance scattering before transferring them to NuclideCE +! needed to treat resonance scattering before transferring them to Nuclide !=============================================================================== type Nuclide0K @@ -285,667 +164,13 @@ module nuclide_header contains !=============================================================================== -! NUCLIDE_*_INIT reads in the data from the XML file, as already accessed -!=============================================================================== - - subroutine nuclidemg_init(this, node_xsdata) - class(NuclideMG), intent(inout) :: this ! Working Object - type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml - - character(MAX_LINE_LEN) :: temp_str - - ! Load the nuclide metadata - call get_node_value(node_xsdata, "name", this % name) - this % name = to_lower(this % name) - if (check_for_node(node_xsdata, "kT")) then - call get_node_value(node_xsdata, "kT", this % kT) - else - this % kT = ZERO - end if - if (check_for_node(node_xsdata, "zaid")) then - call get_node_value(node_xsdata, "zaid", this % zaid) - else - this % zaid = -1 - end if - if (check_for_node(node_xsdata, "scatt_type")) then - call get_node_value(node_xsdata, "scatt_type", temp_str) - temp_str = trim(to_lower(temp_str)) - if (temp_str == 'legendre') then - this % scatt_type = ANGLE_LEGENDRE - else if (temp_str == 'histogram') then - this % scatt_type = ANGLE_HISTOGRAM - else if (temp_str == 'tabular') then - this % scatt_type = ANGLE_TABULAR - else - call fatal_error("Invalid Scatt Type Option!") - end if - else - this % scatt_type = ANGLE_LEGENDRE - end if - - if (check_for_node(node_xsdata, "fissionable")) then - call get_node_value(node_xsdata, "fissionable", temp_str) - temp_str = to_lower(temp_str) - if (trim(temp_str) == 'true' .or. trim(temp_str) == '1') then - this % fissionable = .true. - else - this % fissionable = .false. - end if - else - call fatal_error("Fissionable element must be set!") - end if - - end subroutine nuclidemg_init - - subroutine nuclideiso_init(this, node_xsdata, groups, get_kfiss, get_fiss, & - max_order) - class(NuclideIso), intent(inout) :: this ! Working Object - type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml - integer, intent(in) :: groups ! Number of Energy groups - logical, intent(in) :: get_kfiss ! Need Kappa-Fission? - logical, intent(in) :: get_fiss ! Need fiss data? - integer, intent(in) :: max_order ! Maximum requested order - - type(Node), pointer :: node_legendre_mu - character(MAX_LINE_LEN) :: temp_str - logical :: enable_leg_mu - real(8), allocatable :: temp_arr(:) - real(8), allocatable :: temp_mult(:,:) - real(8), allocatable :: scatt_coeffs(:,:,:) - real(8), allocatable :: input_scatt(:,:,:) - real(8), allocatable :: temp_scatt(:,:,:) - real(8) :: dmu, mu, norm - integer :: order, order_dim, gin, gout, l, arr_len - integer :: legendre_mu_points, imu - - ! Call generic data gathering routine (will populate the metadata) - call nuclidemg_init(this, node_xsdata) - - ! Load the more specific data - if (this % fissionable) then - - if (check_for_node(node_xsdata,"chi")) then - ! Get chi - allocate(this % chi(groups)) - call get_node_array(node_xsdata,"chi",this % chi) - - ! Get nu_fission (as a vector) - if (check_for_node(node_xsdata,"nu_fission")) then - allocate(temp_arr(1 * groups)) - call get_node_array(node_xsdata,"nu_fission",temp_arr) - allocate(this % nu_fission(1,groups)) - this % nu_fission = reshape(temp_arr,(/1,groups/)) - deallocate(temp_arr) - else - call fatal_error("If fissionable, must provide nu_fission!") - end if - - else - ! Get nu_fission (as a matrix) - if (check_for_node(node_xsdata,"nu_fission")) then - - allocate(temp_arr(groups*groups)) - call get_node_array(node_xsdata,"nu_fission",temp_arr) - allocate(this % nu_fission(groups, groups)) - this % nu_fission = reshape(temp_arr,(/groups,groups/)) - deallocate(temp_arr) - else - call fatal_error("If fissionable, must provide nu_fission!") - end if - end if - ! If we have a need* for the fission and kappa-fission x/s, get them - ! (*Need is defined as will be using it to tally) - if (get_fiss) then - allocate(this % fission(groups)) - if (check_for_node(node_xsdata,"fission")) then - call get_node_array(node_xsdata,"fission",this % fission) - else - call fatal_error("Fission data missing, required due to fission& - & tallies in tallies.xml file!") - end if - end if - if (get_kfiss) then - allocate(this % k_fission(groups)) - if (check_for_node(node_xsdata,"kappa_fission")) then - call get_node_array(node_xsdata,"kappa_fission",this % k_fission) - else - call fatal_error("kappa_fission data missing, required due to & - &kappa-fission tallies in tallies.xml file!") - end if - end if - end if - - allocate(this % absorption(groups)) - if (check_for_node(node_xsdata,"absorption")) then - call get_node_array(node_xsdata,"absorption",this % absorption) - else - call fatal_error("Must provide absorption!") - end if - - ! Get multiplication data if present - allocate(temp_mult(groups, groups)) - if (check_for_node(node_xsdata,"multiplicity")) then - arr_len = get_arraysize_double(node_xsdata,"multiplicity") - if (arr_len == groups * groups) then - allocate(temp_arr(arr_len)) - call get_node_array(node_xsdata,"multiplicity",temp_arr) - temp_mult = reshape(temp_arr, (/groups, groups/)) - deallocate(temp_arr) - else - call fatal_error("Multiplicity length not same as number of groups& - & squared!") - end if - else - temp_mult = ONE - end if - - ! Get scattering treatment information - ! Tabular_legendre tells us if we are to treat the provided - ! Legendre polynomials as tabular data (if enable is true) or leaving - ! them as Legendres (if enable is false, or the default) - - ! Set the default (leave as Legendre polynomials) - enable_leg_mu = .false. - if (check_for_node(node_xsdata,"tabular_legendre")) then - call get_node_ptr(node_xsdata,"tabular_legendre",node_legendre_mu) - if (check_for_node(node_legendre_mu, "enable")) then - call get_node_value(node_legendre_mu,"enable",temp_str) - temp_str = trim(to_lower(temp_str)) - if (temp_str == 'true' .or. temp_str == '1') then - enable_leg_mu = .true. - elseif (temp_str == 'false' .or. temp_str == '0') then - enable_leg_mu = .false. - else - call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) - end if - end if - ! Ok, so if we need to convert to a tabular form, get the user provided - ! number of points - if (enable_leg_mu) then - if (check_for_node(node_legendre_mu,"num_points")) then - call get_node_value(node_legendre_mu,"num_points", & - legendre_mu_points) - if (legendre_mu_points <= 0) & - call fatal_error("num_points element must be positive& - & and non-zero!") - else - ! Set the default number of points (0.0625 spacing) - legendre_mu_points = 33 - end if - end if - end if - - ! Get the library's value for the order - if (check_for_node(node_xsdata,"order")) then - call get_node_value(node_xsdata,"order",order) - else - call fatal_error("Order Must Be Provided!") - end if - - ! Before retrieving the data, store the dimensionality of the data in - ! order_dim. For Legendre data, we usually refer to it as Pn where - ! n is the order. However Pn has n+1 sets of points (since you need to - ! the count the P0 moment). Adjust for that. Histogram and Tabular - ! formats dont need this adjustment. - if (this % scatt_type == ANGLE_LEGENDRE) then - order_dim = order + 1 - else - order_dim = order - end if - - ! The input is gathered in the more user-friendly facing format of - ! Gout x Gin x Order. We will get it in that format in input_scatt, - ! but then need to convert it to a more useful ordering for processing - ! (Order x Gout x Gin). - allocate(input_scatt(groups, groups, order_dim)) - if (check_for_node(node_xsdata,"scatter")) then - allocate(temp_arr(groups * groups * order_dim)) - call get_node_array(node_xsdata,"scatter",temp_arr) - input_scatt = reshape(temp_arr,(/groups,groups,order_dim/)) - deallocate(temp_arr) - - ! Compare the number of orders given with the maximum order of the - ! problem. Strip off the supefluous orders if needed. - if (this % scatt_type == ANGLE_LEGENDRE) then - order = min(order_dim - 1, max_order) - order_dim = order + 1 - end if - allocate(temp_scatt(groups,groups,order_dim)) - temp_scatt(:,:,:) = input_scatt(:,:,1:order_dim) - - ! Take input format (groups, groups, order) and convert to - ! the more useful format needed for scattdata: (order, groups, groups) - ! However, if scatt_type was ANGLE_LEGENDRE (i.e., the data was - ! provided as Legendre coefficients), and the user requested that - ! these legendres be converted to tabular form (note this is also - ! the default behavior), convert that now. - if (this % scatt_type == ANGLE_LEGENDRE .and. enable_leg_mu) then - ! Convert input parameters to what we need for the rest. - this % scatt_type = ANGLE_TABULAR - order_dim = legendre_mu_points - order = order_dim - dmu = TWO / real(order - 1,8) - - allocate(scatt_coeffs(order_dim,groups,groups)) - do gin = 1, groups - do gout = 1, groups - norm = ZERO - do imu = 1, order_dim - if (imu == 1) then - mu = -ONE - else if (imu == order_dim) then - mu = ONE - else - mu = -ONE + real(imu - 1,8) * dmu - end if - scatt_coeffs(imu,gout,gin) = & - evaluate_legendre(temp_scatt(gout,gin,:),mu) - ! Ensure positivity of distribution - if (scatt_coeffs(imu,gout,gin) < ZERO) & - scatt_coeffs(imu,gout,gin) = ZERO - ! And accrue the integral - if (imu > 1) then - norm = norm + HALF * dmu * (scatt_coeffs(imu-1,gout,gin) + & - scatt_coeffs(imu,gout,gin)) - end if - end do - ! Now that we have the integral, lets ensure that the distribution - ! is normalized such that it preserves the original scattering xs - if (norm > ZERO) then - scatt_coeffs(:,gout,gin) = scatt_coeffs(:,gout,gin) * & - temp_scatt(gout,gin,1) / norm - end if - end do - end do - else - ! Sticking with current representation, carry forward but change - ! the array ordering - allocate(scatt_coeffs(order_dim,groups,groups)) - do gin = 1, groups - do gout = 1, groups - do l = 1, order_dim - scatt_coeffs(l,gout,gin) = temp_scatt(gout,gin,l) - end do - end do - end do - end if - deallocate(temp_scatt) - else - call fatal_error("Must provide scatter!") - end if - - ! Allocate and initialize our ScattData Object. - if (this % scatt_type == ANGLE_HISTOGRAM) then - allocate(ScattDataHistogram :: this % scatter) - else if (this % scatt_type == ANGLE_TABULAR) then - allocate(ScattDataTabular :: this % scatter) - else if (this % scatt_type == ANGLE_LEGENDRE) then - allocate(ScattDataLegendre :: this % scatter) - end if - - ! Initialize the ScattData Object - call this % scatter % init(temp_mult, scatt_coeffs) - - ! Get, or infer, total xs data. - allocate(this % total(groups)) - if (check_for_node(node_xsdata,"total")) then - call get_node_array(node_xsdata,"total",this % total) - else - this % total = this % absorption + this % scatter % scattxs - end if - - ! Deallocate temporaries for the next material - deallocate(input_scatt,scatt_coeffs,temp_mult) - - end subroutine nuclideiso_init - - subroutine nuclideangle_init(this, node_xsdata, groups, get_kfiss, get_fiss, & - max_order) - class(NuclideAngle), intent(inout) :: this ! Working Object - type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml - integer, intent(in) :: groups ! Number of Energy groups - logical, intent(in) :: get_kfiss ! Need Kappa-Fission? - logical, intent(in) :: get_fiss ! Should we get fiss data? - integer, intent(in) :: max_order ! Maximum requested order - - type(Node), pointer :: node_legendre_mu - character(MAX_LINE_LEN) :: temp_str - logical :: enable_leg_mu - real(8), allocatable :: temp_arr(:) - real(8), allocatable :: temp_mult(:,:,:,:) - real(8), allocatable :: scatt_coeffs(:,:,:,:,:) - real(8), allocatable :: input_scatt(:,:,:,:,:) - real(8), allocatable :: temp_scatt(:,:,:,:,:) - real(8) :: dmu, mu, norm, dangle - integer :: order, order_dim, gin, gout, l, arr_len - integer :: legendre_mu_points, imu, ipol, iazi - - ! Call generic data gathering routine (will populate the metadata) - call nuclidemg_init(this, node_xsdata) - - if (check_for_node(node_xsdata, "num_polar")) then - call get_node_value(node_xsdata, "num_polar", this % n_pol) - else - call fatal_error("num_polar Must Be Provided!") - end if - - if (check_for_node(node_xsdata, "num_azimuthal")) then - call get_node_value(node_xsdata, "num_azimuthal", this % n_azi) - else - call fatal_error("num_azimuthal Must Be Provided!") - end if - - ! Load angle data, if present (else equally spaced) - allocate(this % polar(this % n_pol)) - allocate(this % azimuthal(this % n_azi)) - if (check_for_node(node_xsdata, "polar")) then - call fatal_error("User-Specified polar angle bins not yet supported!") - ! When this feature is supported, this line will be activated - call get_node_array(node_xsdata, "polar", this % polar) - else - dangle = PI / real(this % n_pol,8) - do ipol = 1, this % n_pol - this % polar(ipol) = (real(ipol,8) - HALF) * dangle - end do - end if - if (check_for_node(node_xsdata, "azimuthal")) then - call fatal_error("User-Specified azimuthal angle bins not yet supported!") - ! When this feature is supported, this line will be activated - call get_node_array(node_xsdata, "azimuthal", this % azimuthal) - else - dangle = TWO * PI / real(this % n_azi,8) - do iazi = 1, this % n_azi - this % azimuthal(iazi) = -PI + (real(iazi,8) - HALF) * dangle - end do - end if - - ! Load the more specific data - if (this % fissionable) then - - if (check_for_node(node_xsdata,"chi")) then - ! Get chi - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata,"chi",temp_arr) - allocate(this % chi(groups,this % n_azi,this % n_pol)) - this % chi = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) - deallocate(temp_arr) - - ! Get nu_fission (as a vector) - if (check_for_node(node_xsdata,"nu_fission")) then - allocate(temp_arr(1 * groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata,"nu_fission", temp_arr) - allocate(this % nu_fission(1,groups,this % n_azi,this % n_pol)) - this % nu_fission = reshape(temp_arr, (/1,groups,this % n_azi, & - this % n_pol/)) - deallocate(temp_arr) - else - call fatal_error("If fissionable, must provide nu_fission!") - end if - - else - ! Get nu_fission (as a matrix) - if (check_for_node(node_xsdata,"nu_fission")) then - - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata,"nu_fission",temp_arr) - allocate(this % nu_fission(groups,groups,this % n_azi,this % n_pol)) - this % nu_fission = reshape(temp_arr,(/groups,groups, & - this % n_azi,this % n_pol/)) - deallocate(temp_arr) - else - call fatal_error("If fissionable, must provide nu_fission!") - end if - end if - ! If we have a need* for the fission and kappa-fission x/s, get them - ! (*Need is defined as will be using it to tally) - if (get_fiss) then - if (check_for_node(node_xsdata,"fission")) then - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata,"fission",temp_arr) - allocate(this % fission(groups,this % n_azi,this % n_pol)) - this % fission = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) - deallocate(temp_arr) - else - call fatal_error("Fission data missing, required due to fission& - & tallies in tallies.xml file!") - end if - end if - if (get_kfiss) then - if (check_for_node(node_xsdata,"kappa_fission")) then - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata,"kappa_fission",temp_arr) - allocate(this % k_fission(groups,this % n_azi,this % n_pol)) - this % k_fission = reshape(temp_arr,(/groups, this % n_azi,this % n_pol/)) - deallocate(temp_arr) - else - call fatal_error("kappa_fission data missing, required due to & - &kappa-fission tallies in tallies.xml file!") - end if - end if - end if - - if (check_for_node(node_xsdata,"absorption")) then - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata,"absorption",temp_arr) - allocate(this % absorption(groups,this % n_azi,this % n_pol)) - this % absorption = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) - deallocate(temp_arr) - else - call fatal_error("Must provide absorption!") - end if - - ! Get multiplication data if present - allocate(temp_mult(groups,groups,this % n_azi,this % n_pol)) - if (check_for_node(node_xsdata,"multiplicity")) then - arr_len = get_arraysize_double(node_xsdata,"multiplicity") - if (arr_len == groups * groups * this % n_azi * this % n_pol) then - allocate(temp_arr(arr_len)) - call get_node_array(node_xsdata,"multiplicity",temp_arr) - temp_mult = reshape(temp_arr,(/groups,groups,this % n_azi,this % n_pol/)) - deallocate(temp_arr) - else - call fatal_error("Multiplicity length not same as number of groups& - & squared!") - end if - else - temp_mult = ONE - end if - - ! Get scattering treatment information - ! Tabular_legendre tells us if we are to treat the provided - ! Legendre polynomials as tabular data (if enable is true) or leaving - ! them as Legendres (if enable is false, or the default) - - ! Set the default (leave as Legendre polynomials) - enable_leg_mu = .false. - if (check_for_node(node_xsdata,"tabular_legendre")) then - call get_node_ptr(node_xsdata,"tabular_legendre",node_legendre_mu) - if (check_for_node(node_legendre_mu, "enable")) then - call get_node_value(node_legendre_mu,"enable",temp_str) - temp_str = trim(to_lower(temp_str)) - if (temp_str == 'true' .or. temp_str == '1') then - enable_leg_mu = .true. - elseif (temp_str == 'false' .or. temp_str == '0') then - enable_leg_mu = .false. - else - call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) - end if - end if - ! Ok, so if we need to convert to a tabular form, get the user provided - ! number of points - if (enable_leg_mu) then - if (check_for_node(node_legendre_mu,"num_points")) then - call get_node_value(node_legendre_mu,"num_points", & - legendre_mu_points) - if (legendre_mu_points <= 0) & - call fatal_error("num_points element must be positive& - & and non-zero!") - else - ! Set the default number of points (0.0625 spacing) - legendre_mu_points = 33 - end if - end if - end if - - ! Get the library's value for the order - if (check_for_node(node_xsdata,"order")) then - call get_node_value(node_xsdata,"order",order) - else - call fatal_error("Order Must Be Provided!") - end if - - ! Before retrieving the data, store the dimensionality of the data in - ! order_dim. For Legendre data, we usually refer to it as Pn where - ! n is the order. However Pn has n+1 sets of points (since you need to - ! the count the P0 moment). Adjust for that. Histogram and Tabular - ! formats dont need this adjustment. - if (this % scatt_type == ANGLE_LEGENDRE) then - order_dim = order + 1 - else - order_dim = order - end if - - ! The input is gathered in the more user-friendly facing format of - ! Gout x Gin x Order x Azi x Pol. We will get it in that format in - ! input_scatt, but then need to convert it to a more useful ordering - ! for processing (Order x Gout x Gin x Azi x Pol). - allocate(input_scatt(groups,groups,order_dim,this % n_azi,this % n_pol)) - if (check_for_node(node_xsdata,"scatter")) then - allocate(temp_arr(groups * groups * order_dim * this % n_azi * & - this % n_pol)) - call get_node_array(node_xsdata,"scatter",temp_arr) - input_scatt = reshape(temp_arr,(/groups,groups,order_dim,this % n_azi, & - this % n_pol/)) - deallocate(temp_arr) - - ! Compare the number of orders given with the maximum order of the - ! problem. Strip off the supefluous orders if needed. - if (this % scatt_type == ANGLE_LEGENDRE) then - order = min(order_dim - 1, max_order) - order_dim = order + 1 - end if - - allocate(temp_scatt(groups,groups,order_dim,this % n_azi,this % n_pol)) - temp_scatt(:,:,:,:,:) = input_scatt(:,:,1:order_dim,:,:) - - ! Take input format (groups, groups, order) and convert to - ! the more useful format needed for scattdata: (order, groups, groups) - ! However, if scatt_type was ANGLE_LEGENDRE (i.e., the data was - ! provided as Legendre coefficients), and the user requested that - ! these legendres be converted to tabular form (note this is also - ! the default behavior), convert that now. - if (this % scatt_type == ANGLE_LEGENDRE .and. enable_leg_mu) then - - ! Convert input parameters to what we need for the rest. - this % scatt_type = ANGLE_TABULAR - order_dim = legendre_mu_points - order = order_dim - dmu = TWO / real(order - 1,8) - - allocate(scatt_coeffs(order_dim,groups,groups,this % n_azi,this % n_pol)) - do ipol = 1, this % n_pol - do iazi = 1, this % n_azi - do gin = 1, groups - do gout = 1, groups - norm = ZERO - do imu = 1, order_dim - if (imu == 1) then - mu = -ONE - else if (imu == order_dim) then - mu = ONE - else - mu = -ONE + real(imu - 1,8) * dmu - end if - scatt_coeffs(imu,gout,gin,iazi,ipol) = & - evaluate_legendre(temp_scatt(gout,gin,:,iazi,ipol),mu) - ! Ensure positivity of distribution - if (scatt_coeffs(imu,gout,gin,iazi,ipol) < ZERO) & - scatt_coeffs(imu,gout,gin,iazi,ipol) = ZERO - ! And accrue the integral - if (imu > 1) then - norm = norm + HALF * dmu * & - (scatt_coeffs(imu-1,gout,gin,iazi,ipol) + & - scatt_coeffs(imu,gout,gin,iazi,ipol)) - end if - end do - ! Now that we have the integral, lets ensure that the distribution - ! is normalized such that it preserves the original scattering xs - if (norm > ZERO) then - scatt_coeffs(:,gout,gin,iazi,ipol) = & - scatt_coeffs(:,gout,gin,iazi,ipol) * & - temp_scatt(gout,gin,1,iazi,ipol) / norm - end if - end do - end do - end do - end do - else - ! Sticking with current representation, carry forward but change - ! the array ordering - allocate(scatt_coeffs(order_dim,groups,groups,this % n_azi,this % n_pol)) - do ipol = 1, this % n_pol - do iazi = 1, this % n_azi - do gin = 1, groups - do gout = 1, groups - do l = 1, order_dim - scatt_coeffs(l,gout,gin,iazi,ipol) = & - temp_scatt(gout,gin,l,iazi,ipol) - end do - end do - end do - end do - end do - end if - deallocate(temp_scatt) - else - call fatal_error("Must provide scatter!") - end if - - allocate(this % scatter(this % n_azi, this % n_pol)) - do ipol = 1, this % n_pol - do iazi = 1, this % n_azi - ! Allocate and initialize our ScattData Object. - if (this % scatt_type == ANGLE_HISTOGRAM) then - allocate(ScattDataHistogram :: this % scatter(iazi,ipol) % obj) - else if (this % scatt_type == ANGLE_TABULAR) then - allocate(ScattDataTabular :: this % scatter(iazi,ipol) % obj) - else if (this % scatt_type == ANGLE_LEGENDRE) then - allocate(ScattDataLegendre :: this % scatter(iazi,ipol) % obj) - end if - - ! Initialize the ScattData Object - call this % scatter(iazi,ipol) % obj % init(& - temp_mult(:,:,iazi,ipol), scatt_coeffs(:,:,:,iazi,ipol)) - end do - end do - ! Deallocate temporaries for the next material - deallocate(input_scatt,scatt_coeffs,temp_mult) - - allocate(this % total(groups,this % n_azi,this % n_pol)) - if (check_for_node(node_xsdata,"total")) then - allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata,"total",temp_arr) - this % total = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) - deallocate(temp_arr) - else - do ipol = 1, this % n_pol - do iazi = 1, this % n_azi - this % total(:,iazi,ipol) = this % absorption(:,iazi,ipol) + & - this % scatter(iazi,ipol) % obj % scattxs(:) - end do - end do - end if - - end subroutine nuclideangle_init - -!=============================================================================== -! NUCLIDECE_CLEAR resets and deallocates data in Nuclide, NuclideIso +! NUCLIDE_CLEAR resets and deallocates data in Nuclide, NuclideIso ! or NuclideAngle !=============================================================================== - subroutine nuclidece_clear(this) + subroutine nuclide_clear(this) - class(NuclideCE), intent(inout) :: this ! The Nuclide object to clear + class(Nuclide), intent(inout) :: this ! The Nuclide object to clear integer :: i ! Loop counter @@ -959,15 +184,15 @@ module nuclide_header call this % reaction_index % clear() - end subroutine nuclidece_clear + end subroutine nuclide_clear !=============================================================================== -! NUCLIDE*_PRINT displays information about a continuous-energy neutron +! NUCLIDE_PRINT displays information about a continuous-energy neutron ! cross_section table and its reactions and secondary angle/energy distributions !=============================================================================== - subroutine nuclidece_print(this, unit) - class(NuclideCE), intent(in) :: this + subroutine nuclide_print(this, unit) + class(Nuclide), intent(in) :: this integer, intent(in), optional :: unit integer :: i ! loop index over nuclides @@ -1040,298 +265,6 @@ module nuclide_header ! Blank line at end of nuclide write(unit_,*) - end subroutine nuclidece_print - - subroutine nuclidemg_print(this, unit_) - class(NuclideMG), intent(in) :: this - integer, intent(in) :: unit_ - - character(MAX_LINE_LEN) :: temp_str - - ! Basic nuclide information - write(unit_,*) 'Nuclide ' // trim(this % name) - if (this % zaid > 0) then - ! Dont print if data was macroscopic and thus zaid & AWR would be nonsense - write(unit_,*) ' zaid = ' // trim(to_str(this % zaid)) - write(unit_,*) ' awr = ' // trim(to_str(this % awr)) - end if - write(unit_,*) ' kT = ' // trim(to_str(this % kT)) - if (this % scatt_type == ANGLE_LEGENDRE) then - temp_str = "Legendre" - write(unit_,*) ' Scattering Type = ' // trim(temp_str) - select type(this) - type is (NuclideIso) - temp_str = to_str(size(this % scatter % dist(1) % data,dim=1) - 1) - end select - write(unit_,*) ' Scattering Order = ' // trim(temp_str) - else if (this % scatt_type == ANGLE_HISTOGRAM) then - temp_str = "Histogram" - write(unit_,*) ' Scattering Type = ' // trim(temp_str) - select type(this) - type is (NuclideIso) - temp_str = to_str(size(this % scatter % dist(1) % data,dim=1)) - end select - write(unit_,*) ' Num. Distribution Bins = ' // trim(temp_str) - else if (this % scatt_type == ANGLE_TABULAR) then - temp_str = "Tabular" - write(unit_,*) ' Scattering Type = ' // trim(temp_str) - select type(this) - type is (NuclideIso) - temp_str = to_str(size(this % scatter % dist(1) % data,dim=1)) - end select - write(unit_,*) ' Num. Distribution Points = ' // trim(temp_str) - end if - write(unit_,*) ' Fissionable = ', this % fissionable - - end subroutine nuclidemg_print - - subroutine nuclideiso_print(this, unit) - - class(NuclideIso), intent(in) :: this - integer, optional, intent(in) :: unit - - integer :: unit_ ! unit to write to - integer :: size_total, size_scattmat, size_mgxs - integer :: gin - - ! set default unit for writing information - if (present(unit)) then - unit_ = unit - else - unit_ = OUTPUT_UNIT - end if - - ! Write Basic Nuclide Information - call nuclidemg_print(this, unit_) - - ! Determine size of mgxs and scattering matrices - size_scattmat = 0 - do gin = 1, size(this % scatter % energy) - size_scattmat = size_scattmat + & - 2 * size(this % scatter % energy(gin) % data) + & - size(this % scatter % dist(gin) % data) - end do - size_scattmat = size_scattmat + size(this % scatter % scattxs) - size_scattmat = size_scattmat * 8 - - size_mgxs = size(this % total) + size(this % absorption) + & - size(this % nu_fission) + size(this % k_fission) + & - size(this % fission) + size(this % chi) - size_mgxs = size_mgxs * 8 - - ! Calculate total memory - size_total = size_scattmat + size_mgxs - - ! Write memory used - write(unit_,*) ' Memory Requirements' - write(unit_,*) ' Cross sections = ' // trim(to_str(size_mgxs)) // ' bytes' - write(unit_,*) ' Scattering Matrices = ' // & - trim(to_str(size_scattmat)) // ' bytes' - write(unit_,*) ' Total = ' // trim(to_str(size_total)) // ' bytes' - - ! Blank line at end of nuclide - write(unit_,*) - - end subroutine nuclideiso_print - - subroutine nuclideangle_print(this, unit) - - class(NuclideAngle), intent(in) :: this - integer, optional, intent(in) :: unit - - integer :: unit_ ! unit to write to - integer :: size_total, size_scattmat, size_mgxs - integer :: ipol, iazi, gin - - ! set default unit for writing information - if (present(unit)) then - unit_ = unit - else - unit_ = OUTPUT_UNIT - end if - - ! Write Basic Nuclide Information - call nuclidemg_print(this, unit_) - write(unit_,*) ' # of Polar Angles = ' // trim(to_str(this % n_pol)) - write(unit_,*) ' # of Azimuthal Angles = ' // trim(to_str(this % n_azi)) - - ! Determine size of mgxs and scattering matrices - size_scattmat = 0 - do ipol = 1, this % n_pol - do iazi = 1, this % n_azi - do gin = 1, size(this % scatter(iazi,ipol) % obj % energy) - size_scattmat = size_scattmat + & - 2 * size(this % scatter(iazi,ipol) % obj % energy(gin) % data) + & - size(this % scatter(iazi,ipol) % obj % dist(gin) % data) - end do - size_scattmat = size_scattmat + & - size(this % scatter(iazi,ipol) % obj % scattxs) - end do - end do - size_scattmat = size_scattmat * 8 - - size_scattmat = (size(this % scatter) + size(this % mult)) * 8 - size_mgxs = size(this % total) + size(this % absorption) + & - size(this % nu_fission) + size(this % k_fission) + & - size(this % fission) + size(this % chi) - size_mgxs = size_mgxs * 8 - - ! Calculate total memory - size_total = size_scattmat + size_mgxs - - ! Write memory used - write(unit_,*) ' Memory Requirements' - write(unit_,*) ' Cross sections = ' // trim(to_str(size_mgxs)) // ' bytes' - write(unit_,*) ' Scattering Matrices = ' // & - trim(to_str(size_scattmat)) // ' bytes' - write(unit_,*) ' Total = ' // trim(to_str(size_total)) // ' bytes' - - ! Blank line at end of nuclide - write(unit_,*) - - - end subroutine nuclideangle_print - -!=============================================================================== -! NUCLIDE*_GET_XS Returns the requested data type -!=============================================================================== - - function nuclideiso_get_xs(this, xstype, gin, gout, uvw, mu, iazi, ipol) & - result(xs) - class(NuclideIso), intent(in) :: this - character(*), intent(in) :: xstype ! Cross Section Type - integer, intent(in) :: gin ! Incoming Energy group - integer, optional, intent(in) :: gout ! Outgoing Group - real(8), optional, intent(in) :: uvw(3) ! Requested Angle - real(8), optional, intent(in) :: mu ! Change in angle - integer, optional, intent(in) :: iazi ! Azimuthal Index - integer, optional, intent(in) :: ipol ! Polar Index - real(8) :: xs ! Resultant xs - - xs = ZERO - - if ((xstype == 'nu_fission' .or. xstype == 'fission' .or. xstype =='chi' & - .or. xstype =='kappa_fission') .and. (.not. this % fissionable)) then - return - end if - - if (present(gout)) then - select case(xstype) - case('mult') - xs = this % scatter % mult(gin) % data(gout) - case('nu_fission') - xs = this % nu_fission(gout,gin) - case('f_mu', 'f_mu/mult') - if (gout < this % scatter % gmin(gin) .or. & - gout > this % scatter % gmax(gin)) then - xs = ZERO - else - xs = this % scatter % calc_f(gin, gout, mu) - if (xstype == 'f_mu/mult') then - xs = xs / this % scatter % mult(gin) % data(gout) - end if - end if - end select - else - select case(xstype) - case('total') - xs = this % total(gin) - case('absorption') - xs = this % absorption(gin) - case('nu_fission') - xs = sum(this % nu_fission(:,gin)) - case('fission') - xs = this % fission(gin) - case('kappa_fission') - if (allocated(this % k_fission)) then - xs = this % k_fission(gin) - end if - case('chi') - xs = this % chi(gin) - case('scatter') - xs = this % scatter % scattxs(gin) - case('mult') - xs = dot_product(this % scatter % mult(gin) % data, & - this % scatter % scattxs(gin) * & - this % scatter % energy(gin) % data) - xs = xs / this % scatter % scattxs(gin) - end select - end if - end function nuclideiso_get_xs - - function nuclideangle_get_xs(this, xstype, gin, gout, uvw, mu, iazi, ipol) & - result(xs) - class(NuclideAngle), intent(in) :: this - character(*), intent(in) :: xstype ! Cross Section Type - integer, intent(in) :: gin ! Incoming Energy group - integer, optional, intent(in) :: gout ! Outgoing Group - real(8), optional, intent(in) :: uvw(3) ! Requested Angle - real(8), optional, intent(in) :: mu ! Change in angle - integer, optional, intent(in) :: iazi ! Azimuthal Index - integer, optional, intent(in) :: ipol ! Polar Index - real(8) :: xs ! Resultant xs - - integer :: iazi_, ipol_ - - xs = ZERO - - if ((xstype == 'nu_fission' .or. xstype == 'fission' .or. xstype =='chi' & - .or. xstype =='kappa_fission') .and. (.not. this % fissionable)) then - return - end if - - if (present(iazi) .and. present(ipol)) then - iazi_ = iazi - ipol_ = ipol - else - call find_angle(this % polar, this % azimuthal, uvw, iazi_, ipol_) - end if - - if (present(gout)) then - select case(xstype) - case('mult') - xs = this % scatter(iazi_,ipol_) % obj % mult(gin) % data(gout) - case('nu_fission') - xs = this % nu_fission(gout,gin,iazi_,ipol_) - case('chi') - xs = this % chi(gout,iazi_,ipol_) - case('f_mu', 'f_mu/mult') - if (gout < this % scatter(iazi_,ipol_) % obj % gmin(gin) .or. & - gout > this % scatter(iazi_,ipol_) % obj % gmax(gin)) then - xs = ZERO - else - xs = this % scatter(iazi_,ipol_) % obj % calc_f(gin,gout,mu) - if (xstype == 'f_mu/mult') then - xs = xs / this % scatter(iazi_,ipol_) % obj % mult(gin) % data(gout) - end if - end if - end select - else - select case(xstype) - case('total') - xs = this % total(gin,iazi_,ipol_) - case('absorption') - xs = this % absorption(gin,iazi_,ipol_) - case('nu_fission') - xs = sum(this % nu_fission(:,gin,iazi_,ipol_)) - case('fission') - xs = this % fission(gin,iazi_,ipol_) - case('kappa_fission') - if (allocated(this % k_fission)) then - xs = this % k_fission(gin,iazi_,ipol_) - end if - case('chi') - xs = this % chi(gin,iazi_,ipol_) - case('scatter') - xs = this % scatter(iazi_,ipol_) % obj % scattxs(gin) - case('mult') - xs = dot_product(this % scatter(iazi_,ipol_) % obj % mult(gin) % data, & - this % scatter(iazi_,ipol_) % obj % scattxs(gin) * & - this % scatter(iazi_,ipol_) % obj % energy(gin) % data) - xs = xs / this % scatter(iazi_,ipol_) % obj % scattxs(gin) - end select - end if - - end function nuclideangle_get_xs + end subroutine nuclide_print end module nuclide_header diff --git a/src/output.F90 b/src/output.F90 index 768f197757..1b41458006 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -336,10 +336,10 @@ contains ! Open log file for writing open(NEWUNIT=unit_xs, FILE=path, STATUS='replace', ACTION='write') - ! Write header - call header("CROSS SECTION TABLES", unit=unit_xs) - if (run_CE) then + ! Write header + call header("CROSS SECTION TABLES", unit=unit_xs) + NUCLIDE_LOOP: do i = 1, n_nuclides_total ! Print information about nuclide call nuclides(i) % print(unit=unit_xs) @@ -350,10 +350,17 @@ contains call sab_tables(i) % print(unit=unit_xs) end do SAB_TABLES_LOOP else + ! Write header + call header("MGXS LIBRARY TABLES", unit=unit_xs) NuclideMG_LOOP: do i = 1, n_nuclides_total ! Print information about nuclide call nuclides_mg(i) % obj % print(unit=unit_xs) end do NuclideMG_LOOP + call header("MATERIAL MGXS TABLES", unit=unit_xs) + MATERIAL_LOOP: do i = 1, n_materials + ! Print information about Materials + call macro_xs(i) % obj % print(unit=unit_xs) + end do MATERIAL_LOOP end if ! Close cross section summary file diff --git a/src/physics.F90 b/src/physics.F90 index 6fda4c393c..38d73348ac 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -82,7 +82,7 @@ contains integer :: i_nuclide ! index in nuclides array integer :: i_nuc_mat ! index in material's nuclides array integer :: i_reaction ! index in nuc % reactions array - type(NuclideCE), pointer :: nuc + type(Nuclide), pointer :: nuc call sample_nuclide(p, 'total ', i_nuclide, i_nuc_mat) @@ -205,7 +205,7 @@ contains real(8) :: f real(8) :: prob real(8) :: cutoff - type(NuclideCE), pointer :: nuc + type(Nuclide), pointer :: nuc ! Get pointer to nuclide nuc => nuclides(i_nuclide) @@ -303,7 +303,7 @@ contains real(8) :: uvw_new(3) ! outgoing uvw for iso-in-lab scattering real(8) :: uvw_old(3) ! incoming uvw for iso-in-lab scattering real(8) :: phi ! azimuthal angle for iso-in-lab scattering - type(NuclideCE), pointer :: nuc + type(Nuclide), pointer :: nuc ! copy incoming direction uvw_old(:) = p % coord(1) % uvw @@ -418,7 +418,7 @@ contains real(8) :: v_cm(3) ! velocity of center-of-mass real(8) :: v_t(3) ! velocity of target nucleus real(8) :: uvw_cm(3) ! directional cosines in center-of-mass - type(NuclideCE), pointer :: nuc + type(Nuclide), pointer :: nuc ! get pointer to nuclide nuc => nuclides(i_nuclide) @@ -744,7 +744,7 @@ contains !=============================================================================== subroutine sample_target_velocity(nuc, v_target, E, uvw, v_neut, wgt, xs_eff) - type(NuclideCE), intent(in) :: nuc ! target nuclide at temperature T + type(Nuclide), intent(in) :: nuc ! target nuclide at temperature T real(8), intent(out) :: v_target(3) ! target velocity real(8), intent(in) :: v_neut(3) ! neutron velocity real(8), intent(in) :: E ! particle energy @@ -989,7 +989,7 @@ contains !=============================================================================== subroutine sample_cxs_target_velocity(nuc, v_target, E, uvw) - type(NuclideCE), intent(in) :: nuc ! target nuclide at temperature + type(Nuclide), intent(in) :: nuc ! target nuclide at temperature real(8), intent(out) :: v_target(3) real(8), intent(in) :: E real(8), intent(in) :: uvw(3) @@ -1077,7 +1077,7 @@ contains real(8) :: phi ! fission neutron azimuthal angle real(8) :: weight ! weight adjustment for ufs method logical :: in_mesh ! source site in ufs mesh? - type(NuclideCE), pointer :: nuc + type(Nuclide), pointer :: nuc ! Get pointers nuc => nuclides(i_nuclide) @@ -1187,7 +1187,7 @@ contains function sample_fission_energy(nuc, rxn, p) result(E_out) - type(NuclideCE), intent(in) :: nuc + type(Nuclide), intent(in) :: nuc type(Reaction), intent(in) :: rxn type(Particle), intent(inout) :: p ! Particle causing fission real(8) :: E_out ! outgoing energy of fission neutron @@ -1300,7 +1300,7 @@ contains !=============================================================================== subroutine inelastic_scatter(nuc, rxn, p) - type(NuclideCE), intent(in) :: nuc + type(Nuclide), intent(in) :: nuc type(Reaction), intent(in) :: rxn type(Particle), intent(inout) :: p diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index 209808dc97..a72b3878db 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -5,9 +5,9 @@ module physics_mg use constants use error, only: fatal_error, warning use global - use macroxs_header, only: MacroXS, MacroXSContainer use material_header, only: Material use math, only: rotate_angle + use mgxs_header, only: Mgxs, MgxsContainer use mesh, only: get_mesh_indices use output, only: write_message use particle_header, only: Particle @@ -179,7 +179,7 @@ contains real(8) :: phi ! fission neutron azimuthal angle real(8) :: weight ! weight adjustment for ufs method logical :: in_mesh ! source site in ufs mesh? - class(MacroXS), pointer :: xs + class(Mgxs), pointer :: xs ! Get Pointers xs => macro_xs(p % material) % obj diff --git a/src/tracking.F90 b/src/tracking.F90 index e634112bc6..dc9497389f 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -7,7 +7,6 @@ module tracking cross_lattice, check_cell_overlap use geometry_header, only: Universe, BASE_UNIVERSE use global - use macroxs_header, only: MacroXS use output, only: write_message use particle_header, only: LocalCoord, Particle use physics, only: collision From ed6a91753daaa8dbe30c40105443ac900192cb2e Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 14 Mar 2016 20:53:48 -0400 Subject: [PATCH 380/650] Finished tallying code, i hope, cleaned up some code --- src/mgxs_data.F90 | 23 +---- src/mgxs_header.F90 | 66 ++++++------ src/particle_header.F90 | 2 +- src/tally.F90 | 223 ++++++++++++++++++++-------------------- src/tracking.F90 | 1 + 5 files changed, 153 insertions(+), 162 deletions(-) diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 283024e294..def214d67e 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -70,7 +70,8 @@ contains if (tallies(i) % score_bins(l) == SCORE_KAPPA_FISSION) then get_kfiss = .true. end if - if (tallies(i) % score_bins(l) == SCORE_FISSION) then + if (tallies(i) % score_bins(l) == SCORE_FISSION .or. & + tallies(i) % score_bins(l) == SCORE_NU_FISSION) then get_fiss = .true. end if end do @@ -166,26 +167,8 @@ contains integer :: i ! loop index over nuclides integer :: l ! Loop over score bins type(Material), pointer :: mat ! current material - logical :: get_kfiss, get_fiss integer :: scatt_type - ! Find out if we need fission & kappa fission - ! (i.e., are there any SCORE_FISSION or SCORE_KAPPA_FISSION tallies?) - get_kfiss = .false. - get_fiss = .false. - do i = 1, n_tallies - do l = 1, tallies(i) % n_score_bins - if (tallies(i) % score_bins(l) == SCORE_KAPPA_FISSION) then - get_kfiss = .true. - end if - if (tallies(i) % score_bins(l) == SCORE_FISSION) then - get_fiss = .true. - end if - end do - if (get_kfiss .and. get_fiss) & - exit - end do - allocate(macro_xs(n_materials)) do i_mat = 1, n_materials @@ -204,7 +187,7 @@ contains allocate(MgxsAngle :: macro_xs(i_mat) % obj) end select call macro_xs(i_mat) % obj % combine(mat,nuclides_MG,energy_groups, & - get_kfiss,get_fiss,max_order,scatt_type,i_mat) + max_order,scatt_type,i_mat) end do end subroutine create_macro_xs diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index c87b37ce22..908f19c8b1 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -96,15 +96,13 @@ module mgxs_header end function mgxs_calc_f_ - subroutine mgxs_combine_(this,mat,nuclides,groups,get_kfiss,get_fiss, & - max_order,scatt_type,i_listing) + subroutine mgxs_combine_(this,mat,nuclides,groups,max_order,scatt_type, & + i_listing) import Mgxs, Material, MgxsContainer class(Mgxs), intent(inout) :: this ! The Mgxs to initialize type(Material), pointer, intent(in) :: mat ! base material type(MgxsContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from integer, intent(in) :: groups ! Number of E groups - logical, intent(in) :: get_kfiss ! Should we get kfiss data? - logical, intent(in) :: get_fiss ! Should we get fiss data? integer, intent(in) :: max_order ! Maximum requested order integer, intent(in) :: scatt_type ! Legendre or Tabular Scatt? integer, intent(in) :: i_listing ! Index in listings @@ -529,6 +527,13 @@ module mgxs_header ! Initialize the ScattData Object call this % scatter % init(temp_mult, scatt_coeffs) + ! Check sigA to ensure it is not 0 since it is + ! often divided by in the tally routines + ! (This may happen with Helium data) + do gin = 1, groups + if (this % absorption(gin) == ZERO) this % absorption(gin) = 1E-10_8 + end do + ! Get, or infer, total xs data. allocate(this % total(groups)) if (check_for_node(node_xsdata,"total")) then @@ -540,6 +545,13 @@ module mgxs_header ! Deallocate temporaries for the next material deallocate(input_scatt,scatt_coeffs,temp_mult) + ! Finally, check sigT to ensure it is not 0 since it is + ! often divided by in the tally routines + do gin = 1, groups + if (this % total(gin) == ZERO) this % total(gin) = 1E-10_8 + end do + + end subroutine mgxsiso_init_file subroutine mgxsang_init_file(this,node_xsdata,groups,get_kfiss,get_fiss, & @@ -1288,14 +1300,12 @@ module mgxs_header end subroutine mgxs_combine - subroutine mgxsiso_combine(this,mat,nuclides,groups,get_kfiss,get_fiss, & - max_order,scatt_type,i_listing) + subroutine mgxsiso_combine(this,mat,nuclides,groups,max_order,scatt_type, & + i_listing) class(MgxsIso), intent(inout) :: this ! The Mgxs to initialize type(Material), pointer, intent(in) :: mat ! base material type(MgxsContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from integer, intent(in) :: groups ! Number of E groups - logical, intent(in) :: get_kfiss ! Should we get kfiss data? - logical, intent(in) :: get_fiss ! Should we get fiss data? integer, intent(in) :: max_order ! Maximum requested order integer, intent(in) :: scatt_type ! How is data presented integer, intent(in) :: i_listing ! Index in listings @@ -1377,14 +1387,10 @@ module mgxs_header this % total = ZERO allocate(this % absorption(groups)) this % absorption = ZERO - if (get_fiss) then - allocate(this % fission(groups)) - this % fission = ZERO - end if - if (get_kfiss) then - allocate(this % k_fission(groups)) - this % k_fission = ZERO - end if + allocate(this % fission(groups)) + this % fission = ZERO + allocate(this % k_fission(groups)) + this % k_fission = ZERO allocate(this % nu_fission(groups)) this % nu_fission = ZERO allocate(this % chi(groups,groups)) @@ -1410,10 +1416,10 @@ module mgxs_header this % chi = this % chi + atom_density * nuc % chi this % nu_fission = this % nu_fission + atom_density * & nuc % nu_fission - if (get_fiss) then + if (allocated(nuc % fission)) then this % fission = this % fission + atom_density * nuc % fission end if - if (get_kfiss) then + if (allocated(nuc % k_fission)) then this % k_fission = this % k_fission + atom_density * nuc % k_fission end if end if @@ -1456,14 +1462,12 @@ module mgxs_header end subroutine mgxsiso_combine - subroutine mgxsang_combine(this,mat,nuclides,groups,get_kfiss,get_fiss, & - max_order,scatt_type,i_listing) + subroutine mgxsang_combine(this,mat,nuclides,groups,max_order,scatt_type,& + i_listing) class(MgxsAngle), intent(inout) :: this ! The Mgxs to initialize type(Material), pointer, intent(in) :: mat ! base material type(MgxsContainer), intent(in) :: nuclides(:) ! List of nuclides to harvest from integer, intent(in) :: groups ! Number of E groups - logical, intent(in) :: get_kfiss ! Should we get kfiss data? - logical, intent(in) :: get_fiss ! Should we get fiss data? integer, intent(in) :: max_order ! Maximum requested order integer, intent(in) :: scatt_type ! Legendre or Tabular Scatt? integer, intent(in) :: i_listing ! Index in listings @@ -1583,14 +1587,10 @@ module mgxs_header this % total = ZERO allocate(this % absorption(groups,n_azi,n_pol)) this % absorption = ZERO - if (get_fiss) then - allocate(this % fission(groups,n_azi,n_pol)) - this % fission = ZERO - end if - if (get_kfiss) then - allocate(this % k_fission(groups,n_azi,n_pol)) - this % k_fission = ZERO - end if + allocate(this % fission(groups,n_azi,n_pol)) + this % fission = ZERO + allocate(this % k_fission(groups,n_azi,n_pol)) + this % k_fission = ZERO allocate(this % nu_fission(groups,n_azi,n_pol)) this % nu_fission = ZERO allocate(this % chi(groups,groups,n_azi,n_pol)) @@ -1618,10 +1618,10 @@ module mgxs_header this % chi = this % chi + atom_density * nuc % chi this % nu_fission = this % nu_fission + atom_density * & nuc % nu_fission - if (get_fiss) then + if (allocated(nuc % fission)) then this % fission = this % fission + atom_density * nuc % fission end if - if (get_kfiss) then + if (allocated(nuc % k_fission)) then this % k_fission = this % k_fission + atom_density * nuc % k_fission end if end if @@ -1771,6 +1771,7 @@ module mgxs_header xs % total = this % total(gin) xs % elastic = this % scatter % scattxs(gin) xs % absorption = this % absorption(gin) + xs % fission = this % fission(gin) xs % nu_fission = this % nu_fission(gin) end subroutine mgxsiso_calculate_xs @@ -1787,6 +1788,7 @@ module mgxs_header xs % total = this % total(gin,iazi,ipol) xs % elastic = this % scatter(iazi,ipol) % obj % scattxs(gin) xs % absorption = this % absorption(gin,iazi,ipol) + xs % fission = this % fission(gin,iazi,ipol) xs % nu_fission = this % nu_fission(gin,iazi,ipol) end subroutine mgxsang_calculate_xs diff --git a/src/particle_header.F90 b/src/particle_header.F90 index 8544cb38bb..6b29727684 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -232,7 +232,7 @@ contains this % n_secondary = n this % secondary_bank(this % n_secondary) % E = this % E if (.not. run_CE) then - this % secondary_bank(this % n_secondary) % E = real(this % g, 8) + this % secondary_bank(this % n_secondary) % E = real(this % g,8) end if end subroutine create_secondary diff --git a/src/tally.F90 b/src/tally.F90 index d23cd86919..a69af2260d 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -810,10 +810,9 @@ contains integer :: score_bin ! scoring bin, e.g. SCORE_FLUX integer :: score_index ! scoring bin index real(8) :: score ! analog tally score - real(8) :: macro_total ! material macro total xs - real(8) :: macro_scatt ! material macro scatt xs - real(8) :: micro_abs ! nuclidic microscopic abs real(8) :: p_uvw(3) ! Particle's current uvw + class(Mgxs), pointer :: matxs + class(Mgxs), pointer :: nucxs ! Set the direction to use with get_xs if (t % estimator == ESTIMATOR_ANALOG) then @@ -822,6 +821,14 @@ contains p_uvw = p % coord(p % n_coord) % uvw end if + ! To significantly reduce de-referencing, point matxs to the + ! macroscopic Mgxs for the material of interest + matxs => macro_xs(p % material) % obj + ! Do same for nucxs, point it to the microscopic nuclide data of interest + if (i_nuclide > 0) then + nucxs => nuclides_MG(i_nuclide) % obj + end if + i = 0 SCORE_LOOP: do q = 1, t % n_user_score_bins i = i + 1 @@ -867,16 +874,23 @@ contains ! We need to account for the fact that some weight was already ! absorbed score = p % last_wgt + p % absorb_wgt + if (i_nuclide > 0) then + score = score * atom_density * & + nucxs % get_xs('total',p % last_g,UVW=p_uvw) / & + matxs % get_xs('total',p % last_g,UVW=p_uvw) + end if else score = p % last_wgt + if (i_nuclide > 0) then + score = score * atom_density * & + nucxs % get_xs('total',p % g,UVW=p_uvw) / & + matxs % get_xs('total',p % g,UVW=p_uvw) + end if end if else if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs('total',p % g,UVW=p_uvw) * & - atom_density * flux - end associate + score = nucxs % get_xs('total',p % g,UVW=p_uvw) * atom_density * flux else score = material_xs % total * flux end if @@ -921,28 +935,22 @@ contains score = p % last_wgt if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = score * nuc % get_xs('f_mu',p % last_g,p % g, & - UVW=p_uvw,MU=p % mu) / & - macro_xs(p % material) % obj % get_xs('f_mu',p % last_g, & - p % g, UVW=p_uvw, & - MU=p % mu) - end associate + score = score * atom_density * & + nucxs % get_xs('f_mu',p % last_g,p % g,UVW=p_uvw,MU=p % mu) / & + matxs % get_xs('f_mu',p % last_g,p % g,UVW=p_uvw,MU=p % mu) end if else ! Note SCORE_SCATTER_N not available for tracklength/collision. if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs('scatter',p % g,UVW=p_uvw) * & - atom_density * flux / & - nuc % get_xs('mult',p % g,UVW=p_uvw) - end associate + score = nucxs % get_xs('scatter',p % g,UVW=p_uvw) * & + atom_density * flux / & + nucxs % get_xs('mult',p % g,UVW=p_uvw) else ! Get the scattering x/s (stored in % elastic) and take away ! the multiplication baked in to sigS score = material_xs % elastic * flux / & - macro_xs(p % material) % obj % get_xs('mult',p % g,UVW=p_uvw) + matxs % get_xs('mult',p % g,UVW=p_uvw) end if end if @@ -966,22 +974,16 @@ contains score = p % wgt if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = score * nuc % get_xs('f_mu',p % last_g,p % g, & - UVW=p_uvw,MU=p % mu) / & - macro_xs(p % material) % obj % get_xs('f_mu',p % last_g, & - p % g, UVW=p_uvw, & - MU=p % mu) - end associate + score = score * atom_density * & + nucxs % get_xs('f_mu',p % last_g,p % g,UVW=p_uvw,MU=p % mu) / & + matxs % get_xs('f_mu',p % last_g,p % g,UVW=p_uvw,MU=p % mu) end if else ! Note SCORE_NU_SCATTER_* not available for tracklength/collision. if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs('scatter',p % g,UVW=p_uvw) * & + score = nucxs % get_xs('scatter',p % g,UVW=p_uvw) * & atom_density * flux - end associate else ! Get the scattering x/s (stored in % elastic) and take away ! the multiplication baked in to sigS @@ -994,14 +996,14 @@ contains ! Only analog estimators are available. ! Skip any event where the particle didn't scatter if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP - ! get material macros - macro_total = material_xs % total - macro_scatt = material_xs % elastic ! Score total rate - p1 scatter rate Note estimator needs to be ! adjusted since tallying is only occuring when a scatter has ! happened. Effectively this means multiplying the estimator by ! total/scatter macro - score = (macro_total - p % mu * macro_scatt) * (ONE / macro_scatt) + score = (material_xs % total - p % mu * material_xs % elastic) + if (material_xs % elastic /= ZERO) then + score = score / material_xs % elastic + end if case (SCORE_ABSORPTION) @@ -1010,20 +1012,28 @@ contains ! No absorption events actually occur if survival biasing is on -- ! just use weight absorbed in survival biasing score = p % absorb_wgt + if (i_nuclide > 0) then + score = score * atom_density * & + nucxs % get_xs('absorption',p % last_g,UVW=p_uvw) / & + matxs % get_xs('absorption',p % last_g,UVW=p_uvw) + end if else ! Skip any event where the particle wasn't absorbed if (p % event == EVENT_SCATTER) cycle SCORE_LOOP ! All fission and absorption events will contribute here, so we ! can just use the particle's weight entering the collision score = p % last_wgt + if (i_nuclide > 0) then + score = score * atom_density * & + nucxs % get_xs('absorption',p % g,UVW=p_uvw) / & + material_xs % absorption + end if end if else if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs('absorption',p % g,UVW=p_uvw) & - * atom_density * flux - end associate + score = nucxs % get_xs('absorption',p % g,UVW=p_uvw) * & + atom_density * flux else score = material_xs % absorption * flux end if @@ -1036,15 +1046,15 @@ contains ! No fission events occur if survival biasing is on -- need to ! calculate fraction of absorptions that would have resulted in ! fission - associate (nuc => nuclides_MG(i_nuclide) % obj) - micro_abs = nuc % get_xs('absorption',p % g,UVW=p_uvw) - if (micro_abs > ZERO) then - score = p % absorb_wgt * & - nuc % get_xs('fission',p % g,UVW=p_uvw) / micro_abs - else - score = ZERO - end if - end associate + if (i_nuclide > 0) then + score = p % absorb_wgt * atom_density * & + nucxs % get_xs('fission', p % last_g,UVW=p_uvw) / & + matxs % get_xs('absorption',p % last_g,UVW=p_uvw) + else + score = p % absorb_wgt * & + matxs % get_xs('fission', p % last_g,UVW=p_uvw) / & + matxs % get_xs('absorption',p % last_g,UVW=p_uvw) + end if else ! Skip any non-absorption events if (p % event == EVENT_SCATTER) cycle SCORE_LOOP @@ -1052,32 +1062,22 @@ contains ! particle's weight entering the collision as the estimate for the ! fission reaction rate if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = p % last_wgt * & - nuc % get_xs('fission',p % g,UVW=p_uvw) * & - atom_density / & - macro_xs(p % material) % obj % get_xs('absorption',& - p % g,UVW=p_uvw) - end associate + score = p % last_wgt * atom_density * & + nucxs % get_xs('fission', p % g,UVW=p_uvw) / & + matxs % get_xs('absorption',p % g,UVW=p_uvw) else score = p % last_wgt * & - macro_xs(p % material) % obj % get_xs('fission', & - p % g,UVW=p_uvw) * & - atom_density / & - macro_xs(p % material) % obj % get_xs('absorption', & - p % g,UVW=p_uvw) + matxs % get_xs('fission', p % g,UVW=p_uvw) / & + matxs % get_xs('absorption',p % g,UVW=p_uvw) end if end if else if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs('fission',p % g,UVW=p_uvw) * & - atom_density * flux - end associate + score = nucxs % get_xs('fission',p % g,UVW=p_uvw) * & + atom_density * flux else - score = flux * macro_xs(p % material) % obj % get_xs('fission', & - p % g,UVW=p_uvw) + score = flux * material_xs % fission end if end if @@ -1092,7 +1092,7 @@ contains ! neutrons were emitted with different energies, multiple ! outgoing energy bins may have been scored to. The following ! logic treats this special case and results to multiple bins - call score_fission_eout_mg(p, t, score_index) + call score_fission_eout_mg(p,t,score_index,i_nuclide,atom_density) cycle SCORE_LOOP end if end if @@ -1101,15 +1101,13 @@ contains ! calculate fraction of absorptions that would have resulted in ! nu-fission if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - micro_abs = nuc % get_xs('absorption',p % g,UVW=p_uvw) - if (micro_abs > ZERO) then - score = p % absorb_wgt * & - nuc % get_xs('nu_fission',p % g,UVW=p_uvw) / micro_abs - else - score = ZERO - end if - end associate + score = p % absorb_wgt * atom_density * & + nucxs % get_xs('nu_fission',p % last_g,UVW=p_uvw) / & + matxs % get_xs('absorption',p % last_g,UVW=p_uvw) + else + score = p % absorb_wgt * & + matxs % get_xs('nu_fission',p % last_g,UVW=p_uvw) / & + matxs % get_xs('absorption',p % last_g,UVW=p_uvw) end if else ! Skip any non-fission events @@ -1120,14 +1118,17 @@ contains ! bank. Since this was weighted by 1/keff, we multiply by keff ! to get the proper score. score = keff * p % wgt_bank + if (i_nuclide > 0) then + score = score * atom_density * & + nucxs % get_xs('fission',p % g,UVW=p_uvw) / & + matxs % get_xs('fission',p % g,UVW=p_uvw) + end if end if else if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs('nu_fission',p % g,UVW=p_uvw) * & - atom_density * flux - end associate + score = nucxs % get_xs('nu_fission',p % g,UVW=p_uvw) * & + atom_density * flux else score = material_xs % nu_fission * flux end if @@ -1140,15 +1141,15 @@ contains ! No fission events occur if survival biasing is on -- need to ! calculate fraction of absorptions that would have resulted in ! fission - associate (nuc => nuclides_MG(i_nuclide) % obj) - micro_abs = nuc % get_xs('absorption',p % g,UVW=p_uvw) - if (micro_abs > ZERO) then - score = p % absorb_wgt * & - nuc % get_xs('kappa_fission',p % g,UVW=p_uvw) / micro_abs - else - score = ZERO - end if - end associate + if (i_nuclide > 0) then + score = p % absorb_wgt * atom_density * & + nucxs % get_xs('kappa_fission',p % last_g,UVW=p_uvw) / & + matxs % get_xs('absorption',p % last_g,UVW=p_uvw) + else + score = p % absorb_wgt * & + matxs % get_xs('kappa_fission',p % last_g,UVW=p_uvw) / & + matxs % get_xs('absorption',p % last_g,UVW=p_uvw) + end if else ! Skip any non-absorption events if (p % event == EVENT_SCATTER) cycle SCORE_LOOP @@ -1156,32 +1157,22 @@ contains ! particle's weight entering the collision as the estimate for the ! fission reaction rate if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = p % last_wgt * & - nuc % get_xs('kappa_fission',p % g,UVW=p_uvw) * & - atom_density / & - macro_xs(p % material) % obj % get_xs('absorption',& - p % g,UVW=p_uvw) - end associate + score = p % last_wgt * & + nucxs % get_xs('kappa_fission',p % g,UVW=p_uvw) * & + atom_density / material_xs % absorption else score = p % last_wgt * & - macro_xs(p % material) % obj % get_xs('kappa_fission', & - p % g,UVW=p_uvw) * & - atom_density / & - macro_xs(p % material) % obj % get_xs('absorption', & - p % g,UVW=p_uvw) + matxs % get_xs('kappa_fission',p % g,UVW=p_uvw) / & + material_xs % absorption end if end if else if (i_nuclide > 0) then - associate (nuc => nuclides_MG(i_nuclide) % obj) - score = nuc % get_xs('kappa_fission',p % g,UVW=p_uvw) * & - atom_density * flux - end associate + score = flux * nucxs % get_xs('kappa_fission',p % g,UVW=p_uvw) * & + atom_density else - score = flux * macro_xs(p % material) % obj % get_xs('kappa_fission', & - p % g,UVW=p_uvw) + score = flux * matxs % get_xs('kappa_fission',p % g,UVW=p_uvw) end if end if @@ -1199,6 +1190,8 @@ contains score, i) end do SCORE_LOOP + + nullify(matxs,nucxs) end subroutine score_general_mg !=============================================================================== @@ -1607,10 +1600,12 @@ contains end subroutine score_fission_eout_ce - subroutine score_fission_eout_mg(p, t, i_score) + subroutine score_fission_eout_mg(p, t, i_score, i_nuclide, atom_density) type(Particle), intent(in) :: p type(TallyObject), intent(inout) :: t - integer, intent(in) :: i_score ! index for score + integer, intent(in) :: i_score ! index for score + integer, intent(in) :: i_nuclide ! index for nuclide + real(8), intent(in) :: atom_density integer :: i ! index of outgoing energy filter integer :: n ! number of energies on filter @@ -1637,6 +1632,16 @@ contains do k = 1, p % n_bank ! determine score based on bank site weight and keff score = keff * fission_bank(n_bank - p % n_bank + k) % wgt + if (i_nuclide > 0) then + if (survival_biasing) then + gout = p % g + else + gout = p % last_g + end if + score = score * atom_density * & + nuclides_MG(i_nuclide) % obj % get_xs('fission',gout,UVW=p % last_uvw) / & + macro_xs(p % material) % obj % get_xs('fission',gout,UVW=p % last_uvw) + end if if (t % energyout_matches_groups) then ! determine outgoing energy from fission bank @@ -1646,7 +1651,7 @@ contains matching_bins(i) = gout else ! determine outgoing energy from fission bank - E_out = fission_bank(n_bank - p % n_bank + k) % E + E_out = energy_bin_avg(int(fission_bank(n_bank - p % n_bank + k) % E)) ! check if outgoing energy is within specified range on filter if (E_out < t % filters(i) % real_bins(1) .or. & diff --git a/src/tracking.F90 b/src/tracking.F90 index dc9497389f..d52b09a75d 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -97,6 +97,7 @@ contains material_xs % total = ZERO material_xs % elastic = ZERO material_xs % absorption = ZERO + material_xs % fission = ZERO material_xs % nu_fission = ZERO end if end if From dd3a7c670a4113888bfd176659cbcba346539017 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 16 Mar 2016 05:15:52 -0400 Subject: [PATCH 381/650] fixed inverse_velocities determination --- src/input_xml.F90 | 2 +- src/tally.F90 | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 557cfb670d..4a1ebfacf9 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -4585,7 +4585,7 @@ contains ! If not given, estimate them by using average energy in group which is ! assumed to be the midpoint do i = 1, energy_groups - inverse_velocities(i) = & + inverse_velocities(i) = ONE / & (sqrt(TWO * energy_bin_avg(i) / (MASS_NEUTRON_MEV)) * & C_LIGHT * 100.0_8) end do diff --git a/src/tally.F90 b/src/tally.F90 index a69af2260d..b0c13a28eb 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -898,7 +898,8 @@ contains case (SCORE_INVERSE_VELOCITY) - if (t % estimator == ESTIMATOR_ANALOG) then + if (t % estimator == ESTIMATOR_ANALOG .or. & + t % estimator == ESTIMATOR_COLLISION) then ! All events score to an inverse velocity bin. We actually use a ! collision estimator in place of an analog one since there is no way ! to count 'events' exactly for the inverse velocity @@ -909,11 +910,11 @@ contains else score = p % last_wgt end if - score = score * inverse_velocities(p % last_g) + score = score * inverse_velocities(p % last_g) / material_xs % total else ! For inverse velocity, we need no cross section - score = score * inverse_velocities(p % g) + score = flux * inverse_velocities(p % g) end if From de67e61558c4eb43af98a5fea3f27129b29085a9 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Thu, 17 Mar 2016 06:58:17 -0400 Subject: [PATCH 382/650] Simplified p % g and p % last_g selection in tallying MG data --- src/tally.F90 | 118 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 72 insertions(+), 46 deletions(-) diff --git a/src/tally.F90 b/src/tally.F90 index b0c13a28eb..4d57f44ca8 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -811,14 +811,39 @@ contains integer :: score_index ! scoring bin index real(8) :: score ! analog tally score real(8) :: p_uvw(3) ! Particle's current uvw + integer :: p_g ! Particle group to use for getting info + ! to tally with. class(Mgxs), pointer :: matxs class(Mgxs), pointer :: nucxs - ! Set the direction to use with get_xs - if (t % estimator == ESTIMATOR_ANALOG) then - p_uvw = p % last_uvw + ! Set the direction and group to use with get_xs + ! this only depends on if we + if (t % estimator == ESTIMATOR_ANALOG .or. & + t % estimator == ESTIMATOR_COLLISION) then + if (survival_biasing) then + ! Then we either are alive and had a scatter (and so g changed), + ! or are dead and g did not change + if (p % alive) then + p_uvw = p % last_uvw + p_g = p % last_g + else + p_uvw = p % coord(p % n_coord) % uvw + p_g = p % g + end if + else if (p % event == EVENT_SCATTER) then + ! Then the energy group has been changed by the scattering routine + ! meaning gin is now in p % last_g + p_uvw = p % last_uvw + p_g = p % last_g + else + ! No scatter, no change in g. + p_uvw = p % coord(p % n_coord) % uvw + p_g = p % g + end if else + ! No actual collision so g has not changed. p_uvw = p % coord(p % n_coord) % uvw + p_g = p % g end if ! To significantly reduce de-referencing, point matxs to the @@ -876,21 +901,21 @@ contains score = p % last_wgt + p % absorb_wgt if (i_nuclide > 0) then score = score * atom_density * & - nucxs % get_xs('total',p % last_g,UVW=p_uvw) / & - matxs % get_xs('total',p % last_g,UVW=p_uvw) + nucxs % get_xs('total',p_g,UVW=p_uvw) / & + matxs % get_xs('total',p_g,UVW=p_uvw) end if else score = p % last_wgt if (i_nuclide > 0) then score = score * atom_density * & - nucxs % get_xs('total',p % g,UVW=p_uvw) / & - matxs % get_xs('total',p % g,UVW=p_uvw) + nucxs % get_xs('total',p_g,UVW=p_uvw) / & + matxs % get_xs('total',p_g,UVW=p_uvw) end if end if else if (i_nuclide > 0) then - score = nucxs % get_xs('total',p % g,UVW=p_uvw) * atom_density * flux + score = nucxs % get_xs('total',p_g,UVW=p_uvw) * atom_density * flux else score = material_xs % total * flux end if @@ -910,11 +935,11 @@ contains else score = p % last_wgt end if - score = score * inverse_velocities(p % last_g) / material_xs % total + score = score * inverse_velocities(p_g) / material_xs % total else ! For inverse velocity, we need no cross section - score = flux * inverse_velocities(p % g) + score = flux * inverse_velocities(p_g) end if @@ -944,14 +969,14 @@ contains else ! Note SCORE_SCATTER_N not available for tracklength/collision. if (i_nuclide > 0) then - score = nucxs % get_xs('scatter',p % g,UVW=p_uvw) * & + score = nucxs % get_xs('scatter',p_g,UVW=p_uvw) * & atom_density * flux / & - nucxs % get_xs('mult',p % g,UVW=p_uvw) + nucxs % get_xs('mult',p_g,UVW=p_uvw) else ! Get the scattering x/s (stored in % elastic) and take away ! the multiplication baked in to sigS score = material_xs % elastic * flux / & - matxs % get_xs('mult',p % g,UVW=p_uvw) + matxs % get_xs('mult',p_g,UVW=p_uvw) end if end if @@ -983,7 +1008,7 @@ contains else ! Note SCORE_NU_SCATTER_* not available for tracklength/collision. if (i_nuclide > 0) then - score = nucxs % get_xs('scatter',p % g,UVW=p_uvw) * & + score = nucxs % get_xs('scatter',p_g,UVW=p_uvw) * & atom_density * flux else ! Get the scattering x/s (stored in % elastic) and take away @@ -1015,8 +1040,8 @@ contains score = p % absorb_wgt if (i_nuclide > 0) then score = score * atom_density * & - nucxs % get_xs('absorption',p % last_g,UVW=p_uvw) / & - matxs % get_xs('absorption',p % last_g,UVW=p_uvw) + nucxs % get_xs('absorption',p_g,UVW=p_uvw) / & + matxs % get_xs('absorption',p_g,UVW=p_uvw) end if else ! Skip any event where the particle wasn't absorbed @@ -1026,14 +1051,14 @@ contains score = p % last_wgt if (i_nuclide > 0) then score = score * atom_density * & - nucxs % get_xs('absorption',p % g,UVW=p_uvw) / & + nucxs % get_xs('absorption',p_g,UVW=p_uvw) / & material_xs % absorption end if end if else if (i_nuclide > 0) then - score = nucxs % get_xs('absorption',p % g,UVW=p_uvw) * & + score = nucxs % get_xs('absorption',p_g,UVW=p_uvw) * & atom_density * flux else score = material_xs % absorption * flux @@ -1049,12 +1074,12 @@ contains ! fission if (i_nuclide > 0) then score = p % absorb_wgt * atom_density * & - nucxs % get_xs('fission', p % last_g,UVW=p_uvw) / & - matxs % get_xs('absorption',p % last_g,UVW=p_uvw) + nucxs % get_xs('fission', p_g,UVW=p_uvw) / & + matxs % get_xs('absorption',p_g,UVW=p_uvw) else score = p % absorb_wgt * & - matxs % get_xs('fission', p % last_g,UVW=p_uvw) / & - matxs % get_xs('absorption',p % last_g,UVW=p_uvw) + matxs % get_xs('fission', p_g,UVW=p_uvw) / & + matxs % get_xs('absorption',p_g,UVW=p_uvw) end if else ! Skip any non-absorption events @@ -1064,18 +1089,18 @@ contains ! fission reaction rate if (i_nuclide > 0) then score = p % last_wgt * atom_density * & - nucxs % get_xs('fission', p % g,UVW=p_uvw) / & - matxs % get_xs('absorption',p % g,UVW=p_uvw) + nucxs % get_xs('fission', p_g,UVW=p_uvw) / & + matxs % get_xs('absorption',p_g,UVW=p_uvw) else score = p % last_wgt * & - matxs % get_xs('fission', p % g,UVW=p_uvw) / & - matxs % get_xs('absorption',p % g,UVW=p_uvw) + matxs % get_xs('fission', p_g,UVW=p_uvw) / & + matxs % get_xs('absorption',p_g,UVW=p_uvw) end if end if else if (i_nuclide > 0) then - score = nucxs % get_xs('fission',p % g,UVW=p_uvw) * & + score = nucxs % get_xs('fission',p_g,UVW=p_uvw) * & atom_density * flux else score = flux * material_xs % fission @@ -1103,12 +1128,12 @@ contains ! nu-fission if (i_nuclide > 0) then score = p % absorb_wgt * atom_density * & - nucxs % get_xs('nu_fission',p % last_g,UVW=p_uvw) / & - matxs % get_xs('absorption',p % last_g,UVW=p_uvw) + nucxs % get_xs('nu_fission',p_g,UVW=p_uvw) / & + matxs % get_xs('absorption',p_g,UVW=p_uvw) else score = p % absorb_wgt * & - matxs % get_xs('nu_fission',p % last_g,UVW=p_uvw) / & - matxs % get_xs('absorption',p % last_g,UVW=p_uvw) + matxs % get_xs('nu_fission',p_g,UVW=p_uvw) / & + matxs % get_xs('absorption',p_g,UVW=p_uvw) end if else ! Skip any non-fission events @@ -1121,14 +1146,14 @@ contains score = keff * p % wgt_bank if (i_nuclide > 0) then score = score * atom_density * & - nucxs % get_xs('fission',p % g,UVW=p_uvw) / & - matxs % get_xs('fission',p % g,UVW=p_uvw) + nucxs % get_xs('fission',p_g,UVW=p_uvw) / & + matxs % get_xs('fission',p_g,UVW=p_uvw) end if end if else if (i_nuclide > 0) then - score = nucxs % get_xs('nu_fission',p % g,UVW=p_uvw) * & + score = nucxs % get_xs('nu_fission',p_g,UVW=p_uvw) * & atom_density * flux else score = material_xs % nu_fission * flux @@ -1144,12 +1169,12 @@ contains ! fission if (i_nuclide > 0) then score = p % absorb_wgt * atom_density * & - nucxs % get_xs('kappa_fission',p % last_g,UVW=p_uvw) / & - matxs % get_xs('absorption',p % last_g,UVW=p_uvw) + nucxs % get_xs('kappa_fission',p_g,UVW=p_uvw) / & + matxs % get_xs('absorption', p_g,UVW=p_uvw) else score = p % absorb_wgt * & - matxs % get_xs('kappa_fission',p % last_g,UVW=p_uvw) / & - matxs % get_xs('absorption',p % last_g,UVW=p_uvw) + matxs % get_xs('kappa_fission',p_g,UVW=p_uvw) / & + matxs % get_xs('absorption', p_g,UVW=p_uvw) end if else ! Skip any non-absorption events @@ -1159,21 +1184,21 @@ contains ! fission reaction rate if (i_nuclide > 0) then score = p % last_wgt * & - nucxs % get_xs('kappa_fission',p % g,UVW=p_uvw) * & + nucxs % get_xs('kappa_fission',p_g,UVW=p_uvw) * & atom_density / material_xs % absorption else score = p % last_wgt * & - matxs % get_xs('kappa_fission',p % g,UVW=p_uvw) / & + matxs % get_xs('kappa_fission',p_g,UVW=p_uvw) / & material_xs % absorption end if end if else if (i_nuclide > 0) then - score = flux * nucxs % get_xs('kappa_fission',p % g,UVW=p_uvw) * & + score = flux * nucxs % get_xs('kappa_fission',p_g,UVW=p_uvw) * & atom_density else - score = flux * matxs % get_xs('kappa_fission',p % g,UVW=p_uvw) + score = flux * matxs % get_xs('kappa_fission',p_g,UVW=p_uvw) end if end if @@ -1615,6 +1640,7 @@ contains integer :: i_filter ! index for matching filter bin combination real(8) :: score ! actual score integer :: gout ! energy group of fission bank site + integer :: gin ! energy group of incident particle real(8) :: E_out ! save original outgoing energy bin and score index @@ -1635,13 +1661,13 @@ contains score = keff * fission_bank(n_bank - p % n_bank + k) % wgt if (i_nuclide > 0) then if (survival_biasing) then - gout = p % g + gin = p % g else - gout = p % last_g + gin = p % last_g end if score = score * atom_density * & - nuclides_MG(i_nuclide) % obj % get_xs('fission',gout,UVW=p % last_uvw) / & - macro_xs(p % material) % obj % get_xs('fission',gout,UVW=p % last_uvw) + nuclides_MG(i_nuclide) % obj % get_xs('fission',gin,UVW=p % last_uvw) / & + macro_xs(p % material) % obj % get_xs('fission',gin,UVW=p % last_uvw) end if if (t % energyout_matches_groups) then From f58c379b53894d9e21e0d897322ab6249c564f9a Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 24 Feb 2016 11:01:12 -0600 Subject: [PATCH 383/650] Refactored organization of reaction data --- src/ace.F90 | 185 +++++++++++++-------------- src/ace_header.F90 | 58 --------- src/angleenergy_header.F90 | 29 +++++ src/cross_section.F90 | 221 +++++++++++++++++---------------- src/energy_distribution.F90 | 106 ++++------------ src/nuclide_header.F90 | 44 +++---- src/output.F90 | 1 - src/physics.F90 | 18 +-- src/product_header.F90 | 61 +++++++++ src/reaction_header.F90 | 21 ++++ src/secondary_correlated.F90 | 52 ++++---- src/secondary_header.F90 | 83 ------------- src/secondary_kalbach.F90 | 60 ++++----- src/secondary_nbody.F90 | 70 +++++++++++ src/secondary_uncorrelated.F90 | 2 +- src/summary.F90 | 1 - src/tally.F90 | 41 +++--- src/urr_header.F90 | 20 +++ 18 files changed, 539 insertions(+), 534 deletions(-) delete mode 100644 src/ace_header.F90 create mode 100644 src/angleenergy_header.F90 create mode 100644 src/product_header.F90 create mode 100644 src/reaction_header.F90 delete mode 100644 src/secondary_header.F90 create mode 100644 src/secondary_nbody.F90 create mode 100644 src/urr_header.F90 diff --git a/src/ace.F90 b/src/ace.F90 index fbc1b7ee7c..431a9d4238 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -1,11 +1,11 @@ module ace - use ace_header, only: Reaction + use angleenergy_header, only: AngleEnergy use constants use distribution_univariate, only: Uniform, Equiprobable, Tabular use endf, only: is_fission, is_disappearance use energy_distribution, only: TabularEquiprobable, LevelInelastic, & - ContinuousTabular, MaxwellEnergy, Evaporation, WattEnergy, NBodyPhaseSpace + ContinuousTabular, MaxwellEnergy, Evaporation, WattEnergy use error, only: fatal_error, warning use fission, only: nu_total use global @@ -15,9 +15,9 @@ module ace use output, only: write_message use sab_header use set_header, only: SetChar - use secondary_header, only: AngleEnergy use secondary_correlated, only: CorrelatedAngleEnergy use secondary_kalbach, only: KalbachMann + use secondary_nbody, only: NBodyPhaseSpace use secondary_uncorrelated, only: UncorrelatedAngleEnergy use string, only: to_str, to_lower @@ -746,13 +746,14 @@ contains ! sigma array is not allocated or stored for elastic scattering since it is ! already stored in nuc % elastic associate (rxn => nuc % reactions(1)) - rxn%MT = 2 - rxn%Q_value = ZERO - rxn%multiplicity = 1 - rxn%threshold = 1 - rxn%scatter_in_cm = .true. - allocate(rxn%secondary%distribution(1)) - allocate(UncorrelatedAngleEnergy :: rxn%secondary%distribution(1)%obj) + rxn % MT = 2 + rxn % Q_value = ZERO + allocate(rxn % products(1)) + rxn % products(1) % yield = 1 + rxn % threshold = 1 + rxn % scatter_in_cm = .true. + allocate(rxn % products(1) % distribution(1)) + allocate(UncorrelatedAngleEnergy :: rxn % products(1) % distribution(1) % obj) end associate ! Add contribution of elastic scattering to total cross section @@ -768,45 +769,46 @@ contains do i = 1, NMT associate (rxn => nuc % reactions(i+1)) ! read MT number, Q-value, and neutrons produced - rxn % MT = int(XSS(LMT + i - 1)) - rxn % Q_value = XSS(JXS4 + i - 1) - rxn % multiplicity = abs(nint(XSS(JXS5 + i - 1))) + rxn % MT = int(XSS(LMT + i - 1)) + rxn % Q_value = XSS(JXS4 + i - 1) + allocate(rxn % products(1)) + rxn % products(1) % yield = abs(nint(XSS(JXS5 + i - 1))) rxn % scatter_in_cm = (nint(XSS(JXS5 + i - 1)) < 0) ! Read energy-dependent multiplicities - if (rxn % multiplicity > 100) then + if (rxn % products(1) % yield > 100) then ! Set flag and allocate space for Tab1 to store yield - rxn % multiplicity_with_E = .true. - allocate(rxn % multiplicity_E) + rxn % products(1) % yield_with_E = .true. + allocate(rxn % products(1) % yield_E) - XSS_index = JXS(11) + rxn % multiplicity - 101 + XSS_index = JXS(11) + rxn % products(1) % yield - 101 NR = nint(XSS(XSS_index)) - rxn % multiplicity_E % n_regions = NR + rxn % products(1) % yield_E % n_regions = NR ! allocate space for ENDF interpolation parameters if (NR > 0) then - allocate(rxn % multiplicity_E % nbt(NR)) - allocate(rxn % multiplicity_E % int(NR)) + allocate(rxn % products(1) % yield_E % nbt(NR)) + allocate(rxn % products(1) % yield_E % int(NR)) end if ! read ENDF interpolation parameters XSS_index = XSS_index + 1 if (NR > 0) then - rxn % multiplicity_E % nbt = get_int(NR) - rxn % multiplicity_E % int = get_int(NR) + rxn % products(1) % yield_E % nbt = get_int(NR) + rxn % products(1) % yield_E % int = get_int(NR) end if ! allocate space for yield data XSS_index = XSS_index + 2*NR NE = nint(XSS(XSS_index)) - rxn % multiplicity_E % n_pairs = NE - allocate(rxn % multiplicity_E % x(NE)) - allocate(rxn % multiplicity_E % y(NE)) + rxn % products(1) % yield_E % n_pairs = NE + allocate(rxn % products(1) % yield_E % x(NE)) + allocate(rxn % products(1) % yield_E % y(NE)) ! read yield data XSS_index = XSS_index + 1 - rxn % multiplicity_E % x = get_real(NE) - rxn % multiplicity_E % y = get_real(NE) + rxn % products(1) % yield_E % x = get_real(NE) + rxn % products(1) % yield_E % y = get_real(NE) end if ! read starting energy index @@ -923,8 +925,8 @@ contains ! "one" angular distribution, it is repeated as many times as there are ! energy distributions for this reaction since the ! UncorrelatedAngleEnergy type holds one angle and energy distribution. - do k = 1, size(rxn%secondary%distribution) - select type (aedist => rxn%secondary%distribution(k)%obj) + do k = 1, size(rxn%products(1)%distribution) + select type (aedist => rxn%products(1)%distribution(k)%obj) type is (UncorrelatedAngleEnergy) ! allocate space for incoming energies and locations NE = int(XSS(JXS(9) + LOCB - 1)) @@ -1017,9 +1019,9 @@ contains end do ! Allocate space for distributions and probability of validity - associate (secondary => nuc%reactions(i + 1)%secondary) - allocate(secondary%applicability(n)) - allocate(secondary%distribution(n)) + associate (p => nuc%reactions(i + 1)%products(1)) + allocate(p%applicability(n)) + allocate(p%distribution(n)) LNW = nint(XSS(JXS(10) + i - 1)) n = 0 @@ -1031,10 +1033,10 @@ contains IDAT = nint(XSS(JXS(11) + LNW + 1)) ! Read probability of law validity - call secondary%applicability(n)%from_ace(XSS, JXS(11) + LNW + 2) + call p%applicability(n)%from_ace(XSS, JXS(11) + LNW + 2) ! Read energy law data - call get_energy_dist(secondary%distribution(n)%obj, LAW, & + call get_energy_dist(p%distribution(n)%obj, LAW, & JXS(11), IDAT, nuc%awr, nuc%reactions(i + 1)%Q_value) ! <<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<< @@ -1046,7 +1048,7 @@ contains ! mark fission reactions so that we avoid the angle sampling. if (any(nuc%reactions(i + 1)%MT == & [N_FISSION, N_F, N_NF, N_2NF, N_3NF])) then - select type (aedist => secondary%distribution(n)%obj) + select type (aedist => p%distribution(n)%obj) type is (UncorrelatedAngleEnergy) aedist%fission = .true. end select @@ -1089,6 +1091,8 @@ contains allocate(KalbachMann :: aedist) elseif (law == 61) then allocate(CorrelatedAngleEnergy :: aedist) + elseif (law == 66) then + allocate(NBodyPhaseSpace :: aedist) else allocate(UncorrelatedAngleEnergy :: aedist) end if @@ -1157,38 +1161,38 @@ contains ! locators NE = nint(XSS(XSS_index)) XSS_index = XSS_index + 1 - allocate(edist%energy_in(NE)) + allocate(edist%energy(NE)) allocate(L(NE)) - edist%energy_in(:) = get_real(NE) + edist%energy(:) = get_real(NE) L(:) = get_int(NE) ! Read outgoing energy tables - allocate(edist%energy_out(NE)) + allocate(edist%distribution(NE)) do i = 1, NE ! Determine interpolation and number of discrete points XSS_index = LDIS + L(i) - 1 interp = nint(XSS(XSS_index)) - edist%energy_out(i)%interpolation = mod(interp, 10) - edist%energy_out(i)%n_discrete = (interp - & - edist%energy_out(i)%interpolation)/10 + edist%distribution(i)%interpolation = mod(interp, 10) + edist%distribution(i)%n_discrete = (interp - & + edist%distribution(i)%interpolation)/10 ! check for discrete lines present - if (edist%energy_out(i)%n_discrete > 0) then + if (edist%distribution(i)%n_discrete > 0) then call fatal_error("Discrete lines in continuous tabular & &distribution not yet supported") end if ! Determine number of points and allocate space NP = nint(XSS(XSS_index + 1)) - allocate(edist%energy_out(i)%e_out(NP)) - allocate(edist%energy_out(i)%p(NP)) - allocate(edist%energy_out(i)%c(NP)) + allocate(edist%distribution(i)%e_out(NP)) + allocate(edist%distribution(i)%p(NP)) + allocate(edist%distribution(i)%c(NP)) ! Read tabular PDF for outgoing energy XSS_index = XSS_index + 2 - edist%energy_out(i)%e_out(:) = get_real(NP) - edist%energy_out(i)%p(:) = get_real(NP) - edist%energy_out(i)%c(:) = get_real(NP) + edist%distribution(i)%e_out(:) = get_real(NP) + edist%distribution(i)%p(:) = get_real(NP) + edist%distribution(i)%c(:) = get_real(NP) end do deallocate(L) @@ -1223,16 +1227,6 @@ contains edist%u = XSS(XSS_index) end select - case (66) - allocate(NBodyPhaseSpace :: aedist%energy) - select type(edist => aedist%energy) - type is (NBodyPhaseSpace) - edist%n_bodies = int(XSS(XSS_index)) - edist%mass_ratio = XSS(XSS_index + 1) - edist%A = awr - edist%Q = Q_value - end select - end select type is (KalbachMann) @@ -1248,42 +1242,42 @@ contains aedist%n_region = NR ! Read incoming energies for which outgoing energies are tabulated and locators - allocate(aedist%energy_in(NE)) + allocate(aedist%energy(NE)) allocate(L(NE)) XSS_index = XSS_index + 2 + 2*NR - aedist%energy_in(:) = get_real(NE) + aedist%energy(:) = get_real(NE) L(:) = get_int(NE) ! Read outgoing energy tables - allocate(aedist%table(NE)) + allocate(aedist%distribution(NE)) do i = 1, NE ! Determine interpolation and number of discrete points XSS_index = LDIS + L(i) - 1 interp = nint(XSS(XSS_index)) - aedist%table(i)%interpolation = mod(interp, 10) - aedist%table(i)%n_discrete = (interp - aedist%table(i)%interpolation)/10 + aedist%distribution(i)%interpolation = mod(interp, 10) + aedist%distribution(i)%n_discrete = (interp - aedist%distribution(i)%interpolation)/10 ! check for discrete lines present - if (aedist%table(i)%n_discrete > 0) then + if (aedist%distribution(i)%n_discrete > 0) then call fatal_error("Discrete lines in Kalbach-Mann distribution not & &yet supported") end if ! Determine number of points and allocate space NP = nint(XSS(XSS_index + 1)) - allocate(aedist%table(i)%e_out(NP)) - allocate(aedist%table(i)%p(NP)) - allocate(aedist%table(i)%c(NP)) - allocate(aedist%table(i)%r(NP)) - allocate(aedist%table(i)%a(NP)) + allocate(aedist%distribution(i)%e_out(NP)) + allocate(aedist%distribution(i)%p(NP)) + allocate(aedist%distribution(i)%c(NP)) + allocate(aedist%distribution(i)%r(NP)) + allocate(aedist%distribution(i)%a(NP)) ! Read tabular PDF for outgoing energy XSS_index = XSS_index + 2 - aedist%table(i)%e_out(:) = get_real(NP) - aedist%table(i)%p(:) = get_real(NP) - aedist%table(i)%c(:) = get_real(NP) - aedist%table(i)%r(:) = get_real(NP) - aedist%table(i)%a(:) = get_real(NP) + aedist%distribution(i)%e_out(:) = get_real(NP) + aedist%distribution(i)%p(:) = get_real(NP) + aedist%distribution(i)%c(:) = get_real(NP) + aedist%distribution(i)%r(:) = get_real(NP) + aedist%distribution(i)%a(:) = get_real(NP) end do deallocate(L) @@ -1302,48 +1296,48 @@ contains ! Read incoming energies for which outgoing energies are tabulated and ! locators - allocate(aedist%energy_in(NE)) + allocate(aedist%energy(NE)) allocate(L(NE)) XSS_index = XSS_index + 2 + 2*NR - aedist%energy_in(:) = get_real(NE) + aedist%energy(:) = get_real(NE) L(:) = get_int(NE) ! Read outgoing energy tables - allocate(aedist%table(NE)) + allocate(aedist%distribution(NE)) do i = 1, NE ! Determine interpolation and number of discrete points XSS_index = LDIS + L(i) - 1 interp = nint(XSS(XSS_index)) - aedist%table(i)%interpolation = mod(interp, 10) - aedist%table(i)%n_discrete = (interp - aedist%table(i)%interpolation)/10 + aedist%distribution(i)%interpolation = mod(interp, 10) + aedist%distribution(i)%n_discrete = (interp - aedist%distribution(i)%interpolation)/10 ! check for discrete lines present - if (aedist%table(i)%n_discrete > 0) then + if (aedist%distribution(i)%n_discrete > 0) then call fatal_error("Discrete lines in correlated angle-energy & &distribution not yet supported") end if ! Determine number of points and allocate space NP = nint(XSS(XSS_index + 1)) - allocate(aedist%table(i)%e_out(NP)) - allocate(aedist%table(i)%p(NP)) - allocate(aedist%table(i)%c(NP)) + allocate(aedist%distribution(i)%e_out(NP)) + allocate(aedist%distribution(i)%p(NP)) + allocate(aedist%distribution(i)%c(NP)) allocate(LC(NP)) ! Read tabular PDF for outgoing energy XSS_index = XSS_index + 2 - aedist%table(i)%e_out(:) = get_real(NP) - aedist%table(i)%p(:) = get_real(NP) - aedist%table(i)%c(:) = get_real(NP) + aedist%distribution(i)%e_out(:) = get_real(NP) + aedist%distribution(i)%p(:) = get_real(NP) + aedist%distribution(i)%c(:) = get_real(NP) LC(:) = get_int(NP) ! allocate angular distributions for each incoming/outgoing energy - allocate(aedist%table(i)%angle(NP)) + allocate(aedist%distribution(i)%angle(NP)) do j = 1, NP if (LC(j) == 0) then ! isotropic - allocate(Uniform :: aedist%table(i)%angle(j)%obj) - select type (adist => aedist%table(i)%angle(j)%obj) + allocate(Uniform :: aedist%distribution(i)%angle(j)%obj) + select type (adist => aedist%distribution(i)%angle(j)%obj) type is (Uniform) adist%a = -ONE adist%b = ONE @@ -1351,14 +1345,14 @@ contains elseif (LC(j) > 0) then ! tabular distribution - allocate(Tabular :: aedist%table(i)%angle(j)%obj) + allocate(Tabular :: aedist%distribution(i)%angle(j)%obj) end if end do ! read angular distributions do j = 1, NP XSS_index = LDIS + abs(LC(j)) - 1 - select type(adist => aedist%table(i)%angle(j)%obj) + select type(adist => aedist%distribution(i)%angle(j)%obj) type is (Tabular) ! determine interpolation and number of points interp = nint(XSS(XSS_index)) @@ -1377,6 +1371,15 @@ contains end do deallocate(L) + + type is (NBodyPhaseSpace) + ! ======================================================================== + ! N-BODY PHASE SPACE DISTRIBUTION + + aedist%n_bodies = int(XSS(XSS_index)) + aedist%mass_ratio = XSS(XSS_index + 1) + aedist%A = awr + aedist%Q = Q_value end select end subroutine get_energy_dist diff --git a/src/ace_header.F90 b/src/ace_header.F90 deleted file mode 100644 index ae5000e5ab..0000000000 --- a/src/ace_header.F90 +++ /dev/null @@ -1,58 +0,0 @@ -module ace_header - - use constants, only: MAX_FILE_LEN, ZERO - use dict_header, only: DictIntInt - use endf_header, only: Tab1 - use secondary_header, only: SecondaryDistribution, AngleEnergyContainer - use stl_vector, only: VectorInt - - implicit none - -!=============================================================================== -! REACTION contains the cross-section and secondary energy and angle -! distributions for a single reaction in a continuous-energy ACE-format table -!=============================================================================== - - type Reaction - integer :: MT ! ENDF MT value - real(8) :: Q_value ! Reaction Q value - integer :: multiplicity ! Number of secondary particles released - type(Tab1), pointer :: multiplicity_E => null() ! Energy-dependent neutron yield - integer :: threshold ! Energy grid index of threshold - logical :: scatter_in_cm ! scattering system in center-of-mass? - logical :: multiplicity_with_E = .false. ! Flag to indicate E-dependent multiplicity - real(8), allocatable :: sigma(:) ! Cross section values - type(SecondaryDistribution) :: secondary - - contains - procedure :: clear => reaction_clear ! Deallocates Reaction - end type Reaction - -!=============================================================================== -! URRDATA contains probability tables for the unresolved resonance range. -!=============================================================================== - - type UrrData - integer :: n_energy ! # of incident neutron energies - integer :: n_prob ! # of probabilities - integer :: interp ! inteprolation (2=lin-lin, 5=log-log) - integer :: inelastic_flag ! inelastic competition flag - integer :: absorption_flag ! other absorption flag - logical :: multiply_smooth ! multiply by smooth cross section? - real(8), allocatable :: energy(:) ! incident energies - real(8), allocatable :: prob(:,:,:) ! actual probabibility tables - end type UrrData - - contains - -!=============================================================================== -! REACTION_CLEAR resets and deallocates data in Reaction. -!=============================================================================== - - subroutine reaction_clear(this) - class(Reaction), intent(inout) :: this ! The Reaction object to clear - - if (associated(this % multiplicity_E)) deallocate(this % multiplicity_E) - end subroutine reaction_clear - -end module ace_header diff --git a/src/angleenergy_header.F90 b/src/angleenergy_header.F90 new file mode 100644 index 0000000000..483bad856c --- /dev/null +++ b/src/angleenergy_header.F90 @@ -0,0 +1,29 @@ +module angleenergy_header + +!=============================================================================== +! ANGLEENERGY (abstract) defines a correlated or uncorrelated angle-energy +! distribution that is a function of incoming energy. Each derived type must +! implement a sample() subroutine that returns an outgoing energy and scattering +! cosine given an incoming energy. +!=============================================================================== + + type, abstract :: AngleEnergy + contains + procedure(angleenergy_sample_), deferred :: sample + end type AngleEnergy + + abstract interface + subroutine angleenergy_sample_(this, E_in, E_out, mu) + import AngleEnergy + class(AngleEnergy), intent(in) :: this + real(8), intent(in) :: E_in + real(8), intent(out) :: E_out + real(8), intent(out) :: mu + end subroutine angleenergy_sample_ + end interface + + type :: AngleEnergyContainer + class(AngleEnergy), allocatable :: obj + end type AngleEnergyContainer + +end module angleenergy_header diff --git a/src/cross_section.F90 b/src/cross_section.F90 index 2f2e7fd7e9..4c529213b2 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -1,6 +1,5 @@ module cross_section - use ace_header, only: Reaction, UrrData use constants use energy_grid, only: grid_method, log_spacing use error, only: fatal_error @@ -363,131 +362,133 @@ contains real(8) :: capture ! (n,gamma) cross section real(8) :: fission ! fission cross section real(8) :: inelastic ! inelastic cross section - type(UrrData), pointer :: urr - type(NuclideCE), pointer :: nuc micro_xs(i_nuclide) % use_ptable = .true. - ! get pointer to probability table - nuc => nuclides(i_nuclide) - urr => nuc % urr_data + associate (nuc => nuclides(i_nuclide), urr => nuclides(i_nuclide) % urr_data) + ! determine energy table + i_energy = 1 + do + if (E < urr % energy(i_energy + 1)) exit + i_energy = i_energy + 1 + end do - ! determine energy table - i_energy = 1 - do - if (E < urr % energy(i_energy + 1)) exit - i_energy = i_energy + 1 - end do + ! determine interpolation factor on table + f = (E - urr % energy(i_energy)) / & + (urr % energy(i_energy + 1) - urr % energy(i_energy)) - ! determine interpolation factor on table - f = (E - urr % energy(i_energy)) / & - (urr % energy(i_energy + 1) - urr % energy(i_energy)) + ! sample probability table using the cumulative distribution - ! sample probability table using the cumulative distribution + ! determine interpolation factor on table + f = (E - urr % energy(i_energy)) / & + (urr % energy(i_energy + 1) - urr % energy(i_energy)) - ! Random numbers for xs calculation are sampled from a separated stream. - ! This guarantees the randomness and, at the same time, makes sure we reuse - ! random number for the same nuclide at different temperatures, therefore - ! preserving correlation of temperature in probability tables. - call prn_set_stream(STREAM_URR_PTABLE) - r = future_prn(int(nuc_zaid_dict % get_key(nuc % zaid), 8)) - call prn_set_stream(STREAM_TRACKING) + ! sample probability table using the cumulative distribution - i_low = 1 - do - if (urr % prob(i_energy, URR_CUM_PROB, i_low) > r) exit - i_low = i_low + 1 - end do - i_up = 1 - do - if (urr % prob(i_energy + 1, URR_CUM_PROB, i_up) > r) exit - i_up = i_up + 1 - end do + ! Random numbers for xs calculation are sampled from a separated stream. + ! This guarantees the randomness and, at the same time, makes sure we reuse + ! random number for the same nuclide at different temperatures, therefore + ! preserving correlation of temperature in probability tables. + call prn_set_stream(STREAM_URR_PTABLE) + r = future_prn(int(nuc_zaid_dict % get_key(nuc % zaid), 8)) + call prn_set_stream(STREAM_TRACKING) - ! determine elastic, fission, and capture cross sections from probability - ! table - if (urr % interp == LINEAR_LINEAR) then - elastic = (ONE - f) * urr % prob(i_energy, URR_ELASTIC, i_low) + & - f * urr % prob(i_energy + 1, URR_ELASTIC, i_up) - fission = (ONE - f) * urr % prob(i_energy, URR_FISSION, i_low) + & - f * urr % prob(i_energy + 1, URR_FISSION, i_up) - capture = (ONE - f) * urr % prob(i_energy, URR_N_GAMMA, i_low) + & - f * urr % prob(i_energy + 1, URR_N_GAMMA, i_up) - elseif (urr % interp == LOG_LOG) then - ! Get logarithmic interpolation factor - f = log(E / urr % energy(i_energy)) / & - log(urr % energy(i_energy + 1) / urr % energy(i_energy)) + i_low = 1 + do + if (urr % prob(i_energy, URR_CUM_PROB, i_low) > r) exit + i_low = i_low + 1 + end do + i_up = 1 + do + if (urr % prob(i_energy + 1, URR_CUM_PROB, i_up) > r) exit + i_up = i_up + 1 + end do - ! Calculate elastic cross section/factor - elastic = ZERO - if (urr % prob(i_energy, URR_ELASTIC, i_low) > ZERO .and. & - urr % prob(i_energy + 1, URR_ELASTIC, i_up) > ZERO) then - elastic = exp((ONE - f) * log(urr % prob(i_energy, URR_ELASTIC, & - i_low)) + f * log(urr % prob(i_energy + 1, URR_ELASTIC, & - i_up))) - end if + ! determine elastic, fission, and capture cross sections from probability + ! table + if (urr % interp == LINEAR_LINEAR) then + elastic = (ONE - f) * urr % prob(i_energy, URR_ELASTIC, i_low) + & + f * urr % prob(i_energy + 1, URR_ELASTIC, i_up) + fission = (ONE - f) * urr % prob(i_energy, URR_FISSION, i_low) + & + f * urr % prob(i_energy + 1, URR_FISSION, i_up) + capture = (ONE - f) * urr % prob(i_energy, URR_N_GAMMA, i_low) + & + f * urr % prob(i_energy + 1, URR_N_GAMMA, i_up) + elseif (urr % interp == LOG_LOG) then + ! Get logarithmic interpolation factor + f = log(E / urr % energy(i_energy)) / & + log(urr % energy(i_energy + 1) / urr % energy(i_energy)) - ! Calculate fission cross section/factor - fission = ZERO - if (urr % prob(i_energy, URR_FISSION, i_low) > ZERO .and. & - urr % prob(i_energy + 1, URR_FISSION, i_up) > ZERO) then - fission = exp((ONE - f) * log(urr % prob(i_energy, URR_FISSION, & - i_low)) + f * log(urr % prob(i_energy + 1, URR_FISSION, & - i_up))) - end if - - ! Calculate capture cross section/factor - capture = ZERO - if (urr % prob(i_energy, URR_N_GAMMA, i_low) > ZERO .and. & - urr % prob(i_energy + 1, URR_N_GAMMA, i_up) > ZERO) then - capture = exp((ONE - f) * log(urr % prob(i_energy, URR_N_GAMMA, & - i_low)) + f * log(urr % prob(i_energy + 1, URR_N_GAMMA, & - i_up))) - end if - end if - - ! Determine treatment of inelastic scattering - inelastic = ZERO - if (urr % inelastic_flag > 0) then - ! Get index on energy grid and interpolation factor - i_energy = micro_xs(i_nuclide) % index_grid - f = micro_xs(i_nuclide) % interp_factor - - ! Determine inelastic scattering cross section - associate (rxn => nuc % reactions(nuc % urr_inelastic)) - if (i_energy >= rxn % threshold) then - inelastic = (ONE - f) * rxn % sigma(i_energy - rxn%threshold + 1) + & - f * rxn % sigma(i_energy - rxn%threshold + 2) + ! Calculate elastic cross section/factor + elastic = ZERO + if (urr % prob(i_energy, URR_ELASTIC, i_low) > ZERO .and. & + urr % prob(i_energy + 1, URR_ELASTIC, i_up) > ZERO) then + elastic = exp((ONE - f) * log(urr % prob(i_energy, URR_ELASTIC, & + i_low)) + f * log(urr % prob(i_energy + 1, URR_ELASTIC, & + i_up))) end if - end associate - end if - ! Multiply by smooth cross-section if needed - if (urr % multiply_smooth) then - elastic = elastic * micro_xs(i_nuclide) % elastic - capture = capture * (micro_xs(i_nuclide) % absorption - & - micro_xs(i_nuclide) % fission) - fission = fission * micro_xs(i_nuclide) % fission - end if + ! Calculate fission cross section/factor + fission = ZERO + if (urr % prob(i_energy, URR_FISSION, i_low) > ZERO .and. & + urr % prob(i_energy + 1, URR_FISSION, i_up) > ZERO) then + fission = exp((ONE - f) * log(urr % prob(i_energy, URR_FISSION, & + i_low)) + f * log(urr % prob(i_energy + 1, URR_FISSION, & + i_up))) + end if - ! Check for negative values - if (elastic < ZERO) elastic = ZERO - if (fission < ZERO) fission = ZERO - if (capture < ZERO) capture = ZERO + ! Calculate capture cross section/factor + capture = ZERO + if (urr % prob(i_energy, URR_N_GAMMA, i_low) > ZERO .and. & + urr % prob(i_energy + 1, URR_N_GAMMA, i_up) > ZERO) then + capture = exp((ONE - f) * log(urr % prob(i_energy, URR_N_GAMMA, & + i_low)) + f * log(urr % prob(i_energy + 1, URR_N_GAMMA, & + i_up))) + end if + end if - ! Set elastic, absorption, fission, and total cross sections. Note that the - ! total cross section is calculated as sum of partials rather than using the - ! table-provided value - micro_xs(i_nuclide) % elastic = elastic - micro_xs(i_nuclide) % absorption = capture + fission - micro_xs(i_nuclide) % fission = fission - micro_xs(i_nuclide) % total = elastic + inelastic + capture + fission + ! Determine treatment of inelastic scattering + inelastic = ZERO + if (urr % inelastic_flag > 0) then + ! Get index on energy grid and interpolation factor + i_energy = micro_xs(i_nuclide) % index_grid + f = micro_xs(i_nuclide) % interp_factor - ! Determine nu-fission cross section - if (nuc % fissionable) then - micro_xs(i_nuclide) % nu_fission = nu_total(nuc, E) * & - micro_xs(i_nuclide) % fission - end if + ! Determine inelastic scattering cross section + associate (rxn => nuc % reactions(nuc % urr_inelastic)) + if (i_energy >= rxn % threshold) then + inelastic = (ONE - f) * rxn % sigma(i_energy - rxn%threshold + 1) + & + f * rxn % sigma(i_energy - rxn%threshold + 2) + end if + end associate + end if + + ! Multiply by smooth cross-section if needed + if (urr % multiply_smooth) then + elastic = elastic * micro_xs(i_nuclide) % elastic + capture = capture * (micro_xs(i_nuclide) % absorption - & + micro_xs(i_nuclide) % fission) + fission = fission * micro_xs(i_nuclide) % fission + end if + + ! Check for negative values + if (elastic < ZERO) elastic = ZERO + if (fission < ZERO) fission = ZERO + if (capture < ZERO) capture = ZERO + + ! Set elastic, absorption, fission, and total cross sections. Note that the + ! total cross section is calculated as sum of partials rather than using the + ! table-provided value + micro_xs(i_nuclide) % elastic = elastic + micro_xs(i_nuclide) % absorption = capture + fission + micro_xs(i_nuclide) % fission = fission + micro_xs(i_nuclide) % total = elastic + inelastic + capture + fission + + ! Determine nu-fission cross section + if (nuc % fissionable) then + micro_xs(i_nuclide) % nu_fission = nu_total(nuc, E) * & + micro_xs(i_nuclide) % fission + end if + end associate end subroutine calculate_urr_xs diff --git a/src/energy_distribution.F90 b/src/energy_distribution.F90 index 8b2cc10c9c..3d35249342 100644 --- a/src/energy_distribution.F90 +++ b/src/energy_distribution.F90 @@ -83,8 +83,8 @@ module energy_distribution integer :: n_region integer, allocatable :: breakpoints(:) integer, allocatable :: interpolation(:) - real(8), allocatable :: energy_in(:) - type(CTTable), allocatable :: energy_out(:) + real(8), allocatable :: energy(:) + type(CTTable), allocatable :: distribution(:) contains procedure :: sample => continuous_sample end type ContinuousTabular @@ -126,21 +126,6 @@ module energy_distribution procedure :: sample => watt_sample end type WattEnergy -!=============================================================================== -! NBODYPHASESPACE gives the energy distribution for particles emitted from -! neutron and charged-particle reactions. This corresponds to ACE law 66 and -! ENDF File 6, LAW=6. -!=============================================================================== - - type, extends(EnergyDistribution) :: NBodyPhaseSpace - integer :: n_bodies - real(8) :: mass_ratio - real(8) :: A - real(8) :: Q - contains - procedure :: sample => nbody_sample - end type NBodyPhaseSpace - contains function equiprobable_sample(this, E_in) result(E_out) @@ -202,6 +187,7 @@ contains end if end function equiprobable_sample + function level_inelastic_sample(this, E_in) result(E_out) class(LevelInelastic), intent(in) :: this real(8), intent(in) :: E_in @@ -210,6 +196,7 @@ contains E_out = this%mass_ratio*(E_in - this%threshold) end function level_inelastic_sample + function continuous_sample(this, E_in) result(E_out) class(ContinuousTabular), intent(in) :: this real(8), intent(in) :: E_in ! incoming energy @@ -238,17 +225,17 @@ contains ! Find energy bin and calculate interpolation factor -- if the energy is ! outside the range of the tabulated energies, choose the first or last bins - n_energy_in = size(this%energy_in) - if (E_in < this%energy_in(1)) then + n_energy_in = size(this%energy) + if (E_in < this%energy(1)) then i = 1 r = ZERO - elseif (E_in > this%energy_in(n_energy_in)) then + elseif (E_in > this%energy(n_energy_in)) then i = n_energy_in - 1 r = ONE else - i = binary_search(this%energy_in, n_energy_in, E_in) - r = (E_in - this%energy_in(i)) / & - (this%energy_in(i+1) - this%energy_in(i)) + i = binary_search(this%energy, n_energy_in, E_in) + r = (E_in - this%energy(i)) / & + (this%energy(i+1) - this%energy(i)) end if ! Sample between the ith and (i+1)th bin @@ -263,23 +250,23 @@ contains end if ! Interpolation for energy E1 and EK - n_energy_out = size(this%energy_out(i)%e_out) - E_i_1 = this%energy_out(i)%e_out(1) - E_i_K = this%energy_out(i)%e_out(n_energy_out) + n_energy_out = size(this%distribution(i)%e_out) + E_i_1 = this%distribution(i)%e_out(1) + E_i_K = this%distribution(i)%e_out(n_energy_out) - n_energy_out = size(this%energy_out(i+1)%e_out) - E_i1_1 = this%energy_out(i+1)%e_out(1) - E_i1_K = this%energy_out(i+1)%e_out(n_energy_out) + n_energy_out = size(this%distribution(i+1)%e_out) + E_i1_1 = this%distribution(i+1)%e_out(1) + E_i1_K = this%distribution(i+1)%e_out(n_energy_out) E_1 = E_i_1 + r*(E_i1_1 - E_i_1) E_K = E_i_K + r*(E_i1_K - E_i_K) ! Determine outgoing energy bin - n_energy_out = size(this%energy_out(l)%e_out) + n_energy_out = size(this%distribution(l)%e_out) r1 = prn() - c_k = this%energy_out(l)%c(1) + c_k = this%distribution(l)%c(1) do k = 1, n_energy_out - 1 - c_k1 = this%energy_out(l)%c(k+1) + c_k1 = this%distribution(l)%c(k+1) if (r1 < c_k1) exit c_k = c_k1 end do @@ -287,9 +274,9 @@ contains ! Check to make sure k is <= NP - 1 k = min(k, n_energy_out - 1) - E_l_k = this%energy_out(l)%e_out(k) - p_l_k = this%energy_out(l)%p(k) - if (this%energy_out(l)%interpolation == HISTOGRAM) then + E_l_k = this%distribution(l)%e_out(k) + p_l_k = this%distribution(l)%p(k) + if (this%distribution(l)%interpolation == HISTOGRAM) then ! Histogram interpolation if (p_l_k > ZERO) then E_out = E_l_k + (r1 - c_k)/p_l_k @@ -297,10 +284,10 @@ contains E_out = E_l_k end if - elseif (this%energy_out(l)%interpolation == LINEAR_LINEAR) then + elseif (this%distribution(l)%interpolation == LINEAR_LINEAR) then ! Linear-linear interpolation - E_l_k1 = this%energy_out(l)%e_out(k+1) - p_l_k1 = this%energy_out(l)%p(k+1) + E_l_k1 = this%distribution(l)%e_out(k+1) + p_l_k1 = this%distribution(l)%p(k+1) frac = (p_l_k1 - p_l_k)/(E_l_k1 - E_l_k) if (frac == ZERO) then @@ -321,6 +308,7 @@ contains end if end function continuous_sample + function maxwellenergy_sample(this, E_in) result(E_out) class(MaxwellEnergy), intent(in) :: this real(8), intent(in) :: E_in ! incoming energy @@ -351,7 +339,7 @@ contains ! Get temperature corresponding to incoming energy theta = interpolate_tab1(this%theta, E_in) - y = (E_in - this%U)/theta + y = (E_in - this%u)/theta v = 1 - exp(-y) ! Sample outgoing energy based on evaporation spectrum probability @@ -386,44 +374,4 @@ contains end do end function watt_sample - function nbody_sample(this, E_in) result(E_out) - class(NBodyPhaseSpace), intent(in) :: this - real(8), intent(in) :: E_in ! incoming energy - real(8) :: E_out ! sampled outgoing energy - - real(8) :: Ap ! total mass of particles in neutron masses - real(8) :: E_max ! maximum possible COM energy - real(8) :: x, y, v - real(8) :: r1, r2, r3, r4, r5, r6 - - ! Determine E_max parameter - Ap = this%mass_ratio - E_max = (Ap - ONE)/Ap * (this%A/(this%A + ONE)*E_in + this%Q) - - ! x is essentially a Maxwellian distribution - x = maxwell_spectrum(ONE) - - select case (this%n_bodies) - case (3) - y = maxwell_spectrum(ONE) - case (4) - r1 = prn() - r2 = prn() - r3 = prn() - y = -log(r1*r2*r3) - case (5) - r1 = prn() - r2 = prn() - r3 = prn() - r4 = prn() - r5 = prn() - r6 = prn() - y = -log(r1*r2*r3*r4) - log(r5) * cos(PI/TWO*r6)**2 - end select - - ! Now determine v and E_out - v = x/(x+y) - E_out = E_max * v - end function nbody_sample - end module energy_distribution diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index c6cf583f20..12b4a30764 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -2,13 +2,17 @@ module nuclide_header use, intrinsic :: ISO_FORTRAN_ENV - use ace_header use constants - use endf, only: reaction_name - use error, only: fatal_error + use dict_header, only: DictIntInt + use endf, only: reaction_name, is_fission, is_disappearance + use error, only: fatal_error, warning use list_header, only: ListInt use math, only: evaluate_legendre, find_angle + use product_header, only: AngleEnergyContainer + use reaction_header, only: Reaction + use stl_vector, only: VectorInt use string + use urr_header, only: UrrData use xml_interface implicit none @@ -684,16 +688,8 @@ module nuclide_header class(NuclideCE), intent(inout) :: this ! The Nuclide object to clear - integer :: i ! Loop counter - if (associated(this % urr_data)) deallocate(this % urr_data) - if (allocated(this % reactions)) then - do i = 1, size(this % reactions) - call this % reactions(i) % clear() - end do - end if - call this % reaction_index % clear() end subroutine nuclidece_clear @@ -711,7 +707,6 @@ module nuclide_header integer :: unit_ ! unit to write to integer :: size_xs ! memory used for cross-sections (bytes) integer :: size_urr ! memory used for probability tables (bytes) - type(UrrData), pointer :: urr ! set default unit for writing information if (present(unit)) then @@ -754,19 +749,20 @@ module nuclide_header ! Write information about URR probability tables size_urr = 0 if (this % urr_present) then - urr => this % urr_data - write(unit_,*) ' Unresolved resonance probability table:' - write(unit_,*) ' # of energies = ' // trim(to_str(urr % n_energy)) - write(unit_,*) ' # of probabilities = ' // trim(to_str(urr % n_prob)) - write(unit_,*) ' Interpolation = ' // trim(to_str(urr % interp)) - write(unit_,*) ' Inelastic flag = ' // trim(to_str(urr % inelastic_flag)) - write(unit_,*) ' Absorption flag = ' // trim(to_str(urr % absorption_flag)) - write(unit_,*) ' Multiply by smooth? ', urr % multiply_smooth - write(unit_,*) ' Min energy = ', trim(to_str(urr % energy(1))) - write(unit_,*) ' Max energy = ', trim(to_str(urr % energy(urr % n_energy))) + associate(urr => this % urr_data) + write(unit_,*) ' Unresolved resonance probability table:' + write(unit_,*) ' # of energies = ' // trim(to_str(urr % n_energy)) + write(unit_,*) ' # of probabilities = ' // trim(to_str(urr % n_prob)) + write(unit_,*) ' Interpolation = ' // trim(to_str(urr % interp)) + write(unit_,*) ' Inelastic flag = ' // trim(to_str(urr % inelastic_flag)) + write(unit_,*) ' Absorption flag = ' // trim(to_str(urr % absorption_flag)) + write(unit_,*) ' Multiply by smooth? ', urr % multiply_smooth + write(unit_,*) ' Min energy = ', trim(to_str(urr % energy(1))) + write(unit_,*) ' Max energy = ', trim(to_str(urr % energy(urr % n_energy))) - ! Calculate memory used by probability tables and add to total - size_urr = urr % n_energy * (urr % n_prob * 6 + 1) * 8 + ! Calculate memory used by probability tables and add to total + size_urr = urr % n_energy * (urr % n_prob * 6 + 1) * 8 + end associate end if ! Write memory used diff --git a/src/output.F90 b/src/output.F90 index 125fe010bc..70d55b2593 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -2,7 +2,6 @@ module output use, intrinsic :: ISO_FORTRAN_ENV - use ace_header, only: Reaction, UrrData use constants use endf, only: reaction_name use error, only: fatal_error, warning diff --git a/src/physics.F90 b/src/physics.F90 index 6fda4c393c..3192db1797 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -1,6 +1,5 @@ module physics - use ace_header, only: Reaction use constants use cross_section, only: elastic_xs_0K use endf, only: reaction_name @@ -17,6 +16,7 @@ module physics use particle_restart_write, only: write_particle_restart use physics_common use random_lcg, only: prn, advance_prn_seed, prn_set_stream + use reaction_header, only: Reaction use search, only: binary_search use secondary_uncorrelated, only: UncorrelatedAngleEnergy use string, only: to_str @@ -447,9 +447,9 @@ contains vel = sqrt(dot_product(v_n, v_n)) ! Sample scattering angle - select type (dist => rxn%secondary%distribution(1)%obj) + select type (dist => rxn % products(1) % distribution(1) % obj) type is (UncorrelatedAngleEnergy) - mu_cm = dist%angle%sample(E) + mu_cm = dist % angle % sample(E) end select ! Determine direction cosines in CM @@ -1276,7 +1276,7 @@ contains ! sample from prompt neutron energy distribution n_sample = 0 do - call rxn%secondary%sample(p%E, E_out, prob) + call rxn % products(1) % sample(p % E, E_out, prob) ! resample if energy is greater than maximum neutron energy if (E_out < energy_max_neutron) exit @@ -1316,7 +1316,7 @@ contains E_in = p % E ! sample outgoing energy and scattering cosine - call rxn%secondary%sample(E_in, E, mu) + call rxn % products(1) % sample(E_in, E, mu) ! if scattering system is in center-of-mass, transfer cosine of scattering ! angle and outgoing energy from CM to LAB @@ -1345,12 +1345,12 @@ contains p % coord(1) % uvw = rotate_angle(p % coord(1) % uvw, mu) ! change weight of particle based on yield - if (rxn % multiplicity_with_E) then - yield = interpolate_tab1(rxn % multiplicity_E, E_in) + if (rxn % products(1) % yield_with_E) then + yield = interpolate_tab1(rxn % products(1) % yield_E, E_in) p % wgt = yield * p % wgt else - do i = 1, rxn % multiplicity - 1 - call p % create_secondary(p % coord(1) % uvw, NEUTRON, run_CE=.True.) + do i = 1, rxn % products(1) % yield - 1 + call p % create_secondary(p % coord(1) % uvw, NEUTRON, run_CE=.true.) end do end if diff --git a/src/product_header.F90 b/src/product_header.F90 new file mode 100644 index 0000000000..27fec37f7a --- /dev/null +++ b/src/product_header.F90 @@ -0,0 +1,61 @@ +module product_header + + use angleenergy_header, only: AngleEnergyContainer + use constants, only: ZERO + use endf_header, only: Tab1 + use interpolation, only: interpolate_tab1 + use random_lcg, only: prn + +!=============================================================================== +! REACTIONPRODUCT stores a data for a reaction product including its yield and +! angle-energy distributions, each of which has a given probability of occurring +! for a given incoming energy. In general, most products only have one +! angle-energy distribution, but for some cases (e.g., (n,2n) in certain +! nuclides) multiple distinct distributions exist. +!=============================================================================== + + type :: ReactionProduct + integer :: yield ! Number of secondary particles released + logical :: yield_with_E = .false. ! Flag to indicate E-dependent yield + type(Tab1), pointer :: yield_E => null() ! Energy-dependent neutron yield + type(Tab1), allocatable :: applicability(:) + type(AngleEnergyContainer), allocatable :: distribution(:) + contains + procedure :: sample => reactionproduct_sample + end type ReactionProduct + +contains + + subroutine reactionproduct_sample(this, E_in, E_out, mu) + class(ReactionProduct), intent(in) :: this + real(8), intent(in) :: E_in ! incoming energy + real(8), intent(out) :: E_out ! sampled outgoing energy + real(8), intent(out) :: mu ! sampled scattering cosine + + integer :: i ! loop counter + integer :: n ! number of angle-energy distributions + real(8) :: prob ! cumulative probability + real(8) :: c ! sampled cumulative probability + + n = size(this%applicability) + if (n > 1) then + prob = ZERO + c = prn() + do i = 1, n + ! Determine probability that i-th energy distribution is sampled + prob = prob + interpolate_tab1(this%applicability(i), E_in) + + ! If i-th distribution is sampled, sample energy from the distribution + if (c <= prob) then + call this%distribution(i)%obj%sample(E_in, E_out, mu) + exit + end if + end do + else + ! If only one distribution is present, go ahead and sample it + call this%distribution(1)%obj%sample(E_in, E_out, mu) + end if + + end subroutine reactionproduct_sample + +end module product_header diff --git a/src/reaction_header.F90 b/src/reaction_header.F90 new file mode 100644 index 0000000000..160ad63239 --- /dev/null +++ b/src/reaction_header.F90 @@ -0,0 +1,21 @@ +module reaction_header + + use product_header, only: ReactionProduct + + implicit none + +!=============================================================================== +! REACTION contains the cross-section and secondary energy and angle +! distributions for a single reaction in a continuous-energy ACE-format table +!=============================================================================== + + type Reaction + integer :: MT ! ENDF MT value + real(8) :: Q_value ! Reaction Q value + integer :: threshold ! Energy grid index of threshold + logical :: scatter_in_cm ! scattering system in center-of-mass? + real(8), allocatable :: sigma(:) ! Cross section values + type(ReactionProduct), allocatable :: products(:) + end type Reaction + +end module reaction_header diff --git a/src/secondary_correlated.F90 b/src/secondary_correlated.F90 index c0289d55eb..b556d02dc5 100644 --- a/src/secondary_correlated.F90 +++ b/src/secondary_correlated.F90 @@ -1,8 +1,8 @@ module secondary_correlated + use angleenergy_header, only: AngleEnergy use constants, only: ZERO, ONE, TWO, HISTOGRAM, LINEAR_LINEAR use distribution_univariate, only: DistributionContainer - use secondary_header, only: AngleEnergy use random_lcg, only: prn use search, only: binary_search @@ -24,8 +24,8 @@ module secondary_correlated integer :: n_region ! number of interpolation regions integer, allocatable :: breakpoints(:) ! breakpoints of interpolation regions integer, allocatable :: interpolation(:) ! interpolation region codes - real(8), allocatable :: energy_in(:) ! incoming energies - type(AngleEnergyTable), allocatable :: table(:) ! outgoing E/mu distributions + real(8), allocatable :: energy(:) ! incoming energies + type(AngleEnergyTable), allocatable :: distribution(:) ! outgoing E/mu distributions contains procedure :: sample => correlated_sample end type CorrelatedAngleEnergy @@ -61,17 +61,17 @@ contains ! find energy bin and calculate interpolation factor -- if the energy is ! outside the range of the tabulated energies, choose the first or last bins - n_energy_in = size(this%energy_in) - if (E_in < this%energy_in(1)) then + n_energy_in = size(this%energy) + if (E_in < this%energy(1)) then i = 1 r = ZERO - elseif (E_in > this%energy_in(n_energy_in)) then + elseif (E_in > this%energy(n_energy_in)) then i = n_energy_in - 1 r = ONE else - i = binary_search(this%energy_in, n_energy_in, E_in) - r = (E_in - this%energy_in(i)) / & - (this%energy_in(i+1) - this%energy_in(i)) + i = binary_search(this%energy, n_energy_in, E_in) + r = (E_in - this%energy(i)) / & + (this%energy(i+1) - this%energy(i)) end if ! Sample between the ith and (i+1)th bin @@ -82,23 +82,23 @@ contains end if ! interpolation for energy E1 and EK - n_energy_out = size(this%table(i)%e_out) - E_i_1 = this%table(i)%e_out(1) - E_i_K = this%table(i)%e_out(n_energy_out) + n_energy_out = size(this%distribution(i)%e_out) + E_i_1 = this%distribution(i)%e_out(1) + E_i_K = this%distribution(i)%e_out(n_energy_out) - n_energy_out = size(this%table(i+1)%e_out) - E_i1_1 = this%table(i+1)%e_out(1) - E_i1_K = this%table(i+1)%e_out(n_energy_out) + n_energy_out = size(this%distribution(i+1)%e_out) + E_i1_1 = this%distribution(i+1)%e_out(1) + E_i1_K = this%distribution(i+1)%e_out(n_energy_out) E_1 = E_i_1 + r*(E_i1_1 - E_i_1) E_K = E_i_K + r*(E_i1_K - E_i_K) ! determine outgoing energy bin - n_energy_out = size(this%table(l)%e_out) + n_energy_out = size(this%distribution(l)%e_out) r1 = prn() - c_k = this%table(l)%c(1) + c_k = this%distribution(l)%c(1) do k = 1, n_energy_out - 1 - c_k1 = this%table(l)%c(k+1) + c_k1 = this%distribution(l)%c(k+1) if (r1 < c_k1) exit c_k = c_k1 end do @@ -106,9 +106,9 @@ contains ! check to make sure k is <= NP - 1 k = min(k, n_energy_out - 1) - E_l_k = this%table(l)%e_out(k) - p_l_k = this%table(l)%p(k) - if (this%table(l)%interpolation == HISTOGRAM) then + E_l_k = this%distribution(l)%e_out(k) + p_l_k = this%distribution(l)%p(k) + if (this%distribution(l)%interpolation == HISTOGRAM) then ! Histogram interpolation if (p_l_k > ZERO) then E_out = E_l_k + (r1 - c_k)/p_l_k @@ -116,10 +116,10 @@ contains E_out = E_l_k end if - elseif (this%table(l)%interpolation == LINEAR_LINEAR) then + elseif (this%distribution(l)%interpolation == LINEAR_LINEAR) then ! Linear-linear interpolation - E_l_k1 = this%table(l)%e_out(k+1) - p_l_k1 = this%table(l)%p(k+1) + E_l_k1 = this%distribution(l)%e_out(k+1) + p_l_k1 = this%distribution(l)%p(k+1) frac = (p_l_k1 - p_l_k)/(E_l_k1 - E_l_k) if (frac == ZERO) then @@ -139,9 +139,9 @@ contains ! Find correlated angular distribution for closest outgoing energy bin if (r1 - c_k < c_k1 - r1) then - mu = this%table(l)%angle(k)%obj%sample() + mu = this%distribution(l)%angle(k)%obj%sample() else - mu = this%table(l)%angle(k + 1)%obj%sample() + mu = this%distribution(l)%angle(k + 1)%obj%sample() end if end subroutine correlated_sample diff --git a/src/secondary_header.F90 b/src/secondary_header.F90 deleted file mode 100644 index d9a18b6b15..0000000000 --- a/src/secondary_header.F90 +++ /dev/null @@ -1,83 +0,0 @@ -module secondary_header - - use constants, only: ZERO - use endf_header, only: Tab1 - use interpolation, only: interpolate_tab1 - use random_lcg, only: prn - -!=============================================================================== -! ANGLEENERGY (abstract) defines a correlated or uncorrelated angle-energy -! distribution that is a function of incoming energy. Each derived type must -! implement a sample() subroutine that returns an outgoing energy and scattering -! cosine given an incoming energy. -!=============================================================================== - - type, abstract :: AngleEnergy - contains - procedure(angleenergy_sample_), deferred :: sample - end type AngleEnergy - - abstract interface - subroutine angleenergy_sample_(this, E_in, E_out, mu) - import AngleEnergy - class(AngleEnergy), intent(in) :: this - real(8), intent(in) :: E_in - real(8), intent(out) :: E_out - real(8), intent(out) :: mu - end subroutine angleenergy_sample_ - end interface - - type :: AngleEnergyContainer - class(AngleEnergy), allocatable :: obj - end type AngleEnergyContainer - -!=============================================================================== -! SECONDARYDISTRIBUTION stores multiple angle-energy distributions, each of -! which has a given probability of occurring for a given incoming energy. In -! general, most secondary distributions only have one angle-energy distribution, -! but for some cases (e.g., (n,2n) in certain nuclides) multiple distinct -! distributions exist. -!=============================================================================== - - type :: SecondaryDistribution - type(Tab1), allocatable :: applicability(:) - type(AngleEnergyContainer), allocatable :: distribution(:) - contains - procedure :: sample => secondary_sample - end type SecondaryDistribution - -contains - - subroutine secondary_sample(this, E_in, E_out, mu) - class(SecondaryDistribution), intent(in) :: this - real(8), intent(in) :: E_in ! incoming energy - real(8), intent(out) :: E_out ! sampled outgoing energy - real(8), intent(out) :: mu ! sampled scattering cosine - - integer :: i ! loop counter - integer :: n ! number of angle-energy distributions - real(8) :: prob ! cumulative probability - real(8) :: c ! sampled cumulative probability - - n = size(this%applicability) - if (n > 1) then - prob = ZERO - c = prn() - do i = 1, n - ! Determine probability that i-th energy distribution is sampled - prob = prob + interpolate_tab1(this%applicability(i), E_in) - - ! If i-th distribution is sampled, sample energy from the distribution - if (c <= prob) then - call this%distribution(i)%obj%sample(E_in, E_out, mu) - exit - end if - end do - else - ! If only one distribution is present, go ahead and sample it - call this%distribution(1)%obj%sample(E_in, E_out, mu) - end if - - end subroutine secondary_sample - -end module secondary_header diff --git a/src/secondary_kalbach.F90 b/src/secondary_kalbach.F90 index 5e6949206e..668917d62a 100644 --- a/src/secondary_kalbach.F90 +++ b/src/secondary_kalbach.F90 @@ -1,7 +1,7 @@ module secondary_kalbach + use angleenergy_header, only: AngleEnergy use constants, only: ZERO, ONE, TWO, HISTOGRAM, LINEAR_LINEAR - use secondary_header, only: AngleEnergy use random_lcg, only: prn use search, only: binary_search @@ -25,8 +25,8 @@ module secondary_kalbach integer :: n_region ! number of interpolation regions integer, allocatable :: breakpoints(:) ! breakpoints of interpolation regions integer, allocatable :: interpolation(:) ! interpolation region codes - real(8), allocatable :: energy_in(:) ! incoming energies - type(KalbachMannTable), allocatable :: table(:) ! outgoing E/mu parameters + real(8), allocatable :: energy(:) ! incoming energies + type(KalbachMannTable), allocatable :: distribution(:) ! outgoing E/mu parameters contains procedure :: sample => kalbachmann_sample end type KalbachMann @@ -64,17 +64,17 @@ contains ! find energy bin and calculate interpolation factor -- if the energy is ! outside the range of the tabulated energies, choose the first or last bins - n_energy_in = size(this%energy_in) - if (E_in < this%energy_in(1)) then + n_energy_in = size(this%energy) + if (E_in < this%energy(1)) then i = 1 r = ZERO - elseif (E_in > this%energy_in(n_energy_in)) then + elseif (E_in > this%energy(n_energy_in)) then i = n_energy_in - 1 r = ONE else - i = binary_search(this%energy_in, n_energy_in, E_in) - r = (E_in - this%energy_in(i)) / & - (this%energy_in(i+1) - this%energy_in(i)) + i = binary_search(this%energy, n_energy_in, E_in) + r = (E_in - this%energy(i)) / & + (this%energy(i+1) - this%energy(i)) end if ! Sample between the ith and (i+1)th bin @@ -85,23 +85,23 @@ contains end if ! interpolation for energy E1 and EK - n_energy_out = size(this%table(i)%e_out) - E_i_1 = this%table(i)%e_out(1) - E_i_K = this%table(i)%e_out(n_energy_out) + n_energy_out = size(this%distribution(i)%e_out) + E_i_1 = this%distribution(i)%e_out(1) + E_i_K = this%distribution(i)%e_out(n_energy_out) - n_energy_out = size(this%table(i+1)%e_out) - E_i1_1 = this%table(i+1)%e_out(1) - E_i1_K = this%table(i+1)%e_out(n_energy_out) + n_energy_out = size(this%distribution(i+1)%e_out) + E_i1_1 = this%distribution(i+1)%e_out(1) + E_i1_K = this%distribution(i+1)%e_out(n_energy_out) E_1 = E_i_1 + r*(E_i1_1 - E_i_1) E_K = E_i_K + r*(E_i1_K - E_i_K) ! determine outgoing energy bin - n_energy_out = size(this%table(l)%e_out) + n_energy_out = size(this%distribution(l)%e_out) r1 = prn() - c_k = this%table(l)%c(1) + c_k = this%distribution(l)%c(1) do k = 1, n_energy_out - 1 - c_k1 = this%table(l)%c(k+1) + c_k1 = this%distribution(l)%c(k+1) if (r1 < c_k1) exit c_k = c_k1 end do @@ -109,9 +109,9 @@ contains ! check to make sure k is <= NP - 1 k = min(k, n_energy_out - 1) - E_l_k = this%table(l)%e_out(k) - p_l_k = this%table(l)%p(k) - if (this%table(l)%interpolation == HISTOGRAM) then + E_l_k = this%distribution(l)%e_out(k) + p_l_k = this%distribution(l)%p(k) + if (this%distribution(l)%interpolation == HISTOGRAM) then ! Histogram interpolation if (p_l_k > ZERO) then E_out = E_l_k + (r1 - c_k)/p_l_k @@ -120,13 +120,13 @@ contains end if ! Determine Kalbach-Mann parameters - km_r = this%table(l)%r(k) - km_a = this%table(l)%a(k) + km_r = this%distribution(l)%r(k) + km_a = this%distribution(l)%a(k) - elseif (this%table(l)%interpolation == LINEAR_LINEAR) then + elseif (this%distribution(l)%interpolation == LINEAR_LINEAR) then ! Linear-linear interpolation - E_l_k1 = this%table(l)%e_out(k+1) - p_l_k1 = this%table(l)%p(k+1) + E_l_k1 = this%distribution(l)%e_out(k+1) + p_l_k1 = this%distribution(l)%p(k+1) frac = (p_l_k1 - p_l_k)/(E_l_k1 - E_l_k) if (frac == ZERO) then @@ -137,10 +137,10 @@ contains end if ! Determine Kalbach-Mann parameters - km_r = this%table(l)%r(k) + (E_out - E_l_k)/(E_l_k1 - E_l_k) * & - (this%table(l)%r(k+1) - this%table(l)%r(k)) - km_a = this%table(l)%a(k) + (E_out - E_l_k)/(E_l_k1 - E_l_k) * & - (this%table(l)%a(k+1) - this%table(l)%a(k)) + km_r = this%distribution(l)%r(k) + (E_out - E_l_k)/(E_l_k1 - E_l_k) * & + (this%distribution(l)%r(k+1) - this%distribution(l)%r(k)) + km_a = this%distribution(l)%a(k) + (E_out - E_l_k)/(E_l_k1 - E_l_k) * & + (this%distribution(l)%a(k+1) - this%distribution(l)%a(k)) end if ! Now interpolate between incident energy bins i and i + 1 diff --git a/src/secondary_nbody.F90 b/src/secondary_nbody.F90 new file mode 100644 index 0000000000..71cae6fa2a --- /dev/null +++ b/src/secondary_nbody.F90 @@ -0,0 +1,70 @@ +module secondary_nbody + + use angleenergy_header, only: AngleEnergy + use constants, only: ONE, TWO, PI + use math, only: maxwell_spectrum + use random_lcg, only: prn + +!=============================================================================== +! NBODYPHASESPACE gives the energy distribution for particles emitted from +! neutron and charged-particle reactions. This corresponds to ACE law 66 and +! ENDF File 6, LAW=6. +!=============================================================================== + + type, extends(AngleEnergy) :: NBodyPhaseSpace + integer :: n_bodies + real(8) :: mass_ratio + real(8) :: A + real(8) :: Q + contains + procedure :: sample => nbody_sample + end type NBodyPhaseSpace + +contains + + subroutine nbody_sample(this, E_in, E_out, mu) + class(NBodyPhaseSpace), intent(in) :: this + real(8), intent(in) :: E_in ! incoming energy + real(8), intent(out) :: E_out ! sampled outgoing energy + real(8), intent(out) :: mu ! sampled outgoing energy + + real(8) :: Ap ! total mass of particles in neutron masses + real(8) :: E_max ! maximum possible COM energy + real(8) :: x, y, v + real(8) :: r1, r2, r3, r4, r5, r6 + + ! By definition, the distribution of the angle is isotropic for an N-body + ! phase space distribution + mu = TWO*prn() - ONE + + ! Determine E_max parameter + Ap = this%mass_ratio + E_max = (Ap - ONE)/Ap * (this%A/(this%A + ONE)*E_in + this%Q) + + ! x is essentially a Maxwellian distribution + x = maxwell_spectrum(ONE) + + select case (this%n_bodies) + case (3) + y = maxwell_spectrum(ONE) + case (4) + r1 = prn() + r2 = prn() + r3 = prn() + y = -log(r1*r2*r3) + case (5) + r1 = prn() + r2 = prn() + r3 = prn() + r4 = prn() + r5 = prn() + r6 = prn() + y = -log(r1*r2*r3*r4) - log(r5) * cos(PI/TWO*r6)**2 + end select + + ! Now determine v and E_out + v = x/(x+y) + E_out = E_max * v + end subroutine nbody_sample + +end module secondary_nbody diff --git a/src/secondary_uncorrelated.F90 b/src/secondary_uncorrelated.F90 index 22a56aa127..7bc8fa13d9 100644 --- a/src/secondary_uncorrelated.F90 +++ b/src/secondary_uncorrelated.F90 @@ -1,9 +1,9 @@ module secondary_uncorrelated use angle_distribution, only: AngleDistribution + use angleenergy_header, only: AngleEnergy use constants, only: ONE, TWO use energy_distribution, only: EnergyDistribution - use secondary_header, only: AngleEnergy use random_lcg, only: prn !=============================================================================== diff --git a/src/summary.F90 b/src/summary.F90 index e662aa473b..047eec2a7b 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -1,6 +1,5 @@ module summary - use ace_header, only: Reaction, UrrData use constants use endf, only: reaction_name use geometry_header, only: Cell, Universe, Lattice, RectLattice, & diff --git a/src/tally.F90 b/src/tally.F90 index 5a54d9846e..71444107f4 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -1,6 +1,5 @@ module tally - use ace_header, only: Reaction use constants use error, only: fatal_error use geometry_header @@ -245,9 +244,9 @@ contains ! Only analog estimators are available. ! Skip any event where the particle didn't scatter if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP - ! For scattering production, we need to use the pre-collision - ! weight times the multiplicity as the estimate for the number of - ! neutrons exiting a reaction with neutrons in the exit channel + ! For scattering production, we need to use the pre-collision weight + ! times the yield as the estimate for the number of neutrons exiting a + ! reaction with neutrons in the exit channel if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then ! Don't waste time on very common reactions we know have multiplicities @@ -257,15 +256,15 @@ contains m = nuclides(p%event_nuclide)%reaction_index% & get_key(p % event_MT) - ! Get multiplicity and apply to score + ! Get yield and apply to score associate (rxn => nuclides(p%event_nuclide)%reactions(m)) - if (rxn % multiplicity_with_E) then - ! Then the multiplicity was already incorporated in to p % wgt + if (rxn % products(1) % yield_with_E) then + ! Then the yield was already incorporated in to p % wgt ! per the scattering routine, score = p % wgt else - ! Grab the multiplicity from the rxn - score = p % last_wgt * rxn % multiplicity + ! Grab the yield from the rxn + score = p % last_wgt * rxn % products(1) % yield end if end associate end if @@ -279,7 +278,7 @@ contains cycle SCORE_LOOP end if ! For scattering production, we need to use the pre-collision - ! weight times the multiplicity as the estimate for the number of + ! weight times the yield as the estimate for the number of ! neutrons exiting a reaction with neutrons in the exit channel if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then @@ -290,15 +289,15 @@ contains m = nuclides(p%event_nuclide)%reaction_index% & get_key(p % event_MT) - ! Get multiplicity and apply to score + ! Get yield and apply to score associate (rxn => nuclides(p%event_nuclide)%reactions(m)) - if (rxn % multiplicity_with_E) then - ! Then the multiplicity was already incorporated in to p % wgt + if (rxn % products(1) % yield_with_E) then + ! Then the yield was already incorporated in to p % wgt ! per the scattering routine, score = p % wgt else - ! Grab the multiplicity from the rxn - score = p % last_wgt * rxn % multiplicity + ! Grab the yield from the rxn + score = p % last_wgt * rxn % products(1) % yield end if end associate end if @@ -312,7 +311,7 @@ contains cycle SCORE_LOOP end if ! For scattering production, we need to use the pre-collision - ! weight times the multiplicity as the estimate for the number of + ! weight times the yield as the estimate for the number of ! neutrons exiting a reaction with neutrons in the exit channel if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then @@ -323,15 +322,15 @@ contains m = nuclides(p%event_nuclide)%reaction_index% & get_key(p % event_MT) - ! Get multiplicity and apply to score + ! Get yield and apply to score associate (rxn => nuclides(p%event_nuclide)%reactions(m)) - if (rxn % multiplicity_with_E) then - ! Then the multiplicity was already incorporated in to p % wgt + if (rxn % products(1) % yield_with_E) then + ! Then the yield was already incorporated in to p % wgt ! per the scattering routine, score = p % wgt else - ! Grab the multiplicity from the rxn - score = p % last_wgt * rxn % multiplicity + ! Grab the yield from the rxn + score = p % last_wgt * rxn % products(1) % yield end if end associate end if diff --git a/src/urr_header.F90 b/src/urr_header.F90 new file mode 100644 index 0000000000..96e182d2e3 --- /dev/null +++ b/src/urr_header.F90 @@ -0,0 +1,20 @@ +module urr_header + + implicit none + +!=============================================================================== +! URRDATA contains probability tables for the unresolved resonance range. +!=============================================================================== + + type UrrData + integer :: n_energy ! # of incident neutron energies + integer :: n_prob ! # of probabilities + integer :: interp ! inteprolation (2=lin-lin, 5=log-log) + integer :: inelastic_flag ! inelastic competition flag + integer :: absorption_flag ! other absorption flag + logical :: multiply_smooth ! multiply by smooth cross section? + real(8), allocatable :: energy(:) ! incident energies + real(8), allocatable :: prob(:,:,:) ! actual probabibility tables + end type UrrData + +end module urr_header From 3dc19e5070d1f413132313a7d884ec2c7724ec2f Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 17 Mar 2016 13:38:27 -0500 Subject: [PATCH 384/650] Refactor prompt/delayed fission neutron yield/distribution data --- src/ace.F90 | 440 ++++++++++++++-------------- src/constants.F90 | 6 + src/cross_section.F90 | 3 +- src/endf_header.F90 | 190 +++++++++++- src/energy_distribution.F90 | 19 +- src/fission.F90 | 161 ---------- src/interpolation.F90 | 205 ------------- src/nuclide_header.F90 | 222 ++++++++------ src/physics.F90 | 122 ++++---- src/product_header.F90 | 17 +- src/tally.F90 | 78 ++--- tests/test_tallies/results_true.dat | 2 +- 12 files changed, 652 insertions(+), 813 deletions(-) delete mode 100644 src/fission.F90 delete mode 100644 src/interpolation.F90 diff --git a/src/ace.F90 b/src/ace.F90 index 431a9d4238..e354f5866f 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -4,15 +4,16 @@ module ace use constants use distribution_univariate, only: Uniform, Equiprobable, Tabular use endf, only: is_fission, is_disappearance + use endf_header, only: Constant1D, Tabulated1D, Polynomial use energy_distribution, only: TabularEquiprobable, LevelInelastic, & ContinuousTabular, MaxwellEnergy, Evaporation, WattEnergy use error, only: fatal_error, warning - use fission, only: nu_total use global use list_header, only: ListInt use material_header, only: Material use nuclide_header use output, only: write_message + use product_header, only: ReactionProduct use sab_header use set_header, only: SetChar use secondary_correlated, only: CorrelatedAngleEnergy @@ -378,8 +379,8 @@ contains if (data_0K) then continue else - call read_nu_data(nuc) call read_reactions(nuc) + call read_nu_data(nuc) call read_energy_dist(nuc) call read_angular_dist(nuc) call read_unr_res(nuc) @@ -512,198 +513,209 @@ contains subroutine read_nu_data(nuc) type(NuclideCE), intent(inout) :: nuc - integer :: i ! loop index - integer :: JXS2 ! location for fission nu data - integer :: JXS24 ! location for delayed neutron data + integer :: i, j ! loop index + integer :: idx ! index in XSS integer :: KNU ! location for nu data integer :: LNU ! type of nu data (polynomial or tabular) - integer :: NC ! number of polynomial coefficients integer :: NR ! number of interpolation regions integer :: NE ! number of energies integer :: NPCR ! number of delayed neutron precursor groups - integer :: LED ! location of energy distribution locators - integer :: LDIS ! location of all energy distributions integer :: LOCC ! location of energy distributions for given MT integer :: LAW integer :: IDAT - integer :: lc ! locator - integer :: length ! length of data to allocate + real(8) :: total_group_probability + type(Tabulated1D) :: yield_delayed + type(Tabulated1D) :: group_probability - JXS2 = JXS(2) - JXS24 = JXS(24) - - if (JXS2 == 0) then - ! ======================================================================= - ! NO PROMPT/TOTAL NU DATA - nuc % nu_t_type = NU_NONE - nuc % nu_p_type = NU_NONE - - elseif (XSS(JXS2) > 0) then - ! ======================================================================= - ! PROMPT OR TOTAL NU DATA - KNU = JXS2 - LNU = int(XSS(KNU)) - if (LNU == 1) then - ! Polynomial data - nuc % nu_t_type = NU_POLYNOMIAL - nuc % nu_p_type = NU_NONE - - ! allocate determine how many coefficients for polynomial - NC = int(XSS(KNU+1)) - length = NC + 1 - elseif (LNU == 2) then - ! Tabular data - nuc % nu_t_type = NU_TABULAR - nuc % nu_p_type = NU_NONE - - ! determine number of interpolation regions and number of energies - NR = int(XSS(KNU+1)) - NE = int(XSS(KNU+2+2*NR)) - length = 2 + 2*NR + 2*NE - end if - - ! allocate space for nu data storage - allocate(nuc % nu_t_data(length)) - - ! read data -- for polynomial, this is the number of coefficients and the - ! coefficients themselves, and for tabular, this is interpolation data - ! and tabular E/nu - XSS_index = KNU + 1 - nuc % nu_t_data = get_real(length) - - elseif (XSS(JXS2) < 0) then - ! ======================================================================= - ! PROMPT AND TOTAL NU DATA -- read prompt data first - KNU = JXS2 + 1 - LNU = int(XSS(KNU)) - if (LNU == 1) then - ! Polynomial data - nuc % nu_p_type = NU_POLYNOMIAL - - ! allocate determine how many coefficients for polynomial - NC = int(XSS(KNU+1)) - length = NC + 1 - elseif (LNU == 2) then - ! Tabular data - nuc % nu_p_type = NU_TABULAR - - ! determine number of interpolation regions and number of energies - NR = int(XSS(KNU+1)) - NE = int(XSS(KNU+2+2*NR)) - length = 2 + 2*NR + 2*NE - end if - - ! allocate space for nu data storage - allocate(nuc % nu_p_data(length)) - - ! read data - XSS_index = KNU + 1 - nuc % nu_p_data = get_real(length) - - ! Now read total nu data - KNU = JXS2 + int(abs(XSS(JXS2))) + 1 - LNU = int(XSS(KNU)) - if (LNU == 1) then - ! Polynomial data - nuc % nu_t_type = NU_POLYNOMIAL - - ! allocate determine how many coefficients for polynomial - NC = int(XSS(KNU+1)) - length = NC + 1 - elseif (LNU == 2) then - ! Tabular data - nuc % nu_t_type = NU_TABULAR - - ! determine number of interpolation regions and number of energies - NR = int(XSS(KNU+1)) - NE = int(XSS(KNU+2+2*NR)) - length = 2 + 2*NR + 2*NE - end if - - ! allocate space for nu data storage - allocate(nuc % nu_t_data(length)) - - ! read data - XSS_index = KNU + 1 - nuc % nu_t_data = get_real(length) + if (JXS(2) == 0) then + ! Nuclide is not fissionable + return end if - if (JXS24 > 0) then - ! ======================================================================= - ! DELAYED NU DATA - - nuc % nu_d_type = NU_TABULAR - KNU = JXS24 - - ! determine size of tabular delayed nu data - NR = int(XSS(KNU+1)) - NE = int(XSS(KNU+2+2*NR)) - length = 2 + 2*NR + 2*NE - - ! allocate space for delayed nu data - allocate(nuc % nu_d_data(length)) - - ! read delayed nu data - XSS_index = KNU + 1 - nuc % nu_d_data = get_real(length) - - ! ======================================================================= - ! DELAYED NEUTRON ENERGY DISTRIBUTION - - ! Allocate space for secondary energy distribution + ! Determine number of delayed neutron precursors + if (JXS(24) > 0) then NPCR = NXS(8) + else + NPCR = 0 + end if + nuc % n_precursor = NPCR - ! Check to make sure nuclide does not have more than the maximum number - ! of delayed groups - if (NPCR > MAX_DELAYED_GROUPS) then - call fatal_error("Encountered nuclide with " // trim(to_str(NPCR)) & - // " delayed groups while the maximum number of delayed groups & - &set in constants.F90 is " // trim(to_str(MAX_DELAYED_GROUPS))) + ! Check to make sure nuclide does not have more than the maximum number + ! of delayed groups + if (NPCR > MAX_DELAYED_GROUPS) then + call fatal_error("Encountered nuclide with " // trim(to_str(NPCR)) & + // " delayed groups while the maximum number of delayed groups is " & + // trim(to_str(MAX_DELAYED_GROUPS))) + end if + + associate (rx => nuc % reactions(nuc % index_fission(1))) + ! Allocate space for prompt/delayed neutron products + allocate(rx % products(1 + NPCR)) + rx % products(:) % particle = NEUTRON + + if (XSS(JXS(2)) > 0) then + ! ======================================================================= + ! PROMPT OR TOTAL NU DATA + + ! If delayed data is present, then prompt data must be present. Otherwise + ! the product represents 'total' neutron emission + if (JXS(24) > 0) then + rx % products(1) % emission_mode = EMISSION_PROMPT + else + rx % products(1) % emission_mode = EMISSION_TOTAL + end if + + KNU = JXS(2) + LNU = nint(XSS(KNU)) + if (LNU == 1) then + ! Polynomial data + allocate(Polynomial :: rx % products(1) % yield) + + ! determine order of polynomial and read coefficients + select type (yield => rx % products(1) % yield) + type is (Polynomial) + call yield % from_ace(XSS, KNU + 1) + end select + + elseif (LNU == 2) then + ! Tabulated data + allocate(Tabulated1D :: rx % products(1) % yield) + + select type(yield => rx % products(1) % yield) + type is (Tabulated1D) + call yield % from_ace(XSS, KNU + 1) + end select + + end if + + elseif (XSS(JXS(2)) < 0) then + ! ======================================================================= + ! PROMPT AND TOTAL NU DATA + + rx % products(1) % emission_mode = EMISSION_PROMPT + + KNU = JXS(2) + 1 + LNU = nint(XSS(KNU)) + if (LNU == 1) then + ! Polynomial data + allocate(Polynomial :: rx % products(1) % yield) + + ! determine order of polynomial and read coefficients + select type (yield => rx % products(1) % yield) + type is (Polynomial) + call yield % from_ace(XSS, KNU + 1) + end select + + elseif (LNU == 2) then + ! Tabulated data + allocate(Tabulated1D :: rx % products(1) % yield) + + select type(yield => rx % products(1) % yield) + type is (Tabulated1D) + call yield % from_ace(XSS, KNU + 1) + end select + end if + + KNU = JXS(2) + nint(abs(XSS(JXS(2)))) + 1 + LNU = nint(XSS(KNU)) + if (LNU == 1) then + ! Polynomial data + allocate(Polynomial :: nuc % total_nu) + + ! determine order of polynomial and read coefficients + select type (yield => nuc % total_nu) + type is (Polynomial) + call yield % from_ace(XSS, KNU + 1) + end select + + elseif (LNU == 2) then + ! Tabulated data + allocate(Tabulated1D :: nuc % total_nu) + + select type(yield => nuc % total_nu) + type is (Tabulated1D) + call yield % from_ace(XSS, KNU + 1) + end select + end if end if - nuc % n_precursor = NPCR - allocate(nuc % nu_d_edist(NPCR)) + if (JXS(24) > 0) then + ! ======================================================================= + ! DELAYED NU DATA - LED = JXS(26) - LDIS = JXS(27) + ! Read total yield of delayed neutrons + call yield_delayed % from_ace(XSS, JXS(24) + 1) - ! Loop over all delayed neutron precursor groups - do i = 1, NPCR - ! find location of energy distribution data - LOCC = nint(XSS(LED + i - 1)) + idx = JXS(25) + total_group_probability = ZERO + do i = 1, NPCR + ! Set emission mode and decay rate + rx % products(1 + i) % emission_mode = EMISSION_DELAYED + rx % products(1 + i) % decay_rate = XSS(idx) - ! Determine law and location of data - LAW = nint(XSS(LDIS + LOCC)) - IDAT = nint(XSS(LDIS + LOCC + 1)) + ! Read probability for this precursor group + call group_probability % from_ace(XSS, idx + 1) - ! read energy distribution data - call get_energy_dist(nuc%nu_d_edist(i)%obj, LAW, LDIS, IDAT, & - ZERO, ZERO) + ! Set yield based on product of group probability and delayed yield + if (all(group_probability % y == group_probability % y(1))) then + allocate(Tabulated1D :: rx % products(1 + i) % yield) + select type (yield => rx % products(1 + i) % yield) + type is (Tabulated1D) + yield = yield_delayed + yield % y(:) = yield % y(:) * group_probability % y(1) + total_group_probability = total_group_probability + group_probability % y(1) + end select + else + call fatal_error("Delayed neutron with energy-dependent group & + &probability not implemented") + end if + + ! Advance position + NR = nint(XSS(idx + 1)) + NE = nint(XSS(idx + 2 + 2*NR)) + idx = idx + 3 + 2*(NR + NE) + + ! ======================================================================= + ! DELAYED NEUTRON ENERGY DISTRIBUTION + + ! Read energy distribution + LOCC = nint(XSS(JXS(26) + i - 1)) + + ! Determine law and location of data + LAW = nint(XSS(JXS(27) + LOCC)) + IDAT = nint(XSS(JXS(27) + LOCC + 1)) + + ! read energy distribution data + associate(p => rx % products(1 + i)) + allocate(p % applicability(1)) + allocate(p % distribution(1)) + call get_energy_dist(p % distribution(1) % obj, LAW, JXS(27), IDAT, & + ZERO, ZERO) + + select type (aedist => p % distribution(1) % obj) + type is (UncorrelatedAngleEnergy) + aedist % fission = .true. + end select + end associate + end do + + ! Renormalize delayed neutron yields to reflect fact that in ACE file, the + ! sum of the group probabilities is not exactly one + do i = 1, NPCR + select type (yield => rx % products(1 + i) % yield) + type is (Tabulated1D) + yield % y(:) = yield % y(:) / total_group_probability + end select + end do + end if + + ! Assign products to other fission reactions + do i = 2, nuc % n_fission + j = nuc % index_fission(i) + allocate(nuc % reactions(j) % products(1 + NPCR)) + nuc % reactions(j) % products(:) = rx % products(:) end do - - ! ======================================================================= - ! DELAYED NEUTRON PRECUSOR YIELDS AND CONSTANTS - - ! determine length of all precursor constants/yields/interp data - length = 0 - lc = JXS(25) - do i = 1, NPCR - NR = int(XSS(lc + length + 1)) - NE = int(XSS(lc + length + 2 + 2*NR)) - length = length + 3 + 2*NR + 2*NE - end do - - ! allocate space for precusor data - allocate(nuc % nu_d_precursor_data(length)) - - ! read delayed neutron precursor data - XSS_index = lc - nuc % nu_d_precursor_data = get_real(length) - - else - nuc % nu_d_type = NU_NONE - nuc % n_precursor = 0 - end if + end associate end subroutine read_nu_data @@ -727,7 +739,7 @@ contains integer :: LOCA ! location of cross-section for given MT integer :: IE ! reaction's starting index on energy grid integer :: NE ! number of energies - integer :: NR ! number of interpolation regions + real(8) :: y type(ListInt) :: MTs LMT = JXS(3) @@ -749,7 +761,12 @@ contains rxn % MT = 2 rxn % Q_value = ZERO allocate(rxn % products(1)) - rxn % products(1) % yield = 1 + rxn % products(1) % particle = NEUTRON + allocate(Constant1D :: rxn % products(1) % yield) + select type(yield => rxn % products(1) % yield) + type is (Constant1D) + yield % y = 1 + end select rxn % threshold = 1 rxn % scatter_in_cm = .true. allocate(rxn % products(1) % distribution(1)) @@ -771,44 +788,33 @@ contains ! read MT number, Q-value, and neutrons produced rxn % MT = int(XSS(LMT + i - 1)) rxn % Q_value = XSS(JXS4 + i - 1) - allocate(rxn % products(1)) - rxn % products(1) % yield = abs(nint(XSS(JXS5 + i - 1))) rxn % scatter_in_cm = (nint(XSS(JXS5 + i - 1)) < 0) - ! Read energy-dependent multiplicities - if (rxn % products(1) % yield > 100) then - ! Set flag and allocate space for Tab1 to store yield - rxn % products(1) % yield_with_E = .true. - allocate(rxn % products(1) % yield_E) + if (.not. is_fission(rxn % MT)) then + allocate(rxn % products(1)) + rxn % products(1) % particle = NEUTRON - XSS_index = JXS(11) + rxn % products(1) % yield - 101 - NR = nint(XSS(XSS_index)) - rxn % products(1) % yield_E % n_regions = NR + y = abs(nint(XSS(JXS5 + i - 1))) + if (y > 100) then + ! Read energy-dependent multiplicities - ! allocate space for ENDF interpolation parameters - if (NR > 0) then - allocate(rxn % products(1) % yield_E % nbt(NR)) - allocate(rxn % products(1) % yield_E % int(NR)) + ! Set flag and allocate space for Tabulated1D to store yield + allocate(Tabulated1D :: rxn % products(1) % yield) + + ! Read yield function + select type (yield => rxn % products(1) % yield) + type is (Tabulated1D) + XSS_index = JXS(11) + int(y) - 101 + call yield % from_ace(XSS, XSS_index) + end select + else + ! Integral yield + allocate(Constant1D :: rxn % products(1) % yield) + select type (yield => rxn % products(1) % yield) + type is (Constant1D) + yield % y = y + end select end if - - ! read ENDF interpolation parameters - XSS_index = XSS_index + 1 - if (NR > 0) then - rxn % products(1) % yield_E % nbt = get_int(NR) - rxn % products(1) % yield_E % int = get_int(NR) - end if - - ! allocate space for yield data - XSS_index = XSS_index + 2*NR - NE = nint(XSS(XSS_index)) - rxn % products(1) % yield_E % n_pairs = NE - allocate(rxn % products(1) % yield_E % x(NE)) - allocate(rxn % products(1) % yield_E % y(NE)) - - ! read yield data - XSS_index = XSS_index + 1 - rxn % products(1) % yield_E % x = get_real(NE) - rxn % products(1) % yield_E % y = get_real(NE) end if ! read starting energy index @@ -1469,7 +1475,6 @@ contains end if end subroutine read_unr_res - !=============================================================================== ! GENERATE_NU_FISSION precalculates the microscopic nu-fission cross section for ! a given nuclide. This is done so that the nu_total function does not need to @@ -1480,20 +1485,11 @@ contains type(NuclideCE), intent(inout) :: nuc integer :: i ! index on nuclide energy grid - real(8) :: E ! energy - real(8) :: nu ! # of neutrons per fission - do i = 1, nuc % n_grid - ! determine energy - E = nuc % energy(i) - - ! determine total nu at given energy - nu = nu_total(nuc, E) - - ! determine nu-fission microscopic cross section - nuc % nu_fission(i) = nu * nuc % fission(i) + do i = 1, size(nuc % energy) + nuc % nu_fission(i) = nuc % nu(nuc % energy(i), EMISSION_TOTAL) * & + nuc % fission(i) end do - end subroutine generate_nu_fission !=============================================================================== diff --git a/src/constants.F90 b/src/constants.F90 index 5d91d2be8f..8863ca18c4 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -223,6 +223,12 @@ module constants NU_POLYNOMIAL = 1, & ! Nu values given by polynomial NU_TABULAR = 2 ! Nu values given by tabular distribution + ! Secondary particle emission type + integer, parameter :: & + EMISSION_PROMPT = 1, & ! Prompt emission of secondary particle + EMISSION_DELAYED = 2, & ! Delayed emission of secondary particle + EMISSION_TOTAL = 3 ! Yield represents total emission (prompt + delayed) + ! Cross section filetypes integer, parameter :: & ASCII = 1, & ! ASCII cross section file diff --git a/src/cross_section.F90 b/src/cross_section.F90 index 4c529213b2..d0509deb8d 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -3,7 +3,6 @@ module cross_section use constants use energy_grid, only: grid_method, log_spacing use error, only: fatal_error - use fission, only: nu_total use global use list_header, only: ListElemInt use material_header, only: Material @@ -485,7 +484,7 @@ contains ! Determine nu-fission cross section if (nuc % fissionable) then - micro_xs(i_nuclide) % nu_fission = nu_total(nuc, E) * & + micro_xs(i_nuclide) % nu_fission = nuc % nu(E, EMISSION_TOTAL) * & micro_xs(i_nuclide) % fission end if end associate diff --git a/src/endf_header.F90 b/src/endf_header.F90 index 7388ea2f54..e9a073f4e6 100644 --- a/src/endf_header.F90 +++ b/src/endf_header.F90 @@ -1,12 +1,51 @@ module endf_header - implicit none + use constants, only: ZERO, HISTOGRAM, LINEAR_LINEAR, LINEAR_LOG, & + LOG_LINEAR, LOG_LOG + use search, only: binary_search + +implicit none + + type, abstract :: Function1D + contains + procedure(function1d_evaluate_), deferred :: evaluate + end type Function1D + + abstract interface + pure function function1d_evaluate_(this, x) result(y) + import Function1D + class(Function1D), intent(in) :: this + real(8), intent(in) :: x + real(8) :: y + end function function1d_evaluate_ + end interface !=============================================================================== -! TAB1 represents a one-dimensional interpolable function +! CONSTANT1D represents a constant one-dimensional function !=============================================================================== - type Tab1 + type, extends(Function1D) :: Constant1D + real(8) :: y + contains + procedure :: evaluate => constant1d_evaluate + end type Constant1D + +!=============================================================================== +! POLYNOMIAL represents a one-dimensional function expressed as a polynomial +!=============================================================================== + + type, extends(Function1D) :: Polynomial + real(8), allocatable :: coef(:) ! coefficients + contains + procedure :: evaluate => polynomial_evaluate + procedure :: from_ace => polynomial_from_ace + end type Polynomial + +!=============================================================================== +! TABULATED1D represents a one-dimensional interpolable function +!=============================================================================== + + type, extends(Function1D) :: Tabulated1D integer :: n_regions = 0 ! # of interpolation regions integer, allocatable :: nbt(:) ! values separating interpolation regions integer, allocatable :: int(:) ! interpolation scheme @@ -14,18 +53,78 @@ module endf_header real(8), allocatable :: x(:) ! values of abscissa real(8), allocatable :: y(:) ! values of ordinate contains - procedure :: from_ace - end type Tab1 + procedure :: from_ace => tabulated1d_from_ace + procedure :: evaluate => tabulated1d_evaluate + end type Tabulated1D contains - subroutine from_ace(this, xss, idx) - class(Tab1), intent(inout) :: this +!=============================================================================== +! Constant1D implementation +!=============================================================================== + + pure function constant1d_evaluate(this, x) result(y) + class(Constant1D), intent(in) :: this + real(8), intent(in) :: x + real(8) :: y + + y = this % y + end function constant1d_evaluate + +!=============================================================================== +! Polynomial implementation +!=============================================================================== + + subroutine polynomial_from_ace(this, xss, idx) + class(Polynomial), intent(inout) :: this + real(8), intent(in) :: xss(:) + integer, intent(in) :: idx + + integer :: nc ! number of coefficients (order - 1) + + ! Clear space + if (allocated(this % coef)) deallocate(this % coef) + + ! Determine number of coefficients + nc = nint(xss(idx)) + + ! Allocate space for and read coefficients + allocate(this % coef(nc)) + this % coef(:) = xss(idx + 1 : idx + nc) + end subroutine polynomial_from_ace + + pure function polynomial_evaluate(this, x) result(y) + class(Polynomial), intent(in) :: this + real(8), intent(in) :: x + real(8) :: y + + integer :: i + + ! Use Horner's rule to evaluate polynomial. Note that coefficients are + ! ordered in increasing powers of x. + y = ZERO + do i = size(this % coef), 1, -1 + y = y*x + this % coef(i) + end do + end function polynomial_evaluate + +!=============================================================================== +! Tabulated1D implementation +!=============================================================================== + + subroutine tabulated1d_from_ace(this, xss, idx) + class(Tabulated1D), intent(inout) :: this real(8), intent(in) :: xss(:) integer, intent(in) :: idx integer :: nr, ne + ! Clear space + if (allocated(this % nbt)) deallocate(this % nbt) + if (allocated(this % int)) deallocate(this % int) + if (allocated(this % x)) deallocate(this % x) + if (allocated(this % y)) deallocate(this % y) + ! Determine number of regions nr = nint(xss(idx)) this%n_regions = nr @@ -47,6 +146,81 @@ contains allocate(this%y(ne)) this%x(:) = xss(idx + 2*nr + 2 : idx + 2*nr + 1 + ne) this%y(:) = xss(idx + 2*nr + 2 + ne : idx + 2*nr + 1 + 2*ne) - end subroutine from_ace + end subroutine tabulated1d_from_ace + + pure function tabulated1d_evaluate(this, x) result(y) + class(Tabulated1D), intent(in) :: this + real(8), intent(in) :: x ! x value to find y at + real(8) :: y ! y(x) + + integer :: i ! bin in which to interpolate + integer :: j ! index for interpolation region + integer :: n_regions ! number of interpolation regions + integer :: n_pairs ! number of tabulated values + integer :: interp ! ENDF interpolation scheme + real(8) :: r ! interpolation factor + real(8) :: x0, x1 ! bounding x values + real(8) :: y0, y1 ! bounding y values + + ! determine number of interpolation regions and pairs + n_regions = this % n_regions + n_pairs = this % n_pairs + + ! find which bin the abscissa is in -- if the abscissa is outside the + ! tabulated range, the first or last point is chosen, i.e. no interpolation + ! is done outside the energy range + if (x < this % x(1)) then + y = this % y(1) + return + elseif (x > this % x(n_pairs)) then + y = this % y(n_pairs) + return + else + i = binary_search(this % x, n_pairs, x) + end if + + ! determine interpolation scheme + if (n_regions == 0) then + interp = LINEAR_LINEAR + elseif (n_regions == 1) then + interp = this % int(1) + elseif (n_regions > 1) then + do j = 1, n_regions + if (i < this % nbt(j)) then + interp = this % int(j) + exit + end if + end do + end if + + ! handle special case of histogram interpolation + if (interp == HISTOGRAM) then + y = this % y(i) + return + end if + + ! determine bounding values + x0 = this % x(i) + x1 = this % x(i + 1) + y0 = this % y(i) + y1 = this % y(i + 1) + + ! determine interpolation factor and interpolated value + select case (interp) + case (LINEAR_LINEAR) + r = (x - x0)/(x1 - x0) + y = y0 + r*(y1 - y0) + case (LINEAR_LOG) + r = log(x/x0)/log(x1/x0) + y = y0 + r*(y1 - y0) + case (LOG_LINEAR) + r = (x - x0)/(x1 - x0) + y = y0*exp(r*log(y1/y0)) + case (LOG_LOG) + r = log(x/x0)/log(x1/x0) + y = y0*exp(r*log(y1/y0)) + end select + + end function tabulated1d_evaluate end module endf_header diff --git a/src/energy_distribution.F90 b/src/energy_distribution.F90 index 3d35249342..3a42bb73db 100644 --- a/src/energy_distribution.F90 +++ b/src/energy_distribution.F90 @@ -1,8 +1,7 @@ module energy_distribution use constants, only: ZERO, ONE, TWO, PI, HISTOGRAM, LINEAR_LINEAR - use endf_header, only: Tab1 - use interpolation, only: interpolate_tab1 + use endf_header, only: Tabulated1D use math, only: maxwell_spectrum, watt_spectrum use random_lcg, only: prn use search, only: binary_search @@ -95,7 +94,7 @@ module energy_distribution !=============================================================================== type, extends(EnergyDistribution) :: MaxwellEnergy - type(Tab1) :: theta ! incoming-energy-dependent parameter + type(Tabulated1D) :: theta ! incoming-energy-dependent parameter real(8) :: u ! restriction energy contains procedure :: sample => maxwellenergy_sample @@ -107,7 +106,7 @@ module energy_distribution !=============================================================================== type, extends(EnergyDistribution) :: Evaporation - type(Tab1) :: theta + type(Tabulated1D) :: theta real(8) :: u contains procedure :: sample => evaporation_sample @@ -119,8 +118,8 @@ module energy_distribution !=============================================================================== type, extends(EnergyDistribution) :: WattEnergy - type(Tab1) :: a - type(Tab1) :: b + type(Tabulated1D) :: a + type(Tabulated1D) :: b real(8) :: u contains procedure :: sample => watt_sample @@ -317,7 +316,7 @@ contains real(8) :: theta ! Maxwell distribution parameter ! Get temperature corresponding to incoming energy - theta = interpolate_tab1(this%theta, E_in) + theta = this % theta % evaluate(E_in) do ! Sample maxwell fission spectrum @@ -337,7 +336,7 @@ contains real(8) :: x, y, v ! Get temperature corresponding to incoming energy - theta = interpolate_tab1(this%theta, E_in) + theta = this % theta % evaluate(E_in) y = (E_in - this%u)/theta v = 1 - exp(-y) @@ -360,10 +359,10 @@ contains real(8) :: a, b ! Watt spectrum parameters ! Determine Watt parameter 'a' from tabulated function - a = interpolate_tab1(this%a, E_in) + a = this % a % evaluate(E_in) ! Determine Watt parameter 'b' from tabulated function - b = interpolate_tab1(this%b, E_in) + b = this % b % evaluate(E_in) do ! Sample energy-dependent Watt fission spectrum diff --git a/src/fission.F90 b/src/fission.F90 deleted file mode 100644 index 77ee641787..0000000000 --- a/src/fission.F90 +++ /dev/null @@ -1,161 +0,0 @@ -module fission - - use nuclide_header, only: NuclideCE - use constants - use error, only: fatal_error - use interpolation, only: interpolate_tab1 - use search, only: binary_search - - implicit none - -contains - -!=============================================================================== -! NU_TOTAL calculates the total number of neutrons emitted per fission for a -! given nuclide and incoming neutron energy -!=============================================================================== - - pure function nu_total(nuc, E) result(nu) - type(NuclideCE), intent(in) :: nuc ! nuclide from which to find nu - real(8), intent(in) :: E ! energy of incoming neutron - real(8) :: nu ! number of total neutrons emitted per fission - - integer :: i ! loop index - integer :: NC ! number of polynomial coefficients - real(8) :: c ! polynomial coefficient - - if (nuc % nu_t_type == NU_NONE) then - nu = ERROR_REAL - elseif (nuc % nu_t_type == NU_POLYNOMIAL) then - ! determine number of coefficients - NC = int(nuc % nu_t_data(1)) - - ! sum up polynomial in energy - nu = ZERO - do i = 0, NC - 1 - c = nuc % nu_t_data(i+2) - nu = nu + c * E**i - end do - elseif (nuc % nu_t_type == NU_TABULAR) then - ! use ENDF interpolation laws to determine nu - nu = interpolate_tab1(nuc % nu_t_data, E) - end if - - end function nu_total - -!=============================================================================== -! NU_PROMPT calculates the total number of prompt neutrons emitted per fission -! for a given nuclide and incoming neutron energy -!=============================================================================== - - pure function nu_prompt(nuc, E) result(nu) - type(NuclideCE), intent(in) :: nuc ! nuclide from which to find nu - real(8), intent(in) :: E ! energy of incoming neutron - real(8) :: nu ! number of prompt neutrons emitted per fission - - integer :: i ! loop index - integer :: NC ! number of polynomial coefficients - real(8) :: c ! polynomial coefficient - - if (nuc % nu_p_type == NU_NONE) then - ! since no prompt or delayed data is present, this means all neutron - ! emission is prompt -- WARNING: This currently returns zero. The calling - ! routine needs to know this situation is occurring since we don't want - ! to call nu_total unnecessarily if it has already been called. - nu = ZERO - elseif (nuc % nu_p_type == NU_POLYNOMIAL) then - ! determine number of coefficients - NC = int(nuc % nu_p_data(1)) - - ! sum up polynomial in energy - nu = ZERO - do i = 0, NC - 1 - c = nuc % nu_p_data(i+2) - nu = nu + c * E**i - end do - elseif (nuc % nu_p_type == NU_TABULAR) then - ! use ENDF interpolation laws to determine nu - nu = interpolate_tab1(nuc % nu_p_data, E) - end if - - end function nu_prompt - -!=============================================================================== -! NU_DELAYED calculates the total number of delayed neutrons emitted per fission -! for a given nuclide and incoming neutron energy -!=============================================================================== - - pure function nu_delayed(nuc, E) result(nu) - type(NuclideCE), intent(in) :: nuc ! nuclide from which to find nu - real(8), intent(in) :: E ! energy of incoming neutron - real(8) :: nu ! number of delayed neutrons emitted per fission - - if (nuc % nu_d_type == NU_NONE) then - ! since no prompt or delayed data is present, this means all neutron - ! emission is prompt -- WARNING: This currently returns zero. The calling - ! routine needs to know this situation is occurring since we don't want - ! to call nu_delayed unnecessarily if it has already been called. - nu = ZERO - elseif (nuc % nu_d_type == NU_TABULAR) then - ! use ENDF interpolation laws to determine nu - nu = interpolate_tab1(nuc % nu_d_data, E) - end if - - end function nu_delayed - -!=============================================================================== -! YIELD_DELAYED calculates the fractional yield of delayed neutrons emitted for -! a given nuclide and incoming neutron energy in a given delayed group. -!=============================================================================== - - pure function yield_delayed(nuc, E, g) result(yield) - type(NuclideCE), intent(in) :: nuc ! nuclide from which to find nu - real(8), intent(in) :: E ! energy of incoming neutron - real(8) :: yield ! delayed neutron precursor yield - integer, intent(in) :: g ! the delayed neutron precursor group - integer :: d ! precursor group - integer :: lc ! index before start of energies/nu values - integer :: NR ! number of interpolation regions - integer :: NE ! number of energies tabulated - - yield = ZERO - - if (g > nuc % n_precursor .or. g < 1) then - ! if the precursor group is outside the range of precursor groups for - ! the input nuclide, return ZERO. - yield = ZERO - else if (nuc % nu_d_type == NU_NONE) then - ! since no prompt or delayed data is present, this means all neutron - ! emission is prompt -- WARNING: This currently returns zero. The calling - ! routine needs to know this situation is occurring since we don't want - ! to call yield_delayed unnecessarily if it has already been called. - yield = ZERO - else if (nuc % nu_d_type == NU_TABULAR) then - - lc = 1 - - ! loop over delayed groups and determine the yield for the desired group - do d = 1, nuc % n_precursor - - ! determine number of interpolation regions and energies - NR = int(nuc % nu_d_precursor_data(lc + 1)) - NE = int(nuc % nu_d_precursor_data(lc + 2 + 2*NR)) - - ! check if this is the desired group - if (d == g) then - - ! determine delayed neutron precursor yield for group g - yield = interpolate_tab1(nuc % nu_d_precursor_data( & - lc+1:lc+2+2*NR+2*NE), E) - - exit - end if - - ! advance pointer - lc = lc + 2 + 2*NR + 2*NE + 1 - end do - end if - - end function yield_delayed - -end module fission diff --git a/src/interpolation.F90 b/src/interpolation.F90 deleted file mode 100644 index 5f87870677..0000000000 --- a/src/interpolation.F90 +++ /dev/null @@ -1,205 +0,0 @@ -module interpolation - - use constants - use endf_header, only: Tab1 - use search, only: binary_search - use string, only: to_str - - implicit none - - interface interpolate_tab1 - module procedure interpolate_tab1_array, interpolate_tab1_object - end interface interpolate_tab1 - -contains - -!=============================================================================== -! INTERPOLATE_TAB1_ARRAY interpolates a function between two points based on -! particular interpolation scheme. The data needs to be organized as a ENDF TAB1 -! type function containing the interpolation regions, break points, and -! tabulated x's and y's. -!=============================================================================== - - pure function interpolate_tab1_array(data, x, loc_start) result(y) - - real(8), intent(in) :: data(:) ! array of data - real(8), intent(in) :: x ! x value to find y at - integer, intent(in), optional :: loc_start ! starting location in data - real(8) :: y ! y(x) - - integer :: i ! bin in which to interpolate - integer :: j ! index for interpolation region - integer :: loc_0 ! starting location - integer :: n_regions ! number of interpolation regions - integer :: n_points ! number of tabulated values - integer :: interp ! ENDF interpolation scheme - integer :: loc_breakpoints ! location of breakpoints in data - integer :: loc_interp ! location of interpolation schemes in data - integer :: loc_x ! location of x's in data - integer :: loc_y ! location of y's in data - real(8) :: r ! interpolation factor - real(8) :: x0, x1 ! bounding x values - real(8) :: y0, y1 ! bounding y values - - ! determine starting location - if (present(loc_start)) then - loc_0 = loc_start - 1 - else - loc_0 = 0 - end if - - ! determine number of interpolation regions - n_regions = int(data(loc_0 + 1)) - - ! set locations for breakpoints and interpolation schemes - loc_breakpoints = loc_0 + 1 - loc_interp = loc_breakpoints + n_regions - - ! determine number of tabulated values - n_points = int(data(loc_interp + n_regions + 1)) - - ! set locations for x's and y's - loc_x = loc_interp + n_regions + 1 - loc_y = loc_x + n_points - - ! find which bin the abscissa is in -- if the abscissa is outside the - ! tabulated range, the first or last point is chosen, i.e. no interpolation - ! is done outside the energy range - if (x < data(loc_x + 1)) then - y = data(loc_y + 1) - return - elseif (x > data(loc_x + n_points)) then - y = data(loc_y + n_points) - return - else - i = binary_search(data(loc_x + 1:loc_x + n_points), n_points, x) - end if - - ! determine interpolation scheme - if (n_regions == 0) then - interp = LINEAR_LINEAR - elseif (n_regions == 1) then - interp = int(data(loc_interp + 1)) - elseif (n_regions > 1) then - do j = 1, n_regions - if (i < data(loc_breakpoints + j)) then - interp = int(data(loc_interp + j)) - exit - end if - end do - end if - - ! handle special case of histogram interpolation - if (interp == HISTOGRAM) then - y = data(loc_y + i) - return - end if - - ! determine bounding values - x0 = data(loc_x + i) - x1 = data(loc_x + i + 1) - y0 = data(loc_y + i) - y1 = data(loc_y + i + 1) - - ! determine interpolation factor and interpolated value - select case (interp) - case (LINEAR_LINEAR) - r = (x - x0)/(x1 - x0) - y = y0 + r*(y1 - y0) - case (LINEAR_LOG) - r = log(x/x0)/log(x1/x0) - y = y0 + r*(y1 - y0) - case (LOG_LINEAR) - r = (x - x0)/(x1 - x0) - y = y0*exp(r*log(y1/y0)) - case (LOG_LOG) - r = log(x/x0)/log(x1/x0) - y = y0*exp(r*log(y1/y0)) - end select - - end function interpolate_tab1_array - -!=============================================================================== -! INTERPOLATE_TAB1_OBJECT interpolates a function between two points based on -! particular interpolation scheme. The data needs to be organized as a ENDF TAB1 -! type function containing the interpolation regions, break points, and -! tabulated x's and y's. -!=============================================================================== - - pure function interpolate_tab1_object(obj, x) result(y) - - type(Tab1), intent(in) :: obj ! ENDF Tab1 interpolable function - real(8), intent(in) :: x ! x value to find y at - real(8) :: y ! y(x) - - integer :: i ! bin in which to interpolate - integer :: j ! index for interpolation region - integer :: n_regions ! number of interpolation regions - integer :: n_pairs ! number of tabulated values - integer :: interp ! ENDF interpolation scheme - real(8) :: r ! interpolation factor - real(8) :: x0, x1 ! bounding x values - real(8) :: y0, y1 ! bounding y values - - ! determine number of interpolation regions and pairs - n_regions = obj % n_regions - n_pairs = obj % n_pairs - - ! find which bin the abscissa is in -- if the abscissa is outside the - ! tabulated range, the first or last point is chosen, i.e. no interpolation - ! is done outside the energy range - if (x < obj % x(1)) then - y = obj % y(1) - return - elseif (x > obj % x(n_pairs)) then - y = obj % y(n_pairs) - return - else - i = binary_search(obj % x, n_pairs, x) - end if - - ! determine interpolation scheme - if (n_regions == 0) then - interp = LINEAR_LINEAR - elseif (n_regions == 1) then - interp = obj % int(1) - elseif (n_regions > 1) then - do j = 1, n_regions - if (i < obj % nbt(j)) then - interp = obj % int(j) - exit - end if - end do - end if - - ! handle special case of histogram interpolation - if (interp == HISTOGRAM) then - y = obj % y(i) - return - end if - - ! determine bounding values - x0 = obj % x(i) - x1 = obj % x(i + 1) - y0 = obj % y(i) - y1 = obj % y(i + 1) - - ! determine interpolation factor and interpolated value - select case (interp) - case (LINEAR_LINEAR) - r = (x - x0)/(x1 - x0) - y = y0 + r*(y1 - y0) - case (LINEAR_LOG) - r = log(x/x0)/log(x1/x0) - y = y0 + r*(y1 - y0) - case (LOG_LINEAR) - r = (x - x0)/(x1 - x0) - y = y0*exp(r*log(y1/y0)) - case (LOG_LOG) - r = log(x/x0)/log(x1/x0) - y = y0*exp(r*log(y1/y0)) - end select - - end function interpolate_tab1_object - -end module interpolation diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 12b4a30764..6634bcc943 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -5,6 +5,7 @@ module nuclide_header use constants use dict_header, only: DictIntInt use endf, only: reaction_name, is_fission, is_disappearance + use endf_header, only: Function1D use error, only: fatal_error, warning use list_header, only: ListInt use math, only: evaluate_legendre, find_angle @@ -71,24 +72,11 @@ module nuclide_header real(8) :: E_max ! upper cutoff energy for res scattering ! Fission information - logical :: has_partial_fission ! nuclide has partial fission reactions? - integer :: n_fission ! # of fission reactions + logical :: has_partial_fission = .false. ! nuclide has partial fission reactions? + integer :: n_fission ! # of fission reactions + integer :: n_precursor = 0 ! # of delayed neutron precursors integer, allocatable :: index_fission(:) ! indices in reactions - - ! Total fission neutron emission - integer :: nu_t_type - real(8), allocatable :: nu_t_data(:) - - ! Prompt fission neutron emission - integer :: nu_p_type - real(8), allocatable :: nu_p_data(:) - - ! Delayed fission neutron emission - integer :: nu_d_type - integer :: n_precursor ! # of delayed neutron precursors - real(8), allocatable :: nu_d_data(:) - real(8), allocatable :: nu_d_precursor_data(:) - type(AngleEnergyContainer), allocatable :: nu_d_edist(:) + class(Function1D), allocatable :: total_nu ! Unresolved resonance data logical :: urr_present @@ -104,6 +92,7 @@ module nuclide_header contains procedure :: clear => nuclidece_clear procedure :: print => nuclidece_print + procedure :: nu => nuclidece_nu end type NuclideCE type, abstract, extends(Nuclide) :: NuclideMG @@ -684,96 +673,157 @@ module nuclide_header ! or NuclideAngle !=============================================================================== - subroutine nuclidece_clear(this) + subroutine nuclidece_clear(this) - class(NuclideCE), intent(inout) :: this ! The Nuclide object to clear + class(NuclideCE), intent(inout) :: this ! The Nuclide object to clear - if (associated(this % urr_data)) deallocate(this % urr_data) + if (associated(this % urr_data)) deallocate(this % urr_data) - call this % reaction_index % clear() + call this % reaction_index % clear() - end subroutine nuclidece_clear + end subroutine nuclidece_clear + + function nuclidece_nu(this, E, emission_mode, group) result(nu) + class(NuclideCE), intent(in) :: this + real(8), intent(in) :: E + integer, intent(in) :: emission_mode + integer, optional, intent(in) :: group + real(8) :: nu + + integer :: i + + if (.not. this % fissionable) then + nu = ZERO + return + end if + + select case (emission_mode) + case (EMISSION_PROMPT) + associate (product => this % reactions(this % index_fission(1)) % products(1)) + nu = product % yield % evaluate(E) + end associate + + case (EMISSION_DELAYED) + if (this % n_precursor > 0) then + if (present(group)) then + ! If delayed group specified, determine yield immediately + associate(p => this % reactions(this % index_fission(1)) % products(1 + group)) + nu = p % yield % evaluate(E) + end associate + + else + nu = ZERO + + associate (rx => this % reactions(this % index_fission(1))) + do i = 2, size(rx % products) + associate (product => rx % products(i)) + ! Skip any non-neutron products + if (product % particle /= NEUTRON) exit + + ! Evaluate yield + if (product % emission_mode == EMISSION_DELAYED) then + nu = nu + product % yield % evaluate(E) + end if + end associate + end do + end associate + end if + else + nu = ZERO + end if + + case (EMISSION_TOTAL) + if (allocated(this % total_nu)) then + nu = this % total_nu % evaluate(E) + else + associate (rx => this % reactions(this % index_fission(1))) + nu = rx % products(1) % yield % evaluate(E) + end associate + end if + end select + + end function nuclidece_nu !=============================================================================== ! NUCLIDE*_PRINT displays information about a continuous-energy neutron ! cross_section table and its reactions and secondary angle/energy distributions !=============================================================================== - subroutine nuclidece_print(this, unit) - class(NuclideCE), intent(in) :: this - integer, intent(in), optional :: unit + subroutine nuclidece_print(this, unit) + class(NuclideCE), intent(in) :: this + integer, intent(in), optional :: unit - integer :: i ! loop index over nuclides - integer :: unit_ ! unit to write to - integer :: size_xs ! memory used for cross-sections (bytes) - integer :: size_urr ! memory used for probability tables (bytes) + integer :: i ! loop index over nuclides + integer :: unit_ ! unit to write to + integer :: size_xs ! memory used for cross-sections (bytes) + integer :: size_urr ! memory used for probability tables (bytes) - ! set default unit for writing information - if (present(unit)) then - unit_ = unit - else - unit_ = OUTPUT_UNIT - end if + ! set default unit for writing information + if (present(unit)) then + unit_ = unit + else + unit_ = OUTPUT_UNIT + end if - ! Initialize totals - size_urr = 0 - size_xs = 0 + ! Initialize totals + size_urr = 0 + size_xs = 0 - ! Basic nuclide information - write(unit_,*) 'Nuclide ' // trim(this % name) - write(unit_,*) ' zaid = ' // trim(to_str(this % zaid)) - write(unit_,*) ' awr = ' // trim(to_str(this % awr)) - write(unit_,*) ' kT = ' // trim(to_str(this % kT)) - write(unit_,*) ' # of grid points = ' // trim(to_str(this % n_grid)) - write(unit_,*) ' Fissionable = ', this % fissionable - write(unit_,*) ' # of fission reactions = ' // trim(to_str(this % n_fission)) - write(unit_,*) ' # of reactions = ' // trim(to_str(this % n_reaction)) + ! Basic nuclide information + write(unit_,*) 'Nuclide ' // trim(this % name) + write(unit_,*) ' zaid = ' // trim(to_str(this % zaid)) + write(unit_,*) ' awr = ' // trim(to_str(this % awr)) + write(unit_,*) ' kT = ' // trim(to_str(this % kT)) + write(unit_,*) ' # of grid points = ' // trim(to_str(this % n_grid)) + write(unit_,*) ' Fissionable = ', this % fissionable + write(unit_,*) ' # of fission reactions = ' // trim(to_str(this % n_fission)) + write(unit_,*) ' # of reactions = ' // trim(to_str(this % n_reaction)) - ! Information on each reaction - write(unit_,*) ' Reaction Q-value COM IE' - do i = 1, this % n_reaction - associate (rxn => this % reactions(i)) - write(unit_,'(3X,A11,1X,F8.3,3X,L1,3X,I6)') & - reaction_name(rxn % MT), rxn % Q_value, rxn % scatter_in_cm, & - rxn % threshold + ! Information on each reaction + write(unit_,*) ' Reaction Q-value COM IE' + do i = 1, this % n_reaction + associate (rxn => this % reactions(i)) + write(unit_,'(3X,A11,1X,F8.3,3X,L1,3X,I6)') & + reaction_name(rxn % MT), rxn % Q_value, rxn % scatter_in_cm, & + rxn % threshold - ! Accumulate data size - size_xs = size_xs + (this % n_grid - rxn%threshold + 1) * 8 - end associate - end do + ! Accumulate data size + size_xs = size_xs + (this % n_grid - rxn%threshold + 1) * 8 + end associate + end do - ! Add memory required for summary reactions (total, absorption, fission, - ! nu-fission) - size_xs = 8 * this % n_grid * 4 + ! Add memory required for summary reactions (total, absorption, fission, + ! nu-fission) + size_xs = 8 * this % n_grid * 4 - ! Write information about URR probability tables - size_urr = 0 - if (this % urr_present) then - associate(urr => this % urr_data) - write(unit_,*) ' Unresolved resonance probability table:' - write(unit_,*) ' # of energies = ' // trim(to_str(urr % n_energy)) - write(unit_,*) ' # of probabilities = ' // trim(to_str(urr % n_prob)) - write(unit_,*) ' Interpolation = ' // trim(to_str(urr % interp)) - write(unit_,*) ' Inelastic flag = ' // trim(to_str(urr % inelastic_flag)) - write(unit_,*) ' Absorption flag = ' // trim(to_str(urr % absorption_flag)) - write(unit_,*) ' Multiply by smooth? ', urr % multiply_smooth - write(unit_,*) ' Min energy = ', trim(to_str(urr % energy(1))) - write(unit_,*) ' Max energy = ', trim(to_str(urr % energy(urr % n_energy))) + ! Write information about URR probability tables + size_urr = 0 + if (this % urr_present) then + associate(urr => this % urr_data) + write(unit_,*) ' Unresolved resonance probability table:' + write(unit_,*) ' # of energies = ' // trim(to_str(urr % n_energy)) + write(unit_,*) ' # of probabilities = ' // trim(to_str(urr % n_prob)) + write(unit_,*) ' Interpolation = ' // trim(to_str(urr % interp)) + write(unit_,*) ' Inelastic flag = ' // trim(to_str(urr % inelastic_flag)) + write(unit_,*) ' Absorption flag = ' // trim(to_str(urr % absorption_flag)) + write(unit_,*) ' Multiply by smooth? ', urr % multiply_smooth + write(unit_,*) ' Min energy = ', trim(to_str(urr % energy(1))) + write(unit_,*) ' Max energy = ', trim(to_str(urr % energy(urr % n_energy))) - ! Calculate memory used by probability tables and add to total - size_urr = urr % n_energy * (urr % n_prob * 6 + 1) * 8 - end associate - end if + ! Calculate memory used by probability tables and add to total + size_urr = urr % n_energy * (urr % n_prob * 6 + 1) * 8 + end associate + end if - ! Write memory used - write(unit_,*) ' Memory Requirements' - write(unit_,*) ' Cross sections = ' // trim(to_str(size_xs)) // ' bytes' - write(unit_,*) ' Probability Tables = ' // & - trim(to_str(size_urr)) // ' bytes' + ! Write memory used + write(unit_,*) ' Memory Requirements' + write(unit_,*) ' Cross sections = ' // trim(to_str(size_xs)) // ' bytes' + write(unit_,*) ' Probability Tables = ' // & + trim(to_str(size_urr)) // ' bytes' - ! Blank line at end of nuclide - write(unit_,*) - end subroutine nuclidece_print + ! Blank line at end of nuclide + write(unit_,*) + end subroutine nuclidece_print subroutine nuclidemg_print(this, unit_) class(NuclideMG), intent(in) :: this diff --git a/src/physics.F90 b/src/physics.F90 index 3192db1797..d6c4c45b05 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -4,9 +4,7 @@ module physics use cross_section, only: elastic_xs_0K use endf, only: reaction_name use error, only: fatal_error, warning - use fission, only: nu_total, nu_delayed use global - use interpolation, only: interpolate_tab1 use material_header, only: Material use math use mesh, only: get_mesh_indices @@ -1073,8 +1071,6 @@ contains integer :: nu ! actual number of neutrons produced integer :: ijk(3) ! indices in ufs mesh real(8) :: nu_t ! total nu - real(8) :: mu ! fission neutron angular cosine - real(8) :: phi ! fission neutron azimuthal angle real(8) :: weight ! weight adjustment for ufs method logical :: in_mesh ! source site in ufs mesh? type(NuclideCE), pointer :: nuc @@ -1145,25 +1141,12 @@ contains ! Set weight of fission bank site bank_array(i) % wgt = ONE/weight - ! Sample cosine of angle -- fission neutrons are always emitted - ! isotropically. Sometimes in ACE data, fission reactions actually have - ! an angular distribution listed, but for those that do, it's simply just - ! a uniform distribution in mu - mu = TWO * prn() - ONE + ! Sample delayed group and angle/energy for fission reaction + call sample_fission_neutron(nuc, nuc % reactions(i_reaction), & + p % E, bank_array(i)) - ! Sample azimuthal angle uniformly in [0,2*pi) - phi = TWO*PI*prn() - bank_array(i) % uvw(1) = mu - bank_array(i) % uvw(2) = sqrt(ONE - mu*mu) * cos(phi) - bank_array(i) % uvw(3) = sqrt(ONE - mu*mu) * sin(phi) - - ! Sample secondary energy distribution for fission reaction and set energy - ! in fission bank - bank_array(i) % E = sample_fission_energy(nuc, & - nuc % reactions(i_reaction), p) - - ! Set the delayed group of the neutron - bank_array(i) % delayed_group = p % delayed_group + ! Set delayed group on particle too + p % delayed_group = bank_array(i) % delayed_group ! Increment the number of neutrons born delayed if (p % delayed_group > 0) then @@ -1182,35 +1165,41 @@ contains end subroutine create_fission_sites !=============================================================================== -! SAMPLE_FISSION_ENERGY +! SAMPLE_FISSION_NEUTRON !=============================================================================== - function sample_fission_energy(nuc, rxn, p) result(E_out) + subroutine sample_fission_neutron(nuc, rxn, E_in, site) + type(NuclideCE), intent(in) :: nuc + type(Reaction), intent(in) :: rxn + real(8), intent(in) :: E_in + type(Bank), intent(inout) :: site - type(NuclideCE), intent(in) :: nuc - type(Reaction), intent(in) :: rxn - type(Particle), intent(inout) :: p ! Particle causing fission - real(8) :: E_out ! outgoing energy of fission neutron - - integer :: j ! index on nu energy grid / precursor group - integer :: lc ! index before start of energies/nu values - integer :: NR ! number of interpolation regions - integer :: NE ! number of energies tabulated - integer :: n_sample ! number of times resampling + integer :: group ! index on nu energy grid / precursor group + integer :: n_sample ! number of resamples real(8) :: nu_t ! total nu real(8) :: nu_d ! delayed nu real(8) :: beta ! delayed neutron fraction real(8) :: xi ! random number real(8) :: yield ! delayed neutron precursor yield real(8) :: prob ! cumulative probability + real(8) :: mu ! cosine of scattering angle + real(8) :: phi ! azimuthal angle - ! Determine total nu - nu_t = nu_total(nuc, p % E) + ! Sample cosine of angle -- fission neutrons are always emitted + ! isotropically. Sometimes in ACE data, fission reactions actually have + ! an angular distribution listed, but for those that do, it's simply just + ! a uniform distribution in mu + mu = TWO * prn() - ONE - ! Determine delayed nu - nu_d = nu_delayed(nuc, p % E) + ! Sample azimuthal angle uniformly in [0,2*pi) + phi = TWO*PI*prn() + site % uvw(1) = mu + site % uvw(2) = sqrt(ONE - mu*mu) * cos(phi) + site % uvw(3) = sqrt(ONE - mu*mu) * sin(phi) - ! Determine delayed neutron fraction + ! Determine total nu, delayed nu, and delayed neutron fraction + nu_t = nuc % nu(E_in, EMISSION_TOTAL) + nu_d = nuc % nu(E_in, EMISSION_DELAYED) beta = nu_d / nu_t if (prn() < beta) then @@ -1218,51 +1207,41 @@ contains ! DELAYED NEUTRON SAMPLED ! sampled delayed precursor group - xi = prn() - lc = 1 + xi = prn()*nu_d prob = ZERO - do j = 1, nuc % n_precursor - ! determine number of interpolation regions and energies - NR = int(nuc % nu_d_precursor_data(lc + 1)) - NE = int(nuc % nu_d_precursor_data(lc + 2 + 2*NR)) + do group = 1, nuc % n_precursor ! determine delayed neutron precursor yield for group j - yield = interpolate_tab1(nuc % nu_d_precursor_data( & - lc+1:lc+2+2*NR+2*NE), p % E) + yield = rxn % products(1 + group) % yield % evaluate(E_in) ! Check if this group is sampled prob = prob + yield if (xi < prob) exit - - ! advance pointer - lc = lc + 2 + 2*NR + 2*NE + 1 end do ! if the sum of the probabilities is slightly less than one and the ! random number is greater, j will be greater than nuc % ! n_precursor -- check for this condition - j = min(j, nuc % n_precursor) + group = min(group, nuc % n_precursor) ! set the delayed group for the particle born from fission - p % delayed_group = j + site % delayed_group = group - ! sample from energy distribution n_sample = 0 do - select type (aedist => nuc%nu_d_edist(j)%obj) - type is (UncorrelatedAngleEnergy) - E_out = aedist%energy%sample(p%E) - end select + ! sample from energy/angle distribution -- note that mu has already been + ! sampled above and doesn't need to be resampled + call rxn % products(1 + group) % sample(E_in, site % E, mu) ! resample if energy is greater than maximum neutron energy - if (E_out < energy_max_neutron) exit + if (site % E < energy_max_neutron) exit ! check for large number of resamples n_sample = n_sample + 1 if (n_sample == MAX_SAMPLE) then ! call write_particle_restart(p) call fatal_error("Resampled energy distribution maximum number of " & - &// "times for nuclide " // nuc % name) + // "times for nuclide " // nuc % name) end if end do @@ -1271,28 +1250,27 @@ contains ! PROMPT NEUTRON SAMPLED ! set the delayed group for the particle born from fission to 0 - p % delayed_group = 0 + site % delayed_group = 0 ! sample from prompt neutron energy distribution n_sample = 0 do - call rxn % products(1) % sample(p % E, E_out, prob) + call rxn % products(1) % sample(E_in, site % E, mu) ! resample if energy is greater than maximum neutron energy - if (E_out < energy_max_neutron) exit + if (site % E < energy_max_neutron) exit ! check for large number of resamples n_sample = n_sample + 1 if (n_sample == MAX_SAMPLE) then ! call write_particle_restart(p) call fatal_error("Resampled energy distribution maximum number of " & - &// "times for nuclide " // nuc % name) + // "times for nuclide " // nuc % name) end if end do - end if - end function sample_fission_energy + end subroutine sample_fission_neutron !=============================================================================== ! INELASTIC_SCATTER handles all reactions with a single secondary neutron (other @@ -1344,14 +1322,16 @@ contains ! change direction of particle p % coord(1) % uvw = rotate_angle(p % coord(1) % uvw, mu) - ! change weight of particle based on yield - if (rxn % products(1) % yield_with_E) then - yield = interpolate_tab1(rxn % products(1) % yield_E, E_in) - p % wgt = yield * p % wgt - else - do i = 1, rxn % products(1) % yield - 1 + ! evaluate yield + yield = rxn % products(1) % yield % evaluate(E_in) + if (mod(yield, ONE) == ZERO) then + ! If yield is integral, create exactly that many secondary particles + do i = 1, nint(yield) - 1 call p % create_secondary(p % coord(1) % uvw, NEUTRON, run_CE=.true.) end do + else + ! Otherwise, change weight of particle based on yield + p % wgt = yield * p % wgt end if end subroutine inelastic_scatter diff --git a/src/product_header.F90 b/src/product_header.F90 index 27fec37f7a..e20c173b4c 100644 --- a/src/product_header.F90 +++ b/src/product_header.F90 @@ -1,9 +1,9 @@ module product_header use angleenergy_header, only: AngleEnergyContainer - use constants, only: ZERO - use endf_header, only: Tab1 - use interpolation, only: interpolate_tab1 + use constants, only: ZERO, MAX_WORD_LEN, EMISSION_PROMPT, EMISSION_DELAYED, & + EMISSION_TOTAL, NEUTRON, PHOTON + use endf_header, only: Tabulated1D, Function1D, Constant1D, Polynomial use random_lcg, only: prn !=============================================================================== @@ -15,10 +15,11 @@ module product_header !=============================================================================== type :: ReactionProduct - integer :: yield ! Number of secondary particles released - logical :: yield_with_E = .false. ! Flag to indicate E-dependent yield - type(Tab1), pointer :: yield_E => null() ! Energy-dependent neutron yield - type(Tab1), allocatable :: applicability(:) + integer :: particle + integer :: emission_mode ! prompt, delayed, or total emission + real(8) :: decay_rate ! Decay rate for delayed neutron precursors + class(Function1D), pointer :: yield => null() ! Energy-dependent neutron yield + type(Tabulated1D), allocatable :: applicability(:) type(AngleEnergyContainer), allocatable :: distribution(:) contains procedure :: sample => reactionproduct_sample @@ -43,7 +44,7 @@ contains c = prn() do i = 1, n ! Determine probability that i-th energy distribution is sampled - prob = prob + interpolate_tab1(this%applicability(i), E_in) + prob = prob + this % applicability(i) % evaluate(E_in) ! If i-th distribution is sampled, sample energy from the distribution if (c <= prob) then diff --git a/src/tally.F90 b/src/tally.F90 index 71444107f4..1f0d49772b 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -1,6 +1,7 @@ module tally use constants + use endf_header, only: Constant1D use error, only: fatal_error use geometry_header use global @@ -14,8 +15,6 @@ module tally use search, only: binary_search use string, only: to_str use tally_header, only: TallyResult, TallyMapItem, TallyMapElement - use fission, only: nu_total, nu_delayed, yield_delayed - use interpolation, only: interpolate_tab1 #ifdef MPI use message_passing @@ -258,14 +257,15 @@ contains ! Get yield and apply to score associate (rxn => nuclides(p%event_nuclide)%reactions(m)) - if (rxn % products(1) % yield_with_E) then - ! Then the yield was already incorporated in to p % wgt - ! per the scattering routine, + select type (yield => rxn % products(1) % yield) + type is (Constant1D) + ! Grab the yield from the reaction + score = p % last_wgt * yield % y + class default + ! the yield was already incorporated in to p % wgt per the + ! scattering routine score = p % wgt - else - ! Grab the yield from the rxn - score = p % last_wgt * rxn % products(1) % yield - end if + end select end associate end if @@ -291,14 +291,15 @@ contains ! Get yield and apply to score associate (rxn => nuclides(p%event_nuclide)%reactions(m)) - if (rxn % products(1) % yield_with_E) then - ! Then the yield was already incorporated in to p % wgt - ! per the scattering routine, + select type (yield => rxn % products(1) % yield) + type is (Constant1D) + ! Grab the yield from the reaction + score = p % last_wgt * yield % y + class default + ! the yield was already incorporated in to p % wgt per the + ! scattering routine score = p % wgt - else - ! Grab the yield from the rxn - score = p % last_wgt * rxn % products(1) % yield - end if + end select end associate end if @@ -324,14 +325,15 @@ contains ! Get yield and apply to score associate (rxn => nuclides(p%event_nuclide)%reactions(m)) - if (rxn % products(1) % yield_with_E) then - ! Then the yield was already incorporated in to p % wgt - ! per the scattering routine, + select type (yield => rxn % products(1) % yield) + type is (Constant1D) + ! Grab the yield from the reaction + score = p % last_wgt * yield % y + class default + ! the yield was already incorporated in to p % wgt per the + ! scattering routine score = p % wgt - else - ! Grab the yield from the rxn - score = p % last_wgt * rxn % products(1) % yield - end if + end select end associate end if @@ -498,12 +500,11 @@ contains d = t % filters(dg_filter) % int_bins(d_bin) ! Compute the yield for this delayed group - yield = yield_delayed(nuclides(p % event_nuclide), E, d) + yield = nuclides(p % event_nuclide) % nu(E, EMISSION_DELAYED, d) ! Compute the score and tally to bin score = p % absorb_wgt * yield * micro_xs(p % event_nuclide) & - % fission * nu_delayed(nuclides(p % event_nuclide), E) / & - micro_xs(p % event_nuclide) % absorption + % fission / micro_xs(p % event_nuclide) % absorption call score_fission_delayed_dg(t, d_bin, score, score_index) end do cycle SCORE_LOOP @@ -511,9 +512,9 @@ contains ! If the delayed group filter is not present, compute the score ! by multiplying the absorbed weight by the fraction of the ! delayed-nu-fission xs to the absorption xs - score = p % absorb_wgt * micro_xs(p % event_nuclide) & - % fission * nu_delayed(nuclides(p % event_nuclide), E) / & - micro_xs(p % event_nuclide) % absorption + score = p % absorb_wgt * micro_xs(p % event_nuclide) % fission & + * nuclides(p % event_nuclide) % nu(E, EMISSION_DELAYED) & + / micro_xs(p % event_nuclide) % absorption end if end if else @@ -563,11 +564,11 @@ contains d = t % filters(dg_filter) % int_bins(d_bin) ! Compute the yield for this delayed group - yield = yield_delayed(nuclides(i_nuclide), E, d) + yield = nuclides(i_nuclide) % nu(E, EMISSION_DELAYED, d) ! Compute the score and tally to bin - score = micro_xs(i_nuclide) % fission * yield & - * nu_delayed(nuclides(i_nuclide), E) * atom_density * flux + score = micro_xs(i_nuclide) % fission * yield * & + atom_density * flux call score_fission_delayed_dg(t, d_bin, score, score_index) end do cycle SCORE_LOOP @@ -575,8 +576,8 @@ contains ! If the delayed group filter is not present, compute the score ! by multiplying the delayed-nu-fission macro xs by the flux - score = micro_xs(i_nuclide) % fission * & - nu_delayed(nuclides(i_nuclide), E) * atom_density * flux + score = micro_xs(i_nuclide) % fission * nuclides(i_nuclide) % & + nu(E, EMISSION_DELAYED) * atom_density * flux end if ! Tally is on total nuclides @@ -601,11 +602,10 @@ contains d = t % filters(dg_filter) % int_bins(d_bin) ! Get the yield for the desired nuclide and delayed group - yield = yield_delayed(nuclides(i_nuc), E, d) + yield = nuclides(i_nuc) % nu(E, EMISSION_DELAYED, d) ! Compute the score and tally to bin - score = micro_xs(i_nuc) % fission * yield & - * nu_delayed(nuclides(i_nuc), E) * atom_density_ * flux + score = micro_xs(i_nuc) % fission * yield * atom_density_ * flux call score_fission_delayed_dg(t, d_bin, score, score_index) end do end do @@ -624,8 +624,8 @@ contains i_nuc = materials(p % material) % nuclide(l) ! Accumulate the contribution from each nuclide - score = score + micro_xs(i_nuc) % fission & - * nu_delayed(nuclides(i_nuc), E) * atom_density_ * flux + score = score + micro_xs(i_nuc) % fission * nuclides(i_nuc) % & + nu(E, EMISSION_DELAYED) * atom_density_ * flux end do end if end if diff --git a/tests/test_tallies/results_true.dat b/tests/test_tallies/results_true.dat index 4ee2177b89..4fab6c5617 100644 --- a/tests/test_tallies/results_true.dat +++ b/tests/test_tallies/results_true.dat @@ -1 +1 @@ -80bb207ab79131ff264a205703fcc798e3353dbead81e39dadf262979d6d6ad786123588e330c8d0bccddbcb7b7ce9af8447c73a317174019977d2392edf31f6 \ No newline at end of file +f1b2b43197e1bbb305000d5a84c228361afb876d23ed866cdb073fe7410335c87fb16066c031d0e4397225321632566c00f48eac6187d59bdeab9a8c60986c3c \ No newline at end of file From 9304b3806120305dac6aa59133db233a070528f5 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 18 Mar 2016 07:45:49 -0500 Subject: [PATCH 385/650] Update MGXS tests since pandas 0.18.0 changed output slightly --- .../results_true.dat | 62 +- .../results_true.dat | 4 +- .../results_true.dat | 140 +- .../results_true.dat | 2520 ++++++++--------- 4 files changed, 1363 insertions(+), 1363 deletions(-) diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index 8b8556ffaa..4382153729 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -2,48 +2,48 @@ 0 1 1 total 0.412084 0.02359 material group in nuclide mean std. dev. 0 1 1 total 0.076425 0.003691 material group in group out nuclide mean std. dev. 0 1 1 1 total 0.345643 0.021487 material group out nuclide mean std. dev. -0 1 1 total 1 0.055333 material group in nuclide mean std. dev. +0 1 1 total 1.0 0.055333 material group in nuclide mean std. dev. 0 2 1 total 0.241262 0.00841 material group in nuclide mean std. dev. -0 2 1 total 0 0 material group in group out nuclide mean std. dev. +0 2 1 total 0.0 0.0 material group in group out nuclide mean std. dev. 0 2 1 1 total 0.241262 0.00841 material group out nuclide mean std. dev. -0 2 1 total 0 0 material group in nuclide mean std. dev. +0 2 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 3 1 total 0.400028 0.034667 material group in nuclide mean std. dev. -0 3 1 total 0 0 material group in group out nuclide mean std. dev. +0 3 1 total 0.0 0.0 material group in group out nuclide mean std. dev. 0 3 1 1 total 0.393462 0.033646 material group out nuclide mean std. dev. -0 3 1 total 0 0 material group in nuclide mean std. dev. +0 3 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 4 1 total 0.377402 0.072937 material group in nuclide mean std. dev. -0 4 1 total 0 0 material group in group out nuclide mean std. dev. +0 4 1 total 0.0 0.0 material group in group out nuclide mean std. dev. 0 4 1 1 total 0.371473 0.071226 material group out nuclide mean std. dev. -0 4 1 total 0 0 material group in nuclide mean std. dev. -0 5 1 total 0 0 material group in nuclide mean std. dev. -0 5 1 total 0 0 material group in group out nuclide mean std. dev. -0 5 1 1 total 0 0 material group out nuclide mean std. dev. -0 5 1 total 0 0 material group in nuclide mean std. dev. -0 6 1 total 0 0 material group in nuclide mean std. dev. -0 6 1 total 0 0 material group in group out nuclide mean std. dev. -0 6 1 1 total 0 0 material group out nuclide mean std. dev. -0 6 1 total 0 0 material group in nuclide mean std. dev. -0 7 1 total 0 0 material group in nuclide mean std. dev. -0 7 1 total 0 0 material group in group out nuclide mean std. dev. -0 7 1 1 total 0 0 material group out nuclide mean std. dev. -0 7 1 total 0 0 material group in nuclide mean std. dev. -0 8 1 total 0 0 material group in nuclide mean std. dev. -0 8 1 total 0 0 material group in group out nuclide mean std. dev. -0 8 1 1 total 0 0 material group out nuclide mean std. dev. -0 8 1 total 0 0 material group in nuclide mean std. dev. +0 4 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 5 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 5 1 1 total 0.0 0.0 material group out nuclide mean std. dev. +0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 6 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 6 1 1 total 0.0 0.0 material group out nuclide mean std. dev. +0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 7 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 7 1 1 total 0.0 0.0 material group out nuclide mean std. dev. +0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 8 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 8 1 1 total 0.0 0.0 material group out nuclide mean std. dev. +0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 9 1 total 0.600536 0.748875 material group in nuclide mean std. dev. -0 9 1 total 0 0 material group in group out nuclide mean std. dev. +0 9 1 total 0.0 0.0 material group in group out nuclide mean std. dev. 0 9 1 1 total 0.600536 0.748875 material group out nuclide mean std. dev. -0 9 1 total 0 0 material group in nuclide mean std. dev. +0 9 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 10 1 total 0.235515 0.613974 material group in nuclide mean std. dev. -0 10 1 total 0 0 material group in group out nuclide mean std. dev. +0 10 1 total 0.0 0.0 material group in group out nuclide mean std. dev. 0 10 1 1 total 0.235515 0.613974 material group out nuclide mean std. dev. -0 10 1 total 0 0 material group in nuclide mean std. dev. +0 10 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 11 1 total 0.510145 0.741941 material group in nuclide mean std. dev. -0 11 1 total 0 0 material group in group out nuclide mean std. dev. +0 11 1 total 0.0 0.0 material group in group out nuclide mean std. dev. 0 11 1 1 total 0.491857 0.715554 material group out nuclide mean std. dev. -0 11 1 total 0 0 material group in nuclide mean std. dev. +0 11 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 12 1 total 0.73836 0.825631 material group in nuclide mean std. dev. -0 12 1 total 0 0 material group in group out nuclide mean std. dev. +0 12 1 total 0.0 0.0 material group in group out nuclide mean std. dev. 0 12 1 1 total 0.723265 0.808231 material group out nuclide mean std. dev. -0 12 1 total 0 0 \ No newline at end of file +0 12 1 total 0.0 0.0 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index 99c373f998..0d5c7c7b44 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,5 +1,5 @@ avg(distribcell) group in nuclide mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.718919 0.520644 avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 avg(distribcell) group in group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 avg(distribcell) group in group out nuclide mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.695166 0.510606 avg(distribcell) group out nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 \ No newline at end of file +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index 29b94f44f6..b6cef05dc7 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -7,115 +7,115 @@ 2 1 1 2 total 0.001559 0.000510 1 1 2 1 total 0.000000 0.000000 0 1 2 2 total 0.422051 0.021617 material group out nuclide mean std. dev. -1 1 1 total 1 0.055333 -0 1 2 total 0 0.000000 material group in nuclide mean std. dev. +1 1 1 total 1.0 0.055333 +0 1 2 total 0.0 0.000000 material group in nuclide mean std. dev. 1 2 1 total 0.237254 0.008184 0 2 2 total 0.285930 0.048796 material group in nuclide mean std. dev. -1 2 1 total 0 0 -0 2 2 total 0 0 material group in group out nuclide mean std. dev. +1 2 1 total 0.0 0.0 +0 2 2 total 0.0 0.0 material group in group out nuclide mean std. dev. 3 2 1 1 total 0.237254 0.008184 2 2 1 2 total 0.000000 0.000000 1 2 2 1 total 0.000000 0.000000 0 2 2 2 total 0.285930 0.048796 material group out nuclide mean std. dev. -1 2 1 total 0 0 -0 2 2 total 0 0 material group in nuclide mean std. dev. +1 2 1 total 0.0 0.0 +0 2 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 3 1 total 0.286906 0.027401 0 3 2 total 1.418151 0.265308 material group in nuclide mean std. dev. -1 3 1 total 0 0 -0 3 2 total 0 0 material group in group out nuclide mean std. dev. +1 3 1 total 0.0 0.0 +0 3 2 total 0.0 0.0 material group in group out nuclide mean std. dev. 3 3 1 1 total 0.259937 0.026115 2 3 1 2 total 0.026187 0.001665 1 3 2 1 total 0.000000 0.000000 0 3 2 2 total 1.359521 0.258505 material group out nuclide mean std. dev. -1 3 1 total 0 0 -0 3 2 total 0 0 material group in nuclide mean std. dev. +1 3 1 total 0.0 0.0 +0 3 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 4 1 total 0.242447 0.061031 0 4 2 total 1.253959 0.388363 material group in nuclide mean std. dev. -1 4 1 total 0 0 -0 4 2 total 0 0 material group in group out nuclide mean std. dev. +1 4 1 total 0.0 0.0 +0 4 2 total 0.0 0.0 material group in group out nuclide mean std. dev. 3 4 1 1 total 0.217930 0.058565 2 4 1 2 total 0.023662 0.003083 1 4 2 1 total 0.000000 0.000000 0 4 2 2 total 1.215074 0.381025 material group out nuclide mean std. dev. -1 4 1 total 0 0 -0 4 2 total 0 0 material group in nuclide mean std. dev. -1 5 1 total 0 0 -0 5 2 total 0 0 material group in nuclide mean std. dev. -1 5 1 total 0 0 -0 5 2 total 0 0 material group in group out nuclide mean std. dev. -3 5 1 1 total 0 0 -2 5 1 2 total 0 0 -1 5 2 1 total 0 0 -0 5 2 2 total 0 0 material group out nuclide mean std. dev. -1 5 1 total 0 0 -0 5 2 total 0 0 material group in nuclide mean std. dev. -1 6 1 total 0 0 -0 6 2 total 0 0 material group in nuclide mean std. dev. -1 6 1 total 0 0 -0 6 2 total 0 0 material group in group out nuclide mean std. dev. -3 6 1 1 total 0 0 -2 6 1 2 total 0 0 -1 6 2 1 total 0 0 -0 6 2 2 total 0 0 material group out nuclide mean std. dev. -1 6 1 total 0 0 -0 6 2 total 0 0 material group in nuclide mean std. dev. -1 7 1 total 0 0 -0 7 2 total 0 0 material group in nuclide mean std. dev. -1 7 1 total 0 0 -0 7 2 total 0 0 material group in group out nuclide mean std. dev. -3 7 1 1 total 0 0 -2 7 1 2 total 0 0 -1 7 2 1 total 0 0 -0 7 2 2 total 0 0 material group out nuclide mean std. dev. -1 7 1 total 0 0 -0 7 2 total 0 0 material group in nuclide mean std. dev. -1 8 1 total 0 0 -0 8 2 total 0 0 material group in nuclide mean std. dev. -1 8 1 total 0 0 -0 8 2 total 0 0 material group in group out nuclide mean std. dev. -3 8 1 1 total 0 0 -2 8 1 2 total 0 0 -1 8 2 1 total 0 0 -0 8 2 2 total 0 0 material group out nuclide mean std. dev. -1 8 1 total 0 0 -0 8 2 total 0 0 material group in nuclide mean std. dev. +1 4 1 total 0.0 0.0 +0 4 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 5 1 1 total 0.0 0.0 +2 5 1 2 total 0.0 0.0 +1 5 2 1 total 0.0 0.0 +0 5 2 2 total 0.0 0.0 material group out nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 6 1 1 total 0.0 0.0 +2 6 1 2 total 0.0 0.0 +1 6 2 1 total 0.0 0.0 +0 6 2 2 total 0.0 0.0 material group out nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 7 1 1 total 0.0 0.0 +2 7 1 2 total 0.0 0.0 +1 7 2 1 total 0.0 0.0 +0 7 2 2 total 0.0 0.0 material group out nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 8 1 1 total 0.0 0.0 +2 8 1 2 total 0.0 0.0 +1 8 2 1 total 0.0 0.0 +0 8 2 2 total 0.0 0.0 material group out nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 9 1 total 0.600536 0.748875 0 9 2 total 0.000000 0.000000 material group in nuclide mean std. dev. -1 9 1 total 0 0 -0 9 2 total 0 0 material group in group out nuclide mean std. dev. +1 9 1 total 0.0 0.0 +0 9 2 total 0.0 0.0 material group in group out nuclide mean std. dev. 3 9 1 1 total 0.600536 0.748875 2 9 1 2 total 0.000000 0.000000 1 9 2 1 total 0.000000 0.000000 0 9 2 2 total 0.000000 0.000000 material group out nuclide mean std. dev. -1 9 1 total 0 0 -0 9 2 total 0 0 material group in nuclide mean std. dev. +1 9 1 total 0.0 0.0 +0 9 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 10 1 total 0.235515 0.613974 0 10 2 total 0.000000 0.000000 material group in nuclide mean std. dev. -1 10 1 total 0 0 -0 10 2 total 0 0 material group in group out nuclide mean std. dev. +1 10 1 total 0.0 0.0 +0 10 2 total 0.0 0.0 material group in group out nuclide mean std. dev. 3 10 1 1 total 0.235515 0.613974 2 10 1 2 total 0.000000 0.000000 1 10 2 1 total 0.000000 0.000000 0 10 2 2 total 0.000000 0.000000 material group out nuclide mean std. dev. -1 10 1 total 0 0 -0 10 2 total 0 0 material group in nuclide mean std. dev. +1 10 1 total 0.0 0.0 +0 10 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 11 1 total 0.186324 0.632129 0 11 2 total 0.945986 1.591133 material group in nuclide mean std. dev. -1 11 1 total 0 0 -0 11 2 total 0 0 material group in group out nuclide mean std. dev. +1 11 1 total 0.0 0.0 +0 11 2 total 0.0 0.0 material group in group out nuclide mean std. dev. 3 11 1 1 total 0.154449 0.597686 2 11 1 2 total 0.031875 0.045078 1 11 2 1 total 0.000000 0.000000 0 11 2 2 total 0.903085 1.532144 material group out nuclide mean std. dev. -1 11 1 total 0 0 -0 11 2 total 0 0 material group in nuclide mean std. dev. +1 11 1 total 0.0 0.0 +0 11 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 12 1 total 0.213292 0.271444 0 12 2 total 1.390975 2.137346 material group in nuclide mean std. dev. -1 12 1 total 0 0 -0 12 2 total 0 0 material group in group out nuclide mean std. dev. +1 12 1 total 0.0 0.0 +0 12 2 total 0.0 0.0 material group in group out nuclide mean std. dev. 3 12 1 1 total 0.186052 0.257633 2 12 1 2 total 0.027240 0.029555 1 12 2 1 total 0.000000 0.000000 0 12 2 2 total 1.357118 2.089846 material group out nuclide mean std. dev. -1 12 1 total 0 0 -0 12 2 total 0 0 \ No newline at end of file +1 12 1 total 0.0 0.0 +0 12 2 total 0.0 0.0 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index 6c34647ebe..943df1d80c 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -271,74 +271,74 @@ 31 1 2 2 Eu-153 0.000000 0.000000 32 1 2 2 Gd-155 0.000000 0.000000 33 1 2 2 O-16 0.196946 0.014729 material group out nuclide mean std. dev. -34 1 1 U-234 0 0.000000 -35 1 1 U-235 1 0.066362 -36 1 1 U-236 0 0.000000 -37 1 1 U-238 1 0.093082 -38 1 1 Np-237 0 0.000000 -39 1 1 Pu-238 0 0.000000 -40 1 1 Pu-239 1 0.104567 -41 1 1 Pu-240 0 0.000000 -42 1 1 Pu-241 1 0.263696 -43 1 1 Pu-242 0 0.000000 -44 1 1 Am-241 0 0.000000 -45 1 1 Am-242m 0 0.000000 -46 1 1 Am-243 0 0.000000 -47 1 1 Cm-242 0 0.000000 -48 1 1 Cm-243 0 0.000000 -49 1 1 Cm-244 0 0.000000 -50 1 1 Cm-245 0 0.000000 -51 1 1 Mo-95 0 0.000000 -52 1 1 Tc-99 0 0.000000 -53 1 1 Ru-101 0 0.000000 -54 1 1 Ru-103 0 0.000000 -55 1 1 Ag-109 0 0.000000 -56 1 1 Xe-135 0 0.000000 -57 1 1 Cs-133 0 0.000000 -58 1 1 Nd-143 0 0.000000 -59 1 1 Nd-145 0 0.000000 -60 1 1 Sm-147 0 0.000000 -61 1 1 Sm-149 0 0.000000 -62 1 1 Sm-150 0 0.000000 -63 1 1 Sm-151 0 0.000000 -64 1 1 Sm-152 0 0.000000 -65 1 1 Eu-153 0 0.000000 -66 1 1 Gd-155 0 0.000000 -67 1 1 O-16 0 0.000000 -0 1 2 U-234 0 0.000000 -1 1 2 U-235 0 0.000000 -2 1 2 U-236 0 0.000000 -3 1 2 U-238 0 0.000000 -4 1 2 Np-237 0 0.000000 -5 1 2 Pu-238 0 0.000000 -6 1 2 Pu-239 0 0.000000 -7 1 2 Pu-240 0 0.000000 -8 1 2 Pu-241 0 0.000000 -9 1 2 Pu-242 0 0.000000 -10 1 2 Am-241 0 0.000000 -11 1 2 Am-242m 0 0.000000 -12 1 2 Am-243 0 0.000000 -13 1 2 Cm-242 0 0.000000 -14 1 2 Cm-243 0 0.000000 -15 1 2 Cm-244 0 0.000000 -16 1 2 Cm-245 0 0.000000 -17 1 2 Mo-95 0 0.000000 -18 1 2 Tc-99 0 0.000000 -19 1 2 Ru-101 0 0.000000 -20 1 2 Ru-103 0 0.000000 -21 1 2 Ag-109 0 0.000000 -22 1 2 Xe-135 0 0.000000 -23 1 2 Cs-133 0 0.000000 -24 1 2 Nd-143 0 0.000000 -25 1 2 Nd-145 0 0.000000 -26 1 2 Sm-147 0 0.000000 -27 1 2 Sm-149 0 0.000000 -28 1 2 Sm-150 0 0.000000 -29 1 2 Sm-151 0 0.000000 -30 1 2 Sm-152 0 0.000000 -31 1 2 Eu-153 0 0.000000 -32 1 2 Gd-155 0 0.000000 -33 1 2 O-16 0 0.000000 material group in nuclide mean std. dev. +34 1 1 U-234 0.0 0.000000 +35 1 1 U-235 1.0 0.066362 +36 1 1 U-236 0.0 0.000000 +37 1 1 U-238 1.0 0.093082 +38 1 1 Np-237 0.0 0.000000 +39 1 1 Pu-238 0.0 0.000000 +40 1 1 Pu-239 1.0 0.104567 +41 1 1 Pu-240 0.0 0.000000 +42 1 1 Pu-241 1.0 0.263696 +43 1 1 Pu-242 0.0 0.000000 +44 1 1 Am-241 0.0 0.000000 +45 1 1 Am-242m 0.0 0.000000 +46 1 1 Am-243 0.0 0.000000 +47 1 1 Cm-242 0.0 0.000000 +48 1 1 Cm-243 0.0 0.000000 +49 1 1 Cm-244 0.0 0.000000 +50 1 1 Cm-245 0.0 0.000000 +51 1 1 Mo-95 0.0 0.000000 +52 1 1 Tc-99 0.0 0.000000 +53 1 1 Ru-101 0.0 0.000000 +54 1 1 Ru-103 0.0 0.000000 +55 1 1 Ag-109 0.0 0.000000 +56 1 1 Xe-135 0.0 0.000000 +57 1 1 Cs-133 0.0 0.000000 +58 1 1 Nd-143 0.0 0.000000 +59 1 1 Nd-145 0.0 0.000000 +60 1 1 Sm-147 0.0 0.000000 +61 1 1 Sm-149 0.0 0.000000 +62 1 1 Sm-150 0.0 0.000000 +63 1 1 Sm-151 0.0 0.000000 +64 1 1 Sm-152 0.0 0.000000 +65 1 1 Eu-153 0.0 0.000000 +66 1 1 Gd-155 0.0 0.000000 +67 1 1 O-16 0.0 0.000000 +0 1 2 U-234 0.0 0.000000 +1 1 2 U-235 0.0 0.000000 +2 1 2 U-236 0.0 0.000000 +3 1 2 U-238 0.0 0.000000 +4 1 2 Np-237 0.0 0.000000 +5 1 2 Pu-238 0.0 0.000000 +6 1 2 Pu-239 0.0 0.000000 +7 1 2 Pu-240 0.0 0.000000 +8 1 2 Pu-241 0.0 0.000000 +9 1 2 Pu-242 0.0 0.000000 +10 1 2 Am-241 0.0 0.000000 +11 1 2 Am-242m 0.0 0.000000 +12 1 2 Am-243 0.0 0.000000 +13 1 2 Cm-242 0.0 0.000000 +14 1 2 Cm-243 0.0 0.000000 +15 1 2 Cm-244 0.0 0.000000 +16 1 2 Cm-245 0.0 0.000000 +17 1 2 Mo-95 0.0 0.000000 +18 1 2 Tc-99 0.0 0.000000 +19 1 2 Ru-101 0.0 0.000000 +20 1 2 Ru-103 0.0 0.000000 +21 1 2 Ag-109 0.0 0.000000 +22 1 2 Xe-135 0.0 0.000000 +23 1 2 Cs-133 0.0 0.000000 +24 1 2 Nd-143 0.0 0.000000 +25 1 2 Nd-145 0.0 0.000000 +26 1 2 Sm-147 0.0 0.000000 +27 1 2 Sm-149 0.0 0.000000 +28 1 2 Sm-150 0.0 0.000000 +29 1 2 Sm-151 0.0 0.000000 +30 1 2 Sm-152 0.0 0.000000 +31 1 2 Eu-153 0.0 0.000000 +32 1 2 Gd-155 0.0 0.000000 +33 1 2 O-16 0.0 0.000000 material group in nuclide mean std. dev. 5 2 1 Zr-90 0.104734 0.008915 6 2 1 Zr-91 0.036155 0.003735 7 2 1 Zr-92 0.042422 0.003029 @@ -349,16 +349,16 @@ 2 2 2 Zr-92 0.041633 0.016323 3 2 2 Zr-94 0.060818 0.021483 4 2 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -5 2 1 Zr-90 0 0 -6 2 1 Zr-91 0 0 -7 2 1 Zr-92 0 0 -8 2 1 Zr-94 0 0 -9 2 1 Zr-96 0 0 -0 2 2 Zr-90 0 0 -1 2 2 Zr-91 0 0 -2 2 2 Zr-92 0 0 -3 2 2 Zr-94 0 0 -4 2 2 Zr-96 0 0 material group in group out nuclide mean std. dev. +5 2 1 Zr-90 0.0 0.0 +6 2 1 Zr-91 0.0 0.0 +7 2 1 Zr-92 0.0 0.0 +8 2 1 Zr-94 0.0 0.0 +9 2 1 Zr-96 0.0 0.0 +0 2 2 Zr-90 0.0 0.0 +1 2 2 Zr-91 0.0 0.0 +2 2 2 Zr-92 0.0 0.0 +3 2 2 Zr-94 0.0 0.0 +4 2 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. 15 2 1 1 Zr-90 0.104734 0.008915 16 2 1 1 Zr-91 0.036155 0.003735 17 2 1 1 Zr-92 0.042422 0.003029 @@ -379,16 +379,16 @@ 2 2 2 2 Zr-92 0.041633 0.016323 3 2 2 2 Zr-94 0.060818 0.021483 4 2 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. -5 2 1 Zr-90 0 0 -6 2 1 Zr-91 0 0 -7 2 1 Zr-92 0 0 -8 2 1 Zr-94 0 0 -9 2 1 Zr-96 0 0 -0 2 2 Zr-90 0 0 -1 2 2 Zr-91 0 0 -2 2 2 Zr-92 0 0 -3 2 2 Zr-94 0 0 -4 2 2 Zr-96 0 0 material group in nuclide mean std. dev. +5 2 1 Zr-90 0.0 0.0 +6 2 1 Zr-91 0.0 0.0 +7 2 1 Zr-92 0.0 0.0 +8 2 1 Zr-94 0.0 0.0 +9 2 1 Zr-96 0.0 0.0 +0 2 2 Zr-90 0.0 0.0 +1 2 2 Zr-91 0.0 0.0 +2 2 2 Zr-92 0.0 0.0 +3 2 2 Zr-94 0.0 0.0 +4 2 2 Zr-96 0.0 0.0 material group in nuclide mean std. dev. 4 3 1 H-1 0.207103 0.023028 5 3 1 O-16 0.079282 0.005197 6 3 1 B-10 0.000521 0.000244 @@ -397,14 +397,14 @@ 1 3 2 O-16 0.085363 0.014001 2 3 2 B-10 0.049249 0.008232 3 3 2 B-11 0.000195 0.001527 material group in nuclide mean std. dev. -4 3 1 H-1 0 0 -5 3 1 O-16 0 0 -6 3 1 B-10 0 0 -7 3 1 B-11 0 0 -0 3 2 H-1 0 0 -1 3 2 O-16 0 0 -2 3 2 B-10 0 0 -3 3 2 B-11 0 0 material group in group out nuclide mean std. dev. +4 3 1 H-1 0.0 0.0 +5 3 1 O-16 0.0 0.0 +6 3 1 B-10 0.0 0.0 +7 3 1 B-11 0.0 0.0 +0 3 2 H-1 0.0 0.0 +1 3 2 O-16 0.0 0.0 +2 3 2 B-10 0.0 0.0 +3 3 2 B-11 0.0 0.0 material group in group out nuclide mean std. dev. 12 3 1 1 H-1 0.181306 0.022102 13 3 1 1 O-16 0.078631 0.005044 14 3 1 1 B-10 0.000000 0.000000 @@ -421,14 +421,14 @@ 1 3 2 2 O-16 0.085363 0.014001 2 3 2 2 B-10 0.000000 0.000000 3 3 2 2 B-11 0.000195 0.001527 material group out nuclide mean std. dev. -4 3 1 H-1 0 0 -5 3 1 O-16 0 0 -6 3 1 B-10 0 0 -7 3 1 B-11 0 0 -0 3 2 H-1 0 0 -1 3 2 O-16 0 0 -2 3 2 B-10 0 0 -3 3 2 B-11 0 0 material group in nuclide mean std. dev. +4 3 1 H-1 0.0 0.0 +5 3 1 O-16 0.0 0.0 +6 3 1 B-10 0.0 0.0 +7 3 1 B-11 0.0 0.0 +0 3 2 H-1 0.0 0.0 +1 3 2 O-16 0.0 0.0 +2 3 2 B-10 0.0 0.0 +3 3 2 B-11 0.0 0.0 material group in nuclide mean std. dev. 4 4 1 H-1 0.175242 0.053715 5 4 1 O-16 0.066545 0.010083 6 4 1 B-10 0.000570 0.000352 @@ -437,14 +437,14 @@ 1 4 2 O-16 0.085141 0.028073 2 4 2 B-10 0.025923 0.007276 3 4 2 B-11 0.000000 0.000000 material group in nuclide mean std. dev. -4 4 1 H-1 0 0 -5 4 1 O-16 0 0 -6 4 1 B-10 0 0 -7 4 1 B-11 0 0 -0 4 2 H-1 0 0 -1 4 2 O-16 0 0 -2 4 2 B-10 0 0 -3 4 2 B-11 0 0 material group in group out nuclide mean std. dev. +4 4 1 H-1 0.0 0.0 +5 4 1 O-16 0.0 0.0 +6 4 1 B-10 0.0 0.0 +7 4 1 B-11 0.0 0.0 +0 4 2 H-1 0.0 0.0 +1 4 2 O-16 0.0 0.0 +2 4 2 B-10 0.0 0.0 +3 4 2 B-11 0.0 0.0 material group in group out nuclide mean std. dev. 12 4 1 1 H-1 0.151295 0.051491 13 4 1 1 O-16 0.066545 0.010083 14 4 1 1 B-10 0.000000 0.000000 @@ -461,914 +461,914 @@ 1 4 2 2 O-16 0.085141 0.028073 2 4 2 2 B-10 0.000000 0.000000 3 4 2 2 B-11 0.000000 0.000000 material group out nuclide mean std. dev. -4 4 1 H-1 0 0 -5 4 1 O-16 0 0 -6 4 1 B-10 0 0 -7 4 1 B-11 0 0 -0 4 2 H-1 0 0 -1 4 2 O-16 0 0 -2 4 2 B-10 0 0 -3 4 2 B-11 0 0 material group in nuclide mean std. dev. -27 5 1 Fe-54 0 0 -28 5 1 Fe-56 0 0 -29 5 1 Fe-57 0 0 -30 5 1 Fe-58 0 0 -31 5 1 Ni-58 0 0 -32 5 1 Ni-60 0 0 -33 5 1 Ni-61 0 0 -34 5 1 Ni-62 0 0 -35 5 1 Ni-64 0 0 -36 5 1 Mn-55 0 0 -37 5 1 Mo-92 0 0 -38 5 1 Mo-94 0 0 -39 5 1 Mo-95 0 0 -40 5 1 Mo-96 0 0 -41 5 1 Mo-97 0 0 -42 5 1 Mo-98 0 0 -43 5 1 Mo-100 0 0 -44 5 1 Si-28 0 0 -45 5 1 Si-29 0 0 -46 5 1 Si-30 0 0 -47 5 1 Cr-50 0 0 -48 5 1 Cr-52 0 0 -49 5 1 Cr-53 0 0 -50 5 1 Cr-54 0 0 -51 5 1 C-Nat 0 0 -52 5 1 Cu-63 0 0 -53 5 1 Cu-65 0 0 -0 5 2 Fe-54 0 0 -1 5 2 Fe-56 0 0 -2 5 2 Fe-57 0 0 -3 5 2 Fe-58 0 0 -4 5 2 Ni-58 0 0 -5 5 2 Ni-60 0 0 -6 5 2 Ni-61 0 0 -7 5 2 Ni-62 0 0 -8 5 2 Ni-64 0 0 -9 5 2 Mn-55 0 0 -10 5 2 Mo-92 0 0 -11 5 2 Mo-94 0 0 -12 5 2 Mo-95 0 0 -13 5 2 Mo-96 0 0 -14 5 2 Mo-97 0 0 -15 5 2 Mo-98 0 0 -16 5 2 Mo-100 0 0 -17 5 2 Si-28 0 0 -18 5 2 Si-29 0 0 -19 5 2 Si-30 0 0 -20 5 2 Cr-50 0 0 -21 5 2 Cr-52 0 0 -22 5 2 Cr-53 0 0 -23 5 2 Cr-54 0 0 -24 5 2 C-Nat 0 0 -25 5 2 Cu-63 0 0 -26 5 2 Cu-65 0 0 material group in nuclide mean std. dev. -27 5 1 Fe-54 0 0 -28 5 1 Fe-56 0 0 -29 5 1 Fe-57 0 0 -30 5 1 Fe-58 0 0 -31 5 1 Ni-58 0 0 -32 5 1 Ni-60 0 0 -33 5 1 Ni-61 0 0 -34 5 1 Ni-62 0 0 -35 5 1 Ni-64 0 0 -36 5 1 Mn-55 0 0 -37 5 1 Mo-92 0 0 -38 5 1 Mo-94 0 0 -39 5 1 Mo-95 0 0 -40 5 1 Mo-96 0 0 -41 5 1 Mo-97 0 0 -42 5 1 Mo-98 0 0 -43 5 1 Mo-100 0 0 -44 5 1 Si-28 0 0 -45 5 1 Si-29 0 0 -46 5 1 Si-30 0 0 -47 5 1 Cr-50 0 0 -48 5 1 Cr-52 0 0 -49 5 1 Cr-53 0 0 -50 5 1 Cr-54 0 0 -51 5 1 C-Nat 0 0 -52 5 1 Cu-63 0 0 -53 5 1 Cu-65 0 0 -0 5 2 Fe-54 0 0 -1 5 2 Fe-56 0 0 -2 5 2 Fe-57 0 0 -3 5 2 Fe-58 0 0 -4 5 2 Ni-58 0 0 -5 5 2 Ni-60 0 0 -6 5 2 Ni-61 0 0 -7 5 2 Ni-62 0 0 -8 5 2 Ni-64 0 0 -9 5 2 Mn-55 0 0 -10 5 2 Mo-92 0 0 -11 5 2 Mo-94 0 0 -12 5 2 Mo-95 0 0 -13 5 2 Mo-96 0 0 -14 5 2 Mo-97 0 0 -15 5 2 Mo-98 0 0 -16 5 2 Mo-100 0 0 -17 5 2 Si-28 0 0 -18 5 2 Si-29 0 0 -19 5 2 Si-30 0 0 -20 5 2 Cr-50 0 0 -21 5 2 Cr-52 0 0 -22 5 2 Cr-53 0 0 -23 5 2 Cr-54 0 0 -24 5 2 C-Nat 0 0 -25 5 2 Cu-63 0 0 -26 5 2 Cu-65 0 0 material group in group out nuclide mean std. dev. -81 5 1 1 Fe-54 0 0 -82 5 1 1 Fe-56 0 0 -83 5 1 1 Fe-57 0 0 -84 5 1 1 Fe-58 0 0 -85 5 1 1 Ni-58 0 0 -86 5 1 1 Ni-60 0 0 -87 5 1 1 Ni-61 0 0 -88 5 1 1 Ni-62 0 0 -89 5 1 1 Ni-64 0 0 -90 5 1 1 Mn-55 0 0 -91 5 1 1 Mo-92 0 0 -92 5 1 1 Mo-94 0 0 -93 5 1 1 Mo-95 0 0 -94 5 1 1 Mo-96 0 0 -95 5 1 1 Mo-97 0 0 -96 5 1 1 Mo-98 0 0 -97 5 1 1 Mo-100 0 0 -98 5 1 1 Si-28 0 0 -99 5 1 1 Si-29 0 0 -100 5 1 1 Si-30 0 0 -101 5 1 1 Cr-50 0 0 -102 5 1 1 Cr-52 0 0 -103 5 1 1 Cr-53 0 0 -104 5 1 1 Cr-54 0 0 -105 5 1 1 C-Nat 0 0 -106 5 1 1 Cu-63 0 0 -107 5 1 1 Cu-65 0 0 -54 5 1 2 Fe-54 0 0 -55 5 1 2 Fe-56 0 0 -56 5 1 2 Fe-57 0 0 -57 5 1 2 Fe-58 0 0 -58 5 1 2 Ni-58 0 0 -59 5 1 2 Ni-60 0 0 -60 5 1 2 Ni-61 0 0 -61 5 1 2 Ni-62 0 0 -62 5 1 2 Ni-64 0 0 -63 5 1 2 Mn-55 0 0 -64 5 1 2 Mo-92 0 0 -65 5 1 2 Mo-94 0 0 -66 5 1 2 Mo-95 0 0 -67 5 1 2 Mo-96 0 0 -68 5 1 2 Mo-97 0 0 -69 5 1 2 Mo-98 0 0 -70 5 1 2 Mo-100 0 0 -71 5 1 2 Si-28 0 0 -72 5 1 2 Si-29 0 0 -73 5 1 2 Si-30 0 0 -74 5 1 2 Cr-50 0 0 -75 5 1 2 Cr-52 0 0 -76 5 1 2 Cr-53 0 0 -77 5 1 2 Cr-54 0 0 -78 5 1 2 C-Nat 0 0 -79 5 1 2 Cu-63 0 0 -80 5 1 2 Cu-65 0 0 -27 5 2 1 Fe-54 0 0 -28 5 2 1 Fe-56 0 0 -29 5 2 1 Fe-57 0 0 -30 5 2 1 Fe-58 0 0 -31 5 2 1 Ni-58 0 0 -32 5 2 1 Ni-60 0 0 -33 5 2 1 Ni-61 0 0 -34 5 2 1 Ni-62 0 0 -35 5 2 1 Ni-64 0 0 -36 5 2 1 Mn-55 0 0 -37 5 2 1 Mo-92 0 0 -38 5 2 1 Mo-94 0 0 -39 5 2 1 Mo-95 0 0 -40 5 2 1 Mo-96 0 0 -41 5 2 1 Mo-97 0 0 -42 5 2 1 Mo-98 0 0 -43 5 2 1 Mo-100 0 0 -44 5 2 1 Si-28 0 0 -45 5 2 1 Si-29 0 0 -46 5 2 1 Si-30 0 0 -47 5 2 1 Cr-50 0 0 -48 5 2 1 Cr-52 0 0 -49 5 2 1 Cr-53 0 0 -50 5 2 1 Cr-54 0 0 -51 5 2 1 C-Nat 0 0 -52 5 2 1 Cu-63 0 0 -53 5 2 1 Cu-65 0 0 -0 5 2 2 Fe-54 0 0 -1 5 2 2 Fe-56 0 0 -2 5 2 2 Fe-57 0 0 -3 5 2 2 Fe-58 0 0 -4 5 2 2 Ni-58 0 0 -5 5 2 2 Ni-60 0 0 -6 5 2 2 Ni-61 0 0 -7 5 2 2 Ni-62 0 0 -8 5 2 2 Ni-64 0 0 -9 5 2 2 Mn-55 0 0 -10 5 2 2 Mo-92 0 0 -11 5 2 2 Mo-94 0 0 -12 5 2 2 Mo-95 0 0 -13 5 2 2 Mo-96 0 0 -14 5 2 2 Mo-97 0 0 -15 5 2 2 Mo-98 0 0 -16 5 2 2 Mo-100 0 0 -17 5 2 2 Si-28 0 0 -18 5 2 2 Si-29 0 0 -19 5 2 2 Si-30 0 0 -20 5 2 2 Cr-50 0 0 -21 5 2 2 Cr-52 0 0 -22 5 2 2 Cr-53 0 0 -23 5 2 2 Cr-54 0 0 -24 5 2 2 C-Nat 0 0 -25 5 2 2 Cu-63 0 0 -26 5 2 2 Cu-65 0 0 material group out nuclide mean std. dev. -27 5 1 Fe-54 0 0 -28 5 1 Fe-56 0 0 -29 5 1 Fe-57 0 0 -30 5 1 Fe-58 0 0 -31 5 1 Ni-58 0 0 -32 5 1 Ni-60 0 0 -33 5 1 Ni-61 0 0 -34 5 1 Ni-62 0 0 -35 5 1 Ni-64 0 0 -36 5 1 Mn-55 0 0 -37 5 1 Mo-92 0 0 -38 5 1 Mo-94 0 0 -39 5 1 Mo-95 0 0 -40 5 1 Mo-96 0 0 -41 5 1 Mo-97 0 0 -42 5 1 Mo-98 0 0 -43 5 1 Mo-100 0 0 -44 5 1 Si-28 0 0 -45 5 1 Si-29 0 0 -46 5 1 Si-30 0 0 -47 5 1 Cr-50 0 0 -48 5 1 Cr-52 0 0 -49 5 1 Cr-53 0 0 -50 5 1 Cr-54 0 0 -51 5 1 C-Nat 0 0 -52 5 1 Cu-63 0 0 -53 5 1 Cu-65 0 0 -0 5 2 Fe-54 0 0 -1 5 2 Fe-56 0 0 -2 5 2 Fe-57 0 0 -3 5 2 Fe-58 0 0 -4 5 2 Ni-58 0 0 -5 5 2 Ni-60 0 0 -6 5 2 Ni-61 0 0 -7 5 2 Ni-62 0 0 -8 5 2 Ni-64 0 0 -9 5 2 Mn-55 0 0 -10 5 2 Mo-92 0 0 -11 5 2 Mo-94 0 0 -12 5 2 Mo-95 0 0 -13 5 2 Mo-96 0 0 -14 5 2 Mo-97 0 0 -15 5 2 Mo-98 0 0 -16 5 2 Mo-100 0 0 -17 5 2 Si-28 0 0 -18 5 2 Si-29 0 0 -19 5 2 Si-30 0 0 -20 5 2 Cr-50 0 0 -21 5 2 Cr-52 0 0 -22 5 2 Cr-53 0 0 -23 5 2 Cr-54 0 0 -24 5 2 C-Nat 0 0 -25 5 2 Cu-63 0 0 -26 5 2 Cu-65 0 0 material group in nuclide mean std. dev. -21 6 1 H-1 0 0 -22 6 1 O-16 0 0 -23 6 1 B-10 0 0 -24 6 1 B-11 0 0 -25 6 1 Fe-54 0 0 -26 6 1 Fe-56 0 0 -27 6 1 Fe-57 0 0 -28 6 1 Fe-58 0 0 -29 6 1 Ni-58 0 0 -30 6 1 Ni-60 0 0 -31 6 1 Ni-61 0 0 -32 6 1 Ni-62 0 0 -33 6 1 Ni-64 0 0 -34 6 1 Mn-55 0 0 -35 6 1 Si-28 0 0 -36 6 1 Si-29 0 0 -37 6 1 Si-30 0 0 -38 6 1 Cr-50 0 0 -39 6 1 Cr-52 0 0 -40 6 1 Cr-53 0 0 -41 6 1 Cr-54 0 0 -0 6 2 H-1 0 0 -1 6 2 O-16 0 0 -2 6 2 B-10 0 0 -3 6 2 B-11 0 0 -4 6 2 Fe-54 0 0 -5 6 2 Fe-56 0 0 -6 6 2 Fe-57 0 0 -7 6 2 Fe-58 0 0 -8 6 2 Ni-58 0 0 -9 6 2 Ni-60 0 0 -10 6 2 Ni-61 0 0 -11 6 2 Ni-62 0 0 -12 6 2 Ni-64 0 0 -13 6 2 Mn-55 0 0 -14 6 2 Si-28 0 0 -15 6 2 Si-29 0 0 -16 6 2 Si-30 0 0 -17 6 2 Cr-50 0 0 -18 6 2 Cr-52 0 0 -19 6 2 Cr-53 0 0 -20 6 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 6 1 H-1 0 0 -22 6 1 O-16 0 0 -23 6 1 B-10 0 0 -24 6 1 B-11 0 0 -25 6 1 Fe-54 0 0 -26 6 1 Fe-56 0 0 -27 6 1 Fe-57 0 0 -28 6 1 Fe-58 0 0 -29 6 1 Ni-58 0 0 -30 6 1 Ni-60 0 0 -31 6 1 Ni-61 0 0 -32 6 1 Ni-62 0 0 -33 6 1 Ni-64 0 0 -34 6 1 Mn-55 0 0 -35 6 1 Si-28 0 0 -36 6 1 Si-29 0 0 -37 6 1 Si-30 0 0 -38 6 1 Cr-50 0 0 -39 6 1 Cr-52 0 0 -40 6 1 Cr-53 0 0 -41 6 1 Cr-54 0 0 -0 6 2 H-1 0 0 -1 6 2 O-16 0 0 -2 6 2 B-10 0 0 -3 6 2 B-11 0 0 -4 6 2 Fe-54 0 0 -5 6 2 Fe-56 0 0 -6 6 2 Fe-57 0 0 -7 6 2 Fe-58 0 0 -8 6 2 Ni-58 0 0 -9 6 2 Ni-60 0 0 -10 6 2 Ni-61 0 0 -11 6 2 Ni-62 0 0 -12 6 2 Ni-64 0 0 -13 6 2 Mn-55 0 0 -14 6 2 Si-28 0 0 -15 6 2 Si-29 0 0 -16 6 2 Si-30 0 0 -17 6 2 Cr-50 0 0 -18 6 2 Cr-52 0 0 -19 6 2 Cr-53 0 0 -20 6 2 Cr-54 0 0 material group in group out nuclide mean std. dev. -63 6 1 1 H-1 0 0 -64 6 1 1 O-16 0 0 -65 6 1 1 B-10 0 0 -66 6 1 1 B-11 0 0 -67 6 1 1 Fe-54 0 0 -68 6 1 1 Fe-56 0 0 -69 6 1 1 Fe-57 0 0 -70 6 1 1 Fe-58 0 0 -71 6 1 1 Ni-58 0 0 -72 6 1 1 Ni-60 0 0 -73 6 1 1 Ni-61 0 0 -74 6 1 1 Ni-62 0 0 -75 6 1 1 Ni-64 0 0 -76 6 1 1 Mn-55 0 0 -77 6 1 1 Si-28 0 0 -78 6 1 1 Si-29 0 0 -79 6 1 1 Si-30 0 0 -80 6 1 1 Cr-50 0 0 -81 6 1 1 Cr-52 0 0 -82 6 1 1 Cr-53 0 0 -83 6 1 1 Cr-54 0 0 -42 6 1 2 H-1 0 0 -43 6 1 2 O-16 0 0 -44 6 1 2 B-10 0 0 -45 6 1 2 B-11 0 0 -46 6 1 2 Fe-54 0 0 -47 6 1 2 Fe-56 0 0 -48 6 1 2 Fe-57 0 0 -49 6 1 2 Fe-58 0 0 -50 6 1 2 Ni-58 0 0 -51 6 1 2 Ni-60 0 0 -52 6 1 2 Ni-61 0 0 -53 6 1 2 Ni-62 0 0 -54 6 1 2 Ni-64 0 0 -55 6 1 2 Mn-55 0 0 -56 6 1 2 Si-28 0 0 -57 6 1 2 Si-29 0 0 -58 6 1 2 Si-30 0 0 -59 6 1 2 Cr-50 0 0 -60 6 1 2 Cr-52 0 0 -61 6 1 2 Cr-53 0 0 -62 6 1 2 Cr-54 0 0 -21 6 2 1 H-1 0 0 -22 6 2 1 O-16 0 0 -23 6 2 1 B-10 0 0 -24 6 2 1 B-11 0 0 -25 6 2 1 Fe-54 0 0 -26 6 2 1 Fe-56 0 0 -27 6 2 1 Fe-57 0 0 -28 6 2 1 Fe-58 0 0 -29 6 2 1 Ni-58 0 0 -30 6 2 1 Ni-60 0 0 -31 6 2 1 Ni-61 0 0 -32 6 2 1 Ni-62 0 0 -33 6 2 1 Ni-64 0 0 -34 6 2 1 Mn-55 0 0 -35 6 2 1 Si-28 0 0 -36 6 2 1 Si-29 0 0 -37 6 2 1 Si-30 0 0 -38 6 2 1 Cr-50 0 0 -39 6 2 1 Cr-52 0 0 -40 6 2 1 Cr-53 0 0 -41 6 2 1 Cr-54 0 0 -0 6 2 2 H-1 0 0 -1 6 2 2 O-16 0 0 -2 6 2 2 B-10 0 0 -3 6 2 2 B-11 0 0 -4 6 2 2 Fe-54 0 0 -5 6 2 2 Fe-56 0 0 -6 6 2 2 Fe-57 0 0 -7 6 2 2 Fe-58 0 0 -8 6 2 2 Ni-58 0 0 -9 6 2 2 Ni-60 0 0 -10 6 2 2 Ni-61 0 0 -11 6 2 2 Ni-62 0 0 -12 6 2 2 Ni-64 0 0 -13 6 2 2 Mn-55 0 0 -14 6 2 2 Si-28 0 0 -15 6 2 2 Si-29 0 0 -16 6 2 2 Si-30 0 0 -17 6 2 2 Cr-50 0 0 -18 6 2 2 Cr-52 0 0 -19 6 2 2 Cr-53 0 0 -20 6 2 2 Cr-54 0 0 material group out nuclide mean std. dev. -21 6 1 H-1 0 0 -22 6 1 O-16 0 0 -23 6 1 B-10 0 0 -24 6 1 B-11 0 0 -25 6 1 Fe-54 0 0 -26 6 1 Fe-56 0 0 -27 6 1 Fe-57 0 0 -28 6 1 Fe-58 0 0 -29 6 1 Ni-58 0 0 -30 6 1 Ni-60 0 0 -31 6 1 Ni-61 0 0 -32 6 1 Ni-62 0 0 -33 6 1 Ni-64 0 0 -34 6 1 Mn-55 0 0 -35 6 1 Si-28 0 0 -36 6 1 Si-29 0 0 -37 6 1 Si-30 0 0 -38 6 1 Cr-50 0 0 -39 6 1 Cr-52 0 0 -40 6 1 Cr-53 0 0 -41 6 1 Cr-54 0 0 -0 6 2 H-1 0 0 -1 6 2 O-16 0 0 -2 6 2 B-10 0 0 -3 6 2 B-11 0 0 -4 6 2 Fe-54 0 0 -5 6 2 Fe-56 0 0 -6 6 2 Fe-57 0 0 -7 6 2 Fe-58 0 0 -8 6 2 Ni-58 0 0 -9 6 2 Ni-60 0 0 -10 6 2 Ni-61 0 0 -11 6 2 Ni-62 0 0 -12 6 2 Ni-64 0 0 -13 6 2 Mn-55 0 0 -14 6 2 Si-28 0 0 -15 6 2 Si-29 0 0 -16 6 2 Si-30 0 0 -17 6 2 Cr-50 0 0 -18 6 2 Cr-52 0 0 -19 6 2 Cr-53 0 0 -20 6 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 7 1 H-1 0 0 -22 7 1 O-16 0 0 -23 7 1 B-10 0 0 -24 7 1 B-11 0 0 -25 7 1 Fe-54 0 0 -26 7 1 Fe-56 0 0 -27 7 1 Fe-57 0 0 -28 7 1 Fe-58 0 0 -29 7 1 Ni-58 0 0 -30 7 1 Ni-60 0 0 -31 7 1 Ni-61 0 0 -32 7 1 Ni-62 0 0 -33 7 1 Ni-64 0 0 -34 7 1 Mn-55 0 0 -35 7 1 Si-28 0 0 -36 7 1 Si-29 0 0 -37 7 1 Si-30 0 0 -38 7 1 Cr-50 0 0 -39 7 1 Cr-52 0 0 -40 7 1 Cr-53 0 0 -41 7 1 Cr-54 0 0 -0 7 2 H-1 0 0 -1 7 2 O-16 0 0 -2 7 2 B-10 0 0 -3 7 2 B-11 0 0 -4 7 2 Fe-54 0 0 -5 7 2 Fe-56 0 0 -6 7 2 Fe-57 0 0 -7 7 2 Fe-58 0 0 -8 7 2 Ni-58 0 0 -9 7 2 Ni-60 0 0 -10 7 2 Ni-61 0 0 -11 7 2 Ni-62 0 0 -12 7 2 Ni-64 0 0 -13 7 2 Mn-55 0 0 -14 7 2 Si-28 0 0 -15 7 2 Si-29 0 0 -16 7 2 Si-30 0 0 -17 7 2 Cr-50 0 0 -18 7 2 Cr-52 0 0 -19 7 2 Cr-53 0 0 -20 7 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 7 1 H-1 0 0 -22 7 1 O-16 0 0 -23 7 1 B-10 0 0 -24 7 1 B-11 0 0 -25 7 1 Fe-54 0 0 -26 7 1 Fe-56 0 0 -27 7 1 Fe-57 0 0 -28 7 1 Fe-58 0 0 -29 7 1 Ni-58 0 0 -30 7 1 Ni-60 0 0 -31 7 1 Ni-61 0 0 -32 7 1 Ni-62 0 0 -33 7 1 Ni-64 0 0 -34 7 1 Mn-55 0 0 -35 7 1 Si-28 0 0 -36 7 1 Si-29 0 0 -37 7 1 Si-30 0 0 -38 7 1 Cr-50 0 0 -39 7 1 Cr-52 0 0 -40 7 1 Cr-53 0 0 -41 7 1 Cr-54 0 0 -0 7 2 H-1 0 0 -1 7 2 O-16 0 0 -2 7 2 B-10 0 0 -3 7 2 B-11 0 0 -4 7 2 Fe-54 0 0 -5 7 2 Fe-56 0 0 -6 7 2 Fe-57 0 0 -7 7 2 Fe-58 0 0 -8 7 2 Ni-58 0 0 -9 7 2 Ni-60 0 0 -10 7 2 Ni-61 0 0 -11 7 2 Ni-62 0 0 -12 7 2 Ni-64 0 0 -13 7 2 Mn-55 0 0 -14 7 2 Si-28 0 0 -15 7 2 Si-29 0 0 -16 7 2 Si-30 0 0 -17 7 2 Cr-50 0 0 -18 7 2 Cr-52 0 0 -19 7 2 Cr-53 0 0 -20 7 2 Cr-54 0 0 material group in group out nuclide mean std. dev. -63 7 1 1 H-1 0 0 -64 7 1 1 O-16 0 0 -65 7 1 1 B-10 0 0 -66 7 1 1 B-11 0 0 -67 7 1 1 Fe-54 0 0 -68 7 1 1 Fe-56 0 0 -69 7 1 1 Fe-57 0 0 -70 7 1 1 Fe-58 0 0 -71 7 1 1 Ni-58 0 0 -72 7 1 1 Ni-60 0 0 -73 7 1 1 Ni-61 0 0 -74 7 1 1 Ni-62 0 0 -75 7 1 1 Ni-64 0 0 -76 7 1 1 Mn-55 0 0 -77 7 1 1 Si-28 0 0 -78 7 1 1 Si-29 0 0 -79 7 1 1 Si-30 0 0 -80 7 1 1 Cr-50 0 0 -81 7 1 1 Cr-52 0 0 -82 7 1 1 Cr-53 0 0 -83 7 1 1 Cr-54 0 0 -42 7 1 2 H-1 0 0 -43 7 1 2 O-16 0 0 -44 7 1 2 B-10 0 0 -45 7 1 2 B-11 0 0 -46 7 1 2 Fe-54 0 0 -47 7 1 2 Fe-56 0 0 -48 7 1 2 Fe-57 0 0 -49 7 1 2 Fe-58 0 0 -50 7 1 2 Ni-58 0 0 -51 7 1 2 Ni-60 0 0 -52 7 1 2 Ni-61 0 0 -53 7 1 2 Ni-62 0 0 -54 7 1 2 Ni-64 0 0 -55 7 1 2 Mn-55 0 0 -56 7 1 2 Si-28 0 0 -57 7 1 2 Si-29 0 0 -58 7 1 2 Si-30 0 0 -59 7 1 2 Cr-50 0 0 -60 7 1 2 Cr-52 0 0 -61 7 1 2 Cr-53 0 0 -62 7 1 2 Cr-54 0 0 -21 7 2 1 H-1 0 0 -22 7 2 1 O-16 0 0 -23 7 2 1 B-10 0 0 -24 7 2 1 B-11 0 0 -25 7 2 1 Fe-54 0 0 -26 7 2 1 Fe-56 0 0 -27 7 2 1 Fe-57 0 0 -28 7 2 1 Fe-58 0 0 -29 7 2 1 Ni-58 0 0 -30 7 2 1 Ni-60 0 0 -31 7 2 1 Ni-61 0 0 -32 7 2 1 Ni-62 0 0 -33 7 2 1 Ni-64 0 0 -34 7 2 1 Mn-55 0 0 -35 7 2 1 Si-28 0 0 -36 7 2 1 Si-29 0 0 -37 7 2 1 Si-30 0 0 -38 7 2 1 Cr-50 0 0 -39 7 2 1 Cr-52 0 0 -40 7 2 1 Cr-53 0 0 -41 7 2 1 Cr-54 0 0 -0 7 2 2 H-1 0 0 -1 7 2 2 O-16 0 0 -2 7 2 2 B-10 0 0 -3 7 2 2 B-11 0 0 -4 7 2 2 Fe-54 0 0 -5 7 2 2 Fe-56 0 0 -6 7 2 2 Fe-57 0 0 -7 7 2 2 Fe-58 0 0 -8 7 2 2 Ni-58 0 0 -9 7 2 2 Ni-60 0 0 -10 7 2 2 Ni-61 0 0 -11 7 2 2 Ni-62 0 0 -12 7 2 2 Ni-64 0 0 -13 7 2 2 Mn-55 0 0 -14 7 2 2 Si-28 0 0 -15 7 2 2 Si-29 0 0 -16 7 2 2 Si-30 0 0 -17 7 2 2 Cr-50 0 0 -18 7 2 2 Cr-52 0 0 -19 7 2 2 Cr-53 0 0 -20 7 2 2 Cr-54 0 0 material group out nuclide mean std. dev. -21 7 1 H-1 0 0 -22 7 1 O-16 0 0 -23 7 1 B-10 0 0 -24 7 1 B-11 0 0 -25 7 1 Fe-54 0 0 -26 7 1 Fe-56 0 0 -27 7 1 Fe-57 0 0 -28 7 1 Fe-58 0 0 -29 7 1 Ni-58 0 0 -30 7 1 Ni-60 0 0 -31 7 1 Ni-61 0 0 -32 7 1 Ni-62 0 0 -33 7 1 Ni-64 0 0 -34 7 1 Mn-55 0 0 -35 7 1 Si-28 0 0 -36 7 1 Si-29 0 0 -37 7 1 Si-30 0 0 -38 7 1 Cr-50 0 0 -39 7 1 Cr-52 0 0 -40 7 1 Cr-53 0 0 -41 7 1 Cr-54 0 0 -0 7 2 H-1 0 0 -1 7 2 O-16 0 0 -2 7 2 B-10 0 0 -3 7 2 B-11 0 0 -4 7 2 Fe-54 0 0 -5 7 2 Fe-56 0 0 -6 7 2 Fe-57 0 0 -7 7 2 Fe-58 0 0 -8 7 2 Ni-58 0 0 -9 7 2 Ni-60 0 0 -10 7 2 Ni-61 0 0 -11 7 2 Ni-62 0 0 -12 7 2 Ni-64 0 0 -13 7 2 Mn-55 0 0 -14 7 2 Si-28 0 0 -15 7 2 Si-29 0 0 -16 7 2 Si-30 0 0 -17 7 2 Cr-50 0 0 -18 7 2 Cr-52 0 0 -19 7 2 Cr-53 0 0 -20 7 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 8 1 H-1 0 0 -22 8 1 O-16 0 0 -23 8 1 B-10 0 0 -24 8 1 B-11 0 0 -25 8 1 Fe-54 0 0 -26 8 1 Fe-56 0 0 -27 8 1 Fe-57 0 0 -28 8 1 Fe-58 0 0 -29 8 1 Ni-58 0 0 -30 8 1 Ni-60 0 0 -31 8 1 Ni-61 0 0 -32 8 1 Ni-62 0 0 -33 8 1 Ni-64 0 0 -34 8 1 Mn-55 0 0 -35 8 1 Si-28 0 0 -36 8 1 Si-29 0 0 -37 8 1 Si-30 0 0 -38 8 1 Cr-50 0 0 -39 8 1 Cr-52 0 0 -40 8 1 Cr-53 0 0 -41 8 1 Cr-54 0 0 -0 8 2 H-1 0 0 -1 8 2 O-16 0 0 -2 8 2 B-10 0 0 -3 8 2 B-11 0 0 -4 8 2 Fe-54 0 0 -5 8 2 Fe-56 0 0 -6 8 2 Fe-57 0 0 -7 8 2 Fe-58 0 0 -8 8 2 Ni-58 0 0 -9 8 2 Ni-60 0 0 -10 8 2 Ni-61 0 0 -11 8 2 Ni-62 0 0 -12 8 2 Ni-64 0 0 -13 8 2 Mn-55 0 0 -14 8 2 Si-28 0 0 -15 8 2 Si-29 0 0 -16 8 2 Si-30 0 0 -17 8 2 Cr-50 0 0 -18 8 2 Cr-52 0 0 -19 8 2 Cr-53 0 0 -20 8 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 8 1 H-1 0 0 -22 8 1 O-16 0 0 -23 8 1 B-10 0 0 -24 8 1 B-11 0 0 -25 8 1 Fe-54 0 0 -26 8 1 Fe-56 0 0 -27 8 1 Fe-57 0 0 -28 8 1 Fe-58 0 0 -29 8 1 Ni-58 0 0 -30 8 1 Ni-60 0 0 -31 8 1 Ni-61 0 0 -32 8 1 Ni-62 0 0 -33 8 1 Ni-64 0 0 -34 8 1 Mn-55 0 0 -35 8 1 Si-28 0 0 -36 8 1 Si-29 0 0 -37 8 1 Si-30 0 0 -38 8 1 Cr-50 0 0 -39 8 1 Cr-52 0 0 -40 8 1 Cr-53 0 0 -41 8 1 Cr-54 0 0 -0 8 2 H-1 0 0 -1 8 2 O-16 0 0 -2 8 2 B-10 0 0 -3 8 2 B-11 0 0 -4 8 2 Fe-54 0 0 -5 8 2 Fe-56 0 0 -6 8 2 Fe-57 0 0 -7 8 2 Fe-58 0 0 -8 8 2 Ni-58 0 0 -9 8 2 Ni-60 0 0 -10 8 2 Ni-61 0 0 -11 8 2 Ni-62 0 0 -12 8 2 Ni-64 0 0 -13 8 2 Mn-55 0 0 -14 8 2 Si-28 0 0 -15 8 2 Si-29 0 0 -16 8 2 Si-30 0 0 -17 8 2 Cr-50 0 0 -18 8 2 Cr-52 0 0 -19 8 2 Cr-53 0 0 -20 8 2 Cr-54 0 0 material group in group out nuclide mean std. dev. -63 8 1 1 H-1 0 0 -64 8 1 1 O-16 0 0 -65 8 1 1 B-10 0 0 -66 8 1 1 B-11 0 0 -67 8 1 1 Fe-54 0 0 -68 8 1 1 Fe-56 0 0 -69 8 1 1 Fe-57 0 0 -70 8 1 1 Fe-58 0 0 -71 8 1 1 Ni-58 0 0 -72 8 1 1 Ni-60 0 0 -73 8 1 1 Ni-61 0 0 -74 8 1 1 Ni-62 0 0 -75 8 1 1 Ni-64 0 0 -76 8 1 1 Mn-55 0 0 -77 8 1 1 Si-28 0 0 -78 8 1 1 Si-29 0 0 -79 8 1 1 Si-30 0 0 -80 8 1 1 Cr-50 0 0 -81 8 1 1 Cr-52 0 0 -82 8 1 1 Cr-53 0 0 -83 8 1 1 Cr-54 0 0 -42 8 1 2 H-1 0 0 -43 8 1 2 O-16 0 0 -44 8 1 2 B-10 0 0 -45 8 1 2 B-11 0 0 -46 8 1 2 Fe-54 0 0 -47 8 1 2 Fe-56 0 0 -48 8 1 2 Fe-57 0 0 -49 8 1 2 Fe-58 0 0 -50 8 1 2 Ni-58 0 0 -51 8 1 2 Ni-60 0 0 -52 8 1 2 Ni-61 0 0 -53 8 1 2 Ni-62 0 0 -54 8 1 2 Ni-64 0 0 -55 8 1 2 Mn-55 0 0 -56 8 1 2 Si-28 0 0 -57 8 1 2 Si-29 0 0 -58 8 1 2 Si-30 0 0 -59 8 1 2 Cr-50 0 0 -60 8 1 2 Cr-52 0 0 -61 8 1 2 Cr-53 0 0 -62 8 1 2 Cr-54 0 0 -21 8 2 1 H-1 0 0 -22 8 2 1 O-16 0 0 -23 8 2 1 B-10 0 0 -24 8 2 1 B-11 0 0 -25 8 2 1 Fe-54 0 0 -26 8 2 1 Fe-56 0 0 -27 8 2 1 Fe-57 0 0 -28 8 2 1 Fe-58 0 0 -29 8 2 1 Ni-58 0 0 -30 8 2 1 Ni-60 0 0 -31 8 2 1 Ni-61 0 0 -32 8 2 1 Ni-62 0 0 -33 8 2 1 Ni-64 0 0 -34 8 2 1 Mn-55 0 0 -35 8 2 1 Si-28 0 0 -36 8 2 1 Si-29 0 0 -37 8 2 1 Si-30 0 0 -38 8 2 1 Cr-50 0 0 -39 8 2 1 Cr-52 0 0 -40 8 2 1 Cr-53 0 0 -41 8 2 1 Cr-54 0 0 -0 8 2 2 H-1 0 0 -1 8 2 2 O-16 0 0 -2 8 2 2 B-10 0 0 -3 8 2 2 B-11 0 0 -4 8 2 2 Fe-54 0 0 -5 8 2 2 Fe-56 0 0 -6 8 2 2 Fe-57 0 0 -7 8 2 2 Fe-58 0 0 -8 8 2 2 Ni-58 0 0 -9 8 2 2 Ni-60 0 0 -10 8 2 2 Ni-61 0 0 -11 8 2 2 Ni-62 0 0 -12 8 2 2 Ni-64 0 0 -13 8 2 2 Mn-55 0 0 -14 8 2 2 Si-28 0 0 -15 8 2 2 Si-29 0 0 -16 8 2 2 Si-30 0 0 -17 8 2 2 Cr-50 0 0 -18 8 2 2 Cr-52 0 0 -19 8 2 2 Cr-53 0 0 -20 8 2 2 Cr-54 0 0 material group out nuclide mean std. dev. -21 8 1 H-1 0 0 -22 8 1 O-16 0 0 -23 8 1 B-10 0 0 -24 8 1 B-11 0 0 -25 8 1 Fe-54 0 0 -26 8 1 Fe-56 0 0 -27 8 1 Fe-57 0 0 -28 8 1 Fe-58 0 0 -29 8 1 Ni-58 0 0 -30 8 1 Ni-60 0 0 -31 8 1 Ni-61 0 0 -32 8 1 Ni-62 0 0 -33 8 1 Ni-64 0 0 -34 8 1 Mn-55 0 0 -35 8 1 Si-28 0 0 -36 8 1 Si-29 0 0 -37 8 1 Si-30 0 0 -38 8 1 Cr-50 0 0 -39 8 1 Cr-52 0 0 -40 8 1 Cr-53 0 0 -41 8 1 Cr-54 0 0 -0 8 2 H-1 0 0 -1 8 2 O-16 0 0 -2 8 2 B-10 0 0 -3 8 2 B-11 0 0 -4 8 2 Fe-54 0 0 -5 8 2 Fe-56 0 0 -6 8 2 Fe-57 0 0 -7 8 2 Fe-58 0 0 -8 8 2 Ni-58 0 0 -9 8 2 Ni-60 0 0 -10 8 2 Ni-61 0 0 -11 8 2 Ni-62 0 0 -12 8 2 Ni-64 0 0 -13 8 2 Mn-55 0 0 -14 8 2 Si-28 0 0 -15 8 2 Si-29 0 0 -16 8 2 Si-30 0 0 -17 8 2 Cr-50 0 0 -18 8 2 Cr-52 0 0 -19 8 2 Cr-53 0 0 -20 8 2 Cr-54 0 0 material group in nuclide mean std. dev. +4 4 1 H-1 0.0 0.0 +5 4 1 O-16 0.0 0.0 +6 4 1 B-10 0.0 0.0 +7 4 1 B-11 0.0 0.0 +0 4 2 H-1 0.0 0.0 +1 4 2 O-16 0.0 0.0 +2 4 2 B-10 0.0 0.0 +3 4 2 B-11 0.0 0.0 material group in nuclide mean std. dev. +27 5 1 Fe-54 0.0 0.0 +28 5 1 Fe-56 0.0 0.0 +29 5 1 Fe-57 0.0 0.0 +30 5 1 Fe-58 0.0 0.0 +31 5 1 Ni-58 0.0 0.0 +32 5 1 Ni-60 0.0 0.0 +33 5 1 Ni-61 0.0 0.0 +34 5 1 Ni-62 0.0 0.0 +35 5 1 Ni-64 0.0 0.0 +36 5 1 Mn-55 0.0 0.0 +37 5 1 Mo-92 0.0 0.0 +38 5 1 Mo-94 0.0 0.0 +39 5 1 Mo-95 0.0 0.0 +40 5 1 Mo-96 0.0 0.0 +41 5 1 Mo-97 0.0 0.0 +42 5 1 Mo-98 0.0 0.0 +43 5 1 Mo-100 0.0 0.0 +44 5 1 Si-28 0.0 0.0 +45 5 1 Si-29 0.0 0.0 +46 5 1 Si-30 0.0 0.0 +47 5 1 Cr-50 0.0 0.0 +48 5 1 Cr-52 0.0 0.0 +49 5 1 Cr-53 0.0 0.0 +50 5 1 Cr-54 0.0 0.0 +51 5 1 C-Nat 0.0 0.0 +52 5 1 Cu-63 0.0 0.0 +53 5 1 Cu-65 0.0 0.0 +0 5 2 Fe-54 0.0 0.0 +1 5 2 Fe-56 0.0 0.0 +2 5 2 Fe-57 0.0 0.0 +3 5 2 Fe-58 0.0 0.0 +4 5 2 Ni-58 0.0 0.0 +5 5 2 Ni-60 0.0 0.0 +6 5 2 Ni-61 0.0 0.0 +7 5 2 Ni-62 0.0 0.0 +8 5 2 Ni-64 0.0 0.0 +9 5 2 Mn-55 0.0 0.0 +10 5 2 Mo-92 0.0 0.0 +11 5 2 Mo-94 0.0 0.0 +12 5 2 Mo-95 0.0 0.0 +13 5 2 Mo-96 0.0 0.0 +14 5 2 Mo-97 0.0 0.0 +15 5 2 Mo-98 0.0 0.0 +16 5 2 Mo-100 0.0 0.0 +17 5 2 Si-28 0.0 0.0 +18 5 2 Si-29 0.0 0.0 +19 5 2 Si-30 0.0 0.0 +20 5 2 Cr-50 0.0 0.0 +21 5 2 Cr-52 0.0 0.0 +22 5 2 Cr-53 0.0 0.0 +23 5 2 Cr-54 0.0 0.0 +24 5 2 C-Nat 0.0 0.0 +25 5 2 Cu-63 0.0 0.0 +26 5 2 Cu-65 0.0 0.0 material group in nuclide mean std. dev. +27 5 1 Fe-54 0.0 0.0 +28 5 1 Fe-56 0.0 0.0 +29 5 1 Fe-57 0.0 0.0 +30 5 1 Fe-58 0.0 0.0 +31 5 1 Ni-58 0.0 0.0 +32 5 1 Ni-60 0.0 0.0 +33 5 1 Ni-61 0.0 0.0 +34 5 1 Ni-62 0.0 0.0 +35 5 1 Ni-64 0.0 0.0 +36 5 1 Mn-55 0.0 0.0 +37 5 1 Mo-92 0.0 0.0 +38 5 1 Mo-94 0.0 0.0 +39 5 1 Mo-95 0.0 0.0 +40 5 1 Mo-96 0.0 0.0 +41 5 1 Mo-97 0.0 0.0 +42 5 1 Mo-98 0.0 0.0 +43 5 1 Mo-100 0.0 0.0 +44 5 1 Si-28 0.0 0.0 +45 5 1 Si-29 0.0 0.0 +46 5 1 Si-30 0.0 0.0 +47 5 1 Cr-50 0.0 0.0 +48 5 1 Cr-52 0.0 0.0 +49 5 1 Cr-53 0.0 0.0 +50 5 1 Cr-54 0.0 0.0 +51 5 1 C-Nat 0.0 0.0 +52 5 1 Cu-63 0.0 0.0 +53 5 1 Cu-65 0.0 0.0 +0 5 2 Fe-54 0.0 0.0 +1 5 2 Fe-56 0.0 0.0 +2 5 2 Fe-57 0.0 0.0 +3 5 2 Fe-58 0.0 0.0 +4 5 2 Ni-58 0.0 0.0 +5 5 2 Ni-60 0.0 0.0 +6 5 2 Ni-61 0.0 0.0 +7 5 2 Ni-62 0.0 0.0 +8 5 2 Ni-64 0.0 0.0 +9 5 2 Mn-55 0.0 0.0 +10 5 2 Mo-92 0.0 0.0 +11 5 2 Mo-94 0.0 0.0 +12 5 2 Mo-95 0.0 0.0 +13 5 2 Mo-96 0.0 0.0 +14 5 2 Mo-97 0.0 0.0 +15 5 2 Mo-98 0.0 0.0 +16 5 2 Mo-100 0.0 0.0 +17 5 2 Si-28 0.0 0.0 +18 5 2 Si-29 0.0 0.0 +19 5 2 Si-30 0.0 0.0 +20 5 2 Cr-50 0.0 0.0 +21 5 2 Cr-52 0.0 0.0 +22 5 2 Cr-53 0.0 0.0 +23 5 2 Cr-54 0.0 0.0 +24 5 2 C-Nat 0.0 0.0 +25 5 2 Cu-63 0.0 0.0 +26 5 2 Cu-65 0.0 0.0 material group in group out nuclide mean std. dev. +81 5 1 1 Fe-54 0.0 0.0 +82 5 1 1 Fe-56 0.0 0.0 +83 5 1 1 Fe-57 0.0 0.0 +84 5 1 1 Fe-58 0.0 0.0 +85 5 1 1 Ni-58 0.0 0.0 +86 5 1 1 Ni-60 0.0 0.0 +87 5 1 1 Ni-61 0.0 0.0 +88 5 1 1 Ni-62 0.0 0.0 +89 5 1 1 Ni-64 0.0 0.0 +90 5 1 1 Mn-55 0.0 0.0 +91 5 1 1 Mo-92 0.0 0.0 +92 5 1 1 Mo-94 0.0 0.0 +93 5 1 1 Mo-95 0.0 0.0 +94 5 1 1 Mo-96 0.0 0.0 +95 5 1 1 Mo-97 0.0 0.0 +96 5 1 1 Mo-98 0.0 0.0 +97 5 1 1 Mo-100 0.0 0.0 +98 5 1 1 Si-28 0.0 0.0 +99 5 1 1 Si-29 0.0 0.0 +100 5 1 1 Si-30 0.0 0.0 +101 5 1 1 Cr-50 0.0 0.0 +102 5 1 1 Cr-52 0.0 0.0 +103 5 1 1 Cr-53 0.0 0.0 +104 5 1 1 Cr-54 0.0 0.0 +105 5 1 1 C-Nat 0.0 0.0 +106 5 1 1 Cu-63 0.0 0.0 +107 5 1 1 Cu-65 0.0 0.0 +54 5 1 2 Fe-54 0.0 0.0 +55 5 1 2 Fe-56 0.0 0.0 +56 5 1 2 Fe-57 0.0 0.0 +57 5 1 2 Fe-58 0.0 0.0 +58 5 1 2 Ni-58 0.0 0.0 +59 5 1 2 Ni-60 0.0 0.0 +60 5 1 2 Ni-61 0.0 0.0 +61 5 1 2 Ni-62 0.0 0.0 +62 5 1 2 Ni-64 0.0 0.0 +63 5 1 2 Mn-55 0.0 0.0 +64 5 1 2 Mo-92 0.0 0.0 +65 5 1 2 Mo-94 0.0 0.0 +66 5 1 2 Mo-95 0.0 0.0 +67 5 1 2 Mo-96 0.0 0.0 +68 5 1 2 Mo-97 0.0 0.0 +69 5 1 2 Mo-98 0.0 0.0 +70 5 1 2 Mo-100 0.0 0.0 +71 5 1 2 Si-28 0.0 0.0 +72 5 1 2 Si-29 0.0 0.0 +73 5 1 2 Si-30 0.0 0.0 +74 5 1 2 Cr-50 0.0 0.0 +75 5 1 2 Cr-52 0.0 0.0 +76 5 1 2 Cr-53 0.0 0.0 +77 5 1 2 Cr-54 0.0 0.0 +78 5 1 2 C-Nat 0.0 0.0 +79 5 1 2 Cu-63 0.0 0.0 +80 5 1 2 Cu-65 0.0 0.0 +27 5 2 1 Fe-54 0.0 0.0 +28 5 2 1 Fe-56 0.0 0.0 +29 5 2 1 Fe-57 0.0 0.0 +30 5 2 1 Fe-58 0.0 0.0 +31 5 2 1 Ni-58 0.0 0.0 +32 5 2 1 Ni-60 0.0 0.0 +33 5 2 1 Ni-61 0.0 0.0 +34 5 2 1 Ni-62 0.0 0.0 +35 5 2 1 Ni-64 0.0 0.0 +36 5 2 1 Mn-55 0.0 0.0 +37 5 2 1 Mo-92 0.0 0.0 +38 5 2 1 Mo-94 0.0 0.0 +39 5 2 1 Mo-95 0.0 0.0 +40 5 2 1 Mo-96 0.0 0.0 +41 5 2 1 Mo-97 0.0 0.0 +42 5 2 1 Mo-98 0.0 0.0 +43 5 2 1 Mo-100 0.0 0.0 +44 5 2 1 Si-28 0.0 0.0 +45 5 2 1 Si-29 0.0 0.0 +46 5 2 1 Si-30 0.0 0.0 +47 5 2 1 Cr-50 0.0 0.0 +48 5 2 1 Cr-52 0.0 0.0 +49 5 2 1 Cr-53 0.0 0.0 +50 5 2 1 Cr-54 0.0 0.0 +51 5 2 1 C-Nat 0.0 0.0 +52 5 2 1 Cu-63 0.0 0.0 +53 5 2 1 Cu-65 0.0 0.0 +0 5 2 2 Fe-54 0.0 0.0 +1 5 2 2 Fe-56 0.0 0.0 +2 5 2 2 Fe-57 0.0 0.0 +3 5 2 2 Fe-58 0.0 0.0 +4 5 2 2 Ni-58 0.0 0.0 +5 5 2 2 Ni-60 0.0 0.0 +6 5 2 2 Ni-61 0.0 0.0 +7 5 2 2 Ni-62 0.0 0.0 +8 5 2 2 Ni-64 0.0 0.0 +9 5 2 2 Mn-55 0.0 0.0 +10 5 2 2 Mo-92 0.0 0.0 +11 5 2 2 Mo-94 0.0 0.0 +12 5 2 2 Mo-95 0.0 0.0 +13 5 2 2 Mo-96 0.0 0.0 +14 5 2 2 Mo-97 0.0 0.0 +15 5 2 2 Mo-98 0.0 0.0 +16 5 2 2 Mo-100 0.0 0.0 +17 5 2 2 Si-28 0.0 0.0 +18 5 2 2 Si-29 0.0 0.0 +19 5 2 2 Si-30 0.0 0.0 +20 5 2 2 Cr-50 0.0 0.0 +21 5 2 2 Cr-52 0.0 0.0 +22 5 2 2 Cr-53 0.0 0.0 +23 5 2 2 Cr-54 0.0 0.0 +24 5 2 2 C-Nat 0.0 0.0 +25 5 2 2 Cu-63 0.0 0.0 +26 5 2 2 Cu-65 0.0 0.0 material group out nuclide mean std. dev. +27 5 1 Fe-54 0.0 0.0 +28 5 1 Fe-56 0.0 0.0 +29 5 1 Fe-57 0.0 0.0 +30 5 1 Fe-58 0.0 0.0 +31 5 1 Ni-58 0.0 0.0 +32 5 1 Ni-60 0.0 0.0 +33 5 1 Ni-61 0.0 0.0 +34 5 1 Ni-62 0.0 0.0 +35 5 1 Ni-64 0.0 0.0 +36 5 1 Mn-55 0.0 0.0 +37 5 1 Mo-92 0.0 0.0 +38 5 1 Mo-94 0.0 0.0 +39 5 1 Mo-95 0.0 0.0 +40 5 1 Mo-96 0.0 0.0 +41 5 1 Mo-97 0.0 0.0 +42 5 1 Mo-98 0.0 0.0 +43 5 1 Mo-100 0.0 0.0 +44 5 1 Si-28 0.0 0.0 +45 5 1 Si-29 0.0 0.0 +46 5 1 Si-30 0.0 0.0 +47 5 1 Cr-50 0.0 0.0 +48 5 1 Cr-52 0.0 0.0 +49 5 1 Cr-53 0.0 0.0 +50 5 1 Cr-54 0.0 0.0 +51 5 1 C-Nat 0.0 0.0 +52 5 1 Cu-63 0.0 0.0 +53 5 1 Cu-65 0.0 0.0 +0 5 2 Fe-54 0.0 0.0 +1 5 2 Fe-56 0.0 0.0 +2 5 2 Fe-57 0.0 0.0 +3 5 2 Fe-58 0.0 0.0 +4 5 2 Ni-58 0.0 0.0 +5 5 2 Ni-60 0.0 0.0 +6 5 2 Ni-61 0.0 0.0 +7 5 2 Ni-62 0.0 0.0 +8 5 2 Ni-64 0.0 0.0 +9 5 2 Mn-55 0.0 0.0 +10 5 2 Mo-92 0.0 0.0 +11 5 2 Mo-94 0.0 0.0 +12 5 2 Mo-95 0.0 0.0 +13 5 2 Mo-96 0.0 0.0 +14 5 2 Mo-97 0.0 0.0 +15 5 2 Mo-98 0.0 0.0 +16 5 2 Mo-100 0.0 0.0 +17 5 2 Si-28 0.0 0.0 +18 5 2 Si-29 0.0 0.0 +19 5 2 Si-30 0.0 0.0 +20 5 2 Cr-50 0.0 0.0 +21 5 2 Cr-52 0.0 0.0 +22 5 2 Cr-53 0.0 0.0 +23 5 2 Cr-54 0.0 0.0 +24 5 2 C-Nat 0.0 0.0 +25 5 2 Cu-63 0.0 0.0 +26 5 2 Cu-65 0.0 0.0 material group in nuclide mean std. dev. +21 6 1 H-1 0.0 0.0 +22 6 1 O-16 0.0 0.0 +23 6 1 B-10 0.0 0.0 +24 6 1 B-11 0.0 0.0 +25 6 1 Fe-54 0.0 0.0 +26 6 1 Fe-56 0.0 0.0 +27 6 1 Fe-57 0.0 0.0 +28 6 1 Fe-58 0.0 0.0 +29 6 1 Ni-58 0.0 0.0 +30 6 1 Ni-60 0.0 0.0 +31 6 1 Ni-61 0.0 0.0 +32 6 1 Ni-62 0.0 0.0 +33 6 1 Ni-64 0.0 0.0 +34 6 1 Mn-55 0.0 0.0 +35 6 1 Si-28 0.0 0.0 +36 6 1 Si-29 0.0 0.0 +37 6 1 Si-30 0.0 0.0 +38 6 1 Cr-50 0.0 0.0 +39 6 1 Cr-52 0.0 0.0 +40 6 1 Cr-53 0.0 0.0 +41 6 1 Cr-54 0.0 0.0 +0 6 2 H-1 0.0 0.0 +1 6 2 O-16 0.0 0.0 +2 6 2 B-10 0.0 0.0 +3 6 2 B-11 0.0 0.0 +4 6 2 Fe-54 0.0 0.0 +5 6 2 Fe-56 0.0 0.0 +6 6 2 Fe-57 0.0 0.0 +7 6 2 Fe-58 0.0 0.0 +8 6 2 Ni-58 0.0 0.0 +9 6 2 Ni-60 0.0 0.0 +10 6 2 Ni-61 0.0 0.0 +11 6 2 Ni-62 0.0 0.0 +12 6 2 Ni-64 0.0 0.0 +13 6 2 Mn-55 0.0 0.0 +14 6 2 Si-28 0.0 0.0 +15 6 2 Si-29 0.0 0.0 +16 6 2 Si-30 0.0 0.0 +17 6 2 Cr-50 0.0 0.0 +18 6 2 Cr-52 0.0 0.0 +19 6 2 Cr-53 0.0 0.0 +20 6 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 6 1 H-1 0.0 0.0 +22 6 1 O-16 0.0 0.0 +23 6 1 B-10 0.0 0.0 +24 6 1 B-11 0.0 0.0 +25 6 1 Fe-54 0.0 0.0 +26 6 1 Fe-56 0.0 0.0 +27 6 1 Fe-57 0.0 0.0 +28 6 1 Fe-58 0.0 0.0 +29 6 1 Ni-58 0.0 0.0 +30 6 1 Ni-60 0.0 0.0 +31 6 1 Ni-61 0.0 0.0 +32 6 1 Ni-62 0.0 0.0 +33 6 1 Ni-64 0.0 0.0 +34 6 1 Mn-55 0.0 0.0 +35 6 1 Si-28 0.0 0.0 +36 6 1 Si-29 0.0 0.0 +37 6 1 Si-30 0.0 0.0 +38 6 1 Cr-50 0.0 0.0 +39 6 1 Cr-52 0.0 0.0 +40 6 1 Cr-53 0.0 0.0 +41 6 1 Cr-54 0.0 0.0 +0 6 2 H-1 0.0 0.0 +1 6 2 O-16 0.0 0.0 +2 6 2 B-10 0.0 0.0 +3 6 2 B-11 0.0 0.0 +4 6 2 Fe-54 0.0 0.0 +5 6 2 Fe-56 0.0 0.0 +6 6 2 Fe-57 0.0 0.0 +7 6 2 Fe-58 0.0 0.0 +8 6 2 Ni-58 0.0 0.0 +9 6 2 Ni-60 0.0 0.0 +10 6 2 Ni-61 0.0 0.0 +11 6 2 Ni-62 0.0 0.0 +12 6 2 Ni-64 0.0 0.0 +13 6 2 Mn-55 0.0 0.0 +14 6 2 Si-28 0.0 0.0 +15 6 2 Si-29 0.0 0.0 +16 6 2 Si-30 0.0 0.0 +17 6 2 Cr-50 0.0 0.0 +18 6 2 Cr-52 0.0 0.0 +19 6 2 Cr-53 0.0 0.0 +20 6 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. +63 6 1 1 H-1 0.0 0.0 +64 6 1 1 O-16 0.0 0.0 +65 6 1 1 B-10 0.0 0.0 +66 6 1 1 B-11 0.0 0.0 +67 6 1 1 Fe-54 0.0 0.0 +68 6 1 1 Fe-56 0.0 0.0 +69 6 1 1 Fe-57 0.0 0.0 +70 6 1 1 Fe-58 0.0 0.0 +71 6 1 1 Ni-58 0.0 0.0 +72 6 1 1 Ni-60 0.0 0.0 +73 6 1 1 Ni-61 0.0 0.0 +74 6 1 1 Ni-62 0.0 0.0 +75 6 1 1 Ni-64 0.0 0.0 +76 6 1 1 Mn-55 0.0 0.0 +77 6 1 1 Si-28 0.0 0.0 +78 6 1 1 Si-29 0.0 0.0 +79 6 1 1 Si-30 0.0 0.0 +80 6 1 1 Cr-50 0.0 0.0 +81 6 1 1 Cr-52 0.0 0.0 +82 6 1 1 Cr-53 0.0 0.0 +83 6 1 1 Cr-54 0.0 0.0 +42 6 1 2 H-1 0.0 0.0 +43 6 1 2 O-16 0.0 0.0 +44 6 1 2 B-10 0.0 0.0 +45 6 1 2 B-11 0.0 0.0 +46 6 1 2 Fe-54 0.0 0.0 +47 6 1 2 Fe-56 0.0 0.0 +48 6 1 2 Fe-57 0.0 0.0 +49 6 1 2 Fe-58 0.0 0.0 +50 6 1 2 Ni-58 0.0 0.0 +51 6 1 2 Ni-60 0.0 0.0 +52 6 1 2 Ni-61 0.0 0.0 +53 6 1 2 Ni-62 0.0 0.0 +54 6 1 2 Ni-64 0.0 0.0 +55 6 1 2 Mn-55 0.0 0.0 +56 6 1 2 Si-28 0.0 0.0 +57 6 1 2 Si-29 0.0 0.0 +58 6 1 2 Si-30 0.0 0.0 +59 6 1 2 Cr-50 0.0 0.0 +60 6 1 2 Cr-52 0.0 0.0 +61 6 1 2 Cr-53 0.0 0.0 +62 6 1 2 Cr-54 0.0 0.0 +21 6 2 1 H-1 0.0 0.0 +22 6 2 1 O-16 0.0 0.0 +23 6 2 1 B-10 0.0 0.0 +24 6 2 1 B-11 0.0 0.0 +25 6 2 1 Fe-54 0.0 0.0 +26 6 2 1 Fe-56 0.0 0.0 +27 6 2 1 Fe-57 0.0 0.0 +28 6 2 1 Fe-58 0.0 0.0 +29 6 2 1 Ni-58 0.0 0.0 +30 6 2 1 Ni-60 0.0 0.0 +31 6 2 1 Ni-61 0.0 0.0 +32 6 2 1 Ni-62 0.0 0.0 +33 6 2 1 Ni-64 0.0 0.0 +34 6 2 1 Mn-55 0.0 0.0 +35 6 2 1 Si-28 0.0 0.0 +36 6 2 1 Si-29 0.0 0.0 +37 6 2 1 Si-30 0.0 0.0 +38 6 2 1 Cr-50 0.0 0.0 +39 6 2 1 Cr-52 0.0 0.0 +40 6 2 1 Cr-53 0.0 0.0 +41 6 2 1 Cr-54 0.0 0.0 +0 6 2 2 H-1 0.0 0.0 +1 6 2 2 O-16 0.0 0.0 +2 6 2 2 B-10 0.0 0.0 +3 6 2 2 B-11 0.0 0.0 +4 6 2 2 Fe-54 0.0 0.0 +5 6 2 2 Fe-56 0.0 0.0 +6 6 2 2 Fe-57 0.0 0.0 +7 6 2 2 Fe-58 0.0 0.0 +8 6 2 2 Ni-58 0.0 0.0 +9 6 2 2 Ni-60 0.0 0.0 +10 6 2 2 Ni-61 0.0 0.0 +11 6 2 2 Ni-62 0.0 0.0 +12 6 2 2 Ni-64 0.0 0.0 +13 6 2 2 Mn-55 0.0 0.0 +14 6 2 2 Si-28 0.0 0.0 +15 6 2 2 Si-29 0.0 0.0 +16 6 2 2 Si-30 0.0 0.0 +17 6 2 2 Cr-50 0.0 0.0 +18 6 2 2 Cr-52 0.0 0.0 +19 6 2 2 Cr-53 0.0 0.0 +20 6 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. +21 6 1 H-1 0.0 0.0 +22 6 1 O-16 0.0 0.0 +23 6 1 B-10 0.0 0.0 +24 6 1 B-11 0.0 0.0 +25 6 1 Fe-54 0.0 0.0 +26 6 1 Fe-56 0.0 0.0 +27 6 1 Fe-57 0.0 0.0 +28 6 1 Fe-58 0.0 0.0 +29 6 1 Ni-58 0.0 0.0 +30 6 1 Ni-60 0.0 0.0 +31 6 1 Ni-61 0.0 0.0 +32 6 1 Ni-62 0.0 0.0 +33 6 1 Ni-64 0.0 0.0 +34 6 1 Mn-55 0.0 0.0 +35 6 1 Si-28 0.0 0.0 +36 6 1 Si-29 0.0 0.0 +37 6 1 Si-30 0.0 0.0 +38 6 1 Cr-50 0.0 0.0 +39 6 1 Cr-52 0.0 0.0 +40 6 1 Cr-53 0.0 0.0 +41 6 1 Cr-54 0.0 0.0 +0 6 2 H-1 0.0 0.0 +1 6 2 O-16 0.0 0.0 +2 6 2 B-10 0.0 0.0 +3 6 2 B-11 0.0 0.0 +4 6 2 Fe-54 0.0 0.0 +5 6 2 Fe-56 0.0 0.0 +6 6 2 Fe-57 0.0 0.0 +7 6 2 Fe-58 0.0 0.0 +8 6 2 Ni-58 0.0 0.0 +9 6 2 Ni-60 0.0 0.0 +10 6 2 Ni-61 0.0 0.0 +11 6 2 Ni-62 0.0 0.0 +12 6 2 Ni-64 0.0 0.0 +13 6 2 Mn-55 0.0 0.0 +14 6 2 Si-28 0.0 0.0 +15 6 2 Si-29 0.0 0.0 +16 6 2 Si-30 0.0 0.0 +17 6 2 Cr-50 0.0 0.0 +18 6 2 Cr-52 0.0 0.0 +19 6 2 Cr-53 0.0 0.0 +20 6 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 7 1 H-1 0.0 0.0 +22 7 1 O-16 0.0 0.0 +23 7 1 B-10 0.0 0.0 +24 7 1 B-11 0.0 0.0 +25 7 1 Fe-54 0.0 0.0 +26 7 1 Fe-56 0.0 0.0 +27 7 1 Fe-57 0.0 0.0 +28 7 1 Fe-58 0.0 0.0 +29 7 1 Ni-58 0.0 0.0 +30 7 1 Ni-60 0.0 0.0 +31 7 1 Ni-61 0.0 0.0 +32 7 1 Ni-62 0.0 0.0 +33 7 1 Ni-64 0.0 0.0 +34 7 1 Mn-55 0.0 0.0 +35 7 1 Si-28 0.0 0.0 +36 7 1 Si-29 0.0 0.0 +37 7 1 Si-30 0.0 0.0 +38 7 1 Cr-50 0.0 0.0 +39 7 1 Cr-52 0.0 0.0 +40 7 1 Cr-53 0.0 0.0 +41 7 1 Cr-54 0.0 0.0 +0 7 2 H-1 0.0 0.0 +1 7 2 O-16 0.0 0.0 +2 7 2 B-10 0.0 0.0 +3 7 2 B-11 0.0 0.0 +4 7 2 Fe-54 0.0 0.0 +5 7 2 Fe-56 0.0 0.0 +6 7 2 Fe-57 0.0 0.0 +7 7 2 Fe-58 0.0 0.0 +8 7 2 Ni-58 0.0 0.0 +9 7 2 Ni-60 0.0 0.0 +10 7 2 Ni-61 0.0 0.0 +11 7 2 Ni-62 0.0 0.0 +12 7 2 Ni-64 0.0 0.0 +13 7 2 Mn-55 0.0 0.0 +14 7 2 Si-28 0.0 0.0 +15 7 2 Si-29 0.0 0.0 +16 7 2 Si-30 0.0 0.0 +17 7 2 Cr-50 0.0 0.0 +18 7 2 Cr-52 0.0 0.0 +19 7 2 Cr-53 0.0 0.0 +20 7 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 7 1 H-1 0.0 0.0 +22 7 1 O-16 0.0 0.0 +23 7 1 B-10 0.0 0.0 +24 7 1 B-11 0.0 0.0 +25 7 1 Fe-54 0.0 0.0 +26 7 1 Fe-56 0.0 0.0 +27 7 1 Fe-57 0.0 0.0 +28 7 1 Fe-58 0.0 0.0 +29 7 1 Ni-58 0.0 0.0 +30 7 1 Ni-60 0.0 0.0 +31 7 1 Ni-61 0.0 0.0 +32 7 1 Ni-62 0.0 0.0 +33 7 1 Ni-64 0.0 0.0 +34 7 1 Mn-55 0.0 0.0 +35 7 1 Si-28 0.0 0.0 +36 7 1 Si-29 0.0 0.0 +37 7 1 Si-30 0.0 0.0 +38 7 1 Cr-50 0.0 0.0 +39 7 1 Cr-52 0.0 0.0 +40 7 1 Cr-53 0.0 0.0 +41 7 1 Cr-54 0.0 0.0 +0 7 2 H-1 0.0 0.0 +1 7 2 O-16 0.0 0.0 +2 7 2 B-10 0.0 0.0 +3 7 2 B-11 0.0 0.0 +4 7 2 Fe-54 0.0 0.0 +5 7 2 Fe-56 0.0 0.0 +6 7 2 Fe-57 0.0 0.0 +7 7 2 Fe-58 0.0 0.0 +8 7 2 Ni-58 0.0 0.0 +9 7 2 Ni-60 0.0 0.0 +10 7 2 Ni-61 0.0 0.0 +11 7 2 Ni-62 0.0 0.0 +12 7 2 Ni-64 0.0 0.0 +13 7 2 Mn-55 0.0 0.0 +14 7 2 Si-28 0.0 0.0 +15 7 2 Si-29 0.0 0.0 +16 7 2 Si-30 0.0 0.0 +17 7 2 Cr-50 0.0 0.0 +18 7 2 Cr-52 0.0 0.0 +19 7 2 Cr-53 0.0 0.0 +20 7 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. +63 7 1 1 H-1 0.0 0.0 +64 7 1 1 O-16 0.0 0.0 +65 7 1 1 B-10 0.0 0.0 +66 7 1 1 B-11 0.0 0.0 +67 7 1 1 Fe-54 0.0 0.0 +68 7 1 1 Fe-56 0.0 0.0 +69 7 1 1 Fe-57 0.0 0.0 +70 7 1 1 Fe-58 0.0 0.0 +71 7 1 1 Ni-58 0.0 0.0 +72 7 1 1 Ni-60 0.0 0.0 +73 7 1 1 Ni-61 0.0 0.0 +74 7 1 1 Ni-62 0.0 0.0 +75 7 1 1 Ni-64 0.0 0.0 +76 7 1 1 Mn-55 0.0 0.0 +77 7 1 1 Si-28 0.0 0.0 +78 7 1 1 Si-29 0.0 0.0 +79 7 1 1 Si-30 0.0 0.0 +80 7 1 1 Cr-50 0.0 0.0 +81 7 1 1 Cr-52 0.0 0.0 +82 7 1 1 Cr-53 0.0 0.0 +83 7 1 1 Cr-54 0.0 0.0 +42 7 1 2 H-1 0.0 0.0 +43 7 1 2 O-16 0.0 0.0 +44 7 1 2 B-10 0.0 0.0 +45 7 1 2 B-11 0.0 0.0 +46 7 1 2 Fe-54 0.0 0.0 +47 7 1 2 Fe-56 0.0 0.0 +48 7 1 2 Fe-57 0.0 0.0 +49 7 1 2 Fe-58 0.0 0.0 +50 7 1 2 Ni-58 0.0 0.0 +51 7 1 2 Ni-60 0.0 0.0 +52 7 1 2 Ni-61 0.0 0.0 +53 7 1 2 Ni-62 0.0 0.0 +54 7 1 2 Ni-64 0.0 0.0 +55 7 1 2 Mn-55 0.0 0.0 +56 7 1 2 Si-28 0.0 0.0 +57 7 1 2 Si-29 0.0 0.0 +58 7 1 2 Si-30 0.0 0.0 +59 7 1 2 Cr-50 0.0 0.0 +60 7 1 2 Cr-52 0.0 0.0 +61 7 1 2 Cr-53 0.0 0.0 +62 7 1 2 Cr-54 0.0 0.0 +21 7 2 1 H-1 0.0 0.0 +22 7 2 1 O-16 0.0 0.0 +23 7 2 1 B-10 0.0 0.0 +24 7 2 1 B-11 0.0 0.0 +25 7 2 1 Fe-54 0.0 0.0 +26 7 2 1 Fe-56 0.0 0.0 +27 7 2 1 Fe-57 0.0 0.0 +28 7 2 1 Fe-58 0.0 0.0 +29 7 2 1 Ni-58 0.0 0.0 +30 7 2 1 Ni-60 0.0 0.0 +31 7 2 1 Ni-61 0.0 0.0 +32 7 2 1 Ni-62 0.0 0.0 +33 7 2 1 Ni-64 0.0 0.0 +34 7 2 1 Mn-55 0.0 0.0 +35 7 2 1 Si-28 0.0 0.0 +36 7 2 1 Si-29 0.0 0.0 +37 7 2 1 Si-30 0.0 0.0 +38 7 2 1 Cr-50 0.0 0.0 +39 7 2 1 Cr-52 0.0 0.0 +40 7 2 1 Cr-53 0.0 0.0 +41 7 2 1 Cr-54 0.0 0.0 +0 7 2 2 H-1 0.0 0.0 +1 7 2 2 O-16 0.0 0.0 +2 7 2 2 B-10 0.0 0.0 +3 7 2 2 B-11 0.0 0.0 +4 7 2 2 Fe-54 0.0 0.0 +5 7 2 2 Fe-56 0.0 0.0 +6 7 2 2 Fe-57 0.0 0.0 +7 7 2 2 Fe-58 0.0 0.0 +8 7 2 2 Ni-58 0.0 0.0 +9 7 2 2 Ni-60 0.0 0.0 +10 7 2 2 Ni-61 0.0 0.0 +11 7 2 2 Ni-62 0.0 0.0 +12 7 2 2 Ni-64 0.0 0.0 +13 7 2 2 Mn-55 0.0 0.0 +14 7 2 2 Si-28 0.0 0.0 +15 7 2 2 Si-29 0.0 0.0 +16 7 2 2 Si-30 0.0 0.0 +17 7 2 2 Cr-50 0.0 0.0 +18 7 2 2 Cr-52 0.0 0.0 +19 7 2 2 Cr-53 0.0 0.0 +20 7 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. +21 7 1 H-1 0.0 0.0 +22 7 1 O-16 0.0 0.0 +23 7 1 B-10 0.0 0.0 +24 7 1 B-11 0.0 0.0 +25 7 1 Fe-54 0.0 0.0 +26 7 1 Fe-56 0.0 0.0 +27 7 1 Fe-57 0.0 0.0 +28 7 1 Fe-58 0.0 0.0 +29 7 1 Ni-58 0.0 0.0 +30 7 1 Ni-60 0.0 0.0 +31 7 1 Ni-61 0.0 0.0 +32 7 1 Ni-62 0.0 0.0 +33 7 1 Ni-64 0.0 0.0 +34 7 1 Mn-55 0.0 0.0 +35 7 1 Si-28 0.0 0.0 +36 7 1 Si-29 0.0 0.0 +37 7 1 Si-30 0.0 0.0 +38 7 1 Cr-50 0.0 0.0 +39 7 1 Cr-52 0.0 0.0 +40 7 1 Cr-53 0.0 0.0 +41 7 1 Cr-54 0.0 0.0 +0 7 2 H-1 0.0 0.0 +1 7 2 O-16 0.0 0.0 +2 7 2 B-10 0.0 0.0 +3 7 2 B-11 0.0 0.0 +4 7 2 Fe-54 0.0 0.0 +5 7 2 Fe-56 0.0 0.0 +6 7 2 Fe-57 0.0 0.0 +7 7 2 Fe-58 0.0 0.0 +8 7 2 Ni-58 0.0 0.0 +9 7 2 Ni-60 0.0 0.0 +10 7 2 Ni-61 0.0 0.0 +11 7 2 Ni-62 0.0 0.0 +12 7 2 Ni-64 0.0 0.0 +13 7 2 Mn-55 0.0 0.0 +14 7 2 Si-28 0.0 0.0 +15 7 2 Si-29 0.0 0.0 +16 7 2 Si-30 0.0 0.0 +17 7 2 Cr-50 0.0 0.0 +18 7 2 Cr-52 0.0 0.0 +19 7 2 Cr-53 0.0 0.0 +20 7 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 8 1 H-1 0.0 0.0 +22 8 1 O-16 0.0 0.0 +23 8 1 B-10 0.0 0.0 +24 8 1 B-11 0.0 0.0 +25 8 1 Fe-54 0.0 0.0 +26 8 1 Fe-56 0.0 0.0 +27 8 1 Fe-57 0.0 0.0 +28 8 1 Fe-58 0.0 0.0 +29 8 1 Ni-58 0.0 0.0 +30 8 1 Ni-60 0.0 0.0 +31 8 1 Ni-61 0.0 0.0 +32 8 1 Ni-62 0.0 0.0 +33 8 1 Ni-64 0.0 0.0 +34 8 1 Mn-55 0.0 0.0 +35 8 1 Si-28 0.0 0.0 +36 8 1 Si-29 0.0 0.0 +37 8 1 Si-30 0.0 0.0 +38 8 1 Cr-50 0.0 0.0 +39 8 1 Cr-52 0.0 0.0 +40 8 1 Cr-53 0.0 0.0 +41 8 1 Cr-54 0.0 0.0 +0 8 2 H-1 0.0 0.0 +1 8 2 O-16 0.0 0.0 +2 8 2 B-10 0.0 0.0 +3 8 2 B-11 0.0 0.0 +4 8 2 Fe-54 0.0 0.0 +5 8 2 Fe-56 0.0 0.0 +6 8 2 Fe-57 0.0 0.0 +7 8 2 Fe-58 0.0 0.0 +8 8 2 Ni-58 0.0 0.0 +9 8 2 Ni-60 0.0 0.0 +10 8 2 Ni-61 0.0 0.0 +11 8 2 Ni-62 0.0 0.0 +12 8 2 Ni-64 0.0 0.0 +13 8 2 Mn-55 0.0 0.0 +14 8 2 Si-28 0.0 0.0 +15 8 2 Si-29 0.0 0.0 +16 8 2 Si-30 0.0 0.0 +17 8 2 Cr-50 0.0 0.0 +18 8 2 Cr-52 0.0 0.0 +19 8 2 Cr-53 0.0 0.0 +20 8 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 8 1 H-1 0.0 0.0 +22 8 1 O-16 0.0 0.0 +23 8 1 B-10 0.0 0.0 +24 8 1 B-11 0.0 0.0 +25 8 1 Fe-54 0.0 0.0 +26 8 1 Fe-56 0.0 0.0 +27 8 1 Fe-57 0.0 0.0 +28 8 1 Fe-58 0.0 0.0 +29 8 1 Ni-58 0.0 0.0 +30 8 1 Ni-60 0.0 0.0 +31 8 1 Ni-61 0.0 0.0 +32 8 1 Ni-62 0.0 0.0 +33 8 1 Ni-64 0.0 0.0 +34 8 1 Mn-55 0.0 0.0 +35 8 1 Si-28 0.0 0.0 +36 8 1 Si-29 0.0 0.0 +37 8 1 Si-30 0.0 0.0 +38 8 1 Cr-50 0.0 0.0 +39 8 1 Cr-52 0.0 0.0 +40 8 1 Cr-53 0.0 0.0 +41 8 1 Cr-54 0.0 0.0 +0 8 2 H-1 0.0 0.0 +1 8 2 O-16 0.0 0.0 +2 8 2 B-10 0.0 0.0 +3 8 2 B-11 0.0 0.0 +4 8 2 Fe-54 0.0 0.0 +5 8 2 Fe-56 0.0 0.0 +6 8 2 Fe-57 0.0 0.0 +7 8 2 Fe-58 0.0 0.0 +8 8 2 Ni-58 0.0 0.0 +9 8 2 Ni-60 0.0 0.0 +10 8 2 Ni-61 0.0 0.0 +11 8 2 Ni-62 0.0 0.0 +12 8 2 Ni-64 0.0 0.0 +13 8 2 Mn-55 0.0 0.0 +14 8 2 Si-28 0.0 0.0 +15 8 2 Si-29 0.0 0.0 +16 8 2 Si-30 0.0 0.0 +17 8 2 Cr-50 0.0 0.0 +18 8 2 Cr-52 0.0 0.0 +19 8 2 Cr-53 0.0 0.0 +20 8 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. +63 8 1 1 H-1 0.0 0.0 +64 8 1 1 O-16 0.0 0.0 +65 8 1 1 B-10 0.0 0.0 +66 8 1 1 B-11 0.0 0.0 +67 8 1 1 Fe-54 0.0 0.0 +68 8 1 1 Fe-56 0.0 0.0 +69 8 1 1 Fe-57 0.0 0.0 +70 8 1 1 Fe-58 0.0 0.0 +71 8 1 1 Ni-58 0.0 0.0 +72 8 1 1 Ni-60 0.0 0.0 +73 8 1 1 Ni-61 0.0 0.0 +74 8 1 1 Ni-62 0.0 0.0 +75 8 1 1 Ni-64 0.0 0.0 +76 8 1 1 Mn-55 0.0 0.0 +77 8 1 1 Si-28 0.0 0.0 +78 8 1 1 Si-29 0.0 0.0 +79 8 1 1 Si-30 0.0 0.0 +80 8 1 1 Cr-50 0.0 0.0 +81 8 1 1 Cr-52 0.0 0.0 +82 8 1 1 Cr-53 0.0 0.0 +83 8 1 1 Cr-54 0.0 0.0 +42 8 1 2 H-1 0.0 0.0 +43 8 1 2 O-16 0.0 0.0 +44 8 1 2 B-10 0.0 0.0 +45 8 1 2 B-11 0.0 0.0 +46 8 1 2 Fe-54 0.0 0.0 +47 8 1 2 Fe-56 0.0 0.0 +48 8 1 2 Fe-57 0.0 0.0 +49 8 1 2 Fe-58 0.0 0.0 +50 8 1 2 Ni-58 0.0 0.0 +51 8 1 2 Ni-60 0.0 0.0 +52 8 1 2 Ni-61 0.0 0.0 +53 8 1 2 Ni-62 0.0 0.0 +54 8 1 2 Ni-64 0.0 0.0 +55 8 1 2 Mn-55 0.0 0.0 +56 8 1 2 Si-28 0.0 0.0 +57 8 1 2 Si-29 0.0 0.0 +58 8 1 2 Si-30 0.0 0.0 +59 8 1 2 Cr-50 0.0 0.0 +60 8 1 2 Cr-52 0.0 0.0 +61 8 1 2 Cr-53 0.0 0.0 +62 8 1 2 Cr-54 0.0 0.0 +21 8 2 1 H-1 0.0 0.0 +22 8 2 1 O-16 0.0 0.0 +23 8 2 1 B-10 0.0 0.0 +24 8 2 1 B-11 0.0 0.0 +25 8 2 1 Fe-54 0.0 0.0 +26 8 2 1 Fe-56 0.0 0.0 +27 8 2 1 Fe-57 0.0 0.0 +28 8 2 1 Fe-58 0.0 0.0 +29 8 2 1 Ni-58 0.0 0.0 +30 8 2 1 Ni-60 0.0 0.0 +31 8 2 1 Ni-61 0.0 0.0 +32 8 2 1 Ni-62 0.0 0.0 +33 8 2 1 Ni-64 0.0 0.0 +34 8 2 1 Mn-55 0.0 0.0 +35 8 2 1 Si-28 0.0 0.0 +36 8 2 1 Si-29 0.0 0.0 +37 8 2 1 Si-30 0.0 0.0 +38 8 2 1 Cr-50 0.0 0.0 +39 8 2 1 Cr-52 0.0 0.0 +40 8 2 1 Cr-53 0.0 0.0 +41 8 2 1 Cr-54 0.0 0.0 +0 8 2 2 H-1 0.0 0.0 +1 8 2 2 O-16 0.0 0.0 +2 8 2 2 B-10 0.0 0.0 +3 8 2 2 B-11 0.0 0.0 +4 8 2 2 Fe-54 0.0 0.0 +5 8 2 2 Fe-56 0.0 0.0 +6 8 2 2 Fe-57 0.0 0.0 +7 8 2 2 Fe-58 0.0 0.0 +8 8 2 2 Ni-58 0.0 0.0 +9 8 2 2 Ni-60 0.0 0.0 +10 8 2 2 Ni-61 0.0 0.0 +11 8 2 2 Ni-62 0.0 0.0 +12 8 2 2 Ni-64 0.0 0.0 +13 8 2 2 Mn-55 0.0 0.0 +14 8 2 2 Si-28 0.0 0.0 +15 8 2 2 Si-29 0.0 0.0 +16 8 2 2 Si-30 0.0 0.0 +17 8 2 2 Cr-50 0.0 0.0 +18 8 2 2 Cr-52 0.0 0.0 +19 8 2 2 Cr-53 0.0 0.0 +20 8 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. +21 8 1 H-1 0.0 0.0 +22 8 1 O-16 0.0 0.0 +23 8 1 B-10 0.0 0.0 +24 8 1 B-11 0.0 0.0 +25 8 1 Fe-54 0.0 0.0 +26 8 1 Fe-56 0.0 0.0 +27 8 1 Fe-57 0.0 0.0 +28 8 1 Fe-58 0.0 0.0 +29 8 1 Ni-58 0.0 0.0 +30 8 1 Ni-60 0.0 0.0 +31 8 1 Ni-61 0.0 0.0 +32 8 1 Ni-62 0.0 0.0 +33 8 1 Ni-64 0.0 0.0 +34 8 1 Mn-55 0.0 0.0 +35 8 1 Si-28 0.0 0.0 +36 8 1 Si-29 0.0 0.0 +37 8 1 Si-30 0.0 0.0 +38 8 1 Cr-50 0.0 0.0 +39 8 1 Cr-52 0.0 0.0 +40 8 1 Cr-53 0.0 0.0 +41 8 1 Cr-54 0.0 0.0 +0 8 2 H-1 0.0 0.0 +1 8 2 O-16 0.0 0.0 +2 8 2 B-10 0.0 0.0 +3 8 2 B-11 0.0 0.0 +4 8 2 Fe-54 0.0 0.0 +5 8 2 Fe-56 0.0 0.0 +6 8 2 Fe-57 0.0 0.0 +7 8 2 Fe-58 0.0 0.0 +8 8 2 Ni-58 0.0 0.0 +9 8 2 Ni-60 0.0 0.0 +10 8 2 Ni-61 0.0 0.0 +11 8 2 Ni-62 0.0 0.0 +12 8 2 Ni-64 0.0 0.0 +13 8 2 Mn-55 0.0 0.0 +14 8 2 Si-28 0.0 0.0 +15 8 2 Si-29 0.0 0.0 +16 8 2 Si-30 0.0 0.0 +17 8 2 Cr-50 0.0 0.0 +18 8 2 Cr-52 0.0 0.0 +19 8 2 Cr-53 0.0 0.0 +20 8 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. 21 9 1 H-1 0.150655 0.480993 22 9 1 O-16 0.116221 0.114089 23 9 1 B-10 0.000000 0.000000 @@ -1411,48 +1411,48 @@ 18 9 2 Cr-52 0.000000 0.000000 19 9 2 Cr-53 0.000000 0.000000 20 9 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. -21 9 1 H-1 0 0 -22 9 1 O-16 0 0 -23 9 1 B-10 0 0 -24 9 1 B-11 0 0 -25 9 1 Fe-54 0 0 -26 9 1 Fe-56 0 0 -27 9 1 Fe-57 0 0 -28 9 1 Fe-58 0 0 -29 9 1 Ni-58 0 0 -30 9 1 Ni-60 0 0 -31 9 1 Ni-61 0 0 -32 9 1 Ni-62 0 0 -33 9 1 Ni-64 0 0 -34 9 1 Mn-55 0 0 -35 9 1 Si-28 0 0 -36 9 1 Si-29 0 0 -37 9 1 Si-30 0 0 -38 9 1 Cr-50 0 0 -39 9 1 Cr-52 0 0 -40 9 1 Cr-53 0 0 -41 9 1 Cr-54 0 0 -0 9 2 H-1 0 0 -1 9 2 O-16 0 0 -2 9 2 B-10 0 0 -3 9 2 B-11 0 0 -4 9 2 Fe-54 0 0 -5 9 2 Fe-56 0 0 -6 9 2 Fe-57 0 0 -7 9 2 Fe-58 0 0 -8 9 2 Ni-58 0 0 -9 9 2 Ni-60 0 0 -10 9 2 Ni-61 0 0 -11 9 2 Ni-62 0 0 -12 9 2 Ni-64 0 0 -13 9 2 Mn-55 0 0 -14 9 2 Si-28 0 0 -15 9 2 Si-29 0 0 -16 9 2 Si-30 0 0 -17 9 2 Cr-50 0 0 -18 9 2 Cr-52 0 0 -19 9 2 Cr-53 0 0 -20 9 2 Cr-54 0 0 material group in group out nuclide mean std. dev. +21 9 1 H-1 0.0 0.0 +22 9 1 O-16 0.0 0.0 +23 9 1 B-10 0.0 0.0 +24 9 1 B-11 0.0 0.0 +25 9 1 Fe-54 0.0 0.0 +26 9 1 Fe-56 0.0 0.0 +27 9 1 Fe-57 0.0 0.0 +28 9 1 Fe-58 0.0 0.0 +29 9 1 Ni-58 0.0 0.0 +30 9 1 Ni-60 0.0 0.0 +31 9 1 Ni-61 0.0 0.0 +32 9 1 Ni-62 0.0 0.0 +33 9 1 Ni-64 0.0 0.0 +34 9 1 Mn-55 0.0 0.0 +35 9 1 Si-28 0.0 0.0 +36 9 1 Si-29 0.0 0.0 +37 9 1 Si-30 0.0 0.0 +38 9 1 Cr-50 0.0 0.0 +39 9 1 Cr-52 0.0 0.0 +40 9 1 Cr-53 0.0 0.0 +41 9 1 Cr-54 0.0 0.0 +0 9 2 H-1 0.0 0.0 +1 9 2 O-16 0.0 0.0 +2 9 2 B-10 0.0 0.0 +3 9 2 B-11 0.0 0.0 +4 9 2 Fe-54 0.0 0.0 +5 9 2 Fe-56 0.0 0.0 +6 9 2 Fe-57 0.0 0.0 +7 9 2 Fe-58 0.0 0.0 +8 9 2 Ni-58 0.0 0.0 +9 9 2 Ni-60 0.0 0.0 +10 9 2 Ni-61 0.0 0.0 +11 9 2 Ni-62 0.0 0.0 +12 9 2 Ni-64 0.0 0.0 +13 9 2 Mn-55 0.0 0.0 +14 9 2 Si-28 0.0 0.0 +15 9 2 Si-29 0.0 0.0 +16 9 2 Si-30 0.0 0.0 +17 9 2 Cr-50 0.0 0.0 +18 9 2 Cr-52 0.0 0.0 +19 9 2 Cr-53 0.0 0.0 +20 9 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. 63 9 1 1 H-1 0.150655 0.480993 64 9 1 1 O-16 0.116221 0.114089 65 9 1 1 B-10 0.000000 0.000000 @@ -1537,48 +1537,48 @@ 18 9 2 2 Cr-52 0.000000 0.000000 19 9 2 2 Cr-53 0.000000 0.000000 20 9 2 2 Cr-54 0.000000 0.000000 material group out nuclide mean std. dev. -21 9 1 H-1 0 0 -22 9 1 O-16 0 0 -23 9 1 B-10 0 0 -24 9 1 B-11 0 0 -25 9 1 Fe-54 0 0 -26 9 1 Fe-56 0 0 -27 9 1 Fe-57 0 0 -28 9 1 Fe-58 0 0 -29 9 1 Ni-58 0 0 -30 9 1 Ni-60 0 0 -31 9 1 Ni-61 0 0 -32 9 1 Ni-62 0 0 -33 9 1 Ni-64 0 0 -34 9 1 Mn-55 0 0 -35 9 1 Si-28 0 0 -36 9 1 Si-29 0 0 -37 9 1 Si-30 0 0 -38 9 1 Cr-50 0 0 -39 9 1 Cr-52 0 0 -40 9 1 Cr-53 0 0 -41 9 1 Cr-54 0 0 -0 9 2 H-1 0 0 -1 9 2 O-16 0 0 -2 9 2 B-10 0 0 -3 9 2 B-11 0 0 -4 9 2 Fe-54 0 0 -5 9 2 Fe-56 0 0 -6 9 2 Fe-57 0 0 -7 9 2 Fe-58 0 0 -8 9 2 Ni-58 0 0 -9 9 2 Ni-60 0 0 -10 9 2 Ni-61 0 0 -11 9 2 Ni-62 0 0 -12 9 2 Ni-64 0 0 -13 9 2 Mn-55 0 0 -14 9 2 Si-28 0 0 -15 9 2 Si-29 0 0 -16 9 2 Si-30 0 0 -17 9 2 Cr-50 0 0 -18 9 2 Cr-52 0 0 -19 9 2 Cr-53 0 0 -20 9 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 9 1 H-1 0.0 0.0 +22 9 1 O-16 0.0 0.0 +23 9 1 B-10 0.0 0.0 +24 9 1 B-11 0.0 0.0 +25 9 1 Fe-54 0.0 0.0 +26 9 1 Fe-56 0.0 0.0 +27 9 1 Fe-57 0.0 0.0 +28 9 1 Fe-58 0.0 0.0 +29 9 1 Ni-58 0.0 0.0 +30 9 1 Ni-60 0.0 0.0 +31 9 1 Ni-61 0.0 0.0 +32 9 1 Ni-62 0.0 0.0 +33 9 1 Ni-64 0.0 0.0 +34 9 1 Mn-55 0.0 0.0 +35 9 1 Si-28 0.0 0.0 +36 9 1 Si-29 0.0 0.0 +37 9 1 Si-30 0.0 0.0 +38 9 1 Cr-50 0.0 0.0 +39 9 1 Cr-52 0.0 0.0 +40 9 1 Cr-53 0.0 0.0 +41 9 1 Cr-54 0.0 0.0 +0 9 2 H-1 0.0 0.0 +1 9 2 O-16 0.0 0.0 +2 9 2 B-10 0.0 0.0 +3 9 2 B-11 0.0 0.0 +4 9 2 Fe-54 0.0 0.0 +5 9 2 Fe-56 0.0 0.0 +6 9 2 Fe-57 0.0 0.0 +7 9 2 Fe-58 0.0 0.0 +8 9 2 Ni-58 0.0 0.0 +9 9 2 Ni-60 0.0 0.0 +10 9 2 Ni-61 0.0 0.0 +11 9 2 Ni-62 0.0 0.0 +12 9 2 Ni-64 0.0 0.0 +13 9 2 Mn-55 0.0 0.0 +14 9 2 Si-28 0.0 0.0 +15 9 2 Si-29 0.0 0.0 +16 9 2 Si-30 0.0 0.0 +17 9 2 Cr-50 0.0 0.0 +18 9 2 Cr-52 0.0 0.0 +19 9 2 Cr-53 0.0 0.0 +20 9 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. 21 10 1 H-1 0.123944 0.541390 22 10 1 O-16 0.000000 0.000000 23 10 1 B-10 0.000000 0.000000 @@ -1621,48 +1621,48 @@ 18 10 2 Cr-52 0.000000 0.000000 19 10 2 Cr-53 0.000000 0.000000 20 10 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. -21 10 1 H-1 0 0 -22 10 1 O-16 0 0 -23 10 1 B-10 0 0 -24 10 1 B-11 0 0 -25 10 1 Fe-54 0 0 -26 10 1 Fe-56 0 0 -27 10 1 Fe-57 0 0 -28 10 1 Fe-58 0 0 -29 10 1 Ni-58 0 0 -30 10 1 Ni-60 0 0 -31 10 1 Ni-61 0 0 -32 10 1 Ni-62 0 0 -33 10 1 Ni-64 0 0 -34 10 1 Mn-55 0 0 -35 10 1 Si-28 0 0 -36 10 1 Si-29 0 0 -37 10 1 Si-30 0 0 -38 10 1 Cr-50 0 0 -39 10 1 Cr-52 0 0 -40 10 1 Cr-53 0 0 -41 10 1 Cr-54 0 0 -0 10 2 H-1 0 0 -1 10 2 O-16 0 0 -2 10 2 B-10 0 0 -3 10 2 B-11 0 0 -4 10 2 Fe-54 0 0 -5 10 2 Fe-56 0 0 -6 10 2 Fe-57 0 0 -7 10 2 Fe-58 0 0 -8 10 2 Ni-58 0 0 -9 10 2 Ni-60 0 0 -10 10 2 Ni-61 0 0 -11 10 2 Ni-62 0 0 -12 10 2 Ni-64 0 0 -13 10 2 Mn-55 0 0 -14 10 2 Si-28 0 0 -15 10 2 Si-29 0 0 -16 10 2 Si-30 0 0 -17 10 2 Cr-50 0 0 -18 10 2 Cr-52 0 0 -19 10 2 Cr-53 0 0 -20 10 2 Cr-54 0 0 material group in group out nuclide mean std. dev. +21 10 1 H-1 0.0 0.0 +22 10 1 O-16 0.0 0.0 +23 10 1 B-10 0.0 0.0 +24 10 1 B-11 0.0 0.0 +25 10 1 Fe-54 0.0 0.0 +26 10 1 Fe-56 0.0 0.0 +27 10 1 Fe-57 0.0 0.0 +28 10 1 Fe-58 0.0 0.0 +29 10 1 Ni-58 0.0 0.0 +30 10 1 Ni-60 0.0 0.0 +31 10 1 Ni-61 0.0 0.0 +32 10 1 Ni-62 0.0 0.0 +33 10 1 Ni-64 0.0 0.0 +34 10 1 Mn-55 0.0 0.0 +35 10 1 Si-28 0.0 0.0 +36 10 1 Si-29 0.0 0.0 +37 10 1 Si-30 0.0 0.0 +38 10 1 Cr-50 0.0 0.0 +39 10 1 Cr-52 0.0 0.0 +40 10 1 Cr-53 0.0 0.0 +41 10 1 Cr-54 0.0 0.0 +0 10 2 H-1 0.0 0.0 +1 10 2 O-16 0.0 0.0 +2 10 2 B-10 0.0 0.0 +3 10 2 B-11 0.0 0.0 +4 10 2 Fe-54 0.0 0.0 +5 10 2 Fe-56 0.0 0.0 +6 10 2 Fe-57 0.0 0.0 +7 10 2 Fe-58 0.0 0.0 +8 10 2 Ni-58 0.0 0.0 +9 10 2 Ni-60 0.0 0.0 +10 10 2 Ni-61 0.0 0.0 +11 10 2 Ni-62 0.0 0.0 +12 10 2 Ni-64 0.0 0.0 +13 10 2 Mn-55 0.0 0.0 +14 10 2 Si-28 0.0 0.0 +15 10 2 Si-29 0.0 0.0 +16 10 2 Si-30 0.0 0.0 +17 10 2 Cr-50 0.0 0.0 +18 10 2 Cr-52 0.0 0.0 +19 10 2 Cr-53 0.0 0.0 +20 10 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. 63 10 1 1 H-1 0.123944 0.541390 64 10 1 1 O-16 0.000000 0.000000 65 10 1 1 B-10 0.000000 0.000000 @@ -1747,48 +1747,48 @@ 18 10 2 2 Cr-52 0.000000 0.000000 19 10 2 2 Cr-53 0.000000 0.000000 20 10 2 2 Cr-54 0.000000 0.000000 material group out nuclide mean std. dev. -21 10 1 H-1 0 0 -22 10 1 O-16 0 0 -23 10 1 B-10 0 0 -24 10 1 B-11 0 0 -25 10 1 Fe-54 0 0 -26 10 1 Fe-56 0 0 -27 10 1 Fe-57 0 0 -28 10 1 Fe-58 0 0 -29 10 1 Ni-58 0 0 -30 10 1 Ni-60 0 0 -31 10 1 Ni-61 0 0 -32 10 1 Ni-62 0 0 -33 10 1 Ni-64 0 0 -34 10 1 Mn-55 0 0 -35 10 1 Si-28 0 0 -36 10 1 Si-29 0 0 -37 10 1 Si-30 0 0 -38 10 1 Cr-50 0 0 -39 10 1 Cr-52 0 0 -40 10 1 Cr-53 0 0 -41 10 1 Cr-54 0 0 -0 10 2 H-1 0 0 -1 10 2 O-16 0 0 -2 10 2 B-10 0 0 -3 10 2 B-11 0 0 -4 10 2 Fe-54 0 0 -5 10 2 Fe-56 0 0 -6 10 2 Fe-57 0 0 -7 10 2 Fe-58 0 0 -8 10 2 Ni-58 0 0 -9 10 2 Ni-60 0 0 -10 10 2 Ni-61 0 0 -11 10 2 Ni-62 0 0 -12 10 2 Ni-64 0 0 -13 10 2 Mn-55 0 0 -14 10 2 Si-28 0 0 -15 10 2 Si-29 0 0 -16 10 2 Si-30 0 0 -17 10 2 Cr-50 0 0 -18 10 2 Cr-52 0 0 -19 10 2 Cr-53 0 0 -20 10 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 10 1 H-1 0.0 0.0 +22 10 1 O-16 0.0 0.0 +23 10 1 B-10 0.0 0.0 +24 10 1 B-11 0.0 0.0 +25 10 1 Fe-54 0.0 0.0 +26 10 1 Fe-56 0.0 0.0 +27 10 1 Fe-57 0.0 0.0 +28 10 1 Fe-58 0.0 0.0 +29 10 1 Ni-58 0.0 0.0 +30 10 1 Ni-60 0.0 0.0 +31 10 1 Ni-61 0.0 0.0 +32 10 1 Ni-62 0.0 0.0 +33 10 1 Ni-64 0.0 0.0 +34 10 1 Mn-55 0.0 0.0 +35 10 1 Si-28 0.0 0.0 +36 10 1 Si-29 0.0 0.0 +37 10 1 Si-30 0.0 0.0 +38 10 1 Cr-50 0.0 0.0 +39 10 1 Cr-52 0.0 0.0 +40 10 1 Cr-53 0.0 0.0 +41 10 1 Cr-54 0.0 0.0 +0 10 2 H-1 0.0 0.0 +1 10 2 O-16 0.0 0.0 +2 10 2 B-10 0.0 0.0 +3 10 2 B-11 0.0 0.0 +4 10 2 Fe-54 0.0 0.0 +5 10 2 Fe-56 0.0 0.0 +6 10 2 Fe-57 0.0 0.0 +7 10 2 Fe-58 0.0 0.0 +8 10 2 Ni-58 0.0 0.0 +9 10 2 Ni-60 0.0 0.0 +10 10 2 Ni-61 0.0 0.0 +11 10 2 Ni-62 0.0 0.0 +12 10 2 Ni-64 0.0 0.0 +13 10 2 Mn-55 0.0 0.0 +14 10 2 Si-28 0.0 0.0 +15 10 2 Si-29 0.0 0.0 +16 10 2 Si-30 0.0 0.0 +17 10 2 Cr-50 0.0 0.0 +18 10 2 Cr-52 0.0 0.0 +19 10 2 Cr-53 0.0 0.0 +20 10 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. 9 11 1 H-1 0.131470 0.476035 10 11 1 O-16 0.028684 0.043000 11 11 1 B-10 0.000000 0.000000 @@ -1807,24 +1807,24 @@ 6 11 2 Zr-92 0.084226 0.103161 7 11 2 Zr-94 0.092039 0.125985 8 11 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -9 11 1 H-1 0 0 -10 11 1 O-16 0 0 -11 11 1 B-10 0 0 -12 11 1 B-11 0 0 -13 11 1 Zr-90 0 0 -14 11 1 Zr-91 0 0 -15 11 1 Zr-92 0 0 -16 11 1 Zr-94 0 0 -17 11 1 Zr-96 0 0 -0 11 2 H-1 0 0 -1 11 2 O-16 0 0 -2 11 2 B-10 0 0 -3 11 2 B-11 0 0 -4 11 2 Zr-90 0 0 -5 11 2 Zr-91 0 0 -6 11 2 Zr-92 0 0 -7 11 2 Zr-94 0 0 -8 11 2 Zr-96 0 0 material group in group out nuclide mean std. dev. +9 11 1 H-1 0.0 0.0 +10 11 1 O-16 0.0 0.0 +11 11 1 B-10 0.0 0.0 +12 11 1 B-11 0.0 0.0 +13 11 1 Zr-90 0.0 0.0 +14 11 1 Zr-91 0.0 0.0 +15 11 1 Zr-92 0.0 0.0 +16 11 1 Zr-94 0.0 0.0 +17 11 1 Zr-96 0.0 0.0 +0 11 2 H-1 0.0 0.0 +1 11 2 O-16 0.0 0.0 +2 11 2 B-10 0.0 0.0 +3 11 2 B-11 0.0 0.0 +4 11 2 Zr-90 0.0 0.0 +5 11 2 Zr-91 0.0 0.0 +6 11 2 Zr-92 0.0 0.0 +7 11 2 Zr-94 0.0 0.0 +8 11 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. 27 11 1 1 H-1 0.099594 0.442578 28 11 1 1 O-16 0.028684 0.043000 29 11 1 1 B-10 0.000000 0.000000 @@ -1861,24 +1861,24 @@ 6 11 2 2 Zr-92 0.084226 0.103161 7 11 2 2 Zr-94 0.092039 0.125985 8 11 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. -9 11 1 H-1 0 0 -10 11 1 O-16 0 0 -11 11 1 B-10 0 0 -12 11 1 B-11 0 0 -13 11 1 Zr-90 0 0 -14 11 1 Zr-91 0 0 -15 11 1 Zr-92 0 0 -16 11 1 Zr-94 0 0 -17 11 1 Zr-96 0 0 -0 11 2 H-1 0 0 -1 11 2 O-16 0 0 -2 11 2 B-10 0 0 -3 11 2 B-11 0 0 -4 11 2 Zr-90 0 0 -5 11 2 Zr-91 0 0 -6 11 2 Zr-92 0 0 -7 11 2 Zr-94 0 0 -8 11 2 Zr-96 0 0 material group in nuclide mean std. dev. +9 11 1 H-1 0.0 0.0 +10 11 1 O-16 0.0 0.0 +11 11 1 B-10 0.0 0.0 +12 11 1 B-11 0.0 0.0 +13 11 1 Zr-90 0.0 0.0 +14 11 1 Zr-91 0.0 0.0 +15 11 1 Zr-92 0.0 0.0 +16 11 1 Zr-94 0.0 0.0 +17 11 1 Zr-96 0.0 0.0 +0 11 2 H-1 0.0 0.0 +1 11 2 O-16 0.0 0.0 +2 11 2 B-10 0.0 0.0 +3 11 2 B-11 0.0 0.0 +4 11 2 Zr-90 0.0 0.0 +5 11 2 Zr-91 0.0 0.0 +6 11 2 Zr-92 0.0 0.0 +7 11 2 Zr-94 0.0 0.0 +8 11 2 Zr-96 0.0 0.0 material group in nuclide mean std. dev. 9 12 1 H-1 0.098944 0.178543 10 12 1 O-16 0.013270 0.020403 11 12 1 B-10 0.000000 0.000000 @@ -1897,24 +1897,24 @@ 6 12 2 Zr-92 0.000000 0.000000 7 12 2 Zr-94 0.000000 0.000000 8 12 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -9 12 1 H-1 0 0 -10 12 1 O-16 0 0 -11 12 1 B-10 0 0 -12 12 1 B-11 0 0 -13 12 1 Zr-90 0 0 -14 12 1 Zr-91 0 0 -15 12 1 Zr-92 0 0 -16 12 1 Zr-94 0 0 -17 12 1 Zr-96 0 0 -0 12 2 H-1 0 0 -1 12 2 O-16 0 0 -2 12 2 B-10 0 0 -3 12 2 B-11 0 0 -4 12 2 Zr-90 0 0 -5 12 2 Zr-91 0 0 -6 12 2 Zr-92 0 0 -7 12 2 Zr-94 0 0 -8 12 2 Zr-96 0 0 material group in group out nuclide mean std. dev. +9 12 1 H-1 0.0 0.0 +10 12 1 O-16 0.0 0.0 +11 12 1 B-10 0.0 0.0 +12 12 1 B-11 0.0 0.0 +13 12 1 Zr-90 0.0 0.0 +14 12 1 Zr-91 0.0 0.0 +15 12 1 Zr-92 0.0 0.0 +16 12 1 Zr-94 0.0 0.0 +17 12 1 Zr-96 0.0 0.0 +0 12 2 H-1 0.0 0.0 +1 12 2 O-16 0.0 0.0 +2 12 2 B-10 0.0 0.0 +3 12 2 B-11 0.0 0.0 +4 12 2 Zr-90 0.0 0.0 +5 12 2 Zr-91 0.0 0.0 +6 12 2 Zr-92 0.0 0.0 +7 12 2 Zr-94 0.0 0.0 +8 12 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. 27 12 1 1 H-1 0.071704 0.167588 28 12 1 1 O-16 0.013270 0.020403 29 12 1 1 B-10 0.000000 0.000000 @@ -1951,21 +1951,21 @@ 6 12 2 2 Zr-92 0.000000 0.000000 7 12 2 2 Zr-94 0.000000 0.000000 8 12 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. -9 12 1 H-1 0 0 -10 12 1 O-16 0 0 -11 12 1 B-10 0 0 -12 12 1 B-11 0 0 -13 12 1 Zr-90 0 0 -14 12 1 Zr-91 0 0 -15 12 1 Zr-92 0 0 -16 12 1 Zr-94 0 0 -17 12 1 Zr-96 0 0 -0 12 2 H-1 0 0 -1 12 2 O-16 0 0 -2 12 2 B-10 0 0 -3 12 2 B-11 0 0 -4 12 2 Zr-90 0 0 -5 12 2 Zr-91 0 0 -6 12 2 Zr-92 0 0 -7 12 2 Zr-94 0 0 -8 12 2 Zr-96 0 0 \ No newline at end of file +9 12 1 H-1 0.0 0.0 +10 12 1 O-16 0.0 0.0 +11 12 1 B-10 0.0 0.0 +12 12 1 B-11 0.0 0.0 +13 12 1 Zr-90 0.0 0.0 +14 12 1 Zr-91 0.0 0.0 +15 12 1 Zr-92 0.0 0.0 +16 12 1 Zr-94 0.0 0.0 +17 12 1 Zr-96 0.0 0.0 +0 12 2 H-1 0.0 0.0 +1 12 2 O-16 0.0 0.0 +2 12 2 B-10 0.0 0.0 +3 12 2 B-11 0.0 0.0 +4 12 2 Zr-90 0.0 0.0 +5 12 2 Zr-91 0.0 0.0 +6 12 2 Zr-92 0.0 0.0 +7 12 2 Zr-94 0.0 0.0 +8 12 2 Zr-96 0.0 0.0 \ No newline at end of file From bc4cf8026783dd96f5e28b9bb1185515a8d7645f Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 19 Mar 2016 12:23:56 -0400 Subject: [PATCH 386/650] Changes to comments in scattering tallying --- src/tally.F90 | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/tally.F90 b/src/tally.F90 index 4d57f44ca8..6aabed39f8 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -949,7 +949,7 @@ contains if (p % event /= EVENT_SCATTER) then if (score_bin == SCORE_SCATTER_PN) then i = i + t % moment_order(i) - else + else if (score_bin == SCORE_SCATTER_YN) then i = i + (t % moment_order(i) + 1)**2 - 1 end if cycle SCORE_LOOP @@ -967,15 +967,16 @@ contains end if else - ! Note SCORE_SCATTER_N not available for tracklength/collision. + ! Note SCORE_SCATTER_*N not available for tracklength/collision. if (i_nuclide > 0) then - score = nucxs % get_xs('scatter',p_g,UVW=p_uvw) * & - atom_density * flux / & + score = atom_density * flux * & + nucxs % get_xs('scatter',p_g,UVW=p_uvw) / & nucxs % get_xs('mult',p_g,UVW=p_uvw) else - ! Get the scattering x/s (stored in % elastic) and take away + ! Get the scattering x/s and take away ! the multiplication baked in to sigS - score = material_xs % elastic * flux / & + score = flux * & + matxs % get_xs('scatter',p_g,UVW=p_uvw) / & matxs % get_xs('mult',p_g,UVW=p_uvw) end if end if @@ -1006,14 +1007,13 @@ contains end if else - ! Note SCORE_NU_SCATTER_* not available for tracklength/collision. + ! Note SCORE_NU_SCATTER_*N not available for tracklength/collision. if (i_nuclide > 0) then score = nucxs % get_xs('scatter',p_g,UVW=p_uvw) * & atom_density * flux else - ! Get the scattering x/s (stored in % elastic) and take away - ! the multiplication baked in to sigS - score = material_xs % elastic * flux + ! Get the scattering x/s, which includes multiplication + score = matxs % get_xs('scatter',p_g,UVW=p_uvw) * flux end if end if From b742275ca3b2a394457d2ae03039741533491eb4 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 19 Mar 2016 13:52:10 -0400 Subject: [PATCH 387/650] Fixed scattering tallying issue. Next is some minor optimizations, then calling it good --- src/mgxs_header.F90 | 91 +++++++++++++++++++++++++++++++++++-- src/tally.F90 | 106 ++++++++++++++++++-------------------------- 2 files changed, 129 insertions(+), 68 deletions(-) diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index 908f19c8b1..75ff3e46ab 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -1140,8 +1140,13 @@ module mgxs_header end if case('scatter') if (present(gout)) then - xs = this % scatter % scattxs(gin) * & - this % scatter % energy(gin) % data(gout) + if (gout < this % scatter % gmin(gin) .or. & + gout > this % scatter % gmax(gin)) then + xs = ZERO + else + xs = this % scatter % scattxs(gin) * & + this % scatter % energy(gin) % data(gout) + end if else xs = this % scatter % scattxs(gin) end if @@ -1159,6 +1164,22 @@ module mgxs_header this % scatter % energy(gin) % data) xs = xs / this % scatter % scattxs(gin) end if + case('scatter/mult') + if (present(gout)) then + if (gout < this % scatter % gmin(gin) .or. & + gout > this % scatter % gmax(gin)) then + xs = ZERO + else + xs = this % scatter % scattxs(gin) * & + this % scatter % energy(gin) % data(gout) / & + this % scatter % mult(gin) % data(gout) + end if + else + xs = this % scatter % scattxs(gin) * this % scatter % scattxs(gin) / & + (dot_product(this % scatter % mult(gin) % data, & + this % scatter % scattxs(gin) * & + this % scatter % energy(gin) % data)) + end if case('f_mu', 'f_mu/mult') if (present(gout) .and. present(mu)) then if (gout < this % scatter % gmin(gin) .or. & @@ -1177,6 +1198,26 @@ module mgxs_header ! user of this code wants the complete 1-outgoing group distribution ! which Im not sure what they would do with that. end if + case('scatter*f_mu/mult','scatter*f_mu') + if (present(gout)) then + if (gout < this % scatter % gmin(gin) .or. & + gout > this % scatter % gmax(gin)) then + xs = ZERO + else + xs = this % scatter % scattxs(gin) * & + this % scatter % energy(gin) % data(gout) * & + this % scatter % calc_f(gin, gout, mu) + if (xstype == 'scatter*f_mu/mult') then + xs = xs / this % scatter % mult(gin) % data(gout) + end if + end if + else + xs = ZERO + ! TODO (Not likely needed) + ! (asking for f_mu without asking for a group or mu would mean the + ! user of this code wants the complete 1-outgoing group distribution + ! which Im not sure what they would do with that. + end if case default xs = ZERO end select @@ -1224,8 +1265,13 @@ module mgxs_header end if case('scatter') if (present(gout)) then - xs = this % scatter(iazi,ipol) % obj % scattxs(gin) * & - this % scatter(iazi,ipol) % obj % energy(gin) % data(gout) + if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & + gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then + xs = ZERO + else + xs = this % scatter(iazi,ipol) % obj % scattxs(gin) * & + this % scatter(iazi,ipol) % obj % energy(gin) % data(gout) + end if else xs = this % scatter(iazi,ipol) % obj % scattxs(gin) end if @@ -1243,6 +1289,23 @@ module mgxs_header this % scatter(iazi,ipol) % obj % energy(gin) % data) xs = xs / this % scatter(iazi,ipol) % obj % scattxs(gin) end if + case('scatter/mult') + if (present(gout)) then + if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & + gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then + xs = ZERO + else + xs = this % scatter(iazi,ipol) % obj % scattxs(gin) * & + this % scatter(iazi,ipol) % obj % energy(gin) % data(gout) / & + this % scatter(iazi,ipol) % obj % mult(gin) % data(gout) + end if + else + xs = this % scatter(iazi,ipol) % obj % scattxs(gin) * & + this % scatter(iazi,ipol) % obj % scattxs(gin) / & + (dot_product(this % scatter(iazi,ipol) % obj % mult(gin) % data, & + this % scatter(iazi,ipol) % obj % scattxs(gin) * & + this % scatter(iazi,ipol) % obj % energy(gin) % data)) + end if case('f_mu', 'f_mu/mult') if (present(gout) .and. present(mu)) then if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & @@ -1262,6 +1325,26 @@ module mgxs_header ! user of this code wants the complete 1-outgoing group distribution ! which Im not sure what they would do with that. end if + case('scatter*f_mu/mult','scatter*f_mu') + if (present(gout)) then + if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & + gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then + xs = ZERO + else + xs = this % scatter(iazi,ipol) % obj % scattxs(gin) * & + this % scatter(iazi,ipol) % obj % energy(gin) % data(gout) + xs = xs * this % scatter(iazi,ipol) % obj % calc_f(gin, gout, mu) + if (xstype == 'scatter*f_mu/mult') then + xs = xs / this % scatter(iazi,ipol) % obj % mult(gin) % data(gout) + end if + end if + else + xs = ZERO + ! TODO (Not likely needed) + ! (asking for f_mu without asking for a group or mu would mean the + ! user of this code wants the complete 1-outgoing group distribution + ! which Im not sure what they would do with that. + end if case default xs = ZERO end select diff --git a/src/tally.F90 b/src/tally.F90 index 6aabed39f8..b0c71f6dc7 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -899,18 +899,13 @@ contains ! We need to account for the fact that some weight was already ! absorbed score = p % last_wgt + p % absorb_wgt - if (i_nuclide > 0) then - score = score * atom_density * & - nucxs % get_xs('total',p_g,UVW=p_uvw) / & - matxs % get_xs('total',p_g,UVW=p_uvw) - end if else score = p % last_wgt - if (i_nuclide > 0) then - score = score * atom_density * & - nucxs % get_xs('total',p_g,UVW=p_uvw) / & - matxs % get_xs('total',p_g,UVW=p_uvw) - end if + end if + if (i_nuclide > 0) then + score = score * atom_density * & + nucxs % get_xs('total',p_g,UVW=p_uvw) / & + matxs % get_xs('total',p_g,UVW=p_uvw) end if else @@ -960,24 +955,25 @@ contains ! reaction rate score = p % last_wgt + ! Since we transport based on material data, the angle selected + ! was not selected from the f(mu) for the nuclide. Therefore + ! adjust the score by the actual probability for that nuclide. if (i_nuclide > 0) then score = score * atom_density * & - nucxs % get_xs('f_mu',p % last_g,p % g,UVW=p_uvw,MU=p % mu) / & - matxs % get_xs('f_mu',p % last_g,p % g,UVW=p_uvw,MU=p % mu) + nucxs % get_xs('scatter*f_mu/mult',p % last_g,p % g,UVW=p_uvw,MU=p % mu) / & + matxs % get_xs('scatter*f_mu/mult',p % last_g,p % g,UVW=p_uvw,MU=p % mu) end if else ! Note SCORE_SCATTER_*N not available for tracklength/collision. if (i_nuclide > 0) then score = atom_density * flux * & - nucxs % get_xs('scatter',p_g,UVW=p_uvw) / & - nucxs % get_xs('mult',p_g,UVW=p_uvw) + nucxs % get_xs('scatter/mult',p_g,UVW=p_uvw) else ! Get the scattering x/s and take away ! the multiplication baked in to sigS score = flux * & - matxs % get_xs('scatter',p_g,UVW=p_uvw) / & - matxs % get_xs('mult',p_g,UVW=p_uvw) + matxs % get_xs('scatter/mult',p_g,UVW=p_uvw) end if end if @@ -1000,10 +996,13 @@ contains ! neutrons exiting a reaction with neutrons in the exit channel score = p % wgt + ! Since we transport based on material data, the angle selected + ! was not selected from the f(mu) for the nuclide. Therefore + ! adjust the score by the actual probability for that nuclide. if (i_nuclide > 0) then score = score * atom_density * & - nucxs % get_xs('f_mu',p % last_g,p % g,UVW=p_uvw,MU=p % mu) / & - matxs % get_xs('f_mu',p % last_g,p % g,UVW=p_uvw,MU=p % mu) + nucxs % get_xs('scatter*f_mu',p % last_g,p % g,UVW=p_uvw,MU=p % mu) / & + matxs % get_xs('scatter*f_mu',p % last_g,p % g,UVW=p_uvw,MU=p % mu) end if else @@ -1038,24 +1037,18 @@ contains ! No absorption events actually occur if survival biasing is on -- ! just use weight absorbed in survival biasing score = p % absorb_wgt - if (i_nuclide > 0) then - score = score * atom_density * & - nucxs % get_xs('absorption',p_g,UVW=p_uvw) / & - matxs % get_xs('absorption',p_g,UVW=p_uvw) - end if else ! Skip any event where the particle wasn't absorbed if (p % event == EVENT_SCATTER) cycle SCORE_LOOP ! All fission and absorption events will contribute here, so we ! can just use the particle's weight entering the collision score = p % last_wgt - if (i_nuclide > 0) then - score = score * atom_density * & - nucxs % get_xs('absorption',p_g,UVW=p_uvw) / & - material_xs % absorption - end if end if - + if (i_nuclide > 0) then + score = score * atom_density * & + nucxs % get_xs('absorption',p_g,UVW=p_uvw) / & + matxs % get_xs('absorption',p_g,UVW=p_uvw) + end if else if (i_nuclide > 0) then score = nucxs % get_xs('absorption',p_g,UVW=p_uvw) * & @@ -1072,32 +1065,24 @@ contains ! No fission events occur if survival biasing is on -- need to ! calculate fraction of absorptions that would have resulted in ! fission - if (i_nuclide > 0) then - score = p % absorb_wgt * atom_density * & - nucxs % get_xs('fission', p_g,UVW=p_uvw) / & - matxs % get_xs('absorption',p_g,UVW=p_uvw) - else - score = p % absorb_wgt * & - matxs % get_xs('fission', p_g,UVW=p_uvw) / & - matxs % get_xs('absorption',p_g,UVW=p_uvw) - end if + score = p % absorb_wgt else ! Skip any non-absorption events if (p % event == EVENT_SCATTER) cycle SCORE_LOOP ! All fission events will contribute, so again we can use ! particle's weight entering the collision as the estimate for the ! fission reaction rate - if (i_nuclide > 0) then - score = p % last_wgt * atom_density * & + score = p % last_wgt + end if + if (i_nuclide > 0) then + score = score * atom_density * & nucxs % get_xs('fission', p_g,UVW=p_uvw) / & matxs % get_xs('absorption',p_g,UVW=p_uvw) else - score = p % last_wgt * & + score = score * & matxs % get_xs('fission', p_g,UVW=p_uvw) / & matxs % get_xs('absorption',p_g,UVW=p_uvw) end if - end if - else if (i_nuclide > 0) then score = nucxs % get_xs('fission',p_g,UVW=p_uvw) * & @@ -1126,12 +1111,13 @@ contains ! No fission events occur if survival biasing is on -- need to ! calculate fraction of absorptions that would have resulted in ! nu-fission + score = p % absorb_wgt if (i_nuclide > 0) then - score = p % absorb_wgt * atom_density * & + score = score * atom_density * & nucxs % get_xs('nu_fission',p_g,UVW=p_uvw) / & matxs % get_xs('absorption',p_g,UVW=p_uvw) else - score = p % absorb_wgt * & + score = score * & matxs % get_xs('nu_fission',p_g,UVW=p_uvw) / & matxs % get_xs('absorption',p_g,UVW=p_uvw) end if @@ -1167,32 +1153,24 @@ contains ! No fission events occur if survival biasing is on -- need to ! calculate fraction of absorptions that would have resulted in ! fission - if (i_nuclide > 0) then - score = p % absorb_wgt * atom_density * & - nucxs % get_xs('kappa_fission',p_g,UVW=p_uvw) / & - matxs % get_xs('absorption', p_g,UVW=p_uvw) - else - score = p % absorb_wgt * & - matxs % get_xs('kappa_fission',p_g,UVW=p_uvw) / & - matxs % get_xs('absorption', p_g,UVW=p_uvw) - end if + score = p % absorb_wgt else ! Skip any non-absorption events if (p % event == EVENT_SCATTER) cycle SCORE_LOOP ! All fission events will contribute, so again we can use ! particle's weight entering the collision as the estimate for the ! fission reaction rate - if (i_nuclide > 0) then - score = p % last_wgt * & - nucxs % get_xs('kappa_fission',p_g,UVW=p_uvw) * & - atom_density / material_xs % absorption - else - score = p % last_wgt * & - matxs % get_xs('kappa_fission',p_g,UVW=p_uvw) / & - material_xs % absorption - end if + score = p % last_wgt + end if + if (i_nuclide > 0) then + score = score * atom_density * & + nucxs % get_xs('kappa_fission',p_g,UVW=p_uvw) / & + matxs % get_xs('absorption', p_g,UVW=p_uvw) + else + score = score * & + matxs % get_xs('kappa_fission',p_g,UVW=p_uvw) / & + matxs % get_xs('absorption', p_g,UVW=p_uvw) end if - else if (i_nuclide > 0) then score = flux * nucxs % get_xs('kappa_fission',p_g,UVW=p_uvw) * & From af8fbd3a1f8e4107813cf1280d0c1f7f10690f95 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 19 Mar 2016 14:00:32 -0400 Subject: [PATCH 388/650] Removed a few paths which werent needed in get_xs and ran check_source.py --- src/mgxs_data.F90 | 2 +- src/mgxs_header.F90 | 74 ++------------------------------------------- src/tally.F90 | 4 +-- 3 files changed, 6 insertions(+), 74 deletions(-) diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index def214d67e..04d76f18c8 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -71,7 +71,7 @@ contains get_kfiss = .true. end if if (tallies(i) % score_bins(l) == SCORE_FISSION .or. & - tallies(i) % score_bins(l) == SCORE_NU_FISSION) then + tallies(i) % score_bins(l) == SCORE_NU_FISSION) then get_fiss = .true. end if end do diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index 75ff3e46ab..5f8649292b 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -72,7 +72,7 @@ module mgxs_header integer, optional, intent(in) :: unit end subroutine mgxs_print_ - function mgxs_get_xs_(this,xstype,gin,gout,uvw,mu) result(xs) + pure function mgxs_get_xs_(this,xstype,gin,gout,uvw,mu) result(xs) import Mgxs class(Mgxs), intent(in) :: this character(*), intent(in) :: xstype ! Cross Section Type @@ -1150,20 +1150,6 @@ module mgxs_header else xs = this % scatter % scattxs(gin) end if - case('mult') - if (present(gout)) then - if (gout < this % scatter % gmin(gin) .or. & - gout > this % scatter % gmax(gin)) then - xs = ZERO - else - xs = this % scatter % mult(gin) % data(gout) - end if - else - xs = dot_product(this % scatter % mult(gin) % data, & - this % scatter % scattxs(gin) * & - this % scatter % energy(gin) % data) - xs = xs / this % scatter % scattxs(gin) - end if case('scatter/mult') if (present(gout)) then if (gout < this % scatter % gmin(gin) .or. & @@ -1175,29 +1161,10 @@ module mgxs_header this % scatter % mult(gin) % data(gout) end if else - xs = this % scatter % scattxs(gin) * this % scatter % scattxs(gin) / & + xs = this % scatter % scattxs(gin) / & (dot_product(this % scatter % mult(gin) % data, & - this % scatter % scattxs(gin) * & this % scatter % energy(gin) % data)) end if - case('f_mu', 'f_mu/mult') - if (present(gout) .and. present(mu)) then - if (gout < this % scatter % gmin(gin) .or. & - gout > this % scatter % gmax(gin)) then - xs = ZERO - else - xs = this % scatter % calc_f(gin, gout, mu) - if (xstype == 'f_mu/mult') then - xs = xs / this % scatter % mult(gin) % data(gout) - end if - end if - else - xs = ZERO - ! TODO (Not likely needed) - ! (asking for f_mu without asking for a group or mu would mean the - ! user of this code wants the complete 1-outgoing group distribution - ! which Im not sure what they would do with that. - end if case('scatter*f_mu/mult','scatter*f_mu') if (present(gout)) then if (gout < this % scatter % gmin(gin) .or. & @@ -1275,20 +1242,6 @@ module mgxs_header else xs = this % scatter(iazi,ipol) % obj % scattxs(gin) end if - case('mult') - if (present(gout)) then - if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & - gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then - xs = ZERO - else - xs = this % scatter(iazi,ipol) % obj % mult(gin) % data(gout) - end if - else - xs = dot_product(this % scatter(iazi,ipol) % obj % mult(gin) % data, & - this % scatter(iazi,ipol) % obj % scattxs(gin) * & - this % scatter(iazi,ipol) % obj % energy(gin) % data) - xs = xs / this % scatter(iazi,ipol) % obj % scattxs(gin) - end if case('scatter/mult') if (present(gout)) then if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & @@ -1300,31 +1253,10 @@ module mgxs_header this % scatter(iazi,ipol) % obj % mult(gin) % data(gout) end if else - xs = this % scatter(iazi,ipol) % obj % scattxs(gin) * & - this % scatter(iazi,ipol) % obj % scattxs(gin) / & + xs = this % scatter(iazi,ipol) % obj % scattxs(gin) / & (dot_product(this % scatter(iazi,ipol) % obj % mult(gin) % data, & - this % scatter(iazi,ipol) % obj % scattxs(gin) * & this % scatter(iazi,ipol) % obj % energy(gin) % data)) end if - case('f_mu', 'f_mu/mult') - if (present(gout) .and. present(mu)) then - if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & - gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then - xs = ZERO - else - xs = this % scatter(iazi,ipol) % obj % calc_f(gin, gout, mu) - if (xstype == 'f_mu/mult') then - xs = xs / & - this % scatter(iazi,ipol) % obj % mult(gin) % data(gout) - end if - end if - else - xs = ZERO - ! TODO (Not likely needed) - ! (asking for f_mu without asking for a group or mu would mean the - ! user of this code wants the complete 1-outgoing group distribution - ! which Im not sure what they would do with that. - end if case('scatter*f_mu/mult','scatter*f_mu') if (present(gout)) then if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & diff --git a/src/tally.F90 b/src/tally.F90 index b0c71f6dc7..553ce94da7 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -819,7 +819,7 @@ contains ! Set the direction and group to use with get_xs ! this only depends on if we if (t % estimator == ESTIMATOR_ANALOG .or. & - t % estimator == ESTIMATOR_COLLISION) then + t % estimator == ESTIMATOR_COLLISION) then if (survival_biasing) then ! Then we either are alive and had a scatter (and so g changed), ! or are dead and g did not change @@ -919,7 +919,7 @@ contains case (SCORE_INVERSE_VELOCITY) if (t % estimator == ESTIMATOR_ANALOG .or. & - t % estimator == ESTIMATOR_COLLISION) then + t % estimator == ESTIMATOR_COLLISION) then ! All events score to an inverse velocity bin. We actually use a ! collision estimator in place of an analog one since there is no way ! to count 'events' exactly for the inverse velocity From 228238778547bf162ba163682d247ddd0580e629 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 19 Mar 2016 14:02:05 -0400 Subject: [PATCH 389/650] Whoops. Forgot to make mgxs*_get_xs pure like I did the interface --- src/mgxs_header.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index 5f8649292b..8b0023204f 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -1103,7 +1103,7 @@ module mgxs_header ! MGXS*_GET_XS returns the requested data cross section data !=============================================================================== - function mgxsiso_get_xs(this, xstype, gin, gout, uvw, mu) result(xs) + pure function mgxsiso_get_xs(this, xstype, gin, gout, uvw, mu) result(xs) class(MgxsIso), intent(in) :: this ! The Mgxs to initialize character(*) , intent(in) :: xstype ! Type of xs requested integer, intent(in) :: gin ! Incoming Energy group @@ -1191,7 +1191,7 @@ module mgxs_header end function mgxsiso_get_xs - function mgxsang_get_xs(this, xstype, gin, gout, uvw, mu) result(xs) + pure function mgxsang_get_xs(this, xstype, gin, gout, uvw, mu) result(xs) class(MgxsAngle), intent(in) :: this ! The Mgxs to initialize character(*) , intent(in) :: xstype ! Type of xs requested integer, intent(in) :: gin ! Incoming Energy group From 0d82883c8552618118ac430896a7169201fd193e Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sat, 19 Mar 2016 15:21:38 -0400 Subject: [PATCH 390/650] Added new iso-in-lab test to suite --- tests/test_iso_in_lab/inputs_true.dat | 1 + tests/test_iso_in_lab/results_true.dat | 2 ++ tests/test_iso_in_lab/test_iso_in_lab.py | 26 ++++++++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 tests/test_iso_in_lab/inputs_true.dat create mode 100644 tests/test_iso_in_lab/results_true.dat create mode 100644 tests/test_iso_in_lab/test_iso_in_lab.py diff --git a/tests/test_iso_in_lab/inputs_true.dat b/tests/test_iso_in_lab/inputs_true.dat new file mode 100644 index 0000000000..9a21b06f1f --- /dev/null +++ b/tests/test_iso_in_lab/inputs_true.dat @@ -0,0 +1 @@ +e0409e0660d58857a6a96ff5cb539ccc41c82f0e443e8081ee00bbee7b6c81b0ad43c870950ae37d4a18c329067b09479a27aa171c3a3f5771f53b384496fe61 \ No newline at end of file diff --git a/tests/test_iso_in_lab/results_true.dat b/tests/test_iso_in_lab/results_true.dat new file mode 100644 index 0000000000..a860453c6a --- /dev/null +++ b/tests/test_iso_in_lab/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +9.638451E-01 1.237712E-02 diff --git a/tests/test_iso_in_lab/test_iso_in_lab.py b/tests/test_iso_in_lab/test_iso_in_lab.py new file mode 100644 index 0000000000..b60daea117 --- /dev/null +++ b/tests/test_iso_in_lab/test_iso_in_lab.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python + +import os +import sys +import glob +import hashlib +sys.path.insert(0, os.pardir) +from testing_harness import PyAPITestHarness +import openmc +import openmc.mgxs + + +class IsoInLabTestHarness(PyAPITestHarness): + + def _build_inputs(self): + """Write input XML files with iso-in-lab scattering.""" + + self._input_set.build_default_materials_and_geometry() + self._input_set.build_default_settings() + self._input_set.materials.make_isotropic_in_lab() + self._input_set.export() + + +if __name__ == '__main__': + harness = IsoInLabTestHarness('statepoint.10.*') + harness.main() From 175af7ae5f2373e198d3b920a54cbef224a732e0 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 20 Mar 2016 15:03:48 -0400 Subject: [PATCH 391/650] Im going to trick you in to giving me output Travis... --- tests/testing_harness.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/testing_harness.py b/tests/testing_harness.py index 7d6dbc914f..7d74c61aa3 100644 --- a/tests/testing_harness.py +++ b/tests/testing_harness.py @@ -117,6 +117,7 @@ class TestHarness(object): sha512.update(outstr.encode('utf-8')) outstr = sha512.hexdigest() + print(outstr) return outstr def _write_results(self, results_string): From a79779e4137c1b9acb917495be1e2707076c25b0 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 20 Mar 2016 15:20:14 -0400 Subject: [PATCH 392/650] ill get you compiler error... --- tests/run_tests.py | 5 ++++- tests/testing_harness.py | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/run_tests.py b/tests/run_tests.py index 48fc23d4af..a270a22b7c 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -230,7 +230,10 @@ class Test(object): make_list.append(options.n_procs) # Run make - rc = call(make_list) + # rc = call(make_list) + rc = check_output(make_list, stderr=subprocess.STDOUT) + print(rc) + rc = 0 if rc != 0: self.success = False self.msg = 'Failed on make.' diff --git a/tests/testing_harness.py b/tests/testing_harness.py index 7d74c61aa3..7d6dbc914f 100644 --- a/tests/testing_harness.py +++ b/tests/testing_harness.py @@ -117,7 +117,6 @@ class TestHarness(object): sha512.update(outstr.encode('utf-8')) outstr = sha512.hexdigest() - print(outstr) return outstr def _write_results(self, results_string): From e0a65de46eb9f88641ca6d3919af76777f5172c1 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 20 Mar 2016 15:27:49 -0400 Subject: [PATCH 393/650] still trying --- tests/run_tests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/run_tests.py b/tests/run_tests.py index a270a22b7c..8441f756ae 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -9,6 +9,7 @@ import re import glob import socket from subprocess import call, check_output +import subprocess from collections import OrderedDict from optparse import OptionParser From b2ee7da86c98592e27bc8a5153c21a9cae88aeef Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 20 Mar 2016 15:45:35 -0400 Subject: [PATCH 394/650] Maybe this will get my output --- tests/run_tests.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tests/run_tests.py b/tests/run_tests.py index 8441f756ae..5d2a6acd0c 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -9,7 +9,6 @@ import re import glob import socket from subprocess import call, check_output -import subprocess from collections import OrderedDict from optparse import OptionParser @@ -231,10 +230,7 @@ class Test(object): make_list.append(options.n_procs) # Run make - # rc = call(make_list) - rc = check_output(make_list, stderr=subprocess.STDOUT) - print(rc) - rc = 0 + rc = call(make_list) if rc != 0: self.success = False self.msg = 'Failed on make.' @@ -471,6 +467,9 @@ for key in iter(tests): logfilename = os.path.splitext(logfilename)[0] logfilename = logfilename + '_{0}.log'.format(test.name) shutil.copy(logfile[0], logfilename) + f = open(logfilename, 'r') + for line in f: + print(line) # For coverage builds, use lcov to generate HTML output if test.coverage: From 448c3281ad1bd03df782b977136c78d2710ff1cf Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 20 Mar 2016 15:57:06 -0400 Subject: [PATCH 395/650] Ok this prints the compilation results on my machine, lets see about travis...... --- tests/run_tests.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/run_tests.py b/tests/run_tests.py index 5d2a6acd0c..19b45c1257 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -9,6 +9,7 @@ import re import glob import socket from subprocess import call, check_output +import subprocess from collections import OrderedDict from optparse import OptionParser @@ -230,7 +231,8 @@ class Test(object): make_list.append(options.n_procs) # Run make - rc = call(make_list) + rc = check_output(make_list) + print(rc) if rc != 0: self.success = False self.msg = 'Failed on make.' @@ -467,9 +469,6 @@ for key in iter(tests): logfilename = os.path.splitext(logfilename)[0] logfilename = logfilename + '_{0}.log'.format(test.name) shutil.copy(logfile[0], logfilename) - f = open(logfilename, 'r') - for line in f: - print(line) # For coverage builds, use lcov to generate HTML output if test.coverage: From a31fa5e52d0dd0d42291d2104fac2d72c64783cb Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 20 Mar 2016 16:01:53 -0400 Subject: [PATCH 396/650] Ok, we are in script mode then. got it --- tests/run_tests.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/run_tests.py b/tests/run_tests.py index 19b45c1257..9856dd264c 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -196,7 +196,9 @@ class Test(object): os.environ['HDF5_ROOT'] = PHDF5_DIR else: os.environ['HDF5_ROOT'] = HDF5_DIR - rc = call(['ctest', '-S', 'ctestscript.run','-V']) + # rc = call(['ctest', '-S', 'ctestscript.run','-V']) + rc = check_output(['ctest', '-S', 'ctestscript.run','-V']) + print(rc) if rc != 0: self.success = False self.msg = 'Failed on ctest script.' @@ -257,6 +259,8 @@ class Test(object): # Run ctests rc = call(ctest_list) + rc = check_output(ctest_list) + print(rc) if rc != 0: self.success = False self.msg = 'Failed on testing.' From 1377b063d3b9b02a54b78f44c4d06518ef93cdfa Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 20 Mar 2016 16:07:10 -0400 Subject: [PATCH 397/650] If you are reading these logs you are watching someone learn how we have travis and ctest set up on the fly... must be interesting --- tests/run_tests.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/tests/run_tests.py b/tests/run_tests.py index 9856dd264c..28daae2587 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -9,7 +9,6 @@ import re import glob import socket from subprocess import call, check_output -import subprocess from collections import OrderedDict from optparse import OptionParser @@ -197,8 +196,8 @@ class Test(object): else: os.environ['HDF5_ROOT'] = HDF5_DIR # rc = call(['ctest', '-S', 'ctestscript.run','-V']) - rc = check_output(['ctest', '-S', 'ctestscript.run','-V']) - print(rc) + rc = call(['ctest', '-S', 'ctestscript.run','-VV', + '--output-on-failure']) if rc != 0: self.success = False self.msg = 'Failed on ctest script.' @@ -233,8 +232,7 @@ class Test(object): make_list.append(options.n_procs) # Run make - rc = check_output(make_list) - print(rc) + rc = call(make_list) if rc != 0: self.success = False self.msg = 'Failed on make.' @@ -259,8 +257,6 @@ class Test(object): # Run ctests rc = call(ctest_list) - rc = check_output(ctest_list) - print(rc) if rc != 0: self.success = False self.msg = 'Failed on testing.' From db2e198ad240b75abb5a6105cce3b7fb1953f54f Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 20 Mar 2016 16:11:25 -0400 Subject: [PATCH 398/650] Ok reverting now that I got the output I needed. --- tests/run_tests.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/run_tests.py b/tests/run_tests.py index 28daae2587..48fc23d4af 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -195,9 +195,7 @@ class Test(object): os.environ['HDF5_ROOT'] = PHDF5_DIR else: os.environ['HDF5_ROOT'] = HDF5_DIR - # rc = call(['ctest', '-S', 'ctestscript.run','-V']) - rc = call(['ctest', '-S', 'ctestscript.run','-VV', - '--output-on-failure']) + rc = call(['ctest', '-S', 'ctestscript.run','-V']) if rc != 0: self.success = False self.msg = 'Failed on ctest script.' From d735633519e5135d922cc8bb34d1b34ffec2a88e Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 21 Mar 2016 10:45:09 -0500 Subject: [PATCH 399/650] Remove duplicate statements in calculate_urr_xs --- src/cross_section.F90 | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/cross_section.F90 b/src/cross_section.F90 index d0509deb8d..b2813bef0c 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -378,12 +378,6 @@ contains ! sample probability table using the cumulative distribution - ! determine interpolation factor on table - f = (E - urr % energy(i_energy)) / & - (urr % energy(i_energy + 1) - urr % energy(i_energy)) - - ! sample probability table using the cumulative distribution - ! Random numbers for xs calculation are sampled from a separated stream. ! This guarantees the randomness and, at the same time, makes sure we reuse ! random number for the same nuclide at different temperatures, therefore From c70f0a587823123caf1dd716897c2bbd10404197 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 21 Mar 2016 10:12:34 -0500 Subject: [PATCH 400/650] Fix spacing around % in ace module --- src/ace.F90 | 246 ++++++++++++++++++++++++++-------------------------- 1 file changed, 123 insertions(+), 123 deletions(-) diff --git a/src/ace.F90 b/src/ace.F90 index e354f5866f..1d5f5f45b2 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -226,10 +226,10 @@ contains ! Show which nuclide results in lowest energy for neutron transport do i = 1, n_nuclides_total - if (nuclides(i)%energy(nuclides(i)%n_grid) == energy_max_neutron) then + if (nuclides(i) % energy(nuclides(i) % n_grid) == energy_max_neutron) then call write_message("Maximum neutron transport energy: " // & trim(to_str(energy_max_neutron)) // " MeV for " // & - trim(adjustl(nuclides(i)%name)), 6) + trim(adjustl(nuclides(i) % name)), 6) exit end if end do @@ -931,42 +931,42 @@ contains ! "one" angular distribution, it is repeated as many times as there are ! energy distributions for this reaction since the ! UncorrelatedAngleEnergy type holds one angle and energy distribution. - do k = 1, size(rxn%products(1)%distribution) - select type (aedist => rxn%products(1)%distribution(k)%obj) + do k = 1, size(rxn % products(1) % distribution) + select type (aedist => rxn % products(1) % distribution(k) % obj) type is (UncorrelatedAngleEnergy) ! allocate space for incoming energies and locations NE = int(XSS(JXS(9) + LOCB - 1)) - allocate(aedist%angle%energy(NE)) - allocate(aedist%angle%distribution(NE)) + allocate(aedist % angle % energy(NE)) + allocate(aedist % angle % distribution(NE)) allocate(LC(NE)) ! read incoming energy grid and location of nucs XSS_index = JXS(9) + LOCB - aedist%angle%energy(:) = get_real(NE) + aedist % angle % energy(:) = get_real(NE) LC(:) = get_int(NE) ! determine dize of data block do j = 1, NE if (LC(j) == 0) then ! isotropic - allocate(Uniform :: aedist%angle%distribution(j)%obj) - select type (adist => aedist%angle%distribution(j)%obj) + allocate(Uniform :: aedist % angle % distribution(j) % obj) + select type (adist => aedist % angle % distribution(j) % obj) type is (Uniform) - adist%a = -ONE - adist%b = ONE + adist % a = -ONE + adist % b = ONE end select elseif (LC(j) > 0) then ! 32 equiprobable bins - allocate(Equiprobable :: aedist%angle%distribution(j)%obj) - select type (adist => aedist%angle%distribution(j)%obj) + allocate(Equiprobable :: aedist % angle % distribution(j) % obj) + select type (adist => aedist % angle % distribution(j) % obj) type is (Equiprobable) - allocate(adist%x(33)) + allocate(adist % x(33)) end select elseif (LC(j) < 0) then ! tabular distribution - allocate(Tabular :: aedist%angle%distribution(j)%obj) + allocate(Tabular :: aedist % angle % distribution(j) % obj) end if end do @@ -975,9 +975,9 @@ contains ! on-the-fly do j = 1, NE XSS_index = JXS(9) + abs(LC(j)) - 1 - select type(adist => aedist%angle%distribution(j)%obj) + select type(adist => aedist % angle % distribution(j) % obj) type is (Equiprobable) - adist%x(:) = get_real(33) + adist % x(:) = get_real(33) type is (Tabular) ! determine interpolation and number of points interp = nint(XSS(XSS_index)) @@ -985,10 +985,10 @@ contains ! Get probability density data XSS_index = XSS_index + 2 - allocate(adist%x(NP), adist%p(NP), adist%c(NP)) - adist%x(:) = get_real(NP) - adist%p(:) = get_real(NP) - adist%c(:) = get_real(NP) + allocate(adist % x(NP), adist % p(NP), adist % c(NP)) + adist % x(:) = get_real(NP) + adist % p(:) = get_real(NP) + adist % c(:) = get_real(NP) end select end do deallocate(LC) @@ -1025,9 +1025,9 @@ contains end do ! Allocate space for distributions and probability of validity - associate (p => nuc%reactions(i + 1)%products(1)) - allocate(p%applicability(n)) - allocate(p%distribution(n)) + associate (p => nuc % reactions(i + 1) % products(1)) + allocate(p % applicability(n)) + allocate(p % distribution(n)) LNW = nint(XSS(JXS(10) + i - 1)) n = 0 @@ -1039,11 +1039,11 @@ contains IDAT = nint(XSS(JXS(11) + LNW + 1)) ! Read probability of law validity - call p%applicability(n)%from_ace(XSS, JXS(11) + LNW + 2) + call p % applicability(n) % from_ace(XSS, JXS(11) + LNW + 2) ! Read energy law data - call get_energy_dist(p%distribution(n)%obj, LAW, & - JXS(11), IDAT, nuc%awr, nuc%reactions(i + 1)%Q_value) + call get_energy_dist(p % distribution(n) % obj, LAW, & + JXS(11), IDAT, nuc % awr, nuc % reactions(i + 1) % Q_value) ! <<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<< ! Before the secondary distribution refactor, when the angle/energy @@ -1052,11 +1052,11 @@ contains ! distribution even when no angle distribution exists in the ACE file ! (isotropic is assumed). To preserve the RNG stream, we explicitly ! mark fission reactions so that we avoid the angle sampling. - if (any(nuc%reactions(i + 1)%MT == & + if (any(nuc % reactions(i + 1) % MT == & [N_FISSION, N_F, N_NF, N_2NF, N_3NF])) then - select type (aedist => p%distribution(n)%obj) + select type (aedist => p % distribution(n) % obj) type is (UncorrelatedAngleEnergy) - aedist%fission = .true. + aedist % fission = .true. end select end if ! <<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<< @@ -1110,8 +1110,8 @@ contains select case (law) case (1) - allocate(TabularEquiprobable :: aedist%energy) - select type (edist => aedist%energy) + allocate(TabularEquiprobable :: aedist % energy) + select type (edist => aedist % energy) type is (TabularEquiprobable) NR = nint(XSS(XSS_index)) NE = nint(XSS(XSS_index + 1 + 2*NR)) @@ -1119,33 +1119,33 @@ contains call fatal_error("Multiple interpolation regions not yet supported & &for tabular equiprobable energy distributions.") end if - edist%n_region = NR + edist % n_region = NR ! Read incoming energies for which outgoing energies are tabulated - allocate(edist%energy_in(NE)) + allocate(edist % energy_in(NE)) XSS_index = XSS_index + 2 + 2*NR - edist%energy_in(:) = get_real(NE) + edist % energy_in(:) = get_real(NE) ! Read outgoing energy tables NP = nint(XSS(XSS_index)) - allocate(edist%energy_out(NP, NE)) + allocate(edist % energy_out(NP, NE)) XSS_index = XSS_index + 1 do i = 1, NE - edist%energy_out(:, i) = get_real(NP) + edist % energy_out(:, i) = get_real(NP) end do end select case (3) - allocate(LevelInelastic :: aedist%energy) - select type (edist => aedist%energy) + allocate(LevelInelastic :: aedist % energy) + select type (edist => aedist % energy) type is (LevelInelastic) - edist%threshold = XSS(XSS_index) - edist%mass_ratio = XSS(XSS_index + 1) + edist % threshold = XSS(XSS_index) + edist % mass_ratio = XSS(XSS_index + 1) end select case (4) - allocate(ContinuousTabular :: aedist%energy) - select type (edist => aedist%energy) + allocate(ContinuousTabular :: aedist % energy) + select type (edist => aedist % energy) type is (ContinuousTabular) NR = nint(XSS(XSS_index)) XSS_index = XSS_index + 1 @@ -1153,84 +1153,84 @@ contains call fatal_error("Multiple interpolation regions not yet supported & &for continuous tabular energy distributions.") end if - edist%n_region = NR + edist % n_region = NR ! Read breakpoints and interpolation parameters if (NR > 0) then - allocate(edist%breakpoints(NR)) - allocate(edist%interpolation(NR)) - edist%breakpoints(:) = get_int(NR) - edist%interpolation(:) = get_int(NR) + allocate(edist % breakpoints(NR)) + allocate(edist % interpolation(NR)) + edist % breakpoints(:) = get_int(NR) + edist % interpolation(:) = get_int(NR) end if ! Read incoming energies for which outgoing energies are tabulated and ! locators NE = nint(XSS(XSS_index)) XSS_index = XSS_index + 1 - allocate(edist%energy(NE)) + allocate(edist % energy(NE)) allocate(L(NE)) - edist%energy(:) = get_real(NE) + edist % energy(:) = get_real(NE) L(:) = get_int(NE) ! Read outgoing energy tables - allocate(edist%distribution(NE)) + allocate(edist % distribution(NE)) do i = 1, NE ! Determine interpolation and number of discrete points XSS_index = LDIS + L(i) - 1 interp = nint(XSS(XSS_index)) - edist%distribution(i)%interpolation = mod(interp, 10) - edist%distribution(i)%n_discrete = (interp - & - edist%distribution(i)%interpolation)/10 + edist % distribution(i) % interpolation = mod(interp, 10) + edist % distribution(i) % n_discrete = (interp - & + edist % distribution(i) % interpolation)/10 ! check for discrete lines present - if (edist%distribution(i)%n_discrete > 0) then + if (edist % distribution(i) % n_discrete > 0) then call fatal_error("Discrete lines in continuous tabular & &distribution not yet supported") end if ! Determine number of points and allocate space NP = nint(XSS(XSS_index + 1)) - allocate(edist%distribution(i)%e_out(NP)) - allocate(edist%distribution(i)%p(NP)) - allocate(edist%distribution(i)%c(NP)) + allocate(edist % distribution(i) % e_out(NP)) + allocate(edist % distribution(i) % p(NP)) + allocate(edist % distribution(i) % c(NP)) ! Read tabular PDF for outgoing energy XSS_index = XSS_index + 2 - edist%distribution(i)%e_out(:) = get_real(NP) - edist%distribution(i)%p(:) = get_real(NP) - edist%distribution(i)%c(:) = get_real(NP) + edist % distribution(i) % e_out(:) = get_real(NP) + edist % distribution(i) % p(:) = get_real(NP) + edist % distribution(i) % c(:) = get_real(NP) end do deallocate(L) end select case (7) - allocate(MaxwellEnergy :: aedist%energy) - select type (edist => aedist%energy) + allocate(MaxwellEnergy :: aedist % energy) + select type (edist => aedist % energy) type is (MaxwellEnergy) - call edist%theta%from_ace(XSS, XSS_index) - edist%u = XSS(XSS_index + 2 + 2*edist%theta%n_regions + & - 2*edist%theta%n_pairs) + call edist % theta % from_ace(XSS, XSS_index) + edist % u = XSS(XSS_index + 2 + 2*edist % theta % n_regions + & + 2*edist % theta % n_pairs) end select case (9) - allocate(Evaporation :: aedist%energy) - select type(edist => aedist%energy) + allocate(Evaporation :: aedist % energy) + select type(edist => aedist % energy) type is (Evaporation) - call edist%theta%from_ace(XSS, XSS_index) - edist%u = XSS(XSS_index + 2 + 2*edist%theta%n_regions + & - 2*edist%theta%n_pairs) + call edist % theta % from_ace(XSS, XSS_index) + edist % u = XSS(XSS_index + 2 + 2*edist % theta % n_regions + & + 2*edist % theta % n_pairs) end select case (11) - allocate(WattEnergy :: aedist%energy) - select type(edist => aedist%energy) + allocate(WattEnergy :: aedist % energy) + select type(edist => aedist % energy) type is (WattEnergy) - call edist%a%from_ace(XSS, XSS_index) - XSS_index = XSS_index + 2 + 2*edist%a%n_regions + 2*edist%a%n_pairs - call edist%b%from_ace(XSS, XSS_index) - XSS_index = XSS_index + 2 + 2*edist%b%n_regions + 2*edist%b%n_pairs - edist%u = XSS(XSS_index) + call edist % a % from_ace(XSS, XSS_index) + XSS_index = XSS_index + 2 + 2*edist % a % n_regions + 2*edist % a % n_pairs + call edist % b % from_ace(XSS, XSS_index) + XSS_index = XSS_index + 2 + 2*edist % b % n_regions + 2*edist % b % n_pairs + edist % u = XSS(XSS_index) end select end select @@ -1245,45 +1245,45 @@ contains call fatal_error("Multiple interpolation regions not yet supported & &for Kalbach-Mann energy distributions.") end if - aedist%n_region = NR + aedist % n_region = NR ! Read incoming energies for which outgoing energies are tabulated and locators - allocate(aedist%energy(NE)) + allocate(aedist % energy(NE)) allocate(L(NE)) XSS_index = XSS_index + 2 + 2*NR - aedist%energy(:) = get_real(NE) + aedist % energy(:) = get_real(NE) L(:) = get_int(NE) ! Read outgoing energy tables - allocate(aedist%distribution(NE)) + allocate(aedist % distribution(NE)) do i = 1, NE ! Determine interpolation and number of discrete points XSS_index = LDIS + L(i) - 1 interp = nint(XSS(XSS_index)) - aedist%distribution(i)%interpolation = mod(interp, 10) - aedist%distribution(i)%n_discrete = (interp - aedist%distribution(i)%interpolation)/10 + aedist % distribution(i) % interpolation = mod(interp, 10) + aedist % distribution(i) % n_discrete = (interp - aedist % distribution(i) % interpolation)/10 ! check for discrete lines present - if (aedist%distribution(i)%n_discrete > 0) then + if (aedist % distribution(i) % n_discrete > 0) then call fatal_error("Discrete lines in Kalbach-Mann distribution not & &yet supported") end if ! Determine number of points and allocate space NP = nint(XSS(XSS_index + 1)) - allocate(aedist%distribution(i)%e_out(NP)) - allocate(aedist%distribution(i)%p(NP)) - allocate(aedist%distribution(i)%c(NP)) - allocate(aedist%distribution(i)%r(NP)) - allocate(aedist%distribution(i)%a(NP)) + allocate(aedist % distribution(i) % e_out(NP)) + allocate(aedist % distribution(i) % p(NP)) + allocate(aedist % distribution(i) % c(NP)) + allocate(aedist % distribution(i) % r(NP)) + allocate(aedist % distribution(i) % a(NP)) ! Read tabular PDF for outgoing energy XSS_index = XSS_index + 2 - aedist%distribution(i)%e_out(:) = get_real(NP) - aedist%distribution(i)%p(:) = get_real(NP) - aedist%distribution(i)%c(:) = get_real(NP) - aedist%distribution(i)%r(:) = get_real(NP) - aedist%distribution(i)%a(:) = get_real(NP) + aedist % distribution(i) % e_out(:) = get_real(NP) + aedist % distribution(i) % p(:) = get_real(NP) + aedist % distribution(i) % c(:) = get_real(NP) + aedist % distribution(i) % r(:) = get_real(NP) + aedist % distribution(i) % a(:) = get_real(NP) end do deallocate(L) @@ -1298,67 +1298,67 @@ contains call fatal_error("Multiple interpolation regions not yet supported & &for correlated angle-energy distributions.") end if - aedist%n_region = NR + aedist % n_region = NR ! Read incoming energies for which outgoing energies are tabulated and ! locators - allocate(aedist%energy(NE)) + allocate(aedist % energy(NE)) allocate(L(NE)) XSS_index = XSS_index + 2 + 2*NR - aedist%energy(:) = get_real(NE) + aedist % energy(:) = get_real(NE) L(:) = get_int(NE) ! Read outgoing energy tables - allocate(aedist%distribution(NE)) + allocate(aedist % distribution(NE)) do i = 1, NE ! Determine interpolation and number of discrete points XSS_index = LDIS + L(i) - 1 interp = nint(XSS(XSS_index)) - aedist%distribution(i)%interpolation = mod(interp, 10) - aedist%distribution(i)%n_discrete = (interp - aedist%distribution(i)%interpolation)/10 + aedist % distribution(i) % interpolation = mod(interp, 10) + aedist % distribution(i) % n_discrete = (interp - aedist % distribution(i) % interpolation)/10 ! check for discrete lines present - if (aedist%distribution(i)%n_discrete > 0) then + if (aedist % distribution(i) % n_discrete > 0) then call fatal_error("Discrete lines in correlated angle-energy & &distribution not yet supported") end if ! Determine number of points and allocate space NP = nint(XSS(XSS_index + 1)) - allocate(aedist%distribution(i)%e_out(NP)) - allocate(aedist%distribution(i)%p(NP)) - allocate(aedist%distribution(i)%c(NP)) + allocate(aedist % distribution(i) % e_out(NP)) + allocate(aedist % distribution(i) % p(NP)) + allocate(aedist % distribution(i) % c(NP)) allocate(LC(NP)) ! Read tabular PDF for outgoing energy XSS_index = XSS_index + 2 - aedist%distribution(i)%e_out(:) = get_real(NP) - aedist%distribution(i)%p(:) = get_real(NP) - aedist%distribution(i)%c(:) = get_real(NP) + aedist % distribution(i) % e_out(:) = get_real(NP) + aedist % distribution(i) % p(:) = get_real(NP) + aedist % distribution(i) % c(:) = get_real(NP) LC(:) = get_int(NP) ! allocate angular distributions for each incoming/outgoing energy - allocate(aedist%distribution(i)%angle(NP)) + allocate(aedist % distribution(i) % angle(NP)) do j = 1, NP if (LC(j) == 0) then ! isotropic - allocate(Uniform :: aedist%distribution(i)%angle(j)%obj) - select type (adist => aedist%distribution(i)%angle(j)%obj) + allocate(Uniform :: aedist % distribution(i) % angle(j) % obj) + select type (adist => aedist % distribution(i) % angle(j) % obj) type is (Uniform) - adist%a = -ONE - adist%b = ONE + adist % a = -ONE + adist % b = ONE end select elseif (LC(j) > 0) then ! tabular distribution - allocate(Tabular :: aedist%distribution(i)%angle(j)%obj) + allocate(Tabular :: aedist % distribution(i) % angle(j) % obj) end if end do ! read angular distributions do j = 1, NP XSS_index = LDIS + abs(LC(j)) - 1 - select type(adist => aedist%distribution(i)%angle(j)%obj) + select type(adist => aedist % distribution(i) % angle(j) % obj) type is (Tabular) ! determine interpolation and number of points interp = nint(XSS(XSS_index)) @@ -1366,10 +1366,10 @@ contains ! Get probability density data XSS_index = XSS_index + 2 - allocate(adist%x(NP), adist%p(NP), adist%c(NP)) - adist%x(:) = get_real(NP) - adist%p(:) = get_real(NP) - adist%c(:) = get_real(NP) + allocate(adist % x(NP), adist % p(NP), adist % c(NP)) + adist % x(:) = get_real(NP) + adist % p(:) = get_real(NP) + adist % c(:) = get_real(NP) end select end do deallocate(LC) @@ -1382,10 +1382,10 @@ contains ! ======================================================================== ! N-BODY PHASE SPACE DISTRIBUTION - aedist%n_bodies = int(XSS(XSS_index)) - aedist%mass_ratio = XSS(XSS_index + 1) - aedist%A = awr - aedist%Q = Q_value + aedist % n_bodies = int(XSS(XSS_index)) + aedist % mass_ratio = XSS(XSS_index + 1) + aedist % A = awr + aedist % Q = Q_value end select end subroutine get_energy_dist From 743de8776791f2b47ed8e0c4ff4b60879908ae10 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 21 Mar 2016 20:07:01 -0400 Subject: [PATCH 401/650] Help us obi-wan, youre our only hope.... for defeating gfortran 4.6... --- src/mgxs_header.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index 8b0023204f..56c538a5d1 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -172,7 +172,7 @@ module mgxs_header ! Microscopic cross sections real(8), allocatable :: total(:,:,:) ! total cross section real(8), allocatable :: absorption(:,:,:) ! absorption cross section - class(ScattDataContainer), allocatable :: scatter(:,:) ! scattering information + type(ScattDataContainer), allocatable :: scatter(:,:) ! scattering information real(8), allocatable :: nu_fission(:,:,:) ! fission matrix (Gout x Gin) real(8), allocatable :: k_fission(:,:,:) ! kappa-fission real(8), allocatable :: fission(:,:,:) ! neutron production From d3e786e46ef8cadedb68c62e481bbfa49930af69 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Tue, 22 Mar 2016 14:37:07 -0400 Subject: [PATCH 402/650] Now inserting string array of distribcell paths to summary file --- src/summary.F90 | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/summary.F90 b/src/summary.F90 index e662aa473b..3431595280 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -4,7 +4,7 @@ module summary use constants use endf, only: reaction_name use geometry_header, only: Cell, Universe, Lattice, RectLattice, & - &HexLattice + &HexLattice, BASE_UNIVERSE use global use hdf5_interface use material_header, only: Material @@ -14,6 +14,8 @@ module summary use surface_header use string, only: to_str use tally_header, only: TallyObject + use output, only: find_offset, write_message + use string, only: to_str use hdf5 @@ -534,6 +536,10 @@ contains type(RegularMesh), pointer :: m type(TallyObject), pointer :: t + integer :: offset ! distibcell offset + character(100), allocatable :: paths(:) ! array of distribcell paths + character(100) :: path ! temporary distribcell path + tallies_group = create_group(file_id, "tallies") ! Write total number of meshes @@ -589,6 +595,21 @@ contains t%filters(j)%type == FILTER_POLAR .or. & t%filters(j)%type == FILTER_AZIMUTHAL) then call write_dataset(filter_group, "bins", t%filters(j)%real_bins) + + ! Write paths to reach each distribcell instance + else if (t%filters(j)%type == FILTER_DISTRIBCELL) then + ! Allocate array of strings for each distribcell path + allocate(paths(t % filters(j) % n_bins)) + ! Store path for each distribcell instance + do k = 1, t % filters(j) % n_bins + path = '' + offset = 0 + call find_offset(t % filters(j) % int_bins(1), & + universes(BASE_UNIVERSE), k, offset, path) + paths(k) = path + end do + call write_dataset(filter_group, "paths", paths) + deallocate(paths) else call write_dataset(filter_group, "bins", t%filters(j)%int_bins) end if From 67f9cfe1c70005b78ea82122d4074ca2066f2fe7 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Tue, 22 Mar 2016 14:53:57 -0400 Subject: [PATCH 403/650] Distribcell paths now handled by StatePoint.link_with_summary(...) routine in Python API --- openmc/filter.py | 13 +++++++++++++ openmc/statepoint.py | 10 ++++++++-- openmc/summary.py | 5 +++++ src/summary.F90 | 10 +++++++--- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/openmc/filter.py b/openmc/filter.py index 2ae8eeb626..3d67052ea7 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -45,6 +45,9 @@ class Filter(object): stride : Integral The number of filter, nuclide and score bins within each of this filter's bins. + distribcell_paths : list of str + The paths traversed through the CSG tree to reach each distribcell + instance (for 'distribcell' filters only) """ @@ -56,6 +59,7 @@ class Filter(object): self._bins = None self._mesh = None self._stride = None + self._distribcell_paths = None if type is not None: self.type = type @@ -152,6 +156,10 @@ class Filter(object): def stride(self): return self._stride + @property + def distribcell_paths(self): + return self._distribcell_paths + @type.setter def type(self, type): if type is None: @@ -246,6 +254,11 @@ class Filter(object): self._stride = stride + @distribcell_paths.setter + def distribcell_paths(self, distribcell_paths): + cv.check_iterable_type('distribcell_paths', distribcell_paths, str) + self._distribcell_paths = distribcell_paths + def can_merge(self, other): """Determine if filter can be merged with another. diff --git a/openmc/statepoint.py b/openmc/statepoint.py index dcf544ccb1..1644e44ab4 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -609,11 +609,13 @@ class StatePoint(object): raise ValueError(msg) for tally_id, tally in self.tallies.items(): - # Get the Tally name from the summary file - tally.name = summary.tallies[tally_id].name + summary_tally = summary.tallies[tally_id] + tally.name = summary_tally.name tally.with_summary = True for tally_filter in tally.filters: + summary_filter = summary_tally.find_filter(tally_filter.type) + if tally_filter.type == 'surface': surface_ids = [] for bin in tally_filter.bins: @@ -626,6 +628,10 @@ class StatePoint(object): distribcell_ids.append(summary.cells[bin].id) tally_filter.bins = distribcell_ids + if tally_filter.type == 'distribcell': + tally_filter.distribcell_paths = \ + summary_filter.distribcell_paths + if tally_filter.type == 'universe': universe_ids = [] for bin in tally_filter.bins: diff --git a/openmc/summary.py b/openmc/summary.py index 119a870bff..f17c0c8f93 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -562,6 +562,11 @@ class Summary(object): new_filter = openmc.Filter(filter_type, bins) new_filter.num_bins = num_bins + # Read in distribcell paths + if filter_type == 'distribcell': + new_filter.distribcell_paths = \ + self._f['{0}/paths'.format(subsubbase)][...] + # Add Filter to the Tally tally.filters.append(new_filter) diff --git a/src/summary.F90 b/src/summary.F90 index 3431595280..9597bbb0d1 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -595,11 +595,15 @@ contains t%filters(j)%type == FILTER_POLAR .or. & t%filters(j)%type == FILTER_AZIMUTHAL) then call write_dataset(filter_group, "bins", t%filters(j)%real_bins) + else + call write_dataset(filter_group, "bins", t%filters(j)%int_bins) + end if ! Write paths to reach each distribcell instance - else if (t%filters(j)%type == FILTER_DISTRIBCELL) then + if (t%filters(j)%type == FILTER_DISTRIBCELL) then ! Allocate array of strings for each distribcell path allocate(paths(t % filters(j) % n_bins)) + ! Store path for each distribcell instance do k = 1, t % filters(j) % n_bins path = '' @@ -608,10 +612,10 @@ contains universes(BASE_UNIVERSE), k, offset, path) paths(k) = path end do + + ! Write array of distribcell paths to summary file call write_dataset(filter_group, "paths", paths) deallocate(paths) - else - call write_dataset(filter_group, "bins", t%filters(j)%int_bins) end if ! Write name of type From 30641c5d37646212ab0540a1064ef6590065f0f0 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Tue, 22 Mar 2016 18:35:31 -0400 Subject: [PATCH 404/650] Fixed small bug in first/last distribcell paths printed to summary; updated Python API to handle distribcell paths --- openmc/filter.py | 1 + openmc/geometry.py | 8 ++++++-- openmc/universe.py | 43 +++++++++++++++++++++++++++++-------------- src/summary.F90 | 26 +++++++++++++------------- 4 files changed, 49 insertions(+), 29 deletions(-) diff --git a/openmc/filter.py b/openmc/filter.py index 3d67052ea7..5c62c1b6bd 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -114,6 +114,7 @@ class Filter(object): clone._num_bins = self.num_bins clone._mesh = copy.deepcopy(self.mesh, memo) clone._stride = self.stride + clone._distribcell_paths = copy.deepcopy(self.distribcell_paths) memo[id(self)] = clone diff --git a/openmc/geometry.py b/openmc/geometry.py index dac0bd90f1..be3f281ebe 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -63,15 +63,19 @@ class Geometry(object): """ + # Extract the cell id from the path + last_index = path.rfind('>') + cell_id = int(path[last_index+1:]) + # Find the distribcell index of the cell. cells = self.get_all_cells() for cell in cells: - if cell.id == path[-1]: + if cell.id == cell_id: distribcell_index = cell.distribcell_index break else: raise RuntimeError('Could not find cell {} specified in a \ - distribcell filter'.format(path[-1])) + distribcell filter'.format(cell_id)) # Return memoize'd offset if possible if (path, distribcell_index) in self._offsets: diff --git a/openmc/universe.py b/openmc/universe.py index 1729aa7e23..6a1e3da88a 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -298,9 +298,6 @@ class Cell(object): self.region = Intersection(self.region, region) def get_cell_instance(self, path, distribcell_index): - # Get the current element and remove it from the list - cell_id = path[0] - path = path[1:] # If the Cell is filled by a Material if self._type == 'normal' or self._type == 'void': @@ -622,11 +619,19 @@ class Universe(object): self._cells.clear() def get_cell_instance(self, path, distribcell_index): - # Get the current element and remove it from the list - path = path[1:] - # Get the Cell ID - cell_id = path[0] + # Pop off the root Universe ID from the path + next_index = path.index('-') + path = path[next_index+2:] + + # Extract the Cell ID from the path + if '-' in path: + next_index = path.index('-') + cell_id = int(path[:next_index]) + path = path[next_index+2:] + else: + cell_id = int(path) + path = '' # Make a recursive call to the Cell within this Universe offset = self.cells[cell_id].get_cell_instance(path, distribcell_index) @@ -1090,20 +1095,30 @@ class RectLattice(Lattice): self._pitch = pitch def get_cell_instance(self, path, distribcell_index): - # Get the current element and remove it from the list - i = path[0] - path = path[1:] + + # Extract the lattice element from the path + next_index = path.index('-') + lat_id_indices = path[:next_index] + path = path[next_index+2:] + + # Extract the lattice cell indices from the path + i1 = lat_id_indices.index('(') + i2 = lat_id_indices.index(')') + i = lat_id_indices[i1+1:i2] + lat_x = int(i.split(',')[0]) - 1 + lat_y = int(i.split(',')[1]) - 1 + lat_z = int(i.split(',')[2]) - 1 # For 2D Lattices if len(self._dimension) == 2: - offset = self._offsets[i[3]-1, i[2]-1, i[1]-1, distribcell_index-1] - offset += self._universes[i[1]-1][i[2]-1].get_cell_instance(path, + offset = self._offsets[lat_z, lat_y, lat_x, distribcell_index-1] + offset += self._universes[lat_x][lat_y].get_cell_instance(path, distribcell_index) # For 3D Lattices else: - offset = self._offsets[i[3]-1, i[2]-1, i[1]-1, distribcell_index-1] - offset += self._universes[i[3]-1][i[2]-1][i[1]-1].get_cell_instance( + offset = self._offsets[lat_z, lat_y, lat_x, distribcell_index-1] + offset += self._universes[lat_z][lat_y][lat_x].get_cell_instance( path, distribcell_index) return offset diff --git a/src/summary.F90 b/src/summary.F90 index 9597bbb0d1..c382f4734e 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -601,21 +601,21 @@ contains ! Write paths to reach each distribcell instance if (t%filters(j)%type == FILTER_DISTRIBCELL) then - ! Allocate array of strings for each distribcell path - allocate(paths(t % filters(j) % n_bins)) + ! Allocate array of strings for each distribcell path + allocate(paths(t % filters(j) % n_bins)) - ! Store path for each distribcell instance - do k = 1, t % filters(j) % n_bins - path = '' - offset = 0 - call find_offset(t % filters(j) % int_bins(1), & - universes(BASE_UNIVERSE), k, offset, path) - paths(k) = path - end do + ! Store path for each distribcell instance + do k = 1, t % filters(j) % n_bins + path = '' + offset = 1 + call find_offset(t % filters(j) % int_bins(1), & + universes(BASE_UNIVERSE), k, offset, path) + paths(k) = path + end do - ! Write array of distribcell paths to summary file - call write_dataset(filter_group, "paths", paths) - deallocate(paths) + ! Write array of distribcell paths to summary file + call write_dataset(filter_group, "paths", paths) + deallocate(paths) end if ! Write name of type From fd94f6e80673cb523bbfd3255990c32c741b8f14 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Wed, 23 Mar 2016 11:35:25 -0400 Subject: [PATCH 405/650] Fixed Python 3 bug in both run_tests.py and distribcell_paths setter in summary.py --- openmc/summary.py | 5 +++-- tests/run_tests.py | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/openmc/summary.py b/openmc/summary.py index f17c0c8f93..9609a866b6 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -564,8 +564,9 @@ class Summary(object): # Read in distribcell paths if filter_type == 'distribcell': - new_filter.distribcell_paths = \ - self._f['{0}/paths'.format(subsubbase)][...] + paths = self._f['{0}/paths'.format(subsubbase)][...] + paths = [path.decode() for path in paths] + new_filter.distribcell_paths = paths # Add Filter to the Tally tally.filters.append(new_filter) diff --git a/tests/run_tests.py b/tests/run_tests.py index 48fc23d4af..ed6ff0c203 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -363,10 +363,14 @@ sourcepoint_batch|statepoint_interval|survival_biasing|\ tally_assumesep|translation|uniform_fs|universe|void" # Delete items of dictionary if valgrind or coverage and not in script mode +to_delete = [] if not script_mode: for key in tests: if re.search('valgrind|coverage', key): - del tests[key] + to_delete.append(key) + +for key in to_delete: + del tests[key] # Check if tests empty if len(list(tests.keys())) == 0: From 1507efd5d648594870e856c085652869c1eb20fa Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Wed, 23 Mar 2016 11:40:14 -0400 Subject: [PATCH 406/650] Removed unused subroutine imports in summary.F90 used for debugging distribcell paths --- src/summary.F90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/summary.F90 b/src/summary.F90 index c382f4734e..2b34ccfb65 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -14,8 +14,7 @@ module summary use surface_header use string, only: to_str use tally_header, only: TallyObject - use output, only: find_offset, write_message - use string, only: to_str + use output, only: find_offset use hdf5 From 83f19e8cf1ade0a85f980f3b86c70c3053f9d019 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Wed, 23 Mar 2016 13:50:27 -0400 Subject: [PATCH 407/650] Fixed bug for Python 2 reading of distribcell paths in Summary API --- .../pythonapi/examples/mgxs-part-i.ipynb | 309 ++-- .../pythonapi/examples/mgxs-part-ii.ipynb | 1082 +---------- .../pythonapi/examples/mgxs-part-iii.ipynb | 487 +++-- .../examples/pandas-dataframes.ipynb | 1594 ++++++----------- .../pythonapi/examples/post-processing.ipynb | 328 ++-- .../pythonapi/examples/tally-arithmetic.ipynb | 374 ++-- openmc/summary.py | 2 +- openmc/trigger.py | 7 +- 8 files changed, 1350 insertions(+), 2833 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index 6b78e9d536..01cd7cd7f4 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -518,9 +518,10 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 34381b40a9445a727e360873aaa6ef892af1cb6a\n", - " Date/Time: 2016-02-07 15:58:16\n", + " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", + " Date/Time: 2016-03-23 11:41:09\n", " MPI Processes: 1\n", + " OpenMP Threads: 16\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -546,56 +547,56 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 1.19804 \n", - " 2/1 1.12945 \n", - " 3/1 1.15573 \n", - " 4/1 1.13929 \n", - " 5/1 1.16300 \n", - " 6/1 1.22117 \n", - " 7/1 1.19012 \n", - " 8/1 1.11299 \n", - " 9/1 1.16066 \n", - " 10/1 1.12566 \n", - " 11/1 1.20854 \n", - " 12/1 1.14691 1.17773 +/- 0.03082\n", - " 13/1 1.17204 1.17583 +/- 0.01789\n", - " 14/1 1.14148 1.16724 +/- 0.01529\n", - " 15/1 1.17272 1.16834 +/- 0.01189\n", - " 16/1 1.18575 1.17124 +/- 0.01014\n", - " 17/1 1.20498 1.17606 +/- 0.00983\n", - " 18/1 1.14754 1.17249 +/- 0.00923\n", - " 19/1 1.18141 1.17348 +/- 0.00820\n", - " 20/1 1.15074 1.17121 +/- 0.00768\n", - " 21/1 1.15914 1.17011 +/- 0.00703\n", - " 22/1 1.14586 1.16809 +/- 0.00673\n", - " 23/1 1.18999 1.16978 +/- 0.00642\n", - " 24/1 1.15101 1.16844 +/- 0.00609\n", - " 25/1 1.13791 1.16640 +/- 0.00602\n", - " 26/1 1.19791 1.16837 +/- 0.00597\n", - " 27/1 1.19818 1.17012 +/- 0.00587\n", - " 28/1 1.14160 1.16854 +/- 0.00576\n", - " 29/1 1.11487 1.16571 +/- 0.00614\n", - " 30/1 1.17538 1.16620 +/- 0.00584\n", - " 31/1 1.20210 1.16791 +/- 0.00581\n", - " 32/1 1.20078 1.16940 +/- 0.00574\n", - " 33/1 1.14624 1.16839 +/- 0.00558\n", - " 34/1 1.14618 1.16747 +/- 0.00542\n", - " 35/1 1.16866 1.16752 +/- 0.00520\n", - " 36/1 1.18565 1.16821 +/- 0.00504\n", - " 37/1 1.16824 1.16821 +/- 0.00485\n", - " 38/1 1.18299 1.16874 +/- 0.00471\n", - " 39/1 1.21418 1.17031 +/- 0.00480\n", - " 40/1 1.11167 1.16835 +/- 0.00504\n", - " 41/1 1.11545 1.16665 +/- 0.00516\n", - " 42/1 1.11114 1.16491 +/- 0.00529\n", - " 43/1 1.14227 1.16423 +/- 0.00517\n", - " 44/1 1.14104 1.16355 +/- 0.00506\n", - " 45/1 1.16756 1.16366 +/- 0.00492\n", - " 46/1 1.13065 1.16274 +/- 0.00487\n", - " 47/1 1.11251 1.16139 +/- 0.00492\n", - " 48/1 1.14731 1.16101 +/- 0.00481\n", - " 49/1 1.16691 1.16117 +/- 0.00469\n", - " 50/1 1.19679 1.16206 +/- 0.00465\n", + " 1/1 1.11184 \n", + " 2/1 1.15820 \n", + " 3/1 1.18468 \n", + " 4/1 1.17492 \n", + " 5/1 1.19645 \n", + " 6/1 1.18436 \n", + " 7/1 1.14070 \n", + " 8/1 1.15150 \n", + " 9/1 1.19202 \n", + " 10/1 1.17677 \n", + " 11/1 1.20272 \n", + " 12/1 1.21366 1.20819 +/- 0.00547\n", + " 13/1 1.15906 1.19181 +/- 0.01668\n", + " 14/1 1.14687 1.18058 +/- 0.01629\n", + " 15/1 1.14570 1.17360 +/- 0.01442\n", + " 16/1 1.13480 1.16713 +/- 0.01343\n", + " 17/1 1.17680 1.16852 +/- 0.01144\n", + " 18/1 1.16866 1.16853 +/- 0.00990\n", + " 19/1 1.19253 1.17120 +/- 0.00913\n", + " 20/1 1.18124 1.17220 +/- 0.00823\n", + " 21/1 1.19206 1.17401 +/- 0.00766\n", + " 22/1 1.17681 1.17424 +/- 0.00700\n", + " 23/1 1.17634 1.17440 +/- 0.00644\n", + " 24/1 1.13659 1.17170 +/- 0.00654\n", + " 25/1 1.17144 1.17169 +/- 0.00609\n", + " 26/1 1.20649 1.17386 +/- 0.00610\n", + " 27/1 1.11238 1.17024 +/- 0.00678\n", + " 28/1 1.18911 1.17129 +/- 0.00647\n", + " 29/1 1.14681 1.17000 +/- 0.00626\n", + " 30/1 1.12152 1.16758 +/- 0.00641\n", + " 31/1 1.12729 1.16566 +/- 0.00639\n", + " 32/1 1.15399 1.16513 +/- 0.00612\n", + " 33/1 1.13547 1.16384 +/- 0.00599\n", + " 34/1 1.17723 1.16440 +/- 0.00576\n", + " 35/1 1.09296 1.16154 +/- 0.00622\n", + " 36/1 1.19621 1.16287 +/- 0.00612\n", + " 37/1 1.12560 1.16149 +/- 0.00605\n", + " 38/1 1.17872 1.16211 +/- 0.00586\n", + " 39/1 1.17721 1.16263 +/- 0.00568\n", + " 40/1 1.13724 1.16178 +/- 0.00555\n", + " 41/1 1.18526 1.16254 +/- 0.00542\n", + " 42/1 1.13779 1.16177 +/- 0.00531\n", + " 43/1 1.15066 1.16143 +/- 0.00516\n", + " 44/1 1.12174 1.16026 +/- 0.00514\n", + " 45/1 1.17479 1.16068 +/- 0.00501\n", + " 46/1 1.14146 1.16014 +/- 0.00489\n", + " 47/1 1.20464 1.16135 +/- 0.00491\n", + " 48/1 1.15119 1.16108 +/- 0.00479\n", + " 49/1 1.17938 1.16155 +/- 0.00468\n", + " 50/1 1.15798 1.16146 +/- 0.00457\n", " Creating state point statepoint.50.h5...\n", "\n", " ===========================================================================\n", @@ -605,27 +606,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.2100E-01 seconds\n", - " Reading cross sections = 7.4000E-02 seconds\n", - " Total time in simulation = 8.3830E+00 seconds\n", - " Time in transport only = 8.3670E+00 seconds\n", - " Time in inactive batches = 1.0330E+00 seconds\n", - " Time in active batches = 7.3500E+00 seconds\n", - " Time synchronizing fission bank = 4.0000E-03 seconds\n", - " Sampling source sites = 1.0000E-03 seconds\n", - " SEND/RECV source sites = 3.0000E-03 seconds\n", + " Total time for initialization = 5.7200E-01 seconds\n", + " Reading cross sections = 1.3300E-01 seconds\n", + " Total time in simulation = 2.7830E+00 seconds\n", + " Time in transport only = 2.1610E+00 seconds\n", + " Time in inactive batches = 4.1200E-01 seconds\n", + " Time in active batches = 2.3710E+00 seconds\n", + " Time synchronizing fission bank = 8.0000E-03 seconds\n", + " Sampling source sites = 5.0000E-03 seconds\n", + " SEND/RECV source sites = 2.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 1.0000E-03 seconds\n", - " Total time elapsed = 8.7140E+00 seconds\n", - " Calculation Rate (inactive) = 24201.4 neutrons/second\n", - " Calculation Rate (active) = 13605.4 neutrons/second\n", + " Total time for finalization = 0.0000E+00 seconds\n", + " Total time elapsed = 3.3710E+00 seconds\n", + " Calculation Rate (inactive) = 60679.6 neutrons/second\n", + " Calculation Rate (active) = 42176.3 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.16131 +/- 0.00453\n", - " k-effective (Track-length) = 1.16206 +/- 0.00465\n", - " k-effective (Absorption) = 1.16096 +/- 0.00364\n", - " Combined k-effective = 1.16120 +/- 0.00325\n", + " k-effective (Collision) = 1.15984 +/- 0.00411\n", + " k-effective (Track-length) = 1.16146 +/- 0.00457\n", + " k-effective (Absorption) = 1.16177 +/- 0.00380\n", + " Combined k-effective = 1.16105 +/- 0.00364\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -751,8 +752,8 @@ "\tDomain Type =\tcell\n", "\tDomain ID =\t1\n", "\tCross Sections [cm^-1]:\n", - " Group 1 [6.25e-07 - 20.0 MeV]:\t6.81e-01 +/- 1.88e-01%\n", - " Group 2 [0.0 - 6.25e-07 MeV]:\t1.40e+00 +/- 5.91e-01%\n", + " Group 1 [6.25e-07 - 20.0 MeV]:\t6.81e-01 +/- 2.69e-01%\n", + " Group 2 [0.0 - 6.25e-07 MeV]:\t1.40e+00 +/- 5.93e-01%\n", "\n", "\n", "\n" @@ -780,7 +781,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -795,19 +796,19 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
1 1 1 total 0.668323 0.00126411total0.6677870.001802
0 1 2 total 1.293258 0.00762412total1.2920130.007642
\n", @@ -815,8 +816,8 @@ ], "text/plain": [ " cell group in nuclide mean std. dev.\n", - "1 1 1 total 0.668323 0.001264\n", - "0 1 2 total 1.293258 0.007624" + "1 1 1 total 0.667787 0.001802\n", + "0 1 2 total 1.292013 0.007642" ] }, "execution_count": 20, @@ -891,7 +892,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -908,23 +909,23 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
0 1 0.000000 0.000001 total (((total / flux) - (absorption / flux)) - (sca... 4.884981e-15 0.01127410.000000e+006.250000e-07total(((total / flux) - (absorption / flux)) - (sca...0.000000e+000.011292
1 1 0.000001 20.000000 total (((total / flux) - (absorption / flux)) - (sca... 1.221245e-15 0.00180216.250000e-072.000000e+01total(((total / flux) - (absorption / flux)) - (sca...-3.330669e-160.002570
\n", @@ -935,9 +936,9 @@ "0 1 0.00e+00 6.25e-07 total \n", "1 1 6.25e-07 2.00e+01 total \n", "\n", - " score mean std. dev. \n", - "0 (((total / flux) - (absorption / flux)) - (sca... 4.88e-15 1.13e-02 \n", - "1 (((total / flux) - (absorption / flux)) - (sca... 1.22e-15 1.80e-03 " + " score mean std. dev. \n", + "0 (((total / flux) - (absorption / flux)) - (sca... 0.00e+00 1.13e-02 \n", + "1 (((total / flux) - (absorption / flux)) - (sca... -3.33e-16 2.57e-03 " ] }, "execution_count": 23, @@ -970,7 +971,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -987,23 +988,23 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
0 1 0.000000 0.000001 total ((absorption / flux) / (total / flux)) 0.076219 0.00065110.000000e+006.250000e-07total((absorption / flux) / (total / flux))0.0761150.000649
1 1 0.000001 20.000000 total ((absorption / flux) / (total / flux)) 0.019319 0.00008616.250000e-072.000000e+01total((absorption / flux) / (total / flux))0.0192630.000095
\n", @@ -1015,8 +1016,8 @@ "1 1 6.25e-07 2.00e+01 total \n", "\n", " score mean std. dev. \n", - "0 ((absorption / flux) / (total / flux)) 7.62e-02 6.51e-04 \n", - "1 ((absorption / flux) / (total / flux)) 1.93e-02 8.65e-05 " + "0 ((absorption / flux) / (total / flux)) 7.61e-02 6.49e-04 \n", + "1 ((absorption / flux) / (total / flux)) 1.93e-02 9.46e-05 " ] }, "execution_count": 24, @@ -1042,7 +1043,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -1059,23 +1060,23 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
0 1 0.000000 0.000001 total ((scatter / flux) / (total / flux)) 0.923781 0.00771410.000000e+006.250000e-07total((scatter / flux) / (total / flux))0.9238850.007736
1 1 0.000001 20.000000 total ((scatter / flux) / (total / flux)) 0.980681 0.00261716.250000e-072.000000e+01total((scatter / flux) / (total / flux))0.9807370.003737
\n", @@ -1087,8 +1088,8 @@ "1 1 6.25e-07 2.00e+01 total \n", "\n", " score mean std. dev. \n", - "0 ((scatter / flux) / (total / flux)) 9.24e-01 7.71e-03 \n", - "1 ((scatter / flux) / (total / flux)) 9.81e-01 2.62e-03 " + "0 ((scatter / flux) / (total / flux)) 9.24e-01 7.74e-03 \n", + "1 ((scatter / flux) / (total / flux)) 9.81e-01 3.74e-03 " ] }, "execution_count": 25, @@ -1121,7 +1122,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -1138,23 +1139,23 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
0 1 0.000000 0.000001 total (((absorption / flux) / (total / flux)) + ((sc... 1 0.00774110.000000e+006.250000e-07total(((absorption / flux) / (total / flux)) + ((sc...10.007763
1 1 0.000001 20.000000 total (((absorption / flux) / (total / flux)) + ((sc... 1 0.00261916.250000e-072.000000e+01total(((absorption / flux) / (total / flux)) + ((sc...10.003739
\n", @@ -1166,8 +1167,8 @@ "1 1 6.25e-07 2.00e+01 total \n", "\n", " score mean std. dev. \n", - "0 (((absorption / flux) / (total / flux)) + ((sc... 1.00e+00 7.74e-03 \n", - "1 (((absorption / flux) / (total / flux)) + ((sc... 1.00e+00 2.62e-03 " + "0 (((absorption / flux) / (total / flux)) + ((sc... 1.00e+00 7.76e-03 \n", + "1 (((absorption / flux) / (total / flux)) + ((sc... 1.00e+00 3.74e-03 " ] }, "execution_count": 26, @@ -1200,7 +1201,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.10" + "version": "2.7.11" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index 0a8d7230eb..5d8da5da1d 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -34,14 +34,23 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/lib/pymodules/python2.7/matplotlib/__init__.py:1173: UserWarning: This call to matplotlib.use() has no effect\n", + "/home/wboyd/anaconda2/lib/python2.7/site-packages/matplotlib/__init__.py:1350: UserWarning: This call to matplotlib.use() has no effect\n", "because the backend has already been chosen;\n", "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", "or matplotlib.backends is imported for the first time.\n", "\n", - " warnings.warn(_use_error_msg)\n", - "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:11: QAWarning: pyne.rxname is not yet QA compliant.\n", - "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:11: QAWarning: pyne.ace is not yet QA compliant.\n" + " warnings.warn(_use_error_msg)\n" + ] + }, + { + "ename": "ImportError", + "evalue": "No module named ace", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mImportError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 9\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mopenmoc\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 10\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mopenmoc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcompatible\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mget_openmoc_geometry\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 11\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mpyne\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mace\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 12\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mu'matplotlib inline'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mImportError\u001b[0m: No module named ace" ] } ], @@ -70,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "collapsed": true }, @@ -93,7 +102,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { "collapsed": false }, @@ -127,7 +136,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { "collapsed": true }, @@ -153,7 +162,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": { "collapsed": true }, @@ -181,7 +190,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": { "collapsed": false }, @@ -218,7 +227,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": { "collapsed": false }, @@ -243,7 +252,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": { "collapsed": true }, @@ -270,7 +279,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": { "collapsed": true }, @@ -308,7 +317,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": { "collapsed": true }, @@ -333,7 +342,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": { "collapsed": false }, @@ -364,7 +373,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": { "collapsed": false }, @@ -388,7 +397,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": { "collapsed": false }, @@ -425,188 +434,11 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - " .d88888b. 888b d888 .d8888b.\n", - " d88P\" \"Y88b 8888b d8888 d88P Y88b\n", - " 888 888 88888b.d88888 888 888\n", - " 888 888 88888b. .d88b. 88888b. 888Y88888P888 888 \n", - " 888 888 888 \"88b d8P Y8b 888 \"88b 888 Y888P 888 888 \n", - " 888 888 888 888 88888888 888 888 888 Y8P 888 888 888\n", - " Y88b. .d88P 888 d88P Y8b. 888 888 888 \" 888 Y88b d88P\n", - " \"Y88888P\" 88888P\" \"Y8888 888 888 888 888 \"Y8888P\"\n", - "__________________888______________________________________________________\n", - " 888\n", - " 888\n", - "\n", - " Copyright: 2011-2015 Massachusetts Institute of Technology\n", - " License: http://mit-crpg.github.io/openmc/license.html\n", - " Version: 0.7.1\n", - " Git SHA1: 263266f4f8807fd38c6ac282fae259ae73fa1eee\n", - " Date/Time: 2016-01-20 18:12:40\n", - " MPI Processes: 1\n", - "\n", - " ===========================================================================\n", - " ========================> INITIALIZATION <=========================\n", - " ===========================================================================\n", - "\n", - " Reading settings XML file...\n", - " Reading cross sections XML file...\n", - " Reading geometry XML file...\n", - " Reading materials XML file...\n", - " Reading tallies XML file...\n", - " Building neighboring cells lists for each surface...\n", - " Loading ACE cross section table: 92235.71c\n", - " Loading ACE cross section table: 92238.71c\n", - " Loading ACE cross section table: 8016.71c\n", - " Loading ACE cross section table: 1001.71c\n", - " Loading ACE cross section table: 40090.71c\n", - " Maximum neutron transport energy: 20.0000 MeV for 92235.71c\n", - " Initializing source particles...\n", - "\n", - " ===========================================================================\n", - " ====================> K EIGENVALUE SIMULATION <====================\n", - " ===========================================================================\n", - "\n", - " Bat./Gen. k Average k \n", - " ========= ======== ==================== \n", - " 1/1 1.22593 \n", - " 2/1 1.24245 \n", - " 3/1 1.24545 \n", - " 4/1 1.21868 \n", - " 5/1 1.22429 \n", - " 6/1 1.22607 \n", - " 7/1 1.21456 \n", - " 8/1 1.23816 \n", - " 9/1 1.25060 \n", - " 10/1 1.22806 \n", - " 11/1 1.19821 \n", - " 12/1 1.19897 1.19859 +/- 0.00038\n", - " 13/1 1.22119 1.20612 +/- 0.00754\n", - " 14/1 1.20701 1.20634 +/- 0.00533\n", - " 15/1 1.24784 1.21464 +/- 0.00927\n", - " 16/1 1.22413 1.21622 +/- 0.00773\n", - " 17/1 1.25050 1.22112 +/- 0.00817\n", - " 18/1 1.22006 1.22099 +/- 0.00707\n", - " 19/1 1.22813 1.22178 +/- 0.00629\n", - " 20/1 1.22791 1.22239 +/- 0.00566\n", - " 21/1 1.22729 1.22284 +/- 0.00514\n", - " 22/1 1.19867 1.22083 +/- 0.00510\n", - " 23/1 1.23796 1.22214 +/- 0.00488\n", - " 24/1 1.22412 1.22228 +/- 0.00452\n", - " 25/1 1.22638 1.22256 +/- 0.00421\n", - " 26/1 1.22181 1.22251 +/- 0.00394\n", - " 27/1 1.19055 1.22063 +/- 0.00415\n", - " 28/1 1.20683 1.21986 +/- 0.00399\n", - " 29/1 1.21689 1.21971 +/- 0.00378\n", - " 30/1 1.23670 1.22056 +/- 0.00368\n", - " 31/1 1.21396 1.22024 +/- 0.00352\n", - " 32/1 1.21389 1.21995 +/- 0.00337\n", - " 33/1 1.24649 1.22111 +/- 0.00342\n", - " 34/1 1.23204 1.22156 +/- 0.00330\n", - " 35/1 1.20768 1.22101 +/- 0.00322\n", - " 36/1 1.22271 1.22107 +/- 0.00309\n", - " 37/1 1.21796 1.22096 +/- 0.00298\n", - " 38/1 1.23842 1.22158 +/- 0.00293\n", - " 39/1 1.23080 1.22190 +/- 0.00285\n", - " 40/1 1.23572 1.22236 +/- 0.00279\n", - " 41/1 1.21691 1.22218 +/- 0.00271\n", - " 42/1 1.24616 1.22293 +/- 0.00272\n", - " 43/1 1.21903 1.22282 +/- 0.00264\n", - " 44/1 1.22967 1.22302 +/- 0.00257\n", - " 45/1 1.22053 1.22295 +/- 0.00250\n", - " 46/1 1.24087 1.22344 +/- 0.00248\n", - " 47/1 1.20251 1.22288 +/- 0.00248\n", - " 48/1 1.20331 1.22236 +/- 0.00246\n", - " 49/1 1.22724 1.22249 +/- 0.00240\n", - " 50/1 1.24798 1.22313 +/- 0.00243\n", - " Triggers unsatisfied, max unc./thresh. is 1.32110 for scatter-p1 in tally 10054\n", - " The estimated number of batches is 80\n", - " Creating state point statepoint.050.h5...\n", - " 51/1 1.22253 1.22311 +/- 0.00237\n", - " 52/1 1.24330 1.22359 +/- 0.00236\n", - " 53/1 1.23251 1.22380 +/- 0.00231\n", - " 54/1 1.21133 1.22352 +/- 0.00228\n", - " 55/1 1.24503 1.22399 +/- 0.00228\n", - " 56/1 1.22013 1.22391 +/- 0.00223\n", - " 57/1 1.23877 1.22423 +/- 0.00220\n", - " 58/1 1.23793 1.22451 +/- 0.00218\n", - " 59/1 1.21018 1.22422 +/- 0.00215\n", - " 60/1 1.22417 1.22422 +/- 0.00211\n", - " 61/1 1.23094 1.22435 +/- 0.00207\n", - " 62/1 1.23310 1.22452 +/- 0.00204\n", - " 63/1 1.22488 1.22453 +/- 0.00200\n", - " 64/1 1.22702 1.22457 +/- 0.00196\n", - " 65/1 1.18834 1.22391 +/- 0.00204\n", - " 66/1 1.23112 1.22404 +/- 0.00200\n", - " 67/1 1.21611 1.22390 +/- 0.00197\n", - " 68/1 1.22513 1.22392 +/- 0.00194\n", - " 69/1 1.21741 1.22381 +/- 0.00191\n", - " 70/1 1.22484 1.22383 +/- 0.00188\n", - " 71/1 1.19662 1.22338 +/- 0.00190\n", - " 72/1 1.23315 1.22354 +/- 0.00187\n", - " 73/1 1.22796 1.22361 +/- 0.00185\n", - " 74/1 1.21417 1.22346 +/- 0.00182\n", - " 75/1 1.21020 1.22326 +/- 0.00181\n", - " 76/1 1.23413 1.22343 +/- 0.00179\n", - " 77/1 1.22184 1.22340 +/- 0.00176\n", - " 78/1 1.20309 1.22310 +/- 0.00176\n", - " 79/1 1.23458 1.22327 +/- 0.00174\n", - " 80/1 1.20724 1.22304 +/- 0.00173\n", - " Triggers satisfied for batch 80\n", - " Creating state point statepoint.080.h5...\n", - "\n", - " ===========================================================================\n", - " ======================> SIMULATION FINISHED <======================\n", - " ===========================================================================\n", - "\n", - "\n", - " =======================> TIMING STATISTICS <=======================\n", - "\n", - " Total time for initialization = 4.3200E-01 seconds\n", - " Reading cross sections = 9.1000E-02 seconds\n", - " Total time in simulation = 2.2239E+02 seconds\n", - " Time in transport only = 2.2234E+02 seconds\n", - " Time in inactive batches = 1.3715E+01 seconds\n", - " Time in active batches = 2.0867E+02 seconds\n", - " Time synchronizing fission bank = 2.3000E-02 seconds\n", - " Sampling source sites = 1.7000E-02 seconds\n", - " SEND/RECV source sites = 6.0000E-03 seconds\n", - " Time accumulating tallies = 2.0000E-03 seconds\n", - " Total time for finalization = 9.0000E-03 seconds\n", - " Total time elapsed = 2.2288E+02 seconds\n", - " Calculation Rate (inactive) = 7291.29 neutrons/second\n", - " Calculation Rate (active) = 1916.88 neutrons/second\n", - "\n", - " ============================> RESULTS <============================\n", - "\n", - " k-effective (Collision) = 1.22327 +/- 0.00148\n", - " k-effective (Track-length) = 1.22304 +/- 0.00173\n", - " k-effective (Absorption) = 1.22407 +/- 0.00129\n", - " Combined k-effective = 1.22373 +/- 0.00113\n", - " Leakage Fraction = 0.00000 +/- 0.00000\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Run OpenMC\n", "executor = openmc.Executor()\n", @@ -629,7 +461,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": { "collapsed": false }, @@ -648,7 +480,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": { "collapsed": true }, @@ -668,7 +500,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": { "collapsed": false }, @@ -703,46 +535,11 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Multi-Group XS\n", - "\tReaction Type =\tnu-fission\n", - "\tDomain Type =\tcell\n", - "\tDomain ID =\t10000\n", - "\tNuclide =\tU-235\n", - "\tCross Sections [barns]:\n", - " Group 1 [0.821 - 20.0 MeV]:\t3.31e+00 +/- 1.88e-01%\n", - " Group 2 [0.00553 - 0.821 MeV]:\t3.97e+00 +/- 1.24e-01%\n", - " Group 3 [4e-06 - 0.00553 MeV]:\t5.50e+01 +/- 2.02e-01%\n", - " Group 4 [6.25e-07 - 4e-06 MeV]:\t8.83e+01 +/- 3.56e-01%\n", - " Group 5 [2.8e-07 - 6.25e-07 MeV]:\t2.90e+02 +/- 4.54e-01%\n", - " Group 6 [1.4e-07 - 2.8e-07 MeV]:\t4.49e+02 +/- 4.10e-01%\n", - " Group 7 [5.8e-08 - 1.4e-07 MeV]:\t6.87e+02 +/- 2.56e-01%\n", - " Group 8 [0.0 - 5.8e-08 MeV]:\t1.44e+03 +/- 2.82e-01%\n", - "\n", - "\tNuclide =\tU-238\n", - "\tCross Sections [barns]:\n", - " Group 1 [0.821 - 20.0 MeV]:\t1.06e+00 +/- 2.30e-01%\n", - " Group 2 [0.00553 - 0.821 MeV]:\t1.21e-03 +/- 2.25e-01%\n", - " Group 3 [4e-06 - 0.00553 MeV]:\t5.82e-04 +/- 3.09e+00%\n", - " Group 4 [6.25e-07 - 4e-06 MeV]:\t6.54e-06 +/- 3.27e-01%\n", - " Group 5 [2.8e-07 - 6.25e-07 MeV]:\t1.07e-05 +/- 4.39e-01%\n", - " Group 6 [1.4e-07 - 2.8e-07 MeV]:\t1.55e-05 +/- 4.12e-01%\n", - " Group 7 [5.8e-08 - 1.4e-07 MeV]:\t2.30e-05 +/- 2.57e-01%\n", - " Group 8 [0.0 - 5.8e-08 MeV]:\t4.24e-05 +/- 2.81e-01%\n", - "\n", - "\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "nufission = xs_library[fuel_cell.id]['nu-fission']\n", "nufission.print_xs(xs_type='micro', nuclides=['U-235', 'U-238'])" @@ -757,34 +554,11 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Multi-Group XS\n", - "\tReaction Type =\tnu-fission\n", - "\tDomain Type =\tcell\n", - "\tDomain ID =\t10000\n", - "\tCross Sections [cm^-1]:\n", - " Group 1 [0.821 - 20.0 MeV]:\t2.52e-02 +/- 2.19e-01%\n", - " Group 2 [0.00553 - 0.821 MeV]:\t1.51e-03 +/- 1.22e-01%\n", - " Group 3 [4e-06 - 0.00553 MeV]:\t2.06e-02 +/- 2.02e-01%\n", - " Group 4 [6.25e-07 - 4e-06 MeV]:\t3.31e-02 +/- 3.56e-01%\n", - " Group 5 [2.8e-07 - 6.25e-07 MeV]:\t1.09e-01 +/- 4.54e-01%\n", - " Group 6 [1.4e-07 - 2.8e-07 MeV]:\t1.69e-01 +/- 4.10e-01%\n", - " Group 7 [5.8e-08 - 1.4e-07 MeV]:\t2.58e-01 +/- 2.56e-01%\n", - " Group 8 [0.0 - 5.8e-08 MeV]:\t5.40e-01 +/- 2.82e-01%\n", - "\n", - "\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "nufission = xs_library[fuel_cell.id]['nu-fission']\n", "nufission.print_xs(xs_type='macro', nuclides='sum')" @@ -799,152 +573,11 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", - " return c.reshape(shape_out)\n", - "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", - " return c.reshape(shape_out)\n", - "/usr/local/lib/python2.7/dist-packages/openmc-0.7.1-py2.7.egg/openmc/mgxs/mgxs.py:1303: FutureWarning: sort(columns=....) is deprecated, use sort_values(by=.....)\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cellgroup ingroup outnuclidemeanstd. dev.
1261000211H-10.2340220.003645
1271000211O-161.5603050.006280
1241000212H-11.5880250.002815
1251000212O-160.2851470.001392
1221000213H-10.0107760.000186
1231000213O-160.0000000.000000
1201000214H-10.0000230.000010
1211000214O-160.0000000.000000
1181000215H-10.0000000.000000
1191000215O-160.0000000.000000
\n", - "
" - ], - "text/plain": [ - " cell group in group out nuclide mean std. dev.\n", - "126 10002 1 1 H-1 0.234022 0.003645\n", - "127 10002 1 1 O-16 1.560305 0.006280\n", - "124 10002 1 2 H-1 1.588025 0.002815\n", - "125 10002 1 2 O-16 0.285147 0.001392\n", - "122 10002 1 3 H-1 0.010776 0.000186\n", - "123 10002 1 3 O-16 0.000000 0.000000\n", - "120 10002 1 4 H-1 0.000023 0.000010\n", - "121 10002 1 4 O-16 0.000000 0.000000\n", - "118 10002 1 5 H-1 0.000000 0.000000\n", - "119 10002 1 5 O-16 0.000000 0.000000" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "nuscatter = xs_library[moderator_cell.id]['nu-scatter']\n", "df = nuscatter.get_pandas_dataframe(xs_type='micro')\n", @@ -960,7 +593,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": { "collapsed": true }, @@ -982,143 +615,22 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Multi-Group XS\n", - "\tReaction Type =\ttransport\n", - "\tDomain Type =\tcell\n", - "\tDomain ID =\t10000\n", - "\tNuclide =\tU-235\n", - "\tCross Sections [cm^-1]:\n", - " Group 1 [6.25e-07 - 20.0 MeV]:\t7.81e-03 +/- 4.75e-01%\n", - " Group 2 [0.0 - 6.25e-07 MeV]:\t1.82e-01 +/- 1.89e-01%\n", - "\n", - "\tNuclide =\tU-238\n", - "\tCross Sections [cm^-1]:\n", - " Group 1 [6.25e-07 - 20.0 MeV]:\t2.17e-01 +/- 1.31e-01%\n", - " Group 2 [0.0 - 6.25e-07 MeV]:\t2.53e-01 +/- 2.08e-01%\n", - "\n", - "\tNuclide =\tO-16\n", - "\tCross Sections [cm^-1]:\n", - " Group 1 [6.25e-07 - 20.0 MeV]:\t1.45e-01 +/- 1.50e-01%\n", - " Group 2 [0.0 - 6.25e-07 MeV]:\t1.74e-01 +/- 2.66e-01%\n", - "\n", - "\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "condensed_xs.print_xs()" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", - " return c.reshape(shape_out)\n", - "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", - " return c.reshape(shape_out)\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cellgroup innuclidemeanstd. dev.
3100001U-23520.8281270.098842
4100001U-2389.5822950.012550
5100001O-163.1573580.004725
0100002U-235485.2176490.916465
1100002U-23811.1760810.023196
2100002O-163.7881670.010090
\n", - "
" - ], - "text/plain": [ - " cell group in nuclide mean std. dev.\n", - "3 10000 1 U-235 20.828127 0.098842\n", - "4 10000 1 U-238 9.582295 0.012550\n", - "5 10000 1 O-16 3.157358 0.004725\n", - "0 10000 2 U-235 485.217649 0.916465\n", - "1 10000 2 U-238 11.176081 0.023196\n", - "2 10000 2 O-16 3.788167 0.010090" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df = condensed_xs.get_pandas_dataframe(xs_type='micro')\n", "df" @@ -1140,7 +652,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1159,7 +671,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1204,182 +716,11 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ NORMAL ] Importing ray tracing data from file...\n", - "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.574633\tres = 5.948E-317\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.679931\tres = 4.254E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.660910\tres = 1.832E-01\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.658975\tres = 2.797E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.642976\tres = 2.928E-03\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.625710\tres = 2.428E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.606520\tres = 2.685E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.587277\tres = 3.067E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.568777\tres = 3.173E-02\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.551415\tres = 3.150E-02\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.535708\tres = 3.052E-02\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.521916\tres = 2.849E-02\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.510221\tres = 2.575E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.500691\tres = 2.241E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.493392\tres = 1.868E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.488317\tres = 1.458E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.485438\tres = 1.028E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.484705\tres = 5.896E-03\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.486045\tres = 1.510E-03\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.489362\tres = 2.766E-03\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.494546\tres = 6.824E-03\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.501481\tres = 1.059E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.510041\tres = 1.402E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.520094\tres = 1.707E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.531507\tres = 1.971E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.544144\tres = 2.194E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.557872\tres = 2.378E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.572557\tres = 2.523E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.588072\tres = 2.632E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.604293\tres = 2.710E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.621101\tres = 2.758E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.638382\tres = 2.781E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.656032\tres = 2.782E-02\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.673950\tres = 2.765E-02\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.692043\tres = 2.731E-02\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.710227\tres = 2.685E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.728423\tres = 2.628E-02\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.746558\tres = 2.562E-02\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.764569\tres = 2.490E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.782396\tres = 2.412E-02\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.799989\tres = 2.332E-02\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.817301\tres = 2.249E-02\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.834292\tres = 2.164E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.850927\tres = 2.079E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.867177\tres = 1.994E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.883017\tres = 1.910E-02\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.898427\tres = 1.827E-02\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.913389\tres = 1.745E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.927891\tres = 1.665E-02\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.941925\tres = 1.588E-02\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.955483\tres = 1.512E-02\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.968562\tres = 1.439E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.981161\tres = 1.369E-02\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.993282\tres = 1.301E-02\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.004928\tres = 1.235E-02\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.016104\tres = 1.172E-02\n", - "[ NORMAL ] Iteration 56:\tk_eff = 1.026816\tres = 1.112E-02\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.037073\tres = 1.054E-02\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.046883\tres = 9.989E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.056257\tres = 9.460E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.065205\tres = 8.954E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.073739\tres = 8.472E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.081871\tres = 8.012E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.089613\tres = 7.573E-03\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.096979\tres = 7.156E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.103980\tres = 6.760E-03\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.110631\tres = 6.382E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.116943\tres = 6.024E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.122931\tres = 5.684E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.128607\tres = 5.361E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.133984\tres = 5.055E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.139075\tres = 4.764E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.143892\tres = 4.489E-03\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.148447\tres = 4.229E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.152752\tres = 3.982E-03\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.156819\tres = 3.749E-03\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.160659\tres = 3.528E-03\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.164282\tres = 3.319E-03\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.167701\tres = 3.122E-03\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.170923\tres = 2.936E-03\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.173961\tres = 2.760E-03\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.176822\tres = 2.594E-03\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.179516\tres = 2.437E-03\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.182052\tres = 2.289E-03\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.184438\tres = 2.150E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.186682\tres = 2.019E-03\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.188792\tres = 1.895E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.190775\tres = 1.778E-03\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.192639\tres = 1.668E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.194389\tres = 1.565E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.196032\tres = 1.468E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.197575\tres = 1.376E-03\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.199023\tres = 1.290E-03\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.200381\tres = 1.209E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.201654\tres = 1.133E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.202849\tres = 1.061E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.203968\tres = 9.939E-04\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.205017\tres = 9.307E-04\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.206000\tres = 8.714E-04\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.206921\tres = 8.157E-04\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.207783\tres = 7.634E-04\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.208590\tres = 7.144E-04\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.209346\tres = 6.684E-04\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.210053\tres = 6.252E-04\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.210715\tres = 5.848E-04\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.211334\tres = 5.468E-04\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.211913\tres = 5.113E-04\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.212454\tres = 4.779E-04\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.212960\tres = 4.467E-04\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.213434\tres = 4.175E-04\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.213876\tres = 3.901E-04\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.214289\tres = 3.644E-04\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.214675\tres = 3.404E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.215036\tres = 3.180E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.215373\tres = 2.969E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.215687\tres = 2.773E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.215981\tres = 2.589E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.216255\tres = 2.416E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.216511\tres = 2.256E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.216750\tres = 2.105E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.216973\tres = 1.964E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.217181\tres = 1.833E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.217376\tres = 1.710E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.217557\tres = 1.595E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.217726\tres = 1.488E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.217883\tres = 1.388E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.218030\tres = 1.294E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.218167\tres = 1.207E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.218295\tres = 1.125E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.218414\tres = 1.049E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.218525\tres = 9.777E-05\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.218629\tres = 9.113E-05\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.218725\tres = 8.494E-05\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.218815\tres = 7.916E-05\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.218899\tres = 7.376E-05\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.218977\tres = 6.873E-05\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.219050\tres = 6.404E-05\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.219117\tres = 5.966E-05\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.219180\tres = 5.557E-05\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.219239\tres = 5.177E-05\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.219294\tres = 4.822E-05\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.219345\tres = 4.491E-05\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.219392\tres = 4.182E-05\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.219437\tres = 3.894E-05\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.219478\tres = 3.626E-05\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.219516\tres = 3.376E-05\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.219552\tres = 3.144E-05\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.219585\tres = 2.927E-05\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.219616\tres = 2.724E-05\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.219645\tres = 2.536E-05\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.219672\tres = 2.361E-05\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.219696\tres = 2.197E-05\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.219720\tres = 2.045E-05\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.219741\tres = 1.903E-05\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.219761\tres = 1.771E-05\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.219780\tres = 1.648E-05\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.219797\tres = 1.534E-05\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.219814\tres = 1.427E-05\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.219829\tres = 1.328E-05\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.219843\tres = 1.235E-05\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.219856\tres = 1.149E-05\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.219868\tres = 1.069E-05\n" - ] - } - ], + "outputs": [], "source": [ "# Generate tracks for OpenMOC\n", "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=128, spacing=0.1)\n", @@ -1399,21 +740,11 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "openmc keff = 1.223729\n", - "openmoc keff = 1.219868\n", - "bias [pcm]: -386.1\n" - ] - } - ], + "outputs": [], "source": [ "# Print report of keff and bias with OpenMC\n", "openmoc_keff = solver.getKeff()\n", @@ -1434,7 +765,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1474,251 +805,11 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ NORMAL ] Importing ray tracing data from file...\n", - "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.495594\tres = 5.948E-317\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.557312\tres = 5.044E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.518115\tres = 1.245E-01\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.509016\tres = 7.033E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.496279\tres = 1.756E-02\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.488357\tres = 2.502E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.482659\tres = 1.596E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.479523\tres = 1.167E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.478568\tres = 6.497E-03\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.479590\tres = 1.991E-03\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.482388\tres = 2.136E-03\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.486774\tres = 5.834E-03\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.492575\tres = 9.091E-03\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.499632\tres = 1.192E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.507799\tres = 1.433E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.516943\tres = 1.635E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.526942\tres = 1.801E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.537681\tres = 1.934E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.549060\tres = 2.038E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.560984\tres = 2.116E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.573368\tres = 2.172E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.586133\tres = 2.207E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.599207\tres = 2.226E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.612528\tres = 2.231E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.626035\tres = 2.223E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.639676\tres = 2.205E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.653402\tres = 2.179E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.667170\tres = 2.146E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.680942\tres = 2.107E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.694681\tres = 2.064E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.708356\tres = 2.018E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.721940\tres = 1.969E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.735406\tres = 1.918E-02\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.748734\tres = 1.865E-02\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.761904\tres = 1.812E-02\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.774897\tres = 1.759E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.787700\tres = 1.705E-02\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.800299\tres = 1.652E-02\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.812684\tres = 1.600E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.824844\tres = 1.547E-02\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.836772\tres = 1.496E-02\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.848462\tres = 1.446E-02\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.859908\tres = 1.397E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.871105\tres = 1.349E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.882052\tres = 1.302E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.892745\tres = 1.257E-02\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.903184\tres = 1.212E-02\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.913367\tres = 1.169E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.923297\tres = 1.128E-02\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.932972\tres = 1.087E-02\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.942394\tres = 1.048E-02\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.951566\tres = 1.010E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.960490\tres = 9.733E-03\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.969168\tres = 9.378E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 0.977604\tres = 9.035E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 0.985800\tres = 8.704E-03\n", - "[ NORMAL ] Iteration 56:\tk_eff = 0.993761\tres = 8.384E-03\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.001491\tres = 8.076E-03\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.008992\tres = 7.778E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.016271\tres = 7.490E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.023330\tres = 7.213E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.030174\tres = 6.946E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.036809\tres = 6.688E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.043238\tres = 6.440E-03\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.049466\tres = 6.201E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.055498\tres = 5.970E-03\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.061339\tres = 5.748E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.066993\tres = 5.534E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.072465\tres = 5.327E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.077760\tres = 5.129E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.082882\tres = 4.937E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.087837\tres = 4.753E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.092628\tres = 4.575E-03\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.097260\tres = 4.404E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.101737\tres = 4.239E-03\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.106065\tres = 4.081E-03\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.110247\tres = 3.928E-03\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.114288\tres = 3.781E-03\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.118191\tres = 3.639E-03\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.121961\tres = 3.503E-03\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.125603\tres = 3.372E-03\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.129119\tres = 3.245E-03\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.132513\tres = 3.124E-03\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.135790\tres = 3.007E-03\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.138954\tres = 2.894E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.142007\tres = 2.785E-03\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.144953\tres = 2.681E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.147796\tres = 2.580E-03\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.150539\tres = 2.483E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.153185\tres = 2.390E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.155738\tres = 2.300E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.158200\tres = 2.214E-03\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.160575\tres = 2.130E-03\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.162865\tres = 2.050E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.165073\tres = 1.973E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.167202\tres = 1.899E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.169255\tres = 1.828E-03\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.171234\tres = 1.759E-03\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.173142\tres = 1.693E-03\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.174980\tres = 1.629E-03\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.176753\tres = 1.567E-03\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.178461\tres = 1.508E-03\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.180107\tres = 1.452E-03\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.181694\tres = 1.397E-03\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.183222\tres = 1.344E-03\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.184695\tres = 1.294E-03\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.186115\tres = 1.245E-03\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.187482\tres = 1.198E-03\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.188799\tres = 1.153E-03\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.190068\tres = 1.109E-03\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.191290\tres = 1.067E-03\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.192468\tres = 1.027E-03\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.193602\tres = 9.883E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.194694\tres = 9.510E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.195746\tres = 9.151E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.196759\tres = 8.805E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.197735\tres = 8.473E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.198674\tres = 8.152E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.199579\tres = 7.844E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.200450\tres = 7.548E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.201289\tres = 7.262E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.202097\tres = 6.988E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.202874\tres = 6.723E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.203623\tres = 6.469E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.204344\tres = 6.224E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.205038\tres = 5.989E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.205706\tres = 5.762E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.206349\tres = 5.544E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.206968\tres = 5.334E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.207564\tres = 5.132E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.208138\tres = 4.938E-04\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.208690\tres = 4.751E-04\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.209221\tres = 4.570E-04\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.209733\tres = 4.397E-04\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.210225\tres = 4.231E-04\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.210699\tres = 4.070E-04\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.211155\tres = 3.916E-04\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.211594\tres = 3.767E-04\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.212017\tres = 3.624E-04\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.212423\tres = 3.487E-04\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.212815\tres = 3.355E-04\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.213191\tres = 3.227E-04\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.213554\tres = 3.105E-04\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.213902\tres = 2.987E-04\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.214238\tres = 2.874E-04\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.214561\tres = 2.764E-04\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.214872\tres = 2.659E-04\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.215171\tres = 2.558E-04\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.215458\tres = 2.461E-04\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.215735\tres = 2.368E-04\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.216002\tres = 2.278E-04\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.216258\tres = 2.191E-04\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.216504\tres = 2.108E-04\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.216742\tres = 2.028E-04\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.216970\tres = 1.951E-04\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.217190\tres = 1.876E-04\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.217401\tres = 1.805E-04\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.217604\tres = 1.736E-04\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.217800\tres = 1.670E-04\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.217988\tres = 1.607E-04\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.218169\tres = 1.546E-04\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.218344\tres = 1.487E-04\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.218511\tres = 1.430E-04\n", - "[ NORMAL ] Iteration 163:\tk_eff = 1.218673\tres = 1.376E-04\n", - "[ NORMAL ] Iteration 164:\tk_eff = 1.218828\tres = 1.324E-04\n", - "[ NORMAL ] Iteration 165:\tk_eff = 1.218977\tres = 1.273E-04\n", - "[ NORMAL ] Iteration 166:\tk_eff = 1.219121\tres = 1.225E-04\n", - "[ NORMAL ] Iteration 167:\tk_eff = 1.219259\tres = 1.178E-04\n", - "[ NORMAL ] Iteration 168:\tk_eff = 1.219392\tres = 1.133E-04\n", - "[ NORMAL ] Iteration 169:\tk_eff = 1.219520\tres = 1.090E-04\n", - "[ NORMAL ] Iteration 170:\tk_eff = 1.219643\tres = 1.049E-04\n", - "[ NORMAL ] Iteration 171:\tk_eff = 1.219761\tres = 1.009E-04\n", - "[ NORMAL ] Iteration 172:\tk_eff = 1.219875\tres = 9.702E-05\n", - "[ NORMAL ] Iteration 173:\tk_eff = 1.219984\tres = 9.332E-05\n", - "[ NORMAL ] Iteration 174:\tk_eff = 1.220090\tres = 8.976E-05\n", - "[ NORMAL ] Iteration 175:\tk_eff = 1.220191\tres = 8.634E-05\n", - "[ NORMAL ] Iteration 176:\tk_eff = 1.220288\tres = 8.305E-05\n", - "[ NORMAL ] Iteration 177:\tk_eff = 1.220382\tres = 7.989E-05\n", - "[ NORMAL ] Iteration 178:\tk_eff = 1.220472\tres = 7.684E-05\n", - "[ NORMAL ] Iteration 179:\tk_eff = 1.220559\tres = 7.392E-05\n", - "[ NORMAL ] Iteration 180:\tk_eff = 1.220643\tres = 7.110E-05\n", - "[ NORMAL ] Iteration 181:\tk_eff = 1.220723\tres = 6.839E-05\n", - "[ NORMAL ] Iteration 182:\tk_eff = 1.220800\tres = 6.578E-05\n", - "[ NORMAL ] Iteration 183:\tk_eff = 1.220874\tres = 6.327E-05\n", - "[ NORMAL ] Iteration 184:\tk_eff = 1.220946\tres = 6.086E-05\n", - "[ NORMAL ] Iteration 185:\tk_eff = 1.221015\tres = 5.854E-05\n", - "[ NORMAL ] Iteration 186:\tk_eff = 1.221081\tres = 5.631E-05\n", - "[ NORMAL ] Iteration 187:\tk_eff = 1.221144\tres = 5.416E-05\n", - "[ NORMAL ] Iteration 188:\tk_eff = 1.221206\tres = 5.209E-05\n", - "[ NORMAL ] Iteration 189:\tk_eff = 1.221264\tres = 5.011E-05\n", - "[ NORMAL ] Iteration 190:\tk_eff = 1.221321\tres = 4.820E-05\n", - "[ NORMAL ] Iteration 191:\tk_eff = 1.221375\tres = 4.636E-05\n", - "[ NORMAL ] Iteration 192:\tk_eff = 1.221428\tres = 4.459E-05\n", - "[ NORMAL ] Iteration 193:\tk_eff = 1.221478\tres = 4.289E-05\n", - "[ NORMAL ] Iteration 194:\tk_eff = 1.221527\tres = 4.125E-05\n", - "[ NORMAL ] Iteration 195:\tk_eff = 1.221573\tres = 3.968E-05\n", - "[ NORMAL ] Iteration 196:\tk_eff = 1.221618\tres = 3.816E-05\n", - "[ NORMAL ] Iteration 197:\tk_eff = 1.221661\tres = 3.671E-05\n", - "[ NORMAL ] Iteration 198:\tk_eff = 1.221703\tres = 3.531E-05\n", - "[ NORMAL ] Iteration 199:\tk_eff = 1.221743\tres = 3.396E-05\n", - "[ NORMAL ] Iteration 200:\tk_eff = 1.221781\tres = 3.266E-05\n", - "[ NORMAL ] Iteration 201:\tk_eff = 1.221818\tres = 3.142E-05\n", - "[ NORMAL ] Iteration 202:\tk_eff = 1.221853\tres = 3.022E-05\n", - "[ NORMAL ] Iteration 203:\tk_eff = 1.221888\tres = 2.906E-05\n", - "[ NORMAL ] Iteration 204:\tk_eff = 1.221920\tres = 2.795E-05\n", - "[ NORMAL ] Iteration 205:\tk_eff = 1.221952\tres = 2.689E-05\n", - "[ NORMAL ] Iteration 206:\tk_eff = 1.221982\tres = 2.586E-05\n", - "[ NORMAL ] Iteration 207:\tk_eff = 1.222012\tres = 2.487E-05\n", - "[ NORMAL ] Iteration 208:\tk_eff = 1.222040\tres = 2.392E-05\n", - "[ NORMAL ] Iteration 209:\tk_eff = 1.222067\tres = 2.301E-05\n", - "[ NORMAL ] Iteration 210:\tk_eff = 1.222093\tres = 2.213E-05\n", - "[ NORMAL ] Iteration 211:\tk_eff = 1.222118\tres = 2.129E-05\n", - "[ NORMAL ] Iteration 212:\tk_eff = 1.222142\tres = 2.047E-05\n", - "[ NORMAL ] Iteration 213:\tk_eff = 1.222165\tres = 1.969E-05\n", - "[ NORMAL ] Iteration 214:\tk_eff = 1.222187\tres = 1.894E-05\n", - "[ NORMAL ] Iteration 215:\tk_eff = 1.222209\tres = 1.822E-05\n", - "[ NORMAL ] Iteration 216:\tk_eff = 1.222229\tres = 1.752E-05\n", - "[ NORMAL ] Iteration 217:\tk_eff = 1.222249\tres = 1.685E-05\n", - "[ NORMAL ] Iteration 218:\tk_eff = 1.222268\tres = 1.621E-05\n", - "[ NORMAL ] Iteration 219:\tk_eff = 1.222287\tres = 1.559E-05\n", - "[ NORMAL ] Iteration 220:\tk_eff = 1.222304\tres = 1.499E-05\n", - "[ NORMAL ] Iteration 221:\tk_eff = 1.222321\tres = 1.442E-05\n", - "[ NORMAL ] Iteration 222:\tk_eff = 1.222337\tres = 1.387E-05\n", - "[ NORMAL ] Iteration 223:\tk_eff = 1.222353\tres = 1.334E-05\n", - "[ NORMAL ] Iteration 224:\tk_eff = 1.222368\tres = 1.283E-05\n", - "[ NORMAL ] Iteration 225:\tk_eff = 1.222383\tres = 1.234E-05\n", - "[ NORMAL ] Iteration 226:\tk_eff = 1.222397\tres = 1.187E-05\n", - "[ NORMAL ] Iteration 227:\tk_eff = 1.222410\tres = 1.142E-05\n", - "[ NORMAL ] Iteration 228:\tk_eff = 1.222423\tres = 1.098E-05\n", - "[ NORMAL ] Iteration 229:\tk_eff = 1.222435\tres = 1.056E-05\n", - "[ NORMAL ] Iteration 230:\tk_eff = 1.222447\tres = 1.016E-05\n" - ] - } - ], + "outputs": [], "source": [ "# Generate tracks for OpenMOC\n", "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=128, spacing=0.1)\n", @@ -1731,21 +822,11 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "openmc keff = 1.223729\n", - "openmoc keff = 1.222447\n", - "bias [pcm]: -128.2\n" - ] - } - ], + "outputs": [], "source": [ "# Print report of keff and bias with OpenMC\n", "openmoc_keff = solver.getKeff()\n", @@ -1788,7 +869,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1814,32 +895,11 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "(9.9999999999999994e-12, 20.0)" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nRETE6eQvWE4Yr8iVHuYAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Create a loglog plot of the U-235 continuous-energy fission cross section \n", "plt.loglog(u235.energy, fission.sigma, color='b', linewidth=1)\n", @@ -1875,22 +935,11 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", - " return c.reshape(shape_out)\n", - "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n", - " return c.reshape(shape_out)\n" - ] - } - ], + "outputs": [], "source": [ "# Construct a Pandas DataFrame for the microscopic nu-scattering matrix\n", "nuscatter = xs_library[moderator_cell.id]['nu-scatter']\n", @@ -1918,22 +967,11 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "image/png": "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\nRK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Create plot of the H-1 scattering matrix\n", "fig = plt.subplot(121)\n", @@ -1981,7 +1019,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.6" + "version": "2.7.11" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index c3f19aa226..83d99976a8 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -32,7 +32,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python2.7/dist-packages/matplotlib/__init__.py:1318: UserWarning: This call to matplotlib.use() has no effect\n", + "/home/wboyd/anaconda2/lib/python2.7/site-packages/matplotlib/__init__.py:1350: UserWarning: This call to matplotlib.use() has no effect\n", "because the backend has already been chosen;\n", "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", "or matplotlib.backends is imported for the first time.\n", @@ -420,7 +420,6 @@ "plot = openmc.Plot(plot_id=1)\n", "plot.filename = 'materials-xy'\n", "plot.origin = [0, 0, 0]\n", - "plot.width = [21.5, 21.5]\n", "plot.pixels = [250, 250]\n", "plot.color = 'mat'\n", "\n", @@ -470,7 +469,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ABDg4MCdjYNQMAAASWSURBVGje7Zs7buMwEEBzieRc\naYaB48KVisSFj7Cn4BFU2I37LVan8BFc5ABb2ICtpSSaHP5EUqOAzsIOAjwEGjjiZ/hEDZ+eiJ9n\noHxe6fHvW4BPDmwHEMAaYBdAEb+5Amu/YNlyQLgP4xGhiG9avmwvsBF/t/FkY2vj69NLD1f41Z6Y\niw3Gvy728ceVuhLhwY8bA0fij8EgO/6wjH2pF/lKxvf3tNG3Z+BRt4oHh/Znt5bu+iQd+/Z/Xp8B\nmiO8X0X/n7KQNbWIZ1wMJjEUPwBuuI1hfcMZxv9Pj19/AexrYH84KASFV41nhe8Ku/4f+nSpu3eN\nsdadjpBLFPF6pIE76Hx4QeiMfy/yVQi/cf6mxx900jk4ScfGlc4/q9v8c9sPxhpN4wn3n+qepeqe\nAK5x/3WZfieGx+8h6Uv8DCNHeAfjv3Q8q0VjwJCesrFbP2X+7NZPidAjE7hAyGTSFOvnLX8erfw9\nYCV+BL4p7DL1gH3SNvK3Z/0Qn3HE64dn/eLifx1Fd/62eP4NVyLsJx1Cce2bf/7mfL+Kt6UB+ivt\nm+YasT88u6Yi2z+M+lrpT432J4F9pw+mZOH+rP3pLP2pEzFhaiCdzESGcOvBO5g/peMt6d2lYo39\nd0ivNUvwXyE6KhVb/ssh7r8LMRAs/1XrD0DcfxfiP8DrD54/AFV0/av6eP/6acQH/NcTr/KH6JCY\nCnezMOi/8v5H/be7f9N/tdNyluC/sv3V+rnWTvuxUNj/tbax81+u0fDfSuttOt7B/Ckd3zVvb7ra\nfzFq6XWxifqv0f8x/2XZ+PBfw39tFb5YyPTz//z+u9P+a+KnTvoO3sH4Lx3fiyzXTutgbxrgx8F/\nbdNNR+2/Uq/YuH9dLRXW60cVk14DK2P/aJkinQ7yDfZfR3pH/Feg47/532/6r196/cgVDu3/liK9\nDgLyX2260U5vMfr9dxvBh/+i+CzptVHE73V69WOj/ddBT/53toKdTV8j/5vrT9b+7/eun9P2f6P+\nm7T/G/GPkP/m481/6xHpHcNu/PJhKFbi18SFi2DhHcyf0vHYf09Sb4ON/iXR9d/J/U8Zf5dZxj91\n/s3ovzzqv3b+IfvvSNL1o5V/belNzP8P/5XxqdLhxdn9N6ZiQf+d6n8z+OeP919K+5P7nzr+Ss+f\n0vHU/EfNv8T8T11/frr/Uv1jFv+l+Ffp8V88ng9YwTT/pz5/EPuf+vz1H/pv1vM39fmfvP9A3f8o\nPn8Kx1P336j7f8T9x//Bf4n7z6T9b+r+O9l/qe8fSs+f0vHU91/U92+z+m/++8d7eX869f0v9f0z\n+f039f176fFfOp5xWv0Htf4E9fSU+hfsv1Pqb/D4h2n1P9T6I2r9E6n+ilr/Ra4/o9a/lZ4/peOp\n9ZcbYv0nsf70pXUe2rLqX19acv0ttf7XfmjOrT+2kxbE/Dd4fmZC/TW5/ptaf156/pSOp55/mNF/\nWx8y238vD//1+++k80fk80/U81elx3/peMZp5/+o5w8b2vlH7/7viP8mnJ/JPf9Zev/X9oes87fY\nf21MOf9LPn9MPf9cdv78A0xugrwgDfcHAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAxLTE0VDA4\nOjEyOjA5LTA2OjAwdS8nUQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMS0xNFQwODoxMjowOS0w\nNjowMARyn+0AAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEVyEhLpgJFNv8T///98\niBL0AAAAAWJLR0QDEQxM8gAAAAd0SU1FB+ADFxAKDyaI8r8AAAQUSURBVGje7VvNleMgDA4HSqAf\nl+CDnUNKSD8uIQdT5djBgIRESPztbua9RYeZPNAnCcdBP4jLpVOnTp2+TnaexJibRzE2z4MOn4UA\nt42NAq4KMPt4wWxnyeyeYxIfxvlEGJqkGnVVV//gE5v6m1+4AZuau5cL3Xiv3vuVTbgN7jcBI1Oz\nDXn5BNxzfGMmE0+RG/NE1ewiNz3iqQZeOmE3S3d6EJmHGl8uwBy8fpkEL5UZ1O8yy+V7MRF5icyk\nZi2/1chLJiKvf0xCjV/4A0i8PhlrEu+abHJXL2Ry3izYJl6fbEpmEpkFPgnOvFlmNpPjia40oeCJ\nGs/fypvEZ13JJopnD5Dgk2DCu07CTI4nuvwyCF3RJkvUsC+A8CY80eUV/FrFj8LWuCZXwVNb/WMU\nuqJNjiyTfoHM1jfxvoqfqvj5HfyxMMfwo3hMFG81PNX10PD5BWS2votfOv7X4MHv35zCv35/1ff/\nHTz6+znx+71o+4e2/xB8a//S9r/a/qXuv439k+2/1LDDVnX/JjKPZUrDXvmfmv8ghr3tvwaKvwre\nhv/l/lPz35r/r/lvMpHjBxJ/DMImHn/kWCnrMjn+SbqyTQvHp8BmbcRfSc3I8MlYGv9dJW+UWcZv\nJk6w+FPyRplLGcEf8SuNVaNMyhtjWiXTeDKzBCDE2iwmN0HPIuJns8f12ziVG2J6HqvvKcGeJ1xK\nCnlF8VbJnMQqOQmZKL5VJVeZ50oC5eS4UXIlq6c/QbLyVMRKnWZ9p06dOnX6HjnVK4m92lS2f6fU\n1RRXZSr+wyj+S6vfKWW6rL5gVnylrdTvzNMxi/rdEP5QNdfdzQsDQmFtZRPuibRUpgkxxSIc8FEs\n4/HLdKyCqrmHmKRYQIx1eP1uYP+JGhE/Wa1+Fz+q9Tu+gBTr0frdWAoiMWmxAKV+Z9Inm+PXj+p3\nF/Hpo/pd5mjW79T8IVuYPtbyB7V+lxnsKMys1u9y/kTwrfxJyd8uNL9V6ncsf1Prd/TxHnhi5qOV\nv7J5ucxq/hvzZzY/iGU263fs+Sj4Vv7fwDfrFwr+k/qHY/jxJV6t39D3y2p48n7dTuBb9aeO/3d4\n8PtH378/+v6f+f2Bv390/8H3PyL4zP6L7v+o/0H9H+p/Uf+Pxh9w/IPGX2j8h8afaPwLx99o/I/m\nH3D+g+ZfcP7XqVOnTp2+ROD5C3j+g54/gedf6Pkbev4Hnj+i55/o+St6/oueP4Pn3+j5O3r+j/Yf\noP0PaP8F2v8B9594Ydgn/S+/sX/udP/Rif6n3n/3n+P/Rv8dtanR//nt/jm0/xbt/8X7j+8S/0n/\nM9p/jfZ/o/3naP872n+P9v/D9w/Q+w/o/Qv0/gd8/wS9/4Lev4Hv/6D3j9D7T/D9q06dOnX6jH4A\n5sDOrAejcacAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDMtMjNUMTI6MTA6MTUtMDQ6MDCtXndd\nAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAzLTIzVDEyOjEwOjE1LTA0OjAw3APP4QAAAABJRU5E\nrkJggg==\n", "text/plain": [ "" ] @@ -560,7 +559,7 @@ "* `NuScatterMatrixXS` (`\"nu-scatter matrix\"`)\n", "* `Chi` (`\"chi\"`)\n", "\n", - "In this case, let's create the multi-group cross sections needed to run an OpenMOC simulation to verify the accuracy of our cross sections. In particular, we will define `\"transport\"`, `\"nu-fission\"`, `\"nu-scatter matrix\"` and `\"chi\"` cross sections for our `Library`.\n", + "In this case, let's create the multi-group cross sections needed to run an OpenMOC simulation to verify the accuracy of our cross sections. In particular, we will define `\"transport\"`, `\"nu-fission\"`, `'\"fission\"`, `\"nu-scatter matrix\"` and `\"chi\"` cross sections for our `Library`.\n", "\n", "**Note**: A variety of different approximate transport-corrected total multi-group cross sections (and corresponding scattering matrices) can be found in the literature. At the present time, the `openmc.mgxs` module only supports the `\"P0\"` transport correction. This correction can be turned on and off through the boolean `Library.correction` property which may take values of `\"P0\"` (default) or `None`." ] @@ -569,12 +568,12 @@ "cell_type": "code", "execution_count": 19, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ "# Specify multi-group cross section types to compute\n", - "mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi']" + "mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'fission', 'nu-scatter matrix', 'chi']" ] }, { @@ -681,7 +680,7 @@ "mesh.type = 'regular'\n", "mesh.dimension = [17, 17]\n", "mesh.lower_left = [-10.71, -10.71]\n", - "mesh.width = [1.26, 1.26]\n", + "mesh.upper_right = [+10.71, +10.71]\n", "\n", "# Instantiate tally Filter\n", "mesh_filter = openmc.Filter()\n", @@ -736,8 +735,10 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: ea9fb637f63f9374c7436456141afa850b84acf9\n", - " Date/Time: 2016-01-14 08:12:09\n", + " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", + " Date/Time: 2016-03-23 12:10:16\n", + " MPI Processes: 1\n", + " OpenMP Threads: 16\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -764,56 +765,56 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 1.02650 \n", - " 2/1 1.01386 \n", - " 3/1 1.01045 \n", - " 4/1 1.05511 \n", - " 5/1 1.04873 \n", - " 6/1 1.04558 \n", - " 7/1 1.03840 \n", - " 8/1 1.02086 \n", - " 9/1 1.08845 \n", - " 10/1 1.03932 \n", - " 11/1 1.01271 \n", - " 12/1 1.03448 1.02360 +/- 0.01088\n", - " 13/1 1.04395 1.03038 +/- 0.00925\n", - " 14/1 1.05477 1.03648 +/- 0.00894\n", - " 15/1 1.00485 1.03015 +/- 0.00938\n", - " 16/1 1.04523 1.03267 +/- 0.00806\n", - " 17/1 1.01328 1.02990 +/- 0.00735\n", - " 18/1 1.01476 1.02800 +/- 0.00664\n", - " 19/1 1.01490 1.02655 +/- 0.00604\n", - " 20/1 1.00926 1.02482 +/- 0.00567\n", - " 21/1 0.98504 1.02120 +/- 0.00627\n", - " 22/1 1.00397 1.01977 +/- 0.00591\n", - " 23/1 1.02556 1.02021 +/- 0.00545\n", - " 24/1 0.99808 1.01863 +/- 0.00529\n", - " 25/1 0.99638 1.01715 +/- 0.00514\n", - " 26/1 0.99615 1.01584 +/- 0.00499\n", - " 27/1 1.01843 1.01599 +/- 0.00469\n", - " 28/1 1.00315 1.01528 +/- 0.00447\n", - " 29/1 1.00633 1.01480 +/- 0.00426\n", - " 30/1 1.02159 1.01514 +/- 0.00405\n", - " 31/1 1.03395 1.01604 +/- 0.00396\n", - " 32/1 1.02672 1.01652 +/- 0.00381\n", - " 33/1 1.03778 1.01745 +/- 0.00375\n", - " 34/1 1.03807 1.01831 +/- 0.00369\n", - " 35/1 1.07854 1.02072 +/- 0.00428\n", - " 36/1 1.03524 1.02128 +/- 0.00415\n", - " 37/1 1.03100 1.02164 +/- 0.00401\n", - " 38/1 1.03853 1.02224 +/- 0.00391\n", - " 39/1 1.04089 1.02288 +/- 0.00383\n", - " 40/1 1.02150 1.02284 +/- 0.00370\n", - " 41/1 0.98470 1.02161 +/- 0.00379\n", - " 42/1 1.00658 1.02114 +/- 0.00370\n", - " 43/1 0.98652 1.02009 +/- 0.00373\n", - " 44/1 1.02787 1.02032 +/- 0.00363\n", - " 45/1 0.98800 1.01939 +/- 0.00364\n", - " 46/1 1.00286 1.01893 +/- 0.00357\n", - " 47/1 1.02559 1.01911 +/- 0.00348\n", - " 48/1 1.03729 1.01959 +/- 0.00342\n", - " 49/1 1.02538 1.01974 +/- 0.00333\n", - " 50/1 1.01478 1.01962 +/- 0.00325\n", + " 1/1 1.03852 \n", + " 2/1 0.99743 \n", + " 3/1 1.02987 \n", + " 4/1 1.04472 \n", + " 5/1 1.02183 \n", + " 6/1 1.05263 \n", + " 7/1 0.99048 \n", + " 8/1 1.02753 \n", + " 9/1 1.03159 \n", + " 10/1 1.04005 \n", + " 11/1 1.05278 \n", + " 12/1 1.02555 1.03917 +/- 0.01362\n", + " 13/1 0.99400 1.02411 +/- 0.01699\n", + " 14/1 1.03508 1.02685 +/- 0.01232\n", + " 15/1 1.00055 1.02159 +/- 0.01090\n", + " 16/1 1.01334 1.02022 +/- 0.00900\n", + " 17/1 0.99822 1.01707 +/- 0.00823\n", + " 18/1 1.01767 1.01715 +/- 0.00713\n", + " 19/1 1.05052 1.02086 +/- 0.00730\n", + " 20/1 1.03133 1.02190 +/- 0.00661\n", + " 21/1 1.04112 1.02365 +/- 0.00623\n", + " 22/1 1.04175 1.02516 +/- 0.00588\n", + " 23/1 1.01909 1.02469 +/- 0.00543\n", + " 24/1 1.07119 1.02801 +/- 0.00603\n", + " 25/1 0.97445 1.02444 +/- 0.00665\n", + " 26/1 1.04737 1.02588 +/- 0.00638\n", + " 27/1 1.04656 1.02709 +/- 0.00612\n", + " 28/1 1.03464 1.02751 +/- 0.00578\n", + " 29/1 1.02528 1.02739 +/- 0.00547\n", + " 30/1 1.02799 1.02742 +/- 0.00519\n", + " 31/1 1.05846 1.02890 +/- 0.00516\n", + " 32/1 1.03811 1.02932 +/- 0.00493\n", + " 33/1 1.00894 1.02843 +/- 0.00480\n", + " 34/1 1.02049 1.02810 +/- 0.00460\n", + " 35/1 1.00690 1.02726 +/- 0.00450\n", + " 36/1 1.03129 1.02741 +/- 0.00432\n", + " 37/1 0.98864 1.02597 +/- 0.00440\n", + " 38/1 1.00017 1.02505 +/- 0.00434\n", + " 39/1 1.03635 1.02544 +/- 0.00421\n", + " 40/1 1.07090 1.02696 +/- 0.00434\n", + " 41/1 1.03141 1.02710 +/- 0.00420\n", + " 42/1 1.02624 1.02707 +/- 0.00406\n", + " 43/1 1.02668 1.02706 +/- 0.00394\n", + " 44/1 1.05940 1.02801 +/- 0.00394\n", + " 45/1 1.01149 1.02754 +/- 0.00385\n", + " 46/1 1.06958 1.02871 +/- 0.00392\n", + " 47/1 1.02674 1.02866 +/- 0.00381\n", + " 48/1 1.02542 1.02857 +/- 0.00371\n", + " 49/1 1.03516 1.02874 +/- 0.00362\n", + " 50/1 1.06818 1.02973 +/- 0.00366\n", " Creating state point statepoint.50.h5...\n", "\n", " ===========================================================================\n", @@ -823,27 +824,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.1800E-01 seconds\n", - " Reading cross sections = 1.4300E-01 seconds\n", - " Total time in simulation = 4.1206E+01 seconds\n", - " Time in transport only = 4.1193E+01 seconds\n", - " Time in inactive batches = 4.1760E+00 seconds\n", - " Time in active batches = 3.7030E+01 seconds\n", - " Time synchronizing fission bank = 3.0000E-03 seconds\n", - " Sampling source sites = 2.0000E-03 seconds\n", + " Total time for initialization = 5.2200E-01 seconds\n", + " Reading cross sections = 1.6000E-01 seconds\n", + " Total time in simulation = 6.0800E+00 seconds\n", + " Time in transport only = 5.6140E+00 seconds\n", + " Time in inactive batches = 6.1300E-01 seconds\n", + " Time in active batches = 5.4670E+00 seconds\n", + " Time synchronizing fission bank = 2.0000E-03 seconds\n", + " Sampling source sites = 1.0000E-03 seconds\n", " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", + " Time accumulating tallies = 5.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 4.1648E+01 seconds\n", - " Calculation Rate (inactive) = 5986.59 neutrons/second\n", - " Calculation Rate (active) = 2700.51 neutrons/second\n", + " Total time elapsed = 6.6230E+00 seconds\n", + " Calculation Rate (inactive) = 40783.0 neutrons/second\n", + " Calculation Rate (active) = 18291.6 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.01805 +/- 0.00261\n", - " k-effective (Track-length) = 1.01962 +/- 0.00325\n", - " k-effective (Absorption) = 1.01554 +/- 0.00339\n", - " Combined k-effective = 1.01711 +/- 0.00235\n", + " k-effective (Collision) = 1.02763 +/- 0.00343\n", + " k-effective (Track-length) = 1.02973 +/- 0.00366\n", + " k-effective (Absorption) = 1.02732 +/- 0.00319\n", + " Combined k-effective = 1.02826 +/- 0.00259\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -981,14 +982,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/romano/openmc/openmc/tallies.py:1642: RuntimeWarning: invalid value encountered in true_divide\n", + "/home/wboyd/Documents/NSE-CRPG-Codes/openmc/openmc/tallies.py:1996: RuntimeWarning: invalid value encountered in true_divide\n", " self_rel_err = data['self']['std. dev.'] / data['self']['mean']\n" ] }, { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -1006,23 +1007,23 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1030,23 +1031,23 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1054,13 +1055,13 @@ "" ], "text/plain": [ - " cell group in nuclide mean std. dev.\n", - "3 10000 1 U-235 0.008064 4.062984e-05\n", - "4 10000 1 U-238 0.007336 4.459335e-05\n", - "5 10000 1 O-16 0.000000 0.000000e+00\n", - "0 10000 2 U-235 0.361327 1.902492e-03\n", - "1 10000 2 U-238 0.000001 3.536787e-09\n", - "2 10000 2 O-16 0.000000 0.000000e+00" + " cell group in nuclide mean std. dev.\n", + "3 10000 1 U-235 8.055246e-03 2.857567e-05\n", + "4 10000 1 U-238 7.339215e-03 4.349466e-05\n", + "5 10000 1 O-16 0.000000e+00 0.000000e+00\n", + "0 10000 2 U-235 3.615565e-01 2.050486e-03\n", + "1 10000 2 U-238 6.742638e-07 3.795256e-09\n", + "2 10000 2 O-16 0.000000e+00 0.000000e+00" ] }, "execution_count": 31, @@ -1097,13 +1098,13 @@ "\tDomain ID =\t10000\n", "\tNuclide =\tU-235\n", "\tCross Sections [cm^-1]:\n", - " Group 1 [6.25e-07 - 20.0 MeV]:\t8.06e-03 +/- 5.04e-01%\n", - " Group 2 [0.0 - 6.25e-07 MeV]:\t3.61e-01 +/- 5.27e-01%\n", + " Group 1 [6.25e-07 - 20.0 MeV]:\t8.06e-03 +/- 3.55e-01%\n", + " Group 2 [0.0 - 6.25e-07 MeV]:\t3.62e-01 +/- 5.67e-01%\n", "\n", "\tNuclide =\tU-238\n", "\tCross Sections [cm^-1]:\n", - " Group 1 [6.25e-07 - 20.0 MeV]:\t7.34e-03 +/- 6.08e-01%\n", - " Group 2 [0.0 - 6.25e-07 MeV]:\t6.74e-07 +/- 5.25e-01%\n", + " Group 1 [6.25e-07 - 20.0 MeV]:\t7.34e-03 +/- 5.93e-01%\n", + " Group 2 [0.0 - 6.25e-07 MeV]:\t6.74e-07 +/- 5.63e-01%\n", "\n", "\tNuclide =\tO-16\n", "\tCross Sections [cm^-1]:\n", @@ -1201,7 +1202,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "
100001U-2350.0080644.062984e-058.055246e-032.857567e-05
4100001U-2380.0073364.459335e-057.339215e-034.349466e-05
5100001O-160.0000000.000000e+000.000000e+00
100002U-2350.3613271.902492e-033.615565e-012.050486e-03
1100002U-2380.0000013.536787e-096.742638e-073.795256e-09
2100002O-160.0000000.000000e+000.000000e+00
\n", " \n", " \n", @@ -1219,16 +1220,16 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -1244,8 +1245,8 @@ ], "text/plain": [ " cell group in nuclide mean std. dev.\n", - "0 10000 1 U-235 0.074383 0.000280\n", - "1 10000 1 U-238 0.005959 0.000036\n", + "0 10000 1 U-235 0.074860 0.000303\n", + "1 10000 1 U-238 0.005952 0.000035\n", "2 10000 1 O-16 0.000000 0.000000" ] }, @@ -1326,126 +1327,126 @@ "name": "stdout", "output_type": "stream", "text": [ - "[ NORMAL ] Ray tracing for track segmentation...\n", - "[ NORMAL ] Dumping tracks to file...\n", + "[ NORMAL ] Importing ray tracing data from file...\n", "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.854316\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.801593\tres = 1.522E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.761131\tres = 6.380E-02\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.731467\tres = 5.066E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.709897\tres = 3.910E-02\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.695111\tres = 2.954E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.685967\tres = 2.085E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.681511\tres = 1.317E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.680926\tres = 6.520E-03\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.683509\tres = 1.046E-03\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.688659\tres = 3.848E-03\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.695861\tres = 7.565E-03\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.704674\tres = 1.048E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.714726\tres = 1.269E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.725701\tres = 1.428E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.737329\tres = 1.537E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.749388\tres = 1.604E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.761691\tres = 1.637E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.774081\tres = 1.643E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.786431\tres = 1.628E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.798638\tres = 1.597E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.810618\tres = 1.553E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.822303\tres = 1.501E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.833643\tres = 1.443E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.844598\tres = 1.380E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.855140\tres = 1.315E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.865249\tres = 1.249E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.874914\tres = 1.183E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.884128\tres = 1.118E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.892891\tres = 1.054E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.901206\tres = 9.920E-03\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.909080\tres = 9.320E-03\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.916522\tres = 8.745E-03\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.923545\tres = 8.194E-03\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.930162\tres = 7.669E-03\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.936387\tres = 7.171E-03\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.942236\tres = 6.698E-03\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.947725\tres = 6.252E-03\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.952869\tres = 5.830E-03\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.957686\tres = 5.433E-03\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.962192\tres = 5.060E-03\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.966404\tres = 4.710E-03\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.970336\tres = 4.381E-03\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.974005\tres = 4.073E-03\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.977426\tres = 3.785E-03\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.980613\tres = 3.515E-03\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.983580\tres = 3.264E-03\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.986340\tres = 3.029E-03\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.988907\tres = 2.809E-03\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.991293\tres = 2.605E-03\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.993509\tres = 2.415E-03\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.995566\tres = 2.238E-03\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.997475\tres = 2.073E-03\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.999246\tres = 1.920E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.000887\tres = 1.777E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.002408\tres = 1.645E-03\n", - "[ NORMAL ] Iteration 56:\tk_eff = 1.003818\tres = 1.522E-03\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.005123\tres = 1.408E-03\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.006331\tres = 1.302E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.007449\tres = 1.203E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.008483\tres = 1.112E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.009439\tres = 1.028E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.010324\tres = 9.496E-04\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.011141\tres = 8.771E-04\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.011896\tres = 8.100E-04\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.012594\tres = 7.479E-04\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.013238\tres = 6.903E-04\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.013833\tres = 6.372E-04\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.014382\tres = 5.880E-04\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.014889\tres = 5.425E-04\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.015357\tres = 5.004E-04\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.015788\tres = 4.615E-04\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.016186\tres = 4.256E-04\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.016553\tres = 3.924E-04\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.016892\tres = 3.617E-04\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.017204\tres = 3.334E-04\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.017491\tres = 3.073E-04\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.017756\tres = 2.831E-04\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.018000\tres = 2.608E-04\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.018225\tres = 2.403E-04\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.018432\tres = 2.213E-04\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.018623\tres = 2.038E-04\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.018799\tres = 1.877E-04\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.018961\tres = 1.729E-04\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.019110\tres = 1.591E-04\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.019247\tres = 1.465E-04\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.019373\tres = 1.349E-04\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.019489\tres = 1.241E-04\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.019596\tres = 1.142E-04\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.019695\tres = 1.051E-04\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.019785\tres = 9.673E-05\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.019869\tres = 8.899E-05\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.019945\tres = 8.187E-05\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.020016\tres = 7.532E-05\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.020081\tres = 6.925E-05\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.020141\tres = 6.372E-05\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.020195\tres = 5.861E-05\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.020246\tres = 5.388E-05\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.020292\tres = 4.956E-05\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.020335\tres = 4.555E-05\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.020374\tres = 4.187E-05\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.020410\tres = 3.850E-05\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.020443\tres = 3.539E-05\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.020473\tres = 3.254E-05\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.020501\tres = 2.991E-05\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.020527\tres = 2.747E-05\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.020551\tres = 2.526E-05\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.020573\tres = 2.321E-05\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.020592\tres = 2.134E-05\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.020611\tres = 1.961E-05\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.020628\tres = 1.802E-05\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.020643\tres = 1.653E-05\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.020657\tres = 1.519E-05\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.020671\tres = 1.398E-05\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.020683\tres = 1.283E-05\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.020694\tres = 1.178E-05\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.020704\tres = 1.082E-05\n" + "[ NORMAL ] Iteration 0:\tk_eff = 0.854370\tres = 0.000E+00\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.801922\tres = 1.521E-01\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.761746\tres = 6.349E-02\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.732367\tres = 5.029E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.711075\tres = 3.869E-02\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.696557\tres = 2.912E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.687673\tres = 2.044E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.683470\tres = 1.277E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.683129\tres = 6.141E-03\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.685949\tres = 7.889E-04\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.691329\tres = 4.181E-03\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.698755\tres = 7.875E-03\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.707786\tres = 1.077E-02\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.718050\tres = 1.295E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.729230\tres = 1.452E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.741058\tres = 1.559E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.753310\tres = 1.624E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.765800\tres = 1.655E-02\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.778371\tres = 1.660E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.790897\tres = 1.643E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.803273\tres = 1.611E-02\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.815415\tres = 1.566E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.827256\tres = 1.513E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.838747\tres = 1.453E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.849847\tres = 1.390E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.860527\tres = 1.324E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.870770\tres = 1.258E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.880562\tres = 1.191E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.889897\tres = 1.125E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.898776\tres = 1.061E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.907202\tres = 9.986E-03\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.915181\tres = 9.382E-03\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.922724\tres = 8.803E-03\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.929843\tres = 8.249E-03\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.936550\tres = 7.721E-03\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.942861\tres = 7.220E-03\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.948791\tres = 6.744E-03\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.954357\tres = 6.295E-03\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.959575\tres = 5.871E-03\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.964461\tres = 5.472E-03\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.969033\tres = 5.097E-03\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.973306\tres = 4.744E-03\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.977297\tres = 4.414E-03\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.981021\tres = 4.104E-03\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.984493\tres = 3.814E-03\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.987729\tres = 3.543E-03\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.990742\tres = 3.290E-03\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.993546\tres = 3.053E-03\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.996153\tres = 2.833E-03\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.998577\tres = 2.627E-03\n", + "[ NORMAL ] Iteration 50:\tk_eff = 1.000829\tres = 2.436E-03\n", + "[ NORMAL ] Iteration 51:\tk_eff = 1.002920\tres = 2.257E-03\n", + "[ NORMAL ] Iteration 52:\tk_eff = 1.004860\tres = 2.091E-03\n", + "[ NORMAL ] Iteration 53:\tk_eff = 1.006661\tres = 1.937E-03\n", + "[ NORMAL ] Iteration 54:\tk_eff = 1.008330\tres = 1.793E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 1.009877\tres = 1.660E-03\n", + "[ NORMAL ] Iteration 56:\tk_eff = 1.011311\tres = 1.536E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.012639\tres = 1.421E-03\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.013868\tres = 1.314E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.015006\tres = 1.215E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.016059\tres = 1.124E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.017033\tres = 1.039E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.017933\tres = 9.596E-04\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.018766\tres = 8.865E-04\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.019535\tres = 8.188E-04\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.020246\tres = 7.562E-04\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.020903\tres = 6.981E-04\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.021509\tres = 6.445E-04\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.022069\tres = 5.948E-04\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.022586\tres = 5.489E-04\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.023063\tres = 5.064E-04\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.023503\tres = 4.671E-04\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.023909\tres = 4.308E-04\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.024284\tres = 3.973E-04\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.024629\tres = 3.663E-04\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.024948\tres = 3.377E-04\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.025241\tres = 3.113E-04\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.025512\tres = 2.869E-04\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.025761\tres = 2.644E-04\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.025991\tres = 2.436E-04\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.026203\tres = 2.244E-04\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.026398\tres = 2.067E-04\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.026578\tres = 1.904E-04\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.026743\tres = 1.754E-04\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.026895\tres = 1.615E-04\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.027036\tres = 1.487E-04\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.027165\tres = 1.369E-04\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.027284\tres = 1.260E-04\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.027393\tres = 1.160E-04\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.027494\tres = 1.068E-04\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.027587\tres = 9.825E-05\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.027672\tres = 9.041E-05\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.027751\tres = 8.319E-05\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.027823\tres = 7.654E-05\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.027889\tres = 7.042E-05\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.027950\tres = 6.478E-05\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.028007\tres = 5.959E-05\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.028058\tres = 5.481E-05\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.028106\tres = 5.041E-05\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.028150\tres = 4.636E-05\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.028190\tres = 4.263E-05\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.028227\tres = 3.920E-05\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.028261\tres = 3.604E-05\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.028292\tres = 3.314E-05\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.028321\tres = 3.047E-05\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.028347\tres = 2.801E-05\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.028371\tres = 2.575E-05\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.028394\tres = 2.367E-05\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.028414\tres = 2.175E-05\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.028433\tres = 1.999E-05\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.028450\tres = 1.838E-05\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.028466\tres = 1.689E-05\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.028481\tres = 1.552E-05\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.028494\tres = 1.426E-05\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.028507\tres = 1.310E-05\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.028518\tres = 1.204E-05\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.028528\tres = 1.106E-05\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.028538\tres = 1.017E-05\n" ] } ], @@ -1477,9 +1478,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "openmc keff = 1.017105\n", - "openmoc keff = 1.020704\n", - "bias [pcm]: 359.8\n" + "openmc keff = 1.028263\n", + "openmoc keff = 1.028538\n", + "bias [pcm]: 27.5\n" ] } ], @@ -1553,20 +1554,18 @@ }, "outputs": [], "source": [ - "# Export OpenMOC's fission rates for each pin cell instance in the fuel assembly\n", - "openmoc.process.compute_fission_rates(solver)\n", + "# Create OpenMOC Mesh on which to tally fission rates\n", + "openmoc_mesh = openmoc.process.Mesh()\n", + "openmoc_mesh.dimension = np.array(mesh.dimension)\n", + "openmoc_mesh.lower_left = np.array(mesh.lower_left)\n", + "openmoc_mesh.upper_right = np.array(mesh.upper_right)\n", + "openmoc_mesh.width = openmoc_mesh.upper_right - openmoc_mesh.lower_left\n", + "openmoc_mesh.width /= openmoc_mesh.dimension\n", "\n", - "# Open the pickle file with the fission rates\n", - "fission_rates = pickle.load(open('fission-rates/fission-rates.pkl', 'rb' ))\n", - "\n", - "# Allocate array for fission rates in each fuel pin\n", - "openmoc_fission_rates = np.zeros((17, 17))\n", - "\n", - "# Extract fission rates for each fuel pin\n", - "for key, value in fission_rates.items():\n", - " lat_x = int(key.split(':')[1].split()[3][1:-1])\n", - " lat_y = int(key.split(':')[1].split()[4][:-1]) \n", - " openmoc_fission_rates[lat_x, lat_y] = value\n", + "# Tally OpenMOC fission rates on the Mesh\n", + "openmoc_fission_rates = openmoc_mesh.tally_fission_rates(solver)\n", + "openmoc_fission_rates = np.squeeze(openmoc_fission_rates)\n", + "openmoc_fission_rates = np.fliplr(openmoc_fission_rates)\n", "\n", "# Normalize to the average pin fission rate\n", "openmoc_fission_rates /= np.mean(openmoc_fission_rates)" @@ -1589,7 +1588,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 44, @@ -1598,9 +1597,9 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWwAAADDCAYAAACmois2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXmcHlWV97+HTkIWSITEBIgQkEWCIosOCjiCqBCXwQXF\noRkHHMbl/Sij446vg4oo+qozOIw6vAoOohEZGRQZF6IosjsR0GAiS5YGAkkgCdnJ0jnzR1WTeqrr\n6Xv6ST/dT+nv+/n0p+veOnXPrVunzlN16957zN0RQgjR+ewy0hUQQggRQw5bCCFqghy2EELUBDls\nIYSoCXLYQghRE+SwhRCiJshhjwBmdp6ZfX0njj/TzH42lHUSoh2Y2X5mts7MbCfKWGdm+w9drepL\nxzhsMzvbzOaZ2QYze8zMvmpmk4ZJ9xIz22xmk0v5d5vZdjPbr5B3jJn92MxWm9lKM7vTzM5uUu7Z\nZtabG1zf37+6+0Xu/vZW6+vu33H3U1o9vhlmdmJ+vuvMbK2Z3W9m7xjE8b8ys3OGul51okZ2fJyZ\n3Zhf5yfN7Dozm1k6bqKZXWxmPblNPGhm/1IuvyC/3czWF2x9lbs/5O67+05M+MiPX9Lq8c3I22tj\nXtdlZnalmU0MHnu2md081HVK0REO28w+AHwO+AAwEXgxMAOYY2ajh6EKDiwCzijU6XBgXL6vL+9Y\n4BfAL4ED3X0y8H+AWQOUfWtucH1//9COExhClub1nAi8F/iqmT03eOyf9Sysmtnxz4Brgb2BA4Df\nAbea2QG5zBgyW58JnOLuuwPHAk8AxwxQh+cXbH3PITy3duDAa/NzOwI4HPj4yFYpgbuP6B+ZYa8D\n3lTKnwCsAN6Wpz8JfB+4ClgL/JbMOPrk9wGuyY9ZBJxb2PdJ4GrgivzYe4EXFPYvBv4v8JtC3heB\njwHbgf3yvFuASwZxbmcDN1fkfxK4Mt8eC3yb7EZYDfwGmFo4fmFe50VAd1W5wHHA/wBP5scfW9j3\nK+CCvO5ryW7UyU3qeyLwcClved+1AfYArs/beBXwI2B6vu8zwDZgU349/zXPPxSYA6wE/gi8uVD2\nq4E/5PV6BPjASNvjn4kd3wz8W8U5/Bi4It/+e2AZMH4QbbAdeHYpb/88f5eETR8E3JTb8OPAVVXl\nApOAb+XtsyQ/XyuUfQvwhdw+FwGzBqjvYuCkQvr/Af9dSH8UeDCv6x+A1+f5M3M735Zf81V5/q55\ne/fkbfc1YGy+bwrZvbM6vxd+3VfvQdlZBxj6LGBr3wUt7fsPYHbBWLcAbwS6yJ5iFuXbu+SG/3Fg\nFNkTw0Lg5MKxm3JdBnwWuL104V5O5lAOzct8GNivz9CB8fkFOmEQ53Y21Q77E8C38u13AteROW4D\njgJ2J7vR1wAH53LTgMPK5QJ75kZwZt4Of50b6x75/l8BD5DdEGPJ3g4ualLfE8kddl7WqcBTZG8T\nfbrekJezG5nzuLZw/C+BvyukJ+TteFZe3pFkN+Oh+f7HgOMLN+JRI22Pf852nNvVo/n2VcA3B9kG\n2/tspZC3f56/S8Kmvwucl2+PAY4rldvnsL9F9mYwgezt5b4+m8vrvwU4J2+fd5G9MTar72Lg5fn2\ns4DfA+cX9r8J2CvfPh1YD0zL02dRureBfwF+ADyD7P64Dvhsvu8iMgfelf8d34qddUKXyBTgCXff\nXrFvWb6/j7nu/l/u3gv8M5njOBb4C2CKu1/o7tvcfTHwDTLn1cfN7v5Tz1rv22SvQGWuBP4WeCUw\nH1ha2LcHmdE9Nsjze3He373azFaZ2Yvy/L6PMFuAyWRG7O5+t7uvy/dtBw43s3Huvtzd51eU/xrg\nPs/6tbe7+1VkN+yp+X4nu/EedPenyJzskQPUdx8zWw1sJLsx3uruCwHcfZW7X+vuT7n7ejKHcULp\n+OLHpdcCi939irxu9wD/RWb8fef+XDOb6O5r3P3uAerV6dTFjvekuR0X6zm5iUyKuwr2fnHF/mY2\nvQXY38ymu/sWd7+tfKCZdQFvIXPsG9y9B/gS8NaCWI+7X5a3z7eAvc1sapO6GvADM1sLPET243hh\n3053/767L8u3ryZ78Cnfv311M+DtwPvd/cn8/riIHdduC1n30/7u3uvutzap04B0gsN+AphiZlV1\n2ZvsiayPR/o28gvyCNkr5H7kjqbvDzgPKF6o5YXtjcDYkk4nM/QzyX49v0XjRVlNZmx7D+70uMPd\n98j/9nT3O0vlXknWTXGVmS01s8+b2Sh330BmnO8CHjWz683sORXl70NmbEV68vw+lhW2N5H9+jfj\nUXffg+wV/8vAx/rayczGm9ml+ceaNWSvsJNKIwCK/dgzgBeVrks32ZMVwGlk3SJL8g+WLx6gXp3O\nn4IdF+v5BI02FOWogr2/r7gjYdMfzuv5GzO718zeVlH2FGA0mX338RAwvZB+2tbdfWO+2czeHXid\nZ99rTgROAl7Yt9PM/jb/YNt3LZ5H9kNWxTPJ3l5+W5D/CTt+AL9A1r1yg5ktNLOPNClnQDrBYd8O\nbCa7eZ/GzHYje/X7RSF738L+XcheY5aSvfYtLhjKHu4+0d1fm4uHPoa5+0Nkr6evInsSLO7bmNf1\nTYM4t6aqCuVuc/cL3P25ZH3RryV7OsLdb3D3k4G9yJ6aq4YCLiVzjEVm0PhUNfgKum8BPkLWVdH3\nBPMB4BDgGHefRPZ0bexwCOV2fgi4qXRddnf3d+c65rr768mM/QdkT/91pS52vCGv6+kVh55eqOfP\ngVPMbHxEZ5RmNp0/bb/D3aeTdRN+1cyeXTr8CbJup/0LeftR+AHciXr9GrgE+DyAmc0A/j/wbmDP\n/CHmXprb+hNkD0OHFa7dM/IfA9x9vbt/0N0PJHv7fb+ZnTTYeo64w3b3NcCngEvM7BQzG23ZmMur\nyQz4yoL4C8zsDWY2CngfWf/qHWQf3NaZ2YfNbJyZdZnZ88ys79dyMGNAzyH7ELGpYt+HgbPN7IN9\nQ5vM7Agz++4gym+oj2VD6Q7PX/fWkRlkr5lNNbPXmdmEPG8D0FtR1k+AQ8zsDDMbZWZvIeu/vL5K\n32Bw961kr5wfzrN2IzPKNWa2J1lffJHlwIGF9PV53f4mv66jzewvzOzQfPtMM5uUdw2sa3J+taBm\ndvxR4CwzO9fMdjezPczsQrLX/U/lMlfm9b7GzJ5jZruY2WQz+5iZvWoQ9XiagWzazN5sZs/KRZ8k\nc4gN3Uu5nVwNfMbMdsud6j+SdQ0NBRcDx+TdlhPyOjwB7JI/8T+vILsceJblo3/yrrCvAxeb2TPz\nc5puZifn268xs4Pyt9G1+XkP2t5H3GEDuPsXyL5kf5Hso8QdZK89L8+dBmSN90OyV6pVZK98b8z7\ng3rJnkyPJHuyeJzs13Fi4djyL2Ll04q7L3L3u6rk3P12stemk4CFZrYSuBT472an1kRPMX8v4D/z\n855P9pHwSrJr849kT14rgb8kG0LYcLy7r8zP/QNkxvVBsqFKq5qca7M6VckCXA5MNbNTyQx6XK7n\nNrIfi6L8l4E3WdZXf3Hej3cyWT/eUrI+0YvIPioB/A2wOO9eeQfZNa0tNbLjW4FTyD58Pko22uII\n4CWF7xVbgFeQPQXPyc/nTrI+8DuaNUEifyCbfiFwh5mtI2uff/AdY6+L5Z5L5ugXkY12+Q7wzYJc\nqH0qK+n+BNkInI/kfetfInsbWUbmrG8piP+CbOTIMjNbked9hKzb447cpueQvZECHJyn15HdO19x\n95uideujbzhMx2NmnwAOcve3JoWF6FBkx2Jn6Ign7CAtT20VooOQHYuWqZPDTr3KC1EHZMeiZWrT\nJSKEEH/u1OkJWwgh/qwZ1eqBZjaLbNRAF/ANd/98ab8e3UVbcfe29AfLtsVI08y2W+oSyccM30c2\n7Gcp2fjRM9x9QUHG/ZuNx512CVxzbiEjMnr5gYDMzLQIEwav67TFcM0BJZnI+mPT0iIM1STs0sKd\np90P1xxSkkn8LG+9N61mdGTRycB5L5/bP+/vyMYOPl1MebJ7BXZTexx21LZ/Vzjm/WTzy4tEnoTW\npUVYm9hfNci6TNUygRfSuCxdpL4RXePaWM6naBz4vy1Qzta0SKjOEfPfvZR+L9k41yKpOo+eMYPD\nenqa2narXSLHAA+6+5J8fOlVwOtaLEuITkK2LTqWVh32dLJZUH08QuN8fiHqimxbdCyt9mGH+lFO\nu2TH9sx9oNdh9u0FgchaYOsDMpFVM8YGZFY3JnsdZpfy2BIoJ/LOtyYgE6H0ztfrMPuJkkzXwEVs\nC5zTqA2BuqxMi1Sd9nYaF7yYtLy/zPwNsGBj//w2ELLt9xe2V5ItJF0k8iT0VEAmZUoRc6y6/NvJ\n1sIdSKYVXWPSIi2Xsx24sZCOzOuOyETqHOk2KbuY7TSuD9GXV2ZR/gdgK1ZUSOygVYe9lMICNvl2\nvwVYGvqryZx197GFjCUBTRGHHXn+ifRhb+6f1b1HKWOo+rDLPwStUhF8qntKKSPVh13hIMuMjrRf\ns3XMCixfXJ3/xsL2tED72aAn9YYJ2Xaxz/rHZEsOFun0PmyAlxW269CHDdmaEH10eh82ZOsMFEn2\nYU+dymE9PU33t9olMhc42Mz2tyyU0FvIFusWou7ItkXH0tITtrtvM7P3kK3j3AVcVvyKLkRdkW2L\nTqblcdju/hOy1dqE+JNCti06lZYddogbSuklNHbcleOkVFEeB13B1kCwnU0V/dNlJr6glLGR/n3f\ngTHL829My0Q4LHDuG0v12bwNNi5rzBtf0c9dJDTGOmIpgU7Fqu+Gm0v5Pi+ga4QpNscu9G+eSP9q\nhKEop+oTxZpSfqQfN8KqtEjL/dzrS+VH+sIjn5zada22V+SlbqPUfk1NF0KImiCHLYQQNUEOWwgh\naoIcthBC1AQ5bCGEqAly2EIIURPksIUQoibIYQshRE1o78SZ8tJsG0t5iQkdADyaFhl9aFpmVJNF\nh4p03Xp+Q9qZx1vvP7whb9ueFyTLiQzWn875SZnfLE7rOnpqY3rMUzCutGxY16MD63qUtJ7dA4s/\njQ/MQDig4lpNXQMHRGyhSGSGRhspzv96ithCTmUiCxP1W3WqRGTSx7srbM2Zx9fZYduXB2wgssre\nuwJ2fWlAV5Vj2kLjBKtzArq+0qKuMlULO6XYQmxyT5HUyoF6whZCiJoghy2EEDVBDlsIIWqCHLYQ\nQtQEOWwhhKgJcthCCFET5LCFEKImtHccdjmK9vrGvLX3pIvYGAg8EBnTfFFgPOadJZmfArO4tiHv\nrsD435mBMctLN6Trs9cJ6XLKobftCbBSEN5NmwfWtSAQwX2fDek27p2aPqfKQL3bm+R3MMXguJvo\nHyw3Mj46NcYa4J0J2/50wK6rbP8e4MiCbQ+VI/j3QH2aBQUuUlWfrtKxnw3oigzX/6chGjv+rFK6\nHHAB0u1cjrxeRk/YQghRE+SwhRCiJshhCyFETZDDFkKImiCHLYQQNUEOWwghaoIcthBC1AQ5bCGE\nqAntnTjzcCm9kYYVvSe+NF3EgjlpmU2TAhM2AvSUJpCMp3+MhUiDzduQljk6smD/grSIl2Zo+Gbw\n1Y15SxMTYyITGe4KTBxYGwg2MbEqcz2Nq/nvGqjQCFNcmL6VheohNrnmgkC7DwWRukTOMSIzrkWZ\nXhrraYFyIkQmH0XapxyQorciLxK0YiD0hC2EEDVBDlsIIWqCHLYQQtQEOWwhhKgJcthCCFET5LCF\nEKImyGELIURNkMMWQoia0PLEGTNbQhZooxfY6u7H9BM6tJReBuy1I3lzYFLMiYFoEHevSQ98fyCt\nitNLupx5fIjDG/JuCwyyDwRwYeyawHkFdE2t0L28NHHnoEQb9h6f1rPs1qQIe2wOnNPi/roeAn7/\n+I708yORdv4YkGmRiG0XJxuVI6FAZuop3j0EkZI8oOe8Cj3OPL5XsO2LA7YWmfTxocA5fTGga0tF\n3iYa762q8yoTiTQVacPItbq8pKsq4sy0RBmpSWw7M9PRgRPdPRKFR4g6IdsWHcnOdokM1exQIToN\n2bboOHbGYTvwczOba2ZvH6oKCdEByLZFR7IzXSLHu/tjZvZMYI6Z/dHdbx6qigkxgsi2RUfSssN2\n98fy/4+b2bXAMUCDUZ/2+x3bMyfA6tKSV5HvRs68pMyPA+VEPgKVdXm/5QbhZ4FyNragq4rIeZVX\nv/ufFnTNfnzA3QA8GahLq+d0Tyl97/L+MvM3wIJIww4BEdu+sLC9vaKMyIfnSHuV26Z/Ga3qebjh\n2LmBcnpb1tXIXYFyql79F7egK9V+WTkRmbSu20vpBytkqhbpfIgdC5t2rVgxoI6WHLaZjQe63H2d\nmU0ATgY+VZa75vmN6dnLoLs4SmR+WtdnSqM0qng11yZlIqNELqnQZaW8UwK6IjfrF4bovMqjRADe\nWEqfm9DV/cy0nmX3J0WSeqD5Ob26sP381Kd0wG5Ky7RC1LY/Xtj+JfCy0v7IA8LXA+11ZMIGIs7m\n6go9TqNtvzBga5FRIt8NnNPRAV1dTfJfUNj+9hC0H7TehmWOrdB1bCmdMu1xU6fysp6epvtbfcKe\nBlxrZn1lfMfdb2ixLCE6Cdm26Fhactjuvhg4cojrIsSII9sWnYy5R14IWijYzP1FjXmzn4DuKYWM\nQGSWZfemZfaq6hcosXjgriGg/6vRdcCppbwpQxQNJdLqN21Oy8wspX8E/FUpr2oSQpHnBtovwobA\n9ZxwcP+82auhe49Cxsp0OfYwuPuIDL0zs4ZH7huBk0oykQHckS751ESKSCSUtRV5c4EXFtJ7BsqJ\nsDQgM73Fsm8DjiukA2ZS2WdcJvLUGukOGl9K3wK8pJSXauexM2bw0p6epratqelCCFET5LCFEKIm\nyGELIURNkMMWQoiaIIcthBA1QQ5bCCFqghy2EELUBDlsIYSoCTuzWl+a40vpBTTM9Nh6WbqIyKQY\nJqRFDgiU853S5JoH6L+gy5n7pMt5oLxKTQXTA3V+ReDqrCtNVhlH/wWhkjwvIBOYeDSm/1pZsXI2\n0jgzoRypqIqIrjayqbC9pZSOEpn0kpoZFNFbpWd7UH+RgAmE6hMpJ3LbRxajitRnXEBmsG3VjFbs\npIiesIUQoibIYQshRE2QwxZCiJoghy2EEDVBDlsIIWqCHLYQQtQEOWwhhKgJcthCCFET2jtx5s5S\n+nEawl+Mqog+UqZr7vlJmcu5ICnznLQq3kqjLmceXysF3xy3OK3r9YHwHaNXpc/r+sB5lefxPEn/\nALBHM7Cubfek9WwMRL+ZuCF9Tj1r++ta6fBIIXLxs85I6+LGgEwbKU62GEP/yReRaCjvTFwXgEsT\nNhCJWvOhCj3OPGYXbPuigK1FJn1cEDin8wO6qiK8rKYxos15AV1fDOhqFvC3yLsCusp+qGpCVTLi\nTGK/nrCFEKImyGELIURNkMMWQoiaIIcthBA1QQ5bCCFqghy2EELUBDlsIYSoCXLYQghRE8zd21Ow\nmfu+jXmzN0B3MdJKYNrO7wLRW44ITMBZ/kBaZuyujen/7IU3l0bVTwroioTU+F5A5piAqv1LI/Fn\nb4bu0nmkrvAuJ6f1PHBVWiYyieOIilAis5+C7uKMgf3S5dhccPdUQJa2YGb+w0L6JuCEkkxkksma\ntAhjEvsjeqpk7gKOLqQjEV4ikWLWpkVCEZGq6nMbcFwhvTxQzviATCTizJaAzKRS+hbgJYPUNW7G\nDE7u6Wlq23rCFkKImiCHLYQQNUEOWwghaoIcthBC1AQ5bCGEqAly2EIIURPksIUQoibIYQshRE0Y\ncOqKmV0OvAZY4e6H53l7At8DZgBLgNPd/clWlK98KC0TmRSzNlDOuF3TMstLUVXWAiu2NeY9dW+6\nnCVpkWTkCYDJgTpb6Qratoq8lLKH03oODlyHOYHJSf1mFwAYjbMpIiFAdpKdte1UxJnIhJbUpBhI\nzy2LTPqoit6yS6DsMpHJNVW6WiknwuiATKR92ht2q5FUfXY24sw3gVmlvI8Cc9z9EOAXeVqIuiHb\nFrVjQIft7jeThVIrcipwRb59BfD6NtRLiLYi2xZ1pJU+7Gnu3jeNfzkwbQjrI8RIItsWHc1OfXT0\nbOWo9qweJcQIItsWnUgr/e3LzWwvd19mZnszwCJepz2+Y3vmaFi9vXH/ulK6it0Dy39t6k3LRCiv\nnnZXhUzkI8bjaZHQR6mHAuc17qnG9K1VX31Sy8IFrkNkGbZ5gWIeryjn1nJjVNRn/iZYEGm0nSNs\n258qbFc13/qAssgKcKnvrxHTr2q28iKYuwXKiVDuY6qip8Wy7y+lI20cuV8j37gj7Vz+iHxfhUxV\nO/cAfeMmulYMvCZiKw77OuAs4PP5/x80E7zmmY3p8vKqKwPrS04OrMW4tqUxKv1Zvq1/3l+V0pGl\nIZcEZCLLUL4oYEkTKz4rd5fzqkZmFJkcqEzgWXNOYL3LVzZpwO5ifmAIjd2ZlmmBsG1/orB9I3BS\naf+qgLLI70/qBq0w2X40s7UXFrYjo5YiLA3ITN+J8ovLq0baOHK/RpxgpJ2rfhzKy6um2nns1Km8\ntKf5T9qAXSJm9l2yZWifY2YPm9nbgM8BrzSz+8ns9HOJOgjRcci2RR0Z8MfF3c9osusVbaiLEMOG\nbFvUkbaOGV/5aGN63fbGbpCtgY6hrgfOT8r0HnxBUua6wKSON9Coy5nHhzi8Ie820rpSg98BjiNw\nXpPSusqRa24HukrvwN0rBtbVOzWt5w+BcCOnBM7p1w/013UfcEuhO+Ulkag+I0zxFbmX/q/Mkeg7\n5wTa66KAvaU4r0KPM49vF2z74oCeSLdAla4yXwzoqnJM62nsBnnfMLUfxM7r8pKuLfTv9kq1Ycol\namq6EELUBDlsIYSoCXLYQghRE+SwhRCiJshhCyFETZDDFkKImiCHLYQQNUEOWwghaoJli5K1oWAz\n9zMb82Yvhu4DChm3pcvZEJiwsXDDoKrWlPLCLNeRLZBcJLK4zf6BNUCWBSYN7RuIODPxpY3p2Y9B\n994lXXMGLsPSapgWCBOyIXAdJhzTP2/2cuguLGS68tfpcqb0grtHqj7kmJn/sJC+CTihhXIeCchE\n7C1F1SSUe4AjC+nIOrKRtU8iE4bGB2Sq1uW4HTi2kF4WKGeI1oULrbVSXiOlFbsYN2MGJ/f0NLVt\nPWELIURNkMMWQoiaIIcthBA1QQ5bCCFqghy2EELUBDlsIYSoCXLYQghRE+SwhRCiJrQ14ky/cNJe\nygsEf11XDu9cwZGBaBCfCESeeHkpvRooBc1hdLo6jAuEnNnrqbTMxH3SMv7bUnozeDnST6KMgwJ6\nuh5Nt/G6CYHoHlWhwrc15k9+droYAhGE2klxYscY+k/0iERnidx8/5Sw7U8PUUSVSF0iEcgj5UTu\noapyukr5kVlTkWmB5wf8x6WBdi6fV1dFXqp9Uq5DT9hCCFET5LCFEKImyGELIURNkMMWQoiaIIct\nhBA1QQ5bCCFqghy2EELUBDlsIYSoCe2dOJMiMHlkrzelZeZ9Pz2o/bAjkyKMuqdxAL0zjws5vCGv\nd9+0rkUPp3UdHBis/+DitK7pkxrTvdthaynMxqEJXb2BSQHbDk7L2KSkSLXF7VLKD0TsGWkmFrbH\nldJRdg/I/Hvi2kQm6Lyn4vo78/hewbYvD9hA1ZynMu8aokkoVRNeeoGthfR5AV1fCeiK1GdmUqL/\nJJndiEWqKTImsV9P2EIIURPksIUQoibIYQshRE2QwxZCiJoghy2EEDVBDlsIIWqCHLYQQtQEOWwh\nhKgJA06cMbPLgdcAK9z98Dzvk8DfA4/nYue5+08rCyiP6t9eygtEnOEZaZHnBiKmEJDZ9lTjAPrZ\na6B70rUNeSsDkU6m7JqWuWtzerD+AYemy6EUnWXUUhgzvTFv26KBdf30j2k1swITj0KzOA6uyDPg\noEI6ct6BOg/Eztp2cdLLWPpPgok0RYR9E/u3JvYDXFYxMeQO4MXssO1INJmITJWuMuMD5VQxpnRs\nRFfExUQi4IQiTZXSVZGIUjMVU3pST9jfBGaV8hz4Z3c/Kv+rdtZCdDaybVE7BnTY7n4zWWjDMpFw\nakJ0LLJtUUda7cM+18x+Z2aXmVmg00KI2iDbFh1LK4s/fQ2e7jz6NPAl4JwqwdNu27E9cyKsLq8e\nsyagLfK8szEgszQt4qX63Lapv8z6ciT4Ckb1pmVWpEX4Q6R9Sud1a8UzY/m8yvw+oGZV1bNoKzzY\nP+vW5aWMiseI+athwVDVoTlh235vYbvqcgfMJLSY0vrE/oCpVZZRvgypRYeiRM6pVV33taBrt4BM\nZK2xSDnl87qnQqbqCXkhsKhv/4qBPcOgHba7P12imX0D+FEz2WuOa0zPfgi69ytkRLzWQWkR7g/I\nTE+L+Ob+ed2lFehWBeo8OmABiwNfpY6IrH5XcV7dpbyq8yoy+bG0mll7BOoSocn17C7mB9rPLh2S\n2jQwGNv+cmH7euC1pf2Rj44VzwP9WJXYH/nouLJJ/osL261+CCwTeXbaGV0vGaSuofroGFl1r+qj\n7KtL6eRHx6lTOaSnp+n+QXeJmNneheQbgHmDLUOITkS2LTqd1LC+7wInAFPM7GHgE8CJZnYk2Rf1\nxcA7215LIYYY2baoIwM6bHc/oyL78jbVRYhhQ7Yt6kh7I84cU0qPBo4qpK8PlDE3IPOCgEygP9hK\nnX22tX8UlcnT0uUsfjQtc/CEtMzWQN9yv/63NUCpz9oSdZ6V6iiFUPu1FHalisVDVE4bKfZRl+eD\nwdDdWKlyIn3Ye1XkTSrlR+ob6XOP9PVGyqnqDy5HcImYW6R92nWtyoGUIP1tIzXGQlPThRCiJshh\nCyFETZDDFkKImiCHLYQQNWFYHfb88oy2Dmd+5OtIhzE/MUmmE5nf/hmMbWVRWqTjeGikK9ACzaeT\ndCYL21DmsDrsBTVz2Atq6LAXRObrdhgLnhzpGuwcdXTYD490BVqgbj8y7bALdYkIIURNaO847GlH\nN6Z3XQjTDtyRPiRQRmr1G4DA2OjQ6i3ln69HF8JzDmzMC6zfNqZq4GsJi6wGH1mVZkopvXYhHFaq\nc2pBhciket0vAAACxUlEQVRiCgcEZAJjyysH6o5fCPsV6hxZHeiGuwJC7WPc0Ttsu2vhQsYd2Njm\nkUsXWbjJE/sjTVV1k49auJCJhTpH6hvRFYjd0XI5oxYuZPdCnSPtF1nTJVLnyPonY0vproULGVuy\ni1SdR+29Nwywloi5p0yiNcysPQULkePuI7J2tWxbtJtmtt02hy2EEGJoUR+2EELUBDlsIYSoCcPi\nsM1slpn90cweMLOPDIfOncXMlpjZ783sbjP7zUjXpwozu9zMlpvZvELenmY2x8zuN7MbOinMVZP6\nftLMHsnb+W4zKwfG7Whk20NP3ewahs+22+6wzawL+DeyCNWHAWeY2cx26x0CHDgxj55dXnewU6iK\n/P1RYI67HwL8Ik93Cn9Skcpl222jbnYNw2Tbw/GEfQzwoLsvcfetwFXA64ZB71DQ0RG0m0T+PhW4\nIt++Anj9sFZqAP4EI5XLtttA3ewahs+2h8NhT6dxYtUjhCIsjjgO/NzM5prZ20e6MoNgmrv3zSld\nTmyU+khT10jlsu3ho452DUNs28PhsOs6bvB4dz8KeBXwbjP7y5Gu0GDxbMxmp7f/18im5RwJPEYW\nqbwudHrbNqPWtl0Tu4Y22PZwOOylwL6F9L5kTyIdjbs/lv9/HLiW/vFzOpXlZrYXPB1UNhKbfsRw\n9xWeA3yD+rQzyLaHk1rZNbTHtofDYc8FDjaz/c1sDPAW4Lph0NsyZjbezHbPtycAJ1OfCNrXAWfl\n22cBPxjBuiSpeaRy2fbwUSu7hvbYdnvXEgHcfZuZvQf4GdmSBZe5+4J2691JpgHXmhlkbfQdd79h\nZKvUn4rI3+cDnwOuNrNzgCXA6SNXw0b+1CKVy7bbQ93sGobPtjU1XQghaoJmOgohRE2QwxZCiJog\nhy2EEDVBDlsIIWqCHLYQQtQEOWwhhKgJcthCCFET5LCFEKIm/C9Lhr5VCw7v4QAAAABJRU5ErkJg\ngg==\n", + "image/png": "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\ngg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1636,7 +1635,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.6" + "version": "2.7.11" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index 85f64ff6fa..1ccff330d1 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -382,7 +382,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ACBxUBN4bMLy4AAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAyLTA3VDE2OjAxOjU1LTA1OjAwqLKcsgAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMi0wN1QxNjowMTo1NS0wNTowMNnvJA4AAAAASUVORK5C\nYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ADFxAVDQXcnQ0AAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAzLTIzVDEyOjIxOjEzLTA0OjAwuK5PWAAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMy0yM1QxMjoyMToxMy0wNDowMMnz9+QAAAAASUVORK5C\nYII=\n", "text/plain": [ "" ] @@ -500,7 +500,7 @@ "cell_type": "code", "execution_count": 18, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ @@ -567,9 +567,10 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 34381b40a9445a727e360873aaa6ef892af1cb6a\n", - " Date/Time: 2016-02-07 16:01:57\n", + " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", + " Date/Time: 2016-03-23 12:21:14\n", " MPI Processes: 1\n", + " OpenMP Threads: 16\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -596,35 +597,46 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 0.54958 \n", - " 2/1 0.67628 \n", - " 3/1 0.70618 \n", - " 4/1 0.66601 \n", - " 5/1 0.70876 \n", - " 6/1 0.69708 \n", - " 7/1 0.68623 0.69166 +/- 0.00543\n", - " 8/1 0.69159 0.69163 +/- 0.00313\n", - " 9/1 0.69908 0.69349 +/- 0.00289\n", - " 10/1 0.63865 0.68253 +/- 0.01120\n", - " 11/1 0.65439 0.67784 +/- 0.01027\n", - " 12/1 0.68518 0.67889 +/- 0.00875\n", - " 13/1 0.69507 0.68091 +/- 0.00784\n", - " 14/1 0.70129 0.68317 +/- 0.00728\n", - " 15/1 0.71336 0.68619 +/- 0.00717\n", - " 16/1 0.68725 0.68629 +/- 0.00649\n", - " 17/1 0.72579 0.68958 +/- 0.00678\n", - " 18/1 0.67149 0.68819 +/- 0.00639\n", - " 19/1 0.67771 0.68744 +/- 0.00596\n", - " 20/1 0.68035 0.68697 +/- 0.00557\n", - " Triggers unsatisfied, max unc./thresh. is 1.09851 for absorption in tally 10002\n", - " The estimated number of batches is 24\n", + " 1/1 0.51036 \n", + " 2/1 0.64436 \n", + " 3/1 0.64874 \n", + " 4/1 0.65998 \n", + " 5/1 0.68369 \n", + " 6/1 0.69058 \n", + " 7/1 0.68288 0.68673 +/- 0.00385\n", + " 8/1 0.69483 0.68943 +/- 0.00350\n", + " 9/1 0.70348 0.69294 +/- 0.00430\n", + " 10/1 0.69969 0.69429 +/- 0.00359\n", + " 11/1 0.67170 0.69052 +/- 0.00477\n", + " 12/1 0.67661 0.68854 +/- 0.00450\n", + " 13/1 0.69571 0.68943 +/- 0.00400\n", + " 14/1 0.67433 0.68776 +/- 0.00390\n", + " 15/1 0.67744 0.68672 +/- 0.00364\n", + " 16/1 0.65256 0.68362 +/- 0.00453\n", + " 17/1 0.66657 0.68220 +/- 0.00437\n", + " 18/1 0.66887 0.68117 +/- 0.00415\n", + " 19/1 0.68238 0.68126 +/- 0.00384\n", + " 20/1 0.64423 0.67879 +/- 0.00435\n", + " Triggers unsatisfied, max unc./thresh. is 1.40549 for absorption in tally 10002\n", + " The estimated number of batches is 35\n", " Creating state point statepoint.020.h5...\n", - " 21/1 0.68105 0.68660 +/- 0.00522\n", - " 22/1 0.67168 0.68572 +/- 0.00498\n", - " 23/1 0.67520 0.68514 +/- 0.00473\n", - " 24/1 0.67940 0.68483 +/- 0.00449\n", - " Triggers satisfied for batch 24\n", - " Creating state point statepoint.024.h5...\n", + " 21/1 0.66266 0.67778 +/- 0.00419\n", + " 22/1 0.67656 0.67771 +/- 0.00393\n", + " 23/1 0.67643 0.67764 +/- 0.00371\n", + " 24/1 0.66192 0.67681 +/- 0.00361\n", + " 25/1 0.69848 0.67789 +/- 0.00359\n", + " 26/1 0.66274 0.67717 +/- 0.00349\n", + " 27/1 0.69746 0.67810 +/- 0.00345\n", + " 28/1 0.67485 0.67795 +/- 0.00330\n", + " 29/1 0.67427 0.67780 +/- 0.00316\n", + " 30/1 0.66531 0.67730 +/- 0.00308\n", + " 31/1 0.68457 0.67758 +/- 0.00297\n", + " 32/1 0.66592 0.67715 +/- 0.00289\n", + " 33/1 0.65929 0.67651 +/- 0.00286\n", + " 34/1 0.67252 0.67637 +/- 0.00276\n", + " 35/1 0.71827 0.67777 +/- 0.00301\n", + " Triggers satisfied for batch 35\n", + " Creating state point statepoint.035.h5...\n", "\n", " ===========================================================================\n", " ======================> SIMULATION FINISHED <======================\n", @@ -633,28 +645,28 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.0900E-01 seconds\n", - " Reading cross sections = 7.8000E-02 seconds\n", - " Total time in simulation = 4.9560E+00 seconds\n", - " Time in transport only = 4.9400E+00 seconds\n", - " Time in inactive batches = 7.3100E-01 seconds\n", - " Time in active batches = 4.2250E+00 seconds\n", - " Time synchronizing fission bank = 4.0000E-03 seconds\n", - " Sampling source sites = 3.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for initialization = 4.7000E-01 seconds\n", + " Reading cross sections = 1.3500E-01 seconds\n", + " Total time in simulation = 2.1470E+00 seconds\n", + " Time in transport only = 1.8480E+00 seconds\n", + " Time in inactive batches = 2.1900E-01 seconds\n", + " Time in active batches = 1.9280E+00 seconds\n", + " Time synchronizing fission bank = 7.0000E-03 seconds\n", + " Sampling source sites = 4.0000E-03 seconds\n", + " SEND/RECV source sites = 3.0000E-03 seconds\n", + " Time accumulating tallies = 2.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 5.2780E+00 seconds\n", - " Calculation Rate (inactive) = 17099.9 neutrons/second\n", - " Calculation Rate (active) = 8875.74 neutrons/second\n", + " Total time elapsed = 2.6360E+00 seconds\n", + " Calculation Rate (inactive) = 57077.6 neutrons/second\n", + " Calculation Rate (active) = 19450.2 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 0.68264 +/- 0.00405\n", - " k-effective (Track-length) = 0.68483 +/- 0.00449\n", - " k-effective (Absorption) = 0.68225 +/- 0.00336\n", - " Combined k-effective = 0.68275 +/- 0.00346\n", - " Leakage Fraction = 0.34345 +/- 0.00167\n", + " k-effective (Collision) = 0.67866 +/- 0.00337\n", + " k-effective (Track-length) = 0.67777 +/- 0.00301\n", + " k-effective (Absorption) = 0.68234 +/- 0.00332\n", + " Combined k-effective = 0.67987 +/- 0.00255\n", + " Leakage Fraction = 0.34141 +/- 0.00198\n", "\n" ] }, @@ -771,13 +783,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.18257268]]\n", + "[[[ 0.12916959]]\n", "\n", - " [[ 0.07111957]]\n", + " [[ 0.06336943]]\n", "\n", - " [[ 0.40880276]]\n", + " [[ 0.33288738]]\n", "\n", - " [[ 0.16407535]]]\n" + " [[ 0.14666158]]]\n" ] } ], @@ -800,290 +812,301 @@ { "data": { "text/html": [ - "
\n", + "
\n", "
100001U-2350.0743830.0002800.0748600.000303
1100001U-2380.0059590.0000360.0059520.000035
2
\n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", "
(mesh 1, x)(mesh 1, y)(mesh 1, z)mesh 1energy low [MeV]energy high [MeV]scoremeanstd. dev.
xyz
0 1 1 101110.00e+006.25e-07 fission2.02e-043.69e-05fission2.37e-043.06e-05
1 1 1 111110.00e+006.25e-07 nu-fission4.92e-048.98e-05nu-fission5.78e-047.46e-05
2 1 1 121116.25e-072.00e+01 fission7.62e-053.74e-06fission7.00e-055.15e-06
3 1 1 131116.25e-072.00e+01 nu-fission2.04e-049.88e-06nu-fission1.85e-041.28e-05
4 1 2 141210.00e+006.25e-07 fission3.75e-043.86e-05fission4.04e-043.09e-05
5 1 2 151210.00e+006.25e-07 nu-fission9.14e-049.41e-05nu-fission9.85e-047.54e-05
6 1 2 161216.25e-072.00e+01 fission1.07e-041.26e-05fission1.00e-045.08e-06
7 1 2 171216.25e-072.00e+01 nu-fission2.78e-043.16e-05nu-fission2.63e-041.34e-05
8 1 3 181310.00e+006.25e-07 fission5.64e-045.60e-05fission5.82e-045.00e-05
9 1 3 191310.00e+006.25e-07 nu-fission1.37e-031.37e-04nu-fission1.42e-031.22e-04
10 1 3 11316.25e-072.00e+01 fission1.49e-047.25e-06fission1.38e-041.03e-05
11 1 3 11316.25e-072.00e+01 nu-fission3.88e-041.78e-05nu-fission3.59e-042.54e-05
12 1 4 11410.00e+006.25e-07 fission6.69e-044.44e-05fission6.88e-044.25e-05
13 1 4 11410.00e+006.25e-07 nu-fission1.63e-031.08e-04nu-fission1.68e-031.04e-04
14 1 4 11416.25e-072.00e+01 fission1.65e-041.09e-05fission1.62e-047.43e-06
15 1 4 11416.25e-072.00e+01 nu-fission4.33e-042.89e-05nu-fission4.22e-041.93e-05
16 1 5 11510.00e+006.25e-07 fission9.32e-046.90e-05fission7.62e-045.69e-05
17 1 5 11510.00e+006.25e-07 nu-fission2.27e-031.68e-04nu-fission1.86e-031.39e-04
18 1 5 11516.25e-072.00e+01 fission1.83e-041.10e-05fission1.80e-048.16e-06
19 1 5 11516.25e-072.00e+01 nu-fission4.77e-042.77e-05nu-fission4.71e-042.08e-05
\n", "
" ], "text/plain": [ - " (mesh 1, x) (mesh 1, y) (mesh 1, z) energy low [MeV] \\\n", - "0 1 1 1 0.00e+00 \n", - "1 1 1 1 0.00e+00 \n", - "2 1 1 1 6.25e-07 \n", - "3 1 1 1 6.25e-07 \n", - "4 1 2 1 0.00e+00 \n", - "5 1 2 1 0.00e+00 \n", - "6 1 2 1 6.25e-07 \n", - "7 1 2 1 6.25e-07 \n", - "8 1 3 1 0.00e+00 \n", - "9 1 3 1 0.00e+00 \n", - "10 1 3 1 6.25e-07 \n", - "11 1 3 1 6.25e-07 \n", - "12 1 4 1 0.00e+00 \n", - "13 1 4 1 0.00e+00 \n", - "14 1 4 1 6.25e-07 \n", - "15 1 4 1 6.25e-07 \n", - "16 1 5 1 0.00e+00 \n", - "17 1 5 1 0.00e+00 \n", - "18 1 5 1 6.25e-07 \n", - "19 1 5 1 6.25e-07 \n", + " mesh 1 energy low [MeV] energy high [MeV] score mean \\\n", + " x y z \n", + "0 1 1 1 0.00e+00 6.25e-07 fission 2.37e-04 \n", + "1 1 1 1 0.00e+00 6.25e-07 nu-fission 5.78e-04 \n", + "2 1 1 1 6.25e-07 2.00e+01 fission 7.00e-05 \n", + "3 1 1 1 6.25e-07 2.00e+01 nu-fission 1.85e-04 \n", + "4 1 2 1 0.00e+00 6.25e-07 fission 4.04e-04 \n", + "5 1 2 1 0.00e+00 6.25e-07 nu-fission 9.85e-04 \n", + "6 1 2 1 6.25e-07 2.00e+01 fission 1.00e-04 \n", + "7 1 2 1 6.25e-07 2.00e+01 nu-fission 2.63e-04 \n", + "8 1 3 1 0.00e+00 6.25e-07 fission 5.82e-04 \n", + "9 1 3 1 0.00e+00 6.25e-07 nu-fission 1.42e-03 \n", + "10 1 3 1 6.25e-07 2.00e+01 fission 1.38e-04 \n", + "11 1 3 1 6.25e-07 2.00e+01 nu-fission 3.59e-04 \n", + "12 1 4 1 0.00e+00 6.25e-07 fission 6.88e-04 \n", + "13 1 4 1 0.00e+00 6.25e-07 nu-fission 1.68e-03 \n", + "14 1 4 1 6.25e-07 2.00e+01 fission 1.62e-04 \n", + "15 1 4 1 6.25e-07 2.00e+01 nu-fission 4.22e-04 \n", + "16 1 5 1 0.00e+00 6.25e-07 fission 7.62e-04 \n", + "17 1 5 1 0.00e+00 6.25e-07 nu-fission 1.86e-03 \n", + "18 1 5 1 6.25e-07 2.00e+01 fission 1.80e-04 \n", + "19 1 5 1 6.25e-07 2.00e+01 nu-fission 4.71e-04 \n", "\n", - " energy high [MeV] score mean std. dev. \n", - "0 6.25e-07 fission 2.02e-04 3.69e-05 \n", - "1 6.25e-07 nu-fission 4.92e-04 8.98e-05 \n", - "2 2.00e+01 fission 7.62e-05 3.74e-06 \n", - "3 2.00e+01 nu-fission 2.04e-04 9.88e-06 \n", - "4 6.25e-07 fission 3.75e-04 3.86e-05 \n", - "5 6.25e-07 nu-fission 9.14e-04 9.41e-05 \n", - "6 2.00e+01 fission 1.07e-04 1.26e-05 \n", - "7 2.00e+01 nu-fission 2.78e-04 3.16e-05 \n", - "8 6.25e-07 fission 5.64e-04 5.60e-05 \n", - "9 6.25e-07 nu-fission 1.37e-03 1.37e-04 \n", - "10 2.00e+01 fission 1.49e-04 7.25e-06 \n", - "11 2.00e+01 nu-fission 3.88e-04 1.78e-05 \n", - "12 6.25e-07 fission 6.69e-04 4.44e-05 \n", - "13 6.25e-07 nu-fission 1.63e-03 1.08e-04 \n", - "14 2.00e+01 fission 1.65e-04 1.09e-05 \n", - "15 2.00e+01 nu-fission 4.33e-04 2.89e-05 \n", - "16 6.25e-07 fission 9.32e-04 6.90e-05 \n", - "17 6.25e-07 nu-fission 2.27e-03 1.68e-04 \n", - "18 2.00e+01 fission 1.83e-04 1.10e-05 \n", - "19 2.00e+01 nu-fission 4.77e-04 2.77e-05 " + " std. dev. \n", + " \n", + "0 3.06e-05 \n", + "1 7.46e-05 \n", + "2 5.15e-06 \n", + "3 1.28e-05 \n", + "4 3.09e-05 \n", + "5 7.54e-05 \n", + "6 5.08e-06 \n", + "7 1.34e-05 \n", + "8 5.00e-05 \n", + "9 1.22e-04 \n", + "10 1.03e-05 \n", + "11 2.54e-05 \n", + "12 4.25e-05 \n", + "13 1.04e-04 \n", + "14 7.43e-06 \n", + "15 1.93e-05 \n", + "16 5.69e-05 \n", + "17 1.39e-04 \n", + "18 8.16e-06 \n", + "19 2.08e-05 " ] }, "execution_count": 25, @@ -1112,9 +1135,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\nhnwAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1137,7 +1160,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 27, @@ -1146,9 +1169,9 @@ }, { "data": { - "image/png": "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\ngg==\n", + "image/png": "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\nqJlZov8PnPpCLiDrzj8AAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1218,7 +1241,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -1232,148 +1255,148 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
0 10000 U-235 scatter-Y0,0 3.71e-021.15e-03010000U-235scatter-Y0,03.77e-026.49e-04
1 10000 U-235 scatter-Y1,-1 2.66e-043.23e-04
2 10000 U-235 scatter-Y1,0-4.17e-042.74e-04
3 10000 U-235 scatter-Y1,1-2.28e-042.37e-04
4 10000 U-235 scatter-Y2,-2 2.57e-051.99e-04
5 10000 U-235 scatter-Y2,-1-1.15e-041.85e-04
6 10000 U-235 scatter-Y2,0 1.51e-041.59e-04
7 10000 U-235 scatter-Y2,1-1.22e-042.80e-04
8 10000 U-235 scatter-Y2,2 7.65e-06110000U-235scatter-Y1,-12.54e-041.81e-04
9 10000 U-238 scatter-Y0,0 2.33e+001.31e-02210000U-235scatter-Y1,03.65e-052.70e-04
310000U-235scatter-Y1,1-1.70e-042.19e-04
410000U-235scatter-Y2,-27.47e-051.54e-04
510000U-235scatter-Y2,-1-2.35e-041.34e-04
610000U-235scatter-Y2,0-5.51e-051.79e-04
710000U-235scatter-Y2,1-1.27e-041.54e-04
810000U-235scatter-Y2,21.72e-041.40e-04
910000U-238scatter-Y0,02.34e+007.62e-03
10 10000 U-238 scatter-Y1,-1 2.45e-022.27e-0310000U-238scatter-Y1,-12.46e-021.71e-03
11 10000 U-238 scatter-Y1,0-5.87e-052.80e-0310000U-238scatter-Y1,01.15e-032.17e-03
12 10000 U-238 scatter-Y1,1-2.80e-022.54e-0310000U-238scatter-Y1,1-2.39e-022.15e-03
13 10000 U-238 scatter-Y2,-2-4.86e-031.58e-0310000U-238scatter-Y2,-2-3.92e-031.38e-03
14 10000 U-238 scatter-Y2,-1 5.57e-042.02e-0310000U-238scatter-Y2,-1-1.19e-031.58e-03
15 10000 U-238 scatter-Y2,0 6.24e-031.63e-0310000U-238scatter-Y2,03.22e-031.45e-03
16 10000 U-238 scatter-Y2,1-6.48e-041.55e-0310000U-238scatter-Y2,11.27e-049.70e-04
17 10000 U-238 scatter-Y2,2-1.03e-031.31e-0310000U-238scatter-Y2,2-2.70e-031.21e-03
\n", @@ -1381,24 +1404,24 @@ ], "text/plain": [ " cell nuclide score mean std. dev.\n", - "0 10000 U-235 scatter-Y0,0 3.71e-02 1.15e-03\n", - "1 10000 U-235 scatter-Y1,-1 2.66e-04 3.23e-04\n", - "2 10000 U-235 scatter-Y1,0 -4.17e-04 2.74e-04\n", - "3 10000 U-235 scatter-Y1,1 -2.28e-04 2.37e-04\n", - "4 10000 U-235 scatter-Y2,-2 2.57e-05 1.99e-04\n", - "5 10000 U-235 scatter-Y2,-1 -1.15e-04 1.85e-04\n", - "6 10000 U-235 scatter-Y2,0 1.51e-04 1.59e-04\n", - "7 10000 U-235 scatter-Y2,1 -1.22e-04 2.80e-04\n", - "8 10000 U-235 scatter-Y2,2 7.65e-06 1.81e-04\n", - "9 10000 U-238 scatter-Y0,0 2.33e+00 1.31e-02\n", - "10 10000 U-238 scatter-Y1,-1 2.45e-02 2.27e-03\n", - "11 10000 U-238 scatter-Y1,0 -5.87e-05 2.80e-03\n", - "12 10000 U-238 scatter-Y1,1 -2.80e-02 2.54e-03\n", - "13 10000 U-238 scatter-Y2,-2 -4.86e-03 1.58e-03\n", - "14 10000 U-238 scatter-Y2,-1 5.57e-04 2.02e-03\n", - "15 10000 U-238 scatter-Y2,0 6.24e-03 1.63e-03\n", - "16 10000 U-238 scatter-Y2,1 -6.48e-04 1.55e-03\n", - "17 10000 U-238 scatter-Y2,2 -1.03e-03 1.31e-03" + "0 10000 U-235 scatter-Y0,0 3.77e-02 6.49e-04\n", + "1 10000 U-235 scatter-Y1,-1 2.54e-04 1.81e-04\n", + "2 10000 U-235 scatter-Y1,0 3.65e-05 2.70e-04\n", + "3 10000 U-235 scatter-Y1,1 -1.70e-04 2.19e-04\n", + "4 10000 U-235 scatter-Y2,-2 7.47e-05 1.54e-04\n", + "5 10000 U-235 scatter-Y2,-1 -2.35e-04 1.34e-04\n", + "6 10000 U-235 scatter-Y2,0 -5.51e-05 1.79e-04\n", + "7 10000 U-235 scatter-Y2,1 -1.27e-04 1.54e-04\n", + "8 10000 U-235 scatter-Y2,2 1.72e-04 1.40e-04\n", + "9 10000 U-238 scatter-Y0,0 2.34e+00 7.62e-03\n", + "10 10000 U-238 scatter-Y1,-1 2.46e-02 1.71e-03\n", + "11 10000 U-238 scatter-Y1,0 1.15e-03 2.17e-03\n", + "12 10000 U-238 scatter-Y1,1 -2.39e-02 2.15e-03\n", + "13 10000 U-238 scatter-Y2,-2 -3.92e-03 1.38e-03\n", + "14 10000 U-238 scatter-Y2,-1 -1.19e-03 1.58e-03\n", + "15 10000 U-238 scatter-Y2,0 3.22e-03 1.45e-03\n", + "16 10000 U-238 scatter-Y2,1 1.27e-04 9.70e-04\n", + "17 10000 U-238 scatter-Y2,2 -2.70e-03 1.21e-03" ] }, "execution_count": 29, @@ -1432,8 +1455,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.00131009 0.01310707]\n", - " [ 0.00018089 0.00114976]]]\n" + "[[[ 0.00121338 0.00761835]\n", + " [ 0.00013952 0.00064888]]]\n" ] } ], @@ -1501,7 +1524,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.04537029]]]\n" + "[[[ 0.03284934]]]\n" ] } ], @@ -1530,7 +1553,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -1544,143 +1567,143 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
558 279 absorption9.27e-051.33e-05
559 279 scatter1.35e-028.05e-04
560 280 absorption8.41e-059.92e-06
561 280 scatter1.42e-026.12e-04
562 281 absorption9.12e-05279absorption7.14e-058.26e-06
559279scatter1.25e-025.75e-04
560280absorption8.50e-056.16e-06
561280scatter1.38e-024.58e-04
562281absorption1.04e-047.54e-06
563 281 scatter1.45e-025.90e-04281scatter1.55e-024.15e-04
564 282 absorption1.12e-041.24e-05282absorption1.22e-049.98e-06
565 282 scatter1.63e-027.29e-04282scatter1.68e-025.73e-04
566 283 absorption9.18e-057.12e-06283absorption1.14e-048.02e-06
567 283 scatter1.62e-026.61e-04283scatter1.66e-025.44e-04
568 284 absorption1.04e-041.10e-05284absorption1.06e-048.37e-06
569 284 scatter1.74e-025.99e-04284scatter1.64e-025.14e-04
570 285 absorption1.11e-041.14e-05285absorption1.23e-049.19e-06
571 285 scatter1.80e-027.74e-04285scatter1.70e-025.34e-04
572 286 absorption1.25e-041.20e-05286absorption1.14e-046.70e-06
573 286 scatter1.83e-028.28e-04286scatter1.75e-025.68e-04
574 287 absorption1.19e-041.30e-05287absorption1.14e-048.10e-06
575 287 scatter1.75e-027.57e-04287scatter1.72e-024.93e-04
576 288 absorption1.13e-041.40e-05288absorption1.06e-041.07e-05
577 288 scatter1.82e-027.82e-04288scatter1.72e-027.73e-04
\n", @@ -1688,26 +1711,26 @@ ], "text/plain": [ " distribcell score mean std. dev.\n", - "558 279 absorption 9.27e-05 1.33e-05\n", - "559 279 scatter 1.35e-02 8.05e-04\n", - "560 280 absorption 8.41e-05 9.92e-06\n", - "561 280 scatter 1.42e-02 6.12e-04\n", - "562 281 absorption 9.12e-05 8.26e-06\n", - "563 281 scatter 1.45e-02 5.90e-04\n", - "564 282 absorption 1.12e-04 1.24e-05\n", - "565 282 scatter 1.63e-02 7.29e-04\n", - "566 283 absorption 9.18e-05 7.12e-06\n", - "567 283 scatter 1.62e-02 6.61e-04\n", - "568 284 absorption 1.04e-04 1.10e-05\n", - "569 284 scatter 1.74e-02 5.99e-04\n", - "570 285 absorption 1.11e-04 1.14e-05\n", - "571 285 scatter 1.80e-02 7.74e-04\n", - "572 286 absorption 1.25e-04 1.20e-05\n", - "573 286 scatter 1.83e-02 8.28e-04\n", - "574 287 absorption 1.19e-04 1.30e-05\n", - "575 287 scatter 1.75e-02 7.57e-04\n", - "576 288 absorption 1.13e-04 1.40e-05\n", - "577 288 scatter 1.82e-02 7.82e-04" + "558 279 absorption 7.14e-05 8.26e-06\n", + "559 279 scatter 1.25e-02 5.75e-04\n", + "560 280 absorption 8.50e-05 6.16e-06\n", + "561 280 scatter 1.38e-02 4.58e-04\n", + "562 281 absorption 1.04e-04 7.54e-06\n", + "563 281 scatter 1.55e-02 4.15e-04\n", + "564 282 absorption 1.22e-04 9.98e-06\n", + "565 282 scatter 1.68e-02 5.73e-04\n", + "566 283 absorption 1.14e-04 8.02e-06\n", + "567 283 scatter 1.66e-02 5.44e-04\n", + "568 284 absorption 1.06e-04 8.37e-06\n", + "569 284 scatter 1.64e-02 5.14e-04\n", + "570 285 absorption 1.23e-04 9.19e-06\n", + "571 285 scatter 1.70e-02 5.34e-04\n", + "572 286 absorption 1.14e-04 6.70e-06\n", + "573 286 scatter 1.75e-02 5.68e-04\n", + "574 287 absorption 1.14e-04 8.10e-06\n", + "575 287 scatter 1.72e-02 4.93e-04\n", + "576 288 absorption 1.06e-04 1.07e-05\n", + "577 288 scatter 1.72e-02 7.73e-04" ] }, "execution_count": 33, @@ -1738,425 +1761,27 @@ }, "outputs": [ { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
(level 1, cell, id)(level 1, univ, id)(level 2, lat, id)(level 2, lat, x)(level 2, lat, y)(level 2, lat, z)(level 3, cell, id)(level 3, univ, id)distribcellscoremeanstd. dev.
0 10003 0 10001 0 0 0 10002 10000 0 absorption1.23e-041.19e-05
1 10003 0 10001 0 0 0 10002 10000 0 scatter1.78e-028.08e-04
2 10003 0 10001 0 1 0 10002 10000 1 absorption2.17e-041.96e-05
3 10003 0 10001 0 1 0 10002 10000 1 scatter2.89e-021.26e-03
4 10003 0 10001 0 2 0 10002 10000 2 absorption3.18e-042.03e-05
5 10003 0 10001 0 2 0 10002 10000 2 scatter4.05e-021.27e-03
6 10003 0 10001 0 3 0 10002 10000 3 absorption3.86e-041.80e-05
7 10003 0 10001 0 3 0 10002 10000 3 scatter4.86e-021.34e-03
8 10003 0 10001 0 4 0 10002 10000 4 absorption5.01e-042.60e-05
9 10003 0 10001 0 4 0 10002 10000 4 scatter5.71e-021.72e-03
10 10003 0 10001 0 5 0 10002 10000 5 absorption4.84e-042.58e-05
11 10003 0 10001 0 5 0 10002 10000 5 scatter6.08e-021.58e-03
12 10003 0 10001 0 6 0 10002 10000 6 absorption5.32e-043.90e-05
13 10003 0 10001 0 6 0 10002 10000 6 scatter6.91e-022.25e-03
14 10003 0 10001 0 7 0 10002 10000 7 absorption5.77e-043.92e-05
15 10003 0 10001 0 7 0 10002 10000 7 scatter7.67e-022.34e-03
16 10003 0 10001 0 8 0 10002 10000 8 absorption6.49e-043.90e-05
17 10003 0 10001 0 8 0 10002 10000 8 scatter8.16e-021.61e-03
18 10003 0 10001 0 9 0 10002 10000 9 absorption6.80e-043.17e-05
19 10003 0 10001 0 9 0 10002 10000 9 scatter8.77e-021.96e-03
\n", - "
" - ], - "text/plain": [ - " (level 1, cell, id) (level 1, univ, id) (level 2, lat, id) \\\n", - "0 10003 0 10001 \n", - "1 10003 0 10001 \n", - "2 10003 0 10001 \n", - "3 10003 0 10001 \n", - "4 10003 0 10001 \n", - "5 10003 0 10001 \n", - "6 10003 0 10001 \n", - "7 10003 0 10001 \n", - "8 10003 0 10001 \n", - "9 10003 0 10001 \n", - "10 10003 0 10001 \n", - "11 10003 0 10001 \n", - "12 10003 0 10001 \n", - "13 10003 0 10001 \n", - "14 10003 0 10001 \n", - "15 10003 0 10001 \n", - "16 10003 0 10001 \n", - "17 10003 0 10001 \n", - "18 10003 0 10001 \n", - "19 10003 0 10001 \n", - "\n", - " (level 2, lat, x) (level 2, lat, y) (level 2, lat, z) \\\n", - "0 0 0 0 \n", - "1 0 0 0 \n", - "2 0 1 0 \n", - "3 0 1 0 \n", - "4 0 2 0 \n", - "5 0 2 0 \n", - "6 0 3 0 \n", - "7 0 3 0 \n", - "8 0 4 0 \n", - "9 0 4 0 \n", - "10 0 5 0 \n", - "11 0 5 0 \n", - "12 0 6 0 \n", - "13 0 6 0 \n", - "14 0 7 0 \n", - "15 0 7 0 \n", - "16 0 8 0 \n", - "17 0 8 0 \n", - "18 0 9 0 \n", - "19 0 9 0 \n", - "\n", - " (level 3, cell, id) (level 3, univ, id) distribcell score \\\n", - "0 10002 10000 0 absorption \n", - "1 10002 10000 0 scatter \n", - "2 10002 10000 1 absorption \n", - "3 10002 10000 1 scatter \n", - "4 10002 10000 2 absorption \n", - "5 10002 10000 2 scatter \n", - "6 10002 10000 3 absorption \n", - "7 10002 10000 3 scatter \n", - "8 10002 10000 4 absorption \n", - "9 10002 10000 4 scatter \n", - "10 10002 10000 5 absorption \n", - "11 10002 10000 5 scatter \n", - "12 10002 10000 6 absorption \n", - "13 10002 10000 6 scatter \n", - "14 10002 10000 7 absorption \n", - "15 10002 10000 7 scatter \n", - "16 10002 10000 8 absorption \n", - "17 10002 10000 8 scatter \n", - "18 10002 10000 9 absorption \n", - "19 10002 10000 9 scatter \n", - "\n", - " mean std. dev. \n", - "0 1.23e-04 1.19e-05 \n", - "1 1.78e-02 8.08e-04 \n", - "2 2.17e-04 1.96e-05 \n", - "3 2.89e-02 1.26e-03 \n", - "4 3.18e-04 2.03e-05 \n", - "5 4.05e-02 1.27e-03 \n", - "6 3.86e-04 1.80e-05 \n", - "7 4.86e-02 1.34e-03 \n", - "8 5.01e-04 2.60e-05 \n", - "9 5.71e-02 1.72e-03 \n", - "10 4.84e-04 2.58e-05 \n", - "11 6.08e-02 1.58e-03 \n", - "12 5.32e-04 3.90e-05 \n", - "13 6.91e-02 2.25e-03 \n", - "14 5.77e-04 3.92e-05 \n", - "15 7.67e-02 2.34e-03 \n", - "16 6.49e-04 3.90e-05 \n", - "17 8.16e-02 1.61e-03 \n", - "18 6.80e-04 3.17e-05 \n", - "19 8.77e-02 1.96e-03 " - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "(('level 1', 'lat', 'x'), array([], dtype=float64), Filter\n", + "\tType =\tdistribcell\n", + "\tBins =\t[10002]\n", + ")\n" + ] + }, + { + "ename": "ZeroDivisionError", + "evalue": "integer division or modulo by zero", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# Get a pandas dataframe for the distribcell tally data\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mdf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtally\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_pandas_dataframe\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msummary\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msu\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnuclides\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;31m# Print the last twenty rows in the dataframe\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mdf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhead\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m20\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m/home/wboyd/Documents/NSE-CRPG-Codes/openmc/openmc/tallies.pyc\u001b[0m in \u001b[0;36mget_pandas_dataframe\u001b[1;34m(self, filters, nuclides, scores, summary, float_format)\u001b[0m\n\u001b[0;32m 1609\u001b[0m \u001b[1;31m# Append each Filter's DataFrame to the overall DataFrame\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1610\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mself_filter\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfilters\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1611\u001b[1;33m \u001b[0mfilter_df\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself_filter\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_pandas_dataframe\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata_size\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msummary\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1612\u001b[0m \u001b[0mdf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconcat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mdf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfilter_df\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1613\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m/home/wboyd/Documents/NSE-CRPG-Codes/openmc/openmc/filter.py\u001b[0m in \u001b[0;36mget_pandas_dataframe\u001b[1;34m(self, data_size, summary)\u001b[0m\n\u001b[0;32m 739\u001b[0m \u001b[1;32mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlevel_key\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlevel_bins\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 740\u001b[0m \u001b[0mlevel_bins\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrepeat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlevel_bins\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstride\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 741\u001b[1;33m \u001b[0mtile_factor\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdata_size\u001b[0m \u001b[1;33m/\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlevel_bins\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 742\u001b[0m \u001b[0mlevel_bins\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtile\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlevel_bins\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtile_factor\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 743\u001b[0m \u001b[0mlevel_dict\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mlevel_key\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlevel_bins\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mZeroDivisionError\u001b[0m: integer division or modulo by zero" + ] } ], "source": [ @@ -2169,85 +1794,11 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
meanstd. dev.
count2.89e+022.89e+02
mean4.18e-042.17e-05
std2.39e-048.82e-06
min1.81e-053.82e-06
25%2.02e-041.49e-05
50%4.02e-042.11e-05
75%6.15e-042.67e-05
max8.92e-044.43e-05
\n", - "
" - ], - "text/plain": [ - " mean std. dev.\n", - "count 2.89e+02 2.89e+02\n", - "mean 4.18e-04 2.17e-05\n", - "std 2.39e-04 8.82e-06\n", - "min 1.81e-05 3.82e-06\n", - "25% 2.02e-04 1.49e-05\n", - "50% 4.02e-04 2.11e-05\n", - "75% 6.15e-04 2.67e-05\n", - "max 8.92e-04 4.43e-05" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Show summary statistics for absorption distribcell tally data\n", "absorption = df[df['score'] == 'absorption']\n", @@ -2266,19 +1817,11 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Mann-Whitney Test p-value: 0.414863173548\n" - ] - } - ], + "outputs": [], "source": [ "# Extract tally data from pins in the pins divided along y=x diagonal \n", "multi_index = ('level 2', 'lat',)\n", @@ -2304,19 +1847,11 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Mann-Whitney Test p-value: 3.28554363741e-42\n" - ] - } - ], + "outputs": [], "source": [ "# Extract tally data from pins in the pins divided along y=-x diagonal\n", "multi_index = ('level 2', 'lat',)\n", @@ -2340,43 +1875,11 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/smharper/.local/lib/python2.7/site-packages/ipykernel/__main__.py:4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Extract the scatter tally data from pandas\n", "scatter = df[df['score'] == 'scatter']\n", @@ -2389,32 +1892,11 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Plot a histogram and kernel density estimate for the scattering rates\n", "scatter['mean'].plot(kind='hist', bins=25)\n", @@ -2441,7 +1923,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.10" + "version": "2.7.11" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/post-processing.ipynb b/docs/source/pythonapi/examples/post-processing.ipynb index 6526f03077..7daf1d1cf9 100644 --- a/docs/source/pythonapi/examples/post-processing.ipynb +++ b/docs/source/pythonapi/examples/post-processing.ipynb @@ -350,7 +350,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ABDg0CBtSiu0UAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDEtMTRUMDc6MDI6\nMDYtMDY6MDBlmV1NAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAxLTE0VDA3OjAyOjA2LTA2OjAw\nFMTl8QAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ADFxEMN1kSh5AAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDMtMjNUMTM6MTI6\nNTUtMDQ6MDDwd3AfAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAzLTIzVDEzOjEyOjU1LTA0OjAw\ngSrIowAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -460,8 +460,10 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: ea9fb637f63f9374c7436456141afa850b84acf9\n", - " Date/Time: 2016-01-14 07:02:06\n", + " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", + " Date/Time: 2016-03-23 13:12:56\n", + " MPI Processes: 1\n", + " OpenMP Threads: 16\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -488,106 +490,106 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 1.04894 \n", - " 2/1 1.01711 \n", - " 3/1 1.05357 \n", - " 4/1 1.03052 \n", - " 5/1 1.06523 \n", - " 6/1 1.06806 \n", - " 7/1 1.05161 \n", - " 8/1 1.04199 \n", - " 9/1 1.05010 \n", - " 10/1 1.04617 \n", - " 11/1 1.04894 \n", - " 12/1 1.06806 1.05850 +/- 0.00956\n", - " 13/1 1.05002 1.05567 +/- 0.00620\n", - " 14/1 1.03471 1.05043 +/- 0.00683\n", - " 15/1 1.01803 1.04395 +/- 0.00837\n", - " 16/1 1.05588 1.04594 +/- 0.00712\n", - " 17/1 1.07503 1.05010 +/- 0.00731\n", - " 18/1 1.02786 1.04732 +/- 0.00691\n", - " 19/1 1.00071 1.04214 +/- 0.00800\n", - " 20/1 1.05587 1.04351 +/- 0.00729\n", - " 21/1 1.03886 1.04309 +/- 0.00660\n", - " 22/1 1.04335 1.04311 +/- 0.00603\n", - " 23/1 1.04057 1.04292 +/- 0.00555\n", - " 24/1 1.01976 1.04126 +/- 0.00540\n", - " 25/1 1.05811 1.04238 +/- 0.00515\n", - " 26/1 1.02351 1.04120 +/- 0.00496\n", - " 27/1 1.05261 1.04188 +/- 0.00471\n", - " 28/1 1.03355 1.04141 +/- 0.00446\n", - " 29/1 1.02797 1.04071 +/- 0.00428\n", - " 30/1 1.03758 1.04055 +/- 0.00406\n", - " 31/1 1.04883 1.04094 +/- 0.00388\n", - " 32/1 1.03557 1.04070 +/- 0.00371\n", - " 33/1 1.02947 1.04021 +/- 0.00358\n", - " 34/1 1.03651 1.04006 +/- 0.00343\n", - " 35/1 1.03331 1.03979 +/- 0.00330\n", - " 36/1 1.05947 1.04054 +/- 0.00326\n", - " 37/1 1.05093 1.04093 +/- 0.00316\n", - " 38/1 1.06787 1.04189 +/- 0.00319\n", - " 39/1 1.01451 1.04095 +/- 0.00322\n", - " 40/1 1.02351 1.04037 +/- 0.00317\n", - " 41/1 1.04826 1.04062 +/- 0.00307\n", - " 42/1 1.04228 1.04067 +/- 0.00298\n", - " 43/1 1.03214 1.04041 +/- 0.00290\n", - " 44/1 1.04950 1.04068 +/- 0.00282\n", - " 45/1 1.06616 1.04141 +/- 0.00284\n", - " 46/1 1.07039 1.04221 +/- 0.00287\n", - " 47/1 1.00292 1.04115 +/- 0.00299\n", - " 48/1 1.04477 1.04125 +/- 0.00291\n", - " 49/1 1.03360 1.04105 +/- 0.00284\n", - " 50/1 1.04783 1.04122 +/- 0.00277\n", - " 51/1 1.03985 1.04119 +/- 0.00271\n", - " 52/1 1.02507 1.04080 +/- 0.00267\n", - " 53/1 1.03477 1.04066 +/- 0.00261\n", - " 54/1 1.00412 1.03983 +/- 0.00268\n", - " 55/1 1.02239 1.03945 +/- 0.00265\n", - " 56/1 1.04308 1.03952 +/- 0.00259\n", - " 57/1 1.05534 1.03986 +/- 0.00256\n", - " 58/1 1.06667 1.04042 +/- 0.00257\n", - " 59/1 1.06458 1.04091 +/- 0.00256\n", - " 60/1 1.00304 1.04015 +/- 0.00262\n", - " 61/1 1.05038 1.04036 +/- 0.00258\n", - " 62/1 1.02904 1.04014 +/- 0.00254\n", - " 63/1 1.00249 1.03943 +/- 0.00259\n", - " 64/1 1.01779 1.03903 +/- 0.00257\n", - " 65/1 1.05335 1.03929 +/- 0.00254\n", - " 66/1 1.06231 1.03970 +/- 0.00253\n", - " 67/1 1.02382 1.03942 +/- 0.00250\n", - " 68/1 1.03796 1.03939 +/- 0.00245\n", - " 69/1 1.03672 1.03935 +/- 0.00241\n", - " 70/1 1.02926 1.03918 +/- 0.00238\n", - " 71/1 1.05834 1.03950 +/- 0.00236\n", - " 72/1 1.04332 1.03956 +/- 0.00232\n", - " 73/1 1.05613 1.03982 +/- 0.00230\n", - " 74/1 1.01963 1.03950 +/- 0.00228\n", - " 75/1 1.02228 1.03924 +/- 0.00226\n", - " 76/1 1.04842 1.03938 +/- 0.00223\n", - " 77/1 1.02157 1.03911 +/- 0.00222\n", - " 78/1 1.02810 1.03895 +/- 0.00219\n", - " 79/1 1.05030 1.03912 +/- 0.00216\n", - " 80/1 1.02391 1.03890 +/- 0.00214\n", - " 81/1 1.02488 1.03870 +/- 0.00212\n", - " 82/1 1.04957 1.03885 +/- 0.00210\n", - " 83/1 1.03499 1.03880 +/- 0.00207\n", - " 84/1 1.05922 1.03907 +/- 0.00206\n", - " 85/1 1.05898 1.03934 +/- 0.00205\n", - " 86/1 1.02242 1.03912 +/- 0.00204\n", - " 87/1 1.03278 1.03904 +/- 0.00201\n", - " 88/1 1.06134 1.03932 +/- 0.00201\n", - " 89/1 1.04521 1.03940 +/- 0.00198\n", - " 90/1 1.04277 1.03944 +/- 0.00196\n", - " 91/1 1.04214 1.03947 +/- 0.00193\n", - " 92/1 1.05610 1.03967 +/- 0.00192\n", - " 93/1 1.04531 1.03974 +/- 0.00190\n", - " 94/1 1.01534 1.03945 +/- 0.00190\n", - " 95/1 1.03971 1.03945 +/- 0.00187\n", - " 96/1 1.07183 1.03983 +/- 0.00189\n", - " 97/1 1.07214 1.04020 +/- 0.00191\n", - " 98/1 1.03710 1.04017 +/- 0.00188\n", - " 99/1 1.02532 1.04000 +/- 0.00187\n", - " 100/1 1.03965 1.04000 +/- 0.00185\n", + " 1/1 1.03019 \n", + " 2/1 1.06141 \n", + " 3/1 1.03988 \n", + " 4/1 1.02696 \n", + " 5/1 1.06159 \n", + " 6/1 1.03855 \n", + " 7/1 1.03452 \n", + " 8/1 1.04526 \n", + " 9/1 1.02137 \n", + " 10/1 1.02129 \n", + " 11/1 1.04810 \n", + " 12/1 1.00454 1.02632 +/- 0.02178\n", + " 13/1 1.06176 1.03813 +/- 0.01725\n", + " 14/1 1.02927 1.03592 +/- 0.01240\n", + " 15/1 1.06158 1.04105 +/- 0.01089\n", + " 16/1 1.02692 1.03870 +/- 0.00920\n", + " 17/1 1.06703 1.04274 +/- 0.00876\n", + " 18/1 1.02341 1.04033 +/- 0.00797\n", + " 19/1 1.06256 1.04280 +/- 0.00745\n", + " 20/1 1.04829 1.04335 +/- 0.00668\n", + " 21/1 1.01742 1.04099 +/- 0.00649\n", + " 22/1 1.01629 1.03893 +/- 0.00627\n", + " 23/1 1.01145 1.03682 +/- 0.00614\n", + " 24/1 1.05042 1.03779 +/- 0.00577\n", + " 25/1 1.02543 1.03696 +/- 0.00543\n", + " 26/1 1.04643 1.03756 +/- 0.00512\n", + " 27/1 1.03020 1.03712 +/- 0.00483\n", + " 28/1 1.04088 1.03733 +/- 0.00456\n", + " 29/1 1.03885 1.03741 +/- 0.00431\n", + " 30/1 1.05497 1.03829 +/- 0.00418\n", + " 31/1 1.01946 1.03739 +/- 0.00408\n", + " 32/1 1.07049 1.03890 +/- 0.00417\n", + " 33/1 1.05920 1.03978 +/- 0.00408\n", + " 34/1 1.04910 1.04017 +/- 0.00393\n", + " 35/1 1.03827 1.04009 +/- 0.00377\n", + " 36/1 1.08004 1.04163 +/- 0.00393\n", + " 37/1 1.05729 1.04221 +/- 0.00383\n", + " 38/1 1.00328 1.04082 +/- 0.00394\n", + " 39/1 1.04603 1.04100 +/- 0.00381\n", + " 40/1 1.03193 1.04070 +/- 0.00369\n", + " 41/1 1.05548 1.04117 +/- 0.00360\n", + " 42/1 1.03566 1.04100 +/- 0.00349\n", + " 43/1 1.02848 1.04062 +/- 0.00340\n", + " 44/1 1.01806 1.03996 +/- 0.00337\n", + " 45/1 1.05404 1.04036 +/- 0.00330\n", + " 46/1 1.06319 1.04099 +/- 0.00327\n", + " 47/1 1.03238 1.04076 +/- 0.00318\n", + " 48/1 1.07148 1.04157 +/- 0.00320\n", + " 49/1 1.06016 1.04205 +/- 0.00316\n", + " 50/1 1.02051 1.04151 +/- 0.00312\n", + " 51/1 1.04903 1.04169 +/- 0.00305\n", + " 52/1 1.06004 1.04213 +/- 0.00301\n", + " 53/1 1.04790 1.04226 +/- 0.00294\n", + " 54/1 1.03742 1.04215 +/- 0.00288\n", + " 55/1 1.05670 1.04248 +/- 0.00283\n", + " 56/1 1.02739 1.04215 +/- 0.00279\n", + " 57/1 1.03133 1.04192 +/- 0.00274\n", + " 58/1 1.00078 1.04106 +/- 0.00281\n", + " 59/1 1.06328 1.04151 +/- 0.00279\n", + " 60/1 1.02275 1.04114 +/- 0.00276\n", + " 61/1 1.04295 1.04117 +/- 0.00271\n", + " 62/1 1.06079 1.04155 +/- 0.00268\n", + " 63/1 1.02148 1.04117 +/- 0.00266\n", + " 64/1 1.04801 1.04130 +/- 0.00261\n", + " 65/1 1.03501 1.04119 +/- 0.00257\n", + " 66/1 1.07021 1.04170 +/- 0.00257\n", + " 67/1 1.01764 1.04128 +/- 0.00256\n", + " 68/1 1.02806 1.04105 +/- 0.00253\n", + " 69/1 1.01645 1.04064 +/- 0.00252\n", + " 70/1 1.03971 1.04062 +/- 0.00248\n", + " 71/1 1.06581 1.04103 +/- 0.00247\n", + " 72/1 1.03359 1.04091 +/- 0.00243\n", + " 73/1 1.02155 1.04061 +/- 0.00241\n", + " 74/1 1.06730 1.04102 +/- 0.00241\n", + " 75/1 1.03557 1.04094 +/- 0.00238\n", + " 76/1 1.03795 1.04089 +/- 0.00234\n", + " 77/1 1.02976 1.04073 +/- 0.00231\n", + " 78/1 1.02257 1.04046 +/- 0.00229\n", + " 79/1 1.05500 1.04067 +/- 0.00227\n", + " 80/1 1.03306 1.04056 +/- 0.00224\n", + " 81/1 1.04693 1.04065 +/- 0.00221\n", + " 82/1 1.02975 1.04050 +/- 0.00218\n", + " 83/1 1.07900 1.04103 +/- 0.00222\n", + " 84/1 1.02915 1.04087 +/- 0.00219\n", + " 85/1 1.03153 1.04074 +/- 0.00217\n", + " 86/1 1.05792 1.04097 +/- 0.00215\n", + " 87/1 1.06045 1.04122 +/- 0.00214\n", + " 88/1 1.08821 1.04182 +/- 0.00219\n", + " 89/1 1.08077 1.04232 +/- 0.00222\n", + " 90/1 1.06569 1.04261 +/- 0.00221\n", + " 91/1 1.04921 1.04269 +/- 0.00219\n", + " 92/1 1.04849 1.04276 +/- 0.00216\n", + " 93/1 1.06074 1.04298 +/- 0.00215\n", + " 94/1 1.04030 1.04295 +/- 0.00212\n", + " 95/1 1.03190 1.04282 +/- 0.00210\n", + " 96/1 1.04525 1.04285 +/- 0.00207\n", + " 97/1 1.08086 1.04328 +/- 0.00210\n", + " 98/1 1.04070 1.04325 +/- 0.00207\n", + " 99/1 1.05730 1.04341 +/- 0.00206\n", + " 100/1 1.05036 1.04349 +/- 0.00203\n", " Creating state point statepoint.100.h5...\n", "\n", " ===========================================================================\n", @@ -597,27 +599,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.6000E-01 seconds\n", - " Reading cross sections = 1.0600E-01 seconds\n", - " Total time in simulation = 2.5756E+02 seconds\n", - " Time in transport only = 2.5751E+02 seconds\n", - " Time in inactive batches = 9.7270E+00 seconds\n", - " Time in active batches = 2.4783E+02 seconds\n", - " Time synchronizing fission bank = 2.1000E-02 seconds\n", - " Sampling source sites = 1.3000E-02 seconds\n", - " SEND/RECV source sites = 8.0000E-03 seconds\n", - " Time accumulating tallies = 1.3000E-02 seconds\n", - " Total time for finalization = 1.4600E-01 seconds\n", - " Total time elapsed = 2.5809E+02 seconds\n", - " Calculation Rate (inactive) = 5140.33 neutrons/second\n", - " Calculation Rate (active) = 1815.75 neutrons/second\n", + " Total time for initialization = 4.4800E-01 seconds\n", + " Reading cross sections = 1.3300E-01 seconds\n", + " Total time in simulation = 4.6592E+01 seconds\n", + " Time in transport only = 4.4918E+01 seconds\n", + " Time in inactive batches = 1.1940E+00 seconds\n", + " Time in active batches = 4.5398E+01 seconds\n", + " Time synchronizing fission bank = 2.2000E-02 seconds\n", + " Sampling source sites = 1.5000E-02 seconds\n", + " SEND/RECV source sites = 4.0000E-03 seconds\n", + " Time accumulating tallies = 3.1000E-02 seconds\n", + " Total time for finalization = 2.7300E-01 seconds\n", + " Total time elapsed = 4.7345E+01 seconds\n", + " Calculation Rate (inactive) = 41876.0 neutrons/second\n", + " Calculation Rate (active) = 9912.33 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.03912 +/- 0.00160\n", - " k-effective (Track-length) = 1.04000 +/- 0.00185\n", - " k-effective (Absorption) = 1.04240 +/- 0.00156\n", - " Combined k-effective = 1.04078 +/- 0.00127\n", + " k-effective (Collision) = 1.04225 +/- 0.00171\n", + " k-effective (Track-length) = 1.04349 +/- 0.00203\n", + " k-effective (Absorption) = 1.04192 +/- 0.00172\n", + " Combined k-effective = 1.04213 +/- 0.00141\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -717,18 +719,18 @@ { "data": { "text/plain": [ - "array([[[ 0.4107676 , 0. ]],\n", + "array([[[ 0.41161103, 0. ]],\n", "\n", - " [[ 0.40849402, 0. ]],\n", + " [[ 0.41135796, 0. ]],\n", "\n", - " [[ 0.41014343, 0. ]],\n", + " [[ 0.41058715, 0. ]],\n", "\n", " ..., \n", - " [[ 0.41049467, 0. ]],\n", + " [[ 0.40919256, 0. ]],\n", "\n", - " [[ 0.40982242, 0. ]],\n", + " [[ 0.41057119, 0. ]],\n", "\n", - " [[ 0.40996987, 0. ]]])" + " [[ 0.41225079, 0. ]]])" ] }, "execution_count": 20, @@ -764,30 +766,30 @@ { "data": { "text/plain": [ - "(array([[[ 0.00456408, 0. ]],\n", + "(array([[[ 0.00457346, 0. ]],\n", " \n", - " [[ 0.00453882, 0. ]],\n", + " [[ 0.00457064, 0. ]],\n", " \n", - " [[ 0.00455715, 0. ]],\n", + " [[ 0.00456208, 0. ]],\n", " \n", " ..., \n", - " [[ 0.00456105, 0. ]],\n", + " [[ 0.00454658, 0. ]],\n", " \n", - " [[ 0.00455358, 0. ]],\n", + " [[ 0.0045619 , 0. ]],\n", " \n", - " [[ 0.00455522, 0. ]]]),\n", - " array([[[ 1.95085625e-05, 0.00000000e+00]],\n", + " [[ 0.00458056, 0. ]]]),\n", + " array([[[ 1.92422804e-05, 0.00000000e+00]],\n", " \n", - " [[ 1.78129859e-05, 0.00000000e+00]],\n", + " [[ 1.58028832e-05, 0.00000000e+00]],\n", " \n", - " [[ 1.89709648e-05, 0.00000000e+00]],\n", + " [[ 1.56204065e-05, 0.00000000e+00]],\n", " \n", " ..., \n", - " [[ 1.56286612e-05, 0.00000000e+00]],\n", + " [[ 1.98926652e-05, 0.00000000e+00]],\n", " \n", - " [[ 1.65813279e-05, 0.00000000e+00]],\n", + " [[ 1.70440988e-05, 0.00000000e+00]],\n", " \n", - " [[ 1.67530331e-05, 0.00000000e+00]]]))" + " [[ 2.05592499e-05, 0.00000000e+00]]]))" ] }, "execution_count": 21, @@ -819,7 +821,7 @@ "output_type": "stream", "text": [ "Tally\n", - "\tID =\t10000\n", + "\tID =\t10001\n", "\tName =\t\n", "\tFilters =\t\n", " \t\tmesh\t[10000]\n", @@ -867,7 +869,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 24, @@ -876,9 +878,9 @@ }, { "data": { - "image/png": "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\nAAAAAElFTkSuQmCC\n", + "image/png": "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\n87qEMGb9LAAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -908,9 +910,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\nAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -951,13 +953,13 @@ { "data": { "text/plain": [ - "array([ (1.0, [0.2712169917165897, -0.04844236597355761, -0.1887902218343974], [0.3889598463000694, 0.8470657529949065, 0.36220139158953857], 2.2746035619924734, 0),\n", - " (1.0, [0.080729018085932, 0.19838688738571317, -0.38053428394017363], [-0.6604834049157511, -0.6893239101986768, 0.2976478097673534], 0.7833467555325838, 0),\n", - " (1.0, [0.019430574216787868, 0.06594180627832635, 0.23329810254580194], [-0.7472138923667574, 0.13227244377548197, -0.651287493870243], 1.1632342240714935, 0),\n", + "array([ (1.0, [0.09184833943086697, -0.23957301713645024, 0.35275256701073315], [0.6943502674814661, -0.18996972225593808, 0.694110373553384], 1.8499326750790277, 0),\n", + " (1.0, [0.09184833943086697, -0.23957301713645024, 0.35275256701073315], [0.5159084442036803, 0.8277435289738373, -0.22063346854291235], 0.08218797495117988, 0),\n", + " (1.0, [0.20806026831237243, 0.2806741437409227, 0.5336799247482618], [0.1279254678841002, 0.5275600667322506, -0.8398306083110433], 3.0474103747828187, 0),\n", " ...,\n", - " (1.0, [0.18544614514351207, -0.0113070561851496, 0.5468392238881264], [-0.8006491411918817, 0.43855795172388223, -0.4082007786475368], 1.4358240241589555, 0),\n", - " (1.0, [0.18544614514351207, -0.0113070561851496, 0.5468392238881264], [-0.5150076397044656, -0.34922134026850293, 0.7828228321575105], 1.5771133724329802, 0),\n", - " (1.0, [-0.2722999793764598, 0.22680062445008103, 0.2987060438567475], [0.9207818175032396, -0.2884020326181676, 0.26265017063984586], 2.932342523379745, 0)], \n", + " (1.0, [-0.19031412582761326, 0.09385643210497185, -0.22790301416803052], [0.5932941753311154, -0.7955471372215329, 0.12290961710458291], 1.9935677118802835, 0),\n", + " (1.0, [-0.19031412582761326, 0.09385643210497185, -0.22790301416803052], [-0.8965339181960187, -0.33727511250097575, 0.2871801386091118], 9.772336043367204, 0),\n", + " (1.0, [-0.19031412582761326, 0.09385643210497185, -0.22790301416803052], [0.5932941753311154, -0.7955471372215329, 0.12290961710458291], 1.9935677118802835, 0)], \n", " dtype=[('wgt', '" + "" ] }, "execution_count": 28, @@ -1033,9 +1035,9 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEUCAYAAAA8+dFZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGhJJREFUeJzt3Xu0ZGV55/Hvz8YL3kKfxNERUByF2O3SCWqQFTMjXhdp\nFdROBLoTlRkFjR0vk0wYV7zNOCsTHa/EJYNLVDQ2eIE4OIJ4BaV18I5KHxCWQ4bLGmLs9oZRuTzz\nR9XBsjhVZ+/u2lV1Tn8/a9Xq2u9+966n3lXdT7/73ft9U1VIktTUnWYdgCRpdTFxSJJaMXFIklox\ncUiSWjFxSJJaMXFIklrpNHEkOTrJFUmuSnLKMvsfmuRLSX6e5M/bHCtJmo109RxHknXAlcCTgOuB\nrwAnVNXiQJ37AA8EngHsrqo3NT1WkjQbXfY4jgCurqprqupm4Gzg2MEKVfX9qvoqcHPbYyVJs9Fl\n4jgQuHZg+7p+WdfHSpI61GXi2JtrYM6DIklzar8Oz309cPDA9sH0eg4TOzaJCUaS9kBVZU+P7bLH\n8VXg0CSHJLkLcBxw3oi6w1+g8bFV1fnrNa95TefHrVR31P425cNlw9vPetaz5rYt2xzbpJ7tObn2\nHLe/Sbs1KZtGW+5Ne07j7/retOfw9t7qrMdRVbck2QZcCKwDzqiqxSQn9/efnuR+9O6YujdwW5KX\nAhur6qfLHdtVrCs56qijOj9upbqj9rcpHy7b0++1N/bmM5se26Se7Tm59hy3v0m7tSnr2jz/XR+1\nbxa/zc5ux52GJLWa4583mzdv5pxzzpl1GGuG7Tk5tuVkJaHm9FKVVpkNGzbMOoQ1xfacHNtyvpg4\ndLuNGzfOOoQ1xfacHNtyvpg4JEmtmDgkSa2YOCRJrZg4JEmtmDgkSa2YOCRJrZg4JEmtmDgkSa2Y\nOCRJrZg4JEmtmDgkSa2YOCRJrZg4JEmtmDgkSa2YOCRJrZg4JO3TFhYgueNrYWHWkc0vE4ekNWFU\nAlgpCezeDVV3fO3ePb3YV5v9Zh2AJE3CUgJYTvZ4dW0txx6HJKkVE4ckqRUThySpFROHJKkVE4ck\nqRUThySpFW/HlbTmrV8/+pbc9eunG8taYOKQtObt2jXrCNYWL1VJ0jKWeilOR3JH9jgkaRnjein7\n+pPo9jgkSa2YOCRJrZg4JEmtmDgkSa2YOCRJrZg4JEmtdJo4khyd5IokVyU5ZUSdU/v7L0ty+ED5\n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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1082,19 +1084,11 @@ "metadata": {}, "output_type": "execute_result" }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python2.7/dist-packages/matplotlib/collections.py:590: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n", - " if self._edgecolors == str('face'):\n" - ] - }, { "data": { - "image/png": "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\nDQ2NFuT/AMH9R/ORrjlAAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1127,7 +1121,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.10" + "version": "2.7.11" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index bbadd1ac4d..da9cb2dd19 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -366,7 +366,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ACBxUFD8qiUrQAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDItMDdUMTY6MDU6\nMTUtMDU6MDAlEzIyAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAyLTA3VDE2OjA1OjE1LTA1OjAw\nVE6KjgAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ADFxEWMplVicQAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDMtMjNUMTM6MjI6\nNTAtMDQ6MDA7rTm5AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAzLTIzVDEzOjIyOjUwLTA0OjAw\nSvCBBQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -570,8 +570,10 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: b9efc990c7eb58f4a41524d59ae73396c9929436\n", - " Date/Time: 2016-02-23 10:52:44\n", + " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", + " Date/Time: 2016-03-23 13:22:51\n", + " MPI Processes: 1\n", + " OpenMP Threads: 16\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -598,26 +600,26 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 1.05992 \n", - " 2/1 1.05251 \n", - " 3/1 1.05204 \n", - " 4/1 1.02100 \n", - " 5/1 1.07784 \n", - " 6/1 1.04814 \n", - " 7/1 1.02335 1.03574 +/- 0.01239\n", - " 8/1 1.02415 1.03188 +/- 0.00813\n", - " 9/1 1.10331 1.04974 +/- 0.01876\n", - " 10/1 1.05452 1.05069 +/- 0.01456\n", - " 11/1 1.07867 1.05536 +/- 0.01277\n", - " 12/1 1.04203 1.05345 +/- 0.01096\n", - " 13/1 1.04482 1.05237 +/- 0.00955\n", - " 14/1 1.04117 1.05113 +/- 0.00852\n", - " 15/1 1.07581 1.05360 +/- 0.00801\n", - " 16/1 1.04235 1.05257 +/- 0.00731\n", - " 17/1 1.02710 1.05045 +/- 0.00701\n", - " 18/1 1.01970 1.04809 +/- 0.00687\n", - " 19/1 1.01022 1.04538 +/- 0.00691\n", - " 20/1 1.01449 1.04332 +/- 0.00675\n", + " 1/1 1.03167 \n", + " 2/1 1.03535 \n", + " 3/1 1.02709 \n", + " 4/1 1.00637 \n", + " 5/1 0.99250 \n", + " 6/1 1.06116 \n", + " 7/1 1.04289 1.05202 +/- 0.00913\n", + " 8/1 1.04779 1.05061 +/- 0.00546\n", + " 9/1 1.04695 1.04969 +/- 0.00397\n", + " 10/1 0.98778 1.03731 +/- 0.01276\n", + " 11/1 1.05810 1.04078 +/- 0.01098\n", + " 12/1 1.01539 1.03715 +/- 0.00996\n", + " 13/1 1.08644 1.04331 +/- 0.01060\n", + " 14/1 1.06425 1.04564 +/- 0.00963\n", + " 15/1 1.01768 1.04284 +/- 0.00906\n", + " 16/1 1.05877 1.04429 +/- 0.00832\n", + " 17/1 1.02195 1.04243 +/- 0.00782\n", + " 18/1 1.02488 1.04108 +/- 0.00732\n", + " 19/1 1.06285 1.04263 +/- 0.00695\n", + " 20/1 0.98751 1.03896 +/- 0.00744\n", " Creating state point statepoint.20.h5...\n", "\n", " ===========================================================================\n", @@ -627,27 +629,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 8.4700E-01 seconds\n", - " Reading cross sections = 5.8300E-01 seconds\n", - " Total time in simulation = 1.6037E+01 seconds\n", - " Time in transport only = 1.6026E+01 seconds\n", - " Time in inactive batches = 2.3070E+00 seconds\n", - " Time in active batches = 1.3730E+01 seconds\n", - " Time synchronizing fission bank = 5.0000E-03 seconds\n", - " Sampling source sites = 4.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Total time for initialization = 4.5200E-01 seconds\n", + " Reading cross sections = 1.2900E-01 seconds\n", + " Total time in simulation = 2.0330E+00 seconds\n", + " Time in transport only = 1.9420E+00 seconds\n", + " Time in inactive batches = 3.1000E-01 seconds\n", + " Time in active batches = 1.7230E+00 seconds\n", + " Time synchronizing fission bank = 2.0000E-03 seconds\n", + " Sampling source sites = 0.0000E+00 seconds\n", + " SEND/RECV source sites = 2.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 3.0000E-03 seconds\n", - " Total time elapsed = 1.6899E+01 seconds\n", - " Calculation Rate (inactive) = 5418.29 neutrons/second\n", - " Calculation Rate (active) = 2731.25 neutrons/second\n", + " Total time for finalization = 2.0000E-03 seconds\n", + " Total time elapsed = 2.5040E+00 seconds\n", + " Calculation Rate (inactive) = 40322.6 neutrons/second\n", + " Calculation Rate (active) = 21764.4 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.03935 +/- 0.00682\n", - " k-effective (Track-length) = 1.04332 +/- 0.00675\n", - " k-effective (Absorption) = 1.03845 +/- 0.00598\n", - " Combined k-effective = 1.04024 +/- 0.00523\n", + " k-effective (Collision) = 1.03965 +/- 0.00597\n", + " k-effective (Track-length) = 1.03896 +/- 0.00744\n", + " k-effective (Absorption) = 1.03976 +/- 0.00606\n", + " Combined k-effective = 1.03991 +/- 0.00536\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -738,7 +740,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -754,8 +756,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
0total(nu-fission / absorption)1.0401660.0090691.0368470.009685
\n", @@ -763,7 +765,7 @@ ], "text/plain": [ " nuclide score mean std. dev.\n", - "0 total (nu-fission / absorption) 1.04e+00 9.07e-03" + "0 total (nu-fission / absorption) 1.04e+00 9.69e-03" ] }, "execution_count": 26, @@ -798,7 +800,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -815,11 +817,11 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
000.0000016.250000e-07totalabsorption0.6947070.0066990.6920340.007217
\n", @@ -827,7 +829,7 @@ ], "text/plain": [ " energy low [MeV] energy high [MeV] nuclide score mean std. dev.\n", - "0 0.00e+00 6.25e-07 total absorption 6.95e-01 6.70e-03" + "0 0.00e+00 6.25e-07 total absorption 6.92e-01 7.22e-03" ] }, "execution_count": 27, @@ -860,7 +862,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -877,11 +879,11 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
000.0000016.250000e-07totalnu-fission1.2012160.0122881.2022980.013385
\n", @@ -889,7 +891,7 @@ ], "text/plain": [ " energy low [MeV] energy high [MeV] nuclide score mean std. dev.\n", - "0 0.00e+00 6.25e-07 total nu-fission 1.20e+00 1.23e-02" + "0 0.00e+00 6.25e-07 total nu-fission 1.20e+00 1.34e-02" ] }, "execution_count": 28, @@ -923,7 +925,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -941,12 +943,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
000.0000016.250000e-0710000totalabsorption0.749250.0082570.7491510.009003
\n", @@ -957,7 +959,7 @@ "0 0.00e+00 6.25e-07 10000 total absorption 7.49e-01 \n", "\n", " std. dev. \n", - "0 8.26e-03 " + "0 9.00e-03 " ] }, "execution_count": 29, @@ -989,7 +991,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -1007,12 +1009,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
000.0000016.250000e-0710000total(nu-fission / absorption)1.6636160.0186241.6634350.019976
\n", @@ -1023,7 +1025,7 @@ "0 0.00e+00 6.25e-07 10000 total \n", "\n", " score mean std. dev. \n", - "0 (nu-fission / absorption) 1.66e+00 1.86e-02 " + "0 (nu-fission / absorption) 1.66e+00 2.00e-02 " ] }, "execution_count": 30, @@ -1054,7 +1056,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -1072,12 +1074,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
000.0000016.250000e-0710000total(((absorption * nu-fission) * absorption) * (n...1.0401660.0219281.0368470.023674
\n", @@ -1088,7 +1090,7 @@ "0 0.00e+00 6.25e-07 10000 total \n", "\n", " score mean std. dev. \n", - "0 (((absorption * nu-fission) * absorption) * (n... 1.04e+00 2.19e-02 " + "0 (((absorption * nu-fission) * absorption) * (n... 1.04e+00 2.37e-02 " ] }, "execution_count": 31, @@ -1136,7 +1138,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -1154,82 +1156,82 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
0100000.0000000.0000010.000000e+006.250000e-07(U-238 / total)(nu-fission / flux)0.0000017.377419e-096.627781e-077.082494e-09
1100000.0000000.0000010.000000e+006.250000e-07(U-238 / total)(scatter / flux)0.2099892.303838e-032.099843e-012.003686e-03
2100000.0000000.0000010.000000e+006.250000e-07(U-235 / total)(nu-fission / flux)0.3564203.951669e-033.547246e-013.854562e-03
3100000.0000000.0000010.000000e+006.250000e-07(U-235 / total)(scatter / flux)0.0055556.101004e-055.554185e-035.316706e-05
4100000.00000120.0000006.250000e-072.000000e+01(U-238 / total)(nu-fission / flux)0.0071558.053460e-057.151165e-035.480545e-05
5100000.00000120.0000006.250000e-072.000000e+01(U-238 / total)(scatter / flux)0.2277701.079289e-032.278981e-016.424480e-04
6100000.00000120.0000006.250000e-072.000000e+01(U-235 / total)(nu-fission / flux)0.0080675.254797e-058.073636e-034.374754e-05
7100000.00000120.0000006.250000e-072.000000e+01(U-235 / total)(scatter / flux)0.0033671.647058e-053.369592e-038.971220e-06
\n", @@ -1247,14 +1249,14 @@ "7 10000 6.25e-07 2.00e+01 (U-235 / total) \n", "\n", " score mean std. dev. \n", - "0 (nu-fission / flux) 6.66e-07 7.38e-09 \n", - "1 (scatter / flux) 2.10e-01 2.30e-03 \n", - "2 (nu-fission / flux) 3.56e-01 3.95e-03 \n", - "3 (scatter / flux) 5.56e-03 6.10e-05 \n", - "4 (nu-fission / flux) 7.15e-03 8.05e-05 \n", - "5 (scatter / flux) 2.28e-01 1.08e-03 \n", - "6 (nu-fission / flux) 8.07e-03 5.25e-05 \n", - "7 (scatter / flux) 3.37e-03 1.65e-05 " + "0 (nu-fission / flux) 6.63e-07 7.08e-09 \n", + "1 (scatter / flux) 2.10e-01 2.00e-03 \n", + "2 (nu-fission / flux) 3.55e-01 3.85e-03 \n", + "3 (scatter / flux) 5.55e-03 5.32e-05 \n", + "4 (nu-fission / flux) 7.15e-03 5.48e-05 \n", + "5 (scatter / flux) 2.28e-01 6.42e-04 \n", + "6 (nu-fission / flux) 8.07e-03 4.37e-05 \n", + "7 (scatter / flux) 3.37e-03 8.97e-06 " ] }, "execution_count": 33, @@ -1285,11 +1287,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 6.65702880e-07]\n", - " [ 3.56420449e-01]]\n", + "[[[ 6.62778145e-07]\n", + " [ 3.54724568e-01]]\n", "\n", - " [[ 7.15488656e-03]\n", - " [ 8.06673774e-03]]]\n" + " [[ 7.15116511e-03]\n", + " [ 8.07363630e-03]]]\n" ] } ], @@ -1317,9 +1319,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.00555533]]\n", + "[[[ 0.00555418]]\n", "\n", - " [[ 0.0033668 ]]]\n" + " [[ 0.00336959]]]\n" ] } ], @@ -1341,8 +1343,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.22777006]\n", - " [ 0.0033668 ]]]\n" + "[[[ 0.22789806]\n", + " [ 0.00336959]]]\n" ] } ], @@ -1371,7 +1373,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -1389,42 +1391,42 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
0100000.0000000.0000010.000000e+006.250000e-07U-238nu-fission0.0000021.283958e-081.338459e-08
1100000.0000000.0000010.000000e+006.250000e-07U-235nu-fission0.8685536.880390e-030.8641417.363278e-03
2100000.00000120.0000006.250000e-072.000000e+01U-238nu-fission0.0821498.837250e-040.0821116.090952e-04
3100000.00000120.0000006.250000e-072.000000e+01U-235nu-fission0.0926185.195308e-040.0927034.695215e-04
\n", @@ -1432,16 +1434,16 @@ ], "text/plain": [ " cell energy low [MeV] energy high [MeV] nuclide score mean \\\n", - "0 10000 0.00e+00 6.25e-07 U-238 nu-fission 1.62e-06 \n", - "1 10000 0.00e+00 6.25e-07 U-235 nu-fission 8.69e-01 \n", + "0 10000 0.00e+00 6.25e-07 U-238 nu-fission 1.61e-06 \n", + "1 10000 0.00e+00 6.25e-07 U-235 nu-fission 8.64e-01 \n", "2 10000 6.25e-07 2.00e+01 U-238 nu-fission 8.21e-02 \n", - "3 10000 6.25e-07 2.00e+01 U-235 nu-fission 9.26e-02 \n", + "3 10000 6.25e-07 2.00e+01 U-235 nu-fission 9.27e-02 \n", "\n", " std. dev. \n", - "0 1.28e-08 \n", - "1 6.88e-03 \n", - "2 8.84e-04 \n", - "3 5.20e-04 " + "0 1.34e-08 \n", + "1 7.36e-03 \n", + "2 6.09e-04 \n", + "3 4.70e-04 " ] }, "execution_count": 37, @@ -1465,7 +1467,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -1484,91 +1486,91 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
0100021.000000e-080.0000001.080060e-07H-1scatter4.6193980.0401244.5910220.043961
1100021.080060e-070.0000011.166529e-06H-1scatter2.0307570.0112392.0324810.010876
2100021.166529e-060.0000131.259921e-05H-1scatter1.6584880.0097771.6541870.012130
3100021.259921e-050.0001361.360790e-04H-1scatter1.8530020.0073781.8647710.011649
4100021.360790e-040.0014701.469734e-03H-1scatter2.0507730.0124842.0568930.008555
5100021.469734e-030.0158741.587401e-02H-1scatter2.1317590.0078212.1388330.015180
6100021.587401e-020.1714491.714488e-01H-1scatter2.2137100.0151592.2072090.014853
7100021.714488e-011.8517491.851749e+00H-1scatter2.0119250.0094061.9994070.009053
8100021.851749e+0020.0000002.000000e+01H-1scatter0.3712800.0039490.3687600.003373
\n", @@ -1576,26 +1578,26 @@ ], "text/plain": [ " cell energy low [MeV] energy high [MeV] nuclide score mean \\\n", - "0 10002 1.00e-08 1.08e-07 H-1 scatter 4.62e+00 \n", + "0 10002 1.00e-08 1.08e-07 H-1 scatter 4.59e+00 \n", "1 10002 1.08e-07 1.17e-06 H-1 scatter 2.03e+00 \n", - "2 10002 1.17e-06 1.26e-05 H-1 scatter 1.66e+00 \n", - "3 10002 1.26e-05 1.36e-04 H-1 scatter 1.85e+00 \n", - "4 10002 1.36e-04 1.47e-03 H-1 scatter 2.05e+00 \n", - "5 10002 1.47e-03 1.59e-02 H-1 scatter 2.13e+00 \n", + "2 10002 1.17e-06 1.26e-05 H-1 scatter 1.65e+00 \n", + "3 10002 1.26e-05 1.36e-04 H-1 scatter 1.86e+00 \n", + "4 10002 1.36e-04 1.47e-03 H-1 scatter 2.06e+00 \n", + "5 10002 1.47e-03 1.59e-02 H-1 scatter 2.14e+00 \n", "6 10002 1.59e-02 1.71e-01 H-1 scatter 2.21e+00 \n", - "7 10002 1.71e-01 1.85e+00 H-1 scatter 2.01e+00 \n", - "8 10002 1.85e+00 2.00e+01 H-1 scatter 3.71e-01 \n", + "7 10002 1.71e-01 1.85e+00 H-1 scatter 2.00e+00 \n", + "8 10002 1.85e+00 2.00e+01 H-1 scatter 3.69e-01 \n", "\n", " std. dev. \n", - "0 4.01e-02 \n", - "1 1.12e-02 \n", - "2 9.78e-03 \n", - "3 7.38e-03 \n", - "4 1.25e-02 \n", - "5 7.82e-03 \n", - "6 1.52e-02 \n", - "7 9.41e-03 \n", - "8 3.95e-03 " + "0 4.40e-02 \n", + "1 1.09e-02 \n", + "2 1.21e-02 \n", + "3 1.16e-02 \n", + "4 8.56e-03 \n", + "5 1.52e-02 \n", + "6 1.49e-02 \n", + "7 9.05e-03 \n", + "8 3.37e-03 " ] }, "execution_count": 38, @@ -1628,7 +1630,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.10" + "version": "2.7.11" } }, "nbformat": 4, diff --git a/openmc/summary.py b/openmc/summary.py index 9609a866b6..b8f92664f9 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -565,7 +565,7 @@ class Summary(object): # Read in distribcell paths if filter_type == 'distribcell': paths = self._f['{0}/paths'.format(subsubbase)][...] - paths = [path.decode() for path in paths] + paths = [str(path.decode()) for path in paths] new_filter.distribcell_paths = paths # Add Filter to the Tally diff --git a/openmc/trigger.py b/openmc/trigger.py index ad2e9d6814..b8383bd271 100644 --- a/openmc/trigger.py +++ b/openmc/trigger.py @@ -2,8 +2,9 @@ from numbers import Real from xml.etree import ElementTree as ET import sys import warnings +from collections import Iterable -from openmc.checkvalue import check_type, check_value +import openmc.checkvalue as cv if sys.version_info[0] >= 3: basestring = str @@ -87,13 +88,13 @@ class Trigger(object): @trigger_type.setter def trigger_type(self, trigger_type): - check_value('tally trigger type', trigger_type, + cv.check_value('tally trigger type', trigger_type, ['variance', 'std_dev', 'rel_err']) self._trigger_type = trigger_type @threshold.setter def threshold(self, threshold): - check_type('tally trigger threshold', threshold, Real) + cv.check_type('tally trigger threshold', threshold, Real) self._threshold = threshold @scores.setter From c88f51de577d1b010a3fa1c44728556ac8229b61 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Wed, 23 Mar 2016 14:44:56 -0400 Subject: [PATCH 408/650] Fixed Filter.get_pandas_dataframe(...) to use new distribcell paths as optimization --- .../pythonapi/examples/mgxs-part-i.ipynb | 36 +- .../pythonapi/examples/mgxs-part-ii.ipynb | 1012 ++++++++++++++++- .../examples/pandas-dataframes.ipynb | 635 ++++++++++- openmc/filter.py | 14 +- 4 files changed, 1565 insertions(+), 132 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index 01cd7cd7f4..8db4cd4df4 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -519,7 +519,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", - " Date/Time: 2016-03-23 11:41:09\n", + " Date/Time: 2016-03-23 14:42:51\n", " MPI Processes: 1\n", " OpenMP Threads: 16\n", "\n", @@ -606,20 +606,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.7200E-01 seconds\n", - " Reading cross sections = 1.3300E-01 seconds\n", - " Total time in simulation = 2.7830E+00 seconds\n", - " Time in transport only = 2.1610E+00 seconds\n", - " Time in inactive batches = 4.1200E-01 seconds\n", - " Time in active batches = 2.3710E+00 seconds\n", - " Time synchronizing fission bank = 8.0000E-03 seconds\n", - " Sampling source sites = 5.0000E-03 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", + " Total time for initialization = 4.6200E-01 seconds\n", + " Reading cross sections = 1.3100E-01 seconds\n", + " Total time in simulation = 2.4000E+00 seconds\n", + " Time in transport only = 2.1340E+00 seconds\n", + " Time in inactive batches = 2.6400E-01 seconds\n", + " Time in active batches = 2.1360E+00 seconds\n", + " Time synchronizing fission bank = 2.0000E-03 seconds\n", + " Sampling source sites = 2.0000E-03 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 3.3710E+00 seconds\n", - " Calculation Rate (inactive) = 60679.6 neutrons/second\n", - " Calculation Rate (active) = 42176.3 neutrons/second\n", + " Total time for finalization = 1.0000E-03 seconds\n", + " Total time elapsed = 2.8800E+00 seconds\n", + " Calculation Rate (inactive) = 94697.0 neutrons/second\n", + " Calculation Rate (active) = 46816.5 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -914,7 +914,7 @@ " 6.250000e-07\n", " total\n", " (((total / flux) - (absorption / flux)) - (sca...\n", - " 0.000000e+00\n", + " 8.881784e-16\n", " 0.011292\n", " \n", " \n", @@ -924,7 +924,7 @@ " 2.000000e+01\n", " total\n", " (((total / flux) - (absorption / flux)) - (sca...\n", - " -3.330669e-16\n", + " -9.992007e-16\n", " 0.002570\n", " \n", " \n", @@ -937,8 +937,8 @@ "1 1 6.25e-07 2.00e+01 total \n", "\n", " score mean std. dev. \n", - "0 (((total / flux) - (absorption / flux)) - (sca... 0.00e+00 1.13e-02 \n", - "1 (((total / flux) - (absorption / flux)) - (sca... -3.33e-16 2.57e-03 " + "0 (((total / flux) - (absorption / flux)) - (sca... 8.88e-16 1.13e-02 \n", + "1 (((total / flux) - (absorption / flux)) - (sca... -9.99e-16 2.57e-03 " ] }, "execution_count": 23, diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index 5d8da5da1d..9378b1bd57 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -41,17 +41,6 @@ "\n", " warnings.warn(_use_error_msg)\n" ] - }, - { - "ename": "ImportError", - "evalue": "No module named ace", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mImportError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 9\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mopenmoc\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 10\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mopenmoc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcompatible\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mget_openmoc_geometry\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 11\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mpyne\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mace\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 12\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mu'matplotlib inline'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mImportError\u001b[0m: No module named ace" - ] } ], "source": [ @@ -79,7 +68,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "collapsed": true }, @@ -102,7 +91,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "collapsed": false }, @@ -136,7 +125,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": { "collapsed": true }, @@ -162,7 +151,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "collapsed": true }, @@ -190,7 +179,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "collapsed": false }, @@ -227,7 +216,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": { "collapsed": false }, @@ -252,7 +241,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": { "collapsed": true }, @@ -279,7 +268,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": { "collapsed": true }, @@ -317,7 +306,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": { "collapsed": true }, @@ -342,7 +331,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": { "collapsed": false }, @@ -373,7 +362,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": { "collapsed": false }, @@ -397,7 +386,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": { "collapsed": false }, @@ -434,11 +423,185 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " .d88888b. 888b d888 .d8888b.\n", + " d88P\" \"Y88b 8888b d8888 d88P Y88b\n", + " 888 888 88888b.d88888 888 888\n", + " 888 888 88888b. .d88b. 88888b. 888Y88888P888 888 \n", + " 888 888 888 \"88b d8P Y8b 888 \"88b 888 Y888P 888 888 \n", + " 888 888 888 888 88888888 888 888 888 Y8P 888 888 888\n", + " Y88b. .d88P 888 d88P Y8b. 888 888 888 \" 888 Y88b d88P\n", + " \"Y88888P\" 88888P\" \"Y8888 888 888 888 888 \"Y8888P\"\n", + "__________________888______________________________________________________\n", + " 888\n", + " 888\n", + "\n", + " Copyright: 2011-2015 Massachusetts Institute of Technology\n", + " License: http://mit-crpg.github.io/openmc/license.html\n", + " Version: 0.7.1\n", + " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", + " Date/Time: 2016-03-23 14:41:04\n", + " MPI Processes: 1\n", + " OpenMP Threads: 16\n", + "\n", + " ===========================================================================\n", + " ========================> INITIALIZATION <=========================\n", + " ===========================================================================\n", + "\n", + " Reading settings XML file...\n", + " Reading cross sections XML file...\n", + " Reading geometry XML file...\n", + " Reading materials XML file...\n", + " Reading tallies XML file...\n", + " Building neighboring cells lists for each surface...\n", + " Loading ACE cross section table: 92235.71c\n", + " Loading ACE cross section table: 92238.71c\n", + " Loading ACE cross section table: 8016.71c\n", + " Loading ACE cross section table: 1001.71c\n", + " Loading ACE cross section table: 40090.71c\n", + " Maximum neutron transport energy: 20.0000 MeV for 92235.71c\n", + " Initializing source particles...\n", + "\n", + " ===========================================================================\n", + " ====================> K EIGENVALUE SIMULATION <====================\n", + " ===========================================================================\n", + "\n", + " Bat./Gen. k Average k \n", + " ========= ======== ==================== \n", + " 1/1 1.20332 \n", + " 2/1 1.22209 \n", + " 3/1 1.24309 \n", + " 4/1 1.22833 \n", + " 5/1 1.21786 \n", + " 6/1 1.22005 \n", + " 7/1 1.20894 \n", + " 8/1 1.22071 \n", + " 9/1 1.21279 \n", + " 10/1 1.22198 \n", + " 11/1 1.22287 \n", + " 12/1 1.25490 1.23888 +/- 0.01602\n", + " 13/1 1.20224 1.22667 +/- 0.01532\n", + " 14/1 1.23375 1.22844 +/- 0.01098\n", + " 15/1 1.23068 1.22889 +/- 0.00851\n", + " 16/1 1.23073 1.22920 +/- 0.00696\n", + " 17/1 1.25364 1.23269 +/- 0.00684\n", + " 18/1 1.20820 1.22963 +/- 0.00667\n", + " 19/1 1.23138 1.22982 +/- 0.00588\n", + " 20/1 1.20682 1.22752 +/- 0.00574\n", + " 21/1 1.23580 1.22827 +/- 0.00525\n", + " 22/1 1.24190 1.22941 +/- 0.00492\n", + " 23/1 1.23125 1.22955 +/- 0.00453\n", + " 24/1 1.21606 1.22859 +/- 0.00430\n", + " 25/1 1.23653 1.22912 +/- 0.00404\n", + " 26/1 1.23850 1.22970 +/- 0.00383\n", + " 27/1 1.20986 1.22853 +/- 0.00378\n", + " 28/1 1.25277 1.22988 +/- 0.00381\n", + " 29/1 1.23334 1.23006 +/- 0.00361\n", + " 30/1 1.24345 1.23073 +/- 0.00349\n", + " 31/1 1.21565 1.23001 +/- 0.00339\n", + " 32/1 1.20555 1.22890 +/- 0.00342\n", + " 33/1 1.22995 1.22895 +/- 0.00327\n", + " 34/1 1.19763 1.22764 +/- 0.00339\n", + " 35/1 1.22645 1.22760 +/- 0.00325\n", + " 36/1 1.23900 1.22803 +/- 0.00316\n", + " 37/1 1.24305 1.22859 +/- 0.00309\n", + " 38/1 1.22484 1.22846 +/- 0.00298\n", + " 39/1 1.20986 1.22782 +/- 0.00294\n", + " 40/1 1.23764 1.22814 +/- 0.00286\n", + " 41/1 1.20476 1.22739 +/- 0.00287\n", + " 42/1 1.21652 1.22705 +/- 0.00280\n", + " 43/1 1.21279 1.22662 +/- 0.00275\n", + " 44/1 1.20210 1.22590 +/- 0.00276\n", + " 45/1 1.22644 1.22591 +/- 0.00268\n", + " 46/1 1.22907 1.22600 +/- 0.00261\n", + " 47/1 1.24057 1.22639 +/- 0.00257\n", + " 48/1 1.21610 1.22612 +/- 0.00251\n", + " 49/1 1.22199 1.22602 +/- 0.00245\n", + " 50/1 1.20860 1.22558 +/- 0.00243\n", + " Triggers unsatisfied, max unc./thresh. is 1.25496 for flux in tally 10050\n", + " The estimated number of batches is 73\n", + " Creating state point statepoint.050.h5...\n", + " 51/1 1.21850 1.22541 +/- 0.00237\n", + " 52/1 1.22833 1.22548 +/- 0.00232\n", + " 53/1 1.20239 1.22494 +/- 0.00233\n", + " 54/1 1.24876 1.22548 +/- 0.00234\n", + " 55/1 1.20670 1.22506 +/- 0.00232\n", + " 56/1 1.24260 1.22545 +/- 0.00230\n", + " 57/1 1.21039 1.22512 +/- 0.00228\n", + " 58/1 1.23929 1.22542 +/- 0.00225\n", + " 59/1 1.21357 1.22518 +/- 0.00221\n", + " 60/1 1.23456 1.22537 +/- 0.00218\n", + " 61/1 1.23963 1.22565 +/- 0.00215\n", + " 62/1 1.24020 1.22593 +/- 0.00213\n", + " 63/1 1.22325 1.22587 +/- 0.00209\n", + " 64/1 1.22070 1.22578 +/- 0.00205\n", + " 65/1 1.22423 1.22575 +/- 0.00201\n", + " 66/1 1.22973 1.22582 +/- 0.00198\n", + " 67/1 1.21842 1.22569 +/- 0.00195\n", + " 68/1 1.19552 1.22517 +/- 0.00198\n", + " 69/1 1.21475 1.22500 +/- 0.00196\n", + " 70/1 1.21888 1.22489 +/- 0.00193\n", + " 71/1 1.19720 1.22444 +/- 0.00195\n", + " 72/1 1.23770 1.22465 +/- 0.00193\n", + " 73/1 1.23894 1.22488 +/- 0.00191\n", + " Triggers unsatisfied, max unc./thresh. is 1.00243 for flux in tally 10050\n", + " The estimated number of batches is 74\n", + " 74/1 1.22437 1.22487 +/- 0.00188\n", + " Triggers satisfied for batch 74\n", + " Creating state point statepoint.074.h5...\n", + "\n", + " ===========================================================================\n", + " ======================> SIMULATION FINISHED <======================\n", + " ===========================================================================\n", + "\n", + "\n", + " =======================> TIMING STATISTICS <=======================\n", + "\n", + " Total time for initialization = 4.5200E-01 seconds\n", + " Reading cross sections = 1.2500E-01 seconds\n", + " Total time in simulation = 2.6407E+01 seconds\n", + " Time in transport only = 2.5427E+01 seconds\n", + " Time in inactive batches = 1.7110E+00 seconds\n", + " Time in active batches = 2.4696E+01 seconds\n", + " Time synchronizing fission bank = 2.7000E-02 seconds\n", + " Sampling source sites = 1.9000E-02 seconds\n", + " SEND/RECV source sites = 5.0000E-03 seconds\n", + " Time accumulating tallies = 5.0000E-03 seconds\n", + " Total time for finalization = 2.0000E-02 seconds\n", + " Total time elapsed = 2.6954E+01 seconds\n", + " Calculation Rate (inactive) = 58445.4 neutrons/second\n", + " Calculation Rate (active) = 16197.0 neutrons/second\n", + "\n", + " ============================> RESULTS <============================\n", + "\n", + " k-effective (Collision) = 1.22358 +/- 0.00179\n", + " k-effective (Track-length) = 1.22487 +/- 0.00188\n", + " k-effective (Absorption) = 1.22300 +/- 0.00114\n", + " Combined k-effective = 1.22347 +/- 0.00106\n", + " Leakage Fraction = 0.00000 +/- 0.00000\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Run OpenMC\n", "executor = openmc.Executor()\n", @@ -461,14 +624,14 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Load the last statepoint file\n", - "sp = openmc.StatePoint('statepoint.080.h5')" + "sp = openmc.StatePoint('statepoint.074.h5')" ] }, { @@ -480,7 +643,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": { "collapsed": true }, @@ -500,7 +663,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -535,11 +698,46 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Multi-Group XS\n", + "\tReaction Type =\tnu-fission\n", + "\tDomain Type =\tcell\n", + "\tDomain ID =\t10000\n", + "\tNuclide =\tU-235\n", + "\tCross Sections [barns]:\n", + " Group 1 [0.821 - 20.0 MeV]:\t3.30e+00 +/- 2.19e-01%\n", + " Group 2 [0.00553 - 0.821 MeV]:\t3.96e+00 +/- 1.32e-01%\n", + " Group 3 [4e-06 - 0.00553 MeV]:\t5.52e+01 +/- 2.31e-01%\n", + " Group 4 [6.25e-07 - 4e-06 MeV]:\t8.83e+01 +/- 2.96e-01%\n", + " Group 5 [2.8e-07 - 6.25e-07 MeV]:\t2.90e+02 +/- 4.64e-01%\n", + " Group 6 [1.4e-07 - 2.8e-07 MeV]:\t4.49e+02 +/- 4.22e-01%\n", + " Group 7 [5.8e-08 - 1.4e-07 MeV]:\t6.87e+02 +/- 2.97e-01%\n", + " Group 8 [0.0 - 5.8e-08 MeV]:\t1.44e+03 +/- 2.91e-01%\n", + "\n", + "\tNuclide =\tU-238\n", + "\tCross Sections [barns]:\n", + " Group 1 [0.821 - 20.0 MeV]:\t1.06e+00 +/- 2.56e-01%\n", + " Group 2 [0.00553 - 0.821 MeV]:\t1.21e-03 +/- 2.55e-01%\n", + " Group 3 [4e-06 - 0.00553 MeV]:\t5.77e-04 +/- 3.67e+00%\n", + " Group 4 [6.25e-07 - 4e-06 MeV]:\t6.54e-06 +/- 2.74e-01%\n", + " Group 5 [2.8e-07 - 6.25e-07 MeV]:\t1.07e-05 +/- 4.55e-01%\n", + " Group 6 [1.4e-07 - 2.8e-07 MeV]:\t1.55e-05 +/- 4.25e-01%\n", + " Group 7 [5.8e-08 - 1.4e-07 MeV]:\t2.30e-05 +/- 2.97e-01%\n", + " Group 8 [0.0 - 5.8e-08 MeV]:\t4.24e-05 +/- 2.90e-01%\n", + "\n", + "\n", + "\n" + ] + } + ], "source": [ "nufission = xs_library[fuel_cell.id]['nu-fission']\n", "nufission.print_xs(xs_type='micro', nuclides=['U-235', 'U-238'])" @@ -554,11 +752,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Multi-Group XS\n", + "\tReaction Type =\tnu-fission\n", + "\tDomain Type =\tcell\n", + "\tDomain ID =\t10000\n", + "\tCross Sections [cm^-1]:\n", + " Group 1 [0.821 - 20.0 MeV]:\t2.52e-02 +/- 2.44e-01%\n", + " Group 2 [0.00553 - 0.821 MeV]:\t1.51e-03 +/- 1.30e-01%\n", + " Group 3 [4e-06 - 0.00553 MeV]:\t2.07e-02 +/- 2.31e-01%\n", + " Group 4 [6.25e-07 - 4e-06 MeV]:\t3.31e-02 +/- 2.96e-01%\n", + " Group 5 [2.8e-07 - 6.25e-07 MeV]:\t1.09e-01 +/- 4.64e-01%\n", + " Group 6 [1.4e-07 - 2.8e-07 MeV]:\t1.69e-01 +/- 4.22e-01%\n", + " Group 7 [5.8e-08 - 1.4e-07 MeV]:\t2.58e-01 +/- 2.97e-01%\n", + " Group 8 [0.0 - 5.8e-08 MeV]:\t5.40e-01 +/- 2.91e-01%\n", + "\n", + "\n", + "\n" + ] + } + ], "source": [ "nufission = xs_library[fuel_cell.id]['nu-fission']\n", "nufission.print_xs(xs_type='macro', nuclides='sum')" @@ -573,11 +794,141 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
cellgroup ingroup outnuclidemeanstd. dev.
1261000211H-10.2341150.003568
1271000211O-161.5637070.005953
1241000212H-11.5941290.002369
1251000212O-160.2857610.001676
1221000213H-10.0110890.000248
1231000213O-160.0000000.000000
1201000214H-10.0000000.000000
1211000214O-160.0000000.000000
1181000215H-10.0000000.000000
1191000215O-160.0000000.000000
\n", + "
" + ], + "text/plain": [ + " cell group in group out nuclide mean std. dev.\n", + "126 10002 1 1 H-1 0.234115 0.003568\n", + "127 10002 1 1 O-16 1.563707 0.005953\n", + "124 10002 1 2 H-1 1.594129 0.002369\n", + "125 10002 1 2 O-16 0.285761 0.001676\n", + "122 10002 1 3 H-1 0.011089 0.000248\n", + "123 10002 1 3 O-16 0.000000 0.000000\n", + "120 10002 1 4 H-1 0.000000 0.000000\n", + "121 10002 1 4 O-16 0.000000 0.000000\n", + "118 10002 1 5 H-1 0.000000 0.000000\n", + "119 10002 1 5 O-16 0.000000 0.000000" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "nuscatter = xs_library[moderator_cell.id]['nu-scatter']\n", "df = nuscatter.get_pandas_dataframe(xs_type='micro')\n", @@ -593,7 +944,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": { "collapsed": true }, @@ -615,22 +966,133 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Multi-Group XS\n", + "\tReaction Type =\ttransport\n", + "\tDomain Type =\tcell\n", + "\tDomain ID =\t10000\n", + "\tNuclide =\tU-235\n", + "\tCross Sections [cm^-1]:\n", + " Group 1 [6.25e-07 - 20.0 MeV]:\t7.73e-03 +/- 5.06e-01%\n", + " Group 2 [0.0 - 6.25e-07 MeV]:\t1.82e-01 +/- 2.05e-01%\n", + "\n", + "\tNuclide =\tU-238\n", + "\tCross Sections [cm^-1]:\n", + " Group 1 [6.25e-07 - 20.0 MeV]:\t2.17e-01 +/- 1.44e-01%\n", + " Group 2 [0.0 - 6.25e-07 MeV]:\t2.53e-01 +/- 2.57e-01%\n", + "\n", + "\tNuclide =\tO-16\n", + "\tCross Sections [cm^-1]:\n", + " Group 1 [6.25e-07 - 20.0 MeV]:\t1.46e-01 +/- 1.60e-01%\n", + " Group 2 [0.0 - 6.25e-07 MeV]:\t1.75e-01 +/- 2.94e-01%\n", + "\n", + "\n", + "\n" + ] + } + ], "source": [ "condensed_xs.print_xs()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
cellgroup innuclidemeanstd. dev.
3100001U-23520.6116920.104237
4100001U-2389.5853580.013808
5100001O-163.1641900.005049
0100002U-235485.4134260.996410
1100002U-23811.1903860.028731
2100002O-163.7948590.011139
\n", + "
" + ], + "text/plain": [ + " cell group in nuclide mean std. dev.\n", + "3 10000 1 U-235 20.611692 0.104237\n", + "4 10000 1 U-238 9.585358 0.013808\n", + "5 10000 1 O-16 3.164190 0.005049\n", + "0 10000 2 U-235 485.413426 0.996410\n", + "1 10000 2 U-238 11.190386 0.028731\n", + "2 10000 2 O-16 3.794859 0.011139" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df = condensed_xs.get_pandas_dataframe(xs_type='micro')\n", "df" @@ -652,7 +1114,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -671,7 +1133,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": { "collapsed": false }, @@ -716,11 +1178,183 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ NORMAL ] Importing ray tracing data from file...\n", + "[ NORMAL ] Computing the eigenvalue...\n", + "[ NORMAL ] Iteration 0:\tk_eff = 0.574672\tres = 0.000E+00\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.679815\tres = 4.253E-01\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.660826\tres = 1.830E-01\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.658940\tres = 2.793E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.643012\tres = 2.853E-03\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.625810\tres = 2.417E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.606678\tres = 2.675E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.587485\tres = 3.057E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.569029\tres = 3.164E-02\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.551707\tres = 3.142E-02\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.536035\tres = 3.044E-02\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.522275\tres = 2.841E-02\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.510610\tres = 2.567E-02\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.501106\tres = 2.234E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.493832\tres = 1.861E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.488781\tres = 1.452E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.485924\tres = 1.023E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.485211\tres = 5.846E-03\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.486571\tres = 1.467E-03\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.489905\tres = 2.802E-03\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.495105\tres = 6.853E-03\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.502056\tres = 1.061E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.510630\tres = 1.404E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.520696\tres = 1.708E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.532120\tres = 1.971E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.544768\tres = 2.194E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.558505\tres = 2.377E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.573200\tres = 2.522E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.588723\tres = 2.631E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.604951\tres = 2.708E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.621765\tres = 2.756E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.639053\tres = 2.779E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.656709\tres = 2.780E-02\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.674632\tres = 2.763E-02\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.692730\tres = 2.729E-02\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.710919\tres = 2.683E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.729118\tres = 2.626E-02\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.747258\tres = 2.560E-02\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.765273\tres = 2.488E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.783104\tres = 2.411E-02\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.800701\tres = 2.330E-02\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.818017\tres = 2.247E-02\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.835012\tres = 2.163E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.851651\tres = 2.078E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.867906\tres = 1.993E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.883750\tres = 1.909E-02\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.899164\tres = 1.826E-02\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.914131\tres = 1.744E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.928638\tres = 1.665E-02\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.942676\tres = 1.587E-02\n", + "[ NORMAL ] Iteration 50:\tk_eff = 0.956239\tres = 1.512E-02\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.969323\tres = 1.439E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.981927\tres = 1.368E-02\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.994054\tres = 1.300E-02\n", + "[ NORMAL ] Iteration 54:\tk_eff = 1.005705\tres = 1.235E-02\n", + "[ NORMAL ] Iteration 55:\tk_eff = 1.016886\tres = 1.172E-02\n", + "[ NORMAL ] Iteration 56:\tk_eff = 1.027604\tres = 1.112E-02\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.037866\tres = 1.054E-02\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.047682\tres = 9.987E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.057062\tres = 9.458E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.066016\tres = 8.953E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.074556\tres = 8.471E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.082693\tres = 8.011E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.090442\tres = 7.573E-03\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.097813\tres = 7.156E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.104820\tres = 6.760E-03\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.111477\tres = 6.383E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.117795\tres = 6.025E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.123789\tres = 5.685E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.129470\tres = 5.362E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.134853\tres = 5.056E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.139950\tres = 4.766E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.144772\tres = 4.491E-03\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.149333\tres = 4.230E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.153643\tres = 3.984E-03\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.157716\tres = 3.751E-03\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.161561\tres = 3.530E-03\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.165190\tres = 3.321E-03\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.168613\tres = 3.124E-03\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.171841\tres = 2.938E-03\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.174883\tres = 2.762E-03\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.177749\tres = 2.596E-03\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.180447\tres = 2.439E-03\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.182988\tres = 2.291E-03\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.185378\tres = 2.152E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.187627\tres = 2.021E-03\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.189741\tres = 1.897E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.191728\tres = 1.780E-03\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.193595\tres = 1.670E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.195349\tres = 1.567E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.196996\tres = 1.469E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.198543\tres = 1.378E-03\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.199994\tres = 1.292E-03\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.201355\tres = 1.211E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.202632\tres = 1.134E-03\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.203829\tres = 1.063E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.204952\tres = 9.956E-04\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.206004\tres = 9.324E-04\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.206989\tres = 8.730E-04\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.207913\tres = 8.173E-04\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.208777\tres = 7.650E-04\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.209587\tres = 7.159E-04\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.210345\tres = 6.698E-04\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.211054\tres = 6.266E-04\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.211718\tres = 5.861E-04\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.212339\tres = 5.481E-04\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.212920\tres = 5.125E-04\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.213463\tres = 4.792E-04\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.213971\tres = 4.479E-04\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.214446\tres = 4.186E-04\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.214890\tres = 3.912E-04\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.215305\tres = 3.655E-04\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.215692\tres = 3.414E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.216055\tres = 3.189E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.216393\tres = 2.979E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.216709\tres = 2.782E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.217004\tres = 2.597E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.217279\tres = 2.425E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.217536\tres = 2.263E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.217776\tres = 2.113E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.218000\tres = 1.971E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.218209\tres = 1.840E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.218404\tres = 1.716E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.218587\tres = 1.601E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.218756\tres = 1.494E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.218915\tres = 1.393E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.219062\tres = 1.299E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.219200\tres = 1.212E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.219329\tres = 1.130E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.219448\tres = 1.054E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.219560\tres = 9.822E-05\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.219664\tres = 9.156E-05\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.219761\tres = 8.534E-05\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.219851\tres = 7.954E-05\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.219936\tres = 7.413E-05\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.220014\tres = 6.908E-05\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.220087\tres = 6.437E-05\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.220156\tres = 5.997E-05\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.220219\tres = 5.587E-05\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.220278\tres = 5.205E-05\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.220333\tres = 4.848E-05\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.220385\tres = 4.516E-05\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.220433\tres = 4.206E-05\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.220477\tres = 3.917E-05\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.220518\tres = 3.648E-05\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.220557\tres = 3.397E-05\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.220593\tres = 3.163E-05\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.220627\tres = 2.945E-05\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.220658\tres = 2.742E-05\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.220687\tres = 2.552E-05\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.220714\tres = 2.376E-05\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.220739\tres = 2.212E-05\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.220762\tres = 2.059E-05\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.220784\tres = 1.916E-05\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.220804\tres = 1.783E-05\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.220823\tres = 1.660E-05\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.220841\tres = 1.545E-05\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.220857\tres = 1.437E-05\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.220872\tres = 1.338E-05\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.220886\tres = 1.245E-05\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.220899\tres = 1.158E-05\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.220912\tres = 1.077E-05\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.220923\tres = 1.002E-05\n" + ] + } + ], "source": [ "# Generate tracks for OpenMOC\n", "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=128, spacing=0.1)\n", @@ -740,11 +1374,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "openmc keff = 1.223474\n", + "openmoc keff = 1.220923\n", + "bias [pcm]: -255.0\n" + ] + } + ], "source": [ "# Print report of keff and bias with OpenMC\n", "openmoc_keff = solver.getKeff()\n", @@ -765,7 +1409,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -805,11 +1449,251 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ NORMAL ] Importing ray tracing data from file...\n", + "[ NORMAL ] Computing the eigenvalue...\n", + "[ NORMAL ] Iteration 0:\tk_eff = 0.495816\tres = 0.000E+00\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.557477\tres = 5.042E-01\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.518301\tres = 1.244E-01\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.509212\tres = 7.027E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.496489\tres = 1.754E-02\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.488581\tres = 2.498E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.482897\tres = 1.593E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.479775\tres = 1.163E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.478835\tres = 6.464E-03\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.479872\tres = 1.960E-03\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.482685\tres = 2.166E-03\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.487085\tres = 5.861E-03\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.492901\tres = 9.116E-03\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.499973\tres = 1.194E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.508155\tres = 1.435E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.517314\tres = 1.637E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.527327\tres = 1.802E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.538081\tres = 1.936E-02\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.549475\tres = 2.039E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.561413\tres = 2.117E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.573810\tres = 2.173E-02\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.586589\tres = 2.208E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.599678\tres = 2.227E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.613012\tres = 2.231E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.626532\tres = 2.224E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.640186\tres = 2.206E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.653925\tres = 2.179E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.667706\tres = 2.146E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.681489\tres = 2.107E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.695240\tres = 2.064E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.708927\tres = 2.018E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.722522\tres = 1.969E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.736000\tres = 1.918E-02\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.749339\tres = 1.865E-02\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.762519\tres = 1.812E-02\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.775522\tres = 1.759E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.788335\tres = 1.705E-02\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.800944\tres = 1.652E-02\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.813338\tres = 1.599E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.825507\tres = 1.547E-02\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.837444\tres = 1.496E-02\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.849142\tres = 1.446E-02\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.860595\tres = 1.397E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.871801\tres = 1.349E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.882755\tres = 1.302E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.893455\tres = 1.256E-02\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.903901\tres = 1.212E-02\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.914091\tres = 1.169E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.924027\tres = 1.127E-02\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.933708\tres = 1.087E-02\n", + "[ NORMAL ] Iteration 50:\tk_eff = 0.943137\tres = 1.048E-02\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.952314\tres = 1.010E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.961243\tres = 9.731E-03\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.969927\tres = 9.376E-03\n", + "[ NORMAL ] Iteration 54:\tk_eff = 0.978367\tres = 9.033E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 0.986568\tres = 8.702E-03\n", + "[ NORMAL ] Iteration 56:\tk_eff = 0.994534\tres = 8.382E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.002267\tres = 8.074E-03\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.009773\tres = 7.776E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.017055\tres = 7.489E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.024118\tres = 7.212E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.030966\tres = 6.944E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.037603\tres = 6.687E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.044036\tres = 6.438E-03\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.050267\tres = 6.199E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.056302\tres = 5.968E-03\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.062145\tres = 5.746E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.067802\tres = 5.532E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.073276\tres = 5.326E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.078573\tres = 5.127E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.083698\tres = 4.935E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.088654\tres = 4.751E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.093447\tres = 4.573E-03\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.098080\tres = 4.402E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.102560\tres = 4.238E-03\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.106889\tres = 4.079E-03\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.111072\tres = 3.926E-03\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.115114\tres = 3.779E-03\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.119018\tres = 3.638E-03\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.122790\tres = 3.501E-03\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.126432\tres = 3.370E-03\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.129949\tres = 3.244E-03\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.133344\tres = 3.122E-03\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.136622\tres = 3.005E-03\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.139786\tres = 2.892E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.142840\tres = 2.784E-03\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.145786\tres = 2.679E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.148630\tres = 2.579E-03\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.151373\tres = 2.482E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.154020\tres = 2.388E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.156573\tres = 2.299E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.159035\tres = 2.212E-03\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.161410\tres = 2.129E-03\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.163700\tres = 2.049E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.165909\tres = 1.972E-03\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.168038\tres = 1.898E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.170091\tres = 1.826E-03\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.172070\tres = 1.758E-03\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.173977\tres = 1.691E-03\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.175816\tres = 1.628E-03\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.177589\tres = 1.566E-03\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.179297\tres = 1.507E-03\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.180943\tres = 1.451E-03\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.182529\tres = 1.396E-03\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.184058\tres = 1.343E-03\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.185530\tres = 1.293E-03\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.186949\tres = 1.244E-03\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.188316\tres = 1.197E-03\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.189633\tres = 1.152E-03\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.190902\tres = 1.108E-03\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.192124\tres = 1.066E-03\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.193301\tres = 1.026E-03\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.194435\tres = 9.874E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.195527\tres = 9.501E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.196578\tres = 9.142E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.197591\tres = 8.797E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.198566\tres = 8.464E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.199506\tres = 8.144E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.200410\tres = 7.836E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.201281\tres = 7.540E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.202119\tres = 7.255E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.202927\tres = 6.980E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.203704\tres = 6.716E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.204452\tres = 6.462E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.205173\tres = 6.217E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.205867\tres = 5.982E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.206534\tres = 5.755E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.207177\tres = 5.537E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.207796\tres = 5.327E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.208391\tres = 5.126E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.208965\tres = 4.931E-04\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.209517\tres = 4.744E-04\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.210048\tres = 4.565E-04\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.210559\tres = 4.391E-04\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.211051\tres = 4.225E-04\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.211525\tres = 4.065E-04\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.211980\tres = 3.910E-04\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.212419\tres = 3.762E-04\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.212841\tres = 3.619E-04\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.213247\tres = 3.482E-04\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.213638\tres = 3.350E-04\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.214015\tres = 3.222E-04\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.214377\tres = 3.100E-04\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.214725\tres = 2.982E-04\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.215060\tres = 2.869E-04\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.215383\tres = 2.760E-04\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.215693\tres = 2.655E-04\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.215992\tres = 2.554E-04\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.216280\tres = 2.457E-04\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.216556\tres = 2.364E-04\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.216822\tres = 2.274E-04\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.217078\tres = 2.187E-04\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.217325\tres = 2.104E-04\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.217562\tres = 2.024E-04\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.217790\tres = 1.947E-04\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.218009\tres = 1.873E-04\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.218220\tres = 1.802E-04\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.218423\tres = 1.733E-04\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.218619\tres = 1.667E-04\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.218807\tres = 1.604E-04\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.218988\tres = 1.543E-04\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.219162\tres = 1.484E-04\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.219329\tres = 1.428E-04\n", + "[ NORMAL ] Iteration 163:\tk_eff = 1.219490\tres = 1.373E-04\n", + "[ NORMAL ] Iteration 164:\tk_eff = 1.219645\tres = 1.321E-04\n", + "[ NORMAL ] Iteration 165:\tk_eff = 1.219794\tres = 1.271E-04\n", + "[ NORMAL ] Iteration 166:\tk_eff = 1.219938\tres = 1.222E-04\n", + "[ NORMAL ] Iteration 167:\tk_eff = 1.220076\tres = 1.176E-04\n", + "[ NORMAL ] Iteration 168:\tk_eff = 1.220208\tres = 1.131E-04\n", + "[ NORMAL ] Iteration 169:\tk_eff = 1.220336\tres = 1.088E-04\n", + "[ NORMAL ] Iteration 170:\tk_eff = 1.220459\tres = 1.046E-04\n", + "[ NORMAL ] Iteration 171:\tk_eff = 1.220577\tres = 1.006E-04\n", + "[ NORMAL ] Iteration 172:\tk_eff = 1.220691\tres = 9.681E-05\n", + "[ NORMAL ] Iteration 173:\tk_eff = 1.220800\tres = 9.312E-05\n", + "[ NORMAL ] Iteration 174:\tk_eff = 1.220905\tres = 8.957E-05\n", + "[ NORMAL ] Iteration 175:\tk_eff = 1.221006\tres = 8.615E-05\n", + "[ NORMAL ] Iteration 176:\tk_eff = 1.221104\tres = 8.287E-05\n", + "[ NORMAL ] Iteration 177:\tk_eff = 1.221197\tres = 7.971E-05\n", + "[ NORMAL ] Iteration 178:\tk_eff = 1.221287\tres = 7.667E-05\n", + "[ NORMAL ] Iteration 179:\tk_eff = 1.221374\tres = 7.374E-05\n", + "[ NORMAL ] Iteration 180:\tk_eff = 1.221457\tres = 7.093E-05\n", + "[ NORMAL ] Iteration 181:\tk_eff = 1.221537\tres = 6.823E-05\n", + "[ NORMAL ] Iteration 182:\tk_eff = 1.221615\tres = 6.562E-05\n", + "[ NORMAL ] Iteration 183:\tk_eff = 1.221689\tres = 6.312E-05\n", + "[ NORMAL ] Iteration 184:\tk_eff = 1.221760\tres = 6.071E-05\n", + "[ NORMAL ] Iteration 185:\tk_eff = 1.221829\tres = 5.840E-05\n", + "[ NORMAL ] Iteration 186:\tk_eff = 1.221895\tres = 5.617E-05\n", + "[ NORMAL ] Iteration 187:\tk_eff = 1.221958\tres = 5.402E-05\n", + "[ NORMAL ] Iteration 188:\tk_eff = 1.222019\tres = 5.196E-05\n", + "[ NORMAL ] Iteration 189:\tk_eff = 1.222078\tres = 4.998E-05\n", + "[ NORMAL ] Iteration 190:\tk_eff = 1.222134\tres = 4.807E-05\n", + "[ NORMAL ] Iteration 191:\tk_eff = 1.222189\tres = 4.624E-05\n", + "[ NORMAL ] Iteration 192:\tk_eff = 1.222241\tres = 4.447E-05\n", + "[ NORMAL ] Iteration 193:\tk_eff = 1.222291\tres = 4.277E-05\n", + "[ NORMAL ] Iteration 194:\tk_eff = 1.222340\tres = 4.114E-05\n", + "[ NORMAL ] Iteration 195:\tk_eff = 1.222386\tres = 3.957E-05\n", + "[ NORMAL ] Iteration 196:\tk_eff = 1.222431\tres = 3.806E-05\n", + "[ NORMAL ] Iteration 197:\tk_eff = 1.222474\tres = 3.661E-05\n", + "[ NORMAL ] Iteration 198:\tk_eff = 1.222515\tres = 3.521E-05\n", + "[ NORMAL ] Iteration 199:\tk_eff = 1.222555\tres = 3.386E-05\n", + "[ NORMAL ] Iteration 200:\tk_eff = 1.222594\tres = 3.257E-05\n", + "[ NORMAL ] Iteration 201:\tk_eff = 1.222630\tres = 3.133E-05\n", + "[ NORMAL ] Iteration 202:\tk_eff = 1.222666\tres = 3.013E-05\n", + "[ NORMAL ] Iteration 203:\tk_eff = 1.222700\tres = 2.898E-05\n", + "[ NORMAL ] Iteration 204:\tk_eff = 1.222733\tres = 2.787E-05\n", + "[ NORMAL ] Iteration 205:\tk_eff = 1.222764\tres = 2.681E-05\n", + "[ NORMAL ] Iteration 206:\tk_eff = 1.222795\tres = 2.578E-05\n", + "[ NORMAL ] Iteration 207:\tk_eff = 1.222824\tres = 2.480E-05\n", + "[ NORMAL ] Iteration 208:\tk_eff = 1.222852\tres = 2.385E-05\n", + "[ NORMAL ] Iteration 209:\tk_eff = 1.222879\tres = 2.294E-05\n", + "[ NORMAL ] Iteration 210:\tk_eff = 1.222905\tres = 2.206E-05\n", + "[ NORMAL ] Iteration 211:\tk_eff = 1.222930\tres = 2.122E-05\n", + "[ NORMAL ] Iteration 212:\tk_eff = 1.222954\tres = 2.041E-05\n", + "[ NORMAL ] Iteration 213:\tk_eff = 1.222977\tres = 1.963E-05\n", + "[ NORMAL ] Iteration 214:\tk_eff = 1.222999\tres = 1.888E-05\n", + "[ NORMAL ] Iteration 215:\tk_eff = 1.223020\tres = 1.816E-05\n", + "[ NORMAL ] Iteration 216:\tk_eff = 1.223041\tres = 1.747E-05\n", + "[ NORMAL ] Iteration 217:\tk_eff = 1.223061\tres = 1.680E-05\n", + "[ NORMAL ] Iteration 218:\tk_eff = 1.223080\tres = 1.616E-05\n", + "[ NORMAL ] Iteration 219:\tk_eff = 1.223098\tres = 1.554E-05\n", + "[ NORMAL ] Iteration 220:\tk_eff = 1.223116\tres = 1.495E-05\n", + "[ NORMAL ] Iteration 221:\tk_eff = 1.223132\tres = 1.437E-05\n", + "[ NORMAL ] Iteration 222:\tk_eff = 1.223149\tres = 1.382E-05\n", + "[ NORMAL ] Iteration 223:\tk_eff = 1.223164\tres = 1.330E-05\n", + "[ NORMAL ] Iteration 224:\tk_eff = 1.223179\tres = 1.279E-05\n", + "[ NORMAL ] Iteration 225:\tk_eff = 1.223194\tres = 1.230E-05\n", + "[ NORMAL ] Iteration 226:\tk_eff = 1.223208\tres = 1.183E-05\n", + "[ NORMAL ] Iteration 227:\tk_eff = 1.223221\tres = 1.138E-05\n", + "[ NORMAL ] Iteration 228:\tk_eff = 1.223234\tres = 1.094E-05\n", + "[ NORMAL ] Iteration 229:\tk_eff = 1.223246\tres = 1.052E-05\n", + "[ NORMAL ] Iteration 230:\tk_eff = 1.223258\tres = 1.012E-05\n" + ] + } + ], "source": [ "# Generate tracks for OpenMOC\n", "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=128, spacing=0.1)\n", @@ -822,11 +1706,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "openmc keff = 1.223474\n", + "openmoc keff = 1.223258\n", + "bias [pcm]: -21.5\n" + ] + } + ], "source": [ "# Print report of keff and bias with OpenMC\n", "openmoc_keff = solver.getKeff()\n", @@ -869,11 +1763,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'pyne' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# Instantiate a PyNE ACE continuous-energy cross sections library\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mpyne_lib\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpyne\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mace\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mLibrary\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'../../../../data/nndc/293.6K/U_235_293.6K.ace'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[0mpyne_lib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mread\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'92235.71c'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;31m# Extract the U-235 data from the library\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mNameError\u001b[0m: name 'pyne' is not defined" + ] + } + ], "source": [ "# Instantiate a PyNE ACE continuous-energy cross sections library\n", "pyne_lib = pyne.ace.Library('../../../../data/nndc/293.6K/U_235_293.6K.ace')\n", diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index 1ccff330d1..625ddeb53f 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -382,7 +382,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ADFxAVDQXcnQ0AAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAzLTIzVDEyOjIxOjEzLTA0OjAwuK5PWAAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMy0yM1QxMjoyMToxMy0wNDowMMnz9+QAAAAASUVORK5C\nYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ADFxIYM3KXKoUAAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAzLTIzVDE0OjI0OjUxLTA0OjAw7bdEEgAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMy0yM1QxNDoyNDo1MS0wNDowMJzq/K4AAAAASUVORK5C\nYII=\n", "text/plain": [ "" ] @@ -568,7 +568,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", - " Date/Time: 2016-03-23 12:21:14\n", + " Date/Time: 2016-03-23 14:24:52\n", " MPI Processes: 1\n", " OpenMP Threads: 16\n", "\n", @@ -645,20 +645,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.7000E-01 seconds\n", - " Reading cross sections = 1.3500E-01 seconds\n", - " Total time in simulation = 2.1470E+00 seconds\n", - " Time in transport only = 1.8480E+00 seconds\n", - " Time in inactive batches = 2.1900E-01 seconds\n", - " Time in active batches = 1.9280E+00 seconds\n", - " Time synchronizing fission bank = 7.0000E-03 seconds\n", - " Sampling source sites = 4.0000E-03 seconds\n", - " SEND/RECV source sites = 3.0000E-03 seconds\n", - " Time accumulating tallies = 2.0000E-03 seconds\n", - " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 2.6360E+00 seconds\n", - " Calculation Rate (inactive) = 57077.6 neutrons/second\n", - " Calculation Rate (active) = 19450.2 neutrons/second\n", + " Total time for initialization = 4.7500E-01 seconds\n", + " Reading cross sections = 1.3300E-01 seconds\n", + " Total time in simulation = 2.3630E+00 seconds\n", + " Time in transport only = 1.9260E+00 seconds\n", + " Time in inactive batches = 2.6400E-01 seconds\n", + " Time in active batches = 2.0990E+00 seconds\n", + " Time synchronizing fission bank = 4.0000E-03 seconds\n", + " Sampling source sites = 3.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for finalization = 1.0000E-03 seconds\n", + " Total time elapsed = 2.8570E+00 seconds\n", + " Calculation Rate (inactive) = 47348.5 neutrons/second\n", + " Calculation Rate (active) = 17865.7 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1137,7 +1137,7 @@ "data": { "image/png": "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\nhnwAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1160,7 +1160,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 27, @@ -1171,7 +1171,7 @@ "data": { "image/png": "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\nqJlZov8PnPpCLiDrzj8AAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1761,27 +1761,407 @@ }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "(('level 1', 'lat', 'x'), array([], dtype=float64), Filter\n", - "\tType =\tdistribcell\n", - "\tBins =\t[10002]\n", - ")\n" - ] - }, - { - "ename": "ZeroDivisionError", - "evalue": "integer division or modulo by zero", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# Get a pandas dataframe for the distribcell tally data\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mdf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtally\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_pandas_dataframe\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msummary\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msu\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnuclides\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;31m# Print the last twenty rows in the dataframe\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mdf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhead\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m20\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m/home/wboyd/Documents/NSE-CRPG-Codes/openmc/openmc/tallies.pyc\u001b[0m in \u001b[0;36mget_pandas_dataframe\u001b[1;34m(self, filters, nuclides, scores, summary, float_format)\u001b[0m\n\u001b[0;32m 1609\u001b[0m \u001b[1;31m# Append each Filter's DataFrame to the overall DataFrame\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1610\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mself_filter\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfilters\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1611\u001b[1;33m \u001b[0mfilter_df\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself_filter\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_pandas_dataframe\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata_size\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msummary\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1612\u001b[0m \u001b[0mdf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconcat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mdf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfilter_df\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1613\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m/home/wboyd/Documents/NSE-CRPG-Codes/openmc/openmc/filter.py\u001b[0m in \u001b[0;36mget_pandas_dataframe\u001b[1;34m(self, data_size, summary)\u001b[0m\n\u001b[0;32m 739\u001b[0m \u001b[1;32mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlevel_key\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlevel_bins\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 740\u001b[0m \u001b[0mlevel_bins\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrepeat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlevel_bins\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstride\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 741\u001b[1;33m \u001b[0mtile_factor\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdata_size\u001b[0m \u001b[1;33m/\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlevel_bins\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 742\u001b[0m \u001b[0mlevel_bins\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtile\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlevel_bins\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtile_factor\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 743\u001b[0m \u001b[0mlevel_dict\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mlevel_key\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlevel_bins\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mZeroDivisionError\u001b[0m: integer division or modulo by zero" - ] + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
level 1level 2level 3distribcellscoremeanstd. dev.
cellunivlatcelluniv
idididxyzidid
010003010001016010002100000absorption1.30e-048.67e-06
110003010001016010002100000scatter1.98e-026.50e-04
210003010001015010002100001absorption2.24e-041.44e-05
310003010001015010002100001scatter3.00e-028.80e-04
410003010001014010002100002absorption3.16e-042.15e-05
510003010001014010002100002scatter3.90e-021.25e-03
610003010001013010002100003absorption3.78e-041.45e-05
710003010001013010002100003scatter4.86e-021.24e-03
810003010001012010002100004absorption4.21e-042.14e-05
910003010001012010002100004scatter5.52e-029.85e-04
1010003010001011010002100005absorption4.86e-042.62e-05
1110003010001011010002100005scatter6.30e-021.35e-03
1210003010001010010002100006absorption5.30e-041.92e-05
1310003010001010010002100006scatter6.93e-021.30e-03
141000301000109010002100007absorption5.86e-042.02e-05
151000301000109010002100007scatter7.57e-021.40e-03
161000301000108010002100008absorption6.30e-042.35e-05
171000301000108010002100008scatter8.09e-021.49e-03
181000301000107010002100009absorption7.10e-042.23e-05
191000301000107010002100009scatter8.94e-021.37e-03
\n", + "
" + ], + "text/plain": [ + " level 1 level 2 level 3 distribcell score \\\n", + " cell univ lat cell univ \n", + " id id id x y z id id \n", + "0 10003 0 10001 0 16 0 10002 10000 0 absorption \n", + "1 10003 0 10001 0 16 0 10002 10000 0 scatter \n", + "2 10003 0 10001 0 15 0 10002 10000 1 absorption \n", + "3 10003 0 10001 0 15 0 10002 10000 1 scatter \n", + "4 10003 0 10001 0 14 0 10002 10000 2 absorption \n", + "5 10003 0 10001 0 14 0 10002 10000 2 scatter \n", + "6 10003 0 10001 0 13 0 10002 10000 3 absorption \n", + "7 10003 0 10001 0 13 0 10002 10000 3 scatter \n", + "8 10003 0 10001 0 12 0 10002 10000 4 absorption \n", + "9 10003 0 10001 0 12 0 10002 10000 4 scatter \n", + "10 10003 0 10001 0 11 0 10002 10000 5 absorption \n", + "11 10003 0 10001 0 11 0 10002 10000 5 scatter \n", + "12 10003 0 10001 0 10 0 10002 10000 6 absorption \n", + "13 10003 0 10001 0 10 0 10002 10000 6 scatter \n", + "14 10003 0 10001 0 9 0 10002 10000 7 absorption \n", + "15 10003 0 10001 0 9 0 10002 10000 7 scatter \n", + "16 10003 0 10001 0 8 0 10002 10000 8 absorption \n", + "17 10003 0 10001 0 8 0 10002 10000 8 scatter \n", + "18 10003 0 10001 0 7 0 10002 10000 9 absorption \n", + "19 10003 0 10001 0 7 0 10002 10000 9 scatter \n", + "\n", + " mean std. dev. \n", + " \n", + " \n", + "0 1.30e-04 8.67e-06 \n", + "1 1.98e-02 6.50e-04 \n", + "2 2.24e-04 1.44e-05 \n", + "3 3.00e-02 8.80e-04 \n", + "4 3.16e-04 2.15e-05 \n", + "5 3.90e-02 1.25e-03 \n", + "6 3.78e-04 1.45e-05 \n", + "7 4.86e-02 1.24e-03 \n", + "8 4.21e-04 2.14e-05 \n", + "9 5.52e-02 9.85e-04 \n", + "10 4.86e-04 2.62e-05 \n", + "11 6.30e-02 1.35e-03 \n", + "12 5.30e-04 1.92e-05 \n", + "13 6.93e-02 1.30e-03 \n", + "14 5.86e-04 2.02e-05 \n", + "15 7.57e-02 1.40e-03 \n", + "16 6.30e-04 2.35e-05 \n", + "17 8.09e-02 1.49e-03 \n", + "18 7.10e-04 2.23e-05 \n", + "19 8.94e-02 1.37e-03 " + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -1794,11 +2174,97 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
meanstd. dev.
count2.89e+022.89e+02
mean4.15e-041.71e-05
std2.41e-046.82e-06
min1.78e-052.81e-06
25%2.06e-041.16e-05
50%4.03e-041.71e-05
75%6.05e-042.19e-05
max9.35e-044.54e-05
\n", + "
" + ], + "text/plain": [ + " mean std. dev.\n", + " \n", + " \n", + "count 2.89e+02 2.89e+02\n", + "mean 4.15e-04 1.71e-05\n", + "std 2.41e-04 6.82e-06\n", + "min 1.78e-05 2.81e-06\n", + "25% 2.06e-04 1.16e-05\n", + "50% 4.03e-04 1.71e-05\n", + "75% 6.05e-04 2.19e-05\n", + "max 9.35e-04 4.54e-05" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Show summary statistics for absorption distribcell tally data\n", "absorption = df[df['score'] == 'absorption']\n", @@ -1817,11 +2283,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mann-Whitney Test p-value: 1.39844745394e-41\n" + ] + } + ], "source": [ "# Extract tally data from pins in the pins divided along y=x diagonal \n", "multi_index = ('level 2', 'lat',)\n", @@ -1847,11 +2321,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mann-Whitney Test p-value: 0.902458041178\n" + ] + } + ], "source": [ "# Extract tally data from pins in the pins divided along y=-x diagonal\n", "multi_index = ('level 2', 'lat',)\n", @@ -1875,11 +2357,43 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/wboyd/anaconda2/lib/python2.7/site-packages/ipykernel/__main__.py:4: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRo\nRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkpuoWaMxs\njpndaWY/MbMeM+ssU+5sM3vIzH5qZpcltn/SzHaa2QNm9s9m1jF5tRcRkUrVs0WzBrjL3Y8Fvglc\nXlrAzGYBNwFvAE4AVpjZceHlO4ET3H0x8HDa/o1m+/bt9a5CRVTP6mmEOoLqWW2NUs9qqWegOQ/4\nTPj5M8Cfp5Q5DXjY3Xe7+wFga9gPd7/L3Q+Gct8DjqhxfWuuUf7zqZ7V0wh1BNWz2hqlntVSz0Dz\nUnd/CsDdnwRemlLmcGBP4vljYVup9wJfr3oNRURkwmbX8uBm9g3gkOQmwIH/kVLcx3mOvwUOuPuW\n8ewvIiK1Ze7jur5P/MRmO4Hl7v6Umb0M6HX340vKLAOucvezw/M1gLv7teH5u4ELgNe5+74RzlWf\nNyki0uDc3SZ6jJq2aEbxFeDdwLXAXwJfTimzAzjazOYDTwDvAFZAlI0GfBj4ryMFGajOByUiIuNT\nzxbNXOCfgCOB3cDb3f23ZnYosNHd/yyUOxu4kWg8aZO7XxO2PwxkgF+FQ37P3S+a5LchIiKjqFug\nERGRmWHarAwwlSeAljtnSZl1ZvZwOP/isexb73qa2RFm9k0z+7GZ/dDMLp6K9Uy8NsvM7jOzr0zV\neppZp5l9Lvyf/LGZvXKK1vODZvYjM3vQzG43s0w96mhmx5rZf5rZ82b2N2PZdyrUc6r9DY30eYbX\nx/Y35O7T4kE01vOR8PNlwDUpZWYBjwDzgWbgAeC48NqZwKzw8zXA/65SvcqeM1HmHOBfw8+vJOoG\nrGjfKn5+E6nny4DF4ec24CdTsZ6J1z8I/CPwlRr+f5xQPYHNwHvCz7OBjqlWT+Aw4FEgE55vA95V\npzr+EfBfgLXA34xl3ylSz6n2N5Raz8TrY/obmjYtGqbuBNCy5yyp+22hHvcAnWZ2SIX7Vsu46+nu\nT7r7A2H7c8BO0uc71bWeEH1zBM4F/qFG9ZtwPUNr+rXufmt47QV3/91Uq2d4rQloNbPZQAvwy3rU\n0d2fdvd7gRfGuu9UqOdU+xsa4fMc19/QdAo0U3UCaCXnLFem0vpWw3jq+XhpGTNbACwG7ql6DdPr\nMNZ63kCUrVjrwcmJ1PMo4GkzuzV0T2wws/xUq6e7/xK4HvhF2PZbd7+rTnWsxb5jVZVzTZG/oZGM\n+W+ooQKNmX0j9AXHjx+Gf9+cUryRJ4A2ZDq2mbUBnwcuCd/KphQzeyPwVPjmaEzdz3k2sBT4O3df\nCvyBaG3AKcXMuoi+Cc8n6kZrM7O/qG+tGtt0/Ruq5zyaMXP3s8q9ZmZPhW6ceALoQEqxx4F5iedH\nhG3xMd5N1CR8XXVqPPo5E2WOTCmTqWDfaplIPQldJ58HPuvuaXOipkI93wq82czOBfJAu5nd5u7v\nmmL1BNjj7t8PP3+eaNyxFiZSzzOBR9391wBm9gXg1UC1v6RVUsda7DtWEzrXFPsbKuc1jOdvqBaD\nTfV4ECUDXBZ+LpcM0ERhECxDNAh2fHjtbODHwEuqXK+y50yUOZfCYOsyCoOto+47FeoZnt8GfGoS\nfs8TqmeizOnUNhlgop/nt4BF4ecrgWunWj2J+vp/COSIvtluBt5fjzomyl4JXDqefetZz7BtyvwN\njVTPxGsV/w3V9A1N5gOYC9xFlK1xJ9AVth8K/Eui3NmhzMPAmsT2h4kmjt4XHjdXsW7DzgmsAt6X\nKHNT+OX/AFg6Wn1r9BmOtZ5LwrbXAC+G/7D3h8/v7ClUz6Upx6hpoKnC7/0UopUxHgC+AHRO0Xpe\nSTRw/SBREk5zPepItKbiHuC3wK+Jxo3ayu1br8+yXD2n2t/QSJ9n4hgV/w1pwqaIiNRUQyUDiIhI\n41GgERGRmlKgERGRmlKgERGRmlKgERGRmlKgERGRmlKgERGRmlKgERGRmlKgEakSM5sfblR2q0U3\n4PtHM3u9md0dnv+xmbWY2SYz+56Z3Wtmb0rs+x9m9v3wWBa2n25mvYmboH22vu9SZOy0MoBIlZjZ\nfKIlPRa7e7+ZfR94wN3/KgSU9wL9wI/dfYtFd4HtI1oS3oGD7r7fzI4G7nD3U83sdOBLwCuAJ4Hv\nAB9y9/+c/HcoMj4NtXqzSAP4ubv3h59/DPx7+PlHwAKilXLfZGYfDtvjFbqfAG4Kt0l+ETgmccw+\nd38CwMweCMdRoJGGoUAjUl37Ej8fTDw/SPT39gLwFnd/OLmTmV0JPOnuJ5tZE7C3zDFfRH+30mA0\nRiNSXaPdCKoHuHiocNSCAegkatUAvItoKXeRaUGBRqS6vMzP8fO1QHN8h1jg4+G1m4F3m9n9wCLg\n9xUcX6QhKBlARERqSi0aERGpKQUaERGpKQUaERGpKQUaERGpKQUaERGpKQUaERGpKQUaERGpKQUa\nERGpqf8HTKaAIu8FxywAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Extract the scatter tally data from pandas\n", "scatter = df[df['score'] == 'scatter']\n", @@ -1892,11 +2406,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n059Yv3498+bNo2/fvgC7+ygKCgooKCige/fuPPnkkwwbNox3332X+fPns2HDBq688koAZs2aRf/+\n/XnuuedYtmwZ69evZ+nSpUXO9eqrr9K3b1/WrVvHOeecQ40aNfj3v//NmjVrmDhxIhMmTGDQoEFF\n9hkzZgzTp09n0qRJ3HPPPVx22WUMHz6cxYsX89lnn/Hcc88l+ldVJkoQIlLp9OnTh8aNG+9+9O/f\nP+Z2tWrVYu7cuaxevZq6dety+OGHF1lfOLEMHz6c6667jpycHOrWrcs//vEPXnjhBXbu3MnIkSM5\n5ZRTOPLII6lRowa33XbbT8515JFH0rt3bwBq165Nly5dOPzwwzEz2rZty6WXXsq7775bZJ+bbrqJ\nevXqccABB3DggQdywgknkJOTw957781JJ53E9OnTK/qrqhAlCBGpdEaNGsWaNWt2P4p/M99lyJAh\nzJkzh44dO9K9e3def/31PR5z6dKl5OTk7H6dk5PD9u3bWbFiBUuXLqVNmza719WpU6fILUyBIusB\nvv76a3r37k2LFi1o2LAht9xyC999912RbZo1a1bkmM2bNy/yeuPGjSX8FpJPCUJEKp14O5fbt2/P\n8OHDWbVqFTfeeCNnnHEGmzZtitmh3bJlSxYt+vFWtosWLaJGjRo0b96cFi1a8O233+5et2nTJlav\nXl1k/+LHvPzyyznggAOYN28e69at484776x099hQghCRKuvZZ5/d/a29QYMGmBkZGRk0bdqUjIwM\n5s2bt3vbs846i3/9618sXLiQjRs3csstt9CvXz8yMjI444wzGD16NJMmTWLbtm0MHDiw1HNv2LCB\nrKws6taty5dffsngwYOTVcykUYIQkbg0b54DWNIewfFLV9pw1sLr33rrLTp37kxWVhbXXnstL7zw\nArVr16ZOnTrccsst9OzZk8aNGzNlyhQuvPBCzjvvPI4++mjat29P3bp1efDBBwHo1KkTDz30EL/7\n3e9o2bIlWVlZNGvWjNq1a+8xjvvuu49nn32WrKwsLrvsMvr161diOcoyTDdVknrLUTNrDQwDmgM7\ngcfd/UEzawS8AOQAC4G+7r4+xv665ajolqMR0C1HS/b999/TsGFD5s6dW6TfItUq+y1HtwPXuXtn\n4Eigv5l1BP4CjHP3/YEJwF+THIeISIW89tprbNq0ie+//57rr7+egw46KNLkkApJTRDuvtzdPw2f\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Plot a histogram and kernel density estimate for the scattering rates\n", "scatter['mean'].plot(kind='hist', bins=25)\n", diff --git a/openmc/filter.py b/openmc/filter.py index 5c62c1b6bd..2536c3607a 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -646,18 +646,10 @@ class Filter(object): # offsets to OpenCG LocalCoords linked lists offsets_to_coords = {} - # Use OpenCG to compute LocalCoords linked list for - # each region and store in dictionary - for region in range(num_regions): + for offset, path in enumerate(self.distribcell_paths): + region = opencg_geometry.get_region_from_path(path) coords = opencg_geometry.find_region(region) - path = opencg.get_path(coords) - cell_id = path[-1] - - # If this region is in Cell corresponding to the - # distribcell filter bin, store it in dictionary - if cell_id == self.bins[0]: - offset = openmc_geometry.get_cell_instance(path) - offsets_to_coords[offset] = coords + offsets_to_coords[offset] = coords # Each distribcell offset is a DataFrame bin # Unravel the paths into DataFrame columns From 5cc884555b0bcb77b540f6bea1fcfb9c04224cfc Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Wed, 23 Mar 2016 14:51:39 -0400 Subject: [PATCH 409/650] Updated IPython Notebooks --- .../pythonapi/examples/mgxs-part-iii.ipynb | 30 ++++++------- .../examples/pandas-dataframes.ipynb | 44 +++++++++---------- .../pythonapi/examples/post-processing.ipynb | 42 +++++++++--------- .../pythonapi/examples/tally-arithmetic.ipynb | 30 ++++++------- 4 files changed, 73 insertions(+), 73 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index 83d99976a8..023efcc101 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -469,7 +469,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEVyEhLpgJFNv8T///98\niBL0AAAAAWJLR0QDEQxM8gAAAAd0SU1FB+ADFxAKDyaI8r8AAAQUSURBVGje7VvNleMgDA4HSqAf\nl+CDnUNKSD8uIQdT5djBgIRESPztbua9RYeZPNAnCcdBP4jLpVOnTp2+TnaexJibRzE2z4MOn4UA\nt42NAq4KMPt4wWxnyeyeYxIfxvlEGJqkGnVVV//gE5v6m1+4AZuau5cL3Xiv3vuVTbgN7jcBI1Oz\nDXn5BNxzfGMmE0+RG/NE1ewiNz3iqQZeOmE3S3d6EJmHGl8uwBy8fpkEL5UZ1O8yy+V7MRF5icyk\nZi2/1chLJiKvf0xCjV/4A0i8PhlrEu+abHJXL2Ry3izYJl6fbEpmEpkFPgnOvFlmNpPjia40oeCJ\nGs/fypvEZ13JJopnD5Dgk2DCu07CTI4nuvwyCF3RJkvUsC+A8CY80eUV/FrFj8LWuCZXwVNb/WMU\nuqJNjiyTfoHM1jfxvoqfqvj5HfyxMMfwo3hMFG81PNX10PD5BWS2votfOv7X4MHv35zCv35/1ff/\nHTz6+znx+71o+4e2/xB8a//S9r/a/qXuv439k+2/1LDDVnX/JjKPZUrDXvmfmv8ghr3tvwaKvwre\nhv/l/lPz35r/r/lvMpHjBxJ/DMImHn/kWCnrMjn+SbqyTQvHp8BmbcRfSc3I8MlYGv9dJW+UWcZv\nJk6w+FPyRplLGcEf8SuNVaNMyhtjWiXTeDKzBCDE2iwmN0HPIuJns8f12ziVG2J6HqvvKcGeJ1xK\nCnlF8VbJnMQqOQmZKL5VJVeZ50oC5eS4UXIlq6c/QbLyVMRKnWZ9p06dOnX6HjnVK4m92lS2f6fU\n1RRXZSr+wyj+S6vfKWW6rL5gVnylrdTvzNMxi/rdEP5QNdfdzQsDQmFtZRPuibRUpgkxxSIc8FEs\n4/HLdKyCqrmHmKRYQIx1eP1uYP+JGhE/Wa1+Fz+q9Tu+gBTr0frdWAoiMWmxAKV+Z9Inm+PXj+p3\nF/Hpo/pd5mjW79T8IVuYPtbyB7V+lxnsKMys1u9y/kTwrfxJyd8uNL9V6ncsf1Prd/TxHnhi5qOV\nv7J5ucxq/hvzZzY/iGU263fs+Sj4Vv7fwDfrFwr+k/qHY/jxJV6t39D3y2p48n7dTuBb9aeO/3d4\n8PtH378/+v6f+f2Bv390/8H3PyL4zP6L7v+o/0H9H+p/Uf+Pxh9w/IPGX2j8h8afaPwLx99o/I/m\nH3D+g+ZfcP7XqVOnTp2+ROD5C3j+g54/gedf6Pkbev4Hnj+i55/o+St6/oueP4Pn3+j5O3r+j/Yf\noP0PaP8F2v8B9594Ydgn/S+/sX/udP/Rif6n3n/3n+P/Rv8dtanR//nt/jm0/xbt/8X7j+8S/0n/\nM9p/jfZ/o/3naP872n+P9v/D9w/Q+w/o/Qv0/gd8/wS9/4Lev4Hv/6D3j9D7T/D9q06dOnX6jH4A\n5sDOrAejcacAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDMtMjNUMTI6MTA6MTUtMDQ6MDCtXndd\nAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAzLTIzVDEyOjEwOjE1LTA0OjAw3APP4QAAAABJRU5E\nrkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEVyEhLpgJFNv8T///98\niBL0AAAAAWJLR0QDEQxM8gAAAAd0SU1FB+ADFxIsERzdmJYAAAQUSURBVGje7VvNleMgDA4HSqAf\nl+CDnUNKSD8uIQdT5djBgIRESPztbua9RYeZPNAnCcdBP4jLpVOnTp2+TnaexJibRzE2z4MOn4UA\nt42NAq4KMPt4wWxnyeyeYxIfxvlEGJqkGnVVV//gE5v6m1+4AZuau5cL3Xiv3vuVTbgN7jcBI1Oz\nDXn5BNxzfGMmE0+RG/NE1ewiNz3iqQZeOmE3S3d6EJmHGl8uwBy8fpkEL5UZ1O8yy+V7MRF5icyk\nZi2/1chLJiKvf0xCjV/4A0i8PhlrEu+abHJXL2Ry3izYJl6fbEpmEpkFPgnOvFlmNpPjia40oeCJ\nGs/fypvEZ13JJopnD5Dgk2DCu07CTI4nuvwyCF3RJkvUsC+A8CY80eUV/FrFj8LWuCZXwVNb/WMU\nuqJNjiyTfoHM1jfxvoqfqvj5HfyxMMfwo3hMFG81PNX10PD5BWS2votfOv7X4MHv35zCv35/1ff/\nHTz6+znx+71o+4e2/xB8a//S9r/a/qXuv439k+2/1LDDVnX/JjKPZUrDXvmfmv8ghr3tvwaKvwre\nhv/l/lPz35r/r/lvMpHjBxJ/DMImHn/kWCnrMjn+SbqyTQvHp8BmbcRfSc3I8MlYGv9dJW+UWcZv\nJk6w+FPyRplLGcEf8SuNVaNMyhtjWiXTeDKzBCDE2iwmN0HPIuJns8f12ziVG2J6HqvvKcGeJ1xK\nCnlF8VbJnMQqOQmZKL5VJVeZ50oC5eS4UXIlq6c/QbLyVMRKnWZ9p06dOnX6HjnVK4m92lS2f6fU\n1RRXZSr+wyj+S6vfKWW6rL5gVnylrdTvzNMxi/rdEP5QNdfdzQsDQmFtZRPuibRUpgkxxSIc8FEs\n4/HLdKyCqrmHmKRYQIx1eP1uYP+JGhE/Wa1+Fz+q9Tu+gBTr0frdWAoiMWmxAKV+Z9Inm+PXj+p3\nF/Hpo/pd5mjW79T8IVuYPtbyB7V+lxnsKMys1u9y/kTwrfxJyd8uNL9V6ncsf1Prd/TxHnhi5qOV\nv7J5ucxq/hvzZzY/iGU263fs+Sj4Vv7fwDfrFwr+k/qHY/jxJV6t39D3y2p48n7dTuBb9aeO/3d4\n8PtH378/+v6f+f2Bv390/8H3PyL4zP6L7v+o/0H9H+p/Uf+Pxh9w/IPGX2j8h8afaPwLx99o/I/m\nH3D+g+ZfcP7XqVOnTp2+ROD5C3j+g54/gedf6Pkbev4Hnj+i55/o+St6/oueP4Pn3+j5O3r+j/Yf\noP0PaP8F2v8B9594Ydgn/S+/sX/udP/Rif6n3n/3n+P/Rv8dtanR//nt/jm0/xbt/8X7j+8S/0n/\nM9p/jfZ/o/3naP872n+P9v/D9w/Q+w/o/Qv0/gd8/wS9/4Lev4Hv/6D3j9D7T/D9q06dOnX6jH4A\n5sDOrAejcacAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDMtMjNUMTQ6NDQ6MTYtMDQ6MDBE774l\nAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAzLTIzVDE0OjQ0OjE2LTA0OjAwNbIGmQAAAABJRU5E\nrkJggg==\n", "text/plain": [ "" ] @@ -736,7 +736,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", - " Date/Time: 2016-03-23 12:10:16\n", + " Date/Time: 2016-03-23 14:44:19\n", " MPI Processes: 1\n", " OpenMP Threads: 16\n", "\n", @@ -824,20 +824,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.2200E-01 seconds\n", - " Reading cross sections = 1.6000E-01 seconds\n", - " Total time in simulation = 6.0800E+00 seconds\n", - " Time in transport only = 5.6140E+00 seconds\n", - " Time in inactive batches = 6.1300E-01 seconds\n", - " Time in active batches = 5.4670E+00 seconds\n", + " Total time for initialization = 4.7900E-01 seconds\n", + " Reading cross sections = 1.3600E-01 seconds\n", + " Total time in simulation = 6.5400E+00 seconds\n", + " Time in transport only = 5.8520E+00 seconds\n", + " Time in inactive batches = 6.1600E-01 seconds\n", + " Time in active batches = 5.9240E+00 seconds\n", " Time synchronizing fission bank = 2.0000E-03 seconds\n", " Sampling source sites = 1.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 5.0000E-03 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Time accumulating tallies = 2.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 6.6230E+00 seconds\n", - " Calculation Rate (inactive) = 40783.0 neutrons/second\n", - " Calculation Rate (active) = 18291.6 neutrons/second\n", + " Total time elapsed = 7.0410E+00 seconds\n", + " Calculation Rate (inactive) = 40584.4 neutrons/second\n", + " Calculation Rate (active) = 16880.5 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1588,7 +1588,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 44, @@ -1599,7 +1599,7 @@ "data": { "image/png": "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\ngg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index 625ddeb53f..27812f4d6c 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -382,7 +382,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ADFxIYM3KXKoUAAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAzLTIzVDE0OjI0OjUxLTA0OjAw7bdEEgAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMy0yM1QxNDoyNDo1MS0wNDowMJzq/K4AAAAASUVORK5C\nYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ADFxItHQxw5fwAAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAzLTIzVDE0OjQ1OjI5LTA0OjAw0+qiEQAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMy0yM1QxNDo0NToyOS0wNDowMKK3Gq0AAAAASUVORK5C\nYII=\n", "text/plain": [ "" ] @@ -568,7 +568,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", - " Date/Time: 2016-03-23 14:24:52\n", + " Date/Time: 2016-03-23 14:45:30\n", " MPI Processes: 1\n", " OpenMP Threads: 16\n", "\n", @@ -645,20 +645,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.7500E-01 seconds\n", - " Reading cross sections = 1.3300E-01 seconds\n", - " Total time in simulation = 2.3630E+00 seconds\n", - " Time in transport only = 1.9260E+00 seconds\n", - " Time in inactive batches = 2.6400E-01 seconds\n", - " Time in active batches = 2.0990E+00 seconds\n", - " Time synchronizing fission bank = 4.0000E-03 seconds\n", - " Sampling source sites = 3.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Total time for initialization = 4.5300E-01 seconds\n", + " Reading cross sections = 1.3200E-01 seconds\n", + " Total time in simulation = 1.9780E+00 seconds\n", + " Time in transport only = 1.7780E+00 seconds\n", + " Time in inactive batches = 2.1000E-01 seconds\n", + " Time in active batches = 1.7680E+00 seconds\n", + " Time synchronizing fission bank = 5.0000E-03 seconds\n", + " Sampling source sites = 5.0000E-03 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", " Time accumulating tallies = 1.0000E-03 seconds\n", - " Total time for finalization = 1.0000E-03 seconds\n", - " Total time elapsed = 2.8570E+00 seconds\n", - " Calculation Rate (inactive) = 47348.5 neutrons/second\n", - " Calculation Rate (active) = 17865.7 neutrons/second\n", + " Total time for finalization = 0.0000E+00 seconds\n", + " Total time elapsed = 2.4480E+00 seconds\n", + " Calculation Rate (inactive) = 59523.8 neutrons/second\n", + " Calculation Rate (active) = 21210.4 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1137,7 +1137,7 @@ "data": { "image/png": "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\nhnwAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1160,7 +1160,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 27, @@ -1171,7 +1171,7 @@ "data": { "image/png": "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\nqJlZov8PnPpCLiDrzj8AAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2376,7 +2376,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 38, @@ -2387,7 +2387,7 @@ "data": { "image/png": "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\nphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRo\nRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkpuoWaMxs\njpndaWY/MbMeM+ssU+5sM3vIzH5qZpcltn/SzHaa2QNm9s9m1jF5tRcRkUrVs0WzBrjL3Y8Fvglc\nXlrAzGYBNwFvAE4AVpjZceHlO4ET3H0x8HDa/o1m+/bt9a5CRVTP6mmEOoLqWW2NUs9qqWegOQ/4\nTPj5M8Cfp5Q5DXjY3Xe7+wFga9gPd7/L3Q+Gct8DjqhxfWuuUf7zqZ7V0wh1BNWz2hqlntVSz0Dz\nUnd/CsDdnwRemlLmcGBP4vljYVup9wJfr3oNRURkwmbX8uBm9g3gkOQmwIH/kVLcx3mOvwUOuPuW\n8ewvIiK1Ze7jur5P/MRmO4Hl7v6Umb0M6HX340vKLAOucvezw/M1gLv7teH5u4ELgNe5+74RzlWf\nNyki0uDc3SZ6jJq2aEbxFeDdwLXAXwJfTimzAzjazOYDTwDvAFZAlI0GfBj4ryMFGajOByUiIuNT\nzxbNXOCfgCOB3cDb3f23ZnYosNHd/yyUOxu4kWg8aZO7XxO2PwxkgF+FQ37P3S+a5LchIiKjqFug\nERGRmWHarAwwlSeAljtnSZl1ZvZwOP/isexb73qa2RFm9k0z+7GZ/dDMLp6K9Uy8NsvM7jOzr0zV\neppZp5l9Lvyf/LGZvXKK1vODZvYjM3vQzG43s0w96mhmx5rZf5rZ82b2N2PZdyrUc6r9DY30eYbX\nx/Y35O7T4kE01vOR8PNlwDUpZWYBjwDzgWbgAeC48NqZwKzw8zXA/65SvcqeM1HmHOBfw8+vJOoG\nrGjfKn5+E6nny4DF4ec24CdTsZ6J1z8I/CPwlRr+f5xQPYHNwHvCz7OBjqlWT+Aw4FEgE55vA95V\npzr+EfBfgLXA34xl3ylSz6n2N5Raz8TrY/obmjYtGqbuBNCy5yyp+22hHvcAnWZ2SIX7Vsu46+nu\nT7r7A2H7c8BO0uc71bWeEH1zBM4F/qFG9ZtwPUNr+rXufmt47QV3/91Uq2d4rQloNbPZQAvwy3rU\n0d2fdvd7gRfGuu9UqOdU+xsa4fMc19/QdAo0U3UCaCXnLFem0vpWw3jq+XhpGTNbACwG7ql6DdPr\nMNZ63kCUrVjrwcmJ1PMo4GkzuzV0T2wws/xUq6e7/xK4HvhF2PZbd7+rTnWsxb5jVZVzTZG/oZGM\n+W+ooQKNmX0j9AXHjx+Gf9+cUryRJ4A2ZDq2mbUBnwcuCd/KphQzeyPwVPjmaEzdz3k2sBT4O3df\nCvyBaG3AKcXMuoi+Cc8n6kZrM7O/qG+tGtt0/Ruq5zyaMXP3s8q9ZmZPhW6ceALoQEqxx4F5iedH\nhG3xMd5N1CR8XXVqPPo5E2WOTCmTqWDfaplIPQldJ58HPuvuaXOipkI93wq82czOBfJAu5nd5u7v\nmmL1BNjj7t8PP3+eaNyxFiZSzzOBR9391wBm9gXg1UC1v6RVUsda7DtWEzrXFPsbKuc1jOdvqBaD\nTfV4ECUDXBZ+LpcM0ERhECxDNAh2fHjtbODHwEuqXK+y50yUOZfCYOsyCoOto+47FeoZnt8GfGoS\nfs8TqmeizOnUNhlgop/nt4BF4ecrgWunWj2J+vp/COSIvtluBt5fjzomyl4JXDqefetZz7BtyvwN\njVTPxGsV/w3V9A1N5gOYC9xFlK1xJ9AVth8K/Eui3NmhzMPAmsT2h4kmjt4XHjdXsW7DzgmsAt6X\nKHNT+OX/AFg6Wn1r9BmOtZ5LwrbXAC+G/7D3h8/v7ClUz6Upx6hpoKnC7/0UopUxHgC+AHRO0Xpe\nSTRw/SBREk5zPepItKbiHuC3wK+Jxo3ayu1br8+yXD2n2t/QSJ9n4hgV/w1pwqaIiNRUQyUDiIhI\n41GgERGRmlKgERGRmlKgERGRmlKgERGRmlKgERGRmlKgERGRmlKgERGRmlKgEakSM5sfblR2q0U3\n4PtHM3u9md0dnv+xmbWY2SYz+56Z3Wtmb0rs+x9m9v3wWBa2n25mvYmboH22vu9SZOy0MoBIlZjZ\nfKIlPRa7e7+ZfR94wN3/KgSU9wL9wI/dfYtFd4HtI1oS3oGD7r7fzI4G7nD3U83sdOBLwCuAJ4Hv\nAB9y9/+c/HcoMj4NtXqzSAP4ubv3h59/DPx7+PlHwAKilXLfZGYfDtvjFbqfAG4Kt0l+ETgmccw+\nd38CwMweCMdRoJGGoUAjUl37Ej8fTDw/SPT39gLwFnd/OLmTmV0JPOnuJ5tZE7C3zDFfRH+30mA0\nRiNSXaPdCKoHuHiocNSCAegkatUAvItoKXeRaUGBRqS6vMzP8fO1QHN8h1jg4+G1m4F3m9n9wCLg\n9xUcX6QhKBlARERqSi0aERGpKQUaERGpKQUaERGpKQUaERGpKQUaERGpKQUaERGpKQUaERGpKQUa\nERGpqf8HTKaAIu8FxywAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2414,7 +2414,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 39, @@ -2425,7 +2425,7 @@ "data": { "image/png": "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\n059Yv3498+bNo2/fvgC7+ygKCgooKCige/fuPPnkkwwbNox3332X+fPns2HDBq688koAZs2aRf/+\n/XnuuedYtmwZ69evZ+nSpUXO9eqrr9K3b1/WrVvHOeecQ40aNfj3v//NmjVrmDhxIhMmTGDQoEFF\n9hkzZgzTp09n0qRJ3HPPPVx22WUMHz6cxYsX89lnn/Hcc88l+ldVJkoQIlLp9OnTh8aNG+9+9O/f\nP+Z2tWrVYu7cuaxevZq6dety+OGHF1lfOLEMHz6c6667jpycHOrWrcs//vEPXnjhBXbu3MnIkSM5\n5ZRTOPLII6lRowa33XbbT8515JFH0rt3bwBq165Nly5dOPzwwzEz2rZty6WXXsq7775bZJ+bbrqJ\nevXqccABB3DggQdywgknkJOTw957781JJ53E9OnTK/qrqhAlCBGpdEaNGsWaNWt2P4p/M99lyJAh\nzJkzh44dO9K9e3def/31PR5z6dKl5OTk7H6dk5PD9u3bWbFiBUuXLqVNmza719WpU6fILUyBIusB\nvv76a3r37k2LFi1o2LAht9xyC999912RbZo1a1bkmM2bNy/yeuPGjSX8FpJPCUJEKp14O5fbt2/P\n8OHDWbVqFTfeeCNnnHEGmzZtitmh3bJlSxYt+vFWtosWLaJGjRo0b96cFi1a8O233+5et2nTJlav\nXl1k/+LHvPzyyznggAOYN28e69at484776x099hQghCRKuvZZ5/d/a29QYMGmBkZGRk0bdqUjIwM\n5s2bt3vbs846i3/9618sXLiQjRs3csstt9CvXz8yMjI444wzGD16NJMmTWLbtm0MHDiw1HNv2LCB\nrKws6taty5dffsngwYOTVcykUYIQkbg0b54DWNIewfFLV9pw1sLr33rrLTp37kxWVhbXXnstL7zw\nArVr16ZOnTrccsst9OzZk8aNGzNlyhQuvPBCzjvvPI4++mjat29P3bp1efDBBwHo1KkTDz30EL/7\n3e9o2bIlWVlZNGvWjNq1a+8xjvvuu49nn32WrKwsLrvsMvr161diOcoyTDdVknrLUTNrDQwDmgM7\ngcfd/UEzawS8AOQAC4G+7r4+xv665ajolqMR0C1HS/b999/TsGFD5s6dW6TfItUq+y1HtwPXuXtn\n4Eigv5l1BP4CjHP3/YEJwF+THIeISIW89tprbNq0ie+//57rr7+egw46KNLkkApJTRDuvtzdPw2f\n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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/pythonapi/examples/post-processing.ipynb b/docs/source/pythonapi/examples/post-processing.ipynb index 7daf1d1cf9..130e44cf4d 100644 --- a/docs/source/pythonapi/examples/post-processing.ipynb +++ b/docs/source/pythonapi/examples/post-processing.ipynb @@ -350,7 +350,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ADFxEMN1kSh5AAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDMtMjNUMTM6MTI6\nNTUtMDQ6MDDwd3AfAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAzLTIzVDEzOjEyOjU1LTA0OjAw\ngSrIowAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ADFxIxKlK6Ha4AAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDMtMjNUMTQ6NDk6\nNDEtMDQ6MDA8VgV/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAzLTIzVDE0OjQ5OjQxLTA0OjAw\nTQu9wwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -461,7 +461,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", - " Date/Time: 2016-03-23 13:12:56\n", + " Date/Time: 2016-03-23 14:49:42\n", " MPI Processes: 1\n", " OpenMP Threads: 16\n", "\n", @@ -599,20 +599,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.4800E-01 seconds\n", - " Reading cross sections = 1.3300E-01 seconds\n", - " Total time in simulation = 4.6592E+01 seconds\n", - " Time in transport only = 4.4918E+01 seconds\n", - " Time in inactive batches = 1.1940E+00 seconds\n", - " Time in active batches = 4.5398E+01 seconds\n", - " Time synchronizing fission bank = 2.2000E-02 seconds\n", + " Total time for initialization = 5.3200E-01 seconds\n", + " Reading cross sections = 1.7200E-01 seconds\n", + " Total time in simulation = 4.5299E+01 seconds\n", + " Time in transport only = 4.3964E+01 seconds\n", + " Time in inactive batches = 1.2390E+00 seconds\n", + " Time in active batches = 4.4060E+01 seconds\n", + " Time synchronizing fission bank = 2.3000E-02 seconds\n", " Sampling source sites = 1.5000E-02 seconds\n", - " SEND/RECV source sites = 4.0000E-03 seconds\n", - " Time accumulating tallies = 3.1000E-02 seconds\n", - " Total time for finalization = 2.7300E-01 seconds\n", - " Total time elapsed = 4.7345E+01 seconds\n", - " Calculation Rate (inactive) = 41876.0 neutrons/second\n", - " Calculation Rate (active) = 9912.33 neutrons/second\n", + " SEND/RECV source sites = 8.0000E-03 seconds\n", + " Time accumulating tallies = 2.7000E-02 seconds\n", + " Total time for finalization = 3.0800E-01 seconds\n", + " Total time elapsed = 4.6175E+01 seconds\n", + " Calculation Rate (inactive) = 40355.1 neutrons/second\n", + " Calculation Rate (active) = 10213.3 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -869,7 +869,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 24, @@ -880,7 +880,7 @@ "data": { "image/png": "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\n87qEMGb9LAAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -912,7 +912,7 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEACAYAAACgS0HpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEmBJREFUeJzt3X+sZGddx/H3p6wtPy0rpne0Ld0qP9walTSxkKDxRk1p\na7Jt1DSgUbBGTVA0Sgy7atyNMSklMajRmiiKi2ltFozQKLa1KVdiIlQopciuZRW6tKs7+JOIJriV\nr3/M2e5wd2b3uTN35s7c+34lk848c86Z73329H7uc55z5qSqkCTpQi7a6gIkScvBwJAkNTEwJElN\nDAxJUhMDQ5LUxMCQJDW5YGAk+f0k/SSPDbXtTvJAkseT3J/k0qH3DiQ5nuRYkuuH2q9N8liSTyX5\n9c3/USRJs9Qywngn8Jp1bfuBB6vq5cBDwAGAJNcAtwJ7gRuBO5OkW+d3gB+tqpcBL0uyfpuSpAV2\nwcCoqr8G/mNd883A4e75YeCW7vk+4J6qerqqngCOA9cl6QEvqKq/7ZZ719A6kqQlMOkcxmVV1Qeo\nqlPAZV375cCTQ8ud7NouB54aan+qa5MkLYnNmvT2+0UkaZvbNeF6/SQrVdXvDjd9rms/CVw5tNwV\nXdu49pGSGECSNIGqyoWXmkzrCCPd44x7gTd0z18PvG+o/bVJLk5yNfAS4OHusNXnk1zXTYL/8NA6\nI1XV0j4OHjy45TXMo/aVlatG/tutrFy1FPUv4sP6rX+ax6xdcISR5G5gFXhRks8CB4G3Au9Ochtw\ngsGZUVTV0SRHgKPAaeCNdfan+EngD4FnA++vqvs290fRrPR6e+j3T4x599ydtN+f2R84krbQBQOj\nqn5gzFvfPWb524HbR7R/FPimDVWnhTAIi1F/vRgM0k7ild4zsLq6utUlTGyZawfr32rWv71lHse9\nNipJLWJdO9Vg2mncCGN0u/9+0vwloRZg0luStMMZGJKkJgaGJKmJgSFJamJgSJKaGBiSpCYGhiSp\niYEhSWpiYEiSmhgYkqQmBoYkqYmBIUlqYmBIkpoYGJKkJgaGJKmJgSFJamJgSJKaGBj6Mr3eHpJ8\n2UOSwMDQOv3+CQa3XR1+bNQl54ROr7dnM8uUtAW8p7e+zOj7d2/8nt6jtuG/qTRb3tNbkrQQDAxJ\nUhMDQ5LUxMCQJDUxMCRJTQwMSVITA0OS1MTAkCQ1MTAkSU0MDElSEwNDktTEwJAkNTEwJElNDAxJ\nUpOpAiPJzyb5uySPJbkrycVJdid5IMnjSe5PcunQ8geSHE9yLMn105cvSZqXiQMjydcCbwKurapv\nBnYBrwP2Aw9W1cuBh4AD3fLXALcCe4EbgTvj7dwkaWlMe0jqWcDzkuwCngOcBG4GDnfvHwZu6Z7v\nA+6pqqer6gngOHDdlJ8vSZqTiQOjqv4J+DXgswyC4vNV9SCwUlX9bplTwGXdKpcDTw5t4mTXJkla\nArsmXTHJCxmMJq4CPg+8O8kPcu69OSe6L+ehQ4eeeb66usrq6upEdWpRXMKoI5ArK1dx6tQT8y9H\n2gbW1tZYW1ub2+dNfE/vJN8PvKaqfqx7/UPAq4DvBFarqp+kB3ygqvYm2Q9UVd3RLX8fcLCqPjxi\n297Te4vM8p7e45b131raHIt8T+/PAq9K8uxu8vq7gKPAvcAbumVeD7yve34v8NruTKqrgZcAD0/x\n+ZKkOZr4kFRVPZzkPcDHgNPdf38XeAFwJMltwAkGZ0ZRVUeTHGEQKqeBNzqMkKTlMfEhqVnykNTs\n9Xp76PdPjHnXQ1LSMpr1ISkDY4caPVcBG/1lb2BIi2OR5zAkSTuIgSFJamJgSJKaGBiSpCYGhiSp\niYEhSWpiYEiSmhgYkqQmBoYkqYmBIUlqYmBIkpoYGJKkJgaGJKmJgSFJamJgSJKaGBiSpCYGhiSp\niYGhLXYJSc559Hp7trowSet4i9YdapFu0eqtW6XN4S1aJUkLwcCQJDUxMCRJTQwMSVITA0OS1MTA\nkCQ1MTAkSU0MDElSEwNDktTEwJAkNTEwJElNDAxJUhMDQ5LUxMCQJDUxMCRJTaYKjCSXJnl3kmNJ\nPpnklUl2J3kgyeNJ7k9y6dDyB5Ic75a/fvryJUnzMu0I4zeA91fVXuBbgL8H9gMPVtXLgYeAAwBJ\nrgFuBfYCNwJ3ZnAXH0nSEpg4MJJ8JfDtVfVOgKp6uqo+D9wMHO4WOwzc0j3fB9zTLfcEcBy4btLP\nV5teb8/IW6BK0kZNM8K4GvjXJO9M8kiS303yXGClqvoAVXUKuKxb/nLgyaH1T3ZtmqF+/wSDW6Cu\nf0jSxkwTGLuAa4Hfrqprgf9mcDhq/W8jfztJ0jawa4p1nwKerKqPdK//hEFg9JOsVFU/SQ/4XPf+\nSeDKofWv6NpGOnTo0DPPV1dXWV1dnaJUSdp+1tbWWFtbm9vnpWryAUCSvwJ+rKo+leQg8NzurX+v\nqjuSvAXYXVX7u0nvu4BXMjgU9ZfAS2tEAUlGNWsCg/mKUX25kfat2Yb7gLQxSaiqmU1STjPCAPhp\n4K4kXwF8GvgR4FnAkSS3AScYnBlFVR1NcgQ4CpwG3mgqSNLymGqEMSuOMDaPIwxp55j1CMMrvSVJ\nTQwMSVITA0OS1MTAkCQ1MTAkSU0MDElSEwNDktTEwJAkNTEwJElNDAwtqEtG3sej19uz1YVJO5Zf\nDbLNLfNXg/iVIdLG+NUgkqSFYGBIkpoYGNuE9+6WNGvOYWwTmzNXMa59UbYxaHffkEZzDkOStBAM\nDElSEwNDktTEwJAkNTEwJElNDAxJUhMDQ5LUxMCQJDUxMCRJTQwMSVITA0OS1MTAkCQ1MTAkSU0M\nDElSEwNDktTEwJAkNTEwJElNDAxJUhMDQ5LUxMCQJDUxMCRJTaYOjCQXJXkkyb3d691JHkjyeJL7\nk1w6tOyBJMeTHEty/bSfLUman80YYfwMcHTo9X7gwap6OfAQcAAgyTXArcBe4EbgziTZhM+XJM3B\nVIGR5ArgJuAdQ803A4e754eBW7rn+4B7qurpqnoCOA5cN83naye6hCRf9uj19mx1UdKOMO0I4+3A\nzwM11LZSVX2AqjoFXNa1Xw48ObTcya5N2oAvMtjdzj76/RNbW5K0Q0wcGEm+B+hX1aPA+Q4t1Xne\nkyQtiV1TrPtqYF+Sm4DnAC9I8kfAqSQrVdVP0gM+1y1/ErhyaP0ruraRDh069Mzz1dVVVldXpyhV\nkraftbU11tbW5vZ5qZp+AJDkO4A3V9W+JG8D/q2q7kjyFmB3Ve3vJr3vAl7J4FDUXwIvrREFJBnV\nrPMYnD8wqs82o31RtjF+2+4v0uD3QFXN7GSiaUYY47wVOJLkNuAEgzOjqKqjSY4wOKPqNPBGU0GS\nlsemjDA2myOMjXOE4f4izXqE4ZXekqQmBoYkqYmBIUlqYmBIkpoYGJKkJgaGJKmJgSFJamJgSJKa\nGBiSpCYGhiSpiYEhSWpiYCyhXm/POXedk6RZMzCW0OAOc7XusZOde9tWb90qbT6/rXYJjf5m2p39\nbbXjlnU/0k7it9VKkhaCgSFJamJgSJKaGBiSpCYGhiSpiYEhSWpiYEiSmhgYkqQmBoYkqYmBIUlq\nYmBIkpoYGJKkJgaGJKmJgSFJamJgSJKaGBiSpCYGhiSpiYEhSWpiYEiSmhgYkqQmBsYC6/X2kOSc\nhyRthVTVVtdwjiS1iHXN2yAcRvXDqPaNLLvR9kXZxsa37X6knSQJVTWzvyonHmEkuSLJQ0k+meQT\nSX66a9+d5IEkjye5P8mlQ+scSHI8ybEk12/GDyBJmo+JRxhJekCvqh5N8nzgo8DNwI8A/1ZVb0vy\nFmB3Ve1Pcg1wF/CtwBXAg8BLRw0lHGEMOMJwhCFtxMKOMKrqVFU92j3/AnCMQRDcDBzuFjsM3NI9\n3wfcU1VPV9UTwHHgukk/X7qwS0bOAfV6e7a6MGkp7dqMjSTZA7wC+BCwUlV9GIRKksu6xS4H/mZo\ntZNdmzQjX2TUyKPf98QBaRJTB0Z3OOo9wM9U1ReSrP8/dKJjAocOHXrm+erqKqurq5OWKEnb0tra\nGmtra3P7vKnOkkqyC/gz4C+q6je6tmPAalX1u3mOD1TV3iT7gaqqO7rl7gMOVtWHR2zXOQycw5jl\ntt2/tB0t7BxG5w+Ao2fConMv8Ibu+euB9w21vzbJxUmuBl4CPDzl50uS5mSas6ReDXwQ+ASDP+MK\n+AUGIXAEuBI4AdxaVf/ZrXMA+FHgNINDWA+M2bYjDBxhOMKQNmbWIwwv3FtgBoaBIW3Eoh+SkiTt\nEAaGJKmJgSFJamJgSJKaGBiSpCYGhiSpiYGhHcgvJZQm4XUYC8zrMOa/bfc7LTOvw5AkLQQDQ5LU\nxMCQJDUxMCRJTQwMSVITA0OS1MTAWAC93p6R1wVI0iLxOowFsLHrLca1L/p1Dote36B9J+132n68\nDkOStBAMDOkZ535liF8XIp21a6sLkBbHF1l/qKrfdy5JOsMRhiSpiYEhSWpiYMzZqFNoJWkZeFrt\nnI0+hXaxTi3dmfWN3/Z23Re1/XharSRpIRgY0nl5dz7pDE+rlc7r3FNtwdNttTM5wpAkNTEwJElN\nDAxpIs5taOdxDkOaiHMb2nkcYUiSmhgYM+JNkSRtN17pPSMbuynS4l/tvBjbWI5tL/u+q+Xlld7S\nUvGeGtq+DAxpU52ZDD/76PdPeUaVtoW5B0aSG5L8fZJPJXnLvD9fmr9zQ8Qg0TKaa2AkuQj4LeA1\nwDcCr0vyDfOsYbM5ub1o1ra6gA0YFSQfWOogWVtb2+oSprLs9c/avEcY1wHHq+pEVZ0G7gFunnMN\nm6rfP8G5/9Mf3NKadra1rS5gSmuMH5Gc2MK62iz7L9xlr3/W5n3h3uXAk0Ovn2IQIgvjHe84zAc/\n+DfntL/3vX/Kf/3X57agIumMS84Zva6sXMWpU09sTTnacbzSe53bb387n/70x8e8O+70Smkezr26\nvN9/9shDoBdd9Fy+9KX/aWofFzq93p6RoxpDauea63UYSV4FHKqqG7rX+4GqqjvWLeeJ7JI0gVle\nhzHvwHgW8DjwXcA/Aw8Dr6uqY3MrQpI0kbkekqqq/0vyU8ADDCbcf9+wkKTlsJBfDSJJWjwzOa22\n5eK8JL+Z5HiSR5O84kLrJnlbkmPd8n+S5CuH3jvQbetYkuuXqf4kVyX5nySPdI87F7D2X0ny8SQf\nS3Jfkt7Qe8vQ9yPr3+y+n1X9Q++/OcmXknzVUNvC9/+4+pel/5McTPLUUJ03DL238P0/rv6J+r+q\nNvXBIIT+AbgK+ArgUeAb1i1zI/Dn3fNXAh+60LrAdwMXdc/fCtzePb8G+BiDw2t7uvWzRPVfBTy2\n4H3//KH13wT8zpL1/bj6N63vZ1l/9/4VwH3AZ4Cv6tr2LkP/n6f+peh/BhdW/dyIz1uK/j9P/Rvu\n/1mMMFouzrsZeBdAVX0YuDTJyvnWraoHq+pL3fofYrADAuwD7qmqp6vqCeA4013bMe/6YfPOzZ1V\n7V8YWv95wJmfY1n6flz9sLnnRc+k/s7bgZ8fsa2F7//z1A/L0/+j6lym/h/Xzxvq/1kExqiL8y5v\nXKZlXYDbgPeP2dbJMeu0mlf9fzH0ek83JPxAkm+btPDGz5+o9iS/muSzwA8AvzxmWwvb92Pqh83r\n+5nVn2Qf8GRVfeIC21rI/j9P/bAE/d/5qe4Q0DuSXDpmWwvZ/53h+l841L6h/l+Ub6ttTrkkvwic\nrqo/nmE9GzVJ/Xd3Tf8EvLiqrgXeDNyd5PkzqHFsSS0LVdUvVdWLgbsYHNZZFNPU/89sbd/DBepP\n8hzgF1jc75uZpP4z62z1vj9cy/ncCXxdVb0COAX82mxL2pBp6t/w/j+LwDgJvHjo9RVd2/plrhyx\nzHnXTfIG4CYGfyVeaFuTmmv9VXW6qv6je/4I8I/Ayxat9iF3A997gW1Nal71fx9AVf3vJvb9rOr/\negbHxz+e5DNd+yNJLmv8vEWs/6NJLtvkfX9W9VNV/1LdQX/g9zh72Gkp9v8R9X9r177x/X/SCZrz\nTNw8i7OTLxczmHzZu26Zmzg7cfMqzk7cjF0XuAH4JPCidds6M/F6MXA10088zbv+r+bsZPjXMRhW\nvnDBan/J0PpvAo4sWd+Pq3/T+n6W9a9b/zPA7mXq//PUvxT9D/SG1v9Z4O5l6v/z1L/h/p/oB2v4\nwW9gcEX3cWB/1/YTwI8PLfNb3Q/4ceDa863btR8HTgCPdI87h9470G3rGHD9MtXP4K/1v+vaPgLc\ntIC1vwd4rNsJ3wd8zZL1/cj6N7vvZ1X/uu1/mu4so2Xp/3H1L0v/M5hkPrP/vBdYWab+H1f/JP3v\nhXuSpCaLMuktSVpwBoYkqYmBIUlqYmBIkpoYGJKkJgaGJKmJgSFJamJgSJKa/D/gtsoePYnNigAA\nAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1026,7 +1026,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 28, @@ -1037,7 +1037,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1088,7 +1088,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index da9cb2dd19..0ab708e09f 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -366,7 +366,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ADFxEWMplVicQAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDMtMjNUMTM6MjI6\nNTAtMDQ6MDA7rTm5AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAzLTIzVDEzOjIyOjUwLTA0OjAw\nSvCBBQAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ADFxIyLefz284AAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDMtMjNUMTQ6NTA6\nNDUtMDQ6MDD1gtVmAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAzLTIzVDE0OjUwOjQ1LTA0OjAw\nhN9t2gAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -571,7 +571,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", - " Date/Time: 2016-03-23 13:22:51\n", + " Date/Time: 2016-03-23 14:50:46\n", " MPI Processes: 1\n", " OpenMP Threads: 16\n", "\n", @@ -629,20 +629,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.5200E-01 seconds\n", - " Reading cross sections = 1.2900E-01 seconds\n", - " Total time in simulation = 2.0330E+00 seconds\n", - " Time in transport only = 1.9420E+00 seconds\n", - " Time in inactive batches = 3.1000E-01 seconds\n", - " Time in active batches = 1.7230E+00 seconds\n", - " Time synchronizing fission bank = 2.0000E-03 seconds\n", - " Sampling source sites = 0.0000E+00 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", + " Total time for initialization = 5.0400E-01 seconds\n", + " Reading cross sections = 1.5000E-01 seconds\n", + " Total time in simulation = 2.1570E+00 seconds\n", + " Time in transport only = 1.9760E+00 seconds\n", + " Time in inactive batches = 3.3600E-01 seconds\n", + " Time in active batches = 1.8210E+00 seconds\n", + " Time synchronizing fission bank = 4.0000E-03 seconds\n", + " Sampling source sites = 3.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 2.0000E-03 seconds\n", - " Total time elapsed = 2.5040E+00 seconds\n", - " Calculation Rate (inactive) = 40322.6 neutrons/second\n", - " Calculation Rate (active) = 21764.4 neutrons/second\n", + " Total time elapsed = 2.6800E+00 seconds\n", + " Calculation Rate (inactive) = 37202.4 neutrons/second\n", + " Calculation Rate (active) = 20593.1 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1609,7 +1609,7 @@ "# \"Slice\" the H-1 scatter data in the moderator Cell into a new derived Tally\n", "need_to_slice = sp.get_tally(name='need-to-slice')\n", "slice_test = need_to_slice.get_slice(scores=['scatter'], nuclides=['H-1'],\n", - " filters=['cell'], filter_bins=[(moderator_cell.id,)])\n", + " filters=['cell'], filter_bins=[(moderator_cell.id,)])\n", "slice_test.get_pandas_dataframe()" ] } From c6dbbddf61f404e2feb04278f3eab44b98ca8820 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Wed, 23 Mar 2016 15:04:15 -0400 Subject: [PATCH 410/650] Updated MGXS Part II Notebook --- .../pythonapi/examples/mgxs-part-ii.ipynb | 170 ++++++++++-------- 1 file changed, 93 insertions(+), 77 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index 9378b1bd57..9798b6f070 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -25,7 +25,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": { "collapsed": false }, @@ -34,12 +34,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/wboyd/anaconda2/lib/python2.7/site-packages/matplotlib/__init__.py:1350: UserWarning: This call to matplotlib.use() has no effect\n", - "because the backend has already been chosen;\n", - "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", - "or matplotlib.backends is imported for the first time.\n", - "\n", - " warnings.warn(_use_error_msg)\n" + "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:11: QAWarning: pyne.rxname is not yet QA compliant.\n", + "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:11: QAWarning: pyne.ace is not yet QA compliant.\n" ] } ], @@ -53,7 +49,7 @@ "from openmc.source import Source\n", "from openmc.stats import Box\n", "import openmoc\n", - "from openmoc.compatible import get_openmoc_geometry\n", + "from openmoc.opencg_compatible import get_openmoc_geometry\n", "import pyne.ace\n", "\n", "%matplotlib inline" @@ -68,7 +64,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": { "collapsed": true }, @@ -91,7 +87,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": { "collapsed": false }, @@ -125,7 +121,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": { "collapsed": true }, @@ -151,7 +147,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": { "collapsed": true }, @@ -179,7 +175,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": { "collapsed": false }, @@ -216,7 +212,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": { "collapsed": false }, @@ -241,7 +237,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": { "collapsed": true }, @@ -268,7 +264,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": { "collapsed": true }, @@ -306,7 +302,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": { "collapsed": true }, @@ -331,7 +327,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": { "collapsed": false }, @@ -362,7 +358,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": { "collapsed": false }, @@ -386,7 +382,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": { "collapsed": false }, @@ -423,7 +419,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": { "collapsed": false }, @@ -448,10 +444,10 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", - " Date/Time: 2016-03-23 14:41:04\n", + " Git SHA1: 30641c5d37646212ab0540a1064ef6590065f0f0\n", + " Date/Time: 2016-03-23 15:00:26\n", " MPI Processes: 1\n", - " OpenMP Threads: 16\n", + " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -566,20 +562,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.5200E-01 seconds\n", - " Reading cross sections = 1.2500E-01 seconds\n", - " Total time in simulation = 2.6407E+01 seconds\n", - " Time in transport only = 2.5427E+01 seconds\n", - " Time in inactive batches = 1.7110E+00 seconds\n", - " Time in active batches = 2.4696E+01 seconds\n", - " Time synchronizing fission bank = 2.7000E-02 seconds\n", - " Sampling source sites = 1.9000E-02 seconds\n", - " SEND/RECV source sites = 5.0000E-03 seconds\n", - " Time accumulating tallies = 5.0000E-03 seconds\n", - " Total time for finalization = 2.0000E-02 seconds\n", - " Total time elapsed = 2.6954E+01 seconds\n", - " Calculation Rate (inactive) = 58445.4 neutrons/second\n", - " Calculation Rate (active) = 16197.0 neutrons/second\n", + " Total time for initialization = 4.9500E-01 seconds\n", + " Reading cross sections = 1.0300E-01 seconds\n", + " Total time in simulation = 1.1163E+02 seconds\n", + " Time in transport only = 1.1148E+02 seconds\n", + " Time in inactive batches = 6.6440E+00 seconds\n", + " Time in active batches = 1.0499E+02 seconds\n", + " Time synchronizing fission bank = 2.4000E-02 seconds\n", + " Sampling source sites = 1.6000E-02 seconds\n", + " SEND/RECV source sites = 4.0000E-03 seconds\n", + " Time accumulating tallies = 6.0000E-03 seconds\n", + " Total time for finalization = 1.3000E-02 seconds\n", + " Total time elapsed = 1.1220E+02 seconds\n", + " Calculation Rate (inactive) = 15051.2 neutrons/second\n", + " Calculation Rate (active) = 3810.00 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -597,7 +593,7 @@ "0" ] }, - "execution_count": 14, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -624,7 +620,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": { "collapsed": false }, @@ -643,7 +639,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": { "collapsed": true }, @@ -663,7 +659,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": { "collapsed": false }, @@ -698,7 +694,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "metadata": { "collapsed": false }, @@ -752,7 +748,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "metadata": { "collapsed": false }, @@ -794,7 +790,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "metadata": { "collapsed": false }, @@ -924,7 +920,7 @@ "119 10002 1 5 O-16 0.000000 0.000000" ] }, - "execution_count": 20, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -944,7 +940,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, "metadata": { "collapsed": true }, @@ -966,7 +962,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "metadata": { "collapsed": false }, @@ -1005,7 +1001,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -1088,7 +1084,7 @@ "2 10000 2 O-16 3.794859 0.011139" ] }, - "execution_count": 23, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -1114,7 +1110,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "metadata": { "collapsed": false }, @@ -1133,7 +1129,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "metadata": { "collapsed": false }, @@ -1178,7 +1174,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "metadata": { "collapsed": false }, @@ -1374,7 +1370,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -1409,7 +1405,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 29, "metadata": { "collapsed": false }, @@ -1449,7 +1445,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 30, "metadata": { "collapsed": false }, @@ -1706,7 +1702,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 31, "metadata": { "collapsed": false }, @@ -1763,23 +1759,11 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 32, "metadata": { "collapsed": false }, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'pyne' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# Instantiate a PyNE ACE continuous-energy cross sections library\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mpyne_lib\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpyne\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mace\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mLibrary\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'../../../../data/nndc/293.6K/U_235_293.6K.ace'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[0mpyne_lib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mread\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'92235.71c'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;31m# Extract the U-235 data from the library\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mNameError\u001b[0m: name 'pyne' is not defined" - ] - } - ], + "outputs": [], "source": [ "# Instantiate a PyNE ACE continuous-energy cross sections library\n", "pyne_lib = pyne.ace.Library('../../../../data/nndc/293.6K/U_235_293.6K.ace')\n", @@ -1801,11 +1785,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(9.9999999999999994e-12, 20.0)" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Create a loglog plot of the U-235 continuous-energy fission cross section \n", "plt.loglog(u235.energy, fission.sigma, color='b', linewidth=1)\n", @@ -1841,7 +1846,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": { "collapsed": false }, @@ -1873,11 +1878,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Create plot of the H-1 scattering matrix\n", "fig = plt.subplot(121)\n", @@ -1925,7 +1941,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.11" + "version": "2.7.6" } }, "nbformat": 4, From f897c605c4e8e369ed8ff6ef8df6300879266755 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Thu, 24 Mar 2016 13:28:43 -0400 Subject: [PATCH 411/650] Moved NumPy array squeezing to proper scope in MGXS.get_xs(...) --- openmc/mgxs/mgxs.py | 7 +++---- openmc/opencg_compatible.py | 1 + 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 2f8f729adc..cfda0d160e 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -761,10 +761,9 @@ class MGXS(object): # Reverse energies to align with increasing energy groups xs = xs[:, ::-1, :] - # Eliminate trivial dimensions - xs = np.squeeze(xs) - xs = np.atleast_1d(xs) - + # Eliminate trivial dimensions + xs = np.squeeze(xs) + xs = np.atleast_1d(xs) return xs def get_condensed_xs(self, coarse_groups): diff --git a/openmc/opencg_compatible.py b/openmc/opencg_compatible.py index cd45030631..d690c2c6a9 100644 --- a/openmc/opencg_compatible.py +++ b/openmc/opencg_compatible.py @@ -1002,6 +1002,7 @@ def get_opencg_geometry(openmc_geometry): opencg_geometry = opencg.Geometry() opencg_geometry.root_universe = opencg_root_universe opencg_geometry.initialize_cell_offsets() + opencg_geometry.assign_auto_ids() return opencg_geometry From a97e522f838d8fc5db558d8dffb50e03e5abec6f Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Thu, 24 Mar 2016 21:23:57 -0400 Subject: [PATCH 412/650] Removing unneeded comment --- src/physics_mg.F90 | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index a72b3878db..2e5e467c14 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -242,10 +242,8 @@ contains ! Set weight of fission bank site bank_array(i) % wgt = ONE/weight - ! Sample cosine of angle -- fission neutrons are always emitted - ! isotropically. Sometimes in ACE data, fission reactions actually have - ! an angular distribution listed, but for those that do, it's simply just - ! a uniform distribution in mu + ! Sample cosine of angle -- fission neutrons are treated as being emitted + ! isotropically. mu = TWO * prn() - ONE ! Sample azimuthal angle uniformly in [0,2*pi) From 6e6e253fa647da0d99e1afb0bd5b0ce20000f9ed Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 25 Mar 2016 13:17:49 -0500 Subject: [PATCH 413/650] Fix a few issues with MGXS documentation --- docs/source/pythonapi/energy_groups.rst | 8 --- docs/source/pythonapi/index.rst | 3 +- docs/source/pythonapi/mgxs.rst | 57 +++++++++++---- docs/source/pythonapi/mgxs_library.rst | 8 +-- openmc/material.py | 3 +- openmc/mgxs_library.py | 95 ++++++++++++++++++++++--- 6 files changed, 134 insertions(+), 40 deletions(-) delete mode 100644 docs/source/pythonapi/energy_groups.rst diff --git a/docs/source/pythonapi/energy_groups.rst b/docs/source/pythonapi/energy_groups.rst deleted file mode 100644 index 28ca6f3fe2..0000000000 --- a/docs/source/pythonapi/energy_groups.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_energy_groups: - -============= -Energy Groups -============= - -.. automodule:: openmc.mgxs.groups - :members: diff --git a/docs/source/pythonapi/index.rst b/docs/source/pythonapi/index.rst index 6dd2ae10d0..864b48c556 100644 --- a/docs/source/pythonapi/index.rst +++ b/docs/source/pythonapi/index.rst @@ -19,6 +19,7 @@ on a given module or class. :maxdepth: 1 ace + mgxs_library **Creating input files:** @@ -65,8 +66,6 @@ on a given module or class. :maxdepth: 1 mgxs - energy_groups - mgxs_library **Example Jupyter Notebooks:** diff --git a/docs/source/pythonapi/mgxs.rst b/docs/source/pythonapi/mgxs.rst index c7084e5653..2a0bb52ba4 100644 --- a/docs/source/pythonapi/mgxs.rst +++ b/docs/source/pythonapi/mgxs.rst @@ -4,31 +4,57 @@ Multi-Group Cross Sections ========================== -.. currentmodule:: openmc.mgxs.mgxs - ---------------------------- Summary of Available Classes ---------------------------- +Energy Groups +------------- + +.. currentmodule:: openmc.mgxs.groups + .. autosummary:: - MGXS - AbsorptionXS - CaptureXS - Chi - FissionXS - NuFissionXS - NuScatterXS - NuScatterMatrixXS - ScatterXS - ScatterMatrixXS - TotalXS - TransportXS + EnergyGroups + +Multi-group Cross Sections +-------------------------- + +.. currentmodule:: openmc.mgxs.mgxs + +.. autosummary:: + + MGXS + AbsorptionXS + CaptureXS + Chi + FissionXS + NuFissionXS + NuScatterXS + NuScatterMatrixXS + ScatterXS + ScatterMatrixXS + TotalXS + TransportXS + +Multi-group Cross Section Libraries +----------------------------------- + +.. currentmodule:: openmc.mgxs.library + +.. autosummary:: + + Library ------------------- Class Documentation ------------------- +.. automodule:: openmc.mgxs.groups + :members: + +.. currentmodule:: openmc.mgxs.mgxs + .. autoclass:: MGXS :members: @@ -64,3 +90,6 @@ Class Documentation .. autoclass:: TransportXS :members: + +.. automodule:: openmc.mgxs.library + :members: diff --git a/docs/source/pythonapi/mgxs_library.rst b/docs/source/pythonapi/mgxs_library.rst index 8ac5457004..bdcdc364c1 100644 --- a/docs/source/pythonapi/mgxs_library.rst +++ b/docs/source/pythonapi/mgxs_library.rst @@ -1,8 +1,8 @@ .. _pythonapi_mgxs_library: -============ -MGXS Library -============ +============================== +Multi-group Cross Section Data +============================== -.. automodule:: openmc.mgxs.library +.. automodule:: openmc.mgxs_library :members: diff --git a/openmc/material.py b/openmc/material.py index e51586205d..9db2f03f04 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -723,9 +723,8 @@ class MaterialsFile(object): material.make_isotropic_in_lab() def _create_material_subelements(self): - subelement = ET.SubElement(self._materials_file, "default_xs") - if self._default_xs is not None: + subelement = ET.SubElement(self._materials_file, "default_xs") subelement.text = self._default_xs for material in self._materials: diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 06b369c68a..7f140dd217 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -87,8 +87,9 @@ class XSdata(object): ---------- name : str, optional Name of the mgxs data set. - - representation : {'isotropic', 'angle'} + energy_groups : openmc.mgxs.EnergyGroups + Energygroup structure + representation : {'isotropic', 'angle'}, optional Method used in generating the MGXS (isotropic or angle-dependent flux weighting). Defaults to 'isotropic' @@ -99,10 +100,10 @@ class XSdata(object): alias : str Separate unique identifier for the xsdata object kT : float - Temperature (in units of MeV) of this data set. - energy_groups : EnergyGroups + Temperature (in units of MeV). + energy_groups : openmc.mgxs.EnergyGroups Energy group structure - fissionable : boolean + fissionable : bool Whether or not this is a fissionable data set. scatt_type : {'legendre', 'histogram', or 'tabular'} Angular distribution representation (legendre, histogram, or tabular) @@ -115,6 +116,85 @@ class XSdata(object): Legendre polynomial form). Dict contains two keys: 'enable' and 'num_points'. 'enable' is a boolean and 'num_points' is the number of points to use, if 'enable' is True. + num_azimuthal : int + Number of equal width angular bins that the azimuthal angular domain is + subdivided into. This only applies when ``representation`` is "angle". + num_polar : int + Number of equal width angular bins that the polar angular domain is + subdivided into. This only applies when ``representation`` is "angle". + total : numpy.ndarray + Group-wise total cross section ordered by increasing group index (i.e., + fast to thermal). If ``representation`` is "isotropic", then the length + of this list should equal the number of groups described in the + ``groups`` element. If ``representation`` is "angle", then the length + of this list should equal the number of groups times the number of + azimuthal angles times the number of polar angles, with the + inner-dimension being groups, intermediate-dimension being azimuthal + angles and outer-dimension being the polar angles. + absorption : numpy.ndarray + Group-wise absorption cross section ordered by increasing group index + (i.e., fast to thermal). If ``representation`` is "isotropic", then the + length of this list should equal the number of groups described in the + ``groups`` attribute. If ``representation`` is "angle", then the length + of this list should equal the number of groups times the number of + azimuthal angles times the number of polar angles, with the + inner-dimension being groups, intermediate-dimension being azimuthal + angles and outer-dimension being the polar angles. + scatter : numpy.ndarray + Scattering moment matrices presented with the columns representing + incoming group and rows representing the outgoing group. That is, + down-scatter will be above the diagonal of the resultant matrix. This + matrix is repeated for every Legendre order (in order of increasing + orders) if ``scatt_type`` is "legendre"; otherwise, this matrix is + repeated for every bin of the histogram or tabular representation. + Finally, if ``representation`` is "angle", the above is repeated for + every azimuthal angle and every polar angle, in that order. + multiplicity : numpy.ndarray + Ratio of neutrons produced in scattering collisions to the neutrons + which undergo scattering collisions; that is, the multiplicity provides + the code with a scaling factor to account for neutrons being produced in + (n,xn) reactions. This information is assumed isotropic and therefore + does not need to be repeated for every Legendre moment or + histogram/tabular bin. This matrix follows the same arrangement as + described for the ``scatter`` attribute, with the exception of the data + needed to provide the scattering type information. + fission : numpy.ndarray + Group-wise fission cross section ordered by increasing group index + (i.e., fast to thermal). If ``representation`` is "isotropic", then the + length of this list should equal the number of groups described in the + ``groups`` attribute. If ``representation`` is "angle", then the length + of this list should equal the number of groups times the number of + azimuthal angles times the number of polar angles, with the + inner-dimension being groups, intermediate-dimension being azimuthal + angles and outer-dimension being the polar angles. + k_fission : numpy.ndarray + Group-wise kappa-fission cross section ordered by increasing group index + (i.e., fast to thermal). If ``representation`` is "isotropic", then the + length of this list should equal the number of groups described in the + ``groups`` attribute. If ``representation`` is "angle", then the length + of this list should equal the number of groups times the number of + azimuthal angles times the number of polar angles, with the + inner-dimension being groups, intermediate-dimension being azimuthal + angles and outer-dimension being the polar angles. + chi : numpy.ndarray + Group-wise fission spectra ordered by increasing group index (i.e., fast + to thermal). This attribute should be used if making the common + approximation that the fission spectra does not depend on incoming + energy. If the user does not wish to make this approximation, then this + should not be provided and this information included in the + ``nu_fission`` element instead. If ``representation`` is "isotropic", + then the length of this list should equal the number of groups described + in the ``groups`` element. If ``representation`` is "angle", then the + length of this list should equal the number of groups times the number + of azimuthal angles times the number of polar angles, with the + inner-dimension being groups, intermediate-dimension being azimuthal + angles and outer-dimension being the polar angles. + nu_fission : numpy.ndarray + Group-wise fission production cross section vector (i.e., if ``chi`` is + provided), or is the group-wise fission production matrix. If providing + the vector, it should be ordered the same as the ``fission`` data. If + providing the matrix, it should be ordered the same as the + ``multiplicity`` matrix. """ def __init__(self, name, energy_groups, representation="isotropic"): @@ -577,8 +657,6 @@ class MGXSLibraryFile(object): Energy group structure. inverse_velocities : Iterable of Real Inverse of velocities, units of sec/cm - filename : str - XML file to write to. xsdatas : Iterable of XSdata Iterable of multi-Group cross section data objects """ @@ -717,6 +795,3 @@ class MGXSLibraryFile(object): tree = ET.ElementTree(self._cross_sections_file) tree.write(filename, xml_declaration=True, encoding='utf-8', method="xml") - - - From d789b1339956e4c47f38a9a10d3fb82cd00dcde7 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 25 Mar 2016 13:46:00 -0500 Subject: [PATCH 414/650] Update inputs for test_source ( is gone) --- tests/test_source/inputs_true.dat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_source/inputs_true.dat b/tests/test_source/inputs_true.dat index 01130ed2e5..69a1e2ea84 100644 --- a/tests/test_source/inputs_true.dat +++ b/tests/test_source/inputs_true.dat @@ -1 +1 @@ -5c2fdde85affcd44c1b02c07c300acb8e5c189c1adbf7aa079e37a68e8b8313678fc292bd7f6e0d0957f723e05b8146bd165cf3315dde5f6b2f88ebc954cd65e \ No newline at end of file +526c91551d9a80dc01216e5cb04162253f12ec684cc2b4912ca18cfc510f1ea2e5303029f1c1607882082b0c2c8a47f25dd5be14678f449a1579e3601d1bdec5 \ No newline at end of file From 83773b0321f7a21ed49f9bd2ccc29b833e98b39b Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Fri, 25 Mar 2016 14:54:35 -0400 Subject: [PATCH 415/650] Update test, fix temp = EROR_REAL for MG --- src/input_xml.F90 | 6 +++++- tests/test_multipole/results_true.dat | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index c20373959f..f58009f866 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -1380,7 +1380,11 @@ contains ! Read cell temperatures. If the temperature is not specified, set it to ! ERROR_REAL for now. During initialization we'll replace ERROR_REAL with ! the temperature from the material data. - if (check_for_node(node_cell, "temperature")) then + if (.not. run_CE) then + ! Cell temperatures are not used for MG mode. + allocate(c % sqrtkT(1)) + c % sqrtkT(1) = ZERO + else if (check_for_node(node_cell, "temperature")) then n = get_arraysize_double(node_cell, "temperature") if (n > 0) then ! Make sure this is a "normal" cell. diff --git a/tests/test_multipole/results_true.dat b/tests/test_multipole/results_true.dat index 19dd4d26b7..7d81c026b9 100644 --- a/tests/test_multipole/results_true.dat +++ b/tests/test_multipole/results_true.dat @@ -1,5 +1,5 @@ k-combined: -1.445285E+00 9.521660E-03 +1.457760E+00 1.119659E-02 Cell ID = 11 Name = From afccdba6d5a61d813337959761296b7df1dc106c Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Fri, 25 Mar 2016 16:04:14 -0400 Subject: [PATCH 416/650] Improve multipole readability --- src/cross_section.F90 | 145 +++++++++++++++++++++--------------------- src/initialize.F90 | 2 +- src/math.F90 | 29 +++++---- 3 files changed, 88 insertions(+), 88 deletions(-) diff --git a/src/cross_section.F90 b/src/cross_section.F90 index 1717b733d7..930d1a0529 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -6,7 +6,7 @@ module cross_section use global use list_header, only: ListElemInt use material_header, only: Material - use math, only: w, broaden_n_polynomials + use math, only: faddeeva, broaden_wmp_polynomials use multipole_header, only: FORM_RM, FORM_MLBW, MP_EA, RM_RT, RM_RA, RM_RF, & MLBW_RT, MLBW_RX, MLBW_RA, MLBW_RF, FIT_T, FIT_A,& FIT_F, MultipoleArray, max_poly, max_L, max_poles @@ -588,123 +588,119 @@ contains real(8), intent(out) :: sigT ! Total cross section real(8), intent(out) :: sigA ! Absorption cross section real(8), intent(out) :: sigF ! Fission cross section - complex(8) :: psi_ki ! The value of the psi-ki function for the asymptotic - ! form + complex(8) :: psi_chi ! The value of the psi-chi function for the + ! asymptotic form complex(8) :: c_temp ! complex temporary variable complex(8) :: w_val ! The faddeeva function evaluated at Z complex(8) :: Z ! sqrt(atomic weight ratio / kT) * (sqrt(E) - pole) real(8) :: sqrtE ! sqrt(E), eV real(8) :: invE ! 1/E, eV - real(8) :: dopp ! sqrt(atomic weight ratio / kT) - real(8) :: dopp_ecoef ! sqrt(atomic weight ratio * pi / kT) / E + real(8) :: dopp ! sqrt(atomic weight ratio / kT) = 1 / (2 sqrt(xi)) real(8) :: temp ! real temporary value real(8) :: E ! energy, eV real(8) :: sqrtkT ! sqrt(kT (in eV)) - integer :: iP ! index of pole - integer :: iC ! index of curvefit - integer :: iW ! index of window + integer :: i_pole ! index of pole + integer :: i_poly ! index of curvefit + integer :: i_window ! index of window integer :: startw ! window start pointer (for poles) - integer :: startw_1 ! window start pointer - 1 - integer :: startw_endw ! window start pointer - window end pointer integer :: endw ! window end pointer - ! Convert to eV + ! ========================================================================== + ! Bookkeeping + + ! Convert to eV. E = Emev * 1.0e6_8 sqrtkT = sqrtkT_ * 1.0e3_8 + ! Define some frequently used variables. sqrtE = sqrt(E) - invE = ONE/E + invE = ONE / E + dopp = multipole % sqrtAWR / sqrtkT - if(.not. mp_already_alloc) then + if (.not. mp_already_alloc) then call multipole_eval_allocate() end if - ! Locate us - iW = floor((sqrtE - sqrt(multipole % start_E))/multipole % spacing + ONE) + ! Locate us. + i_window = floor((sqrtE - sqrt(multipole % start_E)) / multipole % spacing & + + ONE) + startw = multipole % w_start(i_window) + endw = multipole % w_end(i_window) - startw = multipole % w_start(iW) - startw_1 = startw - 1 ! This is an index shift parameter. - endw = multipole % w_end(iW) - startw_endw = endw - startw + 1 - - ! Fill in factors + ! Fill in factors. if (startw <= endw) then - call fill_factors(multipole, sqrtE, sigT_factor, twophi, multipole % num_l) + call fill_factors(multipole, sqrtE, sigT_factor, twophi, & + multipole % num_l) end if - ! Generate some doppler broadening parameters - - ! dopp_ecoef is inverse of dopp, divided by E, multiplied by sqrt(pi). - dopp = multipole % sqrtAWR / sqrtKT - dopp_ecoef = dopp * invE * SQRT_PI - + ! Initialize the ouptut cross sections. sigT = ZERO sigA = ZERO sigF = ZERO - ! Evaluate linefit first - if(sqrtkT /= 0 .and. multipole % broaden_poly(iW) == 1) then ! Broaden the curvefit. - call broaden_n_polynomials(E, dopp, multipole % fit_order + 1, broadened_polynomials) + ! ========================================================================== + ! Add the contribution from the curvefit polynomial. - do iC = 1, multipole % fit_order+1 - sigT = sigT + multipole % curvefit(FIT_T, iC, iW)*broadened_polynomials(iC) - sigA = sigA + multipole % curvefit(FIT_A, iC, iW)*broadened_polynomials(iC) - if (multipole % fissionable) then - sigF = sigF + multipole % curvefit(FIT_F, iC, iW)*broadened_polynomials(iC) - end if + if (sqrtkT /= ZERO .and. multipole % broaden_poly(i_window) == 1) then + ! Broaden the curvefit. + call broaden_wmp_polynomials(E, dopp, multipole % fit_order + 1, & + broadened_polynomials) + do i_poly = 1, multipole % fit_order+1 + sigT = sigT + multipole % curvefit(FIT_T, i_poly, i_window) & + * broadened_polynomials(i_poly) + sigA = sigA + multipole % curvefit(FIT_A, i_poly, i_window) & + * broadened_polynomials(i_poly) + sigF = sigF + multipole % curvefit(FIT_F, i_poly, i_window) & + * broadened_polynomials(i_poly) end do else ! Evaluate as if it were a polynomial temp = invE - do iC = 1, multipole % fit_order+1 - - sigT = sigT + multipole % curvefit(FIT_T, iC, iW)*temp - sigA = sigA + multipole % curvefit(FIT_A, iC, iW)*temp - if (multipole % fissionable) then - sigF = sigF + multipole % curvefit(FIT_F, iC, iW)*temp - end if - + do i_poly = 1, multipole % fit_order+1 + sigT = sigT + multipole % curvefit(FIT_T, i_poly, i_window) * temp + sigA = sigA + multipole % curvefit(FIT_A, i_poly, i_window) * temp + sigF = sigF + multipole % curvefit(FIT_F, i_poly, i_window) * temp temp = temp * sqrtE end do end if - ! Then get the poles we want and broaden them. + ! ========================================================================== + ! Add the contribution from the poles in this window. if (sqrtkT == ZERO) then ! If at 0K, use asymptotic form. - do iP = startw, endw - psi_ki = -ONEI/(multipole % data(MP_EA, iP) - sqrtE) - c_temp = psi_ki/E + do i_pole = startw, endw + psi_chi = -ONEI / (multipole % data(MP_EA, i_pole) - sqrtE) + c_temp = psi_chi / E if (multipole % formalism == FORM_MLBW) then - sigT = sigT + real(multipole % data(MLBW_RT, iP) * c_temp * & - sigT_factor(multipole % l_value(iP))) & - + real(multipole % data(MLBW_RX, iP) * c_temp) - sigA = sigA + real(multipole % data(MLBW_RA, iP) * c_temp) - sigF = sigF + real(multipole % data(MLBW_RF, iP) * c_temp) + sigT = sigT + real(multipole % data(MLBW_RT, i_pole) * c_temp * & + sigT_factor(multipole % l_value(i_pole))) & + + real(multipole % data(MLBW_RX, i_pole) * c_temp) + sigA = sigA + real(multipole % data(MLBW_RA, i_pole) * c_temp) + sigF = sigF + real(multipole % data(MLBW_RF, i_pole) * c_temp) else if (multipole % formalism == FORM_RM) then - sigT = sigT + real(multipole % data(RM_RT, iP) * c_temp* & - sigT_factor(multipole % l_value(iP))) - sigA = sigA + real(multipole % data(RM_RA, iP) * c_temp) - sigF = sigF + real(multipole % data(RM_RF, iP) * c_temp) + sigT = sigT + real(multipole % data(RM_RT, i_pole) * c_temp * & + sigT_factor(multipole % l_value(i_pole))) + sigA = sigA + real(multipole % data(RM_RA, i_pole) * c_temp) + sigF = sigF + real(multipole % data(RM_RF, i_pole) * c_temp) end if end do else ! At temperature, use Faddeeva function-based form. - if(endw >= startw) then - do iP = startw, endw - Z = (sqrtE - multipole % data(MP_EA, iP)) * dopp - w_val = w(Z) * dopp_ecoef - + if (endw >= startw) then + do i_pole = startw, endw + Z = (sqrtE - multipole % data(MP_EA, i_pole)) * dopp + w_val = faddeeva(Z) * dopp * invE * SQRT_PI if (multipole % formalism == FORM_MLBW) then - sigT = sigT + real((multipole % data(MLBW_RT, iP) * & - sigT_factor(multipole%l_value(iP)) + & - multipole % data(MLBW_RX, iP)) * w_val) - sigA = sigA + real(multipole % data(MLBW_RA, iP) * w_val) - sigF = sigF + real(multipole % data(MLBW_RF, iP) * w_val) + sigT = sigT + real((multipole % data(MLBW_RT, i_pole) * & + sigT_factor(multipole % l_value(i_pole)) + & + multipole % data(MLBW_RX, i_pole)) * w_val) + sigA = sigA + real(multipole % data(MLBW_RA, i_pole) * w_val) + sigF = sigF + real(multipole % data(MLBW_RF, i_pole) * w_val) else if (multipole % formalism == FORM_RM) then - sigT = sigT + real(multipole % data(RM_RT, iP) * w_val * & - sigT_factor(multipole % l_value(iP))) - sigA = sigA + real(multipole % data(RM_RA, iP) * w_val) - sigF = sigF + real(multipole % data(RM_RF, iP) * w_val) + sigT = sigT + real(multipole % data(RM_RT, i_pole) * w_val * & + sigT_factor(multipole % l_value(i_pole))) + sigA = sigA + real(multipole % data(RM_RA, i_pole) * w_val) + sigF = sigF + real(multipole % data(RM_RF, i_pole) * w_val) end if end do end if @@ -735,13 +731,14 @@ contains arg = 3.0_8 * twophi(iL) / (3.0_8 - twophi(iL)**2) twophi(iL) = twophi(iL) - atan(arg) else if (iL == 4) then - arg = twophi(iL) * (15.0_8 - twophi(iL)**2) / (15.0_8 - 6.0_8 * twophi(iL)**2) + arg = twophi(iL) * (15.0_8 - twophi(iL)**2) & + / (15.0_8 - 6.0_8 * twophi(iL)**2) twophi(iL) = twophi(iL) - atan(arg) end if end do twophi = 2.0_8 * twophi - sigT_factor = cmplx(cos(twophi),-sin(twophi), KIND=8) + sigT_factor = cmplx(cos(twophi), -sin(twophi), KIND=8) end subroutine !=============================================================================== diff --git a/src/initialize.F90 b/src/initialize.F90 index 8502a361b3..f34215fbab 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -1178,7 +1178,7 @@ contains do k = 2, mat % n_nuclides ! Warn the user if the nuclides don't have identical temperatues. if (nuclides(mat % nuclide(k)) % kT /= min_temp & - .and. .not. warning_given) then + .and. .not. warning_given .and. multipole_active) then call warning("OpenMC cannot & &identify the temperature of at least one cell. For the & &purposes of multipole cross section evaluations, all cells & diff --git a/src/math.F90 b/src/math.F90 index 57e238afa0..fce57e6fc2 100644 --- a/src/math.F90 +++ b/src/math.F90 @@ -719,13 +719,14 @@ contains end function watt_spectrum !=============================================================================== -! W acts as a front end to the MIT Faddeeva function, Faddeeva_w. +! FADDEEVA the Faddeeva function, using Stephen Johnson's implementation !=============================================================================== - function w(z) result(wv) + function faddeeva(z) result(wv) complex(C_DOUBLE_COMPLEX), intent(in) :: z ! The point to evaluate Z at complex(8) :: wv ! The resulting w(z) value - real(C_DOUBLE) :: relerr ! Target relative error in inner loop of MIT Faddeeva + real(C_DOUBLE) :: relerr ! Target relative error in inner loop of MIT + ! Faddeeva ! Technically, the value we want is given by the equation: ! w(z) = I/Pi * Integrate[Exp[-t^2]/(z-t), {t, -Infinity, Infinity}] @@ -747,23 +748,24 @@ contains wv = -conjg(faddeeva_w(conjg(z), relerr)) end if - end function w + end function faddeeva !=============================================================================== -! BROADEN_N_POLYNOMIALS doppler broadens polynomials of the form +! BROADEN_WMP_POLYNOMIALS Doppler broadens the windowed multipole curvefit. The +! curvefit is a polynomial of the form ! a/En + b/sqrt(En) + c + d sqrt(En) ... -! exactly and quickly. !=============================================================================== - subroutine broaden_n_polynomials(En, dopp, n, factors) + subroutine broaden_wmp_polynomials(En, dopp, n, factors) real(8), intent(in) :: En ! Energy to evaluate at - real(8), intent(in) :: dopp ! sqrt(atomic weight ratio / kT), kT given in eV. + real(8), intent(in) :: dopp ! sqrt(atomic weight ratio / kT), + ! kT given in eV. integer, intent(in) :: n ! number of components to polynomial real(8), intent(out):: factors(n) ! output leading coefficient integer :: i - real(8) :: sqrtE ! Sqrt(energy) + real(8) :: sqrtE ! sqrt(energy) real(8) :: beta ! sqrt(atomic weight ratio * E / kT) real(8) :: half_inv_dopp2 ! 0.5 / dopp**2 real(8) :: quarter_inv_dopp4 ! 0.25 / dopp**4 @@ -790,20 +792,21 @@ contains factors(1) = erfbeta / En factors(2) = ONE / sqrtE - factors(3) = factors(1) * (half_inv_dopp2 + En) + exp_m_beta2 / (beta * SQRT_PI) + factors(3) = factors(1) * (half_inv_dopp2 + En) & + + exp_m_beta2 / (beta * SQRT_PI) ! Perform recursive broadening of high order components do i = 1, n-3 if (i /= 1) then - factors(i+3) = -factors(i-1) * (i - ONE) * i * quarter_inv_dopp4 + & - factors(i+1) * (En + (ONE + TWO * i) * half_inv_dopp2) + factors(i+3) = -factors(i-1) * (i - ONE) * i * quarter_inv_dopp4 & + + factors(i+1) * (En + (ONE + TWO * i) * half_inv_dopp2) else ! Although it's mathematically identical, factors(0) will contain ! nothing, and we don't want to have to worry about memory. factors(i+3) = factors(i+1)*(En + (ONE + TWO * i) * half_inv_dopp2) end if end do - end subroutine broaden_n_polynomials + end subroutine broaden_wmp_polynomials !=============================================================================== ! find_angle finds the closest angle on the data grid and returns that index From 49f9c66728cfce5d02f87661d832e5bed958e58d Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Fri, 25 Mar 2016 16:27:59 -0400 Subject: [PATCH 417/650] Add OPENMC_ to the MULTIPOLE_LIBRARY env variable --- .travis.yml | 2 +- docs/source/usersguide/input.rst | 2 +- openmc/settings.py | 5 +++-- src/input_xml.F90 | 11 ++++++----- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 06fcb888f9..df11c1e3c7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,7 +47,7 @@ before_script: - export OPENMC_CROSS_SECTIONS=$PWD/nndc/cross_sections.xml - wget http://web.mit.edu/smharper/Public/multipole_lib.tar.gz - tar -xzf multipole_lib.tar.gz - - export MULTIPOLE_LIBRARY=$PWD/multipole_lib + - export OPENMC_MULTIPOLE_LIBRARY=$PWD/multipole_lib - cd .. script: diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index d3d050cb27..ace77a3954 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -288,7 +288,7 @@ The ```` element indicates the directory containing a windowed multipole library. If a windowed multipole library is available, OpenMC can use it for on-the-fly Doppler-broadening of resolved resonance range cross sections. If this element is absent from the settings.xml file, the -:envvar:`MULTIPOLE_LIBRARY` environment variable will be used. +:envvar:`OPENMC_MULTIPOLE_LIBRARY` environment variable will be used. .. note:: The element must also be set to "True" for windowed multipole functionality. diff --git a/openmc/settings.py b/openmc/settings.py index be1fdb36c8..566230fb99 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -76,8 +76,9 @@ class SettingsFile(object): calculations to find the path to the XML cross section file. multipole_library : str Indicates the path to a directory containing a windowed multipole - cross section library. If it is not set, the :envvar:`MULTIPOLE_LIBRARY' - environment variable will be used. A multipole library is optional. + cross section library. If it is not set, the + :envvar:`OPENMC_MULTIPOLE_LIBRARY' environment variable will be used. A + multipole library is optional. energy_grid : {'nuclide', 'logarithm', 'material-union'} Set the method used to search energy grids. energy_mode : {'continuous-energy', 'multi-group'} diff --git a/src/input_xml.F90 b/src/input_xml.F90 index f58009f866..1f5b0d3e84 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -136,9 +136,9 @@ contains call fatal_error("No cross_sections.xml file was specified in & &settings.xml or in the OPENMC_CROSS_SECTIONS environment & &variable. OpenMC needs such a file to identify where to & - &find ACE cross section libraries. Please consult the user's & - &guide at http://mit-crpg.github.io/openmc for information on & - &how to set up ACE cross section libraries.") + &find ACE cross section libraries. Please consult the & + &user's guide at http://mit-crpg.github.io/openmc for & + &information on how to set up ACE cross section libraries.") else call warning("The CROSS_SECTIONS environment variable is & &deprecated. Please update your environment to use & @@ -147,7 +147,8 @@ contains end if path_cross_sections = trim(env_variable) else - call get_environment_variable("OPENMC_MG_CROSS_SECTIONS", env_variable) + call get_environment_variable("OPENMC_MG_CROSS_SECTIONS", & + env_variable) if (len_trim(env_variable) == 0) then call fatal_error("No cross_sections.xml file was specified in & &settings.xml or in the OPENMC_MG_CROSS_SECTIONS environment & @@ -170,7 +171,7 @@ contains run_mode /= MODE_PLOTTING) then ! No library location specified in settings.xml, check ! environment variable - call get_environment_variable("MULTIPOLE_LIBRARY", env_variable) + call get_environment_variable("OPENMC_MULTIPOLE_LIBRARY", env_variable) path_multipole = trim(env_variable) else call get_node_value(doc, "multipole_library", path_multipole) From 923a609a90c0bff8ab554a4316968f1cebff8e99 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 25 Mar 2016 17:52:52 -0400 Subject: [PATCH 418/650] Removed errant calls to get all nuclides from domain in MGXS class to permit user-specified nuclides --- openmc/mgxs/mgxs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 2f8f729adc..26f2159815 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -441,7 +441,7 @@ class MGXS(object): cv.check_type('nuclide', nuclide, basestring) # Get list of all nuclides in the spatial domain - nuclides = self.domain.get_all_nuclides() + nuclides = self.get_all_nuclides() if nuclide not in nuclides: msg = 'Unable to get density for nuclide "{0}" which is not in ' \ @@ -553,7 +553,7 @@ class MGXS(object): # If this is a by-nuclide cross-section, add all nuclides to Tally if self.by_nuclide and score != 'flux': - all_nuclides = self.domain.get_all_nuclides() + all_nuclides = self.get_all_nuclides() for nuclide in all_nuclides: self.tallies[key].nuclides.append(nuclide) else: From 085d1e6c34d0e32d70053942b2fd3c3af82f51e3 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 25 Mar 2016 20:20:01 -0400 Subject: [PATCH 419/650] Now using MAX_LINE_LEN constant for distribcell offset label length per comments by @smharper --- openmc/filter.py | 2 +- src/output.F90 | 2 +- src/summary.F90 | 26 +++++++++++++------------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/openmc/filter.py b/openmc/filter.py index 2536c3607a..4bc17afca3 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -47,7 +47,7 @@ class Filter(object): filter's bins. distribcell_paths : list of str The paths traversed through the CSG tree to reach each distribcell - instance (for 'distribcell' filters only) + instance (for 'distribcell' filters only) """ diff --git a/src/output.F90 b/src/output.F90 index 125fe010bc..7a083121a4 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -1159,7 +1159,7 @@ contains function get_label(t, i_filter) result(label) type(TallyObject), intent(in) :: t ! tally object integer, intent(in) :: i_filter ! index in filters array - character(100) :: label ! user-specified identifier + character(MAX_LINE_LEN) :: label ! user-specified identifier integer :: i ! index in cells/surfaces/etc array integer :: bin diff --git a/src/summary.F90 b/src/summary.F90 index 2b34ccfb65..a33789c660 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -535,9 +535,9 @@ contains type(RegularMesh), pointer :: m type(TallyObject), pointer :: t - integer :: offset ! distibcell offset - character(100), allocatable :: paths(:) ! array of distribcell paths - character(100) :: path ! temporary distribcell path + integer :: offset ! distibcell offset + character(MAX_LINE_LEN), allocatable :: paths(:) ! distribcell paths array + character(MAX_LINE_LEN) :: path ! distribcell path tallies_group = create_group(file_id, "tallies") @@ -581,25 +581,25 @@ contains ! Write number of filters call write_dataset(tally_group, "n_filters", t%n_filters) - FILTER_LOOP: do j = 1, t%n_filters + FILTER_LOOP: do j = 1, t % n_filters filter_group = create_group(tally_group, "filter " // trim(to_str(j))) ! Write number of bins for this filter - call write_dataset(filter_group, "n_bins", t%filters(j)%n_bins) + call write_dataset(filter_group, "n_bins", t % filters(j) % n_bins) ! Write filter bins - if (t%filters(j)%type == FILTER_ENERGYIN .or. & - t%filters(j)%type == FILTER_ENERGYOUT .or. & - t%filters(j)%type == FILTER_MU .or. & - t%filters(j)%type == FILTER_POLAR .or. & - t%filters(j)%type == FILTER_AZIMUTHAL) then - call write_dataset(filter_group, "bins", t%filters(j)%real_bins) + if (t % filters(j) % type == FILTER_ENERGYIN .or. & + t % filters(j)% type == FILTER_ENERGYOUT .or. & + t % filters(j) % type == FILTER_MU .or. & + t % filters(j) % type == FILTER_POLAR .or. & + t % filters(j) % type == FILTER_AZIMUTHAL) then + call write_dataset(filter_group, "bins", t % filters(j) % real_bins) else - call write_dataset(filter_group, "bins", t%filters(j)%int_bins) + call write_dataset(filter_group, "bins", t % filters(j) % int_bins) end if ! Write paths to reach each distribcell instance - if (t%filters(j)%type == FILTER_DISTRIBCELL) then + if (t % filters(j) % type == FILTER_DISTRIBCELL) then ! Allocate array of strings for each distribcell path allocate(paths(t % filters(j) % n_bins)) From a6ff94551cb844c640d255fa54bb0e47eb9988d8 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sat, 26 Mar 2016 11:12:30 -0400 Subject: [PATCH 420/650] Style fixes --- src/state_point.F90 | 99 ++++++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 47 deletions(-) diff --git a/src/state_point.F90 b/src/state_point.F90 index 6c0e309e2f..d8d796d909 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -133,13 +133,13 @@ contains call write_dataset(file_id, "cmfd_on", 1) cmfd_group = create_group(file_id, "cmfd") - call write_dataset(cmfd_group, "indices", cmfd%indices) - call write_dataset(cmfd_group, "k_cmfd", cmfd%k_cmfd) - call write_dataset(cmfd_group, "cmfd_src", cmfd%cmfd_src) - call write_dataset(cmfd_group, "cmfd_entropy", cmfd%entropy) - call write_dataset(cmfd_group, "cmfd_balance", cmfd%balance) - call write_dataset(cmfd_group, "cmfd_dominance", cmfd%dom) - call write_dataset(cmfd_group, "cmfd_srccmp", cmfd%src_cmp) + call write_dataset(cmfd_group, "indices", cmfd % indices) + call write_dataset(cmfd_group, "k_cmfd", cmfd % k_cmfd) + call write_dataset(cmfd_group, "cmfd_src", cmfd % cmfd_src) + call write_dataset(cmfd_group, "cmfd_entropy", cmfd % entropy) + call write_dataset(cmfd_group, "cmfd_balance", cmfd % balance) + call write_dataset(cmfd_group, "cmfd_dominance", cmfd % dom) + call write_dataset(cmfd_group, "cmfd_srccmp", cmfd % src_cmp) call close_group(cmfd_group) else call write_dataset(file_id, "cmfd_on", 0) @@ -155,18 +155,18 @@ contains if (n_meshes > 0) then ! Print list of mesh IDs - current => mesh_dict%keys() + current => mesh_dict % keys() allocate(id_array(n_meshes)) allocate(key_array(n_meshes)) i = 1 do while (associated(current)) - key_array(i) = current%key - id_array(i) = current%value + key_array(i) = current % key + id_array(i) = current % value ! Move to next mesh - next => current%next + next => current % next deallocate(current) current => next i = i + 1 @@ -180,16 +180,17 @@ contains ! Write information for meshes MESH_LOOP: do i = 1, n_meshes meshp => meshes(id_array(i)) - mesh_group = create_group(meshes_group, "mesh " // trim(to_str(meshp%id))) + mesh_group = create_group(meshes_group, "mesh " & + // trim(to_str(meshp % id))) - select case (meshp%type) + select case (meshp % type) case (MESH_REGULAR) call write_dataset(mesh_group, "type", "regular") end select - call write_dataset(mesh_group, "dimension", meshp%dimension) - call write_dataset(mesh_group, "lower_left", meshp%lower_left) - call write_dataset(mesh_group, "upper_right", meshp%upper_right) - call write_dataset(mesh_group, "width", meshp%width) + call write_dataset(mesh_group, "dimension", meshp % dimension) + call write_dataset(mesh_group, "lower_left", meshp % lower_left) + call write_dataset(mesh_group, "upper_right", meshp % upper_right) + call write_dataset(mesh_group, "width", meshp % width) call close_group(mesh_group) end do MESH_LOOP @@ -211,7 +212,7 @@ contains ! Write all tally information except results do i = 1, n_tallies tally => tallies(i) - key_array(i) = tally%id + key_array(i) = tally % id id_array(i) = i end do @@ -226,9 +227,9 @@ contains ! Get pointer to tally tally => tallies(i) tally_group = create_group(tallies_group, "tally " // & - trim(to_str(tally%id))) + trim(to_str(tally % id))) - select case(tally%estimator) + select case(tally % estimator) case (ESTIMATOR_ANALOG) call write_dataset(tally_group, "estimator", "analog") case (ESTIMATOR_TRACKLENGTH) @@ -236,16 +237,17 @@ contains case (ESTIMATOR_COLLISION) call write_dataset(tally_group, "estimator", "collision") end select - call write_dataset(tally_group, "n_realizations", tally%n_realizations) - call write_dataset(tally_group, "n_filters", tally%n_filters) + call write_dataset(tally_group, "n_realizations", & + tally % n_realizations) + call write_dataset(tally_group, "n_filters", tally % n_filters) ! Write filter information - FILTER_LOOP: do j = 1, tally%n_filters + FILTER_LOOP: do j = 1, tally % n_filters filter_group = create_group(tally_group, "filter " // & trim(to_str(j))) ! Write name of type - select case (tally%filters(j)%type) + select case (tally % filters(j) % type) case(FILTER_UNIVERSE) call write_dataset(filter_group, "type", "universe") case(FILTER_MATERIAL) @@ -274,36 +276,37 @@ contains call write_dataset(filter_group, "type", "delayedgroup") end select - call write_dataset(filter_group, "n_bins", tally%filters(j)%n_bins) + call write_dataset(filter_group, "n_bins", & + tally % filters(j) % n_bins) if (tally % filters(j) % type == FILTER_ENERGYIN .or. & tally % filters(j) % type == FILTER_ENERGYOUT .or. & tally % filters(j) % type == FILTER_MU .or. & tally % filters(j) % type == FILTER_POLAR .or. & tally % filters(j) % type == FILTER_AZIMUTHAL) then call write_dataset(filter_group, "bins", & - tally%filters(j)%real_bins) + tally % filters(j) % real_bins) else call write_dataset(filter_group, "bins", & - tally%filters(j)%int_bins) + tally % filters(j) % int_bins) end if call close_group(filter_group) end do FILTER_LOOP ! Set up nuclide bin array and then write - allocate(str_array(tally%n_nuclide_bins)) - NUCLIDE_LOOP: do j = 1, tally%n_nuclide_bins - if (tally%nuclide_bins(j) > 0) then + allocate(str_array(tally % n_nuclide_bins)) + NUCLIDE_LOOP: do j = 1, tally % n_nuclide_bins + if (tally % nuclide_bins(j) > 0) then ! Get index in cross section listings for this nuclide - i_list = nuclides(tally%nuclide_bins(j))%listing + i_list = nuclides(tally % nuclide_bins(j)) % listing ! Determine position of . in alias string (e.g. "U-235.71c"). If ! no . is found, just use the entire string. - i_xs = index(xs_listings(i_list)%alias, '.') + i_xs = index(xs_listings(i_list) % alias, '.') if (i_xs > 0) then - str_array(j) = xs_listings(i_list)%alias(1:i_xs - 1) + str_array(j) = xs_listings(i_list) % alias(1:i_xs - 1) else - str_array(j) = xs_listings(i_list)%alias + str_array(j) = xs_listings(i_list) % alias end if else str_array(j) = 'total' @@ -312,32 +315,33 @@ contains call write_dataset(tally_group, "nuclides", str_array) deallocate(str_array) - call write_dataset(tally_group, "n_score_bins", tally%n_score_bins) - allocate(str_array(size(tally%score_bins))) - do j = 1, size(tally%score_bins) - str_array(j) = reaction_name(tally%score_bins(j)) + call write_dataset(tally_group, "n_score_bins", tally % n_score_bins) + allocate(str_array(size(tally % score_bins))) + do j = 1, size(tally % score_bins) + str_array(j) = reaction_name(tally % score_bins(j)) end do call write_dataset(tally_group, "score_bins", str_array) - call write_dataset(tally_group, "n_user_score_bins", tally%n_user_score_bins) + call write_dataset(tally_group, "n_user_score_bins", & + tally % n_user_score_bins) deallocate(str_array) ! Write explicit moment order strings for each score bin k = 1 - allocate(str_array(tally%n_score_bins)) - MOMENT_LOOP: do j = 1, tally%n_user_score_bins - select case(tally%score_bins(k)) + allocate(str_array(tally % n_score_bins)) + MOMENT_LOOP: do j = 1, tally % n_user_score_bins + select case(tally % score_bins(k)) case (SCORE_SCATTER_N, SCORE_NU_SCATTER_N) - str_array(k) = 'P' // trim(to_str(tally%moment_order(k))) + str_array(k) = 'P' // trim(to_str(tally % moment_order(k))) k = k + 1 case (SCORE_SCATTER_PN, SCORE_NU_SCATTER_PN) - do n_order = 0, tally%moment_order(k) + do n_order = 0, tally % moment_order(k) str_array(k) = 'P' // trim(to_str(n_order)) k = k + 1 end do case (SCORE_SCATTER_YN, SCORE_NU_SCATTER_YN, SCORE_FLUX_YN, & SCORE_TOTAL_YN) - do n_order = 0, tally%moment_order(k) + do n_order = 0, tally % moment_order(k) do nm_order = -n_order, n_order str_array(k) = 'Y' // trim(to_str(n_order)) // ',' // & trim(to_str(nm_order)) @@ -389,8 +393,9 @@ contains tally => tallies(i) ! Write sum and sum_sq for each bin - tally_group = open_group(tallies_group, "tally " // to_str(tally%id)) - call write_dataset(tally_group, "results", tally%results) + tally_group = open_group(tallies_group, "tally " & + // to_str(tally % id)) + call write_dataset(tally_group, "results", tally % results) call close_group(tally_group) end do TALLY_RESULTS From fa3b28f737b28ca3615a37387e72c565498d1b94 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sat, 26 Mar 2016 13:49:41 -0400 Subject: [PATCH 421/650] Output timing results in statepoint files --- docs/source/usersguide/output/statepoint.rst | 70 +++++++++++++++++++- openmc/statepoint.py | 19 ++++-- src/constants.F90 | 2 +- src/state_point.F90 | 48 +++++++++++--- 4 files changed, 123 insertions(+), 16 deletions(-) diff --git a/docs/source/usersguide/output/statepoint.rst b/docs/source/usersguide/output/statepoint.rst index 2251619653..48313aff3f 100644 --- a/docs/source/usersguide/output/statepoint.rst +++ b/docs/source/usersguide/output/statepoint.rst @@ -4,7 +4,7 @@ State Point File Format ======================= -The current revision of the statepoint file format is 15. +The current revision of the statepoint file format is 16. **/filetype** (*char[]*) @@ -248,7 +248,7 @@ if run_mode == 'k-eigenvalue': Accumulated sum and sum-of-squares for each global tally. The compound type has fields named ``sum`` and ``sum_sq``. -**tallies_present** (*int*) +**/tallies_present** (*int*) Flag indicated if tallies are present in the file. @@ -260,3 +260,69 @@ if (run_mode == 'k-eigenvalue' and source_present > 0) ``wgt``, ``xyz``, ``uvw``, ``E``, ``g``, and ``delayed_group``, which represent the weight, position, direction, energy, energy group, and delayed_group of the source particle, respectively. + +**/runtime/total initialization** (*double*) + + Time (in seconds on the master processor) spent reading inputs, allocating + arrays, etc. + +**/runtime/reading cross sections** (*double*) + + Time (in seconds on the master processor) spent loading cross section + libraries (this is a subset of initialization). + +**/runtime/simulation** (*double*) + + Time (in seconds on the master processor) spent between initialization and + finalization. + +**/runtime/transport** (*double*) + + Time (in seconds on the master processor) spent transporting particles. + +**/runtime/inactive batches** (*double*) + + Time (in seconds on the master processor) spent in the inactive batches + (including non-transport activities like communcating sites). + +**/runtime/active batches** (*double*) + + Time (in seconds on the master processor) spent in the active batches + (including non-transport activities like communcating sites). + +**/runtime/synchronizing fission bank** (*double*) + + Time (in seconds on the master processor) spent sampling source particles + from fission sites and communicating them to other processes for load + balancing. + +**/runtime/sampling source sites** (*double*) + + Time (in seconds on the master processor) spent sampling source particles + from fission sites. + +**/runtime/SEND-RECV source sites** (*double*) + + Time (in seconds on the master processor) spent communicating source sites + between processes for load balancing. + +**/runtime/accumulating tallies** (*double*) + + Time (in seconds on the master processor) spent communicating tally results + and evaluating their statistics. + +**/runtime/CMFD** (*double*) + + Time (in seconds on the master processor) spent evaluating CMFD. + +**/runtime/CMFD building matrices** (*double*) + + Time (in seconds on the master processor) spent buliding CMFD matrices. + +**/runtime/CMFD solving matrices** (*double*) + + Time (in seconds on the master processor) spent solving CMFD matrices. + +**/runtime/total** (*double*) + + Total time spent (in seconds on the master processor) in the program. diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 1644e44ab4..0460192c4c 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -68,6 +68,9 @@ class StatePoint(object): Working directory for simulation run_mode : str Simulation run mode, e.g. 'k-eigenvalue' + runtime : dict + Dictionary whose keys are strings describing various runtime metrics + and whose values are time values in seconds. seed : Integral Pseudorandom number generator seed source : ndarray of compound datatype @@ -101,13 +104,14 @@ class StatePoint(object): raise IOError('{} is not a statepoint file.'.format(filename)) except AttributeError: raise IOError('Could not read statepoint file. This most likely ' - 'means the statepoint file was produced by a different ' - 'version of OpenMC than the one you are using.') - if self._f['revision'].value != 15: + 'means the statepoint file was produced by a ' + 'different version of OpenMC than the one you are ' + 'using.') + if self._f['revision'].value != 16: raise IOError('Statepoint file has a file revision of {} ' 'which is not consistent with the revision this ' 'version of OpenMC expects ({}).'.format( - self._f['revision'].value, 15)) + self._f['revision'].value, 16)) # Set flags for what data has been read self._meshes_read = False @@ -311,6 +315,13 @@ class StatePoint(object): def run_mode(self): return self._f['run_mode'].value.decode() + @property + def runtime(self): + out = dict() + for key in self._f['runtime'].keys(): + out[key] = self._f['runtime/' + key].value + return out + @property def seed(self): return self._f['seed'].value diff --git a/src/constants.F90 b/src/constants.F90 index 8863ca18c4..473d28af63 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -11,7 +11,7 @@ module constants integer, parameter :: VERSION_RELEASE = 1 ! Revision numbers for binary files - integer, parameter :: REVISION_STATEPOINT = 15 + integer, parameter :: REVISION_STATEPOINT = 16 integer, parameter :: REVISION_PARTICLE_RESTART = 1 integer, parameter :: REVISION_TRACK = 1 integer, parameter :: REVISION_SUMMARY = 3 diff --git a/src/state_point.F90 b/src/state_point.F90 index d8d796d909..4348ad3314 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -49,10 +49,8 @@ contains integer, allocatable :: id_array(:) integer, allocatable :: key_array(:) integer(HID_T) :: file_id - integer(HID_T) :: cmfd_group - integer(HID_T) :: tallies_group, tally_group - integer(HID_T) :: meshes_group, mesh_group - integer(HID_T) :: filter_group + integer(HID_T) :: cmfd_group, tallies_group, tally_group, meshes_group, & + mesh_group, filter_group, runtime_group character(20), allocatable :: str_array(:) character(MAX_FILE_LEN) :: filename type(RegularMesh), pointer :: meshp @@ -405,13 +403,45 @@ contains end if call close_group(tallies_group) + + ! Write out the runtime metrics. + runtime_group = create_group(file_id, "runtime") + call write_dataset(runtime_group, "total initialization", & + time_initialize % get_value()) + call write_dataset(runtime_group, "reading cross sections", & + time_read_xs % get_value()) + call write_dataset(runtime_group, "simulation", & + time_inactive % get_value() + time_active % get_value()) + call write_dataset(runtime_group, "transport", & + time_transport % get_value()) + if (run_mode == MODE_EIGENVALUE) then + call write_dataset(runtime_group, "inactive batches", & + time_inactive % get_value()) + end if + call write_dataset(runtime_group, "active batches", & + time_active % get_value()) + if (run_mode == MODE_EIGENVALUE) then + call write_dataset(runtime_group, "synchronizing fission bank", & + time_bank % get_value()) + call write_dataset(runtime_group, "sampling source sites", & + time_bank_sample % get_value()) + call write_dataset(runtime_group, "SEND-RECV source sites", & + time_bank_sendrecv % get_value()) + end if + call write_dataset(runtime_group, "accumulating tallies", & + time_tallies % get_value()) + if (cmfd_run) then + call write_dataset(runtime_group, "CMFD", time_cmfd % get_value()) + call write_dataset(runtime_group, "CMFD building matrices", & + time_cmfdbuild % get_value()) + call write_dataset(runtime_group, "CMFD solving matrices", & + time_cmfdsolve % get_value()) + end if + call write_dataset(runtime_group, "total", time_total % get_value()) + call close_group(runtime_group) + call file_close(file_id) end if - - if (master .and. n_tallies > 0) then - deallocate(id_array) - end if - end subroutine write_state_point !=============================================================================== From 19250b7d23ca34ea81e4ddb8dabdc741aaa64808 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sat, 26 Mar 2016 13:50:58 -0400 Subject: [PATCH 422/650] Remove orphaned 'write_timing' subroutine --- src/summary.F90 | 59 ------------------------------------------------- 1 file changed, 59 deletions(-) diff --git a/src/summary.F90 b/src/summary.F90 index b33546e661..35c62ae039 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -717,63 +717,4 @@ contains end subroutine write_tallies -!=============================================================================== -! WRITE_TIMING -!=============================================================================== - - subroutine write_timing(file_id) - integer(HID_T), intent(in) :: file_id - - integer(8) :: total_particles - integer(HID_T) :: time_group - real(8) :: speed - - time_group = create_group(file_id, "timing") - - ! Write timing data - call write_dataset(time_group, "time_initialize", time_initialize%elapsed) - call write_dataset(time_group, "time_read_xs", time_read_xs%elapsed) - call write_dataset(time_group, "time_transport", time_transport%elapsed) - call write_dataset(time_group, "time_bank", time_bank%elapsed) - call write_dataset(time_group, "time_bank_sample", time_bank_sample%elapsed) - call write_dataset(time_group, "time_bank_sendrecv", time_bank_sendrecv%elapsed) - call write_dataset(time_group, "time_tallies", time_tallies%elapsed) - call write_dataset(time_group, "time_inactive", time_inactive%elapsed) - call write_dataset(time_group, "time_active", time_active%elapsed) - call write_dataset(time_group, "time_finalize", time_finalize%elapsed) - call write_dataset(time_group, "time_total", time_total%elapsed) - - ! Add descriptions to timing data - call write_attribute_string(time_group, "time_initialize", "description", & - "Total time elapsed for initialization (s)") - call write_attribute_string(time_group, "time_read_xs", "description", & - "Time reading cross-section libraries (s)") - call write_attribute_string(time_group, "time_transport", "description", & - "Time in transport only (s)") - call write_attribute_string(time_group, "time_bank", "description", & - "Total time synchronizing fission bank (s)") - call write_attribute_string(time_group, "time_bank_sample", "description", & - "Time between generations sampling source sites (s)") - call write_attribute_string(time_group, "time_bank_sendrecv", "description", & - "Time between generations SEND/RECVing source sites (s)") - call write_attribute_string(time_group, "time_tallies", "description", & - "Time between batches accumulating tallies (s)") - call write_attribute_string(time_group, "time_inactive", "description", & - "Total time in inactive batches (s)") - call write_attribute_string(time_group, "time_active", "description", & - "Total time in active batches (s)") - call write_attribute_string(time_group, "time_finalize", "description", & - "Total time for finalization (s)") - call write_attribute_string(time_group, "time_total", "description", & - "Total time elapsed (s)") - - ! Write calculation rate - total_particles = n_particles * n_batches * gen_per_batch - speed = real(total_particles) / (time_inactive%elapsed + & - time_active%elapsed) - call write_dataset(time_group, "neutrons_per_second", speed) - - call close_group(time_group) - end subroutine write_timing - end module summary From c5c52e31356f7367759cf01d5c6228e5236b1f35 Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Sat, 26 Mar 2016 13:57:50 -0400 Subject: [PATCH 423/650] Added distribcell paths to summary.rst --- docs/source/usersguide/output/summary.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/source/usersguide/output/summary.rst b/docs/source/usersguide/output/summary.rst index 83602e5065..8901e42e74 100644 --- a/docs/source/usersguide/output/summary.rst +++ b/docs/source/usersguide/output/summary.rst @@ -293,6 +293,13 @@ The current revision of the summary file format is 1. Filter offset (used for distribcell filter). +**/tallies/tally /filter /paths** (*char[][]*) + + The paths traversed through the CSG tree to reach each distribcell + instance (for 'distribcell' filters only). This consists of the integer + IDs for each universe, cell and lattice delimited by '->'. Each lattice + cell is specified by its (x,y) or (x,y,z) indices. + **/tallies/tally /filter /n_bins** (*int*) Number of bins for the j-th filter. From 2588b028194bcdad08d85462f419b13b7fb3e2f4 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Mon, 28 Mar 2016 14:25:11 -0400 Subject: [PATCH 424/650] Address PR comments for #620 --- docs/source/usersguide/output/statepoint.rst | 32 ++++++++++---------- openmc/statepoint.py | 10 +++--- src/constants.F90 | 2 +- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/docs/source/usersguide/output/statepoint.rst b/docs/source/usersguide/output/statepoint.rst index 48313aff3f..95a3d842c2 100644 --- a/docs/source/usersguide/output/statepoint.rst +++ b/docs/source/usersguide/output/statepoint.rst @@ -4,7 +4,7 @@ State Point File Format ======================= -The current revision of the statepoint file format is 16. +The current revision of the statepoint file format is 15. **/filetype** (*char[]*) @@ -263,66 +263,66 @@ if (run_mode == 'k-eigenvalue' and source_present > 0) **/runtime/total initialization** (*double*) - Time (in seconds on the master processor) spent reading inputs, allocating + Time (in seconds on the master process) spent reading inputs, allocating arrays, etc. **/runtime/reading cross sections** (*double*) - Time (in seconds on the master processor) spent loading cross section + Time (in seconds on the master process) spent loading cross section libraries (this is a subset of initialization). **/runtime/simulation** (*double*) - Time (in seconds on the master processor) spent between initialization and + Time (in seconds on the master process) spent between initialization and finalization. **/runtime/transport** (*double*) - Time (in seconds on the master processor) spent transporting particles. + Time (in seconds on the master process) spent transporting particles. **/runtime/inactive batches** (*double*) - Time (in seconds on the master processor) spent in the inactive batches + Time (in seconds on the master process) spent in the inactive batches (including non-transport activities like communcating sites). **/runtime/active batches** (*double*) - Time (in seconds on the master processor) spent in the active batches - (including non-transport activities like communcating sites). + Time (in seconds on the master process) spent in the active batches + (including non-transport activities like communicating sites). **/runtime/synchronizing fission bank** (*double*) - Time (in seconds on the master processor) spent sampling source particles + Time (in seconds on the master process) spent sampling source particles from fission sites and communicating them to other processes for load balancing. **/runtime/sampling source sites** (*double*) - Time (in seconds on the master processor) spent sampling source particles + Time (in seconds on the master process) spent sampling source particles from fission sites. **/runtime/SEND-RECV source sites** (*double*) - Time (in seconds on the master processor) spent communicating source sites + Time (in seconds on the master process) spent communicating source sites between processes for load balancing. **/runtime/accumulating tallies** (*double*) - Time (in seconds on the master processor) spent communicating tally results + Time (in seconds on the master process) spent communicating tally results and evaluating their statistics. **/runtime/CMFD** (*double*) - Time (in seconds on the master processor) spent evaluating CMFD. + Time (in seconds on the master process) spent evaluating CMFD. **/runtime/CMFD building matrices** (*double*) - Time (in seconds on the master processor) spent buliding CMFD matrices. + Time (in seconds on the master process) spent buliding CMFD matrices. **/runtime/CMFD solving matrices** (*double*) - Time (in seconds on the master processor) spent solving CMFD matrices. + Time (in seconds on the master process) spent solving CMFD matrices. **/runtime/total** (*double*) - Total time spent (in seconds on the master processor) in the program. + Total time spent (in seconds on the master process) in the program. diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 0460192c4c..693400ad6c 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -107,11 +107,11 @@ class StatePoint(object): 'means the statepoint file was produced by a ' 'different version of OpenMC than the one you are ' 'using.') - if self._f['revision'].value != 16: + if self._f['revision'].value != 15: raise IOError('Statepoint file has a file revision of {} ' 'which is not consistent with the revision this ' 'version of OpenMC expects ({}).'.format( - self._f['revision'].value, 16)) + self._f['revision'].value, 15)) # Set flags for what data has been read self._meshes_read = False @@ -317,10 +317,8 @@ class StatePoint(object): @property def runtime(self): - out = dict() - for key in self._f['runtime'].keys(): - out[key] = self._f['runtime/' + key].value - return out + return {name: dataset.value + for name, dataset in self._f['runtime'].items()} @property def seed(self): diff --git a/src/constants.F90 b/src/constants.F90 index 473d28af63..8863ca18c4 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -11,7 +11,7 @@ module constants integer, parameter :: VERSION_RELEASE = 1 ! Revision numbers for binary files - integer, parameter :: REVISION_STATEPOINT = 16 + integer, parameter :: REVISION_STATEPOINT = 15 integer, parameter :: REVISION_PARTICLE_RESTART = 1 integer, parameter :: REVISION_TRACK = 1 integer, parameter :: REVISION_SUMMARY = 3 From f90c46d2f3c75fa777ed935cdef35e0edc66d75d Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Mon, 28 Mar 2016 17:30:19 -0400 Subject: [PATCH 425/650] Cleaned up docstring for nuclides attribute of MGXS class for @paulromano --- openmc/mgxs/mgxs.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index edc345e870..2b05bc7095 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -67,10 +67,6 @@ class MGXS(object): The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain - nuclides : Iterable of basestring - The user-specified nuclides to compute cross sections. If by_nuclide - is True but nuclides are not specified by the user, all nuclides in the - spatial domain will be used. name : str, optional Name of the multi-group cross section. Used as a label to identify tallies in OpenMC 'tallies.xml' file. @@ -109,9 +105,11 @@ class MGXS(object): num_nuclides : Integral The number of nuclides for which the multi-group cross section is being tracked. This is unity if the by_nuclide attribute is False. - nuclides : list of str or 'sum' - A list of nuclide string names (e.g., 'U-238', 'O-16') when by_nuclide - is True and 'sum' when by_nuclide is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. sparse : bool Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format for compressed data storage From 174c81dd457f16cfc895cce3895c036d7b67a314 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Wed, 30 Mar 2016 13:52:25 -0400 Subject: [PATCH 426/650] Use GitHub based multipole library --- .travis.yml | 4 ++-- data/get_multipole_data.py | 35 ++++++++++++++++++++--------------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/.travis.yml b/.travis.yml index df11c1e3c7..6a6100b54e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,8 +45,8 @@ before_script: - cat nndc_xs/nndc.tar.gza* | tar xzvf - - rm -rf nndc_xs - export OPENMC_CROSS_SECTIONS=$PWD/nndc/cross_sections.xml - - wget http://web.mit.edu/smharper/Public/multipole_lib.tar.gz - - tar -xzf multipole_lib.tar.gz + - git clone --branch=master git://github.com/smharper/windowed_multipole_library.git wmp_lib + - tar xzvf wmp_lib/multipole_lib.tar.gz - export OPENMC_MULTIPOLE_LIBRARY=$PWD/multipole_lib - cd .. diff --git a/data/get_multipole_data.py b/data/get_multipole_data.py index cb87865a82..b5126bc0a4 100755 --- a/data/get_multipole_data.py +++ b/data/get_multipole_data.py @@ -23,13 +23,13 @@ except ImportError: cwd = os.getcwd() sys.path.insert(0, os.path.join(cwd, '..')) -baseUrl = 'http://web.mit.edu/smharper/Public/' -files = ['multipole_lib.tar.gz'] +baseUrl = 'https://github.com/smharper/windowed_multipole_library/blob/master/' +files = ['multipole_lib.tar.gz?raw=true'] checksums = ['9f0307132fe5beca78b8fc7a01fb401c'] block_size = 16384 # ============================================================================== -# DOWNLOAD FILES FROM ATHENA LOCKER +# DOWNLOAD FILES FROM GITHUB REPO filesComplete = [] for f in files: @@ -44,23 +44,26 @@ for f in files: file_size = req.length downloaded = 0 + # Remove GitHub junk from the file name. + fname = f[:-9] if f.endswith('?raw=true') else f + # Check if file already downloaded - if os.path.exists(f): - if os.path.getsize(f) == file_size: - print('Skipping ' + f) - filesComplete.append(f) + if os.path.exists(fname): + if os.path.getsize(fname) == file_size: + print('Skipping ' + fname) + filesComplete.append(fname) continue else: if sys.version_info[0] < 3: - overwrite = raw_input('Overwrite {0}? ([y]/n) '.format(f)) + overwrite = raw_input('Overwrite {0}? ([y]/n) '.format(fname)) else: - overwrite = input('Overwrite {0}? ([y]/n) '.format(f)) + overwrite = input('Overwrite {0}? ([y]/n) '.format(fname)) if overwrite.lower().startswith('n'): continue # Copy file to disk print('Downloading {0}... '.format(f), end='') - with open(f, 'wb') as fh: + with open(fname, 'wb') as fh: while True: chunk = req.read(block_size) if not chunk: break @@ -69,14 +72,15 @@ for f in files: status = '{0:10} [{1:3.2f}%]'.format(downloaded, downloaded * 100. / file_size) print(status + chr(8)*len(status), end='') print('') - filesComplete.append(f) + filesComplete.append(fname) # ============================================================================== # VERIFY MD5 CHECKSUMS print('Verifying MD5 checksums...') for f, checksum in zip(files, checksums): - downloadsum = hashlib.md5(open(f, 'rb').read()).hexdigest() + fname = f[:-9] if f.endswith('?raw=true') else f + downloadsum = hashlib.md5(open(fname, 'rb').read()).hexdigest() if downloadsum != checksum: raise IOError("MD5 checksum for {} does not match. If this is your first " "time receiving this message, please re-run the script. " @@ -87,12 +91,13 @@ for f, checksum in zip(files, checksums): # EXTRACT FILES FROM TGZ for f in files: - if not f in filesComplete: + fname = f[:-9] if f.endswith('?raw=true') else f + if not fname in filesComplete: continue # Extract files - with tarfile.open(f, 'r') as tgz: - print('Extracting {0}...'.format(f)) + with tarfile.open(fname, 'r') as tgz: + print('Extracting {0}...'.format(fname)) tgz.extractall(path='wmp/') # Move data files down one level From e605ac43b2fdeba2ef42035144051518b1a3a3e3 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Wed, 30 Mar 2016 14:50:17 -0400 Subject: [PATCH 427/650] Address PR #618 comments --- docs/source/usersguide/input.rst | 2 +- openmc/universe.py | 2 +- src/ace.F90 | 26 ++++++++--- src/input_xml.F90 | 7 ++- src/multipole.F90 | 46 +++++++++++--------- tests/test_filter_distribcell/case-1/test.py | 7 +++ tests/test_multipole/test_multipole.py | 16 ++++--- 7 files changed, 69 insertions(+), 37 deletions(-) create mode 100644 tests/test_filter_distribcell/case-1/test.py diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index ace77a3954..324fbfc2db 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -290,7 +290,7 @@ OpenMC can use it for on-the-fly Doppler-broadening of resolved resonance range cross sections. If this element is absent from the settings.xml file, the :envvar:`OPENMC_MULTIPOLE_LIBRARY` environment variable will be used. - .. note:: The element must also be set to "True" + .. note:: The element must also be set to "true" for windowed multipole functionality. ```` Element diff --git a/openmc/universe.py b/openmc/universe.py index 09baba7c9c..112346c198 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -475,7 +475,7 @@ class Cell(object): if self.temperature is not None: if isinstance(self.temperature, Iterable): element.set("temperature", ' '.join( - [str(t) for t in self.temperature])) + str(t) for t in self.temperature)) else: element.set("temperature", str(self.temperature)) diff --git a/src/ace.F90 b/src/ace.F90 index 48220ffeb0..e3e6161a67 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -56,6 +56,7 @@ contains integer :: temp_table ! temporary value for sorting character(12) :: name ! name of isotope, e.g. 92235.03c character(12) :: alias ! alias of nuclide, e.g. U-235.03c + logical :: mp_found ! if windowed multipole libraries were found type(Material), pointer :: mat type(NuclideCE), pointer :: nuc type(SAlphaBeta), pointer :: sab @@ -239,6 +240,21 @@ contains end if end do + ! If the user wants multipole, make sure we found a multipole library. + if (multipole_active) then + mp_found = .false. + do i = 1, n_nuclides_total + if (nuclides(i) % mp_present) then + mp_found = .true. + exit + end if + end do + if (.not. mp_found) call warning("Windowed multipole functionality is & + &turned on, but no multipole libraries were found. Set the & + & element in settings.xml or the & + &OPENMC_MULTIPOLE_LIBRARY environment variable.") + end if + end subroutine read_ace_xs !=============================================================================== @@ -429,12 +445,12 @@ contains subroutine read_multipole_data(i_table) - integer, intent(in) :: i_table ! index in nuclides/sab_tables + integer, intent(in) :: i_table ! index in nuclides/sab_tables - logical :: file_exists ! does multipole library exist? - character(7) :: readable ! is multipole library readable? - character(6) :: zaid_string ! String of the ZAID - character(MAX_FILE_LEN+9) :: filename ! path to multipole xs library + logical :: file_exists ! Does multipole library exist? + character(7) :: readable ! Is multipole library readable? + character(6) :: zaid_string ! String of the ZAID + character(MAX_FILE_LEN+9) :: filename ! Path to multipole xs library ! For the time being, and I know this is a bit hacky, we just assume ! that the file will be zaid.h5. diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 1f5b0d3e84..1ce5ceb876 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -167,8 +167,7 @@ contains ! Find the windowed multipole library if (run_mode /= MODE_PLOTTING) then - if (.not. check_for_node(doc, "multipole_library") .and. & - run_mode /= MODE_PLOTTING) then + if (.not. check_for_node(doc, "multipole_library")) then ! No library location specified in settings.xml, check ! environment variable call get_environment_variable("OPENMC_MULTIPOLE_LIBRARY", env_variable) @@ -1109,9 +1108,9 @@ contains if (check_for_node(doc, "use_windowed_multipole")) then call get_node_value(doc, "use_windowed_multipole", temp_str) select case (to_lower(temp_str)) - case ('true', 't', '1', 'y') + case ('true', '1') multipole_active = .true. - case ('false', 'f', '0', 'n') + case ('false', '0') multipole_active = .false. case default call fatal_error("Unrecognized value for in & diff --git a/src/multipole.F90 b/src/multipole.F90 index da57c96a29..612e03d7a0 100644 --- a/src/multipole.F90 +++ b/src/multipole.F90 @@ -32,7 +32,6 @@ contains integer :: i, j integer, allocatable :: MT(:) logical :: accumulated_fission - character(len=3) :: MT_string character(len=24) :: MT_n ! Takes the form '/nuclide/reactions/MT???' integer :: is_fissionable @@ -91,13 +90,13 @@ contains allocate(nuc % nu_fission(nuc % n_grid)) allocate(nuc % absorption(nuc % n_grid)) - nuc % total = ZERO - nuc % absorption = ZERO - nuc % fission = ZERO + nuc % total(:) = ZERO + nuc % absorption(:) = ZERO + nuc % fission(:) = ZERO ! Read in new energy axis (converting eV to MeV) call read_dataset(group_id, "energy_points", nuc % energy) - nuc % energy = nuc % energy / 1.0D6 + nuc % energy = nuc % energy / 1.0e6_8 ! Get count and list of MT tables call read_dataset(group_id, "MT_count", NMT) @@ -111,8 +110,7 @@ contains ! Loop over each MT entry and load it into a reaction. do i = 1, NMT - write(MT_string, '(I3.3)') MT(i) - MT_n = "/nuclide/reactions/MT" // MT_string + write(MT_n, '(A, I3.3)') '/nuclide/reactions/MT', MT(i) group_id = open_group(file_id, MT_n) @@ -120,11 +118,11 @@ contains select case (MT(i)) case(ELASTIC) call read_dataset(group_id, "MT_sigma", nuc % elastic) - nuc % total = nuc % total + nuc % elastic + nuc % total(:) = nuc % total + nuc % elastic case(N_FISSION) call read_dataset(group_id, "MT_sigma", nuc % fission) - nuc % total = nuc % total + nuc % fission - nuc % absorption = nuc % absorption + nuc % fission + nuc % total(:) = nuc % total + nuc % fission + nuc % absorption(:) = nuc % absorption + nuc % fission accumulated_fission = .true. case default ! Search through all of our secondary reactions @@ -136,36 +134,42 @@ contains ! fission cross section. if ( (MT(i) == N_F .or. MT(i) == N_NF .or. MT(i) == N_2NF & .or. MT(i) == N_3NF) .and. accumulated_fission) then - nuc % total = nuc % total - nuc % fission - nuc % absorption = nuc % absorption - nuc % fission - nuc % fission = 0.0_8 + nuc % total(:) = nuc % total - nuc % fission + nuc % absorption(:) = nuc % absorption - nuc % fission + nuc % fission(:) = ZERO accumulated_fission = .false. end if deallocate(nuc % reactions(j) % sigma) allocate(nuc % reactions(j) % sigma(nuc % n_grid)) - call read_dataset(group_id, "MT_sigma", nuc % reactions(j) % sigma) - call read_dataset(group_id, "Q_value", nuc % reactions(j) % Q_value) - call read_dataset(group_id, "threshold", nuc % reactions(j) % threshold) + call read_dataset(group_id, "MT_sigma", & + nuc % reactions(j) % sigma) + call read_dataset(group_id, "Q_value", & + nuc % reactions(j) % Q_value) + call read_dataset(group_id, "threshold", & + nuc % reactions(j) % threshold) nuc % reactions(j) % threshold = 1 ! TODO: reconsider implications. - nuc % reactions(j) % Q_value = nuc % reactions(j) % Q_value / 1.0D6 + nuc % reactions(j) % Q_value = nuc % reactions(j) % Q_value & + / 1.0e6_8 ! Accumulate total if (MT(i) /= N_LEVEL .and. MT(i) <= N_DA) then - nuc % total = nuc % total + nuc % reactions(j) % sigma + nuc % total(:) = nuc % total + nuc % reactions(j) % sigma end if ! Accumulate absorption if (MT(i) >= N_GAMMA .and. MT(i) <= N_DA) then - nuc % absorption = nuc % absorption + nuc % reactions(j) % sigma + nuc % absorption(:) = nuc % absorption & + + nuc % reactions(j) % sigma end if ! Accumulate fission (if needed) if ( (MT(i) == N_F .or. MT(i) == N_NF .or. MT(i) == N_2NF & .or. MT(i) == N_3NF) ) then - nuc % fission = nuc % fission + nuc % reactions(j) % sigma - nuc % absorption = nuc % absorption + nuc % reactions(j) % sigma + nuc % fission(:) = nuc % fission + nuc % reactions(j) % sigma + nuc % absorption(:) = nuc % absorption & + + nuc % reactions(j) % sigma end if end if end do diff --git a/tests/test_filter_distribcell/case-1/test.py b/tests/test_filter_distribcell/case-1/test.py new file mode 100644 index 0000000000..a71516d5f6 --- /dev/null +++ b/tests/test_filter_distribcell/case-1/test.py @@ -0,0 +1,7 @@ +import openmc + + +su = openmc.Summary('summary.h5') +sp = openmc.StatePoint('statepoint.1.h5') +sp.link_with_summary(su) +print(sp.tallies[1].get_pandas_dataframe(summary=su)) diff --git a/tests/test_multipole/test_multipole.py b/tests/test_multipole/test_multipole.py index ea3108557f..f1deb92cb5 100644 --- a/tests/test_multipole/test_multipole.py +++ b/tests/test_multipole/test_multipole.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - import os import sys sys.path.insert(0, os.pardir) @@ -9,7 +8,7 @@ from openmc.stats import Box from openmc.source import Source -class DistribmatTestHarness(PyAPITestHarness): +class MultipoleTestHarness(PyAPITestHarness): def _build_inputs(self): #################### # Materials @@ -116,8 +115,15 @@ class DistribmatTestHarness(PyAPITestHarness): plots_file.export_to_xml() + def execute_test(self): + if not 'OPENMC_MULTIPOLE_LIBRARY' in os.environ: + raise RuntimeError("The 'OPENMC_MULTIPOLE_LIBRARY' environment " + "variable must be specified for this test.") + else: + super(MultipoleTestHarness, self).execute_test() + def _get_results(self): - outstr = super(DistribmatTestHarness, self)._get_results() + outstr = super(MultipoleTestHarness, self)._get_results() su = openmc.Summary('summary.h5') outstr += str(su.get_cell_by_id(11)) return outstr @@ -126,9 +132,9 @@ class DistribmatTestHarness(PyAPITestHarness): f = os.path.join(os.getcwd(), 'plots.xml') if os.path.exists(f): os.remove(f) - super(DistribmatTestHarness, self)._cleanup() + super(MultipoleTestHarness, self)._cleanup() if __name__ == '__main__': - harness = DistribmatTestHarness('statepoint.5.*') + harness = MultipoleTestHarness('statepoint.5.*') harness.main() From aaaed9e27808dc8830885e3cd75d065c887c4295 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Wed, 30 Mar 2016 16:36:09 -0600 Subject: [PATCH 428/650] Quick fix for nuclide density lookups for MGXS --- openmc/mgxs/mgxs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 2b05bc7095..7fcc0600a1 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -439,7 +439,7 @@ class MGXS(object): cv.check_type('nuclide', nuclide, basestring) # Get list of all nuclides in the spatial domain - nuclides = self.get_all_nuclides() + nuclides = self.domain.get_all_nuclides() if nuclide not in nuclides: msg = 'Unable to get density for nuclide "{0}" which is not in ' \ From bfd6c808fef70b3b38210bef60135c7c4d553279 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sun, 3 Apr 2016 12:53:42 -0400 Subject: [PATCH 429/650] Add some WMP theory documentation --- docs/source/methods/cross_sections.rst | 55 ++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/docs/source/methods/cross_sections.rst b/docs/source/methods/cross_sections.rst index 5126252cd7..24bf9dab0d 100644 --- a/docs/source/methods/cross_sections.rst +++ b/docs/source/methods/cross_sections.rst @@ -63,6 +63,53 @@ Other Methods A good survey of other energy grid techniques, including unionized energy grids, can be found in a paper by Leppanen_. +--------------------------------- +Windowed Multipole Representation +--------------------------------- + +In addition to the usual pointwise representation of cross sections, OpenMC +offers support for an experimental data format called windowed multipole (WMP). +This data format requires less memory than pointwise cross sections, and it +allows on-the-fly Doppler broadening to arbitrary temperature. + +The multipole method was introduced by [Hwang]_ and the faster windowed +multipole method by [Josey]_. In the multipole format, cross section resonances +are represented by poles, `p_j`, and residues, `r_j`, in the complex plane. The +0 K cross sections in the resolved resonance region can be computed by summing +up a contribution from each pole: + +.. math:: + \sigma(E, T=0\text{K}) = \frac{1}{E} \sum_j \text{Re} \left[ + \frac{i r_j}{\sqrt{E} - p_j} \right] + +Assuming free-gas thermal motion, cross sections in the multipole form can be +analytically Doppler broadened to give (after some approximation) the form: + +.. math:: + \sigma(E, T) = \frac{1}{2 E \sqrt{\xi}} \sum_j \text{Re} \left[i r_j + \sqrt{\pi} W(z) \right] +.. math:: + z = \frac{\sqrt{E} - p_j}{2 \sqrt{\xi}} +.. math:: + \xi = \frac{k_B T}{4 A} + +where `T` is the temperature of the resonant scatterer, `k_B` is the Boltzmann +constant, `A` is the mass of the target nucleus, and `W` is the Faddeeva +function. + +.. math:: + W(z) = e^{-z^2} \text{erfc}(-iz) + +It is prohibitively expensive to evaluate a Faddeeva function for all of the +poles every time a cross section lookup is performed in Monte Carlo. To +mitigate that computational cost, the WMP method only evaluates poles within a +certain energy "window" around the incident neutron energy and accounts for the +effect of resonances outside that window with a polynomial fit. + +Note that the implementation of WMP in OpenMC assumes that inelastic scattering +does not occur in the resolved resonance region. + + .. only:: html .. rubric:: References @@ -70,6 +117,14 @@ can be found in a paper by Leppanen_. .. [Brown] Forrest B. Brown, "New Hash-based Energy Lookup Algorithm for Monte Carlo codes," LA-UR-14-24530, Los Alamos National Laboratory (2014). +.. [Hwang] R. N. Hwag, "A Rigorous Pole Representation of Multilevel Cross + Sections and Its Practical Application," *Nucl. Sci. Eng.*, **96**, + 192-209 (1987). + +.. [Josey] Colin Josey, Pablo Ducru, Benoit Forget, and Kord Smith, "Windowed + Multipole for Cross Section Doppler Broadening," *J. Comp. Phys*, + **307**, 715-727 (2016). http://dx.doi.org/10.1016/j.jcp.2015.08.013 + .. _MCNP: http://mcnp.lanl.gov .. _Serpent: http://montecarlo.vtt.fi .. _NJOY: http://t2.lanl.gov/codes.shtml From e29da0cf5bff358f960a557a7fbf27bc0fd45151 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sun, 3 Apr 2016 13:35:08 -0400 Subject: [PATCH 430/650] Remove some multipole global variables --- src/ace.F90 | 14 ----- src/cross_section.F90 | 54 +++++--------------- src/math.F90 | 2 + src/multipole.F90 | 4 +- src/multipole_header.F90 | 6 --- tests/test_filter_distribcell/case-1/test.py | 7 --- 6 files changed, 18 insertions(+), 69 deletions(-) delete mode 100644 tests/test_filter_distribcell/case-1/test.py diff --git a/src/ace.F90 b/src/ace.F90 index e3e6161a67..76656b9fde 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -12,7 +12,6 @@ module ace use list_header, only: ListInt use material_header, only: Material use multipole, only: multipole_read - use multipole_header, only: max_L, max_poles, max_poly use nuclide_header use output, only: write_message use product_header, only: ReactionProduct @@ -478,19 +477,6 @@ contains call multipole_read(filename, nuc % multipole, i_table) nuc % mp_present = .true. - ! Update the maximum number of poles, l indices, and polynomial order - if (nuc % multipole % max_w > max_poles) then - max_poles = nuc % multipole % max_w - end if - - if (nuc % multipole % num_l > max_L) then - max_L = nuc % multipole % num_l - end if - - if (nuc % multipole % fit_order + 1 > max_poly) then - max_poly = nuc % multipole % fit_order + 1 - end if - ! Recreate nu-fission tables if (nuc % fissionable) then call generate_nu_fission(nuc) diff --git a/src/cross_section.F90 b/src/cross_section.F90 index 930d1a0529..68140beb14 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -9,7 +9,7 @@ module cross_section use math, only: faddeeva, broaden_wmp_polynomials use multipole_header, only: FORM_RM, FORM_MLBW, MP_EA, RM_RT, RM_RA, RM_RF, & MLBW_RT, MLBW_RX, MLBW_RA, MLBW_RF, FIT_T, FIT_A,& - FIT_F, MultipoleArray, max_poly, max_L, max_poles + FIT_F, MultipoleArray use nuclide_header use particle_header, only: Particle use random_lcg, only: prn, future_prn, prn_set_stream @@ -18,14 +18,6 @@ module cross_section implicit none - ! Allocatable arrays for multipole that are allocated once for speed purposes - complex(8), allocatable :: sigT_factor(:) - real(8), allocatable :: twophi(:) - real(8), allocatable :: broadened_polynomials(:) - logical :: mp_already_alloc = .false. - -!$omp threadprivate(sigT_factor, twophi, broadened_polynomials, mp_already_alloc) - contains !=============================================================================== @@ -558,19 +550,6 @@ contains end function find_energy_index -!=============================================================================== -! MULTIPOLE_EVAL_ALLOCATE allocates fixed-length arrays that vary based on -! what nuclides are loaded into the problem -!=============================================================================== - - subroutine multipole_eval_allocate() - allocate(sigT_factor(max_L)) - allocate(twophi(max_L)) - allocate(broadened_polynomials(max_poly)) - - mp_already_alloc = .true. - end subroutine - !=============================================================================== ! MULTIPOLE_EVAL evaluates the windowed multipole equations for cross ! sections in the resolved resonance regions @@ -593,6 +572,8 @@ contains complex(8) :: c_temp ! complex temporary variable complex(8) :: w_val ! The faddeeva function evaluated at Z complex(8) :: Z ! sqrt(atomic weight ratio / kT) * (sqrt(E) - pole) + complex(8) :: sigT_factor(multipole % num_l) + real(8) :: broadened_polynomials(multipole % fit_order + 1) real(8) :: sqrtE ! sqrt(E), eV real(8) :: invE ! 1/E, eV real(8) :: dopp ! sqrt(atomic weight ratio / kT) = 1 / (2 sqrt(xi)) @@ -617,10 +598,6 @@ contains invE = ONE / E dopp = multipole % sqrtAWR / sqrtkT - if (.not. mp_already_alloc) then - call multipole_eval_allocate() - end if - ! Locate us. i_window = floor((sqrtE - sqrt(multipole % start_E)) / multipole % spacing & + ONE) @@ -629,8 +606,7 @@ contains ! Fill in factors. if (startw <= endw) then - call fill_factors(multipole, sqrtE, sigT_factor, twophi, & - multipole % num_l) + call compute_sigT_factor(multipole, sqrtE, sigT_factor) end if ! Initialize the ouptut cross sections. @@ -705,25 +681,23 @@ contains end do end if end if - end subroutine + end subroutine multipole_eval !=============================================================================== -! FILL_FACTORS calculates the value of phi, the hardsphere phase shift factor, -! and sigT_factor, a factor inside of the sigT equation not present in the -! sigA and sigF equations. +! COMPUTE_SIGT_FACTOR calculates the sigT_factor, a factor inside of the sigT +! equation not present in the sigA and sigF equations. !=============================================================================== - subroutine fill_factors(multipole, sqrtE, sigT_factor, twophi, max_L) - type(MultipoleArray), intent(in) :: multipole - real(8), intent(in) :: sqrtE - integer, intent(in) :: max_L - complex(8), intent(out) :: sigT_factor(max_L) - real(8), intent(out) :: twophi(max_L) + subroutine compute_sigT_factor(multipole, sqrtE, sigT_factor) + type(MultipoleArray), intent(in) :: multipole + real(8), intent(in) :: sqrtE + complex(8), intent(out) :: sigT_factor(multipole % num_l) integer :: iL + real(8) :: twophi(multipole % num_l) real(8) :: arg - do iL = 1, max_L + do iL = 1, multipole % num_l twophi(iL) = multipole % pseudo_k0RS(iL) * sqrtE if (iL == 2) then twophi(iL) = twophi(iL) - atan(twophi(iL)) @@ -739,7 +713,7 @@ contains twophi = 2.0_8 * twophi sigT_factor = cmplx(cos(twophi), -sin(twophi), KIND=8) - end subroutine + end subroutine compute_sigT_factor !=============================================================================== ! 0K_ELASTIC_XS determines the microscopic 0K elastic cross section diff --git a/src/math.F90 b/src/math.F90 index fce57e6fc2..5c486e38f0 100644 --- a/src/math.F90 +++ b/src/math.F90 @@ -741,6 +741,8 @@ contains ! For imag(z) > 0, w_int(z) = w_fun(z) ! For imag(z) < 0, w_int(z) = -conjg(w_fun(conjg(z))) + ! Note that faddeeva_w will interpret zero as machine epsilon + relerr = ZERO if (aimag(z) > ZERO) then wv = faddeeva_w(z, relerr) diff --git a/src/multipole.F90 b/src/multipole.F90 index 612e03d7a0..cb83d85d19 100644 --- a/src/multipole.F90 +++ b/src/multipole.F90 @@ -4,8 +4,8 @@ module multipole use global use hdf5 use hdf5_interface - use multipole_header, only: MultipoleArray, FIT_T, FIT_A, FIT_F, max_L, & - max_poles, max_poly, MP_FISS, FORM_MLBW, FORM_RM + use multipole_header, only: MultipoleArray, FIT_T, FIT_A, FIT_F, & + MP_FISS, FORM_MLBW, FORM_RM implicit none diff --git a/src/multipole_header.F90 b/src/multipole_header.F90 index a3642b890b..a21677a952 100644 --- a/src/multipole_header.F90 +++ b/src/multipole_header.F90 @@ -32,12 +32,6 @@ module multipole_header ! Value of 'true' when checking if nuclide is fissionable integer, parameter :: MP_FISS = 1 - ! These variables store the maximum value from every nuclide in order - ! to preallocate some arrays to improve performance. - integer :: max_poly ! Maximum number of polynomials we expect - integer :: max_poles ! Maximum number of poles in the problem for allocation - integer :: max_L ! Maximum L value for allocation - !=============================================================================== ! MULTIPOLE contains all the components needed for the windowed multipole ! temperature dependent cross section libraries for the resolved resonance diff --git a/tests/test_filter_distribcell/case-1/test.py b/tests/test_filter_distribcell/case-1/test.py deleted file mode 100644 index a71516d5f6..0000000000 --- a/tests/test_filter_distribcell/case-1/test.py +++ /dev/null @@ -1,7 +0,0 @@ -import openmc - - -su = openmc.Summary('summary.h5') -sp = openmc.StatePoint('statepoint.1.h5') -sp.link_with_summary(su) -print(sp.tallies[1].get_pandas_dataframe(summary=su)) From 5c4dcff7cddfe8ce60ef07defc2ff2f9d150d465 Mon Sep 17 00:00:00 2001 From: Colin Josey Date: Tue, 5 Apr 2016 21:09:31 -0400 Subject: [PATCH 431/650] Update the WMP documentation This commit responds to comments on PR #618. It also clarifies some points about the multipole algorithm that are not well documented. --- docs/source/methods/cross_sections.rst | 61 +++++++++++++++++++------- 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/docs/source/methods/cross_sections.rst b/docs/source/methods/cross_sections.rst index 24bf9dab0d..50a97d5754 100644 --- a/docs/source/methods/cross_sections.rst +++ b/docs/source/methods/cross_sections.rst @@ -74,41 +74,67 @@ allows on-the-fly Doppler broadening to arbitrary temperature. The multipole method was introduced by [Hwang]_ and the faster windowed multipole method by [Josey]_. In the multipole format, cross section resonances -are represented by poles, `p_j`, and residues, `r_j`, in the complex plane. The -0 K cross sections in the resolved resonance region can be computed by summing -up a contribution from each pole: +are represented by poles, :math:`p_j`, and residues, :math:`r_j`, in the complex +plane. The 0K cross sections in the resolved resonance region can be computed +by summing up a contribution from each pole: .. math:: \sigma(E, T=0\text{K}) = \frac{1}{E} \sum_j \text{Re} \left[ \frac{i r_j}{\sqrt{E} - p_j} \right] Assuming free-gas thermal motion, cross sections in the multipole form can be -analytically Doppler broadened to give (after some approximation) the form: +analytically Doppler broadened to give the form: .. math:: \sigma(E, T) = \frac{1}{2 E \sqrt{\xi}} \sum_j \text{Re} \left[i r_j - \sqrt{\pi} W(z) \right] + \sqrt{\pi} W_i(z) - \frac{r_j}{\sqrt{\pi}} C \left(\frac{p_j}{\sqrt{\xi}}, + \frac{u}{2 \sqrt{\xi}}\right)\right] +.. math:: + W_i(z) = \frac{i}{\pi} \int_{-\infty}^\infty dt \frac{e^{-t^2}}{z - t} +.. math:: + C \left(\frac{p_j}{\sqrt{\xi}},\frac{u}{2 \sqrt{\xi}}\right) = + 2p_j \int_0^\infty du' \frac{e^{-(u + u')^2/4\xi}}{p_j^2 - u'^2} .. math:: z = \frac{\sqrt{E} - p_j}{2 \sqrt{\xi}} .. math:: \xi = \frac{k_B T}{4 A} +.. math:: + u = \sqrt{E} -where `T` is the temperature of the resonant scatterer, `k_B` is the Boltzmann -constant, `A` is the mass of the target nucleus, and `W` is the Faddeeva -function. +where :math:`T` is the temperature of the resonant scatterer, :math:`k_B` is the +Boltzmann constant, :math:`A` is the mass of the target nucleus. For +:math:`E \gg k_b T/A`, the :math:`C` integral is approximately zero, simplifying +the cross section to: .. math:: - W(z) = e^{-z^2} \text{erfc}(-iz) + \sigma(E, T) = \frac{1}{2 E \sqrt{\xi}} \sum_j \text{Re} \left[i r_j + \sqrt{\pi} W_i(z)\right] -It is prohibitively expensive to evaluate a Faddeeva function for all of the -poles every time a cross section lookup is performed in Monte Carlo. To -mitigate that computational cost, the WMP method only evaluates poles within a -certain energy "window" around the incident neutron energy and accounts for the -effect of resonances outside that window with a polynomial fit. +The :math:`W_i` integral simplifies down to an analytic form. We define the +Faddeeva function, :math:`W` as: -Note that the implementation of WMP in OpenMC assumes that inelastic scattering -does not occur in the resolved resonance region. +.. math:: + W(z) = e^{-z^2} \text{Erfc}(-iz) +Through this, the integral transforms as follows: + +.. math:: + \text{Im} (z) > 0 : W_i(z) = W(z) +.. math:: + \text{Im} (z) < 0 : W_i(z) = -W(z^*)^* + +There are freely available algorithms_ to evaluate the Faddeeva function. For +many nuclides, the Faddeeva function needs to be evaluated thousands of times to +calculate a cross section. To mitigate that computational cost, the WMP method +only evaluates poles within a certain energy "window" around the incident +neutron energy and accounts for the effect of resonances outside that window +with a polynomial fit. This polynomial fit is then broadened exactly. This +exact broadening can make up for the removal of the :math:`C` integral, as +typically at low energies, only curve fits are used. + +Note that the implementation of WMP in OpenMC currently assumes that inelastic +scattering does not occur in the resolved resonance region. This is usually, +but not always the case. Future library versions may eliminate this issue. .. only:: html @@ -117,7 +143,7 @@ does not occur in the resolved resonance region. .. [Brown] Forrest B. Brown, "New Hash-based Energy Lookup Algorithm for Monte Carlo codes," LA-UR-14-24530, Los Alamos National Laboratory (2014). -.. [Hwang] R. N. Hwag, "A Rigorous Pole Representation of Multilevel Cross +.. [Hwang] R. N. Hwang, "A Rigorous Pole Representation of Multilevel Cross Sections and Its Practical Application," *Nucl. Sci. Eng.*, **96**, 192-209 (1987). @@ -130,3 +156,4 @@ does not occur in the resolved resonance region. .. _NJOY: http://t2.lanl.gov/codes.shtml .. _ENDF/B data: http://www.nndc.bnl.gov/endf .. _Leppanen: http://dx.doi.org/10.1016/j.anucene.2009.03.019 +.. _algorithms: http://ab-initio.mit.edu/wiki/index.php/Faddeeva_Package From ddfb01b3fe5bb91c02ca50604e726a857ac66e1c Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Fri, 8 Apr 2016 12:26:02 -0400 Subject: [PATCH 432/650] Reduced Python API module imports --- .../pythonapi/examples/mgxs-part-i.ipynb | 43 +- .../pythonapi/examples/mgxs-part-ii.ipynb | 969 +++++++------- .../pythonapi/examples/mgxs-part-iii.ipynb | 293 +++-- .../examples/pandas-dataframes.ipynb | 1135 ++++++++--------- .../pythonapi/examples/post-processing.ipynb | 328 +++-- .../pythonapi/examples/tally-arithmetic.ipynb | 299 +++-- examples/python/basic/build-xml.py | 10 +- examples/python/boxes/build-xml.py | 9 +- .../python/lattice/hexagonal/build-xml.py | 10 +- examples/python/lattice/nested/build-xml.py | 10 +- examples/python/lattice/simple/build-xml.py | 10 +- examples/python/pincell/build-xml.py | 10 +- .../python/pincell_multigroup/build-xml.py | 12 +- examples/python/reflective/build-xml.py | 10 +- 14 files changed, 1563 insertions(+), 1585 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index 8db4cd4df4..f1db27133e 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -146,8 +146,6 @@ "\n", "import openmc\n", "import openmc.mgxs as mgxs\n", - "from openmc.source import Source\n", - "from openmc.stats import Box\n", "\n", "%matplotlib inline" ] @@ -342,9 +340,11 @@ "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", "settings_file.output = {'tallies': True}\n", + "\n", + "# Create an initial uniform spatial source distribution over fissionable zones\n", "bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", - "settings_file.source = Source(space=Box(\n", - " bounds[:3], bounds[3:], only_fissionable=True))\n", + "uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True)\n", + "settings_file.source = openmc.source.Source(space=uniform_dist)\n", "\n", "# Export to \"settings.xml\"\n", "settings_file.export_to_xml()" @@ -518,10 +518,9 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", - " Date/Time: 2016-03-23 14:42:51\n", + " Git SHA1: 9a6ecd72597338b40d2b72378e5ad6dd65df2364\n", + " Date/Time: 2016-04-08 11:43:10\n", " MPI Processes: 1\n", - " OpenMP Threads: 16\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -606,20 +605,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.6200E-01 seconds\n", - " Reading cross sections = 1.3100E-01 seconds\n", - " Total time in simulation = 2.4000E+00 seconds\n", - " Time in transport only = 2.1340E+00 seconds\n", - " Time in inactive batches = 2.6400E-01 seconds\n", - " Time in active batches = 2.1360E+00 seconds\n", - " Time synchronizing fission bank = 2.0000E-03 seconds\n", + " Total time for initialization = 5.2800E-01 seconds\n", + " Reading cross sections = 1.3400E-01 seconds\n", + " Total time in simulation = 2.4026E+01 seconds\n", + " Time in transport only = 2.4011E+01 seconds\n", + " Time in inactive batches = 2.9230E+00 seconds\n", + " Time in active batches = 2.1103E+01 seconds\n", + " Time synchronizing fission bank = 3.0000E-03 seconds\n", " Sampling source sites = 2.0000E-03 seconds\n", - " SEND/RECV source sites = 0.0000E+00 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 1.0000E-03 seconds\n", - " Total time elapsed = 2.8800E+00 seconds\n", - " Calculation Rate (inactive) = 94697.0 neutrons/second\n", - " Calculation Rate (active) = 46816.5 neutrons/second\n", + " Total time elapsed = 2.4570E+01 seconds\n", + " Calculation Rate (inactive) = 8552.86 neutrons/second\n", + " Calculation Rate (active) = 4738.66 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -914,7 +913,7 @@ " 6.250000e-07\n", " total\n", " (((total / flux) - (absorption / flux)) - (sca...\n", - " 8.881784e-16\n", + " -3.774758e-15\n", " 0.011292\n", " \n", " \n", @@ -924,7 +923,7 @@ " 2.000000e+01\n", " total\n", " (((total / flux) - (absorption / flux)) - (sca...\n", - " -9.992007e-16\n", + " 1.443290e-15\n", " 0.002570\n", " \n", " \n", @@ -937,8 +936,8 @@ "1 1 6.25e-07 2.00e+01 total \n", "\n", " score mean std. dev. \n", - "0 (((total / flux) - (absorption / flux)) - (sca... 8.88e-16 1.13e-02 \n", - "1 (((total / flux) - (absorption / flux)) - (sca... -9.99e-16 2.57e-03 " + "0 (((total / flux) - (absorption / flux)) - (sca... -3.77e-15 1.13e-02 \n", + "1 (((total / flux) - (absorption / flux)) - (sca... 1.44e-15 2.57e-03 " ] }, "execution_count": 23, diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index 9798b6f070..3ca02ccb29 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -25,7 +25,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": { "collapsed": false }, @@ -34,8 +34,12 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:11: QAWarning: pyne.rxname is not yet QA compliant.\n", - "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:11: QAWarning: pyne.ace is not yet QA compliant.\n" + "/home/wboyd/anaconda2/lib/python2.7/site-packages/matplotlib/__init__.py:1350: UserWarning: This call to matplotlib.use() has no effect\n", + "because the backend has already been chosen;\n", + "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", + "or matplotlib.backends is imported for the first time.\n", + "\n", + " warnings.warn(_use_error_msg)\n" ] } ], @@ -46,8 +50,6 @@ "\n", "import openmc\n", "import openmc.mgxs as mgxs\n", - "from openmc.source import Source\n", - "from openmc.stats import Box\n", "import openmoc\n", "from openmoc.opencg_compatible import get_openmoc_geometry\n", "import pyne.ace\n", @@ -64,7 +66,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": { "collapsed": true }, @@ -87,7 +89,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": { "collapsed": false }, @@ -121,7 +123,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": { "collapsed": true }, @@ -147,7 +149,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": { "collapsed": true }, @@ -175,7 +177,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": { "collapsed": false }, @@ -212,7 +214,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": { "collapsed": false }, @@ -237,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": { "collapsed": true }, @@ -264,7 +266,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": { "collapsed": true }, @@ -281,9 +283,11 @@ "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", "settings_file.output = {'tallies': True}\n", + "\n", + "# Create an initial uniform spatial source distribution over fissionable zones\n", "bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", - "settings_file.source = Source(space=Box(\n", - " bounds[:3], bounds[3:], only_fissionable=True))\n", + "uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True)\n", + "settings_file.source = openmc.source.Source(space=uniform_dist)\n", "\n", "# Activate tally precision triggers\n", "settings_file.trigger_active = True\n", @@ -302,7 +306,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": { "collapsed": true }, @@ -327,7 +331,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": { "collapsed": false }, @@ -358,7 +362,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": { "collapsed": false }, @@ -382,7 +386,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": { "collapsed": false }, @@ -419,7 +423,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": { "collapsed": false }, @@ -444,10 +448,9 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 30641c5d37646212ab0540a1064ef6590065f0f0\n", - " Date/Time: 2016-03-23 15:00:26\n", + " Git SHA1: 9a6ecd72597338b40d2b72378e5ad6dd65df2364\n", + " Date/Time: 2016-04-08 11:47:45\n", " MPI Processes: 1\n", - " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -562,20 +565,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.9500E-01 seconds\n", - " Reading cross sections = 1.0300E-01 seconds\n", - " Total time in simulation = 1.1163E+02 seconds\n", - " Time in transport only = 1.1148E+02 seconds\n", - " Time in inactive batches = 6.6440E+00 seconds\n", - " Time in active batches = 1.0499E+02 seconds\n", - " Time synchronizing fission bank = 2.4000E-02 seconds\n", + " Total time for initialization = 5.6900E-01 seconds\n", + " Reading cross sections = 1.4200E-01 seconds\n", + " Total time in simulation = 3.7697E+02 seconds\n", + " Time in transport only = 3.7690E+02 seconds\n", + " Time in inactive batches = 2.4323E+01 seconds\n", + " Time in active batches = 3.5265E+02 seconds\n", + " Time synchronizing fission bank = 2.8000E-02 seconds\n", " Sampling source sites = 1.6000E-02 seconds\n", - " SEND/RECV source sites = 4.0000E-03 seconds\n", - " Time accumulating tallies = 6.0000E-03 seconds\n", - " Total time for finalization = 1.3000E-02 seconds\n", - " Total time elapsed = 1.1220E+02 seconds\n", - " Calculation Rate (inactive) = 15051.2 neutrons/second\n", - " Calculation Rate (active) = 3810.00 neutrons/second\n", + " SEND/RECV source sites = 1.0000E-02 seconds\n", + " Time accumulating tallies = 5.0000E-03 seconds\n", + " Total time for finalization = 2.6000E-02 seconds\n", + " Total time elapsed = 3.7766E+02 seconds\n", + " Calculation Rate (inactive) = 4111.33 neutrons/second\n", + " Calculation Rate (active) = 1134.27 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -593,7 +596,7 @@ "0" ] }, - "execution_count": 15, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -620,7 +623,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": { "collapsed": false }, @@ -639,7 +642,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": { "collapsed": true }, @@ -659,7 +662,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -694,7 +697,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": { "collapsed": false }, @@ -748,7 +751,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 19, "metadata": { "collapsed": false }, @@ -790,7 +793,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 20, "metadata": { "collapsed": false }, @@ -920,7 +923,7 @@ "119 10002 1 5 O-16 0.000000 0.000000" ] }, - "execution_count": 21, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -940,7 +943,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 21, "metadata": { "collapsed": true }, @@ -962,7 +965,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 22, "metadata": { "collapsed": false }, @@ -1001,7 +1004,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 23, "metadata": { "collapsed": false }, @@ -1084,7 +1087,7 @@ "2 10000 2 O-16 3.794859 0.011139" ] }, - "execution_count": 24, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -1110,7 +1113,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -1129,7 +1132,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 25, "metadata": { "collapsed": false }, @@ -1174,7 +1177,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 26, "metadata": { "collapsed": false }, @@ -1185,169 +1188,169 @@ "text": [ "[ NORMAL ] Importing ray tracing data from file...\n", "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.574672\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.679815\tres = 4.253E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.660826\tres = 1.830E-01\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.658940\tres = 2.793E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.643012\tres = 2.853E-03\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.625810\tres = 2.417E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.606678\tres = 2.675E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.587485\tres = 3.057E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.569029\tres = 3.164E-02\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.551707\tres = 3.142E-02\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.536035\tres = 3.044E-02\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.522275\tres = 2.841E-02\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.510610\tres = 2.567E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.501106\tres = 2.234E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.493832\tres = 1.861E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.488781\tres = 1.452E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.485924\tres = 1.023E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.485211\tres = 5.846E-03\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.486571\tres = 1.467E-03\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.489905\tres = 2.802E-03\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.495105\tres = 6.853E-03\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.502056\tres = 1.061E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.510630\tres = 1.404E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.520696\tres = 1.708E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.532120\tres = 1.971E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.544768\tres = 2.194E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.558505\tres = 2.377E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.573200\tres = 2.522E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.588723\tres = 2.631E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.604951\tres = 2.708E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.621765\tres = 2.756E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.639053\tres = 2.779E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.656709\tres = 2.780E-02\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.674632\tres = 2.763E-02\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.692730\tres = 2.729E-02\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.710919\tres = 2.683E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.729118\tres = 2.626E-02\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.747258\tres = 2.560E-02\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.765273\tres = 2.488E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.783104\tres = 2.411E-02\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.800701\tres = 2.330E-02\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.818017\tres = 2.247E-02\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.835012\tres = 2.163E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.851651\tres = 2.078E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.867906\tres = 1.993E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.883750\tres = 1.909E-02\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.899164\tres = 1.826E-02\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.914131\tres = 1.744E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.928638\tres = 1.665E-02\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.942676\tres = 1.587E-02\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.956239\tres = 1.512E-02\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.969323\tres = 1.439E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.981927\tres = 1.368E-02\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.994054\tres = 1.300E-02\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.005705\tres = 1.235E-02\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.016886\tres = 1.172E-02\n", - "[ NORMAL ] Iteration 56:\tk_eff = 1.027604\tres = 1.112E-02\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.037866\tres = 1.054E-02\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.047682\tres = 9.987E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.057062\tres = 9.458E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.066016\tres = 8.953E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.074556\tres = 8.471E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.082693\tres = 8.011E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.090442\tres = 7.573E-03\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.097813\tres = 7.156E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.104820\tres = 6.760E-03\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.111477\tres = 6.383E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.117795\tres = 6.025E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.123789\tres = 5.685E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.129470\tres = 5.362E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.134853\tres = 5.056E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.139950\tres = 4.766E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.144772\tres = 4.491E-03\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.149333\tres = 4.230E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.153643\tres = 3.984E-03\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.157716\tres = 3.751E-03\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.161561\tres = 3.530E-03\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.165190\tres = 3.321E-03\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.168613\tres = 3.124E-03\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.171841\tres = 2.938E-03\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.174883\tres = 2.762E-03\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.177749\tres = 2.596E-03\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.180447\tres = 2.439E-03\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.182988\tres = 2.291E-03\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.185378\tres = 2.152E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.187627\tres = 2.021E-03\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.189741\tres = 1.897E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.191728\tres = 1.780E-03\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.193595\tres = 1.670E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.195349\tres = 1.567E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.196996\tres = 1.469E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.198543\tres = 1.378E-03\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.199994\tres = 1.292E-03\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.201355\tres = 1.211E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.202632\tres = 1.134E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.203829\tres = 1.063E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.204952\tres = 9.956E-04\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.206004\tres = 9.324E-04\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.206989\tres = 8.730E-04\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.207913\tres = 8.173E-04\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.208777\tres = 7.650E-04\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.209587\tres = 7.159E-04\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.210345\tres = 6.698E-04\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.211054\tres = 6.266E-04\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.211718\tres = 5.861E-04\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.212339\tres = 5.481E-04\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.212920\tres = 5.125E-04\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.213463\tres = 4.792E-04\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.213971\tres = 4.479E-04\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.214446\tres = 4.186E-04\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.214890\tres = 3.912E-04\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.215305\tres = 3.655E-04\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.215692\tres = 3.414E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.216055\tres = 3.189E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.216393\tres = 2.979E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.216709\tres = 2.782E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.217004\tres = 2.597E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.217279\tres = 2.425E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.217536\tres = 2.263E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.217776\tres = 2.113E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.218000\tres = 1.971E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.218209\tres = 1.840E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.218404\tres = 1.716E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.218587\tres = 1.601E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.218756\tres = 1.494E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.218915\tres = 1.393E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.219062\tres = 1.299E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.219200\tres = 1.212E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.219329\tres = 1.130E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.219448\tres = 1.054E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.219560\tres = 9.822E-05\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.219664\tres = 9.156E-05\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.219761\tres = 8.534E-05\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.219851\tres = 7.954E-05\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.219936\tres = 7.413E-05\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.220014\tres = 6.908E-05\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.220087\tres = 6.437E-05\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.220156\tres = 5.997E-05\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.220219\tres = 5.587E-05\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.220278\tres = 5.205E-05\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.220333\tres = 4.848E-05\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.220385\tres = 4.516E-05\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.220433\tres = 4.206E-05\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.220477\tres = 3.917E-05\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.220518\tres = 3.648E-05\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.220557\tres = 3.397E-05\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.220593\tres = 3.163E-05\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.220627\tres = 2.945E-05\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.220658\tres = 2.742E-05\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.220687\tres = 2.552E-05\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.220714\tres = 2.376E-05\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.220739\tres = 2.212E-05\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.220762\tres = 2.059E-05\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.220784\tres = 1.916E-05\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.220804\tres = 1.783E-05\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.220823\tres = 1.660E-05\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.220841\tres = 1.545E-05\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.220857\tres = 1.437E-05\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.220872\tres = 1.338E-05\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.220886\tres = 1.245E-05\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.220899\tres = 1.158E-05\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.220912\tres = 1.077E-05\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.220923\tres = 1.002E-05\n" + "[ NORMAL ] Iteration 0:\tk_eff = 0.574577\tres = 0.000E+00\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.679838\tres = 4.254E-01\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.660822\tres = 1.832E-01\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.658929\tres = 2.797E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.643012\tres = 2.866E-03\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.625823\tres = 2.415E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.606706\tres = 2.673E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.587527\tres = 3.055E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.569083\tres = 3.161E-02\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.551772\tres = 3.139E-02\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.536108\tres = 3.042E-02\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.522354\tres = 2.839E-02\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.510694\tres = 2.565E-02\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.501194\tres = 2.232E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.493922\tres = 1.860E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.488872\tres = 1.451E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.486015\tres = 1.022E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.485301\tres = 5.845E-03\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.486659\tres = 1.469E-03\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.489990\tres = 2.797E-03\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.495186\tres = 6.846E-03\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.502132\tres = 1.060E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.510702\tres = 1.403E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.520762\tres = 1.707E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.532180\tres = 1.970E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.544822\tres = 2.193E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.558552\tres = 2.375E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.573240\tres = 2.520E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.588757\tres = 2.630E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.604978\tres = 2.707E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.621786\tres = 2.755E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.639068\tres = 2.778E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.656717\tres = 2.779E-02\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.674634\tres = 2.762E-02\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.692727\tres = 2.728E-02\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.710910\tres = 2.682E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.729105\tres = 2.625E-02\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.747241\tres = 2.559E-02\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.765251\tres = 2.487E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.783079\tres = 2.410E-02\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.800673\tres = 2.330E-02\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.817986\tres = 2.247E-02\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.834979\tres = 2.162E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.851616\tres = 2.077E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.867869\tres = 1.993E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.883712\tres = 1.908E-02\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.899125\tres = 1.826E-02\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.914092\tres = 1.744E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.928599\tres = 1.665E-02\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.942637\tres = 1.587E-02\n", + "[ NORMAL ] Iteration 50:\tk_eff = 0.956200\tres = 1.512E-02\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.969285\tres = 1.439E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.981891\tres = 1.368E-02\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.994018\tres = 1.301E-02\n", + "[ NORMAL ] Iteration 54:\tk_eff = 1.005671\tres = 1.235E-02\n", + "[ NORMAL ] Iteration 55:\tk_eff = 1.016854\tres = 1.172E-02\n", + "[ NORMAL ] Iteration 56:\tk_eff = 1.027574\tres = 1.112E-02\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.037838\tres = 1.054E-02\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.047656\tres = 9.989E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.057038\tres = 9.460E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.065995\tres = 8.955E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.074537\tres = 8.473E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.082677\tres = 8.014E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.090428\tres = 7.576E-03\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.097802\tres = 7.159E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.104812\tres = 6.762E-03\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.111471\tres = 6.385E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.117792\tres = 6.027E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.123789\tres = 5.687E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.129473\tres = 5.364E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.134858\tres = 5.058E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.139957\tres = 4.768E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.144782\tres = 4.493E-03\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.149346\tres = 4.233E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.153659\tres = 3.986E-03\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.157734\tres = 3.753E-03\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.161581\tres = 3.532E-03\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.165212\tres = 3.323E-03\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.168638\tres = 3.126E-03\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.171868\tres = 2.940E-03\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.174912\tres = 2.764E-03\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.177780\tres = 2.598E-03\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.180481\tres = 2.441E-03\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.183023\tres = 2.293E-03\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.185416\tres = 2.154E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.187666\tres = 2.022E-03\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.189782\tres = 1.898E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.191771\tres = 1.782E-03\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.193640\tres = 1.672E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.195395\tres = 1.568E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.197044\tres = 1.471E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.198591\tres = 1.379E-03\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.200044\tres = 1.293E-03\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.201406\tres = 1.212E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.202685\tres = 1.136E-03\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.203883\tres = 1.064E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.205007\tres = 9.966E-04\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.206060\tres = 9.333E-04\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.207047\tres = 8.739E-04\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.207971\tres = 8.181E-04\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.208837\tres = 7.658E-04\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.209647\tres = 7.167E-04\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.210406\tres = 6.706E-04\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.211116\tres = 6.273E-04\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.211781\tres = 5.868E-04\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.212403\tres = 5.488E-04\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.212984\tres = 5.131E-04\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.213528\tres = 4.797E-04\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.214037\tres = 4.484E-04\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.214512\tres = 4.191E-04\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.214957\tres = 3.917E-04\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.215372\tres = 3.659E-04\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.215760\tres = 3.419E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.216123\tres = 3.193E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.216462\tres = 2.983E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.216778\tres = 2.785E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.217073\tres = 2.601E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.217349\tres = 2.428E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.217607\tres = 2.266E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.217847\tres = 2.115E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.218072\tres = 1.974E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.218281\tres = 1.842E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.218476\tres = 1.719E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.218659\tres = 1.604E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.218829\tres = 1.496E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.218987\tres = 1.395E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.219135\tres = 1.301E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.219273\tres = 1.214E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.219402\tres = 1.132E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.219522\tres = 1.055E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.219634\tres = 9.837E-05\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.219738\tres = 9.170E-05\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.219835\tres = 8.548E-05\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.219926\tres = 7.967E-05\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.220010\tres = 7.425E-05\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.220089\tres = 6.919E-05\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.220162\tres = 6.447E-05\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.220230\tres = 6.007E-05\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.220294\tres = 5.597E-05\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.220353\tres = 5.214E-05\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.220408\tres = 4.857E-05\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.220460\tres = 4.524E-05\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.220508\tres = 4.214E-05\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.220552\tres = 3.924E-05\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.220594\tres = 3.655E-05\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.220633\tres = 3.403E-05\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.220669\tres = 3.169E-05\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.220702\tres = 2.950E-05\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.220733\tres = 2.747E-05\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.220762\tres = 2.557E-05\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.220789\tres = 2.381E-05\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.220815\tres = 2.216E-05\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.220838\tres = 2.063E-05\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.220860\tres = 1.920E-05\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.220880\tres = 1.787E-05\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.220899\tres = 1.663E-05\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.220917\tres = 1.548E-05\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.220933\tres = 1.440E-05\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.220948\tres = 1.340E-05\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.220962\tres = 1.247E-05\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.220976\tres = 1.160E-05\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.220988\tres = 1.080E-05\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.220999\tres = 1.004E-05\n" ] } ], @@ -1370,7 +1373,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 27, "metadata": { "collapsed": false }, @@ -1380,8 +1383,8 @@ "output_type": "stream", "text": [ "openmc keff = 1.223474\n", - "openmoc keff = 1.220923\n", - "bias [pcm]: -255.0\n" + "openmoc keff = 1.220999\n", + "bias [pcm]: -247.4\n" ] } ], @@ -1405,7 +1408,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -1445,7 +1448,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 29, "metadata": { "collapsed": false }, @@ -1456,237 +1459,237 @@ "text": [ "[ NORMAL ] Importing ray tracing data from file...\n", "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.495816\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.557477\tres = 5.042E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.518301\tres = 1.244E-01\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.509212\tres = 7.027E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.496489\tres = 1.754E-02\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.488581\tres = 2.498E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.482897\tres = 1.593E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.479775\tres = 1.163E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.478835\tres = 6.464E-03\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.479872\tres = 1.960E-03\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.482685\tres = 2.166E-03\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.487085\tres = 5.861E-03\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.492901\tres = 9.116E-03\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.499973\tres = 1.194E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.508155\tres = 1.435E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.517314\tres = 1.637E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.527327\tres = 1.802E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.538081\tres = 1.936E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.549475\tres = 2.039E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.561413\tres = 2.117E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.573810\tres = 2.173E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.586589\tres = 2.208E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.599678\tres = 2.227E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.613012\tres = 2.231E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.626532\tres = 2.224E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.640186\tres = 2.206E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.653925\tres = 2.179E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.667706\tres = 2.146E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.681489\tres = 2.107E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.695240\tres = 2.064E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.708927\tres = 2.018E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.722522\tres = 1.969E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.736000\tres = 1.918E-02\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.749339\tres = 1.865E-02\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.762519\tres = 1.812E-02\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.775522\tres = 1.759E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.788335\tres = 1.705E-02\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.800944\tres = 1.652E-02\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.813338\tres = 1.599E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.825507\tres = 1.547E-02\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.837444\tres = 1.496E-02\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.849142\tres = 1.446E-02\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.860595\tres = 1.397E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.871801\tres = 1.349E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.882755\tres = 1.302E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.893455\tres = 1.256E-02\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.903901\tres = 1.212E-02\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.914091\tres = 1.169E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.924027\tres = 1.127E-02\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.933708\tres = 1.087E-02\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.943137\tres = 1.048E-02\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.952314\tres = 1.010E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.961243\tres = 9.731E-03\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.969927\tres = 9.376E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 0.978367\tres = 9.033E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 0.986568\tres = 8.702E-03\n", - "[ NORMAL ] Iteration 56:\tk_eff = 0.994534\tres = 8.382E-03\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.002267\tres = 8.074E-03\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.009773\tres = 7.776E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.017055\tres = 7.489E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.024118\tres = 7.212E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.030966\tres = 6.944E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.037603\tres = 6.687E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.044036\tres = 6.438E-03\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.050267\tres = 6.199E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.056302\tres = 5.968E-03\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.062145\tres = 5.746E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.067802\tres = 5.532E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.073276\tres = 5.326E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.078573\tres = 5.127E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.083698\tres = 4.935E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.088654\tres = 4.751E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.093447\tres = 4.573E-03\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.098080\tres = 4.402E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.102560\tres = 4.238E-03\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.106889\tres = 4.079E-03\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.111072\tres = 3.926E-03\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.115114\tres = 3.779E-03\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.119018\tres = 3.638E-03\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.122790\tres = 3.501E-03\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.126432\tres = 3.370E-03\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.129949\tres = 3.244E-03\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.133344\tres = 3.122E-03\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.136622\tres = 3.005E-03\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.139786\tres = 2.892E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.142840\tres = 2.784E-03\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.145786\tres = 2.679E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.148630\tres = 2.579E-03\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.151373\tres = 2.482E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.154020\tres = 2.388E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.156573\tres = 2.299E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.159035\tres = 2.212E-03\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.161410\tres = 2.129E-03\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.163700\tres = 2.049E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.165909\tres = 1.972E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.168038\tres = 1.898E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.170091\tres = 1.826E-03\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.172070\tres = 1.758E-03\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.173977\tres = 1.691E-03\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.175816\tres = 1.628E-03\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.177589\tres = 1.566E-03\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.179297\tres = 1.507E-03\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.180943\tres = 1.451E-03\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.182529\tres = 1.396E-03\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.184058\tres = 1.343E-03\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.185530\tres = 1.293E-03\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.186949\tres = 1.244E-03\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.188316\tres = 1.197E-03\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.189633\tres = 1.152E-03\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.190902\tres = 1.108E-03\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.192124\tres = 1.066E-03\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.193301\tres = 1.026E-03\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.194435\tres = 9.874E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.195527\tres = 9.501E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.196578\tres = 9.142E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.197591\tres = 8.797E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.198566\tres = 8.464E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.199506\tres = 8.144E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.200410\tres = 7.836E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.201281\tres = 7.540E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.202119\tres = 7.255E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.202927\tres = 6.980E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.203704\tres = 6.716E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.204452\tres = 6.462E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.205173\tres = 6.217E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.205867\tres = 5.982E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.206534\tres = 5.755E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.207177\tres = 5.537E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.207796\tres = 5.327E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.208391\tres = 5.126E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.208965\tres = 4.931E-04\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.209517\tres = 4.744E-04\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.210048\tres = 4.565E-04\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.210559\tres = 4.391E-04\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.211051\tres = 4.225E-04\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.211525\tres = 4.065E-04\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.211980\tres = 3.910E-04\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.212419\tres = 3.762E-04\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.212841\tres = 3.619E-04\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.213247\tres = 3.482E-04\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.213638\tres = 3.350E-04\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.214015\tres = 3.222E-04\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.214377\tres = 3.100E-04\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.214725\tres = 2.982E-04\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.215060\tres = 2.869E-04\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.215383\tres = 2.760E-04\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.215693\tres = 2.655E-04\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.215992\tres = 2.554E-04\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.216280\tres = 2.457E-04\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.216556\tres = 2.364E-04\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.216822\tres = 2.274E-04\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.217078\tres = 2.187E-04\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.217325\tres = 2.104E-04\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.217562\tres = 2.024E-04\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.217790\tres = 1.947E-04\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.218009\tres = 1.873E-04\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.218220\tres = 1.802E-04\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.218423\tres = 1.733E-04\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.218619\tres = 1.667E-04\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.218807\tres = 1.604E-04\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.218988\tres = 1.543E-04\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.219162\tres = 1.484E-04\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.219329\tres = 1.428E-04\n", - "[ NORMAL ] Iteration 163:\tk_eff = 1.219490\tres = 1.373E-04\n", - "[ NORMAL ] Iteration 164:\tk_eff = 1.219645\tres = 1.321E-04\n", - "[ NORMAL ] Iteration 165:\tk_eff = 1.219794\tres = 1.271E-04\n", - "[ NORMAL ] Iteration 166:\tk_eff = 1.219938\tres = 1.222E-04\n", - "[ NORMAL ] Iteration 167:\tk_eff = 1.220076\tres = 1.176E-04\n", - "[ NORMAL ] Iteration 168:\tk_eff = 1.220208\tres = 1.131E-04\n", - "[ NORMAL ] Iteration 169:\tk_eff = 1.220336\tres = 1.088E-04\n", - "[ NORMAL ] Iteration 170:\tk_eff = 1.220459\tres = 1.046E-04\n", - "[ NORMAL ] Iteration 171:\tk_eff = 1.220577\tres = 1.006E-04\n", - "[ NORMAL ] Iteration 172:\tk_eff = 1.220691\tres = 9.681E-05\n", - "[ NORMAL ] Iteration 173:\tk_eff = 1.220800\tres = 9.312E-05\n", - "[ NORMAL ] Iteration 174:\tk_eff = 1.220905\tres = 8.957E-05\n", - "[ NORMAL ] Iteration 175:\tk_eff = 1.221006\tres = 8.615E-05\n", - "[ NORMAL ] Iteration 176:\tk_eff = 1.221104\tres = 8.287E-05\n", - "[ NORMAL ] Iteration 177:\tk_eff = 1.221197\tres = 7.971E-05\n", - "[ NORMAL ] Iteration 178:\tk_eff = 1.221287\tres = 7.667E-05\n", - "[ NORMAL ] Iteration 179:\tk_eff = 1.221374\tres = 7.374E-05\n", - "[ NORMAL ] Iteration 180:\tk_eff = 1.221457\tres = 7.093E-05\n", - "[ NORMAL ] Iteration 181:\tk_eff = 1.221537\tres = 6.823E-05\n", - "[ NORMAL ] Iteration 182:\tk_eff = 1.221615\tres = 6.562E-05\n", - "[ NORMAL ] Iteration 183:\tk_eff = 1.221689\tres = 6.312E-05\n", - "[ NORMAL ] Iteration 184:\tk_eff = 1.221760\tres = 6.071E-05\n", - "[ NORMAL ] Iteration 185:\tk_eff = 1.221829\tres = 5.840E-05\n", - "[ NORMAL ] Iteration 186:\tk_eff = 1.221895\tres = 5.617E-05\n", - "[ NORMAL ] Iteration 187:\tk_eff = 1.221958\tres = 5.402E-05\n", - "[ NORMAL ] Iteration 188:\tk_eff = 1.222019\tres = 5.196E-05\n", - "[ NORMAL ] Iteration 189:\tk_eff = 1.222078\tres = 4.998E-05\n", - "[ NORMAL ] Iteration 190:\tk_eff = 1.222134\tres = 4.807E-05\n", - "[ NORMAL ] Iteration 191:\tk_eff = 1.222189\tres = 4.624E-05\n", - "[ NORMAL ] Iteration 192:\tk_eff = 1.222241\tres = 4.447E-05\n", - "[ NORMAL ] Iteration 193:\tk_eff = 1.222291\tres = 4.277E-05\n", - "[ NORMAL ] Iteration 194:\tk_eff = 1.222340\tres = 4.114E-05\n", - "[ NORMAL ] Iteration 195:\tk_eff = 1.222386\tres = 3.957E-05\n", - "[ NORMAL ] Iteration 196:\tk_eff = 1.222431\tres = 3.806E-05\n", - "[ NORMAL ] Iteration 197:\tk_eff = 1.222474\tres = 3.661E-05\n", - "[ NORMAL ] Iteration 198:\tk_eff = 1.222515\tres = 3.521E-05\n", - "[ NORMAL ] Iteration 199:\tk_eff = 1.222555\tres = 3.386E-05\n", - "[ NORMAL ] Iteration 200:\tk_eff = 1.222594\tres = 3.257E-05\n", - "[ NORMAL ] Iteration 201:\tk_eff = 1.222630\tres = 3.133E-05\n", - "[ NORMAL ] Iteration 202:\tk_eff = 1.222666\tres = 3.013E-05\n", - "[ NORMAL ] Iteration 203:\tk_eff = 1.222700\tres = 2.898E-05\n", - "[ NORMAL ] Iteration 204:\tk_eff = 1.222733\tres = 2.787E-05\n", - "[ NORMAL ] Iteration 205:\tk_eff = 1.222764\tres = 2.681E-05\n", - "[ NORMAL ] Iteration 206:\tk_eff = 1.222795\tres = 2.578E-05\n", - "[ NORMAL ] Iteration 207:\tk_eff = 1.222824\tres = 2.480E-05\n", - "[ NORMAL ] Iteration 208:\tk_eff = 1.222852\tres = 2.385E-05\n", - "[ NORMAL ] Iteration 209:\tk_eff = 1.222879\tres = 2.294E-05\n", - "[ NORMAL ] Iteration 210:\tk_eff = 1.222905\tres = 2.206E-05\n", - "[ NORMAL ] Iteration 211:\tk_eff = 1.222930\tres = 2.122E-05\n", - "[ NORMAL ] Iteration 212:\tk_eff = 1.222954\tres = 2.041E-05\n", - "[ NORMAL ] Iteration 213:\tk_eff = 1.222977\tres = 1.963E-05\n", - "[ NORMAL ] Iteration 214:\tk_eff = 1.222999\tres = 1.888E-05\n", - "[ NORMAL ] Iteration 215:\tk_eff = 1.223020\tres = 1.816E-05\n", - "[ NORMAL ] Iteration 216:\tk_eff = 1.223041\tres = 1.747E-05\n", - "[ NORMAL ] Iteration 217:\tk_eff = 1.223061\tres = 1.680E-05\n", - "[ NORMAL ] Iteration 218:\tk_eff = 1.223080\tres = 1.616E-05\n", - "[ NORMAL ] Iteration 219:\tk_eff = 1.223098\tres = 1.554E-05\n", - "[ NORMAL ] Iteration 220:\tk_eff = 1.223116\tres = 1.495E-05\n", - "[ NORMAL ] Iteration 221:\tk_eff = 1.223132\tres = 1.437E-05\n", - "[ NORMAL ] Iteration 222:\tk_eff = 1.223149\tres = 1.382E-05\n", - "[ NORMAL ] Iteration 223:\tk_eff = 1.223164\tres = 1.330E-05\n", - "[ NORMAL ] Iteration 224:\tk_eff = 1.223179\tres = 1.279E-05\n", - "[ NORMAL ] Iteration 225:\tk_eff = 1.223194\tres = 1.230E-05\n", - "[ NORMAL ] Iteration 226:\tk_eff = 1.223208\tres = 1.183E-05\n", - "[ NORMAL ] Iteration 227:\tk_eff = 1.223221\tres = 1.138E-05\n", - "[ NORMAL ] Iteration 228:\tk_eff = 1.223234\tres = 1.094E-05\n", - "[ NORMAL ] Iteration 229:\tk_eff = 1.223246\tres = 1.052E-05\n", - "[ NORMAL ] Iteration 230:\tk_eff = 1.223258\tres = 1.012E-05\n" + "[ NORMAL ] Iteration 0:\tk_eff = 0.495686\tres = 0.000E+00\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.557452\tres = 5.043E-01\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.518267\tres = 1.246E-01\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.509166\tres = 7.029E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.496443\tres = 1.756E-02\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.488528\tres = 2.499E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.482840\tres = 1.594E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.479714\tres = 1.164E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.478769\tres = 6.475E-03\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.479802\tres = 1.970E-03\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.482610\tres = 2.157E-03\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.487005\tres = 5.852E-03\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.492817\tres = 9.108E-03\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.499885\tres = 1.193E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.508063\tres = 1.434E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.517218\tres = 1.636E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.527227\tres = 1.802E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.537978\tres = 1.935E-02\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.549367\tres = 2.039E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.561302\tres = 2.117E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.573697\tres = 2.172E-02\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.586472\tres = 2.208E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.599558\tres = 2.227E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.612889\tres = 2.231E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.626407\tres = 2.224E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.640059\tres = 2.206E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.653796\tres = 2.179E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.667574\tres = 2.146E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.681356\tres = 2.108E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.695105\tres = 2.064E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.708791\tres = 2.018E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.722384\tres = 1.969E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.735861\tres = 1.918E-02\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.749198\tres = 1.866E-02\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.762377\tres = 1.812E-02\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.775379\tres = 1.759E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.788191\tres = 1.706E-02\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.800799\tres = 1.652E-02\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.813193\tres = 1.600E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.825361\tres = 1.548E-02\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.837298\tres = 1.496E-02\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.848995\tres = 1.446E-02\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.860449\tres = 1.397E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.871654\tres = 1.349E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.882607\tres = 1.302E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.893308\tres = 1.257E-02\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.903754\tres = 1.212E-02\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.913944\tres = 1.169E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.923880\tres = 1.128E-02\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.933561\tres = 1.087E-02\n", + "[ NORMAL ] Iteration 50:\tk_eff = 0.942990\tres = 1.048E-02\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.952168\tres = 1.010E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.961097\tres = 9.733E-03\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.969781\tres = 9.378E-03\n", + "[ NORMAL ] Iteration 54:\tk_eff = 0.978222\tres = 9.035E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 0.986423\tres = 8.704E-03\n", + "[ NORMAL ] Iteration 56:\tk_eff = 0.994389\tres = 8.384E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.002123\tres = 8.075E-03\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.009629\tres = 7.778E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.016912\tres = 7.490E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.023975\tres = 7.213E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.030824\tres = 6.946E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.037462\tres = 6.688E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.043895\tres = 6.440E-03\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.050126\tres = 6.200E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.056162\tres = 5.970E-03\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.062006\tres = 5.747E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.067663\tres = 5.533E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.073138\tres = 5.327E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.078436\tres = 5.128E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.083561\tres = 4.937E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.088518\tres = 4.752E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.093311\tres = 4.575E-03\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.097945\tres = 4.404E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.102425\tres = 4.239E-03\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.106755\tres = 4.080E-03\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.110939\tres = 3.927E-03\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.114981\tres = 3.780E-03\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.118886\tres = 3.639E-03\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.122658\tres = 3.502E-03\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.126301\tres = 3.371E-03\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.129819\tres = 3.245E-03\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.133215\tres = 3.123E-03\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.136493\tres = 3.006E-03\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.139658\tres = 2.893E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.142712\tres = 2.784E-03\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.145659\tres = 2.680E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.148503\tres = 2.579E-03\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.151247\tres = 2.482E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.153894\tres = 2.389E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.156448\tres = 2.299E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.158911\tres = 2.213E-03\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.161286\tres = 2.130E-03\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.163576\tres = 2.050E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.165785\tres = 1.973E-03\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.167915\tres = 1.898E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.169968\tres = 1.827E-03\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.171948\tres = 1.758E-03\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.173856\tres = 1.692E-03\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.175695\tres = 1.628E-03\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.177468\tres = 1.567E-03\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.179176\tres = 1.508E-03\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.180823\tres = 1.451E-03\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.182410\tres = 1.396E-03\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.183939\tres = 1.344E-03\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.185412\tres = 1.293E-03\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.186831\tres = 1.244E-03\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.188198\tres = 1.197E-03\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.189516\tres = 1.152E-03\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.190785\tres = 1.109E-03\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.192007\tres = 1.067E-03\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.193184\tres = 1.027E-03\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.194319\tres = 9.878E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.195411\tres = 9.505E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.196463\tres = 9.146E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.197476\tres = 8.800E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.198451\tres = 8.467E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.199391\tres = 8.147E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.200296\tres = 7.839E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.201167\tres = 7.543E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.202006\tres = 7.257E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.202813\tres = 6.983E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.203591\tres = 6.719E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.204339\tres = 6.464E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.205060\tres = 6.220E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.205754\tres = 5.984E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.206422\tres = 5.758E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.207065\tres = 5.540E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.207684\tres = 5.330E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.208279\tres = 5.128E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.208853\tres = 4.933E-04\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.209405\tres = 4.746E-04\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.209936\tres = 4.566E-04\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.210448\tres = 4.393E-04\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.210940\tres = 4.227E-04\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.211414\tres = 4.066E-04\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.211870\tres = 3.912E-04\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.212308\tres = 3.764E-04\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.212731\tres = 3.621E-04\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.213137\tres = 3.483E-04\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.213528\tres = 3.351E-04\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.213905\tres = 3.224E-04\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.214267\tres = 3.102E-04\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.214615\tres = 2.984E-04\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.214951\tres = 2.870E-04\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.215273\tres = 2.761E-04\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.215584\tres = 2.656E-04\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.215883\tres = 2.555E-04\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.216170\tres = 2.458E-04\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.216447\tres = 2.365E-04\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.216713\tres = 2.275E-04\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.216969\tres = 2.189E-04\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.217216\tres = 2.105E-04\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.217453\tres = 2.025E-04\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.217681\tres = 1.948E-04\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.217901\tres = 1.874E-04\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.218112\tres = 1.803E-04\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.218315\tres = 1.734E-04\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.218511\tres = 1.668E-04\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.218699\tres = 1.605E-04\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.218880\tres = 1.544E-04\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.219054\tres = 1.485E-04\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.219221\tres = 1.428E-04\n", + "[ NORMAL ] Iteration 163:\tk_eff = 1.219382\tres = 1.374E-04\n", + "[ NORMAL ] Iteration 164:\tk_eff = 1.219537\tres = 1.322E-04\n", + "[ NORMAL ] Iteration 165:\tk_eff = 1.219687\tres = 1.271E-04\n", + "[ NORMAL ] Iteration 166:\tk_eff = 1.219830\tres = 1.223E-04\n", + "[ NORMAL ] Iteration 167:\tk_eff = 1.219968\tres = 1.176E-04\n", + "[ NORMAL ] Iteration 168:\tk_eff = 1.220101\tres = 1.131E-04\n", + "[ NORMAL ] Iteration 169:\tk_eff = 1.220229\tres = 1.088E-04\n", + "[ NORMAL ] Iteration 170:\tk_eff = 1.220351\tres = 1.047E-04\n", + "[ NORMAL ] Iteration 171:\tk_eff = 1.220470\tres = 1.007E-04\n", + "[ NORMAL ] Iteration 172:\tk_eff = 1.220583\tres = 9.686E-05\n", + "[ NORMAL ] Iteration 173:\tk_eff = 1.220693\tres = 9.317E-05\n", + "[ NORMAL ] Iteration 174:\tk_eff = 1.220798\tres = 8.962E-05\n", + "[ NORMAL ] Iteration 175:\tk_eff = 1.220899\tres = 8.620E-05\n", + "[ NORMAL ] Iteration 176:\tk_eff = 1.220997\tres = 8.291E-05\n", + "[ NORMAL ] Iteration 177:\tk_eff = 1.221090\tres = 7.975E-05\n", + "[ NORMAL ] Iteration 178:\tk_eff = 1.221180\tres = 7.671E-05\n", + "[ NORMAL ] Iteration 179:\tk_eff = 1.221267\tres = 7.379E-05\n", + "[ NORMAL ] Iteration 180:\tk_eff = 1.221350\tres = 7.097E-05\n", + "[ NORMAL ] Iteration 181:\tk_eff = 1.221431\tres = 6.826E-05\n", + "[ NORMAL ] Iteration 182:\tk_eff = 1.221508\tres = 6.566E-05\n", + "[ NORMAL ] Iteration 183:\tk_eff = 1.221582\tres = 6.316E-05\n", + "[ NORMAL ] Iteration 184:\tk_eff = 1.221653\tres = 6.075E-05\n", + "[ NORMAL ] Iteration 185:\tk_eff = 1.221722\tres = 5.843E-05\n", + "[ NORMAL ] Iteration 186:\tk_eff = 1.221788\tres = 5.620E-05\n", + "[ NORMAL ] Iteration 187:\tk_eff = 1.221851\tres = 5.406E-05\n", + "[ NORMAL ] Iteration 188:\tk_eff = 1.221913\tres = 5.199E-05\n", + "[ NORMAL ] Iteration 189:\tk_eff = 1.221971\tres = 5.001E-05\n", + "[ NORMAL ] Iteration 190:\tk_eff = 1.222028\tres = 4.810E-05\n", + "[ NORMAL ] Iteration 191:\tk_eff = 1.222082\tres = 4.626E-05\n", + "[ NORMAL ] Iteration 192:\tk_eff = 1.222135\tres = 4.450E-05\n", + "[ NORMAL ] Iteration 193:\tk_eff = 1.222185\tres = 4.280E-05\n", + "[ NORMAL ] Iteration 194:\tk_eff = 1.222233\tres = 4.117E-05\n", + "[ NORMAL ] Iteration 195:\tk_eff = 1.222280\tres = 3.959E-05\n", + "[ NORMAL ] Iteration 196:\tk_eff = 1.222325\tres = 3.808E-05\n", + "[ NORMAL ] Iteration 197:\tk_eff = 1.222368\tres = 3.663E-05\n", + "[ NORMAL ] Iteration 198:\tk_eff = 1.222409\tres = 3.523E-05\n", + "[ NORMAL ] Iteration 199:\tk_eff = 1.222449\tres = 3.389E-05\n", + "[ NORMAL ] Iteration 200:\tk_eff = 1.222487\tres = 3.259E-05\n", + "[ NORMAL ] Iteration 201:\tk_eff = 1.222524\tres = 3.135E-05\n", + "[ NORMAL ] Iteration 202:\tk_eff = 1.222560\tres = 3.015E-05\n", + "[ NORMAL ] Iteration 203:\tk_eff = 1.222594\tres = 2.900E-05\n", + "[ NORMAL ] Iteration 204:\tk_eff = 1.222626\tres = 2.789E-05\n", + "[ NORMAL ] Iteration 205:\tk_eff = 1.222658\tres = 2.683E-05\n", + "[ NORMAL ] Iteration 206:\tk_eff = 1.222688\tres = 2.580E-05\n", + "[ NORMAL ] Iteration 207:\tk_eff = 1.222718\tres = 2.482E-05\n", + "[ NORMAL ] Iteration 208:\tk_eff = 1.222746\tres = 2.387E-05\n", + "[ NORMAL ] Iteration 209:\tk_eff = 1.222773\tres = 2.296E-05\n", + "[ NORMAL ] Iteration 210:\tk_eff = 1.222799\tres = 2.208E-05\n", + "[ NORMAL ] Iteration 211:\tk_eff = 1.222824\tres = 2.124E-05\n", + "[ NORMAL ] Iteration 212:\tk_eff = 1.222848\tres = 2.042E-05\n", + "[ NORMAL ] Iteration 213:\tk_eff = 1.222871\tres = 1.964E-05\n", + "[ NORMAL ] Iteration 214:\tk_eff = 1.222893\tres = 1.889E-05\n", + "[ NORMAL ] Iteration 215:\tk_eff = 1.222914\tres = 1.817E-05\n", + "[ NORMAL ] Iteration 216:\tk_eff = 1.222935\tres = 1.748E-05\n", + "[ NORMAL ] Iteration 217:\tk_eff = 1.222955\tres = 1.681E-05\n", + "[ NORMAL ] Iteration 218:\tk_eff = 1.222974\tres = 1.617E-05\n", + "[ NORMAL ] Iteration 219:\tk_eff = 1.222992\tres = 1.555E-05\n", + "[ NORMAL ] Iteration 220:\tk_eff = 1.223009\tres = 1.496E-05\n", + "[ NORMAL ] Iteration 221:\tk_eff = 1.223026\tres = 1.438E-05\n", + "[ NORMAL ] Iteration 222:\tk_eff = 1.223043\tres = 1.383E-05\n", + "[ NORMAL ] Iteration 223:\tk_eff = 1.223058\tres = 1.331E-05\n", + "[ NORMAL ] Iteration 224:\tk_eff = 1.223073\tres = 1.280E-05\n", + "[ NORMAL ] Iteration 225:\tk_eff = 1.223088\tres = 1.231E-05\n", + "[ NORMAL ] Iteration 226:\tk_eff = 1.223102\tres = 1.184E-05\n", + "[ NORMAL ] Iteration 227:\tk_eff = 1.223115\tres = 1.138E-05\n", + "[ NORMAL ] Iteration 228:\tk_eff = 1.223128\tres = 1.095E-05\n", + "[ NORMAL ] Iteration 229:\tk_eff = 1.223140\tres = 1.053E-05\n", + "[ NORMAL ] Iteration 230:\tk_eff = 1.223152\tres = 1.013E-05\n" ] } ], @@ -1702,7 +1705,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 30, "metadata": { "collapsed": false }, @@ -1712,8 +1715,8 @@ "output_type": "stream", "text": [ "openmc keff = 1.223474\n", - "openmoc keff = 1.223258\n", - "bias [pcm]: -21.5\n" + "openmoc keff = 1.223152\n", + "bias [pcm]: -32.1\n" ] } ], @@ -1759,11 +1762,23 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 31, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'pyne' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# Instantiate a PyNE ACE continuous-energy cross sections library\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mpyne_lib\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpyne\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mace\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mLibrary\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'../../../../data/nndc/293.6K/U_235_293.6K.ace'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[0mpyne_lib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mread\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'92235.71c'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;31m# Extract the U-235 data from the library\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mNameError\u001b[0m: name 'pyne' is not defined" + ] + } + ], "source": [ "# Instantiate a PyNE ACE continuous-energy cross sections library\n", "pyne_lib = pyne.ace.Library('../../../../data/nndc/293.6K/U_235_293.6K.ace')\n", @@ -1785,32 +1800,11 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "(9.9999999999999994e-12, 20.0)" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Create a loglog plot of the U-235 continuous-energy fission cross section \n", "plt.loglog(u235.energy, fission.sigma, color='b', linewidth=1)\n", @@ -1846,7 +1840,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1878,22 +1872,11 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Create plot of the H-1 scattering matrix\n", "fig = plt.subplot(121)\n", @@ -1941,7 +1924,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.6" + "version": "2.7.11" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index 023efcc101..7a575b5445 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -50,14 +50,9 @@ "\n", "import openmc\n", "import openmc.mgxs\n", - "from openmc.statepoint import StatePoint\n", - "from openmc.summary import Summary\n", - "from openmc.source import Source\n", - "from openmc.stats import Box\n", - "\n", "import openmoc\n", "import openmoc.process\n", - "from openmoc.compatible import get_openmoc_geometry\n", + "from openmoc.opencg_compatible import get_openmoc_geometry\n", "from openmoc.materialize import load_openmc_mgxs_lib\n", "\n", "%matplotlib inline" @@ -393,9 +388,11 @@ "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", "settings_file.output = {'tallies': False}\n", - "source_bounds = [-10.71, -10.71, -10, 10.71, 10.71, 10.]\n", - "settings_file.source = Source(Box(\n", - " source_bounds[:3], source_bounds[3:], only_fissionable=True))\n", + "\n", + "# Create an initial uniform spatial source distribution over fissionable zones\n", + "bounds = [-10.71, -10.71, -10, 10.71, 10.71, 10.]\n", + "uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True)\n", + "settings_file.source = openmc.source.Source(space=uniform_dist)\n", "\n", "# Export to \"settings.xml\"\n", "settings_file.export_to_xml()" @@ -421,6 +418,7 @@ "plot.filename = 'materials-xy'\n", "plot.origin = [0, 0, 0]\n", "plot.pixels = [250, 250]\n", + "plot.width = [-10.71*2, -10.71*2]\n", "plot.color = 'mat'\n", "\n", "# Instantiate a PlotsFile, add Plot, and export to \"plots.xml\"\n", @@ -469,7 +467,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEVyEhLpgJFNv8T///98\niBL0AAAAAWJLR0QDEQxM8gAAAAd0SU1FB+ADFxIsERzdmJYAAAQUSURBVGje7VvNleMgDA4HSqAf\nl+CDnUNKSD8uIQdT5djBgIRESPztbua9RYeZPNAnCcdBP4jLpVOnTp2+TnaexJibRzE2z4MOn4UA\nt42NAq4KMPt4wWxnyeyeYxIfxvlEGJqkGnVVV//gE5v6m1+4AZuau5cL3Xiv3vuVTbgN7jcBI1Oz\nDXn5BNxzfGMmE0+RG/NE1ewiNz3iqQZeOmE3S3d6EJmHGl8uwBy8fpkEL5UZ1O8yy+V7MRF5icyk\nZi2/1chLJiKvf0xCjV/4A0i8PhlrEu+abHJXL2Ry3izYJl6fbEpmEpkFPgnOvFlmNpPjia40oeCJ\nGs/fypvEZ13JJopnD5Dgk2DCu07CTI4nuvwyCF3RJkvUsC+A8CY80eUV/FrFj8LWuCZXwVNb/WMU\nuqJNjiyTfoHM1jfxvoqfqvj5HfyxMMfwo3hMFG81PNX10PD5BWS2votfOv7X4MHv35zCv35/1ff/\nHTz6+znx+71o+4e2/xB8a//S9r/a/qXuv439k+2/1LDDVnX/JjKPZUrDXvmfmv8ghr3tvwaKvwre\nhv/l/lPz35r/r/lvMpHjBxJ/DMImHn/kWCnrMjn+SbqyTQvHp8BmbcRfSc3I8MlYGv9dJW+UWcZv\nJk6w+FPyRplLGcEf8SuNVaNMyhtjWiXTeDKzBCDE2iwmN0HPIuJns8f12ziVG2J6HqvvKcGeJ1xK\nCnlF8VbJnMQqOQmZKL5VJVeZ50oC5eS4UXIlq6c/QbLyVMRKnWZ9p06dOnX6HjnVK4m92lS2f6fU\n1RRXZSr+wyj+S6vfKWW6rL5gVnylrdTvzNMxi/rdEP5QNdfdzQsDQmFtZRPuibRUpgkxxSIc8FEs\n4/HLdKyCqrmHmKRYQIx1eP1uYP+JGhE/Wa1+Fz+q9Tu+gBTr0frdWAoiMWmxAKV+Z9Inm+PXj+p3\nF/Hpo/pd5mjW79T8IVuYPtbyB7V+lxnsKMys1u9y/kTwrfxJyd8uNL9V6ncsf1Prd/TxHnhi5qOV\nv7J5ucxq/hvzZzY/iGU263fs+Sj4Vv7fwDfrFwr+k/qHY/jxJV6t39D3y2p48n7dTuBb9aeO/3d4\n8PtH378/+v6f+f2Bv390/8H3PyL4zP6L7v+o/0H9H+p/Uf+Pxh9w/IPGX2j8h8afaPwLx99o/I/m\nH3D+g+ZfcP7XqVOnTp2+ROD5C3j+g54/gedf6Pkbev4Hnj+i55/o+St6/oueP4Pn3+j5O3r+j/Yf\noP0PaP8F2v8B9594Ydgn/S+/sX/udP/Rif6n3n/3n+P/Rv8dtanR//nt/jm0/xbt/8X7j+8S/0n/\nM9p/jfZ/o/3naP872n+P9v/D9w/Q+w/o/Qv0/gd8/wS9/4Lev4Hv/6D3j9D7T/D9q06dOnX6jH4A\n5sDOrAejcacAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDMtMjNUMTQ6NDQ6MTYtMDQ6MDBE774l\nAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAzLTIzVDE0OjQ0OjE2LTA0OjAwNbIGmQAAAABJRU5E\nrkJggg==\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -735,10 +733,9 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", - " Date/Time: 2016-03-23 14:44:19\n", + " Git SHA1: 9a6ecd72597338b40d2b72378e5ad6dd65df2364\n", + " Date/Time: 2016-04-08 11:57:08\n", " MPI Processes: 1\n", - " OpenMP Threads: 16\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -824,20 +821,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.7900E-01 seconds\n", - " Reading cross sections = 1.3600E-01 seconds\n", - " Total time in simulation = 6.5400E+00 seconds\n", - " Time in transport only = 5.8520E+00 seconds\n", - " Time in inactive batches = 6.1600E-01 seconds\n", - " Time in active batches = 5.9240E+00 seconds\n", - " Time synchronizing fission bank = 2.0000E-03 seconds\n", - " Sampling source sites = 1.0000E-03 seconds\n", - " SEND/RECV source sites = 0.0000E+00 seconds\n", - " Time accumulating tallies = 2.0000E-03 seconds\n", + " Total time for initialization = 5.7200E-01 seconds\n", + " Reading cross sections = 1.4400E-01 seconds\n", + " Total time in simulation = 8.3367E+01 seconds\n", + " Time in transport only = 8.3321E+01 seconds\n", + " Time in inactive batches = 6.3610E+00 seconds\n", + " Time in active batches = 7.7006E+01 seconds\n", + " Time synchronizing fission bank = 1.0000E-02 seconds\n", + " Sampling source sites = 7.0000E-03 seconds\n", + " SEND/RECV source sites = 2.0000E-03 seconds\n", + " Time accumulating tallies = 4.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 7.0410E+00 seconds\n", - " Calculation Rate (inactive) = 40584.4 neutrons/second\n", - " Calculation Rate (active) = 16880.5 neutrons/second\n", + " Total time elapsed = 8.3969E+01 seconds\n", + " Calculation Rate (inactive) = 3930.20 neutrons/second\n", + " Calculation Rate (active) = 1298.60 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1329,124 +1326,124 @@ "text": [ "[ NORMAL ] Importing ray tracing data from file...\n", "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.854370\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.801922\tres = 1.521E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.761746\tres = 6.349E-02\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.732367\tres = 5.029E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.711075\tres = 3.869E-02\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.696557\tres = 2.912E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.687673\tres = 2.044E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.683470\tres = 1.277E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.683129\tres = 6.141E-03\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.685949\tres = 7.889E-04\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.691329\tres = 4.181E-03\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.698755\tres = 7.875E-03\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.707786\tres = 1.077E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.718050\tres = 1.295E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.729230\tres = 1.452E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.741058\tres = 1.559E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.753310\tres = 1.624E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.765800\tres = 1.655E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.778371\tres = 1.660E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.790897\tres = 1.643E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.803273\tres = 1.611E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.815415\tres = 1.566E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.827256\tres = 1.513E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.838747\tres = 1.453E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.849847\tres = 1.390E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.860527\tres = 1.324E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.870770\tres = 1.258E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.880562\tres = 1.191E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.889897\tres = 1.125E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.898776\tres = 1.061E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.907202\tres = 9.986E-03\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.915181\tres = 9.382E-03\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.922724\tres = 8.803E-03\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.929843\tres = 8.249E-03\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.936550\tres = 7.721E-03\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.942861\tres = 7.220E-03\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.948791\tres = 6.744E-03\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.954357\tres = 6.295E-03\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.959575\tres = 5.871E-03\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.964461\tres = 5.472E-03\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.969033\tres = 5.097E-03\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.973306\tres = 4.744E-03\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.977297\tres = 4.414E-03\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.981021\tres = 4.104E-03\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.984493\tres = 3.814E-03\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.987729\tres = 3.543E-03\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.990742\tres = 3.290E-03\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.993546\tres = 3.053E-03\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.996153\tres = 2.833E-03\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.998577\tres = 2.627E-03\n", - "[ NORMAL ] Iteration 50:\tk_eff = 1.000829\tres = 2.436E-03\n", - "[ NORMAL ] Iteration 51:\tk_eff = 1.002920\tres = 2.257E-03\n", - "[ NORMAL ] Iteration 52:\tk_eff = 1.004860\tres = 2.091E-03\n", - "[ NORMAL ] Iteration 53:\tk_eff = 1.006661\tres = 1.937E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.008330\tres = 1.793E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.009877\tres = 1.660E-03\n", - "[ NORMAL ] Iteration 56:\tk_eff = 1.011311\tres = 1.536E-03\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.012639\tres = 1.421E-03\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.013868\tres = 1.314E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.015006\tres = 1.215E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.016059\tres = 1.124E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.017033\tres = 1.039E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.017933\tres = 9.596E-04\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.018766\tres = 8.865E-04\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.019535\tres = 8.188E-04\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.020246\tres = 7.562E-04\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.020903\tres = 6.981E-04\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.021509\tres = 6.445E-04\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.022069\tres = 5.948E-04\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.022586\tres = 5.489E-04\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.023063\tres = 5.064E-04\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.023503\tres = 4.671E-04\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.023909\tres = 4.308E-04\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.024284\tres = 3.973E-04\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.024629\tres = 3.663E-04\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.024948\tres = 3.377E-04\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.025241\tres = 3.113E-04\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.025512\tres = 2.869E-04\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.025761\tres = 2.644E-04\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.025991\tres = 2.436E-04\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.026203\tres = 2.244E-04\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.026398\tres = 2.067E-04\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.026578\tres = 1.904E-04\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.026743\tres = 1.754E-04\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.026895\tres = 1.615E-04\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.027036\tres = 1.487E-04\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.027165\tres = 1.369E-04\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.027284\tres = 1.260E-04\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.027393\tres = 1.160E-04\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.027494\tres = 1.068E-04\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.027587\tres = 9.825E-05\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.027672\tres = 9.041E-05\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.027751\tres = 8.319E-05\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.027823\tres = 7.654E-05\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.027889\tres = 7.042E-05\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.027950\tres = 6.478E-05\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.028007\tres = 5.959E-05\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.028058\tres = 5.481E-05\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.028106\tres = 5.041E-05\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.028150\tres = 4.636E-05\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.028190\tres = 4.263E-05\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.028227\tres = 3.920E-05\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.028261\tres = 3.604E-05\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.028292\tres = 3.314E-05\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.028321\tres = 3.047E-05\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.028347\tres = 2.801E-05\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.028371\tres = 2.575E-05\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.028394\tres = 2.367E-05\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.028414\tres = 2.175E-05\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.028433\tres = 1.999E-05\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.028450\tres = 1.838E-05\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.028466\tres = 1.689E-05\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.028481\tres = 1.552E-05\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.028494\tres = 1.426E-05\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.028507\tres = 1.310E-05\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.028518\tres = 1.204E-05\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.028528\tres = 1.106E-05\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.028538\tres = 1.017E-05\n" + "[ NORMAL ] Iteration 0:\tk_eff = 0.854317\tres = 0.000E+00\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.801874\tres = 1.522E-01\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.761694\tres = 6.349E-02\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.732314\tres = 5.030E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.711020\tres = 3.870E-02\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.696500\tres = 2.913E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.687614\tres = 2.045E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.683408\tres = 1.278E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.683065\tres = 6.144E-03\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.685884\tres = 7.908E-04\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.691262\tres = 4.178E-03\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.698685\tres = 7.872E-03\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.707715\tres = 1.076E-02\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.717977\tres = 1.295E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.729155\tres = 1.452E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.740981\tres = 1.559E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.753233\tres = 1.624E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.765721\tres = 1.655E-02\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.778292\tres = 1.660E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.790816\tres = 1.643E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.803191\tres = 1.611E-02\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.815332\tres = 1.566E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.827174\tres = 1.513E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.838664\tres = 1.454E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.849763\tres = 1.390E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.860444\tres = 1.325E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.870686\tres = 1.258E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.880478\tres = 1.191E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.889814\tres = 1.126E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.898693\tres = 1.061E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.907118\tres = 9.987E-03\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.915098\tres = 9.383E-03\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.922641\tres = 8.804E-03\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.929760\tres = 8.250E-03\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.936467\tres = 7.722E-03\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.942778\tres = 7.220E-03\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.948709\tres = 6.745E-03\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.954275\tres = 6.296E-03\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.959493\tres = 5.872E-03\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.964380\tres = 5.473E-03\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.968952\tres = 5.097E-03\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.973225\tres = 4.745E-03\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.977216\tres = 4.414E-03\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.980940\tres = 4.105E-03\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.984413\tres = 3.815E-03\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.987649\tres = 3.544E-03\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.990662\tres = 3.290E-03\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.993466\tres = 3.054E-03\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.996074\tres = 2.833E-03\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.998498\tres = 2.628E-03\n", + "[ NORMAL ] Iteration 50:\tk_eff = 1.000750\tres = 2.436E-03\n", + "[ NORMAL ] Iteration 51:\tk_eff = 1.002841\tres = 2.258E-03\n", + "[ NORMAL ] Iteration 52:\tk_eff = 1.004782\tres = 2.092E-03\n", + "[ NORMAL ] Iteration 53:\tk_eff = 1.006582\tres = 1.937E-03\n", + "[ NORMAL ] Iteration 54:\tk_eff = 1.008252\tres = 1.794E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 1.009799\tres = 1.660E-03\n", + "[ NORMAL ] Iteration 56:\tk_eff = 1.011233\tres = 1.537E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.012561\tres = 1.421E-03\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.013791\tres = 1.315E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.014929\tres = 1.216E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.015982\tres = 1.124E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.016956\tres = 1.039E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.017857\tres = 9.598E-04\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.018689\tres = 8.867E-04\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.019459\tres = 8.190E-04\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.020170\tres = 7.563E-04\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.020827\tres = 6.983E-04\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.021433\tres = 6.446E-04\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.021993\tres = 5.949E-04\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.022510\tres = 5.490E-04\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.022987\tres = 5.065E-04\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.023427\tres = 4.672E-04\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.023834\tres = 4.309E-04\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.024208\tres = 3.974E-04\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.024554\tres = 3.664E-04\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.024872\tres = 3.378E-04\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.025166\tres = 3.114E-04\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.025436\tres = 2.870E-04\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.025686\tres = 2.644E-04\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.025916\tres = 2.437E-04\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.026128\tres = 2.245E-04\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.026323\tres = 2.068E-04\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.026502\tres = 1.905E-04\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.026668\tres = 1.754E-04\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.026820\tres = 1.615E-04\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.026961\tres = 1.487E-04\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.027090\tres = 1.369E-04\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.027209\tres = 1.261E-04\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.027318\tres = 1.160E-04\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.027419\tres = 1.068E-04\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.027512\tres = 9.828E-05\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.027597\tres = 9.044E-05\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.027676\tres = 8.322E-05\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.027748\tres = 7.657E-05\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.027814\tres = 7.044E-05\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.027876\tres = 6.480E-05\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.027932\tres = 5.961E-05\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.027983\tres = 5.483E-05\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.028031\tres = 5.042E-05\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.028075\tres = 4.637E-05\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.028115\tres = 4.264E-05\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.028152\tres = 3.921E-05\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.028186\tres = 3.605E-05\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.028217\tres = 3.315E-05\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.028246\tres = 3.048E-05\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.028272\tres = 2.802E-05\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.028297\tres = 2.576E-05\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.028319\tres = 2.367E-05\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.028339\tres = 2.176E-05\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.028358\tres = 2.000E-05\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.028376\tres = 1.838E-05\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.028392\tres = 1.689E-05\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.028406\tres = 1.553E-05\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.028420\tres = 1.427E-05\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.028432\tres = 1.311E-05\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.028443\tres = 1.205E-05\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.028454\tres = 1.107E-05\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.028463\tres = 1.017E-05\n" ] } ], @@ -1479,8 +1476,8 @@ "output_type": "stream", "text": [ "openmc keff = 1.028263\n", - "openmoc keff = 1.028538\n", - "bias [pcm]: 27.5\n" + "openmoc keff = 1.028463\n", + "bias [pcm]: 20.0\n" ] } ], @@ -1588,7 +1585,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 44, @@ -1599,7 +1596,7 @@ "data": { "image/png": "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\ngg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index 27812f4d6c..718ff8f796 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -24,10 +24,6 @@ "import numpy as np\n", "\n", "import openmc\n", - "from openmc.statepoint import StatePoint\n", - "from openmc.summary import Summary\n", - "from openmc.source import Source\n", - "from openmc.stats import Box\n", "\n", "%matplotlib inline" ] @@ -305,9 +301,11 @@ "settings_file.output = {'tallies': False}\n", "settings_file.trigger_active = True\n", "settings_file.trigger_max_batches = max_batches\n", - "source_bounds = [-10.71, -10.71, -10, 10.71, 10.71, 10.]\n", - "settings_file.source = Source(space=Box(\n", - " source_bounds[:3], source_bounds[3:]))\n", + "\n", + "# Create an initial uniform spatial source distribution over fissionable zones\n", + "bounds = [-10.71, -10.71, -10, 10.71, 10.71, 10.]\n", + "uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True)\n", + "settings_file.source = openmc.source.Source(space=uniform_dist)\n", "\n", "# Export to \"settings.xml\"\n", "settings_file.export_to_xml()" @@ -382,7 +380,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ADFxItHQxw5fwAAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAzLTIzVDE0OjQ1OjI5LTA0OjAw0+qiEQAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMy0yM1QxNDo0NToyOS0wNDowMKK3Gq0AAAAASUVORK5C\nYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AECBABF2xKKPsAAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA0LTA4VDEyOjAxOjIzLTA0OjAwqpTBSwAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNC0wOFQxMjowMToyMy0wNDowMNvJefcAAAAASUVORK5C\nYII=\n", "text/plain": [ "" ] @@ -567,10 +565,9 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", - " Date/Time: 2016-03-23 14:45:30\n", + " Git SHA1: 9a6ecd72597338b40d2b72378e5ad6dd65df2364\n", + " Date/Time: 2016-04-08 12:01:24\n", " MPI Processes: 1\n", - " OpenMP Threads: 16\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -597,46 +594,34 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 0.51036 \n", - " 2/1 0.64436 \n", - " 3/1 0.64874 \n", - " 4/1 0.65998 \n", - " 5/1 0.68369 \n", - " 6/1 0.69058 \n", - " 7/1 0.68288 0.68673 +/- 0.00385\n", - " 8/1 0.69483 0.68943 +/- 0.00350\n", - " 9/1 0.70348 0.69294 +/- 0.00430\n", - " 10/1 0.69969 0.69429 +/- 0.00359\n", - " 11/1 0.67170 0.69052 +/- 0.00477\n", - " 12/1 0.67661 0.68854 +/- 0.00450\n", - " 13/1 0.69571 0.68943 +/- 0.00400\n", - " 14/1 0.67433 0.68776 +/- 0.00390\n", - " 15/1 0.67744 0.68672 +/- 0.00364\n", - " 16/1 0.65256 0.68362 +/- 0.00453\n", - " 17/1 0.66657 0.68220 +/- 0.00437\n", - " 18/1 0.66887 0.68117 +/- 0.00415\n", - " 19/1 0.68238 0.68126 +/- 0.00384\n", - " 20/1 0.64423 0.67879 +/- 0.00435\n", - " Triggers unsatisfied, max unc./thresh. is 1.40549 for absorption in tally 10002\n", - " The estimated number of batches is 35\n", + " 1/1 0.55921 \n", + " 2/1 0.63816 \n", + " 3/1 0.68834 \n", + " 4/1 0.71192 \n", + " 5/1 0.67935 \n", + " 6/1 0.68274 \n", + " 7/1 0.66339 0.67307 +/- 0.00967\n", + " 8/1 0.65835 0.66816 +/- 0.00743\n", + " 9/1 0.66697 0.66786 +/- 0.00527\n", + " 10/1 0.70498 0.67528 +/- 0.00847\n", + " 11/1 0.68596 0.67706 +/- 0.00714\n", + " 12/1 0.68481 0.67817 +/- 0.00614\n", + " 13/1 0.68369 0.67886 +/- 0.00536\n", + " 14/1 0.68785 0.67986 +/- 0.00483\n", + " 15/1 0.66145 0.67802 +/- 0.00470\n", + " 16/1 0.71831 0.68168 +/- 0.00561\n", + " 17/1 0.68428 0.68190 +/- 0.00512\n", + " 18/1 0.67527 0.68139 +/- 0.00474\n", + " 19/1 0.68166 0.68141 +/- 0.00439\n", + " 20/1 0.65475 0.67963 +/- 0.00446\n", + " Triggers unsatisfied, max unc./thresh. is 1.07581 for absorption in tally 10002\n", + " The estimated number of batches is 23\n", " Creating state point statepoint.020.h5...\n", - " 21/1 0.66266 0.67778 +/- 0.00419\n", - " 22/1 0.67656 0.67771 +/- 0.00393\n", - " 23/1 0.67643 0.67764 +/- 0.00371\n", - " 24/1 0.66192 0.67681 +/- 0.00361\n", - " 25/1 0.69848 0.67789 +/- 0.00359\n", - " 26/1 0.66274 0.67717 +/- 0.00349\n", - " 27/1 0.69746 0.67810 +/- 0.00345\n", - " 28/1 0.67485 0.67795 +/- 0.00330\n", - " 29/1 0.67427 0.67780 +/- 0.00316\n", - " 30/1 0.66531 0.67730 +/- 0.00308\n", - " 31/1 0.68457 0.67758 +/- 0.00297\n", - " 32/1 0.66592 0.67715 +/- 0.00289\n", - " 33/1 0.65929 0.67651 +/- 0.00286\n", - " 34/1 0.67252 0.67637 +/- 0.00276\n", - " 35/1 0.71827 0.67777 +/- 0.00301\n", - " Triggers satisfied for batch 35\n", - " Creating state point statepoint.035.h5...\n", + " 21/1 0.64538 0.67749 +/- 0.00469\n", + " 22/1 0.73275 0.68074 +/- 0.00547\n", + " 23/1 0.71674 0.68274 +/- 0.00553\n", + " Triggers satisfied for batch 23\n", + " Creating state point statepoint.023.h5...\n", "\n", " ===========================================================================\n", " ======================> SIMULATION FINISHED <======================\n", @@ -645,28 +630,28 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.5300E-01 seconds\n", - " Reading cross sections = 1.3200E-01 seconds\n", - " Total time in simulation = 1.9780E+00 seconds\n", - " Time in transport only = 1.7780E+00 seconds\n", - " Time in inactive batches = 2.1000E-01 seconds\n", - " Time in active batches = 1.7680E+00 seconds\n", - " Time synchronizing fission bank = 5.0000E-03 seconds\n", - " Sampling source sites = 5.0000E-03 seconds\n", + " Total time for initialization = 5.4700E-01 seconds\n", + " Reading cross sections = 1.4200E-01 seconds\n", + " Total time in simulation = 1.4279E+01 seconds\n", + " Time in transport only = 1.4263E+01 seconds\n", + " Time in inactive batches = 2.3020E+00 seconds\n", + " Time in active batches = 1.1977E+01 seconds\n", + " Time synchronizing fission bank = 1.0000E-03 seconds\n", + " Sampling source sites = 1.0000E-03 seconds\n", " SEND/RECV source sites = 0.0000E+00 seconds\n", " Time accumulating tallies = 1.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 2.4480E+00 seconds\n", - " Calculation Rate (inactive) = 59523.8 neutrons/second\n", - " Calculation Rate (active) = 21210.4 neutrons/second\n", + " Total time elapsed = 1.4854E+01 seconds\n", + " Calculation Rate (inactive) = 5430.06 neutrons/second\n", + " Calculation Rate (active) = 3131.00 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 0.67866 +/- 0.00337\n", - " k-effective (Track-length) = 0.67777 +/- 0.00301\n", - " k-effective (Absorption) = 0.68234 +/- 0.00332\n", - " Combined k-effective = 0.67987 +/- 0.00255\n", - " Leakage Fraction = 0.34141 +/- 0.00198\n", + " k-effective (Collision) = 0.67952 +/- 0.00434\n", + " k-effective (Track-length) = 0.68274 +/- 0.00553\n", + " k-effective (Absorption) = 0.68095 +/- 0.00369\n", + " Combined k-effective = 0.67994 +/- 0.00349\n", + " Leakage Fraction = 0.34133 +/- 0.00332\n", "\n" ] }, @@ -709,7 +694,7 @@ "statepoints = glob.glob('statepoint.*.h5')\n", "\n", "# Load the last statepoint file\n", - "sp = StatePoint(statepoints[-1])" + "sp = openmc.StatePoint(statepoints[-1])" ] }, { @@ -722,7 +707,7 @@ "outputs": [], "source": [ "# Load the summary file and link with statepoint\n", - "su = Summary('summary.h5')\n", + "su = openmc.Summary('summary.h5')\n", "sp.link_with_summary(su)" ] }, @@ -783,13 +768,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.12916959]]\n", + "[[[ 0.1508711 ]]\n", "\n", - " [[ 0.06336943]]\n", + " [[ 0.05389822]]\n", "\n", - " [[ 0.33288738]]\n", + " [[ 0.19633 ]]\n", "\n", - " [[ 0.14666158]]]\n" + " [[ 0.12963172]]]\n" ] } ], @@ -845,8 +830,8 @@ " 0.00e+00\n", " 6.25e-07\n", " fission\n", - " 2.37e-04\n", - " 3.06e-05\n", + " 2.34e-04\n", + " 3.54e-05\n", " \n", " \n", " 1\n", @@ -856,8 +841,8 @@ " 0.00e+00\n", " 6.25e-07\n", " nu-fission\n", - " 5.78e-04\n", - " 7.46e-05\n", + " 5.71e-04\n", + " 8.62e-05\n", " \n", " \n", " 2\n", @@ -867,8 +852,8 @@ " 6.25e-07\n", " 2.00e+01\n", " fission\n", - " 7.00e-05\n", - " 5.15e-06\n", + " 7.03e-05\n", + " 7.05e-06\n", " \n", " \n", " 3\n", @@ -878,8 +863,8 @@ " 6.25e-07\n", " 2.00e+01\n", " nu-fission\n", - " 1.85e-04\n", - " 1.28e-05\n", + " 1.87e-04\n", + " 1.76e-05\n", " \n", " \n", " 4\n", @@ -889,8 +874,8 @@ " 0.00e+00\n", " 6.25e-07\n", " fission\n", - " 4.04e-04\n", - " 3.09e-05\n", + " 3.67e-04\n", + " 3.61e-05\n", " \n", " \n", " 5\n", @@ -900,8 +885,8 @@ " 0.00e+00\n", " 6.25e-07\n", " nu-fission\n", - " 9.85e-04\n", - " 7.54e-05\n", + " 8.94e-04\n", + " 8.80e-05\n", " \n", " \n", " 6\n", @@ -911,8 +896,8 @@ " 6.25e-07\n", " 2.00e+01\n", " fission\n", - " 1.00e-04\n", - " 5.08e-06\n", + " 1.04e-04\n", + " 5.36e-06\n", " \n", " \n", " 7\n", @@ -922,8 +907,8 @@ " 6.25e-07\n", " 2.00e+01\n", " nu-fission\n", - " 2.63e-04\n", - " 1.34e-05\n", + " 2.76e-04\n", + " 1.40e-05\n", " \n", " \n", " 8\n", @@ -933,8 +918,8 @@ " 0.00e+00\n", " 6.25e-07\n", " fission\n", - " 5.82e-04\n", - " 5.00e-05\n", + " 6.04e-04\n", + " 5.57e-05\n", " \n", " \n", " 9\n", @@ -944,8 +929,8 @@ " 0.00e+00\n", " 6.25e-07\n", " nu-fission\n", - " 1.42e-03\n", - " 1.22e-04\n", + " 1.47e-03\n", + " 1.36e-04\n", " \n", " \n", " 10\n", @@ -955,8 +940,8 @@ " 6.25e-07\n", " 2.00e+01\n", " fission\n", - " 1.38e-04\n", - " 1.03e-05\n", + " 1.41e-04\n", + " 6.69e-06\n", " \n", " \n", " 11\n", @@ -966,8 +951,8 @@ " 6.25e-07\n", " 2.00e+01\n", " nu-fission\n", - " 3.59e-04\n", - " 2.54e-05\n", + " 3.72e-04\n", + " 1.82e-05\n", " \n", " \n", " 12\n", @@ -977,8 +962,8 @@ " 0.00e+00\n", " 6.25e-07\n", " fission\n", - " 6.88e-04\n", - " 4.25e-05\n", + " 6.45e-04\n", + " 4.59e-05\n", " \n", " \n", " 13\n", @@ -988,8 +973,8 @@ " 0.00e+00\n", " 6.25e-07\n", " nu-fission\n", - " 1.68e-03\n", - " 1.04e-04\n", + " 1.57e-03\n", + " 1.12e-04\n", " \n", " \n", " 14\n", @@ -999,8 +984,8 @@ " 6.25e-07\n", " 2.00e+01\n", " fission\n", - " 1.62e-04\n", - " 7.43e-06\n", + " 1.82e-04\n", + " 9.37e-06\n", " \n", " \n", " 15\n", @@ -1010,8 +995,8 @@ " 6.25e-07\n", " 2.00e+01\n", " nu-fission\n", - " 4.22e-04\n", - " 1.93e-05\n", + " 4.76e-04\n", + " 2.47e-05\n", " \n", " \n", " 16\n", @@ -1021,8 +1006,8 @@ " 0.00e+00\n", " 6.25e-07\n", " fission\n", - " 7.62e-04\n", - " 5.69e-05\n", + " 7.28e-04\n", + " 7.49e-05\n", " \n", " \n", " 17\n", @@ -1032,8 +1017,8 @@ " 0.00e+00\n", " 6.25e-07\n", " nu-fission\n", - " 1.86e-03\n", - " 1.39e-04\n", + " 1.77e-03\n", + " 1.83e-04\n", " \n", " \n", " 18\n", @@ -1043,8 +1028,8 @@ " 6.25e-07\n", " 2.00e+01\n", " fission\n", - " 1.80e-04\n", - " 8.16e-06\n", + " 1.81e-04\n", + " 1.04e-05\n", " \n", " \n", " 19\n", @@ -1054,8 +1039,8 @@ " 6.25e-07\n", " 2.00e+01\n", " nu-fission\n", - " 4.71e-04\n", - " 2.08e-05\n", + " 4.72e-04\n", + " 2.67e-05\n", " \n", " \n", "\n", @@ -1064,49 +1049,49 @@ "text/plain": [ " mesh 1 energy low [MeV] energy high [MeV] score mean \\\n", " x y z \n", - "0 1 1 1 0.00e+00 6.25e-07 fission 2.37e-04 \n", - "1 1 1 1 0.00e+00 6.25e-07 nu-fission 5.78e-04 \n", - "2 1 1 1 6.25e-07 2.00e+01 fission 7.00e-05 \n", - "3 1 1 1 6.25e-07 2.00e+01 nu-fission 1.85e-04 \n", - "4 1 2 1 0.00e+00 6.25e-07 fission 4.04e-04 \n", - "5 1 2 1 0.00e+00 6.25e-07 nu-fission 9.85e-04 \n", - "6 1 2 1 6.25e-07 2.00e+01 fission 1.00e-04 \n", - "7 1 2 1 6.25e-07 2.00e+01 nu-fission 2.63e-04 \n", - "8 1 3 1 0.00e+00 6.25e-07 fission 5.82e-04 \n", - "9 1 3 1 0.00e+00 6.25e-07 nu-fission 1.42e-03 \n", - "10 1 3 1 6.25e-07 2.00e+01 fission 1.38e-04 \n", - "11 1 3 1 6.25e-07 2.00e+01 nu-fission 3.59e-04 \n", - "12 1 4 1 0.00e+00 6.25e-07 fission 6.88e-04 \n", - "13 1 4 1 0.00e+00 6.25e-07 nu-fission 1.68e-03 \n", - "14 1 4 1 6.25e-07 2.00e+01 fission 1.62e-04 \n", - "15 1 4 1 6.25e-07 2.00e+01 nu-fission 4.22e-04 \n", - "16 1 5 1 0.00e+00 6.25e-07 fission 7.62e-04 \n", - "17 1 5 1 0.00e+00 6.25e-07 nu-fission 1.86e-03 \n", - "18 1 5 1 6.25e-07 2.00e+01 fission 1.80e-04 \n", - "19 1 5 1 6.25e-07 2.00e+01 nu-fission 4.71e-04 \n", + "0 1 1 1 0.00e+00 6.25e-07 fission 2.34e-04 \n", + "1 1 1 1 0.00e+00 6.25e-07 nu-fission 5.71e-04 \n", + "2 1 1 1 6.25e-07 2.00e+01 fission 7.03e-05 \n", + "3 1 1 1 6.25e-07 2.00e+01 nu-fission 1.87e-04 \n", + "4 1 2 1 0.00e+00 6.25e-07 fission 3.67e-04 \n", + "5 1 2 1 0.00e+00 6.25e-07 nu-fission 8.94e-04 \n", + "6 1 2 1 6.25e-07 2.00e+01 fission 1.04e-04 \n", + "7 1 2 1 6.25e-07 2.00e+01 nu-fission 2.76e-04 \n", + "8 1 3 1 0.00e+00 6.25e-07 fission 6.04e-04 \n", + "9 1 3 1 0.00e+00 6.25e-07 nu-fission 1.47e-03 \n", + "10 1 3 1 6.25e-07 2.00e+01 fission 1.41e-04 \n", + "11 1 3 1 6.25e-07 2.00e+01 nu-fission 3.72e-04 \n", + "12 1 4 1 0.00e+00 6.25e-07 fission 6.45e-04 \n", + "13 1 4 1 0.00e+00 6.25e-07 nu-fission 1.57e-03 \n", + "14 1 4 1 6.25e-07 2.00e+01 fission 1.82e-04 \n", + "15 1 4 1 6.25e-07 2.00e+01 nu-fission 4.76e-04 \n", + "16 1 5 1 0.00e+00 6.25e-07 fission 7.28e-04 \n", + "17 1 5 1 0.00e+00 6.25e-07 nu-fission 1.77e-03 \n", + "18 1 5 1 6.25e-07 2.00e+01 fission 1.81e-04 \n", + "19 1 5 1 6.25e-07 2.00e+01 nu-fission 4.72e-04 \n", "\n", " std. dev. \n", " \n", - "0 3.06e-05 \n", - "1 7.46e-05 \n", - "2 5.15e-06 \n", - "3 1.28e-05 \n", - "4 3.09e-05 \n", - "5 7.54e-05 \n", - "6 5.08e-06 \n", - "7 1.34e-05 \n", - "8 5.00e-05 \n", - "9 1.22e-04 \n", - "10 1.03e-05 \n", - "11 2.54e-05 \n", - "12 4.25e-05 \n", - "13 1.04e-04 \n", - "14 7.43e-06 \n", - "15 1.93e-05 \n", - "16 5.69e-05 \n", - "17 1.39e-04 \n", - "18 8.16e-06 \n", - "19 2.08e-05 " + "0 3.54e-05 \n", + "1 8.62e-05 \n", + "2 7.05e-06 \n", + "3 1.76e-05 \n", + "4 3.61e-05 \n", + "5 8.80e-05 \n", + "6 5.36e-06 \n", + "7 1.40e-05 \n", + "8 5.57e-05 \n", + "9 1.36e-04 \n", + "10 6.69e-06 \n", + "11 1.82e-05 \n", + "12 4.59e-05 \n", + "13 1.12e-04 \n", + "14 9.37e-06 \n", + "15 2.47e-05 \n", + "16 7.49e-05 \n", + "17 1.83e-04 \n", + "18 1.04e-05 \n", + "19 2.67e-05 " ] }, "execution_count": 25, @@ -1135,9 +1120,9 @@ "outputs": [ { "data": { - "image/png": "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\nhnwAAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1160,7 +1145,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 27, @@ -1169,9 +1154,9 @@ }, { "data": { - "image/png": "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\nqJlZov8PnPpCLiDrzj8AAAAASUVORK5CYII=\n", + "image/png": "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\nTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1259,72 +1244,72 @@ " 10000\n", " U-235\n", " scatter-Y0,0\n", - " 3.77e-02\n", - " 6.49e-04\n", + " 3.86e-02\n", + " 1.11e-03\n", " \n", " \n", " 1\n", " 10000\n", " U-235\n", " scatter-Y1,-1\n", - " 2.54e-04\n", - " 1.81e-04\n", + " 2.75e-04\n", + " 2.96e-04\n", " \n", " \n", " 2\n", " 10000\n", " U-235\n", " scatter-Y1,0\n", - " 3.65e-05\n", - " 2.70e-04\n", + " -5.55e-05\n", + " 4.33e-04\n", " \n", " \n", " 3\n", " 10000\n", " U-235\n", " scatter-Y1,1\n", - " -1.70e-04\n", - " 2.19e-04\n", + " -4.22e-04\n", + " 3.51e-04\n", " \n", " \n", " 4\n", " 10000\n", " U-235\n", " scatter-Y2,-2\n", - " 7.47e-05\n", - " 1.54e-04\n", + " 5.88e-05\n", + " 2.04e-04\n", " \n", " \n", " 5\n", " 10000\n", " U-235\n", " scatter-Y2,-1\n", - " -2.35e-04\n", - " 1.34e-04\n", + " 1.00e-04\n", + " 2.49e-04\n", " \n", " \n", " 6\n", " 10000\n", " U-235\n", " scatter-Y2,0\n", - " -5.51e-05\n", - " 1.79e-04\n", + " -8.09e-05\n", + " 1.59e-04\n", " \n", " \n", " 7\n", " 10000\n", " U-235\n", " scatter-Y2,1\n", - " -1.27e-04\n", - " 1.54e-04\n", + " 1.93e-04\n", + " 2.14e-04\n", " \n", " \n", " 8\n", " 10000\n", " U-235\n", " scatter-Y2,2\n", - " 1.72e-04\n", - " 1.40e-04\n", + " 1.12e-04\n", + " 1.86e-04\n", " \n", " \n", " 9\n", @@ -1332,71 +1317,71 @@ " U-238\n", " scatter-Y0,0\n", " 2.34e+00\n", - " 7.62e-03\n", + " 1.34e-02\n", " \n", " \n", " 10\n", " 10000\n", " U-238\n", " scatter-Y1,-1\n", - " 2.46e-02\n", - " 1.71e-03\n", + " 2.32e-02\n", + " 2.97e-03\n", " \n", " \n", " 11\n", " 10000\n", " U-238\n", " scatter-Y1,0\n", - " 1.15e-03\n", - " 2.17e-03\n", + " 7.50e-04\n", + " 2.55e-03\n", " \n", " \n", " 12\n", " 10000\n", " U-238\n", " scatter-Y1,1\n", - " -2.39e-02\n", - " 2.15e-03\n", + " -2.73e-02\n", + " 3.28e-03\n", " \n", " \n", " 13\n", " 10000\n", " U-238\n", " scatter-Y2,-2\n", - " -3.92e-03\n", - " 1.38e-03\n", + " -2.36e-03\n", + " 1.21e-03\n", " \n", " \n", " 14\n", " 10000\n", " U-238\n", " scatter-Y2,-1\n", - " -1.19e-03\n", - " 1.58e-03\n", + " -1.80e-04\n", + " 1.49e-03\n", " \n", " \n", " 15\n", " 10000\n", " U-238\n", " scatter-Y2,0\n", - " 3.22e-03\n", - " 1.45e-03\n", + " 3.23e-03\n", + " 2.25e-03\n", " \n", " \n", " 16\n", " 10000\n", " U-238\n", " scatter-Y2,1\n", - " 1.27e-04\n", - " 9.70e-04\n", + " 3.75e-03\n", + " 1.97e-03\n", " \n", " \n", " 17\n", " 10000\n", " U-238\n", " scatter-Y2,2\n", - " -2.70e-03\n", - " 1.21e-03\n", + " 2.07e-03\n", + " 1.60e-03\n", " \n", " \n", "\n", @@ -1404,24 +1389,24 @@ ], "text/plain": [ " cell nuclide score mean std. dev.\n", - "0 10000 U-235 scatter-Y0,0 3.77e-02 6.49e-04\n", - "1 10000 U-235 scatter-Y1,-1 2.54e-04 1.81e-04\n", - "2 10000 U-235 scatter-Y1,0 3.65e-05 2.70e-04\n", - "3 10000 U-235 scatter-Y1,1 -1.70e-04 2.19e-04\n", - "4 10000 U-235 scatter-Y2,-2 7.47e-05 1.54e-04\n", - "5 10000 U-235 scatter-Y2,-1 -2.35e-04 1.34e-04\n", - "6 10000 U-235 scatter-Y2,0 -5.51e-05 1.79e-04\n", - "7 10000 U-235 scatter-Y2,1 -1.27e-04 1.54e-04\n", - "8 10000 U-235 scatter-Y2,2 1.72e-04 1.40e-04\n", - "9 10000 U-238 scatter-Y0,0 2.34e+00 7.62e-03\n", - "10 10000 U-238 scatter-Y1,-1 2.46e-02 1.71e-03\n", - "11 10000 U-238 scatter-Y1,0 1.15e-03 2.17e-03\n", - "12 10000 U-238 scatter-Y1,1 -2.39e-02 2.15e-03\n", - "13 10000 U-238 scatter-Y2,-2 -3.92e-03 1.38e-03\n", - "14 10000 U-238 scatter-Y2,-1 -1.19e-03 1.58e-03\n", - "15 10000 U-238 scatter-Y2,0 3.22e-03 1.45e-03\n", - "16 10000 U-238 scatter-Y2,1 1.27e-04 9.70e-04\n", - "17 10000 U-238 scatter-Y2,2 -2.70e-03 1.21e-03" + "0 10000 U-235 scatter-Y0,0 3.86e-02 1.11e-03\n", + "1 10000 U-235 scatter-Y1,-1 2.75e-04 2.96e-04\n", + "2 10000 U-235 scatter-Y1,0 -5.55e-05 4.33e-04\n", + "3 10000 U-235 scatter-Y1,1 -4.22e-04 3.51e-04\n", + "4 10000 U-235 scatter-Y2,-2 5.88e-05 2.04e-04\n", + "5 10000 U-235 scatter-Y2,-1 1.00e-04 2.49e-04\n", + "6 10000 U-235 scatter-Y2,0 -8.09e-05 1.59e-04\n", + "7 10000 U-235 scatter-Y2,1 1.93e-04 2.14e-04\n", + "8 10000 U-235 scatter-Y2,2 1.12e-04 1.86e-04\n", + "9 10000 U-238 scatter-Y0,0 2.34e+00 1.34e-02\n", + "10 10000 U-238 scatter-Y1,-1 2.32e-02 2.97e-03\n", + "11 10000 U-238 scatter-Y1,0 7.50e-04 2.55e-03\n", + "12 10000 U-238 scatter-Y1,1 -2.73e-02 3.28e-03\n", + "13 10000 U-238 scatter-Y2,-2 -2.36e-03 1.21e-03\n", + "14 10000 U-238 scatter-Y2,-1 -1.80e-04 1.49e-03\n", + "15 10000 U-238 scatter-Y2,0 3.23e-03 2.25e-03\n", + "16 10000 U-238 scatter-Y2,1 3.75e-03 1.97e-03\n", + "17 10000 U-238 scatter-Y2,2 2.07e-03 1.60e-03" ] }, "execution_count": 29, @@ -1455,8 +1440,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.00121338 0.00761835]\n", - " [ 0.00013952 0.00064888]]]\n" + "[[[ 0.00159927 0.01341406]\n", + " [ 0.00018637 0.00111048]]]\n" ] } ], @@ -1524,13 +1509,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.03284934]]]\n" + "[[[ 0.05767856]]]\n" ] } ], "source": [ "# Get the relative error for the scattering reaction rates in\n", - "# the first 30 distribcell instances \n", + "# the first 10 distribcell instances \n", "data = tally.get_values(scores=['scatter'], filters=['distribcell'],\n", " filter_bins=[(i,) for i in range(10)], value='rel_err')\n", "print(data)" @@ -1569,141 +1554,141 @@ " 558\n", " 279\n", " absorption\n", - " 7.14e-05\n", - " 8.26e-06\n", + " 8.19e-05\n", + " 7.82e-06\n", " \n", " \n", " 559\n", " 279\n", " scatter\n", - " 1.25e-02\n", - " 5.75e-04\n", + " 1.33e-02\n", + " 6.19e-04\n", " \n", " \n", " 560\n", " 280\n", " absorption\n", - " 8.50e-05\n", - " 6.16e-06\n", + " 1.00e-04\n", + " 7.93e-06\n", " \n", " \n", " 561\n", " 280\n", " scatter\n", - " 1.38e-02\n", - " 4.58e-04\n", + " 1.40e-02\n", + " 5.61e-04\n", " \n", " \n", " 562\n", " 281\n", " absorption\n", - " 1.04e-04\n", - " 7.54e-06\n", + " 9.52e-05\n", + " 7.08e-06\n", " \n", " \n", " 563\n", " 281\n", " scatter\n", - " 1.55e-02\n", - " 4.15e-04\n", + " 1.51e-02\n", + " 6.50e-04\n", " \n", " \n", " 564\n", " 282\n", " absorption\n", - " 1.22e-04\n", - " 9.98e-06\n", + " 9.85e-05\n", + " 9.47e-06\n", " \n", " \n", " 565\n", " 282\n", " scatter\n", - " 1.68e-02\n", - " 5.73e-04\n", + " 1.53e-02\n", + " 4.63e-04\n", " \n", " \n", " 566\n", " 283\n", " absorption\n", - " 1.14e-04\n", - " 8.02e-06\n", + " 1.08e-04\n", + " 1.34e-05\n", " \n", " \n", " 567\n", " 283\n", " scatter\n", - " 1.66e-02\n", - " 5.44e-04\n", + " 1.65e-02\n", + " 7.04e-04\n", " \n", " \n", " 568\n", " 284\n", " absorption\n", - " 1.06e-04\n", - " 8.37e-06\n", + " 1.13e-04\n", + " 7.91e-06\n", " \n", " \n", " 569\n", " 284\n", " scatter\n", - " 1.64e-02\n", - " 5.14e-04\n", + " 1.67e-02\n", + " 5.51e-04\n", " \n", " \n", " 570\n", " 285\n", " absorption\n", " 1.23e-04\n", - " 9.19e-06\n", + " 9.53e-06\n", " \n", " \n", " 571\n", " 285\n", " scatter\n", - " 1.70e-02\n", - " 5.34e-04\n", + " 1.88e-02\n", + " 7.25e-04\n", " \n", " \n", " 572\n", " 286\n", " absorption\n", - " 1.14e-04\n", - " 6.70e-06\n", + " 1.44e-04\n", + " 1.34e-05\n", " \n", " \n", " 573\n", " 286\n", " scatter\n", - " 1.75e-02\n", - " 5.68e-04\n", + " 1.90e-02\n", + " 7.07e-04\n", " \n", " \n", " 574\n", " 287\n", " absorption\n", - " 1.14e-04\n", - " 8.10e-06\n", + " 1.26e-04\n", + " 8.66e-06\n", " \n", " \n", " 575\n", " 287\n", " scatter\n", - " 1.72e-02\n", - " 4.93e-04\n", + " 1.97e-02\n", + " 7.23e-04\n", " \n", " \n", " 576\n", " 288\n", " absorption\n", - " 1.06e-04\n", - " 1.07e-05\n", + " 1.25e-04\n", + " 9.59e-06\n", " \n", " \n", " 577\n", " 288\n", " scatter\n", - " 1.72e-02\n", - " 7.73e-04\n", + " 2.01e-02\n", + " 6.75e-04\n", " \n", " \n", "\n", @@ -1711,26 +1696,26 @@ ], "text/plain": [ " distribcell score mean std. dev.\n", - "558 279 absorption 7.14e-05 8.26e-06\n", - "559 279 scatter 1.25e-02 5.75e-04\n", - "560 280 absorption 8.50e-05 6.16e-06\n", - "561 280 scatter 1.38e-02 4.58e-04\n", - "562 281 absorption 1.04e-04 7.54e-06\n", - "563 281 scatter 1.55e-02 4.15e-04\n", - "564 282 absorption 1.22e-04 9.98e-06\n", - "565 282 scatter 1.68e-02 5.73e-04\n", - "566 283 absorption 1.14e-04 8.02e-06\n", - "567 283 scatter 1.66e-02 5.44e-04\n", - "568 284 absorption 1.06e-04 8.37e-06\n", - "569 284 scatter 1.64e-02 5.14e-04\n", - "570 285 absorption 1.23e-04 9.19e-06\n", - "571 285 scatter 1.70e-02 5.34e-04\n", - "572 286 absorption 1.14e-04 6.70e-06\n", - "573 286 scatter 1.75e-02 5.68e-04\n", - "574 287 absorption 1.14e-04 8.10e-06\n", - "575 287 scatter 1.72e-02 4.93e-04\n", - "576 288 absorption 1.06e-04 1.07e-05\n", - "577 288 scatter 1.72e-02 7.73e-04" + "558 279 absorption 8.19e-05 7.82e-06\n", + "559 279 scatter 1.33e-02 6.19e-04\n", + "560 280 absorption 1.00e-04 7.93e-06\n", + "561 280 scatter 1.40e-02 5.61e-04\n", + "562 281 absorption 9.52e-05 7.08e-06\n", + "563 281 scatter 1.51e-02 6.50e-04\n", + "564 282 absorption 9.85e-05 9.47e-06\n", + "565 282 scatter 1.53e-02 4.63e-04\n", + "566 283 absorption 1.08e-04 1.34e-05\n", + "567 283 scatter 1.65e-02 7.04e-04\n", + "568 284 absorption 1.13e-04 7.91e-06\n", + "569 284 scatter 1.67e-02 5.51e-04\n", + "570 285 absorption 1.23e-04 9.53e-06\n", + "571 285 scatter 1.88e-02 7.25e-04\n", + "572 286 absorption 1.44e-04 1.34e-05\n", + "573 286 scatter 1.90e-02 7.07e-04\n", + "574 287 absorption 1.26e-04 8.66e-06\n", + "575 287 scatter 1.97e-02 7.23e-04\n", + "576 288 absorption 1.25e-04 9.59e-06\n", + "577 288 scatter 2.01e-02 6.75e-04" ] }, "execution_count": 33, @@ -1806,357 +1791,357 @@ " \n", " \n", " \n", - " 0\n", + " 558\n", " 10003\n", " 0\n", " 10001\n", - " 0\n", " 16\n", + " 9\n", " 0\n", " 10002\n", " 10000\n", - " 0\n", + " 279\n", " absorption\n", - " 1.30e-04\n", - " 8.67e-06\n", + " 8.19e-05\n", + " 7.82e-06\n", " \n", " \n", - " 1\n", + " 559\n", " 10003\n", " 0\n", " 10001\n", - " 0\n", " 16\n", + " 9\n", " 0\n", " 10002\n", " 10000\n", - " 0\n", + " 279\n", " scatter\n", - " 1.98e-02\n", + " 1.33e-02\n", + " 6.19e-04\n", + " \n", + " \n", + " 560\n", + " 10003\n", + " 0\n", + " 10001\n", + " 16\n", + " 8\n", + " 0\n", + " 10002\n", + " 10000\n", + " 280\n", + " absorption\n", + " 1.00e-04\n", + " 7.93e-06\n", + " \n", + " \n", + " 561\n", + " 10003\n", + " 0\n", + " 10001\n", + " 16\n", + " 8\n", + " 0\n", + " 10002\n", + " 10000\n", + " 280\n", + " scatter\n", + " 1.40e-02\n", + " 5.61e-04\n", + " \n", + " \n", + " 562\n", + " 10003\n", + " 0\n", + " 10001\n", + " 16\n", + " 7\n", + " 0\n", + " 10002\n", + " 10000\n", + " 281\n", + " absorption\n", + " 9.52e-05\n", + " 7.08e-06\n", + " \n", + " \n", + " 563\n", + " 10003\n", + " 0\n", + " 10001\n", + " 16\n", + " 7\n", + " 0\n", + " 10002\n", + " 10000\n", + " 281\n", + " scatter\n", + " 1.51e-02\n", " 6.50e-04\n", " \n", " \n", - " 2\n", + " 564\n", " 10003\n", " 0\n", " 10001\n", - " 0\n", - " 15\n", - " 0\n", - " 10002\n", - " 10000\n", - " 1\n", - " absorption\n", - " 2.24e-04\n", - " 1.44e-05\n", - " \n", - " \n", - " 3\n", - " 10003\n", - " 0\n", - " 10001\n", - " 0\n", - " 15\n", - " 0\n", - " 10002\n", - " 10000\n", - " 1\n", - " scatter\n", - " 3.00e-02\n", - " 8.80e-04\n", - " \n", - " \n", - " 4\n", - " 10003\n", - " 0\n", - " 10001\n", - " 0\n", - " 14\n", - " 0\n", - " 10002\n", - " 10000\n", - " 2\n", - " absorption\n", - " 3.16e-04\n", - " 2.15e-05\n", - " \n", - " \n", - " 5\n", - " 10003\n", - " 0\n", - " 10001\n", - " 0\n", - " 14\n", - " 0\n", - " 10002\n", - " 10000\n", - " 2\n", - " scatter\n", - " 3.90e-02\n", - " 1.25e-03\n", - " \n", - " \n", - " 6\n", - " 10003\n", - " 0\n", - " 10001\n", - " 0\n", - " 13\n", - " 0\n", - " 10002\n", - " 10000\n", - " 3\n", - " absorption\n", - " 3.78e-04\n", - " 1.45e-05\n", - " \n", - " \n", - " 7\n", - " 10003\n", - " 0\n", - " 10001\n", - " 0\n", - " 13\n", - " 0\n", - " 10002\n", - " 10000\n", - " 3\n", - " scatter\n", - " 4.86e-02\n", - " 1.24e-03\n", - " \n", - " \n", - " 8\n", - " 10003\n", - " 0\n", - " 10001\n", - " 0\n", - " 12\n", - " 0\n", - " 10002\n", - " 10000\n", - " 4\n", - " absorption\n", - " 4.21e-04\n", - " 2.14e-05\n", - " \n", - " \n", - " 9\n", - " 10003\n", - " 0\n", - " 10001\n", - " 0\n", - " 12\n", - " 0\n", - " 10002\n", - " 10000\n", - " 4\n", - " scatter\n", - " 5.52e-02\n", - " 9.85e-04\n", - " \n", - " \n", - " 10\n", - " 10003\n", - " 0\n", - " 10001\n", - " 0\n", - " 11\n", - " 0\n", - " 10002\n", - " 10000\n", - " 5\n", - " absorption\n", - " 4.86e-04\n", - " 2.62e-05\n", - " \n", - " \n", - " 11\n", - " 10003\n", - " 0\n", - " 10001\n", - " 0\n", - " 11\n", - " 0\n", - " 10002\n", - " 10000\n", - " 5\n", - " scatter\n", - " 6.30e-02\n", - " 1.35e-03\n", - " \n", - " \n", - " 12\n", - " 10003\n", - " 0\n", - " 10001\n", - " 0\n", - " 10\n", - " 0\n", - " 10002\n", - " 10000\n", + " 16\n", " 6\n", - " absorption\n", - " 5.30e-04\n", - " 1.92e-05\n", - " \n", - " \n", - " 13\n", - " 10003\n", - " 0\n", - " 10001\n", - " 0\n", - " 10\n", " 0\n", " 10002\n", " 10000\n", + " 282\n", + " absorption\n", + " 9.85e-05\n", + " 9.47e-06\n", + " \n", + " \n", + " 565\n", + " 10003\n", + " 0\n", + " 10001\n", + " 16\n", " 6\n", - " scatter\n", - " 6.93e-02\n", - " 1.30e-03\n", - " \n", - " \n", - " 14\n", - " 10003\n", - " 0\n", - " 10001\n", - " 0\n", - " 9\n", " 0\n", " 10002\n", " 10000\n", - " 7\n", + " 282\n", + " scatter\n", + " 1.53e-02\n", + " 4.63e-04\n", + " \n", + " \n", + " 566\n", + " 10003\n", + " 0\n", + " 10001\n", + " 16\n", + " 5\n", + " 0\n", + " 10002\n", + " 10000\n", + " 283\n", " absorption\n", - " 5.86e-04\n", - " 2.02e-05\n", + " 1.08e-04\n", + " 1.34e-05\n", " \n", " \n", - " 15\n", + " 567\n", " 10003\n", " 0\n", " 10001\n", - " 0\n", - " 9\n", + " 16\n", + " 5\n", " 0\n", " 10002\n", " 10000\n", - " 7\n", + " 283\n", " scatter\n", - " 7.57e-02\n", - " 1.40e-03\n", + " 1.65e-02\n", + " 7.04e-04\n", " \n", " \n", - " 16\n", + " 568\n", " 10003\n", " 0\n", " 10001\n", - " 0\n", - " 8\n", + " 16\n", + " 4\n", " 0\n", " 10002\n", " 10000\n", - " 8\n", + " 284\n", " absorption\n", - " 6.30e-04\n", - " 2.35e-05\n", + " 1.13e-04\n", + " 7.91e-06\n", " \n", " \n", - " 17\n", + " 569\n", " 10003\n", " 0\n", " 10001\n", - " 0\n", - " 8\n", + " 16\n", + " 4\n", " 0\n", " 10002\n", " 10000\n", - " 8\n", + " 284\n", " scatter\n", - " 8.09e-02\n", - " 1.49e-03\n", + " 1.67e-02\n", + " 5.51e-04\n", " \n", " \n", - " 18\n", + " 570\n", " 10003\n", " 0\n", " 10001\n", - " 0\n", - " 7\n", + " 16\n", + " 3\n", " 0\n", " 10002\n", " 10000\n", - " 9\n", + " 285\n", " absorption\n", - " 7.10e-04\n", - " 2.23e-05\n", + " 1.23e-04\n", + " 9.53e-06\n", " \n", " \n", - " 19\n", + " 571\n", " 10003\n", " 0\n", " 10001\n", - " 0\n", - " 7\n", + " 16\n", + " 3\n", " 0\n", " 10002\n", " 10000\n", - " 9\n", + " 285\n", " scatter\n", - " 8.94e-02\n", - " 1.37e-03\n", + " 1.88e-02\n", + " 7.25e-04\n", + " \n", + " \n", + " 572\n", + " 10003\n", + " 0\n", + " 10001\n", + " 16\n", + " 2\n", + " 0\n", + " 10002\n", + " 10000\n", + " 286\n", + " absorption\n", + " 1.44e-04\n", + " 1.34e-05\n", + " \n", + " \n", + " 573\n", + " 10003\n", + " 0\n", + " 10001\n", + " 16\n", + " 2\n", + " 0\n", + " 10002\n", + " 10000\n", + " 286\n", + " scatter\n", + " 1.90e-02\n", + " 7.07e-04\n", + " \n", + " \n", + " 574\n", + " 10003\n", + " 0\n", + " 10001\n", + " 16\n", + " 1\n", + " 0\n", + " 10002\n", + " 10000\n", + " 287\n", + " absorption\n", + " 1.26e-04\n", + " 8.66e-06\n", + " \n", + " \n", + " 575\n", + " 10003\n", + " 0\n", + " 10001\n", + " 16\n", + " 1\n", + " 0\n", + " 10002\n", + " 10000\n", + " 287\n", + " scatter\n", + " 1.97e-02\n", + " 7.23e-04\n", + " \n", + " \n", + " 576\n", + " 10003\n", + " 0\n", + " 10001\n", + " 16\n", + " 0\n", + " 0\n", + " 10002\n", + " 10000\n", + " 288\n", + " absorption\n", + " 1.25e-04\n", + " 9.59e-06\n", + " \n", + " \n", + " 577\n", + " 10003\n", + " 0\n", + " 10001\n", + " 16\n", + " 0\n", + " 0\n", + " 10002\n", + " 10000\n", + " 288\n", + " scatter\n", + " 2.01e-02\n", + " 6.75e-04\n", " \n", " \n", "\n", "
" ], "text/plain": [ - " level 1 level 2 level 3 distribcell score \\\n", - " cell univ lat cell univ \n", - " id id id x y z id id \n", - "0 10003 0 10001 0 16 0 10002 10000 0 absorption \n", - "1 10003 0 10001 0 16 0 10002 10000 0 scatter \n", - "2 10003 0 10001 0 15 0 10002 10000 1 absorption \n", - "3 10003 0 10001 0 15 0 10002 10000 1 scatter \n", - "4 10003 0 10001 0 14 0 10002 10000 2 absorption \n", - "5 10003 0 10001 0 14 0 10002 10000 2 scatter \n", - "6 10003 0 10001 0 13 0 10002 10000 3 absorption \n", - "7 10003 0 10001 0 13 0 10002 10000 3 scatter \n", - "8 10003 0 10001 0 12 0 10002 10000 4 absorption \n", - "9 10003 0 10001 0 12 0 10002 10000 4 scatter \n", - "10 10003 0 10001 0 11 0 10002 10000 5 absorption \n", - "11 10003 0 10001 0 11 0 10002 10000 5 scatter \n", - "12 10003 0 10001 0 10 0 10002 10000 6 absorption \n", - "13 10003 0 10001 0 10 0 10002 10000 6 scatter \n", - "14 10003 0 10001 0 9 0 10002 10000 7 absorption \n", - "15 10003 0 10001 0 9 0 10002 10000 7 scatter \n", - "16 10003 0 10001 0 8 0 10002 10000 8 absorption \n", - "17 10003 0 10001 0 8 0 10002 10000 8 scatter \n", - "18 10003 0 10001 0 7 0 10002 10000 9 absorption \n", - "19 10003 0 10001 0 7 0 10002 10000 9 scatter \n", + " level 1 level 2 level 3 distribcell score \\\n", + " cell univ lat cell univ \n", + " id id id x y z id id \n", + "558 10003 0 10001 16 9 0 10002 10000 279 absorption \n", + "559 10003 0 10001 16 9 0 10002 10000 279 scatter \n", + "560 10003 0 10001 16 8 0 10002 10000 280 absorption \n", + "561 10003 0 10001 16 8 0 10002 10000 280 scatter \n", + "562 10003 0 10001 16 7 0 10002 10000 281 absorption \n", + "563 10003 0 10001 16 7 0 10002 10000 281 scatter \n", + "564 10003 0 10001 16 6 0 10002 10000 282 absorption \n", + "565 10003 0 10001 16 6 0 10002 10000 282 scatter \n", + "566 10003 0 10001 16 5 0 10002 10000 283 absorption \n", + "567 10003 0 10001 16 5 0 10002 10000 283 scatter \n", + "568 10003 0 10001 16 4 0 10002 10000 284 absorption \n", + "569 10003 0 10001 16 4 0 10002 10000 284 scatter \n", + "570 10003 0 10001 16 3 0 10002 10000 285 absorption \n", + "571 10003 0 10001 16 3 0 10002 10000 285 scatter \n", + "572 10003 0 10001 16 2 0 10002 10000 286 absorption \n", + "573 10003 0 10001 16 2 0 10002 10000 286 scatter \n", + "574 10003 0 10001 16 1 0 10002 10000 287 absorption \n", + "575 10003 0 10001 16 1 0 10002 10000 287 scatter \n", + "576 10003 0 10001 16 0 0 10002 10000 288 absorption \n", + "577 10003 0 10001 16 0 0 10002 10000 288 scatter \n", "\n", - " mean std. dev. \n", - " \n", - " \n", - "0 1.30e-04 8.67e-06 \n", - "1 1.98e-02 6.50e-04 \n", - "2 2.24e-04 1.44e-05 \n", - "3 3.00e-02 8.80e-04 \n", - "4 3.16e-04 2.15e-05 \n", - "5 3.90e-02 1.25e-03 \n", - "6 3.78e-04 1.45e-05 \n", - "7 4.86e-02 1.24e-03 \n", - "8 4.21e-04 2.14e-05 \n", - "9 5.52e-02 9.85e-04 \n", - "10 4.86e-04 2.62e-05 \n", - "11 6.30e-02 1.35e-03 \n", - "12 5.30e-04 1.92e-05 \n", - "13 6.93e-02 1.30e-03 \n", - "14 5.86e-04 2.02e-05 \n", - "15 7.57e-02 1.40e-03 \n", - "16 6.30e-04 2.35e-05 \n", - "17 8.09e-02 1.49e-03 \n", - "18 7.10e-04 2.23e-05 \n", - "19 8.94e-02 1.37e-03 " + " mean std. dev. \n", + " \n", + " \n", + "558 8.19e-05 7.82e-06 \n", + "559 1.33e-02 6.19e-04 \n", + "560 1.00e-04 7.93e-06 \n", + "561 1.40e-02 5.61e-04 \n", + "562 9.52e-05 7.08e-06 \n", + "563 1.51e-02 6.50e-04 \n", + "564 9.85e-05 9.47e-06 \n", + "565 1.53e-02 4.63e-04 \n", + "566 1.08e-04 1.34e-05 \n", + "567 1.65e-02 7.04e-04 \n", + "568 1.13e-04 7.91e-06 \n", + "569 1.67e-02 5.51e-04 \n", + "570 1.23e-04 9.53e-06 \n", + "571 1.88e-02 7.25e-04 \n", + "572 1.44e-04 1.34e-05 \n", + "573 1.90e-02 7.07e-04 \n", + "574 1.26e-04 8.66e-06 \n", + "575 1.97e-02 7.23e-04 \n", + "576 1.25e-04 9.59e-06 \n", + "577 2.01e-02 6.75e-04 " ] }, "execution_count": 34, @@ -2169,7 +2154,7 @@ "df = tally.get_pandas_dataframe(summary=su, nuclides=False)\n", "\n", "# Print the last twenty rows in the dataframe\n", - "df.head(20)" + "df.tail(20)" ] }, { @@ -2209,38 +2194,38 @@ " \n", " \n", " mean\n", - " 4.15e-04\n", - " 1.71e-05\n", + " 4.19e-04\n", + " 2.24e-05\n", " \n", " \n", " std\n", - " 2.41e-04\n", - " 6.82e-06\n", + " 2.42e-04\n", + " 9.14e-06\n", " \n", " \n", " min\n", - " 1.78e-05\n", - " 2.81e-06\n", + " 1.90e-05\n", + " 3.44e-06\n", " \n", " \n", " 25%\n", - " 2.06e-04\n", - " 1.16e-05\n", + " 2.02e-04\n", + " 1.56e-05\n", " \n", " \n", " 50%\n", - " 4.03e-04\n", - " 1.71e-05\n", + " 4.05e-04\n", + " 2.20e-05\n", " \n", " \n", " 75%\n", - " 6.05e-04\n", - " 2.19e-05\n", + " 6.07e-04\n", + " 2.89e-05\n", " \n", " \n", " max\n", - " 9.35e-04\n", - " 4.54e-05\n", + " 9.19e-04\n", + " 4.95e-05\n", " \n", " \n", "\n", @@ -2251,13 +2236,13 @@ " \n", " \n", "count 2.89e+02 2.89e+02\n", - "mean 4.15e-04 1.71e-05\n", - "std 2.41e-04 6.82e-06\n", - "min 1.78e-05 2.81e-06\n", - "25% 2.06e-04 1.16e-05\n", - "50% 4.03e-04 1.71e-05\n", - "75% 6.05e-04 2.19e-05\n", - "max 9.35e-04 4.54e-05" + "mean 4.19e-04 2.24e-05\n", + "std 2.42e-04 9.14e-06\n", + "min 1.90e-05 3.44e-06\n", + "25% 2.02e-04 1.56e-05\n", + "50% 4.05e-04 2.20e-05\n", + "75% 6.07e-04 2.89e-05\n", + "max 9.19e-04 4.95e-05" ] }, "execution_count": 35, @@ -2292,15 +2277,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "Mann-Whitney Test p-value: 1.39844745394e-41\n" + "Mann-Whitney Test p-value: 0.607166663014\n" ] } ], "source": [ - "# Extract tally data from pins in the pins divided along y=x diagonal \n", + "# Extract tally data from pins in the pins divided along y=-x diagonal\n", "multi_index = ('level 2', 'lat',)\n", - "lower = df[df[multi_index + ('x',)] + df[multi_index + ('y',)] < 16]\n", - "upper = df[df[multi_index + ('x',)] + df[multi_index + ('y',)] > 16]\n", + "lower = df[df[multi_index + ('x',)] > df[multi_index + ('y',)]]\n", + "upper = df[df[multi_index + ('x',)] < df[multi_index + ('y',)]]\n", "lower = lower[lower['score'] == 'absorption']\n", "upper = upper[upper['score'] == 'absorption']\n", "\n", @@ -2330,15 +2315,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "Mann-Whitney Test p-value: 0.902458041178\n" + "Mann-Whitney Test p-value: 1.2077327566e-41\n" ] } ], "source": [ - "# Extract tally data from pins in the pins divided along y=-x diagonal\n", + "# Extract tally data from pins in the pins divided along y=x diagonal \n", "multi_index = ('level 2', 'lat',)\n", - "lower = df[df[multi_index + ('x',)] > df[multi_index + ('y',)]]\n", - "upper = df[df[multi_index + ('x',)] < df[multi_index + ('y',)]]\n", + "lower = df[df[multi_index + ('x',)] + df[multi_index + ('y',)] < 16]\n", + "upper = df[df[multi_index + ('x',)] + df[multi_index + ('y',)] > 16]\n", "lower = lower[lower['score'] == 'absorption']\n", "upper = upper[upper['score'] == 'absorption']\n", "\n", @@ -2376,7 +2361,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 38, @@ -2385,9 +2370,9 @@ }, { "data": { - "image/png": "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\nphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRo\nRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkphRoRESkpuoWaMxs\njpndaWY/MbMeM+ssU+5sM3vIzH5qZpcltn/SzHaa2QNm9s9m1jF5tRcRkUrVs0WzBrjL3Y8Fvglc\nXlrAzGYBNwFvAE4AVpjZceHlO4ET3H0x8HDa/o1m+/bt9a5CRVTP6mmEOoLqWW2NUs9qqWegOQ/4\nTPj5M8Cfp5Q5DXjY3Xe7+wFga9gPd7/L3Q+Gct8DjqhxfWuuUf7zqZ7V0wh1BNWz2hqlntVSz0Dz\nUnd/CsDdnwRemlLmcGBP4vljYVup9wJfr3oNRURkwmbX8uBm9g3gkOQmwIH/kVLcx3mOvwUOuPuW\n8ewvIiK1Ze7jur5P/MRmO4Hl7v6Umb0M6HX340vKLAOucvezw/M1gLv7teH5u4ELgNe5+74RzlWf\nNyki0uDc3SZ6jJq2aEbxFeDdwLXAXwJfTimzAzjazOYDTwDvAFZAlI0GfBj4ryMFGajOByUiIuNT\nzxbNXOCfgCOB3cDb3f23ZnYosNHd/yyUOxu4kWg8aZO7XxO2PwxkgF+FQ37P3S+a5LchIiKjqFug\nERGRmWHarAwwlSeAljtnSZl1ZvZwOP/isexb73qa2RFm9k0z+7GZ/dDMLp6K9Uy8NsvM7jOzr0zV\neppZp5l9Lvyf/LGZvXKK1vODZvYjM3vQzG43s0w96mhmx5rZf5rZ82b2N2PZdyrUc6r9DY30eYbX\nx/Y35O7T4kE01vOR8PNlwDUpZWYBjwDzgWbgAeC48NqZwKzw8zXA/65SvcqeM1HmHOBfw8+vJOoG\nrGjfKn5+E6nny4DF4ec24CdTsZ6J1z8I/CPwlRr+f5xQPYHNwHvCz7OBjqlWT+Aw4FEgE55vA95V\npzr+EfBfgLXA34xl3ylSz6n2N5Raz8TrY/obmjYtGqbuBNCy5yyp+22hHvcAnWZ2SIX7Vsu46+nu\nT7r7A2H7c8BO0uc71bWeEH1zBM4F/qFG9ZtwPUNr+rXufmt47QV3/91Uq2d4rQloNbPZQAvwy3rU\n0d2fdvd7gRfGuu9UqOdU+xsa4fMc19/QdAo0U3UCaCXnLFem0vpWw3jq+XhpGTNbACwG7ql6DdPr\nMNZ63kCUrVjrwcmJ1PMo4GkzuzV0T2wws/xUq6e7/xK4HvhF2PZbd7+rTnWsxb5jVZVzTZG/oZGM\n+W+ooQKNmX0j9AXHjx+Gf9+cUryRJ4A2ZDq2mbUBnwcuCd/KphQzeyPwVPjmaEzdz3k2sBT4O3df\nCvyBaG3AKcXMuoi+Cc8n6kZrM7O/qG+tGtt0/Ruq5zyaMXP3s8q9ZmZPhW6ceALoQEqxx4F5iedH\nhG3xMd5N1CR8XXVqPPo5E2WOTCmTqWDfaplIPQldJ58HPuvuaXOipkI93wq82czOBfJAu5nd5u7v\nmmL1BNjj7t8PP3+eaNyxFiZSzzOBR9391wBm9gXg1UC1v6RVUsda7DtWEzrXFPsbKuc1jOdvqBaD\nTfV4ECUDXBZ+LpcM0ERhECxDNAh2fHjtbODHwEuqXK+y50yUOZfCYOsyCoOto+47FeoZnt8GfGoS\nfs8TqmeizOnUNhlgop/nt4BF4ecrgWunWj2J+vp/COSIvtluBt5fjzomyl4JXDqefetZz7BtyvwN\njVTPxGsV/w3V9A1N5gOYC9xFlK1xJ9AVth8K/Eui3NmhzMPAmsT2h4kmjt4XHjdXsW7DzgmsAt6X\nKHNT+OX/AFg6Wn1r9BmOtZ5LwrbXAC+G/7D3h8/v7ClUz6Upx6hpoKnC7/0UopUxHgC+AHRO0Xpe\nSTRw/SBREk5zPepItKbiHuC3wK+Jxo3ayu1br8+yXD2n2t/QSJ9n4hgV/w1pwqaIiNRUQyUDiIhI\n41GgERGRmlKgERGRmlKgERGRmlKgERGRmlKgERGRmlKgERGRmlKgERGRmlKgEakSM5sfblR2q0U3\n4PtHM3u9md0dnv+xmbWY2SYz+56Z3Wtmb0rs+x9m9v3wWBa2n25mvYmboH22vu9SZOy0MoBIlZjZ\nfKIlPRa7e7+ZfR94wN3/KgSU9wL9wI/dfYtFd4HtI1oS3oGD7r7fzI4G7nD3U83sdOBLwCuAJ4Hv\nAB9y9/+c/HcoMj4NtXqzSAP4ubv3h59/DPx7+PlHwAKilXLfZGYfDtvjFbqfAG4Kt0l+ETgmccw+\nd38CwMweCMdRoJGGoUAjUl37Ej8fTDw/SPT39gLwFnd/OLmTmV0JPOnuJ5tZE7C3zDFfRH+30mA0\nRiNSXaPdCKoHuHiocNSCAegkatUAvItoKXeRaUGBRqS6vMzP8fO1QHN8h1jg4+G1m4F3m9n9wCLg\n9xUcX6QhKBlARERqSi0aERGpKQUaERGpKQUaERGpKQUaERGpKQUaERGpKQUaERGpKQUaERGpKQUa\nERGpqf8HTKaAIu8FxywAAAAASUVORK5CYII=\n", + "image/png": "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\nulZkiAAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2414,7 +2399,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 39, @@ -2423,9 +2408,9 @@ }, { "data": { - "image/png": "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\n059Yv3498+bNo2/fvgC7+ygKCgooKCige/fuPPnkkwwbNox3332X+fPns2HDBq688koAZs2aRf/+\n/XnuuedYtmwZ69evZ+nSpUXO9eqrr9K3b1/WrVvHOeecQ40aNfj3v//NmjVrmDhxIhMmTGDQoEFF\n9hkzZgzTp09n0qRJ3HPPPVx22WUMHz6cxYsX89lnn/Hcc88l+ldVJkoQIlLp9OnTh8aNG+9+9O/f\nP+Z2tWrVYu7cuaxevZq6dety+OGHF1lfOLEMHz6c6667jpycHOrWrcs//vEPXnjhBXbu3MnIkSM5\n5ZRTOPLII6lRowa33XbbT8515JFH0rt3bwBq165Nly5dOPzwwzEz2rZty6WXXsq7775bZJ+bbrqJ\nevXqccABB3DggQdywgknkJOTw957781JJ53E9OnTK/qrqhAlCBGpdEaNGsWaNWt2P4p/M99lyJAh\nzJkzh44dO9K9e3def/31PR5z6dKl5OTk7H6dk5PD9u3bWbFiBUuXLqVNmza719WpU6fILUyBIusB\nvv76a3r37k2LFi1o2LAht9xyC999912RbZo1a1bkmM2bNy/yeuPGjSX8FpJPCUJEKp14O5fbt2/P\n8OHDWbVqFTfeeCNnnHEGmzZtitmh3bJlSxYt+vFWtosWLaJGjRo0b96cFi1a8O233+5et2nTJlav\nXl1k/+LHvPzyyznggAOYN28e69at484776x099hQghCRKuvZZ5/d/a29QYMGmBkZGRk0bdqUjIwM\n5s2bt3vbs846i3/9618sXLiQjRs3csstt9CvXz8yMjI444wzGD16NJMmTWLbtm0MHDiw1HNv2LCB\nrKws6taty5dffsngwYOTVcykUYIQkbg0b54DWNIewfFLV9pw1sLr33rrLTp37kxWVhbXXnstL7zw\nArVr16ZOnTrccsst9OzZk8aNGzNlyhQuvPBCzjvvPI4++mjat29P3bp1efDBBwHo1KkTDz30EL/7\n3e9o2bIlWVlZNGvWjNq1a+8xjvvuu49nn32WrKwsLrvsMvr161diOcoyTDdVknrLUTNrDQwDmgM7\ngcfd/UEzawS8AOQAC4G+7r4+xv665ajolqMR0C1HS/b999/TsGFD5s6dW6TfItUq+y1HtwPXuXtn\n4Eigv5l1BP4CjHP3/YEJwF+THIeISIW89tprbNq0ie+//57rr7+egw46KNLkkApJTRDuvtzdPw2f\n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\n", + "image/png": "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\ng/YIuXYBdJEAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/pythonapi/examples/post-processing.ipynb b/docs/source/pythonapi/examples/post-processing.ipynb index 130e44cf4d..e735003cfa 100644 --- a/docs/source/pythonapi/examples/post-processing.ipynb +++ b/docs/source/pythonapi/examples/post-processing.ipynb @@ -20,9 +20,6 @@ "import matplotlib.pyplot as plt\n", "\n", "import openmc\n", - "from openmc.statepoint import StatePoint\n", - "from openmc.source import Source\n", - "from openmc.stats import Box\n", "\n", "%matplotlib inline" ] @@ -273,9 +270,11 @@ "settings_file.batches = batches\n", "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", - "source_bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", - "settings_file.source = Source(space=Box(\n", - " source_bounds[:3], source_bounds[3:]))\n", + "\n", + "# Create an initial uniform spatial source distribution over fissionable zones\n", + "bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", + "uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True)\n", + "settings_file.source = openmc.source.Source(space=uniform_dist)\n", "\n", "# Export to \"settings.xml\"\n", "settings_file.export_to_xml()" @@ -350,7 +349,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ADFxIxKlK6Ha4AAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDMtMjNUMTQ6NDk6\nNDEtMDQ6MDA8VgV/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAzLTIzVDE0OjQ5OjQxLTA0OjAw\nTQu9wwAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AECBAFHJ/0NHcAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDQtMDhUMTI6MDU6\nMjgtMDQ6MDCheDXLAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA0LTA4VDEyOjA1OjI4LTA0OjAw\n0CWNdwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -460,10 +459,9 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", - " Date/Time: 2016-03-23 14:49:42\n", + " Git SHA1: 9a6ecd72597338b40d2b72378e5ad6dd65df2364\n", + " Date/Time: 2016-04-08 12:05:28\n", " MPI Processes: 1\n", - " OpenMP Threads: 16\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -490,106 +488,106 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 1.03019 \n", - " 2/1 1.06141 \n", - " 3/1 1.03988 \n", - " 4/1 1.02696 \n", - " 5/1 1.06159 \n", - " 6/1 1.03855 \n", - " 7/1 1.03452 \n", - " 8/1 1.04526 \n", - " 9/1 1.02137 \n", - " 10/1 1.02129 \n", - " 11/1 1.04810 \n", - " 12/1 1.00454 1.02632 +/- 0.02178\n", - " 13/1 1.06176 1.03813 +/- 0.01725\n", - " 14/1 1.02927 1.03592 +/- 0.01240\n", - " 15/1 1.06158 1.04105 +/- 0.01089\n", - " 16/1 1.02692 1.03870 +/- 0.00920\n", - " 17/1 1.06703 1.04274 +/- 0.00876\n", - " 18/1 1.02341 1.04033 +/- 0.00797\n", - " 19/1 1.06256 1.04280 +/- 0.00745\n", - " 20/1 1.04829 1.04335 +/- 0.00668\n", - " 21/1 1.01742 1.04099 +/- 0.00649\n", - " 22/1 1.01629 1.03893 +/- 0.00627\n", - " 23/1 1.01145 1.03682 +/- 0.00614\n", - " 24/1 1.05042 1.03779 +/- 0.00577\n", - " 25/1 1.02543 1.03696 +/- 0.00543\n", - " 26/1 1.04643 1.03756 +/- 0.00512\n", - " 27/1 1.03020 1.03712 +/- 0.00483\n", - " 28/1 1.04088 1.03733 +/- 0.00456\n", - " 29/1 1.03885 1.03741 +/- 0.00431\n", - " 30/1 1.05497 1.03829 +/- 0.00418\n", - " 31/1 1.01946 1.03739 +/- 0.00408\n", - " 32/1 1.07049 1.03890 +/- 0.00417\n", - " 33/1 1.05920 1.03978 +/- 0.00408\n", - " 34/1 1.04910 1.04017 +/- 0.00393\n", - " 35/1 1.03827 1.04009 +/- 0.00377\n", - " 36/1 1.08004 1.04163 +/- 0.00393\n", - " 37/1 1.05729 1.04221 +/- 0.00383\n", - " 38/1 1.00328 1.04082 +/- 0.00394\n", - " 39/1 1.04603 1.04100 +/- 0.00381\n", - " 40/1 1.03193 1.04070 +/- 0.00369\n", - " 41/1 1.05548 1.04117 +/- 0.00360\n", - " 42/1 1.03566 1.04100 +/- 0.00349\n", - " 43/1 1.02848 1.04062 +/- 0.00340\n", - " 44/1 1.01806 1.03996 +/- 0.00337\n", - " 45/1 1.05404 1.04036 +/- 0.00330\n", - " 46/1 1.06319 1.04099 +/- 0.00327\n", - " 47/1 1.03238 1.04076 +/- 0.00318\n", - " 48/1 1.07148 1.04157 +/- 0.00320\n", - " 49/1 1.06016 1.04205 +/- 0.00316\n", - " 50/1 1.02051 1.04151 +/- 0.00312\n", - " 51/1 1.04903 1.04169 +/- 0.00305\n", - " 52/1 1.06004 1.04213 +/- 0.00301\n", - " 53/1 1.04790 1.04226 +/- 0.00294\n", - " 54/1 1.03742 1.04215 +/- 0.00288\n", - " 55/1 1.05670 1.04248 +/- 0.00283\n", - " 56/1 1.02739 1.04215 +/- 0.00279\n", - " 57/1 1.03133 1.04192 +/- 0.00274\n", - " 58/1 1.00078 1.04106 +/- 0.00281\n", - " 59/1 1.06328 1.04151 +/- 0.00279\n", - " 60/1 1.02275 1.04114 +/- 0.00276\n", - " 61/1 1.04295 1.04117 +/- 0.00271\n", - " 62/1 1.06079 1.04155 +/- 0.00268\n", - " 63/1 1.02148 1.04117 +/- 0.00266\n", - " 64/1 1.04801 1.04130 +/- 0.00261\n", - " 65/1 1.03501 1.04119 +/- 0.00257\n", - " 66/1 1.07021 1.04170 +/- 0.00257\n", - " 67/1 1.01764 1.04128 +/- 0.00256\n", - " 68/1 1.02806 1.04105 +/- 0.00253\n", - " 69/1 1.01645 1.04064 +/- 0.00252\n", - " 70/1 1.03971 1.04062 +/- 0.00248\n", - " 71/1 1.06581 1.04103 +/- 0.00247\n", - " 72/1 1.03359 1.04091 +/- 0.00243\n", - " 73/1 1.02155 1.04061 +/- 0.00241\n", - " 74/1 1.06730 1.04102 +/- 0.00241\n", - " 75/1 1.03557 1.04094 +/- 0.00238\n", - " 76/1 1.03795 1.04089 +/- 0.00234\n", - " 77/1 1.02976 1.04073 +/- 0.00231\n", - " 78/1 1.02257 1.04046 +/- 0.00229\n", - " 79/1 1.05500 1.04067 +/- 0.00227\n", - " 80/1 1.03306 1.04056 +/- 0.00224\n", - " 81/1 1.04693 1.04065 +/- 0.00221\n", - " 82/1 1.02975 1.04050 +/- 0.00218\n", - " 83/1 1.07900 1.04103 +/- 0.00222\n", - " 84/1 1.02915 1.04087 +/- 0.00219\n", - " 85/1 1.03153 1.04074 +/- 0.00217\n", - " 86/1 1.05792 1.04097 +/- 0.00215\n", - " 87/1 1.06045 1.04122 +/- 0.00214\n", - " 88/1 1.08821 1.04182 +/- 0.00219\n", - " 89/1 1.08077 1.04232 +/- 0.00222\n", - " 90/1 1.06569 1.04261 +/- 0.00221\n", - " 91/1 1.04921 1.04269 +/- 0.00219\n", - " 92/1 1.04849 1.04276 +/- 0.00216\n", - " 93/1 1.06074 1.04298 +/- 0.00215\n", - " 94/1 1.04030 1.04295 +/- 0.00212\n", - " 95/1 1.03190 1.04282 +/- 0.00210\n", - " 96/1 1.04525 1.04285 +/- 0.00207\n", - " 97/1 1.08086 1.04328 +/- 0.00210\n", - " 98/1 1.04070 1.04325 +/- 0.00207\n", - " 99/1 1.05730 1.04341 +/- 0.00206\n", - " 100/1 1.05036 1.04349 +/- 0.00203\n", + " 1/1 1.04359 \n", + " 2/1 1.04244 \n", + " 3/1 1.03020 \n", + " 4/1 1.03630 \n", + " 5/1 1.06478 \n", + " 6/1 1.05450 \n", + " 7/1 1.02369 \n", + " 8/1 1.03614 \n", + " 9/1 1.05193 \n", + " 10/1 1.02886 \n", + " 11/1 1.05011 \n", + " 12/1 1.04597 1.04804 +/- 0.00207\n", + " 13/1 1.07035 1.05548 +/- 0.00753\n", + " 14/1 1.06150 1.05698 +/- 0.00554\n", + " 15/1 1.07094 1.05977 +/- 0.00512\n", + " 16/1 1.05131 1.05836 +/- 0.00441\n", + " 17/1 1.04733 1.05679 +/- 0.00405\n", + " 18/1 1.08130 1.05985 +/- 0.00465\n", + " 19/1 1.02559 1.05605 +/- 0.00560\n", + " 20/1 1.03399 1.05384 +/- 0.00547\n", + " 21/1 1.04617 1.05314 +/- 0.00500\n", + " 22/1 1.06981 1.05453 +/- 0.00477\n", + " 23/1 1.05270 1.05439 +/- 0.00439\n", + " 24/1 1.02487 1.05228 +/- 0.00458\n", + " 25/1 1.05905 1.05273 +/- 0.00429\n", + " 26/1 1.07658 1.05422 +/- 0.00428\n", + " 27/1 1.03455 1.05307 +/- 0.00418\n", + " 28/1 1.00971 1.05066 +/- 0.00462\n", + " 29/1 1.06111 1.05121 +/- 0.00440\n", + " 30/1 1.01777 1.04954 +/- 0.00450\n", + " 31/1 1.04718 1.04942 +/- 0.00428\n", + " 32/1 1.03340 1.04870 +/- 0.00415\n", + " 33/1 1.04570 1.04857 +/- 0.00397\n", + " 34/1 1.02728 1.04768 +/- 0.00390\n", + " 35/1 1.02852 1.04691 +/- 0.00382\n", + " 36/1 1.03242 1.04636 +/- 0.00371\n", + " 37/1 1.01479 1.04519 +/- 0.00376\n", + " 38/1 1.06045 1.04573 +/- 0.00366\n", + " 39/1 1.03810 1.04547 +/- 0.00354\n", + " 40/1 1.05281 1.04571 +/- 0.00343\n", + " 41/1 1.03941 1.04551 +/- 0.00332\n", + " 42/1 1.04049 1.04535 +/- 0.00322\n", + " 43/1 1.04586 1.04537 +/- 0.00312\n", + " 44/1 1.05437 1.04563 +/- 0.00304\n", + " 45/1 1.03445 1.04531 +/- 0.00297\n", + " 46/1 1.05104 1.04547 +/- 0.00289\n", + " 47/1 1.00773 1.04445 +/- 0.00299\n", + " 48/1 1.06879 1.04509 +/- 0.00298\n", + " 49/1 1.06625 1.04564 +/- 0.00295\n", + " 50/1 1.02641 1.04515 +/- 0.00292\n", + " 51/1 1.05701 1.04544 +/- 0.00286\n", + " 52/1 1.02868 1.04504 +/- 0.00282\n", + " 53/1 1.04592 1.04506 +/- 0.00275\n", + " 54/1 1.05757 1.04535 +/- 0.00271\n", + " 55/1 1.02329 1.04486 +/- 0.00269\n", + " 56/1 1.04116 1.04478 +/- 0.00263\n", + " 57/1 1.01990 1.04425 +/- 0.00263\n", + " 58/1 1.06202 1.04462 +/- 0.00260\n", + " 59/1 1.03550 1.04443 +/- 0.00255\n", + " 60/1 1.01383 1.04382 +/- 0.00258\n", + " 61/1 1.04111 1.04377 +/- 0.00253\n", + " 62/1 1.02061 1.04332 +/- 0.00252\n", + " 63/1 1.00456 1.04259 +/- 0.00257\n", + " 64/1 1.02277 1.04222 +/- 0.00255\n", + " 65/1 1.04544 1.04228 +/- 0.00251\n", + " 66/1 1.04487 1.04233 +/- 0.00246\n", + " 67/1 1.02699 1.04206 +/- 0.00243\n", + " 68/1 1.06160 1.04240 +/- 0.00241\n", + " 69/1 1.02989 1.04218 +/- 0.00238\n", + " 70/1 1.03107 1.04200 +/- 0.00235\n", + " 71/1 1.06571 1.04239 +/- 0.00234\n", + " 72/1 1.03444 1.04226 +/- 0.00231\n", + " 73/1 1.05059 1.04239 +/- 0.00228\n", + " 74/1 1.03352 1.04225 +/- 0.00224\n", + " 75/1 1.03707 1.04217 +/- 0.00221\n", + " 76/1 1.02994 1.04199 +/- 0.00219\n", + " 77/1 1.05416 1.04217 +/- 0.00216\n", + " 78/1 1.03794 1.04211 +/- 0.00213\n", + " 79/1 1.04652 1.04217 +/- 0.00210\n", + " 80/1 1.05715 1.04239 +/- 0.00208\n", + " 81/1 1.08146 1.04294 +/- 0.00212\n", + " 82/1 1.02159 1.04264 +/- 0.00211\n", + " 83/1 1.01968 1.04233 +/- 0.00211\n", + " 84/1 1.05577 1.04251 +/- 0.00209\n", + " 85/1 1.07808 1.04298 +/- 0.00211\n", + " 86/1 1.03943 1.04293 +/- 0.00209\n", + " 87/1 1.03431 1.04282 +/- 0.00206\n", + " 88/1 1.02414 1.04258 +/- 0.00205\n", + " 89/1 1.02316 1.04234 +/- 0.00204\n", + " 90/1 1.03342 1.04223 +/- 0.00202\n", + " 91/1 1.02781 1.04205 +/- 0.00200\n", + " 92/1 1.01293 1.04169 +/- 0.00201\n", + " 93/1 1.04347 1.04171 +/- 0.00198\n", + " 94/1 1.05357 1.04186 +/- 0.00196\n", + " 95/1 1.04740 1.04192 +/- 0.00194\n", + " 96/1 1.05215 1.04204 +/- 0.00192\n", + " 97/1 1.06667 1.04232 +/- 0.00192\n", + " 98/1 1.04926 1.04240 +/- 0.00190\n", + " 99/1 1.05386 1.04253 +/- 0.00188\n", + " 100/1 1.05088 1.04262 +/- 0.00186\n", " Creating state point statepoint.100.h5...\n", "\n", " ===========================================================================\n", @@ -599,27 +597,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.3200E-01 seconds\n", - " Reading cross sections = 1.7200E-01 seconds\n", - " Total time in simulation = 4.5299E+01 seconds\n", - " Time in transport only = 4.3964E+01 seconds\n", - " Time in inactive batches = 1.2390E+00 seconds\n", - " Time in active batches = 4.4060E+01 seconds\n", - " Time synchronizing fission bank = 2.3000E-02 seconds\n", - " Sampling source sites = 1.5000E-02 seconds\n", - " SEND/RECV source sites = 8.0000E-03 seconds\n", - " Time accumulating tallies = 2.7000E-02 seconds\n", - " Total time for finalization = 3.0800E-01 seconds\n", - " Total time elapsed = 4.6175E+01 seconds\n", - " Calculation Rate (inactive) = 40355.1 neutrons/second\n", - " Calculation Rate (active) = 10213.3 neutrons/second\n", + " Total time for initialization = 5.3700E-01 seconds\n", + " Reading cross sections = 1.4300E-01 seconds\n", + " Total time in simulation = 4.3618E+02 seconds\n", + " Time in transport only = 4.3609E+02 seconds\n", + " Time in inactive batches = 1.5047E+01 seconds\n", + " Time in active batches = 4.2113E+02 seconds\n", + " Time synchronizing fission bank = 2.4000E-02 seconds\n", + " Sampling source sites = 1.6000E-02 seconds\n", + " SEND/RECV source sites = 6.0000E-03 seconds\n", + " Time accumulating tallies = 4.0000E-02 seconds\n", + " Total time for finalization = 2.5600E-01 seconds\n", + " Total time elapsed = 4.3701E+02 seconds\n", + " Calculation Rate (inactive) = 3322.92 neutrons/second\n", + " Calculation Rate (active) = 1068.56 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.04225 +/- 0.00171\n", - " k-effective (Track-length) = 1.04349 +/- 0.00203\n", - " k-effective (Absorption) = 1.04192 +/- 0.00172\n", - " Combined k-effective = 1.04213 +/- 0.00141\n", + " k-effective (Collision) = 1.04214 +/- 0.00161\n", + " k-effective (Track-length) = 1.04262 +/- 0.00186\n", + " k-effective (Absorption) = 1.04338 +/- 0.00158\n", + " Combined k-effective = 1.04278 +/- 0.00122\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -664,7 +662,7 @@ "outputs": [], "source": [ "# Load the statepoint file\n", - "sp = StatePoint('statepoint.100.h5')" + "sp = openmc.StatePoint('statepoint.100.h5')" ] }, { @@ -719,18 +717,18 @@ { "data": { "text/plain": [ - "array([[[ 0.41161103, 0. ]],\n", + "array([[[ 0.40945685, 0. ]],\n", "\n", - " [[ 0.41135796, 0. ]],\n", + " [[ 0.40939021, 0. ]],\n", "\n", - " [[ 0.41058715, 0. ]],\n", + " [[ 0.410625 , 0. ]],\n", "\n", " ..., \n", - " [[ 0.40919256, 0. ]],\n", + " [[ 0.41130501, 0. ]],\n", "\n", - " [[ 0.41057119, 0. ]],\n", + " [[ 0.41228849, 0. ]],\n", "\n", - " [[ 0.41225079, 0. ]]])" + " [[ 0.41420317, 0. ]]])" ] }, "execution_count": 20, @@ -766,30 +764,30 @@ { "data": { "text/plain": [ - "(array([[[ 0.00457346, 0. ]],\n", + "(array([[[ 0.00454952, 0. ]],\n", " \n", - " [[ 0.00457064, 0. ]],\n", + " [[ 0.00454878, 0. ]],\n", " \n", - " [[ 0.00456208, 0. ]],\n", + " [[ 0.0045625 , 0. ]],\n", " \n", " ..., \n", - " [[ 0.00454658, 0. ]],\n", + " [[ 0.00457006, 0. ]],\n", " \n", - " [[ 0.0045619 , 0. ]],\n", + " [[ 0.00458098, 0. ]],\n", " \n", - " [[ 0.00458056, 0. ]]]),\n", - " array([[[ 1.92422804e-05, 0.00000000e+00]],\n", + " [[ 0.00460226, 0. ]]]),\n", + " array([[[ 1.64748193e-05, 0.00000000e+00]],\n", " \n", - " [[ 1.58028832e-05, 0.00000000e+00]],\n", + " [[ 1.70922989e-05, 0.00000000e+00]],\n", " \n", - " [[ 1.56204065e-05, 0.00000000e+00]],\n", + " [[ 1.67622385e-05, 0.00000000e+00]],\n", " \n", " ..., \n", - " [[ 1.98926652e-05, 0.00000000e+00]],\n", + " [[ 1.69274948e-05, 0.00000000e+00]],\n", " \n", - " [[ 1.70440988e-05, 0.00000000e+00]],\n", + " [[ 1.57842763e-05, 0.00000000e+00]],\n", " \n", - " [[ 2.05592499e-05, 0.00000000e+00]]]))" + " [[ 2.06590062e-05, 0.00000000e+00]]]))" ] }, "execution_count": 21, @@ -869,7 +867,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 24, @@ -878,9 +876,9 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW0AAAC4CAYAAAAohb0KAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XmQpPd93/f3cz993z099z07O3vfi8WxAHEQPARSvEQ6\nUiwfFaUiWZadqsiR4siWE1eOspSSLSmWrURlqkJJpiiKIAkQAHEDu1jsvbM7szM799E93dP39fRz\n5o9BUK4Kqyyb4mJZ7FdV/9FdXfN7euZbn3n69/x+30fwPI+urq6urh8P4kd9AF1dXV1df3Xd0O7q\n6ur6MdIN7a6urq4fI93Q7urq6vox0g3trq6urh8j3dDu6urq+jHyQ4W2IAjPCoIwLwjCgiAIv/rX\ndVBdXR+1bm13PaiE/9x12oIgiMAC8CSwDbwPfNnzvPm/vsPr6rr/urXd9SD7Yc60TwOLnueteZ5n\nAX8CfOav57C6uj5S3druemD9MKHdD2z8B883P3itq+vHXbe2ux5Y8o96AEEQuvvku36kPM8TPopx\nu7Xd9aP2g2r7hwntLWDoP3g+8MFr/z8Tv/5F+Ee/zs/5vkpFiHLJPU1MqnBYuMkpLnGFk1goDLGO\nRgcVEwkH2bVpEmBDGGLKXiDk1VlQJtkn3GWUZSwUrnOMd5yHect4hOJ2hmC5zeem/5RPLX+XF/7H\na5i/9xu8mzlL3YwgaA7PiC/xj9z/hV+u/Q7PG5/BcjVORd8jrFaZa+3H0mX6tC0+yXcxURFxOcMl\n9pWX6Gvs4EZtHFVkV0zxVelnuS3OIJrw67P/G4eVm3TGRdbVQX79f/IR/o1f5trt01iewszMDRbm\nD7BdHsTrERhMLjMYWKXHy3Onepg7zYM0JB+RUJmg1iCXG0RXm6QiWVLuLgl1l7CvRpkYJioyDnGK\nPF57i/9q+4+gAiV/lP/uz3T++ZdsEq0ixrjE/x7+b3lJe4YD3GY/8/SyTQeNcXsJqePxK6XfZU6Y\note3wW8EfpNRZYVdKUGeFFvWABudIcp6lE1jiIX8AdwLEud4m9988tf4neo/5LJwkkdHX+XF//4K\n6i/9GlP9t9k2e8mbKQZCm1SeT7Hzej/SFxxOzVzkycSL9LNJjDIqJveYwMCHz2vzDe9zbNNHv7BF\noZqi6QQhCGPSEgfE25wQrvC881MseFN8Vv4Lnr3+fU4dv/lDlPAPX9vwGz+K8f8KXgce/wka96Mc\n+6Ma95/+wFd/mNB+H5gQBGEYyAJfBr7yg97YkTQO+RawRJWN9jAbrSF+OvxNDqqziLg8yltsMsBN\nDtPCT5UIedL8Uvv/ZMZdZDkwRk9hl0inxqsDH+OeMoGM9cEHsImIVT6pv4AzIBHoafOI/w3Gk8uQ\n8pACDu3dIOur4/inquzGkuTEDKPBZY75r7DCGKps0MnqFN/IoJ1oUZsO8w4PE6bGEBsoWKwH+9kS\n+zi2dZOw0MAL1ZhOLBDQGqiSRay3gieAJ0JMKCOhsskAD4++geQ53BPHODfyJrGBCh1V42LzYd7N\nPo5qWJyIXuKz6T/jBfNZqlaMZi2ElVVxGjKm6SNfH2T/xCwjp1dJsMsOPdxjEg0DGwUANwMBqU6q\n0SS27CHtePjWbCZOrGBOvM5TvEKRBOsM0cJPRYri6QI9qU1CQpFhb5X99UVkxWI5GqaPLAdzc4Rm\nDf7g2N+infLzmd6vU3sqTG0jyi9+9w/oObHN8clL1KQQA74NHsp8nXelh+jVs5xX3+CYdJWVR8eZ\nPXSIeKrEAf8sR7hOlDJ3mOF1HmeYNXQ6ZOkl30xTF0JIAYfy8yl2in3wLJQTcdaDQ9zRZhAll3Fv\nCRsFc0P9Icr3r6e2u7rut//s0PY8zxEE4ZeAl9ibG/9Dz/PmftB7TRQqRFlniLoUJC6VmKncpVfb\nYSUyjItICz8t/ARoUrGjzJoHaXs+eu0sZ7OXCThNNjoDXL9wAkYdooNlFExapRBWSyOdzrLfd4eD\nvlkG2MIXauEERfJmL2Urjhi1URSLkhDnHR7GUWQmWWSQDULU2RF6sSSNA8JNZriFjzYSNn5arDHM\nujNCzurjffkuk8o9MlqWoFjHaSrM1mc47rtJuFgmcKeJeUgDIMkuD7Xe2wvXgEQoUCfFDqOsoDkd\npLbD5doZwqEap30XUaQOF7cfYXb1KKgiTl6CnEBwso4v0kKjg4eAgo3qmRTcFKvyENuxNIZPBQEs\npYQddlDbNpICriBhI+MhfPBPaB0XEUeQqEshhqUVopTZ5yywofZjyQoOEj7aZNw8A9YOZ7xL9Ekb\n9PpyXPMdY1GYol4OE0mUSfrzNAgQlGr065sf/L1VHEkiQJNYskQmucU+FuhjCw+BMjFcRHrYoUGQ\nPD2UiNMQgzTtAGvNESqxCI4m4Au0MVWFshglIDTRhA6i4O59pt4fzTaD/5Ta7uq6336oOW3P814E\n9v3H3hd47CQFJ41PMPBpbQ4JtxhYyiLrHrlIhh16qBBFwmGUFSTHwWyqtH0qUavEJ9Ze5vbQPuaE\naa69dooR7tE3uEWYGqulSW7nD5P2bdEf3mJEWkUz98LtzOM6f9DopxkIktq3TcotYDkqL/BJMmKW\nMWGZcZbIeT10gj4C+5uc0y/w8dp3EP0u21Ivm8Igsxzk/fZZbrcPoyRanPRd4nH9DYZZZb08wgv5\n5zg4cpNMIcvky01KPUkmH0/hsMZkfgmfa7AaHWZNHqIoJDjLRZ4OvkjUqTCXO4DmdRgSN9inL+AU\ndebnDuGMCngFkLZtej6zRWxyF9cTqRLBQiFBkQV3igVlgvn0GJajggeDnwxSHd5FC1uYmkI9GiJP\nikUmmWSRGe6gYmJaKrtOiqoapd/dZNJe5GvBr2CjMGPfwRIVHL+I0OdySr/EjOfD57bJGn0YAR+n\nP3aJtqhjohKjgnxugGYrgKBAQUrhiQIZcjQJ4HgSflqYaCwzStmLE6XMWfEi3+PjrDCKhYqs2oiu\ny2Z9AM56JLQsfcEsji0huzZxSpSIU/Gi6G4H4cCPbkr5r1rbH52Rn7BxP8qxP6pxf7Af+YVIgPMf\n8zjl/TZFIYGMTY+QJ66UWVMGmWeaXZKYqChYzDONrcg8EXmN0a11/HULIQwj1U2mm/dQ9lvoaYMe\ndtjHXegTMHSdjblhVjNjbPf2c+i9OSJOkydGw7wZmqUTgaDX4CvVr5Pt9PFb4t/nb0f+Daf0S6TJ\n85b1CAvKBB8bfZFHn3+bk/lb8HmPe+l9XNOPoWMwGFwjpe+gyCai6HKNo9zgCO2IjyO+98n6ellJ\njTFxcp1sNIN34GGueCeQh12Mjs53K88yEbpHW/fxr/hFxlimrfmhzyIfSjDHfkLUkQ6ajAvzrP0f\n4xhFP/aYTLbdi99uoMkd5o1pAmKDGXUOU1LR6DDLIR7eeA/B9Zg7f57d22+i2A7Xxw8yFZhjnLtU\niVAiToEUmwxwdGWWse0VLhwTeb70WdbXRijuj+DIMheaj/GzqT8iESlRnyyw5B9F6nicq13iS699\nk7ajo328w7dDz3JJPUmNMMXEeV59rYfC/iSBVBUx5PIWj+IhYKBx2z5IWKwRFOosNcdJiwUOBm6x\nzjCDbPI0L3NFOkHZFyOi1sgJPQTFOue4QHKxQq0d5s2D53A1kUF7k0/UXqGl6vejfB9QIz9h436U\nY39U4/5g9yW0zwjvsU+4y0s8g4dAUtylHVXZaA7y/tJZvIyHHLDQ6NDGx7CxzmPFbzKeW0XedGET\naodDtIZ9ZIJbTKbuMsQ6bXwofpNBVomWKsS0EhUhghcEXBc7KGL5JRTFIkmBQWmdXi/HZ+vPczBw\nhyRF/LTpFXLklByizyaXTrNl9zHdWsA2FbJ6LwoWfqWFKljUG1FE1UH3N4lQpU/bIqXtEqVCJ6Fw\n49BB1iLDVIniCVALBhFUyLRyKIJNiThrDJNil6hSIRPdJqnkkXBYYAotbnB68iLOUZnt9QHaUT+m\nqiALe2eaumgQEFqkhAI1IUyYGgGayKqF60l7v/AGyHWHkNcgVcvj91psB/poqj6qchgVE1uXaIX8\nOJKEq4qIQZcJ+R6RaoPkSpUe/w6a3EHa8RD7XBTbJrBpoCkG7YhGQ/YTE0pMsUALP6/7elnTh7Bq\nGnqoiRbqEKZGiBoKNm3BR4kYq4xSEFN0RB3Pga3cMMgixZ4EM8Jt6mKIe/IkOm38tPcuUGvrhGoN\nlBsW1pBIJFklLFUQSqH7Ub5dXQ+U+xLaR73rFEhxleMYnk6DIKOJFRYr41y5eZYe/wbhQAUVEwWL\n/lqWL83/BaLh4NwVEf/IZe6fTDL/5BjjzHOcywyzxos8S9MLMORbY+LQKwTcJrYr0Tiuowk6Nc/H\njpum7oRQFZNiJMIJ7zq/X/4llpxBSl6EuhDirHIR3TP4E75M6yk/9VaQvq0cWOAgUSCJholow2ph\nkoHQGid873HMvsaguE5S2iVGha1oP9+JPE3VjWI5Cr1iliS7JOQi+4Lz3BCPsMQ4Ii5JdhmUNpgM\nLHCQWYZY5x0eZthd41TqErv/QwLrqkL+Zh/BaIM+eYuD3iwt1Y+EQ5QKYWqkKDDBPayMhInCsLBG\nsF0nWG1yqDIHdRAdl2T/HO2wTEmKEKCJ0y+x3t+HLUrMBG9xvv9V0uSZ3Fpm39IyuyMRZMtBvQx9\nj+wgyi7ulsjC6XHmByZoEmCUFZ7iZVQsStNxFvsmqN1NohkmafKc5hKDbBATyoTkOm9wnr/gp8kE\ncjjIbJjDbNwbI+/LUOsJ8g/5LVRM/jX/NRmyRKmyzhCR0SrneYtP/MXLlB8Jkc/EWIkO0LdQuB/l\n29X1QLkvof2Gc563nUeYVuZZL43ySuGTyEMOcq/FJ/x/SSUWJkWBw9zERiYaLbF8pB/LVfEHDUbW\nNmn2BTFR6WcLB4kdepBwOOtd5BC3MASd2FaNYLbNjemjiGGHhFfk7/CH3BCOcJGzexfxVAsvBnGl\nRNULcpXjIEDJi1Ny4vjENmvaIK/3nSOoVvkSf4qfNu9ziqvKCQ703sCTPebaM9y+cZR0JMf4zAKT\nLJInxbvuOQorfRiCjjxkcFeaRqp4tBdDhEbL+NN1MuQYYp1BNkhQwodBmBonucz1wgnerZ4nOZjl\nzPg76CkLX6zBJItkyJF30hjopOU853mDFn6+ys/xc5tfY9JdRBvu4B1yuWoe4PnocygJi2FvjXO+\nd4lTpGJE+bfu3+Vc6T2ear7KjaHD+PxthlkjT4qLw6e5ph/l0eULGBq8/9hJps0Fwm6NlVN9aJE2\n/WxTJI6FQp4ebGR0wWDYXGV+K4ISsHEHRRaZpEGQXrL0s8V+5kiRZ5lxlhljVR4hcqCIJ0GFCHNM\nI+Lho80+7tJDniJx7gj7qWSijH52jfX4IPNMscA+lEkb+Dv3o4S7uh4Y9yW0q0TooBGnREOMIMgu\nt4WDJPwFkoE8SXYIUUfBJEWBmF6ipEcxUal5NvYnZTaH+yiQwkDHRxvVMVntjJKRcliKTAsfJTtN\nuZ3kYukUfrHB/uBtDoqz9JIlRJ0GQeaVKebCBxiV7wFQJkYLP2VixCijCHvTDKpnMtW5h+XILGgT\n1N0gLdfHoH+dMlE22/20lDA5q4diLsl4cRVfsEMno5O92E/NjaD6WkgBC6et0G5FmLZv0u9tcMK9\ngiqY5MU0vWRJk0fHwEYC0UOyXKq34/jSHWJDWQBa+NmiHxkbSXDYJUEHDREXjQ51KURdCBGgxW4q\nxg0O8QqPc5DbjLSXEbMu24E+lpVxUltF0k6BkL9Gn5Al2qww1NpkIzJILtKD4rPYrcTp6BoL/RPs\nv72II8rcGj1ARsgSo8wOaRoEsVAokmSnncHs6OiJJpFAmRB1Omhs00cLPzHKRCnTiwkINAmwKQ4Q\nTpbR6dDLNjtkqNshymaMlhrAkyFIA13oUA+EeHfiLCuMsswY6wwRi5XvR/l2dT1Q7ktop+U8T8mv\nYKATjxc4G3+LmxymSIx+NnmUt7BQuMBDfJIXiFHGZG8NbqU3wtxPTzPHPlYZYZMBGgTx223eLp2n\nGEyyqyYI0uRC7FFes57By8GEc5dyKEJZiOGnxQx3yJPmlnKIW8pBfpHfo5csKiYr3igVIcoh+RaW\noJA2Cjyyc4mYWOFW4AD/Pv4lbpiH8EwRIejiCBJt2Uf8eJ5mLsL6nXEOX55HGTNYfHaSre+MUjZS\ntMcUhJ4OaEAaPJ9Av7vFf2n/O74lPcd14SjHuMYgG9jI3BCO0pvKctS5zr/+v36J3Ewv7SGNJgFE\nXIJCg145+8GUTYo3OM8UC3yBr7M5MMBVDnOA26wwxi3vIDkyfIGv8/HaSyQu1vnzmee4ndnPr175\nbUJTFYqHw0wzR2qjTHyrxpv7FSTVJa0WWDvdR40INSeE2VBoikku8BA/5T2PT2hRII2MTRsfi0xy\ns3yCdWOY1ENbZJQter0sguCR9XopkeA4V6kJEbL0EqdEiDouIhFqjHirnOAKS4xzx5phsTxFMNbA\nlBXGWOEIN7BQ+Jf8PXJkaONDwGMfd7l0Pwq4q+sBcl9C20GiQhQRhzxplhhngE0MdLL0cZUTdNBY\nZJKLlMmRwU+LOCUEPKpECFFnjGXC1BhkA8eUkfIeGhZOSOZ143FMWeehvjeoJcP4tCYlYrzO4/SS\n5QC3sZHpYYch1hDwKJBGo0POy1AlwmPCmwyzRkotcCuzj1kOcVk+QUWKIJQlaptxrpjn0Psb9I1s\nMSqsYsVUOgd9bPT1sCUO8Obuk+ym03v7514V8CYU6AH8MJZaZsaeI1CxeNJ9iyF1mzvRKb4mfIUa\nYcZZoiJEuR49wtM//V0GwhvEKHKRs+Tp+fDM1kXERqGHHZoE+CN+nioRMuQQcNExSNsFmo0Qr/ue\nIBxu8JnTzyNGbTSrg2B72I5EB5UWfjrhJrLQ4YB2mzxJ2vh4n9OsMUxRTKBNWbQ6Qb6183lSkSJH\nfFeZYoE3OE+ODDPcQY+btMN+Dso3mPP2c52jHOcqz3ReYcxaQ/M3qUph2vg+/KxHuc67nKOnVeBT\n1ZdYj/UzpS4wFl/GVFT8tEmyyyojbNFHmRiHuEWaPDc4Qh/b96N8u7oeKPcltP+/KYgWPtroe6su\n2Eb1TDquhi4aFIQUGiYmKnVCmKhslQcxPB0nKqCIJiFqxCgzzBoNMYRfa6LKHWRsDHQk1SGuFUiy\ng4qJiEOOXvJmD5IBfb5N0soOMSrYyBgffPwh1rFQSLJLijyqbHInOM0cU2zTA3jEpRJBpY1uGvho\nkBB2ONe+iCdCNp2hmdZY2Rph7dYYRIEWe22G6tJeaA+D2OtRjUS4KJ4l4RXBEbjVOsqSOoqimBzg\nNhWiVNUwnx79DlPeInQ8dpUUVS/ChjtEWKqiiR0kHFRMXMQPp59qhFlmnDQ7hMwGT5Zew06IrDGM\nlZPJSDm8sIDWY2CGNVoEkHCw/BJFJUpeSVIkjo3CFv1k6cUSFFaTQ3TaPtyqRJkY684wO2aGopJA\nlF0SFBlUNomINfZZC/hFA08S6CXLEBuMuis4hoCrSBRUlyYBAjQYZJ0h+olSx+cZDLCJK0HL5+OG\nfYQdO02PlCIs1ADoJUsv28SoEKL+4a7Yrq6fJPcltFcZIU6Ju0wzyDrneIkGIabdeR63XyevpLkm\nHMVPiykWCFOjhZ+XVj/FXXOavuNrDIgbjLPEEW4ww22q/gixqTyKaOAXWxz3X2WNYXJkOM5Vesni\np0WNMFeap/nznS/z+f6voSodcmQ49MGuRwOdLwr/Hj8t3ucUWwzQxscS4/SSZYDNvbP1TI6+9DYZ\nsuSFHlpOgE8XvoerwyX9GAIezrYMbwMhYBjYBW4Bc8BJWJkcoT38LN9K/hQz3MEzJP4y/3kmI/Mc\nVm8gCxYSNimnyOnqNSacJZpagI3wLRbdCVY7w6j+DhkxR5g6TQIkKPI0L+/N/xNmkwGyZJi2Fvnd\n4q/wPf/HyJYy+H7f4dhzNznwmduEjhts+Puosbdk0JUF5uR9fI0v00FjHwsf7lj009rrE6LvkNAL\npMlxpzPDH5R/gacjL3NKfg8Jm5PmNQ607yK5Lgl/iXP+tykLMWpakJvSAR4qXaautWmqAQz0vbN4\nEugYuH54y3eGPmGvL4qBzpI5TtbrpehP8jm+wRn21tRvMcACU5ioVIjdj/Lt6nqg3JfQXnpzCvWx\nWc7zBiYqC+xjkA0aQpBL8ml0wWDDGOLN5hPkgz0ogsl6c4il+gQSLnGvRI0wc+zHRubd2qPsmmnM\niEa/uMWksEiIOj7a7NDDGsMA7OMuK4xS8wcZzSwg6g7LjQlu7B5HSTmMBpYQ8LgrTNFj7/Jw+xKK\nYZMXUzSiQSalBQbYop8tXEHElmTuso97nXG2jX7+7+jPklbzmMiUibHmG4Zej+DBKp4fmoUQnAFK\nAuyKtDw/kuBwkFkerr2H01F4P3oayyeyKowg4XDQukOvleON4MO8KDxFXQhxqXOChhjgY/prTIqL\nxCkh4XCXfeySJEmBPrIEaOKjjYiDhoEmdGgJAXb6UhT+bhR9SKUpB1iMRtiR02RJUyWKLhi4jsh6\nY3Rvw07AZMvr50jzFj9f+mN87TZmQGZ3IEpIqNEj56hGI+xX50hQJEsvpqkh1x2owTs9D/Nq4DGG\nWaNP2CYt5VkMjxBotDm9fo3vpD/Ott6Hz23zicbLjBhruKbI/xP8GS5KZ9jpZJB8NgPaJiIu80yz\nTR9rDBH4YNpsigWmawv87v0o4K6uB8h9Ce18sYdhlhlinQZB6oQI0GTHyfBe5yH69E12vAx+p4Xr\niey0Mry/fBbPVugPbTIorHO3Oc2WMUTNiVG1YxiSTlLIMeTtff2uihGiQhnXFrlTPoikuPRHtlix\nRrFEhUPRawSps9EeYc0awXB1AjQJ0KREnLbpY6K4giTYmIrCbrUHn99A1w2ilAGBEnE2GaDj6QRp\ncClwkpRcIEMOCwU7LCFO2ASnq7iSSNMLQR97LYfykPIKDLJJlCoRt4qMw3RwFmyRWKtCQG/i89oI\nwFX9KKvSEGU3zla7n4yYY1K9Rw87RKjiIqJgUSbGBkOkKRCjTIQqNhKeIlCKRqlpQYqxBFfPH6aH\nHQRgxTdKBxUH6YOLei4SLoLjERAbZMjRIMiAu8Up6zI7ZpqOqzKYXceJQcDXpC37GLY2MTo6V9Tj\nrIgj9Eo7xKUSO0KKZcZQMQlRJy6UaOk66dIu6VyJCXkFNbS3CiZgt4haVcJGnYYvSF5IIToeKbFA\nj5Qj5eVxkKkIUUDAY69TZYAmtqvcj/Lt6nqg3JfQ9mZEOmgUSJIhx2O8CcBrjaf5auFv0dO3yanA\nRX5F/Rc4osz7m2d498LHcA57BAeqTIvzrGYn2d4aJtcaZGxqgf0jiyiiyZC1Rq+T5Xvax2kIQTxD\noHwtjZgUWD6SZ6M+yLC0zpnoJWqEqAbD9PtX2CfOcYQbKJisMYzacRCzLq0hjWX/CN9c/iJGr0xv\n7wYz3CFCFQONWxzkpHaZR9R3+IbwOQqkkLE5wg06SY1LR08QiNSx1zW4LEESaO49HrXfZIZZXuEp\nnLC0d4FUuM1DtctMtxe5lxnmBeXjvK08QowyNSJkhQwRfwXwmGcagBhlJByGWMdPi5scQsAjSAMX\ngTJxav4Qc6MTNEU/NcL8GT/DQ1xgkkU2GCRDlv3ME6aGgMeumGBfdI5BNvgCX+eKcJx4qEwxEOJ7\n3hP4tzp8+cKfUzoVRBmy8NNisLFNyUmwGJvCCqq0AyoP977NqLjE47yOgUaDIEUSTLvzZIw8vrLN\nZ71v4wYlOn6V11IP0/D7ON9+i0f8bzGiLBMNVrkrThHzynzJ+jPm5P3kpAwJitzgyIdn3tlwH/Cd\n+1HCXV0PjPsS2qLlMvv+MexphSOh64x7S7xlPsqO3MvjqVeQVBNTUPmW+ByWq5CN9KGcbhHrq5OO\n5PCJbUTTwy3JuFsg9HiEpBojrNBfzBGtNjk4fJv3fKe5YR2llg3TqvpxIwIzsTkmfIuAxy4pLFFl\nQtxbo93CT+aD9qtNX4ArI0fwh+tkKln+8dV/xtLxYUq9e/O+PtpUWxGaC1GiXovHwhfoSezSUTV0\nOliaCCqcj7xBSYmTU/ohJEADRN1G/oTBcGiDxE6VO/oMos8loe4yzTxD7gY+28DwNPxCi5RXYMMb\nxEFiWFgjTQE/LXTaHOYmYWo0CHCV49QIM8E9DHQ2GKSNjxVGQBDwZIEFJtlgEA8Bf6nDvvYSZkol\nr6a4wgmS7CJjYwoK54R3SVGg5fq51DiLJSrkAhle7TxBONggdrjCUmyEDfopkKLmixHzKhwRbyAL\nNovuBBesM9SkCLYoE6eIi8QGg+iigZmcZUDZZkfN4C8YxOerZAO93A7t55vWZ+n3NthnLnK8dpNc\nuBdTUxFll46gca89ybcLn0WJdDB1hbnyIRz/R3Lvg66uj9R9CW22oSQmuGPPQBsajQivG08Q8Vf4\nWOJVIlTJk+YKJ8h6vTTCQUKHyvSrW4yKy/SxTb+2QX9wHdcvMiovc8C6zYHaHQbmtvHnDSZSS9z1\nTdEUA3g6lLIx2i9pjAyvIE56bE4MopkWGWGHjqoi4H04VeOjjakrrPYm6W3Z9NVzzDh/wpw3xTyT\nVInQxE/ViRCotZBcD0eSGYusEBcqxJwK15SD1JUgj8pvcZ2jEBDxj5gUywnafh2mHRxHprYbYaMw\ngj5iEstU0D2T2Y5ExKyDJZCUiySFXa4ZJxBxiUllhpR1kuIuOm1S5AlTJ06RNzlPgxAzzOEh0MaH\nhUKNCG10NhnARMVHGxuZsFUn08nT9lQqRFhlFBEXC4UOGqd4n5S1S7MTZMfspSX6GZVXWbXGMCwN\n2XAoOEkKTordToqQ2uSgfItesnTQWPOG+Zb9HEGhwRAbSNhUiNEUAqiYBMJNUqE8DcuHUfVhOiqq\nbVF1o7wnnuFx4TWmO4uMltbxa21W9CEuSae44x7gpn2EC+1HmQncIuaW2GwOoBvt+1K+XV0PkvsS\n2vb7EuP/YI4drYcLGw/z5vzTNJ0A/YPrrCZG+BJ/xsO8wzGu8XXpCyxKk/i8FpPCIse4xiPu23QG\ndaK9u7Se3Ey0AAAgAElEQVRtP09rL/No423iV+v4XjGwdyX0022mEnd5xP8mxccSNP9Ixvhtge+r\nTxP62TqZf77Bb5b/GWGxxvPpZwlSx0JmjukPNns0GGOZ3uwuvrbB7uejKEGDPrYxUVhkguXAOAdP\nXaeCn38l/gKi7PK48Tafsl7E8HT8tDjAbTQ6HErM4jvZ5hX3SW6Vj1JY6ePi6BlCzSrG7we58VPH\nmT8/g+rayFWXw/Ytfqv2DzBEHxdlnWYxQsmJ09ICnIlfYlhbQ8FkkUkSFDnGNUZZZocMHTT62CZI\nHRcJC5kScRQsTnIZBYs1hvEl6tTiOmG5sndxFZH9zLPMGLMcxEIh1qgyspvlbM8FQmKdnyl9g8Xo\nFC+tPsOf/+5XOPDfXEc64rK1M4KatAmEmx92KNSEDopis1+a5wg3WGeIGiHy9HCbGfZ7c+h2h+nK\nEkuxMd59/BSPOu8y5d2jP7ZJRYySbfdCB3TXYI0hXuUfU3MjeKpI/+gqUamI4Loo8RaVu93VI10/\nee5LaJf8KdwVAWWkQyRawZuoM+rWCETqGGiY7J35+mlidlQ8QaBH3WFUWGG0s0aiViUZ3KXPv4WH\nSBud2+4MqbES20/3kW1nCMTqbDBARYpxNH6N3ie22FHShASD5lSQtcIEX639TUZ9y2hek96NPBGv\nRm6wl4RYxEEkyyCFWA9a0ESI2hiyjo3MJPfwYRASGlzWTlIQkiSFvamNvJrgL51PMbqygu2TmR2a\noUqEopSg7IvtXTgU3qTgZmhE/BSEGIkv5hGnHGxZYWe9H0cVUKPj/Gng88iKSVBs8ET4FYpeAlsS\niUp728KDND5srbrAFCHqjLCCi4SDhPVBe9sD3GajMcT3Nz9Ob2qbycQ8R7lOSK6zwih50mwyQJ40\nOXoBSDt5+ps5qm6MS/HT6HqLpuDnq8G/wWJpCk01mfjpJbSBNlUvhuWqFL0EVSJEqLLJAJvCAFG5\nQlMIsMLo3k0bWjJeQ+GZ+uuctq8hC1CMxVkODjOn78dvGdjI+KQ2AZr49Sa3e6co+BK08dMkQFSs\noAsGpqiy3hnCswWGfWvYg9v8SG421tX1ALsvoZ0a38XclVH668SjRVLRXdLkqdoRttv9VNQoAalB\njTC1aoSWF8SLiZhFjd1Smtvlo2xkRqkkEiiaxYK6jxXfKD3jOyyOT7LJABMsUiVKRYwypK2jHTXp\nTPuJqyW8isTqepz39DM0Aj4e8t5Cqnm0vCAr7ig9Qg4PgUvuadJugYybI0yFOmEcJOKU2MddQm6d\nVWMUy1EZcdc51rlBQU9ySTvO4dwsUsClMhSlg0aRBDc4whO8xj7/XVpDfjYYxAqmGfzCyt60REVD\ndR08v4OeaPJS8GMMSusMs87xyPuYqB9sRqrgfbByIskuxU6SteYoT/lfJqaW2RQGsASZClFsZPrY\nxmcZlIpJ/P4WYhgm5CWKQpw59u8Ft9FDzYog+F1m3DscN24wWMkx55viYvIU+705VuxR/tz7ItVm\ngr7YFg8ff4MdoQevLTLkW0WX23Qcnbbhp6JGMRSNIWlvo9JOp4dYtkqzHsY1VKacewx6WziywpXk\nEZaEcdSWRVmOIsrOhxdXVbFDUY1hiDoSDmHqxCgjC/beP5viIFZd5UByFi1euR/l29X1QLkvof0r\n5/9XbkhHeM93mhB1jnKNMHWuNE8zt3uUQuY1fIE2m94gjfUohU6G98aD3PjmSfRZC13r0Br3YY6p\nCIMe4/3zDMeX2aYPFZM+tqkTQsAlTokNBlnOT3JvaRq518Euy2j3DH7+4X/LVHqOrNDL+xPHWHbG\neNF8lrhaJCZU+Ib5OX75td/jseK71P6Gj7nwfpYZY4XRvb5y1gL/dPt/RqnaqDUT/0aLufFJ7FMS\nAV8Ln9biKNcpEQdgk4G9pYBI9JBjgns0CDLLQbL04oUEHjn8NhGpTEfRuCEeRgA6aJSIM8oKw6xR\nJkaODAY6YyzxqZ0X+Juzf4J+sEGuJ0VTDVAnyDpDXOUEGh3SoTxfOfpVzrbfZ7S6SjXm55Z0iDc4\nT5MAudwA5o7OMzPf4Zx5kcd33iHgtdCUDikKHHOu0Sn62dwcZXxwgUOxqxxgllGWaWs3MNI6J6XL\nlJsJfn/t7/NYz6s8lXqZXVLYSOzupHnxD55jmwF8+1v8xflPI0Q6HLFu8lX35xjKb/Kr9X+BGrVo\nR1TywRgv8AmEsshnbr/AyswYm5l+Omhs2gM0vCBhtYZ3R6Y2l+Da1Bm0idb9KN+urgfKfQntt+zz\n5NQUliCj00Gng4GOqnYYjKyQl1PImKiCydHMNTSzzbw2SezADv5km4oWpbYSonEnAgpMxW8TokaR\nJIe5yTBrvM0jtPHhtURWrk2yVR7GEPywC7raJDazyw39EEv5MXZ3ejgweoNwpMZZ+yIBsUXUrvLz\nrT/mZO0a8c0q+tsGXnOJRLmK4fnomdwhNVHG9ks0tBDZ8AArgRGWU6MU5DiTA8tElQoKFgmKjLFM\nCx8BWh/2TWmy1152mDUG2cAntekPbCHg0cZHhAogELBbDFU2MVSNtfAwMjY1wuy2kpz89jXGjXWi\nkzUqup+6FGZNGMZHGxeJJgEAokaVJ7bfYGp3CVFxWQ30Y/tkNDoUSWCGZMClo2gUxCRL8WECQgu9\nY/DYwrtEemv0Bzb5dM9fYoUlAloTAagQI9hucT7/fS4HjvNa9Qm2rgySP9FDLpWhRIKde71sXBph\n524GY9CHFLJYCwxxIXiGrJ1hzRmiLob4S+XTjPhXSSgFFK/DYmsKx1M41D9Lv7bJc/Vv0yqGuBI5\nyk4wyQBbvJr/OG5W5aGH3mbNHabb56/rJ819Ce3v156ijcKwvIYs2tTcCLutFE3RT398jaIQR6XD\nuLDEocFrBNwqti1w4JFZQlKdTQaY/dpxGnMRaEHYqpOmQAf9w97UKuZez5KORnkhgYEPZdTEbiqo\nQRPfZIMLxkOwLRJabXM8fpkjwZucVt7DJxgkvRLn7MsEpBay6RKebaNvbzKQy6K4FmLZxVB0Fo6M\nsB4eYJUR3uMMOTLI2Ozru0sf27Two9EhSYETXKGNnyhlhlnnGkdpEGSQDSJU8dNExMXpKAhOiQP6\nbRpiEMdSOL1zjQuRM7wZepSjznV0wUAyXFLfLBOKN2k+4yMX7mFb7qVEnDF7hYRXIi6XiAllBjub\nDGa3CS42aYp+rD4VKemgqwa2JyPFLOTY3lK/dWEANwBRKoxtrHE4e5tSMMRAcp2fGfpjvu89RdWK\nsmyOc0+dYNxcYf/uAn/s/Be8XHwG45bG2tAwCm00Oty+c5i5tw8h+Wz04RbqcIeimOSKd5IFbR8e\nsCYP8XvKL/CM73uclC8z4q2y08lQUFO8O3WaT9RfZKp4Dzev0uPPsq2kybBDVh7EjiicG30Tu/oE\ns/ejgLu6HiD3JbSfCb/It8zn6PHyeAjMmgeYu3WEuj+Avr/BjHwHSdhrgJQnTUbI8ffkf0ldCFEj\nTIg6WwdG2YyPQggsTUHF5DhXKbC3+y5FARWTnVCGqU/dZpckRSHJ7u1emrthHFHm4MA1Toxf5qG+\nixxtzxIvFWmkNRxEOorOjfh+JmOr9Kd3YD/sPJmkGg6S8bIEbxuYdxS2pvophePI2IyxTIAmLfyo\nmDQJsMXeV/oYZSa4h5/W3gU2WhgfLMkbZIMsvawygojLiewN9tUWMCZl7vnGqboxnJqEpSi4rsiR\n6h1CSpW8kCAVKlCNB1mJD7Ao791B5lHe4kBlgZoXpp3QCQoNQuEqbx07y8kr1xm9tcaZyFUuHnuI\nS0OnadoBbE8mJuwtq/QLLXZIs0U/5XSMTkBlMrfCqLWBOtzh694XeafyKG8sP404ZkLEY3t/ilH5\nHieb7/Nu83HyZpo023yab1NdTbKYnSb+yzskpnfRfQYbjVEaXpjh+BKT3GOzMMzc8iG8GYlQok6c\nEuPhRXw0UbBQF1xaRoi5g5M0AzoKNlv0M/HUXVSjzYXIGRbzU/ejfLu6Hij3JbSPy9eYl6fpFzcZ\nZIOg1ERLOtxhhvXGANVgFEH1yJDjDjM0hCBRocI9JrBQmGSRz/V8g8f877CmDRAPFSi4KZascTSp\nQ0Iu0s8WNjKOLHI2fQERl6oVoT4cpdBJU/QnOajfJOKvcNc3CTWBOCVsBELUkEUbU5TZ3JfB9KsM\nONv4xTZOSKSTUNFyNlreYqiziWOJmIrKOEvsayyiVyxGlBV2/QmWQ2MY6OySwEVgjGVC1NExGGaN\nGGWCNBhe2yDdLtIZU1gPDLIhDjIh3SXSqBPfraM3Okzoy7hNkUF3g0CpQaxQJpBqYvaoxJpV4oEy\nouruna1rArJnkhF2GJtbJWnsYswoSCdMmkkdY0hlKLjGWeEiK+IoGXJMC/OMs4SLyC4J8qRxNQFV\nNrlhHKXeCFOcTzDrHcUSNPoTW5zYvUJ/a5OvDf4MK+II7R4d/9M1oiMlMAUuVc5RGY+SCOxgTwhU\n1QhCS+C4egVDVSmS2Lvnpq/JwdQN4loRjQ6a0GFMXsZGYos+vpt4lpBTxw3Bcm6cQieNPNhhOLHG\nFHexEdHl7jrtB5cE6ED8g4f/g9ccwACKHzzagPsRHeOPp/9oaAuCMAD8O/YajLrAv/E873cEQYgB\nf8peP7tV4Eue51V/0M/Yz13ORvZ2281wh0llkd7JbZSGQaGawicbxK0yo/Yqgt9jwx2iXI+zFhwi\nrpc4wg0eCV1E81u86z/FkjDGkjPOTeswh7nJmLxMkAamoVEzI+zzL5CWcxiKjjpqssEgsxyilywF\nklwQHmIuMk2SIgGa7OMuQ946MadMdTBCR9PJ3MwT3m0gKzb5aBRNcQnoNcbtVayOQtvVGRC2GC5v\nMbC6AwLcSU6xNDyKJSvUxCBL0jgaHcJOnX5rmxlxjrbjwzZkxu+sEyo3qUQD/GH8b/Nu6iE+yzc5\nWJlnqLyNYthMGYuMGitYqohUdknfrEAC1JRNoNxGUhzWlX7WGKIUjCA5Lj2dHWau3WWgtkV9XKPx\naIDs+SQdNIZZ5pN8l8vSCfYzzwnvMh177z6aLdmHhEsHnZzYwxuZx7m3sY/qzSQeAmN9izx5/AWe\nu/oiu7Ukv9b/T6gbYdygSOizZRKtAlZe45vZLxDdXyT6aJG8laJajaIZLmdH3iHvT/IG51ljmMH4\nBifjF0mzg4BH0wsQpIFoe9wxDvBq35PonsHhyi3evXOe9c4QQ5kldMlgvzfHiLjGgnrghyr+v47a\n/sklgOpH9AuoEZMgDXyWgdhwcdtgWwodRCAA9OERR0ABbFwqCBgIbKNRR1YtRD94Af5f9t47SJLs\nvu/8pCvvbXdVezttxvb4WTdrsHDcBQkCIAWCTqSOVIRIScEzoYgL3p1CCkmUREnHk0LSUSIIkhBJ\ngPDA7mK9GbM7frp72kz7ru6u7vLepLk/qnOndgFQEAjM7YL8RVRUVebLl1kZr77vm9/3M9RkGwU8\nNPIW9IoOjSpg/P/7U99jJhjGX35DBEHoADoMw7ghCIILuAo8DfwSkDYM418IgvC/An7DMP6373K8\nsZjvZd4zgIaIkwpW6tzmIJtaF5W6gw9svMTY5jzBZJoLD5zgmfKH+PyXPsP4T9xk9OAdelhnSRtk\nVe8jbQQpaS4kQ6VPWcUjFbGKNSw0mLs1ydriAI899AxiWGOPMMMs0MDKGr34yBFjiz5WucERdolg\nocGjvMiJxhUGihsYt0TElIG7u8hOZ4TNYAcZh4/Bb6wRv55k9heGsdnqRNIpbI461kId22YTbkLZ\nayd7wocRESj57ex6/GwTw5/N8/DKBXCBVpTgqoCl0ECSNNQuiS8eeZpvDz+KhEap4cabLfC/XP83\nuKIFNieiFEU3Hdf2GH1hBSQwRsA4CyWnlZzVRVbyE2hmsecaaFtWPK8XaUgKdz/TzYazG10QOcht\nbnGIOxwgwl4rb3bDwsd3vkLSHuFy+Bh+cq0c1YaAgwq5uo/l0hA1bIStuxx1XSNTCrJu9DDjHufa\nhZPslSJEH96k+pqb/HSAYtSLbG/i82cYOnwHvy2LXa8i2nTsUgUJjStMYSDSzwpP8VV85Fg1+njZ\neIS5xATpqxEawxJiXcP1Sp18zoetq8qhn3mLsuhA1RRizgSLS+MsjB7EMIwfKJ79hzG24bd/kFO/\nz22fRY+dxf+Ik8GfmeOjytc4vnIN39fKFC8bJFYEZpABOzI2GiiICPuL7ipQxUmVcVQ6Rw08D0D9\nCYk3u6b4C/XjLH5+nOwrRZh7HWjy15ON/5/fdWz/d5m2YRg7wM7+55IgCHeALlqD++H9Zp8FXga+\nY2ADROf2sMpVGp0Wsl4fSUcYHRG7VMFibVB0ObnuP0xSj6JbdVwUOd7/Jsddl/GRYZ0eNqRu0mIQ\nl1YiYiSx0KQpyWRFHwpNOtlB21AovumhftRGIehkWj/IbjOCV8pjt1SpYqeImzIOGijYaCXe15DI\nC14EZRWXrYxS1eE1sA7U8fUVsCgq7r0Kelaj9mdF3L0l/L0F1l0x0r5Wrcbx0h0C5Rz2lRqb3k5E\nWaObjZavtyKRc3vQ7BKyoeKPZhHDBg2r0truEHFQwUAgYEnj9ha51TdGxJPEsOgsMUA+4sNxqEqo\nkkWLiKSdfmqKwoYQ47ZwkAlhll7LBj53kca2QaOmI2sqoWQGagJ6XKSiOKhjxUOeXcJsCZ3sWKNs\nWTrZbUY5lryJbFHZiMRxUCFv85KzuellnbHcHJO353il+wG2PR3s1DsoVLxUl13kN4MYFgGpt4kl\nXMEtF/GQo7TgRYk30eOwo3cS07foFdew0KCBlUrTyYU7D6JuyGxku1k910PKHqbmd3LEcQ1J17gi\nn0VtKijVOlXDjiTpqBrcLRxgrx79wf4LP8Sx/dfDFOgOIx/q4JHoC3RtrqM9B8lyHmHTRuzqOnHp\nNr6dVTw7NcRqC2Zb1UBbEN/c/2zQEkcEWuJJCPCWwbUFym2R2I6NQ1qAUGIZyhWiTMOTIutdfby8\n9xja9S3YSO33+NfT/oc0bUEQ+oAjwCUgahhGElqDXxCEyPc6zjrdIFLPYhwXKckedh3hVtEAZLak\nTtbivex0dLDYHGZMucOkNM3P9/w+cRIkiXKRMyg0GREWGJLv0iuvUtUd/GHzF6hIdqLyDmH28BUy\nKNtNnLUSdU2hptmYqU7Qo6xxQnmLKg52iZDFTxU7cTY5zSV2hA6WlX4iSpLocAbPbhnLf2gSGskR\nOpIDO1CESh3c/24F+3lo/JqDedcQt3yTpLrCBPpS+OZzaDdkblvGqDsUxvdD2lWXzNZwmFrTjqNe\nwenLoysyBauHbXuECjZ8ap64lmBIuovHmufVkYfICW4GjGUyaoBazIY/msW5WqViszPrHKaJwnWO\n8qd8iqeUr3LKd5ke3zqBsoY9USGk7jG4sY6Rlbgb7kFTJOzU9v9IOpoiMR09wA4dZKt+oqsZBI/G\nUqSfTbq4xSFe5jwf48u4MhXCV3K4nBVqThuz1XHyzgCNgp2dP+mh+x/eJfj0DjuNGHF5DV86z5U/\nO4t1Io4/vkdB8yCLKl6hgKCBpdlEzct85dWPk74QhlXwde5ie7CCdKLJo5ZvY8lr3Dx6AllqYrXU\nKQpuDttu4qDGszsfpdx0/6Dj/oc2tn98zYJs17E6VSx5A6M/iPKJg/zssT/ggdefo/FchRvrX2Zr\nHfgaFIEbgIV7cGoDxP3PLQfTlqLtoAXeBi3taX0T5E1ofEtHY55x5pkE4sBRwPhJBy+f+xA3pg+h\n5+sIyT3qHqiXZdSqSGt6+Otj3zdo7z8+fgH4zX1W8m5d5XvqLH9v2oduSNTXrIQfi2N5YpQ4CarY\nmecACk0mjWl+U/+33DQOU8ZJmiAlXGzQzRo9BMkQIkXHfgmrTDFIYSZIudOG3N/kDc6Sf9iHdbTE\nS67HiFR3OO28xJq7F7tQpYKTJW0APzlOSxe5YJzDQZkeYZ06VpYZ4D/w6xzyTHN08CaHHp7FNtSA\nAVoVaEqt+rwDo6B0gSLUOZG9gSAKXHMdwppponklch90MBscY4coSSKE90uYOSjTsZzCNV/Ftqzz\n7QcfYP1InHPC6zxSeA1SF7Ela6gxULtFnip/i5vKQV4QH+OxlVfpra/jtpRwZcqkAkGSRBlgiXFm\nOcVlBlkiRAo7VeS/IyLULa0sgzHQ/SJVxU6AzNveLABlHPsFvzY5YrnB3riXvOKlip1OWlV6ZFRm\nmKDZobDxgS7qAYVBeYmPu77Ay5EnmRuahFNg6WxiaTap7bmoexyojTLsCKjdCioybrmIgcC21kEi\n2Ufpuhv5skbR7YHzIIY0BkaX8MoZMlKQTaGLiuhCVSQef+AZDvpvULY7KL58jbUXlxjUPo9QGGLj\nf3jI/3DHdouEm9a3/3q/mw2YZOCDec5++han/+kF6jN/wey/9lD2zHEtWwda4OyhBcYyLUZtvhvc\nAxedFrs29xu0wFtt29/Y3ybR+p81gAxwDaj+33Vyf/Q6Hy/+IseSOSzHPbz8W2e58NkD3P2Km1Z5\nqNqP8obcJ1vdf/3l9n2BtiAIMq1B/TnDML6yvzkpCELUMIzkvja4+72O/41f81IYcjEjTLAm9JLG\nu58rQ6FfX2E2OUldcDDkX+LVxsMk1BhuawFJ0AhrKZ5QX8IlF3BKJUR0ZFTcUpGQYxe3RSHCDgEy\nHIjN0YhaeaHwODtaJ0qpSXXLheAQqPbYUVDxCTk62aapyqQIs6eEkdCQabJNJ52WbUoBB8YBoTWC\nUkARkuEQuQ4v0YNJjJ46lYhCzu5FlwRcQokLtjMsufrxh/bYoIt1eigZTj6Ueo4AecohJ2lLFJdQ\nZXxnnmQ1yh3pAD6yhMUMQUuOsCMJFQNtXcJbLpMJBth1BBm4uErAmSV/wk0qGKBgc9NTTKDYVQJy\nhvO8hIjOHmFUZHLjPgR0mljo967jsxYJVbKIhkHa6mebTgp4EIAkEbzksVHDQZWsESCn+Ticvc0h\naYZ1/yVs1Kg7LFx0nNqvvaljiAJdoTX0MYGMFCDSv0NYTGKzaLilHKJDw3moQCVio1jx4LYVMCTQ\nVYlq3kmhEmiNPjf4B9L0HFphyLOIhsCO3sGm1EXN4kCJ1IgHNxjyLJAijPRIiDOPWOhmg8vpLv7x\n730/I/hHN7bhkb/aBbxnTAaCxA8X6D+QwvnSVboKKUbX5+mr3aGRSaOnW4CbocWoZVrw3gQUWqza\nBF6Re8Bt0AJhk11L3JNKTBP2j5H2X60ly9aNr85oaCQZJkmPApaOMJNrdoRCld5IkMb5PMuzYRK3\nvbT+sCrvT+vjnZP+K9+11ffLtP8LMGsYxr9t2/ZV4BeBfw78AvCV73IcAAOX1tgeDPGmcLJVgNfQ\nmDMOMMwiT6tfZW7pMMvWYRaiw7yWfZAMfvqVFbrEBKP6IuOVRXIOF4tSP6/xEBkC2Jw1hg7dQRAM\nutnkILfpZY2GqLDp7OJa5Rjbe6fgDYVIdAd/LL1faHYdu17FaAjsCWGuKMcZNJaIk2CXVcLCHnZr\nlXrMinRbQ05oCG6Du4/1M/fgEOe0N/CToyS6eF04SVWwYzcqfDb6afxk+QhfJ02ALD7KOHBvVPAb\nBW4FDnCp/zQuo8rA0iqGHdIEeY4nsLlrdLs3+Uj3N+id38J3uwwaDLNIUEjifqNA+oCX5U92s8wA\n8WKSBzOXeCt8GEE2OM9LfJsnWKGfICkkNFRkSrjQrQKH9Bl6Mglko8meJcgME1QER6t6EFE26Mav\n5ji4NU/F6SZjDxDcyNNvXcfqr6IiMccBvslHKOJGR8RBmVHfAgO+RWbHx+likx7Wmeq4Shkn2+5O\nOn5mg0S+m3LehV2uYJEaePQCUlVt+Wt0G4hpnbhng/Oh51BosqwNkGh00VCsyDYVR08eUVDRkVBo\nvl2NPsIuTwSf4R9/nwP4RzW2fyzMIiJKdiz1bo48dpenf3mR2MobVF9IsfsCLNECVActVmw685kO\nfCr3gLhKS02UaQG1CcA6UN9vawK8uP/d1L3hnoRitqnu9yXvf19sgnhjD++NZ3mSZ5FPhyj89hm+\n/J96SM/00rBV0NUSNH58Fy6/H5e/c8CngduCIFynNUH+I1oD+s8EQfhlYA345PfqY2c8yrw4hI1a\nq+SVAR8svEAXGzisRU6MXkCQDSzU8bqyrNQG+G+7n+Gs7zWqVgduZ4mi5GSDbuYZYY4DVFUHVwvH\nidm2sDnrLDBCgjgKDT4t/zGPOF9mXh6Fx0U2M71Mv34Muaky4zrGq52PsyZ3E3euY3E06NY26GCH\nYekuTWS23VGeOfIhjvZf40TiCpHLWURdx1JRcU/X8FoqGB0WigEPglUnShJdE9kQurkiHcdDgSHu\nUsXO8kAPumEgiOCijD1ao/xRC5mQDwOB41yhhh0VmUWGW0zVv4oehPVIF1dcR7H+3Qbd7g3ibHKT\nw9y2h6iGbZSsThyU2CVMF5u4KFHBQSfbVLFxgXP8Ab+Ew1Lh4fDrjGtzTJbmqTtsZCQfZVz4yRJj\niyF5gds9Y+xIUUJSinK/lazYxQwTpAixzACbdOGixChzPMmzNLAgYvABnuMVHuYax+hmgwBphlnk\nMDdJOLrIWAOcU15DwGCJYW7rU6S2QUxrdJ9eQe/Weab0QUZt8zQlBY+1QG43BDo4O/M4hApB0vSy\nioSOlTouSuTx/pUG/w9jbL//TcL5iR76zlr5xO/8AYGvLlC6mWJrsfC2bAEtoLDQAk7zs8mO29/d\ntOQNU8s2GbWFFjDrtACZ/e2m/v1u0Da3u/a/G/t96fvvFlqA35gvUP97b/Hh1VWm+g7w57/1cVZf\nq1L5/Do/rh4n34/3yBvcu6fvtse/n5NUeuw0BIUaNna1CFXVzhQ38Ak5NMHgAdvrlGQnBcHDUcsN\nLLrGfHWcPcJMixOoFolUJcKSOsht6RBRSxILDUqCi6Lgosa9eo+ioOEXsmTxgQ18vRmSUgfp3TBB\nKS2ZN9kAACAASURBVAWygSZKnBIv0yWsoyGREQLYjVYI9g5RZi3jXI4cR4nU8AUzJMsV1sPd5PCS\nl71YpAY10YohCK1MfLqdk4UrlCUnTm+pVeEckaLgIeGLUcCNe796us1SRwgb+Gw5QqQQMbBSR0dk\nkWGizQyD2VXUVdDGQDhiYOlq4tIrBDM5wq40eYuHptx6AM3hJ0WIAFlEdCo4mN8eI9v0sxWLsSCO\noAsiTmsr7W1ETZHFTxEXGhL9rDCgL9NtbLDkHiTQyBAr7mBzVkkpAZJE2aaTLSNGQfdwULzNhDCD\njRoWmvjIcpTrbBFjixgVHG8XVTjINAElja60ApkqONAkiXBgh1rJgi6JjHTeoeRwcSV9knhoi6hz\nhyPiDRalMZooDAgLiIJOkig1bDSR0ZBZoR8bf7Xgmh/G2H7/WoSAS+Tc6JuIkSz2ssSQfgHj7jY7\nd1sM15Qr2kGTtu0mMJss2wRvUxqR2l6mdKK3tYV7EonwrvOY7NvWth3uwbB5brINlBd2CLFDqDfN\narmPsViT2qkCF2ZOkS1pQPKvfLfeS3Z/KtdENCLs8RYneUM9y1J9EJ8rx1HZQ0hL89jeqySlCM/Z\nH+GjfJ3Hrc/zbORJtoixYIzwlnCCxdw4O8UYOJr8bf9/5ojrOpuBOKJhoBitZP9dwiZF3HyFp3lJ\nO890c5LD1pvkvAHkUZWRyAxjjhn6WeEj9W+gI/EFPs5F6Qw2agRJM88oa0YvGiJpAtwIHCb3ER85\n/Eho3JkaIocTAR07ZfJGJ8vaAL+a/APs1goz3lalmyJuykaeBUZYYhA7VZoouGpVnFsNDkZmqVst\nzHGAIGkcVFhikJHCCsZNaH4WIp/a5sx4jb75LVy1Ks2AxJHBWzQVETcFlhnkhnCE1znHQW7jJU/a\nCPH1mz/JZrGbyY9cw+JoIKGxQTertl7qWGkaFkRDJyLs8tPGFxjRFgk209itNWylBqHdPKkuD5ty\n7G05wtAF1KbMI8rL9EmrfJmPMcYsEZJIaEwZV5FRucwpppmkiIcqTkqCkxQhCrhpGBYycpCegWWC\ng0lyhpeD3CSR6uWt5IPY3XUGnUt0scnL0SIlXBznCnuEuWCcpYnCLhFyghcRnU/zx/dl+P7YmQAY\n4wxERP7VZ36H3VeXufC7LRmk5VndYrIK9ySP72amZGHq2CYQN/dfJnAr+21M03gnwLPftv6uY5T9\n62gHbbjHxsX9/VZasZX1tS3O/8+/w5FPg/VXhvm5f/arXC01QEj+WMXn3BfQvsMYAB4KxORtdsUo\nF8SzOClxVLwOwQaSUCNOghkmmKlP8kz+o2hucNvy9LKG7Ndx23KsNXqoCHZA4DSXObC1yIHcApv9\n3Sw5BlughMKoNE+vsMpD4mts2HtohhS26zHymoctdwyHUiVAGguNtxlikDRBUkxUZhlOrPBq8Bwv\nBh+liwS9rBGnlZFvmknW6CVBnI1CH7lMACVg0ONcpYFMHi97hNmmk8cKr+CixC3POBNX5xnfm8MW\nqyOjEiJFiBQ5fFRwMMVVIgNblD5sw2arE+oo4ZtuYLvegBBIPTrxmSS6RYCIwXY4juqQ+BDPsEIf\nb2onWVKHSGzHceVLjOlzlHBSwEMdK2UcePUCn67/N6xyHVUWGdZa9TOXLANcFafosWzxmOtVvNUK\nR6uzRNQ8F/3HaezZuHbpNNVTTtReufWkg5s3OcUX+Wm2FrspFr3YJwoUSj72Kh1c7zjKhGWaKa4y\nyxjrewM0U1Z+ref/QXHVuapOcXX2NBajya8M/nsyLh+bdOGkvH9nQjgpY6dKXbNyu3YQj6WA21Ik\nSZRNuu7H8P3xsmgIHjrFx2Ze5cm1b3L1s0kKe98dGAVagNjOsE2JpF02kbl3vMg72bDOPc27nbmb\nZu4zgb1d41ZoTSB17skqJmC/exJoX/CcfR3sC9v8WvJ/55sTH+ZLYx+GVy/DbvoHuWPvObsvoK0j\nUsVOAQ+GJODQKyyuj9JlSZCMRSg7nOTwUsbJHAdYoR+7UaVuyNiptjRju0BeceMol1FlmSo2XJQI\nGSmsep2r2hS7ehirWGeAZULiHgXRwwDLWJU6XdIaxYIXhSYeoUBVsmEYAiMsYC/WKWluXI4iDrlE\nnE2OG1dYNAZ5k+NsEqeHdWLGFpKhMa1Ocql2mrHkAmE1TdYWZNndi+yovZ3pb7PezXTpEEO7Gwwr\nC8TdCQ4uzjCSWIYIuCgRYRcRHR2RBhZ0RLYDHch2lSHrKp5CGWe21HKCtYKYNfAslyl6nOyGQ2BA\ngCy9rHGbg2zQTdFwowcFZFsDWVTxk0WhSYYAIdKMMs9hbmI3qhRxoiGxK0bYlSLUsFGyONixh/Ev\n5wkJGSyxBmvE6WSbfmMFHznCzRTHyjep2q3kFS+GKqGrMtWKg/y6G0QRt1his9hDj3OdftsKaUIk\njQiybtDAAoZOzbBR02zErAkeCz7HNJNs5rq5sTaF3KPR7W/p41k9wFYjxmaul0h2F6+QozLkZNvW\neT+G74+N2Q+78AxbibrWmRJfpa/8Irevt0DRlDFM9qxzz/tDaevDsr+9yj22DPfA1GTcptsfbf2Y\n4K/ubzNdBWVak8O7wd2y/zL7FvhOaaV9n0TrtyTXQFkrMcbzTIkullw9JB+yk19wU7tV/KvcwveE\n3RfQHmWeWca5zUF26MBaa1B4Icjt8FG+9tRTDLJEFTt3GCNBDL81y9+N/BtmhXGKeAiRYpU+CpIH\nj6eAhE4OP3cZohhzY4vW+HrzoxRUN92WDc5wkTV6eYsTnOAKTRR8Qo4PeL/dWvykgoUGATL06mtY\nEzpSzUDvMXjO9Rg7jg5ywy5GhDucIsyX+RjdbHDGuMiIusDLlUdY2R7kt7/1z5AH6rzw1ENUBQd+\nsowzyy4RUoUINxdPMJM8yjn/q/xW/z/FlSzBFqBBmD00DFbpw0odhSav8SAiOoO2JZ4a+yqDyXWU\n5WoryqBMy2m1DNuBKBd6jtMrrCGhtlwXCWOIIket17n1mEZRd3PXNsgoc3SyTYYAZ7jIeeElGjYJ\nAQURjWlpkhytyewkl9EsMldthzhx6Sayt8HaVCcVwUa8a4OnfuoLjEvTHCpMc2blGpe6pyh6Xfz9\nyr9noW+A53xP8Hsv/kO6x1cYOzDDqxuPsaoOYrHVyOBHDjewhhp8WXyKiuFgTwrz6KEXOStcoJsN\nutngxZUn+D8++0/4xU//Z86feJ4wu/wn7e8wXT1EddfD2rNelEIN19/PkrR13I/h+2NjwV+OcXA8\nyxO//JvYEknmueccZ9ACTlMWadeXndxbRGR/n4V7KaCq79qn8E4t3GTNptbdrm+bk4S4f34r79TC\nzWNNFm2eo9nWB219mCy8AUwDoZmv88vFa3zr9/8Rt2/F2foHcz/4DXyP2H0B7Z47O9jDKqpX4ZnL\nH+K55z9M5YCTta5evln4MBP2GWRFZZsOKjjICn5SQoitRA8WrYkQv0qy2kFdszHmnuWAOEcP6wB0\nixvIqHybJ5AEFV8zzxd2f4YdNUZRdOEvlPC6s+z0dLw985tFE17nHC6hhKejTE21s2AdYrEygk2o\n4XKX0AURCw2i7HBHHeNz2mf4WenzBO1pHva+Qti6h00qc0CY44vaT4MAj0ovYqHBoPsuPz/4//JK\n+TEMBLzksZQapOp+bneMUXQ5yeNhixh+svjJ8GG+0apQI9gpSB7KZQfWvMryoV4capXebAIE8Mbz\njLBAPLmDLdugp7SDPKCzFOwnSZSALQOGQVDI7Es/Tj7OFzmav0V3Mol2VyTR18n0+AFe4lEclJlg\nhioOQnczdL6VxqMXKQft6KLIEHcZLi5hSegsxAa45TiM3iPjceYISmkW7APckg+S9IU5e/oVor5t\nApYMvo48TqWEiwICBnf1YVJaiCnlKgc2FrHP13nr6FGWwoMESbeyI3YHiHwqQUdfggp2/pRPMb19\nBLVkxR/bo+dDa9grVe5oY+xU/oZpfz8WnjQ4+msGscRzxJ6Zw55Kga4i0fLOaF/ks9Ja/KtzT1c2\nzWTBlv02pjeHuZJrMmrr/rupa5seJO1atmmmzGGy/PbFStO7pEFrcjH3mecxJwZTC6ftenXzPLqK\ndXeXyX/5WYJHR9n7d91c/48CqZkfKF3Ne8LuC2h7KkWkpkbcSGCv1CjkPNCto8UF8rqXZQawU0Wj\nBZKtVKFhqqodTVVIEKege1B0lZixRZA0oUYab76I216g7LQzJt0hhxdRhfnmBEJTYFC6i7+Wo9O6\nxVTjGsWyh6CQJepMUZEcrIr96IKAz5enpLu4ph3D3qwT0lI0jFaxYY9a4FzlElvNOE1RIemOErbu\n8pj7eXy9WbSwgJMyAgaGISChtSrX2O4iWTWWOwfx6lms1Cl1OSi63awFu9mxRsjjpbGvwTubFU4W\n3mLV1su8c4RV+kCW6HZvke13I9XU1sj0gttRZGB3FU+xjLXSRChCRvVSxQpAl7SJAVRwvu0ed4K3\nCGgF1JKC926ROaeHaf0QbzVOMirOc8xynRQhPI0yg+V15LBGLuKhhAsbNXxagUg9zdfVD3JBOo0Y\n0JkUpuk0trltmWzJVY4Sk0M33y5C3O9dpoGFIm6aKOTxoRoyXWwy3pwhXM5yV+0jh5ctYkho2EMV\nJkK3sFNlixgXOcOuFsEq1PEFU3h9Oay1Ov5GFrfx/n/U/VFbcAKGz1aZ6tkh+K1LOL61CNwDtXYv\nkHbQNsHZlDXa9W7zOJOlm30I3GPZIu907WsPdzG1abgHxCZ4m/2YE4LKO4HdvBbzs8q9vCZmm3b3\nQQChUiP+rYsE5BSFk6epnI0g4GBvpn36eP/YfQHt5iBkbU5ekx9k6aE+vKf20KwyffIKh8UbbAg9\niOh0s42LEm6KeChQiTtI0MUN8TCiSyNMBlloksNHtLTHw1cvsNzXy8ZonKeEr3CF41xUztDftcAx\nrvMwr+DpSmPXyjxQuog4JyBJOuKIRp9znarFTgMLPnLogohPzvGw6xUOcxNBNFryS83DJ1a+isOo\nkXe7uWGfwC+nGHYs4n6gzLLcT5IOTkmX6WCHCg5GmMdCnSucIDqaoJMdmqLC0if7qOh2/PY0y/Sx\nR4QuNkkRolmxcv72G/TEEqRGgrzIo0x35zkSu8EJ6U1i2SRkAS/Ysw2s602aB6ExLCDXDV72PMIS\n/RzlOgBJolzjGKe5yEneRKbJsq+HRtzGVPQWe84Ic9oBEuk+Ru13CQf2uMsQ4ohBd/c6rvU6ZbuT\nNXop4cLpLTM4scR19TDzzVF6rOtMM8lVpljV+/iM8DkeEl59e9HZRpU4CTK0KraXcOGV8vilLAU8\nXO07ihJvErdsEiBNar90XCfbOClTwM0G3YCAtzuLYOh45AJ3d0fRyxLHuy8wbp3hrfsxgN/HdvjX\nRY7F9wj+xtewbhfRucdW2xcYTVZtMlhTlni3/zR8p84ttrU1vU1UWuBvLhAKbe/mNhN8m9wLc7dy\nL4jHZNimj7eptbcvRAq0FivbQd7Uwmttv1UBeG4ZeTbFQ//qQ7gO9vPsb/wNaH9Pe9X5IIviEIrQ\nwKlVoSHzMdtXmJRuERAy3OIg85VxrubP8LO+P8Rnz3CJMzy+8RLn1MtM9t/CQRWHUUGSNToLSdzV\nCpeHjnMnMMqy0IuITpYAnexwWr7EscYNRhpL7NqClBbddLyUaQ1SGfQ5AfVhGXdfq3ajgEFdsLaq\np2irGLrMc+KjOIQKfcU1vJcKOLuq2I5UGdNFbPUqdr3BqqOPbSmGIBjIqNzKHuGbyad5NP5tOtxb\nHOcKp/W3sBvVVvCQo46rWSJcyLJqGyRlC9PJNj6yuLQq1mqDzWaMJFE62WZoc5kDm4vMTkywHYwz\n3HOXwFcLlNwuNj4Qwxas4CNPpJrB5qiRFoP8We2TqHkr3ZUEn9S+hDuaQ3Fp+PNl8o4AW54AL009\niOYxeFJ8Bslr0JAlvsJT2KnSsbOLfa6BJOsEohkO12/xhnyWVamPjBjgqHidg8YtLDR5vf4Ac7Ux\ncrUQy64h7NR4cf0Jqk0HUdsOH+75KvPGAV4pPkKh6MfnztATWQGgs5CkP7nGpa6T3Kge487SJDsj\nMbzBLFn89LDOIW7TRQJR1tnVI7ymPUgh5SGST3E+/jJO8W+Y9vcy+2EXwV+K0bv1bTqeuYh1q4jS\n0N6OQjQBtt1v2tSc2wNe2hmslXuSh+ly1x5YY5qV7wT1dqA2+zeZubnflFrk/Ws0J4P2EPd2oDeZ\ntMncDVoA3kr8eu/c7G+31jX0zQLW33+T+EGZrt99kvR/3aJ6q/R93dP3it0X0L6iTDHHAQ4wh0/L\nE66nebL+bQ5znYakUBOtJLQekrUoqq5gIFDCRU8hwVTzKn3GIgE9h6I1STdDBFN56jUbtwfG2LTF\n2CWKhQZe8owyzxB3ieh72NQ6gm5QK1nJb3tw2itYVBWhCL7RAmJUY9C2RFoI7ufiMNhudrKnRXne\n+jinucgBY55kM4xVaSC5VBxiGWemipQzKPR4qFss2KhRxM12s5MrxZOcyL7JCPOEXGm8Wok6Vjbo\nJKylCDfThJpZfJY8VupoiHgo4JbLbHjiZBQ/jnoNj7LKeH6O4c0V5oZHKEftuNQCjss1Ct0uln69\nlyBp5LxGRzmD11tEUAzuqGOoVRuuUo1hdYl0wEte82Ev17HKTep+K9tDLVA8yC2qLjtXmOI2BznC\nDeSqip6WyXc4URWBsL5HE4VSxYUnW+aQ/xYhW6pVrEAdx1AFuhsJ9rQIbxqnWC0OYNRFRNUgoXcx\nUz/I5ew5SEn0GktEgtsECxk60rt4SmV2tA6miwe5sXICLS4QC25goUEXm4TZY4BlgnqaVb2P6/pR\nXGKRkLhLXEig8f7VJX+kFg3hGbUyeThH/J/fwfPM/Dv8ottlkXbZwgRtE8jb/aFNADWZerskAvcA\n1IyWhHemZjWB+N0pW81rMdub10Db9nYz97e/3h3MYy5Etj81vK271zWUr92lSw1x+LdOcXXYS3Xb\nCnvvH3fA+wLaaYI0sLBFDJcrz8OW5xnLLNBbTlB1WfDb88Scmxy1XeaSdJI4CR7neTp7tpB1FY9U\nRKaJtdagO7ODvKrTbNY43/0Skk3FSZkprtLNBhIaL3GeLUuMCWWWAW2Z+oSFmz1jTL65QGgji+A2\nOFt4k2LSSabHxbbQyTadqEi8qD/GnH6AgJHhJG9Sidi48nPHkRUVj62AVagxMr/M4FurdH9qE5uz\nyi4RkkTpCywz7FjkkTuv4syWmD48yi1biDxeKtj5YP0F/FqejM+NVaqg0OQyp+hjlZAzzYVjZ3iw\nfImPZp5lOjiCLVzDplU547jIDmHSQogeyw6ibCDSKjMmGjpoLTmiS9nkQc9riE4Dh17hi/wEhgzd\neoIzjquggINKK2EWCkk66GKDMg4Umkwwi6cvx3pnB9tSJw3ZgiSrbAkxwttpfumFP2L60RGMHonD\nxWkmHXdo+hQe8LzBK8bD3DUGeOjg84ywgEcocNcyxG45Ck0JFKgqdqoNB8dv30R0aPz5wae5rUyQ\nLQXAD7pFxE6VLjbZJUIdCxPMEFJTOPUypy2X2BxJIOkad6wHiPyYRbr9UEwU4JFTRJyrPPqL/wDn\nXhqZluRgygrtYGgCcbtsYTJg07XP1Lgb3PP4cHBPUzbz65lAbPZvgrUJnvX9PtqZvOn3bU4q+v45\n26UZ9rc3uTfRmC6H5j5TQjFlFhvvDGI3Wbrp3TLwyg1idxJsPfS77DzQDV/65n/nxr537L6AdpA0\nIjpDLFIU3aQsEXbcIWRqiBaNsLjLiLhAWXAwbNwlqKeRBI1VZzfzDHFLmGREWqDXto7DV6fZr5DV\nfSxb+wCDYRbZoBsrdfpYxUOBsugkocUZyq/QlG3cCY/y8sDj+EM5jlmvciCxQHXNwRvd5xAw3i5C\nELMmaBoKLqFE1Nghrm5jK+mINR2bWEMKquRjXp498zgpjw8veeJqghPJa4g1sIgNPP4ct5qH+C83\nf4Vgzy4+fwYPeaqyFbUm4U5UiUe2yQWWkVER0alLFrrtG4SEJI58kZEby+AwSEe9+Ofz5Px+5mJx\ndj/dQcblZ50uJpmmabeQjQaw2aqcVi/jLNfRrQY5i4dFcYiMECCt+Um5fVjkKkHS7BImVM3Sl04g\n3dHwdRaJ9e8w+cYddv1h/vTEJ8kQoId1HuD1VtpXZxZ/bw7VqXBHHOWC/QFQdI5J12hICtliELEp\n8qj7RWqyjWVhgDxeYs5Nzkefw6fmsDhr+OU0ck8dn5xjSrzCphBH9uqcH3sRh7tMkD262OQWh6hj\nI0QKb76E3AR/JEvO6gPAThXjb5j2u6wDwRjj6dnXOcor2Na3EQ39HezZXFg0GbMpS5iLhSbwmmzZ\nZNrtkoipf5sShr2tjVngwJQ8xLbzmWzYPKfAd8og5nWxv89MOgXvfAqw7W8ztfL26ExT7zYXW81o\nS7O9CEiVGs71bX726h8xYDzEF3kUmOH9EPJ+X0C7X1ulR99gTJplRp9gTptgxjlGUXQQ2s9K19nc\nQavNcMh6A1lWmWeULUsHCeK8xoM0BAuSRcOr5Fn2DLDMAHnRyxFu0MM6a/SSIkSMBBF2SROkrlsR\n0wIyBoYqczN4COIGDR94c3lqDRvTTDLOLJ1soyFx1HqDGNstTwq9iFstYStoyBUNRWyCE7Z7Org1\nMk6GAAMs02Os01tcxV0uIygGyd4AK5Ve3rx9mu7gCiOuOTrlbWoWhXLdTmwmTVzcphJoDb0CHhRV\n5XD1Nn4lQ15003lll9KgjVyXG998Cb1DJjEY5+5HB9kxOikZLoKkEawGt8MBXFqJofIKD6Yvo3s1\nloVetq0dracAIcqb0hQRMQkYZPHTvbfD6J1luAGOQ2V8XVkiKxlWav3c5DAqMtH6Lh3VXQ445rB5\nG5QnHSS9Ua7IU7wmP8hP8ReMsMA0k6iqTEczyZhxh0VjmLphI1JP4ZGLqGGJXtbQEWhiId3nw6Xm\nGW/OclWawu0uMuaefUcyKDMFrIsSekOi2bC+HZBkIGChgXafsjC8X8zvkhgMW/jI8tdbgTO8s3KM\nyXhNwDVZJ7wTLNslFJNxm9YefGNOAia7btIKJ2gPyjFBVW07xmxv5hsxE0C1LzKqbe/tboKmHGL/\nLr/fjJo0+2jX683f1s640VXOzXyZsLPESv9ZVnYlsuW/5Aa/R+y+jPqD1Rk6K3vgafJS/Qm+VXqK\nXNDHAzaDKEluc5BAPsdPr3yFVwfPsuWP4qDSYlnk8ZKnl1X69DWijV2ebz7OG8I5/ifHfyQmbSGj\n8igvYqOGgIGfLA4qSJqOfbdKKJnmE8KX+cChF5nzDHNROEniVBTJ0AiIGeIk6GSbAh6clLBSY5Fh\nkkKEu/YBrg1M4dCrhNhDVlQkSeU4V8jRytS3IXdR6XPg0ws4hTJFi4sOxzafOP0nvFw7z1qxjw/4\nn21p9RUXxkoGT0+eABmWGcBGlWhlj9GZJbY7okwrvXjm38JlKWE5XEUpaFQ9dpJEWGGALWKouox7\nfyHuAmdZqfUzlbvB6Z1rWA0NFJmsJUBB8LDTjPFc9kMMORc54r7GQW7jm87BS8AkiF0GTbfMlY8f\npqxY+SDPECLFwN4aHbNpaoftFMJO5sN9XJJPcoMjlHGyTg8GAjtEGXHfoc9YIyd5GRIWmajN4lmv\n8nXvh/lGx5PoiATIYKPKVY6xKvXSKW5jCAJpgnyVp/kYX8ZDnhUGkFCxUWsVwwh7aBgWItIuo8yj\nIXGJU3gp3I/h+z4xkQfGLvIvfu53WP6v26zdeOein8mwTemgSQsQzYx87YuQ5qtdZjBB0ATsEq0C\nCGa2vXYvDfM87YuUZjCMOQGYHh71/XM4eWcZA9ONz847mTbcY+bt3yv7fZkBOqaMYl6Xre331bm3\nkLkAhIcv8ce/8Bl+63MP8o1rvbzXswPeF9CuKxZu2idJSX7KFjtnna9RluxsEufAfsSeYlNZiAxS\ntVrZrUS5vXeEB0MvE3ElyRBAQKcuWMnIAVYXB1nLDXB96hhXOUGl4SLm3qA2a6e+YGfq4TfRwiJZ\nyU+kO0W/to4/kWNPDpC0RlgUhvG5c/sgUiN0N0u4mUEdlrkgnOHN5mmmK4c5Ub+OTWyyFYwRlzfx\nGVmcehnXZgV7ok7dbyMT9pIMhpm2TVKgVf7qOFeISxuclV9jTeoBwEkZFYVtXwe5k0GUzhoqEjG2\n8OyWiWb2cPqKeN0WdMNAGWlSi9vIOt3UpxwsegbYoYNhFjnCDdxCcd+1sMF5XmKt2cesNMYrsbO4\n3SXWrV0sCsOt/tUyV3JnOCZd47jlCsPJZcLFTOtfUwCjLKBKMvmQBwt1BlnCS45IIov12SYRIUXp\nsIu3wlMgGG9LUJulHna0OC53jqZsYZl+GijESTDACqe5xigLbNCJgUBXc4t4fZs/Kv4cDavMZOAm\n/SzTNGQuGae5LJyiS9hARWaTLiR0/OSwWWr4czkO3Zil3iWzFu8hQ+Bvco+YZhWxfbwfJZqj8toi\nlVQLIJ3c04HhO934hLb39ix77X7bJlC3s2sTLE29ur3yTHtEowmsats54J5roekLLvFORq3zne6H\nJowabe3anxbMfsw27Rq4OZG8O4oSWtp4MVWi8MYi0kM/gW20j9oXVqH53gXu+wLaOcXLG9bTZPET\nUlI8Yf8Wz/Ike0TYoItJZii6XLzqPEM/q1gzTd7aO82wax6PM0/JcFEV7KTEMHaxSiYTpJGw88LB\nx8gaIQoVH92OZUqrHtSLVsRDKkqgTloJ0tW/iSypeBoVLjlPckE5zSJD2KnQyQ4SGsqOiq9coBKz\ns2A9wEvN8xSKQSoVD5IMTZ+CJGv4jSwxdQv3ehXlKjTHZCSbym4wyDwjzBgT5HQfMXGL4+pVAvUc\nq9JFKrIDn5GDClSsTjYeCOAXswTVNAO1FcKpLK5SmdK4FZdSIFRMY5uqkw77SLmD7JyMskIvgHMX\n7AAAIABJREFUBbw8ykscFm4SEXYp4gLgcZ7ninCCeeco34g9SUTYpYSLLWIc4QZ+I49fzTGk32Wq\neRV/qozN2UAbEqmU7NSaVgwEVBR8ap5uNUFdUWhWZOoJC65khXrOxhvBc7iMMr3CGr3iGs9nPsRu\no4PjzjfIiT429S5mGxN0y+tMSdcYdK0TsyU4ywWmmSSi7zFUX2Ej28euK4gnkOUIN/CRI2f4uCIc\nZ5cIvayRJkQDC/Z9f+9wJc3w3WVWnN0U4610vJt034/h+x43GUl20PeQA2fBws3fvZdAyWSy7aHk\nZh7s9uAUE4RNTxITbNt17O+VprUdaHXuFUcw5RGzYk076LeHtJtPACazb3frM609j0k7eLebmdjK\nTCnbHoRjRlqackt7OlgDyGxC6gvg+B0LPSNO7n7Zid40vc3fe3ZfQFuuGdgdVY7zVqtWI4OE2aOI\nm9d4iDo2BAzShDinXaDTuU1uzMND1pcZMRZ4SH2VeWmUJWmQHTroPLqJMW6waBvEIlbpcmbJSV68\n5wp4Jzb5uuMjDFSWOOm+zAIjrEQHwC3wuuscq/RSwcH6fpa+FGGOTlxnLDdLz+o2R2K32AzEWbP0\nkdBCXBaOYVOq7BHiKlP49RwevYpqkdjpD7LeESNBnDw+smqAzXqcWds4fdkNji/c5OcCf04zIGLz\nF7HMGqgNmfwJJ7oFrMUmwdtFChEni2N9bNs76NvaZGRnCTFi4AyUCZJilzAiGh4KdLNBlCQG8DoP\nUMLNKPM87fwSc4zxJ/wtTnGZMHtESaIh0bDLTAxcpyQ7eE16kNGRRXo6E9irda5aDiF4NByUaaIg\n5w0CySJvdJ9EOyYy9H8t4fKXWLH18FLlPIYqMCIt8pPuL+HbyZMtBwl0ZbHLFdK1MG8kHsbtr1AP\nWLgRniAubuInQxY/d5UBBI+ObtUISruESPNNPsI6PbjEIl7yKDQp4GGYRUq4uMERelmjK7RB5QMK\nbmeOHtbxUGSUeV6/HwP4PW1BrNUufvVf/yHj6kU2eWfZLnOR8N3eGCb7NBcOzYx+JkA32/p5twue\nyaxNOcME5fZlYdMLpJ0ZvxuQTUZsLny2+2mzfw3tlWuctGDUlD1MzxP9XX2ZUNsepPPuzIDtTNys\nYflTv/c5JqQl/kn956mx8f+R9+ZBktzXfecnz7qy7uqq6vvunqPnPnFxAII3SECiRMoSLdO7luSV\ndjekXcd619rYiN2wFdbasV7/YVtrK7w6vJJFSSRFUgRBkCAADoEBMPc93dN3V19V1XXfee0fNYnO\naVIWJUoD2HoRFejOyvxlVeM33/fy+77vPd6vSclHU1xjPYlXbzCSyyA1LYJCE3+6ybY/SQ2NOxyg\nia/bZU7QGFTW+IDnNfZtzxExyhSSEdJCNyr20iIRztNjbyOaBhUxBAL02uvUAxpZOUnWTtIvZ/DQ\n4Q4HyJKiLfjw0GKEZTRqbNCLhcghbpKgiK1I1MJ+ml4vPUKeJ3mDcXOJkF1BUTs08WEJAnk5jjmo\nIHUs5EsmvfdzMCpTHIwT8lZAtjkk3ET1tMkk+ujdyRIo1DHiAtJtG9sQCAzVqCb86KqM0SMgxgw0\npUbvZpbIZgWpZkMCmpKPelujf2mbA/45zCGZGAUEbOpGgNHLa2AL9B3aZMcTxi/XmWKWXjbQqBGh\nxN2dg1TqEdakQZLhLE3Nx44WJS4W8XnbCEGTqqyxQ4wyYfrtbQQLbnKYOf84gd46cV8B0TL52ebv\ncV06jKp0umX7IYumorIiDtHPOgGpxlTwHq2Mj7eXHid/IMF0YJYk2wSpIos6OTNBs+CnbES55j+J\nGmlS7kSpbMfJyBIdzUd/YpVDwk1iFBhjkRGWaahdBVCAGio6PWSZb0w/iu37vrb+IxWOPTNP/Ov3\nYHn93UjW3VXPSRg6L/j+pKOb9nD39nBoCAd8HeB1l487QOlUJLobRrnL0h2wdicVHZB21nUA2H2d\nu8TdnWR0rnNz127H4Y6wzT3r7HUcIiCtrJMev8eHfnmeq6+0WL/x/X/v94M9EtD+WuU5Ph59CWPb\nQ7yQY0pcwIxAxF+kSpCX+QgFYqSFLSpSCIAp7pNezNNpq2zG+0hJW6T0LEk9R16Jk1WShOQKi/YE\nJTvMjHCL2dY+1qvDJBNZop4iHVtlzp5mrr2PTsXPp9UvcEy5TII8X+V5FFPnp4w/ZKi6Ts3W2Bjs\nYVUfxKzLfMr+OgONTdqmF8FnkpMSGIJMVklSGQ3h87WY+vUl4lKZ+LkyekxC0EyG5RV8NCmEo1wP\n7cf3eovAZh2xIdDJq1iCiFQwsTSZdtgDo+DrNOnPV/AuZui0VOqeAD6jSdUMkdVT7J+fR4jPYg9a\nBKnSQaFuBTh65QZBGpgTEtfkQxSkGJ/gRVR0SkIEBZ07pQnuZ/dRUiNMyPcRNYsyIZq2D8nOE7Sr\n5EiwxiAtvHRUhXIwzJo8wOudcyxUJ+iX1/kx+U/4x8L/zh/4PsM9ZZoCMVphlarHz+3OIQxRZlRc\nYr/3Ftc2TnB5/Qy1ET+mLGEYMjFvAa/Uom4G0Le95Fpp2mE/J/wX8FQ75OfT5K1eGmmNeCJLmDIn\njMs8136RBXWUZaVb9p8ki0oHP02yzdSj2L7vU+vGxmMH8jz/c/dpXc+zdn83weeAplv+5lAWznE3\naMIuR+yOzN2RrFvu5wCn7rrW+Rl2gd1xFG5Kxu0A3OXvzud0N6FyinKcxlDO+w4FBA/L+dzUh7vo\nxl316azrdA50EqgbgDyS48d+4TuUN6ZYv5Hg/Tjl/ZGA9ubXBnjz5x6jNqHR0T0UhShntTfx0qJI\nlDRbHOUaz/Dqg0d/odutbrVKrFTm6NRtVG8bqW4RW6wxNwrtYQ8RSjyhXwBD4JLnOB83X+a/NX6T\nLeJkhD4W7HHytTgmAonkJgeU20wzi4XIIGtE62VOZa6zGu9nMTyEJlbYutvP9fIx/r+Tn+Ox6AWi\nFLkkneA+k5hIPM9X8NLEjIgYPwcL4hC3ew7QF84QooKBzBZpciSoEEYPKLQHFIr7NZamR2kIARLR\nHC2vB09dZ2JhGe9qC6liISRgdnCS5dQgT7XfwkKk7vNz7exBLEVEo0rAriNiIsjwzqdOsE2SQijG\nTXmGXjb5jPVHnBef4hpHWaefj/X9Kc/Hvsxv2L9I1pfgOkfoIUtazJGUsswLEzTw0cc6MQrU/H5e\nVR/naeVVxLbBvxF/iT5hHVXqcMF/morYHahwhwMUbyQwV3xUJ1QK0z2AyOZXBwmNlDjzifMcD1/m\n7MIl+lc3+frpjyBGTaJqkcHpJfZbN3lcfpOcN8EV4TjSZBPrTQ9WW6RzTOUV4VmqhTB/78bv0pn2\nUR4MYyIxxxQ7xFlmhHCo+Ci27/vUFOAwge9com/xDUpzFUx2+33ALmCbdKHHabsKDytJnCjX6dXh\n1ks7FItbe723uZPzaZz7uqN8516K6/w2uw7AWc9RczhPBe6uIG7H4ejHnfPdHLW705+bJpHpdjN0\nKB33+s6xxoPPIVwpEPuvLuBZPAUcAq7xsDt67+2RgHax1MPC1hRaok7eE2ehM0GlHqZHzYHffLdI\nokqQDfoQsIlQoj7sQ0yYFD0x1pV+ZMnktH0ZBQMJkwR5BlhHFkw2hTSD3gyH7Dv45RGCZpUevQCi\ngK6rDNUynA69Q0CqsUpX0eEVW4S8Jdr+EQreCDY2fdo6mAJj1WUq4RAb/jQFYnhoo9ImRw8SFiFP\nhbnpCXaEOHk5xjYJgtRIkEelgwDEKEDapGF7qMf8eENtFMvAo7aQBJ2O5OWGdohEIk9UK2KlRGzZ\nRipafMn3AoJoEOqUSC/k6IQUKiGNBn5ELFqil/JAEFowUlxDM7qJ1UF5i/HQEhnfIHfZz1BmjaPV\na9SnfQTuN0nls4indIK5GsaWytrMIEqoTb+ZIVytYzQVWi0vwxsrVP0hJifuMyitIYs6C+IYAhZJ\nsvhosp5YR7AgFd2m45Fo4iXZt82B4ZscS1/mcPM2mtSgFgkw1VxA8BoIPpPJ0CwKOj5qhJEZ8S7x\neOo84YkGrbaXlcVxGqkAw+oauWiMe55pbnGQEFW2SLNJmhpBwkr5UWzf96XJfpvRj1bpL+VpvZp/\nNxJ+qGSbhyfJwG6JtxORK65znNFezrXOy0nyucvXPeyC7N7iGLdaxR3hOtfuBR13Obo7QnZA2MOu\nXM/dObDFbjTvpkfcL8ec4Q0ddhUu8DAN0wLsYof6W3n6PphnMlRl6SUb430WbD8S0K5HguSXe9G1\nW1iSRKUS5uXWJ0hqW0z47xKhhIBNhRBrDJJim0/wIo0zKhVS3BQOcUF4DL/UYt/ALHpQxkRCQact\nq3Qkm7SwieatUFH9bNBHol3g8c5FjopX0UoNxjbXqE8qLEaGqZoaDcVP2RtkM9WD4RERMamhcXzy\nIs9Wv825xQt8S3iGS/7j2Ajs4x5JsiwyhomMKUjMKVOIWCjovMxzyBic5h3GWSDODhGhhDVoU0br\ndiZsF9DMOoZsI9oG6+oAXx1/homJefZbd7EMkb67WTwZg38886uk5U0+1/h9pl5ZoDQU5trUDFU7\nhC7IbJHCRmC0ucJjm5dRmh1UW0f2GJzuu4whSryhPoF6x2RiY5lfGvsNPNcMxOsCm1MJoosVuCZR\nH9AIyQaRRoXRwjrhYhUlb8AbsDG+zNmjb9Gj5wg2qjQsPzGK9Mmb2B7QTyiMsMAhbvI2Z9gmxdMv\nvMZx6woH2vcYqmxyMXmC66MzPLf9MlKjw5J3gH57nSxJ5sTpbn8ReZG0tsn42UXmNvfzr6/+Cj3e\nLJ0+mRtHDnBVPMp9JhlhmR3i3QHJNKk9UM/8TTSvpvP4568xtThL7tUumDng5u4xsrelqgPazsAD\nB2CdKsO9rVJhF+DcXf787A4/cNMpbirF0XC7o2GJXSliw7WmA+juCNh5T3Edd8sInc/pOBWH2nFL\nFd2TbRyAdlNC7s6DwoPPlAOmPzULw37Wz3v+8wVtQRBE4BKQsW37eUEQosAXgGFgGfisbds/OPQJ\ngZGQyClJRtRFDsvXmbcmUSSdfjKodNCoEaXIOAv4aVAmzETNQrEMSqEocWGHiLfEdl8MXRFR0Flj\nkO8IH2RD6GWYFc4WL2Hl6vyR8TmEiMGz2rd57Ctvk76egyJ4P2Mw0rdBOH+e7Eyai77T/Hzmd/jb\nfb/FkchVdoiTIE+8XUTeNBADFi28zDFJmBLTzBKmTIEYOXoYZYkYBWxgkFUEIEyZOgFqdGVpw6zQ\nwM87nKbj86DZdUbFBU5vXMHbMjGHZKpqkFbdx8TtZeSAzuapFL3BDUbVJfrtdbyn2/R7twjma/ia\nLV73P8nvJj9PkiyaVuOlsY9xwrzMkeINZhZn8W91GIuu8sKJryKdafO99lkygT58H2yjnaxBwmY6\ntsBo7xo/nf1j5PMGvpsN7v7MJLH+MgeFWRiHdN8WT1uvMXVtkfh8ETFnoUg6i2Mj/MmHP8kR5TpJ\nsmyRZohV0mxygkscKM2RbuSoh1U2vT3ck6ZoJPx0RIVNO83V+jH6pA0+4P8uNTTumfu4oh9D1XUm\nvPP801P/gLdCZ7jYOMP5rWf5SM83OB3+PVYYZoxFRCzyJNjiR59c8yPt6/fMFLxli2f/rzcYqd1l\ngV2AdtQWDog7PLA7Cne3UHWrQ9ySwL1yOafgxj0ibK9DcKJtt8zPza27ZYZurt29jjtyd+vJ3aXt\nzv3c1I5bS+42N5furO3uf+J8V7ccEeDI71yh19/ka9UP03hXlPj+sL9IpP3LwB26hVAA/wvwbdu2\n/5kgCP8z8I8eHPs+2z96k+OJy/Qrq0za90mb23zDa5OR+smToJdNAMpWmMJcAhsBccpg2+ynbXi4\nbswgyBY9Uo6LgeMUiVIiipcWeSGBZUr0Nbbx6m1KagRDEql7wtzzTBKJlKEfBuMZyqEwsmwwIG0S\nFUqEpRI+X4eYVEBH4SrHOMAdUmqWfE+Etl/BR4MYBQxkyu0w45tLNI1tWh4vI9El1sV+Lpqn0H0q\nPXKOIFUC1FB0E6slU/LGqCgaCfIU5Shqu020WMX/Tgv/dosTJ64T7C8T85QRPRZCyCYQqXNQvkNM\n3KGjqlzed4x+Y5Opxjychz7fFofP3iYYL1PxB5lTpjgyfw3PQgcWbcqpMB2/ypiwQD0dYKcZI7Ra\nJx+NszmQYpgV2mmFti0z6l2m5fdQjIXx7HRQq230gszs6CSr/X2IWPi9dQKhGoYhE98pYpVlDjZm\nSQeyeOQmEiYxCjTxscYQkgRtyUfS3qJte6maQfzFJqq3gyfcpkfMgQCz5jTZzTQbQh87iQSWKNLj\nyxP0lbEF0BsyqtomLW6yrzhL6m6ejaE0zV4fE+2LXJMP/+V3/l/Bvn7PbLAHeyRCZ/6LGDv5hyJU\nt47anXhzABUermLcqzJx89R7ddMOuLmLZcQ91zjOw2BXI+5WdTjab+e1l8bYq8N2F9E4fUicqNxN\n7Tjg6wZwJ/J2HIy7qtNxBM53wvWzDei3c+jxATizH5Z2ILPB+8V+KNAWBGEA+ATwa8D/+ODwC8C5\nBz//DvAaf8bmPnfw2/xy8F92BxxUm+hVP2/JZ7kqHWWVIZ7gDXQUclaSi68+TgsvkxN3WBJHKApR\n1JZO0FshrWyRo4dFYYwSEY5xlX3MctC4w7mdN6kENG6PT3GCtyjYUTq2h1c/9RQFQnxYKHOXabRW\ni2DyBp5gm7OeC7ww8hV0S+aifoqvCc+DCNFQkY0TMlX89JCnnw0qhFloTvIz1/+IgcYGUtTEnIbf\n8Jzh33d+kXOpbzEgZ/Dare7k9vY2sVyN30/+JJYi8ln+kDJh5IbNxOIq0qsm9iz8ePFrcAaaBzws\nzfQTMmr0NEscCVynJXrIKP1cGHiME63rjG8sIn7D4qR4hWPadbaPx7jhP4iNwPF3brDv8gK0IHOk\nl8yRNCodKoTwVZp8+Mp3eWXfOa7GDhGliJA22ImHUao6xb4Qm08mmX5pntByjbro5zufeYrlsWHC\nVgnfTJPc4SgtvBx94w6DtQx/p/of+Y7yJLflg6i0300qf41PkQ5vcdp3iZ/a+RKKbaLKBs8uvI4c\n73A3Ms4R33W+Zz/Jl9qfpnYnRtBfYai/O+nHskReMj5GVkoy4l/i3NDr9JBDvmPx7Be+y+8991Nk\negb5TPmr1AM/Gj3yo+7r98rkI72In57h6r8I09rs0g0O+DovB6Tccj93BaEDlA6/6wYsd2LPAXan\nPNyhRBx+2w3sTvTsALaTcHQif3ck7BS6OBSNc73tet+J1Duul9NxEB7m7x1nguuY0zfcGYjgLt13\n/h6OltzpduhE4bd1WOgJI/69U0h/dB3zPzfQBv5v4H8Cwq5jKdu2twFs294SBCH5Z138WulZKsEg\n08wx7lskKpfYkpNYdFtxLjIGQNUOUr3hISrsMGnPYfkFhIpAYSVJKSITilaI+ovsE+7RxEcfG5iI\nbMhplnsGKMhRFhmjSpCp6gInytcwwgKWT2BNGeQyJ6gqIW6EDjHdus9Ic5mw3MC+J3Jm5xr/RPs/\neG38SX6z9+fpZZMkWUJUWGOQHD2Yfpk/OPUTnCu/wdnKRcQ78InoS/SPbbIjamyS4lWeIWVu49VX\nwICm7aNIhC1SeGjjMxoIVZvKJwO0PyujRWuomDSqAW7HDlJRQ3RkDxmxjwR5+thghGVUpclscoy+\n/26DjqCSGeunE1booNJDDs/BdndHb8NgIEOkXaDtUSkTphoO0jijkAptsB8ZLy2CGw2Ss0XU2wbx\nQomA3sRvNzEmBeyTBh9rfYvWmz7EbYv5x0aoDgQZY5FAvcFCe5Qvhz+Frdp4aCFiYyCjUeM5vt7t\nfChs4JVbRMQyqqfFv973CyTVbcJGiW9vfYw7+RmatTDHhy6RSmyg0KFEhJ31Hu69dYi/dfr3ODP8\nJsEHycdMdICDT8xxZOA6PcomtaiHKenuX27X/xXt6/fKnk2/zOeO/TvqoYe/v1MFKe855iTtYLdw\nxome3XI792gxR8Ln6K6dpKWztpu/dvPgzpruLnzuaNpJKDp9RdxOxhlc4FAUDi/uXOfcx0k+uoHe\nzaW7y/Gd+zlcutf1vlsC6TinALvgfSB8j187/g/5wnf7ePXdB7H33v5c0BYE4Tlg27bta4IgPP2f\nOHVvZem7tvovf4d8oMZ5o83EuUmOfzSAiYjfbLDR6SOzMERArZMa2yQfTQACCDAmL+L3tLiuBtCk\nEqMsMcMtvEYbw1YwZAlLEPBLDayATQMvFULUCdASvOiigleos02S2xxgk14UQUcWOwwbq4yW16AM\n7bpCrFngA+tvsC0lySsJCtEY49YiA9YGO0ocUbSoqV7u940TDNUQd0w87Q6KX2fKf5d5aYTyg0EK\ny4wQlOuMB5YZrGUIG0U84Q4IAqYsYmugD0t04hJ2ATothY4gEa7XaAQC7HgCFIngo4FqdZjR79AW\nPFwNHGL7VAJDUMjKPQxZq6Rb2/haHSLZMkUrzMKRUQZ9a6RzOVptD8OFDFVRwzpg0/aptPFgITJn\nTnHb8nLSe5GO38O2kSSRzKMcbGNN26Q2tlBqJoYsUd/xYSvQG8ySj8W4Ze/nhu8gR+Rr9LJJDY06\nAaoECVHuNtISRfK+ZUxZABG+qz2B1mowkN3kcvEM7baHYWWZI6krJKPb1AkgYGOKCrJig2hTIEaV\nICUiiP4C9qhI5tIir/6/S7wqWgjt/F98x/8V7uuuveb6eeTB66/TRIYzS5y78E3eKpmUeLjS0V0M\n4+Z8nRaobmWGm+pwQNyhDhxFhhOtw8OSu708tLvVq/wDztkbwe+lRZzPDg9ryZ1+Ie5EqbukfW8x\nDuyOKXNz2W6H0t5znWN7HV6wmOfom9/gwvqzwDEeTs/+ddjyg9d/2n6YSPsJ4HlBED5B1zkGBUH4\nD8CWIAgp27a3BUFIA9k/a4Hhf/o5kuS4ljnNRb/ABst8ghdpGlneLD2O/sUAh+M3+MgvfYvSx7oD\nBZbEMZ7mVSa0ebLTCaaZ5SnO8yG+TbqZxzBUbmnTWJJAkCpxdqgQQsagiZcrwaPc06beVRzcsA8z\nzAqnrEv8WPtPUE2gAFyEyjN+zH6R5B+X+Iz4ZU4Jl/mDo59mWl9gnz5HORTCEkUk20RG50bgAFe0\nw8SHdwhTRqOOjEGCHCPCMu/Ip9nS0vRov8+5G+eRLYPGQZlVeYiaX8OeEJEDBp6mjWfRpjzgxUpZ\nPLPxXfJWjDueSXIkwBbwWB1OV65yW9nPd8LnkBQLWTDw2w0O6bfYX55DyYLwJ3DNO8Pv/JOf5m/l\nvsjji++gzjc589Y1dI9I5X/zsugb4yaHSJLly/Ef47VjT/MbT/8iBSXGq/YzPMYF0mzhFVr0jmzi\nG2limBKH3rqN704HpuB7B57isu8IQaocsa8zzArvcIYSEe4Lk9zmACUiRKUicS1PiTC6obBT6eHO\nVj/v5GUIwaGBqzw78A32MYvHblMgRp0AvX2bHHvhKn8s/CQv8RHGWGQf9xgQN8Bn8/xogxf6AQ3s\nO/AvfogN/Ne1r7v29F/+E/yFrZsqM18S6LxkvAu4Dsg5tIROF4ACPCxtc4DNnVis8/0NpdxRtfO7\nE7E60XHLtaYTvTvA6oCnG2AdDh0ejpJxnePQFgq7AxM6D95T6GqtHZkfPEzTuJ8CnPs5DkQEKny/\n43Kcm0OhuBUrLUC4bSD9NxXEd11ggz/Xh/9INsLDTv/1H3jWnwvatm3/KvCrAIIgnAP+gW3bPysI\nwj8D/i7wfwKfB77yZ60xIGcYsDP4k00KUhSB7kAE0xQxkPF9qkJd8/AWZyjE4wSEOqMsscYgHVTG\nWGScBUJUWGEYPAIBtYEkGrzBUywwwRO8QZ4Ec0yRo4cKIVSrw4d2XuPZ/HmeLZ8nM52mEgnyh57P\ncq51AbnH5M0PnWImeovh0ipiyoYR8Pc3mJLnCAs7NCSVvBgjxTaHCzdJv5gnNxpn7clefDRp4WWH\nBMsM46HDIGuIWMSbRcLFJtVkgDVvPzflGSaE+8TkIpeCh+jICqJsoU018PtrWIrA3eQBlpVh8sS7\nY9M6S0wVFgm+XWO/Ocfn+v+IhX0jLEZG2LJ7MfMq8kXga8BtGE6v8fmX/yPDo2sQoavLehKkoIWW\nbxNSa4hRi1vMEPUW+ajyTapSkAohYu0C03cW2NZSfG3qk0wyzwhLDAmreKd0apaPnWCCqhpguLDG\nJ2e/yUh0hYBW5yneZjyyxGxwkld5mghl0myi0W0dmxK3CWllirkE1js2Q59c5ETsbc7wNmXCXG0f\n53z1A9RkP2OeRcZ8i0wxxyhLDJDpjhzz7vD2wHEm1SUGCxvQgPy+KN1px39x+6vY14/cVD8MPUau\nUeHWxp9SoQsyzhQXJ1J0c8FuSZ9jTgS6V9PtLm1397l2foeHQdKZZOMuS3eoCFxrOPdyJyEdZUqL\nhyNeN5DunTPpALjjeNxPCz+IHnEUKG65ocIuPeQGP7eD4cF5DeAdYHPwAAQeg8U3odPgvbYfRaf9\n68AfCoLwXwMrwGf/rBODRo1+dR1bE2gjU7YirLZHqegRej1baDNVBsQMY60V7vtnaEkqTcFLluS7\n09JtBEwkWngpyFF0XSFcrOLx6tT8GqsMYiERpIKNQNQsEW2Xmawvsb86i1GSuFOc5JbnADf8M3hV\nnZbq5dvaM/j0BnG9QHvaRO4zkAI6U5l5IsEiZkhEE2rEKTBuLxDrVAgaFRSrRbhZoUGAdalNRhkE\nyUajio8GPa083pxObcCmEfSxIfQyfm0WowXXT8yQMnMkrB1K8SCy2O0DntH62CGGZJkcaM2SNrJI\npgXFbmvX3vQWm3b3b7JFilVhmF4zS7qWBR9ErTInr17DSEFj0EN5KEzIqKE1G3jeMRmeWKey7x5W\nCJJKFr/cIEAd0QB/p4OgC+TMBBkGUTCQMfALTSJSBY/RwayJpKtZAqUmp6pXkTsmVCBbvw6oAAAg\nAElEQVTkb9Bb3yDl3UaPeKn4NTS1ipc2NTRUoUPEW6IcLKKHvahyh0ZLY7U5RibQx9X6ca5unwLd\nxBvuUByNolF7wMV6UWmjSTV2AgmaMZWSqFGphsmlI/xlQfuvYl8/ahP9EsGnw9hrAbY2djvaOUDp\nbvTv5nMd0ITvpyTcVIWb4zZ/wPvOmu5CFjfl4Y5e3c7CTV041++latyqD3i4f4lje+WB7nu6wdqt\nVnE+u6PvdvdEcc5znjzca0LXSeQB+4iPSL9GZUvEcjzHe2h/IdC2bft1HsTstm0XgA/9MNfpNS+J\nWJ7rHGGDfvJWD/8q/ysMqGs8lnwTBZ3HG2/xs4UvsGGO8E31Q1zgLBYSFiLCgz9jhBJHuUYNjVoz\nxMn713kh/afsH77DHQ4QosJp3qGFl8H2Bgerc6iiDjGQNJOD5TlsQWRpdJgvBl9g3p5k3e5jTFkg\nlCrj7WkSFKtENitMv7aIedimesTHEa7joY031mL9Z5M0RR9Ro8S+7CJBq05d8+OJtJCkDke5RoYB\nwp0aFCESKTPoz7DPN0vo/8lT2dS4+9v7mTRXONy+y0q6l4BYBwS0BxWVA/oGE9kVMoE+7kanODty\nhUpY48rhQ9yXJllhmIzQz+u9jyM/ofNc/OVute0asAm6LpJNRbieOsLBN+eYfHsZXofjZ65z2LiF\nfhBqER8N1YeEidZpQ0fmK0c+zqIyzATzBKnQQWHD6mdidpVkPkuPr8K+O4vgA+lDJizSbYQ2Cp6b\nJmPldYZO/h4bgz1sx+MYSJSIUBbCRChhHF+lfiBIZnWY+dl9fNX+CdTROkZLhnUJ1iXa6QA7I3Fs\nAXL0cIsZAHqtlzjbvEhTU1mK9XHDPoIsGHRHRP1o9pfd14/a1Eibkb9zn+Tb65jf3AUpd7m6Ww/t\nAJlb6eGOit0RqYddDtwxh08OuK53eO4OD1MS7igadoHS7RDchTN7+3TDw5WKThn63kEyDnBL7OrG\n3U7Brbd2wNlDl1pxKKG967XZLfN3QNyhShRg8Jk1dk7c49Y3OrRKvOf2aPppq0HWGETCZIAMw+IK\nI9FVbEkgL8SoEeCeOs3L0WfoWJCWMoQoPSikMLnPFE91vsfT9uvIqkFd8FPwxtkZSdDj75ZU6yhE\na2UO5+5izkpo5QY+2tAPeME2BUopjXwsSlkI08SHjoyFyDXhKCGhzAfFV7nMcaqRMGcfe4dcPEFV\n9LOfe8QvlfDdaxMca3Nh5DS3kgdIaXnClQqB7QZnC5coRzUqPWEGZzcxOwoXpk8yGFxhR41xg0P0\nfXCdxIUVRv/hl4im1/AHmwxUt7E/YmKeEDkxf4Pl+CCr6UEGAxv4PHX8njo39h1A9bQZFZcYrq7z\nWPMSpU6ERkJFibZYO5BETyn4ih3SlTzKqk18s8KRqTu04h4WzwwysLKJumQg/JaFrULp+V4Wn+/O\ncYyrRWJikbaqYItgID9QwhfwCS3sYRNTAHnBYvVgH1ZSZEhZZ3F8hFbTw77KPMqagbBho/p0JJ9J\nK+5hjSFWGGGr2cvyvQnUcJve4XXKyTBDkUVOiFcYDC1T1sLcVI6ijyi01z18+zc+gd0D3rEGfUc3\nUeQOnaoH5Z6FQhNJ2cYvXUYKv38b1f91WFCo8oL6ZQblm7Tosl8OmLqb+7sjVnd07GOXHrBc57uV\nGQ6n7ES+7kIZxXWNWx3idg4O0Dmg6wZqx9yacoffdq51OxI3sMMuFeIeJebmxx0n4zS12qsgcQ9B\ncL6Hk1h1/63cVFAbOCO/ybBaYZkRWnh4r+3RlLGrPu4zgY3IECtMMM9J+wpVM8Ql4wQL4hir1hBf\n1n+MQiBMWC0SpcgMt9CoomAwad8nZW2TtRN4WjoeQ+d+YoycFCNKEY0aaT1HXy0LWRAKdHdOlO7/\n6RoYKQkPbQZL6yiiRVrJkldjtAWVBcY5xjVqZpCSJ8rS1BBbQooOKsOsIlYLBFdbBKstbEUik+5n\nSRshUG6QyhUYFdZYF5LMJsYQWxI1OcBC3zAWFgVirNOPMeEncLtM6N9fQn0KlGmIzVfYPhKhUfbS\nf36T3KEEi30j3NAOEpSq+OUG870TBKgzZpXpszbRjAZCx2KpPUQj4KGR9LCR6sOrdwjXK3h/t0No\ntUkonGFlqI9Gjw97TICLwHUQKtCYDpA3EhgVlTYNdEUmLJcxRJkOKgNk8NCiIfgpJ4NopTrxXJXi\niTClsRCNaoAdXxhPs4O1I9AIeDHCEoFSA89dHa3exDfSgaBI2/JgNyUEX3fw8cHITUZY5qR8iSFW\nyZKkGfTSxsNSe5yrmZOkxS3G0gVG7SUsJFbtITS9Rcis4NHbhOUKmvDe84uP0nx6k7OrFwlkV7jG\nw+oQd8Wgu+zbXcruRLwOOLt7fTgKEHdVIK5jDgC6y9bdBTDu3x3QdKs03P253YoNt87arWqxf8A5\nhuucvZSNm992WrY64OyMGHO+i7sASdpzbG/vFROYys0xuNbCa6ThbwpoG4rMbQ7SzwanuMhzxosM\nrmyjSh3O9r/Dl/3P843yc/zJwmcJTeXpiW+j0iFKkWFWCFGloyrcYAYRi33ZBaZrS1THg1yRjtLE\nx8/w+4x5FiAJPEaX6qzRBe0cCMs2iVCJSOU6R5t3MH0SekSimZT4D8rPMitN8TZnONd+gx4zz4XA\nSQJCnTgF1hgkeLRJQivDV6E3s8HEyXne9p7EMBU+uvNqV81gCrQlDy/OPE5b8DDEKrNMP5g9WUfZ\n1ulswI4JzaN0yzrmYWVqmM1CithXLxC0q4gfsPht7+c5yC0+yCv4aFIhxC1hhk5ojmQwi2bVGapm\noA6NsMwlTqLLKoOhNeJWBb/ZgSj0b2xhZwXkXhOSIGyBGgZPxCTeKnDs9i2iVhkzIeEbbqJrIkG6\nfPQGfSwziinJGLqHePYWcstgQ+nlxegn+Lj+DQ7qt1FknfUPp6iJfqYuLRP/RpFIvsKB/2EBacZi\nLdTP4ROX2RB7ydHDz0u/SQ85tkmxzAg5err9yhGxR4G/q/NU/BWOBy8jySZbpFmJDHP5zDFGWCbF\nFgAHt+bocjR/M0yqWUS+XkdZbz3E37rblDqP+Y65pXVO1OwUyziJRnekDT+4eMXpFOgul3foD0de\n58xz9AogCWBbu1pv9z0cGmIv3+3+Tk7HQQdUnUEFTnStPvgMDp/v1ly7hw870XWbXZWI7Vrb7dT2\nPn04EsfAxQ7Sehux/tepHPnh7ZGA9j7hHgl9hzd3PsDbnsdRQx3GUsvsX5pj6qvzPN3zPbxJneBQ\nlZC/hEIbG5EOKrcKh3lz7kk+s/XHTPiWuPHUQUZ86/QIO/SJ6+wQpYGfODssq0NcDJ1kn/8e8Rt5\nlK83af+8hiqaBFabbJ1MIiZM0rU8phcamoeqHOGYcJWp8jwDS5uMZVZoKwr1pwJE/UXSbCFjIGgm\nxWSAYKzJcCWDcOcCiyPDhGMljGmRrBanHZYZNle4Ih9DEg1GWcJLE0m3Odm4zrCxinXAy8ivJyie\nCfLGqEYtpXErvp+qpZH6hTzV8QAdQWWYZfrYQEVHwqBEhC0hTU3QmGaW/eJdOn5QcgbBG20O7btD\nNRmgIgSxnxYJbdcJCQ3Wkv3Ue/xM7iziaeoIfqAEvYEsWqNOLFii5gmw2tPHgjpKaivL9OoSnSkJ\nKWJiWwID17bov70FEvSuZdHDKvqwgiq3qZpBfFslYkoZX7pF/bAH/7yNpNuUowHGSkt8duNLbI8k\neNPzGNc4SgeVDgoi3enrvQ+UJjmSlIwo1GWMHgXFozNAhgEyyG2TWLaMHbGRZJ2e5SI9mcKj2L7v\nG7MaUH3TxlPffdx36AIfu320PezSC24tsxNFu8eJuROAjr7Z6U/tVmO4k5y41pVc5/DgZ8MG235Y\nbugU6zjRLq513c2i3Lpqd58RNxXiFN24o393GTs8/FThOAf2/O58Luc+bopIda1l3ILmko39Pnmw\neySgfYyrjNor3G4dY10c4A3pCfI9CQJzDQ5enWVy3yJKrIPWX0JBp4mPbVJsdPqZr09xJz+DeuEL\n9ClZLp06ju5X8MhtBslQsYLsiDEEbNbkPu7IB/FRwzJ1gjkbo+mhJYvUIxolfwiv1sLwitimRVPy\nkJWSJIQ8E/oiQ4UNlDWTLD3Ehkok+vOkA9t4Oh1k20CXZeywQEQsoxQ7eKMtJM1ke6yHVV8vqtAm\nYebxid1+HJ4H5d1xq8RgewsxaJM50E/54NPMB3uo+EI0errTelQ63P7JaSRMJEyOcJ0+1vHSwkOb\nsh3mhn2YTGuItuBlwJfB9gpotSbptwtMNhbITsW5PzJB4GidaLWMuVpkM5WkEfAxHFhFMXVEGZiF\nsFQmQI1Oj8pWIMFqsJ9m2Yd8y8Z/qU0u1kstouG3G/RvbJEu5SEN8VwZ9b6OJ9CkE1KoSRoJq0wk\n16VySmMBOsdkxCA0NC897RzDhVWKWpBiLMKCNo6FgI2ISgcTibBdZppZbjLDfHka7kg0I34EP4yU\nV4kEioQ7VRLbZW4r0+QDUZLlPFZb/HP33n85JmJ0FDbuC4TZjXCdSNEpF3eA2wEmd9Wi855zfC/w\nOhGtozhxR8M/qFeIE0G7uW54GMDdQw7czsPhoN2AjGt9B3Dd+m7nmBNZOyC9V/nhLoF3K2EcR+BO\njDpl6+4o251ctYDKOuQQMB4acPbe2SMB7dNcpKMofLT/T1kQxikQQ8JE8NvY/QKFx4MwbnCAO+jI\n7xbJfLPyHCvSCE9/4FsMvbWMst6hx8zhFxp4hRaj+hLLwhCL4liXM0YhSpEKQXIfT2OdkOlbLLDl\nS3Hj5w9yqnyVRDlPpdeLttTGQqUYjFAXNCqRMvFTebRoi8RCgY+/9Arm4zbCjIlv20C0bIS6jWRa\n5Eei7MyE6V/fZEPv5XuDZzAFsdudUAyjYNDEz2VOUCfAiLzCp4Jfw3dQZ35jkn9+/n+lMBTDM9ok\nlcpwVL7KABnuM0GKLGN0dcphSoBAmAp1O8BV/TjtNY2aJ8T0yF1MZNKNHOnVAt63DFozGlf/0VFi\n3iKJQJ7NiSoeuU2SLcy0hVkCUQDWod2UKccCbNlpdsQYalvn3JU3SX5jh84FlbefOkt5QmNMWMI7\n3oI43RDuOgTmmowba+QORzBjEsIRG26BctskFqxRP+ahdUSmt5yjrGlkp6OkbxRIJXcIHyozSIYY\nO2yT5iaHGGKVc9brLIsjsAW8BIyAptSZPr+IOtNC7LEQRZtZYZrb2jTeYy2yZhL45qPYwu8D89FC\n4C4yI3TVEI5SxGmz6tAZzkja4J4VnKIZd6tU+P6eI7ALxI56pEO3QMVNRTh6Z3fE7ObT3eYGcB5c\n22K3GMcdwe+lfmrsgr7zpCCzW0jkmBvs2+wmah1KpkZXe+0uunHW7biOOZ/XAfZVYBmZDuEHK+3V\ntDxaeySgfYsZAtQ5wSWOb12jlI2xNZFA1GwYtAn4W6gVA2tJ5MX+j3A1cJR1vY+2qnBCuMRPNb5I\n4ykvL3Y+yluBU2wo/axLvXjFBpFKladab+LvqSK0BaariwSEOuuBXs4PnWNA2iSg1uiLZ/AoDbLX\nDO7+G4GDHxWwDqk0BD/3mMaSRFoBlZm+e6SUPJ20iJLs4Cm0Ud62EctgegSqUz4Wx4a4oc2QT6RI\nq5tMi3e7fVSMFuFmlfArddptD8Ih6NRUwnIJNWlyVTvK0sAgPy78MYTBp9WJW1l8VpO6GOA+kwyX\nM8xUZomLO5SCQdZDaUpE8QsNxpnvPq0wyE0OMcYS+b4YL37yI4QKZfQemZScxUagJXrRPDW2SbJu\n91HwxggO1okYVQZamygeE/OeysXRkwgBmzF5CWmkg3DSQDbg4Dv36HRk4qdzaPVad5/awDKIazae\njE5ErlI+FOJ2YprkdJZQs0ItorGkDVMWQhxQ7rHiGeKOsh9GRC6qJ5mvTXDfN8mM1CbpFBsaItFm\njZOVazSUMLkfT9IZUljVBhEmDRTNwJBlcv0hrKCNLBms+IZovw+SQo/OEtj4aOB7t3GSu2GTA1AO\niDmP/k4UuzcJ6PQZafJwZOqOuh3Koc3DShCDXX7cDaZOibj7Pm71x16VisbD7VqdBGiL3aIb2bWG\nW+vtNIBy7uGso7MrKXTLEJ1o2i1ddLetdfIAbhWK816397cPi3G6/xD+BoB2oR1HFXWGzDXi5SLN\ndY1ryUN4fU2qoxo1T4BO3YOeVbiUOMWb/rM0DB+HfLc4Lb3FVHme184+yYXQabbtFHUhwJrSzzAr\nHOrcYbK8iORvo7YNvCUDX6PFTk+cTGAAIygzbc6xv7KAInfIrcLWv9MZOS7jCYGMgWl0R4S9JoUJ\nh2rE1QKNlJdgy0TetBHWgCKYcYnyRwNs9/Vw357gjZ4n+QDf5cN8Ex0Zv9ki1qjQvp3DakmIKQvv\negdZMUGELU8aK2bzt+O/RViv4DVbyLbOfXuSy5yghRdvq0OqnEORdLJqD9tWitXOKKYocVS8Ss7T\nB4pFiSg6GQq9Ue727mekuUKvvsW++hxlTxhDkfCKTXJCgrIVgZZALmITmGmg+Az8+SaV7QirA8OE\nKSKrOrmJGIZPJhxvkLqQw1gS4biJWLHp1GQaXj/+ehOxbNL2q3iWdaSIzf2joxQngkTsEmU5zD2h\nm3yNxndYZJiLnKQwHuVedT8b1QEyygAj0nK3dzk7BK0qpq4wUN3kcPQGC8eHWBJGqZt+8jNR0q0d\nDGQ240lMsUurbJFGN5U/b+v9F2RxbNKYeN+NRJ1kIjzMLbuB0DnuKCpw/e6AskN7ONPY9/LDDgi6\nqRV3GbsD2tAFQnf/EXfrVyeKdiJ1h1t3qAnnvg637kTnDkXjyAhN13/hYbrDrT931nXPr3SeSJwS\nebczc5yTu5zdUefYeIFRupMk13gv7ZGA9t/f/m3MiEDWF2N+bIJSOsKpnWvIHp1rBw5yUTlJxhqg\n3hNgy5vioHSLD/jO4xObNKQAv93/02TlJD1Wjr/f+bd8Uf4JLikn6WWTS4lj3PLN8OnsV6gFfCyl\n4kxfWGDcnufTiTI9r5YIVet4+5oIUZtJ3ab/GPgFg3axzETPPAdrc9y0DvPPI7/Cca5xunCZ1OUC\nUtVCUoHTgBfMgEgtohGgzgy3kAWDQdbIkwBAogRyjcXPD1ERNXzBJqOedWLlCrThXP0N6h4vpmYT\nKjSQWybFvgAFMUYDP31soMdEZkOjJIUcmlRm0MjwbzP/PV5fi3N932Zy5C79wjpPcZ5NemmjMsl9\njq/eZGB7E8kwMYdFaikfOX+Uw8JNfI0W4cUmV5JHuJeaoDIZxB4V6KAy6l8kQokOKpc5gdJjED+7\nw/KhERqqD7+vwcc9r+BPNLh+7ACH83fxH2uw9MQAg69sIbxjIx8wOB94im1ShKjQQcVPgxpB2niR\nMRhilXw7xVZliMHQOn5Pg22SHOcKmlJnITzEZiDNijCMhMmHeZmEuMMVz3GO6zfQzDoZ+lljgCwp\nIpR4p3ka+FePYgu/D8wLRNCR36U33CXkZbqA5KZKcJ3jbo3q9PVwV0A6xx1nALtg6FAlTitVt9rC\n+fkHFbq4lSew6yy87AK/02/EnSwU6FI7zu8Ndh2DO4Lfm9B0gzs8TAM5EbvjNNwcuwPqbp23xMNg\nL6IgEAfe++qaRwLauiZQVkOYkkBAqSGoFnXbR1sOkfPHyZGgRgBV6bBzM0kHL/VDAW61D1K2I3i9\nTTShxnBphcnZJT4WfIV0Io8YM6gqGrLPRJItmoqXvBaDcQgHyqTELLFoDU/ZgFlgCOQoeF+ApfEh\nir4QFjZNFap2AEkwmZMneTt8irHxJeS2gZg38XyzRuN0kOYTQbSVJoORdQK9tQdtQ3v5lvlhntn+\nLqF6A9sSWe0bQvfIHG9ep9HvBQWiqxXCs1U6SYVbzxzE52tjKwIr0gBtwYOATRMfatsg1KyTjfQg\nKiaCDp+UX8QnNRi379LbzGJKEhVPiLvsx0+dZ3iNYLiMLLSRdYNSMEETH8lKgU1finpLo3dplnGW\n8EabiB6Dt3xnmNOn+cncl8h6k7wc+gjr7X68YotUaJvNUC/DLPNh61vUhnyYDYHB3CbSuIElQzxY\nYvXAAO2Kl/HlFVb7RliMjdHCyxArTNtzJK0sK8IwJTtKvjrNttWLEm0xr4yxbSUoWREOSzfoFTdR\nRZ1b8gyLjLFFminmSAg51oV+Xvc8SdGKMStMdHvV0ETEIixXHsX2fZ+YhICMivAueDmqB7duOcBu\nBOxORDoJO+d3dxLSAWc3leAArHtCjTvB6eFh0IaHVR0/qCIT13Hn/u7kptMMyu103Py2O3nqfHe3\nOd/DAWgniekkI90JT7ce3PnOe6s+3U8h0rvaG3fN6HtjjwS0Z2NjbNp9hM0KHruFIurMxsfRBQVs\nm0inTEioEpZKXF06TYZhbs0c5I5+ENsWOON5myFhhfHGEt45g6d7zrNfvsergafwCk3CYoVW0EvV\nq9FQfKyP9FKWgsRFH76pNZSqgXgH8EF1PMD20SSXkkcoaBGiFJG8FiWCDJBhU0nzRuIsrYSClya+\na3X6fm2JYkKj9qEY09uLRBolQp4y/z957x1s2XWdd/5OvDmHl3PsnIEG0A00AkFCYFCgKatoWaI8\n9mgo1UhlazQa18y4rCn/oZkpBZcVpiSNJMu2RCrQpCCJRGx0Nwig0fl1eP1yv3xzjifNH7cP3ulH\n0OKIZgNlrqpb/d65++x7zu39vr3Ot761VjBQZkvp5bJ+jI+tnyNcqdL2KTRjXlx6i8HUFku9/dTw\nos7qyAsa+WKY66cP4gt1eLG7TNHHBj5qlAjRbHiwyhK5QJyG4sItNvlc8Et4xRqtlsyjlavckwb5\npvIIGTVBt2SQJI3WLVJI+nHrTe5KY+htlScL7zArTbFh9BBtVOlqpOltbZJVgnyDj3HT2M8/KnyZ\nYiDC+cBp1lv9hOUiY65F6ng7FfbEWRYHx/BmWxxfuEFqPErDq9KTyTI/MUG+GeH4wjXCwRKhcAnZ\nMJjS5zlqXiEgVzplcy2Ru7W9NNwuQrEsC4xR1kNs6H1ogsqENIefGrNMM8ck23TzCb6OmxZBypxz\nHeEqR9imm73GHfqtdaJSnlH34sNYvh8RMxHQ8dx/ULeBz6YKnDU14MH6H05ud7f2GR7ksZ21PJxg\njuOYE/zgQVC0tdJ2qrktqfugZBgc58FOzW97Q3DyyvZ92IDtbKsm8K2bh00POakey/G7Uwppz2l/\nrzYdZN9/5zz7m/nws3AfCmjfZi83zQPMlA/QlDz4PRWG5RWGhRVGzSWe33gdl9RkezDO0dMXWWSM\nrBjns94/J2LluStM088GY95FlDGNZpeCmmjwbO0cTUum4AtyMXyElqgSaFc4uHCHdwKP8vuDP8XP\nx/8th70zuEomZOHi0HF+pfef41OquGmi0uZz7T/ncesdNHenqYCGwit8DD9VRmLLDP/QFrFDVWSv\nQPWIC/8Nk+BLTcrPmwx0r/KkdY5IKw8iyFGdM9p5xJQFt0DyGhS6gtx4fprYkzmKsh/DLZEkTYIM\nIUqotKniR8Tk9fCT3AlMcUo9R4UA22IPgWCV8coyoXSVfDiEv17hB2ZfpWdkG8IdrXOBMJqg4pJb\nXBQewZIkTnquEJELrEb7+MPnPs/TwlkOiDe5zHHyxHCrDV4depIeaYt/Kvwuf+j+SbrEFJ/ma9Tw\n4aLFOZ5klj0kQhm69m3zjvskhijwVPd59tyZZa02wB/s/0ekgkmiep4fzX+F/u11aJss7h0iqJZ4\n3vo6RlwiLSaR0ehhkw3LYsvsYZwFukmxzAg+avSxAYBdc2aKuyjo9LDFTfbzscYbPKJdohJ085b0\n+MNYvh8RayBQxIX+Pn1hg68zDdyGFadX7MxktI/b3qidXu70qp2ZhE4wc3qeTm96d/bhbl207RXb\n+nFn4gx8qzfu5KptgLIDjLuDqfacNr1hd8txJug4VSV2eVlnh3c7MPpBgcsdgZ9OhxqxWzV8ePZw\nApFEucskmqoSFEskxTQhoURPe5v95VlG31lB1dsEDlX4pPdvuRg6wWucoUtKcUi/QVctj+myWHP3\nUx/2IwU0XJ4mXWRpy0GMtkT3Rgq5ZRBql+nayCD0WWSFOGWXn5ao4mo2oQGWDpYb6ngJUGEftxjM\nrhPWi/QMbBEo1HA1NXLRCHk1jKWISHEBl7dJXXAzF5wg2ZtlyFhDchkMzq0zcHmbSKnUKYcaspCD\nbUS5s/drKNRdXirJAH5KeKkyyhI6Mpv0oqHQ004xZKyju2RySgxJMQhSJpwu4822eb33GTKlW3xy\n4xtIQR211CJ0tU4oUqIW9lDHS54YhiCRFNIIWJSkAJe8hwnKReJKlncSJ6k2fFh6BxC7SNESXWx7\nuwhQZtRa4lPKXxGixJQ+h2+jgSGLVPp8lAkRbRfw5xoMhtewXAJevUlwpY5QEtk/coe65aUohVl1\n95EPh2nrCnk5iCYolMww+UaCuJLnkHIFCxgzljnVfBdZNrjRPsTt8gGOh95FqRvMLB3h3sgwiViG\nKHl81JhiFhMRUdZJE0cVGnSRehjL9yNiOaCOQfN9VYWzAp6zeJMzuLZbDeIEbBzv4TgGD9ISbcc4\nuzmCTSfYwUQn7WGDppM+cWY/flACjDNF3eldO3XZzsSc3fpvW0IID9IjFg9ubnag0Z7bHu9hJ7hp\nZ046E4IsmnSyb6t82PZQQNtCxJBkjvvfY5QlukhRx8Oodo/J0hLKrIZYtUiIBU7H36Y96ObL8R9B\nF2QSRpaeep43xFPc9kwz0L2BV6gTEEqIQZ11+imU4xxbuU60XEQ2deSaQTRcYKK1gKQY1FxehJCE\n6msTVoscta6QJ8oIK/yQ9RW6CgVqmg9fX43J3CIDpQ1Mj8Xb0qOk6ALLQrYMsARWhGHaYyrxsTQC\nJr3nUyS+VIIesKbA7BYpx/wILgtPd4ua20cdLyYiEgYhq8QBc4b3hBPcY4iIUQLQgLgAACAASURB\nVCBSLbFXu0t3dIOW5UIzVcpygEi2wuDdLb7s+ixGXuVT976Od6gOFQFtVaFddFFqhmm7VLJCHB81\nhrjHQHkdw5R5J3ic08J5Bs1VetjCLbQwRZEgpU7rMGrMMdnh0oU2n5ReQkFDbFkMr20gezSKfT5i\n5PBVmnTN5UkMX0QLS7R1D2LOIlHI8kLhZco+Pxdcj/FK6GnMcOdeu0hR1QOsNEaYL0zzjP8VzvjO\nssIQw811juZn+L9cP897rUe5lx7ntPtN5IJJ+kovm6F+lqNZNqw+9gm3iAk5RllkwTXOvDrGI1yk\nz/jo9O373lsWaCI4PD0nMNo9HO1kF5v3tl/2Y77oGOcMyjkpC3te7r9Xd5xne6S27NA5dve5zoxL\nG2icoA47QO8sBLUbtL3s0CD2RmXru22NdYMH5YZO+scpFbTT8e257evz0BHyOdUtbXY8d4U6AnM8\nWCTgw7GHAtr9rPO/88sEKaOhkCfKNt285z7GYs8Yoz+xhM+o0QqqNBQvl1yHKQtBanhZVEa4GD7J\nHWmaoFHm042vs6l2s+oaJEuCeSbY8vawdbiHMWOJofo9+q9uczx1hcHra/inCmwc6GE+McU+901y\nwRAVAnzMeoUD+k262lmsAYG6qIIksNmfpNLjRfCYXJAeZ1vt5UzPNzFDFpqocJQrWAikSeKmgdBv\nweNAFvSQQHtaJHaxSEt1sfFogm1fkhpe4mRp4aatt+mrZWi5bzFkrTGY3iSez6NZCvlAjFCjgqdS\n5+2ex6gO+QiFK3yx8v8wurWCsAnurE65z0/281HGN5bI347xfx/5BbrZ5ghX2cctTn7lEpOFJa7/\nd/vwK3UGtE1+jC9TlX0suEepi15ctEiQoYmLEZYZZoV7DBGgwoiyTGO/TEv0USaAjIaHTg6vmIG0\n1cX5wcc5ceoKgWaNNwcfo9+1yg9aKV4SPkmaJCIGAibzqT3cyexnoH+Z3uAaNXydCosZBfGGScSX\n59H42zw78hpL7hFySoyjL77NE5FznDTeJd7Ks6b2kVaSBCmzrI+Q0rv5NH9Ff/37CbSbqJSYQCdJ\nR3hme7r2ywY1G4xs79QGNh87fLHt+Tr5W/sceBDQnIkz9nEPO4DvrPCn0QFZW98MO9y2/bNTfVJl\nh9LZPd7ebOzNosmOHE91fJ6tenFKCJ1p6rZKxb4f54bhZKmdtI79vgsYBLzoqJToqMs/XHsooF3F\n38kWJEQTNxUCVAigSzIuTwt1oE1LcHFbmaZMkE26iZPFRx1FbONS6/SxRlc9S3cqg+QyEP0mps+i\nLasIssWd6BSeZoNp4y5il0ksUyC0UWZ9OIEZkkjEsvhSdeJGjgORG50ApGggSCZ1t5eq7KWJC9MX\nQkfqvI+B6DbQR6EVVWkJLtT7D1cdL0Kk3uumcNrCnWogGQbSJRPljk56MMlb4RMk2zm6WxlQTUxB\nxBAkBNmkp7ZNdyZNfKZAK6ZS6fcSqNcJLtdQN3SGtTUq+FGrbfzBCtU+L/PKCJFwnnZYodHloqW7\nWRf7uGnspy56SYpptukh0FWn7vEgigYFIYxfiuOlji6L1CQPbVRWGWSdfhq4iZKnjpcFxhiobHAk\nO4NekRACoPsk1sQBTFlhNLhBxh8lHwgRcBVp9ctUzCRLvhH6BAXVaiNhMGXMkbRSSJJBW/Wi+A1O\nei6wR75NwsjgKbfwmQ3WunvRXDLD4gqPyu/xsvAceC0S3hQCJmUjiF+ssS70scogKi1yQoy2qDLH\nJLJsAgsPYwl/BMxAUTV6hyy8dVjY6HibTirApj+c3WYExwzO4J6ze/vOJzzobTu9cWf5VxtInTTI\n7s9wasLtoKBTyeEMDu4uL+ukaxTHvDY9s1uZ4ky7x/Gzk2t30kPOjQ3HMft9Zy0SCwgPgOG1kJfb\n0P4+CUSuMYCbJsuMIJgWPrNOWQoSEkp0kWKsvUJWiJFWkpTvdz3ey23iZOg2tzllXqAu+nC32rhS\nLQaVDfrCW5gYtF0yK/IIvyl/EassM5BJQQLMtkB7XWHL6MFfrXNi5RzWDagmc4RG89zVplliBL+7\nQgMPDcuDjowpiHjNOjEjx4Q4j89doz0uYggKhiFRFz2ErDIhs0JK6KKcDFLtqpHU0gTONXD9RxM8\nkOlO8JZ1ii+0/phhVphTRxCwMGSBst9DOFXDd7MNZyH1YoDykI++VAb3rSbSjMEzwnnMlkixFOTl\nF89QGAsRpMIEc/iooSEzv2ecOWMURW9Tx8uG0cdNfT/mcwLI4KbBojXCtpKknw0iQgEfNep4ucoR\n3uYxIhRQ0fBZda6Zh5HyAu5ZA3PNxDWgofY2uSofoeoKQ2yG9e5eqgEXx7hM2RdknR50JG6yH12Q\n8VLnlHGeQ8YNFsVRBiOryAGDE+Z7uPUGbVyEs/NseZNce2IfJYIMtjbY25ijKvqJSHnW6SdtddEU\nPax6BlhpD7PaGiSrxglYFXqELd5QzlByBfj+AW0QvRA6LSCuQ2PjQV7aBidnR3Zn8ojMjg7ZWaDJ\nmZTiDMzZoOvUbTvVHU5FhzNz0SmVc1IVOMY7AXx3IwUbMO3AqJ12b8/hrEpon+N8cnAGX51la3eS\nZHaAXmOHZnHGB7Rd4+QD4OkXELZ5sDD4h2QPBbSj5ImSp0CEa/ljzOb2Mdl/i5wvxgITxN05Blnl\neV5GxKSOlzRJIhSxGjL9W2neip+k5A+S3JMmLSapNf3sm53FV23S487w8cMvM7S53ungEoNqj4ft\nM3E2oz0kN7KwAo3DKtV+N03Lzd7zcximxNazvUSFHP2sExJKZEggVi0iizXGu5cxuiXOymfYV55l\nujFHOebFU2nRzPn47cAXiQRy/LDvL4mZOaxpC+2fgPwaTFYW+GL5d/GrZWqKmzBF6njf35R8GQ1W\n21CBuu5lVRlgLjFFT2qRoTcXiAxB5miCeyf7GIyu4ibBGgO8xROAgIiJgsaQeI8fU/6Us+Vn+Oba\nk8zOHOSRR77J/vHrxMjzhnmGbaubF6SvA7BNNzfZzz0GcdOkm21SdPEV/Ye5uXkYyZKYOfYW5X1B\nBLeJT6nSK2wSFUoggV+oUCDABU4xwjIjLBOkxDmeYpZpQpR4TX6Wc9JT9AobHFq+xf7l24S7Kiz1\nDHEnPsFE7wKaqGLRqdcyo+zjbf9JhqRlvNTxUucR6yISBhc4xfFr13ih+iqLjw/Ss5jBKMr81ZEX\nWPMOPIzl+5Ex0y9Q/oQH31UXvpdb7/PWtnftTAN3pobbIO6UuNk8s1MqZwM/POiJOj1Pp4rEpiqc\nSTh20M8+z3K8Bzs0hjNr0U6JV9nhyZ3g79x4bC23s3aIvTk4aSKn5NGmUeyX8xqd2ZX2U4J9nXbQ\nsnTUTemAD/MlsZPF9CHbQwFtsyVzVTtGt2eLYWmZuuKnLATRrTCyYHBZPkoVL92kCFKiXvZxZ/0A\n670DxNUcPUqaW9I0JcWPERVItPJ0lzLIiyZKziLkrnLUfwP/aq3T1W8DRNFCmISU3EXT42G9e5WN\n4S6KsRBtU2Gf5y6CZbJOHxv0EKLMIKt03ctgZmWKcohws8RYYYVrwQOIaQhs19B94K5riHmJbt82\nAbGEjEZRDNNIeBDCFguVKTxiiwPiDMvKAJoh01tIUQ6EKHo6FFEr5CU91sLwSlT6vViiQNYTJRTe\nRuyCdo+MNiBiDVq0UDGQELDIkCDQrDFeW6IWcGOoEmGhwEneZkGe4nLgOOtKH2PGPEPNdQJSjVXZ\nRRU/ZYIsWOPcNvdSE3x4xDoqbTKVLhZLE1TNAJZXQAlp6HGJhuijjqdDCVWBJWh53bT9Ki5aLDNC\nveKjsBqj0hXEG69TJsiqOEgTN4/xNgPKJgVvGMmtU5b9lMQQdZ+bBl6yxFFp0xBdXBMPMsgyMbLI\n6LRR8RhNptoL7F+7Q295g8gjGWSXSV31c7x5BeuhrN6PjjUUD5cGj9GzoWI52qw5AWt3SVYnR+1M\nzcbx+24e1xm4s8HLSZvsrs9hByZhp1a2U3aI49huKsVJsdibkDMg6Wzq4JQ22i+RHW/ZuRHZQGyD\nt32P9gZkb3T2xrM7cceeowXcSUywOXCApmz36/lw7aEs+0I9xpcrP8YvJv4Nz4e+zunwm/yq+c8p\nWmGmhVne5VGWjFEOGDP0S+vcTB3iV8/+It5nisSmM3QPbROihGQZnLee5Iv13+W57HmsDTDyIqqq\nMeJa68go88AG+OQGiakihe4o2a4Y8WSG6xykYERwSw28T9TxWE22rB5mhAP4hCo/ypcZubyOmZJ5\n7/MHGcmvMb6+Qn3CTXQ9B3dAmAQ0iLbz/Lzn12m6VZq4WFf60VAQFZPf/9hPEDPz9JnLLItDuEsa\nh+bvsjQ2Rs4d6wDbHpnWHhcNPIxZi8StLCVChPdrRGSR0uMu3N01utnmHKep48NPFTctxqorfGrt\nG7w1coKr6kFWGOYLnj+kNuLnf5v+ZeqCm1IjwnBuk8PBGQiAiEnbUmlabipGgKboRhb1Tjf5XILt\ntX56968w6FlhrL6K5DfYEHvIWAnaqIg5gT0XF0l1J2l0ezjMNf6AL/DV3A8x/9o+PvP4X7Avdp13\nOElaSGIhUMPH7eEp0sNRjnKVNgpBSrhpkqaLRcaIkyFMiaiVZ8JcYMhcYZUhbkgHSeo5/nHxT/BU\nmmgtiaiVZ2F8jFbLw4/kv0peCj2M5fuRsQoBvqp9hr2Gn0luPeBl2sDtZsdzhQf5aFu37GHn0d/W\nQjhT2p3KDRugLcc88CC/3KajMHEWffqg7EPDcb4NqqpjvD2m7RjrDBJ+UHKNev9+nGVX7c3Grguu\nsiPhs+e1vytnZqVTyWKDdhO4YZzklvYMVZb4KPAjDwW0074YmiDw71d/isHACsmeTbxiHQmDAhFa\nuMjNJLny1ZN4TjcIDRX57Mf/hO1kkgp+dGQKRGjUfWxsDnInOM3V0X3kfjBGRCvQJWwT8RZxv9lG\n3bKgBZYLXJ46Pzz3NShDtFlgxNig0uulesTFKoN4mm2ey5/DCCs0fC4CVFCaGmu1Xr5i/jCeRIPh\nyCrD6iKDkU20foVttZtws0JA2yZwvYk8YCKOmkzVlxHbFrQtfv7ab6POtInPlpn87xcQuy3EexZT\n7gUSSoZixM+20E2aJHU62ZMxM8e60ofYZSLmTPx/3mT1YB/zT48CAhIGbVR62SQbiPCbI/+UoK9I\nkDLTzGLIIhIaZziLhkI5G+R/eO23WYv2URn2EpnMMu6eZ1hYISrn2aCPDAmauIknUjzhz+DyNUhL\ncX5P/ElmpQkyxDGQ+cnqf2BvaBbtRVjsG+EiJ/ganyZOlk8k/obDP3CdTDjOa8azhKQST3IOL3Vu\n0eGsa3hZZpQ4GYZYpY2Lbbq5zDF0JDw06Tc3GLiwxd57iwxrW2SfSnBzZA+/HP0lpp6eQzY0rrgP\nkyBDn7JJPhJjfGsR7ifjfD9Yq+hi4T/tIbo6xzQ7JVidqeOwE4hs8GDwEXaAzgn0uzlnp+dpg6E9\n3tn9xhn8s8Gu7ThuB0j1DxhrUx62Z+5UlDg15uau4zYfbvu8zmSg3ffg1JnbypSQ45rsCodOjbkM\nBOkAvs3Lb70+yOLcNO3yOt83oF2tBWhl3czqU7iEOtPcZLS1wuLmOG+vPkbP/nUqaYWZC4dx7W0w\nve8WR5PvogsCBgJtXBTKUaqVEKJlsaCMciHyGEpEYyqn07O9BStg3oX2Ksh9YKSBV3QmjXkEL1hB\nSK5labVkygNe2mUvggFRbx630KKOmzYKy/1DrHhHURSNki/IAiOAAUmJtJJEd0PbcKElVKK1PFXB\nQ4o4siAQEKrEhBzT0iyWLNBWVWJWHlMWySYiVDwB2kKHWrD5bT9VJMHAFEQiFDud2WUBXZHJSTGW\nGKWCHwFw08RNkzVXP5ddx3mOV5gu3WVyY5FsX5KtUDcWAm6aFOUIF/3HUFwakmVwu7qfIfEeA641\n1oU+toxu2lpHeSOoFroo0ZZUNqVuymKAa9ohJMFkWr6DLkjkgxFy8RBzygTXzMNsaT0cNq8zLi3Q\nN7bKYmWU1dIgj4bfYUq6S0gv83rlOVRVw+ercYc9tHARpUCOGO56m8PVGSpBH22XgoyO36wTMiu4\npBaSYFKXPGgehZtDe9BQ7jdW7TwhKO513M3Wf3nh/TdmZt2kcLaGVW2SpJNuo7ETdHSCr1OrbHuO\ndm0QZ+U8p0wOHqQzds/n9MZhZ6Ow5XfwreVSbRrFOa8zYOg85twsbHMGD53et7MJgpOmsc91Jsg4\nVSLOxCL7O3Nq2E3HvB46+XLijSaFxRrUP3zlCHyHoC0IQgj4PWA/nfv6KWAO+BIwBKwAn7Ms6wNp\nem3ZRf1ukNCzaR5NvMVPm79Dslzij85+gT/+05/iwL++gddscUWDUCKHO1klIyRp4UJGR8SktBmj\nUfdxYN9lVtV+CjzPs7xGbL5I/2tpOAeNO9Cog38/6Feh8dsgfwaET4F+EpQsuDI6iYUyz906Ryns\nZ/UzXWxJSUoESdHFtdOHKRPis/wZG/RxlymucoSLvY+Q6M3wA/wNRU+I6/H9nOC9TnCVwxS8EQa8\nazzKu4jPmZjPCujI9DW2MZG4++wIs8I0Ggp7uM0Kw+SI8iyvIUgWGSlBD5tECkX0mkTucyG2YgnW\n6cjdAlQYZI0MCe4yxR2meZZXGVm/x/6v3eVXPvMveDV0ptN0gWXc3S3GfuQOY8IiVkPiL7f+ITGp\nRJ9rgzd5ilvaPipakD7vBlvNXq7XDhGKFBiRlhmyVsnXYuwVb/FjoT9h09fLCh9Dpc0s02xpPeSq\nMb7R/AQz8hbPxb9BJR+mXfOh+tvEpBzBVoXySoxw7DZHfNfIE8NCIHf/34P523x+6c9o7JF5Uz3F\nH4s/jn5EpnlEZTsYpSL4SJLhDGd5nadZo58D3KBImCJhPs3XGBS/ey/7u13bD9VadbjzFglus49O\nn+Y6D1IiNl1hV9NzyvTsQN/uzElnMNJZo9uZ1m3Dlccx1pYD+tjxyG0/1AZDp8dtz2GnxcODXrw9\nhw38NoDbnLaz4JXmOM8GdPs+bEmivWnYtVlsusPeuJzlau3z7WYPFhAHjgKvrt6i46N/+Cns8J17\n2r8B/I1lWf9AEAT7/+lfAq9alvV/CoLwPwP/C/BLH3Ryqj+B21/B56+xLgzwivAxnvO+jnEUDJfM\n/MAE6lCLkf/1LqN7FnhUv8iLjW/w++6f4I46DQgc73mXhJGhIvtpCSq9pS1OzVxkaHsNIQwcAHUM\nZA9Ij4JYAHECpD5ohF0U/T700wopo5uFyDiT8Tm6Gyn6b6bpGUxRjfq5yX4m80sMZdbpSqUY7tlg\ntHeVG969RAslYrUCa109tFwqAhZv8xgxchzjEhYC0UKJnu0sqf4Ygh8SZhbvrRaC1mZq7zJdSg5D\nE4mUSrgiOoVQkG62cQktUlY3v2n9LIeGZziVeItsIEpbcNFFihg5qgRIkaSKHz9VnuYNFhnja32f\nZP1T/RzqvsKh1hUsQ+K2Ok1F9nNaOM8qg8ypUwwlF1hQR2jyAhEKnFYu0JYUmoKbkLvIIfk6qtxE\nRSNLHFMRcYmdbo4lIYyMxgFm+PrKJ6loEVy9LayUiqa7KUVCWDETQhqL8ijvcJIB1zonht6m5nLx\nJT5HFT9xsjRwM8ckStQgpma5EHicm8I+dFPhNy79HOZFmcZtldV/MIT0mEY63kVF9BGkwhiLxMjR\nVcrQdyuNa1n7oOX2/9e+q7X9cK1TUcPzcZ34J0X8v2XSvLNT2xo6oGPzyho7tTlsjteuJeKsaGeb\n/bs91n7PqRhxeqrcP9Zgx5OWdp1nm3MDsXlsZ+q6DcQ2leHkl3HMaW9MNi2kssPPOz1upzqkyc7T\nhVPFYqta7HtwXlMbaO2TMH/GhfWfgZfttgwfvv2doC0IQhA4bVnWTwJYlqUDJUEQPgM8dX/YHwFn\n+TYLe494G9dgg4yVoKIFyIpx2m0VtatJMFmgFA3S717jTO+rtHHhbjcJm0Xk+3uuiEEitM0ga2zS\nS8QoMKEtEWvnMYMCZZ8Xn9yEbbPzvzYIwhSYEwrLVh+GW8A3W0HLSRSjflYmBrDiJsVCiPBSlabZ\n8R/KhJAtA4/RoN72EWkXCOoVilaA4cI6vVsp6ooHzS2j0mLBP0Yyk2FydRE12MZV11HTJrW6B8MA\n71YF/ZKJGZURpiz6apsoTQ3DkvFbNYy2QLRSxFtv0rK8mEmRfCTMcmyQDfqo4gcEwpSQMdAtmbhR\nIEiJsFxgkTHK4QDXwgd4sf63TBfvIhUgEKmS94c5KM4ws34Ad0NjZOQea1I/GRIMsophSrTaEdLV\nHjzuOuOhOUp0WqV5hTpN1U1IKFGxgkT1IgYiK/IwpikSs/L41QINlx+fUMcltBj0LRMmD4JFgTCK\nrOGO1qgSp0CYHjbpY4Mu0twkwax3krZX5h1OUqWTKn+dYyy3xshk4ngbDSJmDpE9xMjSwzZeGgyx\nypCxRqBWpy7bycd/P/uvsbYfvhlsDAxx8dTz1P7kEgJZWuxop21ghQc5ZNsb3V27wwlDzoxBZ9DQ\nBjpn9T9z19jd3WqcPLHT63aCL473d1M0zqxFpy4bx1jnywn+TrmiLfOz781J+Ti16E4Kxr6uTCTO\n2ScfZ/XywK4r+HDtO/G0R4CsIAh/ABwCLgE/D3RZlpUCsCxrWxCE5Leb4BdWf403D57i3xV+BkXV\n2eOZJbxVJe7OMzZyB01QmOIu/5g/4jf5Wc4ppzCDUBc8jLLc8fYIs4hKjBzPaGfZ57rNnSem2BTj\nJEo5RrQNzLMtGpcgdBysx0QK0z5eEj5G93tZPvt7/5nGOdAeEyn+ToRVBrkaOkrmUBxF1IiSJ0ma\nuegotyOTeCfrnGy/R6+5SRsFoygRvFfm48prIAk0cOGbqhG5WCT2BxU4CEIP4IHemxlaV6D+txYF\nDYovBij+9ARTa0tEmkVyRwJcVQ9SLofYf2eB0EqFoDDPv/r4/8F8dIyb7OcqR9BQCFAmRJkkaU5a\n73K4cYuAWKYmqzzBW9xlkjc5g1lTUNeA2/DY2HtYvQKSy6D/aymeX3sDflrg9cHTXJBPUibIleYx\nrqSPYc27ON77LnsO3maNAcZY5Hle4bbS4aAXGeNT9W+wKIzxPwX+DQND65zkPAGxQntYRaFNl5gm\nRg4Rgw3632/OfIODJEnzCBfZwx1GWMJPlSxxrnKEs5whSJlRltgvzhB8qkzgeJGz+TN0xdfo8qfw\nC1Wi5PHQIEOCLlJ0+TNYB+usuXqB+e9m/X/Xa/vDsFfSH+fKzD5+tPIFBjj/gPbY5no7MZAH6QZj\n1xhnhxknYDkB16musEHVVpQ45X2wA5S7q07boGvz5M5gpf2+fc22bNEpIXRSNE6qpsFOWzL7up0F\nqGxqBHboGZtusTcZ20NX2QF47r93tzLNn177VQrpG8AVPir2nYC2TIfa+RnLsi4JgvBrdLyO3c8K\n3/bZ4Td+vcziyG2i+r9g4ozI5NNz+AJ1jlau8Qu3foOvDr2IN9hJqhhgjZiQ46hwmSYuXLQYYI0U\nXZiI9LNOQC5TkEK8KT/JhDBPPxsIBRN1ApgSKI97UcomobsNnk68hXKrQeNNCzkJ8YkSU9YcY3P3\nKFkhNieT5MQYOWLMcIC4mGW4fo+Dm7fRgwoLkVEGxXskfBlED6g3degDc0ogquQIjNYRX6ATcq4B\nGyD0WQhdYFQh+AmoveBjUR4jPFChqAd4S3mMrBjH76mxOtaDkowjmQbd8hZj+Xu4NJNGzIupQoIM\nQSpUCLBm9nOwcAeP3MRy6fgXGhjSCtXxy+T9IeaSo4xXl1GCRofsvAuSokNSh1twWL+Jd6jONe9+\nNJdCT3yLSWUBy2fRslQ+b/wnWoKLi9IjLDFKiCL91gaznnFKhDnNeQJShTpe7jKFS2rRywY9bLGv\ncpeuZpqq7Kfq8bLm7iVLnCBlYuTu/1wiQPX+PZVZMkfJVRNkxQRb/m4aipetWh/mTRWOiASCFSa5\nyyPFKwzo65QjXtZfXuHlsxXqUhChkPl7Lfr/mmu744TbNnz/9b01/do2eqnFoWyZLhVutHeAz7bd\nwTtnBqOdKekMvDn9SBv8cJxnc+L2OfBgfRA7gcceKzred3rVNpVha6rtf+1gqpOXt4HWHuf02nHM\nuZvfdnrbwq73bGB2akAMvlUTsscN7lyZ//B7l9EXczwcW7n/+i/bdwLa68CaZVmX7v/+F3QWdkoQ\nhC7LslKCIHSD3aX1W+3wP/sUxUdO8aj8Lo9V3qFvbROXS2OotUp8Kcu7sePoQYma5UevqbjQiPny\n9ApbqLTfL8FpIdDPOlXZS4Y4TVzoSOjIWKKAMg5Cj0CjKWKtm/iWWxwM3aa9Ak0BeFTEPK7QslS6\nGxkG6huMri2wFuvntm8PqwwSEkr4K1Umry+yPtbLpj9JWCqgeLUOMOegoAZJxZKklC6ag2WCnhq+\nZhV1XYM21Ce8aJaFfLiB/qkAxSd7WJRGGWOJEBZ5orhoIasaF7oeI9qdJ2mm0VsS3eksk4UFqj4P\nNcWDImgIWGzRwwoj1A0vommiNnSkGkTUImMskvEkyIaijMVWQLU6evU70I5L6KMSliZgaRaSZlKs\nR4m6CkyE5tkTusM8E9y09jPCMlkrziWOoyNjIFMWgiyoIxhIJMgQocC60c+SNkZCzpCU07hpohga\nwWaNCX2ZtBDFdFuMsUS0nafP2GRJHaEgRfGZdTL1JA3Rh+LW8Bp12paLBSZQ0Kg3fFjrCvVhP82E\nB7erhUtvodcVNqwBHju4zY8cLnIn3k9wps5v/s531f7pu17bcOa7+fy/n61mEFIpXMf9qF0xxGsd\nULE9TGf3FSfl4KRL7N/tc5z1QuBb09xtqaDNJ9uUg+2520E9p/fsTGvfHTB0Ark9j1Nj7aRonJSM\nbbuVI/YYY9dcTtB2cue7r8uZKi8Dyt44ii8A37wDbSep8r20YR7c9N/8qlSUiAAAIABJREFUwFF/\nJ2jfX7hrgiBMWpY1BzwL3Lr/+kngV4CfAL767eb4i32fYb4ygTvYZHJ+Cf/FFtbTYLbA2hZotdyU\n8LNijfDuxhMYSIxP3CUsFPFSJ0UXcbIkSNPLFtc4RI4Yn+FrGEhsunrpGc3jqbaRqiaR81UEk06j\nuRugiCB9HqovKCxMDPGq8Bz7995ienmOiVdWiJwq4p2sUhKCaKg0il6stwTG6iuEQmXe6zuEJSnE\nohXog9n4JK8GnmJD6KM/uEHJd5Fp4w7xgTziIbgX6kXuM5gIL3Pp6ChX+g6yJIxiXlEZra3xiRe+\nQV3ycNPaz2/pX+Q56VWeFM/xmvtpjhev8+jCJQ4NXmPeO85NeT/r9LPKIBUxQC3mRmhauMsGlQkP\nDbeKiNkpwWVVEezCwmlgHaoHPJSe8GFYMhfkJ3hF/zhvbj/LY8FvMhJf4hZ7WWScTXp5Q3qaKHmO\ncBUXLbbp5ipHmGaWJi4ucZynOIfQhlwuSTScR/IbVAjwdvAR5oRxfnjlpU4BrrAfH1X2VOc4WL6F\n2S2Sl0Lc0A/ylbXPUfIEGRma40ToVXRkbrIflTYpl8a9xDiZeg9iFny9NWYiByhaUZZvT/Gvw/+K\nvd13GBTWWN/f/3f/HXyP1/aHYxrNoMXZXzjJ2JIL4drr74OP7UXbmZE2aNmBR9tsMLbPsQOUu8HO\nmSLvbIrbZAfInVmYEjtJLQF2vFpbYWLTMjbAtxzzOb1hZzKPTXHY94ZjnOmYz74/e+6243eb0nEm\n7jgLVNkBSZtWuvTjx7k6eJTWP9M72sqPkH2n6pH/EfiPgiAodCqBf4HOd/FlQRB+ik7y+Oe+3ckJ\nf4aMnqBb3KbR5+LyycMEk0XaYRcb7n7mPWNsN7rQ3TLtuIiOyF8LL9JFmm626GeDCn7uMsUi4+SJ\nUMfLS7zIFHfZL95G8hi0AxKaLuI+qyM2LEyfQOW0Bylq4vG12e7rRhItni2fQ/RqaF0yqRMxgt4y\ng9UtnvKcw2rKhPJVXIU2yy/pzM5ZLP9sF0ZYRi7q9H55A//hIlMv3uXQ1i0C7jLRSBb/YhOlZUFI\nQA5p6EmZzIkIrZhKUknxHK/SH15HdFkIgsVdpni78jhrcyOs9gwz37/FHWEP0oCF318mEdjGEgUE\nLMIU6M1t053KkOhJo1siatak5XfRUN0YSLxhPI1XaTDcew/vcgvZsuAEeCJtxKyFWRI56plB8VlI\nQQvTC1c5TJUAY7llnihc5I3eJxG9Jqe4wArDuGgxbc0y15rETYMfcn2FeWGSNXmAg6FrKGqLPFHm\nmMAQZdKeEud7s8Q8Wfpam/Sm0siSzlJkkG25CwGTkFSiL7FKQlGYFGbpElL4qDHIKpv00jY9CDo8\n7rtAPLjNmtDHSfEd4v4sN0fWibu3yPrD3BanmJcngJvf5Z/Ad7e2Pyxr1RQu/PFR2sUmp3n9/UQR\nu7GvnQjjBGxnlqSzia1di9up57aB01mwyfac7fOcnq0N8DYnbHvk9ufZwGlTF06QtT1o57lOj93J\n09uAbOvTzV1jnQ2LZXZS0eFBsLZfu5N63HQ2mDdemuLt4EHa9XkeZPY/fPuOQNuyrOvAiQ9467nv\n5PxxZZ6G4sFHjZXoEIv+UQ56rtOU3dzs2s92rYsNo4+yEGAstoSM1ikd2hhg2rrLMc8V7pVGuKtP\n4o40iEp53DTZoJ8B1vBadUTNJBWKsxHqJjpQIb6ZJ6SX0PokrD4BSwINF8FGlfH2DGkpRtEXYPtg\nHLMsoug6brNJSKsTpoIU06nMQv6eiXykgbZXIteOIN5rI/bpTGnzjG2sIgYNyn4PxWIErewhXski\nhUxacZGyz4eERg9bTHMXrUdmWRuiKrlYZoS5whS1syHMPQoKBgG5hh6QyPRE8FBFaeh0N9L0urcZ\nzG8wubxIw5LRFBnDEtEtCUkz8LabpKUuLBXSiSjd2znksEVhIIwlCch1HU+xzp7SHH3eLXxdVWY8\n+1hglCJh+hubfCL/ChcSjwEWPWxxhz0IWEwzyyXjOIYgcpAbvGWdIiUnOe0/zz1hmHQzSSkbQQ21\n6A5ssZboJaLnGKhuECuU2Yx0cdO3h02pBz9V/FKV3vgabVT8VCkTJECFA8xgIhFUy4TCBc6EXiPq\ny/DH/DjDrHDAM4NrsImPMvl2mFIuQt4T+85X+vdobX9YptVFZv8yQm8yge9EjOZ8BavYfr/2NOwA\nmMCDQGh7y3ZJU7s2tlNLbYOhDYxO+sA+vltPYad+O7MZLcdxJ8A6k35sc6pVnMHF3WoSp5TQ6XHb\n3LT9pGFTInYjg28H2LY37wGIqIgTQdZmYiyknT3hPzr2UDIix1nERGKOSZbykxS3YvyT8d9BCraZ\nEybwemtEhTx1PIywxADrlAny6vYLbOkDREYKrMyMcqt0mI8989eMeJcYYI0xFrEQaGkuzC2B9+RH\n+IuhTzP4hTXOvHue5998g/BLNYRhC/GoxYSyQisqU+rzEi6UkJsm87EwS/5ObekLwimmQ7Mcm7jG\niU9fY6+nxdBbRcq/9DLeMxbWix7e+cVjyN0a/eYGVklAtdrIuouXDr5AciHHZ698hfqQl3ZcJkqe\nECUaeKjj4bXu5yhbIZ6U3sRDg0i6gPTnJgcmb/P5e3+GFlAwjpjoB6CBh8RmjomlVRi2UGo6Qhs8\nZ3XKw362nw0TEor0lsvIKfhs71+SCsVZYBz3kIHZK/Fq6AyGKBI2i0wMzDNwe4vwQplnl8+xb89t\n5veM8AZPEwqUUXvb7HXdwUUNA5EWLiwE/FSZ9HTkgG/wNJtWLyHKnBTeoYWbpdQ4y1+bJPp4muix\nLIe4zmR9iUi9ghQ36VHSaHWVv/F+gpSc7JTBxU2eKKsM0kZlmln8VCkRxJ2oceD0ZU4Ylwk0Krzq\n2+oUumKcdQaIUCBRyvHU+W+SmPiIPbc+VNOA6+jPVKj+y8do/tx78EYn9mMDmK1PtmHH/mN3Biad\nHroNbLaE0OaRnV617VHbHrlCxzNt8K3BPJsqadx/2U8BJjsNDZwe92654W7FiA3ILnaoHDsl3Z7P\neb22R647xu4GbBxzS4BxNEbx3z5C9Zcr8KUbH3BXH749FNBOaFmWlFEUNPp99+iLbfBu+nGijQyj\nXcukpSRhCuzn5v0vWmaCeVZDI3jNOj6xhr+/TCyeYkxeIErhfnZdnJiZJaSUSE9Fud3ey8zSEQb7\n1/D0NRAGQG6Z4AdDFlkL97ISGmBV6uNp8637JWMLyMsmoWYd30CbmJrB7ylzc2qageImCS2D11NB\nbkJjGbyP1NEiMs2aG9MtIkrga7U4VriGS2hSPezm3fAJMiQYZhkZHQmj0xxgeQGpbeCbqnHcuEpv\nOE3PF1IEYgXu9I0z7lrEiMvUW15CW1WCszV8y03wQiEWZGXvAK0eFXeqRfTf5/FOtVAbGtJl2PP4\nHP2hDcxVkdY+hfaAwiSzZMU4Ut0gcruM+0Yb6Z5JwFVDmtfxvNPA/3QLT7xOUfVz8uy7eOUGoZEi\noe4ygs9g2Fzh07f+mgVxnMv7DvO08Do9bCFiUcNHOFjgx4/+IYPeVSa35xljlTVlkEv+JKPSEl2r\nGULZMlMH51kJDdI03TxTPYcomWx4u/lb8wVusQ9Z0plmlo+LLyOoFqKpsS0m2M8t8kRZYZhtujrf\npceiOBEhFf9IKfEesnUSbZZnE7z0B328sLpCkhQZvjW5xQZimwKAHQ7aBmO7VrYzm9Dp5dpA52GH\n6nB2zrE5absmCY4xKh1hlVP5YQOllweDjE7Nts1B28k4duKQ83qcZVXte7bPtT/HCd520NK+Z+dc\nSSB7L85X/98zLM/a281Hzx4KaKtmmzYdTe9ocIGou8BLcz9EQ/cw5LsHbhGP3GSQVQpE0CyFMWuJ\nUuTdTmNYQnhGavSyRoIsFSPAltVDWqpxwGoTdeXZnOqifM+Pf73BRGiR7sA2xl6BlqGCX8AKQSYY\n4546yKI2xonGDbqFbSJWgfB2DU+5zcHETeqii1W1j/PJR2AvJIQsnrCFsArGskbf5hZFfxBTEdFj\nIrosI+gWJ++8RzYa4frpvVzjEBkSVPATokS0VSBRznJ47QZho0h6KEZ3Ksuh9k2iX8iw7BrmEofx\nUUYuGpirMsF0CqsksmV1IVgmG6FuFnqGUWkz/Noak39SAg2aokphxY82quKuaqg322wOJWgpCn3t\nTQxLotn0oNwzEJesjl4iBN58C7eUJnGgQDoZJa+E2X/3DgHqNLwueqNbSLLGUHmNA8t36ZEz3Bsc\n5FP8DT65wsue58kTJRrJ8YNP/DkH1maJpUpUPH7mE2PMBPdSwcN0a4FEKsfB6g1c3iZZMc6p1tvE\n5Qzr7m4umce53DpGqRmm37PBCfkSe83bvKY8w6bczRSzXOUoq+Ygm1o/giRg+CU2D/TQer88//ev\nrV0Lk7sxwKmhKfoHslhr2+97lk4Ntu2F2koPG+iciTMmO53KdytMPkjzaPPG8GAtE9s7tpUsKjtt\nxWxNuTNr0TZngo2TVnHeh1PG6PSanfSPfdypRnFek11ga7eKxBjsYVuf5NVfm6BprvJ9Ddo5JUoL\nFwWiWIj45RrPjn2Du5m9/P6dnyY6kUIJt3iDp9nLbYaMVQ5oN/AqdW7Je/kqn2GTXiR07jHE2/XH\nSGtJ/mHwS+SkOHXRSwuVR3rf4XToHIezN4koeWqHZFalfkxZJCSWGF9dZMJYphVxEVkqILgsxH4T\n+iz0pEA9rHBPHuCmsI+b7Kenf4s9ooxnW0NaAddqm7G/XiXbDFN8zE9zXKZJiHZTpWs5z3vVE/w6\nP8M4CxzlKj1sImDRs5Xi2NkZsgcj5PojDJU38Xy9RS4fpvUzLiwXCHQyCYffWafrvRyuF9pcfvIw\nF9STuLwtqi4/Ffx8gr9lcHQVfgSQYCvaxYUXHmU1OIQhigwcXycQKmGJApddx6gLXqSoTvn5IIfN\nW0xoy9ANjIEelEn3Rii5/Z2/pOcAHeSwzpRrFiWlE7lRRRo0mVAW+LmZ3yLy/7H33kGS3Ned5ydd\nVZb31d3V3pvxfgbADAASBEjQSaK4XIkiKR3vpDgtqY27W+m0cbt3odg7xZq4vV3ptNIabVASGVpK\nlCiQAkiCJNwAYzAYPz097b0r76uyKs39UZOYGohc4ShqBGL5IjqqujrzV9UZv/jmq+/7vu8z81wK\nHebPJn8KWTLoZ5VZxklU0kg1i7MDJ6l4XMRJco2DpMdi7OmaYbS0TCK3w04sih600HSZjlqKfuca\nMzt7WLk4xu/t+QfM9k3w+cBvURXdqNSIkOEwlxE0uJU6gitQJxjIteSBuB/E9n2HRxrNVeFLv/ox\nDhT7OPTr/8+bumV7VqMd2t2fdv8QO/NsL/bZr4nf45hG23ObzrDdBOEeEMK9m4PthQL38+y2U599\ng6ly7+ZiF0ftdeyiqF1shPvVKO0g3u430i6DtM+1P1+7n7YBfOVzn+SG5wiNf3QHau9MwIYHBNop\nMUqW8F1FtY4omky5ruMK1tkxOtnnuEYNlWscpIlCXVSpSm5uCXu4yT6quPFTxEMZGZ1JZYYecYOs\nGCIsZAjd7ZgTnSaSZJIxgjRlAY+vhIsqliAgCgaOUB3XVgPHJRPqUOlyUseJGLVQtQZKWSesF+iW\ndugJbRCUisiWiZAHuqA2oXJ7aBw6DIJaDvV2g5LfS7YzRNhRQpOd5AgB0FFNcTR/Hass4FstE9ou\ncOnQIbKhIJ5KFWE8h1A2UZ111nYGWa0MUO9x4e7S6N2zhRgEJdjE7a3gRCNo5fDoFfpKW8hOg62j\nUa41DpLyRJG6GwznlhANEzoMuvRdjIbEliNBJzt4pRLFUIDiYQ+ZqI+UP44gWzhUDSto4hTrCAZI\naaM19FsB6YSFXDKQF02ogtuo4d6sIVggDrUGTASlPF7K7NBBNuwn7E7hdRepyw4aKITJ4nFX0B0i\naSmEVy7To2+wIg2wLAzSFByURC9hfxZpeIFcJEDF6UYSdRYZZqY0hWungRhrsmN2UVn1IvWbCAGL\nHToJkXsQ2/cdHk0M3WDxnMZQ3ODox+D2RShs3K9RtgHWpg7a1SDtnYxvLdi1T7exqYR2kG/SAu23\nNre0d0HaPHT7Ou1dkO3NOu0F0PabBrRAtt0ytZ1Saf820K5msX+3uW/7GthZuA4Eu2HsGLyybbCc\n1DD1Stvq77x4IKC9STdpIgQpYJoiRcOPQ2oy4F/kjP8FDnOFDBHKePFRoix6WXCM8ApnmLPGmDDv\n4BeLBIU8AQqMqXPUUfkOTxAie3duYpWmqVC1PGz7O6hLCt1inaiWAQFqqkqlw4m5LeK4VIURaLoU\n8kKQnE9AEi3ULYtwI8uYsoiGQkTKUWiEqOoevBMlmicULnUdwucssq9wi+hcASkIhlvGCgj4gyUG\nrWUiZpZgvUA8k6G64kVKClQ9LpaVQbaVGMPBeYTTBk1ToaEq7KwnmMnsw9VRYWJ8DqMfdEPGI5QZ\nMpbxlivEGkm6mtuoSZOUL8L00BhfNj8GwEd5hv7SFk5TIxMKENWzNE0HQSXPKHOEyXGdA2gTMlsT\nMa5wGBGTDmuXseY8br0CuoC0abREbwJYAyJWQ2ylIrMg3K0mVUUVOdzkgHGDoJ7HZ5YwTYFa2ElT\nFhlgBQ0nRfwMsNJqQZdrrEZ76GjuktC32BE7WZSHSUtRtulCjVWJx3fedChUaDJnjvHd2hM0N9x4\n3TkExaJZkHBqLXvaPEHkd5gU6+8sNJPyF9cxjpWIf2qEraUdGhtl4H6dNtwD2vb5jTbg2cXHdu63\nHeDsLkeb07YpFttp0FaatL+PberUruW2Ox/fqiyxM+C3Og2267ErtIDbbm9vb12H+78F2P+/wL0h\nDfZrVtua3piX2OkOjC/mqVxd5Z0M2PCAQPv63Qw6iZNcNUy+EuZa8BDDznlGWcBHkejdbjsTgSIB\nznKaGiqGIfJy/Qwdzl2mlBmGWWKbLpYZZJ5RdGQUdMaYY6C+zmhxDaMiofsEzLCJI2/SkB2UVS9p\nIvgbFUK5JYhAqcvHrDDOOj0smONcbxznZ8J/xFONb3DohWmmJyf4y8EP8OrHT/Ok53keD72AqtTZ\noIdtTxePvfcVeuc2mXx2EZe7Tl94lY/wNfZV71ARPXxh8Ge5sHSGgC/Pp578z8iRBj1s4qTBpiPB\nsjXIWeERhvvnOJ44z64rjlrQsMoK25EYOdWPXG3S/+IG4c08joaBaMLm3h6eH3qSa9WDqEKdEc8C\nf9bxcRQanBTOc9l5BBGThLBBDRc5rLtdpRarDHCWRxCxmGjOMrG7hNvVoO5XEI5Z0AdS3mBgcx38\nFsYHQbxBq1lpHKY941R9Kp/Xfwd3WUOutlrmdzsirId76WMVmSZNZCSMlsyPMjt0si11UZACaIIT\nFzXcVMlZIZLECQgFfp4vMM4sc4xREnyEglm6D91EcWkUTT+lAx7MADjROMFFbjP1ILbvj0gYvDpz\nik/9m1/ks7v/hFG+yyz3MmNbe23TD15a9IlKC9Dq3GsHp+3Rfs0uWNqa53be3AZm7q7VnuHDPQqj\nwf30hH0TsF+3gd9+r/ZvADbY2+3y7RLFdm68HcjbM/23arrtG9UUsDR/gk/+v/+MpeRNYOv7XuF3\nSjwQ0G6ioCPTwwaGLLMm93Mrsx+Hq8n+0E0cNDGQyBOgjosVbZBLxZMUjAA5PUSqGcMd0TAVEQ8V\nZHRU6lRxU8aLXpcJrxWwnBI7rji9u1vI000aVRlFNCkPOclFQ6iGhleuQAzQoVLxsGQNEatkGaiv\ncSN0iILfS7HqY0Ddoqu8S09hi0AiR8Hp47Y0yXX2U8NFB7vIgoF3u4rraoO1D3dzOzHBojXMsdp1\nHGITPSCx1NdH1ZwgkEjSIe3SwyYaTnbFGBskyBPkiHSVE9brbBgJonKadU+C845jaJKTgFzA06Uh\niBDVstxWR7mR2EOaGKpcx0Jgmj3MqWOEybYmykstL+8CQXQUguRJ3OXXs0So4sZDFYeoUXR52XLE\n2ZK6eCT8Om5XlVzDT6nix/SAs7NGgBIWErneEGk1RFH0U256iJsp4qQJS1lCksCOEec18REcaOxp\n3iZWymGoApuebm6yj4IYwLIEMkYYWTDwiSUmuU03m1Rx46OEjswGPYSFLFOOaTodO62N2jR4j/cs\nmkNGwERHZrfS9SC2749MZMsml8o63VNPcwQ30Zln0S2zZTPK/X7UNvdrZ6W2YgTud/iD+zNTm5po\nB8p2WsTObO2ipJ1J21m1nUHbdIXNOdu8t31uuyVrewu8+Ja128+3NeJv/fzt/1P7UGBEmYtTT3PZ\nfJQ3buvf46x3ZjwQ0PZbRXasTvqFVTxqhZwYYnunj3rdAyHQcJIlxHUOkiPEmjbIrdQhGk0Huq6g\nGzKix8LhbyBithz5zGTrb5KMo9ak784WGz0JpscmkKqvk7i2g/t6HWNIou5Uqe1106vNE3CWqE6p\nmIZIecdLJeTlqcqLuKQ6+W4ffilPET/auMJIfonQTg4lrJGUYtzgAOc5RYgc3foWoc0Srg2NcsnD\ndPc457uPc9U8zOP6ayTEDXpZo3dkhVnGOSue4UnrW7iZR8NJSfBTw4WLGtFGjqH6GoOuJXZdMWb8\nk5zlNF6jzJQ0w+wxFb0pIdZNzrmPM6eMtIy0XOtvdiTWiy4Umog+kx59ozXpRR5AEZrolsyIuQAC\nOMRGq+VdK+NoNpj3DTEnj7LMIJPSAnpAYNHXxxxjSJbJgLVCfHKXquBmhkmC5Cnj4ax0minlNhPM\nkhA3CRp59LrMn5b+Hk+6v8WjwqsE1mrcjowz5xnjJvtIEaNhOdjQewgKefYo0zwsvIZq1tnQeikr\nXoqinxwhBlhBwkClThOFhLXLB6xvc8E6yhvWIcqmj3rlx4XI+2MbS9jhq5MfZMXdyy+V3sBMZ9Fr\n90/4sbPuKvc02vZgAjvDbbQdC/erQWy6pd2YyZbYtZtG2c55dgHU7r6UuKfdhvvB117D/hx2tmwf\nx1t+b6dc7FZ8W7fdbhdrf443R5+5nWjRKF8++mluVPrg9rPf76K+4+KBgLbarLOjd7LgHKFb2uQp\n+ZvM9E/hFBssM0ieAE4adLNJljAhd5qf6vsvLFlDrNSG2EgP0pQV0kS5zGEkTDbqvWyv91EKBQh4\niry/5wV2wx1cUI+zcmiAU70XOP2+19gNxrAsgX03ZnE3qqS9EW6dmaQo+PHM1vj0v/gvdD6yy9rh\nXiq4qOAmr/rZ6OkgFkthYhJQcuwSo4SHAHmquLhjTlItukkfCLP4RD+1AZVxZhkXZjEiFsv0UcHD\nL/H76MjMMsQx4w36WUWXJGqoFAiQIcKmq4Mrzr0kxE22xa43vVb25mY4nTtHqVtlW+3kOfFJdqUY\nfop0sU2GCBU86ChkvtqB3nDy+md2+MTOnxNtZljsH6Emuwg18wSLVRZcg9zxTOCjzMzcXp6b/0kc\nww0Gu+c5Fr6ArNSxJAsTkYucpKe5xUfq3yDrCrCkdHKbKc7wCiPMU8fJocJNVEPj5fBp6pLK1koP\nl3/zJLEPZZh8zyyHrtzCHBdx9DU4xiW8lHELVZ5XnuR2c5KL5RP4XCUeLb/Kz25+hRd6z7AViBIk\nj0odD5U3bxJl2cef+H6SbbED1dD4cOUv6VJTnH0QG/hHKSwLzl5g94yDb3zh1xn/l1+i41uvvzmx\npX1qjUVLitekpSh5q6mTDaTtMj6buoB7SpB2K9b2zLjO/YZO7eDeng1LtBp0bEmgzTXbN4d2WaJ9\n86hxr9XePtb2MmnXo+tt69rZfg1IPnqAO//zz5D69xk4u/22L+87IR4IaK9VBsiVosxYexF9MBW+\nxQnvBVoagyYb9OCmyijz3GA/lizQ5d1ktdqPpqtYdcAQqOJmkWESbOM0GzTqTlKNOEv+QRYTA9yS\nppjRphh0rxFoFhFXLRz5JslgnLnAOLqhkAqEWe1stb8HSgVqA04Mr0TIzPGQ9joNh4wpi+Q9fvxC\nEaEJOSGMiUSYHIOskCOIKBnc7hjH4R5gtbeHNFGipJkUZsg4Q+QJUrCC+JUqXsoMsUxOCJEmQg0X\nGk40nDhptBp/rG5eN44hW618o4SPrBwi7wgSLe+yafVwyzNJmhi6KeMwGmyKPYiiyR6m0WJuLF2g\nKTgwnQIOUSMiZLAAv1gkK4dYk3rZpLu1ed1QDrupeGIoco1+IU7SEaVL2CFkFjhUu0HdcPFt6QmK\ngodla4Ar1hEeqZ4nSg6Pp0pZ9lIQgmSECEXBT9IdQx5pshXt4qzzETZ6+0iGYyxZ/dRNlVPZi5zO\nnUPu1pEdOi9I72FeGCUupel1b7IsDbBJFxEyqNQYzK4yNn+FZlVmxdfPC/seo6q4GaqsMLi1Si4S\nfBDb90cvkmnyC16uTXcRPDxOSM7i/PYyNIz7OF37x/bnsBUh7UZT30uJYQO3Xa5r54vbnffs49pp\njfbM2aZJ2tvi29Un9vP2aTLtqo/2jsl2uqVdX96eYeuA4ZQwnhhgd/8YN25HKMzvwO4PPkjj7yIe\nCGjfzB2kvuFjthpC6BOIhpO8j2/TzSZNSyFlxACIy0kELKq4KeFjq9DLbiqBUACxw0BHIkkHwywR\nFTO4XDVqkoO6qHIrPs716l62iwlOOi5x8MotlD80iXQVufXUPr74c59o8d/IyDTZwzTe4SIXPncE\nx26Dsdoin6j8OTf0SdYdCSpOD0bdgVS32HT3YkkWnezgoEGMFA2ng9fGT9BEoYqbDXoYYYFe1lmn\nlyxhGoKD6+oBImR4L9/lFekMt6w9aKbKsLhIl7CNhIFCk4wZ5Q+an2G/dINj0iV26KQeVFE8Gk9v\nfhfJhKLbzyLDbJldlJp+kOEQV3lK/BbG+2VyBOkWNql3KJRw0c0GXko4ZY3FYC+bZid1Q8VBg/7+\nZTz9JTalBLogM88oy8ogPkp0Gjt8pvBFnhOe5v8I/xOCQo4mCjvDEtKKAAAgAElEQVRWJ7WiF8mC\nmtvNDf8emig40XBTJTCYZ+w3ptFQOMsjvPCkgoaTsuUlacTp3Ezzc7NfJuB/nmanzLwyQpI45/wn\nqfpV7jBBxoqwyDBuKsgpi/Dz38C3W0LqhXNDrbqG2qhjbUNA/hvZsr6ro3qtzOqvzLPzOwMkjltE\nb6Zgp4zVaOW3dsZrc8Ptg9vanfPahwC3t5y3A7F9DtxfRGyf0Qj3mnFs2sI2qWrXhdtFxPZ2dvv9\nNO4flfZWXXZ7gdMGbZuaMWgBtp7wUf/FY6TWeln5/OLbvJrvrHggoB1ZTLN51gfjQE/LV+MNjpIk\nTr+xykfnn8VURLIjfnrYoHp36kkuG0bSdFwTJeRgAxELF2VuM0XD6aAzscHD8quckl9DE5z0q6tI\nssllcT/O7hr7j9zmjccPUt3r4GP8Gev0sswAiwzzDB9hL9M8bT6HI6iRVoJEc3kGZ9YRTYvzTxwj\n6CgyIi7xsPgqL/IY3+ADVHHTzyq9rHOD/Sg0iZFCwmCBEbKE8VDBQKJAABOR7ruDAtxUqTZ8zOcm\n6PdtEPAU2CLBVQ4hiiY/4fgqo8ICYTKU8BEmy5g0x1Y8hp8sn9K/yDPSR9kQu1EcTZbEIYbNRU5r\nrzLVmCMvhSi63UTI3C1EBvBRwolGmhhHqjd4qvISYtNEr8vUUcl0+9FcDgwkKnhIEyUmprgcPsDF\njWNsXenHebjBYOcij4ivshnuAPYyIcyQJE6eYMv/BScOGhzgOnVULAQGWCFPkBX6WZUH8A4WyMV9\nrAcTeKjwNM+xwiAuagywgp8is9Y4rxqP8F7pu1jd8Guf+D85rF1lyrrNz6S+wnnhGFlvkOx+HyXX\njzntvy6u/J5A5aFOTv/Whwn/xwu4n114MzNu12K3c9Ey98C8Tou6sMFbants54zbHQTbwdamJmzK\nxAZ3G5jbtePSW9aygdtew5YKKm3nNN9yfLu/SHtR0gKM9w1S+ewxXnu2i7lzDwT6/lbigXzyycBt\ndhNdGCEHeSHEfG6CZWOEdecqFbeXh5ULeOQKScIEKNDFDl4qbLr6KFT9mBsihWYYyyOhluvIwQaB\nQJ5T3lfZw02C5CnhY1BeftOUvz7goPS4m/kjQxRifiJkMZCQMBExaaIgFw361zeoKyqCICA0IVAs\n4zbqbJg9RJxZAnIBl1BFRyJDBBGD+l0+eveuF4ZlCqQKnQiSidOnkSGCjgwCdLKDixq7dLBV68Go\ny5wUL3As/wbjmVm6xCQ3A3tZd/Uglyy2nVUqqof1Zi8RMvRI62y5upEsCb9R5IRxkYOGC0ejyZdd\nPw2ihSiYdIi7RHcyNKZllGiTcsJDpqdIQCwQNnMIuoRmquSlACEzj1uuELRyDBnzaLpCQfSTbHQh\niQYbjh4uqMeZcY8ju5tMSHcYFWZbRUFVJk0YAYM72iQVy80e5zQRIYPfKjLGHDVcmLrEeG6eq+pB\n5vyjqEKdcsDDTGCMLCGaKHSxTY4QBSPItL4HWdYRBZMutlGps+uK853+97C22Uct6+GXG/+Bm8E9\nTCuTnIueYLU6CLz2ILbwj2ykbgqAG8+BQbr2C3TpYXpeuY5Z0+5z7mvXZLfz2nC/B4kN0u02rvZN\nwAZNW9bXrp9ut0BtfI/n7U1AcH+Dz5vUBvebpLa79NnKFfuYdmdCwa2ye2Y/6f1jJDf7mX1NJDX9\nznPve7vxQED76OGLXJw6RnUnyI7Wze5WArFushZZJe/zI43o9JlrYIBT1BgWFhlkmUJvgFQtRvnP\nQ2weCrCRAFZhz9R1Dvmu8GHh62wK3bzOcfZxkz7WEDHxU8Q3XCI5FGKbTmasSUqCjwAFBCwUdA5z\nlaO7V3A/38TnaWB1gjUCVgc0RYWcFGZJHkKxGsiCjmUJxEkSsIoYgsiSMESOEA3TSVLrYGNziDHX\nHfb6bvId8wnyQogeYYMeNvBaZd7gKNcKR/DrJf5px//OyPQqwZUKiPDcVI4/7fop/mTrkyTC6/Q6\nlrhUPk5QKBBX02QcUbakBCvyACe1i3QVk+h5F99MvJ+kN86MNIHmdNLxeprjv3EV6ahJ6QkPYtwg\nqOQJNfIM1Lb4svpxXgw9wqR4m4iQJWakOFa7ArqAIcscLV5jS+nkrHySi8IJNhJd9CSW+ADPEibL\n8zzJBHcAeJHHebH6OA6jwR5lml5pvWWxat7EECT0ukJ8Mc+F+EPc8u1rTbyhh3PCQ3gpIWGg4aRA\ngOv6fm5W9pPwbjHiWOCM+Appoiw1hihVfJy7eBppW+LTJ75EEV+LymGQ2cJeWnMKfhz/tUjdFPjW\nLwv0/dZT7P/Vo4Sn15E3k+iW8Sbowv2UhN3AYhco231BTO4pP+S7x9imTLbHiE2PqNw/kMFu3rFp\nC7inNGnXWNvDEdoBuZ02gXuUTY17Wb99IxHvrqEIEkYswuyvfYqbN4KsfW7hb3Al3xnxQED7heL7\nCJtZGi968XRW6DyzwZR5m7rDwSYJFJoMbK3ReSPN0KEVtC4FlRo/If0FiZ5tLv70KfLBIJrqROww\nyBYjnJ89jWuozrBz4U0gWaWfIn6OcJkturhiHeGl6uOExQyPu1/EQmCLBLfYSzcbDGpLiCkLhkCb\nUsjG/bjDVeL6Dr/Q/CM86xX8pRJCj0U60MEtaT9vpE6iuDWCoQwB8qSnO9i63A9HDJRoHQHYK06T\nIkaOEIMsc1S/jKfawO+uYtQkeqd38Zj11k79LhyqX8f/UInDnVfJuQNIGHyCP2dcnsGURIbTa0Qd\nebZCcf5Y+QRL1THKC2G6/UuMeu+wwkAruw0qWEeuU31Cxjhi0VPc4ZpvP0lnlHF5jqm1aRLFLZYn\ne8i4I5REPwPqKpKgU2+omHMiXSR5qPcS8/ExFFdLHlhDpYGTE1ykjkqSOBU8mJJIU3CwLvQSJE+a\nKGtiHxEyKGqTubEJrjsP0Gts8Mnsl8k6g1wP7OUYl8gQ4SInMJCQZYOQN4dXLlPFzRUO08kOk/Jt\nprzTZB+O4qnXeDb8Pq5795EjhIFEWfY8iO37ron0f97m8qiftSf+LT956Y84Nv11Frm/uxHub3G3\n5XM2INpZb5V74FjjXnONxj3ao33QQrvKwwZrG8zhXnZsT8jR2tayz2u/odhqmHY7WbiX9cu0Gmcu\n7PkQXzn6SVK/m6M4t/M3uHrvnHggoL2SHkTJNrGagMNAUHVcShlLdN8lKwTqqOSEEJ16kkZTZk3u\nISxmSZhbiCWTrvAmvlABd6jKtHaQleIQF80TdLLNPm6ycperzhBhPzfIE+Smto/518dIeLZIH4kS\nETOExSxDLLU6E30aa2PdaENOigkv2+4YVcWL2ICImKVjI01iPQkKTDVm2ZB7WNVHKOOmgYNRFpho\nLJIrx5h1D5FQN9lTv4PXUcEvFSjhb82CxKCPVR6rvYSelAnNFlA6jDe/P3atJQkF8/RMrrFNJ3kx\nhE8q43WUMREJZQq4PDUaYYGkFGfeOULT5+KgfJEgeRYYafHYcZGdJ2LUjijInTp9yR2aLgcbngRV\nWaVX2sYt1JEw2Sz3kKlHGQos4pOLVAUvS06LmulmxRggacQpF32QlUnGOtHcKhU8pIhRxY2XMl2O\nbWRTx08RgIIQIE+QLRKYisityF5K+AjqBUQM3FQJkmeLREuzjYMOduljnUPcIE2YbbOTRWMYRWrS\nKW6zz3GTbF+YHCHmGWabTgC62cSvlu9OD/1xvJ2oXitT3VbZfnSQIR6j01MhMXqRcqpCcfMeX221\nPdrg+9bBA9/LYwS+/2AD2o5rb+ppz+Lb1SwN7l/XzqrbLVnh/puJLfUL94I75mV99hjXrTPcrAzA\ny7uQLP8gl+0dFw+Gjd+EzYv98B6DZpeXenGQZkAh7MjSQZI6Kje697DZ1cPfr/45ombwinwGC4Hl\nlSFmf3cv7/vkczzS8TJR0jSCbtbUXubkMUr47k6x6WaOMYr47xYrmphlEfMLDm51H2B9bzcfdD7L\ncfF1jnGJbjZI94e4/umDJIU4KSFGihivVR5jt9HJvo4rfC77e/TMbUE3HMldo0NMUjjo4w3fETSc\nnOI8p3vPE1dy/HrsN+jVN/lY8Wt8JfQR3FKZIZaYZYKL8lH8/hxji/N4p+sI61Zrl0WBh4A74PxO\ng35ji77wNlueTv7d0H/PsHOBD9f+EisnIJkGXipMcZt4Z4pgRx6vUGabLmYZ52meI9Sd5cZPj1MX\nXIRrObqNNF3WFlvEuMQxLg9ahKw8ncIOi0tjXN4+zp79t0gom1ScHmaOjHNRP8k3G+9HkCwaay70\nSy6cj9WReps8Zz2NhcAo83xM/DNczlYr+kkusE4vSwwhYTDPKFskkNFxoqFLEn8U+xlOcJFHeZnf\n5vPoyBzndcaYY68+w97KLH/g/VmeET5EqhrF7eqjy7FNlAw+yrios8wgOjJB8nyYryN5jftmof84\n3kbspuErz/KM9ThbAyf44mc+zeYrS1z4aqvg2C7ns2c3tuuwufu77dBnA6/Udp5NUdjFSztsILat\nUfW2Y+xz7c7NdrWKTasobb/b7oHtDT827TLwMEQe7eRT/+o3uHy7Cbefa+nX3yXxQEB7YnIaX6xA\nsCvHlOs2e8RbFKQAHekU49sL7PZH2fHH0EQn19Up+ovrfHjtm5QTLuSEgfTTGoxYiJi4qXLQcxlN\nd3D9ymF2u7pI9cUIk+UIl9GRqeFmg15yvhDRX9pBKBjk34jwSu/j3PbuI2iUOBo8T9SVpCS1xl1F\nSeOgwT7fVUZNF8fFiwSPZ7gxMs75zlOUBB9qo857N15mMjzLcmcfQfK85j/JrGMSXBYJ1ql6Fc4X\nHuH17HF8UolQIM2IOsc0e7nY70cKmvRU1hktraCgc3lkP+mJKK5cnfcUXiFws0RYz/Fx8S/wBUoo\nusXF/iOse7sp4KeTXfxCiXWhhz7W6GGDYRZwUacieCgJXsauLtFV3iU1FSTpjuKq1fnE9leRAg0y\noRCvcAZXvMJx3zlSrhhVXIiCiSBYOGWNHnEDRWiSi0RYGx/ite1HYc6isBMDH6z0Wjx74INMyjOM\nMYsTjQ16uMJhGjhwotFDy/ckRZSCECBIHicaCbZ4iHPcYB/nOYWOzHxlkn+zMUyl30HKFcMwJCpW\nK6tfZpDrjQPMmyM0nQ6CQo5xZomSxhCkv37z/Tj+apgWFrdZSIn8oy+dgdMfwfnPZX7qd74E69ts\ncb+kr90+yZbcNfmrShC433CqffSZXUhsco8WadeEtwO3rclub1dvb/yxs3dbg20BXQD9CZ775U/y\n6m4T4wsFFpO3sazv5wb+oxsPBLSHOhdxdVRo6g7cjSo+rYomq8TMFBPNWXasGLtmJ2tmH01JpiE5\neVw/S9hIcch3hfcf+gbjgTskmtt0V7ZJqh2EnRkkw8QyBExEGjjwUEE0LK4VDrOldBH05Yg/nGRj\ns58bc0FSZoyiGUA1GhiWRbCSpZFW6Y+s0OXdIkKaqJpCR2aUOfR+kVv9k7zKKdzlOvuS0xyYvUWi\nfxNHZ5UABdbVHhbVfvZxi77aGlZVwGoIaKg0BQeGBegm1ZoXp7+GP1KgiAd1Q8NXL7Pe201F9xDb\nzGLOirAEqqAxXp/D8grUDScNw0Gz7sQsy6iqhirWMU0Bn1QiTpIpc5oZcYqcHiJSyROpZPEYFbJe\nH860RiybJSJk8foK+K08c8Y4QXcBp69OAwcWAorRJFbO4JZrqO4687VxsmIMKyawvDsISQHuiDiG\n61S73CwwQpxdNFq0yXJ9iBv6QQTF4Kj8BuPSLGmimIjUDDfFaoiMHKXk8hEhQ4g8O2YXM9UpzJpC\nVoxSN2RKpgevXKG+7mJbTDDbP87lylE29B5GlHkcUktRnCNIgMKD2L7v0tghW4avvTGEe6Kf/lGV\nSXmZ2PAscl8K9WoOK994EyhtHbeDFsDaqo92tYmdDds0R/Mtx7zVO88GZ5uOaddpt/tytytD2ptp\nFEAIOdAOhsiuRskwwfXAMdau16hdXAF+tDod3248ENDuZAevWebZ6ge5kHkEuWQRG9rkkegriGGd\nFbGXOXOU89pDDDqXKfoDGFMCp8zzPKxd4CHhCjl8mDXoWszweuIEix2DOI6VSIjrxEjxXd5LHRVJ\nM/nm3EfoC67w1MTX8VPiZuc+NmOd+KUiUSFNl7VNWoxye2Ufyy+M03V6jYNjb/BhvkaBQEsVgsIa\nfazQTwOFp3a+y8euP4PzcoOMFMBxuIGfInuZJkKWbjYZzq7im6/z1NRzTERuIgkGZ4XT3Cgf4pub\nP8FnOv8T48E7pIiz3NVLB0miYopT25cYnllFudoEDfR+iVQ0SLNbwlFqcPzbl3lYfp3alItvdz+K\nWy3zocZzTDumKAteBvQVyrIHuWzy2PI5csNeMlE/Dlljz7lZ8hthvv5zT9ETXmPKmuHntT8kK4fY\nlWJYCNRwYegyh1ankTxN5gcG+PX0v2ajOgSCiNCtgSRgZR34T2QJjGVxShrr9HEFjQgZFrPjzJX2\nIIVqPO57kROui6zTSxfbrDQHeWb947zuO0WwN0eGCEHynDbP8szWxxmQV/jHE7/Bv9X+ITtmjF7v\nGut/MsxGbZDp/6FIKttFqF7m/YFvMSuNcY2D1HBx+sdN7D+EMKj+6QpzX/Xyr2r/He/7h7N89Bde\nIPLZ89QvZUjTokjsrkI7+2133LOjXX1iZ+Ltem6787HdVMpWiehAgPsHHbx1pqMN4jZ1EwPcYz4K\nv32Er/7H9/Cd3x6j8b/MYbzD/bD/pvG2QFsQhP8J+CytK3ET+AVaFNiXgX5gBfh7lmV9z9SnuaRy\nZuAVUq4YN6IH2PZ2kzEiXNaOUHO50ZHJmFF0UUYQLJJinG+I7+fl9fcQ1bL0d6zgdpQQLZN6r5tb\nninIiFRfCvL88AfY2N+LKYlUBA9FR4DowA6W0+Ri7SSV8wG2Kt1UokEOj19DKhpcvXCckw+9xt7I\nNLunbiDGm3SxiY8Sx3idNDHuMEkNF2BxnEu4ohVeP3iYZE8MX0eBQVao3C3ITRVvIvynLJJcQH7S\nYMJ1h7rk4BynsBBwCxU0ReG6uB8DizgpPFKF3twG/de3CHkKOOMNGIBc3M/u/gjb4ThBMU+vsoGa\n0FBWTOTvGBwZvo7c28SXqNMrbyAuWajPGcSeztIYlGn2CKieKg6rjlJvktzXydZogog3TUjM4WrW\n8VZrXHEd5rJ8iA8Vv0lDcTHjHqUjkcShaGSFEEOhOeo+B2XBQ1DOUnW7WfKOMNkzjWI1uJE7SEEN\n4nRoJKU4k4FbNCyZc5uP8KLrSYrBMIcjl6gqbrJyCEdnFdVRRTOcXMkdpyT7cHnKJD1hvHKe29IU\nWSMMgF8oMfDQIhXNw7I+QF9oiSNc4THxRQasZS41jnMx+zDrngHgT3/gzf833dfvmtBMDK1GjXWu\nvtggvz2Oa/UIPe9JMf70HJO/f5XanQx3rHsZsF0ItCkOG5Tfahz11s7Gdm/vdnc+W0Zo897t43Tb\nG2zGBFAmI9z47EFe+PoEmzMxtP+ryOJ0k5q5AZX2OTrvzvhrQVsQhATweWDCsqyGIAhfBn6GlqLm\nO5Zl/UtBEP5X4B8Dv/691iimAnQPbXLIcZWy7CWjhqAuUDU9LDOAlzIOscGgtExAKFBKerlxe4q8\nI44/UuGQ6xKd8jYyOtvxLuqoqIU6Slpno6OXhiUzziwNHBREP0pIoyy6STciePN1rKKI4tARK1Da\nCbJ4bZzHp77DeN8M/VMruCs13KUqosdiVFwgRppXOEMNF2GyDLKMR6qS8ke42refMWWO3rvzLL2U\n6TK2qGxWULwNRMWie3ubTDGCP17GKy3glSuYXglBMckSIU4KAQtnsUHH5RzyiAm9QC/kJgIsH+pj\nmy5G1hZwLdVbE2lMkHMGw3OrWElgFeL7MggFC3kdEqu7aE4Z0wJTESmIATa1XooDXnSnRIwUsVoG\nd62GYUrMaeOc1R/lWP0aaSnEmtTHTDSFjMGWkcCqQURKEgiLuMw6WTmCpOjIloGZlcllo/jjOcoO\nLxv0EPTk2GveYHc3wWp1kLQcxx/MURY8bBndjARnGRPv4NNLZJsR1uhFFcqE/Bni4jYGElExTROF\nhuXAMV6nrjlJFvoY9c8z4ppj3JhFMC1WrEHMhsSyOvQDb/wfxr5+d0UT2Gb9GqxfiwJ7GQ8WMIc8\nBNx16uES691+9vpmCGYzaDMWde656dnyu7dy1O3ZcXsjjp0tv5XHbh964AKCgDUlkAxGmStO4twq\n4HR7mR86yLngEWZ3A/DHN+5+Ens88bs73i49IgEeQRDsa7lJazM/evfvfwC8xPfZ3EmpgyWG6GWd\nWDNFo+Fgj+s2CWmTAIUWHy1U6FCSrNLPzOuj7P6PARz/oonvSI6g1BorVUdFxMBJnVA8y9AnZ+lw\n7NIh76DhRMAiYmS5kj1BwynTF1ziV5761xQsP18UPsWl3HGy9RhWB6TUODt04aDBI5sXCTSLvDp+\nAp9YIkKGCBmytDI/DSfjK4t4N5ZYPjVIMehnhQGaKC1/b79F6H9T8OxasNjAc03jSOwmkz+xQM7j\nZccZYz36PBtCDyW8qNRI0sFyo0p45waypLWucACKXh8b9LBJN/FvplB+10B4HDgGPAlcAV5oPar/\nVIeTwOeh99IW1lcEJN1g/ulBvjP5GL9j/gM+aj3DkzyPE41Asow3Xyc77GMlN8C13FGeGfggXm8R\nDSeXOUoDhVwzzIXXz2B5YPixO0xrUyQzXdQ2gpy3Hm0149ScxH0pfJEit5lsTbb35Hh6z1/wcv4J\nrmuHOCc+RL4awqqI/FrknzPmmKUg+RmILdAUBGSxyaOel3iI8xzgOlF3mpfMx3ih+R4MU6JRVNE2\n/Gz197Ku9kJTYFEZZsXZxxPd36AoeJn//73lf3j7+t0bGnCDxW+abJ5187XCk1gPTSD/4mHO7P0V\nTrzyPLnP6dyENyWX9iAEe/pNe9HQfu7i/pFmtp7afke4pwCxaNEfewHP5yXOnjzBV6/+Fn/2+5cQ\nLs2i/ZJOvbzIPaPZ/3birwVty7K2BEH4v4E1Wpr65y3L+o4gCB2WZe3ePWZHEIT491tjNdTHHy59\nFuVGk9VMP4as0vG+JKaucOnOQ8gHNRxhDaem4XLWCI4XeehX32B17zC5aogr6ycQTRPZ1cTdVcQt\nV9GbCju73YwEFxlV5znPKWR0EuIWovcieTmAKDbJeEKkiFO0fCTMdSaHbxMOZjgeu0CYTKs1PaLj\nMYuMi3dIEWWXTgwkDmk3GGssEDeTdKRSsAsjjXmWGeB1juOngHehSnCmijhgYvhFsqM+sr4wulvG\nodbxz5cJ6GV6epM864kw6xyjhouEsYUS0vjahz5AyJMjEdomKqUxg9Ch7TKyuUK/dx35SRAOAN20\ndnw/rZFgGggWWA4wvCB5DcQycBViHVlOKpeR3f+OXmUVn1qigYNa0ElVcOLZqXNYvsJWZ4JdNcZM\ndYpy1c/x4Dkkh0nZ9FIpeGiYDrasbrJbcWp5H6YiEg/s4HUWqRpuHg2+yKCwyDp99LBBQtxCcTa5\nVTiImRZphhUMRURwW9RFJ7OMMyeMosgN9nOdBFuMCAt4KVHGS0xIcZqz7OUWkmhQ8AaZ7ZliRell\nQRthVe5ntLmEv1klpYYoib4feOP/MPb1uzdaea9ehXIVyoiwnEP+k2m+9OIgL629nzoSyf4p2K/S\n+egmj0jnmErN47+sUbsFmU1YpzUezNZl2005Lu61mA8LEOgDYR9UD6rciYxyUz/B1ou9CDfrvLh+\nG+VrBuuXB8jv3EJfzUNDbBXG/xsdN/d26JEg8FFacFEA/lQQhE/yV3U031dXs/YfvsB0zk/zjgMl\n7CR2NIxQh0w9yu2NvbhGS1g+i2ZDaQ3tHdkg/Lk82WYH2c0O7lzsRYo1cfdUCAVSdLvWkTSL1EYX\neSNMPaBSl1X8YpGwlEH1Vdlq9rBT62TeMcZOrZNUPs6eyC32917laM8bDOqrNJoOyrIPLSIjmk3G\njAVyhEmLUUr4CBhFRuuLRCtZlKxOLe9krLBAyhdjzjWGiAkFAc+CBjrURh3URxWyfX4aDQf+fBlf\nqorHquKK1/G5ylgIpIlSsTxkAmFeOfMw3cImY7gJEkHEIlLNMlFcINBZRowAnWA4BUxDQAqY4ANL\nBLEOekOi6nHgNhpIponukghmChydv85Rz3V2pRBbvhgpolQCbjJKmPBSiXgoybH4ea5zgK2qSrXu\nwWlqrUYny4lZFmlICiXLi6o1sKpVigTwiiVCUgaps8mIY55D5lW69F2CUh6PVKaED5dew9WoggVO\nRx2H3GjN/WyOckE/xbhjhlFpnkGW8VFCQ2XGmiRKmv3CDVSpjiFI7CpxfN4C+ZqHouFnQ+6m+MJN\nrr00S1YKUpF+cMOoH8a+bsVLbc8H7v6826IJq1voq1t8kyjQAajgfZhgv4ehk7OMyiX61zSkZI3S\nskUKgXVkSrhoouJExkTAwsKLjkEdgRohdGSvhbNPoHLIw073PqYb72VhcZL8UhkIwTdsZ+7Lf6dX\n4W8/Vu7+/Nfj7dAjTwBLlmVlAQRB+CqtlpBdOysRBKETSH6/BY785lOk03HmvraHeGyX0YevMhsY\npWAGCHSmqQkuzKaAQ21gSBKbVjdJPY5bqhBKZyn/RYjAz2VxJOrspnroDW8QFZLIks7LtceZzY2x\nN3yDmJjCQmCRYRbKE6RznYQ68xQWg2Rf6uTOh0wGhlfYyzSJQooUccyI0JK96RLBcokh9woZNcwt\n9vKSeppi08dPrv0l4WIeZ6nB8MwaRSlAc0gmSpr4cKo1bO8mqGtNYsECUsRE2AL/2Sq5Y342B2Lo\nDok90g185DnPKW5Je7nKIUBAwiBLhLOcpp819qvXyU14kWebBGZr4IRGr0yly4F/to6wYKDtgjoH\nlXE3a4ku+m5v49Q1Mr/pI7RSxjurwTzoDolCb4A7TJAiTvjIZdgAACAASURBVFV1o4zouKQqHiqc\n4CJHfFeouD00ZIUNeqiZHoxdCVezRpe4TXw4RUaPc+Hbp1mcHUeMDWN+WmI5McIh53Xen3uBm75J\nbnn2tixph0U6+9doqjKqWKNT3MVDhWI5yHpuiNOdZ4m609RwESTPDp2c4yE+bf0hLmqcF08xyzh5\ngngpE3em8FKmJPiQnjzJ42fKnMxc5oZviL/4ZzNvYwv/7ezrVjz2g77/j3AYQBUWXqO4LXL72QYb\n9ONqxhHLFmYVdBQ0ApiMYjGESBDrbr4tkqf1dXEe1SogLzQRtsH4ukhNVilZSzQKm1AxW+/zLtNZ\nf/8Y4P6b/svf86i3A9prwElBEFRadNN7gUu0vGF+npZjz2eAZ77fAjXJhStQIXZyG3NRZPmPR0hX\nYzj3V+n+wDr+RokgOUJSnlvZA6wXhiiW/LiXKlgrIlZCpBlUMEWLhqCQJUxU3eUnBr7CtewhNje7\nCXgLuJUqBhI+SgyoSyQC2zjlOmJMJ3goQ8XhZq46xsuuRznmuoKGkzQxznKaVWmAk+olvlt9H7PV\nUU4FzrMm9XFePUG1y8OguEx8NIUelWgEZEZYoIlC3utnrnOQnqUdPGYNpWgQTJehBM6gTiXg5rLj\nIC/WHueAep1Oxw5jzKHuNnHV6igxDa9aoiq7mGMUDxViZhp/vYrTpVPud/NK9BEqYZWIM8UB7wzB\no3mUARBCsFnq5hnxQ0w8NM+gvkR37xp1p0LF76bQF6DQ62XD6uFV4xE6xF3CYpar6mG62WSEBdbp\noSAFKIhBsmaYZKqT1FYn4aNpLEtk67U+SmshGjhxHSvSCLhxunUSoTXk/4+9+46NPM3v/P7+5d+v\ncrEiyWLOZDc7p+npybM7YbWrHUmrsPLpJBlnwcL5nAAbONmGbBxgwfAfwkE46bwnHJRWWoVdza5m\ndyeH7p7pHNjdJJs5VbHIqmLl9Ev+g6MFbMg+2aflzt3y9WcBrIcgv/hU1VPf5/uobfakEKveHnxC\nhUnzEWtyH21NJagV8VIj/umFzTW8jMiPOao94qR5i2rbYFEZIGrmMYQWu1KMxEwOWbCwj4pYgoxO\nk0GWEEQ+fa4dckKUjJrkuv8UHvnfa3j9v3dd/3hzoVXDaUGzAE009ne0/9bfjotqANvsf5j5293s\n5qeP658+j7P/Hyj87c/+7VW/h/4uf5897euCIPwFcIf97ak7wL8G/MA3BEH4FWAN+Mr/03O00Ijr\nOwhHXTYeDbD45xN4qZKQt+l/ZZUhbYnh1hJ9xXUqxQibe/04BZniGyrungCvQCBaxk8RzWPiKCDp\nNj/R+02EpkNxJ0zIKeKngolKN2m6jAyi4VCgg2aXRm9ymWI5TNkM8K7nWVRvGw91igTZJklWTDCg\nrfJJ5TxL7WEu6R+yofYwp40x2zXO2a5rnHZv4bgiHUKBMPv9xntykKZXRUnYxKs5fJU6+pqFo4I1\nItLw66zbvbzV/ByKYhJ29xhxFwiVqwTLFfyBEhXVywbdpNgiZW8Sb+egLlL1+tmLBPk4cIaGojHe\nnmcktkZELSJKUMwG2VC7WWAE4UkXj1lhpPGYVlwllwqyRh9FwszaE9w0z/CU/AE9bLBlpdDFFp1i\nhrvtk2yJXZQVPzXHBzUJY6/N0LkFakUf9y+fJHsjhdrfIPqVDNaIgd+pMBibIygWqTsGm3onR8oP\n6S2vU436KMlBZCyi5Oi0tjHsBveUaYa1BZ7xfkQ4X2bGM8lcYhTNbhMU0pwQ76CkbeqiF+WIiSyY\nYILWMInpO4TUIgYNFEzKsp+HoQmO5+7//y78f4i6PvT/xmZ/R7vG/p/x0D+Uv1f3iOu6vwn85v/t\n4QL7HzH/nZJsc5JbLDFMOdJB9lyLoy/dZvDIAp2k6SLDUHqVM9fuYJ/+Gt2Tq3zL/jL5P3lAY1eG\n8It8yfctzng/4bZxkj0xRAd7+7O3e7fo61zE7ymTYpMAZTZJUSJIDQ8SNmH2iAh5Er4sLUFjlX7S\ndBGkhJ8yCiYD1iqTjcdM++6xbPfzm7n/BT1Y2z/6TQQVkyM8IGCXWRX6mJGPEKBCmD28co07E0fo\nTmc5v3QLymAmJWqDGoJiMy7O8Z+Ff5c+aY1+d4U+a51vdr/Gcvcgr2hvkBXj5IjSzypD9VWUhsvV\n0FmKcgBBdBkR55Gw8El11EQb7oD1RzIf/bfnKZ/w8ev8Dh1WgXC+hG+5jTssISZdbGRucporzkUK\njQ4e6EfYdRNs5AcQPODoIvc3TlH36ajJGrJsMdE5w8WOq3g8Nba9SeSX2zwcPo6imxyVHhCN5vBR\nRRQsQuwRs/KcLN8neK/MRi3Fh88+zZq/lxJBygRoln2EKmW+mvi32KrAd/kcn7/8Hnq8ReDzZWa1\nMfxU8AlVrl04RVEIYQsCSwwzX5zguzNf4idGv8Xx1C3qeNA+7TN4xCSXbz4L/NH/h3L/h63rQ4d+\nFA7kRKSDyCY9eKjTObyF9arMi8e+T6hjjyxxsiSI+XIwYCN3tBn0LfFV/pDvPD3Ow+5JaEssmKPY\nNiybg5R3QnS30sgDFj69gqHXqePBX6wxUN3gXuw4s+I4ZcvPuDqPJrXICElOyGnKBLjhniFm5Zhg\nlppsMCtMkKaL/8P5FdJakl51lZa5Q1aJUXBCiIJDWujiIy7RFlUqgo86HrzUcJBoijquV2Aq9oiU\nvYEQcVEbbTyfNIire7SiHnIjUeqihzWnn7rooWL4EEWbMj4EXGxX4rJ7kbrs44RxD79WIitF2SbJ\nEWbYyvTw0frzDCU2iQ3lsF90CQyVqPoNlhlEE1tE5CKi7GLstQkLZbqjW4SlPTShhSxalMQgmthm\n0Fik3daYyZ0gdzuOr69EvHOXICWmtAdMa3dxEUnJm4xoC6iSxZ4QIkKOafXeD8awmqikxU66tQz3\nu45wrzXNjHIUCQuDBtsksTUJ3a0Tl3bwi2VKehBzRKDmNygKIeaFUXSa9LKBExIpEWCRYVYaA5iu\nwmjyMSFPAREHBZM0XSw4w6yZfcSShX938R069B+ZAwntFhoPOMIx7pHoz+Dpr/IUH+AikOcZdoiz\n0xGjGtTJyx0EKPMkl1l8+TdY3RiktepwwzrNPWuKWtNLa8tLpbpAuTuIowm4QI4IVAU6doqsBvu5\n7pyjUvRzNP4QwXDJ0EUdgyY6RUJ0Wtsc4SFl2cc2ndwVjvOh9BTjwjwnucMJ+Q5vCy9w1b1AUCiR\nIcm33Z9g0RqhU0wzJTzEtFQ2hRSL8jBdpJFDFh2hPCptumazTLyxiGEUaIx4kIZsdsUom2I3C+Iw\nCiYpNigRRKq7tCyd94znaWoGXcom/eVV9pQQc55xSo0w99ZO8c07P8NPnf8WQ1MLlM8YJLRttonz\nfT6PIpto3jbVeJhgpYR3r0msI0evtE6PsMGiNowriQgi9OvLLDTGWdsdRE23CIRKRMjRwyZ9rBNx\n88iWQ6hVoqOVJ+tL8ECbAiBCnig5qvhYdfvZlpJIPov7E9Pc5ThbdDPFQ1JsUsGP6m0z7F1EpUXE\nydOpbNM+L5MVomRJMMMRFCxa6PSzSsP2cM06z3apk6ST4fTgdfqUVQKUaGJwrXWe643z7NQSnBm8\nyfWDKOBDhz5DDiS05U/febkIaLRQ2d9P9lHhNDdpodFdzxDdqRBP5Ej7kiwyTF9kiXO+D5kdmGTI\nt0hYK7CjxNgY66XSNvi+/iIV/NjIZOhiOxanGPRR9xi0Hxm07vlYfW4A0bBoofEBT6Ni0ssaWTXO\nVS6wRi8iDuPSPI5HoiQEqe14Of3BPZQpm+DUHmWC1PGQb0cprUfo9m8zEF3lmZ3LFLQwV6Nnuctx\nrnOWZQZJss3pvpv0fGUN2bXxGCWmpXtkSbJKPw+ZJEiJGl5ucIa1h8NUM376n16gP7CCXmoR+usa\n3QNZOs7t8Qc3f4XZ0hEYACEHGbWTG+PHUESTDElKBLERmdXH+bPOn+cn499iUnxIWupkjzCq2EZT\nmxhCA6sp88nqJeqGQXg0y3D3Am2vSppuIhSo4aXkhJnOPiIxn0N46DD8yhKbw93c4xhxsoQo8oAj\nrLoDSNhIgoWASzeb7BEmxSaTPGKNPvYIs0YfH3OBp83LnGzf5ZZxjEV5mBpequwPkOokwwoDPKwf\nZWt7gHZBY8sx+JPKL/FfJ3+LseA8H3GJpfVRtpYGaOdVHk9PHET5Hjr0mXIwoV13yLa6CPmLqHIb\nlTZlAjifDivab/tK8LvCP8HGxUSihca600u+EaWVM0jJmxzxzFCSgmyEesg5UZakYWxEWrbGbj3J\nDfkslkditTyEKLl0925g6RLVjSDZ2W52+rtQgy18VCkEwzi6wHXOMMIismCBBBI2qtZG72ow5F/C\nFRxKBJllgrwYpcNbIKQVQHC5pZ9EVZqk2GSX/Rvl+1jDRxXLI/OB8RQRJ4+NxBZdaLSRsX7wbr/i\nBlh1+skHYiiOhSzbmILKmtLHTM9xdiNR0lISqcNCcxq0mhq5UBgx2MOsNEEbBQeRcWbpLmxTdf3U\nwwaXxSdYpRcfVZroBIQyvdI6+a041VyQlLHBbiVGteihe2SLhk8nS4IgRRKZHXpW0xRjIdaifWT6\nk1S9PiLk6aBAyt7ES41H4hTFnQ4cU6LR6aFXXqObTUKU6GT/WHoHBep4aKEhYVERvWyIPQQaNY4w\nR7ebZcJaQFRsIv4dMnRSr3hpPvbgboo0TIXNmJfrZ87RDspsk6RUD9Hc8MJ12FzpP4jyPXToM+VA\nQlusw1pxiA49R0guIOCSoROROGv0M84cd5Xj/Lb/n/Gs8i4pNmmi87gxRnq7F/WRS6eSZaLjESAw\npsyzxBDv8tz+nY+2RavsYVEfpYlOppBC72gwODmPRoPtmS7Sf9WH9LIFKXCbItu9H2JHJDaMHlJ2\nGsNtkJOj6EIDLdykcMmPTo1hFrGRyBEF1WGwe54kaUpugK+Hfo5BYZlX+C4pNulhg4vuFRxXZJ4x\n3hJfZEycB+ABU4zyGBkLC5kNeki7+4OzjP4mfqFEQ9H3+5wDKn/x4k9jotDDBmNHHyAtmNx6eJ58\nTxArYZMlwSYpeljni7zOcGaVghNhOnSP25xklglOcwMvdYJuieP2fa5uPEUmHePZ597m4dw0D+aO\n4eluEPTtd2ZEyBNL50ley/Hxl05x5dgFrk+f5aR9h6iV45R0i9POLVxX4JZ7Gndbot0wkOIOCXmH\nLtL0s0aWBFkSBCijO02qrpekuE1D0bkrHuHJvWscac0huTZaoUXO08GsMkxWThKt5zAydVrLGnZV\nhiy81/scC92D9CmrmLKMaFs4iyKF5chBlO+hQ58pBxLaBS2IHqjQI61znDv0sMkGPewQp46HFJsE\nlSKngzeJyjkULBxMftL/TVKpNIPiJmuRTlYY+PRqKwGDBtqnY0En5VmmIv+KVC2DnVdQIhZLRj9l\nAshYtAIa4rBD9+A6timxda2P12+9xvDIPCc+d5fn0h8gWTarfX2kpU5W6WeWCTRa2EhotH5wQ84k\ns6i02XViFCthynKQki/IPGNsk0TE4UL9Jv3CFqOex5wybwMutiJRxs8O+zNPetgkKWS5Kj9BaSuC\nU9VIDWyi6m0MGog4yFgomFTwo3S1GAk8YsC3hGKbGHKDODv0sEk/a3i3a9RtD10TaZJsUybAIkMU\nMelvbfDVnW+gd7b564Gf4IrxBDuxLkxHZUvvZpjHjLDABin+fOQ13oq+wHTsLh5qlN0Ab+2+zCnh\nJr+W+Jc0JZ1brdO8ufcSe7EOQsoee3KIFQbYI0wNL3UMWui4QKkeYrPZy2awh5SygSsK/HXgFbxO\nna5WhnPXb9HR2ONYfpb+ri1SwW3aL8ncP3WMzGYKd0FhbytG29DIj0RwekSin09TGO4grO2x++5B\nVPChQ58dBxLaimDytO89RqTHBCljI6FgImJTc71ca5+jLhjoSpNtu5Otikwr52EsvsB4YJYOscQV\n8Sxz9RGm9Xu4ooCNxFN8SBUvLVFB1tukG0m27W469BzbdpzF/AiWX8FMSATP5nEMAQcBY6DCditO\np3eDU9xCUi3yUhQLiUItRtGOct93jF5xjaSdJd7Kc1K4S1LKEpHzNMX9QwQeqc6uGOOucxxZsIgJ\nuwQo0xJV2oKCjyoILh7qTDBLteIn7uTR/S3i4g5tQWVHiFPQSlh1lcxWimBHmZ7wGiMsUCREG5Uw\ne6heEzxg2go7dpzZ1gRHtAd0yAWWGOJ29Aw12wcClAiyS4wqPrrIEBBKNFWVpq7S8ig0JY3OyBYB\n7TE5K06wWSKu7+CnSiugYQf2t608NJjiIVeaz7ImDLBLjEVxhE2pmwvKVfLeCA1NZ1eMUXYCiI5D\n09Ex8ypOTYYQbOb7KJbDrI3301YUEAR21SgqJmmxE7nTJtrIY3oVxoTHDOjLdEc3cCLQGUnT9Psw\ndYWGppNrx5AFGyVkEThTIqLvsnsQBXzo0GfIgYR21MrxldCfUcfDFt3MMs4RHiDbFmUryEelSzRF\nnd7AOovmMLndBOaMhydOXaHQG2ImPMWbhRfYbPQQl3aoCl68Qo2vyn/MR8KTvMPzFAnxUD7CvD7O\nT1jfxi3LbOSGsDplPP4qkSNZMot9OAaEfzJLpeyng12OijPcSx7jLsfIEyFXidNu6Tw0poiLWbqd\nNOPVJY6LM1R1g8fSMGX8KKJJVMuxIIxwxb3Izwtf5wmuMik8Yt3TS5oumugsKUMkyDLIEpFihYbl\nYcY7DqLLHmGyJGjHFUpqmMs3n8M0VaywyGlusOCM8sA9woC4Sl3wUBYCrMu9zLXHuVJ+kgvhj1Hl\nNu/wPFcnn0DE5iXx+7zXfoZtt5Mp9SEpYZOgVuS95JPcaR6j2A7RbWxxJniNHmOLr+3+GkvuCJ36\nFv2sEmrtoTQt0koXouzwlPwRj8UjpOnidetLrAl9DMmL/Eb4f+a6c46P3Evc4hQFp4O66aFlarRX\nPVhpA0ZcxKyDt1Blra+fPV8ISbCRsZCwqSh+Kif9+7fBKzo/1/gGliPjtCXOqLdQe1vkeqOUCbDZ\nTnG3fJxqJYQlOHR2rRGQywdRvocOfaYcSGhPeB/RSYa3eJFHTJIlwQIjPLF9jf987t/ws7Vv4rgS\nqt7mN3v+RyqBDvrOPaIntEYLle/xEhkjSbkd4DsPv4xZVfDpFSpHArQ8KgoWFgpeo0agXeHylWco\n6wHcuEX+6wn2HsVgW6BpGYSfztMztcHSzXGajo/yc0HGpHk81KjiRwyB4EC/tEIPG/ilMnPBIVqC\nRln0MyuOs0eYfCPK5s0BhJBE9GiOEkGyJOgkwx1OsMwgDQzSdNJFhi/zTRaiCivuIG9LzzHGPAH2\nWwknmeU54z2+Mv4X3PYdZ4FhFCzqZT+5chfBeJmkvr/lMc8YNc3LS+HvkVWSNNGJkOcV6Q0q+Flg\nmMy7vWiVFhdfvYLrEVhmkDIBBMXFIzdwRZFrjXNcbqiUDQ8YJvOMkiDLw7fG+ehrF2ie7UB90iJw\nqcBuNEw97+PdWy9R7/AQ6qhidDS5t3KKq82n8YyVOS3dxKvWWJEHKI8FMftUZK9FvHMHb6PGQ+cI\n3mqVJ/2X6WeVXWLcap/i43eexPA0mHh6hn+r/RKZdDeP7k3znx7/V0ymHrBOH/c4Rkgu8uv+32He\nM8ESQ4iyTaEUO4jyPXToM+VAQnuSWTobO/i1KpJo4zoCqVqGwdYqPdo6E5U5FNfCEiW+tP5t+hJr\n6MfKaGKTKn5CFImpO9i6TE31IGs2pqowIxzF/XSSelXz0ZANdL1O3Qji9VYJBAqk7T5q9eD+adoC\nmFmZWt1PTN0lJu5Qw4MLP9gKGNPnET4dUKNgsitGeKRNodJGo4mNxGarl5naNEUxhFiyqc0GyPXG\nWPQN00L9wQsTQIEIBk0KdNAwDFbcPu44J9i1Y4TaRdbr/Ux5Zxk1HpOIZ1kx+1krDiE6AjvtJGGh\nQLK6g+K08XjqmCjIkkVY2mODHgqEGWQZW5TQnBZH7Eesq0MUjTDbQpK8G6GKjwRZZMnGR5Ux5lmq\njDC3O4VimDh5icXmGP5Kk9amQCNq0ParlNUgaSfOhD5L0thFdxxsBEbEOWp4aEg6KC5BiuhiEwkb\nRTIZ6XhMjF1EHFwEio0w5cch0t4UWTXOBeVjwmKBnBBlR+/C1GSags6cNM6umkA0LKqSlwIRSgTZ\nrnUhOg6T3llkzaKNzBbdVIrBgyjfQ4c+Uw4ktMcaS4QbFaaCDymrPlSrza/nfo+knmHtfBf9S2l8\nbhUn7vDrr/8O+VyYR1PDPJInaYoar/GXvCc+y/3gNAQFAkIZ0XXYdHrYqPSSb0Xwh8v4lQpBo8Tw\npVkiQh61ZfLu00Eak779MUDvQSkUplz08NKp73LUuEsDD0vuELJgcYYbxNiljcp9pikSZJNubnCG\nMR5zlBl0FrlfP8n9+kk8x0q0H+isvjVC4kvbWD6J25zEREHERqdJP6t0s0UbBQkb2bUwLYXbjZO0\nizpuWuO5nvdxe6CgdrBcHuH67kWuty4yGJvnycQH9GxmyLfD1HQv48IcdcFgzp0g6yawXQlRcLkv\nHGXameFftv4ppUsBvqX8JN/gKzQdnaibo0fcQMbCS41neQ+5CPdXztDWVdpZL+WlKGtroxx98jYv\nfO0dygRZtftZsEZ4Vf4bXvV/j8nhBZo+iR0twqIwTGxgm2PcQsQhY3eyS4y2qHJCuMPzvIP16TH6\nh60jmAsa8x0TlCNenvRcZlBZ4aR6m47nCqy5/aw7PQiCS2dii57EBhkSbLjdlN0gjwpHCbYrVHp9\n+MUKUXLMM0ZjTz+I8j106DPlQEL7ny//CwJdRTLXu9m14pghmT/uyjEQXEIWTS53XSLolunTVwk/\nU8S/WGXydxbRPm+Snwwj4rDbjlN1fTynvYeJwnq+j8xHPZRCUZwejVpbom36sWyDqe5HOB6Yl0ao\nx1V84QJBsUTeSdC0PAhZmRPeu/jFKr9d+m8IBgqMGbMMsoyAS5kAq/TRxEDCYopH2Eh8zAWWGWTP\nG+ZJ9X1UtYl3tIY/WkWP1dFoIeIwxzhxdvgir7PICCWCrNFPkgz9wipflr+J7mkiKi45X5xtT5x/\nwT9HxaTu9/Gi+jd4nRqC5tCSNb4Tf4mV9CAffvgMsaMZIpFdfHaFnZtd5EsxtsIDVHt0UqFN5rVR\nRNEhyTYlgjiCiCKY3OEE2ySp4eU7fIGNSC/yWB1JtbGXVaw7KuKX2iTPpznNLRoYHBfvYsoKZ8Qb\n6EqdTCCKI8OuGGOJIbxUiZNlhmnW3hqklA7hf22Pj0MXKOPnp/grzvMJCU+WifNzZJUEqtCk/900\n3eEsnIdZJliojDKzc4KR5Cxx3zYGDaLkyBXiXJk7RSEcRoqZ3BJPESGPThONFtIPLrM6dOjHx4GE\n9pI8SEDaYzZzjOpeED1Y53bncbaNGJJrs+uLoTXa9OS2OJa4w0B7lejMHm1UYP8Y/EBulVCrTF/P\nOqtKH1V8mK5CQC4jqxYFp4PGjoFQhHwogqHV8Ih1RkJzhMUi3VqaG+Z5Nsp9NGUdTWhTw8dt5xQd\nrR0sQSKpbXOk9QjbkVnWB0mWdxhqrxLryDInj7HCAKv0Y6gNkuoWKm16I2uMhBYhJ1Jt+tiN7N80\n3kmGKR7SRmWFQfYIEyWHKrQJSiVGpcf41Qr3vMe4yhMsMEKYPbq0ND3aKj6q1PCSN6O8n3+ajVIf\nW243GlUCFIH9Dpq2qyLioLpNNKFJS9JICtuMMs8W3ehCi5aj8cicxJAadMqZ/bY82YPqadMTWqUi\nhtmpdpEaWWVgYIku0hTooFvYpFfcIOzuYQoKy1ofu0KMXWJkSZBikxi7CEBus5OtxT487Sp1DKr4\nUDDxU8FRRYqpEAI2Vl1hS+jCQw3DbZBudbO4O8rWfA8dYh4Zi4LsUG/6yBejbLeSoFnUFZ1bu2dI\naFlQXMpWCKumHkT5Hjr0mXIgof3M5Nv0V9b4PaWbaimIuyvQPKezQj+b9NBwDOq7fpozfv7RyX9D\nbriD6j/1IYs2Bg3C7PELi9/AV6zzTuISW0o3m5Fugl/apVtI43OqXG+cpbAYp75o8PHIE5wI3OKS\n+hEhb5Ehlhhkma8N1vjAepr1di8L+hCSaOOJFdndi3OjfY5K1MdIeZWudoaF5CgX12/wM7vfZOtc\njGXfAE10OijgIFLFh4c6YYqcNG/T+2CbBd8I34l8jkGW6WGTBgZhilTZpYoPC5kiIW5ymhi7eKmx\nwMj+VVvsMsEsIg41vDTR90O5rnLrg/O0EiqdL67xgvAmIYpsSilCZ3dR3AZJIQMCDLJMl7CFiINB\nA4MGMXIUrRAfVy4wYixwTr5GmQBWTaeSj3AxfJXV0BCVZJgnQleZ1u7jIrBDnCTb9LCOYlts0MND\neZJ3eY4yQY5xj17WmeQRL/M9KsEO5mMTOLLAGI+5yBUUTPYIs0U36/SSIUnT0PnGi69xXviEC84n\nzJSPsbgxijsrMqOf4IFzFMHfgowKDghTLTyBOq2azu2H53HDLgRd3IqCmxUOonwPHfpMOZDQfu8P\nPk/obBGmbC6Mvs+4PYcdE8iQwKDBF8XXsSIKHx+7iBOCRXGYRXGEMebpZ3V/Ct4YVNsaGS25H4rC\nBttSEp0GYaHIRf0KS5PD3Os+QTqeQJBdJGxOtu7SFlVel7/IrfJZtvL9NHd8XGk9i+A4VOQIsf4M\nqdg6A8IKVgB89TL/feZ/Rwm2+V74Bb7dfJVVqQ/ZsHiJ7/HoxlHeuvUS8rBFdThIq0fl7OQtDLnB\nNPd5xCQbpPg+n0ejTR0Pe4RIsI2fCkm2KRIiQJnP833SdO1/sYafGl5EHPpZZYtudowYkxfvk8vH\n2bmSpDwVordjnYtc4ZJ9mTnG+bbyBU5whyPuA/xOFV9xla5mjml1lu/6PseKOshP+r7FSfkWKTaZ\nZYInwh9x1rjGhPaAetiPMOCiGS0UwUR12jxRvQGi+ejHPgAAFTlJREFUw5x3Alvan9I4J4yzVB2m\ngYe4dwfTVWijsigMw1mbvqlFfN4KdTzc5QQzTHNx4ROeXbrCdHCOB6kJ7vYcxZYk6nhYqfZS+70C\n7s42HE3hGi79xgrPBt4irfSwZvWxLPYRF7J4fXW2J1qggV2W2LsTxx8vUTyIAj506DPkQEJ7eWUY\n7USDgFikL7HCxdiHzDNGthWn1TQIeYrIPouIb4cyPmyCtFGJ2nn8bpUlcRgrIeEKArNMkCRDyCrj\n1mVQRbx6jSPKDIHOMmanTJACMhZZJ4GDSMENc4eTlJ0gbkPC3NXJCkkMqUFEKTAoLzNoLNDLBgU9\nzLLbR6qSZi2Y4rp+mjfSX6AtyAwbC9iIVLb9pGdSeCI1ilaIohQi3Zkkzg5eu8buepwNKYXRW2eA\nFUQcqvjI0EWYPSaYxUKmgp8pHmIi07ANks0d1uUeMkon+WaMHSlJXokwPLiIYrVpzPjwDDfoYI+Q\nW8TeVPCITTy9dSaEOSadWXytBmK7QcCuEnd2+Mh9AlVscVq/SYJt5LbNUH6FiGePZodGJ2lCXXt4\nTlbx+qsEKhU69koYaouK10dOiJIXImyTpIWO4lpo7v72TxOdZQZ5yBRin8UgiwBYyOwQ3x9da4ro\njSa63kSxTVxbIJ+PUmv72Wp00SgrJLQNwkMlyjEfMV+WpL5NwzDYaUZxixKKY+Hx1PB2lZGw0aw2\nvdom3V0bfPsgCvjQoc+QAwltz+kK3q4yhdfjtHs9hF/cQ6VNs+RjY2uIbw7+FL5gmQYGe4ToJMPT\nfMCr7e+Sc6L8tvbPaIkqomBjohAjh9xymF87ylB0HrtTRMABoId1xplljgluCGcIakVcBExkRkKz\neFo1buUu0Dm6QU9kjZiwQ6eUoZMMnaS5zzTv6c8SSeXRhBa71TjWjo4gOuxFwvwxv0gumEAZNEmd\nXuFM7ye8yFvU8JEjwp7ZweW/eZaCEeb4r17HRxUZCxOFj7lAL+v8Gr/LIsOk6WKZQW5ymkbbw29k\n/jc+DD7B7wd/iau5p2lpKmq4xqw8Qd0XQO42OaI/JEGW+/Y0f/bJf0JT0bjU+y6nuMm4+RhvuU3O\nH6Ko+2gLKoPCIj7KeKhxj2PYFYVf/fgPuT8wxeUT5whTQB+tER/aIqrs0ju7xdCtdd589hkqXi+d\nZPYvIsbLACuovjYxd5cv8G1mhKPc4iR5omi0GGKJMgEq+AlQ4qf5C/TRFm8PXeIj4Sk2pRSlVoil\nO+PUcn5kj0ni19Y5l7jPOfUGM9I0G0KKN3iFEkGKVgdm1UtBj2J55B+cpO2NrfHaa99kVJ4/DO1D\nP3YOJLSfPPYBeX8Y8bxL2p/gu7xEjhglnx9fd5EufROroLKwOcVw7ywN1cubhVep+QNEPLs8IV7B\nFYRP3536WMsNka8EORO9ynhgllBtjw8fP89epQOnJaJm2hT8Hez0xvh+t0woWEAz2pSFAPHgNv9k\n9HcwwyIhbY9R5glT/MHo2D7WsQSFBWmEvVqEfC5GfcuLIJuU4wFEzcFKKFj9MjvXuskWuqid2u+D\n9uKjJIeYunSPkFPmlcJ3Kfm8FNQwE8wh4tJBgRBFTrTvMuCuUVIDOIJIxQqg5NvIsgVhF/w25hUZ\n566fwC9W6ImtEZXz1DwGc4zzSJzCPekgSe394VsNiYbl477/OI4KeSnMPabJE6WNio8KMjYxzy75\n6SChQIHz1jVGi8tIGpSNANdyFwkVG5zkPn6hyrqY4gFTBCljIXOVC3iFOi1B4+v8PGGK+KlSx8t8\nZoqtRgq6TYbUJbqEDCsM4pFr1GUveTrYzPZSTocZSc3j7y8jyg61pEHcm2OSR/svcPlz/M3SF/EM\nVlBNEx5AeThEI2vgXFUYP/WQ6HSOTb2bmeVp/uO/ofvQof+rAwntS70fMOeOUZv0knVilKyLGFKD\npqHiMcr0s8JeLkZ+O85Q/DGmrLLR6uXtygtMG/d4tes77MpRikIIgwYt00fVDhALZ+nWNpDKDrO7\nR9iqpJBNEzljIjdspLDNequXquMhxRY2IklPhueMN7ltn0S12oxKj/EJNar4mGeUDgq4wD2OsWb3\nkbdjKFoLr1TG65T2e62jJnK/SfG9MIvmGDejZxkNz+MxaviVCuPHHhFuloiVcyy2B8gLHUTkXSLC\nfrtakRD97hqdzjbrbophZxHNMVmR+1hze2k6Gt3edcymjrAu0tNcJuTdw+utkSWOgIsh1Rkfe0gV\nHzW85JwosmDzsecMpqmx04xxWztB1fEhYhMVcxwVZugw8mwOd5LYy3Jy/S4xoYAlSmzqXdxsX+CB\nfoTVrl529Sir9HPbPcGXG3+NU5G5VTzDVOcDWgGVGY4wwRwJsvtfzLZ95BsRNKdG21WpuH423RQp\nYZOYuIuKidlQKVVCnDt6lanwDBFyXOP8D7ptioTQzBZa2YS8gOJYxKwdNLuOVZHYuZlC6zLxTNdI\n08X1tYsHUb6HDn2mHEhon+MTApSZcabZNFMIZpBBYxlFbIMLSTGLogNRyGsdpDxrXOp9h9u/f45i\nOcalX7rK10NfIa128bP8Gc2YTi2i8bF7HtG2GNJWsAckNL2BP1wgbBUIiBUMpUFT0bBEmQYGozym\nhw0aGFxvnkWlzXnvJ7iILDDMn/BVfpY/ZYhlIuQJeIrYvSKRrhxD8hIRJc+McJR2SKFj0KWwkWBm\n/RiLfzmC8kydF4be4peDv08NDwvqKN+OfIHHpVGCZpGXQ2/QRKeJzkdcAhVG3MdEhV1+of2nbIkp\n/mDyq1xpXyRfjfAl/1/T+XIG45kGXYE0q/RzjXM00TnGXV7jL9n5dBzALU5xz5hihknW6eF28Rzb\nVif+RIGK6UWwQTZsPMJ+t8sKA4RmqnTO5LBfcZF9bSJynr7kInsxL193fpp76jE2SNFwDUa2Vine\n72D74z7Gf+ExvpM1IuS5xzQOIoOs0Nu9Qp+zjClLrNLPXfs4pqXwlPQhSTVDH6ukw12kxSR1wyDJ\nNs/zNhk6MWii0uYyTzIXG+WJi+9ze+YcbVPl7IuX6dXXKG2G+NbQz2GHJCyU/VOr2wdRvYcOfbYc\nSGjPMI2AwyXhI/rlVUpikGnxPmtOL+82enk7/Xnq836YAek1G3+4Qq+4jntGpqO5x6x3jAdXjrFe\n6WX9+V7y3ghNV0dwXBqCQUPRGYo/Jq+EcT0uOk18VAhQJk+EcitIoRyhvhCg5fHgO1bBUOt4aFDH\nYIUB1umlkwxV/JQJ8BQf4koC8+IoQ+p+t4qP/R5kxxllS/QzfuQBvp4aTktkzjvBtcxF3EWFvqFl\n9FCTlLvB/PoEBTfO9nQnbUnFQWSJIULCHnLDYjizxh3/Me6EjhNTdnlK+hDBcnjJegtRtdn2JkjT\nxcP8NHM7RznScxfVZyJj4aOKlxoiDnXRgwC4CPi8JfqdGkeE+2zLSTadHjLFHkxDRzHM/bDtkxAM\nl6vhc+SlDlqCRltWGXGWuGRfRXNbCDjcdU7wR6u/iNlWiXwuy5HOGU45N9CcFjfEM6yIAwi4nHJu\nM+IssUMHt4RTxKQc48xysnmPgeoaEX+BshFkT+4gKyXIuJ0ogsUY87TRyNBJgDIj0gJ9xhqrnYMs\n14aYr06xvZGildFp+1QcXaRUD7GyNcJWtPsgyvfQoc+UAwntv3nHz8STcbqULQy5zg4JJnmEaNsY\nVoObm+dwVmWC2T0GmiuM8pg+1lFOmki2Q86MYm/JuDmRtaf7yZKgYRkIJSiIMTxai07fBqpUJ2dH\naZc1/HIV7cabeJ79IpbdSb3hZT0TQA80GRLmSamb+KlSwc8q/WTMTvRGm5wWQ9Xa9LHGsLCILUgM\nsIJGC9NV0JwWXqtGUCgy0j9HQs7imgLp1RSb2T5K1TAvpL4L33mf5KAfaculovhZyQ4h+WxcRcC0\nZUTNQbLAX2rzsXGBy+oFLnKFXnkNj9Cgt71O1kmQdruYcY9yb/0kKx8P03Vqi93BBEux/XsmFdek\nx1lHFF1sQaL5/iKxZ4JI2BznLjtiHNU22Wr101A8VB0/j9pHKMY7yCaTvC09hysIxNiljge57eCt\ntBiSV9iVo8wzxnv2M3iidaZfuE2PsMaAs8KQs0TILTFvj7PtJrDfucqRSznm1GFKwgIpNnlZ+i4x\nu4DTVHB9Dg3RQJAEHgnjlN0AO0IcCYc2KssMotImQh4ZE8kwsSyJQj3KenYAuyTh7ywTD2QxGg0W\nFsZpxpWDKN/PqFWg/8do3R/l2j+qdf9uBxLai29u82Dkv2Q8cR9BczFRGGAFv1zhvOcTPvY+jXtK\nZPKn7/Lz4T9hgkdU8bHACErL4ZndK3Q9vc1DY5y0rxMXAblks3u5m6zWy1J3jpPDn2B6ZHYaccq3\nojwRvob43uuEnjlGRQ8Q7CzCCwIdUp4SIY7wED8V8uzfflKtBPl47hJn+69Cl8safXRQ4Fnew0bi\nMaM8ciZZb/aSEjd42vsBiPtDpVTLRFqyCet5hi8+omFo3PtLk1r1l6n8jBe7W+TaW5cQRlzcKLgN\ngWp3gGrYx9LEIHPyGBk6+R4vUTH9KGabuuZhTerjbfcFKm0/5bthzH+tcv3YE+y8kmD1Z3uZYJaj\n9gy/2v597qvT5OUI8+/fRn7mebboJkeUEEXGlDlWo/1URA8P21Nsbg8w6xznlp5nMLJAQCoi4lDB\nxxvmy3yn8mWeCbyJhwrHpHtkL2bpFDK8yPeZZ4x3hecQFIeR2jInmw+xbJn/6SOXTz5/gY+ES4Qo\nMuHOEmnnyehJVr39DEkLfK78Ds+WrvJO/CnKuo/rnOV9nqGBQQ8b5IhSJEgNLyuzI/hbdU5fuMqM\nepJqM8Dp+Me87P0OnnyDtzOvEuposHYQBfyZtMqPX4D9qNb+Ua37dzuQ0A7KRbxSjrWrwzT3dGTR\nZPWJRRLxbQblZaxejarkxZuoYiGxTi+3OYmHOqP2IuF6ERJQ7fD+4FDKgLHM7lCSXCZBLePD09vA\n76ngUZrUe31YhsiWMECvIHKOawxJS7wVeIGwWebV0vdZ8vSzoIzQwOBxc5QFc4yCN8Sa2oufIsMs\nEmKPECW81NBooQtNFKVNSCwSlvYIUCbdSHG3fJr+1AqVmo/tBymUMYu2rpIfiOLtL6L4oOaEwBLA\nAhwouiH2pDARI8+53A2Oluf4c+Nn2Gx1k6hkSeW3GY6v0juwRV4M0zjqwfrHKk5CZMub4uY7F0ge\n3WE12s+8PM783CQ2IjlnnWazk5IbpKr7UIQ2omjTJW5RIojrijwXeBtcUOQ2YSnHWm6Ah/mjWD1Q\nlMJUtSCjYgKt0sFifpRXPW8w4plDpsXS5hglJ4iaavPK/beJFwtkzsZYrSb5w/d/mbWFfvxGma3u\nPjwnGniCNXxChUijRNCtYPkrnJGvsygMMtueZP3mIOgugyeXcRCp46FAB82cTistsCyNovc0GEvO\n8jPeb5Ctd3LNnKTn6CpHu+7wtYMo4EOHPkMOJLQ7lDw+9TGXbz5PfjaGIdXIjHQRjBeJSTvoXU12\niZGhk12irNHLd3mZ1/grptwHyKZFzomySYoSQRJk8XmrLB4dplLzI644eOw6cXZIaZtYo/ujO+fE\nceKCzkXnCp9z3+SWcJKIWeKV8lv8lvJf8UiZxEeV+dYYy84gbtQlq0dJEOUpPkRnf9xokm1i7BIT\ndxFUlyY6EjbdbLHcHOVm5QI/NfAn7C1FuPP+WSLxHK5PgOfBO1BFaLnUfUFcWQABUMGSFGwkDBpc\nyl9BT9v8accvUm110J3bYeL+IsfG79Hukln1dlM77cE9vX9w5fUbr/Hmt1+h1amzGu/ndfWLZBd6\nCJlFgu4btFoJbEeiqenUBB8mMhHy7BDHkUW+1PEtYuziIrJHmPX8IPOPpwhFslheEdewqYkedmsB\nHq4f5zciv8V07A7ve59gPT3AhtlDsGuPs4/u0rWbYfXJFCvVFI8//DK8CYRg7dwgyYk0pzpuMGwt\nE65XEFSbelChjxVqeLhvHqd8PYQRbBA4WWaH2Kf78iLUBCobIR6WTzAVvs3Robu84LzF/1r9H3jD\n+gJPHn+PS+qHh6F96MeO4LruD3cBQfjhLnDox57ruj+SISSHtX3oh+3vqu0femgfOnTo0KF/OOKP\n+hc4dOjQoUN/f4ehfejQoUP/ATkM7UOHDh36D8gPNbQFQXhJEIQ5QRAeC4Lw3/2Q10oJgvCuIAgP\nBUGYEQThv/j08bAgCG8KgjAvCML3BUH4odwGKwiCKAjCbUEQXj+odf/Pds7mpYoojMPPL0yioqxF\niol9EH0gVLjJclFUUBDUNomofYQURNamvyBCqE2LIiRa9KlBQUnrwCiJUiMS0gyNCIJayttiDnQL\nW+U5c8d5Hxi451zu/d137sPLzJy5V9JSSbclDYe6tyWs95SkN5JeS7opqTZVdjWQyu0yeh1ycnG7\nCF5Ha9qS5gGXgX1AC9AhaWOsPLI7oE+bWQuwHTgR8rqAfjPbADwDzkXK7wSGKsYpcruBR2a2CdgC\njKTIldQInARazWwz2a2jHSmyq4HEbpfRa8jB7cJ4bWZRNqANeFwx7gLOxsqbIf8BsJfsy64Pcw3A\nSISsJuApsAvoC3NRc4ElwIcZ5lPU2wh8BJaRid2Xal9Xw5an23Pd6/C+ubhdFK9jXh5ZCYxXjD+F\nuehIWg1sBZ6T7ewpADObBFZEiLwEnAEq75+MnbsG+Crpejh9vSppYYJczOwzcBEYAyaA72bWnyK7\nSsjF7ZJ4DTm5XRSv59xCpKTFwB2g08x+8KdwzDD+37wDwJSZDZL93vFfzPYN8TVAK3DFzFqBn2RH\nfFHrBZBUBxwCVpEdnSySdCRFdlkpkdeQk9tF8Tpm054AmivGTWEuGpJqyMTuMbPeMD0lqT483wB8\nmeXYduCgpFHgFrBbUg8wGTn3EzBuZi/C+C6Z6LHrheyUcdTMvpnZNHAf2JEouxpI6nbJvIb83C6E\n1zGb9gCwTtIqSbXAYbJrRDG5BgyZWXfFXB9wPDw+BvT+/aL/wczOm1mzma0lq/GZmR0FHkbOnQLG\nJa0PU3uAt0SuNzAGtElaIEkheyhRdjWQ2u3SeB2y83K7GF7HvGAO7AfeAe+BrshZ7cA0MAi8Al6G\n/OVAf/gcT4C6iJ9hJ78XbKLnkq2qD4Sa7wFLU9ULXACGgdfADWB+yn2d95bK7TJ6HXJycbsIXvt/\njziO4xSIObcQ6TiOM5fxpu04jlMgvGk7juMUCG/ajuM4BcKbtuM4ToHwpu04jlMgvGk7juMUiF8H\n87qEMGb9LAAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW0AAAC4CAYAAAAohb0KAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3WmsZOlh3vf/2U+d2vft7nt3316nl+nZOTMckkOKpGQt\npGzRUuIYMZIACQzEQQDHdpAgH2METpTEjiTTkkXJsiWK1JAcLsPZe++evn27775vte/r2fLhEoGB\nMLAgkj3NqH5AfbgHBbznFh48VfXWe94juK7LwMDAwMDPB/HjPoGBgYGBgb+8QWkPDAwM/BwZlPbA\nwMDAz5FBaQ8MDAz8HBmU9sDAwMDPkUFpDwwMDPwc+YlKWxCETwuCsCQIwoogCP/gp3VSAwMft0G2\nB55Uwl91nbYgCCKwArwCHAA3gS+5rrv00zu9gYHHb5DtgSfZT/JJ+zKw6rrutuu6JvA14As/ndMa\nGPhYDbI98MT6SUo7C+z+e3/v/ejYwMDPu0G2B55Y8s96AEEQBtfJD/xMua4rfBzjDrI98LP247L9\nk5T2PjDy7/099KNj/y/D//Xf4szf/yI3ms9gGjJeuUbxjzL0DjwQFOAioAL7LvEre0SGiwTEGpv7\nE5R2E7g7CgRFvJk6Y3Mr5N/KUPggDT0BAgJi2kY/2+HLI/+KL0b/DX9hfo73F15i4b/7Onz5H8ND\n4D2Q/0GLZ6++y3+s/i7/7Bv/JXed8xifq9P7p176BzrOb0nMj99jJrpIXMozKuzQ6+t8tfybHKwN\n07+n4/5QRLjsEP2VIr+a+gMCnip5J0GlEWHtaJaF7aegDbFv/j2+8n9m+O7XPsty6ST9pzWSo3vI\nap/DXJbz+m1G/FuUghEmpQ2S5NhjCBGbbsvDWwufYiS6xfzYPd7MfwpEGA1u0dM0HEkEFw6qWUTB\nIRPcI0KZUXbY/ye/y+v/+AIN/OwwwhB7SNh8yFVCVDnJQ17mB6wxxXfN1/hu8TOgO2TCu8hYzLDC\nJW6S5pDN3jjfqn+Gpc0zFBpJLFkim9lG3HXY/VcTiPMOcsBCud+n/+7/hPrUf0s/osIk4APzmoob\nF9HOdRg7t0rTDrC/O4qw6IAC7rgIaRN/skoieoS338ZBoqoGqW7FaS/4ca5J/N0v/DM+c+UbBKmz\n3RpjxZ5hxTvN/cIFVtPzP0GEf/Jswz/6WYz/l/BD4KW/RuN+nGN/XOP+kx979Ccp7ZvAlCAIo8Ah\n8CXgyz/uiblHGW5+4yrqq21ORVYYdzb4znO/wMGbw/AGEAYc4LtQ9UexgyJCyMH8vgfyEtLrXZwj\nFack0bYN3LMOsreNddOAnoDXbfJU/Dpi0OT7/Vd5Z+cVtncmoA9kHAgBQRHb9XBv5Qr/I6McTCax\nEGk+DOP/bBWP26LairORn8J0Va7E3uUj+SwN2c985D6eEy3W49P0pw2MVAsjVeWhOoeLQLETo/yt\nJPXlMDQABbo1nUVhnvCrRcb3VlnZPElZjCOILs4jleXNeTp+H09/5V2CoSp1AhySAgQcXUA92aIq\n+1nonaH5UZheV6eb8jNyYoNT4QXOcJ9rvqfZE4YwUdhxR+mj4bpePuQqOl1e5w0S5Glj0EXnI87y\nJq/RwUMPja6kkYgcEBDrTLBOln2mWGOaVZp4KawlufuDK4RfKJGZ3KToxKm8EcMqKLh/QyQymSMT\n2mX0pW3W3GXG/4vvsipPIXpcnJLE9uIUvQce+gsqO2sT2FkZIeTgebGO05Tp7vpAldENk0SkwM72\nJJJgMT21xF6qQ76aoX43yp44xHs8R5E4a7fnODzKIH+qQzui/QTx/elke2Dgcfsrl7brurYgCP85\n8CbHc+P/l+u6j37cc/u2h6KbIHCtQslJ4HH7jD+1jjrVZ2to6vhTdgtwwWzptOoByrpJL6Tj9kXc\nikTIVyEUqBCUakxG10GCJWGe0m4CqytTykVx9VmUUB/F6ONL12nFbEKjReyuQsOK4PYk2g2Do6E4\nXdODgoVPaeLJNDGkNmMH2xwoGfK9GA9Xz9C0fHQdnahQIhYrER0usRsZQ9V7hDwlemiUc1FyWxkU\nr4WUtMAC/NBzdJbvnSI6lmd4fJtTzkNudy+zXRyHPWhpXgrpGIdSGi8t/NTx00Sni2i7rNXmKC/H\nqa1E6fYMzIiGFVUo9mI0+z4k1UJWLKKUSHPIkZsiSok6FQzaNPBTIM6ItYvUc9lsTmN4u0R9RVaY\nQcDFFiVUrUeYMmkOMWizWxll6WCeRsnPg/unqV6LIo1ZiLqN3VHob3gIUePC6Vs04h4Uo0eYEp5Y\nG3+mjrmmY1YU3IaIExRBBbci0XF9aIE2gVQFqy1h78mwBgRBlBxk16JX0ulXNPKlDK14EEtTcOdt\nVowZCkcxKkdRCp04ba8Xz1EHX6r2V43vTy3bAwOP2080p+267reB2f/Q88QXn0cat6n9XpTqapwN\nzyyvD/8Z+miXrecmIQ5owAkBHIF+SadsRJCeElCPTPoPNMIXy2SndzCkFk9xm0C0Tucpg67sobiQ\nYuHmGaJWnuyVXYZSO8jBLo0vXWBoeJtWOUCjGEY4cvGrNYZn19m6PYNtycTPHCJqNkk5x8WZW7xX\nf557Bxe4ff9p3LoIJmwp8JmLX+fp9Hu8pz9H39XwWG0aboDOto/WrRAzn3tAd9ZD/XoYImD2P8nu\nrXFsQ2JicoNfe+prNG/7OKhlcG0BLli0z2osGvMkyDPEHgnyRCij9k1u7jxD8ds+zO8r2C/JkHQg\nAnknwaY5Tkbdp0qQOEVe4B32xSw+mqifaFNghwXnNG87L5LoF/E0+7yde4XXEm9w1fiA37f+FpLo\nEJbLuAjIWKj0KBPhduEKP7z9SeQ1E3nHwqi2qG5HcRwRqWkj9V1SyQM+kXqT98VnyfWTdBSd8PPz\n1MphSjcSNPoBXFWEKGjTHbRGj/4JFd98lUCkTPM7EeQHYFUsTEUE2aVb9GDXJeo7YRbvh+EUMGbD\nZZM1phAPQL1n48w6OGmob4XxCq2fJL4/lWx/fMb+mo37cY79cY374/3Mf4gESP7qFLHWA9aPZmgn\n/HQ/qfPOw5cxywrkOJ49HOJ4imQP3J6AnZQ55V9AcW3uFS5x2BzG2leYzSzyoXSVSi3KzsMJGreD\ncLcHi7uM9x5w5uI+H5ZeQJItXvxMjoj8EVvWFJv2DMbZOjOJR7zGt/mT/K+zfHiC3cIEz5//IZeG\nrzHPAx7cPkd/2cCNCMffACQgBj5/E7/T4KiT4qA1jNCSsPoy3boHMXBc+s2qn/U8EAXP5y8TCu/T\naAa4s3sZZ1SgM60wm16g11Mp7KQRHriMX9mkZ2gscoodRghQJ64XePnkdziMZVl9ZZrt705iNmU8\nIw00rYuq9GnjZZZlopTpoqNgUiJK+6Xf4ogU+V6KzcI0nYCfYKiMY1h8qF7mQfcE65tzjIQ3CWUq\nCLgckcJEIUwFU1KQgxbTn3/EmLZBpn/Ae+HnqOhhEuRxLwnIqsnbyotsbUxhd2Wqs2EKc1+iWEkQ\nfjWPaPap9QMgwFXhHS7L11mInmbXl8VSJP7uc/8r6lmTZXOWteQkh7ezLP/OPO1P+mAGMDl+E+8f\n50dULKKZEmfiC2y0p9ksTUJPoHwYfxzxfUKN/TUb9+Mc++Ma98d7LKU96t2iWE/gpCVQwHZkcmsZ\n6AK6e/w1OQYYwCPgIxG3pyB/wiSYqjE6uU5H9ODYIgc7w1SMMOV6hN4dL25NglQPmhrZcJ5L3KQg\np2krHoJqDT8NvEYDb7pOLJsj7d8n7RwSSRfQSuO0r/mJZYsEhurcd85Q8MSQEibe4Qa9Qw9mS0UZ\n6VEP+dgThuiLKq4sYEsSzWoARwFjpontFXBNF2WqjSVpSKKFPtTCOlKomgFutC8TMcrowRYWAjEr\nT6xZ4rJ4nQJx1q0pdlujhNQyksfifPguSrhPOROi2IjTVPzY2zLmkko/qWG9KJOggEGbQ9J08HDU\nSPNwfx5/qobksQmqVQ6UFDXNywltkRIRKt0Qc/pDgkqFnqvSsHx0bIOqG+JZ9X1GglvUJoMER8t4\n/Q18dg3pgY3bEmHeob/moXEU5KAwTL0cQnYctqwpAlqD0cAmTtrFLCnUtkKwBNrJLv7LNRS6ZNkj\nToGh5A6dpIHkWFh1la7koTui4x+roUyauEC9EKKHiiRbnNdvc1J7RFwvUC8E2c6P4dwR6Xk9jyO+\nAwNPlMdS2iONPa6VXoRLwA5wF+iBkHEQpxycD0RcnwjPclzaSyLcEymF4+ivdzk5eZ+m6CVfTLF+\n4wS9kIbbE+ERyDMm8ksOjpMkPuxwUnpI16+zLM6y72ZRsHBDLoFAiaR4iNduUTXD6KeaBNtFrG8q\nGPU2BSvGV7u/SWPOh3GqRsxboHwnSeMohD7SYC+YoSuqyIZFxthF8MD23jT9oIwy06ashTH9Ct54\nle6tAGLTBgGC6SKdjsFRNY0oOBhyiwZ+Rqd3OMc9nuYa7/ACeTPBYW4EM6SS0HPIWHiENoavhe+L\nNdpLBq13wvA7NuErVZwXRGQsuo7OijNDV9LYL41w7/1LzD29wOTMChPJNbbcMWxb4qrwIZvCOBU9\nxOuTb3BImpv2JSq9MOVehIDdJBHKMx1bIRgrs8o0RWJYtkz1vTg1IYIz4dK8HqH3yIOgu8gZG9Nw\n2Nye4Zee+SPmR+5yh6fI1TK4Cyr8Hhz+jSEWnjrNkZjijLBwPJVDhhVmWHJm2cxP0RnxEPzvC6Tl\nQwyxjYnCVncaqxNGlk0+pb/J8/o7rDCL319FljrY7wqIcQfzcQR4YOAJ8lhK+70/fvH4GjMV0AEP\n4IfoyQKZ53bYOpqmboUgyPHyPxHYhvw/zVK/FUH5Sp/wUAEj0GT64kMOVocp7SVgAp6Zf5enTt5g\n383S8Hj431v/KSvvnyIUKzN6foP7nTPs1saoVSK4GYlSLsHtd69S9MTwBRt85u//OatDkxztPkv1\nZhwrraCM1gnoDZgScZPQafmoyDHEgI0LjLHNiLZL6ESVzfwUhfsJWnNVjGCLrLZP6NRDeqLOPmki\nlImpRabDqxySpmn6CSk1cr0k79rPU/MEEQSXUXuHg9Y4Dd1P1Q2RFPKMsIvaNNl4c5au4IHLJngk\nnKxMB52/aL1OJR+jvhlFnuvQdTy4isju4gR2TUF96h75UpqjVppiIsakscYp5SFBaoDAnLhMV9dZ\nbc5hVXRS3hx+tcYhGVIc0UVHEAWEMQdrUaPxP8QQrlj4f7WMobc5r98hIRU4spJEIzma+GjhxfQq\ncMpF/G967ARHYBM+n/13WB6R7/Aa06wyxTphsYaUcTEFmXFlA1mwyFlJ7nfOoCVaRKsWpcU4P5h+\nlbXsFGUibDgTKCN9kv8wzwX9Dl///ceR4IGBJ8djKe1SP0IwWUQQoKfqdBQvxFyCJ8pMDa+QD6Sp\nl0LQ5PinHxPIQbvno73lg++B/EoPeaqP5co4RREOBTDA9EvYfkjLe6yYs6xU5wjLdZyuzM7uONvN\nCepOEF3tkhDzeOUWpsfDkZCGIKQu7nNonaNwlMDVwLVE1I7FqLvDjjNKoZfGrGtYkooTkBBx0ekS\nkipMRlZpVQLkylm8ZpuYUECWTJyIhAtEKKNgHq+6yImIYRfJsOl0PJS7UYoIKLp5vHJDajIRWMX2\nCASpYSHT6AbYbY7Rl1WCoSq+yRpCXEQ3e2yvTrDVH6fRDSCrDkLXRhYsohN5GnU/h1Yao1OnZEcR\nBJeUcESWfQLU2CeLiklaOORITtLQQtQJ8+jdU4i6zfboGP5kjbhRwON2uVfp4OxK9Pc9yKMdnKSJ\n45XouTqC4pJN72JLEgdkKRHF768zO76IfKpHuRUj301QtGP0bZmiFOMES1h9hVw/jaZ38cl9vDTp\nYCDiEBOKpH2HKFgUiylE+Xje3ULG3NFwKzLCGQfTVR5HfAcGniiPpbQDz1ZJntxDOOFSSiTpegzc\nEza+bJ2ss4fH7EIV2HThhHt8VisCPCsc/xD4r8HMKFTTEQ4fjWJvylBwIQTXG1fYaI3wSf93qTWj\n1JtRvvzMH7B+MMMf3v4KNCE4WSL77CYvum8xFthCnHT4l8XfokiMihjGrzVJD+/jplyau2F8vSYn\nWaS0k6S+GgUNVF8fg+Ov7i28lNwoKXIcigUkxSYr7JNx97CQuWFfxnUFTsoP2WaMncIY+feynLh6\nn8hImcXqPKalYagt+q5KhRAhT5Wrk+8gYSPicEiaa83n+F7j0wQ/mWfcWGGKdcSow8bSNNffeR4M\n0Cba+J8t0diJorpdJp5ZYqs2RqGd4G7rHB5/h7PJj/h7yv9GWzBYZpbrXGGSDSbddXy0SAf30Nod\nfv+3f5OaEEH75S4vvfQm454NZu0V3r3+Ciy6cA6s2zrWiofWPLxlZMlkdnk58G0qWphD0hy6aeb8\nS5wMPETB5L7/DHfsC/yB+euM2tuck+7ho8m9zkX+qPw3OZG8T1QusMMIdYL4lCYvKO+QZR9fqEH/\nokqOJHU3iIhD7Wacw+URihmH7/U+9TjiOzDwRHkspe2MinSbHqrvxkjoOeavLnDfM8/+xhDfuvYF\n8ttJ2HQQ3re59A+vw2mBm7tXce8LUAOGIBnM4bUaFJpZPOeaKCf71L8bxX6k0PSFWZyfp5yP09tU\nWQtNc9jNoLRNpucfIo2YlN0gb/VeIixUCalVPIE2WfZo4GecTcaFTVblaZZ357HKMo0xPz1ZhR5w\nH4aMPc7N3KJIjBhFopS57T7FI88JrITMmjrFIUlcR2BM3KKz5eXGB8/RwosW7XLmudv8SvyPOGve\np9v2cct/nrvBs2yI4wi4uIiUiRKlRJIcOl1m/Q+Ja3kO1CQnWeRlfkCOFJFMhd7LGptH0zSKAep/\nGGP4/Dax0Tw+ockL3ndxdYF9MvQlBV3u8DYv4qWNhUyUEh083G+f5cbCsxStOH1XpX3SBwpYPpmH\n7gmwbPqSRv1CAG2mQ/D5ErVchF7fezyVVYfyUZR3v/kKVkOi0/LQ7hk8GDXIz2YZmtqk6fESkir4\nhSanxEXOc5cRdigYCUbkdQTVJkaRi9ykQQAfTSZZx0uL1c4M/7b4ZWrlEJYtQxRKRgwnJtFb85Ea\nOvz/ukxxYOD/tx5LafdsjeZaALctkIjnmRteZKM9yvbWBMU/TYDdArMBigdvsIF3osX0C8sc1jM0\nVoLgQG/Lg6Q4uGURYiB4XGiB1u+huBZ7uRG6TQ+oLgUxjurtciZzB99oFTMq4bhQIE6VECly2HkF\nuy6x6/hIDuWJh/OMSVsc6Vmqngjbwhj+YJ2z2dtUq2EU2aRajVLrRwgZdQTDYbs/SlkL40vUyGp7\nCNgUhARTwho1IcxN5yq9sgfd0yU7uoMmdnG6ArreQREtNLtPgjxJcig9k+v5qzR9ftRwn2F2mdLW\nEDWH7/MKfpokyRGmSjPg477vNH61ioiDVu+SMfYIect08GCoLUTXQbFjKKKJJvaoEMZEQcSlh07e\nTlI2o+ScJDU7hGkrOI6M6LOQsn26uk6JKHtilt5pBU1sEzxbpvORj17NA0kHv7eBeOiy83AMNy9C\n14WwQ/euTm3VT+dZDTcsYGkywnAD3dPF43ZYNyfZ6Y8gWC6CyvH/QI8xFpAxqRECXEpHMRbfOE2n\n74UocN4lns4zEtiioMdRfL3HEd+BgSfKYynt5qofa0tj6gsPyWR2MNw2Tl/E2hHgnS6wBVd03L8z\nw8b4JFOJZT798td5c+xzLP0gCL8Nq//uBEy6uMMifUk9XtPdg9hoieBshZ1rk1hREd/FMn2fzLng\nPcaGt/hz8Qs4SJwRPuKRdgILhZBb5cGHF8g9SIMJ3l9u4z4FYSr4ztQ4sJPc0c/z6ey3+Vzm69x9\n7gK3Slf4YPsF3DI8PfQe6kSPZtuHJPcZTW3xG3wVG4nvCa9yikVyY0kSw3sUrmeRXAdd6PLnwucp\nemI0Mn5quRjRQoUvZP8NT4sfYDVUrn34IntTo/jCDX6BbzDLMj00/oLPss4ki8xziZsEqZETEniH\naiSz+ySezuMTm1jItDF4yEkajp9cP0lKOWJKrDHGNj00jkixziR7vSFqbpDoxRKC1aeyHcZc8CKf\nMvHOV0ir+4TEKm0MmLNQaKPSR3zkQN1BmOiRGdpEj5o83D6HaWiQcuFTFvwfFr3fFdhYnoG4iJi0\nqP9agMRQnqhb4s9aX2SrMonQkJkbX6CihPiAZ/g7/As6ePgqX2GCDWqPQlj/CJhyj3e2fsrm1Kl7\nDPu2edt9iZaoP474Dgw8UR5LaXu8bYzLLY5uZRFGoXQ+iu7tEDlTpfSVBPSHiZ8uMvnSu+zXh1la\nnac8EiH/ZgL+rA+7LYzXTcK/0CDly1ExQlTdEMKEi2UrlJYSRCfytOpe2jdCrKTmkdMu/YjGQWEY\nn9zEG2zT2Q+Q66Uoe1J45luMTG5Qd/y0Rg2qhBhlm3FtA8cV6Aka68IkB3aGrf4YhwcZ7F0RYdii\nFfRQEwKkvQdMiWvMCUsEqNPAj58GO4zQFTTOCve4pXhpOH5WmaK8laC+HcbcUzDrGka0y+HrKfaU\nYRAFTK/CnLrMVT5kjSkOyOAiYHK8WuQdnucOF9jMT3C4PIrwoYse71D9cojTygJORWJjcxazp2Lq\nEt2szOnAfa4qH2Ijs8YUbQw+wQ9QVZO2ZLAnZ8lLSfLpBAf/2TAt00f/gZfodJlkKIfk2gzrO/RR\niVOg0khQWwjjHmkcTYyiZPsoV9u4u2CVVFiSST1ziP90jZ2jaXp+Azst014L8OD+BQ7KYxzFRrDQ\nUXsmw4ldZgKPCFPhiDSHpOmhcWf3MpVyFHtOI/S5EuqrXRpxH6rWRbSgU/Az4V+j8DgCPDDwBHks\npS1YIHtM5K5LtRShdhRAj7RRUhack/FENXzTYIw2kNYs2qafnJugU9WhA6QcxEkLZa6P4avjlWpk\nxW3UqT6V1QSVfAQ128YQWpgFHdF0sGyZpusjaNXRhQ5tDDSzh1AXOawMcXLyHt5oHYkYXhpI2NQJ\nkJRzeGlRIspuboSD6hA1I4jfajHq2aAeNzD8TTT6qK6F1HNxuxKmR6UtG9QI0sbAtiScvkwgUEMW\n+8iCBaaAVVLoPjCgKNId1tl9dZggVXS1j5rpkg3ukmWfW1zEQcDjdKm2ItQbQfa6o2ipDuVunEYh\nAlvQ7Pept73EcmUoiBSKaeyWjBTq4cnUEEzoCTpNxYctSsSdAi+Y7xGTirQ0g1tcZIMJPMEOjVf9\niEc2vv0uimOh0SMilNHkLrVGmPJhFEeRECI2ctci2i4RlQqIM322tGly1hCsS0iXQHnBQfgQdG8b\nLdml19LIb6Q4ephFf7GNFuqCBKJwvIyy63q40b3CvjlMxY7SbAdxoyKzn10m+9o2yrkuW+YYpq1x\n1M0gmQ6aNZgeGfjr57GUdnvfh7xu8/ynfkChmeLOtYv4ny1jNVTEQ5vESwc4kw7XW1cYGt8jpe6h\nSj2WXjXoZP2QC9PUXbrLYcqzYT7h+wFXxOuEqFIcj7E+OsVN+SKZyX1Ojj1CEXsoooUkWownN9kT\nsiwJc4yNrmJILa7fex4t28NLiy46J3mIQYtbPMUVrnOKh5SIUrmZpLSYwXlOYG78NvNn73FXPs+U\nuMaktcG75VfYbo6zYF9gfHiThs/LXc4TpUS752OtPM189j7zxh3SwhGPJk6wIpxgb38C+0CkW9TZ\nsUcQsQkbFeLzB+ji8RvGIWm8NPGYXbZ2psk9yqDudrn6xbdRgjZbk7OQAkeV6DYN7vzJFciL2M9J\nYILu9kj7D3mn+xLvt19gLrrIGfE+l+xbXKzfR9Z7FPxhZlnGQaSFF4/aITJUYjq9xp48RJUQZ7jP\nCRrc27nAn/3bX8N6BuRXOvhDdX5R/mMuy9epyGG+5vsNcp4hqMLh4TBHqSz2vEQ2sk0ysk/OTVHJ\nx+jfMUicOKA3JlNqxVgLTrBPmpbrpVhK0yoHsToSJ8buc/qVe5x94SOGtV36oso17Wk+PHyB3fYo\n2ewmO2QeR3wHBp4oj6W0P3Xpm9zoX6Ye9zMU3GJE3+amdIFCOoH2qRa1Rhh3x8XJilTcMLJjMSxV\nkB0LT7RF4uwh5Z04/kKDV0++wVXpA0JUeJuXaMh+Wnjpo3JABhOFpJQjKeTwdZvcu3kB1wczZ1ZY\n2T3B9sokbIH/ZIMxNplhhS46m0xwRJp3Ci9zu3aVrq0jpmyuJt+hn1VxQy4f2efYezRGN+ylOBwj\nGsgz5NlhyN0lq+6xWD1N/miIuh3Fb9Q5FXuAT2/SlP3soLJ/f4R2wUfyuV3ac15UpceYb5s5lgmK\nVUxRYas3xmZnHNXTpyMZbMljZFPbzCv3iafzrLw/y05xHLou4nMmaqaD19+gcRCh/5EOIkRfzOEZ\nblO+k6S56yeilBn+1C74XZbEWTpeL5Js0UWjQog8CWxBYowtIlKZDAcsl05xIMnkIkk2mGDJOkG/\npUHfgaJAezFI4VSC7ZFRDshQfhCBW0AYHF3CMDtMpZcw/A1cBfzU6c556XT8lKtx4sUjRlJ3ONrP\nkmsMYToKbhyI96GlMGGsc067x4y2zBbjLO6f5vb3L7PXHEGMO0wkNmkZOluPI8ADA0+Qx1La83Mf\nceAk0aUOfquBz20h7ApIQRvflQrd+36smgohqLXCCCIE/XXiQoFIsoxnvoFsWsTqJc4qH+E9arHf\nGOZG5mmCngpp+ZA0h+yWhnlYmccdEvEYHVxL5MHuGQLhOiOnNzmsDlFsxwl5y2hyB8U18bgdckKS\nAzNDuRljpzCFXVfxyC0uD3/AyeQCJgoL5hkWC2do3Q9iT8h4R+uc9C0wwQYj7JDkiIe1U5hNlXbb\nj1R3Gett0owbuH6BiFLGrsvItsXJkw/YkYbpORoxtcAwu0QokyPFVmeCvfoIc/IjFL+J44fJ6Cqz\n0WWS6Rx3b1zk6F4W+i7iFRPF20OVTETNAdVBcBz0TBM5bFK9PoS/1iCRzKE6fY5aGVb7Afb9WWJy\nkQB1APpoNPGR5oAADUxHoV4M0Va9HEbStDFoez2Ex4q0PD76JY3uDZVl+QTNrsxRXiZ3wzjeouAZ\nwAQl3yeeKYUbAAAgAElEQVQ5doBXb9JDO56bH9ERDAHjoEO4XyWsVCh20/SLHlpNHx6ngSfZRo73\nMbQmtiNx5KRZEWdYaJ9mcfUMimySDe3gd+tE5cGM9sBfP4+ltAtijE+IbxGiyv3F8/zpG1+ibRtE\nL+cY++IW5jmFYi7J9tIU7jYULYNaIsGX579KPHvE9+VXmDizQsLJs6WN8vU3f4nFhTM0fsPgFyf+\nhNcCb1Iiwnfvvc57119E/Q2T3qhGU/HRm9Y4NFJ8IDxDORYmFCkxE1rEMkQW3DPsmUMk5BxuXaL5\nUYS+puKLNhgfXial7xOmjEGb9eYszcMQ7obEZHCN1/kmM6wQo4ROFwcRLdIh6jukfJSi+FGCa197\nHucXXJ47/w7/SeRfIFyBTWecl7Xv873+qyw7s7RcL5Ygo9IjSglvq0t7L8iDowtMTzzi7LnbjLNJ\nmAp9VcU5/6Pbeq6B5LEwTY18MYxzUUI45yA93aGe8MGRiJMXOfXsR4xe2uCe7xz7K6OIBXj1/Lc4\n4XvIBe6iYPIXfJY7nGeIPWoEWXDPUK5ECOg1ykSYY4ns6AHqr/dYbJ8iv5qGnsK9Oxd58GYE+8++\njTnWhLOAAmxCf13l4FSGc4G7zLHEbZ5C8/U44XnAVHqdHXeE9+1nGJ3cRvd1eLh8lu77PvzJBnO/\n8pAtaYxF+xTVTpAJbRNPooPwBZexyDqj8XWOjCQzLD+O+A4MPFEeS2nf/MGzhLJVIiN52sNeJl5e\nwe82sLIiLdGLobfxR2vEnEPOhT8i5RwheF3UWI+11jQHN0apj4Uw0wo+oUldDFKqx+F7Lq2X/NQv\n+hEAQXDpWR7W9ufY64zgWgJ6rE2vp7F7bZzOoRct2cMeFtl7b5S248V+Bp4RPmDMs8Pi+Bl2lWHq\nXh+Gp3l8hZ+ZQnEtNpsTiLaL//kCDNsckMFBIkAd0XJ4tHOadXWCULaCE5NwTsp41RYnxx9wyXMd\ncIl7cuw3s7y19BqtmJdkOIctSHTR6aLTQ8XSRPRwk5OBR0xGV4hRJEeSDWeCKmGaMx7SoW3iZ/O4\noy5VOcwuE5AVCKo1xoeWialFtESf9it+5LE+9YCPSdZIRItYHhVV7bHJBHk3QdmNsipM4Qqg0sNL\nk1mWOFJGmC5v8Dff/2Nuzl2gEg1xMviAoFblaCJN4TMp8u00jYUsiM+DMYSUMjHmG/TDOv1djYO3\nRnCnFPYnR5EDPVLKEWGxTE0JcFjLUC3EkQQRSbRIzO5jhWQCRhWf1MQSZGTBQlBdpqVVBARu8QyK\np0/Kf8gsyyTI89uPI8ADA0+Qx1Laj74/hfaswERiibnhh1wZ+hC/0GBDmOAaTyPiYPhaxHxHnOMm\n4+4WLcfLB41neXR4CndXwo2IWEkZEwUnKUIKOBCoVCLsMIJODzcqoI722CuPILYdDL3JaHaNVslP\nbnMIyg59WaHSjHK4MIItiiSf2zv+gc57k9TEIQ+Y58hN4XVaLDlzLFlzVDth6MlEfEUy89uIhsUq\nMxyQJc0BUafMtdpVWrpBVtgm6K9hehXsCYkZ8REJMccqU3Qsg1bLz4PyOSYCK6TlPfqoNPHRxIeK\nScyTpxtXGVK38Ot1emjkSLLvZskJCfRUm+FMniF3j5Ido9vSQbbxJpvE9AJJPU/CyRMI1BGfsVlw\n56k7cU4LC1hxhTrHb3D7ZKi6IW5YV/CKLablFRwkQhRJiEUehc4w2tzi+f33uDV6nrIZwddtkdEP\n0cM9rL5CzQ3RcBJw/hKEBARPDzXYxRZlXFvCt9Gm7fWxm/aQdPfxCU16eCj6o/QtjUinStWK4A/X\nmBhbwRhrE3VLZN3942WOkkFNCjLBBragkJByRIUSWfZ5mmvUWqHHEd+BgSfKYyltVnbxXIhzxb7G\nJ53vcMm+RUmO4hca5EnQR6WFFwWLXUbYsCa4071A9U6CUK/Gy5/8NicCD1GUPvc4T2vKe7z3tgK1\n4QB7DOGhgzrXZjLxiPXFObRgh6GTm2S1fXJ2FuZB0vp08LC1PosZUtEDLRCgSJxNJlhhhhJRkk6e\nL/W/xofyFb7pfJ53j14m4i8wM/SIMXWDAnG2GKeBn3Pc4/Py1zHnVA6EDAFqBKizbk3yrdZnqHsD\nJNQcKY542DhNjhT+M2UUvYeFhIN4vMkSDU6zwLhnkzWmeXPvs3T8GpFMnlG2GBZ3iYt54hSRsWhj\nsNUYY7c7DJLDTGYRQ2tzv38as+EhJNQ4EV2gYCewHJmGGqAqhCgSI0T1eC7e2eF26yJD6h7Pye9z\nhwsomFyUbjE+sgrpPjescySNA3brw3xt/W8TnzzAORDY/b0JrNcEpPE+9i/psAHWoUL1+3GctEgm\nu89vXvrn+AN1dhnhjaUv8CB/Dr/T4Omr73I18j4YH/CW8xKKZHKBO7zED5lxV/BaTZalOZalGdaZ\nwkJG9No8M/dDJuR1plmlRpBvbH0R+N5jifDAwJPisZR26LLD+IkVxoxNfEKLpuhHFiwS5JllmSXm\nsJBR6bPHEE3RR1mJkB3a56T7kMuRG3RkjS17nEedE9T8fjwTdbx6C8Xo00UnTBXT0ijaCcyYxGjk\ngNOeBTYaM3TwMDe8QFI9oG+r7DbHsM9J+PQGWWEHC5ldhllhhiIxikKMt+UX2BezmJKMq7vUewGO\nSlmi8SKaenyZeYojhtlBE3tc8twgR5IWXlT6NEUfWW2fUi2OK8kkw3k+3XiTsFnFidrsyxlKRHER\n8NFEwqaPiiOKaGqPVPgASxNJs8+LvI0mdCkRo4dGnQA9NEa1LfxSgwY+LnlukJDyTFnDvNf6BB3L\nIByu8JRYpiV4WWaWtmvgCMdz4svuLKLgMKTtkZX2UTAZZxMJiw1hAkuTsDSJPHFC1DilP8BM6iT0\nQwqRGPtXh7k0eodEMs/2pQncEYFO0ctGfRq7rdCpeXg0d4Lp4DK+eoNeWaPeDdPRDB6+fZryRJTA\nhQrj7gYIcOimCbo1km6Ojug53oucGk9xmw4eupLOCc9DOnh4wDwqPUqR8OOI78DAE+WxlLbvqkby\n1AE6XcpEqAsBxL5LWzSOV1Ug0UdFcU2OnBSNTgCxBnNDi1wyrjPBOje5xIYzQa6XpCcq+L1VZvzL\n+KUGGn1CVDEbOgeFUQiaeMQ2wYMGe91RBJ/D+dR1pljDRSAT2qc/pKLTJU4eF4Ede4SV3hx1xY8o\nW5Tk4y1Nu65ONryNWfRglxU6YYOYWmCEHWZYJkKZPYaPd6WjyRZjNPAhyyZT0hrNUhjLVdFCPT5p\nf4/T1gI5IrzPMzziJA4iUUr4aHBImhpBqkqQeOIQD22G2OcMH6Fgsc0ouwzTwoshtHnKuEXNCfHA\nOk2sVWaod0DcKbGUP0NRiJEd22NSWafihvkd5z+ij4rXbtFvaqzKISxd4lnP+2SEA2wkRtjh0E1z\nhwvUCWAIbZr4CVNhyLuL31snQolNzwS3P3+B89JtRtxdRMVBzDq0uwbtZS/FlQT13SBvzb1MU/cy\nIWygyj08kSauXyT/VoqaEMR4qsaLwtv0UbnrnqdAnCMhxbY0Sp4EMhYTbLDDCC4CSXIscooVpmlj\nIKXtxxHfgYEnymMp7XozyCbjhKgywg661eMHh69hajLp9C5VQrgIOIjU2wGqD6LYb2hov2TiOd+h\nRpA4BS5IdwgFqtzduQwtgV+e/hP6kkqeBD6ayKZ5fFd3ZJY2zrC3NEHlhQip2X0cRI5IMcsyr/MG\nNhJtDEpE2GKMldYsa1tzCCmLUKyEILhUCOOTmvxX/v+ZmKdEz9E41FK4CHhpEaNEjiRrTHGKRWyk\nH31in6aJH50u3kSdFgbrwiRvp59lzR3jQEqj0yHNIUViZNnHT503+Cy7DNPATx8FPw1q/89rI5An\niYCLnwajbHGaBRa7Z/jD0t9m6+4M2lYPpyFSMuIMTe4QsmuMs0mSHBnxgAMy1Oohqu/EcYYhcjqP\nIbaJC3liFFlhlo/cszxw5wmJNRLk6eChg06BOA85SZgKsmBzWl7gUMiwVD3J/aWL+EcqZFM7fPrE\nN7i9c4XbK5eoLcRYdk7QHvaQubSNXyhjSipXstdp6D4eMUcb4/iTNDp3hAssM8sN9zInhEeMsMMa\nU7QwkLDx0eQs9/DS5E/5RRzExxHfgYEnymMp7c6Gl/J2glIyhqb3UMU+rheaspcVc4bmThDLVBBD\nDoIGydgRwdNNCLvsMkyOJA38FLoJdo/GaXT9+Dx1XEGgToBNZ5yV/gy2R+Dp7Hvk1CRBu0ZCynEv\ndo5m02D9/iyJ0SNcn0DL9GK1VWTJwheoIwsWGeWA6dAy+/YQ1XKMHVdE8fbwGw325CGG5D1mWcJH\nnRwp2hiYKFQIs8UYGl3Gyzs8fXSL8HCVmt+PIlgEteObDhSJ0dNVPPUO59YWiAQrEHHZMYZAdMmT\noEwYH01SHFEliIyNhw4+jleyPOQkOh0mWWeWOl08OJLAiLGFk5WwVJl+VwXZopNU2ZTGSHOARzh+\ngyiYcTquB3+2hj9SIyvuMCpsM2FvEHXK3JPO0xYMfDSJkUfGYpdhvBxvRhWgTgsfzbafWiHCcGQL\nWbKoG166oojs9Ah7K6hzHUaNdaSMjYXCVnWSTGAPv1LHsSQOallajhcBlwR5TGQOhAwN/BzVMtzd\nuUS5kWDdd4j/ZI1L8g1Odh+RKedZ8U9R0SMUamm6zuAekU8uiePbVEV+9DB+dMzm+OawpR89Ohzv\n/jbwl/UfLG1BEIaArwJJjl/df+667v8iCEIY+CNgFNgCftV13dqPHaRk094JYIVkurqGKwlMxZfY\ntMe51z5P+14Iq63BlMP4zAoT06tMTq/RwM8q0ziIFJwYR+0M+7vjyMkuoUSBbXn0eDmcO0GxH+Os\n/yMuxa/zoXWVifQmFy/eoNY1WNw4y9rSHHZUJGfE+U7/NRrlGBHKXBSvcdJZJCMdcG74Fv2iylpt\njiPbIC3tgAeu8TRx4XhKxKCNC1QJEaJKH5U+ClVCaPVVLq3dZca3TF6LsaMOE6VEjCJ3uIBKn1ir\nxPPL1xCHXRq6l4Be5Z54lnWmMFGZYpUTLB1PIxHAcUWiVpl9a4g9e5iwXmJEPt4pseJEUESTT/q+\nTfFcjIoUpIkPGmO4jsiOPMKIs0OKIxJCHp/VRFH6jF/YICYVj4+TI+EUiFplTFFFEU1GhW0ilFAc\ni67jQRN7eMU2U6yxzSi5bprVvTky8gHBcA0p1aOLxmEtQ1P2Ex6vMDK7gV9qsFWcYrcyRsgoE5Sr\nCP83e+8dJEt2nXf+0md577qrfb9+3s4b996YN4YYDAgQA4ACKRLEghR2RXJjRS1XXK4YsaFVrFHQ\niUtpV+SKAYoQQVIEMSAG4GCAwXhvnvft+7Wtrqou7yvN/lGd0zVPgAiC4NMMwBORUdWZeW9mZ5/+\n7snvfudcw+bc5nG6ukw8sM6gvIYg2swziY1Au6pjzahcWj/KpchhAuktDvvOM9xZwZdrk5diTAt7\nKW7EqeP9Wzn/98O3f3hNANWF6JZQAh28VHEZLaS6hdUAs6PQRcTGAwxgE8ZGAQxsSgi0EFlHo4qk\ndhHcYHlEmrJODS+diopVt6HTAOz/yr/re8u+m0jbAH7Ztu3zgiB4gTOCIDwN/CzwjG3bvyEIwq8C\n/xz4X75dB8c/9ibntWP4lCrDLBMjzxYR1lpD1PM+rCsyVEAAogN5xiMLHOAKV9hPnhgFwmSaSSpC\nAG1/lSl9hlF9kbwYxUeV+8UXcbsbBIQyXUMlkxnCpzeRoha7tDk6oxpr8SHaAYWYVGSv6xpvSveS\nyyZ5ff4+LhZuIxTeYvDUEgOBFWLeTbq2Qk6M0DDcfFD+BgI23+QR8kRR6RCmQIAyQ6xgIzDFNM2E\nm9+767N8dOtrFNej/N7oz7Ofq+8U+b/BKPlwjNp9XrJ6nKauMyHNkSNGFS8uGmj0VsjZzxVm2cUr\nxr380fpnWd9IUy/7uP3YafbErhMhz2RtGV+lTqei8nvpzzITmKSNTtq1xjDL3C68zV2t0+hWizVX\nmj3qddLKKl6xRpkeZdVFoSF5GBTX2BLDALhpUCHA0c5FPlb7Gq/47mReG6VGgAAVpvzXcR+os1gd\nJ78Zo6m5sddlzIybVt1PaShOcbzA4egZIoEsttciouaoWj6yQoLE5Cq1aoD8UgoGRNpemRuMECPH\nRHSWyftm+VbjR7he3EfxrTiX9x1CHjDYmBhgRR1is57AyMloqTqtv53//619+4fTRECBiRP4TvkY\n/ck5Pqx8jTtWzhB5tkz9RZvctMASMh1c2Oh0UTAQMLCxMBBp4qXJAcEgNmGj3StQetjD6fQxvt79\nUWb/0z6KL9bg6uv0IvO/n79w7K8Fbdu2M0Bm+3tNEIRrQBr4KHD/9mmfB17gOzi2MSQSNAqsN4fQ\n7Taap8Mk85SlIG9qd9L0Svi1AmNj84Q9eVro3GCEIVaY6CzQrek8Iz7INX03Xr1KUCwiCwYlggyw\nzqQwR0X2A9C2RbxaFUnp0hY0JqU5DK9Mx6syxiI+qnQFhVAgT33Zw9ZzMSq7fXTDAiExy6CyhosG\nJYLoZp2QXWQ31/G1GjQML0FXGf9aldTaJuHBAm3/OsP6GoJqUtb9mMoNQrUSVcFHnCxFgrTQ8VHB\nQx1Na5OJxzndPk7L1JmUZ4kKedJ4UTDwU0Ghi4DdWxxAaBPTsyiBLnXJQ1PRKdphuqgsySMk9Bzj\n5jzj8jxtZDzUmZN7JVhLBHi1cxK1axDUSwSlEk1c2Aj4qOKiN1/QLaiktrLcmX6TLU8EE4kmLgbE\nNQJKEUSbLSvKnDmJZJggghEQ0ewmqfYau7SrLAdGyVTTdLY03HYDv1pGEbpElRwBSgQoI1sr7BLn\nmBF3U+94aRa8rMXSRMhyxDpPYSWGIajsG7rMpDWN6DXJGSmiep6AXKbq9eGliqddQwp26G7+7di9\n74dv/3CYAkMx5CNJHog/Q3rlBtbTkKvXEFbdJM+sMSFdJJFbJLDawN2wkejFx93tT5veCGlsfxcA\njd7aFv46KGvAJZ3BDYU9hhv/6gLUmyS4ivKIzergCM9vPoR5YQNW89s9/3Da38jrBUEYBY4AbwAJ\n27Y3oef8giDEv1O7VQYIureY2dxD2QyieNo8yHN0dIVoNEdur8KQfoMP3PMkKwxt66BH+Ud8jgc6\nLxLK1+jGZBoevfdPSx0TCYneUlUDrLNKmjYaSBALr6MJDQqEGaSXqJElzt28TtNy8bT5AbzBMnE2\nKL8dRjvVwHO8jIfatpKjhoXEkLTKqL1ImlXG6yuE6lW2Ej6URRPvay2UuwysUYF6yMVFaS+D0hoP\n2s/TDbpxC03uN1/mBfEUN4RRgpQ4xlkGWaOFxmYrQd3w4FYb20DdwUTERxURiwXGKRAmIuXZH71C\nLephURzj7fbtiB2T3eo05/UjJPQsn4h9iXHmmbRn2MUs/5b/gdeEE4DNtHEAvdvml+zfxmPV6dga\nit0lJWbwiRXmmCS5kuPOi2cY/ZEFFj2jzNmTdG0Zr1xhPjBMjijrxgAXuofpthQUq0tQLrNLnWXC\nM8+QssyrvpO0gho1K0Q6ucRkZLo3SNFCtTtIXZtJcY6ksMG/bvwK9boXrdti3hrHR4lH7Kf5g8Vf\nZF7YhTddISFu4gtWWTxUYZ90mds4Q5reeqIFMYxruEL7W7Hv0e2/f779g2kCoCC7LDSPgVq2sMcj\nyD9xkJ86/Ifc+/LTdJ9ucWX5q2SXga/1Ws3RY6277AC0w1Zr2706U8cOiM/Z9GrWLIP9ZIsWlxjn\nElPAIL3KCN6P6bx696NcOHcYs9KBXI62D9p1GaMpAp1b8EzeO/Zdg/b26+OXgF/ajkpuJpq+I/HU\n/D/+Nbm2D7e7TuqhEIc/UH4nE9AtN0gdX2FMnGOSOXRaxLdleDcY5gn9IwQHq1gqHOASFiKTzDPO\nPFHyVPGTI8YE82yQ4pqxj5nNAwi6RTEa5j5eQqfNAOtcYT9rlWFm1g4ymF6COPAgdCMKifYmn9H+\niDJBqviYYB4Zg6BdImVm8FbrdEoqNyIjNA66cQ202KvPUvV6WfAMo0lNImYBqy3z7/R/zAvdB9jY\nHEALNdBdDTqovRVlthNyptwzbNgpzolHtxdQ8HKV/ezlGlHyvM7d6LQImwWezH2UmupB9TUoXE8Q\n1ivkp2JczN5GStzgwfizZIQkHup4rTo/Lf4pt3GWCxwm6KugWAZlMcCd7TM8Vv86csPkgm8/10JT\n3M5pdm9MY18Qad7t5hp7+Zr9ETbLKSbEOR4JPMUyw5SlAH6tgk+pYExrrD0+Qn08RGZ/mgMHzjMo\nr5IMZFg/kibmypJiHS811hlgprWHtZkRXvY3SQyvMxmYYZ/rMtaARMPrYpExqqKPoYOLJIUVDEHi\ngnmY9coQxbUYDw48z3pkgGd4mGf/XGflpddxR76FqxKg+j25/ffPt3tBuGOj29v73TTgEBMfLHLy\np89x/P98k8alv+TKb/qp+K7xdrGDQI+0UOgBs9DXWtzeZHqkhkBvGtKkB6/W9nGpr40D4mwf17d/\nvgzo/7ZD9wuv8anyZziYLyHd7uOFX76bVz5/hNkn/MCl7bt5v9vS9vZftu8KtAVBkOk59R/btv3E\n9u5NQRAStm1vCoKQBLLfqb32yX9OXY2ya/I0I97rVLjBW9zBtLGbquHFVmUqsp8MSXxUUeiyQYp1\nBtiUE/jlCsPWCqPmIqtiGrfQAAR81Lja3c/bnTsIdKoYmkRTdaEqbYrdEFcLB5EVkwl1jj3ada6z\nh7IVoNQOodVayJ4u7lMVtFQdj1DHTZM6Xrx2jf32FaqCFzoCvvUGW50I6/4URclPJ6xgBiTMqoQh\nS7QUFS8VTEtiU4qzII9QEAJE23lGhHnE7UzPIWOVQ/XL7NuaZiscwwqKdJGR6RKkTIgim40U2XKK\nc5mjeMU6cW+WDTWF6moRETYZd80TVEusk8RSoCPI70TlDdxcFA6i08JLDQGbEXUJPxUELJLmJoes\ny9RkN1XJhY3FIGsEEwVqB1xUvb10+iYuwlIB3zb3XSKAJYgkpE0CUolKJ8TCDTdWWgSXTVpYpSvK\ntDWVg9oFCkaYjXaKPcp1ajU/C8VdbIkxUEwqgodhdRm1Y7BeT+N1lWk0PLxZ3o3cMoi6coQpMCvs\noim5kPUuhiRTxs8ag1QOnKCdTJE6OoOxmaD67/7Nd+PCf2e+Daf+Vtd/75gMRBg4XGVkTwHX82dJ\nVzaZXL7GSPMa7cIWRqEHvFv0YH2b2X4HpAV2ANwBFqvvPHl7c6JvB+gd+oS+fp32DaB5xQI22cMm\nYyqIySgHl13IlRbj8Si1B2osXo2wfsm3fXcO/L/fbJR3D/ovftuzvttI+w+Bq7Zt/27fvq8CnwF+\nHfhvgCe+TTsANucG8O0v4+nUqXZ9nFWOkSVO3ohSrgVplv1YLgXF0+ZhnkGz2ywzjJsGHuo0cLPb\nmmbYWuZ18W4W7HE2SVDDy/PtB3iy8hGEssye0BX2Jy8wmbjOQn6Ka+sH2fCleDjwNPdqL9PERUYd\nRA+2KDRjqO4mgRM5vEINEZuLHELEIsEmaXuVVdJUGgGUazYLo+OcGT/EOAvbFE0TwbbR7RYRewsR\ni4IcoiiFiJHjfvl5DumXGGCNDTvFV3iMH+k+w0P5F9HPd1g9lKYYDJBgk0HW0OwObVvnqcqHeWn+\nQXhFwFYElIkOkyevMh6cY5gb6Ltb1PCyRprB6DI+qlxhPx7qlAU/s8IkfiqYtsQGKQ5wmQFhnQp+\nBNGio8pkgyEG7BUmGjNUJT/mEZGNYxFyRMGGcWGBk75XcQsNVkljI6BbTXxmDdXo0BbciIMmwYNb\nTO69zoM8y18ZH2bG2s1HlSeY6UxxrnuUqJwnm0+xujGCe18ZV6COJrZpo7GwNcXr1+/lk0e/gGAL\nvDF7D+QFDkfPcSL6CjE7R9PjRptsI5ldql0/liQgyNCUXMw2pjBXle/Sff/ufPsHwlQRUXKhtoc4\n/NAiH/q5BWKLL9B4NkfuWZinBxQ+eqAt0QNXa3u/lx4l4tAi0vZ+J5J2aBGJHXrE4N18twPu6vbm\nTDtq7ETnEjDXAc7lCZ57mo/wNPJdMZb/xX088e/TFK8M0dYbWEa9V/f9B9QE2/4vy2kEQTgJvETv\nHcR5xr8GvAV8ERgCbtCTRZW+TXv71PI3mDTnef2pE0TG8xx45DwN3KS7q+zuTPMn1s+wJg+SdK1z\nPy+yx75OyCoiY9ASdDaFBIP2KgpdpoU9pLoZEmaWjibzhPVRXuzez7ixRFTJ49ZrdFBZa6dZbo+g\nym0UpYOuNDnKeXxGlXI7zCX7AIvSGJtqDEyYZI6PK4/jE6qE7QK7mQFslIbJ2Pwam9EoiwNpygSJ\nkGfA3qDT1dHMNqrd4Yx2FFky2GXPUrDD5ImSE2LcVr2Ax66z5E1zxj6O3DZ5rPQVngk8yBXvfoZY\nJkOShc4kC4XdtCUVS7Rpbbko5SO0Wy4OHj1DIFQEbHRamNsL+KZYR8Gggp89XCdKHguBVdIsdCe4\n1tjLlD5DWlulgZufrDzOh4pP0yxrCG9ZSNdNjCMybx89xrf2PMi52lE2pQSi2+LjwpeZFOYQsVhj\ngLMbx3n6wo8ivGojKQbyRzoERgsMhZY5ynleeuNBlvJjnDj1EvPaOBtWiruV1yk0I8w2pyipPmJa\nnmFtGRGT1a0RZjb2MhxbxFZscq0k7fMePEaDockbFLbCtDQVdU+D6HQRtW6QPxCg2AwjGDAVmyYz\nN8ja0XFs2xZu9rvvyvm/D74N/+J7ufR7yCS8Pz3EyAmVx37zy8TkWeyRPOrZPFaxg8FO9As7oK3z\nn4OzQU917ewT+r7LvBughe3NYAfUze1j/XSLzY52RGInhla3+zRDKtVjUfQbUbbsKf74f/pxFl5u\n0vizZd7/+u9/+W19+7tRj7zKu+mnfnv4u7l0eCiHf6NIaS5Mc0Eg1nAxciLL/tgVblPPcFY6RkeU\nMACsngsAACAASURBVBFZZAyzqzDQ2GCXaxpV6ZAlxro4gIyBhzoeGgjYXDQOUZH8jLkWehObqNww\nRsluJRFVm/2Bi0xWF8lacc4qh2miE5BLhOUcE8zSbijc2BjFUGQ6Lh2vXMMtNBEEKBPABiTVRkhJ\neCtVdl1fIJNMYXoEskqMOXUSb7fBgJEhR5xEO0uilmdgdpOiHWJheJxkLodLbWBPmcxIUyx7hnnS\n80GyJNBo4aY3YXrV2M/i1m68coVYYIPwaA411KFW8KNoXbootNBp4iJOlr1cw0+FHDFm2UWIIm4a\nJMmwRQRF6KIKHUQsZEzCFLAkKGk+NLmNWjcQslCzdfJSlBVhmKwQpyL48VDHb1UYYB03DaJinpbo\n4YxyFytXh+kKKtHHMjRqXlbbI9SMIAu1CQrdMOfzx2hEdXBBSQhSE7yYLZnuFR0rLsEorJ0eJptJ\nYNkia0cHkbwGQkWAhkClGORKJQgmCBEDKekhYDbwKnUCYgU90MInVjnqPsv1RIe178YB/w59+/1r\nCcJeiZP73kBIFnDVRfZaryHPbZCf64GlSA+wZXogatN7WM7mALJDjbC9T7xpH9s/W/TA1+zrwzmn\nf5IS3k23iH3XdkDdBmpAp9ih++w6CWGd0Gieg/UxJhJdjKMVXpu5k2LdBDa/L0/svWK3JCOyaAep\ni14aLjdrTynk/3Qvn/nTDCRgXRwgTIGkvckGKd4U7uCv2h8lm03z3yX+Hwa1ZZ7ig2wRJWln+CRf\nZF1JckO8g99v/jwBpcw90isc4ywLjPNq+x6evfooI+EFPrb3L/jk+hNs6SF0b50scZYZoYXOLmaJ\nVQo0LgUxExIkZSKeXh2UFj2B/zoDbCkRfLEqd146y9GLlxh4aIuzIwd5SbmH0xxHV9qMywt4qTFa\nX8a32IY/BLeZY/DjOex1gUwixvWp3dwtvEaELX6N/4vDXOBuXifBJgEqqN0OYtGiUI7R0XUOHT9N\nMFaiFdN7kzS2jGa3sQWBfcJV/hGfY400L3MvL3I/80wgYjHECiP2Ml6pTtyXZVhYZsKeZ5A1JLfJ\nvCtNPJ4jXKsiRWHuAyOUY16SbOD3l9kiQsvWOGKc54h1vvf3U0K0ExqlhJ+vfuXHuXr5ECvPTcCo\n3XtnroM42kaYMrm2eggXVcJDWRq2m1whyeqlcXgcqne12Ai2Wf7dCepX/DBkIf2ahR2TaL3th6oN\nBRs2BdhvYyckzC03p3Y9z/HwG8wwRYkgqtDhAJcxkxKv3AoH/kEzAQT7ABNJid/+7K+z9uwCr/92\nj7j3AAHeHRXDDuDq9KJcZ6ST2KEzHLDevsQ7kbHNzoSlzbsV1w4gf7uY2OnDAXd1+9OhYprsROFX\nbWBxnaO/8puc/BiEf2oXn/p//1vO1DsgbP5A5efcEtBenN+FN11G+2SNiXsLDLbyNPaGOMdRLnKI\nEkFKdpAlc4TbpbeJ6K9STEVw6TVUOnyWz5EnwrI1zJc7H6NtaHRsDU3r4JV7YPz7/DwtdAxN4mf3\n/QENzcV1eQ+XBmeoiD42SXAHbyNgMc0eouRpBNxEj6xTqkUodkO8yV1IdFHpEifLKmkyJBGw8Oxv\nEBrM00mozLnGWGcQFy0SbBKyinyr8CgVM8Ido28x/dkptKzB/so0Xzj4k5wZOkxHlDnJq6h0uYeX\nCVLCTZ1xFigToOXW2b/7CrsaCyTsTZ7T7yNAiTEWWGSc62f3sfTaOI995EvsH71Klvg78kiAPVwn\nRJHneJAPX/8Gu1vzPLvfxYh6gz2VaZLX8sgrJkLJQtfaqKaB7RVICptU8WLQq1XeRQFs2rLGVjFO\naj1Le9hFNhDnGnsp7wv0pADD4JmsIAYMaltBrCUFoS7DiICBQjkfYnrZw6hvkYNHvkg+EmXTnWCt\nPkxrv96rh54W6BguWBAQbliMnJwHl8DS9ASpAyscGLrIQ/qzLLmH+Yv6T7C6MoInViEazVLHw/X8\n/lvhvj9YlojCqTv5xOWX+dEbX+f6v9+klO2BtUwPXAV6PLKjpe6PmL9TpO1MHjoqEAeEnVkHY7tP\ngx7wK+zIA50o29F/OBpv+to6kb8z8Wnzbs23c00RmH4L/Asb/GLuf+XrBz7E4/s+BC+8Cdmt7/25\nvYfsloC2aUugw6FD59EPtRCwaeOhSZfAtmpio5si30gS8RTYrV6nqvi5wQgbJNnDNQRstojSsnXK\ndhBTkNDlFqYkkSVBbrsqnFesIfpMqoKP69YeXvHlQIAaXvxU8FGhip8uCh5XnTtdr5HJpVHMLnU8\nSHRpb7vDQm2C5e4IAX+B6cQU/kSZFBuIGIQpECeLRpum6WJmcy+q1mVxYpirkT2wKVK/6uXr4Ud5\ny3Ub3k4Ft9Jkr3SNE7yGiUy0s0WqkmXJXcLrruKKNdnfuciEOc+aEqfW8NFqeUj71mhYPurdAGN2\nL0FohWHWGKSDyihLDLGChMkMU7isJn6rShMXPqNGrLNF3fAQMKv42nXkmokYANMnEG6XCLbLSIrJ\nWjuNKFrExCzSvI1Vl2lqLsr00uMtRMJH8gQTZcZ9S6yEEmSiCWxVpDXtxtjQYAyMroxZ0Kl9UyA+\nKCIdNpEEk05Xo9r14znWQBYqSBGTAc863aLCenoAfbROx6VCE8aH5rgt9SYHOccaSbLdOJt2kpgN\nfkp0UQjbxVvhvj8wph/24Z/SiXuXuU18kV21Z5k53QNTp4pLf7TsmAOw/VG0wH9Og9h9x52f1e32\nHXaid2V7v0OZ2H19OoOB2bc5/TkDgXMf/XJDp40FbK1Bfa3Gfp7hqOhl2jdM/j6N8oyH5sX63+iZ\nvRftloD2yMQCPqp8ki+ywhDP8SBuGkwwzyleYJM49baPRi5IR3bRVRXaqMwxQRM3NiIFwtiiwAdd\n36SNRoYkV9hPljgSJnfzOjYCa2aaP8j/IjXZhR6sUdV8xKUsCTZZJU2UPF5qzDKJSptP8x9ZiaSp\n4scj1Omi0EajgZvlzDjzpUnu3vcy8+4J6nj4NJ/nIJcZpFdq9jq7ed56kPqGm01vgtcm7yZDilw8\nxlPRD/LGlROszA0hDrfxB6r4XFU+xpdp4kKug/9ak/JwhNmRXVhIuJQGgmJwN6/zxNYn+NLGT/HL\ne36d+449T/rwMgG5RJ4oawxSIIyXGg/xLApdOigc4iLWHot5hpkWd3NP7U2QJF684ySTd85ysH4F\n30ILsWMjyja+cgtbVbgRGuHPi58C1eYu7VVOfPkMwWCJ9X8cJSPGsRB7GvI78uzKLPAL5z/H/278\nKo+rj6HHGhTCSSplDVSwWwr2bAf+eJFrwQTTR49jNwSsPSLyyS6DJ27gC1XQafIx4S8p20H+4uSP\nk+tEqWyFQIED4iVGuMHb3I5Gm4OeC8i7u3iEOkk2OMwFItECT90KB/4BsfDPDXJgX4mHf+6fEljL\nME0PANz0gNNJUXGoCIteJKyxA76wQ3GY7ICwowa5Odlc2+6/zg4A9wO+tX1dh+dWtjdH0+1c3ykz\n1T+oONG9o2KR2cmT7AAXAP/lv+JnKmd48XP/M5cvplj+H+e+l0f3nrJbAtobK4OYIxne5E5a6EiY\n1PCyQYoFxnqlRw0JGhA3s0ywQAMX+5szrNppnnPdx3J9hKBZ4rjvbeZqt3OxcwRPsIydk2lUvGjD\nHfyuMqJksRQeoyNEkGQTj1BDxKRMAAEbjTbY8FDzJQRsMq4I4+ICGh3qeKjhZZMEi4wRjmfxB4ok\n1Q2GucEua5Zka4sNOcGMOoWIRQeVKXmGzL4zRJUcfqHKIGtUhAAzwhSXgkeIGlkO+c8RUEqUCHKO\no7TRkd0mjV0uCp4ACbIMskZIKGIikyTDfaHn0bUmli7QkNzoYpNvdB5BFGxS6gYbpJDpImFwb+l1\nOqg8ETiIS2oSYYuHeJaGrnFN3M1t9YuUdC8veu+jO6pimyKq0CUuZdnUY4TtIr9i/RaCZSLoHYQP\ndXjOfID/lPuH3BV8lSl5muOds8yp4xhhhYuH9lAJeQkIZSLCFsJugWZAo9t0EfbmcR8ssflzKbod\nP5atwLMgDBqI6TZtj0p7M4a5qLKxb4BuWMK2BUbEZaKRcwxpaxT8IaatPTxmfoUXpFNURR9JaYPj\nnGaKGVpouMXmrXDf973FDljc9vMWqbVvkPjGDGo+B5bxDoA6m4udqBp2IlsHJLrsSPdcQJudCcJ+\nc+gTB2ANeqDr0CkOteHQHc6+/kjeicSd6FmhR+E4fUFvMIAemDsTlM7g4Wy2ZeDK5jjwW18genQ3\nG/9mhHP/n0D+yvckOHpP2C0B7XbDRb4ZZ1kbQRebeKgjYtFCJ2fHKNgRVuwhwCJAGTcNMiQ5ab1F\n0C7zJ/wEW1YUl9VCtC0y2QGWyuPc7nmVoFGi3XYRt7NEyREUS1S8PqZbe8k14yTdm3jFGk3LRbyc\nZ5AN2l6VQ7VrlIQg51wHCVBBpEmRED4qpLsrNOpextVFZHeXpuTCQx3BtsnbMXJ2nBJBPNQJUCYh\nb9IdVPBQZ8BeZ9hYpUSQiuwnEdwgbOd51PV1ckKMGl6ucIB4N4dHqPN24jYKQpgIW+xilhZ6ry1+\nxoUFYkKOWSbpoBKigGlJaGaLofYay64RNsUEddvDB8zniZPDZ9dYEwawEbiLN1hUxrjEfva2Zrne\nmWJBHCEVXEcXW7itBu52jY6koNPkQ+Y3sSy4pkyQPRLlRnmE+mYAxdPFJ1fx2jWGWGHdleLVobvo\nIpNmFY0Wmt5CEG2EJZBbBvpAl8AjErWsROs62//FNqJkEhSK1JsBNvIpltsjhMgzKczilhsEXBVC\nSpEbchoXDYKUwOad0rA6LQxkcsQxze8k/Ph7cyy232L3iTrHhjOEn3oL7am5dyYVHQB2It/+CUYn\ngnUA3e7bblaGCLwbuJ1EGse67PDNwva1HdB2IuSbjzn7nDcAu69PZzDQeffAYPX1K/SdKzVapJ96\nk6hcYPAOm8aJOAJuclfen/XYbwlox2NZFrcmOBY7S1Ar0EVBo73NCXf4lvkwZ8XjCAETWemwxiB/\nzM+gujrIGNTwEPHmGGCNpuCms6CirnaIjWeJDOSQkyYH5Ev46PG4E8zzVPUjfDX7ccaHl0goG1RM\nP0emLzPFLMZeAb1ksCanmY9M0BDcGMhc5BAf53EebLzAo7MvQMQkG4/yrPsU54UjvCLewxHXeeJC\nlhS9FcG927WmY+TQaZGwNwnUGrQFN52gyphvniQZPsoTnOUYFzjMImPc13idlJHhd4O/gCJ1GWcB\n93ahqgXG2SDFifW3uH3xHLXjPuphnSAl9urXSRWzDG1kmB+a4KL7IBfbh/iY7y85KS/yIeFJ/pLH\nWGSUj/A1lhnmonyAz4c+TaacIl7M8auRf8UucYaAUSGV2+Kc6xArgTRmR6IpaawyxDoDjLHM58VP\nkxf8zErjPOd6gAPCJar4eIFT7OE6KTa4wCHqM346r7thViCvJ2jucjP+iWm2GnFWm2NwAOyAjDIv\ncNx3ls1QkqXdu1jxDjHICj/Fn3KdPZzpHueLlU9y1H+OkFbkdfluygTwUgPgST5EiSAhSuS7EeD/\nvhUu/L61237B4ujgBsF/8hTSRvWd6LlND+Ccib1+vbVDNziqjv60c5MdEHYmKx0e2gETB0wdZYcD\n9v1A74Az7ETbzgDSr8XW6VErje1P51717XP6I3aHH5f7Ph1QlwD56QW0q3lO/fajeA+O8c1/8veg\n/R3tHu9L+LUSJcnPaj1NoRpDNg08hTr+XIX2AZ10YJWyXGNOHce9rdg4Lx5GwSBGHk1oIdNlmWFK\n0SBtW2NVHiIlrZGSNnBTJ9RjvikRJOFZZzwxjV8rEaKAX6owNzwGZZv989cQN8EISNRHPbTQSJHh\nMb5CExdv23fwIeMZ3IUGOTvOpfQhFrRx2oLGeeEIxznN3s41EstbuLU61YSbt+Q7cIlNIsIWOVeY\nLUJYiJwUXyVJhjYa0+xmnRRHOE9Z97Jl7cUn9Krt+akQJ4uXGrF2jthGkdHaClLQIidHkekywAYh\no8i6muYP4o9ypnoHm+U0TcGNiExIrzAeXkAWDJYZ5i1up4NGWlilKATR3U3caousGGOyuUCqksNT\nbLOrsIB/q0pAL1L3JNGMDneunCFsFSjGfBS0EE3BhVuo86J5ilXSFMQw68IAomkx35mgZARBEsEH\nyT1rRI7kKNgxSr4QDNvwIniCFQLjW5yt3U7JCmOrUBc9FAiRI9ZbY1N24/NWKclBzhRu5+y1Oyn7\nAjQDOvhNSkthaIDvWJ1m0Xcr3Pd9ae7DXqI/myS+/k1833gbeb2K1THfibCdCLrfHHB2aIl+oHUi\n8X4lhzP512InAcfua+vQGP0Zkf26boudJJn+6zvLJfRfW2ZHyeL04QD/zZmVvXJXO/TOOwDeNpFW\nK3g/9xaRgzLp33mErf+wTvNi7W/wZP/r2y0BbVerQTS4yQYDrDcGybVTiIZFd12le0XhtpHXicc3\nkVSD6+V9CIZNS3Fz2XUQt9ogwhbp7hq63WZVGaQa8WFpIh1FpYNKC40cMXxUibBFG52Ee4Pd7iuE\nKBKihCa0aSbclEQ/ZlGkY8vIdpeJxiI+vUxCzrCPq1zsHGHLjJLxxnEZTTaNBBX82AhotDGR8NQa\nJIs5zJJC1p9gzUpy1j7WoziEGSp6gBXSFOwwAbPcWzhYGmJdSFHH01s8oahgNGQORq5gukQ8aq/m\nSoxsj+pplBFVyETiGKqCiNlLrrFcrKkpTruPUF73o7W7KGoVugJ10UuOKC1ctHCxwjBeqmh2G79d\npdH1QFdgQ0sxZ06iGhYpaQNPu854s04l7KWtawy0Nji0cA3BbbE0OoBliNARaSk6b3XuJGfH2ee6\nzFY9SqXrx5BlBJ8NMRPKIq6JOp6DFVbLQwhhm+DoFtWGH01s4k5X2dhIIdo2k65polKOuunldPd2\nVoQ0HVHjgOsykmBS6ES5WjhMvejF0GTQDZScQVzOkjQzVDvBW+G+7z9LRPHtVtl3uETk12dQvzH3\njoKjX4rnRNk3g/fNXPfNdIOj1hDZSV3vb+dEvM75/ckx/d/7+3Ha9Mv6+umOfq7dMQekb578dJKB\n+idG3+HL2ybK1+ZIGFEO/bM7OTsVoJnR3ldywFsC2n925VP4ThYJUCLu3cDrKuO2m+TyCW50J2na\nLiS62LbA1WuHqBaCWGGRyGSGVGyVMRZ5pPoMIaPM70T+e1qajseqs1+8zCZxXuUecsS5kzc5xllc\nNBlknSp+UmwQ305gSTa3cLkbVI/qVC0f4UaeX1r7PaaT42QCURYY52jlInq7w9mJg1REHx1R5S75\ndTZIUcXHbqa5feks8ZkCb91xjNfid3Favo2WoLOH68yyi8L2upNXOMBXGo8RpsAHfE8TooiEyWuc\n4BPPfZV7Zl6DRwWuT0xwI5pmhSGClPCoda5NxNgiQkUMMC7NUyDE8zyArBr4qPBRniCVXGfVGqIt\n6LRtgZfEu/kr4cPkiREnywg3WGaIS/ZBzhq3UVhM4C3USR9b5cuej/IF3cPPRP+YCXsegCvyfgY7\nG9xbegNtvYPph8nWPFJZoCEHeCl2Pyu1UVJWhh/Tv8qXlv8hW80k9+x7jgvjh7lqHMSc1llrDFA0\nvOihKikxg9eqc/747ZhjEsg2e1OXmGKGPcJ1OqLC+eZRvlL8BIYoccB9iQ8EnmYv11iPDfB7D/4C\n82/voXg+BrMKgUfzjD8ww13u12nbKpdvhQO/n0wU4NSdRDxL3PWZf4qeK6CwI+lrb3+q9CJahxZx\nNgcIdXa4bAdom+yksHu2++rnox1z+lB5N7g7kbGjInG46G9Hm+js1ON2ovz+RJ+bKwVKvBvUncnO\n/oGkS++tQAbGXzzP5LU11k/9Dpn7huBLX/9rHux7x24JaD8w9CwqPX22LQo0DReXrh+l+FYUzgq0\nHtIJUiQtrKINGmwwyOrGKMVghG5boZYJcT12gZg/x3xpD4JiEXVl6EgqZStI0QpRkfxcEA6zSppR\nlnBtL5w7yy7qeLjdPo2n3WBNHOAp/8PkiRKV85wSXuEZ+0E2mkmO6ueouwOImoWhC0yLU2RIMsIy\nCTaZYhqNDoVYkLfFozwZehRRNflR60m8pRaCZFH1+/BTYZQlQGBEu4FpS+SIYSBRIcAKQ5T3e7GT\nFuKARdXlZZU0JhIR8sTFHKrWQaWNlyptVJYZ5pxwlClmiJLvLWMm5/FSZ5gb7G9fY9VMsySNvZMZ\nGSNHiSBCW6C0GaWl6oiDBufsI9QND6Yo8Zz6ABkhwSBruKkTKRZwb7YgDpWIl1Ulyax3N+viAA/w\nHHe63yZklxgXFtgTvUq14eNa+RCybnNg7CL2IxLtlEpHlRFli2ojQNdy8cCPPoOWbCAIJiPKMmlW\nCVklnq19gHON41RNHwlXBrfWS5Zy02C9miY7O4DmbxFOZSk9EUU+aVDX3Txbf4iFS7tuhfu+jyyB\naO/mp+Ze5pDwEuJyBtm23gFOJ3FGpAfiWt++ft7ZiVT7U8wd3tqJiB1Kol+r7ZznHKOv337O2+w7\n3k93OO1unvh0+rH6znUA+WbaxMnC7LCTqdmf2PPOPTdaSMsbfPLMF5iw7uNxHgSu8H5Ieb8loH1i\n+GUKRGihI2PQMTReW3qA0kYYZXvslzDwCVWEYZt2S2PtjRGamod2QKdciPBq8AQpZR2rIhHx5fHp\nZdaLg1TUAIqrl8u30B7ndOcO7nC/wZi0iJca19hLExdHuICBRMZO8qJ9f6/4v5rBE6nxcv0ect0Y\nQa2EohiIsoVXqJIhyTqD6LQZYoU0a2ySIJeI0Eh4mGWCO4y3+Qedx3E1uyyqI7zJMQJUiJEnKWyi\naF0qZoC59i6KShBV7BAlj5zq0gooiB6LquylSBABe1vCZyFjIGEg2yZ2V0QUbBSpp1PulZFtEKGA\nTJcjnCdhblE1AqQ7a+hqkzFrkVQpw4a/V7PF3WjhD1fwREq0OypdU8YUZM7ZRykTYLc9zUHhEqJp\nkjdCeEbrVCJ+FtVRnlfvQ6HLB3mKRDeHbrdoojMZm2ajmeR8/nbGXTOMx2fxxOusMcgagxjIrFZG\nqVQjfOKOP0fzNMmQfGfStUiI6fZu1s1B3GqDmCeLqNhcaB1hWR4hX4uzsTRM+PAm3skyzYgHypC7\nluBi9QjG2/pf43k/XBbyikzEFB678VeM1p/nFbv3D+7I5xxVh5Pc4nx3ANGp0OdQF/2g6fDKjg7a\n+ew/79tx5f2g3U+P9NcQ6S/Fat3Ulr5z++uQ9KfNq3330q96+XaUSr8+vGsZnLj0FZKeGotjJ1jM\nShTfB7k3twS0bzDCa5wkSYYkGTSxgxUXUT/cwjdQIBgvYCAzwxRNXJSKEewzAmQEtMMNog9vcJaj\npBtxPhX+D9xQhrlUOMyFF44T37XBrsMzRMiTzabIZIZo7rnItG836wxgIJNgk6rgpRbQcFPmGGfJ\n2nHKBJgVduFx1ani43nhFD9f/hzpzhq/Ef9lInKe2ziDgE0FHwuMUSLEGIvsZpoKfnbVF/EXm+TD\nQepuHS91mrhw0eQAl1ljgECryn3ZN7ganaLqdTNmLTLwVJbQlSrcaxM5VGJwZJ0U64jY5IjxLR6m\njc6wucKnt/6Mu+TTfCjwJDPyFKrQW6NyihlqeFhjkIw+QKBY5V8t/m+Q6qLW20SerfDm3XfTOOjm\nyPhphqUbjMhLeKUqlzjIGeE4NbycM45yzdhLTfWSj0RZ8GU5JF3EkGU6qKh0erw8Q4yc3iDVzVN6\n2IOqdEhp60wlvkBYKjDAKvu4youc4lVO4qFOp+ZmJTtKNe1niWGusJ80PUnkWeEYQ6ElPFaFVSGN\nKrXJ1AdYy4ziClUwNQljt0zRFcQVkgn/Rob6VwNs/csEhihD5P05+/93YyL37H2T3/jUb7H4+QyX\nz/VAS2MnOcZZ99zDDrA6VMXNdUacibwO7570649o6TvHUZY4lIlzvB8k+9s6AN8fXXvYoTD6z3XU\nKrAj7XOi9X4PsNhJhXfu37kXs+/ToUpMYBpI7n6DP/nMz/DPPn8vT54Z4d1Dx3vPbgloKxh0UFlk\njDxR3HKT7pCAuGrQvejCd0cNzd2kbAcotwMQttn34QusNYYJBos8Evg6s+YUpiXTURWyaymWF8co\ntcLEtl9n5o1JWi6NWDzDkjiK1+pNSh5vnyMmZlnRhlDkLgVCtGwdSxApWGHeMO4iKm0xJK309NG6\nl5rsYVKcZX/3KpPWPCvKIJYoYiEhYlHDS8kIc0fhDCGzTNYXoa5rSHK3J/nr1KgKPl5QTxElhy53\nOOM7iqh0GNjaYPLiEq52l8a4m7mhMUyfwFR5huGLa4iSzVY0T2koSN3lIWrniRl5mqKLeXuCgaVN\ndLVFa0BnKLeO1LBpmyq2KiCKNp2oSEwrE6hVkSU43jmH2LKZd40giDb5dpQr2UP4PBUeDD/HEqNk\nxTgN2c0NYRhLEakrbir4yG4lObN8O8UxP0PBZdw0uZae4rK5j7wYwkQiIWa4oY5sL5VQwUODMAUi\nbNFBRQ81UFtN3rhwgpIRJKMn+Ob4o4yEF0lrK8zKU9Rx46aOhUjDdlMxAts1KWzsFriFBm5/DTMk\n0RlW6W6oEAFlpEX392+FB7/HTRNxfWIUOVGk8vIc5Sw07Z1I0wHob5eKLvftc47fXFPkZqqkv2Lf\nzWno/TVA+jXYDgz2V/m7GXCdtwEnwu6vz+1U+OufWOzPjuxPcXd+536axum3n6d3pIGtXI3ay7PI\n930EfWqU1peWoPveBe5bAtoSJrrVYrY5hUtqEtc2UVIt5KUu7bdcJKc2cSdrbBFF7XTwJOoc+Ynz\nKDMGPqPGAekygmqzKqSZZRcz+d3kswmC0RIRfx7F7jJvTjAQWGdP5CrXjL2ErAK3CWf48fYTtAWN\nV6S7WBcH2BIjlIUAfio0cZE1Euy1phltLVGt+0CHulvnlPAChyqXibfyKPEOq+IgJYJ46a3mfx0z\n+AAAIABJREFUUjTD3LF1HtFjkU2FaKHT2X5RCxplCkKU19QTHOdtJM3itHacA1zGu1Gnc9VFa9jL\n2p4Ur43ewYC6xp7MDAPXs5iyhNIxOZl4lYbLhSxYSLLBjHKQZ4WH+Ez2T3G7WsykxhisXCSV20Ro\nA15YiyV5Y/gYBzomvnodBi2OahdJNjK81D7JGe0I5zrHOL18ko8k/5L7w8/hoklcylKTvCwzTIYk\nfrtC2Q4yXd7Hi0sP4YsXCAaLCNhc3zPFCmmyxLmPlxlkjUscRGzYuM0mTY8LVewQoMQSo9hRC0nq\n8Pa5O+msuECxec7zEA96v8U/0L7EJQ5SwY+fChYiLrGJR68iq23EtoXasUlLqyhik6XiBNaIiBpp\nIaVNArGt3qq8P9QmI8kuxu5z4akonPmd3l6Hg4Yd6gN2AFTsO8cB1n6AdMyZxHMiX6GvP5N3A3R/\n386+/gJPTrTutO2nS5zNWWCh3Xcdp3a3M0D0339/FH9zLZSbszEdu3mAqK3AuRXw/pbK6JSHma94\nsLrNvqf23rJbAtrX2U2z5aZ6KczB0Ct8eOorPC58gtZeF51wm5ODLyPTZZZJbvOcIbi9endy+Jts\nWVH+I5/G2h5TlxmmvktnfPga94svMeGawxBE5tUJjnCej/IEF6TDhIQih+yLhIQimtHFV63xmud2\nSmqQIEU+zuNoYoeSFuTOrbOMLKxgvSGh7O3AXpvqgE70Wgll3SDwgTKvBk9whf38GE9Qxs9r4j18\n0f3TPKx/i5/mjzjLbcwzThUfU/osIUqc5FUWGXtnlZ0z3EY2laDxCTc3tGGWXKMU5SAtVLzhKt4f\nq3JN2MtVbR/DniUAupIGEYEbwiAFKcy5/QeQRYMlcYTB9Boh/xaunIHlh6rfzaIwSlTNE/EVCMeq\nFP9/8t48SLLsOu/7vf3lvlVmZWbtS3d1V/Xe09PTs2IGM8BgAIICCXMTJVKmbNK2HAgvpCXa/se2\nwhLpsKmQbIYiJMqUKDJAChSHEDADDJaZ6dl7mV6ruvY9K6uysnLf3+I/st/Uq8JABAmiZ2ieiIx6\n9fLe+96ruPXd877znXNjfgxT4Jl3XudG7zmuxy5Qb3kpmBFWGGaLFDHyjLNAiRAKHSIUuNR6l4dj\n14g9ucteIIKIyWWeYJgVxlnAS504OUZY5jgz9M7l8RfqFB/24fE18NCkhp+yHaKm+7AuAJIFiwKS\nYNKRVEoEGWOJIBWaaCTZpu1RiaV22ZKTyJ4Ox0/P0qtnKe5FmH/zBPpIg8jZPBFtj0F5lT95EBP4\nY20xtEY/v/h//C6TxtsH6os7gTfYBzg3VQDfW1LVSVxxkmgc9YYDhE5wz6FB3HW2HUXKYRCW2Vdt\naHSTZA5TG465JYbOm8CHlW51wF0AKuwvENy/Z6eeiQPoTu0UkW4dboeTd86ZwM//9r/hjLTI/9z6\n2zRZ5+MalHwgoL20M87m5hD1kp/16jDv1x5iYHwDb7BO3htjT4l2d1e3TXav95K3E+hnaxzXZpA7\nHRYLE5z03+SIZxYJkx1/grZfRaGFQpsoZZ4TvsVR5kiwwznhOk108sTY0BqktraJz+QxL8rIaYOj\n9jwnGjPYCLzvOUW8tstAJQMy5L0hCt4QVcFHI+7FliVKapAAFUbtRYbtVUpCmLao0hPexpQFppm8\nrw6RUYU2GSlNnhg6TVYYJkOaOl4+kb3MuepNUvI28pJFwKpResiP6mlTUYOUegMElqqMLS6jn6ij\nN5p4d1r4wjVmQxaFQISVwBBR9ghSZseTICDW6JOyoNlIWoc0GSKrZbTZDsIdkD5h4O2rEatWOBW/\nxQXtPd6THsMrdlPELcTuBsvUiVBgyFjj4c41UmSxvAJ98job7TTZVpJVZYgxYZERYQWVNgO1TXqt\nXeo+nWy4FwSRwcoqimggeCzSZNCFBj32LjeqFxDiDUI9BfJ6jFy7l9v6STKVQcJigYcD79FCZ3Vz\nmN23EsQeyRMeLqAqzW44WN+k0N9DNhlHCbU4w/vE+Kujrf1RWd/pCmeeXqL3q7OIq5kPvGUHiJ0i\nUG5pnwOWjizO8ZLdJVfdIOn2Yp3f3R60Q1s4Y7mDl25qxl1z5LD8z1lM3H0VV39c/dzUjLNYuAtN\nuQOWznM7XrqbLnInAImAtLxJYnyWT3xphVvfrpO5xcfSHgho1/MB6isBPOEGC6UjbGz28/PJf8Vw\ncJltuVucqYVGxC5y4+YRtq1ehKk2Pr2GbrRRSjYjygoPe97DT5UlRlllqFuHmzBJO8uP8VVkDFqC\nyiBrbHb6mWsfRdRt7CL0XC1SmAghpC0GWSXdzFIgyp4nRs3w0tIVmILcaIxMLEHb1igcDVMTfGi0\n6GeDKe4wYK+zyBh+ocJJ5TaCZPMGj+Oj9kFGY7ekbIoGHsoEMZBp4OHizhU+n/0alldEfGeGVlth\neyzKnHyEHaWbETiyusHk3XnWR5KE9sr0z+xACmaGJhH80GmpeIUGvWqWestH1u4lEtxDrFr42jVO\ne2+TWC6gXTPguo13vIHVKyAKFg9736UW1tgMDNIvbXK0vcC6NMSOmGBd6GrEj5oLTLQX2fL2sKUk\nadoaa51BNugnJufxCA36rU30TovBcgbdajLrPcKd4Unkms2xlXl0oYPi6XCMGWxBYMfoZWnrOFqq\nzvi5WW5vn6PSCXHPPs5c8QSnxZuMeb7CLeEUmfU+ll88wqN9rxId2CPbTjGhzDIYXuHJi9/mbS6R\nN2OkW1t45b/uBaM0RiZ3+bG/u4hxM8/G4j6QOUDrmKMccQO3W8UBB71c5/fDgO601TjoyTtEgtPG\nAXa3VM/x3GFfNugEMXX2a2s7IO5w8m6pngPubtB26nO7+WrF9VOm6407C8SHlX4VgQ0LzIE8n/3P\nL1PKjJC5FebjuMv7AwHtnx78fYyYwroyyLwxzqoxyPXoGUZZYpQldJqEKRIXcwx+Zp0rxsNcN88w\nb40zrK/yhfSXQbV4g8fZppcedkmSJUCFQVZJsUW/3VUk5IUYCjsc35hlYmkJ+4zBwvFxXox/nmvJ\ns3ip4aGJHLARsIiwR6nPx0J8ENOWsL02aTNLpFHmG+pz3NFOMMQqU9xhhGWKYogSQaoNP1+5+jOI\nEZPEyQyP8SYx9hAxSZMhQIUa/vvJPTvE2GUyNU87qlDw+QnKdfRsm97ZPdbMNrmBONNMcuzMLGfG\nbxKIlPF6qnRUkPMw1Frj+c5LPHL3GpJusHEsycT0PMn6Dr5EHf4U7EaL0CcbZAZ62RsKMfzJNWSf\nibAOwjIE+8qMeRb49PjXeKR0hZMr90gmtrnqO8c15Tx+KiwpQyxJI2TFBFmSbJGipvuY5C6fE7/G\nKEuEayWGNzL4lRpbgW6J3A4Kydom0oxJfCLHRO8c8v39K0taGOGYQchfYFyaR+3pgGDho8YmI9xq\nn+J/L/w6VdGHNSwy+D8ukO1PsF4aYG++F2tYYqN3jgBVavjYrPTz+7d+kUv9f533rVGBkwS+c5XB\npcsU50ofUBCw70W6E2fchZwcoHIohRbfu/mBk0UJBxNZHLBzF4ISD7Vxe8MOv+3IDGvsA65zr+4N\nDdygC/slWh3A1dlPm3eCn869ON6740E7P1X2KRuHEnKnwTs0kHx9l+jfeRVt6SRwErjB/lLz8bAH\nAtoP6++iqy2uyA8REXY5zh3aaNTbPm62znTTlmWTnBCn3qfjM8sk2tvoQouOpFDx+sg20jSaHuLe\nbRBtdhs9rG2NsKaMsBoY4wnfq5iyRJEQPuIMFjP0LuaYOTpGcSCEN1RliBX8VIkKe+SUGBotJrhH\n3etjwTuCSpsdevE1Gjyf+w7JyDZJLdvd3RyZHSHBNkmW7RFyQhwhZOH1VfFSp42KgUzEqtC/s4Vc\nMmk1NaTBDr5IlTg7BIwqTUtjM5iiMl7FH2vQbqjsaRFMW2LIWqUVUrkeOUMPu4wJSwRiK2BAUt/i\nEfsdJsQVilKQDAnClAhKZUxdpDLgx2jJqME2ZlzAsgTIQkkKsheLsnuyh0IiyJ4UZiC4So+1DYKF\nKrdoCRrb9CJislbqYTZ/HDnVpqwE2Gr1YalgKwIGEr5WA7VtkPdGKOoBMt4Uu0KMMWORpLjNG32X\naIW6L8k6TXL0UFKC9CfX0JU6FSGAqBmkyDBmLnFTuMCOlGBFHqa15MGvVgmfWGF3M0FxNkbjaoDZ\n1CS1o36Gzi7R0jQsU2Kt0o+38lerZsRfpslei9FPl+kr7lL/bu4D0DqcnOKApdsbdSgKN1XiyONw\n9XV7y4736678514QcB27g5fyoX5uGkRiv7yq+63ArVY57F079+euGuicc9q7a54437kpIXc5WPe7\nmgUYhRbiOzsMPpPjaLDM0ss2xsfM2X4goN1rbeM3asyLY8SkXVJ2liy9fLf9Sb5V/jR+uYolC7zN\nJeLs4BEa9MmbBI0qzZbOm9ZjFKpxUmT5tP4SeTHKdOME12YvUff7SPdvYnmgV9hCwMZExttpEapV\nmW8dpWNIPC69Qc30odImKu1xjfNYiDxqvcXr4hOsCkMEKfMqn0Bu2zyav8KwtowcadJCo0SIJWuU\nbCvJnHCMohrmkVPvEBdyiFgfBPFCVonRzTXSK1mkvMk9/xi5SDet3VcwkJsmuVgvhUgEsceiSIgN\nBtCsFs+bL3NTPM3r4pNotLBsmbSwgy/aJKru4REq+HraVCQfmtFG6LExRJFGSmb7i1Gago5fqCIb\nHbzLTZT3bPYuRZg+c5S7w1OUpCACNim2MMOQDcfIkGaJEdYZQMRiPT/M7elzTARuY/klKqUQarBB\nSQxxV57isfoVOmjcGDiBJHbu72rjY7C1Tkrf4p9d/C/xixXGWESlTZEIBSnK0dAMFQKsM0AHhXEW\nOMEdknKWHSmOHqiSn9cxLZXOsEptNkTj3SBchR2zj84pDd+xCrJmEBEL5D0pppl8ENP3Y2m63+Cx\nX7jJ+NIcm9/d9yQ77JdYdQJwjmcqudo43q9b7+yWy7XZD+65KQQ3gEscBGK3asSdDu941w6wOuYO\nJrqDo4cTbxyvusm+V+74vu43B+dePgzUcbVz3i4OP0/z/nM3gMkfu4c4pLNx2fNXF7QFQRCBq8CG\nbdufFwQhAnwZGAJWgJ+ybbv0YX2/Kz2NIcr4xBpFwrzDIyyYR4goBf6r2D9hVRn6QMVgI5CrJMlu\n9COtm1hZiXreS/rJdWInd3hLerRLV/jvYJ8XMGUJj97grjxJjh762SBIBWscBH+HS7V32duKUEz7\nGdncwC9WsdImCXEHpW3iL3eQAxYFPcIMk6wyTMhb4t6RMTx6HROJCgHyxFgqjfH6dz6JPlDnkQvv\nEKaISnfH82VGuMMJXpeeZH78dU6lbzPYWUOJtWij8CpPE+5pcCp3h/PXb3FzbJL306eZ4Rg95Dkq\nzFGV/fQLGzzHK7RRySsxvmx9kc/mv4nk6ZDxJBjbWKOnUeBs7A5yskUl6KUhqsT3CtiIVCIaoaU6\n/p0m4iMW6cYOgcs1ppR5tsbibAykWGaEPDF6yKNgcIx7iFjc4hR6qs5nAi8yFb6DIUksxMbZURKk\nxQyf4hus+5Nk6SEglNkjwhqDzHOEghhh0p7mGb7dpVTw0cDTDUbSYJ1BouwxzCoZ0uzSw+vikzwb\nfZkhYYFXeA5qUF/xs14ZpeX1dGdWb3fWhdsFHrXfQqPJqj7ExmA/akCk8kP+A/ww8/qjMwW9ZPHU\nb75FunqPOxysj+1kPLophgbd1HX50HdtVz83/YGrr1sj7QbeD6s74pbTOQFNh3pxgNipa+Kkrrvp\nDXdNFPfuNQ5n7ua3neu63zCcwKSzELifg0PtYV9O2HSdt4Fz/+o6Pd4GL1Y+Rf0D1ffHw/48nvaX\ngGkgeP/3vw98y7bt3xAE4X8A/sH9c99jC+I4vnaN+Y0JOh6FekxnrnKcY9IM/f51rpYfZlMcQAs2\nCFBFl9pYmkom3095IwwGyEIHSxK4V5jC8CikPBnERLd4Utzcpa+RISBX8OkVfNRQah3kHZOUtgMh\ngTwhAp0aithmS+hBxqApeLgiPURJCCFiUcNLqRihYfiYiRzjiDSHnwodFG63TjHdmiLgK3PMM82k\ncJstUtgIqLQJUaKKj4IQQQhZaEoTvdBCFZqodLAQaQdkqqaX7VachuzB36kxUVtE1Zs0NZ2XrefR\nhSZ+qYpGE9Uy8JgVqroX3W7iLTaRBAuP0EJpdLiinKbq8dJLlj5xG92qY1omqtJCDBkQAs8rDZT1\nFt6n68wrI2SafQxubeIP1CnHgoQp0keGlqCRoY+Ab4VznusM19comwG83jo1fMTI00eGohoGbCIU\n6KAQpsgQq4SbZYLFGmfLtwknyuz2RomyR6BZZaitYHgVsnKSMkEqBBEp4hEaRPQ849g0TJ3l8SNk\n9D7ySgxbFsBrQ8yCHYFGycvK7BhqvEXF42c4ukzIW+T1H2b2/5Dz+iOzgTj2SJjm3Ffo5Hc/0Fo7\ndIdbTeEGIjfgulPPncxJOBiUdHhrOKgeETnonR9OvnFfA763GJXEwXs5vPejo0I5PK679on72ocV\nIU5bZ3syN+3jTol30yjqoe+M6V1a0Sr2xeOwnIeNDB8X+4FAWxCEfuAF4B8C/+390z8OPHX/+HeB\nV/k+k7tAhL5Whj+6/fMkezNcilyGXZk9Pc6qd4i5rUm2lQTp4ApjLNDj36UzPsN3736KSjCINGRg\nxiWqzQA7m300ez1sePqQMUiYO4w0V/i53X+H4O+wrqcAUOZN5JcFOp+TafsVLEHE8gqUpBCz4gQi\nFlk1yYvRhxhjkQhFethF2BHZq/WyEBhnUFhl1F7CJ9bJNRLM2FP8yjP/N+fVqwTsCpftJ7q0iNjh\nODOk2CJHnCe4zNnSLQJ3W+ycChHwlDll38KjV1hJpflO6hl62eZs9QanMzPc7Jnipdhz/Nv230SR\nOoyxyBFxjk+3v8NTrTdZjA9glQXGt9YQeixMRFodjW8rn6SCj+d5mbC/hG7WCXYqGH0yrbaEXLaw\nr0NrWSb3S2G+2/sk03tT/JPrv0Z9RGU5NsC4uYAg2KhSH0eZY9xe5CnrNQJ7LZblYTa9aY4zg06T\nGj5GWcJPtbvHJQYhu8RRc4Ej5UUCyy0CN9fxXGyQT4TwUSVcq2GVFTbVNEvyKDc5TY44l3ib81zj\nOueQbYOfFf6A9558mOuc444wReFmL/WqD5IdhGGZnfkkX37j5yElkBjN8vTJlzkuTP9QoP3DzuuP\nyqSzKYQvnuDab4aoZSHAPlBLhz5OOVZ30M/NKbsDe463Cd/LIzvp8PC9ae/uAKRjjvesu/o513eK\nN7npEzdd496h3aEyHA/e7SU79+LexqzKPvi7teHuZ3fLDZ1nVQ99N2vAvd4Q0i9dQPqjG5h/1UAb\n+L+AXwVCrnO9tm1vA9i2nRUEIfH9Ot/iFJt6H2Pn7zGsr+AxG0i7Jmv+QV7p/RS5XJywVmJyfJok\n20iYlAhjTtmkh1d4tOctjIhIRfWjDzY5p1+lj01ucJrlu0f4D8s/wd3Rc5wMvM8gi9zhBJMnZ3g6\n/jqvpj6BGDCZEu6wGwljCDISJguMs8gYGdJc5F1SbLFHlM+kvkrILDMhz3B0dZF4uYh+tMU531Vs\n3WZMXkChg9mReS7zKlm9l/nkCG0U4uwwwlI3cGlLYIJti8QaBZ7cfYdaVGPGf5SbnKafDby1JlMz\n85SPhWjGdS5pbzO7Mcnc3gmGjq7R1BTKok7CyJHT4rw2eIm0lMFCZMtKUdRDgE0VPx1RgZaAVrJQ\n3ze676QXQRgEvWPQu7vHzwT/iKL8DRLJHeohFdVsEC7W6Gg6gUCVa6SJtkoEKi3kukXd62WTPuY4\nioGMiIWJhJc6aTLdslClLSbmlokoJYgC5+BbqWd51z7PLwn/gpy/lw19kLBSwEuNXXoIUmKPCC/y\nefaIUWqFebH245TkEH61ypP6ZZaGx9kxErQ9MoHHaxhDKsszRzDaKqVsmDflp7n1znngN/9CE/8v\nY15/VPbJxCv83Ol/QTVwD9hXezi8tVsy564p7XieuNo5FIlDTcA+MDo0ixO4tPheqsExZzynrQOQ\nnUNtnEChoyxxgN/h4R0AdjInYT9r053Z6A5sOmM6aevOouBeTJz+7sxQ5zod9kvWSuzvRXkiNM1j\n5/4ev/f6EN8k9n2e/MHbnwnagiB8Fti2bfuGIAif+I80PRxn+MBm//uvINsGvd4tOk8NUrhwgo5P\npCr6mNk+Qf29ALq3RXGoB9PS0PQmUqTDkfQcut1kxLvAqjBE0+rB8oAgdS/VQaVQjrGaG2VpbIS2\nDDoVSoTIxpPMx0epodNj7xK18mjVFlXRz7bei43wQQBxkTEsRKLsoQQ6yBjs0sNVIUhUKDAiLJBS\nMhxRguzSQwcFn1VnoxqkgYaATZYkKh00WqwzQFvXiacKqHaTQKOOIpi0hTASFl7qhCgRkCuYITB0\nEQTQpBZj0iKqNMsk08RbOcS6jahbtDSFvBomQg7ZMrEti4Idpm0o7EndXWRsSSIk1fAoDSoEmPYc\nZ/zEEkPhDRSaHDUWqPp0Sv1+dv1RGqZGqphH87UJBMr34wGlbh1xr8qyPsg96xiZbD+SYDKQXCVm\n5glZFSJWGU1p0xZUtqUEd7Upir4whOB26AQNPNTwM6cd5YZ2hk/zDawdmXwugZC2qQUqVOQADXSK\nQohNoZ8B1hlhiTEWyPl6KBIgILWZHJhG87fR7RbL31mn+tJ1NkMm9vL3g5A/2/4y5nXXXnUdD9//\n/ChNYnhzhWfe+ibvFdvkOAh+bo/3wxQcTjEo9wf2KQLHi3YA0p1E45bkuZUcThDxcBKOA/7umtkO\ncLqLUx0uQuXui2tMd3KP25zAqXMd514d2eLh+ieHr+c8g1unLgOhQo6Lb73Eq5vPA3HXCD8qW7n/\n+Y/bD+JpPwZ8XhCEF+jGMgKCIPwbICsIQq9t29uCICSBne83QOuzv4HdaiE9PM+s6uW1SpLwRAGp\nYFC+2QNfgWwgTXYiDW0YSizxZPgVnve+jE6TaSZZZ4AFc5xSNcSeJ0rY093ZvOCPICYslFAdUwMb\nkfNcR8Rikz5e4Ov02xtonRaeeZM9NcHN2Cme4A38VLnCBb7CTzJsr/AL/C4b9HNPOMYC42wO9tFj\n7/L3xX+EQgfZNvgmn+qCi7DK/yN/iT5pnRd4kVucpmnrDLJGhAKJ6A7pSIZPZN7C36ix1pfEJ9YZ\nsZd5gsscZY6R6DL20waq0EC12ywIY/yN/j/h5/t+DwsJz3oHLWOSOR7HUKXu4sMeEbNAf2uT37b+\nCzbkPk547lAXvGT1JH2eTXqT2yzY4/xjfo1ffuR3GKxsANCQdXY8cdaGBpnlKPWan/7CDjJtQnaZ\nz/I1TE1iQR8kH4txlTNcM86RvTFEWspwJnmdn2t/mXPNm0gGzAVGuB06zvXz53il9hw3m6cB+Gnt\ny3xB+Pc08HDdPsdl4QlOcYvybIT860lKnwvRM5bjhO8OqwyjqW16tW0+y9eIscuyPUKpHaJgRxj1\nLvMw7zESWSb52BbfCH6Om0/8T+gnyhjrOu1z/+sPMIV/NPO6a5/4i17/L2ACoCO8LCJ+o4Vo7XPP\njnTNAR2Hs5XoPpyT3OIEAp162m45nlPCFdcYbmrFAXzn2PnpAPjhvR6de3MWACeg6CTUyK6+h81d\nyMoZS2MfXFXXeG69tTspx33srhR4WKLoePLueioWYNy1Kf+KQesDzYmzxfCPyoY5uOi/9qGt/kzQ\ntm3714FfBxAE4Sngv7Nt+28JgvAbwC8C/xj4BeDF7zfGpcnXMSyJmt9DXKgyLC0jyx0qoRDZk3X2\nvhRH0GxCU3kes95kRF/CI1RZYJwcPd29A/GhNTtYGxqB3hoTnll62CU+tIva02EhOkZE2SNJFgsR\nnSYBKhSIYAsCXrlOajBHWlrn83yVaSaZ4ygRCoyxCHWRf575ezwSf5Oj4TkypJAFg46gkCXZXQRa\n/cytTDFtnsEn1MiupbBTNm8PXMJEomb4eLd1kWF9hS05xW1O0hPZY5RFtoUkSbKEzTKP1a+Q1XuY\nVSYYFxcYtlew7a4OOiwU2SNGxCxQifjY8gYwvbBHlGVrhKHCJrpl0tZFLqhXOSLPcYpbpHdzdGyF\nhZ5h1sUB1GaHX939LRRPm3fi5+hhF1E1u5X08KLRRtUKbI320FI1ds0o5/ZuU1C8zEfGSZFlhBWm\nhGnq8Qg5Ic5rxlN4lCYVK8iTzbf4rvU073OSk9zmb2v/GlOWkDHYklL8SfsL7OTStH0yE5FZwhQZ\nn5jlmeg32EinMHSFO8ZJZu6dxFRF0hPrfI3P0jEVip0Qy5kjRO0CT42+RkvS2KSPU9yiNBBBSzSw\nAxap4e2/cO2Rv4x5/cBN9cLoo2RrBd5ff5EKBykC6IKO40E7PK3ThvvtghykORxPusHB+tvOeOKH\njOFIAW3XeceDdnhkm30ZnWMO/LlpEPcC4JRNdS8UOvuJOY5H7Va9uBNvOq7rfxgN49y/W3fufp7O\n/b+DI41cBAoDJ8D3OCy9De06H7X9MDrtfwT8oSAI/ymwCvzU92uY7N0g3+khl+shrtUZjq0gYFP0\nVLE0gdpTPjpFFTFjoQ40UYNNBLpAtUscC4letgkJZTqSTlAskzSzPNl8A0OSyQRT6GqDtqiyQwID\nmRh5vNSZ5wh+oUqftEmwp0q4U+RM+Tavep5mTRkkTYYB1qnbfhasY0i2RYIdzvI+Q+0NDEthVRsi\nJJTQ7SaGKbO6OUIr7wEZfMkyGSuN2VQwDBlVaHUDdR0vM80pHtPfJKFkkTCp4cPTajGc26DV0igK\nAeSgjRrsoPua+KniMVqYhsKqOETJG6IW8BGlW29cwWDLTmMj4pWqnBXexxAkBoR1PLbBqjXENc6j\n0+CYPcezxkvcVo6z6U+iU0PGoIOChwYhSnRkha1YLwI2kmFRtgJs2v3MMUHnvvL3lHDTHdS5AAAg\nAElEQVQLI6mzzgAVAtyTJkgrW5xVb5KXIrQtlQljHp9UpaPJlAgy3Z7irfLjbGRGmEjcZSrSLeIQ\nTeSZit2iWAyRX4/TqPjZLqeIRvMEqFAkTMZMs9QcZcDa4iHpKhd5lz2itFG7Gz+Ec8TJUseLLv1I\n/oF+4Hn9oE30iQQ+EcBc87C+frDGiBtkNQ7WAHHMoTvcVIk73d2dii5wkJ5wxnYn1zh9P4zWOByo\ndLd3PNvDyTbuSoDuazr34VaIODvJO9fE1catKXerZA4nD/EhbRwaxXlL2APk017CfQHKWRHLvQJ9\nRPbnAm3btl/jvs9u2/Ye8OwP0q9EiIX6OPl3UniSbaRHTfT7Of1NdDJ6msqyn+y/G+BP/tZPMPDQ\nCg/5ryJiMcgafiqk2aLtU9GOtZCFDlqrzcXt9/nn9V/h/xT/GzxDJQKeEkGhjJ8qYyzSwMM9jhEn\nx6O8RZ+ySbheIpStk++LUw35eZLX0WjS68syMT5NQ/QiY/AL/Gt6KiXWG0P8w+Svckq8yVn9OteO\nnaO0EGT7jQF4AfSeJn6rxq3cefqVdT6fepFhVrhTPsPLmb9BMR1FDnUYZplFxmg0/Qysb3P0xiJ2\nCcRJi6tnz3Bl7AIzHGe0sU6oUedPI58nJ8a6hapYYoA1LohrfDf2DBInOMv7nGrcQTObFD0BZnom\neYvHeEn4DKe4xaC2TjMlgmyh0SJMkTJBmugMsXo/hTzNJmlGWGFUWuJW4iS3hVPMMsE9JhhjiUeE\ntznWN8MKI1wVHkKlzZ4aJhuNMirMM2SscLF+nbv6BFekC7zJY9ysnmd1ewwrK6F622i02KUHCZNo\np0BpNsbynXGkTYP+n15maGLxvoJnj3vmce7VjvPp9Nf5nPerjAqLtNDIkmSaSbL0UiLIDr3cap76\nc073v9x5/aBNDbUZ/blZ4u9u0Pz6vvLCkfa509ZFuh6je5Nchw6ps++BeziYmAL7QUC37tvxbnG1\nc2iKw9yw4WrvliO6A6QOqOocDBy6AdgB/vah352f7iCn41U7Hr4znrNguHXdjv67yb533WZ/70vn\n3h3qJv30OuPn73HnpTbNIh+5PZCMyIX1CRoeD2ZVIrPRz7vTjxMd3EHzNzGQMS0JcchE/uk2nvEa\ntU6Ad+eewJOsoIfqqLSYtlqotJHEDorQoaF4mO8Z5pRxlf/F+gdEGiXWhH5uiie5M3eaciDCzkiC\nImHC9+V8i+IYGV8/oVSZjJ2iXveieNr0C5tIgsmaNMj47jJD7TU8iQay1iYtrPM3hX+LDXjsBv9Z\n51/y9tQMb/dcIjmYZSSyRErcpCeapyb6yAopxlkk6tklkdxg2nOcfnONHzO+ikduYpoKNEFSLYgB\nKTD8Ml6hzqd4hcnKNJ5CgyP+OXSlnzbqB3VM9qwYZ3J3CMgVtFiNafU4RSFEC5WSGKKOB5kOKwzz\nDfHTbCj9JIQdhqurBFabLPYc5e3eh9mml+xeH1REvtD7R8zuTvI7a79MPtLDni9KSQsietqs6wOs\nq/2cFW6QJsNzvEILjb7WFr2VPar+EHfUSbKeNJtyikV7lAV7nIIZIaiVeWzqNZ4tf5tH3n0bdbLB\nncAU63I/wdECpyJX6a3tsJbqY35ugu3XB7j03GXafQqy1mFbTnBDPMMC4909NelKCI8yz6X2O3j3\nOrylXuSfPogJ/DGxgFDh8+qLDMi3abFPYzhcs1tb7XiSDtXgZEy6a3y4//kdIHQH+dwZhg6t4fZk\nHYmgw5u7sxNhf8ccSYCmfTApRnCNq93v7+adHWB3QP5wFT8HpB21iJuWOZxZ6TyXU5vEqa/ipSsR\n7EYK9vu4i2MZwCPy26TUCisM0/xAY/PR2QMBbToCkscEFUr1KPV1H2KiTdKfocfe5ULrGtlIkqWR\nYeSaiVlSKLd8mBZUW14qxSCCz8bvrTDAGj5qtCSVml9nVJjjlHkDf7nFVescu0QpNWIIqomPKi1U\nFDrYCLTbGpYgQ9jCqIn4OnUGhU16lW1sQaDWDjC6uspAfZ1cJExD1RBlmzFx4f4rusaUPY09CIx3\nx0+yTZQ90oEN8sQ+2JrLFCUUrc222NsFHnsQxTAJCA0aYQ1hwEaRDMw+oasjRyRKHr9VRTBAsk16\njDwes0lEKbIu9nOPYzzduYxGi4bgYU3p/8CDjeRK9NkZRnpW2BKT3Gsd515+ktOhGyimgVS9ihCE\nImHe5SJZo49Au8ajdpJ77eN8u/oshlfBozQIiGWqmh/bBo02k8wQt3Ok2KJZ9+BrNhENm1CngiIb\n3FWP0RI0LFtEwCYq54kFCpyPvcfx5bskijlyZoQtkizJI9hJk77kJsfsWfJ2iPJKCGFXwtNqgGSi\nexpsyl0dvp8qOXqodfxolQ5eT5NxYYEjnVXWrYEHMn0/LuYxGlzcuEp4d5U7HKzW54C0OwXcnYXo\nBiHYB0U3iH4YYDvjH9ZNuNu7VSVukJcARdhv45j7Hp170QWo2V3gdis+DuuwD1cldAdC3QDv5DC6\nFzA3aDttne/cfLn772EDR3NzJNZb6EYS/rqA9iODb3CjdZZafwRjV0NuGYxYqxzjLgP2Ok+X3uSq\n9BC/1vO/UZ6OEqHAmUfeQ1Na5LfjbL03gu9kCWNEZoVhesgzaK8zZixiiiKr0iDNsM4SQ+hCg797\n9rfpEzaR6fA6T9LAy7I9ylOlt4iLOxRifga86ygNi2dzr7MZTdCRZD63+008t5u0azLtUyr1oIcS\nIW5xEh91IkKBm/oJbAROcJt3ucg2SUKUmOE4aTI8xWvkiLPQPMJmbpijiTlK3hC/r/0sP1n9Uwbl\nJbbO9JAo7hHqVGj2SFRUD5ukWWQMOSCgSTO8qTzKVGOWZ2qvsB5JckV7iNfEJ9lJxxm8v9O6gE0v\n2/ipcubaNC1DRf90g5viaW7nz3D71bPsnE3QPqLw/JFXGNPneRQ/8xxBi7WQoyZ/JP0k0qDFifR1\nSmKYIXGFU8Jt3hIuoQvNrnKDZXrZZthaQc+YNCwvq6NpLrXe5lTjNm/4HiEglGmh8R3hGeSQQczO\no4kN5kbHmB0a564yxQzHWWb4A3mlhIFfqDA5dYcz4zd4Qf8aq9IQf+r5cbJCEhuB48zwMFcoVKP8\nv9O/zO2hU7zV/wjn09d5b/lR4LcexBT+WJhUtQi/UsO33qUW3Zx0nX2P0c0zO8DrVoPAQQ/Une7u\nAK4T+HM4Z0fLrLvGdrxTNwfu5oQlwLAPFqOCgyoNBZBFUCQQDFDs/cxHt3LlcDq7w807GzK46R1c\nfxfn7cMBfbd37oznplvc5xzzXmlhbTYQaz9qyd8PZg8EtG/On6daCHKm9xq7tQQrs6Osn+knySaT\n4jTbvT2IQpvnpZeZHj1JA522qtAUNAhYTE3eIBrNowt1angxkckLMS5LTxAXcqhCG11ocqp9m+Od\nOVb1ft6QRsg3Y9y6fo5eX5aBU+us+dNk6aEghPAKNQRV4LXwYwyXVghZZTKBBKELJbzNOjGzRKaT\nZFvtZYeurtsr1PHQwEeNDjKb9JMkyyTT1O/XK8sRZ5gVEmqO0egy08oxrrYeplH2M6XNkvBuUVW9\nEBZoVxTCSyXG4iuoPR1Ew2assYqn3mQqMo2idXhfPMmq3I+IxWeEl4lLOWQMGni4zUmClPkEr+Id\nrBMv5Hnm9mWyQ2m2gjv8+Nk/Rk60mCjM4XmzhXFUIDaVZ5K7qFJ3V/gyQSpykKIcJkuyq/4gSYId\ngpTR7SYpe4t0M4u/1CLr7+Ua5/njvZ9kwnOPlJ6hLmjY2KhCmyd5jZagobQNJrKL4LVYCQwxW5xi\ntjZJ21CYSN7FnFf51hsvsHMiQXpsA6tP4AoXWKwdoZTrgUWoFSIU1TizoRO0fDolT4hKxUcoUyaW\n+BZjPfMHVNL/fze7Dq3LNur94oZurtgpvOSoKST2AdztNcLBzXodsHIn3ThAb7CfdGK5xnD6OfSH\nLEDb3gdZ9wLgDkweDpg61zNtqJlg2wdT5N2FnxxqB9czub1vZ0x3G/d+lXAwQOlc393X6ef2wAEa\nd6CybGN99MIR4AGB9la5H1+5ysljN9krx2gtauzmE6wERhgOr7CsjKGIbR6SriIOWKzYwxQJY9ki\nfn+Vo0dmuru402KHBDYgCybvS2eJ2XkS9g5Jshw354kZBa7bp7nBGdatAZZ3J6ADomCx641Sx0uG\ndHeii02yWoLoXgHBhu1AlNqURrBTRaqJ7Fi9bNDPBl3QDNINcu4ZUQpGlBVG8UoNdKVJnBw1fFTx\nkSKDV62jqi3yhNis95Nr9lL0hihrPir3RVeeRhN50WawvknS2MZjNlBKFtV2EH+yRk6PUZRCdIoq\n/WKGMe8ipiJSEf3skPhAvtdC417fBHE1T//6BsFWhWgsz0OTVwGIr+TRZjoQkQhS5iS38dAkSh4B\n2CLFMqOEKLHWGWKmM8WQtkzCyJGqb6N4DRqmh3LbYrWnnxvCKb6df5YF3wjj6hz9rBOkTIw8w6xg\nI6C325zJ3KHc4yXn76HQipKvxNGaLWKxAqViiNuzpzE6CgGxQrtP5S4nWDNG0GodKvMhKstRtqU+\n9KN1xHEDqw86NQ9GUWOoZ5VQuMi/fBAT+GNhIkZLITcjHKAHHABTXefcxZ0coLTZV2w4/R0wdSgB\nh5ZwVBkOCLqlfofVGApdztqw92kY9z249drO/bq5cxvo2F3gdtcoca7vBn73MzvHbr334XoizjkO\ntXe/eTj34JYeHlbGlDZhBwHzQBTho7MHAtqTp25gWSJJPcP41Bz9yXVefOOL3CqeI/tEL8XFBEfV\nWT4/+cccZQ4bge9YzxASS+g08FMlRh6VNiVCPM5lkmT5Q36K79hPU7P9TIl3aWtf54J6FUSbODkC\negX7GZGgWKCNSpoMJhJbpGihMtW+xxcK/4FXok+T9ZzlhHiHDGnuyDE2Av10BIU9IlznHCe5TYot\nVhjm/cZ5bpbOUjcDtAM6YtREoUOaTQZZQ8LkJmf4p/zX/Cx/wCX9Xb6d+iRHpHsf1JhO5vL0Le8g\nb5tI2xae2TaCx0aQoRwI8nXjBQRMLjSu8sy73yGtZ2HSZi4yiqa1mOIuIyyTJckC43zDfp5QpMSX\nUr+FrVkEqFAmSAsNWbMw0xJS0CBEiVPcYpFxZphklEUUOgQpMcIS1UqYr+XOYfZJnK7c4XOz3+Tr\nU89yNXaeEX2ZghRBwORs8l0qUrfUag0fU9whSoG7nOAktzjemUbPNVjXU2zLcbzxMj69QLumUVYD\nGA+JBAd3KX85hjhnoT3eRqVNwp/hkfEK7289zGZ7CArQe3QT3+kyGdLUCiHUTpu0sMUkdx/E9P2Y\nmIcWAtO2zAAHa3Q4oOUAqaN/LrBf+8MNyM6uM3BQ/ud4zoc9UyfxxPG6ZbpBvA/2ZLQOgj6uMdwU\nBRzkpe37YzoLi9vLd6eVuzcyOKy3lunWXnGUII7U0QFhB7id53IHTd10iEOzOH8XN5e+C6wg0yF0\nf6QaH6U9mO3GFA+a3OQexzCqKtvVPgqxKJ5olbiQQ+gVkcQOeaJ4aJAmw8PCezTQ0Wmi0MFAptwK\ncWPvAg2/j77AGlUCtAWNGj7qeLkunmWVIVYYJkSRY+I9kv4sKm0EbNYZoEgYEasbMJQlMv5eklqG\noFTARqCBh4yQ4rL0ODpNetnmBb7GIGv4qLNJH/WOD6sl83PB3+NM/X2iuT0u9z/KPd8xtuw0w80N\njjPHz2p/wHnhGorYwRAlrlQucts8yyPBNwgEStiKDdMg9tvdLFkbOjERqb/Jo9qbeBebHJ+fI+3L\novU2Kfn8LEtDZOlFxmCSaRQ67BGlqWtAkLvaFEdKi0yac1TDHnalGH5vFfGYhVZu07zaZmNyAM3b\nIkWGDQZYZvgDqmdV7KetSHjEOoZPZH5whPe8F2iIOglxm3mOkCfGMfEeJiI2AhIWHpps55O8/d7j\nVEbD6ENtkkd32A1G0YUWPyP/AfO+I9wVp8jlU+y1YnQ6OqcvvM9YZB7Bslm+PU6m3oeVkKjGfHCi\nAzmZkhRBLhscic1BWCRm5nlHepgUW3TTH/46WAwbvUsd8r2aZsc7dCiKw4FFd7BSdn3n9lIt1zk3\nzeB41hoHQdOhHhzAtgRo2AcDf05A0Z2k49ZkO2M4AAkH3xJwnTtsDgi79dXuolKm69gdYMR17Dxr\n/X5fB9w7rv4G0MSDxRG6epO/BqBt2wKSZXKneZK9UoJ8NY6RUAmFCwQ7FcSEhU+q3N9IoI23Uydd\n3WLHFwfNRqVFFR+bnQHulk6wq0QZDcwTI0+vsE1AqCDTYZVhluwxEmYOv1BHl5pMMItT6GiZEfaI\nYtx/7Iais6r0cbx1D73dZEEbw1Nropodiv4wAbGCnyqf5htIWKwxSBsFWxCIyAU+Gfgmj7beRsoL\nvJu4wLJvlAYePmm8ziO8w2fUl/AZddqCygn5Dt9qPU/T8PJF7x8SaJYx9wTkeyD00pX/bUIzoGAO\n25zjGrHdEunlHWqf9JEd6CHniZKll7vWFJtmH6rUQhJNtkgh6SYmEjc5xX/S+BOOGvMsh/oBC8lj\nUxnzod1ooS5Y7Iwl8HvLJK0s20aKLbGPu/IUG/RRUsMkA5t45Ro1r5f54AibpGlaGqvGMJtSH7Yk\nMM4CQcpAV4dfNoMsFo/w1rtPgCLgnyjRO76Np9kkUclx2nOTfnUd2TL59wvHqdQipHybPH7uMqFA\ngZXmCPMzx8mU+/GerdJJCMjRFoZHptjuQd9pcS52BbwWzZaHb2efI+3fAP74QUzhj4FFsUlg4TnA\nwzresHsTXDdt4A7OuXlb8VB7N9h9mKLEXYBKONRWBEShe67FhwO74wUfLrnqTm5xS/QO1xpxSwTd\nJvC99+qM6+bT3bpztwfutG3TfXtwJIOO570fuPUAY8AGsMZHaQ8EtM/L1yi3QqwuH6Xp0egZ32Jv\nOcnWbj+lTpje5Aa6r7vTiYzJam6QP736RXxni4wMLjDJDJukWVf7EeItTnpucIErlAgRJ4dGizd4\njCBFTlp3eaL8Dm8rF/mdwN/hEu98UDZ1lSEKRMiQ/iDNPcoegUIDzWjRk9plbH6NofImrQsaose8\nnxYvscYgNznNbU5RD+gEfHtclh+nmvDRF95kTw+j0sJLnZe8z3KTSeJijhf2XiFh70AcToevI3cs\n4o0i/q+3EF+yETLsZxC8DRUtwMbpflYZYnxkhViwxM3UJMvaIHmixNhDaXd4u3aJwcAqitrhGuep\nEABsCoQ50rOIZtcxJYk2KhU5yJXwaU71zxD2lZEVkyJhBBOe230VzdNhM5Kijo8+fZOL6nvcFk90\naRy2OMc1rrQu8s/2vsSnIi9xzDvTlTUiYSCTIc211nlmrCnqQz52IzHe5yw54nwh81Ve2HqZV08+\nxlJwmKrlw9iVmPTf5iePf5mT2i2uN87z1dxPUG0HiYVznD5+hTV1kK1CmlLDi90SEGQL1W6zZAyz\nuHGU5h/7Gbq4/CCm78fEvEAME/nAK7xbqeHQH7Lr2FFJyHRByPFAHfVF09XXDZRuD9kxwdXGqVft\n0BCafVAiCPsLgdPG7cm7gVi9/3Hu1V3NT/yQvnCQv3YWLT7kWrjaC67jDvtb9prs12dxtz84hgyE\n6ZIlH609ENCe2zlGeSdCqRUhGsgx4ptjL1lkp5akYMUYt6scN+7xbOdVXrI+xao0xPGh2/T7V+lj\ngxh5VhmiIev4/RU6kkKOOGWCHDPvccy6R0X205vf5fzuDcZZJhvt5UhgAQGbDfrZIsUOCTooqLQZ\no5uFJ2OAaqGW2vRezqOrTaSEwZR0hxxx2qgUCbNFmqoR4Pnit1jX+rjrneRG4RxRqcgF33tcEt9G\npcWscIyWpNFEp2MrCNsgWjZmTOIh+xqhtQrerzWQsBEeBvrpzriF7k9fsUFstkRm0KAQCrHi6UPw\nmHREhSwpohRISRnOadcJiFXAZohVJrYX6LF2sXotJpR7BO0SqtnG32jQyun4ZmoEG1U8vibH9uZp\ndxRMSWJOH6esBhljCRuBkhViujrJyjtjtAIeXn1shzAFHpHeYci3ypC8iojJCsN4aNDDLh7q+OUq\n8egub59/HCnRQcTiCPMkAllE2yCkFO9TUjKTI7cZ0leJe7ep46GlaESDOSKn8gTVIqqvhWUIoNkE\nhgqEjBIJT5a65KGFTqepUJ0JsM7wg5i+HxPr+ro2woGAmsNR+9hXPTjA6045d6eUu6v3Od46fG+t\nDjeN4VzTaesUaHIWAMezdatHcI3jjN/gIKXBh9yju1iUM66bSnGP615YBA7ubOP23h1ttkPzOAuG\ns5C5qRm3F+6MZx5guT9aeyCgfa84SeP/I+/NY+xKz/PO39nvvta9t27tC1lVLLK4k71R3a1u9SLJ\nslqypRiDxFscAzMJkgHGg2T8h8fIAGNkgJnMJAYymWS8JPY4tmK5pZbU6n0Tu9kkm/tSLLL25dbd\n9/0s88flYR2WW7ZgWeyG9QIXqLr3rLe+er73PN/zvO+2j26/itddpV9OEenPI5UNSoUwIbHIuLnC\nkfYVft/4JXKeCF889F3m2tfwNuusu4YQBRO32GRUW6OLwhojALiNJnuMRVqCi/7tHFM3l2iMeBgI\nbvE5XucGsywySeEuX24X7j9qXWSKWyBAxyfTycoI10Wqj/ioTbqIyxkqBMgTpYaPFi6CRpWvVf6c\na75ZMlqM+eocW+IwogCTnkVyYh932IufKgEqPbVLNU7L0CgTYsJYZnB1G/m/6PDLYDwr0tlW4I6F\nlRZp7nEjaiahjQrR/jzNoIuUHKO/niEhZdhwD+GxmgxLmzzk+5AQRTpojLHCV4rfYp85TzXuQkJH\nsbqoZofR2hbaiglvQD3mpjXjYqCapi1orHuGeDXwNIJsso+bAJw3jnOtdoD6RyHqMT/NRzW+wl9w\nTP2Ip9XXWGQPC0yxTT8J0kzoyxxsX+Gh1jkWzQtYkwJuocl4c4U57QqJWIp8LECSFGkSrKptjk6d\nI0r+3t+xpAQYCKxjHhAQBZM6XmRdx0cVPaDS10wRMMtkM3HEoElUyVEnTGnj01Pj+Ccfds5q3XM4\n2uBr268l7rd8O3lcmx5wtiLbzfE6K+XtBkKnosIGchvM7SzXDjuTdqpHLHYW/myJouo4VtexvTOb\ndlbx+2HZs12HxKnJlndt55QsOvtl7q5D4nSU2rLB3ndpYX3sVTz4eCCgfWjkAtV4gHV5mIamscIY\n46zgo4qFQB0vN+Vp/tz3JURLZ1hYx0BiaCWF1u3w/r5H8Mp1jnGBJCmq+GmjESPLgJRCpc3+7g3c\n212aq27OHj6CGO0yxQIv8SVWGCNCgRYuZHRctBlubTHKFlvuGGU5wObIADe/up+G340idUiSIkSR\nIGVkdPZzHU1pIw806UoCmtQi2b/GufIx/mHmPxEayNCnZDnIFWR0avio4ufVoc+jWF1OCh9QUoM0\n+m5zYN8CYkKnGnWxEhtBmjJodTQuykfxSnUGlQ3i3jQCJlZLYuD9LIlgnn2HbuI3mpyVT7DgnmKK\nBWr4uMBRZkZv0bUEmqKLQTYJC0UasgfRqqJpTZiBqzOz3Ng/TdhdZEGa4rx4nFviXp6xXuOY8BFv\n8DQepc7PxF7i2i8eZFtOkDP7yIhxrjJHjifZJnm3SmCbDYYIV8s8cvMj3DeaDDRyzDy0jCgamLLA\n9nSUtCfBGsMk2SZImTFWCFFExKKFixo+tlqDXCofBdnE56oS92V4WDtDa8PDiy9/jeqlCFLZwJoQ\nOP7CB4zOrpP+xRE6JRf87oMYwZ+GaGJRwkS/J/Gz1RZ2BmvbwW2ws182KNmqCRuonHy1rdhwLnLa\nFf92AyDsGHlsPtjNjsnH2XnGzpptuLPpEBs0nYoUJ/Da53J2udkdTqOQDbJOy7tNfwjs9JKDHfu9\nwA6PbU8odlVCe2LbWZTVgRL392//ZOKBgPYe921GXGu8ZX2WhuDGZ9VIdfqxRHgkcJonxDeIkaEk\nB9BoUzX9XDSOkPDm8Jk11oRh6vhI3DWybDHABkO9TFiMkCdKG436oJ8yYbb64oy01hnJbPFw3xn6\nXDlMBAbZpEiE8xznbekJFthLFQ+T4iIBdwWXu8656gny5T5OBd4hKuUJmSUGjBS6KPU4YpdChAIH\nuULBFWFNH6OsB0nnYojN6xzuu0SRMCo94C+FI7jqbQ6vXCfuS+ML1al+2cXyvjEKnhB9apZtIU5R\nj9BfyxBOl+gr5Im58oghE1MV8ekNskKEtJRAF4oUpRAFK8JQKUVAKOMKtlhzD5Mhdq+6YbBdwZNv\no+SN3n/BMCwM7uW96GMc5hLz1l4uW3NYCKwLw5zmMdIk0EUFReviHy7TslRapotrpYPkhRgDwQ3C\nQpExfZWZ5m3QTBJGGl+tjsvdwRVo4wo1SUn9bEpDbEhJ0sRpo+KhyVpujI/yJzk4dJE6Pm5WD2AE\nBNabI1QKYTx9FVoZD6m3hkkf2cTKS3Red9H1qD0aKQKa1iXuTROf28JTrZJ+EAP4UxF5oIFA675F\nNjvTdfZV/LiKds7Hf3a956RanCYWuF9h0eJ+YLW7pNvHdQKrk1ZxTg72hOPUctuZsZMKsY/h3M/a\ndTw7C3dmzLvNM/b2dlEtW+Ln5Lidenf7/LbhaEfZ0kJgiZ565JONBwLaMbI8I7zGtpCgSBjN7HCm\n8xBJcZvnI9/ns/qbGKbMGeFh+swcBTPCVXMOBiAklSgQJm0m6CLjFyr0CSp5oiwywaIwiSa1KUkh\n0vviVKcDjHbWCG7WiW0WecHzLW67JrnNXvZxk2vM8aLwAt/QvoqHBn6qPM/3OcRl4mQo1Pq42T7A\nHt8CkmTgN6sM1jepSn4yaoyqEiAgVjjIFRaYwvKBocpcvXkUoyUT6KtQxd+z4guXCPlKhOsVnl16\nm25Sod7vovSCl/PiYQpE+RrfYMMaotoN8HT+e0SvFLEWQB+QEMYshLhJE9iQYjbXBWAAACAASURB\nVFzmIKPaKhkxStvUGCutcUi8wlzwMv+RX2OBKea42ms/1lLxprqYDYkuEnLSIBOIs8QEU9yiaXlo\nWm6GxXVSQpIXeYExVlDoUre8mJaInyphocR6eRxLVDgWPIekm4y21nmq9i66CKYo0HXLSHtMrIhF\nfVDjtmuMq+IcDTw08CBi0EJjITvNK7d+Bi3cpCD08Ub6OVxKDaMlI5REIokiFC1SL49yOXEEsWpi\n3JTgF4Cne6O1G1AxahIhXx6vt/JTBNo5RFpoNO+jQQR6We5uILfBxgYzu7Z217GtEyxhR/5nA6kN\navZioJOP3r0I6OxF+XHgZ08S9iLp7sVFlfsXNu37cBp7nBJDuL9s627HplPu59zfCfTOet67eXz7\nacF+ovDQQGCBn5raI8uMc5rHyNNHEzeCUOVZ92vsF65zmEusSyOUCeCnylfLL1EmyBvBx1kVRykQ\nwUeN9bbGhjnEVfdB9gvXeYo3GWKDm+zjj/j7CJjEyDHZWuTYtcuMFjYQJAvN7Nm122i8ydNc4SAq\nHdx3TTthiiRIU8fLn/J1YpFtfsG8RFLaJEaWZHMb96KOt1NA9ZlcndxH1tNHhQBDbCBisCkPcnji\nPH1ijjxRfHdn4yscxE+FkKuIkLA4GztCNhBhn3CDQbaIUuhRL9Z1Zo15fN0aWNAJKmydjOOKN3Hl\nCrz3x+BOrvIzriLWmE7OH0USDC72z2EJBoNs8HlepoYPmS4hiqz7Bnl5ao69xh2mjQUGuhn2u6/R\nQCFGlrBQZFhY5wgXkdGp06vbbVvkF9p7QYBD2hWeSryJKnTZZJBLueME9SqdqMKouoKqttmaG2T/\newuMX1kl9Jk6UwOLuAItCkRw0SRECT9VzkcextwjkvdEsVQYcS3SdqlUW0FaLZM58yryVJvmP3Oh\nJwW6Cx6so0Lv2bYFeOHCGye4WZql+mgAy9wtAPu7HC1UykyiEwds0ZENMl52KAYb/D7OfQj3txiz\nM1C7f6TNl9thg5zBjsrD6Vy0+W4nmNqxW1ttA7Gz8qCd/VbYmSxUdowutr7b6ezc7X50ZvvOCcee\n2Jxdc5z72aBtu0Xt9QGTnhLb3n8YUNBRKQM+Pul4IKDdQWGJcep4aOKhKygMylsk2hlGWlu86nmO\nlNLPuLXMltIiYFV4znqVl6wvsi6MMMgmd+pT5LoJLmmHcYtNomaea/p+smIcUTbpZ7tHDUgN6n4P\nGaUPRWtjuiwizRLeWpuNwAhZra9XypQQHVR0ZPJESVf7ObNxiicTb6KFmlzQj3JcOs+ovEbaH8ev\nV9G0Nn6xinDHIrRWxTwi4g00ONi5hrvWxi20UGlT1IJ0ZAUJgwxxaq4A9f4A130zCIrBNPO4adLC\nxS2mmUwvM7y5hbJtQgVE0ULT26i5LvIiRG9DsFNnaLtOW5FIJHIkwymuug+QJs40tzjWvsQ+Y4EO\nKjfUGe7IE6QCSTRayEaXbDvOijJChUCPXxbKJO7mqQYSIiZN3AyzxhxXyIlRKkIAv1DF667RRiNH\nH6vdcRSzy2VtDpdYZ1jYJOwu4fK26HhV0lofCl32VJeoZzO43U3cwQZVzcu4f4lT8ttImoGsdJkV\nr3H9zhzddRdkBDKD/WgjDeTpLq2ch1bXi3UcPPuqeIer+LUq+VSMvBUj4UtRyQT/mpH3dykMZLXL\n4IhFoAGbWzsA5Hw5TSFOUHPat53UiVMt4pQOOi3vTs7YmblajuPZlInzc2cpVWctD7sEq30ep13e\n+Z7TjGOHsy6K0yDDx9yHff023WN/Rzi2t78HpzXffhKwnxJCgyB5LKSVTs/++QnHAwHtsFWkLnjp\notA1FUxTIiPFKLfDGAWN68oBNpQB3EKTq/45Zox5flX/PS4JB2niZpxlrjSPkWkPsB4dxWfVESyT\nb7W/zKx6g6fkN5njKhYCJS3ErX2TbBoJonqegFIhWKgS2yrxGfU0Qa2EiMl1DlDFTx0vq9YI9XKA\nrYujZI8mUAIdvt3+EkG1zKz7BktTY0TJk7S2GTbXCFxpYL2hsDXUz5i2yvPF15GWQZShOyhxOnqC\nnBzBQ4OrPMe6NkwklkelywRLvQVGBCpWgEVrkuBygz0XNnrTuwiKT2dgLQdVsG7Do3efH4UiuJoG\nyU6W2eANXhOe4bJwiCscZLS9xb72HQC+Kc7yoXiMIWODLHHqgpeOW+GccJIMcRJk7unU1xlGwMJF\n667L8jqP8j4NxcsikzTwsMQEbdOFYUioUgdLEkiRpGl6CHfKHKrOI8cMSuEgd+LjDIqbTORWkS9l\nseICrSmNkhRmxnUD1dPkbT6LjM5Id53lS9MYqwqianIpfxQ10sLrLmFsq5gNBU6Af2+J4YFlJlji\niv8o2WaCAwOXWDq/l09BTfoHFpIHwo8JuDfppdrsALJBL1t2UgrOnon2opoz67YX+pygaJcutRct\nbYDEcR4n12xTGzY94qRnbNB1Zsz2ddlgbjdy2O1uVB3ncC5Gqo5tbPhUHMd1LpTaRho7Y7YnMie9\nYgO/M6O3f7dVKa4DYA2AmAHKfOLxQED758xvsiRN8Bqf40jlKp8rvcXpxEk+ch/mSuIAIa3ABHeY\n5haLTNISXbysfJ600I+XBhEKPNL3Hic7H/D5xmvoLljUxlhzD+MS2+SJsk0/Q2wwzjJrjNC3UWR4\neZs/PPjfcNO7j86Axqhr+V43myQpJlmki8Ip/X2sgMD8E/uoBd0UpRCfd7/MHvE2RcJ8wCN0URnS\nN3mh+B28iSK1pxSMkIy1LiFdBCEGGCDeNhlxraN7BBbZQwMPIUoc5eJ9DQ0kDMb0NR6pnKe/lO2N\n9il2VnoC9J4ZTeAr9EZ3BtiAsdwaPz/4bYb8W5xRT/IhD/F9zzMsuPYgWTrvyw9xvT7HxbWHUQyd\nfs8Wj428Q0vVKBNkgyGyxFhgig4qI6wxzhIzzBMjy1XrIC+Vv0xF8nMwcBkTkb2lOzyz/BanB86y\nER7ALdQZq2/QX8ghbRlwB3ydOofUG5hJi5rkJpBvUYgEKfiC9JVKNF1uNoNtJu/WO+lXt3n28e8y\n3rzDkjhBNyjT8mjUTS+fHX0NMQbfbz1PVfHQbSjMum9QDEXo+GVCcgFXofVDRtzfzTB8IqUveNEv\nuTBeb2EX/Xexk2XDTrsxW1LnDJvSsDuzOPs12qBmqzrsz20A3V0/xElX2HSGEyidFvvd4ZQP2j/b\n1Qdt/t0+tj2x2Nmzfd+23dzOzHffY9fxst+HnUza7qxjsdPlB3YmEJvKaRyXacxpWK8IPz2g3XsM\ntzhAkj6xQFeRaQku8kqEpuKmnzQeGpiIxMkgCQYuocUw63TpNQiQ3V1kRcdqgltoEheyTMjL+KgR\nJ0OZIA08SBhUCIAs4XW30MQOkqpTCsSQ5UHqeMkQJ0mKYdZJkmKudA3dUDjZf4Z5aZpm18MLje+Q\n1LYouoJsMYCbFoJgUZTC1IZ8ZPtj4DfRGxLrwUHiQg43bUTVoq9WoOgK0fUrCFi4aRKmiN+sEmqV\nCZcrBK0aliiiKAZC1OqN+jBkAxHK3gB9ShZvpYXiNqAPUuE4K+4RZJdOzJVn4s4ql/bOIUQsPDRw\nyzUsDDJEqeCngp+CEGdQ3qRPzLOvvkDRipDWEhSIoNFmD3fu0iVbDLDVkzmmK3TXXUwnFjC9IofL\nl8h4+ghIVQxN5Fj1I/ZbV2nGNAxB4pY6herr0BfPEWqViHSL1E2NmtfN1kSQ1cQwW2o/MblIWfRT\nJIKISX8nzb7WAqV4mLwcoYKXLjJtS8NneZD8Ou2WC+u2QCfmIZ+Ic0fYg6kK+KQqm/VhimLkQQzf\nT000FRdnR48xuKVicfUvfW6DlQ3WTru7szVXm50FSSeVsNsF6bSA2787M2anxtmmE5zg6ayB4tRC\n71ayOCsLOq/bPq4N4LtrotgTxO5F2N1PE85zO+/DplicRhr7upyFsm7Fp9ge2U9TtiuIf7LxQEA7\nJ/URI8tTvMnlwCH+c+AX6KKgWW1iZGmhsSkMULO87DVvM8kyo+IKGSHOBkMsM86SMUGWGNueBCfF\ns/STIkaGaW4xxAZv8RTv8yhr1ggjrJEb6KM06OczvMNxznJDmuUOe7jN3p61Gz8BKnyJlwhmGhQ7\nUU5Gz7IqjWB1JD6TOkO3TyDvCmMiMWktclT6iLVIkoXoFBsMsY8btEdlLib388j5C7jENtaEgC/f\nIpir4fPXcNPEQqCNxkHjChOVVbRbJkIXsoEo788eZ+/UEv54DWHLYjk8wsLIJCc4y0A1g7JpQBYW\nBvbw55//WVy0eOjmefrfy3A+fpxb4WkGrS0eF95lkE0uWse4JczgddWoDng57v6Ar5jf4rn0m7Rw\nsaklaaOxj5vMMM8qo4iYhK0SXUsjsFBn+pWrzPz9G4h+C3+6zZXkNNeCs3wj+AJff/8vOLZ5iXYQ\nXlY+z82+WXyJKif2n+NA8wZSyup1AQq6ufX0DPPMsGKN0Qh5kAUdN00MRKabd5jLz/N24glKcuhu\nCQO9x6ELDRaYYj01SvtFPzwCKXWIb0hfZ4//Nj6zwdnNU7QDn45/ogcVVQJ8u/tljhg+DnL1Hl9r\nZ4xOCZvFjkXdBjMbnGwaxaY+nFyyvcgIO3SBXUbazridWbwzA7b14k7Djw2OcD/42hNJlx4V47l7\nTFsr7TymE8Tb7NQEsbN4+6nByYM7v4vd7cds/bqT899to7cXaUXgA+MxLnWfosYS9/eW/2TigYD2\nBY7yBG/TwE337gNJDR8rrXGqtSA/H/gzDE3gDetp3vrwWSJCgYmHFggLRboorDDG9SuHSG8nuZ3Y\nD8MSx2If4qfGZQ7zDk8QpMIM8xzmEoeMy3QEhU1pkIscRsLEQ4OjXGCIDRJsU8fHOsOc5SS3hvex\naE6SlmL4qXJEuozL20JSBKLkmGSRi50jnNYf44jrIuvSMItMECfDKGtMiQu4J6qURA+lYIim201W\n6ru3uFe7e66klMIXqhPaX8b9RpfgW1VOfucSxacDXDoxiz9QJVrK8/jVDGGpiKvVxa7DOaqu8hRv\ncpU5ul4Fa0ig6vaz3JrkVvkA0WCBz+pvcWrrQ8yEBJLId9a/zLX+g1gRgVuxabxKrcdX46GJm5vs\nY5xllpjgkn6EX9v8AwbZRjhs4bda5I0Qt5N7uOA+wiK9SfPd6cdYNYdwa3XG3t8gUcvz0WcPoRoG\nYltkPjbJadcjXGMWPzUyxFlpjLN5aZREJMX0vhsodMh4+rgs72NA22QPQa5wEAMJAQsTkSg5OhE3\n1UejjOxfJjm0gaq1qMgBtm4N0P1fFY48fo6PHsQA/pREp6Sy9P9NM7x2657MT6fHonm537TiVHzY\nFIizl6KzDocN1DZYOsuY2rpqG5ydi55OXrnD/eBqX5ezHKwN4DZw21UD7eOajt/thUH33ePZzXft\nDNjp0HTqr+17dhrObaB2Zud2iVYncNuAbV+n/USy9uYIiwszdCob/NSA9iaD3GA/OfrAtDhqXWRN\nHKHcDrNcmiTnjmFosM4IhqSxpo9yqzbFgGsduauznR9kqzhEuRSBisCCb5pYbJth1skQ5xbTTLFA\ngjR+qhhIqPSkflniSBhEyd8t89qhgZsNhsm1Y3y3+rMs+sbJuXqW6CNcxC9VyPnDSFoX+e6+iXSW\nSj6INGWQbKfxVxqEEiUUVwdJNGhHZaw1EeGchX5cxBVrMdZa57QCBSnCFgPkxD5qxiahUgWhAupW\nh4E7aRamJrn25Azj3mX2FW4zkt7qjagmvZEvgCWLdAyV1ew42VY/5rBM2h1DQkfE5IYwi4sWXqFN\nQkjzkHCGFXUPdcnFkjRB0Rvief1VHml8SK3mZ8UzQtEXIkQRhQ7NtpvA1RqiYLKxP0nd7yWnhNny\nJzDo9X7ME6US9bFJkm36eU5+nRFrnWrJB6rADWsfb7ce5wfdUywpE4x771C1/JRbIfZ2FvEYNUoE\newvSikJd8dBBJV/sI70xSFeUETUTt7dJMFSkL5ileKSP2f6rjARWKBChZIRoiB6ioSye7U/e6PAg\nw2yYlN6uI9abDNJb4qhzf6d0G5xtIBa4P/OE+yV6zkU5p+nELihlg+Ru5YWdoTu5aRzv7QZKp1b7\nvnviL2fUTtWKnVE7Nee7qR+bQtF3bbObJnEahex7dPLlTqWJbXcPA+aVJsXFGjQ+eeUI/IigLQhC\nEPiPwAF69/arwALwp8AosAJ83bKsj6Xpuyi8xJcoEuZL5kv8kvGH3FBm6bTdnCk/zruxx1FpoYhd\nBk5u0aj5uZk5SCqcRKhYNM6GsEZMmDDhtER6LMEy4/f6JBpIrDBGmSDb9HNaeowTnONZXiVP+h6v\nnCFOBw2NDjGyXK8l+cbCz5LYs0nMlSJABQOJlNzPteA0YXqZvkKXv7fwDaav3+GD/mMMbKXZe2OZ\nK8/MUHH7WBInSIpbxM8UGPmfU5T+nQfxcfBXWrwYeIGiFMZDgwoBjKyM59Uusm5CP3AO5uszvMlT\nPMZpkkYOjI3eiFoGrgL9sCqM8P3u53ntyhfYVhP8/pF/wB7PHfbIC/hdNZaZ4Hvac7yz9xT/lH/L\nY/yA7pTMFQ6ywmivImKnwGOFc7AE1wenmfdN4qVBP2n2N6/je69GdryPC188wDLjGEj0keMgV/BR\n4wwPM8oqKh3+Kz/P4CObDFXWeX75DT5InuDbrp/hD+Z/nTx9aKEm7VGFuu4h0i3yW9P/CyveYf4d\nv8YKY8jo3CBDDR/ZlX62/mKsd899wDg8dPA9YsltJvbNc5TzxMjyJk/R0D0oo22m/s/brP/W4I81\n+P82xvYDjXYDbp4mJtxgToT3zZ4/T2EnK7QpDDc7maTdLNd2PNpZstMGbytNOvQybqca2c5C7fft\n39m1zcfV+7DPYxdmsjN3J23i5MadYU9GNn3hppfD2N3U7czYCeQ2+NpKEvveOtzfV9L5NGKf287W\nbbrID+wD3li7dvfOP/ksG370TPv/Ar5nWdbXBEGQ6T2N/SbwumVZ/5sgCP8c+J+Af/FxO5/IXuBy\n7ACP8y5D4jpXhTkKQoSuR0KON/GqNTzUMU2RzMIAlXYAub9Bt65hdkSsvTpkRCiJEIdiIEwVPzPc\n5MS1C2ymhnnj5BNkgjHqgqdn485XGcqkiQdKIICpi1zrm2PZ0wOjImGmXfN8feBFFt0jpImiIzPE\nBkkhRRM3I6ktBsrLjIZThKUSnmiDWeEG3lgLbbbNuLJCtyIjdQTqAZX2ERXzf5S4sXcWpa5zYvUy\nM5PziK4uI6wxwhqq3EHwg6AAcSAJfcfyhChxjhMoAwaau814cw3PROsuqQa+aI2BRzbRhtr4lSrj\nrgV+sfwnRKQCl0P7SQhpTERETN7uPskr1nOIiklMyBInwzzTuM0Wwt3nPr9ew0Wb13iG4cUtXrjx\nXWKncnTHRGb1G0zdXsKSQRrrEC2XKYtRiMDLwufvFmTVWRHGeM9zisRolrZbISLl8E8W6GeduJqm\npngZk5c5LF2iYPlZkwfRqzK1l0K0Wh4q41Hic1u4+pvwpE4skCYYKOPytcgRJ13sRw61KIphYmTZ\nz3VS14dI5YZJPdqP+XURfufH/A/4Mcf2g427TPVzJtaXNLq/26F507rn2nNy0XB/Fmlnl84jORfj\npB/ymf37bnrEBkE77IzXmcE7f7at9jagOq/TPpfGTi0TZ9i0h91cGHYmGBvAncdzLk46i2BB7+HV\n3kemN+lZ9CYEe1u7Nol3v4T7H2vILwrwqrOv+ycbfy1oC4IQAD5jWdYvA1iWpQNlQRC+DDxxd7M/\nBN7mhwxs3ZTxUWOcZUxR5AazFAmR1fpQw00kVWfATHHYuMxb3c9Rw0fIm6dremhrLlpeGVeji1SB\netdPNROg6I8iJwxmGgsMF1Oc1h+me3cYyeh4ui389SZFj0peirJlJrnJLFmixMkQokRCzTAUXUF0\nNfHRU1WEKOGihY6MYJr4OzXi9Txi26JlKeiWTCEcpuwN0XSpBPQqEaOI1fCjhgx4FEQNhAoIdYuD\nuWskhS2CoSLhVplAuYaQtyAJ1jBwAKRk798jS4xrgVkCrjKxTB5DlagEfLhSLawg9Ek59vQvIHZN\nTlbPcKrzA0TNJE8QFy3aaGwyyBnrYaqWn8d5F+Xuv0g/aRqSmzuuccKREh1P70+fIc6e5ipz9Zsw\nCx1JZPBsl5oZoNbnpY6GaFr0d9M8VjrDuneAuuohQZoWLuaVaa6HZwlQoYaXvr40UXL0s02VAMc5\nz3H5PEtMcMvcQ6keQm/JiC0TrdshaaYoKyGWgnsR4yZSoIustiksjiBYFrOBS9RFL6utMRpZH40N\nP2ZNQTZM+g6nWP0bDvy/rbH94MNgdXiUt089S+GPz2CR/UuOQRuwbErAWYTJ5ooFx3bO/exwmnOc\nILw7s7UX7ZxGFSftYm9jZ9x27N7Gfm+39d2pHnFODE7u2QZr5304X/Z9GLuO4ZQ22hORDdwWkAv3\ncfozj7J5fthxlZ98/CiZ9jiQEwTh94FDwHngvwcSlmWlASzL2hYEIf7DDvBy7FnGWb7bm1FjjWFu\nsJ9VZQS30nMG7jHu8E86v4s1BT+QToEEHY9KuR1kqzpA/OAWWqTL8n+eobnmJ7M9wPzz+xgcTqMF\ndPKeCBa9OicKXUSvSXdA5mZ4L+9qp3jLepKKGCBOhjFW2M91snKM3/b9Jp/hPQZIkSdKiRAWAgnS\n1JIeMqEwg9ksalGnnvbygfUIRV8ILCgIEfYxzxPud4hsldEKOkLN4mTrYu+bDcDxtUvUyi7yRwNE\nC2UCC02E9y04RU+XHYOSN0SBCFHybNPPu8LjnFLPkveFuT4yRXJ6m5rowyvUeSb0MnvTSzy9+C7p\nqQhb4QRJUnhosMIY5zlOQYowwho/y7f5Ll/kOvt5jNOsugbJa5/neN95EIV7xqVk/9a9VS3lBybm\n2xZXf2OW+akpcmIfn4u9xkzhDr9153f4cOIot6J7yN99MskQ5yOOAb36DENsIGDSQWMvtxljBZUO\n88xwxTjEmjqC8gstRsVNZqR5pqQFbi/N8OG1x8kMDJFN9CNEO5jzGjPiPF+Yfpl5pnmr8BS339tP\nU/IQGi6wR77NFLf44McZ/X8LY/uTiDfSz3Lx8ixfrf4KM2TxswNuTi4Y7gc/mzLQ7n7mrD1i27/t\ncIK2s4Sqk+L4uPM4FRy2Ftp2R9qqE3bta9M0TtngbgrDpkjsRUo7Gxa5f1Kws2hnpm+Ds01/2Iub\n9jk67KwN2PdsAjcrM/z5hf+DUvoKcIFPS/wooC0DR4F/bFnWeUEQ/jW9rOPjdPsfG6V/+btctzq8\nag4SenKOsacTeGiwT7iJaFrcKM7xDk8hB3QWpCmqpp9KPYBLa2HoCmZBg7hIcmCTR174gIvdY3QC\nCl6txm1lgpRnkLwSpYkLH3VmuIjo6nJWOkJJDTAqrvBVvskGQ+ToY96c4fKFo2Rq/SwMTnEwcZ2h\nwCZumkTJM9zdYKq6hOxuU3N5eC/6MPkTUdqzGongFjEhTUUI0kalicaWOIDbWMPd6UIT5KIBHrCS\nsDmW4EpgP++In+HZ0OvMHb6O5RW4ltzPYnIPNa+XghJilhvMcZUiYVqSG9nXIiUNcUOe5VX5WQB8\n1OgKCkrQ4M7YGNF8AaEhcnV4jhYutumnRIiAWKFdcfPvV/4JvmSZqfgCVfxMVRYZbm9yIXyMohhC\nwGKALdo+mfeGTpIykoyubnA0dpmEJ0NHkglTwCM0EFoW7s0Wpf4QS9FxNhjmmfKbHDWuoIR0lsQJ\nGrgJUUKhSweV6+znZvUA1EU2/Em28gM0UiGkgE4qIkAUVDpU+vx4jpdpz3swqjKoItJEF8tjUJYC\nrOXHWanuoTHixTz/LqWXX+fdP6hyVv+xzTU/9tjuJeF2jN19/WRDv5TCKLc4nK0wosBS937wdbok\nbYrAaWKB+63p9stZrMnJSdvfsr2vTS0465rYn8H99Uls9cpuXbR9LU7LuH3tLnayXtjhomHnD2Gr\nUZzctTOztq/dSa04f3Zm1/bTgg2GHWBWAX+mwp/+3kfoS/ndf4KfUKzcff3V8aOA9gawblnW+bu/\n/zm9gZ0WBCFhWVZaEIR+eovZHxtf++1pfEaNt5pPk5OiNGnTTwoXbZqmh0bOzw0lQTcqUCZItREg\nl44TjheQBQOP0KS7ruKTG3x58lsMtjbZtvoZlLbIuSLc1ifJVWIoWge3t8kIa7iUJuvKAC1cRCiw\n17hDfclHWQrhHatTr4QRyiID0W36jBw+auTow0WLsF5itLJBB5FtOUZN85IfjiB0YDSzTtEXIh3t\nZ7CbwhRFrgn7qbuCBHxVZEtnuLKJqnQpB/xcjh7gTe2zfLvxZWJqjuB4EWtcINXuZ8UcYUHbw77a\nPA81z3FM+og1zzC3XXu4KB9kTRxhiQkucLQ3yVk3iRtZBM1kPZEkkc4RaNdRhrusMMYGg3RR8Ap1\nLFNgqTHJk/rrTHKbW0xjGhLdrsJVa45tEgSoMMESitYhr4a4LszAOByZu4zul3HRYoRebfNVaYRl\nt8aiPEGGXrVGr9Fgr36HliXjp0KOPkZZpYGHLQbIEyVvxHs1REwDTW8z1NqgqgZolH2sdCZI9m3j\nDdY46j1LenuQXD5BMRUlMbFGNJEhJ/axXR2g1Iogj3aI9s8QeGIQtdShW5ZJ/6f/8CMM4Z/c2IYn\nf5zz/81iLYuQTuM+5kOOR2lfyd8HxnaZVtPxnl0j2s6abbC16QWnO3F3gwCbE7ZVJPb79n5OQHVa\n0ndLEK1d2zkLTznpGWeFQft3Zya/22G5m2Zxqkm6jp/t8zq3sUFfZWeS0AFlNorb40X44CZ0HlRh\nsjHun/Tf+dit/lrQvjtw1wVBmLIsa4Fekczrd1+/DPwr4JeAb/2wY9xmL4esK/yL1v/ORfUg33U/\nxzQLpElwxnqESiGIoraRMGjholH1oS946LjquJIlBidWyP7fSRq3whz5gF605wAAIABJREFUynU+\nK56mranoEZNFZYK15ii5G/0Mx1eZmlogSh7v3Y7Jt5imQAS5rfO9P/oyfl+F3/iN32HgUI6m6eZq\ncJpxuWdvv85+ioSpWAFMXcTTajEibjKsZzBMCbLg+n6Lb+w/waufe47/ofhv2FKT/Fn4KxgJGSlu\nEOhW+EfGHxBV8nw0cJDXxaf5oH6Kja0JVvvHWQ6uAHC0eJkj7at8Y+AFHl35kCcWT6MGOmxODrMy\nPMaLzRcQFZOknEKjTYQCA1aKn2t+C49YZ8k1DJrFqLjKL/BfeIkv3Wsq0MBNMrjNl4++yIx0ExGT\nLQY4HXyYWsBHVurr3ScBDCQGzU1CRomCHCY4XKarKXwUPUoLlSNcYJ0Rrsf38+7jTxBX0wQpM8ES\nuWCIFDGOix8xxAa1uzXPz/BwT5dOij2BRdy+JttiP2F3gfhAhiviQW4t7Wf73CCuR9oc6b/IuLzM\nxceOcmbxUX7w7lOcHDjLmLbUazOnu5HFDoFYjpPSGQ5bl4iZWUpmiN/+6wbwT3hsfzLRpRWweO83\nHmbvkob8G2/e92mFe0URgY+vMWIvXLa4f8HSxU7lPydnbeutnQBoA7OLHXWIveBoK1Ya3D8x2LVQ\nVMd5nFJAWzHiZJCdgG9n0S3uf3rYrSAR2Kl2aFMeziYRdlZfv7utG6jevY8mcO6XDrM8epjOr+u9\nUuafovhR1SP/FPhjQRAUYAn4FXrfzZ8JgvCrwCrw9R+284XVE7SG3TS8XrJiDAAJAwELXZQIj2bQ\npA4KPZVF1F8gN52gJPvRmzJ9nixlX5SlvnH+7dB/x2ddbzImL7GhDGAiMqat8LnRVxC9BqrRJdnI\nIkgGOU8fAharjLKo7MHzdJUxdREJA90vINIhoWyTWMxS7Qbx7G0yubTCVGWR1oiMmJFQNnT0SYuK\nJ8R2op/FU5OciZ1kUxzk+75n0CUJSTAYlVfRkSlKYZqTKhkxyrw8TZEwpgJKuElKTZA3ozysn2Gg\nnqLcDqFaHdyuFlq0RScpQcgkJJQ44rpIWQyi0eZhziChUxd8fKCdBAHKop98fwJV6FDFy1RhCbOu\n8aF5ing0hcfXYEtLUiJImCInOEdKSrLKKEFKVAig0SJCgSVhgnVpGEsQUJvr6AWZm/FZbjPOTWaw\nEMhKcbbcSWa4yX6u94C7uspQfYuIUcS30SKnR7l9fBzdozDKKi1cLG7sZT5zAPd0Fd0vUZX91PBh\n+ES6YY0rG0dpd12UR4LscS2gR1VOT36WG7cOsV0YoH1coubxYmQkGn8aZPXYOOZ+EdXqMCas/M1H\n/t/S2P6kol1X+MEfHcUotXiKN++BoxMIbaekRK+UjbOAk63ldvZUtE0pzszb5sDtrNnO4J2uxqZj\nW+fxZO7P/J30ilNf7ZxMbBCWHMe0a1s7s3LTcczdChgbqG1aRaU3edhPDc5mD/b3ZUsdJXp+tne+\nu48PA0doN5a5vy3EJx8/EmhblnUZOPExH33uR9k/U05Q6fNzu7WXoFYmpBUpE6CKD1E0cQVbyEIX\nyxLwWA1k1aAdddHVJWS9i2p1iE7kKEXC/NnQVymKfua611jrDDPIBqPyGs/0vcKG1Otmo3a7NHGR\nIX6v9deiMsnM4/NMsoCOzHV1Bh0ZLzWoikhtE8sSSJbTjObWqfa7sdZEjJxMdjJEuRMk3Y7x/pGT\nrKuDuIwWqXY/AaXMqHuVITYoEaIohtlO9iFjUMWPRpuEuo0eklCkNpYlMGRuYIkC21KclJ4k749Q\nUgKUBr1YssWkucigkWKLJBXdz/OZV2hqLi5GD7OuDtBBQ7XabIUSGEjkiTLefpWhxhaybiJ4oK1q\npJR+/GYd1dLxSTUiQq/lWpQ8RcLoyDRxsyhOcJ4THOQKZleEugAGlAnRwIuJSB0vbTQSpJlhnjBF\nRlopgrU6NdODf7mB2ZBpzHlput2odBhjha3aMFu5QWYmr9LAw7o5QqvhRpM7TA7fpp3TuF2boqj7\nmRWvM+xfQ51pkTqXJLcVQSp3qLe8iDUTdVmnMelliwFMS0Rp//j/TD/u2P6kotsQmf9mmJF4DO+J\nKI3bVYxS5z7+16k59rADVLYN3CkRtDNp+z17YdAGRyftYS/u2XRFmx1AdXZ8scHYWX/EaWBxZvJO\n9+LHKVCc1IqTxnFWIbTPYfPVznuyW6k5HZj2IimOz9WwQnivn62rcW5lwvBj6ZN+MvFAHJFT8QVe\nWfsi0orOsYFz7Dl0m9tMkSGObsikVweQZANpr86KMUalEKK2FGb/xGVCoTx5IcrU8ZuoZocL7iO8\nuvoFvpv5CnpAYSJ+i1Ped/lHW39Ay+/hYuwwy8FhssQ4y0lGWGOQTURMxlghQRoXLb7HF0iT4DFO\n497XQrcUNuUBqnu9CH6D4KUG4iWLkhHgsn6IofkU0/NLnHuhyHhiiUQzy/Nn38ATrbNxMs55jt+7\npzM8zABbTHIHL3WSQoqHlA97i5ysUVc9rAyO8173cV5uPo/PVyUWTbGuDDOuL/No/QxSWqQecNNw\nqyS+W6A7IJH4YpoNhmij4aLFYHeTGn4uqQe5ExsnF+njSV7hXPVhbldm+Ez4bV5of4eIUeT3vf+A\nriATodBTxuBllTEqBKjho46XNAlKgRCu4RY/436Jw3xEAw9v8yS3mEZHJkCFMAUUdESvSVn1ccUz\ny2Rxlf5imiekd/h/rV/lvHCcf27+KzoTGq0RlUPuS6wwxnY3SfrOIMfd5/ja+J+wMTjEJeMQZ5oP\nseCaQnBDJLnN4DOb6CWF67cP082qhJQi+//hJYaja8TI4BernM08+iCG76c0usBlWk9VKfzmI7T/\n2TmMt3r10e2aGbADoDY4OkFNYqfJ7e5qfDZ94DyWHTbw26DoBBGnUsQGSGeGbxtdcFyLky+3gdyp\nAZe5n4OGnWYF9oKjnZHX2QH1Nvdz9zZNUmPnCWE35949GqH0b47R+Zdl+NMrfFoMNc54MD0igwuc\ntR4iH4mx5h3GxRHKd+3MliiiRNu02y42t8eQAy2QBNqym5Bcwr9d48b7h1AOG7hGWxSLMSTVxJOs\nobraWG5YlCf4buh5SlqwtwgnWbRRqONlgyHiZDjBOdw0AYF1hrEQGOpu8UjjHB23Ql318AjvM5Te\nREqBEDARZkGQLGS3TmdYoaFp9HnymIjIhk64WKKs+bnGHAtM0aCnX15hnEX23KMffEIdCwEXLTpo\nnBNO8sHqY3yQPsW2a5jaUADLL9DPNroos6qNMBRJESiVCd+xUEs6pkfA2JR4Nbof0yVwnHOsS8Oo\nbZ2Hqhc44z9BWeu1L+0zMjQsD1mhj/eVhwlKFXRBooGHOl7yRImR5SgfcYsZBtjiGV7DRCTgKVNM\n+FC0zt2OM73Wau2Cm+WVKRpjPtoRFwZdMlqUrqpSV93oSYmOX2Vb6SdFkhVrjFeFZ2loHgTN5JJ5\nmPXUGIXtOGFvHitick2dpUiYTClBbStMaSgCAtRSQVKSgCLqhJM5/KEqLrlFLhzBr5aJCr2FYyXQ\n/qsH3t/p6AnfludjvPT7g3xhbYUQada5v+iTDUg2xWAvxjn12s6M10ld2PyzU07otLU7NdA2reFs\nBOzU9jjliDbvbWuk7fP8MPrEuchqK092W97t63EWfnLy8k7bu72twv0dbYaA3GqMF3/vaZbmbcLk\n0xcPBLQH3BuMK7fxi1UkrUvO6iNrxrAs8FhNJH8Xo+aleDNOfN8mbl+LSDSHS2uhZHU8l1tsRwdo\nh1RKtSgDkXUGgyvEydwFoQivRp9igBR76DUCUO9a1QtE6KASpoRMlxYussQYYoMJY5VHGx9yXj5M\nU9E4wDVixRxUBDpzMt1xhZrsRXSbdIckmkn1HrVTE33UfB4W3RO8z6OImAQp00eOFEk2GKKBh0c5\nTZgSBhIuWlgILDDF9dwcK+uTkBCRdQOvVSdKjoyVIGMmiLSKeNJN3Ktd8IMkWqirJpueIXCZGIJE\nSkrip85kfQ3FraNrcq9tmCdPmAIAH4gPIWAxyw0ELDLdOMvVCZ7RXuO49zyrjDHMOk8Zb1CtBREk\ni0I4QJkAbVTcNBljhXQzibgBxAUEH0h1i6bqoqG66aKQj0aoBgJcUg+wTT+FdoQXsy8QVKuIPoM1\neZhsJknztp/oYzdohDU+4jg6MtlqP/qKm03/CJYlUr0ToeLqI5pIMzt9Cc3sUNEDLJh7CJgVkqRo\n4UIIGH/FqPvpiPVLIfJXhnl4dJrwcJ7ueuo+ANzthIT764HYAGnQy17hfiWH01ADO1m0rX22s1on\nj/1xHWtsEHVSHs5qezbgOl2SznonlmN/+xgfpyKxKwXaBhn7Z7tMvXPx0s7+7y1gjiQp6DO88q+n\naZtr/FSDNsCUNM8XI98hJuToWjL/T/PXWehMUdBB33ZhXFThbSi8EGfw6BpPDL5OUQkhjXX4lf/2\n3/Pyxpc4v3ACZW+DjkuiS2+xK08Uk37CFJnkDjPcpECEABV+lm9zi2kWmOLP+BpP8A4J0nipM8UC\nQ/IG3YDFXmkejz7IRfkIngkd70CTTCzMtpRgW+hnS+7nUPoGQ+U06yPDGG6JmsfH4uOjzMt7SZHk\nV/k9XLS4xGEmWaSfbWp4eZgPGWCLEiGmWMDuwfi5uVcYm17iXfkzxFzbhCngM2uEanXE1WVc32wh\nhw04Qq8IQgXcqSZfnfgmddx4rCYnrHOktQR/0v9zSLKOnwoiJh1U4qR5htf5Hl/gJvsQMZlkkVgl\nz7V3jpId70c8YjHOMhYCN9v7OfzRNdRgh/SxXof7DioaHUqEkGJdTj7+A2ZdV9mTX8R9UUcYhNRA\nnNuRKV717idvRamJXmr4cGdbrPyHKfR+Bc+jDcb33EKQJP5/9t47WLL7vu783Hw753455zd5BjOD\nAQgQIECKAgWBCrYCTYmSLO1altYr27Lkqg1yeV21Uq3WtmyVZGtL8lKiSCoQC1CkCBCikMPk/HKO\n3f06x9t9w/7Rr/F6hqQIk9QIhPit6poXbt9+c+vX5377/M453yUnxGp5kIGqw4R3DhMZo+LG2pR4\nKfwYjirgVATwQFxP8mHhS3w5873M1Q+hdFYIyE3HaooYydq7yvPyd1R7GK4yn/rlH+ZwYZDDv/qb\nVDmQ6bV3la2OskVH3A2QFQ465Xbgbwffdudj+wCFFu3RaHvu3a7LFlC3uvqvRb2029zbDT6tujvB\nrx2I24cW3+1+bDfytG4qVQ5ULHXg2V/4OJc9p2j8y1moVnm31j0B7VscouGo3Kwfxi1VUDWDLnmH\nctrHyvoIgXCe0HiOoJhjvbefsuRmtTJMQfcwrdziwa5XuekcYdYYJ+JNIskW8n66XQ2dHCFEHG7s\nHmd5bwJhyGTCM8uEPcf18nHmxQkqHo0duhBwaKAQIkNFdJPQ4oSzeXqqCWriAil3jN1YHEEzqYka\nFiI+SlgugSIeQlIGcNiQelgN9lPEi4sqO3QRZY8+NvBQfhs8B1klUs0wlNvAFShTc6t0kGDL20MB\nLx5K7NDFdfMY76u8ScoJs6dHOeLcRvRXqAxrpN1RnLKAHqzSX9zCkGWKEQ+LjJIQO5AkkxFrCdsU\nUaUGG0IfDrBNN71somE09e/4aGgqw4OL+CJ50kQQsdGpocp17C6BDXc3lzlOjiAGGrt0UkdFV2sc\nV68QdHJYLpF6rwQhyOhBrglHqYou6qgkiSNiEVeSbIeHKFX9GNd19Lk+7IiAbyJLxXSTLsZZV2rU\nqzoZIQLDDXJqEK9WYnRihoTagekWyQohcmaI0qIf/TMCqydHMU56CAX2sOW73/J/H6uBZVqsvG4w\nEjd58Idg+S3Ib94Juu10QwsI27XPLRBrgWm7+aZ98kt7cl4LPFoda7tqo31Ts11VAgcbpO3d/t26\n7Hbw5a7ft+eitP8/4M6OvrVJafDVN4j2TxPhPug9B88lTNZ2a9hmmXeTbf3uuiegfYMjRKw053P3\nY+kCXdo2h8QZOsopVrYm8A3m6J1cZvD+NRp12KgMcLN4FL+QQRRsVKeOHq/gE3J0yruYgoxGDQsJ\nAw0DjQYyi5lxkiudxLp2sD0CliPxZuVB8oqfIc8CJjIFfJQcHyYyRcHPkLyMXrUIZQpMssgXez/I\ngmuIceYBARGbLraR/HUyfh/qvlE240RYdMZooKCLNd7iLCMscr/zFkONVdxUqKguTGRcNYPRrXUy\nto+6FCKg5ikKXhLEUamToIMZZ5rjtdssu4a4FZvEP1nE21+g0OciQwQjoqJ0WYwtrCDkHQpRH5eF\nk83hClxn0ppDpoEkWTjAGgNc4QRjLDDKAm/wAGvVQXDg4WMv0SntkCWEgYabCnElgTkK60Ivlzi1\nPxbNzQ5dxEnRZ24wXlvAq5coB91UgxYmMjvEWGb4bW28gdbkwt0Vbh1rwAI0ZjTWV0bo+J5NBh5Z\nYmNthEI+yKzhwdjyYMsiwkQdpyjhdRcYHZilVpSpOgpLjFCQ/FjbMuX/GmDhY0FSQ50c815AEr5L\njwBg2JT/aB3ndJ7ujw9TXEngbJa/asOvvVtuB8V2J2S7jbu9i20d2wKMuzNIzLZztb7W237friq5\nO1iqBeAtYG9xzc7XeLSgtKUEaX8+bedo/aylCoGvPVhBE8Db4cX/SAfmH2SpXFjl3QzYcI9AW8Ch\naPqxdjQigRQDgXWu75wi4XRgH3JIinHsqkDdoxFSMui+GglXJ4ekm6h2nX9R/U3WKiNUBTeeaBld\nbg6l9VBmiGU62GWCeexBiXxHgLpfpYSHW+IhekJrnBCSHOMqh7hJBTcXOM2LzvuJkOFH+TSpeIlE\nOMoc41zTDmMiESfJyzzMFr38E36Hbnubou3jr6VHqQouhpwVXq+dIy8FkDQbG4EaOiE7x8TWMoIo\ncWPgSDMt0Npi2NgksFGmXtLYHOlhQp5DwOFNznGIm5ySLrAc7MOQZEJ2hs8//mGyWhAJiyd5liRx\nXpAe59zgmzQEhVtMMbCfHAhQUVwoyAg0By9U8KBS5w3OUcVFD1uwIFFMBIiczRD179FAoYaGhEWH\nlcSfqTKgbDEaXuQGR8jsjwazEIll0jw6+xpMNiDefGtniCBjNaWCiNRRiZAmyh62ICGLZnP9G0AR\nhqvLPCC9yIs9j7F0c4zC58PYXxFhUMD5WQ3yIlZIojLgRlAcNMfALxRQ1Sr0WvBhCQ6Z6L4SveIm\nC7uT92L5foeUxasz9/Px//AJ/ln61zgkvcgN6wBcW0DZojRa6owKBzkefg703R7u1DW3AK/FDber\nUVqqEDhQdZht523nstuVKyIHckGt7dw2TYVHa3Qa+19X9/+u1t/T/smhxYe3bjpS28/dHBht2m8I\nIjChwMLyGf71b/4ay4lbwO47v+R/R3VPQHt3pxfZMfH5C2j+GkXBR8iVRtRMdC1Ah7SLY4us5Ufo\ndm8gqw1U2aCHLeyaxI3aMQRRQGvU2ZvrQs43KDcCOGGF0a55ugK7LGSnqGkqcqhOh5CggxIRIU1B\nTeGhjIsqLmpU8JAlzFp1iF26ueQ+xWX91P7FMCnjIVjO072eJBrNkIuFUKjjrteo113sejrJic3x\nWFFpD1WsIzcsji3dxK2VSQ3EWHQP4xKrlPBSR6XhKGDCpreHBe8Qs8IoQ/k1HjZfQww69EsblAUv\nr0sPkMuHqVc18jEvDVUmamVwZRv4lRK2X+Ql5WHAQcPATYUua5eouceiPMqu1EEJLzV0ZBpkaEaa\nUhZY2xgibGSZjt0mJGcp4SVDCC9lTGRW7QGmi4tYukw6EGEpNY4oWxyLXsFPnrqm8FbkNF3qBvFE\nkvDVHI2pEt6+5ki1RXuUjBPGJVUpC26K5QCNKzIRPYX/fTm2O3pxjVSJimnCrhQ7oS5yneFmZFNN\ngGck8EIl6mU9NUzRH8QV28U/UCDqTtI75MX9/TWG+peIeFKk7QhJq+NeLN/vmMqUbC6WbT5/+Pu4\nT/ARuPEFRMfG5kDe1gK79hyS9mqXyMEBKN/tPIQ7z9HanGzf2GzvaluA3AJ+ue18LUpDb/u+dbNp\nvXare27XiDttP4e/WSnSbrtv3UhsUebF6Se4ZD/Mxevtz3x3170B7e1evJ4iff3LGLrKuj3AA9HX\nsUSRVQY5xjX2Sh0sZSfRlCoaVeplDdltolAjaBbwBvJQhpXZSewVkXTNZGNkiKCSpcu9zV8nH2PX\nEyegZviA+gJnpAuMssgKQ29rkbOEyBGkggupZlMgwMvu95OiOWbsIV7GS4mu8i4ds2mGJ1cxYxIW\nMkZDxzI0Km4vFdz4xCKntEsYaDgViX98+5OkAlH+aOgfcqNjmhBZdKqoGLgbZcg7rPT2cz16mB2z\nk5M7tzhcuYVfLpD2hJgXx/mK9ShrmVGcjMxY4BYd4i6hag55zyHkKTDgW+NLjQ+jC1UeVl7GRRW3\nXaHX2OZZ8fu5Jh4lTIYYKSJCmiRxjnMVV9ng+dtPcv/Qa5wbfxVJN0nQQ5pmSmEZD6/xINFGgZwS\nZNfuIp8I06NtcihyCxdVcr4QXxz/EA85r+BZqdLx5Sx+b4lATx5FMNk0+1h3+jgi3iApdLBV7cW+\nLdL3vlV6n1gntxCi6nWTbYQRbdDiNZRHq0hjAvYrMvWnNZgAM6ZQngtQG/ZiHVKR+0xirhT6QI3+\ngXUeb7yAbhr8W/N/IbM/bei71aoEtpDkM1MfYcbdz09lL6LuZXCqBjUOVCOtN32rO23poNsT+1oa\n5/ZuuD2fA+7MBGnXUrdz23bbo/X6d0sSW5uYLXCttf3eaHte+1T49sRB6a6ft6qdqml3WtaBuluj\nEo3yyeM/wc1yP1z/wje6uO+aEhzH+cZHfSsvIAjO+M51xnzzJPUoO+VeMsU4Q5E5gnoWDYMhVjBM\njaXGGHtqhNx8mOLTIU48eZ7p6ZsMNJoBUKvVIf5w7RN4hDLd+iadrl0i/j28epFGVeN68gQzhWmO\njV7ice/zPM4LABholPBQxoOAg9upsm12c905yl8pjzEqLDLMMt1sM848Q/UVOnIp/szzQ1zzHOUp\nniFqpinbXl6Tz+ETi/SzRgkfAg6BeoEHbl9kRR/kTyY/SoA83WwzzDImMvELaY791m3yjwcoHPFi\niBrxxT28hRLlATc3xye52TvFptPDcm2EUsPPQ56XOZSYoXsnQa7Xz1qwh3Wtj4idQcSmKrmIsodp\nyyTsTpbEYSJCmqfsZyiKXipCM3linT4uF0/z9NKPoKUMBqQVDp2+yknfRSaYo4yXNzjHFfsEP179\nND3iFlXNRa4cRBcNOt3bRJw0WqWBldYJlnMopkFNVah0ujA9MmrN5nnlMS4qJ5BFi1VhkI1KH+Iq\nxIJJdL3G+Wcfwg6IhI5mKFZ8SP46/o4sPcY22d0Q15eOgyJzn/c8/0P0P/Pf+CkWPGNMdd5CFZvu\nyid5lumlBYyCzqfGf4Q35XN8Rf8IjuPcq0Sfr1rb8L//Xbz031wdUTof1jj5P9Y58hufpPO58287\nG1WaVISbO1UUdQ6yOVodb4t3bgGnzsF8xlbIUku10b5x2QL29vjWFri23JUtK327iafVmbd3+e06\n7dagBJEDkG/XmMPB0GL2/1+t1y+3HVcHdr/3DPP//Me4+F/c7LxSh8Tef+dFvhf1b77m2r43kj/V\nIVOJspfppCa4kdQGu0YnliDQq26xYgxRqzQ/Uuc3QlhJmXj3LjF3Cp9UwJFAxEaWLASvgOUTMTSV\nXDZEzdQJS3vc572Iq1ZFrddJZ2KsWUPk1QBjLy9h+SU2znVTwU0NF1XBRUVxI2ITJk0HzRCkKjoy\nJqpaJxsPECHFFDNIWBT2MzPCZOi31hm2VrgqH8MtVhhlEbdYJiRmmGKGAj48jQrDxhpZLYgaqGEc\nl/DF87i0CjnFj93l0HBL+M0iAbNAXEjSKewyZc7jVCSm7Bn6NzdRliw+3fdDbOg9uKgwLC2TJcQN\njiDgkBcDvCo+2OS3nXXiQhI3FTKESRGjhA9RszjT8wZIAi6jDFKr83DIEkLEplfcRPbUCTeydJTn\ncfaE5qoXHYpdHgTFoU9bQ7RtslqQuc5R8mIAxTIZltbolTbJSz5uMwWAR6xQcAUpq14cRUDprZLd\ni5I/PwIdEPXsEFDzGBUdJdRg6txNgmaRE8oV+gLruBarlDb9LCSniPQlGYisMcgaqm6QsSKoskGf\n9u6zGL8rKrFHfsHL9Vs9RE9OEpQzaF9egbp1hx289W+7brll7xbaHq3j2r2B7Xkf7V1vC7jhTgNM\n+2Zo61wtV+XdG5Qu7oxqbZ2rnZqR+GoapV0b3t7ht2u+HU3CeHyIxNFxbtyOkF/YhUT5HV7Yd0fd\nE9DOmyEWt6cRsuCJ5PH1Z0kXo6jVOmF3lpnKNNl0DLZkeBG64psc/YVL3Ce/hYLJ6zxAiAxlxw+2\nSLHhp1x3Yy67iPXuMuW7gduscF/wPD3eTf5g7udYNUdY8w1y+JPzCN0NrEMSPrVMSu7gdfkcGcIo\nNDjBVTyUqKNQIcgOXfsKEZhmhtNcIEEHeYKYyPgoEjGz+OplcmIIVagTt5PIZZMoe5xxznOTQ0Rq\nOYaSWzgxgcqoRvqf+wkUSxi2zqq/B/94gWgxg7po4tVLdDnb+OwSkXSBwG4JIeogJWzS22FmjUky\nBJhgDhGbPaJcck4RtHMU8XFLPMSUMNOkRIQ4LrtK1XHxivAQLmpMyLO8L/Iq/kgeS5C4zTQlvMw6\nk+zaXXSS4EHx1eYA43qK/vQuXAcyYMoSrzw0Qr1XwhMt4YiwI8aYZ5wdukCCPXcEPwUipCkQQKVO\nuJph8fY0Rp9O19ENgo+nsL4skv9SDOFDNqpuIFo2MzuHiStJHhl/nnHmiZBhk14a6zrMK6StTsxH\nJXLhIDImie4oM8Io23QTInsvlu93ZFWvltj8n+ZI/PYAPWdsojdSOLslrLp1h5a61SW3UxYtjXcL\n/FwcdNQtAG5wJ3i0qJJWtZthWt13C3RbtMXdr9tSjrhpdsbtYG7dTylwAAAgAElEQVS2Hcf+axsc\ndN+tUWStm0jr9VodvUMTsK1uH5WfO0NqfYDVX1z677mk75q6J6DdFdhE0Qz0XoPyK17Sv9dJ47RK\nxpCpLfsoPeaDgNS8ug+C3lWjQ0ywSxc6NU5xiTBpslqYjY4+NpxebEtkZPoqYVcaqWzxx9d/konY\nDNMjN3hg6GXqssKiNUrlodcYmFvn5P92C+dBAeeYwsvjD6FhMMAa38Nz3KTp4vNQZp0+Fhlll07u\n4yIDrHGTw3goo9DgTe7nBeVxwlIGt1Slz9zAbdZIjEXJqQFKuDnk3CaWysCb0Dm9x3z/CJ8J/xgf\nuvkVxqqL9L5vE0kzUQUDQXZABLXeoHMvzaw2wa2JKbxqiW7fNvFDSZ6KPc023W+PQxtnng87z/GB\nxEssCqM82/kkKwwTIoefAvFihk4rjR6scbp6mRPV66iOgaCZZLUAe0qUguBHqMNHdp4j4kphxxxm\nhUkkR6Cf3eYYah9Ifosj9dvYawL+Rom3uk+R9fs5y1tc4DTbdNNAIUUMA437eZNlhpn3jhO4b48x\n1zzHuIKMxcrxYea7J/HGSpTdbtaNPmp1F4JoI2Htj4tziJLmo8f+nKMjV1h1BslH/YTtDJ5GhQ25\nj5QcZYQl5HdZ+tq7sS7/rkDpgS4e+K0fIPJ7r+P9wvzbRpv2jI/21Lx2aWDLAq9woAxpBVC13IYt\nF2JLFQIHlAd8dVZJy2fYPq2mvcuv7P++vQtvgXtLkSK3vWaLZmn9zbSdz2o//oPDZH7mLK9+oYP5\n179zNf73BLSVYgNzV6GRtTGWXTRyGhF9j4Yik1UjIDnNK58CegCvg4jNSmMIEZuj8nUagoIkmXS7\nN8gZfmqCzpB3CU00SG3FmX1uGuOYRmh4j3ONN6ijUFR8qON1XCkD9WqDLbOTnBKgjIcybuoohMgS\nJEeaMFmCVHFjIeKihq9axtUwqHrcxKw0IStHQusgLUaIiGmOcB0TmYQUZzY0QVoK4zgCx7hGUfPy\n15FJqi43G1I3i4xyxnUJybIIl/JkhQAFW8NbT1Ox3BQtP3puDV+tjKjb3BqaotTpRt23vkOTm9+g\nDxOZAHk8Upk+YZ0P8WV6sjtE2SMVjDFqr9JRS3I6dZkj9i0GnHVKqhtRaOy/URvE8mni+T1KthdD\nUqgjMcMUlqRS91yj0SMjmQ6a1EBXajSQMFDJCQHWnT6STpyE0EFZ8LDCIOb+W9RNhUw9zE6pCyOh\nI0YcPP4y3eygxQzsmICFhG11oBgNTgQvElH3yBEkSpNXDJLDH83iiRZQqGHaQdJ2hOvCEVLEmrkx\nbJLgu+qRb1SpGwIObvRjQ3QdFeg1I4y/fJlG1aBBU0LX6nrbueF2hUhLny21/VxsO64FvC2QbJfu\ntWiRrzfL8e4Ev3ZJYPsGZrsypXWzaP3d7X+/fde5bMBy6yQePkbi6ARbWwPMvSawd+vvZBvk21L3\nBLRrKx6SL/diXxUhAvqHq4w+NEPJ6yX3gB8EGxYlWFXAANOlUBj1M18bp2J7MH0yHUICl1PB5xTR\nrBp1WyHspKmjUs26sD8vsGH3cvuJQ/zk+mcI+/fY6OsiFMnijEJdVLhy6iiXh46SI0iKGG6qbNCH\njyJhJ8sN+yiWIDIgrPEkf8GJ/E2UssWa1s+R2gzxyh6fiZQoq24C++GyRcXDVeUIl7iPNBE0wSAo\n5Cj2eHmm5ym26EXF4BC3sI84WGUBd8pkRQxTwEuskm+CnN2NUZ/j8I0Zgtk8//5Hf4GUO0YRH29y\nljwBVBpNSgJQxAYrHX30s84/4z/Ss50iacf5C++HKGkeBivr/PDqMwheKEdcbAfi+MQCliNTF1QO\nJ+YY3Vrh35/8p2T8QXxCkU160TSDgqpTinrRCiaRRIFEOEzZpzeT/TDZcPr4Q+fjHOMancIuu3Qg\nYiNhYyExX5tgeX0E/lJl50Sa7e4e4qQICVkGWGOBMUTJZti1xA8NfI6K4OELPEEnuwjYuKmwzDDn\nOcMWPRSsAHtOjM8oP8qIsEyfs07QyXFTOHwvlu93fO3dgL/6eZuO33qCo7/8AP231rC2ElQd6w4J\nXY2DzcYWtdEeGNWuzW5JCFu0yd3DBmTu1Gm3A3SLs27FfX2tRMLWo+VmvNu23gqbahfptbjydhUM\ngkQ1FuXKv/oJbl0PsvkL89/MJXxX1T0BbSllc+79L3EjeZLGoETooT3EoIUg2GjuCo0ZF/ZFCc4D\nj4IsmXgpIpUEapaHjDeCg4BVklldGyXjDxAP79DDFj1sMxZaYu4HjuA5WqRX3WB2aARJHiQnBOj3\n7dA4LLN0fACjq8lJB8hxhvOEyHKDI0xzm7PZCzwwdxEh5mDFBapeBVOVCdoFjorX6bRTBOwSP8pn\nuMkhUkTxUaSAn3X6SRLDQSREFpkGYyzws/w/fIqPcZtpbnGI8tzzqFvNJRVUcwidJntTARyXg6Q1\nuDY4hROSKNW9TAVv0csGneyiUsdPkRgpNugjRor7uIibCjmCvMn9HO+7TlcuwUdufxmny2Yt3I3H\nVSGwWEZP1ek9tIssNqjiYjSwhNZVwQiK/ID+OWqORlHw8iKPsiH08SnhYzSQUdwW3q4yHfpOMxuF\nMh0k6HG2wIKS5KWOQi9bOPvuUTcVqi4Xuf4glQ972PJ2cL54Bq+7hCrXyRBGwOEwN5iw53hl91Eq\nkoupzhlipKihc5NDFPHhokaIHHEpRcNQeTP9EEeZpY8E/6X+86QDwXuxfN8zlfv9da6NB9n70H/k\noxc+yakbn2eZJthp3GmSaZf5tVQid4eUtjYiW5013Cm/a815bAF3i2+Gg265XY1itJ2zXZ5Y50Dh\n0g7orRtF+8CGFo8tAcPAG4e/jz87/TFSv5ujMLf9TV23d1vdE9COh3YZHFtm+0wv3q4Ch/qbDrrV\nxBCsiEgNC8EtYPkVxLiJGDaxEbG3ZKS6Q6Ajh18qUBa8VAU3ligjixa6YFCpe0iIXTSOKximTvL1\nLl4+8hCS10SwHLoDSfyRHBlvgMh2lqniHPVuhR628RgVjIILfAKq0+BM/QoF28cOHSzTR1734ZYr\nRMU9CoqPLb0XRWjQzxoxUnSzjVMWcZcMjKCOrQlEyFDBTY4gNlLTAMM2fWzQEBSWlSFkzWRPDVJR\nNepRFd2p0F3fhqpIJaQgBhpMMEeUPRQauKihYOInj8UgIjYxUmQJkSLGFj30+jfpyu4yem2ZVDJM\npUNH8EINFVs30YUqcs5GzMGosgI1B1e1ylH9JrVujfW+XnRqlAQPRXykiYACXqWIg0MRH3VUutlG\np0ZU2CMmpIixh0odLyWgmXeC0pT6hVxZcmaAguNnix6i7OGhjEqd/n03521yRJ09HjBfwRRlKqKb\nLaLYSHSQoJ91kmKcVYbZMPpZlofRpRqXOYkgNL7ByvtutZdxtUByRyX56FEGnEeIe8p0jL1FPVWm\nunVAP8BBt9oCwHZKowWsXyv6tOWEbN98hDuNMi3Leut57cl/7YaddurF4IDrbndhtqib9o4+0A3u\niJflpTNc4f3cLA/CS29BovTNX7x3Ud0T0J4+e4OwkKHjBza5j4v8A/6UtzhLdilK/S+8uH4kj/N4\ng2pQQTldhX6TnBCkflMlUM5z7MRVIkqaosdPdUpnzRoAB4qCl+cqH+a54kewfQp8SWDjZj/B/zNJ\nNJiiQ0xQCbuZYI7p+gzTb84j67cZ6F7hAqeRig4/PftH/NnYU9wOTXNq6gYL3mHmXCNIWOy4GtQR\n8VPkvOcUr3keRMbkJJd5iFcIkCeUKqIu2bx27DRJLQo47NLFBc6wwBg6NR7iVT7OJ3lr6ixfnHwM\nDxX2hCgSFie5zKCzSkcxheuySWVQoxTQsRGxkJrywX3XogCU8JAkxjr9bNJLjiBeSs1NuRxwCTrq\naQgCo5B8IERuwkvIzuJea6BfrTOyvQ5LNB273VD/Ph2jT6OIjxgp3s9LnOcMVVxvd7+LjHKNYzzE\ny2iCwbg8x31cIk6SFYYYZRELiWf5fgr46RU2+aj+NCsMcYEz7BEhTJrpfQWMgE1GDPNj3Z+k31yn\nw0hxQTvNjDhJBQ86NXrZ5CSX+UM+zrrQi6k5POP9Xl7ynsPGRPqqDLjv1jesxB78yRd4xnmU7cGz\n/OFP/gT5l5e59vSBbrtFSbS665YdXOeAb3ZxMKIrT5Mbb81crHCgCW8ZeKocqEbaufHWVnKrs747\noa+dJqlycPNoz8xu14ObwInTEDvXxcd/5//g0s063Poi2H+7fpR7WfcEtF1ilQYK9wtv0s02eSfA\n/Y03aQxqLPzgGGk7RuW2C+G6w5HDN/BIea5XjzJ0boHT2Yv88NVncPeWmYuN8YZ2jj5pgylrlkcr\nr7J1axhhDUInk9Qfc1Hp9FFYiGDseChpYUJHctTCa9iSAEegKrvYood5xgl4C6yPd6L4DfbkPv6t\n/1fR5TIVdG45hxkSVpgQmh1vf3KLnsLTvN57Bp9eJNpI409VcF0wsN+SkHos/NE8MXuPw3tz7Ihd\n+KPNCeV5/LzGg3iEMkPCKrt0UsFNES9VHkA3GgyYO0idDq5iHeV1C6cgkByIkJpq8to5gmzSSw0d\nN1W8FNmgjx268FNocvv9Ghv/qIMtuwfJcThp38BfLCMvWBQGA8wO9rAV6CVTiWAVRcKVLB8QX8LV\nXyZmp5gQ5lgQxvhvfIKTXGaUBTTH4LO1H+WSeYosITr1XY4o13mKZ7hgn2HeGedB4TWyQogiPp7i\nGZLEQYAetpgw53nEepk9JUzcStJt7fKWcgZHlIgIu2zSy6I0Rl3TyIkBlgpjXNy+n+6udToCO2zT\nzUxtCtG0ORa4iqMIqEKdaW4TJMvv34sF/F4r28HhNospgV/+1IPIDz2J/9cVPva7n8JZ22HDvnNT\nsMVbtzsLW59xrLu+bw+Yald1tDri9gk1cAC87fJDuHMaTbvJpj00quWQdIB+wB7o4U9+/h/x2nYd\nPptjae8mjmPB37KB8F7XvVGP0CBLiAlm0TBI0EEXOwSiWbRoBXWtjq1WkeMNXGqFhqGxmR1gtHeJ\ncHSP2owLr1UkQL7Jp4rQ6SSQsfBRpEfdxBvPkTHjlBMB6kk39V03da+L3dFO1unDLVYph0PYosCW\nE2dhbQKvU2R2YJyUGKGIl6QUxotGthjiwtJZduLd5DqDDAkrTNvzhK0citNAp4bHLOPeMFAyNoYg\noJ/PoCUF+uIpPHIV3V8jiw+ZJtVTwc1gfQNPrYJatlAxSasR8kEv6wygKhZSl42caSClLRo1hYLp\nJUeAIDlUp04ZD1v0kBWCbNBHGTc1NCxCVHCTDoXYPt3JKoN4alUmsgv4NstouQbbdpyNSA9LkeEm\n9QFkbT8d1UmG7WUi1RxT+gxJKc4sk4wzj8es0tPYJmXFmK9PYFZUliMj9CobHOcqM0xjoBEjxR5R\naujESOEgUMRHFTeT1jzDtTV2yx2ocg1Nq7HM0H66YJU9YiTFOFkxRA2djUo/t9aOUjS8ZDtD6LEy\nJcdLTEwxrd8mKcap0nSDttQm361vpnbJlODZi8O4JwcZHndzVF4mNjIPvWm0K2mMXP3t8V2tTcdW\nV3s3MdWiQtoVKHeHRbUs8+3KkZaR5+5hC+2xsXdz4q3XdwNKSKV2PExmLUqKSW4ETrN2rULtygqw\n9W26Vu+uumdDEDbo4z4uYiGxxgCOInDDPMJuoxPvQInwQALXByosWMPkM2GMFR8JtZtX4w/y4tn3\nc1Y8z7C4xPt4lQ36SIkRvuh+nOoZiTP2a9QUF+Zljd2bfc25QR4wNZk1cbCZ+GcfZj09SljOcDb0\nCkvPjeOya1z+2ZMsi0OESfNP+W0ucJrnNz9M6fdCzH7IT+F7fTiKwHJ8BCOqEZOSHMJBbNiw6kA3\niKdNQr8yj1qGziccdn8oQimq46VID1t4KHGIW3SV03i3qowurGMLArmYn5mTo7ykP8yfa0+hOzWC\nHXlcToWcHaRT2mWSWU5ymaizh+Fo/Lr4K1zhJOv0c4hb+7xwc2yXgMMqA9TQ6dZ2yHR4Uat1zIpM\nXgzgIBBlj0520aliCyJfdj/KmUKQJ/LPMR2doS6p2IgsMkrQKHIud5lQKI8qmBipAOueQWbdUwyx\nyoPCa7ioYgoy09ymiI/n+J6mOQaFBgodZprDpUUGd7YxIiLlQZXjXCVNhDRhouwRII+J0nRTGkAG\nNjaGKHb7GX58ji59hzhJhlmmhk4BP3tEKeO5V8v3PV2VP11n5mkv/2v1Ezz6Py/x5CdeJvgzr1C4\nsEeS/YG3NCmRFr/doifaA5tacrz2PJCWIgTuNNK0jjfaztG6McCdHbfVdkyLMinTBG193I/5n87y\nzO89wl//pxGMf7GAZZbazvDeq3cE2oIg/BLwMzSvxA3gp2jSWJ8FBoBV4B86jpP/Ws8PkGOSWRJ0\n4CDgCAI3OMzs3jTGmpehiTWwYGNliHLBg+OC4Ogeu3QhFB2O+S7TJ64jOA5/5TxGJ7uEhQwLjJNR\nwuSKQfYudlISvfi/f48yXqyUipB18Fol6lmdlUQX4955PL4CC8IY1bMamlOhIPpYToxRsMIIHbBQ\nnuJy8SxGwIWk17BsCa9TYkKco1PcRcbETYUb+mE8p6p0skenmqTrExZSHYRBgUZUpibqGGgU8SLs\nLyBBcrDDAqWjKppVR9Qb2LLAeq2feXOcs+63GJEXibLHIqNESBMn2bTYCzob9NHFNoPGOscrN5nz\njGCr8ON8mi163s6+FrExBJU/Fn6c7tguETONIzv01HYYttaZ0ceRJAuPUEajhlQ3MUoaV0MnuMQJ\ndp0uHjFeIeKk+VzgSSxV5Kh0DXdfjSH3It1sUcDP1PkFYuUUSw8MoOkGMiad7LydbjjFDGk1xJ8H\nniSmpEjrIVaEAaq40akRc1JM1efQhSppNcwtpqimXfA62IaEcUij8AE/mUyMnBnFE62QliKkrBhp\nIwLr35pB4ltd1++ZMmwso0KZTa58pU5uewzf2nG6P5Bi5COznPzDK5i308zWD+JN7x5K0NoEbKdG\n4ADkW/kf0FSqwIFUsGW6ac/tbs/ndtrOMaaDfSjK6x87wavPTrAzE6Px74qs3DKo2JtQrvBeBmx4\nB6AtCEI38IvApOM4dUEQPgv8GDANvOA4zm8IgvArwL8GfvVrncNCppdNMoQxkWnYCjOVQyRLnXTV\nEkStFPlkiPSrnaBCz+gaZzpfZaUwhmbW6SCJQoO0E+FC4zSnpEtoTp3F/Dg1XUOwHBp5je6eLSKH\nUszkpynqQSTBRpZNylUfmUyccPx1XMESW84hnGmbuqWwXBtlPTtM2QkwF5/gdvUwO2Iv8SO7dMfX\nGXKao8O81TJqw0T1GNQknZLqJTyaRqk1UKomyhN1aqikBD8Vj0IRH2vOIN5SmVCjgEtsIFVsDFFl\ndzCGbteo2xoV2Y27XqHL3KGbneYgYEpESKNhUMDHHOMkjE4Wa2NYHpFOew+/WcRxBDyUOMINEnSQ\nJdQMkUImRYw3OUevb5N+1vGTR647uM0a841x3JSJSikAipKXBWWE28IU84yTJoLPLmJJEuf1k+Qq\nQQJCjuHoElPCDF5K7BFFLpp482WCjRxetURJ9FDDhUIDLyXCZNhQellUxuj3rlPExyY9WMh4KJMj\nSMjO4xHL7BLbjwvwNz8iVx2kioXm1JDMpmNUcRpYSJQdD1ggVL950P52rOv3VplAgq2rsHU1BBxj\nIpjDGXbR56lRDReZi/iZCswTzu2hzVrk7OamY4sCuRvI4U56pCXb83IAwu1sc/tAhVZIlReQp0Vy\nwShzhUm0TB7J62N1+AQXgyeYT/jh09f3z/7uHRH27ax3So9IgEcQhFYUwRbNxfz+/d//v8CLfJ3F\nvcwwh7m5n03hJ2XGWNqYxK8UeOTss2TUEJnrUXgJeB8c9VznN8x/xRd9TzArTmIKEtc4xobVR74a\nYE6fYKfSzdzFw/QMrjE2PovnkVuckd9iTFrgD4I/xerhQaxJmQRx8oUIVkBkTR4gxB5+ChQVH2kj\nxnPJJzHqGoau8Vl+hHlxnHB8j8fG/pInpc8zySzXOcKzqR/kYuYs9429wQnPJY5yjQHWqGgezivH\niZEiSZzbwjTHhSvs0sELPM4vrf42D2VeQ3E1kKo2KV+YlcgQjizgIFDCy4dcz/OE/gWSYgeb9L4N\nvimiXOA+VhlkMzNIZj3OoYmrXAoY/IH6Ezwsvswks8wyiUodD2XWGGCFIZLEMZFwgAL+pllFO0te\nCnKtdJSAlmfYs8wQK9QCLm77JjH2qZE8fv5S/yBhsiiOyer2GA1BJjLSvCE0deMFig+6KDc0Jp0F\nHNNhRz3K83yQbnY4wg1WGWSZYVYZJEOYOEnGWESlzhoDvMj7uaCdBgGquEgTITUUh58GLoLPXWRa\nvE1vdIsuZ5tuaYssQdalfgY9q0Sm03zuW1j83+q6fu+WAVxh6Us2W6+4ebbwIZwzk0g/cYp/d98v\nc+at5/H+Uomv1GF7H51dHFjLWxuOcMBFaxzw4e0ywhbHXW073qKpSukATgLqL6q8fP8D/NGV/xv7\n9y/Am3PUfs6iVlriYJv07099Q9B2HGdbEITfBNZp3lifdxznBUEQOhzHSewfsysIwtedsuogoNDg\nMifYpoc9IUpGCdOhJehzrVNBx/EDY0AQVuQhfl/6aW5sH8exRB4ceImi5MPOSphvudjKDZK0TMqa\nl91GD8FcnkcOf4ZOdZcsIc5KbyE6Fm/a96NJBm67Qq3opWD6sHEwUCnWfFQMF4ak4YpUcLkLmKJM\nv2cF1dUg6k4Rsfbw2kXyBOgNrKOqBhklyB5RqrjJEiIhdHJDOkIBPyGyjDoL9BnbBIQSH1S/TE9s\nDcdrkVO9JK04RdVLWEzzhvAAWYJ8kBdYEoZZZvhtS314f5J6v7nOKfMqN9VpMr5b2L0yEVcSR4QC\nPgZYx7P/oVOnRq+9SYedoC6q1ESdMGlcVKniIkmcnBikJut0unapSyqrDGAjoks1ZMmkk11OVK/y\nRPl5Uv4wSTVGxgkjRupUGj4uZO9H9piMagu4qXLNdYyb2mE8jSqqVCOPnwHW6GQXhQYLjL1tO5cx\nyRGkjIcHeJ0gzU3d1wrvZ9vpRNRNutUt4kqCVLCTY2euEXMlWJMH8UhlAuTYpI+sGcTtVLhPvsjR\nnVvfNGh/O9b1e7eaojqzAqUKlBBhJYv8/93is2/1cX7rcRTTYbV3GvOITtcjG7xPepPJxCKu8zWs\nWcjuwKJzAOItProVNtUKehoCQt2gTAsUT+vMxce5aJ5l46974UaVFzZuIz3rsH6pn/TuTazVHBgi\nJFsM+t+/eif0SBB4iibHlwf+VBCEj3HnJxu+xvdv161fe5ptstzAovGIH/2haWSviaoYNByFsuOh\n5nXBiEOwM0POHeAPaj9DIRuin3VOOBeo4Kbe0FDTDQo3gpg1FR6C7GqMzZuDWJrK+sAA274uJqQ5\ngnaehq3gUzPYZYXMskCt14UZFCmaXsoZH3ZDxOfOEvZniOpNCqbTvY3q1CniJSXE8IlFCoKf4cAi\nU4Fb/AXfR3V/Dk6SDop1P05DZF6boFPeYYoZFNukgyRneQshapE0wkhVh4zHj6Fp9AhbFPCxSycu\nKmSIsOwMc855g2FnhaCdI18N0WduMmStMWitUVM0lFCDrBIgQ5g0YUDYH/DgwUIiSB6/XcAnFIk7\nCY5ynTRRloVhCvixkAiJWUZcS6wwyJw9yXJDQ66auOpVvMESveY2jxqv8IZ9HzU0ioKP6fBN1qsD\nzOcmuaUcpibqDMhrZIUQBdGPqcn7499KxEmhUSdLiCRxivsKGg2DIl72iGIi0802bqfCReMchUYI\nu25zJHADpAyr+jDDnfN4XQVe50E26UXAQaZB6cXLmC9+isvSJtup5De98L8d67pZL7Z9Pbj/eK9V\nAza3MTe3eYEgEAF0cD9IqN/N6NlZRpQyPSsNpM0yxrpDBoEVZAxcyOhoyNgImDjYmDjNkGR8mIge\nB1ePQO6Ej7X+o1ysP87y0gT55SIQgr+s0ey/L/2dXoW//Vrdf/zN9U7okceBZcdxMgCCIDwNPAAk\nWl2JIAidwNd9B/2TXwtTZJAK/4AqLiLObTLRBDYOr/I+Vq1BEo1uBNPm1NB5hKjDS8sfQArVSQcD\nPCM+1bSxxyXiT23hKJBdjEM3MAM7r3Xxf5V+FeFhE/l0hRO+q0iKyYQ8T0VwUdoM4nwF6lMqRlSm\nUAxgregElRyjJ2aIyM2O1ESmiI8yHjbsPkTRoSj4UGjgpoK4LzHU94cK5wgymN/kwcQFPAMVrvqO\n8nv8Y57Sn6Wfdcp4WJRG6cineOTia/gPF8n3ecnIYUZYxk+ROSbxU+BDzpd50HidoJNFrtqISxKq\n1EB1NZi8tYSjC9RHFN7sP8U17zFe4SEipFFoWtN72UQWTJ5WfgARmwnmeL/9MheE0ywLwxhojDPP\nMa7RyybwCDPWITYzA5jzGu7tMrFHUyzFhvDqBbakLiKkOcUlvJSY1Sb5bPRHWChMkK5HsUISulBD\nxnxbKVIgQH7/YSITI4VMo7kxjISXMhI2NzhCHZURcYmByBLb2S62dvsJ6CW8vjxD0UWqko4DdLPF\nHhEK+138jz92C98H4DPCv2TPkOF3PvoOlvDfzrpu1iPf7Ot/B5cFVGD5NfK7Ijf/0mCNAfRGB1LR\nxqmC6ShUCeAwgsAQAmGc/XxBhxywjMgCOnnktQZCCqy/EqkqLorOIvX8OpTt5ut8o/vme6YGufOm\n/9LXPOqdgPY6cL8gCDpNsusx4ALN2ZufAH4d+Engma93gkXGcFElSI5eNhkVFhFkhyousk4IUbRQ\nOxok768T6krjcZW4z3qLEd88XleRtBChm21QHK6ETpILRKFUhj9egRtBlIqH+Pg2tUGVnBPg5uVj\nSB4Lq0vAWHcRa6Q58ZHPsdI5wHahG2tBR3Y3sFwiu9t9lPo7UOcAACAASURBVIM+op4kvfImq4UR\nNup9FL1u3qi+jw1zCE84j18uIDgOS84Iq8YQK/UR+jzrVFxealGdeXWMDGECTp6uZIqhxiamS2bF\n14fgtdkZiREWs0TyeWS3zSmuUTXcSAWTekDG9Ivk5ACumoFqlZmNjeFTivQpG2iDdaqqi91IjIvK\nKTKEOcUl6vv2AoUGk8wiCA63mWp2346X28I0mmBwiktE2UPDoG6rvGg9QkqMMSCusulxcHpF/P4C\nksfkljPNdesIhqgSJPe2/Xx9b5C1mVHyPUF8sQKmIDe19uTJEWSLblJ0YCKR2O3GKOkM9K6RTURI\nJbqYnJqj4nWx7vRjCyKlsp83iw+xEupjzDPLD8Y+R0YLsFIaZm+nk3IxgM9TxD+eIZePUqr4yEkx\nKpoXPV3l5peOU5/Uvt6Seyf1La/rv9/lgFHGNqCahSoaB7oQaBIiOk12OgEUOVBa12iy2Pszcup2\nc4cy13quwUGc1Hfr7nonnPZ5QRD+DLhCk0S6AvxXwPf/s/emwZKd533f7z1r7/t6932dfQazYLAN\nSRCASIiiSK2x9mxVLtmJSxXLTj7I+ZC4KvrguFyVuORIlixZsiiLEkASBEgAA2AGmBlgMPvM3fel\nu2/ve/fZ8uFOWE6iJK5IuASF+6s6Vd3nQz91uv/17+73PO/zB/5UCPGrwDrw0/9Pr3Gre4oea5eA\nVqVX3maQdbw0aOBhV/RgyArdmEYj4saUJNxSg1Pu61zkfcKUWGScQdap4WOeKUTbgo02vLcLTQd1\nWqLnxCbdUQ2aDntbPRgBBQIW7RU/6WiWo5dukStFYVegVwzU/hamJrO5NIxbriDcJie4xVZ7CLul\nEnUV2awMMt+aJeHfwivXkLGpOEEqnTB2U+K86wOabjdz+gQfyadx02LaecRgcZPx+hqOGwxFpugP\nUhoLENyrEyg1cbULSJqEr9UmvZyhOOxnNdTHXekYpe4uSXmP631nSKs7uO06AX+dkhRi2TXIPBOo\nGJznGlv00ax7cOW69Cc2cfla2AhWGKElPDwQs8zwkOPcYZJ5dklznyNctp7DazXplzbw+2p03C5s\nU8KjNShYUZbNERJiDwONtuzGQKVYj9NZ9kBYICQbGwmVLmGKRChSxc+uk6btuKhWg5gFDU+qhShC\ne8OLZ6RJUURYaYwSClXIddMsVGbw+UtMeue45Poeb4gvUi5FyKz2I9UsAr4SfW6odwIUOzFyTi+7\nwRRatk3xtRRW9/9/98jfhK4P+X/j/+imbrD//XjI3xT/Ud0jjuP8E+Cf/F9OF9n/i/n/yXZxgHuF\n0zw99BamV2GBCYpEaOKmg84OPeyYvew1Eyx5RjE0hX62qOEnTIlZHjDHFHc4TpYEnTsSXNNg6AkI\naDSGFT5oP0NffYM+/yaBS9X9SC3VYWHiCHPSNJl8jMpfRFHdBgNfXaLq8lMrBaENLqlNVC0yzBqR\nSImz9vu4lBbfl17iQ/M81U4QRTHwKzX8Uo2uotFW3GiizWJnnMXGBFqwTUrLkCNB16vv/7DYgnbM\njaLZTOTXcbc6iAbIm/Bnoz/JqjzEP9r5bRajo7zDRe5zBNVlENZLuOQ2MiaLYoyoaz8RJkuSPrao\nEOQGZykRZvvBACv/cpKX/otXmDj3CBsJP3UilEiSwU0LGYsIRTw0sYRMXMuxWh2n3fLxa9H/lUeV\nI7yWf5mhgTVOuT/mgnSNZ5tXiRgFCr4Av8N/jq+3wj94+Z/yb2q/zFp5iD1vnNfFi/Syxdf4c05y\nC7fT5lvml2n1aARTFWS3QXwiiz0oSPhzZO710rgdov2Ci6HkCkfdd2lobvasOL9l/BZf1/6Mzytv\ncsfzBJ7xChQsVn53Et8XK0SmcuQzac64P6JndItXfuXr1Pvdf63pI39dXR9yyA+DA9kRmXLv0Ax5\nOC19RL4T5W3zEorLwC3v39JzECSkHMPaKqak4CBo4ea9xrOk7QxP+d6hv72NZAuqbj/KBQOX0k8u\n0E8gXMUbrZMlTb4RQ/Z2qdtBnK6E0jZIx7fxKDWCcgltyqLh9pIJxunOuzGKbgjAkL7OkLRGEw8u\ntUXX0HhUO0pT95BI7OLTK9gIKt0Q3ZqbVtGHUddYMSYJeMoMuVbxSzU8NLEliaXQEHtShGX/KHFP\nhiF5DclrYOoOtksgVIeq18+yNsyb08/yKDbJIyb3t2XL0EFDfbw9QXJs/I0mlqwi3A7bVi8ZUqiK\ngYOgagTYrvWxbfai0qaGnxQZ4uxhoRCoNYiYVfKBEFk5SU7EiYoiaf0qo6wyIq1QcYXoCW5SVkJE\npAJDYhWvWqMsgtzhGGMsYesS9bgHo6xRbwRY94zSVFxoapeoq8CeNMWeiDMgbXDEfZ+YyKOLLtX1\nIJn1Hu6cO04lGiA1tsOeGgfHIaHnyBZ72G70s9NJU0q/RdKzy48P/jneWIWSJ8yNUxcwV1TEnk30\nZI6wL49P1JCPdnBU90HI95BDPlUciGkPeVeo6T6OiHu823mGa+3zDCurpMUuutPFJzWIK3tMKXM8\nYpoyQbpo3GudZMlukPTu8FT3OunuHmvyAOYLKs4lldJOioBcImbtUXwUo9L20qomadaSWEJH97Z5\nYuAqI54l4s4ewUtlVsUIy/YQzUU/RkNHOdeh17VFnD126MFNk5yV4s36C7gCdVKBbdLsstXqZ7nc\nS3sjgL2hQNVh+cQkZwavcSn8NgBlK0TWSnLPP00lGOQKT/NT/CkJMuzqcTS7g2w5WAkZW3VoKzrf\nPv0CGVKYjsKM/RDLVqg4AWTFRpZMXHabSLNCV9NpuVw8qBxh10yTUjJ4jQZGS4MENHUPWfb7vP3U\n6LO3UQwLT72NYtjs+tKsyCNs00ucPS4q73NRukpWShDz55j0399vxyTGqFDZcPeywQDvOU/zeftN\nFEyuS+eo1gJ0ai4yvl4UrY3mNoi6ihSIsiPSHFEeMME8furc4Cw7C30sX52kNuUhmi4Q9edYbo9Q\nq/uw/DIblVGKpRiOIZOLJhmMrvJz3j/AQmLBO8HuT6Qo/osk0rxN33OrRLwFHMPBlagj7/r/lu99\nO+SQ/zsHYtrNQoDV4gQfDZxlVYxg2gp5O0a1G0DpmFzwfEBYLZIjToYUFhK97PBs8C3ajot3xTPs\nenuwhcK3Ml9BChsgHKy8TOZ2H/l7SVoLbpzaGqZ3E+vFIBzXcSLQlTQWzAmutJ5i0LOOoar7o0ED\nDi5Pi2hyl7wewWYajf2hTEUtgidewZb3o7HGWKKeDdJ+6Mf+UIa7IDctQsfyJIM79LCDjEW2meZK\n6fPYMYWUZ4fTfMQaQxSI7f/6FXvYssSqNMy8NEkDL8uMMsk8QbvCt5pfplBN4jY6PJf+HnXdx6bc\nRyhc4ZZ0lFe6X2Hr9hDljQi1ehRp28ZsqqBDUY7gehxSMMQaR1v3mcissubv53b4KKvyIC7a9LNJ\nhCKDhS1S5QLdAR3VY2AjkWYXnf1OAHCIs8dX+Eu+1fwyDeHlpPcW7vUWertF9FSGhJZlQppHEQaD\nrNPAQ5gyTTxkSXGH4+z2p+E0KD6L4nKMys0oLdycnHiT/+Tc77PQM8nDxCwPnRm87jp+6oywwvf5\nPKuMMM0jUl+9TE93h7R/B4HDrpxm1v+AB/9O5W/HWPtDDvmP50BMe6MxQDEf492eZyi7gvidOrYs\n0XQ8yKqFJnWxkNl2etk103SaLrolLxOxRzg+hw0GyHR7kEzQXB3akkpb0nHHGjQNH+2VIKwAaR/O\nkSi+8QZyn4EUtilJISTHwlBUVjsjdGsajVYAPdFGKBZtS2fHSFM0w8iWRaMZwETBE67RkXUEDkHK\nuKwuSILARBFD0ulk3HSXdPYCCeYnJ/DRIFtMk3uQ5MHsERopN/3aJvOt6f2kGddHLItR1qVBikTQ\n6JJml216kbGQsSgpYTJGGrkKd0LH2XbShCizp8VZZJx5JunGFGg71O0A3G+CKuAnIFPooTuv4R8q\nU1UDVOUAq54B7nqOkNPiTHaXaCpuaoqXEGVsHfK+KB1Zo4uOhcIUc1jIZEliI5hgkaPc4wPlAjX8\n7NBD0+fGriu0P/Tim27QTWh8o/NTqIqBLCzudI8xozwkqeYIU2K8bx5DXyfTTFKuRqkTAgGaZBAW\nJbzuOpJl0jUVvFIdLw26aMTJ02KdCkHCvQUiFEiRYYkx1qVB3FKLidG5Q9M+5DPHgZh2tRXAX6nx\nwJwFHAJUaXY9SJqFx7Ofcl63fazYY+S7McrlCEtrs2iuDmFfnhZu1ls9eIwW52PvsWyOUTCHcA9V\ncfrBiqvYRQn5+SieX9Xpj68g6yYNx0OxG8ZDk4SWY2lvnMpuFLYVEse2IGiRyyVxBVsouonZVrAL\nGn6nQX9gjZrsR8bEQcJRBWrSIPZ0hlbZS+Fhivr7IZa0SbqTMnHyZKs9sAK76RQibKJqBuutIUJO\nlXPadT4Wp7grjhEUFUbFErrdIW/EqMhBLEUm5c7SVT3k7SS3jJMIbPxOja6lU5LD1CQ/vqNl1EGD\n0nocXqtguyXsCy72PkpTLEXRE3VmfQ8Iucp8kI6zTQ8Js8CFzg3uMsuG3EfIKbMbTNIJq7ho00HH\ngf1t+XjYddKUnAht00XC2OMJ/UNsRXCPo5hDCkrNpPBGCrwP2YvF+Wb7q5zTbpCQclxuXiLlznBO\nvcEUc5hJhW5Q55Xlr9OR3OjjLTS6WLH9aY85EtQsH04H/FIVITksMk4v28REnnscpWKE6DoudLXD\nbXGCuxzbv0H9xbv/p60thxzyWeBATPsfV/8HxI7Me91zXH3wNB9fewJrVCYwXiI8UiJMiUInykp1\njLRvm2CiQs6fJOAtEaFIDzsE/DU0x0CTOxjrOs1KAMZBPdsm2JunuhihZ3iTo7HbXFCvskecD5wL\nlNth8maMqhWgcS8I78jwBpR/MQ4TDhQ1XGerhIfyRPQihlsjSoFnlMs84AirDDPPJBmRRJJsvDSJ\nR/MkpnIsZ6awwjIddKoE6AyoBF/a42dif4LH0+AGZxn3LxAjx3flF7jVOkHGSeF2t9gS/TQbXh4t\nHyeczDObvssv83ssRie44n+adVc/btFisr3Azz/8Bov+MXYmehgSazS9XhZHJuC/69KyPRT9Leyg\njmXLtJsu/K46smpxk1NEKaJIBq95n6csgmSsFN9tvMiItsJZ9w3GWSRIhRRZVhkiSJUnnQ+Yqi0x\nsLVFeLlI8EyNQE+VCEVO9Nyl0Erw6sZPork7hOQyfd5NlqqTzHWP4gp1WNeGuMJFdDrsEWdZHcU3\nWGLULBOgyglu09Z0/pyvcoI7PK98nx/3vIpHanLbOcH3zOd5QvmQ4+IOT/Muv7f5n/Fx+wxTY/ep\naAE0uiTIMXDYSnbIZ5ADMe0BbYM+X4YFeYh+7zpGRGO+PEN71UvDCiKnbQJqlYSSRZYtLE3C7WqS\nMVKUc2HyW0mMpIwkWxiLkxTuJDByOq0RH+pgF0+qxdTZB2jeDg3LC46ga6k0TTcj8gpFK8Jqaxjn\nvgqPJOg4RLU93OEmHU3H7a3hkvfnQvs9VSJSAQAZEwmbAlFkn0labBJQKxxt36fP3OE7k19is91H\n4b0UtUQEKWKSGMwQkQoYqOTsBGl1F0dAGxcBqUbKyRASJTS6dCQdwyMTU/eYZJ4+trBcMllXgvzj\nAUuz9n18vhqD7jWel95AwaKraowpi4RmqlStAI+sSfZG0hTMKGWXnxUxTNdR9kMiRA1DKLwtnmVC\nLDDIOu/Iz7Il9e2vfXOPFBkqBGmjE6HIUe7RL+/Sdet8HDrBvDbBenOYTKGPY5H7jPSs4j7dRo83\nUaUOZ6SPuM5Fsk6SEXWRohzhNicZZwEfNfqkLWpeP/V6gEbdRzEYpqiFWLLGGZLW6ZO2CEoVNhig\n2fFyvv4RI75l+p0tJovL9JnbLLgmaYr9CYI6HVq4yZA6CPkecsinigMx7fXwILHRMkUtTM/4FjP9\nD2hc9rG0Ocl2bpD6uQDR9B7HAne45xyhYgUJKFXm2lPUt4I4lzXs0xaOKnC+ocFNCTIOZtyNcc6N\n57kuTz77HkvKGB9XThNSihScKJlWmq/6vklBjrJV7cNc07BNEF9wmDj/iOSJbcqE9rMY7SDr5iDj\nyiIKJotMUMePmxZdNKLhHD3hTSRsnti5yYs738eYlnnj9ovc/s4ZrJMKsRMZBuJr5EhQssKUzDCO\nIoiJPFGryIz2kJiUR6WLZhm4XG2C43lOODd5wv6QjEhhIzEsVrnPEfrYYlxfZG56jIhT4Mv2t5gT\n08jCYoQVJrqrlAjxtvcp5qanmHOmmLOnuWaeJ9Ud5mntXYJOhbwd47p1jlnpAWeVG3zf94XH284D\n+Kjjp/aDeSpDzipjLNL0eng4MsYbI1/kIbMsZSdZXxjjwswHXExd4cef+gveNL/AZrePGfURu2oP\nWWLERZY8MbJOEt3ucEZ8yKx4wLI9SraQpr4RYrl/FCXYRdfb5PQEy8ooWZIsMcZR4wH/bfm/p6mp\n0HEILrd4YvQGRg/U8dN1NGq2n43OIOvS4EHI95BDPlUciGm/XniBynCAdyqfx7IkJkMP+PLpb/Ig\ne5zXtl/mtVdfRvN0qZ3w0R2S6IlscYEPWHGPkB+JIQcdNuRB9koJOCKgC+6JJv1fXaE9rOOKtQn5\nisREjpiWw1EFnZyH9o6f3FgKt7fBmdhN5l46RrEUhxhYKRkvTdJkiJGnJdzcVY/RLzaJkaeN63HS\njsSrvIyfGj3ssEua5cQwH7uO8kL2+8zG5rj5Kyd4GJyhGgjgok0v2wxLq/iUOgUpSq6Q4p/P/QaB\nsRKxVJY0u9zLnGSxNUG9R+cN60U+NM8iuW2eV7/HWfkGFjIDbDDGEr/Hr7DaGsHV6PB88HV0rc23\n+RJvu1qUCDMnJpnmEbM8xJZklhamqLeDNI57mTcn2DQHsD0Sj+RpOuiPwxn8zDPJDc4yw0MmmaeG\nn0S3gK9tIDwthtR1vsCbxCjgC9Wxj0k8Id9ksrnMnifK+Tsf8kTzY/LnQqimTbfrJefsB12ILtza\nO0fT62cq9IAZ6QGWpnPTOk/3TzwYfhfiCYWRiTXC4QILTNDAS8kV5G5qGlXvEKRKINbeX7dHxkRh\n2RxlbXOE6isR7J6/XgjCIYf8KHIgpv3+wtMUh8KU5DBCstiR0ySSOeJ6hlFlnmwuhSkreNQGRkal\nWfFTCCZoqAEMy4Wl2FhzKuzK+7kiNHCsKuawjDbaQfc02aGH/F6CdsHNpn+IYiVOt+Rh+cYE/lgF\nI61hyTK4QGgOU3uLnBPX8CZqxNmjQpCa8KEKk5rtZ8foISHn6Fc2OcUt8laMvBNDk7s4HoeWotPX\n2qJf3yDl28EOClb0YcDZT5wROeLyHisMc1c6yR3tNIPyCpJpUmuG2LV6EIrNjHjEtujhTvMk4iGE\nvHW8iTbRWJGW5eFa+yIZX5q20NEkg116qLX93GqeRvW1aUhedus9xFwFIkoRjS692jYBp0qv2KYl\nXOSJU20HqWpBCkqUuuXDKzVIyDkKRCkSwU+NHXowhU5cFFDsNpJl0ZU1IhSJOkUsR2FVDBMSZdrI\nDGpbdA2dG92zdCWNlL6DLWQ6pkbX0LCFoCTCrDuDiK5Da7EJ7y5hd9P0xgsccd1Dlbp4Wm3OVG+x\nEByj4fLyLeUlUmSY0BZJxAvYLoGLNn5qrIgRmrIbr6+O4rYoHYSADznkU8SBmPadmydZPD7ByaHr\nKN4uRaJc5SKJUI5Lwdd5d+RZGnhJy7ssvT7LcmmG5fEZCNiINjirwCvsz1v7ErBeor1dZ3VpmN7o\nDn53latcpLiUpPphlO2J0f0JEqbDw1eOIeIO4kUH565AVGzkpMXzvrf40ugrFGJ+PDTZpJ+70jHW\nGWDFGuFW4xSmWyGiFPkq3+SPrZ/jsvUcz0mXSYkMUS1Pe1gmtl1jdnmBt6cuoepdPDTx0CTm5Oln\nEw8NWmEPi0+M4qFGsRHlXvY0A9EVToQ+4mnxHlfFRSp7YarfjPHd0MvcPHOOXzr3O8x1Znhr74s8\nNfwWX/S9zpBrjVf5cW4VzrCzOUhkOAMqlAtRFmMThJQiFULMTt5n1rnPFHNMKnP0il3+qPCLaD6D\noLdCuR1kQp3nc9Jb5EiQI0ETD2/zOQbUdfxqmcHOOntmgivyU8TIY9R1dpYG+d3xX2Y6dIannCtk\njqZYNwf4w9ovMOmZ46TrQzbpp9QYpGW6OZK8j1tpUjAi3Ksco/bmOvxvV+CffZ4Tn7vJr0Z/h2/z\nJZKZPL+++C/5xvRX+K7ref6AX+Qo92hrLmai97GAoFNmlBU25T4KgxGG/tN1Ak6VlYMQ8CGHfIo4\nENNWvB2kWJeF/DSBdoVwLEcfWwSpIOFwRL3H5vIQi1dnqLf9EAY8kI5s4dMrGAmN/Gtt6hs6rI/A\n2QihpMWp429xMfw+YbPI/1L6dZo3fPAa+8G+QVCVLtM/c5/Z6D3GUwt8GDrLjtmDo8OK0sdf+r7E\nhtTHi/nvE7IqDMfX6MoqeSeOY0qU7Mh+CDGCrqISlMpkRIp7HMVAxUOT3UgPc64Zlr3DZEjRQd+P\n4rIsGh0PLcmDX67xZfVbXG+cZ7U2gmXKZOd7uKUplGbDjLhW+DuJP2DzF4a4d+cEG/eHeSX+NZwe\nm/TABn5XlSxJNhhgsTWOqnY5O3QVr6dKRCqRiOW4qx+ljo9hVigSIdtO85N730J1mwy6dyEEc51Z\nvl36Ck23j4Ic42P7FHfqJ4ioBfrVLW7vnGFDH4Kkw4S6iIRNDztUCCL5Tc5PvEvBH2alMUpmZ4Bg\nooA3UOMJ34ek5V281JGxKdthGqYXGZPj3CHaLrFzd4hacgz+bhySMfbMBHNMcpR7dEM6vzX1j6n4\n/Rio9LNJlDxep45qmQzJ6+RI8vvWL+GVGnxOfos+thkpr/P7ByHgQw75FHEwaezCwfkA7FEZfKBg\nYaJQqkepVQLokSYWMqVuGFeiTShdR4t0cdstPE6TUM8WXb+XlieCq6+Ka9Yi1NtG0Rx6rS3GlCXS\n7JIz01Q6Opjg1ysk/TsMDq4w6p9n0nnEI20ar6gR9hZ4yARr9IOADQaIs0cdL4VynHo7QI+6g5Bs\ndkkDDqWtKO2il8x4GuF1UDGIUqDiDnLXfYw6XmQsbCRWGaGNjoFGzfHT72xynDvImKhyl7gvCw0w\nUNmmjwkWmPDOkzieo9oNsG4PstCeJOVsMxxcwAG2mgNs1gYo6yHGXEtccr3FKsM4SHiUBhI2EavE\npc673NaOYaDSfJxWbkoyE655HlpH2LL6SCo7RKUCsmOzafWzZfSTtXpZLw9TCQTxigoFOYrHaWFY\nKm3JhaErpPVNLBwKRpyKE6SKF2+7Ru/uLu2om7CnxIXidSyh0FbcVIoRDI9OSmT4vPwmj6ZmyMaT\nxH0f06NtknFSBK0qm9YA7/MUgWqVgF4h7C8x2Vqi396hqEUoEGWr28e1/EUmAnOMeFY53rrHVHPp\nQOR7yCGfJg7EtM2mhvqbNkN/+BBftIqFwjKj7GXTZO/2EjmfwRlwUL7aJOrPEtf3iIoiD+6cwDQ0\nTpy4RTb+JOWTA6R/dp14PIdTkbl65xkm++YZHV3kWPwmpeMh7pVOgwy93nWeGH8fIRxKhLljH+f2\nzhksRWJ0ZJHbzkm8NPgxvsNarI/7TPKQWW5sPEW95uPSqTewXBJFIsiYbL0/yPq1MUL/VQ7N28ZP\ngvd4mhZuyoSIkSdEmQ4ay4zikZv0eHa4bx6hSISrXET2mhzx3kHGhl6wkegKjQ4aJcL0skP69Cb+\nmQKV9QR+u0aCHGVCbORHWF0ep+/YKqf0m/w0f8pv8xt8wDnauIizx4Xum/xK8Q95JfwS9z3TXO5/\nkjWGqOFnmBUUX5uYN8Mx6TYXuUrc2eOK6yLze7NsZ0dwVIFLbZIjQQMvVTvApjnAtPKIqJwHIE6e\nhHcPbbzLhhhga3OApe/NMnBuhc8Pfo+v3X2V8FCFcjrMjYdPocYtwoNF/psz/5R5ZZLXXV/gOXGZ\nOj7e5wKvd15gPTdKd9MHQF98jXNTV7hQ/JAxa4kP+47zrniGD+pPUX4Q5/a4F1+qwa/t/huS+t5B\nyPeQQz5VHIhpv/izr7J3MUFouIxX1PfTi7aHKDaiWAMO1VthpJCJMmtS2YriVg2GB1eJDmRp2262\n5R5SL28z2lhkOviAtuRiXRtGitu8kXmJuew0W6MpMsleOA+EoOXykHHS7Fb6ELKD31fCSVkYeY2r\nVy9RTEVxx+q8HbxEVBSQsSgSYbLvAUZV4/bGE5gxgdAsWJUpp8N4v16mP7LBOIvMdB5xZvUONY+X\nBwNTbNNLFw2dLgNsogqDsFMkIFcBCFAlJvYIUcFNi5viNLeNk2zWBtDdXTzuJqsMsyX1E3BViPUU\ncWkt9ojvd5FEVlDU15F9BpKw+V1+jQqh/d2leMgZCd7ofpFNe5iK40UTLSRs9oiznh3izuXT7MZ7\nUEYMBtMbODoUCfNV7ZssR+8x55ll2RgBj4mNzDCrdCUNW5HYs2I4tuCIep8pHmEIjaviIioGfZFN\nZi89xBurY3kl/nD2p/no1jnu/9sTNB94WU5N8L3TP0bq+RyL3gneqTxPORJG19tUHT/n9OsktQJX\npUs8mXqXodgyOk3MMJgORKUClpBp+zTiR3aYCdznpPYxN5PHsZoS+yOvDznks8PBTPk7s4x9Bly0\nsE2ZZseL3ukQcRfoRmSq34lByCF0skDLDtDuuCm2orgDDWTFoECUmaMPmGCRJFnmd6eoZkNYFZnV\n1jB5NUKftUYsvofkF0iOje5r08CHsKFaC7K124ur2qaz66G4loAzNk2Xi7vGSXr8m4RdJRRMopEd\n2oqHK0uX8PnLeKmxtTOC0tshOpEhrBYJUSHkVBjobtDU3VTwUcdLBx2f3aBZ89EVLsyASlCUUTER\n2ASpkCRLgCrLjKI4Joat0rZd1PBTIkzVCaBKBgPBt0t4jQAAE8lJREFUdSwh07S8NCp+/HKdULxA\n3fCT7yTI6glUuoQex32YjkJb0vnAdRafXKWfdSRsOmgUrQh7jTQ1KUg4WKaTcLFFP5KweE55B49o\nsWEPkfJto+j7yz59bGMIlaIUpWF5iTl50s4uI2KVfD1OdjdNO64TC+1xavJjDFQKnRjfET/GenuY\ncj2EKtpUm0HuZk7yejFLRQQp2yEWnEmUroHTlnnK/Q4hbxUrovFj0VcZ0NepVoKE9DKo/CDqzeeq\n0ex10/d4vfvj4HF81Dk07UM+axyIaWdJUsNHkDLr7SHm6tM83f8uPr1OvhrnzodPIOI2g6516qM+\nSq0I7xee5kjkDhGlwC5pBthklGWWGeX69Yt8+N4FDFkh/nyG2adv8/PyH7MmBrnqXNyfbSFkhHB4\nMnyVlbUJvvnqTyHugmMKGAJx1MRoKhQXkoSnS8TTe4/XtX1k1TRWWGbIvUaKHfL0oCktgloFAVQJ\nsKX38nBmHCGgi0Y/W2h00Owuby+/wKbSx8ixeXzUUTAxkcmQIsEeUQp00OlRtzEjMlGRx00bjRwl\nJ0LX0YlJeVy0KXZj3Ji7SN3jRR9t0K76GdaWeTL+DnvE8dJkggUCahWhODS9HprCg5cGPeywwgha\nssPoz8+zuTxCpRriunMOgU2UAl/iO9R2g9xZOcOF05fp82/ip/Y4jSZAiDJPq++ReByVWMPPwvYk\n9/79aXwvlomcKvzgZuVOpY97V04hjZgkX9xEsm1KpTjlfJxv7f0Eo+oCZ8Y/wJRk1gsjrO5OMDq4\nxPnAVb7se5XJzhKxYhFpV0JJGBQiISreIEkyjLDMBv3U8LNHnPscIe3fhcPpI4d8xjgQ037UncFE\nIaHksCoqxpYbZ0raH42qF9Ce7CIFLGLkqUl+wnqJ06GPsTRBYTVG7rt9XHvqSTpHdWZ4yMDRVZZD\nwxQ7UY6O3OaCdpUHzNBGZ4ANdughQpFxFukXm6j9FudfuMJczyylQgwkB+d7Cq6+BuEfy1J/EGD+\n9lE2JpvMxO+RdGfwRUqc0G9ySbzF2dkPWff1s1HpZ/XKBLHeEoMn11lSxqjjo4NOgCpJskSkEtN9\n92gXNZauzdA3tsap8E1e6L7BDfUMBSVKgty+8RsDbFaGGfBsM+md3x/vWurhfukUH0lPMhpaJO7J\nYmsyjVyA1o4Hq63i9Mt44i2S5NDoEqHIkFhDCIdVhrGRyJZT3Fs6RaivwLnUdQJyFX/vazhRiUVt\nFBMZnTb/jp9hLTZMSNljhRE27w6gzDl4T1UZ7l3hpOcWGwywwMT+ElI7TD6QIPX8FtVKEPuGxokj\nt1lyjbHgmsIalmi6/NgNQSBSxK3VsZGo3w7td9WMj9AoBZEsh6n0PU65bjIkrdMRGlktDn6HtJ2l\n6A+xpaXJkuSedZRtp48L8jX6xCY+6hzjLqZ0MPfRDznk08SBqF51DNqmi0I5QS0Xwq6oFDtRRNnG\n2ZNJndkBv6DZ8lPrBAnIFfr8G6y0RilsJKh8P8qd8CnkXoszwY8IjRYID+6hNtr0aRsE7Qrvms/Q\nK+0wpTwiS5IAVaaYI0KRttdNsL+E5usgVQykio31moKUAz3eJP9Wmno2gEhZxLUcvc4Gw95lTlq3\neca+wlTvHA+kGW7nT2LndcYCy4yxyFWeYt0ZpOIEGReLhEURW5IIJwr0mRu41gxcRgPVNPE3mtSs\nMBvyEC5PlzVpmF0jjdVVaTkeqnYQj6eBy+zgazXISmmC3jJBqYgUMlHrXbRSF8vuYluQt2PYhkyY\nEj6tjl9UEYCHJi3bTakboV1xMxDfZJr7yFhMhx4Rtsu813mGXVLskObN0vMYuoK/v8RGdZBWxYeS\ndfA2K+jtDmP2MguuCUpKmBh5Fu1x6l4/0Zkiym0vTlXCsFQMR0VyWaSHtsi1UoguDDibRJwSXVvn\nmvU0hq3SdLwYhkZS3eVI5A69bNFuu7nbOIbfV2Pcs4BXvcqyNsRDZ4b7zWPcNs7QlNwc9d3FI5pI\n7G/j36b3IOR7yCGfKg7EtH9K+wavd15i/qMjlIwIVkLmkTMNczNIVyR+/qXfp5H08yc7fwezoFLy\n1vjejEYhk6KaCWN5ZMprMbbuDLF5foA9dwJJdnjC/yEWMu9ZT/OoMsOQa41j/rvMM4mLFm6a9LPJ\nw62jvHPjeawTNtpUHV3r0AwFaRketip9WB0Xkm6hJBrcKZygtBfl5Zk/52j5Ia6WSbknTFQr8FL4\nO/zc1/6YgFoFHLKkWLLHuG8dIaFkqQk/xuPukZ7ENr/5zP/Id7UX+aDzJH9Z+ylqS34MQ+H6xFMY\nLkHAVeZU7AbrO0Ncz1wgOp5hOLbK58KvscAkhqywJMawe2ziqe0fLKu0ZJ237M/TKASZlh8xmlhi\n57GBaXRZM4ZQfCb/04W/j1drUCHIImOYKISNEl/P/SXf8b3AdeUcxWsJ1HSbwOkysmLiO1YhcrzE\nlGuOeiPAP9/8DTy9FQYDK0ywQMvlZrkxzvL2FL1jGzgBk3+t/xKOkBCSw6XImzxypmng5WflP+bs\nzseYmy7+y5ND1NJujsj3CMUqRNifkb1LmnuFE/z5g5/Bd7TEpcT3GdLXuS7Ocrn+ea5sXaLe8RPy\nFFgeHiMsFYmTJ0aBZcYOQr6HHPKp4kBM+27nGJrUpuvWMFsaZBwagSCSz0I/12Y+NY7pU9FFAysb\noHXbx+63B1Cf7OKZrVCX/dgZlcxcD6+oXyM5ts2TqfcJigohyrQdF5vefqpygHscxU0LA5WPuk9w\nefl5VuvDxI/v0kzrOAHQ5Q6dlg+joWM23YRPFVDlDg2Pm07FR85OcpPTRH0l1vV+3pUvotNmQN5k\n2v+QTfrJkCRLigmxwDH5LproImPhIDjLDVJKhoBSYZgVNpwB7oWP047q2IaEEupgOwqmUOgoGunw\nFinPDpJiMCiv0StvE3qcANNxNHr1bSwhI0kWXpoUnCiLzjgRf55618dfFr5On3+NAX2NIdbxyzUk\n2UbINpaQcTU6nFq/RyhaxIkIdoIJGrobv6iSmNwl5d9lVtylpbspSFHKSphZ7lNwYqzFhlH1Dh10\n1hgie6cXo6nTM76JocqsGiNkSBJWy0SVAqpsMMISOh1q+CmGQqSlLD/j/kM+MJ9kbvMI4cQe513X\nOMJ93uVZ7nePUCkHGTCWaUoe/kD8AhWCOBoMxpfpmC5UtUtLcvFkbYHznQ+JuAok1T3+4CAEfMgh\nnyIOxLRvv11h/HNeXOkmbceFqDq4zRZEbMy0YNE/jmTaaK02XdWF2dQwP9Zwn2igjDk0hjxQVCgX\nwlzdfppfSvwrLsUvsyfFiIoCliMT7pTJazHu6UfxUkfB4e7bZe6pv0rL46ZnYh1FdaHKXUJ2BR9t\nilaCfCeOa7yJ7mrRqHpRVYOOS+U2J5DdJilvhvd5Ele3w5C5Rk33Y8kyRcJ4aXJEus9JbjHHFAWi\n2EgkybJ+eY36cz6SZBmQ1tHdTTwpFccWaMEG/o6B127QEToTobv0ss02faTZ+cFu0RJhasJPVL4P\nXeh0XTgu2FT6qYgQXn8dq6lSKsaIe3bpovHx5RriGQfVMehaOoakoRg2w8U1Cu4g87FxFgIT7Io0\nPlFnYvIRPezsd+ZoWTIkWWCSUZaJufKUXCGaeKjhZ4URMss9ODWJ5PAuNXzUbS9V4aN25TY8PwRA\nur1LwKyz544zF5qgEXQz4KywkR9grjRDM+LFQRB4PO9kV0nh9jWJq1m6QuM1XmKQdXxajXh4l5bp\npdPVKecjDFa3ebZ7FYIw7l88CPl+SlkDhj5DdX+YtX9Ydf9qDsS0tWtvEnrhZRLD2+h9dRTbYlxd\nJF9IcmfxFMpkDjOjUHozifpUk9BP5Ai9WCJfTlN9P4T1jgwJAWMOzBpM+Bd5snmDm55jtGQ32Uaa\n9RtjSD0mnqNNavg4xccUrrxG7Bd+kfvdY7QzbnoTq0x4FjkpbsF5wVx5lj/b+1lKrQhSw6K94Cc+\nnMHVU6dshViQJtiRerCQyRR62Kv00hp0M+3ebz8cYAMZi/scIU8UBwmdDgtMcOXyDjPPBXHRwtNt\nUSpFiXtz++NIjTintI8ZlNfZET0MsEk/GzxkhsTjlsAGXjKk2CXNk1zlSHkOddfh3w//OE5A0M8G\nblpMuua5lLyMKcssMM5vX1YRT84yaSwwaG+R0+Nk/Qmck/Cq+jLfFS/QND1EpQJDyhpPceUHE//G\nWKKXLUZYwUQlTIletqkQ5D5HeI2XMH0KrT0fC5dnOffEVSLDe8yLSTJXblB6/iQGKvO7s2hFky9P\nfZMV7whv8jk2rQGmgnP8vcBvU9P2N9Jc4zxFIrhSTRKhTYquECVCGKjodOhaOrdbJ2hVgpg7OsxB\nwZuAKGBAV9OA1kFI+FPIGp89A/th1f5h1f2rORDTlrBZtkexNAmvvh8v1kGj2XJjrakUmwlsSWAO\nSvTGsuhmh9J8lIHUGlZK5VHqCInpXcLTeeykw4bWz1XpApOdBZbVYdbVfppJHRFQqeNliHWiFFEl\ng77EGjuP0uQvJykkkix5HFoEkAZtcloSpynRfd0NWQcbBTXcRY93MVbd5G+5qFRNnJcE7ett7HfK\nzIVtyukxciO9vPzkX5CK7SBhUSBKlgQlwuh0aODlMs8xwAZZJ4FhKVQXQig1i7bmZy04TkWKUtqL\n0K756HdvEDpXYUJZZrq7SNRbJGXnMNoujjXnSG9kUFYcntq9xkRyGTMto3RMUkqWyeAc77vOMWdN\nkevsctraYkKd5459lAfSLMvyCC5vGwOVSWeeRXmcQjlOsxHAnWyD7mCi0MBDhCIhytziFBUCeGmi\n02HGfsiIvcIfhX6FW+kzdLxuJI9DSsmQIMer9Q65Rz2U3AYaBpK/wfW5i3hTVYyYzNbmIAlvHleq\nzZQxR1UEWVDH+CKv80ie4XX3CwSkKmZLY7UywZwjYVuCcjeO0XDhdBXwwbX0EySTXyHlztBj7gCb\nByHhQw751HAgpu04giVrjLBUwisa6HQoEqHSCuFkJUp7cei3EScNYuE9WJFYvHyE81+7hnu4yWJ2\nitTRHYbHFrGQWGQYw1R4tn6VDTFARkthDYGjyY+3dOfwU8MSMsnQDvFalr230hQjCYruBI/EMXgK\n6AXa4LytwRwwBfI5C6nlYKy6Mb6h73/JTgJXl+B3Ntihws7kNFuf6+Xs5DX6Y+sEqbBNH3liPGKa\nY9yli8Y1zlPHR0mEcCQoz0dgTYEoLCRm99+cR7CwO0tfZJ1fnP1XjLlWGGusEnXtoZv3CNZbkAe2\ngXU4t3QT+h9/chXAvf94UxnkvnOUSrfFqL3MhHuejznBVZ5ijikkbL7Et3lWvIMhK9yqnGUzO4oI\nWcT0LAly1PHTQUfGYo1BdughRIVetjnu3OFz1ltc9z3NrfQZiIDpl/HQZIo5vtdw2F1MQAgGRxbx\nBqp8eOscY/YCw8FFrG2dWjREJRlguLtOWQ6yo6Z4lncIOFW+aX2VsCjT7bgpZ2OUSIDN/mEAEtAD\ntwaPQ7rLMe7yuc33ODTtQz5rCMdxPtkCQnyyBQ75zOM4jvhh1D3U9iGfNH+Vtj9x0z7kkEMOOeRv\njsO8pkMOOeSQHyEOTfuQQw455EeIQ9M+5JBDDvkR4hM1bSHEi0KIOSHEghDiH37CtfqEEG8JIR4I\nIe4JIf7e4/NhIcQbQoh5IcTrQojgJ1RfEkJ8LIR45aDqCiGCQohvCCEePb7ucwd4vf+1EOK+EOKu\nEOKPhBDaQdX+NHBQ2v4s6vpxnR+Ktn8UdP2JmbYQQgL+BfACMAv8nBBi6pOqB5jAP3AcZxa4APzd\nx/V+E/i+4ziTwFvAP/qE6v994OF/8Pwg6v7PwHccx5kGjrPfuPiJ1xVC9AC/DpxyHOcY+w2IP3cQ\ntT8NHLC2P4u6hh+Ctn9kdO04zidysJ8h89p/8Pw3gX/4SdX7K+r/BfAF9j/s5ONzKWDuE6jVB3wP\neA545fG5T7QuEACW/4rzB3G9PeynD4TZF/YrB/VefxqOH6a2/7br+vHr/lC0/aOi609yeeR/b+/8\nXaMIwjD8vBBFVDBYqBBJVMRaUokpBG0CgraCiP4HVoLY+BeIWNhYKJLCxh9EOwnWQkSDYESEFEmU\nHIggaBleixnwImKTzO7N7ffAwe0cx7vf8vCxu7NzN8bGlQ+reaw4kg4Bx4HXpIPdA7C9BuwrEHkb\nuAb0Pz9ZOvcw8E3Sg3z5ek/SzgZysf0VuAUsk5b9/LA910T2gNCK2x3xGlpyuxavh24iUtJu4DFw\n1fZPNgrHP7Y3m3cW6NleAP63yGOrH4gfASaBu7YngV+kM76i9QJIGgXOAxOks5Ndki42kd1VOuQ1\ntOR2LV6XbNpfgPG+7YN5rBiSRkhiz9iezcM9Sfvz5wcg/2/W1jEFnJO0BDwCTkuaAdYK564CK7bf\n5O0nJNFL1wvpknHJ9nfb68Az4GRD2YNAo253zGtoz+0qvC7ZtOeBo5ImJG0HLpDuEZXkPrBo+07f\n2HPgSn5/GZj9+0ubwfYN2+O2j5BqfGX7EvCicG4PWJF0LA+dAT5QuN7MMnBC0g5JytmLDWUPAk27\n3Rmvc3Zbbtfhdckb5sA08An4DFwvnDUFrAMLwDvgbc7fC8zl/XgJjBbch1P8mbApnkuaVZ/PNT8F\n9jRVL3AT+Ai8Bx4C25o81m2/mnK7i17nnFbcrsHr+O2RIAiCihi6icggCIJhJpp2EARBRUTTDoIg\nqIho2kEQBBURTTsIgqAiomkHQRBURDTtIAiCivgNjW/36FxPUzoAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -910,9 +908,9 @@ "outputs": [ { "data": { - "image/png": "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\nAABJRU5ErkJggg==\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -953,13 +951,13 @@ { "data": { "text/plain": [ - "array([ (1.0, [0.09184833943086697, -0.23957301713645024, 0.35275256701073315], [0.6943502674814661, -0.18996972225593808, 0.694110373553384], 1.8499326750790277, 0),\n", - " (1.0, [0.09184833943086697, -0.23957301713645024, 0.35275256701073315], [0.5159084442036803, 0.8277435289738373, -0.22063346854291235], 0.08218797495117988, 0),\n", - " (1.0, [0.20806026831237243, 0.2806741437409227, 0.5336799247482618], [0.1279254678841002, 0.5275600667322506, -0.8398306083110433], 3.0474103747828187, 0),\n", + "array([ (1.0, [-0.1382758052991497, -0.3512177196880901, -0.33148352853135243], [0.4185689312254184, 0.515870835450486, -0.7474472094699589], 0.12980877137486158, 0),\n", + " (1.0, [-0.1382758052991497, -0.3512177196880901, -0.33148352853135243], [-0.7887279871402189, -0.41474066458733805, -0.4537602268152112], 0.9055673129689725, 0),\n", + " (1.0, [-0.037141545763691594, 0.3164763430804079, -0.13705878399440294], [0.3855911650385466, 0.7867859791128493, -0.48196190359368796], 0.996776361155944, 0),\n", " ...,\n", - " (1.0, [-0.19031412582761326, 0.09385643210497185, -0.22790301416803052], [0.5932941753311154, -0.7955471372215329, 0.12290961710458291], 1.9935677118802835, 0),\n", - " (1.0, [-0.19031412582761326, 0.09385643210497185, -0.22790301416803052], [-0.8965339181960187, -0.33727511250097575, 0.2871801386091118], 9.772336043367204, 0),\n", - " (1.0, [-0.19031412582761326, 0.09385643210497185, -0.22790301416803052], [0.5932941753311154, -0.7955471372215329, 0.12290961710458291], 1.9935677118802835, 0)], \n", + " (1.0, [0.10735654583359178, -0.007276312264885898, -0.05173760352485271], [0.5349120379020222, -0.015907381482490993, 0.8447579931091957], 0.8409377635712494, 0),\n", + " (1.0, [-0.048566216245400286, 0.29160532148505824, 0.31942717397594755], [0.6200960701401188, -0.409911862042636, 0.6689193741801173], 3.8787384499997857, 0),\n", + " (1.0, [0.07888442268099938, -0.14443885526015943, 0.3095767587545024], [0.373899151360205, 0.18819594431853104, 0.9081749342247754], 4.776147593645684, 0)], \n", " dtype=[('wgt', '" + "" ] }, "execution_count": 28, @@ -1035,9 +1033,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\nYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1086,9 +1084,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\nF5W9GoMAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index 0ab708e09f..2f1dc820f4 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -34,10 +34,6 @@ "import numpy as np\n", "\n", "import openmc\n", - "from openmc.statepoint import StatePoint\n", - "from openmc.summary import Summary\n", - "from openmc.source import Source\n", - "from openmc.stats import Box\n", "\n", "%matplotlib inline" ] @@ -289,9 +285,11 @@ "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", "settings_file.output = {'tallies': True}\n", - "source_bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", - "settings_file.source = Source(space=Box(\n", - " source_bounds[:3], source_bounds[3:]))\n", + "\n", + "# Create an initial uniform spatial source distribution over fissionable zones\n", + "bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", + "uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True)\n", + "settings_file.source = openmc.source.Source(space=uniform_dist)\n", "\n", "# Export to \"settings.xml\"\n", "settings_file.export_to_xml()" @@ -366,7 +364,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ADFxIyLefz284AAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDMtMjNUMTQ6NTA6\nNDUtMDQ6MDD1gtVmAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTAzLTIzVDE0OjUwOjQ1LTA0OjAw\nhN9t2gAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AECBAPGRVxKHIAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDQtMDhUMTI6MTU6\nMjUtMDQ6MDABIYvLAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA0LTA4VDEyOjE1OjI1LTA0OjAw\ncHwzdwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -570,10 +568,9 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 5f252e2df51930b9175fd41bafa8db01f3eaeb92\n", - " Date/Time: 2016-03-23 14:50:46\n", + " Git SHA1: 9a6ecd72597338b40d2b72378e5ad6dd65df2364\n", + " Date/Time: 2016-04-08 12:15:26\n", " MPI Processes: 1\n", - " OpenMP Threads: 16\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -600,26 +597,26 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 1.03167 \n", - " 2/1 1.03535 \n", - " 3/1 1.02709 \n", - " 4/1 1.00637 \n", - " 5/1 0.99250 \n", - " 6/1 1.06116 \n", - " 7/1 1.04289 1.05202 +/- 0.00913\n", - " 8/1 1.04779 1.05061 +/- 0.00546\n", - " 9/1 1.04695 1.04969 +/- 0.00397\n", - " 10/1 0.98778 1.03731 +/- 0.01276\n", - " 11/1 1.05810 1.04078 +/- 0.01098\n", - " 12/1 1.01539 1.03715 +/- 0.00996\n", - " 13/1 1.08644 1.04331 +/- 0.01060\n", - " 14/1 1.06425 1.04564 +/- 0.00963\n", - " 15/1 1.01768 1.04284 +/- 0.00906\n", - " 16/1 1.05877 1.04429 +/- 0.00832\n", - " 17/1 1.02195 1.04243 +/- 0.00782\n", - " 18/1 1.02488 1.04108 +/- 0.00732\n", - " 19/1 1.06285 1.04263 +/- 0.00695\n", - " 20/1 0.98751 1.03896 +/- 0.00744\n", + " 1/1 1.03471 \n", + " 2/1 1.03257 \n", + " 3/1 1.00600 \n", + " 4/1 1.04547 \n", + " 5/1 1.02287 \n", + " 6/1 1.05752 \n", + " 7/1 1.04283 1.05017 +/- 0.00734\n", + " 8/1 1.05189 1.05074 +/- 0.00428\n", + " 9/1 1.01645 1.04217 +/- 0.00909\n", + " 10/1 1.04978 1.04369 +/- 0.00721\n", + " 11/1 1.03459 1.04218 +/- 0.00608\n", + " 12/1 1.04019 1.04189 +/- 0.00514\n", + " 13/1 1.05985 1.04414 +/- 0.00499\n", + " 14/1 1.02111 1.04158 +/- 0.00509\n", + " 15/1 1.04774 1.04219 +/- 0.00459\n", + " 16/1 1.00733 1.03902 +/- 0.00523\n", + " 17/1 1.02224 1.03763 +/- 0.00497\n", + " 18/1 1.03263 1.03724 +/- 0.00459\n", + " 19/1 1.01611 1.03573 +/- 0.00451\n", + " 20/1 1.04692 1.03648 +/- 0.00426\n", " Creating state point statepoint.20.h5...\n", "\n", " ===========================================================================\n", @@ -629,27 +626,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.0400E-01 seconds\n", - " Reading cross sections = 1.5000E-01 seconds\n", - " Total time in simulation = 2.1570E+00 seconds\n", - " Time in transport only = 1.9760E+00 seconds\n", - " Time in inactive batches = 3.3600E-01 seconds\n", - " Time in active batches = 1.8210E+00 seconds\n", - " Time synchronizing fission bank = 4.0000E-03 seconds\n", - " Sampling source sites = 3.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", + " Total time for initialization = 6.6400E-01 seconds\n", + " Reading cross sections = 1.8900E-01 seconds\n", + " Total time in simulation = 3.0445E+01 seconds\n", + " Time in transport only = 3.0423E+01 seconds\n", + " Time in inactive batches = 4.4900E+00 seconds\n", + " Time in active batches = 2.5955E+01 seconds\n", + " Time synchronizing fission bank = 2.0000E-03 seconds\n", + " Sampling source sites = 2.0000E-03 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", " Total time for finalization = 2.0000E-03 seconds\n", - " Total time elapsed = 2.6800E+00 seconds\n", - " Calculation Rate (inactive) = 37202.4 neutrons/second\n", - " Calculation Rate (active) = 20593.1 neutrons/second\n", + " Total time elapsed = 3.1139E+01 seconds\n", + " Calculation Rate (inactive) = 2783.96 neutrons/second\n", + " Calculation Rate (active) = 1444.81 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.03965 +/- 0.00597\n", - " k-effective (Track-length) = 1.03896 +/- 0.00744\n", - " k-effective (Absorption) = 1.03976 +/- 0.00606\n", - " Combined k-effective = 1.03991 +/- 0.00536\n", + " k-effective (Collision) = 1.03296 +/- 0.00669\n", + " k-effective (Track-length) = 1.03648 +/- 0.00426\n", + " k-effective (Absorption) = 1.03431 +/- 0.00702\n", + " Combined k-effective = 1.03621 +/- 0.00456\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -697,7 +694,7 @@ "outputs": [], "source": [ "# Load the statepoint file\n", - "sp = StatePoint('statepoint.20.h5')" + "sp = openmc.StatePoint('statepoint.20.h5')" ] }, { @@ -717,7 +714,7 @@ "outputs": [], "source": [ "# Load the summary file and link with statepoint\n", - "su = Summary('summary.h5')\n", + "su = openmc.Summary('summary.h5')\n", "sp.link_with_summary(su)" ] }, @@ -756,8 +753,8 @@ " 0\n", " total\n", " (nu-fission / absorption)\n", - " 1.036847\n", - " 0.009685\n", + " 1.038387\n", + " 0.006141\n", " \n", " \n", "\n", @@ -765,7 +762,7 @@ ], "text/plain": [ " nuclide score mean std. dev.\n", - "0 total (nu-fission / absorption) 1.04e+00 9.69e-03" + "0 total (nu-fission / absorption) 1.04e+00 6.14e-03" ] }, "execution_count": 26, @@ -820,8 +817,8 @@ " 6.250000e-07\n", " total\n", " absorption\n", - " 0.692034\n", - " 0.007217\n", + " 0.693337\n", + " 0.004109\n", " \n", " \n", "\n", @@ -829,7 +826,7 @@ ], "text/plain": [ " energy low [MeV] energy high [MeV] nuclide score mean std. dev.\n", - "0 0.00e+00 6.25e-07 total absorption 6.92e-01 7.22e-03" + "0 0.00e+00 6.25e-07 total absorption 6.93e-01 4.11e-03" ] }, "execution_count": 27, @@ -882,8 +879,8 @@ " 6.250000e-07\n", " total\n", " nu-fission\n", - " 1.202298\n", - " 0.013385\n", + " 1.203042\n", + " 0.0076\n", " \n", " \n", "\n", @@ -891,7 +888,7 @@ ], "text/plain": [ " energy low [MeV] energy high [MeV] nuclide score mean std. dev.\n", - "0 0.00e+00 6.25e-07 total nu-fission 1.20e+00 1.34e-02" + "0 0.00e+00 6.25e-07 total nu-fission 1.20e+00 7.60e-03" ] }, "execution_count": 28, @@ -947,8 +944,8 @@ " 10000\n", " total\n", " absorption\n", - " 0.749151\n", - " 0.009003\n", + " 0.748413\n", + " 0.004723\n", " \n", " \n", "\n", @@ -956,10 +953,10 @@ ], "text/plain": [ " energy low [MeV] energy high [MeV] cell nuclide score mean \\\n", - "0 0.00e+00 6.25e-07 10000 total absorption 7.49e-01 \n", + "0 0.00e+00 6.25e-07 10000 total absorption 7.48e-01 \n", "\n", " std. dev. \n", - "0 9.00e-03 " + "0 4.72e-03 " ] }, "execution_count": 29, @@ -1013,8 +1010,8 @@ " 10000\n", " total\n", " (nu-fission / absorption)\n", - " 1.663435\n", - " 0.019976\n", + " 1.663385\n", + " 0.011253\n", " \n", " \n", "\n", @@ -1025,7 +1022,7 @@ "0 0.00e+00 6.25e-07 10000 total \n", "\n", " score mean std. dev. \n", - "0 (nu-fission / absorption) 1.66e+00 2.00e-02 " + "0 (nu-fission / absorption) 1.66e+00 1.13e-02 " ] }, "execution_count": 30, @@ -1078,8 +1075,8 @@ " 10000\n", " total\n", " (((absorption * nu-fission) * absorption) * (n...\n", - " 1.036847\n", - " 0.023674\n", + " 1.038387\n", + " 0.01316\n", " \n", " \n", "\n", @@ -1090,7 +1087,7 @@ "0 0.00e+00 6.25e-07 10000 total \n", "\n", " score mean std. dev. \n", - "0 (((absorption * nu-fission) * absorption) * (n... 1.04e+00 2.37e-02 " + "0 (((absorption * nu-fission) * absorption) * (n... 1.04e+00 1.32e-02 " ] }, "execution_count": 31, @@ -1160,8 +1157,8 @@ " 6.250000e-07\n", " (U-238 / total)\n", " (nu-fission / flux)\n", - " 6.627781e-07\n", - " 7.082494e-09\n", + " 6.636968e-07\n", + " 4.132875e-09\n", " \n", " \n", " 1\n", @@ -1170,8 +1167,8 @@ " 6.250000e-07\n", " (U-238 / total)\n", " (scatter / flux)\n", - " 2.099843e-01\n", - " 2.003686e-03\n", + " 2.099856e-01\n", + " 1.232455e-03\n", " \n", " \n", " 2\n", @@ -1180,8 +1177,8 @@ " 6.250000e-07\n", " (U-235 / total)\n", " (nu-fission / flux)\n", - " 3.547246e-01\n", - " 3.854562e-03\n", + " 3.552458e-01\n", + " 2.252681e-03\n", " \n", " \n", " 3\n", @@ -1190,8 +1187,8 @@ " 6.250000e-07\n", " (U-235 / total)\n", " (scatter / flux)\n", - " 5.554185e-03\n", - " 5.316706e-05\n", + " 5.554345e-03\n", + " 3.265385e-05\n", " \n", " \n", " 4\n", @@ -1200,8 +1197,8 @@ " 2.000000e+01\n", " (U-238 / total)\n", " (nu-fission / flux)\n", - " 7.151165e-03\n", - " 5.480545e-05\n", + " 7.126668e-03\n", + " 5.296883e-05\n", " \n", " \n", " 5\n", @@ -1210,8 +1207,8 @@ " 2.000000e+01\n", " (U-238 / total)\n", " (scatter / flux)\n", - " 2.278981e-01\n", - " 6.424480e-04\n", + " 2.277460e-01\n", + " 1.003558e-03\n", " \n", " \n", " 6\n", @@ -1220,8 +1217,8 @@ " 2.000000e+01\n", " (U-235 / total)\n", " (nu-fission / flux)\n", - " 8.073636e-03\n", - " 4.374754e-05\n", + " 8.010911e-03\n", + " 6.802256e-05\n", " \n", " \n", " 7\n", @@ -1230,8 +1227,8 @@ " 2.000000e+01\n", " (U-235 / total)\n", " (scatter / flux)\n", - " 3.369592e-03\n", - " 8.971220e-06\n", + " 3.367794e-03\n", + " 1.443644e-05\n", " \n", " \n", "\n", @@ -1249,14 +1246,14 @@ "7 10000 6.25e-07 2.00e+01 (U-235 / total) \n", "\n", " score mean std. dev. \n", - "0 (nu-fission / flux) 6.63e-07 7.08e-09 \n", - "1 (scatter / flux) 2.10e-01 2.00e-03 \n", - "2 (nu-fission / flux) 3.55e-01 3.85e-03 \n", - "3 (scatter / flux) 5.55e-03 5.32e-05 \n", - "4 (nu-fission / flux) 7.15e-03 5.48e-05 \n", - "5 (scatter / flux) 2.28e-01 6.42e-04 \n", - "6 (nu-fission / flux) 8.07e-03 4.37e-05 \n", - "7 (scatter / flux) 3.37e-03 8.97e-06 " + "0 (nu-fission / flux) 6.64e-07 4.13e-09 \n", + "1 (scatter / flux) 2.10e-01 1.23e-03 \n", + "2 (nu-fission / flux) 3.55e-01 2.25e-03 \n", + "3 (scatter / flux) 5.55e-03 3.27e-05 \n", + "4 (nu-fission / flux) 7.13e-03 5.30e-05 \n", + "5 (scatter / flux) 2.28e-01 1.00e-03 \n", + "6 (nu-fission / flux) 8.01e-03 6.80e-05 \n", + "7 (scatter / flux) 3.37e-03 1.44e-05 " ] }, "execution_count": 33, @@ -1287,11 +1284,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 6.62778145e-07]\n", - " [ 3.54724568e-01]]\n", + "[[[ 6.63696783e-07]\n", + " [ 3.55245846e-01]]\n", "\n", - " [[ 7.15116511e-03]\n", - " [ 8.07363630e-03]]]\n" + " [[ 7.12666800e-03]\n", + " [ 8.01091088e-03]]]\n" ] } ], @@ -1319,9 +1316,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.00555418]]\n", + "[[[ 0.00555435]]\n", "\n", - " [[ 0.00336959]]]\n" + " [[ 0.00336779]]]\n" ] } ], @@ -1343,8 +1340,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.22789806]\n", - " [ 0.00336959]]]\n" + "[[[ 0.22774598]\n", + " [ 0.00336779]]]\n" ] } ], @@ -1396,7 +1393,7 @@ " U-238\n", " nu-fission\n", " 0.000002\n", - " 1.338459e-08\n", + " 7.473789e-09\n", " \n", " \n", " 1\n", @@ -1405,8 +1402,8 @@ " 6.250000e-07\n", " U-235\n", " nu-fission\n", - " 0.864141\n", - " 7.363278e-03\n", + " 0.861547\n", + " 4.131310e-03\n", " \n", " \n", " 2\n", @@ -1415,8 +1412,8 @@ " 2.000000e+01\n", " U-238\n", " nu-fission\n", - " 0.082111\n", - " 6.090952e-04\n", + " 0.082356\n", + " 5.560461e-04\n", " \n", " \n", " 3\n", @@ -1425,8 +1422,8 @@ " 2.000000e+01\n", " U-235\n", " nu-fission\n", - " 0.092703\n", - " 4.695215e-04\n", + " 0.092574\n", + " 7.315442e-04\n", " \n", " \n", "\n", @@ -1435,15 +1432,15 @@ "text/plain": [ " cell energy low [MeV] energy high [MeV] nuclide score mean \\\n", "0 10000 0.00e+00 6.25e-07 U-238 nu-fission 1.61e-06 \n", - "1 10000 0.00e+00 6.25e-07 U-235 nu-fission 8.64e-01 \n", - "2 10000 6.25e-07 2.00e+01 U-238 nu-fission 8.21e-02 \n", - "3 10000 6.25e-07 2.00e+01 U-235 nu-fission 9.27e-02 \n", + "1 10000 0.00e+00 6.25e-07 U-235 nu-fission 8.62e-01 \n", + "2 10000 6.25e-07 2.00e+01 U-238 nu-fission 8.24e-02 \n", + "3 10000 6.25e-07 2.00e+01 U-235 nu-fission 9.26e-02 \n", "\n", " std. dev. \n", - "0 1.34e-08 \n", - "1 7.36e-03 \n", - "2 6.09e-04 \n", - "3 4.70e-04 " + "0 7.47e-09 \n", + "1 4.13e-03 \n", + "2 5.56e-04 \n", + "3 7.32e-04 " ] }, "execution_count": 37, @@ -1489,8 +1486,8 @@ " 1.080060e-07\n", " H-1\n", " scatter\n", - " 4.591022\n", - " 0.043961\n", + " 4.599225\n", + " 0.015973\n", " \n", " \n", " 1\n", @@ -1499,8 +1496,8 @@ " 1.166529e-06\n", " H-1\n", " scatter\n", - " 2.032481\n", - " 0.010876\n", + " 2.037260\n", + " 0.011236\n", " \n", " \n", " 2\n", @@ -1509,8 +1506,8 @@ " 1.259921e-05\n", " H-1\n", " scatter\n", - " 1.654187\n", - " 0.012130\n", + " 1.662552\n", + " 0.010280\n", " \n", " \n", " 3\n", @@ -1519,8 +1516,8 @@ " 1.360790e-04\n", " H-1\n", " scatter\n", - " 1.864771\n", - " 0.011649\n", + " 1.872201\n", + " 0.012136\n", " \n", " \n", " 4\n", @@ -1529,8 +1526,8 @@ " 1.469734e-03\n", " H-1\n", " scatter\n", - " 2.056893\n", - " 0.008555\n", + " 2.080459\n", + " 0.013155\n", " \n", " \n", " 5\n", @@ -1539,8 +1536,8 @@ " 1.587401e-02\n", " H-1\n", " scatter\n", - " 2.138833\n", - " 0.015180\n", + " 2.154996\n", + " 0.011975\n", " \n", " \n", " 6\n", @@ -1549,8 +1546,8 @@ " 1.714488e-01\n", " H-1\n", " scatter\n", - " 2.207209\n", - " 0.014853\n", + " 2.218740\n", + " 0.008528\n", " \n", " \n", " 7\n", @@ -1559,8 +1556,8 @@ " 1.851749e+00\n", " H-1\n", " scatter\n", - " 1.999407\n", - " 0.009053\n", + " 2.010517\n", + " 0.009187\n", " \n", " \n", " 8\n", @@ -1569,8 +1566,8 @@ " 2.000000e+01\n", " H-1\n", " scatter\n", - " 0.368760\n", - " 0.003373\n", + " 0.372022\n", + " 0.003196\n", " \n", " \n", "\n", @@ -1578,26 +1575,26 @@ ], "text/plain": [ " cell energy low [MeV] energy high [MeV] nuclide score mean \\\n", - "0 10002 1.00e-08 1.08e-07 H-1 scatter 4.59e+00 \n", - "1 10002 1.08e-07 1.17e-06 H-1 scatter 2.03e+00 \n", - "2 10002 1.17e-06 1.26e-05 H-1 scatter 1.65e+00 \n", - "3 10002 1.26e-05 1.36e-04 H-1 scatter 1.86e+00 \n", - "4 10002 1.36e-04 1.47e-03 H-1 scatter 2.06e+00 \n", - "5 10002 1.47e-03 1.59e-02 H-1 scatter 2.14e+00 \n", - "6 10002 1.59e-02 1.71e-01 H-1 scatter 2.21e+00 \n", - "7 10002 1.71e-01 1.85e+00 H-1 scatter 2.00e+00 \n", - "8 10002 1.85e+00 2.00e+01 H-1 scatter 3.69e-01 \n", + "0 10002 1.00e-08 1.08e-07 H-1 scatter 4.60e+00 \n", + "1 10002 1.08e-07 1.17e-06 H-1 scatter 2.04e+00 \n", + "2 10002 1.17e-06 1.26e-05 H-1 scatter 1.66e+00 \n", + "3 10002 1.26e-05 1.36e-04 H-1 scatter 1.87e+00 \n", + "4 10002 1.36e-04 1.47e-03 H-1 scatter 2.08e+00 \n", + "5 10002 1.47e-03 1.59e-02 H-1 scatter 2.15e+00 \n", + "6 10002 1.59e-02 1.71e-01 H-1 scatter 2.22e+00 \n", + "7 10002 1.71e-01 1.85e+00 H-1 scatter 2.01e+00 \n", + "8 10002 1.85e+00 2.00e+01 H-1 scatter 3.72e-01 \n", "\n", " std. dev. \n", - "0 4.40e-02 \n", - "1 1.09e-02 \n", - "2 1.21e-02 \n", - "3 1.16e-02 \n", - "4 8.56e-03 \n", - "5 1.52e-02 \n", - "6 1.49e-02 \n", - "7 9.05e-03 \n", - "8 3.37e-03 " + "0 1.60e-02 \n", + "1 1.12e-02 \n", + "2 1.03e-02 \n", + "3 1.21e-02 \n", + "4 1.32e-02 \n", + "5 1.20e-02 \n", + "6 8.53e-03 \n", + "7 9.19e-03 \n", + "8 3.20e-03 " ] }, "execution_count": 38, diff --git a/examples/python/basic/build-xml.py b/examples/python/basic/build-xml.py index eb8fbd23f5..fbe6836616 100644 --- a/examples/python/basic/build-xml.py +++ b/examples/python/basic/build-xml.py @@ -1,6 +1,5 @@ import openmc -from openmc.source import Source -from openmc.stats import Box + ############################################################################### # Simulation Input File Parameters @@ -94,7 +93,12 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.source = Source(space=Box([-4, -4, -4], [4, 4, 4])) + +# Create an initial uniform spatial source distribution over fissionable zones +bounds = [-4., -4., -4., 4., 4., 4.] +uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True) +settings_file.source = openmc.source.Source(space=uniform_dist) + settings_file.export_to_xml() diff --git a/examples/python/boxes/build-xml.py b/examples/python/boxes/build-xml.py index 2ae3ee6129..ea3e81d172 100644 --- a/examples/python/boxes/build-xml.py +++ b/examples/python/boxes/build-xml.py @@ -1,8 +1,5 @@ import numpy as np - import openmc -from openmc.source import Source -from openmc.stats import Box ############################################################################### # Simulation Input File Parameters @@ -119,7 +116,11 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.source = Source(space=Box(*outer_cube.bounding_box)) + +# Create an initial uniform spatial source distribution over fissionable zones +uniform_dist = openmc.stats.Box(*outer_cube.bounding_box, only_fissionable=True) +settings_file.source = openmc.source.Source(space=uniform_dist) + settings_file.export_to_xml() ############################################################################### diff --git a/examples/python/lattice/hexagonal/build-xml.py b/examples/python/lattice/hexagonal/build-xml.py index d1144cd918..7f92e66027 100644 --- a/examples/python/lattice/hexagonal/build-xml.py +++ b/examples/python/lattice/hexagonal/build-xml.py @@ -1,6 +1,4 @@ import openmc -from openmc.source import Source -from openmc.stats import Box ############################################################################### # Simulation Input File Parameters @@ -126,8 +124,12 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.source = Source(space=Box( - [-1, -1, -1], [1, 1, 1])) + +# Create an initial uniform spatial source distribution over fissionable zones +bounds = [-1, -1, -1, 1, 1, 1] +uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True) +settings_file.source = openmc.source.Source(space=uniform_dist) + settings_file.keff_trigger = {'type' : 'std_dev', 'threshold' : 5E-4} settings_file.trigger_active = True settings_file.trigger_max_batches = 100 diff --git a/examples/python/lattice/nested/build-xml.py b/examples/python/lattice/nested/build-xml.py index e4ac848396..f54f064530 100644 --- a/examples/python/lattice/nested/build-xml.py +++ b/examples/python/lattice/nested/build-xml.py @@ -1,6 +1,4 @@ import openmc -from openmc.source import Source -from openmc.stats import Box ############################################################################### # Simulation Input File Parameters @@ -137,8 +135,12 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.source = Source(space=Box( - [-1, -1, -1], [1, 1, 1])) + +# Create an initial uniform spatial source distribution over fissionable zones +bounds = [-1, -1, -1, 1, 1, 1] +uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True) +settings_file.source = openmc.source.Source(space=uniform_dist) + settings_file.export_to_xml() diff --git a/examples/python/lattice/simple/build-xml.py b/examples/python/lattice/simple/build-xml.py index 78ee61eb46..f633fa96f7 100644 --- a/examples/python/lattice/simple/build-xml.py +++ b/examples/python/lattice/simple/build-xml.py @@ -1,6 +1,4 @@ import openmc -from openmc.source import Source -from openmc.stats import Box ############################################################################### # Simulation Input File Parameters @@ -127,8 +125,12 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.source = Source(space=Box( - [-1, -1, -1], [1, 1, 1])) + +# Create an initial uniform spatial source distribution over fissionable zones +bounds = [-1, -1, -1, 1, 1, 1] +uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True) +settings_file.source = openmc.source.Source(space=uniform_dist) + settings_file.trigger_active = True settings_file.trigger_max_batches = 100 settings_file.export_to_xml() diff --git a/examples/python/pincell/build-xml.py b/examples/python/pincell/build-xml.py index aa87148381..2e72d82ab4 100644 --- a/examples/python/pincell/build-xml.py +++ b/examples/python/pincell/build-xml.py @@ -1,6 +1,4 @@ import openmc -from openmc.source import Source -from openmc.stats import Box ############################################################################### # Simulation Input File Parameters @@ -170,8 +168,12 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.source = Source(space=Box( - [-0.62992, -0.62992, -1], [0.62992, 0.62992, 1])) + +# Create an initial uniform spatial source distribution over fissionable zones +bounds = [-0.62992, -0.62992, -1, 0.62992, 0.62992, 1] +uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True) +settings_file.source = openmc.source.Source(space=uniform_dist) + settings_file.entropy_lower_left = [-0.39218, -0.39218, -1.e50] settings_file.entropy_upper_right = [0.39218, 0.39218, 1.e50] settings_file.entropy_dimension = [10, 10, 1] diff --git a/examples/python/pincell_multigroup/build-xml.py b/examples/python/pincell_multigroup/build-xml.py index ff75a64d93..60026c0892 100644 --- a/examples/python/pincell_multigroup/build-xml.py +++ b/examples/python/pincell_multigroup/build-xml.py @@ -1,8 +1,6 @@ +import numpy as np import openmc import openmc.mgxs -from openmc.source import Source -from openmc.stats import Box -import numpy as np ############################################################################### # Simulation Input File Parameters @@ -145,7 +143,13 @@ settings_file.cross_sections = "./mg_cross_sections.xml" settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.source = Source(space=Box([-0.63, -0.63, -1.], [0.63, 0.63, 1.])) + +# Create an initial uniform spatial source distribution over fissionable zones +bounds = [-0.63, -0.63, -1, 0.63, 0.63, 1] +uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:]) +settings_file.source = openmc.source.Source(space=uniform_dist) + +settings_file.export_to_xml() ############################################################################### # Exporting to OpenMC tallies.xml File diff --git a/examples/python/reflective/build-xml.py b/examples/python/reflective/build-xml.py index 7e4fd30be5..01a5c7815f 100644 --- a/examples/python/reflective/build-xml.py +++ b/examples/python/reflective/build-xml.py @@ -1,8 +1,5 @@ import numpy as np - import openmc -from openmc.stats import Box -from openmc.source import Source ############################################################################### # Simulation Input File Parameters @@ -86,5 +83,10 @@ settings_file = openmc.SettingsFile() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles -settings_file.source = Source(space=Box(*cell.region.bounding_box)) + +# Create an initial uniform spatial source distribution over fissionable zones +uniform_dist = openmc.stats.Box(*cell.region.bounding_box, + only_fissionable=True) +settings_file.source = openmc.source.Source(space=uniform_dist) + settings_file.export_to_xml() From d154b760b2a2eefda8eed00445a529f6644b2eed Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Fri, 8 Apr 2016 13:20:26 -0400 Subject: [PATCH 433/650] Ran updated MGXS Part II Notebook on machine with PyNe --- .../pythonapi/examples/mgxs-part-ii.ipynb | 894 +++++++++--------- 1 file changed, 459 insertions(+), 435 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index 3ca02ccb29..6483a5c29d 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -34,12 +34,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/wboyd/anaconda2/lib/python2.7/site-packages/matplotlib/__init__.py:1350: UserWarning: This call to matplotlib.use() has no effect\n", + "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.1+1178.ga40c9ec-py2.7-linux-x86_64.egg/matplotlib/__init__.py:884: UserWarning: axes.color_cycle is deprecated and replaced with axes.prop_cycle; please use the latter.\n", + " warnings.warn(self.msg_depr % (key, alt_key))\n", + "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.1+1178.ga40c9ec-py2.7-linux-x86_64.egg/matplotlib/__init__.py:1362: UserWarning: This call to matplotlib.use() has no effect\n", "because the backend has already been chosen;\n", "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", "or matplotlib.backends is imported for the first time.\n", "\n", - " warnings.warn(_use_error_msg)\n" + " warnings.warn(_use_error_msg)\n", + "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:9: QAWarning: pyne.rxname is not yet QA compliant.\n", + "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:9: QAWarning: pyne.ace is not yet QA compliant.\n" ] } ], @@ -448,8 +452,8 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 9a6ecd72597338b40d2b72378e5ad6dd65df2364\n", - " Date/Time: 2016-04-08 11:47:45\n", + " Git SHA1: eeb5091ca3a34cc85df73a3318cae2b6c7097413\n", + " Date/Time: 2016-04-08 13:04:46\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -565,20 +569,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.6900E-01 seconds\n", - " Reading cross sections = 1.4200E-01 seconds\n", - " Total time in simulation = 3.7697E+02 seconds\n", - " Time in transport only = 3.7690E+02 seconds\n", - " Time in inactive batches = 2.4323E+01 seconds\n", - " Time in active batches = 3.5265E+02 seconds\n", - " Time synchronizing fission bank = 2.8000E-02 seconds\n", - " Sampling source sites = 1.6000E-02 seconds\n", - " SEND/RECV source sites = 1.0000E-02 seconds\n", - " Time accumulating tallies = 5.0000E-03 seconds\n", - " Total time for finalization = 2.6000E-02 seconds\n", - " Total time elapsed = 3.7766E+02 seconds\n", - " Calculation Rate (inactive) = 4111.33 neutrons/second\n", - " Calculation Rate (active) = 1134.27 neutrons/second\n", + " Total time for initialization = 1.2890E+00 seconds\n", + " Reading cross sections = 3.0900E-01 seconds\n", + " Total time in simulation = 6.3434E+02 seconds\n", + " Time in transport only = 6.3421E+02 seconds\n", + " Time in inactive batches = 3.6864E+01 seconds\n", + " Time in active batches = 5.9748E+02 seconds\n", + " Time synchronizing fission bank = 5.5000E-02 seconds\n", + " Sampling source sites = 3.4000E-02 seconds\n", + " SEND/RECV source sites = 1.5000E-02 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for finalization = 3.5000E-02 seconds\n", + " Total time elapsed = 6.3582E+02 seconds\n", + " Calculation Rate (inactive) = 2712.67 neutrons/second\n", + " Calculation Rate (active) = 669.482 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1188,169 +1192,169 @@ "text": [ "[ NORMAL ] Importing ray tracing data from file...\n", "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.574577\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.679838\tres = 4.254E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.660822\tres = 1.832E-01\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.658929\tres = 2.797E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.643012\tres = 2.866E-03\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.625823\tres = 2.415E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.606706\tres = 2.673E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.587527\tres = 3.055E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.569083\tres = 3.161E-02\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.551772\tres = 3.139E-02\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.536108\tres = 3.042E-02\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.522354\tres = 2.839E-02\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.510694\tres = 2.565E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.501194\tres = 2.232E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.493922\tres = 1.860E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.488872\tres = 1.451E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.486015\tres = 1.022E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.485301\tres = 5.845E-03\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.486659\tres = 1.469E-03\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.489990\tres = 2.797E-03\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.495186\tres = 6.846E-03\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.502132\tres = 1.060E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.510702\tres = 1.403E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.520762\tres = 1.707E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.532180\tres = 1.970E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.544822\tres = 2.193E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.558552\tres = 2.375E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.573240\tres = 2.520E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.588757\tres = 2.630E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.604978\tres = 2.707E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.621786\tres = 2.755E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.639068\tres = 2.778E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.656717\tres = 2.779E-02\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.674634\tres = 2.762E-02\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.692727\tres = 2.728E-02\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.710910\tres = 2.682E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.729105\tres = 2.625E-02\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.747241\tres = 2.559E-02\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.765251\tres = 2.487E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.783079\tres = 2.410E-02\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.800673\tres = 2.330E-02\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.817986\tres = 2.247E-02\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.834979\tres = 2.162E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.851616\tres = 2.077E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.867869\tres = 1.993E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.883712\tres = 1.908E-02\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.899125\tres = 1.826E-02\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.914092\tres = 1.744E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.928599\tres = 1.665E-02\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.942637\tres = 1.587E-02\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.956200\tres = 1.512E-02\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.969285\tres = 1.439E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.981891\tres = 1.368E-02\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.994018\tres = 1.301E-02\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.005671\tres = 1.235E-02\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.016854\tres = 1.172E-02\n", - "[ NORMAL ] Iteration 56:\tk_eff = 1.027574\tres = 1.112E-02\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.037838\tres = 1.054E-02\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.047656\tres = 9.989E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.057038\tres = 9.460E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.065995\tres = 8.955E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.074537\tres = 8.473E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.082677\tres = 8.014E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.090428\tres = 7.576E-03\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.097802\tres = 7.159E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.104812\tres = 6.762E-03\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.111471\tres = 6.385E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.117792\tres = 6.027E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.123789\tres = 5.687E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.129473\tres = 5.364E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.134858\tres = 5.058E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.139957\tres = 4.768E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.144782\tres = 4.493E-03\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.149346\tres = 4.233E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.153659\tres = 3.986E-03\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.157734\tres = 3.753E-03\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.161581\tres = 3.532E-03\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.165212\tres = 3.323E-03\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.168638\tres = 3.126E-03\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.171868\tres = 2.940E-03\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.174912\tres = 2.764E-03\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.177780\tres = 2.598E-03\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.180481\tres = 2.441E-03\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.183023\tres = 2.293E-03\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.185416\tres = 2.154E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.187666\tres = 2.022E-03\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.189782\tres = 1.898E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.191771\tres = 1.782E-03\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.193640\tres = 1.672E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.195395\tres = 1.568E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.197044\tres = 1.471E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.198591\tres = 1.379E-03\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.200044\tres = 1.293E-03\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.201406\tres = 1.212E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.202685\tres = 1.136E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.203883\tres = 1.064E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.205007\tres = 9.966E-04\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.206060\tres = 9.333E-04\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.207047\tres = 8.739E-04\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.207971\tres = 8.181E-04\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.208837\tres = 7.658E-04\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.209647\tres = 7.167E-04\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.210406\tres = 6.706E-04\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.211116\tres = 6.273E-04\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.211781\tres = 5.868E-04\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.212403\tres = 5.488E-04\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.212984\tres = 5.131E-04\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.213528\tres = 4.797E-04\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.214037\tres = 4.484E-04\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.214512\tres = 4.191E-04\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.214957\tres = 3.917E-04\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.215372\tres = 3.659E-04\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.215760\tres = 3.419E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.216123\tres = 3.193E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.216462\tres = 2.983E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.216778\tres = 2.785E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.217073\tres = 2.601E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.217349\tres = 2.428E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.217607\tres = 2.266E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.217847\tres = 2.115E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.218072\tres = 1.974E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.218281\tres = 1.842E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.218476\tres = 1.719E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.218659\tres = 1.604E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.218829\tres = 1.496E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.218987\tres = 1.395E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.219135\tres = 1.301E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.219273\tres = 1.214E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.219402\tres = 1.132E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.219522\tres = 1.055E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.219634\tres = 9.837E-05\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.219738\tres = 9.170E-05\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.219835\tres = 8.548E-05\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.219926\tres = 7.967E-05\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.220010\tres = 7.425E-05\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.220089\tres = 6.919E-05\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.220162\tres = 6.447E-05\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.220230\tres = 6.007E-05\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.220294\tres = 5.597E-05\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.220353\tres = 5.214E-05\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.220408\tres = 4.857E-05\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.220460\tres = 4.524E-05\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.220508\tres = 4.214E-05\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.220552\tres = 3.924E-05\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.220594\tres = 3.655E-05\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.220633\tres = 3.403E-05\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.220669\tres = 3.169E-05\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.220702\tres = 2.950E-05\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.220733\tres = 2.747E-05\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.220762\tres = 2.557E-05\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.220789\tres = 2.381E-05\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.220815\tres = 2.216E-05\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.220838\tres = 2.063E-05\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.220860\tres = 1.920E-05\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.220880\tres = 1.787E-05\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.220899\tres = 1.663E-05\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.220917\tres = 1.548E-05\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.220933\tres = 1.440E-05\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.220948\tres = 1.340E-05\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.220962\tres = 1.247E-05\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.220976\tres = 1.160E-05\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.220988\tres = 1.080E-05\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.220999\tres = 1.004E-05\n" + "[ NORMAL ] Iteration 0:\tk_eff = 0.574672\tres = 0.000E+00\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.679815\tres = 4.253E-01\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.660826\tres = 1.830E-01\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.658940\tres = 2.793E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.643012\tres = 2.853E-03\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.625810\tres = 2.417E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.606678\tres = 2.675E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.587485\tres = 3.057E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.569029\tres = 3.164E-02\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.551707\tres = 3.142E-02\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.536035\tres = 3.044E-02\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.522275\tres = 2.841E-02\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.510610\tres = 2.567E-02\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.501106\tres = 2.234E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.493832\tres = 1.861E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.488781\tres = 1.452E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.485924\tres = 1.023E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.485211\tres = 5.846E-03\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.486571\tres = 1.467E-03\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.489905\tres = 2.802E-03\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.495105\tres = 6.853E-03\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.502056\tres = 1.061E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.510630\tres = 1.404E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.520696\tres = 1.708E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.532120\tres = 1.971E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.544768\tres = 2.194E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.558505\tres = 2.377E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.573200\tres = 2.522E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.588723\tres = 2.631E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.604951\tres = 2.708E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.621765\tres = 2.756E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.639053\tres = 2.779E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.656709\tres = 2.780E-02\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.674632\tres = 2.763E-02\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.692730\tres = 2.729E-02\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.710919\tres = 2.683E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.729118\tres = 2.626E-02\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.747258\tres = 2.560E-02\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.765273\tres = 2.488E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.783104\tres = 2.411E-02\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.800701\tres = 2.330E-02\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.818017\tres = 2.247E-02\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.835012\tres = 2.163E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.851651\tres = 2.078E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.867906\tres = 1.993E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.883750\tres = 1.909E-02\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.899164\tres = 1.826E-02\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.914131\tres = 1.744E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.928638\tres = 1.665E-02\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.942676\tres = 1.587E-02\n", + "[ NORMAL ] Iteration 50:\tk_eff = 0.956239\tres = 1.512E-02\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.969323\tres = 1.439E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.981927\tres = 1.368E-02\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.994054\tres = 1.300E-02\n", + "[ NORMAL ] Iteration 54:\tk_eff = 1.005705\tres = 1.235E-02\n", + "[ NORMAL ] Iteration 55:\tk_eff = 1.016886\tres = 1.172E-02\n", + "[ NORMAL ] Iteration 56:\tk_eff = 1.027604\tres = 1.112E-02\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.037866\tres = 1.054E-02\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.047682\tres = 9.987E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.057062\tres = 9.458E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.066016\tres = 8.953E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.074556\tres = 8.471E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.082693\tres = 8.011E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.090442\tres = 7.573E-03\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.097813\tres = 7.156E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.104820\tres = 6.760E-03\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.111477\tres = 6.383E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.117795\tres = 6.025E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.123789\tres = 5.685E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.129470\tres = 5.362E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.134853\tres = 5.056E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.139950\tres = 4.766E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.144772\tres = 4.491E-03\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.149333\tres = 4.230E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.153643\tres = 3.984E-03\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.157716\tres = 3.751E-03\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.161561\tres = 3.530E-03\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.165190\tres = 3.321E-03\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.168613\tres = 3.124E-03\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.171841\tres = 2.938E-03\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.174883\tres = 2.762E-03\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.177749\tres = 2.596E-03\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.180447\tres = 2.439E-03\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.182988\tres = 2.291E-03\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.185378\tres = 2.152E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.187627\tres = 2.021E-03\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.189741\tres = 1.897E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.191728\tres = 1.780E-03\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.193595\tres = 1.670E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.195349\tres = 1.567E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.196996\tres = 1.469E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.198543\tres = 1.378E-03\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.199994\tres = 1.292E-03\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.201355\tres = 1.211E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.202632\tres = 1.134E-03\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.203829\tres = 1.063E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.204952\tres = 9.956E-04\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.206004\tres = 9.324E-04\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.206989\tres = 8.730E-04\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.207913\tres = 8.173E-04\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.208777\tres = 7.650E-04\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.209587\tres = 7.159E-04\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.210345\tres = 6.698E-04\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.211054\tres = 6.266E-04\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.211718\tres = 5.861E-04\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.212339\tres = 5.481E-04\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.212920\tres = 5.125E-04\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.213463\tres = 4.792E-04\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.213971\tres = 4.479E-04\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.214446\tres = 4.186E-04\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.214890\tres = 3.912E-04\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.215305\tres = 3.655E-04\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.215692\tres = 3.414E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.216055\tres = 3.189E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.216393\tres = 2.979E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.216709\tres = 2.782E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.217004\tres = 2.597E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.217279\tres = 2.425E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.217536\tres = 2.263E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.217776\tres = 2.113E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.218000\tres = 1.971E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.218209\tres = 1.840E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.218404\tres = 1.716E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.218587\tres = 1.601E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.218756\tres = 1.494E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.218915\tres = 1.393E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.219062\tres = 1.299E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.219200\tres = 1.212E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.219329\tres = 1.130E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.219448\tres = 1.054E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.219560\tres = 9.822E-05\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.219664\tres = 9.156E-05\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.219761\tres = 8.534E-05\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.219851\tres = 7.954E-05\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.219936\tres = 7.413E-05\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.220014\tres = 6.908E-05\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.220087\tres = 6.437E-05\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.220156\tres = 5.997E-05\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.220219\tres = 5.587E-05\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.220278\tres = 5.205E-05\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.220333\tres = 4.848E-05\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.220385\tres = 4.516E-05\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.220433\tres = 4.206E-05\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.220477\tres = 3.917E-05\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.220518\tres = 3.648E-05\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.220557\tres = 3.397E-05\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.220593\tres = 3.163E-05\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.220627\tres = 2.945E-05\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.220658\tres = 2.742E-05\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.220687\tres = 2.552E-05\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.220714\tres = 2.376E-05\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.220739\tres = 2.212E-05\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.220762\tres = 2.059E-05\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.220784\tres = 1.916E-05\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.220804\tres = 1.783E-05\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.220823\tres = 1.660E-05\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.220841\tres = 1.545E-05\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.220857\tres = 1.437E-05\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.220872\tres = 1.338E-05\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.220886\tres = 1.245E-05\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.220899\tres = 1.158E-05\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.220912\tres = 1.077E-05\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.220923\tres = 1.002E-05\n" ] } ], @@ -1383,8 +1387,8 @@ "output_type": "stream", "text": [ "openmc keff = 1.223474\n", - "openmoc keff = 1.220999\n", - "bias [pcm]: -247.4\n" + "openmoc keff = 1.220923\n", + "bias [pcm]: -255.0\n" ] } ], @@ -1459,237 +1463,237 @@ "text": [ "[ NORMAL ] Importing ray tracing data from file...\n", "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.495686\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.557452\tres = 5.043E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.518267\tres = 1.246E-01\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.509166\tres = 7.029E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.496443\tres = 1.756E-02\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.488528\tres = 2.499E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.482840\tres = 1.594E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.479714\tres = 1.164E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.478769\tres = 6.475E-03\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.479802\tres = 1.970E-03\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.482610\tres = 2.157E-03\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.487005\tres = 5.852E-03\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.492817\tres = 9.108E-03\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.499885\tres = 1.193E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.508063\tres = 1.434E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.517218\tres = 1.636E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.527227\tres = 1.802E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.537978\tres = 1.935E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.549367\tres = 2.039E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.561302\tres = 2.117E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.573697\tres = 2.172E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.586472\tres = 2.208E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.599558\tres = 2.227E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.612889\tres = 2.231E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.626407\tres = 2.224E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.640059\tres = 2.206E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.653796\tres = 2.179E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.667574\tres = 2.146E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.681356\tres = 2.108E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.695105\tres = 2.064E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.708791\tres = 2.018E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.722384\tres = 1.969E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.735861\tres = 1.918E-02\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.749198\tres = 1.866E-02\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.762377\tres = 1.812E-02\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.775379\tres = 1.759E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.788191\tres = 1.706E-02\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.800799\tres = 1.652E-02\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.813193\tres = 1.600E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.825361\tres = 1.548E-02\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.837298\tres = 1.496E-02\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.848995\tres = 1.446E-02\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.860449\tres = 1.397E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.871654\tres = 1.349E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.882607\tres = 1.302E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.893308\tres = 1.257E-02\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.903754\tres = 1.212E-02\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.913944\tres = 1.169E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.923880\tres = 1.128E-02\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.933561\tres = 1.087E-02\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.942990\tres = 1.048E-02\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.952168\tres = 1.010E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.961097\tres = 9.733E-03\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.969781\tres = 9.378E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 0.978222\tres = 9.035E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 0.986423\tres = 8.704E-03\n", - "[ NORMAL ] Iteration 56:\tk_eff = 0.994389\tres = 8.384E-03\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.002123\tres = 8.075E-03\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.009629\tres = 7.778E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.016912\tres = 7.490E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.023975\tres = 7.213E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.030824\tres = 6.946E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.037462\tres = 6.688E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.043895\tres = 6.440E-03\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.050126\tres = 6.200E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.056162\tres = 5.970E-03\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.062006\tres = 5.747E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.067663\tres = 5.533E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.073138\tres = 5.327E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.078436\tres = 5.128E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.083561\tres = 4.937E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.088518\tres = 4.752E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.093311\tres = 4.575E-03\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.097945\tres = 4.404E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.102425\tres = 4.239E-03\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.106755\tres = 4.080E-03\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.110939\tres = 3.927E-03\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.114981\tres = 3.780E-03\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.118886\tres = 3.639E-03\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.122658\tres = 3.502E-03\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.126301\tres = 3.371E-03\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.129819\tres = 3.245E-03\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.133215\tres = 3.123E-03\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.136493\tres = 3.006E-03\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.139658\tres = 2.893E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.142712\tres = 2.784E-03\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.145659\tres = 2.680E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.148503\tres = 2.579E-03\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.151247\tres = 2.482E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.153894\tres = 2.389E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.156448\tres = 2.299E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.158911\tres = 2.213E-03\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.161286\tres = 2.130E-03\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.163576\tres = 2.050E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.165785\tres = 1.973E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.167915\tres = 1.898E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.169968\tres = 1.827E-03\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.171948\tres = 1.758E-03\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.173856\tres = 1.692E-03\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.175695\tres = 1.628E-03\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.177468\tres = 1.567E-03\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.179176\tres = 1.508E-03\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.180823\tres = 1.451E-03\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.182410\tres = 1.396E-03\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.183939\tres = 1.344E-03\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.185412\tres = 1.293E-03\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.186831\tres = 1.244E-03\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.188198\tres = 1.197E-03\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.189516\tres = 1.152E-03\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.190785\tres = 1.109E-03\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.192007\tres = 1.067E-03\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.193184\tres = 1.027E-03\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.194319\tres = 9.878E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.195411\tres = 9.505E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.196463\tres = 9.146E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.197476\tres = 8.800E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.198451\tres = 8.467E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.199391\tres = 8.147E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.200296\tres = 7.839E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.201167\tres = 7.543E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.202006\tres = 7.257E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.202813\tres = 6.983E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.203591\tres = 6.719E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.204339\tres = 6.464E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.205060\tres = 6.220E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.205754\tres = 5.984E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.206422\tres = 5.758E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.207065\tres = 5.540E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.207684\tres = 5.330E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.208279\tres = 5.128E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.208853\tres = 4.933E-04\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.209405\tres = 4.746E-04\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.209936\tres = 4.566E-04\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.210448\tres = 4.393E-04\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.210940\tres = 4.227E-04\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.211414\tres = 4.066E-04\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.211870\tres = 3.912E-04\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.212308\tres = 3.764E-04\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.212731\tres = 3.621E-04\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.213137\tres = 3.483E-04\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.213528\tres = 3.351E-04\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.213905\tres = 3.224E-04\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.214267\tres = 3.102E-04\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.214615\tres = 2.984E-04\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.214951\tres = 2.870E-04\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.215273\tres = 2.761E-04\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.215584\tres = 2.656E-04\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.215883\tres = 2.555E-04\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.216170\tres = 2.458E-04\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.216447\tres = 2.365E-04\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.216713\tres = 2.275E-04\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.216969\tres = 2.189E-04\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.217216\tres = 2.105E-04\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.217453\tres = 2.025E-04\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.217681\tres = 1.948E-04\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.217901\tres = 1.874E-04\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.218112\tres = 1.803E-04\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.218315\tres = 1.734E-04\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.218511\tres = 1.668E-04\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.218699\tres = 1.605E-04\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.218880\tres = 1.544E-04\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.219054\tres = 1.485E-04\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.219221\tres = 1.428E-04\n", - "[ NORMAL ] Iteration 163:\tk_eff = 1.219382\tres = 1.374E-04\n", - "[ NORMAL ] Iteration 164:\tk_eff = 1.219537\tres = 1.322E-04\n", - "[ NORMAL ] Iteration 165:\tk_eff = 1.219687\tres = 1.271E-04\n", - "[ NORMAL ] Iteration 166:\tk_eff = 1.219830\tres = 1.223E-04\n", - "[ NORMAL ] Iteration 167:\tk_eff = 1.219968\tres = 1.176E-04\n", - "[ NORMAL ] Iteration 168:\tk_eff = 1.220101\tres = 1.131E-04\n", - "[ NORMAL ] Iteration 169:\tk_eff = 1.220229\tres = 1.088E-04\n", - "[ NORMAL ] Iteration 170:\tk_eff = 1.220351\tres = 1.047E-04\n", - "[ NORMAL ] Iteration 171:\tk_eff = 1.220470\tres = 1.007E-04\n", - "[ NORMAL ] Iteration 172:\tk_eff = 1.220583\tres = 9.686E-05\n", - "[ NORMAL ] Iteration 173:\tk_eff = 1.220693\tres = 9.317E-05\n", - "[ NORMAL ] Iteration 174:\tk_eff = 1.220798\tres = 8.962E-05\n", - "[ NORMAL ] Iteration 175:\tk_eff = 1.220899\tres = 8.620E-05\n", - "[ NORMAL ] Iteration 176:\tk_eff = 1.220997\tres = 8.291E-05\n", - "[ NORMAL ] Iteration 177:\tk_eff = 1.221090\tres = 7.975E-05\n", - "[ NORMAL ] Iteration 178:\tk_eff = 1.221180\tres = 7.671E-05\n", - "[ NORMAL ] Iteration 179:\tk_eff = 1.221267\tres = 7.379E-05\n", - "[ NORMAL ] Iteration 180:\tk_eff = 1.221350\tres = 7.097E-05\n", - "[ NORMAL ] Iteration 181:\tk_eff = 1.221431\tres = 6.826E-05\n", - "[ NORMAL ] Iteration 182:\tk_eff = 1.221508\tres = 6.566E-05\n", - "[ NORMAL ] Iteration 183:\tk_eff = 1.221582\tres = 6.316E-05\n", - "[ NORMAL ] Iteration 184:\tk_eff = 1.221653\tres = 6.075E-05\n", - "[ NORMAL ] Iteration 185:\tk_eff = 1.221722\tres = 5.843E-05\n", - "[ NORMAL ] Iteration 186:\tk_eff = 1.221788\tres = 5.620E-05\n", - "[ NORMAL ] Iteration 187:\tk_eff = 1.221851\tres = 5.406E-05\n", - "[ NORMAL ] Iteration 188:\tk_eff = 1.221913\tres = 5.199E-05\n", - "[ NORMAL ] Iteration 189:\tk_eff = 1.221971\tres = 5.001E-05\n", - "[ NORMAL ] Iteration 190:\tk_eff = 1.222028\tres = 4.810E-05\n", - "[ NORMAL ] Iteration 191:\tk_eff = 1.222082\tres = 4.626E-05\n", - "[ NORMAL ] Iteration 192:\tk_eff = 1.222135\tres = 4.450E-05\n", - "[ NORMAL ] Iteration 193:\tk_eff = 1.222185\tres = 4.280E-05\n", - "[ NORMAL ] Iteration 194:\tk_eff = 1.222233\tres = 4.117E-05\n", - "[ NORMAL ] Iteration 195:\tk_eff = 1.222280\tres = 3.959E-05\n", - "[ NORMAL ] Iteration 196:\tk_eff = 1.222325\tres = 3.808E-05\n", - "[ NORMAL ] Iteration 197:\tk_eff = 1.222368\tres = 3.663E-05\n", - "[ NORMAL ] Iteration 198:\tk_eff = 1.222409\tres = 3.523E-05\n", - "[ NORMAL ] Iteration 199:\tk_eff = 1.222449\tres = 3.389E-05\n", - "[ NORMAL ] Iteration 200:\tk_eff = 1.222487\tres = 3.259E-05\n", - "[ NORMAL ] Iteration 201:\tk_eff = 1.222524\tres = 3.135E-05\n", - "[ NORMAL ] Iteration 202:\tk_eff = 1.222560\tres = 3.015E-05\n", - "[ NORMAL ] Iteration 203:\tk_eff = 1.222594\tres = 2.900E-05\n", - "[ NORMAL ] Iteration 204:\tk_eff = 1.222626\tres = 2.789E-05\n", - "[ NORMAL ] Iteration 205:\tk_eff = 1.222658\tres = 2.683E-05\n", - "[ NORMAL ] Iteration 206:\tk_eff = 1.222688\tres = 2.580E-05\n", - "[ NORMAL ] Iteration 207:\tk_eff = 1.222718\tres = 2.482E-05\n", - "[ NORMAL ] Iteration 208:\tk_eff = 1.222746\tres = 2.387E-05\n", - "[ NORMAL ] Iteration 209:\tk_eff = 1.222773\tres = 2.296E-05\n", - "[ NORMAL ] Iteration 210:\tk_eff = 1.222799\tres = 2.208E-05\n", - "[ NORMAL ] Iteration 211:\tk_eff = 1.222824\tres = 2.124E-05\n", - "[ NORMAL ] Iteration 212:\tk_eff = 1.222848\tres = 2.042E-05\n", - "[ NORMAL ] Iteration 213:\tk_eff = 1.222871\tres = 1.964E-05\n", - "[ NORMAL ] Iteration 214:\tk_eff = 1.222893\tres = 1.889E-05\n", - "[ NORMAL ] Iteration 215:\tk_eff = 1.222914\tres = 1.817E-05\n", - "[ NORMAL ] Iteration 216:\tk_eff = 1.222935\tres = 1.748E-05\n", - "[ NORMAL ] Iteration 217:\tk_eff = 1.222955\tres = 1.681E-05\n", - "[ NORMAL ] Iteration 218:\tk_eff = 1.222974\tres = 1.617E-05\n", - "[ NORMAL ] Iteration 219:\tk_eff = 1.222992\tres = 1.555E-05\n", - "[ NORMAL ] Iteration 220:\tk_eff = 1.223009\tres = 1.496E-05\n", - "[ NORMAL ] Iteration 221:\tk_eff = 1.223026\tres = 1.438E-05\n", - "[ NORMAL ] Iteration 222:\tk_eff = 1.223043\tres = 1.383E-05\n", - "[ NORMAL ] Iteration 223:\tk_eff = 1.223058\tres = 1.331E-05\n", - "[ NORMAL ] Iteration 224:\tk_eff = 1.223073\tres = 1.280E-05\n", - "[ NORMAL ] Iteration 225:\tk_eff = 1.223088\tres = 1.231E-05\n", - "[ NORMAL ] Iteration 226:\tk_eff = 1.223102\tres = 1.184E-05\n", - "[ NORMAL ] Iteration 227:\tk_eff = 1.223115\tres = 1.138E-05\n", - "[ NORMAL ] Iteration 228:\tk_eff = 1.223128\tres = 1.095E-05\n", - "[ NORMAL ] Iteration 229:\tk_eff = 1.223140\tres = 1.053E-05\n", - "[ NORMAL ] Iteration 230:\tk_eff = 1.223152\tres = 1.013E-05\n" + "[ NORMAL ] Iteration 0:\tk_eff = 0.495816\tres = 0.000E+00\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.557477\tres = 5.042E-01\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.518301\tres = 1.244E-01\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.509212\tres = 7.027E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.496489\tres = 1.754E-02\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.488581\tres = 2.498E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.482897\tres = 1.593E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.479775\tres = 1.163E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.478835\tres = 6.464E-03\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.479872\tres = 1.960E-03\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.482685\tres = 2.166E-03\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.487085\tres = 5.861E-03\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.492901\tres = 9.116E-03\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.499973\tres = 1.194E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.508155\tres = 1.435E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.517314\tres = 1.637E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.527327\tres = 1.802E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.538081\tres = 1.936E-02\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.549475\tres = 2.039E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.561413\tres = 2.117E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.573810\tres = 2.173E-02\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.586589\tres = 2.208E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.599678\tres = 2.227E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.613012\tres = 2.231E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.626532\tres = 2.224E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.640186\tres = 2.206E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.653925\tres = 2.179E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.667706\tres = 2.146E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.681489\tres = 2.107E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.695240\tres = 2.064E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.708927\tres = 2.018E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.722522\tres = 1.969E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.736000\tres = 1.918E-02\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.749339\tres = 1.865E-02\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.762519\tres = 1.812E-02\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.775522\tres = 1.759E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.788335\tres = 1.705E-02\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.800944\tres = 1.652E-02\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.813338\tres = 1.599E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.825507\tres = 1.547E-02\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.837444\tres = 1.496E-02\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.849142\tres = 1.446E-02\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.860595\tres = 1.397E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.871801\tres = 1.349E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.882755\tres = 1.302E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.893455\tres = 1.256E-02\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.903901\tres = 1.212E-02\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.914091\tres = 1.169E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.924027\tres = 1.127E-02\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.933708\tres = 1.087E-02\n", + "[ NORMAL ] Iteration 50:\tk_eff = 0.943137\tres = 1.048E-02\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.952314\tres = 1.010E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.961243\tres = 9.731E-03\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.969927\tres = 9.376E-03\n", + "[ NORMAL ] Iteration 54:\tk_eff = 0.978367\tres = 9.033E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 0.986568\tres = 8.702E-03\n", + "[ NORMAL ] Iteration 56:\tk_eff = 0.994534\tres = 8.382E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.002267\tres = 8.074E-03\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.009773\tres = 7.776E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.017055\tres = 7.489E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.024118\tres = 7.212E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.030966\tres = 6.944E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.037603\tres = 6.687E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.044036\tres = 6.438E-03\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.050267\tres = 6.199E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.056302\tres = 5.968E-03\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.062145\tres = 5.746E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.067802\tres = 5.532E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.073276\tres = 5.326E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.078573\tres = 5.127E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.083698\tres = 4.935E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.088654\tres = 4.751E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.093447\tres = 4.573E-03\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.098080\tres = 4.402E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.102560\tres = 4.238E-03\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.106889\tres = 4.079E-03\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.111072\tres = 3.926E-03\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.115114\tres = 3.779E-03\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.119018\tres = 3.638E-03\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.122790\tres = 3.501E-03\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.126432\tres = 3.370E-03\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.129949\tres = 3.244E-03\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.133344\tres = 3.122E-03\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.136622\tres = 3.005E-03\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.139786\tres = 2.892E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.142840\tres = 2.784E-03\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.145786\tres = 2.679E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.148630\tres = 2.579E-03\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.151373\tres = 2.482E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.154020\tres = 2.388E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.156573\tres = 2.299E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.159035\tres = 2.212E-03\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.161410\tres = 2.129E-03\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.163700\tres = 2.049E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.165909\tres = 1.972E-03\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.168038\tres = 1.898E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.170091\tres = 1.826E-03\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.172070\tres = 1.758E-03\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.173977\tres = 1.691E-03\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.175816\tres = 1.628E-03\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.177589\tres = 1.566E-03\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.179297\tres = 1.507E-03\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.180943\tres = 1.451E-03\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.182529\tres = 1.396E-03\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.184058\tres = 1.343E-03\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.185530\tres = 1.293E-03\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.186949\tres = 1.244E-03\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.188316\tres = 1.197E-03\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.189633\tres = 1.152E-03\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.190902\tres = 1.108E-03\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.192124\tres = 1.066E-03\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.193301\tres = 1.026E-03\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.194435\tres = 9.874E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.195527\tres = 9.501E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.196578\tres = 9.142E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.197591\tres = 8.797E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.198566\tres = 8.464E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.199506\tres = 8.144E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.200410\tres = 7.836E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.201281\tres = 7.540E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.202119\tres = 7.255E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.202927\tres = 6.980E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.203704\tres = 6.716E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.204452\tres = 6.462E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.205173\tres = 6.217E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.205867\tres = 5.982E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.206534\tres = 5.755E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.207177\tres = 5.537E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.207796\tres = 5.327E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.208391\tres = 5.126E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.208965\tres = 4.931E-04\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.209517\tres = 4.744E-04\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.210048\tres = 4.565E-04\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.210559\tres = 4.391E-04\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.211051\tres = 4.225E-04\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.211525\tres = 4.065E-04\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.211980\tres = 3.910E-04\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.212419\tres = 3.762E-04\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.212841\tres = 3.619E-04\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.213247\tres = 3.482E-04\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.213638\tres = 3.350E-04\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.214015\tres = 3.222E-04\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.214377\tres = 3.100E-04\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.214725\tres = 2.982E-04\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.215060\tres = 2.869E-04\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.215383\tres = 2.760E-04\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.215693\tres = 2.655E-04\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.215992\tres = 2.554E-04\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.216280\tres = 2.457E-04\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.216556\tres = 2.364E-04\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.216822\tres = 2.274E-04\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.217078\tres = 2.187E-04\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.217325\tres = 2.104E-04\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.217562\tres = 2.024E-04\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.217790\tres = 1.947E-04\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.218009\tres = 1.873E-04\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.218220\tres = 1.802E-04\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.218423\tres = 1.733E-04\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.218619\tres = 1.667E-04\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.218807\tres = 1.604E-04\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.218988\tres = 1.543E-04\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.219162\tres = 1.484E-04\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.219329\tres = 1.428E-04\n", + "[ NORMAL ] Iteration 163:\tk_eff = 1.219490\tres = 1.373E-04\n", + "[ NORMAL ] Iteration 164:\tk_eff = 1.219645\tres = 1.321E-04\n", + "[ NORMAL ] Iteration 165:\tk_eff = 1.219794\tres = 1.271E-04\n", + "[ NORMAL ] Iteration 166:\tk_eff = 1.219938\tres = 1.222E-04\n", + "[ NORMAL ] Iteration 167:\tk_eff = 1.220076\tres = 1.176E-04\n", + "[ NORMAL ] Iteration 168:\tk_eff = 1.220208\tres = 1.131E-04\n", + "[ NORMAL ] Iteration 169:\tk_eff = 1.220336\tres = 1.088E-04\n", + "[ NORMAL ] Iteration 170:\tk_eff = 1.220459\tres = 1.046E-04\n", + "[ NORMAL ] Iteration 171:\tk_eff = 1.220577\tres = 1.006E-04\n", + "[ NORMAL ] Iteration 172:\tk_eff = 1.220691\tres = 9.681E-05\n", + "[ NORMAL ] Iteration 173:\tk_eff = 1.220800\tres = 9.312E-05\n", + "[ NORMAL ] Iteration 174:\tk_eff = 1.220905\tres = 8.957E-05\n", + "[ NORMAL ] Iteration 175:\tk_eff = 1.221006\tres = 8.615E-05\n", + "[ NORMAL ] Iteration 176:\tk_eff = 1.221104\tres = 8.287E-05\n", + "[ NORMAL ] Iteration 177:\tk_eff = 1.221197\tres = 7.971E-05\n", + "[ NORMAL ] Iteration 178:\tk_eff = 1.221287\tres = 7.667E-05\n", + "[ NORMAL ] Iteration 179:\tk_eff = 1.221374\tres = 7.374E-05\n", + "[ NORMAL ] Iteration 180:\tk_eff = 1.221457\tres = 7.093E-05\n", + "[ NORMAL ] Iteration 181:\tk_eff = 1.221537\tres = 6.823E-05\n", + "[ NORMAL ] Iteration 182:\tk_eff = 1.221615\tres = 6.562E-05\n", + "[ NORMAL ] Iteration 183:\tk_eff = 1.221689\tres = 6.312E-05\n", + "[ NORMAL ] Iteration 184:\tk_eff = 1.221760\tres = 6.071E-05\n", + "[ NORMAL ] Iteration 185:\tk_eff = 1.221829\tres = 5.840E-05\n", + "[ NORMAL ] Iteration 186:\tk_eff = 1.221895\tres = 5.617E-05\n", + "[ NORMAL ] Iteration 187:\tk_eff = 1.221958\tres = 5.402E-05\n", + "[ NORMAL ] Iteration 188:\tk_eff = 1.222019\tres = 5.196E-05\n", + "[ NORMAL ] Iteration 189:\tk_eff = 1.222078\tres = 4.998E-05\n", + "[ NORMAL ] Iteration 190:\tk_eff = 1.222134\tres = 4.807E-05\n", + "[ NORMAL ] Iteration 191:\tk_eff = 1.222189\tres = 4.624E-05\n", + "[ NORMAL ] Iteration 192:\tk_eff = 1.222241\tres = 4.447E-05\n", + "[ NORMAL ] Iteration 193:\tk_eff = 1.222291\tres = 4.277E-05\n", + "[ NORMAL ] Iteration 194:\tk_eff = 1.222340\tres = 4.114E-05\n", + "[ NORMAL ] Iteration 195:\tk_eff = 1.222386\tres = 3.957E-05\n", + "[ NORMAL ] Iteration 196:\tk_eff = 1.222431\tres = 3.806E-05\n", + "[ NORMAL ] Iteration 197:\tk_eff = 1.222474\tres = 3.661E-05\n", + "[ NORMAL ] Iteration 198:\tk_eff = 1.222515\tres = 3.521E-05\n", + "[ NORMAL ] Iteration 199:\tk_eff = 1.222555\tres = 3.386E-05\n", + "[ NORMAL ] Iteration 200:\tk_eff = 1.222594\tres = 3.257E-05\n", + "[ NORMAL ] Iteration 201:\tk_eff = 1.222630\tres = 3.133E-05\n", + "[ NORMAL ] Iteration 202:\tk_eff = 1.222666\tres = 3.013E-05\n", + "[ NORMAL ] Iteration 203:\tk_eff = 1.222700\tres = 2.898E-05\n", + "[ NORMAL ] Iteration 204:\tk_eff = 1.222733\tres = 2.787E-05\n", + "[ NORMAL ] Iteration 205:\tk_eff = 1.222764\tres = 2.681E-05\n", + "[ NORMAL ] Iteration 206:\tk_eff = 1.222795\tres = 2.578E-05\n", + "[ NORMAL ] Iteration 207:\tk_eff = 1.222824\tres = 2.480E-05\n", + "[ NORMAL ] Iteration 208:\tk_eff = 1.222852\tres = 2.385E-05\n", + "[ NORMAL ] Iteration 209:\tk_eff = 1.222879\tres = 2.294E-05\n", + "[ NORMAL ] Iteration 210:\tk_eff = 1.222905\tres = 2.206E-05\n", + "[ NORMAL ] Iteration 211:\tk_eff = 1.222930\tres = 2.122E-05\n", + "[ NORMAL ] Iteration 212:\tk_eff = 1.222954\tres = 2.041E-05\n", + "[ NORMAL ] Iteration 213:\tk_eff = 1.222977\tres = 1.963E-05\n", + "[ NORMAL ] Iteration 214:\tk_eff = 1.222999\tres = 1.888E-05\n", + "[ NORMAL ] Iteration 215:\tk_eff = 1.223020\tres = 1.816E-05\n", + "[ NORMAL ] Iteration 216:\tk_eff = 1.223041\tres = 1.747E-05\n", + "[ NORMAL ] Iteration 217:\tk_eff = 1.223061\tres = 1.680E-05\n", + "[ NORMAL ] Iteration 218:\tk_eff = 1.223080\tres = 1.616E-05\n", + "[ NORMAL ] Iteration 219:\tk_eff = 1.223098\tres = 1.554E-05\n", + "[ NORMAL ] Iteration 220:\tk_eff = 1.223116\tres = 1.495E-05\n", + "[ NORMAL ] Iteration 221:\tk_eff = 1.223132\tres = 1.437E-05\n", + "[ NORMAL ] Iteration 222:\tk_eff = 1.223149\tres = 1.382E-05\n", + "[ NORMAL ] Iteration 223:\tk_eff = 1.223164\tres = 1.330E-05\n", + "[ NORMAL ] Iteration 224:\tk_eff = 1.223179\tres = 1.279E-05\n", + "[ NORMAL ] Iteration 225:\tk_eff = 1.223194\tres = 1.230E-05\n", + "[ NORMAL ] Iteration 226:\tk_eff = 1.223208\tres = 1.183E-05\n", + "[ NORMAL ] Iteration 227:\tk_eff = 1.223221\tres = 1.138E-05\n", + "[ NORMAL ] Iteration 228:\tk_eff = 1.223234\tres = 1.094E-05\n", + "[ NORMAL ] Iteration 229:\tk_eff = 1.223246\tres = 1.052E-05\n", + "[ NORMAL ] Iteration 230:\tk_eff = 1.223258\tres = 1.012E-05\n" ] } ], @@ -1715,8 +1719,8 @@ "output_type": "stream", "text": [ "openmc keff = 1.223474\n", - "openmoc keff = 1.223152\n", - "bias [pcm]: -32.1\n" + "openmoc keff = 1.223258\n", + "bias [pcm]: -21.5\n" ] } ], @@ -1766,19 +1770,7 @@ "metadata": { "collapsed": false }, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'pyne' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# Instantiate a PyNE ACE continuous-energy cross sections library\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mpyne_lib\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpyne\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mace\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mLibrary\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'../../../../data/nndc/293.6K/U_235_293.6K.ace'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[0mpyne_lib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mread\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'92235.71c'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;31m# Extract the U-235 data from the library\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mNameError\u001b[0m: name 'pyne' is not defined" - ] - } - ], + "outputs": [], "source": [ "# Instantiate a PyNE ACE continuous-energy cross sections library\n", "pyne_lib = pyne.ace.Library('../../../../data/nndc/293.6K/U_235_293.6K.ace')\n", @@ -1800,11 +1792,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(9.9999999999999994e-12, 20.0)" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Create a loglog plot of the U-235 continuous-energy fission cross section \n", "plt.loglog(u235.energy, fission.sigma, color='b', linewidth=1)\n", @@ -1840,7 +1853,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": { "collapsed": false }, @@ -1872,11 +1885,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Create plot of the H-1 scattering matrix\n", "fig = plt.subplot(121)\n", @@ -1924,7 +1948,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.11" + "version": "2.7.6" } }, "nbformat": 4, From f1e0b5b8ef9784904183e26bc28eb5f4ba60a4d5 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 8 Apr 2016 16:25:24 -0500 Subject: [PATCH 434/650] Avoid bug in h5py 2.6 for the time being --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index acec278ed6..b99ce540b8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,7 +27,7 @@ before_install: - conda config --set always_yes yes --set changeps1 no - conda update -q conda - conda info -a - - conda create -q -n test-environment python=$TRAVIS_PYTHON_VERSION numpy scipy h5py pandas + - conda create -q -n test-environment python=$TRAVIS_PYTHON_VERSION numpy scipy h5py=2.5 pandas - source activate test-environment # Install GCC, MPICH, HDF5, PHDF5 From 4eb9a5185319e8454ef9f038cdffd8bc9bbe464d Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 8 Apr 2016 14:52:43 -0500 Subject: [PATCH 435/650] Fix bug with assigning zaids to metastable nuclides --- src/ace.F90 | 2 +- .../test_asymmetric_lattice/results_true.dat | 2 +- tests/test_filter_mesh_2d/results_true.dat | 70 +- tests/test_filter_mesh_3d/results_true.dat | 706 +++++++++--------- tests/test_iso_in_lab/results_true.dat | 2 +- tests/test_lattice_multiple/results_true.dat | 2 +- tests/test_mgxs_library_hdf5/results_true.dat | 6 +- .../results_true.dat | 2 +- .../results_true.dat | 68 +- tests/test_score_current/results_true.dat | 2 +- tests/test_tallies/results_true.dat | 2 +- tests/test_tally_aggregation/results_true.dat | 2 +- tests/test_tally_assumesep/results_true.dat | 2 +- 13 files changed, 434 insertions(+), 434 deletions(-) diff --git a/src/ace.F90 b/src/ace.F90 index 1d5f5f45b2..caa7c3aed0 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -369,7 +369,7 @@ contains nuc % name = name nuc % awr = awr nuc % kT = kT - nuc % zaid = NXS(2) + nuc % zaid = listing % zaid end if ! read all blocks diff --git a/tests/test_asymmetric_lattice/results_true.dat b/tests/test_asymmetric_lattice/results_true.dat index 31b09c4da4..a33b9c9e59 100644 --- a/tests/test_asymmetric_lattice/results_true.dat +++ b/tests/test_asymmetric_lattice/results_true.dat @@ -1 +1 @@ -219ee21902e83b0f1b8e92ca4977db998e3a4a5ca36da5be9490f9ec4f30ab90cf15a257fe4113d2f1f9eb85cab159ed65638412b9751ce786d263870c208581 \ No newline at end of file +bc8bef8121f9b6470e4fea817a4e48eabb1ecba1f42761a4cbd77d71181bf9e1612df4a3d6ddfbcd08a3086ac873e5f3c3e560bf96b2b7c959a2f7aad7e4e08d \ No newline at end of file diff --git a/tests/test_filter_mesh_2d/results_true.dat b/tests/test_filter_mesh_2d/results_true.dat index 3e43ffe880..f4c5979526 100644 --- a/tests/test_filter_mesh_2d/results_true.dat +++ b/tests/test_filter_mesh_2d/results_true.dat @@ -1,5 +1,5 @@ k-combined: -9.581523E-01 4.261823E-02 +9.581522E-01 4.261830E-02 tally 1: 0.000000E+00 0.000000E+00 @@ -73,8 +73,8 @@ tally 1: 0.000000E+00 1.149324E-01 1.320945E-02 -2.465049E-02 -3.049064E-04 +2.465048E-02 +3.049063E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -86,13 +86,13 @@ tally 1: 0.000000E+00 0.000000E+00 7.002118E-02 -4.902966E-03 +4.902965E-03 5.128548E-01 1.258296E-01 1.379070E+00 4.300261E-01 1.040956E+00 -3.089103E-01 +3.089102E-01 1.237157E+00 6.284409E-01 9.539296E-01 @@ -121,14 +121,14 @@ tally 1: 1.597365E-02 8.612279E-02 5.910825E-03 -9.004672E-01 +9.004671E-01 2.791173E-01 6.485841E+00 1.046238E+01 6.743595E+00 1.135216E+01 -7.681047E-01 -1.896253E-01 +7.681046E-01 +1.896252E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -155,7 +155,7 @@ tally 1: 2.287801E-01 5.651386E-01 1.286874E-01 -5.729904E-01 +5.729905E-01 2.680764E-01 5.509254E-01 1.200498E-01 @@ -185,16 +185,16 @@ tally 1: 5.854257E-02 2.237774E+00 1.109643E+00 -7.495197E-01 +7.495196E-01 1.939234E-01 3.804197E-01 1.225870E-01 1.009880E-01 -9.392498E-03 +9.392497E-03 2.424177E+00 1.613025E+00 2.226123E+00 -1.203764E+00 +1.203763E+00 1.939766E+00 1.132042E+00 3.953753E-01 @@ -207,7 +207,7 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.501130E-02 +2.501129E-02 6.255649E-04 3.984785E-01 1.486414E-01 @@ -233,11 +233,11 @@ tally 1: 1.425606E+00 1.377786E-01 1.716503E-02 -3.011081E-02 -9.066609E-04 +3.011069E-02 +9.066538E-04 0.000000E+00 0.000000E+00 -5.118695E-02 +5.118696E-02 2.620104E-03 0.000000E+00 0.000000E+00 @@ -260,14 +260,14 @@ tally 1: 2.560771E-01 6.557550E-02 9.262861E-03 -8.580059E-05 +8.580060E-05 2.505905E-01 6.279558E-02 5.136552E-01 2.638417E-01 1.441275E+00 -5.086866E-01 -2.913900E+00 +5.086865E-01 +2.913901E+00 1.841912E+00 6.978650E-01 2.584000E-01 @@ -301,7 +301,7 @@ tally 1: 1.575534E-01 4.033076E-01 5.492660E-02 -4.513269E+00 +4.513270E+00 5.611449E+00 1.653243E+00 8.369762E-01 @@ -318,15 +318,15 @@ tally 1: 5.709899E+00 7.095076E+00 1.194169E+00 -4.790399E-01 +4.790398E-01 1.420269E-01 -2.017164E-02 +2.017163E-02 0.000000E+00 0.000000E+00 -3.214463E-01 +3.214464E-01 1.033278E-01 -2.222164E-02 -4.938014E-04 +2.222160E-02 +4.937996E-04 2.028040E-01 4.112944E-02 1.417427E+00 @@ -335,7 +335,7 @@ tally 1: 6.697189E-01 8.534416E-01 2.290345E-01 -5.367405E+00 +5.367404E+00 6.853344E+00 1.237276E+00 4.961691E-01 @@ -345,14 +345,14 @@ tally 1: 1.049542E-01 4.235354E+00 5.638989E+00 -2.034494E+00 +2.034493E+00 1.162774E+00 1.533605E+00 -8.644494E-01 +8.644495E-01 4.663027E+00 5.641430E+00 1.261505E+00 -7.705207E-01 +7.705206E-01 1.954689E+00 9.874394E-01 1.449729E-01 @@ -364,7 +364,7 @@ tally 1: 0.000000E+00 0.000000E+00 1.398153E-01 -1.954831E-02 +1.954832E-02 5.089636E-01 8.836228E-02 1.422521E+00 @@ -380,7 +380,7 @@ tally 1: 3.267703E-01 4.763836E-02 1.252153E+00 -4.563947E-01 +4.563949E-01 1.962807E-01 2.410165E-02 1.357567E+00 @@ -419,7 +419,7 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.679763E-01 +3.679762E-01 1.354065E-01 5.043842E-02 2.544034E-03 @@ -502,11 +502,11 @@ tally 1: 0.000000E+00 0.000000E+00 5.208007E-01 -2.057625E-01 +2.057626E-01 1.050464E+00 5.524605E-01 -7.171592E-02 -5.143173E-03 +7.171591E-02 +5.143172E-03 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/tests/test_filter_mesh_3d/results_true.dat b/tests/test_filter_mesh_3d/results_true.dat index 15724025cb..88a5228278 100644 --- a/tests/test_filter_mesh_3d/results_true.dat +++ b/tests/test_filter_mesh_3d/results_true.dat @@ -1,5 +1,5 @@ k-combined: -9.581523E-01 4.261823E-02 +9.581522E-01 4.261830E-02 tally 1: 0.000000E+00 0.000000E+00 @@ -897,10 +897,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.083670E-01 +1.083669E-01 1.174340E-02 -3.904086E-02 -1.524189E-03 +3.904088E-02 +1.524190E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1444,7 +1444,7 @@ tally 1: 0.000000E+00 0.000000E+00 7.002118E-02 -4.902966E-03 +4.902965E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1476,9 +1476,9 @@ tally 1: 0.000000E+00 0.000000E+00 2.623543E-01 -4.112455E-02 -2.258488E-01 -5.100769E-02 +4.112454E-02 +2.258489E-01 +5.100771E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1504,11 +1504,11 @@ tally 1: 1.729718E-01 2.991925E-02 2.994456E-02 -8.966769E-04 +8.966764E-04 9.977770E-03 -9.955589E-05 +9.955590E-05 4.396029E-01 -6.352575E-02 +6.352573E-02 5.669837E-01 1.209384E-01 1.423672E-01 @@ -1528,7 +1528,7 @@ tally 1: 0.000000E+00 0.000000E+00 1.722215E-02 -2.966023E-04 +2.966024E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1540,9 +1540,9 @@ tally 1: 0.000000E+00 0.000000E+00 1.565669E-02 -2.451320E-04 +2.451318E-04 8.200689E-01 -2.392979E-01 +2.392978E-01 1.748649E-01 1.584562E-02 0.000000E+00 @@ -1561,8 +1561,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.036512E-02 -9.220404E-04 +3.036511E-02 +9.220402E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1575,11 +1575,11 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.998386E-02 +9.998387E-02 7.936690E-03 1.089115E+00 5.614559E-01 -4.805841E-02 +4.805840E-02 2.309610E-03 0.000000E+00 0.000000E+00 @@ -1801,7 +1801,7 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.448096E-01 +3.448095E-01 5.774877E-02 0.000000E+00 0.000000E+00 @@ -1934,7 +1934,7 @@ tally 1: 0.000000E+00 0.000000E+00 5.319541E-03 -2.829751E-05 +2.829752E-05 3.420304E-01 1.169848E-01 0.000000E+00 @@ -1999,10 +1999,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.896347E-02 -1.518152E-03 -1.048933E-01 -7.753481E-03 +3.896367E-02 +1.518168E-03 +1.048931E-01 +7.753447E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2033,10 +2033,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.396515E-03 -5.743285E-06 -8.372628E-02 -5.869222E-03 +2.396759E-03 +5.744454E-06 +8.372603E-02 +5.869219E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2045,16 +2045,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.409443E-02 -1.944319E-03 +4.409446E-02 +1.944321E-03 2.812104E-01 -7.907929E-02 +7.907926E-02 0.000000E+00 0.000000E+00 1.125733E-01 1.267274E-02 -3.364086E-01 -6.085431E-02 +3.364085E-01 +6.085429E-02 8.236284E-02 4.869311E-03 0.000000E+00 @@ -2087,9 +2087,9 @@ tally 1: 5.280988E-02 2.073790E+00 1.188596E+00 -9.609430E-01 +9.609431E-01 2.621642E-01 -4.350510E-01 +4.350509E-01 1.399885E-01 0.000000E+00 0.000000E+00 @@ -2103,24 +2103,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.412546E-04 -2.929565E-07 +5.411503E-04 +2.928436E-07 1.480967E+00 -5.223268E-01 +5.223269E-01 1.727443E-01 1.798769E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.254526E-01 -1.810099E-01 +4.254527E-01 +1.810100E-01 2.391190E-01 2.413267E-02 -3.823231E-01 -4.488287E-02 -4.156040E+00 -4.315161E+00 +3.823223E-01 +4.488260E-02 +4.156041E+00 +4.315163E+00 1.009424E+00 3.060875E-01 0.000000E+00 @@ -2151,10 +2151,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.052675E-02 -8.195093E-03 +9.052674E-02 +8.195092E-03 3.050953E-01 -3.658883E-02 +3.658881E-02 1.622477E-01 1.848987E-02 0.000000E+00 @@ -2172,9 +2172,9 @@ tally 1: 0.000000E+00 0.000000E+00 1.164981E-01 -1.357182E-02 +1.357181E-02 9.373673E-02 -4.377146E-03 +4.377147E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2380,7 +2380,7 @@ tally 1: 0.000000E+00 0.000000E+00 1.370265E-01 -1.583750E-02 +1.583751E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2505,14 +2505,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.602121E-02 +3.602120E-02 1.297527E-03 2.054694E-02 -4.221767E-04 +4.221768E-04 3.699789E-01 1.099867E-01 1.034262E-01 -6.886192E-03 +6.886191E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2575,12 +2575,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.613312E-01 -2.177880E-02 -4.750136E-01 -1.508283E-01 -5.109846E-02 -1.598242E-03 +1.613314E-01 +2.177882E-02 +4.750135E-01 +1.508282E-01 +5.109842E-02 +1.598239E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2611,10 +2611,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.936906E-01 -7.202020E-02 -1.714480E-01 -1.505050E-02 +3.936907E-01 +7.202022E-02 +1.714479E-01 +1.505049E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2626,7 +2626,7 @@ tally 1: 4.226996E-01 1.360325E-01 7.317899E-02 -5.355164E-03 +5.355165E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2652,16 +2652,16 @@ tally 1: 0.000000E+00 0.000000E+00 7.711190E-02 -5.946246E-03 +5.946245E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.946067E-02 -8.679308E-04 -1.124255E-01 +2.946064E-02 +8.679293E-04 +1.124256E-01 1.263950E-02 0.000000E+00 0.000000E+00 @@ -2683,10 +2683,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.561577E-01 +1.561576E-01 2.112454E-02 -1.640941E-01 -2.692689E-02 +1.640942E-01 +2.692690E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2697,10 +2697,10 @@ tally 1: 0.000000E+00 1.508419E-01 2.275329E-02 -2.887902E-01 -4.216076E-02 -4.015411E-01 -7.884729E-02 +2.887905E-01 +4.216084E-02 +4.015408E-01 +7.884715E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2717,10 +2717,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.595965E-02 +5.595964E-02 2.146289E-03 3.159701E-01 -3.538767E-02 +3.538768E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2751,13 +2751,13 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.403984E-02 -3.220777E-03 -1.220496E-01 +7.403983E-02 +3.220776E-03 +1.220497E-01 1.051103E-02 0.000000E+00 0.000000E+00 -4.308559E-02 +4.308558E-02 1.856368E-03 1.206585E-01 1.455847E-02 @@ -3088,9 +3088,9 @@ tally 1: 9.531928E-02 6.215764E-03 2.906510E-01 -2.666265E-02 -4.038687E-02 -1.631099E-03 +2.666266E-02 +4.038686E-02 +1.631098E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3117,8 +3117,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.367395E-03 -1.869768E-06 +1.367392E-03 +1.869762E-06 6.997755E-01 1.672455E-01 9.975381E-01 @@ -3157,7 +3157,7 @@ tally 1: 0.000000E+00 6.670089E-01 1.688817E-01 -8.251078E-02 +8.251077E-02 3.717992E-03 0.000000E+00 0.000000E+00 @@ -3187,8 +3187,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.683051E-03 -9.376148E-05 +9.683052E-03 +9.376150E-05 3.707367E-01 1.159281E-01 0.000000E+00 @@ -3230,7 +3230,7 @@ tally 1: 0.000000E+00 0.000000E+00 1.009880E-01 -9.392498E-03 +9.392497E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3243,12 +3243,12 @@ tally 1: 3.025673E-02 0.000000E+00 0.000000E+00 -2.075805E-02 -4.308965E-04 -8.573312E-01 -2.242081E-01 -2.267548E-01 -2.900095E-02 +2.075806E-02 +4.308970E-04 +8.573314E-01 +2.242082E-01 +2.267546E-01 +2.900091E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3263,7 +3263,7 @@ tally 1: 0.000000E+00 3.978837E-01 1.583114E-01 -7.475044E-01 +7.475045E-01 2.090484E-01 0.000000E+00 0.000000E+00 @@ -3273,14 +3273,14 @@ tally 1: 0.000000E+00 3.630182E-02 1.317822E-03 -6.960537E-02 -4.844908E-03 -3.721248E-03 -1.384769E-05 -7.406530E-02 -5.485669E-03 +6.960539E-02 +4.844911E-03 +3.721224E-03 +1.384751E-05 +7.406533E-02 +5.485672E-03 1.330296E+00 -6.633077E-01 +6.633075E-01 1.862835E-02 3.470153E-04 0.000000E+00 @@ -3298,7 +3298,7 @@ tally 1: 0.000000E+00 0.000000E+00 5.329778E-01 -1.118274E-01 +1.118275E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3365,8 +3365,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.471871E-02 -5.582886E-03 +7.471872E-02 +5.582887E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3533,7 +3533,7 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.501130E-02 +2.501129E-02 6.255649E-04 0.000000E+00 0.000000E+00 @@ -3567,7 +3567,7 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.907151E-02 +8.907152E-02 7.933735E-03 3.094070E-01 8.793386E-02 @@ -3665,9 +3665,9 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.420413E-02 -1.954005E-03 -9.389955E-01 +4.420414E-02 +1.954006E-03 +9.389954E-01 4.408852E-01 0.000000E+00 0.000000E+00 @@ -3731,8 +3731,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.028972E-02 -4.229428E-03 +9.028974E-02 +4.229429E-03 8.019636E-01 2.406005E-01 0.000000E+00 @@ -3813,8 +3813,8 @@ tally 1: 0.000000E+00 4.562052E-01 1.041492E-01 -6.039508E-02 -3.647565E-03 +6.039507E-02 +3.647564E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3845,8 +3845,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.680079E-01 -7.239471E-02 +3.680080E-01 +7.239472E-02 9.309308E-01 5.812760E-01 7.945599E-03 @@ -3855,12 +3855,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.567972E-02 -7.341014E-03 +8.567983E-02 +7.341033E-03 1.754088E+00 -8.632559E-01 -7.548732E-04 -5.698335E-07 +8.632560E-01 +7.547884E-04 +5.697055E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -3882,7 +3882,7 @@ tally 1: 1.211417E-01 1.467532E-02 1.144903E+00 -4.944035E-01 +4.944036E-01 7.558522E-01 3.387696E-01 0.000000E+00 @@ -3917,8 +3917,8 @@ tally 1: 0.000000E+00 1.257462E-01 1.456033E-02 -1.755760E-03 -3.082694E-06 +1.755790E-03 +3.082798E-06 0.000000E+00 0.000000E+00 1.027660E-02 @@ -3955,8 +3955,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.011081E-02 -9.066609E-04 +3.011069E-02 +9.066538E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4037,7 +4037,7 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.118695E-02 +5.118696E-02 2.620104E-03 0.000000E+00 0.000000E+00 @@ -4171,16 +4171,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.099507E-01 -6.290297E-02 -3.631685E-01 -1.318914E-01 +4.099509E-01 +6.290302E-02 +3.631683E-01 +1.318912E-01 0.000000E+00 0.000000E+00 1.023202E+00 7.786623E-01 -7.978888E-01 -2.156290E-01 +7.978887E-01 +2.156289E-01 2.410067E-01 5.808423E-02 0.000000E+00 @@ -4200,7 +4200,7 @@ tally 1: 0.000000E+00 0.000000E+00 8.728851E-03 -7.619283E-05 +7.619284E-05 1.582575E-01 2.504545E-02 0.000000E+00 @@ -4213,7 +4213,7 @@ tally 1: 0.000000E+00 1.698392E-01 1.770322E-02 -7.630963E-02 +7.630962E-02 2.320465E-03 0.000000E+00 0.000000E+00 @@ -4379,10 +4379,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.524617E-01 -6.373692E-02 -3.615407E-03 -1.307117E-05 +2.524618E-01 +6.373694E-02 +3.615369E-03 +1.307089E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4390,7 +4390,7 @@ tally 1: 0.000000E+00 0.000000E+00 9.262861E-03 -8.580059E-05 +8.580060E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4435,10 +4435,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.701983E-01 -2.896747E-02 -8.039213E-02 -6.462895E-03 +1.701984E-01 +2.896749E-02 +8.039207E-02 +6.462885E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4467,8 +4467,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.715403E-02 -4.509664E-03 +6.715405E-02 +4.509666E-03 4.465012E-01 1.993633E-01 0.000000E+00 @@ -4494,17 +4494,17 @@ tally 1: 0.000000E+00 0.000000E+00 2.157774E-03 -4.655987E-06 -6.310711E-02 -2.175397E-03 -8.322469E-02 +4.655990E-06 +6.310707E-02 +2.175394E-03 +8.322470E-02 3.984732E-03 -8.945208E-02 -4.272340E-03 -7.510697E-01 +8.945207E-02 +4.272339E-03 +7.510694E-01 2.592974E-01 -1.811101E-01 -3.280086E-02 +1.811100E-01 +3.280084E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4515,10 +4515,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.927050E-03 -8.567625E-06 -2.682269E-01 -7.194567E-02 +2.927144E-03 +8.568173E-06 +2.682268E-01 +7.194562E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4531,14 +4531,14 @@ tally 1: 0.000000E+00 3.678545E-02 1.353169E-03 -3.580129E-01 -9.576000E-02 -4.871555E-01 -9.900006E-02 +3.580128E-01 +9.575996E-02 +4.871561E-01 +9.900028E-02 1.399012E+00 -6.326647E-01 -4.954947E-01 -1.916585E-01 +6.326649E-01 +4.954942E-01 +1.916582E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4570,7 +4570,7 @@ tally 1: 0.000000E+00 0.000000E+00 4.262772E-01 -9.802531E-02 +9.802530E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4581,10 +4581,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.699970E-01 -4.178443E-02 -1.590778E-03 -2.530575E-06 +2.699969E-01 +4.178442E-02 +1.590867E-03 +2.530859E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4713,10 +4713,10 @@ tally 1: 1.613622E-03 0.000000E+00 0.000000E+00 -3.890880E-02 -1.513895E-03 -1.234219E+00 -4.999183E-01 +3.890902E-02 +1.513911E-03 +1.234218E+00 +4.999181E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4745,22 +4745,22 @@ tally 1: 4.742470E-02 3.209188E-02 1.029889E-03 -1.385335E-02 -1.919154E-04 -2.009712E-01 -3.766426E-02 -5.245829E-01 -7.576339E-02 +1.385333E-02 +1.919148E-04 +2.009713E-01 +3.766430E-02 +5.245828E-01 +7.576335E-02 0.000000E+00 0.000000E+00 4.241176E-01 9.055699E-02 3.230798E-01 -3.896400E-02 +3.896399E-02 2.621971E-01 -4.860490E-02 -4.089900E-03 -9.541983E-06 +4.860489E-02 +4.089938E-03 +9.542099E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4778,8 +4778,8 @@ tally 1: 1.046129E-01 1.094386E-02 1.524559E+00 -7.117854E-01 -7.244019E-01 +7.117855E-01 +7.244018E-01 2.009724E-01 1.834594E-02 3.365736E-04 @@ -4957,10 +4957,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.453315E-02 -2.112125E-04 -2.118498E-02 -4.488034E-04 +1.453317E-02 +2.112130E-04 +2.118496E-02 +4.488027E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -4992,11 +4992,11 @@ tally 1: 0.000000E+00 0.000000E+00 5.015914E-02 -2.515939E-03 -5.972803E-01 +2.515940E-03 +5.972802E-01 2.058844E-01 -1.137974E-02 -1.294985E-04 +1.137979E-02 +1.294997E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5020,17 +5020,17 @@ tally 1: 0.000000E+00 0.000000E+00 1.075776E-01 -1.157293E-02 -1.876736E-02 -3.142669E-04 +1.157294E-02 +1.876735E-02 +3.142665E-04 0.000000E+00 0.000000E+00 -8.266087E-02 -6.832819E-03 -8.619422E-02 -6.961732E-03 -1.219440E-01 -1.487034E-02 +8.266086E-02 +6.832818E-03 +8.619416E-02 +6.961721E-03 +1.219441E-01 +1.487035E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5076,9 +5076,9 @@ tally 1: 0.000000E+00 0.000000E+00 1.034037E-01 -3.976882E-03 -4.274866E-02 -1.827448E-03 +3.976885E-03 +4.274862E-02 +1.827445E-03 1.074496E-01 1.154542E-02 0.000000E+00 @@ -5089,12 +5089,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.693308E-02 -6.692039E-04 +2.693310E-02 +6.692041E-04 3.591875E-02 1.290157E-03 -8.685374E-02 -7.543573E-03 +8.685372E-02 +7.543569E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5105,11 +5105,11 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.358167E-02 -5.560954E-04 +2.358169E-02 +5.560962E-04 4.196949E-01 -8.821559E-02 -9.766237E-01 +8.821556E-02 +9.766238E-01 3.187064E-01 2.263564E+00 1.440716E+00 @@ -5127,8 +5127,8 @@ tally 1: 0.000000E+00 1.770925E-01 1.577698E-02 -3.206601E-02 -8.744270E-04 +3.206602E-02 +8.744271E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5142,7 +5142,7 @@ tally 1: 1.668276E-01 2.783144E-02 9.642655E-02 -9.273190E-03 +9.273189E-03 5.348043E-02 2.860156E-03 4.290530E-02 @@ -5159,9 +5159,9 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.084059E-01 -1.536167E-01 -5.000907E-01 +7.084057E-01 +1.536166E-01 +5.000909E-01 1.141659E-01 0.000000E+00 0.000000E+00 @@ -5193,20 +5193,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.751278E-02 -3.307719E-03 -4.702080E-02 -2.210956E-03 +5.751275E-02 +3.307717E-03 +4.702083E-02 +2.210958E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.784082E-02 -1.431928E-03 -2.013938E-02 -4.055947E-04 +3.784067E-02 +1.431916E-03 +2.013954E-02 +4.056009E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5230,7 +5230,7 @@ tally 1: 0.000000E+00 0.000000E+00 2.397100E-02 -5.746087E-04 +5.746090E-04 1.667122E-01 1.609363E-02 0.000000E+00 @@ -5274,7 +5274,7 @@ tally 1: 0.000000E+00 0.000000E+00 7.532992E-02 -5.674597E-03 +5.674596E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5321,13 +5321,13 @@ tally 1: 0.000000E+00 2.715682E-01 6.930003E-02 -1.711787E+00 +1.711788E+00 1.416936E+00 -4.750553E-01 -9.493584E-02 -4.064748E-01 -9.731062E-02 -5.521307E-01 +4.750552E-01 +9.493583E-02 +4.064749E-01 +9.731066E-02 +5.521306E-01 1.121121E-01 0.000000E+00 0.000000E+00 @@ -5363,10 +5363,10 @@ tally 1: 2.558641E-01 1.298371E-01 1.330104E-02 -5.996349E-01 -1.076801E-01 -1.715162E-01 -1.827797E-02 +5.996351E-01 +1.076802E-01 +1.715160E-01 +1.827795E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5381,16 +5381,16 @@ tally 1: 0.000000E+00 1.032011E-01 1.065047E-02 -2.415666E-01 -2.918472E-02 -4.165840E-02 +2.415665E-01 +2.918471E-02 +4.165841E-02 1.735423E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.628620E-01 -9.960984E-02 +4.628619E-01 +9.960982E-02 3.325684E-01 5.701948E-02 0.000000E+00 @@ -5424,7 +5424,7 @@ tally 1: 0.000000E+00 0.000000E+00 1.420269E-01 -2.017164E-02 +2.017163E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5501,10 +5501,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.878870E-01 -8.287890E-02 -3.355938E-02 -1.126232E-03 +2.878871E-01 +8.287897E-02 +3.355929E-02 +1.126226E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5535,8 +5535,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.222164E-02 -4.938014E-04 +2.222160E-02 +4.937996E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5597,10 +5597,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.408839E-01 -9.930466E-03 +1.408841E-01 +9.930494E-03 1.266345E+00 -7.682957E-01 +7.682954E-01 0.000000E+00 0.000000E+00 1.019759E-02 @@ -5631,10 +5631,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.157485E-01 -2.724497E-02 -7.546768E-01 -2.070655E-01 +2.157489E-01 +2.724501E-02 +7.546765E-01 +2.070654E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5683,12 +5683,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.892564E-01 -3.581800E-02 -6.573175E-01 +1.892565E-01 +3.581801E-02 +6.573174E-01 3.473163E-01 1.641852E+00 -9.021845E-01 +9.021844E-01 2.844653E+00 1.857026E+00 3.432563E-02 @@ -5781,10 +5781,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.718543E-03 -3.270174E-05 -1.244175E-01 -1.547972E-02 +5.718522E-03 +3.270150E-05 +1.244176E-01 +1.547973E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5809,7 +5809,7 @@ tally 1: 0.000000E+00 1.165202E-01 6.930471E-03 -2.882402E-01 +2.882401E-01 4.938325E-02 1.786607E-02 3.191964E-04 @@ -5835,13 +5835,13 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.215623E-02 -4.908984E-04 +2.215622E-02 +4.908983E-04 7.663116E-02 -5.274653E-03 +5.274654E-03 2.330690E-01 5.432115E-02 -4.899884E-02 +4.899885E-02 2.400887E-03 2.509994E-01 3.312022E-02 @@ -5849,12 +5849,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.646169E-01 -2.722514E-02 +2.646162E-01 +2.722494E-02 2.779035E-01 -3.159895E-02 -2.470258E-01 -3.094096E-02 +3.159893E-02 +2.470259E-01 +3.094098E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5883,12 +5883,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.327759E-01 -1.698162E-02 +1.327761E-01 +1.698166E-02 0.000000E+00 0.000000E+00 8.606674E-02 -7.407484E-03 +7.407483E-03 1.553405E-01 1.453017E-02 0.000000E+00 @@ -5901,14 +5901,14 @@ tally 1: 0.000000E+00 1.685770E-02 2.841820E-04 -4.475530E-02 -2.003037E-03 +4.475531E-02 +2.003038E-03 7.510889E-01 3.262838E-01 1.518297E-01 1.402100E-02 1.948898E-01 -3.798205E-02 +3.798204E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5935,18 +5935,18 @@ tally 1: 0.000000E+00 1.375452E-01 1.835673E-02 -1.548402E-01 -2.397550E-02 -6.058355E-02 -1.850618E-03 -1.431855E-01 -2.050210E-02 -7.003130E-01 -2.735249E-01 -3.979720E-01 -1.307259E-01 -9.764192E-02 -9.533945E-03 +1.548403E-01 +2.397552E-02 +6.058351E-02 +1.850615E-03 +1.431856E-01 +2.050213E-02 +7.003137E-01 +2.735252E-01 +3.979721E-01 +1.307262E-01 +9.764118E-02 +9.533800E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5961,8 +5961,8 @@ tally 1: 3.559292E-02 8.969160E-01 4.355459E-01 -8.832719E-02 -7.801693E-03 +8.832720E-02 +7.801694E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -5995,7 +5995,7 @@ tally 1: 0.000000E+00 1.149703E+00 3.989107E-01 -8.049860E-01 +8.049861E-01 1.599684E-01 0.000000E+00 0.000000E+00 @@ -6177,10 +6177,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.355862E-01 -1.838362E-02 -4.229078E-03 -1.788510E-05 +1.355863E-01 +1.838365E-02 +4.228981E-03 +1.788428E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6195,10 +6195,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.929650E-02 -9.859794E-03 +9.929647E-02 +9.859789E-03 2.615062E-01 -3.533944E-02 +3.533945E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6212,7 +6212,7 @@ tally 1: 0.000000E+00 0.000000E+00 1.481609E-01 -2.195166E-02 +2.195167E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6229,10 +6229,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.071176E-01 -5.415798E-02 +3.071175E-01 +5.415795E-02 1.115403E+00 -3.834870E-01 +3.834871E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6300,7 +6300,7 @@ tally 1: 0.000000E+00 0.000000E+00 1.164369E-01 -1.355755E-02 +1.355756E-02 2.357411E-01 2.637254E-02 0.000000E+00 @@ -6361,8 +6361,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.200446E-02 -3.844553E-03 +6.200444E-02 +3.844551E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6427,8 +6427,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.297200E-01 -5.369804E-02 +3.297202E-01 +5.369813E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6448,9 +6448,9 @@ tally 1: 0.000000E+00 0.000000E+00 9.183632E-01 -2.857439E-01 -4.069857E-03 -1.656373E-05 +2.857440E-01 +4.069831E-03 +1.656352E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6499,11 +6499,11 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.853336E-01 -3.434853E-02 +1.853335E-01 +3.434852E-02 4.612134E-01 1.063957E-01 -1.223026E-01 +1.223027E-01 1.495794E-02 0.000000E+00 0.000000E+00 @@ -6519,10 +6519,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.750173E-01 -1.153950E-01 -2.136998E-01 -4.566760E-02 +3.750187E-01 +1.153951E-01 +2.136983E-01 +4.566698E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6540,7 +6540,7 @@ tally 1: 1.358408E-01 1.019608E-02 8.209316E-02 -3.505892E-03 +3.505893E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6571,10 +6571,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.078001E-01 +8.078002E-01 1.757558E-01 -5.722245E-01 -9.204133E-02 +5.722246E-01 +9.204135E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6607,8 +6607,8 @@ tally 1: 0.000000E+00 1.354717E-01 9.718740E-03 -5.221741E-02 -2.726658E-03 +5.221740E-02 +2.726657E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6807,9 +6807,9 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.663835E-02 -8.107319E-04 -1.574352E-01 +3.663834E-02 +8.107316E-04 +1.574353E-01 2.355445E-02 0.000000E+00 0.000000E+00 @@ -6848,7 +6848,7 @@ tally 1: 3.788668E-02 1.435401E-03 2.270802E-02 -5.156542E-04 +5.156541E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -6879,8 +6879,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -8.896789E-03 -7.915286E-05 +8.896790E-03 +7.915287E-05 4.847729E-02 2.350047E-03 2.905640E-01 @@ -7117,7 +7117,7 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.679763E-01 +3.679762E-01 1.354065E-01 0.000000E+00 0.000000E+00 @@ -7154,7 +7154,7 @@ tally 1: 3.727350E-02 1.389314E-03 1.316492E-02 -1.733151E-04 +1.733152E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7947,8 +7947,8 @@ tally 1: 0.000000E+00 1.589438E-01 2.060098E-02 -8.883974E-03 -7.892500E-05 +8.883980E-03 +7.892509E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -7975,8 +7975,8 @@ tally 1: 0.000000E+00 1.085624E-02 1.178580E-04 -1.326034E-02 -1.758367E-04 +1.326035E-02 +1.758368E-04 0.000000E+00 0.000000E+00 2.901092E-02 @@ -8555,12 +8555,12 @@ tally 1: 0.000000E+00 1.155931E-01 1.336177E-02 -2.362143E-01 -5.579719E-02 -6.926634E-01 -2.428255E-01 -5.993455E-03 -3.592151E-05 +2.362142E-01 +5.579715E-02 +6.926635E-01 +2.428256E-01 +5.993460E-03 +3.592156E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -8589,8 +8589,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.171592E-02 -5.143173E-03 +7.171591E-02 +5.143172E-03 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/tests/test_iso_in_lab/results_true.dat b/tests/test_iso_in_lab/results_true.dat index a860453c6a..354ccb0f8c 100644 --- a/tests/test_iso_in_lab/results_true.dat +++ b/tests/test_iso_in_lab/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.638451E-01 1.237712E-02 +9.638450E-01 1.237705E-02 diff --git a/tests/test_lattice_multiple/results_true.dat b/tests/test_lattice_multiple/results_true.dat index 318bd92356..5c00c4486a 100644 --- a/tests/test_lattice_multiple/results_true.dat +++ b/tests/test_lattice_multiple/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.581523E-01 4.261823E-02 +9.581522E-01 4.261830E-02 diff --git a/tests/test_mgxs_library_hdf5/results_true.dat b/tests/test_mgxs_library_hdf5/results_true.dat index 629bf60156..e19b9ffa52 100644 --- a/tests/test_mgxs_library_hdf5/results_true.dat +++ b/tests/test_mgxs_library_hdf5/results_true.dat @@ -2,8 +2,8 @@ domain=1 type=transport [ 0.37274472 0.86160691] [ 0.02426918 0.03234902] domain=1 type=nu-fission -[ 0.021789 0.71407573] -[ 0.00118188 0.04055226] +[ 0.02178897 0.71407658] +[ 0.00118187 0.04055185] domain=1 type=nu-scatter matrix [[ 0.3373971 0.00155945] [ 0. 0.42205129]] @@ -11,7 +11,7 @@ domain=1 type=nu-scatter matrix [ 0. 0.02161702]] domain=1 type=chi [ 1. 0.] -[ 0.05533321 0. ] +[ 0.05533329 0. ] domain=2 type=transport [ 0.23725441 0.28593027] [ 0.00818357 0.04879593] diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index b6cef05dc7..442b8ac7be 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -2,7 +2,7 @@ 1 1 1 total 0.372745 0.024269 0 1 2 total 0.861607 0.032349 material group in nuclide mean std. dev. 1 1 1 total 0.021789 0.001182 -0 1 2 total 0.714076 0.040552 material group in group out nuclide mean std. dev. +0 1 2 total 0.714077 0.040552 material group in group out nuclide mean std. dev. 3 1 1 1 total 0.337397 0.023039 2 1 1 2 total 0.001559 0.000510 1 1 2 1 total 0.000000 0.000000 diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index 943df1d80c..1455219645 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -67,23 +67,23 @@ 31 1 2 Eu-153 0.000000 0.000000 32 1 2 Gd-155 0.000000 0.000000 33 1 2 O-16 0.196946 0.014729 material group in nuclide mean std. dev. -34 1 1 U-234 7.274436e-06 4.419480e-07 -35 1 1 U-235 9.587789e-03 5.936867e-04 -36 1 1 U-236 7.566085e-05 7.523984e-06 -37 1 1 U-238 7.178361e-03 6.505657e-04 -38 1 1 Np-237 1.315681e-05 8.036505e-07 -39 1 1 Pu-238 7.746149e-06 3.992846e-07 -40 1 1 Pu-239 3.805332e-03 3.637556e-04 -41 1 1 Pu-240 6.941315e-05 4.729734e-06 -42 1 1 Pu-241 1.033846e-03 9.084007e-05 -43 1 1 Pu-242 5.995329e-06 3.821724e-07 -44 1 1 Am-241 1.148582e-06 8.271558e-08 -45 1 1 Am-242m 1.101985e-06 6.376129e-08 -46 1 1 Am-243 8.323823e-07 5.841794e-08 -47 1 1 Cm-242 5.088975e-07 5.258061e-08 -48 1 1 Cm-243 2.245435e-07 1.459031e-08 -49 1 1 Cm-244 2.993205e-07 2.746134e-08 -50 1 1 Cm-245 3.063614e-07 3.057777e-08 +34 1 1 U-234 7.274440e-06 4.419477e-07 +35 1 1 U-235 9.587803e-03 5.936922e-04 +36 1 1 U-236 7.566099e-05 7.523935e-06 +37 1 1 U-238 7.178367e-03 6.505680e-04 +38 1 1 Np-237 1.315682e-05 8.036501e-07 +39 1 1 Pu-238 7.746151e-06 3.992835e-07 +40 1 1 Pu-239 3.805294e-03 3.637600e-04 +41 1 1 Pu-240 6.941319e-05 4.729737e-06 +42 1 1 Pu-241 1.033844e-03 9.083913e-05 +43 1 1 Pu-242 5.995332e-06 3.821721e-07 +44 1 1 Am-241 1.148585e-06 8.271648e-08 +45 1 1 Am-242m 1.100215e-06 6.159956e-08 +46 1 1 Am-243 8.323826e-07 5.841792e-08 +47 1 1 Cm-242 5.088970e-07 5.258007e-08 +48 1 1 Cm-243 2.245435e-07 1.459025e-08 +49 1 1 Cm-244 2.993206e-07 2.746129e-08 +50 1 1 Cm-245 3.063611e-07 3.057751e-08 51 1 1 Mo-95 0.000000e+00 0.000000e+00 52 1 1 Tc-99 0.000000e+00 0.000000e+00 53 1 1 Ru-101 0.000000e+00 0.000000e+00 @@ -101,23 +101,23 @@ 65 1 1 Eu-153 0.000000e+00 0.000000e+00 66 1 1 Gd-155 0.000000e+00 0.000000e+00 67 1 1 O-16 0.000000e+00 0.000000e+00 -0 1 2 U-234 4.408571e-07 2.828333e-08 -1 1 2 U-235 3.768090e-01 2.445691e-02 -2 1 2 U-236 6.097532e-06 3.733076e-07 -3 1 2 U-238 5.353069e-07 3.310577e-08 -4 1 2 Np-237 2.702979e-07 2.098942e-08 -5 1 2 Pu-238 3.463104e-05 2.638405e-06 -6 1 2 Pu-239 2.889640e-01 1.376023e-02 -7 1 2 Pu-240 4.533642e-06 2.544334e-07 -8 1 2 Pu-241 4.809358e-02 2.778366e-03 -9 1 2 Pu-242 8.715316e-08 5.460943e-09 -10 1 2 Am-241 4.611731e-06 2.155065e-07 -11 1 2 Am-242m 1.428045e-04 8.436508e-06 -12 1 2 Am-243 7.883889e-08 4.734559e-09 -13 1 2 Cm-242 9.731014e-07 6.143805e-08 -14 1 2 Cm-243 1.825829e-06 1.074864e-07 -15 1 2 Cm-244 1.581821e-07 9.938154e-09 -16 1 2 Cm-245 1.213384e-05 8.812070e-07 +0 1 2 U-234 4.408576e-07 2.828309e-08 +1 1 2 U-235 3.768094e-01 2.445671e-02 +2 1 2 U-236 6.097538e-06 3.733038e-07 +3 1 2 U-238 5.353074e-07 3.310544e-08 +4 1 2 Np-237 2.702971e-07 2.098939e-08 +5 1 2 Pu-238 3.463109e-05 2.638394e-06 +6 1 2 Pu-239 2.889643e-01 1.376004e-02 +7 1 2 Pu-240 4.533642e-06 2.544289e-07 +8 1 2 Pu-241 4.809366e-02 2.778345e-03 +9 1 2 Pu-242 8.715325e-08 5.460893e-09 +10 1 2 Am-241 4.611736e-06 2.155039e-07 +11 1 2 Am-242m 1.428047e-04 8.436437e-06 +12 1 2 Am-243 7.883895e-08 4.734503e-09 +13 1 2 Cm-242 9.731025e-07 6.143750e-08 +14 1 2 Cm-243 1.825830e-06 1.074849e-07 +15 1 2 Cm-244 1.581823e-07 9.938064e-09 +16 1 2 Cm-245 1.213386e-05 8.812019e-07 17 1 2 Mo-95 0.000000e+00 0.000000e+00 18 1 2 Tc-99 0.000000e+00 0.000000e+00 19 1 2 Ru-101 0.000000e+00 0.000000e+00 diff --git a/tests/test_score_current/results_true.dat b/tests/test_score_current/results_true.dat index 461681c764..d3ac03a709 100644 --- a/tests/test_score_current/results_true.dat +++ b/tests/test_score_current/results_true.dat @@ -1 +1 @@ -e1bf6c8d9e29f4b6ec8a0eadb3802248eea1cc42fe17b2257ee28eabcdc63958073e226e04a2e751f92f12ef7cb8de330991de395707d9fab2a826ca6946181d \ No newline at end of file +a9310752363eb059ff40f16ac9716b41ccab6ec6607d29f498069318745e485d18d784264304cc2586865bd58cef7587203cc22a1d485c58ddd63c14c0defdb9 \ No newline at end of file diff --git a/tests/test_tallies/results_true.dat b/tests/test_tallies/results_true.dat index 4fab6c5617..fd5eb91a1a 100644 --- a/tests/test_tallies/results_true.dat +++ b/tests/test_tallies/results_true.dat @@ -1 +1 @@ -f1b2b43197e1bbb305000d5a84c228361afb876d23ed866cdb073fe7410335c87fb16066c031d0e4397225321632566c00f48eac6187d59bdeab9a8c60986c3c \ No newline at end of file +9f14aaa1694489032b3ce193ad29ecf6ac8976c88c2dd6b26d4c30ae88348e249a9b702b1d39c22204350b8f3bd689800c1b6a6003f19c7bdaf64084a209a2cc \ No newline at end of file diff --git a/tests/test_tally_aggregation/results_true.dat b/tests/test_tally_aggregation/results_true.dat index f5efc19347..6c2d7a5193 100644 --- a/tests/test_tally_aggregation/results_true.dat +++ b/tests/test_tally_aggregation/results_true.dat @@ -1 +1 @@ -0c46f4198850c6bedcd3294fbbed9a6814568344f39d389f0b05aa0198bf4bb8a8bac4c6aa698bf66879c3037d1352f2cf6d8dff479d5b64be41fd88d93d3a04 \ No newline at end of file +840d2648f9ba782926c71baa84e5a2ad31331e156740a3d1e9d86af8f1f0d301ef8c0f69474975d365dbcf8d229a68c62d3e60286d18045e5254373f4e1010bf \ No newline at end of file diff --git a/tests/test_tally_assumesep/results_true.dat b/tests/test_tally_assumesep/results_true.dat index e8ff199a05..7262a88a02 100644 --- a/tests/test_tally_assumesep/results_true.dat +++ b/tests/test_tally_assumesep/results_true.dat @@ -1,5 +1,5 @@ k-combined: -9.581523E-01 4.261823E-02 +9.581522E-01 4.261830E-02 tally 1: 1.529084E+01 4.769011E+01 From c53178365e44eb1106c7eb0456aab8ac864ceea1 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 11 Apr 2016 08:19:48 -0500 Subject: [PATCH 436/650] Don't mutate OrderedDict while iterating over it in run_tests.py --- tests/run_tests.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/run_tests.py b/tests/run_tests.py index ed6ff0c203..5a04f340a8 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -300,9 +300,12 @@ if options.list_build_configs: # Delete items of dictionary that don't match regular expression if options.build_config is not None: + to_delete = [] for key in tests: if not re.search(options.build_config, key): - del tests[key] + to_delete.append(key) + for key in to_delete: + del tests[key] # Check for dashboard and determine whether to push results to server # Note that there are only 3 basic dashboards: From bda106ca8583cb9690f96fd896883061943222bd Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Wed, 13 Apr 2016 12:04:29 -0400 Subject: [PATCH 437/650] Moved %matplotlib inline ahead of matplotlib imports for ipython notebooks which do not use openmoc --- .../pythonapi/examples/mgxs-part-i.ipynb | 71 ++-- .../pythonapi/examples/mgxs-part-ii.ipynb | 36 +- .../pythonapi/examples/mgxs-part-iii.ipynb | 309 +++++++++--------- .../examples/pandas-dataframes.ipynb | 63 ++-- .../pythonapi/examples/post-processing.ipynb | 61 ++-- .../pythonapi/examples/tally-arithmetic.ipynb | 49 +-- 6 files changed, 302 insertions(+), 287 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index f1db27133e..de66cbb837 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -141,13 +141,12 @@ }, "outputs": [], "source": [ + "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "import openmc\n", - "import openmc.mgxs as mgxs\n", - "\n", - "%matplotlib inline" + "import openmc.mgxs as mgxs" ] }, { @@ -423,22 +422,24 @@ "data": { "text/plain": [ "OrderedDict([('flux', Tally\n", - " \tID =\t10000\n", - " \tName =\t\n", - " \tFilters =\t\n", - " \t\tcell\t[1]\n", - " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", - " \tNuclides =\ttotal \n", - " \tScores =\t['flux']\n", - " \tEstimator =\ttracklength), ('absorption', Tally\n", - " \tID =\t10001\n", - " \tName =\t\n", - " \tFilters =\t\n", - " \t\tcell\t[1]\n", - " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", - " \tNuclides =\ttotal \n", - " \tScores =\t['absorption']\n", - " \tEstimator =\ttracklength)])" + "\tID =\t10000\n", + "\tName =\t\n", + "\tFilters =\t\n", + " \t\tcell\t[1]\n", + " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", + "\tNuclides =\ttotal \n", + "\tScores =\t['flux']\n", + "\tEstimator =\ttracklength\n", + "), ('absorption', Tally\n", + "\tID =\t10001\n", + "\tName =\t\n", + "\tFilters =\t\n", + " \t\tcell\t[1]\n", + " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", + "\tNuclides =\ttotal \n", + "\tScores =\t['absorption']\n", + "\tEstimator =\ttracklength\n", + ")])" ] }, "execution_count": 13, @@ -518,8 +519,8 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 9a6ecd72597338b40d2b72378e5ad6dd65df2364\n", - " Date/Time: 2016-04-08 11:43:10\n", + " Git SHA1: eeb5091ca3a34cc85df73a3318cae2b6c7097413\n", + " Date/Time: 2016-04-13 11:24:09\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -605,20 +606,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.2800E-01 seconds\n", - " Reading cross sections = 1.3400E-01 seconds\n", - " Total time in simulation = 2.4026E+01 seconds\n", - " Time in transport only = 2.4011E+01 seconds\n", - " Time in inactive batches = 2.9230E+00 seconds\n", - " Time in active batches = 2.1103E+01 seconds\n", - " Time synchronizing fission bank = 3.0000E-03 seconds\n", - " Sampling source sites = 2.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Total time for initialization = 4.6300E-01 seconds\n", + " Reading cross sections = 1.2100E-01 seconds\n", + " Total time in simulation = 1.6504E+01 seconds\n", + " Time in transport only = 1.6479E+01 seconds\n", + " Time in inactive batches = 1.9620E+00 seconds\n", + " Time in active batches = 1.4542E+01 seconds\n", + " Time synchronizing fission bank = 1.0000E-02 seconds\n", + " Sampling source sites = 4.0000E-03 seconds\n", + " SEND/RECV source sites = 3.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 1.0000E-03 seconds\n", - " Total time elapsed = 2.4570E+01 seconds\n", - " Calculation Rate (inactive) = 8552.86 neutrons/second\n", - " Calculation Rate (active) = 4738.66 neutrons/second\n", + " Total time for finalization = 0.0000E+00 seconds\n", + " Total time elapsed = 1.6977E+01 seconds\n", + " Calculation Rate (inactive) = 12742.1 neutrons/second\n", + " Calculation Rate (active) = 6876.63 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1200,7 +1201,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.11" + "version": "2.7.6" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index 6483a5c29d..6ed5cd38d8 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -453,7 +453,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", " Git SHA1: eeb5091ca3a34cc85df73a3318cae2b6c7097413\n", - " Date/Time: 2016-04-08 13:04:46\n", + " Date/Time: 2016-04-13 11:59:39\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -569,20 +569,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 1.2890E+00 seconds\n", - " Reading cross sections = 3.0900E-01 seconds\n", - " Total time in simulation = 6.3434E+02 seconds\n", - " Time in transport only = 6.3421E+02 seconds\n", - " Time in inactive batches = 3.6864E+01 seconds\n", - " Time in active batches = 5.9748E+02 seconds\n", - " Time synchronizing fission bank = 5.5000E-02 seconds\n", - " Sampling source sites = 3.4000E-02 seconds\n", - " SEND/RECV source sites = 1.5000E-02 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", - " Total time for finalization = 3.5000E-02 seconds\n", - " Total time elapsed = 6.3582E+02 seconds\n", - " Calculation Rate (inactive) = 2712.67 neutrons/second\n", - " Calculation Rate (active) = 669.482 neutrons/second\n", + " Total time for initialization = 4.0100E-01 seconds\n", + " Reading cross sections = 8.8000E-02 seconds\n", + " Total time in simulation = 2.3897E+02 seconds\n", + " Time in transport only = 2.3892E+02 seconds\n", + " Time in inactive batches = 1.6456E+01 seconds\n", + " Time in active batches = 2.2251E+02 seconds\n", + " Time synchronizing fission bank = 1.8000E-02 seconds\n", + " Sampling source sites = 1.3000E-02 seconds\n", + " SEND/RECV source sites = 4.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", + " Total time for finalization = 1.2000E-02 seconds\n", + " Total time elapsed = 2.3943E+02 seconds\n", + " Calculation Rate (inactive) = 6076.81 neutrons/second\n", + " Calculation Rate (active) = 1797.66 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -648,7 +648,7 @@ "cell_type": "code", "execution_count": 16, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ @@ -1811,7 +1811,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1894,7 +1894,7 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAADUCAYAAACWNDiHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGXJJREFUeJzt3Xm0HFW59/HvAUEmgTDPQgAfkNcLIoogMYREBkUQ1Jfx\nhsj0iiBXERmuKOEiAgoBFZTBdUH0vQyiUbyARqKEIKAMIiL4Y7ohhkQkRAhh0iTn/rF3Q6c9Q59Q\n1UOd32etrNVdXbXr6ZOnntq1q7qqp7e3FzMzq55l2h2AmZmVwwXezKyiXODNzCrKBd7MrKJc4M3M\nKsoF3sysot7U7gDKFBG9wMaSZtVNmwAcKmlcP8tsCVwLzOtvnjzf8cBRwHLA8sB04DhJLyxlrHsA\nD0uaGRHrAjtKumGIbRwHrCvpi0sTQx/tzQDmStqhYfppwJnAZpJmDNLGUZIu7+ezqcDnJd1XRLxV\nFhE9wPHAkaScWwb4FXCapGcGWObzwFnAGEm31322C3AJsCLwJGmbmN1HGwcBJwIr5/X+AfhUX/M2\n+T12BF6W9EBEvBk4QNJVQ2xjP+DDkg5fmhj6aO9WYCtgQ0mL6qYfCnyP9Le7dZA2Bsrzq4AfSPpp\nEfEOhXvwdSJiK2AycOcg8+0JHAPsKmkr4O2kDeBrb2D1nwU2ya/HAPsMZeGIWEbSRUUV9zrr5J1e\nvY8AfRaVhpjWA07q57MeSWNd3Jt2FnAIsFddzj0H3BoRK/azzKWknHq6fmJErApcBxwpaXPg58BB\njQtHxNuBC4GP5nW+DZgB/Ocb+B6fAP4lv34nMH4oC+c8n1xUca/zd2C3hmkHAn9uIqZl6Wfbz/GO\nb0dxh4r34JfCAmBXYG8gBpjvHcBjkp4FkPRKRBwOLAaIiLWAK4BtcpsnSpqSe+bfBTYF3gx8U9Kk\niDgTGAtsHRHfIvW63hQRq0g6MCL2Bb5M2ok8BhwsaW5ETAQ2ALYDrskb7kaSjsy9khuA/YHNSEcY\nB0nqzUcx55A2/AuAKyT19PNdbyZt/P+Rv9v/IRWWtWozRMQ+wFdIRzIvAEdIuh+4A9goIv5E2qgf\nAb5D2qh3zzEeCuwIjJa0T25vCvATSRcP8H8wbETEGsBngO1qR6OSFgInR8RY4F+By/pY9NuSfhcR\nezdM3xe4T9Jdua1z+1n1NsDTtaM0SYsi4lRghRzXiqSdyCjgFeAsSd+PiJVI+b8dKSd+KOnEiPgk\n6f9+n4jYMH+nVSNiuqRREfE+0g5lBDCXlOdP5Hz9MLAacH9EPEg+Co+IK0lHIDuTdkCPAPtKeikf\nFX+HtA1eQCrC2/Zz1FnL81/k7zYCGAk8UZshInYCLiJth4uB4yXdkpdZLef5Xvm7Twc+BhwZEWfl\nOF4GTgPeJWlxRFwGPC/p8/38/d8w9+DrSJolaW4Ts95CKlDfjYi9IuItkuZLWpA/Pwd4SNJI4DDg\n6nw4+kVgVu4NjQXOjoiNc6/7KeCQvLFdBFyfi/tI0mHiQbm9X5EOrWs+BHxQ0qQ+4vww8AFS4o8B\nds7F4lvAOFIPao9BvusPSD2ZmgPzNAAi4k2kndYnJb0N+AlwXv74cGCmpK0k/T1P21jS2xo2sguB\nDSNi97wzewvw7UHiGk7eS/o7PtLHZz8FRve1kKTf9dPetsDciJgcEY9ExDW5U9Lo18AmEXFDROwX\nEWtIelnS3/LnnwOWl7QZKc8uiogNgE+RivTWwPbAhIjYRdIlwG+Bk3KenwrcmYv7W/J3+XdJWwBf\nJx1l1OwOHCPpxD7i/DhwALA5sDawX+5Vfxc4WtLWwJbAKv38PQD+G9gzb6cAHyXlcr3LgQvy9nsO\nr2+HhwOLcp7/T562A7CNpF/XFpb0Q2Amqei/k3TEcPoAMb1hw6HA3xoRf6r9A85+ow3mDed9pL/f\nd4Fn88ZSG2L5IHB13bybSnqVNIZ6bJ7+BPAXUu96IHsCt0p6ML+/hNQDWja//80AO6Xr8wb5Iqln\nswmpt/yIpAclLWbwQvoY8GJEbJfffxT4Yd3fYiGwQd347nRSz6c/NzZOyOOeRwHnkzaco3JslqxB\n/0NiT+fPh2J1UsH8PKmX/ippJ7uEPM7+HmAO8A3gmYi4JSJqQywfBK7J884iHT3OJv0/7itpcd4Z\n/JGBcwLSUcAsSb/I7V0NbFG3TT0q6dF+lr1R0ryci38g5fnbgDdLujnP800GrncvkHZoe+X3B5LO\nxdXbnrxdM3ie39xPDh8LnEza7o6V9NIAbbxhw2GIZte+TrLm11eREhhgrKSnmm1U0j3Av+YTWduT\nTjpeC+xEGr54rm7e2onXHUi99k2ARcD6DL6TXR14f9451TwPrJlfzxtg2efrXi8CliX1rOqXaeY7\nXw0cnHvrM/PwUP3nn4qIw0jDTisAA93gqM94Jd0XEfNJPaEH+5pnGJtLGorry7rAXyPiPUDtZOVk\nSacO0N7zwFRJjwFExNeBn/U1Yz5q+H95vq2BU4CbI2Jj/jnPa0ewWwCT8jmtRcDGpGGLgawObN6Q\n56+SeuSwdHn+t7rpzZwUruX5ncD6ku5vyPMDgePz0cayQH/Dmv3GK2lWRNxF6iD+oomY3pDhUOD7\nJWlIJ3hq8ljhk3lIpxe4NyJO5vWTs3NJyT8jz78pqZB+nzQWeEkeC2+muM4GbpH0sT7iWJrw57Pk\noer6TSxzLXAradzxmoYYdib1SN4jaUZEfIB0KDskEfEhYCGwQkR8UNJNQ22jwu4E1oiIbSX9vuGz\nvUnncn5LuhKkGU+ShixqFuV/S8hHbS9LEoCkhyNdqTWfdNRQy/Pa/BuRCtvFwL3AR/K4/a8b2+7D\nbNJVZDs0fhAR72jye9VrzPP1mljmJlLsBwHXN8SwISmvd8yFf0vSUfGQRMS2pA7h/aQLNUo9zzQc\nhmjKcChwSUSsBq+NQx8ETMuf3wBMyJ+9HbiPtDNdB7g3F/fDSCdrakn4D1IvpvH1z4FReSyeiHhP\n7nEtrXuBf4mILSJiGdJldwPKRzazgf9Lusqo3jrAX4GZ+eTaYcDK+cjmH8Aq+e/Tr4hYmTTmehzw\naeDiPM0ASc+TrqL5XkRsBinnIuJsUk/ymoGW78OPgdF1hfNo0nmlRnsA3490NVTtsstDSeeX5pLy\nfHxE9OR5fkcq+OsAv8vF/QMsOf7dmOer5nZ/A6wf6TJKImJkRHwvf7Y0HgWWi4hd8/tPMvCRJZJe\nAaaQhq4ah2fWBl4E/pTz+egc5yr5eyyTe/b9ytvbZcAJpOHa0/KOozQu8HUi4pSIeIW0px4TEa9E\nuqKj0WeAPwF3R4RIe/J1SZeAQerRbhTpOvJrSVcDvEw6yTo5Ih4gJfylwOW5eF9PuhLmBFKS7RYR\nd0uaQxqfnhwRD5NOwDYmX9Nye/9OOln7G9JYYjOuBv4o6bmG6T8jFf/Hc9wXkg6ZfwA8QOrR/aVu\nLLUvZwD/LekPuSc6lXTVkGWSziMVh5/mYYyHSL3ocXUnsJcQEQtyPr8VmJrz+f2SZpJydXJEPEoa\n/jmhjya+Stqh/zLn+eOkiwM+nD+/gLRzf5J0hHdibvvLwPmRrnYZTfr/PSMf7U0Gzo2IScDted2z\nSZcpfgz4Zs7zyaRrx5fqfub5nNcxwJURcT9pG13MIEWelOfzJD3UMP33pB7+I6Qjqp8Cd+XvPSd/\nl5n5O/bnU8AcSTfnv9PFpO25ND2+H/zwE+ka9N78ehvgdkkj2hyWWWnyEeECYPV8RDQsuAc/zOTD\ny6dqh8Kky8sG/GGXWTeKiLsj4oD89gDSGP+wKe7gHvywFOmn3meTdvBzSD9Meqy9UZkVK9LtGC4m\n3Y5hPuk6+rvbG1VrucCbmVWUh2jMzCqqo66D77l30DPcTRv5rj8W1RRPTNumsLasvXpHD/jjlFLs\nys8Ky+tpPQNdjDRU1w0+i3WN3t6J/5Tb7sGbmVWUC7yZWUW5wJuZVZQLvJlZRZV+kjUiLiDdz7oX\n+Lfhdh2qVZPz2rpBqT34iBgNbClpJ+AI0j2lzbqa89q6RdlDNGNJd65D0sPAiEiPlTPrZs5r6wpl\nF/j1WPJJNM/Q3H2ZzTqZ89q6QqtPsrb8RyZmLeC8to5UdoGfzZI9mw1IN7cy62bOa+sKZRf4KaSb\n+BMR2wOz655PatatnNfWFUot8JLuID2v9A7SlQbHlrk+s1ZwXlu3KP06eEmnlL0Os1ZzXls38C9Z\nzcwqygXezKyiXODNzCrKBd7MrKI66olOLCiuqZV4qbC2dhr9y8LaunPaboW1Zd1hWs9dhbV1OnsV\n1tYZnF9YW8n8gtuzN8o9eDOzinKBNzOrKBd4M7OKcoE3M6soF3gzs4pygTczqygXeDOzinKBNzOr\nKBd4M7OKcoE3M6soF3gzs4pygTczqygXeDOzinKBNzOrKBd4M7OKcoE3M6soF3gzs4pygTczq6jO\nemRfgR6c9u7C2jpz9ImFtfXq6OULa+u+3+xSWFsALOzQtuw1Z3B6YW2dw+cKawvglEIfAejH/xXB\nPXgzs4pygTczqygXeDOzinKBNzOrKBd4M7OKKv0qmoj4KjAqr+tsST8qe51mZXNeWzcotQcfEWOA\nd0jaCdgTuLDM9Zm1gvPaukXZQzTTgY/n188BK0fEsiWv06xszmvrCqUO0UhaCCzIb48AbpK0qMx1\nmpXNeW3doiW/ZI2IfUkbwu6tWJ9ZKzivrdO14iTrHsAXgD0lPV/2+sxawXlt3aDUAh8RqwFfA8ZJ\nmlfmusxaxXlt3aLsHvwBwFrAdRFRmzZe0syS12tWJue1dYWyT7JeBlxW5jrMWs15bd3Cv2Q1M6so\nF3gzs4pygTczqygXeDOziurp7e0ddKZ8WdgaQE9tmqQnCg9mGoMH0+0KvGvJjyfvUVxjwH/wxcLa\nmrFos8LamjdrncLa6n3rcj3171uR2z09E6uf18B0ziisrVHcVVhbcHOBbXWu3t6JPY3TBr2KJiK+\nAXwCeIbXN4JeYGSh0Zm1mHPbqq6ZyyTHAGtLeqXsYMxazLltldbMGPyj3gCsopzbVmnN9OBnRcRt\nwO3AwtpESV8qLSqz1nBuW6U1U+CfBaaWHYhZGzi3rdIGLfCSijs1btZBnNtWdf0W+IiYDv1ftijp\n/aVEZFYy57YNFwP14E9rWRRmreXctmGh3wIvaVorAzFrFee2DRe+VYGZWUW5wJuZVVRTD/yIiBHA\nlqQTU5I0v9SozFrEuW1VNmgPPiI+CzxGuk3WN4HHI+KYsgMzK5tz26qumR78YcDI2pPjc4/nV8C3\nywzMrAWc21ZpzYzB/6W2AQBI+htQ+K2CzdrAuW2V1kwP/vGI+DEwhbRDGAM8GxGHA0j6zxLjMyuT\nc9sqrZkCvxLwN+Dd+f38vNwo0okpbwTWrZzbVmnN3IvmE60IxKzVnNtWdc080enP9HHfDkmblBKR\nWYs4t63qmhmi2aXu9fLAWNKhrS2NzxTX1Ed6diquMWDxs6MKa+usNT5XWFs/f2uRz579QP0b53aB\nRnFOYW317v7ewtrqeaTAR+LOmFhcWy3QzBDNkw2THo2InwOTygnJrDWc21Z1zQzR7NYwaWNg83LC\nMWsd57ZVXTNDNF+se91LutLgk+WEY9ZSzm2rtGaGaMa0IhCzVnNuW9U1M0SzFfAtYAdSL+cu4FhJ\njzWzgohYEXgQOFPSlUsfqlmxnNtWdc3cquAi4HxgfWBD4BKGdq+O04B5Qw/NrHTObau0ZsbgeyTd\nWPd+ckR8upnGcw9pa+DGweY1awPntlVaMz345SNi+9qbiHg3Td5HHjgPOGFpAjNrAee2VVozyXwi\n8F8RsU5+PwcYP9hCETEeuE3SjIh4AyGalca5bZXWTIH/s6StImI1oHcIT7z5EDAyIvYHNgJejYhZ\nkm5Z2mDNCubctkprpsD/f2BM/X2zmyHpgNrriJgIzPAGYB3GuW2V1kyBV0RcBdwB/P21ib5XtnU/\n57ZVWjMF/s3AImDHumlDule2pIlDC8usJZzbVmm+H7wNW85tq7oBC3xE7Cdpcn59LekHIS8DB0t6\ntgXxmZXCuW3DQb/XwUfE8cAZEVHbCWxCujnTPcAXWhCbWSmc2zZcDPRDpwnAOEkL8/tXJE0DJpKe\nWWnWrSbg3LZhYKACv0DSX+ve/xeApH8AL5YalVm5nNs2LAw0Br9K/RtJl9e9Xa2ccGxI7plYaHPL\nrLlqYW31Xl7cI/vefuRDhbWVH9nn3C7Fy4W11DPlssLa6j23p7C2ev6nwMf/AVwysdj2GgzUg38g\nIo5qnBgRJwO/Ki8ks9I5t21YGKgHfzLwk3zfjXvyvDsDc4F9WhCbWVmc2zYs9FvgJT0NvDcixgLb\nkH4Qcp2k6a0KzqwMzm0bLpr5odNUYGoLYjFrKee2VV0z94M3M7Mu5AJvZlZRLvBmZhXlAm9mVlEu\n8GZmFeUCb2ZWUS7wZmYV5QJvZlZRLvBmZhXlAm9mVlEu8GZmFeUCb2ZWUS7wZmYV5QJvZlZRg94u\n2DrYgmKbW+G5CYW11XPhCYW11bt1cY9c4+HimrIyPVVYSz0nX19YW70nFZiLQM+4gh8B2MA9eDOz\ninKBNzOrKBd4M7OKcoE3M6uo0k+yRsQhwEnAQuBLkm4se51mZXNeWzcotQcfEWsCpwO7AHsD+5a5\nPrNWcF5btyi7Bz8OuEXSC8ALwNElr8+sFZzX1hXKLvCbAitFxA3ACGCipKklr9OsbJvivLYuUPZJ\n1h5gTWB/YAJwRUQU+0sBs9ZzXltXKLvAPw3cIWmhpMdJh7Nrl7xOs7I5r60rlF3gpwC7RcQy+cTU\nKsDcktdpVjbntXWFUgu8pKeA64G7gJuBT0taXOY6zcrmvLZuUfp18JIuBS4tez1mreS8tm7gX7Ka\nmVWUC7yZWUW5wJuZVZQLvJlZRbnAm5lVVE9vb7mPjBqKnml0TjDD0QrFNTV1x50La+u2njsLa2ti\nb2/Lf3Ha0zPReV0ZXyi0tZtYvrC29uojt92DNzOrKBd4M7OKcoE3M6soF3gzs4pygTczqygXeDOz\ninKBNzOrKBd4M7OKcoE3M6soF3gzs4pygTczqygXeDOzinKBNzOrKBd4M7OKcoE3M6soF3gzs4py\ngTczqygXeDOziuqoR/aZmVlx3IM3M6soF3gzs4pygTczqygXeDOzinKBNzOrKBd4M7OKelO7AxiK\niLgAeC/QC/ybpLvbHBIAEfFVYBTp73m2pB+1OaTXRMSKwIPAmZKubHM4AETEIcBJwELgS5JubHNI\nbefcHppOzGvovNzumh58RIwGtpS0E3AE8I02hwRARIwB3pHj2hO4sM0hNToNmNfuIGoiYk3gdGAX\nYG9g3/ZG1H7O7aXSUXkNnZnbXVPggbHAjwEkPQyMiIhV2xsSANOBj+fXzwErR8SybYznNRGxFbA1\n0Ek95HHALZJekDRH0tHtDqgDOLeHoEPzGjowt7tpiGY94N6698/kafPbE04iaSGwIL89ArhJ0qI2\nhlTvPOA4YEKb46i3KbBSRNwAjAAmSpra3pDazrk9NJ2Y19CBud1NPfhGPe0OoF5E7EvaCI5rdywA\nETEeuE3SjHbH0qAHWBPYn7SBXhERHfV/2QE66u/RSbndwXkNHZjb3dSDn03q1dRsAMxpUyxLiIg9\ngC8Ae0p6vt3xZB8CRkbE/sBGwKsRMUvSLW2O62ngjtw7fDwiXgDWBv7a3rDayrndvE7Na+jA3O6m\nAj8FOAO4NCK2B2ZLeqHNMRERqwFfA8ZJ6piTPpIOqL2OiInAjA7ZCKYAV0bEuaTD2FWAue0Nqe2c\n203q4LyGDsztrinwku6IiHsj4g5gMXBsu2PKDgDWAq6LiNq08ZJmti+kziXpqYi4HrgrT/q0pMXt\njKndnNvV0Im57dsFm5lVVDefZDUzswG4wJuZVZQLvJlZRbnAm5lVlAu8mVlFucCbmVVU11wH320i\nYj3gXGBb4AXgLcAVkr7e4jjeBXyF9Is6SPc5OVXSfYMstzPwF0lPlByidRnndvdwD74E+f4TPwHu\nlLSdpFHAHsBREfHRfuYvI451chxflrS9pO1JG8QNEbHWIIt/AhhZRlzWvZzb3cU/dCpBRIwDzpD0\nvobpy0v6e359JfAqsBVwCLAhcD7wD9JDH46T9FBE3EpK4lsiYlPgdkkb5eVfAjYH1geulDSpYX1f\nAZaVdHLD9EnAS5JOi4heYDlJCyNiAumWpz8ErgCeBD4r6ZfF/GWs2zm3u4t78OXYBrincWJtA6iz\nsqTRkmYBV5ESbgwwCbi4ifVsJGkP4P3AafmBA/XeCfy2j+XuBLbvr1FJk4H7gc9VfQOwIXNudxGP\nwZdjEXV/24g4GjgYWAH4s6TaQxTuyJ+vDqxb95i2W4FrmljPFABJz0XEI8CWwLN1n79I/zvxYX3/\nF1tqzu0u4h58OR4Adqq9kXSZpF2BU0iHnDW1Xk/jOFlP3bT6z5ZvmK/+/6+Hf25niTjqvJu+ez+N\n7Zs1cm53ERf4Eki6DXg2Ik6tTYuI5YDdgZf7mP95YE5E7JgnjeP1O9LNBzbOr3drWHRMbnsEsAWg\nhs8vBj6en61Zi2Nn0gMJalc81Lc/pm7ZxcByA35RG3ac293FQzTl2Qf4SkTcT0q0lUnPuDy4n/nH\nA5MiYhHpMPiYPP0i4JKIOBj4WcMy8yJiMulk1OmSnqv/UNKzEbEr8I2IOI/UC3oa2K/u4Q3nAFMi\n4lHg97y+QfyCdH/yz0j60dC/vlWYc7tL+CqaLpWvNLhd0nfaHYtZkZzbxfEQjZlZRbkHb2ZWUe7B\nm5lVlAu8mVlFucCbmVWUC7yZWUW5wJuZVZQLvJlZRf0vhqRibo7514YAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index 7a575b5445..5fccc4f03d 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -32,7 +32,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/wboyd/anaconda2/lib/python2.7/site-packages/matplotlib/__init__.py:1350: UserWarning: This call to matplotlib.use() has no effect\n", + "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.1+1178.ga40c9ec-py2.7-linux-x86_64.egg/matplotlib/__init__.py:1362: UserWarning: This call to matplotlib.use() has no effect\n", "because the backend has already been chosen;\n", "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", "or matplotlib.backends is imported for the first time.\n", @@ -44,8 +44,9 @@ "source": [ "import math\n", "import pickle\n", + "\n", "from IPython.display import Image\n", - "import matplotlib.pylab as pylab\n", + "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "import openmc\n", @@ -467,7 +468,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAWFSURB\nVGje7Zs7cttADIZ9CSvXcrP0iCxUqbBc8Ag6xR6BhV2EvYvwFD4CCx1ABT1jMdgndpegRQnOrCbj\npPlGESISC4A/gd27e8H583CX3b4+iKJrRHkS4vkghMPBonRYWGwtfgD2YN+dRDUOoh6lACw0Noi9\nw2fESuEoAR/uVuMolX039oXGT7F3eFL2iEfhUX1f4cPdL/ishs+68ai+udE4xPhexbjX2FfjGNoP\nj/DPNX4Tsd+EODr8FvsVdf1Hd9P2VvCi4+s/aXvrf+upAD+1/9GV1mkOH5X9vV6THtfvACslcaUC\nbESL61drBPtdI8SrFMWrELsXCkuFDYW75gbiP7d9Cf7bAYI/aCwUShrBvh30+lWQkzVgZ/HD4Oix\nNCgcQpJ3BxU/Ln91elKoM5VEE38QtJ+Yv6cQ9xjKNYayyl8TypP8DfJnQ2H/b/N3ye9P83cT33SQ\nv/sQh9gV7zZ/0dNj5HQaC5vVzv9+/WFN2w8KVaZ2BwL1+pv4g0x1QRfjq0dB4Q3kT277oP6VNL6g\nKxNU9a8zK+WLbi/WwpdihbboKqyxFOulHMj6v4W/AXbmUeAxrv9J/CqEBXaRKsXaodD4nsYvkT/G\n6H1D4SR/iPy1Roj9JsQ5e18/7EUHv1+Fvx/Xj5V9Ugb5K8TW4TZEEdcvoz/up0VTe9qsVIppKVX6\na7D6y9ZvwEKjrtQxPtv6fXII9vCxKOGaIeAIfEF8IvAG8ie3vRK9rRQl+PPpSctbhfpTUCpviH+k\nxsZgpT91+snoX1l49KK3iUQvICRy5aUw6l8leoVwoo3Uv1rKreF/UFLY6d9QP4L9Wf2r7EP9GOSf\ncsjZ56f60kz+XmVPXv+RuP49ff0T/53Rv6n/7m2lvXT9Wqd/VUz8hvh5M/ED6ILmt4mfHYZSaePn\nTWpsf/SvqV9O6dLYYClLEetnoH/LBLFoBvrX189uTv8++kot5vTvQD4/9jP690g9P/4z/bvo/XVG\n/xYoZZx+8fr3MxAtsf7tUOkG2JqsTtCIpgCt/qX1226KqZS7gfzJbe+c9jLrtIZ8lXD+s4umlW6A\nKIVrlML2/cXjgPFjlJqIRC+Fj0bVJe+vSh56pSdR6YkQ1ygF10Wqf0FeLta/iKn9Mv1L24ti2e+7\nW4n1b3T/W+L+t9H9T/SvVboUmqJJon1/hZq8LnzRDlDrX1u0xRT1+6vEpomMmyYkqi95vIH8yW1P\nN+122KkLcNLKi/WTF01z/cNASrWE/l3ev6T17zX909z9X27/euK/Rf3zWP+Waf9eEv37KkWJ+rfD\nl6ZglNDa+cEBhwYDvkoNP/rX69814NaI3imq0l7OYDy/qSdDGwr7r+Y3VbzoKZr6XX2lfxfOb87q\nXzr+b1j/Xlp/nP6dn98McdH7cn7zjPObKsYWS3Eb9w8n85smHtqQuPuZ30T2dlIT6F9xFl+n8xsl\negL9a4c2KRr9W4rp/GYqumiM9Nec/j2v/yj9u1h//hv9e93vc++f63/u+rPjL3f+5Lbn1j9m/eXW\nf+7zh/v8+2b9e/Hzn6s/uPqHrb8g71n6L3f+5Lbnvn8w33+4718/+5d47//c/gO7/5E7/nPbc/tv\n3P4fs//I7X9y+6/fqH+v6j9z+9/c/ju3/8+eP+TOn9z23PkXc/7Gnf9x5483q38Xzn+582fu/Js9\nfy8kb/6fO39y23P3n3S8/S/c/Tfc/T83uX/pgv1XE/9duP+Lu/+Mvf8td/znti8kb/8ld/9nx9t/\nSjw/Ltr/yt1/+337f6/bf0zoB3nJ/ucVc/81d/83e/957vzJbc89/8A8f8E9/5HE78XnT/4H/cs5\nf8Q9/8Q9f8U+/5U7f3Lbc88fdrzzjyvm+cuf/Uu887/c88fs88954/8vO4SjPC+2QRIAAAAldEVY\ndGRhdGU6Y3JlYXRlADIwMTYtMDQtMTNUMTE6NTc6NDAtMDQ6MDBB7YJkAAAAJXRFWHRkYXRlOm1v\nZGlmeQAyMDE2LTA0LTEzVDExOjU3OjQwLTA0OjAwMLA62AAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -733,8 +734,8 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 9a6ecd72597338b40d2b72378e5ad6dd65df2364\n", - " Date/Time: 2016-04-08 11:57:08\n", + " Git SHA1: eeb5091ca3a34cc85df73a3318cae2b6c7097413\n", + " Date/Time: 2016-04-13 11:57:40\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -821,20 +822,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.7200E-01 seconds\n", - " Reading cross sections = 1.4400E-01 seconds\n", - " Total time in simulation = 8.3367E+01 seconds\n", - " Time in transport only = 8.3321E+01 seconds\n", - " Time in inactive batches = 6.3610E+00 seconds\n", - " Time in active batches = 7.7006E+01 seconds\n", - " Time synchronizing fission bank = 1.0000E-02 seconds\n", - " Sampling source sites = 7.0000E-03 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", - " Time accumulating tallies = 4.0000E-03 seconds\n", + " Total time for initialization = 4.3700E-01 seconds\n", + " Reading cross sections = 8.2000E-02 seconds\n", + " Total time in simulation = 4.7745E+01 seconds\n", + " Time in transport only = 4.7726E+01 seconds\n", + " Time in inactive batches = 3.8220E+00 seconds\n", + " Time in active batches = 4.3923E+01 seconds\n", + " Time synchronizing fission bank = 3.0000E-03 seconds\n", + " Sampling source sites = 2.0000E-03 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 8.3969E+01 seconds\n", - " Calculation Rate (inactive) = 3930.20 neutrons/second\n", - " Calculation Rate (active) = 1298.60 neutrons/second\n", + " Total time elapsed = 4.8198E+01 seconds\n", + " Calculation Rate (inactive) = 6541.08 neutrons/second\n", + " Calculation Rate (active) = 2276.71 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -979,8 +980,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/wboyd/Documents/NSE-CRPG-Codes/openmc/openmc/tallies.py:1996: RuntimeWarning: invalid value encountered in true_divide\n", - " self_rel_err = data['self']['std. dev.'] / data['self']['mean']\n" + "/usr/local/lib/python2.7/dist-packages/openmc-0.7.1-py2.7.egg/openmc/tallies.py:1996: RuntimeWarning: invalid value encountered in true_divide\n" ] }, { @@ -1326,124 +1326,124 @@ "text": [ "[ NORMAL ] Importing ray tracing data from file...\n", "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.854317\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.801874\tres = 1.522E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.761694\tres = 6.349E-02\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.732314\tres = 5.030E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.711020\tres = 3.870E-02\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.696500\tres = 2.913E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.687614\tres = 2.045E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.683408\tres = 1.278E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.683065\tres = 6.144E-03\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.685884\tres = 7.908E-04\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.691262\tres = 4.178E-03\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.698685\tres = 7.872E-03\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.707715\tres = 1.076E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.717977\tres = 1.295E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.729155\tres = 1.452E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.740981\tres = 1.559E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.753233\tres = 1.624E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.765721\tres = 1.655E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.778292\tres = 1.660E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.790816\tres = 1.643E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.803191\tres = 1.611E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.815332\tres = 1.566E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.827174\tres = 1.513E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.838664\tres = 1.454E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.849763\tres = 1.390E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.860444\tres = 1.325E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.870686\tres = 1.258E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.880478\tres = 1.191E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.889814\tres = 1.126E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.898693\tres = 1.061E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.907118\tres = 9.987E-03\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.915098\tres = 9.383E-03\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.922641\tres = 8.804E-03\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.929760\tres = 8.250E-03\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.936467\tres = 7.722E-03\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.942778\tres = 7.220E-03\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.948709\tres = 6.745E-03\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.954275\tres = 6.296E-03\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.959493\tres = 5.872E-03\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.964380\tres = 5.473E-03\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.968952\tres = 5.097E-03\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.973225\tres = 4.745E-03\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.977216\tres = 4.414E-03\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.980940\tres = 4.105E-03\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.984413\tres = 3.815E-03\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.987649\tres = 3.544E-03\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.990662\tres = 3.290E-03\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.993466\tres = 3.054E-03\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.996074\tres = 2.833E-03\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.998498\tres = 2.628E-03\n", - "[ NORMAL ] Iteration 50:\tk_eff = 1.000750\tres = 2.436E-03\n", - "[ NORMAL ] Iteration 51:\tk_eff = 1.002841\tres = 2.258E-03\n", - "[ NORMAL ] Iteration 52:\tk_eff = 1.004782\tres = 2.092E-03\n", - "[ NORMAL ] Iteration 53:\tk_eff = 1.006582\tres = 1.937E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.008252\tres = 1.794E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.009799\tres = 1.660E-03\n", - "[ NORMAL ] Iteration 56:\tk_eff = 1.011233\tres = 1.537E-03\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.012561\tres = 1.421E-03\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.013791\tres = 1.315E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.014929\tres = 1.216E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.015982\tres = 1.124E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.016956\tres = 1.039E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.017857\tres = 9.598E-04\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.018689\tres = 8.867E-04\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.019459\tres = 8.190E-04\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.020170\tres = 7.563E-04\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.020827\tres = 6.983E-04\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.021433\tres = 6.446E-04\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.021993\tres = 5.949E-04\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.022510\tres = 5.490E-04\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.022987\tres = 5.065E-04\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.023427\tres = 4.672E-04\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.023834\tres = 4.309E-04\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.024208\tres = 3.974E-04\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.024554\tres = 3.664E-04\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.024872\tres = 3.378E-04\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.025166\tres = 3.114E-04\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.025436\tres = 2.870E-04\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.025686\tres = 2.644E-04\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.025916\tres = 2.437E-04\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.026128\tres = 2.245E-04\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.026323\tres = 2.068E-04\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.026502\tres = 1.905E-04\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.026668\tres = 1.754E-04\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.026820\tres = 1.615E-04\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.026961\tres = 1.487E-04\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.027090\tres = 1.369E-04\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.027209\tres = 1.261E-04\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.027318\tres = 1.160E-04\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.027419\tres = 1.068E-04\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.027512\tres = 9.828E-05\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.027597\tres = 9.044E-05\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.027676\tres = 8.322E-05\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.027748\tres = 7.657E-05\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.027814\tres = 7.044E-05\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.027876\tres = 6.480E-05\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.027932\tres = 5.961E-05\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.027983\tres = 5.483E-05\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.028031\tres = 5.042E-05\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.028075\tres = 4.637E-05\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.028115\tres = 4.264E-05\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.028152\tres = 3.921E-05\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.028186\tres = 3.605E-05\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.028217\tres = 3.315E-05\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.028246\tres = 3.048E-05\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.028272\tres = 2.802E-05\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.028297\tres = 2.576E-05\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.028319\tres = 2.367E-05\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.028339\tres = 2.176E-05\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.028358\tres = 2.000E-05\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.028376\tres = 1.838E-05\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.028392\tres = 1.689E-05\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.028406\tres = 1.553E-05\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.028420\tres = 1.427E-05\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.028432\tres = 1.311E-05\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.028443\tres = 1.205E-05\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.028454\tres = 1.107E-05\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.028463\tres = 1.017E-05\n" + "[ NORMAL ] Iteration 0:\tk_eff = 0.854370\tres = 0.000E+00\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.801922\tres = 1.521E-01\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.761746\tres = 6.349E-02\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.732367\tres = 5.029E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.711075\tres = 3.869E-02\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.696557\tres = 2.912E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.687673\tres = 2.044E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.683470\tres = 1.277E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.683129\tres = 6.141E-03\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.685949\tres = 7.889E-04\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.691329\tres = 4.181E-03\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.698755\tres = 7.875E-03\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.707786\tres = 1.077E-02\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.718050\tres = 1.295E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.729230\tres = 1.452E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.741058\tres = 1.559E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.753310\tres = 1.624E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.765800\tres = 1.655E-02\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.778371\tres = 1.660E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.790897\tres = 1.643E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.803273\tres = 1.611E-02\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.815415\tres = 1.566E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.827256\tres = 1.513E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.838747\tres = 1.453E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.849847\tres = 1.390E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.860527\tres = 1.324E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.870770\tres = 1.258E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.880562\tres = 1.191E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.889897\tres = 1.125E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.898776\tres = 1.061E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.907202\tres = 9.986E-03\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.915181\tres = 9.382E-03\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.922724\tres = 8.803E-03\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.929843\tres = 8.249E-03\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.936550\tres = 7.721E-03\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.942861\tres = 7.220E-03\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.948791\tres = 6.744E-03\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.954357\tres = 6.295E-03\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.959575\tres = 5.871E-03\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.964461\tres = 5.472E-03\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.969033\tres = 5.097E-03\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.973306\tres = 4.744E-03\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.977297\tres = 4.414E-03\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.981021\tres = 4.104E-03\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.984493\tres = 3.814E-03\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.987729\tres = 3.543E-03\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.990742\tres = 3.290E-03\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.993546\tres = 3.053E-03\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.996153\tres = 2.833E-03\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.998577\tres = 2.627E-03\n", + "[ NORMAL ] Iteration 50:\tk_eff = 1.000829\tres = 2.436E-03\n", + "[ NORMAL ] Iteration 51:\tk_eff = 1.002920\tres = 2.257E-03\n", + "[ NORMAL ] Iteration 52:\tk_eff = 1.004860\tres = 2.091E-03\n", + "[ NORMAL ] Iteration 53:\tk_eff = 1.006661\tres = 1.937E-03\n", + "[ NORMAL ] Iteration 54:\tk_eff = 1.008330\tres = 1.793E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 1.009877\tres = 1.660E-03\n", + "[ NORMAL ] Iteration 56:\tk_eff = 1.011311\tres = 1.536E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.012639\tres = 1.421E-03\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.013868\tres = 1.314E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.015006\tres = 1.215E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.016059\tres = 1.124E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.017033\tres = 1.039E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.017933\tres = 9.596E-04\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.018766\tres = 8.865E-04\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.019535\tres = 8.188E-04\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.020246\tres = 7.562E-04\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.020903\tres = 6.981E-04\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.021509\tres = 6.445E-04\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.022069\tres = 5.948E-04\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.022586\tres = 5.489E-04\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.023063\tres = 5.064E-04\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.023503\tres = 4.671E-04\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.023909\tres = 4.308E-04\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.024284\tres = 3.973E-04\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.024629\tres = 3.663E-04\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.024948\tres = 3.377E-04\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.025241\tres = 3.113E-04\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.025512\tres = 2.869E-04\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.025761\tres = 2.644E-04\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.025991\tres = 2.436E-04\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.026203\tres = 2.244E-04\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.026398\tres = 2.067E-04\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.026578\tres = 1.904E-04\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.026743\tres = 1.754E-04\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.026895\tres = 1.615E-04\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.027036\tres = 1.487E-04\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.027165\tres = 1.369E-04\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.027284\tres = 1.260E-04\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.027393\tres = 1.160E-04\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.027494\tres = 1.068E-04\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.027587\tres = 9.825E-05\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.027672\tres = 9.041E-05\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.027751\tres = 8.319E-05\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.027823\tres = 7.654E-05\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.027889\tres = 7.042E-05\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.027950\tres = 6.478E-05\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.028007\tres = 5.959E-05\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.028058\tres = 5.481E-05\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.028106\tres = 5.041E-05\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.028150\tres = 4.636E-05\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.028190\tres = 4.263E-05\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.028227\tres = 3.920E-05\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.028261\tres = 3.604E-05\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.028292\tres = 3.314E-05\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.028321\tres = 3.047E-05\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.028347\tres = 2.801E-05\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.028371\tres = 2.575E-05\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.028394\tres = 2.367E-05\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.028414\tres = 2.175E-05\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.028433\tres = 1.999E-05\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.028450\tres = 1.838E-05\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.028466\tres = 1.689E-05\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.028481\tres = 1.552E-05\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.028494\tres = 1.426E-05\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.028507\tres = 1.310E-05\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.028518\tres = 1.204E-05\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.028528\tres = 1.106E-05\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.028538\tres = 1.017E-05\n" ] } ], @@ -1476,8 +1476,8 @@ "output_type": "stream", "text": [ "openmc keff = 1.028263\n", - "openmoc keff = 1.028463\n", - "bias [pcm]: 20.0\n" + "openmoc keff = 1.028538\n", + "bias [pcm]: 27.5\n" ] } ], @@ -1585,7 +1585,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 44, @@ -1594,9 +1594,9 @@ }, { "data": { - "image/png": "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\ngg==\n", + "image/png": "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\nZOT/APiw99Nd94jXAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1605,15 +1605,24 @@ ], "source": [ "# Plot OpenMC's fission rates in the left subplot\n", - "fig = pylab.subplot(121)\n", - "pylab.imshow(openmc_fission_rates, interpolation='none', cmap='jet')\n", - "pylab.title('OpenMC Fission Rates')\n", + "fig = plt.subplot(121)\n", + "plt.imshow(openmc_fission_rates, interpolation='none', cmap='jet')\n", + "plt.title('OpenMC Fission Rates')\n", "\n", "# Plot OpenMOC's fission rates in the right subplot\n", - "fig2 = pylab.subplot(122)\n", - "pylab.imshow(openmoc_fission_rates, interpolation='none', cmap='jet')\n", - "pylab.title('OpenMOC Fission Rates')" + "fig2 = plt.subplot(122)\n", + "plt.imshow(openmoc_fission_rates, interpolation='none', cmap='jet')\n", + "plt.title('OpenMOC Fission Rates')" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { @@ -1632,7 +1641,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.11" + "version": "2.7.6" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index 718ff8f796..388e4aaa69 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -17,15 +17,14 @@ }, "outputs": [], "source": [ + "%matplotlib inline\n", "import glob\n", "from IPython.display import Image\n", "import matplotlib.pylab as pylab\n", "import scipy.stats\n", "import numpy as np\n", "\n", - "import openmc\n", - "\n", - "%matplotlib inline" + "import openmc" ] }, { @@ -380,7 +379,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AECBABF2xKKPsAAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA0LTA4VDEyOjAxOjIzLTA0OjAwqpTBSwAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNC0wOFQxMjowMToyMy0wNDowMNvJefcAAAAASUVORK5C\nYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAPZSURB\nVGje7Zs7buMwEIZ9iey50gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwg\nwIcgg8Cc4fCTSK5W4OeFkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7\nE08mlia+rn7VcKXP8sRszFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WB\nzfiz20hXORmP9fi/bM9EeUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4\nlXju8K3DKv9NThOZ3q2KmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3Oaf\nPX40NGgST2r+uvQkXXp6cKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcub\nlfKGt6apotG/NVx3SInWtLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJb\nf8qlPynYmpKCh7OB1fzNalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utr\nJTy8/06TXh0r/5JOa2JmYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU\n4YuBTPa/8P67l/6r44ds+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m\n/65n+S8p/itN15v0UkW3/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB\n6R3Cqn55U4rv4kfH3zaSgQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6\nbjT6rym9I/v/03/b+LHS4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv\n6h9B/Bfxr9j1Hz2eN/hO8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wX\nfP8Mvf9G37/D/ovuP8SeP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7\n+O+E8zdP/8XOf8Hnz9Dzb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589j\nz5/Y8ej9h4D+W7qQmf57efqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m\n4fwXuH+M3n+OO3++AX9clR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA0LTEzVDExOjQw\nOjAxLTA0OjAwQIJDkwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNC0xM1QxMTo0MDowMS0wNDow\nMDHf+y8AAAAASUVORK5CYII=\n", "text/plain": [ "" ] @@ -565,8 +564,8 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 9a6ecd72597338b40d2b72378e5ad6dd65df2364\n", - " Date/Time: 2016-04-08 12:01:24\n", + " Git SHA1: eeb5091ca3a34cc85df73a3318cae2b6c7097413\n", + " Date/Time: 2016-04-13 11:40:02\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -630,20 +629,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.4700E-01 seconds\n", - " Reading cross sections = 1.4200E-01 seconds\n", - " Total time in simulation = 1.4279E+01 seconds\n", - " Time in transport only = 1.4263E+01 seconds\n", - " Time in inactive batches = 2.3020E+00 seconds\n", - " Time in active batches = 1.1977E+01 seconds\n", - " Time synchronizing fission bank = 1.0000E-03 seconds\n", + " Total time for initialization = 3.7900E-01 seconds\n", + " Reading cross sections = 8.6000E-02 seconds\n", + " Total time in simulation = 8.7310E+00 seconds\n", + " Time in transport only = 8.7200E+00 seconds\n", + " Time in inactive batches = 1.3230E+00 seconds\n", + " Time in active batches = 7.4080E+00 seconds\n", + " Time synchronizing fission bank = 2.0000E-03 seconds\n", " Sampling source sites = 1.0000E-03 seconds\n", " SEND/RECV source sites = 0.0000E+00 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.4854E+01 seconds\n", - " Calculation Rate (inactive) = 5430.06 neutrons/second\n", - " Calculation Rate (active) = 3131.00 neutrons/second\n", + " Total time elapsed = 9.1240E+00 seconds\n", + " Calculation Rate (inactive) = 9448.22 neutrons/second\n", + " Calculation Rate (active) = 5062.10 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1120,9 +1119,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\nD03l9kElNMu/AAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1145,7 +1144,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 27, @@ -1154,9 +1153,9 @@ }, { "data": { - "image/png": "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\nTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2277,7 +2276,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Mann-Whitney Test p-value: 0.607166663014\n" + "Mann-Whitney Test p-value: 0.303583331507\n" ] } ], @@ -2315,7 +2314,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Mann-Whitney Test p-value: 1.2077327566e-41\n" + "Mann-Whitney Test p-value: 6.038663783e-42\n" ] } ], @@ -2351,7 +2350,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/wboyd/anaconda2/lib/python2.7/site-packages/ipykernel/__main__.py:4: SettingWithCopyWarning: \n", + "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:4: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", @@ -2361,7 +2360,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 38, @@ -2370,9 +2369,9 @@ }, { "data": { - "image/png": "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\nulZkiAAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEdCAYAAAAb9oCRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XuYXHWd5/H3tzsdIVFMIDgDCRDSBBB1hQ4EL8REeARB\nV5CZ3VFnFCKKYQAvAzg6s7uGmXUenxHW28ZkHJTL6Mg6igzjMAvKJYsXICTgBQKhu0kgCTPkajAB\nknR9949zqjl1+tSpc6rqVFdVf17P009yblW/U931+57f3dwdERGRrHrGOwEiItJZFDhERCQXBQ4R\nEclFgUNERHJR4BARkVwUOEREJBcFDpECmNlfmNl1450OkSIocEjHMLPTzOznZvZbM9tuZj8zs1Ma\nfM0LzeynsX03mNn/bOR13f1v3P0jjbxGNWbmZrbbzH5nZpvN7Gtm1pfx2kVmtrGIdMnEocAhHcHM\nDgJ+BHwNOBiYCVwNvDSe6UpiZpNa8DZvdPdXAm8DzgcubsF7igAKHNI5jgVw9++6+4i7v+Dud7r7\nr8onmNlHzWytmT1vZo+Z2UC4/zNmNhTZ/95w/2uBFcCbw6f3nWZ2MfDHwKfDff8Snnu4mf3AzLaY\n2VNm9vHI+y41s++b2bfNbBdwYbjv2+Hx2WEp4QIze9rMtprZX0auP9DMbjSzHWH6P521VODug8DP\ngNdFXm9x5HMYNrOPhfunAv8GHB7e2+/C++qJfEbbzOx7ZnZweM0B4X1tCz+fVWb2e7l/e9JVFDik\nU6wDRsIM9mwzmx49aGb/BVgKfAg4CHgPsC08PAQsAF5NUEr5tpkd5u5rgSXAL9z9le4+zd2/AXwH\n+Ntw3382sx7gX4BfEpR0zgA+aWZnRZJwLvB9YFp4fZLTgOPC6/9HGLgAPgfMBuYA7wD+JOuHYmbH\nh/f2YGT3c8C7w89hMfAlMxtw993A2cDm8N5e6e6bgcuB84CFwOHADmBZ+FoXhJ/bEcAh4ef1Qtb0\nSXdS4JCO4O67CDJeB/4e2GJmt0Wefj9CkNmv8sCgu28Ir/0nd9/s7iV3/z/Ak8D8HG9/CnCou/+V\nu+919+EwDe+LnPMLd781fI9qGevVYUnplwRB6I3h/v8K/I2773D3jcBXM6RpjZntBtYCP3D3G8oH\n3P1f3X0o/BxWAncSBJdqlgB/6e4b3f0lggD8h2GV2z6CgHFMWNJbHf4uZAJT4JCO4e5r3f1Cd58F\nvJ7g6fjL4eEjCEoWY5jZh8zskbCqZWd47Ywcb30UQfXOzshr/AUQrbJ5JsPr/Hvk/3uAV4b/Pzx2\nfZbXGgiv/yPgg2Y2u3wgLJHdH3Yg2AmcQ/r9HgX8MHJva4ERgvv7B+AO4OawIf5vszbES/dS4JCO\n5O6PAzcQBAEIMtv++HlmdhRB6eAy4BB3nwb8BrDySyW9fGz7GeCpsCqr/PMqdz8n5Zo8ngVmRbaP\nyHJRWKL4HkGngaUAZvYK4AfANcDvhfd7O+n3+wxwduz+DnD3Te6+z92vdvcTgLcQVIF9KP8tSjdR\n4JCOYGbHm9kVZjYr3D4CeD9wf3jKdcCVZjbPAseEQWMqQWa5JbxuMS8HG4D/AGaZ2eTYvjmR7QeB\n583sz8OG7F4ze32jXYEjvgd81symm9lMgiCXxxeA94efyWTgFQT3u9/MzgbOjJz7H8AhZvbqyL4V\nwOfDzwszO9TMzg3//3Yze4OZ9QK7CKquSvlvUbqJAod0iueBU4EHwrr9+wlKDldA0I4BfB74x/Dc\nW4GD3f0x4FrgFwSZ5hsIeiGV3Q08Cvy7mW0N930TOCGsurnV3UcInrRPBJ4CthIEqmjm24i/AjaG\nr/0Tgkb2zN2M3f3X4X1c4e7PAx8nCEY7gA8At0XOfRz4LjAc3t/hwFfCc+40s+cJPttTw0t+P0zP\nLoIqrJUE1VcygZkWchJpL2Z2CfA+d1843mkRSaISRw1mtnS809Asupf2ZGbXmNlbw/EUxxGUon44\n3umqR5f9XpaOdxqapdn3ohJHDWbm7m61z2x/upf2ZGZOUF12NLATuBn4rLvvHdeE1aHbfi+6l2St\nmBpBRGpw99fXPkukPaiqSkREcunKqqqw6C8iIjlkrc7q2qqqbgyIIiJFMcveBKKqKhERyaXwwGFm\n7zSzJ8xs0Mw+k3D8eDP7hZm9ZGZX5rlWRERar9A2jnCagnUEU0VvBFYB7w9H85bPeQ3BJGvnATvc\n/Zqs16a8r6uqSkQkOzPL3MZRdIljPjDo7sNhn/SbCdYtGOXuz7n7KoI5cHJdKyIirVd04JhJ5RTR\nG8N9RV8rIiIF6YrGcQuW6fTyz3inR0SkE0Xz0bRpSorujruJyrUFZoX7mnqtuy8lXI8ANI5DRKQe\n7dLGsQqYa2ZHh+sdvI/IFM8FXisiIgUptMTh7vvN7DKCpSd7gW+5+6NmtiQ8vsLMfh94CDgIKJnZ\nJ4ET3H1X0rVFpldERGrr2ilHuvG+RESK0k7dcUVEpMsocIiISC4KHCIikosCh4iI5KLAISIiuShw\niIhILgocIiKSiwKHiIjkosAhIiK5KHCIiEguChwiIpJL0dOqd62RkrNi5RBrNuxg4KjpXLKwn56e\nTNO8iIh0NAWOOq1YOcQX73gCgLsefw6AS99+zHgmSUSkJVRVVac1G3akbouIdCsFjjoNHDU9dVtE\npFupqqpOlyzsB6ho4xARmQi0kJOIiGghJxERKY4Ch4iI5KI2jibS2A4RmQgUOJpIYztEZCJQVVUT\naWyHiEwEChxNpLEdIjIRqKqqiTS2Q0QmAo3jEBERjeMQEZHiKHCIiEguChwiIpKLAoeIiOSiwCEi\nIrkocIiISC4KHCIikosCh4iI5KLAISIiuRQeOMzsnWb2hJkNmtlnEo6bmX01PP4rMxuIHPusmT1m\nZr8xs++a2QFFp1dERNIVGjjMrBdYBpwNnAC838xOiJ12NjA3/LkYWB5eOzvcnufurwd6gfcVmV4R\nEamt6BLHfGDQ3YfdfS9wM3Bu7JxzgZs8cD8wzcwOA3YB+4ADzWwSMAXYXHB6RUSkhqIDx0zgmcj2\nxnBfzXPcfTtwDfA08CzwW3e/s8C0iohIBm3bOG5m/cCngKOBw4GpZvYnVc5damZe/mllOkVEukU0\nHzWzpdXOKzpwbAKOiGzPCvdlOedk4OfuvsXd9wG3AG9JehN3X+ruVv5pWupFRCaQaD7q7kurnVd0\n4FgFzDWzo81sMkHj9m2xc24DPhT2rnoTQZXUs8ATwJvMbIqZGXAGsLbg9IqISA2FrgDo7vvN7DLg\nDoJeUd9y90fNbEl4fAVwO3AOMAjsARaHxx4xs5uAh4AS8DDwjSLT2ywjJWfFyqGKlQB7elQQEpHu\noBUAC7DsnkG+eMcTo9tXnXUcl779mHFLj4hILVoBcJyt2bAjdVtEpJMpcBRg4KjpqdsiIp2s0DaO\nieqShf0AFW0cIiLdQm0cLaRGcxFpV3naOFTiaLK04PD1ewe59s51ANz1+HOU3Ln89LnjmVwRkdwU\nOJpsxcqh0R5Vdz3+HMBoj6pbH64c+3jrw5sUOESk46hxvMlSe1TFa8/arzZNRKQmBY4mS+tR9d6B\nyvkd49siIp1AVVVNltaj6mNv6+eBp7azdvMuXnv4QSx5m3pbiUjnUa+qFtKIchFpVxo53qY0olxE\nuoECRwtpRLmIdAO1cbSQRpSLSDdQG4eIiKiNQ0REiqPAISIiuShwiIhILgocIiKSiwKHiIjkosAh\nIiK5KHCIiEguGgDYxrRioIi0IwWONpa2KJSIyHhRVVUb06SIItKOFDjamCZFFJF2pKqqNqZJEUWk\nHWmSQxER0SSHIiJSHAUOERHJRYFDRERyUeN4F9LAQREpkgJHF9LAQREpkgLHOCuidKCBgyJSJAWO\ncVZE6WDgqOmjr1XeFhFplsIDh5m9E/gK0Atc5+5fiB238Pg5wB7gQndfEx6bBlwHvB5w4MPu/oui\n09xKRZQONHBQRIpUaOAws15gGfAOYCOwysxuc/fHIqedDcwNf04Flof/QhBQ/q+7/6GZTQamFJne\n8VBE6aCnx9SmISKFKbrEMR8YdPdhADO7GTgXiAaOc4GbwqHe95vZNDM7jKD08TbgQgB33wvsLTi9\nLafSgYh0mqIDx0zgmcj2Rl4uTaSdMxPYD2wBrjezNwKrgU+4++7iktt6Kh2ISKdp5wGAk4ABYLm7\nnwTsBj6TdKKZLTUzL/+0MpGtMlJylt0zyEU3rGLZPYOUSl15myIyjqL5qJktrXZe0SWOTcARke1Z\n4b4s5ziw0d0fCPd/nyqBw92XAkvL250UPLJ2x9XYDBEpWtZJDusKHGa2xt0HMpy6CphrZkcTBIP3\nAR+InXMbcFnY/nEq8Ft3fzZ8n2fM7Dh3fwI4g8q2ka6QNSBobIaItIu6AkfGoIG77zezy4A7CLrj\nfsvdHzWzJeHxFcDtBF1xBwkaxBdHXuJy4Dthj6rh2LGukDUg5O19pWlHRKQoqYEj7E77E3d/e71v\n4O63EwSH6L4Vkf87cGmVax8BTq73vTtB1oCQt/eVqrZEpCipgcPdR8ysZGavdvfftipRE0G5RLB6\n/XYWzJ1BX28P81ICQt7eV6raEpGiZKmq+h3wazP7MUHPJgDc/eOFpWoCiJYIAK4667imlgjiJZm9\nIyVKJVd1lYg0LEt33FuA/w78P4KxFOUfaUDRJYJLFvazYO6M0e37ntzK8pVDTX0PEZmYsrRxnOnu\nf9yi9EwYRU9E2NNjTO6tfC5QdZWINEOWNo6jzGxyOOWHNEkrphrRLLkiUgQLOjWlnGB2E/BagvEW\n0TaO/1Vs0upnZl7rviaCUslZri65IpKBmWUeAJglcHwuab+7X11H2lqiGwKHxmGISCs1NXBEXnSK\nu+9pKGUt0g2B42t3P8m1d64b3b7izGO5/PS545giEelmeQJHzV5VZvZmM3sMeDzcfqOZfb3BNEoN\ntz68KXW7XSc9bNd0iUjzZBnH8WXgLII2Dtz9l2b2tkJT1SUaqm6K57ex7XYdGd6u6RKR5sk0rbq7\nPxPbNVJAWrpOORO96/Hn+OIdT+QaR/HegZmp2+06Mrxd0yUizZOlxPGMmb0FcDPrAz4BrC02Wd2h\nkUz0Txcdg5lV7a7brl1t2zVdItI8WQLHEoK1v2cSTI1+J1UmJZRKjWSiteamShsHMlJyvn7vILeu\n2QQG5500k0sXHdOSXllaClek+2XuVdVJ2qVXVa1xFEV1uV12z2DFPFjQ/LmwRKS75OlVVfQKgBNa\nrVJDUQ3JSVViamsQkWZp5zXHu17WNpC8XVyTqsTU1iAizaISxzjK2gaSt2RyycJ+3J0fRto41NYg\nIs1SVxuHmQ24+5oC0tMU7dLGUUu5DWT1+u3sK3nFYk7Rto6LblhVEWDOOP41fPPCU8YjyZoKRaRL\nNXXkeBWX1HmdRJTbQObNPpj7ntzK3VXGe8RLIuNZ7dTI2BQR6Q51VVW5+0ebnZCJrFZbRzt1cdUA\nPxGpGjjMbCDtwnauquo0tdo68q43XqSkJWkvumGVqq1EJpC0Ese1KcccOL3JaZmw6i1RjEd7QzSt\ne0dK3PfkVkDzUolMJFUDh7u/vZUJmcjqbcYfjwkFo6Wfi25YVXFM1VYiE0PNNg4zmwL8GXCku19s\nZnOB49z9R4WnboJICwBppYp4Rn3Lmo0tLX1oXiqRiSlL4/j1wGrgLeH2JuCfAAWOJqnW4DxSci68\n/sEx1UFLFvazYuUQ67furrhuaMtuhrbsblnpo50a7UWkdbIEjn53/yMzez+Au+8xM7WANlG1J/cV\nK4dGg0bZmg07KkooAP2HTgWHoUggaUW1UTs12otI62QJHHvN7EDCqngz6wdeKjRVE0y1J/ekzH/g\nqOlj9s8+ZCoDR02vCCZp1UZ5GtU14E9E4mqOHDezdwD/DTiBYEr1twIXuvu9haeuTp0ycjwunkm7\nO9dE1h1fMHcGNy6ez/KEEsd5J83EgIef3lkzg4/Pnps2c26ec0WkczVtdtywSupx4HzgTYABn3D3\nrWnXSX3ijeRXnHksV511XMXTvgMld/oPncqO3XvZvmcfQ1t2c+2d67jqrOMyTUWSZxCfBvyJSFxq\n4HB3N7Pb3f0NwL+2KE0TVjxTfuTpnWMCwbJ7Brk2UgpJu76aPL2h1HNKROKytHGsMbNT3H1V7VOl\nEVky6dXrt6den0W0DeXEI6fh7lVHfye1v6jdQ2RiyxI4TgX+2Mw2ALsJqqvc3f9ToSmbgLJ0b90X\nW4vjyIMPpK+nByyowiqVvGYmHu0NFW3DSOrGm9RzqtY1ItLdsgSOswpPhQDZurf29VZOaDypp2e0\nG+61d66jx7J3kR0pObes3lixL0t1l9o9RCa2mtOqu/uGpJ9WJE7Gmherjtr5wt6K7TyZ+IqVQxVj\nPwDWb9tdc5XBeJVYeaLDWtflXclQRNpT4SsAmtk7ga8AvcB17v6F2HELj58D7CHo6rsmcrwXeAjY\n5O7vLjq97e6Shf3cP7xtdGDg9t37Ko7nabxOCjJDW3aPVkNVK7nUO9HheMytJSLNV2jgCDP9ZcA7\ngI3AKjO7zd0fi5x2NjA3/DkVWB7+W/YJYC1wUJFp7RQ9PcbkWHVV/4ypzJ4xNfe0H/HG+Ki0kku9\nEx2qikukO9S7AmBW84FBdx92973AzcC5sXPOBW7ywP3ANDM7DMDMZgHvAq4rOJ1tLV7Fc9KR0yqO\nnzcwc3RE+fKVQ4lVQEnVRJcs7Oeqs47jjONfw4K5MyrOz1pyybM6YTutZCgi9Su6qmom8ExkeyOV\npYlq58wEngW+DHwaeFWBaWx7tQYGunvNKqBq1UTl88rrn+edsDDPRIeaFFGkOxTexlEvM3s38Jy7\nrzazRTXOXQp8rhXpGg+1BgZmqS6qVU1U74SFea7TpIgi7c3MotUVV7v70qTziq6q2gQcEdmeFe7L\ncs5bgfeY2XqCKq7TzezbSW/i7kvd3co/zUp8u6hVxZPUy2nf/lJq9VaR1UTd0HuqG+5BJK9oPlot\naECGSQ4bYWaTgHXAGQTBYBXwAXd/NHLOu4DLCHpVnQp81d3nx15nEXBl1l5VnTrJYTVJ1UjRQX6l\nknNBZN0OCCZEjG5fceax9JiNmfeqiBHg3TAxYjfcg0geTZvksFHuvt/MLgPuIOiO+y13f9TMloTH\nVwC3EwSNQYLuuIuLTFMnqlXFk9TTau3mXRXbtz68iR9/amFFYChqBHjSyoSdNi2JeoCJVFd0VRXu\nfru7H+vu/e7++XDfijBoEPamujQ8/gZ3fyjhNe7VGI508aqn4w+r7E8wtGU3y1cOVeyLZ4arN+xo\nSvVMPC1J793u1ANMpLq2bRyXfOI9lkZGnJ8Obqs455bVlU/+8XEce/ePVJRA3J3LTp+bKx0jJcfd\nObCvlxf2jYzuX91hT+zqASZSXaFtHOOl29o46nHRDasSB/dF6+pLJWfZvYPc+vAmcNi+ey87Xnh5\nJHr/jKncdeWiXO8bbxsoWzB3Bv9wUbwntoi0i7Zp45DmyzqlebVR4dHqqZ4eo8eMoS27x5wHBPMg\n51StLaAvlsa0+9C07SLtTYGjw2Sd76lctXLL6o0VExnuHSlVTL2e1uh73kkzc6evWsCaN/vgiu20\n+2jXOa0U0EQCChwdJmtvn3JPrEsW9ld01b3vya0sXznEkoX9rFg5xPptlaWNBXNnMLm3p+56/fI1\nqzfsYN9Iib4eY97sg8e8Vtp9tGuPpnYNaCKtpsDRYfIu5ZrUVXfNhh0VmSAE7Rnnz5uV+hSd5Yk7\n6+jwtPto1+Vqx/RCW7+dZfcMqgQiE44CR4ep1tsnLVNPyojjmeDsGVNrZvhZn7izBJi0XkvxpW1L\nKUvbNluez3FfqfYcYSLdSIGjw1R7ok/L1C9eMIf7h7exdvMuXnv4QXxswRz+juHcT/VZq5CyBJi0\nkkmepW2bLS3t8WAX72LcLlVqIkVT4Ohw5Sfk63/6VMX+8vYlC/v5xn3DFW0cf3ffcF3jFOJP3Ou3\nBqsFxksBzWyjiGfORY8HSUt7PNgtu2eQu5tcpTaeDfBq/JesFDg63NfvHeTaO9eN2b91997RJ+ek\nzLBWW0Q5E1m9fjt7R0ps3vkiuHPaMYeweeeLDG/dzdDWYLXA+4e3cePi+alVY3mV3/+RpyvTvnf/\nSKHtCnnS3sggwWqZ9Hg2wKvxX7JS4Ohwtz5cOdlwj0F0ppByxhTPDGs9XcYbz8uGt+2h/9CpFfvu\ne3IrF1z/4GhvrI8tmFPx3lkz1GiaXto/MmbkO8DmHS80lLnVuu88waCRaeKrZdLj2aOsXXuzSftR\n4Oh0sQHy0w7sY/uel0d/RzO/aGa4vMbTZWqmkTAoP+u642kZd7VgFWWx0kXezC2eYd8/vK2i+3E8\nGJSnV292CadaJp21xFNEtVK79mbrFt1UFajA0eHeOzCTayJVVYvfOpuenp4xf5zxjLzW02XaeuTv\nHZjJA09tr5i2Pf5a9VTFpAWBKX29XHr6MZTcK6rmsmRu0bTEx63UCnhFVd9Uy6SzlniKSJfm5ypW\nN1UFKnB0uD9ddAwWW2cjy1NMrafLcqZx3X1D7Nizf3T/EdMPwAmmEFkwdwZ9vT3sGylVBJGBo6bX\nVRVz4pHTqgarJYuC6q+Hn94ZvG+VgYVJspRk4mmpti++Xe9TZLVMOmv1VxHVSlqhsVjdVBWowNGB\nmlHkrfV0Wc5EVq/fzt1PbBnd39fbU/HEf9VZx41WfUVf66M3Vc6On6UqJj4x5Vv7D+aAvkmceOQ0\nHhjeVtHmkWdhpXhPrDkzpnL0jKnsTQh4cbUCbN6nyGing30lp6+3vpUNVK3UefL8ztq9WkuBowM1\no8ib9ely3uyDKwKH2dg2hqTXqqcq5p8f2VzxGv++6yXuuuLNLLtncExDedLTWrUv276RUuV57vz9\nh05mpOR8+MZVFeNb4moF2LyjyZNKP3fX8TtUtVLnyfM7a/dqLQWODtTKIm/8jz1rG0O1L0nqZPfx\ng+F20v0ljSGp9mWLz8y7Ydselt07yIORdpr7ntzK4htXVXQrhtoBttZo8njje7XfVZ5AmCVd0lzN\nKAHk+Z21e7WWAkcHamU1RfyPvVTyMWuXZ7muLO1JKt7Q/96BYHbepIb68hiS6PXVvmzxUhME3Zjj\n08nf9+RW3n7tvdz1qYVMmvRyFdLe/SUuipRMrr/glNHjtUaTRxvf3b1qp4Ok32Ezp3iRxtRbAqj3\nd9PuVZEKHB1oPKspGn3STXuSSmroh8r7Xb9td0WGH70+rXrs/uFtlb3AqhR9NmzbwxlfWsk9Vywa\n/YJfdOOqMSWT8qJUtUaTR/1wzSZ+/GcLx6RlwdwZib/DtM8qmiFF22ruevw5Sj42uCuQNKbeEkC9\nAafdqyIVODpQp1VTxDO5qOiTVLX7qjZ3Vfz6tJ5KNy6eX9GA7+4VpZuoDdv2sHzl0Oh7rt28q+J4\ndDt6byceOQ13Z86MKezcs4/nX9zPvuhoTEtOS9bFuKL3mtZTLFqaKleXxavgJJ8xyyzH1rWppt6A\n0+7fcQUOyS1v8TueyTWy5kfak1j0yzZS8jGZc7zKzcxYvX47a57eyc7Ikrnl1y/fZynW2+v4w141\n2gAef9pPU14YK2umkHavaRmQlyrTW16DJf6equLKLl5qve/JrbzjSys5fyB9KYJ2r3KqlwKH5BYv\nfteqGolncn09Njq1+/KVQ7kyrJ4eG12EKun6cmZ4y5qNFU/dUFlFEM289+8vccaXVrJh257R4/Gx\nKABTJvcy76jpzJ89PdO4kLIZUyez+LSjuWRhf67MOi3ApA3QPHz6gQxH7gWSA02799xpJ0nr2gxt\nGdvOFtfuVU71UuCQ3Fav316x/cM1GxneGmRUSRlQs9axGA0KkeVw05adjUp7Qp80qYd7rlhUcyzK\nm+ccwjcvPIWLblhVM61Ri087uunTxKe1+0ye1MuCuTNqjlFp55477Vgaqhas0z63dq9yqpcCh+S2\nL1YVklTNE9WsdSyyBIVqr1WriiDPWJT4/nLV24lHTsPCNJQH982rUcVUb2ad1u5Tfs94IIxr52qU\ndiwNlT/D6IMLtNfn1ioKHJJbfLTztAMns3135cSKUc1axyJLUIhnhgdP6ePDYTVRXtWqGZL2Z30a\nrpVZxxvbjWCalWrvM1Jy3J3+GVPBgnaUavOTZb2/dtCOpaHyZ1oOyuXR/6s37KgYU9SOpaVmU+CQ\n3OYdNb0i4z9/YGZiN9pq6s2w4plu/6FTRxsno68dbcTcvmcfZlbXF7dWY3s9a7On3ftIybnw+gcT\nG9vTJmGM9g7ryXGv5fsrp/ejNz3UNhldq0pD1X5XIyXn6/cOBssWeDCm6E8XHUNPj41+btGS3t2R\ntr5a7WvdQIFDcmvkiRvqr/dNel+HMRl6vBGzvBrixQvm8I37hutKd56qk6Sp28vdYdPufcXKoaoz\nDpfvG2Kz/W7dnXhOHvH03rJ6I+fPS+8tVLS8Dxf1PuVX+72uWDlUMUPCNXeuw6zydxf/rJMGlSad\n1w0UOCS3Rhr86v2Cx0dvf2zBHHp6LLGxOf60Wl4NMVoSyfskmKfqJH6sWnfYWtfFlZ+608ZwRJ/M\nkz5rD6+P7ou/b9Ko/FbL+zdWb5tItd9r2kzJ5c81HrSrDSod3PI7Tv7rH4+ZdaCTKXBIS9X7Ba82\nejvpi//3HzoZCEoaW3fvHT0WH8h3y+qNmQNYPBideOS0qpMZJvW+yfLUGb9u+pQ+Xnf4QUye1FvR\nyB5/rf5DpzL7kKljnsyjywqXpzwxs5qBNprmtCqbdlJvm0jWDhDRY/HAXa4yjQ8q7Z8xlf3uo928\n47MOdDIFDmmppC94llJItdHbSV/86NNq9As+9YBJFYFkKFw3Pcs8UKvXbx9df2ReOPK8WgBMmuIk\nSx19vNfOjj37+OngtjFTyMfv+fyBWYlpv3VN5bLCP1yzidkzKpf9jQbaaN18+X2yVNm0g3rbRNI6\nQJTcKwJmtcA9+5CpXPr2Y0YHlUZfa/7nf1JxbvzvuFMpcEhLJX3Bs5RCXnv4QRUZ8WsPPwhIrwuP\nZ+Abtu0KWCmhAAAPaElEQVQZ7TqbNudVVPzpspyJx8dyRK+vNq1ILeWAt2bDjorunrW6N8dfuxzs\nnt31YuUbWHqgjXbhLU+fcsPP1o9JZzvW2dfb4SJtmpvLT5/L5afPHXOsWpBKeq343+3UAyZlmqqk\n3SlwSEslfcGrLfoUdf0Fp7A4NkMtpNeFJ432ndzbwzcvPCV1zqu0tJS3a81dlJaucvXPD9dsYuee\nvUyb0sd7B2ZxaVgFVOvpuVb9f7U2EPdgsawrzjyWRyJdfJNeN/75RNXTwylre0u9GWr8M9m7v8RF\n1z+YOKNx3nTG05QnSF1/wSkVsxLE50HrVAoc0lJ5BtpFTZrUU1E3PFLy1AWTar121i9/1hl3szaA\nA2Oqf7bv2ce1d66jx15+8s+Stmoeio3sP6DXeHHEGd66m2vuXMf0Aydx0YI5qRl1PGBO6evlsFcf\nUFFlk0dST7P5Rx9c0QYD2VZPTPqdx4/9Ymjr6OJf0baFWoEhS+k3T8P9pEk9HHPoKyums0nqHdcu\n3aCzUuCQlkr6stSTUWZtZE+bMbeRiQaTSjNZq3CqnVfe3+g0FcOx3j77Y719drywv2ZbRTxgzps9\nncm9PWNWgEyS9DtO6mm2eecLFftuWb0xNfNM+53Hj02Z3FtxbbltodbfTVoje9aOAvH7P/HIaYkP\nH+04Oj6rwgOHmb0T+ArQC1zn7l+IHbfw+DnAHuBCd19jZkcANwG/R9DR7Rvu/pWi0yv1yfr0VO3L\nkvcLk7UXTaOZcJ6JBtdvG7sqYdxIycdMLR99vWb43Yv7K7bjs/uWpQW6aMBMmgE4a1VZWs+t+Cy+\nQ1t3p5ba0n7n8WMHTOphz96R0e1ym1itv5u00m/WjgLx+7/yzGO56qzjxjx8tOPo+KwKDRxm1gss\nA94BbARWmdlt7v5Y5LSzgbnhz6nA8vDf/cAVYRB5FbDazH4cu1baRFJVRHTq9HJG2qwvSzvMsxTv\nBZVlttT4IL8D+3rCKqBZuWfPreaEWIPsEdMPZMP2F8acV2vMR/kekjoCjPY227CDfSMl+nqMebMP\nTixdlHtufe+hZyqqbA6ffiDWY5k6KZTTW+13Hj/22sNehZnx+LPPV7SJxZ/+TzpyWsV7pJV+45N7\nVktvfN/DT+/kmxeekut+2l3RJY75wKC7DwOY2c3AuUA08z8XuMndHbjfzKaZ2WHu/izwLIC7P29m\na4GZsWulTSRVRcDYJ9RmfFmqzc/Uall7QUXFj72lf0ZFplJr9tx4Bp80Gj7ekeCbHzyZD9+0arTO\nH+C0Yw6p+MzSqk2SMtukBvjy8rzVem71x+r6J0/q5fyBWZk6KUC+HnQ/G9rOVWcdx7c/8qaK14iX\nvqLbtYJ2fHLPaunN+jfeznOF1VJ04JgJPBPZ3khQmqh1zkzCoAFgZrOBk4AHikikNK7aIDKozCyb\n8WVpZH6mIuQJhrXOrVUiSyrZJQXp+CCzV0zqHbOdtmZKWvBz4OGUdpryuJD47zg+x1l8UGP53GoZ\neFK14Wi7w5pNPPvbyu7HSfdw28ObK7b/+eHNfPyMY4H0qWJg7OSec2ZMTfz7zfo33slTrrd947iZ\nvRL4AfBJd++O0TNdqFqdOGRbHjaPdqsbzhMMa52bN7DEB5RV+yxqvW7a8Uee3llxbrkrb9KDQrl0\nUV5sa/X67VwwvI2+3h4Gjpw2pitw0t9DnjVL4u0O8bSMEX++iGzXmiomHvj+YN6sxAeWTg4IWRUd\nODYBR0S2Z4X7Mp1jZn0EQeM77n5LtTcxs6XA55qQXqlT9MtSSphJtpnGs2642tNw1oyi1rnlz6rc\ndrB6/XaW3TM4WiUVnx8pPsCs3mqRtCf/+HuWBwdO6etlz76XG6D7D53KxQvm8LW7n+T6nz1VMdU+\nBDPIlgdgpskyu0D58yhPYBkVXXEx7ryTZlYEmvJyvlB7qphOrlrKysyi9XFXu/vSxPO8So+LJiVi\nErAOOIMgGKwCPuDuj0bOeRdwGUGvqlOBr7r7/LC31Y3Adnf/ZM739SLvS8ZXUmBqVVVVfGBcfDqQ\not4nvqJfeX6kjy2Yw9/VOeNv3jRUm5Op7KqzjgOoOnAw6fykzy7pM46/bvzziLrizGOrLmWc9rdT\nKjkXRKa1T0tjNzIz3D3TH0+hJQ53329mlwF3EHTH/Za7P2pmS8LjK4DbCYLGIEF33MXh5W8FPgj8\n2sweCff9hbvfXmSapf2NZ1VAq6rJalVJledHguL6/lebkyneyyr6hB+fBSDP65cllbo2bK9cQ/3+\n4W0V21P6ejls2gGcd9JMDBKrumo1flebKqaTB+oVpfA2jjCjvz22b0Xk/w5cmnDdTxlbIykyrlpV\nTTame2nGKqki01B+z6S0rdmwg+Urh8b0wKr1+kmSFkqK2zdSWaNw6enHpHYfhuSeY+W2mPL8XNEV\nFy9eMIflK4cmxMJMebV947hII5r9tNiqeu74+yRVSRUtbebY8v744MArzzyWK848dnR0teMMb325\ntFBtCviytEWqDp7Sx/Y9le0m5dLOxQvmjE5BEx9gWQ5QSaXFpGBS/n98huPodROdAod0tVrTOuQN\nLK2qJkt6n1a8b5bPI5q2+NN9ebBbeVbZeKmh2hTwZWmLVE2fOnlM4Fh82tGJpZNyI3w0QCWVoNKC\nQLUp0DtpoF5RFDikq+UdFwETuxoi7+dRrTorOrJ8wdwZFSPL08R/P9ESSsm9okfUgrkzqk7fUZ4F\nOSqpBLV85VDVqrV49WD/jKmjS+pOdAoc0tUaHXA30eT9PKpVZ1Vbx6SW+O8rWkIplbxqb6ksbU9J\npbjRaWNii1gtmDuD6y84pbAea51OgUO6WqMD7iaavJ9Htaq7egNy2u+r2sjxpBUa8y7kFF3Eqp7x\nORNNoeM4xovGcXS/ZjV6j+eYkGZrxmfSrM+j0fEuWe+lVeNqJoK2GcchUpRmtU1001NlMz6TZn0e\njfY+y3ovqmocHwoc0pGUYYzVTp9JWrVSNJhUWz42672oqnF8KHBIR1KGMVa7fybVxkwklSwmwtTk\nnUyBQzqSMoyx2v0zyVKKKO+bCFOTdzIFDulIyjDGavfPpFopImlfu9/LRKfAISINydoDKq0U0a6l\nJEmm7rgi0hB1ie0Oebrjpq+oIiJSQzv15pLWUOAQkYYkLUMr3U1tHCLSkHbvzSXNpzYOERFRG4eI\niBRHgUNERHJR4BARkVwUOEREJBcFDhERyUWBQ0REclHgEBGRXBQ4REQkFwUOERHJRYFDRERyUeAQ\nEZFcFDhERCQXBQ4REclFgUNERHJR4BARkVwUOEREJBcFDhERyaXwwGFm7zSzJ8xs0Mw+k3DczOyr\n4fFfmdlA1mtFRKT1Cg0cZtYLLAPOBk4A3m9mJ8ROOxuYG/5cDCzPca2IiLRY0SWO+cCguw+7+17g\nZuDc2DnnAjd54H5gmpkdlvFaERFpsaIDx0zgmcj2xnBflnOyXCsiIi2mxnEREcllUsGvvwk4IrI9\nK9yX5Zy+DNcCYGZLgc/F9tWVYBGRicrMPLJ5tbsvTTzP3ZP2NysRk4B1wBkEmf4q4APu/mjknHcB\nlwHnAKcCX3X3+VmubQUzc3fviiike2lPupf2pHuprtASh7vvN7PLgDuAXuBb7v6omS0Jj68AbicI\nGoPAHmBx2rVFpldERGortMTRDfTU0Z50L+1J99Kemn0vahyv7erxTkAT6V7ak+6lPeleqlCJQ0RE\nclGJQ0REclHgEBGRXCZs4OimyRfrvRczO8LM7jGzx8zsUTP7ROtTPyatdf9ewuO9Zvawmf2odamu\nrsG/s2lm9n0ze9zM1prZm1ub+jFpbeRePhv+nf3GzL5rZge0NvVj0lrrXo43s1+Y2UtmdmWea1ut\n3ntp6Pvv7hPuh6B77xAwB5gM/BI4IXbOOcC/AQa8CXgg67UddC+HAQPh/19FMG6mI+8lcvzPgH8E\nftTJf2fhsRuBj4T/nwxM68R7AWYDTwEHhtvfAy5s83t5DXAK8HngyjzXdtC91P39n6gljm6afLHu\ne3H3Z919DYC7Pw+sZXznA2vk94KZzQLeBVzXykSnqPt+zOzVwNuAbwK4+15339nKxMc08rvZBewD\nDrRgYO8UYHML0x5X817c/Tl3X0WQ7lzXtljd99LI93+iBo5umnyxkXsZZWazgZOAB5qewuwavZcv\nA58GSkUlMKdG7udoYAtwfVj1dp2ZTS0ysTXUfS/uvh24BngaeBb4rbvfWWBaa2nkO9yJ3/+a8n7/\nJ2rgkAgzeyXwA+CT7r5rvNNTDzN7N/Ccu68e77Q0ySRgAFju7icBu4Fxr0+vh5n1A58iCIaHA1PN\n7E/GN1VSVs/3f6IGjkYmX8xybSs1ci+YWR/BH8133P2WAtOZRSP38lbgPWa2nqC4frqZfbu4pGbS\nyP1sBDa6e/kJ8PsEgWS8NHIvJwM/d/ct7r4PuAV4S4FpraWR73Anfv+rqvv7P16NOuP5Q/A0N0zw\nBFRuUHpd7Jx3UdnQ92DWazvoXgy4CfjyeP9OGr2X2DmLaI/G8YbuB7gPOC78/1Lgi514L8CJwKME\nbRtG0Oh/eTvfS+TcpVQ2KHfc9z/lXur+/o/LzbbDD0EPkHUEPRL+Mty3BFgS+VCXhcd/DZycdm0n\n3gtwGuDAr4BHwp9zOvFeYq+xiDYIHE34OzsReCj8/dwKTO/ge/lz4DHgN8A/AK9o83v5fYJS3y5g\nZ/j/g6pd24n30sj3X1OOiIhILhO1jUNEROqkwCEiIrkocIiISC4KHCIikosCh4iI5KLAISIiuShw\niIhILgocIiKSiwKHSJ3MbHa4yNINZrbOzP7RzM40s5+b2ZNmNt/MpprZt8zswXCW23Mj195nZmvC\nn7eE+xeZ2b2RBZy+Y2Y2vncqUkkjx0XqFE5FPUgwHfWjwCqC6Rs+DLwHWEwwzcZj7v5tM5sGPBie\n70DJ3V80s7nAd939ZDNbBPwz8DqCNSt+Blzl7j9t4a2JpJo03gkQ6XBPufuvAczsUeAn7u5m9muC\nle9mEczaW16y8wDgSIKg8L/N7ERgBDg28poPuvvG8DUfCV9HgUPahgKHSGNeivy/FNkuEXy/RoA/\ncPcnoheZ2VLgP4A3ElQZv1jlNUfQ91TajNo4RIp1B3B5uZ3CzE4K978aeNbdS8AHCdaOFukIChwi\nxfproA/4VViV9dfh/q8DF5jZL4HjCVb4E+kIahwXEZFcVOIQEZFcFDhERCQXBQ4REclFgUNERHJR\n4BARkVwUOEREJBcFDhERyUWBQ0REcvn/LoeoUWOZMN0AAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2399,7 +2398,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 39, @@ -2408,9 +2407,9 @@ }, { "data": { - "image/png": "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\ng/YIuXYBdJEAAAAASUVORK5CYII=\n", + "image/png": "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\n9OnTh2bNmtGmTRsuu+wyioqKSt/PzLjvvvvYdddd2W677fjDH/7A3Llz6dOnD02bNmXo0KEbrZ8J\nSggi0mBcccUVXHHFFaxatYq5c+dy8sknA/Dmm28CsGLFClavXk2fPn0YOXIkI0eO5LXXXuOrr75i\n9erVXHbZZQB89tlnXHLJJTz++OMsXryYlStXlna8s97YsWMZMmQIK1as4LTTTiMej3PXXXexfPly\npkyZwqRJk7jvvvs22ubll1/mo48+4t133+WOO+7gvPPO4/HHH+ebb75hxowZjBo1KqPlo4QgIvXe\n4MGDadasWelwySWXlLteTk4Oc+bMYfny5eTn57P//vtv8T0ff/xxrr76ajp37kx+fj5/+ctfGD16\nNCUlJTz11FMce+yx9OvXj9zcXG6++ebNemnr06cPgwcPJhaL0bhxY/bee2/2339/EokEHTt25MIL\nL+SNN97YaJvrrruOJk2a0K1bN7p3786RRx5J586dadq0KYMGDWLatGnVL6wKKCGISL337LPPsmLF\nitJh01/e640YMYJZs2bRpUsX9tlnH55//vktvueiRYvo0KFD6XSHDh0oKSlhyZIlLFq0iPbt25cu\n22abbWjRosVG25ddDjBr1iyOOeYYWrduTZMmTbjxxhtZvnz5Ruu0atWqdLxx48abTa9evbqCUqg+\nJQQRaTB22203Ro0axdKlS7n++usZMmQIa9asKbcP5rZt2zJ//vzS6W+++YZEIkGrVq1o06YNCxYs\nKF22bt06vv/++4223/Q9L774Yrp06cLs2bNZtWoVf/7zn+tcHxNKCCLSYDz22GMsW7aMWCxGs2bN\nAIjFYuy4447EYjG++uqr0nVPPfVU7rrrLr7++mtWr17NjTfeyNChQ0kkEgwZMoRx48YxefJkioqK\nKCgoqPTL/aeffqJJkybk5+fzxRdfVNjvc1Qa7g23IlIt9fG5kPHjx3P11Vezdu1aOnTowOjRo2nc\nuDEAw4YNo2/fvhQXFzN+/HjOPfdcFi1aRP/+/fn555854ogjuOeee4DgYbd77rmHU045hTVr1nDl\nlVfSsmVL8vLytrjvO++8kwsuuIA77riDnj17MnToUF599dVaOe50qQtNybiqPmimB9PqHnWhWbHV\nq1fTrFkzZs+eTadOnSKLQ11oiohEYNy4caxdu5Y1a9ZwzTXX0KNHDzp27Bh1WNWiKiOpEZluxkCk\n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\nSUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2443,7 +2442,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.11" + "version": "2.7.6" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/post-processing.ipynb b/docs/source/pythonapi/examples/post-processing.ipynb index e735003cfa..0dc18d5a29 100644 --- a/docs/source/pythonapi/examples/post-processing.ipynb +++ b/docs/source/pythonapi/examples/post-processing.ipynb @@ -15,13 +15,12 @@ }, "outputs": [], "source": [ + "%matplotlib inline\n", "from IPython.display import Image\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", - "import openmc\n", - "\n", - "%matplotlib inline" + "import openmc" ] }, { @@ -349,7 +348,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AECBAFHJ/0NHcAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDQtMDhUMTI6MDU6\nMjgtMDQ6MDCheDXLAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA0LTA4VDEyOjA1OjI4LTA0OjAw\n0CWNdwAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAALKSURB\nVGje7dpLcqQwDAbgHHE2YeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmN\nP+HDhw8fPnz48Kf6VH9G+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4\nzPji99z0/AJ4n1lfvJ6fnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6\npA0wfln+ho/fwgYYn19C/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tN\nDbSGz7T0SBEWw4vLXzbQ6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X5\n8wZaxWd1+fMGiuFvir8bvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV\n873hB8UnM3xzANtf8nb4dwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7\nT/ppARBvp48UwJnelT5SACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4/\n/Jve+fhsH6Ctv7n8PTzjvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V\n32/o9+fl389Xnx+g5x/o+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6\n/4Le/6D3T/D9V67Y/ZsVQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/\ngPs/0P4TtP8F7r9J3AIO9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTu\nf4X7b+H+X7T/+BPuf3aM8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIw\nMTYtMDQtMTNUMTE6MzI6NTUtMDQ6MDDR46xaAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA0LTEz\nVDExOjMyOjU1LTA0OjAwoL4U5gAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -459,8 +458,8 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 9a6ecd72597338b40d2b72378e5ad6dd65df2364\n", - " Date/Time: 2016-04-08 12:05:28\n", + " Git SHA1: eeb5091ca3a34cc85df73a3318cae2b6c7097413\n", + " Date/Time: 2016-04-13 11:32:56\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -597,20 +596,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.3700E-01 seconds\n", - " Reading cross sections = 1.4300E-01 seconds\n", - " Total time in simulation = 4.3618E+02 seconds\n", - " Time in transport only = 4.3609E+02 seconds\n", - " Time in inactive batches = 1.5047E+01 seconds\n", - " Time in active batches = 4.2113E+02 seconds\n", - " Time synchronizing fission bank = 2.4000E-02 seconds\n", - " Sampling source sites = 1.6000E-02 seconds\n", - " SEND/RECV source sites = 6.0000E-03 seconds\n", - " Time accumulating tallies = 4.0000E-02 seconds\n", - " Total time for finalization = 2.5600E-01 seconds\n", - " Total time elapsed = 4.3701E+02 seconds\n", - " Calculation Rate (inactive) = 3322.92 neutrons/second\n", - " Calculation Rate (active) = 1068.56 neutrons/second\n", + " Total time for initialization = 3.8100E-01 seconds\n", + " Reading cross sections = 8.6000E-02 seconds\n", + " Total time in simulation = 2.4400E+02 seconds\n", + " Time in transport only = 2.4395E+02 seconds\n", + " Time in inactive batches = 8.3260E+00 seconds\n", + " Time in active batches = 2.3567E+02 seconds\n", + " Time synchronizing fission bank = 1.6000E-02 seconds\n", + " Sampling source sites = 6.0000E-03 seconds\n", + " SEND/RECV source sites = 7.0000E-03 seconds\n", + " Time accumulating tallies = 1.9000E-02 seconds\n", + " Total time for finalization = 1.7400E-01 seconds\n", + " Total time elapsed = 2.4458E+02 seconds\n", + " Calculation Rate (inactive) = 6005.28 neutrons/second\n", + " Calculation Rate (active) = 1909.46 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -867,7 +866,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 24, @@ -876,9 +875,9 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW0AAAC4CAYAAAAohb0KAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3WmsZOlh3vf/2U+d2vft7nt3316nl+nZOTMckkOKpGQt\npGzRUuIYMZIACQzEQQDHdpAgH2METpTEjiTTkkXJsiWK1JAcLsPZe++evn27775vte/r2fLhEoGB\nMLAgkj3NqH5AfbgHBbznFh48VfXWe94juK7LwMDAwMDPB/HjPoGBgYGBgb+8QWkPDAwM/BwZlPbA\nwMDAz5FBaQ8MDAz8HBmU9sDAwMDPkUFpDwwMDPwc+YlKWxCETwuCsCQIwoogCP/gp3VSAwMft0G2\nB55Uwl91nbYgCCKwArwCHAA3gS+5rrv00zu9gYHHb5DtgSfZT/JJ+zKw6rrutuu6JvA14As/ndMa\nGPhYDbI98MT6SUo7C+z+e3/v/ejYwMDPu0G2B55Y8s96AEEQBtfJD/xMua4rfBzjDrI98LP247L9\nk5T2PjDy7/099KNj/y/D//Xf4szf/yI3ms9gGjJeuUbxjzL0DjwQFOAioAL7LvEre0SGiwTEGpv7\nE5R2E7g7CgRFvJk6Y3Mr5N/KUPggDT0BAgJi2kY/2+HLI/+KL0b/DX9hfo73F15i4b/7Onz5H8ND\n4D2Q/0GLZ6++y3+s/i7/7Bv/JXed8xifq9P7p176BzrOb0nMj99jJrpIXMozKuzQ6+t8tfybHKwN\n07+n4/5QRLjsEP2VIr+a+gMCnip5J0GlEWHtaJaF7aegDbFv/j2+8n9m+O7XPsty6ST9pzWSo3vI\nap/DXJbz+m1G/FuUghEmpQ2S5NhjCBGbbsvDWwufYiS6xfzYPd7MfwpEGA1u0dM0HEkEFw6qWUTB\nIRPcI0KZUXbY/ye/y+v/+AIN/OwwwhB7SNh8yFVCVDnJQ17mB6wxxXfN1/hu8TOgO2TCu8hYzLDC\nJW6S5pDN3jjfqn+Gpc0zFBpJLFkim9lG3HXY/VcTiPMOcsBCud+n/+7/hPrUf0s/osIk4APzmoob\nF9HOdRg7t0rTDrC/O4qw6IAC7rgIaRN/skoieoS338ZBoqoGqW7FaS/4ca5J/N0v/DM+c+UbBKmz\n3RpjxZ5hxTvN/cIFVtPzP0GEf/Jswz/6WYz/l/BD4KW/RuN+nGN/XOP+kx979Ccp7ZvAlCAIo8Ah\n8CXgyz/uiblHGW5+4yrqq21ORVYYdzb4znO/wMGbw/AGEAYc4LtQ9UexgyJCyMH8vgfyEtLrXZwj\nFack0bYN3LMOsreNddOAnoDXbfJU/Dpi0OT7/Vd5Z+cVtncmoA9kHAgBQRHb9XBv5Qr/I6McTCax\nEGk+DOP/bBWP26LairORn8J0Va7E3uUj+SwN2c985D6eEy3W49P0pw2MVAsjVeWhOoeLQLETo/yt\nJPXlMDQABbo1nUVhnvCrRcb3VlnZPElZjCOILs4jleXNeTp+H09/5V2CoSp1AhySAgQcXUA92aIq\n+1nonaH5UZheV6eb8jNyYoNT4QXOcJ9rvqfZE4YwUdhxR+mj4bpePuQqOl1e5w0S5Glj0EXnI87y\nJq/RwUMPja6kkYgcEBDrTLBOln2mWGOaVZp4KawlufuDK4RfKJGZ3KToxKm8EcMqKLh/QyQymSMT\n2mX0pW3W3GXG/4vvsipPIXpcnJLE9uIUvQce+gsqO2sT2FkZIeTgebGO05Tp7vpAldENk0SkwM72\nJJJgMT21xF6qQ76aoX43yp44xHs8R5E4a7fnODzKIH+qQzui/QTx/elke2Dgcfsrl7brurYgCP85\n8CbHc+P/l+u6j37cc/u2h6KbIHCtQslJ4HH7jD+1jjrVZ2to6vhTdgtwwWzptOoByrpJL6Tj9kXc\nikTIVyEUqBCUakxG10GCJWGe0m4CqytTykVx9VmUUB/F6ONL12nFbEKjReyuQsOK4PYk2g2Do6E4\nXdODgoVPaeLJNDGkNmMH2xwoGfK9GA9Xz9C0fHQdnahQIhYrER0usRsZQ9V7hDwlemiUc1FyWxkU\nr4WUtMAC/NBzdJbvnSI6lmd4fJtTzkNudy+zXRyHPWhpXgrpGIdSGi8t/NTx00Sni2i7rNXmKC/H\nqa1E6fYMzIiGFVUo9mI0+z4k1UJWLKKUSHPIkZsiSok6FQzaNPBTIM6ItYvUc9lsTmN4u0R9RVaY\nQcDFFiVUrUeYMmkOMWizWxll6WCeRsnPg/unqV6LIo1ZiLqN3VHob3gIUePC6Vs04h4Uo0eYEp5Y\nG3+mjrmmY1YU3IaIExRBBbci0XF9aIE2gVQFqy1h78mwBgRBlBxk16JX0ulXNPKlDK14EEtTcOdt\nVowZCkcxKkdRCp04ba8Xz1EHX6r2V43vTy3bAwOP2080p+267reB2f/Q88QXn0cat6n9XpTqapwN\nzyyvD/8Z+miXrecmIQ5owAkBHIF+SadsRJCeElCPTPoPNMIXy2SndzCkFk9xm0C0Tucpg67sobiQ\nYuHmGaJWnuyVXYZSO8jBLo0vXWBoeJtWOUCjGEY4cvGrNYZn19m6PYNtycTPHCJqNkk5x8WZW7xX\nf557Bxe4ff9p3LoIJmwp8JmLX+fp9Hu8pz9H39XwWG0aboDOto/WrRAzn3tAd9ZD/XoYImD2P8nu\nrXFsQ2JicoNfe+prNG/7OKhlcG0BLli0z2osGvMkyDPEHgnyRCij9k1u7jxD8ds+zO8r2C/JkHQg\nAnknwaY5Tkbdp0qQOEVe4B32xSw+mqifaFNghwXnNG87L5LoF/E0+7yde4XXEm9w1fiA37f+FpLo\nEJbLuAjIWKj0KBPhduEKP7z9SeQ1E3nHwqi2qG5HcRwRqWkj9V1SyQM+kXqT98VnyfWTdBSd8PPz\n1MphSjcSNPoBXFWEKGjTHbRGj/4JFd98lUCkTPM7EeQHYFUsTEUE2aVb9GDXJeo7YRbvh+EUMGbD\nZZM1phAPQL1n48w6OGmob4XxCq2fJL4/lWx/fMb+mo37cY79cY374/3Mf4gESP7qFLHWA9aPZmgn\n/HQ/qfPOw5cxywrkOJ49HOJ4imQP3J6AnZQ55V9AcW3uFS5x2BzG2leYzSzyoXSVSi3KzsMJGreD\ncLcHi7uM9x5w5uI+H5ZeQJItXvxMjoj8EVvWFJv2DMbZOjOJR7zGt/mT/K+zfHiC3cIEz5//IZeG\nrzHPAx7cPkd/2cCNCMffACQgBj5/E7/T4KiT4qA1jNCSsPoy3boHMXBc+s2qn/U8EAXP5y8TCu/T\naAa4s3sZZ1SgM60wm16g11Mp7KQRHriMX9mkZ2gscoodRghQJ64XePnkdziMZVl9ZZrt705iNmU8\nIw00rYuq9GnjZZZlopTpoqNgUiJK+6Xf4ogU+V6KzcI0nYCfYKiMY1h8qF7mQfcE65tzjIQ3CWUq\nCLgckcJEIUwFU1KQgxbTn3/EmLZBpn/Ae+HnqOhhEuRxLwnIqsnbyotsbUxhd2Wqs2EKc1+iWEkQ\nfjWPaPap9QMgwFXhHS7L11mInmbXl8VSJP7uc/8r6lmTZXOWteQkh7ezLP/OPO1P+mAGMDl+E+8f\n50dULKKZEmfiC2y0p9ksTUJPoHwYfxzxfUKN/TUb9+Mc++Ma98d7LKU96t2iWE/gpCVQwHZkcmsZ\n6AK6e/w1OQYYwCPgIxG3pyB/wiSYqjE6uU5H9ODYIgc7w1SMMOV6hN4dL25NglQPmhrZcJ5L3KQg\np2krHoJqDT8NvEYDb7pOLJsj7d8n7RwSSRfQSuO0r/mJZYsEhurcd85Q8MSQEibe4Qa9Qw9mS0UZ\n6VEP+dgThuiLKq4sYEsSzWoARwFjpontFXBNF2WqjSVpSKKFPtTCOlKomgFutC8TMcrowRYWAjEr\nT6xZ4rJ4nQJx1q0pdlujhNQyksfifPguSrhPOROi2IjTVPzY2zLmkko/qWG9KJOggEGbQ9J08HDU\nSPNwfx5/qobksQmqVQ6UFDXNywltkRIRKt0Qc/pDgkqFnqvSsHx0bIOqG+JZ9X1GglvUJoMER8t4\n/Q18dg3pgY3bEmHeob/moXEU5KAwTL0cQnYctqwpAlqD0cAmTtrFLCnUtkKwBNrJLv7LNRS6ZNkj\nToGh5A6dpIHkWFh1la7koTui4x+roUyauEC9EKKHiiRbnNdvc1J7RFwvUC8E2c6P4dwR6Xk9jyO+\nAwNPlMdS2iONPa6VXoRLwA5wF+iBkHEQpxycD0RcnwjPclzaSyLcEymF4+ivdzk5eZ+m6CVfTLF+\n4wS9kIbbE+ERyDMm8ksOjpMkPuxwUnpI16+zLM6y72ZRsHBDLoFAiaR4iNduUTXD6KeaBNtFrG8q\nGPU2BSvGV7u/SWPOh3GqRsxboHwnSeMohD7SYC+YoSuqyIZFxthF8MD23jT9oIwy06ashTH9Ct54\nle6tAGLTBgGC6SKdjsFRNY0oOBhyiwZ+Rqd3OMc9nuYa7/ACeTPBYW4EM6SS0HPIWHiENoavhe+L\nNdpLBq13wvA7NuErVZwXRGQsuo7OijNDV9LYL41w7/1LzD29wOTMChPJNbbcMWxb4qrwIZvCOBU9\nxOuTb3BImpv2JSq9MOVehIDdJBHKMx1bIRgrs8o0RWJYtkz1vTg1IYIz4dK8HqH3yIOgu8gZG9Nw\n2Nye4Zee+SPmR+5yh6fI1TK4Cyr8Hhz+jSEWnjrNkZjijLBwPJVDhhVmWHJm2cxP0RnxEPzvC6Tl\nQwyxjYnCVncaqxNGlk0+pb/J8/o7rDCL319FljrY7wqIcQfzcQR4YOAJ8lhK+70/fvH4GjMV0AEP\n4IfoyQKZ53bYOpqmboUgyPHyPxHYhvw/zVK/FUH5Sp/wUAEj0GT64kMOVocp7SVgAp6Zf5enTt5g\n383S8Hj431v/KSvvnyIUKzN6foP7nTPs1saoVSK4GYlSLsHtd69S9MTwBRt85u//OatDkxztPkv1\nZhwrraCM1gnoDZgScZPQafmoyDHEgI0LjLHNiLZL6ESVzfwUhfsJWnNVjGCLrLZP6NRDeqLOPmki\nlImpRabDqxySpmn6CSk1cr0k79rPU/MEEQSXUXuHg9Y4Dd1P1Q2RFPKMsIvaNNl4c5au4IHLJngk\nnKxMB52/aL1OJR+jvhlFnuvQdTy4isju4gR2TUF96h75UpqjVppiIsakscYp5SFBaoDAnLhMV9dZ\nbc5hVXRS3hx+tcYhGVIc0UVHEAWEMQdrUaPxP8QQrlj4f7WMobc5r98hIRU4spJEIzma+GjhxfQq\ncMpF/G967ARHYBM+n/13WB6R7/Aa06wyxTphsYaUcTEFmXFlA1mwyFlJ7nfOoCVaRKsWpcU4P5h+\nlbXsFGUibDgTKCN9kv8wzwX9Dl///ceR4IGBJ8djKe1SP0IwWUQQoKfqdBQvxFyCJ8pMDa+QD6Sp\nl0LQ5PinHxPIQbvno73lg++B/EoPeaqP5co4RREOBTDA9EvYfkjLe6yYs6xU5wjLdZyuzM7uONvN\nCepOEF3tkhDzeOUWpsfDkZCGIKQu7nNonaNwlMDVwLVE1I7FqLvDjjNKoZfGrGtYkooTkBBx0ekS\nkipMRlZpVQLkylm8ZpuYUECWTJyIhAtEKKNgHq+6yImIYRfJsOl0PJS7UYoIKLp5vHJDajIRWMX2\nCASpYSHT6AbYbY7Rl1WCoSq+yRpCXEQ3e2yvTrDVH6fRDSCrDkLXRhYsohN5GnU/h1Yao1OnZEcR\nBJeUcESWfQLU2CeLiklaOORITtLQQtQJ8+jdU4i6zfboGP5kjbhRwON2uVfp4OxK9Pc9yKMdnKSJ\n45XouTqC4pJN72JLEgdkKRHF768zO76IfKpHuRUj301QtGP0bZmiFOMES1h9hVw/jaZ38cl9vDTp\nYCDiEBOKpH2HKFgUiylE+Xje3ULG3NFwKzLCGQfTVR5HfAcGniiPpbQDz1ZJntxDOOFSSiTpegzc\nEza+bJ2ss4fH7EIV2HThhHt8VisCPCsc/xD4r8HMKFTTEQ4fjWJvylBwIQTXG1fYaI3wSf93qTWj\n1JtRvvzMH7B+MMMf3v4KNCE4WSL77CYvum8xFthCnHT4l8XfokiMihjGrzVJD+/jplyau2F8vSYn\nWaS0k6S+GgUNVF8fg+Ov7i28lNwoKXIcigUkxSYr7JNx97CQuWFfxnUFTsoP2WaMncIY+feynLh6\nn8hImcXqPKalYagt+q5KhRAhT5Wrk+8gYSPicEiaa83n+F7j0wQ/mWfcWGGKdcSow8bSNNffeR4M\n0Cba+J8t0diJorpdJp5ZYqs2RqGd4G7rHB5/h7PJj/h7yv9GWzBYZpbrXGGSDSbddXy0SAf30Nod\nfv+3f5OaEEH75S4vvfQm454NZu0V3r3+Ciy6cA6s2zrWiofWPLxlZMlkdnk58G0qWphD0hy6aeb8\nS5wMPETB5L7/DHfsC/yB+euM2tuck+7ho8m9zkX+qPw3OZG8T1QusMMIdYL4lCYvKO+QZR9fqEH/\nokqOJHU3iIhD7Wacw+URihmH7/U+9TjiOzDwRHkspe2MinSbHqrvxkjoOeavLnDfM8/+xhDfuvYF\n8ttJ2HQQ3re59A+vw2mBm7tXce8LUAOGIBnM4bUaFJpZPOeaKCf71L8bxX6k0PSFWZyfp5yP09tU\nWQtNc9jNoLRNpucfIo2YlN0gb/VeIixUCalVPIE2WfZo4GecTcaFTVblaZZ357HKMo0xPz1ZhR5w\nH4aMPc7N3KJIjBhFopS57T7FI88JrITMmjrFIUlcR2BM3KKz5eXGB8/RwosW7XLmudv8SvyPOGve\np9v2cct/nrvBs2yI4wi4uIiUiRKlRJIcOl1m/Q+Ja3kO1CQnWeRlfkCOFJFMhd7LGptH0zSKAep/\nGGP4/Dax0Tw+ockL3ndxdYF9MvQlBV3u8DYv4qWNhUyUEh083G+f5cbCsxStOH1XpX3SBwpYPpmH\n7gmwbPqSRv1CAG2mQ/D5ErVchF7fezyVVYfyUZR3v/kKVkOi0/LQ7hk8GDXIz2YZmtqk6fESkir4\nhSanxEXOc5cRdigYCUbkdQTVJkaRi9ykQQAfTSZZx0uL1c4M/7b4ZWrlEJYtQxRKRgwnJtFb85Ea\nOvz/ukxxYOD/tx5LafdsjeZaALctkIjnmRteZKM9yvbWBMU/TYDdArMBigdvsIF3osX0C8sc1jM0\nVoLgQG/Lg6Q4uGURYiB4XGiB1u+huBZ7uRG6TQ+oLgUxjurtciZzB99oFTMq4bhQIE6VECly2HkF\nuy6x6/hIDuWJh/OMSVsc6Vmqngjbwhj+YJ2z2dtUq2EU2aRajVLrRwgZdQTDYbs/SlkL40vUyGp7\nCNgUhARTwho1IcxN5yq9sgfd0yU7uoMmdnG6ArreQREtNLtPgjxJcig9k+v5qzR9ftRwn2F2mdLW\nEDWH7/MKfpokyRGmSjPg477vNH61ioiDVu+SMfYIect08GCoLUTXQbFjKKKJJvaoEMZEQcSlh07e\nTlI2o+ScJDU7hGkrOI6M6LOQsn26uk6JKHtilt5pBU1sEzxbpvORj17NA0kHv7eBeOiy83AMNy9C\n14WwQ/euTm3VT+dZDTcsYGkywnAD3dPF43ZYNyfZ6Y8gWC6CyvH/QI8xFpAxqRECXEpHMRbfOE2n\n74UocN4lns4zEtiioMdRfL3HEd+BgSfKYynt5qofa0tj6gsPyWR2MNw2Tl/E2hHgnS6wBVd03L8z\nw8b4JFOJZT798td5c+xzLP0gCL8Nq//uBEy6uMMifUk9XtPdg9hoieBshZ1rk1hREd/FMn2fzLng\nPcaGt/hz8Qs4SJwRPuKRdgILhZBb5cGHF8g9SIMJ3l9u4z4FYSr4ztQ4sJPc0c/z6ey3+Vzm69x9\n7gK3Slf4YPsF3DI8PfQe6kSPZtuHJPcZTW3xG3wVG4nvCa9yikVyY0kSw3sUrmeRXAdd6PLnwucp\nemI0Mn5quRjRQoUvZP8NT4sfYDVUrn34IntTo/jCDX6BbzDLMj00/oLPss4ki8xziZsEqZETEniH\naiSz+ySezuMTm1jItDF4yEkajp9cP0lKOWJKrDHGNj00jkixziR7vSFqbpDoxRKC1aeyHcZc8CKf\nMvHOV0ir+4TEKm0MmLNQaKPSR3zkQN1BmOiRGdpEj5o83D6HaWiQcuFTFvwfFr3fFdhYnoG4iJi0\nqP9agMRQnqhb4s9aX2SrMonQkJkbX6CihPiAZ/g7/As6ePgqX2GCDWqPQlj/CJhyj3e2fsrm1Kl7\nDPu2edt9iZaoP474Dgw8UR5LaXu8bYzLLY5uZRFGoXQ+iu7tEDlTpfSVBPSHiZ8uMvnSu+zXh1la\nnac8EiH/ZgL+rA+7LYzXTcK/0CDly1ExQlTdEMKEi2UrlJYSRCfytOpe2jdCrKTmkdMu/YjGQWEY\nn9zEG2zT2Q+Q66Uoe1J45luMTG5Qd/y0Rg2qhBhlm3FtA8cV6Aka68IkB3aGrf4YhwcZ7F0RYdii\nFfRQEwKkvQdMiWvMCUsEqNPAj58GO4zQFTTOCve4pXhpOH5WmaK8laC+HcbcUzDrGka0y+HrKfaU\nYRAFTK/CnLrMVT5kjSkOyOAiYHK8WuQdnucOF9jMT3C4PIrwoYse71D9cojTygJORWJjcxazp2Lq\nEt2szOnAfa4qH2Ijs8YUbQw+wQ9QVZO2ZLAnZ8lLSfLpBAf/2TAt00f/gZfodJlkKIfk2gzrO/RR\niVOg0khQWwjjHmkcTYyiZPsoV9u4u2CVVFiSST1ziP90jZ2jaXp+Azst014L8OD+BQ7KYxzFRrDQ\nUXsmw4ldZgKPCFPhiDSHpOmhcWf3MpVyFHtOI/S5EuqrXRpxH6rWRbSgU/Az4V+j8DgCPDDwBHks\npS1YIHtM5K5LtRShdhRAj7RRUhack/FENXzTYIw2kNYs2qafnJugU9WhA6QcxEkLZa6P4avjlWpk\nxW3UqT6V1QSVfAQ128YQWpgFHdF0sGyZpusjaNXRhQ5tDDSzh1AXOawMcXLyHt5oHYkYXhpI2NQJ\nkJRzeGlRIspuboSD6hA1I4jfajHq2aAeNzD8TTT6qK6F1HNxuxKmR6UtG9QI0sbAtiScvkwgUEMW\n+8iCBaaAVVLoPjCgKNId1tl9dZggVXS1j5rpkg3ukmWfW1zEQcDjdKm2ItQbQfa6o2ipDuVunEYh\nAlvQ7Pept73EcmUoiBSKaeyWjBTq4cnUEEzoCTpNxYctSsSdAi+Y7xGTirQ0g1tcZIMJPMEOjVf9\niEc2vv0uimOh0SMilNHkLrVGmPJhFEeRECI2ctci2i4RlQqIM322tGly1hCsS0iXQHnBQfgQdG8b\nLdml19LIb6Q4ephFf7GNFuqCBKJwvIyy63q40b3CvjlMxY7SbAdxoyKzn10m+9o2yrkuW+YYpq1x\n1M0gmQ6aNZgeGfjr57GUdnvfh7xu8/ynfkChmeLOtYv4ny1jNVTEQ5vESwc4kw7XW1cYGt8jpe6h\nSj2WXjXoZP2QC9PUXbrLYcqzYT7h+wFXxOuEqFIcj7E+OsVN+SKZyX1Ojj1CEXsoooUkWownN9kT\nsiwJc4yNrmJILa7fex4t28NLiy46J3mIQYtbPMUVrnOKh5SIUrmZpLSYwXlOYG78NvNn73FXPs+U\nuMaktcG75VfYbo6zYF9gfHiThs/LXc4TpUS752OtPM189j7zxh3SwhGPJk6wIpxgb38C+0CkW9TZ\nsUcQsQkbFeLzB+ji8RvGIWm8NPGYXbZ2psk9yqDudrn6xbdRgjZbk7OQAkeV6DYN7vzJFciL2M9J\nYILu9kj7D3mn+xLvt19gLrrIGfE+l+xbXKzfR9Z7FPxhZlnGQaSFF4/aITJUYjq9xp48RJUQZ7jP\nCRrc27nAn/3bX8N6BuRXOvhDdX5R/mMuy9epyGG+5vsNcp4hqMLh4TBHqSz2vEQ2sk0ysk/OTVHJ\nx+jfMUicOKA3JlNqxVgLTrBPmpbrpVhK0yoHsToSJ8buc/qVe5x94SOGtV36oso17Wk+PHyB3fYo\n2ewmO2QeR3wHBp4oj6W0P3Xpm9zoX6Ye9zMU3GJE3+amdIFCOoH2qRa1Rhh3x8XJilTcMLJjMSxV\nkB0LT7RF4uwh5Z04/kKDV0++wVXpA0JUeJuXaMh+Wnjpo3JABhOFpJQjKeTwdZvcu3kB1wczZ1ZY\n2T3B9sokbIH/ZIMxNplhhS46m0xwRJp3Ci9zu3aVrq0jpmyuJt+hn1VxQy4f2efYezRGN+ylOBwj\nGsgz5NlhyN0lq+6xWD1N/miIuh3Fb9Q5FXuAT2/SlP3soLJ/f4R2wUfyuV3ac15UpceYb5s5lgmK\nVUxRYas3xmZnHNXTpyMZbMljZFPbzCv3iafzrLw/y05xHLou4nMmaqaD19+gcRCh/5EOIkRfzOEZ\nblO+k6S56yeilBn+1C74XZbEWTpeL5Js0UWjQog8CWxBYowtIlKZDAcsl05xIMnkIkk2mGDJOkG/\npUHfgaJAezFI4VSC7ZFRDshQfhCBW0AYHF3CMDtMpZcw/A1cBfzU6c556XT8lKtx4sUjRlJ3ONrP\nkmsMYToKbhyI96GlMGGsc067x4y2zBbjLO6f5vb3L7PXHEGMO0wkNmkZOluPI8ADA0+Qx1La83Mf\nceAk0aUOfquBz20h7ApIQRvflQrd+36smgohqLXCCCIE/XXiQoFIsoxnvoFsWsTqJc4qH+E9arHf\nGOZG5mmCngpp+ZA0h+yWhnlYmccdEvEYHVxL5MHuGQLhOiOnNzmsDlFsxwl5y2hyB8U18bgdckKS\nAzNDuRljpzCFXVfxyC0uD3/AyeQCJgoL5hkWC2do3Q9iT8h4R+uc9C0wwQYj7JDkiIe1U5hNlXbb\nj1R3Gett0owbuH6BiFLGrsvItsXJkw/YkYbpORoxtcAwu0QokyPFVmeCvfoIc/IjFL+J44fJ6Cqz\n0WWS6Rx3b1zk6F4W+i7iFRPF20OVTETNAdVBcBz0TBM5bFK9PoS/1iCRzKE6fY5aGVb7Afb9WWJy\nkQB1APpoNPGR5oAADUxHoV4M0Va9HEbStDFoez2Ex4q0PD76JY3uDZVl+QTNrsxRXiZ3wzjeouAZ\nwAQl3yeeKYUbAAAgAElEQVQ5doBXb9JDO56bH9ERDAHjoEO4XyWsVCh20/SLHlpNHx6ngSfZRo73\nMbQmtiNx5KRZEWdYaJ9mcfUMimySDe3gd+tE5cGM9sBfP4+ltAtijE+IbxGiyv3F8/zpG1+ibRtE\nL+cY++IW5jmFYi7J9tIU7jYULYNaIsGX579KPHvE9+VXmDizQsLJs6WN8vU3f4nFhTM0fsPgFyf+\nhNcCb1Iiwnfvvc57119E/Q2T3qhGU/HRm9Y4NFJ8IDxDORYmFCkxE1rEMkQW3DPsmUMk5BxuXaL5\nUYS+puKLNhgfXial7xOmjEGb9eYszcMQ7obEZHCN1/kmM6wQo4ROFwcRLdIh6jukfJSi+FGCa197\nHucXXJ47/w7/SeRfIFyBTWecl7Xv873+qyw7s7RcL5Ygo9IjSglvq0t7L8iDowtMTzzi7LnbjLNJ\nmAp9VcU5/6Pbeq6B5LEwTY18MYxzUUI45yA93aGe8MGRiJMXOfXsR4xe2uCe7xz7K6OIBXj1/Lc4\n4XvIBe6iYPIXfJY7nGeIPWoEWXDPUK5ECOg1ykSYY4ns6AHqr/dYbJ8iv5qGnsK9Oxd58GYE+8++\njTnWhLOAAmxCf13l4FSGc4G7zLHEbZ5C8/U44XnAVHqdHXeE9+1nGJ3cRvd1eLh8lu77PvzJBnO/\n8pAtaYxF+xTVTpAJbRNPooPwBZexyDqj8XWOjCQzLD+O+A4MPFEeS2nf/MGzhLJVIiN52sNeJl5e\nwe82sLIiLdGLobfxR2vEnEPOhT8i5RwheF3UWI+11jQHN0apj4Uw0wo+oUldDFKqx+F7Lq2X/NQv\n+hEAQXDpWR7W9ufY64zgWgJ6rE2vp7F7bZzOoRct2cMeFtl7b5S248V+Bp4RPmDMs8Pi+Bl2lWHq\nXh+Gp3l8hZ+ZQnEtNpsTiLaL//kCDNsckMFBIkAd0XJ4tHOadXWCULaCE5NwTsp41RYnxx9wyXMd\ncIl7cuw3s7y19BqtmJdkOIctSHTR6aLTQ8XSRPRwk5OBR0xGV4hRJEeSDWeCKmGaMx7SoW3iZ/O4\noy5VOcwuE5AVCKo1xoeWialFtESf9it+5LE+9YCPSdZIRItYHhVV7bHJBHk3QdmNsipM4Qqg0sNL\nk1mWOFJGmC5v8Dff/2Nuzl2gEg1xMviAoFblaCJN4TMp8u00jYUsiM+DMYSUMjHmG/TDOv1djYO3\nRnCnFPYnR5EDPVLKEWGxTE0JcFjLUC3EkQQRSbRIzO5jhWQCRhWf1MQSZGTBQlBdpqVVBARu8QyK\np0/Kf8gsyyTI89uPI8ADA0+Qx1Laj74/hfaswERiibnhh1wZ+hC/0GBDmOAaTyPiYPhaxHxHnOMm\n4+4WLcfLB41neXR4CndXwo2IWEkZEwUnKUIKOBCoVCLsMIJODzcqoI722CuPILYdDL3JaHaNVslP\nbnMIyg59WaHSjHK4MIItiiSf2zv+gc57k9TEIQ+Y58hN4XVaLDlzLFlzVDth6MlEfEUy89uIhsUq\nMxyQJc0BUafMtdpVWrpBVtgm6K9hehXsCYkZ8REJMccqU3Qsg1bLz4PyOSYCK6TlPfqoNPHRxIeK\nScyTpxtXGVK38Ot1emjkSLLvZskJCfRUm+FMniF3j5Ido9vSQbbxJpvE9AJJPU/CyRMI1BGfsVlw\n56k7cU4LC1hxhTrHb3D7ZKi6IW5YV/CKLablFRwkQhRJiEUehc4w2tzi+f33uDV6nrIZwddtkdEP\n0cM9rL5CzQ3RcBJw/hKEBARPDzXYxRZlXFvCt9Gm7fWxm/aQdPfxCU16eCj6o/QtjUinStWK4A/X\nmBhbwRhrE3VLZN3942WOkkFNCjLBBragkJByRIUSWfZ5mmvUWqHHEd+BgSfKYyltVnbxXIhzxb7G\nJ53vcMm+RUmO4hca5EnQR6WFFwWLXUbYsCa4071A9U6CUK/Gy5/8NicCD1GUPvc4T2vKe7z3tgK1\n4QB7DOGhgzrXZjLxiPXFObRgh6GTm2S1fXJ2FuZB0vp08LC1PosZUtEDLRCgSJxNJlhhhhJRkk6e\nL/W/xofyFb7pfJ53j14m4i8wM/SIMXWDAnG2GKeBn3Pc4/Py1zHnVA6EDAFqBKizbk3yrdZnqHsD\nJNQcKY542DhNjhT+M2UUvYeFhIN4vMkSDU6zwLhnkzWmeXPvs3T8GpFMnlG2GBZ3iYt54hSRsWhj\nsNUYY7c7DJLDTGYRQ2tzv38as+EhJNQ4EV2gYCewHJmGGqAqhCgSI0T1eC7e2eF26yJD6h7Pye9z\nhwsomFyUbjE+sgrpPjescySNA3brw3xt/W8TnzzAORDY/b0JrNcEpPE+9i/psAHWoUL1+3GctEgm\nu89vXvrn+AN1dhnhjaUv8CB/Dr/T4Omr73I18j4YH/CW8xKKZHKBO7zED5lxV/BaTZalOZalGdaZ\nwkJG9No8M/dDJuR1plmlRpBvbH0R+N5jifDAwJPisZR26LLD+IkVxoxNfEKLpuhHFiwS5JllmSXm\nsJBR6bPHEE3RR1mJkB3a56T7kMuRG3RkjS17nEedE9T8fjwTdbx6C8Xo00UnTBXT0ijaCcyYxGjk\ngNOeBTYaM3TwMDe8QFI9oG+r7DbHsM9J+PQGWWEHC5ldhllhhiIxikKMt+UX2BezmJKMq7vUewGO\nSlmi8SKaenyZeYojhtlBE3tc8twgR5IWXlT6NEUfWW2fUi2OK8kkw3k+3XiTsFnFidrsyxlKRHER\n8NFEwqaPiiOKaGqPVPgASxNJs8+LvI0mdCkRo4dGnQA9NEa1LfxSgwY+LnlukJDyTFnDvNf6BB3L\nIByu8JRYpiV4WWaWtmvgCMdz4svuLKLgMKTtkZX2UTAZZxMJiw1hAkuTsDSJPHFC1DilP8BM6iT0\nQwqRGPtXh7k0eodEMs/2pQncEYFO0ctGfRq7rdCpeXg0d4Lp4DK+eoNeWaPeDdPRDB6+fZryRJTA\nhQrj7gYIcOimCbo1km6Ojug53oucGk9xmw4eupLOCc9DOnh4wDwqPUqR8OOI78DAE+WxlLbvqkby\n1AE6XcpEqAsBxL5LWzSOV1Ug0UdFcU2OnBSNTgCxBnNDi1wyrjPBOje5xIYzQa6XpCcq+L1VZvzL\n+KUGGn1CVDEbOgeFUQiaeMQ2wYMGe91RBJ/D+dR1pljDRSAT2qc/pKLTJU4eF4Ede4SV3hx1xY8o\nW5Tk4y1Nu65ONryNWfRglxU6YYOYWmCEHWZYJkKZPYaPd6WjyRZjNPAhyyZT0hrNUhjLVdFCPT5p\nf4/T1gI5IrzPMzziJA4iUUr4aHBImhpBqkqQeOIQD22G2OcMH6Fgsc0ouwzTwoshtHnKuEXNCfHA\nOk2sVWaod0DcKbGUP0NRiJEd22NSWafihvkd5z+ij4rXbtFvaqzKISxd4lnP+2SEA2wkRtjh0E1z\nhwvUCWAIbZr4CVNhyLuL31snQolNzwS3P3+B89JtRtxdRMVBzDq0uwbtZS/FlQT13SBvzb1MU/cy\nIWygyj08kSauXyT/VoqaEMR4qsaLwtv0UbnrnqdAnCMhxbY0Sp4EMhYTbLDDCC4CSXIscooVpmlj\nIKXtxxHfgYEnymMp7XozyCbjhKgywg661eMHh69hajLp9C5VQrgIOIjU2wGqD6LYb2hov2TiOd+h\nRpA4BS5IdwgFqtzduQwtgV+e/hP6kkqeBD6ayKZ5fFd3ZJY2zrC3NEHlhQip2X0cRI5IMcsyr/MG\nNhJtDEpE2GKMldYsa1tzCCmLUKyEILhUCOOTmvxX/v+ZmKdEz9E41FK4CHhpEaNEjiRrTHGKRWyk\nH31in6aJH50u3kSdFgbrwiRvp59lzR3jQEqj0yHNIUViZNnHT503+Cy7DNPATx8FPw1q/89rI5An\niYCLnwajbHGaBRa7Z/jD0t9m6+4M2lYPpyFSMuIMTe4QsmuMs0mSHBnxgAMy1Oohqu/EcYYhcjqP\nIbaJC3liFFlhlo/cszxw5wmJNRLk6eChg06BOA85SZgKsmBzWl7gUMiwVD3J/aWL+EcqZFM7fPrE\nN7i9c4XbK5eoLcRYdk7QHvaQubSNXyhjSipXstdp6D4eMUcb4/iTNDp3hAssM8sN9zInhEeMsMMa\nU7QwkLDx0eQs9/DS5E/5RRzExxHfgYEnymMp7c6Gl/J2glIyhqb3UMU+rheaspcVc4bmThDLVBBD\nDoIGydgRwdNNCLvsMkyOJA38FLoJdo/GaXT9+Dx1XEGgToBNZ5yV/gy2R+Dp7Hvk1CRBu0ZCynEv\ndo5m02D9/iyJ0SNcn0DL9GK1VWTJwheoIwsWGeWA6dAy+/YQ1XKMHVdE8fbwGw325CGG5D1mWcJH\nnRwp2hiYKFQIs8UYGl3Gyzs8fXSL8HCVmt+PIlgEteObDhSJ0dNVPPUO59YWiAQrEHHZMYZAdMmT\noEwYH01SHFEliIyNhw4+jleyPOQkOh0mWWeWOl08OJLAiLGFk5WwVJl+VwXZopNU2ZTGSHOARzh+\ngyiYcTquB3+2hj9SIyvuMCpsM2FvEHXK3JPO0xYMfDSJkUfGYpdhvBxvRhWgTgsfzbafWiHCcGQL\nWbKoG166oojs9Ah7K6hzHUaNdaSMjYXCVnWSTGAPv1LHsSQOallajhcBlwR5TGQOhAwN/BzVMtzd\nuUS5kWDdd4j/ZI1L8g1Odh+RKedZ8U9R0SMUamm6zuAekU8uiePbVEV+9DB+dMzm+OawpR89Ohzv\n/jbwl/UfLG1BEIaArwJJjl/df+667v8iCEIY+CNgFNgCftV13dqPHaRk094JYIVkurqGKwlMxZfY\ntMe51z5P+14Iq63BlMP4zAoT06tMTq/RwM8q0ziIFJwYR+0M+7vjyMkuoUSBbXn0eDmcO0GxH+Os\n/yMuxa/zoXWVifQmFy/eoNY1WNw4y9rSHHZUJGfE+U7/NRrlGBHKXBSvcdJZJCMdcG74Fv2iylpt\njiPbIC3tgAeu8TRx4XhKxKCNC1QJEaJKH5U+ClVCaPVVLq3dZca3TF6LsaMOE6VEjCJ3uIBKn1ir\nxPPL1xCHXRq6l4Be5Z54lnWmMFGZYpUTLB1PIxHAcUWiVpl9a4g9e5iwXmJEPt4pseJEUESTT/q+\nTfFcjIoUpIkPGmO4jsiOPMKIs0OKIxJCHp/VRFH6jF/YICYVj4+TI+EUiFplTFFFEU1GhW0ilFAc\ni67jQRN7eMU2U6yxzSi5bprVvTky8gHBcA0p1aOLxmEtQ1P2Ex6vMDK7gV9qsFWcYrcyRsgoE5Sr\nCP83e+8dJEt2nXf+0md577qrfb9+3s4b996YN4YYDAgQA4ACKRLEghR2RXJjRS1XXK4YsaFVrFHQ\niUtpV+SKAYoQQVIEMSAG4GCAwXhvnvft+7Wtrqou7yvN/lGd0zVPgAiC4NMMwBORUdWZeW9mZ5/+\n7snvfudcw+bc5nG6ukw8sM6gvIYg2swziY1Au6pjzahcWj/KpchhAuktDvvOM9xZwZdrk5diTAt7\nKW7EqeP9Wzn/98O3f3hNANWF6JZQAh28VHEZLaS6hdUAs6PQRcTGAwxgE8ZGAQxsSgi0EFlHo4qk\ndhHcYHlEmrJODS+diopVt6HTAOz/yr/re8u+m0jbAH7Ztu3zgiB4gTOCIDwN/CzwjG3bvyEIwq8C\n/xz4X75dB8c/9ibntWP4lCrDLBMjzxYR1lpD1PM+rCsyVEAAogN5xiMLHOAKV9hPnhgFwmSaSSpC\nAG1/lSl9hlF9kbwYxUeV+8UXcbsbBIQyXUMlkxnCpzeRoha7tDk6oxpr8SHaAYWYVGSv6xpvSveS\nyyZ5ff4+LhZuIxTeYvDUEgOBFWLeTbq2Qk6M0DDcfFD+BgI23+QR8kRR6RCmQIAyQ6xgIzDFNM2E\nm9+767N8dOtrFNej/N7oz7Ofq+8U+b/BKPlwjNp9XrJ6nKauMyHNkSNGFS8uGmj0VsjZzxVm2cUr\nxr380fpnWd9IUy/7uP3YafbErhMhz2RtGV+lTqei8nvpzzITmKSNTtq1xjDL3C68zV2t0+hWizVX\nmj3qddLKKl6xRpkeZdVFoSF5GBTX2BLDALhpUCHA0c5FPlb7Gq/47mReG6VGgAAVpvzXcR+os1gd\nJ78Zo6m5sddlzIybVt1PaShOcbzA4egZIoEsttciouaoWj6yQoLE5Cq1aoD8UgoGRNpemRuMECPH\nRHSWyftm+VbjR7he3EfxrTiX9x1CHjDYmBhgRR1is57AyMloqTqtv53//619+4fTRECBiRP4TvkY\n/ck5Pqx8jTtWzhB5tkz9RZvctMASMh1c2Oh0UTAQMLCxMBBp4qXJAcEgNmGj3StQetjD6fQxvt79\nUWb/0z6KL9bg6uv0IvO/n79w7K8Fbdu2M0Bm+3tNEIRrQBr4KHD/9mmfB17gOzi2MSQSNAqsN4fQ\n7Taap8Mk85SlIG9qd9L0Svi1AmNj84Q9eVro3GCEIVaY6CzQrek8Iz7INX03Xr1KUCwiCwYlggyw\nzqQwR0X2A9C2RbxaFUnp0hY0JqU5DK9Mx6syxiI+qnQFhVAgT33Zw9ZzMSq7fXTDAiExy6CyhosG\nJYLoZp2QXWQ31/G1GjQML0FXGf9aldTaJuHBAm3/OsP6GoJqUtb9mMoNQrUSVcFHnCxFgrTQ8VHB\nQx1Na5OJxzndPk7L1JmUZ4kKedJ4UTDwU0Ghi4DdWxxAaBPTsyiBLnXJQ1PRKdphuqgsySMk9Bzj\n5jzj8jxtZDzUmZN7JVhLBHi1cxK1axDUSwSlEk1c2Aj4qOKiN1/QLaiktrLcmX6TLU8EE4kmLgbE\nNQJKEUSbLSvKnDmJZJggghEQ0ewmqfYau7SrLAdGyVTTdLY03HYDv1pGEbpElRwBSgQoI1sr7BLn\nmBF3U+94aRa8rMXSRMhyxDpPYSWGIajsG7rMpDWN6DXJGSmiep6AXKbq9eGliqddQwp26G7+7di9\n74dv/3CYAkMx5CNJHog/Q3rlBtbTkKvXEFbdJM+sMSFdJJFbJLDawN2wkejFx93tT5veCGlsfxcA\njd7aFv46KGvAJZ3BDYU9hhv/6gLUmyS4ivKIzergCM9vPoR5YQNW89s9/3Da38jrBUEYBY4AbwAJ\n27Y3oef8giDEv1O7VQYIureY2dxD2QyieNo8yHN0dIVoNEdur8KQfoMP3PMkKwxt66BH+Ud8jgc6\nLxLK1+jGZBoevfdPSx0TCYneUlUDrLNKmjYaSBALr6MJDQqEGaSXqJElzt28TtNy8bT5AbzBMnE2\nKL8dRjvVwHO8jIfatpKjhoXEkLTKqL1ImlXG6yuE6lW2Ej6URRPvay2UuwysUYF6yMVFaS+D0hoP\n2s/TDbpxC03uN1/mBfEUN4RRgpQ4xlkGWaOFxmYrQd3w4FYb20DdwUTERxURiwXGKRAmIuXZH71C\nLephURzj7fbtiB2T3eo05/UjJPQsn4h9iXHmmbRn2MUs/5b/gdeEE4DNtHEAvdvml+zfxmPV6dga\nit0lJWbwiRXmmCS5kuPOi2cY/ZEFFj2jzNmTdG0Zr1xhPjBMjijrxgAXuofpthQUq0tQLrNLnWXC\nM8+QssyrvpO0gho1K0Q6ucRkZLo3SNFCtTtIXZtJcY6ksMG/bvwK9boXrdti3hrHR4lH7Kf5g8Vf\nZF7YhTddISFu4gtWWTxUYZ90mds4Q5reeqIFMYxruEL7W7Hv0e2/f779g2kCoCC7LDSPgVq2sMcj\nyD9xkJ86/Ifc+/LTdJ9ucWX5q2SXga/1Ws3RY6277AC0w1Zr2706U8cOiM/Z9GrWLIP9ZIsWlxjn\nElPAIL3KCN6P6bx696NcOHcYs9KBXI62D9p1GaMpAp1b8EzeO/Zdg/b26+OXgF/ajkpuJpq+I/HU\n/D/+Nbm2D7e7TuqhEIc/UH4nE9AtN0gdX2FMnGOSOXRaxLdleDcY5gn9IwQHq1gqHOASFiKTzDPO\nPFHyVPGTI8YE82yQ4pqxj5nNAwi6RTEa5j5eQqfNAOtcYT9rlWFm1g4ymF6COPAgdCMKifYmn9H+\niDJBqviYYB4Zg6BdImVm8FbrdEoqNyIjNA66cQ202KvPUvV6WfAMo0lNImYBqy3z7/R/zAvdB9jY\nHEALNdBdDTqovRVlthNyptwzbNgpzolHtxdQ8HKV/ezlGlHyvM7d6LQImwWezH2UmupB9TUoXE8Q\n1ivkp2JczN5GStzgwfizZIQkHup4rTo/Lf4pt3GWCxwm6KugWAZlMcCd7TM8Vv86csPkgm8/10JT\n3M5pdm9MY18Qad7t5hp7+Zr9ETbLKSbEOR4JPMUyw5SlAH6tgk+pYExrrD0+Qn08RGZ/mgMHzjMo\nr5IMZFg/kibmypJiHS811hlgprWHtZkRXvY3SQyvMxmYYZ/rMtaARMPrYpExqqKPoYOLJIUVDEHi\ngnmY9coQxbUYDw48z3pkgGd4mGf/XGflpddxR76FqxKg+j25/ffPt3tBuGOj29v73TTgEBMfLHLy\np89x/P98k8alv+TKb/qp+K7xdrGDQI+0UOgBs9DXWtzeZHqkhkBvGtKkB6/W9nGpr40D4mwf17d/\nvgzo/7ZD9wuv8anyZziYLyHd7uOFX76bVz5/hNkn/MCl7bt5v9vS9vZftu8KtAVBkOk59R/btv3E\n9u5NQRAStm1vCoKQBLLfqb32yX9OXY2ya/I0I97rVLjBW9zBtLGbquHFVmUqsp8MSXxUUeiyQYp1\nBtiUE/jlCsPWCqPmIqtiGrfQAAR81Lja3c/bnTsIdKoYmkRTdaEqbYrdEFcLB5EVkwl1jj3ada6z\nh7IVoNQOodVayJ4u7lMVtFQdj1DHTZM6Xrx2jf32FaqCFzoCvvUGW50I6/4URclPJ6xgBiTMqoQh\nS7QUFS8VTEtiU4qzII9QEAJE23lGhHnE7UzPIWOVQ/XL7NuaZiscwwqKdJGR6RKkTIgim40U2XKK\nc5mjeMU6cW+WDTWF6moRETYZd80TVEusk8RSoCPI70TlDdxcFA6i08JLDQGbEXUJPxUELJLmJoes\ny9RkN1XJhY3FIGsEEwVqB1xUvb10+iYuwlIB3zb3XSKAJYgkpE0CUolKJ8TCDTdWWgSXTVpYpSvK\ntDWVg9oFCkaYjXaKPcp1ajU/C8VdbIkxUEwqgodhdRm1Y7BeT+N1lWk0PLxZ3o3cMoi6coQpMCvs\noim5kPUuhiRTxs8ag1QOnKCdTJE6OoOxmaD67/7Nd+PCf2e+Daf+Vtd/75gMRBg4XGVkTwHX82dJ\nVzaZXL7GSPMa7cIWRqEHvFv0YH2b2X4HpAV2ANwBFqvvPHl7c6JvB+gd+oS+fp32DaB5xQI22cMm\nYyqIySgHl13IlRbj8Si1B2osXo2wfsm3fXcO/L/fbJR3D/ovftuzvttI+w+Bq7Zt/27fvq8CnwF+\nHfhvgCe+TTsANucG8O0v4+nUqXZ9nFWOkSVO3ohSrgVplv1YLgXF0+ZhnkGz2ywzjJsGHuo0cLPb\nmmbYWuZ18W4W7HE2SVDDy/PtB3iy8hGEssye0BX2Jy8wmbjOQn6Ka+sH2fCleDjwNPdqL9PERUYd\nRA+2KDRjqO4mgRM5vEINEZuLHELEIsEmaXuVVdJUGgGUazYLo+OcGT/EOAvbFE0TwbbR7RYRewsR\ni4IcoiiFiJHjfvl5DumXGGCNDTvFV3iMH+k+w0P5F9HPd1g9lKYYDJBgk0HW0OwObVvnqcqHeWn+\nQXhFwFYElIkOkyevMh6cY5gb6Ltb1PCyRprB6DI+qlxhPx7qlAU/s8IkfiqYtsQGKQ5wmQFhnQp+\nBNGio8pkgyEG7BUmGjNUJT/mEZGNYxFyRMGGcWGBk75XcQsNVkljI6BbTXxmDdXo0BbciIMmwYNb\nTO69zoM8y18ZH2bG2s1HlSeY6UxxrnuUqJwnm0+xujGCe18ZV6COJrZpo7GwNcXr1+/lk0e/gGAL\nvDF7D+QFDkfPcSL6CjE7R9PjRptsI5ldql0/liQgyNCUXMw2pjBXle/Sff/ufPsHwlQRUXKhtoc4\n/NAiH/q5BWKLL9B4NkfuWZinBxQ+eqAt0QNXa3u/lx4l4tAi0vZ+J5J2aBGJHXrE4N18twPu6vbm\nTDtq7ETnEjDXAc7lCZ57mo/wNPJdMZb/xX088e/TFK8M0dYbWEa9V/f9B9QE2/4vy2kEQTgJvETv\nHcR5xr8GvAV8ERgCbtCTRZW+TXv71PI3mDTnef2pE0TG8xx45DwN3KS7q+zuTPMn1s+wJg+SdK1z\nPy+yx75OyCoiY9ASdDaFBIP2KgpdpoU9pLoZEmaWjibzhPVRXuzez7ixRFTJ49ZrdFBZa6dZbo+g\nym0UpYOuNDnKeXxGlXI7zCX7AIvSGJtqDEyYZI6PK4/jE6qE7QK7mQFslIbJ2Pwam9EoiwNpygSJ\nkGfA3qDT1dHMNqrd4Yx2FFky2GXPUrDD5ImSE2LcVr2Ax66z5E1zxj6O3DZ5rPQVngk8yBXvfoZY\nJkOShc4kC4XdtCUVS7Rpbbko5SO0Wy4OHj1DIFQEbHRamNsL+KZYR8Gggp89XCdKHguBVdIsdCe4\n1tjLlD5DWlulgZufrDzOh4pP0yxrCG9ZSNdNjCMybx89xrf2PMi52lE2pQSi2+LjwpeZFOYQsVhj\ngLMbx3n6wo8ivGojKQbyRzoERgsMhZY5ynleeuNBlvJjnDj1EvPaOBtWiruV1yk0I8w2pyipPmJa\nnmFtGRGT1a0RZjb2MhxbxFZscq0k7fMePEaDockbFLbCtDQVdU+D6HQRtW6QPxCg2AwjGDAVmyYz\nN8ja0XFs2xZu9rvvyvm/D74N/+J7ufR7yCS8Pz3EyAmVx37zy8TkWeyRPOrZPFaxg8FO9As7oK3z\nn4OzQU917ewT+r7LvBughe3NYAfUze1j/XSLzY52RGInhla3+zRDKtVjUfQbUbbsKf74f/pxFl5u\n0vizZd7/+u9/+W19+7tRj7zKu+mnfnv4u7l0eCiHf6NIaS5Mc0Eg1nAxciLL/tgVblPPcFY6RkeU\nMACsngsAACAASURBVBFZZAyzqzDQ2GCXaxpV6ZAlxro4gIyBhzoeGgjYXDQOUZH8jLkWehObqNww\nRsluJRFVm/2Bi0xWF8lacc4qh2miE5BLhOUcE8zSbijc2BjFUGQ6Lh2vXMMtNBEEKBPABiTVRkhJ\neCtVdl1fIJNMYXoEskqMOXUSb7fBgJEhR5xEO0uilmdgdpOiHWJheJxkLodLbWBPmcxIUyx7hnnS\n80GyJNBo4aY3YXrV2M/i1m68coVYYIPwaA411KFW8KNoXbootNBp4iJOlr1cw0+FHDFm2UWIIm4a\nJMmwRQRF6KIKHUQsZEzCFLAkKGk+NLmNWjcQslCzdfJSlBVhmKwQpyL48VDHb1UYYB03DaJinpbo\n4YxyFytXh+kKKtHHMjRqXlbbI9SMIAu1CQrdMOfzx2hEdXBBSQhSE7yYLZnuFR0rLsEorJ0eJptJ\nYNkia0cHkbwGQkWAhkClGORKJQgmCBEDKekhYDbwKnUCYgU90MInVjnqPsv1RIe178YB/w59+/1r\nCcJeiZP73kBIFnDVRfZaryHPbZCf64GlSA+wZXogatN7WM7mALJDjbC9T7xpH9s/W/TA1+zrwzmn\nf5IS3k23iH3XdkDdBmpAp9ih++w6CWGd0Gieg/UxJhJdjKMVXpu5k2LdBDa/L0/svWK3JCOyaAep\ni14aLjdrTynk/3Qvn/nTDCRgXRwgTIGkvckGKd4U7uCv2h8lm03z3yX+Hwa1ZZ7ig2wRJWln+CRf\nZF1JckO8g99v/jwBpcw90isc4ywLjPNq+x6evfooI+EFPrb3L/jk+hNs6SF0b50scZYZoYXOLmaJ\nVQo0LgUxExIkZSKeXh2UFj2B/zoDbCkRfLEqd146y9GLlxh4aIuzIwd5SbmH0xxHV9qMywt4qTFa\nX8a32IY/BLeZY/DjOex1gUwixvWp3dwtvEaELX6N/4vDXOBuXifBJgEqqN0OYtGiUI7R0XUOHT9N\nMFaiFdN7kzS2jGa3sQWBfcJV/hGfY400L3MvL3I/80wgYjHECiP2Ml6pTtyXZVhYZsKeZ5A1JLfJ\nvCtNPJ4jXKsiRWHuAyOUY16SbOD3l9kiQsvWOGKc54h1vvf3U0K0ExqlhJ+vfuXHuXr5ECvPTcCo\n3XtnroM42kaYMrm2eggXVcJDWRq2m1whyeqlcXgcqne12Ai2Wf7dCepX/DBkIf2ahR2TaL3th6oN\nBRs2BdhvYyckzC03p3Y9z/HwG8wwRYkgqtDhAJcxkxKv3AoH/kEzAQT7ABNJid/+7K+z9uwCr/92\nj7j3AAHeHRXDDuDq9KJcZ6ST2KEzHLDevsQ7kbHNzoSlzbsV1w4gf7uY2OnDAXd1+9OhYprsROFX\nbWBxnaO/8puc/BiEf2oXn/p//1vO1DsgbP5A5efcEtBenN+FN11G+2SNiXsLDLbyNPaGOMdRLnKI\nEkFKdpAlc4TbpbeJ6K9STEVw6TVUOnyWz5EnwrI1zJc7H6NtaHRsDU3r4JV7YPz7/DwtdAxN4mf3\n/QENzcV1eQ+XBmeoiD42SXAHbyNgMc0eouRpBNxEj6xTqkUodkO8yV1IdFHpEifLKmkyJBGw8Oxv\nEBrM00mozLnGWGcQFy0SbBKyinyr8CgVM8Ido28x/dkptKzB/so0Xzj4k5wZOkxHlDnJq6h0uYeX\nCVLCTZ1xFigToOXW2b/7CrsaCyTsTZ7T7yNAiTEWWGSc62f3sfTaOI995EvsH71Klvg78kiAPVwn\nRJHneJAPX/8Gu1vzPLvfxYh6gz2VaZLX8sgrJkLJQtfaqKaB7RVICptU8WLQq1XeRQFs2rLGVjFO\naj1Le9hFNhDnGnsp7wv0pADD4JmsIAYMaltBrCUFoS7DiICBQjkfYnrZw6hvkYNHvkg+EmXTnWCt\nPkxrv96rh54W6BguWBAQbliMnJwHl8DS9ASpAyscGLrIQ/qzLLmH+Yv6T7C6MoInViEazVLHw/X8\n/lvhvj9YlojCqTv5xOWX+dEbX+f6v9+klO2BtUwPXAV6PLKjpe6PmL9TpO1MHjoqEAeEnVkHY7tP\ngx7wK+zIA50o29F/OBpv+to6kb8z8Wnzbs23c00RmH4L/Asb/GLuf+XrBz7E4/s+BC+8Cdmt7/25\nvYfsloC2aUugw6FD59EPtRCwaeOhSZfAtmpio5si30gS8RTYrV6nqvi5wQgbJNnDNQRstojSsnXK\ndhBTkNDlFqYkkSVBbrsqnFesIfpMqoKP69YeXvHlQIAaXvxU8FGhip8uCh5XnTtdr5HJpVHMLnU8\nSHRpb7vDQm2C5e4IAX+B6cQU/kSZFBuIGIQpECeLRpum6WJmcy+q1mVxYpirkT2wKVK/6uXr4Ud5\ny3Ub3k4Ft9Jkr3SNE7yGiUy0s0WqkmXJXcLrruKKNdnfuciEOc+aEqfW8NFqeUj71mhYPurdAGN2\nL0FohWHWGKSDyihLDLGChMkMU7isJn6rShMXPqNGrLNF3fAQMKv42nXkmokYANMnEG6XCLbLSIrJ\nWjuNKFrExCzSvI1Vl2lqLsr00uMtRMJH8gQTZcZ9S6yEEmSiCWxVpDXtxtjQYAyMroxZ0Kl9UyA+\nKCIdNpEEk05Xo9r14znWQBYqSBGTAc863aLCenoAfbROx6VCE8aH5rgt9SYHOccaSbLdOJt2kpgN\nfkp0UQjbxVvhvj8wph/24Z/SiXuXuU18kV21Z5k53QNTp4pLf7TsmAOw/VG0wH9Og9h9x52f1e32\nHXaid2V7v0OZ2H19OoOB2bc5/TkDgXMf/XJDp40FbK1Bfa3Gfp7hqOhl2jdM/j6N8oyH5sX63+iZ\nvRftloD2yMQCPqp8ki+ywhDP8SBuGkwwzyleYJM49baPRi5IR3bRVRXaqMwxQRM3NiIFwtiiwAdd\n36SNRoYkV9hPljgSJnfzOjYCa2aaP8j/IjXZhR6sUdV8xKUsCTZZJU2UPF5qzDKJSptP8x9ZiaSp\n4scj1Omi0EajgZvlzDjzpUnu3vcy8+4J6nj4NJ/nIJcZpFdq9jq7ed56kPqGm01vgtcm7yZDilw8\nxlPRD/LGlROszA0hDrfxB6r4XFU+xpdp4kKug/9ak/JwhNmRXVhIuJQGgmJwN6/zxNYn+NLGT/HL\ne36d+449T/rwMgG5RJ4oawxSIIyXGg/xLApdOigc4iLWHot5hpkWd3NP7U2QJF684ySTd85ysH4F\n30ILsWMjyja+cgtbVbgRGuHPi58C1eYu7VVOfPkMwWCJ9X8cJSPGsRB7GvI78uzKLPAL5z/H/278\nKo+rj6HHGhTCSSplDVSwWwr2bAf+eJFrwQTTR49jNwSsPSLyyS6DJ27gC1XQafIx4S8p20H+4uSP\nk+tEqWyFQIED4iVGuMHb3I5Gm4OeC8i7u3iEOkk2OMwFItECT90KB/4BsfDPDXJgX4mHf+6fEljL\nME0PANz0gNNJUXGoCIteJKyxA76wQ3GY7ICwowa5Odlc2+6/zg4A9wO+tX1dh+dWtjdH0+1c3ykz\n1T+oONG9o2KR2cmT7AAXAP/lv+JnKmd48XP/M5cvplj+H+e+l0f3nrJbAtobK4OYIxne5E5a6EiY\n1PCyQYoFxnqlRw0JGhA3s0ywQAMX+5szrNppnnPdx3J9hKBZ4rjvbeZqt3OxcwRPsIydk2lUvGjD\nHfyuMqJksRQeoyNEkGQTj1BDxKRMAAEbjTbY8FDzJQRsMq4I4+ICGh3qeKjhZZMEi4wRjmfxB4ok\n1Q2GucEua5Zka4sNOcGMOoWIRQeVKXmGzL4zRJUcfqHKIGtUhAAzwhSXgkeIGlkO+c8RUEqUCHKO\no7TRkd0mjV0uCp4ACbIMskZIKGIikyTDfaHn0bUmli7QkNzoYpNvdB5BFGxS6gYbpJDpImFwb+l1\nOqg8ETiIS2oSYYuHeJaGrnFN3M1t9YuUdC8veu+jO6pimyKq0CUuZdnUY4TtIr9i/RaCZSLoHYQP\ndXjOfID/lPuH3BV8lSl5muOds8yp4xhhhYuH9lAJeQkIZSLCFsJugWZAo9t0EfbmcR8ssflzKbod\nP5atwLMgDBqI6TZtj0p7M4a5qLKxb4BuWMK2BUbEZaKRcwxpaxT8IaatPTxmfoUXpFNURR9JaYPj\nnGaKGVpouMXmrXDf973FDljc9vMWqbVvkPjGDGo+B5bxDoA6m4udqBp2IlsHJLrsSPdcQJudCcJ+\nc+gTB2ANeqDr0CkOteHQHc6+/kjeicSd6FmhR+E4fUFvMIAemDsTlM7g4Wy2ZeDK5jjwW18genQ3\nG/9mhHP/n0D+yvckOHpP2C0B7XbDRb4ZZ1kbQRebeKgjYtFCJ2fHKNgRVuwhwCJAGTcNMiQ5ab1F\n0C7zJ/wEW1YUl9VCtC0y2QGWyuPc7nmVoFGi3XYRt7NEyREUS1S8PqZbe8k14yTdm3jFGk3LRbyc\nZ5AN2l6VQ7VrlIQg51wHCVBBpEmRED4qpLsrNOpextVFZHeXpuTCQx3BtsnbMXJ2nBJBPNQJUCYh\nb9IdVPBQZ8BeZ9hYpUSQiuwnEdwgbOd51PV1ckKMGl6ucIB4N4dHqPN24jYKQpgIW+xilhZ6ry1+\nxoUFYkKOWSbpoBKigGlJaGaLofYay64RNsUEddvDB8zniZPDZ9dYEwawEbiLN1hUxrjEfva2Zrne\nmWJBHCEVXEcXW7itBu52jY6koNPkQ+Y3sSy4pkyQPRLlRnmE+mYAxdPFJ1fx2jWGWGHdleLVobvo\nIpNmFY0Wmt5CEG2EJZBbBvpAl8AjErWsROs62//FNqJkEhSK1JsBNvIpltsjhMgzKczilhsEXBVC\nSpEbchoXDYKUwOad0rA6LQxkcsQxze8k/Ph7cyy232L3iTrHhjOEn3oL7am5dyYVHQB2It/+CUYn\ngnUA3e7bblaGCLwbuJ1EGse67PDNwva1HdB2IuSbjzn7nDcAu69PZzDQeffAYPX1K/SdKzVapJ96\nk6hcYPAOm8aJOAJuclfen/XYbwlox2NZFrcmOBY7S1Ar0EVBo73NCXf4lvkwZ8XjCAETWemwxiB/\nzM+gujrIGNTwEPHmGGCNpuCms6CirnaIjWeJDOSQkyYH5Ev46PG4E8zzVPUjfDX7ccaHl0goG1RM\nP0emLzPFLMZeAb1ksCanmY9M0BDcGMhc5BAf53EebLzAo7MvQMQkG4/yrPsU54UjvCLewxHXeeJC\nlhS9FcG927WmY+TQaZGwNwnUGrQFN52gyphvniQZPsoTnOUYFzjMImPc13idlJHhd4O/gCJ1GWcB\n93ahqgXG2SDFifW3uH3xHLXjPuphnSAl9urXSRWzDG1kmB+a4KL7IBfbh/iY7y85KS/yIeFJ/pLH\nWGSUj/A1lhnmonyAz4c+TaacIl7M8auRf8UucYaAUSGV2+Kc6xArgTRmR6IpaawyxDoDjLHM58VP\nkxf8zErjPOd6gAPCJar4eIFT7OE6KTa4wCHqM346r7thViCvJ2jucjP+iWm2GnFWm2NwAOyAjDIv\ncNx3ls1QkqXdu1jxDjHICj/Fn3KdPZzpHueLlU9y1H+OkFbkdfluygTwUgPgST5EiSAhSuS7EeD/\nvhUu/L61237B4ujgBsF/8hTSRvWd6LlND+Ccib1+vbVDNziqjv60c5MdEHYmKx0e2gETB0wdZYcD\n9v1A74Az7ETbzgDSr8XW6VErje1P51717XP6I3aHH5f7Ph1QlwD56QW0q3lO/fajeA+O8c1/8veg\n/R3tHu9L+LUSJcnPaj1NoRpDNg08hTr+XIX2AZ10YJWyXGNOHce9rdg4Lx5GwSBGHk1oIdNlmWFK\n0SBtW2NVHiIlrZGSNnBTJ9RjvikRJOFZZzwxjV8rEaKAX6owNzwGZZv989cQN8EISNRHPbTQSJHh\nMb5CExdv23fwIeMZ3IUGOTvOpfQhFrRx2oLGeeEIxznN3s41EstbuLU61YSbt+Q7cIlNIsIWOVeY\nLUJYiJwUXyVJhjYa0+xmnRRHOE9Z97Jl7cUn9Krt+akQJ4uXGrF2jthGkdHaClLQIidHkekywAYh\no8i6muYP4o9ypnoHm+U0TcGNiExIrzAeXkAWDJYZ5i1up4NGWlilKATR3U3caousGGOyuUCqksNT\nbLOrsIB/q0pAL1L3JNGMDneunCFsFSjGfBS0EE3BhVuo86J5ilXSFMQw68IAomkx35mgZARBEsEH\nyT1rRI7kKNgxSr4QDNvwIniCFQLjW5yt3U7JCmOrUBc9FAiRI9ZbY1N24/NWKclBzhRu5+y1Oyn7\nAjQDOvhNSkthaIDvWJ1m0Xcr3Pd9ae7DXqI/myS+/k1833gbeb2K1THfibCdCLrfHHB2aIl+oHUi\n8X4lhzP512InAcfua+vQGP0Zkf26boudJJn+6zvLJfRfW2ZHyeL04QD/zZmVvXJXO/TOOwDeNpFW\nK3g/9xaRgzLp33mErf+wTvNi7W/wZP/r2y0BbVerQTS4yQYDrDcGybVTiIZFd12le0XhtpHXicc3\nkVSD6+V9CIZNS3Fz2XUQt9ogwhbp7hq63WZVGaQa8WFpIh1FpYNKC40cMXxUibBFG52Ee4Pd7iuE\nKBKihCa0aSbclEQ/ZlGkY8vIdpeJxiI+vUxCzrCPq1zsHGHLjJLxxnEZTTaNBBX82AhotDGR8NQa\nJIs5zJJC1p9gzUpy1j7WoziEGSp6gBXSFOwwAbPcWzhYGmJdSFHH01s8oahgNGQORq5gukQ8aq/m\nSoxsj+pplBFVyETiGKqCiNlLrrFcrKkpTruPUF73o7W7KGoVugJ10UuOKC1ctHCxwjBeqmh2G79d\npdH1QFdgQ0sxZ06iGhYpaQNPu854s04l7KWtawy0Nji0cA3BbbE0OoBliNARaSk6b3XuJGfH2ee6\nzFY9SqXrx5BlBJ8NMRPKIq6JOp6DFVbLQwhhm+DoFtWGH01s4k5X2dhIIdo2k65polKOuunldPd2\nVoQ0HVHjgOsykmBS6ES5WjhMvejF0GTQDZScQVzOkjQzVDvBW+G+7z9LRPHtVtl3uETk12dQvzH3\njoKjX4rnRNk3g/fNXPfNdIOj1hDZSV3vb+dEvM75/ckx/d/7+3Ha9Mv6+umOfq7dMQekb578dJKB\n+idG3+HL2ybK1+ZIGFEO/bM7OTsVoJnR3ldywFsC2n925VP4ThYJUCLu3cDrKuO2m+TyCW50J2na\nLiS62LbA1WuHqBaCWGGRyGSGVGyVMRZ5pPoMIaPM70T+e1qajseqs1+8zCZxXuUecsS5kzc5xllc\nNBlknSp+UmwQ305gSTa3cLkbVI/qVC0f4UaeX1r7PaaT42QCURYY52jlInq7w9mJg1REHx1R5S75\ndTZIUcXHbqa5feks8ZkCb91xjNfid3Favo2WoLOH68yyi8L2upNXOMBXGo8RpsAHfE8TooiEyWuc\n4BPPfZV7Zl6DRwWuT0xwI5pmhSGClPCoda5NxNgiQkUMMC7NUyDE8zyArBr4qPBRniCVXGfVGqIt\n6LRtgZfEu/kr4cPkiREnywg3WGaIS/ZBzhq3UVhM4C3USR9b5cuej/IF3cPPRP+YCXsegCvyfgY7\nG9xbegNtvYPph8nWPFJZoCEHeCl2Pyu1UVJWhh/Tv8qXlv8hW80k9+x7jgvjh7lqHMSc1llrDFA0\nvOihKikxg9eqc/747ZhjEsg2e1OXmGKGPcJ1OqLC+eZRvlL8BIYoccB9iQ8EnmYv11iPDfB7D/4C\n82/voXg+BrMKgUfzjD8ww13u12nbKpdvhQO/n0wU4NSdRDxL3PWZf4qeK6CwI+lrb3+q9CJahxZx\nNgcIdXa4bAdom+yksHu2++rnox1z+lB5N7g7kbGjInG46G9Hm+js1ON2ovz+RJ+bKwVKvBvUncnO\n/oGkS++tQAbGXzzP5LU11k/9Dpn7huBLX/9rHux7x24JaD8w9CwqPX22LQo0DReXrh+l+FYUzgq0\nHtIJUiQtrKINGmwwyOrGKMVghG5boZYJcT12gZg/x3xpD4JiEXVl6EgqZStI0QpRkfxcEA6zSppR\nlnBtL5w7yy7qeLjdPo2n3WBNHOAp/8PkiRKV85wSXuEZ+0E2mkmO6ueouwOImoWhC0yLU2RIMsIy\nCTaZYhqNDoVYkLfFozwZehRRNflR60m8pRaCZFH1+/BTYZQlQGBEu4FpS+SIYSBRIcAKQ5T3e7GT\nFuKARdXlZZU0JhIR8sTFHKrWQaWNlyptVJYZ5pxwlClmiJLvLWMm5/FSZ5gb7G9fY9VMsySNvZMZ\nGSNHiSBCW6C0GaWl6oiDBufsI9QND6Yo8Zz6ABkhwSBruKkTKRZwb7YgDpWIl1Ulyax3N+viAA/w\nHHe63yZklxgXFtgTvUq14eNa+RCybnNg7CL2IxLtlEpHlRFli2ojQNdy8cCPPoOWbCAIJiPKMmlW\nCVklnq19gHON41RNHwlXBrfWS5Zy02C9miY7O4DmbxFOZSk9EUU+aVDX3Txbf4iFS7tuhfu+jyyB\naO/mp+Ze5pDwEuJyBtm23gFOJ3FGpAfiWt++ft7ZiVT7U8wd3tqJiB1Kol+r7ZznHKOv337O2+w7\n3k93OO1unvh0+rH6znUA+WbaxMnC7LCTqdmf2PPOPTdaSMsbfPLMF5iw7uNxHgSu8H5Ieb8loH1i\n+GUKRGihI2PQMTReW3qA0kYYZXvslzDwCVWEYZt2S2PtjRGamod2QKdciPBq8AQpZR2rIhHx5fHp\nZdaLg1TUAIqrl8u30B7ndOcO7nC/wZi0iJca19hLExdHuICBRMZO8qJ9f6/4v5rBE6nxcv0ect0Y\nQa2EohiIsoVXqJIhyTqD6LQZYoU0a2ySIJeI0Eh4mGWCO4y3+Qedx3E1uyyqI7zJMQJUiJEnKWyi\naF0qZoC59i6KShBV7BAlj5zq0gooiB6LquylSBABe1vCZyFjIGEg2yZ2V0QUbBSpp1PulZFtEKGA\nTJcjnCdhblE1AqQ7a+hqkzFrkVQpw4a/V7PF3WjhD1fwREq0OypdU8YUZM7ZRykTYLc9zUHhEqJp\nkjdCeEbrVCJ+FtVRnlfvQ6HLB3mKRDeHbrdoojMZm2ajmeR8/nbGXTOMx2fxxOusMcgagxjIrFZG\nqVQjfOKOP0fzNMmQfGfStUiI6fZu1s1B3GqDmCeLqNhcaB1hWR4hX4uzsTRM+PAm3skyzYgHypC7\nluBi9QjG2/pf43k/XBbyikzEFB678VeM1p/nFbv3D+7I5xxVh5Pc4nx3ANGp0OdQF/2g6fDKjg7a\n+ew/79tx5f2g3U+P9NcQ6S/Fat3Ulr5z++uQ9KfNq3330q96+XaUSr8+vGsZnLj0FZKeGotjJ1jM\nShTfB7k3twS0bzDCa5wkSYYkGTSxgxUXUT/cwjdQIBgvYCAzwxRNXJSKEewzAmQEtMMNog9vcJaj\npBtxPhX+D9xQhrlUOMyFF44T37XBrsMzRMiTzabIZIZo7rnItG836wxgIJNgk6rgpRbQcFPmGGfJ\n2nHKBJgVduFx1ani43nhFD9f/hzpzhq/Ef9lInKe2ziDgE0FHwuMUSLEGIvsZpoKfnbVF/EXm+TD\nQepuHS91mrhw0eQAl1ljgECryn3ZN7ganaLqdTNmLTLwVJbQlSrcaxM5VGJwZJ0U64jY5IjxLR6m\njc6wucKnt/6Mu+TTfCjwJDPyFKrQW6NyihlqeFhjkIw+QKBY5V8t/m+Q6qLW20SerfDm3XfTOOjm\nyPhphqUbjMhLeKUqlzjIGeE4NbycM45yzdhLTfWSj0RZ8GU5JF3EkGU6qKh0erw8Q4yc3iDVzVN6\n2IOqdEhp60wlvkBYKjDAKvu4youc4lVO4qFOp+ZmJTtKNe1niWGusJ80PUnkWeEYQ6ElPFaFVSGN\nKrXJ1AdYy4ziClUwNQljt0zRFcQVkgn/Rob6VwNs/csEhihD5P05+/93YyL37H2T3/jUb7H4+QyX\nz/VAS2MnOcZZ99zDDrA6VMXNdUacibwO7570649o6TvHUZY4lIlzvB8k+9s6AN8fXXvYoTD6z3XU\nKrAj7XOi9X4PsNhJhXfu37kXs+/ToUpMYBpI7n6DP/nMz/DPPn8vT54Z4d1Dx3vPbgloKxh0UFlk\njDxR3HKT7pCAuGrQvejCd0cNzd2kbAcotwMQttn34QusNYYJBos8Evg6s+YUpiXTURWyaymWF8co\ntcLEtl9n5o1JWi6NWDzDkjiK1+pNSh5vnyMmZlnRhlDkLgVCtGwdSxApWGHeMO4iKm0xJK309NG6\nl5rsYVKcZX/3KpPWPCvKIJYoYiEhYlHDS8kIc0fhDCGzTNYXoa5rSHK3J/nr1KgKPl5QTxElhy53\nOOM7iqh0GNjaYPLiEq52l8a4m7mhMUyfwFR5huGLa4iSzVY0T2koSN3lIWrniRl5mqKLeXuCgaVN\ndLVFa0BnKLeO1LBpmyq2KiCKNp2oSEwrE6hVkSU43jmH2LKZd40giDb5dpQr2UP4PBUeDD/HEqNk\nxTgN2c0NYRhLEakrbir4yG4lObN8O8UxP0PBZdw0uZae4rK5j7wYwkQiIWa4oY5sL5VQwUODMAUi\nbNFBRQ81UFtN3rhwgpIRJKMn+Ob4o4yEF0lrK8zKU9Rx46aOhUjDdlMxAts1KWzsFriFBm5/DTMk\n0RlW6W6oEAFlpEX392+FB7/HTRNxfWIUOVGk8vIc5Sw07Z1I0wHob5eKLvftc47fXFPkZqqkv2Lf\nzWno/TVA+jXYDgz2V/m7GXCdtwEnwu6vz+1U+OufWOzPjuxPcXd+536axum3n6d3pIGtXI3ay7PI\n930EfWqU1peWoPveBe5bAtoSJrrVYrY5hUtqEtc2UVIt5KUu7bdcJKc2cSdrbBFF7XTwJOoc+Ynz\nKDMGPqPGAekygmqzKqSZZRcz+d3kswmC0RIRfx7F7jJvTjAQWGdP5CrXjL2ErAK3CWf48fYTtAWN\nV6S7WBcH2BIjlIUAfio0cZE1Euy1phltLVGt+0CHulvnlPAChyqXibfyKPEOq+IgJYJ46a3mfx0z\n+AAAIABJREFUUjTD3LF1HtFjkU2FaKHT2X5RCxplCkKU19QTHOdtJM3itHacA1zGu1Gnc9VFa9jL\n2p4Ur43ewYC6xp7MDAPXs5iyhNIxOZl4lYbLhSxYSLLBjHKQZ4WH+Ez2T3G7WsykxhisXCSV20Ro\nA15YiyV5Y/gYBzomvnodBi2OahdJNjK81D7JGe0I5zrHOL18ko8k/5L7w8/hoklcylKTvCwzTIYk\nfrtC2Q4yXd7Hi0sP4YsXCAaLCNhc3zPFCmmyxLmPlxlkjUscRGzYuM0mTY8LVewQoMQSo9hRC0nq\n8Pa5O+msuECxec7zEA96v8U/0L7EJQ5SwY+fChYiLrGJR68iq23EtoXasUlLqyhik6XiBNaIiBpp\nIaVNArGt3qq8P9QmI8kuxu5z4akonPmd3l6Hg4Yd6gN2AFTsO8cB1n6AdMyZxHMiX6GvP5N3A3R/\n386+/gJPTrTutO2nS5zNWWCh3Xcdp3a3M0D0339/FH9zLZSbszEdu3mAqK3AuRXw/pbK6JSHma94\nsLrNvqf23rJbAtrX2U2z5aZ6KczB0Ct8eOorPC58gtZeF51wm5ODLyPTZZZJbvOcIbi9endy+Jts\nWVH+I5/G2h5TlxmmvktnfPga94svMeGawxBE5tUJjnCej/IEF6TDhIQih+yLhIQimtHFV63xmud2\nSmqQIEU+zuNoYoeSFuTOrbOMLKxgvSGh7O3AXpvqgE70Wgll3SDwgTKvBk9whf38GE9Qxs9r4j18\n0f3TPKx/i5/mjzjLbcwzThUfU/osIUqc5FUWGXtnlZ0z3EY2laDxCTc3tGGWXKMU5SAtVLzhKt4f\nq3JN2MtVbR/DniUAupIGEYEbwiAFKcy5/QeQRYMlcYTB9Boh/xaunIHlh6rfzaIwSlTNE/EVCMeq\nFP9/8t48SLLsOu/7vf3lvlVmZWbtS3d1V/Xe09PTs2IGM8BgAIICCXMTJVKmbNK2HAgvpCXa/se2\nwhLpsKmQbIYiJMqUKDJAChSHEDADDJaZ6dl7mV6ruvY9K6uysnLf3+I/st/Uq8JABAmiZ2ieiIx6\n9fLe+96ruPXd877znXNjfgxT4Jl3XudG7zmuxy5Qb3kpmBFWGGaLFDHyjLNAiRAKHSIUuNR6l4dj\n14g9ucteIIKIyWWeYJgVxlnAS504OUZY5jgz9M7l8RfqFB/24fE18NCkhp+yHaKm+7AuAJIFiwKS\nYNKRVEoEGWOJIBWaaCTZpu1RiaV22ZKTyJ4Ox0/P0qtnKe5FmH/zBPpIg8jZPBFtj0F5lT95EBP4\nY20xtEY/v/h//C6TxtsH6os7gTfYBzg3VQDfW1LVSVxxkmgc9YYDhE5wz6FB3HW2HUXKYRCW2Vdt\naHSTZA5TG465JYbOm8CHlW51wF0AKuwvENy/Z6eeiQPoTu0UkW4dboeTd86ZwM//9r/hjLTI/9z6\n2zRZ5+MalHwgoL20M87m5hD1kp/16jDv1x5iYHwDb7BO3htjT4l2d1e3TXav95K3E+hnaxzXZpA7\nHRYLE5z03+SIZxYJkx1/grZfRaGFQpsoZZ4TvsVR5kiwwznhOk108sTY0BqktraJz+QxL8rIaYOj\n9jwnGjPYCLzvOUW8tstAJQMy5L0hCt4QVcFHI+7FliVKapAAFUbtRYbtVUpCmLao0hPexpQFppm8\nrw6RUYU2GSlNnhg6TVYYJkOaOl4+kb3MuepNUvI28pJFwKpResiP6mlTUYOUegMElqqMLS6jn6ij\nN5p4d1r4wjVmQxaFQISVwBBR9ghSZseTICDW6JOyoNlIWoc0GSKrZbTZDsIdkD5h4O2rEatWOBW/\nxQXtPd6THsMrdlPELcTuBsvUiVBgyFjj4c41UmSxvAJ98job7TTZVpJVZYgxYZERYQWVNgO1TXqt\nXeo+nWy4FwSRwcoqimggeCzSZNCFBj32LjeqFxDiDUI9BfJ6jFy7l9v6STKVQcJigYcD79FCZ3Vz\nmN23EsQeyRMeLqAqzW44WN+k0N9DNhlHCbU4w/vE+Kujrf1RWd/pCmeeXqL3q7OIq5kPvGUHiJ0i\nUG5pnwOWjizO8ZLdJVfdIOn2Yp3f3R60Q1s4Y7mDl25qxl1z5LD8z1lM3H0VV39c/dzUjLNYuAtN\nuQOWznM7XrqbLnInAImAtLxJYnyWT3xphVvfrpO5xcfSHgho1/MB6isBPOEGC6UjbGz28/PJf8Vw\ncJltuVucqYVGxC5y4+YRtq1ehKk2Pr2GbrRRSjYjygoPe97DT5UlRlllqFuHmzBJO8uP8VVkDFqC\nyiBrbHb6mWsfRdRt7CL0XC1SmAghpC0GWSXdzFIgyp4nRs3w0tIVmILcaIxMLEHb1igcDVMTfGi0\n6GeDKe4wYK+zyBh+ocJJ5TaCZPMGj+Oj9kFGY7ekbIoGHsoEMZBp4OHizhU+n/0alldEfGeGVlth\neyzKnHyEHaWbETiyusHk3XnWR5KE9sr0z+xACmaGJhH80GmpeIUGvWqWestH1u4lEtxDrFr42jVO\ne2+TWC6gXTPguo13vIHVKyAKFg9736UW1tgMDNIvbXK0vcC6NMSOmGBd6GrEj5oLTLQX2fL2sKUk\nadoaa51BNugnJufxCA36rU30TovBcgbdajLrPcKd4Unkms2xlXl0oYPi6XCMGWxBYMfoZWnrOFqq\nzvi5WW5vn6PSCXHPPs5c8QSnxZuMeb7CLeEUmfU+ll88wqN9rxId2CPbTjGhzDIYXuHJi9/mbS6R\nN2OkW1t45b/uBaM0RiZ3+bG/u4hxM8/G4j6QOUDrmKMccQO3W8UBB71c5/fDgO601TjoyTtEgtPG\nAXa3VM/x3GFfNugEMXX2a2s7IO5w8m6pngPubtB26nO7+WrF9VOm6407C8SHlX4VgQ0LzIE8n/3P\nL1PKjJC5FebjuMv7AwHtnx78fYyYwroyyLwxzqoxyPXoGUZZYpQldJqEKRIXcwx+Zp0rxsNcN88w\nb40zrK/yhfSXQbV4g8fZppcedkmSJUCFQVZJsUW/3VUk5IUYCjsc35hlYmkJ+4zBwvFxXox/nmvJ\ns3ip4aGJHLARsIiwR6nPx0J8ENOWsL02aTNLpFHmG+pz3NFOMMQqU9xhhGWKYogSQaoNP1+5+jOI\nEZPEyQyP8SYx9hAxSZMhQIUa/vvJPTvE2GUyNU87qlDw+QnKdfRsm97ZPdbMNrmBONNMcuzMLGfG\nbxKIlPF6qnRUkPMw1Frj+c5LPHL3GpJusHEsycT0PMn6Dr5EHf4U7EaL0CcbZAZ62RsKMfzJNWSf\nibAOwjIE+8qMeRb49PjXeKR0hZMr90gmtrnqO8c15Tx+KiwpQyxJI2TFBFmSbJGipvuY5C6fE7/G\nKEuEayWGNzL4lRpbgW6J3A4Kydom0oxJfCLHRO8c8v39K0taGOGYQchfYFyaR+3pgGDho8YmI9xq\nn+J/L/w6VdGHNSwy+D8ukO1PsF4aYG++F2tYYqN3jgBVavjYrPTz+7d+kUv9f533rVGBkwS+c5XB\npcsU50ofUBCw70W6E2fchZwcoHIohRbfu/mBk0UJBxNZHLBzF4ISD7Vxe8MOv+3IDGvsA65zr+4N\nDdygC/slWh3A1dlPm3eCn869ON6740E7P1X2KRuHEnKnwTs0kHx9l+jfeRVt6SRwErjB/lLz8bAH\nAtoP6++iqy2uyA8REXY5zh3aaNTbPm62znTTlmWTnBCn3qfjM8sk2tvoQouOpFDx+sg20jSaHuLe\nbRBtdhs9rG2NsKaMsBoY4wnfq5iyRJEQPuIMFjP0LuaYOTpGcSCEN1RliBX8VIkKe+SUGBotJrhH\n3etjwTuCSpsdevE1Gjyf+w7JyDZJLdvd3RyZHSHBNkmW7RFyQhwhZOH1VfFSp42KgUzEqtC/s4Vc\nMmk1NaTBDr5IlTg7BIwqTUtjM5iiMl7FH2vQbqjsaRFMW2LIWqUVUrkeOUMPu4wJSwRiK2BAUt/i\nEfsdJsQVilKQDAnClAhKZUxdpDLgx2jJqME2ZlzAsgTIQkkKsheLsnuyh0IiyJ4UZiC4So+1DYKF\nKrdoCRrb9CJislbqYTZ/HDnVpqwE2Gr1YalgKwIGEr5WA7VtkPdGKOoBMt4Uu0KMMWORpLjNG32X\naIW6L8k6TXL0UFKC9CfX0JU6FSGAqBmkyDBmLnFTuMCOlGBFHqa15MGvVgmfWGF3M0FxNkbjaoDZ\n1CS1o36Gzi7R0jQsU2Kt0o+38lerZsRfpslei9FPl+kr7lL/bu4D0DqcnOKApdsbdSgKN1XiyONw\n9XV7y4736678514QcB27g5fyoX5uGkRiv7yq+63ArVY57F079+euGuicc9q7a54437kpIXc5WPe7\nmgUYhRbiOzsMPpPjaLDM0ss2xsfM2X4goN1rbeM3asyLY8SkXVJ2liy9fLf9Sb5V/jR+uYolC7zN\nJeLs4BEa9MmbBI0qzZbOm9ZjFKpxUmT5tP4SeTHKdOME12YvUff7SPdvYnmgV9hCwMZExttpEapV\nmW8dpWNIPC69Qc30odImKu1xjfNYiDxqvcXr4hOsCkMEKfMqn0Bu2zyav8KwtowcadJCo0SIJWuU\nbCvJnHCMohrmkVPvEBdyiFgfBPFCVonRzTXSK1mkvMk9/xi5SDet3VcwkJsmuVgvhUgEsceiSIgN\nBtCsFs+bL3NTPM3r4pNotLBsmbSwgy/aJKru4REq+HraVCQfmtFG6LExRJFGSmb7i1Gago5fqCIb\nHbzLTZT3bPYuRZg+c5S7w1OUpCACNim2MMOQDcfIkGaJEdYZQMRiPT/M7elzTARuY/klKqUQarBB\nSQxxV57isfoVOmjcGDiBJHbu72rjY7C1Tkrf4p9d/C/xixXGWESlTZEIBSnK0dAMFQKsM0AHhXEW\nOMEdknKWHSmOHqiSn9cxLZXOsEptNkTj3SBchR2zj84pDd+xCrJmEBEL5D0pppl8ENP3Y2m63+Cx\nX7jJ+NIcm9/d9yQ77JdYdQJwjmcqudo43q9b7+yWy7XZD+65KQQ3gEscBGK3asSdDu941w6wOuYO\nJrqDo4cTbxyvusm+V+74vu43B+dePgzUcbVz3i4OP0/z/nM3gMkfu4c4pLNx2fNXF7QFQRCBq8CG\nbdufFwQhAnwZGAJWgJ+ybbv0YX2/Kz2NIcr4xBpFwrzDIyyYR4goBf6r2D9hVRn6QMVgI5CrJMlu\n9COtm1hZiXreS/rJdWInd3hLerRLV/jvYJ8XMGUJj97grjxJjh762SBIBWscBH+HS7V32duKUEz7\nGdncwC9WsdImCXEHpW3iL3eQAxYFPcIMk6wyTMhb4t6RMTx6HROJCgHyxFgqjfH6dz6JPlDnkQvv\nEKaISnfH82VGuMMJXpeeZH78dU6lbzPYWUOJtWij8CpPE+5pcCp3h/PXb3FzbJL306eZ4Rg95Dkq\nzFGV/fQLGzzHK7RRySsxvmx9kc/mv4nk6ZDxJBjbWKOnUeBs7A5yskUl6KUhqsT3CtiIVCIaoaU6\n/p0m4iMW6cYOgcs1ppR5tsbibAykWGaEPDF6yKNgcIx7iFjc4hR6qs5nAi8yFb6DIUksxMbZURKk\nxQyf4hus+5Nk6SEglNkjwhqDzHOEghhh0p7mGb7dpVTw0cDTDUbSYJ1BouwxzCoZ0uzSw+vikzwb\nfZkhYYFXeA5qUF/xs14ZpeX1dGdWb3fWhdsFHrXfQqPJqj7ExmA/akCk8kP+A/ww8/qjMwW9ZPHU\nb75FunqPOxysj+1kPLophgbd1HX50HdtVz83/YGrr1sj7QbeD6s74pbTOQFNh3pxgNipa+Kkrrvp\nDXdNFPfuNQ5n7ua3neu63zCcwKSzELifg0PtYV9O2HSdt4Fz/+o6Pd4GL1Y+Rf0D1ffHw/48nvaX\ngGkgeP/3vw98y7bt3xAE4X8A/sH9c99jC+I4vnaN+Y0JOh6FekxnrnKcY9IM/f51rpYfZlMcQAs2\nCFBFl9pYmkom3095IwwGyEIHSxK4V5jC8CikPBnERLd4Utzcpa+RISBX8OkVfNRQah3kHZOUtgMh\ngTwhAp0aithmS+hBxqApeLgiPURJCCFiUcNLqRihYfiYiRzjiDSHnwodFG63TjHdmiLgK3PMM82k\ncJstUtgIqLQJUaKKj4IQQQhZaEoTvdBCFZqodLAQaQdkqqaX7VachuzB36kxUVtE1Zs0NZ2XrefR\nhSZ+qYpGE9Uy8JgVqroX3W7iLTaRBAuP0EJpdLiinKbq8dJLlj5xG92qY1omqtJCDBkQAs8rDZT1\nFt6n68wrI2SafQxubeIP1CnHgoQp0keGlqCRoY+Ab4VznusM19comwG83jo1fMTI00eGohoGbCIU\n6KAQpsgQq4SbZYLFGmfLtwknyuz2RomyR6BZZaitYHgVsnKSMkEqBBEp4hEaRPQ849g0TJ3l8SNk\n9D7ySgxbFsBrQ8yCHYFGycvK7BhqvEXF42c4ukzIW+T1H2b2/5Dz+iOzgTj2SJjm3Ffo5Hc/0Fo7\ndIdbTeEGIjfgulPPncxJOBiUdHhrOKgeETnonR9OvnFfA763GJXEwXs5vPejo0I5PK679on72ocV\nIU5bZ3syN+3jTol30yjqoe+M6V1a0Sr2xeOwnIeNDB8X+4FAWxCEfuAF4B8C/+390z8OPHX/+HeB\nV/k+k7tAhL5Whj+6/fMkezNcilyGXZk9Pc6qd4i5rUm2lQTp4ApjLNDj36UzPsN3736KSjCINGRg\nxiWqzQA7m300ez1sePqQMUiYO4w0V/i53X+H4O+wrqcAUOZN5JcFOp+TafsVLEHE8gqUpBCz4gQi\nFlk1yYvRhxhjkQhFethF2BHZq/WyEBhnUFhl1F7CJ9bJNRLM2FP8yjP/N+fVqwTsCpftJ7q0iNjh\nODOk2CJHnCe4zNnSLQJ3W+ycChHwlDll38KjV1hJpflO6hl62eZs9QanMzPc7Jnipdhz/Nv230SR\nOoyxyBFxjk+3v8NTrTdZjA9glQXGt9YQeixMRFodjW8rn6SCj+d5mbC/hG7WCXYqGH0yrbaEXLaw\nr0NrWSb3S2G+2/sk03tT/JPrv0Z9RGU5NsC4uYAg2KhSH0eZY9xe5CnrNQJ7LZblYTa9aY4zg06T\nGj5GWcJPtbvHJQYhu8RRc4Ej5UUCyy0CN9fxXGyQT4TwUSVcq2GVFTbVNEvyKDc5TY44l3ib81zj\nOueQbYOfFf6A9558mOuc444wReFmL/WqD5IdhGGZnfkkX37j5yElkBjN8vTJlzkuTP9QoP3DzuuP\nyqSzKYQvnuDab4aoZSHAPlBLhz5OOVZ30M/NKbsDe463Cd/LIzvp8PC9ae/uAKRjjvesu/o513eK\nN7npEzdd496h3aEyHA/e7SU79+LexqzKPvi7teHuZ3fLDZ1nVQ99N2vAvd4Q0i9dQPqjG5h/1UAb\n+L+AXwVCrnO9tm1vA9i2nRUEIfH9Ot/iFJt6H2Pn7zGsr+AxG0i7Jmv+QV7p/RS5XJywVmJyfJok\n20iYlAhjTtmkh1d4tOctjIhIRfWjDzY5p1+lj01ucJrlu0f4D8s/wd3Rc5wMvM8gi9zhBJMnZ3g6\n/jqvpj6BGDCZEu6wGwljCDISJguMs8gYGdJc5F1SbLFHlM+kvkrILDMhz3B0dZF4uYh+tMU531Vs\n3WZMXkChg9mReS7zKlm9l/nkCG0U4uwwwlI3cGlLYIJti8QaBZ7cfYdaVGPGf5SbnKafDby1JlMz\n85SPhWjGdS5pbzO7Mcnc3gmGjq7R1BTKok7CyJHT4rw2eIm0lMFCZMtKUdRDgE0VPx1RgZaAVrJQ\n3ze676QXQRgEvWPQu7vHzwT/iKL8DRLJHeohFdVsEC7W6Gg6gUCVa6SJtkoEKi3kukXd62WTPuY4\nioGMiIWJhJc6aTLdslClLSbmlokoJYgC5+BbqWd51z7PLwn/gpy/lw19kLBSwEuNXXoIUmKPCC/y\nefaIUWqFebH245TkEH61ypP6ZZaGx9kxErQ9MoHHaxhDKsszRzDaKqVsmDflp7n1znngN/9CE/8v\nY15/VPbJxCv83Ol/QTVwD9hXezi8tVsy564p7XieuNo5FIlDTcA+MDo0ixO4tPheqsExZzynrQOQ\nnUNtnEChoyxxgN/h4R0AdjInYT9r053Z6A5sOmM6aevOouBeTJz+7sxQ5zod9kvWSuzvRXkiNM1j\n5/4ev/f6EN8k9n2e/MHbnwnagiB8Fti2bfuGIAif+I80PRxn+MBm//uvINsGvd4tOk8NUrhwgo5P\npCr6mNk+Qf29ALq3RXGoB9PS0PQmUqTDkfQcut1kxLvAqjBE0+rB8oAgdS/VQaVQjrGaG2VpbIS2\nDDoVSoTIxpPMx0epodNj7xK18mjVFlXRz7bei43wQQBxkTEsRKLsoQQ6yBjs0sNVIUhUKDAiLJBS\nMhxRguzSQwcFn1VnoxqkgYaATZYkKh00WqwzQFvXiacKqHaTQKOOIpi0hTASFl7qhCgRkCuYITB0\nEQTQpBZj0iKqNMsk08RbOcS6jahbtDSFvBomQg7ZMrEti4Idpm0o7EndXWRsSSIk1fAoDSoEmPYc\nZ/zEEkPhDRSaHDUWqPp0Sv1+dv1RGqZGqphH87UJBMr34wGlbh1xr8qyPsg96xiZbD+SYDKQXCVm\n5glZFSJWGU1p0xZUtqUEd7Upir4whOB26AQNPNTwM6cd5YZ2hk/zDawdmXwugZC2qQUqVOQADXSK\nQohNoZ8B1hlhiTEWyPl6KBIgILWZHJhG87fR7RbL31mn+tJ1NkMm9vL3g5A/2/4y5nXXXnUdD9//\n/ChNYnhzhWfe+ibvFdvkOAh+bo/3wxQcTjEo9wf2KQLHi3YA0p1E45bkuZUcThDxcBKOA/7umtkO\ncLqLUx0uQuXui2tMd3KP25zAqXMd514d2eLh+ieHr+c8g1unLgOhQo6Lb73Eq5vPA3HXCD8qW7n/\n+Y/bD+JpPwZ8XhCEF+jGMgKCIPwbICsIQq9t29uCICSBne83QOuzv4HdaiE9PM+s6uW1SpLwRAGp\nYFC+2QNfgWwgTXYiDW0YSizxZPgVnve+jE6TaSZZZ4AFc5xSNcSeJ0rY093ZvOCPICYslFAdUwMb\nkfNcR8Rikz5e4Ov02xtonRaeeZM9NcHN2Cme4A38VLnCBb7CTzJsr/AL/C4b9HNPOMYC42wO9tFj\n7/L3xX+EQgfZNvgmn+qCi7DK/yN/iT5pnRd4kVucpmnrDLJGhAKJ6A7pSIZPZN7C36ix1pfEJ9YZ\nsZd5gsscZY6R6DL20waq0EC12ywIY/yN/j/h5/t+DwsJz3oHLWOSOR7HUKXu4sMeEbNAf2uT37b+\nCzbkPk547lAXvGT1JH2eTXqT2yzY4/xjfo1ffuR3GKxsANCQdXY8cdaGBpnlKPWan/7CDjJtQnaZ\nz/I1TE1iQR8kH4txlTNcM86RvTFEWspwJnmdn2t/mXPNm0gGzAVGuB06zvXz53il9hw3m6cB+Gnt\ny3xB+Pc08HDdPsdl4QlOcYvybIT860lKnwvRM5bjhO8OqwyjqW16tW0+y9eIscuyPUKpHaJgRxj1\nLvMw7zESWSb52BbfCH6Om0/8T+gnyhjrOu1z/+sPMIV/NPO6a5/4i17/L2ACoCO8LCJ+o4Vo7XPP\njnTNAR2Hs5XoPpyT3OIEAp162m45nlPCFdcYbmrFAXzn2PnpAPjhvR6de3MWACeg6CTUyK6+h81d\nyMoZS2MfXFXXeG69tTspx33srhR4WKLoePLueioWYNy1Kf+KQesDzYmzxfCPyoY5uOi/9qGt/kzQ\ntm3714FfBxAE4Sngv7Nt+28JgvAbwC8C/xj4BeDF7zfGpcnXMSyJmt9DXKgyLC0jyx0qoRDZk3X2\nvhRH0GxCU3kes95kRF/CI1RZYJwcPd29A/GhNTtYGxqB3hoTnll62CU+tIva02EhOkZE2SNJFgsR\nnSYBKhSIYAsCXrlOajBHWlrn83yVaSaZ4ygRCoyxCHWRf575ezwSf5Oj4TkypJAFg46gkCXZXQRa\n/cytTDFtnsEn1MiupbBTNm8PXMJEomb4eLd1kWF9hS05xW1O0hPZY5RFtoUkSbKEzTKP1a+Q1XuY\nVSYYFxcYtlew7a4OOiwU2SNGxCxQifjY8gYwvbBHlGVrhKHCJrpl0tZFLqhXOSLPcYpbpHdzdGyF\nhZ5h1sUB1GaHX939LRRPm3fi5+hhF1E1u5X08KLRRtUKbI320FI1ds0o5/ZuU1C8zEfGSZFlhBWm\nhGnq8Qg5Ic5rxlN4lCYVK8iTzbf4rvU073OSk9zmb2v/GlOWkDHYklL8SfsL7OTStH0yE5FZwhQZ\nn5jlmeg32EinMHSFO8ZJZu6dxFRF0hPrfI3P0jEVip0Qy5kjRO0CT42+RkvS2KSPU9yiNBBBSzSw\nAxap4e2/cO2Rv4x5/cBN9cLoo2RrBd5ff5EKBykC6IKO40E7PK3ThvvtghykORxPusHB+tvOeOKH\njOFIAW3XeceDdnhkm30ZnWMO/LlpEPcC4JRNdS8UOvuJOY5H7Va9uBNvOq7rfxgN49y/W3fufp7O\n/b+DI41cBAoDJ8D3OCy9De06H7X9MDrtfwT8oSAI/ymwCvzU92uY7N0g3+khl+shrtUZjq0gYFP0\nVLE0gdpTPjpFFTFjoQ40UYNNBLpAtUscC4letgkJZTqSTlAskzSzPNl8A0OSyQRT6GqDtqiyQwID\nmRh5vNSZ5wh+oUqftEmwp0q4U+RM+Tavep5mTRkkTYYB1qnbfhasY0i2RYIdzvI+Q+0NDEthVRsi\nJJTQ7SaGKbO6OUIr7wEZfMkyGSuN2VQwDBlVaHUDdR0vM80pHtPfJKFkkTCp4cPTajGc26DV0igK\nAeSgjRrsoPua+KniMVqYhsKqOETJG6IW8BGlW29cwWDLTmMj4pWqnBXexxAkBoR1PLbBqjXENc6j\n0+CYPcezxkvcVo6z6U+iU0PGoIOChwYhSnRkha1YLwI2kmFRtgJs2v3MMUHnvvL3lHDTHdS5AAAg\nAElEQVQLI6mzzgAVAtyTJkgrW5xVb5KXIrQtlQljHp9UpaPJlAgy3Z7irfLjbGRGmEjcZSrSLeIQ\nTeSZit2iWAyRX4/TqPjZLqeIRvMEqFAkTMZMs9QcZcDa4iHpKhd5lz2itFG7Gz+Ec8TJUseLLv1I\n/oF+4Hn9oE30iQQ+EcBc87C+frDGiBtkNQ7WAHHMoTvcVIk73d2dii5wkJ5wxnYn1zh9P4zWOByo\ndLd3PNvDyTbuSoDuazr34VaIODvJO9fE1catKXerZA4nD/EhbRwaxXlL2APk017CfQHKWRHLvQJ9\nRPbnAm3btl/jvs9u2/Ye8OwP0q9EiIX6OPl3UniSbaRHTfT7Of1NdDJ6msqyn+y/G+BP/tZPMPDQ\nCg/5ryJiMcgafiqk2aLtU9GOtZCFDlqrzcXt9/nn9V/h/xT/GzxDJQKeEkGhjJ8qYyzSwMM9jhEn\nx6O8RZ+ySbheIpStk++LUw35eZLX0WjS68syMT5NQ/QiY/AL/Gt6KiXWG0P8w+Svckq8yVn9OteO\nnaO0EGT7jQF4AfSeJn6rxq3cefqVdT6fepFhVrhTPsPLmb9BMR1FDnUYZplFxmg0/Qysb3P0xiJ2\nCcRJi6tnz3Bl7AIzHGe0sU6oUedPI58nJ8a6hapYYoA1LohrfDf2DBInOMv7nGrcQTObFD0BZnom\neYvHeEn4DKe4xaC2TjMlgmyh0SJMkTJBmugMsXo/hTzNJmlGWGFUWuJW4iS3hVPMMsE9JhhjiUeE\ntznWN8MKI1wVHkKlzZ4aJhuNMirMM2SscLF+nbv6BFekC7zJY9ysnmd1ewwrK6F622i02KUHCZNo\np0BpNsbynXGkTYP+n15maGLxvoJnj3vmce7VjvPp9Nf5nPerjAqLtNDIkmSaSbL0UiLIDr3cap76\nc073v9x5/aBNDbUZ/blZ4u9u0Pz6vvLCkfa509ZFuh6je5Nchw6ps++BeziYmAL7QUC37tvxbnG1\nc2iKw9yw4WrvliO6A6QOqOocDBy6AdgB/vah352f7iCn41U7Hr4znrNguHXdjv67yb533WZ/70vn\n3h3qJv30OuPn73HnpTbNIh+5PZCMyIX1CRoeD2ZVIrPRz7vTjxMd3EHzNzGQMS0JcchE/uk2nvEa\ntU6Ad+eewJOsoIfqqLSYtlqotJHEDorQoaF4mO8Z5pRxlf/F+gdEGiXWhH5uiie5M3eaciDCzkiC\nImHC9+V8i+IYGV8/oVSZjJ2iXveieNr0C5tIgsmaNMj47jJD7TU8iQay1iYtrPM3hX+LDXjsBv9Z\n51/y9tQMb/dcIjmYZSSyRErcpCeapyb6yAopxlkk6tklkdxg2nOcfnONHzO+ikduYpoKNEFSLYgB\nKTD8Ml6hzqd4hcnKNJ5CgyP+OXSlnzbqB3VM9qwYZ3J3CMgVtFiNafU4RSFEC5WSGKKOB5kOKwzz\nDfHTbCj9JIQdhqurBFabLPYc5e3eh9mml+xeH1REvtD7R8zuTvI7a79MPtLDni9KSQsietqs6wOs\nq/2cFW6QJsNzvEILjb7WFr2VPar+EHfUSbKeNJtyikV7lAV7nIIZIaiVeWzqNZ4tf5tH3n0bdbLB\nncAU63I/wdECpyJX6a3tsJbqY35ugu3XB7j03GXafQqy1mFbTnBDPMMC4909NelKCI8yz6X2O3j3\nOrylXuSfPogJ/DGxgFDh8+qLDMi3abFPYzhcs1tb7XiSDtXgZEy6a3y4//kdIHQH+dwZhg6t4fZk\nHYmgw5u7sxNhf8ccSYCmfTApRnCNq93v7+adHWB3QP5wFT8HpB21iJuWOZxZ6TyXU5vEqa/ipSsR\n7EYK9vu4i2MZwCPy26TUCisM0/xAY/PR2QMBbToCkscEFUr1KPV1H2KiTdKfocfe5ULrGtlIkqWR\nYeSaiVlSKLd8mBZUW14qxSCCz8bvrTDAGj5qtCSVml9nVJjjlHkDf7nFVescu0QpNWIIqomPKi1U\nFDrYCLTbGpYgQ9jCqIn4OnUGhU16lW1sQaDWDjC6uspAfZ1cJExD1RBlmzFx4f4rusaUPY09CIx3\nx0+yTZQ90oEN8sQ+2JrLFCUUrc222NsFHnsQxTAJCA0aYQ1hwEaRDMw+oasjRyRKHr9VRTBAsk16\njDwes0lEKbIu9nOPYzzduYxGi4bgYU3p/8CDjeRK9NkZRnpW2BKT3Gsd515+ktOhGyimgVS9ihCE\nImHe5SJZo49Au8ajdpJ77eN8u/oshlfBozQIiGWqmh/bBo02k8wQt3Ok2KJZ9+BrNhENm1CngiIb\n3FWP0RI0LFtEwCYq54kFCpyPvcfx5bskijlyZoQtkizJI9hJk77kJsfsWfJ2iPJKCGFXwtNqgGSi\nexpsyl0dvp8qOXqodfxolQ5eT5NxYYEjnVXWrYEHMn0/LuYxGlzcuEp4d5U7HKzW54C0OwXcnYXo\nBiHYB0U3iH4YYDvjH9ZNuNu7VSVukJcARdhv45j7Hp170QWo2V3gdis+DuuwD1cldAdC3QDv5DC6\nFzA3aDttne/cfLn772EDR3NzJNZb6EYS/rqA9iODb3CjdZZafwRjV0NuGYxYqxzjLgP2Ok+X3uSq\n9BC/1vO/UZ6OEqHAmUfeQ1Na5LfjbL03gu9kCWNEZoVhesgzaK8zZixiiiKr0iDNsM4SQ+hCg797\n9rfpEzaR6fA6T9LAy7I9ylOlt4iLOxRifga86ygNi2dzr7MZTdCRZD63+008t5u0azLtUyr1oIcS\nIW5xEh91IkKBm/oJbAROcJt3ucg2SUKUmOE4aTI8xWvkiLPQPMJmbpijiTlK3hC/r/0sP1n9Uwbl\nJbbO9JAo7hHqVGj2SFRUD5ukWWQMOSCgSTO8qTzKVGOWZ2qvsB5JckV7iNfEJ9lJxxm8v9O6gE0v\n2/ipcubaNC1DRf90g5viaW7nz3D71bPsnE3QPqLw/JFXGNPneRQ/8xxBi7WQoyZ/JP0k0qDFifR1\nSmKYIXGFU8Jt3hIuoQvNrnKDZXrZZthaQc+YNCwvq6NpLrXe5lTjNm/4HiEglGmh8R3hGeSQQczO\no4kN5kbHmB0a564yxQzHWWb4A3mlhIFfqDA5dYcz4zd4Qf8aq9IQf+r5cbJCEhuB48zwMFcoVKP8\nv9O/zO2hU7zV/wjn09d5b/lR4LcexBT+WJhUtQi/UsO33qUW3Zx0nX2P0c0zO8DrVoPAQQ/Une7u\nAK4T+HM4Z0fLrLvGdrxTNwfu5oQlwLAPFqOCgyoNBZBFUCQQDFDs/cxHt3LlcDq7w807GzK46R1c\nfxfn7cMBfbd37oznplvc5xzzXmlhbTYQaz9qyd8PZg8EtG/On6daCHKm9xq7tQQrs6Osn+knySaT\n4jTbvT2IQpvnpZeZHj1JA522qtAUNAhYTE3eIBrNowt1angxkckLMS5LTxAXcqhCG11ocqp9m+Od\nOVb1ft6QRsg3Y9y6fo5eX5aBU+us+dNk6aEghPAKNQRV4LXwYwyXVghZZTKBBKELJbzNOjGzRKaT\nZFvtZYeurtsr1PHQwEeNDjKb9JMkyyTT1O/XK8sRZ5gVEmqO0egy08oxrrYeplH2M6XNkvBuUVW9\nEBZoVxTCSyXG4iuoPR1Ew2assYqn3mQqMo2idXhfPMmq3I+IxWeEl4lLOWQMGni4zUmClPkEr+Id\nrBMv5Hnm9mWyQ2m2gjv8+Nk/Rk60mCjM4XmzhXFUIDaVZ5K7qFJ3V/gyQSpykKIcJkuyq/4gSYId\ngpTR7SYpe4t0M4u/1CLr7+Ua5/njvZ9kwnOPlJ6hLmjY2KhCmyd5jZagobQNJrKL4LVYCQwxW5xi\ntjZJ21CYSN7FnFf51hsvsHMiQXpsA6tP4AoXWKwdoZTrgUWoFSIU1TizoRO0fDolT4hKxUcoUyaW\n+BZjPfMHVNL/fze7Dq3LNur94oZurtgpvOSoKST2AdztNcLBzXodsHIn3ThAb7CfdGK5xnD6OfSH\nLEDb3gdZ9wLgDkweDpg61zNtqJlg2wdT5N2FnxxqB9czub1vZ0x3G/d+lXAwQOlc393X6ef2wAEa\nd6CybGN99MIR4AGB9la5H1+5ysljN9krx2gtauzmE6wERhgOr7CsjKGIbR6SriIOWKzYwxQJY9ki\nfn+Vo0dmuru402KHBDYgCybvS2eJ2XkS9g5Jshw354kZBa7bp7nBGdatAZZ3J6ADomCx641Sx0uG\ndHeii02yWoLoXgHBhu1AlNqURrBTRaqJ7Fi9bNDPBl3QDNINcu4ZUQpGlBVG8UoNdKVJnBw1fFTx\nkSKDV62jqi3yhNis95Nr9lL0hihrPir3RVeeRhN50WawvknS2MZjNlBKFtV2EH+yRk6PUZRCdIoq\n/WKGMe8ipiJSEf3skPhAvtdC417fBHE1T//6BsFWhWgsz0OTVwGIr+TRZjoQkQhS5iS38dAkSh4B\n2CLFMqOEKLHWGWKmM8WQtkzCyJGqb6N4DRqmh3LbYrWnnxvCKb6df5YF3wjj6hz9rBOkTIw8w6xg\nI6C325zJ3KHc4yXn76HQipKvxNGaLWKxAqViiNuzpzE6CgGxQrtP5S4nWDNG0GodKvMhKstRtqU+\n9KN1xHEDqw86NQ9GUWOoZ5VQuMi/fBAT+GNhIkZLITcjHKAHHABTXefcxZ0coLTZV2w4/R0wdSgB\nh5ZwVBkOCLqlfofVGApdztqw92kY9z249drO/bq5cxvo2F3gdtcoca7vBn73MzvHbr334XoizjkO\ntXe/eTj34JYeHlbGlDZhBwHzQBTho7MHAtqTp25gWSJJPcP41Bz9yXVefOOL3CqeI/tEL8XFBEfV\nWT4/+cccZQ4bge9YzxASS+g08FMlRh6VNiVCPM5lkmT5Q36K79hPU7P9TIl3aWtf54J6FUSbODkC\negX7GZGgWKCNSpoMJhJbpGihMtW+xxcK/4FXok+T9ZzlhHiHDGnuyDE2Av10BIU9IlznHCe5TYot\nVhjm/cZ5bpbOUjcDtAM6YtREoUOaTQZZQ8LkJmf4p/zX/Cx/wCX9Xb6d+iRHpHsf1JhO5vL0Le8g\nb5tI2xae2TaCx0aQoRwI8nXjBQRMLjSu8sy73yGtZ2HSZi4yiqa1mOIuIyyTJckC43zDfp5QpMSX\nUr+FrVkEqFAmSAsNWbMw0xJS0CBEiVPcYpFxZphklEUUOgQpMcIS1UqYr+XOYfZJnK7c4XOz3+Tr\nU89yNXaeEX2ZghRBwORs8l0qUrfUag0fU9whSoG7nOAktzjemUbPNVjXU2zLcbzxMj69QLumUVYD\nGA+JBAd3KX85hjhnoT3eRqVNwp/hkfEK7289zGZ7CArQe3QT3+kyGdLUCiHUTpu0sMUkdx/E9P2Y\nmIcWAtO2zAAHa3Q4oOUAqaN/LrBf+8MNyM6uM3BQ/ud4zoc9UyfxxPG6ZbpBvA/2ZLQOgj6uMdwU\nBRzkpe37YzoLi9vLd6eVuzcyOKy3lunWXnGUII7U0QFhB7id53IHTd10iEOzOH8XN5e+C6wg0yF0\nf6QaH6U9mO3GFA+a3OQexzCqKtvVPgqxKJ5olbiQQ+gVkcQOeaJ4aJAmw8PCezTQ0Wmi0MFAptwK\ncWPvAg2/j77AGlUCtAWNGj7qeLkunmWVIVYYJkSRY+I9kv4sKm0EbNYZoEgYEasbMJQlMv5eklqG\noFTARqCBh4yQ4rL0ODpNetnmBb7GIGv4qLNJH/WOD6sl83PB3+NM/X2iuT0u9z/KPd8xtuw0w80N\njjPHz2p/wHnhGorYwRAlrlQucts8yyPBNwgEStiKDdMg9tvdLFkbOjERqb/Jo9qbeBebHJ+fI+3L\novU2Kfn8LEtDZOlFxmCSaRQ67BGlqWtAkLvaFEdKi0yac1TDHnalGH5vFfGYhVZu07zaZmNyAM3b\nIkWGDQZYZvgDqmdV7KetSHjEOoZPZH5whPe8F2iIOglxm3mOkCfGMfEeJiI2AhIWHpps55O8/d7j\nVEbD6ENtkkd32A1G0YUWPyP/AfO+I9wVp8jlU+y1YnQ6OqcvvM9YZB7Bslm+PU6m3oeVkKjGfHCi\nAzmZkhRBLhscic1BWCRm5nlHepgUW3TTH/46WAwbvUsd8r2aZsc7dCiKw4FFd7BSdn3n9lIt1zk3\nzeB41hoHQdOhHhzAtgRo2AcDf05A0Z2k49ZkO2M4AAkH3xJwnTtsDgi79dXuolKm69gdYMR17Dxr\n/X5fB9w7rv4G0MSDxRG6epO/BqBt2wKSZXKneZK9UoJ8NY6RUAmFCwQ7FcSEhU+q3N9IoI23Uydd\n3WLHFwfNRqVFFR+bnQHulk6wq0QZDcwTI0+vsE1AqCDTYZVhluwxEmYOv1BHl5pMMItT6GiZEfaI\nYtx/7Iais6r0cbx1D73dZEEbw1Nropodiv4wAbGCnyqf5htIWKwxSBsFWxCIyAU+Gfgmj7beRsoL\nvJu4wLJvlAYePmm8ziO8w2fUl/AZddqCygn5Dt9qPU/T8PJF7x8SaJYx9wTkeyD00pX/bUIzoGAO\n25zjGrHdEunlHWqf9JEd6CHniZKll7vWFJtmH6rUQhJNtkgh6SYmEjc5xX/S+BOOGvMsh/oBC8lj\nUxnzod1ooS5Y7Iwl8HvLJK0s20aKLbGPu/IUG/RRUsMkA5t45Ro1r5f54AibpGlaGqvGMJtSH7Yk\nMM4CQcpAV4dfNoMsFo/w1rtPgCLgnyjRO76Np9kkUclx2nOTfnUd2TL59wvHqdQipHybPH7uMqFA\ngZXmCPMzx8mU+/GerdJJCMjRFoZHptjuQd9pcS52BbwWzZaHb2efI+3fAP74QUzhj4FFsUlg4TnA\nwzresHsTXDdt4A7OuXlb8VB7N9h9mKLEXYBKONRWBEShe67FhwO74wUfLrnqTm5xS/QO1xpxSwTd\nJvC99+qM6+bT3bpztwfutG3TfXtwJIOO570fuPUAY8AGsMZHaQ8EtM/L1yi3QqwuH6Xp0egZ32Jv\nOcnWbj+lTpje5Aa6r7vTiYzJam6QP736RXxni4wMLjDJDJukWVf7EeItTnpucIErlAgRJ4dGizd4\njCBFTlp3eaL8Dm8rF/mdwN/hEu98UDZ1lSEKRMiQ/iDNPcoegUIDzWjRk9plbH6NofImrQsaose8\nnxYvscYgNznNbU5RD+gEfHtclh+nmvDRF95kTw+j0sJLnZe8z3KTSeJijhf2XiFh70AcToevI3cs\n4o0i/q+3EF+yETLsZxC8DRUtwMbpflYZYnxkhViwxM3UJMvaIHmixNhDaXd4u3aJwcAqitrhGuep\nEABsCoQ50rOIZtcxJYk2KhU5yJXwaU71zxD2lZEVkyJhBBOe230VzdNhM5Kijo8+fZOL6nvcFk90\naRy2OMc1rrQu8s/2vsSnIi9xzDvTlTUiYSCTIc211nlmrCnqQz52IzHe5yw54nwh81Ve2HqZV08+\nxlJwmKrlw9iVmPTf5iePf5mT2i2uN87z1dxPUG0HiYVznD5+hTV1kK1CmlLDi90SEGQL1W6zZAyz\nuHGU5h/7Gbq4/CCm78fEvEAME/nAK7xbqeHQH7Lr2FFJyHRByPFAHfVF09XXDZRuD9kxwdXGqVft\n0BCafVAiCPsLgdPG7cm7gVi9/3Hu1V3NT/yQvnCQv3YWLT7kWrjaC67jDvtb9prs12dxtz84hgyE\n6ZIlH609ENCe2zlGeSdCqRUhGsgx4ptjL1lkp5akYMUYt6scN+7xbOdVXrI+xao0xPGh2/T7V+lj\ngxh5VhmiIev4/RU6kkKOOGWCHDPvccy6R0X205vf5fzuDcZZJhvt5UhgAQGbDfrZIsUOCTooqLQZ\no5uFJ2OAaqGW2vRezqOrTaSEwZR0hxxx2qgUCbNFmqoR4Pnit1jX+rjrneRG4RxRqcgF33tcEt9G\npcWscIyWpNFEp2MrCNsgWjZmTOIh+xqhtQrerzWQsBEeBvrpzriF7k9fsUFstkRm0KAQCrHi6UPw\nmHREhSwpohRISRnOadcJiFXAZohVJrYX6LF2sXotJpR7BO0SqtnG32jQyun4ZmoEG1U8vibH9uZp\ndxRMSWJOH6esBhljCRuBkhViujrJyjtjtAIeXn1shzAFHpHeYci3ypC8iojJCsN4aNDDLh7q+OUq\n8egub59/HCnRQcTiCPMkAllE2yCkFO9TUjKTI7cZ0leJe7ep46GlaESDOSKn8gTVIqqvhWUIoNkE\nhgqEjBIJT5a65KGFTqepUJ0JsM7wg5i+HxPr+ro2woGAmsNR+9hXPTjA6045d6eUu6v3Od46fG+t\nDjeN4VzTaesUaHIWAMezdatHcI3jjN/gIKXBh9yju1iUM66bSnGP615YBA7ubOP23h1ttkPzOAuG\ns5C5qRm3F+6MZx5guT9aeyCgfa84SeP/I+/NY+xKz/PO39nvvta9t27tC1lVLLK4k71R3a1u9SLJ\nslqypRiDxFscAzMJkgHGg2T8h8fIAGNkgJnMJAYymWS8JPY4tmK5pZbU6n0Tu9kkm/tSLLL25dbd\n9/0s88flYR2WW7ZgWeyG9QIXqLr3rLe+er73PN/zvO+2j26/itddpV9OEenPI5UNSoUwIbHIuLnC\nkfYVft/4JXKeCF889F3m2tfwNuusu4YQBRO32GRUW6OLwhojALiNJnuMRVqCi/7tHFM3l2iMeBgI\nbvE5XucGsywySeEuX24X7j9qXWSKWyBAxyfTycoI10Wqj/ioTbqIyxkqBMgTpYaPFi6CRpWvVf6c\na75ZMlqM+eocW+IwogCTnkVyYh932IufKgEqPbVLNU7L0CgTYsJYZnB1G/m/6PDLYDwr0tlW4I6F\nlRZp7nEjaiahjQrR/jzNoIuUHKO/niEhZdhwD+GxmgxLmzzk+5AQRTpojLHCV4rfYp85TzXuQkJH\nsbqoZofR2hbaiglvQD3mpjXjYqCapi1orHuGeDXwNIJsso+bAJw3jnOtdoD6RyHqMT/NRzW+wl9w\nTP2Ip9XXWGQPC0yxTT8J0kzoyxxsX+Gh1jkWzQtYkwJuocl4c4U57QqJWIp8LECSFGkSrKptjk6d\nI0r+3t+xpAQYCKxjHhAQBZM6XmRdx0cVPaDS10wRMMtkM3HEoElUyVEnTGnj01Pj+Ccfds5q3XM4\n2uBr268l7rd8O3lcmx5wtiLbzfE6K+XtBkKnosIGchvM7SzXDjuTdqpHLHYW/myJouo4VtexvTOb\ndlbx+2HZs12HxKnJlndt55QsOvtl7q5D4nSU2rLB3ndpYX3sVTz4eCCgfWjkAtV4gHV5mIamscIY\n46zgo4qFQB0vN+Vp/tz3JURLZ1hYx0BiaCWF1u3w/r5H8Mp1jnGBJCmq+GmjESPLgJRCpc3+7g3c\n212aq27OHj6CGO0yxQIv8SVWGCNCgRYuZHRctBlubTHKFlvuGGU5wObIADe/up+G340idUiSIkSR\nIGVkdPZzHU1pIw806UoCmtQi2b/GufIx/mHmPxEayNCnZDnIFWR0avio4ufVoc+jWF1OCh9QUoM0\n+m5zYN8CYkKnGnWxEhtBmjJodTQuykfxSnUGlQ3i3jQCJlZLYuD9LIlgnn2HbuI3mpyVT7DgnmKK\nBWr4uMBRZkZv0bUEmqKLQTYJC0UasgfRqqJpTZiBqzOz3Ng/TdhdZEGa4rx4nFviXp6xXuOY8BFv\n8DQepc7PxF7i2i8eZFtOkDP7yIhxrjJHjifZJnm3SmCbDYYIV8s8cvMj3DeaDDRyzDy0jCgamLLA\n9nSUtCfBGsMk2SZImTFWCFFExKKFixo+tlqDXCofBdnE56oS92V4WDtDa8PDiy9/jeqlCFLZwJoQ\nOP7CB4zOrpP+xRE6JRf87oMYwZ+GaGJRwkS/J/Gz1RZ2BmvbwW2ws182KNmqCRuonHy1rdhwLnLa\nFf92AyDsGHlsPtjNjsnH2XnGzpptuLPpEBs0nYoUJ/Da53J2udkdTqOQDbJOy7tNfwjs9JKDHfu9\nwA6PbU8odlVCe2LbWZTVgRL392//ZOKBgPYe921GXGu8ZX2WhuDGZ9VIdfqxRHgkcJonxDeIkaEk\nB9BoUzX9XDSOkPDm8Jk11oRh6vhI3DWybDHABkO9TFiMkCdKG436oJ8yYbb64oy01hnJbPFw3xn6\nXDlMBAbZpEiE8xznbekJFthLFQ+T4iIBdwWXu8656gny5T5OBd4hKuUJmSUGjBS6KPU4YpdChAIH\nuULBFWFNH6OsB0nnYojN6xzuu0SRMCo94C+FI7jqbQ6vXCfuS+ML1al+2cXyvjEKnhB9apZtIU5R\nj9BfyxBOl+gr5Im58oghE1MV8ekNskKEtJRAF4oUpRAFK8JQKUVAKOMKtlhzD5Mhdq+6YbBdwZNv\no+SN3n/BMCwM7uW96GMc5hLz1l4uW3NYCKwLw5zmMdIk0EUFReviHy7TslRapotrpYPkhRgDwQ3C\nQpExfZWZ5m3QTBJGGl+tjsvdwRVo4wo1SUn9bEpDbEhJ0sRpo+KhyVpujI/yJzk4dJE6Pm5WD2AE\nBNabI1QKYTx9FVoZD6m3hkkf2cTKS3Red9H1qD0aKQKa1iXuTROf28JTrZJ+EAP4UxF5oIFA675F\nNjvTdfZV/LiKds7Hf3a956RanCYWuF9h0eJ+YLW7pNvHdQKrk1ZxTg72hOPUctuZsZMKsY/h3M/a\ndTw7C3dmzLvNM/b2dlEtW+Ln5Lidenf7/LbhaEfZ0kJgiZ565JONBwLaMbI8I7zGtpCgSBjN7HCm\n8xBJcZvnI9/ns/qbGKbMGeFh+swcBTPCVXMOBiAklSgQJm0m6CLjFyr0CSp5oiwywaIwiSa1KUkh\n0vviVKcDjHbWCG7WiW0WecHzLW67JrnNXvZxk2vM8aLwAt/QvoqHBn6qPM/3OcRl4mQo1Pq42T7A\nHt8CkmTgN6sM1jepSn4yaoyqEiAgVjjIFRaYwvKBocpcvXkUoyUT6KtQxd+z4guXCPlKhOsVnl16\nm25Sod7vovSCl/PiYQpE+RrfYMMaotoN8HT+e0SvFLEWQB+QEMYshLhJE9iQYjbXBWAAACAASURB\nVFzmIKPaKhkxStvUGCutcUi8wlzwMv+RX2OBKea42ms/1lLxprqYDYkuEnLSIBOIs8QEU9yiaXlo\nWm6GxXVSQpIXeYExVlDoUre8mJaInyphocR6eRxLVDgWPIekm4y21nmq9i66CKYo0HXLSHtMrIhF\nfVDjtmuMq+IcDTw08CBi0EJjITvNK7d+Bi3cpCD08Ub6OVxKDaMlI5REIokiFC1SL49yOXEEsWpi\n3JTgF4Cne6O1G1AxahIhXx6vt/JTBNo5RFpoNO+jQQR6We5uILfBxgYzu7Z217GtEyxhR/5nA6kN\navZioJOP3r0I6OxF+XHgZ08S9iLp7sVFlfsXNu37cBp7nBJDuL9s627HplPu59zfCfTOet67eXz7\nacF+ovDQQGCBn5raI8uMc5rHyNNHEzeCUOVZ92vsF65zmEusSyOUCeCnylfLL1EmyBvBx1kVRykQ\nwUeN9bbGhjnEVfdB9gvXeYo3GWKDm+zjj/j7CJjEyDHZWuTYtcuMFjYQJAvN7Nm122i8ydNc4SAq\nHdx3TTthiiRIU8fLn/J1YpFtfsG8RFLaJEaWZHMb96KOt1NA9ZlcndxH1tNHhQBDbCBisCkPcnji\nPH1ijjxRfHdn4yscxE+FkKuIkLA4GztCNhBhn3CDQbaIUuhRL9Z1Zo15fN0aWNAJKmydjOOKN3Hl\nCrz3x+BOrvIzriLWmE7OH0USDC72z2EJBoNs8HlepoYPmS4hiqz7Bnl5ao69xh2mjQUGuhn2u6/R\nQCFGlrBQZFhY5wgXkdGp06vbbVvkF9p7QYBD2hWeSryJKnTZZJBLueME9SqdqMKouoKqttmaG2T/\newuMX1kl9Jk6UwOLuAItCkRw0SRECT9VzkcextwjkvdEsVQYcS3SdqlUW0FaLZM58yryVJvmP3Oh\nJwW6Cx6so0Lv2bYFeOHCGye4WZql+mgAy9wtAPu7HC1UykyiEwds0ZENMl52KAYb/D7OfQj3txiz\nM1C7f6TNl9thg5zBjsrD6Vy0+W4nmNqxW1ttA7Gz8qCd/VbYmSxUdowutr7b6ezc7X50ZvvOCcee\n2Jxdc5z72aBtu0Xt9QGTnhLb3n8YUNBRKQM+Pul4IKDdQWGJcep4aOKhKygMylsk2hlGWlu86nmO\nlNLPuLXMltIiYFV4znqVl6wvsi6MMMgmd+pT5LoJLmmHcYtNomaea/p+smIcUTbpZ7tHDUgN6n4P\nGaUPRWtjuiwizRLeWpuNwAhZra9XypQQHVR0ZPJESVf7ObNxiicTb6KFmlzQj3JcOs+ovEbaH8ev\nV9G0Nn6xinDHIrRWxTwi4g00ONi5hrvWxi20UGlT1IJ0ZAUJgwxxaq4A9f4A130zCIrBNPO4adLC\nxS2mmUwvM7y5hbJtQgVE0ULT26i5LvIiRG9DsFNnaLtOW5FIJHIkwymuug+QJs40tzjWvsQ+Y4EO\nKjfUGe7IE6QCSTRayEaXbDvOijJChUCPXxbKJO7mqQYSIiZN3AyzxhxXyIlRKkIAv1DF667RRiNH\nH6vdcRSzy2VtDpdYZ1jYJOwu4fK26HhV0lofCl32VJeoZzO43U3cwQZVzcu4f4lT8ttImoGsdJkV\nr3H9zhzddRdkBDKD/WgjDeTpLq2ch1bXi3UcPPuqeIer+LUq+VSMvBUj4UtRyQT/mpH3dykMZLXL\n4IhFoAGbWzsA5Hw5TSFOUHPat53UiVMt4pQOOi3vTs7YmblajuPZlInzc2cpVWctD7sEq30ep13e\n+Z7TjGOHsy6K0yDDx9yHff023WN/Rzi2t78HpzXffhKwnxJCgyB5LKSVTs/++QnHAwHtsFWkLnjp\notA1FUxTIiPFKLfDGAWN68oBNpQB3EKTq/45Zox5flX/PS4JB2niZpxlrjSPkWkPsB4dxWfVESyT\nb7W/zKx6g6fkN5njKhYCJS3ErX2TbBoJonqegFIhWKgS2yrxGfU0Qa2EiMl1DlDFTx0vq9YI9XKA\nrYujZI8mUAIdvt3+EkG1zKz7BktTY0TJk7S2GTbXCFxpYL2hsDXUz5i2yvPF15GWQZShOyhxOnqC\nnBzBQ4OrPMe6NkwklkelywRLvQVGBCpWgEVrkuBygz0XNnrTuwiKT2dgLQdVsG7Do3efH4UiuJoG\nyU6W2eANXhOe4bJwiCscZLS9xb72HQC+Kc7yoXiMIWODLHHqgpeOW+GccJIMcRJk7unU1xlGwMJF\n667L8jqP8j4NxcsikzTwsMQEbdOFYUioUgdLEkiRpGl6CHfKHKrOI8cMSuEgd+LjDIqbTORWkS9l\nseICrSmNkhRmxnUD1dPkbT6LjM5Id53lS9MYqwqianIpfxQ10sLrLmFsq5gNBU6Af2+J4YFlJlji\niv8o2WaCAwOXWDq/l09BTfoHFpIHwo8JuDfppdrsALJBL1t2UgrOnon2opoz67YX+pygaJcutRct\nbYDEcR4n12xTGzY94qRnbNB1Zsz2ddlgbjdy2O1uVB3ncC5Gqo5tbPhUHMd1LpTaRho7Y7YnMie9\nYgO/M6O3f7dVKa4DYA2AmAHKfOLxQED758xvsiRN8Bqf40jlKp8rvcXpxEk+ch/mSuIAIa3ABHeY\n5haLTNISXbysfJ600I+XBhEKPNL3Hic7H/D5xmvoLljUxlhzD+MS2+SJsk0/Q2wwzjJrjNC3UWR4\neZs/PPjfcNO7j86Axqhr+V43myQpJlmki8Ip/X2sgMD8E/uoBd0UpRCfd7/MHvE2RcJ8wCN0URnS\nN3mh+B28iSK1pxSMkIy1LiFdBCEGGCDeNhlxraN7BBbZQwMPIUoc5eJ9DQ0kDMb0NR6pnKe/lO2N\n9il2VnoC9J4ZTeAr9EZ3BtiAsdwaPz/4bYb8W5xRT/IhD/F9zzMsuPYgWTrvyw9xvT7HxbWHUQyd\nfs8Wj428Q0vVKBNkgyGyxFhgig4qI6wxzhIzzBMjy1XrIC+Vv0xF8nMwcBkTkb2lOzyz/BanB86y\nER7ALdQZq2/QX8ghbRlwB3ydOofUG5hJi5rkJpBvUYgEKfiC9JVKNF1uNoNtJu/WO+lXt3n28e8y\n3rzDkjhBNyjT8mjUTS+fHX0NMQbfbz1PVfHQbSjMum9QDEXo+GVCcgFXofVDRtzfzTB8IqUveNEv\nuTBeb2EX/Xexk2XDTrsxW1LnDJvSsDuzOPs12qBmqzrsz20A3V0/xElX2HSGEyidFvvd4ZQP2j/b\n1Qdt/t0+tj2x2Nmzfd+23dzOzHffY9fxst+HnUza7qxjsdPlB3YmEJvKaRyXacxpWK8IPz2g3XsM\ntzhAkj6xQFeRaQku8kqEpuKmnzQeGpiIxMkgCQYuocUw63TpNQiQ3V1kRcdqgltoEheyTMjL+KgR\nJ0OZIA08SBhUCIAs4XW30MQOkqpTCsSQ5UHqeMkQJ0mKYdZJkmKudA3dUDjZf4Z5aZpm18MLje+Q\n1LYouoJsMYCbFoJgUZTC1IZ8ZPtj4DfRGxLrwUHiQg43bUTVoq9WoOgK0fUrCFi4aRKmiN+sEmqV\nCZcrBK0aliiiKAZC1OqN+jBkAxHK3gB9ShZvpYXiNqAPUuE4K+4RZJdOzJVn4s4ql/bOIUQsPDRw\nyzUsDDJEqeCngp+CEGdQ3qRPzLOvvkDRipDWEhSIoNFmD3fu0iVbDLDVkzmmK3TXXUwnFjC9IofL\nl8h4+ghIVQxN5Fj1I/ZbV2nGNAxB4pY6herr0BfPEWqViHSL1E2NmtfN1kSQ1cQwW2o/MblIWfRT\nJIKISX8nzb7WAqV4mLwcoYKXLjJtS8NneZD8Ou2WC+u2QCfmIZ+Ic0fYg6kK+KQqm/VhimLkQQzf\nT000FRdnR48xuKVicfUvfW6DlQ3WTru7szVXm50FSSeVsNsF6bSA2787M2anxtmmE5zg6ayB4tRC\n71ayOCsLOq/bPq4N4LtrotgTxO5F2N1PE85zO+/DplicRhr7upyFsm7Fp9ge2U9TtiuIf7LxQEA7\nJ/URI8tTvMnlwCH+c+AX6KKgWW1iZGmhsSkMULO87DVvM8kyo+IKGSHOBkMsM86SMUGWGNueBCfF\ns/STIkaGaW4xxAZv8RTv8yhr1ggjrJEb6KM06OczvMNxznJDmuUOe7jN3p61Gz8BKnyJlwhmGhQ7\nUU5Gz7IqjWB1JD6TOkO3TyDvCmMiMWktclT6iLVIkoXoFBsMsY8btEdlLib388j5C7jENtaEgC/f\nIpir4fPXcNPEQqCNxkHjChOVVbRbJkIXsoEo788eZ+/UEv54DWHLYjk8wsLIJCc4y0A1g7JpQBYW\nBvbw55//WVy0eOjmefrfy3A+fpxb4WkGrS0eF95lkE0uWse4JczgddWoDng57v6Ar5jf4rn0m7Rw\nsaklaaOxj5vMMM8qo4iYhK0SXUsjsFBn+pWrzPz9G4h+C3+6zZXkNNeCs3wj+AJff/8vOLZ5iXYQ\nXlY+z82+WXyJKif2n+NA8wZSyup1AQq6ufX0DPPMsGKN0Qh5kAUdN00MRKabd5jLz/N24glKcuhu\nCQO9x6ELDRaYYj01SvtFPzwCKXWIb0hfZ4//Nj6zwdnNU7QDn45/ogcVVQJ8u/tljhg+DnL1Hl9r\nZ4xOCZvFjkXdBjMbnGwaxaY+nFyyvcgIO3SBXUbazridWbwzA7b14k7Djw2OcD/42hNJlx4V47l7\nTFsr7TymE8Tb7NQEsbN4+6nByYM7v4vd7cds/bqT899to7cXaUXgA+MxLnWfosYS9/eW/2TigYD2\nBY7yBG/TwE337gNJDR8rrXGqtSA/H/gzDE3gDetp3vrwWSJCgYmHFggLRboorDDG9SuHSG8nuZ3Y\nD8MSx2If4qfGZQ7zDk8QpMIM8xzmEoeMy3QEhU1pkIscRsLEQ4OjXGCIDRJsU8fHOsOc5SS3hvex\naE6SlmL4qXJEuozL20JSBKLkmGSRi50jnNYf44jrIuvSMItMECfDKGtMiQu4J6qURA+lYIim201W\n6ru3uFe7e66klMIXqhPaX8b9RpfgW1VOfucSxacDXDoxiz9QJVrK8/jVDGGpiKvVxa7DOaqu8hRv\ncpU5ul4Fa0ig6vaz3JrkVvkA0WCBz+pvcWrrQ8yEBJLId9a/zLX+g1gRgVuxabxKrcdX46GJm5vs\nY5xllpjgkn6EX9v8AwbZRjhs4bda5I0Qt5N7uOA+wiK9SfPd6cdYNYdwa3XG3t8gUcvz0WcPoRoG\nYltkPjbJadcjXGMWPzUyxFlpjLN5aZREJMX0vhsodMh4+rgs72NA22QPQa5wEAMJAQsTkSg5OhE3\n1UejjOxfJjm0gaq1qMgBtm4N0P1fFY48fo6PHsQA/pREp6Sy9P9NM7x2657MT6fHonm537TiVHzY\nFIizl6KzDocN1DZYOsuY2rpqG5ydi55OXrnD/eBqX5ezHKwN4DZw21UD7eOajt/thUH33ePZzXft\nDNjp0HTqr+17dhrObaB2Zud2iVYncNuAbV+n/USy9uYIiwszdCob/NSA9iaD3GA/OfrAtDhqXWRN\nHKHcDrNcmiTnjmFosM4IhqSxpo9yqzbFgGsduauznR9kqzhEuRSBisCCb5pYbJth1skQ5xbTTLFA\ngjR+qhhIqPSkflniSBhEyd8t89qhgZsNhsm1Y3y3+rMs+sbJuXqW6CNcxC9VyPnDSFoX+e6+iXSW\nSj6INGWQbKfxVxqEEiUUVwdJNGhHZaw1EeGchX5cxBVrMdZa57QCBSnCFgPkxD5qxiahUgWhAupW\nh4E7aRamJrn25Azj3mX2FW4zkt7qjagmvZEvgCWLdAyV1ew42VY/5rBM2h1DQkfE5IYwi4sWXqFN\nQkjzkHCGFXUPdcnFkjRB0Rvief1VHml8SK3mZ8UzQtEXIkQRhQ7NtpvA1RqiYLKxP0nd7yWnhNny\nJzDo9X7ME6US9bFJkm36eU5+nRFrnWrJB6rADWsfb7ce5wfdUywpE4x771C1/JRbIfZ2FvEYNUoE\newvSikJd8dBBJV/sI70xSFeUETUTt7dJMFSkL5ileKSP2f6rjARWKBChZIRoiB6ioSye7U/e6PAg\nw2yYlN6uI9abDNJb4qhzf6d0G5xtIBa4P/OE+yV6zkU5p+nELihlg+Ru5YWdoTu5aRzv7QZKp1b7\nvnviL2fUTtWKnVE7Nee7qR+bQtF3bbObJnEahex7dPLlTqWJbXcPA+aVJsXFGjQ+eeUI/IigLQhC\nEPiPwAF69/arwALwp8AosAJ83bKsj6Xpuyi8xJcoEuZL5kv8kvGH3FBm6bTdnCk/zruxx1FpoYhd\nBk5u0aj5uZk5SCqcRKhYNM6GsEZMmDDhtER6LMEy4/f6JBpIrDBGmSDb9HNaeowTnONZXiVP+h6v\nnCFOBw2NDjGyXK8l+cbCz5LYs0nMlSJABQOJlNzPteA0YXqZvkKXv7fwDaav3+GD/mMMbKXZe2OZ\nK8/MUHH7WBInSIpbxM8UGPmfU5T+nQfxcfBXWrwYeIGiFMZDgwoBjKyM59Uusm5CP3AO5uszvMlT\nPMZpkkYOjI3eiFoGrgL9sCqM8P3u53ntyhfYVhP8/pF/wB7PHfbIC/hdNZaZ4Hvac7yz9xT/lH/L\nY/yA7pTMFQ6ywmivImKnwGOFc7AE1wenmfdN4qVBP2n2N6/je69GdryPC188wDLjGEj0keMgV/BR\n4wwPM8oqKh3+Kz/P4CObDFXWeX75DT5InuDbrp/hD+Z/nTx9aKEm7VGFuu4h0i3yW9P/CyveYf4d\nv8YKY8jo3CBDDR/ZlX62/mKsd899wDg8dPA9YsltJvbNc5TzxMjyJk/R0D0oo22m/s/brP/W4I81\n+P82xvYDjXYDbp4mJtxgToT3zZ4/T2EnK7QpDDc7maTdLNd2PNpZstMGbytNOvQybqca2c5C7fft\n39m1zcfV+7DPYxdmsjN3J23i5MadYU9GNn3hppfD2N3U7czYCeQ2+NpKEvveOtzfV9L5NGKf287W\nbbrID+wD3li7dvfOP/ksG370TPv/Ar5nWdbXBEGQ6T2N/SbwumVZ/5sgCP8c+J+Af/FxO5/IXuBy\n7ACP8y5D4jpXhTkKQoSuR0KON/GqNTzUMU2RzMIAlXYAub9Bt65hdkSsvTpkRCiJEIdiIEwVPzPc\n5MS1C2ymhnnj5BNkgjHqgqdn485XGcqkiQdKIICpi1zrm2PZ0wOjImGmXfN8feBFFt0jpImiIzPE\nBkkhRRM3I6ktBsrLjIZThKUSnmiDWeEG3lgLbbbNuLJCtyIjdQTqAZX2ERXzf5S4sXcWpa5zYvUy\nM5PziK4uI6wxwhqq3EHwg6AAcSAJfcfyhChxjhMoAwaau814cw3PROsuqQa+aI2BRzbRhtr4lSrj\nrgV+sfwnRKQCl0P7SQhpTERETN7uPskr1nOIiklMyBInwzzTuM0Wwt3nPr9ew0Wb13iG4cUtXrjx\nXWKncnTHRGb1G0zdXsKSQRrrEC2XKYtRiMDLwufvFmTVWRHGeM9zisRolrZbISLl8E8W6GeduJqm\npngZk5c5LF2iYPlZkwfRqzK1l0K0Wh4q41Hic1u4+pvwpE4skCYYKOPytcgRJ13sRw61KIphYmTZ\nz3VS14dI5YZJPdqP+XURfufH/A/4Mcf2g427TPVzJtaXNLq/26F507rn2nNy0XB/Fmlnl84jORfj\npB/ymf37bnrEBkE77IzXmcE7f7at9jagOq/TPpfGTi0TZ9i0h91cGHYmGBvAncdzLk46i2BB7+HV\n3kemN+lZ9CYEe1u7Nol3v4T7H2vILwrwqrOv+ycbfy1oC4IQAD5jWdYvA1iWpQNlQRC+DDxxd7M/\nBN7mhwxs3ZTxUWOcZUxR5AazFAmR1fpQw00kVWfATHHYuMxb3c9Rw0fIm6dremhrLlpeGVeji1SB\netdPNROg6I8iJwxmGgsMF1Oc1h+me3cYyeh4ui389SZFj0peirJlJrnJLFmixMkQokRCzTAUXUF0\nNfHRU1WEKOGihY6MYJr4OzXi9Txi26JlKeiWTCEcpuwN0XSpBPQqEaOI1fCjhgx4FEQNhAoIdYuD\nuWskhS2CoSLhVplAuYaQtyAJ1jBwAKRk798jS4xrgVkCrjKxTB5DlagEfLhSLawg9Ek59vQvIHZN\nTlbPcKrzA0TNJE8QFy3aaGwyyBnrYaqWn8d5F+Xuv0g/aRqSmzuuccKREh1P70+fIc6e5ipz9Zsw\nCx1JZPBsl5oZoNbnpY6GaFr0d9M8VjrDuneAuuohQZoWLuaVaa6HZwlQoYaXvr40UXL0s02VAMc5\nz3H5PEtMcMvcQ6keQm/JiC0TrdshaaYoKyGWgnsR4yZSoIustiksjiBYFrOBS9RFL6utMRpZH40N\nP2ZNQTZM+g6nWP0bDvy/rbH94MNgdXiUt089S+GPz2CR/UuOQRuwbErAWYTJ5ooFx3bO/exwmnOc\nILw7s7UX7ZxGFSftYm9jZ9x27N7Gfm+39d2pHnFODE7u2QZr5304X/Z9GLuO4ZQ22hORDdwWkAv3\ncfozj7J5fthxlZ98/CiZ9jiQEwTh94FDwHngvwcSlmWlASzL2hYEIf7DDvBy7FnGWb7bm1FjjWFu\nsJ9VZQS30nMG7jHu8E86v4s1BT+QToEEHY9KuR1kqzpA/OAWWqTL8n+eobnmJ7M9wPzz+xgcTqMF\ndPKeCBa9OicKXUSvSXdA5mZ4L+9qp3jLepKKGCBOhjFW2M91snKM3/b9Jp/hPQZIkSdKiRAWAgnS\n1JIeMqEwg9ksalGnnvbygfUIRV8ILCgIEfYxzxPud4hsldEKOkLN4mTrYu+bDcDxtUvUyi7yRwNE\nC2UCC02E9y04RU+XHYOSN0SBCFHybNPPu8LjnFLPkveFuT4yRXJ6m5rowyvUeSb0MnvTSzy9+C7p\nqQhb4QRJUnhosMIY5zlOQYowwho/y7f5Ll/kOvt5jNOsugbJa5/neN95EIV7xqVk/9a9VS3lBybm\n2xZXf2OW+akpcmIfn4u9xkzhDr9153f4cOIot6J7yN99MskQ5yOOAb36DENsIGDSQWMvtxljBZUO\n88xwxTjEmjqC8gstRsVNZqR5pqQFbi/N8OG1x8kMDJFN9CNEO5jzGjPiPF+Yfpl5pnmr8BS339tP\nU/IQGi6wR77NFLf44McZ/X8LY/uTiDfSz3Lx8ixfrf4KM2TxswNuTi4Y7gc/mzLQ7n7mrD1i27/t\ncIK2s4Sqk+L4uPM4FRy2Ftp2R9qqE3bta9M0TtngbgrDpkjsRUo7Gxa5f1Kws2hnpm+Ds01/2Iub\n9jk67KwN2PdsAjcrM/z5hf+DUvoKcIFPS/wooC0DR4F/bFnWeUEQ/jW9rOPjdPsfG6V/+btctzq8\nag4SenKOsacTeGiwT7iJaFrcKM7xDk8hB3QWpCmqpp9KPYBLa2HoCmZBg7hIcmCTR174gIvdY3QC\nCl6txm1lgpRnkLwSpYkLH3VmuIjo6nJWOkJJDTAqrvBVvskGQ+ToY96c4fKFo2Rq/SwMTnEwcZ2h\nwCZumkTJM9zdYKq6hOxuU3N5eC/6MPkTUdqzGongFjEhTUUI0kalicaWOIDbWMPd6UIT5KIBHrCS\nsDmW4EpgP++In+HZ0OvMHb6O5RW4ltzPYnIPNa+XghJilhvMcZUiYVqSG9nXIiUNcUOe5VX5WQB8\n1OgKCkrQ4M7YGNF8AaEhcnV4jhYutumnRIiAWKFdcfPvV/4JvmSZqfgCVfxMVRYZbm9yIXyMohhC\nwGKALdo+mfeGTpIykoyubnA0dpmEJ0NHkglTwCM0EFoW7s0Wpf4QS9FxNhjmmfKbHDWuoIR0lsQJ\nGrgJUUKhSweV6+znZvUA1EU2/Em28gM0UiGkgE4qIkAUVDpU+vx4jpdpz3swqjKoItJEF8tjUJYC\nrOXHWanuoTHixTz/LqWXX+fdP6hyVv+xzTU/9tjuJeF2jN19/WRDv5TCKLc4nK0wosBS937wdbok\nbYrAaWKB+63p9stZrMnJSdvfsr2vTS0465rYn8H99Uls9cpuXbR9LU7LuH3tLnayXtjhomHnD2Gr\nUZzctTOztq/dSa04f3Zm1/bTgg2GHWBWAX+mwp/+3kfoS/ndf4KfUKzcff3V8aOA9gawblnW+bu/\n/zm9gZ0WBCFhWVZaEIR+eovZHxtf++1pfEaNt5pPk5OiNGnTTwoXbZqmh0bOzw0lQTcqUCZItREg\nl44TjheQBQOP0KS7ruKTG3x58lsMtjbZtvoZlLbIuSLc1ifJVWIoWge3t8kIa7iUJuvKAC1cRCiw\n17hDfclHWQrhHatTr4QRyiID0W36jBw+auTow0WLsF5itLJBB5FtOUZN85IfjiB0YDSzTtEXIh3t\nZ7CbwhRFrgn7qbuCBHxVZEtnuLKJqnQpB/xcjh7gTe2zfLvxZWJqjuB4EWtcINXuZ8UcYUHbw77a\nPA81z3FM+og1zzC3XXu4KB9kTRxhiQkucLQ3yVk3iRtZBM1kPZEkkc4RaNdRhrusMMYGg3RR8Ap1\nLFNgqTHJk/rrTHKbW0xjGhLdrsJVa45tEgSoMMESitYhr4a4LszAOByZu4zul3HRYoRebfNVaYRl\nt8aiPEGGXrVGr9Fgr36HliXjp0KOPkZZpYGHLQbIEyVvxHs1REwDTW8z1NqgqgZolH2sdCZI9m3j\nDdY46j1LenuQXD5BMRUlMbFGNJEhJ/axXR2g1Iogj3aI9s8QeGIQtdShW5ZJ/6f/8CMM4Z/c2IYn\nf5zz/81iLYuQTuM+5kOOR2lfyd8HxnaZVtPxnl0j2s6abbC16QWnO3F3gwCbE7ZVJPb79n5OQHVa\n0ndLEK1d2zkLTznpGWeFQft3Zya/22G5m2Zxqkm6jp/t8zq3sUFfZWeS0AFlNorb40X44CZ0HlRh\nsjHun/Tf+dit/lrQvjtw1wVBmLIsa4Fekczrd1+/DPwr4JeAb/2wY9xmL4esK/yL1v/ORfUg33U/\nxzQLpElwxnqESiGIoraRMGjholH1oS946LjquJIlBidWyP7fSRq3whz5gF605wAAIABJREFUynU+\nK56mranoEZNFZYK15ii5G/0Mx1eZmlogSh7v3Y7Jt5imQAS5rfO9P/oyfl+F3/iN32HgUI6m6eZq\ncJpxuWdvv85+ioSpWAFMXcTTajEibjKsZzBMCbLg+n6Lb+w/waufe47/ofhv2FKT/Fn4KxgJGSlu\nEOhW+EfGHxBV8nw0cJDXxaf5oH6Kja0JVvvHWQ6uAHC0eJkj7at8Y+AFHl35kCcWT6MGOmxODrMy\nPMaLzRcQFZOknEKjTYQCA1aKn2t+C49YZ8k1DJrFqLjKL/BfeIkv3Wsq0MBNMrjNl4++yIx0ExGT\nLQY4HXyYWsBHVurr3ScBDCQGzU1CRomCHCY4XKarKXwUPUoLlSNcYJ0Rrsf38+7jTxBX0wQpM8ES\nuWCIFDGOix8xxAa1uzXPz/BwT5dOij2BRdy+JttiP2F3gfhAhiviQW4t7Wf73CCuR9oc6b/IuLzM\nxceOcmbxUX7w7lOcHDjLmLbUazOnu5HFDoFYjpPSGQ5bl4iZWUpmiN/+6wbwT3hsfzLRpRWweO83\nHmbvkob8G2/e92mFe0URgY+vMWIvXLa4f8HSxU7lPydnbeutnQBoA7OLHXWIveBoK1Ya3D8x2LVQ\nVMd5nFJAWzHiZJCdgG9n0S3uf3rYrSAR2Kl2aFMeziYRdlZfv7utG6jevY8mcO6XDrM8epjOr+u9\nUuafovhR1SP/FPhjQRAUYAn4FXrfzZ8JgvCrwCrw9R+284XVE7SG3TS8XrJiDAAJAwELXZQIj2bQ\npA4KPZVF1F8gN52gJPvRmzJ9nixlX5SlvnH+7dB/x2ddbzImL7GhDGAiMqat8LnRVxC9BqrRJdnI\nIkgGOU8fAharjLKo7MHzdJUxdREJA90vINIhoWyTWMxS7Qbx7G0yubTCVGWR1oiMmJFQNnT0SYuK\nJ8R2op/FU5OciZ1kUxzk+75n0CUJSTAYlVfRkSlKYZqTKhkxyrw8TZEwpgJKuElKTZA3ozysn2Gg\nnqLcDqFaHdyuFlq0RScpQcgkJJQ44rpIWQyi0eZhziChUxd8fKCdBAHKop98fwJV6FDFy1RhCbOu\n8aF5ing0hcfXYEtLUiJImCInOEdKSrLKKEFKVAig0SJCgSVhgnVpGEsQUJvr6AWZm/FZbjPOTWaw\nEMhKcbbcSWa4yX6u94C7uspQfYuIUcS30SKnR7l9fBzdozDKKi1cLG7sZT5zAPd0Fd0vUZX91PBh\n+ES6YY0rG0dpd12UR4LscS2gR1VOT36WG7cOsV0YoH1coubxYmQkGn8aZPXYOOZ+EdXqMCas/M1H\n/t/S2P6kol1X+MEfHcUotXiKN++BoxMIbaekRK+UjbOAk63ldvZUtE0pzszb5sDtrNnO4J2uxqZj\nW+fxZO7P/J30ilNf7ZxMbBCWHMe0a1s7s3LTcczdChgbqG1aRaU3edhPDc5mD/b3ZUsdJXp+tne+\nu48PA0doN5a5vy3EJx8/EmhblnUZOPExH33uR9k/U05Q6fNzu7WXoFYmpBUpE6CKD1E0cQVbyEIX\nyxLwWA1k1aAdddHVJWS9i2p1iE7kKEXC/NnQVymKfua611jrDDPIBqPyGs/0vcKG1Otmo3a7NHGR\nIX6v9deiMsnM4/NMsoCOzHV1Bh0ZLzWoikhtE8sSSJbTjObWqfa7sdZEjJxMdjJEuRMk3Y7x/pGT\nrKuDuIwWqXY/AaXMqHuVITYoEaIohtlO9iFjUMWPRpuEuo0eklCkNpYlMGRuYIkC21KclJ4k749Q\nUgKUBr1YssWkucigkWKLJBXdz/OZV2hqLi5GD7OuDtBBQ7XabIUSGEjkiTLefpWhxhaybiJ4oK1q\npJR+/GYd1dLxSTUiQq/lWpQ8RcLoyDRxsyhOcJ4THOQKZleEugAGlAnRwIuJSB0vbTQSpJlhnjBF\nRlopgrU6NdODf7mB2ZBpzHlput2odBhjha3aMFu5QWYmr9LAw7o5QqvhRpM7TA7fpp3TuF2boqj7\nmRWvM+xfQ51pkTqXJLcVQSp3qLe8iDUTdVmnMelliwFMS0Rp//j/TD/u2P6kotsQmf9mmJF4DO+J\nKI3bVYxS5z7+16k59rADVLYN3CkRtDNp+z17YdAGRyftYS/u2XRFmx1AdXZ8scHYWX/EaWBxZvJO\n9+LHKVCc1IqTxnFWIbTPYfPVznuyW6k5HZj2IimOz9WwQnivn62rcW5lwvBj6ZN+MvFAHJFT8QVe\nWfsi0orOsYFz7Dl0m9tMkSGObsikVweQZANpr86KMUalEKK2FGb/xGVCoTx5IcrU8ZuoZocL7iO8\nuvoFvpv5CnpAYSJ+i1Ped/lHW39Ay+/hYuwwy8FhssQ4y0lGWGOQTURMxlghQRoXLb7HF0iT4DFO\n497XQrcUNuUBqnu9CH6D4KUG4iWLkhHgsn6IofkU0/NLnHuhyHhiiUQzy/Nn38ATrbNxMs55jt+7\npzM8zABbTHIHL3WSQoqHlA97i5ysUVc9rAyO8173cV5uPo/PVyUWTbGuDDOuL/No/QxSWqQecNNw\nqyS+W6A7IJH4YpoNhmij4aLFYHeTGn4uqQe5ExsnF+njSV7hXPVhbldm+Ez4bV5of4eIUeT3vf+A\nriATodBTxuBllTEqBKjho46XNAlKgRCu4RY/436Jw3xEAw9v8yS3mEZHJkCFMAUUdESvSVn1ccUz\ny2Rxlf5imiekd/h/rV/lvHCcf27+KzoTGq0RlUPuS6wwxnY3SfrOIMfd5/ja+J+wMTjEJeMQZ5oP\nseCaQnBDJLnN4DOb6CWF67cP082qhJQi+//hJYaja8TI4BernM08+iCG76c0usBlWk9VKfzmI7T/\n2TmMt3r10e2aGbADoDY4OkFNYqfJ7e5qfDZ94DyWHTbw26DoBBGnUsQGSGeGbxtdcFyLky+3gdyp\nAZe5n4OGnWYF9oKjnZHX2QH1Nvdz9zZNUmPnCWE35949GqH0b47R+Zdl+NMrfFoMNc54MD0igwuc\ntR4iH4mx5h3GxRHKd+3MliiiRNu02y42t8eQAy2QBNqym5Bcwr9d48b7h1AOG7hGWxSLMSTVxJOs\nobraWG5YlCf4buh5SlqwtwgnWbRRqONlgyHiZDjBOdw0AYF1hrEQGOpu8UjjHB23Ql318AjvM5Te\nREqBEDARZkGQLGS3TmdYoaFp9HnymIjIhk64WKKs+bnGHAtM0aCnX15hnEX23KMffEIdCwEXLTpo\nnBNO8sHqY3yQPsW2a5jaUADLL9DPNroos6qNMBRJESiVCd+xUEs6pkfA2JR4Nbof0yVwnHOsS8Oo\nbZ2Hqhc44z9BWeu1L+0zMjQsD1mhj/eVhwlKFXRBooGHOl7yRImR5SgfcYsZBtjiGV7DRCTgKVNM\n+FC0zt2OM73Wau2Cm+WVKRpjPtoRFwZdMlqUrqpSV93oSYmOX2Vb6SdFkhVrjFeFZ2loHgTN5JJ5\nmPXUGIXtOGFvHitick2dpUiYTClBbStMaSgCAtRSQVKSgCLqhJM5/KEqLrlFLhzBr5aJCr2FYyXQ\n/qsH3t/p6AnfludjvPT7g3xhbYUQada5v+iTDUg2xWAvxjn12s6M10ld2PyzU07otLU7NdA2reFs\nBOzU9jjliDbvbWuk7fP8MPrEuchqK092W97t63EWfnLy8k7bu72twv0dbYaA3GqMF3/vaZbmbcLk\n0xcPBLQH3BuMK7fxi1UkrUvO6iNrxrAs8FhNJH8Xo+aleDNOfN8mbl+LSDSHS2uhZHU8l1tsRwdo\nh1RKtSgDkXUGgyvEydwFoQivRp9igBR76DUCUO9a1QtE6KASpoRMlxYussQYYoMJY5VHGx9yXj5M\nU9E4wDVixRxUBDpzMt1xhZrsRXSbdIckmkn1HrVTE33UfB4W3RO8z6OImAQp00eOFEk2GKKBh0c5\nTZgSBhIuWlgILDDF9dwcK+uTkBCRdQOvVSdKjoyVIGMmiLSKeNJN3Ktd8IMkWqirJpueIXCZGIJE\nSkrip85kfQ3FraNrcq9tmCdPmAIAH4gPIWAxyw0ELDLdOMvVCZ7RXuO49zyrjDHMOk8Zb1CtBREk\ni0I4QJkAbVTcNBljhXQzibgBxAUEH0h1i6bqoqG66aKQj0aoBgJcUg+wTT+FdoQXsy8QVKuIPoM1\neZhsJknztp/oYzdohDU+4jg6MtlqP/qKm03/CJYlUr0ToeLqI5pIMzt9Cc3sUNEDLJh7CJgVkqRo\n4UIIGH/FqPvpiPVLIfJXhnl4dJrwcJ7ueuo+ANzthIT764HYAGnQy17hfiWH01ADO1m0rX22s1on\nj/1xHWtsEHVSHs5qezbgOl2SznonlmN/+xgfpyKxKwXaBhn7Z7tMvXPx0s7+7y1gjiQp6DO88q+n\naZtr/FSDNsCUNM8XI98hJuToWjL/T/PXWehMUdBB33ZhXFThbSi8EGfw6BpPDL5OUQkhjXX4lf/2\n3/Pyxpc4v3ACZW+DjkuiS2+xK08Uk37CFJnkDjPcpECEABV+lm9zi2kWmOLP+BpP8A4J0nipM8UC\nQ/IG3YDFXmkejz7IRfkIngkd70CTTCzMtpRgW+hnS+7nUPoGQ+U06yPDGG6JmsfH4uOjzMt7SZHk\nV/k9XLS4xGEmWaSfbWp4eZgPGWCLEiGmWMDuwfi5uVcYm17iXfkzxFzbhCngM2uEanXE1WVc32wh\nhw04Qq8IQgXcqSZfnfgmddx4rCYnrHOktQR/0v9zSLKOnwoiJh1U4qR5htf5Hl/gJvsQMZlkkVgl\nz7V3jpId70c8YjHOMhYCN9v7OfzRNdRgh/SxXof7DioaHUqEkGJdTj7+A2ZdV9mTX8R9UUcYhNRA\nnNuRKV717idvRamJXmr4cGdbrPyHKfR+Bc+jDcb33EKQJP5/9t47WLL7vu783Hw753455zd5BjOD\nAQgQIECKAgWBCrYCTYmSLO1altYr27Lkqg1yeV21Uq3WtmyVZGtL8lKiSCoQC1CkCBCikMPk/HKO\n3f06x9t9w/7Rr/F6hqQIk9QIhPit6poXbt9+c+vX5377/M453yUnxGp5kIGqw4R3DhMZo+LG2pR4\nKfwYjirgVATwQFxP8mHhS3w5873M1Q+hdFYIyE3HaooYydq7yvPyd1R7GK4yn/rlH+ZwYZDDv/qb\nVDmQ6bV3la2OskVH3A2QFQ465Xbgbwffdudj+wCFFu3RaHvu3a7LFlC3uvqvRb2029zbDT6tujvB\nrx2I24cW3+1+bDfytG4qVQ5ULHXg2V/4OJc9p2j8y1moVnm31j0B7VscouGo3Kwfxi1VUDWDLnmH\nctrHyvoIgXCe0HiOoJhjvbefsuRmtTJMQfcwrdziwa5XuekcYdYYJ+JNIskW8n66XQ2dHCFEHG7s\nHmd5bwJhyGTCM8uEPcf18nHmxQkqHo0duhBwaKAQIkNFdJPQ4oSzeXqqCWriAil3jN1YHEEzqYka\nFiI+SlgugSIeQlIGcNiQelgN9lPEi4sqO3QRZY8+NvBQfhs8B1klUs0wlNvAFShTc6t0kGDL20MB\nLx5K7NDFdfMY76u8ScoJs6dHOeLcRvRXqAxrpN1RnLKAHqzSX9zCkGWKEQ+LjJIQO5AkkxFrCdsU\nUaUGG0IfDrBNN71somE09e/4aGgqw4OL+CJ50kQQsdGpocp17C6BDXc3lzlOjiAGGrt0UkdFV2sc\nV68QdHJYLpF6rwQhyOhBrglHqYou6qgkiSNiEVeSbIeHKFX9GNd19Lk+7IiAbyJLxXSTLsZZV2rU\nqzoZIQLDDXJqEK9WYnRihoTagekWyQohcmaI0qIf/TMCqydHMU56CAX2sOW73/J/H6uBZVqsvG4w\nEjd58Idg+S3Ib94Juu10QwsI27XPLRBrgWm7+aZ98kt7cl4LPFoda7tqo31Ts11VAgcbpO3d/t26\n7Hbw5a7ft+eitP8/4M6OvrVJafDVN4j2TxPhPug9B88lTNZ2a9hmmXeTbf3uuiegfYMjRKw053P3\nY+kCXdo2h8QZOsopVrYm8A3m6J1cZvD+NRp12KgMcLN4FL+QQRRsVKeOHq/gE3J0yruYgoxGDQsJ\nAw0DjQYyi5lxkiudxLp2sD0CliPxZuVB8oqfIc8CJjIFfJQcHyYyRcHPkLyMXrUIZQpMssgXez/I\ngmuIceYBARGbLraR/HUyfh/qvlE240RYdMZooKCLNd7iLCMscr/zFkONVdxUqKguTGRcNYPRrXUy\nto+6FCKg5ikKXhLEUamToIMZZ5rjtdssu4a4FZvEP1nE21+g0OciQwQjoqJ0WYwtrCDkHQpRH5eF\nk83hClxn0ppDpoEkWTjAGgNc4QRjLDDKAm/wAGvVQXDg4WMv0SntkCWEgYabCnElgTkK60Ivlzi1\nPxbNzQ5dxEnRZ24wXlvAq5coB91UgxYmMjvEWGb4bW28gdbkwt0Vbh1rwAI0ZjTWV0bo+J5NBh5Z\nYmNthEI+yKzhwdjyYMsiwkQdpyjhdRcYHZilVpSpOgpLjFCQ/FjbMuX/GmDhY0FSQ50c815AEr5L\njwBg2JT/aB3ndJ7ujw9TXEngbJa/asOvvVtuB8V2J2S7jbu9i20d2wKMuzNIzLZztb7W237friq5\nO1iqBeAtYG9xzc7XeLSgtKUEaX8+bedo/aylCoGvPVhBE8Db4cX/SAfmH2SpXFjl3QzYcI9AW8Ch\naPqxdjQigRQDgXWu75wi4XRgH3JIinHsqkDdoxFSMui+GglXJ4ekm6h2nX9R/U3WKiNUBTeeaBld\nbg6l9VBmiGU62GWCeexBiXxHgLpfpYSHW+IhekJrnBCSHOMqh7hJBTcXOM2LzvuJkOFH+TSpeIlE\nOMoc41zTDmMiESfJyzzMFr38E36Hbnubou3jr6VHqQouhpwVXq+dIy8FkDQbG4EaOiE7x8TWMoIo\ncWPgSDMt0Npi2NgksFGmXtLYHOlhQp5DwOFNznGIm5ySLrAc7MOQZEJ2hs8//mGyWhAJiyd5liRx\nXpAe59zgmzQEhVtMMbCfHAhQUVwoyAg0By9U8KBS5w3OUcVFD1uwIFFMBIiczRD179FAoYaGhEWH\nlcSfqTKgbDEaXuQGR8jsjwazEIll0jw6+xpMNiDefGtniCBjNaWCiNRRiZAmyh62ICGLZnP9G0AR\nhqvLPCC9yIs9j7F0c4zC58PYXxFhUMD5WQ3yIlZIojLgRlAcNMfALxRQ1Sr0WvBhCQ6Z6L4SveIm\nC7uT92L5foeUxasz9/Px//AJ/ln61zgkvcgN6wBcW0DZojRa6owKBzkefg703R7u1DW3AK/FDber\nUVqqEDhQdZht523nstuVKyIHckGt7dw2TYVHa3Qa+19X9/+u1t/T/smhxYe3bjpS28/dHBht2m8I\nIjChwMLyGf71b/4ay4lbwO47v+R/R3VPQHt3pxfZMfH5C2j+GkXBR8iVRtRMdC1Ah7SLY4us5Ufo\ndm8gqw1U2aCHLeyaxI3aMQRRQGvU2ZvrQs43KDcCOGGF0a55ugK7LGSnqGkqcqhOh5CggxIRIU1B\nTeGhjIsqLmpU8JAlzFp1iF26ueQ+xWX91P7FMCnjIVjO072eJBrNkIuFUKjjrteo113sejrJic3x\nWFFpD1WsIzcsji3dxK2VSQ3EWHQP4xKrlPBSR6XhKGDCpreHBe8Qs8IoQ/k1HjZfQww69EsblAUv\nr0sPkMuHqVc18jEvDVUmamVwZRv4lRK2X+Ql5WHAQcPATYUua5eouceiPMqu1EEJLzV0ZBpkaEaa\nUhZY2xgibGSZjt0mJGcp4SVDCC9lTGRW7QGmi4tYukw6EGEpNY4oWxyLXsFPnrqm8FbkNF3qBvFE\nkvDVHI2pEt6+5ki1RXuUjBPGJVUpC26K5QCNKzIRPYX/fTm2O3pxjVSJimnCrhQ7oS5yneFmZFNN\ngGck8EIl6mU9NUzRH8QV28U/UCDqTtI75MX9/TWG+peIeFKk7QhJq+NeLN/vmMqUbC6WbT5/+Pu4\nT/ARuPEFRMfG5kDe1gK79hyS9mqXyMEBKN/tPIQ7z9HanGzf2GzvaluA3AJ+ue18LUpDb/u+dbNp\nvXare27XiDttP4e/WSnSbrtv3UhsUebF6Se4ZD/Mxevtz3x3170B7e1evJ4iff3LGLrKuj3AA9HX\nsUSRVQY5xjX2Sh0sZSfRlCoaVeplDdltolAjaBbwBvJQhpXZSewVkXTNZGNkiKCSpcu9zV8nH2PX\nEyegZviA+gJnpAuMssgKQ29rkbOEyBGkggupZlMgwMvu95OiOWbsIV7GS4mu8i4ds2mGJ1cxYxIW\nMkZDxzI0Km4vFdz4xCKntEsYaDgViX98+5OkAlH+aOgfcqNjmhBZdKqoGLgbZcg7rPT2cz16mB2z\nk5M7tzhcuYVfLpD2hJgXx/mK9ShrmVGcjMxY4BYd4i6hag55zyHkKTDgW+NLjQ+jC1UeVl7GRRW3\nXaHX2OZZ8fu5Jh4lTIYYKSJCmiRxjnMVV9ng+dtPcv/Qa5wbfxVJN0nQQ5pmSmEZD6/xINFGgZwS\nZNfuIp8I06NtcihyCxdVcr4QXxz/EA85r+BZqdLx5Sx+b4lATx5FMNk0+1h3+jgi3iApdLBV7cW+\nLdL3vlV6n1gntxCi6nWTbYQRbdDiNZRHq0hjAvYrMvWnNZgAM6ZQngtQG/ZiHVKR+0xirhT6QI3+\ngXUeb7yAbhr8W/N/IbM/bei71aoEtpDkM1MfYcbdz09lL6LuZXCqBjUOVCOtN32rO23poNsT+1oa\n5/ZuuD2fA+7MBGnXUrdz23bbo/X6d0sSW5uYLXCttf3eaHte+1T49sRB6a6ft6qdqml3WtaBuluj\nEo3yyeM/wc1yP1z/wje6uO+aEhzH+cZHfSsvIAjO+M51xnzzJPUoO+VeMsU4Q5E5gnoWDYMhVjBM\njaXGGHtqhNx8mOLTIU48eZ7p6ZsMNJoBUKvVIf5w7RN4hDLd+iadrl0i/j28epFGVeN68gQzhWmO\njV7ice/zPM4LABholPBQxoOAg9upsm12c905yl8pjzEqLDLMMt1sM848Q/UVOnIp/szzQ1zzHOUp\nniFqpinbXl6Tz+ETi/SzRgkfAg6BeoEHbl9kRR/kTyY/SoA83WwzzDImMvELaY791m3yjwcoHPFi\niBrxxT28hRLlATc3xye52TvFptPDcm2EUsPPQ56XOZSYoXsnQa7Xz1qwh3Wtj4idQcSmKrmIsodp\nyyTsTpbEYSJCmqfsZyiKXipCM3linT4uF0/z9NKPoKUMBqQVDp2+yknfRSaYo4yXNzjHFfsEP179\nND3iFlXNRa4cRBcNOt3bRJw0WqWBldYJlnMopkFNVah0ujA9MmrN5nnlMS4qJ5BFi1VhkI1KH+Iq\nxIJJdL3G+Wcfwg6IhI5mKFZ8SP46/o4sPcY22d0Q15eOgyJzn/c8/0P0P/Pf+CkWPGNMdd5CFZvu\nyid5lumlBYyCzqfGf4Q35XN8Rf8IjuPcq0Sfr1rb8L//Xbz031wdUTof1jj5P9Y58hufpPO58287\nG1WaVISbO1UUdQ6yOVodb4t3bgGnzsF8xlbIUku10b5x2QL29vjWFri23JUtK327iafVmbd3+e06\n7dagBJEDkG/XmMPB0GL2/1+t1y+3HVcHdr/3DPP//Me4+F/c7LxSh8Tef+dFvhf1b77m2r43kj/V\nIVOJspfppCa4kdQGu0YnliDQq26xYgxRqzQ/Uuc3QlhJmXj3LjF3Cp9UwJFAxEaWLASvgOUTMTSV\nXDZEzdQJS3vc572Iq1ZFrddJZ2KsWUPk1QBjLy9h+SU2znVTwU0NF1XBRUVxI2ITJk0HzRCkKjoy\nJqpaJxsPECHFFDNIWBT2MzPCZOi31hm2VrgqH8MtVhhlEbdYJiRmmGKGAj48jQrDxhpZLYgaqGEc\nl/DF87i0CjnFj93l0HBL+M0iAbNAXEjSKewyZc7jVCSm7Bn6NzdRliw+3fdDbOg9uKgwLC2TJcQN\njiDgkBcDvCo+2OS3nXXiQhI3FTKESRGjhA9RszjT8wZIAi6jDFKr83DIEkLEplfcRPbUCTeydJTn\ncfaE5qoXHYpdHgTFoU9bQ7RtslqQuc5R8mIAxTIZltbolTbJSz5uMwWAR6xQcAUpq14cRUDprZLd\ni5I/PwIdEPXsEFDzGBUdJdRg6txNgmaRE8oV+gLruBarlDb9LCSniPQlGYisMcgaqm6QsSKoskGf\n9u6zGL8rKrFHfsHL9Vs9RE9OEpQzaF9egbp1hx289W+7brll7xbaHq3j2r2B7Xkf7V1vC7jhTgNM\n+2Zo61wtV+XdG5Qu7oxqbZ2rnZqR+GoapV0b3t7ht2u+HU3CeHyIxNFxbtyOkF/YhUT5HV7Yd0fd\nE9DOmyEWt6cRsuCJ5PH1Z0kXo6jVOmF3lpnKNNl0DLZkeBG64psc/YVL3Ce/hYLJ6zxAiAxlxw+2\nSLHhp1x3Yy67iPXuMuW7gduscF/wPD3eTf5g7udYNUdY8w1y+JPzCN0NrEMSPrVMSu7gdfkcGcIo\nNDjBVTyUqKNQIcgOXfsKEZhmhtNcIEEHeYKYyPgoEjGz+OplcmIIVagTt5PIZZMoe5xxznOTQ0Rq\nOYaSWzgxgcqoRvqf+wkUSxi2zqq/B/94gWgxg7po4tVLdDnb+OwSkXSBwG4JIeogJWzS22FmjUky\nBJhgDhGbPaJcck4RtHMU8XFLPMSUMNOkRIQ4LrtK1XHxivAQLmpMyLO8L/Iq/kgeS5C4zTQlvMw6\nk+zaXXSS4EHx1eYA43qK/vQuXAcyYMoSrzw0Qr1XwhMt4YiwI8aYZ5wdukCCPXcEPwUipCkQQKVO\nuJph8fY0Rp9O19ENgo+nsL4skv9SDOFDNqpuIFo2MzuHiStJHhl/nnHmiZBhk14a6zrMK6StTsxH\nJXLhIDImie4oM8Io23QTInsvlu93ZFWvltj8n+ZI/PYAPWdsojdSOLslrLp1h5a61SW3UxYtjXcL\n/FwcdNQtAG5wJ3i0qJJWtZthWt13C3RbtMXdr9tSjrhpdsbtYG7dTylwAAAgAElEQVS2Hcf+axsc\ndN+tUWStm0jr9VodvUMTsK1uH5WfO0NqfYDVX1z677mk75q6J6DdFdhE0Qz0XoPyK17Sv9dJ47RK\nxpCpLfsoPeaDgNS8ug+C3lWjQ0ywSxc6NU5xiTBpslqYjY4+NpxebEtkZPoqYVcaqWzxx9d/konY\nDNMjN3hg6GXqssKiNUrlodcYmFvn5P92C+dBAeeYwsvjD6FhMMAa38Nz3KTp4vNQZp0+Fhlll07u\n4yIDrHGTw3goo9DgTe7nBeVxwlIGt1Slz9zAbdZIjEXJqQFKuDnk3CaWysCb0Dm9x3z/CJ8J/xgf\nuvkVxqqL9L5vE0kzUQUDQXZABLXeoHMvzaw2wa2JKbxqiW7fNvFDSZ6KPc023W+PQxtnng87z/GB\nxEssCqM82/kkKwwTIoefAvFihk4rjR6scbp6mRPV66iOgaCZZLUAe0qUguBHqMNHdp4j4kphxxxm\nhUkkR6Cf3eYYah9Ifosj9dvYawL+Rom3uk+R9fs5y1tc4DTbdNNAIUUMA437eZNlhpn3jhO4b48x\n1zzHuIKMxcrxYea7J/HGSpTdbtaNPmp1F4JoI2Htj4tziJLmo8f+nKMjV1h1BslH/YTtDJ5GhQ25\nj5QcZYQl5HdZ+tq7sS7/rkDpgS4e+K0fIPJ7r+P9wvzbRpv2jI/21Lx2aWDLAq9woAxpBVC13IYt\nF2JLFQIHlAd8dVZJy2fYPq2mvcuv7P++vQtvgXtLkSK3vWaLZmn9zbSdz2o//oPDZH7mLK9+oYP5\n179zNf73BLSVYgNzV6GRtTGWXTRyGhF9j4Yik1UjIDnNK58CegCvg4jNSmMIEZuj8nUagoIkmXS7\nN8gZfmqCzpB3CU00SG3FmX1uGuOYRmh4j3ONN6ijUFR8qON1XCkD9WqDLbOTnBKgjIcybuoohMgS\nJEeaMFmCVHFjIeKihq9axtUwqHrcxKw0IStHQusgLUaIiGmOcB0TmYQUZzY0QVoK4zgCx7hGUfPy\n15FJqi43G1I3i4xyxnUJybIIl/JkhQAFW8NbT1Ox3BQtP3puDV+tjKjb3BqaotTpRt23vkOTm9+g\nDxOZAHk8Upk+YZ0P8WV6sjtE2SMVjDFqr9JRS3I6dZkj9i0GnHVKqhtRaOy/URvE8mni+T1KthdD\nUqgjMcMUlqRS91yj0SMjmQ6a1EBXajSQMFDJCQHWnT6STpyE0EFZ8LDCIOb+W9RNhUw9zE6pCyOh\nI0YcPP4y3eygxQzsmICFhG11oBgNTgQvElH3yBEkSpNXDJLDH83iiRZQqGHaQdJ2hOvCEVLEmrkx\nbJLgu+qRb1SpGwIObvRjQ3QdFeg1I4y/fJlG1aBBU0LX6nrbueF2hUhLny21/VxsO64FvC2QbJfu\ntWiRrzfL8e4Ev3ZJYPsGZrsypXWzaP3d7X+/fde5bMBy6yQePkbi6ARbWwPMvSawd+vvZBvk21L3\nBLRrKx6SL/diXxUhAvqHq4w+NEPJ6yX3gB8EGxYlWFXAANOlUBj1M18bp2J7MH0yHUICl1PB5xTR\nrBp1WyHspKmjUs26sD8vsGH3cvuJQ/zk+mcI+/fY6OsiFMnijEJdVLhy6iiXh46SI0iKGG6qbNCH\njyJhJ8sN+yiWIDIgrPEkf8GJ/E2UssWa1s+R2gzxyh6fiZQoq24C++GyRcXDVeUIl7iPNBE0wSAo\n5Cj2eHmm5ym26EXF4BC3sI84WGUBd8pkRQxTwEuskm+CnN2NUZ/j8I0Zgtk8//5Hf4GUO0YRH29y\nljwBVBpNSgJQxAYrHX30s84/4z/Ss50iacf5C++HKGkeBivr/PDqMwheKEdcbAfi+MQCliNTF1QO\nJ+YY3Vrh35/8p2T8QXxCkU160TSDgqpTinrRCiaRRIFEOEzZpzeT/TDZcPr4Q+fjHOMancIuu3Qg\nYiNhYyExX5tgeX0E/lJl50Sa7e4e4qQICVkGWGOBMUTJZti1xA8NfI6K4OELPEEnuwjYuKmwzDDn\nOcMWPRSsAHtOjM8oP8qIsEyfs07QyXFTOHwvlu93fO3dgL/6eZuO33qCo7/8AP231rC2ElQd6w4J\nXY2DzcYWtdEeGNWuzW5JCFu0yd3DBmTu1Gm3A3SLs27FfX2tRMLWo+VmvNu23gqbahfptbjydhUM\ngkQ1FuXKv/oJbl0PsvkL89/MJXxX1T0BbSllc+79L3EjeZLGoETooT3EoIUg2GjuCo0ZF/ZFCc4D\nj4IsmXgpIpUEapaHjDeCg4BVklldGyXjDxAP79DDFj1sMxZaYu4HjuA5WqRX3WB2aARJHiQnBOj3\n7dA4LLN0fACjq8lJB8hxhvOEyHKDI0xzm7PZCzwwdxEh5mDFBapeBVOVCdoFjorX6bRTBOwSP8pn\nuMkhUkTxUaSAn3X6SRLDQSREFpkGYyzws/w/fIqPcZtpbnGI8tzzqFvNJRVUcwidJntTARyXg6Q1\nuDY4hROSKNW9TAVv0csGneyiUsdPkRgpNugjRor7uIibCjmCvMn9HO+7TlcuwUdufxmny2Yt3I3H\nVSGwWEZP1ek9tIssNqjiYjSwhNZVwQiK/ID+OWqORlHw8iKPsiH08SnhYzSQUdwW3q4yHfpOMxuF\nMh0k6HG2wIKS5KWOQi9bOPvuUTcVqi4Xuf4glQ972PJ2cL54Bq+7hCrXyRBGwOEwN5iw53hl91Eq\nkoupzhlipKihc5NDFPHhokaIHHEpRcNQeTP9EEeZpY8E/6X+86QDwXuxfN8zlfv9da6NB9n70H/k\noxc+yakbn2eZJthp3GmSaZf5tVQid4eUtjYiW5013Cm/a815bAF3i2+Gg265XY1itJ2zXZ5Y50Dh\n0g7orRtF+8CGFo8tAcPAG4e/jz87/TFSv5ujMLf9TV23d1vdE9COh3YZHFtm+0wv3q4Ch/qbDrrV\nxBCsiEgNC8EtYPkVxLiJGDaxEbG3ZKS6Q6Ajh18qUBa8VAU3ligjixa6YFCpe0iIXTSOKximTvL1\nLl4+8hCS10SwHLoDSfyRHBlvgMh2lqniHPVuhR628RgVjIILfAKq0+BM/QoF28cOHSzTR1734ZYr\nRMU9CoqPLb0XRWjQzxoxUnSzjVMWcZcMjKCOrQlEyFDBTY4gNlLTAMM2fWzQEBSWlSFkzWRPDVJR\nNepRFd2p0F3fhqpIJaQgBhpMMEeUPRQauKihYOInj8UgIjYxUmQJkSLGFj30+jfpyu4yem2ZVDJM\npUNH8EINFVs30YUqcs5GzMGosgI1B1e1ylH9JrVujfW+XnRqlAQPRXykiYACXqWIg0MRH3VUutlG\np0ZU2CMmpIixh0odLyWgmXeC0pT6hVxZcmaAguNnix6i7OGhjEqd/n03521yRJ09HjBfwRRlKqKb\nLaLYSHSQoJ91kmKcVYbZMPpZlofRpRqXOYkgNL7ByvtutZdxtUByRyX56FEGnEeIe8p0jL1FPVWm\nunVAP8BBt9oCwHZKowWsXyv6tOWEbN98hDuNMi3Leut57cl/7YaddurF4IDrbndhtqib9o4+0A3u\niJflpTNc4f3cLA/CS29BovTNX7x3Ud0T0J4+e4OwkKHjBza5j4v8A/6UtzhLdilK/S+8uH4kj/N4\ng2pQQTldhX6TnBCkflMlUM5z7MRVIkqaosdPdUpnzRoAB4qCl+cqH+a54kewfQp8SWDjZj/B/zNJ\nNJiiQ0xQCbuZYI7p+gzTb84j67cZ6F7hAqeRig4/PftH/NnYU9wOTXNq6gYL3mHmXCNIWOy4GtQR\n8VPkvOcUr3keRMbkJJd5iFcIkCeUKqIu2bx27DRJLQo47NLFBc6wwBg6NR7iVT7OJ3lr6ixfnHwM\nDxX2hCgSFie5zKCzSkcxheuySWVQoxTQsRGxkJrywX3XogCU8JAkxjr9bNJLjiBeSs1NuRxwCTrq\naQgCo5B8IERuwkvIzuJea6BfrTOyvQ5LNB273VD/Ph2jT6OIjxgp3s9LnOcMVVxvd7+LjHKNYzzE\ny2iCwbg8x31cIk6SFYYYZRELiWf5fgr46RU2+aj+NCsMcYEz7BEhTJrpfQWMgE1GDPNj3Z+k31yn\nw0hxQTvNjDhJBQ86NXrZ5CSX+UM+zrrQi6k5POP9Xl7ynsPGRPqqDLjv1jesxB78yRd4xnmU7cGz\n/OFP/gT5l5e59vSBbrtFSbS665YdXOeAb3ZxMKIrT5Mbb81crHCgCW8ZeKocqEbaufHWVnKrs747\noa+dJqlycPNoz8xu14ObwInTEDvXxcd/5//g0s063Poi2H+7fpR7WfcEtF1ilQYK9wtv0s02eSfA\n/Y03aQxqLPzgGGk7RuW2C+G6w5HDN/BIea5XjzJ0boHT2Yv88NVncPeWmYuN8YZ2jj5pgylrlkcr\nr7J1axhhDUInk9Qfc1Hp9FFYiGDseChpYUJHctTCa9iSAEegKrvYood5xgl4C6yPd6L4DfbkPv6t\n/1fR5TIVdG45hxkSVpgQmh1vf3KLnsLTvN57Bp9eJNpI409VcF0wsN+SkHos/NE8MXuPw3tz7Ihd\n+KPNCeV5/LzGg3iEMkPCKrt0UsFNES9VHkA3GgyYO0idDq5iHeV1C6cgkByIkJpq8to5gmzSSw0d\nN1W8FNmgjx268FNocvv9Ghv/qIMtuwfJcThp38BfLCMvWBQGA8wO9rAV6CVTiWAVRcKVLB8QX8LV\nXyZmp5gQ5lgQxvhvfIKTXGaUBTTH4LO1H+WSeYosITr1XY4o13mKZ7hgn2HeGedB4TWyQogiPp7i\nGZLEQYAetpgw53nEepk9JUzcStJt7fKWcgZHlIgIu2zSy6I0Rl3TyIkBlgpjXNy+n+6udToCO2zT\nzUxtCtG0ORa4iqMIqEKdaW4TJMvv34sF/F4r28HhNospgV/+1IPIDz2J/9cVPva7n8JZ22HDvnNT\nsMVbtzsLW59xrLu+bw+Yald1tDri9gk1cAC87fJDuHMaTbvJpj00quWQdIB+wB7o4U9+/h/x2nYd\nPptjae8mjmPB37KB8F7XvVGP0CBLiAlm0TBI0EEXOwSiWbRoBXWtjq1WkeMNXGqFhqGxmR1gtHeJ\ncHSP2owLr1UkQL7Jp4rQ6SSQsfBRpEfdxBvPkTHjlBMB6kk39V03da+L3dFO1unDLVYph0PYosCW\nE2dhbQKvU2R2YJyUGKGIl6QUxotGthjiwtJZduLd5DqDDAkrTNvzhK0citNAp4bHLOPeMFAyNoYg\noJ/PoCUF+uIpPHIV3V8jiw+ZJtVTwc1gfQNPrYJatlAxSasR8kEv6wygKhZSl42caSClLRo1hYLp\nJUeAIDlUp04ZD1v0kBWCbNBHGTc1NCxCVHCTDoXYPt3JKoN4alUmsgv4NstouQbbdpyNSA9LkeEm\n9QFkbT8d1UmG7WUi1RxT+gxJKc4sk4wzj8es0tPYJmXFmK9PYFZUliMj9CobHOcqM0xjoBEjxR5R\naujESOEgUMRHFTeT1jzDtTV2yx2ocg1Nq7HM0H66YJU9YiTFOFkxRA2djUo/t9aOUjS8ZDtD6LEy\nJcdLTEwxrd8mKcap0nSDttQm361vpnbJlODZi8O4JwcZHndzVF4mNjIPvWm0K2mMXP3t8V2tTcdW\nV3s3MdWiQtoVKHeHRbUs8+3KkZaR5+5hC+2xsXdz4q3XdwNKSKV2PExmLUqKSW4ETrN2rULtygqw\n9W26Vu+uumdDEDbo4z4uYiGxxgCOInDDPMJuoxPvQInwQALXByosWMPkM2GMFR8JtZtX4w/y4tn3\nc1Y8z7C4xPt4lQ36SIkRvuh+nOoZiTP2a9QUF+Zljd2bfc25QR4wNZk1cbCZ+GcfZj09SljOcDb0\nCkvPjeOya1z+2ZMsi0OESfNP+W0ucJrnNz9M6fdCzH7IT+F7fTiKwHJ8BCOqEZOSHMJBbNiw6kA3\niKdNQr8yj1qGziccdn8oQimq46VID1t4KHGIW3SV03i3qowurGMLArmYn5mTo7ykP8yfa0+hOzWC\nHXlcToWcHaRT2mWSWU5ymaizh+Fo/Lr4K1zhJOv0c4hb+7xwc2yXgMMqA9TQ6dZ2yHR4Uat1zIpM\nXgzgIBBlj0520aliCyJfdj/KmUKQJ/LPMR2doS6p2IgsMkrQKHIud5lQKI8qmBipAOueQWbdUwyx\nyoPCa7ioYgoy09ymiI/n+J6mOQaFBgodZprDpUUGd7YxIiLlQZXjXCVNhDRhouwRII+J0nRTGkAG\nNjaGKHb7GX58ji59hzhJhlmmhk4BP3tEKeO5V8v3PV2VP11n5mkv/2v1Ezz6Py/x5CdeJvgzr1C4\nsEeS/YG3NCmRFr/doifaA5tacrz2PJCWIgTuNNK0jjfaztG6McCdHbfVdkyLMinTBG193I/5n87y\nzO89wl//pxGMf7GAZZbazvDeq3cE2oIg/BLwMzSvxA3gp2jSWJ8FBoBV4B86jpP/Ws8PkGOSWRJ0\n4CDgCAI3OMzs3jTGmpehiTWwYGNliHLBg+OC4Ogeu3QhFB2O+S7TJ64jOA5/5TxGJ7uEhQwLjJNR\nwuSKQfYudlISvfi/f48yXqyUipB18Fol6lmdlUQX4955PL4CC8IY1bMamlOhIPpYToxRsMIIHbBQ\nnuJy8SxGwIWk17BsCa9TYkKco1PcRcbETYUb+mE8p6p0skenmqTrExZSHYRBgUZUpibqGGgU8SLs\nLyBBcrDDAqWjKppVR9Qb2LLAeq2feXOcs+63GJEXibLHIqNESBMn2bTYCzob9NHFNoPGOscrN5nz\njGCr8ON8mi163s6+FrExBJU/Fn6c7tguETONIzv01HYYttaZ0ceRJAuPUEajhlQ3MUoaV0MnuMQJ\ndp0uHjFeIeKk+VzgSSxV5Kh0DXdfjSH3It1sUcDP1PkFYuUUSw8MoOkGMiad7LydbjjFDGk1xJ8H\nniSmpEjrIVaEAaq40akRc1JM1efQhSppNcwtpqimXfA62IaEcUij8AE/mUyMnBnFE62QliKkrBhp\nIwLr35pB4ltd1++ZMmwso0KZTa58pU5uewzf2nG6P5Bi5COznPzDK5i308zWD+JN7x5K0NoEbKdG\n4ADkW/kf0FSqwIFUsGW6ac/tbs/ndtrOMaaDfSjK6x87wavPTrAzE6Px74qs3DKo2JtQrvBeBmx4\nB6AtCEI38IvApOM4dUEQPgv8GDANvOA4zm8IgvArwL8GfvVrncNCppdNMoQxkWnYCjOVQyRLnXTV\nEkStFPlkiPSrnaBCz+gaZzpfZaUwhmbW6SCJQoO0E+FC4zSnpEtoTp3F/Dg1XUOwHBp5je6eLSKH\nUszkpynqQSTBRpZNylUfmUyccPx1XMESW84hnGmbuqWwXBtlPTtM2QkwF5/gdvUwO2Iv8SO7dMfX\nGXKao8O81TJqw0T1GNQknZLqJTyaRqk1UKomyhN1aqikBD8Vj0IRH2vOIN5SmVCjgEtsIFVsDFFl\ndzCGbteo2xoV2Y27XqHL3KGbneYgYEpESKNhUMDHHOMkjE4Wa2NYHpFOew+/WcRxBDyUOMINEnSQ\nJdQMkUImRYw3OUevb5N+1vGTR647uM0a841x3JSJSikAipKXBWWE28IU84yTJoLPLmJJEuf1k+Qq\nQQJCjuHoElPCDF5K7BFFLpp482WCjRxetURJ9FDDhUIDLyXCZNhQellUxuj3rlPExyY9WMh4KJMj\nSMjO4xHL7BLbjwvwNz8iVx2kioXm1JDMpmNUcRpYSJQdD1ggVL950P52rOv3VplAgq2rsHU1BBxj\nIpjDGXbR56lRDReZi/iZCswTzu2hzVrk7OamY4sCuRvI4U56pCXb83IAwu1sc/tAhVZIlReQp0Vy\nwShzhUm0TB7J62N1+AQXgyeYT/jh09f3z/7uHRH27ax3So9IgEcQhFYUwRbNxfz+/d//v8CLfJ3F\nvcwwh7m5n03hJ2XGWNqYxK8UeOTss2TUEJnrUXgJeB8c9VznN8x/xRd9TzArTmIKEtc4xobVR74a\nYE6fYKfSzdzFw/QMrjE2PovnkVuckd9iTFrgD4I/xerhQaxJmQRx8oUIVkBkTR4gxB5+ChQVH2kj\nxnPJJzHqGoau8Vl+hHlxnHB8j8fG/pInpc8zySzXOcKzqR/kYuYs9429wQnPJY5yjQHWqGgezivH\niZEiSZzbwjTHhSvs0sELPM4vrf42D2VeQ3E1kKo2KV+YlcgQjizgIFDCy4dcz/OE/gWSYgeb9L4N\nvimiXOA+VhlkMzNIZj3OoYmrXAoY/IH6Ezwsvswks8wyiUodD2XWGGCFIZLEMZFwgAL+pllFO0te\nCnKtdJSAlmfYs8wQK9QCLm77JjH2qZE8fv5S/yBhsiiOyer2GA1BJjLSvCE0deMFig+6KDc0Jp0F\nHNNhRz3K83yQbnY4wg1WGWSZYVYZJEOYOEnGWESlzhoDvMj7uaCdBgGquEgTITUUh58GLoLPXWRa\nvE1vdIsuZ5tuaYssQdalfgY9q0Sm03zuW1j83+q6fu+WAVxh6Us2W6+4ebbwIZwzk0g/cYp/d98v\nc+at5/H+Uomv1GF7H51dHFjLWxuOcMBFaxzw4e0ywhbHXW073qKpSukATgLqL6q8fP8D/NGV/xv7\n9y/Am3PUfs6iVlriYJv07099Q9B2HGdbEITfBNZp3lifdxznBUEQOhzHSewfsysIwtedsuogoNDg\nMifYpoc9IUpGCdOhJehzrVNBx/EDY0AQVuQhfl/6aW5sH8exRB4ceImi5MPOSphvudjKDZK0TMqa\nl91GD8FcnkcOf4ZOdZcsIc5KbyE6Fm/a96NJBm67Qq3opWD6sHEwUCnWfFQMF4ak4YpUcLkLmKJM\nv2cF1dUg6k4Rsfbw2kXyBOgNrKOqBhklyB5RqrjJEiIhdHJDOkIBPyGyjDoL9BnbBIQSH1S/TE9s\nDcdrkVO9JK04RdVLWEzzhvAAWYJ8kBdYEoZZZvhtS314f5J6v7nOKfMqN9VpMr5b2L0yEVcSR4QC\nPgZYx7P/oVOnRq+9SYedoC6q1ESdMGlcVKniIkmcnBikJut0unapSyqrDGAjoks1ZMmkk11OVK/y\nRPl5Uv4wSTVGxgkjRupUGj4uZO9H9piMagu4qXLNdYyb2mE8jSqqVCOPnwHW6GQXhQYLjL1tO5cx\nyRGkjIcHeJ0gzU3d1wrvZ9vpRNRNutUt4kqCVLCTY2euEXMlWJMH8UhlAuTYpI+sGcTtVLhPvsjR\nnVvfNGh/O9b1e7eaojqzAqUKlBBhJYv8/93is2/1cX7rcRTTYbV3GvOITtcjG7xPepPJxCKu8zWs\nWcjuwKJzAOItProVNtUKehoCQt2gTAsUT+vMxce5aJ5l46974UaVFzZuIz3rsH6pn/TuTazVHBgi\nJFsM+t+/eif0SBB4iibHlwf+VBCEj3HnJxu+xvdv161fe5ptstzAovGIH/2haWSviaoYNByFsuOh\n5nXBiEOwM0POHeAPaj9DIRuin3VOOBeo4Kbe0FDTDQo3gpg1FR6C7GqMzZuDWJrK+sAA274uJqQ5\ngnaehq3gUzPYZYXMskCt14UZFCmaXsoZH3ZDxOfOEvZniOpNCqbTvY3q1CniJSXE8IlFCoKf4cAi\nU4Fb/AXfR3V/Dk6SDop1P05DZF6boFPeYYoZFNukgyRneQshapE0wkhVh4zHj6Fp9AhbFPCxSycu\nKmSIsOwMc855g2FnhaCdI18N0WduMmStMWitUVM0lFCDrBIgQ5g0YUDYH/DgwUIiSB6/XcAnFIk7\nCY5ynTRRloVhCvixkAiJWUZcS6wwyJw9yXJDQ66auOpVvMESveY2jxqv8IZ9HzU0ioKP6fBN1qsD\nzOcmuaUcpibqDMhrZIUQBdGPqcn7499KxEmhUSdLiCRxivsKGg2DIl72iGIi0802bqfCReMchUYI\nu25zJHADpAyr+jDDnfN4XQVe50E26UXAQaZB6cXLmC9+isvSJtup5De98L8d67pZL7Z9Pbj/eK9V\nAza3MTe3eYEgEAF0cD9IqN/N6NlZRpQyPSsNpM0yxrpDBoEVZAxcyOhoyNgImDjYmDjNkGR8mIge\nB1ePQO6Ej7X+o1ysP87y0gT55SIQgr+s0ey/L/2dXoW//Vrdf/zN9U7okceBZcdxMgCCIDwNPAAk\nWl2JIAidwNd9B/2TXwtTZJAK/4AqLiLObTLRBDYOr/I+Vq1BEo1uBNPm1NB5hKjDS8sfQArVSQcD\nPCM+1bSxxyXiT23hKJBdjEM3MAM7r3Xxf5V+FeFhE/l0hRO+q0iKyYQ8T0VwUdoM4nwF6lMqRlSm\nUAxgregElRyjJ2aIyM2O1ESmiI8yHjbsPkTRoSj4UGjgpoK4LzHU94cK5wgymN/kwcQFPAMVrvqO\n8nv8Y57Sn6Wfdcp4WJRG6cineOTia/gPF8n3ecnIYUZYxk+ROSbxU+BDzpd50HidoJNFrtqISxKq\n1EB1NZi8tYSjC9RHFN7sP8U17zFe4SEipFFoWtN72UQWTJ5WfgARmwnmeL/9MheE0ywLwxhojDPP\nMa7RyybwCDPWITYzA5jzGu7tMrFHUyzFhvDqBbakLiKkOcUlvJSY1Sb5bPRHWChMkK5HsUISulBD\nxnxbKVIgQH7/YSITI4VMo7kxjISXMhI2NzhCHZURcYmByBLb2S62dvsJ6CW8vjxD0UWqko4DdLPF\nHhEK+138jz92C98H4DPCv2TPkOF3PvoOlvDfzrpu1iPf7Ot/B5cFVGD5NfK7Ijf/0mCNAfRGB1LR\nxqmC6ShUCeAwgsAQAmGc/XxBhxywjMgCOnnktQZCCqy/EqkqLorOIvX8OpTt5ut8o/vme6YGufOm\n/9LXPOqdgPY6cL8gCDpNsusx4ALN2ZufAH4d+Engma93gkXGcFElSI5eNhkVFhFkhyousk4IUbRQ\nOxok768T6krjcZW4z3qLEd88XleRtBChm21QHK6ETpILRKFUhj9egRtBlIqH+Pg2tUGVnBPg5uVj\nSB4Lq0vAWHcRa6Q58ZHPsdI5wHahG2tBR3Y3sFwiu9t9lPo7UOcAACAASURBVIM+op4kvfImq4UR\nNup9FL1u3qi+jw1zCE84j18uIDgOS84Iq8YQK/UR+jzrVFxealGdeXWMDGECTp6uZIqhxiamS2bF\n14fgtdkZiREWs0TyeWS3zSmuUTXcSAWTekDG9Ivk5ACumoFqlZmNjeFTivQpG2iDdaqqi91IjIvK\nKTKEOcUl6vv2AoUGk8wiCA63mWp2346X28I0mmBwiktE2UPDoG6rvGg9QkqMMSCusulxcHpF/P4C\nksfkljPNdesIhqgSJPe2/Xx9b5C1mVHyPUF8sQKmIDe19uTJEWSLblJ0YCKR2O3GKOkM9K6RTURI\nJbqYnJqj4nWx7vRjCyKlsp83iw+xEupjzDPLD8Y+R0YLsFIaZm+nk3IxgM9TxD+eIZePUqr4yEkx\nKpoXPV3l5peOU5/Uvt6Seyf1La/rv9/lgFHGNqCahSoaB7oQaBIiOk12OgEUOVBa12iy2Pszcup2\nc4cy13quwUGc1Hfr7nonnPZ5QRD+DLhCk0S6AvxXwPf/s/emwZKd533f7z1r7/t6932dfQazYLAN\nSRCASIiiSK2x9mxVLtmJSxXLTj7I+ZC4KvrguFyVuORIlixZsiiLEkASBEgAA2AGmBlgMPvM3fel\nu2/ve/fZ8uFOWE6iJK5IuASF+6s6Vd3nQz91uv/17+73PO/zB/5UCPGrwDrw0/9Pr3Gre4oea5eA\nVqVX3maQdbw0aOBhV/RgyArdmEYj4saUJNxSg1Pu61zkfcKUWGScQdap4WOeKUTbgo02vLcLTQd1\nWqLnxCbdUQ2aDntbPRgBBQIW7RU/6WiWo5dukStFYVegVwzU/hamJrO5NIxbriDcJie4xVZ7CLul\nEnUV2awMMt+aJeHfwivXkLGpOEEqnTB2U+K86wOabjdz+gQfyadx02LaecRgcZPx+hqOGwxFpugP\nUhoLENyrEyg1cbULSJqEr9UmvZyhOOxnNdTHXekYpe4uSXmP631nSKs7uO06AX+dkhRi2TXIPBOo\nGJznGlv00ax7cOW69Cc2cfla2AhWGKElPDwQs8zwkOPcYZJ5dklznyNctp7DazXplzbw+2p03C5s\nU8KjNShYUZbNERJiDwONtuzGQKVYj9NZ9kBYICQbGwmVLmGKRChSxc+uk6btuKhWg5gFDU+qhShC\ne8OLZ6RJUURYaYwSClXIddMsVGbw+UtMeue45Poeb4gvUi5FyKz2I9UsAr4SfW6odwIUOzFyTi+7\nwRRatk3xtRRW9/9/98jfhK4P+X/j/+imbrD//XjI3xT/Ud0jjuP8E+Cf/F9OF9n/i/n/yXZxgHuF\n0zw99BamV2GBCYpEaOKmg84OPeyYvew1Eyx5RjE0hX62qOEnTIlZHjDHFHc4TpYEnTsSXNNg6AkI\naDSGFT5oP0NffYM+/yaBS9X9SC3VYWHiCHPSNJl8jMpfRFHdBgNfXaLq8lMrBaENLqlNVC0yzBqR\nSImz9vu4lBbfl17iQ/M81U4QRTHwKzX8Uo2uotFW3GiizWJnnMXGBFqwTUrLkCNB16vv/7DYgnbM\njaLZTOTXcbc6iAbIm/Bnoz/JqjzEP9r5bRajo7zDRe5zBNVlENZLuOQ2MiaLYoyoaz8RJkuSPrao\nEOQGZykRZvvBACv/cpKX/otXmDj3CBsJP3UilEiSwU0LGYsIRTw0sYRMXMuxWh2n3fLxa9H/lUeV\nI7yWf5mhgTVOuT/mgnSNZ5tXiRgFCr4Av8N/jq+3wj94+Z/yb2q/zFp5iD1vnNfFi/Syxdf4c05y\nC7fT5lvml2n1aARTFWS3QXwiiz0oSPhzZO710rgdov2Ci6HkCkfdd2lobvasOL9l/BZf1/6Mzytv\ncsfzBJ7xChQsVn53Et8XK0SmcuQzac64P6JndItXfuXr1Pvdf63pI39dXR9yyA+DA9kRmXLv0Ax5\nOC19RL4T5W3zEorLwC3v39JzECSkHMPaKqak4CBo4ea9xrOk7QxP+d6hv72NZAuqbj/KBQOX0k8u\n0E8gXMUbrZMlTb4RQ/Z2qdtBnK6E0jZIx7fxKDWCcgltyqLh9pIJxunOuzGKbgjAkL7OkLRGEw8u\ntUXX0HhUO0pT95BI7OLTK9gIKt0Q3ZqbVtGHUddYMSYJeMoMuVbxSzU8NLEliaXQEHtShGX/KHFP\nhiF5DclrYOoOtksgVIeq18+yNsyb08/yKDbJIyb3t2XL0EFDfbw9QXJs/I0mlqwi3A7bVi8ZUqiK\ngYOgagTYrvWxbfai0qaGnxQZ4uxhoRCoNYiYVfKBEFk5SU7EiYoiaf0qo6wyIq1QcYXoCW5SVkJE\npAJDYhWvWqMsgtzhGGMsYesS9bgHo6xRbwRY94zSVFxoapeoq8CeNMWeiDMgbXDEfZ+YyKOLLtX1\nIJn1Hu6cO04lGiA1tsOeGgfHIaHnyBZ72G70s9NJU0q/RdKzy48P/jneWIWSJ8yNUxcwV1TEnk30\nZI6wL49P1JCPdnBU90HI95BDPlUciGkPeVeo6T6OiHu823mGa+3zDCurpMUuutPFJzWIK3tMKXM8\nYpoyQbpo3GudZMlukPTu8FT3OunuHmvyAOYLKs4lldJOioBcImbtUXwUo9L20qomadaSWEJH97Z5\nYuAqI54l4s4ewUtlVsUIy/YQzUU/RkNHOdeh17VFnD126MFNk5yV4s36C7gCdVKBbdLsstXqZ7nc\nS3sjgL2hQNVh+cQkZwavcSn8NgBlK0TWSnLPP00lGOQKT/NT/CkJMuzqcTS7g2w5WAkZW3VoKzrf\nPv0CGVKYjsKM/RDLVqg4AWTFRpZMXHabSLNCV9NpuVw8qBxh10yTUjJ4jQZGS4MENHUPWfb7vP3U\n6LO3UQwLT72NYtjs+tKsyCNs00ucPS4q73NRukpWShDz55j0399vxyTGqFDZcPeywQDvOU/zeftN\nFEyuS+eo1gJ0ai4yvl4UrY3mNoi6ihSIsiPSHFEeMME8furc4Cw7C30sX52kNuUhmi4Q9edYbo9Q\nq/uw/DIblVGKpRiOIZOLJhmMrvJz3j/AQmLBO8HuT6Qo/osk0rxN33OrRLwFHMPBlagj7/r/lu99\nO+SQ/zsHYtrNQoDV4gQfDZxlVYxg2gp5O0a1G0DpmFzwfEBYLZIjToYUFhK97PBs8C3ajot3xTPs\nenuwhcK3Ml9BChsgHKy8TOZ2H/l7SVoLbpzaGqZ3E+vFIBzXcSLQlTQWzAmutJ5i0LOOoar7o0ED\nDi5Pi2hyl7wewWYajf2hTEUtgidewZb3o7HGWKKeDdJ+6Mf+UIa7IDctQsfyJIM79LCDjEW2meZK\n6fPYMYWUZ4fTfMQaQxSI7f/6FXvYssSqNMy8NEkDL8uMMsk8QbvCt5pfplBN4jY6PJf+HnXdx6bc\nRyhc4ZZ0lFe6X2Hr9hDljQi1ehRp28ZsqqBDUY7gehxSMMQaR1v3mcissubv53b4KKvyIC7a9LNJ\nhCKDhS1S5QLdAR3VY2AjkWYXnf1OAHCIs8dX+Eu+1fwyDeHlpPcW7vUWertF9FSGhJZlQppHEQaD\nrNPAQ5gyTTxkSXGH4+z2p+E0KD6L4nKMys0oLdycnHiT/+Tc77PQM8nDxCwPnRm87jp+6oywwvf5\nPKuMMM0jUl+9TE93h7R/B4HDrpxm1v+AB/9O5W/HWPtDDvmP50BMe6MxQDEf492eZyi7gvidOrYs\n0XQ8yKqFJnWxkNl2etk103SaLrolLxOxRzg+hw0GyHR7kEzQXB3akkpb0nHHGjQNH+2VIKwAaR/O\nkSi+8QZyn4EUtilJISTHwlBUVjsjdGsajVYAPdFGKBZtS2fHSFM0w8iWRaMZwETBE67RkXUEDkHK\nuKwuSILARBFD0ulk3HSXdPYCCeYnJ/DRIFtMk3uQ5MHsERopN/3aJvOt6f2kGddHLItR1qVBikTQ\n6JJml216kbGQsSgpYTJGGrkKd0LH2XbShCizp8VZZJx5JunGFGg71O0A3G+CKuAnIFPooTuv4R8q\nU1UDVOUAq54B7nqOkNPiTHaXaCpuaoqXEGVsHfK+KB1Zo4uOhcIUc1jIZEliI5hgkaPc4wPlAjX8\n7NBD0+fGriu0P/Tim27QTWh8o/NTqIqBLCzudI8xozwkqeYIU2K8bx5DXyfTTFKuRqkTAgGaZBAW\nJbzuOpJl0jUVvFIdLw26aMTJ02KdCkHCvQUiFEiRYYkx1qVB3FKLidG5Q9M+5DPHgZh2tRXAX6nx\nwJwFHAJUaXY9SJqFx7Ofcl63fazYY+S7McrlCEtrs2iuDmFfnhZu1ls9eIwW52PvsWyOUTCHcA9V\ncfrBiqvYRQn5+SieX9Xpj68g6yYNx0OxG8ZDk4SWY2lvnMpuFLYVEse2IGiRyyVxBVsouonZVrAL\nGn6nQX9gjZrsR8bEQcJRBWrSIPZ0hlbZS+Fhivr7IZa0SbqTMnHyZKs9sAK76RQibKJqBuutIUJO\nlXPadT4Wp7grjhEUFUbFErrdIW/EqMhBLEUm5c7SVT3k7SS3jJMIbPxOja6lU5LD1CQ/vqNl1EGD\n0nocXqtguyXsCy72PkpTLEXRE3VmfQ8Iucp8kI6zTQ8Js8CFzg3uMsuG3EfIKbMbTNIJq7ho00HH\ngf1t+XjYddKUnAht00XC2OMJ/UNsRXCPo5hDCkrNpPBGCrwP2YvF+Wb7q5zTbpCQclxuXiLlznBO\nvcEUc5hJhW5Q55Xlr9OR3OjjLTS6WLH9aY85EtQsH04H/FIVITksMk4v28REnnscpWKE6DoudLXD\nbXGCuxzbv0H9xbv/p60thxzyWeBATPsfV/8HxI7Me91zXH3wNB9fewJrVCYwXiI8UiJMiUInykp1\njLRvm2CiQs6fJOAtEaFIDzsE/DU0x0CTOxjrOs1KAMZBPdsm2JunuhihZ3iTo7HbXFCvskecD5wL\nlNth8maMqhWgcS8I78jwBpR/MQ4TDhQ1XGerhIfyRPQihlsjSoFnlMs84AirDDPPJBmRRJJsvDSJ\nR/MkpnIsZ6awwjIddKoE6AyoBF/a42dif4LH0+AGZxn3LxAjx3flF7jVOkHGSeF2t9gS/TQbXh4t\nHyeczDObvssv83ssRie44n+adVc/btFisr3Azz/8Bov+MXYmehgSazS9XhZHJuC/69KyPRT9Leyg\njmXLtJsu/K46smpxk1NEKaJIBq95n6csgmSsFN9tvMiItsJZ9w3GWSRIhRRZVhkiSJUnnQ+Yqi0x\nsLVFeLlI8EyNQE+VCEVO9Nyl0Erw6sZPork7hOQyfd5NlqqTzHWP4gp1WNeGuMJFdDrsEWdZHcU3\nWGLULBOgyglu09Z0/pyvcoI7PK98nx/3vIpHanLbOcH3zOd5QvmQ4+IOT/Muv7f5n/Fx+wxTY/ep\naAE0uiTIMXDYSnbIZ5ADMe0BbYM+X4YFeYh+7zpGRGO+PEN71UvDCiKnbQJqlYSSRZYtLE3C7WqS\nMVKUc2HyW0mMpIwkWxiLkxTuJDByOq0RH+pgF0+qxdTZB2jeDg3LC46ga6k0TTcj8gpFK8Jqaxjn\nvgqPJOg4RLU93OEmHU3H7a3hkvfnQvs9VSJSAQAZEwmbAlFkn0labBJQKxxt36fP3OE7k19is91H\n4b0UtUQEKWKSGMwQkQoYqOTsBGl1F0dAGxcBqUbKyRASJTS6dCQdwyMTU/eYZJ4+trBcMllXgvzj\nAUuz9n18vhqD7jWel95AwaKraowpi4RmqlStAI+sSfZG0hTMKGWXnxUxTNdR9kMiRA1DKLwtnmVC\nLDDIOu/Iz7Il9e2vfXOPFBkqBGmjE6HIUe7RL+/Sdet8HDrBvDbBenOYTKGPY5H7jPSs4j7dRo83\nUaUOZ6SPuM5Fsk6SEXWRohzhNicZZwEfNfqkLWpeP/V6gEbdRzEYpqiFWLLGGZLW6ZO2CEoVNhig\n2fFyvv4RI75l+p0tJovL9JnbLLgmaYr9CYI6HVq4yZA6CPkecsinigMx7fXwILHRMkUtTM/4FjP9\nD2hc9rG0Ocl2bpD6uQDR9B7HAne45xyhYgUJKFXm2lPUt4I4lzXs0xaOKnC+ocFNCTIOZtyNcc6N\n57kuTz77HkvKGB9XThNSihScKJlWmq/6vklBjrJV7cNc07BNEF9wmDj/iOSJbcqE9rMY7SDr5iDj\nyiIKJotMUMePmxZdNKLhHD3hTSRsnti5yYs738eYlnnj9ovc/s4ZrJMKsRMZBuJr5EhQssKUzDCO\nIoiJPFGryIz2kJiUR6WLZhm4XG2C43lOODd5wv6QjEhhIzEsVrnPEfrYYlxfZG56jIhT4Mv2t5gT\n08jCYoQVJrqrlAjxtvcp5qanmHOmmLOnuWaeJ9Ud5mntXYJOhbwd47p1jlnpAWeVG3zf94XH284D\n+Kjjp/aDeSpDzipjLNL0eng4MsYbI1/kIbMsZSdZXxjjwswHXExd4cef+gveNL/AZrePGfURu2oP\nWWLERZY8MbJOEt3ucEZ8yKx4wLI9SraQpr4RYrl/FCXYRdfb5PQEy8ooWZIsMcZR4wH/bfm/p6mp\n0HEILrd4YvQGRg/U8dN1NGq2n43OIOvS4EHI95BDPlUciGm/XniBynCAdyqfx7IkJkMP+PLpb/Ig\ne5zXtl/mtVdfRvN0qZ3w0R2S6IlscYEPWHGPkB+JIQcdNuRB9koJOCKgC+6JJv1fXaE9rOOKtQn5\nisREjpiWw1EFnZyH9o6f3FgKt7fBmdhN5l46RrEUhxhYKRkvTdJkiJGnJdzcVY/RLzaJkaeN63HS\njsSrvIyfGj3ssEua5cQwH7uO8kL2+8zG5rj5Kyd4GJyhGgjgok0v2wxLq/iUOgUpSq6Q4p/P/QaB\nsRKxVJY0u9zLnGSxNUG9R+cN60U+NM8iuW2eV7/HWfkGFjIDbDDGEr/Hr7DaGsHV6PB88HV0rc23\n+RJvu1qUCDMnJpnmEbM8xJZklhamqLeDNI57mTcn2DQHsD0Sj+RpOuiPwxn8zDPJDc4yw0MmmaeG\nn0S3gK9tIDwthtR1vsCbxCjgC9Wxj0k8Id9ksrnMnifK+Tsf8kTzY/LnQqimTbfrJefsB12ILtza\nO0fT62cq9IAZ6QGWpnPTOk/3TzwYfhfiCYWRiTXC4QILTNDAS8kV5G5qGlXvEKRKINbeX7dHxkRh\n2RxlbXOE6isR7J6/XgjCIYf8KHIgpv3+wtMUh8KU5DBCstiR0ySSOeJ6hlFlnmwuhSkreNQGRkal\nWfFTCCZoqAEMy4Wl2FhzKuzK+7kiNHCsKuawjDbaQfc02aGH/F6CdsHNpn+IYiVOt+Rh+cYE/lgF\nI61hyTK4QGgOU3uLnBPX8CZqxNmjQpCa8KEKk5rtZ8foISHn6Fc2OcUt8laMvBNDk7s4HoeWotPX\n2qJf3yDl28EOClb0YcDZT5wROeLyHisMc1c6yR3tNIPyCpJpUmuG2LV6EIrNjHjEtujhTvMk4iGE\nvHW8iTbRWJGW5eFa+yIZX5q20NEkg116qLX93GqeRvW1aUhedus9xFwFIkoRjS692jYBp0qv2KYl\nXOSJU20HqWpBCkqUuuXDKzVIyDkKRCkSwU+NHXowhU5cFFDsNpJl0ZU1IhSJOkUsR2FVDBMSZdrI\nDGpbdA2dG92zdCWNlL6DLWQ6pkbX0LCFoCTCrDuDiK5Da7EJ7y5hd9P0xgsccd1Dlbp4Wm3OVG+x\nEByj4fLyLeUlUmSY0BZJxAvYLoGLNn5qrIgRmrIbr6+O4rYoHYSADznkU8SBmPadmydZPD7ByaHr\nKN4uRaJc5SKJUI5Lwdd5d+RZGnhJy7ssvT7LcmmG5fEZCNiINjirwCvsz1v7ErBeor1dZ3VpmN7o\nDn53latcpLiUpPphlO2J0f0JEqbDw1eOIeIO4kUH565AVGzkpMXzvrf40ugrFGJ+PDTZpJ+70jHW\nGWDFGuFW4xSmWyGiFPkq3+SPrZ/jsvUcz0mXSYkMUS1Pe1gmtl1jdnmBt6cuoepdPDTx0CTm5Oln\nEw8NWmEPi0+M4qFGsRHlXvY0A9EVToQ+4mnxHlfFRSp7YarfjPHd0MvcPHOOXzr3O8x1Znhr74s8\nNfwWX/S9zpBrjVf5cW4VzrCzOUhkOAMqlAtRFmMThJQiFULMTt5n1rnPFHNMKnP0il3+qPCLaD6D\noLdCuR1kQp3nc9Jb5EiQI0ETD2/zOQbUdfxqmcHOOntmgivyU8TIY9R1dpYG+d3xX2Y6dIannCtk\njqZYNwf4w9ovMOmZ46TrQzbpp9QYpGW6OZK8j1tpUjAi3Ksco/bmOvxvV+CffZ4Tn7vJr0Z/h2/z\nJZKZPL+++C/5xvRX+K7ref6AX+Qo92hrLmai97GAoFNmlBU25T4KgxGG/tN1Ak6VlYMQ8CGHfIo4\nENNWvB2kWJeF/DSBdoVwLEcfWwSpIOFwRL3H5vIQi1dnqLf9EAY8kI5s4dMrGAmN/Gtt6hs6rI/A\n2QihpMWp429xMfw+YbPI/1L6dZo3fPAa+8G+QVCVLtM/c5/Z6D3GUwt8GDrLjtmDo8OK0sdf+r7E\nhtTHi/nvE7IqDMfX6MoqeSeOY0qU7Mh+CDGCrqISlMpkRIp7HMVAxUOT3UgPc64Zlr3DZEjRQd+P\n4rIsGh0PLcmDX67xZfVbXG+cZ7U2gmXKZOd7uKUplGbDjLhW+DuJP2DzF4a4d+cEG/eHeSX+NZwe\nm/TABn5XlSxJNhhgsTWOqnY5O3QVr6dKRCqRiOW4qx+ljo9hVigSIdtO85N730J1mwy6dyEEc51Z\nvl36Ck23j4Ic42P7FHfqJ4ioBfrVLW7vnGFDH4Kkw4S6iIRNDztUCCL5Tc5PvEvBH2alMUpmZ4Bg\nooA3UOMJ34ek5V281JGxKdthGqYXGZPj3CHaLrFzd4hacgz+bhySMfbMBHNMcpR7dEM6vzX1j6n4\n/Rio9LNJlDxep45qmQzJ6+RI8vvWL+GVGnxOfos+thkpr/P7ByHgQw75FHEwaezCwfkA7FEZfKBg\nYaJQqkepVQLokSYWMqVuGFeiTShdR4t0cdstPE6TUM8WXb+XlieCq6+Ka9Yi1NtG0Rx6rS3GlCXS\n7JIz01Q6Opjg1ysk/TsMDq4w6p9n0nnEI20ar6gR9hZ4yARr9IOADQaIs0cdL4VynHo7QI+6g5Bs\ndkkDDqWtKO2il8x4GuF1UDGIUqDiDnLXfYw6XmQsbCRWGaGNjoFGzfHT72xynDvImKhyl7gvCw0w\nUNmmjwkWmPDOkzieo9oNsG4PstCeJOVsMxxcwAG2mgNs1gYo6yHGXEtccr3FKsM4SHiUBhI2EavE\npc673NaOYaDSfJxWbkoyE655HlpH2LL6SCo7RKUCsmOzafWzZfSTtXpZLw9TCQTxigoFOYrHaWFY\nKm3JhaErpPVNLBwKRpyKE6SKF2+7Ru/uLu2om7CnxIXidSyh0FbcVIoRDI9OSmT4vPwmj6ZmyMaT\nxH0f06NtknFSBK0qm9YA7/MUgWqVgF4h7C8x2Vqi396hqEUoEGWr28e1/EUmAnOMeFY53rrHVHPp\nQOR7yCGfJg7EtM2mhvqbNkN/+BBftIqFwjKj7GXTZO/2EjmfwRlwUL7aJOrPEtf3iIoiD+6cwDQ0\nTpy4RTb+JOWTA6R/dp14PIdTkbl65xkm++YZHV3kWPwmpeMh7pVOgwy93nWeGH8fIRxKhLljH+f2\nzhksRWJ0ZJHbzkm8NPgxvsNarI/7TPKQWW5sPEW95uPSqTewXBJFIsiYbL0/yPq1MUL/VQ7N28ZP\ngvd4mhZuyoSIkSdEmQ4ay4zikZv0eHa4bx6hSISrXET2mhzx3kHGhl6wkegKjQ4aJcL0skP69Cb+\nmQKV9QR+u0aCHGVCbORHWF0ep+/YKqf0m/w0f8pv8xt8wDnauIizx4Xum/xK8Q95JfwS9z3TXO5/\nkjWGqOFnmBUUX5uYN8Mx6TYXuUrc2eOK6yLze7NsZ0dwVIFLbZIjQQMvVTvApjnAtPKIqJwHIE6e\nhHcPbbzLhhhga3OApe/NMnBuhc8Pfo+v3X2V8FCFcjrMjYdPocYtwoNF/psz/5R5ZZLXXV/gOXGZ\nOj7e5wKvd15gPTdKd9MHQF98jXNTV7hQ/JAxa4kP+47zrniGD+pPUX4Q5/a4F1+qwa/t/huS+t5B\nyPeQQz5VHIhpv/izr7J3MUFouIxX1PfTi7aHKDaiWAMO1VthpJCJMmtS2YriVg2GB1eJDmRp2262\n5R5SL28z2lhkOviAtuRiXRtGitu8kXmJuew0W6MpMsleOA+EoOXykHHS7Fb6ELKD31fCSVkYeY2r\nVy9RTEVxx+q8HbxEVBSQsSgSYbLvAUZV4/bGE5gxgdAsWJUpp8N4v16mP7LBOIvMdB5xZvUONY+X\nBwNTbNNLFw2dLgNsogqDsFMkIFcBCFAlJvYIUcFNi5viNLeNk2zWBtDdXTzuJqsMsyX1E3BViPUU\ncWkt9ojvd5FEVlDU15F9BpKw+V1+jQqh/d2leMgZCd7ofpFNe5iK40UTLSRs9oiznh3izuXT7MZ7\nUEYMBtMbODoUCfNV7ZssR+8x55ll2RgBj4mNzDCrdCUNW5HYs2I4tuCIep8pHmEIjaviIioGfZFN\nZi89xBurY3kl/nD2p/no1jnu/9sTNB94WU5N8L3TP0bq+RyL3gneqTxPORJG19tUHT/n9OsktQJX\npUs8mXqXodgyOk3MMJgORKUClpBp+zTiR3aYCdznpPYxN5PHsZoS+yOvDznks8PBTPk7s4x9Bly0\nsE2ZZseL3ukQcRfoRmSq34lByCF0skDLDtDuuCm2orgDDWTFoECUmaMPmGCRJFnmd6eoZkNYFZnV\n1jB5NUKftUYsvofkF0iOje5r08CHsKFaC7K124ur2qaz66G4loAzNk2Xi7vGSXr8m4RdJRRMopEd\n2oqHK0uX8PnLeKmxtTOC0tshOpEhrBYJUSHkVBjobtDU3VTwUcdLBx2f3aBZ89EVLsyASlCUUTER\n2ASpkCRLgCrLjKI4Joat0rZd1PBTIkzVCaBKBgPBt0t4jQAAE8lJREFUdSwh07S8NCp+/HKdULxA\n3fCT7yTI6glUuoQex32YjkJb0vnAdRafXKWfdSRsOmgUrQh7jTQ1KUg4WKaTcLFFP5KweE55B49o\nsWEPkfJto+j7yz59bGMIlaIUpWF5iTl50s4uI2KVfD1OdjdNO64TC+1xavJjDFQKnRjfET/GenuY\ncj2EKtpUm0HuZk7yejFLRQQp2yEWnEmUroHTlnnK/Q4hbxUrovFj0VcZ0NepVoKE9DKo/CDqzeeq\n0ex10/d4vfvj4HF81Dk07UM+axyIaWdJUsNHkDLr7SHm6tM83f8uPr1OvhrnzodPIOI2g6516qM+\nSq0I7xee5kjkDhGlwC5pBthklGWWGeX69Yt8+N4FDFkh/nyG2adv8/PyH7MmBrnqXNyfbSFkhHB4\nMnyVlbUJvvnqTyHugmMKGAJx1MRoKhQXkoSnS8TTe4/XtX1k1TRWWGbIvUaKHfL0oCktgloFAVQJ\nsKX38nBmHCGgi0Y/W2h00Owuby+/wKbSx8ixeXzUUTAxkcmQIsEeUQp00OlRtzEjMlGRx00bjRwl\nJ0LX0YlJeVy0KXZj3Ji7SN3jRR9t0K76GdaWeTL+DnvE8dJkggUCahWhODS9HprCg5cGPeywwgha\nssPoz8+zuTxCpRriunMOgU2UAl/iO9R2g9xZOcOF05fp82/ip/Y4jSZAiDJPq++ReByVWMPPwvYk\n9/79aXwvlomcKvzgZuVOpY97V04hjZgkX9xEsm1KpTjlfJxv7f0Eo+oCZ8Y/wJRk1gsjrO5OMDq4\nxPnAVb7se5XJzhKxYhFpV0JJGBQiISreIEkyjLDMBv3U8LNHnPscIe3fhcPpI4d8xjgQ037UncFE\nIaHksCoqxpYbZ0raH42qF9Ce7CIFLGLkqUl+wnqJ06GPsTRBYTVG7rt9XHvqSTpHdWZ4yMDRVZZD\nwxQ7UY6O3OaCdpUHzNBGZ4ANdughQpFxFukXm6j9FudfuMJczyylQgwkB+d7Cq6+BuEfy1J/EGD+\n9lE2JpvMxO+RdGfwRUqc0G9ySbzF2dkPWff1s1HpZ/XKBLHeEoMn11lSxqjjo4NOgCpJskSkEtN9\n92gXNZauzdA3tsap8E1e6L7BDfUMBSVKgty+8RsDbFaGGfBsM+md3x/vWurhfukUH0lPMhpaJO7J\nYmsyjVyA1o4Hq63i9Mt44i2S5NDoEqHIkFhDCIdVhrGRyJZT3Fs6RaivwLnUdQJyFX/vazhRiUVt\nFBMZnTb/jp9hLTZMSNljhRE27w6gzDl4T1UZ7l3hpOcWGwywwMT+ElI7TD6QIPX8FtVKEPuGxokj\nt1lyjbHgmsIalmi6/NgNQSBSxK3VsZGo3w7td9WMj9AoBZEsh6n0PU65bjIkrdMRGlktDn6HtJ2l\n6A+xpaXJkuSedZRtp48L8jX6xCY+6hzjLqZ0MPfRDznk08SBqF51DNqmi0I5QS0Xwq6oFDtRRNnG\n2ZNJndkBv6DZ8lPrBAnIFfr8G6y0RilsJKh8P8qd8CnkXoszwY8IjRYID+6hNtr0aRsE7Qrvms/Q\nK+0wpTwiS5IAVaaYI0KRttdNsL+E5usgVQykio31moKUAz3eJP9Wmno2gEhZxLUcvc4Gw95lTlq3\neca+wlTvHA+kGW7nT2LndcYCy4yxyFWeYt0ZpOIEGReLhEURW5IIJwr0mRu41gxcRgPVNPE3mtSs\nMBvyEC5PlzVpmF0jjdVVaTkeqnYQj6eBy+zgazXISmmC3jJBqYgUMlHrXbRSF8vuYluQt2PYhkyY\nEj6tjl9UEYCHJi3bTakboV1xMxDfZJr7yFhMhx4Rtsu813mGXVLskObN0vMYuoK/v8RGdZBWxYeS\ndfA2K+jtDmP2MguuCUpKmBh5Fu1x6l4/0Zkiym0vTlXCsFQMR0VyWaSHtsi1UoguDDibRJwSXVvn\nmvU0hq3SdLwYhkZS3eVI5A69bNFuu7nbOIbfV2Pcs4BXvcqyNsRDZ4b7zWPcNs7QlNwc9d3FI5pI\n7G/j36b3IOR7yCGfKg7EtH9K+wavd15i/qMjlIwIVkLmkTMNczNIVyR+/qXfp5H08yc7fwezoFLy\n1vjejEYhk6KaCWN5ZMprMbbuDLF5foA9dwJJdnjC/yEWMu9ZT/OoMsOQa41j/rvMM4mLFm6a9LPJ\nw62jvHPjeawTNtpUHV3r0AwFaRketip9WB0Xkm6hJBrcKZygtBfl5Zk/52j5Ia6WSbknTFQr8FL4\nO/zc1/6YgFoFHLKkWLLHuG8dIaFkqQk/xuPukZ7ENr/5zP/Id7UX+aDzJH9Z+ylqS34MQ+H6xFMY\nLkHAVeZU7AbrO0Ncz1wgOp5hOLbK58KvscAkhqywJMawe2ziqe0fLKu0ZJ237M/TKASZlh8xmlhi\n57GBaXRZM4ZQfCb/04W/j1drUCHIImOYKISNEl/P/SXf8b3AdeUcxWsJ1HSbwOkysmLiO1YhcrzE\nlGuOeiPAP9/8DTy9FQYDK0ywQMvlZrkxzvL2FL1jGzgBk3+t/xKOkBCSw6XImzxypmng5WflP+bs\nzseYmy7+y5ND1NJujsj3CMUqRNifkb1LmnuFE/z5g5/Bd7TEpcT3GdLXuS7Ocrn+ea5sXaLe8RPy\nFFgeHiMsFYmTJ0aBZcYOQr6HHPKp4kBM+27nGJrUpuvWMFsaZBwagSCSz0I/12Y+NY7pU9FFAysb\noHXbx+63B1Cf7OKZrVCX/dgZlcxcD6+oXyM5ts2TqfcJigohyrQdF5vefqpygHscxU0LA5WPuk9w\nefl5VuvDxI/v0kzrOAHQ5Q6dlg+joWM23YRPFVDlDg2Pm07FR85OcpPTRH0l1vV+3pUvotNmQN5k\n2v+QTfrJkCRLigmxwDH5LproImPhIDjLDVJKhoBSYZgVNpwB7oWP047q2IaEEupgOwqmUOgoGunw\nFinPDpJiMCiv0StvE3qcANNxNHr1bSwhI0kWXpoUnCiLzjgRf55618dfFr5On3+NAX2NIdbxyzUk\n2UbINpaQcTU6nFq/RyhaxIkIdoIJGrobv6iSmNwl5d9lVtylpbspSFHKSphZ7lNwYqzFhlH1Dh10\n1hgie6cXo6nTM76JocqsGiNkSBJWy0SVAqpsMMISOh1q+CmGQqSlLD/j/kM+MJ9kbvMI4cQe513X\nOMJ93uVZ7nePUCkHGTCWaUoe/kD8AhWCOBoMxpfpmC5UtUtLcvFkbYHznQ+JuAok1T3+4CAEfMgh\nnyIOxLRvv11h/HNeXOkmbceFqDq4zRZEbMy0YNE/jmTaaK02XdWF2dQwP9Zwn2igjDk0hjxQVCgX\nwlzdfppfSvwrLsUvsyfFiIoCliMT7pTJazHu6UfxUkfB4e7bZe6pv0rL46ZnYh1FdaHKXUJ2BR9t\nilaCfCeOa7yJ7mrRqHpRVYOOS+U2J5DdJilvhvd5Ele3w5C5Rk33Y8kyRcJ4aXJEus9JbjHHFAWi\n2EgkybJ+eY36cz6SZBmQ1tHdTTwpFccWaMEG/o6B127QEToTobv0ss02faTZ+cFu0RJhasJPVL4P\nXeh0XTgu2FT6qYgQXn8dq6lSKsaIe3bpovHx5RriGQfVMehaOoakoRg2w8U1Cu4g87FxFgIT7Io0\nPlFnYvIRPezsd+ZoWTIkWWCSUZaJufKUXCGaeKjhZ4URMss9ODWJ5PAuNXzUbS9V4aN25TY8PwRA\nur1LwKyz544zF5qgEXQz4KywkR9grjRDM+LFQRB4PO9kV0nh9jWJq1m6QuM1XmKQdXxajXh4l5bp\npdPVKecjDFa3ebZ7FYIw7l88CPl+SlkDhj5DdX+YtX9Ydf9qDsS0tWtvEnrhZRLD2+h9dRTbYlxd\nJF9IcmfxFMpkDjOjUHozifpUk9BP5Ai9WCJfTlN9P4T1jgwJAWMOzBpM+Bd5snmDm55jtGQ32Uaa\n9RtjSD0mnqNNavg4xccUrrxG7Bd+kfvdY7QzbnoTq0x4FjkpbsF5wVx5lj/b+1lKrQhSw6K94Cc+\nnMHVU6dshViQJtiRerCQyRR62Kv00hp0M+3ebz8cYAMZi/scIU8UBwmdDgtMcOXyDjPPBXHRwtNt\nUSpFiXtz++NIjTintI8ZlNfZET0MsEk/GzxkhsTjlsAGXjKk2CXNk1zlSHkOddfh3w//OE5A0M8G\nblpMuua5lLyMKcssMM5vX1YRT84yaSwwaG+R0+Nk/Qmck/Cq+jLfFS/QND1EpQJDyhpPceUHE//G\nWKKXLUZYwUQlTIletqkQ5D5HeI2XMH0KrT0fC5dnOffEVSLDe8yLSTJXblB6/iQGKvO7s2hFky9P\nfZMV7whv8jk2rQGmgnP8vcBvU9P2N9Jc4zxFIrhSTRKhTYquECVCGKjodOhaOrdbJ2hVgpg7OsxB\nwZuAKGBAV9OA1kFI+FPIGp89A/th1f5h1f2rORDTlrBZtkexNAmvvh8v1kGj2XJjrakUmwlsSWAO\nSvTGsuhmh9J8lIHUGlZK5VHqCInpXcLTeeykw4bWz1XpApOdBZbVYdbVfppJHRFQqeNliHWiFFEl\ng77EGjuP0uQvJykkkix5HFoEkAZtcloSpynRfd0NWQcbBTXcRY93MVbd5G+5qFRNnJcE7ett7HfK\nzIVtyukxciO9vPzkX5CK7SBhUSBKlgQlwuh0aODlMs8xwAZZJ4FhKVQXQig1i7bmZy04TkWKUtqL\n0K756HdvEDpXYUJZZrq7SNRbJGXnMNoujjXnSG9kUFYcntq9xkRyGTMto3RMUkqWyeAc77vOMWdN\nkevsctraYkKd5459lAfSLMvyCC5vGwOVSWeeRXmcQjlOsxHAnWyD7mCi0MBDhCIhytziFBUCeGmi\n02HGfsiIvcIfhX6FW+kzdLxuJI9DSsmQIMer9Q65Rz2U3AYaBpK/wfW5i3hTVYyYzNbmIAlvHleq\nzZQxR1UEWVDH+CKv80ie4XX3CwSkKmZLY7UywZwjYVuCcjeO0XDhdBXwwbX0EySTXyHlztBj7gCb\nByHhQw751HAgpu04giVrjLBUwisa6HQoEqHSCuFkJUp7cei3EScNYuE9WJFYvHyE81+7hnu4yWJ2\nitTRHYbHFrGQWGQYw1R4tn6VDTFARkthDYGjyY+3dOfwU8MSMsnQDvFalr230hQjCYruBI/EMXgK\n6AXa4LytwRwwBfI5C6nlYKy6Mb6h73/JTgJXl+B3Ntihws7kNFuf6+Xs5DX6Y+sEqbBNH3liPGKa\nY9yli8Y1zlPHR0mEcCQoz0dgTYEoLCRm99+cR7CwO0tfZJ1fnP1XjLlWGGusEnXtoZv3CNZbkAe2\ngXU4t3QT+h9/chXAvf94UxnkvnOUSrfFqL3MhHuejznBVZ5ijikkbL7Et3lWvIMhK9yqnGUzO4oI\nWcT0LAly1PHTQUfGYo1BdughRIVetjnu3OFz1ltc9z3NrfQZiIDpl/HQZIo5vtdw2F1MQAgGRxbx\nBqp8eOscY/YCw8FFrG2dWjREJRlguLtOWQ6yo6Z4lncIOFW+aX2VsCjT7bgpZ2OUSIDN/mEAEtAD\ntwaPQ7rLMe7yuc33ODTtQz5rCMdxPtkCQnyyBQ75zOM4jvhh1D3U9iGfNH+Vtj9x0z7kkEMOOeRv\njsO8pkMOOeSQHyEOTfuQQw455EeIQ9M+5JBDDvkR4hM1bSHEi0KIOSHEghDiH37CtfqEEG8JIR4I\nIe4JIf7e4/NhIcQbQoh5IcTrQojgJ1RfEkJ8LIR45aDqCiGCQohvCCEePb7ucwd4vf+1EOK+EOKu\nEOKPhBDaQdX+NHBQ2v4s6vpxnR+Ktn8UdP2JmbYQQgL+BfACMAv8nBBi6pOqB5jAP3AcZxa4APzd\nx/V+E/i+4ziTwFvAP/qE6v994OF/8Pwg6v7PwHccx5kGjrPfuPiJ1xVC9AC/DpxyHOcY+w2IP3cQ\ntT8NHLC2P4u6hh+Ctn9kdO04zidysJ8h89p/8Pw3gX/4SdX7K+r/BfAF9j/s5ONzKWDuE6jVB3wP\neA545fG5T7QuEACW/4rzB3G9PeynD4TZF/YrB/VefxqOH6a2/7br+vHr/lC0/aOi609yeeR/b+/8\nXaMIwjD8vBBFVDBYqBBJVMRaUokpBG0CgraCiP4HVoLY+BeIWNhYKJLCxh9EOwnWQkSDYESEFEmU\nHIggaBleixnwImKTzO7N7ffAwe0cx7vf8vCxu7NzN8bGlQ+reaw4kg4Bx4HXpIPdA7C9BuwrEHkb\nuAb0Pz9ZOvcw8E3Sg3z5ek/SzgZysf0VuAUsk5b9/LA910T2gNCK2x3xGlpyuxavh24iUtJu4DFw\n1fZPNgrHP7Y3m3cW6NleAP63yGOrH4gfASaBu7YngV+kM76i9QJIGgXOAxOks5Ndki42kd1VOuQ1\ntOR2LV6XbNpfgPG+7YN5rBiSRkhiz9iezcM9Sfvz5wcg/2/W1jEFnJO0BDwCTkuaAdYK564CK7bf\n5O0nJNFL1wvpknHJ9nfb68Az4GRD2YNAo253zGtoz+0qvC7ZtOeBo5ImJG0HLpDuEZXkPrBo+07f\n2HPgSn5/GZj9+0ubwfYN2+O2j5BqfGX7EvCicG4PWJF0LA+dAT5QuN7MMnBC0g5JytmLDWUPAk27\n3Rmvc3Zbbtfhdckb5sA08An4DFwvnDUFrAMLwDvgbc7fC8zl/XgJjBbch1P8mbApnkuaVZ/PNT8F\n9jRVL3AT+Ai8Bx4C25o81m2/mnK7i17nnFbcrsHr+O2RIAiCihi6icggCIJhJpp2EARBRUTTDoIg\nqIho2kEQBBURTTsIgqAiomkHQRBURDTtIAiCivgNjW/36FxPUzoAAAAASUVORK5CYII=\n", + "image/png": "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\nRK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -908,9 +907,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1024,7 +1023,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 28, @@ -1033,9 +1032,9 @@ }, { "data": { - "image/png": "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\nYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEWCAYAAABxMXBSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGt5JREFUeJzt3X20ZFV55/Hvj24DaIs9uiamA+1AtKPpvIiMQByzjIZR\nAaOdFUkaX+KCmESypM3rmmgmGZqYSTRvo6CBNoKKOja+JiSrEzQddZIJIK/B0GBoMQ6QNsQQpRVR\nOz7zR50rxe1bt87pe8+9Vfd+P2vVunXO3qfqqd2n66lzzj57p6qQJKmtw5Y7AEnSdDFxSJI6MXFI\nkjoxcUiSOjFxSJI6MXFIkjpZkYkjyfbljmHa2YYLZxsuDttx4Ra7DbMS7+NIUlWV5Y5jmtmGC2cb\nLg7bceEWuw1X5BFH3w41e3fZbr66XcvarFvqX3ULeb+2246rN6q87fq2bd2nvvfFQ23DUWXui93K\nJ7UNPeJYwtfvst18dbuWtVk3bnmxLeT12247rt6o8rbrx7XrUvxS7ntfPNQ2HFXmvtitfFLbcMUm\njuWOQZKmTdvksrbvQJbLSkyIktSXpP0Bidc4JEmdmDgkSZ2YOCRJnZg4JEmdmDgkSZ2YOCRJnZg4\nJEmdrNj7OCStbjfd+QUu3H07X/rqgYPK1h2+lm2nbOL4jeuXIbLpZ+KQtCJduPt2dt92z7x1Ljnr\nxCWKZmUxcUhakWaONB55xFo2bzjqm+v37LuP/Q8cmPNIRO2YOCStaJs3HMXlr3jaN5e37riKaz5z\n7zJGNP28OC5J6sTEIUnqxFNVkqbWfD2n9uy7bxkiWh1MHJKmVpueU+sOn/trbs+++9i646o569tV\nd34mDkkTrc1RxeyeUzPWHb6WV52y6aB1APsfODDyIvnu2+7h5OMePefrmVRMHJImXJujipOOfXTr\nezK2NYlkrkQ0nEjm63m12u//MHFImmij7seYMddRxXyO37h+5Bf/uKMb7/8YMHFImgqz78fow3xJ\nxfs/HmR3XElSJyYOSVInJg5JUicmDklSJyYOSVInJg5JUicmDklSJyYOSVInvSeOJKcm+VSSvUle\nPUd5klzQlN+c5IShstck2ZPk75O8J8kRfccrSZpfr4kjyRrgzcBpwGbgRUk2z6p2GrCpefwMcFGz\n7bHN8n+uqu8B1gBn9hmvJGm8vo84TgL2VtUdVfU1YCewZVadLcBlNXA1sD7JBuA+4OvAkUnWAg8H\n/qnneCVJY/Q9VtXRwJ1Dy3cBJ7eoc3RVXZfk94D/B3wF+HBVfbjPYCUtn1EDDDoh0+SZ2EEOkzwe\n+AXgOOALwPuSvLSq3jVH3e3AeUsboaTFNG749FETMmnxJKmhxfOravtc9fr+l7gb2Di0fEyzrk2d\nZwB/W1X/ApDkg8B/AQ5KHM2H2z6zPOvDS5oC8w2f3nXodB2aqkqben0njmuBTUmOY5AMzgRePKvO\nFcC5SXYyOI31xaral+RTwP9I8nAGp6pOAa7rOV5Jy2wphk/XwvSaOKrqQJJzgSsZ9Iq6tKpuSXJO\nU34xsAs4HdgL3A+c3ZTdlOQyBsniG8CNwFv6jFeSNF7vJw2raheD5DC87uKh5wW8csS2rwde32uA\nkqROvHNcktSJiUOS1ImJQ5LUiYlDktSJiUOS1ImJQ5LUiYlDktSJiUOS1ImJQ5LUiYlDktSJiUOS\n1ImJQ5LUiYlDktSJiUOS1ImJQ5LUiYlDktSJiUOS1ImJQ5LUiYlDktSJiUOS1ImJQ5LUiYlDktSJ\niUOS1ImJQ5LUiYlDktSJiUOS1ImJQ5LUiYlDktSJiUOS1Mna5Q5AkqbJnn33sXXHVQ9Zt+7wtWw7\nZRPHb1y/TFEtLROHJLWw7vDB1+X+Bw5wzWfunbPOJWeduJQhLRsThyS1sO2UTQB86asHHrJ+z777\n2P/AgYPWr2QmDklq4fiN6+c8oti646qRRyArlRfHJUmdmDgkSZ30njiSnJrkU0n2Jnn1HOVJckFT\nfnOSE4bK1id5f5Lbktya5Gl9xytJml+viSPJGuDNwGnAZuBFSTbPqnYasKl5/Axw0VDZG4G/qKon\nAU8Gbu0zXknSePMmjiR7kvxakscf4uufBOytqjuq6mvATmDLrDpbgMtq4GpgfZINSR4FPAO4BKCq\nvlZVXzjEOCRJi2TcEceLgEcAH07yiSS/kOTbO7z+0cCdQ8t3Neva1DkO+BfgbUluTPLWJI/o8N6S\npB7Mmziq6u+q6jVV9XjgVcDjgKuTfDTJT/cc21rgBOCiqnoK8GXgoGskkqSl1foaR1VdXVW/ALwM\nWA+8qcVmdwMbh5aPada1qXMXcFdVXdOsfz+DRHKQJNuT1MyjRVySpFmGv0eTbB9Vr1XiSHJikj9I\n8llgO7ADaHPK6lpgU5LjknwLcCZwxaw6VwAva3pXfT/wxaraV1WfA+5M8sSm3inAnrnepKq2V1Vm\n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\n1LFE4vGQAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1084,9 +1083,9 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWUAAAD7CAYAAACynoU8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4FVX++PH3mbk9Nze9kx4CCb13RJSOICIiuvayYm+4\ntq+ia6+7lrWLHTtYQRDpvYeSQBJCSO/t9jLn90dYsaDiD2Tj7n09zzxJ5p6ZOXfu3E/OnHPmHCGl\nJCgoKCioY1D+0xkICgoKCjoiGJSDgoKCOpBgUA4KCgrqQIJBOSgoKKgDCQbloKCgoA4kGJSDgoKC\nOhDdfzoDPyWECPbRCwoKOiZSSnE824cLIVuOPXmplDLteI53LDpkSVlK+Ycv995770k5zsle/hvf\n13/jewq+r+NfToQW4IFjXIDUE3LQ39DhSspBQUFBJ5P+P52BnwgG5aCgoP9pHS0IdrT8nDSjRo36\nT2fhD/Hf+L7+G98TBN9XR2H+T2fgJ8SJqps5UYQQsqPlKSgoqOMRQiCPs6FPCCFfOca0V3D8DYvH\n4n+2pBwUFBQEHS8IdrT8BAUFBZ1UwYa+oKCgoA6kowXBjpafoKCgoJMqWFIOCgoK6kCCQTkoKCio\nA+loXeI65GPWQf89fGxBIiEQ+E9nJSjoqHTHuJwswaAc9Idy8yoBdkNdKax46z+dnaCgn9Ef43I0\nQohOQojvhBB7hBC7hBDXH29+gkE56A8j8ePla7wshehkeOkqAtu++e3tpMS/ZtWvJ3I3naBcBv2v\nO86Ssh+4WUrZDRgCXCOE6Ho8+QkG5aA/kBsDYzEwGnR6ZEY/al5/8De38j72EIF1a345gZSw8g7w\nVIMMVosEHZ/jKSlLKaullDsO/24H8oGk48lPMCgHHROJ9ru3EVgRWFHIAKB48K14D+xuD6q/IJC/\nF8+jD6Ik/8ooiYULoOgzcBZA2dO/O19Ho0l4bQc0uU7I7oL+RE5UnbIQIg3oDWw8nvwEg3LQMfGw\nkgBVv3s7iR9x+JIuWb2W8mYVuXv5r25juOQK1JGjfv5C8eGqj7ZyCEsHVCi+C+y7f3e+frTbJhj5\nNiwtgYhfaop3VoO39biOE9Qx/VLJeDvw0g+WXyOEsAIfAzccLjH/fzshQVkIMV4IUSCE2C+E+Nuv\npBsghPAJIc46EccNOnmcfICHDf8fW/r4dzkjaeBAoq99Apa+QoCjz/fgfel5DNffhJL0kzvAgA8W\nXwt+O6hGGPEAGGIhbCgI9fdny3vke1PaAs1uuHXwUdL5D6dr3g0F//r9xwnq8My/sJwCzPnB8kuE\nEDraA/LbUsrPjjc/xx2UhRAK8BwwDugGzDpaRffhdI8Av93SE9ShaNjxsg4fece2gZRQ8CysvRBa\n9kDAD0BjcTHhqTEIs4L/0ArKuBg3R0q5srERWltRUtN+sK/D1SZlW6CuCDbfADXbIK4vhHSB5Buh\ndXN7moDjt/PlaoLydXBgMQB76uCFbbD5EuifcJRtSh9sz4P9IOx5Eny/cYygP53jqVM+7HVgr5Ty\nnyciPyeipDwQKJRSlkopfcD7wNSjpLuO9v8mtSfgmEEnkSAEE+Owcu0xbiCgyzWgD4XWfYj9L0PA\nTdOBA0R0GwzKEowfz0MlikP8hQDtPSm8815Ff8nl7fv4d73z3nntPw9Ugy8DQurB0wKm8Pb1kWOh\n8fD/+YMP/XKeSlfDW2PB0wprH4DmEirb4Pbl8OpEMB/tWycDUPkatG2B8O4Q3R8C7mM7B0F/GsdT\npyyEGAacD4wWQmwXQmwTQow/nvyciKCcBJT94O9yftL6KIRIBM6UUr4A/OHjkQadWAKBRhsKEUdW\n/lapVCgw4DlIGAu2bFg9E2/lDow2GyT1gvrtxDScRzwPUsP9aH4ngQ1rUQfkQP4dR3pVbHscmvbB\njh2wo6a9pKoajxxHNbdXX/ga2hv9XCU/z0tzKbw9DhL6gCkMHNW4hYWrFsML4yHM9AvvwXUQdGHg\nqYTYwaAPg4AAR+PvOX1BHZxed2zL0Ugp10opVSllbyllHyllXynl4uPJz8l6UOUfwA/rmn81MM+d\nO/f730eNGvWnm8ngv4GGH+UHl4esrYKIAOgVqP0X6OMh4jeaBoQAnQmSJkLieHh6BKycBl3Ph5a3\n0H/1HvoLn0RHFHWfn034aX0QK7tB5m2g6MBZC/YKOLSk/YlArwHEOIj5yeUTOQEq3wBjEjj3gzn9\nyGteByy+Eaa+DFmTwRSOFtmFiyqv4e8joZPtJ3kuPQDVFTBgGFgywTYQwifAG1dA1QewtRwu+/C4\nzm3Q/58VK1awYsWKE75f3bFGQf8JP/RRnYigXAGk/ODvTofX/VB/4H0hhACigQlCCJ+U8vOj7fCH\nQTnoxJBIxK/9L9TaQAn9/k83tezmOWLoRwKngNdLYPIo1GcGIRzPQa+6Yzxy+zEDPj9qeBac8hoc\neBOifLD8Y7DfisXSg8CHDuqfXU1C6QCUlFng/gpkE+ScB9mzIKwZit+E5krI+kntWPQkKLyxPYBG\njTuy3lEF74+FVAt0nQpSQ7oa2FHl47Jx0CvuKNlNToN7b4Rrz4MH74d9m2HRJPBpkD0Fht4E4YmH\nT6ps/8cTdFL8tIB23333nZD96v8/2on/SCciKG8GsoQQqUAVcC4w64cJpJQZ//5dCDEP+OKXAnLQ\niSelgxKxmQxGHf11JN6GORgjHwA1GgALiaRyBtv4O6AQFp+ELNqM3NeKGPQwqGHHenSQGi2LHiEs\nJaW9BJx1GcQMht2D4cVcAl16oO9URqTfSlVPDwmuuSi+AgiUAAngLgJrBnj9UL8PhvX58SF0NtDc\nhxvkamDvM1C9CVm2DZHYDN0+gh1zYc9TVBoGYbN2pm/GT7LpqwLHZmipgok5YNgO7z8OU1NgXSMk\n94Bhl0JzPiQcPo++FaB2BfVoLYS/4EARZGQde/qgP9wxl5RPkuOuU5ZSBoBrgSXAHuB9KWW+EOKv\nQogrj7bJ8R4z6PfRXHdTEHgeP56fv1h5CPHVR3xpDae6egqsvwjyHob6zcQxhFN4FZA0K/mIz89H\nFkikcgEsfgmaa8Ff374fvwfKNsOm5+DQF+BpBkD1RyIXnk3jrvVEZGa2p20tgI23Ql4vSByDMPXH\nMHEgIv4aInz3UmNUIGIBxJZB6Ezwm/BbzXgiAjj1DmqNTe2DHP1bXTHsOwRFX0FbA3S7AUp3IzM9\neLMsyDVzwNVCadRVLLU+RFbukB+fg4bVsDMN8i6CLbtg8Cx4sRQe+Q7m74fWEDj1EgjPhZa9eHG2\nbxfYB65Hj/2DkBLuuO7Y0wedFHrjsS0nS3Di1P8C9RQQRZdfrJ5ocF2N0fMmInQFIeqAnyeY3Jt1\nV/TmmzOSmd0yjPhvLoa4YdDvEbB1BqBGO5uINYuRygDU92yoF12KePECuGIEDFoIG1+CLQ+DuQ70\nAVCSQShoqgecddQ1ZWGOaUa12JAtDZg/9xOY3g+hP4SqtyBsvdG8+Xi9uzBV+BG2dJgwH+o244lM\npSjeQOST52I5y48vcxvRIg38PijZSUPVgxjrV2G12dGM56JsWwidE5G9n8NlvRhF6YHxXZDhekSg\nEmEOh9wLocsF7e9//RVgCYeut4Ex5sfnJm8WPLwXkgfDvU/i3nE5BcOm05sZ4JgL7lchYicoUb/9\nQW1eDxOGwq4KSEg8ehpPPehtoBh+e3//407UxKnyFz6Kn6WtDE6cGnSM9vE5PTgf29EeuZcSve50\npG8VJqygae3Lv+/ZnE1w1kV0X/gJZWN6U63fSfykDe3VDLseRkoNetyGXu5H7fIqctflNI8eRvjW\nInRjuoN/Tfu9z9BrYcg1UL0LdC5o9UJyf8RX5+DNqSCmJButcRuUlaIsduOeHEp1v3p8gRC8eonP\nVgl+N23mnsRWNxNb7MC0+TyKs4cjnVsJq80l2uVEH+KAFf1haRpszwezgdDuPQmoycjOO6HgbWSG\nFVKvQKy+GP2QcgLGWhj7MEryBbD8Qcg4HYrePxKUh/x4PmM31eg1K6pihQY7TJsGXSbD7HPZOVeH\nl5r2hOZb2kvLxxKQAcIjYegp4D3KHYvU4OA8qF4MQz46tv0FnRgdLAoGS8p/cgF8LOBCumtn01WZ\n/vME+e9TlBONLeAixv0lIuQlmDsbBo2GcdPh85ugy0QIxKC9+zzz77ExyXgL4UonAFrcD2HclUdl\nro2MkJfBU4dnz0zaPq4kbOZU9P4vYUM/uGoeqCo4WmHpfIjww663ofvpuIbVYGw7C+XRi5B1ufhn\nCGTvKHS6OShR/WHJmeCtwtl3DvsiK6j1FDFk/aeE7q5BS++PWp8PtljYXQnjIyC2LywXENEbMkfg\nGziQMs9NZGxZgFwbDyX7kZ2sKDV26CYInHYW/ng3xpYUWL4A0nWQeCE0B2g2aZhy5mAiBh8tlPEG\nLvtmut1XA2PPgLK3YcgTkHMKmr2J7+rOJ7Ipg769nwFfK5T1BdcNEDEEEvuD8is1gg4H3HkD/PPV\nn79W+QWsmwLDF0H8cXVz/Z9xwkrKP21f+KW0B05OSTk49sWfnIafJAaSemjHz19sq4C199FAMWHq\nKMCCtK+ENDvccA689gRkjYbXJ4KpBaVzLpMXGdjveu37XfhNXhoHWFBChrevMMZg7LGQiKkpiLge\nkDAd+k+Hq8fBmi/gvK5gMEL3CVC/BTxm9PsO4cu7BG1fAP8sP7o8N4bK81EKKuDCLGRBJDXxuaxz\nfUHoutcZvbUKW5UFaTZB1Rak14FsrEI2J+DfnwhlYXDJuzDrARg4Dn3AjM9ZCIkzEDdsRORmIJpc\naKE6Am0WlP0qonIPgcJF0FQN5WHQXAG2aiwhebjKxkHNYzT4v6KCj0nNc8P558PTD0NpPrg+hdYC\nFGsE+sgM+mzzwav3wOavwB4F2+bA/LFwRRi8eT04mo/+YTXUQexRunz42qDkZRj2FcSN+/nrQX8s\n9RiXkyQYlP/kdCgY/QJT8T/A/5MBc0q+gdaDeL01GAkFMRsOnAlpifDcp7BtLehSYcTN+PPeBPdH\nhC19jIGPPwOVG8DxEWFV84kte5cw+yaw7wBnBehCUXu8hK5yDgQ8EJENq3YiG+5Fnh2BHN0Luelh\nmPU5cvcniMWrUN6pxf/iHPRF8Yik/vDJnbh6L8M5oxmtZCmxm0I5/Ys1ZLW0odeHQepglF43ImJH\nQQACkRLZZqUxrgGt1QXrH4ODy8FVjW/vTALmcNri+oIxHGynInpJRK+eCKcbuXkh6vZkfKm1yJgw\n0HwgcyjLmEZjyh20mCZSf2gRTZ5lDOADrM0K7HsB7nsf1rug9BP45sX2kfKsqYjoTpCdCSHhEDkZ\nRt0Lvf4KE/vC1Ova1x9NfS1Ex/54neaFrZdBtwchYWKwi91/QgebeqSD1aYE/V5u3sDUsgF0odCy\nBaJGH3mx+4UEypeh6tq7rwkZjnSEIVMsCKUTTOwP/5wMaRGoEXto6doHW/YUxPxG0D6AkKdRdSk4\n2s5HdXrIb7yMUGsdieV1KFIBtx+aXkb79h2EbEUGRiBmTID6J5Fdl6NFbUE0FqF87EaJB23VQmTi\nWAKJDZBSir7gM3xTbkGZOAdRtA1efB8isuCseZD3EWy8D+EtBo+C4gjgj/LRNGU2bhlHSuNQZMm3\nuOsWYsi9jzbD1Tj8PkJX3gstb4LFjEhMQHaqJRCrELDmY1iYhm9EIob+S2nb/yD6b67EPPwDTPs2\ns7+PQr+Q51Axw8inYe3tEKrDmxaFbnM4SvRmmu3rCA9JhzPPPnKO/UngXQypj4KrFtbf0v70X7fZ\n7U81/lDdT4KylLD9Gsi4CsJ7/oFXSdCvOok9K45FMCh3ZM4G8Ngh4pfHFjYwgYaoV/FHxKP/YUAG\nUHQ02SQRMhUOboZv7wFnGhheQWaYEd1Px5PlxPjwuxRefxcH+42lRuQxObYbEU9eDA9dBvp+FIdM\n44AjH4dlCoVhw7hPFoJ/B7h2QL0XxbsDOSMFfMuRCz+B+ka8I1zotiSi5Kfiv7cTasoORM5GZP42\n1M91cGo6HBiBbsDd7aO9ZIbAmBZw9YRrc9sfZ+7ehtC193MWRRb84VmEy940yKUECEHtMY0NxnmM\nIIckezRGc3d480V4oATiYkHRobw9CEUfhW5/LVgUhDUVf2Ah/qRR1Nr20uWTC6ntrKfn5xpVM74h\nXjcWnTUJqXmp9z1Jy50hZJ5fB+EltI1+klhFD+7lkDAG4kaDPgf8T7Wfb3MsnPoWFL4L386EwU9C\n6A+eq6qvRaYk4GMzfvJRyhZhipkCsT/53IJOrg4WBTtYdoJ+ZNVjkHX6rwZllRR0DEBjEZIAAhVc\nu0GxgDGDRpuH+EN1kL8TDD7EJd8i/W+BuwpvxX3siOuH46V1vFq3hTJNzxx3EibfORBSR+vHk9k8\neTSt/jp6t+0ircLP6254xWXnCtaAR8KiAggFMSoMMfgb5He34e9mRuc9hLp7GQwx02ay8GHy2Uzw\n1JASUgNmD+LrcLBvgEG7Ia07tK4BX3do3gyNBdDZBt7B0GlQe48Ol4bWz4216SAxBS/jjMnDGjUD\nl2xk/cG/McitIHduh/FTILG9kZKADxoVcLci1FpoqEYX8yYe7f8ILKgg+ZTrKR7vp+srn0OkjgO+\nV9B0ghSmYk9Lpz75UyIXu3GPMGFe2Ia54iAR/Z5u769ctRS23tReH5xWAK1LwFMHaTMg+y8QPxLW\n3ATpk6DLJSAEsr4Gz3AvzfJSDK5kItzTIHsWUlbh914H2FDU4SjqxYiflrKD/jgdLAoGe190VG3V\n8GQGnPE89LvkyHpfU/vgO+aM72+PN/Ev+ua9j6fnWEK4GzQn7OgF9mj2+vx0jeiFYo8FSwVEj8Pb\naSrrXe/zckgYeiWa6XQj2wmhD88h8bybaOkSwlr7XejKWxikpCEbFhCCDqSC3mMlzxJGqOojfU0x\neNzg8kDPWRDVAroBMGIuaBpS8yOVfOTe2XgP7eBf/a5AMfXi0rbehK2fD1F94a0HofNgyFkONYNh\n9z7kWacj4rpAfQMseAfUKEiKpiXzELayYhgzlYJMM130j3OA1dSWLaNL18ew9OiBefVGcNZD4VJc\nux9FHwhBd8kmaMqDlbNAl4PrjDtwFk8g4t5m/LNHYkicitz7Ha7m9VRmZ5BlmkNF9msoh1pRF1dR\ncVk3zNtqqIlMYVBFLWr2legTJrXXX0sNGs6Eg5lQ8E+wdIaKEbCyGF7+GKo/QVYuxzv4TJzl96K3\ndUdftAR9vQ/ZuStaVhao0UgtH1WdiaK7DCGCfZSPxQnrfTHsGNOuDfZT/t9msEL2hPaHFv4t4Gkf\ntazo/6DqbUi/C9JvA0AhAfDhZTGGtl6wMxcWfk7qRDNKWgGavxvbOo1gaXgITU3v019n4lSllVF0\nI4sYNEsjW+bqqVx2P7VxZsIdoSwXpzB0y7scmDKB7vmJ1Ce+R6zvebo/Oo0bb7+Xh8ofxTpgDCzf\nDtMvg4wMsBzuK60oCMWACGRDSyMmk+DGmjc5GBLJjg+S6FNchImtUGyH8vmIT52o5oMEAhrCf4DA\nplDUPh7UyF6I4jyw1hN6MADlID55l8wuPXFGn0OWN4manHrUzgb81KA9GI8ifDTnpKCNaMN0cAig\nQWQv6HkHlH1Eaf1zKGUJROr1FMaG0jUsFjXdgKUhjNRDVQSazsXUlkm4Kx6fz4hZPxNd0wM0jjgV\nX8VaDMsuoabHIOoHTiJM5BIe9TQhZhNi+T/QfDbE6rfhlhug7BHcuu/wdC4lpOwzbF8YoI8P4TDB\n8GdRYs5DFe1jhkoZQPxwsP62Bgg9xv7PQceng0XB4D1SR2UvBH0IxOYcWZf3cHvpuOuzkHQ5eCpg\nz5UYXPUgJZY9A2HebLQvb4FiPfLsu3CNPp9ag4U5Q/7KPiG5rHIpj1V8zfT1V3PKoUNk0b7/7dpa\n1qsKbQPtZH4YRZqYyuD6jSwRiURtWw6hGejiZuL9cCZKanee+PBOvps0DffBQzCgE6x/G0LTQT1c\nyqtdD8umwpLRYMqFnK9o0QvCkwYyYkQ8gS4WqjIOsfaDgeiudaIbKHD9NYbACBOB2J6InoMgMgk5\n/WrorkC2n4DDhJj1KoRlos+8kIp+CWin3E/mEgdVTwzG+vfZBLJG4Rw4Gn9WNGF1RkRICKy9FFb/\nBTZeh6zeQKO+hMRRnyFufpeMx77lUPNGZMw9yLZE/D1DcGRHE1ntxBO9BSW1CKsyntrYEBKawwld\n/jXKmC+Jq4IuzpmYSaRGrGKX5WXcvS5CxLcSuKs/zq5v0Zj9Op5siTGhLzrbWajVp6Ca+6Jo/VHC\npuEXFbTwNrXcgV+U/fjzX/U2LHsRmspP0gX3PyzY+yLomOz/EMRP+rvuewGSxkHsEMh+or37VM16\nsjdehWgsQTTGo5v8Ib7552M45U5EbgvRdZuRXnhy2+WQeSd0vht2nY3fEiCz5CMo/gxXxgQi1CIu\nD/8r5vCebJ12I8rGF+h7cDNaZih7Yrug5mQS5e5P67WthP/9Iwy2REZ1GcCBLXlYFTv+ijqSNDAK\nDUoXtI/o5q6D1IEEHB4a7TOw1BvRxY5BGXohEcWzCC/Op6RUY+/GXPy3DcUSEUGc+gKhTTEo19wI\nJS8i2x4kUF2H6jeinW4CzyYYfAai21+IFGtxfXUBcRrss3rourmCLy+5iSGts4nzSfxxQ5Gmp3DQ\njN7Zgj5yGNXebwl1GrC6WqDnaGR8L6K/2Iqsf5eGc8GZ2JNO2ZvQNCdyV1/0YQ2IHT2ojelJ7pY3\nIUwBNQbOWIHO04SVZKLoD76DyG6v4OnUiiszHIPuJiKUawloH+D3v4o3xIXh9AZE3J0glyHX3EbT\naRG0sYB4XkBPGgEKUDk8aU9YLLx2DSx9BG5fd2RkusM0WpA4UDnGZ4SDflkHi4IdLDtB32ttbp9R\noykPInq2d5/ShUD1SogeBHsWwZb5YLJhGfoaWP4Oht4ot1+J3uBGVlyHKJ8Jfh0iWYBUoXEDRK7C\nHT0OzbUTY6+34MA1mA/OI0NGgvUltB5vUJQ/hnFR12KOc9PqCyeqaynv1zVyeUwCpppQsDfTNiCE\nlqbPOJg1mItGzMG5x8ZdW3cyuOUj+idlYjv1E/A2Y28cizO0jMhlDrwDz8Cw6T7omwbnzkNckcGo\nNwuxz/0/Sp2fcJ/xAf5pXYFoCsXZMAdTkwd3fSFmpw/nyCtQ1fkEQmNR98+Hhh1EV1VSMjSDlJU1\nxIsayi1euu7dS220HkP0BVgc1bi/nERplEZzrIpPdeHPVpGOHCpitgDbyOgcR3k/J5nLDYQsdlI7\n3o7JeDMh/q2YG8PAEQPh3Un1LUJNakW2aojN46DbnTjTL2JP42P0bdtGhc1CbVwE6fV9iAy8jDB2\nAi2AstWIfksUuPww0QwffggDfXgCTnQlvUhO/woD7QM1uXkCE3ejkgaJXSClJ7TkwYrn4Mz2WVWk\n1NC0r3GpSzBxGQSD8vELdokLOiZOF6SPA/MPhoUc+hLYD7JNfEJXbzOWWS+A6fAYyI0SGrbC+QpK\nzk24zLUoeyowrrJDcQoBn4nC7o0YCx+nOctFZ+nis9JHSS1JpPewd2HjRDj0LdgWUiSbGWiNwGqr\nxp7ixamE0id8IQ+WDuDB1tOQ+lfRpdcRatnCyL4VPFvp5bZh19Nt8QsU9nqW+XY9Ifvhgag5uJU6\n1Fg3gRmP4TbWYqotRjRtgWodBCTkGLHaN9DVW8zcbWsojj4FQ3IeplW1+OLrMZW0IaM70ThhLGHv\nf4yhb3dwz4H1r0CvicSvfxl3tEqnsDTWnh3BsA9X4IgNRc/9+BUdXptGepEZpffjVHvW4DBE0sv6\nIM2UUM1WZPdO5OZtQhnqRa3R6PXObtyznOjCS9ESvYg+ixGhQ4hdfh/e+OdwjFAwfehC12kulVVf\nURuTyo6IbiSJsfRjMML2HWx7Bdqq4MBWyDkLrloIL10ICefAjK2w7Rl8cX3Rb1+IEncxUr8a4e+D\nZj6Im4cI4WXI6Acz5sLupVBX+P0loAUW4pVv4VaXYeLSk3tN/rfqYFGwg2Xnf1zADy1lEJnePmhN\nj5uh5B3IuQn8Lmgqps69jQIxgLZ+Z5IAZAPsfAdZ/xWe5F44Rr6EU+fD0bIKe+eteIeMpVnR0eiu\nRBXl9DxQQB/HXsrVJEZm3o1u3/VUfzUNx/QJBNw7Ufwv0I++OALR+HX1sNJPyqllGNRKjDG5vLm1\nE3+Zs5xS0/Ok1L+PuWY7Zxt3YS8RrM6dxmMJGhdo23Eb56MVbiJynYG2s7risx1Ew4gc8SmUfAxG\nCzwyAexZULYGNT6EzM2PE3tGLKF3+NHC3Lj7+dCFmlEiehOz4XVEqAGx+ULY0wVKC7C3lmKKt+JP\nbUBXu4MIczd8yRYMB8JpTbMQ32k2YvfjhLj64AufRDkLGSIeASCMVOxUsj8ngLpEY8W4SZziacU0\nwoTl04X4hkXhzmggEJgMzWkoqU4UfwKBmjLahgtaczLYrqbgVM9g0g+npHQDq56DyCQQ+dAaSV1+\nCjHx2dCWAcbXIWMq6s4l7Dszkt7LhsHEXfDGHehnT0bSdmRCgm6j4Ot/QM9BkP8tsutpBPzPIIQf\nA1MQBBsCT4jjeIRaCPEaMBmokVKekCeAgl3iOpoPzoOE3lCxBc79ALn0NOzmbOyearZkjKQstZGF\n6mmMIZHLSCfS2wzv9ac0UU/D0AsIsfZFJ2PYVb6Nlc1eSiPGkBAOvYyrGed/AFu9Dq93IHHWc8FT\nz/vGfWR/sYGeZTvRnR4Lluup3JNHy6gqrJY8auwxdP7Og++SavyYyC97GfXrZxnWvBxHuglTDye6\n1nQUZ0+27oNU6nFceQBjZS7xKw9C1xuQ/a/CzUvY+YxovkZIpb3BsmwW/qTH0G09B7e+ELVIhzru\nO+QLFyLWbIUQBd9IG+o+J4FIE/rEACLbj4idRMBeSbW3hJCKAK6hnYisPIgrzsIBEU+fg3uROg+i\nOQxhE7TmR1I2PYNEzx4izFeA9UpQ22/7Pw60kHPXOdj6l5MYMxm/8jRqwIxuAdCswG03I6NX4Tuw\nk0NZMRgGvvgzAAAgAElEQVRsdUiHSknIeCzGfXTX/oZR6Y5aUg9fzwXFC/YS8PthymOQOYZ/7nyS\niyo2EK7ZYHAvUBTkyg/ZOV6lsS6K4bt7Ynj3dbRPDuHiHkK+0UPPMZAwAdZ9COl94LM5yCs/JRB4\nBJ9qR1VGYWDs95eNBx+l1JFMNGb+N7rUnbAucbN+Ox2AmP/zLnFCiOGAHXjrRAXlYEn5JCh2QroZ\nlGO5fAZeBa+eAlFJsGQ6WsBLq3s7emsytpAtzNwtuNj5IhapguaC8lbYayY1JgnzlleYm/4UdSHx\nxEZGMFZbzJh1j9F2zioii+JxGyOoSVBIUm6HQA5sm8J0fWeenTwZ32cxDIq7COr2E1t/CISLOnIx\nR9cgPLGYF2Rgn7KevjXnY/J6uaH/Qp4UV6Ld7Sfw+AFk0Uh6bn2ThvuTiSiMgn0b2dc7g86yBKX4\nRUyWZBxR1fgMqzCI0RBoBWGiRXmT0NhyxG4vOk8rMu8eArm70BmtKHsj0NfUEbBb8PVSKeubQUih\ngivXycbsCfR/42M864oJ61WO0uIkrLKZ+BiJp9rE3rH90H96NvEX/o22J4ZQbbKT4R8O+0vBOw+i\nx7IoqytbS1YzvaaSRqUzbeY12Kq6oHzpgr8+CluWweICnJNDaM0woJcQ/9lQdMkROOMT+VfaCC5u\ne5hU614s+d2xJA+AAZcBPtgzH7qdC8C4VXksOedqzn73Bdg7H2V8G95wExsdY0iorMXw9XMQkYRC\nBJIWcKfCzo/h0DvQ8+/ts67kjEXLW0hTzkFqdHp8pNDMblpw0IwDL362cwAbFmYwlH5k/vr0X0FH\nHEcUlFKuOTzr0gkTDMonwapmWNcCF/zWrEFaAJrXQWwEuBsh51TUqDOJ3/MAhwZeSiR1RMVNBk8t\n1H8H+beDpRouvxsicom2z+GypI20qN+i1GbS6/3v8Ja7UbZdStnacuwbyvFP6Eni+HPxXvwIBvs2\n9PFduSH2Vl6cuQrXog84pW4V1V1TsRhjcYo4ku1l1Eyyk3bOegzeGEwpp2PsWcRZPcbQtvtMova9\nRNWbOUSWbkafO464F/cg+oVDUwqu7HvIU1eR05KNwdmA2pSCO24eComo9i1I2zAU+T4+WYtlnRfi\nweldQkixF5HohWQniqIhktxIQklbm4/IMKBsrcCHl8h4O1qJE+vrLjDr0NoUws57CH2nN0ltHET9\nbfehZuho7VtD73nlmM8cBlk3UPvYLPJD1vHNhbfx5ONngszC6i2m3hdLuBoDWbVQ2wZX/Qt58EVM\njs1YYkqh/g3aBs0jtNMbZKw5j8HNGr3WNFI9fRL1E+vZRxcyUelCDvp1D7Q/WCIUuuzJ51NXGb7V\nOzFMSAeRijP2EP3zKui8Yy+4NMgpg4MLIEUi3W2IlV/CnW/D1lnsikxj05BZULKJEDUCqxDEopKE\njW4kE4YFAzr2UEYOnVCDPV1/n//COfqCfkNrAB4thTNjIPTwGT/6RKYCMvohnXGgH4ZYuxLXWU24\n3TuprLyfQU3p4HoTDDEQfRoy93F89gSaPliGbeBNKCYHMXdVY8110zKtnCadRpTeS8jEKzCPTyG6\n+iChe18CVxy+ktvxmmMwRA5FVQxcHX4ar6eswamlMtSQg8now1QfwJJfQ+hWH+KTnSj/HIn/QBGG\naj+jH8uCHvVosSZC11ZTO2s8ceV7MdbUQa2EqZ9jNjQQTSrLI78gM/IUjJQRxVU4uBsMO8DUg1D3\ndXh1AWhcDV0ChJS0ITpdBKvnw+wXkCtuhagmVJsbJXsQdFpDo9+GUMII3ZhJoOtBAlHxGNMlgfgQ\nTJv+RqCpHjlvNWFjoglN8ZC1eS8hbS5k4yOIVgf33fIgeWYzi5/9G8Ks4RtTg6F0JIqtBa16C0on\nGyx9E3TNCN1NqFlPgqJC7GWY6UMz11HcL54+dcXortvP4Ye6ycDLXvL5hAWYh/djfNV6jAlDEWnd\nGLhhCxsHZTPSl8e+umwykw7Qd1MpIno06Jrax2Z+dwbm4X+FcTfClndg33jIfp4e9hh6fHEnMnI0\nrsjliJibUfP9KDaJLunIXIndfzR/cdAx62BRsINl579AwQJIGgShR7oq9Q+F3qGg/SBZC0200UYy\nh+98WldB9TMQOpjGrKfYHH2IqIh8YpcsYcm4bAY1WFHT54AlFT/FOPkYDyswtk5Cd7YHJTwSb/go\n4sI3Yqgvwt9qpOL0SMoSc8mMGYueWtwNa5DrD6JkTEaf8x0tZb0R9S+gTzgPgWBCVDMri8JYNCCM\nSXyKvjmc7ad3J3ZoM1mRi+CGKXgXrkDpocMQ6US4JIHOGYRUl7Ez9gBh+UUY3B5EQR2E3I2qOTC7\n99PDOQqH8y5MWiPmwGv4Ig/gGleHqdNpqFs/x6QNxtV1GwbRipIRjyishwvuQ4Y78eVa0FWBstGA\nmDUZGjZirq2nc8MC3P4oPMU5GGoKkWvMtPRV0duNuLYqhF2cStX4ccjAWxiIRxY3I+riKGpZz86c\nqdyz5D6MhlX4r5WoX4H47HPC7OE0jE8lZusu6FIKLbshuSskXvX956anL4IxWK3/wNCUzB7v38g2\n3I2eUAwY6E0vetOL1thm9MIGCBg+g+HzHuTp+/5CRMgsqlv2ku3ejuh7OqRcA6F9oHEJbNiCOiIJ\n9G0wui90uRzCx8LaF6H7y6CuRr/nAEqfVHzNDTTddhuxH7yL2PE1DJwOOv2xXaOBBlAig8OE/pvp\n6KtXlMOKipObFQg+0XfihWfAC7nt3aKkRHq/YmhYgDj9j++S7LKFb1mEtG+AwpnQthoy50HCrUTF\nTWC8+lf6d34afdwQBm+soinWR5NZj0QjQBWgoDZbMYb2xZbQFYO9lZBdJRjq3ODQ0JvTSdvRQmZJ\nNvu1u8jnHMzPvYAYdDZc9DKicQ/uxlE0s4/CwGUE8BEtZnCuuT+mnYIPjGMxKM1027kPq9OKvHsx\nxucraDJaaawzIu0+vJ3PQhdfiJKk0Hf9DlrCY/HrzDR7wvgyPozdPdKonpBJ5PQ26i5PoPzmrtQb\ntqBbX0JY/VBMm5+BkOXI9x6DcJXGobmIunoYFoNseQtfxSOocV1QwsPx9+mKs/hx/LtVSrQB0D0M\nbVw3rM9VI/vr8U8NQRlXg/PbSsL6WTHGJJJsGMDewv44kgOImibEjlK03k18V3EGYxy72vsOrwlF\nyTgVTHoMTgOFTeHI6i4wdAGUp8FCN+y4CbQWACQ+GtjAOm4gIlElpWA3u+UDNLLtR5eBTYSjHP56\nyfA4DHU12CICbPOWctpWL8I5BCxetEWP4h+YTuDaecgZg6GwFmnOgglLIPqc9lnD92+ELsOQGcNx\ndQlDPbAQfd21WIxfwlXx4HMfe0DW7FA9OxiQf+gXBrUflQpzhx5ZfoU4vJwQwaB8osX3gs6T4MBS\nQIJ/A7ifYkgYrG2tJ0ADaB7sVfdRrR2g0vElpL8ESXeBGgrO7d/vSiBIHPg4PZz9GL7HhtX/NEiB\nkeHYqsYQOa8Q45Zb0Fc9jNBZUBwBRLkT4egGTcOQfje0LiGpIp+U9wI0pOtpnnURbaIQrXYx4VmN\nhFl64G0oZCNn8m3me9j7DWXKxzsZ/vgGWp834X9KR9TfrShby/H5atENdRDz/m6cgTTEZXejxcQj\nu0RjqUkiYWYXvC8dwBaeyOitWzB6XBSG57IqJBdVpiEbJd6/qLjH+uGBxbC6EFpLULM0TE4X0Y/s\nRwvxozUvpuzULrw66nkeGvYUX/S6gIMVPhwpgjpXAmHhoxBZ72DRSUSpC/s3LjzZEu9tfsJTNTzu\nGLS+F2GvfxL17GYCvkSERw/N0WRvz8SwQQ/1bTjDQ9E3TEWc/jr0SWfJ6eNpsHanYYcVz+YXYcZD\n0GyApd/CwTg4MJM6/zxsnImDzoSqj+PPqKdLg0YDGynkBTS8P7sk5I5dlPdNJ6SlkOzNW/BMuwct\nUk8gdA9i71pc2tW4dPfjHh+G49yXcfkGskx7jG1VV+JbPAXMJeBrwi9Xo7hCoecTiIDEOlVBGzYY\nRl50bNem9EHF2RD4hZlR/lcdx2PWQoj3gHVAthDikBDikqOn/H3ZCTpOEj+gIf7dFWnKG1DwKay8\nDwYKcD3BcLuT+aUp9BnwNJH79aT5Wuhim06CfhS05YF0QcsCpKJDdHoa+cpTHDrXT3L4bShjHkL9\n5GJwVuDvdAH6Og+sXwMF1XD+ONAiIfZjtHQDilSQrlochlUY695DiZ9O9LZo2PQW/sfz2CFuxiNr\nyY0qQq+vIcQSQZdXHbQW6mjQl1CTupeEEZlEJ69hXtod1EeF8pz+Lxg9Kga9DmdeT9pGJVFx0VSy\nVt5M80gPeqeHiJXV6Jyz0atRNN36Fua7hpE7cAep7mTCTDfgt2TxftsaRN7rlKSnkfxXK6nvrYTV\ndrQp8QhzNZ5pRvIHZJG7+RCREbdytr4nHhwkd7oAmbgD8jeyLf4M+rkKoPgNKLAgS8BymcQ9uwHf\nU7koruHUhBQR8uyNeMdbiTakE9EmwaaDulIo8kGP0Xh2b8XrciDyVsIHlyKjHOR37kyGIYKGNy7H\ne9HdJHRbguhvg4/2wGWXojmWYSxcib92Et16n4cuLBOj5RpardeTEpiPQ41lJ/9HJpeiJxQziUjc\nVNgXs+zi7kwtXUTeGZkc0N9GdmgC6oECMIVh0f6GKv4GVggUnoUrJg1bWznbTW6iS3egn5pLpLgb\nr1yJdJsJbHoT9VAG7vo8vKoRG0DjzvZBl36VAsICYTP+sO/Cn9Lx9b4478RlpF2wn/IJIJHUcisx\nPIjywwqq1Q8iQ8MIZLwE9gGcd+Binh00m9LGzvTwncMmWyU5++qJXfwdJO2CkJ4UqLFkflGNPq4T\nnrQQXPbdhHm6IgJuUL8hMCUHretF6Be3woYlMPdT+Oh+0OXSeM5odvlfxGyoIb0pg+g9dYii/ciV\nK7HPnoph4F1oJFHXOBccX9PJlIJCPm22OWjGfgiG8k3DZ3SrLiI59Z+Y7vKx4NYLSHC30PdrE5b9\nXhouXUrUoyE0DWzEVBuO7vJ/onQegvroKEStEZ5qv40vfn0kIVWHUK69FFugG6aCpWg6M0/kjOam\n775B37AeTn0cHjgLKtxg0lF/bjgNEw1ElroI2xfH9t0WkmZeTidjFmy/lpp6O1ZXC4aNLei3BvAN\nVPGho2W1H9vqV5CFz2Gti8RraKDFUEhYncR1lpWwqgg4tB/KgMJw6J5Na10+li0auotGQd46dvSf\nRnWP/oyJvIT54lv6fV1N7OYyomaPg2WzIWEmlYOqiW9cQqD2IJ7GUVjbwpC5M/FGF+LmU2yRa/Dj\nYAvXEdFQQlJUMm3VHha1hHLOVyuxVgZ4a8o4XCOu4iotB57qDhkXQ3oW3oAFQ9MaSNDY7/yCDwdM\nY6CzO72eeY6CO29GJzX6ONaivfI2IjkKddq/MO5cSd3tnxD7wCQIzYCc6379QnVtBvsXEHP/kXXe\namh4F8LGgOXPNfvJCeunfOcxpn0oOHHqn4ZAoNFEFZeg4TzywqCr4dAXaNV7UGLOwBAxku0V8ym2\nWzF1OpfE5mwq6+ywazuU2WgT/YhbsB/95EvhmocwzLwT9YaeVN7WgO//roKps1CcZjStAH+aAfqd\nAcYYOP8ZNKsZ63Vn0fuuL6jWoFZKArauUJyPGH4FpoH/pIkXqfcNIlz3DhEmO622vrRZptFo3I+B\nCCy4mF6WScSOUlrqwtlwW1cm+L8il6/ZcH0R1bd3hYROiBm5RAgouqwfamY/dNVvIW7dAeddDT4H\n7PkHCenhRMdVE7b0efSrboZuN6MMfJpLtnwDxa9DzkWwawEMCofZHmSLg6iXK7CuC+NQZhqKezeV\nI8OJ3bEC9ztX4P2mGOv+SgLShy9HR83cXhSNz8VTIPDeE4JJvQJL0n5k0jrctnyML9lpzghBv8cJ\n3zRC0gyoM8KkR3F3uxBXSiz2Sy+EXYeQXcbyXZ8sRm+5HnXTOGbZ08kfa6K+ajvur3cj12fha3uP\n2AWvonzWh4BVjzk3Bya+gnDWo1++hrYNVkCiI5RcbidhtZ36mgGE/SuOc5a4CV1dgiir5YKQXmQ2\nB2D9dwRkD2g9AMWfUHf7mTjWvMBqvUZR5lSuzG9kzAPzMFbVIMocJO918W1JJaX94qkbmYRU3IjE\nVsydnbD3H5A49hevz+81PQMR1x/527EddiSDq+BPF5BPqA42SlywpHyCtPIJbXxCIvMQ/x7hpOYz\nNPcSWP8eDB3Do675fJuvMiruA24ZApJJrNQWMbE+Em3hBBzNVvRj/oISegjN5oCIGDRtLWJFBs5+\nrURELEfZeQky5SkCb50K6V1Qxz+EXyugIWQRke9FYXhvEf6+aTSc1kBe/3CyP28gdfo6UIqh4hYC\n+wuoG5qMZpDoRRgmf3/qTdsJ43S8VGByOrA0hOKsfptQWcnXXW9m0udL2Hd2FoHSfcQnNRK5SUPJ\njcSvb6TcPIm0ihbo/En7hKSeg+0DH62/BVlbh1sxoaXFEmLsD/5GqMxjT2gaiWGRRKyvh/Nvg8qv\n8eeMQLz4MNQdxKmEIJwaer3E1yecpsFxJCbEsU2mMWD3Aviunsb10bimWSlepbK0shNX3pxHnE+l\nIR4Mj7ShL/IjP9BhLrKgGsej9g+Hb/dBWRFtNj2BMBNGXRpmqZE34wUOyAbOVHp9P3GAJn20bUqm\n8Tw3EWd48V2ZTlRREoqvFoa9BZ5pYLsRLeIatqy9lR6r9mK+fVF7A5qrEVbeRaAyF+32m9Dd0hUh\nXeDuBnM/R7qduC9IZd9Ll9H79ScgRXBwfR+WnZpOf0M2vTaV8+20EYx4fx51oVG8dntXLr7/UxIq\nPHx3a3d0Xo2hVZFYBkzB99nLBFp8mGYv+/XGPs9eaH4V4g5PXeXYBuX3gG0UxF4NquUP/X78EU5Y\nSfn+304HIO45OSXlYFA+gex8TYA6wjjc8JJ/M5r9A8hZi39+Tz5JuZv7PbexbaKGtrAfhtxhfNrV\nwtTKjXjL96DadRi/rEGJn4I45zbE0jvQOoHWfRuBPdnUjOpJp4NlKFUSrbwQMsuRWWegWK6AZj/i\n4Ofw/9g77+i4qmtxf/fe6VUjjXpvliW5yb3Kxt3GELdgTDMJxRB6D4Ti0FsINXRCMcWYYowBY1vu\nvVu2LKv3Xkczo6n33t8fIu0leS9vhYDzfvnWumvNlfY656yjs/ccnbOL7AXLbOguItCj5fisNsJW\nGNnhxHj5h3Dx47Di9gHjU3Y3falZVBq24qUDk5pCWu0+IupKEVtAjtSDHCYk6lD9EbRnJtKVJRFW\nDTiCXqL77Rw2pTOprgiTdhSIBjCkQcMJ8PdCjQalrJ3uiwfh9PrAPgQsOfgqi/DX7cRhjYO08dDV\nAvM/hk1zUF8/SWhJB4d+MpGxe/V0xNZiS5mAwTcE0d+AGHkznTvXMPNSFxnRMm+d/zGhoUm8v2Iq\nM5oqiTt2DMOdNZgemEH/pF5Mh7vxjWvCVGpADC5HKX4bn6CgRjlR0wqw2GIpjSjjWN8slveUIvp7\nBzLyAbLYTOvqWjSCF+Hu+USXCgjJbjCuhNTRqJ0TKXXnoDTnkDP3JbSSceDvXvUNnPgc+d0NEGVG\nemEzvPAruOCXkJoHYT8lXxeSLLdg62mhNmkSu0edz7BrX2bImwdRv1xJ197dRE1YiRSbyemaL2j9\n6SKm76vHv2k9HR1NHHhuMg5LPhOLuwm+XYp52RVoCpeC+Hf++W25Cpz3gyYJ2l8F70FIfW7gcvnf\nlO/NKD/xD8re9R+j/G+HikorVxPD00jYUUouAf8RPmo7xYzuOMy9/Vya9RmfJ76Jcuwowue1bLx/\nGecc+oa2mhSSc0Yitu4Esw7i46B5H2phLrKuBOlBE/5nL6fTUE3i1zLYShB0GmSTgBQYTnvGDNwJ\n46DudaLT78T+7ZWocQ34Mjw0+WZSoesipzaVjPilCBoBtr8B+hK6poxCG84giExAo6HD3snwxucR\n5NEQ80uQClE2FBCOGI488ioatJvp0lcTIWcRpcRh9dfR1V9FkvMRsIyGoAc+ckLMYgiPgG3vgjkE\nTTUw/Xo4906omAVPncI1vxC7VEm4JRJVLkTb1IZyjYvjskwSp6BTIdJlRhoxE8E8FmJX4vOFuGjM\noxgHZXLt0EYmNTxN16A4vIuT6ZFEYp84gtkSRn/NGMSggLa4kZBSgiZeRTwsoQbD1M2IJ3lrB4HB\nefTkZ2NSi1kbXsQISyxjrboB5yZVBW8fvt43UdbWoEhJWG85AE3boXgFgcgIzsQnkas9Q1ibQrV1\nCs1R+STUhsn78D4Eox7VNhZh9j0IEWl4N9+MwWBBCoWpHd1DiyHM2NUl7Js5E4/UxcyGEP3bDhNy\nGalceDPxrtdIWtuKGJ0D8y4ivH0/mhP7UHx+wkYP3QVOXJjQa0wkF5fgKo8jMkUL85fBgosg988u\n/UJ10PUYRD8FdTeBeRzEXP1v7xb3vRnl3/yDsrf9pxzUvx0CAg6uw917BxH6B1BC65HkQYwML8Ak\nSxi6AlxvfJuwcAGapi6UxdUMc+3k2xmzmVJSjpCfDqmvQOkqaNmGOv5SlIgqWr2fkJRVhDbucbrl\nFyH0NNG6LvS9qfgmrqfc7OGYcJoaZT0zpUrSq+6HcbcjNH6N3LCZpE1fYSmcg9a2jkOWDgaVRhKx\n532YZcZU2oRBLUDoCaHGphMfikTADKfaUGOvw+UZSmNsOt6ZCeRKmQxiAWW8gIMCYuTxqDXfkrT3\nVoi5CdpSQGwG6yywzIXEfJi+EnpboPUGSLkGSt6DXbWoTgOCo4c+UcIXiCaq7n3c7hlUmC6hP2IX\n4ic1VFzswLLtNCYpCWJXDsyxIPBp8f2IogBH1+F5xY4xqgZHeRWpoTh8OW46psVhTtsDhzNx+MB/\ncAbaWTvQNFkQEnqJ3diFbBRoGGXikbR53MoTrKnOoNIoMMYpI/u2IX31PkJsDpqhQ1BipyEc2YAS\nUhGGLGe/USXOcz9D5ZOIvdPRZRoZorjI//w9lJIzKAGVExcuI+ZMKVGbr0InC2iNVlyqm4geI2qp\nlxT8iE0SsY4Z+Ps/oTQujeypHrofOMHguEexaiJxvzAPy4F4pC1PoBF9MMiM97aLCVauJtJ8Hqbs\nUXS1Hab/9GlC9S2E509Ekz0YomIGvlT+YHS7nwHDfKhcDkkPgbngx1OSs5GzzAqeZcP5N8JdCeY0\nEP9sCgNNGCoeQ9++Ftn4Lej8tPsK6ClVyZ6/jwP6pRR4SxDFfaDtRzak0tORQmJVA5EJWoibCRod\nDH0U7BtRfDchRL9KUcxXXNrVSivF1AoV6OQo1DgDm8dfRKT+DNllzSyuW4Pp4EkMbhnmPQE5c8BS\niPmhOlzXpRDf4sIfMxLVlk1VcgfSrUvRRJ7Ep0bCUS9hyQ+aFnD2g348pIQhZgQoNbSKelKkEZTz\nO/JD1zNIWskp8XFEQaIn9lOyq8oh3QHOMPgsoIuE5s1Q/+XA/HjbUTtOgjKKUFwU3swc9LpqBBna\n1Vy8BSbaRsXTnK6D028RTNBzYEUmGUebaMtPIN02/49TbDB8N9+KDNvfxCs144zNRxXL8Tak0502\njvjq9fTkJdLWGKTdDNkTbYQ36+gbpkd2RhO9uQ05QqCpPZE8RxWZxm95JnYc9TU99EW+i2mtBsq8\ncKsBjfUJhDHFkFlA+MGr+Oz687G07MU3Yg6CbRTO4kos+1dDWQuCLCMlZMGZSkYd2oWSloA3ahCd\n3kZ2DBuGy6wy8VAp8U3NRLZ6ELLCZG8uJeuc+2g5fhv7J+ejrFIxHrUyZMkEbGUnCMlfIBqtCPHd\nsKMf8fRaBJOK7vD76DIvxYYB/+xIJOMx6u9OJKS8h7PmCxy79YhjboT4LHAdAqkXMt8fqPH4x/Xq\nAv2fvX+Hqgb//yre+p/cF//GqCrUfwSnHwVPNSQt/MvfK24ggGyeTFdGGRH7EqHhK0bMfJEuQxHj\nk9YgrAMl7VqUFXPRdLyFIyWC43tc0NsJ+uw/NZUgQN8U1O1PEyx0UKuWsJ0DSOIU/FlV6KUGJvs2\nkLVjA2w4BkEnYoodzrsFplwDvn647zLEZZMwdbxNOPM1DDXLyfnkJOFQmNarLycivIc4byuGKDNm\nw4sI8aPA4YA1q0C/HS56mrC/FfHIBMSRDxCSp+NbNwdtVCF5c1/mpPgg1rjRdBYUEdlzGrG/Dzwe\ncIXBF0LVKITdWvorfGALY18oEs4fhZ+ZhLPexfJWGcm04fnV24gVD2CtO4kvIojrtInE51qwWDQ0\nPHYpXdWLsJh2oddn/mmuP/k1oYMbELNzkcY8hbLjMoJb9mH/YjucNmJvHY0UV4/+8BqUM9sRJsbT\nOSZI2pstCC4IpxiwVfVy8/vPYVh0BfnObzB11qPRC0hCJsqVP0GQtiGqCXD4QUpX3MOeEUGmffks\ndctyEBxdaDkX84jLobYUgl+ADnDXgF0Lde2ILg/WSD3W4maWbmqm5qczabUkERXjQxl2H2LwUQTd\nxwjNXcQdbCPm/Ua+WjkTObec9bntZHUasEU4sS7qJemoHpQAhjVeup+OxXFkDELiZNj7EoowAdt1\n83AmTEXGR2fUJ5THvoCx/VqSOrqRopdD0pMgCLhpxEg0GvRw4F6Y8vwfd9SqqkLoU5CrwHjXv1aX\nzibOMit4lg3nLEcQIHEpRE2A9q2QesmfCoX+GZLcgdiZT5eoIXJiL4L8G9ZWP8QvTr+PvHIX4VQL\nUv9mBMMuoht15E2+Bq57A8b2QLoTta8UNXQHYsReaiasQR/aiyUcYqycQu7Rg6jdB5Gq3ITLTIT1\nGWhmPIO46DqEIxfDuOuhdDO8+QjKIh2y7QMCWYNQxG1EpE/BvreW8gkqPf1bGFzTjtIXjzb6DoSC\nWfDZ41C6FXKaISIG+irRyMCBoRB7K9rdnTDkWnpcH2OvWkde5h2Utl1J+rEGhNEqjJkGQ16Ao++i\nrG2S+DYAACAASURBVHuKQF8Qb5sWQwpYpk8E11FMO7/AJNRBZykMlkAbxvLaYoKZKfgzBTrSMhgX\nfBo98+hvVYi+9wCldxUyuPQcQvmbsWhzoLcVXK1ojRCRFg89AQI7RqNN3YTgfhhNzhrEM9sx7CtC\nbWhG6ApRmxmFQ+5DapKRzQakXj+jm/yQNgtl3VuIS8yUSReRufkg4cu0iP4bCbZm4Q9cT6+xhpr+\nXzK6PciZixczb1UpwcuvxTj0XOipgqNHYfBE1Ii9CGUyOPTQqcDPNkF8LlwIUl8HWbtXkO4/Qsce\nIwcnvcqgyfcQVbMSVfw9YW8k9eJYpKFXk/DwQsKJGrry4nEEf0pk6zaUqFjEO8ro08WjhnpRQ24E\nXx+YIggdL8awYiCQTMJIrPFSYtMupSf5ANvlN0jTzScdGZkA+3iSWTw3sFAr10LqfEidN/DufxR8\n94O98ofRp7OFs8wKnmXDOctRFNjyEsy9GSz/TSkefye6UhParE50YSe/XX8lY3PsCLd8g6bvVRTX\n43jMXqy1QXTJn5FungpXbYdr58GoNJSLO1BbnHRnTcRkGsyQyDZUeyfRR65kjymNwU4NLYm52IdP\nxTHiHqzEDJSnF0Xw+1Hfvgl1lodQehyhWAtm8RVcwUtQXWcQjBpyBq8lrf1R1ACEBQO6dXdC020w\nORt1yQQE7XhQEqD9KJx6Gg4eBeds1LQqtNFl2IavpaPySjRFbxDdK6KKIp5cM5bUxRAI0ruljcCZ\nXCKTThB1RSKCbSHEToDGMLS0Q/AEmBTQWsDjRTf+MtST+8jqK2Pw540IUbMgvgdzQjx683Gsl8Qi\nxCVguvN6+oN3ogkfR3NoM0IQtIEG1EO7CJypQnPNILT9KQSPTkL/cQhZcoFZR2ioE3HkYpzvbER2\nluDdocN6jgINe+GCn8OsZYidHWSfOENleojUvo2EFS1bUlKJ33wSOwJT3iln+4J0hljnID88Hb58\nmH7fy2hPnkDJNOFbnoXWnYlx+pOIB5+BD56Gojfgku9ukWzRMP9rpL1vETNlFZqWExTVrGVxfQZS\n6imUq01sTRvBUPE5jKPM5P9aIeXVVdB7GHXTcfB1ohZLWJJAk6hDNHlg34ug9KK6AggWC+GSwwhx\n6UhRAxVJHNI4zpFGU88+dvIUIfoI4hnIThj2gTkB3PUAqEovhPeC+TUEKf1fq0dnG2fZ8cV/vC/+\nN9Qeg99dCE+c+fs316pCqHkXS1Yl8/wLvyCqNYz8lgN71WaE69+A4aNRd+fQW6hH0yFidRwFcwrU\nXQ4npqAcuJOei3PxH+nFqo7BJrcQSqsgvKENw9gAYVEk6Dfj1xppG5tJX9JYfEE/qsGJ6Gkg99RO\nIttbEcY/hpRwPRBEKH8OX+QHGPwlCE0poHGi9pbibojGVh4N06JB0wA7elGzO1FPB8FmRxiciFCm\ngaPHQaulf/YE5OJdaJOykYYNpyWhnL6aaMpiYklQrGQfMlK7cRfOa64iLXonNDZD0zGwmmDCkxA4\nNfBZDkPJTkjcCaV2sM2myVJLlK4Ww9dhCIYgbwp0nIBgL4rXS7jOQNCgYpw+mLoDdWhy7egahhE3\nzYv7aB59GeUklO9FLXHTf6cTb8xQnJ/VIx6vovT+dOKP63D0txDKjkV4qwrcItJMCSHyEkgNw6av\n2DLpKpr6m1icu5szuhlslm1c8doatDfkEYw6QJDBRDAD47aT0B9COnwQIZiKMLsLJhdDVzOVkWfI\nkhbCGwUw7C4Y9zfKWpzcArUP0u08xb68QiKMmcTXfYmm00bKzmKIHU/juzLRuW0Ex3Zg7unDnWlB\nL6vIsRfQN1Qifn8BlO9GFU7hersZ8/ReRKseUTAgDPkZzHkQdH/yPVZR2MVj9OMmlYlkMQtt2Seg\nj0JNnQmei8D0EIKU+y9RnX8F35v3xYf/oOzy/3hf/Pic+gZssZAycuC94QT4+qC9GmK/O9/saYfu\nNsgcCh2bwHuQJ94by9UX9OA0TECMjMZ61yXwxGXgaoXfL0NIjkN6KoS81ECQp9FJt0CzjOL+PX3X\nRCK+ZiducBo9l7xORWcFHY//Gv9QD4nhalKG1HNMyWf8l0dxONMJa1OQjj1DYJgGwduP3tdNqFNL\noPhlQol7MLaPQ6z6EEnJI9xcCd0GtMFjcKoQ8+Lr4OK5sP1miDoXlnTBV1+BcJjwcTfa+B6Id0MB\nUBnCZD6CJ28MgY6jmN3N+FPGk3z4BOmbZTYKw9lx6TmkXLISTr9AzdBLiRy7CNPWbWQqkYjFD0HK\nuTD0EahaCOd+Cq23QPNpmPoiiXYngZ6FqDtPIni9YEmBKzZAqAvxyBJ0lZWoHS56+nuJvRh8wzqQ\nHjmDWlUOlcVEJffim3Iu/Vf5ERPOxUQRYtYy1PLHiGiwE9EWgMJV4KgjdOMr6L4Nw5Ag1G+AA0Ng\n5sUU+LbxceTdFBpEjpgsrHhjF21LI0jaFyDUmYln7s/pjR3DoNKPkI12WuOzsVbUI5SkEK0uRa2T\nOLXCQQqz0A3NhZS/k4viwFqaJg7hTHYK+c0lOA7uQFsRRFfogLCMemo3jrEF9JRpiHWei39aLuHI\nOnQbV0PLWvCPoruhBpoPo/cGUKQYAvoRmKeWI5TL0Pw6nu0nELJXYko+F9R9yIodZ3MDua05uLSH\n2DeqjISIMLEtJeiiP0NnuH7AIKsK9JaCI/+H0LCzg7PMCv4nzPq/I20MvDQfXpgHQR9MXgH5M/5k\nkAEiouHepbDxOjg5n66+JugqZ+o536KXp2MSxoLZBnHpkDsCMkz41unx7usHaxp+NtB7y1S48iO6\nxVrKPomhw9SP58w2vmk/wDF5I56rf4YrMoaauuHIXj3DlVL6l5oIR31Bt/Ihgt+HoW0EGuslBDrH\ng9GK1Ctgf1OH4b0HCRm6CK/bj9tiQCNVQZEWYcYKpKQk+PQc0GpQIhwEA5/jWumAmGS01okozVZC\nn2hQLZMGbvFTc7CMbcCaZyfoi8XV2EhHkh7XUJGp0wdz57EiMnrq+GDojVS4iinnEPaCAoSTr9EZ\nl0PP6NsAATSRUDEHIh5CKS2ld8UVdA0dSmjzEZS2NtSIYTBxJQS8oBrAeRtEjkSfOJnG/Om4e5MQ\n6jSYMsMEPRr8E620js3DOyIdx9HRRHYvxMgqwhXvEhqcR0J1GsI5T6K2CAgmLcSEEWeIqKqKUg0Y\nk2HE40RFT6NXjMTiOsOI3no8o72Y6yx0LngVNZhB2tu3k/37CwhFpiIoAjEu6LnwOqT+Hijahicr\nAVHV0k0ZmJIgsBtCrr9cU+EQeHtIMF/KjNWdpB3N4FRoOvoRfvpOlNGfrqN7XDKkd2I0+RBylmFM\nvY+onvMwNIcx1QRxTv2UnmkR1N8TR6/JgObyGIw3PYWQ/CyM+RVqs4yhtoFWz934TkbiXXsBwRcX\nkrPmI4Qz64kYeheFwh3YI6bT0fsJW4wKfu3wgVSzB26BnpIfUst+fP5O6s6/en4gvpfjC0EQ5gLP\nMmDk31T/S4yMIAgXAX+4znUD16qqevLvtHV2HV+c3AD73x3YLc++C169FK5Z/Zcy9y+Dyi1wWywe\nRSFckYveXYShwImQtw4sw6B4K1TciHKyi7YdscQ8lUbbiH1EFoF/rITtUzfioPmwoRQ1Jwfq9yPo\nhkJlEVjHEw6b8TeWwFUxWJRKFFGFWOhLyKFCK6KxKRiaM0h+bB+mc0YhXLwWYetHKKuvQLzhY/jo\nBZSFZ/CnL8D07Dcw/jzo34XaW0xgZCGqrgUp+2F0rmZoLwKXA9Z8iKqGUGPtCOfdjZCzGI7cihpf\niLv6VVqS9OiqAmheacUxAcy3rUOwziCgeKh5eCxrb1uA1WukLcrIiPoGlqY/h4QG+o9C+Ww4MBia\nD6Jc14j3hovQDz2BHMwkVBGFUTqOP3oxuvPORz991sA8qyqsXcLjpnzmJn3MUPFqhKN34mnW0lqZ\nQ/qT36J11cHmZ1GbTqL4mwg+eDP6eidi/ZOEV49Fc18cAduX6FwC7KzFH70QY5sJlv0WNH5+fvoY\nL0tXEdQGKLcNJ67ZT3DsUGwHu4jc9AWkDEEIt0OvfyBN66jRsO0jwA+DJDojI4gSxyB4mqB7J0SN\nhMFPg20CVHwFtVUDIc3aVtj/IsweymZLPjOlt3C7DIQ6BJojEhm6oREcFojJhAl3QuO70NWI0uWm\nd3sOukn5iGNeQ1siEYg2EUqOxdBSjaGzGzoFcPs5OLaAsGhl2Ooqeo+1I4oWrPMXYZkwBXHXFygT\nHASV3Zxa+hvCBNHU1DN6662w+NS/xU75ezu+WP8Pyp7/b5KQSBAEEXgRmAPkA8sFQRj8X8SqgUJV\nVYcDDwOv/7P9/mAMXQBXroGIJHj3ZwPnof+VxWMgNRNCqVgMaZhGFKIoQYLmRPA0DpT64SvCRwKI\n/lZiVq9F8hZhDBQQGl6IuVTFO0VB7S9CHqLDp5wmMN6P/yfH4YYhcOdP0LzwJe13J2PMvhU5YzLh\nmGjC1Qq6Q/2M2hog45SJuthOzlznINx5GsHdAaMLafnVT+HpJVDYjphxO/qeXBgWj1r/Dp6xWfQu\nWYQ2aMToy0d3UoI3n4XPt0LTO7AkG+yRCL3TCT3+BcpXy/Acz6L7rRKErF9jqO+leVIm0vqtiB2J\nNP/sFyjV5xF230d6fTPLDhyg2mGlTYqmL5iD8PaT4O8H00jwLgFXAwxfjli/CetUM5rBk9E+cC+2\nD79C8+g3WGIraY5+/4/T3CfsJDRsHtn+0/hzkmjOGgfawVinX0vK7W/RdttF+F09KBGHUDtqEcZe\ngvTWI4S33AMddgTfMVR5EBrTfNSASo/OSctYEbLz4OsHCO+6jDFtm6jvsSCKIeyn6uFQC6Utbahl\nu6ibmcGZWVo6ExWUXi+yWo26/QOw5sKIX8Aemeq4JIRhq6E+E3pTwT0fDv4ePl8G61fCgcchphE6\nXoYhY6E8ljFJ9yPUD8f8iZGqtGyyQ71QOBFirdB+ADZdjZJ8Na59eaidjdh/+yyWURswHYxCq1Ox\nyFNwDNmGvj4H+XA8SrEfRTIwbOsZbG2dhCaLmO8uJO6BJ1FDOloee56WL3fg27MXnTuD7fRyEAOl\nwWooWAW27L9e4/+XOcsSEn0fXY0FKlRVrQMQBOEj4CfAmT8IqKq6/8/k9wOJ30O/PxyCAOMugbhc\neOl86KwB53c31L0n4O3fwJWfwvFLIboJddwUwmmZiN5x4JRQPokiJCXSszVIzGXTkWw2iCgkwrCW\nbsMKLMda0WFHbYlCXHMEzbVaatLisHQZCI8chz5chVHqoz83mWDbgwjKIHRdSYgN3egmZEJ7Kfba\nM8x9xYcyD3DrUL0PI5jG05FYjH2sFUuwCeVUBWLpS4Sd8YStCei0F2J59R2o/BYyx8IUD+FCEYVY\nNN23Ez60CW1qKULBbLRbbkTZOIgPns1gqeMSrA3vIrbKqKKBvr5Hqbh3PLF7ihHthVi+fRqty0Wc\npYpH2rfxqm0EE4MFBN+8GEP6EIiugC8+gko/LFqA/6t7CVs09C3MReJFAmyHFBXdBZE4vt5I/eCb\nQKshIB/C7Khk4Yg2+vuTCHUtQk01I2ZEozc1kHh5ByTMBwMEwtEIQ7Ppq8jAqK1Gu7EM0SqjfroF\nMXUPoYmD8C1chM0SIFR+DG2wiUC3h4lxVfT44okPtSJlDyJibzuztsfgG2Mj5aNamtMy0dWJ9EbZ\naJhlxVnTQ2xdD9Kx5yE2j4IXdoEzFzV5KKq3BeHIRwgX3A3B2yEhgCo6ID0VQfklVO6G4yVEnJgH\nkdWUXjac7IgVGOr2DByVtZ2Gj29CjjMTfunnGJe+glSyBfqfgE0lEDsEvC7o6IbbxiGEGxAiOhEy\n8hEShmBMHkfGaIVvhN3MbelHSJiBtHgp7aG1DKlbT9+XU+l560UuLD3MmkvymLx5J9x67I9Jmf6/\n4Szzvvg+jHIiA5lq/0AjA4b673El8M330O8PT+ooSB4Pn94GU6+Dfj+8dCGEbKANQJ8V1aFBlg9g\nti1HXP8wrDwfRZ9GUKjB/lQS4ikbWGNRM54kWFGPMXMxsrgOvfVGSKiErGp0FTKpASfS6ZOcGnsE\nq7uLRrGY2NON6E3tCOX9CBubYPY50F4CmZfCnjLI9yCG02HQTqhwotjKEZJ8eM7VYj6h4ne/jmux\nnQj1F/SJqeg+/Q3B5Di0WYvwLruGQLiC/vYg7lYDSZ89j+08G0JNFLi/QBj/EG3BXZh378C24Eo4\n+iy66AUozkEMbnaR882ntHT3cHLk12hHjGDswXYCjiFE+z/jtr6vqbOl07jq12QdfQ6muKHwFxBe\nA1s+w3C6Ehbfi6m0j3C6Fp3lSQDkdDfugnmkvNEBV71Dv6aM07EWXjV/wU0dZ9C3f0hRzELOMY9F\n+9VKCHlRY6yg9qGN64CWW4iKEvAUmwlKBrQrV8PrFyJUdqMpPobpMoXAIDvuoTKR205glDR0Dbdj\ntYQxH7UiGatpvGIyiTucWNt6EApjSGxXoLUdZdRylP0bacuPQtYpJIZkCB3DP09E7K4iNKiDcIId\nxdyGtup29GEt4ToTPVv9xK7aDY7L4NBjkHAOuI7QNsqOXlJwuKLBHwmv3wBiCQRExDoXuoXXI5y+\nE/ztsHcNuAaDEAfBMtRJQP9J1AVm1C9NSD/7BopegE2vYjI/TGaMi2POGMaU3EKXUsfw1zoRsqYR\nlWWGW8+npV1gzv0v4l9fQvPJnxP34ouIFsuPq2s/JH+nRt+PxQ967ygIwjnAz4DJP2S/3yuiHpzD\n4NUbwOgFRzZ4OuHjm2HhZah7f4umehdC+lX4ctNg3a307czFuiIPtBtwFXtxL1uGIEkYhmXhSDoM\nIQGEPaiuLuQ52bSnRiDq84gpayRP8wn6ip/ScKKWaJONcK4dNbkL7+WpGM0W9DVtiK6DENwPk86F\n+EmwYyNsfgxBmkJSTh/SqHmEfnITmt4PkQ+spsm5GnnMPLrOlehK85LUpCNh54tYhEZs7zURm5OI\n+aZJCB9HQ8p6iJkABXdSM2sK44++iabpQ2gCzfjZhDgBCQ9TP7Ucy8dbGbu6Aa3bREuaRG1PPUkx\nN5Gl+ZCkgI+OlBfwRkmYrZmw8TQsGgN7voA54+H0g9AoosRMgE9vgroT4GxGXTgV7BfA71diuuJ1\nusVqFrkzcay5Fc9VU0mJuoeSDTcQXWIgcc5t+LNHEGpeijevkJgTXQhsQTdeS80V8WjabyDJFcZw\nK4Rjo9GEDfj89Qj17aiyFXH4SLKbq6iYcAF+8TRtOeWUJTcj6fvJaDeAqQdqRqHq2hDfXYNTJ+LM\n9EG8FmxOiM4j2HEQS3UvZPeh6RiE0FOOx2em0ZCFv7aW5KxYUHvA8xLkGSF4kIDGRUNWBiM/3A/i\nPZA1CZJ1A4ZXqUBIGAU734ZgJBAE2yJIkVGL3oI7RMj7Arx65GeS0ZwsBfE2UKugoxzh9H4KXt7H\nrllGWg7UkdQhIjS1oPZ9DX0eVLuFpgg3Q+ZYUW4uQvZ4CZSVYRw16kdWtB+Q/4M75Sb4i9rmSd/9\n7C8QBGEY8BowV1XVnv+uwVWrVv3x87Rp05g2bdr3MMzvAVWF4t2w6UP4+XXQWAT7ygbO/lLHQdoY\nwr1pBD8vxTD9efxdubBmPb6mTog/H4cvHumyOSROfgPhD37Op99DPbEV+rbiPZaAe9U9xB3djBi3\nEnXyIPQkovSUorrTMIQHQ30E2N9HM+I2emMz6EmLJ2F9JXhyYdw7A2PUPwVyEOHMLoxzH8KVoSei\nZRPYrsBpaka3/QPEfVWoaiI9CSmEJq6gw7EP591biVipw5DeDIlfg3gBRGVCynxUVCyuJ8nYfgrK\n3oaR8xFCAcJqkJL9lxNd14592Ug0Ce9C8TqSdj1D9BttdMdV07PEQZS7j2hPKieHZlDQ54BZ+wc8\nE6K0kH4AnOej9lUhSxUEY6vRdrsQ3Dosn++FGT+FUQvh3Rs4c9ESzomdhZA6F1XjJ9sV4EhvE4eW\njyS65g7cfclEaNoQI3ZBWy9qWiSGzEOkHrqDTv8+Wn5hIyYwA0OdCSm+FSryMGzppPvKHDQtpzF7\nohDbgpSE20gptjGytROtphP1SASk9ELnVwhdkQiDMuGyx+HIi9D0FVhTUFPG4O1yEdG6n7BDQj7Z\nh7FhEGSGIKIXfXQS1u5K+LwTumUQu1AtULJoCHnbGhHPvRrS74QDN8DEDWBKADk0UDhg21vQsgUi\nlkDZTpj9DIxNAPfjUGSG3XrE7KkIs8+Hvc9AUvZ3aQG6YfZlxHGCQzcPJtF4C8KeF1DnXU8w/BSl\nvWZSDzVjyL4Wss/5qyXfhwsbf50f48dg+/btbN++/ftv+CxzifunvS8EQZCAMmAG0AIcBJarqlr6\nZzIpQBFw6X85X/5b7Z1d3hd/TkMpvHEV2DrBWQG9y6CtCHIXo864Cc+21/B+9SLGYwqaGxegBvvQ\nNjURXLWBU6aPSHvnXSIODEfzuzfR/mGhf5lLUO5C1cjoBBMknD8Qan3iJQLDzkWzvYqAtRtljw7b\nA8cHLhsj34bkbBheDoB67WCE2YmwqAjav4YPLoTTQVALUHL7qJ3pIuNjNwgRUHA1WARwnQKHk/DG\nb/Gva0DKsyFf2Y+aIdOelotJvIvY519EvGsbCCJN/veQ/ZtIqRwHT9wACxZDRyslPwmQ6rkCy4hr\nIHgM3K+B8xX4ZQbsqEXd0YLPvwTTTgHSgmBJg8+tcOmv4cQD4NwPFgdq5zGCg4cTNuxH2zueQKSG\nfr8fW2cu2lA6YtZygru/RFn3CPrbH0SNisOr3oeuNkBYUKmzW8k4WYXgz0QabiZsMGF8bzfC9OdQ\nys4gfLkav9EHAQEcGkIZVqTUdtQzOtqujcBxSI87yk/kmX6QU9EfKUPInYIwrInyXCe5kg2EWbD/\nAYQP+qFFTygrF22KBkxHQALVpYXKIKo1icDiNvhcRd8RwJ+SgTGnHGHGZnBOhlfHQE8jskahYXIW\nUqiTZDkEfSLoM2DqarClDCRdEsSBOw1VhdW/hCMfgnc4hHZAXRqcE0a1elGPdyPkTkAoroL0bnCN\nBt0+MM2nfNVtdGjayWIYJZ2/Z3pnAQz+CdRuR921CoxuhFEvwKfXD/Sz8Fn48huCZYdpTbWSct1b\nYHf8ODr33/C9eV8c/gdlR/9t74v/yfvsf8s/faKvqqoMXA9sAkqAj1RVLRUEYaUgCFd/J3YfEAn8\nThCEY4IgHPxn+/3B2fnSwIWYpw7PxHQwLYGq78rK1xcjxGZjPW8BMc88g2nNPkztZkxTUtCev4jO\nmt/STxtRulyk2BzqtiwltOECeCMf3BVI0zejTHsT2aSial9B7X+E/nwL4t6PkeUWTPI0rCMEqF0G\nfZ0gPwhVlfDgeVB2gq7WSGQhQNhXjrpjGarfi1oZhsqjiAdLUfV6sCuw9DFY/CuYfQ8sfR/VOhrX\npg76xo1Dl+TF0hjG2KkS2dFJsPQeDl8pUSd/hSq3orpfJMr+AuiS4LwVcGw7fsVD0OfD3N47YDj0\nI0GTDp61cOVH4NAjn7gbSZoC5+4E2xDw+wYCFOp2gaUQYm+AzmjQX4i2tgohHIvG+Qxm8V5ko4NA\n8n769W/BPT8lGH4andONuv4mwryI5EpDWN9CcUw2Ufqn6ZIH4R0xnH53GZ2UobrC9LGd1tl76R+X\nRvMV51O3aiu78u+lMZQKp0T6z9cRW95LR8Ekeof/DItzDpYLP0FQ7Gj2bUJaexq9YsTnWYJgvAoh\nNAKuXwI5IULd9aif7YFSI3j9UOZFXnUhoYf7EEZeiibRjCsrno6aerwWO3JdMegMcMNJlNxJlM5K\npCVOILG8AQ77kYtbaPwqgvaN+/Fs/gD1m7sGQvsrz8C1F4IvDp6qgpc/h4s+gCtvhNhk1KY+whEy\nQrQLLlgOtXro9YC7n1D1SYwP3M7Ezx4mVk3B3NlMTXoMdByBfTMQ7OkIvlhY9wTUytCQAs89DE21\nNGba2HPTnL80yMEgeD0/jg7+q/jnqln/I95n/yv+E2b9P6Gq8PUDsPEhmHYzCDaKF9vI/VZCW7sT\nHB1wyguONIjUw8ghMPRX8N7jeDPtKPJD6Koz0Uy7DmnDAyhZefgeL0KaG0RPANUk4PnpHIz9lYhi\n70Dli3Ijqmc2gmcvQqIWTsfBwokQdRO8vhwuiIEiL2zZCqqdBn8B4rChRIZ+j6HEjTonDrGoi/Y7\nh+CU7dSMySZDWYVw6ANoPg5zH4OIZLad6mCKs4NPwi+y7PhGhDOR9M91Iui8GHucqKZUapMzaDEW\n0S3NZoHmuoH5KNkMTy2iYngO5T8fy9xP25Cm3QGZE0EJQG02RF4Cm47gnxRAdyoOcdAKEN+FM90Q\nPw3274crPgFPBRweBWhgwklkz6+RyIXoO6gS7iKRcwixH6HDS+jGD7BF5iKadAiCD79pP8pQEGyL\nMejS2Gc4wwSPDsWxHrYZUOONuPN8tA1ORpFDuJqj+NRzOV32II+ufoDfTb6KpJhm8tNKMbmSKXgz\nDsY1gL4S3mtETvHRP1mHaVeAtll5mCeMxPj1TjT2NsSdHjoCsWh1Hux1MmKKH/WYRPjhwQiZl6Ie\nfBPFMonQwx9w6pE80vtS0bQfQDpjwZuVQKe+n7apJnK2VJNS3YYw+VboOIr7y32c/FhCp3GRe+0K\nzFWdkJAMt62CKAcoXtA4UFEROqsIvzOPYL9Kd5STpDnPwivnQocfdvWjpkBQMKB9dSpi4r3Q7EXe\nvoqvLx7JrNNvYPjcCnUREGqHwtth7DmQ7IO61TDq93wrbSZMiHM5b0AXenvghhXwxlrQ6388nfyO\n722n/DcjJv6G7NC/3ikLgjAeeEBV1Xnfvf8SUP+Z3fJZdppyFuJuh0HTYeqNYHFCwEdGxUb8B36N\ndvkNULMf9Ifhls+g7A3Yvx518yJ6khRs679BI4dgdifyNj3eBhFJHyRQkES4XCZmXjmYtVj93/Ob\nngAAIABJREFUReAJgcsOCQ8ij38Y6ZvPEISLwdAFcSVwYB+IVljwa3BEw9wDoKlA/bAeNXyU3pd3\nEzPWBJkiosUHP9fSbU3hw7ybWSAeJkAQQ+Ht0FMH39yFmjSaDzS/wBWpI96azqmUfBJTJyEairCe\nyIXUCoTcd0j3/I5uOQ+9voW2vq3EelJg1xcwcioNGV5qNSJisBd2vASeZoj+DBw3ge8N1HlXoWhX\nI1Z0Q2glFL4PB34DC9ZD7nkgaeHgzRA1BjXjHvymj1BNNkTvCQxN10GiEQNzMbjG4Iu2UzmvktTh\nTdhj30e4YhHakBYhR494ogoueoxuaxHhY18j6HJQ8k8jW31YTlyJ6ZkaglecQ9qet8idtQPdy2vp\nyZ/AA95PqGtPprQyEd38c6HpU/DshUd7IU9Fskyj70QtpsUhNKXt2O87hODIpD+6j9D5Is+lrmTV\nh48Q7jajyYlFyQHNb0Q49wSKvwmXcgBdpsCwz0o5/vN4Rp/2Uzo7gcNDUygIqwzf0kDsATfoQnBy\nDUz+OdasOgpusRPyRtHyyocEHckkvX43Nv1JqH4OgjJKzluEpAp0/TrUaivHn0/CvjFE0qlv4eKZ\nIC5BnngNwpYedF4/wuM18Ew+VDyGJBxnSnU1wvZ0mPMoGK6HzQb4xf0QboPyudDWAkIAq9xLimIG\nLeBxw7I5EJdwVhjk75V/zgr+b73P/sXD+f8BW+zA8wc0WjwVL9BfmIK5ex9i1uWwcy+8tgJiVGSh\njb6+PuxfNiDJIUAisCkBYVIROidoTXm0TllEzL2P4VtgQD8iDmFnJ4JDB6kPQbtCc1sKwfNC6J/a\nT+IeE2KkGwoiofYIDGmH3W+iRowg3CYj5epI0ASpqwZpiAUhSwdZHSimRNJ2F7E3fxEeAkzlOTxk\noncoSBeOI6qkmCs2n8t7ukd5QPqcdcMWsig4EwwVSI2TYetWyD+N2rwOk2BnRMZbNJb+hrqeBpIa\njtCfZ0AckozxmAS9YTC3wZYbYPSVMGkp+J9H8b2FqNHAgryB6LY9m2HCYih+HyYdgoaN4BgL+Vcj\nND6OPuI+fOqvCOmbCMW24nSfJFjRhCY4j2Pjp6Gbuxzdaz8jcMVqjFkRSLZueLcVUrvhywwKtOkE\n9H0YFBdhpwbDp07kwy/RcdHVmLK/JtjTReTj78HkCIyONoT8bDK7QyT7ogkc+AxEC4JnDOi3gHMM\nbNlF3Ixh+LfUES6wUrNcIKaohoA9ArO3jTs2/pZjg28nrfMDonoEpKh4hHnDYP2XeO0GNOd7saUN\nISTUUrC6hRPnjyGjvpVq1QDtPmJ2HoGoCBAd0FoLZQchOh9jRiHGmDmYl2/AV/Yk7e8upKFGT/wN\nT+PI3oB85hb8+dHo3Ith2Fy6JCsbs0NU2QZxoS6AN7KQVudyYsPtyMk6wifNhL99nsmpZQw2SkQY\n34VbZ4Pig29UcE4CVYbmS8AQCSmDoCsat2UBVv0jA+u+vx/iE2HFNT+CEv6L+TvfMdv3Dzw/NP8x\nyv8dih/qHgRBAusY8KTQ0ng3iilE2rMbwSgD74PZAX07CCRpKP5JJIxMJa6yF7s9F1PvUEIbfo9h\nOwiTgcQ60kLD8P8sFjXopviMnWERLQiNOaD2wr77SRk+gg05Y6m6JZnrL34SmkVYWghDp6MMm447\nw44SLsZWoUOcOAR53x70Dh+BpmaMSYDRihgyozspcJEQz2lMZBCFTbmIe9RjjJbiyR+ykrxBML5v\nD2rfQsJu+EjZysJQHTb3ZjQJKhxdyJmRnxMMNyCdvITUfeV0a6LYc88c9O2nyfu2kUD6SATZAglN\nqJYLYdc6hPYumDGTsGYP2lAM+PdBRC58fhIunATCDNBZ4NslcFkL6GwgewlWHcf8dh3qlY/QYH6a\ngGAixfcJfsduoiqsJFd60bdL9DfvgCk2qNfDRdNAnw6ez7HHtyOZZVSLDnHbTEINMs/feBVLGzYi\n73YRdSoNITMKdcpMKGmC9I+h4gk0g1PwBu5HGNcLtR64VA8bqyEMGOoIDtLhijDTmWckNfFdzK8t\ngR1uxEITYUspFbeuJOL6V5EKjkFPMb7cwYhFfWiW90JMBBohjJSoY8i3Z+gsNHJOdTf69lH4zOto\nmDOfrOO9SOMegG13QNwvYdLNqLuWIdZ9jMkO6SMl5F+8T0tRE56NO4ktdOHLjaYifzA1+Q20kI+2\nqZ9wtIymuQW57X7yw3UYmrxoTXo0Qx1I+xqxnTgKLi9Il8P8O8D4LdgKIZCFqnQgCFowa6D/IJhX\n4THEYxG+C5J66E64/0nI+D8Y7fd3rOC0yQPPH/j1839T7B/yPvsehvN/GxV1IKfs/0TvCQiawP0x\nSu9G2rJmoyQvJlFdgdr4UwLHvkW36FnQGjk11k2K6yPS7C9jbLgMzWAvYtwxeryV1GYMw26chEmK\nx3n0baS8IuQaG8YuI8PaT6IEJHom+7AceRm9QYSkC5keeSMTHjmPdx66jJ8WncJaeRxy25FP3I7F\nbEfyGlH/H3vnGSVXmaTp55r0mVWZleWNyvuSSkLeeyEHQggJD4LGN940TWOaxjQIaHwDwqgxLZyE\nHBLy3nuppJKpKpX3PjMrfd5794dmdvbszuxwztIMs83zJ//EyXPPzS/ejBMRX0TFWZQLGtgSiF6o\n4j4oYursg4gErdWIiXnMiUwiLJdzKvwNUz7J5Ca1gGfvfopEwcxUvZ1A+71oz+iZf/wC+5ZNIHSm\nmeDuvUgDQmg7HKR/PBOpz0xIikeSQ0RNrcPuySb5yCkcp12Eh98KRzeAOBieeA115DyEvRvg7Q6U\nuwvQW6eB9AkEmiFnFBz8BK75ED7vB5IPqi+D3FXU24tI/eYqiL0UIX00knKWkDsJw982Er73cTZn\nZ3LPuY0IyruYlu8hYhcQfUbEpEtAO4OmejDXKJwYPICB9VVImYepj41mhkcmff4H+LfMQJx5NQQi\nCK1LIF6EU9eBsh2xPRY1w4920IUQL4GlCHK78EyxY/Q0YKsRiXJWEvHOQHnvTqTWGrQBM9DaT9I4\nbCBXbTnFwRtmM+LEarRgM51rmkh56wMCuvvg6xqEPAPKjD/Q9eYz9KY5STq0HbnqOF6niUjUTrwe\nN7YLGQglv4XPPoDw6whGN6RMQuj3KAQ/Ro7LIu3hq9EOHCFUtY6WK0TSbrSTOv9uIhGNhG8noRkt\n6As34XVfj7suncS20whpk6DQD1XnIRgH9qGQOQD66uDwJtAXgFAB3/4dzdqJmvkXpIM+MA5BzWlH\nQoIfVkFByf+fggz/ryp4GMgRBCGdi91n1wD/zrzWH88/ZaFPpR0f9wNGDFyHjmn/vqGmwcG5RHp3\nUT5lLDE+O2k1bWh1vQh6I6GGetTKPkJ3/JVQThGxrc/Q3JWH7+A6skrmITTWEi7q4GhCBpfYX6BX\nqMYxfzJdQ60YM13U5KeR8WWE9ofGkxD/PHtaFjF410GSmvcjzN8Ht43Cf//7fDkrhZHhHIrczdD6\nLbiOop04BkdUSAVhgIQWUqh53UDW/Ubw+qE2BP1l0EyEcuaxviiTaQc+xXiki44nGlknljNBvZ2k\nGj2aI8yFLbfQN34TtreaSBl+BrHYSpRvFAQzobMTjDFoq5ZS/vBMinatAC1MoM9KbWEKee525Cob\nLNyLZm9H8Q5FbRUJawLm7ucRCmvhyAZIeB/q98OQObB+CKRaod89VMccRNlcS05aHX1Jr7IyKYla\nczd3NuSQsOEg3tufoPXIH8ju84JqRPn6KxhgQmwMIsR3QsCCgh/Nr+AyW3C4PKwdeydxuRojQ1WE\n8RCp8GFqPQMlk6FrJ9gtkDCWcFMFlYMj6AiQMr0F8wANphrhvAjXL4ftfwDi0cb2J2z5CPZ40HVm\noHn7YOCdvDduOPe2W+nZ9xDyDhc6Ry1S4Z3oWurw3evG9EEVQmIifnM9fRXROBJH4fdvRzfoUozl\nywlkh1E9EQx+DUkygb8PlEy44SRIlovn8Pg6OPICLFgGXevQmhbhLrYjn0lAV5xMV+Aoxl21RDk9\nCM1WAvRHt/UIUjCCYFDQTDKK3YSQtwC5bQWkXwvZEkROQkwqWM6jqSUEzn5GzfPxFEwSEX2dbF14\nHZOTXoKH74K/rQD5lxXD/WSFvvYfaRv/f22Je4t/a4l7+f/pmf4ZRRlApY0+rkAkBQO3IXMpgqb9\n273/5uOw5m4Ie6mfYaMpWSbGO4P8HXtQhzuhZT3Byjh0R87DsHuRHSq417J/8Gh6kiRmWj4DoC98\nBHPPKNxViUR9kIfYeQwt4KP1aSuORBtdidNQ9HrC5iyytftpC1fRt+ku0vYcQXIOQ1owC8V9mO+S\n00kSkxgdHED4hzfQHVhP+JJ05HFTkRrWQsBD3ct+Ur55HznwInwQRBtqQoj1QPIgNNdulIgJ+ZQB\nrnmRoD2AR/od37fPZYH9C3q35KKlujha35/RKftpdwymOvEeZq55HdFThz/KgcfSjq0vgNHnRfNC\nZcFgtgyfyfTe5WR2tCE23w6zX0bzv0so8iCEBmNYZoNZwJkL0D4MrnwP6tdB4z7IPQzeKHpOXKDN\naiQnW+W0YxLrDSlcrZtN1uqtcMl4KBl+8TdxHYWa12BLO1Rvg6QkKE5G2VmPILkQPSFqLymhLiGG\nun6DuMk8G2Jb6Ot8HUvzKQR+B51fQVQHiEkweBWsfY7AFf1obP0a12kbxdt70Wc4EecshgQDbPsz\n9HVDcC+aPR1KW1AtDsSeVPjTIRozc4nyOLA1n8VfFKLZnsDJawcxaO05UqY3o7d+RLD3fXTndqKt\n1NClFRGZ+wiurueJOhyHNKAMIRJA00CMBaVRj7gtBR75DC0bBGkMQsgPfygFcyvaqFzU6B46Rgwg\nRlyCLliOt/4d/PZN2Gp8yKqCmFBC4N1eImP0WLdcoPKudJJjh2Opn4yQuBqhFkishPh+0H0apE+J\n+N7j/KMNZL4RiynhQ1h/H91SBc4LC+Dy+VD8H8yG/i/kpxJltevH2YrOn2dK3D+tKANouAE9QT4m\nwl6MvuuR962E0vshrhT62lBXzaU3tRfbWfjk1uHM+l4klVT4+jm0sSkIgSYiPQnIMaMQFhbRsOEQ\n5XNnELvDTfbO94h0qfimmfGOsBGzuQf5C5UYcxvCzRo/hCZimgNjffs5XzeV4pHfIXRvR+vaglL5\nMaKmIGY/CHlPoUky29UjFC+6h7ja89TebENfdBUpnRkIzR+BX6RnWy8kOXBMLgfLQ/jS2jBXRcA5\nisiFZxHbLYiOCeBuxjtiP7pyPefzEmkwJZPT14kS7+P4yXys2SbiXAo5Z44Q29FIwJJMU6xMQ34a\nyc024s6ew9FQiyepgFOXv8SoE3NRHInIuxNhwiIYMJGAbyRyKBnRV49QBcKpCxAJwuT7oHYtDM4H\netA2tnPBmoYwdxFbgx8zu/Uw0V/VohVfifVQL7zwFfjOQPUiwAyFL4E7BDcnw12PgD2MtuZvBIv9\nNC+Ip6M8jXCXjoH5rVj2FSJIsfjj1mCs7kYYcxjU7bDzBTjrgWkj0UIHwJCDFgwQqWiBnAzE3fVo\nV+oRPBnIWhQkT4NeL5zaevEmXlcXWqAXkguosgQIOZMouvwVGvc/QPK3O9l512jCiToKtVpij8Vx\nZLDIGN9hxG0OCKTDE4cILB+CGDiFLqxBSEVLthB2xiJZa9H8IkQk1NIwQlcUkv8ewuoIjJ9ei1bq\np3XUUMLxdcj6YUhqgFCbnUT/alziEKzN5/BnX4JQV46rv0jqKheB2ZlEbJlozbux6YsRjU8hHLwW\nLdaCYFZR7F9RccdtpL+2GmNeG1rke9S1p5BatuO7cwsW/fgfl+77mfmpRPl/H3n9H6GL/lWUf1Y0\n3AR4C7VrLcb1h5HGb4LuA1C7AsIpkD2HlemnMNaeY/o6E6r9EMrMgQjlFsJdrRjX7aN70FAWmV+m\nJ8bNYtfrqMNP4k7XUWYdz2DDVDpaPyLr5iOopRCcJRIwxUFpOnbXGYReH0LZQBizEBJuQBU6Ed4q\nRdCMMHo45D4KXifVjZvY7exk/qcfoilxGLRaPh76CLMLEkhyf0LjW5WkfzgTHMvx8xsMvqcRGp7G\nQzW2E31o6UaUukoiY/xUuHKxJwnYTo/EX7wNLUpl69pC3FPS+O2hFkKWAN1UEWpQ6ImOImFzD44M\nN53GdFICZxHGf4dQcjn4q6F1LZx7HMJPwcyHiQQO0qfuJEq0ox17E+msFwrcUDnoYmH0uvVw4Fm8\nne/z7ZTHiCaVWeFSDKvuozHOhVObhOlkBcy0g94J6Q/Btrtg6tKLs0KuzYXJGVCmwejhqLPn0hpY\nyGHjyyTUrGJI0wrkqgiK3YHqciEfV/E8shBLdzlCxIzY0gGNXhrGhbB5vJybVELHeisDT54nOb2J\ntrg4tBqZ9jQ7tbMHMWhVDXFNzZiH3YpQPBc8q6BmMT2Fn7LC2c0t/u/wVe7Bd0gldlcrzElFaKuj\nPSGOxuJUBtQno9uzDiKJkGpCVdvp1st05xWQt6MeFt4LMaMIR+XQ98k8sIrYWsuR3DGgRnE2W+To\n4HyuPL0GS6MZ3/QojMltCJaPYNsmenKOYN9QRdWM+aiGE6R0CrgSbCTpIoi6RGgeg7L9dwiXmfGI\nMrqDBvRxIYTTYS58H0vyXXdiyxsIhTNRgy8QaA/Td/oI2uTh6PTZxHD9z+6T/xk/lSgHvD/O1mj5\ndR3Uz4KGgoaGSBQmniZkvwbv9FuRq69C6TYj+vqwpGvQu5HL3t3JhodGE5qiJ5R/LYG2r1GEEIkM\no/Kysbga/SyvLubJ0mjE6+NpaP4tDv85xop5iIYk/P45KMIJxJkRxGVgi9ehNTXgnRjC1CEj7Q8j\nzLsD9AYU7QBCbiry0UrwDITew9BzkKxAhLjT+/HN6UdMrxFlbYAxa9fypPGPZMc/z/Xe69EEDUGU\niPSF6f5qG7HTwNDaQmCoiJTwewIDHkVe4ScvoxHjEhFhwnlc0WlU7FIxxaXSYLXjy4jFunM1ySfc\nuIMBfBk2QgMtiBPeJS0ugfC7c9H51oM6G977FIwmiLsVHGvRjnloTvgCk8uKuCMfNXoQWnkjwvAg\nFF0FuzcRevJ6GqPdBK9zMvCr3fSPTUByfQRCEFe+QOKyN9BynAju4SAGwfUMuNbCrrlQ+HuIVmBf\nExX35yGnXsByeAHWUISRhkVsT8vCPG4cGSWV9MU6Mdecp+9aC8ZgK9bGOtTUEoRVzQjZXtLKJLxT\nxhPnPUOsw0hKXQOt3Trq80ejXZrJ0Ldfp7YgnRXzS8huMCEr2xB8+xGMVuSicVi9T9JomsORcDwJ\nRieppjKEYgXq6giJOiLeKBLbB9LdcpiY0Xp03QG4fAuilIzz4X50Dwjiz/NhMvaH1s/ROT7BMXEJ\nfY9N4ewbE0i0X45z2U6K2s9wSrBQk5ZOdnUA06k6WOmArHVETDswuHoQo4KkyQ2oxkyUfnbsvS0o\nLW2ISf0hcQdidhJCXxfRPjuhEUl0xZnofm0fcVPasR56EcZXgL8ZwfgEBue1mJQInbp42nkbG1PQ\nkfCfudN/S4KG/3Mj/b9P6B/6HP/KP60oq4RpYyN1/B0Hg4jgA0CWzDj7hmHwiagFtQjOEahlXsQd\nPmSxhEsKXuKYXMFQbRBe3wW04nJ6Eh14PcU8tnghKybMJL8ti85vO7FVthB13AdDyhHue4CE819w\n4ZZkYsVeTLdZCPW4EQN+DBuTUaeYUcxu5JbjSO4QQpGMaqhBM+vw1H5IyNEfe3MNktmOLTEZk+k0\nQtabyJlPUNJyMx8NCXOyZgm+ghi+35zLqCugb1kVvRsPEX1VO6aziSjWuUQOPoCh24ThgvVij+xt\nXhCO09tbRPrX5WQX1DDtBxDUHrT+hRy4bRbujGFMe/wvqM42GnzHyQinEXEXItv6wdpHEbZuh+JL\n0IqnoaX3EqIOmyuM0eVCZQsCQSiS4VMFnK8RGfsIm8V6WotGMqPlS+I+L8NvFzANzURaeB8B3Tv0\nBmOJHfpXSJ97seDacwoatwNZsP9ZGOAEn4ecziiE5u2obT66F15PvPVvWI7ei1yei8lWiW3jMOo6\nFc7eNouJeh+RpJOEEurgLh+m0yZEfTEWOY/Msyrqjp0E0pJIPtpErHsd+oKn4I7VXLr+BdRAPEZL\nC1T1EvYEkLQwkX45KPohhOvW4PA3kdjSiuhSUAMgntRw3WIjwViCHNCjxbTS509E90MdHBgBC+5G\nmBZLnmxGi/NC2WIQzkD8flj5LRY5i+zUv3BKdwOdtw+ioP5D5n59C5G4HpY/9AJX77sPHWNp8IcJ\nldoJNaRhmDOX7Ki70bQglZHHyDDeTmPyl2TVHELrLgdjO+h0CPZe9NGv4f7dBkyXlmMaqqG0yUgW\nG8K5PyEgIua+gDpoHtGN0QTSRiJh+690138oivTLGhP3TyvKHioI0YOdgSQFJxF1rhbaTkGoHOxm\nGL8dQ7CXyO5CNG8AgjHgaCX59GpOZfsIeo34etqwVwbRX7KAF76byFu37SSls5otTYkMWe8i7rsO\nlAhIpjPwdCnaoFYykwQabFmEC3rQexTERxRkfR1iEailZiKvzkDU9SKW2JFdESJeHX5Rh7KjkpPX\nvEFJ6iwMFbNRXHaEc08jbJHQ0szokj5hqE7FO6IAuXYt96wfxd0/VKM/4cdvuxJz23KE7u2oI2Iw\nSY/DU9fDmqsheQFK82qiX9yDrS3I6YHDGfDkIvxGM6vkXWR6DQzf/yaCtQbJNoCMlKlooWWEYiP4\nCncR3VWB8o4BwbYNVu9AMQ9BTU9GMc/AcD4bsSATrX8ywb2rMFR9SqjOz77YDWQOy8MgHiXOPB3d\n+62w6QRYDlEduoVjiRnkyxVQ88TFK8DZd0DMAEiYA4dXQn0d9GaBoxgxpwRcmUQmTUC2NkB3C1PX\n7MEddiPe/Qiq5W36xTi5wn4LJaLMO/4WbGvLUPOTCA2PRjQWoj/ThigdggoV8YkP8HXegqmnB9Y/\nDclpmH0SfHASbaEI3QpypxlNdaE7c4SIsYK4vAxqEtJIPdaMgA5BVUFWiFvngax1EBOHEBWPTTwL\nl0VDnALplWDvhaSnET4rg7H1kPo0fHk7eIwI46dhPt7IoGHf0yPsxpXuxz40G31PGgv+/BrCmAiV\nRTXslGdzS+s2vKZLUey/AaIQgDjpPrwGkBhCKNIf3SevwbhsBOUQniYz7fvWED1sKvEFbfS2N2Me\n9SHC/ush4xY4cRMCGmLm89DwNNG8ipuN2Jn7X+u0/yCUX9jszn9aUY6mmGj+ZQ+ZAbBH4MhdYAuA\nxw4bNkHPMGTjYOiqgAAw5zeQOJ5hvZXUn36ewq0H6C1M4uyzr/CZ504su9tRDRJ5hREi9SpCoh3p\nt8MRZryOGmxB2DaRiP1legqPc8biZUCwjqRr6xECLrSdGsJEPzrVh+KUOVFQSuHmHszlZcRLbQh+\nHcmhp2DK2xClo6//NRiOf4NJUdH2fYe29zSSxYIh3UDeePhbwt+oPRfm05R7if9MY1Z1FtmZ1Zgu\nZNAwdBORyDGMU4JYWv9CJDqMeo2KO2kc+9JvJQaZ3WxkIuMxiDcjZN4GhdVw6WOgtKKqZ4jkuxCF\nZJQhz6HfvwghJxqkKPj4B/xPpOOQJMj/AiU6Ba/OTHCUhEE/H3HwfYz+60uEDm5DuW4kOrMe9i+B\n3IHQ5sRbvZRSUwBLfA/0dENeAFXoQ8QGkQgEQhcvOKgW2LADovfC+KtQogxIfgs8MQiDvh1niwFh\nWTWRS33o6gZyvyGR75v20tlbjj1jMHJzH5y2Q8gNWafhlAi5EXxHX0A//04EKQSffQITJVDjIN4D\nHg9MUNE6bkdImQsn/oju7EZiolRyvj+JziCD4Ee0ZNMX8WGq6kSclICWFItgaEQT8qHBBosPwaKF\nkPtXBFMSamAJws4WvKbf02Z0EHnicbJ3fIe8+Fr0sS+SkHXrxXPquxfGv0+X+08YG9qREnqZ6dqM\nrMUSdegC2I/AwOkAOBgMmoZ+8xo69YtJnLzwYsrH0U3dA00EuzeSMGYW6pk+pIXv0yIfIaX0Fdg8\nAhQHhLoRXCB4QlhqNtDcL4Rd+v9TlCO/MFH+tdD3r1QsgdNvwIBHofpb2PYDlBZAKdAqQ3M7yLkQ\nToLaMhpjvZAQTZzuCgxD74aEFLTVn6B9/gjEOXHll6K0l+HsakUwx0OREdR28PrR9CG88VHowx50\nATN0pqMNbEUo7IBqAcEk484xsCF6ItOOH8a+U4WiB/D07kZoPYDFG0vE3YFvXBI25kD9JpTCE4gx\nOjjjRBBCqBvDeC6EIVviWM6lnOxI5va6jzFjg+JiuhOr0WQ/Zqsb1WHErIXpnX4lyw1W+rByPSno\n+AGVbux1l6PrcyBkXgKBo6Dto+9BEesX/7I/r3M/Ws3naM5J8PXTeB4MYT7pRDh5Bi2QjWJ3IZTO\nwtASgpkfo6Fx/MA9DPzsHKLlPMyLg95zaFUhDgyegdURJO2HcwStJuK2BgjN6o9x7P2w92kY9wpU\nbIPsyeD3w7JnIaUWX4YTrT2M5VgHWtpklNqViMEi1Fu9iMbLYWUXnVU7OHBNKbMqdqEV3YM2fDBi\nwwfwQz3KzBkEN67kzPedFGwZjl6eidoWhfHPHyClzoFH/4S263nQPw+ddgQtEdXVg6e9g16Hg9Sq\nLKSuJgg2Qb6KVqgnrBeQ3SA0iQjBSWhd+8HuhZ0htJvj0I74icgCfklEsKgcmT4YX76VIWo+sWsr\n0f1wGm40QsFDhDJvRNw8k1WTXqCz7RgDIruQ9c1EemVGMQPyHoR9X8O4GwFQQn1IrzyKljeAqvnn\nyHykHCltH94DKbTXW4kZOJLgkiWYFi7EePPNeLsfw95wFKGvBOKOQsmzINSgnT6I1hrBM6YI05AX\n0Bv6//y++R/wUxX6GjXnj7JNFbp+7b74WWneDonjQPyXf83dr4HfDe3L4EQcPP4gHH1Qoe+lAAAg\nAElEQVQezlQDerxOO7um9WdG+3C0ujbU7T6wWBFvOYLgsMDmYlxVR7HW70KKy4K0FsgZA31lEA5B\nVwifM4DJFYTEYoQuBU07D6kC4ephyPkhOkvC6IQGoteZEK1OuvolEVh1GkdFL8YsM+EoL4LRhCqE\nCU43IeVMwtK7AKH5A3BMpvydv5Lma8HcqaDsBjUk0TRvNukxPoTW3Sga1I5LheJB5Oot9FkqOBNv\nJMn6HImiATePoRLAevAYgdKZRIuPIfd+C3KAvgfcWD7/CFXdjhr+HvHQVsQjrSjNJjRTEnLSCLzj\nk/EXqsSKf0RARNP8BIQ1tCr1hMv2kPv9IYQz3TDbgRZop0vuh+n63TTU30T+i+domGwkEKORuduK\nzl4OBdeiDP8tfocT03e/R7pm5cWRoXt/S6htGdrgNzB4gJYDaH/9KwzU0JJA6W9GfsqHOjQapZ+f\nPaapjD98FimrGrXNQeTqm4hcohI+kEbT+38h77lBSFnfovoUuvbOJXbxBcRPT4HJhPbDRNDOoibe\ngdu/nqjTDVzoJ5FRq6Kv7YXBIy/ObD5bR8e8h9C+/gtx5iYQdISnx0OgE3l1EC0T6ktT6UvPJLo9\nQtyq07gGGBCHGYj7phk8MShDn0cZOhR9ahFvKjvpCzSRZnQyytWNp3kpYiREfncLfQWDael3Mxoq\nGhpan4sa1waMtjTSoyYRo57CGFyF47QRHj2O4OuDF78gHJOJqPQReP5xDJefRFVVhGFb0TW+B4Xz\nIftyWJoDLS1EJJnu224mPvq9n983/wN+KlGu0+J/lG260P5r98XPSvL/tnVh7KMXPxctg6he+O4t\nSBgNpROg8hCWeZ9ib7yRxv2fkrj6HNKDryFM+A0oJ+HwIti6hGhUtA4FotrBEISOgxA3Egb/GQIC\n6mfz6MhwYXUMw1zfgdCrgOxB6rIR7O3CeD6FYIyRvoxzaJluMHZhHuNGMCoEDH348oxIZ81E2yai\nN+YTaliM0HIQYm+AliVEWtwYB9mRhhYjTiojdMU1ZBxcSXjmZehYhO75p0n19SCu66BTdxprlouk\niTmk61RCphAmLsXELYixV2HZGwtFsaBVoAYlpFsPE/HciGiciXyyADZsQejvJ5iXiLltLO7fDCdC\nE7E8DoQJsouA8ANB1qP3Z9NvdxOC7IRrf4f2+mNokzQYaqbZ9yb+tIG0XxkgmC7SHa3SMUDBoExF\namtA7P4LJucs0vPGI5WvgJJ5YEpCiASRRA2Kr4fNexBCOrSDYQS/Bhk+sOkQ3Ua6Y3I5nT6QxOwg\nhesjiFIpusGvEVGvAucasl7vBdGAevha+l4vJ2ZsOpEhnej+nIGQnQOcAnOYyPFVWENReDz9MOxr\noHl+Bumm0whn6mBcEqQXYa99lkiyH7UDxEAY/cZ21MJSgrfmIJzbR3JtG1pCM6EEmch1KtGhAEKT\nEa1FQ8vpwj1qP76UFA5iphIfgwI+Osy1WL8vp2WCzOjTJwiXTscW9KMLRqMa+iH4/AiLn0S6Zhwm\nywD6acUIyx6GFBNC8eMw6zIw3AkN59EtfgRSs7G8uwRab6XbtIDQN69iPOlD1+9NjCO+QNJM4AU5\nqZSApQe1ZRGRSDehlMc4Ih4nCjuZZGEn5hfZy/xj+KXllH+NlP9vRCIwRgdTc2HczXB8JVhF1MEL\nEYffQ2BxCZvHpTD7000IASME9WiKimAG7EC/HJDSwLoHZldCdzds/BCcOSgrP0Y6eIRgoQmDmAZD\nZtFrbiaqDyKWbfTM0QimCpg6QNchYzqroCvRo4rp8M0hNEOE2rvTiX7OjeNECN3wWMJX65D7H0Tw\nNkDZBDqOuHAmZCLM2U3QtxDFHsRwQEAy3AbWHHz6BZCci+HzetShDpRVJ+huTCYpMQXX83as4otI\nZ8oQ9t+E1i8KcUovNA1H800l9PxG9OPHIXjaUTvXEVzTizyzEKGkDeGoEd/cMcgGM8HESkjJQK+b\ngoGZaLiQXGaEXe/BpU+BEsH/lxRCAT21Nw6hI9uLKFnIqc5BrliFsaWA7nEOOu0uhr0XRMwYDCeq\nYMIc6F0F130HoR60bRPAlIsw8kO4UAtfPARtHtS8DpTMDgSLk+baCbjOl1OY1MPx3HR2KNN4bOhc\nyBuET7mRszc0MeBlF4Ilm54nv8MapWIcNwra9qGanAhnolAdGkJyB0pQorF/Al2WGJKFHALb9hNl\nCBPXbYfIaUgTINuGUh5Fd1kYZ2w3eFNoeXk+JmEQvvpjRDd+ie2VJrQuYEQswlWPoBxdhtZxCs0S\nRk3Jo27Bg0RJN2JUTdzb8TV3xrxHP99rtFU8yTD2gL0/aI+AvAXiXoM/zoPcAti6GBxJRKZnI+4P\noz0Tj+jpD1/vQzgbhiHDYN5DaGeOwQ8fI2Tno83/HdX2V3H6O2g+vwulUubCvCcY9eoriM4gdTOd\ndNichC3XopMcVFOFAwclDKSQEuSfOcb7qSLls1r6j7ItFOp+jZT/y9n+MhQbgDEXV7pfMheaF9OS\nX0Vy93MYJmQz7EIDak8MWmoPoTg9h8b9gfFbX0e45D4Y88zF71FVEEXgGZiVjBrYQtesy7B2/RHT\n0Y9hwhegN+EXD9IhNJKrfUXC3tfRtnyCmu4jENuMrlxG/VSA7DCiL4IyOhFHX5DeB6/H0FmF9dBO\n5Gd0KGOvQb7jG7R+D2Nu/SOhYZkYjIkYOx6AWgt88gwcuQGy47EkRqMZOyDYiNiZSUiXzMaMeVxX\ndA5RNBBhNYq0BzFWQusfQFUexij0IGQ/QMTWiW7e0wgH74PK6UTqv8Yn61DnDMdoK0cQanH7JaKX\ntGFMLoF5EyEuHogHmwqXXRwJ6TnwCr7EKOJXt1J61xtURr6Ctr3ESIcxne1FOHSKmFvbSKaJwJyl\nmFdtgIJBF1NAZW0g3g/zFyFEQjDs7Yv77SZ8A0PGwqpvEGPjCLYPwD3wIOZPVxLzxBjkqBqGut0c\nGDiH9b7PmNqt4PadwjbOhE5+C/XQX7A5TejTvag9x4lYZNxpEIn2EkjWo+rjSYjtxmuyYPPnER++\ng/rXluJamklM8kdID4+B2GwoGI40/B1i13yKtnQRQk8rKRsLYfo1dMY56TV6KYr6gFCRDcOpTrR3\n/4CQXIoUnwb956P0gdhQRWKGFXxlTPTtIjP+PN7oNlINxXBkPzQcA8sKCJyB7hGQNRkuvQOyB6EM\nAfGJVxEfXYRW34za93sEkwltxJXQWol27HmUDD+BFzsQ/BXI7WtJshYTkveQ5feiT5pLf/EGsL0J\ndR4c7tG0xraTEioC0xDChNDxY3t8f7kovzAZ/DVS/l/RVPCthS4N1q1H2b8RKaEFxsZBQS6Ul4O+\nP0dHesjqHo29IgjfvYfiEQlP0ROJ6IjIArak2chVq2HQPTDupX/LU2sK9C6FrrdAjof45+DUGzD8\nSwCUyGfUs45Y6SVsQjZa4z7Ubb/BP6Ub03o/UtRYQo4zyEvdKO06fCOH0jqomrz8aZDyOKgaypuD\nkStSYNBUOnmdqBvvRy/dBsdfhAmfQncHrL4RsrdAogOSP4RvVsBtf+fvHU9SV+bgNxPKiZfeRqxv\nga8mo9z6OWK0E8H1BjSvgQ3jUO1WhGHpCFXH4fA5AnqRvsZmxE9ux1GdjLC+jPYhIitHiOR5fYza\nU40h/WEouBpqvoOUKSiahufzAYgZdxH1xz9C4Vjc04fB8AasVd/hX12M3piC7tV1F99f/SbwNgPp\nsPwtyLgEGpeBGgMlvTDnJNR8C321cGQbKFY6q/Uc7QkxKGkfsTktCLEgBE0QvgJlTH+WGHsY2LMb\nx9KTpI0oxNBcT+B8L6ImQrxMw7QsxN5eDAEfxsYg+v5BTDVJiLEutNMa4pCPwaQR3ngHzc0DML0y\nDccHjchlqxAyoiB4CZijoKUBLtTDe99CcjFBQUG39UZEpqJ2rkTpOkN9ci7ms2VEJblBjaIrcw5V\nExVG8xYGTHhqLqM8vYVQ7yBGf3AaSTsDBhMEx0HpeDD8FaaUgyCgqufRXr0CcfSrCH1fQ8dq/KmD\nIeUkGPyIjEFcvwPRMgAWfEwnCxEN6cSyjL6df8B88BskyQejzFAmQU8c2hWX0Jy0mkT3cKR6BRw3\noOVfhSY0IIrZP7u7/lSR8kkt70fZlgoVv0bK/3BCR0A3+KJQBapg9z2w/SREpxGcM5vKWdkU70tG\nmPodbJgGHd1g9tNtysVcvw5bSxrlD/+GwjdXYGzvwZ+gYusJ0WU9j9PWD8qXgqKAEoK8uZAxCRw3\ngf1GCJ+Gilq4UA0DmsGUjChdRXLgCdyR6RgMRxBTZAJXWjF8qUPVegjZ9yBF21EuWYCc0Y6tU6Fr\nj0DwveXIlnMIk2YQmTUIcdJQhO17kdZoyL3nofA+uPzvgAbCMhi+AwxF4I8G25XACgCUmHHM0r3D\nifaFTJdc8P7tMPkypFYdLH0PRq4GfQ+M66CzZR8trRlYhz9FeGQ9iU0vUtkyBsuJ8/zVmsnVXafI\nOVJO4YhBdFky2To8lanV9eg+SLwYRWbNp+nbWTi1OCw/nIKgCME6LFl2xMrvIf1Rguffx/Tm/7JV\nxxQPFxaDQYPC1eA+B7nxYFXgX2+bpc2F59PRajpoto5C2XCCxG9msDf2DS5/6RqEm0DTDUTQDUeq\n0XO18SSVnUGsxRb6klvRmd+k8+0HSLpZQ3LEkV1mgG3d4AvgfeB2vPmnMQXcqK2NiGMdcKEGVr2L\nziuQFjqB93flHC28hMiwUs7NGUrQORVUlREbljCwcgvnq57keNSteKx2To0fQ75sJic0miTfAIpe\n+jvigBxk8QxKQwB79GoUrZhNfMwY4Wqi/BYinSbqXS7GRYxwCTBxNRyoho8eg2dug84vUKOcqPuf\nR9JPRxgzG621Edf5OsLeGpxfxyMUjoWiIoS2Y2AX4E/ziEvrQDP34SsajqE8Cqakof7lKLRZUJM0\nImMlxPJlxDgFxHAZ5D+J1uImUFeArjUHMeFByJ75s7rvT8UvLaf8zyHKmgbeI+A9DL6TkPS7i4PR\n3d/B6hfgb/shKQ3GXgZXPIwaaqciZR/5i04iuBU4eR+KUktfag7R1n1M/q6cOvMoTmZ2UbRiM7rY\nMGhgaghxePJohmRF0OomQGQYWsNbiH4f1O+EAbfAkPvAvxS6L8Dj78FVbhB1AAiCBVn3HpryOuXK\nNPKFgZik91EHf8vhs3vwGnS0Lu/HzOjvcZa1w2g7lsmxyLVtCM3daNvKkFd3orzUgnDNR7R+NwZ7\n93rYWgC6v8OIrdBzDMLvQ8ZoqLkMFM//fEdDpSLijVWsqhrL9HeHwqgInK+H7n1QGg+WyajySlZY\nF4B/L/eULuYBg8KN7e9zPvtLBoq/R4eBwq5nCOZraDVWCj1W7E3T2ZL/OatK6xjR3Y+0ihS4PoOk\n3F50KTPhhhKIXg9tdYSjE9EzBCHjCYzmJYied6A3Gez9CcelIo56B0Xz05E7jA6nmQxtMJZNlyJr\nYxE8DWjfPo7qhq4GM36hhtRVGwgMyGa5sptxE/Jw2ENoLhPSqPtRVs1DSKrCURIg6FmLmvUHGp56\nDsalsDx9AAs6VyGEbZAoQns8lkF/RV/2EeK6hxHGyGhKGtq2jy4WuGY8iJjsQezYTODaPrK2iIzp\nPAKO5yASQKt5DOVKC/lNG1lTfBk55pMUKypD5IEM0s9FV7kbrAdAqIJILnJJMZYdX2KY7CE/ajNm\ntRfl/HGi7Wn0RPrTk+vGYTkPG76E/dXwzgH45ha0IS+hxIhI3ybAGy9DsIlI7XKEC1WoNzxIMPwG\nxp5jULEPYmLRZv+OUOgDQrGtyNVeBLUd3006JCUD45Q0pMZ+SDmXIm/bBk0CDFsASTeBaTShmFcJ\nqy0YT+bC0ZthwivQ/5aL5ynkAf1/j1uAv7Q+5X8OURYE0CVAqBlcm0EwQmcFNOyEZj+MtUNCH+Qc\nB30H1aVeUsKXIQ8BsvIhPRahciXCyVRYcoG2ySnU3CAxyvY1+lPjINQHVhAEHQlnO6FwKbhuA8vn\nqDV6hJKxCCOfgbgBcHolHLgLWmwghqDwKjDEAaCqZ1DpRSf6sCudiJ1l1JpP8pUzHe81Zm59ZD2T\npaWIE38LyVfjca9gS3Id449nEb9vO6FhYSzTrFBxgrD5JWLHGBFS/JBRALNuhM4dcLCUyK3X4mt7\nG7PjOuS250BnhHCAPMmL0OshcvZjKOq5GJleuxFEGSqfg+L30cqjmdf4OYzfxbhIHXHNtyDoZpLW\n/hHBrBy8ur2oXUai9cU0FnXht1mJ8ocY/mEH1FRCIJ1zo6OIf/IZOPk0MbpWqD4AWRa01iByczVi\neh5qfSGm3C6wuvEdvhmxvAlN1mFMuZu+vAw6iqNpZh+SZkAalEvBrqPw4mgutIgoZ2QiNy2guG03\nDBjJKZpoxcG5CQMp8fYQLYmEhLO4LrMRu7QfqtBJ7+AXiWodRF9VgMDjDSw48Xe8kWysEQHa3FBk\ng4cL0fldMCQEcS9CwRSY8OTFyXjdz4I8kOCoJbiF9wkPKSNyzot8+joibSepHZyKI6zHsEPmb/vH\ncLrkOXT2maAfeXFc7N8fBGc5CAVwxXLY8hSiqKfgqwtYZj+GfHQJviFuuhKNTFy2hSvmP8vOc4th\n7zuQ+3u02GTCMw1QK6M74Yd7v0TQ6aDsLiIHzyBPn0Pc6ZOEGsJ4BlUiRQ/F4lZQPK8jeCrQxV6G\n/oe9iOUyptRYfA8NxDPrLI57yxAeXgmlJ+GTbHhvE4wqAukk2qWNGNXfIcz908XAx9/5L5vK10Nf\nA5T891gd9WtO+T/hH55TVkMogoKkaqBUo/U8TVD3Mv6oVgLhMlzqQQJCG0axhJjvjxKfMpBI+Fs2\npU3hUi2XrvXfEnO2ls7R/UkIh9GsFxDyAwhHdOCcSGPrMRJcYXQ+PVqHDsXaSHhIIcYLjQjG/mBL\nhfHdaLt7YPpAMDjBdhOaAMHwbagcRCe/SUdtmKq+r9mtzkRKVbl81zqKpW54/QLMK4X7j0LEy7l1\nk0mtMhOcnkSvcy9Ze/xorb1wTEK7dCLS4DngbQLPSmjuxBufSbehmbAMiiWRKL2K7mCE1jnXIeud\n9Hv7FSqLE8jKuB/L6XUwcxGUzQdDEsTOI3LuVpRYFbm0Aal7MVrdn4kYLPgzDBi0BQSj+iPU/A2b\n7QvUD6cQ3lGN4NHomxGN69brsKfegGnbh6iVy+iMTyNtyCwEz2oInEfzaKAaEKxB1EoD4pYg2rB8\nOqckYH7zEKbiEkQ5CVash3vfQp19B2fDjyC2HiZ/+Xk6vvbS2i+DI8+9wHU7j2IanAuJOiK6aF7w\nR3iqez29pioQ3GgFhTiF9xGPrsS75k6ankzA8l4cjthOTO31dCQn0TEkiYLvj+K+YMehpEG/eJh5\nBm1XC9qMJxFznr9YxPV9DbKMGu6Hq+UhDiWaSLdVk9RjI7ouCcrKIK6XSNCJd3kQkRDGoWF0s2PB\neS9wHbwwBu5aBGfego5kVLsTofJLenNGYt+6DW5+B2/qMg6boxiwupJOQxjroCCxFSnoJ3+Ft/ZK\nBLEM0zc6xFYVMrJhUhHBY3tgoBFDHIRM+bR7ReyqDvHsVvQ9eURMJowNZRDlBHE0SH7QYmDDcsJ3\nLSSy+hPEvOEYrr0UKtZAw1Tw96EcfI3QPWZMeVvBOOLf/OvCCth0NVy5DxKG/uP8mJ8up7xHG/yj\nbMcIR3/NKf/U+GiiVvwSD5VkVZ6lJX8SyfpmXLZvMfT5kQ25BIUA/S/EI6nN0A5t/QvZmPUx/XUG\nTve+StGUeuQslbjek/TVmAhkjMDYuxubosOTHM+2YaNZsP00usZzCJKMoEbQZ57FlxOFsawdqaYc\n3CMQ/FPR7DlovvtQvUtRdIl09EosL/+c86GribgPcu+ABpKTznP53g3E9psJrm64fTqsXAGV42H0\nRDICQwnPTsOZOALL93q0L75ESIvAjRqivRvUzeDohho/lOdjmbcVMXiCcvcT2H0l8PVejMkN4NVI\nff0blPGT6O9/n23mlUwamQXf3gNCF4y5FvZch5ZxOYp1HZ2hr0iqf5eg04AUjGDTviQoCchv/RbT\nzga0J8+j7utDaJXQXRrB0e7CuPRLmLAYvSmIUiKRYK+gL1iHZJuCuVZB+LwSQkHon4Ra24UWH49i\nqMZ+VEUaMgwxIR2CI+GSAKx5FbVvH8EJFcSrA8BxnvDjBeRk5VO6+CMIAzOyofJ5ZJ0DkmYiudcS\nU2+leriErsNInL4b/BYsnRkk/bEWV2kAnaMTTVtIXPIY+OAPKDkSrXc6sB+dQltTN4nxfyKS+hih\nnUuw9BRDwWS0je9QPfNeVO1BXBnpIGSja6/ALfdhPlJLaMwwzJ1raRs2gZi3V+FOScTa0QemzeAo\nQPvbwwg3fwKH3yJU1IP7shS0qm9wng0QdWw7KCqByndoFYMktMnYNzZiHSoRbBGRD/UQOTgMY0Un\n/EZDzFOgaBZc/gGhzS/gjZZwbOqP50aBiN5FipRBWPXgtsfQnBokZeg+WPFb6CiHgSOg/RScXQdD\nRMQ9H6OkmJG/34UroYGoOV8ibH8RHv07oSuXYjjrBG8adB6CpEEXt5NHvJA+G2IH/le7+48m9Avr\nIPmnEWWVEC7K0eMghkHEdv0P9t47So7i3Pv/VPfkvDnnKGkVWeUcQAKhiAgWQSYJEMEII0DGgMAi\nG2wwUYgcRBYKoJxAWauwklZhV5u02px3cuju3x/LufZ7zr3vD9vX5tr3/Z5TZ6Znqqa7q+t5quZb\nTzhMXF0yWBcQe/pF1KZKygZOJO/zBOTbV/auLP2LOGZM54h+DKk9X5JbV4HUno3WPJbAqh8Iz4vF\ndPoAPW4HQVlgbN9Aoi4Po/cUBHSQdxOcWoEadmGp8xPq24N0vg1tyx60eUmo7u8QWhF4e4hQjy6s\nMjHuaX6pPYslz8cXiSOZ0bQDZ2aESMwOdAfmwJW/hguH4K3d4G3G9NA9mI48CTuWYsqV0e6ajth7\nAs3TAM5OaD8IUcnwZQ9c1Q+qr8McaKa4dRfaoMWInga03DRyN64F2YDBfg2t3WWsOANF6QHihy+A\nA0th1XKQUtB5vYjhDpKa7kFkfobZXACWfqhKF75VWTiPWmB4HsoLLyGKTagTTIguPSRkY5l3Jz3q\nayie/fQkWxCxAqlbIVTxPe6EgcRP8CC2N6Ilx+M292CK60DfALrSczC0P2RlQnkZBEANR/B2tGP2\neUl563sozGHb5TNZ0PgVXN9F5J1YdC1ZaONOEnjn92iqj8iXbkSfbnLeMxM0f4KnfhXmMwGUwhwi\nFdEk5/gJ5DrQHfIgJq0h7nwTwXg9wRoD7T3vEVijQroOvWMsVB/BHfcVjfYN9Ez0Eoy8RHSTGTX/\nchIxEowux7mlDHVQHuamPURShmBtOU/J/CvIKS2n5867kT66nrNz+hBvr0XzfYW13YftOS9MKcR4\nzoIIBZEumwJlpzCXVpLRoEG1QC7ORx4/AuPR9wm/9iHinhuQR8qwX0HVWRCDz8KWHEKNOhwNfah7\nZBpCbyTVbyfi+YF1sbOZtHcfKQlZmMuGwIgx8EM8DL/nR2lZDCe/RDMHCabIWEdmo98WJtDwOab2\nBpTVoxBzhiA55sJnl0LhHEgdBmEvnPsCLvvmzxl8/gXwP41T/tfpub8TEgYcuMjmevK4AyGlQsN2\ncF4PiUOozrqd+PtPYvKpsPVqqL0AYgS1rlxuOfgtoz6rJ732MqTsT1Hf+RJz6ATWNIF+xhT01gg7\nbxnC9sRiYk76UNsFYZ+MVrYSEVbRznQidngwbO5BGwvKxE60sreQd5iQtWXIxntpbp6OObSAQcY8\nbPYzfBU3hIsbjlHjT0KWE0AaipJ2CmISwdYNT6eCoQp+dw983wrz8mBIEiK8h8igBpRwBmq8gpae\nAra1cN8nMGst5H0K6c9A3EwUNYI6Yjyiw4WhsxxDogsaajhufJivGuyE9u9CXXIvfBeGC0Vw3IDo\n2omuswVCGr7DjXCiEx67C23BRYj4gdTMX4SyuwX59osR+T3o589HGzYDfrUV0udgd95Pl3Uw4e5Y\nzGf1dPhiacm3o0YdxTOlA+/9FrzZ5WgzVAzWInR9zJAXAwM3gSLDlo+gdjdn+sby5cwUEmovIOL6\n0pGRSTU+IiIHLLXULO2g5tAf8E8bAu6NaDodylovmpDRnIPQx8TTdEN/FJ2EWl2HOb0Nvz4B0x49\nWL6B9S0wdDK1/mS2mC8lWHcVsYkBgo17OFG0m7N35dA88SDxpvX0D5xlpLeEHOdJvFodGYyn75F2\nwpYsJM2PNPIk+u40XJ7d/JBSjKW4C7PTSs/NyWSu24k+KwND0ixCo/X4k+24jqzDPLQbkR8HsfVw\n1QvgLEB/XqC3OuGKF6BtC6rJCg8vRs5UEQkxCOkiIlkK5f0j+KvAkK7DfaUbs+YkjVvo4ASt/p2M\n9ufgCjswSy7IWQdiNNhC0P1jEubsCRB20zTzOvSdEiKtFYtfj86tEO70Eupfi1F9DY5/C9YEGPdw\nb7sjz8HgJf9SChl6OeWfUv5aCCHmCSFOCiEUIcSQn9ruf81KuRcqVcwkmeewpD8C31xJeIRGZ7gR\nraKG6FMuxOJxkDcD3Oeh8TVmbTMR3/c6/JN6wBFC/eIypBHtiH4y+podaF0qjrCeKX/cQ4+wcmBo\nMQ4lk9iWdpwhN8Ivo8kaSoKV8C+S0JV5EMZfoOZuI5CkYHVMRgiJ7LiboWcDaun7rMm9hNF1B0jY\nHqB9lgNJvRvJU4U2vBVKciEcDyvq0HKdqFMdqJfehhqt67VNbdmNhhclqh69T2A0/xGhuEApQ9M0\nlKrdSFYrkjSHSNl6WicHSXnwa6QYF/QrhepBTL54KDP0enSrKhFLR0DOUjAlQsM6qPsdnE5E21FL\n2P48nE2Hygo0SzzeN71ER/0RackQhHsFZEyGuMGoBY8i1QxHdLyP8J3E7Iti53PLOQ4AACAASURB\nVKgBXH6snqzyUhoLoziRX8SIHQ6kjj2Irh40pw6p/xMgFsPx81DnhKIRcPeD0H2BqoxOQskRXLUh\nSD2K+WSQRaKEUJ+voDEeu/1T7l84hwfid9D/VCvIAsOdAiUnkc5LHkS0vkDGPdvQLNG0vHgXCWsq\n0B/5ko4FMVh2x2DscylyQTwxOx7m7sbXCI21Yb13GIGQB4tSR/q6eoIuI+YykAvT0XyF6PsNpyvK\ng65pFsqxCuLGzKWppYIUyYloHw7KZlrPR2HpaKW7u5GU6kWQXw2fvgTjAzBYpWs+iBYZ3QYT9C3u\n3aROmAM9i8AXBocMPR+i2AejfboOnd6HMDlg0HIobsFwzk7uy7s4d0sa4fgkMs66idp7N83W3+PL\ncZGmn4/uxB/AIsCaD+ZcaN0OGZfAqU9hxGLImQjpFrr++B3hR0fgeHoN1HWhny4IDbQgDhjhwEKY\n9RI400Fn6JUXdw0kj/25hfyvxj/QJO4EMAd4869p9L9KKVsYjoSNdt7CHLkWUV1D18arOH2xwkVn\nJXSbNiA2XgT5MyFpDMHF6wnteY7TW36HscdD8HIZQ5FGVMSFQQkSjJExDdboibhoSbiD1am53LT9\nI6xWM2tvuJyYoIuLtalQditS5nyMJ2XEiZVcmD2Fsvwi+ra/gq42Eyn+dxhqXGjrl7D+2nH0t04g\ns+oUdLSSVGODwm+g0o9YeZjgL8egjDwF41yIvlORzhxFiilERxZSY19EuQVlzE3UV/0Sb0QjkPYt\nsfWfELv6EIFPbkYbOZWoyysgOAjTVZ+Q2lWOqq3Hn6zDGDQiyWvAq+fF0PtYKtbCV24Y3QwpcSB0\nEOiB4Zcje2/G/vIdaI4GQsvepOqjj7FMHIitwItUuwVs4xH59yJ2b0QraUKddhtSSAP7VfjHvoEh\n9Bha82aEQyHR3Epz+2SacqqIy0nE8UwXpuYQauxNMFxBs4B2rj+ybTWkDoZpS+lQttITXk+4NRNj\nogFz4DhquR3TH6bgvt5KxDKQtMQa1s5Oxpw1AK29B+FyQPqVdEuvERVVjJRVgbynmpSNLUjz9YjK\nucS89AXuwmyCp95ENcRzPKmI4g376WxPw541BfXYVrKPlcIIGV04SKggAdkxBe34NsJSBpLpPLaS\nBJTUAuSvPyDl6zCR7BR0xiREdCL31T6CPiMab2QvMZ3JSNZkuPoNOPkZHC+gemA3ee43sF3cAlvW\nQ4wByAWdr9d1u6CZSPBrtM9VdDEqYoQTrmzvVd6HbiRythTVpUM1xmP2yviG34dtzUbiz34BIRmC\nB6AuBFEuSH2wVzBCzZA+C9YvhqJYsC9AybHjP2EitrUWlh2F96/FffgtbHOWo/M9SWCDF8NgD1I/\nqTfixcFlMOzxn022/x78o5SypmlnAYQQf9Xm4P8qpSwQZPAObbyJx1CK3eGkqb9KvrQU6y0TEW2b\nQGchEtiLzrsVg9yDeUoaHaY5RKT9OEIn0XlN1PXNI/q0FVrziOlegblRJXn5Q2QNm4SzSA8zd7Hg\n5QSqdH1Yf1kmE4UZqXYLosfNmcGDae/ZR6mUTHbsNDyWs5ja7kZfrbD95gdIlUwUOhZCQR2UrCL6\ntAXsY2Dl8zDlAYyDf4VmlhE1r0LHAGiwwZDZ4GmCQ4/CzM+RZD2uqAehZSVy+VGMlV700SEMgxyI\n2g0010bjii3FuO56xIW9yFIXhtY0/MJLOE7gLK0j+etdSEVR1OaNJH32J0h6C6hh8HbB+8+CVgaP\nr6Tl+8fR/3YpcQ//BkfGp4iU56HtIYgdCfHDYEx/RO0GpNBAtHw7mv0szdIJcqolGvsUkHQumZYT\nx3H0PU1CZRq2gW/Q5RqPPd+JiLKjBjsQRg1h3Y1SZEDkZYL/S5z67yiS5tA0YDTp226lPpiLqS6I\neUI01p4GzA0/cHmmxAnG4V73Hj033oL2pZeuy7cTIZ0ow5MQ9TVMGoy8YSWkPgFTHkAMc+OQAnDk\nDJw7imfQVHpO6zl82WgyDnmx6vvBs6tB1UPFWoypa8DxGur2PrQ++yl5X98P0y9BPv8Y3NeEcule\nuk/cTkzpGUJDM1EdJkT0SGLSb6I9/RxxzOwdnPlO+OgKBh2voqdfFugHgHoU9pvB6ug1QytdTyQc\nTaQmG2PXOcRUCYY83auQAfo9SVvzBponTaTQ8gFGv54WvqN2TDTpSyciCkoRrj4QOgTGWPjRkEAL\nNfcGddLL0PQAWOfii7+J5tF7KfjgNCw4gjY/iYZyjYJt6xBLSjElXoV71kQMCxdjumUqWJPAkfmz\nyPXfi//HKf/MkHESXzOJru43CQ6fQ16FkSQxA2GzQVcDAVGE/4vHwXcDIvEzYjszGRiYQX/jWjAO\nJKXBSkHLb6jPdvLtFQMIZF5Oc2Y0dQ9ciXP2bCi6DrqawRNLNg1c0hWD3NKDe3gd/j4qfcQBxtbv\n5RZPKbnb84l9YB/G0kRC/X7FgI5DDHEuBs/HIMtwxRdQVgGqGWb1h/nLuOBoo0sfAMcAODoTHDWg\nKrDlVpj8EuiMROouIL/yMs632sgt6SLugA3dRXPZ8sd1tI5L5/z5gbTbEjg2OhF3ooyaBKIlhLWs\nHuvWcpozSwgKJ1JBBfXfb8N99isAlKoyIo//AsZOh0VP0GZ3ENNeheUaHTFDRqJFmtHZLwdLf8j5\n0YnA1wqp4xHFbyAlPo9kfpfoC4+S5N2HKfk+lMgY2tMSiT/jxhZIAN8FrEMSkc1JSBNPIlfcjqgT\nhJyxSC3jEMt/j/rMzRi7a+hfcS/pjU8QrkzEiBtXnELX3e/SEZ+D3Gyh7+EKrmofhVZrhLQMfnht\nNpYTEQzaKAIdR6HdCveMgVfL4L1X4bOn4I61cNtmuOdRmv0JXLx1B937PYx7fiX0GQbXvwa66F7H\niL5zQZh73ZoVgf9MO+lnC1F7PoA+z4M1CrmoL4Z+abQNmoNut5/4xCB4v8HmycTLYdQf05DhGASL\nKqmMjCK42wzjdkBSFFw9EnaUEumKQW3W0Kq6MK6vRPTVgXM2+PcAEKaUVvMqLkxOIqYjjMpJ/OYd\nxCjjiFndSeVtbYQGjkUrWIkWdkJULNXqXt7lcc6GtlKqL8OfNxitzgRKE97sOTSPHY+h3gLHn8Bd\nJWNp0YMhHzQ7DHgK26tDUXZsRVnzWxjy0M8gzf89CGH8SeU/gxBiixDi+F+UEz++zvhbr+d/1UqZ\njnoo24o4tZ3k69fTFLuYpK9OogWXQ+U6NN8ZuoeYiUubAJk/cmPOQdB5ADW6H7pQIkKnYk5OJvNF\nBf/FH/LN4AQGBK6k77nXiexZizxuAeLIGrwZAxHn9mP69k60sAnFKKGMeAZR9i5SdzvO4xHUxv3I\n4yT0chyYMomzDkST9FwwVJJmfQw2Tgd3ADo+g7QgwepZ1Fq7GaFOATUEjnSwnoD9gyA1mkBFC11/\negxDtJuoxMOICQtgzDZ44teox7YTf+YC1VOn090DBYcOkfL9SlSrB61JR6izAd/gNNw2B3GfevFn\nGOm8JJGiAR10tNdyVFtO7Jefkza8Elv4F3i359MiRxM9/AZqMt3kdLyAknEVKMHeSUINQdN20KdB\n+pj/eATBgAd/tUbMiAdxKitgQAteg4atsgqGzYfKx9D3uwN8bnh3MmixiHMaelcrDLkaUTiDlo6V\n+Hw69Aca0UQuekMJto4gOpMdy/tX0WjUiPvSQOib6zAsugX7wumoWi356jwOjf6aXCWN4O43MZVW\nwDsj4PIPYOkd8PTTUL0b7vkIKrZSPncwo45sJN8LvvIgyoePIecOhbg00DRC4XWgz8MASLEW7NMn\nYRwyBH96CUYi6BQfVN2DLeN13OsXwNz7Me94C6JssG4WMXOeoN20ijhuBsBLOT32JHzFU4kTEsx6\nBPVsCcpJCfnce4g20Heo8FgYjvtgxBNozU/hDf4Gn/FzgqpMvjsVc1Up4dhjSIF4xOO3Ybx1DumZ\nj1Grv5WsqruQHXaEPY6smoeJy9uAn+10iyhK0wsZ+FUP5b5nUAIOMr31iHoPyupOtH4+Ei7YoHoX\nvByFmDoTcddYLM+cR1OG4DNImFER/4LrvP+Kvji1s5XTO1v/r201Tbv4v/t6/vV68G9FcyU8Mhiq\nSyAhHenDO4nZcBa/2owStxXtxntwF+cQKB6N1Fn653aWQmjcTZgm9F4VYu5A634V6xOf8tWQX9L3\nZCUh+1k6W/tARKHjoRX4NqzG3LIdk8uGTnJhKOkirAtx2vECjSlRROpr6eg7iaqrowkkZ6MNfx46\nv4PYq4jgwWOw9f4l/cV3EFsA7tNQX0uzp5kOSyayay7E3ghdGeDsB+nTILQHUfkCcS++SPS0ZIQ1\nEfreDqYYeGIFgnac53wMwcWE82/zxfQhaCE3UomGHNsP/dwnsW6qRT3WTEtPJ+fn9+VsUgH1uUnU\nDtlOOFBKakIythNR7FHG8tKY6ymc9CViyjJi0u4hENqHsWMaPDIafmiEU/vh0D0QlQUFl/f2pRom\ndGgRvx86n1PGkQj9DLTUIEnmJkSdCdgC0VdC1DA4eRLcByGQBAXFyERQtt8BJU9xLvEcuq5WGHQL\nYswd0Gc6zUX9Yep96LKvJ97Qjjo8jegVZZiPnSfV/zFdkSh6Gv7EyHYzNeGdNJuqYNwkqHofSp4B\nRwY89SmcOwRL++MbuZShjTshF+QFMuarJZRL7of3lsC3r+JXK9Hcv0SnqQDo0uOx9k8ksG8fJu7E\nr70KVfdA4hKkN5fRs+hJTlw8EYSOzuHj8JunYRNj8HKMMG00ux+nvf0R9s2azntT+4PJhma6nNAd\nn0GHilyQCC2g9pWgOgCWCPi3I/TR2HZvJa7rPZJLE3HYP0av5GB542FM972PtOQNtL7ZBPTLyGmN\no8cmCCleSHoMwuexdVcTFzKQ63cxoioNczX07zajOWJpzbHRlelg612TOH97X/RPfwx33QHjo+G1\nD9GKfo3bvYPtfdrZz65/SYUMvfTFf1byJyQya1n//yh/J34yr/yv2Yt/LZQI2odXoA0dhubfg3b6\ndTRHDYZrnsVg7U9bugt/l0Z3goV4+52AAr4GaDwDK34JlUcJvXwbuspToOvHBUnlbc+rXGcpIKZf\nFpHMh2mZFqD6nqkEV2agGRU6VyhEOrIQpi5wgeWMj4K1QZLKFGS3hy5zJf7gPhryRuDdei2V8bGc\n5rdciNyEpIX/fO3Fs8H6C1D7U2FJZOI3tfDKcig5AqYI9GyCuq1g64PRuhe55SXorob+C3sVu68T\n1t5FU/5E0k+dwbDhA/QiyGHdOLRhoOUAp86h+/ZNjN4gKfWNxB1toWjXaoY9VYK2V2bAa6cYv2Qj\nhvpj+Gp7yDCe4BbzSXzcSyczUXVX0ZMvUM1RMDYBDnTBmrehuxaadv/5Xo49jJq3EM2azgCRgGS4\nk6B7Jp7WaLQBGbC9GMIhtEAIBl4Dg6+E0v0QXYyaOx73tNFok5dTraZQHH0p2LPh4zsInl+HqfMs\nWumDSOXPEhoYRrgqkd3r0N8BQWHkqrDChykPIEJHGX16C97YLkpu1aNmTETbMxalvRJOfQADOlG8\nEl1brkDWK8gZQMSEfvaNGGYvgIUvoNldKM9OQ74QQdJf3Oti7HBijg7h370bmSSErxzFmQMfr4LZ\n91KQeCkVvn00XB1P47DjmDfsQBhdGEnnLJcR1NqpbdFzPN2Aixa0Le8R/sVQDIMV9BNVyMuCK0z4\nZqfAKB0ENGj7EmJHwYU6RO1x5EAYPLdBaycct8GSuZCUwikG4W8RiMbNuMRC1JCXjqY/oSY/BcFa\n6NgJkhHSEiBah6TswXPJVM6NicZ08aWoRpkdKSZ8SS6I1SAhAmE3IRk2DZpIfsUqxvl+WqS1/4n4\nB5rEzRZC1AEjgPVCiA0/pd2/vVLWtCCK5wGU6aXQswX6DIEl9Ui/OIakn4Y+dwHm8mpaA89jSIvH\nJCaAJQV2PwprHodbPoCBk/Hd3h/NHiLwwjPsUsLcVvEb3vNUcY/tBmyeWyg40kDI3MipwhTCY5KI\nKgZ/cwydu2Uioyazb/BYbDfsRrJ5wBOGum04z3WRuuMYNtMIcnZ2Uqg8gp0R6MNvoUTe7b2BwbOh\n7Aja5I/p67oR2/jFMLAbTr8G+zvAbYTjEUj8HZrnAlrdGTA1QaQTgh74YxHYkzic2g9x18NQFkbS\nZbCw6g1aim+GGEFdcT+0Eyd6p3KPSjg1DuWkCmaN+Iw2rHkRPMvHEn74dvS6QaQM2kQCj+Hg99jd\nt+CqysWlLUb/4a/B5IJV++B328E0Fp5+Fl57Cs58ADor9uSZzKcfMhJoKp1aGY5OOyKnHTIy4b3P\nodNHzxub8W3xEYnthHufQ1z2PhFxBnHyV5y2TMTouRvkuYCbzhE3IGVeipjxFYFLZhC54EBt01Aq\ndQQVC1XBREYG3mN2TzWr4uajlepIKFhAfPQczvT1E6nbT+jYk2jdJYRzE6G4gXYpDm0PBHbJiHID\nVO+DjQ/Cuc2o4+bSeNckpM058PYnsHIetJ9Al34B69CN0Lke82kr/q5NkDMYBoxHQqKoVqMtoZto\nw62IwjBa+UcENT8aEfT+Aj7MG09/dR/XPv4hkbtvwTAuHvlKCTHCADl2hKQg68woLblQEAc/bIdD\nS0COhk33wCHg0Uo43gmPDQDjeahfQTxm7kiYy8G4IURqHsLc6Sdq7fv4dYsI2tegxc+EpipYMQby\nR8GRUozbnyC7o5Pg1MPkl5SSfradrk/vgkNbQcShvXEr1Z/O5+KDGSRcAN3OvrDpMQh4fy5R/5uh\nIP+k8tdC07RvNE1L0zTNrGlakqZpl/6Udv/2ShkCSPa7kAtqoN/NiPPliM5zf/42dyCmig4kQxBh\ny0VEFGhph449sPBjsEVD1DCCoR/QYqHh4QcpKonjucj99D1ykCdfWkrOb06hpTxN39bfMbTx1/QY\nzFAcj3PJZuzzRtPz8SkSXq6j/eiraDEWRIeAgB/Fa0OKHwY6J5SvRnxyCeqJCoxHVdTuR9Bqrwb5\nCag6jai6lqRjf4C2j6iPN+I2lsOAWoj4YP8p+N2DaLF9of0QTFkHJz+Ab2+G+D7UDZqDzpyOLr8A\nblsA5S3E0cPa5OcR0WbibpvL4ZUP0HWxEymgYnJ48C6bQmiuDv/mfAzdyUQfKcQplqEjBR0ZSEQj\ngl0Y975GKD4Ns+k6GFcMJxqgpRwMZhh6I/z6RhiUBVsegXUdEPQzlrTezu/eRsIhPfE9Kqg+uGwc\nNJ1GLLwG24NL8H1ZimrsRGlpQdiTcZwsoXXgk3RZdahiHniKoN9wugx70cd2gymGUMxZdE4X0g0v\nIc29H1GvkbK/CdfyGgasXcG1z7+BVt6B3pxDj7yTzKKFNA9x0VQUTTCmDs+JIL5x19Jv3jYqnQV4\nS1z4WyOE91ej7X4e+s6mkQ+Jt96EVOOGb1YSatmFf2Ij2kX7CQacKOWvI/8Qi9ZYijpuwn+MNVf5\nizh2N2OUriWSMYr66F9j9fmID6/kXQc8cLiN+TM/IG3vafQvL0OkCBj4NASngNULioqxNIwoOYN6\nXAM5D45XgRewKtCyH25rhN9sgfRvwaGCbwnJvh3khapZnXQlsnkckTgLnHViaP4Vmq4DJW8aeFsg\nfRRc+RxKkaD4T98x5YdyXNEP45+rMck6ir2zMgiOj4csFRHrJl/vxZS0Db1zBrTIUPEivHsvdDb9\nMwX878Y/Sin/rfi33+gTwgnC2Xsw7oXe2MYbF8KAmyB7Kg1x9bjCXhIibjr9IVh5NQwcjaaeR3Of\nQHIOJBididfoQZVcbBN1+Ar0LF79MjZjkEhcPF0/gD1yD+bwcJwjs3HubYTLkqFRRWfqwZDhwzJ9\nMZ4lTyK69ZgG6pAiKjHnofOKOWivP4oudhD2xmrCdhVjiw55u4rWvxuhZEE4DOdUOLAXXEXo0i9w\npGgAqiGNgf51GGcpWMd8BN9fi1pwHsnYgFBSITEOLn2NreEappv6QWcpmGugTxZJFafYNlhiYdZY\nIt2f4u8XS2XiQAqrfqDi9tso+M1qAnE+5OJmOob3R9K1ItxvYDDV4ft8HtLwCYieXRBVi9ffhfzt\nIqSD25HvfQD9mmfg0nshbSycfBLs40E/Fv80BzsM33EZ83qfR+vH6FtMkJgC8cWg64GZw+B0IdKX\nbxG1eQui9m18z96IyJuJlH8px0teJ8elx3k6H6b+Cjy/pjEuj3xdP8Jl89DFdiEZIqjNd0GfMK0J\n6XjjRxN/7hpCTcsxBqqQumUcf7gXV08FuugVxOfKnE7Io2ZQNtKIEAmGNCxHh+KYkM25GDv9us4Q\n8QiCXj/a769GWZCD/Q8foR2tR0kxoF6poJpl/KEZdEaO4avNJaWxGnP+u/htn2BlGQHfEcJxQZzH\nsmniMJUzj5D5QxBT//d5q8rITV9/h2tHA5ErZAwT7wDFiC8kYypZjdRvHlAB0QcRWjU+i4XI6Jtw\nDnoaekrhyHCwAs1miAmAeUCvV51yEbRaUaPWcbd1LavdszlSZ6J4p42wE+S0X6HTRRPS3YvWswvd\ndUfgh/fwDbNxROlP4SE3J0e9SMBgg1PPMPZomO2Zg7jUHIHRv0TKuxYjboLacrTgjZhOliO0OrCZ\nfiZp/9vw/+Ip/5zQmyHQBpN/D/ueh6YSQulncHTJqLshOmEFoYEFhF3HkbtbkaueQBr8FQbbWErV\nPhx3DOfawFcUnf+QyNQxhJ0n0D6xEjmjEcoXmFOPwuHdYDWARYWuNhj5MObmtfDxaxx+tJiChQfo\n2qYSfUkLlpM65AN3oj/TiIiyoR9oBrkFY/4kpK2HIeNu0ICGz+E7L8iTIOoACc1+EgYtQHt/Ff4b\n+3M+VkM7sZzs6kZ0xixoeBvOlEHUVJTvHuGG418gu1KhsB8ESmHq18irJmEt2UxI1RPKfIXB9b/F\nVu9GW/QEuae+wxRdhYwOQ1k7cjhA2HEcqbEaag8hnx6Mknkauo6j3wkOKYhvTgT/pdFYgxuw3fEa\nhhXLISoJUuph6DyI6oP5jWKymq6mfdpoYtQfTYwUDQxekNNh9XzoNwuKF4AikNPSwLUAa89OQt4I\n6nNr8f+iH3fu/gG9Lwzfr0KN1lGxNI7iD55DK+jC8k0EXXcESnS4p0QR6leAlBCA+jLM1RaCI6Mx\nnOtE116OGCTAYMAbiiHuRJCGTgfBVEHOlh3Ykzrwjb4XZ/xGqkOdBF0xWGrbSTpygNj396K2hZEG\nScjzJXTNY9BiHkXsmYYrK56WLVtpe/hi4iQNn1JGWD5Ek/kdUnfYkK9eTgOriNJNwdpWhPzuCu5u\negWtOoL7lQk4kxbB0WfB0Bdj1yWETV8gB+rQFS+EbR8iGjTUq2/GMyAbJ4BjIDjvg4NP90asG7z4\nz27O8fOgbQ2B6EuxVjdyx+9Xsey+B8icPI2YHZn4jszDMOJRjJvChLPiCZ3NRxcxYU3/LTsL20nc\nvJmKKJVh3zXhi/ET05FMlD6R8tETyc+/HgCBE5N4HuX4EoKOsxjrOuDMg4j+f5UT28+K4H9h7vZz\n4b+FvhBCTBNCnBFClAshHvwv6rwshKgQQhwTQvzzQ0h1nIZN18H72bDtVlDb0Rq2k7P3HBi68ef7\n6ZxgJFwkMGbMxdSTjL7dTTM+no58hM9vZ9neL+jXOQitxYsa+B7N2A7z7OguiUVZYkaNdwACjAJa\nZejKgreeQvZlEYlJprXAjrQ4Af/6ZKxns9Fnq1gtAdTf/xHDxy1w02acHd3o4xuhXYUVV8I7t4Ij\nB9IvgouiYeYKyL0CSlsQxRoW/QgKXZMoiOThSc/n7OCRlI3o5FhSLiW5hWy88ikqrngR7jwISg0o\nekLRCbRmpzCo6gd2eiJE+3OwZWyCg9GItnewpuoJ3TaVksRr8VntGOd/BuZuLFVOzKmTMbn741jf\ngeNIPwwFmZim30b0kLeJl5ajEY/B0AcuX4LnxHu0B8og2AFRIZihkq23EXn2Mjj4BMTO7302khts\nTqhohY+/g2emQ1rufzhFiI4TGIdmID/5MHZPO774YtSnniZwWQ/+hCoUIVOTHYWaGoP+jt0EIy4I\nGFAugqwCA2n6MOr0eYhkF6YrLyDd+T5y9GAiF31C5Yy1dIwwYzkiMfnQcCa8qNJcGEfp0IewmWaT\n092ffq9UUfhZGbkfn0NzGonMuB3dBDPSjZmI/bkQ04mo/w3oZKJrz+A8IdC5dxHxfIfQVOq5kejG\nfuiG3YiSO4gcfksOyzDNeZHwZU/gUQYgzczHXF2FHDSBiILoa5DtORjMQ1ECn6FcuA9Mw8CVgj33\nJqKlyX8e2wMfh/FvoOqdNNeX0M4xIvhBSGhouN97ANtjHegf2svdIT2v6AbAuDsxfy/oZB7B9Ai6\noreQ2mXCqXUoNauY0HmSjsHxpLU04xQ+oj7U0zGzgGGdUWT4q3s3Ny8cg43L4e15yHv3YSyZSHj0\nc4Sij6GEdv2zJfxvxr8dfSGEkIBXgMlAA3BICLFG07Qzf1HnUiBH07Q8IcRw4A16dyT/eYgqhFHP\nQJ8FYE2GmH4IQGy9j4C9Ehup2A5WIykxCOVD8LSAomN/z15utl+F7fjj6K1z0E48gJpsRH/uRpR+\nZxGiG2zZmDJtaLpzcOty6I5A80o4FUZL7Ia7X8VStwqPeTOSpw19wI4h9xIYa0Oc6yAQ2kaEPAyb\n36Kx0EL03mpMMTJ0qxA1Em5YCKtfgszLYf9h8LfAkU/g0jgofx7OTEQKnyVGric6w4Vmq6H28hRq\nkkrw9DxOcp+FvbncuhpRRj9Nq/IwZ9OGMLRNsMY5hkuWjoChueA7B5O2IbzPYPQeYNjl7URKEgg2\n7ELztRDSuzCcrUQz9YUvt6BZ9IRrpxFxvAXqevT60WjaCcLaaryZAzn9xK0UrzkBNeshaxZYL8c4\n7GUuDHyS+HcfQxypBlUHhiCYi2H8WFh5qtdG+fRzqMNvQ3Lkw6TPCHeXp3x27gAAIABJREFU0VBQ\nQPFbZci/K8T7yQfsv3IUE8rbGXrGT0yOGbktH354Gn2Nj0h/DV9yHFEDP8UsmeCLhXDpk72KPlJJ\n1/VLCK9YjvGXc0gqbyOQMw/5g0+xtvQw5IFTeOUg1QeXUfjKWwi9HnP6VNqG7ULFSZL0BTj7Q3cC\n6NfC0UjvJJw6EZHpQ1aO4nI/gej/a2RlA6j3Yd9VAjN+jw4nut41LlpApeuBfTiebcZ7IIgxYQp8\nfj3cegR2PAW2QkRsK4bkWYQ2rEac7UaqC8GH8zHPeg1ys3vHdvNLELUL6ZrtOFZfwvZhD5DCJAb0\n3Er45a0obd0oT6+DzHwS1TwmNc/lY/sIrvfF49yWj2+iguS7BnWwA5R4wmW1DH67ChEI0zE5Flt7\nCL3Fgo3riHAr2slM2D8Y4gf2xsqY+jCEfAijFQOgWa4lGHmMcHg1unINufBZhPw/l9L4d6QvhgEV\nmqbVAgghPgVmAWf+os4s4AMATdMOCCGcQogETdOa/xvO/9MgRG+AeXvq//Fx9xQbPvKwtN6IVPUg\niDI0LQOUJkTwLLP2PwZ5rxDqbEe0vIPa6KchnEb5lRWoRh0Dy2MQ57djeiubzqtjsObejlb7HpHs\n23Bf6iF4oYzzTVPR66DoUDveFBOuoe/AqIt7HSx8czEfruFCzv1kRFXSUjCUnCOn4Pq3IWyDReNh\n7wbITYYvXoDWRohNgjFXw0UToKEMkv0g8sHTjsh5AVX/FJk9txH3yQuU3NAHe88W8L2FFhckGH6a\nxONOkrynCZuNyNrFEOeHPafAlQ9v/hYCHrTWZqShQQzeJHh2OSLTgZbXBwbcgvbKm6glh5DGT6bW\n+BSBM0swFV9OkpKFFK6gkws0N25h8Pk2Qpfejf7A27DjLZhYCJFOLHqZqhkZpIs70b++CGJi4HwA\nCgdBsQyNR6FsD5S8hzruIaT+vyYYlYl//WwMtjwUz83YdVvIXtPJqXwH9rhztCSm091ppK/oBjR6\n+rqIq8iDrO+gOxrsiRBfQBg/J4wnUKJdDBpxN/pPV6ImhrA530HNTEC38hDC4cBWc5L+R2S8U6+i\nvXsXhvpNWDOChK3g3eTGOiUf6sp7LWmEDAUuKDkA2ROJf/RWhHcZfPES3ilmYnUPoxk2IWyxvYOu\n6Rxa1RFalv2RmImFiAMbqb04FaWjjD6zPoD3p4HSBjk+KI9BfOtDnzUHzf4u6qh4JHEe4n5UyOWP\ngOd5SLsGTNmYTVGMKZ2KtO17es69TeOiRAxvD8KQ2jvutfZ9jG3awZ+q89lNkAFb+6ATQ/DzLfUp\nGfgSc4n0kdD72+m3r4LONgeWHg+WuA7cW5dgTApjlo/TnJeJYXgOLqkBIQaB0frjvZ1C7H0NkxxB\nDe4inFRBWPgwaSv4K0NA/NPw7+hmnQLU/cXxhR8/+7/Vqf9P6vwsUGgnmkeQ4m4B61wwRMFFi0HT\nox2S4MI+2DKOQHZOryfW1JdJ/15jUP1wLO526iSBkmPkXEaQUxE95T9ci1L9Nu2pBRA4TkxjGgWr\nT5F4ro5UvYw/z4Th0xch1AaSAdJ/gxiSR9LXlehcj1G0RUaaMh90ndB/HCxYDAmx4BGgnIcHPgHZ\nDBMmQdlGOBOCqP0w9UnQEmD/IsQPlbDyGqznt1Pck43IeBSlfTKhkAUp5W3kegtSSzz6Vg8ZJIDp\nSjjSAKoFlq5CefQ2Iov7ImoykeQkJEc1+oiC4fuvoPEPUH+WUM96AAxxxSxOW05xZCHvqg7alULO\nBw5S9NUnCJcJn2Uh4dBXRPqkgDUNws0USMM5k/8gXYFamLwA2nrgkfGw7nu0sl20zv0dfn8fGJ+L\nWrsM7Yvh6LZMpX2ImdZMO8YvN6Hd+gdiLiqgrbAFq7DTqbSiC7bhyWkgOHsAZ2+6mlOTO1F67oeT\n96FNfojz7GMPL5HuizBU3I4+rgit5RARczLePrcjDTUjvB/0TpaZRXD7y1gL8ogLJBG1qQvrMj+u\nkibMA3xo1Weg+mxvTrpuO6RcBWnpUH8AcfxjiC+gdfxdSD0eLGsXIdk6ezdaAWLT6Xr7Yyy+UkyN\n6zCEbKTtb6TOqKdj9RsQqYLgeShrhb7XweMrkFKNSALo6iA09HqoXt9LIfgOgi4EngzUvdcSCjgI\nXf0Q7kfWEbIPolM1Uvminmr5M7RtT6LtuxMtx8Ptm79m3VWT6Ww7Rqj2GeTybuI2NZL/4WYy9p4j\n8+B5zp1y8HKf2zGVK1hbBIk1rTi/tqN0O4gKXkbUBd3/6RGhKvD1IijfDHmjEF4/ugHrkOiPwvf/\nbNH+yfhH2Sn/rfgfudG3bNmy/3g/YcIEJkyY8A87l535mBkNta9A5DT0+RJMCZAQhjJAMUOqh4ju\nPCKShPx9JSz7E1HJbgr16/F3NmGN0aFNTCXk76anXwxnzelkXHid2IYTsHIzjhw97uxULOnT8bm/\nJvxpA5rpHcSEK6G5CaPvCGGLiaDUiL2mFRpegxFZoPPAxBgYMxuqdkL5NWiPXgf2IOKTG+CaZyDz\nIIQM0LYG5E6ImYSo/xB1xmDklWXY1i5Ftb2C2nYYXXIu8uIbQCfDwEmEi0Zje30pSr2GfOWdaEYP\nyuaLYeI4dLlbEEsD8MGt4NIjJXoIJxnQ68Jo100mWBSPCcjSNDZtuoe1k6ehRMXylHEigZ4Q07Mi\nXCw3YazrRGp3ILc1gluDsWMRzklMo5iOo/PZMcCMf/RQCkfMI3XLRxxadAVvDjEx2x/FkcRr0Gd0\nMWPnPvrGlpEddmOYEUbbAXyTiaNFpjg1Bm9+NEHrCJIqtxA6YsN8k5cR7tcRVoVIl4Ng/m84rH+D\nOAoYxxKk8HUAaDtXos0XSGvaCU6bhrVdAtdFUHIF5CyBJj28+i5SIIBqNaHNg55CI/bdQfSz34D6\nG8GoB1MX/LAaRo2AhGdh0x9RnXYipi+Ij/qGSNocDC0O2HoTOPX4KjTCHg9RMyaDNZbwKCem0pcZ\nfrAcW0M3dHqhxwy5CpR+DXueB383Yqzca01xeCNqw1fQ3ICUGYfWroP2Z2jVx5BgKCRqmo6uY4kE\nPUfJuKkLd0otIfbT0urHmp2GnFKERCPzYlbz3oPTWVr7GgYtAeuwDZyXKvGf30xqRyePz13Ak7vu\nwKhoMHUSHNmFFJWJesvNtDU9RULTJcjix5RP/m746jaYcD8YZCh/B3HdKWS9BZmfZJ77/4udO3ey\nc+fO/5bf+kv8T6Mv/u4cfUKIEcAyTdOm/Xj8EKBpmvbsX9R5A9ihadpnPx6fAcb/Z/TFPzxH33+G\nlm+h+UOwZ0Dms6BpaKdmwaqdiLZEuGkhHdmvE73VCA11KHoJ2dSD1g1KnQ6PawrWtP0odi+qVSBU\nBz1W0ClOoja2IMUMAH0aHek+tMZzRB1rQLR1IcwS+DWI0ghfI1BOGzAZQpAkQxbQPAMCCtSW9HLi\nWNA+24hapCLrBFitkJkFriyQj0B1M/QEYSSoQT3UmBGhWLpHxGDfWoesaIS1aIR1ILqSg6hpITzt\nPqqmjGXAVUuJBB9HeioIXREiaaMwFocRDWugoxqkGLpG52Mr+hBV8eAR3xF9OBEOfQGxGu0xKhhO\nYbd1466CHem3sCF2HIormmn1r3K5ZQC2o6tg+FDIeImgugjDNza6MjLZ268Ok2UYYbUJVWkgoh9A\nAUNwvvUS71wcS2xrC/40E1d37ac9NY2c325CzgmjawCmz6UsNULoWCWDPz8NUQrazTKiNQ6vTqVD\nOAgMGElq3B+xEA1KD1rL/QSiluIvmY0r4ThbLDcTr2Uy6ONDiJFzIX84ypaLwBiCzFjI6YPGLghp\nsF3ifH4W2Uf8YIiDqzbCyXdh7XK46e1eKoHRdNk/wWCLxlKbQiDxICbfLHB7CH9/hNaPLpA08f9j\n772jozizde9fVXXOarVyzkISOZpkkZMTBgwG5zz2OHvGOYyzsccJ5wg4YmyDDRhMzjkJJBCSUM6h\nJXW3OnfV94fm3Dl3vjn3+n5nPGfO9fesVWt1d+131dur3r3fqmcnEDp0ENLCiDkoYgdh6RRIPtQH\n3NCoQLIW4oL9mxkmGDcIxIr+zVMXJqxVodTLqKtEJJ0fv1eLXuUgEu4mkJWM3yPQEpeMzRjGQj7n\nDAewu1PR7D6Eel8IkmLZPyoXzdBk5ky9H7/Xz5G2uxiwI4k3B+aT7xJYsPFblPkVaFxaGP4zfHsf\nkUGTaS3ej8WXiZkroS8BfrwP5rwE1njYci1M/wx0Ub+q2v6jevQ9ojz+i2SfF575b9Oj7wiQLQhC\nGtACLAKu/BuZH4E7gFV/MeI9/1Q++T9CyAXe89C0EjQuiLkVwj6IAJ83g+QmiJrWyk8wxHUjh7tx\n26PRtnkIdKWha6vDXaihb/gR9L1+SFMjmYNEjqdDYgpOdzOG7E50U25C6GtE5V6HyZKJoK4iElET\n7NJjGDwX9p5AvbYGIeRFyRUQ0sJgGgkjv4efH4GZ10HhXOhqRbhMYFvDR0z97m1EbTu4e8G1tb8w\nf9J22KegNHURGJuImBjGq+9DjMxASh0PB9exbtHLTHvrPsyT2hAco5DtuQScZwl1fYSyTI/vs03o\nRoAm9SjByFjki95H/8NysFjRnfoW75ASDFU+Iv6vkcM3EkmzIJRvQNejRX/hEkT3p+i0iYwfM4jo\nboEYzwZKdSK/t2SjGfQES12PYi3JwV1wOb6Rm4jYF5GtmPALfXjFegYfPkIkbg7Bis+J7qnnode+\np2lCFA2GIfTptZz26QkY8tGk+EgubMDavJZ8hwbvtxIIOsKXPk7vMCd25WFCqxew94JE5lV/x3lz\nDLXaQvTuCrLqDqG03Y09JUTAYyRa6SG1eR/CkJEQ6IGtHyL48kGuBVc3SvM+cGjB60NwCKgtySjK\nToQOC2x+CS64GVLfhDduhfnJ9FnWIJpAX1IIZXtgUTTkfYEcCNDx9OXEPnkXwoYnYVg2XPo+pI9B\nEARC8nUcDSYxwf4GQpMW8ufD8c0QMwD6miHQDIpMsF2me4yZvhwjlvgQ9k49oa5GZJOa6jFxdBRk\nEN/URdLac/gXXs7OBA/mIz2MqR1I3VSB9OTFOCbqofM4lxxfj8ccB3Pe4WTgQQrXnuSwWcLSnMii\nNz4g5FERSVZQaXoRdhaDyoxQ30v8xj68S4LIgW2IZ8/AohWgs8CmK2Hia7+6Qf5HIvB/W48+RVEi\ngiD8HthMP0f9saIoZwVBuLX/tPKBoig/CYIwWxCEKvrzj67/z173H4L6twg3fMC5rIVYpBj0W+cR\nbJDxm3XYYpuIqgdR8JG4t57eCSJt5Qlo44rBtAfvnAi9QjJs92F6R0Aq9iPlQdAnIU8vIO7DMDGu\nU4QnKFSnHcOmu4I+HJi65hP+LIvyFBPmZe2kbp2MmLkSdlrw3DwJjdKL4XANFAfgxOuguMH4lzjK\n6HhQFNK8RYT0brR1ERg5Fa7/EABlw2AOvj6Rwsc/xXDQh3tKHw2DE8n96jPQR0PxENJffRLj7yqQ\n7cPZEZdKesUhcn6Owr/GiWGqC93LBfQmWugwOEn/qRP92KJ+rjDdhmZPgJ7Dd2EqHU3ohglUiqmc\n5wAOHmbU+s+IuFahqAegjzIRkFIosXVhVSskpMHtzc8R1+vny7xpXNp3DlPjYXpTB2DwdGHTzcFJ\nO6YTLvSryhGG3A8DFsP96xF+eBSh5iuKhvrR1Z0hQS5HscqIiSEisSLtqdFYmg10ZSloKntQT7sK\nQXgfhTBNM29F17cdzf19ZC9rYEBmG0rFHsQ2L8qsbSitYyH+NdKjkxGzDFAJHPoG1q1HTNLBkjBK\nG8g1auRWDepvwghFcSSVlYEEXHQnxEyDAx+CKRqaWlDOXEnzwlNk+k4jtP8IjggC8fgPrsH1+Tai\nbrkG1emV8ORxiIrvz8j8iwNMI9xItvw2QXsWWm8LtH0AE4aBrwoyFuFX99ChWgV+O4Iok/JKG6oC\nE80j5lCRUIUxMUz6aR/pb5Yg1rvpGpWFL7qM+cu7QJ3O6UEDOON3EczpxhNrIj19A9K6BZidJUTe\nn06UrY+1l1/Oz5a7ef/Vy5BzY1CltyIOjKCUJQBuZOtMsBmRlXVofziKPz2Mfup7CAY77LoLBt0O\ntpz/Cm3+/4x/Jl/8S/Cfpi/+0fin0BeRVmTXu/hLPuDH5KmkhWpoz1vBxV/mozQkIKU+gFLzLoK3\nkXCBhLzOg2eOFs1JmbZn7ehqwtiPqRHLZ+Ha+AVRj0FYMxSpeAHqU88RMaUjpTwGSxfCDIVQ9myO\nJ3eTLtyI6Y596Ar3c8bkICM0D4PhMUS9DvZcQERbimtmF1EVMsQFIBrIXgFrb4AxT0Ld1xDxIyek\nUNYMA3/aBHdtgIGzCXWcxL3tGsgCwW3CUHKeqovMqA0Rsr+uR3APRNjZyeF7x2DKOk/GH1pwEeTg\nlGFo589leMU2wnYR9YjbsDEaP42Yzgfgo3tBaQAroA3SWwjmTU20z86jLdaBkF5IdnAKhgMLkK1G\naA7RNGskZvN9rHSVkGCZwmXScOo6FpJ1aDN10mCqxzzMZHUSStOfiOhOUJ1yD8ZIJknz3oQRF8DN\nF8OPF8LIZ5BrzuGz7cKf7sH8dhaeKZlYpdWI38sERxgoHzeWjO+raBgWh25bIxqNjZCxBzESiwY7\nSksXqvpadGojkXEa7DfU0LPWSERcgu2yKCT7C3RG1qFfsxTjvgYoGAbFMyHwAfgFOFoC/jBKQhqc\n7EDIs0JbG4pBRknUIhrz+6vadR6HLcepz0vBMc+P3tmF4DXCYTOhoU5a77SBq5fkaWFQ9ITGTqdz\nSRCJaCzciJ6xKOEuwqXDUJcAKgVix0L3Ufzt7XTNiEKIGkokWIPU4CahLBl5whzqtN9REhPPiHMp\nJJ88CQPPECjPI9R8FgNWQtktCGmTUO89iqgaT/jmr2ja9TSlg7vRORIZVbEXfcIKVEsv52RKPAtv\nfYaXDj7LnBfW0f3WfGLD6XR3f4kubjm6H59HyT5HeNgASsMuTN9Xku00IfQGEBbe25+cNeh3v67u\n/jv8o+iLO5Wlv0h2mfDHfwp98ds0ygBt94PzVQjE4ct4C611HuKJm1H8G5HzBqCU7SHUCs6EbKyC\nC/7cRWiKiLoPlONBhE4J/f1mZGc0qswcAmNmohKGowonQONTcOx7cM+CphN4bxzN+bh61F0OpBMK\n2UP/QNeT1+CYEkKJ8yH0doJXBKeCc/o4bAdAPFkCEwaA1QnVjWDNA5UWvEdhyMN8lT2WS854Me79\nkp4x06nQHGDkhi8Qrl5NsPQhygqTidcWY1/4BOrRYZQSA/45g/FXN2NqbkJj0IGtkB4HGBrLCUtm\nDBkjEbR6UGSQe0Hpgq5SiHghdQAMvJKODA9Rh2s4lVLOwE1nUSVNRBgyBvoU5K3vgMWNz5WKLj3I\nXtUwYkKpFNT30JtYgUgFJqeLFaOv5NrPywjdfjcB8QHCvlSitJ/CqpXwxFJQq6F1H1R+QcDXRFO2\njtRD3+O2JmHpjKJHace+vJnji4dSmJiB9qSV3lAZZ+aEyVNi0Lqc6Jt7CWbOJuAQqWxvZuBHq5Hu\n/JCe9Q9hvmQCqiwnkvVnBEWCj16E9p8gNROmXAJimP5HYQH2vwWZFgiI0LwHMmMhDBEljnBfKdqi\nz6HmbXC78IVraclRSDM1IrgWI3athoQl+Fd+RvtqC/FWJ6pCLQgRwsWZOOcPJUp4GC2D+wtIVV8J\nZ/vA7QN7K4HEC+i0VCL2NqHVjsRjqsZ+xEbFwCJsoWQ6zT9hbkigacgYpjacRFn9A02LZxFlrMH/\nug277gy+qd3oDqkRPAGEjIvAHAeN55AvWUqpYwsN4m5aNJdz/csf8nLBZFJzYlj46sMoWIhMyEdV\nkMo7A4vI0eQz2fsl4ePn6a3qoHJ6DoXP7cE040lUu59HHDkJYdHPv77e/jv8o4zy7cqff5HsO8L9\n/2045f+eiH0B2bUdxXUKTedthMMPIqcFCQR8yA1NWGpC9PoSiHdMRN76BVJvgMBXIpEeCeNDcQjW\nbvi+FynXA7paaM2AhPEgpYDkhhPpoF2HEvIScnWgN8YStaGaSG4RFZ2PkRFdhyJLCNWAPQqmlcKL\nV6O2LSHiuR0xMYzSUotAHIwaATUW8HWCpEDHaYbn3sChog6MBdcS+8OHDI+kIWTORom7CKXqbiR9\nC3GeMwgLI/CaiBDxIZU3cPaP95Le+DYxAS2SNxdrfQi8DUgmD2eGKuS5gqhQg2M8aJP6N4Ptb0CO\nCQbfiVP7JtY5LyF5r8A5JJ84JReO7EIZfT9C+gQCA9rQJM4n0nQEcUcz8pIHwVqERWumKngt2S99\nQ5wtkZNP6wmYP6GwIRlbfRlKw1iEa96BUD2oMiB+HJ1xLlQbnybj63qUwalYj9ejOFsJOqLwLTYw\nxNmF1D4QcpM5X+3EJ7k5q3Mz9nQ5gtGK3tqEvqGHEceP0pQcS6Jfwn7PbYj6cSjCcQRB3V/l9pZH\ngEf+/jq5/HKonAdDvoe1Q8F0N0gHkIxxiAd2Ezl/F5LWTDC6hc2FA5nQegC3aEJMnULA1oHe8zPB\n4kwSQ7VI57TwZCnCltdRVx4lLvgeQsPr4Hqo/20k6XmQn4CCK+hVbcRjOYfdPRqnvYuw8xSO8hj2\nzs1lXySF2996j4wU+O7yuyluPkfg8E6kApmYxD/Q9/3N2G86irw+gdAwPbqjjUSiTEhLvkQIy/D+\nfERbEkUtZzGmP4TF8zVN05dwfWQAcUufQLl4BPLpJroXFBN/JJbFP32CZpCT2i4rWlUiqQkLEL5e\nhirHjGj/jHC7GvWAFxAU5a+tqf4b4V8tTvm3aZTDVfh6t+OLqkGvV6GEZGgMovNnoW3dj+LvRe7S\n4CuSCOjbUFdJBPM0qPXxSGOaUHYrCBWgpEuQEI/Q2Ipm2acIcXthcC7ok1C0fry/f5S+7x7D1OtH\nF4zCnPY2Gtv3RJcfoGeOGfP7NjRRWpjUBTvHQ3o9pvXn8UdZUMcthkOvIg+7A7FxE/TuRUkoRkh4\nAeo3kKmYWS+v5PpABbapEjjPodSXQO88NAkxZJ89g/JqLZHeaLrfvYvYdS3oGnYz7OTLHMl+gqSo\nFMKOCMGap1Ftb0FqVEg50MCXD9zFZHEKyf8WRh4JgScAa46hTLSg0IsndDtBTRTi1IVwVoSy95FL\nAog1JwmOupVO+QPiO+YjRCnIPc3w/b0IxhhiBptpn5NJQeI0NtvWMcWbjT7pRjjyORg/QvF8DS1n\n8ctrUCnjEEv9WH/uQihOgvbTCN4wYXWEdTMmsXj3WkR/PUrFWgTtSFLjMhi8pZ6e5Hrcl96B3jAL\nzbkmWL0YYd7ttIRqEHc/TMRsJ9m9FCHzeUgIg/i/UYFQANT50PgF+Grh4A2QNAfEDoSQglBXiRIH\nbaFMzIEQnmgD1loP0q63iD6lRxzUhdIwkggtCB819vfbW/wGwqeXQc0T4NwO6hAUfAeVG8Ebht0f\nYc7NpXusj3bdHmLbNPgGRFElqtAdraB02AzUqQvxJZ1H3XIE8dTHKJf4iSgSOB/Cf7oGYaIe6Zal\nSJ63INyO854hxAoaqP0YlAh0f4IY6SFLHE+mdRJCgQteewRa2xGy5iGc3o6kOoQ8eho6eQRnenwk\nOu04Th1C1pxHitVgKexAPmpDUHIRfDXQqIXWKkjMg6T8X12N/1H4V+OUfwOlO/8Gvu9Q2gajaX8K\nY/MwFNedGIJ/xNAnIrqbEUQzYlhG8igkHnOiP7AH9Qg/2mGxSBcHocWM19oGgxxwoRplWxPhk5MI\nGgchi/nwwxbYthth20Eif7qD5tlGxHIt+u5eNBdOgoq1SLGVdKluQGruhKFDoD4MRgcEJYSYHLTx\nV0PRLIJE49v1M8qwd1CSfOA6CEmXQLAN2fsUs1oPoDm9j776OnyqBxFydiGsDCI0TiO8MxXxkIfI\nIDOxujR46S349Aiaoq+Y0PA1QsMG1MKlqLsNCEUPo3gzMXX3sWhVHYc5wkEOo6BA6X5Y8xPEWXBT\ngi2wHm1oC0GhEymiBvcTUHwjYWsbskbGsnklUrWXyqmbEQfkolR8Bo5MmPssJu9mYr3niDl8D6om\nAxnVVajkAoTNZyDuUYTqNsK976I624H6nQ3Yt26AS82EXDWEN/uRrSB3qLhpzUYUEqBdQL7dR8+N\nk5Cnz0WVn4i5NQbVd6sI+DehbHmIpin3c9Og13hq2BrE7ghR9i6U+MEIig68Z/7+GpHlv34WJTjt\nhB1Xw1k1ZN2FHD8JBj8FahuCDPK+OIIdSSTUdWH5tBezug/93rMIE2fDHhU4mwjfPAjFYIa+SoLl\nN9Gdeo79iYlsysjH7x4LOx8FVy2UdEO1hR5jI7i7sEqXoTX9Hm2Zl+T6MrRGH1HhHtrzHHRWVDHt\nk28xVw9Es2owqkPZyObRWO91EHLMJMJB1KeaUTIvQRccDAdz4eQbULIDpWkdEV0KiBqEqh1QuhYa\nquCD7ShpMyDUhzF0BEWwoNO/x/Do50kya9FO0RA2bIM5k0FjIazuQzB1IwR9cOg7WHk/PDAQPvsD\n+D3/DI3+T+P/utoX/60QPgfhMwjWpUiHtiDt2w0XzYWxN4D+MEQ8UB8FLYeRrQ68edPwnvkBqzUB\nUQqhNAto4tMh+iTBs9lotXuRxwpIp44j5HYjqo7BpW9DQxTsu5nzd8Sj6vXh6u7BOr4QlDBk28By\nB2LKRVQ8n8SA8i0w7iX4dDkkJYKQhuivgyOP0+udhV7YAl1zUBLSUI61IHcPRejTE/nTZ9ibJtK3\npQPv9Xaab32QQZlfYbrla1hxE8bmGr746U6mFSxFd/Rr+PNE6Hajuvw+OFeDbD+J2/0zXSlBbMGJ\n2H/3HWQMQVN3lrmRbI5IJ/metVyUOxHtojuR06oIhBZhbGxH0xmHf0Qcll2vQUITkayr8Ee+xX1Z\nMvHeO4nbsRyTHKIpZz+RXjvkXAmmQkTdBXQlx6PXjCI9UEWd0kOUc8kaAAAgAElEQVT6ygKQ2hE+\n7sB/TQykX43u+PuQr4ckFZHtLYjtbkQLUALqgghCZg7mC5bDg5cg5s1HqviM1s5vqJ35OsM3Lke9\n6XO65K/4Mv9enIV6XtBXYrUW4MkyoSqrhckbQTv4r+sisBO0xf0ZcidWw9ml9M5ZhtlYgKi2wiXv\nw/6jIMcQrDiG2PoB4rRkUCUiSAJC0Wzk4h7SG8ajHWtCqD9IpEhC9eOTKGaFzoRK2lXxWEtHEFLZ\naMuYj6Nbx9CdH6KvkWHq01CwBKq/BucalNBprK7F2DeUEJlmJbL8MURTkOBFZmx5Ivk9bajO7eHc\n5MWkGq+AnlZQVLDpD+i7vURKuhCs+1HmFiM6ylEc7RhrtUSiiwlmZRIc+D1Kqh+1XkLjfgP1V8/B\nzD/DTQshLg458h6CVIVffRWSvBGNS4fQeh94oyEuk54eE3b7xyiuAD2n3KgNFdjOrEQ0J8NjWyA6\nCVT/WmFm/ysE/8VC4n67jj5FgbZz0FkN+z6G5EIYNx9OzkZe0U7LyCTipidS7vaj9YTIGfQBoIXS\nC1AqtHjLNWitII01QXsE+WQrHfOyiO+9E85tIHLVuxzXXk/CM+dQZXixDwygiVsMYiKoB7A+rpMI\n0cw+vht13h/grQVQZ4AhiTAxCUprURwavEf2Y5jXCmt0KNpchEglysgMBI+B5vFf8R4/Mt8wmTga\n6GQP0aEB6LrOIJ5diWR34mubSEyTCrb+1G/0zToIeiDkJjJsDuHOdYTMNsKJ4zCrRiCJVpDUIKpw\nSi5KxQoGZ01ClG7B2WclpeN1xDML2DNpPONcBxD6HkDOW0K7cw4d0RJCUCTKmUNUdyfeej99yQrp\nQ4/j3XYr3mO7iBbykFtV9GT3sW5ONhf/eRfR0xMJJ3bgTXVjOuZB6GiD0GDoKkCJj6WLrVTrHQxq\naUAvu6DOgyLkoggBGJ+NaM8nlHKYp3TTOR0cwmsr7yOSMoLMK65GFamDs1sg51GcofWY334e9Q1H\nIPXf9VxzXgLeW+DnFZBTjKLdwU+ZRczs1SNlP0iFr4tPGtZzfeBHYvOeJrxjKg4xDqGvBAUDtWl2\nHLtcmHwxRC48T6WtiIMJI4hzNaDtClDYWYE6IYCxbjw6UQ9iALqOQvSC/tf9EXoIGaCxHrZXQPpw\nFJ0PqrfRcZ2FvoCJlE9akeNFTt0+lPN1ibQ7EiluPEpadx1CQOZQwW2knd3P/ul3M+/4WuS0JMyt\nOURqr0NVqODWqiHWjtBegCc8nq6sInyCh7i6j0hacZjKqy5HsWrI23cAuXgC4vObcD3/IZq+x9F0\n1yKJ08F/gN6oZTi/fZCMeZ9B4056//g5urws3DMaid5XizDjUZh0z6+vv/zjHH1XKMt/kew3wnX/\nv6PvV4UgQHx+/1E0G6VyJ3z3AoJhLPvGdqMXO0ms6KJvmIOWuHwy6zRIgVdgwFpkx07U9ncRy1wo\nVU6IkggtSUdMWYBr0ztYPEkEjy8n55COzkyBrimpxFafJtL5DVLalyj+BhooJb6qHiEYxrnlKfSW\nLvTF18MPH8HIAVC5DqHgC7RDf4CTZvD4EY1hlNgkZKkTyb6I+N5TDDU1Et3+AfGBTuKCXbjktfTi\nISZmIR9ahnGV5ROUkhCBMXegu/5p8LTC6tuhtxSp6GKEZhlN3VrCcpCW1ErEiEDsoXpUWQnY9Vcw\nNHyYc+o3ONc3gyK9lcSWLZwdNROvLUiJIZ3ctj9jrHoGR6MWR6+OsGBE5+1GOHEAg14iOpJJqH0F\nDZadGOI9CPEzkW6ehat2MWdS4pgwOhNL2IXX1MCJzyYScRiY7PgazpfBBdMRMq4mVFdFcvIM9Nvu\n4vTIq8h5YjfiC17Uy1sQahPZOf1lPmzdh3N7BfOGlKDYIHPe06hCK8GwGIZeDSevw5J1NbU3LyLb\nFNu/BhQFgn3w814IVcDFn0PdY7jCQaIclyJVP8KBSB/jbQ/yoD9Mnu8HFPUqtky8kylrPwJzIm2D\nEjF31KJxGfHYw3ibEzCd9jDDvQ17Riu602GY9TDhtg+ROkrA4wTRCxPvgB0HINAKH3eCXgApBH0i\nimE/noEiakGHzh0kYg3D9UZUoptB75dgnhJkty6abLUTnSERPH1MrQqD3kn2hh24TasJ+hVCW/xE\nitVUxuTRqmTjKFFh0VtxmM4Qdb4c4n+PalcAJUshPXoLGt8YBFMr0qlqyPdgqnmbkKoPUXChhNYj\naDOwuOehH2iDkxdB5vWENRrUE09i774Qt86N4cevUW0/COYoSMyE5Cyw2KHsEFx2K5ht/5Va/3fx\nr8Yp/2vN5p8MmSAdfEgnKxFztCSlLER/9A/YzDmsE6Yz4vxR5NiJODAjVtyPopgJ93yAEG8ilGGl\nd5iMIRhC1WlAVVmJY+vruIamE5n+Z/Sr7kVdu5XecDwdSTG423LR72/Ay2a00XFM2FIPrlZUmhNE\n6WDfmFGMu/URhLgY2O1CEfRw8EbEdD/KiUTEAW5QlaLEWZFauxHSdiM1/8y0zDtoFlVQ+jJypIdA\n+gBiemdTk9vANEsR4nN+/BnliPoEOPUNjL0V7twBm6bB1lcQx10PE95DXb+a5Ng5BIxaOuUXMR79\nCc2YFsqtQTYbRzDaXw7aUprHFmETY2jgPD2qbI5lxJLQ4SDt042o3X2oM1NgeCxKQhoRfztSZRXC\nlzfS8cZw7KkG+O5t+PZuMsYoTG00UheVgHX6bvQnCyi+6X3e/LyU3s4YLsvYjtD0A5R/SUJZM3Le\nIZSRL5Gd04L3YgvyQT+hCy7B7hboUzZz6+ZHyS/MI3ZrL3uX3Mg3yjf80f0ZKv1doDbC0JVIJ6/D\nUxSDVxvB4OmE3S9CfTlMWAJpQ+HYYhRjAa2aIKOEQRw3FvK8+gLeEcq53pwOUQ8ihJ3kNauoNGuQ\nB4Mj1ITFZ4KMwRgnXYdx1zLOXWYj+ocjtAmxCFOzEFqXExhoJilxCHr/IVhhgAHW/mzMIVeC7RTo\nRIg6D3skhEU/Y/YIYNhG+PRdSKlhpC43XcMtGAf4SN9QxvorJqBqbUdoVkCjQEI6GCbiGWQkUpuB\nfkcNqkQI5owiOfpbEqihLforDAe7Mf4cggV3ET7wAtWTO0htGooo5hHu3o8wbADsbEXaHkQsHktY\ncx7Nfj3IUTDjdVxnr8bUOwslbT+COAzzHcvBrEGcsBwDvdTxLDHMw+LOh+ZqaDwP276Bn1bAgY1w\nx1IoHPVfq/h/g1+LLxYEYSlwMRAAzgPXK4ri+t+N++05+v4dRDTEcQcZfIQjfDHappfBIHLYM55B\ndhU9EyZhEWOxN21AsWmQy35ifdotKHIvWiUb28ZheLTphBLjcY02Epg+HKNbh7J6PEiViA47jqM9\nRNd3o/Xeinr0ENTPLSdy7AeKftyIOGgRihCNtyKOQa+eIZSuQ2npRHn/dSh1w0APwlIIH5dgyHco\nITOReBOE8iGYAQ0K5m2vkH3qKyKEaBw8AUfhZnRjXiT9K4XUh+6n6UKJyBXfox22ATz9dT0AiI2F\ncaMhdz5oHZDzOzCmoiWOeMv1mKos1JbXUuu3sKhvFenOEhL67kNhBk0RA4mtXYyr3sPIwD2EzB7O\nPJpGx4Qo5PF3g2oywgkb4jYJykCIVmOq9hBYJaPUt4BegeMRpp7zYch1cbxjOMGqOWCO4S7VcoSR\nD9MUUgAvpAxFuWQUoXEhwrZXEN7ege+iOxA8echz7qVr1CncnpU05hixH9kJC15hnO1uLhJLOaMx\n09l0PSghQpLAmSFLcEWO07t+DsGlhUROv4lnxHEak0/S1fMKtfEZ1JrDaMwD+ar2C960zecrzzpu\njR2OJmMKJD8NEYWU8h20OGKxqzWYkragkYeikU8j9nYiOlQMeHIrsVofKT/IRGsGE9HrcOtjqc8b\nQN/ANTBzGUx6tj9TsqMcxt8OahcYBoGhADQ6ULcSLn+EcE8EW1cvslWL3gUhqwHPQgczAtsRfX4Q\nQ9DWhdxXSUuBhU7DMfxpPajVAsSrEC0XYCYOqzIGT6iY5QUJvDb3UnzrnqfaXEvyhj60qVehbnSj\n2tSI1JNGZOIswvkGgsoX9CXEEjEmIXg6ofolLK3tKNJOPNljcMV9iawO4a7R08v9uLgBO104+RSn\n+SD+PAdMWQB3/hm2ueGdnf9yBhl+VUffZqBQUZQh9OeLPvxLBv2mjfK/QR+swdG9Hs1PnagPjueK\nka8wOekxVNEzcPQeB2MHXZlnqJxUhDb2fTqSnHRYqugadRZ3gpduUxeScBWidjSEmvFMMBKKrkfI\nNKGdHUV6mZsmvkd46zza9MGo1x6ne/Q0tGYBoTkD3xXRVC7/hJ6Pl6E8F4E/CXCVGpoTUWb/HiXU\nDcsWwtkeVDuaobsFpWw91HRBw3kiTcdpilhIri5G3P4hvt8VIP/4DVLSBHLVY2nU76dXNRzF6oSy\nlf1/WhsHwbb++tJBD3Segua9uLYsoG7HxeyaoqGksJC4HhcNoRRMOX20dL2Hv+cgmdXHKep5EI3X\nir59BbnPN5Hxlhc5LhXneAdKXxlc+jjCSR/UgBjQEcZAbIeXKqOdcGw2XHoh4n17GNmTReG7nWys\na6eqpRKAuWMdhJJn4k5x0xt0EtF34A/qUbYH0KRWI1a+QVSXmei6N4lKfovgndsY1uajbTgcsm2i\nb+ssCr8/RUa7idfibuWTyGHOsp8msZ6iA1XEnC6DjBhEjYShdhzJ2wNE+1pJi48itm83m7xhWrQG\nPk0ciSncC2EPtLf1t646/AzC4D9SZD3D2fZ4DMeOw7ivIDoDDt4OKjXEGqDRhDhxOMYNy0ivtjP0\nvqPk1c/HKA2HWYvA1QKONCh+CAZcDDM+QmnbRcCxG09pIUr5n5D8AUJqNSp1BBEZKRymtDCTYHmE\nLQnF+Lpj4GQDEW2Emvyf8Xn9xP54EpPiQJPnR2mR0Tz7EwT8NIdhQfVcljW/QLHcQsO4GtJr1Oh7\noiAwG2zPImit0LwDqeMEgfnZ9NkCWNyDEbPqYUwApW0XOLWo+kTMLYOxtPahm1SF5ZpzmHkcDSOR\nSCSWCbTxCVXcg0wIdHoQ/3VNTRjpFx3/p1AUZauiKP8WynMQSP5fyf8bftP0hRKpAd+jIA2HnicQ\nri0CSxzm/yExGr0pmzbfZMwnR7KzW2RLxhSKW79Gx4MIMSOI+vIWxMFaJE8Vgjge4ZJalJYHaZr1\nOWavnpCUS3RpEg2xpWSZBITbnkJa9wK6TbtJt2/FH61D1a4m59R7nByiMP6EnXBWLpJtO32fSYTO\nridU6yImLw6hWoAyM5EiB5KhEupFyIf6ESlEGRYgegcQ2vktukAj8tSLkOY9jtC6k/zP3yMUowHJ\nA2UfQdG1oEuC3jPQsh+2LCFEkKOjR3Nysg0xXExccwej1p0jarIBo/c2+qR3SYk+g3nrcYKv6lHe\nygFlEgRykbxHMeu7sNQOR3CNgZUPgPFzhAQZRAH5bC96m4j96hSEMyK1dZ3EpN5E95GnSFVnk6h/\nj3nBXsoe2ESpU0te7WxSMhNxjczk/pM38lCwhHBTGTGX34ZollEd/xNM2IFmW4BW11EumTwBW+wE\nKAwSyxCcM45hcF2KtmU58w+V8fCEAeiOnmOxcA4l/0E80a2Ye16BOiPCtKfh7F3IXiO1x+2clcaR\nl6lmsmE5+Osg4XJoXg26WXDLCFg4Dr9uG4YKLwFTNC3du0ioSIKLtsLrOXDqEIweB6cOgKcKetSQ\nXARFFnh+CSx4DqZfBjuXgrMCKn4AazqKDJH2LgRRwF1oJejuptfhgL4g1lIXnvmXEdRUEqOWMSbJ\nZIdraLDryR0oEvYHcHxXQzDzAAa/jVCkC7yjiaSX0zx0KO+v2UBzch7LBhaQ07IGwbuODPO9iPX3\noMRqEZZdCDf9CJZL8RQcxm0+g61OS9SJCELiAWhUCA/5HWi+QqrrJWK/Aim8CQIOOHULgnUkQvxc\nTIGxEDUBBIF0LqCFj+lgNXEs/q9T8l+AfxKnfAPw9S8R/E1GXyjBtRAphUgVGJ5FEP+DDSwcRj77\nMp7G5+BLkfrkNJrGjGPizG606scRPTHIh+4haP8ROUVEsc9GQQWebvzBEgj6EB0CGvdEGnoFknYr\nWOqq4OH9RL67GveuH+g9Y0Gf5SPSFaFVFUdiXQu2pyH4eRQqQUY9LZqwCyLxRnSuBoS4ywkklaKq\nL0FyOhA625CvWY1oeh5CdvjChTLoAkS6+ive6RxQvxu0FshJgzM2yLwUlj4AJ8/A0BhYMBjShhHM\nXsg69xtkdrUxOFyPXOZGvHgFoiUPpfp1/P43CCRIaH5nQQnFo10yGJVlG1TMRRmyA6WvBbnoJUIl\nn6NP74Jna1CUEO5rLbQPNJHY2QWRW+kr/w65wUNP/hCy869CWnMX+GQiHjUf37GK4scewPjjaSy3\npRCcIHDFyjd48Z5ozFN2E+k+T9a0r4lsKMRz/m7Kv93NhQ/eArFDIFgOri/pixmBpvdNIsZhqKXF\n9AgD2NO3i9m1z6A5NhjKVoDKD9kKclYGzpHj0Ln34iyXiG5rRpU4Hu3IVaCxghyC41fCoOWwNJvw\nGSueD3Kx/uSipiPA6YUXcskHexEGXwKHn4S2AOg1MGcYZB2Eei2MbAaDHbb+COu+gte/hA0PgSML\njn8ObSVwxQr45kqY+RaR7R8iVpRy+veFZLecQn8qCHoD3dPN6BojGLra2TNwLC1RMVz+43oCbgld\nGERJA8NMhPJkgrY9vFn2HQdsBTz6xYuMOnKUtseupjfqEDnOx5BGz0R+OQZEGXG4Db6U8M+Lp2+y\nD111I/r4TxD7WuHMSzDwNVBroWMRfApkxMOCqyD5hf6U/N4j0PIN1L0JMbOg6APQxgMQohs1v07F\nuH9U9EWxsvHvnuveeYqenaf+x/e6P33x/7qeIAhbgLh//xP97Y4fVRRl3V9kHgWGKYoy7xfN6bdm\nlBX/u+C9HfR/QtA/8R/Kdb22AHV3G6prm+k7p0LSqdnrGYZrZDqX2V5Aq3kbdaUJ6jZDxkTouhfK\nB8D6I5CQgJKvIZBUTyTTjuhNIeQvoFFbScGGcyiqVNxHOvD72vC4NSTOjsU3zc2x6IHER/dQuPMU\ngjAR/D1QV4Xc66d2cgLpp4KIV7wD7ftRnMtQVIWIHZmw4FMUsQHa5+MtlZCLnsccMxU6G2DVgzDp\ntv6C+TVfQkIsHJVh2gWwZj/EjoAzJdDVzt5L/RSp2jAX3AZ9tyOE8hHPXQhjL4SSG5Hj1fTEhdCI\nFkyuHJTwTISqV6A2B65Zg3z6Qnw1tRDzJsaAH+Xd++GzTTijRXoa78AQ6iGiVRHd6CZ8Nof6Tpkc\nSxaaswdQ0gsRTvwEKUWUzrgA5chpEsozMBdvwRs2c1PZCkblbmNu0VGyV2yCqFQOnbMz/NNtaCzW\nv9xcBZqvQIn/kIBrCGrbboLKs2h5ErHlXoh9FYRYePkCOFeGUhyF+wI7rnQZU3uQHYnFTDm2CnXX\nSPTOZsJRmajiLoayl0GyoGT8kR7bi1h6n0RqWUlw/ynODjRhMMeRU9IBGeehJQyaEfD7T+DbC6DQ\nABmjQH87qKdAKNQ/15odUBOAu+bC7aOgpwzq3ShRqWBNQ6kq5fhDWQyrqECo8CFcd5Lu9lvR7zqG\nZ5iWilGT8JSGmbp6A7JWhhwD0twSQi138w5T2Omczu9bHiRz1EkMmovo7i1FV9KE0iOTfLADtSaI\nMjaaQLMHveyA2XNQXvka4SINiO2QMqU/iaZJBVExYIsHcQu8fxounQIJFrBfDLHX9UcyBbvAU9Yf\ni6+ygnX4r6bD/4Z/lFEer2z+RbJ7hen/x9cTBOE64GZgsqIogV8y5jdFXyiRBlD6wHIEpKF/Xyjg\ngY2PIIwwo4zU4VTfiOj5GeO5H3FmjcXUV4q/w0T3wCJS8sZA/l9KR3fHQPfjcJEK9DaEOevRHXkX\nTnRCz2b0Ex4mVW6H6QkIr1+DMasP9YUa1CUqdB11eEMmBh024JzXTKQzCpXkh3E3QMIxnB3lhOIj\niGIn7PkWDB4EwYDQkwgGNaiMCGIh7oRd7HD8jhn+lSjf/oRQsx9u+REc6f1z7DgLVX+C8Dzo3At3\nPAe6eJAjKCumMjbKijLgbsRV1xLKsCOm9SKmLIOWw5DzLeKRezCn/QmP4Rl8Qgi9IoB6MPSowOrA\nG36dnudmkHjFk4Rih6LKFTmi0tHqXMGoum5CA2JJiTqIotpAJOkEGakW/PIphHfUeKccwGAfhzrK\nRFxcDzHFB3nszhcZHF7C/NZXeCb7XlapZ/FO42M8V9xA+fdGUq+5A43pr2QTcjf4jyF0PYtKk4uH\n7xCVHahcLYjGuaBOhmA3RNnAaiJi1KLYs4jzzOZ81EFGeuoRQyr8nip6omXi9m2C1AOQVoiiC9M3\nthl96Hmkmz6GSyTUt31F95lXqZ1owJCSTdInpZA/BYZOhbaXYOpGWP86DP4QfO+C7x3Q3wbqaZA3\nA+/a2/BcdSWx/p8hdyTE+6D8MHS003FXBtFnPbC9DwoiKE8MxqQ2EipW6LFZ0QiNZDb2QMSAVNVH\nqDDMV7UvsCp8L1cb3mNV+1I0R50oHTK1F+8gYlNhHzoc64GTdOXHE11ai+vrANr5MpGqENKmowgX\njoO6bZAl9W9ezQdAEwbnWeRBH0B3H2KKB4a9Bf7jKO8tQfB/BvmT4KpHwD7xV9XfXwu/Fn0hCMJM\n4A/AxF9qkOE35ugTpBQE6RaETjdCzRdQ9+3/LFC5HT5fBMOuxjpCwRg+SpI4j+jCV5EFB1ev+4i5\nP+wgqmwmKZX6/7n4imE8iHqYswcu3QraaBjzAFz7IUgqOPAQxqE3QlkVvoxUnrr7ZZxGO+6iRJQh\nIMRriHZW0tgyjhPFF6N4T8DOu4nYC6lYNIOcQ+fB3QiDo2DjeiiNhyEToPpncNaBotAstON0JiF+\n3AaJR1AWPQ7r7oHDn/R7+kfeBrbxYG+AMydBF49y4hOUFTNQChQio+YQNu2CcW8gy1po7IbAYAhG\ng/IdNPtQ2+eh0V2FJ66bQMwgKLgRmnbCMwuRjv+RBLNI2KMiMn0bPp+KgWsuI1foJdo2Ba1NICQ5\nEeIvRdV6GoPyAJaeF5FsE8Ef4OywELuz1WyIVuFLeILJvjpeNkTRIhqIH3I7s3KPguoo65zz2be7\nCtPgcX/jQDKD9VqQNyGF3QQ5gTp8C1LpdlDPhJ6TcPRqFLGJcKqMbE7G6liDGL0Qg3SemP17+huh\nGjOJG70PsWghtLkhnIY7qQbZuRWdOB3l2aVw4hhCfD7Z1RW0ajXsy+kiknQZ8on9KLlB6NsA9hT6\n32aNoFkCFKO4XoDuCbDndlT+Pey+KIf6WS+C5zRIAQSdHY8pnsqiWOwFfpQ2mcAAgXBBhND1YYRM\niMr0kNuWQIZpEmJEBVIsqp5CDNUhfgg9wtzIJsh3IJtkgjsVbGtayVt2DvWGzbRrfFhb24kkqRHH\nmlH1CCghF3QfhdMbwRmA5ghU7gckyHkb4u6CPc+ibN8JGOCDu+GZp6DCAt3HYe4tIP2NI0xR/hrp\n8y+OXzH6YhlgArYIgnBcEIR3fsmg39STMgBqEwS6oOyl/gakDd+DZILGKtCmwOLlKDo7St9RJPUH\nCKd/QFO2mi59MjuHFTB7exni/Dvh22Vw30d/NcxaG8SOB0MMqG2wdh5cvpYQO+m7I4LkbEe363Jc\nmmQev/QWbvzhC2zpYULlXgJT70Dr2Uwwt4fccyfQt3dDfRCSozk7PIY85iBKq0AwwLbToI7tT3Yw\nfgkZqfDlDZA2FosuzGW11ahuXA0mFfTdhnLlrUTOtKB6dzzKjOcRilfBsathvxsaSmHl7yBdS2BQ\nEUrkJfTSDoQBUagC3yI0NkBaDuwIw8XjIWcFOL9DHTUIhHY84otIqisJXqqnO3EvESVMr2Mk6mlO\n+pqKGKg9jdo0HVVfB+qkR9AKqwlEPkKtehzsY6HuA/DlI8YOpdedxNEJsTQrDSR0NrE1UIVk1PGQ\nbOBg9BCSfKtpsscy9OK9UOLnkjXXYDV1Q8VeQIGqNVBzAm4qAdceBP08zBQhdt4FBwqgeybE5CF7\nxxFcs4mwoCKiqqV1/KMEtNswVPeidslobekwe1f/PR2yGPasJTx0Nt74nzF356Bsu+j/Ye+8g+Mq\n03T/+07npG611MpZsiQH2ZYtRzlibIPj2GCMTTA5DgwwwDDkNEP0kDN4SCaDMRhwzjlbVpasnFOr\npc7hnPuH9u7ee3fvLWp3Zpa9y6+qq1VdX/VRdet96tN7nu95oXsvSvZwxPN/IBTv4Iycz233v0Po\n+3p09yxEuMsh6Q3QJIE5luDAfhrkF3BpG0mTphPfuQxaFqG9ehSLWpp41gRXOG1kmhpQxvVhUPvJ\nPONDX96DfItA0gvkXAn9ST/hScOxat9EXfkeKHbw+xAyiISJzB/7W+442MZjgcvQptUjh9VoekIY\nW8L4grH0LtCS+k036vhh4IjHcmA3yggV/dY4LP0+1Gr3UGxoGaBuBE8UBHdD8lhkWyeRDhdSUwai\nsBh54SQofwJhvAUs/3QYJxKBbW9B6W5IGwkXP/RfIjXu7+VTVhTl35X2/9+up/zPyBHoKwdnN+x9\nBiYsA20Q+s+ieFugtQnhiUDehTDuZk4b/PSfuJ3pR86iWvwA7H8LMh6HmSv/5T2bNkLTfpRj36N4\nWwkuT0MJOlC8/eg39CJf2EOHKQblwEzstTUYS4/Tcs/FhBc+SNqhdwh6fkTnGU/ZSD05729GW9NH\n6V0LGBP3FJx5HEbOgPdehdZKuHISpHmhdQIcPg41ZylddTk5s19Ev/NOaNqEotFBjIbWqcPw/RRD\nd6KWqd0CLDuhbTZKwyaYEU1kxlVEtINoVHcgdbwC9bsJjbgTX1QXUZvWwtH+oZuDwR/hwsUo7koi\nhhn4VBvxWT34ZJmgVqLpaAK5PU6SttUjqSyIoB1MrfROiNVepgYAACAASURBVCFmWQkBcztu+TVi\nVG/Q17IIS8VmNNIr4MiGUXNAUrGLrzjn+onLmi/AYAhA8ya8NgN1SdWkmk/g6h2Dtm6A+M52RP/g\n0Oeuy4I6AcuvBK0bIpvB+lswBRkUnyAdcWMKjEVRtxLw70e1S02owUNglJ7u1XFoBi4gqVFB17UO\npqdCUd3Q+/bUwwPD8V2ThTTpTXTMAF8Xyo4l0HIMZ282UbrRHPY0Mbbch3byWLTzrwTrIJhnQ+QM\noda7qUuNoyPiJatZIfVEBzTWgiMe4hMgy0+ks4e1o+9gxeEvSG+pxhMC2aohasS1iMoalPGz4MjL\nkGME1yCiLQzxLiiRQK0j0uWidvR4Pky5mNuzX8OkdKOT/YgygcojEymcjN/UjnHAiuQ7O3QbaitQ\nrqAMV+MKGbDogqjC4SFhbQY0ArQS6IygL0bxnyBcaEC98ENImI5clw8+H6quYhj3EFiHw/5PYeNz\nkDYKfvvBv949/435W/WUxyqHftba02LKr8es/640HoL1q2Hc5bDmu6EAeQBFQXyZC+PvhOQ50H8W\neo8wNtxNrddF1ZhF5AbeQX2uFRq+hOnLgAhIBkKNu1GVvIxoB7Is6CrbEY4X8Y0eyYl8F196j/J4\n8+vo837Cq46CBgXHzgo6Yt9Cted1xIhYwuOXk1u7lsGisVRPaiF76xlgJQz2gGU0uDth0jTw9kHM\nQ1CxFzztyPNuwx/lQ//BNdBXBt02RKqWbpefMiHot0fwx0X4UUzh0rZy8uOaUdUAxYdRGaJRCRWD\nru8xNmxFjq1EhP2od/0ABY+B/DTUfgWLfASCeygxO8jxfEjYqqbXMJ6onsNEH55IYvkOjLk+xPII\nojwDSgMouZlorc3wxBi0tjR0k31wHhjsN9JUWEHcppcxFXyFJA0VsBIeJLqtm8FwF4bkiyD7cs4o\nc3F0yxi2jsLb5EYT00/PBQpCNhD1lRpNbyJilh1694IpAaQcUD5CCbTjt0F4hhnjFxm44o5ibgjC\noIxqvKD/d1mki08JvvAnIju/wjUuHv1gH6Gc1+gSt+IMp5MycTH27zexI9JPiQGc/jj6LYcZbXuX\n00GZ219/nsyUQcI/VmP+6EZo2QsNncgf3kzTe0twZhaR8W4ViS8cxLJ+HYj3h+5DpHhBpYfKVlSx\nedzx4gFevHglc1I0jHJ9iVY1CXHqE8gcjtj+JOTnonh6QHSBLR1OZeC2t1CyNJ59rlnsr5/N76I/\npznfgbUyEVt6LXVVY8nwV+FN9JFaMw5pzDMolRcgbBMI33sXyobpqL8K4n9xOgbfEVQVvXBGoBSp\nEBghbiI4w5CqQ5lwJdT+gIgdB1vvh+FapKwT0LkGfpgLLROgaAk8ugOM1r+7IP8tCaD7z/4V/jf+\ne4pyX8PQ9N1Rv4EJV/+LIANEemHyXPB8AJbrhkLe696GsJvMzHvZJp8gRnETVxVA5DRB+yvQ/jlU\nxKEOSeAYiUgsQChnIXosPruLr9q+ZofZwWvfPobe1QTaWCR3B5H7o1Crk4n5ZgN1S+YSnlJByp7r\n8eTfQXOilX6lhdz96yGnCKIFyrF1oAHha4HRo8A4Fvqvh2lLaL7gtyhSJ/RWQWkr+CrhjB/H1GtI\nnVhAq6qC0ICPe0rfxNrfDwbAZof3FsHNu5Ajnbjq7+Rg0VhyvamkSVqkSCk8exXyeWqEUcZ90kDl\n4iyMhjZCe8BhvA9HxRsoJW5CUYdRXZgH71Ujx+uRLnwS0fkiQtmNwR5GnpiL5JHQlTRD0lsY8q4j\nu+MM4bq3aXKvQmWdjUc3G01ERfHuZtyTPsTszSWs3wjCj9WRjndpFNH1AXSHvyX0g0xPqQVnMIfo\nq69BO+aqoXl3Ld9D3Xqo3YeIcRAz7QDd+gfpS/oQU5sadY0aeoKowxYyHtUiNDega61EKTChOn8B\nga1fE7jpIboLN3Oy+BWaRj7IwoqdTBp4icTcJdh0EK0D87lYul99BvWFsUQbJCKBywj629Hs+pQ+\nOZ6GxyaSYlpDen8+kfifCDs6oWUTzPszpEyE6m/gr1fAaDts3Yl2wMrvR73Cy65PCYz7K1PV2UM+\n6dbvhrqSgQrElLUgjoFcC/PH0725knUVNxHQe7nV8DbPWJ7gkcFbcSWmEhtVgt8ZoOqyZOxHPahx\no5xcSWTEFKS+PgJfzkVoVagzjST8EECZ2ocSJ9Hdl87NbWuZLB2i2HmGEbOWYJl1HjRchQgF4Ojb\nKFILtHUj+n4aijO1RMPylZD7y/Yj/9/4R8Zy/hz+e7YvfK6hybv/r35XuA88deCqgv4SiJsMwTb8\n1Zt4b8p4bnj+XTQ374a9f0ap+xER6IUYC/gHUcLAIAwmJvDq/DXoUuwMVx0kqsxIsWcUImoeAz8+\nTnhqJbaBGrptCcR9k4F7eB2qsTZUnnxKp01AL2kYaD/KuCe20nL3YrSOQtwde8l9dxuqqZdD8WJ4\nZTlo49j2wFtMYBo27ODqhTdug0APhPXgbaI7I0inRcUIEY20aitU74YNj4LdCtkTIctIl9mDOeEm\nfJ53iO5/j8H4ALp9Al1FN8JiIhIy0zo1C+xzSd24CzF2DIrBidK6hcgwK+rOsXC2BNkVRnXVEigZ\nAZlGlFObCTu+RtOXRn/mcKw/7UV4gpBhhO+6kSdeS29kCw2pMaRe9gcs396DIaqHTXNvZRpxaHoc\nWBKv+eevRu4uw7XuGtwLr0HbmEjjV+tRmewYU9JJXTobc+Ny6PXCuX5InU9k3FVQfQ2qqABEz4aP\nTsBwHTQmg94DIRW+VUF0+pVIvndRfozCOTyOwE8DiLCWqAunYmz8DC59H5IWoHS0E7h7DcGHbViy\n30e8vhTFqKE9dAa9OozXOpHEkfehGlEMQOSbLxGtHyLNvR4lbxEu5wvYvjgMU/Sg+QG+nwX2HlCq\nkIv+wuuFo5gsV+OQiklvaYGSe6H3HEy+CowbwduF8+gqbmElF+dauIgXuKFjEvr8AR6LfIvN5aEv\nt5eBJj0p/dng2Y7KPhlZOYHqZACCEWiCSEEm6kVfM3DR+Zy6Zhpmcy8bSp5iWPoA3uRiVsf+FmvG\nBbjjvkFfW4VS0YXGeCuRYbVIn1Qh+pyw8nEYvxrcTWBO+5f6+QdMIflbtS+yldKftfacGPXrjL7/\ndPbOHfJfnncETlwOtvMJbn+Qitw4kk+2EeXz4ElPxzssnd6oJgbNsaQ0tBJX00XImMzHM1dzImYY\n9wS/Jk6XS7NrBBl/fQbrYRdt1xbjK8wmzXWE7XnLyO9sJu3j5wm6MtHNXYQk6WD6UygfX02vfBhr\nWQjX/Y8Q7HkX26njyLlPYf7pGfB3o9hy+P7Om1jCP0UmymH4qQh058PWKiiaxzndXg5m67ni7G4Y\nmAZIEJsE1hw4+SNccBvhgac4XaAjx1KANrifcETCbPwUyfU+vopniLSp8aTp0els6CyzMFR8jhIn\nkP39RJLVaKPmQsdhlG8VWP0xIpQCT94FB7YjF0JYxCJpJSSDTCBOQt/XhWIyw/V7OOg4SoYpA33X\n81jLDuNNvxBvsBLziUEs4x8cmvws0sDVjX/z3TRebyD5bBKmxNGISAOD4j52FBejBAeY+vRM4lc+\nAWdPQ+sxOPoNxEowxgPD1sDRt6FLAU8ytHiQJ0UITE7BkPMTdD8FZz4E+QaYVo9X3EN1xV3kHnZj\niB1AyfuE0I1Xo7n7HoKL7firn0GzvpxzV2cQUzZI3AE7/DkZRfGgsW5DuPuQn50KxdcgLniQ/mPX\nE1DtISHmcxB/AikVVrwEKyehDJghuw4loZC3Jo7kctVz6KVVqPfXIkyHYTCRcEsR7tQargh/zrMx\nrzDcEkCRM7i3XE/hlCNUlazgnpQv6MqDtLUqVON2E1YPIMfmoD5RhXAC/RqkkQZIsMI5GfcBF/qs\nGNRjuqFVTeii7XwWV85SZREW5+24bVUYqkAJlqFWPQGn/ogwJ0P2dGg6DPbhEDtq6Ma5ZBh67vwG\nLAWQsBKsRX8Xgf5biXK6UvGz1jaK4b/2lP9T6G8Y8iqf/RY8DcjG+UjrroHOzTC4Ea3PRMuyRFqy\n4+mNtzGyy0VOcx0xtU1oB6oQUVYi0ekIn5OrPnqVNSELkRkymp96KBjtoS1pIjr/90SSC4nE1ROx\nltOqGk9GXwUvXnELRZVnmfDVRxhmZiB+UCEOf4T2T/vxBFYT+/FGmFSK4lPRL94nON2OumY44Z5j\nJHZEIIGhHcqZWyBYA5XlsOI1ODdIarlC18xY5INqpMI+EHfBzpth2Cy44zMi71xH9axmhoW70Z3t\no3H45aT3vYxkjAfbg+gyT+PL3IHWMkCkz4M/agNKmhldawvIGkKDRsIV5Rj9epSsh+HhJxEfHUB5\n7wfk9xOIqD24Z2hp9UajJYQ+rCLR60EpN9J/8hZill5ASmAK/mo/qkiAKOf3mM+FCZBMyegcRp49\ngeqVZcj6WLY8fwcTvQdxjtiL7txGNCNOYDHnsrStjmBvDwGnHyU6HzGtCJ58EQr0oO+HYxporIdT\nChSpYUIClJ0hmAXaQ0YYkQrRl0POJti4D1wzMVYuI8/loX1WFqmJc5A2XYv2jfcQ181DX3YZ8nVT\n8N6mEN8SIvb4IKop5xM5p4WGzYQX3oT6cAJC7oSxSxlsuJtu63ZyqidAXhAGcyB0HSz1wtil9LTe\nii19FRrnXq46EqJk2DLSNCXExXQgHZlMv7OZlYVvs0J6lo/0c7FlfwpeE/z0OCWTfo+z38wf9Q9T\nVyCRfeJG1OYvQBqPuuwgBKrxFaQSvDwHbdiMtsuD6kwLQleJ+TwT1CvgiUMpLuKHuGZmMJ0oYQXb\nGwh/HuoKI5FYLcS/AXOnwvFRMPJpyHXDzruGesiJIyEqASI+0NhBaCE8AEpo6OdfKL9Gd/5SGWyH\nnX+Egx9BhRncAxCXQ9ONZ8hoN4HHC2lGsGcxofI0YaHlXGcq0XGLsQ6E4MwAZEhgM6JuqUCtWY2S\nV41sLIXKZDzJS/FsL0G381sGjF4ilz6KapQD1TTBCsdutIZurtP0UpuylH3nRVE7eiK/2f0puqUP\nERs9FWXyJdDxNhhiEZqZ2Fo+ISxpwF6JL1XPyG2nwPAHEGbo+gIl9QqU+Bqk3U/BPXVo9wXRhttx\nRTmIrigH2wVDuVUZw+nSHCRwQx1JzkyiDmkItQZJfvt2fBEzjMtHd+HleKOOoYR1RP3oRWrxIceM\nwF+QiE84CafIBHNNiOQ+lP5LcAdO4dG7CfVeQ5SrBXWOgr8unqiImzv8n/Kx3Y+tczvwDe3z7DSk\nKIxtfhH8n6GOdNGbs5jYilOI7mY0M520B3ah1BwkKj+FY+eNYVLFaeJr3ERMQZznzcOor8fMaOQe\nN7rEzKETvm4X3D0L0togkATDOsGqhZ48UB0AeTwcikMZ2Y6c1Yl05CTK5yOgO4Jo6oQoG0rXOXjw\nGwwvnUdaznLUYx8H9XNgboH3tsCpgxjXdxC+5zL8+qchfxQEzqD6+gyc/wQSN4L4C6H2hWjjC/DU\ndmGWPAzMG4et+RHQ30XAEGHvTSNIPbEWsdpE7Mca5PBo5JUjGPvlvai6QyjZwwldaea1qpdor+1j\neNRRouKzYEANux/k8RG3sjzpI0b1yoRHh9HJsTjVfyWS2YKlFJThabRO12IyP449Mo1I3e8IO0sI\nXpiG2t2OptQMbWbExUdxtswlSY4jvacJ4tJQJAURGQaJuwAbkbTxqALLIO1eCEwFwyUw+0VYN2Io\nPjRdC6bhkHQROC76b22J+/fyqyiH/XDmz9CxB/RmuG0XitqKCJZA5zraCgeJMddhaQhDZAAiJ4jx\na6lNyMOWNp1D0ZPJ2l8G5hpIToUkNTibUYoW4EtWo5PfRtW0gajwKZh5MYxJQbnxfkrumYfU3Iyn\nqwDjZU/g0odxdH7BeDkJ+loY57Wg9oY5m5bKDEVBBD+B5AFIeBysExDhmahb1+JT1WBuCSJNHAn9\nySjb1xAOGHn9Oj3LX2kjwejGW/8muq43ME2bQfUYQdFXLUjjNSij4lA0XQTca3DqLyDlHS2ibDtS\nohVfpwbfNg9ByYc241k4HkQIDSImSJ29AH98FOmfbMNk86CkFeNJLCEQhs6MBqzfnSaxbCGhyn68\nMxSMQRPK6amoWz/njfOvZzBFQzBWRhfUIPvDjD7pxmYOQ/s5VFaZmM4DUOFDrNxFbfohUkIGti/N\np089m3mNJaSXtgKlSCkP4KjspT/qaboGb8NWmoBq1Fyw5MLxs9BdBXNXw6l1MCx3aBq4rxb/8kfQ\nVO9EFSkjZI9DUzseor6HgSqYaUNpiofMMYS2b0L9VSMi2o667zvgcZh4N/y4BibcDZMfgJMH6dz9\nMDFpQfzxVZgqTGBJgkAbQhuDHHcJIv8HIsKHO8dG2qlUVPueQulzU6XPRwmnM+allyl5J4c+CnFd\n0UZmrwfzN+8RHDEXY+q9qLoOE9i9heti7+fOmaCcVSH5VCiVq/lTxl/YY5jFC2YTKbFNBJsF4Y4f\nsZx0IR8M0m6YTn9CBQn+aOzmhRCqoiZ+H3kxj0F7HJG2B/Al1qHcGseg6gG6tGlM2HMdpP0e4qYR\njhxBuE2Q+CCi/y/QVo0IH4BmAcpaiNwD2jEw6yJoLoFgCJJnQuyS/xKCDL+K8i8PtR4KH4Hq96Bz\nLzR+RLh/O6q+XoROoB49kn5HOhbFCzEfwzfLUIUXknPaSYf2My6y7ITNbVDcAS8ngiMGZWkyHtst\naIO/Q6UvhKxCCLTCVzPgwsUIjYzvxYtpkZqJefgs1pP1OC5cCaIGlGgCGWYsga3oLtrOjJQx0PoS\n6HtBXQj2ayGqF+qeQen0oYqViAQS8He8gW5nAHVuDOqBeK76tp/BCSvwd+5Bc+xPhCcESFC0tCcl\nEphkRrVLR3BVgFDrAFLvVYzMeBjxgJZw5aWEmlZgyHoY463PoxnwoWkPEMjVIIWDhE5DsL4NrQLe\nMxo0q9Qo5wxI3gCG2nhi3ZOgpAS5sAB158PU2B7BSj+NU3U0OS7lNyM2EuwxYgr6MIaLiNgmoxl1\nDdS8juJ7B/G1D1J8RJZq8NjXEVHFU6euZjRFtCoyE+qOgzUJmhyQq8CYPyOtWYOi1NL3fjp2/1zU\n7lak3np4fS/U7oCEJEIdKykPbGL/NSkENS0Ut3Xj6HcTq6vHXDUFYR4G0dkoLXZ86ZsYjDoEV44h\n/sFDDI1wC0JDPGQUQfErsP12WPQxkXFW5OAg1lfDDF44BZ+hB0PCH+DcTvhkJXIpSNmj6Ti0nASD\nAW1nBFmbQ+8EH1pLLw3N7ZQ/OpLR6mqsaxORNUH2TjZgiSki477dWA0PYn94NjqHjTj1FFxn1mNO\nNxLxlHIm5QKSUpdhDYSJ1nfSJkqJSVtMzDsh1G9+yqkaLerCA6StGIm9JgJ1G/GazmEyOxANpaAo\nqPPeR6x/GPctsXiCP5ATMsL31fDckJPCr/oAKTYVjm5AqEMI9SAM+wMc7YKFn0CkDwYeG6qlvK8h\nEgBd2v+13H6JBIK/rNbKr6IMQxOL82+A9BxwXocq0kC/YsFYrmPYvlZ8VgGVARCLwCxB1xFUk4wY\ndHPwHT6Cfo0bNiswZiwYkwikRBHRb8Qj7ULme/TKAhjsgBHPDDk0qi+nMFiNdcR99Dx+KYEXniGj\nthQxKw5FW0dvRh+JERci3gqufYT8+1FMETTWYkTfm+A7CVkv43Zfj7Zbi1ZzDmWbCrkwRGTkI6ia\n1mPt+hrrqP0gK1DRBP6/ECPl06Z9GX9iKvpULab21SimBOy1O6H7ARRPM4HIKbSyimDgVdpHTSD3\naCeKrYSBiWOxHzhJaGw6ufNiUHlLULxhFBGFXL8fIhLakB5CH8FsFcL0HdLeYYyJfh7pTB+GcRci\nTfLgro2mPz+flN4F0PkpmugMMOQRcJ0iolLwnZ9C+8w0dP06HCfO4MjwoEuYj0tXzpxICiqjCurT\nYNwdYHSjfDUf/axmLIVxKGfm0Zv+LEbjMMSNg2ilRtTyPIS6EfWGxxmZlUDWp+OomVRKknMQz5Vj\nUH1ehfj8XQiH4ffRRCyNfGK7gos06zH7+lCGCeiwQ3MYkeCF5kMoxlsRI8Yi712Nc66CVDYOVZqM\n9esw/fN7kbKj0I1+A+QIh6+4hd0WDYUFMHvnQZS5fybyxXPYj3Shz95Kat9ynMvs2BtPU7tiOFXp\nKejRYPNG0RwVwji4i1MBH8NrR9Gt/gKNPgGbZgxyfy3DR++gI+YNEvvzMbgcaL7IxrXlAxRjNfbl\nZrISLejSPBhfPYlymwFx6G2MO39EW5ACq8bC8GWwdhKVY0ZxuN3HCvf1GAO1cLAO1r9E5MpLCbER\nveZZKH4dUXUJ9G+Hs9eA2gdKBFR2iH4JgiXQdynI/RC3GyTrf3ZV/2wi4V+WDP7qvvg/kT3g+YBB\n/UHCymksFT5qo03klw6ANwSuDpSgBhEOwACcLS5m+I/HETMiBEZfRzAtAr178KuDhKRoUkwHEEIP\njWvgyDnoOQhTb0E2dBCRXWgyP6Kr+kliH9yOlCTR8PsMHAecmGZEQ8p7dPctQhuuRuO3YTzmh4I5\nMOozFBGkJ3Q1sU/2ILRHUbLCKEEJTCBFzoNT3dDhhEuWQEoenPiAsqLVdI7IIKHhHUZ83gYjIxA7\nAbqqYfYL+BrvRSo/iq60m4hdS/e0iwk4KknsjEF07ENpkAhIczCm5KFqPAJTB6G9HjoEwbl21P3N\nCDmE8Gmh30TkzFKkvh9Q5iURjKnBa1aj7RhJ10QvOkMBlnoZS1cFvQMxaFXH0PgDyAvLMYQ/pk01\nnb3Bcyz7sQTZtAV9bg1eixGDaS/ql5bDPZWEm1oIfbQE/YgqxLQP4XQjyg9PoGROwX9BM1gN6I3r\nkd65j0hmP5GSQ2hmFyA040A+RGhTO+r9YYTfS+SKOMLFNtaN+iNXHngGKVuHPmoMtB4C0QmdfijX\noTj1yLPWoSoUeLiJMu8qJr7wEmJQBaPGo8x/AefgalSOUUQd7cZ1sJYTt4zgvb0P8pDpUcLf+qlb\nlE5mSi0Zhxo5x0iilqjJbtwHdSHonoX/ro/odb0F3ds5MGIWPVov9rYBYgM9zCmbTE9cM5VjTpHV\n2E553wzE+hjSvS5iLrkE67ypiNpnkTY/h9IQJmIzIxwjELVViAQvkYCCWjsWuvpBSBBqIWQI0mzJ\nIWn2aPRTPobfLoDmk8ivPc1AypOYpe9QMwZCPdDzVxA74UA7pKZD9CRIu3ZoaIJ3IwS2AwrYngeh\n/7uW6t/KfWFw9f2stT6r/VdL3H8mCgqByOeEO56m2achf/cpxLB4qO3CnaLH9JNC+Oq5OLPDNNW3\nMOaLUuRLDWhTv4ZHX4PnPqM3+Bb9nj1kbRqPNP5TaNFDyQCMz4OgCoxxIPWAaTzk/w73lodpSfqJ\n/B+Aw04G7oNgsgqDAqZQPAz7C7Qfh9YzBN29SAMu1CWNILlhnAO0LRD3e6h6DfRjoLQBFDMs+i2Y\n7NR/cR/11z+BTvMlU9e1IwZPwbD5KM7TRPAiJfUTbM3G5wFjVgcNG1QoGgeOpDwsOfuJmCxoRs5C\ndfw0Yt5c6PsBdBbwVCALLYomhOgZB/X7iRyKQm3QIScno5pVjzdlFGj1qBta6Bk2gKPdiL85FdXe\nagxFHYhgOkxJRE55CNl9A4PHJ2Oa+xEDdLGj9iYWtu1FZAeR6sZhONyFfOkGwn+dh2Y4KNEX4Dmp\nw3LvG9BRRfjgAVTfPQzdrcjpGpgwG5G+HNFyK6Rfh8ibROSje1FqelE/fQ662pDzx3NWPo9onOh9\nCTi+PITIzkDZWA0zdFAUIbRtLNLuk0hzl+Ce40b1ow6nz0lKsAdiU2HGE5A2GV/wS/rUt2J/TsXg\nJVZakgUZJzXYvOcIxIxD92IDrkseQ3PgcZpiY3my6wHkAQMaESTfdZh7Cl6nY+ZlYNdh2VdP0NvO\n8QVjGfPVAeIyl9J98XgM5+pxPfYpUcnxWJOiUBOE+GEoo2bTnfsC9o4uiNRxWnMZHyRk8HjPPjz6\nYuIqj6ON7oS4OORdDgL7viaSEoXpXBfid7eBrx7CAfhwI/4/riYY10mU2PwvhSEHwH8C2s4Hx3qQ\nE6HpvaHc6VAfjH57KHnwv5BPWdvr+llrgzHWXy1x/xCqTsJnL0JKDsy5BDLyARAI9OdqGAgLNLIJ\nv2LF8EYacn4/mugwgekRwjEtRJ/solObjjMrCcfHrbDoKkRGHJSvJzbqfOxXP87gpHJMC1agVh2C\nB05AuB8ufR22rhgKlenZhHzmGNUXKIx5rQHFsJLux35C6pSJcXYiqvNQ/OUw7CKwxEKsTHB0GNPn\nWpRIEAb9iDIF8meilL0GLEGYgUQ7VG6Bb++E8/+Mw+DDuOdtHPpMBKUow4bjcZpRd3Th1wUJaxag\n0ZzDkpQAqa1YXnHg1uRhPxdEdOZDgRfOfQdRwyBmHBx/CbImgnoG/d5snFm78Bf8iXjXO9jE9wyk\nepCzmpG0agZSi9BzKdaODzFs/gS03VhOJONaGkB0aRlIkom3zYZwPeKsG1v6CgQaGoI7mPZUGbxu\nZ3BnACmpDK2cgP/FqzFcNhLhysBb2UKgoxPL1lXITify9j2oFi9BHKtDKpxHpGU9ovQJFK0eBj6B\nvmg8t/vQ7jeirp0KyfezUdbh4BXigksRwTD+XAX9kRpEnAVsk1Hu3YYcG4HpTyHVPIKp1MChG0ei\n800mueEsYtACcTnQ/B2G1BU4StvxDX8CT2wWKb0HsagFIu0mDB+VwvQlRO+5FmVAS8qCdD7WVTJY\ntwFN4m2clNPZJhWT3NBHnv0Ehsy78R58kcLvfiR+wIKq8mWS13ogLGHP1cK8a6DoxiEB7DqHKN2G\nK7YNj7mPNN91jFdX4mIFPXxPZ1QNiRM/g+YtcOB+/NafaH0gnrSvW0GvgcBI8BVA0VJ4zkdI8zAG\n7vrf60XSQWsvNPhB/SJk7IHoydC9AyofgOMXw+jXqU4yGQAAIABJREFUIWr0P7qS/92EQ7+sG33/\nraI7/03yxsHcS2HDG/DhU1BXNvS6HALfMSz6VUQ5ywkf8ULqaaQY0Db40SvjMH9djUY9ghFnyyif\nkkvEEIvybSfh5FqUhu/ghZuQ5q1Ef+cXVMe5CUbZ4bWnocYIxx+B6HyY+TGB6bfSl1xG2ulmFLOa\n1rn7MDkSiNULBFPAHoNQwogqI9SOIBi+EP2Gfpg9Bu5YBCtyUHobUSYHweCHRftRsmJQavdB/vyh\nY71b/opZ4ya+tARp7rME592Lknw5uomHoDiWyPVPErk+gajM2ag9ZxFCS2JtO/HtLmjfBZltsC9r\nyGo2XAdSG0RPgPhbIX4lUYV5xMqdOMq+RG4vZ8t9k/nu+gv55OJF7C0YQ2PHAUwfrkIdzEc6bafe\nu4jwzAbM4QDN02dTN8lBqHMv+CuQ2vJg2GL8vEAGRzHt70VuaUM77y+IYzZ65g+gnxFAKvwR3+w7\naPdUYVj5BMrsvxLe34wmKYSo3w5zJiPszahUoOR2oqhCSNVGlPYXUDVE0O0vguE/sN8SjdzxKROc\nNZg6BNEbfETcOtzTooik+gkbG1Cm6RBLVyFSjiGnFUHBREbtOk2aFESc2Q6pLjj+OxRjIn75USLh\nR9FMLybReAfuV25C1j+JiNSCazfEGFBi5iF3SmiPGQl17UXb3MzWKTvQzYhi3oR1jA3vQ63Uw8zr\naVwwmlhPF6rEAMSHIF0DBgHuCGy8CxqeAdcH4EiGWVcR54uhyppHpbEE2Xwr5w18gU0XhYqJnGn6\nGhJmQZfA2OIh+6Nu1F0KEZcH/747iTgMoNKjaKJQcKJhzL+umewFcDgTYm4C2Tv0mmMOTD8M0/b/\nlxJkADmi/lmPfxS/7pQBpi6A908O/cv16dqh5Lhx52DkXETG3Tjue5v+Z3woTZcgmk8OnWaqGYAW\nwLQLlUtm2IEOqpYvYuQHHyM+86BE70a++hakvAXo1DJ5PEWz4x7syiY0i4MYvvXCuibQ6OkY6aeW\nRgx1CmmZHcSfmol61B2E++cheRORMnMJJPjRZpeDCCC+34zkKsT33XGM1smwpwnG5aK8WAJFqWBY\nAN39cOGNUHQ77PktzOmHDXrQx8HJDYQrnsY9sRdNxIYzQ4PZvwVH3fWIk1dC3kKkvhqEoRqL6hyK\nL4JQrYFda+EuM4zaOXQYYNx50LQWRr2D3PcIwjqAddN2euakkGxqIsZUjPHIMTI7O9DZ53GqeDxp\nf/oYc1wqZdZZZBs9KK1byGE78ZO/wWn/K46adUSyp+NnFVquJiZ8I67MLXiu9JPwQQ6+fi0Rycpg\nQQxWoaabV1GdjmC8fS4gCLdno354NyI6ClRaEAIx1Ynq7niUUdNh9W+h4nEMu+oRv/ucGtGC0+Nk\n2bFuwv3XoJ0ko4qbibnvEIGgA0XXQkBuxZgmo0l4EHd6Dpada5CbfiQ0diHGw19Cpgw17SirNxPi\nLQJdlZirfEi5DyJURWhM+xAnj4MsYDAGZXIdoSPVeM7XUT/XB/4ECir6ubBlAcTuR9Pgha5WGABe\nHU9a0EenykF8Uw/aYAzotBAOQmMPTIoD10ZQzkLPjRA0YY1+hDThwWnahd/1MQZjIb2ijEmtE5HW\nLgDrQ2BOhogdKTkdUhwozceQPD04XWuIdC/CErsStZg8NO5J/B97N0kFy14Ay5J/fK3+PQj/snbK\nv4ry/yQ2cej59rXQ0wTPZ8B+FYywIeaswdD7Kp7RJszlXTD5QVi0GF5eCE1lYOwmOdiErbQNcoKI\nFhuYM1DyEogM3omq24iqaC8pyl30hyfgyrGQUlCEOHUAimahLtnOhEN+SjPTSXqrD+mdy3GfrUI9\n0Ik2ZwecbUG1cC1++Wk6LMOIvqITrSLxXcItLH97HVq9AEM5QgaCfqg2QmkTXP8uNG6ExG8gPB4m\nToID1fD1WoyzQ+hqoXJFBgkHKog+2ILQvYwy7ipEtEAwGrRbkJQe5DGgnI5DLH4AtM9C6XOQfjMc\nOQNxesL1O+m2bEYELTTOsxEbcDPqux4Cc/XoOgZwV4eoG3MWp76DQl01PbNuJM5/Cn9TJfpQAqI+\nQFTs/SihRlAGkQb2YVKaEMIGRtCcdwX9f3gE33u3op8sIZ25CP/4dwjIRxFCjzFYiNBqCa57B82q\nK5BiokH6X/60TdFw+VuI/c9DxddI4/5CuOsgntM3MKhTsfDYWehrRE43I7QJiMgiAtYA5+YsIkkq\nR735ayLRk1D5dmGujEHMWo5ql4Rj12M4C1LwxdgwhFch/jwB9Q1f8vjZTNYKAa23QVsRsfJ2gvH3\nITkPEtLbaY2xUbcqj1B2PjFSFoWP7USj/Q14ImAvgn2PQosEYQ24KjHVhyDZxvrLlzNnczVpp2ug\n1wO9Kihvhc+7YWEmJNvBMRW+eZb8R76ll9ME1m0jdPtKols9SJvvHPJqL/0DpBrAPwNCxyH9ecTO\nZYhLvifmp98QCJzAG/oeqd2ML7AOvX0FIvf3IP0v1rGRi/+Bxfl3xv/LksFf2xf/FgYf3PoC/HED\nrH8Lzp1Af7QI3b5d+KcUw547AAXu2gajZ0GSCtLMmE754WAUTF+OeP44Ks0VqJSVMHCKUO8SVGeu\nwv7DcFK3NVBvtoOnEl5fRuJAARXXvossCpDSCqDjKcwTFjB45jL6jtwCni7U3W4MqkQytS8RlXKY\nUPytKINncDV2410lCCdKKC3RyH1++OwpyI4HuQ+Mb4IUAfNkSF4AC2+EfC8EfEiynth+O5Z6Hbga\nCMfb8BRsRXGtB2M19MdCvIGe5EtwbnqCN3MSkD1ulE8fhjfvIrzzSZQ73qf/8MMQ04ehSU2Bq4fE\nUhsquQ9x4n0CS7agKZhH+dyrmeOcimqBjbjXX2RS/3p0zhZU/g6CDV5CPQKl0g8xJsKJgkjr2//8\ndWjGF2OcVox66Rqk4nkwYiu6r/vobn6U2JY1aNJyAOhyHMMzOYhS9/y/nnpRfDUkZILOCpmzOFA0\nn69GxpNrtEPseBStjCopAVVpC2xby6BfYNbGIp+uRZ25FHQ+GNaIZCiGj8eA+03o1RF9ugJ/UxBO\nbEfJH8ntfj+nkzRQOAjuEyjOrXQUn0/rmC2Eq7cRmriEU1IKndlxjC79ksknP0BXtgccDeD7EOr3\ngL4JrrgBdGaU+AiYwpiMPVy2/3v2XjGWsr/cDX96Df5wPxhNcP5MaOkGzXjYVgab25DmTSLmhS48\nt8dy3PEa6vQkyEyE0TPoshxjMNiGMvIOlNTV4PwEgm5IK4a4JWgjCagS5jKQPQ2/1IS/4zWUsgeH\njk//T/6LHAz5WYR/5uMfxK+i/G+hT4PU30F5CSy7Ch7+AHq0qHdV4UusI2IBTi+GssuhMBMaJ8GP\nHrB4YYQBrn9taEyRxY5IuRkhxaH65BDKhjPI2hLkYRp6lD6IyYBbvkWadgOdWhV5m/bBnDRIexLq\n7sAxZifWqblgnQjH1oFzyLojtR/DuuNzLq5OJfYP36HP0BDM1qB4+2kfmUjAYkbx+eDNUXAuH5Rl\nkPoiZF8F4Zdg+CKQk5HbBDGns9GSipzooG1sCSFZBc0jIOcO0Oihpp3Y1+PpTBvDYuVDAqn3475g\nEr7JRqT4aAirsR6qRNvuwTRoQ9E3oERXIY9V4znPgMY1je1TFWYfOkFH/Rg23RkhlLUS4kcixUSI\nDDPSNz8a0WBEqg/DgA/5nIoB83EUFJBlNHkebLc3o7g+BOttkP4VYbOe+A/3IX+/D92UKdCwmfhF\nz6PZ+yryhkfoP3YRIf4pBF8Og88J3adg6jKU+huw1d9FgchH1x+D31GJK2sCkamjUDVaQNvIoNWL\nrv0LtDtSUOcvhsSxiAN/gP1HQZUMrjYozIEeM5bSLgZWFeH/zTuUOQeZ491LINlGd/JKgoZehN6G\nY/t49KFcVKPnsHRLCld8ZiY15SEYvR7m3gzzRkPSxeCPB8c4sHcj2nuhyQLjjRBSoR33JKsdz1Ed\nZeNg8nFkw+uQ40Op2YKSFwuXPwdTbDBXB/dcgxTtR2uZQLTSRa0UIlS0mpasXlrsKRiHJRPxzobY\n3wxZ3SQxlNV94QuEezvRuPyk2j4jelInhoLXQVUPTY+Bv2lo/f9P/MJE+VdL3P+Lm1fAc+vAbBna\neb13OXLNDlgQgyS5IOdJSFgDz82HmE4YOAvaBIjPACkO9CZQl4C3HKWhGKwmlIFDOOcN47BhHvGJ\nT1KkE7D1Tb6PczDj821Y5w3A+N9Dz2fQ+i2k/RlK9sKsB+HTkZA0HeLGwejfgj4a+j6DQANsfxfl\n1DkChUXImQZ0WQqq6Hfh2Gao2AHjV7FLtYUExcBwYyzs+QBckaGhqlfugIZPcVnvpt1gQ1MWQuQs\nIM53GM13XejKk2DSGiKV+5Frt6CyKIi+AXydWpQJOehCejy/cWJ1ZxFMrEbtmEwwtJvq6Cz6Ig6S\nanrJ2VpO1echuuPUTH9AR+CvLn56Zg7taYksKIsh4/CPEB0Lw/chx12HM96AxZOOtvs72N2C93g2\n7k4zcV99RYAGvMeuxVIeTcfDh7H96WlMyp8Qv9kCkhHlzTxks5bKq69DqM1knziBruMUGFxgTKd/\n/GcEtRqijtyLbscXBFe8TJX3KOn5jVjPxsCZbwmEdPhmqrA2xCLHCyJhN9pjaph1J/R3ws6XwW+H\nBDWK24PbqqL1+k7eOLWPF96bQ/DObNRaJ1JDgLB5OOoPSpACMSiTpyKCOrhwHnQ3wvAC6K2F5ntg\n1C74YRkUT4L2LYSdoDpsQmSYwJqK0tBC7++XoJEKOc5wKpQWlh4+RfLeLxHDmuG4FTFoh7nFMP8t\nWOUgMDWX3psHQf8B4WPXYlQgOvMBFOPNqN6ejLh7+1Bo0G2ZcNMLMOZK5O7D4PsYyboUrHP/pR48\nZ6HtDejfAbEXQcaT/7rf/A/kb2WJ48TP1Jvx//Hr/Rz+Q5+oECJaCLFVCFElhNgihPhXx3iEEClC\niJ1CiDIhxFkhxO3/kWv+wzh2APJHDwlyexW8dzVYEpHu2IJUlw+nE2HTF/DBZeA+hxLjRMEMSZdC\n3mw4WgHz3wNrK/gEItiOuOAhpClXEqldxKS+H3jT5R66li2B+c9eiWbhPDp0Jqi4GlIfAnUA2quH\nRvPsuQmyzgevEfKvHRJk2Qd96yHhHtBdjuhRo8+fjzHqNCrNQ2DIgxm/g+u+hkiImZvLiN/wBXua\nD6CYhoO/DcZOhIarCfMNIb0dvzKNuvGzMCo/IaR0dP0WlDleXL0RutZvJKz1E8qPhcsXo/29hoFH\nY+m6bwLGD5tAK3MuJQXFdwadW49fNwqVYyXDJm/i1GkVeZoAk5YX0ZRuY/t1sxBOwfwqK4mlVYT9\nvf+DvfOOrqO69v9nZm4vule9WM3qtuTem9xtbAzG2AZCMWB6wNQAAULvxaETwBAwYJviBrhjjHHv\nlm1Ztnrv9V7p9nvn/P4Q7yW/l7zEeSEJyeK7ltaamXPOzGjp7O8c7bP3d0PYYDgkkHs+J6KlHF/o\nE4TTA6PmojedQtMnkkB9Lc28gHXYCpR+UwnW1qPNyYGQF8ehu8EchfTLUpTsSHI3bCG7YD3alvX4\n2lpo8lipHrwAv/cBwt8ZgOZYIdx4Cr0ni1AfD53+bqg7A5oUGs8fhnWbB+loNXKBE5HaBZfdBd8u\ng6/XQLsE4S2g+pEysjD6Arx4dAv31J9AHjEXQ81sFMMasM9Eii+FSD/BGg/VM2vxjxOw5lpCltNQ\neSO03Asteli5CNx6qI2GdTIoYYgMCYJegvEufOcbMZSGMDGL4QxDFUG+SFJh5CLEgTx6ZicQWDK3\n17XwyfWg1aPd00Ls/Foib5uErSYSu2sMIflBFNO30BbVO//KS6FZgi8fBmc9cvRo5MSXoflN8NX9\nwSbMAyBtKcReDYEWaFz2b1Mc9S8icI4/fyMkSXpCkqQTkiQdlyRpiyRJcecy7u/1cP8a2C6EeEGS\npPuBB3649scIAncLIQokSbIARyVJ2iaEOPt3Pvsfh0O74Y2n4ZHn4MObQNHC/KchvE9v+6IVsGUg\nSG6Yvho+XABpBqjcCnXfgP16KC2BTy+AzBTolw8jMqC7FHb/jijXNL4fP5fZ3e9z0n8HAw4XIflD\n1IYa+Colh3tL3yNYV4j3UA4GzTMQlo8Y+zKSNQJlx93wzjiku0uhZSnE3AWqF9R6iLSA6T044gH/\nV3D8bgjLhez7YdQiZGsMEd/fRfahIj6bMJ45lUZaq7bSMmshUcbdSD0TyKz9lJz03eg9nyJ5b4Cd\nW2BUGNa0BqzPXYGY+AhylAGpejAos6izVJMQ3IJ3rhXNylNkdXXgPG8mlYoRfetpRhTuprH4cyz5\nJnoGR3FgcAit7XKmFnei++Bz5E8/hs25dGn8OIYPJzUrE3wBJMtvMJij6Im9Dkv5ewS84whLLaB1\n3b3YbrsKjRwHXT3YskCvdeCb9jZlVU8xINiCtvZGJONpvDlT0Z4sQTaCNmk8HnMnYuObSC0+5H6R\nyNvKoOppqDtDpqUdf6eEsKbjc9Vi7ziDyEmD+iqkziDytwL2PQBCB8Omg68vRJthwPnQtIU6exDZ\n1UjSx/fBK8cIKD3sdTQx1DMSy/a1hMbI+Cd4sNUMpCl+N9FpY/GquQRbm4hqPIt0cijk7IOLz8Kh\n9yE6C0ktRpgVvGNzwOJCH3kQw6qbISsFG0GWfPgkFVWCJiWZhCcPoeg346y5H1v2bWimzYOx6Uhv\nvQztAZQuBV17KnLBBsQGAfILSCeOwj1X9Nbsc3aDqx2q1sPAW0HWQsobUL0EMj7vPYdereTkB/9l\npvkPQegfducXhBCPAEiStAR4FLjlrw36e0l5LjDxh+PlwE7+BykLIZqAph+OeyRJOgP0AX6apBwK\nwu7NULAXvn4erngaYtL+/z6KAaYfhKpPoPgFiDuA1PUSoZv0yGcCSNvug+gYsA+A0ErQaOHobyGQ\nAVNvQc55lir9dvp1VDOpJUT98QIKUmbxYl4iE/2t0PdxgqUH8RYHka0qhuQdOD57jmCLHbxBbGY3\nrrvGYRjZjGPzGeB9os/biDLOAY5YsA2iO9mPRZmAlHkPWDJ64641b+LOdKFI/YgLtvDalbcwf8c6\nhix7B/8CI+bQc0j2PtC9BSKW9+oPy1qkE36kcQqMer/39/fVAueBsZX+O5vxDZ+GN3YdVrkNeb+M\nPnY/u6ZcToqxD8mFlVhsJ+mcFsluawxjXj5FeNb9SDPyCPZPIhTagSZhEIb6Pdg+XITa9zzkvGsR\nXhtaYyqB6NtwmXej3bqHQL+JhG19C1PoYyj/DprPEHbDBEjIIhht54A1B23bk3gThlCQEkZCIJLp\nlKAcCCCfLSa1xUXgujfwLRxE0PkRulO/g8QH4NBSlOnNlMomRlkfo8X6BF0Disk9OwJ6/GDqi+bb\n70FvholJYKmCRgMozVCzHaz9+G1oBvcUvwqRAZrXPM/QS37PM9WPM+nsd6jddpCctJZF4rh3HzZP\nN02pLmwHv6JusQuTOxmzXQudSbD+fGgtBFs0ob5aQjEhtGdGoKnz4h9ViS56AKLsW4KhdWhPNpA+\nZhKMvAYCZ8BfRFhdFbLnHkTdA0AMjHQhaTTI5kz08hdIEblIfafjHWHEeJ8WXlzRWyz1gzTQHoOm\nT6BPDkROBX0ixP4S6h6CpOf/szb3/hj/IH+xEKLnj07NgHou4/5eUo4RQjT/8AJNkiTF/KXOkiSl\nAoOBg3/nc/8x2PsR7F0Ohxvgdytg3J+Pw+wIbkNuPYU96x6oOh+0HghpkZQhkDcapGNQDpx9D0ZJ\nsHs5ZKbCqCUgPGAwE4mdPqvWEHF1iJaEZDb+ZhEp7UWMPbwFznsbg7ocw+KhCCUfil4gfHYc9H2u\n9wVUFd3Z+XjTXiP6ysEoKnBwAnjKIWkJuKsJxKTSElNBDElIAJIGIky4bY+gK2ohf+lD9JtcyUfn\nX8wF7m9I32NAsm6AgRf3lozveaRXi2FCMlz4CHS/BDzb+/z6F8G+GH/BYgz9+hCwx2MtmoV7bg/a\nhkacxTVMHdGHlJp32BuaiXd2CsP2HGD2oW/BFg2/uxZxzzXI2UsI+J9Gs3ANauk2yk68Rvzg67CG\ngKLfIrpqMQk7Pl0JIgaa07dhd8TA8imIUDjimg9RywYgR/WhlWLCwnI57S1iqPYsI6VRDCo+hbRO\nA00K5PmQMprRRZahYz6EPYGYWQ7fv0souha5oYFQyqUEu9rRm08Q1jAbZeoiOOSH7z5BHWdAjkpH\nCk9ALTyJb5YCfUaj27uX6lSF7iNZZPUUofaR+Dg5hjFla1lQvpSgz48Sq6J4IWFyM5Vl/cmJ6UaJ\nqycQ1kTmp1p0WhAtBUiSCsKKsE/Cn16CiNChUWQ0e9vBfwKpaDMt4x8n+uCbSO1bEbe9hBSe2Fu6\nrOMrjE1v9QorKYDNg1rjQJEtCK8GqfMM9MhImf3QVHhQ965D1PiRPrwJMkagygUISwjF7YMzt8L4\nH9ZMtunQvQ9KL4bM1SD9tGJ6fxR4/3G3liTpKWAR0AVMPpcxf5WUJUn6Boj940v0/sPzmz/T/X91\nMP3gulgN3PE/viA/Dex6HzY8AzmT4c2PISbhT7r4aaGG1zC1dBDnngpCIAIVBDoX0DJrANb9L2FJ\n/RwltgvcHpAioT0c8m4Byy6CoQ40mmgA0knE4qhi63s38OX98ynXNpBpr6H/6e9x5RdhrthHg6aY\n9v79wTIUf+dOlI4LUUx6MPshRcKrX44zeB/RxQqZGy3olnyPEnwXbD0gsvFKK/BwBgMDkN2rQD+Z\nyK210LKV9jsSsR9p4cYTH/PxmPm0N3gZt2c7ZF0AGhPCtRyvKR6j0dtLalET8eJC46sn5D6GpvJ3\niOxE5IRtqC2XotGNRjtxAsgmop8ei3vTOr4dm0f/mEoyj09GHvQB5HSCYwU89HvEmQqkQTcjDF7Q\nmTHnzqPP6c1s0FWywHwUkRxJSJxCZzyJzi/oTP8FsaVNCKkd9XgdvhlGpA0jkcc2cFpMwSDFkB+w\ncVLfTawuEoKr8FQVIudEosvrA8OuQDp+Bla/CFctpCFM5URmAvlr30ddKNCaQuA5iS90AJHQhrWi\nkPbWpUQU74cJM5BLttGen46c8Q4RFbdjjH8E0XUv5D7H76r03Ln3Nbr7z+ClpNncffJZ7opuRig+\niEsD0YRfG0Qf6WOydzt8l4vwhyMFamkcr8cU5cVYEoG+SiDsVnxj6tBu6URx5iDOuxAcm6GzEykz\njH2ZWxnXVo1dyaQnqRGrZx50FENZAVJlDEG3A0WTgZon44v2YugZjnxiNWLmHUg5Y+HEe1C7Cm28\nBea5wLMJ9q5BtcfSNmEc4ds8iCQbiuskWvMPmXmmgdC4FBzbwT7zn2iU/yT8byvlkzvh1M6/OPQv\n8ONDQoivhRC/AX7zg3t3CfDYX3udvyv64gdXxCQhRPMPTuzvhBD9/kw/DbAB2CyEePWv3FM8+uij\n/30+adIkJk2a9H9+x3OCEOBx9pZG/3PNqDSzGidHSBZLMKy7DS5aC2oXgWA9x3217LSdJPXdI4zP\n3kdUtgePPBZrwS4Y/B5NtcuIbjxE0KSgs49HsY7DsXs1PR0tKIqWrfMX8n18CtedWclAVxSWz0uQ\nIryEclPpOBBJ4OAa9KY+hHcakKdlw7RNUL8ER0cd/q5yIuoqUVJGc/b+RWTJC5FO/oIqBTryJhFE\nQ1DtQHLuJfPDQtz9bNSNGkvAFyBh307M6d2Y/Xp2+PJp79Ez4sBpBkeokNyMeKAREWtHvk6PUzeS\nHRfmMrbxfbThLrzeCHqUcEwtbnTaFrRdVozNnWibPIhQiLroJGL8rWhCFrjwO7SGKCiZC9ooaL0B\ndqxCjHXiizuGnBSNohkOgS5W6XMZ6txIjm8+gahn0GhfR6nKQux4FVZuhVQvjaEkgjdLRJ9wou3o\nRhq+GNnVBq4OChI1DNbnQ1sBwrkLYdEiu0Lgj0MY63vjcb0huG45nW4JecuNeMfI1IssvEYbedZM\n6uRk3tKnE9HtJMOSy9R9nxIV+SWOlHTaDS/Qf/lzeK+5E4Pan/bOJ1jSNZuPll/N97lZNM8ezHlt\nTVhPrEHXnAKj7iFQ9Gu8YelYUwPgDEJ9D1TJcMH1tBo+R7FaUWur0KcFUdolDK4ZyOu/RNT3VsCR\nwiMhvB2h8+PN1iAawzBaRhGauh1luxapVPQKIo24Dn/dh2jOewc5LAlq7kB8Wohk6wfGcMAFZzdA\nj4D8Uajt+2HMrwj1v4E631YcplfpLreRV5NC+MSl9JZw+QHecuj8CuLv+sfa4l/Azp072blz53+f\nP/744z9O9MWX58iBc//v0ReSJCUBm4QQA/5q37+TlJ8HOoQQz//wJQgXQvzPjT4kSfoIaBNC3P0n\nN/nTvj+ZkLgQHnzUU8tbRDKNSGYhVe+AlpMw4v+fnAECtNGKvepyWn/fg+a2ERhP7eJMn2m47OFk\nH/89AVVCF5ZM0qC3UNvOcKJpDYP2HqI2L4n7Zyzm2dWPkLqvFtGj0HNSpqtDxeQLR5cTi+XSDCR1\nJNKp1aB3wIW/pWV0N35XGbHHlqFUa9l83RjG8yy2LhV2XYAYdgkiqi+i7Frkz8NhUgpq/6W077iL\n8KpSXAMnYeIU2vE7CNYc4AVLAY22OJ5/6n3MPfWIUCw9013IMRP5YqSGvjVV5L++m+B5BjSGbKTI\noagHviHQ342uywcGLxhURA8Im4xaJ9j/sEr2r8NQLptKeF0tSuKLEDYJdcn5hO4L4d++H/1OgaK4\nITsZ3+gHeT+5hZu/fhUpdy4U70MOmw4HC8FQSFNeGrbwarQDLkez+j1UxY3sHgKRNrDoODwgmezG\nIsIkO8TNRXzxMFJpLSK7H5LsQNgzQaeAKRzMaYjg14iOKhw3HmO3ZjXhHQfJW38Uw5xltMSNxYaB\n+ravqbD30K/7NfYpk5i9ey2O8xUsnM+LXef6dT9AAAAgAElEQVQzo2sr+WvepTU6AteI+eiy2uh7\nqBv59B4QEThjWjGHL0YZ/xz4anpj3G0Xw+a9BHWH8ceFIfIc9KRGYG6dhyVsEZQ+B5tDMON8xLEV\nqEoxIqYT6bSRslFTSbfko0Y+j6TrROlZg+zTg7sKNj0PYdEQbYGYXbDRBwNmQUsb2Kt63WexYwmk\nXkxn5U5OX2VFQy6JyMCzRHUsx/r+LyFyNMx5HCISQfNDJt8/Qfntb8GPFhK35hz5Zv7f9jxJkjKE\nEGU/HC8BJgghLvmr4/5OUo4APgeSgGrgEiFElyRJ8cAyIcQcSZLGAbuAU/Qu6wXwoBBiy/9yz58E\nKfdQSDmPY2UQSdyGFntvw9dXwIy3ejPD/gslh8HZBlGJqNXPEirWQfznKB4T8m49mI2oRvD266Ta\nHEOsGIndEUFN02GaPSYcMWZao82k284ybNVJRHcArQTkpBBULkP0+NHIXxKc+gjeIdV0hksEJAcB\nWtAIG8nd89CunMeuxbPJ5UqiD/waTpxBRNmgSYIyJ9J5UQjNOOpFCXGHClGMEUjZORDbBOYU6OyD\nOFBCUboN94UvM2L39VCVhSe5m57J4zlIBSMr1xDd2AwihHQGUGLBFoaI8CP5Vaiqxz07kuCbWvTT\nQ+jtuXRtdXPys9OMfHcQutEbkTEjfH487y9E+mo/nnAb2oEJmIdUITWE4LRMoKIbRXUjpyvQ5YdW\nGSnP2rvKjdVB3wiIUsERhqiuQhp4D9QfgtKDVM69gA61nGG6ERA9DHHiMUSrG5ICiH6JoJ2M8GlQ\nxXB0ny9DDDkfClYi3fw9jcZyLIfuoKfJiuQ5RU9iAjH9HyCsZR0k3ErIGMZXJfcx/XAtu66+g0ZV\nZXNzX97+djFSlYuIcgfOMWnob/wSQ/FqqNgJJdsJpBvRzu7E59yJrusQkqqBxuch5mrUch/SV2+h\npkDFzan4woxkfTwSXdK3MOYoQucjGLgLWZ6Ncvpd2NiBWzucQFs55r7ZiPBPccUNxv55Kjy6FF6a\nCzExMLwPVHwAgTRwe8HZQSjMQuPcJZSnW4ncX0lcixZ57iZM3ISeJTRyAfFsQOqogG0PgD8SWsoh\nbRTMe+InRcjwI5Lyp+fIN5f9zaS8Gsiid4OvGrhZCNH418b9XRt9QogOYNqfud4IzPnheC/8xIpg\n/RV4qaeCJzCTTQLX/IGQO8vAFP0HQu7ugA8fgG3vQ0ou5F+GFJuNku8G80xCJ7egJsSgyZmNNPJy\nnM7FZAXvoCr0EeVDErCs8jHk1BGevPk+Bmwup3mCleb+80jILgHXYETjURy3j6abAqJ2yWjsDyI5\nR5Cg/xVa01hCnbtQSt+EQYlgCZDoEEQ3PwfGKDDpkdrCwdUGc1TQ++jSVBB5tpJQdiSa8FTQB8CU\nBXtOQsoFSPd+QK7UGxdLuBk2bMJQFc22Kd3kO5uxlemQHIMhsgSSuqGhFb5qRYqfBg9/QM/g03wb\n+xkzHZtQqh2IOB22sWMZoG3iyE3lDL7lIzRnVhB0ZhCa0oa+r0D3wu2Yw65E+vJCOHsMER2D1qdH\nndwNa0MIrRmpbwSU1EK6AaImQZcPxC5oMyHkANLpLb1FUVWVlI37KbphHpT1QNkHOPd3UxmVxuC+\nRzgWzKUxooQufRKTP1iKJXwSp1LM5DbPxv7Rk4QnJBAUzcR/Xgh+K86pMfiLb6EwMow8x0GUIbsQ\nkowloZvpXUF6eIZFgStxtEUTfqAS57xkTKer0QYSwdQPrGdAr0M7cAmejt9Qa20kfn811vRFYLkW\n6pci97kOx6S+mEUVsWsdNMzQ0JZ/koS6RkJVaagJA9GYVyF1Pwq5v4NjT2G8cikn5NcY9kEA7ScS\nYVcfhWOHYfF38PA70LoBxv8WohKhahkUJ+NM1VM6Io/U6h1M8AxD3nYC/Cl45i4kxGkkZCJ5FgkJ\nItIhKhMyZ8Gxb+DEhl6N5QXP9Waq/qfhHxQSJ4RY8H8Z99NS4viJQMHEAD5F+p+5NcfehCG3/uHc\nGgFL3oGbX4OuFohOAtWDaB+DUqciRafjL+kg5PwG3+RMDLIWxSWTbryVxC9+i3SskA69DU1XgFnf\nrOO76bfy8eI4pjRYCUvUkPlsHQ1dAZzambRJZ4lsPEy0ZztHOuqJDkSSEXcduOvhxAWIDA/JuzYA\nHgjZ4JgHcpwwWgtyMt3hmYSquzCc7kYyzIRbnulNSNknoKMFLprSa3CubjBbYW8pIqMflVF1RHg9\nmAuKkQO+3nC44hhwhrH34lTGJcfByRwcB7fw/XQ3U7zXYgh+iseejP/KrQQ9O9BE2MmIkjn+zuuM\nuyVA19xLMenO4h8wkqdao4no+Yr54VFk5EehxlmQX+tAWmbg6N3zGBadSzClktCH5XSlVmK3qOh7\nvgNpLNKUEXBiGaSNBfNgqHsKOTmT4R+uR0y8C3Kvx7z6YQbdfglqxwf0V+ZzWKlhwprtxO4uo1On\noXFiGZazjYSdOYpuUBZNA5KxpKVByR7CgoNh2pNEHjkfSgNgeAKdxY4rGQLyW9hMe5HDbIS3vUTn\nwny0vga0FUF4YyL4uyChEc7/CoxgqLwYe/JAasZriTh9P8a0JZjdF6H1bSMw4CLqu9cjNw0kxjCV\nUJyWQNQWpJ4aNNY9SN2vgHYcaIfA0Mvg4GUMGH4nBddVM9xsgs0uyFFhVh7wATibenWP425BOL5A\nRF5C2OVXMazqJQi90vvBKnHA0CEYeAw/nwCg548kNyc8AGsuhzm/g3mPgxrqVYz7T1Rm+CemUJ8L\nfiblPwMt4X960ecAdwtEZP6ZAfpeQg564NQ9EOtFmHVI9Sr6FIE/2Im87F6sVd3QfS3IEnqLhEjQ\nsWP0RCZ37UG6SMeFm9di16eQdKiKO6a8yuP99nC29GtyW4qIDQgkdzjFDGFEmA+NUg0130CHClWN\n4JHRCC+4JcieARNOAuVgv5HyQdOI/uARIotMSDFjoU2CXcugox6uW0dozfkEpQ9Qmqeg7KlEmr8E\n0g0EnT2cGprFrCYrqj0GNXIi8vQX4bElsHcNv7vtA1KMX6EZnsGxCB/ncT26ZRchOlXU0zb8Fiu6\npDRM4/tg7ShCqmhE7exBt+dp/JMChPssvNC1lSIyWJU3nUrlYi6UO5iRsQZz7AlS7IfpObWLZrON\nwMWQeNyJLvgN6oC3UdKvgaKb8Mt6tMHlKO5yiB0Cl60ksvgNgp8+Bd8JKj9YQEvcckxJY4k78w4D\nI24g52Qx3gWzKJk7CkVbzqCFN8Nv5oC7lIQqHYy6DXZuh5otCGUBIm8BkqMecfBtxvU34codT7R1\nPRIy4tQcpJAHU30RhpMmOP9SCHlBPovQeAg2LkbrrUWyZhLd5qE9ZzzR7jHUKatpGu0irvki1M5N\neNzRZE97gWD5BbjNAtX4IfquDeA5AU1eKNwApq8Q/no4VYbFeQsD9uoJ9mgQ14xF330GDMCQD1GP\n3UKp73H6PvgSyhwFOf1tOHMEUu/EF2wk1H0CeaIdNeYImu2L0A5/jP/6Z/APc9rUmzCy6iK46XCv\nXOd/Kv6BIXH/F/ysfXEu8HTA3scgcy6kTP3Tdn8XVK+Axs2IvlciihYjxXmRjhpgg5FQbAaOBBfa\nntNYFAmpQ0DGJJgQ4leRC7mjfBttNBOVdQOWnTspiSth1H4Jp9qOIymI16oj3unFInWARwuuHsge\nDaku6CkBtT9BZyMi6EOb9QwkToLDExHuZsSwj/BVfIamsRw1VI9/9igC6n4kUyRapwkpbiSi7iCB\nPo3oKvujX6ugmf8SQn2aA11+EmzZJNek0DJlFzIWovkYAgH49jwm5D/NtF07WbLhE+wzFyCPmQzL\nb4VDp1FvuQsx9pcougxorYXXLsDTXUdVmhHvKYXk340gIvQ8Ie8LCE8tmtYE3N2fUdc/hfc9dzJ8\n20b0ySEOjR7G7VWvE9PaBpIe2vRIkhmiR4NcgnqmiAZ9KokpAUKfNNIkLyKYGsQYuYPwo3YY7aFu\nbDzHtfEMPVtCrNONv66VnsxkKvvFo/d3MWJfEzTUQlCGSBN0uWGLAfp4EDf/BtxP4zMo9ORGIDkS\nMB3qxDj1Q4gfS2hNAqEjHWgLVKR3T0LRZ3BkHUFbNa3DzSj6DGI0HrBPgPZPcYZFYjHOh/oQ7Q4X\nH8+YyOLmtzBUHCU4IB6tqIfTM+kyFxJ71A0ZGugYDt1tiOLvId4ELX4o9RCaFIdI6EARKv7GCPSp\nDgJOI6ESHVJcGHprFZgtSAOvhoRX/nu6CmcpavEyRPcBVNmF19SFPzYc2ZKMbB+IVsnFxyEsbaPR\nfXwP3HICDD+9Qqg/mk/5zXPkm1v/OdoXP6+UzwVdZXDsdUib/adtQoWDV0PjVph1CsmaiYgTiK6z\nSF+vg/ttNA8ZRHhTHq7lbxAqq8A2yIxkO0NdaQQZ5gqSTjeTdLqD0IRWFO1IfNHtuJ1thFm6MR6D\nhu7+bFhwNecNziUseBBsdujagtS4C8k+CUQjQcWMtskNNlNvDTVDLEFNDwH7OuRBmagl+5ClIKaP\nq/CbBd6FbQiRgUH8CuXsCkRoBPKy1+DwPkTpOLqG2+gZNIyUb5ugcg1RZTk4hxTACEAI1KT+XPrN\nRmLcLYRHDEXa/TWi/h2ksCgYHI8sxYGuV1KT6CScT2zjmGc5E154i+YR3ZRdUU/W2Gwsk9IJxYXj\nikvDmWsg3KvjNuvXtF7SgeVlBzdOeo3DyUN4u+k20vpdDuOfgXcuAVtfcG8GSRBfVUnN/iwCByOJ\ne3oOprrl4GlD3H07csXrJMQ8T1zgIQzh3aA4MVTEY9vRQnu4jrwjJaBVIUoL0XfDyBnwwaWw9EP4\n/UNIO18imBNN10A3UrcFfb9V7OtXwhRff4JHFuMd7Ma0MgTXPd+7rxCZBYHTFPbvT1DWMES3BJIu\n7Y1cED60PYfxOmrxdpawUaQy50gntuQoutzQ5QiQGrYdqexBwuPqURMHQGIq8pg3QLHB+qGwqRps\nHpgNsr2FjgQ7bpeWeEM7oS02tHO86NK8YOgP074BRYK2a8CzH4xjAJDCMlFGvND7t/E0o6v+CgpX\nI5o2oAb34Jt+A9607wlElWC99n6MPY1IP0FS/tHwE3Nf/LxSPhec/QJajkP+M3/a1rwTHKcgaQEY\ne4Xyhes0nPkF0v5ThCbk4IjQEGF6AFQt4ujlqAkvoux4F4rPoPYBeaMM/YeDvhtuWEan/DKlxm5G\n7jkM4x6G07GwaT08/SqqeIOA/iXQhdA0xiLLi5GCWtw9H2FoakA0hxBGHUpDD0QAbQqCcKQmJ2Jo\nPkgJUPUZwuyDuAy8Q5yomiDGoi40/nHQloYaOsjm2QOZtBXM9r7QbzxU7qWbzzBP3YXvtl/Qo7Ry\n8r5rqFCTueGThwj1DxE41YXBI0N+DmhG4b3wKjp4nCBOTjOWfO5DV/QO8ponOH4qj+otx5m8y4Sc\nZ6GNQeAvwkEyid4ZxLg2wndJ+F37cKZmo3YUEpM3Eck1BFJmwtI5MPN2er5+gObvofDyfAZdeinW\nbbsIL/yM0Ph0AqOm0RO5ENWaQyjoQzrwW4zdqwlT26EOPAYdxiMGGDoAZUAfOLYb0p6A4gLIbIDU\niwi+8yC1M2PxWGXMNSl4Exy0jNNiCyqozQ0ECyW6TFr8o3Iw4WTo4UNYi2opzUsjLphMWORgGPBS\n7+Zp+duI/Y/RPGQWn8flc/XhNzAVKEgaAd5iamdk0zdYhGiaBAU7ENF2Hpj8MJdUHSHvxAFESzNM\nNdMYGUZyYQOVF19IzM5NeMLSsLuq0a/ywJIwKJsBSRN6K88Em6EmF6JehrCr/vc53l0JlV/CiTXQ\n3gmTn4JBF/0jrOlHw4+2Ul56jnxzzz9npfwzKZ8L2s9ARPa5yxR21sKmR2HGnbTZt2Iv3YQm4zPQ\nRsPxCyCUD02NULkdcmvguAuGLoTALsTUIvgkll1TpjDyuwMYI7Jh6O0QGgMP3QkLZiPGJqG6nkEy\njUU11iJCtfjKz2AsDSC/50SKA5Gnh3gfatqlqN16hDuI7DpOQBONErMPuVogySnIwoMINOMZb0GN\niMBwLI6qhHZ6quIZsrcdPHUw91rY+jpnL8sl9QMN3XXVtC5ZRHpOkMcjruaZt2+hK7+F+twR5L5Q\nBvVBSGmDByoIqs3s0zxBtJRAhNREyHeK2M+CBI+5OBvKR+0spPiNOAaU+lDSIrA1VhHDhYjWEJpD\nb4PLBtPmIcrfgJZ2pKlvEDq+nu7iOBxfrkLJhPjJGhwD+1IYHc+EV7/D1WPk5BP3kanZztmwS9CU\nbGfA0Z0YzR6Ccjg9qUNoHn0lUaFVRK46hvpkM8qCOGRZC7E+6LsIzr5JoMLEyavnUDtGh9B1kyQV\nIrtgj3k0Azd5ycvsRHOwkK7JEpL9MlKsj8O7Azk7xEbU8XqiPK0Q7wdrFjQHoK0KkR1D06BMouLX\no1kdR1GfLJLWNxBm1+Kxp2G0tSNs7aiFAtUeyysXzSVhVR3nqTsInzqGHq+FKt0JMrs8GA6Xg0XF\nM+4BSob1Y/CD70DlXtAnwyNfQMZIAITzU3zrVuHbGY4mOwfT3Xcj6XR/eQ6r6k8+0uJHI+XnzpFv\nfv0zKf/7Ys2dcHoj6q/2UWf6DUnuu5BqX4Ts93sn+4dPguKHC66H3dOgvQ7aZEgNIbIeIVSzgo5I\nJ50pGaQXp6HxnIbpm0Cxw9KnesXab4iG7PfA3YEo2YTv6K1oEryIeAvyp1aEoxMl34AUdResewb6\nTQVfPaL9BAyNAp0ByTANIq+C92+CbAk1fTKe5C3UmlWydjYgD/k9fP0iZCcgahvo6S7DmxVNx1Wr\nyGAYSsXl/CrlaV5qKaah7AXqxusYVHcn+vcWI5L6og5RcMX00BaVSZr2E3yaQ3jdX2H+ch3C24Ri\n9uD81IC6X+Ab3Yeu/BkYv1uNWSdTdcEs9lw1EHvtGRZu3IVlYgLCdxCxLYOyj5pxl7aSNSMS49gQ\nktxBIMZGsNZL6HQKuhsfRduyB0laDh43tMtgCYOYYXDhGoJn53Ei51FqdBLnH6lFvnEx8oAxUHaE\nkORHSQzSNi6SKH8b8px3EYpKwNJDIPZm7hMVnA408trxJxhoqMPfEE3RqOupjZC5YMVKukwqpdNn\nMOLKx+GSqWDcAvqLweMH7XFERDwObQ1rRl1DjEsmd+c60j6qgaH9YNavYOBleFs+oyPibWKfPIKo\n8SFpVIov7k8G7WgLuqmeMZJkVxvB4rNomwN4Bl6Gq9FA9MEmcBfB9UMQ09YSOn0a7/r1BA/vRDiP\nosmbg+WFd5GMxn+1hfwo+NFI+elz5JuHfvYp//ui6Qxc/Ap1poeQCQNTNhjToGMzRMyCxY/C56/C\n2g9g4jzY/wpUBWDYQiR7NJqwJGJKg0QoUwglrCRY4UDZMxNlyh7ku2+F92Lg1theofTIaKThF1M1\n6RJyoh4DWUGMuQmfdT/ym92EFu5Ho8gwvALqu5Ca/XA2CpIGQckmSG6BW5fCyieRK3ZiVlRyopyI\nefeiihrkxDC46CNwNGF6JR8pMY9sZyyEKeDwIrlqUONnE1/TQHfjWvRlb+Ob/xblB58nNbuJgK+d\n1M0grJeBXIBVMwXJJ6PG5hJceRi5OoBnXBRhk8KQKr7EPdwEfRLovmkFMwLNHJ4/knULZ5DjKGaI\nW6b7KxcRw50kzxyJ/pGvkb64Epr2oKnsoS4nj+5kHbnSDqSSr2FwAuSWQasBauwQ7MJ9YCImTuA6\nFGKyow9ax2rU6UFCm/fgvDMFfXQzK4dfjTdk5vYv34btDyO1dlKXfz7LomZg1Gh44uQW+pnLaa/L\nRF/SRUSGhu7uAwRLD3LylnmMttwBlwRg2HnQoqB2RxAcN5AO7SQKImHUieVM7Unne90xjg/Nxmsf\nQrZuIkpPOZTvQn9wO7GhCCSfDlesgrWfSnqgBFcgnDBriNaBt5C47XI0WpXO4XmYvj6Kxd6NY/YT\nWL/RIDWfwnXNGEidiX7WSMwTn4awK5AGvfevtoyfJn6OvvjL+I9YKRfvgOwpFDOWeB4jjBmg+qFo\nAfRbCYqld+Nn70KoL4c4HxwJh4ITsCAT7GUghsDwlWCwIqofQxx6G9UBqjEa2eiH/r9F89xnUFUO\nm/bSFdaOvdUH4X3hszl0TmtBX9CJ/tdtyHF+uFZF6h4ARwshJhV+UwKaH77JPhesuxOk4bDyVpiY\nBxlOXBYX7lzQimxsLQ/iFc206Q+T5IyG1Gtgyzhenfo08/pcRvL3l1OSWIClLIF3Jszm+qbX8Z41\nE+NtwuYx4Y2cQEVPMem1bchOH95vw9BmeTn8y0yKku/gxk/fR22sRChlqBaF/StsRMyYRe6wJlh7\nijP5aRy/OJkUQy4jtjyJQZwHx1rBUgjRaYiJv6LF9RDR26vpSYonLEZA8hQI7gdXBliuoDJrNBWu\nB0lurMfhzcDYVUlGqBC/bjLGFzZTcd91vDBwJgnhh5kX6mDQgQ5cZ7fw3oyX8BuM3ODPwp44lPaW\n+ym2HMQuGcheVoKcnEso/UJKgp8QET+OhJjHEKog0FOOojezT3xG36oPcWQ+S05dKzR8AaW7cEfF\nYVBnUa7ZQfHwGSQVHiBvhxtdxABCF80lqHxGy9qjJPbVI7mjaQ76OZmUh82qJcu1Dl2rhaqRfemz\nwk9wxCVYjqxC3VtDnTOEMUzGdvvrmGNWIMdfChGzQftnQj3/jfGjrZQfOEe+efZn98W/NVT8tPN7\norn5DxedB6H1c4hdAtsug5JS8Goh3g7T58Ppj2C/ClkCksNBexFdOfm01bxLn0LQiQ0weCANtkYq\nyWLcGy6UEn9vnPRIF0Kpw9FvJNrmvaijVUwNufCmj+DCAehWbEGaqIVQKlh0EBEDV67+w7t9cAm0\nhKChGHSJ0PINMBLVWUUw1wleGbkrCqfBT0RTB2itMNbDhkGTMKkKU1r3UDw6CXObg6O505D3tTFp\n+7dYZUHwyl1wcCbdJj0V9Xmk1ZxE/cUY5MoqWnKjSHqnEIOzCXnkSNAmwu8/x7doCq6TuzBVyChh\nerSv7kV0LaAy3Mch53jizlSRv2sfMhLMeBamLKG9OBsyHHjPmDjbNZ1R7ljaR1WT1NLB2/2uoSvY\nzGXl71AWmcGZqKu47ttqzIeeoCV/LHUVMpREcOaR6cwvqkQjnKxNsHFQE8f17VX0z3wR1ACew1dS\n3K8FKRBPbuhmvK0XYYpbidOcSIn+e4Z2JtEYepb2qG70ajIekQLOKmJa64jxjkIbOx9HTCRsnIal\nOYRm4gbYcy1CP50q8S0np19MVMwkBoksNG1z8K7oxJZ9Bf5JD/Oh816mNUVQXFtErLWVHIMBdX8V\ndTOuom//+zGoVti2FBF/CM8XjTirC+nxTQDFgnnUKGzTpqF6PBj79UOxWP7JFvHj40cj5V+dI9+8\n9DMp/1tDEALk3rTV/0LIAwWjwe8ERz50AGW7ICkdYnZA5ygIOMCYCJgQZZsg8xka+kVR07MBTWY8\nqZ99TlSLg8ZLs4nKXIFc205n1Z1EnS6gPSceRc3Fvv07AhcKtH4D/nclvL+8DWWQE/PNa5GaNXDR\nPGhbBvdX9aaNe2pgxSLYfxoGz4XYDtjZCiOGghRG6Io5eKUJaNZHURKbQN7mk0gpgAJnc4ayO+Y6\nrj77NbXhhRwRs5lgy2FHShG/2P0Fyq4umDkRNWER3vufQTNpLOK8UYQaX+FQn0TQygzZ10FddhSx\no1cTddcUGNkPmj7H22NBHPWjjAygZkNHRB7x0XFI1fsJ7XJwJH8wzbZYxp08SGSYg7asOJSUEFX+\naN7rs4jf/vYEh++NxlB7BGdNGvrkHHJdX1Fri0VjvJWG+pdwd1mp5kLmDLcjrr2LmN/vp0Rysq1t\nOcOqi5iybh1SvYrv8kk4BvajQbeTOGU8cdFvIm29CrWsA/etZs6qQxmo3IkOC3SdwlU8l6CuB50y\nCJ81iD9pHj6pkZAcAEmi238UW72LUJuZmEInJoOKJPfn+KU2IlhMkTiJ4l1LcmEDacogTiXG8Koz\nnQt2bMVgCaCP9NGnzkRadAHHz7uJMbr7/jDXWl+Dt5+C8+8HyYyadx2uw4dxbN9O63u9LoyUV18l\n/KKLkH5iehZ/C340Ur7rHPnm5Z9J+T8PngKo/RV0ngHleVh/T6+yWowR0r1QqgONCbzdCNUG/iqo\n1hGqi0S56XF8b9yHY7INS1kbBc9ewMBgfxoj9hO9/QCk9CF8XR8YHIDS/ahRbuRvQIzX0RoXT2im\nn7hVY5A+OgIVXfDw/fDt1l5Jx5SNUGQFvx+EF/SDQDZAvA/x0AaCYRbq1XcJuFfjLzWR+fIJtIN9\nBMKtdNd7eOq6J5nm+o6YgxUcP/8CjL5qhgZkcgs+Q/h8BFtvILCnA8OzL4J7JQGrDN8s5egvHiE5\nmE14xa24kp6kxPkN415dh+R0wxAd4rAJ6d4LoWk9QcMw9hkkaqMimbd/DSaLCyriaM8Isi9xGON2\nHsSdmku09xih1AjKk6ZSVqGiGTmbVPdhsh94H+19L+PTdHLWv4rYymbuzVzJgIQ2rj5cx1cDi7ls\n2R5WZExFDvOx6MjnGPXxEFBQ1RLa+kUgEER4m3F0JxPpjUDqMxTOOAjdNJmAbxmaiDfRhAZA7ae9\nFbQ1Fuj8CJzfQcxgRMT5iOiHKKaaIxRg8DUw6dsX0GVdiLftG2JHFFIo3UdQbWOAZhnN7mtZW5+M\nfUeQrbGj2Nk4DpPq5JWBS8illGJ3Fu2hDIZlFRCd8Sl2kv8w116/DH65ArbdANGDYNjtCKB7924k\nrRbZYMDYvz+yXv+vsoa/Gz8aKS85R755/eeNvv8sOHZA4TRQBoJ5GgRWwygj2FrAPA7aakBpgT3V\nMHUx0pB5BI9+i2x/BSVLQjr2OIY0K4ZaGU8oRFSJn6q+7UR/30XAMB5Nsg8uugNeXQCTLEhGN/Q1\nIcXdjt2/FnddO15LJca5aTDlVZg1EkRPnmoAACAASURBVC6/Du65gaZHCoi95W2khvV0lm+hvZ+M\n68JZULofLO+iwUq3XIXLPAxVnKLklcUE20rwmCzYvD38+s2n2TjvLvI6jpJlH0RyYSmpdasQydfA\nia+hTWD8aBWSLCO4H4/7F/jNOgZ3eDFVLQBdAHPnUWqsE2mduR1zlQl3exSRqYVI4aOg7Ria5EXk\nx16If+8NhDLn9kaiaDYSebqVC0pdcFYQ4dwHbXZEYjapxv1E57Whbw7R7rPROrwPzWFfMqBjKC5L\nBLEZj/LJ0e/xfvgJy68cT86paqxpXVy77AP0z7yD1LccDLH4Kr6lamw6GqmLtCNdhCLDUSQnHiWA\nKXYqtBcgO3YTiu2Hl4XYlGKk1GsBCBEk4N2ARkQSDFVSJ33J9y4dWcZJXCyfh7mjAtx7cJ1YS7gt\nFpwfkeF3oWtbiVq7laaSJOKiPOg1ZiZl7Oee1nXk6GrRHj6Dd1wPmaYAKZHlhPdpRvG+iNA9gyRb\ne+dbTDq0VfX61TdeBUn5SLFDCMvP/1dZwE8XP7HkkZ9J+Z+BQDeU3QGawWAcCJnPgC4WGvOgfh78\nYi2cvBJit8HQd+FEOWpZAez9AinJAmmNiM4wpMvuwXVqN87GHhI3b8As2xFdnagtAQKrNTjtBVhN\nAulUMiKsC2lcBBgPoP2iATLt6GMLoNEMH74Jv34KLrkWfL/GHTYHT3QKpiE3E750NeF7rDD6Cthc\nBHc8QmfHEbaLbiKlNOLq2nFn7md4QSdYbBQP1nKk/yzmrHyRYJqEp2kTfWs8iDAdQVcD2qN6tI71\nUJoE3ulIA0dg+aoSZ4QLkzBC8j3g20uPYiWvYT1yci3fhmYxaPsRiu6cQhs9ZCTMxJ4wF4tkQBee\nAc1boaoQtJGghEN7PGiOwUAtdLqQzpzEsibn/7V33uFRVOsf/5zZ3rLpvYcQIITegjQRFBtdrAhi\nuVZs115v8SpesV3rVbFeewELioig9F5DAgkkpJKebDbZvuf3R/BnA4lKiTKf55mHnZn3nHnPzuTL\n2XfOeQ++a+txxC8lZouOoilDaNI72ZzqA0c4FXlfYbMnsPLSWYxY9jZCGmgwZBGWsxFZqEGc9Ql1\nn06h/OKzCTdfhq9uMqJvItodVZjsNtpSNZi2bkLoWxGKBbPmEVz8HS/vYuBiKqimjiL22R2UJU0h\nXcniNOf1ZKzbjNBFQWwGrHfgDlbij9Fi9niBCIz2v9JMEMNz75NRupl99/RiZN0ClBawDnLBRx4o\nSUdEtZK43kJgoJ7Sk3uQVPE2gfQUtFF/bX/mUnpD6TYYeBEgoHBBe24QlZ/zG1aqPpqoonws0Oig\n7zpQfjI+tGEcTLir/XPG3bBnOXTpQTDyVNw3XoPpxW2IzXcg175FU9lotifqSdqtpV6JJWJHAzK6\nBuGWBCMFDA6iLWsGpxn6TiQY3IFS1Qw9T0FUr8QeKMdXrEcX7USc91cIywTPDvBZCRkyipYNmzHL\n1yA8CLk74MmToQdQ+ixh4WM4Z28afHIXcuYnrH9nCt5+ezGYrqOtNZ1FYzWcsnU+rU0BkpfVITQD\n8PYOocbanaTwDRA/Bhwx8PBEmD4Mj7MS3/gReMv2UlC9jo97TKFr9XImhi5G6CW5761FF20grrCO\nYO3fqNcPpGLvFFoMVtLb1mAtr0WxxKIZ9C9E8StQ8h5kRYInFOxaKJOIkBXYW96jVbmNNnOQuLx8\ndHHQqmslaUsNCZU5vDs9HJsuDMvYdEJ9WezduAOzIYjy9N2UJb2BzO1GL/0N7MsbjcnuJmBpxpel\nIRjjYUfybHL/9xK6AU3gewARNGNWHiZILW/wEhtpIJEwBsbczFinHmP138Fihz53Ies/QOizkLUF\nOM6AoP1a7N++C8tfh1GPYyoaReOe12mJjCU/zk50STq5W3eA1g1pAuL0tE4ZwDsTrkFsa2Hcy09i\nKGpCRD0Jt4+DyJ6Q1AtWvw0DJ0H2he35W1QOjud4O/Bj1Jjy8cRRByGR/78rG5YiHbW4b3oN4z/v\nR/E1Enz5OgpP1bB33FX0nruG2PxPqTk9jJjtJeAwwoxn8KQX4v+iGe2CeRgivQTdafgGVmOo8CB2\n+tozx90YClHNUG6DzOngqgfNagj0xVMLpfO202V4MwypRbjjoMYA2/dB3yiwdoWWLpC3FuxNFJok\n2vUOwm40s+LzUeSWfYMpGMAbGYIhkIDJsQ45cx5bsorou3wnbJ4Pu7UQlASHJkH9Psjsyf60FgJV\nLbzcfyZ3fPQ4Gr3A1zqVtzOS8PcaxKXz5kHfnTC2EAJe2PsfPO462ra/Q03aYBri9fh9Ixi+X8Di\nOTBsJHxYCP2coLihvgz/4Azq+lVhqdeyN7Y78SVuKix1KAGoq4on3RDG3l41ZDeY8ZrP4DOHh1Oe\nfoqysZnU5FzMxIr7aMVBU5KZWF0FTp2F8KLbqQzx41n7LV1TC2BfLNK1H4Ia6sOy+GhUL1KDWWTL\nSOJr3wJtEsTfgvTdiNinwed+G53hcWTptezumUpKcTjGbTvbV84OP4lg6Tb8/gCeQBCn1oonOoRU\nZz3kZMC6jTiGnYlr6Ebedl1HSfwsHgxGYPx4DuQ/CVYvzFwNlkx4dgZc88Zxe7yPNkcspnx+B/Xm\nLTWm/OfnB4IM4H15Pf5P3sf0+gcoZoWWx67CXFVE/PpMuu5ejQx4kRUOopa3IS29Cfa8ksBD89Fe\nMgND/r/xhoawccoV9PZ8g9/WjOHd1vaKSxT4ug/09kKvXeAthfiJIDMg6h8YAO+/hyBbGpA6gcbf\nAvGnQuBVKJbQNwJW74Jps6FpIWnerjT7/8ujYfcy4+z/Eva8Fr/TjbstiC5WB6NzEe+/hPbmofhM\nZegygshWLwRAOAuRGdAcWs0+Tyy6CDN3FK9GO3g8PDYfQ6KWaZffz8tsRKY2IhqjwOcA6YOmlRgG\nfIDBbyY0uQzMaQjTpdAF6DUJWvKh+hbIq4YoLZz/GdoPHyUs9xFqImaRbLyd/elLCexfR16rFZ3W\nRnmPs6nXFLAp2kwSOWQv/x+7enWluEcmE6ofQCPLsZsCNBgi8DSZKG0dSEzkNJKKH2dHRhOyOgHP\npNEEZT6mlrlEfnwply7/hLU5K2lochO/qRVaViG9bwBByK9Fmwy0XYdfakjIr0YqAoQPEiW0rYHd\ngqZwG19cdhpZlQV0rS1DOlqR2zegaMC7pwBzd4VL7JOxEY1QBEy8C0aPhvoPofLvkP6f9hzIKoen\nk4Uv1J7ycUJKiW/LFgIVFQRrazGOHUPb8MEELzoHedVk1nvfJWz7Xnq6gvjiGrHFPg53T0Nq9yMj\n7IiY4QiTCWmwENyZhyjZihx2PvNmDmHElrdJHmLEtKcG9lfCPwXckg0NNhjcCrEG2L8TNg8Cnxc8\njex8bD1dnxuJcK1HY5Xga4Uy2Z4m0q0BfSz0TQExEhy7qNm+iNCEILrBXsh3U9s3DV5xEDGjK8rn\nGwj2PZ+Wyo/QhkRhKS4jGDoKsXMNwVw7pVkKb0dMZdam1wiPcaJEzUATMh0xYzTc8j/InUgw6IYN\n56F8UA1Xz4aWZZB0CYSdhKxbDf6zwTwBEfLSj9eOK90M7/SDkHgYvwQWPQ0z/0PxM8MwXG3E6eqH\naC2jQQml38ZB+PI+pW6IJCpzFg277id0WzGGs/pR5ylHh8K+KIGxTUdQC4Y6sFltxC4Mg0vfo35d\nIrIxk5CW9Wj6XokmfAiUPQdL10H4heyYPoUWWcKgb15BaStGdnfjMXZBV7cDTbGFklwrsXuCeBvC\nsUf3Qe5eiV820loRxdenTqfPx0toOCuOEGpI+HgdBpcXZXAywpaAO6US04fZ4DeC3giZfaHbQOjS\nB0oLID4NnrkIxlwF/c46rs/60eKI9ZQndVBvPjo2PeXOnXHkT4wQAsWg4Jp7G47Z1+A8dRDVZ0Xz\n8exGNrrfJHeTjQEJJ6EZOxtfRjw498O1dyKsoSiP1yLumg83vYWY8QiaFAOi92nIxg1Mf/F6Xu05\nFVmhBVcokA4TQqFbAigB0DvAWwf2BsjWQUMpLF1HUpwT75sLEbHjIOUtUFpBkXDxcigREK+FqgjY\n/ha0zEefaESXOBlRbIOiSCIre6Fv0dJmc9CabUJZ/Rr2agdKdRWBATrE6q8IdtOxKj2DRSGnYS6P\nxRLiQuu34BXv4iu4HRKj4PFLYGMuyrdZKPpaGB+EwusgsAyKT4GiSYjyJ6GqHvyXtX+ZUsKn90DJ\nWoILX4NXTdDjNlg6B0bMbDfZmIp9czU675uURJTSxXYmO0etQ0xvJiahEu27lxG6oZb1l82iTptG\nrPEC7BlrCBtYR8RTe3Db7UhrN2Kcq/F2jYJN87AvcFGYCspeieaz/4C3HHovwTdtDfSeSM8nnyO+\nIYZlp0ynYVgXnKEa2uJB6ZpHMD2A1hWGNuM2jDHl+EIvolSXAQ0C255UauKjSbl/EXX9TiO1ej0W\nWyvauESUwq6glWja6uGsFLj3LbjxGeg+CHZtgCeuhXsmwVW5sCcfdq04Tk/4Hwh/B7ffiBDiZiFE\n8MCapodFDV8cL8rXofn2OuzhRQQtkqDXg8YZZPR1W7CWelFqG2iTHkR0Aob0FvyyFQyhaGa+iDiQ\nvSvoc6EUfg2Dz0G8+W+0s9LQVHs47+tiXowZxjWbv0EzdgeMWg91r0PmQjAUgC8ZTFkQ/zXcshse\nuoxA3Tb81dUYF+6CXdMh0QpjXfDSmZCRAqVamGaB1a1g0NFcMRpdVBaWr19G2AyI1Quw+3OoLWzG\naglBBM0E/W3s6xVJ0vpKzBoLXwzKRWoCNBdmMyvwIJaQIKLPSgKua1ESdsMVveGhVdDibE+k32qC\nQfPh4TPgxqfAsw2sw6FxEdS9jdg9F4a8357NrMc4mDsEb0YYmnOnoh00FFn9P6rjFxG5/2rMWfl4\ni0yEZdjJdNcTUJZhVuIosrfRvXoC2jUXwCW30r9uEYo/Cm/izWiDZgw9Uik9T8Gi7cZb7kH0cMQz\nKTuJ4Et/RRR6EQ4PzYmhRCxrgCsvw/3C1TR3X0L0iEJaszIIf+9W4pNL8XetwR0xFBPNlJjnYI63\nEbNlP7pID7KlmYalV5GwOoB28CS2PHsrOTjQ5D3Gyf7PUOo9EJ0N4T2hfhdypwElWw/Br2H1ZEj/\nC/Q4DXoMbl+WeM1CsIVBVR7ITvYWqzNyFIfECSESgbG0L5zasTKdLVRwooQvfohsaSGweS2a4ae0\nz7Bq2Ai7HkV2vx/flzNwjAolsmYq9Jz1o3KBb29jk/ZbchwWjCvrYEgU6Iph2BK+dn5Enw1zCNWG\noIwtaP95n5cLhnVgmQsxV0DLo+DWw+IlNMdcyZ47rqTbFRmY99vBsRVSG2DYKIh5AHY8Bf5aqFsJ\nI16hYlUbGpOB2HWz8ScOxKvJR7OmhuBXjfg/mIZlyUKUUieuTAv+xGxsG3PwXTGOotAhLC94jlmB\nJ9F2/xdUhCM/mU3bTddjttyJZ/V9GHwLEL4KCJcQdzWETkGigDYWoY1FSgnl2Yi5pTAoCbo8gMy2\nE/zqLJRtbpqiI7CMHYF2XwFbuvehnmQG/WchtZ8pRJ0xmLYLd6CvOh0l0kZ+9v/o89VYTL1zkftv\nRrjt8EU+jREaysYPwVRtQ+MJJ39AkLMXvMDb3T9lStzf0Ty/DVEgCPTwUdtzODFfrMBjTWD91J70\n1m+ksN9sLCIeWzCO0J1XIPYbKR8aTpTpCnzSRVXwSbI3FOH9wIShrhWUeDTn3ApDx/Gi7x2m7y7C\nkHE57qhmaNiKsRaIGA8Vq5F5TxJ07kTjlNBlCtACLXsgKRMGvwzG6AMPloS6fRCVeoyf6GPDEQtf\njOmg3nz1668nhHgP+DvwMdD/wGLTv4gavugECJsN7Ygx7YLcWgo7/ga9/4HYdyO6CW8i20oh/ydv\n0cufRrPpYYwBP9t8LpzDLoJ1X4EmGrQ6Ti67lbzMXlQmdIO2wvYykTdCk5ll1u2sV56l3GnC+83n\nBCe/irBE49hYg3L2v+Cm/0F8V+ith4SzQLsKxr4MkUNB2mHTDRiio9k//2Na486g5Asndbfvwruj\nEe/k3ujbYii6IRxvt1QM+7XoAxpoq8efMoX7K2xc6nwYjQyCuwdsfBXRZSwW892AQltuF6qGj0WO\nrgXb09DcAs6FyM9ykVtS8TU9jCe4AsLHwDmvQJMBPjwHce25aPqvoiXmGkyFbSi3LwRuw2K7lsXR\nZhrGpEL37livvY8w9xw8Pb/FoJtDRm0Rm9M3QsMEAqWFeJ/YQv7gLIrOPomE/R4ity3DnV9Ci6eF\np/s+ztTKCxC+KHDqCYa5aQuNpSkjg7YMO/6UUHQpqVitY+jvHE83ZpBQ/RmWtNcxDTifhIpKCnd/\nRkvbI8QwCm3VXzCZnXjQ4RnYQJvleWqKH8Rs64kh9xWIPgmPWIQnvLL9P8mobOhzGcEJj+I/dQSY\nrNA8HxoqoVVCwWr4ahS0lR94sMSfVpCPKJ4Obr8SIcR4oExKuf3XlFPDF50JbzNsvBr6zIHC6yHr\nGTAkIcNSIGHgD+zqwJSBt+9NROSm4ln4Cnu7FZNVcgaG0FCofxVRNpTqPt0xFqwgLDMSC4Dig9AR\nxLgiCclfQ0RFG/smXU6T7nVIXEvoBD2O0hsJ1p+Gv2obBu1fMFjOwF//LzTOVYiqVQR9XpqrJlD8\nwPXs35RHTMJ0ks4PQpOCLsZCwcPRpGwKw+iKwBvnRj/sIXQZA5BNJzNsnYubo59E8fvwhd2G/ulx\nMOgSOOsx2Pwuot+5GMikRvyTsOAFmL5YDIOcSMtaZNxYeHYRVbc9ijCZCNU0wFAP1i9MiMEW0DbD\nkrOwFY6gZdADCP898PVcYl39ODVyLxG1jTSHx6AYSzBqXyWiVs9uWwiGqO7EWmrw7EjD25TC9ufS\nSTFOpZvpZDan349J043/1vTnotCn6D1/KYpDInxN0NQCxgh0mU1EpbyD62YtTcEA2dtfxZ10Etrm\nf6A0NaHRdkH4wuDzpzHX1ZHZMwwlrhJnzX6w6hAZEmOal2BoOET2ZnmylT4tTxEMH4cijIC/fW1C\noWnPNKjowRIG5okwIgf8Gih8AxzTYPJdYLaD6GS5KDs7vy9evBiI+eEh2oNIdwN30h66+OG5w6KK\ncmch4IX1l0H2XVByB2Q+DsZkgtQjbdEE0ofx/+sJ6yMhYhz6EadhZgm1Yz14m1dRfaaexHciUGZe\nCFUfMyWwgNfOfJMWvYvRAHoD2PqSVZFMWfVnFOeeSXfdBe11fnoxjrkReJInscdloKZ3X1oj80jY\nfisVvh6ctmE2zV+1oV/dhO88IzkffY53wkiiJ/txOXUYBthQUqeg1K+iJKuMrMJUnANbwBqO0rCY\n0rh05m6bQPSQWhpSTiJcMxgi0nA7NRj1Zlj/KgFLG0qWmXBG4t5+A8bVa3GdMwRT4Tq8Xc7CYLBg\nz4vC2/VUDJyGjrGI0NGw1AQXZICxCfHue4RMzqNpYizWxlbslVvol19CeddkYq1FBJY/gta4lpdT\npxFhCOXUpgW07h1IhTWO2lH19NfPxmjKYRfP4Ws6l7/VBvnXV3NRzjSwYOYDTNqwE+0rz0P3BMQX\nFRhdAsNaDS2X9qAqoRcp1TuRm1cSPMmMXzQR0G9E+t5CnuoGlx7zvu3o9kgMgTUEIy0IeyIOuw9r\nWQNK8lXUGMuYbLgLQXtOCj2noBAO4duhYQ1EjsAvvyLIbqR9GMIQB+mXt4+4uG805JwClz91HB7g\nPzCHGhLnWNY+6ucXkFKOPdhxIURPIBXYKtqzPiUCG4UQg6SUNb9UpyrKnQGfE7b8FdJmQMUcyJgD\n5gwAXKygTVmEjD3I+oBCEOo+CTnLhSHWRNUNkpKL96MrGE94tzLMWZOZUVFEk80N4eGg0xEsKgCX\ngb1nXUGrexvd9zwJ0Rcj9xZjqtFilacS1WUI1V4jzc3zEP3rSXlrLcHKesIq3IgUHf7rByIMRWS9\n/ACOXp8iVxZjtocitUtIzOtGZf8qtBsb0PZJwBuzEH1DERFsIt7kxpevYOg7B7HpdZjyLJU3nY+1\nogmbqRjdwjuQa6diHzkRR/AJSOiJeUM1VGkwpc6C2b0JeW8zdWfVIXQZiJYacBdDaA5kvga+ZXD6\nbfDafkKyBf5hLqiTaEN1bB48kFNrutO8uZj6gUOolhamu/6LZ+9o1o3QYG+VjGq4FmHJweuvo3rB\nPh61TuK1nu+hhMeh4S+8GtzH0MIvibeEI5p7QbIBhjsQKxowLi4ie6wLEZaENr8OsdMLDeMoP/sk\nQhvcGPNeRLPLgRwzB5E5EqOh2//fxk3u/zCMOygwBOihyUb8oONlYDQCC0RFQcV7EDmCIJVI2Yyw\n9YK6ryF6HGSlwxlVsOpd+OYNGHnR0X5q/zwcaji3ZVT79h1Vf+twlVLKHUDsd/tCiGKgn5Sy8XBl\n1Rd9xxufA77oC4ljQVsLqfeCrff/nw7SShVTSOCLgxavfPFFAo5mkloWIW19ERs+wOuopPG+MFp7\nDcfs70J4hRF9dRFB7+e4tGaM8XejRA1mvX0zfXcXoftyO7z2EcGhFrB7EIYEqG+jxRLAN9xAaIEb\nzOGIt0sIpAfAFo9vzj/xaQvwuD/HVNqA5Y1a8ICSEkrJjCHELl6J8c16GmafQviwr2DdLKAJuXs7\nwl0DXXIh7Vz2LtjP7nvuwf5mL4aUOHGt6o3ptbdxND6L8f03MaxbDZPPAcNiSL0GnCMIFi6jbto+\nIiuvQgnWQ/lG2FiHnP4g4h+DoWY3ZA7HNTIdU5qJwFvvs2RWNsEwiHukmvenX8hf5cMogalU1u9H\np/NgaQiiqXcQMWENWxsUPnrrQ24p/zdWcwiMuQ4GjKXx0ykEndux145Eu2s9jOwH/Ufj/++9oGvC\nO8SEzuSG2GiUylrE3mQYGoFnYz7GogZETBbcVPCze1jLfrY2vcpai49L5EjidcO+H3f9HVLC+nNh\n0Lv45AKQLnTuXNh+FeQ8B+YfZIhrbW6f0v0n54i96MvpoN5s/+3XE0LsBQaoL/r+COx5EQwWaHwR\nQgb9SJABFCyEc/9BizavXk3L2rUk3ngTxNoQPUph0ij0Og0xT9SSdtHn2B54g+rGzyhOr6S0ayLf\n9O3NDtMugiXvMXDR+2i/fAUMK+HiEMTfVuG5sx++S06luTocl9KPiPe9aFwBNNVD8J86EV/QQtPg\nAZgKPiLg3YB9ZSlW4yUoE95Ccfkh5waim5upGZ0Js07DtNuF782ZBBUTpd3tuK2ZyLYQZHMM6CMw\nWxZjzDDSs7AGyqpRypYjvnmKkIowXLqdyKvmgRIHUoGmasjogVJVSVjVLDw1s5DbLoBel4BGi++h\nWwm4JVx9L5y0BkOpA0/9EgJDtAx6exuyIYPlE3O5WLxGqwzHtnkpWYl/Jyn7f7iGZ1Of20LR9lxa\nl57J7S0PYhkTS8lNz+JrqoKHehBWXIl5VzJLR/aGZ3fCQB3e9AlUj0iG3mfS2tVK3aBwWrp4kTIH\nJVCNsnwTWpOf+kn9wJl00PsYRSzm0DNo1EZhcj4PDbNA/qT7JgRoLOB3omUkWnEmtJVAzecQ/Mlb\nqBNAkI8oR3mcMoCUMr0jggxqT/n4U/ExOD5tX8Mv6QbQGDtUzFNZye4rr6TH22+jqd8On50PU+fD\nt/OhaT9sKIf7HoIvZ8OWZQTLJW1WPa1eKztuPAmfFnRNQbolnEN8bREi73lI7Ysc8gwl2hfQf/gJ\nCdO2gEYDb0wmsKQEJSYCzzmDKAhx0DUgCWpfw1QfjiZ7PrRa4J6ucMsKsDzH7rgIMtxX4Cv/K/Wy\nGF1eHU252RAm0FbsIemLVjxj57Fn7wdYXygnxLqRyH6O9qnY5VbwtOLJseBPOxfLNy9Bbj9IvhWq\n10HVbljxNW2nB/FFafD3HYvitWG79U0qL0/G1ncEhvI8dI2V1PYIErm3Hn+1gTJLGjUaPaHxTYRv\ndxL/XB1yRjSBkYNB0ROY+wW+zX7cDwyhUfrY2jOCOhGJpsFKvSaR2MpGzvn341QnxhCw6Uk0lFPQ\n8wJcSQ66RVQi9+fT0BxGWsE+tM0+hF4Dp76JdM1jTbKB/k/a0N/xEuh0P7ufK8kjEjtZbWug4TII\nfQysl/zYaOe9EGiFnLnfH1t9Cgz6FDR/jsVQfw1HrKfcpYN6U6QmuT8xkEHw1YM+qsNFAm43O887\nj8wnHsO4++9QnQcpl8Dwq2DFGzBoCnz6NpitMO4c8Llh0V2w6VmKu2ZjyvcQG1JHq9nNrm4pVCak\nElkboHt5BWWjb2TzjnrOif0Mbder0WomEpwchruXG+X8izAaxpNn+4I4/zvYl8ajcadBzD6IiIJ3\nt8DD1QRKJ7A3PkhQ70UvwRWoQ1/gJuUjDT6dHo0nCV2jQnl8NdHdp6PRtuL48l+EJzVCsxER5oVQ\nPd41AbyZWiytQUR8Ngy/FWq/AZ0Htu7DHzQRbPkWDRqURpDlTVROiYbQNLb3GYjVkkb0zmUYnJVE\n+PP4MPI8xte+hzXei26tBR5xg80PE5OhuivB7GhEzTcIlws58hLaGt+nwa9giG2iLVGLZbOLyGIH\nIiyI9Eg8PcC9ywyaTEwON8rOVvyttRjLvJAF4gyJo3c/zPXhtOTcT9nm/9Ar+zkICf3ZPXXhwXTg\n5R7BRmh7GyyXg/jBa5+dd0PlRzAm7/tjjh0Q0vO3Pn1/aI6YKCd1UG/KVFFWOQi+pib23n47MRdd\nRKhxBWz6N1hHw5iH2hObf5cHwuuFm6bBfz76Pj5Z+wxUfwvmUIi7HrSpoDMhFz9DbUY8G1O2s1sp\nZ+BiH0OGPIzP+Fe0/65AbFqF+/15GDetQLFraA5bTGWhoHv6WxCdAy01sO1l+PZf0M1Oa9euuFvz\nqBhkxeaZSKnbR6/8NwkrCQPrWMgrJdB3LM7MDOzGKFh2N64dSzCEBlAsQNQA8KTh/WYjSlg5mqwA\nIvECqPofWJIgMQwGfAtzLkDeZMO7jgAAFmBJREFU9BquirsxfvgGQWMbzh1mdl7VBRkwY7BlovHk\nEb+uktdOnsrVe56nWTOAOMNWhBKLbBwFC77Bn9KMf6wXQ2EToi4I9QLv0Hi8Ojc6SzqOqEj81YVY\nm8xYGnajCJBpHrxGC3tdJxOVtoHQdaPQ7S3B5SxDe+r96LqfhvwoDU/PeBxxgmDcqdSW7iM6cgTR\ntjsQvyVyGHDBxhkw6N0j+ET9cTliohzXQb2pUrPEqfyEoN/P5txc7MOHEzq4LxQVwyVl8PIsiEpv\nN/pOgPV6GDgSVi+BoWPaj7UJUMpAHwGuCKRNQQCiehXRmY2cVNuH7OqeePI+pDHuE8I/1yG3rUdc\ncApmpiGDVxLY74bY03C11dNms2EGMIdA7k1g7Q4VL2Dw7EZ4HAQqw9gc4mVCvh5PWwveuFD08TaI\n06FZMBf73lMgwgspudQs34R2Xx0JfS3gzAZDIpSuQxPfC0+PfRgrFkNYOPSfC8ZmaFsOU25FvHwp\nptrluE4KsHfQdZTXVlKZpKNPpQe/djdp31SxKrs/fVtLMPndWOK2wYYe4MwD0ysw1Yvsa0f4z4f3\nPwcjiPQJGDaVo0kPZdGY3gznfHRdQljLDsqDmzm7bC4m92502rtJ6LaU2oYEQrZ+TsANyoyn0HSf\nCo4NiL2RGDOSMdpfJBiIQSk7HUfac/gpIJYn0NChVAjfozFBzqNH5mFS+Z5OliVOFeU/EA0LFyIM\nBhKuuw50Fug+HfZtBL8XvC4wmH9cYOrlcPcsyOwJUbGwfylUFcHmBIK6G2m+ykxYw35Y9Q1kPE1I\n2V5CPrsfGpsJfLYcEZkOEakEgktRPhmETHLRZjNhXbaOrt7L2N30PH1MD7b/xF41AxzVsCcf7bhC\n2rZfjL1yA4MbNlNTsB9LqhWfqMNdux5NXhPmMfvwtH4BIUb8ygoMEwJYXf1gvxO65CCffwRcbYhB\ndhTCCCTFoYm4Eta9D+EWCNsEMoUG3xY2XjUUT3gKBl0EcSF9iaycR11aHKFtw1l6cjU3dLmL5V9d\nhLJZwLZmGL8GNoWALxtEEfqN/cC1EZQIyElFfvEMRA1EW97KaB5nCS8ziosYQR9Q+pIfmUN69VBq\nLG9h3eQgweFCP/V16p1f0cRiEjgVQ8N8FKcDej0KtiwUIOo5Pw4xiuDw8QRp+/WiDAcW1VU5onSy\nDKfq6Is/EBqrlf7r1mHNyfn+4PbPoXjtwQsIAcUFcN14eP1+eHEV7DXDZWcgrjfgC9kOXA3OFvjm\nVbBZ4ZHNSHsWzZMGIbv1Qtz3GpqEa5H99uHWZ+JJTYOcR7CGfIu1aBcBvKBoYcgLoPFAUwOuum9Y\n0Xso8YF4AgnhuEfG0GiPxFAbxFa0BWOtC7nFikHWoG9w4/K24hmhRUa7Ifc6WDQP6fIQNLggxIBu\nwCo0/RdCiAkyAMcypKOCyq6XUzU7hLTweEKwY3TVYxUWRIKOkf7bGOTeybKMm7m1opHU0nwYJqGf\nDnRxMNCP2L8Vsc+LdC+jTZcH3jI47TSkxox76ggo2InJZ+BkLuZrXmU9n6Cg0G3VSoKuEBK+3Iri\nc1DRN5plPWPwR59Cck0mO3mGWu/HBOwjIfT7mZhi3IWkiwsoI4+2ztY9O5E5BqMvfg1qT/kPRNjo\n0T8/aIuC8X//eS8ZQBEQHgrrl0MXBW60QoQJ3E8izPPBdxes/AQycmHivdBtBNRWUPnMNbhtLYQ1\nLkV+cT7CtxfFOxyZrhBueBMlJRxix9FlXl9IeQeSpxPQBhDD5uIou4C6mlvJsvfFH59L4merUCZ9\nRjDOT2nIXDyuClIu/A/G23Oh6y246l8n0C8Bw/rFeHv6CX5SgWKzE9QWokTqQG9F7L0LXDUQeSZk\nvwCmFVD1D/x1D5Hsk9hW15LWfRdlmdHkmZ4h25eF130beuOzzJj/IQNrNkAfLcSHQH0z1BvBVw1m\nPfjsuAc/iGnJpZBjhRYb4uSrcA6owdR/JLx7JqbQSIZoKqm0tuK17kE2z0HndeKOicbmaUZjL2G+\nXM7XMW3M3pBPCn+lPLUZjXYR4f42FO2Be3P6uQizFQO7WMV9jONVRMdm3qocTdSFU1WOKF2GQWzW\nwc+5XfDwu7B9LZhuBLMTzBeCax9oklE08QRm3onGqwf9gSFVUQk0UYCeCDCdC5nPQrkZ4UrGsmgX\nwpEDcWlgiYL8AIS+hL/6A8q7VOGyRlDfJZJI0YOsxnBE4BwwfwaWcBQgNWMODVSyhP8xMikVwzf/\noPmGLMLbbmFn91pyXnHQFv8/jGeMIbinFk22HsrKIDERMuaCywxbP4A9X4OrgoSIRjbGXELOuRko\nsoKauiIGtkYQYtNS7+uF7R+zGXjBLTDAAMF9kPA1tE6F/KVIpRcysAPlgtU4Ki7EsFqPOLUWdsxE\nnLEZrXgf/4gEtM0alJNmEu33YGzdhjPvXczdmvDnR2F2WSHUTGsgnisC+9BUn42+YB5KmZ9I483I\n1fMIzn8Kpt564LuNQwA9uYSV7KWNaizfT/pSOV50sh8tqij/0UnIPvS50Ij2f9M2ghNI2AHaMKib\nCjWPoI/OwscuNPpBPypmJI5ELgHPp5CwGyJeAaOC0DwBBTrQdQFHI1gcBCu2orS4SN3owa/TkGpN\nxuA/HWHLg6VPQO+x4MiHkO4AhBPP6VyFq3wOe2+NJunGfJoLLyJjkBN/ghPTyH/TFLcYY6sBbbQf\n2rLhmSXQwwXmKNDYkFG9CZp2oTS46JkYwn75AXHK8wyoOAUlLx36X0sYBXDvXWC1w4prIOtBWDYV\nGldDWHd8TzShSQkDezLe1jREOOBaDSISat7Bap+OM/lZQhf6gZkg/YTUFuFv/JSmmAwsUz5HFL4H\nEUNpCnmEULoTHZkDTVVgi4fQBETXfmi6DfvZbTFgZzgP4ab+SDwBKr+XP1NPWQgRBrwDpAAlwDQp\nZfMhbBVgA1AupRz/e66r8itp+KB9zLLQgtCBNgZaV6DjFrzswsiPRTmBGRiIBed7SK0VGalFNO6D\nSCOMPRtkOGi7QkIkSuV2iDWBrxpNSzFS14bUWmGRD/asg7pesGkSn018lLJIBQMW0vbMI3a2HpMM\nZ8WMcXT/8GMi44bSckopYt+bhO4NodVXjNwegL4RyBgbov/VyKxR4CqG105BKd4PZxgxfP4EkZkX\n4Y6ZgjFvMFzwJjwyC/MZl7ULst8J9Vb4zyzICYIxGf87oSimIJqIZnwb54BShtjfAKefD/2fBJ8T\nnUjFH+JAOpoRLSWw8HRInYynTwm6qNGYlFSoXw1dbyaMCZjIhpAYGHEthMS1f5FnXQ5ZAw56S3SY\n0XGQkJPKCc/vGqcshJgD1EspHxZC3AaESSlvP4TtjUB/IOSXRFkdp3yE8dTCzpMh5xvQHug5BxxQ\ndSeBxL/RxKNE8MDPywVboP4eZNjl4J2HMM+FllJYNRu2LoCKONhdB71ywRYLiha/shyZ0gdd1ATY\n8iGc3Aa9v0RunExr92TajCvBbcJtLEM6/Bhak5mbdCUeX4DR7yxgXK9rye+zjG4fdUP7xCyc19mx\nZbWiiVagLBQyhoESIBishcYMcCxH2dWCyG+lzZyCxuXBkDoKEvvA8kVw+jXQsy9sngtxo2H6FQS6\nDiEQHofu3nsQ9/fB2ddAoMKDfVMQ/vk+ZH3fs21lAYbnH0abaEVqjHi3BPFP/hJTUj6K3wclL0PO\nQ/ipR8GCghE8TjBY2yv44dqBKkecIzZOmY7qzR9g8ogQogAYKaWsFkLEAsuklN0OYpcIvAw8ANyk\nivIxQgZh+cmQfAGk/uXH5/wNoA2nhquI5tmDlPUBWhAC6ZwGllcRwgRBPzTug307oboGckYgE7sQ\nDBbR6rwA26b9iLYgNHugRxxSxOHSFOK1uZBRwzDISXhFHvaNH0HSC7g+fxDzti/A0gMam3GePgTH\n/i1EvLYH7XVnoYS0gsUJu8KRe9ay8o6ZpDVuJa5lN0pEBaI1HJquRK79ll2jexORNYOoUifsXQ1L\nXoDIREjqBcvnE8w4Hd87K9CfcSbingfhX0OpPsVB5N5JaMK7tH9fYy4EY3sPVuKl7cN+WPo8QVl6\nCfbLHsJ88iC0Ux6D7bdC5g0Q2ufo30eVg6KK8sEKC9EgpQw/1P4Pjr9HuyDbgZtVUT5GeOphYRQM\n/RxiTjuoySFF+QdI7wcgWxCGmQe/DPNxBZ/A1ngZmu0PQoEXulwDo86D6rvAfBWsmwqnFSM9uxFl\nN0Pii2CMAXcLFCyB+J6gDwFFg+uJk3HYQgm7YQF6wtovUl+KfHoKbekNFJ17MjpvE+bdu0kJ7kSI\ngbB1N4HsS1nZx0A//WzMMhQlANxwCjQ2IbsY8X5ajP7OaxGWPvDO68jxvdk3Yhmp+sfBlnPQtrVu\nOh9doDeb+39J5pMGQq/9CKW1EBb3gqEfQ/zZHb0bKkeYIyfK3g5a6zvHjL7DZNb/KT9TUyHEmUC1\nlHKLEGIUHci+f//99///51GjRjFq1KjDFVE5GN466H7/IQU5SAs+imjmOexceeh6dOPBOQ1+QZRR\n9IiIUyG2HBrKYMz17SdlEGxJkP0geEoQZTdBysugO5Drw2iDPhO/r+yN29BmZlIw2UECH9CFAytW\nRyQTuGUqhoUPkBOYhGI5k/r991LZNZr60CT09VGElr9Jb38CTea3kIaB2AobYMly5Glj8H5agO6l\nzxF9DsR4s3oSuOti7HF9IOpNMN4KurCftU1bHUCz+C4y+n1G+LVjQKsFf2v7YqWqIB9Tli1bxrJl\ny45CzZ3rTd/v7SnnA6N+EL5YKqXs/hObfwEX0d5yE2ADPpRSXnyIOtWe8pHC5wCtFcSh5whVczkG\nehHKdb9YlWy7D7RDEPrTf3wcN208hJm7EOigrRLy/wb9n283aFsFrd+AbRqUXw8pL7RP3jgYZXmw\n6Glwzadq7Hj2dfMxmBcRCKT0EfS/hKKdjsDcHqst2QEr3iKYoqNsx0esubg/PuEmxtiDLrsXk7Z9\nJzK0F743zWiKl6O5+BqY1R4/91FLVdscEm5ah8axHG58Fwae8zOX/OWLEU+cgfz3HrQcyFncWgyG\nGNCqL+qOJ0eup3zQsQkHwX5Mesq/d0bfx8DMA59nAAt+aiClvFNKmSylTAfOA74+lCCrHGF0Ib8o\nyABh3IiWg+f5/RHCCs6zkPKnP/X0WLi/XZABzPHgb2kf9dB+AGoeguJpkPT0oQVZSnjnXpj2d4jq\nRVzGo2RzB35a2i8vdGh0VyKE5fuXZynZULILxTKA5NpQxpjvY7RnOl39oxBZD+I5cyeevzUheuSi\nWVgGtnBwtv8B+mmi3rwQ55ybId8MN9wJ7p+vbadNHEtw7FUEafr+oCVNFeQ/Fa4ObseG3ztOeQ7w\nrhBiFrAPmAYghIgDXpBSnvU761c5yujpgZbUwxsargDPSxCsBs33In7QbGeJ50D5+5A6E5xrwCcg\n5nQwpBy87mAQVr4FfcZBSCSMfRJ0Zmx0+WWfhICoJECDmPZPIkQKhH1/Df+7L+J3NKPkDgOzDc65\n+UfFQzkNu30CLN8OXy+CtStg5JifXUZ3yqNINSPBn5jONXtETd2p0mFkYBcAQnOIGYTfEfTC2gtg\n8BuQ1wPs48A6CMJnHtz+08dg/Udw5xcHny7+S2xdCoUb4KyrwWj50Sn/6y+jmXIuwvzzOr1UI9Cg\nI/LXXU+l03DkwhfFHbRO6xwv+lRUvuOwYvwdih7MKVC/CLp8Bqbu7eGJQ7HuQ4jtApqfr8hxWBz1\nMO92GDoJ4n/cs9ZOv+QQhUD/o3fXKic2naunrP4mUzk6mJNhzRVg7Nq+f6hJFO5W6DkarpoH2t8g\nykPGQ3L2L4u+isovcnTSxAkh7hNClAshNh3YxnWoXGcLFajhiz8JLbthyQA4vRgMEYe2CwZA0fy+\naxVuAmsoxKX/vnpU/lAcufDF1g5a9/5V1xNC3Ae0SCl/1coEavhC5ehg6woDXgZvwy+L8u8VZIDM\nfr+/DpUTmKM6suJX/6ehhi9Ujh6JU8Cq9l5VOjtHNcv9tUKILUKIF4UQ9o4UUMMXKioqf0iOXPhi\n6SHObjmwfcerP7veL8x4vgtYA9RJKaUQ4p9AnJTy0sP61NkEUBVlFRWVjnDkRHlxB63H/ubrCSFS\ngE+klL0OZ6vGlFVUVE5wjs6QOCFErJRy/4HdycCOjpRTRVlFReUE56glJHpYCNEHCNK+CMhfftm8\nHVWUVVRUTnCOTk/5t+b4UUVZRUXlBOfYJRvqCKooq6ionOB0rmnWqiirqKic4HSuJPeqKKuoqJzg\ndK6e8gk7o+/oLCtz/PkztuvP2CZQ29V5OKoz+n41qij/yfgztuvP2CZQ29V58HVwOzao4QsVFZUT\nHDWmrKKiotKJ6FxD4jpl7ovj7YOKisofgyOQ+6IEOMTikT9jn5Qy9fdcryN0OlFWUVFROZE5YV/0\nqaioqHRGVFFWUVFR6UScMKIshAgTQnwphNglhFj0S6sACCGUAwsdfnwsffwtdKRdQohEIcTXQog8\nIcR2IcTs4+Hr4RBCjBNCFAghdgshbjuEzZNCiMIDqzn0OdY+/hYO1y4hxAVCiK0HthVCiJzj4eev\noSP36oDdQCGETwgx+Vj690fmhBFl4HbgKyllFvA1cMcv2F4P7DwmXv1+OtIuP3CTlDIbyAWuEUJ0\nO4Y+HhYhhAI8BZwGZAPn/9RHIcTpQIaUMpP2NIjPHXNHfyUdaRewFxghpewN/BN44dh6+evoYJu+\ns3sIWHRsPfxjcyKJ8gTg1QOfXwUmHsxICJEInAG8eIz8+r0ctl1Syv1Syi0HPjuBfCDhmHnYMQYB\nhVLKfVJKH/A27W37IROA1wCklGsBuxAihs7NYdslpVwjpWw+sLuGzndvfkpH7hXAdcD7QM2xdO6P\nzokkytFSympoFykg+hB2jwG30L7O1h+BjrYLACFEKtAHWHvUPft1JABlP9gv5+fi9FObioPYdDY6\n0q4fchnw+VH16Pdz2DYJIeKBiVLKZ/kNKzqfyPypJo/8wiKGdx/E/GeiK4Q4E6iWUm4RQoyikzxM\nv7ddP6jHSnvP5foDPWaVToQQ4mTgEmDY8fblCPA48MNYc6f4W/oj8KcSZSnl2EOdE0JUCyFipJTV\nQohYDv6T6iRgvBDiDMAE2IQQr/3WFQSOFEegXQghtLQL8utSygVHydXfQwWQ/IP9xAPHfmqTdBib\nzkZH2oUQohfwX2CclLLxGPn2W+lImwYAbwshBBAJnC6E8EkpO/3L8+PNiRS++BiYeeDzDOBnwiSl\nvFNKmSylTAfOA74+3oLcAQ7brgPMA3ZKKZ84Fk79BtYDXYQQKUIIPe3f/0//gD8GLgYQQgwBmr4L\n3XRiDtsuIUQy8AEwXUq55zj4+Gs5bJuklOkHtjTaOwNXq4LcMU4kUZ4DjBVC7AJOof2tMEKIOCHE\np8fVs9/HYdslhDgJuBAYLYTYfGC437jj5vFBkFIGgGuBL4E84G0pZb4Q4i9CiCsO2CwEioUQRcDz\nwNXHzeEO0pF2AfcA4cAzB+7PuuPkbofoYJt+VOSYOvgHR51mraKiotKJOJF6yioqKiqdHlWUVVRU\nVDoRqiirqKiodCJUUVZRUVHpRKiirKKiotKJUEVZRUVFpROhirKKiopKJ0IVZRUVFZVOxP8BQ7bw\nF5W9GoMAAAAASUVORK5CYII=\n", + "image/png": "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\nbZVKpTqB/D+F7yW5gV7LfQAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1119,7 +1118,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.11" + "version": "2.7.6" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index 2f1dc820f4..0948428959 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -15,7 +15,16 @@ "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], "source": [ "%load_ext autoreload\n", "%autoreload 2" @@ -33,9 +42,7 @@ "from IPython.display import Image\n", "import numpy as np\n", "\n", - "import openmc\n", - "\n", - "%matplotlib inline" + "import openmc" ] }, { @@ -364,7 +371,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AECBAPGRVxKHIAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDQtMDhUMTI6MTU6\nMjUtMDQ6MDABIYvLAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA0LTA4VDEyOjE1OjI1LTA0OjAw\ncHwzdwAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAALKSURB\nVGje7dpLcqQwDAbgHHE2YeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmN\nP+HDhw8fPnz48Kf6VH9G+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4\nzPji99z0/AJ4n1lfvJ6fnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6\npA0wfln+ho/fwgYYn19C/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tN\nDbSGz7T0SBEWw4vLXzbQ6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X5\n8wZaxWd1+fMGiuFvir8bvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV\n873hB8UnM3xzANtf8nb4dwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7\nT/ppARBvp48UwJnelT5SACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4/\n/Jve+fhsH6Ctv7n8PTzjvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V\n32/o9+fl389Xnx+g5x/o+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6\n/4Le/6D3T/D9V67Y/ZsVQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/\ngPs/0P4TtP8F7r9J3AIO9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTu\nf4X7b+H+X7T/+BPuf3aM8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIw\nMTYtMDQtMTNUMTE6Mzk6MTQtMDQ6MDALPlLjAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA0LTEz\nVDExOjM5OjE0LTA0OjAwemPqXwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -568,8 +575,8 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 9a6ecd72597338b40d2b72378e5ad6dd65df2364\n", - " Date/Time: 2016-04-08 12:15:26\n", + " Git SHA1: eeb5091ca3a34cc85df73a3318cae2b6c7097413\n", + " Date/Time: 2016-04-13 11:39:14\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -626,20 +633,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 6.6400E-01 seconds\n", - " Reading cross sections = 1.8900E-01 seconds\n", - " Total time in simulation = 3.0445E+01 seconds\n", - " Time in transport only = 3.0423E+01 seconds\n", - " Time in inactive batches = 4.4900E+00 seconds\n", - " Time in active batches = 2.5955E+01 seconds\n", + " Total time for initialization = 4.0300E-01 seconds\n", + " Reading cross sections = 8.6000E-02 seconds\n", + " Total time in simulation = 1.4439E+01 seconds\n", + " Time in transport only = 1.4430E+01 seconds\n", + " Time in inactive batches = 2.2790E+00 seconds\n", + " Time in active batches = 1.2160E+01 seconds\n", " Time synchronizing fission bank = 2.0000E-03 seconds\n", - " Sampling source sites = 2.0000E-03 seconds\n", - " SEND/RECV source sites = 0.0000E+00 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", - " Total time for finalization = 2.0000E-03 seconds\n", - " Total time elapsed = 3.1139E+01 seconds\n", - " Calculation Rate (inactive) = 2783.96 neutrons/second\n", - " Calculation Rate (active) = 1444.81 neutrons/second\n", + " Sampling source sites = 1.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", + " Total time for finalization = 1.0000E-03 seconds\n", + " Total time elapsed = 1.4856E+01 seconds\n", + " Calculation Rate (inactive) = 5484.86 neutrons/second\n", + " Calculation Rate (active) = 3083.88 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1627,7 +1634,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.11" + "version": "2.7.6" } }, "nbformat": 4, From a7c455410b93becb802b08d6a789109d8f603820 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 13 Apr 2016 07:48:24 -0500 Subject: [PATCH 438/650] Break up universe module into universe, cell, and lattice --- openmc/__init__.py | 4 + openmc/cell.py | 449 +++++++++++++++ openmc/lattice.py | 867 +++++++++++++++++++++++++++++ openmc/universe.py | 1297 +------------------------------------------- 4 files changed, 1323 insertions(+), 1294 deletions(-) create mode 100644 openmc/cell.py create mode 100644 openmc/lattice.py diff --git a/openmc/__init__.py b/openmc/__init__.py index 5bdc3f089a..9a39bcb82e 100644 --- a/openmc/__init__.py +++ b/openmc/__init__.py @@ -1,3 +1,5 @@ +from openmc.cell import * +from openmc.lattice import * from openmc.element import * from openmc.geometry import * from openmc.nuclide import * @@ -16,6 +18,8 @@ from openmc.cmfd import * from openmc.executor import * from openmc.statepoint import * from openmc.summary import * +from openmc.region import * +from openmc.source import * try: from openmc.opencg_compatible import * diff --git a/openmc/cell.py b/openmc/cell.py new file mode 100644 index 0000000000..a5204f2c1f --- /dev/null +++ b/openmc/cell.py @@ -0,0 +1,449 @@ +from collections import OrderedDict, Iterable +from numbers import Real, Integral +from xml.etree import ElementTree as ET +import sys +import warnings + +import openmc +import openmc.checkvalue as cv +from openmc.surface import Halfspace +from openmc.region import Region, Intersection, Complement + + +if sys.version_info[0] >= 3: + basestring = str + + + +# A static variable for auto-generated Cell IDs +AUTO_CELL_ID = 10000 + + +def reset_auto_cell_id(): + global AUTO_CELL_ID + AUTO_CELL_ID = 10000 + + + + +class Cell(object): + """A region of space defined as the intersection of half-space created by + quadric surfaces. + + Parameters + ---------- + cell_id : int, optional + Unique identifier for the cell. If not specified, an identifier will + automatically be assigned. + name : str, optional + Name of the cell. If not specified, the name is the empty string. + + Attributes + ---------- + id : int + Unique identifier for the cell + name : str + Name of the cell + fill : Material or Universe or Lattice or 'void' or iterable of Material + Indicates what the region of space is filled with + region : openmc.region.Region + Region of space that is assigned to the cell. + rotation : ndarray + If the cell is filled with a universe, this array specifies the angles + in degrees about the x, y, and z axes that the filled universe should be + rotated. + translation : ndarray + If the cell is filled with a universe, this array specifies a vector + that is used to translate (shift) the universe. + offsets : ndarray + Array of offsets used for distributed cell searches + distribcell_index : int + Index of this cell in distribcell arrays + + """ + + def __init__(self, cell_id=None, name=''): + # Initialize Cell class attributes + self.id = cell_id + self.name = name + self._fill = None + self._type = None + self._region = None + self._rotation = None + self._translation = None + self._offsets = None + self._distribcell_index = None + + def __eq__(self, other): + if not isinstance(other, Cell): + return False + elif self.id != other.id: + return False + elif self.name != other.name: + return False + elif self.fill != other.fill: + return False + elif self.region != other.region: + return False + elif self.rotation != other.rotation: + return False + elif self.translation != other.translation: + return False + else: + return True + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(repr(self)) + + def __repr__(self): + string = 'Cell\n' + string += '{0: <16}{1}{2}\n'.format('\tID', '=\t', self._id) + string += '{0: <16}{1}{2}\n'.format('\tName', '=\t', self._name) + + if isinstance(self._fill, openmc.Material): + string += '{0: <16}{1}{2}\n'.format('\tMaterial', '=\t', + self._fill._id) + elif isinstance(self._fill, Iterable): + string += '{0: <16}{1}'.format('\tMaterial', '=\t') + string += '[' + string += ', '.join(['void' if m == 'void' else str(m.id) + for m in self.fill]) + string += ']\n' + elif isinstance(self._fill, (Universe, Lattice)): + string += '{0: <16}{1}{2}\n'.format('\tFill', '=\t', + self._fill._id) + else: + string += '{0: <16}{1}{2}\n'.format('\tFill', '=\t', self._fill) + + string += '{0: <16}{1}{2}\n'.format('\tRegion', '=\t', self._region) + + string += '{0: <16}{1}{2}\n'.format('\tRotation', '=\t', + self._rotation) + string += '{0: <16}{1}{2}\n'.format('\tTranslation', '=\t', + self._translation) + string += '{0: <16}{1}{2}\n'.format('\tOffset', '=\t', self._offsets) + string += '{0: <16}{1}{2}\n'.format('\tDistribcell index', '=\t', + self._distribcell_index) + + return string + + @property + def id(self): + return self._id + + @property + def name(self): + return self._name + + @property + def fill(self): + return self._fill + + @property + def fill_type(self): + if isinstance(self.fill, openmc.Material): + return 'material' + elif isinstance(self.fill, openmc.Universe): + return 'universe' + elif isinstance(self.fill, openmc.Lattice): + return 'lattice' + else: + return None + + @property + def region(self): + return self._region + + @property + def rotation(self): + return self._rotation + + @property + def translation(self): + return self._translation + + @property + def offsets(self): + return self._offsets + + @property + def distribcell_index(self): + return self._distribcell_index + + @id.setter + def id(self, cell_id): + if cell_id is None: + global AUTO_CELL_ID + self._id = AUTO_CELL_ID + AUTO_CELL_ID += 1 + else: + cv.check_type('cell ID', cell_id, Integral) + cv.check_greater_than('cell ID', cell_id, 0, equality=True) + self._id = cell_id + + @name.setter + def name(self, name): + if name is not None: + cv.check_type('cell name', name, basestring) + self._name = name + else: + self._name = '' + + @fill.setter + def fill(self, fill): + if isinstance(fill, basestring): + if fill.strip().lower() == 'void': + self._type = 'void' + else: + msg = 'Unable to set Cell ID="{0}" to use a non-Material or ' \ + 'Universe fill "{1}"'.format(self._id, fill) + raise ValueError(msg) + + elif isinstance(fill, openmc.Material): + self._type = 'normal' + + elif isinstance(fill, Iterable): + cv.check_type('cell.fill', fill, Iterable, + (openmc.Material, basestring)) + self._type = 'normal' + + elif isinstance(fill, Universe): + self._type = 'fill' + + elif isinstance(fill, Lattice): + self._type = 'lattice' + + else: + msg = 'Unable to set Cell ID="{0}" to use a non-Material or ' \ + 'Universe fill "{1}"'.format(self._id, fill) + raise ValueError(msg) + + self._fill = fill + + @rotation.setter + def rotation(self, rotation): + cv.check_type('cell rotation', rotation, Iterable, Real) + cv.check_length('cell rotation', rotation, 3) + self._rotation = rotation + + @translation.setter + def translation(self, translation): + cv.check_type('cell translation', translation, Iterable, Real) + cv.check_length('cell translation', translation, 3) + self._translation = translation + + @offsets.setter + def offsets(self, offsets): + cv.check_type('cell offsets', offsets, Iterable) + self._offsets = offsets + + @region.setter + def region(self, region): + cv.check_type('cell region', region, Region) + self._region = region + + @distribcell_index.setter + def distribcell_index(self, ind): + cv.check_type('distribcell index', ind, Integral) + self._distribcell_index = ind + + def add_surface(self, surface, halfspace): + """Add a half-space to the list of half-spaces whose intersection defines the + cell. + + .. deprecated:: 0.7.1 + Use the Cell.region property to directly specify a Region + expression. + + Parameters + ---------- + surface : openmc.surface.Surface + Quadric surface dividing space + halfspace : {-1, 1} + Indicate whether the negative or positive half-space is to be used + + """ + + warnings.warn("Cell.add_surface(...) has been deprecated and may be " + "removed in a future version. The region for a Cell " + "should be defined using the region property directly.", + DeprecationWarning) + + if not isinstance(surface, openmc.Surface): + msg = 'Unable to add Surface "{0}" to Cell ID="{1}" since it is ' \ + 'not a Surface object'.format(surface, self._id) + raise ValueError(msg) + + if halfspace not in [-1, +1]: + msg = 'Unable to add Surface "{0}" to Cell ID="{1}" with halfspace ' \ + '"{2}" since it is not +/-1'.format(surface, self._id, halfspace) + raise ValueError(msg) + + # If no region has been assigned, simply use the half-space. Otherwise, + # take the intersection of the current region and the half-space + # specified + region = +surface if halfspace == 1 else -surface + if self.region is None: + self.region = region + else: + if isinstance(self.region, Intersection): + self.region.nodes.append(region) + else: + self.region = Intersection(self.region, region) + + def get_cell_instance(self, path, distribcell_index): + + # If the Cell is filled by a Material + if self._type == 'normal' or self._type == 'void': + offset = 0 + + # If the Cell is filled by a Universe + elif self._type == 'fill': + offset = self.offsets[distribcell_index-1] + offset += self.fill.get_cell_instance(path, distribcell_index) + + # If the Cell is filled by a Lattice + else: + offset = self.fill.get_cell_instance(path, distribcell_index) + + return offset + + def get_all_nuclides(self): + """Return all nuclides contained in the cell + + Returns + ------- + nuclides : dict + Dictionary whose keys are nuclide names and values are 2-tuples of + (nuclide, density) + + """ + + nuclides = OrderedDict() + + if self._type != 'void': + nuclides.update(self._fill.get_all_nuclides()) + + return nuclides + + def get_all_cells(self): + """Return all cells that are contained within this one if it is filled with a + universe or lattice + + Returns + ------- + cells : dict + Dictionary whose keys are cell IDs and values are Cell instances + + """ + + cells = OrderedDict() + + if self._type == 'fill' or self._type == 'lattice': + cells.update(self._fill.get_all_cells()) + + return cells + + def get_all_materials(self): + """Return all materials that are contained within the cell + + Returns + ------- + materials : dict + Dictionary whose keys are material IDs and values are Material instances + + """ + + materials = OrderedDict() + if self.fill_type == 'material': + materials[self.fill.id] = self.fill + + # Append all Cells in each Cell in the Universe to the dictionary + cells = self.get_all_cells() + for cell_id, cell in cells.items(): + materials.update(cell.get_all_materials()) + + return materials + + def get_all_universes(self): + """Return all universes that are contained within this one if any of + its cells are filled with a universe or lattice. + + Returns + ------- + universes : dict + Dictionary whose keys are universe IDs and values are Universe + instances + + """ + + universes = OrderedDict() + + if self._type == 'fill': + universes[self._fill._id] = self._fill + universes.update(self._fill.get_all_universes()) + elif self._type == 'lattice': + universes.update(self._fill.get_all_universes()) + + return universes + + def create_xml_subelement(self, xml_element): + element = ET.Element("cell") + element.set("id", str(self.id)) + + if len(self._name) > 0: + element.set("name", str(self.name)) + + if isinstance(self.fill, basestring): + element.set("material", "void") + + elif isinstance(self.fill, openmc.Material): + element.set("material", str(self.fill.id)) + + elif isinstance(self.fill, Iterable): + element.set("material", ' '.join([m if m == 'void' else str(m.id) + for m in self.fill])) + + elif isinstance(self.fill, (Universe, Lattice)): + element.set("fill", str(self.fill.id)) + self.fill.create_xml_subelement(xml_element) + + else: + element.set("fill", str(self.fill)) + self.fill.create_xml_subelement(xml_element) + + if self.region is not None: + # Set the region attribute with the region specification + element.set("region", str(self.region)) + + # Only surfaces that appear in a region are added to the geometry + # file, so the appropriate check is performed here. First we create + # a function which is called recursively to navigate through the CSG + # tree. When it reaches a leaf (a Halfspace), it creates a + # element for the corresponding surface if none has been created + # thus far. + def create_surface_elements(node, element): + if isinstance(node, Halfspace): + path = './surface[@id=\'{0}\']'.format(node.surface.id) + if xml_element.find(path) is None: + surface_subelement = node.surface.create_xml_subelement() + xml_element.append(surface_subelement) + elif isinstance(node, Complement): + create_surface_elements(node.node, element) + else: + for subnode in node.nodes: + create_surface_elements(subnode, element) + + # Call the recursive function from the top node + create_surface_elements(self.region, xml_element) + + if self.translation is not None: + element.set("translation", ' '.join(map(str, self.translation))) + + if self.rotation is not None: + element.set("rotation", ' '.join(map(str, self.rotation))) + + return element diff --git a/openmc/lattice.py b/openmc/lattice.py new file mode 100644 index 0000000000..047bd5830f --- /dev/null +++ b/openmc/lattice.py @@ -0,0 +1,867 @@ +import abc +from collections import OrderedDict, Iterable +from numbers import Real, Integral +import sys + +import numpy as np + +from openmc.universe import Universe, AUTO_UNIVERSE_ID + +if sys.version_info[0] >= 3: + basestring = str + + +class Lattice(object): + """A repeating structure wherein each element is a universe. + + Parameters + ---------- + lattice_id : int, optional + Unique identifier for the lattice. If not specified, an identifier will + automatically be assigned. + name : str, optional + Name of the lattice. If not specified, the name is the empty string. + + Attributes + ---------- + id : int + Unique identifier for the lattice + name : str + Name of the lattice + pitch : float + Pitch of the lattice in cm + outer : int + The unique identifier of a universe to fill all space outside the + lattice + universes : ndarray of Universe + An array of universes filling each element of the lattice + + """ + + # This is an abstract class which cannot be instantiated + __metaclass__ = abc.ABCMeta + + def __init__(self, lattice_id=None, name=''): + # Initialize Lattice class attributes + self.id = lattice_id + self.name = name + self._pitch = None + self._outer = None + self._universes = None + + def __eq__(self, other): + if not isinstance(other, Lattice): + return False + elif self.id != other.id: + return False + elif self.name != other.name: + return False + elif self.pitch != other.pitch: + return False + elif self.outer != other.outer: + return False + elif self.universes != other.universes: + return False + else: + return True + + def __ne__(self, other): + return not self == other + + @property + def id(self): + return self._id + + @property + def name(self): + return self._name + + @property + def pitch(self): + return self._pitch + + @property + def outer(self): + return self._outer + + @property + def universes(self): + return self._universes + + @id.setter + def id(self, lattice_id): + if lattice_id is None: + global AUTO_UNIVERSE_ID + self._id = AUTO_UNIVERSE_ID + AUTO_UNIVERSE_ID += 1 + else: + cv.check_type('lattice ID', lattice_id, Integral) + cv.check_greater_than('lattice ID', lattice_id, 0, equality=True) + self._id = lattice_id + + @name.setter + def name(self, name): + if name is not None: + cv.check_type('lattice name', name, basestring) + self._name = name + else: + self._name = '' + + @outer.setter + def outer(self, outer): + cv.check_type('outer universe', outer, Universe) + self._outer = outer + + @universes.setter + def universes(self, universes): + cv.check_iterable_type('lattice universes', universes, Universe, + min_depth=2, max_depth=3) + self._universes = np.asarray(universes) + + def get_unique_universes(self): + """Determine all unique universes in the lattice + + Returns + ------- + universes : dict + Dictionary whose keys are universe IDs and values are Universe + instances + + """ + + univs = OrderedDict() + for k in range(len(self._universes)): + for j in range(len(self._universes[k])): + if isinstance(self._universes[k][j], Universe): + u = self._universes[k][j] + univs[u._id] = u + else: + for i in range(len(self._universes[k][j])): + u = self._universes[k][j][i] + assert isinstance(u, Universe) + univs[u._id] = u + + if self.outer is not None: + univs[self.outer._id] = self.outer + + return univs + + def get_all_nuclides(self): + """Return all nuclides contained in the lattice + + Returns + ------- + nuclides : dict + Dictionary whose keys are nuclide names and values are 2-tuples of + (nuclide, density) + + """ + + nuclides = OrderedDict() + + # Get all unique Universes contained in each of the lattice cells + unique_universes = self.get_unique_universes() + + # Append all Universes containing each cell to the dictionary + for universe_id, universe in unique_universes.items(): + nuclides.update(universe.get_all_nuclides()) + + return nuclides + + def get_all_cells(self): + """Return all cells that are contained within the lattice + + Returns + ------- + cells : dict + Dictionary whose keys are cell IDs and values are Cell instances + + """ + + cells = OrderedDict() + unique_universes = self.get_unique_universes() + + for universe_id, universe in unique_universes.items(): + cells.update(universe.get_all_cells()) + + return cells + + def get_all_materials(self): + """Return all materials that are contained within the lattice + + Returns + ------- + materials : dict + Dictionary whose keys are material IDs and values are Material instances + + """ + + materials = OrderedDict() + + # Append all Cells in each Cell in the Universe to the dictionary + cells = self.get_all_cells() + for cell_id, cell in cells.items(): + materials.update(cell.get_all_materials()) + + return materials + + def get_all_universes(self): + """Return all universes that are contained within the lattice + + Returns + ------- + universes : dict + Dictionary whose keys are universe IDs and values are Universe + instances + + """ + + # Initialize a dictionary of all Universes contained by the Lattice + # in each nested Universe level + all_universes = OrderedDict() + + # Get all unique Universes contained in each of the lattice cells + unique_universes = self.get_unique_universes() + + # Add the unique Universes filling each Lattice cell + all_universes.update(unique_universes) + + # Append all Universes containing each cell to the dictionary + for universe_id, universe in unique_universes.items(): + all_universes.update(universe.get_all_universes()) + + return all_universes + + +class RectLattice(Lattice): + """A lattice consisting of rectangular prisms. + + Parameters + ---------- + lattice_id : int, optional + Unique identifier for the lattice. If not specified, an identifier will + automatically be assigned. + name : str, optional + Name of the lattice. If not specified, the name is the empty string. + + Attributes + ---------- + id : int + Unique identifier for the lattice + name : str + Name of the lattice + dimension : array-like of int + An array of two or three integers representing the number of lattice + cells in the x- and y- (and z-) directions, respectively. + lower_left : array-like of float + The coordinates of the lower-left corner of the lattice. If the lattice + is two-dimensional, only the x- and y-coordinates are specified. + + """ + + def __init__(self, lattice_id=None, name=''): + super(RectLattice, self).__init__(lattice_id, name) + + # Initialize Lattice class attributes + self._dimension = None + self._lower_left = None + self._offsets = None + + def __eq__(self, other): + if not isinstance(other, RectLattice): + return False + elif not super(RectLattice, self).__eq__(other): + return False + elif self.dimension != other.dimension: + return False + elif self.lower_left != other.lower_left: + return False + else: + return True + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(repr(self)) + + def __repr__(self): + string = 'RectLattice\n' + string += '{0: <16}{1}{2}\n'.format('\tID', '=\t', self._id) + string += '{0: <16}{1}{2}\n'.format('\tName', '=\t', self._name) + string += '{0: <16}{1}{2}\n'.format('\tDimension', '=\t', + self._dimension) + string += '{0: <16}{1}{2}\n'.format('\tLower Left', '=\t', + self._lower_left) + string += '{0: <16}{1}{2}\n'.format('\tPitch', '=\t', self._pitch) + + if self._outer is not None: + string += '{0: <16}{1}{2}\n'.format('\tOuter', '=\t', + self._outer._id) + else: + string += '{0: <16}{1}{2}\n'.format('\tOuter', '=\t', + self._outer) + + string += '{0: <16}\n'.format('\tUniverses') + + # Lattice nested Universe IDs - column major for Fortran + for i, universe in enumerate(np.ravel(self._universes)): + string += '{0} '.format(universe._id) + + # Add a newline character every time we reach end of row of cells + if (i+1) % self._dimension[-1] == 0: + string += '\n' + + string = string.rstrip('\n') + + if self._offsets is not None: + string += '{0: <16}\n'.format('\tOffsets') + + # Lattice cell offsets + for i, offset in enumerate(np.ravel(self._offsets)): + string += '{0} '.format(offset) + + # Add a newline character when we reach end of row of cells + if (i+1) % self._dimension[-1] == 0: + string += '\n' + + string = string.rstrip('\n') + + return string + + @property + def dimension(self): + return self._dimension + + @property + def lower_left(self): + return self._lower_left + + @property + def offsets(self): + return self._offsets + + @dimension.setter + def dimension(self, dimension): + cv.check_type('lattice dimension', dimension, Iterable, Integral) + cv.check_length('lattice dimension', dimension, 2, 3) + for dim in dimension: + cv.check_greater_than('lattice dimension', dim, 0) + self._dimension = dimension + + @lower_left.setter + def lower_left(self, lower_left): + cv.check_type('lattice lower left corner', lower_left, Iterable, Real) + cv.check_length('lattice lower left corner', lower_left, 2, 3) + self._lower_left = lower_left + + @offsets.setter + def offsets(self, offsets): + cv.check_type('lattice offsets', offsets, Iterable) + self._offsets = offsets + + @Lattice.pitch.setter + def pitch(self, pitch): + cv.check_type('lattice pitch', pitch, Iterable, Real) + cv.check_length('lattice pitch', pitch, 2, 3) + for dim in pitch: + cv.check_greater_than('lattice pitch', dim, 0.0) + self._pitch = pitch + + def get_cell_instance(self, path, distribcell_index): + + # Extract the lattice element from the path + next_index = path.index('-') + lat_id_indices = path[:next_index] + path = path[next_index+2:] + + # Extract the lattice cell indices from the path + i1 = lat_id_indices.index('(') + i2 = lat_id_indices.index(')') + i = lat_id_indices[i1+1:i2] + lat_x = int(i.split(',')[0]) - 1 + lat_y = int(i.split(',')[1]) - 1 + lat_z = int(i.split(',')[2]) - 1 + + # For 2D Lattices + if len(self._dimension) == 2: + offset = self._offsets[lat_z, lat_y, lat_x, distribcell_index-1] + offset += self._universes[lat_x][lat_y].get_cell_instance(path, + distribcell_index) + + # For 3D Lattices + else: + offset = self._offsets[lat_z, lat_y, lat_x, distribcell_index-1] + offset += self._universes[lat_z][lat_y][lat_x].get_cell_instance( + path, distribcell_index) + + return offset + + def create_xml_subelement(self, xml_element): + + # Determine if XML element already contains subelement for this Lattice + path = './lattice[@id=\'{0}\']'.format(self._id) + test = xml_element.find(path) + + # If the element does contain the Lattice subelement, then return + if test is not None: + return + + lattice_subelement = ET.Element("lattice") + lattice_subelement.set("id", str(self._id)) + + if len(self._name) > 0: + lattice_subelement.set("name", str(self._name)) + + # Export the Lattice cell pitch + pitch = ET.SubElement(lattice_subelement, "pitch") + pitch.text = ' '.join(map(str, self._pitch)) + + # Export the Lattice outer Universe (if specified) + if self._outer is not None: + outer = ET.SubElement(lattice_subelement, "outer") + outer.text = '{0}'.format(self._outer._id) + self._outer.create_xml_subelement(xml_element) + + # Export Lattice cell dimensions + dimension = ET.SubElement(lattice_subelement, "dimension") + dimension.text = ' '.join(map(str, self._dimension)) + + # Export Lattice lower left + lower_left = ET.SubElement(lattice_subelement, "lower_left") + lower_left.text = ' '.join(map(str, self._lower_left)) + + # Export the Lattice nested Universe IDs - column major for Fortran + universe_ids = '\n' + + # 3D Lattices + if len(self._dimension) == 3: + for z in range(self._dimension[2]): + for y in range(self._dimension[1]): + for x in range(self._dimension[0]): + universe = self._universes[z][y][x] + + # Append Universe ID to the Lattice XML subelement + universe_ids += '{0} '.format(universe._id) + + # Create XML subelement for this Universe + universe.create_xml_subelement(xml_element) + + # Add newline character when we reach end of row of cells + universe_ids += '\n' + + # Add newline character when we reach end of row of cells + universe_ids += '\n' + + # 2D Lattices + else: + for y in range(self._dimension[1]): + for x in range(self._dimension[0]): + universe = self._universes[y][x] + + # Append Universe ID to Lattice XML subelement + universe_ids += '{0} '.format(universe._id) + + # Create XML subelement for this Universe + universe.create_xml_subelement(xml_element) + + # Add newline character when we reach end of row of cells + universe_ids += '\n' + + # Remove trailing newline character from Universe IDs string + universe_ids = universe_ids.rstrip('\n') + + universes = ET.SubElement(lattice_subelement, "universes") + universes.text = universe_ids + + # Append the XML subelement for this Lattice to the XML element + xml_element.append(lattice_subelement) + + +class HexLattice(Lattice): + """A lattice consisting of hexagonal prisms. + + Parameters + ---------- + lattice_id : int, optional + Unique identifier for the lattice. If not specified, an identifier will + automatically be assigned. + name : str, optional + Name of the lattice. If not specified, the name is the empty string. + + Attributes + ---------- + id : int + Unique identifier for the lattice + name : str + Name of the lattice + num_rings : int + Number of radial ring positions in the xy-plane + num_axial : int + Number of positions along the z-axis. + center : array-like of float + Coordinates of the center of the lattice. If the lattice does not have + axial sections then only the x- and y-coordinates are specified + + """ + + def __init__(self, lattice_id=None, name=''): + super(HexLattice, self).__init__(lattice_id, name) + + # Initialize Lattice class attributes + self._num_rings = None + self._num_axial = None + self._center = None + + def __eq__(self, other): + if not isinstance(other, HexLattice): + return False + elif not super(HexLattice, self).__eq__(other): + return False + elif self.num_rings != other.num_rings: + return False + elif self.num_axial != other.num_axial: + return False + elif self.center != other.center: + return False + else: + return True + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(repr(self)) + + def __repr__(self): + string = 'HexLattice\n' + string += '{0: <16}{1}{2}\n'.format('\tID', '=\t', self._id) + string += '{0: <16}{1}{2}\n'.format('\tName', '=\t', self._name) + string += '{0: <16}{1}{2}\n'.format('\t# Rings', '=\t', self._num_rings) + string += '{0: <16}{1}{2}\n'.format('\t# Axial', '=\t', self._num_axial) + string += '{0: <16}{1}{2}\n'.format('\tCenter', '=\t', + self._center) + string += '{0: <16}{1}{2}\n'.format('\tPitch', '=\t', self._pitch) + + if self._outer is not None: + string += '{0: <16}{1}{2}\n'.format('\tOuter', '=\t', + self._outer._id) + else: + string += '{0: <16}{1}{2}\n'.format('\tOuter', '=\t', + self._outer) + + string += '{0: <16}\n'.format('\tUniverses') + + if self._num_axial is not None: + slices = [self._repr_axial_slice(x) for x in self._universes] + string += '\n'.join(slices) + + else: + string += self._repr_axial_slice(self._universes) + + return string + + @property + def num_rings(self): + return self._num_rings + + @property + def num_axial(self): + return self._num_axial + + @property + def center(self): + return self._center + + @num_rings.setter + def num_rings(self, num_rings): + cv.check_type('number of rings', num_rings, Integral) + cv.check_greater_than('number of rings', num_rings, 0) + self._num_rings = num_rings + + @num_axial.setter + def num_axial(self, num_axial): + cv.check_type('number of axial', num_axial, Integral) + cv.check_greater_than('number of axial', num_axial, 0) + self._num_axial = num_axial + + @center.setter + def center(self, center): + cv.check_type('lattice center', center, Iterable, Real) + cv.check_length('lattice center', center, 2, 3) + self._center = center + + @Lattice.pitch.setter + def pitch(self, pitch): + cv.check_type('lattice pitch', pitch, Iterable, Real) + cv.check_length('lattice pitch', pitch, 1, 2) + for dim in pitch: + cv.check_greater_than('lattice pitch', dim, 0) + self._pitch = pitch + + @Lattice.universes.setter + def universes(self, universes): + # Call Lattice.universes parent class setter property + Lattice.universes.fset(self, universes) + + # NOTE: This routine assumes that the user creates a "ragged" list of + # lists, where each sub-list corresponds to one ring of Universes. + # The sub-lists are ordered from outermost ring to innermost ring. + # The Universes within each sub-list are ordered from the "top" in a + # clockwise fashion. + + # Check to see if the given universes look like a 2D or a 3D array. + if isinstance(self._universes[0][0], Universe): + n_dims = 2 + + elif isinstance(self._universes[0][0][0], Universe): + n_dims = 3 + + else: + msg = 'HexLattice ID={0:d} does not appear to be either 2D or ' \ + '3D. Make sure set_universes was given a two-deep or ' \ + 'three-deep iterable of universes.'.format(self._id) + raise RuntimeError(msg) + + # Set the number of axial positions. + if n_dims == 3: + self.num_axial = len(self._universes) + else: + self._num_axial = None + + # Set the number of rings and make sure this number is consistent for + # all axial positions. + if n_dims == 3: + self.num_rings = len(self._universes) + for rings in self._universes: + if len(rings) != self._num_rings: + msg = 'HexLattice ID={0:d} has an inconsistent number of ' \ + 'rings per axial positon'.format(self._id) + raise ValueError(msg) + + else: + self.num_rings = len(self._universes) + + # Make sure there are the correct number of elements in each ring. + if n_dims == 3: + for axial_slice in self._universes: + # Check the center ring. + if len(axial_slice[-1]) != 1: + msg = 'HexLattice ID={0:d} has the wrong number of ' \ + 'elements in the innermost ring. Only 1 element is ' \ + 'allowed in the innermost ring.'.format(self._id) + raise ValueError(msg) + + # Check the outer rings. + for r in range(self._num_rings-1): + if len(axial_slice[r]) != 6*(self._num_rings - 1 - r): + msg = 'HexLattice ID={0:d} has the wrong number of ' \ + 'elements in ring number {1:d} (counting from the '\ + 'outermost ring). This ring should have {2:d} ' \ + 'elements.'.format(self._id, r, + 6*(self._num_rings - 1 - r)) + raise ValueError(msg) + + else: + axial_slice = self._universes + # Check the center ring. + if len(axial_slice[-1]) != 1: + msg = 'HexLattice ID={0:d} has the wrong number of ' \ + 'elements in the innermost ring. Only 1 element is ' \ + 'allowed in the innermost ring.'.format(self._id) + raise ValueError(msg) + + # Check the outer rings. + for r in range(self._num_rings-1): + if len(axial_slice[r]) != 6*(self._num_rings - 1 - r): + msg = 'HexLattice ID={0:d} has the wrong number of ' \ + 'elements in ring number {1:d} (counting from the '\ + 'outermost ring). This ring should have {2:d} ' \ + 'elements.'.format(self._id, r, + 6*(self._num_rings - 1 - r)) + raise ValueError(msg) + + def create_xml_subelement(self, xml_element): + # Determine if XML element already contains subelement for this Lattice + path = './hex_lattice[@id=\'{0}\']'.format(self._id) + test = xml_element.find(path) + + # If the element does contain the Lattice subelement, then return + if test is not None: + return + + lattice_subelement = ET.Element("hex_lattice") + lattice_subelement.set("id", str(self._id)) + + if len(self._name) > 0: + lattice_subelement.set("name", str(self._name)) + + # Export the Lattice cell pitch + pitch = ET.SubElement(lattice_subelement, "pitch") + pitch.text = ' '.join(map(str, self._pitch)) + + # Export the Lattice outer Universe (if specified) + if self._outer is not None: + outer = ET.SubElement(lattice_subelement, "outer") + outer.text = '{0}'.format(self._outer._id) + self._outer.create_xml_subelement(xml_element) + + lattice_subelement.set("n_rings", str(self._num_rings)) + + if self._num_axial is not None: + lattice_subelement.set("n_axial", str(self._num_axial)) + + # Export Lattice cell center + dimension = ET.SubElement(lattice_subelement, "center") + dimension.text = ' '.join(map(str, self._center)) + + # Export the Lattice nested Universe IDs. + + # 3D Lattices + if self._num_axial is not None: + slices = [] + for z in range(self._num_axial): + # Initialize the center universe. + universe = self._universes[z][-1][0] + universe.create_xml_subelement(xml_element) + + # Initialize the remaining universes. + for r in range(self._num_rings-1): + for theta in range(6*(self._num_rings - 1 - r)): + universe = self._universes[z][r][theta] + universe.create_xml_subelement(xml_element) + + # Get a string representation of the universe IDs. + slices.append(self._repr_axial_slice(self._universes[z])) + + # Collapse the list of axial slices into a single string. + universe_ids = '\n'.join(slices) + + # 2D Lattices + else: + # Initialize the center universe. + universe = self._universes[-1][0] + universe.create_xml_subelement(xml_element) + + # Initialize the remaining universes. + for r in range(self._num_rings - 1): + for theta in range(6*(self._num_rings - 1 - r)): + universe = self._universes[r][theta] + universe.create_xml_subelement(xml_element) + + # Get a string representation of the universe IDs. + universe_ids = self._repr_axial_slice(self._universes) + + universes = ET.SubElement(lattice_subelement, "universes") + universes.text = '\n' + universe_ids + + # Append the XML subelement for this Lattice to the XML element + xml_element.append(lattice_subelement) + + def _repr_axial_slice(self, universes): + """Return string representation for the given 2D group of universes. + + The 'universes' argument should be a list of lists of universes where + each sub-list represents a single ring. The first list should be the + outer ring. + """ + + # Find the largest universe ID and count the number of digits so we can + # properly pad the output string later. + largest_id = max([max([univ._id for univ in ring]) + for ring in universes]) + n_digits = len(str(largest_id)) + pad = ' '*n_digits + id_form = '{: ^' + str(n_digits) + 'd}' + + # Initialize the list for each row. + rows = [ [] for i in range(1 + 4 * (self._num_rings-1)) ] + middle = 2 * (self._num_rings - 1) + + # Start with the degenerate first ring. + universe = universes[-1][0] + rows[middle] = [id_form.format(universe._id)] + + # Add universes one ring at a time. + for r in range(1, self._num_rings): + # r_prime increments down while r increments up. + r_prime = self._num_rings - 1 - r + theta = 0 + y = middle + 2*r + + # Climb down the top-right. + for i in range(r): + # Add the universe. + universe = universes[r_prime][theta] + rows[y].append(id_form.format(universe._id)) + + # Translate the indices. + y -= 1 + theta += 1 + + # Climb down the right. + for i in range(r): + # Add the universe. + universe = universes[r_prime][theta] + rows[y].append(id_form.format(universe._id)) + + # Translate the indices. + y -= 2 + theta += 1 + + # Climb down the bottom-right. + for i in range(r): + # Add the universe. + universe = universes[r_prime][theta] + rows[y].append(id_form.format(universe._id)) + + # Translate the indices. + y -= 1 + theta += 1 + + # Climb up the bottom-left. + for i in range(r): + # Add the universe. + universe = universes[r_prime][theta] + rows[y].insert(0, id_form.format(universe._id)) + + # Translate the indices. + y += 1 + theta += 1 + + # Climb up the left. + for i in range(r): + # Add the universe. + universe = universes[r_prime][theta] + rows[y].insert(0, id_form.format(universe._id)) + + # Translate the indices. + y += 2 + theta += 1 + + # Climb up the top-left. + for i in range(r): + # Add the universe. + universe = universes[r_prime][theta] + rows[y].insert(0, id_form.format(universe._id)) + + # Translate the indices. + y += 1 + theta += 1 + + # Flip the rows and join each row into a single string. + rows = [pad.join(x) for x in rows[::-1]] + + # Pad the beginning of the rows so they line up properly. + for y in range(self._num_rings - 1): + rows[y] = (self._num_rings - 1 - y)*pad + rows[y] + rows[-1 - y] = (self._num_rings - 1 - y)*pad + rows[-1 - y] + + for y in range(self._num_rings % 2, self._num_rings, 2): + rows[middle + y] = pad + rows[middle + y] + if y != 0: + rows[middle - y] = pad + rows[middle - y] + + # Join the rows together and return the string. + universe_ids = '\n'.join(rows) + return universe_ids diff --git a/openmc/universe.py b/openmc/universe.py index 6a1e3da88a..09f5470426 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -1,6 +1,5 @@ -import abc from collections import OrderedDict, Iterable -from numbers import Real, Integral +from numbers import Integral from xml.etree import ElementTree as ET import sys import warnings @@ -9,449 +8,15 @@ import numpy as np import openmc import openmc.checkvalue as cv -from openmc.surface import Halfspace -from openmc.region import Region, Intersection, Complement if sys.version_info[0] >= 3: basestring = str -# A static variable for auto-generated Cell IDs -AUTO_CELL_ID = 10000 - # A dictionary for storing IDs of cell elements that have already been written, # used to optimize the writing process WRITTEN_IDS = {} - -def reset_auto_cell_id(): - global AUTO_CELL_ID - AUTO_CELL_ID = 10000 - - -class Cell(object): - """A region of space defined as the intersection of half-space created by - quadric surfaces. - - Parameters - ---------- - cell_id : int, optional - Unique identifier for the cell. If not specified, an identifier will - automatically be assigned. - name : str, optional - Name of the cell. If not specified, the name is the empty string. - - Attributes - ---------- - id : int - Unique identifier for the cell - name : str - Name of the cell - fill : Material or Universe or Lattice or 'void' or iterable of Material - Indicates what the region of space is filled with - region : openmc.region.Region - Region of space that is assigned to the cell. - rotation : ndarray - If the cell is filled with a universe, this array specifies the angles - in degrees about the x, y, and z axes that the filled universe should be - rotated. - translation : ndarray - If the cell is filled with a universe, this array specifies a vector - that is used to translate (shift) the universe. - offsets : ndarray - Array of offsets used for distributed cell searches - distribcell_index : int - Index of this cell in distribcell arrays - - """ - - def __init__(self, cell_id=None, name=''): - # Initialize Cell class attributes - self.id = cell_id - self.name = name - self._fill = None - self._type = None - self._region = None - self._rotation = None - self._translation = None - self._offsets = None - self._distribcell_index = None - - def __eq__(self, other): - if not isinstance(other, Cell): - return False - elif self.id != other.id: - return False - elif self.name != other.name: - return False - elif self.fill != other.fill: - return False - elif self.region != other.region: - return False - elif self.rotation != other.rotation: - return False - elif self.translation != other.translation: - return False - else: - return True - - def __ne__(self, other): - return not self == other - - def __hash__(self): - return hash(repr(self)) - - def __repr__(self): - string = 'Cell\n' - string += '{0: <16}{1}{2}\n'.format('\tID', '=\t', self._id) - string += '{0: <16}{1}{2}\n'.format('\tName', '=\t', self._name) - - if isinstance(self._fill, openmc.Material): - string += '{0: <16}{1}{2}\n'.format('\tMaterial', '=\t', - self._fill._id) - elif isinstance(self._fill, Iterable): - string += '{0: <16}{1}'.format('\tMaterial', '=\t') - string += '[' - string += ', '.join(['void' if m == 'void' else str(m.id) - for m in self.fill]) - string += ']\n' - elif isinstance(self._fill, (Universe, Lattice)): - string += '{0: <16}{1}{2}\n'.format('\tFill', '=\t', - self._fill._id) - else: - string += '{0: <16}{1}{2}\n'.format('\tFill', '=\t', self._fill) - - string += '{0: <16}{1}{2}\n'.format('\tRegion', '=\t', self._region) - - string += '{0: <16}{1}{2}\n'.format('\tRotation', '=\t', - self._rotation) - string += '{0: <16}{1}{2}\n'.format('\tTranslation', '=\t', - self._translation) - string += '{0: <16}{1}{2}\n'.format('\tOffset', '=\t', self._offsets) - string += '{0: <16}{1}{2}\n'.format('\tDistribcell index', '=\t', - self._distribcell_index) - - return string - - @property - def id(self): - return self._id - - @property - def name(self): - return self._name - - @property - def fill(self): - return self._fill - - @property - def fill_type(self): - if isinstance(self.fill, openmc.Material): - return 'material' - elif isinstance(self.fill, openmc.Universe): - return 'universe' - elif isinstance(self.fill, openmc.Lattice): - return 'lattice' - else: - return None - - @property - def region(self): - return self._region - - @property - def rotation(self): - return self._rotation - - @property - def translation(self): - return self._translation - - @property - def offsets(self): - return self._offsets - - @property - def distribcell_index(self): - return self._distribcell_index - - @id.setter - def id(self, cell_id): - if cell_id is None: - global AUTO_CELL_ID - self._id = AUTO_CELL_ID - AUTO_CELL_ID += 1 - else: - cv.check_type('cell ID', cell_id, Integral) - cv.check_greater_than('cell ID', cell_id, 0, equality=True) - self._id = cell_id - - @name.setter - def name(self, name): - if name is not None: - cv.check_type('cell name', name, basestring) - self._name = name - else: - self._name = '' - - @fill.setter - def fill(self, fill): - if isinstance(fill, basestring): - if fill.strip().lower() == 'void': - self._type = 'void' - else: - msg = 'Unable to set Cell ID="{0}" to use a non-Material or ' \ - 'Universe fill "{1}"'.format(self._id, fill) - raise ValueError(msg) - - elif isinstance(fill, openmc.Material): - self._type = 'normal' - - elif isinstance(fill, Iterable): - cv.check_type('cell.fill', fill, Iterable, - (openmc.Material, basestring)) - self._type = 'normal' - - elif isinstance(fill, Universe): - self._type = 'fill' - - elif isinstance(fill, Lattice): - self._type = 'lattice' - - else: - msg = 'Unable to set Cell ID="{0}" to use a non-Material or ' \ - 'Universe fill "{1}"'.format(self._id, fill) - raise ValueError(msg) - - self._fill = fill - - @rotation.setter - def rotation(self, rotation): - cv.check_type('cell rotation', rotation, Iterable, Real) - cv.check_length('cell rotation', rotation, 3) - self._rotation = rotation - - @translation.setter - def translation(self, translation): - cv.check_type('cell translation', translation, Iterable, Real) - cv.check_length('cell translation', translation, 3) - self._translation = translation - - @offsets.setter - def offsets(self, offsets): - cv.check_type('cell offsets', offsets, Iterable) - self._offsets = offsets - - @region.setter - def region(self, region): - cv.check_type('cell region', region, Region) - self._region = region - - @distribcell_index.setter - def distribcell_index(self, ind): - cv.check_type('distribcell index', ind, Integral) - self._distribcell_index = ind - - def add_surface(self, surface, halfspace): - """Add a half-space to the list of half-spaces whose intersection defines the - cell. - - .. deprecated:: 0.7.1 - Use the Cell.region property to directly specify a Region - expression. - - Parameters - ---------- - surface : openmc.surface.Surface - Quadric surface dividing space - halfspace : {-1, 1} - Indicate whether the negative or positive half-space is to be used - - """ - - warnings.warn("Cell.add_surface(...) has been deprecated and may be " - "removed in a future version. The region for a Cell " - "should be defined using the region property directly.", - DeprecationWarning) - - if not isinstance(surface, openmc.Surface): - msg = 'Unable to add Surface "{0}" to Cell ID="{1}" since it is ' \ - 'not a Surface object'.format(surface, self._id) - raise ValueError(msg) - - if halfspace not in [-1, +1]: - msg = 'Unable to add Surface "{0}" to Cell ID="{1}" with halfspace ' \ - '"{2}" since it is not +/-1'.format(surface, self._id, halfspace) - raise ValueError(msg) - - # If no region has been assigned, simply use the half-space. Otherwise, - # take the intersection of the current region and the half-space - # specified - region = +surface if halfspace == 1 else -surface - if self.region is None: - self.region = region - else: - if isinstance(self.region, Intersection): - self.region.nodes.append(region) - else: - self.region = Intersection(self.region, region) - - def get_cell_instance(self, path, distribcell_index): - - # If the Cell is filled by a Material - if self._type == 'normal' or self._type == 'void': - offset = 0 - - # If the Cell is filled by a Universe - elif self._type == 'fill': - offset = self.offsets[distribcell_index-1] - offset += self.fill.get_cell_instance(path, distribcell_index) - - # If the Cell is filled by a Lattice - else: - offset = self.fill.get_cell_instance(path, distribcell_index) - - return offset - - def get_all_nuclides(self): - """Return all nuclides contained in the cell - - Returns - ------- - nuclides : dict - Dictionary whose keys are nuclide names and values are 2-tuples of - (nuclide, density) - - """ - - nuclides = OrderedDict() - - if self._type != 'void': - nuclides.update(self._fill.get_all_nuclides()) - - return nuclides - - def get_all_cells(self): - """Return all cells that are contained within this one if it is filled with a - universe or lattice - - Returns - ------- - cells : dict - Dictionary whose keys are cell IDs and values are Cell instances - - """ - - cells = OrderedDict() - - if self._type == 'fill' or self._type == 'lattice': - cells.update(self._fill.get_all_cells()) - - return cells - - def get_all_materials(self): - """Return all materials that are contained within the cell - - Returns - ------- - materials : dict - Dictionary whose keys are material IDs and values are Material instances - - """ - - materials = OrderedDict() - if self.fill_type == 'material': - materials[self.fill.id] = self.fill - - # Append all Cells in each Cell in the Universe to the dictionary - cells = self.get_all_cells() - for cell_id, cell in cells.items(): - materials.update(cell.get_all_materials()) - - return materials - - def get_all_universes(self): - """Return all universes that are contained within this one if any of - its cells are filled with a universe or lattice. - - Returns - ------- - universes : dict - Dictionary whose keys are universe IDs and values are Universe - instances - - """ - - universes = OrderedDict() - - if self._type == 'fill': - universes[self._fill._id] = self._fill - universes.update(self._fill.get_all_universes()) - elif self._type == 'lattice': - universes.update(self._fill.get_all_universes()) - - return universes - - def create_xml_subelement(self, xml_element): - element = ET.Element("cell") - element.set("id", str(self.id)) - - if len(self._name) > 0: - element.set("name", str(self.name)) - - if isinstance(self.fill, basestring): - element.set("material", "void") - - elif isinstance(self.fill, openmc.Material): - element.set("material", str(self.fill.id)) - - elif isinstance(self.fill, Iterable): - element.set("material", ' '.join([m if m == 'void' else str(m.id) - for m in self.fill])) - - elif isinstance(self.fill, (Universe, Lattice)): - element.set("fill", str(self.fill.id)) - self.fill.create_xml_subelement(xml_element) - - else: - element.set("fill", str(self.fill)) - self.fill.create_xml_subelement(xml_element) - - if self.region is not None: - # Set the region attribute with the region specification - element.set("region", str(self.region)) - - # Only surfaces that appear in a region are added to the geometry - # file, so the appropriate check is performed here. First we create - # a function which is called recursively to navigate through the CSG - # tree. When it reaches a leaf (a Halfspace), it creates a - # element for the corresponding surface if none has been created - # thus far. - def create_surface_elements(node, element): - if isinstance(node, Halfspace): - path = './surface[@id=\'{0}\']'.format(node.surface.id) - if xml_element.find(path) is None: - surface_subelement = node.surface.create_xml_subelement() - xml_element.append(surface_subelement) - elif isinstance(node, Complement): - create_surface_elements(node.node, element) - else: - for subnode in node.nodes: - create_surface_elements(subnode, element) - - # Call the recursive function from the top node - create_surface_elements(self.region, xml_element) - - if self.translation is not None: - element.set("translation", ' '.join(map(str, self.translation))) - - if self.rotation is not None: - element.set("rotation", ' '.join(map(str, self.rotation))) - - return element - - # A static variable for auto-generated Lattice (Universe) IDs AUTO_UNIVERSE_ID = 10000 @@ -566,7 +131,7 @@ class Universe(object): """ - if not isinstance(cell, Cell): + if not isinstance(cell, openmc.Cell): msg = 'Unable to add a Cell to Universe ID="{0}" since "{1}" is not ' \ 'a Cell'.format(self._id, cell) raise ValueError(msg) @@ -604,7 +169,7 @@ class Universe(object): """ - if not isinstance(cell, Cell): + if not isinstance(cell, openmc.Cell): msg = 'Unable to remove a Cell from Universe ID="{0}" since "{1}" is ' \ 'not a Cell'.format(self._id, cell) raise ValueError(msg) @@ -735,859 +300,3 @@ class Universe(object): # Append the Universe ID to the subelement and add to Element cell_subelement.set("universe", str(self._id)) xml_element.append(cell_subelement) - - -class Lattice(object): - """A repeating structure wherein each element is a universe. - - Parameters - ---------- - lattice_id : int, optional - Unique identifier for the lattice. If not specified, an identifier will - automatically be assigned. - name : str, optional - Name of the lattice. If not specified, the name is the empty string. - - Attributes - ---------- - id : int - Unique identifier for the lattice - name : str - Name of the lattice - pitch : float - Pitch of the lattice in cm - outer : int - The unique identifier of a universe to fill all space outside the - lattice - universes : ndarray of Universe - An array of universes filling each element of the lattice - - """ - - # This is an abstract class which cannot be instantiated - __metaclass__ = abc.ABCMeta - - def __init__(self, lattice_id=None, name=''): - # Initialize Lattice class attributes - self.id = lattice_id - self.name = name - self._pitch = None - self._outer = None - self._universes = None - - def __eq__(self, other): - if not isinstance(other, Lattice): - return False - elif self.id != other.id: - return False - elif self.name != other.name: - return False - elif self.pitch != other.pitch: - return False - elif self.outer != other.outer: - return False - elif self.universes != other.universes: - return False - else: - return True - - def __ne__(self, other): - return not self == other - - @property - def id(self): - return self._id - - @property - def name(self): - return self._name - - @property - def pitch(self): - return self._pitch - - @property - def outer(self): - return self._outer - - @property - def universes(self): - return self._universes - - @id.setter - def id(self, lattice_id): - if lattice_id is None: - global AUTO_UNIVERSE_ID - self._id = AUTO_UNIVERSE_ID - AUTO_UNIVERSE_ID += 1 - else: - cv.check_type('lattice ID', lattice_id, Integral) - cv.check_greater_than('lattice ID', lattice_id, 0, equality=True) - self._id = lattice_id - - @name.setter - def name(self, name): - if name is not None: - cv.check_type('lattice name', name, basestring) - self._name = name - else: - self._name = '' - - @outer.setter - def outer(self, outer): - cv.check_type('outer universe', outer, Universe) - self._outer = outer - - @universes.setter - def universes(self, universes): - cv.check_iterable_type('lattice universes', universes, Universe, - min_depth=2, max_depth=3) - self._universes = np.asarray(universes) - - def get_unique_universes(self): - """Determine all unique universes in the lattice - - Returns - ------- - universes : dict - Dictionary whose keys are universe IDs and values are Universe - instances - - """ - - univs = OrderedDict() - for k in range(len(self._universes)): - for j in range(len(self._universes[k])): - if isinstance(self._universes[k][j], Universe): - u = self._universes[k][j] - univs[u._id] = u - else: - for i in range(len(self._universes[k][j])): - u = self._universes[k][j][i] - assert isinstance(u, Universe) - univs[u._id] = u - - if self.outer is not None: - univs[self.outer._id] = self.outer - - return univs - - def get_all_nuclides(self): - """Return all nuclides contained in the lattice - - Returns - ------- - nuclides : dict - Dictionary whose keys are nuclide names and values are 2-tuples of - (nuclide, density) - - """ - - nuclides = OrderedDict() - - # Get all unique Universes contained in each of the lattice cells - unique_universes = self.get_unique_universes() - - # Append all Universes containing each cell to the dictionary - for universe_id, universe in unique_universes.items(): - nuclides.update(universe.get_all_nuclides()) - - return nuclides - - def get_all_cells(self): - """Return all cells that are contained within the lattice - - Returns - ------- - cells : dict - Dictionary whose keys are cell IDs and values are Cell instances - - """ - - cells = OrderedDict() - unique_universes = self.get_unique_universes() - - for universe_id, universe in unique_universes.items(): - cells.update(universe.get_all_cells()) - - return cells - - def get_all_materials(self): - """Return all materials that are contained within the lattice - - Returns - ------- - materials : dict - Dictionary whose keys are material IDs and values are Material instances - - """ - - materials = OrderedDict() - - # Append all Cells in each Cell in the Universe to the dictionary - cells = self.get_all_cells() - for cell_id, cell in cells.items(): - materials.update(cell.get_all_materials()) - - return materials - - def get_all_universes(self): - """Return all universes that are contained within the lattice - - Returns - ------- - universes : dict - Dictionary whose keys are universe IDs and values are Universe - instances - - """ - - # Initialize a dictionary of all Universes contained by the Lattice - # in each nested Universe level - all_universes = OrderedDict() - - # Get all unique Universes contained in each of the lattice cells - unique_universes = self.get_unique_universes() - - # Add the unique Universes filling each Lattice cell - all_universes.update(unique_universes) - - # Append all Universes containing each cell to the dictionary - for universe_id, universe in unique_universes.items(): - all_universes.update(universe.get_all_universes()) - - return all_universes - - -class RectLattice(Lattice): - """A lattice consisting of rectangular prisms. - - Parameters - ---------- - lattice_id : int, optional - Unique identifier for the lattice. If not specified, an identifier will - automatically be assigned. - name : str, optional - Name of the lattice. If not specified, the name is the empty string. - - Attributes - ---------- - id : int - Unique identifier for the lattice - name : str - Name of the lattice - dimension : array-like of int - An array of two or three integers representing the number of lattice - cells in the x- and y- (and z-) directions, respectively. - lower_left : array-like of float - The coordinates of the lower-left corner of the lattice. If the lattice - is two-dimensional, only the x- and y-coordinates are specified. - - """ - - def __init__(self, lattice_id=None, name=''): - super(RectLattice, self).__init__(lattice_id, name) - - # Initialize Lattice class attributes - self._dimension = None - self._lower_left = None - self._offsets = None - - def __eq__(self, other): - if not isinstance(other, RectLattice): - return False - elif not super(RectLattice, self).__eq__(other): - return False - elif self.dimension != other.dimension: - return False - elif self.lower_left != other.lower_left: - return False - else: - return True - - def __ne__(self, other): - return not self == other - - def __hash__(self): - return hash(repr(self)) - - def __repr__(self): - string = 'RectLattice\n' - string += '{0: <16}{1}{2}\n'.format('\tID', '=\t', self._id) - string += '{0: <16}{1}{2}\n'.format('\tName', '=\t', self._name) - string += '{0: <16}{1}{2}\n'.format('\tDimension', '=\t', - self._dimension) - string += '{0: <16}{1}{2}\n'.format('\tLower Left', '=\t', - self._lower_left) - string += '{0: <16}{1}{2}\n'.format('\tPitch', '=\t', self._pitch) - - if self._outer is not None: - string += '{0: <16}{1}{2}\n'.format('\tOuter', '=\t', - self._outer._id) - else: - string += '{0: <16}{1}{2}\n'.format('\tOuter', '=\t', - self._outer) - - string += '{0: <16}\n'.format('\tUniverses') - - # Lattice nested Universe IDs - column major for Fortran - for i, universe in enumerate(np.ravel(self._universes)): - string += '{0} '.format(universe._id) - - # Add a newline character every time we reach end of row of cells - if (i+1) % self._dimension[-1] == 0: - string += '\n' - - string = string.rstrip('\n') - - if self._offsets is not None: - string += '{0: <16}\n'.format('\tOffsets') - - # Lattice cell offsets - for i, offset in enumerate(np.ravel(self._offsets)): - string += '{0} '.format(offset) - - # Add a newline character when we reach end of row of cells - if (i+1) % self._dimension[-1] == 0: - string += '\n' - - string = string.rstrip('\n') - - return string - - @property - def dimension(self): - return self._dimension - - @property - def lower_left(self): - return self._lower_left - - @property - def offsets(self): - return self._offsets - - @dimension.setter - def dimension(self, dimension): - cv.check_type('lattice dimension', dimension, Iterable, Integral) - cv.check_length('lattice dimension', dimension, 2, 3) - for dim in dimension: - cv.check_greater_than('lattice dimension', dim, 0) - self._dimension = dimension - - @lower_left.setter - def lower_left(self, lower_left): - cv.check_type('lattice lower left corner', lower_left, Iterable, Real) - cv.check_length('lattice lower left corner', lower_left, 2, 3) - self._lower_left = lower_left - - @offsets.setter - def offsets(self, offsets): - cv.check_type('lattice offsets', offsets, Iterable) - self._offsets = offsets - - @Lattice.pitch.setter - def pitch(self, pitch): - cv.check_type('lattice pitch', pitch, Iterable, Real) - cv.check_length('lattice pitch', pitch, 2, 3) - for dim in pitch: - cv.check_greater_than('lattice pitch', dim, 0.0) - self._pitch = pitch - - def get_cell_instance(self, path, distribcell_index): - - # Extract the lattice element from the path - next_index = path.index('-') - lat_id_indices = path[:next_index] - path = path[next_index+2:] - - # Extract the lattice cell indices from the path - i1 = lat_id_indices.index('(') - i2 = lat_id_indices.index(')') - i = lat_id_indices[i1+1:i2] - lat_x = int(i.split(',')[0]) - 1 - lat_y = int(i.split(',')[1]) - 1 - lat_z = int(i.split(',')[2]) - 1 - - # For 2D Lattices - if len(self._dimension) == 2: - offset = self._offsets[lat_z, lat_y, lat_x, distribcell_index-1] - offset += self._universes[lat_x][lat_y].get_cell_instance(path, - distribcell_index) - - # For 3D Lattices - else: - offset = self._offsets[lat_z, lat_y, lat_x, distribcell_index-1] - offset += self._universes[lat_z][lat_y][lat_x].get_cell_instance( - path, distribcell_index) - - return offset - - def create_xml_subelement(self, xml_element): - - # Determine if XML element already contains subelement for this Lattice - path = './lattice[@id=\'{0}\']'.format(self._id) - test = xml_element.find(path) - - # If the element does contain the Lattice subelement, then return - if test is not None: - return - - lattice_subelement = ET.Element("lattice") - lattice_subelement.set("id", str(self._id)) - - if len(self._name) > 0: - lattice_subelement.set("name", str(self._name)) - - # Export the Lattice cell pitch - pitch = ET.SubElement(lattice_subelement, "pitch") - pitch.text = ' '.join(map(str, self._pitch)) - - # Export the Lattice outer Universe (if specified) - if self._outer is not None: - outer = ET.SubElement(lattice_subelement, "outer") - outer.text = '{0}'.format(self._outer._id) - self._outer.create_xml_subelement(xml_element) - - # Export Lattice cell dimensions - dimension = ET.SubElement(lattice_subelement, "dimension") - dimension.text = ' '.join(map(str, self._dimension)) - - # Export Lattice lower left - lower_left = ET.SubElement(lattice_subelement, "lower_left") - lower_left.text = ' '.join(map(str, self._lower_left)) - - # Export the Lattice nested Universe IDs - column major for Fortran - universe_ids = '\n' - - # 3D Lattices - if len(self._dimension) == 3: - for z in range(self._dimension[2]): - for y in range(self._dimension[1]): - for x in range(self._dimension[0]): - universe = self._universes[z][y][x] - - # Append Universe ID to the Lattice XML subelement - universe_ids += '{0} '.format(universe._id) - - # Create XML subelement for this Universe - universe.create_xml_subelement(xml_element) - - # Add newline character when we reach end of row of cells - universe_ids += '\n' - - # Add newline character when we reach end of row of cells - universe_ids += '\n' - - # 2D Lattices - else: - for y in range(self._dimension[1]): - for x in range(self._dimension[0]): - universe = self._universes[y][x] - - # Append Universe ID to Lattice XML subelement - universe_ids += '{0} '.format(universe._id) - - # Create XML subelement for this Universe - universe.create_xml_subelement(xml_element) - - # Add newline character when we reach end of row of cells - universe_ids += '\n' - - # Remove trailing newline character from Universe IDs string - universe_ids = universe_ids.rstrip('\n') - - universes = ET.SubElement(lattice_subelement, "universes") - universes.text = universe_ids - - # Append the XML subelement for this Lattice to the XML element - xml_element.append(lattice_subelement) - - -class HexLattice(Lattice): - """A lattice consisting of hexagonal prisms. - - Parameters - ---------- - lattice_id : int, optional - Unique identifier for the lattice. If not specified, an identifier will - automatically be assigned. - name : str, optional - Name of the lattice. If not specified, the name is the empty string. - - Attributes - ---------- - id : int - Unique identifier for the lattice - name : str - Name of the lattice - num_rings : int - Number of radial ring positions in the xy-plane - num_axial : int - Number of positions along the z-axis. - center : array-like of float - Coordinates of the center of the lattice. If the lattice does not have - axial sections then only the x- and y-coordinates are specified - - """ - - def __init__(self, lattice_id=None, name=''): - super(HexLattice, self).__init__(lattice_id, name) - - # Initialize Lattice class attributes - self._num_rings = None - self._num_axial = None - self._center = None - - def __eq__(self, other): - if not isinstance(other, HexLattice): - return False - elif not super(HexLattice, self).__eq__(other): - return False - elif self.num_rings != other.num_rings: - return False - elif self.num_axial != other.num_axial: - return False - elif self.center != other.center: - return False - else: - return True - - def __ne__(self, other): - return not self == other - - def __hash__(self): - return hash(repr(self)) - - def __repr__(self): - string = 'HexLattice\n' - string += '{0: <16}{1}{2}\n'.format('\tID', '=\t', self._id) - string += '{0: <16}{1}{2}\n'.format('\tName', '=\t', self._name) - string += '{0: <16}{1}{2}\n'.format('\t# Rings', '=\t', self._num_rings) - string += '{0: <16}{1}{2}\n'.format('\t# Axial', '=\t', self._num_axial) - string += '{0: <16}{1}{2}\n'.format('\tCenter', '=\t', - self._center) - string += '{0: <16}{1}{2}\n'.format('\tPitch', '=\t', self._pitch) - - if self._outer is not None: - string += '{0: <16}{1}{2}\n'.format('\tOuter', '=\t', - self._outer._id) - else: - string += '{0: <16}{1}{2}\n'.format('\tOuter', '=\t', - self._outer) - - string += '{0: <16}\n'.format('\tUniverses') - - if self._num_axial is not None: - slices = [self._repr_axial_slice(x) for x in self._universes] - string += '\n'.join(slices) - - else: - string += self._repr_axial_slice(self._universes) - - return string - - @property - def num_rings(self): - return self._num_rings - - @property - def num_axial(self): - return self._num_axial - - @property - def center(self): - return self._center - - @num_rings.setter - def num_rings(self, num_rings): - cv.check_type('number of rings', num_rings, Integral) - cv.check_greater_than('number of rings', num_rings, 0) - self._num_rings = num_rings - - @num_axial.setter - def num_axial(self, num_axial): - cv.check_type('number of axial', num_axial, Integral) - cv.check_greater_than('number of axial', num_axial, 0) - self._num_axial = num_axial - - @center.setter - def center(self, center): - cv.check_type('lattice center', center, Iterable, Real) - cv.check_length('lattice center', center, 2, 3) - self._center = center - - @Lattice.pitch.setter - def pitch(self, pitch): - cv.check_type('lattice pitch', pitch, Iterable, Real) - cv.check_length('lattice pitch', pitch, 1, 2) - for dim in pitch: - cv.check_greater_than('lattice pitch', dim, 0) - self._pitch = pitch - - @Lattice.universes.setter - def universes(self, universes): - # Call Lattice.universes parent class setter property - Lattice.universes.fset(self, universes) - - # NOTE: This routine assumes that the user creates a "ragged" list of - # lists, where each sub-list corresponds to one ring of Universes. - # The sub-lists are ordered from outermost ring to innermost ring. - # The Universes within each sub-list are ordered from the "top" in a - # clockwise fashion. - - # Check to see if the given universes look like a 2D or a 3D array. - if isinstance(self._universes[0][0], Universe): - n_dims = 2 - - elif isinstance(self._universes[0][0][0], Universe): - n_dims = 3 - - else: - msg = 'HexLattice ID={0:d} does not appear to be either 2D or ' \ - '3D. Make sure set_universes was given a two-deep or ' \ - 'three-deep iterable of universes.'.format(self._id) - raise RuntimeError(msg) - - # Set the number of axial positions. - if n_dims == 3: - self.num_axial = len(self._universes) - else: - self._num_axial = None - - # Set the number of rings and make sure this number is consistent for - # all axial positions. - if n_dims == 3: - self.num_rings = len(self._universes) - for rings in self._universes: - if len(rings) != self._num_rings: - msg = 'HexLattice ID={0:d} has an inconsistent number of ' \ - 'rings per axial positon'.format(self._id) - raise ValueError(msg) - - else: - self.num_rings = len(self._universes) - - # Make sure there are the correct number of elements in each ring. - if n_dims == 3: - for axial_slice in self._universes: - # Check the center ring. - if len(axial_slice[-1]) != 1: - msg = 'HexLattice ID={0:d} has the wrong number of ' \ - 'elements in the innermost ring. Only 1 element is ' \ - 'allowed in the innermost ring.'.format(self._id) - raise ValueError(msg) - - # Check the outer rings. - for r in range(self._num_rings-1): - if len(axial_slice[r]) != 6*(self._num_rings - 1 - r): - msg = 'HexLattice ID={0:d} has the wrong number of ' \ - 'elements in ring number {1:d} (counting from the '\ - 'outermost ring). This ring should have {2:d} ' \ - 'elements.'.format(self._id, r, - 6*(self._num_rings - 1 - r)) - raise ValueError(msg) - - else: - axial_slice = self._universes - # Check the center ring. - if len(axial_slice[-1]) != 1: - msg = 'HexLattice ID={0:d} has the wrong number of ' \ - 'elements in the innermost ring. Only 1 element is ' \ - 'allowed in the innermost ring.'.format(self._id) - raise ValueError(msg) - - # Check the outer rings. - for r in range(self._num_rings-1): - if len(axial_slice[r]) != 6*(self._num_rings - 1 - r): - msg = 'HexLattice ID={0:d} has the wrong number of ' \ - 'elements in ring number {1:d} (counting from the '\ - 'outermost ring). This ring should have {2:d} ' \ - 'elements.'.format(self._id, r, - 6*(self._num_rings - 1 - r)) - raise ValueError(msg) - - def create_xml_subelement(self, xml_element): - # Determine if XML element already contains subelement for this Lattice - path = './hex_lattice[@id=\'{0}\']'.format(self._id) - test = xml_element.find(path) - - # If the element does contain the Lattice subelement, then return - if test is not None: - return - - lattice_subelement = ET.Element("hex_lattice") - lattice_subelement.set("id", str(self._id)) - - if len(self._name) > 0: - lattice_subelement.set("name", str(self._name)) - - # Export the Lattice cell pitch - pitch = ET.SubElement(lattice_subelement, "pitch") - pitch.text = ' '.join(map(str, self._pitch)) - - # Export the Lattice outer Universe (if specified) - if self._outer is not None: - outer = ET.SubElement(lattice_subelement, "outer") - outer.text = '{0}'.format(self._outer._id) - self._outer.create_xml_subelement(xml_element) - - lattice_subelement.set("n_rings", str(self._num_rings)) - - if self._num_axial is not None: - lattice_subelement.set("n_axial", str(self._num_axial)) - - # Export Lattice cell center - dimension = ET.SubElement(lattice_subelement, "center") - dimension.text = ' '.join(map(str, self._center)) - - # Export the Lattice nested Universe IDs. - - # 3D Lattices - if self._num_axial is not None: - slices = [] - for z in range(self._num_axial): - # Initialize the center universe. - universe = self._universes[z][-1][0] - universe.create_xml_subelement(xml_element) - - # Initialize the remaining universes. - for r in range(self._num_rings-1): - for theta in range(6*(self._num_rings - 1 - r)): - universe = self._universes[z][r][theta] - universe.create_xml_subelement(xml_element) - - # Get a string representation of the universe IDs. - slices.append(self._repr_axial_slice(self._universes[z])) - - # Collapse the list of axial slices into a single string. - universe_ids = '\n'.join(slices) - - # 2D Lattices - else: - # Initialize the center universe. - universe = self._universes[-1][0] - universe.create_xml_subelement(xml_element) - - # Initialize the remaining universes. - for r in range(self._num_rings - 1): - for theta in range(6*(self._num_rings - 1 - r)): - universe = self._universes[r][theta] - universe.create_xml_subelement(xml_element) - - # Get a string representation of the universe IDs. - universe_ids = self._repr_axial_slice(self._universes) - - universes = ET.SubElement(lattice_subelement, "universes") - universes.text = '\n' + universe_ids - - # Append the XML subelement for this Lattice to the XML element - xml_element.append(lattice_subelement) - - def _repr_axial_slice(self, universes): - """Return string representation for the given 2D group of universes. - - The 'universes' argument should be a list of lists of universes where - each sub-list represents a single ring. The first list should be the - outer ring. - """ - - # Find the largest universe ID and count the number of digits so we can - # properly pad the output string later. - largest_id = max([max([univ._id for univ in ring]) - for ring in universes]) - n_digits = len(str(largest_id)) - pad = ' '*n_digits - id_form = '{: ^' + str(n_digits) + 'd}' - - # Initialize the list for each row. - rows = [ [] for i in range(1 + 4 * (self._num_rings-1)) ] - middle = 2 * (self._num_rings - 1) - - # Start with the degenerate first ring. - universe = universes[-1][0] - rows[middle] = [id_form.format(universe._id)] - - # Add universes one ring at a time. - for r in range(1, self._num_rings): - # r_prime increments down while r increments up. - r_prime = self._num_rings - 1 - r - theta = 0 - y = middle + 2*r - - # Climb down the top-right. - for i in range(r): - # Add the universe. - universe = universes[r_prime][theta] - rows[y].append(id_form.format(universe._id)) - - # Translate the indices. - y -= 1 - theta += 1 - - # Climb down the right. - for i in range(r): - # Add the universe. - universe = universes[r_prime][theta] - rows[y].append(id_form.format(universe._id)) - - # Translate the indices. - y -= 2 - theta += 1 - - # Climb down the bottom-right. - for i in range(r): - # Add the universe. - universe = universes[r_prime][theta] - rows[y].append(id_form.format(universe._id)) - - # Translate the indices. - y -= 1 - theta += 1 - - # Climb up the bottom-left. - for i in range(r): - # Add the universe. - universe = universes[r_prime][theta] - rows[y].insert(0, id_form.format(universe._id)) - - # Translate the indices. - y += 1 - theta += 1 - - # Climb up the left. - for i in range(r): - # Add the universe. - universe = universes[r_prime][theta] - rows[y].insert(0, id_form.format(universe._id)) - - # Translate the indices. - y += 2 - theta += 1 - - # Climb up the top-left. - for i in range(r): - # Add the universe. - universe = universes[r_prime][theta] - rows[y].insert(0, id_form.format(universe._id)) - - # Translate the indices. - y += 1 - theta += 1 - - # Flip the rows and join each row into a single string. - rows = [pad.join(x) for x in rows[::-1]] - - # Pad the beginning of the rows so they line up properly. - for y in range(self._num_rings - 1): - rows[y] = (self._num_rings - 1 - y)*pad + rows[y] - rows[-1 - y] = (self._num_rings - 1 - y)*pad + rows[-1 - y] - - for y in range(self._num_rings % 2, self._num_rings, 2): - rows[middle + y] = pad + rows[middle + y] - if y != 0: - rows[middle - y] = pad + rows[middle - y] - - # Join the rows together and return the string. - universe_ids = '\n'.join(rows) - return universe_ids From 14dc134869d6b4659ef78c89da8605f57c7d0429 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 13 Apr 2016 22:17:16 -0500 Subject: [PATCH 439/650] Complete overhaul of Python API documentation --- .gitignore | 1 + docs/source/_templates/myclass.rst | 7 + docs/source/conf.py | 39 ++- docs/source/pythonapi/ace.rst | 8 - docs/source/pythonapi/cmfd.rst | 8 - docs/source/pythonapi/element.rst | 8 - docs/source/pythonapi/executor.rst | 8 - docs/source/pythonapi/filter.rst | 8 - docs/source/pythonapi/geometry.rst | 8 - docs/source/pythonapi/index.rst | 280 ++++++++++++++++++--- docs/source/pythonapi/material.rst | 8 - docs/source/pythonapi/mesh.rst | 8 - docs/source/pythonapi/mgxs.rst | 95 ------- docs/source/pythonapi/mgxs_library.rst | 8 - docs/source/pythonapi/nuclide.rst | 8 - docs/source/pythonapi/particle_restart.rst | 8 - docs/source/pythonapi/plots.rst | 8 - docs/source/pythonapi/settings.rst | 8 - docs/source/pythonapi/source.rst | 8 - docs/source/pythonapi/statepoint.rst | 8 - docs/source/pythonapi/stats.rst | 58 ----- docs/source/pythonapi/summary.rst | 8 - docs/source/pythonapi/surface.rst | 8 - docs/source/pythonapi/tallies.rst | 8 - docs/source/pythonapi/trigger.rst | 8 - docs/source/pythonapi/universe.rst | 8 - docs/source/usersguide/processing.rst | 8 +- openmc/__init__.py | 2 + openmc/cell.py | 12 +- openmc/cmfd.py | 4 +- openmc/element.py | 2 +- openmc/filter.py | 16 +- openmc/geometry.py | 28 +-- openmc/lattice.py | 12 +- openmc/material.py | 18 +- openmc/mgxs/groups.py | 16 +- openmc/mgxs/library.py | 18 +- openmc/mgxs/mgxs.py | 66 ++--- openmc/mgxs_library.py | 10 +- openmc/plots.py | 6 +- openmc/region.py | 48 ++-- openmc/settings.py | 10 +- openmc/statepoint.py | 42 ++-- openmc/stats/multivariate.py | 40 +-- openmc/stats/univariate.py | 16 +- openmc/summary.py | 10 +- openmc/surface.py | 40 +-- openmc/tallies.py | 135 +++++----- openmc/universe.py | 16 +- 49 files changed, 555 insertions(+), 660 deletions(-) create mode 100644 docs/source/_templates/myclass.rst delete mode 100644 docs/source/pythonapi/ace.rst delete mode 100644 docs/source/pythonapi/cmfd.rst delete mode 100644 docs/source/pythonapi/element.rst delete mode 100644 docs/source/pythonapi/executor.rst delete mode 100644 docs/source/pythonapi/filter.rst delete mode 100644 docs/source/pythonapi/geometry.rst delete mode 100644 docs/source/pythonapi/material.rst delete mode 100644 docs/source/pythonapi/mesh.rst delete mode 100644 docs/source/pythonapi/mgxs.rst delete mode 100644 docs/source/pythonapi/mgxs_library.rst delete mode 100644 docs/source/pythonapi/nuclide.rst delete mode 100644 docs/source/pythonapi/particle_restart.rst delete mode 100644 docs/source/pythonapi/plots.rst delete mode 100644 docs/source/pythonapi/settings.rst delete mode 100644 docs/source/pythonapi/source.rst delete mode 100644 docs/source/pythonapi/statepoint.rst delete mode 100644 docs/source/pythonapi/stats.rst delete mode 100644 docs/source/pythonapi/summary.rst delete mode 100644 docs/source/pythonapi/surface.rst delete mode 100644 docs/source/pythonapi/tallies.rst delete mode 100644 docs/source/pythonapi/trigger.rst delete mode 100644 docs/source/pythonapi/universe.rst diff --git a/.gitignore b/.gitignore index 815e978510..f0378dfc61 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ examples/python/**/*.xml docs/build docs/source/_images/*.pdf docs/source/_images/*.aux +docs/source/pythonapi/generated/ # Source build build diff --git a/docs/source/_templates/myclass.rst b/docs/source/_templates/myclass.rst new file mode 100644 index 0000000000..a0560f93a3 --- /dev/null +++ b/docs/source/_templates/myclass.rst @@ -0,0 +1,7 @@ +{{ fullname }} +{{ underline }} + +.. currentmodule:: {{ module }} + +.. autoclass:: {{ objname }} + :members: diff --git a/docs/source/conf.py b/docs/source/conf.py index 6ca551a431..3bf5b0b1e1 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -24,13 +24,8 @@ except ImportError: from mock import Mock as MagicMock -class Mock(MagicMock): - @classmethod - def __getattr__(cls, name): - return Mock() - MOCK_MODULES = ['numpy', 'h5py', 'pandas', 'opencg'] -sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES) +sys.modules.update((mod_name, MagicMock()) for mod_name in MOCK_MODULES) # If extensions (or modules to document with autodoc) are in another directory, @@ -48,6 +43,7 @@ extensions = ['sphinx.ext.autodoc', 'sphinx.ext.napoleon', 'sphinx.ext.mathjax', 'sphinx.ext.autosummary', + 'sphinx.ext.intersphinx', 'sphinx_numfig', 'notebook_sphinxext'] @@ -65,7 +61,7 @@ master_doc = 'index' # General information about the project. project = u'OpenMC' -copyright = u'2011-2015, Massachusetts Institute of Technology' +copyright = u'2011-2016, Massachusetts Institute of Technology' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -122,20 +118,13 @@ pygments_style = 'tango' # -- Options for HTML output --------------------------------------------------- -# The theme to use for HTML and HTML Help pages. Major themes that come with -# Sphinx are currently 'default' and 'sphinxdoc'. -if on_rtd: - html_theme = 'default' - html_logo = '_images/openmc200px.png' -else: - html_theme = 'haiku' - html_theme_options = {'full_logo': True, - 'linkcolor': '#0c3762', - 'visitedlinkcolor': '#0c3762'} - html_logo = '_images/openmc.png' +# The theme to use for HTML and HTML Help pages +if not on_rtd: + import sphinx_rtd_theme + html_theme = 'sphinx_rtd_theme' + html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = ["_theme"] +html_logo = '_images/openmc200px.png' # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". @@ -248,4 +237,12 @@ latex_elements = { #Autodocumentation Flags #autodoc_member_order = "groupwise" #autoclass_content = "both" -#autosummary_generate = [] +autosummary_generate = True + +napoleon_use_ivar = True + +intersphinx_mapping = { + 'python': ('https://docs.python.org/3', None), + 'numpy': ('http://docs.scipy.org/doc/numpy/', None), + 'pandas': ('http://pandas.pydata.org/pandas-docs/stable/', None) +} diff --git a/docs/source/pythonapi/ace.rst b/docs/source/pythonapi/ace.rst deleted file mode 100644 index 4810ec4bbc..0000000000 --- a/docs/source/pythonapi/ace.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_ace: - -========== -ACE Format -========== - -.. automodule:: openmc.ace - :members: diff --git a/docs/source/pythonapi/cmfd.rst b/docs/source/pythonapi/cmfd.rst deleted file mode 100644 index 51470069fe..0000000000 --- a/docs/source/pythonapi/cmfd.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_cmfd: - -==== -CMFD -==== - -.. automodule:: openmc.cmfd - :members: diff --git a/docs/source/pythonapi/element.rst b/docs/source/pythonapi/element.rst deleted file mode 100644 index 473cbba45d..0000000000 --- a/docs/source/pythonapi/element.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_element: - -======= -Element -======= - -.. automodule:: openmc.element - :members: diff --git a/docs/source/pythonapi/executor.rst b/docs/source/pythonapi/executor.rst deleted file mode 100644 index ef6693ec9e..0000000000 --- a/docs/source/pythonapi/executor.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_executor: - -======== -Executor -======== - -.. automodule:: openmc.executor - :members: diff --git a/docs/source/pythonapi/filter.rst b/docs/source/pythonapi/filter.rst deleted file mode 100644 index f93ba5a158..0000000000 --- a/docs/source/pythonapi/filter.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_filter: - -====== -Filter -====== - -.. automodule:: openmc.filter - :members: diff --git a/docs/source/pythonapi/geometry.rst b/docs/source/pythonapi/geometry.rst deleted file mode 100644 index 6b87edb978..0000000000 --- a/docs/source/pythonapi/geometry.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_geometry: - -======== -Geometry -======== - -.. automodule:: openmc.geometry - :members: diff --git a/docs/source/pythonapi/index.rst b/docs/source/pythonapi/index.rst index 864b48c556..3e0d8a418c 100644 --- a/docs/source/pythonapi/index.rst +++ b/docs/source/pythonapi/index.rst @@ -13,61 +13,261 @@ online. We recommend going through the modules from Codecademy_ and/or the `Scipy lectures`_. The full API documentation serves to provide more information on a given module or class. -**Handling nuclear data:** +------------------------------------ +:mod:`openmc` -- Basic Functionality +------------------------------------ -.. toctree:: - :maxdepth: 1 +Handling nuclear data +--------------------- - ace - mgxs_library +Classes ++++++++ -**Creating input files:** +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst -.. toctree:: - :maxdepth: 1 + openmc.XSdata + openmc.MGXSLibraryFile - cmfd - element - filter - geometry - material - mesh - nuclide - opencg_compatible - plots - settings - source - stats - surface - tallies - trigger - universe +Functions ++++++++++ -**Running OpenMC:** +.. autosummary:: + :toctree: generated + :nosignatures: -.. toctree:: - :maxdepth: 1 + openmc.ace.ascii_to_binary - executor +Simulation Settings +------------------- -**Post-processing:** +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst -.. toctree:: - :maxdepth: 1 + openmc.Source + openmc.ResonanceScattering + openmc.SettingsFile - particle_restart - statepoint - summary - tallies +Material Specification +---------------------- -**Multi-Group Cross Section Generation** +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst -.. toctree:: - :maxdepth: 1 + openmc.Nuclide + openmc.Element + openmc.Macroscopic + openmc.Material + openmc.MaterialsFile - mgxs +Building geometry +----------------- -**Example Jupyter Notebooks:** +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst + + openmc.XPlane + openmc.YPlane + openmc.ZPlane + openmc.XCylinder + openmc.YCylinder + openmc.ZCylinder + openmc.Sphere + openmc.Halfspace + openmc.Intersection + openmc.Union + openmc.Complement + openmc.Cell + openmc.Universe + openmc.RectLattice + openmc.HexLattice + openmc.Geometry + openmc.GeometryFile + +Many of the above classes are derived from several abstract classes: + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst + + openmc.Surface + openmc.Region + openmc.Lattice + +Constructing Tallies +-------------------- + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst + + openmc.Filter + openmc.Mesh + openmc.Trigger + openmc.Tally + openmc.TalliesFile + +Coarse Mesh Finite Difference Acceleration +------------------------------------------ + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst + + openmc.CMFDMesh + openmc.CMFDFile + +Plotting +-------- + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst + + openmc.Plot + openmc.PlotsFile + +Running OpenMC +-------------- + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst + + openmc.Executor + +Post-processing +--------------- + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst + + openmc.Particle + openmc.StatePoint + openmc.Summary + +Various classes may be created when performing tally slicing and/or arithmetic: + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst + + openmc.CrossScore + openmc.CrossNuclide + openmc.CrossFilter + openmc.AggregateScore + openmc.AggregateNuclide + openmc.AggregateFilter + +--------------------------------- +:mod:`openmc.stats` -- Statistics +--------------------------------- + +Univariate Probability Distributions +------------------------------------ + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst + + openmc.stats.Univariate + openmc.stats.Discrete + openmc.stats.Uniform + openmc.stats.Maxwell + openmc.stats.Watt + openmc.stats.Tabular + +Angular Distributions +--------------------- + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst + + openmc.stats.UnitSphere + openmc.stats.PolarAzimuthal + openmc.stats.Isotropic + openmc.stats.Monodirectional + +Spatial Distributions +--------------------- + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst + + openmc.stats.Spatial + openmc.stats.CartesianIndependent + openmc.stats.Box + openmc.stats.Point + +---------------------------------------------------------- +:mod:`openmc.mgxs` -- Multi-Group Cross Section Generation +---------------------------------------------------------- + +Energy Groups +------------- + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst + + openmc.mgxs.EnergyGroups + +Multi-group Cross Sections +-------------------------- + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst + + openmc.mgxs.MGXS + openmc.mgxs.AbsorptionXS + openmc.mgxs.CaptureXS + openmc.mgxs.Chi + openmc.mgxs.FissionXS + openmc.mgxs.NuFissionXS + openmc.mgxs.NuScatterXS + openmc.mgxs.NuScatterMatrixXS + openmc.mgxs.ScatterXS + openmc.mgxs.ScatterMatrixXS + openmc.mgxs.TotalXS + openmc.mgxs.TransportXS + +Multi-group Cross Section Libraries +----------------------------------- + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst + + openmc.mgxs.Library + +------------------------- +Example Jupyter Notebooks +------------------------- .. toctree:: :maxdepth: 1 diff --git a/docs/source/pythonapi/material.rst b/docs/source/pythonapi/material.rst deleted file mode 100644 index 16a3af7012..0000000000 --- a/docs/source/pythonapi/material.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_material: - -========= -Materials -========= - -.. automodule:: openmc.material - :members: diff --git a/docs/source/pythonapi/mesh.rst b/docs/source/pythonapi/mesh.rst deleted file mode 100644 index dbecd7c31d..0000000000 --- a/docs/source/pythonapi/mesh.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_mesh: - -==== -Mesh -==== - -.. automodule:: openmc.mesh - :members: diff --git a/docs/source/pythonapi/mgxs.rst b/docs/source/pythonapi/mgxs.rst deleted file mode 100644 index 2a0bb52ba4..0000000000 --- a/docs/source/pythonapi/mgxs.rst +++ /dev/null @@ -1,95 +0,0 @@ -.. _pythonapi_mgxs: - -========================== -Multi-Group Cross Sections -========================== - ----------------------------- -Summary of Available Classes ----------------------------- - -Energy Groups -------------- - -.. currentmodule:: openmc.mgxs.groups - -.. autosummary:: - - EnergyGroups - -Multi-group Cross Sections --------------------------- - -.. currentmodule:: openmc.mgxs.mgxs - -.. autosummary:: - - MGXS - AbsorptionXS - CaptureXS - Chi - FissionXS - NuFissionXS - NuScatterXS - NuScatterMatrixXS - ScatterXS - ScatterMatrixXS - TotalXS - TransportXS - -Multi-group Cross Section Libraries ------------------------------------ - -.. currentmodule:: openmc.mgxs.library - -.. autosummary:: - - Library - -------------------- -Class Documentation -------------------- - -.. automodule:: openmc.mgxs.groups - :members: - -.. currentmodule:: openmc.mgxs.mgxs - -.. autoclass:: MGXS - :members: - -.. autoclass:: AbsorptionXS - :members: - -.. autoclass:: CaptureXS - :members: - -.. autoclass:: Chi - :members: - -.. autoclass:: FissionXS - :members: - -.. autoclass:: NuFissionXS - :members: - -.. autoclass:: NuScatterXS - :members: - -.. autoclass:: NuScatterMatrixXS - :members: - -.. autoclass:: ScatterXS - :members: - -.. autoclass:: ScatterMatrixXS - :members: - -.. autoclass:: TotalXS - :members: - -.. autoclass:: TransportXS - :members: - -.. automodule:: openmc.mgxs.library - :members: diff --git a/docs/source/pythonapi/mgxs_library.rst b/docs/source/pythonapi/mgxs_library.rst deleted file mode 100644 index bdcdc364c1..0000000000 --- a/docs/source/pythonapi/mgxs_library.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_mgxs_library: - -============================== -Multi-group Cross Section Data -============================== - -.. automodule:: openmc.mgxs_library - :members: diff --git a/docs/source/pythonapi/nuclide.rst b/docs/source/pythonapi/nuclide.rst deleted file mode 100644 index 9e3214e925..0000000000 --- a/docs/source/pythonapi/nuclide.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_nuclide: - -======= -Nuclide -======= - -.. automodule:: openmc.nuclide - :members: diff --git a/docs/source/pythonapi/particle_restart.rst b/docs/source/pythonapi/particle_restart.rst deleted file mode 100644 index 66ed89988a..0000000000 --- a/docs/source/pythonapi/particle_restart.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_particle_restart: - -================ -Particle Restart -================ - -.. automodule:: openmc.particle_restart - :members: diff --git a/docs/source/pythonapi/plots.rst b/docs/source/pythonapi/plots.rst deleted file mode 100644 index 8ad5348be3..0000000000 --- a/docs/source/pythonapi/plots.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_plots: - -===== -Plots -===== - -.. automodule:: openmc.plots - :members: diff --git a/docs/source/pythonapi/settings.rst b/docs/source/pythonapi/settings.rst deleted file mode 100644 index 3a3915ff50..0000000000 --- a/docs/source/pythonapi/settings.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_settings: - -======== -Settings -======== - -.. automodule:: openmc.settings - :members: diff --git a/docs/source/pythonapi/source.rst b/docs/source/pythonapi/source.rst deleted file mode 100644 index 4bc770363a..0000000000 --- a/docs/source/pythonapi/source.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_source: - -====== -Source -====== - -.. automodule:: openmc.source - :members: diff --git a/docs/source/pythonapi/statepoint.rst b/docs/source/pythonapi/statepoint.rst deleted file mode 100644 index 737fc03fca..0000000000 --- a/docs/source/pythonapi/statepoint.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_statepoint: - -========== -Statepoint -========== - -.. automodule:: openmc.statepoint - :members: diff --git a/docs/source/pythonapi/stats.rst b/docs/source/pythonapi/stats.rst deleted file mode 100644 index 58060cacbc..0000000000 --- a/docs/source/pythonapi/stats.rst +++ /dev/null @@ -1,58 +0,0 @@ -.. _pythonapi_stats: - -===================== -Statistical Functions -===================== - ----------------------------- -Summary of Available Classes ----------------------------- - -Univariate Probability Distributions ------------------------------------- - -.. currentmodule:: openmc.stats.univariate - -.. autosummary:: - - Univariate - Discrete - Uniform - Maxwell - Watt - Tabular - -Angular Distributions ---------------------- - -.. currentmodule:: openmc.stats.multivariate - -.. autosummary:: - - UnitSphere - PolarAzimuthal - Isotropic - Monodirectional - -Spatial Distributions ---------------------- - -.. autosummary:: - - Spatial - CartesianIndependent - Box - Point - - -Univariate Probability Distributions ------------------------------------- - -.. automodule:: openmc.stats.univariate - :members: - -Multivariate Probability Distributions --------------------------------------- - -.. automodule:: openmc.stats.multivariate - :members: diff --git a/docs/source/pythonapi/summary.rst b/docs/source/pythonapi/summary.rst deleted file mode 100644 index 9a791127b4..0000000000 --- a/docs/source/pythonapi/summary.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_summary: - -======= -Summary -======= - -.. automodule:: openmc.summary - :members: diff --git a/docs/source/pythonapi/surface.rst b/docs/source/pythonapi/surface.rst deleted file mode 100644 index cc31f5b3e3..0000000000 --- a/docs/source/pythonapi/surface.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_surface: - -======= -Surface -======= - -.. automodule:: openmc.surface - :members: diff --git a/docs/source/pythonapi/tallies.rst b/docs/source/pythonapi/tallies.rst deleted file mode 100644 index 2f24edf3a0..0000000000 --- a/docs/source/pythonapi/tallies.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_tallies: - -======= -Tallies -======= - -.. automodule:: openmc.tallies - :members: diff --git a/docs/source/pythonapi/trigger.rst b/docs/source/pythonapi/trigger.rst deleted file mode 100644 index 82567c2cf1..0000000000 --- a/docs/source/pythonapi/trigger.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_trigger: - -======= -Trigger -======= - -.. automodule:: openmc.trigger - :members: diff --git a/docs/source/pythonapi/universe.rst b/docs/source/pythonapi/universe.rst deleted file mode 100644 index fd4a3c1e29..0000000000 --- a/docs/source/pythonapi/universe.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _pythonapi_universe: - -======== -Universe -======== - -.. automodule:: openmc.universe - :members: diff --git a/docs/source/usersguide/processing.rst b/docs/source/usersguide/processing.rst index b18569ec6a..059659dbc1 100644 --- a/docs/source/usersguide/processing.rst +++ b/docs/source/usersguide/processing.rst @@ -196,10 +196,10 @@ Data Extraction A great deal of information is available in statepoint files (See :ref:`usersguide_statepoint`), all of which is accessible through the Python -API. The ``openmc.statepoint`` module (see :ref:`pythonapi_statepoint`) provides -a class to load statepoints and access data as requested; it is used in many of -the provided plotting utilities, OpenMC's regression test suite, and can be used -in user-created scripts to carry out manipulations of the data. +API. The :class:`openmc.StatePoint` class can load statepoints and access data +as requested; it is used in many of the provided plotting utilities, OpenMC's +regression test suite, and can be used in user-created scripts to carry out +manipulations of the data. An :ref:`example IPython notebook ` demonstrates how to extract data from a statepoint using the Python API. diff --git a/openmc/__init__.py b/openmc/__init__.py index 9a39bcb82e..b6a93c0a41 100644 --- a/openmc/__init__.py +++ b/openmc/__init__.py @@ -20,6 +20,8 @@ from openmc.statepoint import * from openmc.summary import * from openmc.region import * from openmc.source import * +from openmc.particle_restart import * +from openmc.arithmetic import * try: from openmc.opencg_compatible import * diff --git a/openmc/cell.py b/openmc/cell.py index a5204f2c1f..c138f30442 100644 --- a/openmc/cell.py +++ b/openmc/cell.py @@ -44,15 +44,15 @@ class Cell(object): Unique identifier for the cell name : str Name of the cell - fill : Material or Universe or Lattice or 'void' or iterable of Material + fill : openmc.Material or openmc.Universe or openmc.Lattice or 'void' or iterable of openmc.Material Indicates what the region of space is filled with - region : openmc.region.Region + region : openmc.Region Region of space that is assigned to the cell. - rotation : ndarray + rotation : numpy.ndarray If the cell is filled with a universe, this array specifies the angles in degrees about the x, y, and z axes that the filled universe should be rotated. - translation : ndarray + translation : numpy.ndarray If the cell is filled with a universe, this array specifies a vector that is used to translate (shift) the universe. offsets : ndarray @@ -255,12 +255,12 @@ class Cell(object): cell. .. deprecated:: 0.7.1 - Use the Cell.region property to directly specify a Region + Use the :attr:`Cell.region` property to directly specify a Region expression. Parameters ---------- - surface : openmc.surface.Surface + surface : openmc.Surface Quadric surface dividing space halfspace : {-1, 1} Indicate whether the negative or positive half-space is to be used diff --git a/openmc/cmfd.py b/openmc/cmfd.py index c247719c94..b9977a288d 100644 --- a/openmc/cmfd.py +++ b/openmc/cmfd.py @@ -69,7 +69,7 @@ class CMFDMesh(object): to any tallies far away from fission source neutron regions. A ``2`` must be used to identify any fission source region. -""" + """ def __init__(self): self._lower_left = None @@ -219,7 +219,7 @@ class CMFDFile(object): inner tolerance for Gauss-Seidel iterations when performing CMFD. ktol : float Tolerance on the eigenvalue when performing CMFD power iteration - cmfd_mesh : CMFDMesh + cmfd_mesh : openmc.CMFDMesh Structured mesh to be used for acceleration norm : float Normalization factor applied to the CMFD fission source distribution diff --git a/openmc/element.py b/openmc/element.py index dda110ea7a..219aafbdf6 100644 --- a/openmc/element.py +++ b/openmc/element.py @@ -24,7 +24,7 @@ class Element(object): Chemical symbol of the element, e.g. Pu xs : str Cross section identifier, e.g. 71c - scattering : 'data' or 'iso-in-lab' or None + scattering : {'data', 'iso-in-lab', None} The type of angular scattering distribution to use """ diff --git a/openmc/filter.py b/openmc/filter.py index 4bc17afca3..037062a4ca 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -40,7 +40,7 @@ class Filter(object): The bins for the filter num_bins : Integral The number of filter bins - mesh : Mesh or None + mesh : openmc.Mesh or None A Mesh object for 'mesh' type filters. stride : Integral The number of filter, nuclide and score bins within each of this @@ -265,7 +265,7 @@ class Filter(object): Parameters ---------- - other : Filter + other : openmc.Filter Filter to compare with Returns @@ -310,12 +310,12 @@ class Filter(object): Parameters ---------- - other : Filter + other : openmc.Filter Filter to merge with Returns ------- - merged_filter : Filter + merged_filter : openmc.Filter Filter resulting from the merge """ @@ -355,7 +355,7 @@ class Filter(object): Parameters ---------- - other : Filter + other : openmc.Filter The filter to query as a subset of this filter Returns @@ -519,8 +519,8 @@ class Filter(object): """Builds a Pandas DataFrame for the Filter's bins. This method constructs a Pandas DataFrame object for the filter with - columns annotated by filter bin information. This is a helper method - for the Tally.get_pandas_dataframe(...) method. + columns annotated by filter bin information. This is a helper method for + :math:`Tally.get_pandas_dataframe`. This capability has been tested for Pandas >=0.13.1. However, it is recommended to use v0.16 or newer versions of Pandas since this method @@ -530,7 +530,7 @@ class Filter(object): ---------- data_size : Integral The total number of bins in the tally corresponding to this filter - summary : None or Summary + summary : None or openmc.Summary An optional Summary object to be used to construct columns for distribcell tally filters (default is None). The geometric information in the Summary object is embedded into a Multi-index diff --git a/openmc/geometry.py b/openmc/geometry.py index be3f281ebe..f5dfe97e4a 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -17,7 +17,7 @@ class Geometry(object): Attributes ---------- - root_universe : openmc.universe.Universe + root_universe : openmc.Universe Root universe which contains all others """ @@ -95,7 +95,7 @@ class Geometry(object): Returns ------- - list of openmc.universe.Cell + list of openmc.Cell Cells in the geometry """ @@ -116,7 +116,7 @@ class Geometry(object): Returns ------- - list of openmc.universe.Universe + list of openmc.Universe Universes in the geometry """ @@ -136,7 +136,7 @@ class Geometry(object): Returns ------- - list of openmc.nuclide.Nuclide + list of openmc.Nuclide Nuclides in the geometry """ @@ -154,7 +154,7 @@ class Geometry(object): Returns ------- - list of openmc.material.Material + list of openmc.Material Materials in the geometry """ @@ -177,7 +177,7 @@ class Geometry(object): Returns ------- - list of openmc.universe.Cell + list of openmc.Cell Cells filled by Materials in the geometry """ @@ -198,7 +198,7 @@ class Geometry(object): Returns ------- - list of openmc.universe.Universe + list of openmc.Universe Universes with non-fill cells """ @@ -221,7 +221,7 @@ class Geometry(object): Returns ------- - list of openmc.universe.Lattice + list of openmc.Lattice Lattices in the geometry """ @@ -252,7 +252,7 @@ class Geometry(object): Returns ------- - list of openmc.material.Material + list of openmc.Material Materials matching the queried name """ @@ -292,7 +292,7 @@ class Geometry(object): Returns ------- - list of openmc.universe.Cell + list of openmc.Cell Cells matching the queried name """ @@ -332,7 +332,7 @@ class Geometry(object): Returns ------- - list of openmc.universe.Cell + list of openmc.Cell Cells with fills matching the queried name """ @@ -372,7 +372,7 @@ class Geometry(object): Returns ------- - list of openmc.universe.Universe + list of openmc.Universe Universes matching the queried name """ @@ -412,7 +412,7 @@ class Geometry(object): Returns ------- - list of openmc.universe.Lattice + list of openmc.Lattice Lattices matching the queried name """ @@ -444,7 +444,7 @@ class GeometryFile(object): Attributes ---------- - geometry : Geometry + geometry : openmc.Geometry The geometry to be used """ diff --git a/openmc/lattice.py b/openmc/lattice.py index 047bd5830f..6417eef3cf 100644 --- a/openmc/lattice.py +++ b/openmc/lattice.py @@ -33,7 +33,7 @@ class Lattice(object): outer : int The unique identifier of a universe to fill all space outside the lattice - universes : ndarray of Universe + universes : numpy.ndarray of openmc.Universe An array of universes filling each element of the lattice """ @@ -123,7 +123,7 @@ class Lattice(object): Returns ------- - universes : dict + universes : collections.OrderedDict Dictionary whose keys are universe IDs and values are Universe instances @@ -151,7 +151,7 @@ class Lattice(object): Returns ------- - nuclides : dict + nuclides : collections.OrderedDict Dictionary whose keys are nuclide names and values are 2-tuples of (nuclide, density) @@ -173,7 +173,7 @@ class Lattice(object): Returns ------- - cells : dict + cells : collections.OrderedDict Dictionary whose keys are cell IDs and values are Cell instances """ @@ -191,7 +191,7 @@ class Lattice(object): Returns ------- - materials : dict + materials : collections.OrderedDict Dictionary whose keys are material IDs and values are Material instances """ @@ -210,7 +210,7 @@ class Lattice(object): Returns ------- - universes : dict + universes : collections.OrderedDict Dictionary whose keys are universe IDs and values are Universe instances diff --git a/openmc/material.py b/openmc/material.py index 9db2f03f04..2c04a9ecf2 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -270,7 +270,7 @@ class Material(object): Parameters ---------- - nuclide : str or openmc.nuclide.Nuclide + nuclide : str or openmc.Nuclide Nuclide to add percent : float Atom or weight percent @@ -313,7 +313,7 @@ class Material(object): Parameters ---------- - nuclide : openmc.nuclide.Nuclide + nuclide : openmc.Nuclide Nuclide to remove """ @@ -332,7 +332,7 @@ class Material(object): Parameters ---------- - macroscopic : str or Macroscopic + macroscopic : str or openmc.Macroscopic Macroscopic to add """ @@ -371,7 +371,7 @@ class Material(object): Parameters ---------- - macroscopic : Macroscopic + macroscopic : openmc.Macroscopic Macroscopic to remove """ @@ -390,7 +390,7 @@ class Material(object): Parameters ---------- - element : openmc.element.Element + element : openmc.Element Element to add percent : float Atom or weight percent @@ -429,7 +429,7 @@ class Material(object): Parameters ---------- - element : openmc.element.Element + element : openmc.Element Element to remove """ @@ -671,7 +671,7 @@ class MaterialsFile(object): Parameters ---------- - material : Material + material : openmc.Material Material to add """ @@ -688,7 +688,7 @@ class MaterialsFile(object): Parameters ---------- - materials : tuple or list of Material + materials : tuple or list of openmc.Material Materials to add """ @@ -706,7 +706,7 @@ class MaterialsFile(object): Parameters ---------- - material : Material + material : openmc.Material Material to remove """ diff --git a/openmc/mgxs/groups.py b/openmc/mgxs/groups.py index a1e03c3371..068977d888 100644 --- a/openmc/mgxs/groups.py +++ b/openmc/mgxs/groups.py @@ -24,7 +24,7 @@ class EnergyGroups(object): ---------- group_edges : Iterable of Real The energy group boundaries [MeV] - num_groups : Integral + num_groups : int The number of energy groups """ @@ -86,7 +86,7 @@ class EnergyGroups(object): Parameters ---------- - energy : Real + energy : float The energy of interest in MeV Returns @@ -115,7 +115,7 @@ class EnergyGroups(object): Parameters ---------- - group : Integral + group : int The energy group index, starting at 1 for the highest energies Returns @@ -153,7 +153,7 @@ class EnergyGroups(object): Returns ------- - ndarray + numpy.ndarray The ndarray array indices for each energy group of interest Raises @@ -200,7 +200,7 @@ class EnergyGroups(object): Returns ------- - EnergyGroups + openmc.mgxs.EnergyGroups A coarsened version of this EnergyGroups object. Raises @@ -244,7 +244,7 @@ class EnergyGroups(object): Parameters ---------- - other : EnergyGroups + other : openmc.mgxs.EnergyGroups EnergyGroups to compare with Returns @@ -275,12 +275,12 @@ class EnergyGroups(object): Parameters ---------- - other : EnergyGroups + other : openmc.mgxs.EnergyGroups EnergyGroups to merge with Returns ------- - merged_groups : EnergyGroups + merged_groups : openmc.mgxs.EnergyGroups EnergyGroups resulting from the merge """ diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index c36d8d516e..4de4bb48ac 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -53,22 +53,22 @@ class Library(object): The types of cross sections in the library (e.g., ['total', 'scatter']) domain_type : {'material', 'cell', 'distribcell', 'universe'} Domain type for spatial homogenization - domains : Iterable of Material, Cell or Universe + domains : Iterable of openmc.Material, openmc.Cell or openmc.Universe The spatial domain(s) for which MGXS in the Library are computed - correction : 'P0' or None + correction : {'P0', None} Apply the P0 correction to scattering matrices if set to 'P0' - energy_groups : EnergyGroups + energy_groups : openmc.mgxs.EnergyGroups Energy group structure for energy condensation - tally_trigger : Trigger + tally_trigger : openmc.Trigger An (optional) tally precision trigger given to each tally used to compute the cross section - all_mgxs : OrderedDict + all_mgxs : collections.OrderedDict MGXS objects keyed by domain ID and cross section type sp_filename : str The filename of the statepoint with tally data used to the compute cross sections keff : Real or None - The combined keff from the statepoint file with tally data used to + The combined keff from the statepoint file with tally data used to compute cross sections (for eigenvalue calculations only) name : str, optional Name of the multi-group cross section library. Used as a label to @@ -308,7 +308,7 @@ class Library(object): """ cv.check_type('sparse', sparse, bool) - + # Sparsify or densify each MGXS in the Library for domain in self.domains: for mgxs_type in self.mgxs_types: @@ -350,7 +350,7 @@ class Library(object): def add_to_tallies_file(self, tallies_file, merge=True): """Add all tallies from all MGXS objects to a tallies file. - NOTE: This assumes that build_library() has been called + NOTE: This assumes that :meth:`Library.build_library` has been called Parameters ---------- @@ -537,7 +537,7 @@ class Library(object): Returns ------- - Library + openmc.mgxs.Library A new multi-group cross section library averaged across subdomains Raises diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 7fcc0600a1..a9a58b957f 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -59,11 +59,11 @@ class MGXS(object): Parameters ---------- - domain : Material or Cell or Universe + domain : openmc.Material or openmc.Cell or openmc.Universe The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : EnergyGroups + energy_groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain @@ -83,26 +83,26 @@ class MGXS(object): Domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} Domain type for spatial homogenization - energy_groups : EnergyGroups + energy_groups : openmc.mgxs.EnergyGroups Energy group structure for energy condensation - tally_trigger : Trigger + tally_trigger : openmc.Trigger An (optional) tally precision trigger given to each tally used to compute the cross section - tallies : OrderedDict + tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section - rxn_rate_tally : Tally + rxn_rate_tally : openmc.Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None unless the multi-group cross section has been computed. - xs_tally : Tally + xs_tally : openmc.Tally Derived tally for the multi-group cross section. This attribute is None unless the multi-group cross section has been computed. - num_subdomains : Integral + num_subdomains : int The number of subdomains is unity for 'material', 'cell' and 'universe' domain types. When the This is equal to the number of cell instances for 'distribcell' domain types (it is equal to unity prior to loading tally data from a statepoint file). - num_nuclides : Integral + num_nuclides : int The number of nuclides for which the multi-group cross section is being tracked. This is unity if the by_nuclide attribute is False. nuclides : Iterable of str or 'sum' @@ -334,11 +334,11 @@ class MGXS(object): ---------- mgxs_type : {'total', 'transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'chi'} The type of multi-group cross section object to return - domain : Material or Cell or Universe + domain : openmc.Material or openmc.Cell or openmc.Universe The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : EnergyGroups + energy_groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain. @@ -349,7 +349,7 @@ class MGXS(object): Returns ------- - MGXS + openmc.mgxs.MGXS A subclass of the abstract MGXS class for the multi-group cross section type requested by the user @@ -425,7 +425,7 @@ class MGXS(object): Returns ------- - Real + float The atomic number density (atom/b-cm) for the nuclide of interest Raises @@ -464,7 +464,7 @@ class MGXS(object): Returns ------- - ndarray of Real + numpy.ndarray of float An array of the atomic number densities (atom/b-cm) for each of the nuclides in the spatial domain @@ -512,11 +512,11 @@ class MGXS(object): ---------- scores : Iterable of str Scores for each tally - all_filters : Iterable of tuple of Filter + all_filters : Iterable of tuple of openmc.Filter Tuples of non-spatial domain filters for each tally keys : Iterable of str Key string used to store each tally in the tallies dictionary - estimator : {'analog' or 'tracklength'} + estimator : {'analog', 'tracklength'} Type of estimator to use for each tally """ @@ -684,7 +684,7 @@ class MGXS(object): Returns ------- - ndarray + numpy.ndarray A NumPy array of the multi-group cross section indexed in the order each group, subdomain and nuclide is listed in the parameters. @@ -855,7 +855,7 @@ class MGXS(object): Returns ------- - MGXS + openmc.mgxs.MGXS A new MGXS averaged across the subdomains of interest Raises @@ -907,13 +907,13 @@ class MGXS(object): nuclides : list of str A list of nuclide name strings (e.g., ['U-235', 'U-238']; default is []) - groups : list of Integral + groups : list of int A list of energy group indices starting at 1 for the high energies (e.g., [1, 2, 3]; default is []) Returns ------- - MGXS + openmc.mgxs.MGXS A new tally which encapsulates the subset of data requested for the nuclide(s) and/or energy group(s) requested in the parameters. @@ -973,7 +973,7 @@ class MGXS(object): Parameters ---------- - other : MGXS + other : openmc.mgxs.MGXS MGXS to check for merging """ @@ -1010,12 +1010,12 @@ class MGXS(object): Parameters ---------- - other : MGXS + other : openmc.mgxs.MGXS MGXS to merge with this one Returns ------- - merged_mgxs : MGXS + merged_mgxs : openmc.mgxs.MGXS Merged MGXS """ @@ -1349,7 +1349,7 @@ class MGXS(object): xs_type='macro', summary=None): """Build a Pandas DataFrame for the MGXS data. - This method leverages the Tally.get_pandas_dataframe(...) method, but + This method leverages :math:`openmc.Tally.get_pandas_dataframe`, but renames the columns with terminology appropriate for cross section data. Parameters @@ -1366,7 +1366,7 @@ class MGXS(object): xs_type: {'macro', 'micro'} Return macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. - summary : None or Summary + summary : None or openmc.Summary An optional Summary object to be used to construct columns for distribcell tally filters (default is None). The geometric information in the Summary object is embedded into a multi-index @@ -1933,16 +1933,16 @@ class ScatterMatrixXS(MGXS): nuclides : list of str A list of nuclide name strings (e.g., ['U-235', 'U-238']; default is []) - in_groups : list of Integral + in_groups : list of int A list of incoming energy group indices starting at 1 for the high energies (e.g., [1, 2, 3]; default is []) - out_groups : list of Integral + out_groups : list of int A list of outgoing energy group indices starting at 1 for the high energies (e.g., [1, 2, 3]; default is []) Returns ------- - MGXS + openmc.mgxs.MGXS A new tally which encapsulates the subset of data requested for the nuclide(s) and/or energy group(s) requested in the parameters. @@ -2379,12 +2379,12 @@ class Chi(MGXS): Parameters ---------- - other : MGXS + other : openmc.mgxs.MGXS MGXS to merge with this one Returns ------- - merged_mgxs : MGXS + merged_mgxs : openmc.mgxs.MGXS Merged MGXS """ @@ -2452,7 +2452,7 @@ class Chi(MGXS): Returns ------- - ndarray + numpy.ndarray A NumPy array of the multi-group cross section indexed in the order each group, subdomain and nuclide is listed in the parameters. @@ -2560,7 +2560,7 @@ class Chi(MGXS): xs_type='macro', summary=None): """Build a Pandas DataFrame for the MGXS data. - This method leverages the Tally.get_pandas_dataframe(...) method, but + This method leverages :math:`openmc.Tally.get_pandas_dataframe`, but renames the columns with terminology appropriate for cross section data. Parameters @@ -2577,7 +2577,7 @@ class Chi(MGXS): xs_type: {'macro', 'micro'} Return macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. - summary : None or Summary + summary : None or openmc.Summary An optional Summary object to be used to construct columns for distribcell tally filters (default is None). The geometric information in the Summary object is embedded into a multi-index diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 7f140dd217..c0b04fed1e 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -24,7 +24,7 @@ def ndarray_to_string(arr): Parameters ---------- - arr : ndarray + arr : numpy.ndarray Array to combine in to a string Returns @@ -657,7 +657,7 @@ class MGXSLibraryFile(object): Energy group structure. inverse_velocities : Iterable of Real Inverse of velocities, units of sec/cm - xsdatas : Iterable of XSdata + xsdatas : Iterable of openmc.XSdata Iterable of multi-Group cross section data objects """ @@ -693,7 +693,7 @@ class MGXSLibraryFile(object): Parameters ---------- - xsdata : XSdata + xsdata : openmc.XSdata MGXS information to add """ @@ -716,7 +716,7 @@ class MGXSLibraryFile(object): Parameters ---------- - xsdatas : tuple or list of XSdata + xsdatas : tuple or list of openmc.XSdata XSdatas to add """ @@ -734,7 +734,7 @@ class MGXSLibraryFile(object): Parameters ---------- - xsdata : XSdata + xsdata : openmc.XSdata XSdata to remove """ diff --git a/openmc/plots.py b/openmc/plots.py index 636ca225cb..6e78995f4d 100644 --- a/openmc/plots.py +++ b/openmc/plots.py @@ -275,7 +275,7 @@ class Plot(object): The random number seed used to generate the color scheme """ - + cv.check_type('geometry', geometry, openmc.Geometry) cv.check_type('seed', seed, Integral) cv.check_greater_than('seed', seed, 1, equality=True) @@ -417,7 +417,7 @@ class PlotsFile(object): Parameters ---------- - plot : Plot + plot : openmc.Plot Plot to add """ @@ -433,7 +433,7 @@ class PlotsFile(object): Parameters ---------- - plot : Plot + plot : openmc.Plot Plot to remove """ diff --git a/openmc/region.py b/openmc/region.py index 7589184aa5..a2edbeedd6 100644 --- a/openmc/region.py +++ b/openmc/region.py @@ -9,10 +9,11 @@ from openmc.checkvalue import check_type class Region(object): """Region of space that can be assigned to a cell. - Region is an abstract base class that is inherited by Halfspace, - Intersection, Union, and Complement. Each of those respective classes are - typically not instantiated directly but rather are created through operators - of the Surface and Region classes. + Region is an abstract base class that is inherited by + :class:`openmc.Halfspace`, :class:`openmc.Intersection`, + :class:`openmc.Union`, and :class:`openmc.Complement`. Each of those + respective classes are typically not instantiated directly but rather are + created through operators of the Surface and Region classes. """ @@ -201,11 +202,11 @@ class Intersection(Region): """Intersection of two or more regions. Instances of Intersection are generally created via the __and__ operator - applied to two instances of Region. This is illustrated in the following - example: + applied to two instances of :class:`openmc.Region`. This is illustrated in + the following example: - >>> equator = openmc.surface.ZPlane(z0=0.0) - >>> earth = openmc.surface.Sphere(R=637.1e6) + >>> equator = openmc.ZPlane(z0=0.0) + >>> earth = openmc.Sphere(R=637.1e6) >>> northern_hemisphere = -earth & +equator >>> southern_hemisphere = -earth & -equator >>> type(northern_hemisphere) @@ -213,12 +214,12 @@ class Intersection(Region): Parameters ---------- - *nodes + \*nodes Regions to take the intersection of Attributes ---------- - nodes : tuple of Region + nodes : tuple of openmc.Region Regions to take the intersection of bounding_box : tuple of numpy.array Lower-left and upper-right coordinates of an axis-aligned bounding box @@ -255,21 +256,22 @@ class Union(Region): """Union of two or more regions. Instances of Union are generally created via the __or__ operator applied to - two instances of Region. This is illustrated in the following example: + two instances of :class:`openmc.Region`. This is illustrated in the + following example: - >>> s1 = openmc.surface.ZPlane(z0=0.0) - >>> s2 = openmc.surface.Sphere(R=637.1e6) + >>> s1 = openmc.ZPlane(z0=0.0) + >>> s2 = openmc.Sphere(R=637.1e6) >>> type(-s2 | +s1) Parameters ---------- - *nodes + \*nodes Regions to take the union of Attributes ---------- - nodes : tuple of Region + nodes : tuple of openmc.Region Regions to take the union of bounding_box : tuple of numpy.array Lower-left and upper-right coordinates of an axis-aligned bounding box @@ -305,13 +307,13 @@ class Union(Region): class Complement(Region): """Complement of a region. - The Complement of an existing Region can be created by using the __invert__ - operator as the following example demonstrates: + The Complement of an existing :class:`openmc.Region` can be created by using + the __invert__ operator as the following example demonstrates: - >>> xl = openmc.surface.XPlane(x0=-10.0) - >>> xr = openmc.surface.XPlane(x0=10.0) - >>> yl = openmc.surface.YPlane(y0=-10.0) - >>> yr = openmc.surface.YPlane(y0=10.0) + >>> xl = openmc.XPlane(x0=-10.0) + >>> xr = openmc.XPlane(x0=10.0) + >>> yl = openmc.YPlane(y0=-10.0) + >>> yr = openmc.YPlane(y0=10.0) >>> inside_box = +xl & -xr & +yl & -yl >>> outside_box = ~inside_box >>> type(outside_box) @@ -319,12 +321,12 @@ class Complement(Region): Parameters ---------- - node : Region + node : openmc.Region Region to take the complement of Attributes ---------- - node : Region + node : openmc.Region Regions to take the complement of bounding_box : tuple of numpy.array Lower-left and upper-right coordinates of an axis-aligned bounding box diff --git a/openmc/settings.py b/openmc/settings.py index 271932b84f..0be50bc563 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -38,7 +38,7 @@ class SettingsFile(object): type are 'variance', 'std_dev', and 'rel_err'. The threshold value should be a float indicating the variance, standard deviation, or relative error used. - source : Iterable of openmc.source.Source + source : Iterable of openmc.Source Distribution of source sites in space, angle, and energy output : dict Dictionary indicating what files to output. Valid keys are 'summary', @@ -1125,19 +1125,19 @@ class ResonanceScattering(object): Attributes ---------- - nuclide : openmc.nuclide.Nuclide + nuclide : openmc.Nuclide The nuclide affected by this resonance scattering treatment. - nuclide_0K : openmc.nuclide.Nuclide + nuclide_0K : openmc.Nuclide This should be the same isotope as the nuclide attribute above, but it should have an xs attribute that identifies 0 Kelvin data. method : str The method used to sample outgoing scattering energies. Valid options are 'ARES', 'CXS' (constant cross section), 'DBRC' (Doppler broadening rejection correction), and 'WCM' (weight correction method). - E_min : Real + E_min : float The minimum energy above which the specified method is applied. By default, CXS will be used below E_min. - E_max : Real + E_max : float The maximum energy below which the specified method is applied. By default, the asymptotic target-at-rest model is applied above E_max. diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 693400ad6c..7b75ac767b 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -18,51 +18,51 @@ class StatePoint(object): ---------- cmfd_on : bool Indicate whether CMFD is active - cmfd_balance : ndarray + cmfd_balance : numpy.ndarray Residual neutron balance for each batch cmfd_dominance Dominance ratio for each batch - cmfd_entropy : ndarray + cmfd_entropy : numpy.ndarray Shannon entropy of CMFD fission source for each batch - cmfd_indices : ndarray + cmfd_indices : numpy.ndarray Number of CMFD mesh cells and energy groups. The first three indices correspond to the x-, y-, and z- spatial directions and the fourth index is the number of energy groups. - cmfd_srccmp : ndarray + cmfd_srccmp : numpy.ndarray Root-mean-square difference between OpenMC and CMFD fission source for each batch - cmfd_src : ndarray + cmfd_src : numpy.ndarray CMFD fission source distribution over all mesh cells and energy groups. - current_batch : Integral + current_batch : int Number of batches simulated date_and_time : str Date and time when simulation began - entropy : ndarray + entropy : numpy.ndarray Shannon entropy of fission source at each batch gen_per_batch : Integral Number of fission generations per batch - global_tallies : ndarray of compound datatype + global_tallies : numpy.ndarray of compound datatype Global tallies for k-effective estimates and leakage. The compound datatype has fields 'name', 'sum', 'sum_sq', 'mean', and 'std_dev'. k_combined : list Combined estimator for k-effective and its uncertainty - k_col_abs : Real + k_col_abs : float Cross-product of collision and absorption estimates of k-effective - k_col_tra : Real + k_col_tra : float Cross-product of collision and tracklength estimates of k-effective - k_abs_tra : Real + k_abs_tra : float Cross-product of absorption and tracklength estimates of k-effective - k_generation : ndarray + k_generation : numpy.ndarray Estimate of k-effective for each batch/generation meshes : dict Dictionary whose keys are mesh IDs and whose values are Mesh objects - n_batches : Integral + n_batches : int Number of batches - n_inactive : Integral + n_inactive : int Number of inactive batches - n_particles : Integral + n_particles : int Number of particles per generation - n_realizations : Integral + n_realizations : int Number of tally realizations path : str Working directory for simulation @@ -71,9 +71,9 @@ class StatePoint(object): runtime : dict Dictionary whose keys are strings describing various runtime metrics and whose values are time values in seconds. - seed : Integral + seed : int Pseudorandom number generator seed - source : ndarray of compound datatype + source : numpy.ndarray of compound datatype Array of source sites. The compound datatype has fields 'wgt', 'xyz', 'uvw', and 'E' corresponding to the weight, position, direction, and energy of the source site. @@ -88,7 +88,7 @@ class StatePoint(object): Indicate whether user-defined tallies are present version: tuple of Integral Version of OpenMC - summary : None or openmc.summary.Summary + summary : None or openmc.Summary A summary object if the statepoint has been linked with a summary file """ @@ -504,7 +504,7 @@ class StatePoint(object): Returns ------- - tally : Tally + tally : openmc.Tally A tally matching the specified criteria Raises @@ -601,7 +601,7 @@ class StatePoint(object): Parameters ---------- - summary : Summary + summary : openmc.Summary A Summary object. Raises diff --git a/openmc/stats/multivariate.py b/openmc/stats/multivariate.py index 29258ee8dd..4ce34a0712 100644 --- a/openmc/stats/multivariate.py +++ b/openmc/stats/multivariate.py @@ -22,12 +22,12 @@ class UnitSphere(object): Parameters ---------- - reference_uvw : Iterable of Real + reference_uvw : Iterable of float Direction from which polar angle is measured Attributes ---------- - reference_uvw : Iterable of Real + reference_uvw : Iterable of float Direction from which polar angle is measured """ @@ -62,19 +62,19 @@ class PolarAzimuthal(UnitSphere): Parameters ---------- - mu : Univariate + mu : openmc.stats.Univariate Distribution of the cosine of the polar angle - phi : Univariate + phi : openmc.stats.Univariate Distribution of the azimuthal angle in radians - reference_uvw : Iterable of Real + reference_uvw : Iterable of float Direction from which polar angle is measured. Defaults to the positive z-direction. Attributes ---------- - mu : Univariate + mu : openmc.stats.Univariate Distribution of the cosine of the polar angle - phi : Univariate + phi : openmc.stats.Univariate Distribution of the azimuthal angle in radians """ @@ -142,7 +142,7 @@ class Monodirectional(UnitSphere): Parameters ---------- - reference_uvw : Iterable of Real + reference_uvw : Iterable of float Direction from which polar angle is measured. Defaults to the positive x-direction. @@ -186,20 +186,20 @@ class CartesianIndependent(Spatial): Parameters ---------- - x : Univariate + x : openmc.stats.Univariate Distribution of x-coordinates - y : Univariate + y : openmc.stats.Univariate Distribution of y-coordinates - z : Univariate + z : openmc.stats.Univariate Distribution of z-coordinates Attributes ---------- - x : Univariate + x : openmc.stats.Univariate Distribution of x-coordinates - y : Univariate + y : openmc.stats.Univariate Distribution of y-coordinates - z : Univariate + z : openmc.stats.Univariate Distribution of z-coordinates """ @@ -252,9 +252,9 @@ class Box(Spatial): Parameters ---------- - lower_left : Iterable of Real + lower_left : Iterable of float Lower-left coordinates of cuboid - upper_right : Iterable of Real + upper_right : Iterable of float Upper-right coordinates of cuboid only_fissionable : bool, optional Whether spatial sites should only be accepted if they occur in @@ -262,9 +262,9 @@ class Box(Spatial): Attributes ---------- - lower_left : Iterable of Real + lower_left : Iterable of float Lower-left coordinates of cuboid - upper_right : Iterable of Real + upper_right : Iterable of float Upper-right coordinates of cuboid only_fissionable : bool, optional Whether spatial sites should only be accepted if they occur in @@ -328,12 +328,12 @@ class Point(Spatial): Parameters ---------- - xyz : Iterable of Real + xyz : Iterable of float Cartesian coordinates of location Attributes ---------- - xyz : Iterable of Real + xyz : Iterable of float Cartesian coordinates of location """ diff --git a/openmc/stats/univariate.py b/openmc/stats/univariate.py index 04e70bd004..0deeb600c4 100644 --- a/openmc/stats/univariate.py +++ b/openmc/stats/univariate.py @@ -37,16 +37,16 @@ class Discrete(Univariate): Parameters ---------- - x : Iterable of Real + x : Iterable of float Values of the random variable - p : Iterable of Real + p : Iterable of float Discrete probability for each value Attributes ---------- - x : Iterable of Real + x : Iterable of float Values of the random variable - p : Iterable of Real + p : Iterable of float Discrete probability for each value """ @@ -243,9 +243,9 @@ class Tabular(Univariate): Parameters ---------- - x : Iterable of Real + x : Iterable of float Tabulated values of the random variable - p : Iterable of Real + p : Iterable of float Tabulated probabilities interpolation : {'histogram', 'linear-linear'}, optional Indicate whether the density function is constant between tabulated @@ -253,9 +253,9 @@ class Tabular(Univariate): Attributes ---------- - x : Iterable of Real + x : Iterable of float Tabulated values of the random variable - p : Iterable of Real + p : Iterable of float Tabulated probabilities interpolation : {'histogram', 'linear-linear'}, optional Indicate whether the density function is constant between tabulated diff --git a/openmc/summary.py b/openmc/summary.py index b8f92664f9..9b1c451f39 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -584,7 +584,7 @@ class Summary(object): Returns ------- - material : openmc.material.Material + material : openmc.Material Material with given id """ @@ -605,7 +605,7 @@ class Summary(object): Returns ------- - surface : openmc.surface.Surface + surface : openmc.Surface Surface with given id """ @@ -626,7 +626,7 @@ class Summary(object): Returns ------- - cell : openmc.universe.Cell + cell : openmc.Cell Cell with given id """ @@ -647,7 +647,7 @@ class Summary(object): Returns ------- - universe : openmc.universe.Universe + universe : openmc.Universe Universe with given id """ @@ -668,7 +668,7 @@ class Summary(object): Returns ------- - lattice : openmc.universe.Lattice + lattice : openmc.Lattice Lattice with given id """ diff --git a/openmc/surface.py b/openmc/surface.py index 8dc45209be..5b0b1a7b59 100644 --- a/openmc/surface.py +++ b/openmc/surface.py @@ -153,10 +153,10 @@ class Surface(object): Returns ------- - numpy.array + numpy.ndarray Lower-left coordinates of the axis-aligned bounding box for the desired half-space - numpy.array + numpy.ndarray Upper-right coordinates of the axis-aligned bounding box for the desired half-space @@ -338,10 +338,10 @@ class XPlane(Plane): Returns ------- - numpy.array + numpy.ndarray Lower-left coordinates of the axis-aligned bounding box for the desired half-space - numpy.array + numpy.ndarray Upper-right coordinates of the axis-aligned bounding box for the desired half-space @@ -416,10 +416,10 @@ class YPlane(Plane): Returns ------- - numpy.array + numpy.ndarray Lower-left coordinates of the axis-aligned bounding box for the desired half-space - numpy.array + numpy.ndarray Upper-right coordinates of the axis-aligned bounding box for the desired half-space @@ -494,10 +494,10 @@ class ZPlane(Plane): Returns ------- - numpy.array + numpy.ndarray Lower-left coordinates of the axis-aligned bounding box for the desired half-space - numpy.array + numpy.ndarray Upper-right coordinates of the axis-aligned bounding box for the desired half-space @@ -641,10 +641,10 @@ class XCylinder(Cylinder): Returns ------- - numpy.array + numpy.ndarray Lower-left coordinates of the axis-aligned bounding box for the desired half-space - numpy.array + numpy.ndarray Upper-right coordinates of the axis-aligned bounding box for the desired half-space @@ -740,10 +740,10 @@ class YCylinder(Cylinder): Returns ------- - numpy.array + numpy.ndarray Lower-left coordinates of the axis-aligned bounding box for the desired half-space - numpy.array + numpy.ndarray Upper-right coordinates of the axis-aligned bounding box for the desired half-space @@ -839,10 +839,10 @@ class ZCylinder(Cylinder): Returns ------- - numpy.array + numpy.ndarray Lower-left coordinates of the axis-aligned bounding box for the desired half-space - numpy.array + numpy.ndarray Upper-right coordinates of the axis-aligned bounding box for the desired half-space @@ -967,10 +967,10 @@ class Sphere(Surface): Returns ------- - numpy.array + numpy.ndarray Lower-left coordinates of the axis-aligned bounding box for the desired half-space - numpy.array + numpy.ndarray Upper-right coordinates of the axis-aligned bounding box for the desired half-space @@ -1383,7 +1383,7 @@ class Halfspace(Region): can be created from an existing Surface through the __neg__ and __pos__ operators, as the following example demonstrates: - >>> sphere = openmc.surface.Sphere(surface_id=1, R=10.0) + >>> sphere = openmc.Sphere(surface_id=1, R=10.0) >>> inside_sphere = -sphere >>> outside_sphere = +sphere >>> type(inside_sphere) @@ -1391,18 +1391,18 @@ class Halfspace(Region): Parameters ---------- - surface : Surface + surface : openmc.Surface Surface which divides Euclidean space. side : {'+', '-'} Indicates whether the positive or negative half-space is used. Attributes ---------- - surface : Surface + surface : openmc.Surface Surface which divides Euclidean space. side : {'+', '-'} Indicates whether the positive or negative half-space is used. - bounding_box : tuple of numpy.array + bounding_box : tuple of numpy.ndarray Lower-left and upper-right coordinates of an axis-aligned bounding box """ diff --git a/openmc/tallies.py b/openmc/tallies.py index 1e47811e34..2ee03c6752 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -51,7 +51,7 @@ class Tally(object): Parameters ---------- - tally_id : Integral, optional + tally_id : int, optional Unique identifier for the tally. If none is specified, an identifier will automatically be assigned name : str, optional @@ -59,43 +59,43 @@ class Tally(object): Attributes ---------- - id : Integral + id : int Unique identifier for the tally name : str Name of the tally - filters : list of openmc.filter.Filter + filters : list of openmc.Filter List of specified filters for the tally - nuclides : list of openmc.nuclide.Nuclide + nuclides : list of openmc.Nuclide List of nuclides to score results for scores : list of str List of defined scores, e.g. 'flux', 'fission', etc. estimator : {'analog', 'tracklength', 'collision'} Type of estimator for the tally - triggers : list of openmc.trigger.Trigger + triggers : list of openmc.Trigger List of tally triggers - num_scores : Integral + num_scores : int Total number of scores, accounting for the fact that a single user-specified score, e.g. scatter-P3 or flux-Y2,2, might have multiple bins - num_filter_bins : Integral + num_filter_bins : int Total number of filter bins accounting for all filters - num_bins : Integral + num_bins : int Total number of bins for the tally - shape : 3-tuple of Integral + shape : 3-tuple of int The shape of the tally data array ordered as the number of filter bins, nuclide bins and score bins - num_realizations : Integral + num_realizations : int Total number of realizations with_summary : bool Whether or not a Summary has been linked - sum : ndarray + sum : numpy.ndarray An array containing the sum of each independent realization for each bin - sum_sq : ndarray + sum_sq : numpy.ndarray An array containing the sum of each independent realization squared for each bin - mean : ndarray + mean : numpy.ndarray An array containing the sample mean for each bin - std_dev : ndarray + std_dev : numpy.ndarray An array containing the sample standard deviation for each bin derived : bool Whether or not the tally is derived from one or more other tallies @@ -444,7 +444,7 @@ class Tally(object): Parameters ---------- - trigger : openmc.trigger.Trigger + trigger : openmc.Trigger Trigger to add """ @@ -688,7 +688,7 @@ class Tally(object): Parameters ---------- - old_filter : openmc.filter.Filter + old_filter : openmc.Filter Filter to remove """ @@ -705,7 +705,7 @@ class Tally(object): Parameters ---------- - nuclide : openmc.nuclide.Nuclide + nuclide : openmc.Nuclide Nuclide to remove """ @@ -727,7 +727,7 @@ class Tally(object): Parameters ---------- - other : Tally + other : openmc.Tally Tally to check for mergeable filters """ @@ -780,7 +780,7 @@ class Tally(object): Parameters ---------- - other : Tally + other : openmc.Tally Tally to check for mergeable nuclides """ @@ -817,7 +817,7 @@ class Tally(object): Parameters ---------- - other : Tally + other : openmc.Tally Tally to check for mergeable scores """ @@ -858,7 +858,7 @@ class Tally(object): Parameters ---------- - other : Tally + other : openmc.Tally Tally to check for merging """ @@ -903,12 +903,12 @@ class Tally(object): Parameters ---------- - other : Tally + other : openmc.Tally Tally to merge with this one Returns ------- - merged_tally : Tally + merged_tally : openmc.Tally Merged tallies """ @@ -1151,7 +1151,7 @@ class Tally(object): Returns ------- - filter_found : openmc.filter.Filter + filter_found : openmc.Filter Filter from this tally with matching type, or None if no matching Filter is found @@ -1185,7 +1185,7 @@ class Tally(object): ---------- filter_type : str The type of Filter (e.g., 'cell', 'energy', etc.) - filter_bin : Integral or tuple + filter_bin : int or tuple The bin is an integer ID for 'material', 'surface', 'cell', 'cellborn', and 'universe' Filters. The bin is an integer for the cell instance ID for 'distribcell' Filters. The bin is a 2-tuple of @@ -1311,7 +1311,7 @@ class Tally(object): Returns ------- - ndarray + numpy.ndarray A NumPy array of the filter indices """ @@ -1393,7 +1393,7 @@ class Tally(object): Returns ------- - ndarray + numpy.ndarray A NumPy array of the nuclide indices """ @@ -1427,7 +1427,7 @@ class Tally(object): Returns ------- - ndarray + numpy.ndarray A NumPy array of the score indices """ @@ -1489,7 +1489,7 @@ class Tally(object): Returns ------- - float or ndarray + float or numpy.ndarray A scalar or NumPy array of the Tally data indexed in the order each filter, nuclide and score is listed in the parameters. @@ -1557,13 +1557,13 @@ class Tally(object): Include columns with nuclide bin information (default is True). scores : bool Include columns with score bin information (default is True). - summary : None or Summary + summary : None or openmc.Summary An optional Summary object to be used to construct columns for distribcell tally filters (default is None). The geometric information in the Summary object is embedded into a Multi-index column with a geometric "path" to each distribcell intance. NOTE: This option requires the OpenCG Python package. - float_format : string + float_format : str All floats in the DataFrame will be formatted using the given format string before printing. @@ -1683,8 +1683,8 @@ class Tally(object): The tally data in OpenMC is stored as a 3D array with the dimensions corresponding to filters, nuclides and scores. As a result, tally data - can be opaque for a user to directly index (i.e., without use of the - Tally.get_values(...) method) since one must know how to properly use + can be opaque for a user to directly index (i.e., without use of + :meth:`openmc.Tally.get_values`) since one must know how to properly use the number of bins and strides for each filter to index into the first (filter) dimension. @@ -1704,7 +1704,7 @@ class Tally(object): Returns ------- - ndarray + numpy.ndarray The tally data array indexed by filters, nuclides and scores. """ @@ -1882,7 +1882,7 @@ class Tally(object): Parameters ---------- - other : Tally + other : openmc.Tally The tally on the right hand side of the hybrid product binary_op : {'+', '-', '*', '/', '^'} The binary operation in the hybrid product @@ -1904,7 +1904,7 @@ class Tally(object): Returns ------- - Tally + openmc.Tally A new Tally that is the hybrid product with this one. Raises @@ -2082,7 +2082,7 @@ class Tally(object): Parameters ---------- - other : Tally + other : openmc.Tally The tally to outer product with this tally filter_product : {'entrywise'} The type of product to be performed between filter data. Currently, @@ -2464,12 +2464,12 @@ class Tally(object): Parameters ---------- - other : Tally or Real + other : openmc.Tally or float The tally or scalar value to add to this tally Returns ------- - Tally + openmc.Tally A new derived tally which is the sum of this tally and the other tally or scalar value in the addition. @@ -2536,12 +2536,12 @@ class Tally(object): Parameters ---------- - other : Tally or Real + other : openmc.Tally or float The tally or scalar value to subtract from this tally Returns ------- - Tally + openmc.Tally A new derived tally which is the difference of this tally and the other tally or scalar value in the subtraction. @@ -2608,12 +2608,12 @@ class Tally(object): Parameters ---------- - other : Tally or Real + other : openmc.Tally or float The tally or scalar value to multiply with this tally Returns ------- - Tally + openmc.Tally A new derived tally which is the product of this tally and the other tally or scalar value in the multiplication. @@ -2680,12 +2680,12 @@ class Tally(object): Parameters ---------- - other : Tally or Real + other : openmc.Tally or float The tally or scalar value to divide this tally by Returns ------- - Tally + openmc.Tally A new derived tally which is the dividend of this tally and the other tally or scalar value in the division. @@ -2755,12 +2755,12 @@ class Tally(object): Parameters ---------- - power : Tally or Real + power : openmc.Tally or float The tally or scalar value exponent Returns ------- - Tally + openmc.Tally A new derived tally which is this tally raised to the power of the other tally or scalar value in the exponentiation. @@ -2816,12 +2816,12 @@ class Tally(object): Parameters ---------- - other : Integer or Real + other : float The scalar value to add to this tally Returns ------- - Tally + openmc.Tally A new derived tally of this tally added with the scalar value. """ @@ -2835,12 +2835,12 @@ class Tally(object): Parameters ---------- - other : Integer or Real + other : float The scalar value to subtract this tally from Returns ------- - Tally + openmc.Tally A new derived tally of this tally subtracted from the scalar value. """ @@ -2854,12 +2854,12 @@ class Tally(object): Parameters ---------- - other : Integer or Real + other : float The scalar value to multiply with this tally Returns ------- - Tally + openmc.Tally A new derived tally of this tally multiplied by the scalar value. """ @@ -2873,12 +2873,12 @@ class Tally(object): Parameters ---------- - other : Integer or Real + other : float The scalar value to divide by this tally Returns ------- - Tally + openmc.Tally A new derived tally of the scalar value divided by this tally. """ @@ -2890,7 +2890,7 @@ class Tally(object): Returns ------- - Tally + openmc.Tally A new derived tally which is the absolute value of this tally. """ @@ -2904,7 +2904,7 @@ class Tally(object): Returns ------- - Tally + openmc.Tally A new derived tally which is the negated value of this tally. """ @@ -2946,7 +2946,7 @@ class Tally(object): Returns ------- - Tally + openmc.Tally A new tally which encapsulates the subset of data requested in the order each filter, nuclide and score is listed in the parameters. @@ -3069,7 +3069,7 @@ class Tally(object): filter_type : str A filter type string (e.g., 'cell', 'energy') corresponding to the filter bins to sum across - filter_bins : Iterable of Integral or tuple + filter_bins : Iterable of int or tuple A list of the filter bins corresponding to the filter_type parameter Each bin in the list is the integer ID for 'material', 'surface', 'cell', 'cellborn', and 'universe' Filters. Each bin is an integer @@ -3087,7 +3087,7 @@ class Tally(object): Returns ------- - Tally + openmc.Tally A new tally which encapsulates the sum of data requested. """ @@ -3217,7 +3217,7 @@ class Tally(object): filter_type : str A filter type string (e.g., 'cell', 'energy') corresponding to the filter bins to average across - filter_bins : Iterable of Integral or tuple + filter_bins : Iterable of int or tuple A list of the filter bins corresponding to the filter_type parameter Each bin in the list is the integer ID for 'material', 'surface', 'cell', 'cellborn', and 'universe' Filters. Each bin is an integer @@ -3235,7 +3235,7 @@ class Tally(object): Returns ------- - Tally + openmc.Tally A new tally which encapsulates the average of data requested. """ @@ -3368,7 +3368,7 @@ class Tally(object): Returns ------- - Tally + openmc.Tally A new derived Tally with data diagaonalized along the new filter. """ @@ -3444,9 +3444,8 @@ class TalliesFile(object): Parameters ---------- - tally : Tally + tally : openmc.Tally Tally to add to file - merge : bool Indicate whether the tally should be merged with an existing tally, if possible. Defaults to False. @@ -3483,7 +3482,7 @@ class TalliesFile(object): Parameters ---------- - tally : Tally + tally : openmc.Tally Tally to remove """ @@ -3519,7 +3518,7 @@ class TalliesFile(object): Parameters ---------- - mesh : openmc.mesh.Mesh + mesh : openmc.Mesh Mesh to add to the file """ @@ -3535,7 +3534,7 @@ class TalliesFile(object): Parameters ---------- - mesh : openmc.mesh.Mesh + mesh : openmc.Mesh Mesh to remove from the file """ diff --git a/openmc/universe.py b/openmc/universe.py index 09f5470426..ebc2eced42 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -43,7 +43,7 @@ class Universe(object): Unique identifier of the universe name : str Name of the universe - cells : dict + cells : collections.OrderedDict Dictionary whose keys are cell IDs and values are Cell instances """ @@ -126,7 +126,7 @@ class Universe(object): Parameters ---------- - cell : Cell + cell : openmc.Cell Cell to add """ @@ -146,7 +146,7 @@ class Universe(object): Parameters ---------- - cells : array-like of Cell + cells : Iterable of openmc.Cell Cells to add """ @@ -164,7 +164,7 @@ class Universe(object): Parameters ---------- - cell : Cell + cell : openmc.Cell Cell to remove """ @@ -209,7 +209,7 @@ class Universe(object): Returns ------- - nuclides : dict + nuclides : collections.OrderedDict Dictionary whose keys are nuclide names and values are 2-tuples of (nuclide, density) @@ -228,7 +228,7 @@ class Universe(object): Returns ------- - cells : dict + cells : collections.OrderedDict Dictionary whose keys are cell IDs and values are Cell instances """ @@ -249,7 +249,7 @@ class Universe(object): Returns ------- - materials : dict + materials : Collections.OrderedDict Dictionary whose keys are material IDs and values are Material instances """ @@ -268,7 +268,7 @@ class Universe(object): Returns ------- - universes : dict + universes : collections.OrderedDict Dictionary whose keys are universe IDs and values are Universe instances From 0339809deb8045c8a9132ea16d20ea44004ba177 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 14 Apr 2016 07:58:06 -0500 Subject: [PATCH 440/650] Fix imports in cell and lattice modules --- openmc/cell.py | 9 ++++----- openmc/lattice.py | 2 ++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/openmc/cell.py b/openmc/cell.py index c138f30442..cf247963a2 100644 --- a/openmc/cell.py +++ b/openmc/cell.py @@ -9,7 +9,6 @@ import openmc.checkvalue as cv from openmc.surface import Halfspace from openmc.region import Region, Intersection, Complement - if sys.version_info[0] >= 3: basestring = str @@ -112,7 +111,7 @@ class Cell(object): string += ', '.join(['void' if m == 'void' else str(m.id) for m in self.fill]) string += ']\n' - elif isinstance(self._fill, (Universe, Lattice)): + elif isinstance(self._fill, (openmc.Universe, openmc.Lattice)): string += '{0: <16}{1}{2}\n'.format('\tFill', '=\t', self._fill._id) else: @@ -210,10 +209,10 @@ class Cell(object): (openmc.Material, basestring)) self._type = 'normal' - elif isinstance(fill, Universe): + elif isinstance(fill, openmc.Universe): self._type = 'fill' - elif isinstance(fill, Lattice): + elif isinstance(fill, openmc.Lattice): self._type = 'lattice' else: @@ -407,7 +406,7 @@ class Cell(object): element.set("material", ' '.join([m if m == 'void' else str(m.id) for m in self.fill])) - elif isinstance(self.fill, (Universe, Lattice)): + elif isinstance(self.fill, (openmc.Universe, openmc.Lattice)): element.set("fill", str(self.fill.id)) self.fill.create_xml_subelement(xml_element) diff --git a/openmc/lattice.py b/openmc/lattice.py index 6417eef3cf..1b478e5374 100644 --- a/openmc/lattice.py +++ b/openmc/lattice.py @@ -1,10 +1,12 @@ import abc from collections import OrderedDict, Iterable from numbers import Real, Integral +from xml.etree import ElementTree as ET import sys import numpy as np +import openmc.checkvalue as cv from openmc.universe import Universe, AUTO_UNIVERSE_ID if sys.version_info[0] >= 3: From fa1ca340944312acb0c0f2051433326ba06b2089 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 14 Apr 2016 15:57:59 -0500 Subject: [PATCH 441/650] Respond to @wbinventor comments on #626 --- docs/source/pythonapi/index.rst | 18 ++++++++++++------ openmc/__init__.py | 1 - openmc/cell.py | 15 +++++++-------- openmc/filter.py | 2 +- openmc/lattice.py | 22 ++++++++++++---------- openmc/mgxs/mgxs.py | 4 ++-- openmc/surface.py | 9 +++------ openmc/universe.py | 13 ++++++++----- 8 files changed, 45 insertions(+), 39 deletions(-) diff --git a/docs/source/pythonapi/index.rst b/docs/source/pythonapi/index.rst index 3e0d8a418c..9fd70cb5a2 100644 --- a/docs/source/pythonapi/index.rst +++ b/docs/source/pythonapi/index.rst @@ -74,6 +74,7 @@ Building geometry :nosignatures: :template: myclass.rst + openmc.Plane openmc.XPlane openmc.YPlane openmc.ZPlane @@ -81,6 +82,11 @@ Building geometry openmc.YCylinder openmc.ZCylinder openmc.Sphere + openmc.Cone + openmc.XCone + openmc.YCone + openmc.ZCone + openmc.Quadric openmc.Halfspace openmc.Intersection openmc.Union @@ -168,12 +174,12 @@ Various classes may be created when performing tally slicing and/or arithmetic: :nosignatures: :template: myclass.rst - openmc.CrossScore - openmc.CrossNuclide - openmc.CrossFilter - openmc.AggregateScore - openmc.AggregateNuclide - openmc.AggregateFilter + openmc.arithmetic.CrossScore + openmc.arithmetic.CrossNuclide + openmc.arithmetic.CrossFilter + openmc.arithmetic.AggregateScore + openmc.arithmetic.AggregateNuclide + openmc.arithmetic.AggregateFilter --------------------------------- :mod:`openmc.stats` -- Statistics diff --git a/openmc/__init__.py b/openmc/__init__.py index b6a93c0a41..0bde0f5843 100644 --- a/openmc/__init__.py +++ b/openmc/__init__.py @@ -21,7 +21,6 @@ from openmc.summary import * from openmc.region import * from openmc.source import * from openmc.particle_restart import * -from openmc.arithmetic import * try: from openmc.opencg_compatible import * diff --git a/openmc/cell.py b/openmc/cell.py index cf247963a2..ed1f3178bf 100644 --- a/openmc/cell.py +++ b/openmc/cell.py @@ -13,7 +13,6 @@ if sys.version_info[0] >= 3: basestring = str - # A static variable for auto-generated Cell IDs AUTO_CELL_ID = 10000 @@ -23,8 +22,6 @@ def reset_auto_cell_id(): AUTO_CELL_ID = 10000 - - class Cell(object): """A region of space defined as the intersection of half-space created by quadric surfaces. @@ -81,7 +78,7 @@ class Cell(object): elif self.name != other.name: return False elif self.fill != other.fill: - return False + return False elif self.region != other.region: return False elif self.rotation != other.rotation: @@ -335,7 +332,8 @@ class Cell(object): Returns ------- cells : dict - Dictionary whose keys are cell IDs and values are Cell instances + Dictionary whose keys are cell IDs and values are :class:`Cell` + instances """ @@ -352,7 +350,8 @@ class Cell(object): Returns ------- materials : dict - Dictionary whose keys are material IDs and values are Material instances + Dictionary whose keys are material IDs and values are + :class:`Material` instances """ @@ -374,8 +373,8 @@ class Cell(object): Returns ------- universes : dict - Dictionary whose keys are universe IDs and values are Universe - instances + Dictionary whose keys are universe IDs and values are + :class:`Universe` instances """ diff --git a/openmc/filter.py b/openmc/filter.py index 037062a4ca..249bdcc029 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -520,7 +520,7 @@ class Filter(object): This method constructs a Pandas DataFrame object for the filter with columns annotated by filter bin information. This is a helper method for - :math:`Tally.get_pandas_dataframe`. + :meth:`Tally.get_pandas_dataframe`. This capability has been tested for Pandas >=0.13.1. However, it is recommended to use v0.16 or newer versions of Pandas since this method diff --git a/openmc/lattice.py b/openmc/lattice.py index 1b478e5374..7e78abf068 100644 --- a/openmc/lattice.py +++ b/openmc/lattice.py @@ -126,8 +126,8 @@ class Lattice(object): Returns ------- universes : collections.OrderedDict - Dictionary whose keys are universe IDs and values are Universe - instances + Dictionary whose keys are universe IDs and values are + :class:`Universe` instances """ @@ -176,7 +176,8 @@ class Lattice(object): Returns ------- cells : collections.OrderedDict - Dictionary whose keys are cell IDs and values are Cell instances + Dictionary whose keys are cell IDs and values are :class:`Cell` + instances """ @@ -194,7 +195,8 @@ class Lattice(object): Returns ------- materials : collections.OrderedDict - Dictionary whose keys are material IDs and values are Material instances + Dictionary whose keys are material IDs and values are + :class:`Material` instances """ @@ -213,8 +215,8 @@ class Lattice(object): Returns ------- universes : collections.OrderedDict - Dictionary whose keys are universe IDs and values are Universe - instances + Dictionary whose keys are universe IDs and values are + :class:`Universe` instances """ @@ -252,10 +254,10 @@ class RectLattice(Lattice): Unique identifier for the lattice name : str Name of the lattice - dimension : array-like of int + dimension : Iterable of int An array of two or three integers representing the number of lattice cells in the x- and y- (and z-) directions, respectively. - lower_left : array-like of float + lower_left : Iterable of float The coordinates of the lower-left corner of the lattice. If the lattice is two-dimensional, only the x- and y-coordinates are specified. @@ -501,7 +503,7 @@ class HexLattice(Lattice): Number of radial ring positions in the xy-plane num_axial : int Number of positions along the z-axis. - center : array-like of float + center : Iterable of float Coordinates of the center of the lattice. If the lattice does not have axial sections then only the x- and y-coordinates are specified @@ -777,7 +779,7 @@ class HexLattice(Lattice): id_form = '{: ^' + str(n_digits) + 'd}' # Initialize the list for each row. - rows = [ [] for i in range(1 + 4 * (self._num_rings-1)) ] + rows = [[] for i in range(1 + 4 * (self._num_rings-1))] middle = 2 * (self._num_rings - 1) # Start with the degenerate first ring. diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index a9a58b957f..0c3612e9f8 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1349,7 +1349,7 @@ class MGXS(object): xs_type='macro', summary=None): """Build a Pandas DataFrame for the MGXS data. - This method leverages :math:`openmc.Tally.get_pandas_dataframe`, but + This method leverages :meth:`openmc.Tally.get_pandas_dataframe`, but renames the columns with terminology appropriate for cross section data. Parameters @@ -2560,7 +2560,7 @@ class Chi(MGXS): xs_type='macro', summary=None): """Build a Pandas DataFrame for the MGXS data. - This method leverages :math:`openmc.Tally.get_pandas_dataframe`, but + This method leverages :meth:`openmc.Tally.get_pandas_dataframe`, but renames the columns with terminology appropriate for cross section data. Parameters diff --git a/openmc/surface.py b/openmc/surface.py index 5b0b1a7b59..5c8b208564 100644 --- a/openmc/surface.py +++ b/openmc/surface.py @@ -278,8 +278,7 @@ class Plane(Surface): class XPlane(Plane): - """A plane perpendicular to the x axis, i.e. a surface of the form :math:`x - - x_0 = 0` + """A plane perpendicular to the x axis of the form :math:`x - x_0 = 0` Parameters ---------- @@ -356,8 +355,7 @@ class XPlane(Plane): class YPlane(Plane): - """A plane perpendicular to the y axis, i.e. a surface of the form :math:`y - - y_0 = 0` + """A plane perpendicular to the y axis of the form :math:`y - y_0 = 0` Parameters ---------- @@ -434,8 +432,7 @@ class YPlane(Plane): class ZPlane(Plane): - """A plane perpendicular to the z axis, i.e. a surface of the form :math:`z - - z_0 = 0` + """A plane perpendicular to the z axis of the form :math:`z - z_0 = 0` Parameters ---------- diff --git a/openmc/universe.py b/openmc/universe.py index ebc2eced42..eb6d13233a 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -44,7 +44,8 @@ class Universe(object): name : str Name of the universe cells : collections.OrderedDict - Dictionary whose keys are cell IDs and values are Cell instances + Dictionary whose keys are cell IDs and values are :class:`Cell` + instances """ @@ -229,7 +230,8 @@ class Universe(object): Returns ------- cells : collections.OrderedDict - Dictionary whose keys are cell IDs and values are Cell instances + Dictionary whose keys are cell IDs and values are :class:`Cell` + instances """ @@ -250,7 +252,8 @@ class Universe(object): Returns ------- materials : Collections.OrderedDict - Dictionary whose keys are material IDs and values are Material instances + Dictionary whose keys are material IDs and values are + :class:`Material` instances """ @@ -269,8 +272,8 @@ class Universe(object): Returns ------- universes : collections.OrderedDict - Dictionary whose keys are universe IDs and values are Universe - instances + Dictionary whose keys are universe IDs and values are + :class:`Universe` instances """ From 9b4d4af21815b2d1eb6b40042ebe3d5e9529e331 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 15 Apr 2016 09:00:36 -0500 Subject: [PATCH 442/650] Add sphinx.ext.viewcode extension for docs --- docs/source/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/conf.py b/docs/source/conf.py index 3bf5b0b1e1..38661cdb37 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -44,6 +44,7 @@ extensions = ['sphinx.ext.autodoc', 'sphinx.ext.mathjax', 'sphinx.ext.autosummary', 'sphinx.ext.intersphinx', + 'sphinx.ext.viewcode', 'sphinx_numfig', 'notebook_sphinxext'] From f5f12b045ecac2bb2a957ce3802dae88ebccf4d8 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Wed, 20 Apr 2016 19:13:55 -0400 Subject: [PATCH 443/650] Hotfix for OpenCG compatibility module to properly handle ZSquarePrism for @cjosey --- openmc/opencg_compatible.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/openmc/opencg_compatible.py b/openmc/opencg_compatible.py index d690c2c6a9..562fe9cadf 100644 --- a/openmc/opencg_compatible.py +++ b/openmc/opencg_compatible.py @@ -393,9 +393,9 @@ def get_compatible_opencg_surfaces(opencg_surface): surfaces = [left, right, bottom, top] elif opencg_surface.type == 'z-squareprism': - x0 = opencg_surface.x0['x0'] - y0 = opencg_surface.y0['y0'] - R = opencg_surface.r['R'] + x0 = opencg_surface.x0 + y0 = opencg_surface.y0 + R = opencg_surface.r # Create a list of the four planes we need left = opencg.XPlane(name=name, boundary=boundary, x0=x0-R) @@ -528,7 +528,7 @@ def get_compatible_opencg_cells(opencg_cell, opencg_surface, halfspace): # Get the compatible Surfaces (XPlanes and YPlanes) compatible_surfaces = get_compatible_opencg_surfaces(opencg_surface) - opencg_cell.removeSurface(opencg_surface) + opencg_cell.remove_surface(opencg_surface) # If Cell is inside SquarePrism, add "inside" of Surface halfspaces if halfspace == -1: @@ -595,7 +595,7 @@ def get_compatible_opencg_cells(opencg_cell, opencg_surface, halfspace): # Remove redundant Surfaces from the Cells for cell in compatible_cells: - cell.removeRedundantSurfaces() + cell.remove_redundant_surfaces() # Return the list of OpenMC compatible OpenCG Cells return compatible_cells @@ -639,7 +639,7 @@ def make_opencg_cells_compatible(opencg_universe): surface, halfspace) # Remove the non-compatible OpenCG Cell from the Universe - opencg_universe.removeCell(opencg_cell) + opencg_universe.remove_cell(opencg_cell) # Add the compatible OpenCG Cells to the Universe opencg_universe.add_cells(cells) From f622300b7fc3c9f991aace1b13ac2336ec53a59c Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 25 Apr 2016 08:29:36 -0500 Subject: [PATCH 444/650] Various improvements/fixes to Python API. Also fix MPI F08 binding issue. --- openmc/filter.py | 3 +- openmc/material.py | 35 +- openmc/plots.py | 4 +- openmc/surface.py | 588 ++++++++++-------- src/simulation.F90 | 2 +- tests/test_asymmetric_lattice/inputs_true.dat | 2 +- tests/test_distribmat/inputs_true.dat | 2 +- tests/test_iso_in_lab/inputs_true.dat | 2 +- tests/test_mg_basic/inputs_true.dat | 2 +- tests/test_mg_max_order/inputs_true.dat | 2 +- tests/test_mg_nuclide/inputs_true.dat | 2 +- tests/test_mg_tallies/inputs_true.dat | 2 +- .../inputs_true.dat | 2 +- .../inputs_true.dat | 2 +- tests/test_mgxs_library_hdf5/inputs_true.dat | 2 +- .../inputs_true.dat | 2 +- .../inputs_true.dat | 2 +- tests/test_tallies/inputs_true.dat | 2 +- tests/test_tally_aggregation/inputs_true.dat | 2 +- tests/test_tally_arithmetic/inputs_true.dat | 2 +- tests/test_tally_slice_merge/inputs_true.dat | 2 +- 21 files changed, 365 insertions(+), 299 deletions(-) diff --git a/openmc/filter.py b/openmc/filter.py index 249bdcc029..b0e59874b4 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -27,7 +27,8 @@ class Filter(object): type : str The type of the tally filter. Acceptable values are "universe", "material", "cell", "cellborn", "surface", "mesh", "energy", - "energyout", and "distribcell". + "energyout", "distribcell", "mu", "polar", "azimuthal", and + "delayedgroup". bins : Integral or Iterable of Integral or Iterable of Real The bins for the filter. This takes on different meaning for different filters. See the OpenMC online documentation for more details. diff --git a/openmc/material.py b/openmc/material.py index 2c04a9ecf2..16af82439b 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -25,9 +25,6 @@ def reset_auto_material_id(): DENSITY_UNITS = ['g/cm3', 'g/cc', 'kg/cm3', 'atom/b-cm', 'atom/cm3', 'sum', 'macro'] -# Constant for density when not needed -NO_DENSITY = 99999. - class Material(object): """A material composed of a collection of nuclides/elements that can be @@ -141,9 +138,9 @@ class Material(object): string += '{0: <16}\n'.format('\tElements') for element in self._elements: - percent = self._nuclides[element][1] - percent_type = self._nuclides[element][2] - string += '{0: >16}'.format('\t{0}'.format(element)) + percent = self._elements[element][1] + percent_type = self._elements[element][2] + string += '{0: <16}'.format('\t{0}'.format(element)) string += '=\t{0: <12} [{1}]\n'.format(percent, percent_type) return string @@ -218,13 +215,13 @@ class Material(object): else: self._name = '' - def set_density(self, units, density=NO_DENSITY): + def set_density(self, units, density=None): """Set the density of the material Parameters ---------- - units : str - Physical units of density + units : {'g/cm3', 'g/cc', 'km/cm3', 'atom/b-cm', 'atom/cm3', 'sum', 'macro'} + Physical units of density. density : float, optional Value of the density. Must be specified unless units is given as 'sum'. @@ -235,8 +232,8 @@ class Material(object): density, Real) check_value('density units', units, DENSITY_UNITS) - if density == NO_DENSITY and units is not 'sum': - msg = 'Unable to set the density Material ID="{0}" ' \ + if density is None and units is not 'sum': + msg = 'Unable to set the density for Material ID="{0}" ' \ 'because a density must be set when not using ' \ 'sum unit'.format(self._id) raise ValueError(msg) @@ -274,7 +271,7 @@ class Material(object): Nuclide to add percent : float Atom or weight percent - percent_type : str + percent_type : {'ao', 'wo'} 'ao' for atom percent and 'wo' for weight percent """ @@ -394,7 +391,7 @@ class Material(object): Element to add percent : float Atom or weight percent - percent_type : str + percent_type : {'ao', 'wo'} 'ao' for atom percent and 'wo' for weight percent """ @@ -420,7 +417,10 @@ class Material(object): raise ValueError(msg) # Copy this Element to separate it from same Element in other Materials - element = deepcopy(element) + if isinstance(element, openmc.Element): + element = deepcopy(element) + else: + element = openmc.Element(element) self._elements[element._name] = (element, percent, percent_type) @@ -498,7 +498,7 @@ class Material(object): xml_element.set("name", nuclide[0]._name) if not distrib: - if nuclide[2] is 'ao': + if nuclide[2] == 'ao': xml_element.set("ao", str(nuclide[1])) else: xml_element.set("wo", str(nuclide[1])) @@ -525,11 +525,14 @@ class Material(object): xml_element.set("name", str(element[0]._name)) if not distrib: - if element[2] is 'ao': + if element[2] == 'ao': xml_element.set("ao", str(element[1])) else: xml_element.set("wo", str(element[1])) + if element[0].xs is not None: + xml_element.set("xs", element[0].xs) + if not element[0].scattering is None: xml_element.set("scattering", element[0].scattering) diff --git a/openmc/plots.py b/openmc/plots.py index 6e78995f4d..5e7c47743e 100644 --- a/openmc/plots.py +++ b/openmc/plots.py @@ -125,7 +125,7 @@ class Plot(object): return self._background @property - def mask_componenets(self): + def mask_components(self): return self._mask_components @property @@ -227,7 +227,7 @@ class Plot(object): self._col_spec = col_spec - @mask_componenets.setter + @mask_components.setter def mask_components(self, mask_components): cv.check_type('plot mask_components', mask_components, Iterable, Integral) for component in mask_components: diff --git a/openmc/surface.py b/openmc/surface.py index 5c8b208564..c6f3f2cd0d 100644 --- a/openmc/surface.py +++ b/openmc/surface.py @@ -23,8 +23,7 @@ def reset_auto_surface_id(): class Surface(object): - """A two-dimensional surface that can be used define regions of space with an - associated boundary condition. + """A two-dimensional surface with an associated boundary condition. Parameters ---------- @@ -56,7 +55,6 @@ class Surface(object): """ def __init__(self, surface_id=None, boundary_type='transmission', name=''): - # Initialize class attributes self.id = surface_id self.name = name self._type = '' @@ -173,7 +171,8 @@ class Surface(object): element.set("name", str(self._name)) element.set("type", self._type) - element.set("boundary", self._boundary_type) + if self.boundary_type != 'transmission': + element.set("boundary", self.boundary_type) element.set("coeffs", ' '.join([str(self._coeffs.setdefault(key, 0.0)) for key in self._coeff_keys])) @@ -185,22 +184,22 @@ class Plane(Surface): Parameters ---------- - surface_id : int + surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. - A : float - The 'A' parameter for the plane - B : float - The 'B' parameter for the plane - C : float - The 'C' parameter for the plane - D : float - The 'D' parameter for the plane - name : str + A : float, optional + The 'A' parameter for the plane. Defaults to 1. + B : float, optional + The 'B' parameter for the plane. Defaults to 0. + C : float, optional + The 'C' parameter for the plane. Defaults to 0. + D : float, optional + The 'D' parameter for the plane. Defaults to 0. + name : str, optional Name of the plane. If not specified, the name will be the empty string. Attributes @@ -213,32 +212,30 @@ class Plane(Surface): The 'C' parameter for the plane d : float The 'D' parameter for the plane + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + Boundary condition that defines the behavior for particles hitting the + surface. + coeffs : dict + Dictionary of surface coefficients + id : int + Unique identifier for the surface + name : str + Name of the surface + type : str + Type of the surface, e.g. 'x-plane' """ def __init__(self, surface_id=None, boundary_type='transmission', - A=None, B=None, C=None, D=None, name=''): - # Initialize Plane class attributes + A=1., B=0., C=0., D=0., name=''): super(Plane, self).__init__(surface_id, boundary_type, name=name) self._type = 'plane' self._coeff_keys = ['A', 'B', 'C', 'D'] - self._coeffs['A'] = 1. - self._coeffs['B'] = 0. - self._coeffs['C'] = 0. - self._coeffs['D'] = 0. - - if A is not None: - self.a = A - - if B is not None: - self.b = B - - if C is not None: - self.c = C - - if D is not None: - self.d = D + self.a = A + self.b = B + self.c = C + self.d = D @property def a(self): @@ -282,36 +279,43 @@ class XPlane(Plane): Parameters ---------- - surface_id : int + surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. - x0 : float - Location of the plane - name : str + x0 : float, optional + Location of the plane. Defaults to 0. + name : str, optional Name of the plane. If not specified, the name will be the empty string. Attributes ---------- x0 : float Location of the plane + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + Boundary condition that defines the behavior for particles hitting the + surface. + coeffs : dict + Dictionary of surface coefficients + id : int + Unique identifier for the surface + name : str + Name of the surface + type : str + Type of the surface, e.g. 'x-plane' """ def __init__(self, surface_id=None, boundary_type='transmission', - x0=None, name=''): - # Initialize XPlane class attributes + x0=0., name=''): super(XPlane, self).__init__(surface_id, boundary_type, name=name) self._type = 'x-plane' self._coeff_keys = ['x0'] - self._coeffs['x0'] = 0. - - if x0 is not None: - self.x0 = x0 + self.x0 = x0 @property def x0(self): @@ -359,36 +363,44 @@ class YPlane(Plane): Parameters ---------- - surface_id : int + surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. - y0 : float + y0 : float, optional Location of the plane - name : str + name : str, optional Name of the plane. If not specified, the name will be the empty string. Attributes ---------- y0 : float Location of the plane + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + Boundary condition that defines the behavior for particles hitting the + surface. + coeffs : dict + Dictionary of surface coefficients + id : int + Unique identifier for the surface + name : str + Name of the surface + type : str + Type of the surface, e.g. 'x-plane' """ def __init__(self, surface_id=None, boundary_type='transmission', - y0=None, name=''): + y0=0., name=''): # Initialize YPlane class attributes super(YPlane, self).__init__(surface_id, boundary_type, name=name) self._type = 'y-plane' self._coeff_keys = ['y0'] - self._coeffs['y0'] = 0. - - if y0 is not None: - self.y0 = y0 + self.y0 = y0 @property def y0(self): @@ -436,36 +448,44 @@ class ZPlane(Plane): Parameters ---------- - surface_id : int + surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. - z0 : float - Location of the plane - name : str + z0 : float, optional + Location of the plane. Defaults to 0. + name : str, optional Name of the plane. If not specified, the name will be the empty string. Attributes ---------- z0 : float Location of the plane + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + Boundary condition that defines the behavior for particles hitting the + surface. + coeffs : dict + Dictionary of surface coefficients + id : int + Unique identifier for the surface + name : str + Name of the surface + type : str + Type of the surface, e.g. 'x-plane' """ def __init__(self, surface_id=None, boundary_type='transmission', - z0=None, name=''): + z0=0., name=''): # Initialize ZPlane class attributes super(ZPlane, self).__init__(surface_id, boundary_type, name=name) self._type = 'z-plane' self._coeff_keys = ['z0'] - self._coeffs['z0'] = 0. - - if z0 is not None: - self.z0 = z0 + self.z0 = z0 @property def z0(self): @@ -513,16 +533,16 @@ class Cylinder(Surface): Parameters ---------- - surface_id : int + surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. - R : float - Radius of the cylinder - name : str + R : float, optional + Radius of the cylinder. Defaults to 1. + name : str, optional Name of the cylinder. If not specified, the name will be the empty string. @@ -530,21 +550,28 @@ class Cylinder(Surface): ---------- r : float Radius of the cylinder + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + Boundary condition that defines the behavior for particles hitting the + surface. + coeffs : dict + Dictionary of surface coefficients + id : int + Unique identifier for the surface + name : str + Name of the surface + type : str + Type of the surface, e.g. 'x-plane' """ __metaclass__ = ABCMeta def __init__(self, surface_id=None, boundary_type='transmission', - R=None, name=''): - # Initialize Cylinder class attributes + R=1., name=''): super(Cylinder, self).__init__(surface_id, boundary_type, name=name) self._coeff_keys = ['R'] - self._coeffs['R'] = 1. - - if R is not None: - self.r = R + self.r = R @property def r(self): @@ -557,25 +584,25 @@ class Cylinder(Surface): class XCylinder(Cylinder): - """An infinite cylinder whose length is parallel to the x-axis. This is a - quadratic surface of the form :math:`(y - y_0)^2 + (z - z_0)^2 = R^2`. + """An infinite cylinder whose length is parallel to the x-axis of the form + :math:`(y - y_0)^2 + (z - z_0)^2 = R^2`. Parameters ---------- - surface_id : int + surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. - y0 : float - y-coordinate of the center of the cylinder - z0 : float - z-coordinate of the center of the cylinder - R : float - Radius of the cylinder - name : str + y0 : float, optional + y-coordinate of the center of the cylinder. Defaults to 0. + z0 : float, optional + z-coordinate of the center of the cylinder. Defaults to 0. + R : float, optional + Radius of the cylinder. Defaults to 0. + name : str, optional Name of the cylinder. If not specified, the name will be the empty string. @@ -585,24 +612,28 @@ class XCylinder(Cylinder): y-coordinate of the center of the cylinder z0 : float z-coordinate of the center of the cylinder + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + Boundary condition that defines the behavior for particles hitting the + surface. + coeffs : dict + Dictionary of surface coefficients + id : int + Unique identifier for the surface + name : str + Name of the surface + type : str + Type of the surface, e.g. 'x-plane' """ def __init__(self, surface_id=None, boundary_type='transmission', - y0=None, z0=None, R=None, name=''): - # Initialize XCylinder class attributes + y0=0., z0=0., R=1., name=''): super(XCylinder, self).__init__(surface_id, boundary_type, R, name=name) self._type = 'x-cylinder' self._coeff_keys = ['y0', 'z0', 'R'] - self._coeffs['y0'] = 0. - self._coeffs['z0'] = 0. - - if y0 is not None: - self.y0 = y0 - - if z0 is not None: - self.z0 = z0 + self.y0 = y0 + self.z0 = z0 @property def y0(self): @@ -656,25 +687,25 @@ class XCylinder(Cylinder): class YCylinder(Cylinder): - """An infinite cylinder whose length is parallel to the y-axis. This is a - quadratic surface of the form :math:`(x - x_0)^2 + (z - z_0)^2 = R^2`. + """An infinite cylinder whose length is parallel to the y-axis of the form + :math:`(x - x_0)^2 + (z - z_0)^2 = R^2`. Parameters ---------- - surface_id : int + surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. - x0 : float - x-coordinate of the center of the cylinder - z0 : float - z-coordinate of the center of the cylinder - R : float - Radius of the cylinder - name : str + x0 : float, optional + x-coordinate of the center of the cylinder. Defaults to 0. + z0 : float, optional + z-coordinate of the center of the cylinder. Defaults to 0. + R : float, optional + Radius of the cylinder. Defaults to 1. + name : str, optional Name of the cylinder. If not specified, the name will be the empty string. @@ -684,24 +715,28 @@ class YCylinder(Cylinder): x-coordinate of the center of the cylinder z0 : float z-coordinate of the center of the cylinder + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + Boundary condition that defines the behavior for particles hitting the + surface. + coeffs : dict + Dictionary of surface coefficients + id : int + Unique identifier for the surface + name : str + Name of the surface + type : str + Type of the surface, e.g. 'x-plane' """ def __init__(self, surface_id=None, boundary_type='transmission', - x0=None, z0=None, R=None, name=''): - # Initialize YCylinder class attributes + x0=0., z0=0., R=1., name=''): super(YCylinder, self).__init__(surface_id, boundary_type, R, name=name) self._type = 'y-cylinder' self._coeff_keys = ['x0', 'z0', 'R'] - self._coeffs['x0'] = 0. - self._coeffs['z0'] = 0. - - if x0 is not None: - self.x0 = x0 - - if z0 is not None: - self.z0 = z0 + self.x0 = x0 + self.z0 = z0 @property def x0(self): @@ -755,25 +790,25 @@ class YCylinder(Cylinder): class ZCylinder(Cylinder): - """An infinite cylinder whose length is parallel to the z-axis. This is a - quadratic surface of the form :math:`(x - x_0)^2 + (y - y_0)^2 = R^2`. + """An infinite cylinder whose length is parallel to the z-axis of the form + :math:`(x - x_0)^2 + (y - y_0)^2 = R^2`. Parameters ---------- - surface_id : int + surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. - x0 : float - x-coordinate of the center of the cylinder - y0 : float - y-coordinate of the center of the cylinder - R : float - Radius of the cylinder - name : str + x0 : float, optional + x-coordinate of the center of the cylinder. Defaults to 0. + y0 : float, optional + y-coordinate of the center of the cylinder. Defaults to 0. + R : float, optional + Radius of the cylinder. Defaults to 1. + name : str, optional Name of the cylinder. If not specified, the name will be the empty string. @@ -783,24 +818,28 @@ class ZCylinder(Cylinder): x-coordinate of the center of the cylinder y0 : float y-coordinate of the center of the cylinder + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + Boundary condition that defines the behavior for particles hitting the + surface. + coeffs : dict + Dictionary of surface coefficients + id : int + Unique identifier for the surface + name : str + Name of the surface + type : str + Type of the surface, e.g. 'x-plane' """ def __init__(self, surface_id=None, boundary_type='transmission', - x0=None, y0=None, R=None, name=''): - # Initialize ZCylinder class attributes + x0=0., y0=0., R=1., name=''): super(ZCylinder, self).__init__(surface_id, boundary_type, R, name=name) self._type = 'z-cylinder' self._coeff_keys = ['x0', 'y0', 'R'] - self._coeffs['x0'] = 0. - self._coeffs['y0'] = 0. - - if x0 is not None: - self.x0 = x0 - - if y0 is not None: - self.y0 = y0 + self.x0 = x0 + self.y0 = y0 @property def x0(self): @@ -858,22 +897,22 @@ class Sphere(Surface): Parameters ---------- - surface_id : int + surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. - x0 : float - x-coordinate of the center of the sphere - y0 : float - y-coordinate of the center of the sphere - z0 : float - z-coordinate of the center of the sphere - R : float - Radius of the sphere - name : str + x0 : float, optional + x-coordinate of the center of the sphere. Defaults to 0. + y0 : float, optional + y-coordinate of the center of the sphere. Defaults to 0. + z0 : float, optional + z-coordinate of the center of the sphere. Defaults to 0. + R : float, optional + Radius of the sphere. Defaults to 1. + name : str, optional Name of the sphere. If not specified, the name will be the empty string. Attributes @@ -886,32 +925,30 @@ class Sphere(Surface): z-coordinate of the center of the sphere R : float Radius of the sphere + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + Boundary condition that defines the behavior for particles hitting the + surface. + coeffs : dict + Dictionary of surface coefficients + id : int + Unique identifier for the surface + name : str + Name of the surface + type : str + Type of the surface, e.g. 'x-plane' """ def __init__(self, surface_id=None, boundary_type='transmission', - x0=None, y0=None, z0=None, R=None, name=''): - # Initialize Sphere class attributes + x0=0., y0=0., z0=0., R=1., name=''): super(Sphere, self).__init__(surface_id, boundary_type, name=name) self._type = 'sphere' self._coeff_keys = ['x0', 'y0', 'z0', 'R'] - self._coeffs['x0'] = 0. - self._coeffs['y0'] = 0. - self._coeffs['z0'] = 0. - self._coeffs['R'] = 1. - - if x0 is not None: - self.x0 = x0 - - if y0 is not None: - self.y0 = y0 - - if z0 is not None: - self.z0 = z0 - - if R is not None: - self.r = R + self.x0 = x0 + self.y0 = y0 + self.z0 = z0 + self.r = R @property def x0(self): @@ -988,21 +1025,21 @@ class Cone(Surface): Parameters ---------- - surface_id : int + surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. - x0 : float - x-coordinate of the apex + x0 : float, optional + x-coordinate of the apex. Defaults to 0. y0 : float - y-coordinate of the apex + y-coordinate of the apex. Defaults to 0. z0 : float - z-coordinate of the apex + z-coordinate of the apex. Defaults to 0. R2 : float - Parameter related to the aperature + Parameter related to the aperature. Defaults to 1. name : str Name of the cone. If not specified, the name will be the empty string. @@ -1016,33 +1053,31 @@ class Cone(Surface): z-coordinate of the apex R2 : float Parameter related to the aperature + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + Boundary condition that defines the behavior for particles hitting the + surface. + coeffs : dict + Dictionary of surface coefficients + id : int + Unique identifier for the surface + name : str + Name of the surface + type : str + Type of the surface, e.g. 'x-plane' """ __metaclass__ = ABCMeta def __init__(self, surface_id=None, boundary_type='transmission', - x0=None, y0=None, z0=None, R2=None, name=''): - # Initialize Cone class attributes + x0=0., y0=0., z0=0., R2=1., name=''): super(Cone, self).__init__(surface_id, boundary_type, name=name) self._coeff_keys = ['x0', 'y0', 'z0', 'R2'] - self._coeffs['x0'] = 0. - self._coeffs['y0'] = 0. - self._coeffs['z0'] = 0. - self._coeffs['R2'] = 1. - - if x0 is not None: - self.x0 = x0 - - if y0 is not None: - self.y0 = y0 - - if z0 is not None: - self.z0 = z0 - - if R2 is not None: - self.r2 = R2 + self.x0 = x0 + self.y0 = y0 + self.z0 = z0 + self.r2 = R2 @property def x0(self): @@ -1087,22 +1122,22 @@ class XCone(Cone): Parameters ---------- - surface_id : int + surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. - x0 : float - x-coordinate of the apex - y0 : float - y-coordinate of the apex - z0 : float - z-coordinate of the apex - R2 : float - Parameter related to the aperature - name : str + x0 : float, optional + x-coordinate of the apex. Defaults to 0. + y0 : float, optional + y-coordinate of the apex. Defaults to 0. + z0 : float, optional + z-coordinate of the apex. Defaults to 0. + R2 : float, optional + Parameter related to the aperature. Defaults to 1. + name : str, optional Name of the cone. If not specified, the name will be the empty string. Attributes @@ -1115,12 +1150,22 @@ class XCone(Cone): z-coordinate of the apex R2 : float Parameter related to the aperature + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + Boundary condition that defines the behavior for particles hitting the + surface. + coeffs : dict + Dictionary of surface coefficients + id : int + Unique identifier for the surface + name : str + Name of the surface + type : str + Type of the surface, e.g. 'x-plane' """ def __init__(self, surface_id=None, boundary_type='transmission', - x0=None, y0=None, z0=None, R2=None, name=''): - # Initialize XCone class attributes + x0=0., y0=0., z0=0., R2=1., name=''): super(XCone, self).__init__(surface_id, boundary_type, x0, y0, z0, R2, name=name) @@ -1133,22 +1178,22 @@ class YCone(Cone): Parameters ---------- - surface_id : int + surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. - x0 : float - x-coordinate of the apex - y0 : float - y-coordinate of the apex - z0 : float - z-coordinate of the apex - R2 : float - Parameter related to the aperature - name : str + x0 : float, optional + x-coordinate of the apex. Defaults to 0. + y0 : float, optional + y-coordinate of the apex. Defaults to 0. + z0 : float, optional + z-coordinate of the apex. Defaults to 0. + R2 : float, optional + Parameter related to the aperature. Defaults to 1. + name : str, optional Name of the cone. If not specified, the name will be the empty string. Attributes @@ -1161,12 +1206,22 @@ class YCone(Cone): z-coordinate of the apex R2 : float Parameter related to the aperature + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + Boundary condition that defines the behavior for particles hitting the + surface. + coeffs : dict + Dictionary of surface coefficients + id : int + Unique identifier for the surface + name : str + Name of the surface + type : str + Type of the surface, e.g. 'x-plane' """ def __init__(self, surface_id=None, boundary_type='transmission', - x0=None, y0=None, z0=None, R2=None, name=''): - # Initialize YCone class attributes + x0=0., y0=0., z0=0., R2=1., name=''): super(YCone, self).__init__(surface_id, boundary_type, x0, y0, z0, R2, name=name) @@ -1179,22 +1234,22 @@ class ZCone(Cone): Parameters ---------- - surface_id : int + surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. - x0 : float - x-coordinate of the apex - y0 : float - y-coordinate of the apex - z0 : float - z-coordinate of the apex - R2 : float - Parameter related to the aperature - name : str + x0 : float, optional + x-coordinate of the apex. Defaults to 0. + y0 : float, optional + y-coordinate of the apex. Defaults to 0. + z0 : float, optional + z-coordinate of the apex. Defaults to 0. + R2 : float, optional + Parameter related to the aperature. Defaults to 1. + name : str, optional Name of the cone. If not specified, the name will be the empty string. Attributes @@ -1207,12 +1262,22 @@ class ZCone(Cone): z-coordinate of the apex R2 : float Parameter related to the aperature + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + Boundary condition that defines the behavior for particles hitting the + surface. + coeffs : dict + Dictionary of surface coefficients + id : int + Unique identifier for the surface + name : str + Name of the surface + type : str + Type of the surface, e.g. 'x-plane' """ def __init__(self, surface_id=None, boundary_type='transmission', - x0=None, y0=None, z0=None, R2=None, name=''): - # Initialize ZCone class attributes + x0=0., y0=0., z0=0., R2=1., name=''): super(ZCone, self).__init__(surface_id, boundary_type, x0, y0, z0, R2, name=name) @@ -1220,61 +1285,58 @@ class ZCone(Cone): class Quadric(Surface): - """A sphere of the form :math:`Ax^2 + By^2 + Cz^2 + Dxy + Eyz + Fxz + Gx + Hy + - Jz + K`. + """A surface of the form :math:`Ax^2 + By^2 + Cz^2 + Dxy + Eyz + Fxz + Gx + Hy + + Jz + K = 0`. Parameters ---------- - surface_id : int + surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. - a, b, c, d, e, f, g, h, j, k : float - coefficients for the surface - name : str + a, b, c, d, e, f, g, h, j, k : float, optional + coefficients for the surface. All default to 0. + name : str, optional Name of the sphere. If not specified, the name will be the empty string. Attributes ---------- a, b, c, d, e, f, g, h, j, k : float coefficients for the surface + boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + Boundary condition that defines the behavior for particles hitting the + surface. + coeffs : dict + Dictionary of surface coefficients + id : int + Unique identifier for the surface + name : str + Name of the surface + type : str + Type of the surface, e.g. 'x-plane' """ def __init__(self, surface_id=None, boundary_type='transmission', - a=None, b=None, c=None, d=None, e=None, f=None, g=None, - h=None, j=None, k=None, name=''): - # Initialize Quadric class attributes + a=0., b=0., c=0., d=0., e=0., f=0., g=0., + h=0., j=0., k=0., name=''): super(Quadric, self).__init__(surface_id, boundary_type, name=name) self._type = 'quadric' self._coeff_keys = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k'] - for key in self._coeff_keys: - self._coeffs[key] = 0. - - if a is not None: - self.a = a - if b is not None: - self.b = b - if c is not None: - self.c = c - if d is not None: - self.d = d - if e is not None: - self.e = e - if f is not None: - self.f = f - if g is not None: - self.g = g - if h is not None: - self.h = h - if j is not None: - self.j = j - if k is not None: - self.k = k + self.a = a + self.b = b + self.c = c + self.d = d + self.e = e + self.f = f + self.g = g + self.h = h + self.j = j + self.k = k @property def a(self): diff --git a/src/simulation.F90 b/src/simulation.F90 index 41a28741c3..b762979d73 100644 --- a/src/simulation.F90 +++ b/src/simulation.F90 @@ -1,7 +1,7 @@ module simulation #ifdef MPI - use mpi + use message_passing #endif use cmfd_execute, only: cmfd_init_batch, execute_cmfd diff --git a/tests/test_asymmetric_lattice/inputs_true.dat b/tests/test_asymmetric_lattice/inputs_true.dat index e3b00b185c..f40e661b33 100644 --- a/tests/test_asymmetric_lattice/inputs_true.dat +++ b/tests/test_asymmetric_lattice/inputs_true.dat @@ -1 +1 @@ -b9b4222c4beea80fe6083590f6b785303d174972d80671fb661bac8e030db6f4a61648240cfad6162799361fc0e08a23c61d31aff844d978528d6dad5b5fbc63 \ No newline at end of file +9b859eb5501c05b6a652d299bd0cadc0a924ffae31117babbdc9f7f8ca87689322c275818eb0dde0ff5fa78317d8d8f1585b18dcc772e3ff4ed499de8a491dc3 \ No newline at end of file diff --git a/tests/test_distribmat/inputs_true.dat b/tests/test_distribmat/inputs_true.dat index fddab0a60d..9c8a86bfa7 100644 --- a/tests/test_distribmat/inputs_true.dat +++ b/tests/test_distribmat/inputs_true.dat @@ -1 +1 @@ -401b8be1b296db7f21ccae089c7ac480044d953b7264ca0ae8e34bb79e24cbb57195bcb568deda6f2f7e07366bbfac408a92306351b9169edd04499723707e1b \ No newline at end of file +96c54eb4f1da175445bf2187449ee32c9ff435d8c60e9421a4a16497aae9f233e3e494f531892dd55f6ac1a06e0240799503ff19e14e2436a0b0f0d83ba56cb8 \ No newline at end of file diff --git a/tests/test_iso_in_lab/inputs_true.dat b/tests/test_iso_in_lab/inputs_true.dat index 9a21b06f1f..bd722c9f67 100644 --- a/tests/test_iso_in_lab/inputs_true.dat +++ b/tests/test_iso_in_lab/inputs_true.dat @@ -1 +1 @@ -e0409e0660d58857a6a96ff5cb539ccc41c82f0e443e8081ee00bbee7b6c81b0ad43c870950ae37d4a18c329067b09479a27aa171c3a3f5771f53b384496fe61 \ No newline at end of file +85faac9b8c725ec9242ebc3793b70dcd1c8e58aeb4296345aefd8031304263bd66eaad0c6f1c61a1c644b73f397699856ab3d76d2b397295176650b4069acc9e \ No newline at end of file diff --git a/tests/test_mg_basic/inputs_true.dat b/tests/test_mg_basic/inputs_true.dat index fdbdb1c968..3f83de7600 100644 --- a/tests/test_mg_basic/inputs_true.dat +++ b/tests/test_mg_basic/inputs_true.dat @@ -1 +1 @@ -04b4a5099f0097bbe02983c67dea691d0d0d4ece7fb7c264b9b2c29955baa9e870b6fa999480da08ead1e5a0c078ae33ce1b0a5c8594ad465aedf9bf3933e104 \ No newline at end of file +2fdba76bad058eec6e43657692ef759de79c934076067d4ec5c9f2bdb131877e001f67e16b16bb14889e5e0a1ba84c780979b9d6772573aa6f82d979774c2af8 \ No newline at end of file diff --git a/tests/test_mg_max_order/inputs_true.dat b/tests/test_mg_max_order/inputs_true.dat index 1ad336e195..913f8200fb 100644 --- a/tests/test_mg_max_order/inputs_true.dat +++ b/tests/test_mg_max_order/inputs_true.dat @@ -1 +1 @@ -abe20c626d613e73ccb1a3f8468ad1b9aecca528afa9e8131a411d754eb86b8ab64a6fb1fdc9c0b8b8158ff7c82f548de5912041bf035aa5a2d4532cfe0c9510 \ No newline at end of file +7f7465abaf559b3ef56cb6b0f28050c12f392f55db33dc5d2cefc14b92beb2c9068834c05273e51323d3516643e8a385e4c177a7a471678c961808d19055a30f \ No newline at end of file diff --git a/tests/test_mg_nuclide/inputs_true.dat b/tests/test_mg_nuclide/inputs_true.dat index eb643bbaf4..32a7773c1e 100644 --- a/tests/test_mg_nuclide/inputs_true.dat +++ b/tests/test_mg_nuclide/inputs_true.dat @@ -1 +1 @@ -c9f9e7211bfb2af58130bedfd64592d093b7bfa424953eba433ecf08940595a96b8de7a892f12d1ab465cebd8e5dd784114c1b1299b534ed329df92752c9ed1f \ No newline at end of file +825dee3ca35d48788f1a4d5364789bbd83b36e33af9a990da758dd73c3bfcbee14bce2a41e6c80e0147f45575e59078653c8dfa8590cd361c09f19c26dc8c88e \ No newline at end of file diff --git a/tests/test_mg_tallies/inputs_true.dat b/tests/test_mg_tallies/inputs_true.dat index 304d2e8880..41bbd2136e 100644 --- a/tests/test_mg_tallies/inputs_true.dat +++ b/tests/test_mg_tallies/inputs_true.dat @@ -1 +1 @@ -ca8490e0e4549fed727ddc75b6d92cfe5162e11b905218a0afaa3ce2ee0763e2ff38074de27aaa678818624f49c5823650475dfa8f66f502a98fc03145399c0d \ No newline at end of file +6c437c3f9281c52a80a9b166971aa0f5db7ff8b6cf65c79b6d7bf294fad30cc7044f6a665cd9059f8580441bcbb581f7152ff5bccbc21fbcc407847ea6fe3306 \ No newline at end of file diff --git a/tests/test_mgxs_library_condense/inputs_true.dat b/tests/test_mgxs_library_condense/inputs_true.dat index b94f64122d..51fc95c60c 100644 --- a/tests/test_mgxs_library_condense/inputs_true.dat +++ b/tests/test_mgxs_library_condense/inputs_true.dat @@ -1 +1 @@ -53b1740921b71e4ead909ab9e4c25f7d43990fe7d7051fde6f66c39c0a6082177385640244010e1b9dbeaf5f34adf1627e9603088af729fadd6b589c19102edc \ No newline at end of file +3e7b4ee62e0a53b92d4241f33493786532934f20ebcf47d92825bb1ee2f67c52aa8e7832cf28a9911221f802da205fba2b23c7228899780089da69e21042743c \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/inputs_true.dat b/tests/test_mgxs_library_distribcell/inputs_true.dat index 04e56658f2..78ffa3faf0 100644 --- a/tests/test_mgxs_library_distribcell/inputs_true.dat +++ b/tests/test_mgxs_library_distribcell/inputs_true.dat @@ -1 +1 @@ -224a9e84e87c8a21385326d34ef27c046107d4a2ace6ee85d7a36142a3726e12532e2fc1a318ab707437e0b306a81c6d2b80c531d4c3210d4162242e6265ba70 \ No newline at end of file +2c078f650fed5fc241f42b2d7404fb7fae59d782102fad66b4cd2c8a4b1f266d64e8ce1ec0556117c2a2b1fe49aa583f340dc43df3ddc9320557aa97bb554c05 \ No newline at end of file diff --git a/tests/test_mgxs_library_hdf5/inputs_true.dat b/tests/test_mgxs_library_hdf5/inputs_true.dat index b94f64122d..51fc95c60c 100644 --- a/tests/test_mgxs_library_hdf5/inputs_true.dat +++ b/tests/test_mgxs_library_hdf5/inputs_true.dat @@ -1 +1 @@ -53b1740921b71e4ead909ab9e4c25f7d43990fe7d7051fde6f66c39c0a6082177385640244010e1b9dbeaf5f34adf1627e9603088af729fadd6b589c19102edc \ No newline at end of file +3e7b4ee62e0a53b92d4241f33493786532934f20ebcf47d92825bb1ee2f67c52aa8e7832cf28a9911221f802da205fba2b23c7228899780089da69e21042743c \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/inputs_true.dat b/tests/test_mgxs_library_no_nuclides/inputs_true.dat index b94f64122d..51fc95c60c 100644 --- a/tests/test_mgxs_library_no_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_no_nuclides/inputs_true.dat @@ -1 +1 @@ -53b1740921b71e4ead909ab9e4c25f7d43990fe7d7051fde6f66c39c0a6082177385640244010e1b9dbeaf5f34adf1627e9603088af729fadd6b589c19102edc \ No newline at end of file +3e7b4ee62e0a53b92d4241f33493786532934f20ebcf47d92825bb1ee2f67c52aa8e7832cf28a9911221f802da205fba2b23c7228899780089da69e21042743c \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/inputs_true.dat b/tests/test_mgxs_library_nuclides/inputs_true.dat index f87bc242dc..9436f03a03 100644 --- a/tests/test_mgxs_library_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_nuclides/inputs_true.dat @@ -1 +1 @@ -c6a2a1c707bc723fd38bafd18efcfb22beaac0bd5953d7524ced1d47866cc1e1ee4152e39234d32a06fe43aff446fb12f8c5b62a44075607f274778b49110762 \ No newline at end of file +b035f783fa75ada619b0a58675913e318fef94e519c85cae6982f650d7655cb130f625572fde2058e005b490359180cb9d1e1095f5d35d41c9a0f8ff6e0dc3c1 \ No newline at end of file diff --git a/tests/test_tallies/inputs_true.dat b/tests/test_tallies/inputs_true.dat index 657a9e77da..be789fc838 100644 --- a/tests/test_tallies/inputs_true.dat +++ b/tests/test_tallies/inputs_true.dat @@ -1 +1 @@ -5e168146d91b7b5fadecb80a32df9edc906718fb2d70b68b4c18dbed0641739251a1c16177c9f4d47516dfd528ec930879534292ff0eb82af89eca2c3fa4a3e0 \ No newline at end of file +0597eff3fddbc45a09b5b324c9704e540b694b07c136f2040426fdcfe5ec544f036073e4afa34a5fb0fbd721a4c0a609b9b68bf17ce4ec78302023b46b71930c \ No newline at end of file diff --git a/tests/test_tally_aggregation/inputs_true.dat b/tests/test_tally_aggregation/inputs_true.dat index 7b4276f59e..055ac76fd4 100644 --- a/tests/test_tally_aggregation/inputs_true.dat +++ b/tests/test_tally_aggregation/inputs_true.dat @@ -1 +1 @@ -530a5e969901e153531f74aed46246b1e8783a0e2f347e472f7554c9970152f45d85499f17d7df9c35c74fed6f78d449aa70bf0c1f8947cd34d3a829483a0055 \ No newline at end of file +f819f1b3564ca1df1e235f120f4bd65003cd80935fa8261f0a5982b7e7ec5b2e7497716673c142fab99f3fb26c174ac7a12e145b9a6f2caf707d2a07702f6eb2 \ No newline at end of file diff --git a/tests/test_tally_arithmetic/inputs_true.dat b/tests/test_tally_arithmetic/inputs_true.dat index 1b6046f1ae..d7b854a51d 100644 --- a/tests/test_tally_arithmetic/inputs_true.dat +++ b/tests/test_tally_arithmetic/inputs_true.dat @@ -1 +1 @@ -57384883e37964076aa82c19fa542434331cdb09735d710485b5aa0ca3445d543729e40cb9c7b6a70e7101ef186923eb1ff6315c73b01ff257052838add68fc7 \ No newline at end of file +bb7e730630f7bb4694a27fd77c3c0171f70c78df2681acc26b0ef88bcff367523b11335f487b46269325adbcee7faeb756484af64055c3c91b0103f7ed962053 \ No newline at end of file diff --git a/tests/test_tally_slice_merge/inputs_true.dat b/tests/test_tally_slice_merge/inputs_true.dat index 29f0f1d827..be2ec63dc5 100644 --- a/tests/test_tally_slice_merge/inputs_true.dat +++ b/tests/test_tally_slice_merge/inputs_true.dat @@ -1 +1 @@ -8d1ab9e4add51b99045e990ac9c3dad9447e9720d811bc430d4bfdd7c2c035424bcb7750e4a4d0ec0460ea1ef4be46ac58372ed01d55f5d8cfeebbce75559066 \ No newline at end of file +bb4ae3b75445846bd5db05a06cc20e7589990154ccef8302f276cd8356630d585c513ebb6bfa99f9fc93dd2d30c42bfbb67dd3454134f4c9fcb3bac128d1f1c5 \ No newline at end of file From cccca4062aea16d8894a2257173ce33fad0a25d3 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 25 Apr 2016 09:04:52 -0500 Subject: [PATCH 445/650] Goodbye openmc.Executor. Hello openmc.run and openmc.plot. --- openmc/executor.py | 177 ++++++++---------- tests/test_plot/test_plot.py | 5 +- .../test_statepoint_restart.py | 17 +- tests/testing_harness.py | 25 +-- 4 files changed, 92 insertions(+), 132 deletions(-) diff --git a/openmc/executor.py b/openmc/executor.py index 214517d6ed..89bcc2e10d 100644 --- a/openmc/executor.py +++ b/openmc/executor.py @@ -1,131 +1,100 @@ from __future__ import print_function import subprocess from numbers import Integral -import os import sys -from openmc.checkvalue import check_type - if sys.version_info[0] >= 3: basestring = str -class Executor(object): - """Control execution of OpenMC +def _run(command, output, cwd): + # Launch a subprocess + p = subprocess.Popen(command, shell=True, cwd=cwd, stdout=subprocess.PIPE, + universal_newlines=True) - Attributes + # Capture and re-print OpenMC output in real-time + while True: + # If OpenMC is finished, break loop + line = p.stdout.readline() + if not line and p.poll() != None: + break + + # If user requested output, print to screen + if output: + print(line, end='') + + # Return the returncode (integer, zero if no problems encountered) + return p.returncode + + +def plot(output=True, openmc_exec='openmc', cwd='.'): + """Run OpenMC in plotting mode + + Parameters ---------- - working_directory : str - Path to working directory to run in + output : bool + Capture OpenMC output from standard out + openmc_exec : str + Path to OpenMC executable + cwd : str, optional + Path to working directory to run in. Defaults to the current working directory. """ - def __init__(self): - self._working_directory = '.' + return _run(openmc_exec + ' -p', output, cwd) - def _run_openmc(self, command, output): - # Launch a subprocess to run OpenMC - p = subprocess.Popen(command, shell=True, - cwd=self._working_directory, - stdout=subprocess.PIPE, - universal_newlines=True) - # Capture and re-print OpenMC output in real-time - while True: - # If OpenMC is finished, break loop - line = p.stdout.readline() - if not line and p.poll() != None: - break +def run(particles=None, threads=None, geometry_debug=False, + restart_file=None, tracks=False, mpi_procs=1, output=True, + openmc_exec='openmc', mpi_exec='mpiexec', cwd='.'): + """Run an OpenMC simulation. - # If user requested output, print to screen - if output: - print(line, end='') + Parameters + ---------- + particles : int, optional + Number of particles to simulate per generation. + threads : int, optional + Number of OpenMP threads. + geometry_debug : bool, optional + Turn on geometry debugging during simulation. Defaults to False. + restart_file : str, optional + Path to restart file to use + tracks : bool, optional + Write tracks for all particles. Defaults to False. + mpi_procs : int, optional + Number of MPI processes. + output : bool, optional + Capture OpenMC output from standard out. Defaults to True. + openmc_exec : str, optional + Path to OpenMC executable. Defaults to 'openmc'. + mpi_exec : str, optional + MPI execute command. Defaults to 'mpiexec'. + cwd : str, optional + Path to working directory to run in. Defaults to the current working directory. - # Return the returncode (integer, zero if no problems encountered) - return p.returncode + """ - @property - def working_directory(self): - return self._working_directory + post_args = ' ' + pre_args = '' - @working_directory.setter - def working_directory(self, working_directory): - check_type("Executor's working directory", working_directory, - basestring) - if not os.path.isdir(working_directory): - msg = 'Unable to set Executor\'s working directory to "{0}" ' \ - 'which does not exist'.format(working_directory) - raise ValueError(msg) + if isinstance(particles, Integral) and particles > 0: + post_args += '-n {0} '.format(particles) - self._working_directory = working_directory + if isinstance(threads, Integral) and threads > 0: + post_args += '-s {0} '.format(threads) - def plot_geometry(self, output=True, openmc_exec='openmc'): - """Run OpenMC in plotting mode""" + if geometry_debug: + post_args += '-g ' - return self._run_openmc(openmc_exec + ' -p', output) + if isinstance(restart_file, basestring): + post_args += '-r {0} '.format(restart_file) - def run_simulation(self, particles=None, threads=None, - geometry_debug=False, restart_file=None, - tracks=False, mpi_procs=1, output=True, - openmc_exec='openmc', mpi_exec=None): - """Run an OpenMC simulation. + if tracks: + post_args += '-t' - Parameters - ---------- - particles : int - Number of particles to simulate per generation - threads : int - Number of OpenMP threads - geometry_debug : bool - Turn on geometry debugging during simulation - restart_file : str - Path to restart file to use - tracks : bool - Write tracks for all particles - mpi_procs : int - Number of MPI processes - output : bool - Capture OpenMC output from standard out - openmc_exec : str - Path to OpenMC executable + if isinstance(mpi_procs, Integral) and mpi_procs > 1: + pre_args += '{} -n {} '.format(mpi_exec, mpi_procs) - """ + command = pre_args + openmc_exec + ' ' + post_args - post_args = ' ' - pre_args = '' - - if isinstance(particles, Integral) and particles > 0: - post_args += '-n {0} '.format(particles) - - if isinstance(threads, Integral) and threads > 0: - post_args += '-s {0} '.format(threads) - - if geometry_debug: - post_args += '-g ' - - if isinstance(restart_file, basestring): - post_args += '-r {0} '.format(restart_file) - - if tracks: - post_args += '-t' - - if isinstance(mpi_procs, Integral) and mpi_procs > 1: - np_present = True - else: - np_present = False - - if mpi_exec is not None and isinstance(mpi_exec, basestring): - mpi_exec_present = True - else: - mpi_exec_present = False - - if np_present or mpi_exec_present: - if mpi_exec_present: - pre_args += mpi_exec + ' ' - else: - pre_args += 'mpirun ' - pre_args += '-n {0} '.format(mpi_procs) - - command = pre_args + openmc_exec + ' ' + post_args - - return self._run_openmc(command, output) + return _run(command, output, cwd) diff --git a/tests/test_plot/test_plot.py b/tests/test_plot/test_plot.py index 015577d215..e40cef49c0 100644 --- a/tests/test_plot/test_plot.py +++ b/tests/test_plot/test_plot.py @@ -9,7 +9,7 @@ from testing_harness import TestHarness import h5py -from openmc import Executor +import openmc class PlotTestHarness(TestHarness): @@ -19,8 +19,7 @@ class PlotTestHarness(TestHarness): self._plot_names = plot_names def _run_openmc(self): - executor = Executor() - returncode = executor.plot_geometry(openmc_exec=self._opts.exe) + returncode = openmc.plot(openmc_exec=self._opts.exe) assert returncode == 0, 'OpenMC did not exit successfully.' def _test_output_created(self): diff --git a/tests/test_statepoint_restart/test_statepoint_restart.py b/tests/test_statepoint_restart/test_statepoint_restart.py index c842689d99..d39bf7cd5f 100644 --- a/tests/test_statepoint_restart/test_statepoint_restart.py +++ b/tests/test_statepoint_restart/test_statepoint_restart.py @@ -5,8 +5,7 @@ import os import sys sys.path.insert(0, os.pardir) from testing_harness import TestHarness -from openmc.statepoint import StatePoint -from openmc.executor import Executor +import openmc class StatepointRestartTestHarness(TestHarness): @@ -50,17 +49,15 @@ class StatepointRestartTestHarness(TestHarness): statepoint = statepoint[0] # Run OpenMC - executor = Executor() - if self._opts.mpi_exec is not None: - returncode = executor.run_simulation(mpi_procs=self._opts.mpi_np, - restart_file=statepoint, - openmc_exec=self._opts.exe, - mpi_exec=self._opts.mpi_exec) + returncode = openmc.run(mpi_procs=self._opts.mpi_np, + restart_file=statepoint, + openmc_exec=self._opts.exe, + mpi_exec=self._opts.mpi_exec) else: - returncode = executor.run_simulation(openmc_exec=self._opts.exe, - restart_file=statepoint) + returncode = openmc.run(openmc_exec=self._opts.exe, + restart_file=statepoint) assert returncode == 0, 'OpenMC did not exit successfully.' diff --git a/tests/testing_harness.py b/tests/testing_harness.py index 7d6dbc914f..78e5553e8c 100644 --- a/tests/testing_harness.py +++ b/tests/testing_harness.py @@ -13,9 +13,7 @@ import numpy as np sys.path.insert(0, os.path.join(os.pardir, os.pardir)) from input_set import InputSet, MGInputSet -from openmc.statepoint import StatePoint -from openmc.executor import Executor -import openmc.particle_restart as pr +import openmc class TestHarness(object): @@ -63,15 +61,13 @@ class TestHarness(object): self._cleanup() def _run_openmc(self): - executor = Executor() - if self._opts.mpi_exec is not None: - returncode = executor.run_simulation(mpi_procs=self._opts.mpi_np, - openmc_exec=self._opts.exe, - mpi_exec=self._opts.mpi_exec) + returncode = openmc.run(mpi_procs=self._opts.mpi_np, + openmc_exec=self._opts.exe, + mpi_exec=self._opts.mpi_exec) else: - returncode = executor.run_simulation(openmc_exec=self._opts.exe) + returncode = openmc.run(openmc_exec=self._opts.exe) assert returncode == 0, 'OpenMC did not exit successfully.' @@ -90,7 +86,7 @@ class TestHarness(object): """Digest info in the statepoint and return as a string.""" # Read the statepoint file. statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] - sp = StatePoint(statepoint) + sp = openmc.StatePoint(statepoint) # Write out k-combined. outstr = 'k-combined:\n' @@ -158,7 +154,7 @@ class CMFDTestHarness(TestHarness): """Digest info in the statepoint and return as a string.""" # Read the statepoint file. statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] - sp = StatePoint(statepoint) + sp = openmc.StatePoint(statepoint) # Write out the eigenvalue and tallies. outstr = super(CMFDTestHarness, self)._get_results() @@ -195,13 +191,12 @@ class ParticleRestartTestHarness(TestHarness): 'mpi_exec': self._opts.mpi_exec}) # Initial run - executor = Executor() - returncode = executor.run_simulation(**args) + returncode = openmc.run(**args) assert returncode == 0, 'OpenMC did not exit successfully.' # Run particle restart args.update({'restart_file': self._sp_name}) - returncode = executor.run_simulation(**args) + returncode = openmc.run(**args) assert returncode == 0, 'OpenMC did not exit successfully.' def _test_output_created(self): @@ -216,7 +211,7 @@ class ParticleRestartTestHarness(TestHarness): """Digest info in the statepoint and return as a string.""" # Read the particle restart file. particle = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] - p = pr.Particle(particle) + p = openmc.Particle(particle) # Write out the properties. outstr = '' From a855e8f1b04f3983b699422c9d938d21f2f3315c Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 25 Apr 2016 09:31:40 -0500 Subject: [PATCH 446/650] Increase MAX_EVENTS to 1 million --- src/constants.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/constants.F90 b/src/constants.F90 index 8863ca18c4..5b58f409dd 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -37,7 +37,7 @@ module constants real(8), parameter :: FP_COINCIDENT = 1e-12_8 ! Maximum number of collisions/crossings - integer, parameter :: MAX_EVENTS = 10000 + integer, parameter :: MAX_EVENTS = 1000000 integer, parameter :: MAX_SAMPLE = 100000 ! Maximum number of secondary particles created From 50a80693b5d4ac0fb1bc0e88a4c105338c35601e Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 25 Apr 2016 10:37:06 -0500 Subject: [PATCH 447/650] Rename main Python API classes to get rid of File. --- docs/source/_templates/myfunction.rst | 6 ++ docs/source/pythonapi/index.rst | 18 ++--- examples/python/basic/build-xml.py | 28 ++++---- examples/python/boxes/build-xml.py | 20 +++--- .../python/lattice/hexagonal/build-xml.py | 28 ++++---- examples/python/lattice/nested/build-xml.py | 34 ++++----- examples/python/lattice/simple/build-xml.py | 34 ++++----- examples/python/pincell/build-xml.py | 28 ++++---- .../python/pincell_multigroup/build-xml.py | 32 ++++----- examples/python/reflective/build-xml.py | 22 +++--- openmc/cmfd.py | 2 +- openmc/executor.py | 2 +- openmc/geometry.py | 71 ++++++------------- openmc/material.py | 9 ++- openmc/mgxs/library.py | 6 +- openmc/mgxs_library.py | 9 ++- openmc/plots.py | 5 +- openmc/settings.py | 2 +- openmc/tallies.py | 7 +- tests/input_set.py | 26 ++----- .../test_asymmetric_lattice.py | 10 ++- tests/test_distribmat/test_distribmat.py | 10 ++- tests/test_mg_max_order/test_mg_max_order.py | 2 +- tests/test_mg_nuclide/test_mg_nuclide.py | 2 +- tests/test_mg_tallies/test_mg_tallies.py | 2 +- .../test_mgxs_library_condense.py | 4 +- .../test_mgxs_library_distribcell.py | 4 +- .../test_mgxs_library_hdf5.py | 8 +-- .../test_mgxs_library_no_nuclides.py | 4 +- .../test_mgxs_library_nuclides.py | 4 +- tests/test_plot/test_plot.py | 2 +- .../test_resonance_scattering.py | 8 +-- tests/test_source/test_source.py | 16 ++--- tests/test_tallies/test_tallies.py | 4 +- .../test_tally_aggregation.py | 2 +- .../test_tally_arithmetic.py | 2 +- .../test_tally_slice_merge.py | 14 ++-- 37 files changed, 203 insertions(+), 284 deletions(-) create mode 100644 docs/source/_templates/myfunction.rst diff --git a/docs/source/_templates/myfunction.rst b/docs/source/_templates/myfunction.rst new file mode 100644 index 0000000000..4d7ea38a18 --- /dev/null +++ b/docs/source/_templates/myfunction.rst @@ -0,0 +1,6 @@ +{{ fullname }} +{{ underline }} + +.. currentmodule:: {{ module }} + +.. autofunction:: {{ objname }} diff --git a/docs/source/pythonapi/index.rst b/docs/source/pythonapi/index.rst index 9fd70cb5a2..3bedaf2c7b 100644 --- a/docs/source/pythonapi/index.rst +++ b/docs/source/pythonapi/index.rst @@ -29,7 +29,7 @@ Classes :template: myclass.rst openmc.XSdata - openmc.MGXSLibraryFile + openmc.MGXSLibrary Functions +++++++++ @@ -50,7 +50,7 @@ Simulation Settings openmc.Source openmc.ResonanceScattering - openmc.SettingsFile + openmc.Settings Material Specification ---------------------- @@ -64,7 +64,7 @@ Material Specification openmc.Element openmc.Macroscopic openmc.Material - openmc.MaterialsFile + openmc.Materials Building geometry ----------------- @@ -96,7 +96,6 @@ Building geometry openmc.RectLattice openmc.HexLattice openmc.Geometry - openmc.GeometryFile Many of the above classes are derived from several abstract classes: @@ -121,7 +120,7 @@ Constructing Tallies openmc.Mesh openmc.Trigger openmc.Tally - openmc.TalliesFile + openmc.Tallies Coarse Mesh Finite Difference Acceleration ------------------------------------------ @@ -132,7 +131,7 @@ Coarse Mesh Finite Difference Acceleration :template: myclass.rst openmc.CMFDMesh - openmc.CMFDFile + openmc.CMFD Plotting -------- @@ -143,7 +142,7 @@ Plotting :template: myclass.rst openmc.Plot - openmc.PlotsFile + openmc.Plots Running OpenMC -------------- @@ -151,9 +150,10 @@ Running OpenMC .. autosummary:: :toctree: generated :nosignatures: - :template: myclass.rst + :template: myfunction.rst - openmc.Executor + openmc.run + openmc.plot_geometry Post-processing --------------- diff --git a/examples/python/basic/build-xml.py b/examples/python/basic/build-xml.py index fbe6836616..19737cf91f 100644 --- a/examples/python/basic/build-xml.py +++ b/examples/python/basic/build-xml.py @@ -12,7 +12,7 @@ particles = 10000 ############################################################################### -# Exporting to OpenMC materials.xml File +# Exporting to OpenMC materials.xml file ############################################################################### # Instantiate some Nuclides @@ -31,15 +31,15 @@ fuel = openmc.Material(material_id=40, name='fuel') fuel.set_density('g/cc', 4.5) fuel.add_nuclide(u235, 1.) -# Instantiate a MaterialsFile, register all Materials, and export to XML -materials_file = openmc.MaterialsFile() +# Instantiate a Materials collection, register all Materials, and export to XML +materials_file = openmc.Materials() materials_file.default_xs = '71c' materials_file.add_materials([moderator, fuel]) materials_file.export_to_xml() ############################################################################### -# Exporting to OpenMC geometry.xml File +# Exporting to OpenMC geometry.xml file ############################################################################### # Instantiate ZCylinder surfaces @@ -74,22 +74,18 @@ cell1.fill = universe1 universe1.add_cells([cell2, cell3]) root.add_cells([cell1, cell4]) -# Instantiate a Geometry and register the root Universe +# Instantiate a Geometry and register the root Universe, and export to XML geometry = openmc.Geometry() geometry.root_universe = root - -# Instantiate a GeometryFile, register Geometry, and export to XML -geometry_file = openmc.GeometryFile() -geometry_file.geometry = geometry -geometry_file.export_to_xml() +geometry.export_to_xml() ############################################################################### -# Exporting to OpenMC settings.xml File +# Exporting to OpenMC settings.xml file ############################################################################### -# Instantiate a SettingsFile, set all runtime parameters, and export to XML -settings_file = openmc.SettingsFile() +# Instantiate a Settings object, set all runtime parameters, and export to XML +settings_file = openmc.Settings() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles @@ -103,7 +99,7 @@ settings_file.export_to_xml() ############################################################################### -# Exporting to OpenMC tallies.xml File +# Exporting to OpenMC tallies.xml file ############################################################################### # Instantiate some tally Filters @@ -128,8 +124,8 @@ third_tally = openmc.Tally(tally_id=3, name='third tally') third_tally.filters = [cell_filter, energy_filter, energyout_filter] third_tally.scores = ['scatter', 'nu-scatter', 'nu-fission'] -# Instantiate a TalliesFile, register all Tallies, and export to XML -tallies_file = openmc.TalliesFile() +# Instantiate a Tallies object, register all Tallies, and export to XML +tallies_file = openmc.Tallies() tallies_file.add_tally(first_tally) tallies_file.add_tally(second_tally) tallies_file.add_tally(third_tally) diff --git a/examples/python/boxes/build-xml.py b/examples/python/boxes/build-xml.py index ea3e81d172..196a10ca7b 100644 --- a/examples/python/boxes/build-xml.py +++ b/examples/python/boxes/build-xml.py @@ -36,15 +36,15 @@ moderator.add_nuclide(h1, 2.) moderator.add_nuclide(o16, 1.) moderator.add_s_alpha_beta('HH2O', '71t') -# Instantiate a MaterialsFile, register all Materials, and export to XML -materials_file = openmc.MaterialsFile() +# Instantiate a Materials object, register all Materials, and export to XML +materials_file = openmc.Materials() materials_file.default_xs = '71c' materials_file.add_materials([fuel1, fuel2, moderator]) materials_file.export_to_xml() ############################################################################### -# Exporting to OpenMC geometry.xml File +# Exporting to OpenMC geometry.xml file ############################################################################### # Instantiate planar surfaces @@ -97,14 +97,10 @@ outer_box.fill = moderator root = openmc.Universe(universe_id=0, name='root universe') root.add_cells([inner_box, middle_box, outer_box]) -# Instantiate a Geometry and register the root Universe +# Instantiate a Geometry and register the root Universe, and export to XML geometry = openmc.Geometry() geometry.root_universe = root - -# Instantiate a GeometryFile, register Geometry, and export to XML -geometry_file = openmc.GeometryFile() -geometry_file.geometry = geometry -geometry_file.export_to_xml() +geometry.export_to_xml() ############################################################################### @@ -112,7 +108,7 @@ geometry_file.export_to_xml() ############################################################################### # Instantiate a SettingsFile, set all runtime parameters, and export to XML -settings_file = openmc.SettingsFile() +settings_file = openmc.Settings() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles @@ -133,7 +129,7 @@ plot.width = [20, 20] plot.pixels = [200, 200] plot.color = 'cell' -# Instantiate a PlotsFile, add Plot, and export to XML -plot_file = openmc.PlotsFile() +# Instantiate a Plots object, add Plot, and export to XML +plot_file = openmc.Plots() plot_file.add_plot(plot) plot_file.export_to_xml() diff --git a/examples/python/lattice/hexagonal/build-xml.py b/examples/python/lattice/hexagonal/build-xml.py index 7f92e66027..a9d7f68991 100644 --- a/examples/python/lattice/hexagonal/build-xml.py +++ b/examples/python/lattice/hexagonal/build-xml.py @@ -35,15 +35,15 @@ iron = openmc.Material(material_id=3, name='iron') iron.set_density('g/cc', 7.9) iron.add_nuclide(fe56, 1.) -# Instantiate a MaterialsFile, register all Materials, and export to XML -materials_file = openmc.MaterialsFile() +# Instantiate a Materials object, register all Materials, and export to XML +materials_file = openmc.Materials() materials_file.default_xs = '71c' materials_file.add_materials([moderator, fuel, iron]) materials_file.export_to_xml() ############################################################################### -# Exporting to OpenMC geometry.xml File +# Exporting to OpenMC geometry.xml file ############################################################################### # Instantiate Surfaces @@ -105,22 +105,18 @@ lattice.outer = univ2 # Fill Cell with the Lattice cell1.fill = lattice -# Instantiate a Geometry and register the root Universe +# Instantiate a Geometry and register the root Universe, and export to XML geometry = openmc.Geometry() geometry.root_universe = root - -# Instantiate a GeometryFile, register Geometry, and export to XML -geometry_file = openmc.GeometryFile() -geometry_file.geometry = geometry -geometry_file.export_to_xml() +geometry.export_to_xml() ############################################################################### -# Exporting to OpenMC settings.xml File +# Exporting to OpenMC settings.xml file ############################################################################### # Instantiate a SettingsFile, set all runtime parameters, and export to XML -settings_file = openmc.SettingsFile() +settings_file = openmc.Settings() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles @@ -137,7 +133,7 @@ settings_file.export_to_xml() ############################################################################### -# Exporting to OpenMC plots.xml File +# Exporting to OpenMC plots.xml file ############################################################################### plot_xy = openmc.Plot(plot_id=1) @@ -155,8 +151,8 @@ plot_yz.width = [8, 8] plot_yz.pixels = [400, 400] plot_yz.color = 'mat' -# Instantiate a PlotsFile, add Plot, and export to XML -plot_file = openmc.PlotsFile() +# Instantiate a Plots object, add plots, and export to XML +plot_file = openmc.Plots() plot_file.add_plot(plot_xy) plot_file.add_plot(plot_yz) plot_file.export_to_xml() @@ -171,7 +167,7 @@ tally = openmc.Tally(tally_id=1) tally.filters = [openmc.Filter(type='distribcell', bins=[cell2.id])] tally.scores = ['total'] -# Instantiate a TalliesFile, register Tally/Mesh, and export to XML -tallies_file = openmc.TalliesFile() +# Instantiate a Tallies object, register Tally/Mesh, and export to XML +tallies_file = openmc.Tallies() tallies_file.add_tally(tally) tallies_file.export_to_xml() diff --git a/examples/python/lattice/nested/build-xml.py b/examples/python/lattice/nested/build-xml.py index f54f064530..eb16c83278 100644 --- a/examples/python/lattice/nested/build-xml.py +++ b/examples/python/lattice/nested/build-xml.py @@ -11,7 +11,7 @@ particles = 10000 ############################################################################### -# Exporting to OpenMC materials.xml File +# Exporting to OpenMC materials.xml file ############################################################################### # Instantiate some Nuclides @@ -30,15 +30,15 @@ moderator.add_nuclide(h1, 2.) moderator.add_nuclide(o16, 1.) moderator.add_s_alpha_beta('HH2O', '71t') -# Instantiate a MaterialsFile, register all Materials, and export to XML -materials_file = openmc.MaterialsFile() +# Instantiate a Materials object, register all Materials, and export to XML +materials_file = openmc.Materials() materials_file.default_xs = '71c' materials_file.add_materials([moderator, fuel]) materials_file.export_to_xml() ############################################################################### -# Exporting to OpenMC geometry.xml File +# Exporting to OpenMC geometry.xml file ############################################################################### # Instantiate Surfaces @@ -116,22 +116,18 @@ lattice2.universes = [[univ4, univ4], cell1.fill = lattice2 cell2.fill = lattice1 -# Instantiate a Geometry and register the root Universe +# Instantiate a Geometry and register the root Universe, and export to XML geometry = openmc.Geometry() geometry.root_universe = root - -# Instantiate a GeometryFile, register Geometry, and export to XML -geometry_file = openmc.GeometryFile() -geometry_file.geometry = geometry -geometry_file.export_to_xml() +geometry.export_to_xml() ############################################################################### -# Exporting to OpenMC settings.xml File +# Exporting to OpenMC settings.xml file ############################################################################### -# Instantiate a SettingsFile, set all runtime parameters, and export to XML -settings_file = openmc.SettingsFile() +# Instantiate a Settings object, set all runtime parameters, and export to XML +settings_file = openmc.Settings() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles @@ -145,7 +141,7 @@ settings_file.export_to_xml() ############################################################################### -# Exporting to OpenMC plots.xml File +# Exporting to OpenMC plots.xml file ############################################################################### plot = openmc.Plot(plot_id=1) @@ -154,14 +150,14 @@ plot.width = [4, 4] plot.pixels = [400, 400] plot.color = 'mat' -# Instantiate a PlotsFile, add Plot, and export to XML -plot_file = openmc.PlotsFile() +# Instantiate a Plots object, add Plot, and export to XML +plot_file = openmc.Plots() plot_file.add_plot(plot) plot_file.export_to_xml() ############################################################################### -# Exporting to OpenMC tallies.xml File +# Exporting to OpenMC tallies.xml file ############################################################################### # Instantiate a tally mesh @@ -180,8 +176,8 @@ tally = openmc.Tally(tally_id=1) tally.filters = [mesh_filter] tally.scores = ['total'] -# Instantiate a TalliesFile, register Tally/Mesh, and export to XML -tallies_file = openmc.TalliesFile() +# Instantiate a Tallies object, register Tally/Mesh, and export to XML +tallies_file = openmc.Tallies() tallies_file.add_mesh(mesh) tallies_file.add_tally(tally) tallies_file.export_to_xml() diff --git a/examples/python/lattice/simple/build-xml.py b/examples/python/lattice/simple/build-xml.py index f633fa96f7..6e44e4da0a 100644 --- a/examples/python/lattice/simple/build-xml.py +++ b/examples/python/lattice/simple/build-xml.py @@ -11,7 +11,7 @@ particles = 10000 ############################################################################### -# Exporting to OpenMC materials.xml File +# Exporting to OpenMC materials.xml file ############################################################################### # Instantiate some Nuclides @@ -30,15 +30,15 @@ moderator.add_nuclide(h1, 2.) moderator.add_nuclide(o16, 1.) moderator.add_s_alpha_beta('HH2O', '71t') -# Instantiate a MaterialsFile, register all Materials, and export to XML -materials_file = openmc.MaterialsFile() +# Instantiate a Materials object, register all Materials, and export to XML +materials_file = openmc.Materials() materials_file.default_xs = '71c' materials_file.add_materials([moderator, fuel]) materials_file.export_to_xml() ############################################################################### -# Exporting to OpenMC geometry.xml File +# Exporting to OpenMC geometry.xml file ############################################################################### # Instantiate Surfaces @@ -106,22 +106,18 @@ lattice.universes = [[univ1, univ2, univ1, univ2], # Fill Cell with the Lattice cell1.fill = lattice -# Instantiate a Geometry and register the root Universe +# Instantiate a Geometry and register the root Universe, and export to XML geometry = openmc.Geometry() geometry.root_universe = root - -# Instantiate a GeometryFile, register Geometry, and export to XML -geometry_file = openmc.GeometryFile() -geometry_file.geometry = geometry -geometry_file.export_to_xml() +geometry.export_to_xml() ############################################################################### -# Exporting to OpenMC settings.xml File +# Exporting to OpenMC settings.xml file ############################################################################### -# Instantiate a SettingsFile, set all runtime parameters, and export to XML -settings_file = openmc.SettingsFile() +# Instantiate a Settings object, set all runtime parameters, and export to XML +settings_file = openmc.Settings() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles @@ -137,7 +133,7 @@ settings_file.export_to_xml() ############################################################################### -# Exporting to OpenMC plots.xml File +# Exporting to OpenMC plots.xml file ############################################################################### plot = openmc.Plot(plot_id=1) @@ -146,14 +142,14 @@ plot.width = [4, 4] plot.pixels = [400, 400] plot.color = 'mat' -# Instantiate a PlotsFile, add Plot, and export to XML -plot_file = openmc.PlotsFile() +# Instantiate a Plots object, add Plot, and export to XML +plot_file = openmc.Plots() plot_file.add_plot(plot) plot_file.export_to_xml() ############################################################################### -# Exporting to OpenMC tallies.xml File +# Exporting to OpenMC tallies.xml file ############################################################################### # Instantiate a tally mesh @@ -177,8 +173,8 @@ tally.filters = [mesh_filter] tally.scores = ['total'] tally.triggers = [trigger] -# Instantiate a TalliesFile, register Tally/Mesh, and export to XML -tallies_file = openmc.TalliesFile() +# Instantiate a Tallies object, register Tally/Mesh, and export to XML +tallies_file = openmc.Tallies() tallies_file.add_mesh(mesh) tallies_file.add_tally(tally) tallies_file.export_to_xml() diff --git a/examples/python/pincell/build-xml.py b/examples/python/pincell/build-xml.py index 2e72d82ab4..10cd4944d4 100644 --- a/examples/python/pincell/build-xml.py +++ b/examples/python/pincell/build-xml.py @@ -11,7 +11,7 @@ particles = 1000 ############################################################################### -# Exporting to OpenMC materials.xml File +# Exporting to OpenMC materials.xml file ############################################################################### # Instantiate some Nuclides @@ -100,15 +100,15 @@ borated_water.add_nuclide(o16, 2.4672e-2) borated_water.add_nuclide(o17, 6.0099e-5) borated_water.add_s_alpha_beta('HH2O', '71t') -# Instantiate a MaterialsFile, register all Materials, and export to XML -materials_file = openmc.MaterialsFile() +# Instantiate a Materials object, register all Materials, and export to XML +materials_file = openmc.Materials() materials_file.default_xs = '71c' materials_file.add_materials([uo2, helium, zircaloy, borated_water]) materials_file.export_to_xml() ############################################################################### -# Exporting to OpenMC geometry.xml File +# Exporting to OpenMC geometry.xml file ############################################################################### # Instantiate ZCylinder surfaces @@ -149,22 +149,18 @@ root = openmc.Universe(universe_id=0, name='root universe') # Register Cells with Universe root.add_cells([fuel, gap, clad, water]) -# Instantiate a Geometry and register the root Universe +# Instantiate a Geometry and register the root Universe, and export to XML geometry = openmc.Geometry() geometry.root_universe = root - -# Instantiate a GeometryFile, register Geometry, and export to XML -geometry_file = openmc.GeometryFile() -geometry_file.geometry = geometry -geometry_file.export_to_xml() +geometry.export_to_xml() ############################################################################### -# Exporting to OpenMC settings.xml File +# Exporting to OpenMC settings.xml file ############################################################################### -# Instantiate a SettingsFile, set all runtime parameters, and export to XML -settings_file = openmc.SettingsFile() +# Instantiate a Settings object, set all runtime parameters, and export to XML +settings_file = openmc.Settings() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles @@ -181,7 +177,7 @@ settings_file.export_to_xml() ############################################################################### -# Exporting to OpenMC tallies.xml File +# Exporting to OpenMC tallies.xml file ############################################################################### # Instantiate a tally mesh @@ -201,8 +197,8 @@ tally = openmc.Tally(tally_id=1, name='tally 1') tally.filters = [energy_filter, mesh_filter] tally.scores = ['flux', 'fission', 'nu-fission'] -# Instantiate a TalliesFile, register all Tallies, and export to XML -tallies_file = openmc.TalliesFile() +# Instantiate a Tallies object, register all Tallies, and export to XML +tallies_file = openmc.Tallies() tallies_file.add_mesh(mesh) tallies_file.add_tally(tally) tallies_file.export_to_xml() diff --git a/examples/python/pincell_multigroup/build-xml.py b/examples/python/pincell_multigroup/build-xml.py index 60026c0892..2337281423 100644 --- a/examples/python/pincell_multigroup/build-xml.py +++ b/examples/python/pincell_multigroup/build-xml.py @@ -12,7 +12,7 @@ inactive = 10 particles = 1000 ############################################################################### -# Exporting to OpenMC mg_cross_sections.xml File +# Exporting to OpenMC mg_cross_sections.xml file ############################################################################### # Instantiate the energy group data @@ -59,13 +59,13 @@ scatter = [[[0.0444777, 0.1134000, 0.0007235, 0.0000037, 0.0000001, 0.0000000, 0 [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.1324400, 2.4807000]]] h2o_xsdata.scatter = np.array(scatter) -mg_cross_sections_file = openmc.MGXSLibraryFile(groups) +mg_cross_sections_file = openmc.MGXSLibrary(groups) mg_cross_sections_file.add_xsdatas([uo2_xsdata,h2o_xsdata]) mg_cross_sections_file.export_to_xml() ############################################################################### -# Exporting to OpenMC materials.xml File +# Exporting to OpenMC materials.xml file ############################################################################### # Instantiate some Macroscopic Data @@ -81,15 +81,15 @@ water = openmc.Material(material_id=2, name='Water') water.set_density('macro', 1.0) water.add_macroscopic(h2o_data) -# Instantiate a MaterialsFile, register all Materials, and export to XML -materials_file = openmc.MaterialsFile() +# Instantiate a Materials object, register all Materials, and export to XML +materials_file = openmc.Materials() materials_file.default_xs = '300K' materials_file.add_materials([uo2, water]) materials_file.export_to_xml() ############################################################################### -# Exporting to OpenMC geometry.xml File +# Exporting to OpenMC geometry.xml file ############################################################################### # Instantiate ZCylinder surfaces @@ -122,22 +122,18 @@ root = openmc.Universe(universe_id=0, name='root universe') # Register Cells with Universe root.add_cells([fuel, moderator]) -# Instantiate a Geometry and register the root Universe +# Instantiate a Geometry and register the root Universe, and export to XML geometry = openmc.Geometry() geometry.root_universe = root - -# Instantiate a GeometryFile, register Geometry, and export to XML -geometry_file = openmc.GeometryFile() -geometry_file.geometry = geometry -geometry_file.export_to_xml() +geometry.export_to_xml() ############################################################################### -# Exporting to OpenMC settings.xml File +# Exporting to OpenMC settings.xml file ############################################################################### -# Instantiate a SettingsFile, set all runtime parameters, and export to XML -settings_file = openmc.SettingsFile() +# Instantiate a Settings object, set all runtime parameters, and export to XML +settings_file = openmc.Settings() settings_file.energy_mode = "multi-group" settings_file.cross_sections = "./mg_cross_sections.xml" settings_file.batches = batches @@ -152,7 +148,7 @@ settings_file.source = openmc.source.Source(space=uniform_dist) settings_file.export_to_xml() ############################################################################### -# Exporting to OpenMC tallies.xml File +# Exporting to OpenMC tallies.xml file ############################################################################### # Instantiate a tally mesh @@ -177,8 +173,8 @@ tally.add_score('flux') tally.add_score('fission') tally.add_score('nu-fission') -# Instantiate a TalliesFile, register all Tallies, and export to XML -tallies_file = openmc.TalliesFile() +# Instantiate a Tallies object, register all Tallies, and export to XML +tallies_file = openmc.Tallies() tallies_file.add_mesh(mesh) tallies_file.add_tally(tally) tallies_file.export_to_xml() diff --git a/examples/python/reflective/build-xml.py b/examples/python/reflective/build-xml.py index 01a5c7815f..7d96e296da 100644 --- a/examples/python/reflective/build-xml.py +++ b/examples/python/reflective/build-xml.py @@ -12,7 +12,7 @@ particles = 10000 ############################################################################### -# Exporting to OpenMC materials.xml File +# Exporting to OpenMC materials.xml file ############################################################################### # Instantiate a Nuclides @@ -23,15 +23,15 @@ fuel = openmc.Material(material_id=1, name='fuel') fuel.set_density('g/cc', 4.5) fuel.add_nuclide(u235, 1.) -# Instantiate a MaterialsFile, register Material, and export to XML -materials_file = openmc.MaterialsFile() +# Instantiate a Materials object, register Material, and export to XML +materials_file = openmc.Materials() materials_file.default_xs = '71c' materials_file.add_material(fuel) materials_file.export_to_xml() ############################################################################### -# Exporting to OpenMC geometry.xml File +# Exporting to OpenMC geometry.xml file ############################################################################### # Instantiate Surfaces @@ -64,22 +64,18 @@ root = openmc.Universe(universe_id=0, name='root universe') # Register Cell with Universe root.add_cell(cell) -# Instantiate a Geometry and register the root Universe +# Instantiate a Geometry and register the root Universe, and export to XML geometry = openmc.Geometry() geometry.root_universe = root - -# Instantiate a GeometryFile, register Geometry, and export to XML -geometry_file = openmc.GeometryFile() -geometry_file.geometry = geometry -geometry_file.export_to_xml() +geometry.export_to_xml() ############################################################################### -# Exporting to OpenMC settings.xml File +# Exporting to OpenMC settings.xml file ############################################################################### -# Instantiate a SettingsFile, set all runtime parameters, and export to XML -settings_file = openmc.SettingsFile() +# Instantiate a Settings object, set all runtime parameters, and export to XML +settings_file = openmc.Settings() settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles diff --git a/openmc/cmfd.py b/openmc/cmfd.py index b9977a288d..d4cce2af5a 100644 --- a/openmc/cmfd.py +++ b/openmc/cmfd.py @@ -187,7 +187,7 @@ class CMFDMesh(object): return element -class CMFDFile(object): +class CMFD(object): """Parameters that control the use of coarse-mesh finite difference acceleration in OpenMC. This corresponds directly to the cmfd.xml input file. diff --git a/openmc/executor.py b/openmc/executor.py index 89bcc2e10d..9bb3477c50 100644 --- a/openmc/executor.py +++ b/openmc/executor.py @@ -27,7 +27,7 @@ def _run(command, output, cwd): return p.returncode -def plot(output=True, openmc_exec='openmc', cwd='.'): +def plot_geometry(output=True, openmc_exec='openmc', cwd='.'): """Run OpenMC in plotting mode Parameters diff --git a/openmc/geometry.py b/openmc/geometry.py index f5dfe97e4a..ed437f6e19 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -23,7 +23,6 @@ class Geometry(object): """ def __init__(self): - # Initialize Geometry class attributes self._root_universe = None self._offsets = {} @@ -42,6 +41,27 @@ class Geometry(object): self._root_universe = root_universe + def export_to_xml(self): + """Create a geometry.xml file that can be used for a simulation. + + """ + + # Clear OpenMC written IDs used to optimize XML generation + openmc.universe.WRITTEN_IDS = {} + + # Create XML representation + geometry_file = ET.Element("geometry") + self.root_universe.create_xml_subelement(geometry_file) + + # Clean the indentation in the file to be user-readable + sort_xml_elements(geometry_file) + clean_xml_indentation(geometry_file) + + # Write the XML Tree to the geometry.xml file + tree = ET.ElementTree(geometry_file) + tree.write("geometry.xml", xml_declaration=True, encoding='utf-8', + method="xml") + def get_cell_instance(self, path): """Return the instance number for the final cell in a geometry path. @@ -436,52 +456,3 @@ class Geometry(object): lattices = list(lattices) lattices.sort(key=lambda x: x.id) return lattices - - -class GeometryFile(object): - """Geometry file used for an OpenMC simulation. Corresponds directly to the - geometry.xml input file. - - Attributes - ---------- - geometry : openmc.Geometry - The geometry to be used - - """ - - def __init__(self): - # Initialize GeometryFile class attributes - self._geometry = None - self._geometry_file = ET.Element("geometry") - - @property - def geometry(self): - return self._geometry - - @geometry.setter - def geometry(self, geometry): - check_type('the geometry', geometry, Geometry) - self._geometry = geometry - - def export_to_xml(self): - """Create a geometry.xml file that can be used for a simulation. - - """ - - # Clear OpenMC written IDs used to optimize XML generation - openmc.universe.WRITTEN_IDS = {} - - # Reset xml element tree - self._geometry_file.clear() - - root_universe = self.geometry.root_universe - root_universe.create_xml_subelement(self._geometry_file) - - # Clean the indentation in the file to be user-readable - sort_xml_elements(self._geometry_file) - clean_xml_indentation(self._geometry_file) - - # Write the XML Tree to the geometry.xml file - tree = ET.ElementTree(self._geometry_file) - tree.write("geometry.xml", xml_declaration=True, - encoding='utf-8', method="xml") diff --git a/openmc/material.py b/openmc/material.py index 16af82439b..6b0a0f2468 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -642,8 +642,8 @@ class Material(object): return element -class MaterialsFile(object): - """Materials file used for an OpenMC simulation. Corresponds directly to the +class Materials(object): + """Materials used for an OpenMC simulation. Corresponds directly to the materials.xml input file. Attributes @@ -655,7 +655,6 @@ class MaterialsFile(object): """ def __init__(self): - # Initialize MaterialsFile class attributes self._materials = [] self._default_xs = None self._materials_file = ET.Element("materials") @@ -681,7 +680,7 @@ class MaterialsFile(object): if not isinstance(material, Material): msg = 'Unable to add a non-Material "{0}" to the ' \ - 'MaterialsFile'.format(material) + 'Materials instance'.format(material) raise ValueError(msg) self._materials.append(material) @@ -716,7 +715,7 @@ class MaterialsFile(object): if not isinstance(material, Material): msg = 'Unable to remove a non-Material "{0}" from the ' \ - 'MaterialsFile'.format(material) + 'Materials instance'.format(material) raise ValueError(msg) self._materials.remove(material) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 4de4bb48ac..ca7bf39cd8 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -354,8 +354,8 @@ class Library(object): Parameters ---------- - tallies_file : openmc.TalliesFile - A TalliesFile object to add each MGXS' tallies to generate a + tallies_file : openmc.Tallies + A Tallies object to add each MGXS' tallies to generate a "tallies.xml" input file for OpenMC merge : bool Indicate whether tallies should be merged when possible. Defaults @@ -363,7 +363,7 @@ class Library(object): """ - cv.check_type('tallies_file', tallies_file, openmc.TalliesFile) + cv.check_type('tallies_file', tallies_file, openmc.Tallies) # Add tallies from each MGXS for each domain and mgxs type for domain in self.domains: diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index c0b04fed1e..8db3c84ff7 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -647,7 +647,7 @@ class XSdata(object): return element -class MGXSLibraryFile(object): +class MGXSLibrary(object): """Multi-Group Cross Sections file used for an OpenMC simulation. Corresponds directly to the MG version of the cross_sections.xml input file. @@ -662,7 +662,6 @@ class MGXSLibraryFile(object): """ def __init__(self, energy_groups): - # Initialize MGXSLibraryFile class attributes self._xsdatas = [] self._energy_groups = energy_groups self._inverse_velocities = None @@ -701,12 +700,12 @@ class MGXSLibraryFile(object): # Check the type if not isinstance(xsdata, XSdata): msg = 'Unable to add a non-XSdata "{0}" to the ' \ - 'MGXSLibraryFile'.format(xsdata) + 'MGXSLibrary instance'.format(xsdata) raise ValueError(msg) # Make sure energy groups match. if xsdata.energy_groups != self._energy_groups: - msg = 'Energy groups of XSdata do not match that of MGXSLibraryFile!' + msg = 'Energy groups of XSdata do not match that of MGXSLibrary!' raise ValueError(msg) self._xsdatas.append(xsdata) @@ -741,7 +740,7 @@ class MGXSLibraryFile(object): if not isinstance(xsdata, XSdata): msg = 'Unable to remove a non-XSdata "{0}" from the ' \ - 'XSdatasFile'.format(xsdata) + 'MGXSLibrary instance'.format(xsdata) raise ValueError(msg) self._xsdatas.remove(xsdata) diff --git a/openmc/plots.py b/openmc/plots.py index 5e7c47743e..ae34678bba 100644 --- a/openmc/plots.py +++ b/openmc/plots.py @@ -401,14 +401,13 @@ class Plot(object): return element -class PlotsFile(object): +class Plots(object): """Plots file used for an OpenMC simulation. Corresponds directly to the plots.xml input file. """ def __init__(self): - # Initialize PlotsFile class attributes self._plots = [] self._plots_file = ET.Element("plots") @@ -423,7 +422,7 @@ class PlotsFile(object): """ if not isinstance(plot, Plot): - msg = 'Unable to add a non-Plot "{0}" to the PlotsFile'.format(plot) + msg = 'Unable to add a non-Plot "{0}" to the Plots instance'.format(plot) raise ValueError(msg) self._plots.append(plot) diff --git a/openmc/settings.py b/openmc/settings.py index 0be50bc563..ec38bf54c3 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -16,7 +16,7 @@ if sys.version_info[0] >= 3: basestring = str -class SettingsFile(object): +class Settings(object): """Settings file used for an OpenMC simulation. Corresponds directly to the settings.xml input file. diff --git a/openmc/tallies.py b/openmc/tallies.py index 2ee03c6752..1af3b12bc7 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -3419,14 +3419,13 @@ class Tally(object): return new_tally -class TalliesFile(object): +class Tallies(object): """Tallies file used for an OpenMC simulation. Corresponds directly to the tallies.xml input file. """ def __init__(self): - # Initialize TalliesFile class attributes self._tallies = [] self._meshes = [] self._tallies_file = ET.Element("tallies") @@ -3453,7 +3452,7 @@ class TalliesFile(object): """ if not isinstance(tally, Tally): - msg = 'Unable to add a non-Tally "{0}" to the TalliesFile'.format(tally) + msg = 'Unable to add a non-Tally "{0}" to the Tallies instance'.format(tally) raise ValueError(msg) if merge: @@ -3524,7 +3523,7 @@ class TalliesFile(object): """ if not isinstance(mesh, Mesh): - msg = 'Unable to add a non-Mesh "{0}" to the TalliesFile'.format(mesh) + msg = 'Unable to add a non-Mesh "{0}" to the Tallies instance'.format(mesh) raise ValueError(msg) self._meshes.append(mesh) diff --git a/tests/input_set.py b/tests/input_set.py index daff38ba1e..3be6c1db44 100644 --- a/tests/input_set.py +++ b/tests/input_set.py @@ -5,9 +5,9 @@ from openmc.stats import Box class InputSet(object): def __init__(self): - self.settings = openmc.SettingsFile() - self.materials = openmc.MaterialsFile() - self.geometry = openmc.GeometryFile() + self.settings = openmc.Settings() + self.materials = openmc.Materials() + self.geometry = openmc.Geometry() self.tallies = None self.plots = None @@ -550,11 +550,8 @@ class InputSet(object): root.add_cells((c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12)) - # Define the geometry file. - geometry = openmc.Geometry() - geometry.root_universe = root - - self.geometry.geometry = geometry + # Assign root universe to geometry + self.geometry.root_universe = root def build_default_settings(self): self.settings.batches = 10 @@ -630,12 +627,8 @@ class MGInputSet(InputSet): root.add_cells((c1,c2,c3)) - # Define the geometry file. - geometry = openmc.Geometry() - geometry.root_universe = root - - self.geometry.geometry = geometry - + # Assign root universe to geometry + self.geometry.root_universe = root def build_default_settings(self): self.settings.batches = 10 @@ -656,8 +649,3 @@ class MGInputSet(InputSet): plot.color = 'mat' self.plots.add_plot(plot) - - - - - diff --git a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py index fdb21db33c..94562e6d9e 100644 --- a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py +++ b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py @@ -7,8 +7,6 @@ import hashlib sys.path.insert(0, os.pardir) from testing_harness import PyAPITestHarness import openmc -from openmc.source import Source -from openmc.stats import Box class AsymmetricLatticeTestHarness(PyAPITestHarness): @@ -20,7 +18,7 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): self._input_set.build_default_materials_and_geometry() # Extract universes encapsulating fuel and water assemblies - geometry = self._input_set.geometry.geometry + geometry = self._input_set.geometry water = geometry.get_universes_by_name('water assembly (hot)')[0] fuel = geometry.get_universes_by_name('fuel assembly (hot)')[0] @@ -49,7 +47,7 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): root_univ.add_cell(root_cell) # Over-ride geometry in the input set with this 3x3 lattice - self._input_set.geometry.geometry.root_universe = root_univ + self._input_set.geometry.root_universe = root_univ # Initialize a "distribcell" filter for the fuel pin cell distrib_filter = openmc.Filter(type='distribcell', bins=[27]) @@ -60,7 +58,7 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): tally.add_score('nu-fission') # Initialize the tallies file - tallies_file = openmc.TalliesFile() + tallies_file = openmc.Tallies() tallies_file.add_tally(tally) # Assign the tallies file to the input set @@ -70,7 +68,7 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): self._input_set.build_default_settings() # Specify summary output and correct source sampling box - source = Source(space=Box([-32, -32, 0], [32, 32, 32])) + source = openmc.Source(space=openmc.stats.Box([-32, -32, 0], [32, 32, 32])) source.space.only_fissionable = True self._input_set.settings.source = source self._input_set.settings.output = {'summary': True} diff --git a/tests/test_distribmat/test_distribmat.py b/tests/test_distribmat/test_distribmat.py index a0608c108a..ded2863bdb 100644 --- a/tests/test_distribmat/test_distribmat.py +++ b/tests/test_distribmat/test_distribmat.py @@ -28,7 +28,7 @@ class DistribmatTestHarness(PyAPITestHarness): light_fuel.set_density('g/cc', 2.0) light_fuel.add_nuclide('U-235', 1.0) - mats_file = openmc.MaterialsFile() + mats_file = openmc.Materials() mats_file.default_xs = '71c' mats_file.add_materials([moderator, dense_fuel, light_fuel]) mats_file.export_to_xml() @@ -74,16 +74,14 @@ class DistribmatTestHarness(PyAPITestHarness): geometry = openmc.Geometry() geometry.root_universe = root_univ - geo_file = openmc.GeometryFile() - geo_file.geometry = geometry - geo_file.export_to_xml() + geometry.export_to_xml() #################### # Settings #################### - sets_file = openmc.SettingsFile() + sets_file = openmc.Settings() sets_file.batches = 5 sets_file.inactive = 0 sets_file.particles = 1000 @@ -96,7 +94,7 @@ class DistribmatTestHarness(PyAPITestHarness): # Plots #################### - plots_file = openmc.PlotsFile() + plots_file = openmc.Plots() plot = openmc.Plot(plot_id=1) plot.basis = 'xy' diff --git a/tests/test_mg_max_order/test_mg_max_order.py b/tests/test_mg_max_order/test_mg_max_order.py index 2f5ee4e4e6..2c4db58df0 100644 --- a/tests/test_mg_max_order/test_mg_max_order.py +++ b/tests/test_mg_max_order/test_mg_max_order.py @@ -68,7 +68,7 @@ class MGNuclideInputSet(MGInputSet): geometry = openmc.Geometry() geometry.root_universe = root - self.geometry.geometry = geometry + self.geometry = geometry class MGMaxOrderTestHarness(PyAPITestHarness): def __init__(self, statepoint_name, tallies_present, mg=False): diff --git a/tests/test_mg_nuclide/test_mg_nuclide.py b/tests/test_mg_nuclide/test_mg_nuclide.py index deb784bad9..0fa7184a32 100644 --- a/tests/test_mg_nuclide/test_mg_nuclide.py +++ b/tests/test_mg_nuclide/test_mg_nuclide.py @@ -67,7 +67,7 @@ class MGNuclideInputSet(MGInputSet): geometry = openmc.Geometry() geometry.root_universe = root - self.geometry.geometry = geometry + self.geometry = geometry class MGNuclideTestHarness(PyAPITestHarness): def __init__(self, statepoint_name, tallies_present, mg=False): diff --git a/tests/test_mg_tallies/test_mg_tallies.py b/tests/test_mg_tallies/test_mg_tallies.py index c54fb4d32d..ffc57f9e9e 100644 --- a/tests/test_mg_tallies/test_mg_tallies.py +++ b/tests/test_mg_tallies/test_mg_tallies.py @@ -41,7 +41,7 @@ class MGTalliesTestHarness(PyAPITestHarness): tally2.add_score('scatter') tally2.add_score('nu-scatter') - self._input_set.tallies = openmc.TalliesFile() + self._input_set.tallies = openmc.Tallies() self._input_set.tallies.add_mesh(mesh) self._input_set.tallies.add_tally(tally1) self._input_set.tallies.add_tally(tally2) diff --git a/tests/test_mgxs_library_condense/test_mgxs_library_condense.py b/tests/test_mgxs_library_condense/test_mgxs_library_condense.py index 82ce3acabc..97bb853b62 100644 --- a/tests/test_mgxs_library_condense/test_mgxs_library_condense.py +++ b/tests/test_mgxs_library_condense/test_mgxs_library_condense.py @@ -23,7 +23,7 @@ class MGXSTestHarness(PyAPITestHarness): energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, 20.]) # Initialize MGXS Library for a few cross section types - self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry.geometry) + self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = False self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi'] @@ -32,7 +32,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.build_library() # Initialize a tallies file - self._input_set.tallies = openmc.TalliesFile() + self._input_set.tallies = openmc.Tallies() self.mgxs_lib.add_to_tallies_file(self._input_set.tallies, merge=False) self._input_set.tallies.export_to_xml() diff --git a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py index 1de21a6037..6812661860 100644 --- a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py +++ b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py @@ -24,7 +24,7 @@ class MGXSTestHarness(PyAPITestHarness): # Initialize MGXS Library for a few cross section types # for one material-filled cell in the geometry - self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry.geometry) + self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = False self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi'] @@ -35,7 +35,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.build_library() # Initialize a tallies file - self._input_set.tallies = openmc.TalliesFile() + self._input_set.tallies = openmc.Tallies() self.mgxs_lib.add_to_tallies_file(self._input_set.tallies, merge=False) self._input_set.tallies.export_to_xml() diff --git a/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py b/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py index 642073104b..30be46b4cc 100644 --- a/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py +++ b/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py @@ -24,7 +24,7 @@ class MGXSTestHarness(PyAPITestHarness): energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, 20.]) # Initialize MGXS Library for a few cross section types - self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry.geometry) + self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = False self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi'] @@ -33,7 +33,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.build_library() # Initialize a tallies file - self._input_set.tallies = openmc.TalliesFile() + self._input_set.tallies = openmc.Tallies() self.mgxs_lib.add_to_tallies_file(self._input_set.tallies, merge=False) self._input_set.tallies.export_to_xml() @@ -51,7 +51,7 @@ class MGXSTestHarness(PyAPITestHarness): # Load the MGXS library from the statepoint self.mgxs_lib.load_from_statepoint(sp) - + # Export the MGXS Library to an HDF5 file self.mgxs_lib.build_hdf5_store(directory='.') @@ -67,7 +67,7 @@ class MGXSTestHarness(PyAPITestHarness): outstr += str(f[key][...]) + '\n' key = 'material/{0}/{1}/std. dev.'.format(domain.id, mgxs_type) outstr += str(f[key][...]) + '\n' - + # Close the MGXS HDF5 file f.close() diff --git a/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py b/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py index 2afa9039e8..381b5b87c2 100644 --- a/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py +++ b/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py @@ -23,7 +23,7 @@ class MGXSTestHarness(PyAPITestHarness): energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, 20.]) # Initialize MGXS Library for a few cross section types - self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry.geometry) + self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = False self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi'] @@ -32,7 +32,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.build_library() # Initialize a tallies file - self._input_set.tallies = openmc.TalliesFile() + self._input_set.tallies = openmc.Tallies() self.mgxs_lib.add_to_tallies_file(self._input_set.tallies, merge=False) self._input_set.tallies.export_to_xml() diff --git a/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py b/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py index 173043cf04..c3e4f5f770 100644 --- a/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py +++ b/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py @@ -23,7 +23,7 @@ class MGXSTestHarness(PyAPITestHarness): energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, 20.]) # Initialize MGXS Library for a few cross section types - self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry.geometry) + self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = True self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi'] @@ -32,7 +32,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.build_library() # Initialize a tallies file - self._input_set.tallies = openmc.TalliesFile() + self._input_set.tallies = openmc.Tallies() self.mgxs_lib.add_to_tallies_file(self._input_set.tallies, merge=False) self._input_set.tallies.export_to_xml() diff --git a/tests/test_plot/test_plot.py b/tests/test_plot/test_plot.py index e40cef49c0..606a1fd647 100644 --- a/tests/test_plot/test_plot.py +++ b/tests/test_plot/test_plot.py @@ -19,7 +19,7 @@ class PlotTestHarness(TestHarness): self._plot_names = plot_names def _run_openmc(self): - returncode = openmc.plot(openmc_exec=self._opts.exe) + returncode = openmc.plot_geometry(openmc_exec=self._opts.exe) assert returncode == 0, 'OpenMC did not exit successfully.' def _test_output_created(self): diff --git a/tests/test_resonance_scattering/test_resonance_scattering.py b/tests/test_resonance_scattering/test_resonance_scattering.py index d977488bfe..5cecfedc45 100644 --- a/tests/test_resonance_scattering/test_resonance_scattering.py +++ b/tests/test_resonance_scattering/test_resonance_scattering.py @@ -17,7 +17,7 @@ class ResonanceScatteringTestHarness(PyAPITestHarness): mat.add_nuclide('Pu-239', 0.02) mat.add_nuclide('H-1', 20.0) - mats_file = openmc.MaterialsFile() + mats_file = openmc.Materials() mats_file.default_xs = '71c' mats_file.add_material(mat) mats_file.export_to_xml() @@ -35,9 +35,7 @@ class ResonanceScatteringTestHarness(PyAPITestHarness): geometry = openmc.Geometry() geometry.root_universe = root_univ - geo_file = openmc.GeometryFile() - geo_file.geometry = geometry - geo_file.export_to_xml() + geometry.export_to_xml() # Settings nuclide = openmc.Nuclide('U-238', '71c') @@ -67,7 +65,7 @@ class ResonanceScatteringTestHarness(PyAPITestHarness): res_scatt_ares.E_min = 1e-6 res_scatt_ares.E_max = 210e-6 - sets_file = openmc.SettingsFile() + sets_file = openmc.Settings() sets_file.batches = 10 sets_file.inactive = 5 sets_file.particles = 1000 diff --git a/tests/test_source/test_source.py b/tests/test_source/test_source.py index 9d303b06bc..1e41bd10e7 100644 --- a/tests/test_source/test_source.py +++ b/tests/test_source/test_source.py @@ -9,8 +9,6 @@ import numpy as np sys.path.insert(0, os.pardir) from testing_harness import PyAPITestHarness import openmc -import openmc.stats -from openmc.source import Source class SourceTestHarness(PyAPITestHarness): @@ -18,7 +16,7 @@ class SourceTestHarness(PyAPITestHarness): mat1 = openmc.Material(material_id=1) mat1.set_density('g/cm3', 4.5) mat1.add_nuclide(openmc.Nuclide('U-235', '71c'), 1.0) - materials = openmc.MaterialsFile() + materials = openmc.Materials() materials.add_material(mat1) materials.export_to_xml() @@ -31,9 +29,7 @@ class SourceTestHarness(PyAPITestHarness): root.add_cell(inside_sphere) geometry = openmc.Geometry() geometry.root_universe = root - geometry_xml = openmc.GeometryFile() - geometry_xml.geometry = geometry - geometry_xml.export_to_xml() + geometry.export_to_xml() # Create an array of different sources x_dist = openmc.stats.Uniform(-3., 3.) @@ -56,11 +52,11 @@ class SourceTestHarness(PyAPITestHarness): energy2 = openmc.stats.Watt(0.988, 2.249) energy3 = openmc.stats.Tabular(E, p, interpolation='histogram') - source1 = Source(spatial1, angle1, energy1, strength=0.5) - source2 = Source(spatial2, angle2, energy2, strength=0.3) - source3 = Source(spatial3, angle3, energy3, strength=0.2) + source1 = openmc.Source(spatial1, angle1, energy1, strength=0.5) + source2 = openmc.Source(spatial2, angle2, energy2, strength=0.3) + source3 = openmc.Source(spatial3, angle3, energy3, strength=0.2) - settings = openmc.SettingsFile() + settings = openmc.Settings() settings.batches = 10 settings.inactive = 5 settings.particles = 1000 diff --git a/tests/test_tallies/test_tallies.py b/tests/test_tallies/test_tallies.py index 81e8641dec..bb0273589e 100644 --- a/tests/test_tallies/test_tallies.py +++ b/tests/test_tallies/test_tallies.py @@ -4,7 +4,7 @@ import os import sys sys.path.insert(0, os.pardir) from testing_harness import PyAPITestHarness -from openmc import Filter, Mesh, Tally, TalliesFile +from openmc import Filter, Mesh, Tally, Tallies from openmc.source import Source from openmc.stats import Box @@ -170,7 +170,7 @@ class TalliesTestHarness(PyAPITestHarness): all_nuclide_tallies[0].estimator = 'tracklength' all_nuclide_tallies[0].estimator = 'collision' - self._input_set.tallies = TalliesFile() + self._input_set.tallies = Tallies() self._input_set.tallies.add_tally(azimuthal_tally1) self._input_set.tallies.add_tally(azimuthal_tally2) self._input_set.tallies.add_tally(azimuthal_tally3) diff --git a/tests/test_tally_aggregation/test_tally_aggregation.py b/tests/test_tally_aggregation/test_tally_aggregation.py index 7d682b6986..009a7dc09c 100644 --- a/tests/test_tally_aggregation/test_tally_aggregation.py +++ b/tests/test_tally_aggregation/test_tally_aggregation.py @@ -16,7 +16,7 @@ class TallyAggregationTestHarness(PyAPITestHarness): self._input_set.settings.output = {'summary': True} # Initialize the tallies file - tallies_file = openmc.TalliesFile() + tallies_file = openmc.Tallies() # Initialize the nuclides u235 = openmc.Nuclide('U-235') diff --git a/tests/test_tally_arithmetic/test_tally_arithmetic.py b/tests/test_tally_arithmetic/test_tally_arithmetic.py index cf8d012e8c..ffea74603c 100644 --- a/tests/test_tally_arithmetic/test_tally_arithmetic.py +++ b/tests/test_tally_arithmetic/test_tally_arithmetic.py @@ -16,7 +16,7 @@ class TallyArithmeticTestHarness(PyAPITestHarness): self._input_set.settings.output = {'summary': True} # Initialize the tallies file - tallies_file = openmc.TalliesFile() + tallies_file = openmc.Tallies() # Initialize the nuclides u235 = openmc.Nuclide('U-235') diff --git a/tests/test_tally_slice_merge/test_tally_slice_merge.py b/tests/test_tally_slice_merge/test_tally_slice_merge.py index 79acf182d6..933fdf6fa3 100644 --- a/tests/test_tally_slice_merge/test_tally_slice_merge.py +++ b/tests/test_tally_slice_merge/test_tally_slice_merge.py @@ -17,7 +17,7 @@ class TallySliceMergeTestHarness(PyAPITestHarness): self._input_set.settings.output = {'summary': True} # Initialize the tallies file - tallies_file = openmc.TalliesFile() + tallies_file = openmc.Tallies() # Define nuclides and scores to add to both tallies self.nuclides = ['U-235', 'U-238'] @@ -69,8 +69,8 @@ class TallySliceMergeTestHarness(PyAPITestHarness): for nuclide in self.nuclides: distribcell_tally.add_nuclide(nuclide) - # Add tallies to a TalliesFile - tallies_file = openmc.TalliesFile() + # Add tallies to a Tallies object + tallies_file = openmc.Tallies() tallies_file.add_tally(tallies[0]) tallies_file.add_tally(distribcell_tally) @@ -95,7 +95,7 @@ class TallySliceMergeTestHarness(PyAPITestHarness): # Slice the tallies by cell filter bins cell_filter_prod = itertools.product(tallies, self.cell_filters) - tallies = map(lambda tf: tf[0].get_slice(filters=[tf[1].type], + tallies = map(lambda tf: tf[0].get_slice(filters=[tf[1].type], filter_bins=[tf[1].get_bin(0)]), cell_filter_prod) # Slice the tallies by energy filter bins @@ -133,11 +133,11 @@ class TallySliceMergeTestHarness(PyAPITestHarness): # Extract the distribcell tally distribcell_tally = sp.get_tally(name='distribcell tally') - # Sum up a few subdomains from the distribcell tally - sum1 = distribcell_tally.summation(filter_type='distribcell', + # Sum up a few subdomains from the distribcell tally + sum1 = distribcell_tally.summation(filter_type='distribcell', filter_bins=[0,100,2000,30000]) # Sum up a few subdomains from the distribcell tally - sum2 = distribcell_tally.summation(filter_type='distribcell', + sum2 = distribcell_tally.summation(filter_type='distribcell', filter_bins=[500,5000,50000]) # Merge the distribcell tally slices From 68f7de13155231cf88213b19d9dd7e0aba8571ae Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 25 Apr 2016 10:44:20 -0500 Subject: [PATCH 448/650] Update Jupyter notebooks --- .../pythonapi/examples/mgxs-part-i.ipynb | 27 ++++++-------- .../pythonapi/examples/mgxs-part-ii.ipynb | 29 ++++++--------- .../pythonapi/examples/mgxs-part-iii.ipynb | 37 ++++++++----------- .../examples/pandas-dataframes.ipynb | 37 ++++++++----------- .../pythonapi/examples/post-processing.ipynb | 27 ++++++-------- .../pythonapi/examples/tally-arithmetic.ipynb | 29 ++++++--------- 6 files changed, 78 insertions(+), 108 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index de66cbb837..c7a5b2ffa3 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -201,7 +201,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "With our material, we can now create a `MaterialsFile` object that can be exported to an actual XML file." + "With our material, we can now create a `Materials` object that can be exported to an actual XML file." ] }, { @@ -212,8 +212,8 @@ }, "outputs": [], "source": [ - "# Instantiate a MaterialsFile, register all Materials, and export to XML\n", - "materials_file = openmc.MaterialsFile()\n", + "# Instantiate a Materials object, register all Materials, and export to XML\n", + "materials_file = openmc.Materials()\n", "materials_file.default_xs = '71c'\n", "materials_file.add_material(inf_medium)\n", "materials_file.export_to_xml()" @@ -290,7 +290,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We now must create a geometry that is assigned a root universe, put the geometry into a `GeometryFile` object, and export it to XML." + "We now must create a geometry that is assigned a root universe and export it to XML." ] }, { @@ -305,12 +305,8 @@ "openmc_geometry = openmc.Geometry()\n", "openmc_geometry.root_universe = root_universe\n", "\n", - "# Instantiate a GeometryFile\n", - "geometry_file = openmc.GeometryFile()\n", - "geometry_file.geometry = openmc_geometry\n", - "\n", "# Export to \"geometry.xml\"\n", - "geometry_file.export_to_xml()" + "openmc_geometry.export_to_xml()" ] }, { @@ -333,8 +329,8 @@ "inactive = 10\n", "particles = 2500\n", "\n", - "# Instantiate a SettingsFile\n", - "settings_file = openmc.SettingsFile()\n", + "# Instantiate a Settings object\n", + "settings_file = openmc.Settings()\n", "settings_file.batches = batches\n", "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", @@ -455,7 +451,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The `Absorption` object includes tracklength tallies for the 'absorption' and 'flux' scores in the 2-group structure in cell 1. Now that each `MGXS` object contains the tallies that it needs, we must add these tallies to a `TalliesFile` object to generate the \"tallies.xml\" input file for OpenMC." + "The `Absorption` object includes tracklength tallies for the 'absorption' and 'flux' scores in the 2-group structure in cell 1. Now that each `MGXS` object contains the tallies that it needs, we must add these tallies to a `Tallies` object to generate the \"tallies.xml\" input file for OpenMC." ] }, { @@ -466,8 +462,8 @@ }, "outputs": [], "source": [ - "# Instantiate an empty TalliesFile\n", - "tallies_file = openmc.TalliesFile()\n", + "# Instantiate an empty Tallies object\n", + "tallies_file = openmc.Tallies()\n", "\n", "# Add total tallies to the tallies file\n", "for tally in total.tallies.values():\n", @@ -644,8 +640,7 @@ ], "source": [ "# Run OpenMC\n", - "executor = openmc.Executor()\n", - "executor.run_simulation()" + "openmc.run()" ] }, { diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index 6ed5cd38d8..49e301f5b0 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -122,7 +122,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "With our materials, we can now create a `MaterialsFile` object that can be exported to an actual XML file." + "With our materials, we can now create a `Materials` object that can be exported to an actual XML file." ] }, { @@ -133,8 +133,8 @@ }, "outputs": [], "source": [ - "# Instantiate a MaterialsFile, add Materials\n", - "materials_file = openmc.MaterialsFile()\n", + "# Instantiate a Materials object, add Materials\n", + "materials_file = openmc.Materials()\n", "materials_file.add_material(fuel)\n", "materials_file.add_material(water)\n", "materials_file.add_material(zircaloy)\n", @@ -238,7 +238,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We now must create a geometry that is assigned a root universe, put the geometry into a `GeometryFile` object, and export it to XML." + "We now must create a geometry that is assigned a root universe and export it to XML." ] }, { @@ -253,12 +253,8 @@ "openmc_geometry = openmc.Geometry()\n", "openmc_geometry.root_universe = root_universe\n", "\n", - "# Instantiate a GeometryFile\n", - "geometry_file = openmc.GeometryFile()\n", - "geometry_file.geometry = openmc_geometry\n", - "\n", "# Export to \"geometry.xml\"\n", - "geometry_file.export_to_xml()" + "openmc_geometry.export_to_xml()" ] }, { @@ -281,8 +277,8 @@ "inactive = 10\n", "particles = 10000\n", "\n", - "# Instantiate a SettingsFile\n", - "settings_file = openmc.SettingsFile()\n", + "# Instantiate a Settings object\n", + "settings_file = openmc.Settings()\n", "settings_file.batches = batches\n", "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", @@ -396,8 +392,8 @@ }, "outputs": [], "source": [ - "# Instantiate an empty TalliesFile\n", - "tallies_file = openmc.TalliesFile()\n", + "# Instantiate an empty Tallies object\n", + "tallies_file = openmc.Tallies()\n", "\n", "# Iterate over all cells and cross section types\n", "for cell in openmc_cells:\n", @@ -607,8 +603,7 @@ ], "source": [ "# Run OpenMC\n", - "executor = openmc.Executor()\n", - "executor.run_simulation(output=True)" + "openmc.run(output=True)" ] }, { @@ -1360,7 +1355,7 @@ ], "source": [ "# Generate tracks for OpenMOC\n", - "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=128, spacing=0.1)\n", + "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=128, azim_spacing=0.1)\n", "track_generator.generateTracks()\n", "\n", "# Run OpenMOC\n", @@ -1699,7 +1694,7 @@ ], "source": [ "# Generate tracks for OpenMOC\n", - "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=128, spacing=0.1)\n", + "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=128, azim_spacing=0.1)\n", "track_generator.generateTracks()\n", "\n", "# Run OpenMOC\n", diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index 5fccc4f03d..3a3533ffec 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -122,7 +122,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "With our three materials, we can now create a `MaterialsFile` object that can be exported to an actual XML file." + "With our three materials, we can now create a `Materials` object that can be exported to an actual XML file." ] }, { @@ -133,8 +133,8 @@ }, "outputs": [], "source": [ - "# Instantiate a MaterialsFile, add Materials\n", - "materials_file = openmc.MaterialsFile()\n", + "# Instantiate a Materials object, add Materials\n", + "materials_file = openmc.Materials()\n", "materials_file.add_material(fuel)\n", "materials_file.add_material(water)\n", "materials_file.add_material(zircaloy)\n", @@ -331,7 +331,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We now must create a geometry that is assigned a root universe, put the geometry into a `GeometryFile` object, and export it to XML." + "We now must create a geometry that is assigned a root universe and export it to XML." ] }, { @@ -355,12 +355,8 @@ }, "outputs": [], "source": [ - "# Instantiate a GeometryFile\n", - "geometry_file = openmc.GeometryFile()\n", - "geometry_file.geometry = geometry\n", - "\n", "# Export to \"geometry.xml\"\n", - "geometry_file.export_to_xml()" + "geometry.export_to_xml()" ] }, { @@ -383,8 +379,8 @@ "inactive = 10\n", "particles = 2500\n", "\n", - "# Instantiate a SettingsFile\n", - "settings_file = openmc.SettingsFile()\n", + "# Instantiate a Settings object\n", + "settings_file = openmc.Settings()\n", "settings_file.batches = batches\n", "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", @@ -403,7 +399,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Let us also create a `PlotsFile` that we can use to verify that our fuel assembly geometry was created successfully." + "Let us also create a `Plots` file that we can use to verify that our fuel assembly geometry was created successfully." ] }, { @@ -422,8 +418,8 @@ "plot.width = [-10.71*2, -10.71*2]\n", "plot.color = 'mat'\n", "\n", - "# Instantiate a PlotsFile, add Plot, and export to \"plots.xml\"\n", - "plot_file = openmc.PlotsFile()\n", + "# Instantiate a Plots object, add Plot, and export to \"plots.xml\"\n", + "plot_file = openmc.Plots()\n", "plot_file.add_plot(plot)\n", "plot_file.export_to_xml()" ] @@ -455,8 +451,7 @@ ], "source": [ "# Run openmc in plotting mode\n", - "executor = openmc.Executor()\n", - "executor.plot_geometry(output=False)" + "openmc.plot_geometry(output=False)" ] }, { @@ -643,7 +638,7 @@ "source": [ "The tallies can now be export to a \"tallies.xml\" input file for OpenMC. \n", "\n", - "**NOTE**: At this point the `Library` has constructed nearly 100 distinct `Tally` objects. The overhead to tally in OpenMC scales as $O(N)$ for $N$ tallies, which can become a bottleneck for large tally datasets. To compensate for this, the Python API's `Tally`, `Filter` and `TalliesFile` classes allow for the smart *merging* of tallies when possible. The `Library` class supports this runtime optimization with the use of the optional `merge` paramter (`False` by default) for the `Library.add_to_tallies_file(...)` method, as shown below." + "**NOTE**: At this point the `Library` has constructed nearly 100 distinct `Tally` objects. The overhead to tally in OpenMC scales as $O(N)$ for $N$ tallies, which can become a bottleneck for large tally datasets. To compensate for this, the Python API's `Tally`, `Filter` and `Tallies` classes allow for the smart *merging* of tallies when possible. The `Library` class supports this runtime optimization with the use of the optional `merge` paramter (`False` by default) for the `Library.add_to_tallies_file(...)` method, as shown below." ] }, { @@ -655,7 +650,7 @@ "outputs": [], "source": [ "# Create a \"tallies.xml\" file for the MGXS Library\n", - "tallies_file = openmc.TalliesFile()\n", + "tallies_file = openmc.Tallies()\n", "mgxs_lib.add_to_tallies_file(tallies_file, merge=True)" ] }, @@ -690,7 +685,7 @@ "tally.filters = [mesh_filter]\n", "tally.scores = ['fission', 'nu-fission']\n", "\n", - "# Add mesh and Tally to TalliesFile\n", + "# Add mesh and tally to Tallies\n", "tallies_file.add_mesh(mesh)\n", "tallies_file.add_tally(tally)" ] @@ -860,7 +855,7 @@ ], "source": [ "# Run OpenMC\n", - "executor.run_simulation()" + "openmc.run()" ] }, { @@ -1449,7 +1444,7 @@ ], "source": [ "# Generate tracks for OpenMOC\n", - "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=32, spacing=0.1)\n", + "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=32, azim_spacing=0.1)\n", "track_generator.generateTracks()\n", "\n", "# Run OpenMOC\n", diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index 388e4aaa69..b0f2f6b133 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -108,8 +108,8 @@ }, "outputs": [], "source": [ - "# Instantiate a MaterialsFile, add Materials\n", - "materials_file = openmc.MaterialsFile()\n", + "# Instantiate a Materials object, add Materials\n", + "materials_file = openmc.Materials()\n", "materials_file.add_material(fuel)\n", "materials_file.add_material(water)\n", "materials_file.add_material(zircaloy)\n", @@ -239,7 +239,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We now must create a geometry that is assigned a root universe, put the geometry into a `GeometryFile` object, and export it to XML." + "We now must create a geometry that is assigned a root universe and export it to XML." ] }, { @@ -263,12 +263,8 @@ }, "outputs": [], "source": [ - "# Instantiate a GeometryFile\n", - "geometry_file = openmc.GeometryFile()\n", - "geometry_file.geometry = geometry\n", - "\n", "# Export to \"geometry.xml\"\n", - "geometry_file.export_to_xml()" + "geometry.export_to_xml()" ] }, { @@ -292,8 +288,8 @@ "inactive = 5\n", "particles = 2500\n", "\n", - "# Instantiate a SettingsFile\n", - "settings_file = openmc.SettingsFile()\n", + "# Instantiate a Settings object\n", + "settings_file = openmc.Settings()\n", "settings_file.batches = min_batches\n", "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", @@ -333,8 +329,8 @@ "plot.pixels = [250, 250]\n", "plot.color = 'mat'\n", "\n", - "# Instantiate a PlotsFile, add Plot, and export to \"plots.xml\"\n", - "plot_file = openmc.PlotsFile()\n", + "# Instantiate a Plots object, add Plot, and export to \"plots.xml\"\n", + "plot_file = openmc.Plots()\n", "plot_file.add_plot(plot)\n", "plot_file.export_to_xml()" ] @@ -366,8 +362,7 @@ ], "source": [ "# Run openmc in plotting mode\n", - "executor = openmc.Executor()\n", - "executor.plot_geometry(output=False)" + "openmc.plot_geometry(output=False)" ] }, { @@ -412,8 +407,8 @@ }, "outputs": [], "source": [ - "# Instantiate an empty TalliesFile\n", - "tallies_file = openmc.TalliesFile()\n", + "# Instantiate an empty Tallies object\n", + "tallies_file = openmc.Tallies()\n", "tallies_file._tallies = []" ] }, @@ -453,7 +448,7 @@ "tally.filters = [mesh_filter, energy_filter]\n", "tally.scores = ['fission', 'nu-fission']\n", "\n", - "# Add mesh and Tally to TalliesFile\n", + "# Add mesh and Tally to Tallies\n", "tallies_file.add_mesh(mesh)\n", "tallies_file.add_tally(tally)" ] @@ -482,7 +477,7 @@ "tally.scores = ['scatter-y2']\n", "tally.nuclides = [u235, u238]\n", "\n", - "# Add mesh and tally to TalliesFile\n", + "# Add mesh and tally to Tallies\n", "tallies_file.add_tally(tally)" ] }, @@ -514,7 +509,7 @@ "tally.scores = ['absorption', 'scatter']\n", "tally.triggers = [trigger]\n", "\n", - "# Add mesh and tally to TalliesFile\n", + "# Add mesh and tally to Tallies\n", "tallies_file.add_tally(tally)" ] }, @@ -669,8 +664,8 @@ "# Remove old HDF5 (summary, statepoint) files\n", "!rm statepoint.*\n", "\n", - "# Run OpenMC with MPI!\n", - "executor.run_simulation()" + "# Run OpenMC!\n", + "openmc.run()" ] }, { diff --git a/docs/source/pythonapi/examples/post-processing.ipynb b/docs/source/pythonapi/examples/post-processing.ipynb index 0dc18d5a29..ce9209b03c 100644 --- a/docs/source/pythonapi/examples/post-processing.ipynb +++ b/docs/source/pythonapi/examples/post-processing.ipynb @@ -104,8 +104,8 @@ }, "outputs": [], "source": [ - "# Instantiate a MaterialsFile, add Materials\n", - "materials_file = openmc.MaterialsFile()\n", + "# Instantiate a Materials object, add Materials\n", + "materials_file = openmc.Materials()\n", "materials_file.add_material(fuel)\n", "materials_file.add_material(water)\n", "materials_file.add_material(zircaloy)\n", @@ -236,12 +236,8 @@ }, "outputs": [], "source": [ - "# Instantiate a GeometryFile\n", - "geometry_file = openmc.GeometryFile()\n", - "geometry_file.geometry = geometry\n", - "\n", "# Export to \"geometry.xml\"\n", - "geometry_file.export_to_xml()" + "geometry.export_to_xml()" ] }, { @@ -264,8 +260,8 @@ "inactive = 10\n", "particles = 5000\n", "\n", - "# Instantiate a SettingsFile\n", - "settings_file = openmc.SettingsFile()\n", + "# Instantiate a Settings object\n", + "settings_file = openmc.Settings()\n", "settings_file.batches = batches\n", "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", @@ -302,8 +298,8 @@ "plot.pixels = [250, 250]\n", "plot.color = 'mat'\n", "\n", - "# Instantiate a PlotsFile, add Plot, and export to \"plots.xml\"\n", - "plot_file = openmc.PlotsFile()\n", + "# Instantiate a Plots object, add Plot, and export to \"plots.xml\"\n", + "plot_file = openmc.Plots()\n", "plot_file.add_plot(plot)\n", "plot_file.export_to_xml()" ] @@ -335,8 +331,7 @@ ], "source": [ "# Run openmc in plotting mode\n", - "executor = openmc.Executor()\n", - "executor.plot_geometry(output=False)" + "openmc.plot_geometry(output=False)" ] }, { @@ -381,8 +376,8 @@ }, "outputs": [], "source": [ - "# Instantiate an empty TalliesFile\n", - "tallies_file = openmc.TalliesFile()" + "# Instantiate an empty Tallies object\n", + "tallies_file = openmc.Tallies()" ] }, { @@ -634,7 +629,7 @@ ], "source": [ "# Run OpenMC!\n", - "executor.run_simulation()" + "openmc.run()" ] }, { diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index 0948428959..81334efc26 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -126,8 +126,8 @@ }, "outputs": [], "source": [ - "# Instantiate a MaterialsFile, add Materials\n", - "materials_file = openmc.MaterialsFile()\n", + "# Instantiate a Materials object, add Materials\n", + "materials_file = openmc.Materials()\n", "materials_file.add_material(fuel)\n", "materials_file.add_material(water)\n", "materials_file.add_material(zircaloy)\n", @@ -258,12 +258,8 @@ }, "outputs": [], "source": [ - "# Instantiate a GeometryFile\n", - "geometry_file = openmc.GeometryFile()\n", - "geometry_file.geometry = geometry\n", - "\n", "# Export to \"geometry.xml\"\n", - "geometry_file.export_to_xml()" + "geometry.export_to_xml()" ] }, { @@ -286,8 +282,8 @@ "inactive = 5\n", "particles = 2500\n", "\n", - "# Instantiate a SettingsFile\n", - "settings_file = openmc.SettingsFile()\n", + "# Instantiate a Settings object\n", + "settings_file = openmc.Settings()\n", "settings_file.batches = batches\n", "settings_file.inactive = inactive\n", "settings_file.particles = particles\n", @@ -325,8 +321,8 @@ "plot.pixels = [250, 250]\n", "plot.color = 'mat'\n", "\n", - "# Instantiate a PlotsFile, add Plot, and export to \"plots.xml\"\n", - "plot_file = openmc.PlotsFile()\n", + "# Instantiate a Plots object, add Plot, and export to \"plots.xml\"\n", + "plot_file = openmc.Plots()\n", "plot_file.add_plot(plot)\n", "plot_file.export_to_xml()" ] @@ -358,8 +354,7 @@ ], "source": [ "# Run openmc in plotting mode\n", - "executor = openmc.Executor()\n", - "executor.plot_geometry(output=False)" + "openmc.plot_geometry(output=False)" ] }, { @@ -404,8 +399,8 @@ }, "outputs": [], "source": [ - "# Instantiate an empty TalliesFile\n", - "tallies_file = openmc.TalliesFile()" + "# Instantiate an empty Tallies object\n", + "tallies_file = openmc.Tallies()" ] }, { @@ -673,8 +668,8 @@ "# Remove old HDF5 (summary, statepoint) files\n", "!rm statepoint.*\n", "\n", - "# Run OpenMC with MPI!\n", - "executor.run_simulation()" + "# Run OpenMC!\n", + "openmc.run()" ] }, { From 3da96a89be182d72cec65f6ce448fdc7780ee76d Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 25 Apr 2016 12:43:38 -0500 Subject: [PATCH 449/650] Fix assignment of universe IDs for lattices --- openmc/lattice.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/openmc/lattice.py b/openmc/lattice.py index 7e78abf068..baccbad909 100644 --- a/openmc/lattice.py +++ b/openmc/lattice.py @@ -7,7 +7,7 @@ import sys import numpy as np import openmc.checkvalue as cv -from openmc.universe import Universe, AUTO_UNIVERSE_ID +import openmc if sys.version_info[0] >= 3: basestring = str @@ -93,9 +93,8 @@ class Lattice(object): @id.setter def id(self, lattice_id): if lattice_id is None: - global AUTO_UNIVERSE_ID - self._id = AUTO_UNIVERSE_ID - AUTO_UNIVERSE_ID += 1 + self._id = openmc.universe.AUTO_UNIVERSE_ID + openmc.universe.AUTO_UNIVERSE_ID += 1 else: cv.check_type('lattice ID', lattice_id, Integral) cv.check_greater_than('lattice ID', lattice_id, 0, equality=True) @@ -111,12 +110,12 @@ class Lattice(object): @outer.setter def outer(self, outer): - cv.check_type('outer universe', outer, Universe) + cv.check_type('outer universe', outer, openmc.Universe) self._outer = outer @universes.setter def universes(self, universes): - cv.check_iterable_type('lattice universes', universes, Universe, + cv.check_iterable_type('lattice universes', universes, openmc.Universe, min_depth=2, max_depth=3) self._universes = np.asarray(universes) @@ -127,20 +126,20 @@ class Lattice(object): ------- universes : collections.OrderedDict Dictionary whose keys are universe IDs and values are - :class:`Universe` instances + :class:`openmc.Universe` instances """ univs = OrderedDict() for k in range(len(self._universes)): for j in range(len(self._universes[k])): - if isinstance(self._universes[k][j], Universe): + if isinstance(self._universes[k][j], openmc.Universe): u = self._universes[k][j] univs[u._id] = u else: for i in range(len(self._universes[k][j])): u = self._universes[k][j][i] - assert isinstance(u, Universe) + assert isinstance(u, openmc.Universe) univs[u._id] = u if self.outer is not None: @@ -615,10 +614,10 @@ class HexLattice(Lattice): # clockwise fashion. # Check to see if the given universes look like a 2D or a 3D array. - if isinstance(self._universes[0][0], Universe): + if isinstance(self._universes[0][0], openmc.Universe): n_dims = 2 - elif isinstance(self._universes[0][0][0], Universe): + elif isinstance(self._universes[0][0][0], openmc.Universe): n_dims = 3 else: From 34bd4052452d034e3bcd096054ae9aafc0eae8df Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 25 Apr 2016 12:58:33 -0500 Subject: [PATCH 450/650] Fix Python 3.5-related issue in mgxs module --- openmc/mgxs/mgxs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 0c3612e9f8..33255de30c 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -412,7 +412,7 @@ class MGXS(object): # Otherwise, return all nuclides in the spatial domain else: nuclides = self.domain.get_all_nuclides() - return nuclides.keys() + return list(nuclides.keys()) def get_nuclide_density(self, nuclide): """Get the atomic number density in units of atoms/b-cm for a nuclide From dc01204b70527f73f96aff547117146f1b46f628 Mon Sep 17 00:00:00 2001 From: Colin Josey Date: Mon, 25 Apr 2016 17:37:53 -0400 Subject: [PATCH 451/650] Add documentation for WMP library This commit adds documentation for the HDF5 component of the WMP library. --- docs/source/usersguide/data_wmp.rst | 80 +++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 docs/source/usersguide/data_wmp.rst diff --git a/docs/source/usersguide/data_wmp.rst b/docs/source/usersguide/data_wmp.rst new file mode 100644 index 0000000000..524e97251d --- /dev/null +++ b/docs/source/usersguide/data_wmp.rst @@ -0,0 +1,80 @@ +.. _usersguide_data_wmp: + +========================================== +The Windowed Multipole Library Format v0.2 +========================================== + +**/nuclide/** + - **broaden_poly** (*int[]*) + If 1, Doppler broaden curve fit for window with corresponding index. + If 0, do not. + - **curvefit** (*double[][][]*) + Curve fit coefficients. Indexed by (reaction type, coefficient index, + window index). + - **data** (*complex[][]*) + Complex poles and residues. First index is `[pole, residue_1, + residue_2, ...]`. Residues are in the order: total, competitive if + present, absorption, fission. Second index is the set index. Complex + numbers are stored by forming a type with `"r"` and `"i"` identifiers, + similar to how `h5py` does it. + - **start_E** (*double*) + Lowest energy the windowed multipole part of the library is valid for. + - **end_E** (*double*) + Highest energy the windowed multipole part of the library is valid for. + - **energy_points** (*double[]*) + Energy grid for the pointwise library in the reaction group. + - **fissionable** (*int*) + 1 if this nuclide has fission data. 0 if it does not. + - **fit_order** (*int*) + The order of the curve fit. + - **formalism** (*int*) + The formalism of the underlying data. Uses the `ENDF-6`_ format formalism + numbers. + - **l_value** (*int[]*) + The index for a corresponding pole. Equivalent to the :math:`l` quantum + number of the resonance the pole comes from :math:`+1`. + - **length** (*int*) + Total count of poles in `data`. + - **max_w** (*int*) + Maximum number of poles in a window. + - **MT_count** (*int*) + Number of pointwise tables in the library. + - **MT_list** (*int[]*) + A list of available MT identifiers. See `ENDF-6`_ for meaning. + - **n_grid** (*int*) + Total length of the pointwise data. + - **num_l** (*int*) + Number of possible :math:`l` quantum states for this nuclide. + - **pseudo_K0RS** (*double[]*) + :math:`l` dependent value of + + .. math:: + \sqrt{\frac{2 m_n}{\hbar}}\frac{AWR}{AWR + 1} r_{s,l} + + Where :math:`m_n` is mass of neutron, :math:`AWR` is the atomic weight + ratio of the target to the neutron, and :math:`r_{s,l}` is the + scattering radius for a given :math:`l`. + - **spacing** (*double*) + .. math:: + \frac{\sqrt{E_{max}}- \sqrt{E_{min}}}{n_w} + + Where :math:`E_{max}` is the maximum energy the windows go up to. This + is not equivalent to the maximum energy for which the windowed multipole + data is valid for. It is slightly higher to ensure an integer number of + windows. :math:`E_{min}` is the minimum energy and equivalent to + `start_E`, and :math:`n_w` is the number of windows, given by `windows`. + - **sqrtAWR** (*double*) + Square root of the atomic weight ratio. + - **w_start** (*int[]*) + The pole to start from for each window. + - **w_end** (*int[]*) + The pole to end at for each window. + - **windows** (*int*) + Number of windows. + +**/nuclide/reactions/MT** + - **MT_sigma** (*double[]*) -- Cross section value for this reaction. + - **Q_value** (*double*) -- Energy released in this reaction, in eV. + - **threshold** (*int*) -- The first non-zero entry in `MT_sigma`. + +.. _ENDF-6: https://www.oecd-nea.org/dbdata/data/manual-endf/endf102.pdf From 787f7aee5f568144897a244db49c4b94c3c6b20a Mon Sep 17 00:00:00 2001 From: Colin Josey Date: Mon, 25 Apr 2016 18:17:58 -0400 Subject: [PATCH 452/650] Clarify the 'data' component of the documentation --- docs/source/usersguide/data_wmp.rst | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/source/usersguide/data_wmp.rst b/docs/source/usersguide/data_wmp.rst index 524e97251d..81ba0ca2c7 100644 --- a/docs/source/usersguide/data_wmp.rst +++ b/docs/source/usersguide/data_wmp.rst @@ -12,11 +12,12 @@ The Windowed Multipole Library Format v0.2 Curve fit coefficients. Indexed by (reaction type, coefficient index, window index). - **data** (*complex[][]*) - Complex poles and residues. First index is `[pole, residue_1, - residue_2, ...]`. Residues are in the order: total, competitive if - present, absorption, fission. Second index is the set index. Complex - numbers are stored by forming a type with `"r"` and `"i"` identifiers, - similar to how `h5py` does it. + Complex poles and residues. Each pole has a corresponding set of + residues. For example, the `i`th pole and corresponding residues are + stored as `data[:,i] = [pole, residue_1, residue_2, ...]`. The + residues are in the order: total, competitive if present, absorption, + fission. Complex numbers are stored by forming a type with `"r"` and + `"i"` identifiers, similar to how `h5py` does it. - **start_E** (*double*) Lowest energy the windowed multipole part of the library is valid for. - **end_E** (*double*) From 9c931eb26a907a276c2e6e6dbaa72660bfb991e7 Mon Sep 17 00:00:00 2001 From: Colin Josey Date: Mon, 25 Apr 2016 18:28:51 -0400 Subject: [PATCH 453/650] Add table with formalism identifiers --- docs/source/usersguide/data_wmp.rst | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/source/usersguide/data_wmp.rst b/docs/source/usersguide/data_wmp.rst index 81ba0ca2c7..8e80434392 100644 --- a/docs/source/usersguide/data_wmp.rst +++ b/docs/source/usersguide/data_wmp.rst @@ -29,8 +29,19 @@ The Windowed Multipole Library Format v0.2 - **fit_order** (*int*) The order of the curve fit. - **formalism** (*int*) - The formalism of the underlying data. Uses the `ENDF-6`_ format formalism - numbers. + The formalism of the underlying data. Uses the `ENDF-6`_ format + formalism numbers. + + .. table:: Table of supported formalisms. + + +-------------+------------------+ + | Formalism | Formalism number | + +=============+==================+ + | MLBW | 2 | + +-------------+------------------+ + | Reich-Moore | 3 | + +-------------+------------------+ + - **l_value** (*int[]*) The index for a corresponding pole. Equivalent to the :math:`l` quantum number of the resonance the pole comes from :math:`+1`. From 806a8a0c9a1d7bf9639e60846a3e8ba316ba1793 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Mon, 25 Apr 2016 19:03:31 -0400 Subject: [PATCH 454/650] Move all I/O file formats to special docs section --- docs/source/index.rst | 1 + docs/source/io_formats/data_wmp.rst | 92 +++++++++++++++++++ .../output => io_formats}/index.rst | 10 +- .../mgxs_library.rst | 2 +- .../particle_restart.rst | 2 +- .../output => io_formats}/source.rst | 2 +- .../output => io_formats}/statepoint.rst | 2 +- .../output => io_formats}/summary.rst | 2 +- .../output => io_formats}/track.rst | 2 +- .../output => io_formats}/voxel.rst | 2 +- docs/source/methods/cross_sections.rst | 3 + docs/source/usersguide/index.rst | 2 - docs/source/usersguide/input.rst | 2 +- docs/source/usersguide/processing.rst | 4 +- 14 files changed, 112 insertions(+), 16 deletions(-) create mode 100644 docs/source/io_formats/data_wmp.rst rename docs/source/{usersguide/output => io_formats}/index.rst (55%) rename docs/source/{usersguide => io_formats}/mgxs_library.rst (99%) rename docs/source/{usersguide/output => io_formats}/particle_restart.rst (97%) rename docs/source/{usersguide/output => io_formats}/source.rst (96%) rename docs/source/{usersguide/output => io_formats}/statepoint.rst (99%) rename docs/source/{usersguide/output => io_formats}/summary.rst (99%) rename docs/source/{usersguide/output => io_formats}/track.rst (96%) rename docs/source/{usersguide/output => io_formats}/voxel.rst (95%) diff --git a/docs/source/index.rst b/docs/source/index.rst index 54ba825e58..605f3c9777 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -34,6 +34,7 @@ free to send a message to the User's Group `mailing list`_. usersguide/index devguide/index pythonapi/index + io_formats/index publications license developers diff --git a/docs/source/io_formats/data_wmp.rst b/docs/source/io_formats/data_wmp.rst new file mode 100644 index 0000000000..1e791d6c59 --- /dev/null +++ b/docs/source/io_formats/data_wmp.rst @@ -0,0 +1,92 @@ +.. _io_data_wmp: + +========================================== +The Windowed Multipole Library Format v0.2 +========================================== + +**/nuclide/** + - **broaden_poly** (*int[]*) + If 1, Doppler broaden curve fit for window with corresponding index. + If 0, do not. + - **curvefit** (*double[][][]*) + Curve fit coefficients. Indexed by (reaction type, coefficient index, + window index). + - **data** (*complex[][]*) + Complex poles and residues. Each pole has a corresponding set of + residues. For example, the `i`th pole and corresponding residues are + stored as `data[:,i] = [pole, residue_1, residue_2, ...]`. The + residues are in the order: total, competitive if present, absorption, + fission. Complex numbers are stored by forming a type with `"r"` and + `"i"` identifiers, similar to how `h5py` does it. + - **start_E** (*double*) + Lowest energy the windowed multipole part of the library is valid for. + - **end_E** (*double*) + Highest energy the windowed multipole part of the library is valid for. + - **energy_points** (*double[]*) + Energy grid for the pointwise library in the reaction group. + - **fissionable** (*int*) + 1 if this nuclide has fission data. 0 if it does not. + - **fit_order** (*int*) + The order of the curve fit. + - **formalism** (*int*) + The formalism of the underlying data. Uses the `ENDF-6`_ format + formalism numbers. + + .. table:: Table of supported formalisms. + + +-------------+------------------+ + | Formalism | Formalism number | + +=============+==================+ + | MLBW | 2 | + +-------------+------------------+ + | Reich-Moore | 3 | + +-------------+------------------+ + + - **l_value** (*int[]*) + The index for a corresponding pole. Equivalent to the :math:`l` quantum + number of the resonance the pole comes from :math:`+1`. + - **length** (*int*) + Total count of poles in `data`. + - **max_w** (*int*) + Maximum number of poles in a window. + - **MT_count** (*int*) + Number of pointwise tables in the library. + - **MT_list** (*int[]*) + A list of available MT identifiers. See `ENDF-6`_ for meaning. + - **n_grid** (*int*) + Total length of the pointwise data. + - **num_l** (*int*) + Number of possible :math:`l` quantum states for this nuclide. + - **pseudo_K0RS** (*double[]*) + :math:`l` dependent value of + + .. math:: + \sqrt{\frac{2 m_n}{\hbar}}\frac{AWR}{AWR + 1} r_{s,l} + + Where :math:`m_n` is mass of neutron, :math:`AWR` is the atomic weight + ratio of the target to the neutron, and :math:`r_{s,l}` is the + scattering radius for a given :math:`l`. + - **spacing** (*double*) + .. math:: + \frac{\sqrt{E_{max}}- \sqrt{E_{min}}}{n_w} + + Where :math:`E_{max}` is the maximum energy the windows go up to. This + is not equivalent to the maximum energy for which the windowed multipole + data is valid for. It is slightly higher to ensure an integer number of + windows. :math:`E_{min}` is the minimum energy and equivalent to + `start_E`, and :math:`n_w` is the number of windows, given by `windows`. + - **sqrtAWR** (*double*) + Square root of the atomic weight ratio. + - **w_start** (*int[]*) + The pole to start from for each window. + - **w_end** (*int[]*) + The pole to end at for each window. + - **windows** (*int*) + Number of windows. + +**/nuclide/reactions/MT** + - **MT_sigma** (*double[]*) -- Cross section value for this reaction. + - **Q_value** (*double*) -- Energy released in this reaction, in eV. + - **threshold** (*int*) -- The first non-zero entry in `MT_sigma`. + +.. _ENDF-6: https://www.oecd-nea.org/dbdata/data/manual-endf/endf102.pdf diff --git a/docs/source/usersguide/output/index.rst b/docs/source/io_formats/index.rst similarity index 55% rename from docs/source/usersguide/output/index.rst rename to docs/source/io_formats/index.rst index 31bd1da917..33c43df081 100644 --- a/docs/source/usersguide/output/index.rst +++ b/docs/source/io_formats/index.rst @@ -1,13 +1,15 @@ -.. _usersguide_output: +.. _io_file_formats: -=================== -Output File Formats -=================== +=============== +IO File Formats +=============== .. toctree:: :numbered: :maxdepth: 3 + data_wmp + mgxs_library statepoint source summary diff --git a/docs/source/usersguide/mgxs_library.rst b/docs/source/io_formats/mgxs_library.rst similarity index 99% rename from docs/source/usersguide/mgxs_library.rst rename to docs/source/io_formats/mgxs_library.rst index a5d2ec0d06..e6284e3287 100644 --- a/docs/source/usersguide/mgxs_library.rst +++ b/docs/source/io_formats/mgxs_library.rst @@ -1,4 +1,4 @@ -.. _usersguide_mgxs_library: +.. _io_mgxs_library: ======================================== Multi-Group Cross Section Library Format diff --git a/docs/source/usersguide/output/particle_restart.rst b/docs/source/io_formats/particle_restart.rst similarity index 97% rename from docs/source/usersguide/output/particle_restart.rst rename to docs/source/io_formats/particle_restart.rst index 70f00a930f..c30eda3189 100644 --- a/docs/source/usersguide/output/particle_restart.rst +++ b/docs/source/io_formats/particle_restart.rst @@ -1,4 +1,4 @@ -.. _usersguide_particle_restart: +.. _io_particle_restart: ============================ Particle Restart File Format diff --git a/docs/source/usersguide/output/source.rst b/docs/source/io_formats/source.rst similarity index 96% rename from docs/source/usersguide/output/source.rst rename to docs/source/io_formats/source.rst index 53841a5ebc..a0a62afca0 100644 --- a/docs/source/usersguide/output/source.rst +++ b/docs/source/io_formats/source.rst @@ -1,4 +1,4 @@ -.. _usersguide_source: +.. _io_source: ================== Source File Format diff --git a/docs/source/usersguide/output/statepoint.rst b/docs/source/io_formats/statepoint.rst similarity index 99% rename from docs/source/usersguide/output/statepoint.rst rename to docs/source/io_formats/statepoint.rst index 95a3d842c2..e8b8f8b90b 100644 --- a/docs/source/usersguide/output/statepoint.rst +++ b/docs/source/io_formats/statepoint.rst @@ -1,4 +1,4 @@ -.. _usersguide_statepoint: +.. _io_statepoint: ======================= State Point File Format diff --git a/docs/source/usersguide/output/summary.rst b/docs/source/io_formats/summary.rst similarity index 99% rename from docs/source/usersguide/output/summary.rst rename to docs/source/io_formats/summary.rst index cb9f725e86..8af4f2398a 100644 --- a/docs/source/usersguide/output/summary.rst +++ b/docs/source/io_formats/summary.rst @@ -1,4 +1,4 @@ -.. _usersguide_summary: +.. _io_summary: =================== Summary File Format diff --git a/docs/source/usersguide/output/track.rst b/docs/source/io_formats/track.rst similarity index 96% rename from docs/source/usersguide/output/track.rst rename to docs/source/io_formats/track.rst index d3c7a27d83..e5cb5d46e3 100644 --- a/docs/source/usersguide/output/track.rst +++ b/docs/source/io_formats/track.rst @@ -1,4 +1,4 @@ -.. _usersguide_track: +.. _io_track: ================= Track File Format diff --git a/docs/source/usersguide/output/voxel.rst b/docs/source/io_formats/voxel.rst similarity index 95% rename from docs/source/usersguide/output/voxel.rst rename to docs/source/io_formats/voxel.rst index 1da501fb54..6b73f2800a 100644 --- a/docs/source/usersguide/output/voxel.rst +++ b/docs/source/io_formats/voxel.rst @@ -1,4 +1,4 @@ -.. _usersguide_voxel: +.. _io_voxel: ====================== Voxel Plot File Format diff --git a/docs/source/methods/cross_sections.rst b/docs/source/methods/cross_sections.rst index 50a97d5754..ec8f8fe451 100644 --- a/docs/source/methods/cross_sections.rst +++ b/docs/source/methods/cross_sections.rst @@ -136,6 +136,9 @@ Note that the implementation of WMP in OpenMC currently assumes that inelastic scattering does not occur in the resolved resonance region. This is usually, but not always the case. Future library versions may eliminate this issue. +The data format used by OpenMC to represent windowed multipole data is specified +in :ref:`io_data_wmp` + .. only:: html .. rubric:: References diff --git a/docs/source/usersguide/index.rst b/docs/source/usersguide/index.rst index 0338c5cef0..f8b4e64faa 100644 --- a/docs/source/usersguide/index.rst +++ b/docs/source/usersguide/index.rst @@ -14,7 +14,5 @@ essential aspects of using OpenMC to perform simulations. beginners install input - mgxs_library - output/index processing troubleshoot diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 324fbfc2db..24a8ac3e7c 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -1941,7 +1941,7 @@ sub-elements: datafiles can be processed into 3D SILO files using the ``openmc-voxel-to-silovtk`` utility provided with the OpenMC source, and subsequently viewed with a 3D viewer such as VISIT or Paraview. See the - :ref:`usersguide_voxel` for information about the datafile structure. + :ref:`io_voxel` for information about the datafile structure. .. note:: Since the PPM format is saved without any kind of compression, the resulting file sizes can be quite large. Saving the image in diff --git a/docs/source/usersguide/processing.rst b/docs/source/usersguide/processing.rst index 059659dbc1..93a17a7b8b 100644 --- a/docs/source/usersguide/processing.rst +++ b/docs/source/usersguide/processing.rst @@ -161,7 +161,7 @@ or * `VTK `_ with python bindings. On debian derivatives, these are easily obtained with ``sudo apt-get install python-vtk`` -For the HDF5 file structure, see :ref:`usersguide_voxel`. +For the HDF5 file structure, see :ref:`io_voxel`. Once processed into a standard 3D file format, colors and masks can be defined using the stored id numbers to better explore the geometry. The process for @@ -195,7 +195,7 @@ Data Extraction --------------- A great deal of information is available in statepoint files (See -:ref:`usersguide_statepoint`), all of which is accessible through the Python +:ref:`io_statepoint`), all of which is accessible through the Python API. The :class:`openmc.StatePoint` class can load statepoints and access data as requested; it is used in many of the provided plotting utilities, OpenMC's regression test suite, and can be used in user-created scripts to carry out From 6234c4e05ebe416c48ba113b39c1911afb9e6ef4 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 26 Apr 2016 07:06:18 -0500 Subject: [PATCH 455/650] Update copyright in two places and link to license in header --- docs/source/license.rst | 2 +- src/output.F90 | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/license.rst b/docs/source/license.rst index 73e3296172..c51902d6ff 100644 --- a/docs/source/license.rst +++ b/docs/source/license.rst @@ -4,7 +4,7 @@ License Agreement ================= -Copyright © 2011-2015 Massachusetts Institute of Technology +Copyright © 2011-2016 Massachusetts Institute of Technology Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/src/output.F90 b/src/output.F90 index fafa198f7b..4b4b966dcb 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -52,9 +52,9 @@ contains ! Write version information write(UNIT=OUTPUT_UNIT, FMT=*) & - ' Copyright: 2011-2015 Massachusetts Institute of Technology' + ' Copyright: 2011-2016 Massachusetts Institute of Technology' write(UNIT=OUTPUT_UNIT, FMT=*) & - ' License: http://mit-crpg.github.io/openmc/license.html' + ' License: http://openmc.readthedocs.org/en/latest/license.html' write(UNIT=OUTPUT_UNIT, FMT='(6X,"Version:",8X,I1,".",I1,".",I1)') & VERSION_MAJOR, VERSION_MINOR, VERSION_RELEASE #ifdef GIT_SHA1 From 1e57cb84074c4d35500fcb9f027b203a20a546de Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 26 Apr 2016 07:08:03 -0500 Subject: [PATCH 456/650] Respond to @wbinventor comments on #632 --- examples/python/basic/build-xml.py | 4 +- examples/python/boxes/build-xml.py | 8 +- .../python/lattice/hexagonal/build-xml.py | 10 +- examples/python/lattice/nested/build-xml.py | 6 +- examples/python/lattice/simple/build-xml.py | 8 +- examples/python/pincell/build-xml.py | 6 +- .../python/pincell_multigroup/build-xml.py | 6 +- examples/python/reflective/build-xml.py | 4 +- openmc/executor.py | 5 +- openmc/material.py | 4 +- openmc/mgxs/library.py | 2 +- openmc/mgxs_library.py | 2 +- openmc/plots.py | 4 +- openmc/surface.py | 211 +++++++++--------- openmc/tallies.py | 4 +- 15 files changed, 146 insertions(+), 138 deletions(-) diff --git a/examples/python/basic/build-xml.py b/examples/python/basic/build-xml.py index 19737cf91f..05accbc5ed 100644 --- a/examples/python/basic/build-xml.py +++ b/examples/python/basic/build-xml.py @@ -74,7 +74,7 @@ cell1.fill = universe1 universe1.add_cells([cell2, cell3]) root.add_cells([cell1, cell4]) -# Instantiate a Geometry and register the root Universe, and export to XML +# Instantiate a Geometry, register the root Universe, and export to XML geometry = openmc.Geometry() geometry.root_universe = root geometry.export_to_xml() @@ -124,7 +124,7 @@ third_tally = openmc.Tally(tally_id=3, name='third tally') third_tally.filters = [cell_filter, energy_filter, energyout_filter] third_tally.scores = ['scatter', 'nu-scatter', 'nu-fission'] -# Instantiate a Tallies object, register all Tallies, and export to XML +# Instantiate a Tallies collection, register all Tallies, and export to XML tallies_file = openmc.Tallies() tallies_file.add_tally(first_tally) tallies_file.add_tally(second_tally) diff --git a/examples/python/boxes/build-xml.py b/examples/python/boxes/build-xml.py index 196a10ca7b..318af22654 100644 --- a/examples/python/boxes/build-xml.py +++ b/examples/python/boxes/build-xml.py @@ -36,7 +36,7 @@ moderator.add_nuclide(h1, 2.) moderator.add_nuclide(o16, 1.) moderator.add_s_alpha_beta('HH2O', '71t') -# Instantiate a Materials object, register all Materials, and export to XML +# Instantiate a Materials collection, register all Materials, and export to XML materials_file = openmc.Materials() materials_file.default_xs = '71c' materials_file.add_materials([fuel1, fuel2, moderator]) @@ -97,7 +97,7 @@ outer_box.fill = moderator root = openmc.Universe(universe_id=0, name='root universe') root.add_cells([inner_box, middle_box, outer_box]) -# Instantiate a Geometry and register the root Universe, and export to XML +# Instantiate a Geometry, register the root Universe, and export to XML geometry = openmc.Geometry() geometry.root_universe = root geometry.export_to_xml() @@ -107,7 +107,7 @@ geometry.export_to_xml() # Exporting to OpenMC settings.xml File ############################################################################### -# Instantiate a SettingsFile, set all runtime parameters, and export to XML +# Instantiate a Settings object, set all runtime parameters, and export to XML settings_file = openmc.Settings() settings_file.batches = batches settings_file.inactive = inactive @@ -129,7 +129,7 @@ plot.width = [20, 20] plot.pixels = [200, 200] plot.color = 'cell' -# Instantiate a Plots object, add Plot, and export to XML +# Instantiate a Plots collection, add Plot, and export to XML plot_file = openmc.Plots() plot_file.add_plot(plot) plot_file.export_to_xml() diff --git a/examples/python/lattice/hexagonal/build-xml.py b/examples/python/lattice/hexagonal/build-xml.py index a9d7f68991..04002faf2f 100644 --- a/examples/python/lattice/hexagonal/build-xml.py +++ b/examples/python/lattice/hexagonal/build-xml.py @@ -35,7 +35,7 @@ iron = openmc.Material(material_id=3, name='iron') iron.set_density('g/cc', 7.9) iron.add_nuclide(fe56, 1.) -# Instantiate a Materials object, register all Materials, and export to XML +# Instantiate a Materials collection, register all Materials, and export to XML materials_file = openmc.Materials() materials_file.default_xs = '71c' materials_file.add_materials([moderator, fuel, iron]) @@ -105,7 +105,7 @@ lattice.outer = univ2 # Fill Cell with the Lattice cell1.fill = lattice -# Instantiate a Geometry and register the root Universe, and export to XML +# Instantiate a Geometry, register the root Universe, and export to XML geometry = openmc.Geometry() geometry.root_universe = root geometry.export_to_xml() @@ -115,7 +115,7 @@ geometry.export_to_xml() # Exporting to OpenMC settings.xml file ############################################################################### -# Instantiate a SettingsFile, set all runtime parameters, and export to XML +# Instantiate a Settings object, set all runtime parameters, and export to XML settings_file = openmc.Settings() settings_file.batches = batches settings_file.inactive = inactive @@ -151,7 +151,7 @@ plot_yz.width = [8, 8] plot_yz.pixels = [400, 400] plot_yz.color = 'mat' -# Instantiate a Plots object, add plots, and export to XML +# Instantiate a Plots collection, add plots, and export to XML plot_file = openmc.Plots() plot_file.add_plot(plot_xy) plot_file.add_plot(plot_yz) @@ -167,7 +167,7 @@ tally = openmc.Tally(tally_id=1) tally.filters = [openmc.Filter(type='distribcell', bins=[cell2.id])] tally.scores = ['total'] -# Instantiate a Tallies object, register Tally/Mesh, and export to XML +# Instantiate a Tallies collection, register Tally/Mesh, and export to XML tallies_file = openmc.Tallies() tallies_file.add_tally(tally) tallies_file.export_to_xml() diff --git a/examples/python/lattice/nested/build-xml.py b/examples/python/lattice/nested/build-xml.py index eb16c83278..0e4e459e2e 100644 --- a/examples/python/lattice/nested/build-xml.py +++ b/examples/python/lattice/nested/build-xml.py @@ -30,7 +30,7 @@ moderator.add_nuclide(h1, 2.) moderator.add_nuclide(o16, 1.) moderator.add_s_alpha_beta('HH2O', '71t') -# Instantiate a Materials object, register all Materials, and export to XML +# Instantiate a Materials collection, register all Materials, and export to XML materials_file = openmc.Materials() materials_file.default_xs = '71c' materials_file.add_materials([moderator, fuel]) @@ -116,7 +116,7 @@ lattice2.universes = [[univ4, univ4], cell1.fill = lattice2 cell2.fill = lattice1 -# Instantiate a Geometry and register the root Universe, and export to XML +# Instantiate a Geometry, register the root Universe, and export to XML geometry = openmc.Geometry() geometry.root_universe = root geometry.export_to_xml() @@ -176,7 +176,7 @@ tally = openmc.Tally(tally_id=1) tally.filters = [mesh_filter] tally.scores = ['total'] -# Instantiate a Tallies object, register Tally/Mesh, and export to XML +# Instantiate a Tallies collection, register Tally/Mesh, and export to XML tallies_file = openmc.Tallies() tallies_file.add_mesh(mesh) tallies_file.add_tally(tally) diff --git a/examples/python/lattice/simple/build-xml.py b/examples/python/lattice/simple/build-xml.py index 6e44e4da0a..8d9481aaa5 100644 --- a/examples/python/lattice/simple/build-xml.py +++ b/examples/python/lattice/simple/build-xml.py @@ -30,7 +30,7 @@ moderator.add_nuclide(h1, 2.) moderator.add_nuclide(o16, 1.) moderator.add_s_alpha_beta('HH2O', '71t') -# Instantiate a Materials object, register all Materials, and export to XML +# Instantiate a Materials collection, register all Materials, and export to XML materials_file = openmc.Materials() materials_file.default_xs = '71c' materials_file.add_materials([moderator, fuel]) @@ -106,7 +106,7 @@ lattice.universes = [[univ1, univ2, univ1, univ2], # Fill Cell with the Lattice cell1.fill = lattice -# Instantiate a Geometry and register the root Universe, and export to XML +# Instantiate a Geometry, register the root Universe, and export to XML geometry = openmc.Geometry() geometry.root_universe = root geometry.export_to_xml() @@ -142,7 +142,7 @@ plot.width = [4, 4] plot.pixels = [400, 400] plot.color = 'mat' -# Instantiate a Plots object, add Plot, and export to XML +# Instantiate a Plots collection, add Plot, and export to XML plot_file = openmc.Plots() plot_file.add_plot(plot) plot_file.export_to_xml() @@ -173,7 +173,7 @@ tally.filters = [mesh_filter] tally.scores = ['total'] tally.triggers = [trigger] -# Instantiate a Tallies object, register Tally/Mesh, and export to XML +# Instantiate a Tallies collection, register Tally/Mesh, and export to XML tallies_file = openmc.Tallies() tallies_file.add_mesh(mesh) tallies_file.add_tally(tally) diff --git a/examples/python/pincell/build-xml.py b/examples/python/pincell/build-xml.py index 10cd4944d4..561df2b5a1 100644 --- a/examples/python/pincell/build-xml.py +++ b/examples/python/pincell/build-xml.py @@ -100,7 +100,7 @@ borated_water.add_nuclide(o16, 2.4672e-2) borated_water.add_nuclide(o17, 6.0099e-5) borated_water.add_s_alpha_beta('HH2O', '71t') -# Instantiate a Materials object, register all Materials, and export to XML +# Instantiate a Materials collection, register all Materials, and export to XML materials_file = openmc.Materials() materials_file.default_xs = '71c' materials_file.add_materials([uo2, helium, zircaloy, borated_water]) @@ -149,7 +149,7 @@ root = openmc.Universe(universe_id=0, name='root universe') # Register Cells with Universe root.add_cells([fuel, gap, clad, water]) -# Instantiate a Geometry and register the root Universe, and export to XML +# Instantiate a Geometry, register the root Universe, and export to XML geometry = openmc.Geometry() geometry.root_universe = root geometry.export_to_xml() @@ -197,7 +197,7 @@ tally = openmc.Tally(tally_id=1, name='tally 1') tally.filters = [energy_filter, mesh_filter] tally.scores = ['flux', 'fission', 'nu-fission'] -# Instantiate a Tallies object, register all Tallies, and export to XML +# Instantiate a Tallies collection, register all Tallies, and export to XML tallies_file = openmc.Tallies() tallies_file.add_mesh(mesh) tallies_file.add_tally(tally) diff --git a/examples/python/pincell_multigroup/build-xml.py b/examples/python/pincell_multigroup/build-xml.py index 2337281423..697a596d97 100644 --- a/examples/python/pincell_multigroup/build-xml.py +++ b/examples/python/pincell_multigroup/build-xml.py @@ -81,7 +81,7 @@ water = openmc.Material(material_id=2, name='Water') water.set_density('macro', 1.0) water.add_macroscopic(h2o_data) -# Instantiate a Materials object, register all Materials, and export to XML +# Instantiate a Materials collection, register all Materials, and export to XML materials_file = openmc.Materials() materials_file.default_xs = '300K' materials_file.add_materials([uo2, water]) @@ -122,7 +122,7 @@ root = openmc.Universe(universe_id=0, name='root universe') # Register Cells with Universe root.add_cells([fuel, moderator]) -# Instantiate a Geometry and register the root Universe, and export to XML +# Instantiate a Geometry, register the root Universe, and export to XML geometry = openmc.Geometry() geometry.root_universe = root geometry.export_to_xml() @@ -173,7 +173,7 @@ tally.add_score('flux') tally.add_score('fission') tally.add_score('nu-fission') -# Instantiate a Tallies object, register all Tallies, and export to XML +# Instantiate a Tallies collection, register all Tallies, and export to XML tallies_file = openmc.Tallies() tallies_file.add_mesh(mesh) tallies_file.add_tally(tally) diff --git a/examples/python/reflective/build-xml.py b/examples/python/reflective/build-xml.py index 7d96e296da..e4776e7443 100644 --- a/examples/python/reflective/build-xml.py +++ b/examples/python/reflective/build-xml.py @@ -23,7 +23,7 @@ fuel = openmc.Material(material_id=1, name='fuel') fuel.set_density('g/cc', 4.5) fuel.add_nuclide(u235, 1.) -# Instantiate a Materials object, register Material, and export to XML +# Instantiate a Materials collection, register Material, and export to XML materials_file = openmc.Materials() materials_file.default_xs = '71c' materials_file.add_material(fuel) @@ -64,7 +64,7 @@ root = openmc.Universe(universe_id=0, name='root universe') # Register Cell with Universe root.add_cell(cell) -# Instantiate a Geometry and register the root Universe, and export to XML +# Instantiate a Geometry, register the root Universe, and export to XML geometry = openmc.Geometry() geometry.root_universe = root geometry.export_to_xml() diff --git a/openmc/executor.py b/openmc/executor.py index 9bb3477c50..edbbaddc40 100644 --- a/openmc/executor.py +++ b/openmc/executor.py @@ -54,7 +54,10 @@ def run(particles=None, threads=None, geometry_debug=False, particles : int, optional Number of particles to simulate per generation. threads : int, optional - Number of OpenMP threads. + Number of OpenMP threads. If OpenMC is compiled with OpenMP threading + enabled, the default is implementation-dependent but is usually equal to + the number of hardware threads available (or a value set by the + OMP_NUM_THREADS environment variable). geometry_debug : bool, optional Turn on geometry debugging during simulation. Defaults to False. restart_file : str, optional diff --git a/openmc/material.py b/openmc/material.py index 6b0a0f2468..c6030a8e67 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -643,8 +643,8 @@ class Material(object): class Materials(object): - """Materials used for an OpenMC simulation. Corresponds directly to the - materials.xml input file. + """Collection of Materials used for an OpenMC simulation. Corresponds directly + to the materials.xml input file. Attributes ---------- diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index ca7bf39cd8..8d5e9854ee 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -355,7 +355,7 @@ class Library(object): Parameters ---------- tallies_file : openmc.Tallies - A Tallies object to add each MGXS' tallies to generate a + A Tallies collection to add each MGXS' tallies to generate a "tallies.xml" input file for OpenMC merge : bool Indicate whether tallies should be merged when possible. Defaults diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 8db3c84ff7..d3e49b238e 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -705,7 +705,7 @@ class MGXSLibrary(object): # Make sure energy groups match. if xsdata.energy_groups != self._energy_groups: - msg = 'Energy groups of XSdata do not match that of MGXSLibrary!' + msg = 'Energy groups of XSdata do not match that of MGXSLibrary.' raise ValueError(msg) self._xsdatas.append(xsdata) diff --git a/openmc/plots.py b/openmc/plots.py index ae34678bba..a967cb0604 100644 --- a/openmc/plots.py +++ b/openmc/plots.py @@ -402,8 +402,8 @@ class Plot(object): class Plots(object): - """Plots file used for an OpenMC simulation. Corresponds directly to the - plots.xml input file. + """Collection of Plots used for an OpenMC simulation. Corresponds directly to + the plots.xml input file. """ diff --git a/openmc/surface.py b/openmc/surface.py index c6f3f2cd0d..37e7c2ffdb 100644 --- a/openmc/surface.py +++ b/openmc/surface.py @@ -23,7 +23,11 @@ def reset_auto_surface_id(): class Surface(object): - """A two-dimensional surface with an associated boundary condition. + """An implicit surface with an associated boundary condition. + + An implicit surface is defined as the set of zeros of a function of the + three Cartesian coordinates. Surfaces in OpenMC are limited to a set of + algebraic surfaces, i.e., surfaces that are polynomial in x, y, and z. Parameters ---------- @@ -43,14 +47,14 @@ class Surface(object): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. - coeffs : dict + coefficients : dict Dictionary of surface coefficients id : int Unique identifier for the surface name : str Name of the surface type : str - Type of the surface, e.g. 'x-plane' + Type of the surface """ @@ -63,7 +67,7 @@ class Surface(object): # A dictionary of the quadratic surface coefficients # Key - coefficeint name # Value - coefficient value - self._coeffs = {} + self._coefficients = {} # An ordered list of the coefficient names to export to XML in the # proper order @@ -82,12 +86,13 @@ class Surface(object): string += '{0: <16}{1}{2}\n'.format('\tType', '=\t', self._type) string += '{0: <16}{1}{2}\n'.format('\tBoundary', '=\t', self._boundary_type) - coeffs = '{0: <16}'.format('\tCoefficients') + '\n' + coefficients = '{0: <16}'.format('\tCoefficients') + '\n' - for coeff in self._coeffs: - coeffs += '{0: <16}{1}{2}\n'.format(coeff, '=\t', self._coeffs[coeff]) + for coeff in self._coefficients: + coefficients += '{0: <16}{1}{2}\n'.format( + coeff, '=\t', self._coefficients[coeff]) - string += coeffs + string += coefficients return string @@ -108,8 +113,8 @@ class Surface(object): return self._boundary_type @property - def coeffs(self): - return self._coeffs + def coefficients(self): + return self._coefficients @id.setter def id(self, surface_id): @@ -173,7 +178,7 @@ class Surface(object): element.set("type", self._type) if self.boundary_type != 'transmission': element.set("boundary", self.boundary_type) - element.set("coeffs", ' '.join([str(self._coeffs.setdefault(key, 0.0)) + element.set("coeffs", ' '.join([str(self._coefficients.setdefault(key, 0.0)) for key in self._coeff_keys])) return element @@ -215,14 +220,14 @@ class Plane(Surface): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. - coeffs : dict + coefficients : dict Dictionary of surface coefficients id : int Unique identifier for the surface name : str Name of the surface type : str - Type of the surface, e.g. 'x-plane' + Type of the surface """ @@ -239,39 +244,39 @@ class Plane(Surface): @property def a(self): - return self.coeffs['A'] + return self.coefficients['A'] @property def b(self): - return self.coeffs['B'] + return self.coefficients['B'] @property def c(self): - return self.coeffs['C'] + return self.coefficients['C'] @property def d(self): - return self.coeffs['D'] + return self.coefficients['D'] @a.setter def a(self, A): check_type('A coefficient', A, Real) - self._coeffs['A'] = A + self._coefficients['A'] = A @b.setter def b(self, B): check_type('B coefficient', B, Real) - self._coeffs['B'] = B + self._coefficients['B'] = B @c.setter def c(self, C): check_type('C coefficient', C, Real) - self._coeffs['C'] = C + self._coefficients['C'] = C @d.setter def d(self, D): check_type('D coefficient', D, Real) - self._coeffs['D'] = D + self._coefficients['D'] = D class XPlane(Plane): @@ -298,14 +303,14 @@ class XPlane(Plane): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. - coeffs : dict + coefficients : dict Dictionary of surface coefficients id : int Unique identifier for the surface name : str Name of the surface type : str - Type of the surface, e.g. 'x-plane' + Type of the surface """ @@ -319,12 +324,12 @@ class XPlane(Plane): @property def x0(self): - return self.coeffs['x0'] + return self.coefficients['x0'] @x0.setter def x0(self, x0): check_type('x0 coefficient', x0, Real) - self._coeffs['x0'] = x0 + self._coefficients['x0'] = x0 def bounding_box(self, side): """Determine an axis-aligned bounding box. @@ -382,14 +387,14 @@ class YPlane(Plane): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. - coeffs : dict + coefficients : dict Dictionary of surface coefficients id : int Unique identifier for the surface name : str Name of the surface type : str - Type of the surface, e.g. 'x-plane' + Type of the surface """ @@ -404,12 +409,12 @@ class YPlane(Plane): @property def y0(self): - return self.coeffs['y0'] + return self.coefficients['y0'] @y0.setter def y0(self, y0): check_type('y0 coefficient', y0, Real) - self._coeffs['y0'] = y0 + self._coefficients['y0'] = y0 def bounding_box(self, side): """Determine an axis-aligned bounding box. @@ -467,14 +472,14 @@ class ZPlane(Plane): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. - coeffs : dict + coefficients : dict Dictionary of surface coefficients id : int Unique identifier for the surface name : str Name of the surface type : str - Type of the surface, e.g. 'x-plane' + Type of the surface """ @@ -489,12 +494,12 @@ class ZPlane(Plane): @property def z0(self): - return self.coeffs['z0'] + return self.coefficients['z0'] @z0.setter def z0(self, z0): check_type('z0 coefficient', z0, Real) - self._coeffs['z0'] = z0 + self._coefficients['z0'] = z0 def bounding_box(self, side): """Determine an axis-aligned bounding box. @@ -553,14 +558,14 @@ class Cylinder(Surface): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. - coeffs : dict + coefficients : dict Dictionary of surface coefficients id : int Unique identifier for the surface name : str Name of the surface type : str - Type of the surface, e.g. 'x-plane' + Type of the surface """ @@ -575,12 +580,12 @@ class Cylinder(Surface): @property def r(self): - return self.coeffs['R'] + return self.coefficients['R'] @r.setter def r(self, R): check_type('R coefficient', R, Real) - self._coeffs['R'] = R + self._coefficients['R'] = R class XCylinder(Cylinder): @@ -615,14 +620,14 @@ class XCylinder(Cylinder): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. - coeffs : dict + coefficients : dict Dictionary of surface coefficients id : int Unique identifier for the surface name : str Name of the surface type : str - Type of the surface, e.g. 'x-plane' + Type of the surface """ @@ -637,21 +642,21 @@ class XCylinder(Cylinder): @property def y0(self): - return self.coeffs['y0'] + return self.coefficients['y0'] @property def z0(self): - return self.coeffs['z0'] + return self.coefficients['z0'] @y0.setter def y0(self, y0): check_type('y0 coefficient', y0, Real) - self._coeffs['y0'] = y0 + self._coefficients['y0'] = y0 @z0.setter def z0(self, z0): check_type('z0 coefficient', z0, Real) - self._coeffs['z0'] = z0 + self._coefficients['z0'] = z0 def bounding_box(self, side): """Determine an axis-aligned bounding box. @@ -718,14 +723,14 @@ class YCylinder(Cylinder): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. - coeffs : dict + coefficients : dict Dictionary of surface coefficients id : int Unique identifier for the surface name : str Name of the surface type : str - Type of the surface, e.g. 'x-plane' + Type of the surface """ @@ -740,21 +745,21 @@ class YCylinder(Cylinder): @property def x0(self): - return self.coeffs['x0'] + return self.coefficients['x0'] @property def z0(self): - return self.coeffs['z0'] + return self.coefficients['z0'] @x0.setter def x0(self, x0): check_type('x0 coefficient', x0, Real) - self._coeffs['x0'] = x0 + self._coefficients['x0'] = x0 @z0.setter def z0(self, z0): check_type('z0 coefficient', z0, Real) - self._coeffs['z0'] = z0 + self._coefficients['z0'] = z0 def bounding_box(self, side): """Determine an axis-aligned bounding box. @@ -821,14 +826,14 @@ class ZCylinder(Cylinder): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. - coeffs : dict + coefficients : dict Dictionary of surface coefficients id : int Unique identifier for the surface name : str Name of the surface type : str - Type of the surface, e.g. 'x-plane' + Type of the surface """ @@ -843,21 +848,21 @@ class ZCylinder(Cylinder): @property def x0(self): - return self.coeffs['x0'] + return self.coefficients['x0'] @property def y0(self): - return self.coeffs['y0'] + return self.coefficients['y0'] @x0.setter def x0(self, x0): check_type('x0 coefficient', x0, Real) - self._coeffs['x0'] = x0 + self._coefficients['x0'] = x0 @y0.setter def y0(self, y0): check_type('y0 coefficient', y0, Real) - self._coeffs['y0'] = y0 + self._coefficients['y0'] = y0 def bounding_box(self, side): """Determine an axis-aligned bounding box. @@ -928,14 +933,14 @@ class Sphere(Surface): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. - coeffs : dict + coefficients : dict Dictionary of surface coefficients id : int Unique identifier for the surface name : str Name of the surface type : str - Type of the surface, e.g. 'x-plane' + Type of the surface """ @@ -952,39 +957,39 @@ class Sphere(Surface): @property def x0(self): - return self.coeffs['x0'] + return self.coefficients['x0'] @property def y0(self): - return self.coeffs['y0'] + return self.coefficients['y0'] @property def z0(self): - return self.coeffs['z0'] + return self.coefficients['z0'] @property def r(self): - return self.coeffs['R'] + return self.coefficients['R'] @x0.setter def x0(self, x0): check_type('x0 coefficient', x0, Real) - self._coeffs['x0'] = x0 + self._coefficients['x0'] = x0 @y0.setter def y0(self, y0): check_type('y0 coefficient', y0, Real) - self._coeffs['y0'] = y0 + self._coefficients['y0'] = y0 @z0.setter def z0(self, z0): check_type('z0 coefficient', z0, Real) - self._coeffs['z0'] = z0 + self._coefficients['z0'] = z0 @r.setter def r(self, R): check_type('R coefficient', R, Real) - self._coeffs['R'] = R + self._coefficients['R'] = R def bounding_box(self, side): """Determine an axis-aligned bounding box. @@ -1056,14 +1061,14 @@ class Cone(Surface): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. - coeffs : dict + coefficients : dict Dictionary of surface coefficients id : int Unique identifier for the surface name : str Name of the surface type : str - Type of the surface, e.g. 'x-plane' + Type of the surface """ @@ -1081,39 +1086,39 @@ class Cone(Surface): @property def x0(self): - return self.coeffs['x0'] + return self.coefficients['x0'] @property def y0(self): - return self.coeffs['y0'] + return self.coefficients['y0'] @property def z0(self): - return self.coeffs['z0'] + return self.coefficients['z0'] @property def r2(self): - return self.coeffs['r2'] + return self.coefficients['r2'] @x0.setter def x0(self, x0): check_type('x0 coefficient', x0, Real) - self._coeffs['x0'] = x0 + self._coefficients['x0'] = x0 @y0.setter def y0(self, y0): check_type('y0 coefficient', y0, Real) - self._coeffs['y0'] = y0 + self._coefficients['y0'] = y0 @z0.setter def z0(self, z0): check_type('z0 coefficient', z0, Real) - self._coeffs['z0'] = z0 + self._coefficients['z0'] = z0 @r2.setter def r2(self, R2): check_type('R^2 coefficient', R2, Real) - self._coeffs['R2'] = R2 + self._coefficients['R2'] = R2 class XCone(Cone): @@ -1153,14 +1158,14 @@ class XCone(Cone): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. - coeffs : dict + coefficients : dict Dictionary of surface coefficients id : int Unique identifier for the surface name : str Name of the surface type : str - Type of the surface, e.g. 'x-plane' + Type of the surface """ @@ -1209,14 +1214,14 @@ class YCone(Cone): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. - coeffs : dict + coefficients : dict Dictionary of surface coefficients id : int Unique identifier for the surface name : str Name of the surface type : str - Type of the surface, e.g. 'x-plane' + Type of the surface """ @@ -1265,14 +1270,14 @@ class ZCone(Cone): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. - coeffs : dict + coefficients : dict Dictionary of surface coefficients id : int Unique identifier for the surface name : str Name of the surface type : str - Type of the surface, e.g. 'x-plane' + Type of the surface """ @@ -1309,14 +1314,14 @@ class Quadric(Surface): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. - coeffs : dict + coefficients : dict Dictionary of surface coefficients id : int Unique identifier for the surface name : str Name of the surface type : str - Type of the surface, e.g. 'x-plane' + Type of the surface """ @@ -1340,93 +1345,93 @@ class Quadric(Surface): @property def a(self): - return self.coeffs['a'] + return self.coefficients['a'] @property def b(self): - return self.coeffs['b'] + return self.coefficients['b'] @property def c(self): - return self.coeffs['c'] + return self.coefficients['c'] @property def d(self): - return self.coeffs['d'] + return self.coefficients['d'] @property def e(self): - return self.coeffs['e'] + return self.coefficients['e'] @property def f(self): - return self.coeffs['f'] + return self.coefficients['f'] @property def g(self): - return self.coeffs['g'] + return self.coefficients['g'] @property def h(self): - return self.coeffs['h'] + return self.coefficients['h'] @property def j(self): - return self.coeffs['j'] + return self.coefficients['j'] @property def k(self): - return self.coeffs['k'] + return self.coefficients['k'] @a.setter def a(self, a): check_type('a coefficient', a, Real) - self._coeffs['a'] = a + self._coefficients['a'] = a @b.setter def b(self, b): check_type('b coefficient', b, Real) - self._coeffs['b'] = b + self._coefficients['b'] = b @c.setter def c(self, c): check_type('c coefficient', c, Real) - self._coeffs['c'] = c + self._coefficients['c'] = c @d.setter def d(self, d): check_type('d coefficient', d, Real) - self._coeffs['d'] = d + self._coefficients['d'] = d @e.setter def e(self, e): check_type('e coefficient', e, Real) - self._coeffs['e'] = e + self._coefficients['e'] = e @f.setter def f(self, f): check_type('f coefficient', f, Real) - self._coeffs['f'] = f + self._coefficients['f'] = f @g.setter def g(self, g): check_type('g coefficient', g, Real) - self._coeffs['g'] = g + self._coefficients['g'] = g @h.setter def h(self, h): check_type('h coefficient', h, Real) - self._coeffs['h'] = h + self._coefficients['h'] = h @j.setter def j(self, j): check_type('j coefficient', j, Real) - self._coeffs['j'] = j + self._coefficients['j'] = j @k.setter def k(self, k): check_type('k coefficient', k, Real) - self._coeffs['k'] = k + self._coefficients['k'] = k class Halfspace(Region): diff --git a/openmc/tallies.py b/openmc/tallies.py index 1af3b12bc7..90b09f5828 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -3420,8 +3420,8 @@ class Tally(object): class Tallies(object): - """Tallies file used for an OpenMC simulation. Corresponds directly to the - tallies.xml input file. + """Collection of Tallies used for an OpenMC simulation. Corresponds directly to + the tallies.xml input file. """ From d6268831c75604f29d718d01253786a368e923d0 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Tue, 26 Apr 2016 23:07:07 -0400 Subject: [PATCH 457/650] Allow plotting without settings.xml --- src/input_xml.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 2954225335..474c59d189 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -38,8 +38,8 @@ contains subroutine read_input_xml() - call read_settings_xml() if (run_mode /= MODE_PLOTTING) then + call read_settings_xml() if (run_CE) then call read_ce_cross_sections_xml() else From e204952c369cc7181fbc74842956e991f84c5953 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Tue, 26 Apr 2016 23:26:16 -0400 Subject: [PATCH 458/650] Alow string shortcut to Material.add_element --- openmc/material.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmc/material.py b/openmc/material.py index c6030a8e67..17283d4ddc 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -387,7 +387,7 @@ class Material(object): Parameters ---------- - element : openmc.Element + element : openmc.Element or str Element to add percent : float Atom or weight percent @@ -401,7 +401,7 @@ class Material(object): 'macroscopic data-set has already been added'.format(self._id) raise ValueError(msg) - if not isinstance(element, openmc.Element): + if not isinstance(element, (openmc.Element, str)): msg = 'Unable to add an Element to Material ID="{0}" with a ' \ 'non-Element value "{1}"'.format(self._id, element) raise ValueError(msg) From 37e8f455d8116d675fe1f514d9ee95eeb26373ab Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Wed, 27 Apr 2016 10:47:06 -0400 Subject: [PATCH 459/650] Allow plotting with or without settings.xml --- src/input_xml.F90 | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 474c59d189..90c703d27d 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -38,8 +38,8 @@ contains subroutine read_input_xml() + call read_settings_xml() if (run_mode /= MODE_PLOTTING) then - call read_settings_xml() if (run_CE) then call read_ce_cross_sections_xml() else @@ -92,18 +92,22 @@ contains type(NodeList), pointer :: node_scat_list => null() type(NodeList), pointer :: node_source_list => null() - ! Display output message - call write_message("Reading settings XML file...", 5) - ! Check if settings.xml exists filename = trim(path_input) // "settings.xml" inquire(FILE=filename, EXIST=file_exists) if (.not. file_exists) then - call fatal_error("Settings XML file '" // trim(filename) // "' does not & - &exist! In order to run OpenMC, you first need a set of input files;& - & at a minimum, this includes settings.xml, geometry.xml, and & - &materials.xml. Please consult the user's guide at & - &http://mit-crpg.github.io/openmc for further information.") + if (run_mode /= MODE_PLOTTING) then + call fatal_error("Settings XML file '" // trim(filename) // "' does & + ¬ exist! In order to run OpenMC, you first need a set of input & + &files; at a minimum, this includes settings.xml, geometry.xml, & + &and materials.xml. Please consult the user's guide at & + &http://mit-crpg.github.io/openmc for further information.") + else + ! The settings.xml file is optional if we just want to make a plot. + return + end if + else + call write_message("Reading settings XML file...", 5) end if ! Parse settings.xml file From ad7bff393d38aaa15c84e51bd3c0222974efed38 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 27 Apr 2016 15:36:36 -0500 Subject: [PATCH 460/650] Make sure to capture stderr when using openmc.run() --- openmc/executor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/executor.py b/openmc/executor.py index edbbaddc40..fbd9e5d82a 100644 --- a/openmc/executor.py +++ b/openmc/executor.py @@ -10,7 +10,7 @@ if sys.version_info[0] >= 3: def _run(command, output, cwd): # Launch a subprocess p = subprocess.Popen(command, shell=True, cwd=cwd, stdout=subprocess.PIPE, - universal_newlines=True) + stderr=subprocess.STDOUT, universal_newlines=True) # Capture and re-print OpenMC output in real-time while True: From 76b2b65ab8e7233bfbc49663b9792c41edfc69bc Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Wed, 27 Apr 2016 18:13:32 -0400 Subject: [PATCH 461/650] Use basestring instead of str --- openmc/material.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmc/material.py b/openmc/material.py index 17283d4ddc..97c7cedcab 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -281,7 +281,7 @@ class Material(object): 'macroscopic data-set has already been added'.format(self._id) raise ValueError(msg) - if not isinstance(nuclide, (openmc.Nuclide, str)): + if not isinstance(nuclide, (openmc.Nuclide, basestring)): msg = 'Unable to add a Nuclide to Material ID="{0}" with a ' \ 'non-Nuclide value "{1}"'.format(self._id, nuclide) raise ValueError(msg) @@ -401,7 +401,7 @@ class Material(object): 'macroscopic data-set has already been added'.format(self._id) raise ValueError(msg) - if not isinstance(element, (openmc.Element, str)): + if not isinstance(element, (openmc.Element, basestring)): msg = 'Unable to add an Element to Material ID="{0}" with a ' \ 'non-Element value "{1}"'.format(self._id, element) raise ValueError(msg) From d9b097dbaf967405005e6a5706492ff0d4d227e8 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 29 Apr 2016 16:14:02 -0500 Subject: [PATCH 462/650] Make Materials, Plots, and Tallies list-like --- .../pythonapi/examples/mgxs-part-i.ipynb | 16 +- .../pythonapi/examples/mgxs-part-ii.ipynb | 9 +- .../pythonapi/examples/mgxs-part-iii.ipynb | 15 +- .../examples/pandas-dataframes.ipynb | 19 +-- .../pythonapi/examples/post-processing.ipynb | 17 +-- .../pythonapi/examples/tally-arithmetic.ipynb | 29 ++-- examples/python/basic/build-xml.py | 12 +- examples/python/boxes/build-xml.py | 10 +- .../python/lattice/hexagonal/build-xml.py | 14 +- examples/python/lattice/nested/build-xml.py | 14 +- examples/python/lattice/simple/build-xml.py | 16 +- examples/python/pincell/build-xml.py | 11 +- .../python/pincell_multigroup/build-xml.py | 16 +- examples/python/reflective/build-xml.py | 5 +- openmc/checkvalue.py | 26 +++- openmc/material.py | 122 +++++++++++----- openmc/mgxs/library.py | 2 +- openmc/plots.py | 76 ++++++++-- openmc/tallies.py | 137 +++++++++++++----- tests/input_set.py | 8 +- .../test_asymmetric_lattice.py | 7 +- tests/test_distribmat/test_distribmat.py | 3 +- tests/test_mg_max_order/test_mg_max_order.py | 2 +- tests/test_mg_nuclide/test_mg_nuclide.py | 2 +- tests/test_mg_tallies/test_mg_tallies.py | 21 +-- .../test_resonance_scattering.py | 3 +- tests/test_source/test_source.py | 3 +- tests/test_tallies/test_tallies.py | 41 ++---- .../test_tally_aggregation.py | 5 +- .../test_tally_arithmetic.py | 5 +- .../test_tally_slice_merge.py | 4 +- 31 files changed, 373 insertions(+), 297 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index c7a5b2ffa3..a450af97ec 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -212,10 +212,9 @@ }, "outputs": [], "source": [ - "# Instantiate a Materials object, register all Materials, and export to XML\n", - "materials_file = openmc.Materials()\n", + "# Instantiate a Materials collection and export to XML\n", + "materials_file = openmc.Materials([inf_medium])\n", "materials_file.default_xs = '71c'\n", - "materials_file.add_material(inf_medium)\n", "materials_file.export_to_xml()" ] }, @@ -466,17 +465,14 @@ "tallies_file = openmc.Tallies()\n", "\n", "# Add total tallies to the tallies file\n", - "for tally in total.tallies.values():\n", - " tallies_file.add_tally(tally)\n", + "tallies_file += total.tallies.values()\n", "\n", "# Add absorption tallies to the tallies file\n", - "for tally in absorption.tallies.values():\n", - " tallies_file.add_tally(tally)\n", + "tallies_file += absorption.tallies.values()\n", "\n", "# Add scattering tallies to the tallies file\n", - "for tally in scattering.tallies.values():\n", - " tallies_file.add_tally(tally)\n", - " \n", + "tallies_file += scattering.tallies.values()\n", + "\n", "# Export to \"tallies.xml\"\n", "tallies_file.export_to_xml()" ] diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index 49e301f5b0..793d884362 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -133,11 +133,8 @@ }, "outputs": [], "source": [ - "# Instantiate a Materials object, add Materials\n", - "materials_file = openmc.Materials()\n", - "materials_file.add_material(fuel)\n", - "materials_file.add_material(water)\n", - "materials_file.add_material(zircaloy)\n", + "# Instantiate a Materials collection\n", + "materials_file = openmc.Materials((fuel, water, zircaloy))\n", "materials_file.default_xs = '71c'\n", "\n", "# Export to \"materials.xml\"\n", @@ -408,7 +405,7 @@ " \n", " # Add OpenMC tallies to the tallies file for XML generation\n", " for tally in xs_library[cell.id][rxn_type].tallies.values():\n", - " tallies_file.add_tally(tally, merge=True)\n", + " tallies_file.append(tally, merge=True)\n", "\n", "# Export to \"tallies.xml\"\n", "tallies_file.export_to_xml()" diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index 3a3533ffec..34190371bb 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -133,11 +133,8 @@ }, "outputs": [], "source": [ - "# Instantiate a Materials object, add Materials\n", - "materials_file = openmc.Materials()\n", - "materials_file.add_material(fuel)\n", - "materials_file.add_material(water)\n", - "materials_file.add_material(zircaloy)\n", + "# Instantiate a Materials object\n", + "materials_file = openmc.Materials((fuel, water, zircaloy))\n", "materials_file.default_xs = '71c'\n", "\n", "# Export to \"materials.xml\"\n", @@ -419,8 +416,7 @@ "plot.color = 'mat'\n", "\n", "# Instantiate a Plots object, add Plot, and export to \"plots.xml\"\n", - "plot_file = openmc.Plots()\n", - "plot_file.add_plot(plot)\n", + "plot_file = openmc.Plots([plot])\n", "plot_file.export_to_xml()" ] }, @@ -685,9 +681,8 @@ "tally.filters = [mesh_filter]\n", "tally.scores = ['fission', 'nu-fission']\n", "\n", - "# Add mesh and tally to Tallies\n", - "tallies_file.add_mesh(mesh)\n", - "tallies_file.add_tally(tally)" + "# Add tally to collection\n", + "tallies_file.append(tally)" ] }, { diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index b0f2f6b133..d5e8b98614 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -108,11 +108,8 @@ }, "outputs": [], "source": [ - "# Instantiate a Materials object, add Materials\n", - "materials_file = openmc.Materials()\n", - "materials_file.add_material(fuel)\n", - "materials_file.add_material(water)\n", - "materials_file.add_material(zircaloy)\n", + "# Instantiate a Materials collection\n", + "materials_file = openmc.Materials((fuel, water, zircaloy))\n", "materials_file.default_xs = '71c'\n", "\n", "# Export to \"materials.xml\"\n", @@ -329,9 +326,8 @@ "plot.pixels = [250, 250]\n", "plot.color = 'mat'\n", "\n", - "# Instantiate a Plots object, add Plot, and export to \"plots.xml\"\n", - "plot_file = openmc.Plots()\n", - "plot_file.add_plot(plot)\n", + "# Instantiate a Plots collection and export to \"plots.xml\"\n", + "plot_file = openmc.Plots([plot])\n", "plot_file.export_to_xml()" ] }, @@ -449,8 +445,7 @@ "tally.scores = ['fission', 'nu-fission']\n", "\n", "# Add mesh and Tally to Tallies\n", - "tallies_file.add_mesh(mesh)\n", - "tallies_file.add_tally(tally)" + "tallies_file.append(tally)" ] }, { @@ -478,7 +473,7 @@ "tally.nuclides = [u235, u238]\n", "\n", "# Add mesh and tally to Tallies\n", - "tallies_file.add_tally(tally)" + "tallies_file.append(tally)" ] }, { @@ -510,7 +505,7 @@ "tally.triggers = [trigger]\n", "\n", "# Add mesh and tally to Tallies\n", - "tallies_file.add_tally(tally)" + "tallies_file.append(tally)" ] }, { diff --git a/docs/source/pythonapi/examples/post-processing.ipynb b/docs/source/pythonapi/examples/post-processing.ipynb index ce9209b03c..36cf63c6a6 100644 --- a/docs/source/pythonapi/examples/post-processing.ipynb +++ b/docs/source/pythonapi/examples/post-processing.ipynb @@ -104,11 +104,8 @@ }, "outputs": [], "source": [ - "# Instantiate a Materials object, add Materials\n", - "materials_file = openmc.Materials()\n", - "materials_file.add_material(fuel)\n", - "materials_file.add_material(water)\n", - "materials_file.add_material(zircaloy)\n", + "# Instantiate a Materials collection\n", + "materials_file = openmc.Materials((fuel, water, zircaloy))\n", "materials_file.default_xs = '71c'\n", "\n", "# Export to \"materials.xml\"\n", @@ -298,9 +295,8 @@ "plot.pixels = [250, 250]\n", "plot.color = 'mat'\n", "\n", - "# Instantiate a Plots object, add Plot, and export to \"plots.xml\"\n", - "plot_file = openmc.Plots()\n", - "plot_file.add_plot(plot)\n", + "# Instantiate a Plots collection and export to \"plots.xml\"\n", + "plot_file = openmc.Plots([plot])\n", "plot_file.export_to_xml()" ] }, @@ -393,17 +389,16 @@ "mesh.dimension = [100, 100]\n", "mesh.lower_left = [-0.63, -0.63]\n", "mesh.upper_right = [0.63, 0.63]\n", - "tallies_file.add_mesh(mesh)\n", "\n", "# Create mesh filter for tally\n", - "mesh_filter = openmc.Filter(type='mesh', bins=[1])\n", + "mesh_filter = openmc.Filter(type='mesh')\n", "mesh_filter.mesh = mesh\n", "\n", "# Create mesh tally to score flux and fission rate\n", "tally = openmc.Tally(name='flux')\n", "tally.filters = [mesh_filter]\n", "tally.scores = ['flux', 'fission']\n", - "tallies_file.add_tally(tally)" + "tallies_file.append(tally)" ] }, { diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index 81334efc26..14ca97d3f6 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -126,11 +126,8 @@ }, "outputs": [], "source": [ - "# Instantiate a Materials object, add Materials\n", - "materials_file = openmc.Materials()\n", - "materials_file.add_material(fuel)\n", - "materials_file.add_material(water)\n", - "materials_file.add_material(zircaloy)\n", + "# Instantiate a Materials collection\n", + "materials_file = openmc.Materials((fuel, water, zircaloy))\n", "materials_file.default_xs = '71c'\n", "\n", "# Export to \"materials.xml\"\n", @@ -321,9 +318,8 @@ "plot.pixels = [250, 250]\n", "plot.color = 'mat'\n", "\n", - "# Instantiate a Plots object, add Plot, and export to \"plots.xml\"\n", - "plot_file = openmc.Plots()\n", - "plot_file.add_plot(plot)\n", + "# Instantiate a Plots collection and export to \"plots.xml\"\n", + "plot_file = openmc.Plots([plot])\n", "plot_file.export_to_xml()" ] }, @@ -421,7 +417,7 @@ "tally.filters = [openmc.Filter(type='cell', bins=[fuel_cell.id, moderator_cell.id])]\n", "tally.filters.append(energy_filter)\n", "tally.scores = ['flux']\n", - "tallies_file.add_tally(tally)\n", + "tallies_file.append(tally)\n", "\n", "# Instantiate reaction rate Tally in fuel\n", "tally = openmc.Tally(name='fuel rxn rates')\n", @@ -429,7 +425,7 @@ "tally.filters.append(energy_filter)\n", "tally.scores = ['nu-fission', 'scatter']\n", "tally.nuclides = [u238, u235]\n", - "tallies_file.add_tally(tally)\n", + "tallies_file.append(tally)\n", "\n", "# Instantiate reaction rate Tally in moderator\n", "tally = openmc.Tally(name='moderator rxn rates')\n", @@ -437,7 +433,7 @@ "tally.filters.append(energy_filter)\n", "tally.scores = ['absorption', 'total']\n", "tally.nuclides = [o16, h1]\n", - "tallies_file.add_tally(tally)" + "tallies_file.append(tally)" ] }, { @@ -453,8 +449,7 @@ "abs_rate = openmc.Tally(name='abs. rate')\n", "fiss_rate.scores = ['nu-fission']\n", "abs_rate.scores = ['absorption']\n", - "tallies_file.add_tally(fiss_rate)\n", - "tallies_file.add_tally(abs_rate)" + "tallies_file += (fiss_rate, abs_rate)", ] }, { @@ -469,7 +464,7 @@ "therm_abs_rate = openmc.Tally(name='therm. abs. rate')\n", "therm_abs_rate.scores = ['absorption']\n", "therm_abs_rate.filters = [openmc.Filter(type='energy', bins=[0., 0.625e-6])]\n", - "tallies_file.add_tally(therm_abs_rate)" + "tallies_file.append(therm_abs_rate)" ] }, { @@ -485,7 +480,7 @@ "fuel_therm_abs_rate.scores = ['absorption']\n", "fuel_therm_abs_rate.filters = [openmc.Filter(type='energy', bins=[0., 0.625e-6]),\n", " openmc.Filter(type='cell', bins=[fuel_cell.id])]\n", - "tallies_file.add_tally(fuel_therm_abs_rate)" + "tallies_file.append(fuel_therm_abs_rate)" ] }, { @@ -500,7 +495,7 @@ "therm_fiss_rate = openmc.Tally(name='therm. fiss. rate')\n", "therm_fiss_rate.scores = ['nu-fission']\n", "therm_fiss_rate.filters = [openmc.Filter(type='energy', bins=[0., 0.625e-6])]\n", - "tallies_file.add_tally(therm_fiss_rate)" + "tallies_file.append(therm_fiss_rate)" ] }, { @@ -520,7 +515,7 @@ "tally.filters.append(energy_filter)\n", "tally.scores = ['nu-fission', 'scatter']\n", "tally.nuclides = [h1, u238]\n", - "tallies_file.add_tally(tally)" + "tallies_file.append(tally)" ] }, { diff --git a/examples/python/basic/build-xml.py b/examples/python/basic/build-xml.py index 05accbc5ed..ffff037205 100644 --- a/examples/python/basic/build-xml.py +++ b/examples/python/basic/build-xml.py @@ -31,10 +31,9 @@ fuel = openmc.Material(material_id=40, name='fuel') fuel.set_density('g/cc', 4.5) fuel.add_nuclide(u235, 1.) -# Instantiate a Materials collection, register all Materials, and export to XML -materials_file = openmc.Materials() +# Instantiate a Materials collection and export to XML +materials_file = openmc.Materials([moderator, fuel]) materials_file.default_xs = '71c' -materials_file.add_materials([moderator, fuel]) materials_file.export_to_xml() @@ -124,9 +123,6 @@ third_tally = openmc.Tally(tally_id=3, name='third tally') third_tally.filters = [cell_filter, energy_filter, energyout_filter] third_tally.scores = ['scatter', 'nu-scatter', 'nu-fission'] -# Instantiate a Tallies collection, register all Tallies, and export to XML -tallies_file = openmc.Tallies() -tallies_file.add_tally(first_tally) -tallies_file.add_tally(second_tally) -tallies_file.add_tally(third_tally) +# Instantiate a Tallies collection and export to XML +tallies_file = openmc.Tallies((first_tally, second_tally, third_tally)) tallies_file.export_to_xml() diff --git a/examples/python/boxes/build-xml.py b/examples/python/boxes/build-xml.py index 318af22654..814f60bebd 100644 --- a/examples/python/boxes/build-xml.py +++ b/examples/python/boxes/build-xml.py @@ -36,10 +36,9 @@ moderator.add_nuclide(h1, 2.) moderator.add_nuclide(o16, 1.) moderator.add_s_alpha_beta('HH2O', '71t') -# Instantiate a Materials collection, register all Materials, and export to XML -materials_file = openmc.Materials() +# Instantiate a Materials collection and export to XML +materials_file = openmc.Materials([fuel1, fuel2, moderator]) materials_file.default_xs = '71c' -materials_file.add_materials([fuel1, fuel2, moderator]) materials_file.export_to_xml() @@ -129,7 +128,6 @@ plot.width = [20, 20] plot.pixels = [200, 200] plot.color = 'cell' -# Instantiate a Plots collection, add Plot, and export to XML -plot_file = openmc.Plots() -plot_file.add_plot(plot) +# Instantiate a Plots collection and export to XML +plot_file = openmc.Plots([plot]) plot_file.export_to_xml() diff --git a/examples/python/lattice/hexagonal/build-xml.py b/examples/python/lattice/hexagonal/build-xml.py index 04002faf2f..ef3a128474 100644 --- a/examples/python/lattice/hexagonal/build-xml.py +++ b/examples/python/lattice/hexagonal/build-xml.py @@ -35,10 +35,9 @@ iron = openmc.Material(material_id=3, name='iron') iron.set_density('g/cc', 7.9) iron.add_nuclide(fe56, 1.) -# Instantiate a Materials collection, register all Materials, and export to XML -materials_file = openmc.Materials() +# Instantiate a Materials collection and export to XML +materials_file = openmc.Materials([moderator, fuel, iron]) materials_file.default_xs = '71c' -materials_file.add_materials([moderator, fuel, iron]) materials_file.export_to_xml() @@ -152,9 +151,7 @@ plot_yz.pixels = [400, 400] plot_yz.color = 'mat' # Instantiate a Plots collection, add plots, and export to XML -plot_file = openmc.Plots() -plot_file.add_plot(plot_xy) -plot_file.add_plot(plot_yz) +plot_file = openmc.Plots((plot_xy, plot_yz)) plot_file.export_to_xml() @@ -167,7 +164,6 @@ tally = openmc.Tally(tally_id=1) tally.filters = [openmc.Filter(type='distribcell', bins=[cell2.id])] tally.scores = ['total'] -# Instantiate a Tallies collection, register Tally/Mesh, and export to XML -tallies_file = openmc.Tallies() -tallies_file.add_tally(tally) +# Instantiate a Tallies collection and export to XML +tallies_file = openmc.Tallies([tally]) tallies_file.export_to_xml() diff --git a/examples/python/lattice/nested/build-xml.py b/examples/python/lattice/nested/build-xml.py index 0e4e459e2e..b2d611d345 100644 --- a/examples/python/lattice/nested/build-xml.py +++ b/examples/python/lattice/nested/build-xml.py @@ -30,10 +30,9 @@ moderator.add_nuclide(h1, 2.) moderator.add_nuclide(o16, 1.) moderator.add_s_alpha_beta('HH2O', '71t') -# Instantiate a Materials collection, register all Materials, and export to XML -materials_file = openmc.Materials() +# Instantiate a Materials collection and export to XML +materials_file = openmc.Materials((moderator, fuel)) materials_file.default_xs = '71c' -materials_file.add_materials([moderator, fuel]) materials_file.export_to_xml() @@ -150,9 +149,8 @@ plot.width = [4, 4] plot.pixels = [400, 400] plot.color = 'mat' -# Instantiate a Plots object, add Plot, and export to XML -plot_file = openmc.Plots() -plot_file.add_plot(plot) +# Instantiate a Plots object and export to XML +plot_file = openmc.Plots([plot]) plot_file.export_to_xml() @@ -177,7 +175,5 @@ tally.filters = [mesh_filter] tally.scores = ['total'] # Instantiate a Tallies collection, register Tally/Mesh, and export to XML -tallies_file = openmc.Tallies() -tallies_file.add_mesh(mesh) -tallies_file.add_tally(tally) +tallies_file = openmc.Tallies([tally]) tallies_file.export_to_xml() diff --git a/examples/python/lattice/simple/build-xml.py b/examples/python/lattice/simple/build-xml.py index 8d9481aaa5..65c3554798 100644 --- a/examples/python/lattice/simple/build-xml.py +++ b/examples/python/lattice/simple/build-xml.py @@ -30,10 +30,9 @@ moderator.add_nuclide(h1, 2.) moderator.add_nuclide(o16, 1.) moderator.add_s_alpha_beta('HH2O', '71t') -# Instantiate a Materials collection, register all Materials, and export to XML -materials_file = openmc.Materials() +# Instantiate a Materials collection and export to XML +materials_file = openmc.Materials([moderator, fuel]) materials_file.default_xs = '71c' -materials_file.add_materials([moderator, fuel]) materials_file.export_to_xml() @@ -142,9 +141,8 @@ plot.width = [4, 4] plot.pixels = [400, 400] plot.color = 'mat' -# Instantiate a Plots collection, add Plot, and export to XML -plot_file = openmc.Plots() -plot_file.add_plot(plot) +# Instantiate a Plots collection and export to XML +plot_file = openmc.Plots([plot]) plot_file.export_to_xml() @@ -173,8 +171,6 @@ tally.filters = [mesh_filter] tally.scores = ['total'] tally.triggers = [trigger] -# Instantiate a Tallies collection, register Tally/Mesh, and export to XML -tallies_file = openmc.Tallies() -tallies_file.add_mesh(mesh) -tallies_file.add_tally(tally) +# Instantiate a Tallies collection and export to XML +tallies_file = openmc.Tallies([tally]) tallies_file.export_to_xml() diff --git a/examples/python/pincell/build-xml.py b/examples/python/pincell/build-xml.py index 561df2b5a1..a3be3e97ec 100644 --- a/examples/python/pincell/build-xml.py +++ b/examples/python/pincell/build-xml.py @@ -100,10 +100,9 @@ borated_water.add_nuclide(o16, 2.4672e-2) borated_water.add_nuclide(o17, 6.0099e-5) borated_water.add_s_alpha_beta('HH2O', '71t') -# Instantiate a Materials collection, register all Materials, and export to XML -materials_file = openmc.Materials() +# Instantiate a Materials collection and export to XML +materials_file = openmc.Materials([uo2, helium, zircaloy, borated_water]) materials_file.default_xs = '71c' -materials_file.add_materials([uo2, helium, zircaloy, borated_water]) materials_file.export_to_xml() @@ -197,8 +196,6 @@ tally = openmc.Tally(tally_id=1, name='tally 1') tally.filters = [energy_filter, mesh_filter] tally.scores = ['flux', 'fission', 'nu-fission'] -# Instantiate a Tallies collection, register all Tallies, and export to XML -tallies_file = openmc.Tallies() -tallies_file.add_mesh(mesh) -tallies_file.add_tally(tally) +# Instantiate a Tallies collection and export to XML +tallies_file = openmc.Tallies([tally]) tallies_file.export_to_xml() diff --git a/examples/python/pincell_multigroup/build-xml.py b/examples/python/pincell_multigroup/build-xml.py index 697a596d97..c7d6dfc8be 100644 --- a/examples/python/pincell_multigroup/build-xml.py +++ b/examples/python/pincell_multigroup/build-xml.py @@ -81,10 +81,9 @@ water = openmc.Material(material_id=2, name='Water') water.set_density('macro', 1.0) water.add_macroscopic(h2o_data) -# Instantiate a Materials collection, register all Materials, and export to XML -materials_file = openmc.Materials() +# Instantiate a Materials collection and export to XML +materials_file = openmc.Materials([uo2, water]) materials_file.default_xs = '300K' -materials_file.add_materials([uo2, water]) materials_file.export_to_xml() @@ -167,14 +166,9 @@ mesh_filter.mesh = mesh # Instantiate the Tally tally = openmc.Tally(tally_id=1, name='tally 1') -tally.add_filter(energy_filter) -tally.add_filter(mesh_filter) -tally.add_score('flux') -tally.add_score('fission') -tally.add_score('nu-fission') +tally.filters = [energy_filter, mesh_filter] +tally.scores = ['flux', 'fission', 'nu-fission'] # Instantiate a Tallies collection, register all Tallies, and export to XML -tallies_file = openmc.Tallies() -tallies_file.add_mesh(mesh) -tallies_file.add_tally(tally) +tallies_file = openmc.Tallies([tally]) tallies_file.export_to_xml() diff --git a/examples/python/reflective/build-xml.py b/examples/python/reflective/build-xml.py index e4776e7443..4ecd0351fc 100644 --- a/examples/python/reflective/build-xml.py +++ b/examples/python/reflective/build-xml.py @@ -23,10 +23,9 @@ fuel = openmc.Material(material_id=1, name='fuel') fuel.set_density('g/cc', 4.5) fuel.add_nuclide(u235, 1.) -# Instantiate a Materials collection, register Material, and export to XML -materials_file = openmc.Materials() +# Instantiate a Materials collection and export to XML +materials_file = openmc.Materials([fuel]) materials_file.default_xs = '71c' -materials_file.add_material(fuel) materials_file.export_to_xml() diff --git a/openmc/checkvalue.py b/openmc/checkvalue.py index 53f4b83682..62b843a3a0 100644 --- a/openmc/checkvalue.py +++ b/openmc/checkvalue.py @@ -1,3 +1,4 @@ +import copy from collections import Iterable from numbers import Integral, Real @@ -57,7 +58,7 @@ def check_type(name, value, expected_type, expected_iter_type=None): else: msg = 'Unable to set "{0}" to "{1}" which is not of type "{2}"'.format( name, value, expected_type.__name__) - raise ValueError(msg) + raise TypeError(msg) if expected_iter_type: for item in value: @@ -71,7 +72,7 @@ def check_type(name, value, expected_type, expected_iter_type=None): msg = 'Unable to set "{0}" to "{1}" since each item must be ' \ 'of type "{2}"'.format(name, value, expected_iter_type.__name__) - raise ValueError(msg) + raise TypeError(msg) def check_iterable_type(name, value, expected_type, min_depth=1, max_depth=1): @@ -122,7 +123,7 @@ def check_iterable_type(name, value, expected_type, min_depth=1, max_depth=1): if len(tree) < min_depth: msg = 'Error setting "{0}": The item at {1} does not meet the '\ 'minimum depth of {2}'.format(name, ind_str, min_depth) - raise ValueError(msg) + raise TypeError(msg) # This item is okay. Move on to the next item. index[-1] += 1 @@ -140,7 +141,7 @@ def check_iterable_type(name, value, expected_type, min_depth=1, max_depth=1): msg = 'Error setting {0}: Found an iterable at {1}, items '\ 'in that iterable exceed the maximum depth of {2}' \ .format(name, ind_str, max_depth) - raise ValueError(msg) + raise TypeError(msg) else: # This item is completely unexpected. @@ -148,7 +149,7 @@ def check_iterable_type(name, value, expected_type, min_depth=1, max_depth=1): "item at {2} is of type '{3}'"\ .format(name, expected_type.__name__, ind_str, type(current_item).__name__) - raise ValueError(msg) + raise TypeError(msg) def check_length(name, value, length_min, length_max=None): @@ -278,6 +279,21 @@ class CheckedList(list): for item in items: self.append(item) + def __add__(self, other): + new_instance = copy.copy(self) + new_instance += other + return new_instance + + def __radd__(self, other): + return self + other + + def __iadd__(self, other): + check_type('CheckedList add operand', other, Iterable, + self.expected_type) + for item in other: + self.append(item) + return self + def append(self, item): """Append item to list diff --git a/openmc/material.py b/openmc/material.py index 97c7cedcab..b3c2813416 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -8,7 +8,7 @@ if sys.version_info[0] >= 3: basestring = str import openmc -from openmc.checkvalue import check_type, check_value, check_greater_than +import openmc.checkvalue as cv from openmc.clean_xml import * @@ -202,15 +202,15 @@ class Material(object): self._id = AUTO_MATERIAL_ID AUTO_MATERIAL_ID += 1 else: - check_type('material ID', material_id, Integral) - check_greater_than('material ID', material_id, 0, equality=True) + cv.check_type('material ID', material_id, Integral) + cv.check_greater_than('material ID', material_id, 0, equality=True) self._id = material_id @name.setter def name(self, name): if name is not None: - check_type('name for Material ID="{0}"'.format(self._id), - name, basestring) + cv.check_type('name for Material ID="{0}"'.format(self._id), + name, basestring) self._name = name else: self._name = '' @@ -228,9 +228,9 @@ class Material(object): """ - check_type('the density for Material ID="{0}"'.format(self._id), - density, Real) - check_value('density units', units, DENSITY_UNITS) + cv.check_type('the density for Material ID="{0}"'.format(self._id), + density, Real) + cv.check_value('density units', units, DENSITY_UNITS) if density is None and units is not 'sum': msg = 'Unable to set the density for Material ID="{0}" ' \ @@ -642,9 +642,25 @@ class Material(object): return element -class Materials(object): - """Collection of Materials used for an OpenMC simulation. Corresponds directly - to the materials.xml input file. +class Materials(cv.CheckedList): + """Collection of Materials used for an OpenMC simulation. + + This class corresponds directly to the materials.xml input file. It can be + thought of as a normal Python list where each member is a + :class:`Material`. It behaves like a list as the following example + demonstrates: + + >>> fuel = openmc.Material() + >>> clad = openmc.Material() + >>> water = openmc.Material() + >>> m = openmc.Materials([fuel]) + >>> m.append(water) + >>> m += [clad] + + Parameters + ---------- + materials : Iterable of openmc.Material + Materials to add to the collection Attributes ---------- @@ -654,10 +670,12 @@ class Materials(object): """ - def __init__(self): - self._materials = [] + def __init__(self, materials=None): + super(Materials, self).__init__(Material, 'materials collection') self._default_xs = None self._materials_file = ET.Element("materials") + if materials is not None: + self += materials @property def default_xs(self): @@ -665,11 +683,14 @@ class Materials(object): @default_xs.setter def default_xs(self, xs): - check_type('default xs', xs, basestring) + cv.check_type('default xs', xs, basestring) self._default_xs = xs def add_material(self, material): - """Add a material to the file. + """Append material to collection + + .. deprecated:: 0.8 + Use :meth:`Materials.append` instead. Parameters ---------- @@ -677,51 +698,72 @@ class Materials(object): Material to add """ - - if not isinstance(material, Material): - msg = 'Unable to add a non-Material "{0}" to the ' \ - 'Materials instance'.format(material) - raise ValueError(msg) - - self._materials.append(material) + warnings.warn("Materials.add_material(...) has been deprecated and may be " + "removed in a future version. Use Material.append(...) " + "instead.", DeprecationWarning) + self.append(material) def add_materials(self, materials): - """Add multiple materials to the file. + """Add multiple materials to the collection + + .. deprecated:: 0.8 + Use compound assignment instead. Parameters ---------- - materials : tuple or list of openmc.Material + materials : Iterable of openmc.Material Materials to add """ - - if not isinstance(materials, Iterable): - msg = 'Unable to create OpenMC materials.xml file from "{0}" which ' \ - 'is not iterable'.format(materials) - raise ValueError(msg) - + warnings.warn("Materials.add_materials(...) has been deprecated and may be " + "removed in a future version. Use compound assignment " + "instead.", DeprecationWarning) for material in materials: - self.add_material(material) + self.append(material) + + def append(self, material): + """Append material to collection + + Parameters + ---------- + material : openmc.Material + Material to append + + """ + super(Materials, self).append(material) + + def insert(self, index, material): + """Insert material before index + + Parameters + ---------- + index : int + Index in list + material : openmc.Material + Material to insert + + """ + super(Materials, self).insert(index, material) def remove_material(self, material): """Remove a material from the file + .. deprecated:: 0.8 + Use :meth:`Materials.remove` instead. + Parameters ---------- material : openmc.Material Material to remove """ - - if not isinstance(material, Material): - msg = 'Unable to remove a non-Material "{0}" from the ' \ - 'Materials instance'.format(material) - raise ValueError(msg) - - self._materials.remove(material) + warnings.warn("Materials.remove_material(...) has been deprecated and " + "may be removed in a future version. Use " + "Materials.remove(...) instead.", DeprecationWarning) + self.remove(material) def make_isotropic_in_lab(self): - for material in self._materials: + for material in self: material.make_isotropic_in_lab() def _create_material_subelements(self): @@ -729,7 +771,7 @@ class Materials(object): subelement = ET.SubElement(self._materials_file, "default_xs") subelement.text = self._default_xs - for material in self._materials: + for material in self: xml_element = material.get_material_xml() self._materials_file.append(xml_element) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 8d5e9854ee..f3bf2018dc 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -370,7 +370,7 @@ class Library(object): for mgxs_type in self.mgxs_types: mgxs = self.get_mgxs(domain, mgxs_type) for tally_id, tally in mgxs.tallies.items(): - tallies_file.add_tally(tally, merge=merge) + tallies_file.append(tally, merge=merge) def load_from_statepoint(self, statepoint): """Extracts tallies in an OpenMC StatePoint with the data needed to diff --git a/openmc/plots.py b/openmc/plots.py index a967cb0604..9167e55d50 100644 --- a/openmc/plots.py +++ b/openmc/plots.py @@ -2,6 +2,7 @@ from collections import Iterable from numbers import Real, Integral from xml.etree import ElementTree as ET import sys +import warnings import numpy as np @@ -401,43 +402,90 @@ class Plot(object): return element -class Plots(object): - """Collection of Plots used for an OpenMC simulation. Corresponds directly to - the plots.xml input file. +class Plots(cv.CheckedList): + """Collection of Plots used for an OpenMC simulation. + + This class corresponds directly to the plots.xml input file. It can be + thought of as a normal Python list where each member is a :class:`Plot`. It + behaves like a list as the following example demonstrates: + + >>> xz_plot = openmc.Plot() + >>> big_plot = openmc.Plot() + >>> small_plot = openmc.Plot() + >>> p = openmc.Plots((xz_plot, big_plot)) + >>> p.append(small_plot) + >>> small_plot = p.pop() + + Parameters + ---------- + plots : Iterable of openmc.Plot + Plots to add to the collection """ - def __init__(self): - self._plots = [] + def __init__(self, plots=None): + super(Plots, self).__init__(Plot, 'plots collection') self._plots_file = ET.Element("plots") + if plots is not None: + self += plots def add_plot(self, plot): """Add a plot to the file. + .. deprecated:: 0.8 + Use :meth:`Plots.append` instead. + Parameters ---------- plot : openmc.Plot Plot to add """ + warnings.warn("Plots.add_plot(...) has been deprecated and may be " + "removed in a future version. Use Plots.append(...) " + "instead.", DeprecationWarning) + self.append(plot) - if not isinstance(plot, Plot): - msg = 'Unable to add a non-Plot "{0}" to the Plots instance'.format(plot) - raise ValueError(msg) + def append(self, plot): + """Append plot to collection - self._plots.append(plot) + Parameters + ---------- + plot : openmc.Plot + Plot to append + + """ + super(Plots, self).append(plot) + + def insert(self, index, plot): + """Insert plot before index + + Parameters + ---------- + index : int + Index in list + plot : openmc.Plot + Plot to insert + + """ + super(Plots, self).insert(index, plot) def remove_plot(self, plot): """Remove a plot from the file. + .. deprecated:: 0.8 + Use :meth:`Plots.remove` instead. + Parameters ---------- plot : openmc.Plot Plot to remove """ - - self._plots.remove(plot) + warnings.warn("Plots.remove_plot(...) has been deprecated and may be " + "removed in a future version. Use Plots.remove(...) " + "instead.", DeprecationWarning) + self.remove(plot) def colorize(self, geometry, seed=1): """Generate a consistent color scheme for each domain in each plot. @@ -455,7 +503,7 @@ class Plots(object): """ - for plot in self._plots: + for plot in self: plot.colorize(geometry, seed) @@ -481,11 +529,11 @@ class Plots(object): """ - for plot in self._plots: + for plot in self: plot.highlight_domains(geometry, domains, seed, alpha, background) def _create_plot_subelements(self): - for plot in self._plots: + for plot in self: xml_element = plot.get_plot_xml() if len(plot._name) > 0: diff --git a/openmc/tallies.py b/openmc/tallies.py index 90b09f5828..3a5a1f1e8c 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -3419,65 +3419,108 @@ class Tally(object): return new_tally -class Tallies(object): - """Collection of Tallies used for an OpenMC simulation. Corresponds directly to - the tallies.xml input file. +class Tallies(cv.CheckedList): + """Collection of Tallies used for an OpenMC simulation. + + This class corresponds directly to the tallies.xml input file. It can be + thought of as a normal Python list where each member is a :class:`Tally`. It + behaves like a list as the following example demonstrates: + + >>> t1 = openmc.Tally() + >>> t2 = openmc.Tally() + >>> t3 = openmc.Tally() + >>> tallies = openmc.Tallies([t1]) + >>> tallies.append(t2) + >>> tallies += [t3] + + Parameters + ---------- + tallies : Iterable of openmc.Tally + Tallies to add to the collection """ - def __init__(self): - self._tallies = [] - self._meshes = [] + def __init__(self, tallies=None): + super(Tallies, self).__init__(Tally, 'tallies collection') self._tallies_file = ET.Element("tallies") - - @property - def tallies(self): - return self._tallies - - @property - def meshes(self): - return self._meshes + if tallies is not None: + self += tallies def add_tally(self, tally, merge=False): - """Add a tally to the file + """Append tally to collection + + .. deprecated:: 0.8 + Use :meth:`Tallies.append` instead. Parameters ---------- tally : openmc.Tally - Tally to add to file + Tally to add merge : bool Indicate whether the tally should be merged with an existing tally, if possible. Defaults to False. """ + warnings.warn("Tallies.add_tally(...) has been deprecated and may be " + "removed in a future version. Use Tallies.append(...) " + "instead.", DeprecationWarning) + self.append(tally, merge) + def append(self, tally, merge=False): + """Append tally to collection + + Parameters + ---------- + tally : openmc.Tally + Tally to append + merge : bool + Indicate whether the tally should be merged with an existing tally, + if possible. Defaults to False. + + """ if not isinstance(tally, Tally): msg = 'Unable to add a non-Tally "{0}" to the Tallies instance'.format(tally) - raise ValueError(msg) + raise TypeError(msg) if merge: merged = False # Look for a tally to merge with this one - for i, tally2 in enumerate(self._tallies): + for i, tally2 in enumerate(self): # If a mergeable tally is found if tally2.can_merge(tally): # Replace tally 2 with the merged tally merged_tally = tally2.merge(tally) - self._tallies[i] = merged_tally + self[i] = merged_tally merged = True break # If not mergeable tally was found, simply add this tally if not merged: - self._tallies.append(tally) + super(Tallies, self).append(tally) else: - self._tallies.append(tally) + super(Tallies, self).append(tally) + + def insert(self, index, item): + """Insert tally before index + + Parameters + ---------- + index : int + Index in list + item : openmc.Tally + Tally to insert + + """ + super(Tallies, self).insert(index, item) def remove_tally(self, tally): - """Remove a tally from the file + """Remove a tally from the collection + + .. deprecated:: 0.8 + Use :meth:`Tallies.remove` instead. Parameters ---------- @@ -3485,8 +3528,11 @@ class Tallies(object): Tally to remove """ + warnings.warn("Tallies.remove_tally(...) has been deprecated and may " + "be removed in a future version. Use Tallies.remove(...) " + "instead.", DeprecationWarning) - self._tallies.remove(tally) + self.remove(tally) def merge_tallies(self): """Merge any mergeable tallies together. Note that n-way merges are @@ -3494,8 +3540,8 @@ class Tallies(object): """ - for i, tally1 in enumerate(self._tallies): - for j, tally2 in enumerate(self._tallies): + for i, tally1 in enumerate(self): + for j, tally2 in enumerate(self): # Do not merge the same tally with itself if i == j: continue @@ -3504,10 +3550,10 @@ class Tallies(object): if tally1.can_merge(tally2): # Replace tally 1 with the merged tally merged_tally = tally1.merge(tally2) - self._tallies[i] = merged_tally + self[i] = merged_tally # Remove tally 2 since it is no longer needed - self._tallies.pop(j) + self.pop(j) # Continue iterating from the first loop break @@ -3515,6 +3561,10 @@ class Tallies(object): def add_mesh(self, mesh): """Add a mesh to the file + .. deprecated:: 0.8 + Meshes that appear in a tally are automatically added to the + collection. + Parameters ---------- mesh : openmc.Mesh @@ -3522,36 +3572,43 @@ class Tallies(object): """ - if not isinstance(mesh, Mesh): - msg = 'Unable to add a non-Mesh "{0}" to the Tallies instance'.format(mesh) - raise ValueError(msg) - - self._meshes.append(mesh) + warnings.warn("Tallies.add_mesh(...) has been deprecated and may be " + "removed in a future version. Meshes that appear in a " + "tally are automatically added to the collection.", + DeprecationWarning) def remove_mesh(self, mesh): """Remove a mesh from the file + .. deprecated:: 0.8 + Meshes do not need to be managed explicitly. + Parameters ---------- mesh : openmc.Mesh Mesh to remove from the file """ - - self._meshes.remove(mesh) + warnings.warn("Tallies.remove_mesh(...) has been deprecated and may be " + "removed in a future version. Meshes do not need to be " + "managed explicitly.", DeprecationWarning) def _create_tally_subelements(self): - for tally in self._tallies: + for tally in self: xml_element = tally.get_tally_xml() self._tallies_file.append(xml_element) def _create_mesh_subelements(self): - for mesh in self._meshes: - if len(mesh._name) > 0: - self._tallies_file.append(ET.Comment(mesh._name)) + already_written = set() + for tally in self: + for f in tally.filters: + if f.type == 'mesh' and f.mesh not in already_written: + if len(f.mesh.name) > 0: + self._tallies_file.append(ET.Comment(f.mesh.name)) - xml_element = mesh.get_mesh_xml() - self._tallies_file.append(xml_element) + xml_element = f.mesh.get_mesh_xml() + self._tallies_file.append(xml_element) + already_written.add(f.mesh) def export_to_xml(self): """Create a tallies.xml file that can be used for a simulation. diff --git a/tests/input_set.py b/tests/input_set.py index 3be6c1db44..2c6841e254 100644 --- a/tests/input_set.py +++ b/tests/input_set.py @@ -267,9 +267,9 @@ class InputSet(object): # Define the materials file. self.materials.default_xs = '71c' - self.materials.add_materials((fuel, clad, cold_water, hot_water, - rpv_steel, lower_rad_ref, upper_rad_ref, bot_plate, bot_nozzle, - top_nozzle, top_fa, bot_fa)) + self.materials += (fuel, clad, cold_water, hot_water, rpv_steel, + lower_rad_ref, upper_rad_ref, bot_plate, + bot_nozzle, top_nozzle, top_fa, bot_fa) # Define surfaces. s1 = openmc.ZCylinder(R=0.41, surface_id=1) @@ -590,7 +590,7 @@ class MGInputSet(InputSet): # Define the materials file. self.materials.default_xs = '71c' - self.materials.add_materials((uo2, clad, water)) + self.materials += (uo2, clad, water) # Define surfaces. diff --git a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py index 94562e6d9e..03e55d32f9 100644 --- a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py +++ b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py @@ -54,12 +54,11 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): # Initialize the tallies tally = openmc.Tally(name='distribcell tally', tally_id=27) - tally.add_filter(distrib_filter) - tally.add_score('nu-fission') + tally.filters.append(distrib_filter) + tally.scores.append('nu-fission') # Initialize the tallies file - tallies_file = openmc.Tallies() - tallies_file.add_tally(tally) + tallies_file = openmc.Tallies([tally]) # Assign the tallies file to the input set self._input_set.tallies = tallies_file diff --git a/tests/test_distribmat/test_distribmat.py b/tests/test_distribmat/test_distribmat.py index ded2863bdb..d8f78c5cf1 100644 --- a/tests/test_distribmat/test_distribmat.py +++ b/tests/test_distribmat/test_distribmat.py @@ -28,9 +28,8 @@ class DistribmatTestHarness(PyAPITestHarness): light_fuel.set_density('g/cc', 2.0) light_fuel.add_nuclide('U-235', 1.0) - mats_file = openmc.Materials() + mats_file = openmc.Materials([moderator, dense_fuel, light_fuel]) mats_file.default_xs = '71c' - mats_file.add_materials([moderator, dense_fuel, light_fuel]) mats_file.export_to_xml() diff --git a/tests/test_mg_max_order/test_mg_max_order.py b/tests/test_mg_max_order/test_mg_max_order.py index 2c4db58df0..7f59572cff 100644 --- a/tests/test_mg_max_order/test_mg_max_order.py +++ b/tests/test_mg_max_order/test_mg_max_order.py @@ -27,7 +27,7 @@ class MGNuclideInputSet(MGInputSet): # Define the materials file. self.materials.default_xs = '71c' - self.materials.add_materials((uo2, clad, water)) + self.materials += (uo2, clad, water) # Define surfaces. diff --git a/tests/test_mg_nuclide/test_mg_nuclide.py b/tests/test_mg_nuclide/test_mg_nuclide.py index 0fa7184a32..866840ddf1 100644 --- a/tests/test_mg_nuclide/test_mg_nuclide.py +++ b/tests/test_mg_nuclide/test_mg_nuclide.py @@ -26,7 +26,7 @@ class MGNuclideInputSet(MGInputSet): # Define the materials file. self.materials.default_xs = '71c' - self.materials.add_materials((uo2, clad, water)) + self.materials += (uo2, clad, water) # Define surfaces. diff --git a/tests/test_mg_tallies/test_mg_tallies.py b/tests/test_mg_tallies/test_mg_tallies.py index ffc57f9e9e..3048f4a39a 100644 --- a/tests/test_mg_tallies/test_mg_tallies.py +++ b/tests/test_mg_tallies/test_mg_tallies.py @@ -27,24 +27,15 @@ class MGTalliesTestHarness(PyAPITestHarness): mat_filter = openmc.Filter(type='material', bins=[1,2,3]) tally1 = openmc.Tally(tally_id=1) - tally1.add_filter(mesh_filter) - tally1.add_score('total') - tally1.add_score('absorption') - tally1.add_score('flux') - tally1.add_score('fission') - tally1.add_score('nu-fission') + tally1.filters = [mesh_filter] + tally1.scores = ['total', 'absorption', 'flux', + 'fission', 'nu-fission'] tally2 = openmc.Tally(tally_id=2) - tally2.add_filter(mat_filter) - tally2.add_filter(energy_filter) - tally2.add_filter(energyout_filter) - tally2.add_score('scatter') - tally2.add_score('nu-scatter') + tally2.filters = [mat_filter, energy_filter, energyout_filter] + tally2.scores = ['scatter', 'nu-scatter'] - self._input_set.tallies = openmc.Tallies() - self._input_set.tallies.add_mesh(mesh) - self._input_set.tallies.add_tally(tally1) - self._input_set.tallies.add_tally(tally2) + self._input_set.tallies = openmc.Tallies([tally1, tally2]) super(MGTalliesTestHarness, self)._build_inputs() diff --git a/tests/test_resonance_scattering/test_resonance_scattering.py b/tests/test_resonance_scattering/test_resonance_scattering.py index 5cecfedc45..b752cf7f3b 100644 --- a/tests/test_resonance_scattering/test_resonance_scattering.py +++ b/tests/test_resonance_scattering/test_resonance_scattering.py @@ -17,9 +17,8 @@ class ResonanceScatteringTestHarness(PyAPITestHarness): mat.add_nuclide('Pu-239', 0.02) mat.add_nuclide('H-1', 20.0) - mats_file = openmc.Materials() + mats_file = openmc.Materials([mat]) mats_file.default_xs = '71c' - mats_file.add_material(mat) mats_file.export_to_xml() # Geometry diff --git a/tests/test_source/test_source.py b/tests/test_source/test_source.py index 1e41bd10e7..0abae4344e 100644 --- a/tests/test_source/test_source.py +++ b/tests/test_source/test_source.py @@ -16,8 +16,7 @@ class SourceTestHarness(PyAPITestHarness): mat1 = openmc.Material(material_id=1) mat1.set_density('g/cm3', 4.5) mat1.add_nuclide(openmc.Nuclide('U-235', '71c'), 1.0) - materials = openmc.Materials() - materials.add_material(mat1) + materials = openmc.Materials([mat1]) materials.export_to_xml() sphere = openmc.Sphere(surface_id=1, R=10.0, boundary_type='vacuum') diff --git a/tests/test_tallies/test_tallies.py b/tests/test_tallies/test_tallies.py index bb0273589e..52d4084fde 100644 --- a/tests/test_tallies/test_tallies.py +++ b/tests/test_tallies/test_tallies.py @@ -42,7 +42,8 @@ class TalliesTestHarness(PyAPITestHarness): mesh_2x2.lower_left = [-182.07, -182.07] mesh_2x2.upper_right = [182.07, 182.07] mesh_2x2.dimension = [2, 2] - mesh_filter = Filter(type='mesh', bins=(1,)) + mesh_filter = Filter(type='mesh') + mesh_filter.mesh = mesh_2x2 azimuthal_tally4 = Tally() azimuthal_tally4.filters = [azimuthal_filter2, mesh_filter] azimuthal_tally4.scores = ['flux'] @@ -171,32 +172,18 @@ class TalliesTestHarness(PyAPITestHarness): all_nuclide_tallies[0].estimator = 'collision' self._input_set.tallies = Tallies() - self._input_set.tallies.add_tally(azimuthal_tally1) - self._input_set.tallies.add_tally(azimuthal_tally2) - self._input_set.tallies.add_tally(azimuthal_tally3) - self._input_set.tallies.add_tally(azimuthal_tally4) - self._input_set.tallies.add_tally(cellborn_tally) - self._input_set.tallies.add_tally(dg_tally) - self._input_set.tallies.add_tally(energy_tally) - self._input_set.tallies.add_tally(energyout_tally) - self._input_set.tallies.add_tally(transfer_tally) - self._input_set.tallies.add_tally(material_tally) - self._input_set.tallies.add_tally(mu_tally1) - self._input_set.tallies.add_tally(mu_tally2) - self._input_set.tallies.add_tally(mu_tally3) - self._input_set.tallies.add_tally(polar_tally1) - self._input_set.tallies.add_tally(polar_tally2) - self._input_set.tallies.add_tally(polar_tally3) - self._input_set.tallies.add_tally(polar_tally4) - self._input_set.tallies.add_tally(universe_tally) - [self._input_set.tallies.add_tally(t) for t in score_tallies] - [self._input_set.tallies.add_tally(t) for t in flux_tallies] - self._input_set.tallies.add_tally(scatter_tally1) - self._input_set.tallies.add_tally(scatter_tally2) - [self._input_set.tallies.add_tally(t) for t in total_tallies] - self._input_set.tallies.add_tally(questionable_tally) - [self._input_set.tallies.add_tally(t) for t in all_nuclide_tallies] - self._input_set.tallies.add_mesh(mesh_2x2) + self._input_set.tallies += ( + [azimuthal_tally1, azimuthal_tally2, azimuthal_tally3, + azimuthal_tally4, cellborn_tally, dg_tally, energy_tally, + energyout_tally, transfer_tally, material_tally, mu_tally1, + mu_tally2, mu_tally3, polar_tally1, polar_tally2, polar_tally3, + polar_tally4, universe_tally]) + self._input_set.tallies += score_tallies + self._input_set.tallies += flux_tallies + self._input_set.tallies += (scatter_tally1, scatter_tally2) + self._input_set.tallies += total_tallies + self._input_set.tallies.append(questionable_tally) + self._input_set.tallies += all_nuclide_tallies self._input_set.export() diff --git a/tests/test_tally_aggregation/test_tally_aggregation.py b/tests/test_tally_aggregation/test_tally_aggregation.py index 009a7dc09c..359afbe347 100644 --- a/tests/test_tally_aggregation/test_tally_aggregation.py +++ b/tests/test_tally_aggregation/test_tally_aggregation.py @@ -15,9 +15,6 @@ class TallyAggregationTestHarness(PyAPITestHarness): # The summary.h5 file needs to be created to read in the tallies self._input_set.settings.output = {'summary': True} - # Initialize the tallies file - tallies_file = openmc.Tallies() - # Initialize the nuclides u235 = openmc.Nuclide('U-235') u238 = openmc.Nuclide('U-238') @@ -33,7 +30,7 @@ class TallyAggregationTestHarness(PyAPITestHarness): tally.filters = [energy_filter, distrib_filter] tally.scores = ['nu-fission', 'total'] tally.nuclides = [u235, u238, pu239] - tallies_file.add_tally(tally) + tallies_file = openmc.Tallies([tally]) # Export tallies to file self._input_set.tallies = tallies_file diff --git a/tests/test_tally_arithmetic/test_tally_arithmetic.py b/tests/test_tally_arithmetic/test_tally_arithmetic.py index ffea74603c..8e2d2b3491 100644 --- a/tests/test_tally_arithmetic/test_tally_arithmetic.py +++ b/tests/test_tally_arithmetic/test_tally_arithmetic.py @@ -43,14 +43,13 @@ class TallyArithmeticTestHarness(PyAPITestHarness): tally.filters = [material_filter, energy_filter, distrib_filter] tally.scores = ['nu-fission', 'total'] tally.nuclides = [u235, pu239] - tallies_file.add_tally(tally) + tallies_file.append(tally) tally = openmc.Tally(name='tally 2') tally.filters = [energy_filter, mesh_filter] tally.scores = ['total', 'fission'] tally.nuclides = [u238, u235] - tallies_file.add_tally(tally) - tallies_file.add_mesh(mesh) + tallies_file.append(tally) # Export tallies to file self._input_set.tallies = tallies_file diff --git a/tests/test_tally_slice_merge/test_tally_slice_merge.py b/tests/test_tally_slice_merge/test_tally_slice_merge.py index 933fdf6fa3..85dd532c61 100644 --- a/tests/test_tally_slice_merge/test_tally_slice_merge.py +++ b/tests/test_tally_slice_merge/test_tally_slice_merge.py @@ -70,9 +70,7 @@ class TallySliceMergeTestHarness(PyAPITestHarness): distribcell_tally.add_nuclide(nuclide) # Add tallies to a Tallies object - tallies_file = openmc.Tallies() - tallies_file.add_tally(tallies[0]) - tallies_file.add_tally(distribcell_tally) + tallies_file = openmc.Tallies((tallies[0], distribcell_tally)) # Export tallies to file self._input_set.tallies = tallies_file From ed5505cd979b72ee6a32f5e4624ec614ef34e802 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Fri, 29 Apr 2016 22:13:41 -0400 Subject: [PATCH 463/650] Added option to transpose array returned by ScatterMatrixXS.get_xs(...) method --- openmc/mgxs/mgxs.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 33255de30c..90b956b219 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -654,7 +654,8 @@ class MGXS(object): self.tallies[tally_type] = sp_tally def get_xs(self, groups='all', subdomains='all', nuclides='all', - xs_type='macro', order_groups='increasing', value='mean'): + xs_type='macro', order_groups='increasing', + value='mean', **kwargs): """Returns an array of multi-group cross sections. This method constructs a 2D NumPy array for the requested multi-group @@ -1143,7 +1144,7 @@ class MGXS(object): def build_hdf5_store(self, filename='mgxs.h5', directory='mgxs', subdomains='all', nuclides='all', - xs_type='macro', append=True): + xs_type='macro', row_column='inout', append=True): """Export the multi-group cross section data to an HDF5 binary file. This method constructs an HDF5 file which stores the multi-group @@ -1172,6 +1173,9 @@ class MGXS(object): xs_type: {'macro', 'micro'} Store the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + row_column: {'inout', 'outin'} + Store scattering matrices indexed first by incoming group and second + by outgoing group ('inout'), or vice versa ('outin'). append : bool If true, appends to an existing HDF5 file with the same filename directory (if one exists). Defaults to True. @@ -1258,9 +1262,9 @@ class MGXS(object): # Extract the cross section for this subdomain and nuclide average = self.get_xs(subdomains=[subdomain], nuclides=[nuclide], - xs_type=xs_type, value='mean') + xs_type=xs_type, value='mean', row_column=row_column) std_dev = self.get_xs(subdomains=[subdomain], nuclides=[nuclide], - xs_type=xs_type, value='std_dev') + xs_type=xs_type, value='std_dev', row_column=row_column) average = average.squeeze() std_dev = std_dev.squeeze() @@ -1973,7 +1977,8 @@ class ScatterMatrixXS(MGXS): def get_xs(self, in_groups='all', out_groups='all', subdomains='all', nuclides='all', xs_type='macro', - order_groups='increasing', value='mean'): + order_groups='increasing', row_column='inout', + value='mean', **kwargs): """Returns an array of multi-group cross sections. This method constructs a 2D NumPy array for the requested scattering @@ -1999,6 +2004,9 @@ class ScatterMatrixXS(MGXS): Return the cross section indexed according to increasing or decreasing energy groups (decreasing or increasing energies). Defaults to 'increasing'. + row_column: {'inout', 'outin'} + Return the cross section indexed first by incoming group and second + by outgoing group ('inout'), or vice versa ('outin'). value : str A string for the type of value to return - 'mean', 'std_dev', or 'rel_err' are accepted. Defaults to the empty string. @@ -2092,6 +2100,10 @@ class ScatterMatrixXS(MGXS): new_shape += xs.shape[1:] xs = np.reshape(xs, new_shape) + # Transpose the scattering matrix if requested by user + if row_column == 'outin': + xs = np.swapaxes(xs, 1, 2) + # Reverse energies to align with increasing energy groups xs = xs[:, ::-1, ::-1, :] @@ -2422,7 +2434,8 @@ class Chi(MGXS): return merged_mgxs def get_xs(self, groups='all', subdomains='all', nuclides='all', - xs_type='macro', order_groups='increasing', value='mean'): + xs_type='macro', order_groups='increasing', + value='mean', **kwargs): """Returns an array of the fission spectrum. This method constructs a 2D NumPy array for the requested multi-group From d460e51fb772fe53121974c1daaa6996877298d0 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Fri, 29 Apr 2016 23:27:59 -0400 Subject: [PATCH 464/650] Moved Jupyter Notebook examples to top of Python API page --- docs/source/pythonapi/index.rst | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/source/pythonapi/index.rst b/docs/source/pythonapi/index.rst index 3bedaf2c7b..1631976e67 100644 --- a/docs/source/pythonapi/index.rst +++ b/docs/source/pythonapi/index.rst @@ -13,6 +13,20 @@ online. We recommend going through the modules from Codecademy_ and/or the `Scipy lectures`_. The full API documentation serves to provide more information on a given module or class. +------------------------- +Example Jupyter Notebooks +------------------------- + +.. toctree:: + :maxdepth: 1 + + examples/post-processing + examples/pandas-dataframes + examples/tally-arithmetic + examples/mgxs-part-i + examples/mgxs-part-ii + examples/mgxs-part-iii + ------------------------------------ :mod:`openmc` -- Basic Functionality ------------------------------------ @@ -271,20 +285,6 @@ Multi-group Cross Section Libraries openmc.mgxs.Library -------------------------- -Example Jupyter Notebooks -------------------------- - -.. toctree:: - :maxdepth: 1 - - examples/post-processing - examples/pandas-dataframes - examples/tally-arithmetic - examples/mgxs-part-i - examples/mgxs-part-ii - examples/mgxs-part-iii - .. _Jupyter: https://jupyter.org/ .. _NumPy: http://www.numpy.org/ .. _Codecademy: https://www.codecademy.com/tracks/python From 6fc37fb99cf277dfe364559edf642a78f90762b4 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Fri, 29 Apr 2016 23:31:12 -0400 Subject: [PATCH 465/650] Added a link to Read the Docs to homepage --- docs/source/index.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 54ba825e58..7edc560e2e 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -13,11 +13,12 @@ OpenMC was originally developed by members of the `Computational Reactor Physics Group`_ at the `Massachusetts Institute of Technology`_ starting in 2011. Various universities, laboratories, and other organizations now contribute to the development of OpenMC. For more information on OpenMC, feel -free to send a message to the User's Group `mailing list`_. +free to send a message to the User's Group `mailing list`_. Documentation for the latest version of the develop branch can be found on `Read the Docs`_. .. _Computational Reactor Physics Group: http://crpg.mit.edu .. _Massachusetts Institute of Technology: http://web.mit.edu .. _mailing list: https://groups.google.com/forum/?fromgroups=#!forum/openmc-users +.. _Read the Docs: http://openmc.readthedocs.io/en/latest/ .. only:: html From 6a2743f1e12fbc0745ff770f22df8847af859e90 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Sat, 30 Apr 2016 06:37:02 -0500 Subject: [PATCH 466/650] Fix comma in tally arithmetic notebook --- .../pythonapi/examples/tally-arithmetic.ipynb | 66 ++++++++----------- 1 file changed, 28 insertions(+), 38 deletions(-) diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index 14ca97d3f6..25c57f3c5f 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -15,16 +15,7 @@ "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - } - ], + "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" @@ -362,7 +353,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAALKSURB\nVGje7dpLcqQwDAbgHHE2YeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmN\nP+HDhw8fPnz48Kf6VH9G+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4\nzPji99z0/AJ4n1lfvJ6fnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6\npA0wfln+ho/fwgYYn19C/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tN\nDbSGz7T0SBEWw4vLXzbQ6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X5\n8wZaxWd1+fMGiuFvir8bvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV\n873hB8UnM3xzANtf8nb4dwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7\nT/ppARBvp48UwJnelT5SACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4/\n/Jve+fhsH6Ctv7n8PTzjvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V\n32/o9+fl389Xnx+g5x/o+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6\n/4Le/6D3T/D9V67Y/ZsVQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/\ngPs/0P4TtP8F7r9J3AIO9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTu\nf4X7b+H+X7T/+BPuf3aM8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIw\nMTYtMDQtMTNUMTE6Mzk6MTQtMDQ6MDALPlLjAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA0LTEz\nVDExOjM5OjE0LTA0OjAwemPqXwAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AEHgslKE7FoLIAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDQtMzBUMDY6Mzc6\nNDAtMDU6MDAMbOxZAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA0LTMwVDA2OjM3OjQwLTA1OjAw\nfTFU5QAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -449,7 +440,7 @@ "abs_rate = openmc.Tally(name='abs. rate')\n", "fiss_rate.scores = ['nu-fission']\n", "abs_rate.scores = ['absorption']\n", - "tallies_file += (fiss_rate, abs_rate)", + "tallies_file += (fiss_rate, abs_rate)" ] }, { @@ -562,12 +553,11 @@ " 888\n", " 888\n", "\n", - " Copyright: 2011-2015 Massachusetts Institute of Technology\n", - " License: http://mit-crpg.github.io/openmc/license.html\n", + " Copyright: 2011-2016 Massachusetts Institute of Technology\n", + " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: eeb5091ca3a34cc85df73a3318cae2b6c7097413\n", - " Date/Time: 2016-04-13 11:39:14\n", - " MPI Processes: 1\n", + " Git SHA1: ae083cf5d491e6a778d5b762dad19c8d5fe45238\n", + " Date/Time: 2016-04-30 06:37:41\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -623,20 +613,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.0300E-01 seconds\n", - " Reading cross sections = 8.6000E-02 seconds\n", - " Total time in simulation = 1.4439E+01 seconds\n", - " Time in transport only = 1.4430E+01 seconds\n", - " Time in inactive batches = 2.2790E+00 seconds\n", - " Time in active batches = 1.2160E+01 seconds\n", - " Time synchronizing fission bank = 2.0000E-03 seconds\n", + " Total time for initialization = 7.0900E-01 seconds\n", + " Reading cross sections = 4.0400E-01 seconds\n", + " Total time in simulation = 1.7108E+01 seconds\n", + " Time in transport only = 1.7093E+01 seconds\n", + " Time in inactive batches = 3.3970E+00 seconds\n", + " Time in active batches = 1.3711E+01 seconds\n", + " Time synchronizing fission bank = 1.0000E-03 seconds\n", " Sampling source sites = 1.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 1.0000E-03 seconds\n", - " Total time elapsed = 1.4856E+01 seconds\n", - " Calculation Rate (inactive) = 5484.86 neutrons/second\n", - " Calculation Rate (active) = 3083.88 neutrons/second\n", + " Total time elapsed = 1.7835E+01 seconds\n", + " Calculation Rate (inactive) = 3679.72 neutrons/second\n", + " Calculation Rate (active) = 2735.03 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -810,7 +800,7 @@ " \n", " \n", " 0\n", - " 0\n", + " 0.0\n", " 6.250000e-07\n", " total\n", " absorption\n", @@ -872,7 +862,7 @@ " \n", " \n", " 0\n", - " 0\n", + " 0.0\n", " 6.250000e-07\n", " total\n", " nu-fission\n", @@ -936,7 +926,7 @@ " \n", " \n", " 0\n", - " 0\n", + " 0.0\n", " 6.250000e-07\n", " 10000\n", " total\n", @@ -1002,7 +992,7 @@ " \n", " \n", " 0\n", - " 0\n", + " 0.0\n", " 6.250000e-07\n", " 10000\n", " total\n", @@ -1067,7 +1057,7 @@ " \n", " \n", " 0\n", - " 0\n", + " 0.0\n", " 6.250000e-07\n", " 10000\n", " total\n", @@ -1610,21 +1600,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" + "pygments_lexer": "ipython3", + "version": "3.5.1" } }, "nbformat": 4, From 7741b525bb5457ba03dd4dde101e06c0c2daf766 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sat, 30 Apr 2016 09:35:17 -0400 Subject: [PATCH 467/650] Removed OpenCG dependency for distribcell paths in Pandas DataFrames --- .../examples/pandas-dataframes.ipynb | 484 ++++-------------- openmc/filter.py | 189 ++++--- openmc/tallies.py | 19 +- 3 files changed, 208 insertions(+), 484 deletions(-) diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index b0f2f6b133..c9e73caac9 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -374,7 +374,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAPZSURB\nVGje7Zs7buMwEIZ9iey50gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwg\nwIcgg8Cc4fCTSK5W4OeFkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7\nE08mlia+rn7VcKXP8sRszFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WB\nzfiz20hXORmP9fi/bM9EeUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4\nlXju8K3DKv9NThOZ3q2KmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3Oaf\nPX40NGgST2r+uvQkXXp6cKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcub\nlfKGt6apotG/NVx3SInWtLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJb\nf8qlPynYmpKCh7OB1fzNalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utr\nJTy8/06TXh0r/5JOa2JmYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU\n4YuBTPa/8P67l/6r44ds+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m\n/65n+S8p/itN15v0UkW3/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB\n6R3Cqn55U4rv4kfH3zaSgQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6\nbjT6rym9I/v/03/b+LHS4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv\n6h9B/Bfxr9j1Hz2eN/hO8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wX\nfP8Mvf9G37/D/ovuP8SeP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7\n+O+E8zdP/8XOf8Hnz9Dzb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589j\nz5/Y8ej9h4D+W7qQmf57efqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m\n4fwXuH+M3n+OO3++AX9clR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA0LTEzVDExOjQw\nOjAxLTA0OjAwQIJDkwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNC0xM1QxMTo0MDowMS0wNDow\nMDHf+y8AAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAPZSURB\nVGje7Zs7buMwEIZ9iey50gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwg\nwIcgg8Cc4fCTSK5W4OeFkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7\nE08mlia+rn7VcKXP8sRszFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WB\nzfiz20hXORmP9fi/bM9EeUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4\nlXju8K3DKv9NThOZ3q2KmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3Oaf\nPX40NGgST2r+uvQkXXp6cKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcub\nlfKGt6apotG/NVx3SInWtLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJb\nf8qlPynYmpKCh7OB1fzNalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utr\nJTy8/06TXh0r/5JOa2JmYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU\n4YuBTPa/8P67l/6r44ds+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m\n/65n+S8p/itN15v0UkW3/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB\n6R3Cqn55U4rv4kfH3zaSgQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6\nbjT6rym9I/v/03/b+LHS4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv\n6h9B/Bfxr9j1Hz2eN/hO8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wX\nfP8Mvf9G37/D/ovuP8SeP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7\n+O+E8zdP/8XOf8Hnz9Dzb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589j\nz5/Y8ej9h4D+W7qQmf57efqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m\n4fwXuH+M3n+OO3++AX9clR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA0LTMwVDA5OjMx\nOjI5LTA0OjAwzUliGgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNC0zMFQwOTozMToyOS0wNDow\nMLwU2qYAAAAASUVORK5CYII=\n", "text/plain": [ "" ] @@ -538,134 +538,13 @@ "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - " .d88888b. 888b d888 .d8888b.\n", - " d88P\" \"Y88b 8888b d8888 d88P Y88b\n", - " 888 888 88888b.d88888 888 888\n", - " 888 888 88888b. .d88b. 88888b. 888Y88888P888 888 \n", - " 888 888 888 \"88b d8P Y8b 888 \"88b 888 Y888P 888 888 \n", - " 888 888 888 888 88888888 888 888 888 Y8P 888 888 888\n", - " Y88b. .d88P 888 d88P Y8b. 888 888 888 \" 888 Y88b d88P\n", - " \"Y88888P\" 88888P\" \"Y8888 888 888 888 888 \"Y8888P\"\n", - "__________________888______________________________________________________\n", - " 888\n", - " 888\n", - "\n", - " Copyright: 2011-2015 Massachusetts Institute of Technology\n", - " License: http://mit-crpg.github.io/openmc/license.html\n", - " Version: 0.7.1\n", - " Git SHA1: eeb5091ca3a34cc85df73a3318cae2b6c7097413\n", - " Date/Time: 2016-04-13 11:40:02\n", - " MPI Processes: 1\n", - "\n", - " ===========================================================================\n", - " ========================> INITIALIZATION <=========================\n", - " ===========================================================================\n", - "\n", - " Reading settings XML file...\n", - " Reading cross sections XML file...\n", - " Reading geometry XML file...\n", - " Reading materials XML file...\n", - " Reading tallies XML file...\n", - " Building neighboring cells lists for each surface...\n", - " Loading ACE cross section table: 92235.71c\n", - " Loading ACE cross section table: 92238.71c\n", - " Loading ACE cross section table: 8016.71c\n", - " Loading ACE cross section table: 1001.71c\n", - " Loading ACE cross section table: 5010.71c\n", - " Loading ACE cross section table: 40090.71c\n", - " Maximum neutron transport energy: 20.0000 MeV for 92235.71c\n", - " Initializing source particles...\n", - "\n", - " ===========================================================================\n", - " ====================> K EIGENVALUE SIMULATION <====================\n", - " ===========================================================================\n", - "\n", - " Bat./Gen. k Average k \n", - " ========= ======== ==================== \n", - " 1/1 0.55921 \n", - " 2/1 0.63816 \n", - " 3/1 0.68834 \n", - " 4/1 0.71192 \n", - " 5/1 0.67935 \n", - " 6/1 0.68274 \n", - " 7/1 0.66339 0.67307 +/- 0.00967\n", - " 8/1 0.65835 0.66816 +/- 0.00743\n", - " 9/1 0.66697 0.66786 +/- 0.00527\n", - " 10/1 0.70498 0.67528 +/- 0.00847\n", - " 11/1 0.68596 0.67706 +/- 0.00714\n", - " 12/1 0.68481 0.67817 +/- 0.00614\n", - " 13/1 0.68369 0.67886 +/- 0.00536\n", - " 14/1 0.68785 0.67986 +/- 0.00483\n", - " 15/1 0.66145 0.67802 +/- 0.00470\n", - " 16/1 0.71831 0.68168 +/- 0.00561\n", - " 17/1 0.68428 0.68190 +/- 0.00512\n", - " 18/1 0.67527 0.68139 +/- 0.00474\n", - " 19/1 0.68166 0.68141 +/- 0.00439\n", - " 20/1 0.65475 0.67963 +/- 0.00446\n", - " Triggers unsatisfied, max unc./thresh. is 1.07581 for absorption in tally 10002\n", - " The estimated number of batches is 23\n", - " Creating state point statepoint.020.h5...\n", - " 21/1 0.64538 0.67749 +/- 0.00469\n", - " 22/1 0.73275 0.68074 +/- 0.00547\n", - " 23/1 0.71674 0.68274 +/- 0.00553\n", - " Triggers satisfied for batch 23\n", - " Creating state point statepoint.023.h5...\n", - "\n", - " ===========================================================================\n", - " ======================> SIMULATION FINISHED <======================\n", - " ===========================================================================\n", - "\n", - "\n", - " =======================> TIMING STATISTICS <=======================\n", - "\n", - " Total time for initialization = 3.7900E-01 seconds\n", - " Reading cross sections = 8.6000E-02 seconds\n", - " Total time in simulation = 8.7310E+00 seconds\n", - " Time in transport only = 8.7200E+00 seconds\n", - " Time in inactive batches = 1.3230E+00 seconds\n", - " Time in active batches = 7.4080E+00 seconds\n", - " Time synchronizing fission bank = 2.0000E-03 seconds\n", - " Sampling source sites = 1.0000E-03 seconds\n", - " SEND/RECV source sites = 0.0000E+00 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 9.1240E+00 seconds\n", - " Calculation Rate (inactive) = 9448.22 neutrons/second\n", - " Calculation Rate (active) = 5062.10 neutrons/second\n", - "\n", - " ============================> RESULTS <============================\n", - "\n", - " k-effective (Collision) = 0.67952 +/- 0.00434\n", - " k-effective (Track-length) = 0.68274 +/- 0.00553\n", - " k-effective (Absorption) = 0.68095 +/- 0.00369\n", - " Combined k-effective = 0.67994 +/- 0.00349\n", - " Leakage Fraction = 0.34133 +/- 0.00332\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Remove old HDF5 (summary, statepoint) files\n", - "!rm statepoint.*\n", + "#!rm statepoint.*\n", "\n", "# Run OpenMC!\n", - "openmc.run()" + "#openmc.run()()" ] }, { @@ -1114,9 +993,9 @@ "outputs": [ { "data": { - "image/png": "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\nD03l9kElNMu/AAAAAElFTkSuQmCC\n", + "image/png": "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\nSWry/wHxFqsYpaO7aQAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1139,7 +1018,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 27, @@ -1150,7 +1029,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1734,7 +1613,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 35, "metadata": { "collapsed": false }, @@ -1757,11 +1636,11 @@ " \n", " \n", " \n", - " cell\n", " univ\n", + " cell\n", " lat\n", - " cell\n", " univ\n", + " cell\n", " \n", " \n", " \n", @@ -1786,14 +1665,14 @@ " \n", " \n", " 558\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", - " 9\n", + " 7\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 279\n", " absorption\n", " 8.19e-05\n", @@ -1801,14 +1680,14 @@ " \n", " \n", " 559\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", - " 9\n", + " 7\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 279\n", " scatter\n", " 1.33e-02\n", @@ -1816,14 +1695,14 @@ " \n", " \n", " 560\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", " 8\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 280\n", " absorption\n", " 1.00e-04\n", @@ -1831,14 +1710,14 @@ " \n", " \n", " 561\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", " 8\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 280\n", " scatter\n", " 1.40e-02\n", @@ -1846,14 +1725,14 @@ " \n", " \n", " 562\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", - " 7\n", + " 9\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 281\n", " absorption\n", " 9.52e-05\n", @@ -1861,14 +1740,14 @@ " \n", " \n", " 563\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", - " 7\n", + " 9\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 281\n", " scatter\n", " 1.51e-02\n", @@ -1876,14 +1755,14 @@ " \n", " \n", " 564\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", - " 6\n", + " 10\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 282\n", " absorption\n", " 9.85e-05\n", @@ -1891,14 +1770,14 @@ " \n", " \n", " 565\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", - " 6\n", + " 10\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 282\n", " scatter\n", " 1.53e-02\n", @@ -1906,14 +1785,14 @@ " \n", " \n", " 566\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", - " 5\n", + " 11\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 283\n", " absorption\n", " 1.08e-04\n", @@ -1921,14 +1800,14 @@ " \n", " \n", " 567\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", - " 5\n", + " 11\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 283\n", " scatter\n", " 1.65e-02\n", @@ -1936,14 +1815,14 @@ " \n", " \n", " 568\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", - " 4\n", + " 12\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 284\n", " absorption\n", " 1.13e-04\n", @@ -1951,14 +1830,14 @@ " \n", " \n", " 569\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", - " 4\n", + " 12\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 284\n", " scatter\n", " 1.67e-02\n", @@ -1966,14 +1845,14 @@ " \n", " \n", " 570\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", - " 3\n", + " 13\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 285\n", " absorption\n", " 1.23e-04\n", @@ -1981,14 +1860,14 @@ " \n", " \n", " 571\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", - " 3\n", + " 13\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 285\n", " scatter\n", " 1.88e-02\n", @@ -1996,14 +1875,14 @@ " \n", " \n", " 572\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", - " 2\n", + " 14\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 286\n", " absorption\n", " 1.44e-04\n", @@ -2011,14 +1890,14 @@ " \n", " \n", " 573\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", - " 2\n", + " 14\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 286\n", " scatter\n", " 1.90e-02\n", @@ -2026,14 +1905,14 @@ " \n", " \n", " 574\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", - " 1\n", + " 15\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 287\n", " absorption\n", " 1.26e-04\n", @@ -2041,14 +1920,14 @@ " \n", " \n", " 575\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", - " 1\n", + " 15\n", " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 287\n", " scatter\n", " 1.97e-02\n", @@ -2056,14 +1935,14 @@ " \n", " \n", " 576\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", + " 16\n", " 0\n", - " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 288\n", " absorption\n", " 1.25e-04\n", @@ -2071,14 +1950,14 @@ " \n", " \n", " 577\n", - " 10003\n", " 0\n", + " 10003\n", " 10001\n", " 16\n", + " 16\n", " 0\n", - " 0\n", - " 10002\n", " 10000\n", + " 10002\n", " 288\n", " scatter\n", " 2.01e-02\n", @@ -2089,29 +1968,29 @@ "
" ], "text/plain": [ - " level 1 level 2 level 3 distribcell score \\\n", - " cell univ lat cell univ \n", - " id id id x y z id id \n", - "558 10003 0 10001 16 9 0 10002 10000 279 absorption \n", - "559 10003 0 10001 16 9 0 10002 10000 279 scatter \n", - "560 10003 0 10001 16 8 0 10002 10000 280 absorption \n", - "561 10003 0 10001 16 8 0 10002 10000 280 scatter \n", - "562 10003 0 10001 16 7 0 10002 10000 281 absorption \n", - "563 10003 0 10001 16 7 0 10002 10000 281 scatter \n", - "564 10003 0 10001 16 6 0 10002 10000 282 absorption \n", - "565 10003 0 10001 16 6 0 10002 10000 282 scatter \n", - "566 10003 0 10001 16 5 0 10002 10000 283 absorption \n", - "567 10003 0 10001 16 5 0 10002 10000 283 scatter \n", - "568 10003 0 10001 16 4 0 10002 10000 284 absorption \n", - "569 10003 0 10001 16 4 0 10002 10000 284 scatter \n", - "570 10003 0 10001 16 3 0 10002 10000 285 absorption \n", - "571 10003 0 10001 16 3 0 10002 10000 285 scatter \n", - "572 10003 0 10001 16 2 0 10002 10000 286 absorption \n", - "573 10003 0 10001 16 2 0 10002 10000 286 scatter \n", - "574 10003 0 10001 16 1 0 10002 10000 287 absorption \n", - "575 10003 0 10001 16 1 0 10002 10000 287 scatter \n", - "576 10003 0 10001 16 0 0 10002 10000 288 absorption \n", - "577 10003 0 10001 16 0 0 10002 10000 288 scatter \n", + " level 1 level 2 level 3 distribcell score \\\n", + " univ cell lat univ cell \n", + " id id id x y z id id \n", + "558 0 10003 10001 16 7 0 10000 10002 279 absorption \n", + "559 0 10003 10001 16 7 0 10000 10002 279 scatter \n", + "560 0 10003 10001 16 8 0 10000 10002 280 absorption \n", + "561 0 10003 10001 16 8 0 10000 10002 280 scatter \n", + "562 0 10003 10001 16 9 0 10000 10002 281 absorption \n", + "563 0 10003 10001 16 9 0 10000 10002 281 scatter \n", + "564 0 10003 10001 16 10 0 10000 10002 282 absorption \n", + "565 0 10003 10001 16 10 0 10000 10002 282 scatter \n", + "566 0 10003 10001 16 11 0 10000 10002 283 absorption \n", + "567 0 10003 10001 16 11 0 10000 10002 283 scatter \n", + "568 0 10003 10001 16 12 0 10000 10002 284 absorption \n", + "569 0 10003 10001 16 12 0 10000 10002 284 scatter \n", + "570 0 10003 10001 16 13 0 10000 10002 285 absorption \n", + "571 0 10003 10001 16 13 0 10000 10002 285 scatter \n", + "572 0 10003 10001 16 14 0 10000 10002 286 absorption \n", + "573 0 10003 10001 16 14 0 10000 10002 286 scatter \n", + "574 0 10003 10001 16 15 0 10000 10002 287 absorption \n", + "575 0 10003 10001 16 15 0 10000 10002 287 scatter \n", + "576 0 10003 10001 16 16 0 10000 10002 288 absorption \n", + "577 0 10003 10001 16 16 0 10000 10002 288 scatter \n", "\n", " mean std. dev. \n", " \n", @@ -2138,14 +2017,14 @@ "577 2.01e-02 6.75e-04 " ] }, - "execution_count": 34, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get a pandas dataframe for the distribcell tally data\n", - "df = tally.get_pandas_dataframe(summary=su, nuclides=False)\n", + "df = tally.get_pandas_dataframe(nuclides=False, distribcell_paths=True)\n", "\n", "# Print the last twenty rows in the dataframe\n", "df.tail(20)" @@ -2153,97 +2032,11 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
meanstd. dev.
count2.89e+022.89e+02
mean4.19e-042.24e-05
std2.42e-049.14e-06
min1.90e-053.44e-06
25%2.02e-041.56e-05
50%4.05e-042.20e-05
75%6.07e-042.89e-05
max9.19e-044.95e-05
\n", - "
" - ], - "text/plain": [ - " mean std. dev.\n", - " \n", - " \n", - "count 2.89e+02 2.89e+02\n", - "mean 4.19e-04 2.24e-05\n", - "std 2.42e-04 9.14e-06\n", - "min 1.90e-05 3.44e-06\n", - "25% 2.02e-04 1.56e-05\n", - "50% 4.05e-04 2.20e-05\n", - "75% 6.07e-04 2.89e-05\n", - "max 9.19e-04 4.95e-05" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Show summary statistics for absorption distribcell tally data\n", "absorption = df[df['score'] == 'absorption']\n", @@ -2262,19 +2055,11 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Mann-Whitney Test p-value: 0.303583331507\n" - ] - } - ], + "outputs": [], "source": [ "# Extract tally data from pins in the pins divided along y=-x diagonal\n", "multi_index = ('level 2', 'lat',)\n", @@ -2300,19 +2085,11 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Mann-Whitney Test p-value: 6.038663783e-42\n" - ] - } - ], + "outputs": [], "source": [ "# Extract tally data from pins in the pins divided along y=x diagonal \n", "multi_index = ('level 2', 'lat',)\n", @@ -2336,43 +2113,11 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Extract the scatter tally data from pandas\n", "scatter = df[df['score'] == 'scatter']\n", @@ -2385,32 +2130,11 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n9OnTh2bNmtGmTRsuu+wyioqKSt/PzLjvvvvYdddd2W677fjDH/7A3Llz6dOnD02bNmXo0KEbrZ8J\nSggi0mBcccUVXHHFFaxatYq5c+dy8sknA/Dmm28CsGLFClavXk2fPn0YOXIkI0eO5LXXXuOrr75i\n9erVXHbZZQB89tlnXHLJJTz++OMsXryYlStXlna8s97YsWMZMmQIK1as4LTTTiMej3PXXXexfPly\npkyZwqRJk7jvvvs22ubll1/mo48+4t133+WOO+7gvPPO4/HHH+ebb75hxowZjBo1KqPlo4QgIvXe\n4MGDadasWelwySWXlLteTk4Oc+bMYfny5eTn57P//vtv8T0ff/xxrr76ajp37kx+fj5/+ctfGD16\nNCUlJTz11FMce+yx9OvXj9zcXG6++ebNemnr06cPgwcPJhaL0bhxY/bee2/2339/EokEHTt25MIL\nL+SNN97YaJvrrruOJk2a0K1bN7p3786RRx5J586dadq0KYMGDWLatGnVL6wKKCGISL337LPPsmLF\nitJh01/e640YMYJZs2bRpUsX9tlnH55//vktvueiRYvo0KFD6XSHDh0oKSlhyZIlLFq0iPbt25cu\n22abbWjRosVG25ddDjBr1iyOOeYYWrduTZMmTbjxxhtZvnz5Ruu0atWqdLxx48abTa9evbqCUqg+\nJQQRaTB22203Ro0axdKlS7n++usZMmQIa9asKbcP5rZt2zJ//vzS6W+++YZEIkGrVq1o06YNCxYs\nKF22bt06vv/++4223/Q9L774Yrp06cLs2bNZtWoVf/7zn+tcHxNKCCLSYDz22GMsW7aMWCxGs2bN\nAIjFYuy4447EYjG++uqr0nVPPfVU7rrrLr7++mtWr17NjTfeyNChQ0kkEgwZMoRx48YxefJkioqK\nKCgoqPTL/aeffqJJkybk5+fzxRdfVNjvc1Qa7g23IlIt9fG5kPHjx3P11Vezdu1aOnTowOjRo2nc\nuDEAw4YNo2/fvhQXFzN+/HjOPfdcFi1aRP/+/fn555854ogjuOeee4DgYbd77rmHU045hTVr1nDl\nlVfSsmVL8vLytrjvO++8kwsuuIA77riDnj17MnToUF599dVaOe50qQtNybiqPmimB9PqHnWhWbHV\nq1fTrFkzZs+eTadOnSKLQ11oiohEYNy4caxdu5Y1a9ZwzTXX0KNHDzp27Bh1WNWiKiOpEZluxkCk\n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\nSUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Plot a histogram and kernel density estimate for the scattering rates\n", "scatter['mean'].plot(kind='hist', bins=25)\n", diff --git a/openmc/filter.py b/openmc/filter.py index b0e59874b4..840482e859 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -1,4 +1,4 @@ -from collections import Iterable +from collections import Iterable, OrderedDict import copy from numbers import Real, Integral import sys @@ -516,7 +516,7 @@ class Filter(object): return filter_bin - def get_pandas_dataframe(self, data_size, summary=None): + def get_pandas_dataframe(self, data_size, distribcell_paths=False): """Builds a Pandas DataFrame for the Filter's bins. This method constructs a Pandas DataFrame object for the filter with @@ -531,12 +531,10 @@ class Filter(object): ---------- data_size : Integral The total number of bins in the tally corresponding to this filter - summary : None or openmc.Summary - An optional Summary object to be used to construct columns for - distribcell tally filters (default is None). The geometric + distribcell_paths : bool + Construct columns for distribcell tally filters. The geometric information in the Summary object is embedded into a Multi-index column with a geometric "path" to each distribcell instance. - NOTE: This option requires the OpenCG Python package. Returns ------- @@ -554,7 +552,7 @@ class Filter(object): 1. a single column with the cell instance IDs (without summary info) 2. separate columns for the cell IDs, universe IDs, and lattice IDs - and x,y,z cell indices corresponding to each (with summary info). + and x,y,z cell indices corresponding to each (distribcell paths). For 'energy' and 'energyout' filters, the DataFrame includes one column for the lower energy bound and one column for the upper @@ -566,8 +564,7 @@ class Filter(object): Raises ------ ImportError - When Pandas is not installed, or summary info is requested but - OpenCG is not installed. + When Pandas is not installed See also -------- @@ -626,106 +623,108 @@ class Filter(object): elif self.type == 'distribcell': level_df = None - if isinstance(summary, Summary): - # Attempt to import the OpenCG package - try: - import opencg - except ImportError: - msg = 'The OpenCG package must be installed ' \ - 'to use a Summary for distribcell dataframes' - raise ImportError(msg) + # Create Pandas Multi-index columns for each level in CSG tree + if distribcell_paths: - # Extract the OpenCG geometry from the Summary - opencg_geometry = summary.opencg_geometry - openmc_geometry = summary.openmc_geometry + # FIXME: Make assumption that each path is the same length??? + # NOTE: Just state this caveat in the docstring - # Use OpenCG to compute the number of regions - opencg_geometry.initialize_cell_offsets() - num_regions = opencg_geometry.num_regions - - # Initialize a dictionary mapping OpenMC distribcell - # offsets to OpenCG LocalCoords linked lists - offsets_to_coords = {} - - for offset, path in enumerate(self.distribcell_paths): - region = opencg_geometry.get_region_from_path(path) - coords = opencg_geometry.find_region(region) - offsets_to_coords[offset] = coords - - # Each distribcell offset is a DataFrame bin - # Unravel the paths into DataFrame columns - num_offsets = len(offsets_to_coords) - - # Initialize termination condition for while loop + distribcell_paths = copy.deepcopy(self.distribcell_paths) + num_offsets = len(distribcell_paths) levels_remain = True - counter = 0 + level_counter = 0 - # Iterate over each level in the CSG tree hierarchy + # FIXME: Allocate NumPy arrays for each CSG level while levels_remain: - levels_remain = False + level_counter += 1 + level_key = 'level {}'.format(level_counter) + first_path = distribcell_paths[0] + level_dict = OrderedDict() - # Initialize dictionary to build Pandas Multi-index - # column for this level in the CSG tree hierarchy - level_dict = {} + next_index = first_path.index('-') + level = first_path[:next_index] + first_path = first_path[next_index+2:] - # Initialize prefix Multi-index keys - counter += 1 - level_key = 'level {0}'.format(counter) - univ_key = (level_key, 'univ', 'id') - cell_key = (level_key, 'cell', 'id') - lat_id_key = (level_key, 'lat', 'id') - lat_x_key = (level_key, 'lat', 'x') - lat_y_key = (level_key, 'lat', 'y') - lat_z_key = (level_key, 'lat', 'z') + # This level is a lattice (e.g., ID(x,y,z)) + if '(' in level: + level_type = 'lattice' - # Allocate NumPy arrays for each CSG level and - # each Multi-index column in the DataFrame - level_dict[univ_key] = np.empty(num_offsets) - level_dict[cell_key] = np.empty(num_offsets) - level_dict[lat_id_key] = np.empty(num_offsets) - level_dict[lat_x_key] = np.empty(num_offsets) - level_dict[lat_y_key] = np.empty(num_offsets) - level_dict[lat_z_key] = np.empty(num_offsets) + # Initialize prefix Multi-index keys + lat_id_key = (level_key, 'lat', 'id') + lat_x_key = (level_key, 'lat', 'x') + lat_y_key = (level_key, 'lat', 'y') + lat_z_key = (level_key, 'lat', 'z') - # Initialize Multi-index columns to NaN - this is - # necessary since some distribcell instances may - # have very different LocalCoords linked lists - level_dict[univ_key][:] = np.NAN - level_dict[cell_key][:] = np.NAN - level_dict[lat_id_key][:] = np.NAN - level_dict[lat_x_key][:] = np.NAN - level_dict[lat_y_key][:] = np.NAN - level_dict[lat_z_key][:] = np.NAN + # Allocate NumPy arrays for each CSG level and + # each Multi-index column in the DataFrame + level_dict[lat_id_key] = np.empty(num_offsets) + level_dict[lat_x_key] = np.empty(num_offsets) + level_dict[lat_y_key] = np.empty(num_offsets) + level_dict[lat_z_key] = np.empty(num_offsets) - # Iterate over all regions (distribcell instances) - for offset in range(num_offsets): - coords = offsets_to_coords[offset] + # This level is a universe / cell (e.g., ID->ID) + else: + level_type = 'universe' - # If entire LocalCoords has been unraveled into - # Multi-index columns already, continue - if coords is None: - continue - - # Assign entry to Universe Multi-index column - if coords._type == 'universe': - level_dict[univ_key][offset] = coords._universe._id - level_dict[cell_key][offset] = coords._cell._id - - # Assign entry to Lattice Multi-index column + # Pop off the cell ID from the path + if '-' in first_path: + next_index = first_path.index('-') + level = first_path[:next_index] + first_path = first_path[next_index+2:] else: - # Reverse y index per lattice ordering in OpenCG - level_dict[lat_id_key][offset] = coords._lattice._id - level_dict[lat_x_key][offset] = coords._lat_x - level_dict[lat_y_key][offset] = \ - coords._lattice.dimension[1] - coords._lat_y - 1 - level_dict[lat_z_key][offset] = coords._lat_z + levels_remain = False + + # Initialize prefix Multi-index keys + univ_key = (level_key, 'univ', 'id') + cell_key = (level_key, 'cell', 'id') + + # Allocate NumPy arrays for each CSG level and + # each Multi-index column in the DataFrame + level_dict[univ_key] = np.empty(num_offsets) + level_dict[cell_key] = np.empty(num_offsets) + + # Populate Multi-index arrays with all distribcell paths + for i, path in enumerate(distribcell_paths): + + if level_type == 'lattice': + # Extract lattice ID, indices from path + next_index = path.index('-') + lat_id_indices = path[:next_index] + + # Trim lattice info from distribcell path + distribcell_paths[i] = path[next_index+2:] + + # Extract the lattice cell indices from the path + i1 = lat_id_indices.index('(') + i2 = lat_id_indices.index(')') + i3 = lat_id_indices[i1+1:i2] + + # Assign entry to Lattice Multi-index column + level_dict[lat_id_key][i] = path[:i1] + level_dict[lat_x_key][i] = int(i3.split(',')[0]) - 1 + level_dict[lat_y_key][i] = int(i3.split(',')[1]) - 1 + level_dict[lat_z_key][i] = int(i3.split(',')[2]) - 1 - # Move to next node in LocalCoords linked list - if coords._next is None: - offsets_to_coords[offset] = None else: - offsets_to_coords[offset] = coords._next - levels_remain = True + # Extract universe ID from path + next_index = path.index('-') + universe_id = int(path[:next_index]) + + # Trim universe info from distribcell path + path = path[next_index+2:] + + # Extract cell ID from path + if '-' in path: + next_index = path.index('-') + cell_id = int(path[:next_index]) + distribcell_paths[i] = path[next_index+2:] + else: + cell_id = int(path) + distribcell_paths[i] = '' + + # Assign entry to Universe, Cell Multi-index columns + level_dict[univ_key][i] = universe_id + level_dict[cell_key][i] = cell_id # Tile the Multi-index columns for level_key, level_bins in level_dict.items(): diff --git a/openmc/tallies.py b/openmc/tallies.py index 90b09f5828..6bd55b20fd 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1538,8 +1538,8 @@ class Tally(object): return data - def get_pandas_dataframe(self, filters=True, nuclides=True, - scores=True, summary=None, float_format='{:.2e}'): + def get_pandas_dataframe(self, filters=True, nuclides=True, scores=True, + distribcell_paths=False, float_format='{:.2e}'): """Build a Pandas DataFrame for the Tally data. This method constructs a Pandas DataFrame object for the Tally data @@ -1557,12 +1557,10 @@ class Tally(object): Include columns with nuclide bin information (default is True). scores : bool Include columns with score bin information (default is True). - summary : None or openmc.Summary - An optional Summary object to be used to construct columns for - distribcell tally filters (default is None). The geometric + distribcell_paths : bool + Construct columns for distribcell tally filters. The geometric information in the Summary object is embedded into a Multi-index - column with a geometric "path" to each distribcell intance. - NOTE: This option requires the OpenCG Python package. + column with a geometric "path" to each distribcell instance. float_format : str All floats in the DataFrame will be formatted using the given format string before printing. @@ -1588,13 +1586,15 @@ class Tally(object): msg = 'The Tally ID="{0}" has no data to return'.format(self.id) raise KeyError(msg) + ''' # If using Summary, ensure StatePoint.link_with_summary(...) was called - if summary and not self.with_summary: + if distribcell_pathssummary and not self.with_summary: msg = 'The Tally ID="{0}" has not been linked with the Summary. ' \ 'Call the StatePoint.link_with_summary(...) method ' \ 'before using Tally.get_pandas_dataframe(...) with ' \ 'Summary info'.format(self.id) raise KeyError(msg) + ''' # Initialize a pandas dataframe for the tally data import pandas as pd @@ -1608,7 +1608,8 @@ class Tally(object): # Append each Filter's DataFrame to the overall DataFrame for self_filter in self.filters: - filter_df = self_filter.get_pandas_dataframe(data_size, summary) + filter_df = self_filter.get_pandas_dataframe( + data_size, distribcell_paths) df = pd.concat([df, filter_df], axis=1) # Include DataFrame column for nuclides if user requested it From 615cec9e96f11e4dc45f7d271cfc809970aba425 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sat, 30 Apr 2016 09:45:40 -0400 Subject: [PATCH 468/650] Improved comments for Pandas DataFrames distribcell path construction --- .../examples/pandas-dataframes.ipynb | 319 ++++++++++++++++-- openmc/filter.py | 40 ++- 2 files changed, 321 insertions(+), 38 deletions(-) diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index c9e73caac9..57b4b06fbb 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -374,7 +374,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAPZSURB\nVGje7Zs7buMwEIZ9iey50gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwg\nwIcgg8Cc4fCTSK5W4OeFkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7\nE08mlia+rn7VcKXP8sRszFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WB\nzfiz20hXORmP9fi/bM9EeUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4\nlXju8K3DKv9NThOZ3q2KmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3Oaf\nPX40NGgST2r+uvQkXXp6cKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcub\nlfKGt6apotG/NVx3SInWtLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJb\nf8qlPynYmpKCh7OB1fzNalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utr\nJTy8/06TXh0r/5JOa2JmYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU\n4YuBTPa/8P67l/6r44ds+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m\n/65n+S8p/itN15v0UkW3/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB\n6R3Cqn55U4rv4kfH3zaSgQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6\nbjT6rym9I/v/03/b+LHS4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv\n6h9B/Bfxr9j1Hz2eN/hO8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wX\nfP8Mvf9G37/D/ovuP8SeP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7\n+O+E8zdP/8XOf8Hnz9Dzb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589j\nz5/Y8ej9h4D+W7qQmf57efqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m\n4fwXuH+M3n+OO3++AX9clR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA0LTMwVDA5OjMx\nOjI5LTA0OjAwzUliGgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNC0zMFQwOTozMToyOS0wNDow\nMLwU2qYAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAPZSURB\nVGje7Zs7buMwEIZ9iey50gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwg\nwIcgg8Cc4fCTSK5W4OeFkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7\nE08mlia+rn7VcKXP8sRszFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WB\nzfiz20hXORmP9fi/bM9EeUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4\nlXju8K3DKv9NThOZ3q2KmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3Oaf\nPX40NGgST2r+uvQkXXp6cKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcub\nlfKGt6apotG/NVx3SInWtLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJb\nf8qlPynYmpKCh7OB1fzNalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utr\nJTy8/06TXh0r/5JOa2JmYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU\n4YuBTPa/8P67l/6r44ds+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m\n/65n+S8p/itN15v0UkW3/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB\n6R3Cqn55U4rv4kfH3zaSgQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6\nbjT6rym9I/v/03/b+LHS4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv\n6h9B/Bfxr9j1Hz2eN/hO8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wX\nfP8Mvf9G37/D/ovuP8SeP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7\n+O+E8zdP/8XOf8Hnz9Dzb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589j\nz5/Y8ej9h4D+W7qQmf57efqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m\n4fwXuH+M3n+OO3++AX9clR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA0LTMwVDA5OjQ0\nOjQ1LTA0OjAwA5TfLgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNC0zMFQwOTo0NDo0NS0wNDow\nMHLJZ5IAAAAASUVORK5CYII=\n", "text/plain": [ "" ] @@ -538,13 +538,135 @@ "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " .d88888b. 888b d888 .d8888b.\n", + " d88P\" \"Y88b 8888b d8888 d88P Y88b\n", + " 888 888 88888b.d88888 888 888\n", + " 888 888 88888b. .d88b. 88888b. 888Y88888P888 888 \n", + " 888 888 888 \"88b d8P Y8b 888 \"88b 888 Y888P 888 888 \n", + " 888 888 888 888 88888888 888 888 888 Y8P 888 888 888\n", + " Y88b. .d88P 888 d88P Y8b. 888 888 888 \" 888 Y88b d88P\n", + " \"Y88888P\" 88888P\" \"Y8888 888 888 888 888 \"Y8888P\"\n", + "__________________888______________________________________________________\n", + " 888\n", + " 888\n", + "\n", + " Copyright: 2011-2016 Massachusetts Institute of Technology\n", + " License: http://openmc.readthedocs.org/en/latest/license.html\n", + " Version: 0.7.1\n", + " Git SHA1: 5863cc5c9906ae7b2ec15efbf793b22b9c7f7dcb\n", + " Date/Time: 2016-04-30 09:44:46\n", + " MPI Processes: 1\n", + " OpenMP Threads: 4\n", + "\n", + " ===========================================================================\n", + " ========================> INITIALIZATION <=========================\n", + " ===========================================================================\n", + "\n", + " Reading settings XML file...\n", + " Reading cross sections XML file...\n", + " Reading geometry XML file...\n", + " Reading materials XML file...\n", + " Reading tallies XML file...\n", + " Building neighboring cells lists for each surface...\n", + " Loading ACE cross section table: 92235.71c\n", + " Loading ACE cross section table: 92238.71c\n", + " Loading ACE cross section table: 8016.71c\n", + " Loading ACE cross section table: 1001.71c\n", + " Loading ACE cross section table: 5010.71c\n", + " Loading ACE cross section table: 40090.71c\n", + " Maximum neutron transport energy: 20.0000 MeV for 92235.71c\n", + " Initializing source particles...\n", + "\n", + " ===========================================================================\n", + " ====================> K EIGENVALUE SIMULATION <====================\n", + " ===========================================================================\n", + "\n", + " Bat./Gen. k Average k \n", + " ========= ======== ==================== \n", + " 1/1 0.55921 \n", + " 2/1 0.63816 \n", + " 3/1 0.68834 \n", + " 4/1 0.71192 \n", + " 5/1 0.67935 \n", + " 6/1 0.68274 \n", + " 7/1 0.66339 0.67307 +/- 0.00967\n", + " 8/1 0.65835 0.66816 +/- 0.00743\n", + " 9/1 0.66697 0.66786 +/- 0.00527\n", + " 10/1 0.70498 0.67528 +/- 0.00847\n", + " 11/1 0.68596 0.67706 +/- 0.00714\n", + " 12/1 0.68481 0.67817 +/- 0.00614\n", + " 13/1 0.68369 0.67886 +/- 0.00536\n", + " 14/1 0.68785 0.67986 +/- 0.00483\n", + " 15/1 0.66145 0.67802 +/- 0.00470\n", + " 16/1 0.71831 0.68168 +/- 0.00561\n", + " 17/1 0.68428 0.68190 +/- 0.00512\n", + " 18/1 0.67527 0.68139 +/- 0.00474\n", + " 19/1 0.68166 0.68141 +/- 0.00439\n", + " 20/1 0.65475 0.67963 +/- 0.00446\n", + " Triggers unsatisfied, max unc./thresh. is 1.07581 for absorption in tally 10002\n", + " The estimated number of batches is 23\n", + " Creating state point statepoint.020.h5...\n", + " 21/1 0.64538 0.67749 +/- 0.00469\n", + " 22/1 0.73275 0.68074 +/- 0.00547\n", + " 23/1 0.71674 0.68274 +/- 0.00553\n", + " Triggers satisfied for batch 23\n", + " Creating state point statepoint.023.h5...\n", + "\n", + " ===========================================================================\n", + " ======================> SIMULATION FINISHED <======================\n", + " ===========================================================================\n", + "\n", + "\n", + " =======================> TIMING STATISTICS <=======================\n", + "\n", + " Total time for initialization = 4.1400E-01 seconds\n", + " Reading cross sections = 9.3000E-02 seconds\n", + " Total time in simulation = 4.6240E+00 seconds\n", + " Time in transport only = 4.5580E+00 seconds\n", + " Time in inactive batches = 6.9200E-01 seconds\n", + " Time in active batches = 3.9320E+00 seconds\n", + " Time synchronizing fission bank = 2.0000E-03 seconds\n", + " Sampling source sites = 1.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for finalization = 0.0000E+00 seconds\n", + " Total time elapsed = 5.0530E+00 seconds\n", + " Calculation Rate (inactive) = 18063.6 neutrons/second\n", + " Calculation Rate (active) = 9537.13 neutrons/second\n", + "\n", + " ============================> RESULTS <============================\n", + "\n", + " k-effective (Collision) = 0.67952 +/- 0.00434\n", + " k-effective (Track-length) = 0.68274 +/- 0.00553\n", + " k-effective (Absorption) = 0.68095 +/- 0.00369\n", + " Combined k-effective = 0.67994 +/- 0.00349\n", + " Leakage Fraction = 0.34133 +/- 0.00332\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Remove old HDF5 (summary, statepoint) files\n", - "#!rm statepoint.*\n", + "!rm statepoint.*\n", "\n", "# Run OpenMC!\n", - "#openmc.run()()" + "openmc.run()" ] }, { @@ -995,7 +1117,7 @@ "data": { "image/png": "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\nSWry/wHxFqsYpaO7aQAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1018,7 +1140,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 27, @@ -1029,7 +1151,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1398,7 +1520,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Print the distribcell tally dataframe **without** OpenCG info" + "Print the distribcell tally dataframe **without** distribcell paths" ] }, { @@ -1608,12 +1730,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Print the distribcell tally dataframe **with** OpenCG info" + "Print the distribcell tally dataframe **with** distribcell paths" ] }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "metadata": { "collapsed": false }, @@ -2017,7 +2139,7 @@ "577 2.01e-02 6.75e-04 " ] }, - "execution_count": 35, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -2032,11 +2154,97 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
meanstd. dev.
count2.89e+022.89e+02
mean4.19e-042.24e-05
std2.42e-049.14e-06
min1.90e-053.44e-06
25%2.02e-041.56e-05
50%4.05e-042.20e-05
75%6.07e-042.89e-05
max9.19e-044.95e-05
\n", + "
" + ], + "text/plain": [ + " mean std. dev.\n", + " \n", + " \n", + "count 2.89e+02 2.89e+02\n", + "mean 4.19e-04 2.24e-05\n", + "std 2.42e-04 9.14e-06\n", + "min 1.90e-05 3.44e-06\n", + "25% 2.02e-04 1.56e-05\n", + "50% 4.05e-04 2.20e-05\n", + "75% 6.07e-04 2.89e-05\n", + "max 9.19e-04 4.95e-05" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Show summary statistics for absorption distribcell tally data\n", "absorption = df[df['score'] == 'absorption']\n", @@ -2055,11 +2263,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mann-Whitney Test p-value: 6.038663783e-42\n" + ] + } + ], "source": [ "# Extract tally data from pins in the pins divided along y=-x diagonal\n", "multi_index = ('level 2', 'lat',)\n", @@ -2085,11 +2301,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mann-Whitney Test p-value: 0.303583331507\n" + ] + } + ], "source": [ "# Extract tally data from pins in the pins divided along y=x diagonal \n", "multi_index = ('level 2', 'lat',)\n", @@ -2113,11 +2337,43 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:4: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Extract the scatter tally data from pandas\n", "scatter = df[df['score'] == 'scatter']\n", @@ -2130,11 +2386,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n9OnTh2bNmtGmTRsuu+wyioqKSt/PzLjvvvvYdddd2W677fjDH/7A3Llz6dOnD02bNmXo0KEbrZ8J\nSggi0mBcccUVXHHFFaxatYq5c+dy8sknA/Dmm28CsGLFClavXk2fPn0YOXIkI0eO5LXXXuOrr75i\n9erVXHbZZQB89tlnXHLJJTz++OMsXryYlStXlna8s97YsWMZMmQIK1as4LTTTiMej3PXXXexfPly\npkyZwqRJk7jvvvs22ubll1/mo48+4t133+WOO+7gvPPO4/HHH+ebb75hxowZjBo1KqPlo4QgIvXe\n4MGDadasWelwySWXlLteTk4Oc+bMYfny5eTn57P//vtv8T0ff/xxrr76ajp37kx+fj5/+ctfGD16\nNCUlJTz11FMce+yx9OvXj9zcXG6++ebNemnr06cPgwcPJhaL0bhxY/bee2/2339/EokEHTt25MIL\nL+SNN97YaJvrrruOJk2a0K1bN7p3786RRx5J586dadq0KYMGDWLatGnVL6wKKCGISL337LPPsmLF\nitJh01/e640YMYJZs2bRpUsX9tlnH55//vktvueiRYvo0KFD6XSHDh0oKSlhyZIlLFq0iPbt25cu\n22abbWjRosVG25ddDjBr1iyOOeYYWrduTZMmTbjxxhtZvnz5Ruu0atWqdLxx48abTa9evbqCUqg+\nJQQRaTB22203Ro0axdKlS7n++usZMmQIa9asKbcP5rZt2zJ//vzS6W+++YZEIkGrVq1o06YNCxYs\nKF22bt06vv/++4223/Q9L774Yrp06cLs2bNZtWoVf/7zn+tcHxNKCCLSYDz22GMsW7aMWCxGs2bN\nAIjFYuy4447EYjG++uqr0nVPPfVU7rrrLr7++mtWr17NjTfeyNChQ0kkEgwZMoRx48YxefJkioqK\nKCgoqPTL/aeffqJJkybk5+fzxRdfVNjvc1Qa7g23IlIt9fG5kPHjx3P11Vezdu1aOnTowOjRo2nc\nuDEAw4YNo2/fvhQXFzN+/HjOPfdcFi1aRP/+/fn555854ogjuOeee4DgYbd77rmHU045hTVr1nDl\nlVfSsmVL8vLytrjvO++8kwsuuIA77riDnj17MnToUF599dVaOe50qQtNybiqPmimB9PqHnWhWbHV\nq1fTrFkzZs+eTadOnSKLQ11oiohEYNy4caxdu5Y1a9ZwzTXX0KNHDzp27Bh1WNWiKiOpEZluxkCk\n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\nSUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Plot a histogram and kernel density estimate for the scattering rates\n", "scatter['mean'].plot(kind='hist', bins=25)\n", diff --git a/openmc/filter.py b/openmc/filter.py index 840482e859..ff21f4e931 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -535,6 +535,9 @@ class Filter(object): Construct columns for distribcell tally filters. The geometric information in the Summary object is embedded into a Multi-index column with a geometric "path" to each distribcell instance. + NOTE: This option assumes that all distribcell paths are of the same + length and do not have the same universes and cells but different + lattice cell indices. Returns ------- @@ -626,25 +629,32 @@ class Filter(object): # Create Pandas Multi-index columns for each level in CSG tree if distribcell_paths: - # FIXME: Make assumption that each path is the same length??? - # NOTE: Just state this caveat in the docstring - + # Make copy of array of distribcell paths to use in + # Pandas Multi-index column construction distribcell_paths = copy.deepcopy(self.distribcell_paths) num_offsets = len(distribcell_paths) - levels_remain = True - level_counter = 0 - # FIXME: Allocate NumPy arrays for each CSG level + # Loop over CSG levels in the distribcell paths + level_counter = 0 + levels_remain = True while levels_remain: + + # Use level key as first index in Pandas Multi-index column level_counter += 1 level_key = 'level {}'.format(level_counter) - first_path = distribcell_paths[0] - level_dict = OrderedDict() + # Use the first distribcell path to determine if level + # is a universe/cell or lattice level + first_path = distribcell_paths[0] next_index = first_path.index('-') level = first_path[:next_index] + + # Trim universe/lattice info from path first_path = first_path[next_index+2:] + # Create a dictionary for this level for Pandas Multi-index + level_dict = OrderedDict() + # This level is a lattice (e.g., ID(x,y,z)) if '(' in level: level_type = 'lattice' @@ -666,14 +676,6 @@ class Filter(object): else: level_type = 'universe' - # Pop off the cell ID from the path - if '-' in first_path: - next_index = first_path.index('-') - level = first_path[:next_index] - first_path = first_path[next_index+2:] - else: - levels_remain = False - # Initialize prefix Multi-index keys univ_key = (level_key, 'univ', 'id') cell_key = (level_key, 'cell', 'id') @@ -683,6 +685,10 @@ class Filter(object): level_dict[univ_key] = np.empty(num_offsets) level_dict[cell_key] = np.empty(num_offsets) + # Determine any levels remain in path + if '-' not in first_path: + levels_remain = False + # Populate Multi-index arrays with all distribcell paths for i, path in enumerate(distribcell_paths): @@ -739,7 +745,7 @@ class Filter(object): else: level_df = pd.concat([level_df, pd.DataFrame(level_dict)], axis=1) - # Create DataFrame column for distribcell instances IDs + # Create DataFrame column for distribcell instance IDs # NOTE: This is performed regardless of whether the user # requests Summary geometric information filter_bins = np.arange(self.num_bins) From 5e6de55a47955167e5c5cc2b50d58f2d112b3a82 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sat, 30 Apr 2016 14:00:24 -0400 Subject: [PATCH 469/650] Updated MGXS.get_pandas_dataframe(...) method to use distribcell_paths parameter --- openmc/mgxs/mgxs.py | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 33255de30c..d7ba0117d2 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1346,7 +1346,7 @@ class MGXS(object): modified.write('\n\\end{document}') def get_pandas_dataframe(self, groups='all', nuclides='all', - xs_type='macro', summary=None): + xs_type='macro', distribcell_paths=False): """Build a Pandas DataFrame for the MGXS data. This method leverages :meth:`openmc.Tally.get_pandas_dataframe`, but @@ -1366,12 +1366,9 @@ class MGXS(object): xs_type: {'macro', 'micro'} Return macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. - summary : None or openmc.Summary - An optional Summary object to be used to construct columns for - distribcell tally filters (default is None). The geometric - information in the Summary object is embedded into a multi-index - column with a geometric "path" to each distribcell intance. - NOTE: This option requires the OpenCG Python package. + distribcell_paths : list of str + The paths traversed through the CSG tree to reach each distribcell + instance (for 'distribcell' filters only) Returns ------- @@ -1398,7 +1395,8 @@ class MGXS(object): # Use tally summation to sum across all nuclides query_nuclides = self.get_all_nuclides() xs_tally = self.xs_tally.summation(nuclides=query_nuclides) - df = xs_tally.get_pandas_dataframe(summary=summary) + df = xs_tally.get_pandas_dataframe( + distribcell_paths=distribcell_paths) # Remove nuclide column since it is homogeneous and redundant df.drop('nuclide', axis=1, inplace=True) @@ -1406,14 +1404,16 @@ class MGXS(object): # If the user requested a specific set of nuclides elif self.by_nuclide and nuclides != 'all': xs_tally = self.xs_tally.get_slice(nuclides=nuclides) - df = xs_tally.get_pandas_dataframe(summary=summary) + df = xs_tally.get_pandas_dataframe( + distribcell_paths=distribcell_paths) # If the user requested all nuclides, keep nuclide column in dataframe else: - df = self.xs_tally.get_pandas_dataframe(summary=summary) + df = self.xs_tally.get_pandas_dataframe( + distribcell_paths=distribcell_paths) # Remove the score column since it is homogeneous and redundant - if summary and 'distribcell' in self.domain_type: + if distribcell_paths and 'distribcell' in self.domain_type: df = df.drop('score', level=0, axis=1) else: df = df.drop('score', axis=1) @@ -2557,7 +2557,7 @@ class Chi(MGXS): return xs def get_pandas_dataframe(self, groups='all', nuclides='all', - xs_type='macro', summary=None): + xs_type='macro', distribcell_paths=False): """Build a Pandas DataFrame for the MGXS data. This method leverages :meth:`openmc.Tally.get_pandas_dataframe`, but @@ -2577,12 +2577,9 @@ class Chi(MGXS): xs_type: {'macro', 'micro'} Return macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. - summary : None or openmc.Summary - An optional Summary object to be used to construct columns for - distribcell tally filters (default is None). The geometric - information in the Summary object is embedded into a multi-index - column with a geometric "path" to each distribcell intance. - NOTE: This option requires the OpenCG Python package. + distribcell_paths : list of str + The paths traversed through the CSG tree to reach each distribcell + instance (for 'distribcell' filters only) Returns ------- @@ -2598,8 +2595,8 @@ class Chi(MGXS): """ # Build the dataframe using the parent class method - df = super(Chi, self).get_pandas_dataframe(groups, nuclides, - xs_type, summary) + df = super(Chi, self).get_pandas_dataframe( + groups, nuclides, xs_type, distribcell_paths=distribcell_paths) # If user requested micro cross sections, multiply by the atom # densities to cancel out division made by the parent class method From d2018de8ec151e4f2239a402f0773bd5a0cd4d97 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 30 Apr 2016 16:08:47 -0400 Subject: [PATCH 470/650] Added ability to set data of the multi-group xs library (openmc.mgxs_library) with MGXS class objects. These are accessible via set_* where * can include total, absorption... . These routines can either take numpy arrays as the former and current setters do, or the appropriate MGXS objects. Also made some changes to meet PEP8 - GUESS WHO HAS A LINTER!!! and finally fixed a documentation issue in settings.py where CROSS_SECTIONS was still referenced instead of OPENMC_CROSS_SECTIONS. --- openmc/mgxs_library.py | 593 ++++++++++++++++++++++++++++++++++++++--- openmc/settings.py | 7 +- 2 files changed, 555 insertions(+), 45 deletions(-) diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index d3e49b238e..b41a2030c4 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -1,19 +1,19 @@ from collections import Iterable from numbers import Real, Integral from xml.etree import ElementTree as ET -import warnings import sys -if sys.version_info[0] >= 3: - basestring = str import numpy as np import openmc -from openmc.mgxs import EnergyGroups +import openmc.mgxs from openmc.checkvalue import check_type, check_value, check_greater_than, \ - check_iterable_type + check_iterable_type from openmc.clean_xml import * +if sys.version_info[0] >= 3: + basestring = str + # Supported incoming particle MGXS angular treatment representations _REPRESENTATIONS = ['isotropic', 'angle'] @@ -133,9 +133,9 @@ class XSdata(object): angles and outer-dimension being the polar angles. absorption : numpy.ndarray Group-wise absorption cross section ordered by increasing group index - (i.e., fast to thermal). If ``representation`` is "isotropic", then the + (i.e., fast to thermal). If ``representation`` is "isotropic", then the length of this list should equal the number of groups described in the - ``groups`` attribute. If ``representation`` is "angle", then the length + ``groups`` attribute. If ``representation`` is "angle", then the length of this list should equal the number of groups times the number of azimuthal angles times the number of polar angles, with the inner-dimension being groups, intermediate-dimension being azimuthal @@ -152,7 +152,7 @@ class XSdata(object): multiplicity : numpy.ndarray Ratio of neutrons produced in scattering collisions to the neutrons which undergo scattering collisions; that is, the multiplicity provides - the code with a scaling factor to account for neutrons being produced in + the code with a scaling factor to account for neutrons produced in (n,xn) reactions. This information is assumed isotropic and therefore does not need to be repeated for every Legendre moment or histogram/tabular bin. This matrix follows the same arrangement as @@ -160,30 +160,30 @@ class XSdata(object): needed to provide the scattering type information. fission : numpy.ndarray Group-wise fission cross section ordered by increasing group index - (i.e., fast to thermal). If ``representation`` is "isotropic", then the + (i.e., fast to thermal). If ``representation`` is "isotropic", then the length of this list should equal the number of groups described in the - ``groups`` attribute. If ``representation`` is "angle", then the length + ``groups`` attribute. If ``representation`` is "angle", then the length of this list should equal the number of groups times the number of azimuthal angles times the number of polar angles, with the inner-dimension being groups, intermediate-dimension being azimuthal angles and outer-dimension being the polar angles. k_fission : numpy.ndarray - Group-wise kappa-fission cross section ordered by increasing group index - (i.e., fast to thermal). If ``representation`` is "isotropic", then the - length of this list should equal the number of groups described in the - ``groups`` attribute. If ``representation`` is "angle", then the length + Group-wise kappa-fission cross section ordered by increasing group + index (i.e., fast to thermal). If ``representation`` is "isotropic", + then the length of this list should equal the number of groups in the + ``groups`` attribute. If ``representation`` is "angle", then the length of this list should equal the number of groups times the number of azimuthal angles times the number of polar angles, with the inner-dimension being groups, intermediate-dimension being azimuthal angles and outer-dimension being the polar angles. chi : numpy.ndarray - Group-wise fission spectra ordered by increasing group index (i.e., fast - to thermal). This attribute should be used if making the common + Group-wise fission spectra ordered by increasing group index (i.e., + fast to thermal). This attribute should be used if making the common approximation that the fission spectra does not depend on incoming - energy. If the user does not wish to make this approximation, then this - should not be provided and this information included in the + energy. If the user does not wish to make this approximation, then + this should not be provided and this information included in the ``nu_fission`` element instead. If ``representation`` is "isotropic", - then the length of this list should equal the number of groups described + then the length of this list should equal the number of groups in the ``groups`` element. If ``representation`` is "angle", then the length of this list should equal the number of groups times the number of azimuthal angles times the number of polar angles, with the @@ -191,12 +191,13 @@ class XSdata(object): angles and outer-dimension being the polar angles. nu_fission : numpy.ndarray Group-wise fission production cross section vector (i.e., if ``chi`` is - provided), or is the group-wise fission production matrix. If providing + provided), or is the group-wise fission production matrix. If providing the vector, it should be ordered the same as the ``fission`` data. If providing the matrix, it should be ordered the same as the ``multiplicity`` matrix. """ + def __init__(self, name, energy_groups, representation="isotropic"): # Initialize class attributes self._name = name @@ -308,11 +309,11 @@ class XSdata(object): @energy_groups.setter def energy_groups(self, energy_groups): # Check validity of energy_groups - check_type("energy_groups", energy_groups, EnergyGroups) + check_type("energy_groups", energy_groups, openmc.mgxs.EnergyGroups) - # Check that there is one or more groups - if ((energy_groups.num_groups is None) or - (energy_groups.num_groups < 1)): + # Check that there are one or more groups + ng = energy_groups.num_groups + if ((ng is None) or (ng < 1)): msg = 'energy_groups object incorrectly initialized.' raise ValueError(msg) @@ -413,7 +414,8 @@ class XSdata(object): shape = (self._num_polar, self._num_azimuthal, self._energy_groups.num_groups) # check we have a numpy list - check_type("absorption", absorption, np.ndarray, expected_iter_type=Real) + check_type("absorption", absorption, np.ndarray, + expected_iter_type=Real) if absorption.shape == shape: self._absorption = np.copy(absorption) else: @@ -447,14 +449,15 @@ class XSdata(object): shape = (self._num_polar, self._num_azimuthal, self._energy_groups.num_groups) # check we have a numpy list - check_type("k_fission", k_fission, np.ndarray, expected_iter_type=Real) + check_type("k_fission", k_fission, np.ndarray, + expected_iter_type=Real) if k_fission.shape == shape: self._k_fission = np.copy(k_fission) if np.sum(self._k_fission) > 0.0: self._fissionable = True else: - msg = 'Shape of provided k_fission "{0}" does not match shape ' \ - 'required, "{1}"'.format(k_fission.shape, shape) + msg = 'Shape of provided k_fission "{0}" does not match ' \ + 'shape required, "{1}"'.format(k_fission.shape, shape) raise ValueError(msg) @chi.setter @@ -462,6 +465,7 @@ class XSdata(object): if not self._use_chi: msg = 'Providing chi when nu_fission already provided as matrix!' raise ValueError(msg) + if self._representation is 'isotropic': shape = (self._energy_groups.num_groups,) elif self._representation is 'angle': @@ -516,18 +520,21 @@ class XSdata(object): if multiplicity.shape == shape: self._multiplicity = np.copy(multiplicity) else: - msg = 'Shape of provided multiplicity "{0}" does not match shape ' \ - 'required, "{1}"'.format(multiplicity.shape, shape) + msg = 'Shape of provided multiplicity "{0}" does not match shape' \ + ' required, "{1}"'.format(multiplicity.shape, shape) raise ValueError(msg) @nu_fission.setter def nu_fission(self, nu_fission): + # The NuFissionXS class does not have the capability to produce + # a fission matrix and therefore if this path is pursued, we know + # chi must be used. # nu_fission can be given as a vector or a matrix # Vector is used when chi also exists. # Matrix is used when chi does not exist. # We have to check that the correct form is given, but only if # chi already has been set. If not, we just check that this is OK - # and set the use_chi flag. + # and set the use_chi flag accordingly # First lets set our dimensions here since they get used repeatedly # throughout this code. @@ -542,8 +549,8 @@ class XSdata(object): self._energy_groups.num_groups, self._energy_groups.num_groups) - # Begin by checking the case when chi has already been given and thus - # the rules for filling in nu_fission are set. + # Begin by checking the case when chi has already been given and + # thus the rules for filling in nu_fission are set. if self._use_chi is not None: if self._use_chi: shape = shape_vec @@ -553,23 +560,524 @@ class XSdata(object): msg = "Invalid Shape of Nu_fission!" raise ValueError(msg) else: - # Get shape of nu_fission so we can figure if we need chi or not + # Get shape of nu_fission to determine if we need chi or not if nu_fission.shape == shape_vec: self._use_chi = True - shape = shape_vec elif nu_fission.shape == shape_mat: self._use_chi = False - shape = shape_mat else: msg = "Invalid Shape of Nu_fission!" raise ValueError(msg) # check we have a numpy list - check_type("nu_fission", nu_fission, np.ndarray, expected_iter_type=Real) + check_type("nu_fission", nu_fission, np.ndarray, + expected_iter_type=Real) self._nu_fission = np.copy(nu_fission) if np.sum(self._nu_fission) > 0.0: self._fissionable = True + def set_total(self, total, **kwargs): + if isinstance(total, openmc.mgxs.TotalXS): + # Make sure passed MGXS object contains correct group structure + if self.energy_groups != total.energy_groups: + msg = 'Group structure of provided TotalXS does not match' \ + ' group structure of XSdata object' + raise ValueError(msg) + # Get openmc.mgxs.get_xs() arguments from kwargs + # nuclides, xs_type, and value will have sane defaults but can be + # overridden by kwards + if 'nuclides' in kwargs: + nuclides = kwargs['nuclides'] + else: + nuclides = 'sum' + if 'xs_type' in kwargs: + xs_type = kwargs['xs_type'] + else: + xs_type = 'macro' + if 'value' in kwargs: + value = kwargs['value'] + else: + value = 'mean' + # subdomains is required from the kwargs as this is specific to + # this XSdata object. + if 'subdomains' in kwargs: + subdomains = kwargs['subdomains'] + else: + msg = "Argument 'subdomains' is required" + raise ValueError(msg) + + if self._representation is 'isotropic': + self._total = total.get_xs(subdomains=subdomains, + nuclides=nuclides, xs_type=xs_type, + value=value) + elif self._representation is 'angle': + # Not yet implemented as MGXS do not yet support this + pass + + else: + if self._representation is 'isotropic': + shape = (self._energy_groups.num_groups,) + elif self._representation is 'angle': + shape = (self._num_polar, self._num_azimuthal, + self._energy_groups.num_groups) + # check we have a numpy list + check_type("total", total, np.ndarray, expected_iter_type=Real) + if total.shape == shape: + self._total = np.copy(total) + else: + msg = 'Shape of provided total "{0}" does not match shape ' \ + 'required, "{1}"'.format(total.shape, shape) + raise ValueError(msg) + + def set_absorption(self, absorption, **kwargs): + if isinstance(absorption, openmc.mgxs.AbsorptionXS): + # Make sure passed MGXS object contains correct group structure + if self.energy_groups != absorption.energy_groups: + msg = 'Group structure of provided AbsorptionXS does not ' \ + ' match group structure of XSdata object' + raise ValueError(msg) + # Get openmc.mgxs.get_xs() arguments from kwargs + # nuclides, xs_type, and value will have sane defaults but can be + # overridden by kwards + if 'nuclides' in kwargs: + nuclides = kwargs['nuclides'] + else: + nuclides = 'sum' + if 'xs_type' in kwargs: + xs_type = kwargs['xs_type'] + else: + xs_type = 'macro' + if 'value' in kwargs: + value = kwargs['value'] + else: + value = 'mean' + # subdomains is required from the kwargs as this is specific to + # this XSdata object. + if 'subdomains' in kwargs: + subdomains = kwargs['subdomains'] + else: + msg = "Argument 'subdomains' is required" + raise ValueError(msg) + + if self._representation is 'isotropic': + self._absorption = absorption.get_xs(subdomains=subdomains, + nuclides=nuclides, + xs_type=xs_type, + value=value) + elif self._representation is 'angle': + # Not yet implemented as MGXS do not yet support this + pass + + else: + if self._representation is 'isotropic': + shape = (self._energy_groups.num_groups,) + elif self._representation is 'angle': + shape = (self._num_polar, self._num_azimuthal, + self._energy_groups.num_groups) + # check we have a numpy list + check_type("absorption", absorption, np.ndarray, expected_iter_type=Real) + if absorption.shape == shape: + self._absorption = np.copy(absorption) + else: + msg = 'Shape of provided absorption "{0}" does not match shape ' \ + 'required, "{1}"'.format(absorption.shape, shape) + raise ValueError(msg) + + def set_fission(self, fission, **kwargs): + if isinstance(fission, openmc.mgxs.FissionXS): + # Make sure passed MGXS object contains correct group structure + if self.energy_groups != fission.energy_groups: + msg = 'Group structure of provided FissionXS does not match ' \ + 'group structure of XSdata object' + raise ValueError(msg) + # Get openmc.mgxs.get_xs() arguments from kwargs + # nuclides, xs_type, and value will have sane defaults but can be + # overridden by kwards + if 'nuclides' in kwargs: + nuclides = kwargs['nuclides'] + else: + nuclides = 'sum' + if 'xs_type' in kwargs: + xs_type = kwargs['xs_type'] + else: + xs_type = 'macro' + if 'value' in kwargs: + value = kwargs['value'] + else: + value = 'mean' + # subdomains is required from the kwargs as this is specific to + # this XSdata object. + if 'subdomains' in kwargs: + subdomains = kwargs['subdomains'] + else: + msg = "Argument 'subdomains' is required" + raise ValueError(msg) + + if self._representation is 'isotropic': + self._fission = fission.get_xs(subdomains=subdomains, + nuclides=nuclides, + xs_type=xs_type, + value=value) + elif self._representation is 'angle': + # Not yet implemented as MGXS do not yet support this + pass + + else: + if self._representation is 'isotropic': + shape = (self._energy_groups.num_groups,) + elif self._representation is 'angle': + shape = (self._num_polar, self._num_azimuthal, + self._energy_groups.num_groups) + # check we have a numpy list + check_type("fission", fission, np.ndarray, expected_iter_type=Real) + if fission.shape == shape: + self._fission = np.copy(fission) + if np.sum(self._fission) > 0.0: + self._fissionable = True + else: + msg = 'Shape of provided fission "{0}" does not match shape ' \ + 'required, "{1}"'.format(fission.shape, shape) + raise ValueError(msg) + + def set_k_fission(self, k_fission, **kwargs): + if isinstance(k_fission, openmc.mgxs.KappaFissionXS): + # Make sure passed MGXS object contains correct group structure + if self.energy_groups != k_fission.energy_groups: + msg = 'Group structure of provided KappaFissionXS does not ' \ + 'match group structure of XSdata object' + raise ValueError(msg) + # Get openmc.mgxs.get_xs() arguments from kwargs + # nuclides, xs_type, and value will have sane defaults but can be + # overridden by kwards + if 'nuclides' in kwargs: + nuclides = kwargs['nuclides'] + else: + nuclides = 'sum' + if 'xs_type' in kwargs: + xs_type = kwargs['xs_type'] + else: + xs_type = 'macro' + if 'value' in kwargs: + value = kwargs['value'] + else: + value = 'mean' + # subdomains is required from the kwargs as this is specific to + # this XSdata object. + if 'subdomains' in kwargs: + subdomains = kwargs['subdomains'] + else: + msg = "Argument 'subdomains' is required" + raise ValueError(msg) + + if self._representation is 'isotropic': + self._k_fission = k_fission.get_xs(subdomains=subdomains, + nuclides=nuclides, + xs_type=xs_type, + value=value) + elif self._representation is 'angle': + # Not yet implemented as MGXS do not yet support this + pass + + else: + if self._representation is 'isotropic': + shape = (self._energy_groups.num_groups,) + elif self._representation is 'angle': + shape = (self._num_polar, self._num_azimuthal, + self._energy_groups.num_groups) + # check we have a numpy list + check_type("k_fission", k_fission, np.ndarray, + expected_iter_type=Real) + if k_fission.shape == shape: + self._k_fission = np.copy(k_fission) + if np.sum(self._k_fission) > 0.0: + self._fissionable = True + else: + msg = 'Shape of provided k_fission "{0}" does not match ' \ + 'shape required, "{1}"'.format(k_fission.shape, shape) + raise ValueError(msg) + + def set_chi(self, chi, **kwargs): + if not self._use_chi: + msg = 'Providing chi when nu_fission already provided as matrix!' + raise ValueError(msg) + + if isinstance(chi, openmc.mgxs.Chi): + # Make sure passed MGXS object contains correct group structure + if self.energy_groups != chi.energy_groups: + msg = 'Group structure of provided Chi does not ' \ + 'match group structure of XSdata object' + raise ValueError(msg) + # Get openmc.mgxs.get_xs() arguments from kwargs + # nuclides, xs_type, and value will have sane defaults but can be + # overridden by kwards + if 'nuclides' in kwargs: + nuclides = kwargs['nuclides'] + else: + nuclides = 'sum' + if 'xs_type' in kwargs: + xs_type = kwargs['xs_type'] + else: + xs_type = 'macro' + if 'value' in kwargs: + value = kwargs['value'] + else: + value = 'mean' + # subdomains is required from the kwargs as this is specific to + # this XSdata object. + if 'subdomains' in kwargs: + subdomains = kwargs['subdomains'] + else: + msg = "Argument 'subdomains' is required" + raise ValueError(msg) + + if self._representation is 'isotropic': + self._chi = chi.get_xs(subdomains=subdomains, + nuclides=nuclides, + xs_type=xs_type, + value=value) + elif self._representation is 'angle': + # Not yet implemented as MGXS do not yet support this + pass + + else: + if self._representation is 'isotropic': + shape = (self._energy_groups.num_groups,) + elif self._representation is 'angle': + shape = (self._num_polar, self._num_azimuthal, + self._energy_groups.num_groups) + # check we have a numpy list + check_type("chi", chi, np.ndarray, expected_iter_type=Real) + if chi.shape == shape: + self._chi = np.copy(chi) + else: + msg = 'Shape of provided chi "{0}" does not match shape ' \ + 'required, "{1}"'.format(chi.shape, shape) + raise ValueError(msg) + if self._use_chi is not None: + self._use_chi = True + + def set_scatter(self, scatter, **kwargs): + if isinstance(scatter, openmc.mgxs.ScatterMatrixXS): + # Make sure passed MGXS object contains correct group structure + if self.energy_groups != scatter.energy_groups: + msg = 'Group structure of provided ScatterMatrixXS does not ' \ + 'match group structure of XSdata object' + raise ValueError(msg) + # Get openmc.mgxs.get_xs() arguments from kwargs + # nuclides, xs_type, and value will have sane defaults but can be + # overridden by kwards + if 'nuclides' in kwargs: + nuclides = kwargs['nuclides'] + else: + nuclides = 'sum' + if 'xs_type' in kwargs: + xs_type = kwargs['xs_type'] + else: + xs_type = 'macro' + if 'value' in kwargs: + value = kwargs['value'] + else: + value = 'mean' + # subdomains is required from the kwargs as this is specific to + # this XSdata object. + if 'subdomains' in kwargs: + subdomains = kwargs['subdomains'] + else: + msg = "Argument 'subdomains' is required" + raise ValueError(msg) + + if self._representation is 'isotropic': + self._scatter = scatter.get_xs(subdomains=subdomains, + nuclides=nuclides, + xs_type=xs_type, + value=value) + elif self._representation is 'angle': + # Not yet implemented as MGXS do not yet support this + pass + + else: + if self._representation is 'isotropic': + shape = (self.num_orders, self._energy_groups.num_groups, + self._energy_groups.num_groups) + max_depth = 3 + elif self._representation is 'angle': + shape = (self._num_polar, self._num_azimuthal, self.num_orders, + self._energy_groups.num_groups, + self._energy_groups.num_groups) + max_depth = 5 + # check we have a numpy list + check_iterable_type("scatter", scatter, expected_type=Real, + max_depth=max_depth) + if scatter.shape == shape: + self._scatter = np.copy(scatter) + else: + msg = 'Shape of provided scatter "{0}" does not match shape ' \ + 'required, "{1}"'.format(scatter.shape, shape) + raise ValueError(msg) + + def set_multiplicity(self, multiplicity, scatter=None, **kwargs): + if isinstance(multiplicity, openmc.mgxs.NuScatterMatrixXS): + if not isinstance(scatter, openmc.mgxs.ScatterMatrixXS): + msg = "Argument 'scatter' must be provided." + raise ValueError(msg) + # Make sure passed MGXS objects contain correct group structure + if self.energy_groups != multiplicity.energy_groups: + msg = 'Group structure of provided NuScatterMatrixXS does not ' \ + 'match group structure of XSdata object' + raise ValueError(msg) + if self.energy_groups != scatter.energy_groups: + msg = 'Group structure of provided ScatterMatrixXS does not ' \ + 'match group structure of XSdata object' + raise ValueError(msg) + # Get openmc.mgxs.get_xs() arguments from kwargs + # nuclides, xs_type, and value will have sane defaults but can be + # overridden by kwards + if 'nuclides' in kwargs: + nuclides = kwargs['nuclides'] + else: + nuclides = 'sum' + if 'xs_type' in kwargs: + xs_type = kwargs['xs_type'] + else: + xs_type = 'macro' + if 'value' in kwargs: + value = kwargs['value'] + else: + value = 'mean' + # subdomains is required from the kwargs as this is specific to + # this XSdata object. + if 'subdomains' in kwargs: + subdomains = kwargs['subdomains'] + else: + msg = "Argument 'subdomains' is required" + raise ValueError(msg) + + if self._representation is 'isotropic': + nuscatt = multiplicity.get_xs(subdomains=subdomains, + nuclides=nuclides, + xs_type=xs_type, + value=value) + scatt = scatter.get_xs(subdomains=subdomains, + nuclides=nuclides, + xs_type=xs_type, + value=value) + self._multiplicity = np.divide(nuscatt, scatt) + elif self._representation is 'angle': + # Not yet implemented as MGXS do not yet support this + pass + + else: + if self._representation is 'isotropic': + shape = (self._energy_groups.num_groups, + self._energy_groups.num_groups) + max_depth = 2 + elif self._representation is 'angle': + shape = (self._num_polar, self._num_azimuthal, + self._energy_groups.num_groups, + self._energy_groups.num_groups) + max_depth = 4 + # check we have a numpy list + check_iterable_type("multiplicity", multiplicity, expected_type=Real, + max_depth=max_depth) + if multiplicity.shape == shape: + self._multiplicity = np.copy(multiplicity) + else: + msg = 'Shape of provided multiplicity "{0}" does not match shape' \ + ' required, "{1}"'.format(multiplicity.shape, shape) + raise ValueError(msg) + + def set_nu_fission(self, nu_fission, **kwargs): + # The NuFissionXS class does not have the capability to produce + # a fission matrix and therefore if this path is pursued, we know + # chi must be used. + if isinstance(nu_fission, openmc.mgxs.NuFissionXS): + # Make sure passed MGXS object contains correct group structure + if self.energy_groups != nu_fission.energy_groups: + msg = 'Group structure of provided NuFissionXS does not match'\ + ' group structure of XSdata object' + raise ValueError(msg) + # Get openmc.mgxs.get_xs() arguments from kwargs + # nuclides, xs_type, and value will have sane defaults but can be + # overridden by kwards + if 'nuclides' in kwargs: + nuclides = kwargs['nuclides'] + else: + nuclides = 'sum' + if 'xs_type' in kwargs: + xs_type = kwargs['xs_type'] + else: + xs_type = 'macro' + if 'value' in kwargs: + value = kwargs['value'] + else: + value = 'mean' + # subdomains is required from the kwargs as this is specific to + # this XSdata object. + if 'subdomains' in kwargs: + subdomains = kwargs['subdomains'] + else: + msg = "Argument 'subdomains' is required" + raise ValueError(msg) + + if self._representation is 'isotropic': + self._nu_fission = nu_fission.get_xs(subdomains=subdomains, + nuclides=nuclides, + xs_type=xs_type, + value=value) + elif self._representation is 'angle': + # Not yet implemented as MGXS do not yet support this + pass + + self._use_chi = True + + else: + # nu_fission can be given as a vector or a matrix + # Vector is used when chi also exists. + # Matrix is used when chi does not exist. + # We have to check that the correct form is given, but only if + # chi already has been set. If not, we just check that this is OK + # and set the use_chi flag accordingly + + # First lets set our dimensions here since they get used repeatedly + # throughout this code. + if self._representation is 'isotropic': + shape_vec = (self._energy_groups.num_groups,) + shape_mat = (self._energy_groups.num_groups, + self._energy_groups.num_groups) + elif self._representation is 'angle': + shape_vec = (self._num_polar, self._num_azimuthal, + self._energy_groups.num_groups) + shape_mat = (self._num_polar, self._num_azimuthal, + self._energy_groups.num_groups, + self._energy_groups.num_groups) + + # Begin by checking the case when chi has already been given and + # thus the rules for filling in nu_fission are set. + if self._use_chi is not None: + if self._use_chi: + shape = shape_vec + else: + shape = shape_mat + if nu_fission.shape != shape: + msg = "Invalid Shape of Nu_fission!" + raise ValueError(msg) + else: + # Get shape of nu_fission to determine if we need chi or not + if nu_fission.shape == shape_vec: + self._use_chi = True + elif nu_fission.shape == shape_mat: + self._use_chi = False + else: + msg = "Invalid Shape of Nu_fission!" + raise ValueError(msg) + + # check we have a numpy list + check_type("nu_fission", nu_fission, np.ndarray, + expected_iter_type=Real) + self._nu_fission = np.copy(nu_fission) + if np.sum(self._nu_fission) > 0.0: + self._fissionable = True + def _get_xsdata_xml(self): element = ET.Element("xsdata") element.set("name", self._name) @@ -649,7 +1157,8 @@ class XSdata(object): class MGXSLibrary(object): """Multi-Group Cross Sections file used for an OpenMC simulation. - Corresponds directly to the MG version of the cross_sections.xml input file. + Corresponds directly to the MG version of the cross_sections.xml input + file. Attributes ---------- @@ -684,7 +1193,7 @@ class MGXSLibrary(object): @energy_groups.setter def energy_groups(self, energy_groups): - check_type("energy groups", energy_groups, EnergyGroups) + check_type("energy groups", energy_groups, openmc.mgxs.EnergyGroups) self._energy_groups = energy_groups def add_xsdata(self, xsdata): @@ -721,8 +1230,8 @@ class MGXSLibrary(object): """ if not isinstance(xsdatas, Iterable): - msg = 'Unable to create OpenMC xsdatas.xml file from "{0}" which ' \ - 'is not iterable'.format(xsdatas) + msg = 'Unable to create OpenMC xsdatas.xml file from "{0}" which' \ + ' is not iterable'.format(xsdatas) raise ValueError(msg) for xsdata in xsdatas: @@ -793,4 +1302,4 @@ class MGXSLibrary(object): # Write the XML Tree to the xsdatas.xml file tree = ET.ElementTree(self._cross_sections_file) tree.write(filename, xml_declaration=True, - encoding='utf-8', method="xml") + encoding='utf-8', method="xml") diff --git a/openmc/settings.py b/openmc/settings.py index ec38bf54c3..e64935d7aa 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -70,9 +70,10 @@ class Settings(object): deviation. cross_sections : str Indicates the path to an XML cross section listing file (usually named - cross_sections.xml). If it is not set, the :envvar:`CROSS_SECTIONS` - environment variable will be used for continuous-energy calculations - and :envvar:`MG_CROSS_SECTIONS` will be used for multi-group + cross_sections.xml). If it is not set, the + :envvar:`OPENMC_CROSS_SECTIONS` environment variable will be used for + continuous-energy calculations and + :envvar:`OPENMC_MG_CROSS_SECTIONS` will be used for multi-group calculations to find the path to the XML cross section file. energy_grid : {'nuclide', 'logarithm', 'material-union'} Set the method used to search energy grids. From e5432e84a8c5398296c6229a1ab073f86697d58a Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sun, 1 May 2016 01:25:45 -0400 Subject: [PATCH 471/650] Improved wording of latest developmental branch URL in docs --- docs/source/index.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 7edc560e2e..a79a10de12 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -13,7 +13,9 @@ OpenMC was originally developed by members of the `Computational Reactor Physics Group`_ at the `Massachusetts Institute of Technology`_ starting in 2011. Various universities, laboratories, and other organizations now contribute to the development of OpenMC. For more information on OpenMC, feel -free to send a message to the User's Group `mailing list`_. Documentation for the latest version of the develop branch can be found on `Read the Docs`_. +free to send a message to the User's Group `mailing list`_. Documentation for +the latest developmental version of the develop branch can be found on +`Read the Docs`_. .. _Computational Reactor Physics Group: http://crpg.mit.edu .. _Massachusetts Institute of Technology: http://web.mit.edu From e1f70b40d40fcc302c833bb6a1349846f4cbcd65 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 1 May 2016 10:23:20 -0400 Subject: [PATCH 472/650] Incorporated ability to transfer from Library to MGXS_Library. Didnt test yet. --- openmc/mgxs/library.py | 168 +++++++++++++++++++++++++++++++++++++ openmc/mgxs_library.py | 184 ++++++++++++++++++++--------------------- 2 files changed, 260 insertions(+), 92 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index f3bf2018dc..7e6f07ce21 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -4,6 +4,8 @@ import copy import pickle from numbers import Integral from collections import OrderedDict +import numpy as np +import warnings.warn as warn import openmc import openmc.mgxs @@ -712,3 +714,169 @@ class Library(object): # Load and return pickled Library object return pickle.load(open(full_filename, 'rb')) + + def write_mg_library(self, xs_type='micro', domain_names=None, xs_ids=None, + filename='mg_cross_sections', directory='./'): + """Create a cross-section data library file for the Multi-Group + mode of OpenMC. + + Parameters + ---------- + xs_type: {'macro', 'micro'} + Provide the macro or micro cross section in units of cm^-1 or + barns. Defaults to 'macro'. If the Library object is not tallied by + nuclide this will be set to 'macro' regardless + domain_names : Iterable of str + List of names to apply to the xsdata entries in the + resultant mgxs data file. Defaults to "set1", "set2", ... + xs_ids : str or Iterable of str + Cross section set identifier (i.e., "71c") for all + data sets (if only str) or for each individual one + (if iterable of str). Defaults to '1g' + filename : str + Filename for the pickle file. Defaults to 'mg_cross_sections'. + directory : str + Directory for the pickle file. Defaults to './' (the + current working directory). + + See also + -------- + Library.dump_to_file(mgxs_lib, filename, directory) + + """ + + # Check data types provided + + cv.check_value('xs_type', xs_type, ['macro', 'micro']) + if not self.by_nuclide: + xs_type = 'macro' + if domain_names is not None: + cv.check_iterable_type('domain_names', filename, basestring) + if xs_ids is not None: + if isinstance(xs_ids, basestring): + # If we only have a string lets convert it now to a list + # of strings. + xs_ids = [xs_ids for i in range(len(self.domains))] + else: + cv.check_iterable_type('xs_ids', xs_ids, basestring) + else: + xs_ids = ['.1g'] + cv.check_type('filename', filename, basestring) + cv.check_type('directory', directory, basestring) + + # Make directory if it does not exist + if not os.path.exists(directory): + os.makedirs(directory) + + full_filename = os.path.join(directory, filename + '.xml') + full_filename = full_filename.replace(' ', '-') + + # Initialize file + mgxs_file = openmc.MGXSLibrary(self.energy_groups) + + # Set the scattering order as isotropic until + # support for higher orders are included + order = 0 + + # Build XSdata objects + xsdatas = [] + for i in range(len(self.domains)): + id = self.domains[i].id + if not self.by_nuclide: + # Use k instead of i simply because k will be used for + # the nuclide index in the else part of this conditional + # and using k allows us to use the same code. + k = i + # Build & add metadata to XSdata object + # (Use i here because k in nuclides will add chars to this) + if domain_names is None: + name = 'set' + str(i + 1) + else: + name = domain_names[i] + name += xs_ids[k] + xsdata = openmc.XSdata(name, self.energy_groups) + xsdata.order = order + + # Now get xs data itself + if 'total' in self.mgxs_types: + xsdata.set_total(self.all_mgxs[id]['total'], + xs_type=xs_type, subdomains=(k + 1,)) + if 'absorption' in self.mgxs_types: + xsdata.set_absorption(self.all_mgxs[id]['absorption'], + xs_type=xs_type, subdomains=(k + 1,)) + if 'fission' in self.mgxs_types: + xsdata.set_fission(self.all_mgxs[id]['fission'], + xs_type=xs_type, subdomains=(k + 1,)) + if 'kappa-fission' in self.mgxs_types: + xsdata.set_k_fission(self.all_mgxs[id]['kappa-fission'], + xs_type=xs_type, subdomains=(k + 1,)) + if 'chi' in self.mgxs_types: + xsdata.set_chi(self.all_mgxs[id]['chi'], + xs_type=xs_type, subdomains=(k + 1,)) + if 'nu-fission' in self.mgxs_types: + xsdata.set_nu_fission(self.all_mgxs[id]['nu-fission'], + xs_type=xs_type, subdomains=(k + 1,)) + # multiplicity requires scatter and nu-scatter + if (('scatter' in self.mgxs_types) and ('nu-scatter' in + self.mgxs_types)): + xsdata.set_multiplicity(self.all_mgxs[id]['nu-scatter'], + self.all_mgxs[id]['scatter'], + xs_type=xs_type, + subdomains=(k + 1,)) + using_multiplicity = True + else: + using_multiplicity = False + + if using_multiplicity: + xsdata.set_scatter(self.all_mgxs[id]['scatter'], + xs_type=xs_type, + subdomains=(k + 1,)) + else: + if 'nu-scatter' in self.mgxs_types: + xsdata.set_scatter(self.all_mgxs[id]['nu-scatter'], + xs_type=xs_type, + subdomains=(k + 1,)) + # Since we are not using multiplicity, then + # scattering multiplication (nu-scatter) must be + # accounted for approximately by using an adjusted + # absorption cross section. + if self.total is not None: + xsdata.absorption = \ + np.subtract(xsdata.total, + np.sum(xsdata.scatter[0, :, :], + axis=1)) + else: + # Total isnt included so we cant do the above + # approximation w/out changing absorption instead. + # That can be done with: + # SigA' = SigA - (nuSigS - SigS) + # Doing so would mean essentially duplicating + # set_scatter from MGXSLibrary to obtain the + # SigS, which would be big and ugly once + # angle filters are available. + # Instead, raise a warning about the + # lack of neutron balance and then use scatter + # instead of nu-scatter + if 'scatter' in self.mgxs_types: + msg = "To properly use the 'nu-scatter' " + \ + "MGXS type and maintain neutron " + \ + "balance, a 'total' MGXS type " + \ + "should be provided." + warn(msg) + xsdata.set_scatter( + self.all_mgxs[id]['scatter'], + xs_type=xs_type, subdomains=(k + 1,)) + else: + # Welp, cant do that either. Quit while ahead. + msg = "Total X/S must be provided if using" + \ + " nu-scatter as the scattering data" + raise ValueError(msg) + + xsdatas.append(xsdata) + else: + pass + + # Add XSdatas to file + + # Finally, write the file + mgxs_file.export_to_xml(full_filename) diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index b41a2030c4..eae6aa4c15 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -739,6 +739,98 @@ class XSdata(object): 'required, "{1}"'.format(fission.shape, shape) raise ValueError(msg) + def set_nu_fission(self, nu_fission, **kwargs): + # The NuFissionXS class does not have the capability to produce + # a fission matrix and therefore if this path is pursued, we know + # chi must be used. + if isinstance(nu_fission, openmc.mgxs.NuFissionXS): + # Make sure passed MGXS object contains correct group structure + if self.energy_groups != nu_fission.energy_groups: + msg = 'Group structure of provided NuFissionXS does not match'\ + ' group structure of XSdata object' + raise ValueError(msg) + # Get openmc.mgxs.get_xs() arguments from kwargs + # nuclides, xs_type, and value will have sane defaults but can be + # overridden by kwards + if 'nuclides' in kwargs: + nuclides = kwargs['nuclides'] + else: + nuclides = 'sum' + if 'xs_type' in kwargs: + xs_type = kwargs['xs_type'] + else: + xs_type = 'macro' + if 'value' in kwargs: + value = kwargs['value'] + else: + value = 'mean' + # subdomains is required from the kwargs as this is specific to + # this XSdata object. + if 'subdomains' in kwargs: + subdomains = kwargs['subdomains'] + else: + msg = "Argument 'subdomains' is required" + raise ValueError(msg) + + if self._representation is 'isotropic': + self._nu_fission = nu_fission.get_xs(subdomains=subdomains, + nuclides=nuclides, + xs_type=xs_type, + value=value) + elif self._representation is 'angle': + # Not yet implemented as MGXS do not yet support this + pass + + self._use_chi = True + + else: + # nu_fission can be given as a vector or a matrix + # Vector is used when chi also exists. + # Matrix is used when chi does not exist. + # We have to check that the correct form is given, but only if + # chi already has been set. If not, we just check that this is OK + # and set the use_chi flag accordingly + + # First lets set our dimensions here since they get used repeatedly + # throughout this code. + if self._representation is 'isotropic': + shape_vec = (self._energy_groups.num_groups,) + shape_mat = (self._energy_groups.num_groups, + self._energy_groups.num_groups) + elif self._representation is 'angle': + shape_vec = (self._num_polar, self._num_azimuthal, + self._energy_groups.num_groups) + shape_mat = (self._num_polar, self._num_azimuthal, + self._energy_groups.num_groups, + self._energy_groups.num_groups) + + # Begin by checking the case when chi has already been given and + # thus the rules for filling in nu_fission are set. + if self._use_chi is not None: + if self._use_chi: + shape = shape_vec + else: + shape = shape_mat + if nu_fission.shape != shape: + msg = "Invalid Shape of Nu_fission!" + raise ValueError(msg) + else: + # Get shape of nu_fission to determine if we need chi or not + if nu_fission.shape == shape_vec: + self._use_chi = True + elif nu_fission.shape == shape_mat: + self._use_chi = False + else: + msg = "Invalid Shape of Nu_fission!" + raise ValueError(msg) + + # check we have a numpy list + check_type("nu_fission", nu_fission, np.ndarray, + expected_iter_type=Real) + self._nu_fission = np.copy(nu_fission) + if np.sum(self._nu_fission) > 0.0: + self._fissionable = True + def set_k_fission(self, k_fission, **kwargs): if isinstance(k_fission, openmc.mgxs.KappaFissionXS): # Make sure passed MGXS object contains correct group structure @@ -986,98 +1078,6 @@ class XSdata(object): ' required, "{1}"'.format(multiplicity.shape, shape) raise ValueError(msg) - def set_nu_fission(self, nu_fission, **kwargs): - # The NuFissionXS class does not have the capability to produce - # a fission matrix and therefore if this path is pursued, we know - # chi must be used. - if isinstance(nu_fission, openmc.mgxs.NuFissionXS): - # Make sure passed MGXS object contains correct group structure - if self.energy_groups != nu_fission.energy_groups: - msg = 'Group structure of provided NuFissionXS does not match'\ - ' group structure of XSdata object' - raise ValueError(msg) - # Get openmc.mgxs.get_xs() arguments from kwargs - # nuclides, xs_type, and value will have sane defaults but can be - # overridden by kwards - if 'nuclides' in kwargs: - nuclides = kwargs['nuclides'] - else: - nuclides = 'sum' - if 'xs_type' in kwargs: - xs_type = kwargs['xs_type'] - else: - xs_type = 'macro' - if 'value' in kwargs: - value = kwargs['value'] - else: - value = 'mean' - # subdomains is required from the kwargs as this is specific to - # this XSdata object. - if 'subdomains' in kwargs: - subdomains = kwargs['subdomains'] - else: - msg = "Argument 'subdomains' is required" - raise ValueError(msg) - - if self._representation is 'isotropic': - self._nu_fission = nu_fission.get_xs(subdomains=subdomains, - nuclides=nuclides, - xs_type=xs_type, - value=value) - elif self._representation is 'angle': - # Not yet implemented as MGXS do not yet support this - pass - - self._use_chi = True - - else: - # nu_fission can be given as a vector or a matrix - # Vector is used when chi also exists. - # Matrix is used when chi does not exist. - # We have to check that the correct form is given, but only if - # chi already has been set. If not, we just check that this is OK - # and set the use_chi flag accordingly - - # First lets set our dimensions here since they get used repeatedly - # throughout this code. - if self._representation is 'isotropic': - shape_vec = (self._energy_groups.num_groups,) - shape_mat = (self._energy_groups.num_groups, - self._energy_groups.num_groups) - elif self._representation is 'angle': - shape_vec = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups) - shape_mat = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups, - self._energy_groups.num_groups) - - # Begin by checking the case when chi has already been given and - # thus the rules for filling in nu_fission are set. - if self._use_chi is not None: - if self._use_chi: - shape = shape_vec - else: - shape = shape_mat - if nu_fission.shape != shape: - msg = "Invalid Shape of Nu_fission!" - raise ValueError(msg) - else: - # Get shape of nu_fission to determine if we need chi or not - if nu_fission.shape == shape_vec: - self._use_chi = True - elif nu_fission.shape == shape_mat: - self._use_chi = False - else: - msg = "Invalid Shape of Nu_fission!" - raise ValueError(msg) - - # check we have a numpy list - check_type("nu_fission", nu_fission, np.ndarray, - expected_iter_type=Real) - self._nu_fission = np.copy(nu_fission) - if np.sum(self._nu_fission) > 0.0: - self._fissionable = True - def _get_xsdata_xml(self): element = ET.Element("xsdata") element.set("name", self._name) From 9bff2ab4747873a542a27cd7cfdf7341c23a4405 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sun, 1 May 2016 13:49:51 -0400 Subject: [PATCH 473/650] Updated Mann-Whitney test to reflect lattice cell indexing in new distribcell paths --- .../examples/pandas-dataframes.ipynb | 63 +++++++++---------- 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index 34b136ee98..87eb50f7bd 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -370,7 +370,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAPZSURB\nVGje7Zs7buMwEIZ9iey50gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwg\nwIcgg8Cc4fCTSK5W4OeFkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7\nE08mlia+rn7VcKXP8sRszFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WB\nzfiz20hXORmP9fi/bM9EeUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4\nlXju8K3DKv9NThOZ3q2KmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3Oaf\nPX40NGgST2r+uvQkXXp6cKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcub\nlfKGt6apotG/NVx3SInWtLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJb\nf8qlPynYmpKCh7OB1fzNalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utr\nJTy8/06TXh0r/5JOa2JmYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU\n4YuBTPa/8P67l/6r44ds+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m\n/65n+S8p/itN15v0UkW3/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB\n6R3Cqn55U4rv4kfH3zaSgQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6\nbjT6rym9I/v/03/b+LHS4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv\n6h9B/Bfxr9j1Hz2eN/hO8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wX\nfP8Mvf9G37/D/ovuP8SeP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7\n+O+E8zdP/8XOf8Hnz9Dzb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589j\nz5/Y8ej9h4D+W7qQmf57efqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m\n4fwXuH+M3n+OO3++AX9clR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA0LTMwVDA5OjQ0\nOjQ1LTA0OjAwA5TfLgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNC0zMFQwOTo0NDo0NS0wNDow\nMHLJZ5IAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAPZSURB\nVGje7Zs7buMwEIZ9iey50gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwg\nwIcgg8Cc4fCTSK5W4OeFkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7\nE08mlia+rn7VcKXP8sRszFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WB\nzfiz20hXORmP9fi/bM9EeUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4\nlXju8K3DKv9NThOZ3q2KmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3Oaf\nPX40NGgST2r+uvQkXXp6cKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcub\nlfKGt6apotG/NVx3SInWtLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJb\nf8qlPynYmpKCh7OB1fzNalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utr\nJTy8/06TXh0r/5JOa2JmYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU\n4YuBTPa/8P67l/6r44ds+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m\n/65n+S8p/itN15v0UkW3/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB\n6R3Cqn55U4rv4kfH3zaSgQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6\nbjT6rym9I/v/03/b+LHS4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv\n6h9B/Bfxr9j1Hz2eN/hO8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wX\nfP8Mvf9G37/D/ovuP8SeP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7\n+O+E8zdP/8XOf8Hnz9Dzb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589j\nz5/Y8ej9h4D+W7qQmf57efqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m\n4fwXuH+M3n+OO3++AX9clR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA1LTAxVDEzOjQ5\nOjA2LTA0OjAwzoiN5AAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNS0wMVQxMzo0OTowNi0wNDow\nML/VNVgAAAAASUVORK5CYII=\n", "text/plain": [ "" ] @@ -554,9 +554,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 5863cc5c9906ae7b2ec15efbf793b22b9c7f7dcb\n", - " Date/Time: 2016-04-30 09:44:46\n", - " MPI Processes: 1\n", + " Git SHA1: cc27630f7db25b148efab11d182c6c7b34e40a5b\n", + " Date/Time: 2016-05-01 13:49:06\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -620,20 +619,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.1400E-01 seconds\n", - " Reading cross sections = 9.3000E-02 seconds\n", - " Total time in simulation = 4.6240E+00 seconds\n", - " Time in transport only = 4.5580E+00 seconds\n", - " Time in inactive batches = 6.9200E-01 seconds\n", - " Time in active batches = 3.9320E+00 seconds\n", - " Time synchronizing fission bank = 2.0000E-03 seconds\n", - " Sampling source sites = 1.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for initialization = 3.9900E-01 seconds\n", + " Reading cross sections = 9.0000E-02 seconds\n", + " Total time in simulation = 4.8580E+00 seconds\n", + " Time in transport only = 4.8080E+00 seconds\n", + " Time in inactive batches = 7.9400E-01 seconds\n", + " Time in active batches = 4.0640E+00 seconds\n", + " Time synchronizing fission bank = 0.0000E+00 seconds\n", + " Sampling source sites = 0.0000E+00 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 5.0530E+00 seconds\n", - " Calculation Rate (inactive) = 18063.6 neutrons/second\n", - " Calculation Rate (active) = 9537.13 neutrons/second\n", + " Total time elapsed = 5.2710E+00 seconds\n", + " Calculation Rate (inactive) = 15743.1 neutrons/second\n", + " Calculation Rate (active) = 9227.36 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1112,7 +1111,7 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEeCAYAAACkBUNkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGKtJREFUeJzt3Xm0ZWV95vHvYxURHCJRFAkQUYMDipASQdupDKgMdl8T\ntKvBCZIljQs0sZ1wWHJLTYcsskKLIpWljYDaGm2Va0vZQKuIrVZAkTEMViMRUFBxJJBI4a//2PvG\nk8ute895uXN9P2udVfu8wz7vPmvXfc6799n7pKqQJGlU91vsAUiSlicDRJLUxACRJDUxQCRJTQwQ\nSVITA0SS1MQA0YJIck+Sy5JcnuTSJP9uHl7jjlnq90hy5Fy/7nxLclSS909TPp7kjYsxJgkMEC2c\nu6pq36raB3gr8JeLMIY9gPsUIElWzc1QVpYkqxd7DFp4BogWw28DPwVI5+QkVyW5Msm6vvyPknyx\nr98lyfVJHtl/Gp9IcmGS7yQ5cerKt7ZO4CTg2f1M6PVT+twvyQeSXJvkgiQbk7ykr7sxyV8luRR4\naZJ9k2xKckWSzyb5nb7dhUn265d3SnJjv7zVMSd5eZKL+zH97WRAJTm63+aLgWfO8F7uk+Qb/Xpf\n3fc9O8mLB17jY0nGpmzvLkku6l/3qiTP7ssP7meIlyf5Yl/20CTn9Nu7KclT+vLxJB9J8jXgI0lW\n9e/7JX3b/zzDuLUSVJUPH/P+AO4BLgOuBX4OPLUvPxy4AFgF7Ax8D9ilr/socDzweeCIvuwo4AfA\nw4AdgKuA/fq6O2ZaJ7AW+PxWxvcSYCPdh6pH0gXcS/q6G4E3D7S9Anhuv/wu4L/1yxcOjGUn4MaZ\nxgw8EfhfwHZ9uw8Ar+zH+j3g4cBvAV8D3j/NmMeBy/t17gTcBPwu8FzgnL7NQ4DvAqun9H0D8PZ+\neRXw4P71bgIe3Zc/tP/3fcCJ/fIfApcNvP63gB3658cA7+iX7w98c3JdPlbmw2mnFspdVbUvQJJn\nAGcneTLwLODjVXUPcFuSrwBPAz4HvJbuj+2mqvr4wLouqKrb+3V9pl/HNwfqt7bOX8wwvmcBn6qq\nXwO3JvnylPq/61/vIcCOVfWVvvws4FNDbP90Y94CPBW4JAl0QfBD4ADgwqr6Ud/+74DHbWW9E1V1\nF3BXP+b9q+qcfjb1cLow/XRVbZnS7xLgjCTb0YXNZUnWAhdV1XcBquonA+/N4X3Zl5I8LMlv93Wf\n618f4AXAUyZnbnThtSddgGkFMkC04KrqG0l2ovvEO5PdgF8DOye5X//HHWDqDdwW4oZu/zREmy38\n5rDw9lPqphtzgLOq6q2DFYOHn4awtffibODlwH8Cjr5Xp6qLkjwHOAw4M8nf0B9WHNHg+xLgtVV1\nXsN6tAx5DkQLLskT6A6b3A58FVjXHz9/OPAc4OL+pOwZwBHANcB/GVjF8/vj8jsAL6Y7xDNo2nUC\nv6Q7VDOdrwGH9+dCdqY73HUvVfVz4KeT5wyAVwCTs5Eb6WYU0B0SGzTdmL8IvCTJI/r35aFJHgX8\nPfDc/pP+dsBLtzJmgLEk2yd5WD/mS/ryM4E/78f8D1M79a9zW1V9EPgQsAbYBDwnyaMnx9M3/yrw\nsr5sLfDjqppuNnce8Jp+zCR5XJIHzjB2LXPOQLRQdkhyWb8c4FVVdU+SzwLPoDuWX3TnGm5N8k7g\nq1X1f5NcTneY59y+/8XAp+lmKB+tqm/+25dia+u8HbinX9+ZVXXKQJ9PAwcC/0B3HuBSunM103kV\nsCHJA4Ab+M0n/L8GPpnkGODcKX2mHXOSdwDnJ7kfcDdwXFVtSjIOfAP4Gd25o625Avgy3TmQd1fV\n9wGq6rYk1wDnbKXfWuBNSe4G7gBeWVU/6sf+mX48PwSeT3eu44wkVwB39ts/nQ/RfdPt0nTH5H5E\nF5ZaoVLl7dy1fCQ5iu5E9fHzsO4HVdUd/af5i4FnVtWtc7Deo5inMc/wmg8ArgTW9LMmac45A5F+\n4/NJdqT75tO75yI8FkOSg4D/DpxieGg+OQORJDXxJLo0i3QXEr4p3UWJdyQ5I8nOSb6Q5BdJ/k9+\nczHh05N8PcnP+ovx1g6s5+gk1yT5ZZIbBi+0S7I2yc1J3pDkh0l+kORe356SlhIDRBrO4cBBwOOB\nFwH/G3gb8Ai6/0evS7Ir3cnz9wAPBd4IfLr/Jhh0J6VfRHcl/tHAKUnWDLzGI+mundgV+FPgtMlg\nkpYiA0Qazvuq6raquoXua62bqurbVfXPdN/6+gO66y42VtXGqvp1VV1Ad4HjoQBVdW5V/b/qfAU4\nH3j2wGvcDbyrqu6uqo103456/MJtojQaA0Qazm0Dy3dN8/xBwKPo7pX1s8kH3VXcuwAkOaS/l9RP\n+rpD6b5+O+n2KVeM39mvV1qS/BaWNHduAj5SVa+eWpHk/nTXgbyS7vYjdyc5h+6aGGlZcgYizZ2P\nAv8+yQv7q+C370+O70b31eD7011ctyXJIXT3jpKWLQNEmiNVdRMwRndy/Ud0M5I3Aferql8CrwM+\nSXfPqSPpbhgpLVteByJJauIMRED340CLPQZpFO6zi88ZiABIUlXlCV0tG+6zi88ZiCSpiQEiSWqy\n7K4DSeIxt3mwbt0631stK+6z82uYw4PL7hxIf9xzsYex4kxMTDA2NrbYw5CG5j47f5IMFSAewpIk\nNTFAJElNDBBJUhMDRJLUxACRJDUxQCRJTQwQSVITA0SS1MQAkbRsjI+Pk4Sku8Ztcnl8fHxxB7aN\nMkAkLRvj4+NUFZN3o5hcNkAWhwEiSWpigEiSmhggkqQmBogkqYkBIklqYoBIkpoYIJKkJgaIJKmJ\nASJJamKASJKaGCCSpCYGiCSpiQEiadnwbrxLiwEiadnwbrxLy1ABkuTgJNcl2ZzkhGnqk+TUvv6K\nJGtG6PuGJJVkp/u2KZJWOmcgS8usAZJkFXAacAiwF3BEkr2mNDsE2LN/HAOcPkzfJLsDLwC+d5+3\nRJK0oIaZgewPbK6qG6rqV8AngLEpbcaAs6uzCdgxyS5D9D0FeDNQ93VDJK18HsJaWoYJkF2Bmwae\n39yXDdNmq32TjAG3VNXlI45ZkrQErF6MF03yAOBtdIevJEnL0DABcguw+8Dz3fqyYdpst5XyxwKP\nBi7vT4btBlyaZP+qunVwxUnGgRMnn69bt46JiYkhhq1R+b5quXGfnT9JBk8trK+q8Xu1mTyWOMNK\nVgPXAwfS/fG/BDiyqq4eaHMYcDxwKHAAcGpV7T9M377/jcB+VfXjYTZqtjFrdBMTE4yNTT21JS1d\n7rPzJwlVldnazToDqaotSY4HzgNWAWdU1dVJju3rNwAb6cJjM3AncPRMfRu3SZK0hAx1DqSqNtKF\nxGDZhoHlAo4btu80bfYYZhySpKXDK9ElLWmTFwtOfcxUN1mv+WWASFrSJq/1mPqYqc7zpAvDAJEk\nNTFAJElNDBBJUhMDRJLUxACRJDUxQCRJTQwQSVITA0SS1MQAkSQ1MUAkSU0MEElSEwNEktTEAJEk\nNTFAJElNDBBJUhMDRJLUxACRJDUxQCRJTQwQSVITA0SS1MQAkSQ1MUAkSU0MEElSEwNEktTEAJEk\nNTFAJElNDBBJUhMDRJLUxACRJDUxQCRJTQwQSVITA0SS1MQAkSQ1GSpAkhyc5Lokm5OcME19kpza\n11+RZM1sfZO8u297eZIvJfm9udkkSdJCmDVAkqwCTgMOAfYCjkiy15RmhwB79o9jgNOH6HtyVT2l\nqvYBzgFOvO+bI0laKMPMQPYHNlfVDVX1K+ATwNiUNmPA2dXZBOyYZJeZ+lbVLwb6PxC4/T5uiyRp\nAa0eos2uwE0Dz28GDhiiza6z9U3yF8ArgbumWackaQlb1JPoVfX2qtod+DBwymKORZI0mmFmILcA\nuw88360vG6bNdkP0BfgY8IXpXjzJOAPnR9atW8fExMQQw9aofF+13LjPzp8kNfB0fVWN36tNVU0t\nm7qS1cD1wIF0f/wvAY6sqqsH2hwGHA8cSnco6tSq2n+mvkn2rKrv9P1fCzy9ql42zEbNNmaNbmJi\ngrGxqae2pKXLfXb+JKGqMlu7WWcgVbUlyfHAecAq4Iw+AI7t6zcAG+nCYzNwJ3D0TH37VZ+U5PHA\nPcANwGtG3EZJ0iIa5hAWVbWRLiQGyzYMLBdw3LB9+/LDRxqpJGlJ8Up0SVITA0SS1MQAkSQ1MUAk\nSU0MEElSEwNEktTEAJEkNTFAJElNDBBJUhMDRJLUxACRJDUxQCRJTQwQSVITA0SS1MQAkSQ1MUAk\nSU0MEElSEwNEktTEAJEkNTFAJElNDBBJUhMDRJLUxACRJDUxQCRJTQwQSVITA0SS1MQAkSQ1MUAk\nSU0MEElSEwNEktTEAJEkNTFAJElNDBBJUhMDRJLUxACRJDUZKkCSHJzkuiSbk5wwTX2SnNrXX5Fk\nzWx9k5yc5Nq+/WeT7Dg3myRJWgizBkiSVcBpwCHAXsARSfaa0uwQYM/+cQxw+hB9LwCeXFVPAa4H\n3nqft0aStGCGmYHsD2yuqhuq6lfAJ4CxKW3GgLOrswnYMckuM/WtqvOrakvffxOw2xxsjyRpgQwT\nILsCNw08v7kvG6bNMH0B/gT4whBjkSQtEYt+Ej3J24EtwMcWeyySpOGtHqLNLcDuA89368uGabPd\nTH2THAW8CDiwqmq6F08yDpw4+XzdunVMTEwMMWyNyvdVy4377PxJMvg3eX1Vjd+rzVb+bg+uZDXd\nSe4D6f74XwIcWVVXD7Q5DDgeOBQ4ADi1qvafqW+Sg4G/AZ5bVT8aZaNmG7NGNzExwdjY1FNb0tLl\nPjt/klBVma3drDOQqtqS5HjgPGAVcEYfAMf29RuAjXThsRm4Ezh6pr79qt8P3B+4IAnApqo6drTN\nlCQtlmEOYVFVG+lCYrBsw8ByAccN27cv//2RRipJWlIW/SS6JGl5MkAkSU0MEElSEwNkGzY+Pk4S\n+i8x/Ovy+Pj44g5M0rIw69d4lxq/xjs//EqkFtM+68/n53fdPVKf9z5jC3/2jaG+B/SvHrLDdlx+\n4gtG6rMtmrOv8UrSfPv5XXdz40mHjdRnYmJi5D57nHDuSO01Mw9hSZKaGCCSpCYGiCSpiQGyDVu7\ndu2038Jau3bt4g5M0rJggGzDthYUBoikYRgg27Dx8XGqismvRU8uex2IpGEYINswLySUdF94Hcg2\nZjIsZrJ+/XrWr1//b8q8eFPSVM5AtjGTh6mmPmaqMzwkTccAkSQ1MUAkSU0MEElSEwNEktTEAJEk\nNTFAJElNDBBJUhMDRJLUxACRJDUxQCRJTQwQSVITA0SS1MQAkSQ1MUAkSU0MEElSEwNEktTEAJEk\nNTFAJElNDBBJUhMDRJLUZKgASXJwkuuSbE5ywjT1SXJqX39FkjWz9U3y0iRXJ/l1kv3mZnMkSQtl\n1gBJsgo4DTgE2As4IsleU5odAuzZP44BTh+i71XAHwMX3ffNkCQttGFmIPsDm6vqhqr6FfAJYGxK\nmzHg7OpsAnZMsstMfavqmqq6bs62RJK0oIYJkF2Bmwae39yXDdNmmL6SpGXIk+iSpCarh2hzC7D7\nwPPd+rJh2mw3RN8ZJRkHTpx8vm7dOiYmJkZZhYbk+6rF8t5ntO1/o/ZpfZ1tUZIaeLq+qsbv1aiq\nZnzQhcwNwKOB3wIuB540pc1hwBeAAE8HLh6h74XAfrONY6B9ae6dc845iz0EbcMe9ZbPj9ynZZ9t\neZ1tUf93dta/x7POQKpqS5LjgfOAVcAZVXV1kmP7+g3ARuBQYDNwJ3D0TH37dPsj4H3Aw4Fzk1xW\nVS+cbTySpKVhmENYVNVGupAYLNswsFzAccP27cs/C3x2lMFKkpYOT6JLkpoYIJKkJgaIJKmJASJJ\namKASJKaGCCSpCYGiCSpyVDXgWh52Wf9+fz8rrtH6vPeZ8AeJ5w7Up+H7LAdl5/4gpH6SFo5DJAV\n6Od33c2NJx02Up+JiYmR+4waONLWPPiJJ7D3Wff6rboZvWfH97D3WXuP+DrQ3XlJc8EAkbTofnnN\nSU0feq581ZUj9fFDz9zyHIgkqYkBIklqYoBIkpoYIJKkJgaIJKmJASJJamKASJKaGCCSpCYGiCSp\niQEiSWpigEiSmhggkqQm3kxR0pIw6o0OW3+CQHPHAJG06Ea9Ey+0/QSB5paHsCRJTQwQSVITA0SS\n1MRzICuQPw8qaSEYICuQPw8qaSF4CEuS1MQAkSQ1MUAkSU0MEElSE0+ir1DeFkLSfDNAViBvCyFp\nIQx1CCvJwUmuS7I5yb0uMEjn1L7+iiRrZuub5KFJLkjynf7f35mbTZIkLYRZAyTJKuA04BBgL+CI\nJHtNaXYIsGf/OAY4fYi+JwBfrKo9gS/2zyVJy8QwM5D9gc1VdUNV/Qr4BDA2pc0YcHZ1NgE7Jtll\nlr5jwFn98lnAi+/jtkiSFtAwAbIrcNPA85v7smHazNR356r6Qb98K7DzkGOWtA1JMu1jprrJes2v\nJfE13qoqoBZ7HNsC/zNquamqaR8z1U3Wa34N8y2sW4DdB57v1pcN02a7GfrelmSXqvpBf7jrh9O9\neJJx4MTJ5+vWrWNiYmKIYWs655xzTlOd77mWIvfL+ZNkMIXXV9X4vdrMltRJVgPXAwfS/fG/BDiy\nqq4eaHMYcDxwKHAAcGpV7T9T3yQnA7dX1Un9t7MeWlVvHmaj/HQx9yYmJhgbm3pqS1q63GfnTxKq\natZDD7POQKpqS5LjgfOAVcAZfQAc29dvADbShcdm4E7g6Jn69qs+Cfhkkj8F/hH4jyNuoyRpEQ11\nIWFVbaQLicGyDQPLBRw3bN++/Ha6mYkkaRlaEifRJUnLjwEiSWpigEiSmhggkqQmBogkqcmyvJ27\nV0ZL0uKb9UJCbRv6CzRNZi0b7rOLz0NYkqQmBogkqYkBoknrF3sA0ojcZxeZ50AkSU2cgUiSmhgg\nkqQmBsgKkuR1Sa5J8tP+N1ZG7f/1+RiX1CrJE5JcluTbSR7bso8meVeSg+ZjfNs6z4GsIEmuBQ6q\nqpsXeyzSXOg/CK2uqvcs9lh0b85AVogkG4DHAF9I8vok7+/LX5rkqiSXJ7moL3tSkov7T3ZXJNmz\nL7+j/zdJTu77XZlkXV++NsmFSf5nkmuTfCzeFkAzSLJHPyv+YJKrk5yfZId+P9qvb7NTkhun6Xso\n8OfAa5J8uS+b3Ed3SXJRvw9fleTZSVYlOXNgv3193/bMJC/plw/sZzNXJjkjyf378huTrE9yaV/3\nhAV5g5Y5A2SFqKpjge8DzwN+OlD1TuCFVbUP8B/6smOB91bVvsB+wNQZyx8D+wL7AAcBJ/e/Ww/w\nB3T/qfeiC6xnzv3WaIXZEzitqp4E/Aw4fJhO/Y/RbQBOqarnTak+Ejiv34f3AS6j22d3raonV9Xe\nwIcHOyTZHjgTWNfXrwZeM9Dkx1W1BjgdeONom7htMkBWvq8BZyZ5Nd3PCgN8A3hbkrcAj6qqu6b0\neRbw8aq6p6puA74CPK2vu7iqbq6qX9P9p91j3rdAy913q+qyfvlbzM0+cwlwdJJxYO+q+iVwA/CY\nJO9LcjDwiyl9Ht+P5fr++VnAcwbqPzPHY1zxDJAVrp+ZvAPYHfhWkodV1f+gm43cBWxM8ocjrPJf\nBpbvYZnekFMLarp9Zgu/+fuz/WRlkg/3h6Xu9TPYg6rqIro//rfQfUB6ZVX9lG42ciHdLPtDjeN0\nvx6SAbLCJXlsVf19Vb0T+BGwe5LHADdU1anABPCUKd2+Cqzrjyk/nO4/6sULOnCtdDcCT+2XXzJZ\nWFVHV9W+VXXoTJ2TPAq4rao+SBcUa5LsBNyvqj5N96FpzZRu1wF7JPn9/vkr6GbXamTKrnwn9yfJ\nA3wRuBx4C/CKJHcDtwL/dUqfzwLP6NsW8OaqutUTi5pDfw18MskxwLkN/dcCb+r34TuAVwK7Ah9O\nMvnB+K2DHarqn5McDXwqyWq6w2AbGscv/BqvJKmRh7AkSU0MEElSEwNEktTEAJEkNTFAJElNDBBJ\nUhMDRJLUxACRFkl/MZu0bBkg0giSPDDJuf3t8a9Ksi7J05J8vS+7OMmDk2zf39fpyv724c/r+x+V\n5HNJvkR3ZwCSvCnJJf2t9dcv6gZKI/ATkDSag4HvV9VhAEkeAnyb7hbhlyT5bbqbVP4ZUFW1d38L\nmPOTPK5fxxrgKVX1kyQvoLvd+f50t5v5XJLn9DcLlJY0ZyDSaK4Enp/kr5I8G/g94AdVdQlAVf2i\nqrbQ3RL/o33ZtcA/ApMBckFV/aRffkH/+DZwKfAEukCRljxnINIIqur6JGuAQ4H3AF9qWM0/DSwH\n+Muq+tu5GJ+0kJyBSCNI8rvAnVX1UeBk4ABglyRP6+sf3J8c/yrwsr7scXQzleumWeV5wJ8keVDf\ndtckj5j/LZHuO2cg0mj2prtF/q+Bu+l+EjXA+5LsQHf+4yDgA8DpSa6k+/Gko6rqX6b+hHxVnZ/k\nicA3+ro7gJcDP1yg7ZGaeTt3SVITD2FJkpoYIJKkJgaIJKmJASJJamKASJKaGCCSpCYGiCSpiQEi\nSWry/wHxFqsYpaO7aQAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1135,7 +1134,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 27, @@ -1146,7 +1145,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2267,15 +2266,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "Mann-Whitney Test p-value: 6.038663783e-42\n" + "Mann-Whitney Test p-value: 0.303583331507\n" ] } ], "source": [ - "# Extract tally data from pins in the pins divided along y=-x diagonal\n", + "# Extract tally data from pins in the pins divided along y=x diagonal\n", "multi_index = ('level 2', 'lat',)\n", - "lower = df[df[multi_index + ('x',)] > df[multi_index + ('y',)]]\n", - "upper = df[df[multi_index + ('x',)] < df[multi_index + ('y',)]]\n", + "lower = df[df[multi_index + ('x',)] + df[multi_index + ('y',)] < 16]\n", + "upper = df[df[multi_index + ('x',)] + df[multi_index + ('y',)] > 16]\n", "lower = lower[lower['score'] == 'absorption']\n", "upper = upper[upper['score'] == 'absorption']\n", "\n", @@ -2305,15 +2304,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "Mann-Whitney Test p-value: 0.303583331507\n" + "Mann-Whitney Test p-value: 6.038663783e-42\n" ] } ], "source": [ - "# Extract tally data from pins in the pins divided along y=x diagonal \n", + "# Extract tally data from pins in the pins divided along y=-x diagonal \n", "multi_index = ('level 2', 'lat',)\n", - "lower = df[df[multi_index + ('x',)] + df[multi_index + ('y',)] < 16]\n", - "upper = df[df[multi_index + ('x',)] + df[multi_index + ('y',)] > 16]\n", + "lower = df[df[multi_index + ('x',)] > df[multi_index + ('y',)]]\n", + "upper = df[df[multi_index + ('x',)] < df[multi_index + ('y',)]]\n", "lower = lower[lower['score'] == 'absorption']\n", "upper = upper[upper['score'] == 'absorption']\n", "\n", @@ -2351,7 +2350,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 38, @@ -2362,7 +2361,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2389,7 +2388,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 39, @@ -2400,7 +2399,7 @@ "data": { "image/png": "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\n9OnTh2bNmtGmTRsuu+wyioqKSt/PzLjvvvvYdddd2W677fjDH/7A3Llz6dOnD02bNmXo0KEbrZ8J\nSggi0mBcccUVXHHFFaxatYq5c+dy8sknA/Dmm28CsGLFClavXk2fPn0YOXIkI0eO5LXXXuOrr75i\n9erVXHbZZQB89tlnXHLJJTz++OMsXryYlStXlna8s97YsWMZMmQIK1as4LTTTiMej3PXXXexfPly\npkyZwqRJk7jvvvs22ubll1/mo48+4t133+WOO+7gvPPO4/HHH+ebb75hxowZjBo1KqPlo4QgIvXe\n4MGDadasWelwySWXlLteTk4Oc+bMYfny5eTn57P//vtv8T0ff/xxrr76ajp37kx+fj5/+ctfGD16\nNCUlJTz11FMce+yx9OvXj9zcXG6++ebNemnr06cPgwcPJhaL0bhxY/bee2/2339/EokEHTt25MIL\nL+SNN97YaJvrrruOJk2a0K1bN7p3786RRx5J586dadq0KYMGDWLatGnVL6wKKCGISL337LPPsmLF\nitJh01/e640YMYJZs2bRpUsX9tlnH55//vktvueiRYvo0KFD6XSHDh0oKSlhyZIlLFq0iPbt25cu\n22abbWjRosVG25ddDjBr1iyOOeYYWrduTZMmTbjxxhtZvnz5Ruu0atWqdLxx48abTa9evbqCUqg+\nJQQRaTB22203Ro0axdKlS7n++usZMmQIa9asKbcP5rZt2zJ//vzS6W+++YZEIkGrVq1o06YNCxYs\nKF22bt06vv/++4223/Q9L774Yrp06cLs2bNZtWoVf/7zn+tcHxNKCCLSYDz22GMsW7aMWCxGs2bN\nAIjFYuy4447EYjG++uqr0nVPPfVU7rrrLr7++mtWr17NjTfeyNChQ0kkEgwZMoRx48YxefJkioqK\nKCgoqPTL/aeffqJJkybk5+fzxRdfVNjvc1Qa7g23IlIt9fG5kPHjx3P11Vezdu1aOnTowOjRo2nc\nuDEAw4YNo2/fvhQXFzN+/HjOPfdcFi1aRP/+/fn555854ogjuOeee4DgYbd77rmHU045hTVr1nDl\nlVfSsmVL8vLytrjvO++8kwsuuIA77riDnj17MnToUF599dVaOe50qQtNybiqPmimB9PqHnWhWbHV\nq1fTrFkzZs+eTadOnSKLQ11oiohEYNy4caxdu5Y1a9ZwzTXX0KNHDzp27Bh1WNWiKiOpEZluxkCk\n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\nSUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, From 1f17718de845d70732485418de27ee307bb63de2 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 1 May 2016 13:53:21 -0400 Subject: [PATCH 474/650] Tested, works (!!!!). Next up will be some useful features found during this testing --- openmc/mgxs/library.py | 32 ++++++++++++++++++-------------- openmc/mgxs_library.py | 14 ++++++++------ 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 7e6f07ce21..0ce7348b97 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -5,7 +5,7 @@ import pickle from numbers import Integral from collections import OrderedDict import numpy as np -import warnings.warn as warn +from warnings import warn import openmc import openmc.mgxs @@ -715,7 +715,7 @@ class Library(object): # Load and return pickled Library object return pickle.load(open(full_filename, 'rb')) - def write_mg_library(self, xs_type='micro', domain_names=None, xs_ids=None, + def write_mg_library(self, xs_type='macro', domain_names=None, xs_ids=None, filename='mg_cross_sections', directory='./'): """Create a cross-section data library file for the Multi-Group mode of OpenMC. @@ -725,7 +725,7 @@ class Library(object): xs_type: {'macro', 'micro'} Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. If the Library object is not tallied by - nuclide this will be set to 'macro' regardless + nuclide this will be set to 'macro' regardless. domain_names : Iterable of str List of names to apply to the xsdata entries in the resultant mgxs data file. Defaults to "set1", "set2", ... @@ -760,7 +760,7 @@ class Library(object): else: cv.check_iterable_type('xs_ids', xs_ids, basestring) else: - xs_ids = ['.1g'] + xs_ids = ['1g'] cv.check_type('filename', filename, basestring) cv.check_type('directory', directory, basestring) @@ -781,6 +781,7 @@ class Library(object): # Build XSdata objects xsdatas = [] for i in range(len(self.domains)): + id = self.domains[i].id if not self.by_nuclide: # Use k instead of i simply because k will be used for @@ -793,7 +794,7 @@ class Library(object): name = 'set' + str(i + 1) else: name = domain_names[i] - name += xs_ids[k] + name += '.' + xs_ids[k] xsdata = openmc.XSdata(name, self.energy_groups) xsdata.order = order @@ -817,10 +818,10 @@ class Library(object): xsdata.set_nu_fission(self.all_mgxs[id]['nu-fission'], xs_type=xs_type, subdomains=(k + 1,)) # multiplicity requires scatter and nu-scatter - if (('scatter' in self.mgxs_types) and ('nu-scatter' in - self.mgxs_types)): - xsdata.set_multiplicity(self.all_mgxs[id]['nu-scatter'], - self.all_mgxs[id]['scatter'], + if ((('scatter matrix' in self.mgxs_types) and + ('nu-scatter matrix' in self.mgxs_types))): + xsdata.set_multiplicity(self.all_mgxs[id]['nu-scatter matrix'], + self.all_mgxs[id]['scatter matrix'], xs_type=xs_type, subdomains=(k + 1,)) using_multiplicity = True @@ -828,12 +829,12 @@ class Library(object): using_multiplicity = False if using_multiplicity: - xsdata.set_scatter(self.all_mgxs[id]['scatter'], + xsdata.set_scatter(self.all_mgxs[id]['scatter matrix'], xs_type=xs_type, subdomains=(k + 1,)) else: if 'nu-scatter' in self.mgxs_types: - xsdata.set_scatter(self.all_mgxs[id]['nu-scatter'], + xsdata.set_scatter(self.all_mgxs[id]['nu-scatter matrix'], xs_type=xs_type, subdomains=(k + 1,)) # Since we are not using multiplicity, then @@ -858,8 +859,9 @@ class Library(object): # lack of neutron balance and then use scatter # instead of nu-scatter if 'scatter' in self.mgxs_types: - msg = "To properly use the 'nu-scatter' " + \ - "MGXS type and maintain neutron " + \ + msg = "To properly use the " + \ + "'nu-scatter matrix' MGXS type " + \ + "and maintain neutron " + \ "balance, a 'total' MGXS type " + \ "should be provided." warn(msg) @@ -869,7 +871,8 @@ class Library(object): else: # Welp, cant do that either. Quit while ahead. msg = "Total X/S must be provided if using" + \ - " nu-scatter as the scattering data" + " 'nu-scatter matrix' as the " + \ + "scattering data" raise ValueError(msg) xsdatas.append(xsdata) @@ -877,6 +880,7 @@ class Library(object): pass # Add XSdatas to file + mgxs_file.add_xsdatas(xsdatas) # Finally, write the file mgxs_file.export_to_xml(full_filename) diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index eae6aa4c15..ef12c6c8ab 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -462,9 +462,10 @@ class XSdata(object): @chi.setter def chi(self, chi): - if not self._use_chi: - msg = 'Providing chi when nu_fission already provided as matrix!' - raise ValueError(msg) + if self._use_chi is not None: + if not self._use_chi: + msg = 'Providing chi when nu_fission already provided as matrix!' + raise ValueError(msg) if self._representation is 'isotropic': shape = (self._energy_groups.num_groups,) @@ -889,9 +890,10 @@ class XSdata(object): raise ValueError(msg) def set_chi(self, chi, **kwargs): - if not self._use_chi: - msg = 'Providing chi when nu_fission already provided as matrix!' - raise ValueError(msg) + if self._use_chi is not None: + if not self._use_chi: + msg = 'Providing chi when nu_fission already provided as matrix!' + raise ValueError(msg) if isinstance(chi, openmc.mgxs.Chi): # Make sure passed MGXS object contains correct group structure From 192523743f8519759f863362927eb8674950dce0 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 1 May 2016 15:20:13 -0400 Subject: [PATCH 475/650] Implemented microscopic nuclidic writing for mgxs_library. May have exposed a bug in OpenMC, need to understand. --- openmc/mgxs/library.py | 177 +++++++++++++++++++++++++++++------------ 1 file changed, 125 insertions(+), 52 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 0ce7348b97..1e9156ce58 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -15,6 +15,11 @@ import openmc.checkvalue as cv if sys.version_info[0] >= 3: basestring = str +# The following represent the most accurate MGXS generation strategy +# for use in the MG mode of OpenMC. +OPENMC_MG_MGXS_TYPES = ['total', 'absorption', 'nu-fission', 'chi', + 'scatter matrix', 'nu-scatter matrix'] + class Library(object): """A multi-group cross section library for some energy group structure. @@ -748,7 +753,10 @@ class Library(object): # Check data types provided cv.check_value('xs_type', xs_type, ['macro', 'micro']) - if not self.by_nuclide: + # Construct the collection of the nuclides to report + if self.by_nuclide: + nuclides = self.all_mgxs[1][self.mgxs_types[-1]].get_all_nuclides() + else: xs_type = 'macro' if domain_names is not None: cv.check_iterable_type('domain_names', filename, basestring) @@ -781,62 +789,58 @@ class Library(object): # Build XSdata objects xsdatas = [] for i in range(len(self.domains)): - id = self.domains[i].id if not self.by_nuclide: - # Use k instead of i simply because k will be used for - # the nuclide index in the else part of this conditional - # and using k allows us to use the same code. - k = i # Build & add metadata to XSdata object # (Use i here because k in nuclides will add chars to this) if domain_names is None: name = 'set' + str(i + 1) else: name = domain_names[i] - name += '.' + xs_ids[k] + name += '.' + xs_ids[i] xsdata = openmc.XSdata(name, self.energy_groups) xsdata.order = order # Now get xs data itself if 'total' in self.mgxs_types: xsdata.set_total(self.all_mgxs[id]['total'], - xs_type=xs_type, subdomains=(k + 1,)) + xs_type=xs_type, subdomains=(i + 1,)) if 'absorption' in self.mgxs_types: xsdata.set_absorption(self.all_mgxs[id]['absorption'], - xs_type=xs_type, subdomains=(k + 1,)) + xs_type=xs_type, subdomains=(i + 1,)) if 'fission' in self.mgxs_types: xsdata.set_fission(self.all_mgxs[id]['fission'], - xs_type=xs_type, subdomains=(k + 1,)) + xs_type=xs_type, subdomains=(i + 1,)) if 'kappa-fission' in self.mgxs_types: xsdata.set_k_fission(self.all_mgxs[id]['kappa-fission'], - xs_type=xs_type, subdomains=(k + 1,)) + xs_type=xs_type, subdomains=(i + 1,)) if 'chi' in self.mgxs_types: xsdata.set_chi(self.all_mgxs[id]['chi'], - xs_type=xs_type, subdomains=(k + 1,)) + xs_type=xs_type, subdomains=(i + 1,)) if 'nu-fission' in self.mgxs_types: xsdata.set_nu_fission(self.all_mgxs[id]['nu-fission'], - xs_type=xs_type, subdomains=(k + 1,)) + xs_type=xs_type, subdomains=(i + 1,)) # multiplicity requires scatter and nu-scatter if ((('scatter matrix' in self.mgxs_types) and ('nu-scatter matrix' in self.mgxs_types))): - xsdata.set_multiplicity(self.all_mgxs[id]['nu-scatter matrix'], - self.all_mgxs[id]['scatter matrix'], - xs_type=xs_type, - subdomains=(k + 1,)) + xsdata.set_multiplicity( + self.all_mgxs[id]['nu-scatter matrix'], + self.all_mgxs[id]['scatter matrix'], + xs_type=xs_type, subdomains=(i + 1,)) + xsdata.multiplicity = np.nan_to_num(xsdata.multiplicity) using_multiplicity = True else: using_multiplicity = False if using_multiplicity: - xsdata.set_scatter(self.all_mgxs[id]['scatter matrix'], + xsdata.set_scatter(self.all_mgxs[id]['nu-scatter matrix'], xs_type=xs_type, - subdomains=(k + 1,)) + subdomains=(i + 1,)) else: - if 'nu-scatter' in self.mgxs_types: - xsdata.set_scatter(self.all_mgxs[id]['nu-scatter matrix'], - xs_type=xs_type, - subdomains=(k + 1,)) + if 'nu-scatter matrix' in self.mgxs_types: + xsdata.set_scatter( + self.all_mgxs[id]['nu-scatter matrix'], + xs_type=xs_type, subdomains=(i + 1,)) # Since we are not using multiplicity, then # scattering multiplication (nu-scatter) must be # accounted for approximately by using an adjusted @@ -846,41 +850,110 @@ class Library(object): np.subtract(xsdata.total, np.sum(xsdata.scatter[0, :, :], axis=1)) - else: - # Total isnt included so we cant do the above - # approximation w/out changing absorption instead. - # That can be done with: - # SigA' = SigA - (nuSigS - SigS) - # Doing so would mean essentially duplicating - # set_scatter from MGXSLibrary to obtain the - # SigS, which would be big and ugly once - # angle filters are available. - # Instead, raise a warning about the - # lack of neutron balance and then use scatter - # instead of nu-scatter - if 'scatter' in self.mgxs_types: - msg = "To properly use the " + \ - "'nu-scatter matrix' MGXS type " + \ - "and maintain neutron " + \ - "balance, a 'total' MGXS type " + \ - "should be provided." - warn(msg) - xsdata.set_scatter( - self.all_mgxs[id]['scatter'], - xs_type=xs_type, subdomains=(k + 1,)) - else: - # Welp, cant do that either. Quit while ahead. - msg = "Total X/S must be provided if using" + \ - " 'nu-scatter matrix' as the " + \ - "scattering data" - raise ValueError(msg) + else: + msg = "No nu-scatter matrix data was provided. " + \ + "This means neutron balance cannot be " + \ + "achieved since (n,xn) multiplication is " + \ + "ignored." + warn(msg) + xsdata.set_scatter(self.all_mgxs[id]['scatter matrix'], + xs_type=xs_type, + subdomains=(i + 1,)) xsdatas.append(xsdata) else: - pass + for nuclide in nuclides: + # Build & add metadata to XSdata object + if domain_names is None: + name = 'set' + str(i + 1) + else: + name = domain_names[i] + name += '_' + nuclide + name += '.' + xs_ids[i] + xsdata = openmc.XSdata(name, self.energy_groups) + xsdata.order = order + + # Now get xs data itself + if 'total' in self.mgxs_types: + xsdata.set_total(self.all_mgxs[id]['total'], + xs_type=xs_type, subdomains=(i + 1,), + nuclides=[nuclide]) + if 'absorption' in self.mgxs_types: + xsdata.set_absorption(self.all_mgxs[id]['absorption'], + xs_type=xs_type, + subdomains=(i + 1,), + nuclides=[nuclide]) + if 'fission' in self.mgxs_types: + xsdata.set_fission(self.all_mgxs[id]['fission'], + xs_type=xs_type, + subdomains=(i + 1,), + nuclides=[nuclide]) + if 'kappa-fission' in self.mgxs_types: + xsdata.set_k_fission( + self.all_mgxs[id]['kappa-fission'], + xs_type=xs_type, subdomains=(i + 1,), + nuclides=[nuclide]) + if 'chi' in self.mgxs_types: + xsdata.set_chi(self.all_mgxs[id]['chi'], + xs_type=xs_type, subdomains=(i + 1,), + nuclides=[nuclide]) + if 'nu-fission' in self.mgxs_types: + xsdata.set_nu_fission(self.all_mgxs[id]['nu-fission'], + xs_type=xs_type, + subdomains=(i + 1,), + nuclides=[nuclide]) + # multiplicity requires scatter and nu-scatter + if ((('scatter matrix' in self.mgxs_types) and + ('nu-scatter matrix' in self.mgxs_types))): + xsdata.set_multiplicity( + self.all_mgxs[id]['nu-scatter matrix'], + self.all_mgxs[id]['scatter matrix'], + xs_type=xs_type, subdomains=(i + 1,), + nuclides=[nuclide]) + xsdata.multiplicity = \ + np.nan_to_num(xsdata.multiplicity) + using_multiplicity = True + else: + using_multiplicity = False + + if using_multiplicity: + xsdata.set_scatter( + self.all_mgxs[id]['nu-scatter matrix'], + xs_type=xs_type, subdomains=(i + 1,), + nuclides=[nuclide]) + else: + if 'nu-scatter matrix' in self.mgxs_types: + xsdata.set_scatter( + self.all_mgxs[id]['nu-scatter matrix'], + xs_type=xs_type, subdomains=(i + 1,), + nuclides=[nuclide]) + # Since we are not using multiplicity, then + # scattering multiplication (nu-scatter) must be + # accounted for approximately by using an adjusted + # absorption cross section. + if self.total is not None: + xsdata.absorption = \ + np.subtract(xsdata.total, + np.sum(xsdata.scatter[0, :, :], + axis=1)) + else: + msg = "No nu-scatter matrix data was provided. " +\ + "This means neutron balance cannot be " + \ + "achieved since (n,xn) multiplication is " +\ + "ignored." + warn(msg) + xsdata.set_scatter( + self.all_mgxs[id]['scatter matrix'], + xs_type=xs_type, + subdomains=(i + 1,), + nuclides=[nuclide]) + + xsdatas.append(xsdata) # Add XSdatas to file mgxs_file.add_xsdatas(xsdatas) # Finally, write the file mgxs_file.export_to_xml(full_filename) + + From b35d37c4fbea2d3ac0b5976dc512eae268414f53 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 1 May 2016 20:02:42 -0400 Subject: [PATCH 476/650] Read in AWR data for MGXS Library if available --- src/mgxs_header.F90 | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index 56c538a5d1..b6f8a2b49a 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -221,6 +221,11 @@ module mgxs_header else this % zaid = 0 end if + if (check_for_node(node_xsdata, "awr")) then + call get_node_value(node_xsdata, "awr", this % awr) + else + this % awr = -ONE + end if if (check_for_node(node_xsdata, "scatt_type")) then call get_node_value(node_xsdata, "scatt_type", temp_str) temp_str = trim(to_lower(temp_str)) From f20636565a9fe4c83b4594bb833f2e03afefbdf2 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 1 May 2016 21:16:31 -0400 Subject: [PATCH 477/650] Fixed generation of scatter % mult from complicated nuclidic information --- src/mgxs_data.F90 | 2 -- src/mgxs_header.F90 | 80 ++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 71 insertions(+), 11 deletions(-) diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 04d76f18c8..6cf730cfa3 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -164,8 +164,6 @@ contains subroutine create_macro_xs() integer :: i_mat ! index in materials array - integer :: i ! loop index over nuclides - integer :: l ! Loop over score bins type(Material), pointer :: mat ! current material integer :: scatt_type diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index b6f8a2b49a..7d4ee275d7 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -1333,9 +1333,9 @@ module mgxs_header integer :: i ! loop index over nuclides integer :: gin, gout ! group indices real(8) :: atom_density ! atom density of a nuclide - real(8) :: norm + real(8) :: norm, nuscatt integer :: mat_max_order, order, order_dim, nuc_order_dim - real(8), allocatable :: temp_mult(:,:) + real(8), allocatable :: temp_mult(:,:), mult_num(:,:), mult_denom(:,:) real(8), allocatable :: scatt_coeffs(:,:,:) ! Set the meta-data @@ -1417,6 +1417,10 @@ module mgxs_header this % chi = ZERO allocate(temp_mult(groups,groups)) temp_mult = ZERO + allocate(mult_num(groups,groups)) + mult_num = ZERO + allocate(mult_denom(groups,groups)) + mult_denom = ZERO allocate(scatt_coeffs(order_dim,groups,groups)) scatt_coeffs = ZERO @@ -1445,10 +1449,24 @@ module mgxs_header end if ! Get the multiplication matrix + ! To combine from nuclidic data we need to use the final relationship + ! mult_{gg'} = sum_i(N_i*nuscatt_{i,g,g'}) / + ! sum_i(N_i*(nuscatt_{i,g,g'} / mult_{i,g,g'})) + ! Developed as follows: + ! mult_{gg'} = nuScatt{g,g'} / Scatt{g,g'} + ! mult_{gg'} = sum_i(N_i*nuscatt_{i,g,g'}) / sum(N_i*scatt_{i,g,g'}) + ! mult_{gg'} = sum_i(N_i*nuscatt_{i,g,g'}) / + ! sum_i(N_i*(nuscatt_{i,g,g'} / mult_{i,g,g'})) + ! nuscatt_{i,g,g'} can be reconstructed from scatter % energy and + ! scatter % scattxs do gin = 1, groups do gout = nuc % scatter % gmin(gin), nuc % scatter % gmax(gin) - temp_mult(gout,gin) = temp_mult(gout,gin) + atom_density * & - nuc % scatter % mult(gin) % data(gout) + nuscatt = nuc % scatter % scattxs(gin) * & + nuc % scatter % energy(gin) % data(gout) + mult_num(gout, gin) = mult_num(gout, gin) + atom_density * & + nuscatt + mult_denom(gout, gin) = mult_denom(gout,gin) + atom_density * & + nuscatt / nuc % scatter % mult(gin) % data(gout) end do end do @@ -1464,6 +1482,17 @@ module mgxs_header end select end do + ! Obtain temp_mult + do gin = 1, groups + do gout = 1, groups + if (mult_denom(gout, gin) > ZERO) then + temp_mult(gout, gin) = mult_num(gout, gin) / mult_denom(gout, gin) + else + temp_mult(gout, gin) = ONE + end if + end do + end do + ! Initialize the ScattData Object call this % scatter % init(temp_mult,scatt_coeffs) @@ -1478,7 +1507,7 @@ module mgxs_header end if ! Deallocate temporaries - deallocate(scatt_coeffs, temp_mult) + deallocate(scatt_coeffs, temp_mult, mult_num, mult_denom) end subroutine mgxsiso_combine @@ -1496,9 +1525,9 @@ module mgxs_header integer :: gin, gout ! group indices real(8) :: atom_density ! atom density of a nuclide integer :: ipol, iazi, n_pol, n_azi - real(8) :: norm + real(8) :: norm, nuscatt integer :: mat_max_order, order, order_dim, nuc_order_dim - real(8), allocatable :: temp_mult(:,:,:,:) + real(8), allocatable :: temp_mult(:,:,:,:), mult_num(:,:,:,:), mult_denom(:,:,:,:) real(8), allocatable :: scatt_coeffs(:,:,:,:,:) ! Set the meta-data @@ -1617,6 +1646,10 @@ module mgxs_header this % chi = ZERO allocate(temp_mult(groups,groups,n_azi,n_pol)) temp_mult = ZERO + allocate(mult_num(groups,groups,n_azi,n_pol)) + mult_num = ZERO + allocate(mult_denom(groups,groups,n_azi,n_pol)) + mult_denom = ZERO allocate(scatt_coeffs(order_dim,groups,groups,n_azi,n_pol)) scatt_coeffs = ZERO @@ -1647,13 +1680,27 @@ module mgxs_header end if ! Get the multiplication matrix + ! To combine from nuclidic data we need to use the final relationship + ! mult_{gg'} = sum_i(N_i*nuscatt_{i,g,g'}) / + ! sum_i(N_i*(nuscatt_{i,g,g'} / mult_{i,g,g'})) + ! Developed as follows: + ! mult_{gg'} = nuScatt{g,g'} / Scatt{g,g'} + ! mult_{gg'} = sum_i(N_i*nuscatt_{i,g,g'}) / sum(N_i*scatt_{i,g,g'}) + ! mult_{gg'} = sum_i(N_i*nuscatt_{i,g,g'}) / + ! sum_i(N_i*(nuscatt_{i,g,g'} / mult_{i,g,g'})) + ! nuscatt_{i,g,g'} can be reconstructed from scatter % energy and + ! scatter % scattxs do ipol = 1, n_pol do iazi = 1, n_azi do gin = 1, groups do gout = nuc % scatter(iazi,ipol) % obj % gmin(gin), & nuc % scatter(iazi,ipol) % obj % gmax(gin) - temp_mult(gout,gin,iazi,ipol) = temp_mult(gout,gin,iazi,ipol) + & - atom_density * & + nuscatt = nuc % scatter(iazi,ipol) % obj % scattxs(gin) * & + nuc % scatter(iazi,ipol) % obj % energy(gin) % data(gout) + mult_num(gout,gin,iazi,ipol) = mult_num(gout,gin,iazi,ipol) + & + atom_density * nuscatt + mult_denom(gout,gin,iazi,ipol) = mult_denom(gout,gin,iazi,ipol) + & + atom_density * nuscatt / & nuc % scatter(iazi,ipol) % obj % mult(gin) % data(gout) end do end do @@ -1674,6 +1721,21 @@ module mgxs_header end select end do + ! Obtain temp_mult + do ipol = 1, n_pol + do iazi = 1, n_azi + do gin = 1, groups + do gout = 1, groups + if (mult_denom(gout,gin,iazi,ipol) > ZERO) then + temp_mult(gout,gin,iazi,ipol) = mult_num(gout,gin,iazi,ipol) / mult_denom(gout,gin,iazi,ipol) + else + temp_mult(gout,gin,iazi,ipol) = ONE + end if + end do + end do + end do + end do + ! Initialize the ScattData Object do ipol = 1, n_pol do iazi = 1, n_azi From 2220fb02a7e65d2d03f16d5bbfce6233a24b1259 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Tue, 3 May 2016 04:40:59 -0400 Subject: [PATCH 478/650] Added zaid and awr data to summary so that openmc.mgxs.Library can access that information and pass it forward to the outputted microscopic library. --- openmc/mgxs/library.py | 5 +++++ openmc/mgxs_library.py | 36 ++++++++++++++++++++++++++++++++++ openmc/summary.py | 16 +++++++++++++-- src/summary.F90 | 44 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 99 insertions(+), 2 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 1e9156ce58..0ceb154b89 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -410,6 +410,7 @@ class Library(object): self._sp_filename = statepoint._f.filename self._openmc_geometry = statepoint.summary.openmc_geometry + self._nuclides = statepoint.summary.nuclides if statepoint.run_mode == 'k-eigenvalue': self._keff = statepoint.k_combined[0] @@ -872,6 +873,10 @@ class Library(object): name += '.' + xs_ids[i] xsdata = openmc.XSdata(name, self.energy_groups) xsdata.order = order + print(self._nuclides) + print(nuclide) + xsdata.zaid = self._nuclides[nuclide][0] + xsdata.awr = self._nuclides[nuclide][1] # Now get xs data itself if 'total' in self.mgxs_types: diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index ef12c6c8ab..9f16888c1f 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -204,6 +204,8 @@ class XSdata(object): self._energy_groups = energy_groups self._representation = representation self._alias = None + self._zaid = None + self._awr = None self._kT = None self._fissionable = False self._scatt_type = 'legendre' @@ -237,6 +239,14 @@ class XSdata(object): def alias(self): return self._alias + @property + def zaid(self): + return self._zaid + + @property + def awr(self): + return self._awr + @property def kT(self): return self._kT @@ -334,6 +344,20 @@ class XSdata(object): else: self._alias = self._name + @zaid.setter + def zaid(self, zaid): + # Check type and value + check_type("zaid", zaid, Integral) + check_greater_than("zaid", zaid, 0, equality=False) + self._zaid = zaid + + @awr.setter + def awr(self, awr): + # Check validity of type and that the awr value is > 0 + check_type("awr", awr, Real) + check_greater_than("awr", awr, 0.0, equality=False) + self._awr = awr + @kT.setter def kT(self, kT): # Check validity of type and that the kT value is >= 0 @@ -1092,6 +1116,18 @@ class XSdata(object): subelement = ET.SubElement(element, 'kT') subelement.text = str(self._kT) + if self._zaid is not None: + subelement = ET.SubElement(element, 'zaid') + subelement.text = str(self._zaid) + + if self._awr is not None: + subelement = ET.SubElement(element, 'awr') + subelement.text = str(self._awr) + + if self._kT is not None: + subelement = ET.SubElement(element, 'kT') + subelement.text = str(self._kT) + if self._fissionable is not None: subelement = ET.SubElement(element, 'fissionable') subelement.text = str(self._fissionable) diff --git a/openmc/summary.py b/openmc/summary.py index 9b1c451f39..f33397d724 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -38,6 +38,7 @@ class Summary(object): self._opencg_geometry = None self._read_metadata() + self._read_nuclides() self._read_geometry() self._read_tallies() @@ -55,8 +56,8 @@ class Summary(object): def _read_metadata(self): # Read OpenMC version self.version = [self._f['version_major'].value, - self._f['version_minor'].value, - self._f['version_release'].value] + self._f['version_minor'].value, + self._f['version_release'].value] # Read date and time self.date_and_time = self._f['date_and_time'][...] @@ -70,6 +71,17 @@ class Summary(object): self.gen_per_batch = self._f['gen_per_batch'].value self.n_procs = self._f['n_procs'].value + def _read_nuclides(self): + self.nuclides = {} + n_nuclides = self._f['nuclides/n_nuclides_total'].value + names = self._f['nuclides/names'].value + awrs = self._f['nuclides/awrs'].value + zaids = self._f['nuclides/zaids'].value + for n in range(n_nuclides): + name = names[n].decode() + name = name[:name.find('.')] + self.nuclides[name] = (zaids[n], awrs[n]) + def _read_geometry(self): # Read in and initialize the Materials and Geometry self._read_materials() diff --git a/src/summary.F90 b/src/summary.F90 index 4502058cad..9defcc92fd 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -68,6 +68,7 @@ contains "description", "Number of generations per batch") end if + call write_nuclides(file_id) call write_geometry(file_id) call write_materials(file_id) if (n_tallies > 0) then @@ -105,6 +106,49 @@ contains end subroutine write_header +!=============================================================================== +! WRITE_NUCLIDES +!=============================================================================== + + subroutine write_nuclides(file_id) + integer(HID_T), intent(in) :: file_id + integer(HID_T) :: nuclide_group + integer :: i + character(12), allocatable :: nucnames(:) + real(8), allocatable :: awrs(:) + integer, allocatable :: zaids(:) + + ! Use H5LT interface to write useful data from nuclide objects + nuclide_group = create_group(file_id, "nuclides") + call write_dataset(nuclide_group, "n_nuclides_total", n_nuclides_total) + + ! Build array of nuclide names, awrs, and zaids + allocate(nucnames(n_nuclides_total)) + allocate(awrs(n_nuclides_total)) + allocate(zaids(n_nuclides_total)) + do i = 1, n_nuclides_total + if (run_CE) then + nucnames(i) = xs_listings(nuclides(i) % listing) % alias + awrs(i) = nuclides(i) % awr + zaids(i) = nuclides(i) % zaid + else + nucnames(i) = xs_listings(nuclides_MG(i) % obj % listing) % alias + awrs(i) = nuclides_MG(i) % obj % awr + zaids(i) = nuclides_MG(i) % obj % zaid + end if + end do + + ! Write nuclide names, awrs and zaids + call write_dataset(nuclide_group, "names", nucnames) + call write_dataset(nuclide_group, "awrs", awrs) + call write_dataset(nuclide_group, "zaids", zaids) + + call close_group(nuclide_group) + + deallocate(nucnames, awrs, zaids) + + end subroutine write_nuclides + !=============================================================================== ! WRITE_GEOMETRY !=============================================================================== From 879728ea5d5b5b46c1f1b15b87357dc3acfa170c Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 3 May 2016 14:46:52 -0600 Subject: [PATCH 479/650] Add ability to expand natural elements in Python API --- openmc/data/__init__.py | 1 + openmc/data/data.py | 101 ++++++++++++++++++++++++++++++++++++++++ openmc/element.py | 21 +++++++++ openmc/material.py | 29 ++++++++++-- setup.py | 2 +- 5 files changed, 149 insertions(+), 5 deletions(-) create mode 100644 openmc/data/__init__.py create mode 100644 openmc/data/data.py diff --git a/openmc/data/__init__.py b/openmc/data/__init__.py new file mode 100644 index 0000000000..df22d8bbb4 --- /dev/null +++ b/openmc/data/__init__.py @@ -0,0 +1 @@ +from .data import * diff --git a/openmc/data/data.py b/openmc/data/data.py new file mode 100644 index 0000000000..c6dd81ba6e --- /dev/null +++ b/openmc/data/data.py @@ -0,0 +1,101 @@ +# Isotopic abundances from M. Berglund and M. E. Wieser, "Isotopic compositions +# of the elements 2009 (IUPAC Technical Report)", Pure. Appl. Chem. 83 (2), +# pp. 397--410 (2011). +natural_abundance = { + 'H-1': 0.999885, 'H-2': 0.000115, 'He-3': 1.34e-06, + 'He-4': 0.99999866, 'Li-6': 0.0759, 'Li-7': 0.9241, + 'Be-9': 1.0, 'B-10': 0.199, 'B-11': 0.801, + 'C-12': 0.9893, 'C-13': 0.0107, 'N-14': 0.99636, + 'N-15': 0.00364, 'O-16': 0.99757, 'O-17': 0.00038, + 'O-18': 0.00205, 'F-19': 1.0, 'Ne-20': 0.9048, + 'Ne-21': 0.0027, 'Ne-22': 0.0925, 'Na-23': 1.0, + 'Mg-24': 0.7899, 'Mg-25': 0.1, 'Mg-26': 0.1101, + 'Al-27': 1.0, 'Si-28': 0.92223, 'Si-29': 0.04685, + 'Si-30': 0.03092, 'P-31': 1.0, 'S-32': 0.9499, + 'S-33': 0.0075, 'S-34': 0.0425, 'S-36': 0.0001, + 'Cl-35': 0.7576, 'Cl-37': 0.2424, 'Ar-36': 0.003336, + 'Ar-38': 0.000629, 'Ar-40': 0.996035, 'K-39': 0.932581, + 'K-40': 0.000117, 'K-41': 0.067302, 'Ca-40': 0.96941, + 'Ca-42': 0.00647, 'Ca-43': 0.00135, 'Ca-44': 0.02086, + 'Ca-46': 4e-05, 'Ca-48': 0.00187, 'Sc-45': 1.0, + 'Ti-46': 0.0825, 'Ti-47': 0.0744, 'Ti-48': 0.7372, + 'Ti-49': 0.0541, 'Ti-50': 0.0518, 'V-50': 0.0025, + 'V-51': 0.9975, 'Cr-50': 0.04345, 'Cr-52': 0.83789, + 'Cr-53': 0.09501, 'Cr-54': 0.02365, 'Mn-55': 1.0, + 'Fe-54': 0.05845, 'Fe-56': 0.91754, 'Fe-57': 0.02119, + 'Fe-58': 0.00282, 'Co-59': 1.0, 'Ni-58': 0.68077, + 'Ni-60': 0.26223, 'Ni-61': 0.011399, 'Ni-62': 0.036346, + 'Ni-64': 0.009255, 'Cu-63': 0.6915, 'Cu-65': 0.3085, + 'Zn-64': 0.4917, 'Zn-66': 0.2773, 'Zn-67': 0.0404, + 'Zn-68': 0.1845, 'Zn-70': 0.0061, 'Ga-69': 0.60108, + 'Ga-71': 0.39892, 'Ge-70': 0.2057, 'Ge-72': 0.2745, + 'Ge-73': 0.0775, 'Ge-74': 0.365, 'Ge-76': 0.0773, + 'As-75': 1.0, 'Se-74': 0.0089, 'Se-76': 0.0937, + 'Se-77': 0.0763, 'Se-78': 0.2377, 'Se-80': 0.4961, + 'Se-82': 0.0873, 'Br-79': 0.5069, 'Br-81': 0.4931, + 'Kr-78': 0.00355, 'Kr-80': 0.02286, 'Kr-82': 0.11593, + 'Kr-83': 0.115, 'Kr-84': 0.56987, 'Kr-86': 0.17279, + 'Rb-85': 0.7217, 'Rb-87': 0.2783, 'Sr-84': 0.0056, + 'Sr-86': 0.0986, 'Sr-87': 0.07, 'Sr-88': 0.8258, + 'Y-89': 1.0, 'Zr-90': 0.5145, 'Zr-91': 0.1122, + 'Zr-92': 0.1715, 'Zr-94': 0.1738, 'Zr-96': 0.028, + 'Nb-93': 1.0, 'Mo-92': 0.1453, 'Mo-94': 0.0915, + 'Mo-95': 0.1584, 'Mo-96': 0.1667, 'Mo-97': 0.096, + 'Mo-98': 0.2439, 'Mo-100': 0.0982, 'Ru-96': 0.0554, + 'Ru-98': 0.0187, 'Ru-99': 0.1276, 'Ru-100': 0.126, + 'Ru-101': 0.1706, 'Ru-102': 0.3155, 'Ru-104': 0.1862, + 'Rh-103': 1.0, 'Pd-102': 0.0102, 'Pd-104': 0.1114, + 'Pd-105': 0.2233, 'Pd-106': 0.2733, 'Pd-108': 0.2646, + 'Pd-110': 0.1172, 'Ag-107': 0.51839, 'Ag-109': 0.48161, + 'Cd-106': 0.0125, 'Cd-108': 0.0089, 'Cd-110': 0.1249, + 'Cd-111': 0.128, 'Cd-112': 0.2413, 'Cd-113': 0.1222, + 'Cd-114': 0.2873, 'Cd-116': 0.0749, 'In-113': 0.0429, + 'In-115': 0.9571, 'Sn-112': 0.0097, 'Sn-114': 0.0066, + 'Sn-115': 0.0034, 'Sn-116': 0.1454, 'Sn-117': 0.0768, + 'Sn-118': 0.2422, 'Sn-119': 0.0859, 'Sn-120': 0.3258, + 'Sn-122': 0.0463, 'Sn-124': 0.0579, 'Sb-121': 0.5721, + 'Sb-123': 0.4279, 'Te-120': 0.0009, 'Te-122': 0.0255, + 'Te-123': 0.0089, 'Te-124': 0.0474, 'Te-125': 0.0707, + 'Te-126': 0.1884, 'Te-128': 0.3174, 'Te-130': 0.3408, + 'I-127': 1.0, 'Xe-124': 0.000952, 'Xe-126': 0.00089, + 'Xe-128': 0.019102, 'Xe-129': 0.264006, 'Xe-130': 0.04071, + 'Xe-131': 0.212324, 'Xe-132': 0.269086, 'Xe-134': 0.104357, + 'Xe-136': 0.088573, 'Cs-133': 1.0, 'Ba-130': 0.00106, + 'Ba-132': 0.00101, 'Ba-134': 0.02417, 'Ba-135': 0.06592, + 'Ba-136': 0.07854, 'Ba-137': 0.11232, 'Ba-138': 0.71698, + 'La-138': 0.0008881, 'La-139': 0.9991119, 'Ce-136': 0.00185, + 'Ce-138': 0.00251, 'Ce-140': 0.8845, 'Ce-142': 0.11114, + 'Pr-141': 1.0, 'Nd-142': 0.27152, 'Nd-143': 0.12174, + 'Nd-144': 0.23798, 'Nd-145': 0.08293, 'Nd-146': 0.17189, + 'Nd-148': 0.05756, 'Nd-150': 0.05638, 'Sm-144': 0.0307, + 'Sm-147': 0.1499, 'Sm-148': 0.1124, 'Sm-149': 0.1382, + 'Sm-150': 0.0738, 'Sm-152': 0.2675, 'Sm-154': 0.2275, + 'Eu-151': 0.4781, 'Eu-153': 0.5219, 'Gd-152': 0.002, + 'Gd-154': 0.0218, 'Gd-155': 0.148, 'Gd-156': 0.2047, + 'Gd-157': 0.1565, 'Gd-158': 0.2484, 'Gd-160': 0.2186, + 'Tb-159': 1.0, 'Dy-156': 0.00056, 'Dy-158': 0.00095, + 'Dy-160': 0.02329, 'Dy-161': 0.18889, 'Dy-162': 0.25475, + 'Dy-163': 0.24896, 'Dy-164': 0.2826, 'Ho-165': 1.0, + 'Er-162': 0.00139, 'Er-164': 0.01601, 'Er-166': 0.33503, + 'Er-167': 0.22869, 'Er-168': 0.26978, 'Er-170': 0.1491, + 'Tm-169': 1.0, 'Yb-168': 0.00123, 'Yb-170': 0.02982, + 'Yb-171': 0.1409, 'Yb-172': 0.2168, 'Yb-173': 0.16103, + 'Yb-174': 0.32026, 'Yb-176': 0.12996, 'Lu-175': 0.97401, + 'Lu-176': 0.02599, 'Hf-174': 0.0016, 'Hf-176': 0.0526, + 'Hf-177': 0.186, 'Hf-178': 0.2728, 'Hf-179': 0.1362, + 'Hf-180': 0.3508, 'Ta-180': 0.0001201, 'Ta-181': 0.9998799, + 'W-180': 0.0012, 'W-182': 0.265, 'W-183': 0.1431, + 'W-184': 0.3064, 'W-186': 0.2843, 'Re-185': 0.374, + 'Re-187': 0.626, 'Os-184': 0.0002, 'Os-186': 0.0159, + 'Os-187': 0.0196, 'Os-188': 0.1324, 'Os-189': 0.1615, + 'Os-190': 0.2626, 'Os-192': 0.4078, 'Ir-191': 0.373, + 'Ir-193': 0.627, 'Pt-190': 0.00012, 'Pt-192': 0.00782, + 'Pt-194': 0.3286, 'Pt-195': 0.3378, 'Pt-196': 0.2521, + 'Pt-198': 0.07356, 'Au-197': 1.0, 'Hg-196': 0.0015, + 'Hg-198': 0.0997, 'Hg-199': 0.1687, 'Hg-200': 0.231, + 'Hg-201': 0.1318, 'Hg-202': 0.2986, 'Hg-204': 0.0687, + 'Tl-203': 0.2952, 'Tl-205': 0.7048, 'Pb-204': 0.014, + 'Pb-206': 0.241, 'Pb-207': 0.221, 'Pb-208': 0.524, + 'Bi-209': 1.0, 'Th-232': 1.0, 'Pa-231': 1.0, + 'U-234': 5.4e-05, 'U-235': 0.007204, 'U-238': 0.992742 +} diff --git a/openmc/element.py b/openmc/element.py index 219aafbdf6..39564add4a 100644 --- a/openmc/element.py +++ b/openmc/element.py @@ -1,6 +1,8 @@ import sys +import openmc from openmc.checkvalue import check_type +from openmc.data import natural_abundance if sys.version_info[0] >= 3: basestring = str @@ -109,3 +111,22 @@ class Element(object): raise ValueError(msg) self._scattering = scattering + + def expand(self): + """Expand natural element into its naturally-occurring isotopes. + + Returns + ------- + isotopes : list + Naturally-occurring isotopes of the element. Each item of the list + is a tuple consisting of an openmc.Nuclide instance and the natural + abundance of the isotope. + + """ + + isotopes = [] + for isotope, abundance in natural_abundance.items(): + if isotope.startswith(self.name): + nuc = openmc.Nuclide(isotope, self.xs) + isotopes.append((nuc, abundance)) + return isotopes diff --git a/openmc/material.py b/openmc/material.py index b3c2813416..c617015a39 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -10,6 +10,7 @@ if sys.version_info[0] >= 3: import openmc import openmc.checkvalue as cv from openmc.clean_xml import * +from openmc.data import natural_abundance # A static variable for auto-generated Material IDs @@ -382,7 +383,7 @@ class Material(object): if macroscopic._name == self._macroscopic.name: self._macroscopic = None - def add_element(self, element, percent, percent_type='ao'): + def add_element(self, element, percent, percent_type='ao', expand=False): """Add a natural element to the material Parameters @@ -391,8 +392,12 @@ class Material(object): Element to add percent : float Atom or weight percent - percent_type : {'ao', 'wo'} - 'ao' for atom percent and 'wo' for weight percent + percent_type : {'ao', 'wo'}, optional + 'ao' for atom percent and 'wo' for weight percent. Defaults to atom + percent. + expand : bool, optional + Whether to expand the natural element into its naturally-occurring + isotopes. Defaults to False. """ @@ -422,7 +427,15 @@ class Material(object): else: element = openmc.Element(element) - self._elements[element._name] = (element, percent, percent_type) + if expand: + if percent_type == 'wo': + raise NotImplementedError('Expanding natural element based on ' + 'weight percent is not yet supported.') + for isotope, abundance in element.expand(): + self._nuclides[isotope.name] = ( + isotope, percent*abundance, percent_type) + else: + self._elements[element.name] = (element, percent, percent_type) def remove_element(self, element): """Remove a natural element from the material @@ -491,6 +504,14 @@ class Material(object): density = nuclide_tuple[1] nuclides[nuclide._name] = (nuclide, density) + for element_name, element_tuple in self._elements.items(): + element = element_tuple[0] + density = element_tuple[1] + + # Expand natural element into isotopes + for isotope, abundance in element.expand(): + nuclides[isotope.name] = (isotope, density*abundance) + return nuclides def _get_nuclide_xml(self, nuclide, distrib=False): diff --git a/setup.py b/setup.py index e66b0b7a0f..770f280ad1 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ except ImportError: kwargs = {'name': 'openmc', 'version': '0.7.1', - 'packages': ['openmc', 'openmc.mgxs', 'openmc.stats'], + 'packages': ['openmc', 'openmc.data', 'openmc.mgxs', 'openmc.stats'], 'scripts': glob.glob('scripts/openmc-*'), # Metadata From 7eae7a629d5599f5f157ebf28aa6f9faf89583ba Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 4 May 2016 11:32:23 -0600 Subject: [PATCH 480/650] Add nuclides and elements properties on openmc.Material --- openmc/material.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/openmc/material.py b/openmc/material.py index c617015a39..ff690aa9ac 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -50,6 +50,14 @@ class Material(object): Units used for `density`. Can be one of 'g/cm3', 'g/cc', 'kg/cm3', 'atom/b-cm', 'atom/cm3', 'sum', or 'macro'. The 'macro' unit only applies in the case of a multi-group calculation. + elements : collections.OrderedDict + Dictionary whose keys are element names and values are 3-tuples + consisting of an :class:`openmc.Element` instance, the percent density, + and the percent type (atom or weight fraction). + nuclides : collections.OrderedDict + Dictionary whose keys are nuclide names and values are 3-tuples + consisting of an :class:`openmc.Nuclide` instance, the percent density, + and the percent type (atom or weight fraction). """ @@ -187,6 +195,14 @@ class Material(object): def density_units(self): return self._density_units + @property + def elements(self): + return self._elements + + @property + def nuclides(self): + return self._nuclides + @property def convert_to_distrib_comps(self): return self._convert_to_distrib_comps From 179e9ab147e505563d118ed58096b3d225160ffa Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Thu, 5 May 2016 20:08:42 -0400 Subject: [PATCH 481/650] Added ability to use transport-corrected x/s and cleaned up some comments --- openmc/mgxs/library.py | 144 +++++++++++++++++++++++++++++------------ openmc/mgxs_library.py | 5 +- 2 files changed, 106 insertions(+), 43 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 0ceb154b89..34221f707c 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -722,8 +722,9 @@ class Library(object): return pickle.load(open(full_filename, 'rb')) def write_mg_library(self, xs_type='macro', domain_names=None, xs_ids=None, - filename='mg_cross_sections', directory='./'): - """Create a cross-section data library file for the Multi-Group + filename='mg_cross_sections', directory='./', + return_names=True): + """Creates a cross-section data library file for the Multi-Group mode of OpenMC. Parameters @@ -744,6 +745,23 @@ class Library(object): directory : str Directory for the pickle file. Defaults to './' (the current working directory). + return_names : bool + Flag to indicate if the user would like the names of the + materials generated by this function returned with completion. + Defaults to True. + + Returns + ------- + mat_names : Iterable of str + Iterable of material names generated during this routine and + applies to the cross section library. Note this is returned if + the return_names parameter is provided. + + Raises + ------ + ValueError + When the Library object is initialized with insufficient types of + cross sections for the Library. See also -------- @@ -751,14 +769,8 @@ class Library(object): """ - # Check data types provided - + # Check the provided parameters cv.check_value('xs_type', xs_type, ['macro', 'micro']) - # Construct the collection of the nuclides to report - if self.by_nuclide: - nuclides = self.all_mgxs[1][self.mgxs_types[-1]].get_all_nuclides() - else: - xs_type = 'macro' if domain_names is not None: cv.check_iterable_type('domain_names', filename, basestring) if xs_ids is not None: @@ -769,14 +781,19 @@ class Library(object): else: cv.check_iterable_type('xs_ids', xs_ids, basestring) else: - xs_ids = ['1g'] + xs_ids = ['1g' for i in range(len(self.domains))] cv.check_type('filename', filename, basestring) cv.check_type('directory', directory, basestring) - # Make directory if it does not exist + # Construct the collection of the nuclides to report + if self.by_nuclide: + nuclides = self.all_mgxs[1][self.mgxs_types[-1]].get_all_nuclides() + else: + xs_type = 'macro' + + # Make directory if it does not exist and build our filename if not os.path.exists(directory): os.makedirs(directory) - full_filename = os.path.join(directory, filename + '.xml') full_filename = full_filename.replace(' ', '-') @@ -784,12 +801,15 @@ class Library(object): mgxs_file = openmc.MGXSLibrary(self.energy_groups) # Set the scattering order as isotropic until - # support for higher orders are included + # support for higher orders are included in openmc.mgxs order = 0 # Build XSdata objects xsdatas = [] + + mat_names = {} for i in range(len(self.domains)): + id = self.domains[i].id if not self.by_nuclide: # Build & add metadata to XSdata object @@ -802,32 +822,46 @@ class Library(object): xsdata = openmc.XSdata(name, self.energy_groups) xsdata.order = order + mat_names[id] = name + # Now get xs data itself - if 'total' in self.mgxs_types: + if 'transport' in self.mgxs_types: + if self.correction == 'P0': + xsdata.set_total(self.all_mgxs[id]['transport'], + xs_type=xs_type, subdomains=(id,)) + else: + msg = "The use of a transport cross section " + \ + "requires the correction attribute to be" + \ + "set to 'P0' to produce valid cross " + \ + "section libraries" + raise ValueError(msg) + elif 'total' in self.mgxs_types: xsdata.set_total(self.all_mgxs[id]['total'], - xs_type=xs_type, subdomains=(i + 1,)) + xs_type=xs_type, subdomains=(id,)) if 'absorption' in self.mgxs_types: xsdata.set_absorption(self.all_mgxs[id]['absorption'], - xs_type=xs_type, subdomains=(i + 1,)) + xs_type=xs_type, + subdomains=(id,)) if 'fission' in self.mgxs_types: xsdata.set_fission(self.all_mgxs[id]['fission'], - xs_type=xs_type, subdomains=(i + 1,)) + xs_type=xs_type, subdomains=(id,)) if 'kappa-fission' in self.mgxs_types: xsdata.set_k_fission(self.all_mgxs[id]['kappa-fission'], - xs_type=xs_type, subdomains=(i + 1,)) + xs_type=xs_type, subdomains=(id,)) if 'chi' in self.mgxs_types: xsdata.set_chi(self.all_mgxs[id]['chi'], - xs_type=xs_type, subdomains=(i + 1,)) + xs_type=xs_type, subdomains=(id,)) if 'nu-fission' in self.mgxs_types: xsdata.set_nu_fission(self.all_mgxs[id]['nu-fission'], - xs_type=xs_type, subdomains=(i + 1,)) + xs_type=xs_type, + subdomains=(id,)) # multiplicity requires scatter and nu-scatter if ((('scatter matrix' in self.mgxs_types) and ('nu-scatter matrix' in self.mgxs_types))): xsdata.set_multiplicity( self.all_mgxs[id]['nu-scatter matrix'], self.all_mgxs[id]['scatter matrix'], - xs_type=xs_type, subdomains=(i + 1,)) + xs_type=xs_type, subdomains=(id,)) xsdata.multiplicity = np.nan_to_num(xsdata.multiplicity) using_multiplicity = True else: @@ -836,21 +870,29 @@ class Library(object): if using_multiplicity: xsdata.set_scatter(self.all_mgxs[id]['nu-scatter matrix'], xs_type=xs_type, - subdomains=(i + 1,)) + subdomains=(id,)) else: if 'nu-scatter matrix' in self.mgxs_types: xsdata.set_scatter( self.all_mgxs[id]['nu-scatter matrix'], - xs_type=xs_type, subdomains=(i + 1,)) + xs_type=xs_type, subdomains=(id,)) # Since we are not using multiplicity, then # scattering multiplication (nu-scatter) must be # accounted for approximately by using an adjusted # absorption cross section. - if self.total is not None: + # We can not do this with a transport x/s so check + # for that. + if 'total' in self.mgxs_types: xsdata.absorption = \ np.subtract(xsdata.total, np.sum(xsdata.scatter[0, :, :], axis=1)) + else: + msg = "Absorption cross section must be " + \ + "provided if using a transport cross" + \ + " section and while not providing a " + \ + "scattering matrix" + raise ValueError(msg) else: msg = "No nu-scatter matrix data was provided. " + \ "This means neutron balance cannot be " + \ @@ -859,10 +901,11 @@ class Library(object): warn(msg) xsdata.set_scatter(self.all_mgxs[id]['scatter matrix'], xs_type=xs_type, - subdomains=(i + 1,)) + subdomains=(id,)) xsdatas.append(xsdata) else: + mat_names[id] = {} for nuclide in nuclides: # Build & add metadata to XSdata object if domain_names is None: @@ -871,41 +914,53 @@ class Library(object): name = domain_names[i] name += '_' + nuclide name += '.' + xs_ids[i] + + mat_names[id][nuclide] = name + xsdata = openmc.XSdata(name, self.energy_groups) xsdata.order = order - print(self._nuclides) - print(nuclide) xsdata.zaid = self._nuclides[nuclide][0] - xsdata.awr = self._nuclides[nuclide][1] + xsdata.awr = self._nuclides[nuclide][1] # Now get xs data itself - if 'total' in self.mgxs_types: + if 'transport' in self.mgxs_types: + if self.correction == 'P0': + xsdata.set_total(self.all_mgxs[id]['transport'], + xs_type=xs_type, subdomains=(id,), + nuclides=[nuclide]) + else: + msg = "The use of a transport cross section " + \ + "requires the correction attribute to be" + \ + "set to 'P0' to produce valid cross " + \ + "section libraries" + raise ValueError(msg) + elif 'total' in self.mgxs_types: xsdata.set_total(self.all_mgxs[id]['total'], - xs_type=xs_type, subdomains=(i + 1,), + xs_type=xs_type, subdomains=(id,), nuclides=[nuclide]) if 'absorption' in self.mgxs_types: xsdata.set_absorption(self.all_mgxs[id]['absorption'], xs_type=xs_type, - subdomains=(i + 1,), + subdomains=(id,), nuclides=[nuclide]) if 'fission' in self.mgxs_types: xsdata.set_fission(self.all_mgxs[id]['fission'], xs_type=xs_type, - subdomains=(i + 1,), + subdomains=(id,), nuclides=[nuclide]) if 'kappa-fission' in self.mgxs_types: xsdata.set_k_fission( self.all_mgxs[id]['kappa-fission'], - xs_type=xs_type, subdomains=(i + 1,), + xs_type=xs_type, subdomains=(id,), nuclides=[nuclide]) if 'chi' in self.mgxs_types: xsdata.set_chi(self.all_mgxs[id]['chi'], - xs_type=xs_type, subdomains=(i + 1,), + xs_type=xs_type, subdomains=(id,), nuclides=[nuclide]) if 'nu-fission' in self.mgxs_types: xsdata.set_nu_fission(self.all_mgxs[id]['nu-fission'], xs_type=xs_type, - subdomains=(i + 1,), + subdomains=(id,), nuclides=[nuclide]) # multiplicity requires scatter and nu-scatter if ((('scatter matrix' in self.mgxs_types) and @@ -913,7 +968,7 @@ class Library(object): xsdata.set_multiplicity( self.all_mgxs[id]['nu-scatter matrix'], self.all_mgxs[id]['scatter matrix'], - xs_type=xs_type, subdomains=(i + 1,), + xs_type=xs_type, subdomains=(id,), nuclides=[nuclide]) xsdata.multiplicity = \ np.nan_to_num(xsdata.multiplicity) @@ -924,23 +979,29 @@ class Library(object): if using_multiplicity: xsdata.set_scatter( self.all_mgxs[id]['nu-scatter matrix'], - xs_type=xs_type, subdomains=(i + 1,), + xs_type=xs_type, subdomains=(id,), nuclides=[nuclide]) else: if 'nu-scatter matrix' in self.mgxs_types: xsdata.set_scatter( self.all_mgxs[id]['nu-scatter matrix'], - xs_type=xs_type, subdomains=(i + 1,), + xs_type=xs_type, subdomains=(id,), nuclides=[nuclide]) # Since we are not using multiplicity, then # scattering multiplication (nu-scatter) must be # accounted for approximately by using an adjusted # absorption cross section. - if self.total is not None: + if 'total' in self.mgxs_types: xsdata.absorption = \ np.subtract(xsdata.total, np.sum(xsdata.scatter[0, :, :], axis=1)) + else: + msg = "Absorption cross section must be " + \ + "provided if using a transport cross" + \ + " section and while not providing a " + \ + "scattering matrix" + raise ValueError(msg) else: msg = "No nu-scatter matrix data was provided. " +\ "This means neutron balance cannot be " + \ @@ -950,7 +1011,7 @@ class Library(object): xsdata.set_scatter( self.all_mgxs[id]['scatter matrix'], xs_type=xs_type, - subdomains=(i + 1,), + subdomains=(id,), nuclides=[nuclide]) xsdatas.append(xsdata) @@ -961,4 +1022,5 @@ class Library(object): # Finally, write the file mgxs_file.export_to_xml(full_filename) - + if return_names: + return mat_names diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 9f16888c1f..bae23b0bc6 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -602,10 +602,11 @@ class XSdata(object): self._fissionable = True def set_total(self, total, **kwargs): - if isinstance(total, openmc.mgxs.TotalXS): + if (isinstance(total, openmc.mgxs.TotalXS) or + isinstance(total, openmc.mgxs.TransportXS)): # Make sure passed MGXS object contains correct group structure if self.energy_groups != total.energy_groups: - msg = 'Group structure of provided TotalXS does not match' \ + msg = 'Group structure of provided data does not match' \ ' group structure of XSdata object' raise ValueError(msg) # Get openmc.mgxs.get_xs() arguments from kwargs From ff198abf3a704767f8195e002b8b5a4e6c2b4f04 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 2 May 2016 10:41:45 -0600 Subject: [PATCH 482/650] Improve constructors for Universe and Cell --- openmc/cell.py | 11 ++++++++++- openmc/universe.py | 10 ++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/openmc/cell.py b/openmc/cell.py index ed1f3178bf..37828d8fce 100644 --- a/openmc/cell.py +++ b/openmc/cell.py @@ -33,6 +33,10 @@ class Cell(object): automatically be assigned. name : str, optional Name of the cell. If not specified, the name is the empty string. + fill : openmc.Material or openmc.Universe or openmc.Lattice or 'void' or iterable of openmc.Material, optional + Indicates what the region of space is filled with + region : openmc.Region, optional + Region of space that is assigned to the cell. Attributes ---------- @@ -58,7 +62,7 @@ class Cell(object): """ - def __init__(self, cell_id=None, name=''): + def __init__(self, cell_id=None, name='', fill=None, region=None): # Initialize Cell class attributes self.id = cell_id self.name = name @@ -70,6 +74,11 @@ class Cell(object): self._offsets = None self._distribcell_index = None + if fill is not None: + self.fill = fill + if region is not None: + self.region = region + def __eq__(self, other): if not isinstance(other, Cell): return False diff --git a/openmc/universe.py b/openmc/universe.py index eb6d13233a..8834eaa526 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -36,6 +36,8 @@ class Universe(object): automatically be assigned name : str, optional Name of the universe. If not specified, the name is the empty string. + cells : Iterable of openmc.Cell + Cells to add to the universe Attributes ---------- @@ -49,7 +51,7 @@ class Universe(object): """ - def __init__(self, universe_id=None, name=''): + def __init__(self, universe_id=None, name='', cells=None): # Initialize Cell class attributes self.id = universe_id self.name = name @@ -61,7 +63,9 @@ class Universe(object): # Keys - Cell IDs # Values - Offsets self._cell_offsets = OrderedDict() - self._num_regions = 0 + + if cells is not None: + self.add_cells(cells) def __eq__(self, other): if not isinstance(other, Universe): @@ -87,8 +91,6 @@ class Universe(object): string += '{0: <16}{1}{2}\n'.format('\tName', '=\t', self._name) string += '{0: <16}{1}{2}\n'.format('\tCells', '=\t', list(self._cells.keys())) - string += '{0: <16}{1}{2}\n'.format('\t# Regions', '=\t', - self._num_regions) return string @property From 744ed3c5f81712416a6144b5a7f598475dc17682 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 2 May 2016 10:42:53 -0600 Subject: [PATCH 483/650] Fix up docstrings for Lattice and its subclasses --- openmc/lattice.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/openmc/lattice.py b/openmc/lattice.py index baccbad909..f1e7759201 100644 --- a/openmc/lattice.py +++ b/openmc/lattice.py @@ -32,11 +32,11 @@ class Lattice(object): Name of the lattice pitch : float Pitch of the lattice in cm - outer : int - The unique identifier of a universe to fill all space outside the - lattice - universes : numpy.ndarray of openmc.Universe - An array of universes filling each element of the lattice + outer : openmc.Universe + A universe to fill all space outside the lattice + universes : Iterable of Iterable of openmc.Universe + A two- or three-dimensional list/array of universes filling each element + of the lattice """ @@ -259,6 +259,13 @@ class RectLattice(Lattice): lower_left : Iterable of float The coordinates of the lower-left corner of the lattice. If the lattice is two-dimensional, only the x- and y-coordinates are specified. + pitch : float + Pitch of the lattice in cm + outer : openmc.Universe + A universe to fill all space outside the lattice + universes : Iterable of Iterable of openmc.Universe + A two- or three-dimensional list/array of universes filling each element + of the lattice """ @@ -505,6 +512,13 @@ class HexLattice(Lattice): center : Iterable of float Coordinates of the center of the lattice. If the lattice does not have axial sections then only the x- and y-coordinates are specified + pitch : float + Pitch of the lattice in cm + outer : openmc.Universe + A universe to fill all space outside the lattice + universes : Iterable of Iterable of openmc.Universe + A two- or three-dimensional list/array of universes filling each element + of the lattice """ From e1a1e081fd7e84c38ed74e1a96f4b02484a056c1 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 2 May 2016 10:50:56 -0600 Subject: [PATCH 484/650] Automatically link summary.h5 by default when present --- openmc/statepoint.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 7b75ac767b..6c8af88a7c 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -1,5 +1,6 @@ import sys import re +import os import numpy as np import openmc @@ -14,6 +15,14 @@ class StatePoint(object): of a given batch). Statepoints can be used to analyze tally results as well as restart a simulation. + Parameters + ---------- + filename : str + Path to file to load + autolink : bool, optional + Whether to automatically link in metadata from a summary.h5 + file. Defaults to True. + Attributes ---------- cmfd_on : bool @@ -93,7 +102,7 @@ class StatePoint(object): """ - def __init__(self, filename): + def __init__(self, filename, autolink=True): import h5py self._f = h5py.File(filename, 'r') @@ -116,10 +125,17 @@ class StatePoint(object): # Set flags for what data has been read self._meshes_read = False self._tallies_read = False - self._summary = False + self._summary = None self._global_tallies = None self._sparse = False + # Automatically link in a summary file if one exists + if autolink: + path_summary = os.path.join(os.path.dirname(filename), 'summary.h5') + if os.path.exists(path_summary): + su = openmc.Summary(path_summary) + self.link_with_summary(su) + def close(self): self._f.close() @@ -606,12 +622,17 @@ class StatePoint(object): Raises ------ + RuntimeError + If a Summary object has already been linked. ValueError An error when the argument passed to the 'summary' parameter is not an openmc.Summary object. """ + if self.summary is not None: + raise RuntimeError('A Summary object has already been linked.') + if not isinstance(summary, openmc.summary.Summary): msg = 'Unable to link statepoint with "{0}" which ' \ 'is not a Summary object'.format(summary) From 6558fd8a34032e143a34b9ffdcf06e9acb4ee0a7 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 3 May 2016 10:44:16 -0600 Subject: [PATCH 485/650] Fix reading hexagonal lattices in Summary --- openmc/summary.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openmc/summary.py b/openmc/summary.py index 9b1c451f39..ea13284bd7 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -378,11 +378,11 @@ class Summary(object): self.lattices[index] = lattice if lattice_type == 'hexagonal': - n_rings = self._f['geometry/lattices'][key]['n_rings'][0] - n_axial = self._f['geometry/lattices'][key]['n_axial'][0] + n_rings = self._f['geometry/lattices'][key]['n_rings'].value + n_axial = self._f['geometry/lattices'][key]['n_axial'].value center = self._f['geometry/lattices'][key]['center'][...] pitch = self._f['geometry/lattices'][key]['pitch'][...] - outer = self._f['geometry/lattices'][key]['outer'][0] + outer = self._f['geometry/lattices'][key]['outer'].value universe_ids = self._f[ 'geometry/lattices'][key]['universes'][...] From 5947bbefd2f833b03dfb78453cee296810a9ee4f Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 4 May 2016 14:09:12 -0600 Subject: [PATCH 486/650] Don't read eigenvalue-related data in summary.h5 if fixed source --- openmc/summary.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/openmc/summary.py b/openmc/summary.py index ea13284bd7..34c51bc51e 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -65,9 +65,10 @@ class Summary(object): self.n_batches = self._f['n_batches'].value self.n_particles = self._f['n_particles'].value - self.n_active = self._f['n_active'].value - self.n_inactive = self._f['n_inactive'].value - self.gen_per_batch = self._f['gen_per_batch'].value + if 'n_inactive' in self._f: + self.n_active = self._f['n_active'].value + self.n_inactive = self._f['n_inactive'].value + self.gen_per_batch = self._f['gen_per_batch'].value self.n_procs = self._f['n_procs'].value def _read_geometry(self): From 049b04d99595b4115ce3170dc7c83bec426423f6 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 5 May 2016 13:40:34 -0600 Subject: [PATCH 487/650] Fix tests which autolink summary metadata now --- tests/test_asymmetric_lattice/test_asymmetric_lattice.py | 9 ++------- .../test_mgxs_library_condense.py | 5 ----- .../test_mgxs_library_distribcell.py | 5 ----- tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py | 5 ----- .../test_mgxs_library_no_nuclides.py | 5 ----- .../test_mgxs_library_nuclides.py | 5 ----- tests/test_tally_aggregation/test_tally_aggregation.py | 5 ----- tests/test_tally_arithmetic/test_tally_arithmetic.py | 5 ----- tests/test_tally_slice_merge/test_tally_slice_merge.py | 5 ----- 9 files changed, 2 insertions(+), 47 deletions(-) diff --git a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py index 03e55d32f9..504cc4746b 100644 --- a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py +++ b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py @@ -82,11 +82,6 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] sp = openmc.StatePoint(statepoint) - # Read the summary file - summary = glob.glob(os.path.join(os.getcwd(), 'summary.h5'))[0] - su = openmc.Summary(summary) - sp.link_with_summary(su) - # Extract the tally of interest tally = sp.get_tally(name='distribcell tally') @@ -96,8 +91,8 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): outstr += ', '.join(map(str, tally.std_dev.flatten())) + '\n' # Extract fuel assembly lattices from the summary - core = su.get_cell_by_id(1) - fuel = su.get_cell_by_id(80) + core = sp.summary.get_cell_by_id(1) + fuel = sp.summary.get_cell_by_id(80) fuel = fuel.fill core = core.fill diff --git a/tests/test_mgxs_library_condense/test_mgxs_library_condense.py b/tests/test_mgxs_library_condense/test_mgxs_library_condense.py index 97bb853b62..3ca98904fb 100644 --- a/tests/test_mgxs_library_condense/test_mgxs_library_condense.py +++ b/tests/test_mgxs_library_condense/test_mgxs_library_condense.py @@ -43,11 +43,6 @@ class MGXSTestHarness(PyAPITestHarness): statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] sp = openmc.StatePoint(statepoint) - # Read the summary file. - summary = glob.glob(os.path.join(os.getcwd(), 'summary.h5'))[0] - su = openmc.Summary(summary) - sp.link_with_summary(su) - # Load the MGXS library from the statepoint self.mgxs_lib.load_from_statepoint(sp) diff --git a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py index 6812661860..d488e8ec97 100644 --- a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py +++ b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py @@ -46,11 +46,6 @@ class MGXSTestHarness(PyAPITestHarness): statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] sp = openmc.StatePoint(statepoint) - # Read the summary file. - summary = glob.glob(os.path.join(os.getcwd(), 'summary.h5'))[0] - su = openmc.Summary(summary) - sp.link_with_summary(su) - # Load the MGXS library from the statepoint self.mgxs_lib.load_from_statepoint(sp) diff --git a/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py b/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py index 30be46b4cc..91bb036e34 100644 --- a/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py +++ b/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py @@ -44,11 +44,6 @@ class MGXSTestHarness(PyAPITestHarness): statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] sp = openmc.StatePoint(statepoint) - # Read the summary file. - summary = glob.glob(os.path.join(os.getcwd(), 'summary.h5'))[0] - su = openmc.Summary(summary) - sp.link_with_summary(su) - # Load the MGXS library from the statepoint self.mgxs_lib.load_from_statepoint(sp) diff --git a/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py b/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py index 381b5b87c2..15f90cb872 100644 --- a/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py +++ b/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py @@ -43,11 +43,6 @@ class MGXSTestHarness(PyAPITestHarness): statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] sp = openmc.StatePoint(statepoint) - # Read the summary file. - summary = glob.glob(os.path.join(os.getcwd(), 'summary.h5'))[0] - su = openmc.Summary(summary) - sp.link_with_summary(su) - # Load the MGXS library from the statepoint self.mgxs_lib.load_from_statepoint(sp) diff --git a/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py b/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py index c3e4f5f770..113f2aa413 100644 --- a/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py +++ b/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py @@ -43,11 +43,6 @@ class MGXSTestHarness(PyAPITestHarness): statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] sp = openmc.StatePoint(statepoint) - # Read the summary file. - summary = glob.glob(os.path.join(os.getcwd(), 'summary.h5'))[0] - su = openmc.Summary(summary) - sp.link_with_summary(su) - # Load the MGXS library from the statepoint self.mgxs_lib.load_from_statepoint(sp) diff --git a/tests/test_tally_aggregation/test_tally_aggregation.py b/tests/test_tally_aggregation/test_tally_aggregation.py index 359afbe347..fdc086e682 100644 --- a/tests/test_tally_aggregation/test_tally_aggregation.py +++ b/tests/test_tally_aggregation/test_tally_aggregation.py @@ -43,11 +43,6 @@ class TallyAggregationTestHarness(PyAPITestHarness): statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] sp = openmc.StatePoint(statepoint) - # Read the summary file. - summary = glob.glob(os.path.join(os.getcwd(), 'summary.h5'))[0] - su = openmc.Summary(summary) - sp.link_with_summary(su) - # Extract the tally of interest tally = sp.get_tally(name='distribcell tally') diff --git a/tests/test_tally_arithmetic/test_tally_arithmetic.py b/tests/test_tally_arithmetic/test_tally_arithmetic.py index 8e2d2b3491..a5919909f3 100644 --- a/tests/test_tally_arithmetic/test_tally_arithmetic.py +++ b/tests/test_tally_arithmetic/test_tally_arithmetic.py @@ -62,11 +62,6 @@ class TallyArithmeticTestHarness(PyAPITestHarness): statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] sp = openmc.StatePoint(statepoint) - # Read the summary file. - summary = glob.glob(os.path.join(os.getcwd(), 'summary.h5'))[0] - su = openmc.Summary(summary) - sp.link_with_summary(su) - # Load the tallies tally_1 = sp.get_tally(name='tally 1') tally_2 = sp.get_tally(name='tally 2') diff --git a/tests/test_tally_slice_merge/test_tally_slice_merge.py b/tests/test_tally_slice_merge/test_tally_slice_merge.py index 85dd532c61..4dbb993d59 100644 --- a/tests/test_tally_slice_merge/test_tally_slice_merge.py +++ b/tests/test_tally_slice_merge/test_tally_slice_merge.py @@ -83,11 +83,6 @@ class TallySliceMergeTestHarness(PyAPITestHarness): statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] sp = openmc.StatePoint(statepoint) - # Read the summary file. - summary = glob.glob(os.path.join(os.getcwd(), 'summary.h5'))[0] - su = openmc.Summary(summary) - sp.link_with_summary(su) - # Extract the cell tally tallies = [sp.get_tally(name='cell tally')] From 8923e1b8f2731cd21b66088c79916fa1c6ef3ad0 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 5 May 2016 15:14:26 -0600 Subject: [PATCH 488/650] Update Jupyter notebook examples --- .../pythonapi/examples/mgxs-part-i.ipynb | 124 ++- .../pythonapi/examples/mgxs-part-ii.ipynb | 690 ++++++++--------- .../pythonapi/examples/mgxs-part-iii.ipynb | 206 +++-- .../examples/pandas-dataframes.ipynb | 721 +++++++++--------- .../pythonapi/examples/post-processing.ipynb | 75 +- .../pythonapi/examples/tally-arithmetic.ipynb | 161 ++-- src/output.F90 | 2 +- 7 files changed, 927 insertions(+), 1052 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index a450af97ec..610e82ec1d 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -417,24 +417,22 @@ "data": { "text/plain": [ "OrderedDict([('flux', Tally\n", - "\tID =\t10000\n", - "\tName =\t\n", - "\tFilters =\t\n", - " \t\tcell\t[1]\n", - " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", - "\tNuclides =\ttotal \n", - "\tScores =\t['flux']\n", - "\tEstimator =\ttracklength\n", - "), ('absorption', Tally\n", - "\tID =\t10001\n", - "\tName =\t\n", - "\tFilters =\t\n", - " \t\tcell\t[1]\n", - " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", - "\tNuclides =\ttotal \n", - "\tScores =\t['absorption']\n", - "\tEstimator =\ttracklength\n", - ")])" + " \tID =\t10000\n", + " \tName =\t\n", + " \tFilters =\t\n", + " \t\tcell\t[1]\n", + " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", + " \tNuclides =\ttotal \n", + " \tScores =\t['flux']\n", + " \tEstimator =\ttracklength), ('absorption', Tally\n", + " \tID =\t10001\n", + " \tName =\t\n", + " \tFilters =\t\n", + " \t\tcell\t[1]\n", + " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", + " \tNuclides =\ttotal \n", + " \tScores =\t['absorption']\n", + " \tEstimator =\ttracklength)])" ] }, "execution_count": 13, @@ -508,12 +506,11 @@ " 888\n", " 888\n", "\n", - " Copyright: 2011-2015 Massachusetts Institute of Technology\n", - " License: http://mit-crpg.github.io/openmc/license.html\n", + " Copyright: 2011-2016 Massachusetts Institute of Technology\n", + " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: eeb5091ca3a34cc85df73a3318cae2b6c7097413\n", - " Date/Time: 2016-04-13 11:24:09\n", - " MPI Processes: 1\n", + " Git SHA1: df280b60eb1c6d7b7f842e05ede734a4883a0fc8\n", + " Date/Time: 2016-05-05 13:43:54\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -598,20 +595,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.6300E-01 seconds\n", - " Reading cross sections = 1.2100E-01 seconds\n", - " Total time in simulation = 1.6504E+01 seconds\n", - " Time in transport only = 1.6479E+01 seconds\n", - " Time in inactive batches = 1.9620E+00 seconds\n", - " Time in active batches = 1.4542E+01 seconds\n", - " Time synchronizing fission bank = 1.0000E-02 seconds\n", - " Sampling source sites = 4.0000E-03 seconds\n", - " SEND/RECV source sites = 3.0000E-03 seconds\n", + " Total time for initialization = 5.7300E-01 seconds\n", + " Reading cross sections = 1.7600E-01 seconds\n", + " Total time in simulation = 2.1188E+01 seconds\n", + " Time in transport only = 2.1173E+01 seconds\n", + " Time in inactive batches = 2.6880E+00 seconds\n", + " Time in active batches = 1.8500E+01 seconds\n", + " Time synchronizing fission bank = 3.0000E-03 seconds\n", + " Sampling source sites = 2.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.6977E+01 seconds\n", - " Calculation Rate (inactive) = 12742.1 neutrons/second\n", - " Calculation Rate (active) = 6876.63 neutrons/second\n", + " Total time elapsed = 2.1776E+01 seconds\n", + " Calculation Rate (inactive) = 9300.60 neutrons/second\n", + " Calculation Rate (active) = 5405.41 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -669,20 +666,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In addition to the statepoint file, our simulation also created a summary file which encapsulates information about the materials and geometry. This is necessary for the `openmc.mgxs` module to properly process the tally data. We first create a `Summary` object and link it with the statepoint." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Load the summary file and link it with the statepoint\n", - "su = openmc.Summary('summary.h5')\n", - "sp.link_with_summary(su)" + "In addition to the statepoint file, our simulation also created a summary file which encapsulates information about the materials and geometry. By default, a `Summary` object is automatically linked when a `StatePoint` is loaded. This is necessary for the `openmc.mgxs` module to properly process the tally data." ] }, { @@ -694,7 +678,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -729,7 +713,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": { "collapsed": false }, @@ -764,7 +748,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 19, "metadata": { "collapsed": false }, @@ -811,7 +795,7 @@ "0 1 2 total 1.292013 0.007642" ] }, - "execution_count": 20, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -830,7 +814,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 20, "metadata": { "collapsed": true }, @@ -848,7 +832,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 21, "metadata": { "collapsed": false }, @@ -875,7 +859,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 22, "metadata": { "collapsed": false }, @@ -932,7 +916,7 @@ "1 (((total / flux) - (absorption / flux)) - (sca... 1.44e-15 2.57e-03 " ] }, - "execution_count": 23, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -954,7 +938,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 23, "metadata": { "collapsed": false }, @@ -1011,7 +995,7 @@ "1 ((absorption / flux) / (total / flux)) 1.93e-02 9.46e-05 " ] }, - "execution_count": 24, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -1026,7 +1010,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -1083,7 +1067,7 @@ "1 ((scatter / flux) / (total / flux)) 9.81e-01 3.74e-03 " ] }, - "execution_count": 25, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -1105,7 +1089,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 25, "metadata": { "collapsed": false }, @@ -1135,7 +1119,7 @@ " 6.250000e-07\n", " total\n", " (((absorption / flux) / (total / flux)) + ((sc...\n", - " 1\n", + " 1.0\n", " 0.007763\n", " \n", " \n", @@ -1145,7 +1129,7 @@ " 2.000000e+01\n", " total\n", " (((absorption / flux) / (total / flux)) + ((sc...\n", - " 1\n", + " 1.0\n", " 0.003739\n", " \n", " \n", @@ -1162,7 +1146,7 @@ "1 (((absorption / flux) / (total / flux)) + ((sc... 1.00e+00 3.74e-03 " ] }, - "execution_count": 26, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -1178,21 +1162,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" + "pygments_lexer": "ipython3", + "version": "3.5.1" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index 793d884362..fd8d090524 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -13,7 +13,7 @@ "* The use of **[PyNE](http://pyne.io/) to plot** continuous-energy vs. multi-group cross sections\n", "* **Validation** of multi-group cross sections with **[OpenMOC](https://mit-crpg.github.io/OpenMOC/)**\n", "\n", - "**Note:** This Notebook was created using [OpenMOC](https://mit-crpg.github.io/OpenMOC/) to verify the multi-group cross-sections generated by OpenMC. In order to run this Notebook in its entirety, you must have [OpenMOC](https://mit-crpg.github.io/OpenMOC/) installed on your system, along with OpenCG to convert the OpenMC geometries into OpenMOC geometries. In addition, this Notebook illustrates the use of [Pandas](http://pandas.pydata.org/) `DataFrames` to containerize multi-group cross section data. We recommend using [Pandas](http://pandas.pydata.org/) >v0.15.0 or later since OpenMC's Python API leverages the multi-indexing feature included in the most recent releases of [Pandas](http://pandas.pydata.org/)." + "**Note:** This Notebook was created using [OpenMOC](https://mit-crpg.github.io/OpenMOC/) to verify the multi-group cross-sections generated by OpenMC. In order to run this Notebook in its entirety, you must have [OpenMOC](https://mit-crpg.github.io/OpenMOC/) installed on your system, along with OpenCG to convert the OpenMC geometries into OpenMOC geometries. In addition, this Notebook illustrates the use of [Pandas](http://pandas.pydata.org/) `DataFrames` to containerize multi-group cross section data." ] }, { @@ -34,16 +34,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.1+1178.ga40c9ec-py2.7-linux-x86_64.egg/matplotlib/__init__.py:884: UserWarning: axes.color_cycle is deprecated and replaced with axes.prop_cycle; please use the latter.\n", - " warnings.warn(self.msg_depr % (key, alt_key))\n", - "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.1+1178.ga40c9ec-py2.7-linux-x86_64.egg/matplotlib/__init__.py:1362: UserWarning: This call to matplotlib.use() has no effect\n", + "/home/romano/miniconda3/envs/default/lib/python3.5/site-packages/matplotlib/__init__.py:1350: UserWarning: This call to matplotlib.use() has no effect\n", "because the backend has already been chosen;\n", "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", "or matplotlib.backends is imported for the first time.\n", "\n", " warnings.warn(_use_error_msg)\n", - "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:9: QAWarning: pyne.rxname is not yet QA compliant.\n", - "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:9: QAWarning: pyne.ace is not yet QA compliant.\n" + "/home/romano/miniconda3/envs/default/lib/python3.5/importlib/_bootstrap.py:222: QAWarning: pyne.rxname is not yet QA compliant.\n", + " return f(*args, **kwds)\n", + "/home/romano/miniconda3/envs/default/lib/python3.5/importlib/_bootstrap.py:222: QAWarning: pyne.ace is not yet QA compliant.\n", + " return f(*args, **kwds)\n" ] } ], @@ -442,12 +442,11 @@ " 888\n", " 888\n", "\n", - " Copyright: 2011-2015 Massachusetts Institute of Technology\n", - " License: http://mit-crpg.github.io/openmc/license.html\n", + " Copyright: 2011-2016 Massachusetts Institute of Technology\n", + " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: eeb5091ca3a34cc85df73a3318cae2b6c7097413\n", - " Date/Time: 2016-04-13 11:59:39\n", - " MPI Processes: 1\n", + " Git SHA1: df280b60eb1c6d7b7f842e05ede734a4883a0fc8\n", + " Date/Time: 2016-05-05 15:00:51\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -523,7 +522,7 @@ " 48/1 1.21610 1.22612 +/- 0.00251\n", " 49/1 1.22199 1.22602 +/- 0.00245\n", " 50/1 1.20860 1.22558 +/- 0.00243\n", - " Triggers unsatisfied, max unc./thresh. is 1.25496 for flux in tally 10050\n", + " Triggers unsatisfied, max unc./thresh. is 1.25496 for flux in tally 10056\n", " The estimated number of batches is 73\n", " Creating state point statepoint.050.h5...\n", " 51/1 1.21850 1.22541 +/- 0.00237\n", @@ -549,7 +548,7 @@ " 71/1 1.19720 1.22444 +/- 0.00195\n", " 72/1 1.23770 1.22465 +/- 0.00193\n", " 73/1 1.23894 1.22488 +/- 0.00191\n", - " Triggers unsatisfied, max unc./thresh. is 1.00243 for flux in tally 10050\n", + " Triggers unsatisfied, max unc./thresh. is 1.00243 for flux in tally 10056\n", " The estimated number of batches is 74\n", " 74/1 1.22437 1.22487 +/- 0.00188\n", " Triggers satisfied for batch 74\n", @@ -562,20 +561,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.0100E-01 seconds\n", - " Reading cross sections = 8.8000E-02 seconds\n", - " Total time in simulation = 2.3897E+02 seconds\n", - " Time in transport only = 2.3892E+02 seconds\n", - " Time in inactive batches = 1.6456E+01 seconds\n", - " Time in active batches = 2.2251E+02 seconds\n", - " Time synchronizing fission bank = 1.8000E-02 seconds\n", - " Sampling source sites = 1.3000E-02 seconds\n", - " SEND/RECV source sites = 4.0000E-03 seconds\n", + " Total time for initialization = 3.8600E-01 seconds\n", + " Reading cross sections = 1.1000E-01 seconds\n", + " Total time in simulation = 2.3697E+02 seconds\n", + " Time in transport only = 2.3690E+02 seconds\n", + " Time in inactive batches = 1.5640E+01 seconds\n", + " Time in active batches = 2.2133E+02 seconds\n", + " Time synchronizing fission bank = 3.0000E-02 seconds\n", + " Sampling source sites = 1.9000E-02 seconds\n", + " SEND/RECV source sites = 1.1000E-02 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 1.2000E-02 seconds\n", - " Total time elapsed = 2.3943E+02 seconds\n", - " Calculation Rate (inactive) = 6076.81 neutrons/second\n", - " Calculation Rate (active) = 1797.66 neutrons/second\n", + " Total time for finalization = 1.0000E-02 seconds\n", + " Total time elapsed = 2.3743E+02 seconds\n", + " Calculation Rate (inactive) = 6393.86 neutrons/second\n", + " Calculation Rate (active) = 1807.26 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -629,26 +628,6 @@ "sp = openmc.StatePoint('statepoint.074.h5')" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In addition to the statepoint file, our simulation also created a summary file which encapsulates information about the materials and geometry. This is necessary for the `openmc.mgxs` module to properly process the tally data. We first create a `Summary` object and link it with the statepoint." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Load the summary file and link it with the statepoint\n", - "su = openmc.Summary('summary.h5')\n", - "sp.link_with_summary(su)" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -658,7 +637,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": { "collapsed": false }, @@ -693,7 +672,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -747,7 +726,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": { "collapsed": false }, @@ -789,7 +768,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 19, "metadata": { "collapsed": false }, @@ -919,7 +898,7 @@ "119 10002 1 5 O-16 0.000000 0.000000" ] }, - "execution_count": 20, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -939,7 +918,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 20, "metadata": { "collapsed": true }, @@ -961,7 +940,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 21, "metadata": { "collapsed": false }, @@ -1000,7 +979,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 22, "metadata": { "collapsed": false }, @@ -1083,7 +1062,7 @@ "2 10000 2 O-16 3.794859 0.011139" ] }, - "execution_count": 23, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -1109,14 +1088,14 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create an OpenMOC Geometry from the OpenCG Geometry\n", - "openmoc_geometry = get_openmoc_geometry(su.opencg_geometry)" + "openmoc_geometry = get_openmoc_geometry(sp.summary.opencg_geometry)" ] }, { @@ -1128,7 +1107,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -1173,7 +1152,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 25, "metadata": { "collapsed": false }, @@ -1187,81 +1166,81 @@ "[ NORMAL ] Iteration 0:\tk_eff = 0.574672\tres = 0.000E+00\n", "[ NORMAL ] Iteration 1:\tk_eff = 0.679815\tres = 4.253E-01\n", "[ NORMAL ] Iteration 2:\tk_eff = 0.660826\tres = 1.830E-01\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.658940\tres = 2.793E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.643012\tres = 2.853E-03\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.658941\tres = 2.793E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.643012\tres = 2.852E-03\n", "[ NORMAL ] Iteration 5:\tk_eff = 0.625810\tres = 2.417E-02\n", "[ NORMAL ] Iteration 6:\tk_eff = 0.606678\tres = 2.675E-02\n", "[ NORMAL ] Iteration 7:\tk_eff = 0.587485\tres = 3.057E-02\n", "[ NORMAL ] Iteration 8:\tk_eff = 0.569029\tres = 3.164E-02\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.551707\tres = 3.142E-02\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.551708\tres = 3.142E-02\n", "[ NORMAL ] Iteration 10:\tk_eff = 0.536035\tres = 3.044E-02\n", "[ NORMAL ] Iteration 11:\tk_eff = 0.522275\tres = 2.841E-02\n", "[ NORMAL ] Iteration 12:\tk_eff = 0.510610\tres = 2.567E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.501106\tres = 2.234E-02\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.501107\tres = 2.233E-02\n", "[ NORMAL ] Iteration 14:\tk_eff = 0.493832\tres = 1.861E-02\n", "[ NORMAL ] Iteration 15:\tk_eff = 0.488781\tres = 1.452E-02\n", "[ NORMAL ] Iteration 16:\tk_eff = 0.485924\tres = 1.023E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.485211\tres = 5.846E-03\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.486571\tres = 1.467E-03\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.489905\tres = 2.802E-03\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.495105\tres = 6.853E-03\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.485212\tres = 5.845E-03\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.486571\tres = 1.466E-03\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.489906\tres = 2.802E-03\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.495106\tres = 6.853E-03\n", "[ NORMAL ] Iteration 21:\tk_eff = 0.502056\tres = 1.061E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.510630\tres = 1.404E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.510631\tres = 1.404E-02\n", "[ NORMAL ] Iteration 23:\tk_eff = 0.520696\tres = 1.708E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.532120\tres = 1.971E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.532121\tres = 1.971E-02\n", "[ NORMAL ] Iteration 25:\tk_eff = 0.544768\tres = 2.194E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.558505\tres = 2.377E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.558506\tres = 2.377E-02\n", "[ NORMAL ] Iteration 27:\tk_eff = 0.573200\tres = 2.522E-02\n", "[ NORMAL ] Iteration 28:\tk_eff = 0.588723\tres = 2.631E-02\n", "[ NORMAL ] Iteration 29:\tk_eff = 0.604951\tres = 2.708E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.621765\tres = 2.756E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.639053\tres = 2.779E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.656709\tres = 2.780E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.621766\tres = 2.757E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.639054\tres = 2.779E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.656709\tres = 2.781E-02\n", "[ NORMAL ] Iteration 33:\tk_eff = 0.674632\tres = 2.763E-02\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.692730\tres = 2.729E-02\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.692731\tres = 2.729E-02\n", "[ NORMAL ] Iteration 35:\tk_eff = 0.710919\tres = 2.683E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.729118\tres = 2.626E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.729119\tres = 2.626E-02\n", "[ NORMAL ] Iteration 37:\tk_eff = 0.747258\tres = 2.560E-02\n", "[ NORMAL ] Iteration 38:\tk_eff = 0.765273\tres = 2.488E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.783104\tres = 2.411E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.783105\tres = 2.411E-02\n", "[ NORMAL ] Iteration 40:\tk_eff = 0.800701\tres = 2.330E-02\n", "[ NORMAL ] Iteration 41:\tk_eff = 0.818017\tres = 2.247E-02\n", "[ NORMAL ] Iteration 42:\tk_eff = 0.835012\tres = 2.163E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.851651\tres = 2.078E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.851652\tres = 2.078E-02\n", "[ NORMAL ] Iteration 44:\tk_eff = 0.867906\tres = 1.993E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.883750\tres = 1.909E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.883751\tres = 1.909E-02\n", "[ NORMAL ] Iteration 46:\tk_eff = 0.899164\tres = 1.826E-02\n", "[ NORMAL ] Iteration 47:\tk_eff = 0.914131\tres = 1.744E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.928638\tres = 1.665E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.928638\tres = 1.664E-02\n", "[ NORMAL ] Iteration 49:\tk_eff = 0.942676\tres = 1.587E-02\n", "[ NORMAL ] Iteration 50:\tk_eff = 0.956239\tres = 1.512E-02\n", "[ NORMAL ] Iteration 51:\tk_eff = 0.969323\tres = 1.439E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.981927\tres = 1.368E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.981928\tres = 1.368E-02\n", "[ NORMAL ] Iteration 53:\tk_eff = 0.994054\tres = 1.300E-02\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.005705\tres = 1.235E-02\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.016886\tres = 1.172E-02\n", + "[ NORMAL ] Iteration 54:\tk_eff = 1.005706\tres = 1.235E-02\n", + "[ NORMAL ] Iteration 55:\tk_eff = 1.016887\tres = 1.172E-02\n", "[ NORMAL ] Iteration 56:\tk_eff = 1.027604\tres = 1.112E-02\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.037866\tres = 1.054E-02\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.047682\tres = 9.987E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.057062\tres = 9.458E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.037867\tres = 1.054E-02\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.047683\tres = 9.987E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.057063\tres = 9.458E-03\n", "[ NORMAL ] Iteration 60:\tk_eff = 1.066016\tres = 8.953E-03\n", "[ NORMAL ] Iteration 61:\tk_eff = 1.074556\tres = 8.471E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.082693\tres = 8.011E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.082694\tres = 8.011E-03\n", "[ NORMAL ] Iteration 63:\tk_eff = 1.090442\tres = 7.573E-03\n", "[ NORMAL ] Iteration 64:\tk_eff = 1.097813\tres = 7.156E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.104820\tres = 6.760E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.104821\tres = 6.760E-03\n", "[ NORMAL ] Iteration 66:\tk_eff = 1.111477\tres = 6.383E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.117795\tres = 6.025E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.123789\tres = 5.685E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.129470\tres = 5.362E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.134853\tres = 5.056E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.139950\tres = 4.766E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.144772\tres = 4.491E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.117796\tres = 6.025E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.123790\tres = 5.684E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.129472\tres = 5.362E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.134854\tres = 5.056E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.139951\tres = 4.765E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.144773\tres = 4.491E-03\n", "[ NORMAL ] Iteration 73:\tk_eff = 1.149333\tres = 4.230E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.153643\tres = 3.984E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.153644\tres = 3.983E-03\n", "[ NORMAL ] Iteration 75:\tk_eff = 1.157716\tres = 3.751E-03\n", "[ NORMAL ] Iteration 76:\tk_eff = 1.161561\tres = 3.530E-03\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.165190\tres = 3.321E-03\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.165190\tres = 3.322E-03\n", "[ NORMAL ] Iteration 78:\tk_eff = 1.168613\tres = 3.124E-03\n", "[ NORMAL ] Iteration 79:\tk_eff = 1.171841\tres = 2.938E-03\n", "[ NORMAL ] Iteration 80:\tk_eff = 1.174883\tres = 2.762E-03\n", @@ -1271,82 +1250,82 @@ "[ NORMAL ] Iteration 84:\tk_eff = 1.185378\tres = 2.152E-03\n", "[ NORMAL ] Iteration 85:\tk_eff = 1.187627\tres = 2.021E-03\n", "[ NORMAL ] Iteration 86:\tk_eff = 1.189741\tres = 1.897E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.191728\tres = 1.780E-03\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.193595\tres = 1.670E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.195349\tres = 1.567E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.196996\tres = 1.469E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.198543\tres = 1.378E-03\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.199994\tres = 1.292E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.191729\tres = 1.780E-03\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.193596\tres = 1.670E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.195350\tres = 1.566E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.196997\tres = 1.470E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.198542\tres = 1.378E-03\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.199994\tres = 1.291E-03\n", "[ NORMAL ] Iteration 93:\tk_eff = 1.201355\tres = 1.211E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.202632\tres = 1.134E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.203829\tres = 1.063E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.204952\tres = 9.956E-04\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.206004\tres = 9.324E-04\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.206989\tres = 8.730E-04\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.207913\tres = 8.173E-04\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.208777\tres = 7.650E-04\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.209587\tres = 7.159E-04\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.210345\tres = 6.698E-04\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.211054\tres = 6.266E-04\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.211718\tres = 5.861E-04\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.212339\tres = 5.481E-04\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.212920\tres = 5.125E-04\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.213463\tres = 4.792E-04\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.213971\tres = 4.479E-04\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.214446\tres = 4.186E-04\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.214890\tres = 3.912E-04\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.215305\tres = 3.655E-04\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.215692\tres = 3.414E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.216055\tres = 3.189E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.216393\tres = 2.979E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.216709\tres = 2.782E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.217004\tres = 2.597E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.217279\tres = 2.425E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.217536\tres = 2.263E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.217776\tres = 2.113E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.218000\tres = 1.971E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.218209\tres = 1.840E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.218404\tres = 1.716E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.218587\tres = 1.601E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.218756\tres = 1.494E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.218915\tres = 1.393E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.219062\tres = 1.299E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.219200\tres = 1.212E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.219329\tres = 1.130E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.219448\tres = 1.054E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.219560\tres = 9.822E-05\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.219664\tres = 9.156E-05\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.219761\tres = 8.534E-05\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.219851\tres = 7.954E-05\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.219936\tres = 7.413E-05\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.220014\tres = 6.908E-05\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.220087\tres = 6.437E-05\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.220156\tres = 5.997E-05\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.220219\tres = 5.587E-05\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.220278\tres = 5.205E-05\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.220333\tres = 4.848E-05\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.220385\tres = 4.516E-05\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.220433\tres = 4.206E-05\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.220477\tres = 3.917E-05\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.220518\tres = 3.648E-05\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.220557\tres = 3.397E-05\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.220593\tres = 3.163E-05\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.220627\tres = 2.945E-05\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.220658\tres = 2.742E-05\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.220687\tres = 2.552E-05\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.220714\tres = 2.376E-05\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.220739\tres = 2.212E-05\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.220762\tres = 2.059E-05\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.220784\tres = 1.916E-05\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.220804\tres = 1.783E-05\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.220823\tres = 1.660E-05\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.220841\tres = 1.545E-05\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.220857\tres = 1.437E-05\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.220872\tres = 1.338E-05\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.220886\tres = 1.245E-05\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.220899\tres = 1.158E-05\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.220912\tres = 1.077E-05\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.220923\tres = 1.002E-05\n" + "[ NORMAL ] Iteration 94:\tk_eff = 1.202632\tres = 1.135E-03\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.203830\tres = 1.063E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.204952\tres = 9.959E-04\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.206004\tres = 9.320E-04\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.206990\tres = 8.733E-04\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.207913\tres = 8.176E-04\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.208778\tres = 7.643E-04\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.209588\tres = 7.163E-04\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.210345\tres = 6.699E-04\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.211055\tres = 6.262E-04\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.211719\tres = 5.863E-04\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.212340\tres = 5.480E-04\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.212921\tres = 5.126E-04\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.213464\tres = 4.791E-04\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.213972\tres = 4.476E-04\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.214447\tres = 4.190E-04\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.214891\tres = 3.909E-04\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.215306\tres = 3.656E-04\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.215693\tres = 3.414E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.216056\tres = 3.186E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.216393\tres = 2.983E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.216709\tres = 2.777E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.217005\tres = 2.600E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.217280\tres = 2.425E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.217538\tres = 2.261E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.217777\tres = 2.116E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.218001\tres = 1.970E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.218210\tres = 1.836E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.218405\tres = 1.717E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.218587\tres = 1.604E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.218756\tres = 1.497E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.218915\tres = 1.387E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.219063\tres = 1.301E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.219200\tres = 1.213E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.219329\tres = 1.126E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.219449\tres = 1.058E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.219560\tres = 9.819E-05\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.219664\tres = 9.124E-05\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.219761\tres = 8.522E-05\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.219851\tres = 7.946E-05\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.219935\tres = 7.396E-05\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.220014\tres = 6.887E-05\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.220086\tres = 6.461E-05\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.220155\tres = 5.971E-05\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.220218\tres = 5.596E-05\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.220276\tres = 5.177E-05\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.220332\tres = 4.809E-05\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.220383\tres = 4.555E-05\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.220431\tres = 4.197E-05\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.220475\tres = 3.922E-05\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.220516\tres = 3.642E-05\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.220556\tres = 3.368E-05\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.220592\tres = 3.194E-05\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.220625\tres = 2.959E-05\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.220657\tres = 2.763E-05\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.220686\tres = 2.555E-05\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.220712\tres = 2.384E-05\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.220737\tres = 2.193E-05\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.220761\tres = 2.076E-05\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.220783\tres = 1.910E-05\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.220803\tres = 1.796E-05\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.220822\tres = 1.660E-05\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.220840\tres = 1.568E-05\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.220857\tres = 1.465E-05\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.220872\tres = 1.346E-05\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.220886\tres = 1.233E-05\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.220899\tres = 1.178E-05\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.220912\tres = 1.083E-05\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.220923\tres = 1.012E-05\n" ] } ], @@ -1369,7 +1348,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 26, "metadata": { "collapsed": false }, @@ -1404,13 +1383,13 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "openmoc_geometry = get_openmoc_geometry(su.opencg_geometry)\n", + "openmoc_geometry = get_openmoc_geometry(sp.summary.opencg_geometry)\n", "openmoc_cells = openmoc_geometry.getRootUniverse().getAllCells()\n", "\n", "# Inject multi-group cross sections into OpenMOC Materials\n", @@ -1444,7 +1423,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -1456,14 +1435,14 @@ "[ NORMAL ] Importing ray tracing data from file...\n", "[ NORMAL ] Computing the eigenvalue...\n", "[ NORMAL ] Iteration 0:\tk_eff = 0.495816\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.557477\tres = 5.042E-01\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.557478\tres = 5.042E-01\n", "[ NORMAL ] Iteration 2:\tk_eff = 0.518301\tres = 1.244E-01\n", "[ NORMAL ] Iteration 3:\tk_eff = 0.509212\tres = 7.027E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.496489\tres = 1.754E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.496490\tres = 1.754E-02\n", "[ NORMAL ] Iteration 5:\tk_eff = 0.488581\tres = 2.498E-02\n", "[ NORMAL ] Iteration 6:\tk_eff = 0.482897\tres = 1.593E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.479775\tres = 1.163E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.478835\tres = 6.464E-03\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.479776\tres = 1.163E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.478835\tres = 6.465E-03\n", "[ NORMAL ] Iteration 9:\tk_eff = 0.479872\tres = 1.960E-03\n", "[ NORMAL ] Iteration 10:\tk_eff = 0.482685\tres = 2.166E-03\n", "[ NORMAL ] Iteration 11:\tk_eff = 0.487085\tres = 5.861E-03\n", @@ -1472,34 +1451,34 @@ "[ NORMAL ] Iteration 14:\tk_eff = 0.508155\tres = 1.435E-02\n", "[ NORMAL ] Iteration 15:\tk_eff = 0.517314\tres = 1.637E-02\n", "[ NORMAL ] Iteration 16:\tk_eff = 0.527327\tres = 1.802E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.538081\tres = 1.936E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.538082\tres = 1.936E-02\n", "[ NORMAL ] Iteration 18:\tk_eff = 0.549475\tres = 2.039E-02\n", "[ NORMAL ] Iteration 19:\tk_eff = 0.561413\tres = 2.117E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.573810\tres = 2.173E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.573811\tres = 2.173E-02\n", "[ NORMAL ] Iteration 21:\tk_eff = 0.586589\tres = 2.208E-02\n", "[ NORMAL ] Iteration 22:\tk_eff = 0.599678\tres = 2.227E-02\n", "[ NORMAL ] Iteration 23:\tk_eff = 0.613012\tres = 2.231E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.626532\tres = 2.224E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.626532\tres = 2.223E-02\n", "[ NORMAL ] Iteration 25:\tk_eff = 0.640186\tres = 2.206E-02\n", "[ NORMAL ] Iteration 26:\tk_eff = 0.653925\tres = 2.179E-02\n", "[ NORMAL ] Iteration 27:\tk_eff = 0.667706\tres = 2.146E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.681489\tres = 2.107E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.695240\tres = 2.064E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.708927\tres = 2.018E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.722522\tres = 1.969E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.736000\tres = 1.918E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.681490\tres = 2.107E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.695241\tres = 2.064E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.708928\tres = 2.018E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.722523\tres = 1.969E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.736001\tres = 1.918E-02\n", "[ NORMAL ] Iteration 33:\tk_eff = 0.749339\tres = 1.865E-02\n", "[ NORMAL ] Iteration 34:\tk_eff = 0.762519\tres = 1.812E-02\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.775522\tres = 1.759E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.788335\tres = 1.705E-02\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.800944\tres = 1.652E-02\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.775523\tres = 1.759E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.788336\tres = 1.705E-02\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.800945\tres = 1.652E-02\n", "[ NORMAL ] Iteration 38:\tk_eff = 0.813338\tres = 1.599E-02\n", "[ NORMAL ] Iteration 39:\tk_eff = 0.825507\tres = 1.547E-02\n", "[ NORMAL ] Iteration 40:\tk_eff = 0.837444\tres = 1.496E-02\n", "[ NORMAL ] Iteration 41:\tk_eff = 0.849142\tres = 1.446E-02\n", "[ NORMAL ] Iteration 42:\tk_eff = 0.860595\tres = 1.397E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.871801\tres = 1.349E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.882755\tres = 1.302E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.871800\tres = 1.349E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.882754\tres = 1.302E-02\n", "[ NORMAL ] Iteration 45:\tk_eff = 0.893455\tres = 1.256E-02\n", "[ NORMAL ] Iteration 46:\tk_eff = 0.903901\tres = 1.212E-02\n", "[ NORMAL ] Iteration 47:\tk_eff = 0.914091\tres = 1.169E-02\n", @@ -1507,30 +1486,30 @@ "[ NORMAL ] Iteration 49:\tk_eff = 0.933708\tres = 1.087E-02\n", "[ NORMAL ] Iteration 50:\tk_eff = 0.943137\tres = 1.048E-02\n", "[ NORMAL ] Iteration 51:\tk_eff = 0.952314\tres = 1.010E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.961243\tres = 9.731E-03\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.969927\tres = 9.376E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 0.978367\tres = 9.033E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 0.986568\tres = 8.702E-03\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.961244\tres = 9.731E-03\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.969927\tres = 9.377E-03\n", + "[ NORMAL ] Iteration 54:\tk_eff = 0.978368\tres = 9.033E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 0.986569\tres = 8.702E-03\n", "[ NORMAL ] Iteration 56:\tk_eff = 0.994534\tres = 8.382E-03\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.002267\tres = 8.074E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.002268\tres = 8.074E-03\n", "[ NORMAL ] Iteration 58:\tk_eff = 1.009773\tres = 7.776E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.017055\tres = 7.489E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.017055\tres = 7.488E-03\n", "[ NORMAL ] Iteration 60:\tk_eff = 1.024118\tres = 7.212E-03\n", "[ NORMAL ] Iteration 61:\tk_eff = 1.030966\tres = 6.944E-03\n", "[ NORMAL ] Iteration 62:\tk_eff = 1.037603\tres = 6.687E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.044036\tres = 6.438E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.044035\tres = 6.438E-03\n", "[ NORMAL ] Iteration 64:\tk_eff = 1.050267\tres = 6.199E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.056302\tres = 5.968E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.056302\tres = 5.969E-03\n", "[ NORMAL ] Iteration 66:\tk_eff = 1.062145\tres = 5.746E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.067802\tres = 5.532E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.067802\tres = 5.531E-03\n", "[ NORMAL ] Iteration 68:\tk_eff = 1.073276\tres = 5.326E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.078573\tres = 5.127E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.083698\tres = 4.935E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.078573\tres = 5.126E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.083697\tres = 4.936E-03\n", "[ NORMAL ] Iteration 71:\tk_eff = 1.088654\tres = 4.751E-03\n", "[ NORMAL ] Iteration 72:\tk_eff = 1.093447\tres = 4.573E-03\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.098080\tres = 4.402E-03\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.098080\tres = 4.403E-03\n", "[ NORMAL ] Iteration 74:\tk_eff = 1.102560\tres = 4.238E-03\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.106889\tres = 4.079E-03\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.106889\tres = 4.080E-03\n", "[ NORMAL ] Iteration 76:\tk_eff = 1.111072\tres = 3.926E-03\n", "[ NORMAL ] Iteration 77:\tk_eff = 1.115114\tres = 3.779E-03\n", "[ NORMAL ] Iteration 78:\tk_eff = 1.119018\tres = 3.638E-03\n", @@ -1540,152 +1519,152 @@ "[ NORMAL ] Iteration 82:\tk_eff = 1.133344\tres = 3.122E-03\n", "[ NORMAL ] Iteration 83:\tk_eff = 1.136622\tres = 3.005E-03\n", "[ NORMAL ] Iteration 84:\tk_eff = 1.139786\tres = 2.892E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.142840\tres = 2.784E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.142839\tres = 2.783E-03\n", "[ NORMAL ] Iteration 86:\tk_eff = 1.145786\tres = 2.679E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.148630\tres = 2.579E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.148629\tres = 2.579E-03\n", "[ NORMAL ] Iteration 88:\tk_eff = 1.151373\tres = 2.482E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.154020\tres = 2.388E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.156573\tres = 2.299E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.154019\tres = 2.388E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.156572\tres = 2.299E-03\n", "[ NORMAL ] Iteration 91:\tk_eff = 1.159035\tres = 2.212E-03\n", "[ NORMAL ] Iteration 92:\tk_eff = 1.161410\tres = 2.129E-03\n", "[ NORMAL ] Iteration 93:\tk_eff = 1.163700\tres = 2.049E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.165909\tres = 1.972E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.165908\tres = 1.972E-03\n", "[ NORMAL ] Iteration 95:\tk_eff = 1.168038\tres = 1.898E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.170091\tres = 1.826E-03\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.172070\tres = 1.758E-03\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.173977\tres = 1.691E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.170090\tres = 1.826E-03\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.172070\tres = 1.757E-03\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.173977\tres = 1.692E-03\n", "[ NORMAL ] Iteration 99:\tk_eff = 1.175816\tres = 1.628E-03\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.177589\tres = 1.566E-03\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.179297\tres = 1.507E-03\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.180943\tres = 1.451E-03\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.177589\tres = 1.567E-03\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.179296\tres = 1.507E-03\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.180943\tres = 1.450E-03\n", "[ NORMAL ] Iteration 103:\tk_eff = 1.182529\tres = 1.396E-03\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.184058\tres = 1.343E-03\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.184057\tres = 1.343E-03\n", "[ NORMAL ] Iteration 105:\tk_eff = 1.185530\tres = 1.293E-03\n", "[ NORMAL ] Iteration 106:\tk_eff = 1.186949\tres = 1.244E-03\n", "[ NORMAL ] Iteration 107:\tk_eff = 1.188316\tres = 1.197E-03\n", "[ NORMAL ] Iteration 108:\tk_eff = 1.189633\tres = 1.152E-03\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.190902\tres = 1.108E-03\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.190902\tres = 1.109E-03\n", "[ NORMAL ] Iteration 110:\tk_eff = 1.192124\tres = 1.066E-03\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.193301\tres = 1.026E-03\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.194435\tres = 9.874E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.195527\tres = 9.501E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.196578\tres = 9.142E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.197591\tres = 8.797E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.198566\tres = 8.464E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.199506\tres = 8.144E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.200410\tres = 7.836E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.201281\tres = 7.540E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.202119\tres = 7.255E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.202927\tres = 6.980E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.203704\tres = 6.716E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.204452\tres = 6.462E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.205173\tres = 6.217E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.205867\tres = 5.982E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.206534\tres = 5.755E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.207177\tres = 5.537E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.207796\tres = 5.327E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.208391\tres = 5.126E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.208965\tres = 4.931E-04\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.209517\tres = 4.744E-04\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.210048\tres = 4.565E-04\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.210559\tres = 4.391E-04\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.211051\tres = 4.225E-04\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.211525\tres = 4.065E-04\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.211980\tres = 3.910E-04\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.212419\tres = 3.762E-04\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.212841\tres = 3.619E-04\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.213247\tres = 3.482E-04\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.213638\tres = 3.350E-04\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.214015\tres = 3.222E-04\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.214377\tres = 3.100E-04\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.214725\tres = 2.982E-04\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.215060\tres = 2.869E-04\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.215383\tres = 2.760E-04\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.215693\tres = 2.655E-04\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.215992\tres = 2.554E-04\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.216280\tres = 2.457E-04\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.216556\tres = 2.364E-04\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.216822\tres = 2.274E-04\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.217078\tres = 2.187E-04\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.217325\tres = 2.104E-04\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.217562\tres = 2.024E-04\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.217790\tres = 1.947E-04\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.218009\tres = 1.873E-04\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.218220\tres = 1.802E-04\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.218423\tres = 1.733E-04\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.218619\tres = 1.667E-04\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.218807\tres = 1.604E-04\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.218988\tres = 1.543E-04\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.219162\tres = 1.484E-04\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.219329\tres = 1.428E-04\n", - "[ NORMAL ] Iteration 163:\tk_eff = 1.219490\tres = 1.373E-04\n", - "[ NORMAL ] Iteration 164:\tk_eff = 1.219645\tres = 1.321E-04\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.193300\tres = 1.026E-03\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.194435\tres = 9.872E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.195526\tres = 9.503E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.196578\tres = 9.141E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.197591\tres = 8.792E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.198566\tres = 8.468E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.199506\tres = 8.141E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.200410\tres = 7.840E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.201281\tres = 7.538E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.202120\tres = 7.257E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.202927\tres = 6.979E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.203705\tres = 6.716E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.204453\tres = 6.466E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.205173\tres = 6.218E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.205867\tres = 5.979E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.206535\tres = 5.760E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.207177\tres = 5.534E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.207796\tres = 5.326E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.208392\tres = 5.126E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.208965\tres = 4.937E-04\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.209516\tres = 4.744E-04\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.210048\tres = 4.559E-04\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.210559\tres = 4.393E-04\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.211050\tres = 4.224E-04\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.211524\tres = 4.061E-04\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.211980\tres = 3.914E-04\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.212419\tres = 3.763E-04\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.212841\tres = 3.624E-04\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.213247\tres = 3.480E-04\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.213638\tres = 3.344E-04\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.214014\tres = 3.223E-04\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.214376\tres = 3.098E-04\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.214724\tres = 2.986E-04\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.215060\tres = 2.870E-04\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.215382\tres = 2.763E-04\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.215692\tres = 2.648E-04\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.215991\tres = 2.554E-04\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.216278\tres = 2.460E-04\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.216555\tres = 2.363E-04\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.216822\tres = 2.277E-04\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.217077\tres = 2.191E-04\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.217324\tres = 2.101E-04\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.217561\tres = 2.024E-04\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.217789\tres = 1.949E-04\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.218008\tres = 1.871E-04\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.218219\tres = 1.802E-04\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.218423\tres = 1.732E-04\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.218618\tres = 1.669E-04\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.218806\tres = 1.602E-04\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.218987\tres = 1.543E-04\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.219161\tres = 1.487E-04\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.219328\tres = 1.428E-04\n", + "[ NORMAL ] Iteration 163:\tk_eff = 1.219490\tres = 1.375E-04\n", + "[ NORMAL ] Iteration 164:\tk_eff = 1.219645\tres = 1.322E-04\n", "[ NORMAL ] Iteration 165:\tk_eff = 1.219794\tres = 1.271E-04\n", - "[ NORMAL ] Iteration 166:\tk_eff = 1.219938\tres = 1.222E-04\n", - "[ NORMAL ] Iteration 167:\tk_eff = 1.220076\tres = 1.176E-04\n", - "[ NORMAL ] Iteration 168:\tk_eff = 1.220208\tres = 1.131E-04\n", - "[ NORMAL ] Iteration 169:\tk_eff = 1.220336\tres = 1.088E-04\n", - "[ NORMAL ] Iteration 170:\tk_eff = 1.220459\tres = 1.046E-04\n", - "[ NORMAL ] Iteration 171:\tk_eff = 1.220577\tres = 1.006E-04\n", - "[ NORMAL ] Iteration 172:\tk_eff = 1.220691\tres = 9.681E-05\n", - "[ NORMAL ] Iteration 173:\tk_eff = 1.220800\tres = 9.312E-05\n", - "[ NORMAL ] Iteration 174:\tk_eff = 1.220905\tres = 8.957E-05\n", - "[ NORMAL ] Iteration 175:\tk_eff = 1.221006\tres = 8.615E-05\n", - "[ NORMAL ] Iteration 176:\tk_eff = 1.221104\tres = 8.287E-05\n", - "[ NORMAL ] Iteration 177:\tk_eff = 1.221197\tres = 7.971E-05\n", - "[ NORMAL ] Iteration 178:\tk_eff = 1.221287\tres = 7.667E-05\n", - "[ NORMAL ] Iteration 179:\tk_eff = 1.221374\tres = 7.374E-05\n", - "[ NORMAL ] Iteration 180:\tk_eff = 1.221457\tres = 7.093E-05\n", - "[ NORMAL ] Iteration 181:\tk_eff = 1.221537\tres = 6.823E-05\n", - "[ NORMAL ] Iteration 182:\tk_eff = 1.221615\tres = 6.562E-05\n", - "[ NORMAL ] Iteration 183:\tk_eff = 1.221689\tres = 6.312E-05\n", - "[ NORMAL ] Iteration 184:\tk_eff = 1.221760\tres = 6.071E-05\n", - "[ NORMAL ] Iteration 185:\tk_eff = 1.221829\tres = 5.840E-05\n", - "[ NORMAL ] Iteration 186:\tk_eff = 1.221895\tres = 5.617E-05\n", - "[ NORMAL ] Iteration 187:\tk_eff = 1.221958\tres = 5.402E-05\n", - "[ NORMAL ] Iteration 188:\tk_eff = 1.222019\tres = 5.196E-05\n", - "[ NORMAL ] Iteration 189:\tk_eff = 1.222078\tres = 4.998E-05\n", - "[ NORMAL ] Iteration 190:\tk_eff = 1.222134\tres = 4.807E-05\n", - "[ NORMAL ] Iteration 191:\tk_eff = 1.222189\tres = 4.624E-05\n", - "[ NORMAL ] Iteration 192:\tk_eff = 1.222241\tres = 4.447E-05\n", - "[ NORMAL ] Iteration 193:\tk_eff = 1.222291\tres = 4.277E-05\n", - "[ NORMAL ] Iteration 194:\tk_eff = 1.222340\tres = 4.114E-05\n", - "[ NORMAL ] Iteration 195:\tk_eff = 1.222386\tres = 3.957E-05\n", - "[ NORMAL ] Iteration 196:\tk_eff = 1.222431\tres = 3.806E-05\n", - "[ NORMAL ] Iteration 197:\tk_eff = 1.222474\tres = 3.661E-05\n", - "[ NORMAL ] Iteration 198:\tk_eff = 1.222515\tres = 3.521E-05\n", - "[ NORMAL ] Iteration 199:\tk_eff = 1.222555\tres = 3.386E-05\n", - "[ NORMAL ] Iteration 200:\tk_eff = 1.222594\tres = 3.257E-05\n", - "[ NORMAL ] Iteration 201:\tk_eff = 1.222630\tres = 3.133E-05\n", - "[ NORMAL ] Iteration 202:\tk_eff = 1.222666\tres = 3.013E-05\n", - "[ NORMAL ] Iteration 203:\tk_eff = 1.222700\tres = 2.898E-05\n", - "[ NORMAL ] Iteration 204:\tk_eff = 1.222733\tres = 2.787E-05\n", - "[ NORMAL ] Iteration 205:\tk_eff = 1.222764\tres = 2.681E-05\n", - "[ NORMAL ] Iteration 206:\tk_eff = 1.222795\tres = 2.578E-05\n", - "[ NORMAL ] Iteration 207:\tk_eff = 1.222824\tres = 2.480E-05\n", - "[ NORMAL ] Iteration 208:\tk_eff = 1.222852\tres = 2.385E-05\n", - "[ NORMAL ] Iteration 209:\tk_eff = 1.222879\tres = 2.294E-05\n", - "[ NORMAL ] Iteration 210:\tk_eff = 1.222905\tres = 2.206E-05\n", - "[ NORMAL ] Iteration 211:\tk_eff = 1.222930\tres = 2.122E-05\n", - "[ NORMAL ] Iteration 212:\tk_eff = 1.222954\tres = 2.041E-05\n", - "[ NORMAL ] Iteration 213:\tk_eff = 1.222977\tres = 1.963E-05\n", - "[ NORMAL ] Iteration 214:\tk_eff = 1.222999\tres = 1.888E-05\n", - "[ NORMAL ] Iteration 215:\tk_eff = 1.223020\tres = 1.816E-05\n", - "[ NORMAL ] Iteration 216:\tk_eff = 1.223041\tres = 1.747E-05\n", - "[ NORMAL ] Iteration 217:\tk_eff = 1.223061\tres = 1.680E-05\n", - "[ NORMAL ] Iteration 218:\tk_eff = 1.223080\tres = 1.616E-05\n", - "[ NORMAL ] Iteration 219:\tk_eff = 1.223098\tres = 1.554E-05\n", - "[ NORMAL ] Iteration 220:\tk_eff = 1.223116\tres = 1.495E-05\n", - "[ NORMAL ] Iteration 221:\tk_eff = 1.223132\tres = 1.437E-05\n", - "[ NORMAL ] Iteration 222:\tk_eff = 1.223149\tres = 1.382E-05\n", - "[ NORMAL ] Iteration 223:\tk_eff = 1.223164\tres = 1.330E-05\n", - "[ NORMAL ] Iteration 224:\tk_eff = 1.223179\tres = 1.279E-05\n", - "[ NORMAL ] Iteration 225:\tk_eff = 1.223194\tres = 1.230E-05\n", - "[ NORMAL ] Iteration 226:\tk_eff = 1.223208\tres = 1.183E-05\n", - "[ NORMAL ] Iteration 227:\tk_eff = 1.223221\tres = 1.138E-05\n", - "[ NORMAL ] Iteration 228:\tk_eff = 1.223234\tres = 1.094E-05\n", - "[ NORMAL ] Iteration 229:\tk_eff = 1.223246\tres = 1.052E-05\n", - "[ NORMAL ] Iteration 230:\tk_eff = 1.223258\tres = 1.012E-05\n" + "[ NORMAL ] Iteration 166:\tk_eff = 1.219937\tres = 1.223E-04\n", + "[ NORMAL ] Iteration 167:\tk_eff = 1.220075\tres = 1.174E-04\n", + "[ NORMAL ] Iteration 168:\tk_eff = 1.220207\tres = 1.131E-04\n", + "[ NORMAL ] Iteration 169:\tk_eff = 1.220335\tres = 1.085E-04\n", + "[ NORMAL ] Iteration 170:\tk_eff = 1.220458\tres = 1.044E-04\n", + "[ NORMAL ] Iteration 171:\tk_eff = 1.220576\tres = 1.008E-04\n", + "[ NORMAL ] Iteration 172:\tk_eff = 1.220689\tres = 9.680E-05\n", + "[ NORMAL ] Iteration 173:\tk_eff = 1.220799\tres = 9.304E-05\n", + "[ NORMAL ] Iteration 174:\tk_eff = 1.220904\tres = 8.975E-05\n", + "[ NORMAL ] Iteration 175:\tk_eff = 1.221006\tres = 8.643E-05\n", + "[ NORMAL ] Iteration 176:\tk_eff = 1.221104\tres = 8.326E-05\n", + "[ NORMAL ] Iteration 177:\tk_eff = 1.221197\tres = 7.985E-05\n", + "[ NORMAL ] Iteration 178:\tk_eff = 1.221287\tres = 7.662E-05\n", + "[ NORMAL ] Iteration 179:\tk_eff = 1.221374\tres = 7.371E-05\n", + "[ NORMAL ] Iteration 180:\tk_eff = 1.221457\tres = 7.101E-05\n", + "[ NORMAL ] Iteration 181:\tk_eff = 1.221538\tres = 6.821E-05\n", + "[ NORMAL ] Iteration 182:\tk_eff = 1.221615\tres = 6.577E-05\n", + "[ NORMAL ] Iteration 183:\tk_eff = 1.221689\tres = 6.307E-05\n", + "[ NORMAL ] Iteration 184:\tk_eff = 1.221760\tres = 6.069E-05\n", + "[ NORMAL ] Iteration 185:\tk_eff = 1.221829\tres = 5.831E-05\n", + "[ NORMAL ] Iteration 186:\tk_eff = 1.221895\tres = 5.641E-05\n", + "[ NORMAL ] Iteration 187:\tk_eff = 1.221958\tres = 5.382E-05\n", + "[ NORMAL ] Iteration 188:\tk_eff = 1.222019\tres = 5.206E-05\n", + "[ NORMAL ] Iteration 189:\tk_eff = 1.222077\tres = 4.967E-05\n", + "[ NORMAL ] Iteration 190:\tk_eff = 1.222134\tres = 4.811E-05\n", + "[ NORMAL ] Iteration 191:\tk_eff = 1.222188\tres = 4.618E-05\n", + "[ NORMAL ] Iteration 192:\tk_eff = 1.222241\tres = 4.456E-05\n", + "[ NORMAL ] Iteration 193:\tk_eff = 1.222291\tres = 4.293E-05\n", + "[ NORMAL ] Iteration 194:\tk_eff = 1.222339\tres = 4.122E-05\n", + "[ NORMAL ] Iteration 195:\tk_eff = 1.222386\tres = 3.982E-05\n", + "[ NORMAL ] Iteration 196:\tk_eff = 1.222431\tres = 3.788E-05\n", + "[ NORMAL ] Iteration 197:\tk_eff = 1.222474\tres = 3.663E-05\n", + "[ NORMAL ] Iteration 198:\tk_eff = 1.222515\tres = 3.522E-05\n", + "[ NORMAL ] Iteration 199:\tk_eff = 1.222555\tres = 3.381E-05\n", + "[ NORMAL ] Iteration 200:\tk_eff = 1.222593\tres = 3.264E-05\n", + "[ NORMAL ] Iteration 201:\tk_eff = 1.222629\tres = 3.117E-05\n", + "[ NORMAL ] Iteration 202:\tk_eff = 1.222665\tres = 2.985E-05\n", + "[ NORMAL ] Iteration 203:\tk_eff = 1.222699\tres = 2.901E-05\n", + "[ NORMAL ] Iteration 204:\tk_eff = 1.222732\tres = 2.770E-05\n", + "[ NORMAL ] Iteration 205:\tk_eff = 1.222763\tres = 2.679E-05\n", + "[ NORMAL ] Iteration 206:\tk_eff = 1.222793\tres = 2.560E-05\n", + "[ NORMAL ] Iteration 207:\tk_eff = 1.222823\tres = 2.487E-05\n", + "[ NORMAL ] Iteration 208:\tk_eff = 1.222851\tres = 2.412E-05\n", + "[ NORMAL ] Iteration 209:\tk_eff = 1.222878\tres = 2.298E-05\n", + "[ NORMAL ] Iteration 210:\tk_eff = 1.222904\tres = 2.194E-05\n", + "[ NORMAL ] Iteration 211:\tk_eff = 1.222929\tres = 2.131E-05\n", + "[ NORMAL ] Iteration 212:\tk_eff = 1.222953\tres = 2.030E-05\n", + "[ NORMAL ] Iteration 213:\tk_eff = 1.222976\tres = 1.963E-05\n", + "[ NORMAL ] Iteration 214:\tk_eff = 1.222998\tres = 1.889E-05\n", + "[ NORMAL ] Iteration 215:\tk_eff = 1.223020\tres = 1.812E-05\n", + "[ NORMAL ] Iteration 216:\tk_eff = 1.223041\tres = 1.764E-05\n", + "[ NORMAL ] Iteration 217:\tk_eff = 1.223060\tres = 1.691E-05\n", + "[ NORMAL ] Iteration 218:\tk_eff = 1.223079\tres = 1.629E-05\n", + "[ NORMAL ] Iteration 219:\tk_eff = 1.223098\tres = 1.571E-05\n", + "[ NORMAL ] Iteration 220:\tk_eff = 1.223115\tres = 1.508E-05\n", + "[ NORMAL ] Iteration 221:\tk_eff = 1.223132\tres = 1.429E-05\n", + "[ NORMAL ] Iteration 222:\tk_eff = 1.223149\tres = 1.394E-05\n", + "[ NORMAL ] Iteration 223:\tk_eff = 1.223165\tres = 1.330E-05\n", + "[ NORMAL ] Iteration 224:\tk_eff = 1.223180\tres = 1.299E-05\n", + "[ NORMAL ] Iteration 225:\tk_eff = 1.223194\tres = 1.241E-05\n", + "[ NORMAL ] Iteration 226:\tk_eff = 1.223208\tres = 1.167E-05\n", + "[ NORMAL ] Iteration 227:\tk_eff = 1.223221\tres = 1.151E-05\n", + "[ NORMAL ] Iteration 228:\tk_eff = 1.223234\tres = 1.073E-05\n", + "[ NORMAL ] Iteration 229:\tk_eff = 1.223246\tres = 1.051E-05\n", + "[ NORMAL ] Iteration 230:\tk_eff = 1.223258\tres = 1.000E-05\n" ] } ], @@ -1701,7 +1680,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 29, "metadata": { "collapsed": false }, @@ -1758,7 +1737,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 30, "metadata": { "collapsed": false }, @@ -1784,7 +1763,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 31, "metadata": { "collapsed": false }, @@ -1795,15 +1774,15 @@ "(9.9999999999999994e-12, 20.0)" ] }, - "execution_count": 32, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\nRK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1845,7 +1824,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 32, "metadata": { "collapsed": false }, @@ -1877,16 +1856,16 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\nfn35+EIOpHUAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1913,34 +1892,25 @@ "# Show the plot on screen\n", "plt.show()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" + "pygments_lexer": "ipython3", + "version": "3.5.1" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index 34190371bb..c39f21dfaf 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -11,7 +11,7 @@ "* **Validation** of multi-group cross sections with **[OpenMOC](https://mit-crpg.github.io/OpenMOC/)**\n", "* Steady-state pin-by-pin **fission rates comparison** between OpenMC and [OpenMOC](https://mit-crpg.github.io/OpenMOC/)\n", "\n", - "**Note:** This Notebook was created using [OpenMOC](https://mit-crpg.github.io/OpenMOC/) to verify the multi-group cross-sections generated by OpenMC. In order to run this Notebook in its entirety, you must have [OpenMOC](https://mit-crpg.github.io/OpenMOC/) installed on your system, along with OpenCG to convert the OpenMC geometries into OpenMOC geometries. In addition, this Notebook illustrates the use of [Pandas](http://pandas.pydata.org/) `DataFrames` to containerize multi-group cross section data. We recommend using [Pandas](http://pandas.pydata.org/) >v0.15.0 or later since OpenMC's Python API leverages the multi-indexing feature included in the most recent releases of [Pandas](http://pandas.pydata.org/)." + "**Note:** This Notebook was created using [OpenMOC](https://mit-crpg.github.io/OpenMOC/) to verify the multi-group cross-sections generated by OpenMC. In order to run this Notebook in its entirety, you must have [OpenMOC](https://mit-crpg.github.io/OpenMOC/) installed on your system, along with OpenCG to convert the OpenMC geometries into OpenMOC geometries. In addition, this Notebook illustrates the use of [Pandas](http://pandas.pydata.org/) `DataFrames` to containerize multi-group cross section data." ] }, { @@ -32,7 +32,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.1+1178.ga40c9ec-py2.7-linux-x86_64.egg/matplotlib/__init__.py:1362: UserWarning: This call to matplotlib.use() has no effect\n", + "/home/romano/miniconda3/envs/default/lib/python3.5/site-packages/matplotlib/__init__.py:1350: UserWarning: This call to matplotlib.use() has no effect\n", "because the backend has already been chosen;\n", "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", "or matplotlib.backends is imported for the first time.\n", @@ -459,7 +459,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAWFSURB\nVGje7Zs7cttADIZ9CSvXcrP0iCxUqbBc8Ag6xR6BhV2EvYvwFD4CCx1ABT1jMdgndpegRQnOrCbj\npPlGESISC4A/gd27e8H583CX3b4+iKJrRHkS4vkghMPBonRYWGwtfgD2YN+dRDUOoh6lACw0Noi9\nw2fESuEoAR/uVuMolX039oXGT7F3eFL2iEfhUX1f4cPdL/ishs+68ai+udE4xPhexbjX2FfjGNoP\nj/DPNX4Tsd+EODr8FvsVdf1Hd9P2VvCi4+s/aXvrf+upAD+1/9GV1mkOH5X9vV6THtfvACslcaUC\nbESL61drBPtdI8SrFMWrELsXCkuFDYW75gbiP7d9Cf7bAYI/aCwUShrBvh30+lWQkzVgZ/HD4Oix\nNCgcQpJ3BxU/Ln91elKoM5VEE38QtJ+Yv6cQ9xjKNYayyl8TypP8DfJnQ2H/b/N3ye9P83cT33SQ\nv/sQh9gV7zZ/0dNj5HQaC5vVzv9+/WFN2w8KVaZ2BwL1+pv4g0x1QRfjq0dB4Q3kT277oP6VNL6g\nKxNU9a8zK+WLbi/WwpdihbboKqyxFOulHMj6v4W/AXbmUeAxrv9J/CqEBXaRKsXaodD4nsYvkT/G\n6H1D4SR/iPy1Roj9JsQ5e18/7EUHv1+Fvx/Xj5V9Ugb5K8TW4TZEEdcvoz/up0VTe9qsVIppKVX6\na7D6y9ZvwEKjrtQxPtv6fXII9vCxKOGaIeAIfEF8IvAG8ie3vRK9rRQl+PPpSctbhfpTUCpviH+k\nxsZgpT91+snoX1l49KK3iUQvICRy5aUw6l8leoVwoo3Uv1rKreF/UFLY6d9QP4L9Wf2r7EP9GOSf\ncsjZ56f60kz+XmVPXv+RuP49ff0T/53Rv6n/7m2lvXT9Wqd/VUz8hvh5M/ED6ILmt4mfHYZSaePn\nTWpsf/SvqV9O6dLYYClLEetnoH/LBLFoBvrX189uTv8++kot5vTvQD4/9jP690g9P/4z/bvo/XVG\n/xYoZZx+8fr3MxAtsf7tUOkG2JqsTtCIpgCt/qX1226KqZS7gfzJbe+c9jLrtIZ8lXD+s4umlW6A\nKIVrlML2/cXjgPFjlJqIRC+Fj0bVJe+vSh56pSdR6YkQ1ygF10Wqf0FeLta/iKn9Mv1L24ti2e+7\nW4n1b3T/W+L+t9H9T/SvVboUmqJJon1/hZq8LnzRDlDrX1u0xRT1+6vEpomMmyYkqi95vIH8yW1P\nN+122KkLcNLKi/WTF01z/cNASrWE/l3ev6T17zX909z9X27/euK/Rf3zWP+Waf9eEv37KkWJ+rfD\nl6ZglNDa+cEBhwYDvkoNP/rX69814NaI3imq0l7OYDy/qSdDGwr7r+Y3VbzoKZr6XX2lfxfOb87q\nXzr+b1j/Xlp/nP6dn98McdH7cn7zjPObKsYWS3Eb9w8n85smHtqQuPuZ30T2dlIT6F9xFl+n8xsl\negL9a4c2KRr9W4rp/GYqumiM9Nec/j2v/yj9u1h//hv9e93vc++f63/u+rPjL3f+5Lbn1j9m/eXW\nf+7zh/v8+2b9e/Hzn6s/uPqHrb8g71n6L3f+5Lbnvn8w33+4718/+5d47//c/gO7/5E7/nPbc/tv\n3P4fs//I7X9y+6/fqH+v6j9z+9/c/ju3/8+eP+TOn9z23PkXc/7Gnf9x5483q38Xzn+582fu/Js9\nfy8kb/6fO39y23P3n3S8/S/c/Tfc/T83uX/pgv1XE/9duP+Lu/+Mvf8td/znti8kb/8ld/9nx9t/\nSjw/Ltr/yt1/+337f6/bf0zoB3nJ/ucVc/81d/83e/957vzJbc89/8A8f8E9/5HE78XnT/4H/cs5\nf8Q9/8Q9f8U+/5U7f3Lbc88fdrzzjyvm+cuf/Uu887/c88fs88954/8vO4SjPC+2QRIAAAAldEVY\ndGRhdGU6Y3JlYXRlADIwMTYtMDQtMTNUMTE6NTc6NDAtMDQ6MDBB7YJkAAAAJXRFWHRkYXRlOm1v\nZGlmeQAyMDE2LTA0LTEzVDExOjU3OjQwLTA0OjAwMLA62AAAAABJRU5ErkJggg==\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -721,12 +721,11 @@ " 888\n", " 888\n", "\n", - " Copyright: 2011-2015 Massachusetts Institute of Technology\n", - " License: http://mit-crpg.github.io/openmc/license.html\n", + " Copyright: 2011-2016 Massachusetts Institute of Technology\n", + " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: eeb5091ca3a34cc85df73a3318cae2b6c7097413\n", - " Date/Time: 2016-04-13 11:57:40\n", - " MPI Processes: 1\n", + " Git SHA1: df280b60eb1c6d7b7f842e05ede734a4883a0fc8\n", + " Date/Time: 2016-05-05 15:06:49\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -812,20 +811,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.3700E-01 seconds\n", - " Reading cross sections = 8.2000E-02 seconds\n", - " Total time in simulation = 4.7745E+01 seconds\n", - " Time in transport only = 4.7726E+01 seconds\n", - " Time in inactive batches = 3.8220E+00 seconds\n", - " Time in active batches = 4.3923E+01 seconds\n", + " Total time for initialization = 4.1500E-01 seconds\n", + " Reading cross sections = 1.1800E-01 seconds\n", + " Total time in simulation = 5.3686E+01 seconds\n", + " Time in transport only = 5.3657E+01 seconds\n", + " Time in inactive batches = 4.3970E+00 seconds\n", + " Time in active batches = 4.9289E+01 seconds\n", " Time synchronizing fission bank = 3.0000E-03 seconds\n", " Sampling source sites = 2.0000E-03 seconds\n", - " SEND/RECV source sites = 0.0000E+00 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 4.8198E+01 seconds\n", - " Calculation Rate (inactive) = 6541.08 neutrons/second\n", - " Calculation Rate (active) = 2276.71 neutrons/second\n", + " Total time elapsed = 5.4118E+01 seconds\n", + " Calculation Rate (inactive) = 5685.70 neutrons/second\n", + " Calculation Rate (active) = 2028.85 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -879,25 +878,6 @@ "sp = openmc.StatePoint('statepoint.50.h5')" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In addition to the statepoint file, our simulation also created a summary file which encapsulates information about the materials and geometry. This is necessary for the `openmc.mgxs` module to properly process the tally data. We first create a `Summary` object and link it with the statepoint." - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "su = openmc.Summary('summary.h5')\n", - "sp.link_with_summary(su)" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -907,7 +887,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -942,7 +922,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 29, "metadata": { "collapsed": false }, @@ -961,7 +941,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 30, "metadata": { "collapsed": false }, @@ -970,7 +950,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python2.7/dist-packages/openmc-0.7.1-py2.7.egg/openmc/tallies.py:1996: RuntimeWarning: invalid value encountered in true_divide\n" + "/home/romano/openmc/openmc/tallies.py:1996: RuntimeWarning: invalid value encountered in true_divide\n", + " self_rel_err = data['self']['std. dev.'] / data['self']['mean']\n" ] }, { @@ -1051,7 +1032,7 @@ "2 10000 2 O-16 0.000000e+00 0.000000e+00" ] }, - "execution_count": 31, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -1070,7 +1051,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 31, "metadata": { "collapsed": false }, @@ -1116,7 +1097,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 32, "metadata": { "collapsed": true }, @@ -1135,7 +1116,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 33, "metadata": { "collapsed": true }, @@ -1147,7 +1128,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "metadata": { "collapsed": true }, @@ -1166,7 +1147,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 35, "metadata": { "collapsed": true }, @@ -1181,7 +1162,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 36, "metadata": { "collapsed": false }, @@ -1237,7 +1218,7 @@ "2 10000 1 O-16 0.000000 0.000000" ] }, - "execution_count": 37, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -1266,7 +1247,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 37, "metadata": { "collapsed": false }, @@ -1285,7 +1266,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 38, "metadata": { "collapsed": false }, @@ -1304,7 +1285,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 39, "metadata": { "collapsed": false, "scrolled": true @@ -1318,12 +1299,12 @@ "[ NORMAL ] Computing the eigenvalue...\n", "[ NORMAL ] Iteration 0:\tk_eff = 0.854370\tres = 0.000E+00\n", "[ NORMAL ] Iteration 1:\tk_eff = 0.801922\tres = 1.521E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.761746\tres = 6.349E-02\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.761745\tres = 6.349E-02\n", "[ NORMAL ] Iteration 3:\tk_eff = 0.732367\tres = 5.029E-02\n", "[ NORMAL ] Iteration 4:\tk_eff = 0.711075\tres = 3.869E-02\n", "[ NORMAL ] Iteration 5:\tk_eff = 0.696557\tres = 2.912E-02\n", "[ NORMAL ] Iteration 6:\tk_eff = 0.687673\tres = 2.044E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.683470\tres = 1.277E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.683469\tres = 1.277E-02\n", "[ NORMAL ] Iteration 8:\tk_eff = 0.683129\tres = 6.141E-03\n", "[ NORMAL ] Iteration 9:\tk_eff = 0.685949\tres = 7.889E-04\n", "[ NORMAL ] Iteration 10:\tk_eff = 0.691329\tres = 4.181E-03\n", @@ -1336,11 +1317,11 @@ "[ NORMAL ] Iteration 17:\tk_eff = 0.765800\tres = 1.655E-02\n", "[ NORMAL ] Iteration 18:\tk_eff = 0.778371\tres = 1.660E-02\n", "[ NORMAL ] Iteration 19:\tk_eff = 0.790897\tres = 1.643E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.803273\tres = 1.611E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.815415\tres = 1.566E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.803272\tres = 1.611E-02\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.815414\tres = 1.566E-02\n", "[ NORMAL ] Iteration 22:\tk_eff = 0.827256\tres = 1.513E-02\n", "[ NORMAL ] Iteration 23:\tk_eff = 0.838747\tres = 1.453E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.849847\tres = 1.390E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.849846\tres = 1.390E-02\n", "[ NORMAL ] Iteration 25:\tk_eff = 0.860527\tres = 1.324E-02\n", "[ NORMAL ] Iteration 26:\tk_eff = 0.870770\tres = 1.258E-02\n", "[ NORMAL ] Iteration 27:\tk_eff = 0.880562\tres = 1.191E-02\n", @@ -1362,8 +1343,8 @@ "[ NORMAL ] Iteration 43:\tk_eff = 0.981021\tres = 4.104E-03\n", "[ NORMAL ] Iteration 44:\tk_eff = 0.984493\tres = 3.814E-03\n", "[ NORMAL ] Iteration 45:\tk_eff = 0.987729\tres = 3.543E-03\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.990742\tres = 3.290E-03\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.993546\tres = 3.053E-03\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.990741\tres = 3.290E-03\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.993545\tres = 3.053E-03\n", "[ NORMAL ] Iteration 48:\tk_eff = 0.996153\tres = 2.833E-03\n", "[ NORMAL ] Iteration 49:\tk_eff = 0.998577\tres = 2.627E-03\n", "[ NORMAL ] Iteration 50:\tk_eff = 1.000829\tres = 2.436E-03\n", @@ -1377,63 +1358,63 @@ "[ NORMAL ] Iteration 58:\tk_eff = 1.013868\tres = 1.314E-03\n", "[ NORMAL ] Iteration 59:\tk_eff = 1.015006\tres = 1.215E-03\n", "[ NORMAL ] Iteration 60:\tk_eff = 1.016059\tres = 1.124E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.017033\tres = 1.039E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.017033\tres = 1.038E-03\n", "[ NORMAL ] Iteration 62:\tk_eff = 1.017933\tres = 9.596E-04\n", "[ NORMAL ] Iteration 63:\tk_eff = 1.018766\tres = 8.865E-04\n", "[ NORMAL ] Iteration 64:\tk_eff = 1.019535\tres = 8.188E-04\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.020246\tres = 7.562E-04\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.020246\tres = 7.561E-04\n", "[ NORMAL ] Iteration 66:\tk_eff = 1.020903\tres = 6.981E-04\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.021509\tres = 6.445E-04\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.021509\tres = 6.444E-04\n", "[ NORMAL ] Iteration 68:\tk_eff = 1.022069\tres = 5.948E-04\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.022586\tres = 5.489E-04\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.022586\tres = 5.488E-04\n", "[ NORMAL ] Iteration 70:\tk_eff = 1.023063\tres = 5.064E-04\n", "[ NORMAL ] Iteration 71:\tk_eff = 1.023503\tres = 4.671E-04\n", "[ NORMAL ] Iteration 72:\tk_eff = 1.023909\tres = 4.308E-04\n", "[ NORMAL ] Iteration 73:\tk_eff = 1.024284\tres = 3.973E-04\n", "[ NORMAL ] Iteration 74:\tk_eff = 1.024629\tres = 3.663E-04\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.024948\tres = 3.377E-04\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.024947\tres = 3.377E-04\n", "[ NORMAL ] Iteration 76:\tk_eff = 1.025241\tres = 3.113E-04\n", "[ NORMAL ] Iteration 77:\tk_eff = 1.025512\tres = 2.869E-04\n", "[ NORMAL ] Iteration 78:\tk_eff = 1.025761\tres = 2.644E-04\n", "[ NORMAL ] Iteration 79:\tk_eff = 1.025991\tres = 2.436E-04\n", "[ NORMAL ] Iteration 80:\tk_eff = 1.026203\tres = 2.244E-04\n", "[ NORMAL ] Iteration 81:\tk_eff = 1.026398\tres = 2.067E-04\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.026578\tres = 1.904E-04\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.026743\tres = 1.754E-04\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.026577\tres = 1.904E-04\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.026743\tres = 1.753E-04\n", "[ NORMAL ] Iteration 84:\tk_eff = 1.026895\tres = 1.615E-04\n", "[ NORMAL ] Iteration 85:\tk_eff = 1.027036\tres = 1.487E-04\n", "[ NORMAL ] Iteration 86:\tk_eff = 1.027165\tres = 1.369E-04\n", "[ NORMAL ] Iteration 87:\tk_eff = 1.027284\tres = 1.260E-04\n", "[ NORMAL ] Iteration 88:\tk_eff = 1.027393\tres = 1.160E-04\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.027494\tres = 1.068E-04\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.027587\tres = 9.825E-05\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.027672\tres = 9.041E-05\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.027751\tres = 8.319E-05\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.027823\tres = 7.654E-05\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.027889\tres = 7.042E-05\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.027950\tres = 6.478E-05\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.028007\tres = 5.959E-05\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.028058\tres = 5.481E-05\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.028106\tres = 5.041E-05\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.028150\tres = 4.636E-05\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.028190\tres = 4.263E-05\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.028227\tres = 3.920E-05\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.028261\tres = 3.604E-05\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.028292\tres = 3.314E-05\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.028321\tres = 3.047E-05\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.028347\tres = 2.801E-05\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.028371\tres = 2.575E-05\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.028394\tres = 2.367E-05\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.028414\tres = 2.175E-05\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.028433\tres = 1.999E-05\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.028450\tres = 1.838E-05\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.027493\tres = 1.067E-04\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.027586\tres = 9.824E-05\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.027671\tres = 9.043E-05\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.027750\tres = 8.318E-05\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.027822\tres = 7.654E-05\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.027889\tres = 7.041E-05\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.027950\tres = 6.481E-05\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.028006\tres = 5.960E-05\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.028058\tres = 5.480E-05\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.028105\tres = 5.043E-05\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.028149\tres = 4.634E-05\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.028189\tres = 4.266E-05\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.028226\tres = 3.920E-05\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.028260\tres = 3.604E-05\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.028291\tres = 3.316E-05\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.028320\tres = 3.047E-05\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.028347\tres = 2.800E-05\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.028371\tres = 2.576E-05\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.028393\tres = 2.367E-05\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.028414\tres = 2.176E-05\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.028433\tres = 2.003E-05\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.028450\tres = 1.836E-05\n", "[ NORMAL ] Iteration 111:\tk_eff = 1.028466\tres = 1.689E-05\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.028481\tres = 1.552E-05\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.028494\tres = 1.426E-05\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.028507\tres = 1.310E-05\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.028518\tres = 1.204E-05\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.028528\tres = 1.106E-05\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.028538\tres = 1.017E-05\n" + "[ NORMAL ] Iteration 112:\tk_eff = 1.028481\tres = 1.553E-05\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.028494\tres = 1.427E-05\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.028507\tres = 1.309E-05\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.028518\tres = 1.202E-05\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.028528\tres = 1.107E-05\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.028538\tres = 1.015E-05\n" ] } ], @@ -1456,7 +1437,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 40, "metadata": { "collapsed": false }, @@ -1509,7 +1490,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 41, "metadata": { "collapsed": false }, @@ -1535,7 +1516,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 42, "metadata": { "collapsed": false }, @@ -1567,7 +1548,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 43, "metadata": { "collapsed": false }, @@ -1575,18 +1556,18 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 44, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\nZOT/APiw99Nd94jXAAAAAElFTkSuQmCC\n", + "image/png": "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\nAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1604,34 +1585,25 @@ "plt.imshow(openmoc_fission_rates, interpolation='none', cmap='jet')\n", "plt.title('OpenMOC Fission Rates')" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" + "pygments_lexer": "ipython3", + "version": "3.5.1" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index d5e8b98614..ea71055a76 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -20,7 +20,7 @@ "%matplotlib inline\n", "import glob\n", "from IPython.display import Image\n", - "import matplotlib.pylab as pylab\n", + "import matplotlib.pyplot as plt\n", "import scipy.stats\n", "import numpy as np\n", "\n", @@ -370,7 +370,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAPZSURB\nVGje7Zs7buMwEIZ9iey50gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwg\nwIcgg8Cc4fCTSK5W4OeFkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7\nE08mlia+rn7VcKXP8sRszFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WB\nzfiz20hXORmP9fi/bM9EeUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4\nlXju8K3DKv9NThOZ3q2KmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3Oaf\nPX40NGgST2r+uvQkXXp6cKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcub\nlfKGt6apotG/NVx3SInWtLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJb\nf8qlPynYmpKCh7OB1fzNalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utr\nJTy8/06TXh0r/5JOa2JmYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU\n4YuBTPa/8P67l/6r44ds+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m\n/65n+S8p/itN15v0UkW3/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB\n6R3Cqn55U4rv4kfH3zaSgQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6\nbjT6rym9I/v/03/b+LHS4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv\n6h9B/Bfxr9j1Hz2eN/hO8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wX\nfP8Mvf9G37/D/ovuP8SeP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7\n+O+E8zdP/8XOf8Hnz9Dzb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589j\nz5/Y8ej9h4D+W7qQmf57efqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m\n4fwXuH+M3n+OO3++AX9clR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA0LTEzVDExOjQw\nOjAxLTA0OjAwQIJDkwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNC0xM1QxMTo0MDowMS0wNDow\nMDHf+y8AAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AFBRQnIjEkNk0AAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA1LTA1VDE0OjM5OjM0LTA2OjAw/egM+QAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNS0wNVQxNDozOTozNC0wNjowMIy1tEUAAAAASUVORK5C\nYII=\n", "text/plain": [ "" ] @@ -551,12 +551,11 @@ " 888\n", " 888\n", "\n", - " Copyright: 2011-2015 Massachusetts Institute of Technology\n", - " License: http://mit-crpg.github.io/openmc/license.html\n", + " Copyright: 2011-2016 Massachusetts Institute of Technology\n", + " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: eeb5091ca3a34cc85df73a3318cae2b6c7097413\n", - " Date/Time: 2016-04-13 11:40:02\n", - " MPI Processes: 1\n", + " Git SHA1: df280b60eb1c6d7b7f842e05ede734a4883a0fc8\n", + " Date/Time: 2016-05-05 14:39:34\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -619,20 +618,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.7900E-01 seconds\n", - " Reading cross sections = 8.6000E-02 seconds\n", - " Total time in simulation = 8.7310E+00 seconds\n", - " Time in transport only = 8.7200E+00 seconds\n", - " Time in inactive batches = 1.3230E+00 seconds\n", - " Time in active batches = 7.4080E+00 seconds\n", - " Time synchronizing fission bank = 2.0000E-03 seconds\n", - " Sampling source sites = 1.0000E-03 seconds\n", - " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Total time for initialization = 4.6600E-01 seconds\n", + " Reading cross sections = 1.1100E-01 seconds\n", + " Total time in simulation = 1.1106E+01 seconds\n", + " Time in transport only = 1.1089E+01 seconds\n", + " Time in inactive batches = 1.7090E+00 seconds\n", + " Time in active batches = 9.3970E+00 seconds\n", + " Time synchronizing fission bank = 4.0000E-03 seconds\n", + " Sampling source sites = 3.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 9.1240E+00 seconds\n", - " Calculation Rate (inactive) = 9448.22 neutrons/second\n", - " Calculation Rate (active) = 5062.10 neutrons/second\n", + " Total time elapsed = 1.1590E+01 seconds\n", + " Calculation Rate (inactive) = 7314.22 neutrons/second\n", + " Calculation Rate (active) = 3990.64 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -686,20 +685,6 @@ "sp = openmc.StatePoint(statepoints[-1])" ] }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false, - "scrolled": true - }, - "outputs": [], - "source": [ - "# Load the summary file and link with statepoint\n", - "su = openmc.Summary('summary.h5')\n", - "sp.link_with_summary(su)" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -709,7 +694,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 22, "metadata": { "collapsed": false }, @@ -725,7 +710,7 @@ " \t\tmesh\t[1]\n", " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", "\tNuclides =\ttotal \n", - "\tScores =\t[u'fission', u'nu-fission']\n", + "\tScores =\t['fission', 'nu-fission']\n", "\tEstimator =\ttracklength\n", "\n" ] @@ -748,7 +733,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 23, "metadata": { "collapsed": false }, @@ -757,13 +742,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.1508711 ]]\n", + "[[[ 0.1501735 ]]\n", "\n", - " [[ 0.05389822]]\n", + " [[ 0.05936257]]\n", "\n", - " [[ 0.19633 ]]\n", + " [[ 0.21402727]]\n", "\n", - " [[ 0.12963172]]]\n" + " [[ 0.13436703]]]\n" ] } ], @@ -778,7 +763,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -819,8 +804,8 @@ " 0.00e+00\n", " 6.25e-07\n", " fission\n", - " 2.34e-04\n", - " 3.54e-05\n", + " 2.20e-04\n", + " 3.31e-05\n", " \n", " \n", " 1\n", @@ -830,8 +815,8 @@ " 0.00e+00\n", " 6.25e-07\n", " nu-fission\n", - " 5.71e-04\n", - " 8.62e-05\n", + " 5.37e-04\n", + " 8.06e-05\n", " \n", " \n", " 2\n", @@ -841,8 +826,8 @@ " 6.25e-07\n", " 2.00e+01\n", " fission\n", - " 7.03e-05\n", - " 7.05e-06\n", + " 7.43e-05\n", + " 7.91e-06\n", " \n", " \n", " 3\n", @@ -852,8 +837,8 @@ " 6.25e-07\n", " 2.00e+01\n", " nu-fission\n", - " 1.87e-04\n", - " 1.76e-05\n", + " 1.97e-04\n", + " 1.96e-05\n", " \n", " \n", " 4\n", @@ -863,8 +848,8 @@ " 0.00e+00\n", " 6.25e-07\n", " fission\n", - " 3.67e-04\n", - " 3.61e-05\n", + " 3.52e-04\n", + " 3.39e-05\n", " \n", " \n", " 5\n", @@ -874,8 +859,8 @@ " 0.00e+00\n", " 6.25e-07\n", " nu-fission\n", - " 8.94e-04\n", - " 8.80e-05\n", + " 8.57e-04\n", + " 8.26e-05\n", " \n", " \n", " 6\n", @@ -885,8 +870,8 @@ " 6.25e-07\n", " 2.00e+01\n", " fission\n", - " 1.04e-04\n", - " 5.36e-06\n", + " 1.02e-04\n", + " 6.16e-06\n", " \n", " \n", " 7\n", @@ -896,8 +881,8 @@ " 6.25e-07\n", " 2.00e+01\n", " nu-fission\n", - " 2.76e-04\n", - " 1.40e-05\n", + " 2.70e-04\n", + " 1.61e-05\n", " \n", " \n", " 8\n", @@ -907,8 +892,8 @@ " 0.00e+00\n", " 6.25e-07\n", " fission\n", - " 6.04e-04\n", - " 5.57e-05\n", + " 6.09e-04\n", + " 6.55e-05\n", " \n", " \n", " 9\n", @@ -918,8 +903,8 @@ " 0.00e+00\n", " 6.25e-07\n", " nu-fission\n", - " 1.47e-03\n", - " 1.36e-04\n", + " 1.48e-03\n", + " 1.60e-04\n", " \n", " \n", " 10\n", @@ -929,8 +914,8 @@ " 6.25e-07\n", " 2.00e+01\n", " fission\n", - " 1.41e-04\n", - " 6.69e-06\n", + " 1.38e-04\n", + " 6.74e-06\n", " \n", " \n", " 11\n", @@ -940,8 +925,8 @@ " 6.25e-07\n", " 2.00e+01\n", " nu-fission\n", - " 3.72e-04\n", - " 1.82e-05\n", + " 3.65e-04\n", + " 1.88e-05\n", " \n", " \n", " 12\n", @@ -951,8 +936,8 @@ " 0.00e+00\n", " 6.25e-07\n", " fission\n", - " 6.45e-04\n", - " 4.59e-05\n", + " 6.23e-04\n", + " 5.16e-05\n", " \n", " \n", " 13\n", @@ -962,8 +947,8 @@ " 0.00e+00\n", " 6.25e-07\n", " nu-fission\n", - " 1.57e-03\n", - " 1.12e-04\n", + " 1.52e-03\n", + " 1.26e-04\n", " \n", " \n", " 14\n", @@ -973,8 +958,8 @@ " 6.25e-07\n", " 2.00e+01\n", " fission\n", - " 1.82e-04\n", - " 9.37e-06\n", + " 1.74e-04\n", + " 9.99e-06\n", " \n", " \n", " 15\n", @@ -984,8 +969,8 @@ " 6.25e-07\n", " 2.00e+01\n", " nu-fission\n", - " 4.76e-04\n", - " 2.47e-05\n", + " 4.58e-04\n", + " 2.68e-05\n", " \n", " \n", " 16\n", @@ -995,8 +980,8 @@ " 0.00e+00\n", " 6.25e-07\n", " fission\n", - " 7.28e-04\n", - " 7.49e-05\n", + " 6.94e-04\n", + " 8.68e-05\n", " \n", " \n", " 17\n", @@ -1006,8 +991,8 @@ " 0.00e+00\n", " 6.25e-07\n", " nu-fission\n", - " 1.77e-03\n", - " 1.83e-04\n", + " 1.69e-03\n", + " 2.12e-04\n", " \n", " \n", " 18\n", @@ -1017,8 +1002,8 @@ " 6.25e-07\n", " 2.00e+01\n", " fission\n", - " 1.81e-04\n", - " 1.04e-05\n", + " 1.75e-04\n", + " 1.10e-05\n", " \n", " \n", " 19\n", @@ -1028,8 +1013,8 @@ " 6.25e-07\n", " 2.00e+01\n", " nu-fission\n", - " 4.72e-04\n", - " 2.67e-05\n", + " 4.55e-04\n", + " 2.80e-05\n", " \n", " \n", "\n", @@ -1038,52 +1023,52 @@ "text/plain": [ " mesh 1 energy low [MeV] energy high [MeV] score mean \\\n", " x y z \n", - "0 1 1 1 0.00e+00 6.25e-07 fission 2.34e-04 \n", - "1 1 1 1 0.00e+00 6.25e-07 nu-fission 5.71e-04 \n", - "2 1 1 1 6.25e-07 2.00e+01 fission 7.03e-05 \n", - "3 1 1 1 6.25e-07 2.00e+01 nu-fission 1.87e-04 \n", - "4 1 2 1 0.00e+00 6.25e-07 fission 3.67e-04 \n", - "5 1 2 1 0.00e+00 6.25e-07 nu-fission 8.94e-04 \n", - "6 1 2 1 6.25e-07 2.00e+01 fission 1.04e-04 \n", - "7 1 2 1 6.25e-07 2.00e+01 nu-fission 2.76e-04 \n", - "8 1 3 1 0.00e+00 6.25e-07 fission 6.04e-04 \n", - "9 1 3 1 0.00e+00 6.25e-07 nu-fission 1.47e-03 \n", - "10 1 3 1 6.25e-07 2.00e+01 fission 1.41e-04 \n", - "11 1 3 1 6.25e-07 2.00e+01 nu-fission 3.72e-04 \n", - "12 1 4 1 0.00e+00 6.25e-07 fission 6.45e-04 \n", - "13 1 4 1 0.00e+00 6.25e-07 nu-fission 1.57e-03 \n", - "14 1 4 1 6.25e-07 2.00e+01 fission 1.82e-04 \n", - "15 1 4 1 6.25e-07 2.00e+01 nu-fission 4.76e-04 \n", - "16 1 5 1 0.00e+00 6.25e-07 fission 7.28e-04 \n", - "17 1 5 1 0.00e+00 6.25e-07 nu-fission 1.77e-03 \n", - "18 1 5 1 6.25e-07 2.00e+01 fission 1.81e-04 \n", - "19 1 5 1 6.25e-07 2.00e+01 nu-fission 4.72e-04 \n", + "0 1 1 1 0.00e+00 6.25e-07 fission 2.20e-04 \n", + "1 1 1 1 0.00e+00 6.25e-07 nu-fission 5.37e-04 \n", + "2 1 1 1 6.25e-07 2.00e+01 fission 7.43e-05 \n", + "3 1 1 1 6.25e-07 2.00e+01 nu-fission 1.97e-04 \n", + "4 1 2 1 0.00e+00 6.25e-07 fission 3.52e-04 \n", + "5 1 2 1 0.00e+00 6.25e-07 nu-fission 8.57e-04 \n", + "6 1 2 1 6.25e-07 2.00e+01 fission 1.02e-04 \n", + "7 1 2 1 6.25e-07 2.00e+01 nu-fission 2.70e-04 \n", + "8 1 3 1 0.00e+00 6.25e-07 fission 6.09e-04 \n", + "9 1 3 1 0.00e+00 6.25e-07 nu-fission 1.48e-03 \n", + "10 1 3 1 6.25e-07 2.00e+01 fission 1.38e-04 \n", + "11 1 3 1 6.25e-07 2.00e+01 nu-fission 3.65e-04 \n", + "12 1 4 1 0.00e+00 6.25e-07 fission 6.23e-04 \n", + "13 1 4 1 0.00e+00 6.25e-07 nu-fission 1.52e-03 \n", + "14 1 4 1 6.25e-07 2.00e+01 fission 1.74e-04 \n", + "15 1 4 1 6.25e-07 2.00e+01 nu-fission 4.58e-04 \n", + "16 1 5 1 0.00e+00 6.25e-07 fission 6.94e-04 \n", + "17 1 5 1 0.00e+00 6.25e-07 nu-fission 1.69e-03 \n", + "18 1 5 1 6.25e-07 2.00e+01 fission 1.75e-04 \n", + "19 1 5 1 6.25e-07 2.00e+01 nu-fission 4.55e-04 \n", "\n", " std. dev. \n", " \n", - "0 3.54e-05 \n", - "1 8.62e-05 \n", - "2 7.05e-06 \n", - "3 1.76e-05 \n", - "4 3.61e-05 \n", - "5 8.80e-05 \n", - "6 5.36e-06 \n", - "7 1.40e-05 \n", - "8 5.57e-05 \n", - "9 1.36e-04 \n", - "10 6.69e-06 \n", - "11 1.82e-05 \n", - "12 4.59e-05 \n", - "13 1.12e-04 \n", - "14 9.37e-06 \n", - "15 2.47e-05 \n", - "16 7.49e-05 \n", - "17 1.83e-04 \n", - "18 1.04e-05 \n", - "19 2.67e-05 " + "0 3.31e-05 \n", + "1 8.06e-05 \n", + "2 7.91e-06 \n", + "3 1.96e-05 \n", + "4 3.39e-05 \n", + "5 8.26e-05 \n", + "6 6.16e-06 \n", + "7 1.61e-05 \n", + "8 6.55e-05 \n", + "9 1.60e-04 \n", + "10 6.74e-06 \n", + "11 1.88e-05 \n", + "12 5.16e-05 \n", + "13 1.26e-04 \n", + "14 9.99e-06 \n", + "15 2.68e-05 \n", + "16 8.68e-05 \n", + "17 2.12e-04 \n", + "18 1.10e-05 \n", + "19 2.80e-05 " ] }, - "execution_count": 25, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -1102,16 +1087,16 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "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\nD03l9kElNMu/AAAAAElFTkSuQmCC\n", + "image/png": "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\n/wf1F+RhutXrZwAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1126,7 +1111,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 26, "metadata": { "collapsed": false }, @@ -1134,18 +1119,18 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 27, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\nJ/KLgSwAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1160,11 +1145,11 @@ "# Extract mean and reshape as 2D NumPy arrays\n", "mean = fiss['mean'].reshape((17,17))\n", "\n", - "pylab.imshow(mean, interpolation='nearest')\n", - "pylab.title('fission rate')\n", - "pylab.xlabel('x')\n", - "pylab.ylabel('y')\n", - "pylab.colorbar()" + "plt.imshow(mean, interpolation='nearest')\n", + "plt.title('fission rate')\n", + "plt.xlabel('x')\n", + "plt.ylabel('y')\n", + "plt.colorbar()" ] }, { @@ -1176,7 +1161,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 27, "metadata": { "collapsed": false }, @@ -1191,7 +1176,7 @@ "\tFilters =\t\n", " \t\tcell\t[10000]\n", "\tNuclides =\tU-235 U-238 \n", - "\tScores =\t[u'scatter-Y0,0', u'scatter-Y1,-1', u'scatter-Y1,0', u'scatter-Y1,1', u'scatter-Y2,-2', u'scatter-Y2,-1', u'scatter-Y2,0', u'scatter-Y2,1', u'scatter-Y2,2']\n", + "\tScores =\t['scatter-Y0,0', 'scatter-Y1,-1', 'scatter-Y1,0', 'scatter-Y1,1', 'scatter-Y2,-2', 'scatter-Y2,-1', 'scatter-Y2,0', 'scatter-Y2,1', 'scatter-Y2,2']\n", "\tEstimator =\tanalog\n", "\n" ] @@ -1207,7 +1192,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -1233,144 +1218,144 @@ " 10000\n", " U-235\n", " scatter-Y0,0\n", - " 3.86e-02\n", - " 1.11e-03\n", + " 3.84e-02\n", + " 1.32e-03\n", " \n", " \n", " 1\n", " 10000\n", " U-235\n", " scatter-Y1,-1\n", - " 2.75e-04\n", - " 2.96e-04\n", + " 3.61e-04\n", + " 3.13e-04\n", " \n", " \n", " 2\n", " 10000\n", " U-235\n", " scatter-Y1,0\n", - " -5.55e-05\n", - " 4.33e-04\n", + " -2.38e-04\n", + " 4.69e-04\n", " \n", " \n", " 3\n", " 10000\n", " U-235\n", " scatter-Y1,1\n", - " -4.22e-04\n", - " 3.51e-04\n", + " -5.08e-04\n", + " 3.83e-04\n", " \n", " \n", " 4\n", " 10000\n", " U-235\n", " scatter-Y2,-2\n", - " 5.88e-05\n", - " 2.04e-04\n", + " 6.68e-05\n", + " 2.46e-04\n", " \n", " \n", " 5\n", " 10000\n", " U-235\n", " scatter-Y2,-1\n", - " 1.00e-04\n", - " 2.49e-04\n", + " 6.47e-06\n", + " 2.84e-04\n", " \n", " \n", " 6\n", " 10000\n", " U-235\n", " scatter-Y2,0\n", - " -8.09e-05\n", - " 1.59e-04\n", + " -1.41e-04\n", + " 1.75e-04\n", " \n", " \n", " 7\n", " 10000\n", " U-235\n", " scatter-Y2,1\n", - " 1.93e-04\n", - " 2.14e-04\n", + " 1.61e-04\n", + " 2.33e-04\n", " \n", " \n", " 8\n", " 10000\n", " U-235\n", " scatter-Y2,2\n", - " 1.12e-04\n", - " 1.86e-04\n", + " -1.80e-05\n", + " 1.97e-04\n", " \n", " \n", " 9\n", " 10000\n", " U-238\n", " scatter-Y0,0\n", - " 2.34e+00\n", - " 1.34e-02\n", + " 2.33e+00\n", + " 1.35e-02\n", " \n", " \n", " 10\n", " 10000\n", " U-238\n", " scatter-Y1,-1\n", - " 2.32e-02\n", - " 2.97e-03\n", + " 2.53e-02\n", + " 3.23e-03\n", " \n", " \n", " 11\n", " 10000\n", " U-238\n", " scatter-Y1,0\n", - " 7.50e-04\n", - " 2.55e-03\n", + " 7.10e-04\n", + " 2.92e-03\n", " \n", " \n", " 12\n", " 10000\n", " U-238\n", " scatter-Y1,1\n", - " -2.73e-02\n", - " 3.28e-03\n", + " -2.49e-02\n", + " 3.52e-03\n", " \n", " \n", " 13\n", " 10000\n", " U-238\n", " scatter-Y2,-2\n", - " -2.36e-03\n", - " 1.21e-03\n", + " -1.43e-03\n", + " 1.17e-03\n", " \n", " \n", " 14\n", " 10000\n", " U-238\n", " scatter-Y2,-1\n", - " -1.80e-04\n", - " 1.49e-03\n", + " 6.84e-04\n", + " 1.63e-03\n", " \n", " \n", " 15\n", " 10000\n", " U-238\n", " scatter-Y2,0\n", - " 3.23e-03\n", - " 2.25e-03\n", + " 2.85e-03\n", + " 2.63e-03\n", " \n", " \n", " 16\n", " 10000\n", " U-238\n", " scatter-Y2,1\n", - " 3.75e-03\n", - " 1.97e-03\n", + " 3.97e-03\n", + " 2.24e-03\n", " \n", " \n", " 17\n", " 10000\n", " U-238\n", " scatter-Y2,2\n", - " 2.07e-03\n", - " 1.60e-03\n", + " 2.26e-03\n", + " 1.85e-03\n", " \n", " \n", "\n", @@ -1378,27 +1363,27 @@ ], "text/plain": [ " cell nuclide score mean std. dev.\n", - "0 10000 U-235 scatter-Y0,0 3.86e-02 1.11e-03\n", - "1 10000 U-235 scatter-Y1,-1 2.75e-04 2.96e-04\n", - "2 10000 U-235 scatter-Y1,0 -5.55e-05 4.33e-04\n", - "3 10000 U-235 scatter-Y1,1 -4.22e-04 3.51e-04\n", - "4 10000 U-235 scatter-Y2,-2 5.88e-05 2.04e-04\n", - "5 10000 U-235 scatter-Y2,-1 1.00e-04 2.49e-04\n", - "6 10000 U-235 scatter-Y2,0 -8.09e-05 1.59e-04\n", - "7 10000 U-235 scatter-Y2,1 1.93e-04 2.14e-04\n", - "8 10000 U-235 scatter-Y2,2 1.12e-04 1.86e-04\n", - "9 10000 U-238 scatter-Y0,0 2.34e+00 1.34e-02\n", - "10 10000 U-238 scatter-Y1,-1 2.32e-02 2.97e-03\n", - "11 10000 U-238 scatter-Y1,0 7.50e-04 2.55e-03\n", - "12 10000 U-238 scatter-Y1,1 -2.73e-02 3.28e-03\n", - "13 10000 U-238 scatter-Y2,-2 -2.36e-03 1.21e-03\n", - "14 10000 U-238 scatter-Y2,-1 -1.80e-04 1.49e-03\n", - "15 10000 U-238 scatter-Y2,0 3.23e-03 2.25e-03\n", - "16 10000 U-238 scatter-Y2,1 3.75e-03 1.97e-03\n", - "17 10000 U-238 scatter-Y2,2 2.07e-03 1.60e-03" + "0 10000 U-235 scatter-Y0,0 3.84e-02 1.32e-03\n", + "1 10000 U-235 scatter-Y1,-1 3.61e-04 3.13e-04\n", + "2 10000 U-235 scatter-Y1,0 -2.38e-04 4.69e-04\n", + "3 10000 U-235 scatter-Y1,1 -5.08e-04 3.83e-04\n", + "4 10000 U-235 scatter-Y2,-2 6.68e-05 2.46e-04\n", + "5 10000 U-235 scatter-Y2,-1 6.47e-06 2.84e-04\n", + "6 10000 U-235 scatter-Y2,0 -1.41e-04 1.75e-04\n", + "7 10000 U-235 scatter-Y2,1 1.61e-04 2.33e-04\n", + "8 10000 U-235 scatter-Y2,2 -1.80e-05 1.97e-04\n", + "9 10000 U-238 scatter-Y0,0 2.33e+00 1.35e-02\n", + "10 10000 U-238 scatter-Y1,-1 2.53e-02 3.23e-03\n", + "11 10000 U-238 scatter-Y1,0 7.10e-04 2.92e-03\n", + "12 10000 U-238 scatter-Y1,1 -2.49e-02 3.52e-03\n", + "13 10000 U-238 scatter-Y2,-2 -1.43e-03 1.17e-03\n", + "14 10000 U-238 scatter-Y2,-1 6.84e-04 1.63e-03\n", + "15 10000 U-238 scatter-Y2,0 2.85e-03 2.63e-03\n", + "16 10000 U-238 scatter-Y2,1 3.97e-03 2.24e-03\n", + "17 10000 U-238 scatter-Y2,2 2.26e-03 1.85e-03" ] }, - "execution_count": 29, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -1420,7 +1405,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 29, "metadata": { "collapsed": false }, @@ -1429,8 +1414,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.00159927 0.01341406]\n", - " [ 0.00018637 0.00111048]]]\n" + "[[[ 0.00185463 0.01350521]\n", + " [ 0.00019723 0.00131654]]]\n" ] } ], @@ -1451,7 +1436,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 30, "metadata": { "collapsed": false }, @@ -1466,7 +1451,7 @@ "\tFilters =\t\n", " \t\tdistribcell\t[10002]\n", "\tNuclides =\ttotal \n", - "\tScores =\t[u'absorption', u'scatter']\n", + "\tScores =\t['absorption', 'scatter']\n", "\tEstimator =\ttracklength\n", "\n" ] @@ -1489,7 +1474,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 31, "metadata": { "collapsed": false }, @@ -1498,7 +1483,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.05767856]]]\n" + "[[[ 0.05468423]]]\n" ] } ], @@ -1519,7 +1504,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 32, "metadata": { "collapsed": false }, @@ -1543,141 +1528,141 @@ " 558\n", " 279\n", " absorption\n", - " 8.19e-05\n", - " 7.82e-06\n", + " 8.72e-05\n", + " 8.13e-06\n", " \n", " \n", " 559\n", " 279\n", " scatter\n", - " 1.33e-02\n", - " 6.19e-04\n", + " 1.37e-02\n", + " 6.98e-04\n", " \n", " \n", " 560\n", " 280\n", " absorption\n", - " 1.00e-04\n", - " 7.93e-06\n", + " 1.03e-04\n", + " 9.17e-06\n", " \n", " \n", " 561\n", " 280\n", " scatter\n", - " 1.40e-02\n", - " 5.61e-04\n", + " 1.41e-02\n", + " 6.26e-04\n", " \n", " \n", " 562\n", " 281\n", " absorption\n", - " 9.52e-05\n", - " 7.08e-06\n", + " 9.41e-05\n", + " 8.40e-06\n", " \n", " \n", " 563\n", " 281\n", " scatter\n", - " 1.51e-02\n", - " 6.50e-04\n", + " 1.50e-02\n", + " 6.92e-04\n", " \n", " \n", " 564\n", " 282\n", " absorption\n", - " 9.85e-05\n", - " 9.47e-06\n", + " 9.56e-05\n", + " 1.03e-05\n", " \n", " \n", " 565\n", " 282\n", " scatter\n", - " 1.53e-02\n", - " 4.63e-04\n", + " 1.52e-02\n", + " 5.37e-04\n", " \n", " \n", " 566\n", " 283\n", " absorption\n", - " 1.08e-04\n", - " 1.34e-05\n", + " 1.06e-04\n", + " 1.49e-05\n", " \n", " \n", " 567\n", " 283\n", " scatter\n", - " 1.65e-02\n", - " 7.04e-04\n", + " 1.64e-02\n", + " 8.14e-04\n", " \n", " \n", " 568\n", " 284\n", " absorption\n", - " 1.13e-04\n", - " 7.91e-06\n", + " 1.16e-04\n", + " 9.02e-06\n", " \n", " \n", " 569\n", " 284\n", " scatter\n", - " 1.67e-02\n", - " 5.51e-04\n", + " 1.64e-02\n", + " 6.00e-04\n", " \n", " \n", " 570\n", " 285\n", " absorption\n", - " 1.23e-04\n", - " 9.53e-06\n", + " 1.25e-04\n", + " 1.12e-05\n", " \n", " \n", " 571\n", " 285\n", " scatter\n", - " 1.88e-02\n", - " 7.25e-04\n", + " 1.87e-02\n", + " 8.26e-04\n", " \n", " \n", " 572\n", " 286\n", " absorption\n", - " 1.44e-04\n", - " 1.34e-05\n", + " 1.47e-04\n", + " 1.49e-05\n", " \n", " \n", " 573\n", " 286\n", " scatter\n", - " 1.90e-02\n", - " 7.07e-04\n", + " 1.94e-02\n", + " 7.71e-04\n", " \n", " \n", " 574\n", " 287\n", " absorption\n", - " 1.26e-04\n", - " 8.66e-06\n", + " 1.31e-04\n", + " 9.84e-06\n", " \n", " \n", " 575\n", " 287\n", " scatter\n", " 1.97e-02\n", - " 7.23e-04\n", + " 7.93e-04\n", " \n", " \n", " 576\n", " 288\n", " absorption\n", - " 1.25e-04\n", - " 9.59e-06\n", + " 1.23e-04\n", + " 1.07e-05\n", " \n", " \n", " 577\n", " 288\n", " scatter\n", - " 2.01e-02\n", - " 6.75e-04\n", + " 1.97e-02\n", + " 7.34e-04\n", " \n", " \n", "\n", @@ -1685,29 +1670,29 @@ ], "text/plain": [ " distribcell score mean std. dev.\n", - "558 279 absorption 8.19e-05 7.82e-06\n", - "559 279 scatter 1.33e-02 6.19e-04\n", - "560 280 absorption 1.00e-04 7.93e-06\n", - "561 280 scatter 1.40e-02 5.61e-04\n", - "562 281 absorption 9.52e-05 7.08e-06\n", - "563 281 scatter 1.51e-02 6.50e-04\n", - "564 282 absorption 9.85e-05 9.47e-06\n", - "565 282 scatter 1.53e-02 4.63e-04\n", - "566 283 absorption 1.08e-04 1.34e-05\n", - "567 283 scatter 1.65e-02 7.04e-04\n", - "568 284 absorption 1.13e-04 7.91e-06\n", - "569 284 scatter 1.67e-02 5.51e-04\n", - "570 285 absorption 1.23e-04 9.53e-06\n", - "571 285 scatter 1.88e-02 7.25e-04\n", - "572 286 absorption 1.44e-04 1.34e-05\n", - "573 286 scatter 1.90e-02 7.07e-04\n", - "574 287 absorption 1.26e-04 8.66e-06\n", - "575 287 scatter 1.97e-02 7.23e-04\n", - "576 288 absorption 1.25e-04 9.59e-06\n", - "577 288 scatter 2.01e-02 6.75e-04" + "558 279 absorption 8.72e-05 8.13e-06\n", + "559 279 scatter 1.37e-02 6.98e-04\n", + "560 280 absorption 1.03e-04 9.17e-06\n", + "561 280 scatter 1.41e-02 6.26e-04\n", + "562 281 absorption 9.41e-05 8.40e-06\n", + "563 281 scatter 1.50e-02 6.92e-04\n", + "564 282 absorption 9.56e-05 1.03e-05\n", + "565 282 scatter 1.52e-02 5.37e-04\n", + "566 283 absorption 1.06e-04 1.49e-05\n", + "567 283 scatter 1.64e-02 8.14e-04\n", + "568 284 absorption 1.16e-04 9.02e-06\n", + "569 284 scatter 1.64e-02 6.00e-04\n", + "570 285 absorption 1.25e-04 1.12e-05\n", + "571 285 scatter 1.87e-02 8.26e-04\n", + "572 286 absorption 1.47e-04 1.49e-05\n", + "573 286 scatter 1.94e-02 7.71e-04\n", + "574 287 absorption 1.31e-04 9.84e-06\n", + "575 287 scatter 1.97e-02 7.93e-04\n", + "576 288 absorption 1.23e-04 1.07e-05\n", + "577 288 scatter 1.97e-02 7.34e-04" ] }, - "execution_count": 33, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -1729,7 +1714,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 33, "metadata": { "collapsed": false }, @@ -1791,8 +1776,8 @@ " 10000\n", " 279\n", " absorption\n", - " 8.19e-05\n", - " 7.82e-06\n", + " 8.72e-05\n", + " 8.13e-06\n", " \n", " \n", " 559\n", @@ -1806,8 +1791,8 @@ " 10000\n", " 279\n", " scatter\n", - " 1.33e-02\n", - " 6.19e-04\n", + " 1.37e-02\n", + " 6.98e-04\n", " \n", " \n", " 560\n", @@ -1821,8 +1806,8 @@ " 10000\n", " 280\n", " absorption\n", - " 1.00e-04\n", - " 7.93e-06\n", + " 1.03e-04\n", + " 9.17e-06\n", " \n", " \n", " 561\n", @@ -1836,8 +1821,8 @@ " 10000\n", " 280\n", " scatter\n", - " 1.40e-02\n", - " 5.61e-04\n", + " 1.41e-02\n", + " 6.26e-04\n", " \n", " \n", " 562\n", @@ -1851,8 +1836,8 @@ " 10000\n", " 281\n", " absorption\n", - " 9.52e-05\n", - " 7.08e-06\n", + " 9.41e-05\n", + " 8.40e-06\n", " \n", " \n", " 563\n", @@ -1866,8 +1851,8 @@ " 10000\n", " 281\n", " scatter\n", - " 1.51e-02\n", - " 6.50e-04\n", + " 1.50e-02\n", + " 6.92e-04\n", " \n", " \n", " 564\n", @@ -1881,8 +1866,8 @@ " 10000\n", " 282\n", " absorption\n", - " 9.85e-05\n", - " 9.47e-06\n", + " 9.56e-05\n", + " 1.03e-05\n", " \n", " \n", " 565\n", @@ -1896,8 +1881,8 @@ " 10000\n", " 282\n", " scatter\n", - " 1.53e-02\n", - " 4.63e-04\n", + " 1.52e-02\n", + " 5.37e-04\n", " \n", " \n", " 566\n", @@ -1911,8 +1896,8 @@ " 10000\n", " 283\n", " absorption\n", - " 1.08e-04\n", - " 1.34e-05\n", + " 1.06e-04\n", + " 1.49e-05\n", " \n", " \n", " 567\n", @@ -1926,8 +1911,8 @@ " 10000\n", " 283\n", " scatter\n", - " 1.65e-02\n", - " 7.04e-04\n", + " 1.64e-02\n", + " 8.14e-04\n", " \n", " \n", " 568\n", @@ -1941,8 +1926,8 @@ " 10000\n", " 284\n", " absorption\n", - " 1.13e-04\n", - " 7.91e-06\n", + " 1.16e-04\n", + " 9.02e-06\n", " \n", " \n", " 569\n", @@ -1956,8 +1941,8 @@ " 10000\n", " 284\n", " scatter\n", - " 1.67e-02\n", - " 5.51e-04\n", + " 1.64e-02\n", + " 6.00e-04\n", " \n", " \n", " 570\n", @@ -1971,8 +1956,8 @@ " 10000\n", " 285\n", " absorption\n", - " 1.23e-04\n", - " 9.53e-06\n", + " 1.25e-04\n", + " 1.12e-05\n", " \n", " \n", " 571\n", @@ -1986,8 +1971,8 @@ " 10000\n", " 285\n", " scatter\n", - " 1.88e-02\n", - " 7.25e-04\n", + " 1.87e-02\n", + " 8.26e-04\n", " \n", " \n", " 572\n", @@ -2001,8 +1986,8 @@ " 10000\n", " 286\n", " absorption\n", - " 1.44e-04\n", - " 1.34e-05\n", + " 1.47e-04\n", + " 1.49e-05\n", " \n", " \n", " 573\n", @@ -2016,8 +2001,8 @@ " 10000\n", " 286\n", " scatter\n", - " 1.90e-02\n", - " 7.07e-04\n", + " 1.94e-02\n", + " 7.71e-04\n", " \n", " \n", " 574\n", @@ -2031,8 +2016,8 @@ " 10000\n", " 287\n", " absorption\n", - " 1.26e-04\n", - " 8.66e-06\n", + " 1.31e-04\n", + " 9.84e-06\n", " \n", " \n", " 575\n", @@ -2047,7 +2032,7 @@ " 287\n", " scatter\n", " 1.97e-02\n", - " 7.23e-04\n", + " 7.93e-04\n", " \n", " \n", " 576\n", @@ -2061,8 +2046,8 @@ " 10000\n", " 288\n", " absorption\n", - " 1.25e-04\n", - " 9.59e-06\n", + " 1.23e-04\n", + " 1.07e-05\n", " \n", " \n", " 577\n", @@ -2076,8 +2061,8 @@ " 10000\n", " 288\n", " scatter\n", - " 2.01e-02\n", - " 6.75e-04\n", + " 1.97e-02\n", + " 7.34e-04\n", " \n", " \n", "\n", @@ -2111,36 +2096,36 @@ " mean std. dev. \n", " \n", " \n", - "558 8.19e-05 7.82e-06 \n", - "559 1.33e-02 6.19e-04 \n", - "560 1.00e-04 7.93e-06 \n", - "561 1.40e-02 5.61e-04 \n", - "562 9.52e-05 7.08e-06 \n", - "563 1.51e-02 6.50e-04 \n", - "564 9.85e-05 9.47e-06 \n", - "565 1.53e-02 4.63e-04 \n", - "566 1.08e-04 1.34e-05 \n", - "567 1.65e-02 7.04e-04 \n", - "568 1.13e-04 7.91e-06 \n", - "569 1.67e-02 5.51e-04 \n", - "570 1.23e-04 9.53e-06 \n", - "571 1.88e-02 7.25e-04 \n", - "572 1.44e-04 1.34e-05 \n", - "573 1.90e-02 7.07e-04 \n", - "574 1.26e-04 8.66e-06 \n", - "575 1.97e-02 7.23e-04 \n", - "576 1.25e-04 9.59e-06 \n", - "577 2.01e-02 6.75e-04 " + "558 8.72e-05 8.13e-06 \n", + "559 1.37e-02 6.98e-04 \n", + "560 1.03e-04 9.17e-06 \n", + "561 1.41e-02 6.26e-04 \n", + "562 9.41e-05 8.40e-06 \n", + "563 1.50e-02 6.92e-04 \n", + "564 9.56e-05 1.03e-05 \n", + "565 1.52e-02 5.37e-04 \n", + "566 1.06e-04 1.49e-05 \n", + "567 1.64e-02 8.14e-04 \n", + "568 1.16e-04 9.02e-06 \n", + "569 1.64e-02 6.00e-04 \n", + "570 1.25e-04 1.12e-05 \n", + "571 1.87e-02 8.26e-04 \n", + "572 1.47e-04 1.49e-05 \n", + "573 1.94e-02 7.71e-04 \n", + "574 1.31e-04 9.84e-06 \n", + "575 1.97e-02 7.93e-04 \n", + "576 1.23e-04 1.07e-05 \n", + "577 1.97e-02 7.34e-04 " ] }, - "execution_count": 34, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get a pandas dataframe for the distribcell tally data\n", - "df = tally.get_pandas_dataframe(summary=su, nuclides=False)\n", + "df = tally.get_pandas_dataframe(summary=sp.summary, nuclides=False)\n", "\n", "# Print the last twenty rows in the dataframe\n", "df.tail(20)" @@ -2148,7 +2133,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "metadata": { "collapsed": false }, @@ -2183,38 +2168,38 @@ " \n", " \n", " mean\n", - " 4.19e-04\n", - " 2.24e-05\n", + " 4.16e-04\n", + " 2.42e-05\n", " \n", " \n", " std\n", - " 2.42e-04\n", - " 9.14e-06\n", + " 2.39e-04\n", + " 1.03e-05\n", " \n", " \n", " min\n", " 1.90e-05\n", - " 3.44e-06\n", + " 3.80e-06\n", " \n", " \n", " 25%\n", - " 2.02e-04\n", - " 1.56e-05\n", + " 1.99e-04\n", + " 1.61e-05\n", " \n", " \n", " 50%\n", - " 4.05e-04\n", - " 2.20e-05\n", + " 4.09e-04\n", + " 2.37e-05\n", " \n", " \n", " 75%\n", - " 6.07e-04\n", - " 2.89e-05\n", + " 6.00e-04\n", + " 3.08e-05\n", " \n", " \n", " max\n", - " 9.19e-04\n", - " 4.95e-05\n", + " 9.07e-04\n", + " 5.38e-05\n", " \n", " \n", "\n", @@ -2225,16 +2210,16 @@ " \n", " \n", "count 2.89e+02 2.89e+02\n", - "mean 4.19e-04 2.24e-05\n", - "std 2.42e-04 9.14e-06\n", - "min 1.90e-05 3.44e-06\n", - "25% 2.02e-04 1.56e-05\n", - "50% 4.05e-04 2.20e-05\n", - "75% 6.07e-04 2.89e-05\n", - "max 9.19e-04 4.95e-05" + "mean 4.16e-04 2.42e-05\n", + "std 2.39e-04 1.03e-05\n", + "min 1.90e-05 3.80e-06\n", + "25% 1.99e-04 1.61e-05\n", + "50% 4.09e-04 2.37e-05\n", + "75% 6.00e-04 3.08e-05\n", + "max 9.07e-04 5.38e-05" ] }, - "execution_count": 35, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -2257,7 +2242,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 35, "metadata": { "collapsed": false }, @@ -2266,7 +2251,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Mann-Whitney Test p-value: 0.303583331507\n" + "Mann-Whitney Test p-value: 0.7234916721800682\n" ] } ], @@ -2295,7 +2280,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 36, "metadata": { "collapsed": false }, @@ -2304,7 +2289,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Mann-Whitney Test p-value: 6.038663783e-42\n" + "Mann-Whitney Test p-value: 3.5054120724573393e-41\n" ] } ], @@ -2331,7 +2316,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 37, "metadata": { "collapsed": false }, @@ -2340,7 +2325,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:4: SettingWithCopyWarning: \n", + "/home/romano/miniconda3/envs/default/lib/python3.5/site-packages/ipykernel/__main__.py:4: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", @@ -2350,18 +2335,18 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 38, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEdCAYAAAAb9oCRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XuYXHWd5/H3tzsdIVFMIDgDCRDSBBB1hQ4EL8REeARB\nV5CZ3VFnFCKKYQAvAzg6s7uGmXUenxHW28ZkHJTL6Mg6igzjMAvKJYsXICTgBQKhu0kgCTPkajAB\nknR9949zqjl1+tSpc6rqVFdVf17P009yblW/U931+57f3dwdERGRrHrGOwEiItJZFDhERCQXBQ4R\nEclFgUNERHJR4BARkVwUOEREJBcFDpECmNlfmNl1450OkSIocEjHMLPTzOznZvZbM9tuZj8zs1Ma\nfM0LzeynsX03mNn/bOR13f1v3P0jjbxGNWbmZrbbzH5nZpvN7Gtm1pfx2kVmtrGIdMnEocAhHcHM\nDgJ+BHwNOBiYCVwNvDSe6UpiZpNa8DZvdPdXAm8DzgcubsF7igAKHNI5jgVw9++6+4i7v+Dud7r7\nr8onmNlHzWytmT1vZo+Z2UC4/zNmNhTZ/95w/2uBFcCbw6f3nWZ2MfDHwKfDff8Snnu4mf3AzLaY\n2VNm9vHI+y41s++b2bfNbBdwYbjv2+Hx2WEp4QIze9rMtprZX0auP9DMbjSzHWH6P521VODug8DP\ngNdFXm9x5HMYNrOPhfunAv8GHB7e2+/C++qJfEbbzOx7ZnZweM0B4X1tCz+fVWb2e7l/e9JVFDik\nU6wDRsIM9mwzmx49aGb/BVgKfAg4CHgPsC08PAQsAF5NUEr5tpkd5u5rgSXAL9z9le4+zd2/AXwH\n+Ntw3382sx7gX4BfEpR0zgA+aWZnRZJwLvB9YFp4fZLTgOPC6/9HGLgAPgfMBuYA7wD+JOuHYmbH\nh/f2YGT3c8C7w89hMfAlMxtw993A2cDm8N5e6e6bgcuB84CFwOHADmBZ+FoXhJ/bEcAh4ef1Qtb0\nSXdS4JCO4O67CDJeB/4e2GJmt0Wefj9CkNmv8sCgu28Ir/0nd9/s7iV3/z/Ak8D8HG9/CnCou/+V\nu+919+EwDe+LnPMLd781fI9qGevVYUnplwRB6I3h/v8K/I2773D3jcBXM6RpjZntBtYCP3D3G8oH\n3P1f3X0o/BxWAncSBJdqlgB/6e4b3f0lggD8h2GV2z6CgHFMWNJbHf4uZAJT4JCO4e5r3f1Cd58F\nvJ7g6fjL4eEjCEoWY5jZh8zskbCqZWd47Ywcb30UQfXOzshr/AUQrbJ5JsPr/Hvk/3uAV4b/Pzx2\nfZbXGgiv/yPgg2Y2u3wgLJHdH3Yg2AmcQ/r9HgX8MHJva4ERgvv7B+AO4OawIf5vszbES/dS4JCO\n5O6PAzcQBAEIMtv++HlmdhRB6eAy4BB3nwb8BrDySyW9fGz7GeCpsCqr/PMqdz8n5Zo8ngVmRbaP\nyHJRWKL4HkGngaUAZvYK4AfANcDvhfd7O+n3+wxwduz+DnD3Te6+z92vdvcTgLcQVIF9KP8tSjdR\n4JCOYGbHm9kVZjYr3D4CeD9wf3jKdcCVZjbPAseEQWMqQWa5JbxuMS8HG4D/AGaZ2eTYvjmR7QeB\n583sz8OG7F4ze32jXYEjvgd81symm9lMgiCXxxeA94efyWTgFQT3u9/MzgbOjJz7H8AhZvbqyL4V\nwOfDzwszO9TMzg3//3Yze4OZ9QK7CKquSvlvUbqJAod0iueBU4EHwrr9+wlKDldA0I4BfB74x/Dc\nW4GD3f0x4FrgFwSZ5hsIeiGV3Q08Cvy7mW0N930TOCGsurnV3UcInrRPBJ4CthIEqmjm24i/AjaG\nr/0Tgkb2zN2M3f3X4X1c4e7PAx8nCEY7gA8At0XOfRz4LjAc3t/hwFfCc+40s+cJPttTw0t+P0zP\nLoIqrJUE1VcygZkWchJpL2Z2CfA+d1843mkRSaISRw1mtnS809Asupf2ZGbXmNlbw/EUxxGUon44\n3umqR5f9XpaOdxqapdn3ohJHDWbm7m61z2x/upf2ZGZOUF12NLATuBn4rLvvHdeE1aHbfi+6l2St\nmBpBRGpw99fXPkukPaiqSkREcunKqqqw6C8iIjlkrc7q2qqqbgyIIiJFMcveBKKqKhERyaXwwGFm\n7zSzJ8xs0Mw+k3D8eDP7hZm9ZGZX5rlWRERar9A2jnCagnUEU0VvBFYB7w9H85bPeQ3BJGvnATvc\n/Zqs16a8r6uqSkQkOzPL3MZRdIljPjDo7sNhn/SbCdYtGOXuz7n7KoI5cHJdKyIirVd04JhJ5RTR\nG8N9RV8rIiIF6YrGcQuW6fTyz3inR0SkE0Xz0bRpSorujruJyrUFZoX7mnqtuy8lXI8ANI5DRKQe\n7dLGsQqYa2ZHh+sdvI/IFM8FXisiIgUptMTh7vvN7DKCpSd7gW+5+6NmtiQ8vsLMfh94CDgIKJnZ\nJ4ET3H1X0rVFpldERGrr2ilHuvG+RESK0k7dcUVEpMsocIiISC4KHCIikosCh4iI5KLAISIiuShw\niIhILgocIiKSiwKHiIjkosAhIiK5KHCIiEguChwiIpJL0dOqd62RkrNi5RBrNuxg4KjpXLKwn56e\nTNO8iIh0NAWOOq1YOcQX73gCgLsefw6AS99+zHgmSUSkJVRVVac1G3akbouIdCsFjjoNHDU9dVtE\npFupqqpOlyzsB6ho4xARmQi0kJOIiGghJxERKY4Ch4iI5KI2jibS2A4RmQgUOJpIYztEZCJQVVUT\naWyHiEwEChxNpLEdIjIRqKqqiTS2Q0QmAo3jEBERjeMQEZHiKHCIiEguChwiIpKLAoeIiOSiwCEi\nIrkocIiISC4KHCIikosCh4iI5KLAISIiuRQeOMzsnWb2hJkNmtlnEo6bmX01PP4rMxuIHPusmT1m\nZr8xs++a2QFFp1dERNIVGjjMrBdYBpwNnAC838xOiJ12NjA3/LkYWB5eOzvcnufurwd6gfcVmV4R\nEamt6BLHfGDQ3YfdfS9wM3Bu7JxzgZs8cD8wzcwOA3YB+4ADzWwSMAXYXHB6RUSkhqIDx0zgmcj2\nxnBfzXPcfTtwDfA08CzwW3e/s8C0iohIBm3bOG5m/cCngKOBw4GpZvYnVc5damZe/mllOkVEukU0\nHzWzpdXOKzpwbAKOiGzPCvdlOedk4OfuvsXd9wG3AG9JehN3X+ruVv5pWupFRCaQaD7q7kurnVd0\n4FgFzDWzo81sMkHj9m2xc24DPhT2rnoTQZXUs8ATwJvMbIqZGXAGsLbg9IqISA2FrgDo7vvN7DLg\nDoJeUd9y90fNbEl4fAVwO3AOMAjsARaHxx4xs5uAh4AS8DDwjSLT2ywjJWfFyqGKlQB7elQQEpHu\noBUAC7DsnkG+eMcTo9tXnXUcl779mHFLj4hILVoBcJyt2bAjdVtEpJMpcBRg4KjpqdsiIp2s0DaO\nieqShf0AFW0cIiLdQm0cLaRGcxFpV3naOFTiaLK04PD1ewe59s51ANz1+HOU3Ln89LnjmVwRkdwU\nOJpsxcqh0R5Vdz3+HMBoj6pbH64c+3jrw5sUOESk46hxvMlSe1TFa8/arzZNRKQmBY4mS+tR9d6B\nyvkd49siIp1AVVVNltaj6mNv6+eBp7azdvMuXnv4QSx5m3pbiUjnUa+qFtKIchFpVxo53qY0olxE\nuoECRwtpRLmIdAO1cbSQRpSLSDdQG4eIiKiNQ0REiqPAISIiuShwiIhILgocIiKSiwKHiIjkosAh\nIiK5KHCIiEguGgDYxrRioIi0IwWONpa2KJSIyHhRVVUb06SIItKOFDjamCZFFJF2pKqqNqZJEUWk\nHWmSQxER0SSHIiJSHAUOERHJRYFDRERyUeN4F9LAQREpkgJHF9LAQREpkgLHOCuidKCBgyJSJAWO\ncVZE6WDgqOmjr1XeFhFplsIDh5m9E/gK0Atc5+5fiB238Pg5wB7gQndfEx6bBlwHvB5w4MPu/oui\n09xKRZQONHBQRIpUaOAws15gGfAOYCOwysxuc/fHIqedDcwNf04Flof/QhBQ/q+7/6GZTQamFJne\n8VBE6aCnx9SmISKFKbrEMR8YdPdhADO7GTgXiAaOc4GbwqHe95vZNDM7jKD08TbgQgB33wvsLTi9\nLafSgYh0mqIDx0zgmcj2Rl4uTaSdMxPYD2wBrjezNwKrgU+4++7iktt6Kh2ISKdp5wGAk4ABYLm7\nnwTsBj6TdKKZLTUzL/+0MpGtMlJylt0zyEU3rGLZPYOUSl15myIyjqL5qJktrXZe0SWOTcARke1Z\n4b4s5ziw0d0fCPd/nyqBw92XAkvL250UPLJ2x9XYDBEpWtZJDusKHGa2xt0HMpy6CphrZkcTBIP3\nAR+InXMbcFnY/nEq8Ft3fzZ8n2fM7Dh3fwI4g8q2ka6QNSBobIaItIu6AkfGoIG77zezy4A7CLrj\nfsvdHzWzJeHxFcDtBF1xBwkaxBdHXuJy4Dthj6rh2LGukDUg5O19pWlHRKQoqYEj7E77E3d/e71v\n4O63EwSH6L4Vkf87cGmVax8BTq73vTtB1oCQt/eVqrZEpCipgcPdR8ysZGavdvfftipRE0G5RLB6\n/XYWzJ1BX28P81ICQt7eV6raEpGiZKmq+h3wazP7MUHPJgDc/eOFpWoCiJYIAK4667imlgjiJZm9\nIyVKJVd1lYg0LEt33FuA/w78P4KxFOUfaUDRJYJLFvazYO6M0e37ntzK8pVDTX0PEZmYsrRxnOnu\nf9yi9EwYRU9E2NNjTO6tfC5QdZWINEOWNo6jzGxyOOWHNEkrphrRLLkiUgQLOjWlnGB2E/BagvEW\n0TaO/1Vs0upnZl7rviaCUslZri65IpKBmWUeAJglcHwuab+7X11H2lqiGwKHxmGISCs1NXBEXnSK\nu+9pKGUt0g2B42t3P8m1d64b3b7izGO5/PS545giEelmeQJHzV5VZvZmM3sMeDzcfqOZfb3BNEoN\ntz68KXW7XSc9bNd0iUjzZBnH8WXgLII2Dtz9l2b2tkJT1SUaqm6K57ex7XYdGd6u6RKR5sk0rbq7\nPxPbNVJAWrpOORO96/Hn+OIdT+QaR/HegZmp2+06Mrxd0yUizZOlxPGMmb0FcDPrAz4BrC02Wd2h\nkUz0Txcdg5lV7a7brl1t2zVdItI8WQLHEoK1v2cSTI1+J1UmJZRKjWSiteamShsHMlJyvn7vILeu\n2QQG5500k0sXHdOSXllaClek+2XuVdVJ2qVXVa1xFEV1uV12z2DFPFjQ/LmwRKS75OlVVfQKgBNa\nrVJDUQ3JSVViamsQkWZp5zXHu17WNpC8XVyTqsTU1iAizaISxzjK2gaSt2RyycJ+3J0fRto41NYg\nIs1SVxuHmQ24+5oC0tMU7dLGUUu5DWT1+u3sK3nFYk7Rto6LblhVEWDOOP41fPPCU8YjyZoKRaRL\nNXXkeBWX1HmdRJTbQObNPpj7ntzK3VXGe8RLIuNZ7dTI2BQR6Q51VVW5+0ebnZCJrFZbRzt1cdUA\nPxGpGjjMbCDtwnauquo0tdo68q43XqSkJWkvumGVqq1EJpC0Ese1KcccOL3JaZmw6i1RjEd7QzSt\ne0dK3PfkVkDzUolMJFUDh7u/vZUJmcjqbcYfjwkFo6Wfi25YVXFM1VYiE0PNNg4zmwL8GXCku19s\nZnOB49z9R4WnboJICwBppYp4Rn3Lmo0tLX1oXiqRiSlL4/j1wGrgLeH2JuCfAAWOJqnW4DxSci68\n/sEx1UFLFvazYuUQ67furrhuaMtuhrbsblnpo50a7UWkdbIEjn53/yMzez+Au+8xM7WANlG1J/cV\nK4dGg0bZmg07KkooAP2HTgWHoUggaUW1UTs12otI62QJHHvN7EDCqngz6wdeKjRVE0y1J/ekzH/g\nqOlj9s8+ZCoDR02vCCZp1UZ5GtU14E9E4mqOHDezdwD/DTiBYEr1twIXuvu9haeuTp0ycjwunkm7\nO9dE1h1fMHcGNy6ez/KEEsd5J83EgIef3lkzg4/Pnps2c26ec0WkczVtdtywSupx4HzgTYABn3D3\nrWnXSX3ijeRXnHksV511XMXTvgMld/oPncqO3XvZvmcfQ1t2c+2d67jqrOMyTUWSZxCfBvyJSFxq\n4HB3N7Pb3f0NwL+2KE0TVjxTfuTpnWMCwbJ7Brk2UgpJu76aPL2h1HNKROKytHGsMbNT3H1V7VOl\nEVky6dXrt6den0W0DeXEI6fh7lVHfye1v6jdQ2RiyxI4TgX+2Mw2ALsJqqvc3f9ToSmbgLJ0b90X\nW4vjyIMPpK+nByyowiqVvGYmHu0NFW3DSOrGm9RzqtY1ItLdsgSOswpPhQDZurf29VZOaDypp2e0\nG+61d66jx7J3kR0pObes3lixL0t1l9o9RCa2mtOqu/uGpJ9WJE7Gmherjtr5wt6K7TyZ+IqVQxVj\nPwDWb9tdc5XBeJVYeaLDWtflXclQRNpT4SsAmtk7ga8AvcB17v6F2HELj58D7CHo6rsmcrwXeAjY\n5O7vLjq97e6Shf3cP7xtdGDg9t37Ko7nabxOCjJDW3aPVkNVK7nUO9HheMytJSLNV2jgCDP9ZcA7\ngI3AKjO7zd0fi5x2NjA3/DkVWB7+W/YJYC1wUJFp7RQ9PcbkWHVV/4ypzJ4xNfe0H/HG+Ki0kku9\nEx2qikukO9S7AmBW84FBdx92973AzcC5sXPOBW7ywP3ANDM7DMDMZgHvAq4rOJ1tLV7Fc9KR0yqO\nnzcwc3RE+fKVQ4lVQEnVRJcs7Oeqs47jjONfw4K5MyrOz1pyybM6YTutZCgi9Su6qmom8ExkeyOV\npYlq58wEngW+DHwaeFWBaWx7tQYGunvNKqBq1UTl88rrn+edsDDPRIeaFFGkOxTexlEvM3s38Jy7\nrzazRTXOXQp8rhXpGg+1BgZmqS6qVU1U74SFea7TpIgi7c3MotUVV7v70qTziq6q2gQcEdmeFe7L\ncs5bgfeY2XqCKq7TzezbSW/i7kvd3co/zUp8u6hVxZPUy2nf/lJq9VaR1UTd0HuqG+5BJK9oPlot\naECGSQ4bYWaTgHXAGQTBYBXwAXd/NHLOu4DLCHpVnQp81d3nx15nEXBl1l5VnTrJYTVJ1UjRQX6l\nknNBZN0OCCZEjG5fceax9JiNmfeqiBHg3TAxYjfcg0geTZvksFHuvt/MLgPuIOiO+y13f9TMloTH\nVwC3EwSNQYLuuIuLTFMnqlXFk9TTau3mXRXbtz68iR9/amFFYChqBHjSyoSdNi2JeoCJVFd0VRXu\nfru7H+vu/e7++XDfijBoEPamujQ8/gZ3fyjhNe7VGI508aqn4w+r7E8wtGU3y1cOVeyLZ4arN+xo\nSvVMPC1J793u1ANMpLq2bRyXfOI9lkZGnJ8Obqs455bVlU/+8XEce/ePVJRA3J3LTp+bKx0jJcfd\nObCvlxf2jYzuX91hT+zqASZSXaFtHOOl29o46nHRDasSB/dF6+pLJWfZvYPc+vAmcNi+ey87Xnh5\nJHr/jKncdeWiXO8bbxsoWzB3Bv9wUbwntoi0i7Zp45DmyzqlebVR4dHqqZ4eo8eMoS27x5wHBPMg\n51StLaAvlsa0+9C07SLtTYGjw2Sd76lctXLL6o0VExnuHSlVTL2e1uh73kkzc6evWsCaN/vgiu20\n+2jXOa0U0EQCChwdJmtvn3JPrEsW9ld01b3vya0sXznEkoX9rFg5xPptlaWNBXNnMLm3p+56/fI1\nqzfsYN9Iib4eY97sg8e8Vtp9tGuPpnYNaCKtpsDRYfIu5ZrUVXfNhh0VmSAE7Rnnz5uV+hSd5Yk7\n6+jwtPto1+Vqx/RCW7+dZfcMqgQiE44CR4ep1tsnLVNPyojjmeDsGVNrZvhZn7izBJi0XkvxpW1L\nKUvbNluez3FfqfYcYSLdSIGjw1R7ok/L1C9eMIf7h7exdvMuXnv4QXxswRz+juHcT/VZq5CyBJi0\nkkmepW2bLS3t8WAX72LcLlVqIkVT4Ohw5Sfk63/6VMX+8vYlC/v5xn3DFW0cf3ffcF3jFOJP3Ou3\nBqsFxksBzWyjiGfORY8HSUt7PNgtu2eQu5tcpTaeDfBq/JesFDg63NfvHeTaO9eN2b91997RJ+ek\nzLBWW0Q5E1m9fjt7R0ps3vkiuHPaMYeweeeLDG/dzdDWYLXA+4e3cePi+alVY3mV3/+RpyvTvnf/\nSKHtCnnS3sggwWqZ9Hg2wKvxX7JS4Ohwtz5cOdlwj0F0ppByxhTPDGs9XcYbz8uGt+2h/9CpFfvu\ne3IrF1z/4GhvrI8tmFPx3lkz1GiaXto/MmbkO8DmHS80lLnVuu88waCRaeKrZdLj2aOsXXuzSftR\n4Oh0sQHy0w7sY/uel0d/RzO/aGa4vMbTZWqmkTAoP+u642kZd7VgFWWx0kXezC2eYd8/vK2i+3E8\nGJSnV292CadaJp21xFNEtVK79mbrFt1UFajA0eHeOzCTayJVVYvfOpuenp4xf5zxjLzW02XaeuTv\nHZjJA09tr5i2Pf5a9VTFpAWBKX29XHr6MZTcK6rmsmRu0bTEx63UCnhFVd9Uy6SzlniKSJfm5ypW\nN1UFKnB0uD9ddAwWW2cjy1NMrafLcqZx3X1D7Nizf3T/EdMPwAmmEFkwdwZ9vT3sGylVBJGBo6bX\nVRVz4pHTqgarJYuC6q+Hn94ZvG+VgYVJspRk4mmpti++Xe9TZLVMOmv1VxHVSlqhsVjdVBWowNGB\nmlHkrfV0Wc5EVq/fzt1PbBnd39fbU/HEf9VZx41WfUVf66M3Vc6On6UqJj4x5Vv7D+aAvkmceOQ0\nHhjeVtHmkWdhpXhPrDkzpnL0jKnsTQh4cbUCbN6nyGing30lp6+3vpUNVK3UefL8ztq9WkuBowM1\no8ib9ely3uyDKwKH2dg2hqTXqqcq5p8f2VzxGv++6yXuuuLNLLtncExDedLTWrUv276RUuV57vz9\nh05mpOR8+MZVFeNb4moF2LyjyZNKP3fX8TtUtVLnyfM7a/dqLQWODtTKIm/8jz1rG0O1L0nqZPfx\ng+F20v0ljSGp9mWLz8y7Ydselt07yIORdpr7ntzK4htXVXQrhtoBttZo8njje7XfVZ5AmCVd0lzN\nKAHk+Z21e7WWAkcHamU1RfyPvVTyMWuXZ7muLO1JKt7Q/96BYHbepIb68hiS6PXVvmzxUhME3Zjj\n08nf9+RW3n7tvdz1qYVMmvRyFdLe/SUuipRMrr/glNHjtUaTRxvf3b1qp4Ok32Ezp3iRxtRbAqj3\nd9PuVZEKHB1oPKspGn3STXuSSmroh8r7Xb9td0WGH70+rXrs/uFtlb3AqhR9NmzbwxlfWsk9Vywa\n/YJfdOOqMSWT8qJUtUaTR/1wzSZ+/GcLx6RlwdwZib/DtM8qmiFF22ruevw5Sj42uCuQNKbeEkC9\nAafdqyIVODpQp1VTxDO5qOiTVLX7qjZ3Vfz6tJ5KNy6eX9GA7+4VpZuoDdv2sHzl0Oh7rt28q+J4\ndDt6byceOQ13Z86MKezcs4/nX9zPvuhoTEtOS9bFuKL3mtZTLFqaKleXxavgJJ8xyyzH1rWppt6A\n0+7fcQUOyS1v8TueyTWy5kfak1j0yzZS8jGZc7zKzcxYvX47a57eyc7Ikrnl1y/fZynW2+v4w141\n2gAef9pPU14YK2umkHavaRmQlyrTW16DJf6equLKLl5qve/JrbzjSys5fyB9KYJ2r3KqlwKH5BYv\nfteqGolncn09Njq1+/KVQ7kyrJ4eG12EKun6cmZ4y5qNFU/dUFlFEM289+8vccaXVrJh257R4/Gx\nKABTJvcy76jpzJ89PdO4kLIZUyez+LSjuWRhf67MOi3ApA3QPHz6gQxH7gWSA02799xpJ0nr2gxt\nGdvOFtfuVU71UuCQ3Fav316x/cM1GxneGmRUSRlQs9axGA0KkeVw05adjUp7Qp80qYd7rlhUcyzK\nm+ccwjcvPIWLblhVM61Ri087uunTxKe1+0ye1MuCuTNqjlFp55477Vgaqhas0z63dq9yqpcCh+S2\nL1YVklTNE9WsdSyyBIVqr1WriiDPWJT4/nLV24lHTsPCNJQH982rUcVUb2ad1u5Tfs94IIxr52qU\ndiwNlT/D6IMLtNfn1ioKHJJbfLTztAMns3135cSKUc1axyJLUIhnhgdP6ePDYTVRXtWqGZL2Z30a\nrpVZxxvbjWCalWrvM1Jy3J3+GVPBgnaUavOTZb2/dtCOpaHyZ1oOyuXR/6s37KgYU9SOpaVmU+CQ\n3OYdNb0i4z9/YGZiN9pq6s2w4plu/6FTRxsno68dbcTcvmcfZlbXF7dWY3s9a7On3ftIybnw+gcT\nG9vTJmGM9g7ryXGv5fsrp/ejNz3UNhldq0pD1X5XIyXn6/cOBssWeDCm6E8XHUNPj41+btGS3t2R\ntr5a7WvdQIFDcmvkiRvqr/dNel+HMRl6vBGzvBrixQvm8I37hutKd56qk6Sp28vdYdPufcXKoaoz\nDpfvG2Kz/W7dnXhOHvH03rJ6I+fPS+8tVLS8Dxf1PuVX+72uWDlUMUPCNXeuw6zydxf/rJMGlSad\n1w0UOCS3Rhr86v2Cx0dvf2zBHHp6LLGxOf60Wl4NMVoSyfskmKfqJH6sWnfYWtfFlZ+608ZwRJ/M\nkz5rD6+P7ou/b9Ko/FbL+zdWb5tItd9r2kzJ5c81HrSrDSod3PI7Tv7rH4+ZdaCTKXBIS9X7Ba82\nejvpi//3HzoZCEoaW3fvHT0WH8h3y+qNmQNYPBideOS0qpMZJvW+yfLUGb9u+pQ+Xnf4QUye1FvR\nyB5/rf5DpzL7kKljnsyjywqXpzwxs5qBNprmtCqbdlJvm0jWDhDRY/HAXa4yjQ8q7Z8xlf3uo928\n47MOdDIFDmmppC94llJItdHbSV/86NNq9As+9YBJFYFkKFw3Pcs8UKvXbx9df2ReOPK8WgBMmuIk\nSx19vNfOjj37+OngtjFTyMfv+fyBWYlpv3VN5bLCP1yzidkzKpf9jQbaaN18+X2yVNm0g3rbRNI6\nQJTcKwJmtcA9+5CpXPr2Y0YHlUZfa/7nf1JxbvzvuFMpcEhLJX3Bs5RCXnv4QRUZ8WsPPwhIrwuP\nZ+Abtu0KWCmhAAAPaElEQVQZ7TqbNudVVPzpspyJx8dyRK+vNq1ILeWAt2bDjorunrW6N8dfuxzs\nnt31YuUbWHqgjXbhLU+fcsPP1o9JZzvW2dfb4SJtmpvLT5/L5afPHXOsWpBKeq343+3UAyZlmqqk\n3SlwSEslfcGrLfoUdf0Fp7A4NkMtpNeFJ432ndzbwzcvPCV1zqu0tJS3a81dlJaucvXPD9dsYuee\nvUyb0sd7B2ZxaVgFVOvpuVb9f7U2EPdgsawrzjyWRyJdfJNeN/75RNXTwylre0u9GWr8M9m7v8RF\n1z+YOKNx3nTG05QnSF1/wSkVsxLE50HrVAoc0lJ5BtpFTZrUU1E3PFLy1AWTar121i9/1hl3szaA\nA2Oqf7bv2ce1d66jx15+8s+Stmoeio3sP6DXeHHEGd66m2vuXMf0Aydx0YI5qRl1PGBO6evlsFcf\nUFFlk0dST7P5Rx9c0QYD2VZPTPqdx4/9Ymjr6OJf0baFWoEhS+k3T8P9pEk9HHPoKyums0nqHdcu\n3aCzUuCQlkr6stSTUWZtZE+bMbeRiQaTSjNZq3CqnVfe3+g0FcOx3j77Y719drywv2ZbRTxgzps9\nncm9PWNWgEyS9DtO6mm2eecLFftuWb0xNfNM+53Hj02Z3FtxbbltodbfTVoje9aOAvH7P/HIaYkP\nH+04Oj6rwgOHmb0T+ArQC1zn7l+IHbfw+DnAHuBCd19jZkcANwG/R9DR7Rvu/pWi0yv1yfr0VO3L\nkvcLk7UXTaOZcJ6JBtdvG7sqYdxIycdMLR99vWb43Yv7K7bjs/uWpQW6aMBMmgE4a1VZWs+t+Cy+\nQ1t3p5ba0n7n8WMHTOphz96R0e1ym1itv5u00m/WjgLx+7/yzGO56qzjxjx8tOPo+KwKDRxm1gss\nA94BbARWmdlt7v5Y5LSzgbnhz6nA8vDf/cAVYRB5FbDazH4cu1baRFJVRHTq9HJG2qwvSzvMsxTv\nBZVlttT4IL8D+3rCKqBZuWfPreaEWIPsEdMPZMP2F8acV2vMR/kekjoCjPY227CDfSMl+nqMebMP\nTixdlHtufe+hZyqqbA6ffiDWY5k6KZTTW+13Hj/22sNehZnx+LPPV7SJxZ/+TzpyWsV7pJV+45N7\nVktvfN/DT+/kmxeekut+2l3RJY75wKC7DwOY2c3AuUA08z8XuMndHbjfzKaZ2WHu/izwLIC7P29m\na4GZsWulTSRVRcDYJ9RmfFmqzc/Uall7QUXFj72lf0ZFplJr9tx4Bp80Gj7ekeCbHzyZD9+0arTO\nH+C0Yw6p+MzSqk2SMtukBvjy8rzVem71x+r6J0/q5fyBWZk6KUC+HnQ/G9rOVWcdx7c/8qaK14iX\nvqLbtYJ2fHLPaunN+jfeznOF1VJ04JgJPBPZ3khQmqh1zkzCoAFgZrOBk4AHikikNK7aIDKozCyb\n8WVpZH6mIuQJhrXOrVUiSyrZJQXp+CCzV0zqHbOdtmZKWvBz4OGUdpryuJD47zg+x1l8UGP53GoZ\neFK14Wi7w5pNPPvbyu7HSfdw28ObK7b/+eHNfPyMY4H0qWJg7OSec2ZMTfz7zfo33slTrrd947iZ\nvRL4AfBJd++O0TNdqFqdOGRbHjaPdqsbzhMMa52bN7DEB5RV+yxqvW7a8Uee3llxbrkrb9KDQrl0\nUV5sa/X67VwwvI2+3h4Gjpw2pitw0t9DnjVL4u0O8bSMEX++iGzXmiomHvj+YN6sxAeWTg4IWRUd\nODYBR0S2Z4X7Mp1jZn0EQeM77n5LtTcxs6XA55qQXqlT9MtSSphJtpnGs2642tNw1oyi1rnlz6rc\ndrB6/XaW3TM4WiUVnx8pPsCs3mqRtCf/+HuWBwdO6etlz76XG6D7D53KxQvm8LW7n+T6nz1VMdU+\nBDPIlgdgpskyu0D58yhPYBkVXXEx7ryTZlYEmvJyvlB7qphOrlrKysyi9XFXu/vSxPO8So+LJiVi\nErAOOIMgGKwCPuDuj0bOeRdwGUGvqlOBr7r7/LC31Y3Adnf/ZM739SLvS8ZXUmBqVVVVfGBcfDqQ\not4nvqJfeX6kjy2Yw9/VOeNv3jRUm5Op7KqzjgOoOnAw6fykzy7pM46/bvzziLrizGOrLmWc9rdT\nKjkXRKa1T0tjNzIz3D3TH0+hJQ53329mlwF3EHTH/Za7P2pmS8LjK4DbCYLGIEF33MXh5W8FPgj8\n2sweCff9hbvfXmSapf2NZ1VAq6rJalVJledHguL6/lebkyneyyr6hB+fBSDP65cllbo2bK9cQ/3+\n4W0V21P6ejls2gGcd9JMDBKrumo1flebKqaTB+oVpfA2jjCjvz22b0Xk/w5cmnDdTxlbIykyrlpV\nTTame2nGKqki01B+z6S0rdmwg+Urh8b0wKr1+kmSFkqK2zdSWaNw6enHpHYfhuSeY+W2mPL8XNEV\nFy9eMIflK4cmxMJMebV947hII5r9tNiqeu74+yRVSRUtbebY8v744MArzzyWK848dnR0teMMb325\ntFBtCviytEWqDp7Sx/Y9le0m5dLOxQvmjE5BEx9gWQ5QSaXFpGBS/n98huPodROdAod0tVrTOuQN\nLK2qJkt6n1a8b5bPI5q2+NN9ebBbeVbZeKmh2hTwZWmLVE2fOnlM4Fh82tGJpZNyI3w0QCWVoNKC\nQLUp0DtpoF5RFDikq+UdFwETuxoi7+dRrTorOrJ8wdwZFSPL08R/P9ESSsm9okfUgrkzqk7fUZ4F\nOSqpBLV85VDVqrV49WD/jKmjS+pOdAoc0tUaHXA30eT9PKpVZ1Vbx6SW+O8rWkIplbxqb6ksbU9J\npbjRaWNii1gtmDuD6y84pbAea51OgUO6WqMD7iaavJ9Htaq7egNy2u+r2sjxpBUa8y7kFF3Eqp7x\nORNNoeM4xovGcXS/ZjV6j+eYkGZrxmfSrM+j0fEuWe+lVeNqJoK2GcchUpRmtU1001NlMz6TZn0e\njfY+y3ovqmocHwoc0pGUYYzVTp9JWrVSNJhUWz42672oqnF8KHBIR1KGMVa7fybVxkwklSwmwtTk\nnUyBQzqSMoyx2v0zyVKKKO+bCFOTdzIFDulIyjDGavfPpFopImlfu9/LRKfAISINydoDKq0U0a6l\nJEmm7rgi0hB1ie0Oebrjpq+oIiJSQzv15pLWUOAQkYYkLUMr3U1tHCLSkHbvzSXNpzYOERFRG4eI\niBRHgUNERHJR4BARkVwUOEREJBcFDhERyUWBQ0REclHgEBGRXBQ4REQkFwUOERHJRYFDRERyUeAQ\nEZFcFDhERCQXBQ4REclFgUNERHJR4BARkVwUOEREJBcFDhERyaXwwGFm7zSzJ8xs0Mw+k3DczOyr\n4fFfmdlA1mtFRKT1Cg0cZtYLLAPOBk4A3m9mJ8ROOxuYG/5cDCzPca2IiLRY0SWO+cCguw+7+17g\nZuDc2DnnAjd54H5gmpkdlvFaERFpsaIDx0zgmcj2xnBflnOyXCsiIi2mxnEREcllUsGvvwk4IrI9\nK9yX5Zy+DNcCYGZLgc/F9tWVYBGRicrMPLJ5tbsvTTzP3ZP2NysRk4B1wBkEmf4q4APu/mjknHcB\nlwHnAKcCX3X3+VmubQUzc3fviiike2lPupf2pHuprtASh7vvN7PLgDuAXuBb7v6omS0Jj68AbicI\nGoPAHmBx2rVFpldERGortMTRDfTU0Z50L+1J99Kemn0vahyv7erxTkAT6V7ak+6lPeleqlCJQ0RE\nclGJQ0REclHgEBGRXCZs4OimyRfrvRczO8LM7jGzx8zsUTP7ROtTPyatdf9ewuO9Zvawmf2odamu\nrsG/s2lm9n0ze9zM1prZm1ub+jFpbeRePhv+nf3GzL5rZge0NvVj0lrrXo43s1+Y2UtmdmWea1ut\n3ntp6Pvv7hPuh6B77xAwB5gM/BI4IXbOOcC/AQa8CXgg67UddC+HAQPh/19FMG6mI+8lcvzPgH8E\nftTJf2fhsRuBj4T/nwxM68R7AWYDTwEHhtvfAy5s83t5DXAK8HngyjzXdtC91P39n6gljm6afLHu\ne3H3Z919DYC7Pw+sZXznA2vk94KZzQLeBVzXykSnqPt+zOzVwNuAbwK4+15339nKxMc08rvZBewD\nDrRgYO8UYHML0x5X817c/Tl3X0WQ7lzXtljd99LI93+iBo5umnyxkXsZZWazgZOAB5qewuwavZcv\nA58GSkUlMKdG7udoYAtwfVj1dp2ZTS0ysTXUfS/uvh24BngaeBb4rbvfWWBaa2nkO9yJ3/+a8n7/\nJ2rgkAgzeyXwA+CT7r5rvNNTDzN7N/Ccu68e77Q0ySRgAFju7icBu4Fxr0+vh5n1A58iCIaHA1PN\n7E/GN1VSVs/3f6IGjkYmX8xybSs1ci+YWR/BH8133P2WAtOZRSP38lbgPWa2nqC4frqZfbu4pGbS\nyP1sBDa6e/kJ8PsEgWS8NHIvJwM/d/ct7r4PuAV4S4FpraWR73Anfv+rqvv7P16NOuP5Q/A0N0zw\nBFRuUHpd7Jx3UdnQ92DWazvoXgy4CfjyeP9OGr2X2DmLaI/G8YbuB7gPOC78/1Lgi514L8CJwKME\nbRtG0Oh/eTvfS+TcpVQ2KHfc9z/lXur+/o/LzbbDD0EPkHUEPRL+Mty3BFgS+VCXhcd/DZycdm0n\n3gtwGuDAr4BHwp9zOvFeYq+xiDYIHE34OzsReCj8/dwKTO/ge/lz4DHgN8A/AK9o83v5fYJS3y5g\nZ/j/g6pd24n30sj3X1OOiIhILhO1jUNEROqkwCEiIrkocIiISC4KHCIikosCh4iI5KLAISIiuShw\niIhILgocIiKSiwKHSJ3MbHa4yNINZrbOzP7RzM40s5+b2ZNmNt/MpprZt8zswXCW23Mj195nZmvC\nn7eE+xeZ2b2RBZy+Y2Y2vncqUkkjx0XqFE5FPUgwHfWjwCqC6Rs+DLwHWEwwzcZj7v5tM5sGPBie\n70DJ3V80s7nAd939ZDNbBPwz8DqCNSt+Blzl7j9t4a2JpJo03gkQ6XBPufuvAczsUeAn7u5m9muC\nle9mEczaW16y8wDgSIKg8L/N7ERgBDg28poPuvvG8DUfCV9HgUPahgKHSGNeivy/FNkuEXy/RoA/\ncPcnoheZ2VLgP4A3ElQZv1jlNUfQ91TajNo4RIp1B3B5uZ3CzE4K978aeNbdS8AHCdaOFukIChwi\nxfproA/4VViV9dfh/q8DF5jZL4HjCVb4E+kIahwXEZFcVOIQEZFcFDhERCQXBQ4REclFgUNERHJR\n4BARkVwUOEREJBcFDhERyUWBQ0REcvn/LoeoUWOZMN0AAAAASUVORK5CYII=\n", + "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2380,7 +2365,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 38, "metadata": { "collapsed": false }, @@ -2388,18 +2373,18 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 39, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n9OnTh2bNmtGmTRsuu+wyioqKSt/PzLjvvvvYdddd2W677fjDH/7A3Llz6dOnD02bNmXo0KEbrZ8J\nSggi0mBcccUVXHHFFaxatYq5c+dy8sknA/Dmm28CsGLFClavXk2fPn0YOXIkI0eO5LXXXuOrr75i\n9erVXHbZZQB89tlnXHLJJTz++OMsXryYlStXlna8s97YsWMZMmQIK1as4LTTTiMej3PXXXexfPly\npkyZwqRJk7jvvvs22ubll1/mo48+4t133+WOO+7gvPPO4/HHH+ebb75hxowZjBo1KqPlo4QgIvXe\n4MGDadasWelwySWXlLteTk4Oc+bMYfny5eTn57P//vtv8T0ff/xxrr76ajp37kx+fj5/+ctfGD16\nNCUlJTz11FMce+yx9OvXj9zcXG6++ebNemnr06cPgwcPJhaL0bhxY/bee2/2339/EokEHTt25MIL\nL+SNN97YaJvrrruOJk2a0K1bN7p3786RRx5J586dadq0KYMGDWLatGnVL6wKKCGISL337LPPsmLF\nitJh01/e640YMYJZs2bRpUsX9tlnH55//vktvueiRYvo0KFD6XSHDh0oKSlhyZIlLFq0iPbt25cu\n22abbWjRosVG25ddDjBr1iyOOeYYWrduTZMmTbjxxhtZvnz5Ruu0atWqdLxx48abTa9evbqCUqg+\nJQQRaTB22203Ro0axdKlS7n++usZMmQIa9asKbcP5rZt2zJ//vzS6W+++YZEIkGrVq1o06YNCxYs\nKF22bt06vv/++4223/Q9L774Yrp06cLs2bNZtWoVf/7zn+tcHxNKCCLSYDz22GMsW7aMWCxGs2bN\nAIjFYuy4447EYjG++uqr0nVPPfVU7rrrLr7++mtWr17NjTfeyNChQ0kkEgwZMoRx48YxefJkioqK\nKCgoqPTL/aeffqJJkybk5+fzxRdfVNjvc1Qa7g23IlIt9fG5kPHjx3P11Vezdu1aOnTowOjRo2nc\nuDEAw4YNo2/fvhQXFzN+/HjOPfdcFi1aRP/+/fn555854ogjuOeee4DgYbd77rmHU045hTVr1nDl\nlVfSsmVL8vLytrjvO++8kwsuuIA77riDnj17MnToUF599dVaOe50qQtNybiqPmimB9PqHnWhWbHV\nq1fTrFkzZs+eTadOnSKLQ11oiohEYNy4caxdu5Y1a9ZwzTXX0KNHDzp27Bh1WNWiKiOpEZluxkCk\n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\nSUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2410,29 +2395,29 @@ "# Plot a histogram and kernel density estimate for the scattering rates\n", "scatter['mean'].plot(kind='hist', bins=25)\n", "scatter['mean'].plot(kind='kde')\n", - "pylab.title('Scattering Rates')\n", - "pylab.xlabel('Mean')\n", - "pylab.legend(['KDE', 'Histogram'])" + "plt.title('Scattering Rates')\n", + "plt.xlabel('Mean')\n", + "plt.legend(['KDE', 'Histogram'])" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" + "pygments_lexer": "ipython3", + "version": "3.5.1" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/post-processing.ipynb b/docs/source/pythonapi/examples/post-processing.ipynb index 36cf63c6a6..de92c2bcbf 100644 --- a/docs/source/pythonapi/examples/post-processing.ipynb +++ b/docs/source/pythonapi/examples/post-processing.ipynb @@ -339,7 +339,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAALKSURB\nVGje7dpLcqQwDAbgHHE2YeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmN\nP+HDhw8fPnz48Kf6VH9G+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4\nzPji99z0/AJ4n1lfvJ6fnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6\npA0wfln+ho/fwgYYn19C/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tN\nDbSGz7T0SBEWw4vLXzbQ6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X5\n8wZaxWd1+fMGiuFvir8bvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV\n873hB8UnM3xzANtf8nb4dwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7\nT/ppARBvp48UwJnelT5SACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4/\n/Jve+fhsH6Ctv7n8PTzjvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V\n32/o9+fl389Xnx+g5x/o+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6\n/4Le/6D3T/D9V67Y/ZsVQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/\ngPs/0P4TtP8F7r9J3AIO9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTu\nf4X7b+H+X7T/+BPuf3aM8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIw\nMTYtMDQtMTNUMTE6MzI6NTUtMDQ6MDDR46xaAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA0LTEz\nVDExOjMyOjU1LTA0OjAwoL4U5gAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AFBRQpN8J6/ygAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDUtMDVUMTQ6NDE6\nNTUtMDY6MDCnHFu9AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA1LTA1VDE0OjQxOjU1LTA2OjAw\n1kHjAQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -445,12 +445,11 @@ " 888\n", " 888\n", "\n", - " Copyright: 2011-2015 Massachusetts Institute of Technology\n", - " License: http://mit-crpg.github.io/openmc/license.html\n", + " Copyright: 2011-2016 Massachusetts Institute of Technology\n", + " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: eeb5091ca3a34cc85df73a3318cae2b6c7097413\n", - " Date/Time: 2016-04-13 11:32:56\n", - " MPI Processes: 1\n", + " Git SHA1: df280b60eb1c6d7b7f842e05ede734a4883a0fc8\n", + " Date/Time: 2016-05-05 14:41:55\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -586,20 +585,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.8100E-01 seconds\n", - " Reading cross sections = 8.6000E-02 seconds\n", - " Total time in simulation = 2.4400E+02 seconds\n", - " Time in transport only = 2.4395E+02 seconds\n", - " Time in inactive batches = 8.3260E+00 seconds\n", - " Time in active batches = 2.3567E+02 seconds\n", - " Time synchronizing fission bank = 1.6000E-02 seconds\n", - " Sampling source sites = 6.0000E-03 seconds\n", - " SEND/RECV source sites = 7.0000E-03 seconds\n", + " Total time for initialization = 4.4900E-01 seconds\n", + " Reading cross sections = 1.2100E-01 seconds\n", + " Total time in simulation = 3.4132E+02 seconds\n", + " Time in transport only = 3.4128E+02 seconds\n", + " Time in inactive batches = 1.0748E+01 seconds\n", + " Time in active batches = 3.3057E+02 seconds\n", + " Time synchronizing fission bank = 1.1000E-02 seconds\n", + " Sampling source sites = 1.1000E-02 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", " Time accumulating tallies = 1.9000E-02 seconds\n", - " Total time for finalization = 1.7400E-01 seconds\n", - " Total time elapsed = 2.4458E+02 seconds\n", - " Calculation Rate (inactive) = 6005.28 neutrons/second\n", - " Calculation Rate (active) = 1909.46 neutrons/second\n", + " Total time for finalization = 1.5600E-01 seconds\n", + " Total time elapsed = 3.4196E+02 seconds\n", + " Calculation Rate (inactive) = 4652.03 neutrons/second\n", + " Calculation Rate (active) = 1361.27 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -674,11 +673,11 @@ "text": [ "Tally\n", "\tID =\t10000\n", - "\tName =\t\n", + "\tName =\tflux\n", "\tFilters =\t\n", " \t\tmesh\t[10000]\n", "\tNuclides =\ttotal \n", - "\tScores =\t[u'flux', u'fission']\n", + "\tScores =\t['flux', 'fission']\n", "\tEstimator =\ttracklength\n", "\n" ] @@ -809,11 +808,11 @@ "text": [ "Tally\n", "\tID =\t10001\n", - "\tName =\t\n", + "\tName =\tflux\n", "\tFilters =\t\n", " \t\tmesh\t[10000]\n", "\tNuclides =\ttotal \n", - "\tScores =\t[u'flux']\n", + "\tScores =\t['flux']\n", "\tEstimator =\ttracklength\n", "\n" ] @@ -856,7 +855,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 24, @@ -865,9 +864,9 @@ }, { "data": { - "image/png": "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\nRK5CYII=\n", + "image/png": "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\nAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -897,9 +896,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEACAYAAACgS0HpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEupJREFUeJzt3X+IZWd9x/H3N5sfatQ1WnZuuxszsSFxprSVgNHWlhZc\ntkkKmzQLQXegSVNoIf5CRczaUrEUNgpiLXYFq7WrZBo2Lm0CtSaEFKELNmp+aWaMY3U3m9G5sRoC\nUZruut/+cc/u3p25M/Ps/X1m3y+45Mxzz7nnO8/ezWef8+M5kZlIkrSe80ZdgCSpHgwMSVIRA0OS\nVMTAkCQVMTAkSUUMDElSkXUDIyI+FxHNiHiire2SiHggIp6KiPsjYnPbe3siYiEi5iNiR1v71RHx\nRER8NyL+tv+/iiRpkEpGGJ8H/mBZ2x3Ag5l5FfAQsAcgIqaBm4Ep4DpgX0REtc2ngT/NzCuBKyNi\n+WdKksbYuoGRmf8JPLes+QZgf7W8H7ixWt4J3J2ZxzPzMLAAXBMRDeAVmfn1ar0vtG0jSaqBbs9h\nbMnMJkBmLgFbqvatwNG29Rartq3AM23tz1RtkqSa6NdJb+cXkaQN7vwut2tGxERmNqvDTc9W7YvA\npW3rbavaVmvvKCIMIEnqQmbG+mt1p3SEEdXrpPuAW6vlW4B729rfFhEXRsTlwBXAw9Vhq+cj4prq\nJPgft23TUWbW9nXTTTeNvIZzsXbrH/3L+kf7GrR1RxgRMQv8PvCaiHga+DBwJ3BPRNwGHKF1ZRSZ\nORcRB4A54Bhwe57+Ld4B/BPwEuDLmfmV/v4qkqRBWjcwMnP3Km9tX2X9vcDeDu3fBH79rKqTJI0N\n7/QegKmpqVGX0LU61w7WP2rWv7EZGAMwPT096hK6VufawfpHzfo3NgNDklTEwJAkFTEwJElFDAxJ\nUhEDQ5JUxMBQsUZjkohY8Wo0JkddmqQhMDBUrNk8QmueyTNfzeaSQSKdA7qdfFBq8yKdJixuNgc2\nB5qkEXCEIUkqYmBIkooYGJKkIgaGJKmIgSFJKmJgSJKKGBiSpCIGhjrqdFe3pHObN+6po9N3dbcz\nNKRzmSMMSVIRA0OSVMTAkCQVMTAkSUUMDElSEQNDklTEwJAkFTEwJElFDAxJUhEDQ5JUxMCQJBUx\nMCRJRQwMSVIRA0OSVMTAkCQVMTAkSUUMDA3QRSue2tdoTI66KEld6ikwIuK9EfHtiHgiIu6KiAsj\n4pKIeCAinoqI+yNic9v6eyJiISLmI2JH7+VrvL1I66l9p1+tJ/lJqqOuAyMifgV4F3B1Zv4Grce9\nvh24A3gwM68CHgL2VOtPAzcDU8B1wL7wQdGSVBu9HpLaBFwcEecDLwUWgRuA/dX7+4Ebq+WdwN2Z\neTwzDwMLwDU97l+SNCRdB0Zm/hD4OPA0raB4PjMfBCYys1mtswRsqTbZChxt+4jFqk0j1GhMnnGO\nYWZmBgd+kjo5v9sNI+JVtEYTlwHPA/dExAytg9Xtlv9cZNeuXaeWp6ammJ6e7rLS4Tt06NCoSyjW\nOqfQ6Y9ocKExOzs7sM+uU993Yv2jVbf65+bmmJ+fH9r+ug4MYDvw/cz8KUBE/Avw20AzIiYysxkR\nDeDZav1F4NK27bdVbR0dPHiwh9JGb/fu3aMuocjMzMzQ9znovqlL36/G+kerzvUP+uhAL+cwngbe\nHBEvqU5evxWYA+4Dbq3WuQW4t1q+D3hbdSXV5cAVwMM97F+SNERdjzAy8+GI+BLwKHCs+u9ngFcA\nByLiNuAIrSujyMy5iDhAK1SOAbdnZleHqyRJw9fLISky8yPAR5Y1/5TW4apO6+8F9vayT0nSaHin\ntySpiIEhSSpiYEiSihgYkqQiBoYkqYiBIUkqYmCcQ5bPG+WcUZLORk/3YaheOs8bZWhIKuMIQ5JU\nxMCQJBUxMCRJRQwMSVIRA0OSVMTAkCQVMTAkSUUMDElSEQNDklTEwJAkFTEwJElFDAwN2UUrJkCM\nCBqNyVEXJmkdTj6oIXuRlRMgQrPpJIjSuHOEIUkqYmBIkooYGJKkIgaGJKmIgSFJKmJgSJKKGBiS\npCIGhiSpiIEhSSpiYEiSihgYkqQiBoYkqYiBIUkqYmBIkor0FBgRsTki7omI+Yh4MiLeFBGXRMQD\nEfFURNwfEZvb1t8TEQvV+jt6L1+SNCy9jjA+CXw5M6eA3wS+A9wBPJiZVwEPAXsAImIauBmYAq4D\n9kWED0GQpJroOjAi4pXA72bm5wEy83hmPg/cAOyvVtsP3Fgt7wTurtY7DCwA13S7f0nScPUywrgc\n+J+I+HxEPBIRn4mIlwETmdkEyMwlYEu1/lbgaNv2i1WbJKkGegmM84Grgb/PzKuBn9E6HLX8+Zsr\nn8cpSaqdXp7p/QxwNDO/Uf18kFZgNCNiIjObEdEAnq3eXwQubdt+W9XW0a5du04tT01NMT093UOp\nw3Xo0KFRl1BLs7OzPX9G3fve+kerbvXPzc0xPz8/tP11HRhVIByNiCsz87vAW4Enq9etwEeBW4B7\nq03uA+6KiE/QOhR1BfDwap9/8ODBbksbC7t37x51CSvMzMyMuoQ19avPxrHvz4b1j1ad6x/0dUS9\njDAA3k0rBC4Avg/8CbAJOBARtwFHaF0ZRWbORcQBYA44BtyemR6uUuWiFV/2iYnLWFo6PJpyJK3Q\nU2Bk5uPAGzu8tX2V9fcCe3vZpzaqF1l+uqvZ9KpraZx4p7ckqYiBIUkqYmBIkooYGJKkIgaGJKmI\ngSFJKmJgSJKKGBiSpCIGxgbUaEwSEStektSLXqcG0RhqNo/QeZJgQ0NS9xxhSJKKGBiSpCIGhiSp\niIEhSSpiYEiSihgYkqQiBoYkqYiBIUkqYmBIkooYGJKkIgaGJKmIgSFJKmJgaIxd1HHW3UZjctSF\nSeckZ6vVGHuRTrPuNpvOuiuNgiMMSVIRA0OSVMTAkCQVMTAkSUUMDElSEQNDklTEwJAkFTEwJElF\nDAxJUhEDQ5JUxMCQJBUxMGqu0ZhcMTmfJA1Cz4EREedFxCMRcV/18yUR8UBEPBUR90fE5rZ190TE\nQkTMR8SOXvctaDaP0Jqgr/0lSf3XjxHGe4C5tp/vAB7MzKuAh4A9ABExDdwMTAHXAfvCfw5LUm30\nFBgRsQ24HvhsW/MNwP5qeT9wY7W8E7g7M49n5mFgAbiml/1Lkoan1xHGJ4APcOZxkInMbAJk5hKw\npWrfChxtW2+xapMk1UDXgRERfwg0M/MxYK1DSx5Ul6QNoJcn7r0F2BkR1wMvBV4REV8EliJiIjOb\nEdEAnq3WXwQubdt+W9XW0a5du04tT01NMT093UOpw3Xo0KFRl7Dhzc7Odmyve99b/2jVrf65uTnm\n5+eHt8PM7PkF/B5wX7X8MeCD1fIHgTur5WngUeBC4HLge0Cs8nlZZ3fdddfQ9gUk5LJXp7ZhrzvY\n/Y1D3w+C9Y9W3euv/m705f/rnV6DeKb3ncCBiLgNOELryigycy4iDtC6ouoYcHv1C0qSaqAvgZGZ\nXwW+Wi3/FNi+ynp7gb392Kckabi801uSVMTAkCQVMTAkSUUMDElSEQNDNXTRihl6G43JURclbXiD\nuKxWGrAXWT6BQLPpPJbSoDnCkCQVMTAkSUUMDElSEQNDklTEwJAkFTEwJElFDAxJUhEDQ5JUxMCQ\nJBUxMCRJRQwMSVIRA0OSVMTAkCQVMTAkSUUMDElSEQNDklTEwKiJRmNyxVPmInxokKTh8Yl7NdFs\nHmH5U+ZaDA1Jw+EIQ5JUxMDQBnEREcHMzMwZh+wajclRFyZtGB6S0gbxIp0O2TWbHrKT+sURhiSp\niIEhSSpiYEiSihgYkqQiBoYkqYiBIUkqYmBog7toxXQq3pshdcf7MLTBrbw/w3szpO44wpAkFek6\nMCJiW0Q8FBFPRsS3IuLdVfslEfFARDwVEfdHxOa2bfZExEJEzEfEjn78ApKk4ehlhHEceF9m/hrw\nW8A7IuL1wB3Ag5l5FfAQsAcgIqaBm4Ep4DpgXzg/tyTVRteBkZlLmflYtfwCMA9sA24A9ler7Qdu\nrJZ3Andn5vHMPAwsANd0u39J0nD15RxGREwCbwC+BkxkZhNaoQJsqVbbChxt22yxatMynR6WJEmj\n1vNVUhHxcuBLwHsy84WIWD5laKen/qxr165dp5anpqaYnp7uvsghO3ToUE/bd35YkqHRT7Ozs6Mu\noaNevzujZv3DNTc3x/z8/ND211NgRMT5tMLii5l5b9XcjIiJzGxGRAN4tmpfBC5t23xb1dbRwYMH\neylt5Hbv3t31tjMzM32sRJ308uczaONcWwnrH51BH43o9ZDUPwJzmfnJtrb7gFur5VuAe9va3xYR\nF0bE5cAVwMM97l+SNCRdjzAi4i3ADPCtiHiU1jGUDwEfBQ5ExG3AEVpXRpGZcxFxAJgDjgG3Z2ZX\nh6skScPXdWBk5iFg0ypvb19lm73A3m73KUkaHe/0liQVMTAkSUUMDElSEQNDklTEwJAkFTEwJElF\nDAydg1Y+hc8n8Unr84l7OgetfAof+CQ+aT2OMCRJRQwMSVIRA0OSVMTAkCQVMTAkSUUMjBHq9ChW\nH8cqaVx5We0IdX4UK/g4VknjyBGGJKmIgSFJKmJgSJKKGBiSpCIGhnTKykkJnZBQOs2rpKRTVk5K\n6ISE0mmOMCRJRQwMSVIRA0OSVMTAGAKnAKkzn84nneRJ7yFwCpA68+l80kmOMCRJRQwMSVIRA0OS\nVMTAkCQVMTCkrnS+emrTpou9okoblldJSV3pfPXUiROxot0rqrRROMLos0ZjkpmZGe+3kLThOMLo\ns873XBgakurPEYYkqcjQAyMiro2I70TEdyPig8Pef7843YfKOb2INoahHpKKiPOATwFvBX4IfD0i\n7s3M7wyzjn5wug+VW216kZes+EfGxRe/ht27dw+prv6bm5sbdQk9qXv9gzbsEcY1wEJmHsnMY8Dd\nwA1DrkEaEyeD5PTrZz97odajkfn5+VGX0JO61z9owz7pvRU42vbzM7RCZOSWlpbYvv2PeOGFn5/R\nfsEFm3juuWf5yU8WR1SZzi3lo5GJictYWjo8nLIkvErqlMXFRebnv8mmTY0z2n/xix9z4sT/4pVP\nGq1Oj49dGSIA5533Mk6c+Pm6bWu1G0bqZNiBsQi8tu3nbVXbCqM6gXzixNFV3ulUz2o19rrusPfn\n79G/dUexvzN1CoBObWu1N5tHuv47WPeLP+pe/yBFZqcTtwPaWcQm4ClaJ71/BDwMvD0zPXAoSWNu\nqCOMzPxFRLwTeIDWCffPGRaSVA9DHWFIkuprIJfVltycFxF/FxELEfFYRLxhvW0j4mMRMV+tfzAi\nXtn23p7qs+YjYked6o+IyyLi5xHxSPXaN4a1/3VEPB4Rj0bEVyKi0fZeHfq+Y/397vtB1d/2/vsj\n4kREvLqtbez7f7X669L/EfHhiHimrc5r294b+/5frf6u+j8z+/qiFULfAy4DLgAeA16/bJ3rgH+r\nlt8EfG29bYHtwHnV8p3A3mp5GniU1uG1yWr7qFH9lwFPjHnfv7xt+3cBn65Z369Wf9/6fpD1V+9v\nA74C/AB4ddU2VYf+X6P+WvQ/8GHgfR32V4v+X6P+s+7/QYwwSm7OuwH4AkBm/hewOSIm1to2Mx/M\nzBPV9l+j9QUE2AncnZnHM/MwsEBv93YMu37o3zW6g6r9hbbtLwZO/h516fvV6of+Xh89kPornwA+\n0OGzxr7/16gf6tP/neqsU//3duldZRCB0enmvK2F65RsC3Ab8OVVPmtxlW1KDav+f2/7ebIaEv5H\nRPxOt4UX7r+r2iPibyLiaWA38FerfNbY9v0q9UP/+n5g9UfETuBoZn5rnc8ay/5fo36oQf9X3lkd\nAvpsRGxe5bPGsv8r7fW/qq39rPp/XGarLU65iPgL4Fhm/vMA6zlb3dQ/WzX9EHhtZl4NvB+YjYiX\nD6DGVUsqWSkz/zIzXwvcReuwzrjopf4fMdq+h3Xqj4iXAh+idVhhHHVT/8ltRv3db69lLfuA12Xm\nG4Al4OODLems9FL/WX//BxEYJTfnLQKXdlhnzW0j4lbgelr/Slzvs7o11Poz81hmPlctPwL8N3Dl\nuNXeZha4aZ3P6taw6t8FkJn/18e+H1T9v0rr+PjjEfGDqv2RiNhSuL9xrP+bEbGlz9/9QdVPZv44\nq4P+wD9w+rBTLb7/Hep/Y9V+9t//bk/QrHHiZhOnT75cSOvky9Syda7n9ImbN3P6xM2q2wLXAk8C\nr1n2WSdPvF4IXE7vJ56GXf8vcfpk+OtoDStfNWa1X9G2/buAAzXr+9Xq71vfD7L+Zdv/ALikTv2/\nRv216H+g0bb9e4HZOvX/GvWfdf939YsV/OLX0rqjewG4o2r7c+DP2tb5VPULPg5cvda2VfsCcAR4\npHrta3tvT/VZ88COOtVP61/r367avgFcP4a1fwl4ovoS3gv8cs36vmP9/e77QdW/7PO/T3WVUV36\nf7X669L/tE4yn/z+/CswUaf+X63+bvrfG/ckSUXG5aS3JGnMGRiSpCIGhiSpiIEhSSpiYEiSihgY\nkqQiBoYkqYiBIUkq8v85hnCHzxMbMwAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1013,7 +1012,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 28, @@ -1022,9 +1021,9 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEWCAYAAABxMXBSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGt5JREFUeJzt3X20ZFV55/Hvj24DaIs9uiamA+1AtKPpvIiMQByzjIZR\nAaOdFUkaX+KCmESypM3rmmgmGZqYSTRvo6CBNoKKOja+JiSrEzQddZIJIK/B0GBoMQ6QNsQQpRVR\nOz7zR50rxe1bt87pe8+9Vfd+P2vVunXO3qfqqd2n66lzzj57p6qQJKmtw5Y7AEnSdDFxSJI6MXFI\nkjoxcUiSOjFxSJI6MXFIkjpZkYkjyfbljmHa2YYLZxsuDttx4Ra7DbMS7+NIUlWV5Y5jmtmGC2cb\nLg7bceEWuw1X5BFH3w41e3fZbr66XcvarFvqX3ULeb+2246rN6q87fq2bd2nvvfFQ23DUWXui93K\nJ7UNPeJYwtfvst18dbuWtVk3bnmxLeT12247rt6o8rbrx7XrUvxS7ntfPNQ2HFXmvtitfFLbcMUm\njuWOQZKmTdvksrbvQJbLSkyIktSXpP0Bidc4JEmdmDgkSZ2YOCRJnZg4JEmdmDgkSZ2YOCRJnZg4\nJEmdrNj7OCStbjfd+QUu3H07X/rqgYPK1h2+lm2nbOL4jeuXIbLpZ+KQtCJduPt2dt92z7x1Ljnr\nxCWKZmUxcUhakWaONB55xFo2bzjqm+v37LuP/Q8cmPNIRO2YOCStaJs3HMXlr3jaN5e37riKaz5z\n7zJGNP28OC5J6sTEIUnqxFNVkqbWfD2n9uy7bxkiWh1MHJKmVpueU+sOn/trbs+++9i646o569tV\nd34mDkkTrc1RxeyeUzPWHb6WV52y6aB1APsfODDyIvnu2+7h5OMePefrmVRMHJImXJujipOOfXTr\nezK2NYlkrkQ0nEjm63m12u//MHFImmij7seYMddRxXyO37h+5Bf/uKMb7/8YMHFImgqz78fow3xJ\nxfs/HmR3XElSJyYOSVInJg5JUicmDklSJyYOSVInJg5JUicmDklSJyYOSVInvSeOJKcm+VSSvUle\nPUd5klzQlN+c5IShstck2ZPk75O8J8kRfccrSZpfr4kjyRrgzcBpwGbgRUk2z6p2GrCpefwMcFGz\n7bHN8n+uqu8B1gBn9hmvJGm8vo84TgL2VtUdVfU1YCewZVadLcBlNXA1sD7JBuA+4OvAkUnWAg8H\n/qnneCVJY/Q9VtXRwJ1Dy3cBJ7eoc3RVXZfk94D/B3wF+HBVfbjPYCUtn1EDDDoh0+SZ2EEOkzwe\n+AXgOOALwPuSvLSq3jVH3e3AeUsboaTFNG749FETMmnxJKmhxfOravtc9fr+l7gb2Di0fEyzrk2d\nZwB/W1X/ApDkg8B/AQ5KHM2H2z6zPOvDS5oC8w2f3nXodB2aqkqben0njmuBTUmOY5AMzgRePKvO\nFcC5SXYyOI31xaral+RTwP9I8nAGp6pOAa7rOV5Jy2wphk/XwvSaOKrqQJJzgSsZ9Iq6tKpuSXJO\nU34xsAs4HdgL3A+c3ZTdlOQyBsniG8CNwFv6jFeSNF7vJw2raheD5DC87uKh5wW8csS2rwde32uA\nkqROvHNcktSJiUOS1ImJQ5LUiYlDktSJiUOS1ImJQ5LUiYlDktSJiUOS1ImJQ5LUiYlDktSJiUOS\n1ImJQ5LUiYlDktSJiUOS1ImJQ5LUiYlDktSJiUOS1ImJQ5LUiYlDktSJiUOS1ImJQ5LUiYlDktSJ\niUOS1ImJQ5LUiYlDktSJiUOS1ImJQ5LUiYlDktSJiUOS1Mna5Q5AkqbJnn33sXXHVQ9Zt+7wtWw7\nZRPHb1y/TFEtLROHJLWw7vDB1+X+Bw5wzWfunbPOJWeduJQhLRsThyS1sO2UTQB86asHHrJ+z777\n2P/AgYPWr2QmDklq4fiN6+c8oti646qRRyArlRfHJUmdmDgkSZ30njiSnJrkU0n2Jnn1HOVJckFT\nfnOSE4bK1id5f5Lbktya5Gl9xytJml+viSPJGuDNwGnAZuBFSTbPqnYasKl5/Axw0VDZG4G/qKon\nAU8Gbu0zXknSePMmjiR7kvxakscf4uufBOytqjuq6mvATmDLrDpbgMtq4GpgfZINSR4FPAO4BKCq\nvlZVXzjEOCRJi2TcEceLgEcAH07yiSS/kOTbO7z+0cCdQ8t3Neva1DkO+BfgbUluTPLWJI/o8N6S\npB7Mmziq6u+q6jVV9XjgVcDjgKuTfDTJT/cc21rgBOCiqnoK8GXgoGskkqSl1foaR1VdXVW/ALwM\nWA+8qcVmdwMbh5aPada1qXMXcFdVXdOsfz+DRHKQJNuT1MyjRVySpFmGv0eTbB9Vr1XiSHJikj9I\n8llgO7ADaHPK6lpgU5LjknwLcCZwxaw6VwAva3pXfT/wxaraV1WfA+5M8sSm3inAnrnepKq2V1Vm\n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\n1LFE4vGQAAAAAElFTkSuQmCC\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAETCAYAAAAYm1C6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGbNJREFUeJzt3XuUpHV95/H3B5GLRHHGPUuUAYyAMENMCBsB1yTrJYaL\ni5NlzAozyopZIdkgrp41JG5cY/R4SaJR1ASIrArLOKIjB1RC8ALkZFyRq7cZwhBXwsVgzAxGR4OI\n3/2jqoei6O6qfqae7qru9+ucOl31e35P1bd/1PSH5/Z7UlVIkjRXuy10AZKkyWSASJIaMUAkSY0Y\nIJKkRgwQSVIjBogkqZHWAyTJ8UluS3J7knOmWX5Yki8k+dckr53LupKkhZM2rwNJshtwO/B84F7g\nBuCUqrqtp8+/AQ4Cfh3YXlXvGnZdSdLCaXsL5Ghga1XdWVUPAhuA1b0dquo7VXUT8OO5ritJWjht\nB8j+wF09r+/utrW9riSpZbsvdAGjkMT5WCRpjqoqu7J+21sg9wAH9rxe0W0b+bpV1erjjW98Y+vr\nDuo32/Lplg3T1v/65JNPXhRjuSvjOZf2pTKeo/5uOp6jHc8mbaPQdoDcAByS5KAkewCnAFfM0r83\nDee6bque85zntL7uoH6zLZ9u2TBtu/J7NTUfYzlM35mWz6V9qYznqL+bM7U7noOXN/23PsznzlWr\nZ2FB51Rc4D10wurCqnp7kjOBqqoLkuwH3Ag8HvgJ8H1gVVV9f7p1Z/iMavv3WCrWrFnDxo0bF7qM\nRcPxHC3Hc3SSULu4C6v1YyBVdRVwWF/b+T3P7wMOGHZdtWvlypULXcKi4niOluM5XrwSXY+watWq\nhS5hUXE8R8vxHC8GiCSpEQNEktSIASJJasQAkSQ1YoBIkhoxQCRJjRggkqRGDBBJUiMGiCSpEQNE\nktSIASJJasQAkSQ1YoBIkhoxQCRJjRggkqRGDBBJUiMGiKQlYflySKZ/LF++0NVNptZvaStJ42D7\ndqiafll26c7gS5dbIJKkRgwQSVIjBogkqREDRJLUiAEiadGY7UyrZcsWurrFxwCRNFFmCwnonGk1\n3WPbtpnfc9kyT/FtwgCRNFGmTseda0jMZtu2md8TDJeZeB2IJM1itlBa6tePuAUiSWrEAJEkNWKA\nSJIaMUAkSY0YIJKkRgwQSVIjBogkqREDRJLUiAEiSWqk9QBJcnyS25LcnuScGfqcm2RrkluTHNnT\n/pokX0vylSSXJNmj7XolScNpNUCS7Aa8DzgOOAI4NcnhfX1OAA6uqkOBM4Hzuu1PAV4FHFVVP0dn\n2pVT2qxXkjS8trdAjga2VtWdVfUgsAFY3ddnNXARQFVdD+ybZL/usscA+yTZHXgccG/L9UqShtR2\ngOwP3NXz+u5u22x97gH2r6p7gXcC/9Btu7+qPttirZKkORjb2XiTPJHO1slBwHeBjydZW1Xrp+u/\nZs2anc9XrlzJqlWr5qXOxWbTpk0LXcKi4ng2d8YZa9ixY8++1rXss88DrF+/cUFqerS1rF8/7Z+k\nsbN582a2bNky0vdsO0DuAQ7seb2i29bf54Bp+vwq8I2q2gaQ5BPAvwem/a+1ceO4fKEm39q1axe6\nhEXF8Wxm3bqH78cxZf369d3xHI8xXbducv/7ZgRz0be9C+sG4JAkB3XPoDoFuKKvzxXAaQBJjqWz\nq+o+Oruujk2yVzq/6fOB0canJKmxVrdAquqhJGcBV9MJqwurakuSMzuL64KqujLJiUnuAHYAp3fX\n/VKSjwO3AA92f17QZr2SpOG1fgykqq4CDutrO7/v9VkzrPsm4E3tVSdJasor0SVJjRggkqRGDBBJ\nUiMGiCSpEQNEktSIASJJasQAkSQ1YoBIkhoxQCRJjRggkqRGDBBJUiMGiCSpEQNEktSIASJJasQA\nkSQ1YoBIkhoxQCRJjRggkqRGDBBJUiMGiCSpEQNEktSIASJJasQAkSQ1YoBIkhoxQCRJjRggkqRG\nZg2QJJuT/EGSg+erIEnSZBi0BXIqsA9wdZIvJXlNkqfMQ12SpDE3a4BU1Zer6ver6mDgbOBA4ItJ\nrknyynmpUJI0loY+BlJVX6yq1wCnAU8E3tdaVZKksTdUgCR5ZpJ3JbkT+EPgfMBdWZKWtGXLIHn0\nY/nyha5sfuw+28IkbwVeAmwDNgDPrqq756MwSRp327ZN357Mbx0LZdYAAf4VOL6qts5HMZKkyTHo\nIPofVdXWJI9L8oYkfwmQ5NAk/3F+SpQkjaNhD6J/EHgAeFb39T3AW1qpSJI0EYYNkIOr6o+BBwGq\n6gfAUHv5khyf5LYktyc5Z4Y+5ybZmuTWJEf2tO+b5GNJtiT5epJjhqxXktSyYQPkR0n2Bgqge2X6\nA4NWSrIbndN9jwOOAE5NcnhfnxPoBNShwJnAeT2L3wNcWVUrgZ8HtgxZrySpZYMOok95I3AVcECS\nS4BnAy8fYr2jga1VdSdAkg3AauC2nj6rgYsAqur67lbHfsAPgV+uqpd3l/0Y+Jch65UktWyoAKmq\nzyS5GTiWzq6rV1fVd4ZYdX/grp7Xd9MJldn63NNtewj4TpIP0tn6uLH7uT8cpmZJUrsGTaZ41NQD\nOAj4FnAvcGC3rU27A0cB76+qo4AfAL/X8mdKkoY0aAvkRuBrwNTWRu+B8wKeN2D9e+jMnzVlRbet\nv88BM/S5q6pu7D7/ODDtQXiANWvW7Hy+cuVKVq1aNaA0TWfTpk0LXcKi4njuirWsX7/+ES2TM56P\nrn2hbd68mS1bRnsYeVCAvBZ4MZ3jERuAy6rq+3N4/xuAQ5JMbb2cQmeG315XAL8DfDTJscD9VXUf\nQJK7kjy9qm4Hng9snumDNm7cOIeyNJu1a9cudAmLiuPZzLp104/dJIznTLWPk4zgcvlZA6Sq3g28\nO8nT6Pzx/1x3Pqy3VtWtg968qh5KchZwNZ3dZRdW1ZYkZ3YW1wVVdWWSE5PcAewATu95i7OBS5I8\nFvhG3zJJ0gIa9iD6N5JcDuwNvAx4OjAwQLrrXgUc1td2ft/rs2ZY98vAM4f5HEnS/Bo0meLUlsdq\nOmdKbaCz9eGZUJK0xA3aArkD+ApwOZ1rMA4Efntq31lVvavV6iRJY2tQgLyp5/lPtVmIJGmyDAqQ\n24Grq+qf56MYSUvL8uWwffv0y5Ytm99aNHeDAuRA4GPds6A+B/wV8KWqqtYrk7Tobd8O/jWZXIPu\nB/KOqnoecCLwZeAVwM1J1ic5rTtnlSRpCRr2NN7vAZd1HyRZBZxAZxLE41qrTpI0toaazj3JJ7oX\n++0GUFWbq+qdVWV4SNISNez9QP4cWAdsTfL2JIcNWkGStLgNFSBV9dmqWkdndtxvAp9N8oUkp3cP\nsEuSlphht0BI8iQ6N5H6r8AtdO4WeBTwmVYqkySNtaEOoie5jM58VhcDJ1XVt7qLPprkxpnXlLTU\nea3H4jXsLW3/sqqu7G1IsmdVPVBVv9hCXZIWCa/1WLyG3YX1lmna/u8oC5EkTZZBs/H+NJ37k++d\n5Bd4+I6ETwAe13JtkqQxNmgX1nF0DpyvAHpn3v0e8PqWapIkTYBBdyT8MPDhJGuqynvGSpJ2GrQL\n66VV9X+ApyZ5bf9y7wciSUvXoF1Y+3R/ei8QSdIjDNqFdX7355tm6ydJWnoG7cI6d7blVXX2aMuR\nJE2KQbuwbpqXKiRJE2eYs7AkSXqUQbuw3l1V/z3JJ4FHTUZQVS9qrTJJ0lgbtAvr4u7PP227EEnS\nZBm0C+um7s/rkuwBHE5nS+TvqupH81CfJGlMDXtL2xcCfw+cC7wPuCPJCW0WJkmTatkySKZ/LF++\n0NWNzrDTub8TeG5V3QGQ5GDg08BftVWYJE2qbdtmXpbMvGzSDDud+/emwqPrG3QmVJQkLVGDzsI6\nufv0xiRXApfSOQbyG8ANLdcmSRpjg3ZhndTz/D7gP3Sf/xOwdysVSZImwqCzsE6fr0IkSZNlqIPo\nSfYCfhM4Athrqr2qXtFSXZKkMTfsQfSLgZ+mc4fC6+jcodCD6JK0hA0bIIdU1RuAHd35sV4IHNNe\nWZKkcTdsgDzY/Xl/kp8F9gX+bTslSZImwbABckGSZcAbgCuAzcA7hlkxyfFJbktye5JzZuhzbpKt\nSW5NcmTfst2S3JzkiiFrlSTNg6EOolfVB7pPrwOeNuybJ9mNztQnzwfuBW5IcnlV3dbT5wTg4Ko6\nNMkxwHnAsT1v82o6gfWEYT9XktS+YefCelKS93a3BG5K8u4kTxpi1aOBrVV1Z1U9CGwAVvf1WQ1c\nBFBV1wP7Jtmv+7krgBOBDyBJGivD7sLaAHwbWAO8GPgO8NEh1tsfuKvn9d3dttn63NPT58+A1zHN\nvUgkSQtr2MkUn1xVb+55/ZYkL2mjoCndGYDvq6pbkzwHmHUKsjVr1ux8vnLlSlatWtVmeYvWpk2b\nFrqERWWpjOcZZ6xhx449p122zz4PsH79xpF8zuIYz7WsX79+3j918+bNbNmyZaTvOWyAXJ3kFDpz\nYUFnK+Svh1jvHuDAntcrum39fQ6Yps+LgRclOZHOtCmPT3JRVZ023Qdt3DiaL6hg7dq1C13CorIU\nxnPdOqgZ9xPsCYxuDCZ9PNetG4/fISOYFnjWXVhJvpfkX4BXAuuBH3UfG4Azhnj/G4BDkhzUvSHV\nKXTO4up1BXBa9/OOBe6vqvuq6vVVdWBVPa273udnCg9J0vwbNBfW43flzavqoSRnAVfTCasLq2pL\nkjM7i+uCqroyyYlJ7gB2AM6/JUkTYNhdWCR5EfAr3ZfXVtWnhlmvqq4CDutrO7/v9VkD3uM6OqcQ\nS5LGxLCn8b6dh6/H2Ay8Osnb2ixMkjTeht0CORE4sqp+ApDkw8AtwO+3VZgkabwNex0IwBN7nu87\n6kIkSZNl2C2QtwG3JLmGzvUYvwL8XmtVSZLG3sAASedk4b+lMz/VM7vN51TVP7ZZmCRpvA0MkKqq\nJFdW1TN49DUckqQlathjIDcneebgbpKkpWLYYyDHAC9N8k06F/uFzsbJz7VVmCRpvA0bIMe1WoUk\naeLMGiBJ9gJ+CzgE+CqdqUh+PB+FSZLG26BjIB8GfpFOeJwAvLP1iiRJE2HQLqxV3bOvSHIh8KX2\nS5IkTYJBWyAPTj1x15UkqdegLZCf794PBDpnXu3dfT11FtYTWq1OkhaZZctgpns5LVsG27bNbz27\nYtD9QB4zX4VIGm/Ll8P27dMvW7ZsfmuZZLMFxAhuEjivhr4fiKSlbfv22W5bq6VoLrPxSpK0kwEi\nSWrEAJEkNWKASJIaMUAkSY0YIJKkRgwQSVIjBogkqREDRNJOy5d3roae7uHV5urnleiSdvJqc82F\nWyCSpEYMEElSIwaIJKkRA0SS1IgBIklqxACRJDVigEiSGjFAJEmNGCCSpEYMEGkJmmnKEqcr0Vy0\nHiBJjk9yW5Lbk5wzQ59zk2xNcmuSI7ttK5J8PsnXk3w1ydlt1yotFVNTlvQ/tm1b6Mo0SVoNkCS7\nAe8DjgOOAE5NcnhfnxOAg6vqUOBM4Lzuoh8Dr62qI4BnAb/Tv64kaeG0vQVyNLC1qu6sqgeBDcDq\nvj6rgYsAqup6YN8k+1XVP1bVrd327wNbgP1brleSNKS2A2R/4K6e13fz6BDo73NPf58kTwWOBK4f\neYWSpEbGfjr3JD8FfBx4dXdLZFpr1qzZ+XzlypWsWrVqHqpbfDZt2rTQJSwq4zuea1m/fv1CFzFn\n4zueo7HPPmtI9pxh2QNccMHGxu+9efNmtmzZ0nj96bQdIPcAB/a8XtFt6+9zwHR9kuxOJzwurqrL\nZ/ugjRubD6weae3atQtdwqIyjuO5bt141jWMSa17GLP9asmeI/3dk+zye7S9C+sG4JAkByXZAzgF\nuKKvzxXAaQBJjgXur6r7usv+N7C5qt7Tcp3SouPdBdW2VrdAquqhJGcBV9MJqwurakuSMzuL64Kq\nujLJiUnuAHYALwdI8mxgHfDVJLcABby+qq5qs2ZpsfDugmpb68dAun/wD+trO7/v9VnTrLcJeEy7\n1UmSmvJKdElSIwaIJKkRA0SS1IgBIklqxACRJDVigEiSGjFAJEmNGCCSpEYMEElSIwaINMGc70oL\naeync5c0M+e70kJyC0SS1IgBIkkTYNmymXdXLl++MDW5C0uSJsC2bTMvG8G9oRpxC0SS1IgBIklq\nxACRJDVigEiSGjFAJEmNGCCSpEYMEGkMzDYlyUKd4y8N4nUg0hiYbUqShTrHXxrEAJHG3NQVyDMt\nkxaKASKNudmuQJYWksdAJEmNGCCSpEYMEElSIwaIJKkRA0SaJ95+VouNZ2FJ88Tbz2qxMUAkacLN\ndq0QtPc/Lu7Ckkasd1fVunVr3U2l1m3b1gmJmR5tMUCkEZvaVVUFl1yyfudzLwjUYmOAaElzEkOp\nOY+BaElzEkOpuda3QJIcn+S2JLcnOWeGPucm2Zrk1iRHzmVdjdbmzZsXuoSxMXVgcq6P3mMdjudo\nOZ7jpdUASbIb8D7gOOAI4NQkh/f1OQE4uKoOBc4Ezht2XY3eli1bFrqERmbbFTXsH/t+gw5MzvTo\nPdYxqeM5rhzP8dL2FsjRwNaqurOqHgQ2AKv7+qwGLgKoquuBfZPsN+S68+baa69tfd1B/WZbPt2y\nYdp25fdqqo2x7D1wPfW45pprZ/1Df8011057YHumz1hK4znXfnP9bs7U7ngOXt703/ownztXbQfI\n/sBdPa/v7rYN02eYdefNYv1S7eoXqslB6GuvvbbxFsMJJxwzdG1Nx9M/eHPvZ4DMbd3FEiCpFk8S\nTrIGOK6qzui+filwdFWd3dPnk8DbquoL3defBX4X+JlB6/a8h9f3StIcVdUunSrS9llY9wAH9rxe\n0W3r73PANH32GGJdYNcHQZI0d23vwroBOCTJQUn2AE4BrujrcwVwGkCSY4H7q+q+IdeVJC2QVrdA\nquqhJGcBV9MJqwurakuSMzuL64KqujLJiUnuAHYAp8+2bpv1SpKG1+oxEEnS4uVUJpKkRgwQSVIj\nizZAkhye5C+SXJrktxa6nkmXZHWSC5J8JMkLFrqeSZbkZ5J8IMmlC13LpEvyuCQfSnJ+krULXc+k\nm+t3c9EfA0kS4MNVddpC17IYJHki8CdV9cqFrmXSJbm0qv7zQtcxybrXh22vqk8n2VBVpyx0TYvB\nsN/Nsd8CSXJhkvuSfKWvfZhJGk8CPgVcOR+1ToJdGc+uPwDe326Vk2EEY6k+DcZ0BQ/PWPHQvBU6\nIdr+jo59gAAfpDOh4k6zTbSY5GVJ3pXkyVX1yap6IfDS+S56jDUdz6ckeTtwZVXdOt9Fj6nG382p\n7vNZ7ISY05jSCY8VU13nq8gJMtfx3NltmDcf+wCpqr8Ftvc1zzjRYlVdXFWvBZ6e5D1JzgM+Pa9F\nj7FdGM81wPOBFyc5Yz5rHle7MJYPJPkL4Ei3UB5prmMKXEbnO/l+4JPzV+lkmOt4Jlk+l+/mpN5Q\narqJFo/u7VBV1wHXzWdRE2yY8Xwv8N75LGpCDTOW24Dfns+iJtyMY1pVPwBesRBFTbDZxnNO382x\n3wKRJI2nSQ2QYSZp1PAcz9FxLEfPMR2tkY3npARIeORBHSda3DWO5+g4lqPnmI5Wa+M59gGSZD3w\nBToHxf8hyelV9RDwKjoTLX4d2OBEi8NxPEfHsRw9x3S02h7PRX8hoSSpHWO/BSJJGk8GiCSpEQNE\nktSIASJJasQAkSQ1YoBIkhoxQCRJjRggWrSSPJTk5iS3dH/+7kLXNCXJx5I8tfv8m0mu61t+a/89\nHKZ5j79Pcmhf258leV2Sn03ywVHXLfWa1Nl4pWHsqKqjRvmGSR7TvZJ3V95jFbBbVX2z21TA45Ps\nX1X3dO/NMMwVvh+hMw3Fm7vvG+DFwLOq6u4k+ydZUVV370q90kzcAtFiNu1NcZL8vyR/mOSmJF9O\n8vRu++O6d3D7YnfZSd32/5Lk8iSfAz6bjj9PsjnJ1Uk+neTkJM9NclnP5/xqkk9MU8I64PK+tkvp\nhAHAqcD6nvfZLckfJ7m+u2UydTvhDT3rAPwK8M2ewPhU33JppAwQLWZ79+3C+o2eZd+uqn8HnAf8\nj27b/wQ+V1XHAs8D/jTJ3t1lvwCcXFXPBU4GDqyqVcDLgGcBVNU1wGFJntRd53TgwmnqejZwU8/r\nAjYC/6n7+iQeeXOk3wTur6pj6Ny34YwkB1XV14CHkjyj2+8UOlslU24Efnm2AZJ2hbuwtJj9YJZd\nWFNbCjfx8B/uXwNOSvK67us9eHja689U1Xe7z38J+BhAVd2X5Jqe970YeGmSDwHH0gmYfk8G/qmv\n7Z+B7UleAmwGftiz7NeAZ/QE4BOAQ4E76W6FJNkM/Drwv3rW+zbwlGl/e2kEDBAtVQ90fz7Ew/8O\nAqypqq29HZMcC+wY8n0/RGfr4QHgY1X1k2n6/ADYa5r2S4H3A6f1tQd4VVV9Zpp1NtCZVfVvgC9X\nVW8w7cUjg0gaKXdhaTGb9hjILP4aOHvnysmRM/TbBKzpHgvZD3jO1IKq+hZwL53dYTOdBbUFOGSa\nOi8D3kEnEPrr+m9Jdu/WdejUrrWq+gbwHeDtPHL3FcDTga/NUIO0ywwQLWZ79R0DeWu3faYznN4M\nPDbJV5J8DfijGfptpHMf6a8DF9HZDfbdnuWXAHdV1d/NsP6VwHN7XhdAVX2/qv6kqn7c1/8DdHZr\n3Zzkq3SO2/TuPfgIcBjQf8D+ucCnZ6hB2mXeD0RqIMk+VbUjyXLgeuDZVfXt7rL3AjdX1bRbIEn2\nAj7fXaeVf4DdO81dC/zSDLvRpF1mgEgNdA+cPxF4LPCOqrq4234j8H3gBVX14CzrvwDY0tY1GkkO\nAZ5SVX/TxvtLYIBIkhryGIgkqREDRJLUiAEiSWrEAJEkNWKASJIa+f+kqXZODh9TqgAAAABJRU5E\nrkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1073,9 +1072,9 @@ }, { "data": { - "image/png": "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\nbZVKpTqB/D+F7yW5gV7LfQAAAABJRU5ErkJggg==\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1094,21 +1093,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" + "pygments_lexer": "ipython3", + "version": "3.5.1" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index 25c57f3c5f..56b3cb45c1 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -4,9 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This notebook shows the how tallies can be combined (added, subtracted, multiplied, etc.) using the Python API in order to create derived tallies. Since no covariance information is obtained, it is assumed that tallies are completely independent of one another when propagating uncertainties. The target problem is a simple pin cell.\n", - "\n", - "**Note:** that this Notebook was created using the latest Pandas v0.16.1. Everything in the Notebook will wun with older versions of Pandas, but the multi-indexing option in >v0.15.0 makes the tables look prettier." + "This notebook shows the how tallies can be combined (added, subtracted, multiplied, etc.) using the Python API in order to create derived tallies. Since no covariance information is obtained, it is assumed that tallies are completely independent of one another when propagating uncertainties. The target problem is a simple pin cell." ] }, { @@ -16,18 +14,6 @@ "collapsed": false }, "outputs": [], - "source": [ - "%load_ext autoreload\n", - "%autoreload 2" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [], "source": [ "import glob\n", "from IPython.display import Image\n", @@ -52,7 +38,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": { "collapsed": true }, @@ -76,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": { "collapsed": false }, @@ -111,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": { "collapsed": false }, @@ -134,7 +120,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": { "collapsed": false }, @@ -163,7 +149,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": { "collapsed": false }, @@ -200,7 +186,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": { "collapsed": false }, @@ -227,7 +213,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": { "collapsed": false }, @@ -240,7 +226,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": { "collapsed": false }, @@ -259,7 +245,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": { "collapsed": true }, @@ -295,7 +281,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": { "collapsed": false }, @@ -323,7 +309,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": { "collapsed": false }, @@ -334,7 +320,7 @@ "0" ] }, - "execution_count": 13, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -346,19 +332,19 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AEHgslKE7FoLIAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDQtMzBUMDY6Mzc6\nNDAtMDU6MDAMbOxZAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA0LTMwVDA2OjM3OjQwLTA1OjAw\nfTFU5QAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AFBRQzLY81/IkAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDUtMDVUMTQ6NTE6\nNDUtMDY6MDCqOITjAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA1LTA1VDE0OjUxOjQ1LTA2OjAw\n22U8XwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, - "execution_count": 14, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -380,7 +366,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": { "collapsed": false }, @@ -392,7 +378,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": { "collapsed": false }, @@ -429,7 +415,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": { "collapsed": true }, @@ -445,7 +431,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -460,7 +446,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": { "collapsed": false }, @@ -476,7 +462,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 19, "metadata": { "collapsed": true }, @@ -491,7 +477,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 20, "metadata": { "collapsed": true }, @@ -511,7 +497,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 21, "metadata": { "collapsed": false }, @@ -530,7 +516,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 22, "metadata": { "collapsed": false, "scrolled": true @@ -556,8 +542,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: ae083cf5d491e6a778d5b762dad19c8d5fe45238\n", - " Date/Time: 2016-04-30 06:37:41\n", + " Git SHA1: df280b60eb1c6d7b7f842e05ede734a4883a0fc8\n", + " Date/Time: 2016-05-05 14:51:45\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -613,20 +599,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 7.0900E-01 seconds\n", - " Reading cross sections = 4.0400E-01 seconds\n", - " Total time in simulation = 1.7108E+01 seconds\n", - " Time in transport only = 1.7093E+01 seconds\n", - " Time in inactive batches = 3.3970E+00 seconds\n", - " Time in active batches = 1.3711E+01 seconds\n", + " Total time for initialization = 7.2500E-01 seconds\n", + " Reading cross sections = 4.4400E-01 seconds\n", + " Total time in simulation = 1.5547E+01 seconds\n", + " Time in transport only = 1.5527E+01 seconds\n", + " Time in inactive batches = 2.2880E+00 seconds\n", + " Time in active batches = 1.3259E+01 seconds\n", " Time synchronizing fission bank = 1.0000E-03 seconds\n", - " Sampling source sites = 1.0000E-03 seconds\n", + " Sampling source sites = 0.0000E+00 seconds\n", " SEND/RECV source sites = 0.0000E+00 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 1.0000E-03 seconds\n", - " Total time elapsed = 1.7835E+01 seconds\n", - " Calculation Rate (inactive) = 3679.72 neutrons/second\n", - " Calculation Rate (active) = 2735.03 neutrons/second\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for finalization = 2.0000E-03 seconds\n", + " Total time elapsed = 1.6291E+01 seconds\n", + " Calculation Rate (inactive) = 5463.29 neutrons/second\n", + " Calculation Rate (active) = 2828.27 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -644,7 +630,7 @@ "0" ] }, - "execution_count": 23, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -673,7 +659,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 23, "metadata": { "collapsed": false, "scrolled": true @@ -684,27 +670,6 @@ "sp = openmc.StatePoint('statepoint.20.h5')" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You may have also noticed we instructed OpenMC to create a summary file with lots of geometry information in it. This can help to produce more sensible output from the Python API, so we will use the summary file to link against." - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false, - "scrolled": true - }, - "outputs": [], - "source": [ - "# Load the summary file and link with statepoint\n", - "su = openmc.Summary('summary.h5')\n", - "sp.link_with_summary(su)" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -716,7 +681,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -752,7 +717,7 @@ "0 total (nu-fission / absorption) 1.04e+00 6.14e-03" ] }, - "execution_count": 26, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -776,7 +741,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 25, "metadata": { "collapsed": false }, @@ -816,7 +781,7 @@ "0 0.00e+00 6.25e-07 total absorption 6.93e-01 4.11e-03" ] }, - "execution_count": 27, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -838,7 +803,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 26, "metadata": { "collapsed": false }, @@ -878,7 +843,7 @@ "0 0.00e+00 6.25e-07 total nu-fission 1.20e+00 7.60e-03" ] }, - "execution_count": 28, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -901,7 +866,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 27, "metadata": { "collapsed": false }, @@ -946,7 +911,7 @@ "0 4.72e-03 " ] }, - "execution_count": 29, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -967,7 +932,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -1012,7 +977,7 @@ "0 (nu-fission / absorption) 1.66e+00 1.13e-02 " ] }, - "execution_count": 30, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -1032,7 +997,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 29, "metadata": { "collapsed": false }, @@ -1077,7 +1042,7 @@ "0 (((absorption * nu-fission) * absorption) * (n... 1.04e+00 1.32e-02 " ] }, - "execution_count": 31, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -1098,7 +1063,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 30, "metadata": { "collapsed": false, "scrolled": true @@ -1114,7 +1079,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 31, "metadata": { "collapsed": false }, @@ -1243,7 +1208,7 @@ "7 (scatter / flux) 3.37e-03 1.44e-05 " ] }, - "execution_count": 33, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -1262,7 +1227,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 32, "metadata": { "collapsed": false }, @@ -1294,7 +1259,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 33, "metadata": { "collapsed": false }, @@ -1318,7 +1283,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 34, "metadata": { "collapsed": false }, @@ -1349,7 +1314,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 35, "metadata": { "collapsed": false }, @@ -1430,7 +1395,7 @@ "3 7.32e-04 " ] }, - "execution_count": 37, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -1443,7 +1408,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 36, "metadata": { "collapsed": false }, @@ -1584,7 +1549,7 @@ "8 3.20e-03 " ] }, - "execution_count": 38, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } diff --git a/src/output.F90 b/src/output.F90 index 4b4b966dcb..786d9a10e3 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -54,7 +54,7 @@ contains write(UNIT=OUTPUT_UNIT, FMT=*) & ' Copyright: 2011-2016 Massachusetts Institute of Technology' write(UNIT=OUTPUT_UNIT, FMT=*) & - ' License: http://openmc.readthedocs.org/en/latest/license.html' + ' License: http://openmc.readthedocs.io/en/latest/license.html' write(UNIT=OUTPUT_UNIT, FMT='(6X,"Version:",8X,I1,".",I1,".",I1)') & VERSION_MAJOR, VERSION_MINOR, VERSION_RELEASE #ifdef GIT_SHA1 From 7a671655865aefa8b99847cf843dc9b5fbd70514 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 7 May 2016 14:36:32 -0400 Subject: [PATCH 489/650] Finished generating ipython notebook and incorporating in to docs --- .../pythonapi/examples/mgxs-part-iv.ipynb | 1871 +++++++++++++++++ .../pythonapi/examples/mgxs-part-iv.rst | 13 + docs/source/pythonapi/index.rst | 1 + openmc/summary.py | 1 + 4 files changed, 1886 insertions(+) create mode 100644 docs/source/pythonapi/examples/mgxs-part-iv.ipynb create mode 100644 docs/source/pythonapi/examples/mgxs-part-iv.rst diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb new file mode 100644 index 0000000000..bc85af5c24 --- /dev/null +++ b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb @@ -0,0 +1,1871 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This Notebook illustrates the use of the openmc.mgxs.Library class specifically for application in OpenMC's multi-group mode. This example notebook follows the same process as was done in MGXS Part III, but instead uses OpenMC as the multi-group solver. This Notebook illustrates the following features:\n", + "\n", + " Calculation of multi-group cross sections for a fuel assembly\n", + " Automated creation, manipulation and storage of MGXS with openmc.mgxs.Library\n", + " Validation of multi-group cross sections with OpenMC\n", + " Steady-state pin-by-pin fission rates comparison between Continuous-Energy mode and Multi-Group OpenMC.\n", + "\n", + "Note: This Notebook illustrates the use of Pandas DataFrames to containerize multi-group cross section data. We recommend using Pandas >v0.15.0 or later since OpenMC's Python API leverages the multi-indexing feature included in the most recent releases of Pandas.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Generate Input Files" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import math\n", + "import pickle\n", + "\n", + "from IPython.display import Image\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import os\n", + "\n", + "import openmc\n", + "import openmc.mgxs\n", + "\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "First we need to define materials that will be used in the problem. Before defining a material, we must create nuclides that are used in the material." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Instantiate some Nuclides\n", + "h1 = openmc.Nuclide('H-1')\n", + "b10 = openmc.Nuclide('B-10')\n", + "o16 = openmc.Nuclide('O-16')\n", + "u235 = openmc.Nuclide('U-235')\n", + "u238 = openmc.Nuclide('U-238')\n", + "zr90 = openmc.Nuclide('Zr-90')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the nuclides we defined, we will now create three materials for the fuel, water, and cladding of the fuel pins." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# 1.6 enriched fuel\n", + "fuel = openmc.Material(name='1.6% Fuel')\n", + "fuel.set_density('g/cm3', 10.31341)\n", + "fuel.add_nuclide(u235, 3.7503e-4)\n", + "fuel.add_nuclide(u238, 2.2625e-2)\n", + "fuel.add_nuclide(o16, 4.6007e-2)\n", + "\n", + "# borated water\n", + "water = openmc.Material(name='Borated Water')\n", + "water.set_density('g/cm3', 0.740582)\n", + "water.add_nuclide(h1, 4.9457e-2)\n", + "water.add_nuclide(o16, 2.4732e-2)\n", + "water.add_nuclide(b10, 8.0042e-6)\n", + "\n", + "# zircaloy\n", + "zircaloy = openmc.Material(name='Zircaloy')\n", + "zircaloy.set_density('g/cm3', 6.55)\n", + "zircaloy.add_nuclide(zr90, 7.2758e-3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With our three materials, we can now create a Materials object that can be exported to an actual XML file." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Instantiate a Materials object\n", + "materials_file = openmc.Materials((fuel, water, zircaloy))\n", + "materials_file.default_xs = '71c'\n", + "\n", + "# Export to \"materials.xml\"\n", + "materials_file.export_to_xml()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's move on to the geometry. This problem will be a square array of fuel pins and control rod guide tubes for which we can use OpenMC's lattice/universe feature. The basic universe will have three regions for the fuel, the clad, and the surrounding coolant. The first step is to create the bounding surfaces for fuel and clad, as well as the outer bounding surfaces of the problem." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Create cylinders for the fuel and clad\n", + "fuel_outer_radius = openmc.ZCylinder(x0=0.0, y0=0.0, R=0.39218)\n", + "clad_outer_radius = openmc.ZCylinder(x0=0.0, y0=0.0, R=0.45720)\n", + "\n", + "# Create boundary planes to surround the geometry\n", + "min_x = openmc.XPlane(x0=-10.71, boundary_type='reflective')\n", + "max_x = openmc.XPlane(x0=+10.71, boundary_type='reflective')\n", + "min_y = openmc.YPlane(y0=-10.71, boundary_type='reflective')\n", + "max_y = openmc.YPlane(y0=+10.71, boundary_type='reflective')\n", + "min_z = openmc.ZPlane(z0=-10., boundary_type='reflective')\n", + "max_z = openmc.ZPlane(z0=+10., boundary_type='reflective')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the surfaces defined, we can now construct a fuel pin cell from cells that are defined by intersections of half-spaces created by the surfaces." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Create a Universe to encapsulate a fuel pin\n", + "fuel_pin_universe = openmc.Universe(name='1.6% Fuel Pin')\n", + "\n", + "# Create fuel Cell\n", + "fuel_cell = openmc.Cell(name='1.6% Fuel')\n", + "fuel_cell.fill = fuel\n", + "fuel_cell.region = -fuel_outer_radius\n", + "fuel_pin_universe.add_cell(fuel_cell)\n", + "\n", + "# Create a clad Cell\n", + "clad_cell = openmc.Cell(name='1.6% Clad')\n", + "clad_cell.fill = zircaloy\n", + "clad_cell.region = +fuel_outer_radius & -clad_outer_radius\n", + "fuel_pin_universe.add_cell(clad_cell)\n", + "\n", + "# Create a moderator Cell\n", + "moderator_cell = openmc.Cell(name='1.6% Moderator')\n", + "moderator_cell.fill = water\n", + "moderator_cell.region = +clad_outer_radius\n", + "fuel_pin_universe.add_cell(moderator_cell)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Likewise, we can construct a control rod guide tube with the same surfaces." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Create a Universe to encapsulate a control rod guide tube\n", + "guide_tube_universe = openmc.Universe(name='Guide Tube')\n", + "\n", + "# Create guide tube Cell\n", + "guide_tube_cell = openmc.Cell(name='Guide Tube Water')\n", + "guide_tube_cell.fill = water\n", + "guide_tube_cell.region = -fuel_outer_radius\n", + "guide_tube_universe.add_cell(guide_tube_cell)\n", + "\n", + "# Create a clad Cell\n", + "clad_cell = openmc.Cell(name='Guide Clad')\n", + "clad_cell.fill = zircaloy\n", + "clad_cell.region = +fuel_outer_radius & -clad_outer_radius\n", + "guide_tube_universe.add_cell(clad_cell)\n", + "\n", + "# Create a moderator Cell\n", + "moderator_cell = openmc.Cell(name='Guide Tube Moderator')\n", + "moderator_cell.fill = water\n", + "moderator_cell.region = +clad_outer_radius\n", + "guide_tube_universe.add_cell(moderator_cell)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the pin cell universe, we can construct a 17x17 rectangular lattice with a 1.26 cm pitch." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Create fuel assembly Lattice\n", + "assembly = openmc.RectLattice(name='1.6% Fuel Assembly')\n", + "assembly.dimension = (17, 17)\n", + "assembly.pitch = (1.26, 1.26)\n", + "assembly.lower_left = [-1.26 * 17. / 2.0] * 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we create a NumPy array of fuel pin and guide tube universes for the lattice." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Create array indices for guide tube locations in lattice\n", + "template_x = np.array([5, 8, 11, 3, 13, 2, 5, 8, 11, 14, 2, 5, 8,\n", + " 11, 14, 2, 5, 8, 11, 14, 3, 13, 5, 8, 11])\n", + "template_y = np.array([2, 2, 2, 3, 3, 5, 5, 5, 5, 5, 8, 8, 8, 8,\n", + " 8, 11, 11, 11, 11, 11, 13, 13, 14, 14, 14])\n", + "\n", + "# Initialize an empty 17x17 array of the lattice universes\n", + "universes = np.empty((17, 17), dtype=openmc.Universe)\n", + "\n", + "# Fill the array with the fuel pin and guide tube universes\n", + "universes[:,:] = fuel_pin_universe\n", + "universes[template_x, template_y] = guide_tube_universe\n", + "\n", + "# Store the array of universes in the lattice\n", + "assembly.universes = universes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "OpenMC requires that there is a \"root\" universe. Let us create a root cell that is filled by the pin cell universe and then assign it to the root universe." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Create root Cell\n", + "root_cell = openmc.Cell(name='root cell')\n", + "root_cell.fill = assembly\n", + "\n", + "# Add boundary planes\n", + "root_cell.region = +min_x & -max_x & +min_y & -max_y & +min_z & -max_z\n", + "\n", + "# Create root Universe\n", + "root_universe = openmc.Universe(universe_id=0, name='root universe')\n", + "root_universe.add_cell(root_cell)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now must create a geometry that is assigned a root universe and export it to XML." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Create Geometry and set root Universe\n", + "geometry = openmc.Geometry()\n", + "geometry.root_universe = root_universe\n", + "# Export to \"geometry.xml\"\n", + "geometry.export_to_xml()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the geometry and materials finished, we now just need to define simulation parameters. In this case, we will use 10 inactive batches and 40 active batches each with 2500 particles." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# OpenMC simulation parameters\n", + "batches = 200\n", + "inactive = 10\n", + "particles = 5000\n", + "\n", + "# Instantiate a Settings object\n", + "settings_file = openmc.Settings()\n", + "settings_file.batches = batches\n", + "settings_file.inactive = inactive\n", + "settings_file.particles = particles\n", + "settings_file.output = {'tallies': False}\n", + "\n", + "# Create an initial uniform spatial source distribution over fissionable zones\n", + "bounds = [-10.71, -10.71, -10, 10.71, 10.71, 10.]\n", + "uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True)\n", + "settings_file.source = openmc.source.Source(space=uniform_dist)\n", + "\n", + "# Export to \"settings.xml\"\n", + "settings_file.export_to_xml()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us also create a Plots file that we can use to verify that our fuel assembly geometry was created successfully." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Instantiate a Plot\n", + "plot = openmc.Plot(plot_id=1)\n", + "plot.filename = 'materials-xy'\n", + "plot.origin = [0, 0, 0]\n", + "plot.pixels = [250, 250]\n", + "plot.width = [-10.71*2, -10.71*2]\n", + "plot.color = 'mat'\n", + "\n", + "# Instantiate a Plots object, add Plot, and export to \"plots.xml\"\n", + "plot_file = openmc.Plots([plot])\n", + "plot_file.export_to_xml()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the plots.xml file, we can now generate and view the plot. OpenMC outputs plots in .ppm format, which can be converted into a compressed format like .png with the convert utility." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Run openmc in plotting mode\n", + "openmc.plot_geometry(output=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Convert OpenMC's funky ppm to png\n", + "!convert materials-xy.ppm materials-xy.png\n", + "\n", + "# Display the materials plot inline\n", + "Image(filename='materials-xy.png')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see from the plot, we have a nice array of fuel and guide tube pin cells with fuel, cladding, and water!\n", + "\n", + "# Create an MGXS Library\n", + "\n", + "Now we are ready to generate multi-group cross sections! First, let's define a 2-group structure using the built-in EnergyGroups class." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Instantiate a 2-group EnergyGroups object\n", + "groups = openmc.mgxs.EnergyGroups()\n", + "groups.group_edges = np.array([0., 0.625e-6, 20.])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we will instantiate an openmc.mgxs.Library for the energy groups with our the fuel assembly geometry." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Initialize an 2-group MGXS Library for OpenMOC\n", + "mgxs_lib = openmc.mgxs.Library(geometry)\n", + "mgxs_lib.energy_groups = groups" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we must specify to the Library which types of cross sections to compute. OpenMC's multi-group mode can accept isotropic flux-weighted cross sections or angle-dependent cross sections, as well as supporting anisotropic scattering represented by either Legendre polynomials, histogram, or tabular angular distributions. At this time the MGXS Library class only supports the generation of isotropic flux-weighted cross sections and P0 scattering, so that is what will be used for this example. Therefore, we will create the following multi-group cross sections needed to run an OpenMC simulation to verify the accuracy of our cross sections: \"transport\", \"absorption\", \"nu-fission\", '\"fission\", \"nu-scatter matrix\", \"scatter matrix\", and \"chi\".\n", + "\"scatter matrix\" is needed in addition to \"nu-scatter matrix\" because OpenMC's multi-group mode can treat scattering multiplication (i.e., (n,xn) reactions)) explicitly instead of adjusting the absorption cross section to maintain neutron balance, and using this explicit treatment would require tallying of both types of scattering matrices." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Specify multi-group cross section types to compute\n", + "mgxs_lib.mgxs_types = ['transport', 'absorption', 'nu-fission', 'fission',\n", + " 'nu-scatter matrix', 'scatter matrix', 'chi']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we must specify the type of domain over which we would like the `Library` to compute multi-group cross sections. The domain type corresponds to the type of tally filter to be used in the tallies created to compute multi-group cross sections. At the present time, the `Library` supports \"material,\" \"cell,\" and \"universe\" domain types. We will use a \"cell\" domain type here to compute cross sections in each of the cells in the fuel assembly geometry.\n", + "\n", + "**Note:** By default, the `Library` class will instantiate `MGXS` objects for each and every domain (material, cell or universe) in the geometry of interest. However, one may specify a subset of these domains to the `Library.domains` property. In our case, we wish to compute multi-group cross sections in each and every cell since they will be needed in our downstream multi-group OpenMC calculation on the identical combinatorial geometry mesh." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Specify a \"cell\" domain type for the cross section tally filters\n", + "mgxs_lib.domain_type = \"cell\"\n", + "\n", + "# Specify the cell domains over which to compute multi-group cross sections\n", + "mgxs_lib.domains = geometry.get_all_material_cells()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will instruct the library to not compute cross sections on a nuclide-by-nuclide basis, and instead to focus on generating material-specific macroscopic cross sections.\n", + "\n", + "**NOTE:** The default value of the `by_nuclide` parameter is `False`, so the following step is not necessary but is included for illustrative purposes." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Do not compute cross sections on a nuclide-by-nuclide basis\n", + "mgxs_lib.by_nuclide = False" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lastly, we use the `Library` to construct the tallies needed to compute all of the requested multi-group cross sections in each domain and nuclide." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Construct all tallies needed for the multi-group cross section library\n", + "mgxs_lib.build_library()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The tallies can now be export to a \"tallies.xml\" input file for OpenMC.\n", + "\n", + "**NOTE:** At this point the `Library` has constructed nearly 100 distinct Tally objects. The overhead to tally in OpenMC scales as O(N) for N tallies, which can become a bottleneck for large tally datasets. To compensate for this, the Python API's `Tally`, `Filter` and `Tallies` classes allow for the smart merging of tallies when possible. The `Library` class supports this runtime optimization with the use of the optional `merge` parameter (`False` by default) for the `Library.add_to_tallies_file(...)` method, as shown below." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Create a \"tallies.xml\" file for the MGXS Library\n", + "tallies_file = openmc.Tallies()\n", + "mgxs_lib.add_to_tallies_file(tallies_file, merge=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In addition, we instantiate a fission rate mesh tally to compare with the multi-group result." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Instantiate a tally Mesh\n", + "mesh = openmc.Mesh(mesh_id=1)\n", + "mesh.type = 'regular'\n", + "mesh.dimension = [17, 17]\n", + "mesh.lower_left = [-10.71, -10.71]\n", + "mesh.upper_right = [+10.71, +10.71]\n", + "\n", + "# Instantiate tally Filter\n", + "mesh_filter = openmc.Filter()\n", + "mesh_filter.mesh = mesh\n", + "\n", + "# Instantiate the Tally\n", + "tally = openmc.Tally(name='mesh tally')\n", + "tally.filters = [mesh_filter]\n", + "tally.scores = ['fission']\n", + "\n", + "# Add tally to collection\n", + "tallies_file.append(tally)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Export all tallies to a \"tallies.xml\" file\n", + "tallies_file.export_to_xml()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " .d88888b. 888b d888 .d8888b.\n", + " d88P\" \"Y88b 8888b d8888 d88P Y88b\n", + " 888 888 88888b.d88888 888 888\n", + " 888 888 88888b. .d88b. 88888b. 888Y88888P888 888 \n", + " 888 888 888 \"88b d8P Y8b 888 \"88b 888 Y888P 888 888 \n", + " 888 888 888 888 88888888 888 888 888 Y8P 888 888 888\n", + " Y88b. .d88P 888 d88P Y8b. 888 888 888 \" 888 Y88b d88P\n", + " \"Y88888P\" 88888P\" \"Y8888 888 888 888 888 \"Y8888P\"\n", + "__________________888______________________________________________________\n", + " 888\n", + " 888\n", + "\n", + " Copyright: 2011-2016 Massachusetts Institute of Technology\n", + " License: http://openmc.readthedocs.org/en/latest/license.html\n", + " Version: 0.7.1\n", + " Git SHA1: 179e9ab147e505563d118ed58096b3d225160ffa\n", + " Date/Time: 2016-05-07 14:22:04\n", + " OpenMP Threads: 4\n", + "\n", + " ===========================================================================\n", + " ========================> INITIALIZATION <=========================\n", + " ===========================================================================\n", + "\n", + " Reading settings XML file...\n", + " Reading cross sections XML file...\n", + " Reading geometry XML file...\n", + " Reading materials XML file...\n", + " Reading tallies XML file...\n", + " Building neighboring cells lists for each surface...\n", + " Loading ACE cross section table: 92235.71c\n", + " Loading ACE cross section table: 92238.71c\n", + " Loading ACE cross section table: 8016.71c\n", + " Loading ACE cross section table: 1001.71c\n", + " Loading ACE cross section table: 5010.71c\n", + " Loading ACE cross section table: 40090.71c\n", + " Maximum neutron transport energy: 20.0000 MeV for 92235.71c\n", + " Initializing source particles...\n", + "\n", + " ===========================================================================\n", + " ====================> K EIGENVALUE SIMULATION <====================\n", + " ===========================================================================\n", + "\n", + " Bat./Gen. k Average k \n", + " ========= ======== ==================== \n", + " 1/1 1.05162 \n", + " 2/1 1.05369 \n", + " 3/1 1.02989 \n", + " 4/1 1.00126 \n", + " 5/1 1.03151 \n", + " 6/1 1.00183 \n", + " 7/1 0.99379 \n", + " 8/1 1.04193 \n", + " 9/1 1.01578 \n", + " 10/1 1.03349 \n", + " 11/1 1.03354 \n", + " 12/1 1.03646 1.03500 +/- 0.00146\n", + " 13/1 1.00873 1.02624 +/- 0.00880\n", + " 14/1 1.04263 1.03034 +/- 0.00745\n", + " 15/1 1.01556 1.02738 +/- 0.00648\n", + " 16/1 1.04897 1.03098 +/- 0.00640\n", + " 17/1 1.01796 1.02912 +/- 0.00572\n", + " 18/1 1.02276 1.02833 +/- 0.00502\n", + " 19/1 1.04003 1.02963 +/- 0.00461\n", + " 20/1 1.00695 1.02736 +/- 0.00471\n", + " 21/1 1.00012 1.02488 +/- 0.00493\n", + " 22/1 1.03580 1.02579 +/- 0.00459\n", + " 23/1 1.03427 1.02644 +/- 0.00427\n", + " 24/1 1.06024 1.02886 +/- 0.00463\n", + " 25/1 1.00742 1.02743 +/- 0.00454\n", + " 26/1 1.02556 1.02731 +/- 0.00425\n", + " 27/1 1.02207 1.02700 +/- 0.00401\n", + " 28/1 1.05847 1.02875 +/- 0.00416\n", + " 29/1 1.01125 1.02783 +/- 0.00404\n", + " 30/1 1.03213 1.02804 +/- 0.00384\n", + " 31/1 1.02241 1.02778 +/- 0.00366\n", + " 32/1 1.02675 1.02773 +/- 0.00349\n", + " 33/1 1.05484 1.02891 +/- 0.00354\n", + " 34/1 1.01893 1.02849 +/- 0.00341\n", + " 35/1 0.99044 1.02697 +/- 0.00361\n", + " 36/1 1.02602 1.02693 +/- 0.00347\n", + " 37/1 1.04107 1.02746 +/- 0.00338\n", + " 38/1 1.03237 1.02763 +/- 0.00326\n", + " 39/1 1.01489 1.02719 +/- 0.00318\n", + " 40/1 1.01065 1.02664 +/- 0.00312\n", + " 41/1 1.03722 1.02698 +/- 0.00304\n", + " 42/1 1.04339 1.02750 +/- 0.00298\n", + " 43/1 1.00921 1.02694 +/- 0.00294\n", + " 44/1 1.04576 1.02750 +/- 0.00291\n", + " 45/1 1.02580 1.02745 +/- 0.00283\n", + " 46/1 1.03464 1.02765 +/- 0.00275\n", + " 47/1 1.01552 1.02732 +/- 0.00270\n", + " 48/1 1.03357 1.02748 +/- 0.00263\n", + " 49/1 1.03439 1.02766 +/- 0.00257\n", + " 50/1 1.04281 1.02804 +/- 0.00253\n", + " 51/1 1.02902 1.02806 +/- 0.00247\n", + " 52/1 1.02245 1.02793 +/- 0.00241\n", + " 53/1 1.05271 1.02851 +/- 0.00243\n", + " 54/1 0.98630 1.02755 +/- 0.00256\n", + " 55/1 1.02690 1.02753 +/- 0.00250\n", + " 56/1 1.04107 1.02783 +/- 0.00246\n", + " 57/1 1.03029 1.02788 +/- 0.00241\n", + " 58/1 1.01874 1.02769 +/- 0.00237\n", + " 59/1 1.04211 1.02798 +/- 0.00234\n", + " 60/1 0.99584 1.02734 +/- 0.00238\n", + " 61/1 1.05166 1.02782 +/- 0.00238\n", + " 62/1 1.05572 1.02835 +/- 0.00239\n", + " 63/1 1.02694 1.02833 +/- 0.00235\n", + " 64/1 1.03314 1.02842 +/- 0.00231\n", + " 65/1 1.05850 1.02896 +/- 0.00233\n", + " 66/1 1.01100 1.02864 +/- 0.00231\n", + " 67/1 1.03784 1.02880 +/- 0.00227\n", + " 68/1 1.04084 1.02901 +/- 0.00224\n", + " 69/1 1.03932 1.02919 +/- 0.00221\n", + " 70/1 1.02564 1.02913 +/- 0.00218\n", + " 71/1 1.00027 1.02865 +/- 0.00219\n", + " 72/1 1.02385 1.02858 +/- 0.00216\n", + " 73/1 1.04885 1.02890 +/- 0.00215\n", + " 74/1 1.00298 1.02849 +/- 0.00215\n", + " 75/1 1.02009 1.02836 +/- 0.00212\n", + " 76/1 1.04505 1.02862 +/- 0.00211\n", + " 77/1 1.02889 1.02862 +/- 0.00207\n", + " 78/1 1.01306 1.02839 +/- 0.00206\n", + " 79/1 1.01817 1.02824 +/- 0.00203\n", + " 80/1 1.00533 1.02792 +/- 0.00203\n", + " 81/1 1.04439 1.02815 +/- 0.00201\n", + " 82/1 1.02212 1.02806 +/- 0.00199\n", + " 83/1 0.99419 1.02760 +/- 0.00201\n", + " 84/1 1.07132 1.02819 +/- 0.00207\n", + " 85/1 1.02710 1.02818 +/- 0.00204\n", + " 86/1 1.01702 1.02803 +/- 0.00202\n", + " 87/1 1.02134 1.02794 +/- 0.00200\n", + " 88/1 1.05231 1.02826 +/- 0.00200\n", + " 89/1 1.05290 1.02857 +/- 0.00200\n", + " 90/1 1.05751 1.02893 +/- 0.00200\n", + " 91/1 1.03970 1.02906 +/- 0.00198\n", + " 92/1 0.99678 1.02867 +/- 0.00200\n", + " 93/1 1.04471 1.02886 +/- 0.00198\n", + " 94/1 1.00820 1.02862 +/- 0.00198\n", + " 95/1 1.05823 1.02896 +/- 0.00198\n", + " 96/1 1.05118 1.02922 +/- 0.00198\n", + " 97/1 1.03617 1.02930 +/- 0.00196\n", + " 98/1 1.00585 1.02904 +/- 0.00195\n", + " 99/1 1.06663 1.02946 +/- 0.00198\n", + " 100/1 1.01802 1.02933 +/- 0.00196\n", + " 101/1 1.02695 1.02931 +/- 0.00194\n", + " 102/1 1.01642 1.02917 +/- 0.00192\n", + " 103/1 1.02567 1.02913 +/- 0.00190\n", + " 104/1 1.03519 1.02919 +/- 0.00188\n", + " 105/1 1.02439 1.02914 +/- 0.00186\n", + " 106/1 1.03779 1.02923 +/- 0.00184\n", + " 107/1 1.01304 1.02906 +/- 0.00183\n", + " 108/1 1.02541 1.02903 +/- 0.00181\n", + " 109/1 1.04297 1.02917 +/- 0.00180\n", + " 110/1 1.00442 1.02892 +/- 0.00180\n", + " 111/1 1.03102 1.02894 +/- 0.00178\n", + " 112/1 1.00380 1.02870 +/- 0.00178\n", + " 113/1 1.04010 1.02881 +/- 0.00177\n", + " 114/1 1.01297 1.02865 +/- 0.00176\n", + " 115/1 1.00130 1.02839 +/- 0.00176\n", + " 116/1 1.02001 1.02831 +/- 0.00174\n", + " 117/1 1.03847 1.02841 +/- 0.00173\n", + " 118/1 1.00371 1.02818 +/- 0.00173\n", + " 119/1 1.02650 1.02817 +/- 0.00171\n", + " 120/1 1.00767 1.02798 +/- 0.00171\n", + " 121/1 1.00408 1.02776 +/- 0.00171\n", + " 122/1 1.00235 1.02754 +/- 0.00171\n", + " 123/1 1.01212 1.02740 +/- 0.00170\n", + " 124/1 1.03278 1.02745 +/- 0.00168\n", + " 125/1 1.00818 1.02728 +/- 0.00168\n", + " 126/1 1.02132 1.02723 +/- 0.00166\n", + " 127/1 1.03677 1.02731 +/- 0.00165\n", + " 128/1 1.04148 1.02743 +/- 0.00164\n", + " 129/1 1.01245 1.02730 +/- 0.00163\n", + " 130/1 1.04172 1.02742 +/- 0.00162\n", + " 131/1 1.04519 1.02757 +/- 0.00162\n", + " 132/1 1.02495 1.02755 +/- 0.00160\n", + " 133/1 0.99747 1.02731 +/- 0.00161\n", + " 134/1 1.02411 1.02728 +/- 0.00160\n", + " 135/1 1.05750 1.02752 +/- 0.00160\n", + " 136/1 1.02341 1.02749 +/- 0.00159\n", + " 137/1 1.02212 1.02745 +/- 0.00158\n", + " 138/1 1.03464 1.02750 +/- 0.00157\n", + " 139/1 1.05920 1.02775 +/- 0.00157\n", + " 140/1 1.01911 1.02768 +/- 0.00156\n", + " 141/1 1.03076 1.02771 +/- 0.00155\n", + " 142/1 1.03648 1.02777 +/- 0.00154\n", + " 143/1 1.00382 1.02759 +/- 0.00154\n", + " 144/1 1.00366 1.02741 +/- 0.00154\n", + " 145/1 1.01638 1.02733 +/- 0.00153\n", + " 146/1 1.02418 1.02731 +/- 0.00152\n", + " 147/1 0.99267 1.02706 +/- 0.00153\n", + " 148/1 1.02575 1.02705 +/- 0.00152\n", + " 149/1 0.98560 1.02675 +/- 0.00153\n", + " 150/1 1.02725 1.02675 +/- 0.00152\n", + " 151/1 1.03723 1.02683 +/- 0.00151\n", + " 152/1 1.00857 1.02670 +/- 0.00151\n", + " 153/1 1.00642 1.02656 +/- 0.00151\n", + " 154/1 1.03461 1.02661 +/- 0.00150\n", + " 155/1 1.00088 1.02643 +/- 0.00150\n", + " 156/1 1.02589 1.02643 +/- 0.00149\n", + " 157/1 1.02494 1.02642 +/- 0.00148\n", + " 158/1 1.03303 1.02646 +/- 0.00147\n", + " 159/1 1.02276 1.02644 +/- 0.00146\n", + " 160/1 1.03293 1.02648 +/- 0.00145\n", + " 161/1 1.04758 1.02662 +/- 0.00144\n", + " 162/1 1.01033 1.02652 +/- 0.00144\n", + " 163/1 1.03883 1.02660 +/- 0.00143\n", + " 164/1 1.00519 1.02646 +/- 0.00143\n", + " 165/1 1.05958 1.02667 +/- 0.00144\n", + " 166/1 1.03849 1.02675 +/- 0.00143\n", + " 167/1 1.02306 1.02672 +/- 0.00142\n", + " 168/1 1.02693 1.02672 +/- 0.00141\n", + " 169/1 1.02584 1.02672 +/- 0.00140\n", + " 170/1 0.99388 1.02651 +/- 0.00141\n", + " 171/1 0.99376 1.02631 +/- 0.00141\n", + " 172/1 1.00453 1.02618 +/- 0.00141\n", + " 173/1 1.04516 1.02629 +/- 0.00141\n", + " 174/1 1.02402 1.02628 +/- 0.00140\n", + " 175/1 0.99012 1.02606 +/- 0.00141\n", + " 176/1 1.02084 1.02603 +/- 0.00140\n", + " 177/1 1.03959 1.02611 +/- 0.00139\n", + " 178/1 1.01719 1.02606 +/- 0.00139\n", + " 179/1 1.01671 1.02600 +/- 0.00138\n", + " 180/1 1.03691 1.02606 +/- 0.00137\n", + " 181/1 1.04276 1.02616 +/- 0.00137\n", + " 182/1 1.02002 1.02613 +/- 0.00136\n", + " 183/1 1.03081 1.02615 +/- 0.00135\n", + " 184/1 1.02432 1.02614 +/- 0.00135\n", + " 185/1 1.02225 1.02612 +/- 0.00134\n", + " 186/1 1.04722 1.02624 +/- 0.00134\n", + " 187/1 0.98045 1.02598 +/- 0.00135\n", + " 188/1 1.02555 1.02598 +/- 0.00135\n", + " 189/1 1.03645 1.02604 +/- 0.00134\n", + " 190/1 1.00407 1.02592 +/- 0.00134\n", + " 191/1 1.03033 1.02594 +/- 0.00133\n", + " 192/1 1.04175 1.02603 +/- 0.00133\n", + " 193/1 1.00555 1.02592 +/- 0.00132\n", + " 194/1 1.00183 1.02578 +/- 0.00132\n", + " 195/1 1.04328 1.02588 +/- 0.00132\n", + " 196/1 1.03041 1.02590 +/- 0.00131\n", + " 197/1 1.04791 1.02602 +/- 0.00131\n", + " 198/1 1.01366 1.02596 +/- 0.00130\n", + " 199/1 1.04471 1.02605 +/- 0.00130\n", + " 200/1 1.02416 1.02604 +/- 0.00129\n", + " Creating state point statepoint.200.h5...\n", + "\n", + " ===========================================================================\n", + " ======================> SIMULATION FINISHED <======================\n", + " ===========================================================================\n", + "\n", + "\n", + " =======================> TIMING STATISTICS <=======================\n", + "\n", + " Total time for initialization = 1.4810E+00 seconds\n", + " Reading cross sections = 1.1600E+00 seconds\n", + " Total time in simulation = 9.8823E+01 seconds\n", + " Time in transport only = 9.8622E+01 seconds\n", + " Time in inactive batches = 2.1290E+00 seconds\n", + " Time in active batches = 9.6694E+01 seconds\n", + " Time synchronizing fission bank = 1.4000E-02 seconds\n", + " Sampling source sites = 1.1000E-02 seconds\n", + " SEND/RECV source sites = 3.0000E-03 seconds\n", + " Time accumulating tallies = 2.0000E-03 seconds\n", + " Total time for finalization = 0.0000E+00 seconds\n", + " Total time elapsed = 1.0031E+02 seconds\n", + " Calculation Rate (inactive) = 23485.2 neutrons/second\n", + " Calculation Rate (active) = 9824.81 neutrons/second\n", + "\n", + " ============================> RESULTS <============================\n", + "\n", + " k-effective (Collision) = 1.02505 +/- 0.00122\n", + " k-effective (Track-length) = 1.02604 +/- 0.00129\n", + " k-effective (Absorption) = 1.02501 +/- 0.00111\n", + " Combined k-effective = 1.02544 +/- 0.00091\n", + " Leakage Fraction = 0.00000 +/- 0.00000\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Run OpenMC\n", + "openmc.run()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To make the files available and not be over-written when running the multi-group calculation, we will now rename the statepoint and summary files." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Move the StatePoint File\n", + "ce_spfile = './ce.h5'\n", + "os.rename('statepoint.' + str(batches) + '.h5', ce_spfile)\n", + "# Move the Summary file\n", + "ce_sumfile = './ce_summary.h5'\n", + "os.rename('summary.h5', ce_sumfile)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tally Data Processing\n", + "\n", + "Our simulation ran successfully and created statepoint and summary output files. We begin our analysis by instantiating a `StatePoint` object." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Load the statepoint file\n", + "sp = openmc.StatePoint(ce_spfile)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we will save the value of keff from the continuous-energy calculation for later comparison" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "ce_keff = sp.k_combined" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In addition to the statepoint file, our simulation also created a summary file which encapsulates information about the materials and geometry. This is necessary for the `openmc.mgxs` module to properly process the tally data. We first create a `Summary` object and link it with the statepoint." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "su = openmc.Summary(ce_sumfile)\n", + "sp.link_with_summary(su)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we will extract our fission distribution results from the statepoint for later comparison." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Get the OpenMC fission rate mesh tally data\n", + "mesh_tally = sp.get_tally(name='mesh tally')\n", + "openmc_fission_rates = mesh_tally.get_values(scores=['fission'])\n", + "\n", + "# Reshape array to 2D for plotting\n", + "openmc_fission_rates.shape = (17,17)\n", + "\n", + "# Normalize to the average pin power\n", + "openmc_fission_rates /= np.mean(openmc_fission_rates)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The statepoint is now ready to be analyzed by the `Library`. We simply have to load the tallies from the statepoint into the `Library` and our `MGXS` objects will compute the cross sections for us under-the-hood." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Initialize MGXS Library with OpenMC statepoint data\n", + "mgxs_lib.load_from_statepoint(sp)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The next step will be to prepare the input for OpenMC to use our newly created multi-group data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Multi-Group OpenMC Calculation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will now use the `Library` to produce a multi-group cross section data set for use by the OpenMC multi-group solver. " + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/nelsonag/git/openmc/openmc/tallies.py:1996: RuntimeWarning: invalid value encountered in true_divide\n", + " self_rel_err = data['self']['std. dev.'] / data['self']['mean']\n", + "/home/nelsonag/git/openmc/openmc/tallies.py:1997: RuntimeWarning: invalid value encountered in true_divide\n", + " other_rel_err = data['other']['std. dev.'] / data['other']['mean']\n", + "/home/nelsonag/git/openmc/openmc/tallies.py:1998: RuntimeWarning: invalid value encountered in true_divide\n", + " new_tally._mean = data['self']['mean'] / data['other']['mean']\n" + ] + }, + { + "data": { + "text/plain": [ + "{10000: 'fuel.2g',\n", + " 10001: 'fuel_clad.2g',\n", + " 10002: 'fuel_mod.2g',\n", + " 10003: 'gt_inmod.2g',\n", + " 10004: 'gt_clad.2g',\n", + " 10005: 'gt_outmod.2g'}" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mgxs_lib.write_mg_library(filename='mgxs', xs_type='macro',\n", + " domain_names=['fuel', 'fuel_clad', 'fuel_mod',\n", + " 'gt_inmod', 'gt_clad', 'gt_outmod'],\n", + " xs_ids='2g')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we will need to recreate similar xml files from above, beginning with materials.xml" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Instantiate our Macroscopic Data\n", + "fuel_macro = openmc.Macroscopic('fuel')\n", + "fuel_clad_macro = openmc.Macroscopic('fuel_clad')\n", + "fuel_mod_macro = openmc.Macroscopic('fuel_mod')\n", + "gt_inmod_macro = openmc.Macroscopic('gt_inmod')\n", + "gt_clad_macro = openmc.Macroscopic('gt_clad')\n", + "gt_outmod_macro = openmc.Macroscopic('gt_outmod')\n", + "\n", + "# Now define the materials\n", + "\n", + "# 1.6 enriched fuel UO2\n", + "fuel = openmc.Material(name='1.6% Fuel UO2')\n", + "fuel.set_density('macro', 1.0)\n", + "fuel.add_macroscopic(fuel_macro)\n", + "\n", + "# 1.6 enriched fuel cladding\n", + "fuel_clad = openmc.Material(name='1.6% Fuel Clad')\n", + "fuel_clad.set_density('macro', 1.0)\n", + "fuel_clad.add_macroscopic(fuel_clad_macro)\n", + "\n", + "# 1.6 enriched fuel moderator\n", + "fuel_mod = openmc.Material(name='1.6% Fuel Water')\n", + "fuel_mod.set_density('macro', 1.0)\n", + "fuel_mod.add_macroscopic(fuel_mod_macro)\n", + "\n", + "# Guide Tube Inner Moderator\n", + "gt_inmod = openmc.Material(name='GT Inner Water')\n", + "gt_inmod.set_density('macro', 1.0)\n", + "gt_inmod.add_macroscopic(gt_inmod_macro)\n", + "\n", + "# Guide Tube Cladding\n", + "gt_clad = openmc.Material(name='GT Clad')\n", + "gt_clad.set_density('macro', 1.0)\n", + "gt_clad.add_macroscopic(gt_clad_macro)\n", + "\n", + "# Guide Tube Outer Moderator\n", + "gt_outmod = openmc.Material(name='GT Outer Water')\n", + "gt_outmod.set_density('macro', 1.0)\n", + "gt_outmod.add_macroscopic(gt_outmod_macro)\n", + "\n", + "# Finally, instantiate our Materials object\n", + "materials_file = openmc.Materials((fuel, fuel_clad, fuel_mod,\n", + " gt_inmod, gt_clad, gt_outmod))\n", + "materials_file.default_xs = '2g'\n", + "\n", + "# Export to \"materials.xml\"\n", + "materials_file.export_to_xml()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For our geometry files we will simply repeat what as done for continuous-energy mode, except change the cell fill (i.e., the material) to use our newly defined materials." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Create a Universe to encapsulate a fuel pin\n", + "fuel_pin_universe = openmc.Universe(name='1.6% Fuel Pin')\n", + "\n", + "# Create fuel Cell\n", + "fuel_cell = openmc.Cell(name='1.6% Fuel')\n", + "fuel_cell.fill = fuel\n", + "fuel_cell.region = -fuel_outer_radius\n", + "fuel_pin_universe.add_cell(fuel_cell)\n", + "\n", + "# Create a clad Cell\n", + "clad_cell = openmc.Cell(name='1.6% Clad')\n", + "clad_cell.fill = fuel_clad\n", + "clad_cell.region = +fuel_outer_radius & -clad_outer_radius\n", + "fuel_pin_universe.add_cell(clad_cell)\n", + "\n", + "# Create a moderator Cell\n", + "moderator_cell = openmc.Cell(name='1.6% Moderator')\n", + "moderator_cell.fill = fuel_mod\n", + "moderator_cell.region = +clad_outer_radius\n", + "fuel_pin_universe.add_cell(moderator_cell)\n", + "\n", + "# Create a Universe to encapsulate a control rod guide tube\n", + "guide_tube_universe = openmc.Universe(name='Guide Tube')\n", + "\n", + "# Create guide tube Cell\n", + "guide_tube_cell = openmc.Cell(name='Guide Tube Water')\n", + "guide_tube_cell.fill = gt_inmod\n", + "guide_tube_cell.region = -fuel_outer_radius\n", + "guide_tube_universe.add_cell(guide_tube_cell)\n", + "\n", + "# Create a clad Cell\n", + "clad_cell = openmc.Cell(name='Guide Clad')\n", + "clad_cell.fill = gt_clad\n", + "clad_cell.region = +fuel_outer_radius & -clad_outer_radius\n", + "guide_tube_universe.add_cell(clad_cell)\n", + "\n", + "# Create a moderator Cell\n", + "moderator_cell = openmc.Cell(name='Guide Tube Moderator')\n", + "moderator_cell.fill = gt_outmod\n", + "moderator_cell.region = +clad_outer_radius\n", + "guide_tube_universe.add_cell(moderator_cell)\n", + "\n", + "# Create fuel assembly Lattice\n", + "assembly = openmc.RectLattice(name='1.6% Fuel Assembly')\n", + "assembly.dimension = (17, 17)\n", + "assembly.pitch = (1.26, 1.26)\n", + "assembly.lower_left = [-1.26 * 17. / 2.0] * 2\n", + "\n", + "# Create array indices for guide tube locations in lattice\n", + "template_x = np.array([5, 8, 11, 3, 13, 2, 5, 8, 11, 14, 2, 5, 8,\n", + " 11, 14, 2, 5, 8, 11, 14, 3, 13, 5, 8, 11])\n", + "template_y = np.array([2, 2, 2, 3, 3, 5, 5, 5, 5, 5, 8, 8, 8, 8,\n", + " 8, 11, 11, 11, 11, 11, 13, 13, 14, 14, 14])\n", + "\n", + "# Initialize an empty 17x17 array of the lattice universes\n", + "universes = np.empty((17, 17), dtype=openmc.Universe)\n", + "\n", + "# Fill the array with the fuel pin and guide tube universes\n", + "universes[:,:] = fuel_pin_universe\n", + "universes[template_x, template_y] = guide_tube_universe\n", + "\n", + "# Store the array of universes in the lattice\n", + "assembly.universes = universes\n", + "\n", + "# Create root Cell\n", + "root_cell = openmc.Cell(name='root cell')\n", + "root_cell.fill = assembly\n", + "\n", + "# Add boundary planes\n", + "root_cell.region = +min_x & -max_x & +min_y & -max_y & +min_z & -max_z\n", + "\n", + "# Create root Universe\n", + "root_universe = openmc.Universe(universe_id=0, name='root universe')\n", + "root_universe.add_cell(root_cell)\n", + "\n", + "# Create Geometry and set root Universe\n", + "geometry = openmc.Geometry()\n", + "geometry.root_universe = root_universe\n", + "# Export to \"geometry.xml\"\n", + "geometry.export_to_xml()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we can make the changes we need to the settings file.\n", + "These changes are limited to telling OpenMC we will be running a multi-group calculation and pointing to the location of our multi-group cross section file." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Set the location of the cross sections file\n", + "settings_file.cross_sections = './mgxs.xml'\n", + "settings_file.energy_mode = 'multi-group'\n", + "\n", + "# Export to \"settings.xml\"\n", + "settings_file.export_to_xml()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, lets tell OpenMC we want to tally fissions over a mesh for comparison. " + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Instantiate a tally Mesh\n", + "mesh = openmc.Mesh(mesh_id=1)\n", + "mesh.type = 'regular'\n", + "mesh.dimension = [17, 17]\n", + "mesh.lower_left = [-10.71, -10.71]\n", + "mesh.upper_right = [+10.71, +10.71]\n", + "\n", + "# Instantiate tally Filter\n", + "mesh_filter = openmc.Filter()\n", + "mesh_filter.mesh = mesh\n", + "\n", + "# Instantiate the Tally\n", + "tally = openmc.Tally(name='mesh tally')\n", + "tally.filters = [mesh_filter]\n", + "tally.scores = ['fission']\n", + "\n", + "# Add tally to collection\n", + "tallies_file.append(tally)\n", + "\n", + "# Export all tallies to a \"tallies.xml\" file\n", + "tallies_file.export_to_xml()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before we run the calculation we will close the StatePoint file (as we are about to over-write it), and then we can run the multi-group calculation." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " .d88888b. 888b d888 .d8888b.\n", + " d88P\" \"Y88b 8888b d8888 d88P Y88b\n", + " 888 888 88888b.d88888 888 888\n", + " 888 888 88888b. .d88b. 88888b. 888Y88888P888 888 \n", + " 888 888 888 \"88b d8P Y8b 888 \"88b 888 Y888P 888 888 \n", + " 888 888 888 888 88888888 888 888 888 Y8P 888 888 888\n", + " Y88b. .d88P 888 d88P Y8b. 888 888 888 \" 888 Y88b d88P\n", + " \"Y88888P\" 88888P\" \"Y8888 888 888 888 888 \"Y8888P\"\n", + "__________________888______________________________________________________\n", + " 888\n", + " 888\n", + "\n", + " Copyright: 2011-2016 Massachusetts Institute of Technology\n", + " License: http://openmc.readthedocs.org/en/latest/license.html\n", + " Version: 0.7.1\n", + " Git SHA1: 179e9ab147e505563d118ed58096b3d225160ffa\n", + " Date/Time: 2016-05-07 14:23:45\n", + " OpenMP Threads: 4\n", + "\n", + " ===========================================================================\n", + " ========================> INITIALIZATION <=========================\n", + " ===========================================================================\n", + "\n", + " Reading settings XML file...\n", + " Reading cross sections XML file...\n", + " Reading geometry XML file...\n", + " Reading materials XML file...\n", + " Reading tallies XML file...\n", + " Building neighboring cells lists for each surface...\n", + " Loading Cross Section Data...\n", + " Loading fuel.2g Data...\n", + " Loading fuel_clad.2g Data...\n", + " Loading fuel_mod.2g Data...\n", + " Loading gt_inmod.2g Data...\n", + " Loading gt_clad.2g Data...\n", + " Loading gt_outmod.2g Data...\n", + " Initializing source particles...\n", + "\n", + " ===========================================================================\n", + " ====================> K EIGENVALUE SIMULATION <====================\n", + " ===========================================================================\n", + "\n", + " Bat./Gen. k Average k \n", + " ========= ======== ==================== \n", + " 1/1 1.01863 \n", + " 2/1 1.02630 \n", + " 3/1 1.03077 \n", + " 4/1 0.99715 \n", + " 5/1 1.02328 \n", + " 6/1 1.02283 \n", + " 7/1 1.00540 \n", + " 8/1 1.02232 \n", + " 9/1 0.99782 \n", + " 10/1 1.00838 \n", + " 11/1 1.01803 \n", + " 12/1 1.02530 1.02167 +/- 0.00363\n", + " 13/1 1.00514 1.01616 +/- 0.00589\n", + " 14/1 0.98994 1.00960 +/- 0.00777\n", + " 15/1 1.01028 1.00974 +/- 0.00602\n", + " 16/1 1.04607 1.01580 +/- 0.00780\n", + " 17/1 1.03300 1.01825 +/- 0.00703\n", + " 18/1 1.03149 1.01991 +/- 0.00631\n", + " 19/1 0.98692 1.01624 +/- 0.00667\n", + " 20/1 1.05205 1.01982 +/- 0.00695\n", + " 21/1 1.01572 1.01945 +/- 0.00630\n", + " 22/1 1.02517 1.01993 +/- 0.00577\n", + " 23/1 1.00274 1.01861 +/- 0.00547\n", + " 24/1 1.04739 1.02066 +/- 0.00547\n", + " 25/1 1.01883 1.02054 +/- 0.00509\n", + " 26/1 1.02021 1.02052 +/- 0.00476\n", + " 27/1 1.04696 1.02207 +/- 0.00474\n", + " 28/1 1.02751 1.02238 +/- 0.00448\n", + " 29/1 1.09537 1.02622 +/- 0.00572\n", + " 30/1 1.03685 1.02675 +/- 0.00545\n", + " 31/1 0.99812 1.02539 +/- 0.00536\n", + " 32/1 1.02526 1.02538 +/- 0.00511\n", + " 33/1 1.05466 1.02665 +/- 0.00505\n", + " 34/1 1.04816 1.02755 +/- 0.00491\n", + " 35/1 1.00148 1.02651 +/- 0.00483\n", + " 36/1 1.02315 1.02638 +/- 0.00464\n", + " 37/1 1.05771 1.02754 +/- 0.00461\n", + " 38/1 1.01675 1.02715 +/- 0.00446\n", + " 39/1 1.03707 1.02749 +/- 0.00432\n", + " 40/1 1.01903 1.02721 +/- 0.00418\n", + " 41/1 1.00332 1.02644 +/- 0.00412\n", + " 42/1 1.02533 1.02641 +/- 0.00399\n", + " 43/1 0.98531 1.02516 +/- 0.00406\n", + " 44/1 1.00406 1.02454 +/- 0.00399\n", + " 45/1 1.01057 1.02414 +/- 0.00389\n", + " 46/1 1.02755 1.02424 +/- 0.00378\n", + " 47/1 1.02783 1.02433 +/- 0.00368\n", + " 48/1 1.00003 1.02369 +/- 0.00364\n", + " 49/1 1.00442 1.02320 +/- 0.00358\n", + " 50/1 1.03215 1.02342 +/- 0.00350\n", + " 51/1 1.01672 1.02326 +/- 0.00341\n", + " 52/1 1.03702 1.02359 +/- 0.00335\n", + " 53/1 1.02063 1.02352 +/- 0.00327\n", + " 54/1 1.04596 1.02403 +/- 0.00323\n", + " 55/1 1.01926 1.02392 +/- 0.00316\n", + " 56/1 1.03058 1.02407 +/- 0.00310\n", + " 57/1 1.06126 1.02486 +/- 0.00313\n", + " 58/1 1.06411 1.02568 +/- 0.00317\n", + " 59/1 1.03278 1.02582 +/- 0.00311\n", + " 60/1 1.04472 1.02620 +/- 0.00307\n", + " 61/1 1.00186 1.02572 +/- 0.00305\n", + " 62/1 1.01133 1.02545 +/- 0.00300\n", + " 63/1 1.03713 1.02567 +/- 0.00295\n", + " 64/1 1.01363 1.02544 +/- 0.00291\n", + " 65/1 0.98126 1.02464 +/- 0.00296\n", + " 66/1 1.01500 1.02447 +/- 0.00292\n", + " 67/1 1.02437 1.02447 +/- 0.00286\n", + " 68/1 1.05057 1.02492 +/- 0.00285\n", + " 69/1 1.04903 1.02533 +/- 0.00283\n", + " 70/1 1.02199 1.02527 +/- 0.00278\n", + " 71/1 1.00536 1.02494 +/- 0.00276\n", + " 72/1 1.01658 1.02481 +/- 0.00272\n", + " 73/1 1.00866 1.02455 +/- 0.00268\n", + " 74/1 1.01800 1.02445 +/- 0.00264\n", + " 75/1 0.99176 1.02395 +/- 0.00265\n", + " 76/1 1.03336 1.02409 +/- 0.00262\n", + " 77/1 1.02699 1.02413 +/- 0.00258\n", + " 78/1 1.01596 1.02401 +/- 0.00254\n", + " 79/1 1.02292 1.02400 +/- 0.00250\n", + " 80/1 1.04804 1.02434 +/- 0.00249\n", + " 81/1 0.99494 1.02393 +/- 0.00249\n", + " 82/1 1.02646 1.02396 +/- 0.00246\n", + " 83/1 1.01223 1.02380 +/- 0.00243\n", + " 84/1 1.02572 1.02383 +/- 0.00239\n", + " 85/1 1.02709 1.02387 +/- 0.00236\n", + " 86/1 1.00315 1.02360 +/- 0.00235\n", + " 87/1 1.01809 1.02353 +/- 0.00232\n", + " 88/1 1.01566 1.02342 +/- 0.00229\n", + " 89/1 1.01093 1.02327 +/- 0.00227\n", + " 90/1 1.02812 1.02333 +/- 0.00224\n", + " 91/1 1.02288 1.02332 +/- 0.00221\n", + " 92/1 1.04070 1.02353 +/- 0.00219\n", + " 93/1 1.03697 1.02370 +/- 0.00217\n", + " 94/1 1.03486 1.02383 +/- 0.00215\n", + " 95/1 1.06359 1.02430 +/- 0.00218\n", + " 96/1 1.04811 1.02457 +/- 0.00217\n", + " 97/1 1.01303 1.02444 +/- 0.00215\n", + " 98/1 1.01243 1.02430 +/- 0.00213\n", + " 99/1 1.03238 1.02439 +/- 0.00211\n", + " 100/1 1.02054 1.02435 +/- 0.00208\n", + " 101/1 1.00402 1.02413 +/- 0.00207\n", + " 102/1 1.03800 1.02428 +/- 0.00206\n", + " 103/1 1.02541 1.02429 +/- 0.00203\n", + " 104/1 1.06867 1.02476 +/- 0.00207\n", + " 105/1 1.03192 1.02484 +/- 0.00205\n", + " 106/1 1.00100 1.02459 +/- 0.00204\n", + " 107/1 1.01098 1.02445 +/- 0.00202\n", + " 108/1 1.02930 1.02450 +/- 0.00200\n", + " 109/1 1.02173 1.02447 +/- 0.00198\n", + " 110/1 1.01411 1.02437 +/- 0.00197\n", + " 111/1 1.03920 1.02452 +/- 0.00195\n", + " 112/1 1.01984 1.02447 +/- 0.00193\n", + " 113/1 1.03912 1.02461 +/- 0.00192\n", + " 114/1 1.04124 1.02477 +/- 0.00191\n", + " 115/1 1.04802 1.02499 +/- 0.00190\n", + " 116/1 1.04129 1.02515 +/- 0.00189\n", + " 117/1 1.03072 1.02520 +/- 0.00187\n", + " 118/1 1.05167 1.02544 +/- 0.00187\n", + " 119/1 0.99954 1.02521 +/- 0.00187\n", + " 120/1 1.00093 1.02499 +/- 0.00187\n", + " 121/1 1.04929 1.02520 +/- 0.00186\n", + " 122/1 1.04556 1.02539 +/- 0.00185\n", + " 123/1 1.03298 1.02545 +/- 0.00184\n", + " 124/1 1.01603 1.02537 +/- 0.00182\n", + " 125/1 1.03522 1.02546 +/- 0.00181\n", + " 126/1 1.05644 1.02572 +/- 0.00181\n", + " 127/1 1.03754 1.02582 +/- 0.00180\n", + " 128/1 1.01524 1.02573 +/- 0.00179\n", + " 129/1 1.01263 1.02562 +/- 0.00178\n", + " 130/1 0.99835 1.02540 +/- 0.00178\n", + " 131/1 1.01268 1.02529 +/- 0.00177\n", + " 132/1 1.03975 1.02541 +/- 0.00175\n", + " 133/1 1.00702 1.02526 +/- 0.00175\n", + " 134/1 1.02335 1.02525 +/- 0.00173\n", + " 135/1 1.04378 1.02539 +/- 0.00173\n", + " 136/1 1.04610 1.02556 +/- 0.00172\n", + " 137/1 1.02284 1.02554 +/- 0.00171\n", + " 138/1 1.05720 1.02578 +/- 0.00171\n", + " 139/1 1.00965 1.02566 +/- 0.00170\n", + " 140/1 1.03719 1.02575 +/- 0.00169\n", + " 141/1 1.02413 1.02574 +/- 0.00168\n", + " 142/1 1.03125 1.02578 +/- 0.00167\n", + " 143/1 1.03641 1.02586 +/- 0.00166\n", + " 144/1 1.02137 1.02582 +/- 0.00164\n", + " 145/1 1.01522 1.02575 +/- 0.00163\n", + " 146/1 1.05163 1.02594 +/- 0.00163\n", + " 147/1 1.03612 1.02601 +/- 0.00162\n", + " 148/1 1.03346 1.02606 +/- 0.00161\n", + " 149/1 1.02306 1.02604 +/- 0.00160\n", + " 150/1 1.01764 1.02598 +/- 0.00159\n", + " 151/1 1.01787 1.02592 +/- 0.00158\n", + " 152/1 1.03263 1.02597 +/- 0.00157\n", + " 153/1 1.01877 1.02592 +/- 0.00156\n", + " 154/1 1.02870 1.02594 +/- 0.00155\n", + " 155/1 1.03071 1.02597 +/- 0.00154\n", + " 156/1 1.04229 1.02609 +/- 0.00153\n", + " 157/1 1.03973 1.02618 +/- 0.00152\n", + " 158/1 1.02180 1.02615 +/- 0.00151\n", + " 159/1 1.01067 1.02604 +/- 0.00151\n", + " 160/1 1.02888 1.02606 +/- 0.00150\n", + " 161/1 1.01711 1.02600 +/- 0.00149\n", + " 162/1 1.01087 1.02590 +/- 0.00148\n", + " 163/1 1.01886 1.02586 +/- 0.00147\n", + " 164/1 1.02210 1.02583 +/- 0.00146\n", + " 165/1 1.04020 1.02593 +/- 0.00146\n", + " 166/1 1.03658 1.02600 +/- 0.00145\n", + " 167/1 1.03222 1.02603 +/- 0.00144\n", + " 168/1 1.03247 1.02608 +/- 0.00143\n", + " 169/1 0.99739 1.02590 +/- 0.00143\n", + " 170/1 1.02464 1.02589 +/- 0.00142\n", + " 171/1 1.04623 1.02601 +/- 0.00142\n", + " 172/1 1.04328 1.02612 +/- 0.00142\n", + " 173/1 1.00812 1.02601 +/- 0.00141\n", + " 174/1 1.01224 1.02593 +/- 0.00141\n", + " 175/1 1.00882 1.02582 +/- 0.00140\n", + " 176/1 1.01286 1.02574 +/- 0.00140\n", + " 177/1 1.02048 1.02571 +/- 0.00139\n", + " 178/1 1.04269 1.02581 +/- 0.00138\n", + " 179/1 1.05862 1.02601 +/- 0.00139\n", + " 180/1 1.02924 1.02603 +/- 0.00138\n", + " 181/1 1.01491 1.02596 +/- 0.00137\n", + " 182/1 1.04255 1.02606 +/- 0.00137\n", + " 183/1 0.99191 1.02586 +/- 0.00137\n", + " 184/1 1.00392 1.02573 +/- 0.00137\n", + " 185/1 1.02982 1.02576 +/- 0.00137\n", + " 186/1 1.02682 1.02576 +/- 0.00136\n", + " 187/1 1.01484 1.02570 +/- 0.00135\n", + " 188/1 1.02825 1.02572 +/- 0.00134\n", + " 189/1 0.98954 1.02551 +/- 0.00135\n", + " 190/1 1.00522 1.02540 +/- 0.00135\n", + " 191/1 1.03762 1.02547 +/- 0.00134\n", + " 192/1 1.02091 1.02544 +/- 0.00134\n", + " 193/1 1.04549 1.02555 +/- 0.00133\n", + " 194/1 1.05531 1.02572 +/- 0.00134\n", + " 195/1 1.01479 1.02566 +/- 0.00133\n", + " 196/1 1.01337 1.02559 +/- 0.00132\n", + " 197/1 0.99187 1.02541 +/- 0.00133\n", + " 198/1 1.01280 1.02534 +/- 0.00132\n", + " 199/1 1.00049 1.02521 +/- 0.00132\n", + " 200/1 1.01879 1.02518 +/- 0.00132\n", + " Creating state point statepoint.200.h5...\n", + "\n", + " ===========================================================================\n", + " ======================> SIMULATION FINISHED <======================\n", + " ===========================================================================\n", + "\n", + "\n", + " =======================> TIMING STATISTICS <=======================\n", + "\n", + " Total time for initialization = 6.3000E-02 seconds\n", + " Reading cross sections = 5.0000E-03 seconds\n", + " Total time in simulation = 7.3280E+01 seconds\n", + " Time in transport only = 7.3104E+01 seconds\n", + " Time in inactive batches = 1.1200E+00 seconds\n", + " Time in active batches = 7.2160E+01 seconds\n", + " Time synchronizing fission bank = 2.5000E-02 seconds\n", + " Sampling source sites = 1.8000E-02 seconds\n", + " SEND/RECV source sites = 7.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", + " Total time for finalization = 0.0000E+00 seconds\n", + " Total time elapsed = 7.3353E+01 seconds\n", + " Calculation Rate (inactive) = 44642.9 neutrons/second\n", + " Calculation Rate (active) = 13165.2 neutrons/second\n", + "\n", + " ============================> RESULTS <============================\n", + "\n", + " k-effective (Collision) = 1.02597 +/- 0.00117\n", + " k-effective (Track-length) = 1.02518 +/- 0.00132\n", + " k-effective (Absorption) = 1.02581 +/- 0.00070\n", + " Combined k-effective = 1.02562 +/- 0.00068\n", + " Leakage Fraction = 0.00000 +/- 0.00000\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Close the StatePoint File\n", + "sp._f.close()\n", + "\n", + "# Run the Multi-Group OpenMC Simulation\n", + "openmc.run()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Results Comparison\n", + "Now we can compare the multi-group and continuous-energy results.\n", + "\n", + "We will begin by loading the multi-group statepoint file we just finished writing and extracting the calculated keff." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Load the last statepoint file and keff value\n", + "mgsp = openmc.StatePoint('statepoint.' + str(batches) + '.h5')\n", + "mgsu = openmc.Summary('summary.h5')\n", + "mgsp.link_with_summary(mgsu)\n", + "mg_keff = mgsp.k_combined" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lets compare the two eigenvalues, including their bias" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Continuous-Energy keff = 1.025440\n", + "Multi-Group keff = 1.025621\n", + "bias [pcm]: -18.1\n" + ] + } + ], + "source": [ + "bias = 1.0E5 * (ce_keff[0] - mg_keff[0])\n", + "\n", + "print('Continuous-Energy keff = {0:1.6f}'.format(ce_keff[0]))\n", + "print('Multi-Group keff = {0:1.6f}'.format(mg_keff[0]))\n", + "print('bias [pcm]: {0:1.1f}'.format(bias))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see quite good agreement with only an 18pcm difference between the two." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Flux and Pin Power Visualizations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we will visualize the mesh tally results obtained from both the Continuous-Energy and Multi-Group OpenMC calculations.\n", + "\n", + "First, we extract volume-integrated fission rates from the Multi-Group calculation's mesh fission rate tally for each pin cell in the fuel assembly." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can do the same for the Multi-Group results." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Get the OpenMC fission rate mesh tally data\n", + "mg_mesh_tally = mgsp.get_tally(name='mesh tally')\n", + "mgopenmc_fission_rates = mg_mesh_tally.get_values(scores=['fission'])\n", + "\n", + "# Reshape array to 2D for plotting\n", + "mgopenmc_fission_rates.shape = (17,17)\n", + "\n", + "# Normalize to the average pin power\n", + "mgopenmc_fission_rates /= np.mean(mgopenmc_fission_rates)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can easily use Matplotlib to visualize the two fission rates side-by-side." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot the CE fission rates in the left subplot\n", + "fig = plt.subplot(121)\n", + "plt.imshow(openmc_fission_rates, interpolation='none', cmap='jet')\n", + "plt.title('Continuous-Energy Fission Rates')\n", + "\n", + "# Plot the MG fission rates in the right subplot\n", + "fig2 = plt.subplot(122)\n", + "plt.imshow(mgopenmc_fission_rates, interpolation='none', cmap='jet')\n", + "plt.title('Multi-Group Fission Rates')\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "We also see very good agreement between the fission rate distributions." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.rst b/docs/source/pythonapi/examples/mgxs-part-iv.rst new file mode 100644 index 0000000000..e243255217 --- /dev/null +++ b/docs/source/pythonapi/examples/mgxs-part-iv.rst @@ -0,0 +1,13 @@ +.. _notebook_mgxs_part_iv: + +==================================================== +MGXS Part IV: Multi-Group Mode Cross-Section Library +==================================================== + +.. only:: html + + .. notebook:: mgxs-part-iv.ipynb + +.. only:: latex + + IPython notebooks must be viewed in the online HTML documentation. diff --git a/docs/source/pythonapi/index.rst b/docs/source/pythonapi/index.rst index 1631976e67..3c4899cd2b 100644 --- a/docs/source/pythonapi/index.rst +++ b/docs/source/pythonapi/index.rst @@ -26,6 +26,7 @@ Example Jupyter Notebooks examples/mgxs-part-i examples/mgxs-part-ii examples/mgxs-part-iii + examples/mgxs-part-iv ------------------------------------ :mod:`openmc` -- Basic Functionality diff --git a/openmc/summary.py b/openmc/summary.py index f33397d724..af164a12cf 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -41,6 +41,7 @@ class Summary(object): self._read_nuclides() self._read_geometry() self._read_tallies() + self._f.close() @property def openmc_geometry(self): From 187d332dc38e41814f75b3c87024a5524b38e5b3 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 7 May 2016 14:40:57 -0400 Subject: [PATCH 490/650] Changed OPENMC_MG_MGXS_TYPES to use transport instead of total --- openmc/mgxs/library.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 34221f707c..d74c8ced3d 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -17,7 +17,7 @@ if sys.version_info[0] >= 3: # The following represent the most accurate MGXS generation strategy # for use in the MG mode of OpenMC. -OPENMC_MG_MGXS_TYPES = ['total', 'absorption', 'nu-fission', 'chi', +OPENMC_MG_MGXS_TYPES = ['transport', 'absorption', 'nu-fission', 'chi', 'scatter matrix', 'nu-scatter matrix'] From cf45388d6e0e207e814a378708189e0b19778780 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Sat, 7 May 2016 15:38:59 -0400 Subject: [PATCH 491/650] Fix universe assignment for openmc.HexLattice --- openmc/lattice.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/lattice.py b/openmc/lattice.py index f1e7759201..f78ec8e909 100644 --- a/openmc/lattice.py +++ b/openmc/lattice.py @@ -649,7 +649,7 @@ class HexLattice(Lattice): # Set the number of rings and make sure this number is consistent for # all axial positions. if n_dims == 3: - self.num_rings = len(self._universes) + self.num_rings = len(self._universes[0]) for rings in self._universes: if len(rings) != self._num_rings: msg = 'HexLattice ID={0:d} has an inconsistent number of ' \ From 08995f74e2ad9f4a8954c92b110e4d07e85e440d Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sun, 8 May 2016 11:40:29 -0400 Subject: [PATCH 492/650] Fixed issues with indentation for distribcell paths per comments by @paulromano --- openmc/filter.py | 16 ++++++++-------- openmc/mgxs/mgxs.py | 8 +++++--- openmc/tallies.py | 10 ---------- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/openmc/filter.py b/openmc/filter.py index ff21f4e931..01f2ad2013 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -516,7 +516,7 @@ class Filter(object): return filter_bin - def get_pandas_dataframe(self, data_size, distribcell_paths=False): + def get_pandas_dataframe(self, data_size, distribcell_paths=True): """Builds a Pandas DataFrame for the Filter's bins. This method constructs a Pandas DataFrame object for the filter with @@ -531,13 +531,13 @@ class Filter(object): ---------- data_size : Integral The total number of bins in the tally corresponding to this filter - distribcell_paths : bool - Construct columns for distribcell tally filters. The geometric - information in the Summary object is embedded into a Multi-index - column with a geometric "path" to each distribcell instance. - NOTE: This option assumes that all distribcell paths are of the same - length and do not have the same universes and cells but different - lattice cell indices. + distribcell_paths : bool, optional + Construct columns for distribcell tally filters (default is True). + The geometric information in the Summary object is embedded into a + Multi-index column with a geometric "path" to each distribcell + instance. NOTE: This option assumes that all distribcell paths are + of the same length and do not have the same universes and cells but + different lattice cell indices. Returns ------- diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index d7ba0117d2..504ee51db1 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1366,9 +1366,11 @@ class MGXS(object): xs_type: {'macro', 'micro'} Return macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. - distribcell_paths : list of str - The paths traversed through the CSG tree to reach each distribcell - instance (for 'distribcell' filters only) + distribcell_paths : bool, optional + Construct columns for distribcell tally filters (default is True). + The geometric information in the Summary object is embedded into + a Multi-index column with a geometric "path" to each distribcell + instance. Returns ------- diff --git a/openmc/tallies.py b/openmc/tallies.py index 2cac334040..bea5bc3ff5 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1586,16 +1586,6 @@ class Tally(object): msg = 'The Tally ID="{0}" has no data to return'.format(self.id) raise KeyError(msg) - ''' - # If using Summary, ensure StatePoint.link_with_summary(...) was called - if distribcell_pathssummary and not self.with_summary: - msg = 'The Tally ID="{0}" has not been linked with the Summary. ' \ - 'Call the StatePoint.link_with_summary(...) method ' \ - 'before using Tally.get_pandas_dataframe(...) with ' \ - 'Summary info'.format(self.id) - raise KeyError(msg) - ''' - # Initialize a pandas dataframe for the tally data import pandas as pd df = pd.DataFrame() From 417b9a86a684f471ea938c083fddb21b7ce0a24a Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sun, 8 May 2016 11:43:48 -0400 Subject: [PATCH 493/650] Made distribcell paths default to True for MGXS Pandas DataFrames --- openmc/mgxs/mgxs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 504ee51db1..a5c56034e8 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1346,7 +1346,7 @@ class MGXS(object): modified.write('\n\\end{document}') def get_pandas_dataframe(self, groups='all', nuclides='all', - xs_type='macro', distribcell_paths=False): + xs_type='macro', distribcell_paths=True): """Build a Pandas DataFrame for the MGXS data. This method leverages :meth:`openmc.Tally.get_pandas_dataframe`, but From b01c0281cec94c1ee1e397617f8a42a36eb2dde7 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sun, 8 May 2016 11:50:09 -0400 Subject: [PATCH 494/650] Fixed issue with dropping scores from MGXS Pandas DF with multi-indexed distribcell paths --- openmc/mgxs/mgxs.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index a5c56034e8..99a3d8bfe8 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1415,10 +1415,7 @@ class MGXS(object): distribcell_paths=distribcell_paths) # Remove the score column since it is homogeneous and redundant - if distribcell_paths and 'distribcell' in self.domain_type: - df = df.drop('score', level=0, axis=1) - else: - df = df.drop('score', axis=1) + df = df.drop('score', axis=1) # Override energy groups bounds with indices all_groups = np.arange(self.num_groups, 0, -1, dtype=np.int) From 2ca61564e2c7fb5b514661f1ce00e0630725606a Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sun, 8 May 2016 13:01:05 -0400 Subject: [PATCH 495/650] Made distribcell paths default to True for Tally Pandas DF --- .../examples/pandas-dataframes.ipynb | 283 +++--------------- openmc/tallies.py | 11 +- 2 files changed, 47 insertions(+), 247 deletions(-) diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index 87eb50f7bd..50d66292cd 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -370,7 +370,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAPZSURB\nVGje7Zs7buMwEIZ9iey50gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwg\nwIcgg8Cc4fCTSK5W4OeFkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7\nE08mlia+rn7VcKXP8sRszFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WB\nzfiz20hXORmP9fi/bM9EeUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4\nlXju8K3DKv9NThOZ3q2KmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3Oaf\nPX40NGgST2r+uvQkXXp6cKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcub\nlfKGt6apotG/NVx3SInWtLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJb\nf8qlPynYmpKCh7OB1fzNalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utr\nJTy8/06TXh0r/5JOa2JmYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU\n4YuBTPa/8P67l/6r44ds+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m\n/65n+S8p/itN15v0UkW3/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB\n6R3Cqn55U4rv4kfH3zaSgQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6\nbjT6rym9I/v/03/b+LHS4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv\n6h9B/Bfxr9j1Hz2eN/hO8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wX\nfP8Mvf9G37/D/ovuP8SeP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7\n+O+E8zdP/8XOf8Hnz9Dzb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589j\nz5/Y8ej9h4D+W7qQmf57efqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m\n4fwXuH+M3n+OO3++AX9clR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA1LTAxVDEzOjQ5\nOjA2LTA0OjAwzoiN5AAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNS0wMVQxMzo0OTowNi0wNDow\nML/VNVgAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAPZSURB\nVGje7Zs7buMwEIZ9iey50gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwg\nwIcgg8Cc4fCTSK5W4OeFkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7\nE08mlia+rn7VcKXP8sRszFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WB\nzfiz20hXORmP9fi/bM9EeUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4\nlXju8K3DKv9NThOZ3q2KmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3Oaf\nPX40NGgST2r+uvQkXXp6cKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcub\nlfKGt6apotG/NVx3SInWtLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJb\nf8qlPynYmpKCh7OB1fzNalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utr\nJTy8/06TXh0r/5JOa2JmYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU\n4YuBTPa/8P67l/6r44ds+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m\n/65n+S8p/itN15v0UkW3/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB\n6R3Cqn55U4rv4kfH3zaSgQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6\nbjT6rym9I/v/03/b+LHS4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv\n6h9B/Bfxr9j1Hz2eN/hO8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wX\nfP8Mvf9G37/D/ovuP8SeP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7\n+O+E8zdP/8XOf8Hnz9Dzb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589j\nz5/Y8ej9h4D+W7qQmf57efqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m\n4fwXuH+M3n+OO3++AX9clR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA1LTA4VDEyOjU4\nOjE2LTA0OjAwLIPu3wAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNS0wOFQxMjo1ODoxNi0wNDow\nMF3eVmMAAAAASUVORK5CYII=\n", "text/plain": [ "" ] @@ -554,8 +554,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: cc27630f7db25b148efab11d182c6c7b34e40a5b\n", - " Date/Time: 2016-05-01 13:49:06\n", + " Git SHA1: 9bff2ab4747873a542a27cd7cfdf7341c23a4405\n", + " Date/Time: 2016-05-08 12:58:17\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -619,20 +619,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.9900E-01 seconds\n", - " Reading cross sections = 9.0000E-02 seconds\n", - " Total time in simulation = 4.8580E+00 seconds\n", - " Time in transport only = 4.8080E+00 seconds\n", - " Time in inactive batches = 7.9400E-01 seconds\n", - " Time in active batches = 4.0640E+00 seconds\n", - " Time synchronizing fission bank = 0.0000E+00 seconds\n", - " Sampling source sites = 0.0000E+00 seconds\n", + " Total time for initialization = 3.8600E-01 seconds\n", + " Reading cross sections = 9.1000E-02 seconds\n", + " Total time in simulation = 4.3500E+00 seconds\n", + " Time in transport only = 4.3200E+00 seconds\n", + " Time in inactive batches = 6.6700E-01 seconds\n", + " Time in active batches = 3.6830E+00 seconds\n", + " Time synchronizing fission bank = 2.0000E-03 seconds\n", + " Sampling source sites = 2.0000E-03 seconds\n", " SEND/RECV source sites = 0.0000E+00 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 5.2710E+00 seconds\n", - " Calculation Rate (inactive) = 15743.1 neutrons/second\n", - " Calculation Rate (active) = 9227.36 neutrons/second\n", + " Total time elapsed = 4.7500E+00 seconds\n", + " Calculation Rate (inactive) = 18740.6 neutrons/second\n", + " Calculation Rate (active) = 10181.9 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1111,7 +1111,7 @@ "data": { "image/png": "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\nSWry/wHxFqsYpaO7aQAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1134,7 +1134,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 27, @@ -1145,7 +1145,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1514,7 +1514,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Print the distribcell tally dataframe **without** distribcell paths" + "Print the distribcell tally dataframe with distribcell paths" ] }, { @@ -1523,216 +1523,6 @@ "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
distribcellscoremeanstd. dev.
558279absorption8.19e-057.82e-06
559279scatter1.33e-026.19e-04
560280absorption1.00e-047.93e-06
561280scatter1.40e-025.61e-04
562281absorption9.52e-057.08e-06
563281scatter1.51e-026.50e-04
564282absorption9.85e-059.47e-06
565282scatter1.53e-024.63e-04
566283absorption1.08e-041.34e-05
567283scatter1.65e-027.04e-04
568284absorption1.13e-047.91e-06
569284scatter1.67e-025.51e-04
570285absorption1.23e-049.53e-06
571285scatter1.88e-027.25e-04
572286absorption1.44e-041.34e-05
573286scatter1.90e-027.07e-04
574287absorption1.26e-048.66e-06
575287scatter1.97e-027.23e-04
576288absorption1.25e-049.59e-06
577288scatter2.01e-026.75e-04
\n", - "
" - ], - "text/plain": [ - " distribcell score mean std. dev.\n", - "558 279 absorption 8.19e-05 7.82e-06\n", - "559 279 scatter 1.33e-02 6.19e-04\n", - "560 280 absorption 1.00e-04 7.93e-06\n", - "561 280 scatter 1.40e-02 5.61e-04\n", - "562 281 absorption 9.52e-05 7.08e-06\n", - "563 281 scatter 1.51e-02 6.50e-04\n", - "564 282 absorption 9.85e-05 9.47e-06\n", - "565 282 scatter 1.53e-02 4.63e-04\n", - "566 283 absorption 1.08e-04 1.34e-05\n", - "567 283 scatter 1.65e-02 7.04e-04\n", - "568 284 absorption 1.13e-04 7.91e-06\n", - "569 284 scatter 1.67e-02 5.51e-04\n", - "570 285 absorption 1.23e-04 9.53e-06\n", - "571 285 scatter 1.88e-02 7.25e-04\n", - "572 286 absorption 1.44e-04 1.34e-05\n", - "573 286 scatter 1.90e-02 7.07e-04\n", - "574 287 absorption 1.26e-04 8.66e-06\n", - "575 287 scatter 1.97e-02 7.23e-04\n", - "576 288 absorption 1.25e-04 9.59e-06\n", - "577 288 scatter 2.01e-02 6.75e-04" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Get a pandas dataframe for the distribcell tally data\n", - "df = tally.get_pandas_dataframe(nuclides=False)\n", - "\n", - "# Print the last twenty rows in the dataframe\n", - "df.tail(20)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Print the distribcell tally dataframe **with** distribcell paths" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": false - }, "outputs": [ { "data": { @@ -2133,14 +1923,14 @@ "577 2.01e-02 6.75e-04 " ] }, - "execution_count": 34, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get a pandas dataframe for the distribcell tally data\n", - "df = tally.get_pandas_dataframe(nuclides=False, distribcell_paths=True)\n", + "df = tally.get_pandas_dataframe(nuclides=False)\n", "\n", "# Print the last twenty rows in the dataframe\n", "df.tail(20)" @@ -2148,7 +1938,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "metadata": { "collapsed": false }, @@ -2234,7 +2024,7 @@ "max 9.19e-04 4.95e-05" ] }, - "execution_count": 35, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -2257,7 +2047,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 35, "metadata": { "collapsed": false }, @@ -2295,7 +2085,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 36, "metadata": { "collapsed": false }, @@ -2331,7 +2121,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 37, "metadata": { "collapsed": false }, @@ -2350,10 +2140,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 38, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" }, @@ -2361,7 +2151,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2380,7 +2170,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 38, "metadata": { "collapsed": false }, @@ -2388,10 +2178,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 39, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" }, @@ -2399,7 +2189,7 @@ "data": { "image/png": "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\n9OnTh2bNmtGmTRsuu+wyioqKSt/PzLjvvvvYdddd2W677fjDH/7A3Llz6dOnD02bNmXo0KEbrZ8J\nSggi0mBcccUVXHHFFaxatYq5c+dy8sknA/Dmm28CsGLFClavXk2fPn0YOXIkI0eO5LXXXuOrr75i\n9erVXHbZZQB89tlnXHLJJTz++OMsXryYlStXlna8s97YsWMZMmQIK1as4LTTTiMej3PXXXexfPly\npkyZwqRJk7jvvvs22ubll1/mo48+4t133+WOO+7gvPPO4/HHH+ebb75hxowZjBo1KqPlo4QgIvXe\n4MGDadasWelwySWXlLteTk4Oc+bMYfny5eTn57P//vtv8T0ff/xxrr76ajp37kx+fj5/+ctfGD16\nNCUlJTz11FMce+yx9OvXj9zcXG6++ebNemnr06cPgwcPJhaL0bhxY/bee2/2339/EokEHTt25MIL\nL+SNN97YaJvrrruOJk2a0K1bN7p3786RRx5J586dadq0KYMGDWLatGnVL6wKKCGISL337LPPsmLF\nitJh01/e640YMYJZs2bRpUsX9tlnH55//vktvueiRYvo0KFD6XSHDh0oKSlhyZIlLFq0iPbt25cu\n22abbWjRosVG25ddDjBr1iyOOeYYWrduTZMmTbjxxhtZvnz5Ruu0atWqdLxx48abTa9evbqCUqg+\nJQQRaTB22203Ro0axdKlS7n++usZMmQIa9asKbcP5rZt2zJ//vzS6W+++YZEIkGrVq1o06YNCxYs\nKF22bt06vv/++4223/Q9L774Yrp06cLs2bNZtWoVf/7zn+tcHxNKCCLSYDz22GMsW7aMWCxGs2bN\nAIjFYuy4447EYjG++uqr0nVPPfVU7rrrLr7++mtWr17NjTfeyNChQ0kkEgwZMoRx48YxefJkioqK\nKCgoqPTL/aeffqJJkybk5+fzxRdfVNjvc1Qa7g23IlIt9fG5kPHjx3P11Vezdu1aOnTowOjRo2nc\nuDEAw4YNo2/fvhQXFzN+/HjOPfdcFi1aRP/+/fn555854ogjuOeee4DgYbd77rmHU045hTVr1nDl\nlVfSsmVL8vLytrjvO++8kwsuuIA77riDnj17MnToUF599dVaOe50qQtNybiqPmimB9PqHnWhWbHV\nq1fTrFkzZs+eTadOnSKLQ11oiohEYNy4caxdu5Y1a9ZwzTXX0KNHDzp27Bh1WNWiKiOpEZluxkCk\n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\nSUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2414,6 +2204,15 @@ "pylab.xlabel('Mean')\n", "pylab.legend(['KDE', 'Histogram'])" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/openmc/tallies.py b/openmc/tallies.py index bea5bc3ff5..96323763a2 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1539,7 +1539,7 @@ class Tally(object): return data def get_pandas_dataframe(self, filters=True, nuclides=True, scores=True, - distribcell_paths=False, float_format='{:.2e}'): + distribcell_paths=True, float_format='{:.2e}'): """Build a Pandas DataFrame for the Tally data. This method constructs a Pandas DataFrame object for the Tally data @@ -1557,10 +1557,11 @@ class Tally(object): Include columns with nuclide bin information (default is True). scores : bool Include columns with score bin information (default is True). - distribcell_paths : bool - Construct columns for distribcell tally filters. The geometric - information in the Summary object is embedded into a Multi-index - column with a geometric "path" to each distribcell instance. + distribcell_paths : bool, optional + Construct columns for distribcell tally filters (default is True). + The geometric information in the Summary object is embedded into a + Multi-index column with a geometric "path" to each distribcell + instance. float_format : str All floats in the DataFrame will be formatted using the given format string before printing. From b390a2a53647f1775d1cf68cd2ef2500b528d72e Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 8 May 2016 13:17:43 -0400 Subject: [PATCH 496/650] Resolved comma comments from @paulromano as well as some additional instances I found. --- src/math.F90 | 27 -- src/mgxs_data.F90 | 6 +- src/mgxs_header.F90 | 530 ++++++++++++++++++++++------------------ src/nuclide_header.F90 | 2 +- src/particle_header.F90 | 2 +- src/tally.F90 | 80 +++--- 6 files changed, 337 insertions(+), 310 deletions(-) diff --git a/src/math.F90 b/src/math.F90 index f49220da76..c7ede8d2a5 100644 --- a/src/math.F90 +++ b/src/math.F90 @@ -702,31 +702,4 @@ contains end function watt_spectrum - -!=============================================================================== -! find_angle finds the closest angle on the data grid and returns that index -!=============================================================================== - - pure subroutine find_angle(polar, azimuthal, uvw, i_azi, i_pol) - real(8), intent(in) :: polar(:) ! Polar angles [0,pi] - real(8), intent(in) :: azimuthal(:) ! Azi. angles [-pi,pi] - real(8), intent(in) :: uvw(3) ! Direction of motion - integer, intent(inout) :: i_pol ! Closest polar bin - integer, intent(inout) :: i_azi ! Closest azi bin - - real(8) :: my_pol, my_azi, dangle - - ! Convert uvw to polar and azi - - my_pol = acos(uvw(3)) - my_azi = atan2(uvw(2), uvw(1)) - - ! Search for equi-binned angles - dangle = PI / real(size(polar),8) - i_pol = floor(my_pol / dangle + ONE) - dangle = TWO * PI / real(size(azimuthal),8) - i_azi = floor((my_azi + PI) / dangle + ONE) - - end subroutine find_angle - end module math diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 6cf730cfa3..38d6ebc6c5 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -125,7 +125,7 @@ contains ! Now read in the data specific to the type we just declared call nuclides_MG(i_nuclide) % obj % init_file(node_xsdata, & - energy_groups,get_kfiss,get_fiss,max_order,i_listing) + energy_groups, get_kfiss, get_fiss, max_order, i_listing) ! Add name and alias to dictionary call already_read % add(name) @@ -184,8 +184,8 @@ contains type is (MgxsAngle) allocate(MgxsAngle :: macro_xs(i_mat) % obj) end select - call macro_xs(i_mat) % obj % combine(mat,nuclides_MG,energy_groups, & - max_order,scatt_type,i_mat) + call macro_xs(i_mat) % obj % combine(mat, nuclides_MG, energy_groups, & + max_order, scatt_type, i_mat) end do end subroutine create_macro_xs diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index 7d4ee275d7..725aacffae 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -6,7 +6,7 @@ module mgxs_header use list_header, only: ListInt use material_header, only: material use math, only: calc_pn, calc_rn, expand_harmonic, & - evaluate_legendre, find_angle + evaluate_legendre use nuclide_header, only: MaterialMacroXS use random_lcg, only: prn use scattdata_header @@ -150,7 +150,7 @@ module mgxs_header real(8), allocatable :: nu_fission(:) ! fission matrix (Gout x Gin) real(8), allocatable :: k_fission(:) ! kappa-fission real(8), allocatable :: fission(:) ! neutron production - real(8), allocatable :: chi(:,:) ! Fission Spectra + real(8), allocatable :: chi(:, :) ! Fission Spectra contains procedure :: init_file => mgxsiso_init_file ! Initialize Nuclidic MGXS Data @@ -170,13 +170,13 @@ module mgxs_header type, extends(Mgxs) :: MgxsAngle ! Microscopic cross sections - real(8), allocatable :: total(:,:,:) ! total cross section - real(8), allocatable :: absorption(:,:,:) ! absorption cross section - type(ScattDataContainer), allocatable :: scatter(:,:) ! scattering information - real(8), allocatable :: nu_fission(:,:,:) ! fission matrix (Gout x Gin) - real(8), allocatable :: k_fission(:,:,:) ! kappa-fission - real(8), allocatable :: fission(:,:,:) ! neutron production - real(8), allocatable :: chi(:,:,:,:) ! Fission Spectra + real(8), allocatable :: total(:, :, :) ! total cross section + real(8), allocatable :: absorption(:, :, :) ! absorption cross section + type(ScattDataContainer), allocatable :: scatter(:, :) ! scattering information + real(8), allocatable :: nu_fission(:, :, :) ! fission matrix (Gout x Gin) + real(8), allocatable :: k_fission(:, :, :) ! kappa-fission + real(8), allocatable :: fission(:, :, :) ! neutron production + real(8), allocatable :: chi(:, :, :, :) ! Fission Spectra ! In all cases, right-most indices are theta, phi integer :: n_pol ! Number of polar angles integer :: n_azi ! Number of azimuthal angles @@ -272,11 +272,11 @@ module mgxs_header type(Node), pointer :: node_legendre_mu character(MAX_LINE_LEN) :: temp_str logical :: enable_leg_mu - real(8), allocatable :: temp_arr(:), temp_2d(:,:) - real(8), allocatable :: temp_mult(:,:) - real(8), allocatable :: scatt_coeffs(:,:,:) - real(8), allocatable :: input_scatt(:,:,:) - real(8), allocatable :: temp_scatt(:,:,:) + real(8), allocatable :: temp_arr(:), temp_2d(:, :) + real(8), allocatable :: temp_mult(:, :) + real(8), allocatable :: scatt_coeffs(:, :, :) + real(8), allocatable :: input_scatt(:, :, :) + real(8), allocatable :: temp_scatt(:, :, :) real(8) :: dmu, mu, norm integer :: order, order_dim, gin, gout, l, arr_len integer :: legendre_mu_points, imu @@ -288,24 +288,24 @@ module mgxs_header allocate(this % nu_fission(groups)) allocate(this % chi(groups,groups)) if (this % fissionable) then - if (check_for_node(node_xsdata,"chi")) then + if (check_for_node(node_xsdata, "chi")) then ! Chi was provided, that means they are giving chi and nu-fission ! vectors ! Get chi allocate(temp_arr(1 * groups)) - call get_node_array(node_xsdata,"chi",temp_arr) + call get_node_array(node_xsdata, "chi", temp_arr) do gin = 1, groups do gout = 1, groups - this % chi(gout,gin) = temp_arr(gout) + this % chi(gout, gin) = temp_arr(gout) end do ! Normalize chi so its CDF goes to 1 - this % chi(:,gin) = this % chi(:,gin) / sum(this % chi(:,gin)) + this % chi(:, gin) = this % chi(:, gin) / sum(this % chi(:, gin)) end do deallocate(temp_arr) ! Get nu_fission (as a vector) - if (check_for_node(node_xsdata,"nu_fission")) then - call get_node_array(node_xsdata,"nu_fission",this % nu_fission) + if (check_for_node(node_xsdata, "nu_fission")) then + call get_node_array(node_xsdata, "nu_fission", this % nu_fission) else call fatal_error("If fissionable, must provide nu_fission!") end if @@ -313,11 +313,11 @@ module mgxs_header else ! chi isnt provided but is within nu_fission, existing as a matrix ! So, get nu_fission (as a matrix) - if (check_for_node(node_xsdata,"nu_fission")) then + if (check_for_node(node_xsdata, "nu_fission")) then allocate(temp_arr(groups*groups)) - call get_node_array(node_xsdata,"nu_fission",temp_arr) - allocate(temp_2d(groups,groups)) - temp_2d = reshape(temp_arr,(/groups,groups/)) + call get_node_array(node_xsdata, "nu_fission", temp_arr) + allocate(temp_2d(groups, groups)) + temp_2d = reshape(temp_arr, (/groups, groups/)) deallocate(temp_arr) else call fatal_error("If fissionable, must provide nu_fission!") @@ -325,14 +325,14 @@ module mgxs_header ! Set the vector nu-fission from the matrix nu-fission do gin = 1, groups - this % nu_fission(gin) = sum(temp_2d(:,gin)) + this % nu_fission(gin) = sum(temp_2d(:, gin)) end do ! Now pull out information needed for chi this % chi = temp_2d ! Normalize chi so its CDF goes to 1 do gin = 1, groups - this % chi(:,gin) = this % chi(:,gin) / sum(this % chi(:,gin)) + this % chi(:, gin) = this % chi(:, gin) / sum(this % chi(:, gin)) end do deallocate(temp_2d) end if @@ -340,8 +340,8 @@ module mgxs_header ! (*Need is defined as will be using it to tally) if (get_fiss) then allocate(this % fission(groups)) - if (check_for_node(node_xsdata,"fission")) then - call get_node_array(node_xsdata,"fission",this % fission) + if (check_for_node(node_xsdata, "fission")) then + call get_node_array(node_xsdata, "fission", this % fission) else call fatal_error("Fission data missing, required due to fission& & tallies in tallies.xml file!") @@ -349,8 +349,8 @@ module mgxs_header end if if (get_kfiss) then allocate(this % k_fission(groups)) - if (check_for_node(node_xsdata,"kappa_fission")) then - call get_node_array(node_xsdata,"kappa_fission",this % k_fission) + if (check_for_node(node_xsdata, "kappa_fission")) then + call get_node_array(node_xsdata, "kappa_fission", this % k_fission) else call fatal_error("kappa_fission data missing, required due to & &kappa-fission tallies in tallies.xml file!") @@ -362,19 +362,19 @@ module mgxs_header end if allocate(this % absorption(groups)) - if (check_for_node(node_xsdata,"absorption")) then - call get_node_array(node_xsdata,"absorption",this % absorption) + if (check_for_node(node_xsdata, "absorption")) then + call get_node_array(node_xsdata, "absorption", this % absorption) else call fatal_error("Must provide absorption!") end if ! Get multiplication data if present allocate(temp_mult(groups, groups)) - if (check_for_node(node_xsdata,"multiplicity")) then - arr_len = get_arraysize_double(node_xsdata,"multiplicity") + if (check_for_node(node_xsdata, "multiplicity")) then + arr_len = get_arraysize_double(node_xsdata, "multiplicity") if (arr_len == groups * groups) then allocate(temp_arr(arr_len)) - call get_node_array(node_xsdata,"multiplicity",temp_arr) + call get_node_array(node_xsdata, "multiplicity", temp_arr) temp_mult = reshape(temp_arr, (/groups, groups/)) deallocate(temp_arr) else @@ -392,24 +392,25 @@ module mgxs_header ! Set the default (leave as Legendre polynomials) enable_leg_mu = .false. - if (check_for_node(node_xsdata,"tabular_legendre")) then - call get_node_ptr(node_xsdata,"tabular_legendre",node_legendre_mu) + if (check_for_node(node_xsdata, "tabular_legendre")) then + call get_node_ptr(node_xsdata, "tabular_legendre", node_legendre_mu) if (check_for_node(node_legendre_mu, "enable")) then - call get_node_value(node_legendre_mu,"enable",temp_str) + call get_node_value(node_legendre_mu, "enable", temp_str) temp_str = trim(to_lower(temp_str)) if (temp_str == 'true' .or. temp_str == '1') then enable_leg_mu = .true. elseif (temp_str == 'false' .or. temp_str == '0') then enable_leg_mu = .false. else - call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) + call fatal_error("Unrecognized tabular_legendre/enable: " & + // temp_str) end if end if ! Ok, so if we need to convert to a tabular form, get the user provided ! number of points if (enable_leg_mu) then - if (check_for_node(node_legendre_mu,"num_points")) then - call get_node_value(node_legendre_mu,"num_points", & + if (check_for_node(node_legendre_mu, "num_points")) then + call get_node_value(node_legendre_mu, "num_points", & legendre_mu_points) if (legendre_mu_points <= 0) & call fatal_error("num_points element must be positive& @@ -422,8 +423,8 @@ module mgxs_header end if ! Get the library's value for the order - if (check_for_node(node_xsdata,"order")) then - call get_node_value(node_xsdata,"order",order) + if (check_for_node(node_xsdata, "order")) then + call get_node_value(node_xsdata, "order", order) else call fatal_error("Order Must Be Provided!") end if @@ -444,10 +445,10 @@ module mgxs_header ! but then need to convert it to a more useful ordering for processing ! (Order x Gout x Gin). allocate(input_scatt(groups, groups, order_dim)) - if (check_for_node(node_xsdata,"scatter")) then + if (check_for_node(node_xsdata, "scatter")) then allocate(temp_arr(groups * groups * order_dim)) - call get_node_array(node_xsdata,"scatter",temp_arr) - input_scatt = reshape(temp_arr,(/groups,groups,order_dim/)) + call get_node_array(node_xsdata, "scatter", temp_arr) + input_scatt = reshape(temp_arr, (/groups, groups, order_dim/)) deallocate(temp_arr) ! Compare the number of orders given with the maximum order of the @@ -456,8 +457,8 @@ module mgxs_header order = min(order_dim - 1, max_order) order_dim = order + 1 end if - allocate(temp_scatt(groups,groups,order_dim)) - temp_scatt(:,:,:) = input_scatt(:,:,1:order_dim) + allocate(temp_scatt(groups, groups, order_dim)) + temp_scatt(:, :, :) = input_scatt(:, :, 1:order_dim) ! Take input format (groups, groups, order) and convert to ! the more useful format needed for scattdata: (order, groups, groups) @@ -470,9 +471,9 @@ module mgxs_header this % scatt_type = ANGLE_TABULAR order_dim = legendre_mu_points order = order_dim - dmu = TWO / real(order - 1,8) + dmu = TWO / real(order - 1, 8) - allocate(scatt_coeffs(order_dim,groups,groups)) + allocate(scatt_coeffs(order_dim, groups, groups)) do gin = 1, groups do gout = 1, groups norm = ZERO @@ -482,35 +483,36 @@ module mgxs_header else if (imu == order_dim) then mu = ONE else - mu = -ONE + real(imu - 1,8) * dmu + mu = -ONE + real(imu - 1, 8) * dmu end if - scatt_coeffs(imu,gout,gin) = & - evaluate_legendre(temp_scatt(gout,gin,:),mu) + scatt_coeffs(imu, gout, gin) = & + evaluate_legendre(temp_scatt(gout, gin, :),mu) ! Ensure positivity of distribution - if (scatt_coeffs(imu,gout,gin) < ZERO) & - scatt_coeffs(imu,gout,gin) = ZERO + if (scatt_coeffs(imu, gout, gin) < ZERO) & + scatt_coeffs(imu, gout, gin) = ZERO ! And accrue the integral if (imu > 1) then - norm = norm + HALF * dmu * (scatt_coeffs(imu-1,gout,gin) + & - scatt_coeffs(imu,gout,gin)) + norm = norm + HALF * dmu * & + (scatt_coeffs(imu - 1, gout, gin) + & + scatt_coeffs(imu, gout, gin)) end if end do ! Now that we have the integral, lets ensure that the distribution ! is normalized such that it preserves the original scattering xs if (norm > ZERO) then - scatt_coeffs(:,gout,gin) = scatt_coeffs(:,gout,gin) * & - temp_scatt(gout,gin,1) / norm + scatt_coeffs(:, gout, gin) = scatt_coeffs(:, gout, gin) * & + temp_scatt(gout, gin, 1) / norm end if end do end do else ! Sticking with current representation, carry forward but change ! the array ordering - allocate(scatt_coeffs(order_dim,groups,groups)) + allocate(scatt_coeffs(order_dim, groups, groups)) do gin = 1, groups do gout = 1, groups do l = 1, order_dim - scatt_coeffs(l,gout,gin) = temp_scatt(gout,gin,l) + scatt_coeffs(l, gout, gin) = temp_scatt(gout, gin, l) end do end do end do @@ -541,8 +543,8 @@ module mgxs_header ! Get, or infer, total xs data. allocate(this % total(groups)) - if (check_for_node(node_xsdata,"total")) then - call get_node_array(node_xsdata,"total",this % total) + if (check_for_node(node_xsdata, "total")) then + call get_node_array(node_xsdata, "total", this % total) else this % total = this % absorption + this % scatter % scattxs end if @@ -572,11 +574,11 @@ module mgxs_header type(Node), pointer :: node_legendre_mu character(MAX_LINE_LEN) :: temp_str logical :: enable_leg_mu - real(8), allocatable :: temp_arr(:), temp_4d(:,:,:,:) - real(8), allocatable :: temp_mult(:,:,:,:) - real(8), allocatable :: scatt_coeffs(:,:,:,:,:) - real(8), allocatable :: input_scatt(:,:,:,:,:) - real(8), allocatable :: temp_scatt(:,:,:,:,:) + real(8), allocatable :: temp_arr(:), temp_4d(:, :, :, :) + real(8), allocatable :: temp_mult(:, :, :, :) + real(8), allocatable :: scatt_coeffs(:, :, :, :, :) + real(8), allocatable :: input_scatt(:, :, :, :, :) + real(8), allocatable :: temp_scatt(:, :, :, :, :) real(8) :: dmu, mu, norm, dangle integer :: order, order_dim, gin, gout, l, arr_len integer :: legendre_mu_points, imu, ipol, iazi @@ -604,9 +606,9 @@ module mgxs_header ! When this feature is supported, this line will be activated call get_node_array(node_xsdata, "polar", this % polar) else - dangle = PI / real(this % n_pol,8) + dangle = PI / real(this % n_pol, 8) do ipol = 1, this % n_pol - this % polar(ipol) = (real(ipol,8) - HALF) * dangle + this % polar(ipol) = (real(ipol, 8) - HALF) * dangle end do end if if (check_for_node(node_xsdata, "azimuthal")) then @@ -614,22 +616,22 @@ module mgxs_header ! When this feature is supported, this line will be activated call get_node_array(node_xsdata, "azimuthal", this % azimuthal) else - dangle = TWO * PI / real(this % n_azi,8) + dangle = TWO * PI / real(this % n_azi, 8) do iazi = 1, this % n_azi - this % azimuthal(iazi) = -PI + (real(iazi,8) - HALF) * dangle + this % azimuthal(iazi) = -PI + (real(iazi, 8) - HALF) * dangle end do end if ! Load the more specific data - allocate(this % nu_fission(groups,this % n_azi,this % n_pol)) - allocate(this % chi(groups,groups,this % n_azi,this % n_pol)) + allocate(this % nu_fission(groups, this % n_azi, this % n_pol)) + allocate(this % chi(groups, groups, this % n_azi, this % n_pol)) if (this % fissionable) then - if (check_for_node(node_xsdata,"chi")) then + if (check_for_node(node_xsdata, "chi")) then ! Chi was provided, that means they are giving chi and nu-fission ! vectors ! Get chi allocate(temp_arr(1 * groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata,"chi",temp_arr) + call get_node_array(node_xsdata, "chi", temp_arr) ! Initialize counter for temp_arr l = 0 gin = 1 @@ -637,11 +639,12 @@ module mgxs_header do iazi = 1, this % n_azi do gout = 1, groups l = l + 1 - this % chi(gout,gin,iazi,ipol) = temp_arr(l) + this % chi(gout, gin, iazi, ipol) = temp_arr(l) end do ! Normalize chi so its CDF goes to 1 - this % chi(:,gin,iazi,ipol) = this % chi(:,gin,iazi,ipol) / & - sum(this % chi(:,gin,iazi,ipol)) + this % chi(:, gin, iazi, ipol) = & + this % chi(:, gin, iazi, ipol) / & + sum(this % chi(:, gin, iazi, ipol)) end do end do @@ -649,17 +652,19 @@ module mgxs_header do ipol = 1, this % n_pol do iazi = 1, this % n_azi do gin = 2, groups - this % chi(:,gin,iazi,ipol) = this % chi(:,1,iazi,ipol) + this % chi(:, gin, iazi, ipol) = & + this % chi(:, 1, iazi, ipol) end do end do end do deallocate(temp_arr) ! Get nu_fission (as a vector) - if (check_for_node(node_xsdata,"nu_fission")) then + if (check_for_node(node_xsdata, "nu_fission")) then allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata,"nu_fission",temp_arr) - this % nu_fission = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) + call get_node_array(node_xsdata, "nu_fission", temp_arr) + this % nu_fission = reshape(temp_arr,(/groups, this % n_azi, & + this % n_pol/)) deallocate(temp_arr) else call fatal_error("If fissionable, must provide nu_fission!") @@ -668,11 +673,12 @@ module mgxs_header else ! chi isnt provided but is within nu_fission, existing as a matrix ! So, get nu_fission (as a matrix) - if (check_for_node(node_xsdata,"nu_fission")) then + if (check_for_node(node_xsdata, "nu_fission")) then allocate(temp_arr(groups * groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata,"nu_fission",temp_arr) - allocate(temp_4d(groups,groups,this % n_azi,this % n_pol)) - temp_4d = reshape(temp_arr,(/groups,groups,this % n_azi,this % n_pol/)) + call get_node_array(node_xsdata, "nu_fission", temp_arr) + allocate(temp_4d(groups, groups, this % n_azi,this % n_pol)) + temp_4d = reshape(temp_arr, (/groups, groups, this % n_azi, & + this % n_pol/)) deallocate(temp_arr) else call fatal_error("If fissionable, must provide nu_fission!") @@ -682,7 +688,8 @@ module mgxs_header do ipol = 1, this % n_pol do iazi = 1, this % n_azi do gin = 1, groups - this % nu_fission(gin,iazi,ipol) = sum(temp_4d(:,gin,iazi,ipol)) + this % nu_fission(gin, iazi, ipol) = & + sum(temp_4d(:, gin, iazi, ipol)) end do end do end do @@ -693,8 +700,9 @@ module mgxs_header do ipol = 1, this % n_pol do iazi = 1, this % n_azi do gin = 1, groups - this % chi(:,gin,iazi,ipol) = this % chi(:,gin,iazi,ipol) / & - sum(this % chi(:,gin,iazi,ipol)) + this % chi(:, gin, iazi, ipol) = & + this % chi(:, gin, iazi, ipol) / & + sum(this % chi(:, gin, iazi, ipol)) end do end do end do @@ -704,11 +712,12 @@ module mgxs_header ! If we have a need* for the fission and kappa-fission x/s, get them ! (*Need is defined as will be using it to tally) if (get_fiss) then - if (check_for_node(node_xsdata,"fission")) then + if (check_for_node(node_xsdata, "fission")) then allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata,"fission",temp_arr) - allocate(this % fission(groups,this % n_azi,this % n_pol)) - this % fission = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) + call get_node_array(node_xsdata, "fission", temp_arr) + allocate(this % fission(groups, this % n_azi, this % n_pol)) + this % fission = reshape(temp_arr, (/groups, this % n_azi, & + this % n_pol/)) deallocate(temp_arr) else call fatal_error("Fission data missing, required due to fission& @@ -716,11 +725,12 @@ module mgxs_header end if end if if (get_kfiss) then - if (check_for_node(node_xsdata,"kappa_fission")) then + if (check_for_node(node_xsdata, "kappa_fission")) then allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata,"kappa_fission",temp_arr) - allocate(this % k_fission(groups,this % n_azi,this % n_pol)) - this % k_fission = reshape(temp_arr,(/groups, this % n_azi,this % n_pol/)) + call get_node_array(node_xsdata, "kappa_fission", temp_arr) + allocate(this % k_fission(groups, this % n_azi, this % n_pol)) + this % k_fission = reshape(temp_arr, (/groups, this % n_azi, & + this % n_pol/)) deallocate(temp_arr) else call fatal_error("kappa_fission data missing, required due to & @@ -732,24 +742,26 @@ module mgxs_header this % chi = ZERO end if - if (check_for_node(node_xsdata,"absorption")) then + if (check_for_node(node_xsdata, "absorption")) then allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata,"absorption",temp_arr) - allocate(this % absorption(groups,this % n_azi,this % n_pol)) - this % absorption = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) + call get_node_array(node_xsdata, "absorption", temp_arr) + allocate(this % absorption(groups, this % n_azi, this % n_pol)) + this % absorption = reshape(temp_arr, (/groups, this % n_azi, & + this % n_pol/)) deallocate(temp_arr) else call fatal_error("Must provide absorption!") end if ! Get multiplication data if present - allocate(temp_mult(groups,groups,this % n_azi,this % n_pol)) - if (check_for_node(node_xsdata,"multiplicity")) then - arr_len = get_arraysize_double(node_xsdata,"multiplicity") + allocate(temp_mult(groups,groups, this % n_azi, this % n_pol)) + if (check_for_node(node_xsdata, "multiplicity")) then + arr_len = get_arraysize_double(node_xsdata, "multiplicity") if (arr_len == groups * groups * this % n_azi * this % n_pol) then allocate(temp_arr(arr_len)) - call get_node_array(node_xsdata,"multiplicity",temp_arr) - temp_mult = reshape(temp_arr,(/groups,groups,this % n_azi,this % n_pol/)) + call get_node_array(node_xsdata, "multiplicity", temp_arr) + temp_mult = reshape(temp_arr, (/groups, groups, this % n_azi, & + this % n_pol/)) deallocate(temp_arr) else call fatal_error("Multiplicity length not same as number of groups& @@ -766,24 +778,25 @@ module mgxs_header ! Set the default (leave as Legendre polynomials) enable_leg_mu = .false. - if (check_for_node(node_xsdata,"tabular_legendre")) then - call get_node_ptr(node_xsdata,"tabular_legendre",node_legendre_mu) + if (check_for_node(node_xsdata, "tabular_legendre")) then + call get_node_ptr(node_xsdata, "tabular_legendre", node_legendre_mu) if (check_for_node(node_legendre_mu, "enable")) then - call get_node_value(node_legendre_mu,"enable",temp_str) + call get_node_value(node_legendre_mu, "enable", temp_str) temp_str = trim(to_lower(temp_str)) if (temp_str == 'true' .or. temp_str == '1') then enable_leg_mu = .true. elseif (temp_str == 'false' .or. temp_str == '0') then enable_leg_mu = .false. else - call fatal_error("Unrecognized tabular_legendre/enable: " // temp_str) + call fatal_error("Unrecognized tabular_legendre/enable: " & + // temp_str) end if end if ! Ok, so if we need to convert to a tabular form, get the user provided ! number of points if (enable_leg_mu) then - if (check_for_node(node_legendre_mu,"num_points")) then - call get_node_value(node_legendre_mu,"num_points", & + if (check_for_node(node_legendre_mu, "num_points")) then + call get_node_value(node_legendre_mu, "num_points", & legendre_mu_points) if (legendre_mu_points <= 0) & call fatal_error("num_points element must be positive& @@ -796,8 +809,8 @@ module mgxs_header end if ! Get the library's value for the order - if (check_for_node(node_xsdata,"order")) then - call get_node_value(node_xsdata,"order",order) + if (check_for_node(node_xsdata, "order")) then + call get_node_value(node_xsdata, "order", order) else call fatal_error("Order Must Be Provided!") end if @@ -817,13 +830,14 @@ module mgxs_header ! Gout x Gin x Order x Azi x Pol. We will get it in that format in ! input_scatt, but then need to convert it to a more useful ordering ! for processing (Order x Gout x Gin x Azi x Pol). - allocate(input_scatt(groups,groups,order_dim,this % n_azi,this % n_pol)) - if (check_for_node(node_xsdata,"scatter")) then + allocate(input_scatt(groups, groups, order_dim, this % n_azi, & + this % n_pol)) + if (check_for_node(node_xsdata, "scatter")) then allocate(temp_arr(groups * groups * order_dim * this % n_azi * & this % n_pol)) - call get_node_array(node_xsdata,"scatter",temp_arr) - input_scatt = reshape(temp_arr,(/groups,groups,order_dim,this % n_azi, & - this % n_pol/)) + call get_node_array(node_xsdata, "scatter", temp_arr) + input_scatt = reshape(temp_arr, (/groups, groups, order_dim, & + this % n_azi, this % n_pol/)) deallocate(temp_arr) ! Compare the number of orders given with the maximum order of the @@ -833,8 +847,9 @@ module mgxs_header order_dim = order + 1 end if - allocate(temp_scatt(groups,groups,order_dim,this % n_azi,this % n_pol)) - temp_scatt(:,:,:,:,:) = input_scatt(:,:,1:order_dim,:,:) + allocate(temp_scatt(groups, groups, order_dim, this % n_azi, & + this % n_pol)) + temp_scatt(:, :, :, :, :) = input_scatt(:, :, 1:order_dim, :, :) ! Take input format (groups, groups, order) and convert to ! the more useful format needed for scattdata: (order, groups, groups) @@ -848,9 +863,10 @@ module mgxs_header this % scatt_type = ANGLE_TABULAR order_dim = legendre_mu_points order = order_dim - dmu = TWO / real(order - 1,8) + dmu = TWO / real(order - 1, 8) - allocate(scatt_coeffs(order_dim,groups,groups,this % n_azi,this % n_pol)) + allocate(scatt_coeffs(order_dim, groups, groups, this % n_azi, & + this % n_pol)) do ipol = 1, this % n_pol do iazi = 1, this % n_azi do gin = 1, groups @@ -862,26 +878,26 @@ module mgxs_header else if (imu == order_dim) then mu = ONE else - mu = -ONE + real(imu - 1,8) * dmu + mu = -ONE + real(imu - 1, 8) * dmu end if - scatt_coeffs(imu,gout,gin,iazi,ipol) = & - evaluate_legendre(temp_scatt(gout,gin,:,iazi,ipol),mu) + scatt_coeffs(imu, gout, gin, iazi, ipol) = & + evaluate_legendre(temp_scatt(gout, gin, :, iazi, ipol), mu) ! Ensure positivity of distribution - if (scatt_coeffs(imu,gout,gin,iazi,ipol) < ZERO) & - scatt_coeffs(imu,gout,gin,iazi,ipol) = ZERO + if (scatt_coeffs(imu, gout, gin, iazi, ipol) < ZERO) & + scatt_coeffs(imu, gout, gin, iazi, ipol) = ZERO ! And accrue the integral if (imu > 1) then norm = norm + HALF * dmu * & - (scatt_coeffs(imu-1,gout,gin,iazi,ipol) + & - scatt_coeffs(imu,gout,gin,iazi,ipol)) + (scatt_coeffs(imu - 1, gout, gin, iazi, ipol) + & + scatt_coeffs(imu, gout, gin, iazi, ipol)) end if end do ! Now that we have the integral, lets ensure that the distribution ! is normalized such that it preserves the original scattering xs if (norm > ZERO) then - scatt_coeffs(:,gout,gin,iazi,ipol) = & - scatt_coeffs(:,gout,gin,iazi,ipol) * & - temp_scatt(gout,gin,1,iazi,ipol) / norm + scatt_coeffs(:, gout, gin, iazi, ipol) = & + scatt_coeffs(:, gout, gin, iazi, ipol) * & + temp_scatt(gout, gin, 1, iazi, ipol) / norm end if end do end do @@ -890,14 +906,15 @@ module mgxs_header else ! Sticking with current representation, carry forward but change ! the array ordering - allocate(scatt_coeffs(order_dim,groups,groups,this % n_azi,this % n_pol)) + allocate(scatt_coeffs(order_dim, groups, groups, this % n_azi, & + this % n_pol)) do ipol = 1, this % n_pol do iazi = 1, this % n_azi do gin = 1, groups do gout = 1, groups do l = 1, order_dim - scatt_coeffs(l,gout,gin,iazi,ipol) = & - temp_scatt(gout,gin,l,iazi,ipol) + scatt_coeffs(l, gout, gin, iazi, ipol) = & + temp_scatt(gout, gin, l, iazi, ipol) end do end do end do @@ -911,35 +928,37 @@ module mgxs_header allocate(this % scatter(this % n_azi, this % n_pol)) do ipol = 1, this % n_pol - do iazi = 1, this % n_azi + do iazi = 1, this % n_azi ! Allocate and initialize our ScattData Object. if (this % scatt_type == ANGLE_HISTOGRAM) then - allocate(ScattDataHistogram :: this % scatter(iazi,ipol) % obj) + allocate(ScattDataHistogram :: this % scatter(iazi, ipol) % obj) else if (this % scatt_type == ANGLE_TABULAR) then - allocate(ScattDataTabular :: this % scatter(iazi,ipol) % obj) + allocate(ScattDataTabular :: this % scatter(iazi, ipol) % obj) else if (this % scatt_type == ANGLE_LEGENDRE) then - allocate(ScattDataLegendre :: this % scatter(iazi,ipol) % obj) + allocate(ScattDataLegendre :: this % scatter(iazi, ipol) % obj) end if ! Initialize the ScattData Object - call this % scatter(iazi,ipol) % obj % init(& - temp_mult(:,:,iazi,ipol), scatt_coeffs(:,:,:,iazi,ipol)) + call this % scatter(iazi, ipol) % obj % init(& + temp_mult(:, :, iazi, ipol), & + scatt_coeffs(:, :, :, iazi, ipol)) end do end do ! Deallocate temporaries for the next material - deallocate(input_scatt,scatt_coeffs,temp_mult) + deallocate(input_scatt, scatt_coeffs, temp_mult) - allocate(this % total(groups,this % n_azi,this % n_pol)) - if (check_for_node(node_xsdata,"total")) then + allocate(this % total(groups, this % n_azi, this % n_pol)) + if (check_for_node(node_xsdata, "total")) then allocate(temp_arr(groups * this % n_azi * this % n_pol)) - call get_node_array(node_xsdata,"total",temp_arr) - this % total = reshape(temp_arr,(/groups,this % n_azi,this % n_pol/)) + call get_node_array(node_xsdata, "total", temp_arr) + this % total = reshape(temp_arr, (/groups, this % n_azi, & + this % n_pol/)) deallocate(temp_arr) else do ipol = 1, this % n_pol do iazi = 1, this % n_azi - this % total(:,iazi,ipol) = this % absorption(:,iazi,ipol) + & - this % scatter(iazi,ipol) % obj % scattxs(:) + this % total(:, iazi, ipol) = this % absorption(:, iazi, ipol) + & + this % scatter(iazi, ipol) % obj % scattxs(:) end do end do end if @@ -1074,13 +1093,13 @@ module mgxs_header size_scattmat = 0 do ipol = 1, this % n_pol do iazi = 1, this % n_azi - do gin = 1, size(this % scatter(iazi,ipol) % obj % energy) + do gin = 1, size(this % scatter(iazi, ipol) % obj % energy) size_scattmat = size_scattmat + & - 2 * size(this % scatter(iazi,ipol) % obj % energy(gin) % data) + & - size(this % scatter(iazi,ipol) % obj % dist(gin) % data) + 2 * size(this % scatter(iazi, ipol) % obj % energy(gin) % data) + & + size(this % scatter(iazi, ipol) % obj % dist(gin) % data) end do size_scattmat = size_scattmat + & - size(this % scatter(iazi,ipol) % obj % scattxs) + size(this % scatter(iazi, ipol) % obj % scattxs) end do end do size_scattmat = size_scattmat * 8 @@ -1141,7 +1160,7 @@ module mgxs_header xs = this % chi(gout,gin) else ! Not sure youd want a 1 or a 0, but here you go! - xs = sum(this % chi(:,gin)) + xs = sum(this % chi(:, gin)) end if case('scatter') if (present(gout)) then @@ -1211,68 +1230,69 @@ module mgxs_header call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) select case(xstype) case('total') - xs = this % total(gin,iazi,ipol) + xs = this % total(gin, iazi, ipol) case('absorption') - xs = this % absorption(gin,iazi,ipol) + xs = this % absorption(gin, iazi, ipol) case('fission') if (allocated(this % fission)) then - xs = this % fission(gin,iazi,ipol) + xs = this % fission(gin, iazi, ipol) else xs = ZERO end if case('kappa_fission') if (allocated(this % k_fission)) then - xs = this % k_fission(gin,iazi,ipol) + xs = this % k_fission(gin, iazi, ipol) else xs = ZERO end if case('nu_fission') - xs = this % nu_fission(gin,iazi,ipol) + xs = this % nu_fission(gin, iazi, ipol) case('chi') if (present(gout)) then - xs = this % chi(gout,gin,iazi,ipol) + xs = this % chi(gout, gin, iazi, ipol) else ! Not sure youd want a 1 or a 0, but here you go! - xs = sum(this % chi(:,gin,iazi,ipol)) + xs = sum(this % chi(:, gin, iazi, ipol)) end if case('scatter') if (present(gout)) then - if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & - gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then + if (gout < this % scatter(iazi, ipol) % obj % gmin(gin) .or. & + gout > this % scatter(iazi, ipol) % obj % gmax(gin)) then xs = ZERO else - xs = this % scatter(iazi,ipol) % obj % scattxs(gin) * & - this % scatter(iazi,ipol) % obj % energy(gin) % data(gout) + xs = this % scatter(iazi, ipol) % obj % scattxs(gin) * & + this % scatter(iazi, ipol) % obj % energy(gin) % data(gout) end if else - xs = this % scatter(iazi,ipol) % obj % scattxs(gin) + xs = this % scatter(iazi, ipol) % obj % scattxs(gin) end if case('scatter/mult') if (present(gout)) then - if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & - gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then + if (gout < this % scatter(iazi, ipol) % obj % gmin(gin) .or. & + gout > this % scatter(iazi, ipol) % obj % gmax(gin)) then xs = ZERO else - xs = this % scatter(iazi,ipol) % obj % scattxs(gin) * & - this % scatter(iazi,ipol) % obj % energy(gin) % data(gout) / & - this % scatter(iazi,ipol) % obj % mult(gin) % data(gout) + xs = this % scatter(iazi, ipol) % obj % scattxs(gin) * & + this % scatter(iazi, ipol) % obj % energy(gin) % data(gout) / & + this % scatter(iazi, ipol) % obj % mult(gin) % data(gout) end if else - xs = this % scatter(iazi,ipol) % obj % scattxs(gin) / & - (dot_product(this % scatter(iazi,ipol) % obj % mult(gin) % data, & - this % scatter(iazi,ipol) % obj % energy(gin) % data)) + xs = this % scatter(iazi, ipol) % obj % scattxs(gin) / & + (dot_product(this % scatter(iazi, ipol) % obj % mult(gin) % data, & + this % scatter(iazi, ipol) % obj % energy(gin) % data)) end if case('scatter*f_mu/mult','scatter*f_mu') if (present(gout)) then - if (gout < this % scatter(iazi,ipol) % obj % gmin(gin) .or. & - gout > this % scatter(iazi,ipol) % obj % gmax(gin)) then + if (gout < this % scatter(iazi, ipol) % obj % gmin(gin) .or. & + gout > this % scatter(iazi, ipol) % obj % gmax(gin)) then xs = ZERO else - xs = this % scatter(iazi,ipol) % obj % scattxs(gin) * & - this % scatter(iazi,ipol) % obj % energy(gin) % data(gout) - xs = xs * this % scatter(iazi,ipol) % obj % calc_f(gin, gout, mu) + xs = this % scatter(iazi, ipol) % obj % scattxs(gin) * & + this % scatter(iazi, ipol) % obj % energy(gin) % data(gout) + xs = xs * this % scatter(iazi, ipol) % obj % calc_f(gin, gout, mu) if (xstype == 'scatter*f_mu/mult') then - xs = xs / this % scatter(iazi,ipol) % obj % mult(gin) % data(gout) + xs = xs / & + this % scatter(iazi, ipol) % obj % mult(gin) % data(gout) end if end if else @@ -1335,11 +1355,11 @@ module mgxs_header real(8) :: atom_density ! atom density of a nuclide real(8) :: norm, nuscatt integer :: mat_max_order, order, order_dim, nuc_order_dim - real(8), allocatable :: temp_mult(:,:), mult_num(:,:), mult_denom(:,:) - real(8), allocatable :: scatt_coeffs(:,:,:) + real(8), allocatable :: temp_mult(:, :), mult_num(:, :), mult_denom(:, :) + real(8), allocatable :: scatt_coeffs(:, :, :) ! Set the meta-data - call mgxs_combine(this,mat,scatt_type,i_listing) + call mgxs_combine(this, mat, scatt_type, i_listing) ! Determine the scattering type of our data and ensure all scattering orders ! are the same. @@ -1350,7 +1370,6 @@ module mgxs_header ! If we have tabular only data, then make sure all datasets have same size if (scatt_type == ANGLE_HISTOGRAM) then ! Check all scattering data to ensure it is the same size - ! order = size(nuclides(mat % nuclide(1)) % obj % scatter % data,dim=1) do i = 2, mat % n_nuclides select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (MgxsIso) @@ -1370,7 +1389,7 @@ module mgxs_header do i = 2, mat % n_nuclides select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (MgxsIso) - if (order /= size(nuc % scatter % dist(1) % data,dim=1)) & + if (order /= size(nuc % scatter % dist(1) % data, dim=1)) & call fatal_error("All Tabular Scattering Entries Must Be& & Same Length!") end select @@ -1388,7 +1407,7 @@ module mgxs_header select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (MgxsIso) if (size(nuc % scatter % dist(1) % data,dim=1) > mat_max_order) & - mat_max_order = size(nuc % scatter % dist(1) % data,dim=1) + mat_max_order = size(nuc % scatter % dist(1) % data, dim=1) end select end do @@ -1444,7 +1463,8 @@ module mgxs_header this % fission = this % fission + atom_density * nuc % fission end if if (allocated(nuc % k_fission)) then - this % k_fission = this % k_fission + atom_density * nuc % k_fission + this % k_fission = this % k_fission + atom_density * & + nuc % k_fission end if end if @@ -1471,11 +1491,11 @@ module mgxs_header end do ! Get the complete scattering matrix - nuc_order_dim = size(nuc % scatter % dist(1) % data,dim=1) - scatt_coeffs(1:min(nuc_order_dim, order_dim),:,:) = & - scatt_coeffs(1:min(nuc_order_dim, order_dim),:,:) + & + nuc_order_dim = size(nuc % scatter % dist(1) % data, dim=1) + scatt_coeffs(1:min(nuc_order_dim, order_dim), :, :) = & + scatt_coeffs(1:min(nuc_order_dim, order_dim), :, :) + & atom_density * & - nuc % scatter % get_matrix(min(nuc_order_dim,order_dim)) + nuc % scatter % get_matrix(min(nuc_order_dim, order_dim)) type is (MgxsAngle) call fatal_error("Invalid Passing of MgxsAngle to MgxsIso Object") @@ -1494,14 +1514,14 @@ module mgxs_header end do ! Initialize the ScattData Object - call this % scatter % init(temp_mult,scatt_coeffs) + call this % scatter % init(temp_mult, scatt_coeffs) ! Now normalize chi if (mat % fissionable) then do gin = 1, groups - norm = sum(this % chi(:,gin)) + norm = sum(this % chi(:, gin)) if (norm > ZERO) then - this % chi(:,gin) = this % chi(:,gin) / norm + this % chi(:, gin) = this % chi(:, gin) / norm end if end do end if @@ -1527,8 +1547,8 @@ module mgxs_header integer :: ipol, iazi, n_pol, n_azi real(8) :: norm, nuscatt integer :: mat_max_order, order, order_dim, nuc_order_dim - real(8), allocatable :: temp_mult(:,:,:,:), mult_num(:,:,:,:), mult_denom(:,:,:,:) - real(8), allocatable :: scatt_coeffs(:,:,:,:,:) + real(8), allocatable :: temp_mult(:, :, :, :), mult_num(:, :, :, :) + real(8), allocatable :: mult_denom(:, :, :, :), scatt_coeffs(:, :, :, :, :) ! Set the meta-data call mgxs_combine(this,mat,scatt_type,i_listing) @@ -1568,7 +1588,7 @@ module mgxs_header do i = 2, mat % n_nuclides select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (MgxsAngle) - if (order /= size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1)) & + if (order /= size(nuc % scatter(1,1) % obj % dist(1) % data, dim=1)) & call fatal_error("All Histogram Scattering Entries Must Be& & Same Length!") end select @@ -1589,7 +1609,7 @@ module mgxs_header do i = 2, mat % n_nuclides select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (MgxsAngle) - if (order /= size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1)) & + if (order /= size(nuc % scatter(1, 1) % obj % dist(1) % data,dim=1)) & call fatal_error("All Tabular Scattering Entries Must Be& & Same Length!") end select @@ -1611,8 +1631,8 @@ module mgxs_header do i = 1, mat % n_nuclides select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (MgxsAngle) - if (size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1) > mat_max_order) & - mat_max_order = size(nuc % scatter(1,1) % obj% dist(1) % data,dim=1) + if (size(nuc % scatter(1,1) % obj % dist(1) % data, dim=1) > mat_max_order) & + mat_max_order = size(nuc % scatter(1,1) % obj% dist(1) % data, dim=1) end select end do @@ -1632,25 +1652,25 @@ module mgxs_header end if ! Allocate and initialize data within macro_xs(i_mat) object - allocate(this % total(groups,n_azi,n_pol)) + allocate(this % total(groups, n_azi, n_pol)) this % total = ZERO - allocate(this % absorption(groups,n_azi,n_pol)) + allocate(this % absorption(groups, n_azi, n_pol)) this % absorption = ZERO - allocate(this % fission(groups,n_azi,n_pol)) + allocate(this % fission(groups, n_azi, n_pol)) this % fission = ZERO - allocate(this % k_fission(groups,n_azi,n_pol)) + allocate(this % k_fission(groups, n_azi, n_pol)) this % k_fission = ZERO - allocate(this % nu_fission(groups,n_azi,n_pol)) + allocate(this % nu_fission(groups, n_azi, n_pol)) this % nu_fission = ZERO - allocate(this % chi(groups,groups,n_azi,n_pol)) + allocate(this % chi(groups, groups, n_azi, n_pol)) this % chi = ZERO - allocate(temp_mult(groups,groups,n_azi,n_pol)) + allocate(temp_mult(groups, groups, n_azi, n_pol)) temp_mult = ZERO - allocate(mult_num(groups,groups,n_azi,n_pol)) + allocate(mult_num(groups, groups, n_azi, n_pol)) mult_num = ZERO - allocate(mult_denom(groups,groups,n_azi,n_pol)) + allocate(mult_denom(groups, groups, n_azi, n_pol)) mult_denom = ZERO - allocate(scatt_coeffs(order_dim,groups,groups,n_azi,n_pol)) + allocate(scatt_coeffs(order_dim, groups, groups, n_azi, n_pol)) scatt_coeffs = ZERO ! Add contribution from each nuclide in material @@ -1675,7 +1695,8 @@ module mgxs_header this % fission = this % fission + atom_density * nuc % fission end if if (allocated(nuc % k_fission)) then - this % k_fission = this % k_fission + atom_density * nuc % k_fission + this % k_fission = this % k_fission + atom_density * & + nuc % k_fission end if end if @@ -1693,15 +1714,16 @@ module mgxs_header do ipol = 1, n_pol do iazi = 1, n_azi do gin = 1, groups - do gout = nuc % scatter(iazi,ipol) % obj % gmin(gin), & - nuc % scatter(iazi,ipol) % obj % gmax(gin) - nuscatt = nuc % scatter(iazi,ipol) % obj % scattxs(gin) * & - nuc % scatter(iazi,ipol) % obj % energy(gin) % data(gout) - mult_num(gout,gin,iazi,ipol) = mult_num(gout,gin,iazi,ipol) + & + do gout = nuc % scatter(iazi, ipol) % obj % gmin(gin), & + nuc % scatter(iazi, ipol) % obj % gmax(gin) + nuscatt = nuc % scatter(iazi, ipol) % obj % scattxs(gin) * & + nuc % scatter(iazi, ipol) % obj % energy(gin) % data(gout) + mult_num(gout, gin, iazi, ipol) = mult_num(gout, gin, iazi, ipol) + & atom_density * nuscatt - mult_denom(gout,gin,iazi,ipol) = mult_denom(gout,gin,iazi,ipol) + & + mult_denom(gout, gin, iazi, ipol) = & + mult_denom(gout, gin, iazi, ipol) + & atom_density * nuscatt / & - nuc % scatter(iazi,ipol) % obj % mult(gin) % data(gout) + nuc % scatter(iazi, ipol) % obj % mult(gin) % data(gout) end do end do end do @@ -1711,11 +1733,10 @@ module mgxs_header nuc_order_dim = size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1) do ipol = 1, n_pol do iazi = 1, n_azi - scatt_coeffs(1:min(nuc_order_dim,order_dim),:,:,iazi,ipol) = & - scatt_coeffs(1:min(nuc_order_dim, order_dim),:,:,iazi,ipol) + & - atom_density * & - nuc % scatter(iazi,ipol) % obj % get_matrix(& - min(nuc_order_dim,order_dim)) + scatt_coeffs(1:min(nuc_order_dim, order_dim), :, :, iazi, ipol) = & + scatt_coeffs(1:min(nuc_order_dim, order_dim), :, :, iazi, ipol) + & + atom_density * nuc % scatter(iazi, ipol) % obj % get_matrix(& + min(nuc_order_dim, order_dim)) end do end do end select @@ -1726,10 +1747,12 @@ module mgxs_header do iazi = 1, n_azi do gin = 1, groups do gout = 1, groups - if (mult_denom(gout,gin,iazi,ipol) > ZERO) then - temp_mult(gout,gin,iazi,ipol) = mult_num(gout,gin,iazi,ipol) / mult_denom(gout,gin,iazi,ipol) + if (mult_denom(gout, gin, iazi, ipol) > ZERO) then + temp_mult(gout, gin, iazi, ipol) = & + mult_num(gout, gin, iazi, ipol) / & + mult_denom(gout, gin, iazi, ipol) else - temp_mult(gout,gin,iazi,ipol) = ONE + temp_mult(gout, gin, iazi, ipol) = ONE end if end do end do @@ -1739,8 +1762,8 @@ module mgxs_header ! Initialize the ScattData Object do ipol = 1, n_pol do iazi = 1, n_azi - call this % scatter(iazi,ipol) % obj % init( & - temp_mult(:,:,iazi,ipol), scatt_coeffs(:,:,:,iazi,ipol)) + call this % scatter(iazi, ipol) % obj % init( & + temp_mult(:, :, iazi, ipol), scatt_coeffs(:, :, :, iazi, ipol)) end do end do @@ -1749,9 +1772,9 @@ module mgxs_header do ipol = 1, n_pol do iazi = 1, n_azi do gin = 1, groups - norm = sum(this % chi(:,gin,iazi,ipol)) + norm = sum(this % chi(:, gin, iazi, ipol)) if (norm > ZERO) then - this % chi(:,gin,iazi,ipol) = this % chi(:,gin,iazi,ipol) / norm + this % chi(:, gin, iazi, ipol) = this % chi(:, gin, iazi, ipol) / norm end if end do end do @@ -1799,11 +1822,11 @@ module mgxs_header xi = prn() gout = 1 - prob = this % chi(gout,gin,iazi,ipol) + prob = this % chi(gout, gin, iazi, ipol) do while (prob < xi) gout = gout + 1 - prob = prob + this % chi(gout,gin,iazi,ipol) + prob = prob + this % chi(gout, gin, iazi, ipol) end do end function mgxsang_sample_fission_energy @@ -1835,7 +1858,7 @@ module mgxs_header integer :: iazi, ipol ! Angular indices call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) - call this % scatter(iazi,ipol) % obj % sample(gin,gout,mu,wgt) + call this % scatter(iazi, ipol) % obj % sample(gin, gout, mu, wgt) end subroutine mgxsang_sample_scatter @@ -1867,15 +1890,38 @@ module mgxs_header integer :: iazi, ipol call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) - xs % total = this % total(gin,iazi,ipol) - xs % elastic = this % scatter(iazi,ipol) % obj % scattxs(gin) - xs % absorption = this % absorption(gin,iazi,ipol) - xs % fission = this % fission(gin,iazi,ipol) - xs % nu_fission = this % nu_fission(gin,iazi,ipol) + xs % total = this % total(gin, iazi, ipol) + xs % elastic = this % scatter(iazi, ipol) % obj % scattxs(gin) + xs % absorption = this % absorption(gin, iazi, ipol) + xs % fission = this % fission(gin, iazi, ipol) + xs % nu_fission = this % nu_fission(gin, iazi, ipol) end subroutine mgxsang_calculate_xs -!!!TODO: -! Move find_angle from math to here after we fully implement this and are ready -! to delete macroxs_header and relevant portions from nuclide_header. +!=============================================================================== +! find_angle finds the closest angle on the data grid and returns that index +!=============================================================================== + + pure subroutine find_angle(polar, azimuthal, uvw, i_azi, i_pol) + real(8), intent(in) :: polar(:) ! Polar angles [0,pi] + real(8), intent(in) :: azimuthal(:) ! Azi. angles [-pi,pi] + real(8), intent(in) :: uvw(3) ! Direction of motion + integer, intent(inout) :: i_pol ! Closest polar bin + integer, intent(inout) :: i_azi ! Closest azi bin + + real(8) :: my_pol, my_azi, dangle + + ! Convert uvw to polar and azi + + my_pol = acos(uvw(3)) + my_azi = atan2(uvw(2), uvw(1)) + + ! Search for equi-binned angles + dangle = PI / real(size(polar),8) + i_pol = floor(my_pol / dangle + ONE) + dangle = TWO * PI / real(size(azimuthal),8) + i_azi = floor((my_azi + PI) / dangle + ONE) + + end subroutine find_angle + end module mgxs_header \ No newline at end of file diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index ad7e4da329..92e2d7ba33 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -8,7 +8,7 @@ module nuclide_header use endf_header, only: Function1D use error, only: fatal_error, warning use list_header, only: ListInt - use math, only: evaluate_legendre, find_angle + use math, only: evaluate_legendre use product_header, only: AngleEnergyContainer use reaction_header, only: Reaction use stl_vector, only: VectorInt diff --git a/src/particle_header.F90 b/src/particle_header.F90 index 6b29727684..8544cb38bb 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -232,7 +232,7 @@ contains this % n_secondary = n this % secondary_bank(this % n_secondary) % E = this % E if (.not. run_CE) then - this % secondary_bank(this % n_secondary) % E = real(this % g,8) + this % secondary_bank(this % n_secondary) % E = real(this % g, 8) end if end subroutine create_secondary diff --git a/src/tally.F90 b/src/tally.F90 index ed1d45c870..86e108c3dc 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -903,13 +903,14 @@ contains end if if (i_nuclide > 0) then score = score * atom_density * & - nucxs % get_xs('total',p_g,UVW=p_uvw) / & - matxs % get_xs('total',p_g,UVW=p_uvw) + nucxs % get_xs('total', p_g, UVW=p_uvw) / & + matxs % get_xs('total', p_g, UVW=p_uvw) end if else if (i_nuclide > 0) then - score = nucxs % get_xs('total',p_g,UVW=p_uvw) * atom_density * flux + score = nucxs % get_xs('total', p_g, UVW=p_uvw) * & + atom_density * flux else score = material_xs % total * flux end if @@ -959,20 +960,22 @@ contains ! adjust the score by the actual probability for that nuclide. if (i_nuclide > 0) then score = score * atom_density * & - nucxs % get_xs('scatter*f_mu/mult',p % last_g,p % g,UVW=p_uvw,MU=p % mu) / & - matxs % get_xs('scatter*f_mu/mult',p % last_g,p % g,UVW=p_uvw,MU=p % mu) + nucxs % get_xs('scatter*f_mu/mult', p % last_g, p % g, & + UVW=p_uvw,MU=p % mu) / & + matxs % get_xs('scatter*f_mu/mult', p % last_g, p % g, & + UVW=p_uvw,MU=p % mu) end if else ! Note SCORE_SCATTER_*N not available for tracklength/collision. if (i_nuclide > 0) then score = atom_density * flux * & - nucxs % get_xs('scatter/mult',p_g,UVW=p_uvw) + nucxs % get_xs('scatter/mult', p_g, UVW=p_uvw) else ! Get the scattering x/s and take away ! the multiplication baked in to sigS score = flux * & - matxs % get_xs('scatter/mult',p_g,UVW=p_uvw) + matxs % get_xs('scatter/mult', p_g, UVW=p_uvw) end if end if @@ -1000,18 +1003,20 @@ contains ! adjust the score by the actual probability for that nuclide. if (i_nuclide > 0) then score = score * atom_density * & - nucxs % get_xs('scatter*f_mu',p % last_g,p % g,UVW=p_uvw,MU=p % mu) / & - matxs % get_xs('scatter*f_mu',p % last_g,p % g,UVW=p_uvw,MU=p % mu) + nucxs % get_xs('scatter*f_mu', p % last_g, p % g, & + UVW=p_uvw, MU=p % mu) / & + matxs % get_xs('scatter*f_mu', p % last_g, p % g, & + UVW=p_uvw, MU=p % mu) end if else ! Note SCORE_NU_SCATTER_*N not available for tracklength/collision. if (i_nuclide > 0) then - score = nucxs % get_xs('scatter',p_g,UVW=p_uvw) * & + score = nucxs % get_xs('scatter', p_g, UVW=p_uvw) * & atom_density * flux else ! Get the scattering x/s, which includes multiplication - score = matxs % get_xs('scatter',p_g,UVW=p_uvw) * flux + score = matxs % get_xs('scatter', p_g, UVW=p_uvw) * flux end if end if @@ -1045,12 +1050,12 @@ contains end if if (i_nuclide > 0) then score = score * atom_density * & - nucxs % get_xs('absorption',p_g,UVW=p_uvw) / & - matxs % get_xs('absorption',p_g,UVW=p_uvw) + nucxs % get_xs('absorption', p_g, UVW=p_uvw) / & + matxs % get_xs('absorption', p_g, UVW=p_uvw) end if else if (i_nuclide > 0) then - score = nucxs % get_xs('absorption',p_g,UVW=p_uvw) * & + score = nucxs % get_xs('absorption', p_g, UVW=p_uvw) * & atom_density * flux else score = material_xs % absorption * flux @@ -1075,16 +1080,16 @@ contains end if if (i_nuclide > 0) then score = score * atom_density * & - nucxs % get_xs('fission', p_g,UVW=p_uvw) / & - matxs % get_xs('absorption',p_g,UVW=p_uvw) + nucxs % get_xs('fission', p_g, UVW=p_uvw) / & + matxs % get_xs('absorption', p_g, UVW=p_uvw) else score = score * & - matxs % get_xs('fission', p_g,UVW=p_uvw) / & - matxs % get_xs('absorption',p_g,UVW=p_uvw) + matxs % get_xs('fission', p_g, UVW=p_uvw) / & + matxs % get_xs('absorption', p_g, UVW=p_uvw) end if else if (i_nuclide > 0) then - score = nucxs % get_xs('fission',p_g,UVW=p_uvw) * & + score = nucxs % get_xs('fission', p_g, UVW=p_uvw) * & atom_density * flux else score = flux * material_xs % fission @@ -1102,7 +1107,8 @@ contains ! neutrons were emitted with different energies, multiple ! outgoing energy bins may have been scored to. The following ! logic treats this special case and results to multiple bins - call score_fission_eout_mg(p,t,score_index,i_nuclide,atom_density) + call score_fission_eout_mg(p, t, score_index, i_nuclide, & + atom_density) cycle SCORE_LOOP end if end if @@ -1113,12 +1119,12 @@ contains score = p % absorb_wgt if (i_nuclide > 0) then score = score * atom_density * & - nucxs % get_xs('nu_fission',p_g,UVW=p_uvw) / & - matxs % get_xs('absorption',p_g,UVW=p_uvw) + nucxs % get_xs('nu_fission', p_g, UVW=p_uvw) / & + matxs % get_xs('absorption', p_g, UVW=p_uvw) else score = score * & - matxs % get_xs('nu_fission',p_g,UVW=p_uvw) / & - matxs % get_xs('absorption',p_g,UVW=p_uvw) + matxs % get_xs('nu_fission', p_g, UVW=p_uvw) / & + matxs % get_xs('absorption', p_g, UVW=p_uvw) end if else ! Skip any non-fission events @@ -1131,14 +1137,14 @@ contains score = keff * p % wgt_bank if (i_nuclide > 0) then score = score * atom_density * & - nucxs % get_xs('fission',p_g,UVW=p_uvw) / & - matxs % get_xs('fission',p_g,UVW=p_uvw) + nucxs % get_xs('fission', p_g, UVW=p_uvw) / & + matxs % get_xs('fission', p_g, UVW=p_uvw) end if end if else if (i_nuclide > 0) then - score = nucxs % get_xs('nu_fission',p_g,UVW=p_uvw) * & + score = nucxs % get_xs('nu_fission', p_g, UVW=p_uvw) * & atom_density * flux else score = material_xs % nu_fission * flux @@ -1163,19 +1169,19 @@ contains end if if (i_nuclide > 0) then score = score * atom_density * & - nucxs % get_xs('kappa_fission',p_g,UVW=p_uvw) / & - matxs % get_xs('absorption', p_g,UVW=p_uvw) + nucxs % get_xs('kappa_fission', p_g, UVW=p_uvw) / & + matxs % get_xs('absorption', p_g, UVW=p_uvw) else score = score * & - matxs % get_xs('kappa_fission',p_g,UVW=p_uvw) / & - matxs % get_xs('absorption', p_g,UVW=p_uvw) + matxs % get_xs('kappa_fission', p_g, UVW=p_uvw) / & + matxs % get_xs('absorption', p_g, UVW=p_uvw) end if else if (i_nuclide > 0) then - score = flux * nucxs % get_xs('kappa_fission',p_g,UVW=p_uvw) * & - atom_density + score = flux * atom_density * & + nucxs % get_xs('kappa_fission', p_g, UVW=p_uvw) else - score = flux * matxs % get_xs('kappa_fission',p_g,UVW=p_uvw) + score = flux * matxs % get_xs('kappa_fission', p_g, UVW=p_uvw) end if end if @@ -1643,8 +1649,10 @@ contains gin = p % last_g end if score = score * atom_density * & - nuclides_MG(i_nuclide) % obj % get_xs('fission',gin,UVW=p % last_uvw) / & - macro_xs(p % material) % obj % get_xs('fission',gin,UVW=p % last_uvw) + nuclides_MG(i_nuclide) % obj % get_xs('fission', gin, & + UVW=p % last_uvw) / & + macro_xs(p % material) % obj % get_xs('fission', gin, & + UVW=p % last_uvw) end if if (t % energyout_matches_groups) then From 8aada0af2977c12940ecf37dbb2b2bdaaf5e117a Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sun, 8 May 2016 18:43:43 -0400 Subject: [PATCH 497/650] Added row_column parameter to Library.build_hdf5_store(...)` --- openmc/mgxs/library.py | 11 ++++++++--- openmc/mgxs/mgxs.py | 10 ++++++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 8d5e9854ee..c3529fc98d 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -575,7 +575,8 @@ class Library(object): return subdomain_avg_library def build_hdf5_store(self, filename='mgxs.h5', directory='mgxs', - subdomains='all', nuclides='all', xs_type='macro'): + subdomains='all', nuclides='all', xs_type='macro', + row_column='inout'): """Export the multi-group cross section library to an HDF5 binary file. This method constructs an HDF5 file which stores the library's @@ -605,6 +606,10 @@ class Library(object): xs_type: {'macro', 'micro'} Store the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + row_column: {'inout', 'outin'} + Store scattering matrices indexed first by incoming group and + second by outgoing group ('inout'), or vice versa ('outin'). + Defaults to 'inout'. Raises ------ @@ -646,8 +651,8 @@ class Library(object): if subdomains == 'avg': mgxs = mgxs.get_subdomain_avg_xs() - mgxs.build_hdf5_store(filename, directory, - xs_type=xs_type, nuclides=nuclides) + mgxs.build_hdf5_store(filename, directory, xs_type=xs_type, + nuclides=nuclides, row_column=row_column) def dump_to_file(self, filename='mgxs', directory='mgxs'): """Store this Library object in a pickle binary file. diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 90b956b219..57f42c1eee 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1174,8 +1174,9 @@ class MGXS(object): Store the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. row_column: {'inout', 'outin'} - Store scattering matrices indexed first by incoming group and second - by outgoing group ('inout'), or vice versa ('outin'). + Store scattering matrices indexed first by incoming group and + second by outgoing group ('inout'), or vice versa ('outin'). + Defaults to 'inout'. append : bool If true, appends to an existing HDF5 file with the same filename directory (if one exists). Defaults to True. @@ -2005,8 +2006,9 @@ class ScatterMatrixXS(MGXS): decreasing energy groups (decreasing or increasing energies). Defaults to 'increasing'. row_column: {'inout', 'outin'} - Return the cross section indexed first by incoming group and second - by outgoing group ('inout'), or vice versa ('outin'). + Return the cross section indexed first by incoming group and + second by outgoing group ('inout'), or vice versa ('outin'). + Defaults to 'inout'. value : str A string for the type of value to return - 'mean', 'std_dev', or 'rel_err' are accepted. Defaults to the empty string. From dfe7a0026ab9b6e79e10798922de4d70f46f2d61 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Mon, 9 May 2016 09:26:25 -0400 Subject: [PATCH 498/650] Fixed indentation and added error message for unlinked Summary file with distribcell paths in DataFrame --- openmc/filter.py | 6 ++++++ openmc/mgxs/mgxs.py | 8 +++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/openmc/filter.py b/openmc/filter.py index 01f2ad2013..aab0fc0812 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -629,6 +629,12 @@ class Filter(object): # Create Pandas Multi-index columns for each level in CSG tree if distribcell_paths: + # Distribcell paths require linked metadata from the Summary + if self.distribcell_paths is None: + msg = 'Unable to construct distribcell paths since ' + 'the Summary is not linked to the StatePoint' + raise ValueError(msg) + # Make copy of array of distribcell paths to use in # Pandas Multi-index column construction distribcell_paths = copy.deepcopy(self.distribcell_paths) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 99a3d8bfe8..3133db0473 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -2576,9 +2576,11 @@ class Chi(MGXS): xs_type: {'macro', 'micro'} Return macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. - distribcell_paths : list of str - The paths traversed through the CSG tree to reach each distribcell - instance (for 'distribcell' filters only) + distribcell_paths : bool, optional + Construct columns for distribcell tally filters (default is True). + The geometric information in the Summary object is embedded into + a Multi-index column with a geometric "path" to each distribcell + instance. Returns ------- From 838f84c963dbf5fe0f80b02bec2f056a3fd4036f Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 9 May 2016 08:33:18 -0500 Subject: [PATCH 499/650] Respond to @wbinventor comments on #642 --- openmc/statepoint.py | 6 +++--- openmc/universe.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 6c8af88a7c..19aa3dbaf9 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -622,8 +622,6 @@ class StatePoint(object): Raises ------ - RuntimeError - If a Summary object has already been linked. ValueError An error when the argument passed to the 'summary' parameter is not an openmc.Summary object. @@ -631,7 +629,9 @@ class StatePoint(object): """ if self.summary is not None: - raise RuntimeError('A Summary object has already been linked.') + warnings.warn('A Summary object has already been linked.', + RuntimeWarning) + return if not isinstance(summary, openmc.summary.Summary): msg = 'Unable to link statepoint with "{0}" which ' \ diff --git a/openmc/universe.py b/openmc/universe.py index 8834eaa526..770e789da7 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -36,8 +36,8 @@ class Universe(object): automatically be assigned name : str, optional Name of the universe. If not specified, the name is the empty string. - cells : Iterable of openmc.Cell - Cells to add to the universe + cells : Iterable of openmc.Cell, optional + Cells to add to the universe. By default no cells are added. Attributes ---------- From 15fcf59d325b57acc4cb156e7bc5786b19641661 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Mon, 9 May 2016 09:47:11 -0400 Subject: [PATCH 500/650] Fixed line continuation for error in Filter --- openmc/filter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/filter.py b/openmc/filter.py index aab0fc0812..52560a193a 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -631,7 +631,7 @@ class Filter(object): # Distribcell paths require linked metadata from the Summary if self.distribcell_paths is None: - msg = 'Unable to construct distribcell paths since ' + msg = 'Unable to construct distribcell paths since ' \ 'the Summary is not linked to the StatePoint' raise ValueError(msg) From f5f26bada09bf910fcfab89348f4080d8c8ebafc Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Mon, 9 May 2016 12:03:12 -0400 Subject: [PATCH 501/650] Initial implementation of scattering moments for ScatterMatrixXS --- openmc/mgxs/mgxs.py | 147 ++++++++++++++++++++++++++++++++------------ openmc/tallies.py | 2 +- src/input_xml.F90 | 21 ++----- src/state_point.F90 | 4 +- 4 files changed, 115 insertions(+), 59 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 33255de30c..9c3b32657e 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -2,6 +2,7 @@ from __future__ import division from collections import Iterable, OrderedDict from numbers import Integral +import warnings import os import sys import copy @@ -1412,12 +1413,6 @@ class MGXS(object): else: df = self.xs_tally.get_pandas_dataframe(summary=summary) - # Remove the score column since it is homogeneous and redundant - if summary and 'distribcell' in self.domain_type: - df = df.drop('score', level=0, axis=1) - else: - df = df.drop('score', axis=1) - # Override energy groups bounds with indices all_groups = np.arange(self.num_groups, 0, -1, dtype=np.int) all_groups = np.repeat(all_groups, self.num_nuclides) @@ -1431,7 +1426,8 @@ class MGXS(object): df.rename(columns={'energyout low [MeV]': 'group out'}, inplace=True) - out_groups = np.tile(all_groups, df.shape[0] / all_groups.size) + out_groups = np.repeat(all_groups, self.xs_tally.num_scores) + out_groups = np.tile(out_groups, df.shape[0] / out_groups.size) df['group out'] = out_groups del df['energyout high [MeV]'] columns = ['group in', 'group out'] @@ -1843,6 +1839,8 @@ class ScatterMatrixXS(MGXS): ---------- correction : 'P0' or None Apply the P0 correction to scattering matrices if set to 'P0' + order : int + The highest order in the scattering matrix (default is 0) """ @@ -1852,6 +1850,7 @@ class ScatterMatrixXS(MGXS): groups, by_nuclide, name) self._rxn_type = 'scatter matrix' self._correction = 'P0' + self._order = 0 def __deepcopy__(self, memo): clone = super(ScatterMatrixXS, self).__deepcopy__(memo) @@ -1862,6 +1861,10 @@ class ScatterMatrixXS(MGXS): def correction(self): return self._correction + @property + def order(self): + return self._order + @property def tallies(self): """Construct the OpenMC tallies needed to compute this cross section. @@ -1879,13 +1882,19 @@ class ScatterMatrixXS(MGXS): energy = openmc.Filter('energy', group_edges) energyout = openmc.Filter('energyout', group_edges) - # Create a list of scores for each Tally to be created - if self.correction == 'P0': - scores = ['flux', 'scatter', 'scatter-P1'] - filters = [[energy], [energy, energyout], [energyout]] - else: - scores = ['flux', 'scatter'] - filters = [[energy], [energy, energyout]] + # Create lists of scores, filters for each Tally to be created + scores = ['flux'] + filters = [[energy]] + + # Create separate tallies for each moment + for moment in range(self.order+1): + scores.append('scatter-{}'.format(moment)) + filters.append([energy, energyout]) + + # Append to the lists for the P0 approximation if needed + if self.correction == 'P0' and self.order == 0: + scores.append('scatter-1') + filters.append([energyout]) estimator = 'analog' keys = scores @@ -1899,16 +1908,25 @@ class ScatterMatrixXS(MGXS): def rxn_rate_tally(self): if self._rxn_rate_tally is None: + # If using P0 correction subtract scatter-P1 from the diagonal - if self.correction == 'P0': - scatter_p1 = self.tallies['scatter-P1'] - scatter_p1 = scatter_p1.get_slice(scores=['scatter-P1']) - energy_filter = self.tallies['scatter'].find_filter('energy') + if self.correction == 'P0' and self.order == 0: + scatter_p1 = self.tallies['scatter-1'] + scatter_p1 = scatter_p1.get_slice(scores=['scatter-1']) + energy_filter = self.tallies['scatter-0'].find_filter('energy') energy_filter = copy.deepcopy(energy_filter) scatter_p1 = scatter_p1.diagonalize_filter(energy_filter) - self._rxn_rate_tally = self.tallies['scatter'] - scatter_p1 + self._rxn_rate_tally = self.tallies['scatter-0'] - scatter_p1 + + # Merge all scattering moments into a single reaction rate Tally else: - self._rxn_rate_tally = self.tallies['scatter'] + rxn_rate_tally = self.tallies['scatter-0'] + for moment in range(1, self.order+1): + scatter_key = 'scatter-{}'.format(moment) + scatter_pn = self.tallies[scatter_key] + rxn_rate_tally = rxn_rate_tally.merge(scatter_pn) + + self._rxn_rate_tally = rxn_rate_tally self._rxn_rate_tally.sparse = self.sparse @@ -1917,8 +1935,27 @@ class ScatterMatrixXS(MGXS): @correction.setter def correction(self, correction): cv.check_value('correction', correction, ('P0', None)) + + if correction == 'P0' and self.order > 0: + msg = 'The P0 correction will be ignored since the scattering ' \ + 'order {} is greater than zero'.format(self.order) + warnings.warn(msg) + self._correction = correction + @order.setter + def order(self, order): + cv.check_type('order', order, Integral) + cv.check_greater_than('order', order, 0, equality=True) + + if self.correction == 'P0' and self.order > 0: + msg = 'The P0 correction will be ignored since the scattering ' \ + 'order {} is greater than zero'.format(self.order) + warnings.warn(msg, RuntimeWarning) + + self._order = order + + # FIXME: Add order param def get_slice(self, nuclides=[], in_groups=[], out_groups=[]): """Build a sliced ScatterMatrix for the specified nuclides and energy groups. @@ -1971,8 +2008,8 @@ class ScatterMatrixXS(MGXS): slice_xs.sparse = self.sparse return slice_xs - def get_xs(self, in_groups='all', out_groups='all', - subdomains='all', nuclides='all', xs_type='macro', + def get_xs(self, in_groups='all', out_groups='all', subdomains='all', + nuclides='all', moment='all', xs_type='macro', order_groups='increasing', value='mean'): """Returns an array of multi-group cross sections. @@ -1992,6 +2029,10 @@ class ScatterMatrixXS(MGXS): special string 'all' will return the cross sections for all nuclides in the spatial domain. The special string 'sum' will return the cross section summed over all nuclides. Defaults to 'all'. + moment : int or 'all' + The scattering matrix moment to return. All moments will be + returned if the moment is 'all' (default); otherwise, a specific + moment will be returned. xs_type: {'macro', 'micro'} Return the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. @@ -2044,6 +2085,15 @@ class ScatterMatrixXS(MGXS): filters.append('energyout') filter_bins.append((self.energy_groups.get_group_bounds(group),)) + # Construct CrossScore for requested scattering moment + if moment != 'all': + cv.check_type('moment', moment, Integral) + cv.check_greater_than('moment', moment, 0, equality=True) + cv.check_less_than('moment', moment, self.order, equality=True) + scores = [self.xs_tally.scores[moment]] + else: + scores = [] + # Construct a collection of the nuclides to retrieve from the xs tally if self.by_nuclide: if nuclides == 'all' or nuclides == 'sum' or nuclides == ['sum']: @@ -2056,10 +2106,10 @@ class ScatterMatrixXS(MGXS): # Use tally summation if user requested the sum for all nuclides if nuclides == 'sum' or nuclides == ['sum']: xs_tally = self.xs_tally.summation(nuclides=query_nuclides) - xs = xs_tally.get_values(filters=filters, + xs = xs_tally.get_values(scores=scores, filters=filters, filter_bins=filter_bins, value=value) else: - xs = self.xs_tally.get_values(filters=filters, + xs = self.xs_tally.get_values(scores=scores, filters=filters, filter_bins=filter_bins, nuclides=query_nuclides, value=value) @@ -2101,7 +2151,8 @@ class ScatterMatrixXS(MGXS): return xs - def print_xs(self, subdomains='all', nuclides='all', xs_type='macro'): + def print_xs(self, subdomains='all', nuclides='all', + xs_type='macro', moment=0): """Prints a string representation for the multi-group cross section. Parameters @@ -2118,6 +2169,8 @@ class ScatterMatrixXS(MGXS): xs_type: {'macro', 'micro'} Return the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + moment : int + The scattering moment to print (default is 0) """ @@ -2142,9 +2195,14 @@ class ScatterMatrixXS(MGXS): cv.check_value('xs_type', xs_type, ['macro', 'micro']) + if self.correction != 'P0': + rxn_type= '{0} (moment {1})'.format(self.rxn_type, moment) + else: + rxn_type = self.rxn_type + # Build header for string with type and domain info string = 'Multi-Group XS\n' - string += '{0: <16}=\t{1}\n'.format('\tReaction Type', self.rxn_type) + string += '{0: <16}=\t{1}\n'.format('\tReaction Type', rxn_type) string += '{0: <16}=\t{1}\n'.format('\tDomain Type', self.domain_type) string += '{0: <16}=\t{1}\n'.format('\tDomain ID', self.domain.id) @@ -2189,11 +2247,11 @@ class ScatterMatrixXS(MGXS): string += template.format('', in_group, out_group) average = \ self.get_xs([in_group], [out_group], - [subdomain], [nuclide], + [subdomain], [nuclide], moment=moment, xs_type=xs_type, value='mean') rel_err = \ self.get_xs([in_group], [out_group], - [subdomain], [nuclide], + [subdomain], [nuclide], moment=moment, xs_type=xs_type, value='rel_err') average = average.flatten()[0] rel_err = rel_err.flatten()[0] * 100. @@ -2206,6 +2264,8 @@ class ScatterMatrixXS(MGXS): print(string) +# FIXME: Add order property to Library + class NuScatterMatrixXS(ScatterMatrixXS): """A scattering production matrix multi-group cross section.""" @@ -2228,28 +2288,35 @@ class NuScatterMatrixXS(ScatterMatrixXS): # Instantiate tallies if they do not exist if self._tallies is None: - # Create the non-domain specific Filters for the Tallies group_edges = self.energy_groups.group_edges energy = openmc.Filter('energy', group_edges) energyout = openmc.Filter('energyout', group_edges) - # Create a list of scores for each Tally to be created - if self.correction == 'P0': - scores = ['flux', 'nu-scatter', 'scatter-P1'] - estimator = 'analog' - keys = ['flux', 'scatter', 'scatter-P1'] - filters = [[energy], [energy, energyout], [energyout]] - else: - scores = ['flux', 'nu-scatter'] - estimator = 'analog' - keys = ['flux', 'scatter'] - filters = [[energy], [energy, energyout]] + # Create lists of scores, filters for each Tally to be created + scores = ['flux'] + filters = [[energy]] + keys = ['flux'] + + # Create separate tallies for each moment + for moment in range(self.order+1): + scores.append('nu-scatter-{}'.format(moment)) + filters.append([energy, energyout]) + keys.append('scatter-{}'.format(moment)) + + # Append to the lists for the P0 approximation if needed + if self.correction == 'P0' and self.order == 0: + scores.append('scatter-1') + filters.append([energyout]) + keys.append('scatter-1') + + estimator = 'analog' # Intialize the Tallies self._create_tallies(scores, filters, keys, estimator) return self._tallies + class Chi(MGXS): """The fission spectrum.""" diff --git a/openmc/tallies.py b/openmc/tallies.py index 3a5a1f1e8c..dc431ddf94 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1637,7 +1637,7 @@ class Tally(object): for score in self.scores: if isinstance(score, (basestring, CrossScore)): - scores.append(score) + scores.append(str(score)) elif isinstance(score, AggregateScore): scores.append(score.name) column_name = '{0}(score)'.format(score.aggregate_op) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 90c703d27d..b69235690b 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -3338,28 +3338,17 @@ contains case ('nu-scatter') t % score_bins(j) = SCORE_NU_SCATTER - - ! Set tally estimator to analog t % estimator = ESTIMATOR_ANALOG + case ('scatter-n') - if (n_order == 0) then - t % score_bins(j) = SCORE_SCATTER - else - t % score_bins(j) = SCORE_SCATTER_N - ! Set tally estimator to analog - t % estimator = ESTIMATOR_ANALOG - end if + t % score_bins(j) = SCORE_SCATTER_N t % moment_order(j) = n_order + t % estimator = ESTIMATOR_ANALOG case ('nu-scatter-n') - ! Set tally estimator to analog - t % estimator = ESTIMATOR_ANALOG - if (n_order == 0) then - t % score_bins(j) = SCORE_NU_SCATTER - else - t % score_bins(j) = SCORE_NU_SCATTER_N - end if + t % score_bins(j) = SCORE_NU_SCATTER_N t % moment_order(j) = n_order + t % estimator = ESTIMATOR_ANALOG case ('scatter-pn') t % estimator = ESTIMATOR_ANALOG diff --git a/src/state_point.F90 b/src/state_point.F90 index 4348ad3314..10979ee9e0 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -330,11 +330,11 @@ contains MOMENT_LOOP: do j = 1, tally % n_user_score_bins select case(tally % score_bins(k)) case (SCORE_SCATTER_N, SCORE_NU_SCATTER_N) - str_array(k) = 'P' // trim(to_str(tally % moment_order(k))) + str_array(k) = trim(to_str(tally % moment_order(k))) k = k + 1 case (SCORE_SCATTER_PN, SCORE_NU_SCATTER_PN) do n_order = 0, tally % moment_order(k) - str_array(k) = 'P' // trim(to_str(n_order)) + str_array(k) = trim(to_str(n_order)) k = k + 1 end do case (SCORE_SCATTER_YN, SCORE_NU_SCATTER_YN, SCORE_FLUX_YN, & From 2dae4f9a69bac6c6e34c610a6f5dc27992eb91e2 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Mon, 9 May 2016 12:17:55 -0400 Subject: [PATCH 502/650] Added legendre moment parameter to Pandas DF construction for ScatterMatrixXS --- openmc/mgxs/mgxs.py | 67 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 9c3b32657e..e5ba9b4ac1 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1833,14 +1833,15 @@ class NuScatterXS(MGXS): class ScatterMatrixXS(MGXS): - """A scattering matrix multi-group cross section. + """A scattering matrix multi-group cross section for one or more Legendre + moments. Attributes ---------- correction : 'P0' or None Apply the P0 correction to scattering matrices if set to 'P0' order : int - The highest order in the scattering matrix (default is 0) + The highest legendre moment in the scattering matrix (default is 0) """ @@ -1869,8 +1870,8 @@ class ScatterMatrixXS(MGXS): def tallies(self): """Construct the OpenMC tallies needed to compute this cross section. - This method constructs three analog tallies to compute the 'flux', - 'scatter' and 'scatter-P1' reaction rates in the spatial domain and + This method constructs three analog tallies to compute the 'flux' + and Legendre scattering moment reaction rates in the spatial domain and energy groups of interest. """ @@ -1955,7 +1956,6 @@ class ScatterMatrixXS(MGXS): self._order = order - # FIXME: Add order param def get_slice(self, nuclides=[], in_groups=[], out_groups=[]): """Build a sliced ScatterMatrix for the specified nuclides and energy groups. @@ -2151,6 +2151,63 @@ class ScatterMatrixXS(MGXS): return xs + def get_pandas_dataframe(self, groups='all', nuclides='all', moment='all', + xs_type='macro', summary=None): + """Build a Pandas DataFrame for the MGXS data. + + This method leverages :meth:`openmc.Tally.get_pandas_dataframe`, but + renames the columns with terminology appropriate for cross section data. + + Parameters + ---------- + groups : Iterable of Integral or 'all' + Energy groups of interest. Defaults to 'all'. + nuclides : Iterable of str or 'all' or 'sum' + The nuclides of the cross-sections to include in the dataframe. This + may be a list of nuclide name strings (e.g., ['U-235', 'U-238']). + The special string 'all' will include the cross sections for all + nuclides in the spatial domain. The special string 'sum' will + include the cross sections summed over all nuclides. Defaults + to 'all'. + moment : int or 'all' + The scattering matrix moment to return. All moments will be + returned if the moment is 'all' (default); otherwise, a specific + moment will be returned. + xs_type: {'macro', 'micro'} + Return macro or micro cross section in units of cm^-1 or barns. + Defaults to 'macro'. + summary : None or openmc.Summary + An optional Summary object to be used to construct columns for + distribcell tally filters (default is None). The geometric + information in the Summary object is embedded into a multi-index + column with a geometric "path" to each distribcell intance. + NOTE: This option requires the OpenCG Python package. + + Returns + ------- + pandas.DataFrame + A Pandas DataFrame for the cross section data. + + Raises + ------ + ValueError + When this method is called before the multi-group cross section is + computed from tally data. + + """ + + df = super(ScatterMatrixXS, self).get_pandas_dataframe( + groups, nuclides, xs_type, summary) + + # Select rows corresponding to requested scattering moment + if moment != 'all': + cv.check_type('moment', moment, Integral) + cv.check_greater_than('moment', moment, 0, equality=True) + cv.check_less_than('moment', moment, self.order, equality=True) + df = df[df['score'] == str(self.xs_tally.scores[moment])] + + return df + def print_xs(self, subdomains='all', nuclides='all', xs_type='macro', moment=0): """Prints a string representation for the multi-group cross section. From 8f6961fec514e1c8bacd1d5f6834f3c8e25f618e Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Mon, 9 May 2016 12:48:43 -0400 Subject: [PATCH 503/650] Added legendre moment order to get_slice method for ScatterMatrixXS --- openmc/mgxs/library.py | 30 ++++++++++++++----- openmc/mgxs/mgxs.py | 66 ++++++++++++++++++++++++++---------------- 2 files changed, 64 insertions(+), 32 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index f3bf2018dc..a7defba5dc 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -2,6 +2,7 @@ import sys import os import copy import pickle +import warnings from numbers import Integral from collections import OrderedDict @@ -57,6 +58,8 @@ class Library(object): The spatial domain(s) for which MGXS in the Library are computed correction : {'P0', None} Apply the P0 correction to scattering matrices if set to 'P0' + legendre_order : int + The highest legendre moments in the scattering matrices (default is 0) energy_groups : openmc.mgxs.EnergyGroups Energy group structure for energy condensation tally_trigger : openmc.Trigger @@ -89,8 +92,9 @@ class Library(object): self._mgxs_types = [] self._domain_type = None self._domains = 'all' - self._correction = 'P0' self._energy_groups = None + self._correction = 'P0' + self._legendre_order = 0 self._tally_trigger = None self._all_mgxs = OrderedDict() self._sp_filename = None @@ -118,6 +122,7 @@ class Library(object): clone._domain_type = self.domain_type clone._domains = copy.deepcopy(self.domains) clone._correction = self.correction + clone._legendre_order = self.legendre_order clone._energy_groups = copy.deepcopy(self.energy_groups, memo) clone._tally_trigger = copy.deepcopy(self.tally_trigger, memo) clone._all_mgxs = copy.deepcopy(self.all_mgxs) @@ -185,13 +190,17 @@ class Library(object): else: return self._domains + @property + def energy_groups(self): + return self._energy_groups + @property def correction(self): return self._correction @property - def energy_groups(self): - return self._energy_groups + def legendre_order(self): + return self._legendre_order @property def tally_trigger(self): @@ -280,15 +289,21 @@ class Library(object): self._domains = domains + @energy_groups.setter + def energy_groups(self, energy_groups): + cv.check_type('energy groups', energy_groups, openmc.mgxs.EnergyGroups) + self._energy_groups = energy_groups + @correction.setter def correction(self, correction): cv.check_value('correction', correction, ('P0', None)) self._correction = correction - @energy_groups.setter - def energy_groups(self, energy_groups): - cv.check_type('energy groups', energy_groups, openmc.mgxs.EnergyGroups) - self._energy_groups = energy_groups + @legendre_order.setter + def legendre_order(self, legendre_order): + cv.check_type('legendre_order', legendre_order, Integral) + cv.check_greater_than('legendre_order', legendre_order, 0, equality=True) + self._legendre_order = legendre_order @tally_trigger.setter def tally_trigger(self, tally_trigger): @@ -344,6 +359,7 @@ class Library(object): # Specify whether to use a transport ('P0') correction if isinstance(mgxs, openmc.mgxs.ScatterMatrixXS): mgxs.correction = self.correction + mgxs.legendre_order = self.legendre_order self.all_mgxs[domain.id][mgxs_type] = mgxs diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index e5ba9b4ac1..9a60d2493f 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1840,7 +1840,7 @@ class ScatterMatrixXS(MGXS): ---------- correction : 'P0' or None Apply the P0 correction to scattering matrices if set to 'P0' - order : int + legendre_order : int The highest legendre moment in the scattering matrix (default is 0) """ @@ -1851,11 +1851,12 @@ class ScatterMatrixXS(MGXS): groups, by_nuclide, name) self._rxn_type = 'scatter matrix' self._correction = 'P0' - self._order = 0 + self._legendre_order = 0 def __deepcopy__(self, memo): clone = super(ScatterMatrixXS, self).__deepcopy__(memo) clone._correction = self.correction + clone._legendre_order = self.legendre_order return clone @property @@ -1863,8 +1864,8 @@ class ScatterMatrixXS(MGXS): return self._correction @property - def order(self): - return self._order + def legendre_order(self): + return self._legendre_order @property def tallies(self): @@ -1888,12 +1889,12 @@ class ScatterMatrixXS(MGXS): filters = [[energy]] # Create separate tallies for each moment - for moment in range(self.order+1): + for moment in range(self.legendre_order+1): scores.append('scatter-{}'.format(moment)) filters.append([energy, energyout]) # Append to the lists for the P0 approximation if needed - if self.correction == 'P0' and self.order == 0: + if self.correction == 'P0' and self.legendre_order == 0: scores.append('scatter-1') filters.append([energyout]) @@ -1911,7 +1912,7 @@ class ScatterMatrixXS(MGXS): if self._rxn_rate_tally is None: # If using P0 correction subtract scatter-P1 from the diagonal - if self.correction == 'P0' and self.order == 0: + if self.correction == 'P0' and self.legendre_order == 0: scatter_p1 = self.tallies['scatter-1'] scatter_p1 = scatter_p1.get_slice(scores=['scatter-1']) energy_filter = self.tallies['scatter-0'].find_filter('energy') @@ -1922,7 +1923,7 @@ class ScatterMatrixXS(MGXS): # Merge all scattering moments into a single reaction rate Tally else: rxn_rate_tally = self.tallies['scatter-0'] - for moment in range(1, self.order+1): + for moment in range(1, self.legendre_order+1): scatter_key = 'scatter-{}'.format(moment) scatter_pn = self.tallies[scatter_key] rxn_rate_tally = rxn_rate_tally.merge(scatter_pn) @@ -1937,26 +1938,27 @@ class ScatterMatrixXS(MGXS): def correction(self, correction): cv.check_value('correction', correction, ('P0', None)) - if correction == 'P0' and self.order > 0: + if correction == 'P0' and self.legendre_order > 0: msg = 'The P0 correction will be ignored since the scattering ' \ - 'order {} is greater than zero'.format(self.order) + 'order {} is greater than zero'.format(self.legendre_order) warnings.warn(msg) self._correction = correction - @order.setter - def order(self, order): - cv.check_type('order', order, Integral) - cv.check_greater_than('order', order, 0, equality=True) + @legendre_order.setter + def legendre_order(self, legendre_order): + cv.check_type('legendre_order', legendre_order, Integral) + cv.check_greater_than('legendre_order', legendre_order, 0, equality=True) - if self.correction == 'P0' and self.order > 0: + if self.correction == 'P0' and legendre_order > 0: msg = 'The P0 correction will be ignored since the scattering ' \ - 'order {} is greater than zero'.format(self.order) + 'order {} is greater than zero'.format(self.legendre_order) warnings.warn(msg, RuntimeWarning) - self._order = order + self._legendre_order = legendre_order - def get_slice(self, nuclides=[], in_groups=[], out_groups=[]): + def get_slice(self, nuclides=[], in_groups=[], out_groups=[], + legendre_order='same'): """Build a sliced ScatterMatrix for the specified nuclides and energy groups. @@ -1976,6 +1978,12 @@ class ScatterMatrixXS(MGXS): out_groups : list of int A list of outgoing energy group indices starting at 1 for the high energies (e.g., [1, 2, 3]; default is []) + legendre_order : int or 'same' + The highest Legendre moment in the sliced MGXS. If order is 'same' + then the sliced MGXS will have the same Legendre moments as the + original MGXS (default). If order is an integer less than the + original MGXS' order, then only those Legendre moments up to that + order will be included in the sliced MGXS. Returns ------- @@ -1990,6 +1998,16 @@ class ScatterMatrixXS(MGXS): slice_xs._rxn_rate_tally = None slice_xs._xs_tally = None + # Slice the Legendre order if needed + if legendre_order != 'same': + cv.check_type('legendre_order', legendre_order, Integral) + cv.check_less_than('legendre_order', legendre_order, + self.legendre_order, equality=True) + slice_xs.legendre_order = legendre_order + + for moment in range(legendre_order+1, self.legendre_order+1): + del slice_xs.tallies['scatter-{}'.format(moment)] + # Slice outgoing energy groups if needed if len(out_groups) != 0: filter_bins = [] @@ -2089,7 +2107,7 @@ class ScatterMatrixXS(MGXS): if moment != 'all': cv.check_type('moment', moment, Integral) cv.check_greater_than('moment', moment, 0, equality=True) - cv.check_less_than('moment', moment, self.order, equality=True) + cv.check_less_than('moment', moment, 10, equality=True) scores = [self.xs_tally.scores[moment]] else: scores = [] @@ -2203,7 +2221,7 @@ class ScatterMatrixXS(MGXS): if moment != 'all': cv.check_type('moment', moment, Integral) cv.check_greater_than('moment', moment, 0, equality=True) - cv.check_less_than('moment', moment, self.order, equality=True) + cv.check_less_than('moment', moment, 10, equality=True) df = df[df['score'] == str(self.xs_tally.scores[moment])] return df @@ -2253,7 +2271,7 @@ class ScatterMatrixXS(MGXS): cv.check_value('xs_type', xs_type, ['macro', 'micro']) if self.correction != 'P0': - rxn_type= '{0} (moment {1})'.format(self.rxn_type, moment) + rxn_type= '{0} (P{1})'.format(self.rxn_type, moment) else: rxn_type = self.rxn_type @@ -2321,8 +2339,6 @@ class ScatterMatrixXS(MGXS): print(string) -# FIXME: Add order property to Library - class NuScatterMatrixXS(ScatterMatrixXS): """A scattering production matrix multi-group cross section.""" @@ -2355,13 +2371,13 @@ class NuScatterMatrixXS(ScatterMatrixXS): keys = ['flux'] # Create separate tallies for each moment - for moment in range(self.order+1): + for moment in range(self.legendre_order+1): scores.append('nu-scatter-{}'.format(moment)) filters.append([energy, energyout]) keys.append('scatter-{}'.format(moment)) # Append to the lists for the P0 approximation if needed - if self.correction == 'P0' and self.order == 0: + if self.correction == 'P0' and self.legendre_order == 0: scores.append('scatter-1') filters.append([energyout]) keys.append('scatter-1') From 41e8f83c603d5a20d735da3e09212bec94666a8d Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Mon, 9 May 2016 13:17:57 -0400 Subject: [PATCH 504/650] Hard over-ride of ScatterMatrixXS correction with higher order legendre moments --- openmc/mgxs/mgxs.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 7405b71fd8..d8b80cc43a 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1959,6 +1959,7 @@ class ScatterMatrixXS(MGXS): msg = 'The P0 correction will be ignored since the scattering ' \ 'order {} is greater than zero'.format(self.legendre_order) warnings.warn(msg, RuntimeWarning) + self.correction = None self._legendre_order = legendre_order From 9e5460321ffe1f4dd0966c41ee8f21b27857a0e6 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Mon, 9 May 2016 13:26:42 -0400 Subject: [PATCH 505/650] Updated MGXS test results to include Pandas DF column for scores --- openmc/mgxs/mgxs.py | 16 +- .../inputs_true.dat | 2 +- .../results_true.dat | 98 +- .../inputs_true.dat | 2 +- .../results_true.dat | 10 +- tests/test_mgxs_library_hdf5/inputs_true.dat | 2 +- .../inputs_true.dat | 2 +- .../results_true.dat | 242 +- .../inputs_true.dat | 2 +- .../results_true.dat | 3942 ++++++++--------- 10 files changed, 2156 insertions(+), 2162 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index d8b80cc43a..051dd3cf1e 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1534,7 +1534,7 @@ class TransportXS(MGXS): """Construct the OpenMC tallies needed to compute this cross section. This method constructs three analog tallies to compute the 'flux', - 'total' and 'scatter-P1' reaction rates in the spatial domain and + 'total' and 'scatter-1' reaction rates in the spatial domain and energy groups of interest. """ @@ -1543,7 +1543,7 @@ class TransportXS(MGXS): if self._tallies is None: # Create a list of scores for each Tally to be created - scores = ['flux', 'total', 'scatter-P1'] + scores = ['flux', 'total', 'scatter-1'] estimator = 'analog' keys = scores @@ -1561,15 +1561,9 @@ class TransportXS(MGXS): @property def rxn_rate_tally(self): if self._rxn_rate_tally is None: - scatter_p1 = copy.deepcopy(self.tallies['scatter-P1']) - - # Use tally slicing to remove scatter-P0 data from scatter-P1 tally - self.tallies['scatter-P1'] = \ - scatter_p1.get_slice(scores=['scatter-P1']) - - self.tallies['scatter-P1'].filters[-1].type = 'energy' + self.tallies['scatter-1'].filters[-1].type = 'energy' self._rxn_rate_tally = \ - self.tallies['total'] - self.tallies['scatter-P1'] + self.tallies['total'] - self.tallies['scatter-1'] self._rxn_rate_tally.sparse = self.sparse return self._rxn_rate_tally @@ -1916,7 +1910,7 @@ class ScatterMatrixXS(MGXS): if self._rxn_rate_tally is None: - # If using P0 correction subtract scatter-P1 from the diagonal + # If using P0 correction subtract scatter-1 from the diagonal if self.correction == 'P0' and self.legendre_order == 0: scatter_p1 = self.tallies['scatter-1'] scatter_p1 = scatter_p1.get_slice(scores=['scatter-1']) diff --git a/tests/test_mgxs_library_condense/inputs_true.dat b/tests/test_mgxs_library_condense/inputs_true.dat index 51fc95c60c..708ec114ed 100644 --- a/tests/test_mgxs_library_condense/inputs_true.dat +++ b/tests/test_mgxs_library_condense/inputs_true.dat @@ -1 +1 @@ -3e7b4ee62e0a53b92d4241f33493786532934f20ebcf47d92825bb1ee2f67c52aa8e7832cf28a9911221f802da205fba2b23c7228899780089da69e21042743c \ No newline at end of file +e3834da92fc6ae57ce109621e3f692a186a03820b61332fa9ed898bc07fb8a63484ace095713d5b88196b1d2f1430d2e7b27a505944c7c3027f6365801f58146 \ No newline at end of file diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index 4382153729..7e8a496737 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -1,49 +1,49 @@ - material group in nuclide mean std. dev. -0 1 1 total 0.412084 0.02359 material group in nuclide mean std. dev. -0 1 1 total 0.076425 0.003691 material group in group out nuclide mean std. dev. -0 1 1 1 total 0.345643 0.021487 material group out nuclide mean std. dev. -0 1 1 total 1.0 0.055333 material group in nuclide mean std. dev. -0 2 1 total 0.241262 0.00841 material group in nuclide mean std. dev. -0 2 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 2 1 1 total 0.241262 0.00841 material group out nuclide mean std. dev. -0 2 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 3 1 total 0.400028 0.034667 material group in nuclide mean std. dev. -0 3 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 3 1 1 total 0.393462 0.033646 material group out nuclide mean std. dev. -0 3 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 4 1 total 0.377402 0.072937 material group in nuclide mean std. dev. -0 4 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 4 1 1 total 0.371473 0.071226 material group out nuclide mean std. dev. -0 4 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 5 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 5 1 1 total 0.0 0.0 material group out nuclide mean std. dev. -0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 6 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 6 1 1 total 0.0 0.0 material group out nuclide mean std. dev. -0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 7 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 7 1 1 total 0.0 0.0 material group out nuclide mean std. dev. -0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 8 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 8 1 1 total 0.0 0.0 material group out nuclide mean std. dev. -0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 9 1 total 0.600536 0.748875 material group in nuclide mean std. dev. -0 9 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 9 1 1 total 0.600536 0.748875 material group out nuclide mean std. dev. -0 9 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 10 1 total 0.235515 0.613974 material group in nuclide mean std. dev. -0 10 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 10 1 1 total 0.235515 0.613974 material group out nuclide mean std. dev. -0 10 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 11 1 total 0.510145 0.741941 material group in nuclide mean std. dev. -0 11 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 11 1 1 total 0.491857 0.715554 material group out nuclide mean std. dev. -0 11 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 12 1 total 0.73836 0.825631 material group in nuclide mean std. dev. -0 12 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 12 1 1 total 0.723265 0.808231 material group out nuclide mean std. dev. -0 12 1 total 0.0 0.0 \ No newline at end of file + material group in nuclide score mean std. dev. +0 1 1 total ((total - scatter-1) / flux) 4.12e-01 2.36e-02 material group in nuclide score mean std. dev. +0 1 1 total (nu-fission / flux) 7.64e-02 3.69e-03 material group in group out nuclide score mean std. dev. +0 1 1 1 total ((nu-scatter-0 - scatter-1) / flux) 3.46e-01 2.15e-02 material group out nuclide score mean std. dev. +0 1 1 total nu-fission 1.00e+00 5.53e-02 material group in nuclide score mean std. dev. +0 2 1 total ((total - scatter-1) / flux) 2.41e-01 8.41e-03 material group in nuclide score mean std. dev. +0 2 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +0 2 1 1 total ((nu-scatter-0 - scatter-1) / flux) 2.41e-01 8.41e-03 material group out nuclide score mean std. dev. +0 2 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +0 3 1 total ((total - scatter-1) / flux) 4.00e-01 3.47e-02 material group in nuclide score mean std. dev. +0 3 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +0 3 1 1 total ((nu-scatter-0 - scatter-1) / flux) 3.93e-01 3.36e-02 material group out nuclide score mean std. dev. +0 3 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +0 4 1 total ((total - scatter-1) / flux) 3.77e-01 7.29e-02 material group in nuclide score mean std. dev. +0 4 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +0 4 1 1 total ((nu-scatter-0 - scatter-1) / flux) 3.71e-01 7.12e-02 material group out nuclide score mean std. dev. +0 4 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +0 5 1 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +0 5 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +0 5 1 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +0 5 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +0 6 1 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +0 6 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +0 6 1 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +0 6 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +0 7 1 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +0 7 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +0 7 1 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +0 7 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +0 8 1 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +0 8 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +0 8 1 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +0 8 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +0 9 1 total ((total - scatter-1) / flux) 6.01e-01 7.49e-01 material group in nuclide score mean std. dev. +0 9 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +0 9 1 1 total ((nu-scatter-0 - scatter-1) / flux) 6.01e-01 7.49e-01 material group out nuclide score mean std. dev. +0 9 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +0 10 1 total ((total - scatter-1) / flux) 2.36e-01 6.14e-01 material group in nuclide score mean std. dev. +0 10 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +0 10 1 1 total ((nu-scatter-0 - scatter-1) / flux) 2.36e-01 6.14e-01 material group out nuclide score mean std. dev. +0 10 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +0 11 1 total ((total - scatter-1) / flux) 5.10e-01 7.42e-01 material group in nuclide score mean std. dev. +0 11 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +0 11 1 1 total ((nu-scatter-0 - scatter-1) / flux) 4.92e-01 7.16e-01 material group out nuclide score mean std. dev. +0 11 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +0 12 1 total ((total - scatter-1) / flux) 7.38e-01 8.26e-01 material group in nuclide score mean std. dev. +0 12 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +0 12 1 1 total ((nu-scatter-0 - scatter-1) / flux) 7.23e-01 8.08e-01 material group out nuclide score mean std. dev. +0 12 1 total nu-fission 0.00e+00 0.00e+00 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/inputs_true.dat b/tests/test_mgxs_library_distribcell/inputs_true.dat index 78ffa3faf0..4ab730274d 100644 --- a/tests/test_mgxs_library_distribcell/inputs_true.dat +++ b/tests/test_mgxs_library_distribcell/inputs_true.dat @@ -1 +1 @@ -2c078f650fed5fc241f42b2d7404fb7fae59d782102fad66b4cd2c8a4b1f266d64e8ce1ec0556117c2a2b1fe49aa583f340dc43df3ddc9320557aa97bb554c05 \ No newline at end of file +aadb1e94492741c091bff4b5e17634ee327c718fc9fd1f27aa22fe8406fb70f732750dfdceb30eb40b5e4f406061bea6bd5235ba613c3c81009f5857a9051728 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index 0d5c7c7b44..a23417d920 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,5 +1,5 @@ - avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.718919 0.520644 avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 avg(distribcell) group in group out nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.695166 0.510606 avg(distribcell) group out nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 \ No newline at end of file + avg(distribcell) group in nuclide score mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total ((total - scatter-1) / flux) 7.19e-01 5.21e-01 avg(distribcell) group in nuclide score mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total (nu-fission / flux) 0.00e+00 0.00e+00 avg(distribcell) group in group out nuclide score mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total ((nu-scatter-0 - scatter-1) / flux) 6.95e-01 5.11e-01 avg(distribcell) group out nuclide score mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total nu-fission 0.00e+00 0.00e+00 \ No newline at end of file diff --git a/tests/test_mgxs_library_hdf5/inputs_true.dat b/tests/test_mgxs_library_hdf5/inputs_true.dat index 51fc95c60c..708ec114ed 100644 --- a/tests/test_mgxs_library_hdf5/inputs_true.dat +++ b/tests/test_mgxs_library_hdf5/inputs_true.dat @@ -1 +1 @@ -3e7b4ee62e0a53b92d4241f33493786532934f20ebcf47d92825bb1ee2f67c52aa8e7832cf28a9911221f802da205fba2b23c7228899780089da69e21042743c \ No newline at end of file +e3834da92fc6ae57ce109621e3f692a186a03820b61332fa9ed898bc07fb8a63484ace095713d5b88196b1d2f1430d2e7b27a505944c7c3027f6365801f58146 \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/inputs_true.dat b/tests/test_mgxs_library_no_nuclides/inputs_true.dat index 51fc95c60c..708ec114ed 100644 --- a/tests/test_mgxs_library_no_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_no_nuclides/inputs_true.dat @@ -1 +1 @@ -3e7b4ee62e0a53b92d4241f33493786532934f20ebcf47d92825bb1ee2f67c52aa8e7832cf28a9911221f802da205fba2b23c7228899780089da69e21042743c \ No newline at end of file +e3834da92fc6ae57ce109621e3f692a186a03820b61332fa9ed898bc07fb8a63484ace095713d5b88196b1d2f1430d2e7b27a505944c7c3027f6365801f58146 \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index 442b8ac7be..c279653e5c 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -1,121 +1,121 @@ - material group in nuclide mean std. dev. -1 1 1 total 0.372745 0.024269 -0 1 2 total 0.861607 0.032349 material group in nuclide mean std. dev. -1 1 1 total 0.021789 0.001182 -0 1 2 total 0.714077 0.040552 material group in group out nuclide mean std. dev. -3 1 1 1 total 0.337397 0.023039 -2 1 1 2 total 0.001559 0.000510 -1 1 2 1 total 0.000000 0.000000 -0 1 2 2 total 0.422051 0.021617 material group out nuclide mean std. dev. -1 1 1 total 1.0 0.055333 -0 1 2 total 0.0 0.000000 material group in nuclide mean std. dev. -1 2 1 total 0.237254 0.008184 -0 2 2 total 0.285930 0.048796 material group in nuclide mean std. dev. -1 2 1 total 0.0 0.0 -0 2 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 2 1 1 total 0.237254 0.008184 -2 2 1 2 total 0.000000 0.000000 -1 2 2 1 total 0.000000 0.000000 -0 2 2 2 total 0.285930 0.048796 material group out nuclide mean std. dev. -1 2 1 total 0.0 0.0 -0 2 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 3 1 total 0.286906 0.027401 -0 3 2 total 1.418151 0.265308 material group in nuclide mean std. dev. -1 3 1 total 0.0 0.0 -0 3 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 3 1 1 total 0.259937 0.026115 -2 3 1 2 total 0.026187 0.001665 -1 3 2 1 total 0.000000 0.000000 -0 3 2 2 total 1.359521 0.258505 material group out nuclide mean std. dev. -1 3 1 total 0.0 0.0 -0 3 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 4 1 total 0.242447 0.061031 -0 4 2 total 1.253959 0.388363 material group in nuclide mean std. dev. -1 4 1 total 0.0 0.0 -0 4 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 4 1 1 total 0.217930 0.058565 -2 4 1 2 total 0.023662 0.003083 -1 4 2 1 total 0.000000 0.000000 -0 4 2 2 total 1.215074 0.381025 material group out nuclide mean std. dev. -1 4 1 total 0.0 0.0 -0 4 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 5 1 1 total 0.0 0.0 -2 5 1 2 total 0.0 0.0 -1 5 2 1 total 0.0 0.0 -0 5 2 2 total 0.0 0.0 material group out nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 6 1 1 total 0.0 0.0 -2 6 1 2 total 0.0 0.0 -1 6 2 1 total 0.0 0.0 -0 6 2 2 total 0.0 0.0 material group out nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 7 1 1 total 0.0 0.0 -2 7 1 2 total 0.0 0.0 -1 7 2 1 total 0.0 0.0 -0 7 2 2 total 0.0 0.0 material group out nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 8 1 1 total 0.0 0.0 -2 8 1 2 total 0.0 0.0 -1 8 2 1 total 0.0 0.0 -0 8 2 2 total 0.0 0.0 material group out nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 9 1 total 0.600536 0.748875 -0 9 2 total 0.000000 0.000000 material group in nuclide mean std. dev. -1 9 1 total 0.0 0.0 -0 9 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 9 1 1 total 0.600536 0.748875 -2 9 1 2 total 0.000000 0.000000 -1 9 2 1 total 0.000000 0.000000 -0 9 2 2 total 0.000000 0.000000 material group out nuclide mean std. dev. -1 9 1 total 0.0 0.0 -0 9 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 10 1 total 0.235515 0.613974 -0 10 2 total 0.000000 0.000000 material group in nuclide mean std. dev. -1 10 1 total 0.0 0.0 -0 10 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 10 1 1 total 0.235515 0.613974 -2 10 1 2 total 0.000000 0.000000 -1 10 2 1 total 0.000000 0.000000 -0 10 2 2 total 0.000000 0.000000 material group out nuclide mean std. dev. -1 10 1 total 0.0 0.0 -0 10 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 11 1 total 0.186324 0.632129 -0 11 2 total 0.945986 1.591133 material group in nuclide mean std. dev. -1 11 1 total 0.0 0.0 -0 11 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 11 1 1 total 0.154449 0.597686 -2 11 1 2 total 0.031875 0.045078 -1 11 2 1 total 0.000000 0.000000 -0 11 2 2 total 0.903085 1.532144 material group out nuclide mean std. dev. -1 11 1 total 0.0 0.0 -0 11 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 12 1 total 0.213292 0.271444 -0 12 2 total 1.390975 2.137346 material group in nuclide mean std. dev. -1 12 1 total 0.0 0.0 -0 12 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 12 1 1 total 0.186052 0.257633 -2 12 1 2 total 0.027240 0.029555 -1 12 2 1 total 0.000000 0.000000 -0 12 2 2 total 1.357118 2.089846 material group out nuclide mean std. dev. -1 12 1 total 0.0 0.0 -0 12 2 total 0.0 0.0 \ No newline at end of file + material group in nuclide score mean std. dev. +1 1 1 total ((total - scatter-1) / flux) 3.73e-01 2.43e-02 +0 1 2 total ((total - scatter-1) / flux) 8.62e-01 3.23e-02 material group in nuclide score mean std. dev. +1 1 1 total (nu-fission / flux) 2.18e-02 1.18e-03 +0 1 2 total (nu-fission / flux) 7.14e-01 4.06e-02 material group in group out nuclide score mean std. dev. +3 1 1 1 total ((nu-scatter-0 - scatter-1) / flux) 3.37e-01 2.30e-02 +2 1 1 2 total ((nu-scatter-0 - scatter-1) / flux) 1.56e-03 5.10e-04 +1 1 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 1 2 2 total ((nu-scatter-0 - scatter-1) / flux) 4.22e-01 2.16e-02 material group out nuclide score mean std. dev. +1 1 1 total nu-fission 1.00e+00 5.53e-02 +0 1 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 2 1 total ((total - scatter-1) / flux) 2.37e-01 8.18e-03 +0 2 2 total ((total - scatter-1) / flux) 2.86e-01 4.88e-02 material group in nuclide score mean std. dev. +1 2 1 total (nu-fission / flux) 0.00e+00 0.00e+00 +0 2 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +3 2 1 1 total ((nu-scatter-0 - scatter-1) / flux) 2.37e-01 8.18e-03 +2 2 1 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +1 2 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 2 2 2 total ((nu-scatter-0 - scatter-1) / flux) 2.86e-01 4.88e-02 material group out nuclide score mean std. dev. +1 2 1 total nu-fission 0.00e+00 0.00e+00 +0 2 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 3 1 total ((total - scatter-1) / flux) 2.87e-01 2.74e-02 +0 3 2 total ((total - scatter-1) / flux) 1.42e+00 2.65e-01 material group in nuclide score mean std. dev. +1 3 1 total (nu-fission / flux) 0.00e+00 0.00e+00 +0 3 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +3 3 1 1 total ((nu-scatter-0 - scatter-1) / flux) 2.60e-01 2.61e-02 +2 3 1 2 total ((nu-scatter-0 - scatter-1) / flux) 2.62e-02 1.66e-03 +1 3 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 3 2 2 total ((nu-scatter-0 - scatter-1) / flux) 1.36e+00 2.59e-01 material group out nuclide score mean std. dev. +1 3 1 total nu-fission 0.00e+00 0.00e+00 +0 3 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 4 1 total ((total - scatter-1) / flux) 2.42e-01 6.10e-02 +0 4 2 total ((total - scatter-1) / flux) 1.25e+00 3.88e-01 material group in nuclide score mean std. dev. +1 4 1 total (nu-fission / flux) 0.00e+00 0.00e+00 +0 4 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +3 4 1 1 total ((nu-scatter-0 - scatter-1) / flux) 2.18e-01 5.86e-02 +2 4 1 2 total ((nu-scatter-0 - scatter-1) / flux) 2.37e-02 3.08e-03 +1 4 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 4 2 2 total ((nu-scatter-0 - scatter-1) / flux) 1.22e+00 3.81e-01 material group out nuclide score mean std. dev. +1 4 1 total nu-fission 0.00e+00 0.00e+00 +0 4 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 5 1 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +0 5 2 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 5 1 total (nu-fission / flux) 0.00e+00 0.00e+00 +0 5 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +3 5 1 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +2 5 1 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +1 5 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 5 2 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +1 5 1 total nu-fission 0.00e+00 0.00e+00 +0 5 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 6 1 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +0 6 2 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 6 1 total (nu-fission / flux) 0.00e+00 0.00e+00 +0 6 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +3 6 1 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +2 6 1 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +1 6 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 6 2 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +1 6 1 total nu-fission 0.00e+00 0.00e+00 +0 6 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 7 1 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +0 7 2 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 7 1 total (nu-fission / flux) 0.00e+00 0.00e+00 +0 7 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +3 7 1 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +2 7 1 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +1 7 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 7 2 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +1 7 1 total nu-fission 0.00e+00 0.00e+00 +0 7 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 8 1 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +0 8 2 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 8 1 total (nu-fission / flux) 0.00e+00 0.00e+00 +0 8 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +3 8 1 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +2 8 1 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +1 8 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 8 2 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +1 8 1 total nu-fission 0.00e+00 0.00e+00 +0 8 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 9 1 total ((total - scatter-1) / flux) 6.01e-01 7.49e-01 +0 9 2 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 9 1 total (nu-fission / flux) 0.00e+00 0.00e+00 +0 9 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +3 9 1 1 total ((nu-scatter-0 - scatter-1) / flux) 6.01e-01 7.49e-01 +2 9 1 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +1 9 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 9 2 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +1 9 1 total nu-fission 0.00e+00 0.00e+00 +0 9 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 10 1 total ((total - scatter-1) / flux) 2.36e-01 6.14e-01 +0 10 2 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 10 1 total (nu-fission / flux) 0.00e+00 0.00e+00 +0 10 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +3 10 1 1 total ((nu-scatter-0 - scatter-1) / flux) 2.36e-01 6.14e-01 +2 10 1 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +1 10 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 10 2 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +1 10 1 total nu-fission 0.00e+00 0.00e+00 +0 10 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 11 1 total ((total - scatter-1) / flux) 1.86e-01 6.32e-01 +0 11 2 total ((total - scatter-1) / flux) 9.46e-01 1.59e+00 material group in nuclide score mean std. dev. +1 11 1 total (nu-fission / flux) 0.00e+00 0.00e+00 +0 11 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +3 11 1 1 total ((nu-scatter-0 - scatter-1) / flux) 1.54e-01 5.98e-01 +2 11 1 2 total ((nu-scatter-0 - scatter-1) / flux) 3.19e-02 4.51e-02 +1 11 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 11 2 2 total ((nu-scatter-0 - scatter-1) / flux) 9.03e-01 1.53e+00 material group out nuclide score mean std. dev. +1 11 1 total nu-fission 0.00e+00 0.00e+00 +0 11 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +1 12 1 total ((total - scatter-1) / flux) 2.13e-01 2.71e-01 +0 12 2 total ((total - scatter-1) / flux) 1.39e+00 2.14e+00 material group in nuclide score mean std. dev. +1 12 1 total (nu-fission / flux) 0.00e+00 0.00e+00 +0 12 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +3 12 1 1 total ((nu-scatter-0 - scatter-1) / flux) 1.86e-01 2.58e-01 +2 12 1 2 total ((nu-scatter-0 - scatter-1) / flux) 2.72e-02 2.96e-02 +1 12 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 12 2 2 total ((nu-scatter-0 - scatter-1) / flux) 1.36e+00 2.09e+00 material group out nuclide score mean std. dev. +1 12 1 total nu-fission 0.00e+00 0.00e+00 +0 12 2 total nu-fission 0.00e+00 0.00e+00 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/inputs_true.dat b/tests/test_mgxs_library_nuclides/inputs_true.dat index 9436f03a03..5b7a83037e 100644 --- a/tests/test_mgxs_library_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_nuclides/inputs_true.dat @@ -1 +1 @@ -b035f783fa75ada619b0a58675913e318fef94e519c85cae6982f650d7655cb130f625572fde2058e005b490359180cb9d1e1095f5d35d41c9a0f8ff6e0dc3c1 \ No newline at end of file +f1c203fb7f0b141ee608d7bb9223aa5f7ab84966b6a80525879df730d19179f6c6a1a4bc7038d84e6b366b360f43a1ca17a0af8d02f96eb23e53b93a2445380e \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index 1455219645..99582fa7df 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -1,1971 +1,1971 @@ - material group in nuclide mean std. dev. -34 1 1 U-234 0.000173 0.000173 -35 1 1 U-235 0.010677 0.001889 -36 1 1 U-236 0.002390 0.001055 -37 1 1 U-238 0.213680 0.013272 -38 1 1 Np-237 0.000000 0.000000 -39 1 1 Pu-238 0.000000 0.000000 -40 1 1 Pu-239 0.002911 0.000639 -41 1 1 Pu-240 0.004426 0.000806 -42 1 1 Pu-241 0.000690 0.000387 -43 1 1 Pu-242 0.000000 0.000000 -44 1 1 Am-241 0.000173 0.000173 -45 1 1 Am-242m 0.000000 0.000000 -46 1 1 Am-243 0.000000 0.000000 -47 1 1 Cm-242 0.000000 0.000000 -48 1 1 Cm-243 0.000000 0.000000 -49 1 1 Cm-244 0.000000 0.000000 -50 1 1 Cm-245 0.000000 0.000000 -51 1 1 Mo-95 0.000000 0.000000 -52 1 1 Tc-99 0.000173 0.000173 -53 1 1 Ru-101 0.000238 0.000254 -54 1 1 Ru-103 0.000002 0.000243 -55 1 1 Ag-109 0.000000 0.000000 -56 1 1 Xe-135 0.000000 0.000000 -57 1 1 Cs-133 0.000347 0.000213 -58 1 1 Nd-143 0.000447 0.000292 -59 1 1 Nd-145 0.000564 0.000294 -60 1 1 Sm-147 0.000000 0.000000 -61 1 1 Sm-149 0.000000 0.000000 -62 1 1 Sm-150 0.000472 0.000239 -63 1 1 Sm-151 0.000000 0.000000 -64 1 1 Sm-152 0.000492 0.000352 -65 1 1 Eu-153 0.000173 0.000173 -66 1 1 Gd-155 0.000000 0.000000 -67 1 1 O-16 0.134715 0.009801 -0 1 2 U-234 0.000000 0.000000 -1 1 2 U-235 0.199907 0.007776 -2 1 2 U-236 0.001501 0.002037 -3 1 2 U-238 0.255355 0.029743 -4 1 2 Np-237 0.000000 0.000000 -5 1 2 Pu-238 0.000000 0.000000 -6 1 2 Pu-239 0.160378 0.011366 -7 1 2 Pu-240 0.007920 0.003710 -8 1 2 Pu-241 0.017820 0.003733 -9 1 2 Pu-242 0.000000 0.000000 -10 1 2 Am-241 0.000000 0.000000 -11 1 2 Am-242m 0.000000 0.000000 -12 1 2 Am-243 0.000000 0.000000 -13 1 2 Cm-242 0.000000 0.000000 -14 1 2 Cm-243 0.000000 0.000000 -15 1 2 Cm-244 0.000000 0.000000 -16 1 2 Cm-245 0.000000 0.000000 -17 1 2 Mo-95 0.000000 0.000000 -18 1 2 Tc-99 0.000000 0.000000 -19 1 2 Ru-101 0.000000 0.000000 -20 1 2 Ru-103 0.000000 0.000000 -21 1 2 Ag-109 0.000000 0.000000 -22 1 2 Xe-135 0.013860 0.003976 -23 1 2 Cs-133 0.000000 0.000000 -24 1 2 Nd-143 0.003960 0.002427 -25 1 2 Nd-145 0.000000 0.000000 -26 1 2 Sm-147 0.000000 0.000000 -27 1 2 Sm-149 0.001980 0.001981 -28 1 2 Sm-150 0.000000 0.000000 -29 1 2 Sm-151 0.001980 0.001981 -30 1 2 Sm-152 0.000000 0.000000 -31 1 2 Eu-153 0.000000 0.000000 -32 1 2 Gd-155 0.000000 0.000000 -33 1 2 O-16 0.196946 0.014729 material group in nuclide mean std. dev. -34 1 1 U-234 7.274440e-06 4.419477e-07 -35 1 1 U-235 9.587803e-03 5.936922e-04 -36 1 1 U-236 7.566099e-05 7.523935e-06 -37 1 1 U-238 7.178367e-03 6.505680e-04 -38 1 1 Np-237 1.315682e-05 8.036501e-07 -39 1 1 Pu-238 7.746151e-06 3.992835e-07 -40 1 1 Pu-239 3.805294e-03 3.637600e-04 -41 1 1 Pu-240 6.941319e-05 4.729737e-06 -42 1 1 Pu-241 1.033844e-03 9.083913e-05 -43 1 1 Pu-242 5.995332e-06 3.821721e-07 -44 1 1 Am-241 1.148585e-06 8.271648e-08 -45 1 1 Am-242m 1.100215e-06 6.159956e-08 -46 1 1 Am-243 8.323826e-07 5.841792e-08 -47 1 1 Cm-242 5.088970e-07 5.258007e-08 -48 1 1 Cm-243 2.245435e-07 1.459025e-08 -49 1 1 Cm-244 2.993206e-07 2.746129e-08 -50 1 1 Cm-245 3.063611e-07 3.057751e-08 -51 1 1 Mo-95 0.000000e+00 0.000000e+00 -52 1 1 Tc-99 0.000000e+00 0.000000e+00 -53 1 1 Ru-101 0.000000e+00 0.000000e+00 -54 1 1 Ru-103 0.000000e+00 0.000000e+00 -55 1 1 Ag-109 0.000000e+00 0.000000e+00 -56 1 1 Xe-135 0.000000e+00 0.000000e+00 -57 1 1 Cs-133 0.000000e+00 0.000000e+00 -58 1 1 Nd-143 0.000000e+00 0.000000e+00 -59 1 1 Nd-145 0.000000e+00 0.000000e+00 -60 1 1 Sm-147 0.000000e+00 0.000000e+00 -61 1 1 Sm-149 0.000000e+00 0.000000e+00 -62 1 1 Sm-150 0.000000e+00 0.000000e+00 -63 1 1 Sm-151 0.000000e+00 0.000000e+00 -64 1 1 Sm-152 0.000000e+00 0.000000e+00 -65 1 1 Eu-153 0.000000e+00 0.000000e+00 -66 1 1 Gd-155 0.000000e+00 0.000000e+00 -67 1 1 O-16 0.000000e+00 0.000000e+00 -0 1 2 U-234 4.408576e-07 2.828309e-08 -1 1 2 U-235 3.768094e-01 2.445671e-02 -2 1 2 U-236 6.097538e-06 3.733038e-07 -3 1 2 U-238 5.353074e-07 3.310544e-08 -4 1 2 Np-237 2.702971e-07 2.098939e-08 -5 1 2 Pu-238 3.463109e-05 2.638394e-06 -6 1 2 Pu-239 2.889643e-01 1.376004e-02 -7 1 2 Pu-240 4.533642e-06 2.544289e-07 -8 1 2 Pu-241 4.809366e-02 2.778345e-03 -9 1 2 Pu-242 8.715325e-08 5.460893e-09 -10 1 2 Am-241 4.611736e-06 2.155039e-07 -11 1 2 Am-242m 1.428047e-04 8.436437e-06 -12 1 2 Am-243 7.883895e-08 4.734503e-09 -13 1 2 Cm-242 9.731025e-07 6.143750e-08 -14 1 2 Cm-243 1.825830e-06 1.074849e-07 -15 1 2 Cm-244 1.581823e-07 9.938064e-09 -16 1 2 Cm-245 1.213386e-05 8.812019e-07 -17 1 2 Mo-95 0.000000e+00 0.000000e+00 -18 1 2 Tc-99 0.000000e+00 0.000000e+00 -19 1 2 Ru-101 0.000000e+00 0.000000e+00 -20 1 2 Ru-103 0.000000e+00 0.000000e+00 -21 1 2 Ag-109 0.000000e+00 0.000000e+00 -22 1 2 Xe-135 0.000000e+00 0.000000e+00 -23 1 2 Cs-133 0.000000e+00 0.000000e+00 -24 1 2 Nd-143 0.000000e+00 0.000000e+00 -25 1 2 Nd-145 0.000000e+00 0.000000e+00 -26 1 2 Sm-147 0.000000e+00 0.000000e+00 -27 1 2 Sm-149 0.000000e+00 0.000000e+00 -28 1 2 Sm-150 0.000000e+00 0.000000e+00 -29 1 2 Sm-151 0.000000e+00 0.000000e+00 -30 1 2 Sm-152 0.000000e+00 0.000000e+00 -31 1 2 Eu-153 0.000000e+00 0.000000e+00 -32 1 2 Gd-155 0.000000e+00 0.000000e+00 -33 1 2 O-16 0.000000e+00 0.000000e+00 material group in group out nuclide mean std. dev. -102 1 1 1 U-234 0.000000 0.000000 -103 1 1 1 U-235 0.003226 0.001139 -104 1 1 1 U-236 0.001697 0.000923 -105 1 1 1 U-238 0.194620 0.013297 -106 1 1 1 Np-237 0.000000 0.000000 -107 1 1 1 Pu-238 0.000000 0.000000 -108 1 1 1 Pu-239 0.001005 0.000477 -109 1 1 1 Pu-240 0.001307 0.000295 -110 1 1 1 Pu-241 0.000344 0.000244 -111 1 1 1 Pu-242 0.000000 0.000000 -112 1 1 1 Am-241 0.000000 0.000000 -113 1 1 1 Am-242m 0.000000 0.000000 -114 1 1 1 Am-243 0.000000 0.000000 -115 1 1 1 Cm-242 0.000000 0.000000 -116 1 1 1 Cm-243 0.000000 0.000000 -117 1 1 1 Cm-244 0.000000 0.000000 -118 1 1 1 Cm-245 0.000000 0.000000 -119 1 1 1 Mo-95 0.000000 0.000000 -120 1 1 1 Tc-99 0.000000 0.000000 -121 1 1 1 Ru-101 0.000238 0.000254 -122 1 1 1 Ru-103 0.000002 0.000243 -123 1 1 1 Ag-109 0.000000 0.000000 -124 1 1 1 Xe-135 0.000000 0.000000 -125 1 1 1 Cs-133 0.000000 0.000000 -126 1 1 1 Nd-143 0.000447 0.000292 -127 1 1 1 Nd-145 0.000564 0.000294 -128 1 1 1 Sm-147 0.000000 0.000000 -129 1 1 1 Sm-149 0.000000 0.000000 -130 1 1 1 Sm-150 0.000299 0.000238 -131 1 1 1 Sm-151 0.000000 0.000000 -132 1 1 1 Sm-152 0.000492 0.000352 -133 1 1 1 Eu-153 0.000000 0.000000 -134 1 1 1 Gd-155 0.000000 0.000000 -135 1 1 1 O-16 0.133156 0.009821 -68 1 1 2 U-234 0.000000 0.000000 -69 1 1 2 U-235 0.000000 0.000000 -70 1 1 2 U-236 0.000000 0.000000 -71 1 1 2 U-238 0.000173 0.000173 -72 1 1 2 Np-237 0.000000 0.000000 -73 1 1 2 Pu-238 0.000000 0.000000 -74 1 1 2 Pu-239 0.000000 0.000000 -75 1 1 2 Pu-240 0.000000 0.000000 -76 1 1 2 Pu-241 0.000000 0.000000 -77 1 1 2 Pu-242 0.000000 0.000000 -78 1 1 2 Am-241 0.000000 0.000000 -79 1 1 2 Am-242m 0.000000 0.000000 -80 1 1 2 Am-243 0.000000 0.000000 -81 1 1 2 Cm-242 0.000000 0.000000 -82 1 1 2 Cm-243 0.000000 0.000000 -83 1 1 2 Cm-244 0.000000 0.000000 -84 1 1 2 Cm-245 0.000000 0.000000 -85 1 1 2 Mo-95 0.000000 0.000000 -86 1 1 2 Tc-99 0.000000 0.000000 -87 1 1 2 Ru-101 0.000000 0.000000 -88 1 1 2 Ru-103 0.000000 0.000000 -89 1 1 2 Ag-109 0.000000 0.000000 -90 1 1 2 Xe-135 0.000000 0.000000 -91 1 1 2 Cs-133 0.000000 0.000000 -92 1 1 2 Nd-143 0.000000 0.000000 -93 1 1 2 Nd-145 0.000000 0.000000 -94 1 1 2 Sm-147 0.000000 0.000000 -95 1 1 2 Sm-149 0.000000 0.000000 -96 1 1 2 Sm-150 0.000000 0.000000 -97 1 1 2 Sm-151 0.000000 0.000000 -98 1 1 2 Sm-152 0.000000 0.000000 -99 1 1 2 Eu-153 0.000000 0.000000 -100 1 1 2 Gd-155 0.000000 0.000000 -101 1 1 2 O-16 0.001386 0.000446 -34 1 2 1 U-234 0.000000 0.000000 -35 1 2 1 U-235 0.000000 0.000000 -36 1 2 1 U-236 0.000000 0.000000 -37 1 2 1 U-238 0.000000 0.000000 -38 1 2 1 Np-237 0.000000 0.000000 -39 1 2 1 Pu-238 0.000000 0.000000 -40 1 2 1 Pu-239 0.000000 0.000000 -41 1 2 1 Pu-240 0.000000 0.000000 -42 1 2 1 Pu-241 0.000000 0.000000 -43 1 2 1 Pu-242 0.000000 0.000000 -44 1 2 1 Am-241 0.000000 0.000000 -45 1 2 1 Am-242m 0.000000 0.000000 -46 1 2 1 Am-243 0.000000 0.000000 -47 1 2 1 Cm-242 0.000000 0.000000 -48 1 2 1 Cm-243 0.000000 0.000000 -49 1 2 1 Cm-244 0.000000 0.000000 -50 1 2 1 Cm-245 0.000000 0.000000 -51 1 2 1 Mo-95 0.000000 0.000000 -52 1 2 1 Tc-99 0.000000 0.000000 -53 1 2 1 Ru-101 0.000000 0.000000 -54 1 2 1 Ru-103 0.000000 0.000000 -55 1 2 1 Ag-109 0.000000 0.000000 -56 1 2 1 Xe-135 0.000000 0.000000 -57 1 2 1 Cs-133 0.000000 0.000000 -58 1 2 1 Nd-143 0.000000 0.000000 -59 1 2 1 Nd-145 0.000000 0.000000 -60 1 2 1 Sm-147 0.000000 0.000000 -61 1 2 1 Sm-149 0.000000 0.000000 -62 1 2 1 Sm-150 0.000000 0.000000 -63 1 2 1 Sm-151 0.000000 0.000000 -64 1 2 1 Sm-152 0.000000 0.000000 -65 1 2 1 Eu-153 0.000000 0.000000 -66 1 2 1 Gd-155 0.000000 0.000000 -67 1 2 1 O-16 0.000000 0.000000 -0 1 2 2 U-234 0.000000 0.000000 -1 1 2 2 U-235 0.003889 0.003962 -2 1 2 2 U-236 0.001501 0.002037 -3 1 2 2 U-238 0.219715 0.025984 -4 1 2 2 Np-237 0.000000 0.000000 -5 1 2 2 Pu-238 0.000000 0.000000 -6 1 2 2 Pu-239 0.000000 0.000000 -7 1 2 2 Pu-240 0.000000 0.000000 -8 1 2 2 Pu-241 0.000000 0.000000 -9 1 2 2 Pu-242 0.000000 0.000000 -10 1 2 2 Am-241 0.000000 0.000000 -11 1 2 2 Am-242m 0.000000 0.000000 -12 1 2 2 Am-243 0.000000 0.000000 -13 1 2 2 Cm-242 0.000000 0.000000 -14 1 2 2 Cm-243 0.000000 0.000000 -15 1 2 2 Cm-244 0.000000 0.000000 -16 1 2 2 Cm-245 0.000000 0.000000 -17 1 2 2 Mo-95 0.000000 0.000000 -18 1 2 2 Tc-99 0.000000 0.000000 -19 1 2 2 Ru-101 0.000000 0.000000 -20 1 2 2 Ru-103 0.000000 0.000000 -21 1 2 2 Ag-109 0.000000 0.000000 -22 1 2 2 Xe-135 0.000000 0.000000 -23 1 2 2 Cs-133 0.000000 0.000000 -24 1 2 2 Nd-143 0.000000 0.000000 -25 1 2 2 Nd-145 0.000000 0.000000 -26 1 2 2 Sm-147 0.000000 0.000000 -27 1 2 2 Sm-149 0.000000 0.000000 -28 1 2 2 Sm-150 0.000000 0.000000 -29 1 2 2 Sm-151 0.000000 0.000000 -30 1 2 2 Sm-152 0.000000 0.000000 -31 1 2 2 Eu-153 0.000000 0.000000 -32 1 2 2 Gd-155 0.000000 0.000000 -33 1 2 2 O-16 0.196946 0.014729 material group out nuclide mean std. dev. -34 1 1 U-234 0.0 0.000000 -35 1 1 U-235 1.0 0.066362 -36 1 1 U-236 0.0 0.000000 -37 1 1 U-238 1.0 0.093082 -38 1 1 Np-237 0.0 0.000000 -39 1 1 Pu-238 0.0 0.000000 -40 1 1 Pu-239 1.0 0.104567 -41 1 1 Pu-240 0.0 0.000000 -42 1 1 Pu-241 1.0 0.263696 -43 1 1 Pu-242 0.0 0.000000 -44 1 1 Am-241 0.0 0.000000 -45 1 1 Am-242m 0.0 0.000000 -46 1 1 Am-243 0.0 0.000000 -47 1 1 Cm-242 0.0 0.000000 -48 1 1 Cm-243 0.0 0.000000 -49 1 1 Cm-244 0.0 0.000000 -50 1 1 Cm-245 0.0 0.000000 -51 1 1 Mo-95 0.0 0.000000 -52 1 1 Tc-99 0.0 0.000000 -53 1 1 Ru-101 0.0 0.000000 -54 1 1 Ru-103 0.0 0.000000 -55 1 1 Ag-109 0.0 0.000000 -56 1 1 Xe-135 0.0 0.000000 -57 1 1 Cs-133 0.0 0.000000 -58 1 1 Nd-143 0.0 0.000000 -59 1 1 Nd-145 0.0 0.000000 -60 1 1 Sm-147 0.0 0.000000 -61 1 1 Sm-149 0.0 0.000000 -62 1 1 Sm-150 0.0 0.000000 -63 1 1 Sm-151 0.0 0.000000 -64 1 1 Sm-152 0.0 0.000000 -65 1 1 Eu-153 0.0 0.000000 -66 1 1 Gd-155 0.0 0.000000 -67 1 1 O-16 0.0 0.000000 -0 1 2 U-234 0.0 0.000000 -1 1 2 U-235 0.0 0.000000 -2 1 2 U-236 0.0 0.000000 -3 1 2 U-238 0.0 0.000000 -4 1 2 Np-237 0.0 0.000000 -5 1 2 Pu-238 0.0 0.000000 -6 1 2 Pu-239 0.0 0.000000 -7 1 2 Pu-240 0.0 0.000000 -8 1 2 Pu-241 0.0 0.000000 -9 1 2 Pu-242 0.0 0.000000 -10 1 2 Am-241 0.0 0.000000 -11 1 2 Am-242m 0.0 0.000000 -12 1 2 Am-243 0.0 0.000000 -13 1 2 Cm-242 0.0 0.000000 -14 1 2 Cm-243 0.0 0.000000 -15 1 2 Cm-244 0.0 0.000000 -16 1 2 Cm-245 0.0 0.000000 -17 1 2 Mo-95 0.0 0.000000 -18 1 2 Tc-99 0.0 0.000000 -19 1 2 Ru-101 0.0 0.000000 -20 1 2 Ru-103 0.0 0.000000 -21 1 2 Ag-109 0.0 0.000000 -22 1 2 Xe-135 0.0 0.000000 -23 1 2 Cs-133 0.0 0.000000 -24 1 2 Nd-143 0.0 0.000000 -25 1 2 Nd-145 0.0 0.000000 -26 1 2 Sm-147 0.0 0.000000 -27 1 2 Sm-149 0.0 0.000000 -28 1 2 Sm-150 0.0 0.000000 -29 1 2 Sm-151 0.0 0.000000 -30 1 2 Sm-152 0.0 0.000000 -31 1 2 Eu-153 0.0 0.000000 -32 1 2 Gd-155 0.0 0.000000 -33 1 2 O-16 0.0 0.000000 material group in nuclide mean std. dev. -5 2 1 Zr-90 0.104734 0.008915 -6 2 1 Zr-91 0.036155 0.003735 -7 2 1 Zr-92 0.042422 0.003029 -8 2 1 Zr-94 0.046148 0.006251 -9 2 1 Zr-96 0.007794 0.001536 -0 2 2 Zr-90 0.121688 0.034934 -1 2 2 Zr-91 0.061792 0.024317 -2 2 2 Zr-92 0.041633 0.016323 -3 2 2 Zr-94 0.060818 0.021483 -4 2 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -5 2 1 Zr-90 0.0 0.0 -6 2 1 Zr-91 0.0 0.0 -7 2 1 Zr-92 0.0 0.0 -8 2 1 Zr-94 0.0 0.0 -9 2 1 Zr-96 0.0 0.0 -0 2 2 Zr-90 0.0 0.0 -1 2 2 Zr-91 0.0 0.0 -2 2 2 Zr-92 0.0 0.0 -3 2 2 Zr-94 0.0 0.0 -4 2 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. -15 2 1 1 Zr-90 0.104734 0.008915 -16 2 1 1 Zr-91 0.036155 0.003735 -17 2 1 1 Zr-92 0.042422 0.003029 -18 2 1 1 Zr-94 0.046148 0.006251 -19 2 1 1 Zr-96 0.007794 0.001536 -10 2 1 2 Zr-90 0.000000 0.000000 -11 2 1 2 Zr-91 0.000000 0.000000 -12 2 1 2 Zr-92 0.000000 0.000000 -13 2 1 2 Zr-94 0.000000 0.000000 -14 2 1 2 Zr-96 0.000000 0.000000 -5 2 2 1 Zr-90 0.000000 0.000000 -6 2 2 1 Zr-91 0.000000 0.000000 -7 2 2 1 Zr-92 0.000000 0.000000 -8 2 2 1 Zr-94 0.000000 0.000000 -9 2 2 1 Zr-96 0.000000 0.000000 -0 2 2 2 Zr-90 0.121688 0.034934 -1 2 2 2 Zr-91 0.061792 0.024317 -2 2 2 2 Zr-92 0.041633 0.016323 -3 2 2 2 Zr-94 0.060818 0.021483 -4 2 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. -5 2 1 Zr-90 0.0 0.0 -6 2 1 Zr-91 0.0 0.0 -7 2 1 Zr-92 0.0 0.0 -8 2 1 Zr-94 0.0 0.0 -9 2 1 Zr-96 0.0 0.0 -0 2 2 Zr-90 0.0 0.0 -1 2 2 Zr-91 0.0 0.0 -2 2 2 Zr-92 0.0 0.0 -3 2 2 Zr-94 0.0 0.0 -4 2 2 Zr-96 0.0 0.0 material group in nuclide mean std. dev. -4 3 1 H-1 0.207103 0.023028 -5 3 1 O-16 0.079282 0.005197 -6 3 1 B-10 0.000521 0.000244 -7 3 1 B-11 0.000000 0.000000 -0 3 2 H-1 1.283344 0.250946 -1 3 2 O-16 0.085363 0.014001 -2 3 2 B-10 0.049249 0.008232 -3 3 2 B-11 0.000195 0.001527 material group in nuclide mean std. dev. -4 3 1 H-1 0.0 0.0 -5 3 1 O-16 0.0 0.0 -6 3 1 B-10 0.0 0.0 -7 3 1 B-11 0.0 0.0 -0 3 2 H-1 0.0 0.0 -1 3 2 O-16 0.0 0.0 -2 3 2 B-10 0.0 0.0 -3 3 2 B-11 0.0 0.0 material group in group out nuclide mean std. dev. -12 3 1 1 H-1 0.181306 0.022102 -13 3 1 1 O-16 0.078631 0.005044 -14 3 1 1 B-10 0.000000 0.000000 -15 3 1 1 B-11 0.000000 0.000000 -8 3 1 2 H-1 0.025666 0.001582 -9 3 1 2 O-16 0.000521 0.000131 -10 3 1 2 B-10 0.000000 0.000000 -11 3 1 2 B-11 0.000000 0.000000 -4 3 2 1 H-1 0.000000 0.000000 -5 3 2 1 O-16 0.000000 0.000000 -6 3 2 1 B-10 0.000000 0.000000 -7 3 2 1 B-11 0.000000 0.000000 -0 3 2 2 H-1 1.273963 0.250623 -1 3 2 2 O-16 0.085363 0.014001 -2 3 2 2 B-10 0.000000 0.000000 -3 3 2 2 B-11 0.000195 0.001527 material group out nuclide mean std. dev. -4 3 1 H-1 0.0 0.0 -5 3 1 O-16 0.0 0.0 -6 3 1 B-10 0.0 0.0 -7 3 1 B-11 0.0 0.0 -0 3 2 H-1 0.0 0.0 -1 3 2 O-16 0.0 0.0 -2 3 2 B-10 0.0 0.0 -3 3 2 B-11 0.0 0.0 material group in nuclide mean std. dev. -4 4 1 H-1 0.175242 0.053715 -5 4 1 O-16 0.066545 0.010083 -6 4 1 B-10 0.000570 0.000352 -7 4 1 B-11 0.000089 0.000346 -0 4 2 H-1 1.142895 0.365140 -1 4 2 O-16 0.085141 0.028073 -2 4 2 B-10 0.025923 0.007276 -3 4 2 B-11 0.000000 0.000000 material group in nuclide mean std. dev. -4 4 1 H-1 0.0 0.0 -5 4 1 O-16 0.0 0.0 -6 4 1 B-10 0.0 0.0 -7 4 1 B-11 0.0 0.0 -0 4 2 H-1 0.0 0.0 -1 4 2 O-16 0.0 0.0 -2 4 2 B-10 0.0 0.0 -3 4 2 B-11 0.0 0.0 material group in group out nuclide mean std. dev. -12 4 1 1 H-1 0.151295 0.051491 -13 4 1 1 O-16 0.066545 0.010083 -14 4 1 1 B-10 0.000000 0.000000 -15 4 1 1 B-11 0.000089 0.000346 -8 4 1 2 H-1 0.023662 0.003083 -9 4 1 2 O-16 0.000000 0.000000 -10 4 1 2 B-10 0.000000 0.000000 -11 4 1 2 B-11 0.000000 0.000000 -4 4 2 1 H-1 0.000000 0.000000 -5 4 2 1 O-16 0.000000 0.000000 -6 4 2 1 B-10 0.000000 0.000000 -7 4 2 1 B-11 0.000000 0.000000 -0 4 2 2 H-1 1.129933 0.361681 -1 4 2 2 O-16 0.085141 0.028073 -2 4 2 2 B-10 0.000000 0.000000 -3 4 2 2 B-11 0.000000 0.000000 material group out nuclide mean std. dev. -4 4 1 H-1 0.0 0.0 -5 4 1 O-16 0.0 0.0 -6 4 1 B-10 0.0 0.0 -7 4 1 B-11 0.0 0.0 -0 4 2 H-1 0.0 0.0 -1 4 2 O-16 0.0 0.0 -2 4 2 B-10 0.0 0.0 -3 4 2 B-11 0.0 0.0 material group in nuclide mean std. dev. -27 5 1 Fe-54 0.0 0.0 -28 5 1 Fe-56 0.0 0.0 -29 5 1 Fe-57 0.0 0.0 -30 5 1 Fe-58 0.0 0.0 -31 5 1 Ni-58 0.0 0.0 -32 5 1 Ni-60 0.0 0.0 -33 5 1 Ni-61 0.0 0.0 -34 5 1 Ni-62 0.0 0.0 -35 5 1 Ni-64 0.0 0.0 -36 5 1 Mn-55 0.0 0.0 -37 5 1 Mo-92 0.0 0.0 -38 5 1 Mo-94 0.0 0.0 -39 5 1 Mo-95 0.0 0.0 -40 5 1 Mo-96 0.0 0.0 -41 5 1 Mo-97 0.0 0.0 -42 5 1 Mo-98 0.0 0.0 -43 5 1 Mo-100 0.0 0.0 -44 5 1 Si-28 0.0 0.0 -45 5 1 Si-29 0.0 0.0 -46 5 1 Si-30 0.0 0.0 -47 5 1 Cr-50 0.0 0.0 -48 5 1 Cr-52 0.0 0.0 -49 5 1 Cr-53 0.0 0.0 -50 5 1 Cr-54 0.0 0.0 -51 5 1 C-Nat 0.0 0.0 -52 5 1 Cu-63 0.0 0.0 -53 5 1 Cu-65 0.0 0.0 -0 5 2 Fe-54 0.0 0.0 -1 5 2 Fe-56 0.0 0.0 -2 5 2 Fe-57 0.0 0.0 -3 5 2 Fe-58 0.0 0.0 -4 5 2 Ni-58 0.0 0.0 -5 5 2 Ni-60 0.0 0.0 -6 5 2 Ni-61 0.0 0.0 -7 5 2 Ni-62 0.0 0.0 -8 5 2 Ni-64 0.0 0.0 -9 5 2 Mn-55 0.0 0.0 -10 5 2 Mo-92 0.0 0.0 -11 5 2 Mo-94 0.0 0.0 -12 5 2 Mo-95 0.0 0.0 -13 5 2 Mo-96 0.0 0.0 -14 5 2 Mo-97 0.0 0.0 -15 5 2 Mo-98 0.0 0.0 -16 5 2 Mo-100 0.0 0.0 -17 5 2 Si-28 0.0 0.0 -18 5 2 Si-29 0.0 0.0 -19 5 2 Si-30 0.0 0.0 -20 5 2 Cr-50 0.0 0.0 -21 5 2 Cr-52 0.0 0.0 -22 5 2 Cr-53 0.0 0.0 -23 5 2 Cr-54 0.0 0.0 -24 5 2 C-Nat 0.0 0.0 -25 5 2 Cu-63 0.0 0.0 -26 5 2 Cu-65 0.0 0.0 material group in nuclide mean std. dev. -27 5 1 Fe-54 0.0 0.0 -28 5 1 Fe-56 0.0 0.0 -29 5 1 Fe-57 0.0 0.0 -30 5 1 Fe-58 0.0 0.0 -31 5 1 Ni-58 0.0 0.0 -32 5 1 Ni-60 0.0 0.0 -33 5 1 Ni-61 0.0 0.0 -34 5 1 Ni-62 0.0 0.0 -35 5 1 Ni-64 0.0 0.0 -36 5 1 Mn-55 0.0 0.0 -37 5 1 Mo-92 0.0 0.0 -38 5 1 Mo-94 0.0 0.0 -39 5 1 Mo-95 0.0 0.0 -40 5 1 Mo-96 0.0 0.0 -41 5 1 Mo-97 0.0 0.0 -42 5 1 Mo-98 0.0 0.0 -43 5 1 Mo-100 0.0 0.0 -44 5 1 Si-28 0.0 0.0 -45 5 1 Si-29 0.0 0.0 -46 5 1 Si-30 0.0 0.0 -47 5 1 Cr-50 0.0 0.0 -48 5 1 Cr-52 0.0 0.0 -49 5 1 Cr-53 0.0 0.0 -50 5 1 Cr-54 0.0 0.0 -51 5 1 C-Nat 0.0 0.0 -52 5 1 Cu-63 0.0 0.0 -53 5 1 Cu-65 0.0 0.0 -0 5 2 Fe-54 0.0 0.0 -1 5 2 Fe-56 0.0 0.0 -2 5 2 Fe-57 0.0 0.0 -3 5 2 Fe-58 0.0 0.0 -4 5 2 Ni-58 0.0 0.0 -5 5 2 Ni-60 0.0 0.0 -6 5 2 Ni-61 0.0 0.0 -7 5 2 Ni-62 0.0 0.0 -8 5 2 Ni-64 0.0 0.0 -9 5 2 Mn-55 0.0 0.0 -10 5 2 Mo-92 0.0 0.0 -11 5 2 Mo-94 0.0 0.0 -12 5 2 Mo-95 0.0 0.0 -13 5 2 Mo-96 0.0 0.0 -14 5 2 Mo-97 0.0 0.0 -15 5 2 Mo-98 0.0 0.0 -16 5 2 Mo-100 0.0 0.0 -17 5 2 Si-28 0.0 0.0 -18 5 2 Si-29 0.0 0.0 -19 5 2 Si-30 0.0 0.0 -20 5 2 Cr-50 0.0 0.0 -21 5 2 Cr-52 0.0 0.0 -22 5 2 Cr-53 0.0 0.0 -23 5 2 Cr-54 0.0 0.0 -24 5 2 C-Nat 0.0 0.0 -25 5 2 Cu-63 0.0 0.0 -26 5 2 Cu-65 0.0 0.0 material group in group out nuclide mean std. dev. -81 5 1 1 Fe-54 0.0 0.0 -82 5 1 1 Fe-56 0.0 0.0 -83 5 1 1 Fe-57 0.0 0.0 -84 5 1 1 Fe-58 0.0 0.0 -85 5 1 1 Ni-58 0.0 0.0 -86 5 1 1 Ni-60 0.0 0.0 -87 5 1 1 Ni-61 0.0 0.0 -88 5 1 1 Ni-62 0.0 0.0 -89 5 1 1 Ni-64 0.0 0.0 -90 5 1 1 Mn-55 0.0 0.0 -91 5 1 1 Mo-92 0.0 0.0 -92 5 1 1 Mo-94 0.0 0.0 -93 5 1 1 Mo-95 0.0 0.0 -94 5 1 1 Mo-96 0.0 0.0 -95 5 1 1 Mo-97 0.0 0.0 -96 5 1 1 Mo-98 0.0 0.0 -97 5 1 1 Mo-100 0.0 0.0 -98 5 1 1 Si-28 0.0 0.0 -99 5 1 1 Si-29 0.0 0.0 -100 5 1 1 Si-30 0.0 0.0 -101 5 1 1 Cr-50 0.0 0.0 -102 5 1 1 Cr-52 0.0 0.0 -103 5 1 1 Cr-53 0.0 0.0 -104 5 1 1 Cr-54 0.0 0.0 -105 5 1 1 C-Nat 0.0 0.0 -106 5 1 1 Cu-63 0.0 0.0 -107 5 1 1 Cu-65 0.0 0.0 -54 5 1 2 Fe-54 0.0 0.0 -55 5 1 2 Fe-56 0.0 0.0 -56 5 1 2 Fe-57 0.0 0.0 -57 5 1 2 Fe-58 0.0 0.0 -58 5 1 2 Ni-58 0.0 0.0 -59 5 1 2 Ni-60 0.0 0.0 -60 5 1 2 Ni-61 0.0 0.0 -61 5 1 2 Ni-62 0.0 0.0 -62 5 1 2 Ni-64 0.0 0.0 -63 5 1 2 Mn-55 0.0 0.0 -64 5 1 2 Mo-92 0.0 0.0 -65 5 1 2 Mo-94 0.0 0.0 -66 5 1 2 Mo-95 0.0 0.0 -67 5 1 2 Mo-96 0.0 0.0 -68 5 1 2 Mo-97 0.0 0.0 -69 5 1 2 Mo-98 0.0 0.0 -70 5 1 2 Mo-100 0.0 0.0 -71 5 1 2 Si-28 0.0 0.0 -72 5 1 2 Si-29 0.0 0.0 -73 5 1 2 Si-30 0.0 0.0 -74 5 1 2 Cr-50 0.0 0.0 -75 5 1 2 Cr-52 0.0 0.0 -76 5 1 2 Cr-53 0.0 0.0 -77 5 1 2 Cr-54 0.0 0.0 -78 5 1 2 C-Nat 0.0 0.0 -79 5 1 2 Cu-63 0.0 0.0 -80 5 1 2 Cu-65 0.0 0.0 -27 5 2 1 Fe-54 0.0 0.0 -28 5 2 1 Fe-56 0.0 0.0 -29 5 2 1 Fe-57 0.0 0.0 -30 5 2 1 Fe-58 0.0 0.0 -31 5 2 1 Ni-58 0.0 0.0 -32 5 2 1 Ni-60 0.0 0.0 -33 5 2 1 Ni-61 0.0 0.0 -34 5 2 1 Ni-62 0.0 0.0 -35 5 2 1 Ni-64 0.0 0.0 -36 5 2 1 Mn-55 0.0 0.0 -37 5 2 1 Mo-92 0.0 0.0 -38 5 2 1 Mo-94 0.0 0.0 -39 5 2 1 Mo-95 0.0 0.0 -40 5 2 1 Mo-96 0.0 0.0 -41 5 2 1 Mo-97 0.0 0.0 -42 5 2 1 Mo-98 0.0 0.0 -43 5 2 1 Mo-100 0.0 0.0 -44 5 2 1 Si-28 0.0 0.0 -45 5 2 1 Si-29 0.0 0.0 -46 5 2 1 Si-30 0.0 0.0 -47 5 2 1 Cr-50 0.0 0.0 -48 5 2 1 Cr-52 0.0 0.0 -49 5 2 1 Cr-53 0.0 0.0 -50 5 2 1 Cr-54 0.0 0.0 -51 5 2 1 C-Nat 0.0 0.0 -52 5 2 1 Cu-63 0.0 0.0 -53 5 2 1 Cu-65 0.0 0.0 -0 5 2 2 Fe-54 0.0 0.0 -1 5 2 2 Fe-56 0.0 0.0 -2 5 2 2 Fe-57 0.0 0.0 -3 5 2 2 Fe-58 0.0 0.0 -4 5 2 2 Ni-58 0.0 0.0 -5 5 2 2 Ni-60 0.0 0.0 -6 5 2 2 Ni-61 0.0 0.0 -7 5 2 2 Ni-62 0.0 0.0 -8 5 2 2 Ni-64 0.0 0.0 -9 5 2 2 Mn-55 0.0 0.0 -10 5 2 2 Mo-92 0.0 0.0 -11 5 2 2 Mo-94 0.0 0.0 -12 5 2 2 Mo-95 0.0 0.0 -13 5 2 2 Mo-96 0.0 0.0 -14 5 2 2 Mo-97 0.0 0.0 -15 5 2 2 Mo-98 0.0 0.0 -16 5 2 2 Mo-100 0.0 0.0 -17 5 2 2 Si-28 0.0 0.0 -18 5 2 2 Si-29 0.0 0.0 -19 5 2 2 Si-30 0.0 0.0 -20 5 2 2 Cr-50 0.0 0.0 -21 5 2 2 Cr-52 0.0 0.0 -22 5 2 2 Cr-53 0.0 0.0 -23 5 2 2 Cr-54 0.0 0.0 -24 5 2 2 C-Nat 0.0 0.0 -25 5 2 2 Cu-63 0.0 0.0 -26 5 2 2 Cu-65 0.0 0.0 material group out nuclide mean std. dev. -27 5 1 Fe-54 0.0 0.0 -28 5 1 Fe-56 0.0 0.0 -29 5 1 Fe-57 0.0 0.0 -30 5 1 Fe-58 0.0 0.0 -31 5 1 Ni-58 0.0 0.0 -32 5 1 Ni-60 0.0 0.0 -33 5 1 Ni-61 0.0 0.0 -34 5 1 Ni-62 0.0 0.0 -35 5 1 Ni-64 0.0 0.0 -36 5 1 Mn-55 0.0 0.0 -37 5 1 Mo-92 0.0 0.0 -38 5 1 Mo-94 0.0 0.0 -39 5 1 Mo-95 0.0 0.0 -40 5 1 Mo-96 0.0 0.0 -41 5 1 Mo-97 0.0 0.0 -42 5 1 Mo-98 0.0 0.0 -43 5 1 Mo-100 0.0 0.0 -44 5 1 Si-28 0.0 0.0 -45 5 1 Si-29 0.0 0.0 -46 5 1 Si-30 0.0 0.0 -47 5 1 Cr-50 0.0 0.0 -48 5 1 Cr-52 0.0 0.0 -49 5 1 Cr-53 0.0 0.0 -50 5 1 Cr-54 0.0 0.0 -51 5 1 C-Nat 0.0 0.0 -52 5 1 Cu-63 0.0 0.0 -53 5 1 Cu-65 0.0 0.0 -0 5 2 Fe-54 0.0 0.0 -1 5 2 Fe-56 0.0 0.0 -2 5 2 Fe-57 0.0 0.0 -3 5 2 Fe-58 0.0 0.0 -4 5 2 Ni-58 0.0 0.0 -5 5 2 Ni-60 0.0 0.0 -6 5 2 Ni-61 0.0 0.0 -7 5 2 Ni-62 0.0 0.0 -8 5 2 Ni-64 0.0 0.0 -9 5 2 Mn-55 0.0 0.0 -10 5 2 Mo-92 0.0 0.0 -11 5 2 Mo-94 0.0 0.0 -12 5 2 Mo-95 0.0 0.0 -13 5 2 Mo-96 0.0 0.0 -14 5 2 Mo-97 0.0 0.0 -15 5 2 Mo-98 0.0 0.0 -16 5 2 Mo-100 0.0 0.0 -17 5 2 Si-28 0.0 0.0 -18 5 2 Si-29 0.0 0.0 -19 5 2 Si-30 0.0 0.0 -20 5 2 Cr-50 0.0 0.0 -21 5 2 Cr-52 0.0 0.0 -22 5 2 Cr-53 0.0 0.0 -23 5 2 Cr-54 0.0 0.0 -24 5 2 C-Nat 0.0 0.0 -25 5 2 Cu-63 0.0 0.0 -26 5 2 Cu-65 0.0 0.0 material group in nuclide mean std. dev. -21 6 1 H-1 0.0 0.0 -22 6 1 O-16 0.0 0.0 -23 6 1 B-10 0.0 0.0 -24 6 1 B-11 0.0 0.0 -25 6 1 Fe-54 0.0 0.0 -26 6 1 Fe-56 0.0 0.0 -27 6 1 Fe-57 0.0 0.0 -28 6 1 Fe-58 0.0 0.0 -29 6 1 Ni-58 0.0 0.0 -30 6 1 Ni-60 0.0 0.0 -31 6 1 Ni-61 0.0 0.0 -32 6 1 Ni-62 0.0 0.0 -33 6 1 Ni-64 0.0 0.0 -34 6 1 Mn-55 0.0 0.0 -35 6 1 Si-28 0.0 0.0 -36 6 1 Si-29 0.0 0.0 -37 6 1 Si-30 0.0 0.0 -38 6 1 Cr-50 0.0 0.0 -39 6 1 Cr-52 0.0 0.0 -40 6 1 Cr-53 0.0 0.0 -41 6 1 Cr-54 0.0 0.0 -0 6 2 H-1 0.0 0.0 -1 6 2 O-16 0.0 0.0 -2 6 2 B-10 0.0 0.0 -3 6 2 B-11 0.0 0.0 -4 6 2 Fe-54 0.0 0.0 -5 6 2 Fe-56 0.0 0.0 -6 6 2 Fe-57 0.0 0.0 -7 6 2 Fe-58 0.0 0.0 -8 6 2 Ni-58 0.0 0.0 -9 6 2 Ni-60 0.0 0.0 -10 6 2 Ni-61 0.0 0.0 -11 6 2 Ni-62 0.0 0.0 -12 6 2 Ni-64 0.0 0.0 -13 6 2 Mn-55 0.0 0.0 -14 6 2 Si-28 0.0 0.0 -15 6 2 Si-29 0.0 0.0 -16 6 2 Si-30 0.0 0.0 -17 6 2 Cr-50 0.0 0.0 -18 6 2 Cr-52 0.0 0.0 -19 6 2 Cr-53 0.0 0.0 -20 6 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 6 1 H-1 0.0 0.0 -22 6 1 O-16 0.0 0.0 -23 6 1 B-10 0.0 0.0 -24 6 1 B-11 0.0 0.0 -25 6 1 Fe-54 0.0 0.0 -26 6 1 Fe-56 0.0 0.0 -27 6 1 Fe-57 0.0 0.0 -28 6 1 Fe-58 0.0 0.0 -29 6 1 Ni-58 0.0 0.0 -30 6 1 Ni-60 0.0 0.0 -31 6 1 Ni-61 0.0 0.0 -32 6 1 Ni-62 0.0 0.0 -33 6 1 Ni-64 0.0 0.0 -34 6 1 Mn-55 0.0 0.0 -35 6 1 Si-28 0.0 0.0 -36 6 1 Si-29 0.0 0.0 -37 6 1 Si-30 0.0 0.0 -38 6 1 Cr-50 0.0 0.0 -39 6 1 Cr-52 0.0 0.0 -40 6 1 Cr-53 0.0 0.0 -41 6 1 Cr-54 0.0 0.0 -0 6 2 H-1 0.0 0.0 -1 6 2 O-16 0.0 0.0 -2 6 2 B-10 0.0 0.0 -3 6 2 B-11 0.0 0.0 -4 6 2 Fe-54 0.0 0.0 -5 6 2 Fe-56 0.0 0.0 -6 6 2 Fe-57 0.0 0.0 -7 6 2 Fe-58 0.0 0.0 -8 6 2 Ni-58 0.0 0.0 -9 6 2 Ni-60 0.0 0.0 -10 6 2 Ni-61 0.0 0.0 -11 6 2 Ni-62 0.0 0.0 -12 6 2 Ni-64 0.0 0.0 -13 6 2 Mn-55 0.0 0.0 -14 6 2 Si-28 0.0 0.0 -15 6 2 Si-29 0.0 0.0 -16 6 2 Si-30 0.0 0.0 -17 6 2 Cr-50 0.0 0.0 -18 6 2 Cr-52 0.0 0.0 -19 6 2 Cr-53 0.0 0.0 -20 6 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. -63 6 1 1 H-1 0.0 0.0 -64 6 1 1 O-16 0.0 0.0 -65 6 1 1 B-10 0.0 0.0 -66 6 1 1 B-11 0.0 0.0 -67 6 1 1 Fe-54 0.0 0.0 -68 6 1 1 Fe-56 0.0 0.0 -69 6 1 1 Fe-57 0.0 0.0 -70 6 1 1 Fe-58 0.0 0.0 -71 6 1 1 Ni-58 0.0 0.0 -72 6 1 1 Ni-60 0.0 0.0 -73 6 1 1 Ni-61 0.0 0.0 -74 6 1 1 Ni-62 0.0 0.0 -75 6 1 1 Ni-64 0.0 0.0 -76 6 1 1 Mn-55 0.0 0.0 -77 6 1 1 Si-28 0.0 0.0 -78 6 1 1 Si-29 0.0 0.0 -79 6 1 1 Si-30 0.0 0.0 -80 6 1 1 Cr-50 0.0 0.0 -81 6 1 1 Cr-52 0.0 0.0 -82 6 1 1 Cr-53 0.0 0.0 -83 6 1 1 Cr-54 0.0 0.0 -42 6 1 2 H-1 0.0 0.0 -43 6 1 2 O-16 0.0 0.0 -44 6 1 2 B-10 0.0 0.0 -45 6 1 2 B-11 0.0 0.0 -46 6 1 2 Fe-54 0.0 0.0 -47 6 1 2 Fe-56 0.0 0.0 -48 6 1 2 Fe-57 0.0 0.0 -49 6 1 2 Fe-58 0.0 0.0 -50 6 1 2 Ni-58 0.0 0.0 -51 6 1 2 Ni-60 0.0 0.0 -52 6 1 2 Ni-61 0.0 0.0 -53 6 1 2 Ni-62 0.0 0.0 -54 6 1 2 Ni-64 0.0 0.0 -55 6 1 2 Mn-55 0.0 0.0 -56 6 1 2 Si-28 0.0 0.0 -57 6 1 2 Si-29 0.0 0.0 -58 6 1 2 Si-30 0.0 0.0 -59 6 1 2 Cr-50 0.0 0.0 -60 6 1 2 Cr-52 0.0 0.0 -61 6 1 2 Cr-53 0.0 0.0 -62 6 1 2 Cr-54 0.0 0.0 -21 6 2 1 H-1 0.0 0.0 -22 6 2 1 O-16 0.0 0.0 -23 6 2 1 B-10 0.0 0.0 -24 6 2 1 B-11 0.0 0.0 -25 6 2 1 Fe-54 0.0 0.0 -26 6 2 1 Fe-56 0.0 0.0 -27 6 2 1 Fe-57 0.0 0.0 -28 6 2 1 Fe-58 0.0 0.0 -29 6 2 1 Ni-58 0.0 0.0 -30 6 2 1 Ni-60 0.0 0.0 -31 6 2 1 Ni-61 0.0 0.0 -32 6 2 1 Ni-62 0.0 0.0 -33 6 2 1 Ni-64 0.0 0.0 -34 6 2 1 Mn-55 0.0 0.0 -35 6 2 1 Si-28 0.0 0.0 -36 6 2 1 Si-29 0.0 0.0 -37 6 2 1 Si-30 0.0 0.0 -38 6 2 1 Cr-50 0.0 0.0 -39 6 2 1 Cr-52 0.0 0.0 -40 6 2 1 Cr-53 0.0 0.0 -41 6 2 1 Cr-54 0.0 0.0 -0 6 2 2 H-1 0.0 0.0 -1 6 2 2 O-16 0.0 0.0 -2 6 2 2 B-10 0.0 0.0 -3 6 2 2 B-11 0.0 0.0 -4 6 2 2 Fe-54 0.0 0.0 -5 6 2 2 Fe-56 0.0 0.0 -6 6 2 2 Fe-57 0.0 0.0 -7 6 2 2 Fe-58 0.0 0.0 -8 6 2 2 Ni-58 0.0 0.0 -9 6 2 2 Ni-60 0.0 0.0 -10 6 2 2 Ni-61 0.0 0.0 -11 6 2 2 Ni-62 0.0 0.0 -12 6 2 2 Ni-64 0.0 0.0 -13 6 2 2 Mn-55 0.0 0.0 -14 6 2 2 Si-28 0.0 0.0 -15 6 2 2 Si-29 0.0 0.0 -16 6 2 2 Si-30 0.0 0.0 -17 6 2 2 Cr-50 0.0 0.0 -18 6 2 2 Cr-52 0.0 0.0 -19 6 2 2 Cr-53 0.0 0.0 -20 6 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. -21 6 1 H-1 0.0 0.0 -22 6 1 O-16 0.0 0.0 -23 6 1 B-10 0.0 0.0 -24 6 1 B-11 0.0 0.0 -25 6 1 Fe-54 0.0 0.0 -26 6 1 Fe-56 0.0 0.0 -27 6 1 Fe-57 0.0 0.0 -28 6 1 Fe-58 0.0 0.0 -29 6 1 Ni-58 0.0 0.0 -30 6 1 Ni-60 0.0 0.0 -31 6 1 Ni-61 0.0 0.0 -32 6 1 Ni-62 0.0 0.0 -33 6 1 Ni-64 0.0 0.0 -34 6 1 Mn-55 0.0 0.0 -35 6 1 Si-28 0.0 0.0 -36 6 1 Si-29 0.0 0.0 -37 6 1 Si-30 0.0 0.0 -38 6 1 Cr-50 0.0 0.0 -39 6 1 Cr-52 0.0 0.0 -40 6 1 Cr-53 0.0 0.0 -41 6 1 Cr-54 0.0 0.0 -0 6 2 H-1 0.0 0.0 -1 6 2 O-16 0.0 0.0 -2 6 2 B-10 0.0 0.0 -3 6 2 B-11 0.0 0.0 -4 6 2 Fe-54 0.0 0.0 -5 6 2 Fe-56 0.0 0.0 -6 6 2 Fe-57 0.0 0.0 -7 6 2 Fe-58 0.0 0.0 -8 6 2 Ni-58 0.0 0.0 -9 6 2 Ni-60 0.0 0.0 -10 6 2 Ni-61 0.0 0.0 -11 6 2 Ni-62 0.0 0.0 -12 6 2 Ni-64 0.0 0.0 -13 6 2 Mn-55 0.0 0.0 -14 6 2 Si-28 0.0 0.0 -15 6 2 Si-29 0.0 0.0 -16 6 2 Si-30 0.0 0.0 -17 6 2 Cr-50 0.0 0.0 -18 6 2 Cr-52 0.0 0.0 -19 6 2 Cr-53 0.0 0.0 -20 6 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 7 1 H-1 0.0 0.0 -22 7 1 O-16 0.0 0.0 -23 7 1 B-10 0.0 0.0 -24 7 1 B-11 0.0 0.0 -25 7 1 Fe-54 0.0 0.0 -26 7 1 Fe-56 0.0 0.0 -27 7 1 Fe-57 0.0 0.0 -28 7 1 Fe-58 0.0 0.0 -29 7 1 Ni-58 0.0 0.0 -30 7 1 Ni-60 0.0 0.0 -31 7 1 Ni-61 0.0 0.0 -32 7 1 Ni-62 0.0 0.0 -33 7 1 Ni-64 0.0 0.0 -34 7 1 Mn-55 0.0 0.0 -35 7 1 Si-28 0.0 0.0 -36 7 1 Si-29 0.0 0.0 -37 7 1 Si-30 0.0 0.0 -38 7 1 Cr-50 0.0 0.0 -39 7 1 Cr-52 0.0 0.0 -40 7 1 Cr-53 0.0 0.0 -41 7 1 Cr-54 0.0 0.0 -0 7 2 H-1 0.0 0.0 -1 7 2 O-16 0.0 0.0 -2 7 2 B-10 0.0 0.0 -3 7 2 B-11 0.0 0.0 -4 7 2 Fe-54 0.0 0.0 -5 7 2 Fe-56 0.0 0.0 -6 7 2 Fe-57 0.0 0.0 -7 7 2 Fe-58 0.0 0.0 -8 7 2 Ni-58 0.0 0.0 -9 7 2 Ni-60 0.0 0.0 -10 7 2 Ni-61 0.0 0.0 -11 7 2 Ni-62 0.0 0.0 -12 7 2 Ni-64 0.0 0.0 -13 7 2 Mn-55 0.0 0.0 -14 7 2 Si-28 0.0 0.0 -15 7 2 Si-29 0.0 0.0 -16 7 2 Si-30 0.0 0.0 -17 7 2 Cr-50 0.0 0.0 -18 7 2 Cr-52 0.0 0.0 -19 7 2 Cr-53 0.0 0.0 -20 7 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 7 1 H-1 0.0 0.0 -22 7 1 O-16 0.0 0.0 -23 7 1 B-10 0.0 0.0 -24 7 1 B-11 0.0 0.0 -25 7 1 Fe-54 0.0 0.0 -26 7 1 Fe-56 0.0 0.0 -27 7 1 Fe-57 0.0 0.0 -28 7 1 Fe-58 0.0 0.0 -29 7 1 Ni-58 0.0 0.0 -30 7 1 Ni-60 0.0 0.0 -31 7 1 Ni-61 0.0 0.0 -32 7 1 Ni-62 0.0 0.0 -33 7 1 Ni-64 0.0 0.0 -34 7 1 Mn-55 0.0 0.0 -35 7 1 Si-28 0.0 0.0 -36 7 1 Si-29 0.0 0.0 -37 7 1 Si-30 0.0 0.0 -38 7 1 Cr-50 0.0 0.0 -39 7 1 Cr-52 0.0 0.0 -40 7 1 Cr-53 0.0 0.0 -41 7 1 Cr-54 0.0 0.0 -0 7 2 H-1 0.0 0.0 -1 7 2 O-16 0.0 0.0 -2 7 2 B-10 0.0 0.0 -3 7 2 B-11 0.0 0.0 -4 7 2 Fe-54 0.0 0.0 -5 7 2 Fe-56 0.0 0.0 -6 7 2 Fe-57 0.0 0.0 -7 7 2 Fe-58 0.0 0.0 -8 7 2 Ni-58 0.0 0.0 -9 7 2 Ni-60 0.0 0.0 -10 7 2 Ni-61 0.0 0.0 -11 7 2 Ni-62 0.0 0.0 -12 7 2 Ni-64 0.0 0.0 -13 7 2 Mn-55 0.0 0.0 -14 7 2 Si-28 0.0 0.0 -15 7 2 Si-29 0.0 0.0 -16 7 2 Si-30 0.0 0.0 -17 7 2 Cr-50 0.0 0.0 -18 7 2 Cr-52 0.0 0.0 -19 7 2 Cr-53 0.0 0.0 -20 7 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. -63 7 1 1 H-1 0.0 0.0 -64 7 1 1 O-16 0.0 0.0 -65 7 1 1 B-10 0.0 0.0 -66 7 1 1 B-11 0.0 0.0 -67 7 1 1 Fe-54 0.0 0.0 -68 7 1 1 Fe-56 0.0 0.0 -69 7 1 1 Fe-57 0.0 0.0 -70 7 1 1 Fe-58 0.0 0.0 -71 7 1 1 Ni-58 0.0 0.0 -72 7 1 1 Ni-60 0.0 0.0 -73 7 1 1 Ni-61 0.0 0.0 -74 7 1 1 Ni-62 0.0 0.0 -75 7 1 1 Ni-64 0.0 0.0 -76 7 1 1 Mn-55 0.0 0.0 -77 7 1 1 Si-28 0.0 0.0 -78 7 1 1 Si-29 0.0 0.0 -79 7 1 1 Si-30 0.0 0.0 -80 7 1 1 Cr-50 0.0 0.0 -81 7 1 1 Cr-52 0.0 0.0 -82 7 1 1 Cr-53 0.0 0.0 -83 7 1 1 Cr-54 0.0 0.0 -42 7 1 2 H-1 0.0 0.0 -43 7 1 2 O-16 0.0 0.0 -44 7 1 2 B-10 0.0 0.0 -45 7 1 2 B-11 0.0 0.0 -46 7 1 2 Fe-54 0.0 0.0 -47 7 1 2 Fe-56 0.0 0.0 -48 7 1 2 Fe-57 0.0 0.0 -49 7 1 2 Fe-58 0.0 0.0 -50 7 1 2 Ni-58 0.0 0.0 -51 7 1 2 Ni-60 0.0 0.0 -52 7 1 2 Ni-61 0.0 0.0 -53 7 1 2 Ni-62 0.0 0.0 -54 7 1 2 Ni-64 0.0 0.0 -55 7 1 2 Mn-55 0.0 0.0 -56 7 1 2 Si-28 0.0 0.0 -57 7 1 2 Si-29 0.0 0.0 -58 7 1 2 Si-30 0.0 0.0 -59 7 1 2 Cr-50 0.0 0.0 -60 7 1 2 Cr-52 0.0 0.0 -61 7 1 2 Cr-53 0.0 0.0 -62 7 1 2 Cr-54 0.0 0.0 -21 7 2 1 H-1 0.0 0.0 -22 7 2 1 O-16 0.0 0.0 -23 7 2 1 B-10 0.0 0.0 -24 7 2 1 B-11 0.0 0.0 -25 7 2 1 Fe-54 0.0 0.0 -26 7 2 1 Fe-56 0.0 0.0 -27 7 2 1 Fe-57 0.0 0.0 -28 7 2 1 Fe-58 0.0 0.0 -29 7 2 1 Ni-58 0.0 0.0 -30 7 2 1 Ni-60 0.0 0.0 -31 7 2 1 Ni-61 0.0 0.0 -32 7 2 1 Ni-62 0.0 0.0 -33 7 2 1 Ni-64 0.0 0.0 -34 7 2 1 Mn-55 0.0 0.0 -35 7 2 1 Si-28 0.0 0.0 -36 7 2 1 Si-29 0.0 0.0 -37 7 2 1 Si-30 0.0 0.0 -38 7 2 1 Cr-50 0.0 0.0 -39 7 2 1 Cr-52 0.0 0.0 -40 7 2 1 Cr-53 0.0 0.0 -41 7 2 1 Cr-54 0.0 0.0 -0 7 2 2 H-1 0.0 0.0 -1 7 2 2 O-16 0.0 0.0 -2 7 2 2 B-10 0.0 0.0 -3 7 2 2 B-11 0.0 0.0 -4 7 2 2 Fe-54 0.0 0.0 -5 7 2 2 Fe-56 0.0 0.0 -6 7 2 2 Fe-57 0.0 0.0 -7 7 2 2 Fe-58 0.0 0.0 -8 7 2 2 Ni-58 0.0 0.0 -9 7 2 2 Ni-60 0.0 0.0 -10 7 2 2 Ni-61 0.0 0.0 -11 7 2 2 Ni-62 0.0 0.0 -12 7 2 2 Ni-64 0.0 0.0 -13 7 2 2 Mn-55 0.0 0.0 -14 7 2 2 Si-28 0.0 0.0 -15 7 2 2 Si-29 0.0 0.0 -16 7 2 2 Si-30 0.0 0.0 -17 7 2 2 Cr-50 0.0 0.0 -18 7 2 2 Cr-52 0.0 0.0 -19 7 2 2 Cr-53 0.0 0.0 -20 7 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. -21 7 1 H-1 0.0 0.0 -22 7 1 O-16 0.0 0.0 -23 7 1 B-10 0.0 0.0 -24 7 1 B-11 0.0 0.0 -25 7 1 Fe-54 0.0 0.0 -26 7 1 Fe-56 0.0 0.0 -27 7 1 Fe-57 0.0 0.0 -28 7 1 Fe-58 0.0 0.0 -29 7 1 Ni-58 0.0 0.0 -30 7 1 Ni-60 0.0 0.0 -31 7 1 Ni-61 0.0 0.0 -32 7 1 Ni-62 0.0 0.0 -33 7 1 Ni-64 0.0 0.0 -34 7 1 Mn-55 0.0 0.0 -35 7 1 Si-28 0.0 0.0 -36 7 1 Si-29 0.0 0.0 -37 7 1 Si-30 0.0 0.0 -38 7 1 Cr-50 0.0 0.0 -39 7 1 Cr-52 0.0 0.0 -40 7 1 Cr-53 0.0 0.0 -41 7 1 Cr-54 0.0 0.0 -0 7 2 H-1 0.0 0.0 -1 7 2 O-16 0.0 0.0 -2 7 2 B-10 0.0 0.0 -3 7 2 B-11 0.0 0.0 -4 7 2 Fe-54 0.0 0.0 -5 7 2 Fe-56 0.0 0.0 -6 7 2 Fe-57 0.0 0.0 -7 7 2 Fe-58 0.0 0.0 -8 7 2 Ni-58 0.0 0.0 -9 7 2 Ni-60 0.0 0.0 -10 7 2 Ni-61 0.0 0.0 -11 7 2 Ni-62 0.0 0.0 -12 7 2 Ni-64 0.0 0.0 -13 7 2 Mn-55 0.0 0.0 -14 7 2 Si-28 0.0 0.0 -15 7 2 Si-29 0.0 0.0 -16 7 2 Si-30 0.0 0.0 -17 7 2 Cr-50 0.0 0.0 -18 7 2 Cr-52 0.0 0.0 -19 7 2 Cr-53 0.0 0.0 -20 7 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 8 1 H-1 0.0 0.0 -22 8 1 O-16 0.0 0.0 -23 8 1 B-10 0.0 0.0 -24 8 1 B-11 0.0 0.0 -25 8 1 Fe-54 0.0 0.0 -26 8 1 Fe-56 0.0 0.0 -27 8 1 Fe-57 0.0 0.0 -28 8 1 Fe-58 0.0 0.0 -29 8 1 Ni-58 0.0 0.0 -30 8 1 Ni-60 0.0 0.0 -31 8 1 Ni-61 0.0 0.0 -32 8 1 Ni-62 0.0 0.0 -33 8 1 Ni-64 0.0 0.0 -34 8 1 Mn-55 0.0 0.0 -35 8 1 Si-28 0.0 0.0 -36 8 1 Si-29 0.0 0.0 -37 8 1 Si-30 0.0 0.0 -38 8 1 Cr-50 0.0 0.0 -39 8 1 Cr-52 0.0 0.0 -40 8 1 Cr-53 0.0 0.0 -41 8 1 Cr-54 0.0 0.0 -0 8 2 H-1 0.0 0.0 -1 8 2 O-16 0.0 0.0 -2 8 2 B-10 0.0 0.0 -3 8 2 B-11 0.0 0.0 -4 8 2 Fe-54 0.0 0.0 -5 8 2 Fe-56 0.0 0.0 -6 8 2 Fe-57 0.0 0.0 -7 8 2 Fe-58 0.0 0.0 -8 8 2 Ni-58 0.0 0.0 -9 8 2 Ni-60 0.0 0.0 -10 8 2 Ni-61 0.0 0.0 -11 8 2 Ni-62 0.0 0.0 -12 8 2 Ni-64 0.0 0.0 -13 8 2 Mn-55 0.0 0.0 -14 8 2 Si-28 0.0 0.0 -15 8 2 Si-29 0.0 0.0 -16 8 2 Si-30 0.0 0.0 -17 8 2 Cr-50 0.0 0.0 -18 8 2 Cr-52 0.0 0.0 -19 8 2 Cr-53 0.0 0.0 -20 8 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 8 1 H-1 0.0 0.0 -22 8 1 O-16 0.0 0.0 -23 8 1 B-10 0.0 0.0 -24 8 1 B-11 0.0 0.0 -25 8 1 Fe-54 0.0 0.0 -26 8 1 Fe-56 0.0 0.0 -27 8 1 Fe-57 0.0 0.0 -28 8 1 Fe-58 0.0 0.0 -29 8 1 Ni-58 0.0 0.0 -30 8 1 Ni-60 0.0 0.0 -31 8 1 Ni-61 0.0 0.0 -32 8 1 Ni-62 0.0 0.0 -33 8 1 Ni-64 0.0 0.0 -34 8 1 Mn-55 0.0 0.0 -35 8 1 Si-28 0.0 0.0 -36 8 1 Si-29 0.0 0.0 -37 8 1 Si-30 0.0 0.0 -38 8 1 Cr-50 0.0 0.0 -39 8 1 Cr-52 0.0 0.0 -40 8 1 Cr-53 0.0 0.0 -41 8 1 Cr-54 0.0 0.0 -0 8 2 H-1 0.0 0.0 -1 8 2 O-16 0.0 0.0 -2 8 2 B-10 0.0 0.0 -3 8 2 B-11 0.0 0.0 -4 8 2 Fe-54 0.0 0.0 -5 8 2 Fe-56 0.0 0.0 -6 8 2 Fe-57 0.0 0.0 -7 8 2 Fe-58 0.0 0.0 -8 8 2 Ni-58 0.0 0.0 -9 8 2 Ni-60 0.0 0.0 -10 8 2 Ni-61 0.0 0.0 -11 8 2 Ni-62 0.0 0.0 -12 8 2 Ni-64 0.0 0.0 -13 8 2 Mn-55 0.0 0.0 -14 8 2 Si-28 0.0 0.0 -15 8 2 Si-29 0.0 0.0 -16 8 2 Si-30 0.0 0.0 -17 8 2 Cr-50 0.0 0.0 -18 8 2 Cr-52 0.0 0.0 -19 8 2 Cr-53 0.0 0.0 -20 8 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. -63 8 1 1 H-1 0.0 0.0 -64 8 1 1 O-16 0.0 0.0 -65 8 1 1 B-10 0.0 0.0 -66 8 1 1 B-11 0.0 0.0 -67 8 1 1 Fe-54 0.0 0.0 -68 8 1 1 Fe-56 0.0 0.0 -69 8 1 1 Fe-57 0.0 0.0 -70 8 1 1 Fe-58 0.0 0.0 -71 8 1 1 Ni-58 0.0 0.0 -72 8 1 1 Ni-60 0.0 0.0 -73 8 1 1 Ni-61 0.0 0.0 -74 8 1 1 Ni-62 0.0 0.0 -75 8 1 1 Ni-64 0.0 0.0 -76 8 1 1 Mn-55 0.0 0.0 -77 8 1 1 Si-28 0.0 0.0 -78 8 1 1 Si-29 0.0 0.0 -79 8 1 1 Si-30 0.0 0.0 -80 8 1 1 Cr-50 0.0 0.0 -81 8 1 1 Cr-52 0.0 0.0 -82 8 1 1 Cr-53 0.0 0.0 -83 8 1 1 Cr-54 0.0 0.0 -42 8 1 2 H-1 0.0 0.0 -43 8 1 2 O-16 0.0 0.0 -44 8 1 2 B-10 0.0 0.0 -45 8 1 2 B-11 0.0 0.0 -46 8 1 2 Fe-54 0.0 0.0 -47 8 1 2 Fe-56 0.0 0.0 -48 8 1 2 Fe-57 0.0 0.0 -49 8 1 2 Fe-58 0.0 0.0 -50 8 1 2 Ni-58 0.0 0.0 -51 8 1 2 Ni-60 0.0 0.0 -52 8 1 2 Ni-61 0.0 0.0 -53 8 1 2 Ni-62 0.0 0.0 -54 8 1 2 Ni-64 0.0 0.0 -55 8 1 2 Mn-55 0.0 0.0 -56 8 1 2 Si-28 0.0 0.0 -57 8 1 2 Si-29 0.0 0.0 -58 8 1 2 Si-30 0.0 0.0 -59 8 1 2 Cr-50 0.0 0.0 -60 8 1 2 Cr-52 0.0 0.0 -61 8 1 2 Cr-53 0.0 0.0 -62 8 1 2 Cr-54 0.0 0.0 -21 8 2 1 H-1 0.0 0.0 -22 8 2 1 O-16 0.0 0.0 -23 8 2 1 B-10 0.0 0.0 -24 8 2 1 B-11 0.0 0.0 -25 8 2 1 Fe-54 0.0 0.0 -26 8 2 1 Fe-56 0.0 0.0 -27 8 2 1 Fe-57 0.0 0.0 -28 8 2 1 Fe-58 0.0 0.0 -29 8 2 1 Ni-58 0.0 0.0 -30 8 2 1 Ni-60 0.0 0.0 -31 8 2 1 Ni-61 0.0 0.0 -32 8 2 1 Ni-62 0.0 0.0 -33 8 2 1 Ni-64 0.0 0.0 -34 8 2 1 Mn-55 0.0 0.0 -35 8 2 1 Si-28 0.0 0.0 -36 8 2 1 Si-29 0.0 0.0 -37 8 2 1 Si-30 0.0 0.0 -38 8 2 1 Cr-50 0.0 0.0 -39 8 2 1 Cr-52 0.0 0.0 -40 8 2 1 Cr-53 0.0 0.0 -41 8 2 1 Cr-54 0.0 0.0 -0 8 2 2 H-1 0.0 0.0 -1 8 2 2 O-16 0.0 0.0 -2 8 2 2 B-10 0.0 0.0 -3 8 2 2 B-11 0.0 0.0 -4 8 2 2 Fe-54 0.0 0.0 -5 8 2 2 Fe-56 0.0 0.0 -6 8 2 2 Fe-57 0.0 0.0 -7 8 2 2 Fe-58 0.0 0.0 -8 8 2 2 Ni-58 0.0 0.0 -9 8 2 2 Ni-60 0.0 0.0 -10 8 2 2 Ni-61 0.0 0.0 -11 8 2 2 Ni-62 0.0 0.0 -12 8 2 2 Ni-64 0.0 0.0 -13 8 2 2 Mn-55 0.0 0.0 -14 8 2 2 Si-28 0.0 0.0 -15 8 2 2 Si-29 0.0 0.0 -16 8 2 2 Si-30 0.0 0.0 -17 8 2 2 Cr-50 0.0 0.0 -18 8 2 2 Cr-52 0.0 0.0 -19 8 2 2 Cr-53 0.0 0.0 -20 8 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. -21 8 1 H-1 0.0 0.0 -22 8 1 O-16 0.0 0.0 -23 8 1 B-10 0.0 0.0 -24 8 1 B-11 0.0 0.0 -25 8 1 Fe-54 0.0 0.0 -26 8 1 Fe-56 0.0 0.0 -27 8 1 Fe-57 0.0 0.0 -28 8 1 Fe-58 0.0 0.0 -29 8 1 Ni-58 0.0 0.0 -30 8 1 Ni-60 0.0 0.0 -31 8 1 Ni-61 0.0 0.0 -32 8 1 Ni-62 0.0 0.0 -33 8 1 Ni-64 0.0 0.0 -34 8 1 Mn-55 0.0 0.0 -35 8 1 Si-28 0.0 0.0 -36 8 1 Si-29 0.0 0.0 -37 8 1 Si-30 0.0 0.0 -38 8 1 Cr-50 0.0 0.0 -39 8 1 Cr-52 0.0 0.0 -40 8 1 Cr-53 0.0 0.0 -41 8 1 Cr-54 0.0 0.0 -0 8 2 H-1 0.0 0.0 -1 8 2 O-16 0.0 0.0 -2 8 2 B-10 0.0 0.0 -3 8 2 B-11 0.0 0.0 -4 8 2 Fe-54 0.0 0.0 -5 8 2 Fe-56 0.0 0.0 -6 8 2 Fe-57 0.0 0.0 -7 8 2 Fe-58 0.0 0.0 -8 8 2 Ni-58 0.0 0.0 -9 8 2 Ni-60 0.0 0.0 -10 8 2 Ni-61 0.0 0.0 -11 8 2 Ni-62 0.0 0.0 -12 8 2 Ni-64 0.0 0.0 -13 8 2 Mn-55 0.0 0.0 -14 8 2 Si-28 0.0 0.0 -15 8 2 Si-29 0.0 0.0 -16 8 2 Si-30 0.0 0.0 -17 8 2 Cr-50 0.0 0.0 -18 8 2 Cr-52 0.0 0.0 -19 8 2 Cr-53 0.0 0.0 -20 8 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 9 1 H-1 0.150655 0.480993 -22 9 1 O-16 0.116221 0.114089 -23 9 1 B-10 0.000000 0.000000 -24 9 1 B-11 0.000000 0.000000 -25 9 1 Fe-54 0.000000 0.000000 -26 9 1 Fe-56 0.186217 0.199795 -27 9 1 Fe-57 0.000000 0.000000 -28 9 1 Fe-58 0.000000 0.000000 -29 9 1 Ni-58 0.000000 0.000000 -30 9 1 Ni-60 0.000000 0.000000 -31 9 1 Ni-61 0.000000 0.000000 -32 9 1 Ni-62 0.000000 0.000000 -33 9 1 Ni-64 0.000000 0.000000 -34 9 1 Mn-55 0.000000 0.000000 -35 9 1 Si-28 0.000000 0.000000 -36 9 1 Si-29 0.000000 0.000000 -37 9 1 Si-30 0.000000 0.000000 -38 9 1 Cr-50 0.000000 0.000000 -39 9 1 Cr-52 0.000000 0.000000 -40 9 1 Cr-53 0.147443 0.139574 -41 9 1 Cr-54 0.000000 0.000000 -0 9 2 H-1 0.000000 0.000000 -1 9 2 O-16 0.000000 0.000000 -2 9 2 B-10 0.000000 0.000000 -3 9 2 B-11 0.000000 0.000000 -4 9 2 Fe-54 0.000000 0.000000 -5 9 2 Fe-56 0.000000 0.000000 -6 9 2 Fe-57 0.000000 0.000000 -7 9 2 Fe-58 0.000000 0.000000 -8 9 2 Ni-58 0.000000 0.000000 -9 9 2 Ni-60 0.000000 0.000000 -10 9 2 Ni-61 0.000000 0.000000 -11 9 2 Ni-62 0.000000 0.000000 -12 9 2 Ni-64 0.000000 0.000000 -13 9 2 Mn-55 0.000000 0.000000 -14 9 2 Si-28 0.000000 0.000000 -15 9 2 Si-29 0.000000 0.000000 -16 9 2 Si-30 0.000000 0.000000 -17 9 2 Cr-50 0.000000 0.000000 -18 9 2 Cr-52 0.000000 0.000000 -19 9 2 Cr-53 0.000000 0.000000 -20 9 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. -21 9 1 H-1 0.0 0.0 -22 9 1 O-16 0.0 0.0 -23 9 1 B-10 0.0 0.0 -24 9 1 B-11 0.0 0.0 -25 9 1 Fe-54 0.0 0.0 -26 9 1 Fe-56 0.0 0.0 -27 9 1 Fe-57 0.0 0.0 -28 9 1 Fe-58 0.0 0.0 -29 9 1 Ni-58 0.0 0.0 -30 9 1 Ni-60 0.0 0.0 -31 9 1 Ni-61 0.0 0.0 -32 9 1 Ni-62 0.0 0.0 -33 9 1 Ni-64 0.0 0.0 -34 9 1 Mn-55 0.0 0.0 -35 9 1 Si-28 0.0 0.0 -36 9 1 Si-29 0.0 0.0 -37 9 1 Si-30 0.0 0.0 -38 9 1 Cr-50 0.0 0.0 -39 9 1 Cr-52 0.0 0.0 -40 9 1 Cr-53 0.0 0.0 -41 9 1 Cr-54 0.0 0.0 -0 9 2 H-1 0.0 0.0 -1 9 2 O-16 0.0 0.0 -2 9 2 B-10 0.0 0.0 -3 9 2 B-11 0.0 0.0 -4 9 2 Fe-54 0.0 0.0 -5 9 2 Fe-56 0.0 0.0 -6 9 2 Fe-57 0.0 0.0 -7 9 2 Fe-58 0.0 0.0 -8 9 2 Ni-58 0.0 0.0 -9 9 2 Ni-60 0.0 0.0 -10 9 2 Ni-61 0.0 0.0 -11 9 2 Ni-62 0.0 0.0 -12 9 2 Ni-64 0.0 0.0 -13 9 2 Mn-55 0.0 0.0 -14 9 2 Si-28 0.0 0.0 -15 9 2 Si-29 0.0 0.0 -16 9 2 Si-30 0.0 0.0 -17 9 2 Cr-50 0.0 0.0 -18 9 2 Cr-52 0.0 0.0 -19 9 2 Cr-53 0.0 0.0 -20 9 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. -63 9 1 1 H-1 0.150655 0.480993 -64 9 1 1 O-16 0.116221 0.114089 -65 9 1 1 B-10 0.000000 0.000000 -66 9 1 1 B-11 0.000000 0.000000 -67 9 1 1 Fe-54 0.000000 0.000000 -68 9 1 1 Fe-56 0.186217 0.199795 -69 9 1 1 Fe-57 0.000000 0.000000 -70 9 1 1 Fe-58 0.000000 0.000000 -71 9 1 1 Ni-58 0.000000 0.000000 -72 9 1 1 Ni-60 0.000000 0.000000 -73 9 1 1 Ni-61 0.000000 0.000000 -74 9 1 1 Ni-62 0.000000 0.000000 -75 9 1 1 Ni-64 0.000000 0.000000 -76 9 1 1 Mn-55 0.000000 0.000000 -77 9 1 1 Si-28 0.000000 0.000000 -78 9 1 1 Si-29 0.000000 0.000000 -79 9 1 1 Si-30 0.000000 0.000000 -80 9 1 1 Cr-50 0.000000 0.000000 -81 9 1 1 Cr-52 0.000000 0.000000 -82 9 1 1 Cr-53 0.147443 0.139574 -83 9 1 1 Cr-54 0.000000 0.000000 -42 9 1 2 H-1 0.000000 0.000000 -43 9 1 2 O-16 0.000000 0.000000 -44 9 1 2 B-10 0.000000 0.000000 -45 9 1 2 B-11 0.000000 0.000000 -46 9 1 2 Fe-54 0.000000 0.000000 -47 9 1 2 Fe-56 0.000000 0.000000 -48 9 1 2 Fe-57 0.000000 0.000000 -49 9 1 2 Fe-58 0.000000 0.000000 -50 9 1 2 Ni-58 0.000000 0.000000 -51 9 1 2 Ni-60 0.000000 0.000000 -52 9 1 2 Ni-61 0.000000 0.000000 -53 9 1 2 Ni-62 0.000000 0.000000 -54 9 1 2 Ni-64 0.000000 0.000000 -55 9 1 2 Mn-55 0.000000 0.000000 -56 9 1 2 Si-28 0.000000 0.000000 -57 9 1 2 Si-29 0.000000 0.000000 -58 9 1 2 Si-30 0.000000 0.000000 -59 9 1 2 Cr-50 0.000000 0.000000 -60 9 1 2 Cr-52 0.000000 0.000000 -61 9 1 2 Cr-53 0.000000 0.000000 -62 9 1 2 Cr-54 0.000000 0.000000 -21 9 2 1 H-1 0.000000 0.000000 -22 9 2 1 O-16 0.000000 0.000000 -23 9 2 1 B-10 0.000000 0.000000 -24 9 2 1 B-11 0.000000 0.000000 -25 9 2 1 Fe-54 0.000000 0.000000 -26 9 2 1 Fe-56 0.000000 0.000000 -27 9 2 1 Fe-57 0.000000 0.000000 -28 9 2 1 Fe-58 0.000000 0.000000 -29 9 2 1 Ni-58 0.000000 0.000000 -30 9 2 1 Ni-60 0.000000 0.000000 -31 9 2 1 Ni-61 0.000000 0.000000 -32 9 2 1 Ni-62 0.000000 0.000000 -33 9 2 1 Ni-64 0.000000 0.000000 -34 9 2 1 Mn-55 0.000000 0.000000 -35 9 2 1 Si-28 0.000000 0.000000 -36 9 2 1 Si-29 0.000000 0.000000 -37 9 2 1 Si-30 0.000000 0.000000 -38 9 2 1 Cr-50 0.000000 0.000000 -39 9 2 1 Cr-52 0.000000 0.000000 -40 9 2 1 Cr-53 0.000000 0.000000 -41 9 2 1 Cr-54 0.000000 0.000000 -0 9 2 2 H-1 0.000000 0.000000 -1 9 2 2 O-16 0.000000 0.000000 -2 9 2 2 B-10 0.000000 0.000000 -3 9 2 2 B-11 0.000000 0.000000 -4 9 2 2 Fe-54 0.000000 0.000000 -5 9 2 2 Fe-56 0.000000 0.000000 -6 9 2 2 Fe-57 0.000000 0.000000 -7 9 2 2 Fe-58 0.000000 0.000000 -8 9 2 2 Ni-58 0.000000 0.000000 -9 9 2 2 Ni-60 0.000000 0.000000 -10 9 2 2 Ni-61 0.000000 0.000000 -11 9 2 2 Ni-62 0.000000 0.000000 -12 9 2 2 Ni-64 0.000000 0.000000 -13 9 2 2 Mn-55 0.000000 0.000000 -14 9 2 2 Si-28 0.000000 0.000000 -15 9 2 2 Si-29 0.000000 0.000000 -16 9 2 2 Si-30 0.000000 0.000000 -17 9 2 2 Cr-50 0.000000 0.000000 -18 9 2 2 Cr-52 0.000000 0.000000 -19 9 2 2 Cr-53 0.000000 0.000000 -20 9 2 2 Cr-54 0.000000 0.000000 material group out nuclide mean std. dev. -21 9 1 H-1 0.0 0.0 -22 9 1 O-16 0.0 0.0 -23 9 1 B-10 0.0 0.0 -24 9 1 B-11 0.0 0.0 -25 9 1 Fe-54 0.0 0.0 -26 9 1 Fe-56 0.0 0.0 -27 9 1 Fe-57 0.0 0.0 -28 9 1 Fe-58 0.0 0.0 -29 9 1 Ni-58 0.0 0.0 -30 9 1 Ni-60 0.0 0.0 -31 9 1 Ni-61 0.0 0.0 -32 9 1 Ni-62 0.0 0.0 -33 9 1 Ni-64 0.0 0.0 -34 9 1 Mn-55 0.0 0.0 -35 9 1 Si-28 0.0 0.0 -36 9 1 Si-29 0.0 0.0 -37 9 1 Si-30 0.0 0.0 -38 9 1 Cr-50 0.0 0.0 -39 9 1 Cr-52 0.0 0.0 -40 9 1 Cr-53 0.0 0.0 -41 9 1 Cr-54 0.0 0.0 -0 9 2 H-1 0.0 0.0 -1 9 2 O-16 0.0 0.0 -2 9 2 B-10 0.0 0.0 -3 9 2 B-11 0.0 0.0 -4 9 2 Fe-54 0.0 0.0 -5 9 2 Fe-56 0.0 0.0 -6 9 2 Fe-57 0.0 0.0 -7 9 2 Fe-58 0.0 0.0 -8 9 2 Ni-58 0.0 0.0 -9 9 2 Ni-60 0.0 0.0 -10 9 2 Ni-61 0.0 0.0 -11 9 2 Ni-62 0.0 0.0 -12 9 2 Ni-64 0.0 0.0 -13 9 2 Mn-55 0.0 0.0 -14 9 2 Si-28 0.0 0.0 -15 9 2 Si-29 0.0 0.0 -16 9 2 Si-30 0.0 0.0 -17 9 2 Cr-50 0.0 0.0 -18 9 2 Cr-52 0.0 0.0 -19 9 2 Cr-53 0.0 0.0 -20 9 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 10 1 H-1 0.123944 0.541390 -22 10 1 O-16 0.000000 0.000000 -23 10 1 B-10 0.000000 0.000000 -24 10 1 B-11 0.000000 0.000000 -25 10 1 Fe-54 0.000000 0.000000 -26 10 1 Fe-56 0.000000 0.000000 -27 10 1 Fe-57 0.000000 0.000000 -28 10 1 Fe-58 0.000000 0.000000 -29 10 1 Ni-58 0.000000 0.000000 -30 10 1 Ni-60 0.000000 0.000000 -31 10 1 Ni-61 0.000000 0.000000 -32 10 1 Ni-62 0.000000 0.000000 -33 10 1 Ni-64 0.000000 0.000000 -34 10 1 Mn-55 0.000000 0.000000 -35 10 1 Si-28 0.000000 0.000000 -36 10 1 Si-29 0.000000 0.000000 -37 10 1 Si-30 0.000000 0.000000 -38 10 1 Cr-50 0.111571 0.138458 -39 10 1 Cr-52 0.000000 0.000000 -40 10 1 Cr-53 0.000000 0.000000 -41 10 1 Cr-54 0.000000 0.000000 -0 10 2 H-1 0.000000 0.000000 -1 10 2 O-16 0.000000 0.000000 -2 10 2 B-10 0.000000 0.000000 -3 10 2 B-11 0.000000 0.000000 -4 10 2 Fe-54 0.000000 0.000000 -5 10 2 Fe-56 0.000000 0.000000 -6 10 2 Fe-57 0.000000 0.000000 -7 10 2 Fe-58 0.000000 0.000000 -8 10 2 Ni-58 0.000000 0.000000 -9 10 2 Ni-60 0.000000 0.000000 -10 10 2 Ni-61 0.000000 0.000000 -11 10 2 Ni-62 0.000000 0.000000 -12 10 2 Ni-64 0.000000 0.000000 -13 10 2 Mn-55 0.000000 0.000000 -14 10 2 Si-28 0.000000 0.000000 -15 10 2 Si-29 0.000000 0.000000 -16 10 2 Si-30 0.000000 0.000000 -17 10 2 Cr-50 0.000000 0.000000 -18 10 2 Cr-52 0.000000 0.000000 -19 10 2 Cr-53 0.000000 0.000000 -20 10 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. -21 10 1 H-1 0.0 0.0 -22 10 1 O-16 0.0 0.0 -23 10 1 B-10 0.0 0.0 -24 10 1 B-11 0.0 0.0 -25 10 1 Fe-54 0.0 0.0 -26 10 1 Fe-56 0.0 0.0 -27 10 1 Fe-57 0.0 0.0 -28 10 1 Fe-58 0.0 0.0 -29 10 1 Ni-58 0.0 0.0 -30 10 1 Ni-60 0.0 0.0 -31 10 1 Ni-61 0.0 0.0 -32 10 1 Ni-62 0.0 0.0 -33 10 1 Ni-64 0.0 0.0 -34 10 1 Mn-55 0.0 0.0 -35 10 1 Si-28 0.0 0.0 -36 10 1 Si-29 0.0 0.0 -37 10 1 Si-30 0.0 0.0 -38 10 1 Cr-50 0.0 0.0 -39 10 1 Cr-52 0.0 0.0 -40 10 1 Cr-53 0.0 0.0 -41 10 1 Cr-54 0.0 0.0 -0 10 2 H-1 0.0 0.0 -1 10 2 O-16 0.0 0.0 -2 10 2 B-10 0.0 0.0 -3 10 2 B-11 0.0 0.0 -4 10 2 Fe-54 0.0 0.0 -5 10 2 Fe-56 0.0 0.0 -6 10 2 Fe-57 0.0 0.0 -7 10 2 Fe-58 0.0 0.0 -8 10 2 Ni-58 0.0 0.0 -9 10 2 Ni-60 0.0 0.0 -10 10 2 Ni-61 0.0 0.0 -11 10 2 Ni-62 0.0 0.0 -12 10 2 Ni-64 0.0 0.0 -13 10 2 Mn-55 0.0 0.0 -14 10 2 Si-28 0.0 0.0 -15 10 2 Si-29 0.0 0.0 -16 10 2 Si-30 0.0 0.0 -17 10 2 Cr-50 0.0 0.0 -18 10 2 Cr-52 0.0 0.0 -19 10 2 Cr-53 0.0 0.0 -20 10 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. -63 10 1 1 H-1 0.123944 0.541390 -64 10 1 1 O-16 0.000000 0.000000 -65 10 1 1 B-10 0.000000 0.000000 -66 10 1 1 B-11 0.000000 0.000000 -67 10 1 1 Fe-54 0.000000 0.000000 -68 10 1 1 Fe-56 0.000000 0.000000 -69 10 1 1 Fe-57 0.000000 0.000000 -70 10 1 1 Fe-58 0.000000 0.000000 -71 10 1 1 Ni-58 0.000000 0.000000 -72 10 1 1 Ni-60 0.000000 0.000000 -73 10 1 1 Ni-61 0.000000 0.000000 -74 10 1 1 Ni-62 0.000000 0.000000 -75 10 1 1 Ni-64 0.000000 0.000000 -76 10 1 1 Mn-55 0.000000 0.000000 -77 10 1 1 Si-28 0.000000 0.000000 -78 10 1 1 Si-29 0.000000 0.000000 -79 10 1 1 Si-30 0.000000 0.000000 -80 10 1 1 Cr-50 0.111571 0.138458 -81 10 1 1 Cr-52 0.000000 0.000000 -82 10 1 1 Cr-53 0.000000 0.000000 -83 10 1 1 Cr-54 0.000000 0.000000 -42 10 1 2 H-1 0.000000 0.000000 -43 10 1 2 O-16 0.000000 0.000000 -44 10 1 2 B-10 0.000000 0.000000 -45 10 1 2 B-11 0.000000 0.000000 -46 10 1 2 Fe-54 0.000000 0.000000 -47 10 1 2 Fe-56 0.000000 0.000000 -48 10 1 2 Fe-57 0.000000 0.000000 -49 10 1 2 Fe-58 0.000000 0.000000 -50 10 1 2 Ni-58 0.000000 0.000000 -51 10 1 2 Ni-60 0.000000 0.000000 -52 10 1 2 Ni-61 0.000000 0.000000 -53 10 1 2 Ni-62 0.000000 0.000000 -54 10 1 2 Ni-64 0.000000 0.000000 -55 10 1 2 Mn-55 0.000000 0.000000 -56 10 1 2 Si-28 0.000000 0.000000 -57 10 1 2 Si-29 0.000000 0.000000 -58 10 1 2 Si-30 0.000000 0.000000 -59 10 1 2 Cr-50 0.000000 0.000000 -60 10 1 2 Cr-52 0.000000 0.000000 -61 10 1 2 Cr-53 0.000000 0.000000 -62 10 1 2 Cr-54 0.000000 0.000000 -21 10 2 1 H-1 0.000000 0.000000 -22 10 2 1 O-16 0.000000 0.000000 -23 10 2 1 B-10 0.000000 0.000000 -24 10 2 1 B-11 0.000000 0.000000 -25 10 2 1 Fe-54 0.000000 0.000000 -26 10 2 1 Fe-56 0.000000 0.000000 -27 10 2 1 Fe-57 0.000000 0.000000 -28 10 2 1 Fe-58 0.000000 0.000000 -29 10 2 1 Ni-58 0.000000 0.000000 -30 10 2 1 Ni-60 0.000000 0.000000 -31 10 2 1 Ni-61 0.000000 0.000000 -32 10 2 1 Ni-62 0.000000 0.000000 -33 10 2 1 Ni-64 0.000000 0.000000 -34 10 2 1 Mn-55 0.000000 0.000000 -35 10 2 1 Si-28 0.000000 0.000000 -36 10 2 1 Si-29 0.000000 0.000000 -37 10 2 1 Si-30 0.000000 0.000000 -38 10 2 1 Cr-50 0.000000 0.000000 -39 10 2 1 Cr-52 0.000000 0.000000 -40 10 2 1 Cr-53 0.000000 0.000000 -41 10 2 1 Cr-54 0.000000 0.000000 -0 10 2 2 H-1 0.000000 0.000000 -1 10 2 2 O-16 0.000000 0.000000 -2 10 2 2 B-10 0.000000 0.000000 -3 10 2 2 B-11 0.000000 0.000000 -4 10 2 2 Fe-54 0.000000 0.000000 -5 10 2 2 Fe-56 0.000000 0.000000 -6 10 2 2 Fe-57 0.000000 0.000000 -7 10 2 2 Fe-58 0.000000 0.000000 -8 10 2 2 Ni-58 0.000000 0.000000 -9 10 2 2 Ni-60 0.000000 0.000000 -10 10 2 2 Ni-61 0.000000 0.000000 -11 10 2 2 Ni-62 0.000000 0.000000 -12 10 2 2 Ni-64 0.000000 0.000000 -13 10 2 2 Mn-55 0.000000 0.000000 -14 10 2 2 Si-28 0.000000 0.000000 -15 10 2 2 Si-29 0.000000 0.000000 -16 10 2 2 Si-30 0.000000 0.000000 -17 10 2 2 Cr-50 0.000000 0.000000 -18 10 2 2 Cr-52 0.000000 0.000000 -19 10 2 2 Cr-53 0.000000 0.000000 -20 10 2 2 Cr-54 0.000000 0.000000 material group out nuclide mean std. dev. -21 10 1 H-1 0.0 0.0 -22 10 1 O-16 0.0 0.0 -23 10 1 B-10 0.0 0.0 -24 10 1 B-11 0.0 0.0 -25 10 1 Fe-54 0.0 0.0 -26 10 1 Fe-56 0.0 0.0 -27 10 1 Fe-57 0.0 0.0 -28 10 1 Fe-58 0.0 0.0 -29 10 1 Ni-58 0.0 0.0 -30 10 1 Ni-60 0.0 0.0 -31 10 1 Ni-61 0.0 0.0 -32 10 1 Ni-62 0.0 0.0 -33 10 1 Ni-64 0.0 0.0 -34 10 1 Mn-55 0.0 0.0 -35 10 1 Si-28 0.0 0.0 -36 10 1 Si-29 0.0 0.0 -37 10 1 Si-30 0.0 0.0 -38 10 1 Cr-50 0.0 0.0 -39 10 1 Cr-52 0.0 0.0 -40 10 1 Cr-53 0.0 0.0 -41 10 1 Cr-54 0.0 0.0 -0 10 2 H-1 0.0 0.0 -1 10 2 O-16 0.0 0.0 -2 10 2 B-10 0.0 0.0 -3 10 2 B-11 0.0 0.0 -4 10 2 Fe-54 0.0 0.0 -5 10 2 Fe-56 0.0 0.0 -6 10 2 Fe-57 0.0 0.0 -7 10 2 Fe-58 0.0 0.0 -8 10 2 Ni-58 0.0 0.0 -9 10 2 Ni-60 0.0 0.0 -10 10 2 Ni-61 0.0 0.0 -11 10 2 Ni-62 0.0 0.0 -12 10 2 Ni-64 0.0 0.0 -13 10 2 Mn-55 0.0 0.0 -14 10 2 Si-28 0.0 0.0 -15 10 2 Si-29 0.0 0.0 -16 10 2 Si-30 0.0 0.0 -17 10 2 Cr-50 0.0 0.0 -18 10 2 Cr-52 0.0 0.0 -19 10 2 Cr-53 0.0 0.0 -20 10 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -9 11 1 H-1 0.131470 0.476035 -10 11 1 O-16 0.028684 0.043000 -11 11 1 B-10 0.000000 0.000000 -12 11 1 B-11 0.000000 0.000000 -13 11 1 Zr-90 0.021980 0.039963 -14 11 1 Zr-91 0.000000 0.000000 -15 11 1 Zr-92 0.000000 0.000000 -16 11 1 Zr-94 0.004191 0.087344 -17 11 1 Zr-96 0.000000 0.000000 -0 11 2 H-1 0.687243 1.239217 -1 11 2 O-16 0.000000 0.000000 -2 11 2 B-10 0.042902 0.060672 -3 11 2 B-11 0.000000 0.000000 -4 11 2 Zr-90 0.039576 0.105193 -5 11 2 Zr-91 0.000000 0.000000 -6 11 2 Zr-92 0.084226 0.103161 -7 11 2 Zr-94 0.092039 0.125985 -8 11 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -9 11 1 H-1 0.0 0.0 -10 11 1 O-16 0.0 0.0 -11 11 1 B-10 0.0 0.0 -12 11 1 B-11 0.0 0.0 -13 11 1 Zr-90 0.0 0.0 -14 11 1 Zr-91 0.0 0.0 -15 11 1 Zr-92 0.0 0.0 -16 11 1 Zr-94 0.0 0.0 -17 11 1 Zr-96 0.0 0.0 -0 11 2 H-1 0.0 0.0 -1 11 2 O-16 0.0 0.0 -2 11 2 B-10 0.0 0.0 -3 11 2 B-11 0.0 0.0 -4 11 2 Zr-90 0.0 0.0 -5 11 2 Zr-91 0.0 0.0 -6 11 2 Zr-92 0.0 0.0 -7 11 2 Zr-94 0.0 0.0 -8 11 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. -27 11 1 1 H-1 0.099594 0.442578 -28 11 1 1 O-16 0.028684 0.043000 -29 11 1 1 B-10 0.000000 0.000000 -30 11 1 1 B-11 0.000000 0.000000 -31 11 1 1 Zr-90 0.021980 0.039963 -32 11 1 1 Zr-91 0.000000 0.000000 -33 11 1 1 Zr-92 0.000000 0.000000 -34 11 1 1 Zr-94 0.004191 0.087344 -35 11 1 1 Zr-96 0.000000 0.000000 -18 11 1 2 H-1 0.031875 0.045078 -19 11 1 2 O-16 0.000000 0.000000 -20 11 1 2 B-10 0.000000 0.000000 -21 11 1 2 B-11 0.000000 0.000000 -22 11 1 2 Zr-90 0.000000 0.000000 -23 11 1 2 Zr-91 0.000000 0.000000 -24 11 1 2 Zr-92 0.000000 0.000000 -25 11 1 2 Zr-94 0.000000 0.000000 -26 11 1 2 Zr-96 0.000000 0.000000 -9 11 2 1 H-1 0.000000 0.000000 -10 11 2 1 O-16 0.000000 0.000000 -11 11 2 1 B-10 0.000000 0.000000 -12 11 2 1 B-11 0.000000 0.000000 -13 11 2 1 Zr-90 0.000000 0.000000 -14 11 2 1 Zr-91 0.000000 0.000000 -15 11 2 1 Zr-92 0.000000 0.000000 -16 11 2 1 Zr-94 0.000000 0.000000 -17 11 2 1 Zr-96 0.000000 0.000000 -0 11 2 2 H-1 0.687243 1.239217 -1 11 2 2 O-16 0.000000 0.000000 -2 11 2 2 B-10 0.000000 0.000000 -3 11 2 2 B-11 0.000000 0.000000 -4 11 2 2 Zr-90 0.039576 0.105193 -5 11 2 2 Zr-91 0.000000 0.000000 -6 11 2 2 Zr-92 0.084226 0.103161 -7 11 2 2 Zr-94 0.092039 0.125985 -8 11 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. -9 11 1 H-1 0.0 0.0 -10 11 1 O-16 0.0 0.0 -11 11 1 B-10 0.0 0.0 -12 11 1 B-11 0.0 0.0 -13 11 1 Zr-90 0.0 0.0 -14 11 1 Zr-91 0.0 0.0 -15 11 1 Zr-92 0.0 0.0 -16 11 1 Zr-94 0.0 0.0 -17 11 1 Zr-96 0.0 0.0 -0 11 2 H-1 0.0 0.0 -1 11 2 O-16 0.0 0.0 -2 11 2 B-10 0.0 0.0 -3 11 2 B-11 0.0 0.0 -4 11 2 Zr-90 0.0 0.0 -5 11 2 Zr-91 0.0 0.0 -6 11 2 Zr-92 0.0 0.0 -7 11 2 Zr-94 0.0 0.0 -8 11 2 Zr-96 0.0 0.0 material group in nuclide mean std. dev. -9 12 1 H-1 0.098944 0.178543 -10 12 1 O-16 0.013270 0.020403 -11 12 1 B-10 0.000000 0.000000 -12 12 1 B-11 0.000000 0.000000 -13 12 1 Zr-90 0.089997 0.075538 -14 12 1 Zr-91 0.000000 0.000000 -15 12 1 Zr-92 0.003501 0.017031 -16 12 1 Zr-94 0.004850 0.016327 -17 12 1 Zr-96 0.002730 0.017476 -0 12 2 H-1 1.261686 1.980336 -1 12 2 O-16 0.079159 0.104796 -2 12 2 B-10 0.016928 0.023940 -3 12 2 B-11 0.000000 0.000000 -4 12 2 Zr-90 0.000000 0.000000 -5 12 2 Zr-91 0.033201 0.040665 -6 12 2 Zr-92 0.000000 0.000000 -7 12 2 Zr-94 0.000000 0.000000 -8 12 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -9 12 1 H-1 0.0 0.0 -10 12 1 O-16 0.0 0.0 -11 12 1 B-10 0.0 0.0 -12 12 1 B-11 0.0 0.0 -13 12 1 Zr-90 0.0 0.0 -14 12 1 Zr-91 0.0 0.0 -15 12 1 Zr-92 0.0 0.0 -16 12 1 Zr-94 0.0 0.0 -17 12 1 Zr-96 0.0 0.0 -0 12 2 H-1 0.0 0.0 -1 12 2 O-16 0.0 0.0 -2 12 2 B-10 0.0 0.0 -3 12 2 B-11 0.0 0.0 -4 12 2 Zr-90 0.0 0.0 -5 12 2 Zr-91 0.0 0.0 -6 12 2 Zr-92 0.0 0.0 -7 12 2 Zr-94 0.0 0.0 -8 12 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. -27 12 1 1 H-1 0.071704 0.167588 -28 12 1 1 O-16 0.013270 0.020403 -29 12 1 1 B-10 0.000000 0.000000 -30 12 1 1 B-11 0.000000 0.000000 -31 12 1 1 Zr-90 0.089997 0.075538 -32 12 1 1 Zr-91 0.000000 0.000000 -33 12 1 1 Zr-92 0.003501 0.017031 -34 12 1 1 Zr-94 0.004850 0.016327 -35 12 1 1 Zr-96 0.002730 0.017476 -18 12 1 2 H-1 0.027240 0.029555 -19 12 1 2 O-16 0.000000 0.000000 -20 12 1 2 B-10 0.000000 0.000000 -21 12 1 2 B-11 0.000000 0.000000 -22 12 1 2 Zr-90 0.000000 0.000000 -23 12 1 2 Zr-91 0.000000 0.000000 -24 12 1 2 Zr-92 0.000000 0.000000 -25 12 1 2 Zr-94 0.000000 0.000000 -26 12 1 2 Zr-96 0.000000 0.000000 -9 12 2 1 H-1 0.000000 0.000000 -10 12 2 1 O-16 0.000000 0.000000 -11 12 2 1 B-10 0.000000 0.000000 -12 12 2 1 B-11 0.000000 0.000000 -13 12 2 1 Zr-90 0.000000 0.000000 -14 12 2 1 Zr-91 0.000000 0.000000 -15 12 2 1 Zr-92 0.000000 0.000000 -16 12 2 1 Zr-94 0.000000 0.000000 -17 12 2 1 Zr-96 0.000000 0.000000 -0 12 2 2 H-1 1.244758 1.956675 -1 12 2 2 O-16 0.079159 0.104796 -2 12 2 2 B-10 0.000000 0.000000 -3 12 2 2 B-11 0.000000 0.000000 -4 12 2 2 Zr-90 0.000000 0.000000 -5 12 2 2 Zr-91 0.033201 0.040665 -6 12 2 2 Zr-92 0.000000 0.000000 -7 12 2 2 Zr-94 0.000000 0.000000 -8 12 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. -9 12 1 H-1 0.0 0.0 -10 12 1 O-16 0.0 0.0 -11 12 1 B-10 0.0 0.0 -12 12 1 B-11 0.0 0.0 -13 12 1 Zr-90 0.0 0.0 -14 12 1 Zr-91 0.0 0.0 -15 12 1 Zr-92 0.0 0.0 -16 12 1 Zr-94 0.0 0.0 -17 12 1 Zr-96 0.0 0.0 -0 12 2 H-1 0.0 0.0 -1 12 2 O-16 0.0 0.0 -2 12 2 B-10 0.0 0.0 -3 12 2 B-11 0.0 0.0 -4 12 2 Zr-90 0.0 0.0 -5 12 2 Zr-91 0.0 0.0 -6 12 2 Zr-92 0.0 0.0 -7 12 2 Zr-94 0.0 0.0 -8 12 2 Zr-96 0.0 0.0 \ No newline at end of file + material group in nuclide score mean std. dev. +34 1 1 U-234 ((total - scatter-1) / flux) 1.73e-04 1.73e-04 +35 1 1 U-235 ((total - scatter-1) / flux) 1.07e-02 1.89e-03 +36 1 1 U-236 ((total - scatter-1) / flux) 2.39e-03 1.06e-03 +37 1 1 U-238 ((total - scatter-1) / flux) 2.14e-01 1.33e-02 +38 1 1 Np-237 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +39 1 1 Pu-238 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +40 1 1 Pu-239 ((total - scatter-1) / flux) 2.91e-03 6.39e-04 +41 1 1 Pu-240 ((total - scatter-1) / flux) 4.43e-03 8.06e-04 +42 1 1 Pu-241 ((total - scatter-1) / flux) 6.90e-04 3.87e-04 +43 1 1 Pu-242 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +44 1 1 Am-241 ((total - scatter-1) / flux) 1.73e-04 1.73e-04 +45 1 1 Am-242m ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +46 1 1 Am-243 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +47 1 1 Cm-242 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +48 1 1 Cm-243 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +49 1 1 Cm-244 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +50 1 1 Cm-245 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +51 1 1 Mo-95 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +52 1 1 Tc-99 ((total - scatter-1) / flux) 1.73e-04 1.73e-04 +53 1 1 Ru-101 ((total - scatter-1) / flux) 2.38e-04 2.54e-04 +54 1 1 Ru-103 ((total - scatter-1) / flux) 2.26e-06 2.43e-04 +55 1 1 Ag-109 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +56 1 1 Xe-135 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +57 1 1 Cs-133 ((total - scatter-1) / flux) 3.47e-04 2.13e-04 +58 1 1 Nd-143 ((total - scatter-1) / flux) 4.47e-04 2.92e-04 +59 1 1 Nd-145 ((total - scatter-1) / flux) 5.64e-04 2.94e-04 +60 1 1 Sm-147 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +61 1 1 Sm-149 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +62 1 1 Sm-150 ((total - scatter-1) / flux) 4.72e-04 2.39e-04 +63 1 1 Sm-151 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +64 1 1 Sm-152 ((total - scatter-1) / flux) 4.92e-04 3.52e-04 +65 1 1 Eu-153 ((total - scatter-1) / flux) 1.73e-04 1.73e-04 +66 1 1 Gd-155 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +67 1 1 O-16 ((total - scatter-1) / flux) 1.35e-01 9.80e-03 +0 1 2 U-234 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +1 1 2 U-235 ((total - scatter-1) / flux) 2.00e-01 7.78e-03 +2 1 2 U-236 ((total - scatter-1) / flux) 1.50e-03 2.04e-03 +3 1 2 U-238 ((total - scatter-1) / flux) 2.55e-01 2.97e-02 +4 1 2 Np-237 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +5 1 2 Pu-238 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +6 1 2 Pu-239 ((total - scatter-1) / flux) 1.60e-01 1.14e-02 +7 1 2 Pu-240 ((total - scatter-1) / flux) 7.92e-03 3.71e-03 +8 1 2 Pu-241 ((total - scatter-1) / flux) 1.78e-02 3.73e-03 +9 1 2 Pu-242 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +10 1 2 Am-241 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +11 1 2 Am-242m ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +12 1 2 Am-243 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +13 1 2 Cm-242 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +14 1 2 Cm-243 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +15 1 2 Cm-244 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +16 1 2 Cm-245 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +17 1 2 Mo-95 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +18 1 2 Tc-99 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +19 1 2 Ru-101 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +20 1 2 Ru-103 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +21 1 2 Ag-109 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +22 1 2 Xe-135 ((total - scatter-1) / flux) 1.39e-02 3.98e-03 +23 1 2 Cs-133 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +24 1 2 Nd-143 ((total - scatter-1) / flux) 3.96e-03 2.43e-03 +25 1 2 Nd-145 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +26 1 2 Sm-147 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +27 1 2 Sm-149 ((total - scatter-1) / flux) 1.98e-03 1.98e-03 +28 1 2 Sm-150 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +29 1 2 Sm-151 ((total - scatter-1) / flux) 1.98e-03 1.98e-03 +30 1 2 Sm-152 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +31 1 2 Eu-153 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +32 1 2 Gd-155 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +33 1 2 O-16 ((total - scatter-1) / flux) 1.97e-01 1.47e-02 material group in nuclide score mean std. dev. +34 1 1 U-234 (nu-fission / flux) 7.27e-06 4.42e-07 +35 1 1 U-235 (nu-fission / flux) 9.59e-03 5.94e-04 +36 1 1 U-236 (nu-fission / flux) 7.57e-05 7.52e-06 +37 1 1 U-238 (nu-fission / flux) 7.18e-03 6.51e-04 +38 1 1 Np-237 (nu-fission / flux) 1.32e-05 8.04e-07 +39 1 1 Pu-238 (nu-fission / flux) 7.75e-06 3.99e-07 +40 1 1 Pu-239 (nu-fission / flux) 3.81e-03 3.64e-04 +41 1 1 Pu-240 (nu-fission / flux) 6.94e-05 4.73e-06 +42 1 1 Pu-241 (nu-fission / flux) 1.03e-03 9.08e-05 +43 1 1 Pu-242 (nu-fission / flux) 6.00e-06 3.82e-07 +44 1 1 Am-241 (nu-fission / flux) 1.15e-06 8.27e-08 +45 1 1 Am-242m (nu-fission / flux) 1.10e-06 6.16e-08 +46 1 1 Am-243 (nu-fission / flux) 8.32e-07 5.84e-08 +47 1 1 Cm-242 (nu-fission / flux) 5.09e-07 5.26e-08 +48 1 1 Cm-243 (nu-fission / flux) 2.25e-07 1.46e-08 +49 1 1 Cm-244 (nu-fission / flux) 2.99e-07 2.75e-08 +50 1 1 Cm-245 (nu-fission / flux) 3.06e-07 3.06e-08 +51 1 1 Mo-95 (nu-fission / flux) 0.00e+00 0.00e+00 +52 1 1 Tc-99 (nu-fission / flux) 0.00e+00 0.00e+00 +53 1 1 Ru-101 (nu-fission / flux) 0.00e+00 0.00e+00 +54 1 1 Ru-103 (nu-fission / flux) 0.00e+00 0.00e+00 +55 1 1 Ag-109 (nu-fission / flux) 0.00e+00 0.00e+00 +56 1 1 Xe-135 (nu-fission / flux) 0.00e+00 0.00e+00 +57 1 1 Cs-133 (nu-fission / flux) 0.00e+00 0.00e+00 +58 1 1 Nd-143 (nu-fission / flux) 0.00e+00 0.00e+00 +59 1 1 Nd-145 (nu-fission / flux) 0.00e+00 0.00e+00 +60 1 1 Sm-147 (nu-fission / flux) 0.00e+00 0.00e+00 +61 1 1 Sm-149 (nu-fission / flux) 0.00e+00 0.00e+00 +62 1 1 Sm-150 (nu-fission / flux) 0.00e+00 0.00e+00 +63 1 1 Sm-151 (nu-fission / flux) 0.00e+00 0.00e+00 +64 1 1 Sm-152 (nu-fission / flux) 0.00e+00 0.00e+00 +65 1 1 Eu-153 (nu-fission / flux) 0.00e+00 0.00e+00 +66 1 1 Gd-155 (nu-fission / flux) 0.00e+00 0.00e+00 +67 1 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +0 1 2 U-234 (nu-fission / flux) 4.41e-07 2.83e-08 +1 1 2 U-235 (nu-fission / flux) 3.77e-01 2.45e-02 +2 1 2 U-236 (nu-fission / flux) 6.10e-06 3.73e-07 +3 1 2 U-238 (nu-fission / flux) 5.35e-07 3.31e-08 +4 1 2 Np-237 (nu-fission / flux) 2.70e-07 2.10e-08 +5 1 2 Pu-238 (nu-fission / flux) 3.46e-05 2.64e-06 +6 1 2 Pu-239 (nu-fission / flux) 2.89e-01 1.38e-02 +7 1 2 Pu-240 (nu-fission / flux) 4.53e-06 2.54e-07 +8 1 2 Pu-241 (nu-fission / flux) 4.81e-02 2.78e-03 +9 1 2 Pu-242 (nu-fission / flux) 8.72e-08 5.46e-09 +10 1 2 Am-241 (nu-fission / flux) 4.61e-06 2.16e-07 +11 1 2 Am-242m (nu-fission / flux) 1.43e-04 8.44e-06 +12 1 2 Am-243 (nu-fission / flux) 7.88e-08 4.73e-09 +13 1 2 Cm-242 (nu-fission / flux) 9.73e-07 6.14e-08 +14 1 2 Cm-243 (nu-fission / flux) 1.83e-06 1.07e-07 +15 1 2 Cm-244 (nu-fission / flux) 1.58e-07 9.94e-09 +16 1 2 Cm-245 (nu-fission / flux) 1.21e-05 8.81e-07 +17 1 2 Mo-95 (nu-fission / flux) 0.00e+00 0.00e+00 +18 1 2 Tc-99 (nu-fission / flux) 0.00e+00 0.00e+00 +19 1 2 Ru-101 (nu-fission / flux) 0.00e+00 0.00e+00 +20 1 2 Ru-103 (nu-fission / flux) 0.00e+00 0.00e+00 +21 1 2 Ag-109 (nu-fission / flux) 0.00e+00 0.00e+00 +22 1 2 Xe-135 (nu-fission / flux) 0.00e+00 0.00e+00 +23 1 2 Cs-133 (nu-fission / flux) 0.00e+00 0.00e+00 +24 1 2 Nd-143 (nu-fission / flux) 0.00e+00 0.00e+00 +25 1 2 Nd-145 (nu-fission / flux) 0.00e+00 0.00e+00 +26 1 2 Sm-147 (nu-fission / flux) 0.00e+00 0.00e+00 +27 1 2 Sm-149 (nu-fission / flux) 0.00e+00 0.00e+00 +28 1 2 Sm-150 (nu-fission / flux) 0.00e+00 0.00e+00 +29 1 2 Sm-151 (nu-fission / flux) 0.00e+00 0.00e+00 +30 1 2 Sm-152 (nu-fission / flux) 0.00e+00 0.00e+00 +31 1 2 Eu-153 (nu-fission / flux) 0.00e+00 0.00e+00 +32 1 2 Gd-155 (nu-fission / flux) 0.00e+00 0.00e+00 +33 1 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +102 1 1 1 U-234 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +103 1 1 1 U-235 ((nu-scatter-0 - scatter-1) / flux) 3.23e-03 1.14e-03 +104 1 1 1 U-236 ((nu-scatter-0 - scatter-1) / flux) 1.70e-03 9.23e-04 +105 1 1 1 U-238 ((nu-scatter-0 - scatter-1) / flux) 1.95e-01 1.33e-02 +106 1 1 1 Np-237 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +107 1 1 1 Pu-238 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +108 1 1 1 Pu-239 ((nu-scatter-0 - scatter-1) / flux) 1.01e-03 4.77e-04 +109 1 1 1 Pu-240 ((nu-scatter-0 - scatter-1) / flux) 1.31e-03 2.95e-04 +110 1 1 1 Pu-241 ((nu-scatter-0 - scatter-1) / flux) 3.44e-04 2.44e-04 +111 1 1 1 Pu-242 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +112 1 1 1 Am-241 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +113 1 1 1 Am-242m ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +114 1 1 1 Am-243 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +115 1 1 1 Cm-242 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +116 1 1 1 Cm-243 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +117 1 1 1 Cm-244 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +118 1 1 1 Cm-245 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +119 1 1 1 Mo-95 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +120 1 1 1 Tc-99 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +121 1 1 1 Ru-101 ((nu-scatter-0 - scatter-1) / flux) 2.38e-04 2.54e-04 +122 1 1 1 Ru-103 ((nu-scatter-0 - scatter-1) / flux) 2.26e-06 2.43e-04 +123 1 1 1 Ag-109 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +124 1 1 1 Xe-135 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +125 1 1 1 Cs-133 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +126 1 1 1 Nd-143 ((nu-scatter-0 - scatter-1) / flux) 4.47e-04 2.92e-04 +127 1 1 1 Nd-145 ((nu-scatter-0 - scatter-1) / flux) 5.64e-04 2.94e-04 +128 1 1 1 Sm-147 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +129 1 1 1 Sm-149 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +130 1 1 1 Sm-150 ((nu-scatter-0 - scatter-1) / flux) 2.99e-04 2.38e-04 +131 1 1 1 Sm-151 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +132 1 1 1 Sm-152 ((nu-scatter-0 - scatter-1) / flux) 4.92e-04 3.52e-04 +133 1 1 1 Eu-153 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +134 1 1 1 Gd-155 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +135 1 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 1.33e-01 9.82e-03 +68 1 1 2 U-234 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +69 1 1 2 U-235 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +70 1 1 2 U-236 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +71 1 1 2 U-238 ((nu-scatter-0 - scatter-1) / flux) 1.73e-04 1.73e-04 +72 1 1 2 Np-237 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +73 1 1 2 Pu-238 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +74 1 1 2 Pu-239 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +75 1 1 2 Pu-240 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +76 1 1 2 Pu-241 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +77 1 1 2 Pu-242 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +78 1 1 2 Am-241 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +79 1 1 2 Am-242m ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +80 1 1 2 Am-243 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +81 1 1 2 Cm-242 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +82 1 1 2 Cm-243 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +83 1 1 2 Cm-244 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +84 1 1 2 Cm-245 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +85 1 1 2 Mo-95 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +86 1 1 2 Tc-99 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +87 1 1 2 Ru-101 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +88 1 1 2 Ru-103 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +89 1 1 2 Ag-109 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +90 1 1 2 Xe-135 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +91 1 1 2 Cs-133 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +92 1 1 2 Nd-143 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +93 1 1 2 Nd-145 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +94 1 1 2 Sm-147 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +95 1 1 2 Sm-149 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +96 1 1 2 Sm-150 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +97 1 1 2 Sm-151 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +98 1 1 2 Sm-152 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +99 1 1 2 Eu-153 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +100 1 1 2 Gd-155 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +101 1 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 1.39e-03 4.46e-04 +34 1 2 1 U-234 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +35 1 2 1 U-235 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +36 1 2 1 U-236 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +37 1 2 1 U-238 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +38 1 2 1 Np-237 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +39 1 2 1 Pu-238 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +40 1 2 1 Pu-239 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +41 1 2 1 Pu-240 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +42 1 2 1 Pu-241 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +43 1 2 1 Pu-242 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +44 1 2 1 Am-241 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +45 1 2 1 Am-242m ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +46 1 2 1 Am-243 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +47 1 2 1 Cm-242 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +48 1 2 1 Cm-243 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +49 1 2 1 Cm-244 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +50 1 2 1 Cm-245 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +51 1 2 1 Mo-95 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +52 1 2 1 Tc-99 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +53 1 2 1 Ru-101 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +54 1 2 1 Ru-103 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +55 1 2 1 Ag-109 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +56 1 2 1 Xe-135 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +57 1 2 1 Cs-133 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +58 1 2 1 Nd-143 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +59 1 2 1 Nd-145 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +60 1 2 1 Sm-147 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +61 1 2 1 Sm-149 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +62 1 2 1 Sm-150 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +63 1 2 1 Sm-151 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +64 1 2 1 Sm-152 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +65 1 2 1 Eu-153 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +66 1 2 1 Gd-155 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +67 1 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 1 2 2 U-234 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +1 1 2 2 U-235 ((nu-scatter-0 - scatter-1) / flux) 3.89e-03 3.96e-03 +2 1 2 2 U-236 ((nu-scatter-0 - scatter-1) / flux) 1.50e-03 2.04e-03 +3 1 2 2 U-238 ((nu-scatter-0 - scatter-1) / flux) 2.20e-01 2.60e-02 +4 1 2 2 Np-237 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +5 1 2 2 Pu-238 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +6 1 2 2 Pu-239 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +7 1 2 2 Pu-240 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +8 1 2 2 Pu-241 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +9 1 2 2 Pu-242 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +10 1 2 2 Am-241 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +11 1 2 2 Am-242m ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +12 1 2 2 Am-243 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +13 1 2 2 Cm-242 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +14 1 2 2 Cm-243 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +15 1 2 2 Cm-244 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +16 1 2 2 Cm-245 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +17 1 2 2 Mo-95 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +18 1 2 2 Tc-99 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +19 1 2 2 Ru-101 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +20 1 2 2 Ru-103 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +21 1 2 2 Ag-109 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +22 1 2 2 Xe-135 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +23 1 2 2 Cs-133 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +24 1 2 2 Nd-143 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +25 1 2 2 Nd-145 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +26 1 2 2 Sm-147 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +27 1 2 2 Sm-149 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +28 1 2 2 Sm-150 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +29 1 2 2 Sm-151 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +30 1 2 2 Sm-152 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +31 1 2 2 Eu-153 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +32 1 2 2 Gd-155 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +33 1 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 1.97e-01 1.47e-02 material group out nuclide score mean std. dev. +34 1 1 U-234 nu-fission 0.00e+00 0.00e+00 +35 1 1 U-235 nu-fission 1.00e+00 6.64e-02 +36 1 1 U-236 nu-fission 0.00e+00 0.00e+00 +37 1 1 U-238 nu-fission 1.00e+00 9.31e-02 +38 1 1 Np-237 nu-fission 0.00e+00 0.00e+00 +39 1 1 Pu-238 nu-fission 0.00e+00 0.00e+00 +40 1 1 Pu-239 nu-fission 1.00e+00 1.05e-01 +41 1 1 Pu-240 nu-fission 0.00e+00 0.00e+00 +42 1 1 Pu-241 nu-fission 1.00e+00 2.64e-01 +43 1 1 Pu-242 nu-fission 0.00e+00 0.00e+00 +44 1 1 Am-241 nu-fission 0.00e+00 0.00e+00 +45 1 1 Am-242m nu-fission 0.00e+00 0.00e+00 +46 1 1 Am-243 nu-fission 0.00e+00 0.00e+00 +47 1 1 Cm-242 nu-fission 0.00e+00 0.00e+00 +48 1 1 Cm-243 nu-fission 0.00e+00 0.00e+00 +49 1 1 Cm-244 nu-fission 0.00e+00 0.00e+00 +50 1 1 Cm-245 nu-fission 0.00e+00 0.00e+00 +51 1 1 Mo-95 nu-fission 0.00e+00 0.00e+00 +52 1 1 Tc-99 nu-fission 0.00e+00 0.00e+00 +53 1 1 Ru-101 nu-fission 0.00e+00 0.00e+00 +54 1 1 Ru-103 nu-fission 0.00e+00 0.00e+00 +55 1 1 Ag-109 nu-fission 0.00e+00 0.00e+00 +56 1 1 Xe-135 nu-fission 0.00e+00 0.00e+00 +57 1 1 Cs-133 nu-fission 0.00e+00 0.00e+00 +58 1 1 Nd-143 nu-fission 0.00e+00 0.00e+00 +59 1 1 Nd-145 nu-fission 0.00e+00 0.00e+00 +60 1 1 Sm-147 nu-fission 0.00e+00 0.00e+00 +61 1 1 Sm-149 nu-fission 0.00e+00 0.00e+00 +62 1 1 Sm-150 nu-fission 0.00e+00 0.00e+00 +63 1 1 Sm-151 nu-fission 0.00e+00 0.00e+00 +64 1 1 Sm-152 nu-fission 0.00e+00 0.00e+00 +65 1 1 Eu-153 nu-fission 0.00e+00 0.00e+00 +66 1 1 Gd-155 nu-fission 0.00e+00 0.00e+00 +67 1 1 O-16 nu-fission 0.00e+00 0.00e+00 +0 1 2 U-234 nu-fission 0.00e+00 0.00e+00 +1 1 2 U-235 nu-fission 0.00e+00 0.00e+00 +2 1 2 U-236 nu-fission 0.00e+00 0.00e+00 +3 1 2 U-238 nu-fission 0.00e+00 0.00e+00 +4 1 2 Np-237 nu-fission 0.00e+00 0.00e+00 +5 1 2 Pu-238 nu-fission 0.00e+00 0.00e+00 +6 1 2 Pu-239 nu-fission 0.00e+00 0.00e+00 +7 1 2 Pu-240 nu-fission 0.00e+00 0.00e+00 +8 1 2 Pu-241 nu-fission 0.00e+00 0.00e+00 +9 1 2 Pu-242 nu-fission 0.00e+00 0.00e+00 +10 1 2 Am-241 nu-fission 0.00e+00 0.00e+00 +11 1 2 Am-242m nu-fission 0.00e+00 0.00e+00 +12 1 2 Am-243 nu-fission 0.00e+00 0.00e+00 +13 1 2 Cm-242 nu-fission 0.00e+00 0.00e+00 +14 1 2 Cm-243 nu-fission 0.00e+00 0.00e+00 +15 1 2 Cm-244 nu-fission 0.00e+00 0.00e+00 +16 1 2 Cm-245 nu-fission 0.00e+00 0.00e+00 +17 1 2 Mo-95 nu-fission 0.00e+00 0.00e+00 +18 1 2 Tc-99 nu-fission 0.00e+00 0.00e+00 +19 1 2 Ru-101 nu-fission 0.00e+00 0.00e+00 +20 1 2 Ru-103 nu-fission 0.00e+00 0.00e+00 +21 1 2 Ag-109 nu-fission 0.00e+00 0.00e+00 +22 1 2 Xe-135 nu-fission 0.00e+00 0.00e+00 +23 1 2 Cs-133 nu-fission 0.00e+00 0.00e+00 +24 1 2 Nd-143 nu-fission 0.00e+00 0.00e+00 +25 1 2 Nd-145 nu-fission 0.00e+00 0.00e+00 +26 1 2 Sm-147 nu-fission 0.00e+00 0.00e+00 +27 1 2 Sm-149 nu-fission 0.00e+00 0.00e+00 +28 1 2 Sm-150 nu-fission 0.00e+00 0.00e+00 +29 1 2 Sm-151 nu-fission 0.00e+00 0.00e+00 +30 1 2 Sm-152 nu-fission 0.00e+00 0.00e+00 +31 1 2 Eu-153 nu-fission 0.00e+00 0.00e+00 +32 1 2 Gd-155 nu-fission 0.00e+00 0.00e+00 +33 1 2 O-16 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +5 2 1 Zr-90 ((total - scatter-1) / flux) 1.05e-01 8.92e-03 +6 2 1 Zr-91 ((total - scatter-1) / flux) 3.62e-02 3.74e-03 +7 2 1 Zr-92 ((total - scatter-1) / flux) 4.24e-02 3.03e-03 +8 2 1 Zr-94 ((total - scatter-1) / flux) 4.61e-02 6.25e-03 +9 2 1 Zr-96 ((total - scatter-1) / flux) 7.79e-03 1.54e-03 +0 2 2 Zr-90 ((total - scatter-1) / flux) 1.22e-01 3.49e-02 +1 2 2 Zr-91 ((total - scatter-1) / flux) 6.18e-02 2.43e-02 +2 2 2 Zr-92 ((total - scatter-1) / flux) 4.16e-02 1.63e-02 +3 2 2 Zr-94 ((total - scatter-1) / flux) 6.08e-02 2.15e-02 +4 2 2 Zr-96 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +5 2 1 Zr-90 (nu-fission / flux) 0.00e+00 0.00e+00 +6 2 1 Zr-91 (nu-fission / flux) 0.00e+00 0.00e+00 +7 2 1 Zr-92 (nu-fission / flux) 0.00e+00 0.00e+00 +8 2 1 Zr-94 (nu-fission / flux) 0.00e+00 0.00e+00 +9 2 1 Zr-96 (nu-fission / flux) 0.00e+00 0.00e+00 +0 2 2 Zr-90 (nu-fission / flux) 0.00e+00 0.00e+00 +1 2 2 Zr-91 (nu-fission / flux) 0.00e+00 0.00e+00 +2 2 2 Zr-92 (nu-fission / flux) 0.00e+00 0.00e+00 +3 2 2 Zr-94 (nu-fission / flux) 0.00e+00 0.00e+00 +4 2 2 Zr-96 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +15 2 1 1 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 1.05e-01 8.92e-03 +16 2 1 1 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 3.62e-02 3.74e-03 +17 2 1 1 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 4.24e-02 3.03e-03 +18 2 1 1 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 4.61e-02 6.25e-03 +19 2 1 1 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 7.79e-03 1.54e-03 +10 2 1 2 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +11 2 1 2 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +12 2 1 2 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +13 2 1 2 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +14 2 1 2 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +5 2 2 1 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +6 2 2 1 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +7 2 2 1 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +8 2 2 1 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +9 2 2 1 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 2 2 2 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 1.22e-01 3.49e-02 +1 2 2 2 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 6.18e-02 2.43e-02 +2 2 2 2 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 4.16e-02 1.63e-02 +3 2 2 2 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 6.08e-02 2.15e-02 +4 2 2 2 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +5 2 1 Zr-90 nu-fission 0.00e+00 0.00e+00 +6 2 1 Zr-91 nu-fission 0.00e+00 0.00e+00 +7 2 1 Zr-92 nu-fission 0.00e+00 0.00e+00 +8 2 1 Zr-94 nu-fission 0.00e+00 0.00e+00 +9 2 1 Zr-96 nu-fission 0.00e+00 0.00e+00 +0 2 2 Zr-90 nu-fission 0.00e+00 0.00e+00 +1 2 2 Zr-91 nu-fission 0.00e+00 0.00e+00 +2 2 2 Zr-92 nu-fission 0.00e+00 0.00e+00 +3 2 2 Zr-94 nu-fission 0.00e+00 0.00e+00 +4 2 2 Zr-96 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +4 3 1 H-1 ((total - scatter-1) / flux) 2.07e-01 2.30e-02 +5 3 1 O-16 ((total - scatter-1) / flux) 7.93e-02 5.20e-03 +6 3 1 B-10 ((total - scatter-1) / flux) 5.21e-04 2.44e-04 +7 3 1 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +0 3 2 H-1 ((total - scatter-1) / flux) 1.28e+00 2.51e-01 +1 3 2 O-16 ((total - scatter-1) / flux) 8.54e-02 1.40e-02 +2 3 2 B-10 ((total - scatter-1) / flux) 4.92e-02 8.23e-03 +3 3 2 B-11 ((total - scatter-1) / flux) 1.95e-04 1.53e-03 material group in nuclide score mean std. dev. +4 3 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +5 3 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +6 3 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +7 3 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 +0 3 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +1 3 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +2 3 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +3 3 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +12 3 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 1.81e-01 2.21e-02 +13 3 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 7.86e-02 5.04e-03 +14 3 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +15 3 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +8 3 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 2.57e-02 1.58e-03 +9 3 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 5.21e-04 1.31e-04 +10 3 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +11 3 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +4 3 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +5 3 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +6 3 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +7 3 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 3 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 1.27e+00 2.51e-01 +1 3 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 8.54e-02 1.40e-02 +2 3 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +3 3 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 1.95e-04 1.53e-03 material group out nuclide score mean std. dev. +4 3 1 H-1 nu-fission 0.00e+00 0.00e+00 +5 3 1 O-16 nu-fission 0.00e+00 0.00e+00 +6 3 1 B-10 nu-fission 0.00e+00 0.00e+00 +7 3 1 B-11 nu-fission 0.00e+00 0.00e+00 +0 3 2 H-1 nu-fission 0.00e+00 0.00e+00 +1 3 2 O-16 nu-fission 0.00e+00 0.00e+00 +2 3 2 B-10 nu-fission 0.00e+00 0.00e+00 +3 3 2 B-11 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +4 4 1 H-1 ((total - scatter-1) / flux) 1.75e-01 5.37e-02 +5 4 1 O-16 ((total - scatter-1) / flux) 6.65e-02 1.01e-02 +6 4 1 B-10 ((total - scatter-1) / flux) 5.70e-04 3.52e-04 +7 4 1 B-11 ((total - scatter-1) / flux) 8.88e-05 3.46e-04 +0 4 2 H-1 ((total - scatter-1) / flux) 1.14e+00 3.65e-01 +1 4 2 O-16 ((total - scatter-1) / flux) 8.51e-02 2.81e-02 +2 4 2 B-10 ((total - scatter-1) / flux) 2.59e-02 7.28e-03 +3 4 2 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +4 4 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +5 4 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +6 4 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +7 4 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 +0 4 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +1 4 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +2 4 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +3 4 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +12 4 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 1.51e-01 5.15e-02 +13 4 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 6.65e-02 1.01e-02 +14 4 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +15 4 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 8.88e-05 3.46e-04 +8 4 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 2.37e-02 3.08e-03 +9 4 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +10 4 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +11 4 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +4 4 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +5 4 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +6 4 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +7 4 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 4 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 1.13e+00 3.62e-01 +1 4 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 8.51e-02 2.81e-02 +2 4 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +3 4 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +4 4 1 H-1 nu-fission 0.00e+00 0.00e+00 +5 4 1 O-16 nu-fission 0.00e+00 0.00e+00 +6 4 1 B-10 nu-fission 0.00e+00 0.00e+00 +7 4 1 B-11 nu-fission 0.00e+00 0.00e+00 +0 4 2 H-1 nu-fission 0.00e+00 0.00e+00 +1 4 2 O-16 nu-fission 0.00e+00 0.00e+00 +2 4 2 B-10 nu-fission 0.00e+00 0.00e+00 +3 4 2 B-11 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +27 5 1 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +28 5 1 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +29 5 1 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +30 5 1 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +31 5 1 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +32 5 1 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +33 5 1 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +34 5 1 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +35 5 1 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +36 5 1 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +37 5 1 Mo-92 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +38 5 1 Mo-94 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +39 5 1 Mo-95 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +40 5 1 Mo-96 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +41 5 1 Mo-97 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +42 5 1 Mo-98 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +43 5 1 Mo-100 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +44 5 1 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +45 5 1 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +46 5 1 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +47 5 1 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +48 5 1 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +49 5 1 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +50 5 1 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +51 5 1 C-Nat ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +52 5 1 Cu-63 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +53 5 1 Cu-65 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +0 5 2 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +1 5 2 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +2 5 2 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +3 5 2 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +4 5 2 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +5 5 2 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +6 5 2 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +7 5 2 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +8 5 2 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +9 5 2 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +10 5 2 Mo-92 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +11 5 2 Mo-94 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +12 5 2 Mo-95 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +13 5 2 Mo-96 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +14 5 2 Mo-97 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +15 5 2 Mo-98 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +16 5 2 Mo-100 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +17 5 2 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +18 5 2 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +19 5 2 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +20 5 2 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +21 5 2 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +22 5 2 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +23 5 2 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +24 5 2 C-Nat ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +25 5 2 Cu-63 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +26 5 2 Cu-65 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +27 5 1 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 +28 5 1 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 +29 5 1 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 +30 5 1 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 +31 5 1 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 +32 5 1 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 +33 5 1 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 +34 5 1 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 +35 5 1 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 +36 5 1 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 +37 5 1 Mo-92 (nu-fission / flux) 0.00e+00 0.00e+00 +38 5 1 Mo-94 (nu-fission / flux) 0.00e+00 0.00e+00 +39 5 1 Mo-95 (nu-fission / flux) 0.00e+00 0.00e+00 +40 5 1 Mo-96 (nu-fission / flux) 0.00e+00 0.00e+00 +41 5 1 Mo-97 (nu-fission / flux) 0.00e+00 0.00e+00 +42 5 1 Mo-98 (nu-fission / flux) 0.00e+00 0.00e+00 +43 5 1 Mo-100 (nu-fission / flux) 0.00e+00 0.00e+00 +44 5 1 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 +45 5 1 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 +46 5 1 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 +47 5 1 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 +48 5 1 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 +49 5 1 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 +50 5 1 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 +51 5 1 C-Nat (nu-fission / flux) 0.00e+00 0.00e+00 +52 5 1 Cu-63 (nu-fission / flux) 0.00e+00 0.00e+00 +53 5 1 Cu-65 (nu-fission / flux) 0.00e+00 0.00e+00 +0 5 2 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 +1 5 2 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 +2 5 2 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 +3 5 2 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 +4 5 2 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 +5 5 2 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 +6 5 2 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 +7 5 2 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 +8 5 2 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 +9 5 2 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 +10 5 2 Mo-92 (nu-fission / flux) 0.00e+00 0.00e+00 +11 5 2 Mo-94 (nu-fission / flux) 0.00e+00 0.00e+00 +12 5 2 Mo-95 (nu-fission / flux) 0.00e+00 0.00e+00 +13 5 2 Mo-96 (nu-fission / flux) 0.00e+00 0.00e+00 +14 5 2 Mo-97 (nu-fission / flux) 0.00e+00 0.00e+00 +15 5 2 Mo-98 (nu-fission / flux) 0.00e+00 0.00e+00 +16 5 2 Mo-100 (nu-fission / flux) 0.00e+00 0.00e+00 +17 5 2 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 +18 5 2 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 +19 5 2 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 +20 5 2 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 +21 5 2 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 +22 5 2 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 +23 5 2 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 +24 5 2 C-Nat (nu-fission / flux) 0.00e+00 0.00e+00 +25 5 2 Cu-63 (nu-fission / flux) 0.00e+00 0.00e+00 +26 5 2 Cu-65 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +81 5 1 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +82 5 1 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +83 5 1 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +84 5 1 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +85 5 1 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +86 5 1 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +87 5 1 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +88 5 1 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +89 5 1 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +90 5 1 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +91 5 1 1 Mo-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +92 5 1 1 Mo-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +93 5 1 1 Mo-95 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +94 5 1 1 Mo-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +95 5 1 1 Mo-97 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +96 5 1 1 Mo-98 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +97 5 1 1 Mo-100 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +98 5 1 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +99 5 1 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +100 5 1 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +101 5 1 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +102 5 1 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +103 5 1 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +104 5 1 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +105 5 1 1 C-Nat ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +106 5 1 1 Cu-63 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +107 5 1 1 Cu-65 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +54 5 1 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +55 5 1 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +56 5 1 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +57 5 1 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +58 5 1 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +59 5 1 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +60 5 1 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +61 5 1 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +62 5 1 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +63 5 1 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +64 5 1 2 Mo-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +65 5 1 2 Mo-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +66 5 1 2 Mo-95 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +67 5 1 2 Mo-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +68 5 1 2 Mo-97 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +69 5 1 2 Mo-98 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +70 5 1 2 Mo-100 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +71 5 1 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +72 5 1 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +73 5 1 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +74 5 1 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +75 5 1 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +76 5 1 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +77 5 1 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +78 5 1 2 C-Nat ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +79 5 1 2 Cu-63 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +80 5 1 2 Cu-65 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +27 5 2 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +28 5 2 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +29 5 2 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +30 5 2 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +31 5 2 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +32 5 2 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +33 5 2 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +34 5 2 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +35 5 2 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +36 5 2 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +37 5 2 1 Mo-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +38 5 2 1 Mo-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +39 5 2 1 Mo-95 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +40 5 2 1 Mo-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +41 5 2 1 Mo-97 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +42 5 2 1 Mo-98 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +43 5 2 1 Mo-100 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +44 5 2 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +45 5 2 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +46 5 2 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +47 5 2 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +48 5 2 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +49 5 2 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +50 5 2 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +51 5 2 1 C-Nat ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +52 5 2 1 Cu-63 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +53 5 2 1 Cu-65 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 5 2 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +1 5 2 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +2 5 2 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +3 5 2 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +4 5 2 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +5 5 2 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +6 5 2 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +7 5 2 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +8 5 2 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +9 5 2 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +10 5 2 2 Mo-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +11 5 2 2 Mo-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +12 5 2 2 Mo-95 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +13 5 2 2 Mo-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +14 5 2 2 Mo-97 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +15 5 2 2 Mo-98 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +16 5 2 2 Mo-100 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +17 5 2 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +18 5 2 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +19 5 2 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +20 5 2 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +21 5 2 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +22 5 2 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +23 5 2 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +24 5 2 2 C-Nat ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +25 5 2 2 Cu-63 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +26 5 2 2 Cu-65 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +27 5 1 Fe-54 nu-fission 0.00e+00 0.00e+00 +28 5 1 Fe-56 nu-fission 0.00e+00 0.00e+00 +29 5 1 Fe-57 nu-fission 0.00e+00 0.00e+00 +30 5 1 Fe-58 nu-fission 0.00e+00 0.00e+00 +31 5 1 Ni-58 nu-fission 0.00e+00 0.00e+00 +32 5 1 Ni-60 nu-fission 0.00e+00 0.00e+00 +33 5 1 Ni-61 nu-fission 0.00e+00 0.00e+00 +34 5 1 Ni-62 nu-fission 0.00e+00 0.00e+00 +35 5 1 Ni-64 nu-fission 0.00e+00 0.00e+00 +36 5 1 Mn-55 nu-fission 0.00e+00 0.00e+00 +37 5 1 Mo-92 nu-fission 0.00e+00 0.00e+00 +38 5 1 Mo-94 nu-fission 0.00e+00 0.00e+00 +39 5 1 Mo-95 nu-fission 0.00e+00 0.00e+00 +40 5 1 Mo-96 nu-fission 0.00e+00 0.00e+00 +41 5 1 Mo-97 nu-fission 0.00e+00 0.00e+00 +42 5 1 Mo-98 nu-fission 0.00e+00 0.00e+00 +43 5 1 Mo-100 nu-fission 0.00e+00 0.00e+00 +44 5 1 Si-28 nu-fission 0.00e+00 0.00e+00 +45 5 1 Si-29 nu-fission 0.00e+00 0.00e+00 +46 5 1 Si-30 nu-fission 0.00e+00 0.00e+00 +47 5 1 Cr-50 nu-fission 0.00e+00 0.00e+00 +48 5 1 Cr-52 nu-fission 0.00e+00 0.00e+00 +49 5 1 Cr-53 nu-fission 0.00e+00 0.00e+00 +50 5 1 Cr-54 nu-fission 0.00e+00 0.00e+00 +51 5 1 C-Nat nu-fission 0.00e+00 0.00e+00 +52 5 1 Cu-63 nu-fission 0.00e+00 0.00e+00 +53 5 1 Cu-65 nu-fission 0.00e+00 0.00e+00 +0 5 2 Fe-54 nu-fission 0.00e+00 0.00e+00 +1 5 2 Fe-56 nu-fission 0.00e+00 0.00e+00 +2 5 2 Fe-57 nu-fission 0.00e+00 0.00e+00 +3 5 2 Fe-58 nu-fission 0.00e+00 0.00e+00 +4 5 2 Ni-58 nu-fission 0.00e+00 0.00e+00 +5 5 2 Ni-60 nu-fission 0.00e+00 0.00e+00 +6 5 2 Ni-61 nu-fission 0.00e+00 0.00e+00 +7 5 2 Ni-62 nu-fission 0.00e+00 0.00e+00 +8 5 2 Ni-64 nu-fission 0.00e+00 0.00e+00 +9 5 2 Mn-55 nu-fission 0.00e+00 0.00e+00 +10 5 2 Mo-92 nu-fission 0.00e+00 0.00e+00 +11 5 2 Mo-94 nu-fission 0.00e+00 0.00e+00 +12 5 2 Mo-95 nu-fission 0.00e+00 0.00e+00 +13 5 2 Mo-96 nu-fission 0.00e+00 0.00e+00 +14 5 2 Mo-97 nu-fission 0.00e+00 0.00e+00 +15 5 2 Mo-98 nu-fission 0.00e+00 0.00e+00 +16 5 2 Mo-100 nu-fission 0.00e+00 0.00e+00 +17 5 2 Si-28 nu-fission 0.00e+00 0.00e+00 +18 5 2 Si-29 nu-fission 0.00e+00 0.00e+00 +19 5 2 Si-30 nu-fission 0.00e+00 0.00e+00 +20 5 2 Cr-50 nu-fission 0.00e+00 0.00e+00 +21 5 2 Cr-52 nu-fission 0.00e+00 0.00e+00 +22 5 2 Cr-53 nu-fission 0.00e+00 0.00e+00 +23 5 2 Cr-54 nu-fission 0.00e+00 0.00e+00 +24 5 2 C-Nat nu-fission 0.00e+00 0.00e+00 +25 5 2 Cu-63 nu-fission 0.00e+00 0.00e+00 +26 5 2 Cu-65 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +21 6 1 H-1 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +22 6 1 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +23 6 1 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +24 6 1 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +25 6 1 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +26 6 1 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +27 6 1 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +28 6 1 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +29 6 1 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +30 6 1 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +31 6 1 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +32 6 1 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +33 6 1 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +34 6 1 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +35 6 1 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +36 6 1 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +37 6 1 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +38 6 1 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +39 6 1 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +40 6 1 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +41 6 1 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +0 6 2 H-1 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +1 6 2 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +2 6 2 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +3 6 2 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +4 6 2 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +5 6 2 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +6 6 2 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +7 6 2 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +8 6 2 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +9 6 2 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +10 6 2 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +11 6 2 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +12 6 2 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +13 6 2 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +14 6 2 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +15 6 2 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +16 6 2 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +17 6 2 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +18 6 2 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +19 6 2 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +20 6 2 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +21 6 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +22 6 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +23 6 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +24 6 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 +25 6 1 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 +26 6 1 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 +27 6 1 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 +28 6 1 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 +29 6 1 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 +30 6 1 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 +31 6 1 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 +32 6 1 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 +33 6 1 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 +34 6 1 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 +35 6 1 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 +36 6 1 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 +37 6 1 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 +38 6 1 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 +39 6 1 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 +40 6 1 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 +41 6 1 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 +0 6 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +1 6 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +2 6 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +3 6 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 +4 6 2 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 +5 6 2 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 +6 6 2 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 +7 6 2 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 +8 6 2 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 +9 6 2 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 +10 6 2 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 +11 6 2 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 +12 6 2 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 +13 6 2 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 +14 6 2 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 +15 6 2 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 +16 6 2 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 +17 6 2 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 +18 6 2 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 +19 6 2 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 +20 6 2 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +63 6 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +64 6 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +65 6 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +66 6 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +67 6 1 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +68 6 1 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +69 6 1 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +70 6 1 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +71 6 1 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +72 6 1 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +73 6 1 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +74 6 1 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +75 6 1 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +76 6 1 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +77 6 1 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +78 6 1 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +79 6 1 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +80 6 1 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +81 6 1 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +82 6 1 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +83 6 1 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +42 6 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +43 6 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +44 6 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +45 6 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +46 6 1 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +47 6 1 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +48 6 1 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +49 6 1 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +50 6 1 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +51 6 1 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +52 6 1 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +53 6 1 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +54 6 1 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +55 6 1 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +56 6 1 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +57 6 1 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +58 6 1 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +59 6 1 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +60 6 1 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +61 6 1 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +62 6 1 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +21 6 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +22 6 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +23 6 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +24 6 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +25 6 2 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +26 6 2 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +27 6 2 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +28 6 2 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +29 6 2 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +30 6 2 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +31 6 2 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +32 6 2 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +33 6 2 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +34 6 2 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +35 6 2 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +36 6 2 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +37 6 2 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +38 6 2 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +39 6 2 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +40 6 2 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +41 6 2 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 6 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +1 6 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +2 6 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +3 6 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +4 6 2 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +5 6 2 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +6 6 2 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +7 6 2 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +8 6 2 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +9 6 2 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +10 6 2 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +11 6 2 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +12 6 2 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +13 6 2 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +14 6 2 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +15 6 2 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +16 6 2 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +17 6 2 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +18 6 2 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +19 6 2 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +20 6 2 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +21 6 1 H-1 nu-fission 0.00e+00 0.00e+00 +22 6 1 O-16 nu-fission 0.00e+00 0.00e+00 +23 6 1 B-10 nu-fission 0.00e+00 0.00e+00 +24 6 1 B-11 nu-fission 0.00e+00 0.00e+00 +25 6 1 Fe-54 nu-fission 0.00e+00 0.00e+00 +26 6 1 Fe-56 nu-fission 0.00e+00 0.00e+00 +27 6 1 Fe-57 nu-fission 0.00e+00 0.00e+00 +28 6 1 Fe-58 nu-fission 0.00e+00 0.00e+00 +29 6 1 Ni-58 nu-fission 0.00e+00 0.00e+00 +30 6 1 Ni-60 nu-fission 0.00e+00 0.00e+00 +31 6 1 Ni-61 nu-fission 0.00e+00 0.00e+00 +32 6 1 Ni-62 nu-fission 0.00e+00 0.00e+00 +33 6 1 Ni-64 nu-fission 0.00e+00 0.00e+00 +34 6 1 Mn-55 nu-fission 0.00e+00 0.00e+00 +35 6 1 Si-28 nu-fission 0.00e+00 0.00e+00 +36 6 1 Si-29 nu-fission 0.00e+00 0.00e+00 +37 6 1 Si-30 nu-fission 0.00e+00 0.00e+00 +38 6 1 Cr-50 nu-fission 0.00e+00 0.00e+00 +39 6 1 Cr-52 nu-fission 0.00e+00 0.00e+00 +40 6 1 Cr-53 nu-fission 0.00e+00 0.00e+00 +41 6 1 Cr-54 nu-fission 0.00e+00 0.00e+00 +0 6 2 H-1 nu-fission 0.00e+00 0.00e+00 +1 6 2 O-16 nu-fission 0.00e+00 0.00e+00 +2 6 2 B-10 nu-fission 0.00e+00 0.00e+00 +3 6 2 B-11 nu-fission 0.00e+00 0.00e+00 +4 6 2 Fe-54 nu-fission 0.00e+00 0.00e+00 +5 6 2 Fe-56 nu-fission 0.00e+00 0.00e+00 +6 6 2 Fe-57 nu-fission 0.00e+00 0.00e+00 +7 6 2 Fe-58 nu-fission 0.00e+00 0.00e+00 +8 6 2 Ni-58 nu-fission 0.00e+00 0.00e+00 +9 6 2 Ni-60 nu-fission 0.00e+00 0.00e+00 +10 6 2 Ni-61 nu-fission 0.00e+00 0.00e+00 +11 6 2 Ni-62 nu-fission 0.00e+00 0.00e+00 +12 6 2 Ni-64 nu-fission 0.00e+00 0.00e+00 +13 6 2 Mn-55 nu-fission 0.00e+00 0.00e+00 +14 6 2 Si-28 nu-fission 0.00e+00 0.00e+00 +15 6 2 Si-29 nu-fission 0.00e+00 0.00e+00 +16 6 2 Si-30 nu-fission 0.00e+00 0.00e+00 +17 6 2 Cr-50 nu-fission 0.00e+00 0.00e+00 +18 6 2 Cr-52 nu-fission 0.00e+00 0.00e+00 +19 6 2 Cr-53 nu-fission 0.00e+00 0.00e+00 +20 6 2 Cr-54 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +21 7 1 H-1 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +22 7 1 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +23 7 1 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +24 7 1 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +25 7 1 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +26 7 1 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +27 7 1 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +28 7 1 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +29 7 1 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +30 7 1 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +31 7 1 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +32 7 1 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +33 7 1 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +34 7 1 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +35 7 1 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +36 7 1 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +37 7 1 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +38 7 1 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +39 7 1 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +40 7 1 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +41 7 1 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +0 7 2 H-1 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +1 7 2 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +2 7 2 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +3 7 2 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +4 7 2 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +5 7 2 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +6 7 2 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +7 7 2 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +8 7 2 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +9 7 2 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +10 7 2 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +11 7 2 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +12 7 2 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +13 7 2 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +14 7 2 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +15 7 2 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +16 7 2 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +17 7 2 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +18 7 2 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +19 7 2 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +20 7 2 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +21 7 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +22 7 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +23 7 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +24 7 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 +25 7 1 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 +26 7 1 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 +27 7 1 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 +28 7 1 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 +29 7 1 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 +30 7 1 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 +31 7 1 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 +32 7 1 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 +33 7 1 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 +34 7 1 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 +35 7 1 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 +36 7 1 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 +37 7 1 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 +38 7 1 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 +39 7 1 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 +40 7 1 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 +41 7 1 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 +0 7 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +1 7 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +2 7 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +3 7 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 +4 7 2 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 +5 7 2 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 +6 7 2 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 +7 7 2 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 +8 7 2 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 +9 7 2 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 +10 7 2 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 +11 7 2 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 +12 7 2 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 +13 7 2 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 +14 7 2 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 +15 7 2 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 +16 7 2 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 +17 7 2 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 +18 7 2 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 +19 7 2 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 +20 7 2 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +63 7 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +64 7 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +65 7 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +66 7 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +67 7 1 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +68 7 1 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +69 7 1 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +70 7 1 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +71 7 1 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +72 7 1 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +73 7 1 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +74 7 1 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +75 7 1 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +76 7 1 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +77 7 1 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +78 7 1 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +79 7 1 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +80 7 1 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +81 7 1 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +82 7 1 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +83 7 1 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +42 7 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +43 7 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +44 7 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +45 7 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +46 7 1 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +47 7 1 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +48 7 1 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +49 7 1 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +50 7 1 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +51 7 1 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +52 7 1 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +53 7 1 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +54 7 1 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +55 7 1 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +56 7 1 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +57 7 1 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +58 7 1 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +59 7 1 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +60 7 1 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +61 7 1 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +62 7 1 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +21 7 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +22 7 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +23 7 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +24 7 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +25 7 2 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +26 7 2 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +27 7 2 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +28 7 2 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +29 7 2 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +30 7 2 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +31 7 2 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +32 7 2 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +33 7 2 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +34 7 2 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +35 7 2 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +36 7 2 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +37 7 2 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +38 7 2 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +39 7 2 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +40 7 2 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +41 7 2 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 7 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +1 7 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +2 7 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +3 7 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +4 7 2 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +5 7 2 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +6 7 2 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +7 7 2 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +8 7 2 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +9 7 2 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +10 7 2 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +11 7 2 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +12 7 2 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +13 7 2 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +14 7 2 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +15 7 2 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +16 7 2 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +17 7 2 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +18 7 2 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +19 7 2 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +20 7 2 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +21 7 1 H-1 nu-fission 0.00e+00 0.00e+00 +22 7 1 O-16 nu-fission 0.00e+00 0.00e+00 +23 7 1 B-10 nu-fission 0.00e+00 0.00e+00 +24 7 1 B-11 nu-fission 0.00e+00 0.00e+00 +25 7 1 Fe-54 nu-fission 0.00e+00 0.00e+00 +26 7 1 Fe-56 nu-fission 0.00e+00 0.00e+00 +27 7 1 Fe-57 nu-fission 0.00e+00 0.00e+00 +28 7 1 Fe-58 nu-fission 0.00e+00 0.00e+00 +29 7 1 Ni-58 nu-fission 0.00e+00 0.00e+00 +30 7 1 Ni-60 nu-fission 0.00e+00 0.00e+00 +31 7 1 Ni-61 nu-fission 0.00e+00 0.00e+00 +32 7 1 Ni-62 nu-fission 0.00e+00 0.00e+00 +33 7 1 Ni-64 nu-fission 0.00e+00 0.00e+00 +34 7 1 Mn-55 nu-fission 0.00e+00 0.00e+00 +35 7 1 Si-28 nu-fission 0.00e+00 0.00e+00 +36 7 1 Si-29 nu-fission 0.00e+00 0.00e+00 +37 7 1 Si-30 nu-fission 0.00e+00 0.00e+00 +38 7 1 Cr-50 nu-fission 0.00e+00 0.00e+00 +39 7 1 Cr-52 nu-fission 0.00e+00 0.00e+00 +40 7 1 Cr-53 nu-fission 0.00e+00 0.00e+00 +41 7 1 Cr-54 nu-fission 0.00e+00 0.00e+00 +0 7 2 H-1 nu-fission 0.00e+00 0.00e+00 +1 7 2 O-16 nu-fission 0.00e+00 0.00e+00 +2 7 2 B-10 nu-fission 0.00e+00 0.00e+00 +3 7 2 B-11 nu-fission 0.00e+00 0.00e+00 +4 7 2 Fe-54 nu-fission 0.00e+00 0.00e+00 +5 7 2 Fe-56 nu-fission 0.00e+00 0.00e+00 +6 7 2 Fe-57 nu-fission 0.00e+00 0.00e+00 +7 7 2 Fe-58 nu-fission 0.00e+00 0.00e+00 +8 7 2 Ni-58 nu-fission 0.00e+00 0.00e+00 +9 7 2 Ni-60 nu-fission 0.00e+00 0.00e+00 +10 7 2 Ni-61 nu-fission 0.00e+00 0.00e+00 +11 7 2 Ni-62 nu-fission 0.00e+00 0.00e+00 +12 7 2 Ni-64 nu-fission 0.00e+00 0.00e+00 +13 7 2 Mn-55 nu-fission 0.00e+00 0.00e+00 +14 7 2 Si-28 nu-fission 0.00e+00 0.00e+00 +15 7 2 Si-29 nu-fission 0.00e+00 0.00e+00 +16 7 2 Si-30 nu-fission 0.00e+00 0.00e+00 +17 7 2 Cr-50 nu-fission 0.00e+00 0.00e+00 +18 7 2 Cr-52 nu-fission 0.00e+00 0.00e+00 +19 7 2 Cr-53 nu-fission 0.00e+00 0.00e+00 +20 7 2 Cr-54 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +21 8 1 H-1 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +22 8 1 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +23 8 1 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +24 8 1 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +25 8 1 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +26 8 1 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +27 8 1 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +28 8 1 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +29 8 1 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +30 8 1 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +31 8 1 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +32 8 1 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +33 8 1 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +34 8 1 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +35 8 1 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +36 8 1 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +37 8 1 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +38 8 1 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +39 8 1 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +40 8 1 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +41 8 1 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +0 8 2 H-1 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +1 8 2 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +2 8 2 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +3 8 2 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +4 8 2 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +5 8 2 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +6 8 2 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +7 8 2 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +8 8 2 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +9 8 2 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +10 8 2 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +11 8 2 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +12 8 2 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +13 8 2 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +14 8 2 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +15 8 2 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +16 8 2 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +17 8 2 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +18 8 2 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +19 8 2 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +20 8 2 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +21 8 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +22 8 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +23 8 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +24 8 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 +25 8 1 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 +26 8 1 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 +27 8 1 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 +28 8 1 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 +29 8 1 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 +30 8 1 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 +31 8 1 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 +32 8 1 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 +33 8 1 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 +34 8 1 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 +35 8 1 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 +36 8 1 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 +37 8 1 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 +38 8 1 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 +39 8 1 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 +40 8 1 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 +41 8 1 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 +0 8 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +1 8 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +2 8 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +3 8 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 +4 8 2 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 +5 8 2 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 +6 8 2 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 +7 8 2 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 +8 8 2 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 +9 8 2 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 +10 8 2 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 +11 8 2 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 +12 8 2 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 +13 8 2 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 +14 8 2 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 +15 8 2 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 +16 8 2 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 +17 8 2 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 +18 8 2 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 +19 8 2 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 +20 8 2 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +63 8 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +64 8 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +65 8 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +66 8 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +67 8 1 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +68 8 1 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +69 8 1 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +70 8 1 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +71 8 1 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +72 8 1 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +73 8 1 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +74 8 1 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +75 8 1 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +76 8 1 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +77 8 1 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +78 8 1 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +79 8 1 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +80 8 1 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +81 8 1 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +82 8 1 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +83 8 1 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +42 8 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +43 8 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +44 8 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +45 8 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +46 8 1 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +47 8 1 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +48 8 1 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +49 8 1 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +50 8 1 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +51 8 1 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +52 8 1 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +53 8 1 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +54 8 1 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +55 8 1 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +56 8 1 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +57 8 1 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +58 8 1 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +59 8 1 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +60 8 1 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +61 8 1 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +62 8 1 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +21 8 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +22 8 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +23 8 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +24 8 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +25 8 2 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +26 8 2 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +27 8 2 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +28 8 2 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +29 8 2 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +30 8 2 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +31 8 2 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +32 8 2 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +33 8 2 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +34 8 2 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +35 8 2 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +36 8 2 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +37 8 2 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +38 8 2 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +39 8 2 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +40 8 2 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +41 8 2 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 8 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +1 8 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +2 8 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +3 8 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +4 8 2 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +5 8 2 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +6 8 2 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +7 8 2 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +8 8 2 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +9 8 2 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +10 8 2 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +11 8 2 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +12 8 2 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +13 8 2 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +14 8 2 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +15 8 2 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +16 8 2 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +17 8 2 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +18 8 2 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +19 8 2 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +20 8 2 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +21 8 1 H-1 nu-fission 0.00e+00 0.00e+00 +22 8 1 O-16 nu-fission 0.00e+00 0.00e+00 +23 8 1 B-10 nu-fission 0.00e+00 0.00e+00 +24 8 1 B-11 nu-fission 0.00e+00 0.00e+00 +25 8 1 Fe-54 nu-fission 0.00e+00 0.00e+00 +26 8 1 Fe-56 nu-fission 0.00e+00 0.00e+00 +27 8 1 Fe-57 nu-fission 0.00e+00 0.00e+00 +28 8 1 Fe-58 nu-fission 0.00e+00 0.00e+00 +29 8 1 Ni-58 nu-fission 0.00e+00 0.00e+00 +30 8 1 Ni-60 nu-fission 0.00e+00 0.00e+00 +31 8 1 Ni-61 nu-fission 0.00e+00 0.00e+00 +32 8 1 Ni-62 nu-fission 0.00e+00 0.00e+00 +33 8 1 Ni-64 nu-fission 0.00e+00 0.00e+00 +34 8 1 Mn-55 nu-fission 0.00e+00 0.00e+00 +35 8 1 Si-28 nu-fission 0.00e+00 0.00e+00 +36 8 1 Si-29 nu-fission 0.00e+00 0.00e+00 +37 8 1 Si-30 nu-fission 0.00e+00 0.00e+00 +38 8 1 Cr-50 nu-fission 0.00e+00 0.00e+00 +39 8 1 Cr-52 nu-fission 0.00e+00 0.00e+00 +40 8 1 Cr-53 nu-fission 0.00e+00 0.00e+00 +41 8 1 Cr-54 nu-fission 0.00e+00 0.00e+00 +0 8 2 H-1 nu-fission 0.00e+00 0.00e+00 +1 8 2 O-16 nu-fission 0.00e+00 0.00e+00 +2 8 2 B-10 nu-fission 0.00e+00 0.00e+00 +3 8 2 B-11 nu-fission 0.00e+00 0.00e+00 +4 8 2 Fe-54 nu-fission 0.00e+00 0.00e+00 +5 8 2 Fe-56 nu-fission 0.00e+00 0.00e+00 +6 8 2 Fe-57 nu-fission 0.00e+00 0.00e+00 +7 8 2 Fe-58 nu-fission 0.00e+00 0.00e+00 +8 8 2 Ni-58 nu-fission 0.00e+00 0.00e+00 +9 8 2 Ni-60 nu-fission 0.00e+00 0.00e+00 +10 8 2 Ni-61 nu-fission 0.00e+00 0.00e+00 +11 8 2 Ni-62 nu-fission 0.00e+00 0.00e+00 +12 8 2 Ni-64 nu-fission 0.00e+00 0.00e+00 +13 8 2 Mn-55 nu-fission 0.00e+00 0.00e+00 +14 8 2 Si-28 nu-fission 0.00e+00 0.00e+00 +15 8 2 Si-29 nu-fission 0.00e+00 0.00e+00 +16 8 2 Si-30 nu-fission 0.00e+00 0.00e+00 +17 8 2 Cr-50 nu-fission 0.00e+00 0.00e+00 +18 8 2 Cr-52 nu-fission 0.00e+00 0.00e+00 +19 8 2 Cr-53 nu-fission 0.00e+00 0.00e+00 +20 8 2 Cr-54 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +21 9 1 H-1 ((total - scatter-1) / flux) 1.51e-01 4.81e-01 +22 9 1 O-16 ((total - scatter-1) / flux) 1.16e-01 1.14e-01 +23 9 1 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +24 9 1 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +25 9 1 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +26 9 1 Fe-56 ((total - scatter-1) / flux) 1.86e-01 2.00e-01 +27 9 1 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +28 9 1 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +29 9 1 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +30 9 1 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +31 9 1 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +32 9 1 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +33 9 1 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +34 9 1 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +35 9 1 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +36 9 1 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +37 9 1 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +38 9 1 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +39 9 1 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +40 9 1 Cr-53 ((total - scatter-1) / flux) 1.47e-01 1.40e-01 +41 9 1 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +0 9 2 H-1 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +1 9 2 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +2 9 2 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +3 9 2 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +4 9 2 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +5 9 2 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +6 9 2 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +7 9 2 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +8 9 2 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +9 9 2 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +10 9 2 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +11 9 2 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +12 9 2 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +13 9 2 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +14 9 2 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +15 9 2 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +16 9 2 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +17 9 2 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +18 9 2 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +19 9 2 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +20 9 2 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +21 9 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +22 9 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +23 9 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +24 9 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 +25 9 1 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 +26 9 1 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 +27 9 1 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 +28 9 1 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 +29 9 1 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 +30 9 1 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 +31 9 1 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 +32 9 1 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 +33 9 1 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 +34 9 1 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 +35 9 1 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 +36 9 1 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 +37 9 1 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 +38 9 1 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 +39 9 1 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 +40 9 1 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 +41 9 1 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 +0 9 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +1 9 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +2 9 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +3 9 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 +4 9 2 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 +5 9 2 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 +6 9 2 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 +7 9 2 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 +8 9 2 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 +9 9 2 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 +10 9 2 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 +11 9 2 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 +12 9 2 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 +13 9 2 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 +14 9 2 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 +15 9 2 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 +16 9 2 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 +17 9 2 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 +18 9 2 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 +19 9 2 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 +20 9 2 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +63 9 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 1.51e-01 4.81e-01 +64 9 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 1.16e-01 1.14e-01 +65 9 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +66 9 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +67 9 1 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +68 9 1 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 1.86e-01 2.00e-01 +69 9 1 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +70 9 1 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +71 9 1 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +72 9 1 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +73 9 1 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +74 9 1 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +75 9 1 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +76 9 1 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +77 9 1 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +78 9 1 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +79 9 1 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +80 9 1 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +81 9 1 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +82 9 1 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 1.47e-01 1.40e-01 +83 9 1 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +42 9 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +43 9 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +44 9 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +45 9 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +46 9 1 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +47 9 1 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +48 9 1 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +49 9 1 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +50 9 1 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +51 9 1 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +52 9 1 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +53 9 1 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +54 9 1 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +55 9 1 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +56 9 1 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +57 9 1 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +58 9 1 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +59 9 1 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +60 9 1 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +61 9 1 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +62 9 1 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +21 9 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +22 9 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +23 9 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +24 9 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +25 9 2 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +26 9 2 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +27 9 2 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +28 9 2 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +29 9 2 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +30 9 2 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +31 9 2 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +32 9 2 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +33 9 2 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +34 9 2 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +35 9 2 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +36 9 2 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +37 9 2 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +38 9 2 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +39 9 2 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +40 9 2 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +41 9 2 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 9 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +1 9 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +2 9 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +3 9 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +4 9 2 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +5 9 2 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +6 9 2 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +7 9 2 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +8 9 2 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +9 9 2 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +10 9 2 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +11 9 2 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +12 9 2 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +13 9 2 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +14 9 2 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +15 9 2 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +16 9 2 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +17 9 2 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +18 9 2 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +19 9 2 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +20 9 2 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +21 9 1 H-1 nu-fission 0.00e+00 0.00e+00 +22 9 1 O-16 nu-fission 0.00e+00 0.00e+00 +23 9 1 B-10 nu-fission 0.00e+00 0.00e+00 +24 9 1 B-11 nu-fission 0.00e+00 0.00e+00 +25 9 1 Fe-54 nu-fission 0.00e+00 0.00e+00 +26 9 1 Fe-56 nu-fission 0.00e+00 0.00e+00 +27 9 1 Fe-57 nu-fission 0.00e+00 0.00e+00 +28 9 1 Fe-58 nu-fission 0.00e+00 0.00e+00 +29 9 1 Ni-58 nu-fission 0.00e+00 0.00e+00 +30 9 1 Ni-60 nu-fission 0.00e+00 0.00e+00 +31 9 1 Ni-61 nu-fission 0.00e+00 0.00e+00 +32 9 1 Ni-62 nu-fission 0.00e+00 0.00e+00 +33 9 1 Ni-64 nu-fission 0.00e+00 0.00e+00 +34 9 1 Mn-55 nu-fission 0.00e+00 0.00e+00 +35 9 1 Si-28 nu-fission 0.00e+00 0.00e+00 +36 9 1 Si-29 nu-fission 0.00e+00 0.00e+00 +37 9 1 Si-30 nu-fission 0.00e+00 0.00e+00 +38 9 1 Cr-50 nu-fission 0.00e+00 0.00e+00 +39 9 1 Cr-52 nu-fission 0.00e+00 0.00e+00 +40 9 1 Cr-53 nu-fission 0.00e+00 0.00e+00 +41 9 1 Cr-54 nu-fission 0.00e+00 0.00e+00 +0 9 2 H-1 nu-fission 0.00e+00 0.00e+00 +1 9 2 O-16 nu-fission 0.00e+00 0.00e+00 +2 9 2 B-10 nu-fission 0.00e+00 0.00e+00 +3 9 2 B-11 nu-fission 0.00e+00 0.00e+00 +4 9 2 Fe-54 nu-fission 0.00e+00 0.00e+00 +5 9 2 Fe-56 nu-fission 0.00e+00 0.00e+00 +6 9 2 Fe-57 nu-fission 0.00e+00 0.00e+00 +7 9 2 Fe-58 nu-fission 0.00e+00 0.00e+00 +8 9 2 Ni-58 nu-fission 0.00e+00 0.00e+00 +9 9 2 Ni-60 nu-fission 0.00e+00 0.00e+00 +10 9 2 Ni-61 nu-fission 0.00e+00 0.00e+00 +11 9 2 Ni-62 nu-fission 0.00e+00 0.00e+00 +12 9 2 Ni-64 nu-fission 0.00e+00 0.00e+00 +13 9 2 Mn-55 nu-fission 0.00e+00 0.00e+00 +14 9 2 Si-28 nu-fission 0.00e+00 0.00e+00 +15 9 2 Si-29 nu-fission 0.00e+00 0.00e+00 +16 9 2 Si-30 nu-fission 0.00e+00 0.00e+00 +17 9 2 Cr-50 nu-fission 0.00e+00 0.00e+00 +18 9 2 Cr-52 nu-fission 0.00e+00 0.00e+00 +19 9 2 Cr-53 nu-fission 0.00e+00 0.00e+00 +20 9 2 Cr-54 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +21 10 1 H-1 ((total - scatter-1) / flux) 1.24e-01 5.41e-01 +22 10 1 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +23 10 1 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +24 10 1 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +25 10 1 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +26 10 1 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +27 10 1 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +28 10 1 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +29 10 1 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +30 10 1 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +31 10 1 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +32 10 1 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +33 10 1 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +34 10 1 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +35 10 1 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +36 10 1 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +37 10 1 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +38 10 1 Cr-50 ((total - scatter-1) / flux) 1.12e-01 1.38e-01 +39 10 1 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +40 10 1 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +41 10 1 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +0 10 2 H-1 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +1 10 2 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +2 10 2 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +3 10 2 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +4 10 2 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +5 10 2 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +6 10 2 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +7 10 2 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +8 10 2 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +9 10 2 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +10 10 2 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +11 10 2 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +12 10 2 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +13 10 2 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +14 10 2 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +15 10 2 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +16 10 2 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +17 10 2 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +18 10 2 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +19 10 2 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +20 10 2 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +21 10 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +22 10 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +23 10 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +24 10 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 +25 10 1 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 +26 10 1 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 +27 10 1 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 +28 10 1 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 +29 10 1 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 +30 10 1 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 +31 10 1 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 +32 10 1 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 +33 10 1 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 +34 10 1 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 +35 10 1 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 +36 10 1 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 +37 10 1 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 +38 10 1 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 +39 10 1 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 +40 10 1 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 +41 10 1 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 +0 10 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +1 10 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +2 10 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +3 10 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 +4 10 2 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 +5 10 2 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 +6 10 2 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 +7 10 2 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 +8 10 2 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 +9 10 2 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 +10 10 2 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 +11 10 2 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 +12 10 2 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 +13 10 2 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 +14 10 2 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 +15 10 2 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 +16 10 2 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 +17 10 2 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 +18 10 2 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 +19 10 2 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 +20 10 2 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +63 10 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 1.24e-01 5.41e-01 +64 10 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +65 10 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +66 10 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +67 10 1 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +68 10 1 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +69 10 1 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +70 10 1 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +71 10 1 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +72 10 1 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +73 10 1 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +74 10 1 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +75 10 1 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +76 10 1 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +77 10 1 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +78 10 1 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +79 10 1 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +80 10 1 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 1.12e-01 1.38e-01 +81 10 1 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +82 10 1 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +83 10 1 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +42 10 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +43 10 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +44 10 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +45 10 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +46 10 1 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +47 10 1 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +48 10 1 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +49 10 1 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +50 10 1 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +51 10 1 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +52 10 1 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +53 10 1 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +54 10 1 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +55 10 1 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +56 10 1 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +57 10 1 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +58 10 1 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +59 10 1 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +60 10 1 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +61 10 1 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +62 10 1 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +21 10 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +22 10 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +23 10 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +24 10 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +25 10 2 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +26 10 2 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +27 10 2 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +28 10 2 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +29 10 2 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +30 10 2 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +31 10 2 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +32 10 2 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +33 10 2 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +34 10 2 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +35 10 2 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +36 10 2 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +37 10 2 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +38 10 2 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +39 10 2 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +40 10 2 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +41 10 2 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 10 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +1 10 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +2 10 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +3 10 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +4 10 2 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +5 10 2 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +6 10 2 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +7 10 2 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +8 10 2 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +9 10 2 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +10 10 2 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +11 10 2 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +12 10 2 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +13 10 2 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +14 10 2 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +15 10 2 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +16 10 2 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +17 10 2 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +18 10 2 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +19 10 2 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +20 10 2 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +21 10 1 H-1 nu-fission 0.00e+00 0.00e+00 +22 10 1 O-16 nu-fission 0.00e+00 0.00e+00 +23 10 1 B-10 nu-fission 0.00e+00 0.00e+00 +24 10 1 B-11 nu-fission 0.00e+00 0.00e+00 +25 10 1 Fe-54 nu-fission 0.00e+00 0.00e+00 +26 10 1 Fe-56 nu-fission 0.00e+00 0.00e+00 +27 10 1 Fe-57 nu-fission 0.00e+00 0.00e+00 +28 10 1 Fe-58 nu-fission 0.00e+00 0.00e+00 +29 10 1 Ni-58 nu-fission 0.00e+00 0.00e+00 +30 10 1 Ni-60 nu-fission 0.00e+00 0.00e+00 +31 10 1 Ni-61 nu-fission 0.00e+00 0.00e+00 +32 10 1 Ni-62 nu-fission 0.00e+00 0.00e+00 +33 10 1 Ni-64 nu-fission 0.00e+00 0.00e+00 +34 10 1 Mn-55 nu-fission 0.00e+00 0.00e+00 +35 10 1 Si-28 nu-fission 0.00e+00 0.00e+00 +36 10 1 Si-29 nu-fission 0.00e+00 0.00e+00 +37 10 1 Si-30 nu-fission 0.00e+00 0.00e+00 +38 10 1 Cr-50 nu-fission 0.00e+00 0.00e+00 +39 10 1 Cr-52 nu-fission 0.00e+00 0.00e+00 +40 10 1 Cr-53 nu-fission 0.00e+00 0.00e+00 +41 10 1 Cr-54 nu-fission 0.00e+00 0.00e+00 +0 10 2 H-1 nu-fission 0.00e+00 0.00e+00 +1 10 2 O-16 nu-fission 0.00e+00 0.00e+00 +2 10 2 B-10 nu-fission 0.00e+00 0.00e+00 +3 10 2 B-11 nu-fission 0.00e+00 0.00e+00 +4 10 2 Fe-54 nu-fission 0.00e+00 0.00e+00 +5 10 2 Fe-56 nu-fission 0.00e+00 0.00e+00 +6 10 2 Fe-57 nu-fission 0.00e+00 0.00e+00 +7 10 2 Fe-58 nu-fission 0.00e+00 0.00e+00 +8 10 2 Ni-58 nu-fission 0.00e+00 0.00e+00 +9 10 2 Ni-60 nu-fission 0.00e+00 0.00e+00 +10 10 2 Ni-61 nu-fission 0.00e+00 0.00e+00 +11 10 2 Ni-62 nu-fission 0.00e+00 0.00e+00 +12 10 2 Ni-64 nu-fission 0.00e+00 0.00e+00 +13 10 2 Mn-55 nu-fission 0.00e+00 0.00e+00 +14 10 2 Si-28 nu-fission 0.00e+00 0.00e+00 +15 10 2 Si-29 nu-fission 0.00e+00 0.00e+00 +16 10 2 Si-30 nu-fission 0.00e+00 0.00e+00 +17 10 2 Cr-50 nu-fission 0.00e+00 0.00e+00 +18 10 2 Cr-52 nu-fission 0.00e+00 0.00e+00 +19 10 2 Cr-53 nu-fission 0.00e+00 0.00e+00 +20 10 2 Cr-54 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +9 11 1 H-1 ((total - scatter-1) / flux) 1.31e-01 4.76e-01 +10 11 1 O-16 ((total - scatter-1) / flux) 2.87e-02 4.30e-02 +11 11 1 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +12 11 1 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +13 11 1 Zr-90 ((total - scatter-1) / flux) 2.20e-02 4.00e-02 +14 11 1 Zr-91 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +15 11 1 Zr-92 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +16 11 1 Zr-94 ((total - scatter-1) / flux) 4.19e-03 8.73e-02 +17 11 1 Zr-96 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +0 11 2 H-1 ((total - scatter-1) / flux) 6.87e-01 1.24e+00 +1 11 2 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +2 11 2 B-10 ((total - scatter-1) / flux) 4.29e-02 6.07e-02 +3 11 2 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +4 11 2 Zr-90 ((total - scatter-1) / flux) 3.96e-02 1.05e-01 +5 11 2 Zr-91 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +6 11 2 Zr-92 ((total - scatter-1) / flux) 8.42e-02 1.03e-01 +7 11 2 Zr-94 ((total - scatter-1) / flux) 9.20e-02 1.26e-01 +8 11 2 Zr-96 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +9 11 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +10 11 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +11 11 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +12 11 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 +13 11 1 Zr-90 (nu-fission / flux) 0.00e+00 0.00e+00 +14 11 1 Zr-91 (nu-fission / flux) 0.00e+00 0.00e+00 +15 11 1 Zr-92 (nu-fission / flux) 0.00e+00 0.00e+00 +16 11 1 Zr-94 (nu-fission / flux) 0.00e+00 0.00e+00 +17 11 1 Zr-96 (nu-fission / flux) 0.00e+00 0.00e+00 +0 11 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +1 11 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +2 11 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +3 11 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 +4 11 2 Zr-90 (nu-fission / flux) 0.00e+00 0.00e+00 +5 11 2 Zr-91 (nu-fission / flux) 0.00e+00 0.00e+00 +6 11 2 Zr-92 (nu-fission / flux) 0.00e+00 0.00e+00 +7 11 2 Zr-94 (nu-fission / flux) 0.00e+00 0.00e+00 +8 11 2 Zr-96 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +27 11 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 9.96e-02 4.43e-01 +28 11 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 2.87e-02 4.30e-02 +29 11 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +30 11 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +31 11 1 1 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 2.20e-02 4.00e-02 +32 11 1 1 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +33 11 1 1 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +34 11 1 1 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 4.19e-03 8.73e-02 +35 11 1 1 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +18 11 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 3.19e-02 4.51e-02 +19 11 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +20 11 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +21 11 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +22 11 1 2 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +23 11 1 2 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +24 11 1 2 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +25 11 1 2 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +26 11 1 2 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +9 11 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +10 11 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +11 11 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +12 11 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +13 11 2 1 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +14 11 2 1 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +15 11 2 1 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +16 11 2 1 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +17 11 2 1 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 11 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 6.87e-01 1.24e+00 +1 11 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +2 11 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +3 11 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +4 11 2 2 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 3.96e-02 1.05e-01 +5 11 2 2 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +6 11 2 2 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 8.42e-02 1.03e-01 +7 11 2 2 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 9.20e-02 1.26e-01 +8 11 2 2 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +9 11 1 H-1 nu-fission 0.00e+00 0.00e+00 +10 11 1 O-16 nu-fission 0.00e+00 0.00e+00 +11 11 1 B-10 nu-fission 0.00e+00 0.00e+00 +12 11 1 B-11 nu-fission 0.00e+00 0.00e+00 +13 11 1 Zr-90 nu-fission 0.00e+00 0.00e+00 +14 11 1 Zr-91 nu-fission 0.00e+00 0.00e+00 +15 11 1 Zr-92 nu-fission 0.00e+00 0.00e+00 +16 11 1 Zr-94 nu-fission 0.00e+00 0.00e+00 +17 11 1 Zr-96 nu-fission 0.00e+00 0.00e+00 +0 11 2 H-1 nu-fission 0.00e+00 0.00e+00 +1 11 2 O-16 nu-fission 0.00e+00 0.00e+00 +2 11 2 B-10 nu-fission 0.00e+00 0.00e+00 +3 11 2 B-11 nu-fission 0.00e+00 0.00e+00 +4 11 2 Zr-90 nu-fission 0.00e+00 0.00e+00 +5 11 2 Zr-91 nu-fission 0.00e+00 0.00e+00 +6 11 2 Zr-92 nu-fission 0.00e+00 0.00e+00 +7 11 2 Zr-94 nu-fission 0.00e+00 0.00e+00 +8 11 2 Zr-96 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +9 12 1 H-1 ((total - scatter-1) / flux) 9.89e-02 1.79e-01 +10 12 1 O-16 ((total - scatter-1) / flux) 1.33e-02 2.04e-02 +11 12 1 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +12 12 1 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +13 12 1 Zr-90 ((total - scatter-1) / flux) 9.00e-02 7.55e-02 +14 12 1 Zr-91 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +15 12 1 Zr-92 ((total - scatter-1) / flux) 3.50e-03 1.70e-02 +16 12 1 Zr-94 ((total - scatter-1) / flux) 4.85e-03 1.63e-02 +17 12 1 Zr-96 ((total - scatter-1) / flux) 2.73e-03 1.75e-02 +0 12 2 H-1 ((total - scatter-1) / flux) 1.26e+00 1.98e+00 +1 12 2 O-16 ((total - scatter-1) / flux) 7.92e-02 1.05e-01 +2 12 2 B-10 ((total - scatter-1) / flux) 1.69e-02 2.39e-02 +3 12 2 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +4 12 2 Zr-90 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +5 12 2 Zr-91 ((total - scatter-1) / flux) 3.32e-02 4.07e-02 +6 12 2 Zr-92 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +7 12 2 Zr-94 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 +8 12 2 Zr-96 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. +9 12 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +10 12 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +11 12 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +12 12 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 +13 12 1 Zr-90 (nu-fission / flux) 0.00e+00 0.00e+00 +14 12 1 Zr-91 (nu-fission / flux) 0.00e+00 0.00e+00 +15 12 1 Zr-92 (nu-fission / flux) 0.00e+00 0.00e+00 +16 12 1 Zr-94 (nu-fission / flux) 0.00e+00 0.00e+00 +17 12 1 Zr-96 (nu-fission / flux) 0.00e+00 0.00e+00 +0 12 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 +1 12 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 +2 12 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 +3 12 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 +4 12 2 Zr-90 (nu-fission / flux) 0.00e+00 0.00e+00 +5 12 2 Zr-91 (nu-fission / flux) 0.00e+00 0.00e+00 +6 12 2 Zr-92 (nu-fission / flux) 0.00e+00 0.00e+00 +7 12 2 Zr-94 (nu-fission / flux) 0.00e+00 0.00e+00 +8 12 2 Zr-96 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. +27 12 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 7.17e-02 1.68e-01 +28 12 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 1.33e-02 2.04e-02 +29 12 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +30 12 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +31 12 1 1 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 9.00e-02 7.55e-02 +32 12 1 1 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +33 12 1 1 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 3.50e-03 1.70e-02 +34 12 1 1 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 4.85e-03 1.63e-02 +35 12 1 1 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 2.73e-03 1.75e-02 +18 12 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 2.72e-02 2.96e-02 +19 12 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +20 12 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +21 12 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +22 12 1 2 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +23 12 1 2 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +24 12 1 2 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +25 12 1 2 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +26 12 1 2 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +9 12 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +10 12 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +11 12 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +12 12 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +13 12 2 1 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +14 12 2 1 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +15 12 2 1 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +16 12 2 1 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +17 12 2 1 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +0 12 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 1.24e+00 1.96e+00 +1 12 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 7.92e-02 1.05e-01 +2 12 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +3 12 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +4 12 2 2 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +5 12 2 2 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 3.32e-02 4.07e-02 +6 12 2 2 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +7 12 2 2 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 +8 12 2 2 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. +9 12 1 H-1 nu-fission 0.00e+00 0.00e+00 +10 12 1 O-16 nu-fission 0.00e+00 0.00e+00 +11 12 1 B-10 nu-fission 0.00e+00 0.00e+00 +12 12 1 B-11 nu-fission 0.00e+00 0.00e+00 +13 12 1 Zr-90 nu-fission 0.00e+00 0.00e+00 +14 12 1 Zr-91 nu-fission 0.00e+00 0.00e+00 +15 12 1 Zr-92 nu-fission 0.00e+00 0.00e+00 +16 12 1 Zr-94 nu-fission 0.00e+00 0.00e+00 +17 12 1 Zr-96 nu-fission 0.00e+00 0.00e+00 +0 12 2 H-1 nu-fission 0.00e+00 0.00e+00 +1 12 2 O-16 nu-fission 0.00e+00 0.00e+00 +2 12 2 B-10 nu-fission 0.00e+00 0.00e+00 +3 12 2 B-11 nu-fission 0.00e+00 0.00e+00 +4 12 2 Zr-90 nu-fission 0.00e+00 0.00e+00 +5 12 2 Zr-91 nu-fission 0.00e+00 0.00e+00 +6 12 2 Zr-92 nu-fission 0.00e+00 0.00e+00 +7 12 2 Zr-94 nu-fission 0.00e+00 0.00e+00 +8 12 2 Zr-96 nu-fission 0.00e+00 0.00e+00 \ No newline at end of file From 203d5a3fe46fdd8586948fb927cdd03f7a8bcabc Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Mon, 9 May 2016 13:42:15 -0400 Subject: [PATCH 506/650] Updated MGXS Notebooks with KappaFissionXS --- .../pythonapi/examples/mgxs-part-i.ipynb | 11 +- .../pythonapi/examples/mgxs-part-ii.ipynb | 679 +++++++++--------- .../pythonapi/examples/mgxs-part-iii.ipynb | 176 ++--- 3 files changed, 457 insertions(+), 409 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index 610e82ec1d..a97a0c02eb 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -376,6 +376,7 @@ "* `CaptureXS`\n", "* `FissionXS`\n", "* `NuFissionXS`\n", + "* `KappaFissionXS`\n", "* `ScatterXS`\n", "* `NuScatterXS`\n", "* `ScatterMatrixXS`\n", @@ -1162,21 +1163,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 2", "language": "python", - "name": "python3" + "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 3 + "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.1" + "pygments_lexer": "ipython2", + "version": "2.7.6" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index fd8d090524..7b313da749 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -34,16 +34,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/romano/miniconda3/envs/default/lib/python3.5/site-packages/matplotlib/__init__.py:1350: UserWarning: This call to matplotlib.use() has no effect\n", + "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.1+1178.ga40c9ec-py2.7-linux-x86_64.egg/matplotlib/__init__.py:884: UserWarning: axes.color_cycle is deprecated and replaced with axes.prop_cycle; please use the latter.\n", + " warnings.warn(self.msg_depr % (key, alt_key))\n", + "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.1+1178.ga40c9ec-py2.7-linux-x86_64.egg/matplotlib/__init__.py:1362: UserWarning: This call to matplotlib.use() has no effect\n", "because the backend has already been chosen;\n", "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", "or matplotlib.backends is imported for the first time.\n", "\n", " warnings.warn(_use_error_msg)\n", - "/home/romano/miniconda3/envs/default/lib/python3.5/importlib/_bootstrap.py:222: QAWarning: pyne.rxname is not yet QA compliant.\n", - " return f(*args, **kwds)\n", - "/home/romano/miniconda3/envs/default/lib/python3.5/importlib/_bootstrap.py:222: QAWarning: pyne.ace is not yet QA compliant.\n", - " return f(*args, **kwds)\n" + "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:9: QAWarning: pyne.rxname is not yet QA compliant.\n", + "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:9: QAWarning: pyne.ace is not yet QA compliant.\n" ] } ], @@ -443,10 +443,11 @@ " 888\n", "\n", " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.org/en/latest/license.html\n", + " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: df280b60eb1c6d7b7f842e05ede734a4883a0fc8\n", - " Date/Time: 2016-05-05 15:00:51\n", + " Git SHA1: 7b20f8ad4aa9e6f02f8b1d51e002f9f56ba7aa15\n", + " Date/Time: 2016-05-09 13:34:05\n", + " MPI Processes: 1\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -522,7 +523,7 @@ " 48/1 1.21610 1.22612 +/- 0.00251\n", " 49/1 1.22199 1.22602 +/- 0.00245\n", " 50/1 1.20860 1.22558 +/- 0.00243\n", - " Triggers unsatisfied, max unc./thresh. is 1.25496 for flux in tally 10056\n", + " Triggers unsatisfied, max unc./thresh. is 1.25496 for flux in tally 10050\n", " The estimated number of batches is 73\n", " Creating state point statepoint.050.h5...\n", " 51/1 1.21850 1.22541 +/- 0.00237\n", @@ -548,7 +549,7 @@ " 71/1 1.19720 1.22444 +/- 0.00195\n", " 72/1 1.23770 1.22465 +/- 0.00193\n", " 73/1 1.23894 1.22488 +/- 0.00191\n", - " Triggers unsatisfied, max unc./thresh. is 1.00243 for flux in tally 10056\n", + " Triggers unsatisfied, max unc./thresh. is 1.00243 for flux in tally 10050\n", " The estimated number of batches is 74\n", " 74/1 1.22437 1.22487 +/- 0.00188\n", " Triggers satisfied for batch 74\n", @@ -561,20 +562,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.8600E-01 seconds\n", - " Reading cross sections = 1.1000E-01 seconds\n", - " Total time in simulation = 2.3697E+02 seconds\n", - " Time in transport only = 2.3690E+02 seconds\n", - " Time in inactive batches = 1.5640E+01 seconds\n", - " Time in active batches = 2.2133E+02 seconds\n", - " Time synchronizing fission bank = 3.0000E-02 seconds\n", - " Sampling source sites = 1.9000E-02 seconds\n", - " SEND/RECV source sites = 1.1000E-02 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 1.0000E-02 seconds\n", - " Total time elapsed = 2.3743E+02 seconds\n", - " Calculation Rate (inactive) = 6393.86 neutrons/second\n", - " Calculation Rate (active) = 1807.26 neutrons/second\n", + " Total time for initialization = 3.8900E-01 seconds\n", + " Reading cross sections = 8.3000E-02 seconds\n", + " Total time in simulation = 2.2066E+02 seconds\n", + " Time in transport only = 2.2061E+02 seconds\n", + " Time in inactive batches = 1.5872E+01 seconds\n", + " Time in active batches = 2.0478E+02 seconds\n", + " Time synchronizing fission bank = 1.9000E-02 seconds\n", + " Sampling source sites = 1.2000E-02 seconds\n", + " SEND/RECV source sites = 6.0000E-03 seconds\n", + " Time accumulating tallies = 3.0000E-03 seconds\n", + " Total time for finalization = 1.1000E-02 seconds\n", + " Total time elapsed = 2.2111E+02 seconds\n", + " Calculation Rate (inactive) = 6300.40 neutrons/second\n", + " Calculation Rate (active) = 1953.28 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -785,6 +786,7 @@ " group in\n", " group out\n", " nuclide\n", + " score\n", " mean\n", " std. dev.\n", " \n", @@ -796,6 +798,7 @@ " 1\n", " 1\n", " H-1\n", + " ((nu-scatter-0 - scatter-1) / flux)\n", " 0.234115\n", " 0.003568\n", " \n", @@ -805,6 +808,7 @@ " 1\n", " 1\n", " O-16\n", + " ((nu-scatter-0 - scatter-1) / flux)\n", " 1.563707\n", " 0.005953\n", " \n", @@ -814,6 +818,7 @@ " 1\n", " 2\n", " H-1\n", + " ((nu-scatter-0 - scatter-1) / flux)\n", " 1.594129\n", " 0.002369\n", " \n", @@ -823,6 +828,7 @@ " 1\n", " 2\n", " O-16\n", + " ((nu-scatter-0 - scatter-1) / flux)\n", " 0.285761\n", " 0.001676\n", " \n", @@ -832,6 +838,7 @@ " 1\n", " 3\n", " H-1\n", + " ((nu-scatter-0 - scatter-1) / flux)\n", " 0.011089\n", " 0.000248\n", " \n", @@ -841,6 +848,7 @@ " 1\n", " 3\n", " O-16\n", + " ((nu-scatter-0 - scatter-1) / flux)\n", " 0.000000\n", " 0.000000\n", " \n", @@ -850,6 +858,7 @@ " 1\n", " 4\n", " H-1\n", + " ((nu-scatter-0 - scatter-1) / flux)\n", " 0.000000\n", " 0.000000\n", " \n", @@ -859,6 +868,7 @@ " 1\n", " 4\n", " O-16\n", + " ((nu-scatter-0 - scatter-1) / flux)\n", " 0.000000\n", " 0.000000\n", " \n", @@ -868,6 +878,7 @@ " 1\n", " 5\n", " H-1\n", + " ((nu-scatter-0 - scatter-1) / flux)\n", " 0.000000\n", " 0.000000\n", " \n", @@ -877,6 +888,7 @@ " 1\n", " 5\n", " O-16\n", + " ((nu-scatter-0 - scatter-1) / flux)\n", " 0.000000\n", " 0.000000\n", " \n", @@ -885,17 +897,29 @@ "
" ], "text/plain": [ - " cell group in group out nuclide mean std. dev.\n", - "126 10002 1 1 H-1 0.234115 0.003568\n", - "127 10002 1 1 O-16 1.563707 0.005953\n", - "124 10002 1 2 H-1 1.594129 0.002369\n", - "125 10002 1 2 O-16 0.285761 0.001676\n", - "122 10002 1 3 H-1 0.011089 0.000248\n", - "123 10002 1 3 O-16 0.000000 0.000000\n", - "120 10002 1 4 H-1 0.000000 0.000000\n", - "121 10002 1 4 O-16 0.000000 0.000000\n", - "118 10002 1 5 H-1 0.000000 0.000000\n", - "119 10002 1 5 O-16 0.000000 0.000000" + " cell group in group out nuclide score \\\n", + "126 10002 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) \n", + "127 10002 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) \n", + "124 10002 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) \n", + "125 10002 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) \n", + "122 10002 1 3 H-1 ((nu-scatter-0 - scatter-1) / flux) \n", + "123 10002 1 3 O-16 ((nu-scatter-0 - scatter-1) / flux) \n", + "120 10002 1 4 H-1 ((nu-scatter-0 - scatter-1) / flux) \n", + "121 10002 1 4 O-16 ((nu-scatter-0 - scatter-1) / flux) \n", + "118 10002 1 5 H-1 ((nu-scatter-0 - scatter-1) / flux) \n", + "119 10002 1 5 O-16 ((nu-scatter-0 - scatter-1) / flux) \n", + "\n", + " mean std. dev. \n", + "126 0.234115 0.003568 \n", + "127 1.563707 0.005953 \n", + "124 1.594129 0.002369 \n", + "125 0.285761 0.001676 \n", + "122 0.011089 0.000248 \n", + "123 0.000000 0.000000 \n", + "120 0.000000 0.000000 \n", + "121 0.000000 0.000000 \n", + "118 0.000000 0.000000 \n", + "119 0.000000 0.000000 " ] }, "execution_count": 19, @@ -995,6 +1019,7 @@ " cell\n", " group in\n", " nuclide\n", + " score\n", " mean\n", " std. dev.\n", " \n", @@ -1005,6 +1030,7 @@ " 10000\n", " 1\n", " U-235\n", + " ((total - scatter-1) / flux)\n", " 20.611692\n", " 0.104237\n", " \n", @@ -1013,6 +1039,7 @@ " 10000\n", " 1\n", " U-238\n", + " ((total - scatter-1) / flux)\n", " 9.585358\n", " 0.013808\n", " \n", @@ -1021,6 +1048,7 @@ " 10000\n", " 1\n", " O-16\n", + " ((total - scatter-1) / flux)\n", " 3.164190\n", " 0.005049\n", " \n", @@ -1029,6 +1057,7 @@ " 10000\n", " 2\n", " U-235\n", + " ((total - scatter-1) / flux)\n", " 485.413426\n", " 0.996410\n", " \n", @@ -1037,6 +1066,7 @@ " 10000\n", " 2\n", " U-238\n", + " ((total - scatter-1) / flux)\n", " 11.190386\n", " 0.028731\n", " \n", @@ -1045,6 +1075,7 @@ " 10000\n", " 2\n", " O-16\n", + " ((total - scatter-1) / flux)\n", " 3.794859\n", " 0.011139\n", " \n", @@ -1053,13 +1084,13 @@ "
" ], "text/plain": [ - " cell group in nuclide mean std. dev.\n", - "3 10000 1 U-235 20.611692 0.104237\n", - "4 10000 1 U-238 9.585358 0.013808\n", - "5 10000 1 O-16 3.164190 0.005049\n", - "0 10000 2 U-235 485.413426 0.996410\n", - "1 10000 2 U-238 11.190386 0.028731\n", - "2 10000 2 O-16 3.794859 0.011139" + " cell group in nuclide score mean std. dev.\n", + "3 10000 1 U-235 ((total - scatter-1) / flux) 2.06e+01 1.04e-01\n", + "4 10000 1 U-238 ((total - scatter-1) / flux) 9.59e+00 1.38e-02\n", + "5 10000 1 O-16 ((total - scatter-1) / flux) 3.16e+00 5.05e-03\n", + "0 10000 2 U-235 ((total - scatter-1) / flux) 4.85e+02 9.96e-01\n", + "1 10000 2 U-238 ((total - scatter-1) / flux) 1.12e+01 2.87e-02\n", + "2 10000 2 O-16 ((total - scatter-1) / flux) 3.79e+00 1.11e-02" ] }, "execution_count": 22, @@ -1166,81 +1197,81 @@ "[ NORMAL ] Iteration 0:\tk_eff = 0.574672\tres = 0.000E+00\n", "[ NORMAL ] Iteration 1:\tk_eff = 0.679815\tres = 4.253E-01\n", "[ NORMAL ] Iteration 2:\tk_eff = 0.660826\tres = 1.830E-01\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.658941\tres = 2.793E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.643012\tres = 2.852E-03\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.658940\tres = 2.793E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.643012\tres = 2.853E-03\n", "[ NORMAL ] Iteration 5:\tk_eff = 0.625810\tres = 2.417E-02\n", "[ NORMAL ] Iteration 6:\tk_eff = 0.606678\tres = 2.675E-02\n", "[ NORMAL ] Iteration 7:\tk_eff = 0.587485\tres = 3.057E-02\n", "[ NORMAL ] Iteration 8:\tk_eff = 0.569029\tres = 3.164E-02\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.551708\tres = 3.142E-02\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.551707\tres = 3.142E-02\n", "[ NORMAL ] Iteration 10:\tk_eff = 0.536035\tres = 3.044E-02\n", "[ NORMAL ] Iteration 11:\tk_eff = 0.522275\tres = 2.841E-02\n", "[ NORMAL ] Iteration 12:\tk_eff = 0.510610\tres = 2.567E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.501107\tres = 2.233E-02\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.501106\tres = 2.234E-02\n", "[ NORMAL ] Iteration 14:\tk_eff = 0.493832\tres = 1.861E-02\n", "[ NORMAL ] Iteration 15:\tk_eff = 0.488781\tres = 1.452E-02\n", "[ NORMAL ] Iteration 16:\tk_eff = 0.485924\tres = 1.023E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.485212\tres = 5.845E-03\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.486571\tres = 1.466E-03\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.489906\tres = 2.802E-03\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.495106\tres = 6.853E-03\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.485211\tres = 5.846E-03\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.486571\tres = 1.467E-03\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.489905\tres = 2.802E-03\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.495105\tres = 6.853E-03\n", "[ NORMAL ] Iteration 21:\tk_eff = 0.502056\tres = 1.061E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.510631\tres = 1.404E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.510630\tres = 1.404E-02\n", "[ NORMAL ] Iteration 23:\tk_eff = 0.520696\tres = 1.708E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.532121\tres = 1.971E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.532120\tres = 1.971E-02\n", "[ NORMAL ] Iteration 25:\tk_eff = 0.544768\tres = 2.194E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.558506\tres = 2.377E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.558505\tres = 2.377E-02\n", "[ NORMAL ] Iteration 27:\tk_eff = 0.573200\tres = 2.522E-02\n", "[ NORMAL ] Iteration 28:\tk_eff = 0.588723\tres = 2.631E-02\n", "[ NORMAL ] Iteration 29:\tk_eff = 0.604951\tres = 2.708E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.621766\tres = 2.757E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.639054\tres = 2.779E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.656709\tres = 2.781E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.621765\tres = 2.756E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.639053\tres = 2.779E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.656709\tres = 2.780E-02\n", "[ NORMAL ] Iteration 33:\tk_eff = 0.674632\tres = 2.763E-02\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.692731\tres = 2.729E-02\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.692730\tres = 2.729E-02\n", "[ NORMAL ] Iteration 35:\tk_eff = 0.710919\tres = 2.683E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.729119\tres = 2.626E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.729118\tres = 2.626E-02\n", "[ NORMAL ] Iteration 37:\tk_eff = 0.747258\tres = 2.560E-02\n", "[ NORMAL ] Iteration 38:\tk_eff = 0.765273\tres = 2.488E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.783105\tres = 2.411E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.783104\tres = 2.411E-02\n", "[ NORMAL ] Iteration 40:\tk_eff = 0.800701\tres = 2.330E-02\n", "[ NORMAL ] Iteration 41:\tk_eff = 0.818017\tres = 2.247E-02\n", "[ NORMAL ] Iteration 42:\tk_eff = 0.835012\tres = 2.163E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.851652\tres = 2.078E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.851651\tres = 2.078E-02\n", "[ NORMAL ] Iteration 44:\tk_eff = 0.867906\tres = 1.993E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.883751\tres = 1.909E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.883750\tres = 1.909E-02\n", "[ NORMAL ] Iteration 46:\tk_eff = 0.899164\tres = 1.826E-02\n", "[ NORMAL ] Iteration 47:\tk_eff = 0.914131\tres = 1.744E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.928638\tres = 1.664E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.928638\tres = 1.665E-02\n", "[ NORMAL ] Iteration 49:\tk_eff = 0.942676\tres = 1.587E-02\n", "[ NORMAL ] Iteration 50:\tk_eff = 0.956239\tres = 1.512E-02\n", "[ NORMAL ] Iteration 51:\tk_eff = 0.969323\tres = 1.439E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.981928\tres = 1.368E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.981927\tres = 1.368E-02\n", "[ NORMAL ] Iteration 53:\tk_eff = 0.994054\tres = 1.300E-02\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.005706\tres = 1.235E-02\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.016887\tres = 1.172E-02\n", + "[ NORMAL ] Iteration 54:\tk_eff = 1.005705\tres = 1.235E-02\n", + "[ NORMAL ] Iteration 55:\tk_eff = 1.016886\tres = 1.172E-02\n", "[ NORMAL ] Iteration 56:\tk_eff = 1.027604\tres = 1.112E-02\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.037867\tres = 1.054E-02\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.047683\tres = 9.987E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.057063\tres = 9.458E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.037866\tres = 1.054E-02\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.047682\tres = 9.987E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.057062\tres = 9.458E-03\n", "[ NORMAL ] Iteration 60:\tk_eff = 1.066016\tres = 8.953E-03\n", "[ NORMAL ] Iteration 61:\tk_eff = 1.074556\tres = 8.471E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.082694\tres = 8.011E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.082693\tres = 8.011E-03\n", "[ NORMAL ] Iteration 63:\tk_eff = 1.090442\tres = 7.573E-03\n", "[ NORMAL ] Iteration 64:\tk_eff = 1.097813\tres = 7.156E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.104821\tres = 6.760E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.104820\tres = 6.760E-03\n", "[ NORMAL ] Iteration 66:\tk_eff = 1.111477\tres = 6.383E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.117796\tres = 6.025E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.123790\tres = 5.684E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.129472\tres = 5.362E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.134854\tres = 5.056E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.139951\tres = 4.765E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.144773\tres = 4.491E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.117795\tres = 6.025E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.123789\tres = 5.685E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.129470\tres = 5.362E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.134853\tres = 5.056E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.139950\tres = 4.766E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.144772\tres = 4.491E-03\n", "[ NORMAL ] Iteration 73:\tk_eff = 1.149333\tres = 4.230E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.153644\tres = 3.983E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.153643\tres = 3.984E-03\n", "[ NORMAL ] Iteration 75:\tk_eff = 1.157716\tres = 3.751E-03\n", "[ NORMAL ] Iteration 76:\tk_eff = 1.161561\tres = 3.530E-03\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.165190\tres = 3.322E-03\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.165190\tres = 3.321E-03\n", "[ NORMAL ] Iteration 78:\tk_eff = 1.168613\tres = 3.124E-03\n", "[ NORMAL ] Iteration 79:\tk_eff = 1.171841\tres = 2.938E-03\n", "[ NORMAL ] Iteration 80:\tk_eff = 1.174883\tres = 2.762E-03\n", @@ -1250,82 +1281,82 @@ "[ NORMAL ] Iteration 84:\tk_eff = 1.185378\tres = 2.152E-03\n", "[ NORMAL ] Iteration 85:\tk_eff = 1.187627\tres = 2.021E-03\n", "[ NORMAL ] Iteration 86:\tk_eff = 1.189741\tres = 1.897E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.191729\tres = 1.780E-03\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.193596\tres = 1.670E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.195350\tres = 1.566E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.196997\tres = 1.470E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.198542\tres = 1.378E-03\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.199994\tres = 1.291E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.191728\tres = 1.780E-03\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.193595\tres = 1.670E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.195349\tres = 1.567E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.196996\tres = 1.469E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.198543\tres = 1.378E-03\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.199994\tres = 1.292E-03\n", "[ NORMAL ] Iteration 93:\tk_eff = 1.201355\tres = 1.211E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.202632\tres = 1.135E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.203830\tres = 1.063E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.204952\tres = 9.959E-04\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.206004\tres = 9.320E-04\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.206990\tres = 8.733E-04\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.207913\tres = 8.176E-04\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.208778\tres = 7.643E-04\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.209588\tres = 7.163E-04\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.210345\tres = 6.699E-04\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.211055\tres = 6.262E-04\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.211719\tres = 5.863E-04\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.212340\tres = 5.480E-04\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.212921\tres = 5.126E-04\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.213464\tres = 4.791E-04\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.213972\tres = 4.476E-04\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.214447\tres = 4.190E-04\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.214891\tres = 3.909E-04\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.215306\tres = 3.656E-04\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.215693\tres = 3.414E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.216056\tres = 3.186E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.216393\tres = 2.983E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.216709\tres = 2.777E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.217005\tres = 2.600E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.217280\tres = 2.425E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.217538\tres = 2.261E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.217777\tres = 2.116E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.218001\tres = 1.970E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.218210\tres = 1.836E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.218405\tres = 1.717E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.218587\tres = 1.604E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.218756\tres = 1.497E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.218915\tres = 1.387E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.219063\tres = 1.301E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.219200\tres = 1.213E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.219329\tres = 1.126E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.219449\tres = 1.058E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.219560\tres = 9.819E-05\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.219664\tres = 9.124E-05\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.219761\tres = 8.522E-05\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.219851\tres = 7.946E-05\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.219935\tres = 7.396E-05\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.220014\tres = 6.887E-05\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.220086\tres = 6.461E-05\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.220155\tres = 5.971E-05\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.220218\tres = 5.596E-05\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.220276\tres = 5.177E-05\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.220332\tres = 4.809E-05\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.220383\tres = 4.555E-05\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.220431\tres = 4.197E-05\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.220475\tres = 3.922E-05\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.220516\tres = 3.642E-05\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.220556\tres = 3.368E-05\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.220592\tres = 3.194E-05\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.220625\tres = 2.959E-05\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.220657\tres = 2.763E-05\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.220686\tres = 2.555E-05\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.220712\tres = 2.384E-05\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.220737\tres = 2.193E-05\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.220761\tres = 2.076E-05\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.220783\tres = 1.910E-05\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.220803\tres = 1.796E-05\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.220822\tres = 1.660E-05\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.220840\tres = 1.568E-05\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.220857\tres = 1.465E-05\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.220872\tres = 1.346E-05\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.220886\tres = 1.233E-05\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.220899\tres = 1.178E-05\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.220912\tres = 1.083E-05\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.220923\tres = 1.012E-05\n" + "[ NORMAL ] Iteration 94:\tk_eff = 1.202632\tres = 1.134E-03\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.203829\tres = 1.063E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.204952\tres = 9.956E-04\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.206004\tres = 9.324E-04\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.206989\tres = 8.730E-04\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.207913\tres = 8.173E-04\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.208777\tres = 7.650E-04\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.209587\tres = 7.159E-04\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.210345\tres = 6.698E-04\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.211054\tres = 6.266E-04\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.211718\tres = 5.861E-04\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.212339\tres = 5.481E-04\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.212920\tres = 5.125E-04\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.213463\tres = 4.792E-04\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.213971\tres = 4.479E-04\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.214446\tres = 4.186E-04\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.214890\tres = 3.912E-04\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.215305\tres = 3.655E-04\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.215692\tres = 3.414E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.216055\tres = 3.189E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.216393\tres = 2.979E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.216709\tres = 2.782E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.217004\tres = 2.597E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.217279\tres = 2.425E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.217536\tres = 2.263E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.217776\tres = 2.113E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.218000\tres = 1.971E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.218209\tres = 1.840E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.218404\tres = 1.716E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.218587\tres = 1.601E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.218756\tres = 1.494E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.218915\tres = 1.393E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.219062\tres = 1.299E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.219200\tres = 1.212E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.219329\tres = 1.130E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.219448\tres = 1.054E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.219560\tres = 9.822E-05\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.219664\tres = 9.156E-05\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.219761\tres = 8.534E-05\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.219851\tres = 7.954E-05\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.219936\tres = 7.413E-05\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.220014\tres = 6.908E-05\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.220087\tres = 6.437E-05\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.220156\tres = 5.997E-05\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.220219\tres = 5.587E-05\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.220278\tres = 5.205E-05\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.220333\tres = 4.848E-05\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.220385\tres = 4.516E-05\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.220433\tres = 4.206E-05\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.220477\tres = 3.917E-05\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.220518\tres = 3.648E-05\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.220557\tres = 3.397E-05\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.220593\tres = 3.163E-05\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.220627\tres = 2.945E-05\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.220658\tres = 2.742E-05\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.220687\tres = 2.552E-05\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.220714\tres = 2.376E-05\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.220739\tres = 2.212E-05\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.220762\tres = 2.059E-05\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.220784\tres = 1.916E-05\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.220804\tres = 1.783E-05\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.220823\tres = 1.660E-05\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.220841\tres = 1.545E-05\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.220857\tres = 1.437E-05\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.220872\tres = 1.338E-05\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.220886\tres = 1.245E-05\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.220899\tres = 1.158E-05\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.220912\tres = 1.077E-05\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.220923\tres = 1.002E-05\n" ] } ], @@ -1435,14 +1466,14 @@ "[ NORMAL ] Importing ray tracing data from file...\n", "[ NORMAL ] Computing the eigenvalue...\n", "[ NORMAL ] Iteration 0:\tk_eff = 0.495816\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.557478\tres = 5.042E-01\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.557477\tres = 5.042E-01\n", "[ NORMAL ] Iteration 2:\tk_eff = 0.518301\tres = 1.244E-01\n", "[ NORMAL ] Iteration 3:\tk_eff = 0.509212\tres = 7.027E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.496490\tres = 1.754E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.496489\tres = 1.754E-02\n", "[ NORMAL ] Iteration 5:\tk_eff = 0.488581\tres = 2.498E-02\n", "[ NORMAL ] Iteration 6:\tk_eff = 0.482897\tres = 1.593E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.479776\tres = 1.163E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.478835\tres = 6.465E-03\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.479775\tres = 1.163E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.478835\tres = 6.464E-03\n", "[ NORMAL ] Iteration 9:\tk_eff = 0.479872\tres = 1.960E-03\n", "[ NORMAL ] Iteration 10:\tk_eff = 0.482685\tres = 2.166E-03\n", "[ NORMAL ] Iteration 11:\tk_eff = 0.487085\tres = 5.861E-03\n", @@ -1451,34 +1482,34 @@ "[ NORMAL ] Iteration 14:\tk_eff = 0.508155\tres = 1.435E-02\n", "[ NORMAL ] Iteration 15:\tk_eff = 0.517314\tres = 1.637E-02\n", "[ NORMAL ] Iteration 16:\tk_eff = 0.527327\tres = 1.802E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.538082\tres = 1.936E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.538081\tres = 1.936E-02\n", "[ NORMAL ] Iteration 18:\tk_eff = 0.549475\tres = 2.039E-02\n", "[ NORMAL ] Iteration 19:\tk_eff = 0.561413\tres = 2.117E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.573811\tres = 2.173E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.573810\tres = 2.173E-02\n", "[ NORMAL ] Iteration 21:\tk_eff = 0.586589\tres = 2.208E-02\n", "[ NORMAL ] Iteration 22:\tk_eff = 0.599678\tres = 2.227E-02\n", "[ NORMAL ] Iteration 23:\tk_eff = 0.613012\tres = 2.231E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.626532\tres = 2.223E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.626532\tres = 2.224E-02\n", "[ NORMAL ] Iteration 25:\tk_eff = 0.640186\tres = 2.206E-02\n", "[ NORMAL ] Iteration 26:\tk_eff = 0.653925\tres = 2.179E-02\n", "[ NORMAL ] Iteration 27:\tk_eff = 0.667706\tres = 2.146E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.681490\tres = 2.107E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.695241\tres = 2.064E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.708928\tres = 2.018E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.722523\tres = 1.969E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.736001\tres = 1.918E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.681489\tres = 2.107E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.695240\tres = 2.064E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.708927\tres = 2.018E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.722522\tres = 1.969E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.736000\tres = 1.918E-02\n", "[ NORMAL ] Iteration 33:\tk_eff = 0.749339\tres = 1.865E-02\n", "[ NORMAL ] Iteration 34:\tk_eff = 0.762519\tres = 1.812E-02\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.775523\tres = 1.759E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.788336\tres = 1.705E-02\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.800945\tres = 1.652E-02\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.775522\tres = 1.759E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.788335\tres = 1.705E-02\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.800944\tres = 1.652E-02\n", "[ NORMAL ] Iteration 38:\tk_eff = 0.813338\tres = 1.599E-02\n", "[ NORMAL ] Iteration 39:\tk_eff = 0.825507\tres = 1.547E-02\n", "[ NORMAL ] Iteration 40:\tk_eff = 0.837444\tres = 1.496E-02\n", "[ NORMAL ] Iteration 41:\tk_eff = 0.849142\tres = 1.446E-02\n", "[ NORMAL ] Iteration 42:\tk_eff = 0.860595\tres = 1.397E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.871800\tres = 1.349E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.882754\tres = 1.302E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.871801\tres = 1.349E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.882755\tres = 1.302E-02\n", "[ NORMAL ] Iteration 45:\tk_eff = 0.893455\tres = 1.256E-02\n", "[ NORMAL ] Iteration 46:\tk_eff = 0.903901\tres = 1.212E-02\n", "[ NORMAL ] Iteration 47:\tk_eff = 0.914091\tres = 1.169E-02\n", @@ -1486,30 +1517,30 @@ "[ NORMAL ] Iteration 49:\tk_eff = 0.933708\tres = 1.087E-02\n", "[ NORMAL ] Iteration 50:\tk_eff = 0.943137\tres = 1.048E-02\n", "[ NORMAL ] Iteration 51:\tk_eff = 0.952314\tres = 1.010E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.961244\tres = 9.731E-03\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.969927\tres = 9.377E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 0.978368\tres = 9.033E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 0.986569\tres = 8.702E-03\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.961243\tres = 9.731E-03\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.969927\tres = 9.376E-03\n", + "[ NORMAL ] Iteration 54:\tk_eff = 0.978367\tres = 9.033E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 0.986568\tres = 8.702E-03\n", "[ NORMAL ] Iteration 56:\tk_eff = 0.994534\tres = 8.382E-03\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.002268\tres = 8.074E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.002267\tres = 8.074E-03\n", "[ NORMAL ] Iteration 58:\tk_eff = 1.009773\tres = 7.776E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.017055\tres = 7.488E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.017055\tres = 7.489E-03\n", "[ NORMAL ] Iteration 60:\tk_eff = 1.024118\tres = 7.212E-03\n", "[ NORMAL ] Iteration 61:\tk_eff = 1.030966\tres = 6.944E-03\n", "[ NORMAL ] Iteration 62:\tk_eff = 1.037603\tres = 6.687E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.044035\tres = 6.438E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.044036\tres = 6.438E-03\n", "[ NORMAL ] Iteration 64:\tk_eff = 1.050267\tres = 6.199E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.056302\tres = 5.969E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.056302\tres = 5.968E-03\n", "[ NORMAL ] Iteration 66:\tk_eff = 1.062145\tres = 5.746E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.067802\tres = 5.531E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.067802\tres = 5.532E-03\n", "[ NORMAL ] Iteration 68:\tk_eff = 1.073276\tres = 5.326E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.078573\tres = 5.126E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.083697\tres = 4.936E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.078573\tres = 5.127E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.083698\tres = 4.935E-03\n", "[ NORMAL ] Iteration 71:\tk_eff = 1.088654\tres = 4.751E-03\n", "[ NORMAL ] Iteration 72:\tk_eff = 1.093447\tres = 4.573E-03\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.098080\tres = 4.403E-03\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.098080\tres = 4.402E-03\n", "[ NORMAL ] Iteration 74:\tk_eff = 1.102560\tres = 4.238E-03\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.106889\tres = 4.080E-03\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.106889\tres = 4.079E-03\n", "[ NORMAL ] Iteration 76:\tk_eff = 1.111072\tres = 3.926E-03\n", "[ NORMAL ] Iteration 77:\tk_eff = 1.115114\tres = 3.779E-03\n", "[ NORMAL ] Iteration 78:\tk_eff = 1.119018\tres = 3.638E-03\n", @@ -1519,152 +1550,152 @@ "[ NORMAL ] Iteration 82:\tk_eff = 1.133344\tres = 3.122E-03\n", "[ NORMAL ] Iteration 83:\tk_eff = 1.136622\tres = 3.005E-03\n", "[ NORMAL ] Iteration 84:\tk_eff = 1.139786\tres = 2.892E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.142839\tres = 2.783E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.142840\tres = 2.784E-03\n", "[ NORMAL ] Iteration 86:\tk_eff = 1.145786\tres = 2.679E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.148629\tres = 2.579E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.148630\tres = 2.579E-03\n", "[ NORMAL ] Iteration 88:\tk_eff = 1.151373\tres = 2.482E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.154019\tres = 2.388E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.156572\tres = 2.299E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.154020\tres = 2.388E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.156573\tres = 2.299E-03\n", "[ NORMAL ] Iteration 91:\tk_eff = 1.159035\tres = 2.212E-03\n", "[ NORMAL ] Iteration 92:\tk_eff = 1.161410\tres = 2.129E-03\n", "[ NORMAL ] Iteration 93:\tk_eff = 1.163700\tres = 2.049E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.165908\tres = 1.972E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.165909\tres = 1.972E-03\n", "[ NORMAL ] Iteration 95:\tk_eff = 1.168038\tres = 1.898E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.170090\tres = 1.826E-03\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.172070\tres = 1.757E-03\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.173977\tres = 1.692E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.170091\tres = 1.826E-03\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.172070\tres = 1.758E-03\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.173977\tres = 1.691E-03\n", "[ NORMAL ] Iteration 99:\tk_eff = 1.175816\tres = 1.628E-03\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.177589\tres = 1.567E-03\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.179296\tres = 1.507E-03\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.180943\tres = 1.450E-03\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.177589\tres = 1.566E-03\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.179297\tres = 1.507E-03\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.180943\tres = 1.451E-03\n", "[ NORMAL ] Iteration 103:\tk_eff = 1.182529\tres = 1.396E-03\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.184057\tres = 1.343E-03\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.184058\tres = 1.343E-03\n", "[ NORMAL ] Iteration 105:\tk_eff = 1.185530\tres = 1.293E-03\n", "[ NORMAL ] Iteration 106:\tk_eff = 1.186949\tres = 1.244E-03\n", "[ NORMAL ] Iteration 107:\tk_eff = 1.188316\tres = 1.197E-03\n", "[ NORMAL ] Iteration 108:\tk_eff = 1.189633\tres = 1.152E-03\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.190902\tres = 1.109E-03\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.190902\tres = 1.108E-03\n", "[ NORMAL ] Iteration 110:\tk_eff = 1.192124\tres = 1.066E-03\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.193300\tres = 1.026E-03\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.194435\tres = 9.872E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.195526\tres = 9.503E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.196578\tres = 9.141E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.197591\tres = 8.792E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.198566\tres = 8.468E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.199506\tres = 8.141E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.200410\tres = 7.840E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.201281\tres = 7.538E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.202120\tres = 7.257E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.202927\tres = 6.979E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.203705\tres = 6.716E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.204453\tres = 6.466E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.205173\tres = 6.218E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.205867\tres = 5.979E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.206535\tres = 5.760E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.207177\tres = 5.534E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.207796\tres = 5.326E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.208392\tres = 5.126E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.208965\tres = 4.937E-04\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.209516\tres = 4.744E-04\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.210048\tres = 4.559E-04\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.210559\tres = 4.393E-04\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.211050\tres = 4.224E-04\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.211524\tres = 4.061E-04\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.211980\tres = 3.914E-04\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.212419\tres = 3.763E-04\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.212841\tres = 3.624E-04\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.213247\tres = 3.480E-04\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.213638\tres = 3.344E-04\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.214014\tres = 3.223E-04\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.214376\tres = 3.098E-04\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.214724\tres = 2.986E-04\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.215060\tres = 2.870E-04\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.215382\tres = 2.763E-04\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.215692\tres = 2.648E-04\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.215991\tres = 2.554E-04\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.216278\tres = 2.460E-04\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.216555\tres = 2.363E-04\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.216822\tres = 2.277E-04\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.217077\tres = 2.191E-04\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.217324\tres = 2.101E-04\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.217561\tres = 2.024E-04\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.217789\tres = 1.949E-04\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.218008\tres = 1.871E-04\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.218219\tres = 1.802E-04\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.218423\tres = 1.732E-04\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.218618\tres = 1.669E-04\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.218806\tres = 1.602E-04\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.218987\tres = 1.543E-04\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.219161\tres = 1.487E-04\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.219328\tres = 1.428E-04\n", - "[ NORMAL ] Iteration 163:\tk_eff = 1.219490\tres = 1.375E-04\n", - "[ NORMAL ] Iteration 164:\tk_eff = 1.219645\tres = 1.322E-04\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.193301\tres = 1.026E-03\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.194435\tres = 9.874E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.195527\tres = 9.501E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.196578\tres = 9.142E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.197591\tres = 8.797E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.198566\tres = 8.464E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.199506\tres = 8.144E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.200410\tres = 7.836E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.201281\tres = 7.540E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.202119\tres = 7.255E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.202927\tres = 6.980E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.203704\tres = 6.716E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.204452\tres = 6.462E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.205173\tres = 6.217E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.205867\tres = 5.982E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.206534\tres = 5.755E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.207177\tres = 5.537E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.207796\tres = 5.327E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.208391\tres = 5.126E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.208965\tres = 4.931E-04\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.209517\tres = 4.744E-04\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.210048\tres = 4.565E-04\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.210559\tres = 4.391E-04\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.211051\tres = 4.225E-04\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.211525\tres = 4.065E-04\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.211980\tres = 3.910E-04\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.212419\tres = 3.762E-04\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.212841\tres = 3.619E-04\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.213247\tres = 3.482E-04\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.213638\tres = 3.350E-04\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.214015\tres = 3.222E-04\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.214377\tres = 3.100E-04\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.214725\tres = 2.982E-04\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.215060\tres = 2.869E-04\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.215383\tres = 2.760E-04\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.215693\tres = 2.655E-04\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.215992\tres = 2.554E-04\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.216280\tres = 2.457E-04\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.216556\tres = 2.364E-04\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.216822\tres = 2.274E-04\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.217078\tres = 2.187E-04\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.217325\tres = 2.104E-04\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.217562\tres = 2.024E-04\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.217790\tres = 1.947E-04\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.218009\tres = 1.873E-04\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.218220\tres = 1.802E-04\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.218423\tres = 1.733E-04\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.218619\tres = 1.667E-04\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.218807\tres = 1.604E-04\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.218988\tres = 1.543E-04\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.219162\tres = 1.484E-04\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.219329\tres = 1.428E-04\n", + "[ NORMAL ] Iteration 163:\tk_eff = 1.219490\tres = 1.373E-04\n", + "[ NORMAL ] Iteration 164:\tk_eff = 1.219645\tres = 1.321E-04\n", "[ NORMAL ] Iteration 165:\tk_eff = 1.219794\tres = 1.271E-04\n", - "[ NORMAL ] Iteration 166:\tk_eff = 1.219937\tres = 1.223E-04\n", - "[ NORMAL ] Iteration 167:\tk_eff = 1.220075\tres = 1.174E-04\n", - "[ NORMAL ] Iteration 168:\tk_eff = 1.220207\tres = 1.131E-04\n", - "[ NORMAL ] Iteration 169:\tk_eff = 1.220335\tres = 1.085E-04\n", - "[ NORMAL ] Iteration 170:\tk_eff = 1.220458\tres = 1.044E-04\n", - "[ NORMAL ] Iteration 171:\tk_eff = 1.220576\tres = 1.008E-04\n", - "[ NORMAL ] Iteration 172:\tk_eff = 1.220689\tres = 9.680E-05\n", - "[ NORMAL ] Iteration 173:\tk_eff = 1.220799\tres = 9.304E-05\n", - "[ NORMAL ] Iteration 174:\tk_eff = 1.220904\tres = 8.975E-05\n", - "[ NORMAL ] Iteration 175:\tk_eff = 1.221006\tres = 8.643E-05\n", - "[ NORMAL ] Iteration 176:\tk_eff = 1.221104\tres = 8.326E-05\n", - "[ NORMAL ] Iteration 177:\tk_eff = 1.221197\tres = 7.985E-05\n", - "[ NORMAL ] Iteration 178:\tk_eff = 1.221287\tres = 7.662E-05\n", - "[ NORMAL ] Iteration 179:\tk_eff = 1.221374\tres = 7.371E-05\n", - "[ NORMAL ] Iteration 180:\tk_eff = 1.221457\tres = 7.101E-05\n", - "[ NORMAL ] Iteration 181:\tk_eff = 1.221538\tres = 6.821E-05\n", - "[ NORMAL ] Iteration 182:\tk_eff = 1.221615\tres = 6.577E-05\n", - "[ NORMAL ] Iteration 183:\tk_eff = 1.221689\tres = 6.307E-05\n", - "[ NORMAL ] Iteration 184:\tk_eff = 1.221760\tres = 6.069E-05\n", - "[ NORMAL ] Iteration 185:\tk_eff = 1.221829\tres = 5.831E-05\n", - "[ NORMAL ] Iteration 186:\tk_eff = 1.221895\tres = 5.641E-05\n", - "[ NORMAL ] Iteration 187:\tk_eff = 1.221958\tres = 5.382E-05\n", - "[ NORMAL ] Iteration 188:\tk_eff = 1.222019\tres = 5.206E-05\n", - "[ NORMAL ] Iteration 189:\tk_eff = 1.222077\tres = 4.967E-05\n", - "[ NORMAL ] Iteration 190:\tk_eff = 1.222134\tres = 4.811E-05\n", - "[ NORMAL ] Iteration 191:\tk_eff = 1.222188\tres = 4.618E-05\n", - "[ NORMAL ] Iteration 192:\tk_eff = 1.222241\tres = 4.456E-05\n", - "[ NORMAL ] Iteration 193:\tk_eff = 1.222291\tres = 4.293E-05\n", - "[ NORMAL ] Iteration 194:\tk_eff = 1.222339\tres = 4.122E-05\n", - "[ NORMAL ] Iteration 195:\tk_eff = 1.222386\tres = 3.982E-05\n", - "[ NORMAL ] Iteration 196:\tk_eff = 1.222431\tres = 3.788E-05\n", - "[ NORMAL ] Iteration 197:\tk_eff = 1.222474\tres = 3.663E-05\n", - "[ NORMAL ] Iteration 198:\tk_eff = 1.222515\tres = 3.522E-05\n", - "[ NORMAL ] Iteration 199:\tk_eff = 1.222555\tres = 3.381E-05\n", - "[ NORMAL ] Iteration 200:\tk_eff = 1.222593\tres = 3.264E-05\n", - "[ NORMAL ] Iteration 201:\tk_eff = 1.222629\tres = 3.117E-05\n", - "[ NORMAL ] Iteration 202:\tk_eff = 1.222665\tres = 2.985E-05\n", - "[ NORMAL ] Iteration 203:\tk_eff = 1.222699\tres = 2.901E-05\n", - "[ NORMAL ] Iteration 204:\tk_eff = 1.222732\tres = 2.770E-05\n", - "[ NORMAL ] Iteration 205:\tk_eff = 1.222763\tres = 2.679E-05\n", - "[ NORMAL ] Iteration 206:\tk_eff = 1.222793\tres = 2.560E-05\n", - "[ NORMAL ] Iteration 207:\tk_eff = 1.222823\tres = 2.487E-05\n", - "[ NORMAL ] Iteration 208:\tk_eff = 1.222851\tres = 2.412E-05\n", - "[ NORMAL ] Iteration 209:\tk_eff = 1.222878\tres = 2.298E-05\n", - "[ NORMAL ] Iteration 210:\tk_eff = 1.222904\tres = 2.194E-05\n", - "[ NORMAL ] Iteration 211:\tk_eff = 1.222929\tres = 2.131E-05\n", - "[ NORMAL ] Iteration 212:\tk_eff = 1.222953\tres = 2.030E-05\n", - "[ NORMAL ] Iteration 213:\tk_eff = 1.222976\tres = 1.963E-05\n", - "[ NORMAL ] Iteration 214:\tk_eff = 1.222998\tres = 1.889E-05\n", - "[ NORMAL ] Iteration 215:\tk_eff = 1.223020\tres = 1.812E-05\n", - "[ NORMAL ] Iteration 216:\tk_eff = 1.223041\tres = 1.764E-05\n", - "[ NORMAL ] Iteration 217:\tk_eff = 1.223060\tres = 1.691E-05\n", - "[ NORMAL ] Iteration 218:\tk_eff = 1.223079\tres = 1.629E-05\n", - "[ NORMAL ] Iteration 219:\tk_eff = 1.223098\tres = 1.571E-05\n", - "[ NORMAL ] Iteration 220:\tk_eff = 1.223115\tres = 1.508E-05\n", - "[ NORMAL ] Iteration 221:\tk_eff = 1.223132\tres = 1.429E-05\n", - "[ NORMAL ] Iteration 222:\tk_eff = 1.223149\tres = 1.394E-05\n", - "[ NORMAL ] Iteration 223:\tk_eff = 1.223165\tres = 1.330E-05\n", - "[ NORMAL ] Iteration 224:\tk_eff = 1.223180\tres = 1.299E-05\n", - "[ NORMAL ] Iteration 225:\tk_eff = 1.223194\tres = 1.241E-05\n", - "[ NORMAL ] Iteration 226:\tk_eff = 1.223208\tres = 1.167E-05\n", - "[ NORMAL ] Iteration 227:\tk_eff = 1.223221\tres = 1.151E-05\n", - "[ NORMAL ] Iteration 228:\tk_eff = 1.223234\tres = 1.073E-05\n", - "[ NORMAL ] Iteration 229:\tk_eff = 1.223246\tres = 1.051E-05\n", - "[ NORMAL ] Iteration 230:\tk_eff = 1.223258\tres = 1.000E-05\n" + "[ NORMAL ] Iteration 166:\tk_eff = 1.219938\tres = 1.222E-04\n", + "[ NORMAL ] Iteration 167:\tk_eff = 1.220076\tres = 1.176E-04\n", + "[ NORMAL ] Iteration 168:\tk_eff = 1.220208\tres = 1.131E-04\n", + "[ NORMAL ] Iteration 169:\tk_eff = 1.220336\tres = 1.088E-04\n", + "[ NORMAL ] Iteration 170:\tk_eff = 1.220459\tres = 1.046E-04\n", + "[ NORMAL ] Iteration 171:\tk_eff = 1.220577\tres = 1.006E-04\n", + "[ NORMAL ] Iteration 172:\tk_eff = 1.220691\tres = 9.681E-05\n", + "[ NORMAL ] Iteration 173:\tk_eff = 1.220800\tres = 9.312E-05\n", + "[ NORMAL ] Iteration 174:\tk_eff = 1.220905\tres = 8.957E-05\n", + "[ NORMAL ] Iteration 175:\tk_eff = 1.221006\tres = 8.615E-05\n", + "[ NORMAL ] Iteration 176:\tk_eff = 1.221104\tres = 8.287E-05\n", + "[ NORMAL ] Iteration 177:\tk_eff = 1.221197\tres = 7.971E-05\n", + "[ NORMAL ] Iteration 178:\tk_eff = 1.221287\tres = 7.667E-05\n", + "[ NORMAL ] Iteration 179:\tk_eff = 1.221374\tres = 7.374E-05\n", + "[ NORMAL ] Iteration 180:\tk_eff = 1.221457\tres = 7.093E-05\n", + "[ NORMAL ] Iteration 181:\tk_eff = 1.221537\tres = 6.823E-05\n", + "[ NORMAL ] Iteration 182:\tk_eff = 1.221615\tres = 6.562E-05\n", + "[ NORMAL ] Iteration 183:\tk_eff = 1.221689\tres = 6.312E-05\n", + "[ NORMAL ] Iteration 184:\tk_eff = 1.221760\tres = 6.071E-05\n", + "[ NORMAL ] Iteration 185:\tk_eff = 1.221829\tres = 5.840E-05\n", + "[ NORMAL ] Iteration 186:\tk_eff = 1.221895\tres = 5.617E-05\n", + "[ NORMAL ] Iteration 187:\tk_eff = 1.221958\tres = 5.402E-05\n", + "[ NORMAL ] Iteration 188:\tk_eff = 1.222019\tres = 5.196E-05\n", + "[ NORMAL ] Iteration 189:\tk_eff = 1.222078\tres = 4.998E-05\n", + "[ NORMAL ] Iteration 190:\tk_eff = 1.222134\tres = 4.807E-05\n", + "[ NORMAL ] Iteration 191:\tk_eff = 1.222189\tres = 4.624E-05\n", + "[ NORMAL ] Iteration 192:\tk_eff = 1.222241\tres = 4.447E-05\n", + "[ NORMAL ] Iteration 193:\tk_eff = 1.222291\tres = 4.277E-05\n", + "[ NORMAL ] Iteration 194:\tk_eff = 1.222340\tres = 4.114E-05\n", + "[ NORMAL ] Iteration 195:\tk_eff = 1.222386\tres = 3.957E-05\n", + "[ NORMAL ] Iteration 196:\tk_eff = 1.222431\tres = 3.806E-05\n", + "[ NORMAL ] Iteration 197:\tk_eff = 1.222474\tres = 3.661E-05\n", + "[ NORMAL ] Iteration 198:\tk_eff = 1.222515\tres = 3.521E-05\n", + "[ NORMAL ] Iteration 199:\tk_eff = 1.222555\tres = 3.386E-05\n", + "[ NORMAL ] Iteration 200:\tk_eff = 1.222594\tres = 3.257E-05\n", + "[ NORMAL ] Iteration 201:\tk_eff = 1.222630\tres = 3.133E-05\n", + "[ NORMAL ] Iteration 202:\tk_eff = 1.222666\tres = 3.013E-05\n", + "[ NORMAL ] Iteration 203:\tk_eff = 1.222700\tres = 2.898E-05\n", + "[ NORMAL ] Iteration 204:\tk_eff = 1.222733\tres = 2.787E-05\n", + "[ NORMAL ] Iteration 205:\tk_eff = 1.222764\tres = 2.681E-05\n", + "[ NORMAL ] Iteration 206:\tk_eff = 1.222795\tres = 2.578E-05\n", + "[ NORMAL ] Iteration 207:\tk_eff = 1.222824\tres = 2.480E-05\n", + "[ NORMAL ] Iteration 208:\tk_eff = 1.222852\tres = 2.385E-05\n", + "[ NORMAL ] Iteration 209:\tk_eff = 1.222879\tres = 2.294E-05\n", + "[ NORMAL ] Iteration 210:\tk_eff = 1.222905\tres = 2.206E-05\n", + "[ NORMAL ] Iteration 211:\tk_eff = 1.222930\tres = 2.122E-05\n", + "[ NORMAL ] Iteration 212:\tk_eff = 1.222954\tres = 2.041E-05\n", + "[ NORMAL ] Iteration 213:\tk_eff = 1.222977\tres = 1.963E-05\n", + "[ NORMAL ] Iteration 214:\tk_eff = 1.222999\tres = 1.888E-05\n", + "[ NORMAL ] Iteration 215:\tk_eff = 1.223020\tres = 1.816E-05\n", + "[ NORMAL ] Iteration 216:\tk_eff = 1.223041\tres = 1.747E-05\n", + "[ NORMAL ] Iteration 217:\tk_eff = 1.223061\tres = 1.680E-05\n", + "[ NORMAL ] Iteration 218:\tk_eff = 1.223080\tres = 1.616E-05\n", + "[ NORMAL ] Iteration 219:\tk_eff = 1.223098\tres = 1.554E-05\n", + "[ NORMAL ] Iteration 220:\tk_eff = 1.223116\tres = 1.495E-05\n", + "[ NORMAL ] Iteration 221:\tk_eff = 1.223132\tres = 1.437E-05\n", + "[ NORMAL ] Iteration 222:\tk_eff = 1.223149\tres = 1.382E-05\n", + "[ NORMAL ] Iteration 223:\tk_eff = 1.223164\tres = 1.330E-05\n", + "[ NORMAL ] Iteration 224:\tk_eff = 1.223179\tres = 1.279E-05\n", + "[ NORMAL ] Iteration 225:\tk_eff = 1.223194\tres = 1.230E-05\n", + "[ NORMAL ] Iteration 226:\tk_eff = 1.223208\tres = 1.183E-05\n", + "[ NORMAL ] Iteration 227:\tk_eff = 1.223221\tres = 1.138E-05\n", + "[ NORMAL ] Iteration 228:\tk_eff = 1.223234\tres = 1.094E-05\n", + "[ NORMAL ] Iteration 229:\tk_eff = 1.223246\tres = 1.052E-05\n", + "[ NORMAL ] Iteration 230:\tk_eff = 1.223258\tres = 1.012E-05\n" ] } ], @@ -1780,9 +1811,9 @@ }, { "data": { - "image/png": "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\nRK5CYII=\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1863,9 +1894,9 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAADSCAYAAABAbduaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGuBJREFUeJzt3Xm4HFWZx/HvDfsScABRYDAIA6+yKGEnBBKQLY4wMDAw\nC7LL5riNIoGIBJRFFgcdZBmBSAAHUSbsQ1QIIWxxCCBg5BeQTSHIJjKKLEnu/HHOhc7lLp3bVZ1b\ndX+f58lDd3X1W6cvb7196lT1qY7Ozk7MzKx+hi3uBpiZWTlc4M3MasoF3sysplzgzcxqygXezKym\nXODNzGpqycXdgLJFxAJgNUmvNCw7CNhX0h59vG9t4B7gY43v7bbOscA/56dLAFOBEyS9PcC2ngg8\nKOmGiNgCOEzS0YsY40hgZUlnDqQN3WKNAJ4E7pA0tttrk4CD6Pa37SFGr58jIjYHjpO0X6ttHSoi\n4ijgKNK+2wncD3xN0m/7ed+uwLckjWxYtgnwXWBlYB5wlKT7e3jvNsBpwCqkPH8GOFbS7AF+hoVy\nIiKmAv/UVx71EGMN4MeSRg+kDT3Eux3YAVhX0lMNy8cA04CvSPp2PzF6/RwRcWOO8WgR7W3WUOjB\n93ahf68/AIiIA4E7gDX6WGdfYC9g67zTbAF8BDhp4E1lJ2Cp/HhjYK1FDSDpoiKKe4M3gA3yFx4A\nEbE8sB19/A0b9Po5JM1ycW9eRJwN7A18UtLGkjYBfg7cExFr9vKeZSPiG8CPSMW5a/lypA7JGZI2\nA74BXNHD+5cGbgC+JGnTvM0fAjdHRMcAP0r3nNhlUQNImltUcc86gaeBA7otPwh4vskYvX4OSZ9q\nd3GHIdCDBxYpCXPPYE9gHPCrPlZdg7TDrAC8JemtiPgssHqOswLwH6RC+DZwnaQJEbE+8L38vjWB\nB4H9gcNJXxJn5QJ6MrBSRFwi6bCI2AOYQPoCeJ3UG5gZEScB2wIfBB4CfgOsKunzEfEk8APgE8Da\nwNWSjsvtGw8cCrwGzAD2kvThHj7nfFJxOAA4PS/7e+A64N9yrA7gXGArYDjpb3448NvGzwFMBr4D\n/BlYHjgOOEfSJhHxc2CWpOMiYmdgErCZpBf7+H8wZETEWsCRwFqSXutaLunyiNgMOB74XA9v3Y30\ntz4EOKVh+a7A45Km5jg35HzpbnlSD394wzavjIg/kvJ/XkQcSsqFecBLpKL4HM3lRNf+OS0iPkkq\ntOeR8nUp4CpJZ+SjyRnAr4ERwMHAzyQNz/vAOqR9cgTwArC/pOcjYivS/rYU8ER+/UuS7ujhs14B\n/AvwTXjnS3A70pcoedmnSH/rpUj7+mWSToqISxs+x9/mts4ENiHtt/8O7EP6cjspL+8A/hc4TdJ7\nvlyLMBR68JD+6Pfnfw+wcKIvJPcM9s3ftn19OVwG/BF4PiLuzr2rEZLuy6+fAiwjKYCRwKiI2IGU\n5D+QtB2wPrAu8LeSzgfuIxXuK4CvAzNycf8b4FRgnKTNSTv6lJyAAB8CRko6sId2riBpB1Kifi4i\nRkTEbsCBwOaStiDtgH0d6Uxm4Z7NQaQC3GVr4IOStpW0cV5/vKTfNX6OvO5GpJ1vJPBmw3YPAD4d\nEXsClwL/6OK+kK2B2Y3FvcGtQI+9WUnXSfoy8IduL20A/D4iLo6I/42In/Lu0WPj+18FvgpMjYjH\nI2JyRBwC3CppXkR8DDgD2FXSpsD1pILWVE5IOjRvaqykZ4HLgUskbZlj7JKPlgH+GjhZ0keAuSyc\ns6OBfSR9FHgVODIilgB+AkzIbfsu8PGe/k7ZA8BbEbFlft7VkZnfsM6XgAMlbUXqWJ0QEat0+xy/\ny48flrSRpGsb/p6TgbuBs0idnellFXcYOgV+rKTN8r+RpARriaTXJO0GBPB94P3AjRHR1cvdGbgk\nr/u2pB1zr2E88FIev7+A1OtYsSF0T18qu5B66LfmL6grSb2lv8mv3yuptwJ9XW7Dc8DvSeOo40jj\nl/+X1/leP5/1AWBBRIyMiL8GVszjrx359XuBEyPiqIg4C9i322dq9NuGHaBxG88DRwBTgIsk3dVX\nm4ao9xTgbBmaGy7rHmsccGEupueRhl16KvLnknqrnyf1zI8D7o+I4aSjw1tyfiHpu5KOWcScAOjI\nR65jgG/kPL+X1JPfNK/zdl7Wk9sl/Tk/foCU55sAnZJ+mtt2O30flcPCnZmDSEfAjfYEtoiIrwNd\nY/IrNH6OhsczetnG0cDupC+wL/TTnpYMhSEa6KMnnhOpa+c4vKeTTL2871jgTkn3kHqzkyJiO+B/\nSIdw8xrikgvj66SiPgy4GriR1PvubxhpCVKP6Z+6xXuO1Mv4Ux/v/Uu35x25bY3bnE//Lgc+DbyY\nH78jH5KeC5wNXAs8SjrU7Ulfbd2YNN65VRPtGWruBdaPiNUlvdDttR2Bu/NJ64vzss48tt6b54BH\nu444JV0fEReTjijVtVJEjAJGSTobuJn0JXAC8Aip49E9z5clDYOsR+qhNpMT5Bhd5wi2lfRmjrcq\nKYffD7wpaUEv72/M807ezfPundj+cv2HwH0R8e/AcEmzI6Lrsy1PGlK9hlS8LyWdh2vclxq/aHvL\n9Q8CywJLk4Zpn+qnTQM2VHrwvZI0sqF331Rxz5YHTo+Iv2pY9lHSVQ2Qxu0OioiOiFiGdKg4hrRT\nnCLpx6TE2Jp3E3se7/bSGh/fBuwaOdPyWOUvST23gbgJ2CciVsrPD6f3HmBX8l4B/AOwH2knaLQz\ncL2ki4BZpKTv6TP1Ko+Vfo50HuJ9EfH55j7K0JB7yN8F/qvxhGoeLvl70hUys3I+j+ynuEPqiKwT\nESNznB2ABaSrphq9CEzIhb7LWqT8f5h0hcnOEfGB/NpRwLfoPyeWbog3D1g6H1HeC3wlt+l9wF3A\n3+X1FvWk7q+BN/IVRF05tgl9HO1Imps/16Wk3nyj9UlHIV+TdBMwNn+O3j7Xe0TEkqT950TSuYir\n8lBSKYZCgW9lusy+3nsKqYjfHRG/iohHSQW866qQk0mHlL8kJfiNkqYAJwDXRsQvgPOB23l3qOUG\n4OyI+DTpEs2PRsQ1eTjkCFIyPJBj7yGpe++8v/Z3AkiaRurp3Z3bMZx0dNFrjFxgZgNz8rhsY/wL\ngbER8SBph3wc6Dphew/wkYi4prdGRsSKpKT/17yDHUI6vO9rvHTIkTSB9EV7XUQ8FBEiXXm1rfq5\nTLKHWL8nFd0LIuJh4Bxgb0lvdVvvsbze6XkM/hHgKuAzkh6T9AhwLGmM/gHSydujgIvoOyeiISem\nAHdGxIaky463iYiH8npXSvqvvN4i7cuS5pOGhk6OiFmk8fO59JzrjbEnk8bXF9qupF+SOkeKiPuA\nT5H2ia79t+tzbNRDW7uenwbMlXSppItJJ6VPXZTPtSg6PF3w0JMP5UdJ+o/8/EvAVo1DQGZ1EBFn\nAmdJejEPaz5Iuta9p5PVtTNUxuBtYXOA4yLiCN69/veIxdsks1I8DdwWEV0/PjxsqBR3cA/ezKy2\nhsIYvJnZkOQCb2ZWU4NqDL5jVktXvCxk3c37+z1D856YvlFhsWzx6hyzyJfatWwstxSW19M7PlRU\nKNJPMawuOjsnvie33YM3M6spF3gzs5pygTczqykXeDOzmir1JGueJ/x80hSdb5Am83qizG2alc15\nbVVRdg9+L9Kc6KNIMyz2ecsrs4pwXlsllF3gRwO3AEiaSZop0KzqnNdWCWUX+JVIdz3qMi8iPO5v\nVee8tkooOylfo+FejsCwPibsN6sK57VVQtkF/i7gkwARsQ1pIn2zqnNeWyWUPVXBFNJNc7vur3lI\nydszawfntVVCqQU+3wj66DK3YdZuzmurCp8YMjOrKRd4M7OacoE3M6spF3gzs5pygTczq6lBdUcn\n/lRcqOV5vbBY2465rbBY90zfqbBYVg3TO+4tLNZJjCss1smcU1is5LWC41mr3IM3M6spF3gzs5py\ngTczqykXeDOzmnKBNzOrqdILfERsHRHTyt6OWbs5t22wK/uerMcCn6bQCyDNFj/ntlVB2T34x4G9\nS96G2eLg3LZBr9QCL2kKMK/MbZgtDs5tqwKfZDUzq6l2FfiONm3HrN2c2zZotavAd7ZpO2bt5ty2\nQav0ycYkPQ2MKns7Zu3m3LbBzmPwZmY15QJvZlZTLvBmZjXlAm9mVlMu8GZmNTW4btlXoEemb1lY\nrG+M+Uphsd4cs3Rhse6fObqwWECxv8v0bzxLcTInFRbrDL5cWCyA8YXeAtC3/yuCe/BmZjXlAm9m\nVlMu8GZmNeUCb2ZWUy7wZmY1VdpVNBGxJHApsA6wNHCqpBvK2p5Zuzi3rSrK7MEfALwkaQdgHHBe\nidsyayfntlVCmdfBXw38OD8eBrxd4rbM2sm5bZVQWoGX9DpARAwn7QwTytqWWTs5t60qSj3JGhFr\nA7cBl0n6UZnbMmsn57ZVQZknWT8ATAU+K2laWdsxazfntlVFmWPwxwPvA06MiK+Tbm02TtKbJW7T\nrB2c21YJZY7BfxH4YlnxzRYX57ZVhX/oZGZWUy7wZmY15QJvZlZTLvBmZjXlAm9mVlMdnZ2d/a4U\nESsBKwMdXcskPVN4Y6bTf2Oq7tziQl07ZbfiggGncGJhsZ6a/+HCYr3yu9ULi9U5YqmOxuftyO2O\njon1z2tgBicXFmt77i0sFvxPgbEGr87OiR3dl/V7mWREnACMB15ujAWsW1zTzNrPuW1118x18IcB\n60l6sezGmLWZc9tqrZkx+GeAV8puiNli4Ny2WmumB/8YcGdETAPe6Foo6ZTSWmXWHs5tq7VmCvyz\n+R80nIgyqwHnttVavwVe0oBPjUfEMOD7QAALgKMkzR5oPLMiDTS3nddWFb0W+HzY2uvlXZJ2aiL+\nHkCnpNERMQY4DdhrkVtpVqACctt5bZXQVw9+YqvBJV0XEV03I14H+EOrMc0KMLGVNzuvrSp6LfCS\nphexAUkLIuIHpB7OvkXENGtFEbntvLYqaMtUBZIOBjYALo6I5dqxTbOyOa9tsCv7nqwHRMT4/PQN\nYD7ppJRZZTmvrSqauqNTRKwOjAbmATMkNTvm+N/ApIiYnrf1Bd/WzAaTAea289oqoZm5aA4Azgbu\nBJYALoiIz0i6ub/3Snod2L/lVpqVYKC57by2qmimB/81YHNJzwJExAjgBqDfAm82yDm3rdaaGYN/\nDZjb9UTS08BbpbXIrH2c21ZrzfTgHwZujohJpHHK/YC5EXEggKTJJbbPrEzObau1Zgr8MFIvZ/f8\n/PX8b0fSrwG9E1hVObet1pqZi+aQdjTErN2c21Z3zVxF8yQ9zNshyXe9sUpzblvdNTNEM7bh8VLA\n3sAypbRmKPhicaH26ti2uGDAgpe3LyzWqat8ubBYU0cUee/ZXRqfjG147Nxu0facUViszl23KSxW\nx5wCb4n71MTiYrVBM0M0T3dbdFZE3Ad8s5wmmbWHc9vqrpkhmh0annYAGwGed8Mqz7ltddfMEE3j\nTRE6gZeAg8ppjllbObet1poZotkRICKGA0tIerX0Vpm1gXPb6q6ZIZp1gauA9YCOiHga2F/SnGY2\nkCdzug/Yudn3mLWDc9vqrpmpCi4CzpS0qqRVgNOB/2wmeEQsCVxI+vGI2WDj3LZaa6bArybpJ11P\nJF0NrNJk/LOBC4DnBtA2s7I5t63Wminwb0bEZl1PImJzmui1RMTBwAuSfka6QsFssHFuW601cxXN\nF4BrIuIVUjKvQnNzYR8CLIiIXYBNgckRsaekFwbcWrNiObet1pop8KuR7ju5AanHL0n9TqkqaUzX\n44iYBhzpHcAGGee21VozBf5MSTcBv2phOwX+VtisMM5tq7VmCvxvIuJSYCbwl66FizJXtqSdBtA2\ns7I5t63WminwL5PGJxtn//Fc2VYHzm2rNc8Hb0OWc9vqrs8CHxFHA89LmhIRM4H3A/OB3SX9ph0N\nNCuDc9uGgl6vg4+I44F9ePcE1HKkW5l9Bzih/KaZlcO5bUNFXz90OhDYq2GOjfl5/uzzWXjM0qxq\nnNs2JPRV4OdL+lPD828CSFoAvFlqq8zK5dy2IaGvMfhhETFc0v8BSLoGICJWbkvLrH/3TSw03LBV\nVyosVuf3i7tl34aHzy4sVr5ln3O7FH/pf5Umdfy0qTnfmtL5reJmk+h4suCfPVw4sdh43fTVg7+S\n9BPsd/b6iFgRuBS4otRWmZXLuW1DQl89+DPIs+VFxGzS9cEbApdL+nY7GmdWEue2DQm9FnhJ84Ej\nIuJkYKu8eJakZ9rSMrOSOLdtqGjmh07PAlPa0BaztnJuW901M1VBSyJiFvDH/PRJSYeVvU2zsjmv\nrQpKLfARsQx4QiarF+e1VUXZPfiPAytExFRgCWCCpJklb9OsbM5rq4RmbtnXiteBsyTtBhwNXBkR\nZW/TrGzOa6uEspNyDumaYyQ9RpqedY2St2lWNue1VULZBf5Q4ByAiFgTGA7MLXmbZmVzXlsllD0G\nfwkwKSJmAAuAQ/N8H2ZV5ry2Sii1wEt6GzigzG2YtZvz2qrCJ4bMzGrKBd7MrKZc4M3MasoF3sys\nplzgzcxqygXezKymSp9N0kr0p/5XWRTLvnpwYbE6zv23wmJ1frS4W67x6+JCWZmeLSxSx3E/KSxW\n51cLzEWgY+eCbwHYjXvwZmY15QJvZlZTLvBmZjXlAm9mVlPtuGXfeGBPYCngfEmTyt6mWdmc11YF\npfbgI2IMsK2kUcBYYO0yt2fWDs5rq4qye/C7AY9ExLWkObOPLXl7Zu3gvLZKKLvArwZ8CPgUsC5w\nPfCRkrdpVjbntVVC2SdZXwamSponaQ7wRkSsVvI2zcrmvLZKKLvA3wnsDu/c2mx50s5hVmXOa6uE\nUgu8pJuAByLiF8B1wDGSyv1trlnJnNdWFaVfJilpfNnbMGs357VVgX/oZGZWUy7wZmY15QJvZlZT\nLvBmZjXlAm9mVlMu8GZmNdXR2Tl4Lt/tmM7gacxQtGxxoW7delRhse7ouKewWBM7O4u951oTOjom\nOq9rY0Kh0W5m6cJijesht92DNzOrKRd4M7OacoE3M6spF3gzs5oqdS6aiDgIOBjoBJYDPg58UNJr\nZW7XrEzOa6uKUgu8pMuAywAi4jzgYu8EVnXOa6uKtgzRRMQWwIaSLmnH9szawXltg127xuCPB05u\n07bM2sV5bYNa6QU+IlYGNpA0vextmbWL89qqoB09+B2AW9uwHbN2cl7boNeOAh/AE23Yjlk7Oa9t\n0GvHLfvOLnsbZu3mvLYq8A+dzMxqygXezKymXODNzGrKBd7MrKZc4M3MasoF3syspgbVLfvMzKw4\n7sGbmdWUC7yZWU25wJuZ1ZQLvJlZTbnAm5nVlAu8mVlNlT6bZFEiogM4n3SD4zeAwyW1NF1rRGwN\nnCFpxxZiLAlcCqwDLA2cKumGAcYaBnyfNBXtAuAoSbMH2rYcc3XgPmBnSXNaiDML+GN++qSkw1qI\nNR7YE1gKOF/SpAHGqcXNr4vO7cGW1zleobldVF7nWLXN7Sr14PcClpE0inSrtG+3EiwijiUl3DIt\ntusA4CVJOwDjgPNaiLUH0ClpNHAicForDcs76YXA6y3GWQZA0k75Xys7wBhg2/z/cSyw9kBjSbpM\n0o6SdgJmAZ+rWnHPCsvtQZrXUGBuF5XXOVatc7tKBX40cAuApJnAFi3GexzYu9VGAVeTEhbS3/Pt\ngQaSdB1wRH66DvCHlloGZwMXAM+1GOfjwAoRMTUifp57iAO1G/BIRFwLXA/c2GLb6nDz6yJze9Dl\nNRSe20XlNdQ8t6tU4Ffi3cMogHn5sG9AJE0B5rXaKEmvS/pzRAwHfgxMaDHegoj4AfAd4MqBxomI\ng4EXJP0M6GilTaSe0lmSdgOOBq5s4W+/GrA5sG+O9cMW2wbVv/l1Ybk9WPM6x2w5twvOa6h5blep\nwL8GDG94PkzSgsXVmEYRsTZwG3CZpB+1Gk/SwcAGwMURsdwAwxwC7BIR04BNgcl53HIg5pB3SEmP\nAS8Dawww1svAVEnz8tjpGxGx2gBj1eXm14Myt4vOaygkt4vMa6h5blepwN8FfBIgIrYBHi4obku9\ngIj4ADAV+Kqky1qMdUA+SQPpZNt80gmpRSZpTB7D2xF4EDhQ0gsDbNqhwDm5jWuSitHcAca6E9i9\nIdbypB1joOpw8+sycnvQ5HWOV0huF5zXUPPcrsxVNMAU0jf3Xfn5IQXFbXW2teOB9wEnRsTXc7xx\nkt4cQKz/BiZFxHTS/5svDDBOd61+xktI7ZpB2ikPHWgPU9JNEbF9RPyCVISOkdRK++pw8+sycnsw\n5TWUk9tFzJRY69z2bJJmZjVVpSEaMzNbBC7wZmY15QJvZlZTLvBmZjXlAm9mVlMu8GZmNVWl6+Ar\nJSKWAMYD/0K6vnYJYLKk09vcjvWBs4ANST8wEXCspKf6ed9E4GeS7uprPRt6nNvV4R58eS4gTRq1\ntaSNgS2BT0TE0e1qQP4J923AVZI2kPQx4FrgrohYtZ+3jyHtuGbdObcrwj90KkFErEXqTazZOMVn\nRGwAbCRpSkRMAlYF1gO+CrxEmoRpmfz4SElP5Dk3TpJ0R0SMAG6X9OH8/gXAJqTJqr4p6Ypu7TgJ\nGCHp0G7LfwQ8JOnUiFggaVhefhBpmtPbSPOTzwX2lvSrQv9AVlnO7WpxD74cWwGzu8/fLGlOnu2v\ny0uSNgJ+ClxF+mnzSOCi/Lwnjd/IawHbAJ8Azu5h0qUtgV/0EOOO/Fr3eJDm7L6cdDOFw+q+A9gi\nc25XiAt8ed5JrojYJyIeiIiHImJmwzpdjzcAXpF0P4CknwDr5ala+zJJ0gJJz5ImOhrdQxt6Os+y\ndMPjvialKmI6Vqsf53ZFuMCXYxawYUSsCCDpmtx72QN4f8N6f8n/HcZ7E66DNE7Y2fDaUt3WaZz3\newneOw/4TGBUD+3blp57P93jm3Xn3K4QF/gSSHoGuBy4LM/p3HVPyj1I06S+5y3AKhGxeV53P+Bp\nSa+Sxiw3yut1v1PPfnn9EaRD5xndXj8f2C4i/rlrQUQcSNoxLsyLXoyIDfN9QfdseO88fJWVdePc\nrhYX+JJIOoY0z/e0iLifNMf3SPJ80TQc5kp6C9gf+F5EPAQck58DnAl8NiLu47332Vw+L78B+Iyk\nhW6DJukVYHtg74h4NCIeJSX66PwapMvdbsptfbTh7bcAF+b5yc3e4dyuDl9FU1H5SoNpkiYv7raY\nFcm5XRz34KvL38xWV87tgrgHb2ZWU+7Bm5nVlAu8mVlNucCbmdWUC7yZWU25wJuZ1ZQLvJlZTf0/\nfn35+EIOpHUAAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1896,21 +1927,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 2", "language": "python", - "name": "python3" + "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 3 + "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.1" + "pygments_lexer": "ipython2", + "version": "2.7.6" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index c39f21dfaf..21aae7e404 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -32,7 +32,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/romano/miniconda3/envs/default/lib/python3.5/site-packages/matplotlib/__init__.py:1350: UserWarning: This call to matplotlib.use() has no effect\n", + "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.1+1178.ga40c9ec-py2.7-linux-x86_64.egg/matplotlib/__init__.py:1362: UserWarning: This call to matplotlib.use() has no effect\n", "because the backend has already been chosen;\n", "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", "or matplotlib.backends is imported for the first time.\n", @@ -459,7 +459,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAWFSURB\nVGje7Zs7cttADIZ9CSvXcrP0iCxUqbBc8Ag6xR6BhV2EvYvwFD4CCx1ABT1jMdgndpegRQnOrCbj\npPlGESISC4A/gd27e8H583CX3b4+iKJrRHkS4vkghMPBonRYWGwtfgD2YN+dRDUOoh6lACw0Noi9\nw2fESuEoAR/uVuMolX039oXGT7F3eFL2iEfhUX1f4cPdL/ishs+68ai+udE4xPhexbjX2FfjGNoP\nj/DPNX4Tsd+EODr8FvsVdf1Hd9P2VvCi4+s/aXvrf+upAD+1/9GV1mkOH5X9vV6THtfvACslcaUC\nbESL61drBPtdI8SrFMWrELsXCkuFDYW75gbiP7d9Cf7bAYI/aCwUShrBvh30+lWQkzVgZ/HD4Oix\nNCgcQpJ3BxU/Ln91elKoM5VEE38QtJ+Yv6cQ9xjKNYayyl8TypP8DfJnQ2H/b/N3ye9P83cT33SQ\nv/sQh9gV7zZ/0dNj5HQaC5vVzv9+/WFN2w8KVaZ2BwL1+pv4g0x1QRfjq0dB4Q3kT277oP6VNL6g\nKxNU9a8zK+WLbi/WwpdihbboKqyxFOulHMj6v4W/AXbmUeAxrv9J/CqEBXaRKsXaodD4nsYvkT/G\n6H1D4SR/iPy1Roj9JsQ5e18/7EUHv1+Fvx/Xj5V9Ugb5K8TW4TZEEdcvoz/up0VTe9qsVIppKVX6\na7D6y9ZvwEKjrtQxPtv6fXII9vCxKOGaIeAIfEF8IvAG8ie3vRK9rRQl+PPpSctbhfpTUCpviH+k\nxsZgpT91+snoX1l49KK3iUQvICRy5aUw6l8leoVwoo3Uv1rKreF/UFLY6d9QP4L9Wf2r7EP9GOSf\ncsjZ56f60kz+XmVPXv+RuP49ff0T/53Rv6n/7m2lvXT9Wqd/VUz8hvh5M/ED6ILmt4mfHYZSaePn\nTWpsf/SvqV9O6dLYYClLEetnoH/LBLFoBvrX189uTv8++kot5vTvQD4/9jP690g9P/4z/bvo/XVG\n/xYoZZx+8fr3MxAtsf7tUOkG2JqsTtCIpgCt/qX1226KqZS7gfzJbe+c9jLrtIZ8lXD+s4umlW6A\nKIVrlML2/cXjgPFjlJqIRC+Fj0bVJe+vSh56pSdR6YkQ1ygF10Wqf0FeLta/iKn9Mv1L24ti2e+7\nW4n1b3T/W+L+t9H9T/SvVboUmqJJon1/hZq8LnzRDlDrX1u0xRT1+6vEpomMmyYkqi95vIH8yW1P\nN+122KkLcNLKi/WTF01z/cNASrWE/l3ev6T17zX909z9X27/euK/Rf3zWP+Waf9eEv37KkWJ+rfD\nl6ZglNDa+cEBhwYDvkoNP/rX69814NaI3imq0l7OYDy/qSdDGwr7r+Y3VbzoKZr6XX2lfxfOb87q\nXzr+b1j/Xlp/nP6dn98McdH7cn7zjPObKsYWS3Eb9w8n85smHtqQuPuZ30T2dlIT6F9xFl+n8xsl\negL9a4c2KRr9W4rp/GYqumiM9Nec/j2v/yj9u1h//hv9e93vc++f63/u+rPjL3f+5Lbn1j9m/eXW\nf+7zh/v8+2b9e/Hzn6s/uPqHrb8g71n6L3f+5Lbnvn8w33+4718/+5d47//c/gO7/5E7/nPbc/tv\n3P4fs//I7X9y+6/fqH+v6j9z+9/c/ju3/8+eP+TOn9z23PkXc/7Gnf9x5483q38Xzn+582fu/Js9\nfy8kb/6fO39y23P3n3S8/S/c/Tfc/T83uX/pgv1XE/9duP+Lu/+Mvf8td/znti8kb/8ld/9nx9t/\nSjw/Ltr/yt1/+337f6/bf0zoB3nJ/ucVc/81d/83e/957vzJbc89/8A8f8E9/5HE78XnT/4H/cs5\nf8Q9/8Q9f8U+/5U7f3Lbc88fdrzzjyvm+cuf/Uu887/c88fs88954/8vO4SjPC+2QRIAAAAldEVY\ndGRhdGU6Y3JlYXRlADIwMTYtMDUtMDlUMTM6Mzk6MTEtMDQ6MDCdrTk4AAAAJXRFWHRkYXRlOm1v\nZGlmeQAyMDE2LTA1LTA5VDEzOjM5OjExLTA0OjAw7PCBhAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -543,6 +543,7 @@ "* `CaptureXS` (`\"capture\"`)\n", "* `FissionXS` (`\"fission\"`)\n", "* `NuFissionXS` (`\"nu-fission\"`)\n", + "* `KappaFissionXS` (`\"kappa-fission\"`)\n", "* `ScatterXS` (`\"scatter\"`)\n", "* `NuScatterXS` (`\"nu-scatter\"`)\n", "* `ScatterMatrixXS` (`\"scatter matrix\"`)\n", @@ -722,10 +723,11 @@ " 888\n", "\n", " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.org/en/latest/license.html\n", + " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: df280b60eb1c6d7b7f842e05ede734a4883a0fc8\n", - " Date/Time: 2016-05-05 15:06:49\n", + " Git SHA1: 7b20f8ad4aa9e6f02f8b1d51e002f9f56ba7aa15\n", + " Date/Time: 2016-05-09 13:39:11\n", + " MPI Processes: 1\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -811,20 +813,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.1500E-01 seconds\n", - " Reading cross sections = 1.1800E-01 seconds\n", - " Total time in simulation = 5.3686E+01 seconds\n", - " Time in transport only = 5.3657E+01 seconds\n", - " Time in inactive batches = 4.3970E+00 seconds\n", - " Time in active batches = 4.9289E+01 seconds\n", - " Time synchronizing fission bank = 3.0000E-03 seconds\n", + " Total time for initialization = 5.0300E-01 seconds\n", + " Reading cross sections = 1.0400E-01 seconds\n", + " Total time in simulation = 4.8096E+01 seconds\n", + " Time in transport only = 4.8074E+01 seconds\n", + " Time in inactive batches = 4.1080E+00 seconds\n", + " Time in active batches = 4.3988E+01 seconds\n", + " Time synchronizing fission bank = 4.0000E-03 seconds\n", " Sampling source sites = 2.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 5.4118E+01 seconds\n", - " Calculation Rate (inactive) = 5685.70 neutrons/second\n", - " Calculation Rate (active) = 2028.85 neutrons/second\n", + " Total time elapsed = 4.8613E+01 seconds\n", + " Calculation Rate (inactive) = 6085.69 neutrons/second\n", + " Calculation Rate (active) = 2273.35 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -950,8 +952,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/romano/openmc/openmc/tallies.py:1996: RuntimeWarning: invalid value encountered in true_divide\n", - " self_rel_err = data['self']['std. dev.'] / data['self']['mean']\n" + "/usr/local/lib/python2.7/dist-packages/openmc-0.7.1-py2.7.egg/openmc/tallies.py:1996: RuntimeWarning: invalid value encountered in true_divide\n" ] }, { @@ -965,6 +966,7 @@ " cell\n", " group in\n", " nuclide\n", + " score\n", " mean\n", " std. dev.\n", " \n", @@ -975,6 +977,7 @@ " 10000\n", " 1\n", " U-235\n", + " (nu-fission / flux)\n", " 8.055246e-03\n", " 2.857567e-05\n", " \n", @@ -983,6 +986,7 @@ " 10000\n", " 1\n", " U-238\n", + " (nu-fission / flux)\n", " 7.339215e-03\n", " 4.349466e-05\n", " \n", @@ -991,6 +995,7 @@ " 10000\n", " 1\n", " O-16\n", + " (nu-fission / flux)\n", " 0.000000e+00\n", " 0.000000e+00\n", " \n", @@ -999,6 +1004,7 @@ " 10000\n", " 2\n", " U-235\n", + " (nu-fission / flux)\n", " 3.615565e-01\n", " 2.050486e-03\n", " \n", @@ -1007,6 +1013,7 @@ " 10000\n", " 2\n", " U-238\n", + " (nu-fission / flux)\n", " 6.742638e-07\n", " 3.795256e-09\n", " \n", @@ -1015,6 +1022,7 @@ " 10000\n", " 2\n", " O-16\n", + " (nu-fission / flux)\n", " 0.000000e+00\n", " 0.000000e+00\n", " \n", @@ -1023,13 +1031,13 @@ "
" ], "text/plain": [ - " cell group in nuclide mean std. dev.\n", - "3 10000 1 U-235 8.055246e-03 2.857567e-05\n", - "4 10000 1 U-238 7.339215e-03 4.349466e-05\n", - "5 10000 1 O-16 0.000000e+00 0.000000e+00\n", - "0 10000 2 U-235 3.615565e-01 2.050486e-03\n", - "1 10000 2 U-238 6.742638e-07 3.795256e-09\n", - "2 10000 2 O-16 0.000000e+00 0.000000e+00" + " cell group in nuclide score mean std. dev.\n", + "3 10000 1 U-235 (nu-fission / flux) 8.06e-03 2.86e-05\n", + "4 10000 1 U-238 (nu-fission / flux) 7.34e-03 4.35e-05\n", + "5 10000 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00\n", + "0 10000 2 U-235 (nu-fission / flux) 3.62e-01 2.05e-03\n", + "1 10000 2 U-238 (nu-fission / flux) 6.74e-07 3.80e-09\n", + "2 10000 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00" ] }, "execution_count": 30, @@ -1178,6 +1186,7 @@ " cell\n", " group in\n", " nuclide\n", + " score\n", " mean\n", " std. dev.\n", " \n", @@ -1188,6 +1197,7 @@ " 10000\n", " 1\n", " U-235\n", + " (nu-fission / flux)\n", " 0.074860\n", " 0.000303\n", " \n", @@ -1196,6 +1206,7 @@ " 10000\n", " 1\n", " U-238\n", + " (nu-fission / flux)\n", " 0.005952\n", " 0.000035\n", " \n", @@ -1204,6 +1215,7 @@ " 10000\n", " 1\n", " O-16\n", + " (nu-fission / flux)\n", " 0.000000\n", " 0.000000\n", " \n", @@ -1212,10 +1224,10 @@ "
" ], "text/plain": [ - " cell group in nuclide mean std. dev.\n", - "0 10000 1 U-235 0.074860 0.000303\n", - "1 10000 1 U-238 0.005952 0.000035\n", - "2 10000 1 O-16 0.000000 0.000000" + " cell group in nuclide score mean std. dev.\n", + "0 10000 1 U-235 (nu-fission / flux) 7.49e-02 3.03e-04\n", + "1 10000 1 U-238 (nu-fission / flux) 5.95e-03 3.52e-05\n", + "2 10000 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00" ] }, "execution_count": 36, @@ -1299,12 +1311,12 @@ "[ NORMAL ] Computing the eigenvalue...\n", "[ NORMAL ] Iteration 0:\tk_eff = 0.854370\tres = 0.000E+00\n", "[ NORMAL ] Iteration 1:\tk_eff = 0.801922\tres = 1.521E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.761745\tres = 6.349E-02\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.761746\tres = 6.349E-02\n", "[ NORMAL ] Iteration 3:\tk_eff = 0.732367\tres = 5.029E-02\n", "[ NORMAL ] Iteration 4:\tk_eff = 0.711075\tres = 3.869E-02\n", "[ NORMAL ] Iteration 5:\tk_eff = 0.696557\tres = 2.912E-02\n", "[ NORMAL ] Iteration 6:\tk_eff = 0.687673\tres = 2.044E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.683469\tres = 1.277E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.683470\tres = 1.277E-02\n", "[ NORMAL ] Iteration 8:\tk_eff = 0.683129\tres = 6.141E-03\n", "[ NORMAL ] Iteration 9:\tk_eff = 0.685949\tres = 7.889E-04\n", "[ NORMAL ] Iteration 10:\tk_eff = 0.691329\tres = 4.181E-03\n", @@ -1317,11 +1329,11 @@ "[ NORMAL ] Iteration 17:\tk_eff = 0.765800\tres = 1.655E-02\n", "[ NORMAL ] Iteration 18:\tk_eff = 0.778371\tres = 1.660E-02\n", "[ NORMAL ] Iteration 19:\tk_eff = 0.790897\tres = 1.643E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.803272\tres = 1.611E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.815414\tres = 1.566E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.803273\tres = 1.611E-02\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.815415\tres = 1.566E-02\n", "[ NORMAL ] Iteration 22:\tk_eff = 0.827256\tres = 1.513E-02\n", "[ NORMAL ] Iteration 23:\tk_eff = 0.838747\tres = 1.453E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.849846\tres = 1.390E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.849847\tres = 1.390E-02\n", "[ NORMAL ] Iteration 25:\tk_eff = 0.860527\tres = 1.324E-02\n", "[ NORMAL ] Iteration 26:\tk_eff = 0.870770\tres = 1.258E-02\n", "[ NORMAL ] Iteration 27:\tk_eff = 0.880562\tres = 1.191E-02\n", @@ -1343,8 +1355,8 @@ "[ NORMAL ] Iteration 43:\tk_eff = 0.981021\tres = 4.104E-03\n", "[ NORMAL ] Iteration 44:\tk_eff = 0.984493\tres = 3.814E-03\n", "[ NORMAL ] Iteration 45:\tk_eff = 0.987729\tres = 3.543E-03\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.990741\tres = 3.290E-03\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.993545\tres = 3.053E-03\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.990742\tres = 3.290E-03\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.993546\tres = 3.053E-03\n", "[ NORMAL ] Iteration 48:\tk_eff = 0.996153\tres = 2.833E-03\n", "[ NORMAL ] Iteration 49:\tk_eff = 0.998577\tres = 2.627E-03\n", "[ NORMAL ] Iteration 50:\tk_eff = 1.000829\tres = 2.436E-03\n", @@ -1358,63 +1370,63 @@ "[ NORMAL ] Iteration 58:\tk_eff = 1.013868\tres = 1.314E-03\n", "[ NORMAL ] Iteration 59:\tk_eff = 1.015006\tres = 1.215E-03\n", "[ NORMAL ] Iteration 60:\tk_eff = 1.016059\tres = 1.124E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.017033\tres = 1.038E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.017033\tres = 1.039E-03\n", "[ NORMAL ] Iteration 62:\tk_eff = 1.017933\tres = 9.596E-04\n", "[ NORMAL ] Iteration 63:\tk_eff = 1.018766\tres = 8.865E-04\n", "[ NORMAL ] Iteration 64:\tk_eff = 1.019535\tres = 8.188E-04\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.020246\tres = 7.561E-04\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.020246\tres = 7.562E-04\n", "[ NORMAL ] Iteration 66:\tk_eff = 1.020903\tres = 6.981E-04\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.021509\tres = 6.444E-04\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.021509\tres = 6.445E-04\n", "[ NORMAL ] Iteration 68:\tk_eff = 1.022069\tres = 5.948E-04\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.022586\tres = 5.488E-04\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.022586\tres = 5.489E-04\n", "[ NORMAL ] Iteration 70:\tk_eff = 1.023063\tres = 5.064E-04\n", "[ NORMAL ] Iteration 71:\tk_eff = 1.023503\tres = 4.671E-04\n", "[ NORMAL ] Iteration 72:\tk_eff = 1.023909\tres = 4.308E-04\n", "[ NORMAL ] Iteration 73:\tk_eff = 1.024284\tres = 3.973E-04\n", "[ NORMAL ] Iteration 74:\tk_eff = 1.024629\tres = 3.663E-04\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.024947\tres = 3.377E-04\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.024948\tres = 3.377E-04\n", "[ NORMAL ] Iteration 76:\tk_eff = 1.025241\tres = 3.113E-04\n", "[ NORMAL ] Iteration 77:\tk_eff = 1.025512\tres = 2.869E-04\n", "[ NORMAL ] Iteration 78:\tk_eff = 1.025761\tres = 2.644E-04\n", "[ NORMAL ] Iteration 79:\tk_eff = 1.025991\tres = 2.436E-04\n", "[ NORMAL ] Iteration 80:\tk_eff = 1.026203\tres = 2.244E-04\n", "[ NORMAL ] Iteration 81:\tk_eff = 1.026398\tres = 2.067E-04\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.026577\tres = 1.904E-04\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.026743\tres = 1.753E-04\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.026578\tres = 1.904E-04\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.026743\tres = 1.754E-04\n", "[ NORMAL ] Iteration 84:\tk_eff = 1.026895\tres = 1.615E-04\n", "[ NORMAL ] Iteration 85:\tk_eff = 1.027036\tres = 1.487E-04\n", "[ NORMAL ] Iteration 86:\tk_eff = 1.027165\tres = 1.369E-04\n", "[ NORMAL ] Iteration 87:\tk_eff = 1.027284\tres = 1.260E-04\n", "[ NORMAL ] Iteration 88:\tk_eff = 1.027393\tres = 1.160E-04\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.027493\tres = 1.067E-04\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.027586\tres = 9.824E-05\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.027671\tres = 9.043E-05\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.027750\tres = 8.318E-05\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.027822\tres = 7.654E-05\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.027889\tres = 7.041E-05\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.027950\tres = 6.481E-05\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.028006\tres = 5.960E-05\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.028058\tres = 5.480E-05\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.028105\tres = 5.043E-05\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.028149\tres = 4.634E-05\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.028189\tres = 4.266E-05\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.028226\tres = 3.920E-05\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.028260\tres = 3.604E-05\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.028291\tres = 3.316E-05\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.028320\tres = 3.047E-05\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.028347\tres = 2.800E-05\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.028371\tres = 2.576E-05\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.028393\tres = 2.367E-05\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.028414\tres = 2.176E-05\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.028433\tres = 2.003E-05\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.028450\tres = 1.836E-05\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.027494\tres = 1.068E-04\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.027587\tres = 9.825E-05\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.027672\tres = 9.041E-05\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.027751\tres = 8.319E-05\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.027823\tres = 7.654E-05\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.027889\tres = 7.042E-05\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.027950\tres = 6.478E-05\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.028007\tres = 5.959E-05\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.028058\tres = 5.481E-05\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.028106\tres = 5.041E-05\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.028150\tres = 4.636E-05\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.028190\tres = 4.263E-05\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.028227\tres = 3.920E-05\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.028261\tres = 3.604E-05\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.028292\tres = 3.314E-05\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.028321\tres = 3.047E-05\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.028347\tres = 2.801E-05\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.028371\tres = 2.575E-05\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.028394\tres = 2.367E-05\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.028414\tres = 2.175E-05\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.028433\tres = 1.999E-05\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.028450\tres = 1.838E-05\n", "[ NORMAL ] Iteration 111:\tk_eff = 1.028466\tres = 1.689E-05\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.028481\tres = 1.553E-05\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.028494\tres = 1.427E-05\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.028507\tres = 1.309E-05\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.028518\tres = 1.202E-05\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.028528\tres = 1.107E-05\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.028538\tres = 1.015E-05\n" + "[ NORMAL ] Iteration 112:\tk_eff = 1.028481\tres = 1.552E-05\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.028494\tres = 1.426E-05\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.028507\tres = 1.310E-05\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.028518\tres = 1.204E-05\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.028528\tres = 1.106E-05\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.028538\tres = 1.017E-05\n" ] } ], @@ -1556,7 +1568,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 43, @@ -1565,9 +1577,9 @@ }, { "data": { - "image/png": "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\nAElFTkSuQmCC\n", + "image/png": "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\nfHTc1tr58WfQa96JP1u/NcN5cd/L4s/xL5/Rv3hAT+D6cDWAztRFRHJFRV1EJEdU1EVEckRFXUQk\nR1TURURyREVdRCRHVNRFRHJERV1EJEdKMvhojM0uunzkcw+F63hiUTwIh1fiQQh7984waOgrcciB\n5z4Rxjz3oxFhzMruOxddfsw18cAiOy4MYeQv4+22NfF6/MF4H1uGQ3WrnR7GVJNhQoISGzzu8UaX\n7c2r4f1taXxc1uwQ7/MNGSbk6Lowbmv/LfFkNDW3bQ5j7Ka4P7ufsTqM2fHUd+IVZdiuDRvi1bBj\nvJ9rbo7bOqhqXhjz2rg3iy7vRzdmhmtJ6ExdRCRHVNRFRHJERV1EJEdU1EVEckRFXUQkR1TURURy\nREVdRCRHVNRFRHKkRYOPzGwRsBbYCmxx91FZ7jdw+pKiy79/wsXxSvrFA1Gqp8QDAy6b9O0wZuKB\nk8OY517M8Pw4Mp5tpS/FByHYyLgd3xi3wznxrC7+vbitDaPjprp0jY/VMn4axmTYqlbT3NxeuKbx\nmaAeqDk6XsFJ8b6qGZJhVqOX471lb8Q5UPONDHk9N27LH4zbsqPitro9sSVez8p4H+7aK8N2BZMR\nAXBi3NZUj2d06rfm5aLL+1ZnL9WtMaL0KHdf2QrrESk3ym2pOLr8IiKSIy0t6g7cb2Zzzezc1uiQ\nSJlQbktFaunll8PdfYmZ7QbcZ2bPufus1uiYSIkpt6UitehM3d2XpL9XANOA971tZma1ZuZ1Py1p\nTySLwnwzs9rmrEO5LeUoS243u6ib2U5m1q3ub+BjwPz6ce5e6+5W99Pc9kSyKsw3d69t6v2V21Ku\nsuR2Sy6/9AammVndem529z+3YH0i5UK5LRWr2UXd3RcCw1qxLyJlQbktlczc2/dSoJk5zxb/wP7W\nHvGMI8ftelcYs4aaMGYDXcKYudcdHsace/7VYcyUp84PY7rss6ro8vVbdw3XYVPDELY9HF8teOyO\nD4YxY558Koz58rB4YNE+vBLGXPLqD8MY+nWmVJdCzMyZ13hu/3zYWeE6DvVHwpjNdApjDtjyfBjT\n9TvxgKCHrxgexnTweD2jhz8dxjz2ZJxvWzyuDR/6VjzT0NrL4/PZf1bvH8Z0IJ716REODWPOf+q3\nRZeP3QlmDqzKlNv6nLqISI6oqIuI5IiKuohIjqioi4jkiIq6iEiOqKiLiOSIirqISI6oqIuI5Ehr\n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\njRmGBmRpq3P0mAf6Z1hPpwz96VwVb9eeWfqc5WGU5XhtznDcKZY3sP/+HZg5M8NqKNXgI5E2VNrB\nRyJtJ0tut3tRf18HzLxUD8LmUp/bRyX2uVAl9l99bntt3V9dUxcRyREVdRGRHCmHop7l227Kjfrc\nPiqxz4Uqsf/qc9tr0/6W/Jq6iIi0nnI4UxcRkVaioi4ikiMlLepmdqyZPW9mL5rZhFL2JSszW2Rm\nT5vZPDOLv9W/BMxsipmtMLP5Bbf1MLP7zOyF9PcupexjoUb6W2tmS9L9PM/MPlHKPjaF8rptVFpe\nQ2lyu2RF3cyqgeuA44BBwHgzG1Sq/jTRUe4+3N0zTI1SElOBY+vdNgF4wN0HAg+k/5eLqby/vwA/\nTffzcHe/p5371CzK6zY1lcrKayhBbpfyTH008KK7L3T3TcCtwLgS9ic33H0WsKrezeOAG9K/bwDi\nefzaSSP9rVTK6zZSaXkNpcntUhb1PYDXCv5fnN5W7hy438zmmtm5pe5ME/R296Xp38uA3qXsTEZf\nM7On0pewZfWyugjldfuqxLyGNsxtvVHadIe7+3CSl9fnm9mHS92hpvLkc6zl/lnWXwD9Sb7ebSnw\n49J2J/eU1+2nTXO7lEV9CWz39Yd7preVNXdfkv5eAUwjebldCZabWR+A9PeKEvenKHdf7u5b3X0b\n8CsqZz8rr9tXReU1tH1ul7KozwEGmtm+ZtYJOB2YUcL+hMxsJzPrVvc38DFgfvF7lY0ZwJnp32cC\n00vYl1DdAzV1EpWzn5XX7aui8hraPrdL8n3qAO6+xcy+CtwLVANT3H1BqfqTUW9gmplBsu9udvc/\nl7ZL72dmtwBHAr3MbDEwEZgM3GZmZwOvAKeVrofba6S/R5rZcJKX04uA80rWwSZQXredSstrKE1u\n62sCRERyRG+UiojkiIq6iEiOqKiLiOSIirqISI6oqIuI5IiKuohIjqioi4jkiIq6iEiO/C/zDkyC\nZclMUgAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1575,6 +1587,10 @@ } ], "source": [ + "# Ignore zero fission rates in guide tubes with Matplotlib color scheme\n", + "openmc_fission_rates[openmc_fission_rates == 0] = np.nan\n", + "openmoc_fission_rates[openmoc_fission_rates == 0] = np.nan\n", + "\n", "# Plot OpenMC's fission rates in the left subplot\n", "fig = plt.subplot(121)\n", "plt.imshow(openmc_fission_rates, interpolation='none', cmap='jet')\n", @@ -1589,21 +1605,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 2", "language": "python", - "name": "python3" + "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 3 + "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.1" + "pygments_lexer": "ipython2", + "version": "2.7.6" } }, "nbformat": 4, From 502482dcf630ee6e290c15b8535e6e850a351c88 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Mon, 9 May 2016 18:24:25 -0400 Subject: [PATCH 507/650] Type checking now ensures that Legendre moments do not exceed 10 --- openmc/mgxs/library.py | 2 +- openmc/mgxs/mgxs.py | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index ad0bfd77a3..f2a5c7569b 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -59,7 +59,7 @@ class Library(object): correction : {'P0', None} Apply the P0 correction to scattering matrices if set to 'P0' legendre_order : int - The highest legendre moments in the scattering matrices (default is 0) + The highest legendre moment in the scattering matrices (default is 0) energy_groups : openmc.mgxs.EnergyGroups Energy group structure for energy condensation tally_trigger : openmc.Trigger diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 051dd3cf1e..1479f72416 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1948,6 +1948,7 @@ class ScatterMatrixXS(MGXS): def legendre_order(self, legendre_order): cv.check_type('legendre_order', legendre_order, Integral) cv.check_greater_than('legendre_order', legendre_order, 0, equality=True) + cv.check_less_than('legendre_order', legendre_order, 10, equality=True) if self.correction == 'P0' and legendre_order > 0: msg = 'The P0 correction will be ignored since the scattering ' \ @@ -2112,7 +2113,8 @@ class ScatterMatrixXS(MGXS): if moment != 'all': cv.check_type('moment', moment, Integral) cv.check_greater_than('moment', moment, 0, equality=True) - cv.check_less_than('moment', moment, 10, equality=True) + cv.check_less_than( + 'moment', moment, self.legendre_order, equality=True) scores = [self.xs_tally.scores[moment]] else: scores = [] @@ -2230,7 +2232,8 @@ class ScatterMatrixXS(MGXS): if moment != 'all': cv.check_type('moment', moment, Integral) cv.check_greater_than('moment', moment, 0, equality=True) - cv.check_less_than('moment', moment, 10, equality=True) + cv.check_less_than( + 'moment', moment, self.legendre_order, equality=True) df = df[df['score'] == str(self.xs_tally.scores[moment])] return df From bbb5690a003f33cc0e21ea22299a081be67bc0c0 Mon Sep 17 00:00:00 2001 From: jingang Date: Mon, 9 May 2016 19:27:29 -0400 Subject: [PATCH 508/650] fix errors of setting material density using 'sum' --- docs/source/usersguide/input.rst | 8 ++++---- openmc/material.py | 26 ++++++++++++++++---------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 2158e1d8ca..37b441ef23 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -1215,11 +1215,11 @@ Each ``material`` element can have the following attributes or sub-elements: An element with attributes/sub-elements called ``value`` and ``units``. The ``value`` attribute is the numeric value of the density while the ``units`` can be "g/cm3", "kg/m3", "atom/b-cm", "atom/cm3", or "sum". The "sum" unit - indicates that values appearing in ``ao`` attributes for ```` and - ```` sub-elements are to be interpreted as nuclide/element - densities in atom/b-cm, and the total density of the material is taken as + indicates that values appearing in ``ao`` or ``wo`` attributes for ```` and + ```` sub-elements are to be interpreted as absolute nuclide/element + densities in atom/b-cm or g/cm3, and the total density of the material is taken as the sum of all nuclides/elements. The "sum" option cannot be used in - conjunction with weight percents. The "macro" unit is used with + conjunction with atom or weight percents. The "macro" unit is used with a ``macroscopic`` quantity to indicate that the density is already included in the library and thus not needed here. However, if a value is provided for the ``value``, then this is treated as a number density multiplier on diff --git a/openmc/material.py b/openmc/material.py index ff690aa9ac..c74f8f1cdf 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -245,19 +245,25 @@ class Material(object): """ - cv.check_type('the density for Material ID="{0}"'.format(self._id), - density, Real) cv.check_value('density units', units, DENSITY_UNITS) - - if density is None and units is not 'sum': - msg = 'Unable to set the density for Material ID="{0}" ' \ - 'because a density must be set when not using ' \ - 'sum unit'.format(self._id) - raise ValueError(msg) - - self._density = density self._density_units = units + if units is 'sum': + if density is not None: + msg = 'Density "{0}" for Material ID="{1}" is ignored ' \ + 'because the unit is "sum"'.format(density, self._id) + warnings.warn(msg) + else: + if density is None: + msg = 'Unable to set the density for Material ID="{0}" ' \ + 'because a density must be set when not using ' \ + '"sum" unit'.format(self._id) + raise ValueError(msg) + + cv.check_type('the density for Material ID="{0}"'.format(self._id), + density, Real) + self._density = density + @distrib_otf_file.setter def distrib_otf_file(self, filename): # TODO: remove this when distributed materials are merged From 95406d52fcc0541dc039b1a99db3b4d6056ff1c8 Mon Sep 17 00:00:00 2001 From: liangjg Date: Mon, 9 May 2016 22:34:18 -0400 Subject: [PATCH 509/650] update description according to comments --- docs/source/usersguide/input.rst | 9 ++++----- openmc/material.py | 8 ++++---- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 37b441ef23..775407d70b 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -1215,11 +1215,10 @@ Each ``material`` element can have the following attributes or sub-elements: An element with attributes/sub-elements called ``value`` and ``units``. The ``value`` attribute is the numeric value of the density while the ``units`` can be "g/cm3", "kg/m3", "atom/b-cm", "atom/cm3", or "sum". The "sum" unit - indicates that values appearing in ``ao`` or ``wo`` attributes for ```` and - ```` sub-elements are to be interpreted as absolute nuclide/element - densities in atom/b-cm or g/cm3, and the total density of the material is taken as - the sum of all nuclides/elements. The "sum" option cannot be used in - conjunction with atom or weight percents. The "macro" unit is used with + indicates that values appearing in ``ao`` or ``wo`` attributes for ```` + and ```` sub-elements are to be interpreted as absolute nuclide/element + densities in atom/b-cm or g/cm3, and the total density of the material is + taken as the sum of all nuclides/elements. The "macro" unit is used with a ``macroscopic`` quantity to indicate that the density is already included in the library and thus not needed here. However, if a value is provided for the ``value``, then this is treated as a number density multiplier on diff --git a/openmc/material.py b/openmc/material.py index c74f8f1cdf..e9a74f1e75 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -251,16 +251,16 @@ class Material(object): if units is 'sum': if density is not None: msg = 'Density "{0}" for Material ID="{1}" is ignored ' \ - 'because the unit is "sum"'.format(density, self._id) + 'because the unit is "sum"'.format(density, self.id) warnings.warn(msg) else: if density is None: msg = 'Unable to set the density for Material ID="{0}" ' \ - 'because a density must be set when not using ' \ - '"sum" unit'.format(self._id) + 'because a density value must be given when not using ' \ + '"sum" unit'.format(self.id) raise ValueError(msg) - cv.check_type('the density for Material ID="{0}"'.format(self._id), + cv.check_type('the density for Material ID="{0}"'.format(self.id), density, Real) self._density = density From 4201cb98722e5be3a0b6b74abca639ecedac7745 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Mon, 9 May 2016 23:02:31 -0400 Subject: [PATCH 510/650] Fixed issue with lattice cell indexing for p-value calculation in Pandas DF notebook --- .../examples/pandas-dataframes.ipynb | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index 0f93999e2e..b88cf99498 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -370,7 +370,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAPZSURB\nVGje7Zs7buMwEIZ9iey50gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwg\nwIcgg8Cc4fCTSK5W4OeFkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7\nE08mlia+rn7VcKXP8sRszFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WB\nzfiz20hXORmP9fi/bM9EeUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4\nlXju8K3DKv9NThOZ3q2KmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3Oaf\nPX40NGgST2r+uvQkXXp6cKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcub\nlfKGt6apotG/NVx3SInWtLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJb\nf8qlPynYmpKCh7OB1fzNalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utr\nJTy8/06TXh0r/5JOa2JmYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU\n4YuBTPa/8P67l/6r44ds+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m\n/65n+S8p/itN15v0UkW3/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB\n6R3Cqn55U4rv4kfH3zaSgQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6\nbjT6rym9I/v/03/b+LHS4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv\n6h9B/Bfxr9j1Hz2eN/hO8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wX\nfP8Mvf9G37/D/ovuP8SeP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7\n+O+E8zdP/8XOf8Hnz9Dzb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589j\nz5/Y8ej9h4D+W7qQmf57efqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m\n4fwXuH+M3n+OO3++AX9clR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA1LTA5VDEyOjUy\nOjAyLTA0OjAwrSzLCgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNS0wOVQxMjo1MjowMi0wNDow\nMNxxc7YAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAPZSURB\nVGje7Zs7buMwEIZ9iey50gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwg\nwIcgg8Cc4fCTSK5W4OeFkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7\nE08mlia+rn7VcKXP8sRszFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WB\nzfiz20hXORmP9fi/bM9EeUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4\nlXju8K3DKv9NThOZ3q2KmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3Oaf\nPX40NGgST2r+uvQkXXp6cKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcub\nlfKGt6apotG/NVx3SInWtLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJb\nf8qlPynYmpKCh7OB1fzNalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utr\nJTy8/06TXh0r/5JOa2JmYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU\n4YuBTPa/8P67l/6r44ds+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m\n/65n+S8p/itN15v0UkW3/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB\n6R3Cqn55U4rv4kfH3zaSgQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6\nbjT6rym9I/v/03/b+LHS4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv\n6h9B/Bfxr9j1Hz2eN/hO8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wX\nfP8Mvf9G37/D/ovuP8SeP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7\n+O+E8zdP/8XOf8Hnz9Dzb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589j\nz5/Y8ej9h4D+W7qQmf57efqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m\n4fwXuH+M3n+OO3++AX9clR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA1LTA5VDIzOjAx\nOjE4LTA0OjAw/mF/xQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNS0wOVQyMzowMToxOC0wNDow\nMI88x3kAAAAASUVORK5CYII=\n", "text/plain": [ "" ] @@ -554,8 +554,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 7b20f8ad4aa9e6f02f8b1d51e002f9f56ba7aa15\n", - " Date/Time: 2016-05-09 12:52:02\n", + " Git SHA1: ae588276014a905ecc6e0967bf08288ecec5b550\n", + " Date/Time: 2016-05-09 23:01:18\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -619,20 +619,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.1000E-01 seconds\n", - " Reading cross sections = 9.7000E-02 seconds\n", - " Total time in simulation = 9.8510E+00 seconds\n", - " Time in transport only = 9.8370E+00 seconds\n", - " Time in inactive batches = 1.3970E+00 seconds\n", - " Time in active batches = 8.4540E+00 seconds\n", + " Total time for initialization = 3.9000E-01 seconds\n", + " Reading cross sections = 8.6000E-02 seconds\n", + " Total time in simulation = 1.0830E+01 seconds\n", + " Time in transport only = 1.0818E+01 seconds\n", + " Time in inactive batches = 1.3590E+00 seconds\n", + " Time in active batches = 9.4710E+00 seconds\n", " Time synchronizing fission bank = 3.0000E-03 seconds\n", - " Sampling source sites = 3.0000E-03 seconds\n", - " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Sampling source sites = 2.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.0275E+01 seconds\n", - " Calculation Rate (inactive) = 8947.75 neutrons/second\n", - " Calculation Rate (active) = 4435.77 neutrons/second\n", + " Total time elapsed = 1.1234E+01 seconds\n", + " Calculation Rate (inactive) = 9197.94 neutrons/second\n", + " Calculation Rate (active) = 3959.46 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1097,7 +1097,7 @@ "data": { "image/png": "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\nSWry/wHxFqsYpaO7aQAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1120,7 +1120,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 26, @@ -1131,7 +1131,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2042,15 +2042,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "Mann-Whitney Test p-value: 6.038663783e-42\n" + "Mann-Whitney Test p-value: 0.303583331507\n" ] } ], "source": [ - "# Extract tally data from pins in the pins divided along y=-x diagonal\n", + "# Extract tally data from pins in the pins divided along y=x diagonal \n", "multi_index = ('level 2', 'lat',)\n", - "lower = df[df[multi_index + ('x',)] > df[multi_index + ('y',)]]\n", - "upper = df[df[multi_index + ('x',)] < df[multi_index + ('y',)]]\n", + "lower = df[df[multi_index + ('x',)] + df[multi_index + ('y',)] < 16]\n", + "upper = df[df[multi_index + ('x',)] + df[multi_index + ('y',)] > 16]\n", "lower = lower[lower['score'] == 'absorption']\n", "upper = upper[upper['score'] == 'absorption']\n", "\n", @@ -2080,15 +2080,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "Mann-Whitney Test p-value: 0.303583331507\n" + "Mann-Whitney Test p-value: 6.038663783e-42\n" ] } ], "source": [ - "# Extract tally data from pins in the pins divided along y=x diagonal \n", + "# Extract tally data from pins in the pins divided along y=-x diagonal\n", "multi_index = ('level 2', 'lat',)\n", - "lower = df[df[multi_index + ('x',)] + df[multi_index + ('y',)] < 16]\n", - "upper = df[df[multi_index + ('x',)] + df[multi_index + ('y',)] > 16]\n", + "lower = df[df[multi_index + ('x',)] > df[multi_index + ('y',)]]\n", + "upper = df[df[multi_index + ('x',)] < df[multi_index + ('y',)]]\n", "lower = lower[lower['score'] == 'absorption']\n", "upper = upper[upper['score'] == 'absorption']\n", "\n", @@ -2126,7 +2126,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 36, @@ -2137,7 +2137,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2164,7 +2164,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 37, @@ -2175,7 +2175,7 @@ "data": { "image/png": "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\n9OnTh2bNmtGmTRsuu+wyioqKSt/PzLjvvvvYdddd2W677fjDH/7A3Llz6dOnD02bNmXo0KEbrZ8J\nSggi0mBcccUVXHHFFaxatYq5c+dy8sknA/Dmm28CsGLFClavXk2fPn0YOXIkI0eO5LXXXuOrr75i\n9erVXHbZZQB89tlnXHLJJTz++OMsXryYlStXlna8s97YsWMZMmQIK1as4LTTTiMej3PXXXexfPly\npkyZwqRJk7jvvvs22ubll1/mo48+4t133+WOO+7gvPPO4/HHH+ebb75hxowZjBo1KqPlo4QgIvXe\n4MGDadasWelwySWXlLteTk4Oc+bMYfny5eTn57P//vtv8T0ff/xxrr76ajp37kx+fj5/+ctfGD16\nNCUlJTz11FMce+yx9OvXj9zcXG6++ebNemnr06cPgwcPJhaL0bhxY/bee2/2339/EokEHTt25MIL\nL+SNN97YaJvrrruOJk2a0K1bN7p3786RRx5J586dadq0KYMGDWLatGnVL6wKKCGISL337LPPsmLF\nitJh01/e640YMYJZs2bRpUsX9tlnH55//vktvueiRYvo0KFD6XSHDh0oKSlhyZIlLFq0iPbt25cu\n22abbWjRosVG25ddDjBr1iyOOeYYWrduTZMmTbjxxhtZvnz5Ruu0atWqdLxx48abTa9evbqCUqg+\nJQQRaTB22203Ro0axdKlS7n++usZMmQIa9asKbcP5rZt2zJ//vzS6W+++YZEIkGrVq1o06YNCxYs\nKF22bt06vv/++4223/Q9L774Yrp06cLs2bNZtWoVf/7zn+tcHxNKCCLSYDz22GMsW7aMWCxGs2bN\nAIjFYuy4447EYjG++uqr0nVPPfVU7rrrLr7++mtWr17NjTfeyNChQ0kkEgwZMoRx48YxefJkioqK\nKCgoqPTL/aeffqJJkybk5+fzxRdfVNjvc1Qa7g23IlIt9fG5kPHjx3P11Vezdu1aOnTowOjRo2nc\nuDEAw4YNo2/fvhQXFzN+/HjOPfdcFi1aRP/+/fn555854ogjuOeee4DgYbd77rmHU045hTVr1nDl\nlVfSsmVL8vLytrjvO++8kwsuuIA77riDnj17MnToUF599dVaOe50qQtNybiqPmimB9PqHnWhWbHV\nq1fTrFkzZs+eTadOnSKLQ11oiohEYNy4caxdu5Y1a9ZwzTXX0KNHDzp27Bh1WNWiKiOpEZluxkCk\n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\nSUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, From 3079b5f6df0eb7c5c1b86b11be67b35b3ff518fd Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Tue, 10 May 2016 04:45:02 -0400 Subject: [PATCH 511/650] Simplification of mgxs_library - not done yet --- openmc/mgxs_library.py | 703 +++++++++++------------------------------ 1 file changed, 191 insertions(+), 512 deletions(-) diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index bae23b0bc6..ba9ba75b05 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -99,6 +99,12 @@ class XSdata(object): Unique identifier for the xsdata object alias : str Separate unique identifier for the xsdata object + zaid : int + 1000*(atomic number) + mass number. As an example, the zaid of U-235 + would be 92235. + awr : float + Atomic-weight-ratio of an isotope. That is, the ratio of the mass + of the isotope to the mass of a single neutron. kT : float Temperature (in units of MeV). energy_groups : openmc.mgxs.EnergyGroups @@ -198,7 +204,7 @@ class XSdata(object): """ - def __init__(self, name, energy_groups, representation="isotropic"): + def __init__(self, name, energy_groups, representation='isotropic'): # Initialize class attributes self._name = name self._energy_groups = energy_groups @@ -319,15 +325,7 @@ class XSdata(object): @energy_groups.setter def energy_groups(self, energy_groups): # Check validity of energy_groups - check_type("energy_groups", energy_groups, openmc.mgxs.EnergyGroups) - - # Check that there are one or more groups - ng = energy_groups.num_groups - if ((ng is None) or (ng < 1)): - - msg = 'energy_groups object incorrectly initialized.' - raise ValueError(msg) - + check_type('energy_groups', energy_groups, openmc.mgxs.EnergyGroups) self._energy_groups = energy_groups @representation.setter @@ -347,48 +345,48 @@ class XSdata(object): @zaid.setter def zaid(self, zaid): # Check type and value - check_type("zaid", zaid, Integral) - check_greater_than("zaid", zaid, 0, equality=False) + check_type('zaid', zaid, Integral) + check_greater_than('zaid', zaid, 0, equality=False) self._zaid = zaid @awr.setter def awr(self, awr): # Check validity of type and that the awr value is > 0 - check_type("awr", awr, Real) - check_greater_than("awr", awr, 0.0, equality=False) + check_type('awr', awr, Real) + check_greater_than('awr', awr, 0.0, equality=False) self._awr = awr @kT.setter def kT(self, kT): # Check validity of type and that the kT value is >= 0 - check_type("kT", kT, Real) - check_greater_than("kT", kT, 0.0, equality=True) + check_type('kT', kT, Real) + check_greater_than('kT', kT, 0.0, equality=True) self._kT = kT @scatt_type.setter def scatt_type(self, scatt_type): # check to see it is of a valid type and value - check_value("scatt_type", scatt_type, ['legendre', 'histogram', + check_value('scatt_type', scatt_type, ['legendre', 'histogram', 'tabular']) self._scatt_type = scatt_type @order.setter def order(self, order): # Check type and value - check_type("order", order, Integral) - check_greater_than("order", order, 0, equality=True) + check_type('order', order, Integral) + check_greater_than('order', order, 0, equality=True) self._order = order @tabular_legendre.setter def tabular_legendre(self, tabular_legendre): # Check to make sure this is a dict and it has our keys with the # right values. - check_type("tabular_legendre", tabular_legendre, dict) + check_type('tabular_legendre', tabular_legendre, dict) if 'enable' in tabular_legendre: enable = tabular_legendre['enable'] check_type('enable', enable, bool) else: - msg = "enable must be provided in tabular_legendre" + msg = 'enable must be provided in tabular_legendre' raise ValueError(msg) if 'num_points' in tabular_legendre: num_points = tabular_legendre['num_points'] @@ -404,14 +402,14 @@ class XSdata(object): @num_polar.setter def num_polar(self, num_polar): # Make sure we have positive ints - check_value("num_polar", num_polar, Integral) - check_greater_than("num_polar", num_polar, 0) + check_value('num_polar', num_polar, Integral) + check_greater_than('num_polar', num_polar, 0) self._num_polar = num_polar @num_azimuthal.setter def num_azimuthal(self, num_azimuthal): - check_value("num_azimuthal", num_azimuthal, Integral) - check_greater_than("num_azimuthal", num_azimuthal, 0) + check_value('num_azimuthal', num_azimuthal, Integral) + check_greater_than('num_azimuthal', num_azimuthal, 0) self._num_azimuthal = num_azimuthal @total.setter @@ -422,7 +420,7 @@ class XSdata(object): shape = (self._num_polar, self._num_azimuthal, self._energy_groups.num_groups) # check we have a numpy list - check_type("total", total, np.ndarray, expected_iter_type=Real) + check_type('total', total, np.ndarray, expected_iter_type=Real) if total.shape == shape: self._total = np.copy(total) else: @@ -438,7 +436,7 @@ class XSdata(object): shape = (self._num_polar, self._num_azimuthal, self._energy_groups.num_groups) # check we have a numpy list - check_type("absorption", absorption, np.ndarray, + check_type('absorption', absorption, np.ndarray, expected_iter_type=Real) if absorption.shape == shape: self._absorption = np.copy(absorption) @@ -455,7 +453,7 @@ class XSdata(object): shape = (self._num_polar, self._num_azimuthal, self._energy_groups.num_groups) # check we have a numpy list - check_type("fission", fission, np.ndarray, expected_iter_type=Real) + check_type('fission', fission, np.ndarray, expected_iter_type=Real) if fission.shape == shape: self._fission = np.copy(fission) if np.sum(self._fission) > 0.0: @@ -473,7 +471,7 @@ class XSdata(object): shape = (self._num_polar, self._num_azimuthal, self._energy_groups.num_groups) # check we have a numpy list - check_type("k_fission", k_fission, np.ndarray, + check_type('k_fission', k_fission, np.ndarray, expected_iter_type=Real) if k_fission.shape == shape: self._k_fission = np.copy(k_fission) @@ -497,7 +495,7 @@ class XSdata(object): shape = (self._num_polar, self._num_azimuthal, self._energy_groups.num_groups) # check we have a numpy list - check_type("chi", chi, np.ndarray, expected_iter_type=Real) + check_type('chi', chi, np.ndarray, expected_iter_type=Real) if chi.shape == shape: self._chi = np.copy(chi) else: @@ -519,7 +517,7 @@ class XSdata(object): self._energy_groups.num_groups) max_depth = 5 # check we have a numpy list - check_iterable_type("scatter", scatter, expected_type=Real, + check_iterable_type('scatter', scatter, expected_type=Real, max_depth=max_depth) if scatter.shape == shape: self._scatter = np.copy(scatter) @@ -540,7 +538,7 @@ class XSdata(object): self._energy_groups.num_groups) max_depth = 4 # check we have a numpy list - check_iterable_type("multiplicity", multiplicity, expected_type=Real, + check_iterable_type('multiplicity', multiplicity, expected_type=Real, max_depth=max_depth) if multiplicity.shape == shape: self._multiplicity = np.copy(multiplicity) @@ -582,7 +580,7 @@ class XSdata(object): else: shape = shape_mat if nu_fission.shape != shape: - msg = "Invalid Shape of Nu_fission!" + msg = 'Invalid Shape of Nu_fission!' raise ValueError(msg) else: # Get shape of nu_fission to determine if we need chi or not @@ -591,523 +589,204 @@ class XSdata(object): elif nu_fission.shape == shape_mat: self._use_chi = False else: - msg = "Invalid Shape of Nu_fission!" + msg = 'Invalid Shape of Nu_fission!' raise ValueError(msg) # check we have a numpy list - check_type("nu_fission", nu_fission, np.ndarray, + check_type('nu_fission', nu_fission, np.ndarray, expected_iter_type=Real) self._nu_fission = np.copy(nu_fission) if np.sum(self._nu_fission) > 0.0: self._fissionable = True - def set_total(self, total, **kwargs): - if (isinstance(total, openmc.mgxs.TotalXS) or - isinstance(total, openmc.mgxs.TransportXS)): - # Make sure passed MGXS object contains correct group structure - if self.energy_groups != total.energy_groups: - msg = 'Group structure of provided data does not match' \ - ' group structure of XSdata object' - raise ValueError(msg) - # Get openmc.mgxs.get_xs() arguments from kwargs - # nuclides, xs_type, and value will have sane defaults but can be - # overridden by kwards - if 'nuclides' in kwargs: - nuclides = kwargs['nuclides'] - else: - nuclides = 'sum' - if 'xs_type' in kwargs: - xs_type = kwargs['xs_type'] - else: - xs_type = 'macro' - if 'value' in kwargs: - value = kwargs['value'] - else: - value = 'mean' - # subdomains is required from the kwargs as this is specific to - # this XSdata object. - if 'subdomains' in kwargs: - subdomains = kwargs['subdomains'] - else: - msg = "Argument 'subdomains' is required" - raise ValueError(msg) + def set_total(self, total, subdomain, nuclide='sum', xs_type='macro'): + if not isinstance(total, (openmc.mgxs.TotalXS, + openmc.mgxs.TransportXS)): + msg = 'Method must be passed an openmc.mgxs.TotalXS or ' \ + 'openmc.mgxs.TransportXS object' + raise TypeError(msg) - if self._representation is 'isotropic': - self._total = total.get_xs(subdomains=subdomains, - nuclides=nuclides, xs_type=xs_type, - value=value) - elif self._representation is 'angle': - # Not yet implemented as MGXS do not yet support this - pass + # Make sure passed MGXS object contains correct group structure + if self.energy_groups != total.energy_groups: + msg = 'Group structure of provided data does not match' \ + ' group structure of XSdata object' + raise ValueError(msg) - else: - if self._representation is 'isotropic': - shape = (self._energy_groups.num_groups,) - elif self._representation is 'angle': - shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups) - # check we have a numpy list - check_type("total", total, np.ndarray, expected_iter_type=Real) - if total.shape == shape: - self._total = np.copy(total) - else: - msg = 'Shape of provided total "{0}" does not match shape ' \ - 'required, "{1}"'.format(total.shape, shape) - raise ValueError(msg) + if self._representation is 'isotropic': + self._total = total.get_xs(subdomain=subdomains, nuclides=nuclide, + xs_type=xs_type) + elif self._representation is 'angle': + msg = 'Angular-Dependent MGXS have not yet been implemented' + raise ValueError(msg) - def set_absorption(self, absorption, **kwargs): - if isinstance(absorption, openmc.mgxs.AbsorptionXS): - # Make sure passed MGXS object contains correct group structure - if self.energy_groups != absorption.energy_groups: - msg = 'Group structure of provided AbsorptionXS does not ' \ - ' match group structure of XSdata object' - raise ValueError(msg) - # Get openmc.mgxs.get_xs() arguments from kwargs - # nuclides, xs_type, and value will have sane defaults but can be - # overridden by kwards - if 'nuclides' in kwargs: - nuclides = kwargs['nuclides'] - else: - nuclides = 'sum' - if 'xs_type' in kwargs: - xs_type = kwargs['xs_type'] - else: - xs_type = 'macro' - if 'value' in kwargs: - value = kwargs['value'] - else: - value = 'mean' - # subdomains is required from the kwargs as this is specific to - # this XSdata object. - if 'subdomains' in kwargs: - subdomains = kwargs['subdomains'] - else: - msg = "Argument 'subdomains' is required" - raise ValueError(msg) + def set_absorption(self, absorption, subdomain, nuclide='sum', + xs_type='macro'): + if not isinstance(absorption, openmc.mgxs.AbsorptionXS): + msg = 'Method must be passed an openmc.mgxs.AbsorptionXS' + raise TypeError(msg) - if self._representation is 'isotropic': - self._absorption = absorption.get_xs(subdomains=subdomains, - nuclides=nuclides, - xs_type=xs_type, - value=value) - elif self._representation is 'angle': - # Not yet implemented as MGXS do not yet support this - pass + # Make sure passed MGXS object contains correct group structure + if self.energy_groups != absorption.energy_groups: + msg = 'Group structure of provided data does not match' \ + ' group structure of XSdata object' + raise ValueError(msg) - else: - if self._representation is 'isotropic': - shape = (self._energy_groups.num_groups,) - elif self._representation is 'angle': - shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups) - # check we have a numpy list - check_type("absorption", absorption, np.ndarray, expected_iter_type=Real) - if absorption.shape == shape: - self._absorption = np.copy(absorption) - else: - msg = 'Shape of provided absorption "{0}" does not match shape ' \ - 'required, "{1}"'.format(absorption.shape, shape) - raise ValueError(msg) + if self._representation is 'isotropic': + self._absorption = absorption.get_xs(subdomains=subdomain, + nuclides=nuclide, + xs_type=xs_type) + elif self._representation is 'angle': + msg = 'Angular-Dependent MGXS have not yet been implemented' + raise ValueError(msg) - def set_fission(self, fission, **kwargs): - if isinstance(fission, openmc.mgxs.FissionXS): - # Make sure passed MGXS object contains correct group structure - if self.energy_groups != fission.energy_groups: - msg = 'Group structure of provided FissionXS does not match ' \ - 'group structure of XSdata object' - raise ValueError(msg) - # Get openmc.mgxs.get_xs() arguments from kwargs - # nuclides, xs_type, and value will have sane defaults but can be - # overridden by kwards - if 'nuclides' in kwargs: - nuclides = kwargs['nuclides'] - else: - nuclides = 'sum' - if 'xs_type' in kwargs: - xs_type = kwargs['xs_type'] - else: - xs_type = 'macro' - if 'value' in kwargs: - value = kwargs['value'] - else: - value = 'mean' - # subdomains is required from the kwargs as this is specific to - # this XSdata object. - if 'subdomains' in kwargs: - subdomains = kwargs['subdomains'] - else: - msg = "Argument 'subdomains' is required" - raise ValueError(msg) + def set_fission(self, fission, subdomain, nuclide='sum', xs_type='macro'): + if not isinstance(fission, openmc.mgxs.FissionXS): + msg = 'Method must be passed an openmc.mgxs.FissionXS' + raise TypeError(msg) - if self._representation is 'isotropic': - self._fission = fission.get_xs(subdomains=subdomains, - nuclides=nuclides, - xs_type=xs_type, - value=value) - elif self._representation is 'angle': - # Not yet implemented as MGXS do not yet support this - pass + # Make sure passed MGXS object contains correct group structure + if self.energy_groups != fission.energy_groups: + msg = 'Group structure of provided data does not match' \ + ' group structure of XSdata object' + raise ValueError(msg) - else: - if self._representation is 'isotropic': - shape = (self._energy_groups.num_groups,) - elif self._representation is 'angle': - shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups) - # check we have a numpy list - check_type("fission", fission, np.ndarray, expected_iter_type=Real) - if fission.shape == shape: - self._fission = np.copy(fission) - if np.sum(self._fission) > 0.0: - self._fissionable = True - else: - msg = 'Shape of provided fission "{0}" does not match shape ' \ - 'required, "{1}"'.format(fission.shape, shape) - raise ValueError(msg) + if self._representation is 'isotropic': + self._fission = fission.get_xs(subdomains=subdomain, + nuclides=nuclide, + xs_type=xs_type) + elif self._representation is 'angle': + msg = 'Angular-Dependent MGXS have not yet been implemented' + raise ValueError(msg) - def set_nu_fission(self, nu_fission, **kwargs): + def set_nu_fission(self, nu_fission, subdomain, nuclide='sum', + xs_type='macro'): # The NuFissionXS class does not have the capability to produce # a fission matrix and therefore if this path is pursued, we know # chi must be used. - if isinstance(nu_fission, openmc.mgxs.NuFissionXS): - # Make sure passed MGXS object contains correct group structure - if self.energy_groups != nu_fission.energy_groups: - msg = 'Group structure of provided NuFissionXS does not match'\ - ' group structure of XSdata object' - raise ValueError(msg) - # Get openmc.mgxs.get_xs() arguments from kwargs - # nuclides, xs_type, and value will have sane defaults but can be - # overridden by kwards - if 'nuclides' in kwargs: - nuclides = kwargs['nuclides'] - else: - nuclides = 'sum' - if 'xs_type' in kwargs: - xs_type = kwargs['xs_type'] - else: - xs_type = 'macro' - if 'value' in kwargs: - value = kwargs['value'] - else: - value = 'mean' - # subdomains is required from the kwargs as this is specific to - # this XSdata object. - if 'subdomains' in kwargs: - subdomains = kwargs['subdomains'] - else: - msg = "Argument 'subdomains' is required" - raise ValueError(msg) + if not isinstance(nu_fission, openmc.mgxs.NuFissionXS): + msg = 'Method must be passed an openmc.mgxs.NuFissionXS' + raise TypeError(msg) - if self._representation is 'isotropic': - self._nu_fission = nu_fission.get_xs(subdomains=subdomains, - nuclides=nuclides, - xs_type=xs_type, - value=value) - elif self._representation is 'angle': - # Not yet implemented as MGXS do not yet support this - pass + # Make sure passed MGXS object contains correct group structure + if self.energy_groups != nu_fission.energy_groups: + msg = 'Group structure of provided data does not match' \ + ' group structure of XSdata object' + raise ValueError(msg) - self._use_chi = True + if self._representation is 'isotropic': + self._nu_fission = nu_fission.get_xs(subdomains=subdomain, + nuclides=nuclide, + xs_type=xs_type) + elif self._representation is 'angle': + msg = 'Angular-Dependent MGXS have not yet been implemented' + raise ValueError(msg) - else: - # nu_fission can be given as a vector or a matrix - # Vector is used when chi also exists. - # Matrix is used when chi does not exist. - # We have to check that the correct form is given, but only if - # chi already has been set. If not, we just check that this is OK - # and set the use_chi flag accordingly + self._use_chi = True - # First lets set our dimensions here since they get used repeatedly - # throughout this code. - if self._representation is 'isotropic': - shape_vec = (self._energy_groups.num_groups,) - shape_mat = (self._energy_groups.num_groups, - self._energy_groups.num_groups) - elif self._representation is 'angle': - shape_vec = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups) - shape_mat = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups, - self._energy_groups.num_groups) - - # Begin by checking the case when chi has already been given and - # thus the rules for filling in nu_fission are set. - if self._use_chi is not None: - if self._use_chi: - shape = shape_vec - else: - shape = shape_mat - if nu_fission.shape != shape: - msg = "Invalid Shape of Nu_fission!" - raise ValueError(msg) - else: - # Get shape of nu_fission to determine if we need chi or not - if nu_fission.shape == shape_vec: - self._use_chi = True - elif nu_fission.shape == shape_mat: - self._use_chi = False - else: - msg = "Invalid Shape of Nu_fission!" - raise ValueError(msg) - - # check we have a numpy list - check_type("nu_fission", nu_fission, np.ndarray, - expected_iter_type=Real) - self._nu_fission = np.copy(nu_fission) if np.sum(self._nu_fission) > 0.0: self._fissionable = True - def set_k_fission(self, k_fission, **kwargs): - if isinstance(k_fission, openmc.mgxs.KappaFissionXS): - # Make sure passed MGXS object contains correct group structure - if self.energy_groups != k_fission.energy_groups: - msg = 'Group structure of provided KappaFissionXS does not ' \ - 'match group structure of XSdata object' - raise ValueError(msg) - # Get openmc.mgxs.get_xs() arguments from kwargs - # nuclides, xs_type, and value will have sane defaults but can be - # overridden by kwards - if 'nuclides' in kwargs: - nuclides = kwargs['nuclides'] - else: - nuclides = 'sum' - if 'xs_type' in kwargs: - xs_type = kwargs['xs_type'] - else: - xs_type = 'macro' - if 'value' in kwargs: - value = kwargs['value'] - else: - value = 'mean' - # subdomains is required from the kwargs as this is specific to - # this XSdata object. - if 'subdomains' in kwargs: - subdomains = kwargs['subdomains'] - else: - msg = "Argument 'subdomains' is required" - raise ValueError(msg) + def set_k_fission(self, k_fission, subdomain, nuclide='sum', + xs_type='macro'): + if not isinstance(k_fission, openmc.mgxs.KappaFissionXS): + msg = 'Method must be passed an openmc.mgxs.KappaFissionXS' + raise TypeError(msg) - if self._representation is 'isotropic': - self._k_fission = k_fission.get_xs(subdomains=subdomains, - nuclides=nuclides, - xs_type=xs_type, - value=value) - elif self._representation is 'angle': - # Not yet implemented as MGXS do not yet support this - pass + # Make sure passed MGXS object contains correct group structure + if self.energy_groups != k_fission.energy_groups: + msg = 'Group structure of provided data does not match' \ + ' group structure of XSdata object' + raise ValueError(msg) - else: - if self._representation is 'isotropic': - shape = (self._energy_groups.num_groups,) - elif self._representation is 'angle': - shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups) - # check we have a numpy list - check_type("k_fission", k_fission, np.ndarray, - expected_iter_type=Real) - if k_fission.shape == shape: - self._k_fission = np.copy(k_fission) - if np.sum(self._k_fission) > 0.0: - self._fissionable = True - else: - msg = 'Shape of provided k_fission "{0}" does not match ' \ - 'shape required, "{1}"'.format(k_fission.shape, shape) - raise ValueError(msg) + if self._representation is 'isotropic': + self._k_fission = k_fission.get_xs(subdomains=subdomain, + nuclides=nuclide, + xs_type=xs_type) + elif self._representation is 'angle': + msg = 'Angular-Dependent MGXS have not yet been implemented' + raise ValueError(msg) - def set_chi(self, chi, **kwargs): + def set_chi(self, chi, subdomain, nuclide='sum', xs_type='macro'): if self._use_chi is not None: if not self._use_chi: - msg = 'Providing chi when nu_fission already provided as matrix!' + msg = 'Providing chi when nu_fission already provided as a ' \ + 'matrix!' raise ValueError(msg) - if isinstance(chi, openmc.mgxs.Chi): - # Make sure passed MGXS object contains correct group structure - if self.energy_groups != chi.energy_groups: - msg = 'Group structure of provided Chi does not ' \ - 'match group structure of XSdata object' - raise ValueError(msg) - # Get openmc.mgxs.get_xs() arguments from kwargs - # nuclides, xs_type, and value will have sane defaults but can be - # overridden by kwards - if 'nuclides' in kwargs: - nuclides = kwargs['nuclides'] - else: - nuclides = 'sum' - if 'xs_type' in kwargs: - xs_type = kwargs['xs_type'] - else: - xs_type = 'macro' - if 'value' in kwargs: - value = kwargs['value'] - else: - value = 'mean' - # subdomains is required from the kwargs as this is specific to - # this XSdata object. - if 'subdomains' in kwargs: - subdomains = kwargs['subdomains'] - else: - msg = "Argument 'subdomains' is required" - raise ValueError(msg) + if not isinstance(chi, openmc.mgxs.Chi): + msg = 'Method must be passed an openmc.mgxs.Chi' + raise TypeError(msg) - if self._representation is 'isotropic': - self._chi = chi.get_xs(subdomains=subdomains, - nuclides=nuclides, - xs_type=xs_type, - value=value) - elif self._representation is 'angle': - # Not yet implemented as MGXS do not yet support this - pass + # Make sure passed MGXS object contains correct group structure + if self.energy_groups != chi.energy_groups: + msg = 'Group structure of provided data does not match' \ + ' group structure of XSdata object' + raise ValueError(msg) - else: - if self._representation is 'isotropic': - shape = (self._energy_groups.num_groups,) - elif self._representation is 'angle': - shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups) - # check we have a numpy list - check_type("chi", chi, np.ndarray, expected_iter_type=Real) - if chi.shape == shape: - self._chi = np.copy(chi) - else: - msg = 'Shape of provided chi "{0}" does not match shape ' \ - 'required, "{1}"'.format(chi.shape, shape) - raise ValueError(msg) - if self._use_chi is not None: - self._use_chi = True + if self._representation is 'isotropic': + self._chi = chi.get_xs(subdomains=subdomain, + nuclides=nuclide, + xs_type=xs_type) + elif self._representation is 'angle': + msg = 'Angular-Dependent MGXS have not yet been implemented' + raise ValueError(msg) - def set_scatter(self, scatter, **kwargs): - if isinstance(scatter, openmc.mgxs.ScatterMatrixXS): - # Make sure passed MGXS object contains correct group structure - if self.energy_groups != scatter.energy_groups: - msg = 'Group structure of provided ScatterMatrixXS does not ' \ - 'match group structure of XSdata object' - raise ValueError(msg) - # Get openmc.mgxs.get_xs() arguments from kwargs - # nuclides, xs_type, and value will have sane defaults but can be - # overridden by kwards - if 'nuclides' in kwargs: - nuclides = kwargs['nuclides'] - else: - nuclides = 'sum' - if 'xs_type' in kwargs: - xs_type = kwargs['xs_type'] - else: - xs_type = 'macro' - if 'value' in kwargs: - value = kwargs['value'] - else: - value = 'mean' - # subdomains is required from the kwargs as this is specific to - # this XSdata object. - if 'subdomains' in kwargs: - subdomains = kwargs['subdomains'] - else: - msg = "Argument 'subdomains' is required" - raise ValueError(msg) + if self._use_chi is not None: + self._use_chi = True - if self._representation is 'isotropic': - self._scatter = scatter.get_xs(subdomains=subdomains, - nuclides=nuclides, - xs_type=xs_type, - value=value) - elif self._representation is 'angle': - # Not yet implemented as MGXS do not yet support this - pass + def set_scatter(self, scatter, subdomain, nuclide='sum', xs_type='macro'): + if not isinstance(scatter, openmc.mgxs.ScatterMatrixXS): + msg = 'Method must be passed an openmc.mgxs.ScatterMatrixXS' + raise TypeError(msg) - else: - if self._representation is 'isotropic': - shape = (self.num_orders, self._energy_groups.num_groups, - self._energy_groups.num_groups) - max_depth = 3 - elif self._representation is 'angle': - shape = (self._num_polar, self._num_azimuthal, self.num_orders, - self._energy_groups.num_groups, - self._energy_groups.num_groups) - max_depth = 5 - # check we have a numpy list - check_iterable_type("scatter", scatter, expected_type=Real, - max_depth=max_depth) - if scatter.shape == shape: - self._scatter = np.copy(scatter) - else: - msg = 'Shape of provided scatter "{0}" does not match shape ' \ - 'required, "{1}"'.format(scatter.shape, shape) - raise ValueError(msg) + # Make sure passed MGXS object contains correct group structure + if self.energy_groups != scatter.energy_groups: + msg = 'Group structure of provided data does not match' \ + ' group structure of XSdata object' + raise ValueError(msg) - def set_multiplicity(self, multiplicity, scatter=None, **kwargs): - if isinstance(multiplicity, openmc.mgxs.NuScatterMatrixXS): - if not isinstance(scatter, openmc.mgxs.ScatterMatrixXS): - msg = "Argument 'scatter' must be provided." - raise ValueError(msg) - # Make sure passed MGXS objects contain correct group structure - if self.energy_groups != multiplicity.energy_groups: - msg = 'Group structure of provided NuScatterMatrixXS does not ' \ - 'match group structure of XSdata object' - raise ValueError(msg) - if self.energy_groups != scatter.energy_groups: - msg = 'Group structure of provided ScatterMatrixXS does not ' \ - 'match group structure of XSdata object' - raise ValueError(msg) - # Get openmc.mgxs.get_xs() arguments from kwargs - # nuclides, xs_type, and value will have sane defaults but can be - # overridden by kwards - if 'nuclides' in kwargs: - nuclides = kwargs['nuclides'] - else: - nuclides = 'sum' - if 'xs_type' in kwargs: - xs_type = kwargs['xs_type'] - else: - xs_type = 'macro' - if 'value' in kwargs: - value = kwargs['value'] - else: - value = 'mean' - # subdomains is required from the kwargs as this is specific to - # this XSdata object. - if 'subdomains' in kwargs: - subdomains = kwargs['subdomains'] - else: - msg = "Argument 'subdomains' is required" - raise ValueError(msg) + if self._representation is 'isotropic': + self._scatter = scatter.get_xs(subdomains=subdomain, + nuclides=nuclide, + xs_type=xs_type) + elif self._representation is 'angle': + msg = 'Angular-Dependent MGXS have not yet been implemented' + raise ValueError(msg) - if self._representation is 'isotropic': - nuscatt = multiplicity.get_xs(subdomains=subdomains, - nuclides=nuclides, - xs_type=xs_type, - value=value) - scatt = scatter.get_xs(subdomains=subdomains, - nuclides=nuclides, - xs_type=xs_type, - value=value) - self._multiplicity = np.divide(nuscatt, scatt) - elif self._representation is 'angle': - # Not yet implemented as MGXS do not yet support this - pass + def set_multiplicity(self, multiplicity, scatter, subdomain, + nuclide='sum', xs_type='macro'): + if not isinstance(multiplicity, openmc.mgxs.ScatterMatrixXS): + msg = 'Method must be passed an openmc.mgxs.ScatterMatrixXS' + raise TypeError(msg) + if not isinstance(scatter, openmc.mgxs.ScatterMatrixXS): + msg = 'Method must be passed an openmc.mgxs.ScatterMatrixXS' + raise TypeError(msg) - else: - if self._representation is 'isotropic': - shape = (self._energy_groups.num_groups, - self._energy_groups.num_groups) - max_depth = 2 - elif self._representation is 'angle': - shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups, - self._energy_groups.num_groups) - max_depth = 4 - # check we have a numpy list - check_iterable_type("multiplicity", multiplicity, expected_type=Real, - max_depth=max_depth) - if multiplicity.shape == shape: - self._multiplicity = np.copy(multiplicity) - else: - msg = 'Shape of provided multiplicity "{0}" does not match shape' \ - ' required, "{1}"'.format(multiplicity.shape, shape) - raise ValueError(msg) + # Make sure passed MGXS objects contain correct group structure + if self.energy_groups != multiplicity.energy_groups: + msg = 'Group structure of "multiplicity" does not match' \ + ' group structure of XSdata object' + raise ValueError(msg) + if self.energy_groups != scatter.energy_groups: + msg = 'Group structure of "scatter" does not match' \ + ' group structure of XSdata object' + raise ValueError(msg) + + if self._representation is 'isotropic': + nuscatt = multiplicity.get_xs(subdomains=subdomain, + nuclides=nuclide, + xs_type=xs_type) + scatt = scatter.get_xs(subdomains=subdomain, + nuclides=nuclide, + xs_type=xs_type) + self._multiplicity = np.divide(nuscatt, scatt) + elif self._representation is 'angle': + msg = 'Angular-Dependent MGXS have not yet been implemented' + raise ValueError(msg) def _get_xsdata_xml(self): - element = ET.Element("xsdata") - element.set("name", self._name) + element = ET.Element('xsdata') + element.set('name', self._name) if self._alias is not None: subelement = ET.SubElement(element, 'alias') @@ -1213,7 +892,7 @@ class MGXSLibrary(object): self._xsdatas = [] self._energy_groups = energy_groups self._inverse_velocities = None - self._cross_sections_file = ET.Element("cross_sections") + self._cross_sections_file = ET.Element('cross_sections') @property def inverse_velocities(self): @@ -1232,7 +911,7 @@ class MGXSLibrary(object): @energy_groups.setter def energy_groups(self, energy_groups): - check_type("energy groups", energy_groups, openmc.mgxs.EnergyGroups) + check_type('energy groups', energy_groups, openmc.mgxs.EnergyGroups) self._energy_groups = energy_groups def add_xsdata(self, xsdata): @@ -1295,19 +974,19 @@ class MGXSLibrary(object): def _create_groups_subelement(self): if self._energy_groups is not None: - element = ET.SubElement(self._cross_sections_file, "groups") + element = ET.SubElement(self._cross_sections_file, 'groups') element.text = str(self._energy_groups.num_groups) def _create_group_structure_subelement(self): if self._energy_groups is not None: element = ET.SubElement(self._cross_sections_file, - "group_structure") + 'group_structure') element.text = ' '.join(map(str, self._energy_groups.group_edges)) def _create_inverse_velocities_subelement(self): if self._inverse_velocities is not None: element = ET.SubElement(self._cross_sections_file, - "inverse_velocities") + 'inverse_velocities') element.text = ' '.join(map(str, self._inverse_velocities)) def _create_xsdata_subelements(self): @@ -1341,4 +1020,4 @@ class MGXSLibrary(object): # Write the XML Tree to the xsdatas.xml file tree = ET.ElementTree(self._cross_sections_file) tree.write(filename, xml_declaration=True, - encoding='utf-8', method="xml") + encoding='utf-8', method='xml') From 33c52030a2a9d80afc2d6da0c3ccc4ed53d022c4 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Tue, 10 May 2016 05:32:04 -0400 Subject: [PATCH 512/650] Resolution of @paulromano comments --- src/mgxs_header.F90 | 194 ++++++++++++++-------------- src/scattdata_header.F90 | 269 ++++++++++++++++++++------------------- src/tally.F90 | 12 +- 3 files changed, 242 insertions(+), 233 deletions(-) diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index 725aacffae..88c1b23e25 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -201,7 +201,7 @@ module mgxs_header ! the xsdata object node itself. !=============================================================================== - subroutine mgxs_init_file(this,node_xsdata,i_listing) + subroutine mgxs_init_file(this, node_xsdata, i_listing) class(Mgxs), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml integer, intent(in) :: i_listing ! Index in listings array @@ -236,7 +236,7 @@ module mgxs_header else if (temp_str == 'tabular') then this % scatt_type = ANGLE_TABULAR else - call fatal_error("Invalid Scatt Type Option!") + call fatal_error("Invalid scatt_type option!") end if else this % scatt_type = ANGLE_LEGENDRE @@ -259,8 +259,8 @@ module mgxs_header end subroutine mgxs_init_file - subroutine mgxsiso_init_file(this,node_xsdata,groups,get_kfiss,get_fiss, & - max_order,i_listing) + subroutine mgxsiso_init_file(this, node_xsdata, groups, get_kfiss, get_fiss, & + max_order, i_listing) class(MgxsIso), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml integer, intent(in) :: groups ! Number of Energy groups @@ -282,7 +282,7 @@ module mgxs_header integer :: legendre_mu_points, imu ! Call generic data gathering routine (will populate the metadata) - call mgxs_init_file(this,node_xsdata,i_listing) + call mgxs_init_file(this, node_xsdata, i_listing) ! Load the more specific data allocate(this % nu_fission(groups)) @@ -292,7 +292,7 @@ module mgxs_header ! Chi was provided, that means they are giving chi and nu-fission ! vectors ! Get chi - allocate(temp_arr(1 * groups)) + allocate(temp_arr(groups)) call get_node_array(node_xsdata, "chi", temp_arr) do gin = 1, groups do gout = 1, groups @@ -329,7 +329,7 @@ module mgxs_header end do ! Now pull out information needed for chi - this % chi = temp_2d + this % chi(:, :) = temp_2d ! Normalize chi so its CDF goes to 1 do gin = 1, groups this % chi(:, gin) = this % chi(:, gin) / sum(this % chi(:, gin)) @@ -375,14 +375,14 @@ module mgxs_header if (arr_len == groups * groups) then allocate(temp_arr(arr_len)) call get_node_array(node_xsdata, "multiplicity", temp_arr) - temp_mult = reshape(temp_arr, (/groups, groups/)) + temp_mult(:, :) = reshape(temp_arr, (/groups, groups/)) deallocate(temp_arr) else call fatal_error("Multiplicity length not same as number of groups& & squared!") end if else - temp_mult = ONE + temp_mult(:, :) = ONE end if ! Get scattering treatment information @@ -426,7 +426,7 @@ module mgxs_header if (check_for_node(node_xsdata, "order")) then call get_node_value(node_xsdata, "order", order) else - call fatal_error("Order Must Be Provided!") + call fatal_error("Order must be provided!") end if ! Before retrieving the data, store the dimensionality of the data in @@ -546,11 +546,11 @@ module mgxs_header if (check_for_node(node_xsdata, "total")) then call get_node_array(node_xsdata, "total", this % total) else - this % total = this % absorption + this % scatter % scattxs + this % total(:) = this % absorption(:) + this % scatter % scattxs(:) end if ! Deallocate temporaries for the next material - deallocate(input_scatt,scatt_coeffs,temp_mult) + deallocate(input_scatt, scatt_coeffs, temp_mult) ! Finally, check sigT to ensure it is not 0 since it is ! often divided by in the tally routines @@ -561,8 +561,8 @@ module mgxs_header end subroutine mgxsiso_init_file - subroutine mgxsang_init_file(this,node_xsdata,groups,get_kfiss,get_fiss, & - max_order,i_listing) + subroutine mgxsang_init_file(this, node_xsdata, groups, get_kfiss, get_fiss, & + max_order, i_listing) class(MgxsAngle), intent(inout) :: this ! Working Object type(Node), pointer, intent(in) :: node_xsdata ! Data from MGXS xml integer, intent(in) :: groups ! Number of Energy groups @@ -584,18 +584,18 @@ module mgxs_header integer :: legendre_mu_points, imu, ipol, iazi ! Call generic data gathering routine (will populate the metadata) - call mgxs_init_file(this,node_xsdata,i_listing) + call mgxs_init_file(this, node_xsdata, i_listing) if (check_for_node(node_xsdata, "num_polar")) then call get_node_value(node_xsdata, "num_polar", this % n_pol) else - call fatal_error("num_polar Must Be Provided!") + call fatal_error("num_polar must be provided!") end if if (check_for_node(node_xsdata, "num_azimuthal")) then call get_node_value(node_xsdata, "num_azimuthal", this % n_azi) else - call fatal_error("num_azimuthal Must Be Provided!") + call fatal_error("num_azimuthal must be provided!") end if ! Load angle data, if present (else equally spaced) @@ -663,8 +663,8 @@ module mgxs_header if (check_for_node(node_xsdata, "nu_fission")) then allocate(temp_arr(groups * this % n_azi * this % n_pol)) call get_node_array(node_xsdata, "nu_fission", temp_arr) - this % nu_fission = reshape(temp_arr,(/groups, this % n_azi, & - this % n_pol/)) + this % nu_fission(:, :, :) = reshape(temp_arr, (/groups, & + this % n_azi, this % n_pol/)) deallocate(temp_arr) else call fatal_error("If fissionable, must provide nu_fission!") @@ -677,8 +677,8 @@ module mgxs_header allocate(temp_arr(groups * groups * this % n_azi * this % n_pol)) call get_node_array(node_xsdata, "nu_fission", temp_arr) allocate(temp_4d(groups, groups, this % n_azi,this % n_pol)) - temp_4d = reshape(temp_arr, (/groups, groups, this % n_azi, & - this % n_pol/)) + temp_4d(:, :, :, :) = reshape(temp_arr, (/groups, groups, & + this % n_azi, this % n_pol/)) deallocate(temp_arr) else call fatal_error("If fissionable, must provide nu_fission!") @@ -716,8 +716,8 @@ module mgxs_header allocate(temp_arr(groups * this % n_azi * this % n_pol)) call get_node_array(node_xsdata, "fission", temp_arr) allocate(this % fission(groups, this % n_azi, this % n_pol)) - this % fission = reshape(temp_arr, (/groups, this % n_azi, & - this % n_pol/)) + this % fission(:, :, :) = reshape(temp_arr, (/groups, this % n_azi, & + this % n_pol/)) deallocate(temp_arr) else call fatal_error("Fission data missing, required due to fission& @@ -729,8 +729,8 @@ module mgxs_header allocate(temp_arr(groups * this % n_azi * this % n_pol)) call get_node_array(node_xsdata, "kappa_fission", temp_arr) allocate(this % k_fission(groups, this % n_azi, this % n_pol)) - this % k_fission = reshape(temp_arr, (/groups, this % n_azi, & - this % n_pol/)) + this % k_fission(:, :, :) = reshape(temp_arr, (/groups, & + this % n_azi, this % n_pol/)) deallocate(temp_arr) else call fatal_error("kappa_fission data missing, required due to & @@ -738,16 +738,16 @@ module mgxs_header end if end if else - this % nu_fission = ZERO - this % chi = ZERO + this % nu_fission(:, :, :) = ZERO + this % chi(:, :, :, :) = ZERO end if if (check_for_node(node_xsdata, "absorption")) then allocate(temp_arr(groups * this % n_azi * this % n_pol)) call get_node_array(node_xsdata, "absorption", temp_arr) allocate(this % absorption(groups, this % n_azi, this % n_pol)) - this % absorption = reshape(temp_arr, (/groups, this % n_azi, & - this % n_pol/)) + this % absorption(:, :, :) = reshape(temp_arr, (/groups, this % n_azi, & + this % n_pol/)) deallocate(temp_arr) else call fatal_error("Must provide absorption!") @@ -760,15 +760,15 @@ module mgxs_header if (arr_len == groups * groups * this % n_azi * this % n_pol) then allocate(temp_arr(arr_len)) call get_node_array(node_xsdata, "multiplicity", temp_arr) - temp_mult = reshape(temp_arr, (/groups, groups, this % n_azi, & - this % n_pol/)) + temp_mult(:, :, :, :) = reshape(temp_arr, (/groups, groups, & + this % n_azi, this % n_pol/)) deallocate(temp_arr) else call fatal_error("Multiplicity length not same as number of groups& & squared!") end if else - temp_mult = ONE + temp_mult(:, :, :, :) = ONE end if ! Get scattering treatment information @@ -812,7 +812,7 @@ module mgxs_header if (check_for_node(node_xsdata, "order")) then call get_node_value(node_xsdata, "order", order) else - call fatal_error("Order Must Be Provided!") + call fatal_error("Order must be provided!") end if ! Before retrieving the data, store the dimensionality of the data in @@ -836,8 +836,8 @@ module mgxs_header allocate(temp_arr(groups * groups * order_dim * this % n_azi * & this % n_pol)) call get_node_array(node_xsdata, "scatter", temp_arr) - input_scatt = reshape(temp_arr, (/groups, groups, order_dim, & - this % n_azi, this % n_pol/)) + input_scatt(:, :, :, :, :) = reshape(temp_arr, (/groups, groups, & + order_dim, this % n_azi, this % n_pol/)) deallocate(temp_arr) ! Compare the number of orders given with the maximum order of the @@ -951,8 +951,8 @@ module mgxs_header if (check_for_node(node_xsdata, "total")) then allocate(temp_arr(groups * this % n_azi * this % n_pol)) call get_node_array(node_xsdata, "total", temp_arr) - this % total = reshape(temp_arr, (/groups, this % n_azi, & - this % n_pol/)) + this % total(:, :, :) = reshape(temp_arr, (/groups, this % n_azi, & + this % n_pol/)) deallocate(temp_arr) else do ipol = 1, this % n_pol @@ -1251,7 +1251,7 @@ module mgxs_header if (present(gout)) then xs = this % chi(gout, gin, iazi, ipol) else - ! Not sure youd want a 1 or a 0, but here you go! + ! Not sure you would want a 1 or a 0, but here you go! xs = sum(this % chi(:, gin, iazi, ipol)) end if case('scatter') @@ -1316,7 +1316,7 @@ module mgxs_header ! objects !=============================================================================== - subroutine mgxs_combine(this,mat,scatt_type,i_listing) + subroutine mgxs_combine(this, mat, scatt_type, i_listing) class(Mgxs), intent(inout) :: this ! The Mgxs to initialize type(Material), pointer, intent(in) :: mat ! base material integer, intent(in) :: scatt_type ! How is data presented @@ -1340,7 +1340,7 @@ module mgxs_header end subroutine mgxs_combine - subroutine mgxsiso_combine(this,mat,nuclides,groups,max_order,scatt_type, & + subroutine mgxsiso_combine(this, mat, nuclides, groups, max_order, scatt_type, & i_listing) class(MgxsIso), intent(inout) :: this ! The Mgxs to initialize type(Material), pointer, intent(in) :: mat ! base material @@ -1373,9 +1373,9 @@ module mgxs_header do i = 2, mat % n_nuclides select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (MgxsIso) - if (order /= size(nuc % scatter % dist(1) % data,dim=1)) & - call fatal_error("All Histogram Scattering Entries Must Be& - & Same Length!") + if (order /= size(nuc % scatter % dist(1) % data, dim=1)) & + call fatal_error("All histogram scattering entries must be& + & same length!") end select end do ! Ok, got our order, store the dimensionality @@ -1390,8 +1390,8 @@ module mgxs_header select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (MgxsIso) if (order /= size(nuc % scatter % dist(1) % data, dim=1)) & - call fatal_error("All Tabular Scattering Entries Must Be& - & Same Length!") + call fatal_error("All tabular scattering entries must be& + & same length!") end select end do ! Ok, got our order, store the dimensionality @@ -1406,7 +1406,7 @@ module mgxs_header do i = 1, mat % n_nuclides select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (MgxsIso) - if (size(nuc % scatter % dist(1) % data,dim=1) > mat_max_order) & + if (size(nuc % scatter % dist(1) % data, dim=1) > mat_max_order) & mat_max_order = size(nuc % scatter % dist(1) % data, dim=1) end select end do @@ -1423,25 +1423,25 @@ module mgxs_header ! Allocate and initialize data needed for macro_xs(i_mat) object allocate(this % total(groups)) - this % total = ZERO + this % total(:) = ZERO allocate(this % absorption(groups)) - this % absorption = ZERO + this % absorption(:) = ZERO allocate(this % fission(groups)) - this % fission = ZERO + this % fission(:) = ZERO allocate(this % k_fission(groups)) - this % k_fission = ZERO + this % k_fission(:) = ZERO allocate(this % nu_fission(groups)) - this % nu_fission = ZERO + this % nu_fission(:) = ZERO allocate(this % chi(groups,groups)) - this % chi = ZERO + this % chi(:, :) = ZERO allocate(temp_mult(groups,groups)) - temp_mult = ZERO + temp_mult(:, :) = ZERO allocate(mult_num(groups,groups)) - mult_num = ZERO + mult_num(:, :) = ZERO allocate(mult_denom(groups,groups)) - mult_denom = ZERO + mult_denom(:, :) = ZERO allocate(scatt_coeffs(order_dim,groups,groups)) - scatt_coeffs = ZERO + scatt_coeffs(:, :, :) = ZERO ! Add contribution from each nuclide in material do i = 1, mat % n_nuclides @@ -1452,19 +1452,19 @@ module mgxs_header select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (MgxsIso) ! Add contributions to total, absorption, and fission data (if necessary) - this % total = this % total + atom_density * nuc % total - this % absorption = this % absorption + & - atom_density * nuc % absorption + this % total(:) = this % total(:) + atom_density * nuc % total(:) + this % absorption(:) = this % absorption(:) + & + atom_density * nuc % absorption(:) if (nuc % fissionable) then - this % chi = this % chi + atom_density * nuc % chi - this % nu_fission = this % nu_fission + atom_density * & - nuc % nu_fission + this % chi(:, :) = this % chi(:, :) + atom_density * nuc % chi(:, :) + this % nu_fission(:) = this % nu_fission(:)+ atom_density * & + nuc % nu_fission(:) if (allocated(nuc % fission)) then - this % fission = this % fission + atom_density * nuc % fission + this % fission(:) = this % fission(:) + atom_density * nuc % fission(:) end if if (allocated(nuc % k_fission)) then - this % k_fission = this % k_fission + atom_density * & - nuc % k_fission + this % k_fission(:) = this % k_fission(:) + atom_density * & + nuc % k_fission(:) end if end if @@ -1498,7 +1498,7 @@ module mgxs_header nuc % scatter % get_matrix(min(nuc_order_dim, order_dim)) type is (MgxsAngle) - call fatal_error("Invalid Passing of MgxsAngle to MgxsIso Object") + call fatal_error("Invalid passing of MgxsAngle to MgxsIso object") end select end do @@ -1531,7 +1531,7 @@ module mgxs_header end subroutine mgxsiso_combine - subroutine mgxsang_combine(this,mat,nuclides,groups,max_order,scatt_type,& + subroutine mgxsang_combine(this, mat, nuclides, groups, max_order, scatt_type, & i_listing) class(MgxsAngle), intent(inout) :: this ! The Mgxs to initialize type(Material), pointer, intent(in) :: mat ! base material @@ -1551,7 +1551,7 @@ module mgxs_header real(8), allocatable :: mult_denom(:, :, :, :), scatt_coeffs(:, :, :, :, :) ! Set the meta-data - call mgxs_combine(this,mat,scatt_type,i_listing) + call mgxs_combine(this, mat, scatt_type, i_listing) ! Get the number of each polar and azi angles and make sure all the ! NuclideAngle types have the same number of these angles @@ -1564,12 +1564,12 @@ module mgxs_header n_pol = nuc % n_pol n_azi = nuc % n_azi allocate(this % polar(n_pol)) - this % polar = nuc % polar + this % polar(:) = nuc % polar(:) allocate(this % azimuthal(n_azi)) - this % azimuthal = nuc % azimuthal + this % azimuthal(:) = nuc % azimuthal(:) else if ((n_pol /= nuc % n_pol) .or. (n_azi /= nuc % n_azi)) then - call fatal_error("All Angular Data Must Be Same Length!") + call fatal_error("All angular data must be same length!") end if end if end select @@ -1589,8 +1589,8 @@ module mgxs_header select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (MgxsAngle) if (order /= size(nuc % scatter(1,1) % obj % dist(1) % data, dim=1)) & - call fatal_error("All Histogram Scattering Entries Must Be& - & Same Length!") + call fatal_error("All histogram scattering entries must be& + & same length!") end select end do ! Ok, got our order, store the dimensionality @@ -1609,9 +1609,9 @@ module mgxs_header do i = 2, mat % n_nuclides select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (MgxsAngle) - if (order /= size(nuc % scatter(1, 1) % obj % dist(1) % data,dim=1)) & - call fatal_error("All Tabular Scattering Entries Must Be& - & Same Length!") + if (order /= size(nuc % scatter(1, 1) % obj % dist(1) % data, dim=1)) & + call fatal_error("All tabular scattering entries must be& + & same length!") end select end do ! Ok, got our order, store the dimensionality @@ -1653,25 +1653,25 @@ module mgxs_header ! Allocate and initialize data within macro_xs(i_mat) object allocate(this % total(groups, n_azi, n_pol)) - this % total = ZERO + this % total(:, :, :) = ZERO allocate(this % absorption(groups, n_azi, n_pol)) - this % absorption = ZERO + this % absorption(:, :, :) = ZERO allocate(this % fission(groups, n_azi, n_pol)) - this % fission = ZERO + this % fission(:, :, :) = ZERO allocate(this % k_fission(groups, n_azi, n_pol)) - this % k_fission = ZERO + this % k_fission(:, :, :) = ZERO allocate(this % nu_fission(groups, n_azi, n_pol)) - this % nu_fission = ZERO + this % nu_fission(:, :, :) = ZERO allocate(this % chi(groups, groups, n_azi, n_pol)) - this % chi = ZERO + this % chi(:, :, :, :) = ZERO allocate(temp_mult(groups, groups, n_azi, n_pol)) - temp_mult = ZERO + temp_mult(:, :, :, :) = ZERO allocate(mult_num(groups, groups, n_azi, n_pol)) - mult_num = ZERO + mult_num(:, :, :, :) = ZERO allocate(mult_denom(groups, groups, n_azi, n_pol)) - mult_denom = ZERO + mult_denom(:, :, :, :) = ZERO allocate(scatt_coeffs(order_dim, groups, groups, n_azi, n_pol)) - scatt_coeffs = ZERO + scatt_coeffs(:, :, :, :, :) = ZERO ! Add contribution from each nuclide in material do i = 1, mat % n_nuclides @@ -1681,22 +1681,24 @@ module mgxs_header ! Perform our operations which depend upon the type select type(nuc => nuclides(mat % nuclide(i)) % obj) type is (MgxsIso) - call fatal_error("Invalid Passing of MgxsIso to MgxsAngle Object") + call fatal_error("Invalid passing of MgxsIso to MgxsAngle object") type is (MgxsAngle) ! Add contributions to total, absorption, and fission data (if necessary) - this % total = this % total + atom_density * nuc % total - this % absorption = this % absorption + & - atom_density * nuc % absorption + this % total(:, :, :) = this % total(:, :, :) + & + atom_density * nuc % total(:, :, :) + this % absorption(:, :, :) = this % absorption(:, :, :) + & + atom_density * nuc % absorption(:, :, :) if (nuc % fissionable) then this % chi = this % chi + atom_density * nuc % chi - this % nu_fission = this % nu_fission + atom_density * & - nuc % nu_fission + this % nu_fission(:, :, :) = this % nu_fission(:, :, :) + & + atom_density * nuc % nu_fission(:, :, :) if (allocated(nuc % fission)) then - this % fission = this % fission + atom_density * nuc % fission + this % fission(:, :, :) = this % fission(:, :, :) + & + atom_density * nuc % fission(:, :, :) end if if (allocated(nuc % k_fission)) then - this % k_fission = this % k_fission + atom_density * & - nuc % k_fission + this % k_fission(:, :, :) = this % k_fission(:, :, :) + & + atom_density * nuc % k_fission(:, :, :) end if end if @@ -1730,7 +1732,7 @@ module mgxs_header end do ! Get the complete scattering matrix - nuc_order_dim = size(nuc % scatter(1,1) % obj % dist(1) % data,dim=1) + nuc_order_dim = size(nuc % scatter(1, 1) % obj % dist(1) % data, dim=1) do ipol = 1, n_pol do iazi = 1, n_azi scatt_coeffs(1:min(nuc_order_dim, order_dim), :, :, iazi, ipol) = & diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index f36fe6043e..12c11e2e4e 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -14,7 +14,7 @@ module scattdata_header !=============================================================================== type :: Jagged2D - real(8), allocatable :: data(:,:) + real(8), allocatable :: data(:, :) end type Jagged2D type :: Jagged1D @@ -27,12 +27,15 @@ module scattdata_header !=============================================================================== type, abstract :: ScattData - ! normalized p0 matrix on its own for sampling energy + ! The data attribute of the energy, mult, and dist arrays + ! are not necessarily 1-indexed as they instead will be allocated + ! from a minimum outgoing group to an outgoing minimum group. + ! Normalized p0 matrix on its own for sampling energy type(Jagged1D), allocatable :: energy(:) ! (Gin % data(Gout)) - ! nu-scatter multiplication (i.e. nu-scatt/scatt) + ! Nu-scatter multiplication (i.e. nu-scatt/scatt) type(Jagged1D), allocatable :: mult(:) ! (Gin % data(Gout)) ! Angular distribution - type(Jagged2D), allocatable :: dist(:) ! (Gin % data(Order/Nmu x Gout) + type(Jagged2D), allocatable :: dist(:) ! (Gin % data(Order/Nmu, Gout) integer, allocatable :: gmin(:) ! Minimum outgoing group integer, allocatable :: gmax(:) ! Maximum outgoing group real(8), allocatable :: scattxs(:) ! Isotropic Sigma_{s,g_{in}} @@ -47,9 +50,9 @@ module scattdata_header abstract interface subroutine scattdata_init_(this, mult, coeffs) import ScattData - class(ScattData), intent(inout) :: this ! Scattering Object to work with - real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix - real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use + class(ScattData), intent(inout) :: this ! Object to work with + real(8), intent(in) :: mult(:, :) ! Scatter Prod'n Matrix + real(8), intent(in) :: coeffs(:, :, :) ! Coefficients to use end subroutine scattdata_init_ pure function scattdata_calc_f_(this, gin, gout, mu) result(f) @@ -120,10 +123,10 @@ contains !=============================================================================== subroutine scattdata_init(this, order, energy, mult) - class(ScattData), intent(inout) :: this ! Object to work on - integer, intent(in) :: order ! Data Order - real(8), intent(inout) :: energy(:,:) ! Energy Transfer Matrix - real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix + class(ScattData), intent(inout) :: this ! Object to work on + integer, intent(in) :: order ! Data Order + real(8), intent(inout) :: energy(:, :) ! Energy Transfer Matrix + real(8), intent(in) :: mult(:, :) ! Scatter Prod'n Matrix integer :: groups, gmin, gmax, gin real(8) :: norm @@ -139,15 +142,15 @@ contains ! Also set energy values when doing it do gin = 1, groups ! Make sure energy is normalized (i.e., CDF is 1) - norm = sum(energy(:,gin)) - if (norm /= ZERO) energy(:,gin) = energy(:,gin) / norm + norm = sum(energy(:, gin)) + if (norm /= ZERO) energy(:, gin) = energy(:, gin) / norm ! Find gmin by checking the P0 moment do gmin = 1, groups - if (energy(gmin,gin) > ZERO) exit + if (energy(gmin, gin) > ZERO) exit end do ! Find gmax by checking the P0 moment do gmax = groups, 1, -1 - if (energy(gmax,gin) > ZERO) exit + if (energy(gmax, gin) > ZERO) exit end do ! Treat the case of all zeros if (gmin > gmax) then @@ -156,10 +159,10 @@ contains ! By not changing energy(gin) here we are leaving it as zero end if allocate(this % energy(gin) % data(gmin:gmax)) - this % energy(gin) % data(gmin:gmax) = energy(gmin:gmax,gin) + this % energy(gin) % data(gmin:gmax) = energy(gmin:gmax, gin) allocate(this % mult(gin) % data(gmin:gmax)) - this % mult(gin) % data(gmin:gmax) = mult(gmin:gmax,gin) - allocate(this % dist(gin) % data(order,gmin:gmax)) + this % mult(gin) % data(gmin:gmax) = mult(gmin:gmax, gin) + allocate(this % dist(gin) % data(order, gmin:gmax)) this % dist(gin) % data = ZERO this % gmin(gin) = gmin this % gmax(gin) = gmax @@ -167,38 +170,38 @@ contains end subroutine scattdata_init subroutine scattdatalegendre_init(this, mult, coeffs) - class(ScattDataLegendre), intent(inout) :: this ! Object to work on - real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix - real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use + class(ScattDataLegendre), intent(inout) :: this ! Object to work on + real(8), intent(in) :: mult(:, :) ! Scatter Prod'n Matrix + real(8), intent(in) :: coeffs(:, :, :) ! Coefficients to use real(8) :: dmu, mu, f, norm integer :: imu, Nmu, gout, gin, groups, order - real(8), allocatable :: energy(:,:) - real(8), allocatable :: matrix(:,:,:) + real(8), allocatable :: energy(:, :) + real(8), allocatable :: matrix(:, :, :) - groups = size(coeffs,dim=3) - order = size(coeffs,dim=1) + groups = size(coeffs, dim=3) + order = size(coeffs, dim=1) ! make a copy of coeffs that we can use to extract data and normalize - allocate(matrix(order,groups,groups)) - matrix = coeffs + allocate(matrix(order, groups, groups)) + matrix (:, :, :)= coeffs ! Get scattxs value allocate(this % scattxs(groups)) ! Get this by summing the un-normalized P0 coefficient in matrix ! over all outgoing groups - this % scattxs = sum(matrix(1,:,:),dim=1) + this % scattxs(:) = sum(matrix(1, :, :), dim=1) - allocate(energy(groups,groups)) - energy = ZERO + allocate(energy(groups, groups)) + energy(:, :) = ZERO ! Build energy transfer probability matrix from data in matrix ! while also normalizing matrix itself (making CDF of f(mu=1)=1) do gin = 1, groups do gout = 1, groups - norm = matrix(1,gout,gin) - energy(gout,gin) = norm + norm = matrix(1, gout, gin) + energy(gout, gin) = norm if (norm /= ZERO) then - matrix(:,gout,gin) = matrix(:,gout,gin) / norm + matrix(:, gout, gin) = matrix(:, gout, gin) / norm end if end do end do @@ -209,16 +212,16 @@ contains ! Set dist values from matrix and initialize max_val do gin = 1, groups do gout = this % gmin(gin), this % gmax(gin) - this % dist(gin) % data(:,gout) = matrix(:,gout,gin) + this % dist(gin) % data(:, gout) = matrix(:, gout, gin) end do allocate(this % max_val(gin) % data(this % gmin(gin):this % gmax(gin))) - this % max_val(gin) % data = ZERO + this % max_val(gin) % data(:) = ZERO end do ! Step through the polynomial with fixed number of points to identify ! the maximal value. Nmu = 1001 - dmu = TWO / real(Nmu - 1,8) + dmu = TWO / real(Nmu - 1, 8) do gin = 1, groups do gout = this % gmin(gin), this % gmax(gin) do imu = 1, Nmu @@ -228,7 +231,7 @@ contains else if (imu == Nmu) then mu = ONE else - mu = -ONE + real(imu - 1,8) * dmu + mu = -ONE + real(imu - 1, 8) * dmu end if ! Calculate probability f = this % calc_f(gin,gout,mu) @@ -245,37 +248,37 @@ contains subroutine scattdatahistogram_init(this, mult, coeffs) class(ScattDataHistogram), intent(inout) :: this ! Object to work on - real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix - real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use + real(8), intent(in) :: mult(:, :) ! Scatter Prod'n Matrix + real(8), intent(in) :: coeffs(:, :, :) ! Coefficients to use integer :: imu, gin, gout, groups, order real(8) :: norm - real(8), allocatable :: energy(:,:) - real(8), allocatable :: matrix(:,:,:) + real(8), allocatable :: energy(:, :) + real(8), allocatable :: matrix(:, :, :) - groups = size(coeffs,dim=3) - order = size(coeffs,dim=1) + groups = size(coeffs, dim=3) + order = size(coeffs, dim=1) ! make a copy of coeffs that we can use to extract data and normalize - allocate(matrix(order,groups,groups)) - matrix = coeffs + allocate(matrix(order, groups, groups)) + matrix(:, :, :) = coeffs ! Get scattxs value allocate(this % scattxs(groups)) ! Get this by summing the un-normalized P0 coefficient in matrix ! over all outgoing groups - this % scattxs = sum(sum(matrix(:,:,:),dim=1),dim=1) + this % scattxs(:) = sum(sum(matrix(:, :, :), dim=1), dim=1) - allocate(energy(groups,groups)) - energy = ZERO + allocate(energy(groups, groups)) + energy(:, :) = ZERO ! Build energy transfer probability matrix from data in matrix ! while also normalizing matrix itself (making CDF of f(mu=1)=1) do gin = 1, groups do gout = 1, groups - norm = sum(matrix(:,gout,gin)) - energy(gout,gin) = norm + norm = sum(matrix(:, gout, gin)) + energy(gout, gin) = norm if (norm /= ZERO) then - matrix(:,gout,gin) = matrix(:,gout,gin) / norm + matrix(:, gout, gin) = matrix(:, gout, gin) / norm end if end do end do @@ -283,10 +286,10 @@ contains call scattdata_init(this, order, energy, mult) allocate(this % mu(order)) - this % dmu = TWO / real(order,8) + this % dmu = TWO / real(order, 8) this % mu(1) = -ONE do imu = 2, order - this % mu(imu) = -ONE + real(imu - 1,8) * this % dmu + this % mu(imu) = -ONE + real(imu - 1, 8) * this % dmu end do ! Integrate this histogram so we can avoid rejection sampling while @@ -297,21 +300,23 @@ contains this % gmin(gin):this % gmax(gin))) do gout = this % gmin(gin), this % gmax(gin) ! Store the histogram - this % fmu(gin) % data(:,gout) = matrix(:,gout,gin) + this % fmu(gin) % data(:, gout) = matrix(:, gout, gin) ! Integrate the histogram - this % dist(gin) % data(1,gout) = this % dmu * matrix(1,gout,gin) + this % dist(gin) % data(1, gout) = & + this % dmu * matrix(1, gout, gin) do imu = 2, order - this % dist(gin) % data(imu,gout) = this % dmu * matrix(imu,gout,gin) + & - this % dist(gin) % data(imu - 1,gout) + this % dist(gin) % data(imu, gout) = & + this % dmu * matrix(imu, gout, gin) + & + this % dist(gin) % data(imu - 1, gout) end do ! Now make sure integral norms to zero - norm = this % dist(gin) % data(order,gout) + norm = this % dist(gin) % data(order, gout) if (norm > ZERO) then - this % fmu(gin) % data(:,gout) = & - this % fmu(gin) % data(:,gout) / norm - this % dist(gin) % data(:,gout) = & - this % dist(gin) % data(:,gout) / norm + this % fmu(gin) % data(:, gout) = & + this % fmu(gin) % data(:, gout) / norm + this % dist(gin) % data(:, gout) = & + this % dist(gin) % data(:, gout) / norm end if end do end do @@ -320,27 +325,27 @@ contains subroutine scattdatatabular_init(this, mult, coeffs) class(ScattDataTabular), intent(inout) :: this ! Object to work on - real(8), intent(in) :: mult(:,:) ! Scatter Prod'n Matrix - real(8), intent(in) :: coeffs(:,:,:) ! Coefficients to use + real(8), intent(in) :: mult(:, :) ! Scatter Prod'n Matrix + real(8), intent(in) :: coeffs(:, :, :) ! Coefficients to use integer :: imu, gin, gout, groups, order real(8) :: norm - real(8), allocatable :: energy(:,:) - real(8), allocatable :: matrix(:,:,:) + real(8), allocatable :: energy(:, :) + real(8), allocatable :: matrix(:, :, :) - groups = size(coeffs,dim=3) - order = size(coeffs,dim=1) + groups = size(coeffs, dim=3) + order = size(coeffs, dim=1) ! make a copy of coeffs that we can use to extract data and normalize - allocate(matrix(order,groups,groups)) - matrix = coeffs + allocate(matrix(order, groups, groups)) + matrix(:, :, :) = coeffs ! Build the angular distribution mu values allocate(this % mu(order)) - this % dmu = TWO / real(order - 1,8) + this % dmu = TWO / real(order - 1, 8) this % mu(1) = -ONE do imu = 2, order - 1 - this % mu(imu) = -ONE + real(imu - 1,8) * this % dmu + this % mu(imu) = -ONE + real(imu - 1, 8) * this % dmu end do this % mu(order) = ONE @@ -353,24 +358,24 @@ contains norm = ZERO do gout = 1, groups do imu = 2, order - norm = norm + HALF * this % dmu * (matrix(imu - 1,gout,gin) + & - matrix(imu,gout,gin)) + norm = norm + HALF * this % dmu * (matrix(imu - 1, gout, gin) + & + matrix(imu, gout, gin)) end do end do this % scattxs(gin) = norm end do - allocate(energy(groups,groups)) - energy = ZERO + allocate(energy(groups, groups)) + energy(:, :) = ZERO ! Build energy transfer probability matrix from data in matrix do gin = 1, groups do gout = 1, groups norm = ZERO do imu = 2, order norm = norm + HALF * this % dmu * & - (matrix(imu - 1,gout,gin) + matrix(imu,gout,gin)) + (matrix(imu - 1, gout, gin) + matrix(imu, gout, gin)) end do - energy(gout,gin) = norm + energy(gout, gin) = norm end do end do call scattdata_init(this, order, energy, mult) @@ -383,12 +388,12 @@ contains do gout = this % gmin(gin), this % gmax(gin) ! Coeffs contain f(mu), put in f(mu) as that is where the ! PDF lives - this % fmu(gin) % data(:,gout) = matrix(:,gout,gin) + this % fmu(gin) % data(:, gout) = matrix(:, gout, gin) ! Force positivity do imu = 1, order - if (this % fmu(gin) % data(imu,gout) < ZERO) then - this % fmu(gin) % data(imu,gout) = ZERO + if (this % fmu(gin) % data(imu, gout) < ZERO) then + this % fmu(gin) % data(imu, gout) = ZERO end if end do @@ -397,27 +402,27 @@ contains norm = ZERO do imu = 2, order norm = norm + HALF * this % dmu * & - (this % fmu(gin) % data(imu - 1,gout) + & - this % fmu(gin) % data(imu,gout)) + (this % fmu(gin) % data(imu - 1, gout) + & + this % fmu(gin) % data(imu, gout)) end do if (norm > ZERO) then - this % fmu(gin) % data(:,gout) = & - this % fmu(gin) % data(:,gout) / norm + this % fmu(gin) % data(:, gout) = & + this % fmu(gin) % data(:, gout) / norm end if ! Now create CDF from fmu with trapezoidal rule - this % dist(gin) % data(1,gout) = ZERO + this % dist(gin) % data(1, gout) = ZERO do imu = 2, order - this % dist(gin) % data(imu,gout) = & - this % dist(gin) % data(imu - 1,gout) + & - HALF * this % dmu * (this % fmu(gin) % data(imu - 1,gout) + & - this % fmu(gin) % data(imu,gout)) + this % dist(gin) % data(imu, gout) = & + this % dist(gin) % data(imu - 1, gout) + & + HALF * this % dmu * (this % fmu(gin) % data(imu - 1, gout) + & + this % fmu(gin) % data(imu, gout)) end do ! Ensure we normalize to 1 still - norm = this % dist(gin) % data(order,gout) + norm = this % dist(gin) % data(order, gout) if (norm > ZERO) then - this % dist(gin) % data(:,gout) = & - this % dist(gin) % data(:,gout) / norm + this % dist(gin) % data(:, gout) = & + this % dist(gin) % data(:, gout) / norm end if end do end do @@ -438,7 +443,7 @@ contains if (gout < this % gmin(gin) .or. gout > this % gmax(gin)) then f = ZERO else - f = evaluate_legendre(this % dist(gin) % data(:,gout),mu) + f = evaluate_legendre(this % dist(gin) % data(:, gout), mu) end if end function scattdatalegendre_calc_f @@ -457,12 +462,12 @@ contains else ! Find mu bin if (mu == ONE) then - imu = size(this % fmu(gin) % data,dim=1) + imu = size(this % fmu(gin) % data, dim=1) else - imu = floor((mu + ONE)/ this % dmu + ONE) + imu = floor((mu + ONE) / this % dmu + ONE) end if - f = this % fmu(gin) % data(imu,gout) + f = this % fmu(gin) % data(imu, gout) end if end function scattdatahistogram_calc_f @@ -482,15 +487,15 @@ contains else ! Find mu bin if (mu == ONE) then - imu = size(this % fmu(gin) % data,dim=1) - 1 + imu = size(this % fmu(gin) % data, dim=1) - 1 else - imu = floor((mu + ONE)/ this % dmu + ONE) + imu = floor((mu + ONE) / this % dmu + ONE) end if ! Now interpolate to find f(mu) r = (mu - this % mu(imu)) / (this % mu(imu + 1) - this % mu(imu)) - f = (ONE - r) * this % fmu(gin) % data(imu,gout) + & - r * this % fmu(gin) % data(imu + 1,gout) + f = (ONE - r) * this % fmu(gin) % data(imu, gout) + & + r * this % fmu(gin) % data(imu + 1, gout) end if end function scattdatatabular_calc_f @@ -529,7 +534,7 @@ contains samples = 0 do mu = TWO * prn() - ONE - f = this % calc_f(gin,gout,mu) + f = this % calc_f(gin, gout, mu) if (f > ZERO) then u = prn() * M if (u <= f) then @@ -567,11 +572,11 @@ contains end do xi = prn() - if (xi < this % dist(gin) % data(1,gout)) then + if (xi < this % dist(gin) % data(1, gout)) then imu = 1 else - imu = binary_search(this % dist(gin) % data(:,gout), & - size(this % dist(gin) % data(:,gout)), xi) + imu = binary_search(this % dist(gin) % data(:, gout), & + size(this % dist(gin) % data(:, gout)), xi) end if ! Randomly select a mu in this bin. @@ -604,12 +609,12 @@ contains end do ! determine outgoing cosine bin - NP = size(this % dist(gin) % data(:,gout)) + NP = size(this % dist(gin) % data(:, gout)) xi = prn() - c_k = this % dist(gin) % data(1,gout) + c_k = this % dist(gin) % data(1, gout) do k = 1, NP - 1 - c_k1 = this % dist(gin) % data(k + 1,gout) + c_k1 = this % dist(gin) % data(k + 1, gout) if (xi < c_k1) exit c_k = c_k1 end do @@ -617,18 +622,19 @@ contains ! check to make sure k is <= NP - 1 k = min(k, NP - 1) - p0 = this % fmu(gin) % data(k,gout) + p0 = this % fmu(gin) % data(k, gout) mu0 = this % mu(k) ! Linear-linear interpolation to find mu value w/in bin. - p1 = this % fmu(gin) % data(k + 1,gout) + p1 = this % fmu(gin) % data(k + 1, gout) mu1 = this % mu(k + 1) - frac = (p1 - p0)/(mu1 - mu0) + frac = (p1 - p0) / (mu1 - mu0) if (frac == ZERO) then - mu = mu0 + (xi - c_k)/p0 + mu = mu0 + (xi - c_k) / p0 else - mu = mu0 + (sqrt(max(ZERO, p0 * p0 + TWO * frac * (xi - c_k))) - p0) / frac + mu = mu0 + & + (sqrt(max(ZERO, p0 * p0 + TWO * frac * (xi - c_k))) - p0) / frac end if if (mu <= -ONE) then @@ -649,23 +655,24 @@ contains pure function scattdata_get_matrix(this, req_order) result(matrix) class(ScattData), intent(in) :: this ! Scattering Object to work with integer, intent(in) :: req_order ! Requested order of matrix - real(8), allocatable :: matrix(:,:,:) ! Resultant matrix just built + real(8), allocatable :: matrix(:, :, :) ! Resultant matrix just built integer :: order, groups, gin, gout groups = size(this % energy) - order = min(req_order,size(this % dist(1) % data(:,1))) + ! Set gin and gout for getting the order + order = min(req_order, size(this % dist(1) % data, dim=1)) - allocate(matrix(order,groups,groups)) + allocate(matrix(order, groups, groups)) ! Initialize to 0; this way the zero entries in the dense matrix dont ! need to be explicitly set, requiring a significant increase in the ! lines of code. - matrix = ZERO + matrix(:, :, :) = ZERO do gin = 1, groups do gout = this % gmin(gin), this % gmax(gin) - matrix(:,gout,gin) = this % scattxs(gin) * & + matrix(:, gout, gin) = this % scattxs(gin) * & this % energy(gin) % data(gout) * & - this % dist(gin) % data(1:order,gout) + this % dist(gin) % data(1:order, gout) end do end do end function scattdata_get_matrix @@ -673,23 +680,23 @@ contains pure function scattdatahistogram_get_matrix(this, req_order) result(matrix) class(ScattDataHistogram), intent(in) :: this ! Scattering Object to work with integer, intent(in) :: req_order ! Requested order of matrix - real(8), allocatable :: matrix(:,:,:) ! Resultant matrix just built + real(8), allocatable :: matrix(:, :, :) ! Resultant matrix just built integer :: order, groups, gin, gout groups = size(this % energy) - order = min(req_order,size(this % dist(1) % data(:,1))) + order = min(req_order, size(this % dist(1) % data, dim=1)) - allocate(matrix(order,groups,groups)) + allocate(matrix(order, groups, groups)) ! Initialize to 0; this way the zero entries in the dense matrix dont ! need to be explicitly set, requiring a significant increase in the ! lines of code. - matrix = ZERO + matrix(:, :, :) = ZERO do gin = 1, groups do gout = this % gmin(gin), this % gmax(gin) - matrix(:,gout,gin) = this % scattxs(gin) * & + matrix(:, gout, gin) = this % scattxs(gin) * & this % energy(gin) % data(gout) * & - this % fmu(gin) % data(1:order,gout) + this % fmu(gin) % data(1:order, gout) end do end do end function scattdatahistogram_get_matrix @@ -697,23 +704,23 @@ contains pure function scattdatatabular_get_matrix(this, req_order) result(matrix) class(ScattDataTabular), intent(in) :: this ! Scattering Object to work with integer, intent(in) :: req_order ! Requested order of matrix - real(8), allocatable :: matrix(:,:,:) ! Resultant matrix just built + real(8), allocatable :: matrix(:, :, :) ! Resultant matrix just built integer :: order, groups, gin, gout groups = size(this % energy) - order = min(req_order,size(this % dist(1) % data(:,1))) + order = min(req_order, size(this % dist(1) % data, dim=1)) - allocate(matrix(order,groups,groups)) + allocate(matrix(order, groups, groups)) ! Initialize to 0; this way the zero entries in the dense matrix dont ! need to be explicitly set, requiring a significant increase in the ! lines of code. - matrix = ZERO + matrix(:, :, :) = ZERO do gin = 1, groups do gout = this % gmin(gin), this % gmax(gin) - matrix(:,gout,gin) = this % scattxs(gin) * & + matrix(:, gout, gin) = this % scattxs(gin) * & this % energy(gin) % data(gout) * & - this % fmu(gin) % data(1:order,gout) + this % fmu(gin) % data(1:order, gout) end do end do end function scattdatatabular_get_matrix diff --git a/src/tally.F90 b/src/tally.F90 index 86e108c3dc..c4eaf30c8c 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -961,9 +961,9 @@ contains if (i_nuclide > 0) then score = score * atom_density * & nucxs % get_xs('scatter*f_mu/mult', p % last_g, p % g, & - UVW=p_uvw,MU=p % mu) / & + UVW=p_uvw, MU=p % mu) / & matxs % get_xs('scatter*f_mu/mult', p % last_g, p % g, & - UVW=p_uvw,MU=p % mu) + UVW=p_uvw, MU=p % mu) end if else @@ -1080,11 +1080,11 @@ contains end if if (i_nuclide > 0) then score = score * atom_density * & - nucxs % get_xs('fission', p_g, UVW=p_uvw) / & + nucxs % get_xs('fission', p_g, UVW=p_uvw) / & matxs % get_xs('absorption', p_g, UVW=p_uvw) else score = score * & - matxs % get_xs('fission', p_g, UVW=p_uvw) / & + matxs % get_xs('fission', p_g, UVW=p_uvw) / & matxs % get_xs('absorption', p_g, UVW=p_uvw) end if else @@ -1170,11 +1170,11 @@ contains if (i_nuclide > 0) then score = score * atom_density * & nucxs % get_xs('kappa_fission', p_g, UVW=p_uvw) / & - matxs % get_xs('absorption', p_g, UVW=p_uvw) + matxs % get_xs('absorption', p_g, UVW=p_uvw) else score = score * & matxs % get_xs('kappa_fission', p_g, UVW=p_uvw) / & - matxs % get_xs('absorption', p_g, UVW=p_uvw) + matxs % get_xs('absorption', p_g, UVW=p_uvw) end if else if (i_nuclide > 0) then From 8e4422ae1fb24355b4298bdf57e5a92ff5094b65 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 10 May 2016 10:36:43 -0500 Subject: [PATCH 513/650] Add HexLattice.show_indices staticmethod and clarify universes description --- openmc/lattice.py | 125 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 118 insertions(+), 7 deletions(-) diff --git a/openmc/lattice.py b/openmc/lattice.py index f78ec8e909..af6c14a6a9 100644 --- a/openmc/lattice.py +++ b/openmc/lattice.py @@ -30,8 +30,8 @@ class Lattice(object): Unique identifier for the lattice name : str Name of the lattice - pitch : float - Pitch of the lattice in cm + pitch : Iterable of float + Pitch of the lattice in each direction in cm outer : openmc.Universe A universe to fill all space outside the lattice universes : Iterable of Iterable of openmc.Universe @@ -259,8 +259,9 @@ class RectLattice(Lattice): lower_left : Iterable of float The coordinates of the lower-left corner of the lattice. If the lattice is two-dimensional, only the x- and y-coordinates are specified. - pitch : float - Pitch of the lattice in cm + pitch : Iterable of float + Pitch of the lattice in the x, y, and (if applicable) z directions in + cm. outer : openmc.Universe A universe to fill all space outside the lattice universes : Iterable of Iterable of openmc.Universe @@ -512,13 +513,19 @@ class HexLattice(Lattice): center : Iterable of float Coordinates of the center of the lattice. If the lattice does not have axial sections then only the x- and y-coordinates are specified - pitch : float - Pitch of the lattice in cm + pitch : Iterable of float + Pitch of the lattice in cm. The first item in the iterable specifies the + pitch in the radial direction and, if the lattice is 3D, the second item + in the iterable specifies the pitch in the axial direction. outer : openmc.Universe A universe to fill all space outside the lattice universes : Iterable of Iterable of openmc.Universe A two- or three-dimensional list/array of universes filling each element - of the lattice + of the lattice. Each sub-list corresponds to one ring of universes and + should be ordered from outermost ring to innermost ring. The universes + within each sub-list are ordered from the "top" and proceed in a + clockwise fashion. The :meth:`HexLattice.show_indices` method can be + used to help figure out indices for this property. """ @@ -882,3 +889,107 @@ class HexLattice(Lattice): # Join the rows together and return the string. universe_ids = '\n'.join(rows) return universe_ids + + @staticmethod + def show_indices(num_rings): + """Return a diagram of the hexagonal lattice layout with indices. + + This method can be used to show the proper indices to be used when + setting the :attr:`HexLattice.universes` property. For example, running + this method with num_rings=3 will return the following diagram:: + + (0, 0) + (0,11) (0, 1) + (0,10) (1, 0) (0, 2) + (1, 5) (1, 1) + (0, 9) (2, 0) (0, 3) + (1, 4) (1, 2) + (0, 8) (1, 3) (0, 4) + (0, 7) (0, 5) + (0, 6) + + Parameters + ---------- + num_rings : int + Number of rings in the hexagonal lattice + + Returns + ------- + str + Diagram of the hexagonal lattice showing indices + + """ + + # Find the largest string and count the number of digits so we can + # properly pad the output string later + largest_index = 6*(num_rings - 1) + n_digits_index = len(str(largest_index)) + n_digits_ring = len(str(num_rings - 1)) + str_form = '({{:{}}},{{:{}}})'.format(n_digits_ring, n_digits_index) + pad = ' '*(n_digits_index + n_digits_ring + 3) + + # Initialize the list for each row. + rows = [[] for i in range(1 + 4 * (num_rings-1))] + middle = 2 * (num_rings - 1) + + # Start with the degenerate first ring. + rows[middle] = [str_form.format(num_rings - 1, 0)] + + # Add universes one ring at a time. + for r in range(1, num_rings): + # r_prime increments down while r increments up. + r_prime = num_rings - 1 - r + theta = 0 + y = middle + 2*r + + for i in range(r): + # Climb down the top-right. + rows[y].append(str_form.format(r_prime, theta)) + y -= 1 + theta += 1 + + for i in range(r): + # Climb down the right. + rows[y].append(str_form.format(r_prime, theta)) + y -= 2 + theta += 1 + + for i in range(r): + # Climb down the bottom-right. + rows[y].append(str_form.format(r_prime, theta)) + y -= 1 + theta += 1 + + for i in range(r): + # Climb up the bottom-left. + rows[y].insert(0, str_form.format(r_prime, theta)) + y += 1 + theta += 1 + + for i in range(r): + # Climb up the left. + rows[y].insert(0, str_form.format(r_prime, theta)) + y += 2 + theta += 1 + + for i in range(r): + # Climb up the top-left. + rows[y].insert(0, str_form.format(r_prime, theta)) + y += 1 + theta += 1 + + # Flip the rows and join each row into a single string. + rows = [pad.join(x) for x in rows[::-1]] + + # Pad the beginning of the rows so they line up properly. + for y in range(num_rings - 1): + rows[y] = (num_rings - 1 - y)*pad + rows[y] + rows[-1 - y] = (num_rings - 1 - y)*pad + rows[-1 - y] + + for y in range(num_rings % 2, num_rings, 2): + rows[middle + y] = pad + rows[middle + y] + if y != 0: + rows[middle - y] = pad + rows[middle - y] + + # Join the rows together and return the string. + return '\n'.join(rows) From 17c96c497c33fd19309d4ec1f7dee52d7bd83b3a Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 10 May 2016 10:37:07 -0500 Subject: [PATCH 514/650] Add xyz default for openmc.stats.Point constructor --- openmc/stats/multivariate.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openmc/stats/multivariate.py b/openmc/stats/multivariate.py index 4ce34a0712..e4eadd7aa4 100644 --- a/openmc/stats/multivariate.py +++ b/openmc/stats/multivariate.py @@ -328,8 +328,8 @@ class Point(Spatial): Parameters ---------- - xyz : Iterable of float - Cartesian coordinates of location + xyz : Iterable of float, optional + Cartesian coordinates of location. Defaults to (0., 0., 0.). Attributes ---------- @@ -338,7 +338,7 @@ class Point(Spatial): """ - def __init__(self, xyz): + def __init__(self, xyz=(0., 0., 0.)): super(Point, self).__init__() self.xyz = xyz From 8ff23e9f9808a0efbf990be4bb2355dd111f2220 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 10 May 2016 10:37:40 -0500 Subject: [PATCH 515/650] Clarify documentation regarding cell rotation --- docs/source/usersguide/input.rst | 14 ++++++++++++++ openmc/cell.py | 21 +++++++++++++++++---- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 775407d70b..8493ac4805 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -1033,6 +1033,20 @@ Each ```` element can have the following attributes or sub-elements: + The rotation applied is an intrinsic rotation whose Tait-Bryan angles are + given as those specified about the x, y, and z axes respectively. That is to + say, if the angles are :math:`(\phi, \theta, \psi)`, then the rotation + matrix applied is :math:`R_z(\psi) R_y(\theta) R_x(\phi)` or + + .. math:: + + \left [ \begin{array}{ccc} \cos\theta \cos\psi & -\cos\theta \sin\psi + + \sin\phi \sin\theta \cos\psi & \sin\phi \sin\psi + \cos\phi \sin\theta + \cos\psi \\ \cos\theta \sin\psi & \cos\phi \cos\psi + \sin\phi \sin\theta + \sin\psi & -\sin\phi \cos\psi + \cos\phi \sin\theta \sin\psi \\ + -\sin\theta & \sin\phi \cos\theta & \cos\phi \cos\theta \end{array} + \right ] + *Default*: None :translation: diff --git a/openmc/cell.py b/openmc/cell.py index 37828d8fce..806f3f32ff 100644 --- a/openmc/cell.py +++ b/openmc/cell.py @@ -23,7 +23,7 @@ def reset_auto_cell_id(): class Cell(object): - """A region of space defined as the intersection of half-space created by + r"""A region of space defined as the intersection of half-space created by quadric surfaces. Parameters @@ -48,11 +48,24 @@ class Cell(object): Indicates what the region of space is filled with region : openmc.Region Region of space that is assigned to the cell. - rotation : numpy.ndarray + rotation : Iterable of float If the cell is filled with a universe, this array specifies the angles in degrees about the x, y, and z axes that the filled universe should be - rotated. - translation : numpy.ndarray + rotated. The rotation applied is an intrinsic rotation with specified + Tait-Bryan angles. That is to say, if the angles are :math:`(\phi, + \theta, \psi)`, then the rotation matrix applied is :math:`R_z(\psi) + R_y(\theta) R_x(\phi)` or + + .. math:: + + \left [ \begin{array}{ccc} \cos\theta \cos\psi & -\cos\theta \sin\psi + + \sin\phi \sin\theta \cos\psi & \sin\phi \sin\psi + \cos\phi + \sin\theta \cos\psi \\ \cos\theta \sin\psi & \cos\phi \cos\psi + + \sin\phi \sin\theta \sin\psi & -\sin\phi \cos\psi + \cos\phi + \sin\theta \sin\psi \\ -\sin\theta & \sin\phi \cos\theta & \cos\phi + \cos\theta \end{array} \right ] + + translation : Iterable of float If the cell is filled with a universe, this array specifies a vector that is used to translate (shift) the universe. offsets : ndarray From 962d592d2e262206dcde01207100e14cf26a91b0 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 10 May 2016 11:21:48 -0500 Subject: [PATCH 516/650] Restrict the Cell.rotation property to cells filled with a Universe --- openmc/cell.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openmc/cell.py b/openmc/cell.py index 806f3f32ff..8ddae63716 100644 --- a/openmc/cell.py +++ b/openmc/cell.py @@ -243,6 +243,10 @@ class Cell(object): @rotation.setter def rotation(self, rotation): + if not isinstance(self.fill, openmc.Universe): + raise RuntimeError('Cell rotation can only be applied if the cell ' + 'is filled with a Universe') + cv.check_type('cell rotation', rotation, Iterable, Real) cv.check_length('cell rotation', rotation, 3) self._rotation = rotation From 10f498177e5528001b9e4b8a3c93b4ad0c5533d3 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 10 May 2016 11:55:38 -0500 Subject: [PATCH 517/650] Allow rotation to be set without fill assigned when reading summary file --- openmc/summary.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/summary.py b/openmc/summary.py index 34c51bc51e..c9aa08f152 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -267,7 +267,7 @@ class Summary(object): rotation = \ self._f['geometry/cells'][key]['rotation'][...] rotation = np.asarray(rotation, dtype=np.int) - cell.rotation = rotation + cell._rotation = rotation # Store Cell fill information for after Universe/Lattice creation self._cell_fills[index] = (fill_type, fill) From 03828594fbceaa4f00edc144d5d4bb39608033d8 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Tue, 10 May 2016 21:04:00 -0400 Subject: [PATCH 518/650] Reverted to dropping scores from MGXS Pandas DF --- .../pythonapi/examples/mgxs-part-i.ipynb | 35 +- .../pythonapi/examples/mgxs-part-iii.ipynb | 78 +- openmc/mgxs/mgxs.py | 15 +- .../results_true.dat | 98 +- .../results_true.dat | 10 +- .../results_true.dat | 242 +- .../results_true.dat | 3942 ++++++++--------- 7 files changed, 2212 insertions(+), 2208 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index a97a0c02eb..e4c976718f 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -508,10 +508,11 @@ " 888\n", "\n", " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.org/en/latest/license.html\n", + " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: df280b60eb1c6d7b7f842e05ede734a4883a0fc8\n", - " Date/Time: 2016-05-05 13:43:54\n", + " Git SHA1: 502482dcf630ee6e290c15b8535e6e850a351c88\n", + " Date/Time: 2016-05-10 20:52:19\n", + " MPI Processes: 1\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -596,20 +597,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.7300E-01 seconds\n", - " Reading cross sections = 1.7600E-01 seconds\n", - " Total time in simulation = 2.1188E+01 seconds\n", - " Time in transport only = 2.1173E+01 seconds\n", - " Time in inactive batches = 2.6880E+00 seconds\n", - " Time in active batches = 1.8500E+01 seconds\n", - " Time synchronizing fission bank = 3.0000E-03 seconds\n", - " Sampling source sites = 2.0000E-03 seconds\n", + " Total time for initialization = 5.3200E-01 seconds\n", + " Reading cross sections = 1.3300E-01 seconds\n", + " Total time in simulation = 2.3438E+01 seconds\n", + " Time in transport only = 2.3419E+01 seconds\n", + " Time in inactive batches = 2.9490E+00 seconds\n", + " Time in active batches = 2.0489E+01 seconds\n", + " Time synchronizing fission bank = 6.0000E-03 seconds\n", + " Sampling source sites = 3.0000E-03 seconds\n", " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 2.1776E+01 seconds\n", - " Calculation Rate (inactive) = 9300.60 neutrons/second\n", - " Calculation Rate (active) = 5405.41 neutrons/second\n", + " Total time elapsed = 2.3985E+01 seconds\n", + " Calculation Rate (inactive) = 8477.45 neutrons/second\n", + " Calculation Rate (active) = 4880.67 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1120,7 +1121,7 @@ " 6.250000e-07\n", " total\n", " (((absorption / flux) / (total / flux)) + ((sc...\n", - " 1.0\n", + " 1\n", " 0.007763\n", " \n", " \n", @@ -1130,7 +1131,7 @@ " 2.000000e+01\n", " total\n", " (((absorption / flux) / (total / flux)) + ((sc...\n", - " 1.0\n", + " 1\n", " 0.003739\n", " \n", " \n", @@ -1177,7 +1178,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.6" + "version": "2.7.11" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index 21aae7e404..b807ab4a9c 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -32,7 +32,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.1+1178.ga40c9ec-py2.7-linux-x86_64.egg/matplotlib/__init__.py:1362: UserWarning: This call to matplotlib.use() has no effect\n", + "/home/wboyd/anaconda2/lib/python2.7/site-packages/matplotlib/__init__.py:1350: UserWarning: This call to matplotlib.use() has no effect\n", "because the backend has already been chosen;\n", "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", "or matplotlib.backends is imported for the first time.\n", @@ -459,7 +459,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAWFSURB\nVGje7Zs7cttADIZ9CSvXcrP0iCxUqbBc8Ag6xR6BhV2EvYvwFD4CCx1ABT1jMdgndpegRQnOrCbj\npPlGESISC4A/gd27e8H583CX3b4+iKJrRHkS4vkghMPBonRYWGwtfgD2YN+dRDUOoh6lACw0Noi9\nw2fESuEoAR/uVuMolX039oXGT7F3eFL2iEfhUX1f4cPdL/ishs+68ai+udE4xPhexbjX2FfjGNoP\nj/DPNX4Tsd+EODr8FvsVdf1Hd9P2VvCi4+s/aXvrf+upAD+1/9GV1mkOH5X9vV6THtfvACslcaUC\nbESL61drBPtdI8SrFMWrELsXCkuFDYW75gbiP7d9Cf7bAYI/aCwUShrBvh30+lWQkzVgZ/HD4Oix\nNCgcQpJ3BxU/Ln91elKoM5VEE38QtJ+Yv6cQ9xjKNYayyl8TypP8DfJnQ2H/b/N3ye9P83cT33SQ\nv/sQh9gV7zZ/0dNj5HQaC5vVzv9+/WFN2w8KVaZ2BwL1+pv4g0x1QRfjq0dB4Q3kT277oP6VNL6g\nKxNU9a8zK+WLbi/WwpdihbboKqyxFOulHMj6v4W/AXbmUeAxrv9J/CqEBXaRKsXaodD4nsYvkT/G\n6H1D4SR/iPy1Roj9JsQ5e18/7EUHv1+Fvx/Xj5V9Ugb5K8TW4TZEEdcvoz/up0VTe9qsVIppKVX6\na7D6y9ZvwEKjrtQxPtv6fXII9vCxKOGaIeAIfEF8IvAG8ie3vRK9rRQl+PPpSctbhfpTUCpviH+k\nxsZgpT91+snoX1l49KK3iUQvICRy5aUw6l8leoVwoo3Uv1rKreF/UFLY6d9QP4L9Wf2r7EP9GOSf\ncsjZ56f60kz+XmVPXv+RuP49ff0T/53Rv6n/7m2lvXT9Wqd/VUz8hvh5M/ED6ILmt4mfHYZSaePn\nTWpsf/SvqV9O6dLYYClLEetnoH/LBLFoBvrX189uTv8++kot5vTvQD4/9jP690g9P/4z/bvo/XVG\n/xYoZZx+8fr3MxAtsf7tUOkG2JqsTtCIpgCt/qX1226KqZS7gfzJbe+c9jLrtIZ8lXD+s4umlW6A\nKIVrlML2/cXjgPFjlJqIRC+Fj0bVJe+vSh56pSdR6YkQ1ygF10Wqf0FeLta/iKn9Mv1L24ti2e+7\nW4n1b3T/W+L+t9H9T/SvVboUmqJJon1/hZq8LnzRDlDrX1u0xRT1+6vEpomMmyYkqi95vIH8yW1P\nN+122KkLcNLKi/WTF01z/cNASrWE/l3ev6T17zX909z9X27/euK/Rf3zWP+Waf9eEv37KkWJ+rfD\nl6ZglNDa+cEBhwYDvkoNP/rX69814NaI3imq0l7OYDy/qSdDGwr7r+Y3VbzoKZr6XX2lfxfOb87q\nXzr+b1j/Xlp/nP6dn98McdH7cn7zjPObKsYWS3Eb9w8n85smHtqQuPuZ30T2dlIT6F9xFl+n8xsl\negL9a4c2KRr9W4rp/GYqumiM9Nec/j2v/yj9u1h//hv9e93vc++f63/u+rPjL3f+5Lbn1j9m/eXW\nf+7zh/v8+2b9e/Hzn6s/uPqHrb8g71n6L3f+5Lbnvn8w33+4718/+5d47//c/gO7/5E7/nPbc/tv\n3P4fs//I7X9y+6/fqH+v6j9z+9/c/ju3/8+eP+TOn9z23PkXc/7Gnf9x5483q38Xzn+582fu/Js9\nfy8kb/6fO39y23P3n3S8/S/c/Tfc/T83uX/pgv1XE/9duP+Lu/+Mvf8td/znti8kb/8ld/9nx9t/\nSjw/Ltr/yt1/+337f6/bf0zoB3nJ/ucVc/81d/83e/957vzJbc89/8A8f8E9/5HE78XnT/4H/cs5\nf8Q9/8Q9f8U+/5U7f3Lbc88fdrzzjyvm+cuf/Uu887/c88fs88954/8vO4SjPC+2QRIAAAAldEVY\ndGRhdGU6Y3JlYXRlADIwMTYtMDUtMDlUMTM6Mzk6MTEtMDQ6MDCdrTk4AAAAJXRFWHRkYXRlOm1v\nZGlmeQAyMDE2LTA1LTA5VDEzOjM5OjExLTA0OjAw7PCBhAAAAABJRU5ErkJggg==\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -725,8 +725,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 7b20f8ad4aa9e6f02f8b1d51e002f9f56ba7aa15\n", - " Date/Time: 2016-05-09 13:39:11\n", + " Git SHA1: 502482dcf630ee6e290c15b8535e6e850a351c88\n", + " Date/Time: 2016-05-10 20:53:35\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -813,20 +813,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.0300E-01 seconds\n", - " Reading cross sections = 1.0400E-01 seconds\n", - " Total time in simulation = 4.8096E+01 seconds\n", - " Time in transport only = 4.8074E+01 seconds\n", - " Time in inactive batches = 4.1080E+00 seconds\n", - " Time in active batches = 4.3988E+01 seconds\n", - " Time synchronizing fission bank = 4.0000E-03 seconds\n", - " Sampling source sites = 2.0000E-03 seconds\n", - " SEND/RECV source sites = 0.0000E+00 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for initialization = 5.8400E-01 seconds\n", + " Reading cross sections = 1.4100E-01 seconds\n", + " Total time in simulation = 7.7003E+01 seconds\n", + " Time in transport only = 7.6958E+01 seconds\n", + " Time in inactive batches = 6.4820E+00 seconds\n", + " Time in active batches = 7.0521E+01 seconds\n", + " Time synchronizing fission bank = 8.0000E-03 seconds\n", + " Sampling source sites = 6.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Time accumulating tallies = 6.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 4.8613E+01 seconds\n", - " Calculation Rate (inactive) = 6085.69 neutrons/second\n", - " Calculation Rate (active) = 2273.35 neutrons/second\n", + " Total time elapsed = 7.7616E+01 seconds\n", + " Calculation Rate (inactive) = 3856.83 neutrons/second\n", + " Calculation Rate (active) = 1418.02 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -952,7 +952,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python2.7/dist-packages/openmc-0.7.1-py2.7.egg/openmc/tallies.py:1996: RuntimeWarning: invalid value encountered in true_divide\n" + "/home/wboyd/Documents/NSE-CRPG-Codes/openmc/openmc/tallies.py:1996: RuntimeWarning: invalid value encountered in true_divide\n", + " self_rel_err = data['self']['std. dev.'] / data['self']['mean']\n" ] }, { @@ -966,7 +967,6 @@ " cell\n", " group in\n", " nuclide\n", - " score\n", " mean\n", " std. dev.\n", " \n", @@ -977,7 +977,6 @@ " 10000\n", " 1\n", " U-235\n", - " (nu-fission / flux)\n", " 8.055246e-03\n", " 2.857567e-05\n", " \n", @@ -986,7 +985,6 @@ " 10000\n", " 1\n", " U-238\n", - " (nu-fission / flux)\n", " 7.339215e-03\n", " 4.349466e-05\n", " \n", @@ -995,7 +993,6 @@ " 10000\n", " 1\n", " O-16\n", - " (nu-fission / flux)\n", " 0.000000e+00\n", " 0.000000e+00\n", " \n", @@ -1004,7 +1001,6 @@ " 10000\n", " 2\n", " U-235\n", - " (nu-fission / flux)\n", " 3.615565e-01\n", " 2.050486e-03\n", " \n", @@ -1013,7 +1009,6 @@ " 10000\n", " 2\n", " U-238\n", - " (nu-fission / flux)\n", " 6.742638e-07\n", " 3.795256e-09\n", " \n", @@ -1022,7 +1017,6 @@ " 10000\n", " 2\n", " O-16\n", - " (nu-fission / flux)\n", " 0.000000e+00\n", " 0.000000e+00\n", " \n", @@ -1031,13 +1025,13 @@ "
" ], "text/plain": [ - " cell group in nuclide score mean std. dev.\n", - "3 10000 1 U-235 (nu-fission / flux) 8.06e-03 2.86e-05\n", - "4 10000 1 U-238 (nu-fission / flux) 7.34e-03 4.35e-05\n", - "5 10000 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00\n", - "0 10000 2 U-235 (nu-fission / flux) 3.62e-01 2.05e-03\n", - "1 10000 2 U-238 (nu-fission / flux) 6.74e-07 3.80e-09\n", - "2 10000 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00" + " cell group in nuclide mean std. dev.\n", + "3 10000 1 U-235 8.055246e-03 2.857567e-05\n", + "4 10000 1 U-238 7.339215e-03 4.349466e-05\n", + "5 10000 1 O-16 0.000000e+00 0.000000e+00\n", + "0 10000 2 U-235 3.615565e-01 2.050486e-03\n", + "1 10000 2 U-238 6.742638e-07 3.795256e-09\n", + "2 10000 2 O-16 0.000000e+00 0.000000e+00" ] }, "execution_count": 30, @@ -1186,7 +1180,6 @@ " cell\n", " group in\n", " nuclide\n", - " score\n", " mean\n", " std. dev.\n", " \n", @@ -1197,7 +1190,6 @@ " 10000\n", " 1\n", " U-235\n", - " (nu-fission / flux)\n", " 0.074860\n", " 0.000303\n", " \n", @@ -1206,7 +1198,6 @@ " 10000\n", " 1\n", " U-238\n", - " (nu-fission / flux)\n", " 0.005952\n", " 0.000035\n", " \n", @@ -1215,7 +1206,6 @@ " 10000\n", " 1\n", " O-16\n", - " (nu-fission / flux)\n", " 0.000000\n", " 0.000000\n", " \n", @@ -1224,10 +1214,10 @@ "
" ], "text/plain": [ - " cell group in nuclide score mean std. dev.\n", - "0 10000 1 U-235 (nu-fission / flux) 7.49e-02 3.03e-04\n", - "1 10000 1 U-238 (nu-fission / flux) 5.95e-03 3.52e-05\n", - "2 10000 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00" + " cell group in nuclide mean std. dev.\n", + "0 10000 1 U-235 0.074860 0.000303\n", + "1 10000 1 U-238 0.005952 0.000035\n", + "2 10000 1 O-16 0.000000 0.000000" ] }, "execution_count": 36, @@ -1568,7 +1558,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 43, @@ -1577,9 +1567,9 @@ }, { "data": { - "image/png": "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\nfHTc1tr58WfQa96JP1u/NcN5cd/L4s/xL5/Rv3hAT+D6cDWAztRFRHJFRV1EJEdU1EVEckRFXUQk\nR1TURURyREVdRCRHVNRFRHJERV1EJEdKMvhojM0uunzkcw+F63hiUTwIh1fiQQh7984waOgrcciB\n5z4Rxjz3oxFhzMruOxddfsw18cAiOy4MYeQv4+22NfF6/MF4H1uGQ3WrnR7GVJNhQoISGzzu8UaX\n7c2r4f1taXxc1uwQ7/MNGSbk6Lowbmv/LfFkNDW3bQ5j7Ka4P7ufsTqM2fHUd+IVZdiuDRvi1bBj\nvJ9rbo7bOqhqXhjz2rg3iy7vRzdmhmtJ6ExdRCRHVNRFRHJERV1EJEdU1EVEckRFXUQkR1TURURy\nREVdRCRHVNRFRHKkRYOPzGwRsBbYCmxx91FZ7jdw+pKiy79/wsXxSvrFA1Gqp8QDAy6b9O0wZuKB\nk8OY517M8Pw4Mp5tpS/FByHYyLgd3xi3wznxrC7+vbitDaPjprp0jY/VMn4axmTYqlbT3NxeuKbx\nmaAeqDk6XsFJ8b6qGZJhVqOX471lb8Q5UPONDHk9N27LH4zbsqPitro9sSVez8p4H+7aK8N2BZMR\nAXBi3NZUj2d06rfm5aLL+1ZnL9WtMaL0KHdf2QrrESk3ym2pOLr8IiKSIy0t6g7cb2Zzzezc1uiQ\nSJlQbktFaunll8PdfYmZ7QbcZ2bPufus1uiYSIkpt6UitehM3d2XpL9XANOA971tZma1ZuZ1Py1p\nTySLwnwzs9rmrEO5LeUoS243u6ib2U5m1q3ub+BjwPz6ce5e6+5W99Pc9kSyKsw3d69t6v2V21Ku\nsuR2Sy6/9AammVndem529z+3YH0i5UK5LRWr2UXd3RcCw1qxLyJlQbktlczc2/dSoJk5zxb/wP7W\nHvGMI8ftelcYs4aaMGYDXcKYudcdHsace/7VYcyUp84PY7rss6ro8vVbdw3XYVPDELY9HF8teOyO\nD4YxY558Koz58rB4YNE+vBLGXPLqD8MY+nWmVJdCzMyZ13hu/3zYWeE6DvVHwpjNdApjDtjyfBjT\n9TvxgKCHrxgexnTweD2jhz8dxjz2ZJxvWzyuDR/6VjzT0NrL4/PZf1bvH8Z0IJ716REODWPOf+q3\nRZeP3QlmDqzKlNv6nLqISI6oqIuI5IiKuohIjqioi4jkiIq6iEiOqKiLiOSIirqISI6oqIuI5Ehr\n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\njRmGBmRpq3P0mAf6Z1hPpwz96VwVb9eeWfqc5WGU5XhtznDcKZY3sP/+HZg5M8NqKNXgI5E2VNrB\nRyJtJ0tut3tRf18HzLxUD8LmUp/bRyX2uVAl9l99bntt3V9dUxcRyREVdRGRHCmHop7l227Kjfrc\nPiqxz4Uqsf/qc9tr0/6W/Jq6iIi0nnI4UxcRkVaioi4ikiMlLepmdqyZPW9mL5rZhFL2JSszW2Rm\nT5vZPDOLv9W/BMxsipmtMLP5Bbf1MLP7zOyF9PcupexjoUb6W2tmS9L9PM/MPlHKPjaF8rptVFpe\nQ2lyu2RF3cyqgeuA44BBwHgzG1Sq/jTRUe4+3N0zTI1SElOBY+vdNgF4wN0HAg+k/5eLqby/vwA/\nTffzcHe/p5371CzK6zY1lcrKayhBbpfyTH008KK7L3T3TcCtwLgS9ic33H0WsKrezeOAG9K/bwDi\nefzaSSP9rVTK6zZSaXkNpcntUhb1PYDXCv5fnN5W7hy438zmmtm5pe5ME/R296Xp38uA3qXsTEZf\nM7On0pewZfWyugjldfuqxLyGNsxtvVHadIe7+3CSl9fnm9mHS92hpvLkc6zl/lnWXwD9Sb7ebSnw\n49J2J/eU1+2nTXO7lEV9CWz39Yd7preVNXdfkv5eAUwjebldCZabWR+A9PeKEvenKHdf7u5b3X0b\n8CsqZz8rr9tXReU1tH1ul7KozwEGmtm+ZtYJOB2YUcL+hMxsJzPrVvc38DFgfvF7lY0ZwJnp32cC\n00vYl1DdAzV1EpWzn5XX7aui8hraPrdL8n3qAO6+xcy+CtwLVANT3H1BqfqTUW9gmplBsu9udvc/\nl7ZL72dmtwBHAr3MbDEwEZgM3GZmZwOvAKeVrofba6S/R5rZcJKX04uA80rWwSZQXredSstrKE1u\n62sCRERyRG+UiojkiIq6iEiOqKiLiOSIirqISI6oqIuI5IiKuohIjqioi4jkiIq6iEiO/C/zDkyC\nZclMUgAAAABJRU5ErkJggg==\n", + "image/png": "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\n2ajR7Q6wgAAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1619,7 +1609,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.6" + "version": "2.7.11" } }, "nbformat": 4, diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 1479f72416..dc3d0d127b 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1418,6 +1418,9 @@ class MGXS(object): else: df = self.xs_tally.get_pandas_dataframe(summary=summary) + # Remove the score column since it is homogeneous and redundant + df = df.drop('score', axis=1) + # Override energy groups bounds with indices all_groups = np.arange(self.num_groups, 0, -1, dtype=np.int) all_groups = np.repeat(all_groups, self.num_nuclides) @@ -2228,13 +2231,23 @@ class ScatterMatrixXS(MGXS): df = super(ScatterMatrixXS, self).get_pandas_dataframe( groups, nuclides, xs_type, summary) + # Add a moment column to dataframe + moments = np.array(['P{}'.format(i) for i in range(self.legendre_order+1)]) + moments = np.tile(moments, df.shape[0] / moments.size) + df['moment'] = moments + + # Place the moment column before the mean column + mean_index = df.columns.get_loc('mean') + columns = df.columns.tolist() + df = df[columns[:mean_index] + ['moment'] + columns[mean_index:]] + # Select rows corresponding to requested scattering moment if moment != 'all': cv.check_type('moment', moment, Integral) cv.check_greater_than('moment', moment, 0, equality=True) cv.check_less_than( 'moment', moment, self.legendre_order, equality=True) - df = df[df['score'] == str(self.xs_tally.scores[moment])] + df = df.iloc[moment:self.legendre_order:] return df diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index 7e8a496737..2afa47d6f6 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -1,49 +1,49 @@ - material group in nuclide score mean std. dev. -0 1 1 total ((total - scatter-1) / flux) 4.12e-01 2.36e-02 material group in nuclide score mean std. dev. -0 1 1 total (nu-fission / flux) 7.64e-02 3.69e-03 material group in group out nuclide score mean std. dev. -0 1 1 1 total ((nu-scatter-0 - scatter-1) / flux) 3.46e-01 2.15e-02 material group out nuclide score mean std. dev. -0 1 1 total nu-fission 1.00e+00 5.53e-02 material group in nuclide score mean std. dev. -0 2 1 total ((total - scatter-1) / flux) 2.41e-01 8.41e-03 material group in nuclide score mean std. dev. -0 2 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -0 2 1 1 total ((nu-scatter-0 - scatter-1) / flux) 2.41e-01 8.41e-03 material group out nuclide score mean std. dev. -0 2 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -0 3 1 total ((total - scatter-1) / flux) 4.00e-01 3.47e-02 material group in nuclide score mean std. dev. -0 3 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -0 3 1 1 total ((nu-scatter-0 - scatter-1) / flux) 3.93e-01 3.36e-02 material group out nuclide score mean std. dev. -0 3 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -0 4 1 total ((total - scatter-1) / flux) 3.77e-01 7.29e-02 material group in nuclide score mean std. dev. -0 4 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -0 4 1 1 total ((nu-scatter-0 - scatter-1) / flux) 3.71e-01 7.12e-02 material group out nuclide score mean std. dev. -0 4 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -0 5 1 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -0 5 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -0 5 1 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -0 5 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -0 6 1 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -0 6 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -0 6 1 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -0 6 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -0 7 1 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -0 7 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -0 7 1 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -0 7 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -0 8 1 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -0 8 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -0 8 1 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -0 8 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -0 9 1 total ((total - scatter-1) / flux) 6.01e-01 7.49e-01 material group in nuclide score mean std. dev. -0 9 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -0 9 1 1 total ((nu-scatter-0 - scatter-1) / flux) 6.01e-01 7.49e-01 material group out nuclide score mean std. dev. -0 9 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -0 10 1 total ((total - scatter-1) / flux) 2.36e-01 6.14e-01 material group in nuclide score mean std. dev. -0 10 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -0 10 1 1 total ((nu-scatter-0 - scatter-1) / flux) 2.36e-01 6.14e-01 material group out nuclide score mean std. dev. -0 10 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -0 11 1 total ((total - scatter-1) / flux) 5.10e-01 7.42e-01 material group in nuclide score mean std. dev. -0 11 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -0 11 1 1 total ((nu-scatter-0 - scatter-1) / flux) 4.92e-01 7.16e-01 material group out nuclide score mean std. dev. -0 11 1 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -0 12 1 total ((total - scatter-1) / flux) 7.38e-01 8.26e-01 material group in nuclide score mean std. dev. -0 12 1 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -0 12 1 1 total ((nu-scatter-0 - scatter-1) / flux) 7.23e-01 8.08e-01 material group out nuclide score mean std. dev. -0 12 1 total nu-fission 0.00e+00 0.00e+00 \ No newline at end of file + material group in nuclide mean std. dev. +0 1 1 total 0.412084 0.02359 material group in nuclide mean std. dev. +0 1 1 total 0.076425 0.003691 material group in group out nuclide moment mean std. dev. moment +0 1 1 1 total P0 0.345643 0.021487 P0 material group out nuclide mean std. dev. +0 1 1 total 1 0.055333 material group in nuclide mean std. dev. +0 2 1 total 0.241262 0.00841 material group in nuclide mean std. dev. +0 2 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 2 1 1 total P0 0.241262 0.00841 P0 material group out nuclide mean std. dev. +0 2 1 total 0 0 material group in nuclide mean std. dev. +0 3 1 total 0.400028 0.034667 material group in nuclide mean std. dev. +0 3 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 3 1 1 total P0 0.393462 0.033646 P0 material group out nuclide mean std. dev. +0 3 1 total 0 0 material group in nuclide mean std. dev. +0 4 1 total 0.377402 0.072937 material group in nuclide mean std. dev. +0 4 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 4 1 1 total P0 0.371473 0.071226 P0 material group out nuclide mean std. dev. +0 4 1 total 0 0 material group in nuclide mean std. dev. +0 5 1 total 0 0 material group in nuclide mean std. dev. +0 5 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 5 1 1 total P0 0 0 P0 material group out nuclide mean std. dev. +0 5 1 total 0 0 material group in nuclide mean std. dev. +0 6 1 total 0 0 material group in nuclide mean std. dev. +0 6 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 6 1 1 total P0 0 0 P0 material group out nuclide mean std. dev. +0 6 1 total 0 0 material group in nuclide mean std. dev. +0 7 1 total 0 0 material group in nuclide mean std. dev. +0 7 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 7 1 1 total P0 0 0 P0 material group out nuclide mean std. dev. +0 7 1 total 0 0 material group in nuclide mean std. dev. +0 8 1 total 0 0 material group in nuclide mean std. dev. +0 8 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 8 1 1 total P0 0 0 P0 material group out nuclide mean std. dev. +0 8 1 total 0 0 material group in nuclide mean std. dev. +0 9 1 total 0.600536 0.748875 material group in nuclide mean std. dev. +0 9 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 9 1 1 total P0 0.600536 0.748875 P0 material group out nuclide mean std. dev. +0 9 1 total 0 0 material group in nuclide mean std. dev. +0 10 1 total 0.235515 0.613974 material group in nuclide mean std. dev. +0 10 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 10 1 1 total P0 0.235515 0.613974 P0 material group out nuclide mean std. dev. +0 10 1 total 0 0 material group in nuclide mean std. dev. +0 11 1 total 0.510145 0.741941 material group in nuclide mean std. dev. +0 11 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 11 1 1 total P0 0.491857 0.715554 P0 material group out nuclide mean std. dev. +0 11 1 total 0 0 material group in nuclide mean std. dev. +0 12 1 total 0.73836 0.825631 material group in nuclide mean std. dev. +0 12 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 12 1 1 total P0 0.723265 0.808231 P0 material group out nuclide mean std. dev. +0 12 1 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index a23417d920..4daa6cd97e 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,5 +1,5 @@ - avg(distribcell) group in nuclide score mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total ((total - scatter-1) / flux) 7.19e-01 5.21e-01 avg(distribcell) group in nuclide score mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total (nu-fission / flux) 0.00e+00 0.00e+00 avg(distribcell) group in group out nuclide score mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total ((nu-scatter-0 - scatter-1) / flux) 6.95e-01 5.11e-01 avg(distribcell) group out nuclide score mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total nu-fission 0.00e+00 0.00e+00 \ No newline at end of file + avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.718919 0.520644 avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 avg(distribcell) group in group out nuclide moment mean std. dev. moment +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P0 0.695166 0.510606 P0 avg(distribcell) group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index c279653e5c..a4b08dd4aa 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -1,121 +1,121 @@ - material group in nuclide score mean std. dev. -1 1 1 total ((total - scatter-1) / flux) 3.73e-01 2.43e-02 -0 1 2 total ((total - scatter-1) / flux) 8.62e-01 3.23e-02 material group in nuclide score mean std. dev. -1 1 1 total (nu-fission / flux) 2.18e-02 1.18e-03 -0 1 2 total (nu-fission / flux) 7.14e-01 4.06e-02 material group in group out nuclide score mean std. dev. -3 1 1 1 total ((nu-scatter-0 - scatter-1) / flux) 3.37e-01 2.30e-02 -2 1 1 2 total ((nu-scatter-0 - scatter-1) / flux) 1.56e-03 5.10e-04 -1 1 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 1 2 2 total ((nu-scatter-0 - scatter-1) / flux) 4.22e-01 2.16e-02 material group out nuclide score mean std. dev. -1 1 1 total nu-fission 1.00e+00 5.53e-02 -0 1 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 2 1 total ((total - scatter-1) / flux) 2.37e-01 8.18e-03 -0 2 2 total ((total - scatter-1) / flux) 2.86e-01 4.88e-02 material group in nuclide score mean std. dev. -1 2 1 total (nu-fission / flux) 0.00e+00 0.00e+00 -0 2 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -3 2 1 1 total ((nu-scatter-0 - scatter-1) / flux) 2.37e-01 8.18e-03 -2 2 1 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -1 2 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 2 2 2 total ((nu-scatter-0 - scatter-1) / flux) 2.86e-01 4.88e-02 material group out nuclide score mean std. dev. -1 2 1 total nu-fission 0.00e+00 0.00e+00 -0 2 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 3 1 total ((total - scatter-1) / flux) 2.87e-01 2.74e-02 -0 3 2 total ((total - scatter-1) / flux) 1.42e+00 2.65e-01 material group in nuclide score mean std. dev. -1 3 1 total (nu-fission / flux) 0.00e+00 0.00e+00 -0 3 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -3 3 1 1 total ((nu-scatter-0 - scatter-1) / flux) 2.60e-01 2.61e-02 -2 3 1 2 total ((nu-scatter-0 - scatter-1) / flux) 2.62e-02 1.66e-03 -1 3 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 3 2 2 total ((nu-scatter-0 - scatter-1) / flux) 1.36e+00 2.59e-01 material group out nuclide score mean std. dev. -1 3 1 total nu-fission 0.00e+00 0.00e+00 -0 3 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 4 1 total ((total - scatter-1) / flux) 2.42e-01 6.10e-02 -0 4 2 total ((total - scatter-1) / flux) 1.25e+00 3.88e-01 material group in nuclide score mean std. dev. -1 4 1 total (nu-fission / flux) 0.00e+00 0.00e+00 -0 4 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -3 4 1 1 total ((nu-scatter-0 - scatter-1) / flux) 2.18e-01 5.86e-02 -2 4 1 2 total ((nu-scatter-0 - scatter-1) / flux) 2.37e-02 3.08e-03 -1 4 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 4 2 2 total ((nu-scatter-0 - scatter-1) / flux) 1.22e+00 3.81e-01 material group out nuclide score mean std. dev. -1 4 1 total nu-fission 0.00e+00 0.00e+00 -0 4 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 5 1 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -0 5 2 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 5 1 total (nu-fission / flux) 0.00e+00 0.00e+00 -0 5 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -3 5 1 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -2 5 1 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -1 5 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 5 2 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -1 5 1 total nu-fission 0.00e+00 0.00e+00 -0 5 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 6 1 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -0 6 2 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 6 1 total (nu-fission / flux) 0.00e+00 0.00e+00 -0 6 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -3 6 1 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -2 6 1 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -1 6 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 6 2 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -1 6 1 total nu-fission 0.00e+00 0.00e+00 -0 6 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 7 1 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -0 7 2 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 7 1 total (nu-fission / flux) 0.00e+00 0.00e+00 -0 7 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -3 7 1 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -2 7 1 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -1 7 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 7 2 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -1 7 1 total nu-fission 0.00e+00 0.00e+00 -0 7 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 8 1 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -0 8 2 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 8 1 total (nu-fission / flux) 0.00e+00 0.00e+00 -0 8 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -3 8 1 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -2 8 1 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -1 8 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 8 2 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -1 8 1 total nu-fission 0.00e+00 0.00e+00 -0 8 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 9 1 total ((total - scatter-1) / flux) 6.01e-01 7.49e-01 -0 9 2 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 9 1 total (nu-fission / flux) 0.00e+00 0.00e+00 -0 9 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -3 9 1 1 total ((nu-scatter-0 - scatter-1) / flux) 6.01e-01 7.49e-01 -2 9 1 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -1 9 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 9 2 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -1 9 1 total nu-fission 0.00e+00 0.00e+00 -0 9 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 10 1 total ((total - scatter-1) / flux) 2.36e-01 6.14e-01 -0 10 2 total ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 10 1 total (nu-fission / flux) 0.00e+00 0.00e+00 -0 10 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -3 10 1 1 total ((nu-scatter-0 - scatter-1) / flux) 2.36e-01 6.14e-01 -2 10 1 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -1 10 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 10 2 2 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -1 10 1 total nu-fission 0.00e+00 0.00e+00 -0 10 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 11 1 total ((total - scatter-1) / flux) 1.86e-01 6.32e-01 -0 11 2 total ((total - scatter-1) / flux) 9.46e-01 1.59e+00 material group in nuclide score mean std. dev. -1 11 1 total (nu-fission / flux) 0.00e+00 0.00e+00 -0 11 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -3 11 1 1 total ((nu-scatter-0 - scatter-1) / flux) 1.54e-01 5.98e-01 -2 11 1 2 total ((nu-scatter-0 - scatter-1) / flux) 3.19e-02 4.51e-02 -1 11 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 11 2 2 total ((nu-scatter-0 - scatter-1) / flux) 9.03e-01 1.53e+00 material group out nuclide score mean std. dev. -1 11 1 total nu-fission 0.00e+00 0.00e+00 -0 11 2 total nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -1 12 1 total ((total - scatter-1) / flux) 2.13e-01 2.71e-01 -0 12 2 total ((total - scatter-1) / flux) 1.39e+00 2.14e+00 material group in nuclide score mean std. dev. -1 12 1 total (nu-fission / flux) 0.00e+00 0.00e+00 -0 12 2 total (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -3 12 1 1 total ((nu-scatter-0 - scatter-1) / flux) 1.86e-01 2.58e-01 -2 12 1 2 total ((nu-scatter-0 - scatter-1) / flux) 2.72e-02 2.96e-02 -1 12 2 1 total ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 12 2 2 total ((nu-scatter-0 - scatter-1) / flux) 1.36e+00 2.09e+00 material group out nuclide score mean std. dev. -1 12 1 total nu-fission 0.00e+00 0.00e+00 -0 12 2 total nu-fission 0.00e+00 0.00e+00 \ No newline at end of file + material group in nuclide mean std. dev. +1 1 1 total 0.372745 0.024269 +0 1 2 total 0.861607 0.032349 material group in nuclide mean std. dev. +1 1 1 total 0.021789 0.001182 +0 1 2 total 0.714077 0.040552 material group in group out nuclide moment mean std. dev. moment +3 1 1 1 total P0 0.337397 0.023039 P0 +2 1 1 2 total P0 0.001559 0.000510 P0 +1 1 2 1 total P0 0.000000 0.000000 P0 +0 1 2 2 total P0 0.422051 0.021617 P0 material group out nuclide mean std. dev. +1 1 1 total 1 0.055333 +0 1 2 total 0 0.000000 material group in nuclide mean std. dev. +1 2 1 total 0.237254 0.008184 +0 2 2 total 0.285930 0.048796 material group in nuclide mean std. dev. +1 2 1 total 0 0 +0 2 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +3 2 1 1 total P0 0.237254 0.008184 P0 +2 2 1 2 total P0 0.000000 0.000000 P0 +1 2 2 1 total P0 0.000000 0.000000 P0 +0 2 2 2 total P0 0.285930 0.048796 P0 material group out nuclide mean std. dev. +1 2 1 total 0 0 +0 2 2 total 0 0 material group in nuclide mean std. dev. +1 3 1 total 0.286906 0.027401 +0 3 2 total 1.418151 0.265308 material group in nuclide mean std. dev. +1 3 1 total 0 0 +0 3 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +3 3 1 1 total P0 0.259937 0.026115 P0 +2 3 1 2 total P0 0.026187 0.001665 P0 +1 3 2 1 total P0 0.000000 0.000000 P0 +0 3 2 2 total P0 1.359521 0.258505 P0 material group out nuclide mean std. dev. +1 3 1 total 0 0 +0 3 2 total 0 0 material group in nuclide mean std. dev. +1 4 1 total 0.242447 0.061031 +0 4 2 total 1.253959 0.388363 material group in nuclide mean std. dev. +1 4 1 total 0 0 +0 4 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +3 4 1 1 total P0 0.217930 0.058565 P0 +2 4 1 2 total P0 0.023662 0.003083 P0 +1 4 2 1 total P0 0.000000 0.000000 P0 +0 4 2 2 total P0 1.215074 0.381025 P0 material group out nuclide mean std. dev. +1 4 1 total 0 0 +0 4 2 total 0 0 material group in nuclide mean std. dev. +1 5 1 total 0 0 +0 5 2 total 0 0 material group in nuclide mean std. dev. +1 5 1 total 0 0 +0 5 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +3 5 1 1 total P0 0 0 P0 +2 5 1 2 total P0 0 0 P0 +1 5 2 1 total P0 0 0 P0 +0 5 2 2 total P0 0 0 P0 material group out nuclide mean std. dev. +1 5 1 total 0 0 +0 5 2 total 0 0 material group in nuclide mean std. dev. +1 6 1 total 0 0 +0 6 2 total 0 0 material group in nuclide mean std. dev. +1 6 1 total 0 0 +0 6 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +3 6 1 1 total P0 0 0 P0 +2 6 1 2 total P0 0 0 P0 +1 6 2 1 total P0 0 0 P0 +0 6 2 2 total P0 0 0 P0 material group out nuclide mean std. dev. +1 6 1 total 0 0 +0 6 2 total 0 0 material group in nuclide mean std. dev. +1 7 1 total 0 0 +0 7 2 total 0 0 material group in nuclide mean std. dev. +1 7 1 total 0 0 +0 7 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +3 7 1 1 total P0 0 0 P0 +2 7 1 2 total P0 0 0 P0 +1 7 2 1 total P0 0 0 P0 +0 7 2 2 total P0 0 0 P0 material group out nuclide mean std. dev. +1 7 1 total 0 0 +0 7 2 total 0 0 material group in nuclide mean std. dev. +1 8 1 total 0 0 +0 8 2 total 0 0 material group in nuclide mean std. dev. +1 8 1 total 0 0 +0 8 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +3 8 1 1 total P0 0 0 P0 +2 8 1 2 total P0 0 0 P0 +1 8 2 1 total P0 0 0 P0 +0 8 2 2 total P0 0 0 P0 material group out nuclide mean std. dev. +1 8 1 total 0 0 +0 8 2 total 0 0 material group in nuclide mean std. dev. +1 9 1 total 0.600536 0.748875 +0 9 2 total 0.000000 0.000000 material group in nuclide mean std. dev. +1 9 1 total 0 0 +0 9 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +3 9 1 1 total P0 0.600536 0.748875 P0 +2 9 1 2 total P0 0.000000 0.000000 P0 +1 9 2 1 total P0 0.000000 0.000000 P0 +0 9 2 2 total P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. +1 9 1 total 0 0 +0 9 2 total 0 0 material group in nuclide mean std. dev. +1 10 1 total 0.235515 0.613974 +0 10 2 total 0.000000 0.000000 material group in nuclide mean std. dev. +1 10 1 total 0 0 +0 10 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +3 10 1 1 total P0 0.235515 0.613974 P0 +2 10 1 2 total P0 0.000000 0.000000 P0 +1 10 2 1 total P0 0.000000 0.000000 P0 +0 10 2 2 total P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. +1 10 1 total 0 0 +0 10 2 total 0 0 material group in nuclide mean std. dev. +1 11 1 total 0.186324 0.632129 +0 11 2 total 0.945986 1.591133 material group in nuclide mean std. dev. +1 11 1 total 0 0 +0 11 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +3 11 1 1 total P0 0.154449 0.597686 P0 +2 11 1 2 total P0 0.031875 0.045078 P0 +1 11 2 1 total P0 0.000000 0.000000 P0 +0 11 2 2 total P0 0.903085 1.532144 P0 material group out nuclide mean std. dev. +1 11 1 total 0 0 +0 11 2 total 0 0 material group in nuclide mean std. dev. +1 12 1 total 0.213292 0.271444 +0 12 2 total 1.390975 2.137346 material group in nuclide mean std. dev. +1 12 1 total 0 0 +0 12 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +3 12 1 1 total P0 0.186052 0.257633 P0 +2 12 1 2 total P0 0.027240 0.029555 P0 +1 12 2 1 total P0 0.000000 0.000000 P0 +0 12 2 2 total P0 1.357118 2.089846 P0 material group out nuclide mean std. dev. +1 12 1 total 0 0 +0 12 2 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index 99582fa7df..aac5ff1ef4 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -1,1971 +1,1971 @@ - material group in nuclide score mean std. dev. -34 1 1 U-234 ((total - scatter-1) / flux) 1.73e-04 1.73e-04 -35 1 1 U-235 ((total - scatter-1) / flux) 1.07e-02 1.89e-03 -36 1 1 U-236 ((total - scatter-1) / flux) 2.39e-03 1.06e-03 -37 1 1 U-238 ((total - scatter-1) / flux) 2.14e-01 1.33e-02 -38 1 1 Np-237 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -39 1 1 Pu-238 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -40 1 1 Pu-239 ((total - scatter-1) / flux) 2.91e-03 6.39e-04 -41 1 1 Pu-240 ((total - scatter-1) / flux) 4.43e-03 8.06e-04 -42 1 1 Pu-241 ((total - scatter-1) / flux) 6.90e-04 3.87e-04 -43 1 1 Pu-242 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -44 1 1 Am-241 ((total - scatter-1) / flux) 1.73e-04 1.73e-04 -45 1 1 Am-242m ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -46 1 1 Am-243 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -47 1 1 Cm-242 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -48 1 1 Cm-243 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -49 1 1 Cm-244 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -50 1 1 Cm-245 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -51 1 1 Mo-95 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -52 1 1 Tc-99 ((total - scatter-1) / flux) 1.73e-04 1.73e-04 -53 1 1 Ru-101 ((total - scatter-1) / flux) 2.38e-04 2.54e-04 -54 1 1 Ru-103 ((total - scatter-1) / flux) 2.26e-06 2.43e-04 -55 1 1 Ag-109 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -56 1 1 Xe-135 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -57 1 1 Cs-133 ((total - scatter-1) / flux) 3.47e-04 2.13e-04 -58 1 1 Nd-143 ((total - scatter-1) / flux) 4.47e-04 2.92e-04 -59 1 1 Nd-145 ((total - scatter-1) / flux) 5.64e-04 2.94e-04 -60 1 1 Sm-147 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -61 1 1 Sm-149 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -62 1 1 Sm-150 ((total - scatter-1) / flux) 4.72e-04 2.39e-04 -63 1 1 Sm-151 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -64 1 1 Sm-152 ((total - scatter-1) / flux) 4.92e-04 3.52e-04 -65 1 1 Eu-153 ((total - scatter-1) / flux) 1.73e-04 1.73e-04 -66 1 1 Gd-155 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -67 1 1 O-16 ((total - scatter-1) / flux) 1.35e-01 9.80e-03 -0 1 2 U-234 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -1 1 2 U-235 ((total - scatter-1) / flux) 2.00e-01 7.78e-03 -2 1 2 U-236 ((total - scatter-1) / flux) 1.50e-03 2.04e-03 -3 1 2 U-238 ((total - scatter-1) / flux) 2.55e-01 2.97e-02 -4 1 2 Np-237 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -5 1 2 Pu-238 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -6 1 2 Pu-239 ((total - scatter-1) / flux) 1.60e-01 1.14e-02 -7 1 2 Pu-240 ((total - scatter-1) / flux) 7.92e-03 3.71e-03 -8 1 2 Pu-241 ((total - scatter-1) / flux) 1.78e-02 3.73e-03 -9 1 2 Pu-242 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -10 1 2 Am-241 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -11 1 2 Am-242m ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -12 1 2 Am-243 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -13 1 2 Cm-242 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -14 1 2 Cm-243 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -15 1 2 Cm-244 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -16 1 2 Cm-245 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -17 1 2 Mo-95 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -18 1 2 Tc-99 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -19 1 2 Ru-101 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -20 1 2 Ru-103 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -21 1 2 Ag-109 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -22 1 2 Xe-135 ((total - scatter-1) / flux) 1.39e-02 3.98e-03 -23 1 2 Cs-133 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -24 1 2 Nd-143 ((total - scatter-1) / flux) 3.96e-03 2.43e-03 -25 1 2 Nd-145 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -26 1 2 Sm-147 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -27 1 2 Sm-149 ((total - scatter-1) / flux) 1.98e-03 1.98e-03 -28 1 2 Sm-150 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -29 1 2 Sm-151 ((total - scatter-1) / flux) 1.98e-03 1.98e-03 -30 1 2 Sm-152 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -31 1 2 Eu-153 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -32 1 2 Gd-155 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -33 1 2 O-16 ((total - scatter-1) / flux) 1.97e-01 1.47e-02 material group in nuclide score mean std. dev. -34 1 1 U-234 (nu-fission / flux) 7.27e-06 4.42e-07 -35 1 1 U-235 (nu-fission / flux) 9.59e-03 5.94e-04 -36 1 1 U-236 (nu-fission / flux) 7.57e-05 7.52e-06 -37 1 1 U-238 (nu-fission / flux) 7.18e-03 6.51e-04 -38 1 1 Np-237 (nu-fission / flux) 1.32e-05 8.04e-07 -39 1 1 Pu-238 (nu-fission / flux) 7.75e-06 3.99e-07 -40 1 1 Pu-239 (nu-fission / flux) 3.81e-03 3.64e-04 -41 1 1 Pu-240 (nu-fission / flux) 6.94e-05 4.73e-06 -42 1 1 Pu-241 (nu-fission / flux) 1.03e-03 9.08e-05 -43 1 1 Pu-242 (nu-fission / flux) 6.00e-06 3.82e-07 -44 1 1 Am-241 (nu-fission / flux) 1.15e-06 8.27e-08 -45 1 1 Am-242m (nu-fission / flux) 1.10e-06 6.16e-08 -46 1 1 Am-243 (nu-fission / flux) 8.32e-07 5.84e-08 -47 1 1 Cm-242 (nu-fission / flux) 5.09e-07 5.26e-08 -48 1 1 Cm-243 (nu-fission / flux) 2.25e-07 1.46e-08 -49 1 1 Cm-244 (nu-fission / flux) 2.99e-07 2.75e-08 -50 1 1 Cm-245 (nu-fission / flux) 3.06e-07 3.06e-08 -51 1 1 Mo-95 (nu-fission / flux) 0.00e+00 0.00e+00 -52 1 1 Tc-99 (nu-fission / flux) 0.00e+00 0.00e+00 -53 1 1 Ru-101 (nu-fission / flux) 0.00e+00 0.00e+00 -54 1 1 Ru-103 (nu-fission / flux) 0.00e+00 0.00e+00 -55 1 1 Ag-109 (nu-fission / flux) 0.00e+00 0.00e+00 -56 1 1 Xe-135 (nu-fission / flux) 0.00e+00 0.00e+00 -57 1 1 Cs-133 (nu-fission / flux) 0.00e+00 0.00e+00 -58 1 1 Nd-143 (nu-fission / flux) 0.00e+00 0.00e+00 -59 1 1 Nd-145 (nu-fission / flux) 0.00e+00 0.00e+00 -60 1 1 Sm-147 (nu-fission / flux) 0.00e+00 0.00e+00 -61 1 1 Sm-149 (nu-fission / flux) 0.00e+00 0.00e+00 -62 1 1 Sm-150 (nu-fission / flux) 0.00e+00 0.00e+00 -63 1 1 Sm-151 (nu-fission / flux) 0.00e+00 0.00e+00 -64 1 1 Sm-152 (nu-fission / flux) 0.00e+00 0.00e+00 -65 1 1 Eu-153 (nu-fission / flux) 0.00e+00 0.00e+00 -66 1 1 Gd-155 (nu-fission / flux) 0.00e+00 0.00e+00 -67 1 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -0 1 2 U-234 (nu-fission / flux) 4.41e-07 2.83e-08 -1 1 2 U-235 (nu-fission / flux) 3.77e-01 2.45e-02 -2 1 2 U-236 (nu-fission / flux) 6.10e-06 3.73e-07 -3 1 2 U-238 (nu-fission / flux) 5.35e-07 3.31e-08 -4 1 2 Np-237 (nu-fission / flux) 2.70e-07 2.10e-08 -5 1 2 Pu-238 (nu-fission / flux) 3.46e-05 2.64e-06 -6 1 2 Pu-239 (nu-fission / flux) 2.89e-01 1.38e-02 -7 1 2 Pu-240 (nu-fission / flux) 4.53e-06 2.54e-07 -8 1 2 Pu-241 (nu-fission / flux) 4.81e-02 2.78e-03 -9 1 2 Pu-242 (nu-fission / flux) 8.72e-08 5.46e-09 -10 1 2 Am-241 (nu-fission / flux) 4.61e-06 2.16e-07 -11 1 2 Am-242m (nu-fission / flux) 1.43e-04 8.44e-06 -12 1 2 Am-243 (nu-fission / flux) 7.88e-08 4.73e-09 -13 1 2 Cm-242 (nu-fission / flux) 9.73e-07 6.14e-08 -14 1 2 Cm-243 (nu-fission / flux) 1.83e-06 1.07e-07 -15 1 2 Cm-244 (nu-fission / flux) 1.58e-07 9.94e-09 -16 1 2 Cm-245 (nu-fission / flux) 1.21e-05 8.81e-07 -17 1 2 Mo-95 (nu-fission / flux) 0.00e+00 0.00e+00 -18 1 2 Tc-99 (nu-fission / flux) 0.00e+00 0.00e+00 -19 1 2 Ru-101 (nu-fission / flux) 0.00e+00 0.00e+00 -20 1 2 Ru-103 (nu-fission / flux) 0.00e+00 0.00e+00 -21 1 2 Ag-109 (nu-fission / flux) 0.00e+00 0.00e+00 -22 1 2 Xe-135 (nu-fission / flux) 0.00e+00 0.00e+00 -23 1 2 Cs-133 (nu-fission / flux) 0.00e+00 0.00e+00 -24 1 2 Nd-143 (nu-fission / flux) 0.00e+00 0.00e+00 -25 1 2 Nd-145 (nu-fission / flux) 0.00e+00 0.00e+00 -26 1 2 Sm-147 (nu-fission / flux) 0.00e+00 0.00e+00 -27 1 2 Sm-149 (nu-fission / flux) 0.00e+00 0.00e+00 -28 1 2 Sm-150 (nu-fission / flux) 0.00e+00 0.00e+00 -29 1 2 Sm-151 (nu-fission / flux) 0.00e+00 0.00e+00 -30 1 2 Sm-152 (nu-fission / flux) 0.00e+00 0.00e+00 -31 1 2 Eu-153 (nu-fission / flux) 0.00e+00 0.00e+00 -32 1 2 Gd-155 (nu-fission / flux) 0.00e+00 0.00e+00 -33 1 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -102 1 1 1 U-234 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -103 1 1 1 U-235 ((nu-scatter-0 - scatter-1) / flux) 3.23e-03 1.14e-03 -104 1 1 1 U-236 ((nu-scatter-0 - scatter-1) / flux) 1.70e-03 9.23e-04 -105 1 1 1 U-238 ((nu-scatter-0 - scatter-1) / flux) 1.95e-01 1.33e-02 -106 1 1 1 Np-237 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -107 1 1 1 Pu-238 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -108 1 1 1 Pu-239 ((nu-scatter-0 - scatter-1) / flux) 1.01e-03 4.77e-04 -109 1 1 1 Pu-240 ((nu-scatter-0 - scatter-1) / flux) 1.31e-03 2.95e-04 -110 1 1 1 Pu-241 ((nu-scatter-0 - scatter-1) / flux) 3.44e-04 2.44e-04 -111 1 1 1 Pu-242 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -112 1 1 1 Am-241 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -113 1 1 1 Am-242m ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -114 1 1 1 Am-243 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -115 1 1 1 Cm-242 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -116 1 1 1 Cm-243 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -117 1 1 1 Cm-244 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -118 1 1 1 Cm-245 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -119 1 1 1 Mo-95 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -120 1 1 1 Tc-99 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -121 1 1 1 Ru-101 ((nu-scatter-0 - scatter-1) / flux) 2.38e-04 2.54e-04 -122 1 1 1 Ru-103 ((nu-scatter-0 - scatter-1) / flux) 2.26e-06 2.43e-04 -123 1 1 1 Ag-109 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -124 1 1 1 Xe-135 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -125 1 1 1 Cs-133 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -126 1 1 1 Nd-143 ((nu-scatter-0 - scatter-1) / flux) 4.47e-04 2.92e-04 -127 1 1 1 Nd-145 ((nu-scatter-0 - scatter-1) / flux) 5.64e-04 2.94e-04 -128 1 1 1 Sm-147 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -129 1 1 1 Sm-149 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -130 1 1 1 Sm-150 ((nu-scatter-0 - scatter-1) / flux) 2.99e-04 2.38e-04 -131 1 1 1 Sm-151 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -132 1 1 1 Sm-152 ((nu-scatter-0 - scatter-1) / flux) 4.92e-04 3.52e-04 -133 1 1 1 Eu-153 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -134 1 1 1 Gd-155 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -135 1 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 1.33e-01 9.82e-03 -68 1 1 2 U-234 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -69 1 1 2 U-235 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -70 1 1 2 U-236 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -71 1 1 2 U-238 ((nu-scatter-0 - scatter-1) / flux) 1.73e-04 1.73e-04 -72 1 1 2 Np-237 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -73 1 1 2 Pu-238 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -74 1 1 2 Pu-239 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -75 1 1 2 Pu-240 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -76 1 1 2 Pu-241 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -77 1 1 2 Pu-242 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -78 1 1 2 Am-241 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -79 1 1 2 Am-242m ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -80 1 1 2 Am-243 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -81 1 1 2 Cm-242 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -82 1 1 2 Cm-243 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -83 1 1 2 Cm-244 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -84 1 1 2 Cm-245 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -85 1 1 2 Mo-95 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -86 1 1 2 Tc-99 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -87 1 1 2 Ru-101 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -88 1 1 2 Ru-103 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -89 1 1 2 Ag-109 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -90 1 1 2 Xe-135 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -91 1 1 2 Cs-133 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -92 1 1 2 Nd-143 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -93 1 1 2 Nd-145 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -94 1 1 2 Sm-147 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -95 1 1 2 Sm-149 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -96 1 1 2 Sm-150 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -97 1 1 2 Sm-151 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -98 1 1 2 Sm-152 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -99 1 1 2 Eu-153 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -100 1 1 2 Gd-155 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -101 1 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 1.39e-03 4.46e-04 -34 1 2 1 U-234 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -35 1 2 1 U-235 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -36 1 2 1 U-236 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -37 1 2 1 U-238 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -38 1 2 1 Np-237 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -39 1 2 1 Pu-238 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -40 1 2 1 Pu-239 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -41 1 2 1 Pu-240 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -42 1 2 1 Pu-241 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -43 1 2 1 Pu-242 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -44 1 2 1 Am-241 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -45 1 2 1 Am-242m ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -46 1 2 1 Am-243 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -47 1 2 1 Cm-242 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -48 1 2 1 Cm-243 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -49 1 2 1 Cm-244 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -50 1 2 1 Cm-245 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -51 1 2 1 Mo-95 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -52 1 2 1 Tc-99 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -53 1 2 1 Ru-101 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -54 1 2 1 Ru-103 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -55 1 2 1 Ag-109 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -56 1 2 1 Xe-135 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -57 1 2 1 Cs-133 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -58 1 2 1 Nd-143 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -59 1 2 1 Nd-145 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -60 1 2 1 Sm-147 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -61 1 2 1 Sm-149 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -62 1 2 1 Sm-150 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -63 1 2 1 Sm-151 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -64 1 2 1 Sm-152 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -65 1 2 1 Eu-153 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -66 1 2 1 Gd-155 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -67 1 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 1 2 2 U-234 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -1 1 2 2 U-235 ((nu-scatter-0 - scatter-1) / flux) 3.89e-03 3.96e-03 -2 1 2 2 U-236 ((nu-scatter-0 - scatter-1) / flux) 1.50e-03 2.04e-03 -3 1 2 2 U-238 ((nu-scatter-0 - scatter-1) / flux) 2.20e-01 2.60e-02 -4 1 2 2 Np-237 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -5 1 2 2 Pu-238 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -6 1 2 2 Pu-239 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -7 1 2 2 Pu-240 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -8 1 2 2 Pu-241 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -9 1 2 2 Pu-242 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -10 1 2 2 Am-241 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -11 1 2 2 Am-242m ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -12 1 2 2 Am-243 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -13 1 2 2 Cm-242 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -14 1 2 2 Cm-243 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -15 1 2 2 Cm-244 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -16 1 2 2 Cm-245 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -17 1 2 2 Mo-95 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -18 1 2 2 Tc-99 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -19 1 2 2 Ru-101 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -20 1 2 2 Ru-103 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -21 1 2 2 Ag-109 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -22 1 2 2 Xe-135 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -23 1 2 2 Cs-133 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -24 1 2 2 Nd-143 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -25 1 2 2 Nd-145 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -26 1 2 2 Sm-147 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -27 1 2 2 Sm-149 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -28 1 2 2 Sm-150 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -29 1 2 2 Sm-151 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -30 1 2 2 Sm-152 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -31 1 2 2 Eu-153 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -32 1 2 2 Gd-155 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -33 1 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 1.97e-01 1.47e-02 material group out nuclide score mean std. dev. -34 1 1 U-234 nu-fission 0.00e+00 0.00e+00 -35 1 1 U-235 nu-fission 1.00e+00 6.64e-02 -36 1 1 U-236 nu-fission 0.00e+00 0.00e+00 -37 1 1 U-238 nu-fission 1.00e+00 9.31e-02 -38 1 1 Np-237 nu-fission 0.00e+00 0.00e+00 -39 1 1 Pu-238 nu-fission 0.00e+00 0.00e+00 -40 1 1 Pu-239 nu-fission 1.00e+00 1.05e-01 -41 1 1 Pu-240 nu-fission 0.00e+00 0.00e+00 -42 1 1 Pu-241 nu-fission 1.00e+00 2.64e-01 -43 1 1 Pu-242 nu-fission 0.00e+00 0.00e+00 -44 1 1 Am-241 nu-fission 0.00e+00 0.00e+00 -45 1 1 Am-242m nu-fission 0.00e+00 0.00e+00 -46 1 1 Am-243 nu-fission 0.00e+00 0.00e+00 -47 1 1 Cm-242 nu-fission 0.00e+00 0.00e+00 -48 1 1 Cm-243 nu-fission 0.00e+00 0.00e+00 -49 1 1 Cm-244 nu-fission 0.00e+00 0.00e+00 -50 1 1 Cm-245 nu-fission 0.00e+00 0.00e+00 -51 1 1 Mo-95 nu-fission 0.00e+00 0.00e+00 -52 1 1 Tc-99 nu-fission 0.00e+00 0.00e+00 -53 1 1 Ru-101 nu-fission 0.00e+00 0.00e+00 -54 1 1 Ru-103 nu-fission 0.00e+00 0.00e+00 -55 1 1 Ag-109 nu-fission 0.00e+00 0.00e+00 -56 1 1 Xe-135 nu-fission 0.00e+00 0.00e+00 -57 1 1 Cs-133 nu-fission 0.00e+00 0.00e+00 -58 1 1 Nd-143 nu-fission 0.00e+00 0.00e+00 -59 1 1 Nd-145 nu-fission 0.00e+00 0.00e+00 -60 1 1 Sm-147 nu-fission 0.00e+00 0.00e+00 -61 1 1 Sm-149 nu-fission 0.00e+00 0.00e+00 -62 1 1 Sm-150 nu-fission 0.00e+00 0.00e+00 -63 1 1 Sm-151 nu-fission 0.00e+00 0.00e+00 -64 1 1 Sm-152 nu-fission 0.00e+00 0.00e+00 -65 1 1 Eu-153 nu-fission 0.00e+00 0.00e+00 -66 1 1 Gd-155 nu-fission 0.00e+00 0.00e+00 -67 1 1 O-16 nu-fission 0.00e+00 0.00e+00 -0 1 2 U-234 nu-fission 0.00e+00 0.00e+00 -1 1 2 U-235 nu-fission 0.00e+00 0.00e+00 -2 1 2 U-236 nu-fission 0.00e+00 0.00e+00 -3 1 2 U-238 nu-fission 0.00e+00 0.00e+00 -4 1 2 Np-237 nu-fission 0.00e+00 0.00e+00 -5 1 2 Pu-238 nu-fission 0.00e+00 0.00e+00 -6 1 2 Pu-239 nu-fission 0.00e+00 0.00e+00 -7 1 2 Pu-240 nu-fission 0.00e+00 0.00e+00 -8 1 2 Pu-241 nu-fission 0.00e+00 0.00e+00 -9 1 2 Pu-242 nu-fission 0.00e+00 0.00e+00 -10 1 2 Am-241 nu-fission 0.00e+00 0.00e+00 -11 1 2 Am-242m nu-fission 0.00e+00 0.00e+00 -12 1 2 Am-243 nu-fission 0.00e+00 0.00e+00 -13 1 2 Cm-242 nu-fission 0.00e+00 0.00e+00 -14 1 2 Cm-243 nu-fission 0.00e+00 0.00e+00 -15 1 2 Cm-244 nu-fission 0.00e+00 0.00e+00 -16 1 2 Cm-245 nu-fission 0.00e+00 0.00e+00 -17 1 2 Mo-95 nu-fission 0.00e+00 0.00e+00 -18 1 2 Tc-99 nu-fission 0.00e+00 0.00e+00 -19 1 2 Ru-101 nu-fission 0.00e+00 0.00e+00 -20 1 2 Ru-103 nu-fission 0.00e+00 0.00e+00 -21 1 2 Ag-109 nu-fission 0.00e+00 0.00e+00 -22 1 2 Xe-135 nu-fission 0.00e+00 0.00e+00 -23 1 2 Cs-133 nu-fission 0.00e+00 0.00e+00 -24 1 2 Nd-143 nu-fission 0.00e+00 0.00e+00 -25 1 2 Nd-145 nu-fission 0.00e+00 0.00e+00 -26 1 2 Sm-147 nu-fission 0.00e+00 0.00e+00 -27 1 2 Sm-149 nu-fission 0.00e+00 0.00e+00 -28 1 2 Sm-150 nu-fission 0.00e+00 0.00e+00 -29 1 2 Sm-151 nu-fission 0.00e+00 0.00e+00 -30 1 2 Sm-152 nu-fission 0.00e+00 0.00e+00 -31 1 2 Eu-153 nu-fission 0.00e+00 0.00e+00 -32 1 2 Gd-155 nu-fission 0.00e+00 0.00e+00 -33 1 2 O-16 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -5 2 1 Zr-90 ((total - scatter-1) / flux) 1.05e-01 8.92e-03 -6 2 1 Zr-91 ((total - scatter-1) / flux) 3.62e-02 3.74e-03 -7 2 1 Zr-92 ((total - scatter-1) / flux) 4.24e-02 3.03e-03 -8 2 1 Zr-94 ((total - scatter-1) / flux) 4.61e-02 6.25e-03 -9 2 1 Zr-96 ((total - scatter-1) / flux) 7.79e-03 1.54e-03 -0 2 2 Zr-90 ((total - scatter-1) / flux) 1.22e-01 3.49e-02 -1 2 2 Zr-91 ((total - scatter-1) / flux) 6.18e-02 2.43e-02 -2 2 2 Zr-92 ((total - scatter-1) / flux) 4.16e-02 1.63e-02 -3 2 2 Zr-94 ((total - scatter-1) / flux) 6.08e-02 2.15e-02 -4 2 2 Zr-96 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -5 2 1 Zr-90 (nu-fission / flux) 0.00e+00 0.00e+00 -6 2 1 Zr-91 (nu-fission / flux) 0.00e+00 0.00e+00 -7 2 1 Zr-92 (nu-fission / flux) 0.00e+00 0.00e+00 -8 2 1 Zr-94 (nu-fission / flux) 0.00e+00 0.00e+00 -9 2 1 Zr-96 (nu-fission / flux) 0.00e+00 0.00e+00 -0 2 2 Zr-90 (nu-fission / flux) 0.00e+00 0.00e+00 -1 2 2 Zr-91 (nu-fission / flux) 0.00e+00 0.00e+00 -2 2 2 Zr-92 (nu-fission / flux) 0.00e+00 0.00e+00 -3 2 2 Zr-94 (nu-fission / flux) 0.00e+00 0.00e+00 -4 2 2 Zr-96 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -15 2 1 1 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 1.05e-01 8.92e-03 -16 2 1 1 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 3.62e-02 3.74e-03 -17 2 1 1 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 4.24e-02 3.03e-03 -18 2 1 1 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 4.61e-02 6.25e-03 -19 2 1 1 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 7.79e-03 1.54e-03 -10 2 1 2 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -11 2 1 2 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -12 2 1 2 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -13 2 1 2 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -14 2 1 2 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -5 2 2 1 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -6 2 2 1 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -7 2 2 1 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -8 2 2 1 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -9 2 2 1 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 2 2 2 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 1.22e-01 3.49e-02 -1 2 2 2 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 6.18e-02 2.43e-02 -2 2 2 2 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 4.16e-02 1.63e-02 -3 2 2 2 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 6.08e-02 2.15e-02 -4 2 2 2 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -5 2 1 Zr-90 nu-fission 0.00e+00 0.00e+00 -6 2 1 Zr-91 nu-fission 0.00e+00 0.00e+00 -7 2 1 Zr-92 nu-fission 0.00e+00 0.00e+00 -8 2 1 Zr-94 nu-fission 0.00e+00 0.00e+00 -9 2 1 Zr-96 nu-fission 0.00e+00 0.00e+00 -0 2 2 Zr-90 nu-fission 0.00e+00 0.00e+00 -1 2 2 Zr-91 nu-fission 0.00e+00 0.00e+00 -2 2 2 Zr-92 nu-fission 0.00e+00 0.00e+00 -3 2 2 Zr-94 nu-fission 0.00e+00 0.00e+00 -4 2 2 Zr-96 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -4 3 1 H-1 ((total - scatter-1) / flux) 2.07e-01 2.30e-02 -5 3 1 O-16 ((total - scatter-1) / flux) 7.93e-02 5.20e-03 -6 3 1 B-10 ((total - scatter-1) / flux) 5.21e-04 2.44e-04 -7 3 1 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -0 3 2 H-1 ((total - scatter-1) / flux) 1.28e+00 2.51e-01 -1 3 2 O-16 ((total - scatter-1) / flux) 8.54e-02 1.40e-02 -2 3 2 B-10 ((total - scatter-1) / flux) 4.92e-02 8.23e-03 -3 3 2 B-11 ((total - scatter-1) / flux) 1.95e-04 1.53e-03 material group in nuclide score mean std. dev. -4 3 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -5 3 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -6 3 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -7 3 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 -0 3 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -1 3 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -2 3 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -3 3 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -12 3 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 1.81e-01 2.21e-02 -13 3 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 7.86e-02 5.04e-03 -14 3 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -15 3 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -8 3 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 2.57e-02 1.58e-03 -9 3 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 5.21e-04 1.31e-04 -10 3 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -11 3 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -4 3 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -5 3 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -6 3 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -7 3 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 3 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 1.27e+00 2.51e-01 -1 3 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 8.54e-02 1.40e-02 -2 3 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -3 3 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 1.95e-04 1.53e-03 material group out nuclide score mean std. dev. -4 3 1 H-1 nu-fission 0.00e+00 0.00e+00 -5 3 1 O-16 nu-fission 0.00e+00 0.00e+00 -6 3 1 B-10 nu-fission 0.00e+00 0.00e+00 -7 3 1 B-11 nu-fission 0.00e+00 0.00e+00 -0 3 2 H-1 nu-fission 0.00e+00 0.00e+00 -1 3 2 O-16 nu-fission 0.00e+00 0.00e+00 -2 3 2 B-10 nu-fission 0.00e+00 0.00e+00 -3 3 2 B-11 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -4 4 1 H-1 ((total - scatter-1) / flux) 1.75e-01 5.37e-02 -5 4 1 O-16 ((total - scatter-1) / flux) 6.65e-02 1.01e-02 -6 4 1 B-10 ((total - scatter-1) / flux) 5.70e-04 3.52e-04 -7 4 1 B-11 ((total - scatter-1) / flux) 8.88e-05 3.46e-04 -0 4 2 H-1 ((total - scatter-1) / flux) 1.14e+00 3.65e-01 -1 4 2 O-16 ((total - scatter-1) / flux) 8.51e-02 2.81e-02 -2 4 2 B-10 ((total - scatter-1) / flux) 2.59e-02 7.28e-03 -3 4 2 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -4 4 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -5 4 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -6 4 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -7 4 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 -0 4 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -1 4 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -2 4 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -3 4 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -12 4 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 1.51e-01 5.15e-02 -13 4 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 6.65e-02 1.01e-02 -14 4 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -15 4 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 8.88e-05 3.46e-04 -8 4 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 2.37e-02 3.08e-03 -9 4 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -10 4 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -11 4 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -4 4 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -5 4 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -6 4 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -7 4 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 4 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 1.13e+00 3.62e-01 -1 4 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 8.51e-02 2.81e-02 -2 4 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -3 4 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -4 4 1 H-1 nu-fission 0.00e+00 0.00e+00 -5 4 1 O-16 nu-fission 0.00e+00 0.00e+00 -6 4 1 B-10 nu-fission 0.00e+00 0.00e+00 -7 4 1 B-11 nu-fission 0.00e+00 0.00e+00 -0 4 2 H-1 nu-fission 0.00e+00 0.00e+00 -1 4 2 O-16 nu-fission 0.00e+00 0.00e+00 -2 4 2 B-10 nu-fission 0.00e+00 0.00e+00 -3 4 2 B-11 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -27 5 1 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -28 5 1 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -29 5 1 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -30 5 1 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -31 5 1 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -32 5 1 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -33 5 1 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -34 5 1 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -35 5 1 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -36 5 1 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -37 5 1 Mo-92 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -38 5 1 Mo-94 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -39 5 1 Mo-95 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -40 5 1 Mo-96 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -41 5 1 Mo-97 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -42 5 1 Mo-98 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -43 5 1 Mo-100 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -44 5 1 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -45 5 1 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -46 5 1 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -47 5 1 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -48 5 1 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -49 5 1 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -50 5 1 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -51 5 1 C-Nat ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -52 5 1 Cu-63 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -53 5 1 Cu-65 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -0 5 2 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -1 5 2 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -2 5 2 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -3 5 2 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -4 5 2 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -5 5 2 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -6 5 2 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -7 5 2 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -8 5 2 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -9 5 2 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -10 5 2 Mo-92 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -11 5 2 Mo-94 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -12 5 2 Mo-95 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -13 5 2 Mo-96 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -14 5 2 Mo-97 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -15 5 2 Mo-98 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -16 5 2 Mo-100 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -17 5 2 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -18 5 2 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -19 5 2 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -20 5 2 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -21 5 2 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -22 5 2 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -23 5 2 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -24 5 2 C-Nat ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -25 5 2 Cu-63 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -26 5 2 Cu-65 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -27 5 1 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 -28 5 1 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 -29 5 1 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 -30 5 1 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 -31 5 1 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 -32 5 1 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 -33 5 1 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 -34 5 1 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 -35 5 1 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 -36 5 1 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 -37 5 1 Mo-92 (nu-fission / flux) 0.00e+00 0.00e+00 -38 5 1 Mo-94 (nu-fission / flux) 0.00e+00 0.00e+00 -39 5 1 Mo-95 (nu-fission / flux) 0.00e+00 0.00e+00 -40 5 1 Mo-96 (nu-fission / flux) 0.00e+00 0.00e+00 -41 5 1 Mo-97 (nu-fission / flux) 0.00e+00 0.00e+00 -42 5 1 Mo-98 (nu-fission / flux) 0.00e+00 0.00e+00 -43 5 1 Mo-100 (nu-fission / flux) 0.00e+00 0.00e+00 -44 5 1 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 -45 5 1 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 -46 5 1 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 -47 5 1 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 -48 5 1 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 -49 5 1 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 -50 5 1 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 -51 5 1 C-Nat (nu-fission / flux) 0.00e+00 0.00e+00 -52 5 1 Cu-63 (nu-fission / flux) 0.00e+00 0.00e+00 -53 5 1 Cu-65 (nu-fission / flux) 0.00e+00 0.00e+00 -0 5 2 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 -1 5 2 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 -2 5 2 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 -3 5 2 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 -4 5 2 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 -5 5 2 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 -6 5 2 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 -7 5 2 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 -8 5 2 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 -9 5 2 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 -10 5 2 Mo-92 (nu-fission / flux) 0.00e+00 0.00e+00 -11 5 2 Mo-94 (nu-fission / flux) 0.00e+00 0.00e+00 -12 5 2 Mo-95 (nu-fission / flux) 0.00e+00 0.00e+00 -13 5 2 Mo-96 (nu-fission / flux) 0.00e+00 0.00e+00 -14 5 2 Mo-97 (nu-fission / flux) 0.00e+00 0.00e+00 -15 5 2 Mo-98 (nu-fission / flux) 0.00e+00 0.00e+00 -16 5 2 Mo-100 (nu-fission / flux) 0.00e+00 0.00e+00 -17 5 2 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 -18 5 2 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 -19 5 2 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 -20 5 2 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 -21 5 2 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 -22 5 2 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 -23 5 2 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 -24 5 2 C-Nat (nu-fission / flux) 0.00e+00 0.00e+00 -25 5 2 Cu-63 (nu-fission / flux) 0.00e+00 0.00e+00 -26 5 2 Cu-65 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -81 5 1 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -82 5 1 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -83 5 1 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -84 5 1 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -85 5 1 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -86 5 1 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -87 5 1 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -88 5 1 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -89 5 1 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -90 5 1 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -91 5 1 1 Mo-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -92 5 1 1 Mo-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -93 5 1 1 Mo-95 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -94 5 1 1 Mo-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -95 5 1 1 Mo-97 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -96 5 1 1 Mo-98 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -97 5 1 1 Mo-100 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -98 5 1 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -99 5 1 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -100 5 1 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -101 5 1 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -102 5 1 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -103 5 1 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -104 5 1 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -105 5 1 1 C-Nat ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -106 5 1 1 Cu-63 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -107 5 1 1 Cu-65 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -54 5 1 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -55 5 1 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -56 5 1 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -57 5 1 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -58 5 1 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -59 5 1 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -60 5 1 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -61 5 1 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -62 5 1 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -63 5 1 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -64 5 1 2 Mo-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -65 5 1 2 Mo-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -66 5 1 2 Mo-95 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -67 5 1 2 Mo-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -68 5 1 2 Mo-97 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -69 5 1 2 Mo-98 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -70 5 1 2 Mo-100 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -71 5 1 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -72 5 1 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -73 5 1 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -74 5 1 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -75 5 1 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -76 5 1 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -77 5 1 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -78 5 1 2 C-Nat ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -79 5 1 2 Cu-63 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -80 5 1 2 Cu-65 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -27 5 2 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -28 5 2 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -29 5 2 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -30 5 2 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -31 5 2 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -32 5 2 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -33 5 2 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -34 5 2 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -35 5 2 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -36 5 2 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -37 5 2 1 Mo-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -38 5 2 1 Mo-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -39 5 2 1 Mo-95 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -40 5 2 1 Mo-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -41 5 2 1 Mo-97 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -42 5 2 1 Mo-98 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -43 5 2 1 Mo-100 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -44 5 2 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -45 5 2 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -46 5 2 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -47 5 2 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -48 5 2 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -49 5 2 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -50 5 2 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -51 5 2 1 C-Nat ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -52 5 2 1 Cu-63 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -53 5 2 1 Cu-65 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 5 2 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -1 5 2 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -2 5 2 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -3 5 2 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -4 5 2 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -5 5 2 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -6 5 2 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -7 5 2 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -8 5 2 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -9 5 2 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -10 5 2 2 Mo-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -11 5 2 2 Mo-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -12 5 2 2 Mo-95 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -13 5 2 2 Mo-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -14 5 2 2 Mo-97 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -15 5 2 2 Mo-98 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -16 5 2 2 Mo-100 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -17 5 2 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -18 5 2 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -19 5 2 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -20 5 2 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -21 5 2 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -22 5 2 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -23 5 2 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -24 5 2 2 C-Nat ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -25 5 2 2 Cu-63 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -26 5 2 2 Cu-65 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -27 5 1 Fe-54 nu-fission 0.00e+00 0.00e+00 -28 5 1 Fe-56 nu-fission 0.00e+00 0.00e+00 -29 5 1 Fe-57 nu-fission 0.00e+00 0.00e+00 -30 5 1 Fe-58 nu-fission 0.00e+00 0.00e+00 -31 5 1 Ni-58 nu-fission 0.00e+00 0.00e+00 -32 5 1 Ni-60 nu-fission 0.00e+00 0.00e+00 -33 5 1 Ni-61 nu-fission 0.00e+00 0.00e+00 -34 5 1 Ni-62 nu-fission 0.00e+00 0.00e+00 -35 5 1 Ni-64 nu-fission 0.00e+00 0.00e+00 -36 5 1 Mn-55 nu-fission 0.00e+00 0.00e+00 -37 5 1 Mo-92 nu-fission 0.00e+00 0.00e+00 -38 5 1 Mo-94 nu-fission 0.00e+00 0.00e+00 -39 5 1 Mo-95 nu-fission 0.00e+00 0.00e+00 -40 5 1 Mo-96 nu-fission 0.00e+00 0.00e+00 -41 5 1 Mo-97 nu-fission 0.00e+00 0.00e+00 -42 5 1 Mo-98 nu-fission 0.00e+00 0.00e+00 -43 5 1 Mo-100 nu-fission 0.00e+00 0.00e+00 -44 5 1 Si-28 nu-fission 0.00e+00 0.00e+00 -45 5 1 Si-29 nu-fission 0.00e+00 0.00e+00 -46 5 1 Si-30 nu-fission 0.00e+00 0.00e+00 -47 5 1 Cr-50 nu-fission 0.00e+00 0.00e+00 -48 5 1 Cr-52 nu-fission 0.00e+00 0.00e+00 -49 5 1 Cr-53 nu-fission 0.00e+00 0.00e+00 -50 5 1 Cr-54 nu-fission 0.00e+00 0.00e+00 -51 5 1 C-Nat nu-fission 0.00e+00 0.00e+00 -52 5 1 Cu-63 nu-fission 0.00e+00 0.00e+00 -53 5 1 Cu-65 nu-fission 0.00e+00 0.00e+00 -0 5 2 Fe-54 nu-fission 0.00e+00 0.00e+00 -1 5 2 Fe-56 nu-fission 0.00e+00 0.00e+00 -2 5 2 Fe-57 nu-fission 0.00e+00 0.00e+00 -3 5 2 Fe-58 nu-fission 0.00e+00 0.00e+00 -4 5 2 Ni-58 nu-fission 0.00e+00 0.00e+00 -5 5 2 Ni-60 nu-fission 0.00e+00 0.00e+00 -6 5 2 Ni-61 nu-fission 0.00e+00 0.00e+00 -7 5 2 Ni-62 nu-fission 0.00e+00 0.00e+00 -8 5 2 Ni-64 nu-fission 0.00e+00 0.00e+00 -9 5 2 Mn-55 nu-fission 0.00e+00 0.00e+00 -10 5 2 Mo-92 nu-fission 0.00e+00 0.00e+00 -11 5 2 Mo-94 nu-fission 0.00e+00 0.00e+00 -12 5 2 Mo-95 nu-fission 0.00e+00 0.00e+00 -13 5 2 Mo-96 nu-fission 0.00e+00 0.00e+00 -14 5 2 Mo-97 nu-fission 0.00e+00 0.00e+00 -15 5 2 Mo-98 nu-fission 0.00e+00 0.00e+00 -16 5 2 Mo-100 nu-fission 0.00e+00 0.00e+00 -17 5 2 Si-28 nu-fission 0.00e+00 0.00e+00 -18 5 2 Si-29 nu-fission 0.00e+00 0.00e+00 -19 5 2 Si-30 nu-fission 0.00e+00 0.00e+00 -20 5 2 Cr-50 nu-fission 0.00e+00 0.00e+00 -21 5 2 Cr-52 nu-fission 0.00e+00 0.00e+00 -22 5 2 Cr-53 nu-fission 0.00e+00 0.00e+00 -23 5 2 Cr-54 nu-fission 0.00e+00 0.00e+00 -24 5 2 C-Nat nu-fission 0.00e+00 0.00e+00 -25 5 2 Cu-63 nu-fission 0.00e+00 0.00e+00 -26 5 2 Cu-65 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -21 6 1 H-1 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -22 6 1 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -23 6 1 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -24 6 1 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -25 6 1 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -26 6 1 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -27 6 1 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -28 6 1 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -29 6 1 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -30 6 1 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -31 6 1 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -32 6 1 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -33 6 1 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -34 6 1 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -35 6 1 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -36 6 1 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -37 6 1 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -38 6 1 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -39 6 1 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -40 6 1 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -41 6 1 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -0 6 2 H-1 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -1 6 2 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -2 6 2 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -3 6 2 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -4 6 2 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -5 6 2 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -6 6 2 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -7 6 2 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -8 6 2 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -9 6 2 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -10 6 2 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -11 6 2 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -12 6 2 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -13 6 2 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -14 6 2 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -15 6 2 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -16 6 2 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -17 6 2 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -18 6 2 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -19 6 2 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -20 6 2 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -21 6 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -22 6 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -23 6 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -24 6 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 -25 6 1 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 -26 6 1 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 -27 6 1 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 -28 6 1 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 -29 6 1 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 -30 6 1 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 -31 6 1 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 -32 6 1 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 -33 6 1 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 -34 6 1 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 -35 6 1 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 -36 6 1 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 -37 6 1 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 -38 6 1 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 -39 6 1 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 -40 6 1 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 -41 6 1 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 -0 6 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -1 6 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -2 6 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -3 6 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 -4 6 2 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 -5 6 2 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 -6 6 2 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 -7 6 2 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 -8 6 2 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 -9 6 2 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 -10 6 2 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 -11 6 2 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 -12 6 2 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 -13 6 2 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 -14 6 2 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 -15 6 2 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 -16 6 2 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 -17 6 2 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 -18 6 2 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 -19 6 2 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 -20 6 2 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -63 6 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -64 6 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -65 6 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -66 6 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -67 6 1 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -68 6 1 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -69 6 1 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -70 6 1 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -71 6 1 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -72 6 1 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -73 6 1 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -74 6 1 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -75 6 1 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -76 6 1 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -77 6 1 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -78 6 1 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -79 6 1 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -80 6 1 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -81 6 1 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -82 6 1 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -83 6 1 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -42 6 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -43 6 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -44 6 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -45 6 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -46 6 1 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -47 6 1 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -48 6 1 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -49 6 1 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -50 6 1 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -51 6 1 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -52 6 1 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -53 6 1 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -54 6 1 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -55 6 1 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -56 6 1 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -57 6 1 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -58 6 1 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -59 6 1 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -60 6 1 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -61 6 1 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -62 6 1 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -21 6 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -22 6 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -23 6 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -24 6 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -25 6 2 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -26 6 2 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -27 6 2 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -28 6 2 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -29 6 2 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -30 6 2 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -31 6 2 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -32 6 2 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -33 6 2 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -34 6 2 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -35 6 2 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -36 6 2 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -37 6 2 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -38 6 2 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -39 6 2 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -40 6 2 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -41 6 2 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 6 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -1 6 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -2 6 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -3 6 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -4 6 2 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -5 6 2 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -6 6 2 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -7 6 2 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -8 6 2 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -9 6 2 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -10 6 2 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -11 6 2 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -12 6 2 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -13 6 2 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -14 6 2 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -15 6 2 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -16 6 2 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -17 6 2 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -18 6 2 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -19 6 2 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -20 6 2 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -21 6 1 H-1 nu-fission 0.00e+00 0.00e+00 -22 6 1 O-16 nu-fission 0.00e+00 0.00e+00 -23 6 1 B-10 nu-fission 0.00e+00 0.00e+00 -24 6 1 B-11 nu-fission 0.00e+00 0.00e+00 -25 6 1 Fe-54 nu-fission 0.00e+00 0.00e+00 -26 6 1 Fe-56 nu-fission 0.00e+00 0.00e+00 -27 6 1 Fe-57 nu-fission 0.00e+00 0.00e+00 -28 6 1 Fe-58 nu-fission 0.00e+00 0.00e+00 -29 6 1 Ni-58 nu-fission 0.00e+00 0.00e+00 -30 6 1 Ni-60 nu-fission 0.00e+00 0.00e+00 -31 6 1 Ni-61 nu-fission 0.00e+00 0.00e+00 -32 6 1 Ni-62 nu-fission 0.00e+00 0.00e+00 -33 6 1 Ni-64 nu-fission 0.00e+00 0.00e+00 -34 6 1 Mn-55 nu-fission 0.00e+00 0.00e+00 -35 6 1 Si-28 nu-fission 0.00e+00 0.00e+00 -36 6 1 Si-29 nu-fission 0.00e+00 0.00e+00 -37 6 1 Si-30 nu-fission 0.00e+00 0.00e+00 -38 6 1 Cr-50 nu-fission 0.00e+00 0.00e+00 -39 6 1 Cr-52 nu-fission 0.00e+00 0.00e+00 -40 6 1 Cr-53 nu-fission 0.00e+00 0.00e+00 -41 6 1 Cr-54 nu-fission 0.00e+00 0.00e+00 -0 6 2 H-1 nu-fission 0.00e+00 0.00e+00 -1 6 2 O-16 nu-fission 0.00e+00 0.00e+00 -2 6 2 B-10 nu-fission 0.00e+00 0.00e+00 -3 6 2 B-11 nu-fission 0.00e+00 0.00e+00 -4 6 2 Fe-54 nu-fission 0.00e+00 0.00e+00 -5 6 2 Fe-56 nu-fission 0.00e+00 0.00e+00 -6 6 2 Fe-57 nu-fission 0.00e+00 0.00e+00 -7 6 2 Fe-58 nu-fission 0.00e+00 0.00e+00 -8 6 2 Ni-58 nu-fission 0.00e+00 0.00e+00 -9 6 2 Ni-60 nu-fission 0.00e+00 0.00e+00 -10 6 2 Ni-61 nu-fission 0.00e+00 0.00e+00 -11 6 2 Ni-62 nu-fission 0.00e+00 0.00e+00 -12 6 2 Ni-64 nu-fission 0.00e+00 0.00e+00 -13 6 2 Mn-55 nu-fission 0.00e+00 0.00e+00 -14 6 2 Si-28 nu-fission 0.00e+00 0.00e+00 -15 6 2 Si-29 nu-fission 0.00e+00 0.00e+00 -16 6 2 Si-30 nu-fission 0.00e+00 0.00e+00 -17 6 2 Cr-50 nu-fission 0.00e+00 0.00e+00 -18 6 2 Cr-52 nu-fission 0.00e+00 0.00e+00 -19 6 2 Cr-53 nu-fission 0.00e+00 0.00e+00 -20 6 2 Cr-54 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -21 7 1 H-1 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -22 7 1 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -23 7 1 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -24 7 1 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -25 7 1 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -26 7 1 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -27 7 1 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -28 7 1 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -29 7 1 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -30 7 1 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -31 7 1 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -32 7 1 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -33 7 1 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -34 7 1 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -35 7 1 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -36 7 1 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -37 7 1 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -38 7 1 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -39 7 1 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -40 7 1 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -41 7 1 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -0 7 2 H-1 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -1 7 2 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -2 7 2 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -3 7 2 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -4 7 2 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -5 7 2 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -6 7 2 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -7 7 2 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -8 7 2 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -9 7 2 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -10 7 2 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -11 7 2 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -12 7 2 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -13 7 2 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -14 7 2 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -15 7 2 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -16 7 2 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -17 7 2 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -18 7 2 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -19 7 2 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -20 7 2 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -21 7 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -22 7 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -23 7 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -24 7 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 -25 7 1 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 -26 7 1 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 -27 7 1 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 -28 7 1 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 -29 7 1 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 -30 7 1 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 -31 7 1 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 -32 7 1 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 -33 7 1 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 -34 7 1 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 -35 7 1 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 -36 7 1 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 -37 7 1 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 -38 7 1 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 -39 7 1 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 -40 7 1 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 -41 7 1 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 -0 7 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -1 7 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -2 7 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -3 7 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 -4 7 2 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 -5 7 2 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 -6 7 2 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 -7 7 2 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 -8 7 2 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 -9 7 2 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 -10 7 2 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 -11 7 2 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 -12 7 2 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 -13 7 2 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 -14 7 2 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 -15 7 2 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 -16 7 2 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 -17 7 2 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 -18 7 2 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 -19 7 2 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 -20 7 2 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -63 7 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -64 7 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -65 7 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -66 7 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -67 7 1 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -68 7 1 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -69 7 1 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -70 7 1 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -71 7 1 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -72 7 1 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -73 7 1 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -74 7 1 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -75 7 1 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -76 7 1 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -77 7 1 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -78 7 1 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -79 7 1 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -80 7 1 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -81 7 1 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -82 7 1 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -83 7 1 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -42 7 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -43 7 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -44 7 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -45 7 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -46 7 1 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -47 7 1 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -48 7 1 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -49 7 1 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -50 7 1 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -51 7 1 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -52 7 1 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -53 7 1 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -54 7 1 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -55 7 1 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -56 7 1 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -57 7 1 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -58 7 1 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -59 7 1 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -60 7 1 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -61 7 1 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -62 7 1 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -21 7 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -22 7 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -23 7 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -24 7 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -25 7 2 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -26 7 2 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -27 7 2 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -28 7 2 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -29 7 2 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -30 7 2 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -31 7 2 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -32 7 2 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -33 7 2 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -34 7 2 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -35 7 2 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -36 7 2 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -37 7 2 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -38 7 2 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -39 7 2 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -40 7 2 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -41 7 2 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 7 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -1 7 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -2 7 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -3 7 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -4 7 2 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -5 7 2 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -6 7 2 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -7 7 2 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -8 7 2 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -9 7 2 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -10 7 2 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -11 7 2 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -12 7 2 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -13 7 2 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -14 7 2 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -15 7 2 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -16 7 2 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -17 7 2 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -18 7 2 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -19 7 2 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -20 7 2 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -21 7 1 H-1 nu-fission 0.00e+00 0.00e+00 -22 7 1 O-16 nu-fission 0.00e+00 0.00e+00 -23 7 1 B-10 nu-fission 0.00e+00 0.00e+00 -24 7 1 B-11 nu-fission 0.00e+00 0.00e+00 -25 7 1 Fe-54 nu-fission 0.00e+00 0.00e+00 -26 7 1 Fe-56 nu-fission 0.00e+00 0.00e+00 -27 7 1 Fe-57 nu-fission 0.00e+00 0.00e+00 -28 7 1 Fe-58 nu-fission 0.00e+00 0.00e+00 -29 7 1 Ni-58 nu-fission 0.00e+00 0.00e+00 -30 7 1 Ni-60 nu-fission 0.00e+00 0.00e+00 -31 7 1 Ni-61 nu-fission 0.00e+00 0.00e+00 -32 7 1 Ni-62 nu-fission 0.00e+00 0.00e+00 -33 7 1 Ni-64 nu-fission 0.00e+00 0.00e+00 -34 7 1 Mn-55 nu-fission 0.00e+00 0.00e+00 -35 7 1 Si-28 nu-fission 0.00e+00 0.00e+00 -36 7 1 Si-29 nu-fission 0.00e+00 0.00e+00 -37 7 1 Si-30 nu-fission 0.00e+00 0.00e+00 -38 7 1 Cr-50 nu-fission 0.00e+00 0.00e+00 -39 7 1 Cr-52 nu-fission 0.00e+00 0.00e+00 -40 7 1 Cr-53 nu-fission 0.00e+00 0.00e+00 -41 7 1 Cr-54 nu-fission 0.00e+00 0.00e+00 -0 7 2 H-1 nu-fission 0.00e+00 0.00e+00 -1 7 2 O-16 nu-fission 0.00e+00 0.00e+00 -2 7 2 B-10 nu-fission 0.00e+00 0.00e+00 -3 7 2 B-11 nu-fission 0.00e+00 0.00e+00 -4 7 2 Fe-54 nu-fission 0.00e+00 0.00e+00 -5 7 2 Fe-56 nu-fission 0.00e+00 0.00e+00 -6 7 2 Fe-57 nu-fission 0.00e+00 0.00e+00 -7 7 2 Fe-58 nu-fission 0.00e+00 0.00e+00 -8 7 2 Ni-58 nu-fission 0.00e+00 0.00e+00 -9 7 2 Ni-60 nu-fission 0.00e+00 0.00e+00 -10 7 2 Ni-61 nu-fission 0.00e+00 0.00e+00 -11 7 2 Ni-62 nu-fission 0.00e+00 0.00e+00 -12 7 2 Ni-64 nu-fission 0.00e+00 0.00e+00 -13 7 2 Mn-55 nu-fission 0.00e+00 0.00e+00 -14 7 2 Si-28 nu-fission 0.00e+00 0.00e+00 -15 7 2 Si-29 nu-fission 0.00e+00 0.00e+00 -16 7 2 Si-30 nu-fission 0.00e+00 0.00e+00 -17 7 2 Cr-50 nu-fission 0.00e+00 0.00e+00 -18 7 2 Cr-52 nu-fission 0.00e+00 0.00e+00 -19 7 2 Cr-53 nu-fission 0.00e+00 0.00e+00 -20 7 2 Cr-54 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -21 8 1 H-1 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -22 8 1 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -23 8 1 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -24 8 1 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -25 8 1 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -26 8 1 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -27 8 1 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -28 8 1 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -29 8 1 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -30 8 1 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -31 8 1 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -32 8 1 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -33 8 1 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -34 8 1 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -35 8 1 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -36 8 1 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -37 8 1 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -38 8 1 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -39 8 1 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -40 8 1 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -41 8 1 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -0 8 2 H-1 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -1 8 2 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -2 8 2 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -3 8 2 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -4 8 2 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -5 8 2 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -6 8 2 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -7 8 2 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -8 8 2 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -9 8 2 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -10 8 2 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -11 8 2 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -12 8 2 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -13 8 2 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -14 8 2 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -15 8 2 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -16 8 2 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -17 8 2 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -18 8 2 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -19 8 2 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -20 8 2 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -21 8 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -22 8 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -23 8 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -24 8 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 -25 8 1 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 -26 8 1 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 -27 8 1 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 -28 8 1 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 -29 8 1 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 -30 8 1 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 -31 8 1 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 -32 8 1 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 -33 8 1 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 -34 8 1 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 -35 8 1 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 -36 8 1 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 -37 8 1 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 -38 8 1 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 -39 8 1 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 -40 8 1 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 -41 8 1 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 -0 8 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -1 8 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -2 8 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -3 8 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 -4 8 2 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 -5 8 2 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 -6 8 2 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 -7 8 2 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 -8 8 2 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 -9 8 2 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 -10 8 2 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 -11 8 2 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 -12 8 2 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 -13 8 2 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 -14 8 2 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 -15 8 2 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 -16 8 2 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 -17 8 2 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 -18 8 2 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 -19 8 2 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 -20 8 2 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -63 8 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -64 8 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -65 8 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -66 8 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -67 8 1 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -68 8 1 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -69 8 1 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -70 8 1 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -71 8 1 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -72 8 1 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -73 8 1 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -74 8 1 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -75 8 1 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -76 8 1 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -77 8 1 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -78 8 1 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -79 8 1 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -80 8 1 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -81 8 1 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -82 8 1 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -83 8 1 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -42 8 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -43 8 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -44 8 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -45 8 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -46 8 1 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -47 8 1 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -48 8 1 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -49 8 1 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -50 8 1 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -51 8 1 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -52 8 1 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -53 8 1 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -54 8 1 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -55 8 1 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -56 8 1 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -57 8 1 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -58 8 1 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -59 8 1 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -60 8 1 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -61 8 1 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -62 8 1 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -21 8 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -22 8 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -23 8 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -24 8 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -25 8 2 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -26 8 2 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -27 8 2 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -28 8 2 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -29 8 2 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -30 8 2 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -31 8 2 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -32 8 2 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -33 8 2 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -34 8 2 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -35 8 2 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -36 8 2 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -37 8 2 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -38 8 2 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -39 8 2 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -40 8 2 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -41 8 2 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 8 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -1 8 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -2 8 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -3 8 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -4 8 2 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -5 8 2 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -6 8 2 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -7 8 2 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -8 8 2 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -9 8 2 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -10 8 2 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -11 8 2 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -12 8 2 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -13 8 2 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -14 8 2 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -15 8 2 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -16 8 2 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -17 8 2 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -18 8 2 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -19 8 2 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -20 8 2 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -21 8 1 H-1 nu-fission 0.00e+00 0.00e+00 -22 8 1 O-16 nu-fission 0.00e+00 0.00e+00 -23 8 1 B-10 nu-fission 0.00e+00 0.00e+00 -24 8 1 B-11 nu-fission 0.00e+00 0.00e+00 -25 8 1 Fe-54 nu-fission 0.00e+00 0.00e+00 -26 8 1 Fe-56 nu-fission 0.00e+00 0.00e+00 -27 8 1 Fe-57 nu-fission 0.00e+00 0.00e+00 -28 8 1 Fe-58 nu-fission 0.00e+00 0.00e+00 -29 8 1 Ni-58 nu-fission 0.00e+00 0.00e+00 -30 8 1 Ni-60 nu-fission 0.00e+00 0.00e+00 -31 8 1 Ni-61 nu-fission 0.00e+00 0.00e+00 -32 8 1 Ni-62 nu-fission 0.00e+00 0.00e+00 -33 8 1 Ni-64 nu-fission 0.00e+00 0.00e+00 -34 8 1 Mn-55 nu-fission 0.00e+00 0.00e+00 -35 8 1 Si-28 nu-fission 0.00e+00 0.00e+00 -36 8 1 Si-29 nu-fission 0.00e+00 0.00e+00 -37 8 1 Si-30 nu-fission 0.00e+00 0.00e+00 -38 8 1 Cr-50 nu-fission 0.00e+00 0.00e+00 -39 8 1 Cr-52 nu-fission 0.00e+00 0.00e+00 -40 8 1 Cr-53 nu-fission 0.00e+00 0.00e+00 -41 8 1 Cr-54 nu-fission 0.00e+00 0.00e+00 -0 8 2 H-1 nu-fission 0.00e+00 0.00e+00 -1 8 2 O-16 nu-fission 0.00e+00 0.00e+00 -2 8 2 B-10 nu-fission 0.00e+00 0.00e+00 -3 8 2 B-11 nu-fission 0.00e+00 0.00e+00 -4 8 2 Fe-54 nu-fission 0.00e+00 0.00e+00 -5 8 2 Fe-56 nu-fission 0.00e+00 0.00e+00 -6 8 2 Fe-57 nu-fission 0.00e+00 0.00e+00 -7 8 2 Fe-58 nu-fission 0.00e+00 0.00e+00 -8 8 2 Ni-58 nu-fission 0.00e+00 0.00e+00 -9 8 2 Ni-60 nu-fission 0.00e+00 0.00e+00 -10 8 2 Ni-61 nu-fission 0.00e+00 0.00e+00 -11 8 2 Ni-62 nu-fission 0.00e+00 0.00e+00 -12 8 2 Ni-64 nu-fission 0.00e+00 0.00e+00 -13 8 2 Mn-55 nu-fission 0.00e+00 0.00e+00 -14 8 2 Si-28 nu-fission 0.00e+00 0.00e+00 -15 8 2 Si-29 nu-fission 0.00e+00 0.00e+00 -16 8 2 Si-30 nu-fission 0.00e+00 0.00e+00 -17 8 2 Cr-50 nu-fission 0.00e+00 0.00e+00 -18 8 2 Cr-52 nu-fission 0.00e+00 0.00e+00 -19 8 2 Cr-53 nu-fission 0.00e+00 0.00e+00 -20 8 2 Cr-54 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -21 9 1 H-1 ((total - scatter-1) / flux) 1.51e-01 4.81e-01 -22 9 1 O-16 ((total - scatter-1) / flux) 1.16e-01 1.14e-01 -23 9 1 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -24 9 1 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -25 9 1 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -26 9 1 Fe-56 ((total - scatter-1) / flux) 1.86e-01 2.00e-01 -27 9 1 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -28 9 1 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -29 9 1 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -30 9 1 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -31 9 1 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -32 9 1 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -33 9 1 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -34 9 1 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -35 9 1 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -36 9 1 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -37 9 1 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -38 9 1 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -39 9 1 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -40 9 1 Cr-53 ((total - scatter-1) / flux) 1.47e-01 1.40e-01 -41 9 1 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -0 9 2 H-1 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -1 9 2 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -2 9 2 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -3 9 2 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -4 9 2 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -5 9 2 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -6 9 2 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -7 9 2 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -8 9 2 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -9 9 2 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -10 9 2 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -11 9 2 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -12 9 2 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -13 9 2 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -14 9 2 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -15 9 2 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -16 9 2 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -17 9 2 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -18 9 2 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -19 9 2 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -20 9 2 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -21 9 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -22 9 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -23 9 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -24 9 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 -25 9 1 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 -26 9 1 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 -27 9 1 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 -28 9 1 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 -29 9 1 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 -30 9 1 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 -31 9 1 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 -32 9 1 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 -33 9 1 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 -34 9 1 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 -35 9 1 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 -36 9 1 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 -37 9 1 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 -38 9 1 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 -39 9 1 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 -40 9 1 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 -41 9 1 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 -0 9 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -1 9 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -2 9 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -3 9 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 -4 9 2 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 -5 9 2 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 -6 9 2 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 -7 9 2 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 -8 9 2 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 -9 9 2 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 -10 9 2 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 -11 9 2 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 -12 9 2 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 -13 9 2 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 -14 9 2 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 -15 9 2 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 -16 9 2 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 -17 9 2 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 -18 9 2 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 -19 9 2 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 -20 9 2 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -63 9 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 1.51e-01 4.81e-01 -64 9 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 1.16e-01 1.14e-01 -65 9 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -66 9 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -67 9 1 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -68 9 1 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 1.86e-01 2.00e-01 -69 9 1 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -70 9 1 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -71 9 1 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -72 9 1 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -73 9 1 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -74 9 1 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -75 9 1 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -76 9 1 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -77 9 1 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -78 9 1 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -79 9 1 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -80 9 1 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -81 9 1 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -82 9 1 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 1.47e-01 1.40e-01 -83 9 1 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -42 9 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -43 9 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -44 9 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -45 9 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -46 9 1 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -47 9 1 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -48 9 1 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -49 9 1 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -50 9 1 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -51 9 1 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -52 9 1 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -53 9 1 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -54 9 1 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -55 9 1 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -56 9 1 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -57 9 1 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -58 9 1 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -59 9 1 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -60 9 1 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -61 9 1 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -62 9 1 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -21 9 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -22 9 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -23 9 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -24 9 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -25 9 2 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -26 9 2 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -27 9 2 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -28 9 2 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -29 9 2 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -30 9 2 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -31 9 2 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -32 9 2 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -33 9 2 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -34 9 2 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -35 9 2 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -36 9 2 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -37 9 2 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -38 9 2 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -39 9 2 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -40 9 2 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -41 9 2 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 9 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -1 9 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -2 9 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -3 9 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -4 9 2 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -5 9 2 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -6 9 2 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -7 9 2 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -8 9 2 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -9 9 2 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -10 9 2 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -11 9 2 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -12 9 2 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -13 9 2 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -14 9 2 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -15 9 2 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -16 9 2 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -17 9 2 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -18 9 2 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -19 9 2 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -20 9 2 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -21 9 1 H-1 nu-fission 0.00e+00 0.00e+00 -22 9 1 O-16 nu-fission 0.00e+00 0.00e+00 -23 9 1 B-10 nu-fission 0.00e+00 0.00e+00 -24 9 1 B-11 nu-fission 0.00e+00 0.00e+00 -25 9 1 Fe-54 nu-fission 0.00e+00 0.00e+00 -26 9 1 Fe-56 nu-fission 0.00e+00 0.00e+00 -27 9 1 Fe-57 nu-fission 0.00e+00 0.00e+00 -28 9 1 Fe-58 nu-fission 0.00e+00 0.00e+00 -29 9 1 Ni-58 nu-fission 0.00e+00 0.00e+00 -30 9 1 Ni-60 nu-fission 0.00e+00 0.00e+00 -31 9 1 Ni-61 nu-fission 0.00e+00 0.00e+00 -32 9 1 Ni-62 nu-fission 0.00e+00 0.00e+00 -33 9 1 Ni-64 nu-fission 0.00e+00 0.00e+00 -34 9 1 Mn-55 nu-fission 0.00e+00 0.00e+00 -35 9 1 Si-28 nu-fission 0.00e+00 0.00e+00 -36 9 1 Si-29 nu-fission 0.00e+00 0.00e+00 -37 9 1 Si-30 nu-fission 0.00e+00 0.00e+00 -38 9 1 Cr-50 nu-fission 0.00e+00 0.00e+00 -39 9 1 Cr-52 nu-fission 0.00e+00 0.00e+00 -40 9 1 Cr-53 nu-fission 0.00e+00 0.00e+00 -41 9 1 Cr-54 nu-fission 0.00e+00 0.00e+00 -0 9 2 H-1 nu-fission 0.00e+00 0.00e+00 -1 9 2 O-16 nu-fission 0.00e+00 0.00e+00 -2 9 2 B-10 nu-fission 0.00e+00 0.00e+00 -3 9 2 B-11 nu-fission 0.00e+00 0.00e+00 -4 9 2 Fe-54 nu-fission 0.00e+00 0.00e+00 -5 9 2 Fe-56 nu-fission 0.00e+00 0.00e+00 -6 9 2 Fe-57 nu-fission 0.00e+00 0.00e+00 -7 9 2 Fe-58 nu-fission 0.00e+00 0.00e+00 -8 9 2 Ni-58 nu-fission 0.00e+00 0.00e+00 -9 9 2 Ni-60 nu-fission 0.00e+00 0.00e+00 -10 9 2 Ni-61 nu-fission 0.00e+00 0.00e+00 -11 9 2 Ni-62 nu-fission 0.00e+00 0.00e+00 -12 9 2 Ni-64 nu-fission 0.00e+00 0.00e+00 -13 9 2 Mn-55 nu-fission 0.00e+00 0.00e+00 -14 9 2 Si-28 nu-fission 0.00e+00 0.00e+00 -15 9 2 Si-29 nu-fission 0.00e+00 0.00e+00 -16 9 2 Si-30 nu-fission 0.00e+00 0.00e+00 -17 9 2 Cr-50 nu-fission 0.00e+00 0.00e+00 -18 9 2 Cr-52 nu-fission 0.00e+00 0.00e+00 -19 9 2 Cr-53 nu-fission 0.00e+00 0.00e+00 -20 9 2 Cr-54 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -21 10 1 H-1 ((total - scatter-1) / flux) 1.24e-01 5.41e-01 -22 10 1 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -23 10 1 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -24 10 1 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -25 10 1 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -26 10 1 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -27 10 1 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -28 10 1 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -29 10 1 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -30 10 1 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -31 10 1 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -32 10 1 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -33 10 1 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -34 10 1 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -35 10 1 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -36 10 1 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -37 10 1 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -38 10 1 Cr-50 ((total - scatter-1) / flux) 1.12e-01 1.38e-01 -39 10 1 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -40 10 1 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -41 10 1 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -0 10 2 H-1 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -1 10 2 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -2 10 2 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -3 10 2 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -4 10 2 Fe-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -5 10 2 Fe-56 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -6 10 2 Fe-57 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -7 10 2 Fe-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -8 10 2 Ni-58 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -9 10 2 Ni-60 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -10 10 2 Ni-61 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -11 10 2 Ni-62 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -12 10 2 Ni-64 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -13 10 2 Mn-55 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -14 10 2 Si-28 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -15 10 2 Si-29 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -16 10 2 Si-30 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -17 10 2 Cr-50 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -18 10 2 Cr-52 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -19 10 2 Cr-53 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -20 10 2 Cr-54 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -21 10 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -22 10 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -23 10 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -24 10 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 -25 10 1 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 -26 10 1 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 -27 10 1 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 -28 10 1 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 -29 10 1 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 -30 10 1 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 -31 10 1 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 -32 10 1 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 -33 10 1 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 -34 10 1 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 -35 10 1 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 -36 10 1 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 -37 10 1 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 -38 10 1 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 -39 10 1 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 -40 10 1 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 -41 10 1 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 -0 10 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -1 10 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -2 10 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -3 10 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 -4 10 2 Fe-54 (nu-fission / flux) 0.00e+00 0.00e+00 -5 10 2 Fe-56 (nu-fission / flux) 0.00e+00 0.00e+00 -6 10 2 Fe-57 (nu-fission / flux) 0.00e+00 0.00e+00 -7 10 2 Fe-58 (nu-fission / flux) 0.00e+00 0.00e+00 -8 10 2 Ni-58 (nu-fission / flux) 0.00e+00 0.00e+00 -9 10 2 Ni-60 (nu-fission / flux) 0.00e+00 0.00e+00 -10 10 2 Ni-61 (nu-fission / flux) 0.00e+00 0.00e+00 -11 10 2 Ni-62 (nu-fission / flux) 0.00e+00 0.00e+00 -12 10 2 Ni-64 (nu-fission / flux) 0.00e+00 0.00e+00 -13 10 2 Mn-55 (nu-fission / flux) 0.00e+00 0.00e+00 -14 10 2 Si-28 (nu-fission / flux) 0.00e+00 0.00e+00 -15 10 2 Si-29 (nu-fission / flux) 0.00e+00 0.00e+00 -16 10 2 Si-30 (nu-fission / flux) 0.00e+00 0.00e+00 -17 10 2 Cr-50 (nu-fission / flux) 0.00e+00 0.00e+00 -18 10 2 Cr-52 (nu-fission / flux) 0.00e+00 0.00e+00 -19 10 2 Cr-53 (nu-fission / flux) 0.00e+00 0.00e+00 -20 10 2 Cr-54 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -63 10 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 1.24e-01 5.41e-01 -64 10 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -65 10 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -66 10 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -67 10 1 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -68 10 1 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -69 10 1 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -70 10 1 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -71 10 1 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -72 10 1 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -73 10 1 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -74 10 1 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -75 10 1 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -76 10 1 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -77 10 1 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -78 10 1 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -79 10 1 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -80 10 1 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 1.12e-01 1.38e-01 -81 10 1 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -82 10 1 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -83 10 1 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -42 10 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -43 10 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -44 10 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -45 10 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -46 10 1 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -47 10 1 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -48 10 1 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -49 10 1 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -50 10 1 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -51 10 1 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -52 10 1 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -53 10 1 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -54 10 1 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -55 10 1 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -56 10 1 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -57 10 1 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -58 10 1 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -59 10 1 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -60 10 1 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -61 10 1 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -62 10 1 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -21 10 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -22 10 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -23 10 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -24 10 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -25 10 2 1 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -26 10 2 1 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -27 10 2 1 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -28 10 2 1 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -29 10 2 1 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -30 10 2 1 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -31 10 2 1 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -32 10 2 1 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -33 10 2 1 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -34 10 2 1 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -35 10 2 1 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -36 10 2 1 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -37 10 2 1 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -38 10 2 1 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -39 10 2 1 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -40 10 2 1 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -41 10 2 1 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 10 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -1 10 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -2 10 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -3 10 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -4 10 2 2 Fe-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -5 10 2 2 Fe-56 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -6 10 2 2 Fe-57 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -7 10 2 2 Fe-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -8 10 2 2 Ni-58 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -9 10 2 2 Ni-60 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -10 10 2 2 Ni-61 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -11 10 2 2 Ni-62 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -12 10 2 2 Ni-64 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -13 10 2 2 Mn-55 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -14 10 2 2 Si-28 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -15 10 2 2 Si-29 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -16 10 2 2 Si-30 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -17 10 2 2 Cr-50 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -18 10 2 2 Cr-52 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -19 10 2 2 Cr-53 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -20 10 2 2 Cr-54 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -21 10 1 H-1 nu-fission 0.00e+00 0.00e+00 -22 10 1 O-16 nu-fission 0.00e+00 0.00e+00 -23 10 1 B-10 nu-fission 0.00e+00 0.00e+00 -24 10 1 B-11 nu-fission 0.00e+00 0.00e+00 -25 10 1 Fe-54 nu-fission 0.00e+00 0.00e+00 -26 10 1 Fe-56 nu-fission 0.00e+00 0.00e+00 -27 10 1 Fe-57 nu-fission 0.00e+00 0.00e+00 -28 10 1 Fe-58 nu-fission 0.00e+00 0.00e+00 -29 10 1 Ni-58 nu-fission 0.00e+00 0.00e+00 -30 10 1 Ni-60 nu-fission 0.00e+00 0.00e+00 -31 10 1 Ni-61 nu-fission 0.00e+00 0.00e+00 -32 10 1 Ni-62 nu-fission 0.00e+00 0.00e+00 -33 10 1 Ni-64 nu-fission 0.00e+00 0.00e+00 -34 10 1 Mn-55 nu-fission 0.00e+00 0.00e+00 -35 10 1 Si-28 nu-fission 0.00e+00 0.00e+00 -36 10 1 Si-29 nu-fission 0.00e+00 0.00e+00 -37 10 1 Si-30 nu-fission 0.00e+00 0.00e+00 -38 10 1 Cr-50 nu-fission 0.00e+00 0.00e+00 -39 10 1 Cr-52 nu-fission 0.00e+00 0.00e+00 -40 10 1 Cr-53 nu-fission 0.00e+00 0.00e+00 -41 10 1 Cr-54 nu-fission 0.00e+00 0.00e+00 -0 10 2 H-1 nu-fission 0.00e+00 0.00e+00 -1 10 2 O-16 nu-fission 0.00e+00 0.00e+00 -2 10 2 B-10 nu-fission 0.00e+00 0.00e+00 -3 10 2 B-11 nu-fission 0.00e+00 0.00e+00 -4 10 2 Fe-54 nu-fission 0.00e+00 0.00e+00 -5 10 2 Fe-56 nu-fission 0.00e+00 0.00e+00 -6 10 2 Fe-57 nu-fission 0.00e+00 0.00e+00 -7 10 2 Fe-58 nu-fission 0.00e+00 0.00e+00 -8 10 2 Ni-58 nu-fission 0.00e+00 0.00e+00 -9 10 2 Ni-60 nu-fission 0.00e+00 0.00e+00 -10 10 2 Ni-61 nu-fission 0.00e+00 0.00e+00 -11 10 2 Ni-62 nu-fission 0.00e+00 0.00e+00 -12 10 2 Ni-64 nu-fission 0.00e+00 0.00e+00 -13 10 2 Mn-55 nu-fission 0.00e+00 0.00e+00 -14 10 2 Si-28 nu-fission 0.00e+00 0.00e+00 -15 10 2 Si-29 nu-fission 0.00e+00 0.00e+00 -16 10 2 Si-30 nu-fission 0.00e+00 0.00e+00 -17 10 2 Cr-50 nu-fission 0.00e+00 0.00e+00 -18 10 2 Cr-52 nu-fission 0.00e+00 0.00e+00 -19 10 2 Cr-53 nu-fission 0.00e+00 0.00e+00 -20 10 2 Cr-54 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -9 11 1 H-1 ((total - scatter-1) / flux) 1.31e-01 4.76e-01 -10 11 1 O-16 ((total - scatter-1) / flux) 2.87e-02 4.30e-02 -11 11 1 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -12 11 1 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -13 11 1 Zr-90 ((total - scatter-1) / flux) 2.20e-02 4.00e-02 -14 11 1 Zr-91 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -15 11 1 Zr-92 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -16 11 1 Zr-94 ((total - scatter-1) / flux) 4.19e-03 8.73e-02 -17 11 1 Zr-96 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -0 11 2 H-1 ((total - scatter-1) / flux) 6.87e-01 1.24e+00 -1 11 2 O-16 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -2 11 2 B-10 ((total - scatter-1) / flux) 4.29e-02 6.07e-02 -3 11 2 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -4 11 2 Zr-90 ((total - scatter-1) / flux) 3.96e-02 1.05e-01 -5 11 2 Zr-91 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -6 11 2 Zr-92 ((total - scatter-1) / flux) 8.42e-02 1.03e-01 -7 11 2 Zr-94 ((total - scatter-1) / flux) 9.20e-02 1.26e-01 -8 11 2 Zr-96 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -9 11 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -10 11 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -11 11 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -12 11 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 -13 11 1 Zr-90 (nu-fission / flux) 0.00e+00 0.00e+00 -14 11 1 Zr-91 (nu-fission / flux) 0.00e+00 0.00e+00 -15 11 1 Zr-92 (nu-fission / flux) 0.00e+00 0.00e+00 -16 11 1 Zr-94 (nu-fission / flux) 0.00e+00 0.00e+00 -17 11 1 Zr-96 (nu-fission / flux) 0.00e+00 0.00e+00 -0 11 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -1 11 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -2 11 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -3 11 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 -4 11 2 Zr-90 (nu-fission / flux) 0.00e+00 0.00e+00 -5 11 2 Zr-91 (nu-fission / flux) 0.00e+00 0.00e+00 -6 11 2 Zr-92 (nu-fission / flux) 0.00e+00 0.00e+00 -7 11 2 Zr-94 (nu-fission / flux) 0.00e+00 0.00e+00 -8 11 2 Zr-96 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -27 11 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 9.96e-02 4.43e-01 -28 11 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 2.87e-02 4.30e-02 -29 11 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -30 11 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -31 11 1 1 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 2.20e-02 4.00e-02 -32 11 1 1 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -33 11 1 1 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -34 11 1 1 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 4.19e-03 8.73e-02 -35 11 1 1 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -18 11 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 3.19e-02 4.51e-02 -19 11 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -20 11 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -21 11 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -22 11 1 2 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -23 11 1 2 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -24 11 1 2 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -25 11 1 2 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -26 11 1 2 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -9 11 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -10 11 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -11 11 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -12 11 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -13 11 2 1 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -14 11 2 1 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -15 11 2 1 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -16 11 2 1 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -17 11 2 1 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 11 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 6.87e-01 1.24e+00 -1 11 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -2 11 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -3 11 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -4 11 2 2 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 3.96e-02 1.05e-01 -5 11 2 2 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -6 11 2 2 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 8.42e-02 1.03e-01 -7 11 2 2 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 9.20e-02 1.26e-01 -8 11 2 2 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -9 11 1 H-1 nu-fission 0.00e+00 0.00e+00 -10 11 1 O-16 nu-fission 0.00e+00 0.00e+00 -11 11 1 B-10 nu-fission 0.00e+00 0.00e+00 -12 11 1 B-11 nu-fission 0.00e+00 0.00e+00 -13 11 1 Zr-90 nu-fission 0.00e+00 0.00e+00 -14 11 1 Zr-91 nu-fission 0.00e+00 0.00e+00 -15 11 1 Zr-92 nu-fission 0.00e+00 0.00e+00 -16 11 1 Zr-94 nu-fission 0.00e+00 0.00e+00 -17 11 1 Zr-96 nu-fission 0.00e+00 0.00e+00 -0 11 2 H-1 nu-fission 0.00e+00 0.00e+00 -1 11 2 O-16 nu-fission 0.00e+00 0.00e+00 -2 11 2 B-10 nu-fission 0.00e+00 0.00e+00 -3 11 2 B-11 nu-fission 0.00e+00 0.00e+00 -4 11 2 Zr-90 nu-fission 0.00e+00 0.00e+00 -5 11 2 Zr-91 nu-fission 0.00e+00 0.00e+00 -6 11 2 Zr-92 nu-fission 0.00e+00 0.00e+00 -7 11 2 Zr-94 nu-fission 0.00e+00 0.00e+00 -8 11 2 Zr-96 nu-fission 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -9 12 1 H-1 ((total - scatter-1) / flux) 9.89e-02 1.79e-01 -10 12 1 O-16 ((total - scatter-1) / flux) 1.33e-02 2.04e-02 -11 12 1 B-10 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -12 12 1 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -13 12 1 Zr-90 ((total - scatter-1) / flux) 9.00e-02 7.55e-02 -14 12 1 Zr-91 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -15 12 1 Zr-92 ((total - scatter-1) / flux) 3.50e-03 1.70e-02 -16 12 1 Zr-94 ((total - scatter-1) / flux) 4.85e-03 1.63e-02 -17 12 1 Zr-96 ((total - scatter-1) / flux) 2.73e-03 1.75e-02 -0 12 2 H-1 ((total - scatter-1) / flux) 1.26e+00 1.98e+00 -1 12 2 O-16 ((total - scatter-1) / flux) 7.92e-02 1.05e-01 -2 12 2 B-10 ((total - scatter-1) / flux) 1.69e-02 2.39e-02 -3 12 2 B-11 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -4 12 2 Zr-90 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -5 12 2 Zr-91 ((total - scatter-1) / flux) 3.32e-02 4.07e-02 -6 12 2 Zr-92 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -7 12 2 Zr-94 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 -8 12 2 Zr-96 ((total - scatter-1) / flux) 0.00e+00 0.00e+00 material group in nuclide score mean std. dev. -9 12 1 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -10 12 1 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -11 12 1 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -12 12 1 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 -13 12 1 Zr-90 (nu-fission / flux) 0.00e+00 0.00e+00 -14 12 1 Zr-91 (nu-fission / flux) 0.00e+00 0.00e+00 -15 12 1 Zr-92 (nu-fission / flux) 0.00e+00 0.00e+00 -16 12 1 Zr-94 (nu-fission / flux) 0.00e+00 0.00e+00 -17 12 1 Zr-96 (nu-fission / flux) 0.00e+00 0.00e+00 -0 12 2 H-1 (nu-fission / flux) 0.00e+00 0.00e+00 -1 12 2 O-16 (nu-fission / flux) 0.00e+00 0.00e+00 -2 12 2 B-10 (nu-fission / flux) 0.00e+00 0.00e+00 -3 12 2 B-11 (nu-fission / flux) 0.00e+00 0.00e+00 -4 12 2 Zr-90 (nu-fission / flux) 0.00e+00 0.00e+00 -5 12 2 Zr-91 (nu-fission / flux) 0.00e+00 0.00e+00 -6 12 2 Zr-92 (nu-fission / flux) 0.00e+00 0.00e+00 -7 12 2 Zr-94 (nu-fission / flux) 0.00e+00 0.00e+00 -8 12 2 Zr-96 (nu-fission / flux) 0.00e+00 0.00e+00 material group in group out nuclide score mean std. dev. -27 12 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 7.17e-02 1.68e-01 -28 12 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 1.33e-02 2.04e-02 -29 12 1 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -30 12 1 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -31 12 1 1 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 9.00e-02 7.55e-02 -32 12 1 1 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -33 12 1 1 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 3.50e-03 1.70e-02 -34 12 1 1 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 4.85e-03 1.63e-02 -35 12 1 1 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 2.73e-03 1.75e-02 -18 12 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 2.72e-02 2.96e-02 -19 12 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -20 12 1 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -21 12 1 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -22 12 1 2 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -23 12 1 2 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -24 12 1 2 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -25 12 1 2 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -26 12 1 2 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -9 12 2 1 H-1 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -10 12 2 1 O-16 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -11 12 2 1 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -12 12 2 1 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -13 12 2 1 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -14 12 2 1 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -15 12 2 1 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -16 12 2 1 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -17 12 2 1 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -0 12 2 2 H-1 ((nu-scatter-0 - scatter-1) / flux) 1.24e+00 1.96e+00 -1 12 2 2 O-16 ((nu-scatter-0 - scatter-1) / flux) 7.92e-02 1.05e-01 -2 12 2 2 B-10 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -3 12 2 2 B-11 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -4 12 2 2 Zr-90 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -5 12 2 2 Zr-91 ((nu-scatter-0 - scatter-1) / flux) 3.32e-02 4.07e-02 -6 12 2 2 Zr-92 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -7 12 2 2 Zr-94 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 -8 12 2 2 Zr-96 ((nu-scatter-0 - scatter-1) / flux) 0.00e+00 0.00e+00 material group out nuclide score mean std. dev. -9 12 1 H-1 nu-fission 0.00e+00 0.00e+00 -10 12 1 O-16 nu-fission 0.00e+00 0.00e+00 -11 12 1 B-10 nu-fission 0.00e+00 0.00e+00 -12 12 1 B-11 nu-fission 0.00e+00 0.00e+00 -13 12 1 Zr-90 nu-fission 0.00e+00 0.00e+00 -14 12 1 Zr-91 nu-fission 0.00e+00 0.00e+00 -15 12 1 Zr-92 nu-fission 0.00e+00 0.00e+00 -16 12 1 Zr-94 nu-fission 0.00e+00 0.00e+00 -17 12 1 Zr-96 nu-fission 0.00e+00 0.00e+00 -0 12 2 H-1 nu-fission 0.00e+00 0.00e+00 -1 12 2 O-16 nu-fission 0.00e+00 0.00e+00 -2 12 2 B-10 nu-fission 0.00e+00 0.00e+00 -3 12 2 B-11 nu-fission 0.00e+00 0.00e+00 -4 12 2 Zr-90 nu-fission 0.00e+00 0.00e+00 -5 12 2 Zr-91 nu-fission 0.00e+00 0.00e+00 -6 12 2 Zr-92 nu-fission 0.00e+00 0.00e+00 -7 12 2 Zr-94 nu-fission 0.00e+00 0.00e+00 -8 12 2 Zr-96 nu-fission 0.00e+00 0.00e+00 \ No newline at end of file + material group in nuclide mean std. dev. +34 1 1 U-234 0.000173 0.000173 +35 1 1 U-235 0.010677 0.001889 +36 1 1 U-236 0.002390 0.001055 +37 1 1 U-238 0.213680 0.013272 +38 1 1 Np-237 0.000000 0.000000 +39 1 1 Pu-238 0.000000 0.000000 +40 1 1 Pu-239 0.002911 0.000639 +41 1 1 Pu-240 0.004426 0.000806 +42 1 1 Pu-241 0.000690 0.000387 +43 1 1 Pu-242 0.000000 0.000000 +44 1 1 Am-241 0.000173 0.000173 +45 1 1 Am-242m 0.000000 0.000000 +46 1 1 Am-243 0.000000 0.000000 +47 1 1 Cm-242 0.000000 0.000000 +48 1 1 Cm-243 0.000000 0.000000 +49 1 1 Cm-244 0.000000 0.000000 +50 1 1 Cm-245 0.000000 0.000000 +51 1 1 Mo-95 0.000000 0.000000 +52 1 1 Tc-99 0.000173 0.000173 +53 1 1 Ru-101 0.000238 0.000254 +54 1 1 Ru-103 0.000002 0.000243 +55 1 1 Ag-109 0.000000 0.000000 +56 1 1 Xe-135 0.000000 0.000000 +57 1 1 Cs-133 0.000347 0.000213 +58 1 1 Nd-143 0.000447 0.000292 +59 1 1 Nd-145 0.000564 0.000294 +60 1 1 Sm-147 0.000000 0.000000 +61 1 1 Sm-149 0.000000 0.000000 +62 1 1 Sm-150 0.000472 0.000239 +63 1 1 Sm-151 0.000000 0.000000 +64 1 1 Sm-152 0.000492 0.000352 +65 1 1 Eu-153 0.000173 0.000173 +66 1 1 Gd-155 0.000000 0.000000 +67 1 1 O-16 0.134715 0.009801 +0 1 2 U-234 0.000000 0.000000 +1 1 2 U-235 0.199907 0.007776 +2 1 2 U-236 0.001501 0.002037 +3 1 2 U-238 0.255355 0.029743 +4 1 2 Np-237 0.000000 0.000000 +5 1 2 Pu-238 0.000000 0.000000 +6 1 2 Pu-239 0.160378 0.011366 +7 1 2 Pu-240 0.007920 0.003710 +8 1 2 Pu-241 0.017820 0.003733 +9 1 2 Pu-242 0.000000 0.000000 +10 1 2 Am-241 0.000000 0.000000 +11 1 2 Am-242m 0.000000 0.000000 +12 1 2 Am-243 0.000000 0.000000 +13 1 2 Cm-242 0.000000 0.000000 +14 1 2 Cm-243 0.000000 0.000000 +15 1 2 Cm-244 0.000000 0.000000 +16 1 2 Cm-245 0.000000 0.000000 +17 1 2 Mo-95 0.000000 0.000000 +18 1 2 Tc-99 0.000000 0.000000 +19 1 2 Ru-101 0.000000 0.000000 +20 1 2 Ru-103 0.000000 0.000000 +21 1 2 Ag-109 0.000000 0.000000 +22 1 2 Xe-135 0.013860 0.003976 +23 1 2 Cs-133 0.000000 0.000000 +24 1 2 Nd-143 0.003960 0.002427 +25 1 2 Nd-145 0.000000 0.000000 +26 1 2 Sm-147 0.000000 0.000000 +27 1 2 Sm-149 0.001980 0.001981 +28 1 2 Sm-150 0.000000 0.000000 +29 1 2 Sm-151 0.001980 0.001981 +30 1 2 Sm-152 0.000000 0.000000 +31 1 2 Eu-153 0.000000 0.000000 +32 1 2 Gd-155 0.000000 0.000000 +33 1 2 O-16 0.196946 0.014729 material group in nuclide mean std. dev. +34 1 1 U-234 7.274440e-06 4.419477e-07 +35 1 1 U-235 9.587803e-03 5.936922e-04 +36 1 1 U-236 7.566099e-05 7.523935e-06 +37 1 1 U-238 7.178367e-03 6.505680e-04 +38 1 1 Np-237 1.315682e-05 8.036501e-07 +39 1 1 Pu-238 7.746151e-06 3.992835e-07 +40 1 1 Pu-239 3.805294e-03 3.637600e-04 +41 1 1 Pu-240 6.941319e-05 4.729737e-06 +42 1 1 Pu-241 1.033844e-03 9.083913e-05 +43 1 1 Pu-242 5.995332e-06 3.821721e-07 +44 1 1 Am-241 1.148585e-06 8.271648e-08 +45 1 1 Am-242m 1.100215e-06 6.159956e-08 +46 1 1 Am-243 8.323826e-07 5.841792e-08 +47 1 1 Cm-242 5.088970e-07 5.258007e-08 +48 1 1 Cm-243 2.245435e-07 1.459025e-08 +49 1 1 Cm-244 2.993206e-07 2.746129e-08 +50 1 1 Cm-245 3.063611e-07 3.057751e-08 +51 1 1 Mo-95 0.000000e+00 0.000000e+00 +52 1 1 Tc-99 0.000000e+00 0.000000e+00 +53 1 1 Ru-101 0.000000e+00 0.000000e+00 +54 1 1 Ru-103 0.000000e+00 0.000000e+00 +55 1 1 Ag-109 0.000000e+00 0.000000e+00 +56 1 1 Xe-135 0.000000e+00 0.000000e+00 +57 1 1 Cs-133 0.000000e+00 0.000000e+00 +58 1 1 Nd-143 0.000000e+00 0.000000e+00 +59 1 1 Nd-145 0.000000e+00 0.000000e+00 +60 1 1 Sm-147 0.000000e+00 0.000000e+00 +61 1 1 Sm-149 0.000000e+00 0.000000e+00 +62 1 1 Sm-150 0.000000e+00 0.000000e+00 +63 1 1 Sm-151 0.000000e+00 0.000000e+00 +64 1 1 Sm-152 0.000000e+00 0.000000e+00 +65 1 1 Eu-153 0.000000e+00 0.000000e+00 +66 1 1 Gd-155 0.000000e+00 0.000000e+00 +67 1 1 O-16 0.000000e+00 0.000000e+00 +0 1 2 U-234 4.408576e-07 2.828309e-08 +1 1 2 U-235 3.768094e-01 2.445671e-02 +2 1 2 U-236 6.097538e-06 3.733038e-07 +3 1 2 U-238 5.353074e-07 3.310544e-08 +4 1 2 Np-237 2.702971e-07 2.098939e-08 +5 1 2 Pu-238 3.463109e-05 2.638394e-06 +6 1 2 Pu-239 2.889643e-01 1.376004e-02 +7 1 2 Pu-240 4.533642e-06 2.544289e-07 +8 1 2 Pu-241 4.809366e-02 2.778345e-03 +9 1 2 Pu-242 8.715325e-08 5.460893e-09 +10 1 2 Am-241 4.611736e-06 2.155039e-07 +11 1 2 Am-242m 1.428047e-04 8.436437e-06 +12 1 2 Am-243 7.883895e-08 4.734503e-09 +13 1 2 Cm-242 9.731025e-07 6.143750e-08 +14 1 2 Cm-243 1.825830e-06 1.074849e-07 +15 1 2 Cm-244 1.581823e-07 9.938064e-09 +16 1 2 Cm-245 1.213386e-05 8.812019e-07 +17 1 2 Mo-95 0.000000e+00 0.000000e+00 +18 1 2 Tc-99 0.000000e+00 0.000000e+00 +19 1 2 Ru-101 0.000000e+00 0.000000e+00 +20 1 2 Ru-103 0.000000e+00 0.000000e+00 +21 1 2 Ag-109 0.000000e+00 0.000000e+00 +22 1 2 Xe-135 0.000000e+00 0.000000e+00 +23 1 2 Cs-133 0.000000e+00 0.000000e+00 +24 1 2 Nd-143 0.000000e+00 0.000000e+00 +25 1 2 Nd-145 0.000000e+00 0.000000e+00 +26 1 2 Sm-147 0.000000e+00 0.000000e+00 +27 1 2 Sm-149 0.000000e+00 0.000000e+00 +28 1 2 Sm-150 0.000000e+00 0.000000e+00 +29 1 2 Sm-151 0.000000e+00 0.000000e+00 +30 1 2 Sm-152 0.000000e+00 0.000000e+00 +31 1 2 Eu-153 0.000000e+00 0.000000e+00 +32 1 2 Gd-155 0.000000e+00 0.000000e+00 +33 1 2 O-16 0.000000e+00 0.000000e+00 material group in group out nuclide moment mean std. dev. moment +102 1 1 1 U-234 P0 0.000000 0.000000 P0 +103 1 1 1 U-235 P0 0.003226 0.001139 P0 +104 1 1 1 U-236 P0 0.001697 0.000923 P0 +105 1 1 1 U-238 P0 0.194620 0.013297 P0 +106 1 1 1 Np-237 P0 0.000000 0.000000 P0 +107 1 1 1 Pu-238 P0 0.000000 0.000000 P0 +108 1 1 1 Pu-239 P0 0.001005 0.000477 P0 +109 1 1 1 Pu-240 P0 0.001307 0.000295 P0 +110 1 1 1 Pu-241 P0 0.000344 0.000244 P0 +111 1 1 1 Pu-242 P0 0.000000 0.000000 P0 +112 1 1 1 Am-241 P0 0.000000 0.000000 P0 +113 1 1 1 Am-242m P0 0.000000 0.000000 P0 +114 1 1 1 Am-243 P0 0.000000 0.000000 P0 +115 1 1 1 Cm-242 P0 0.000000 0.000000 P0 +116 1 1 1 Cm-243 P0 0.000000 0.000000 P0 +117 1 1 1 Cm-244 P0 0.000000 0.000000 P0 +118 1 1 1 Cm-245 P0 0.000000 0.000000 P0 +119 1 1 1 Mo-95 P0 0.000000 0.000000 P0 +120 1 1 1 Tc-99 P0 0.000000 0.000000 P0 +121 1 1 1 Ru-101 P0 0.000238 0.000254 P0 +122 1 1 1 Ru-103 P0 0.000002 0.000243 P0 +123 1 1 1 Ag-109 P0 0.000000 0.000000 P0 +124 1 1 1 Xe-135 P0 0.000000 0.000000 P0 +125 1 1 1 Cs-133 P0 0.000000 0.000000 P0 +126 1 1 1 Nd-143 P0 0.000447 0.000292 P0 +127 1 1 1 Nd-145 P0 0.000564 0.000294 P0 +128 1 1 1 Sm-147 P0 0.000000 0.000000 P0 +129 1 1 1 Sm-149 P0 0.000000 0.000000 P0 +130 1 1 1 Sm-150 P0 0.000299 0.000238 P0 +131 1 1 1 Sm-151 P0 0.000000 0.000000 P0 +132 1 1 1 Sm-152 P0 0.000492 0.000352 P0 +133 1 1 1 Eu-153 P0 0.000000 0.000000 P0 +134 1 1 1 Gd-155 P0 0.000000 0.000000 P0 +135 1 1 1 O-16 P0 0.133156 0.009821 P0 +68 1 1 2 U-234 P0 0.000000 0.000000 P0 +69 1 1 2 U-235 P0 0.000000 0.000000 P0 +70 1 1 2 U-236 P0 0.000000 0.000000 P0 +71 1 1 2 U-238 P0 0.000173 0.000173 P0 +72 1 1 2 Np-237 P0 0.000000 0.000000 P0 +73 1 1 2 Pu-238 P0 0.000000 0.000000 P0 +74 1 1 2 Pu-239 P0 0.000000 0.000000 P0 +75 1 1 2 Pu-240 P0 0.000000 0.000000 P0 +76 1 1 2 Pu-241 P0 0.000000 0.000000 P0 +77 1 1 2 Pu-242 P0 0.000000 0.000000 P0 +78 1 1 2 Am-241 P0 0.000000 0.000000 P0 +79 1 1 2 Am-242m P0 0.000000 0.000000 P0 +80 1 1 2 Am-243 P0 0.000000 0.000000 P0 +81 1 1 2 Cm-242 P0 0.000000 0.000000 P0 +82 1 1 2 Cm-243 P0 0.000000 0.000000 P0 +83 1 1 2 Cm-244 P0 0.000000 0.000000 P0 +84 1 1 2 Cm-245 P0 0.000000 0.000000 P0 +85 1 1 2 Mo-95 P0 0.000000 0.000000 P0 +86 1 1 2 Tc-99 P0 0.000000 0.000000 P0 +87 1 1 2 Ru-101 P0 0.000000 0.000000 P0 +88 1 1 2 Ru-103 P0 0.000000 0.000000 P0 +89 1 1 2 Ag-109 P0 0.000000 0.000000 P0 +90 1 1 2 Xe-135 P0 0.000000 0.000000 P0 +91 1 1 2 Cs-133 P0 0.000000 0.000000 P0 +92 1 1 2 Nd-143 P0 0.000000 0.000000 P0 +93 1 1 2 Nd-145 P0 0.000000 0.000000 P0 +94 1 1 2 Sm-147 P0 0.000000 0.000000 P0 +95 1 1 2 Sm-149 P0 0.000000 0.000000 P0 +96 1 1 2 Sm-150 P0 0.000000 0.000000 P0 +97 1 1 2 Sm-151 P0 0.000000 0.000000 P0 +98 1 1 2 Sm-152 P0 0.000000 0.000000 P0 +99 1 1 2 Eu-153 P0 0.000000 0.000000 P0 +100 1 1 2 Gd-155 P0 0.000000 0.000000 P0 +101 1 1 2 O-16 P0 0.001386 0.000446 P0 +34 1 2 1 U-234 P0 0.000000 0.000000 P0 +35 1 2 1 U-235 P0 0.000000 0.000000 P0 +36 1 2 1 U-236 P0 0.000000 0.000000 P0 +37 1 2 1 U-238 P0 0.000000 0.000000 P0 +38 1 2 1 Np-237 P0 0.000000 0.000000 P0 +39 1 2 1 Pu-238 P0 0.000000 0.000000 P0 +40 1 2 1 Pu-239 P0 0.000000 0.000000 P0 +41 1 2 1 Pu-240 P0 0.000000 0.000000 P0 +42 1 2 1 Pu-241 P0 0.000000 0.000000 P0 +43 1 2 1 Pu-242 P0 0.000000 0.000000 P0 +44 1 2 1 Am-241 P0 0.000000 0.000000 P0 +45 1 2 1 Am-242m P0 0.000000 0.000000 P0 +46 1 2 1 Am-243 P0 0.000000 0.000000 P0 +47 1 2 1 Cm-242 P0 0.000000 0.000000 P0 +48 1 2 1 Cm-243 P0 0.000000 0.000000 P0 +49 1 2 1 Cm-244 P0 0.000000 0.000000 P0 +50 1 2 1 Cm-245 P0 0.000000 0.000000 P0 +51 1 2 1 Mo-95 P0 0.000000 0.000000 P0 +52 1 2 1 Tc-99 P0 0.000000 0.000000 P0 +53 1 2 1 Ru-101 P0 0.000000 0.000000 P0 +54 1 2 1 Ru-103 P0 0.000000 0.000000 P0 +55 1 2 1 Ag-109 P0 0.000000 0.000000 P0 +56 1 2 1 Xe-135 P0 0.000000 0.000000 P0 +57 1 2 1 Cs-133 P0 0.000000 0.000000 P0 +58 1 2 1 Nd-143 P0 0.000000 0.000000 P0 +59 1 2 1 Nd-145 P0 0.000000 0.000000 P0 +60 1 2 1 Sm-147 P0 0.000000 0.000000 P0 +61 1 2 1 Sm-149 P0 0.000000 0.000000 P0 +62 1 2 1 Sm-150 P0 0.000000 0.000000 P0 +63 1 2 1 Sm-151 P0 0.000000 0.000000 P0 +64 1 2 1 Sm-152 P0 0.000000 0.000000 P0 +65 1 2 1 Eu-153 P0 0.000000 0.000000 P0 +66 1 2 1 Gd-155 P0 0.000000 0.000000 P0 +67 1 2 1 O-16 P0 0.000000 0.000000 P0 +0 1 2 2 U-234 P0 0.000000 0.000000 P0 +1 1 2 2 U-235 P0 0.003889 0.003962 P0 +2 1 2 2 U-236 P0 0.001501 0.002037 P0 +3 1 2 2 U-238 P0 0.219715 0.025984 P0 +4 1 2 2 Np-237 P0 0.000000 0.000000 P0 +5 1 2 2 Pu-238 P0 0.000000 0.000000 P0 +6 1 2 2 Pu-239 P0 0.000000 0.000000 P0 +7 1 2 2 Pu-240 P0 0.000000 0.000000 P0 +8 1 2 2 Pu-241 P0 0.000000 0.000000 P0 +9 1 2 2 Pu-242 P0 0.000000 0.000000 P0 +10 1 2 2 Am-241 P0 0.000000 0.000000 P0 +11 1 2 2 Am-242m P0 0.000000 0.000000 P0 +12 1 2 2 Am-243 P0 0.000000 0.000000 P0 +13 1 2 2 Cm-242 P0 0.000000 0.000000 P0 +14 1 2 2 Cm-243 P0 0.000000 0.000000 P0 +15 1 2 2 Cm-244 P0 0.000000 0.000000 P0 +16 1 2 2 Cm-245 P0 0.000000 0.000000 P0 +17 1 2 2 Mo-95 P0 0.000000 0.000000 P0 +18 1 2 2 Tc-99 P0 0.000000 0.000000 P0 +19 1 2 2 Ru-101 P0 0.000000 0.000000 P0 +20 1 2 2 Ru-103 P0 0.000000 0.000000 P0 +21 1 2 2 Ag-109 P0 0.000000 0.000000 P0 +22 1 2 2 Xe-135 P0 0.000000 0.000000 P0 +23 1 2 2 Cs-133 P0 0.000000 0.000000 P0 +24 1 2 2 Nd-143 P0 0.000000 0.000000 P0 +25 1 2 2 Nd-145 P0 0.000000 0.000000 P0 +26 1 2 2 Sm-147 P0 0.000000 0.000000 P0 +27 1 2 2 Sm-149 P0 0.000000 0.000000 P0 +28 1 2 2 Sm-150 P0 0.000000 0.000000 P0 +29 1 2 2 Sm-151 P0 0.000000 0.000000 P0 +30 1 2 2 Sm-152 P0 0.000000 0.000000 P0 +31 1 2 2 Eu-153 P0 0.000000 0.000000 P0 +32 1 2 2 Gd-155 P0 0.000000 0.000000 P0 +33 1 2 2 O-16 P0 0.196946 0.014729 P0 material group out nuclide mean std. dev. +34 1 1 U-234 0 0.000000 +35 1 1 U-235 1 0.066362 +36 1 1 U-236 0 0.000000 +37 1 1 U-238 1 0.093082 +38 1 1 Np-237 0 0.000000 +39 1 1 Pu-238 0 0.000000 +40 1 1 Pu-239 1 0.104567 +41 1 1 Pu-240 0 0.000000 +42 1 1 Pu-241 1 0.263696 +43 1 1 Pu-242 0 0.000000 +44 1 1 Am-241 0 0.000000 +45 1 1 Am-242m 0 0.000000 +46 1 1 Am-243 0 0.000000 +47 1 1 Cm-242 0 0.000000 +48 1 1 Cm-243 0 0.000000 +49 1 1 Cm-244 0 0.000000 +50 1 1 Cm-245 0 0.000000 +51 1 1 Mo-95 0 0.000000 +52 1 1 Tc-99 0 0.000000 +53 1 1 Ru-101 0 0.000000 +54 1 1 Ru-103 0 0.000000 +55 1 1 Ag-109 0 0.000000 +56 1 1 Xe-135 0 0.000000 +57 1 1 Cs-133 0 0.000000 +58 1 1 Nd-143 0 0.000000 +59 1 1 Nd-145 0 0.000000 +60 1 1 Sm-147 0 0.000000 +61 1 1 Sm-149 0 0.000000 +62 1 1 Sm-150 0 0.000000 +63 1 1 Sm-151 0 0.000000 +64 1 1 Sm-152 0 0.000000 +65 1 1 Eu-153 0 0.000000 +66 1 1 Gd-155 0 0.000000 +67 1 1 O-16 0 0.000000 +0 1 2 U-234 0 0.000000 +1 1 2 U-235 0 0.000000 +2 1 2 U-236 0 0.000000 +3 1 2 U-238 0 0.000000 +4 1 2 Np-237 0 0.000000 +5 1 2 Pu-238 0 0.000000 +6 1 2 Pu-239 0 0.000000 +7 1 2 Pu-240 0 0.000000 +8 1 2 Pu-241 0 0.000000 +9 1 2 Pu-242 0 0.000000 +10 1 2 Am-241 0 0.000000 +11 1 2 Am-242m 0 0.000000 +12 1 2 Am-243 0 0.000000 +13 1 2 Cm-242 0 0.000000 +14 1 2 Cm-243 0 0.000000 +15 1 2 Cm-244 0 0.000000 +16 1 2 Cm-245 0 0.000000 +17 1 2 Mo-95 0 0.000000 +18 1 2 Tc-99 0 0.000000 +19 1 2 Ru-101 0 0.000000 +20 1 2 Ru-103 0 0.000000 +21 1 2 Ag-109 0 0.000000 +22 1 2 Xe-135 0 0.000000 +23 1 2 Cs-133 0 0.000000 +24 1 2 Nd-143 0 0.000000 +25 1 2 Nd-145 0 0.000000 +26 1 2 Sm-147 0 0.000000 +27 1 2 Sm-149 0 0.000000 +28 1 2 Sm-150 0 0.000000 +29 1 2 Sm-151 0 0.000000 +30 1 2 Sm-152 0 0.000000 +31 1 2 Eu-153 0 0.000000 +32 1 2 Gd-155 0 0.000000 +33 1 2 O-16 0 0.000000 material group in nuclide mean std. dev. +5 2 1 Zr-90 0.104734 0.008915 +6 2 1 Zr-91 0.036155 0.003735 +7 2 1 Zr-92 0.042422 0.003029 +8 2 1 Zr-94 0.046148 0.006251 +9 2 1 Zr-96 0.007794 0.001536 +0 2 2 Zr-90 0.121688 0.034934 +1 2 2 Zr-91 0.061792 0.024317 +2 2 2 Zr-92 0.041633 0.016323 +3 2 2 Zr-94 0.060818 0.021483 +4 2 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. +5 2 1 Zr-90 0 0 +6 2 1 Zr-91 0 0 +7 2 1 Zr-92 0 0 +8 2 1 Zr-94 0 0 +9 2 1 Zr-96 0 0 +0 2 2 Zr-90 0 0 +1 2 2 Zr-91 0 0 +2 2 2 Zr-92 0 0 +3 2 2 Zr-94 0 0 +4 2 2 Zr-96 0 0 material group in group out nuclide moment mean std. dev. moment +15 2 1 1 Zr-90 P0 0.104734 0.008915 P0 +16 2 1 1 Zr-91 P0 0.036155 0.003735 P0 +17 2 1 1 Zr-92 P0 0.042422 0.003029 P0 +18 2 1 1 Zr-94 P0 0.046148 0.006251 P0 +19 2 1 1 Zr-96 P0 0.007794 0.001536 P0 +10 2 1 2 Zr-90 P0 0.000000 0.000000 P0 +11 2 1 2 Zr-91 P0 0.000000 0.000000 P0 +12 2 1 2 Zr-92 P0 0.000000 0.000000 P0 +13 2 1 2 Zr-94 P0 0.000000 0.000000 P0 +14 2 1 2 Zr-96 P0 0.000000 0.000000 P0 +5 2 2 1 Zr-90 P0 0.000000 0.000000 P0 +6 2 2 1 Zr-91 P0 0.000000 0.000000 P0 +7 2 2 1 Zr-92 P0 0.000000 0.000000 P0 +8 2 2 1 Zr-94 P0 0.000000 0.000000 P0 +9 2 2 1 Zr-96 P0 0.000000 0.000000 P0 +0 2 2 2 Zr-90 P0 0.121688 0.034934 P0 +1 2 2 2 Zr-91 P0 0.061792 0.024317 P0 +2 2 2 2 Zr-92 P0 0.041633 0.016323 P0 +3 2 2 2 Zr-94 P0 0.060818 0.021483 P0 +4 2 2 2 Zr-96 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. +5 2 1 Zr-90 0 0 +6 2 1 Zr-91 0 0 +7 2 1 Zr-92 0 0 +8 2 1 Zr-94 0 0 +9 2 1 Zr-96 0 0 +0 2 2 Zr-90 0 0 +1 2 2 Zr-91 0 0 +2 2 2 Zr-92 0 0 +3 2 2 Zr-94 0 0 +4 2 2 Zr-96 0 0 material group in nuclide mean std. dev. +4 3 1 H-1 0.207103 0.023028 +5 3 1 O-16 0.079282 0.005197 +6 3 1 B-10 0.000521 0.000244 +7 3 1 B-11 0.000000 0.000000 +0 3 2 H-1 1.283344 0.250946 +1 3 2 O-16 0.085363 0.014001 +2 3 2 B-10 0.049249 0.008232 +3 3 2 B-11 0.000195 0.001527 material group in nuclide mean std. dev. +4 3 1 H-1 0 0 +5 3 1 O-16 0 0 +6 3 1 B-10 0 0 +7 3 1 B-11 0 0 +0 3 2 H-1 0 0 +1 3 2 O-16 0 0 +2 3 2 B-10 0 0 +3 3 2 B-11 0 0 material group in group out nuclide moment mean std. dev. moment +12 3 1 1 H-1 P0 0.181306 0.022102 P0 +13 3 1 1 O-16 P0 0.078631 0.005044 P0 +14 3 1 1 B-10 P0 0.000000 0.000000 P0 +15 3 1 1 B-11 P0 0.000000 0.000000 P0 +8 3 1 2 H-1 P0 0.025666 0.001582 P0 +9 3 1 2 O-16 P0 0.000521 0.000131 P0 +10 3 1 2 B-10 P0 0.000000 0.000000 P0 +11 3 1 2 B-11 P0 0.000000 0.000000 P0 +4 3 2 1 H-1 P0 0.000000 0.000000 P0 +5 3 2 1 O-16 P0 0.000000 0.000000 P0 +6 3 2 1 B-10 P0 0.000000 0.000000 P0 +7 3 2 1 B-11 P0 0.000000 0.000000 P0 +0 3 2 2 H-1 P0 1.273963 0.250623 P0 +1 3 2 2 O-16 P0 0.085363 0.014001 P0 +2 3 2 2 B-10 P0 0.000000 0.000000 P0 +3 3 2 2 B-11 P0 0.000195 0.001527 P0 material group out nuclide mean std. dev. +4 3 1 H-1 0 0 +5 3 1 O-16 0 0 +6 3 1 B-10 0 0 +7 3 1 B-11 0 0 +0 3 2 H-1 0 0 +1 3 2 O-16 0 0 +2 3 2 B-10 0 0 +3 3 2 B-11 0 0 material group in nuclide mean std. dev. +4 4 1 H-1 0.175242 0.053715 +5 4 1 O-16 0.066545 0.010083 +6 4 1 B-10 0.000570 0.000352 +7 4 1 B-11 0.000089 0.000346 +0 4 2 H-1 1.142895 0.365140 +1 4 2 O-16 0.085141 0.028073 +2 4 2 B-10 0.025923 0.007276 +3 4 2 B-11 0.000000 0.000000 material group in nuclide mean std. dev. +4 4 1 H-1 0 0 +5 4 1 O-16 0 0 +6 4 1 B-10 0 0 +7 4 1 B-11 0 0 +0 4 2 H-1 0 0 +1 4 2 O-16 0 0 +2 4 2 B-10 0 0 +3 4 2 B-11 0 0 material group in group out nuclide moment mean std. dev. moment +12 4 1 1 H-1 P0 0.151295 0.051491 P0 +13 4 1 1 O-16 P0 0.066545 0.010083 P0 +14 4 1 1 B-10 P0 0.000000 0.000000 P0 +15 4 1 1 B-11 P0 0.000089 0.000346 P0 +8 4 1 2 H-1 P0 0.023662 0.003083 P0 +9 4 1 2 O-16 P0 0.000000 0.000000 P0 +10 4 1 2 B-10 P0 0.000000 0.000000 P0 +11 4 1 2 B-11 P0 0.000000 0.000000 P0 +4 4 2 1 H-1 P0 0.000000 0.000000 P0 +5 4 2 1 O-16 P0 0.000000 0.000000 P0 +6 4 2 1 B-10 P0 0.000000 0.000000 P0 +7 4 2 1 B-11 P0 0.000000 0.000000 P0 +0 4 2 2 H-1 P0 1.129933 0.361681 P0 +1 4 2 2 O-16 P0 0.085141 0.028073 P0 +2 4 2 2 B-10 P0 0.000000 0.000000 P0 +3 4 2 2 B-11 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. +4 4 1 H-1 0 0 +5 4 1 O-16 0 0 +6 4 1 B-10 0 0 +7 4 1 B-11 0 0 +0 4 2 H-1 0 0 +1 4 2 O-16 0 0 +2 4 2 B-10 0 0 +3 4 2 B-11 0 0 material group in nuclide mean std. dev. +27 5 1 Fe-54 0 0 +28 5 1 Fe-56 0 0 +29 5 1 Fe-57 0 0 +30 5 1 Fe-58 0 0 +31 5 1 Ni-58 0 0 +32 5 1 Ni-60 0 0 +33 5 1 Ni-61 0 0 +34 5 1 Ni-62 0 0 +35 5 1 Ni-64 0 0 +36 5 1 Mn-55 0 0 +37 5 1 Mo-92 0 0 +38 5 1 Mo-94 0 0 +39 5 1 Mo-95 0 0 +40 5 1 Mo-96 0 0 +41 5 1 Mo-97 0 0 +42 5 1 Mo-98 0 0 +43 5 1 Mo-100 0 0 +44 5 1 Si-28 0 0 +45 5 1 Si-29 0 0 +46 5 1 Si-30 0 0 +47 5 1 Cr-50 0 0 +48 5 1 Cr-52 0 0 +49 5 1 Cr-53 0 0 +50 5 1 Cr-54 0 0 +51 5 1 C-Nat 0 0 +52 5 1 Cu-63 0 0 +53 5 1 Cu-65 0 0 +0 5 2 Fe-54 0 0 +1 5 2 Fe-56 0 0 +2 5 2 Fe-57 0 0 +3 5 2 Fe-58 0 0 +4 5 2 Ni-58 0 0 +5 5 2 Ni-60 0 0 +6 5 2 Ni-61 0 0 +7 5 2 Ni-62 0 0 +8 5 2 Ni-64 0 0 +9 5 2 Mn-55 0 0 +10 5 2 Mo-92 0 0 +11 5 2 Mo-94 0 0 +12 5 2 Mo-95 0 0 +13 5 2 Mo-96 0 0 +14 5 2 Mo-97 0 0 +15 5 2 Mo-98 0 0 +16 5 2 Mo-100 0 0 +17 5 2 Si-28 0 0 +18 5 2 Si-29 0 0 +19 5 2 Si-30 0 0 +20 5 2 Cr-50 0 0 +21 5 2 Cr-52 0 0 +22 5 2 Cr-53 0 0 +23 5 2 Cr-54 0 0 +24 5 2 C-Nat 0 0 +25 5 2 Cu-63 0 0 +26 5 2 Cu-65 0 0 material group in nuclide mean std. dev. +27 5 1 Fe-54 0 0 +28 5 1 Fe-56 0 0 +29 5 1 Fe-57 0 0 +30 5 1 Fe-58 0 0 +31 5 1 Ni-58 0 0 +32 5 1 Ni-60 0 0 +33 5 1 Ni-61 0 0 +34 5 1 Ni-62 0 0 +35 5 1 Ni-64 0 0 +36 5 1 Mn-55 0 0 +37 5 1 Mo-92 0 0 +38 5 1 Mo-94 0 0 +39 5 1 Mo-95 0 0 +40 5 1 Mo-96 0 0 +41 5 1 Mo-97 0 0 +42 5 1 Mo-98 0 0 +43 5 1 Mo-100 0 0 +44 5 1 Si-28 0 0 +45 5 1 Si-29 0 0 +46 5 1 Si-30 0 0 +47 5 1 Cr-50 0 0 +48 5 1 Cr-52 0 0 +49 5 1 Cr-53 0 0 +50 5 1 Cr-54 0 0 +51 5 1 C-Nat 0 0 +52 5 1 Cu-63 0 0 +53 5 1 Cu-65 0 0 +0 5 2 Fe-54 0 0 +1 5 2 Fe-56 0 0 +2 5 2 Fe-57 0 0 +3 5 2 Fe-58 0 0 +4 5 2 Ni-58 0 0 +5 5 2 Ni-60 0 0 +6 5 2 Ni-61 0 0 +7 5 2 Ni-62 0 0 +8 5 2 Ni-64 0 0 +9 5 2 Mn-55 0 0 +10 5 2 Mo-92 0 0 +11 5 2 Mo-94 0 0 +12 5 2 Mo-95 0 0 +13 5 2 Mo-96 0 0 +14 5 2 Mo-97 0 0 +15 5 2 Mo-98 0 0 +16 5 2 Mo-100 0 0 +17 5 2 Si-28 0 0 +18 5 2 Si-29 0 0 +19 5 2 Si-30 0 0 +20 5 2 Cr-50 0 0 +21 5 2 Cr-52 0 0 +22 5 2 Cr-53 0 0 +23 5 2 Cr-54 0 0 +24 5 2 C-Nat 0 0 +25 5 2 Cu-63 0 0 +26 5 2 Cu-65 0 0 material group in group out nuclide moment mean std. dev. moment +81 5 1 1 Fe-54 P0 0 0 P0 +82 5 1 1 Fe-56 P0 0 0 P0 +83 5 1 1 Fe-57 P0 0 0 P0 +84 5 1 1 Fe-58 P0 0 0 P0 +85 5 1 1 Ni-58 P0 0 0 P0 +86 5 1 1 Ni-60 P0 0 0 P0 +87 5 1 1 Ni-61 P0 0 0 P0 +88 5 1 1 Ni-62 P0 0 0 P0 +89 5 1 1 Ni-64 P0 0 0 P0 +90 5 1 1 Mn-55 P0 0 0 P0 +91 5 1 1 Mo-92 P0 0 0 P0 +92 5 1 1 Mo-94 P0 0 0 P0 +93 5 1 1 Mo-95 P0 0 0 P0 +94 5 1 1 Mo-96 P0 0 0 P0 +95 5 1 1 Mo-97 P0 0 0 P0 +96 5 1 1 Mo-98 P0 0 0 P0 +97 5 1 1 Mo-100 P0 0 0 P0 +98 5 1 1 Si-28 P0 0 0 P0 +99 5 1 1 Si-29 P0 0 0 P0 +100 5 1 1 Si-30 P0 0 0 P0 +101 5 1 1 Cr-50 P0 0 0 P0 +102 5 1 1 Cr-52 P0 0 0 P0 +103 5 1 1 Cr-53 P0 0 0 P0 +104 5 1 1 Cr-54 P0 0 0 P0 +105 5 1 1 C-Nat P0 0 0 P0 +106 5 1 1 Cu-63 P0 0 0 P0 +107 5 1 1 Cu-65 P0 0 0 P0 +54 5 1 2 Fe-54 P0 0 0 P0 +55 5 1 2 Fe-56 P0 0 0 P0 +56 5 1 2 Fe-57 P0 0 0 P0 +57 5 1 2 Fe-58 P0 0 0 P0 +58 5 1 2 Ni-58 P0 0 0 P0 +59 5 1 2 Ni-60 P0 0 0 P0 +60 5 1 2 Ni-61 P0 0 0 P0 +61 5 1 2 Ni-62 P0 0 0 P0 +62 5 1 2 Ni-64 P0 0 0 P0 +63 5 1 2 Mn-55 P0 0 0 P0 +64 5 1 2 Mo-92 P0 0 0 P0 +65 5 1 2 Mo-94 P0 0 0 P0 +66 5 1 2 Mo-95 P0 0 0 P0 +67 5 1 2 Mo-96 P0 0 0 P0 +68 5 1 2 Mo-97 P0 0 0 P0 +69 5 1 2 Mo-98 P0 0 0 P0 +70 5 1 2 Mo-100 P0 0 0 P0 +71 5 1 2 Si-28 P0 0 0 P0 +72 5 1 2 Si-29 P0 0 0 P0 +73 5 1 2 Si-30 P0 0 0 P0 +74 5 1 2 Cr-50 P0 0 0 P0 +75 5 1 2 Cr-52 P0 0 0 P0 +76 5 1 2 Cr-53 P0 0 0 P0 +77 5 1 2 Cr-54 P0 0 0 P0 +78 5 1 2 C-Nat P0 0 0 P0 +79 5 1 2 Cu-63 P0 0 0 P0 +80 5 1 2 Cu-65 P0 0 0 P0 +27 5 2 1 Fe-54 P0 0 0 P0 +28 5 2 1 Fe-56 P0 0 0 P0 +29 5 2 1 Fe-57 P0 0 0 P0 +30 5 2 1 Fe-58 P0 0 0 P0 +31 5 2 1 Ni-58 P0 0 0 P0 +32 5 2 1 Ni-60 P0 0 0 P0 +33 5 2 1 Ni-61 P0 0 0 P0 +34 5 2 1 Ni-62 P0 0 0 P0 +35 5 2 1 Ni-64 P0 0 0 P0 +36 5 2 1 Mn-55 P0 0 0 P0 +37 5 2 1 Mo-92 P0 0 0 P0 +38 5 2 1 Mo-94 P0 0 0 P0 +39 5 2 1 Mo-95 P0 0 0 P0 +40 5 2 1 Mo-96 P0 0 0 P0 +41 5 2 1 Mo-97 P0 0 0 P0 +42 5 2 1 Mo-98 P0 0 0 P0 +43 5 2 1 Mo-100 P0 0 0 P0 +44 5 2 1 Si-28 P0 0 0 P0 +45 5 2 1 Si-29 P0 0 0 P0 +46 5 2 1 Si-30 P0 0 0 P0 +47 5 2 1 Cr-50 P0 0 0 P0 +48 5 2 1 Cr-52 P0 0 0 P0 +49 5 2 1 Cr-53 P0 0 0 P0 +50 5 2 1 Cr-54 P0 0 0 P0 +51 5 2 1 C-Nat P0 0 0 P0 +52 5 2 1 Cu-63 P0 0 0 P0 +53 5 2 1 Cu-65 P0 0 0 P0 +0 5 2 2 Fe-54 P0 0 0 P0 +1 5 2 2 Fe-56 P0 0 0 P0 +2 5 2 2 Fe-57 P0 0 0 P0 +3 5 2 2 Fe-58 P0 0 0 P0 +4 5 2 2 Ni-58 P0 0 0 P0 +5 5 2 2 Ni-60 P0 0 0 P0 +6 5 2 2 Ni-61 P0 0 0 P0 +7 5 2 2 Ni-62 P0 0 0 P0 +8 5 2 2 Ni-64 P0 0 0 P0 +9 5 2 2 Mn-55 P0 0 0 P0 +10 5 2 2 Mo-92 P0 0 0 P0 +11 5 2 2 Mo-94 P0 0 0 P0 +12 5 2 2 Mo-95 P0 0 0 P0 +13 5 2 2 Mo-96 P0 0 0 P0 +14 5 2 2 Mo-97 P0 0 0 P0 +15 5 2 2 Mo-98 P0 0 0 P0 +16 5 2 2 Mo-100 P0 0 0 P0 +17 5 2 2 Si-28 P0 0 0 P0 +18 5 2 2 Si-29 P0 0 0 P0 +19 5 2 2 Si-30 P0 0 0 P0 +20 5 2 2 Cr-50 P0 0 0 P0 +21 5 2 2 Cr-52 P0 0 0 P0 +22 5 2 2 Cr-53 P0 0 0 P0 +23 5 2 2 Cr-54 P0 0 0 P0 +24 5 2 2 C-Nat P0 0 0 P0 +25 5 2 2 Cu-63 P0 0 0 P0 +26 5 2 2 Cu-65 P0 0 0 P0 material group out nuclide mean std. dev. +27 5 1 Fe-54 0 0 +28 5 1 Fe-56 0 0 +29 5 1 Fe-57 0 0 +30 5 1 Fe-58 0 0 +31 5 1 Ni-58 0 0 +32 5 1 Ni-60 0 0 +33 5 1 Ni-61 0 0 +34 5 1 Ni-62 0 0 +35 5 1 Ni-64 0 0 +36 5 1 Mn-55 0 0 +37 5 1 Mo-92 0 0 +38 5 1 Mo-94 0 0 +39 5 1 Mo-95 0 0 +40 5 1 Mo-96 0 0 +41 5 1 Mo-97 0 0 +42 5 1 Mo-98 0 0 +43 5 1 Mo-100 0 0 +44 5 1 Si-28 0 0 +45 5 1 Si-29 0 0 +46 5 1 Si-30 0 0 +47 5 1 Cr-50 0 0 +48 5 1 Cr-52 0 0 +49 5 1 Cr-53 0 0 +50 5 1 Cr-54 0 0 +51 5 1 C-Nat 0 0 +52 5 1 Cu-63 0 0 +53 5 1 Cu-65 0 0 +0 5 2 Fe-54 0 0 +1 5 2 Fe-56 0 0 +2 5 2 Fe-57 0 0 +3 5 2 Fe-58 0 0 +4 5 2 Ni-58 0 0 +5 5 2 Ni-60 0 0 +6 5 2 Ni-61 0 0 +7 5 2 Ni-62 0 0 +8 5 2 Ni-64 0 0 +9 5 2 Mn-55 0 0 +10 5 2 Mo-92 0 0 +11 5 2 Mo-94 0 0 +12 5 2 Mo-95 0 0 +13 5 2 Mo-96 0 0 +14 5 2 Mo-97 0 0 +15 5 2 Mo-98 0 0 +16 5 2 Mo-100 0 0 +17 5 2 Si-28 0 0 +18 5 2 Si-29 0 0 +19 5 2 Si-30 0 0 +20 5 2 Cr-50 0 0 +21 5 2 Cr-52 0 0 +22 5 2 Cr-53 0 0 +23 5 2 Cr-54 0 0 +24 5 2 C-Nat 0 0 +25 5 2 Cu-63 0 0 +26 5 2 Cu-65 0 0 material group in nuclide mean std. dev. +21 6 1 H-1 0 0 +22 6 1 O-16 0 0 +23 6 1 B-10 0 0 +24 6 1 B-11 0 0 +25 6 1 Fe-54 0 0 +26 6 1 Fe-56 0 0 +27 6 1 Fe-57 0 0 +28 6 1 Fe-58 0 0 +29 6 1 Ni-58 0 0 +30 6 1 Ni-60 0 0 +31 6 1 Ni-61 0 0 +32 6 1 Ni-62 0 0 +33 6 1 Ni-64 0 0 +34 6 1 Mn-55 0 0 +35 6 1 Si-28 0 0 +36 6 1 Si-29 0 0 +37 6 1 Si-30 0 0 +38 6 1 Cr-50 0 0 +39 6 1 Cr-52 0 0 +40 6 1 Cr-53 0 0 +41 6 1 Cr-54 0 0 +0 6 2 H-1 0 0 +1 6 2 O-16 0 0 +2 6 2 B-10 0 0 +3 6 2 B-11 0 0 +4 6 2 Fe-54 0 0 +5 6 2 Fe-56 0 0 +6 6 2 Fe-57 0 0 +7 6 2 Fe-58 0 0 +8 6 2 Ni-58 0 0 +9 6 2 Ni-60 0 0 +10 6 2 Ni-61 0 0 +11 6 2 Ni-62 0 0 +12 6 2 Ni-64 0 0 +13 6 2 Mn-55 0 0 +14 6 2 Si-28 0 0 +15 6 2 Si-29 0 0 +16 6 2 Si-30 0 0 +17 6 2 Cr-50 0 0 +18 6 2 Cr-52 0 0 +19 6 2 Cr-53 0 0 +20 6 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 6 1 H-1 0 0 +22 6 1 O-16 0 0 +23 6 1 B-10 0 0 +24 6 1 B-11 0 0 +25 6 1 Fe-54 0 0 +26 6 1 Fe-56 0 0 +27 6 1 Fe-57 0 0 +28 6 1 Fe-58 0 0 +29 6 1 Ni-58 0 0 +30 6 1 Ni-60 0 0 +31 6 1 Ni-61 0 0 +32 6 1 Ni-62 0 0 +33 6 1 Ni-64 0 0 +34 6 1 Mn-55 0 0 +35 6 1 Si-28 0 0 +36 6 1 Si-29 0 0 +37 6 1 Si-30 0 0 +38 6 1 Cr-50 0 0 +39 6 1 Cr-52 0 0 +40 6 1 Cr-53 0 0 +41 6 1 Cr-54 0 0 +0 6 2 H-1 0 0 +1 6 2 O-16 0 0 +2 6 2 B-10 0 0 +3 6 2 B-11 0 0 +4 6 2 Fe-54 0 0 +5 6 2 Fe-56 0 0 +6 6 2 Fe-57 0 0 +7 6 2 Fe-58 0 0 +8 6 2 Ni-58 0 0 +9 6 2 Ni-60 0 0 +10 6 2 Ni-61 0 0 +11 6 2 Ni-62 0 0 +12 6 2 Ni-64 0 0 +13 6 2 Mn-55 0 0 +14 6 2 Si-28 0 0 +15 6 2 Si-29 0 0 +16 6 2 Si-30 0 0 +17 6 2 Cr-50 0 0 +18 6 2 Cr-52 0 0 +19 6 2 Cr-53 0 0 +20 6 2 Cr-54 0 0 material group in group out nuclide moment mean std. dev. moment +63 6 1 1 H-1 P0 0 0 P0 +64 6 1 1 O-16 P0 0 0 P0 +65 6 1 1 B-10 P0 0 0 P0 +66 6 1 1 B-11 P0 0 0 P0 +67 6 1 1 Fe-54 P0 0 0 P0 +68 6 1 1 Fe-56 P0 0 0 P0 +69 6 1 1 Fe-57 P0 0 0 P0 +70 6 1 1 Fe-58 P0 0 0 P0 +71 6 1 1 Ni-58 P0 0 0 P0 +72 6 1 1 Ni-60 P0 0 0 P0 +73 6 1 1 Ni-61 P0 0 0 P0 +74 6 1 1 Ni-62 P0 0 0 P0 +75 6 1 1 Ni-64 P0 0 0 P0 +76 6 1 1 Mn-55 P0 0 0 P0 +77 6 1 1 Si-28 P0 0 0 P0 +78 6 1 1 Si-29 P0 0 0 P0 +79 6 1 1 Si-30 P0 0 0 P0 +80 6 1 1 Cr-50 P0 0 0 P0 +81 6 1 1 Cr-52 P0 0 0 P0 +82 6 1 1 Cr-53 P0 0 0 P0 +83 6 1 1 Cr-54 P0 0 0 P0 +42 6 1 2 H-1 P0 0 0 P0 +43 6 1 2 O-16 P0 0 0 P0 +44 6 1 2 B-10 P0 0 0 P0 +45 6 1 2 B-11 P0 0 0 P0 +46 6 1 2 Fe-54 P0 0 0 P0 +47 6 1 2 Fe-56 P0 0 0 P0 +48 6 1 2 Fe-57 P0 0 0 P0 +49 6 1 2 Fe-58 P0 0 0 P0 +50 6 1 2 Ni-58 P0 0 0 P0 +51 6 1 2 Ni-60 P0 0 0 P0 +52 6 1 2 Ni-61 P0 0 0 P0 +53 6 1 2 Ni-62 P0 0 0 P0 +54 6 1 2 Ni-64 P0 0 0 P0 +55 6 1 2 Mn-55 P0 0 0 P0 +56 6 1 2 Si-28 P0 0 0 P0 +57 6 1 2 Si-29 P0 0 0 P0 +58 6 1 2 Si-30 P0 0 0 P0 +59 6 1 2 Cr-50 P0 0 0 P0 +60 6 1 2 Cr-52 P0 0 0 P0 +61 6 1 2 Cr-53 P0 0 0 P0 +62 6 1 2 Cr-54 P0 0 0 P0 +21 6 2 1 H-1 P0 0 0 P0 +22 6 2 1 O-16 P0 0 0 P0 +23 6 2 1 B-10 P0 0 0 P0 +24 6 2 1 B-11 P0 0 0 P0 +25 6 2 1 Fe-54 P0 0 0 P0 +26 6 2 1 Fe-56 P0 0 0 P0 +27 6 2 1 Fe-57 P0 0 0 P0 +28 6 2 1 Fe-58 P0 0 0 P0 +29 6 2 1 Ni-58 P0 0 0 P0 +30 6 2 1 Ni-60 P0 0 0 P0 +31 6 2 1 Ni-61 P0 0 0 P0 +32 6 2 1 Ni-62 P0 0 0 P0 +33 6 2 1 Ni-64 P0 0 0 P0 +34 6 2 1 Mn-55 P0 0 0 P0 +35 6 2 1 Si-28 P0 0 0 P0 +36 6 2 1 Si-29 P0 0 0 P0 +37 6 2 1 Si-30 P0 0 0 P0 +38 6 2 1 Cr-50 P0 0 0 P0 +39 6 2 1 Cr-52 P0 0 0 P0 +40 6 2 1 Cr-53 P0 0 0 P0 +41 6 2 1 Cr-54 P0 0 0 P0 +0 6 2 2 H-1 P0 0 0 P0 +1 6 2 2 O-16 P0 0 0 P0 +2 6 2 2 B-10 P0 0 0 P0 +3 6 2 2 B-11 P0 0 0 P0 +4 6 2 2 Fe-54 P0 0 0 P0 +5 6 2 2 Fe-56 P0 0 0 P0 +6 6 2 2 Fe-57 P0 0 0 P0 +7 6 2 2 Fe-58 P0 0 0 P0 +8 6 2 2 Ni-58 P0 0 0 P0 +9 6 2 2 Ni-60 P0 0 0 P0 +10 6 2 2 Ni-61 P0 0 0 P0 +11 6 2 2 Ni-62 P0 0 0 P0 +12 6 2 2 Ni-64 P0 0 0 P0 +13 6 2 2 Mn-55 P0 0 0 P0 +14 6 2 2 Si-28 P0 0 0 P0 +15 6 2 2 Si-29 P0 0 0 P0 +16 6 2 2 Si-30 P0 0 0 P0 +17 6 2 2 Cr-50 P0 0 0 P0 +18 6 2 2 Cr-52 P0 0 0 P0 +19 6 2 2 Cr-53 P0 0 0 P0 +20 6 2 2 Cr-54 P0 0 0 P0 material group out nuclide mean std. dev. +21 6 1 H-1 0 0 +22 6 1 O-16 0 0 +23 6 1 B-10 0 0 +24 6 1 B-11 0 0 +25 6 1 Fe-54 0 0 +26 6 1 Fe-56 0 0 +27 6 1 Fe-57 0 0 +28 6 1 Fe-58 0 0 +29 6 1 Ni-58 0 0 +30 6 1 Ni-60 0 0 +31 6 1 Ni-61 0 0 +32 6 1 Ni-62 0 0 +33 6 1 Ni-64 0 0 +34 6 1 Mn-55 0 0 +35 6 1 Si-28 0 0 +36 6 1 Si-29 0 0 +37 6 1 Si-30 0 0 +38 6 1 Cr-50 0 0 +39 6 1 Cr-52 0 0 +40 6 1 Cr-53 0 0 +41 6 1 Cr-54 0 0 +0 6 2 H-1 0 0 +1 6 2 O-16 0 0 +2 6 2 B-10 0 0 +3 6 2 B-11 0 0 +4 6 2 Fe-54 0 0 +5 6 2 Fe-56 0 0 +6 6 2 Fe-57 0 0 +7 6 2 Fe-58 0 0 +8 6 2 Ni-58 0 0 +9 6 2 Ni-60 0 0 +10 6 2 Ni-61 0 0 +11 6 2 Ni-62 0 0 +12 6 2 Ni-64 0 0 +13 6 2 Mn-55 0 0 +14 6 2 Si-28 0 0 +15 6 2 Si-29 0 0 +16 6 2 Si-30 0 0 +17 6 2 Cr-50 0 0 +18 6 2 Cr-52 0 0 +19 6 2 Cr-53 0 0 +20 6 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 7 1 H-1 0 0 +22 7 1 O-16 0 0 +23 7 1 B-10 0 0 +24 7 1 B-11 0 0 +25 7 1 Fe-54 0 0 +26 7 1 Fe-56 0 0 +27 7 1 Fe-57 0 0 +28 7 1 Fe-58 0 0 +29 7 1 Ni-58 0 0 +30 7 1 Ni-60 0 0 +31 7 1 Ni-61 0 0 +32 7 1 Ni-62 0 0 +33 7 1 Ni-64 0 0 +34 7 1 Mn-55 0 0 +35 7 1 Si-28 0 0 +36 7 1 Si-29 0 0 +37 7 1 Si-30 0 0 +38 7 1 Cr-50 0 0 +39 7 1 Cr-52 0 0 +40 7 1 Cr-53 0 0 +41 7 1 Cr-54 0 0 +0 7 2 H-1 0 0 +1 7 2 O-16 0 0 +2 7 2 B-10 0 0 +3 7 2 B-11 0 0 +4 7 2 Fe-54 0 0 +5 7 2 Fe-56 0 0 +6 7 2 Fe-57 0 0 +7 7 2 Fe-58 0 0 +8 7 2 Ni-58 0 0 +9 7 2 Ni-60 0 0 +10 7 2 Ni-61 0 0 +11 7 2 Ni-62 0 0 +12 7 2 Ni-64 0 0 +13 7 2 Mn-55 0 0 +14 7 2 Si-28 0 0 +15 7 2 Si-29 0 0 +16 7 2 Si-30 0 0 +17 7 2 Cr-50 0 0 +18 7 2 Cr-52 0 0 +19 7 2 Cr-53 0 0 +20 7 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 7 1 H-1 0 0 +22 7 1 O-16 0 0 +23 7 1 B-10 0 0 +24 7 1 B-11 0 0 +25 7 1 Fe-54 0 0 +26 7 1 Fe-56 0 0 +27 7 1 Fe-57 0 0 +28 7 1 Fe-58 0 0 +29 7 1 Ni-58 0 0 +30 7 1 Ni-60 0 0 +31 7 1 Ni-61 0 0 +32 7 1 Ni-62 0 0 +33 7 1 Ni-64 0 0 +34 7 1 Mn-55 0 0 +35 7 1 Si-28 0 0 +36 7 1 Si-29 0 0 +37 7 1 Si-30 0 0 +38 7 1 Cr-50 0 0 +39 7 1 Cr-52 0 0 +40 7 1 Cr-53 0 0 +41 7 1 Cr-54 0 0 +0 7 2 H-1 0 0 +1 7 2 O-16 0 0 +2 7 2 B-10 0 0 +3 7 2 B-11 0 0 +4 7 2 Fe-54 0 0 +5 7 2 Fe-56 0 0 +6 7 2 Fe-57 0 0 +7 7 2 Fe-58 0 0 +8 7 2 Ni-58 0 0 +9 7 2 Ni-60 0 0 +10 7 2 Ni-61 0 0 +11 7 2 Ni-62 0 0 +12 7 2 Ni-64 0 0 +13 7 2 Mn-55 0 0 +14 7 2 Si-28 0 0 +15 7 2 Si-29 0 0 +16 7 2 Si-30 0 0 +17 7 2 Cr-50 0 0 +18 7 2 Cr-52 0 0 +19 7 2 Cr-53 0 0 +20 7 2 Cr-54 0 0 material group in group out nuclide moment mean std. dev. moment +63 7 1 1 H-1 P0 0 0 P0 +64 7 1 1 O-16 P0 0 0 P0 +65 7 1 1 B-10 P0 0 0 P0 +66 7 1 1 B-11 P0 0 0 P0 +67 7 1 1 Fe-54 P0 0 0 P0 +68 7 1 1 Fe-56 P0 0 0 P0 +69 7 1 1 Fe-57 P0 0 0 P0 +70 7 1 1 Fe-58 P0 0 0 P0 +71 7 1 1 Ni-58 P0 0 0 P0 +72 7 1 1 Ni-60 P0 0 0 P0 +73 7 1 1 Ni-61 P0 0 0 P0 +74 7 1 1 Ni-62 P0 0 0 P0 +75 7 1 1 Ni-64 P0 0 0 P0 +76 7 1 1 Mn-55 P0 0 0 P0 +77 7 1 1 Si-28 P0 0 0 P0 +78 7 1 1 Si-29 P0 0 0 P0 +79 7 1 1 Si-30 P0 0 0 P0 +80 7 1 1 Cr-50 P0 0 0 P0 +81 7 1 1 Cr-52 P0 0 0 P0 +82 7 1 1 Cr-53 P0 0 0 P0 +83 7 1 1 Cr-54 P0 0 0 P0 +42 7 1 2 H-1 P0 0 0 P0 +43 7 1 2 O-16 P0 0 0 P0 +44 7 1 2 B-10 P0 0 0 P0 +45 7 1 2 B-11 P0 0 0 P0 +46 7 1 2 Fe-54 P0 0 0 P0 +47 7 1 2 Fe-56 P0 0 0 P0 +48 7 1 2 Fe-57 P0 0 0 P0 +49 7 1 2 Fe-58 P0 0 0 P0 +50 7 1 2 Ni-58 P0 0 0 P0 +51 7 1 2 Ni-60 P0 0 0 P0 +52 7 1 2 Ni-61 P0 0 0 P0 +53 7 1 2 Ni-62 P0 0 0 P0 +54 7 1 2 Ni-64 P0 0 0 P0 +55 7 1 2 Mn-55 P0 0 0 P0 +56 7 1 2 Si-28 P0 0 0 P0 +57 7 1 2 Si-29 P0 0 0 P0 +58 7 1 2 Si-30 P0 0 0 P0 +59 7 1 2 Cr-50 P0 0 0 P0 +60 7 1 2 Cr-52 P0 0 0 P0 +61 7 1 2 Cr-53 P0 0 0 P0 +62 7 1 2 Cr-54 P0 0 0 P0 +21 7 2 1 H-1 P0 0 0 P0 +22 7 2 1 O-16 P0 0 0 P0 +23 7 2 1 B-10 P0 0 0 P0 +24 7 2 1 B-11 P0 0 0 P0 +25 7 2 1 Fe-54 P0 0 0 P0 +26 7 2 1 Fe-56 P0 0 0 P0 +27 7 2 1 Fe-57 P0 0 0 P0 +28 7 2 1 Fe-58 P0 0 0 P0 +29 7 2 1 Ni-58 P0 0 0 P0 +30 7 2 1 Ni-60 P0 0 0 P0 +31 7 2 1 Ni-61 P0 0 0 P0 +32 7 2 1 Ni-62 P0 0 0 P0 +33 7 2 1 Ni-64 P0 0 0 P0 +34 7 2 1 Mn-55 P0 0 0 P0 +35 7 2 1 Si-28 P0 0 0 P0 +36 7 2 1 Si-29 P0 0 0 P0 +37 7 2 1 Si-30 P0 0 0 P0 +38 7 2 1 Cr-50 P0 0 0 P0 +39 7 2 1 Cr-52 P0 0 0 P0 +40 7 2 1 Cr-53 P0 0 0 P0 +41 7 2 1 Cr-54 P0 0 0 P0 +0 7 2 2 H-1 P0 0 0 P0 +1 7 2 2 O-16 P0 0 0 P0 +2 7 2 2 B-10 P0 0 0 P0 +3 7 2 2 B-11 P0 0 0 P0 +4 7 2 2 Fe-54 P0 0 0 P0 +5 7 2 2 Fe-56 P0 0 0 P0 +6 7 2 2 Fe-57 P0 0 0 P0 +7 7 2 2 Fe-58 P0 0 0 P0 +8 7 2 2 Ni-58 P0 0 0 P0 +9 7 2 2 Ni-60 P0 0 0 P0 +10 7 2 2 Ni-61 P0 0 0 P0 +11 7 2 2 Ni-62 P0 0 0 P0 +12 7 2 2 Ni-64 P0 0 0 P0 +13 7 2 2 Mn-55 P0 0 0 P0 +14 7 2 2 Si-28 P0 0 0 P0 +15 7 2 2 Si-29 P0 0 0 P0 +16 7 2 2 Si-30 P0 0 0 P0 +17 7 2 2 Cr-50 P0 0 0 P0 +18 7 2 2 Cr-52 P0 0 0 P0 +19 7 2 2 Cr-53 P0 0 0 P0 +20 7 2 2 Cr-54 P0 0 0 P0 material group out nuclide mean std. dev. +21 7 1 H-1 0 0 +22 7 1 O-16 0 0 +23 7 1 B-10 0 0 +24 7 1 B-11 0 0 +25 7 1 Fe-54 0 0 +26 7 1 Fe-56 0 0 +27 7 1 Fe-57 0 0 +28 7 1 Fe-58 0 0 +29 7 1 Ni-58 0 0 +30 7 1 Ni-60 0 0 +31 7 1 Ni-61 0 0 +32 7 1 Ni-62 0 0 +33 7 1 Ni-64 0 0 +34 7 1 Mn-55 0 0 +35 7 1 Si-28 0 0 +36 7 1 Si-29 0 0 +37 7 1 Si-30 0 0 +38 7 1 Cr-50 0 0 +39 7 1 Cr-52 0 0 +40 7 1 Cr-53 0 0 +41 7 1 Cr-54 0 0 +0 7 2 H-1 0 0 +1 7 2 O-16 0 0 +2 7 2 B-10 0 0 +3 7 2 B-11 0 0 +4 7 2 Fe-54 0 0 +5 7 2 Fe-56 0 0 +6 7 2 Fe-57 0 0 +7 7 2 Fe-58 0 0 +8 7 2 Ni-58 0 0 +9 7 2 Ni-60 0 0 +10 7 2 Ni-61 0 0 +11 7 2 Ni-62 0 0 +12 7 2 Ni-64 0 0 +13 7 2 Mn-55 0 0 +14 7 2 Si-28 0 0 +15 7 2 Si-29 0 0 +16 7 2 Si-30 0 0 +17 7 2 Cr-50 0 0 +18 7 2 Cr-52 0 0 +19 7 2 Cr-53 0 0 +20 7 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 8 1 H-1 0 0 +22 8 1 O-16 0 0 +23 8 1 B-10 0 0 +24 8 1 B-11 0 0 +25 8 1 Fe-54 0 0 +26 8 1 Fe-56 0 0 +27 8 1 Fe-57 0 0 +28 8 1 Fe-58 0 0 +29 8 1 Ni-58 0 0 +30 8 1 Ni-60 0 0 +31 8 1 Ni-61 0 0 +32 8 1 Ni-62 0 0 +33 8 1 Ni-64 0 0 +34 8 1 Mn-55 0 0 +35 8 1 Si-28 0 0 +36 8 1 Si-29 0 0 +37 8 1 Si-30 0 0 +38 8 1 Cr-50 0 0 +39 8 1 Cr-52 0 0 +40 8 1 Cr-53 0 0 +41 8 1 Cr-54 0 0 +0 8 2 H-1 0 0 +1 8 2 O-16 0 0 +2 8 2 B-10 0 0 +3 8 2 B-11 0 0 +4 8 2 Fe-54 0 0 +5 8 2 Fe-56 0 0 +6 8 2 Fe-57 0 0 +7 8 2 Fe-58 0 0 +8 8 2 Ni-58 0 0 +9 8 2 Ni-60 0 0 +10 8 2 Ni-61 0 0 +11 8 2 Ni-62 0 0 +12 8 2 Ni-64 0 0 +13 8 2 Mn-55 0 0 +14 8 2 Si-28 0 0 +15 8 2 Si-29 0 0 +16 8 2 Si-30 0 0 +17 8 2 Cr-50 0 0 +18 8 2 Cr-52 0 0 +19 8 2 Cr-53 0 0 +20 8 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 8 1 H-1 0 0 +22 8 1 O-16 0 0 +23 8 1 B-10 0 0 +24 8 1 B-11 0 0 +25 8 1 Fe-54 0 0 +26 8 1 Fe-56 0 0 +27 8 1 Fe-57 0 0 +28 8 1 Fe-58 0 0 +29 8 1 Ni-58 0 0 +30 8 1 Ni-60 0 0 +31 8 1 Ni-61 0 0 +32 8 1 Ni-62 0 0 +33 8 1 Ni-64 0 0 +34 8 1 Mn-55 0 0 +35 8 1 Si-28 0 0 +36 8 1 Si-29 0 0 +37 8 1 Si-30 0 0 +38 8 1 Cr-50 0 0 +39 8 1 Cr-52 0 0 +40 8 1 Cr-53 0 0 +41 8 1 Cr-54 0 0 +0 8 2 H-1 0 0 +1 8 2 O-16 0 0 +2 8 2 B-10 0 0 +3 8 2 B-11 0 0 +4 8 2 Fe-54 0 0 +5 8 2 Fe-56 0 0 +6 8 2 Fe-57 0 0 +7 8 2 Fe-58 0 0 +8 8 2 Ni-58 0 0 +9 8 2 Ni-60 0 0 +10 8 2 Ni-61 0 0 +11 8 2 Ni-62 0 0 +12 8 2 Ni-64 0 0 +13 8 2 Mn-55 0 0 +14 8 2 Si-28 0 0 +15 8 2 Si-29 0 0 +16 8 2 Si-30 0 0 +17 8 2 Cr-50 0 0 +18 8 2 Cr-52 0 0 +19 8 2 Cr-53 0 0 +20 8 2 Cr-54 0 0 material group in group out nuclide moment mean std. dev. moment +63 8 1 1 H-1 P0 0 0 P0 +64 8 1 1 O-16 P0 0 0 P0 +65 8 1 1 B-10 P0 0 0 P0 +66 8 1 1 B-11 P0 0 0 P0 +67 8 1 1 Fe-54 P0 0 0 P0 +68 8 1 1 Fe-56 P0 0 0 P0 +69 8 1 1 Fe-57 P0 0 0 P0 +70 8 1 1 Fe-58 P0 0 0 P0 +71 8 1 1 Ni-58 P0 0 0 P0 +72 8 1 1 Ni-60 P0 0 0 P0 +73 8 1 1 Ni-61 P0 0 0 P0 +74 8 1 1 Ni-62 P0 0 0 P0 +75 8 1 1 Ni-64 P0 0 0 P0 +76 8 1 1 Mn-55 P0 0 0 P0 +77 8 1 1 Si-28 P0 0 0 P0 +78 8 1 1 Si-29 P0 0 0 P0 +79 8 1 1 Si-30 P0 0 0 P0 +80 8 1 1 Cr-50 P0 0 0 P0 +81 8 1 1 Cr-52 P0 0 0 P0 +82 8 1 1 Cr-53 P0 0 0 P0 +83 8 1 1 Cr-54 P0 0 0 P0 +42 8 1 2 H-1 P0 0 0 P0 +43 8 1 2 O-16 P0 0 0 P0 +44 8 1 2 B-10 P0 0 0 P0 +45 8 1 2 B-11 P0 0 0 P0 +46 8 1 2 Fe-54 P0 0 0 P0 +47 8 1 2 Fe-56 P0 0 0 P0 +48 8 1 2 Fe-57 P0 0 0 P0 +49 8 1 2 Fe-58 P0 0 0 P0 +50 8 1 2 Ni-58 P0 0 0 P0 +51 8 1 2 Ni-60 P0 0 0 P0 +52 8 1 2 Ni-61 P0 0 0 P0 +53 8 1 2 Ni-62 P0 0 0 P0 +54 8 1 2 Ni-64 P0 0 0 P0 +55 8 1 2 Mn-55 P0 0 0 P0 +56 8 1 2 Si-28 P0 0 0 P0 +57 8 1 2 Si-29 P0 0 0 P0 +58 8 1 2 Si-30 P0 0 0 P0 +59 8 1 2 Cr-50 P0 0 0 P0 +60 8 1 2 Cr-52 P0 0 0 P0 +61 8 1 2 Cr-53 P0 0 0 P0 +62 8 1 2 Cr-54 P0 0 0 P0 +21 8 2 1 H-1 P0 0 0 P0 +22 8 2 1 O-16 P0 0 0 P0 +23 8 2 1 B-10 P0 0 0 P0 +24 8 2 1 B-11 P0 0 0 P0 +25 8 2 1 Fe-54 P0 0 0 P0 +26 8 2 1 Fe-56 P0 0 0 P0 +27 8 2 1 Fe-57 P0 0 0 P0 +28 8 2 1 Fe-58 P0 0 0 P0 +29 8 2 1 Ni-58 P0 0 0 P0 +30 8 2 1 Ni-60 P0 0 0 P0 +31 8 2 1 Ni-61 P0 0 0 P0 +32 8 2 1 Ni-62 P0 0 0 P0 +33 8 2 1 Ni-64 P0 0 0 P0 +34 8 2 1 Mn-55 P0 0 0 P0 +35 8 2 1 Si-28 P0 0 0 P0 +36 8 2 1 Si-29 P0 0 0 P0 +37 8 2 1 Si-30 P0 0 0 P0 +38 8 2 1 Cr-50 P0 0 0 P0 +39 8 2 1 Cr-52 P0 0 0 P0 +40 8 2 1 Cr-53 P0 0 0 P0 +41 8 2 1 Cr-54 P0 0 0 P0 +0 8 2 2 H-1 P0 0 0 P0 +1 8 2 2 O-16 P0 0 0 P0 +2 8 2 2 B-10 P0 0 0 P0 +3 8 2 2 B-11 P0 0 0 P0 +4 8 2 2 Fe-54 P0 0 0 P0 +5 8 2 2 Fe-56 P0 0 0 P0 +6 8 2 2 Fe-57 P0 0 0 P0 +7 8 2 2 Fe-58 P0 0 0 P0 +8 8 2 2 Ni-58 P0 0 0 P0 +9 8 2 2 Ni-60 P0 0 0 P0 +10 8 2 2 Ni-61 P0 0 0 P0 +11 8 2 2 Ni-62 P0 0 0 P0 +12 8 2 2 Ni-64 P0 0 0 P0 +13 8 2 2 Mn-55 P0 0 0 P0 +14 8 2 2 Si-28 P0 0 0 P0 +15 8 2 2 Si-29 P0 0 0 P0 +16 8 2 2 Si-30 P0 0 0 P0 +17 8 2 2 Cr-50 P0 0 0 P0 +18 8 2 2 Cr-52 P0 0 0 P0 +19 8 2 2 Cr-53 P0 0 0 P0 +20 8 2 2 Cr-54 P0 0 0 P0 material group out nuclide mean std. dev. +21 8 1 H-1 0 0 +22 8 1 O-16 0 0 +23 8 1 B-10 0 0 +24 8 1 B-11 0 0 +25 8 1 Fe-54 0 0 +26 8 1 Fe-56 0 0 +27 8 1 Fe-57 0 0 +28 8 1 Fe-58 0 0 +29 8 1 Ni-58 0 0 +30 8 1 Ni-60 0 0 +31 8 1 Ni-61 0 0 +32 8 1 Ni-62 0 0 +33 8 1 Ni-64 0 0 +34 8 1 Mn-55 0 0 +35 8 1 Si-28 0 0 +36 8 1 Si-29 0 0 +37 8 1 Si-30 0 0 +38 8 1 Cr-50 0 0 +39 8 1 Cr-52 0 0 +40 8 1 Cr-53 0 0 +41 8 1 Cr-54 0 0 +0 8 2 H-1 0 0 +1 8 2 O-16 0 0 +2 8 2 B-10 0 0 +3 8 2 B-11 0 0 +4 8 2 Fe-54 0 0 +5 8 2 Fe-56 0 0 +6 8 2 Fe-57 0 0 +7 8 2 Fe-58 0 0 +8 8 2 Ni-58 0 0 +9 8 2 Ni-60 0 0 +10 8 2 Ni-61 0 0 +11 8 2 Ni-62 0 0 +12 8 2 Ni-64 0 0 +13 8 2 Mn-55 0 0 +14 8 2 Si-28 0 0 +15 8 2 Si-29 0 0 +16 8 2 Si-30 0 0 +17 8 2 Cr-50 0 0 +18 8 2 Cr-52 0 0 +19 8 2 Cr-53 0 0 +20 8 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 9 1 H-1 0.150655 0.480993 +22 9 1 O-16 0.116221 0.114089 +23 9 1 B-10 0.000000 0.000000 +24 9 1 B-11 0.000000 0.000000 +25 9 1 Fe-54 0.000000 0.000000 +26 9 1 Fe-56 0.186217 0.199795 +27 9 1 Fe-57 0.000000 0.000000 +28 9 1 Fe-58 0.000000 0.000000 +29 9 1 Ni-58 0.000000 0.000000 +30 9 1 Ni-60 0.000000 0.000000 +31 9 1 Ni-61 0.000000 0.000000 +32 9 1 Ni-62 0.000000 0.000000 +33 9 1 Ni-64 0.000000 0.000000 +34 9 1 Mn-55 0.000000 0.000000 +35 9 1 Si-28 0.000000 0.000000 +36 9 1 Si-29 0.000000 0.000000 +37 9 1 Si-30 0.000000 0.000000 +38 9 1 Cr-50 0.000000 0.000000 +39 9 1 Cr-52 0.000000 0.000000 +40 9 1 Cr-53 0.147443 0.139574 +41 9 1 Cr-54 0.000000 0.000000 +0 9 2 H-1 0.000000 0.000000 +1 9 2 O-16 0.000000 0.000000 +2 9 2 B-10 0.000000 0.000000 +3 9 2 B-11 0.000000 0.000000 +4 9 2 Fe-54 0.000000 0.000000 +5 9 2 Fe-56 0.000000 0.000000 +6 9 2 Fe-57 0.000000 0.000000 +7 9 2 Fe-58 0.000000 0.000000 +8 9 2 Ni-58 0.000000 0.000000 +9 9 2 Ni-60 0.000000 0.000000 +10 9 2 Ni-61 0.000000 0.000000 +11 9 2 Ni-62 0.000000 0.000000 +12 9 2 Ni-64 0.000000 0.000000 +13 9 2 Mn-55 0.000000 0.000000 +14 9 2 Si-28 0.000000 0.000000 +15 9 2 Si-29 0.000000 0.000000 +16 9 2 Si-30 0.000000 0.000000 +17 9 2 Cr-50 0.000000 0.000000 +18 9 2 Cr-52 0.000000 0.000000 +19 9 2 Cr-53 0.000000 0.000000 +20 9 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. +21 9 1 H-1 0 0 +22 9 1 O-16 0 0 +23 9 1 B-10 0 0 +24 9 1 B-11 0 0 +25 9 1 Fe-54 0 0 +26 9 1 Fe-56 0 0 +27 9 1 Fe-57 0 0 +28 9 1 Fe-58 0 0 +29 9 1 Ni-58 0 0 +30 9 1 Ni-60 0 0 +31 9 1 Ni-61 0 0 +32 9 1 Ni-62 0 0 +33 9 1 Ni-64 0 0 +34 9 1 Mn-55 0 0 +35 9 1 Si-28 0 0 +36 9 1 Si-29 0 0 +37 9 1 Si-30 0 0 +38 9 1 Cr-50 0 0 +39 9 1 Cr-52 0 0 +40 9 1 Cr-53 0 0 +41 9 1 Cr-54 0 0 +0 9 2 H-1 0 0 +1 9 2 O-16 0 0 +2 9 2 B-10 0 0 +3 9 2 B-11 0 0 +4 9 2 Fe-54 0 0 +5 9 2 Fe-56 0 0 +6 9 2 Fe-57 0 0 +7 9 2 Fe-58 0 0 +8 9 2 Ni-58 0 0 +9 9 2 Ni-60 0 0 +10 9 2 Ni-61 0 0 +11 9 2 Ni-62 0 0 +12 9 2 Ni-64 0 0 +13 9 2 Mn-55 0 0 +14 9 2 Si-28 0 0 +15 9 2 Si-29 0 0 +16 9 2 Si-30 0 0 +17 9 2 Cr-50 0 0 +18 9 2 Cr-52 0 0 +19 9 2 Cr-53 0 0 +20 9 2 Cr-54 0 0 material group in group out nuclide moment mean std. dev. moment +63 9 1 1 H-1 P0 0.150655 0.480993 P0 +64 9 1 1 O-16 P0 0.116221 0.114089 P0 +65 9 1 1 B-10 P0 0.000000 0.000000 P0 +66 9 1 1 B-11 P0 0.000000 0.000000 P0 +67 9 1 1 Fe-54 P0 0.000000 0.000000 P0 +68 9 1 1 Fe-56 P0 0.186217 0.199795 P0 +69 9 1 1 Fe-57 P0 0.000000 0.000000 P0 +70 9 1 1 Fe-58 P0 0.000000 0.000000 P0 +71 9 1 1 Ni-58 P0 0.000000 0.000000 P0 +72 9 1 1 Ni-60 P0 0.000000 0.000000 P0 +73 9 1 1 Ni-61 P0 0.000000 0.000000 P0 +74 9 1 1 Ni-62 P0 0.000000 0.000000 P0 +75 9 1 1 Ni-64 P0 0.000000 0.000000 P0 +76 9 1 1 Mn-55 P0 0.000000 0.000000 P0 +77 9 1 1 Si-28 P0 0.000000 0.000000 P0 +78 9 1 1 Si-29 P0 0.000000 0.000000 P0 +79 9 1 1 Si-30 P0 0.000000 0.000000 P0 +80 9 1 1 Cr-50 P0 0.000000 0.000000 P0 +81 9 1 1 Cr-52 P0 0.000000 0.000000 P0 +82 9 1 1 Cr-53 P0 0.147443 0.139574 P0 +83 9 1 1 Cr-54 P0 0.000000 0.000000 P0 +42 9 1 2 H-1 P0 0.000000 0.000000 P0 +43 9 1 2 O-16 P0 0.000000 0.000000 P0 +44 9 1 2 B-10 P0 0.000000 0.000000 P0 +45 9 1 2 B-11 P0 0.000000 0.000000 P0 +46 9 1 2 Fe-54 P0 0.000000 0.000000 P0 +47 9 1 2 Fe-56 P0 0.000000 0.000000 P0 +48 9 1 2 Fe-57 P0 0.000000 0.000000 P0 +49 9 1 2 Fe-58 P0 0.000000 0.000000 P0 +50 9 1 2 Ni-58 P0 0.000000 0.000000 P0 +51 9 1 2 Ni-60 P0 0.000000 0.000000 P0 +52 9 1 2 Ni-61 P0 0.000000 0.000000 P0 +53 9 1 2 Ni-62 P0 0.000000 0.000000 P0 +54 9 1 2 Ni-64 P0 0.000000 0.000000 P0 +55 9 1 2 Mn-55 P0 0.000000 0.000000 P0 +56 9 1 2 Si-28 P0 0.000000 0.000000 P0 +57 9 1 2 Si-29 P0 0.000000 0.000000 P0 +58 9 1 2 Si-30 P0 0.000000 0.000000 P0 +59 9 1 2 Cr-50 P0 0.000000 0.000000 P0 +60 9 1 2 Cr-52 P0 0.000000 0.000000 P0 +61 9 1 2 Cr-53 P0 0.000000 0.000000 P0 +62 9 1 2 Cr-54 P0 0.000000 0.000000 P0 +21 9 2 1 H-1 P0 0.000000 0.000000 P0 +22 9 2 1 O-16 P0 0.000000 0.000000 P0 +23 9 2 1 B-10 P0 0.000000 0.000000 P0 +24 9 2 1 B-11 P0 0.000000 0.000000 P0 +25 9 2 1 Fe-54 P0 0.000000 0.000000 P0 +26 9 2 1 Fe-56 P0 0.000000 0.000000 P0 +27 9 2 1 Fe-57 P0 0.000000 0.000000 P0 +28 9 2 1 Fe-58 P0 0.000000 0.000000 P0 +29 9 2 1 Ni-58 P0 0.000000 0.000000 P0 +30 9 2 1 Ni-60 P0 0.000000 0.000000 P0 +31 9 2 1 Ni-61 P0 0.000000 0.000000 P0 +32 9 2 1 Ni-62 P0 0.000000 0.000000 P0 +33 9 2 1 Ni-64 P0 0.000000 0.000000 P0 +34 9 2 1 Mn-55 P0 0.000000 0.000000 P0 +35 9 2 1 Si-28 P0 0.000000 0.000000 P0 +36 9 2 1 Si-29 P0 0.000000 0.000000 P0 +37 9 2 1 Si-30 P0 0.000000 0.000000 P0 +38 9 2 1 Cr-50 P0 0.000000 0.000000 P0 +39 9 2 1 Cr-52 P0 0.000000 0.000000 P0 +40 9 2 1 Cr-53 P0 0.000000 0.000000 P0 +41 9 2 1 Cr-54 P0 0.000000 0.000000 P0 +0 9 2 2 H-1 P0 0.000000 0.000000 P0 +1 9 2 2 O-16 P0 0.000000 0.000000 P0 +2 9 2 2 B-10 P0 0.000000 0.000000 P0 +3 9 2 2 B-11 P0 0.000000 0.000000 P0 +4 9 2 2 Fe-54 P0 0.000000 0.000000 P0 +5 9 2 2 Fe-56 P0 0.000000 0.000000 P0 +6 9 2 2 Fe-57 P0 0.000000 0.000000 P0 +7 9 2 2 Fe-58 P0 0.000000 0.000000 P0 +8 9 2 2 Ni-58 P0 0.000000 0.000000 P0 +9 9 2 2 Ni-60 P0 0.000000 0.000000 P0 +10 9 2 2 Ni-61 P0 0.000000 0.000000 P0 +11 9 2 2 Ni-62 P0 0.000000 0.000000 P0 +12 9 2 2 Ni-64 P0 0.000000 0.000000 P0 +13 9 2 2 Mn-55 P0 0.000000 0.000000 P0 +14 9 2 2 Si-28 P0 0.000000 0.000000 P0 +15 9 2 2 Si-29 P0 0.000000 0.000000 P0 +16 9 2 2 Si-30 P0 0.000000 0.000000 P0 +17 9 2 2 Cr-50 P0 0.000000 0.000000 P0 +18 9 2 2 Cr-52 P0 0.000000 0.000000 P0 +19 9 2 2 Cr-53 P0 0.000000 0.000000 P0 +20 9 2 2 Cr-54 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. +21 9 1 H-1 0 0 +22 9 1 O-16 0 0 +23 9 1 B-10 0 0 +24 9 1 B-11 0 0 +25 9 1 Fe-54 0 0 +26 9 1 Fe-56 0 0 +27 9 1 Fe-57 0 0 +28 9 1 Fe-58 0 0 +29 9 1 Ni-58 0 0 +30 9 1 Ni-60 0 0 +31 9 1 Ni-61 0 0 +32 9 1 Ni-62 0 0 +33 9 1 Ni-64 0 0 +34 9 1 Mn-55 0 0 +35 9 1 Si-28 0 0 +36 9 1 Si-29 0 0 +37 9 1 Si-30 0 0 +38 9 1 Cr-50 0 0 +39 9 1 Cr-52 0 0 +40 9 1 Cr-53 0 0 +41 9 1 Cr-54 0 0 +0 9 2 H-1 0 0 +1 9 2 O-16 0 0 +2 9 2 B-10 0 0 +3 9 2 B-11 0 0 +4 9 2 Fe-54 0 0 +5 9 2 Fe-56 0 0 +6 9 2 Fe-57 0 0 +7 9 2 Fe-58 0 0 +8 9 2 Ni-58 0 0 +9 9 2 Ni-60 0 0 +10 9 2 Ni-61 0 0 +11 9 2 Ni-62 0 0 +12 9 2 Ni-64 0 0 +13 9 2 Mn-55 0 0 +14 9 2 Si-28 0 0 +15 9 2 Si-29 0 0 +16 9 2 Si-30 0 0 +17 9 2 Cr-50 0 0 +18 9 2 Cr-52 0 0 +19 9 2 Cr-53 0 0 +20 9 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 10 1 H-1 0.123944 0.541390 +22 10 1 O-16 0.000000 0.000000 +23 10 1 B-10 0.000000 0.000000 +24 10 1 B-11 0.000000 0.000000 +25 10 1 Fe-54 0.000000 0.000000 +26 10 1 Fe-56 0.000000 0.000000 +27 10 1 Fe-57 0.000000 0.000000 +28 10 1 Fe-58 0.000000 0.000000 +29 10 1 Ni-58 0.000000 0.000000 +30 10 1 Ni-60 0.000000 0.000000 +31 10 1 Ni-61 0.000000 0.000000 +32 10 1 Ni-62 0.000000 0.000000 +33 10 1 Ni-64 0.000000 0.000000 +34 10 1 Mn-55 0.000000 0.000000 +35 10 1 Si-28 0.000000 0.000000 +36 10 1 Si-29 0.000000 0.000000 +37 10 1 Si-30 0.000000 0.000000 +38 10 1 Cr-50 0.111571 0.138458 +39 10 1 Cr-52 0.000000 0.000000 +40 10 1 Cr-53 0.000000 0.000000 +41 10 1 Cr-54 0.000000 0.000000 +0 10 2 H-1 0.000000 0.000000 +1 10 2 O-16 0.000000 0.000000 +2 10 2 B-10 0.000000 0.000000 +3 10 2 B-11 0.000000 0.000000 +4 10 2 Fe-54 0.000000 0.000000 +5 10 2 Fe-56 0.000000 0.000000 +6 10 2 Fe-57 0.000000 0.000000 +7 10 2 Fe-58 0.000000 0.000000 +8 10 2 Ni-58 0.000000 0.000000 +9 10 2 Ni-60 0.000000 0.000000 +10 10 2 Ni-61 0.000000 0.000000 +11 10 2 Ni-62 0.000000 0.000000 +12 10 2 Ni-64 0.000000 0.000000 +13 10 2 Mn-55 0.000000 0.000000 +14 10 2 Si-28 0.000000 0.000000 +15 10 2 Si-29 0.000000 0.000000 +16 10 2 Si-30 0.000000 0.000000 +17 10 2 Cr-50 0.000000 0.000000 +18 10 2 Cr-52 0.000000 0.000000 +19 10 2 Cr-53 0.000000 0.000000 +20 10 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. +21 10 1 H-1 0 0 +22 10 1 O-16 0 0 +23 10 1 B-10 0 0 +24 10 1 B-11 0 0 +25 10 1 Fe-54 0 0 +26 10 1 Fe-56 0 0 +27 10 1 Fe-57 0 0 +28 10 1 Fe-58 0 0 +29 10 1 Ni-58 0 0 +30 10 1 Ni-60 0 0 +31 10 1 Ni-61 0 0 +32 10 1 Ni-62 0 0 +33 10 1 Ni-64 0 0 +34 10 1 Mn-55 0 0 +35 10 1 Si-28 0 0 +36 10 1 Si-29 0 0 +37 10 1 Si-30 0 0 +38 10 1 Cr-50 0 0 +39 10 1 Cr-52 0 0 +40 10 1 Cr-53 0 0 +41 10 1 Cr-54 0 0 +0 10 2 H-1 0 0 +1 10 2 O-16 0 0 +2 10 2 B-10 0 0 +3 10 2 B-11 0 0 +4 10 2 Fe-54 0 0 +5 10 2 Fe-56 0 0 +6 10 2 Fe-57 0 0 +7 10 2 Fe-58 0 0 +8 10 2 Ni-58 0 0 +9 10 2 Ni-60 0 0 +10 10 2 Ni-61 0 0 +11 10 2 Ni-62 0 0 +12 10 2 Ni-64 0 0 +13 10 2 Mn-55 0 0 +14 10 2 Si-28 0 0 +15 10 2 Si-29 0 0 +16 10 2 Si-30 0 0 +17 10 2 Cr-50 0 0 +18 10 2 Cr-52 0 0 +19 10 2 Cr-53 0 0 +20 10 2 Cr-54 0 0 material group in group out nuclide moment mean std. dev. moment +63 10 1 1 H-1 P0 0.123944 0.541390 P0 +64 10 1 1 O-16 P0 0.000000 0.000000 P0 +65 10 1 1 B-10 P0 0.000000 0.000000 P0 +66 10 1 1 B-11 P0 0.000000 0.000000 P0 +67 10 1 1 Fe-54 P0 0.000000 0.000000 P0 +68 10 1 1 Fe-56 P0 0.000000 0.000000 P0 +69 10 1 1 Fe-57 P0 0.000000 0.000000 P0 +70 10 1 1 Fe-58 P0 0.000000 0.000000 P0 +71 10 1 1 Ni-58 P0 0.000000 0.000000 P0 +72 10 1 1 Ni-60 P0 0.000000 0.000000 P0 +73 10 1 1 Ni-61 P0 0.000000 0.000000 P0 +74 10 1 1 Ni-62 P0 0.000000 0.000000 P0 +75 10 1 1 Ni-64 P0 0.000000 0.000000 P0 +76 10 1 1 Mn-55 P0 0.000000 0.000000 P0 +77 10 1 1 Si-28 P0 0.000000 0.000000 P0 +78 10 1 1 Si-29 P0 0.000000 0.000000 P0 +79 10 1 1 Si-30 P0 0.000000 0.000000 P0 +80 10 1 1 Cr-50 P0 0.111571 0.138458 P0 +81 10 1 1 Cr-52 P0 0.000000 0.000000 P0 +82 10 1 1 Cr-53 P0 0.000000 0.000000 P0 +83 10 1 1 Cr-54 P0 0.000000 0.000000 P0 +42 10 1 2 H-1 P0 0.000000 0.000000 P0 +43 10 1 2 O-16 P0 0.000000 0.000000 P0 +44 10 1 2 B-10 P0 0.000000 0.000000 P0 +45 10 1 2 B-11 P0 0.000000 0.000000 P0 +46 10 1 2 Fe-54 P0 0.000000 0.000000 P0 +47 10 1 2 Fe-56 P0 0.000000 0.000000 P0 +48 10 1 2 Fe-57 P0 0.000000 0.000000 P0 +49 10 1 2 Fe-58 P0 0.000000 0.000000 P0 +50 10 1 2 Ni-58 P0 0.000000 0.000000 P0 +51 10 1 2 Ni-60 P0 0.000000 0.000000 P0 +52 10 1 2 Ni-61 P0 0.000000 0.000000 P0 +53 10 1 2 Ni-62 P0 0.000000 0.000000 P0 +54 10 1 2 Ni-64 P0 0.000000 0.000000 P0 +55 10 1 2 Mn-55 P0 0.000000 0.000000 P0 +56 10 1 2 Si-28 P0 0.000000 0.000000 P0 +57 10 1 2 Si-29 P0 0.000000 0.000000 P0 +58 10 1 2 Si-30 P0 0.000000 0.000000 P0 +59 10 1 2 Cr-50 P0 0.000000 0.000000 P0 +60 10 1 2 Cr-52 P0 0.000000 0.000000 P0 +61 10 1 2 Cr-53 P0 0.000000 0.000000 P0 +62 10 1 2 Cr-54 P0 0.000000 0.000000 P0 +21 10 2 1 H-1 P0 0.000000 0.000000 P0 +22 10 2 1 O-16 P0 0.000000 0.000000 P0 +23 10 2 1 B-10 P0 0.000000 0.000000 P0 +24 10 2 1 B-11 P0 0.000000 0.000000 P0 +25 10 2 1 Fe-54 P0 0.000000 0.000000 P0 +26 10 2 1 Fe-56 P0 0.000000 0.000000 P0 +27 10 2 1 Fe-57 P0 0.000000 0.000000 P0 +28 10 2 1 Fe-58 P0 0.000000 0.000000 P0 +29 10 2 1 Ni-58 P0 0.000000 0.000000 P0 +30 10 2 1 Ni-60 P0 0.000000 0.000000 P0 +31 10 2 1 Ni-61 P0 0.000000 0.000000 P0 +32 10 2 1 Ni-62 P0 0.000000 0.000000 P0 +33 10 2 1 Ni-64 P0 0.000000 0.000000 P0 +34 10 2 1 Mn-55 P0 0.000000 0.000000 P0 +35 10 2 1 Si-28 P0 0.000000 0.000000 P0 +36 10 2 1 Si-29 P0 0.000000 0.000000 P0 +37 10 2 1 Si-30 P0 0.000000 0.000000 P0 +38 10 2 1 Cr-50 P0 0.000000 0.000000 P0 +39 10 2 1 Cr-52 P0 0.000000 0.000000 P0 +40 10 2 1 Cr-53 P0 0.000000 0.000000 P0 +41 10 2 1 Cr-54 P0 0.000000 0.000000 P0 +0 10 2 2 H-1 P0 0.000000 0.000000 P0 +1 10 2 2 O-16 P0 0.000000 0.000000 P0 +2 10 2 2 B-10 P0 0.000000 0.000000 P0 +3 10 2 2 B-11 P0 0.000000 0.000000 P0 +4 10 2 2 Fe-54 P0 0.000000 0.000000 P0 +5 10 2 2 Fe-56 P0 0.000000 0.000000 P0 +6 10 2 2 Fe-57 P0 0.000000 0.000000 P0 +7 10 2 2 Fe-58 P0 0.000000 0.000000 P0 +8 10 2 2 Ni-58 P0 0.000000 0.000000 P0 +9 10 2 2 Ni-60 P0 0.000000 0.000000 P0 +10 10 2 2 Ni-61 P0 0.000000 0.000000 P0 +11 10 2 2 Ni-62 P0 0.000000 0.000000 P0 +12 10 2 2 Ni-64 P0 0.000000 0.000000 P0 +13 10 2 2 Mn-55 P0 0.000000 0.000000 P0 +14 10 2 2 Si-28 P0 0.000000 0.000000 P0 +15 10 2 2 Si-29 P0 0.000000 0.000000 P0 +16 10 2 2 Si-30 P0 0.000000 0.000000 P0 +17 10 2 2 Cr-50 P0 0.000000 0.000000 P0 +18 10 2 2 Cr-52 P0 0.000000 0.000000 P0 +19 10 2 2 Cr-53 P0 0.000000 0.000000 P0 +20 10 2 2 Cr-54 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. +21 10 1 H-1 0 0 +22 10 1 O-16 0 0 +23 10 1 B-10 0 0 +24 10 1 B-11 0 0 +25 10 1 Fe-54 0 0 +26 10 1 Fe-56 0 0 +27 10 1 Fe-57 0 0 +28 10 1 Fe-58 0 0 +29 10 1 Ni-58 0 0 +30 10 1 Ni-60 0 0 +31 10 1 Ni-61 0 0 +32 10 1 Ni-62 0 0 +33 10 1 Ni-64 0 0 +34 10 1 Mn-55 0 0 +35 10 1 Si-28 0 0 +36 10 1 Si-29 0 0 +37 10 1 Si-30 0 0 +38 10 1 Cr-50 0 0 +39 10 1 Cr-52 0 0 +40 10 1 Cr-53 0 0 +41 10 1 Cr-54 0 0 +0 10 2 H-1 0 0 +1 10 2 O-16 0 0 +2 10 2 B-10 0 0 +3 10 2 B-11 0 0 +4 10 2 Fe-54 0 0 +5 10 2 Fe-56 0 0 +6 10 2 Fe-57 0 0 +7 10 2 Fe-58 0 0 +8 10 2 Ni-58 0 0 +9 10 2 Ni-60 0 0 +10 10 2 Ni-61 0 0 +11 10 2 Ni-62 0 0 +12 10 2 Ni-64 0 0 +13 10 2 Mn-55 0 0 +14 10 2 Si-28 0 0 +15 10 2 Si-29 0 0 +16 10 2 Si-30 0 0 +17 10 2 Cr-50 0 0 +18 10 2 Cr-52 0 0 +19 10 2 Cr-53 0 0 +20 10 2 Cr-54 0 0 material group in nuclide mean std. dev. +9 11 1 H-1 0.131470 0.476035 +10 11 1 O-16 0.028684 0.043000 +11 11 1 B-10 0.000000 0.000000 +12 11 1 B-11 0.000000 0.000000 +13 11 1 Zr-90 0.021980 0.039963 +14 11 1 Zr-91 0.000000 0.000000 +15 11 1 Zr-92 0.000000 0.000000 +16 11 1 Zr-94 0.004191 0.087344 +17 11 1 Zr-96 0.000000 0.000000 +0 11 2 H-1 0.687243 1.239217 +1 11 2 O-16 0.000000 0.000000 +2 11 2 B-10 0.042902 0.060672 +3 11 2 B-11 0.000000 0.000000 +4 11 2 Zr-90 0.039576 0.105193 +5 11 2 Zr-91 0.000000 0.000000 +6 11 2 Zr-92 0.084226 0.103161 +7 11 2 Zr-94 0.092039 0.125985 +8 11 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. +9 11 1 H-1 0 0 +10 11 1 O-16 0 0 +11 11 1 B-10 0 0 +12 11 1 B-11 0 0 +13 11 1 Zr-90 0 0 +14 11 1 Zr-91 0 0 +15 11 1 Zr-92 0 0 +16 11 1 Zr-94 0 0 +17 11 1 Zr-96 0 0 +0 11 2 H-1 0 0 +1 11 2 O-16 0 0 +2 11 2 B-10 0 0 +3 11 2 B-11 0 0 +4 11 2 Zr-90 0 0 +5 11 2 Zr-91 0 0 +6 11 2 Zr-92 0 0 +7 11 2 Zr-94 0 0 +8 11 2 Zr-96 0 0 material group in group out nuclide moment mean std. dev. moment +27 11 1 1 H-1 P0 0.099594 0.442578 P0 +28 11 1 1 O-16 P0 0.028684 0.043000 P0 +29 11 1 1 B-10 P0 0.000000 0.000000 P0 +30 11 1 1 B-11 P0 0.000000 0.000000 P0 +31 11 1 1 Zr-90 P0 0.021980 0.039963 P0 +32 11 1 1 Zr-91 P0 0.000000 0.000000 P0 +33 11 1 1 Zr-92 P0 0.000000 0.000000 P0 +34 11 1 1 Zr-94 P0 0.004191 0.087344 P0 +35 11 1 1 Zr-96 P0 0.000000 0.000000 P0 +18 11 1 2 H-1 P0 0.031875 0.045078 P0 +19 11 1 2 O-16 P0 0.000000 0.000000 P0 +20 11 1 2 B-10 P0 0.000000 0.000000 P0 +21 11 1 2 B-11 P0 0.000000 0.000000 P0 +22 11 1 2 Zr-90 P0 0.000000 0.000000 P0 +23 11 1 2 Zr-91 P0 0.000000 0.000000 P0 +24 11 1 2 Zr-92 P0 0.000000 0.000000 P0 +25 11 1 2 Zr-94 P0 0.000000 0.000000 P0 +26 11 1 2 Zr-96 P0 0.000000 0.000000 P0 +9 11 2 1 H-1 P0 0.000000 0.000000 P0 +10 11 2 1 O-16 P0 0.000000 0.000000 P0 +11 11 2 1 B-10 P0 0.000000 0.000000 P0 +12 11 2 1 B-11 P0 0.000000 0.000000 P0 +13 11 2 1 Zr-90 P0 0.000000 0.000000 P0 +14 11 2 1 Zr-91 P0 0.000000 0.000000 P0 +15 11 2 1 Zr-92 P0 0.000000 0.000000 P0 +16 11 2 1 Zr-94 P0 0.000000 0.000000 P0 +17 11 2 1 Zr-96 P0 0.000000 0.000000 P0 +0 11 2 2 H-1 P0 0.687243 1.239217 P0 +1 11 2 2 O-16 P0 0.000000 0.000000 P0 +2 11 2 2 B-10 P0 0.000000 0.000000 P0 +3 11 2 2 B-11 P0 0.000000 0.000000 P0 +4 11 2 2 Zr-90 P0 0.039576 0.105193 P0 +5 11 2 2 Zr-91 P0 0.000000 0.000000 P0 +6 11 2 2 Zr-92 P0 0.084226 0.103161 P0 +7 11 2 2 Zr-94 P0 0.092039 0.125985 P0 +8 11 2 2 Zr-96 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. +9 11 1 H-1 0 0 +10 11 1 O-16 0 0 +11 11 1 B-10 0 0 +12 11 1 B-11 0 0 +13 11 1 Zr-90 0 0 +14 11 1 Zr-91 0 0 +15 11 1 Zr-92 0 0 +16 11 1 Zr-94 0 0 +17 11 1 Zr-96 0 0 +0 11 2 H-1 0 0 +1 11 2 O-16 0 0 +2 11 2 B-10 0 0 +3 11 2 B-11 0 0 +4 11 2 Zr-90 0 0 +5 11 2 Zr-91 0 0 +6 11 2 Zr-92 0 0 +7 11 2 Zr-94 0 0 +8 11 2 Zr-96 0 0 material group in nuclide mean std. dev. +9 12 1 H-1 0.098944 0.178543 +10 12 1 O-16 0.013270 0.020403 +11 12 1 B-10 0.000000 0.000000 +12 12 1 B-11 0.000000 0.000000 +13 12 1 Zr-90 0.089997 0.075538 +14 12 1 Zr-91 0.000000 0.000000 +15 12 1 Zr-92 0.003501 0.017031 +16 12 1 Zr-94 0.004850 0.016327 +17 12 1 Zr-96 0.002730 0.017476 +0 12 2 H-1 1.261686 1.980336 +1 12 2 O-16 0.079159 0.104796 +2 12 2 B-10 0.016928 0.023940 +3 12 2 B-11 0.000000 0.000000 +4 12 2 Zr-90 0.000000 0.000000 +5 12 2 Zr-91 0.033201 0.040665 +6 12 2 Zr-92 0.000000 0.000000 +7 12 2 Zr-94 0.000000 0.000000 +8 12 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. +9 12 1 H-1 0 0 +10 12 1 O-16 0 0 +11 12 1 B-10 0 0 +12 12 1 B-11 0 0 +13 12 1 Zr-90 0 0 +14 12 1 Zr-91 0 0 +15 12 1 Zr-92 0 0 +16 12 1 Zr-94 0 0 +17 12 1 Zr-96 0 0 +0 12 2 H-1 0 0 +1 12 2 O-16 0 0 +2 12 2 B-10 0 0 +3 12 2 B-11 0 0 +4 12 2 Zr-90 0 0 +5 12 2 Zr-91 0 0 +6 12 2 Zr-92 0 0 +7 12 2 Zr-94 0 0 +8 12 2 Zr-96 0 0 material group in group out nuclide moment mean std. dev. moment +27 12 1 1 H-1 P0 0.071704 0.167588 P0 +28 12 1 1 O-16 P0 0.013270 0.020403 P0 +29 12 1 1 B-10 P0 0.000000 0.000000 P0 +30 12 1 1 B-11 P0 0.000000 0.000000 P0 +31 12 1 1 Zr-90 P0 0.089997 0.075538 P0 +32 12 1 1 Zr-91 P0 0.000000 0.000000 P0 +33 12 1 1 Zr-92 P0 0.003501 0.017031 P0 +34 12 1 1 Zr-94 P0 0.004850 0.016327 P0 +35 12 1 1 Zr-96 P0 0.002730 0.017476 P0 +18 12 1 2 H-1 P0 0.027240 0.029555 P0 +19 12 1 2 O-16 P0 0.000000 0.000000 P0 +20 12 1 2 B-10 P0 0.000000 0.000000 P0 +21 12 1 2 B-11 P0 0.000000 0.000000 P0 +22 12 1 2 Zr-90 P0 0.000000 0.000000 P0 +23 12 1 2 Zr-91 P0 0.000000 0.000000 P0 +24 12 1 2 Zr-92 P0 0.000000 0.000000 P0 +25 12 1 2 Zr-94 P0 0.000000 0.000000 P0 +26 12 1 2 Zr-96 P0 0.000000 0.000000 P0 +9 12 2 1 H-1 P0 0.000000 0.000000 P0 +10 12 2 1 O-16 P0 0.000000 0.000000 P0 +11 12 2 1 B-10 P0 0.000000 0.000000 P0 +12 12 2 1 B-11 P0 0.000000 0.000000 P0 +13 12 2 1 Zr-90 P0 0.000000 0.000000 P0 +14 12 2 1 Zr-91 P0 0.000000 0.000000 P0 +15 12 2 1 Zr-92 P0 0.000000 0.000000 P0 +16 12 2 1 Zr-94 P0 0.000000 0.000000 P0 +17 12 2 1 Zr-96 P0 0.000000 0.000000 P0 +0 12 2 2 H-1 P0 1.244758 1.956675 P0 +1 12 2 2 O-16 P0 0.079159 0.104796 P0 +2 12 2 2 B-10 P0 0.000000 0.000000 P0 +3 12 2 2 B-11 P0 0.000000 0.000000 P0 +4 12 2 2 Zr-90 P0 0.000000 0.000000 P0 +5 12 2 2 Zr-91 P0 0.033201 0.040665 P0 +6 12 2 2 Zr-92 P0 0.000000 0.000000 P0 +7 12 2 2 Zr-94 P0 0.000000 0.000000 P0 +8 12 2 2 Zr-96 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. +9 12 1 H-1 0 0 +10 12 1 O-16 0 0 +11 12 1 B-10 0 0 +12 12 1 B-11 0 0 +13 12 1 Zr-90 0 0 +14 12 1 Zr-91 0 0 +15 12 1 Zr-92 0 0 +16 12 1 Zr-94 0 0 +17 12 1 Zr-96 0 0 +0 12 2 H-1 0 0 +1 12 2 O-16 0 0 +2 12 2 B-10 0 0 +3 12 2 B-11 0 0 +4 12 2 Zr-90 0 0 +5 12 2 Zr-91 0 0 +6 12 2 Zr-92 0 0 +7 12 2 Zr-94 0 0 +8 12 2 Zr-96 0 0 \ No newline at end of file From a6fd59a6227cdf2ae29c0e71778d457e335b0bcf Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Tue, 10 May 2016 22:00:39 -0400 Subject: [PATCH 519/650] Updated MGXS tests --- .../results_true.dat | 62 +- .../results_true.dat | 4 +- .../results_true.dat | 140 +- .../results_true.dat | 2520 ++++++++--------- 4 files changed, 1363 insertions(+), 1363 deletions(-) diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index 2afa47d6f6..5f1d886b09 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -2,48 +2,48 @@ 0 1 1 total 0.412084 0.02359 material group in nuclide mean std. dev. 0 1 1 total 0.076425 0.003691 material group in group out nuclide moment mean std. dev. moment 0 1 1 1 total P0 0.345643 0.021487 P0 material group out nuclide mean std. dev. -0 1 1 total 1 0.055333 material group in nuclide mean std. dev. +0 1 1 total 1.0 0.055333 material group in nuclide mean std. dev. 0 2 1 total 0.241262 0.00841 material group in nuclide mean std. dev. -0 2 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 2 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 0 2 1 1 total P0 0.241262 0.00841 P0 material group out nuclide mean std. dev. -0 2 1 total 0 0 material group in nuclide mean std. dev. +0 2 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 3 1 total 0.400028 0.034667 material group in nuclide mean std. dev. -0 3 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 3 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 0 3 1 1 total P0 0.393462 0.033646 P0 material group out nuclide mean std. dev. -0 3 1 total 0 0 material group in nuclide mean std. dev. +0 3 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 4 1 total 0.377402 0.072937 material group in nuclide mean std. dev. -0 4 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 4 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 0 4 1 1 total P0 0.371473 0.071226 P0 material group out nuclide mean std. dev. -0 4 1 total 0 0 material group in nuclide mean std. dev. -0 5 1 total 0 0 material group in nuclide mean std. dev. -0 5 1 total 0 0 material group in group out nuclide moment mean std. dev. moment -0 5 1 1 total P0 0 0 P0 material group out nuclide mean std. dev. -0 5 1 total 0 0 material group in nuclide mean std. dev. -0 6 1 total 0 0 material group in nuclide mean std. dev. -0 6 1 total 0 0 material group in group out nuclide moment mean std. dev. moment -0 6 1 1 total P0 0 0 P0 material group out nuclide mean std. dev. -0 6 1 total 0 0 material group in nuclide mean std. dev. -0 7 1 total 0 0 material group in nuclide mean std. dev. -0 7 1 total 0 0 material group in group out nuclide moment mean std. dev. moment -0 7 1 1 total P0 0 0 P0 material group out nuclide mean std. dev. -0 7 1 total 0 0 material group in nuclide mean std. dev. -0 8 1 total 0 0 material group in nuclide mean std. dev. -0 8 1 total 0 0 material group in group out nuclide moment mean std. dev. moment -0 8 1 1 total P0 0 0 P0 material group out nuclide mean std. dev. -0 8 1 total 0 0 material group in nuclide mean std. dev. +0 4 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 5 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment +0 5 1 1 total P0 0.0 0.0 P0 material group out nuclide mean std. dev. +0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 6 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment +0 6 1 1 total P0 0.0 0.0 P0 material group out nuclide mean std. dev. +0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 7 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment +0 7 1 1 total P0 0.0 0.0 P0 material group out nuclide mean std. dev. +0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 8 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment +0 8 1 1 total P0 0.0 0.0 P0 material group out nuclide mean std. dev. +0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 9 1 total 0.600536 0.748875 material group in nuclide mean std. dev. -0 9 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 9 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 0 9 1 1 total P0 0.600536 0.748875 P0 material group out nuclide mean std. dev. -0 9 1 total 0 0 material group in nuclide mean std. dev. +0 9 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 10 1 total 0.235515 0.613974 material group in nuclide mean std. dev. -0 10 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 10 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 0 10 1 1 total P0 0.235515 0.613974 P0 material group out nuclide mean std. dev. -0 10 1 total 0 0 material group in nuclide mean std. dev. +0 10 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 11 1 total 0.510145 0.741941 material group in nuclide mean std. dev. -0 11 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 11 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 0 11 1 1 total P0 0.491857 0.715554 P0 material group out nuclide mean std. dev. -0 11 1 total 0 0 material group in nuclide mean std. dev. +0 11 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 12 1 total 0.73836 0.825631 material group in nuclide mean std. dev. -0 12 1 total 0 0 material group in group out nuclide moment mean std. dev. moment +0 12 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 0 12 1 1 total P0 0.723265 0.808231 P0 material group out nuclide mean std. dev. -0 12 1 total 0 0 \ No newline at end of file +0 12 1 total 0.0 0.0 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index 4daa6cd97e..014eabfa52 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,5 +1,5 @@ avg(distribcell) group in nuclide mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.718919 0.520644 avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 avg(distribcell) group in group out nuclide moment mean std. dev. moment +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 avg(distribcell) group in group out nuclide moment mean std. dev. moment 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P0 0.695166 0.510606 P0 avg(distribcell) group out nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 \ No newline at end of file +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index a4b08dd4aa..4e6d882085 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -7,115 +7,115 @@ 2 1 1 2 total P0 0.001559 0.000510 P0 1 1 2 1 total P0 0.000000 0.000000 P0 0 1 2 2 total P0 0.422051 0.021617 P0 material group out nuclide mean std. dev. -1 1 1 total 1 0.055333 -0 1 2 total 0 0.000000 material group in nuclide mean std. dev. +1 1 1 total 1.0 0.055333 +0 1 2 total 0.0 0.000000 material group in nuclide mean std. dev. 1 2 1 total 0.237254 0.008184 0 2 2 total 0.285930 0.048796 material group in nuclide mean std. dev. -1 2 1 total 0 0 -0 2 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +1 2 1 total 0.0 0.0 +0 2 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 3 2 1 1 total P0 0.237254 0.008184 P0 2 2 1 2 total P0 0.000000 0.000000 P0 1 2 2 1 total P0 0.000000 0.000000 P0 0 2 2 2 total P0 0.285930 0.048796 P0 material group out nuclide mean std. dev. -1 2 1 total 0 0 -0 2 2 total 0 0 material group in nuclide mean std. dev. +1 2 1 total 0.0 0.0 +0 2 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 3 1 total 0.286906 0.027401 0 3 2 total 1.418151 0.265308 material group in nuclide mean std. dev. -1 3 1 total 0 0 -0 3 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +1 3 1 total 0.0 0.0 +0 3 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 3 3 1 1 total P0 0.259937 0.026115 P0 2 3 1 2 total P0 0.026187 0.001665 P0 1 3 2 1 total P0 0.000000 0.000000 P0 0 3 2 2 total P0 1.359521 0.258505 P0 material group out nuclide mean std. dev. -1 3 1 total 0 0 -0 3 2 total 0 0 material group in nuclide mean std. dev. +1 3 1 total 0.0 0.0 +0 3 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 4 1 total 0.242447 0.061031 0 4 2 total 1.253959 0.388363 material group in nuclide mean std. dev. -1 4 1 total 0 0 -0 4 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +1 4 1 total 0.0 0.0 +0 4 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 3 4 1 1 total P0 0.217930 0.058565 P0 2 4 1 2 total P0 0.023662 0.003083 P0 1 4 2 1 total P0 0.000000 0.000000 P0 0 4 2 2 total P0 1.215074 0.381025 P0 material group out nuclide mean std. dev. -1 4 1 total 0 0 -0 4 2 total 0 0 material group in nuclide mean std. dev. -1 5 1 total 0 0 -0 5 2 total 0 0 material group in nuclide mean std. dev. -1 5 1 total 0 0 -0 5 2 total 0 0 material group in group out nuclide moment mean std. dev. moment -3 5 1 1 total P0 0 0 P0 -2 5 1 2 total P0 0 0 P0 -1 5 2 1 total P0 0 0 P0 -0 5 2 2 total P0 0 0 P0 material group out nuclide mean std. dev. -1 5 1 total 0 0 -0 5 2 total 0 0 material group in nuclide mean std. dev. -1 6 1 total 0 0 -0 6 2 total 0 0 material group in nuclide mean std. dev. -1 6 1 total 0 0 -0 6 2 total 0 0 material group in group out nuclide moment mean std. dev. moment -3 6 1 1 total P0 0 0 P0 -2 6 1 2 total P0 0 0 P0 -1 6 2 1 total P0 0 0 P0 -0 6 2 2 total P0 0 0 P0 material group out nuclide mean std. dev. -1 6 1 total 0 0 -0 6 2 total 0 0 material group in nuclide mean std. dev. -1 7 1 total 0 0 -0 7 2 total 0 0 material group in nuclide mean std. dev. -1 7 1 total 0 0 -0 7 2 total 0 0 material group in group out nuclide moment mean std. dev. moment -3 7 1 1 total P0 0 0 P0 -2 7 1 2 total P0 0 0 P0 -1 7 2 1 total P0 0 0 P0 -0 7 2 2 total P0 0 0 P0 material group out nuclide mean std. dev. -1 7 1 total 0 0 -0 7 2 total 0 0 material group in nuclide mean std. dev. -1 8 1 total 0 0 -0 8 2 total 0 0 material group in nuclide mean std. dev. -1 8 1 total 0 0 -0 8 2 total 0 0 material group in group out nuclide moment mean std. dev. moment -3 8 1 1 total P0 0 0 P0 -2 8 1 2 total P0 0 0 P0 -1 8 2 1 total P0 0 0 P0 -0 8 2 2 total P0 0 0 P0 material group out nuclide mean std. dev. -1 8 1 total 0 0 -0 8 2 total 0 0 material group in nuclide mean std. dev. +1 4 1 total 0.0 0.0 +0 4 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment +3 5 1 1 total P0 0.0 0.0 P0 +2 5 1 2 total P0 0.0 0.0 P0 +1 5 2 1 total P0 0.0 0.0 P0 +0 5 2 2 total P0 0.0 0.0 P0 material group out nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment +3 6 1 1 total P0 0.0 0.0 P0 +2 6 1 2 total P0 0.0 0.0 P0 +1 6 2 1 total P0 0.0 0.0 P0 +0 6 2 2 total P0 0.0 0.0 P0 material group out nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment +3 7 1 1 total P0 0.0 0.0 P0 +2 7 1 2 total P0 0.0 0.0 P0 +1 7 2 1 total P0 0.0 0.0 P0 +0 7 2 2 total P0 0.0 0.0 P0 material group out nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment +3 8 1 1 total P0 0.0 0.0 P0 +2 8 1 2 total P0 0.0 0.0 P0 +1 8 2 1 total P0 0.0 0.0 P0 +0 8 2 2 total P0 0.0 0.0 P0 material group out nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 9 1 total 0.600536 0.748875 0 9 2 total 0.000000 0.000000 material group in nuclide mean std. dev. -1 9 1 total 0 0 -0 9 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +1 9 1 total 0.0 0.0 +0 9 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 3 9 1 1 total P0 0.600536 0.748875 P0 2 9 1 2 total P0 0.000000 0.000000 P0 1 9 2 1 total P0 0.000000 0.000000 P0 0 9 2 2 total P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. -1 9 1 total 0 0 -0 9 2 total 0 0 material group in nuclide mean std. dev. +1 9 1 total 0.0 0.0 +0 9 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 10 1 total 0.235515 0.613974 0 10 2 total 0.000000 0.000000 material group in nuclide mean std. dev. -1 10 1 total 0 0 -0 10 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +1 10 1 total 0.0 0.0 +0 10 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 3 10 1 1 total P0 0.235515 0.613974 P0 2 10 1 2 total P0 0.000000 0.000000 P0 1 10 2 1 total P0 0.000000 0.000000 P0 0 10 2 2 total P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. -1 10 1 total 0 0 -0 10 2 total 0 0 material group in nuclide mean std. dev. +1 10 1 total 0.0 0.0 +0 10 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 11 1 total 0.186324 0.632129 0 11 2 total 0.945986 1.591133 material group in nuclide mean std. dev. -1 11 1 total 0 0 -0 11 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +1 11 1 total 0.0 0.0 +0 11 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 3 11 1 1 total P0 0.154449 0.597686 P0 2 11 1 2 total P0 0.031875 0.045078 P0 1 11 2 1 total P0 0.000000 0.000000 P0 0 11 2 2 total P0 0.903085 1.532144 P0 material group out nuclide mean std. dev. -1 11 1 total 0 0 -0 11 2 total 0 0 material group in nuclide mean std. dev. +1 11 1 total 0.0 0.0 +0 11 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 12 1 total 0.213292 0.271444 0 12 2 total 1.390975 2.137346 material group in nuclide mean std. dev. -1 12 1 total 0 0 -0 12 2 total 0 0 material group in group out nuclide moment mean std. dev. moment +1 12 1 total 0.0 0.0 +0 12 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 3 12 1 1 total P0 0.186052 0.257633 P0 2 12 1 2 total P0 0.027240 0.029555 P0 1 12 2 1 total P0 0.000000 0.000000 P0 0 12 2 2 total P0 1.357118 2.089846 P0 material group out nuclide mean std. dev. -1 12 1 total 0 0 -0 12 2 total 0 0 \ No newline at end of file +1 12 1 total 0.0 0.0 +0 12 2 total 0.0 0.0 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index aac5ff1ef4..ff34c9fff7 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -271,74 +271,74 @@ 31 1 2 2 Eu-153 P0 0.000000 0.000000 P0 32 1 2 2 Gd-155 P0 0.000000 0.000000 P0 33 1 2 2 O-16 P0 0.196946 0.014729 P0 material group out nuclide mean std. dev. -34 1 1 U-234 0 0.000000 -35 1 1 U-235 1 0.066362 -36 1 1 U-236 0 0.000000 -37 1 1 U-238 1 0.093082 -38 1 1 Np-237 0 0.000000 -39 1 1 Pu-238 0 0.000000 -40 1 1 Pu-239 1 0.104567 -41 1 1 Pu-240 0 0.000000 -42 1 1 Pu-241 1 0.263696 -43 1 1 Pu-242 0 0.000000 -44 1 1 Am-241 0 0.000000 -45 1 1 Am-242m 0 0.000000 -46 1 1 Am-243 0 0.000000 -47 1 1 Cm-242 0 0.000000 -48 1 1 Cm-243 0 0.000000 -49 1 1 Cm-244 0 0.000000 -50 1 1 Cm-245 0 0.000000 -51 1 1 Mo-95 0 0.000000 -52 1 1 Tc-99 0 0.000000 -53 1 1 Ru-101 0 0.000000 -54 1 1 Ru-103 0 0.000000 -55 1 1 Ag-109 0 0.000000 -56 1 1 Xe-135 0 0.000000 -57 1 1 Cs-133 0 0.000000 -58 1 1 Nd-143 0 0.000000 -59 1 1 Nd-145 0 0.000000 -60 1 1 Sm-147 0 0.000000 -61 1 1 Sm-149 0 0.000000 -62 1 1 Sm-150 0 0.000000 -63 1 1 Sm-151 0 0.000000 -64 1 1 Sm-152 0 0.000000 -65 1 1 Eu-153 0 0.000000 -66 1 1 Gd-155 0 0.000000 -67 1 1 O-16 0 0.000000 -0 1 2 U-234 0 0.000000 -1 1 2 U-235 0 0.000000 -2 1 2 U-236 0 0.000000 -3 1 2 U-238 0 0.000000 -4 1 2 Np-237 0 0.000000 -5 1 2 Pu-238 0 0.000000 -6 1 2 Pu-239 0 0.000000 -7 1 2 Pu-240 0 0.000000 -8 1 2 Pu-241 0 0.000000 -9 1 2 Pu-242 0 0.000000 -10 1 2 Am-241 0 0.000000 -11 1 2 Am-242m 0 0.000000 -12 1 2 Am-243 0 0.000000 -13 1 2 Cm-242 0 0.000000 -14 1 2 Cm-243 0 0.000000 -15 1 2 Cm-244 0 0.000000 -16 1 2 Cm-245 0 0.000000 -17 1 2 Mo-95 0 0.000000 -18 1 2 Tc-99 0 0.000000 -19 1 2 Ru-101 0 0.000000 -20 1 2 Ru-103 0 0.000000 -21 1 2 Ag-109 0 0.000000 -22 1 2 Xe-135 0 0.000000 -23 1 2 Cs-133 0 0.000000 -24 1 2 Nd-143 0 0.000000 -25 1 2 Nd-145 0 0.000000 -26 1 2 Sm-147 0 0.000000 -27 1 2 Sm-149 0 0.000000 -28 1 2 Sm-150 0 0.000000 -29 1 2 Sm-151 0 0.000000 -30 1 2 Sm-152 0 0.000000 -31 1 2 Eu-153 0 0.000000 -32 1 2 Gd-155 0 0.000000 -33 1 2 O-16 0 0.000000 material group in nuclide mean std. dev. +34 1 1 U-234 0.0 0.000000 +35 1 1 U-235 1.0 0.066362 +36 1 1 U-236 0.0 0.000000 +37 1 1 U-238 1.0 0.093082 +38 1 1 Np-237 0.0 0.000000 +39 1 1 Pu-238 0.0 0.000000 +40 1 1 Pu-239 1.0 0.104567 +41 1 1 Pu-240 0.0 0.000000 +42 1 1 Pu-241 1.0 0.263696 +43 1 1 Pu-242 0.0 0.000000 +44 1 1 Am-241 0.0 0.000000 +45 1 1 Am-242m 0.0 0.000000 +46 1 1 Am-243 0.0 0.000000 +47 1 1 Cm-242 0.0 0.000000 +48 1 1 Cm-243 0.0 0.000000 +49 1 1 Cm-244 0.0 0.000000 +50 1 1 Cm-245 0.0 0.000000 +51 1 1 Mo-95 0.0 0.000000 +52 1 1 Tc-99 0.0 0.000000 +53 1 1 Ru-101 0.0 0.000000 +54 1 1 Ru-103 0.0 0.000000 +55 1 1 Ag-109 0.0 0.000000 +56 1 1 Xe-135 0.0 0.000000 +57 1 1 Cs-133 0.0 0.000000 +58 1 1 Nd-143 0.0 0.000000 +59 1 1 Nd-145 0.0 0.000000 +60 1 1 Sm-147 0.0 0.000000 +61 1 1 Sm-149 0.0 0.000000 +62 1 1 Sm-150 0.0 0.000000 +63 1 1 Sm-151 0.0 0.000000 +64 1 1 Sm-152 0.0 0.000000 +65 1 1 Eu-153 0.0 0.000000 +66 1 1 Gd-155 0.0 0.000000 +67 1 1 O-16 0.0 0.000000 +0 1 2 U-234 0.0 0.000000 +1 1 2 U-235 0.0 0.000000 +2 1 2 U-236 0.0 0.000000 +3 1 2 U-238 0.0 0.000000 +4 1 2 Np-237 0.0 0.000000 +5 1 2 Pu-238 0.0 0.000000 +6 1 2 Pu-239 0.0 0.000000 +7 1 2 Pu-240 0.0 0.000000 +8 1 2 Pu-241 0.0 0.000000 +9 1 2 Pu-242 0.0 0.000000 +10 1 2 Am-241 0.0 0.000000 +11 1 2 Am-242m 0.0 0.000000 +12 1 2 Am-243 0.0 0.000000 +13 1 2 Cm-242 0.0 0.000000 +14 1 2 Cm-243 0.0 0.000000 +15 1 2 Cm-244 0.0 0.000000 +16 1 2 Cm-245 0.0 0.000000 +17 1 2 Mo-95 0.0 0.000000 +18 1 2 Tc-99 0.0 0.000000 +19 1 2 Ru-101 0.0 0.000000 +20 1 2 Ru-103 0.0 0.000000 +21 1 2 Ag-109 0.0 0.000000 +22 1 2 Xe-135 0.0 0.000000 +23 1 2 Cs-133 0.0 0.000000 +24 1 2 Nd-143 0.0 0.000000 +25 1 2 Nd-145 0.0 0.000000 +26 1 2 Sm-147 0.0 0.000000 +27 1 2 Sm-149 0.0 0.000000 +28 1 2 Sm-150 0.0 0.000000 +29 1 2 Sm-151 0.0 0.000000 +30 1 2 Sm-152 0.0 0.000000 +31 1 2 Eu-153 0.0 0.000000 +32 1 2 Gd-155 0.0 0.000000 +33 1 2 O-16 0.0 0.000000 material group in nuclide mean std. dev. 5 2 1 Zr-90 0.104734 0.008915 6 2 1 Zr-91 0.036155 0.003735 7 2 1 Zr-92 0.042422 0.003029 @@ -349,16 +349,16 @@ 2 2 2 Zr-92 0.041633 0.016323 3 2 2 Zr-94 0.060818 0.021483 4 2 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -5 2 1 Zr-90 0 0 -6 2 1 Zr-91 0 0 -7 2 1 Zr-92 0 0 -8 2 1 Zr-94 0 0 -9 2 1 Zr-96 0 0 -0 2 2 Zr-90 0 0 -1 2 2 Zr-91 0 0 -2 2 2 Zr-92 0 0 -3 2 2 Zr-94 0 0 -4 2 2 Zr-96 0 0 material group in group out nuclide moment mean std. dev. moment +5 2 1 Zr-90 0.0 0.0 +6 2 1 Zr-91 0.0 0.0 +7 2 1 Zr-92 0.0 0.0 +8 2 1 Zr-94 0.0 0.0 +9 2 1 Zr-96 0.0 0.0 +0 2 2 Zr-90 0.0 0.0 +1 2 2 Zr-91 0.0 0.0 +2 2 2 Zr-92 0.0 0.0 +3 2 2 Zr-94 0.0 0.0 +4 2 2 Zr-96 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 15 2 1 1 Zr-90 P0 0.104734 0.008915 P0 16 2 1 1 Zr-91 P0 0.036155 0.003735 P0 17 2 1 1 Zr-92 P0 0.042422 0.003029 P0 @@ -379,16 +379,16 @@ 2 2 2 2 Zr-92 P0 0.041633 0.016323 P0 3 2 2 2 Zr-94 P0 0.060818 0.021483 P0 4 2 2 2 Zr-96 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. -5 2 1 Zr-90 0 0 -6 2 1 Zr-91 0 0 -7 2 1 Zr-92 0 0 -8 2 1 Zr-94 0 0 -9 2 1 Zr-96 0 0 -0 2 2 Zr-90 0 0 -1 2 2 Zr-91 0 0 -2 2 2 Zr-92 0 0 -3 2 2 Zr-94 0 0 -4 2 2 Zr-96 0 0 material group in nuclide mean std. dev. +5 2 1 Zr-90 0.0 0.0 +6 2 1 Zr-91 0.0 0.0 +7 2 1 Zr-92 0.0 0.0 +8 2 1 Zr-94 0.0 0.0 +9 2 1 Zr-96 0.0 0.0 +0 2 2 Zr-90 0.0 0.0 +1 2 2 Zr-91 0.0 0.0 +2 2 2 Zr-92 0.0 0.0 +3 2 2 Zr-94 0.0 0.0 +4 2 2 Zr-96 0.0 0.0 material group in nuclide mean std. dev. 4 3 1 H-1 0.207103 0.023028 5 3 1 O-16 0.079282 0.005197 6 3 1 B-10 0.000521 0.000244 @@ -397,14 +397,14 @@ 1 3 2 O-16 0.085363 0.014001 2 3 2 B-10 0.049249 0.008232 3 3 2 B-11 0.000195 0.001527 material group in nuclide mean std. dev. -4 3 1 H-1 0 0 -5 3 1 O-16 0 0 -6 3 1 B-10 0 0 -7 3 1 B-11 0 0 -0 3 2 H-1 0 0 -1 3 2 O-16 0 0 -2 3 2 B-10 0 0 -3 3 2 B-11 0 0 material group in group out nuclide moment mean std. dev. moment +4 3 1 H-1 0.0 0.0 +5 3 1 O-16 0.0 0.0 +6 3 1 B-10 0.0 0.0 +7 3 1 B-11 0.0 0.0 +0 3 2 H-1 0.0 0.0 +1 3 2 O-16 0.0 0.0 +2 3 2 B-10 0.0 0.0 +3 3 2 B-11 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 12 3 1 1 H-1 P0 0.181306 0.022102 P0 13 3 1 1 O-16 P0 0.078631 0.005044 P0 14 3 1 1 B-10 P0 0.000000 0.000000 P0 @@ -421,14 +421,14 @@ 1 3 2 2 O-16 P0 0.085363 0.014001 P0 2 3 2 2 B-10 P0 0.000000 0.000000 P0 3 3 2 2 B-11 P0 0.000195 0.001527 P0 material group out nuclide mean std. dev. -4 3 1 H-1 0 0 -5 3 1 O-16 0 0 -6 3 1 B-10 0 0 -7 3 1 B-11 0 0 -0 3 2 H-1 0 0 -1 3 2 O-16 0 0 -2 3 2 B-10 0 0 -3 3 2 B-11 0 0 material group in nuclide mean std. dev. +4 3 1 H-1 0.0 0.0 +5 3 1 O-16 0.0 0.0 +6 3 1 B-10 0.0 0.0 +7 3 1 B-11 0.0 0.0 +0 3 2 H-1 0.0 0.0 +1 3 2 O-16 0.0 0.0 +2 3 2 B-10 0.0 0.0 +3 3 2 B-11 0.0 0.0 material group in nuclide mean std. dev. 4 4 1 H-1 0.175242 0.053715 5 4 1 O-16 0.066545 0.010083 6 4 1 B-10 0.000570 0.000352 @@ -437,14 +437,14 @@ 1 4 2 O-16 0.085141 0.028073 2 4 2 B-10 0.025923 0.007276 3 4 2 B-11 0.000000 0.000000 material group in nuclide mean std. dev. -4 4 1 H-1 0 0 -5 4 1 O-16 0 0 -6 4 1 B-10 0 0 -7 4 1 B-11 0 0 -0 4 2 H-1 0 0 -1 4 2 O-16 0 0 -2 4 2 B-10 0 0 -3 4 2 B-11 0 0 material group in group out nuclide moment mean std. dev. moment +4 4 1 H-1 0.0 0.0 +5 4 1 O-16 0.0 0.0 +6 4 1 B-10 0.0 0.0 +7 4 1 B-11 0.0 0.0 +0 4 2 H-1 0.0 0.0 +1 4 2 O-16 0.0 0.0 +2 4 2 B-10 0.0 0.0 +3 4 2 B-11 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 12 4 1 1 H-1 P0 0.151295 0.051491 P0 13 4 1 1 O-16 P0 0.066545 0.010083 P0 14 4 1 1 B-10 P0 0.000000 0.000000 P0 @@ -461,914 +461,914 @@ 1 4 2 2 O-16 P0 0.085141 0.028073 P0 2 4 2 2 B-10 P0 0.000000 0.000000 P0 3 4 2 2 B-11 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. -4 4 1 H-1 0 0 -5 4 1 O-16 0 0 -6 4 1 B-10 0 0 -7 4 1 B-11 0 0 -0 4 2 H-1 0 0 -1 4 2 O-16 0 0 -2 4 2 B-10 0 0 -3 4 2 B-11 0 0 material group in nuclide mean std. dev. -27 5 1 Fe-54 0 0 -28 5 1 Fe-56 0 0 -29 5 1 Fe-57 0 0 -30 5 1 Fe-58 0 0 -31 5 1 Ni-58 0 0 -32 5 1 Ni-60 0 0 -33 5 1 Ni-61 0 0 -34 5 1 Ni-62 0 0 -35 5 1 Ni-64 0 0 -36 5 1 Mn-55 0 0 -37 5 1 Mo-92 0 0 -38 5 1 Mo-94 0 0 -39 5 1 Mo-95 0 0 -40 5 1 Mo-96 0 0 -41 5 1 Mo-97 0 0 -42 5 1 Mo-98 0 0 -43 5 1 Mo-100 0 0 -44 5 1 Si-28 0 0 -45 5 1 Si-29 0 0 -46 5 1 Si-30 0 0 -47 5 1 Cr-50 0 0 -48 5 1 Cr-52 0 0 -49 5 1 Cr-53 0 0 -50 5 1 Cr-54 0 0 -51 5 1 C-Nat 0 0 -52 5 1 Cu-63 0 0 -53 5 1 Cu-65 0 0 -0 5 2 Fe-54 0 0 -1 5 2 Fe-56 0 0 -2 5 2 Fe-57 0 0 -3 5 2 Fe-58 0 0 -4 5 2 Ni-58 0 0 -5 5 2 Ni-60 0 0 -6 5 2 Ni-61 0 0 -7 5 2 Ni-62 0 0 -8 5 2 Ni-64 0 0 -9 5 2 Mn-55 0 0 -10 5 2 Mo-92 0 0 -11 5 2 Mo-94 0 0 -12 5 2 Mo-95 0 0 -13 5 2 Mo-96 0 0 -14 5 2 Mo-97 0 0 -15 5 2 Mo-98 0 0 -16 5 2 Mo-100 0 0 -17 5 2 Si-28 0 0 -18 5 2 Si-29 0 0 -19 5 2 Si-30 0 0 -20 5 2 Cr-50 0 0 -21 5 2 Cr-52 0 0 -22 5 2 Cr-53 0 0 -23 5 2 Cr-54 0 0 -24 5 2 C-Nat 0 0 -25 5 2 Cu-63 0 0 -26 5 2 Cu-65 0 0 material group in nuclide mean std. dev. -27 5 1 Fe-54 0 0 -28 5 1 Fe-56 0 0 -29 5 1 Fe-57 0 0 -30 5 1 Fe-58 0 0 -31 5 1 Ni-58 0 0 -32 5 1 Ni-60 0 0 -33 5 1 Ni-61 0 0 -34 5 1 Ni-62 0 0 -35 5 1 Ni-64 0 0 -36 5 1 Mn-55 0 0 -37 5 1 Mo-92 0 0 -38 5 1 Mo-94 0 0 -39 5 1 Mo-95 0 0 -40 5 1 Mo-96 0 0 -41 5 1 Mo-97 0 0 -42 5 1 Mo-98 0 0 -43 5 1 Mo-100 0 0 -44 5 1 Si-28 0 0 -45 5 1 Si-29 0 0 -46 5 1 Si-30 0 0 -47 5 1 Cr-50 0 0 -48 5 1 Cr-52 0 0 -49 5 1 Cr-53 0 0 -50 5 1 Cr-54 0 0 -51 5 1 C-Nat 0 0 -52 5 1 Cu-63 0 0 -53 5 1 Cu-65 0 0 -0 5 2 Fe-54 0 0 -1 5 2 Fe-56 0 0 -2 5 2 Fe-57 0 0 -3 5 2 Fe-58 0 0 -4 5 2 Ni-58 0 0 -5 5 2 Ni-60 0 0 -6 5 2 Ni-61 0 0 -7 5 2 Ni-62 0 0 -8 5 2 Ni-64 0 0 -9 5 2 Mn-55 0 0 -10 5 2 Mo-92 0 0 -11 5 2 Mo-94 0 0 -12 5 2 Mo-95 0 0 -13 5 2 Mo-96 0 0 -14 5 2 Mo-97 0 0 -15 5 2 Mo-98 0 0 -16 5 2 Mo-100 0 0 -17 5 2 Si-28 0 0 -18 5 2 Si-29 0 0 -19 5 2 Si-30 0 0 -20 5 2 Cr-50 0 0 -21 5 2 Cr-52 0 0 -22 5 2 Cr-53 0 0 -23 5 2 Cr-54 0 0 -24 5 2 C-Nat 0 0 -25 5 2 Cu-63 0 0 -26 5 2 Cu-65 0 0 material group in group out nuclide moment mean std. dev. moment -81 5 1 1 Fe-54 P0 0 0 P0 -82 5 1 1 Fe-56 P0 0 0 P0 -83 5 1 1 Fe-57 P0 0 0 P0 -84 5 1 1 Fe-58 P0 0 0 P0 -85 5 1 1 Ni-58 P0 0 0 P0 -86 5 1 1 Ni-60 P0 0 0 P0 -87 5 1 1 Ni-61 P0 0 0 P0 -88 5 1 1 Ni-62 P0 0 0 P0 -89 5 1 1 Ni-64 P0 0 0 P0 -90 5 1 1 Mn-55 P0 0 0 P0 -91 5 1 1 Mo-92 P0 0 0 P0 -92 5 1 1 Mo-94 P0 0 0 P0 -93 5 1 1 Mo-95 P0 0 0 P0 -94 5 1 1 Mo-96 P0 0 0 P0 -95 5 1 1 Mo-97 P0 0 0 P0 -96 5 1 1 Mo-98 P0 0 0 P0 -97 5 1 1 Mo-100 P0 0 0 P0 -98 5 1 1 Si-28 P0 0 0 P0 -99 5 1 1 Si-29 P0 0 0 P0 -100 5 1 1 Si-30 P0 0 0 P0 -101 5 1 1 Cr-50 P0 0 0 P0 -102 5 1 1 Cr-52 P0 0 0 P0 -103 5 1 1 Cr-53 P0 0 0 P0 -104 5 1 1 Cr-54 P0 0 0 P0 -105 5 1 1 C-Nat P0 0 0 P0 -106 5 1 1 Cu-63 P0 0 0 P0 -107 5 1 1 Cu-65 P0 0 0 P0 -54 5 1 2 Fe-54 P0 0 0 P0 -55 5 1 2 Fe-56 P0 0 0 P0 -56 5 1 2 Fe-57 P0 0 0 P0 -57 5 1 2 Fe-58 P0 0 0 P0 -58 5 1 2 Ni-58 P0 0 0 P0 -59 5 1 2 Ni-60 P0 0 0 P0 -60 5 1 2 Ni-61 P0 0 0 P0 -61 5 1 2 Ni-62 P0 0 0 P0 -62 5 1 2 Ni-64 P0 0 0 P0 -63 5 1 2 Mn-55 P0 0 0 P0 -64 5 1 2 Mo-92 P0 0 0 P0 -65 5 1 2 Mo-94 P0 0 0 P0 -66 5 1 2 Mo-95 P0 0 0 P0 -67 5 1 2 Mo-96 P0 0 0 P0 -68 5 1 2 Mo-97 P0 0 0 P0 -69 5 1 2 Mo-98 P0 0 0 P0 -70 5 1 2 Mo-100 P0 0 0 P0 -71 5 1 2 Si-28 P0 0 0 P0 -72 5 1 2 Si-29 P0 0 0 P0 -73 5 1 2 Si-30 P0 0 0 P0 -74 5 1 2 Cr-50 P0 0 0 P0 -75 5 1 2 Cr-52 P0 0 0 P0 -76 5 1 2 Cr-53 P0 0 0 P0 -77 5 1 2 Cr-54 P0 0 0 P0 -78 5 1 2 C-Nat P0 0 0 P0 -79 5 1 2 Cu-63 P0 0 0 P0 -80 5 1 2 Cu-65 P0 0 0 P0 -27 5 2 1 Fe-54 P0 0 0 P0 -28 5 2 1 Fe-56 P0 0 0 P0 -29 5 2 1 Fe-57 P0 0 0 P0 -30 5 2 1 Fe-58 P0 0 0 P0 -31 5 2 1 Ni-58 P0 0 0 P0 -32 5 2 1 Ni-60 P0 0 0 P0 -33 5 2 1 Ni-61 P0 0 0 P0 -34 5 2 1 Ni-62 P0 0 0 P0 -35 5 2 1 Ni-64 P0 0 0 P0 -36 5 2 1 Mn-55 P0 0 0 P0 -37 5 2 1 Mo-92 P0 0 0 P0 -38 5 2 1 Mo-94 P0 0 0 P0 -39 5 2 1 Mo-95 P0 0 0 P0 -40 5 2 1 Mo-96 P0 0 0 P0 -41 5 2 1 Mo-97 P0 0 0 P0 -42 5 2 1 Mo-98 P0 0 0 P0 -43 5 2 1 Mo-100 P0 0 0 P0 -44 5 2 1 Si-28 P0 0 0 P0 -45 5 2 1 Si-29 P0 0 0 P0 -46 5 2 1 Si-30 P0 0 0 P0 -47 5 2 1 Cr-50 P0 0 0 P0 -48 5 2 1 Cr-52 P0 0 0 P0 -49 5 2 1 Cr-53 P0 0 0 P0 -50 5 2 1 Cr-54 P0 0 0 P0 -51 5 2 1 C-Nat P0 0 0 P0 -52 5 2 1 Cu-63 P0 0 0 P0 -53 5 2 1 Cu-65 P0 0 0 P0 -0 5 2 2 Fe-54 P0 0 0 P0 -1 5 2 2 Fe-56 P0 0 0 P0 -2 5 2 2 Fe-57 P0 0 0 P0 -3 5 2 2 Fe-58 P0 0 0 P0 -4 5 2 2 Ni-58 P0 0 0 P0 -5 5 2 2 Ni-60 P0 0 0 P0 -6 5 2 2 Ni-61 P0 0 0 P0 -7 5 2 2 Ni-62 P0 0 0 P0 -8 5 2 2 Ni-64 P0 0 0 P0 -9 5 2 2 Mn-55 P0 0 0 P0 -10 5 2 2 Mo-92 P0 0 0 P0 -11 5 2 2 Mo-94 P0 0 0 P0 -12 5 2 2 Mo-95 P0 0 0 P0 -13 5 2 2 Mo-96 P0 0 0 P0 -14 5 2 2 Mo-97 P0 0 0 P0 -15 5 2 2 Mo-98 P0 0 0 P0 -16 5 2 2 Mo-100 P0 0 0 P0 -17 5 2 2 Si-28 P0 0 0 P0 -18 5 2 2 Si-29 P0 0 0 P0 -19 5 2 2 Si-30 P0 0 0 P0 -20 5 2 2 Cr-50 P0 0 0 P0 -21 5 2 2 Cr-52 P0 0 0 P0 -22 5 2 2 Cr-53 P0 0 0 P0 -23 5 2 2 Cr-54 P0 0 0 P0 -24 5 2 2 C-Nat P0 0 0 P0 -25 5 2 2 Cu-63 P0 0 0 P0 -26 5 2 2 Cu-65 P0 0 0 P0 material group out nuclide mean std. dev. -27 5 1 Fe-54 0 0 -28 5 1 Fe-56 0 0 -29 5 1 Fe-57 0 0 -30 5 1 Fe-58 0 0 -31 5 1 Ni-58 0 0 -32 5 1 Ni-60 0 0 -33 5 1 Ni-61 0 0 -34 5 1 Ni-62 0 0 -35 5 1 Ni-64 0 0 -36 5 1 Mn-55 0 0 -37 5 1 Mo-92 0 0 -38 5 1 Mo-94 0 0 -39 5 1 Mo-95 0 0 -40 5 1 Mo-96 0 0 -41 5 1 Mo-97 0 0 -42 5 1 Mo-98 0 0 -43 5 1 Mo-100 0 0 -44 5 1 Si-28 0 0 -45 5 1 Si-29 0 0 -46 5 1 Si-30 0 0 -47 5 1 Cr-50 0 0 -48 5 1 Cr-52 0 0 -49 5 1 Cr-53 0 0 -50 5 1 Cr-54 0 0 -51 5 1 C-Nat 0 0 -52 5 1 Cu-63 0 0 -53 5 1 Cu-65 0 0 -0 5 2 Fe-54 0 0 -1 5 2 Fe-56 0 0 -2 5 2 Fe-57 0 0 -3 5 2 Fe-58 0 0 -4 5 2 Ni-58 0 0 -5 5 2 Ni-60 0 0 -6 5 2 Ni-61 0 0 -7 5 2 Ni-62 0 0 -8 5 2 Ni-64 0 0 -9 5 2 Mn-55 0 0 -10 5 2 Mo-92 0 0 -11 5 2 Mo-94 0 0 -12 5 2 Mo-95 0 0 -13 5 2 Mo-96 0 0 -14 5 2 Mo-97 0 0 -15 5 2 Mo-98 0 0 -16 5 2 Mo-100 0 0 -17 5 2 Si-28 0 0 -18 5 2 Si-29 0 0 -19 5 2 Si-30 0 0 -20 5 2 Cr-50 0 0 -21 5 2 Cr-52 0 0 -22 5 2 Cr-53 0 0 -23 5 2 Cr-54 0 0 -24 5 2 C-Nat 0 0 -25 5 2 Cu-63 0 0 -26 5 2 Cu-65 0 0 material group in nuclide mean std. dev. -21 6 1 H-1 0 0 -22 6 1 O-16 0 0 -23 6 1 B-10 0 0 -24 6 1 B-11 0 0 -25 6 1 Fe-54 0 0 -26 6 1 Fe-56 0 0 -27 6 1 Fe-57 0 0 -28 6 1 Fe-58 0 0 -29 6 1 Ni-58 0 0 -30 6 1 Ni-60 0 0 -31 6 1 Ni-61 0 0 -32 6 1 Ni-62 0 0 -33 6 1 Ni-64 0 0 -34 6 1 Mn-55 0 0 -35 6 1 Si-28 0 0 -36 6 1 Si-29 0 0 -37 6 1 Si-30 0 0 -38 6 1 Cr-50 0 0 -39 6 1 Cr-52 0 0 -40 6 1 Cr-53 0 0 -41 6 1 Cr-54 0 0 -0 6 2 H-1 0 0 -1 6 2 O-16 0 0 -2 6 2 B-10 0 0 -3 6 2 B-11 0 0 -4 6 2 Fe-54 0 0 -5 6 2 Fe-56 0 0 -6 6 2 Fe-57 0 0 -7 6 2 Fe-58 0 0 -8 6 2 Ni-58 0 0 -9 6 2 Ni-60 0 0 -10 6 2 Ni-61 0 0 -11 6 2 Ni-62 0 0 -12 6 2 Ni-64 0 0 -13 6 2 Mn-55 0 0 -14 6 2 Si-28 0 0 -15 6 2 Si-29 0 0 -16 6 2 Si-30 0 0 -17 6 2 Cr-50 0 0 -18 6 2 Cr-52 0 0 -19 6 2 Cr-53 0 0 -20 6 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 6 1 H-1 0 0 -22 6 1 O-16 0 0 -23 6 1 B-10 0 0 -24 6 1 B-11 0 0 -25 6 1 Fe-54 0 0 -26 6 1 Fe-56 0 0 -27 6 1 Fe-57 0 0 -28 6 1 Fe-58 0 0 -29 6 1 Ni-58 0 0 -30 6 1 Ni-60 0 0 -31 6 1 Ni-61 0 0 -32 6 1 Ni-62 0 0 -33 6 1 Ni-64 0 0 -34 6 1 Mn-55 0 0 -35 6 1 Si-28 0 0 -36 6 1 Si-29 0 0 -37 6 1 Si-30 0 0 -38 6 1 Cr-50 0 0 -39 6 1 Cr-52 0 0 -40 6 1 Cr-53 0 0 -41 6 1 Cr-54 0 0 -0 6 2 H-1 0 0 -1 6 2 O-16 0 0 -2 6 2 B-10 0 0 -3 6 2 B-11 0 0 -4 6 2 Fe-54 0 0 -5 6 2 Fe-56 0 0 -6 6 2 Fe-57 0 0 -7 6 2 Fe-58 0 0 -8 6 2 Ni-58 0 0 -9 6 2 Ni-60 0 0 -10 6 2 Ni-61 0 0 -11 6 2 Ni-62 0 0 -12 6 2 Ni-64 0 0 -13 6 2 Mn-55 0 0 -14 6 2 Si-28 0 0 -15 6 2 Si-29 0 0 -16 6 2 Si-30 0 0 -17 6 2 Cr-50 0 0 -18 6 2 Cr-52 0 0 -19 6 2 Cr-53 0 0 -20 6 2 Cr-54 0 0 material group in group out nuclide moment mean std. dev. moment -63 6 1 1 H-1 P0 0 0 P0 -64 6 1 1 O-16 P0 0 0 P0 -65 6 1 1 B-10 P0 0 0 P0 -66 6 1 1 B-11 P0 0 0 P0 -67 6 1 1 Fe-54 P0 0 0 P0 -68 6 1 1 Fe-56 P0 0 0 P0 -69 6 1 1 Fe-57 P0 0 0 P0 -70 6 1 1 Fe-58 P0 0 0 P0 -71 6 1 1 Ni-58 P0 0 0 P0 -72 6 1 1 Ni-60 P0 0 0 P0 -73 6 1 1 Ni-61 P0 0 0 P0 -74 6 1 1 Ni-62 P0 0 0 P0 -75 6 1 1 Ni-64 P0 0 0 P0 -76 6 1 1 Mn-55 P0 0 0 P0 -77 6 1 1 Si-28 P0 0 0 P0 -78 6 1 1 Si-29 P0 0 0 P0 -79 6 1 1 Si-30 P0 0 0 P0 -80 6 1 1 Cr-50 P0 0 0 P0 -81 6 1 1 Cr-52 P0 0 0 P0 -82 6 1 1 Cr-53 P0 0 0 P0 -83 6 1 1 Cr-54 P0 0 0 P0 -42 6 1 2 H-1 P0 0 0 P0 -43 6 1 2 O-16 P0 0 0 P0 -44 6 1 2 B-10 P0 0 0 P0 -45 6 1 2 B-11 P0 0 0 P0 -46 6 1 2 Fe-54 P0 0 0 P0 -47 6 1 2 Fe-56 P0 0 0 P0 -48 6 1 2 Fe-57 P0 0 0 P0 -49 6 1 2 Fe-58 P0 0 0 P0 -50 6 1 2 Ni-58 P0 0 0 P0 -51 6 1 2 Ni-60 P0 0 0 P0 -52 6 1 2 Ni-61 P0 0 0 P0 -53 6 1 2 Ni-62 P0 0 0 P0 -54 6 1 2 Ni-64 P0 0 0 P0 -55 6 1 2 Mn-55 P0 0 0 P0 -56 6 1 2 Si-28 P0 0 0 P0 -57 6 1 2 Si-29 P0 0 0 P0 -58 6 1 2 Si-30 P0 0 0 P0 -59 6 1 2 Cr-50 P0 0 0 P0 -60 6 1 2 Cr-52 P0 0 0 P0 -61 6 1 2 Cr-53 P0 0 0 P0 -62 6 1 2 Cr-54 P0 0 0 P0 -21 6 2 1 H-1 P0 0 0 P0 -22 6 2 1 O-16 P0 0 0 P0 -23 6 2 1 B-10 P0 0 0 P0 -24 6 2 1 B-11 P0 0 0 P0 -25 6 2 1 Fe-54 P0 0 0 P0 -26 6 2 1 Fe-56 P0 0 0 P0 -27 6 2 1 Fe-57 P0 0 0 P0 -28 6 2 1 Fe-58 P0 0 0 P0 -29 6 2 1 Ni-58 P0 0 0 P0 -30 6 2 1 Ni-60 P0 0 0 P0 -31 6 2 1 Ni-61 P0 0 0 P0 -32 6 2 1 Ni-62 P0 0 0 P0 -33 6 2 1 Ni-64 P0 0 0 P0 -34 6 2 1 Mn-55 P0 0 0 P0 -35 6 2 1 Si-28 P0 0 0 P0 -36 6 2 1 Si-29 P0 0 0 P0 -37 6 2 1 Si-30 P0 0 0 P0 -38 6 2 1 Cr-50 P0 0 0 P0 -39 6 2 1 Cr-52 P0 0 0 P0 -40 6 2 1 Cr-53 P0 0 0 P0 -41 6 2 1 Cr-54 P0 0 0 P0 -0 6 2 2 H-1 P0 0 0 P0 -1 6 2 2 O-16 P0 0 0 P0 -2 6 2 2 B-10 P0 0 0 P0 -3 6 2 2 B-11 P0 0 0 P0 -4 6 2 2 Fe-54 P0 0 0 P0 -5 6 2 2 Fe-56 P0 0 0 P0 -6 6 2 2 Fe-57 P0 0 0 P0 -7 6 2 2 Fe-58 P0 0 0 P0 -8 6 2 2 Ni-58 P0 0 0 P0 -9 6 2 2 Ni-60 P0 0 0 P0 -10 6 2 2 Ni-61 P0 0 0 P0 -11 6 2 2 Ni-62 P0 0 0 P0 -12 6 2 2 Ni-64 P0 0 0 P0 -13 6 2 2 Mn-55 P0 0 0 P0 -14 6 2 2 Si-28 P0 0 0 P0 -15 6 2 2 Si-29 P0 0 0 P0 -16 6 2 2 Si-30 P0 0 0 P0 -17 6 2 2 Cr-50 P0 0 0 P0 -18 6 2 2 Cr-52 P0 0 0 P0 -19 6 2 2 Cr-53 P0 0 0 P0 -20 6 2 2 Cr-54 P0 0 0 P0 material group out nuclide mean std. dev. -21 6 1 H-1 0 0 -22 6 1 O-16 0 0 -23 6 1 B-10 0 0 -24 6 1 B-11 0 0 -25 6 1 Fe-54 0 0 -26 6 1 Fe-56 0 0 -27 6 1 Fe-57 0 0 -28 6 1 Fe-58 0 0 -29 6 1 Ni-58 0 0 -30 6 1 Ni-60 0 0 -31 6 1 Ni-61 0 0 -32 6 1 Ni-62 0 0 -33 6 1 Ni-64 0 0 -34 6 1 Mn-55 0 0 -35 6 1 Si-28 0 0 -36 6 1 Si-29 0 0 -37 6 1 Si-30 0 0 -38 6 1 Cr-50 0 0 -39 6 1 Cr-52 0 0 -40 6 1 Cr-53 0 0 -41 6 1 Cr-54 0 0 -0 6 2 H-1 0 0 -1 6 2 O-16 0 0 -2 6 2 B-10 0 0 -3 6 2 B-11 0 0 -4 6 2 Fe-54 0 0 -5 6 2 Fe-56 0 0 -6 6 2 Fe-57 0 0 -7 6 2 Fe-58 0 0 -8 6 2 Ni-58 0 0 -9 6 2 Ni-60 0 0 -10 6 2 Ni-61 0 0 -11 6 2 Ni-62 0 0 -12 6 2 Ni-64 0 0 -13 6 2 Mn-55 0 0 -14 6 2 Si-28 0 0 -15 6 2 Si-29 0 0 -16 6 2 Si-30 0 0 -17 6 2 Cr-50 0 0 -18 6 2 Cr-52 0 0 -19 6 2 Cr-53 0 0 -20 6 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 7 1 H-1 0 0 -22 7 1 O-16 0 0 -23 7 1 B-10 0 0 -24 7 1 B-11 0 0 -25 7 1 Fe-54 0 0 -26 7 1 Fe-56 0 0 -27 7 1 Fe-57 0 0 -28 7 1 Fe-58 0 0 -29 7 1 Ni-58 0 0 -30 7 1 Ni-60 0 0 -31 7 1 Ni-61 0 0 -32 7 1 Ni-62 0 0 -33 7 1 Ni-64 0 0 -34 7 1 Mn-55 0 0 -35 7 1 Si-28 0 0 -36 7 1 Si-29 0 0 -37 7 1 Si-30 0 0 -38 7 1 Cr-50 0 0 -39 7 1 Cr-52 0 0 -40 7 1 Cr-53 0 0 -41 7 1 Cr-54 0 0 -0 7 2 H-1 0 0 -1 7 2 O-16 0 0 -2 7 2 B-10 0 0 -3 7 2 B-11 0 0 -4 7 2 Fe-54 0 0 -5 7 2 Fe-56 0 0 -6 7 2 Fe-57 0 0 -7 7 2 Fe-58 0 0 -8 7 2 Ni-58 0 0 -9 7 2 Ni-60 0 0 -10 7 2 Ni-61 0 0 -11 7 2 Ni-62 0 0 -12 7 2 Ni-64 0 0 -13 7 2 Mn-55 0 0 -14 7 2 Si-28 0 0 -15 7 2 Si-29 0 0 -16 7 2 Si-30 0 0 -17 7 2 Cr-50 0 0 -18 7 2 Cr-52 0 0 -19 7 2 Cr-53 0 0 -20 7 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 7 1 H-1 0 0 -22 7 1 O-16 0 0 -23 7 1 B-10 0 0 -24 7 1 B-11 0 0 -25 7 1 Fe-54 0 0 -26 7 1 Fe-56 0 0 -27 7 1 Fe-57 0 0 -28 7 1 Fe-58 0 0 -29 7 1 Ni-58 0 0 -30 7 1 Ni-60 0 0 -31 7 1 Ni-61 0 0 -32 7 1 Ni-62 0 0 -33 7 1 Ni-64 0 0 -34 7 1 Mn-55 0 0 -35 7 1 Si-28 0 0 -36 7 1 Si-29 0 0 -37 7 1 Si-30 0 0 -38 7 1 Cr-50 0 0 -39 7 1 Cr-52 0 0 -40 7 1 Cr-53 0 0 -41 7 1 Cr-54 0 0 -0 7 2 H-1 0 0 -1 7 2 O-16 0 0 -2 7 2 B-10 0 0 -3 7 2 B-11 0 0 -4 7 2 Fe-54 0 0 -5 7 2 Fe-56 0 0 -6 7 2 Fe-57 0 0 -7 7 2 Fe-58 0 0 -8 7 2 Ni-58 0 0 -9 7 2 Ni-60 0 0 -10 7 2 Ni-61 0 0 -11 7 2 Ni-62 0 0 -12 7 2 Ni-64 0 0 -13 7 2 Mn-55 0 0 -14 7 2 Si-28 0 0 -15 7 2 Si-29 0 0 -16 7 2 Si-30 0 0 -17 7 2 Cr-50 0 0 -18 7 2 Cr-52 0 0 -19 7 2 Cr-53 0 0 -20 7 2 Cr-54 0 0 material group in group out nuclide moment mean std. dev. moment -63 7 1 1 H-1 P0 0 0 P0 -64 7 1 1 O-16 P0 0 0 P0 -65 7 1 1 B-10 P0 0 0 P0 -66 7 1 1 B-11 P0 0 0 P0 -67 7 1 1 Fe-54 P0 0 0 P0 -68 7 1 1 Fe-56 P0 0 0 P0 -69 7 1 1 Fe-57 P0 0 0 P0 -70 7 1 1 Fe-58 P0 0 0 P0 -71 7 1 1 Ni-58 P0 0 0 P0 -72 7 1 1 Ni-60 P0 0 0 P0 -73 7 1 1 Ni-61 P0 0 0 P0 -74 7 1 1 Ni-62 P0 0 0 P0 -75 7 1 1 Ni-64 P0 0 0 P0 -76 7 1 1 Mn-55 P0 0 0 P0 -77 7 1 1 Si-28 P0 0 0 P0 -78 7 1 1 Si-29 P0 0 0 P0 -79 7 1 1 Si-30 P0 0 0 P0 -80 7 1 1 Cr-50 P0 0 0 P0 -81 7 1 1 Cr-52 P0 0 0 P0 -82 7 1 1 Cr-53 P0 0 0 P0 -83 7 1 1 Cr-54 P0 0 0 P0 -42 7 1 2 H-1 P0 0 0 P0 -43 7 1 2 O-16 P0 0 0 P0 -44 7 1 2 B-10 P0 0 0 P0 -45 7 1 2 B-11 P0 0 0 P0 -46 7 1 2 Fe-54 P0 0 0 P0 -47 7 1 2 Fe-56 P0 0 0 P0 -48 7 1 2 Fe-57 P0 0 0 P0 -49 7 1 2 Fe-58 P0 0 0 P0 -50 7 1 2 Ni-58 P0 0 0 P0 -51 7 1 2 Ni-60 P0 0 0 P0 -52 7 1 2 Ni-61 P0 0 0 P0 -53 7 1 2 Ni-62 P0 0 0 P0 -54 7 1 2 Ni-64 P0 0 0 P0 -55 7 1 2 Mn-55 P0 0 0 P0 -56 7 1 2 Si-28 P0 0 0 P0 -57 7 1 2 Si-29 P0 0 0 P0 -58 7 1 2 Si-30 P0 0 0 P0 -59 7 1 2 Cr-50 P0 0 0 P0 -60 7 1 2 Cr-52 P0 0 0 P0 -61 7 1 2 Cr-53 P0 0 0 P0 -62 7 1 2 Cr-54 P0 0 0 P0 -21 7 2 1 H-1 P0 0 0 P0 -22 7 2 1 O-16 P0 0 0 P0 -23 7 2 1 B-10 P0 0 0 P0 -24 7 2 1 B-11 P0 0 0 P0 -25 7 2 1 Fe-54 P0 0 0 P0 -26 7 2 1 Fe-56 P0 0 0 P0 -27 7 2 1 Fe-57 P0 0 0 P0 -28 7 2 1 Fe-58 P0 0 0 P0 -29 7 2 1 Ni-58 P0 0 0 P0 -30 7 2 1 Ni-60 P0 0 0 P0 -31 7 2 1 Ni-61 P0 0 0 P0 -32 7 2 1 Ni-62 P0 0 0 P0 -33 7 2 1 Ni-64 P0 0 0 P0 -34 7 2 1 Mn-55 P0 0 0 P0 -35 7 2 1 Si-28 P0 0 0 P0 -36 7 2 1 Si-29 P0 0 0 P0 -37 7 2 1 Si-30 P0 0 0 P0 -38 7 2 1 Cr-50 P0 0 0 P0 -39 7 2 1 Cr-52 P0 0 0 P0 -40 7 2 1 Cr-53 P0 0 0 P0 -41 7 2 1 Cr-54 P0 0 0 P0 -0 7 2 2 H-1 P0 0 0 P0 -1 7 2 2 O-16 P0 0 0 P0 -2 7 2 2 B-10 P0 0 0 P0 -3 7 2 2 B-11 P0 0 0 P0 -4 7 2 2 Fe-54 P0 0 0 P0 -5 7 2 2 Fe-56 P0 0 0 P0 -6 7 2 2 Fe-57 P0 0 0 P0 -7 7 2 2 Fe-58 P0 0 0 P0 -8 7 2 2 Ni-58 P0 0 0 P0 -9 7 2 2 Ni-60 P0 0 0 P0 -10 7 2 2 Ni-61 P0 0 0 P0 -11 7 2 2 Ni-62 P0 0 0 P0 -12 7 2 2 Ni-64 P0 0 0 P0 -13 7 2 2 Mn-55 P0 0 0 P0 -14 7 2 2 Si-28 P0 0 0 P0 -15 7 2 2 Si-29 P0 0 0 P0 -16 7 2 2 Si-30 P0 0 0 P0 -17 7 2 2 Cr-50 P0 0 0 P0 -18 7 2 2 Cr-52 P0 0 0 P0 -19 7 2 2 Cr-53 P0 0 0 P0 -20 7 2 2 Cr-54 P0 0 0 P0 material group out nuclide mean std. dev. -21 7 1 H-1 0 0 -22 7 1 O-16 0 0 -23 7 1 B-10 0 0 -24 7 1 B-11 0 0 -25 7 1 Fe-54 0 0 -26 7 1 Fe-56 0 0 -27 7 1 Fe-57 0 0 -28 7 1 Fe-58 0 0 -29 7 1 Ni-58 0 0 -30 7 1 Ni-60 0 0 -31 7 1 Ni-61 0 0 -32 7 1 Ni-62 0 0 -33 7 1 Ni-64 0 0 -34 7 1 Mn-55 0 0 -35 7 1 Si-28 0 0 -36 7 1 Si-29 0 0 -37 7 1 Si-30 0 0 -38 7 1 Cr-50 0 0 -39 7 1 Cr-52 0 0 -40 7 1 Cr-53 0 0 -41 7 1 Cr-54 0 0 -0 7 2 H-1 0 0 -1 7 2 O-16 0 0 -2 7 2 B-10 0 0 -3 7 2 B-11 0 0 -4 7 2 Fe-54 0 0 -5 7 2 Fe-56 0 0 -6 7 2 Fe-57 0 0 -7 7 2 Fe-58 0 0 -8 7 2 Ni-58 0 0 -9 7 2 Ni-60 0 0 -10 7 2 Ni-61 0 0 -11 7 2 Ni-62 0 0 -12 7 2 Ni-64 0 0 -13 7 2 Mn-55 0 0 -14 7 2 Si-28 0 0 -15 7 2 Si-29 0 0 -16 7 2 Si-30 0 0 -17 7 2 Cr-50 0 0 -18 7 2 Cr-52 0 0 -19 7 2 Cr-53 0 0 -20 7 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 8 1 H-1 0 0 -22 8 1 O-16 0 0 -23 8 1 B-10 0 0 -24 8 1 B-11 0 0 -25 8 1 Fe-54 0 0 -26 8 1 Fe-56 0 0 -27 8 1 Fe-57 0 0 -28 8 1 Fe-58 0 0 -29 8 1 Ni-58 0 0 -30 8 1 Ni-60 0 0 -31 8 1 Ni-61 0 0 -32 8 1 Ni-62 0 0 -33 8 1 Ni-64 0 0 -34 8 1 Mn-55 0 0 -35 8 1 Si-28 0 0 -36 8 1 Si-29 0 0 -37 8 1 Si-30 0 0 -38 8 1 Cr-50 0 0 -39 8 1 Cr-52 0 0 -40 8 1 Cr-53 0 0 -41 8 1 Cr-54 0 0 -0 8 2 H-1 0 0 -1 8 2 O-16 0 0 -2 8 2 B-10 0 0 -3 8 2 B-11 0 0 -4 8 2 Fe-54 0 0 -5 8 2 Fe-56 0 0 -6 8 2 Fe-57 0 0 -7 8 2 Fe-58 0 0 -8 8 2 Ni-58 0 0 -9 8 2 Ni-60 0 0 -10 8 2 Ni-61 0 0 -11 8 2 Ni-62 0 0 -12 8 2 Ni-64 0 0 -13 8 2 Mn-55 0 0 -14 8 2 Si-28 0 0 -15 8 2 Si-29 0 0 -16 8 2 Si-30 0 0 -17 8 2 Cr-50 0 0 -18 8 2 Cr-52 0 0 -19 8 2 Cr-53 0 0 -20 8 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 8 1 H-1 0 0 -22 8 1 O-16 0 0 -23 8 1 B-10 0 0 -24 8 1 B-11 0 0 -25 8 1 Fe-54 0 0 -26 8 1 Fe-56 0 0 -27 8 1 Fe-57 0 0 -28 8 1 Fe-58 0 0 -29 8 1 Ni-58 0 0 -30 8 1 Ni-60 0 0 -31 8 1 Ni-61 0 0 -32 8 1 Ni-62 0 0 -33 8 1 Ni-64 0 0 -34 8 1 Mn-55 0 0 -35 8 1 Si-28 0 0 -36 8 1 Si-29 0 0 -37 8 1 Si-30 0 0 -38 8 1 Cr-50 0 0 -39 8 1 Cr-52 0 0 -40 8 1 Cr-53 0 0 -41 8 1 Cr-54 0 0 -0 8 2 H-1 0 0 -1 8 2 O-16 0 0 -2 8 2 B-10 0 0 -3 8 2 B-11 0 0 -4 8 2 Fe-54 0 0 -5 8 2 Fe-56 0 0 -6 8 2 Fe-57 0 0 -7 8 2 Fe-58 0 0 -8 8 2 Ni-58 0 0 -9 8 2 Ni-60 0 0 -10 8 2 Ni-61 0 0 -11 8 2 Ni-62 0 0 -12 8 2 Ni-64 0 0 -13 8 2 Mn-55 0 0 -14 8 2 Si-28 0 0 -15 8 2 Si-29 0 0 -16 8 2 Si-30 0 0 -17 8 2 Cr-50 0 0 -18 8 2 Cr-52 0 0 -19 8 2 Cr-53 0 0 -20 8 2 Cr-54 0 0 material group in group out nuclide moment mean std. dev. moment -63 8 1 1 H-1 P0 0 0 P0 -64 8 1 1 O-16 P0 0 0 P0 -65 8 1 1 B-10 P0 0 0 P0 -66 8 1 1 B-11 P0 0 0 P0 -67 8 1 1 Fe-54 P0 0 0 P0 -68 8 1 1 Fe-56 P0 0 0 P0 -69 8 1 1 Fe-57 P0 0 0 P0 -70 8 1 1 Fe-58 P0 0 0 P0 -71 8 1 1 Ni-58 P0 0 0 P0 -72 8 1 1 Ni-60 P0 0 0 P0 -73 8 1 1 Ni-61 P0 0 0 P0 -74 8 1 1 Ni-62 P0 0 0 P0 -75 8 1 1 Ni-64 P0 0 0 P0 -76 8 1 1 Mn-55 P0 0 0 P0 -77 8 1 1 Si-28 P0 0 0 P0 -78 8 1 1 Si-29 P0 0 0 P0 -79 8 1 1 Si-30 P0 0 0 P0 -80 8 1 1 Cr-50 P0 0 0 P0 -81 8 1 1 Cr-52 P0 0 0 P0 -82 8 1 1 Cr-53 P0 0 0 P0 -83 8 1 1 Cr-54 P0 0 0 P0 -42 8 1 2 H-1 P0 0 0 P0 -43 8 1 2 O-16 P0 0 0 P0 -44 8 1 2 B-10 P0 0 0 P0 -45 8 1 2 B-11 P0 0 0 P0 -46 8 1 2 Fe-54 P0 0 0 P0 -47 8 1 2 Fe-56 P0 0 0 P0 -48 8 1 2 Fe-57 P0 0 0 P0 -49 8 1 2 Fe-58 P0 0 0 P0 -50 8 1 2 Ni-58 P0 0 0 P0 -51 8 1 2 Ni-60 P0 0 0 P0 -52 8 1 2 Ni-61 P0 0 0 P0 -53 8 1 2 Ni-62 P0 0 0 P0 -54 8 1 2 Ni-64 P0 0 0 P0 -55 8 1 2 Mn-55 P0 0 0 P0 -56 8 1 2 Si-28 P0 0 0 P0 -57 8 1 2 Si-29 P0 0 0 P0 -58 8 1 2 Si-30 P0 0 0 P0 -59 8 1 2 Cr-50 P0 0 0 P0 -60 8 1 2 Cr-52 P0 0 0 P0 -61 8 1 2 Cr-53 P0 0 0 P0 -62 8 1 2 Cr-54 P0 0 0 P0 -21 8 2 1 H-1 P0 0 0 P0 -22 8 2 1 O-16 P0 0 0 P0 -23 8 2 1 B-10 P0 0 0 P0 -24 8 2 1 B-11 P0 0 0 P0 -25 8 2 1 Fe-54 P0 0 0 P0 -26 8 2 1 Fe-56 P0 0 0 P0 -27 8 2 1 Fe-57 P0 0 0 P0 -28 8 2 1 Fe-58 P0 0 0 P0 -29 8 2 1 Ni-58 P0 0 0 P0 -30 8 2 1 Ni-60 P0 0 0 P0 -31 8 2 1 Ni-61 P0 0 0 P0 -32 8 2 1 Ni-62 P0 0 0 P0 -33 8 2 1 Ni-64 P0 0 0 P0 -34 8 2 1 Mn-55 P0 0 0 P0 -35 8 2 1 Si-28 P0 0 0 P0 -36 8 2 1 Si-29 P0 0 0 P0 -37 8 2 1 Si-30 P0 0 0 P0 -38 8 2 1 Cr-50 P0 0 0 P0 -39 8 2 1 Cr-52 P0 0 0 P0 -40 8 2 1 Cr-53 P0 0 0 P0 -41 8 2 1 Cr-54 P0 0 0 P0 -0 8 2 2 H-1 P0 0 0 P0 -1 8 2 2 O-16 P0 0 0 P0 -2 8 2 2 B-10 P0 0 0 P0 -3 8 2 2 B-11 P0 0 0 P0 -4 8 2 2 Fe-54 P0 0 0 P0 -5 8 2 2 Fe-56 P0 0 0 P0 -6 8 2 2 Fe-57 P0 0 0 P0 -7 8 2 2 Fe-58 P0 0 0 P0 -8 8 2 2 Ni-58 P0 0 0 P0 -9 8 2 2 Ni-60 P0 0 0 P0 -10 8 2 2 Ni-61 P0 0 0 P0 -11 8 2 2 Ni-62 P0 0 0 P0 -12 8 2 2 Ni-64 P0 0 0 P0 -13 8 2 2 Mn-55 P0 0 0 P0 -14 8 2 2 Si-28 P0 0 0 P0 -15 8 2 2 Si-29 P0 0 0 P0 -16 8 2 2 Si-30 P0 0 0 P0 -17 8 2 2 Cr-50 P0 0 0 P0 -18 8 2 2 Cr-52 P0 0 0 P0 -19 8 2 2 Cr-53 P0 0 0 P0 -20 8 2 2 Cr-54 P0 0 0 P0 material group out nuclide mean std. dev. -21 8 1 H-1 0 0 -22 8 1 O-16 0 0 -23 8 1 B-10 0 0 -24 8 1 B-11 0 0 -25 8 1 Fe-54 0 0 -26 8 1 Fe-56 0 0 -27 8 1 Fe-57 0 0 -28 8 1 Fe-58 0 0 -29 8 1 Ni-58 0 0 -30 8 1 Ni-60 0 0 -31 8 1 Ni-61 0 0 -32 8 1 Ni-62 0 0 -33 8 1 Ni-64 0 0 -34 8 1 Mn-55 0 0 -35 8 1 Si-28 0 0 -36 8 1 Si-29 0 0 -37 8 1 Si-30 0 0 -38 8 1 Cr-50 0 0 -39 8 1 Cr-52 0 0 -40 8 1 Cr-53 0 0 -41 8 1 Cr-54 0 0 -0 8 2 H-1 0 0 -1 8 2 O-16 0 0 -2 8 2 B-10 0 0 -3 8 2 B-11 0 0 -4 8 2 Fe-54 0 0 -5 8 2 Fe-56 0 0 -6 8 2 Fe-57 0 0 -7 8 2 Fe-58 0 0 -8 8 2 Ni-58 0 0 -9 8 2 Ni-60 0 0 -10 8 2 Ni-61 0 0 -11 8 2 Ni-62 0 0 -12 8 2 Ni-64 0 0 -13 8 2 Mn-55 0 0 -14 8 2 Si-28 0 0 -15 8 2 Si-29 0 0 -16 8 2 Si-30 0 0 -17 8 2 Cr-50 0 0 -18 8 2 Cr-52 0 0 -19 8 2 Cr-53 0 0 -20 8 2 Cr-54 0 0 material group in nuclide mean std. dev. +4 4 1 H-1 0.0 0.0 +5 4 1 O-16 0.0 0.0 +6 4 1 B-10 0.0 0.0 +7 4 1 B-11 0.0 0.0 +0 4 2 H-1 0.0 0.0 +1 4 2 O-16 0.0 0.0 +2 4 2 B-10 0.0 0.0 +3 4 2 B-11 0.0 0.0 material group in nuclide mean std. dev. +27 5 1 Fe-54 0.0 0.0 +28 5 1 Fe-56 0.0 0.0 +29 5 1 Fe-57 0.0 0.0 +30 5 1 Fe-58 0.0 0.0 +31 5 1 Ni-58 0.0 0.0 +32 5 1 Ni-60 0.0 0.0 +33 5 1 Ni-61 0.0 0.0 +34 5 1 Ni-62 0.0 0.0 +35 5 1 Ni-64 0.0 0.0 +36 5 1 Mn-55 0.0 0.0 +37 5 1 Mo-92 0.0 0.0 +38 5 1 Mo-94 0.0 0.0 +39 5 1 Mo-95 0.0 0.0 +40 5 1 Mo-96 0.0 0.0 +41 5 1 Mo-97 0.0 0.0 +42 5 1 Mo-98 0.0 0.0 +43 5 1 Mo-100 0.0 0.0 +44 5 1 Si-28 0.0 0.0 +45 5 1 Si-29 0.0 0.0 +46 5 1 Si-30 0.0 0.0 +47 5 1 Cr-50 0.0 0.0 +48 5 1 Cr-52 0.0 0.0 +49 5 1 Cr-53 0.0 0.0 +50 5 1 Cr-54 0.0 0.0 +51 5 1 C-Nat 0.0 0.0 +52 5 1 Cu-63 0.0 0.0 +53 5 1 Cu-65 0.0 0.0 +0 5 2 Fe-54 0.0 0.0 +1 5 2 Fe-56 0.0 0.0 +2 5 2 Fe-57 0.0 0.0 +3 5 2 Fe-58 0.0 0.0 +4 5 2 Ni-58 0.0 0.0 +5 5 2 Ni-60 0.0 0.0 +6 5 2 Ni-61 0.0 0.0 +7 5 2 Ni-62 0.0 0.0 +8 5 2 Ni-64 0.0 0.0 +9 5 2 Mn-55 0.0 0.0 +10 5 2 Mo-92 0.0 0.0 +11 5 2 Mo-94 0.0 0.0 +12 5 2 Mo-95 0.0 0.0 +13 5 2 Mo-96 0.0 0.0 +14 5 2 Mo-97 0.0 0.0 +15 5 2 Mo-98 0.0 0.0 +16 5 2 Mo-100 0.0 0.0 +17 5 2 Si-28 0.0 0.0 +18 5 2 Si-29 0.0 0.0 +19 5 2 Si-30 0.0 0.0 +20 5 2 Cr-50 0.0 0.0 +21 5 2 Cr-52 0.0 0.0 +22 5 2 Cr-53 0.0 0.0 +23 5 2 Cr-54 0.0 0.0 +24 5 2 C-Nat 0.0 0.0 +25 5 2 Cu-63 0.0 0.0 +26 5 2 Cu-65 0.0 0.0 material group in nuclide mean std. dev. +27 5 1 Fe-54 0.0 0.0 +28 5 1 Fe-56 0.0 0.0 +29 5 1 Fe-57 0.0 0.0 +30 5 1 Fe-58 0.0 0.0 +31 5 1 Ni-58 0.0 0.0 +32 5 1 Ni-60 0.0 0.0 +33 5 1 Ni-61 0.0 0.0 +34 5 1 Ni-62 0.0 0.0 +35 5 1 Ni-64 0.0 0.0 +36 5 1 Mn-55 0.0 0.0 +37 5 1 Mo-92 0.0 0.0 +38 5 1 Mo-94 0.0 0.0 +39 5 1 Mo-95 0.0 0.0 +40 5 1 Mo-96 0.0 0.0 +41 5 1 Mo-97 0.0 0.0 +42 5 1 Mo-98 0.0 0.0 +43 5 1 Mo-100 0.0 0.0 +44 5 1 Si-28 0.0 0.0 +45 5 1 Si-29 0.0 0.0 +46 5 1 Si-30 0.0 0.0 +47 5 1 Cr-50 0.0 0.0 +48 5 1 Cr-52 0.0 0.0 +49 5 1 Cr-53 0.0 0.0 +50 5 1 Cr-54 0.0 0.0 +51 5 1 C-Nat 0.0 0.0 +52 5 1 Cu-63 0.0 0.0 +53 5 1 Cu-65 0.0 0.0 +0 5 2 Fe-54 0.0 0.0 +1 5 2 Fe-56 0.0 0.0 +2 5 2 Fe-57 0.0 0.0 +3 5 2 Fe-58 0.0 0.0 +4 5 2 Ni-58 0.0 0.0 +5 5 2 Ni-60 0.0 0.0 +6 5 2 Ni-61 0.0 0.0 +7 5 2 Ni-62 0.0 0.0 +8 5 2 Ni-64 0.0 0.0 +9 5 2 Mn-55 0.0 0.0 +10 5 2 Mo-92 0.0 0.0 +11 5 2 Mo-94 0.0 0.0 +12 5 2 Mo-95 0.0 0.0 +13 5 2 Mo-96 0.0 0.0 +14 5 2 Mo-97 0.0 0.0 +15 5 2 Mo-98 0.0 0.0 +16 5 2 Mo-100 0.0 0.0 +17 5 2 Si-28 0.0 0.0 +18 5 2 Si-29 0.0 0.0 +19 5 2 Si-30 0.0 0.0 +20 5 2 Cr-50 0.0 0.0 +21 5 2 Cr-52 0.0 0.0 +22 5 2 Cr-53 0.0 0.0 +23 5 2 Cr-54 0.0 0.0 +24 5 2 C-Nat 0.0 0.0 +25 5 2 Cu-63 0.0 0.0 +26 5 2 Cu-65 0.0 0.0 material group in group out nuclide moment mean std. dev. moment +81 5 1 1 Fe-54 P0 0.0 0.0 P0 +82 5 1 1 Fe-56 P0 0.0 0.0 P0 +83 5 1 1 Fe-57 P0 0.0 0.0 P0 +84 5 1 1 Fe-58 P0 0.0 0.0 P0 +85 5 1 1 Ni-58 P0 0.0 0.0 P0 +86 5 1 1 Ni-60 P0 0.0 0.0 P0 +87 5 1 1 Ni-61 P0 0.0 0.0 P0 +88 5 1 1 Ni-62 P0 0.0 0.0 P0 +89 5 1 1 Ni-64 P0 0.0 0.0 P0 +90 5 1 1 Mn-55 P0 0.0 0.0 P0 +91 5 1 1 Mo-92 P0 0.0 0.0 P0 +92 5 1 1 Mo-94 P0 0.0 0.0 P0 +93 5 1 1 Mo-95 P0 0.0 0.0 P0 +94 5 1 1 Mo-96 P0 0.0 0.0 P0 +95 5 1 1 Mo-97 P0 0.0 0.0 P0 +96 5 1 1 Mo-98 P0 0.0 0.0 P0 +97 5 1 1 Mo-100 P0 0.0 0.0 P0 +98 5 1 1 Si-28 P0 0.0 0.0 P0 +99 5 1 1 Si-29 P0 0.0 0.0 P0 +100 5 1 1 Si-30 P0 0.0 0.0 P0 +101 5 1 1 Cr-50 P0 0.0 0.0 P0 +102 5 1 1 Cr-52 P0 0.0 0.0 P0 +103 5 1 1 Cr-53 P0 0.0 0.0 P0 +104 5 1 1 Cr-54 P0 0.0 0.0 P0 +105 5 1 1 C-Nat P0 0.0 0.0 P0 +106 5 1 1 Cu-63 P0 0.0 0.0 P0 +107 5 1 1 Cu-65 P0 0.0 0.0 P0 +54 5 1 2 Fe-54 P0 0.0 0.0 P0 +55 5 1 2 Fe-56 P0 0.0 0.0 P0 +56 5 1 2 Fe-57 P0 0.0 0.0 P0 +57 5 1 2 Fe-58 P0 0.0 0.0 P0 +58 5 1 2 Ni-58 P0 0.0 0.0 P0 +59 5 1 2 Ni-60 P0 0.0 0.0 P0 +60 5 1 2 Ni-61 P0 0.0 0.0 P0 +61 5 1 2 Ni-62 P0 0.0 0.0 P0 +62 5 1 2 Ni-64 P0 0.0 0.0 P0 +63 5 1 2 Mn-55 P0 0.0 0.0 P0 +64 5 1 2 Mo-92 P0 0.0 0.0 P0 +65 5 1 2 Mo-94 P0 0.0 0.0 P0 +66 5 1 2 Mo-95 P0 0.0 0.0 P0 +67 5 1 2 Mo-96 P0 0.0 0.0 P0 +68 5 1 2 Mo-97 P0 0.0 0.0 P0 +69 5 1 2 Mo-98 P0 0.0 0.0 P0 +70 5 1 2 Mo-100 P0 0.0 0.0 P0 +71 5 1 2 Si-28 P0 0.0 0.0 P0 +72 5 1 2 Si-29 P0 0.0 0.0 P0 +73 5 1 2 Si-30 P0 0.0 0.0 P0 +74 5 1 2 Cr-50 P0 0.0 0.0 P0 +75 5 1 2 Cr-52 P0 0.0 0.0 P0 +76 5 1 2 Cr-53 P0 0.0 0.0 P0 +77 5 1 2 Cr-54 P0 0.0 0.0 P0 +78 5 1 2 C-Nat P0 0.0 0.0 P0 +79 5 1 2 Cu-63 P0 0.0 0.0 P0 +80 5 1 2 Cu-65 P0 0.0 0.0 P0 +27 5 2 1 Fe-54 P0 0.0 0.0 P0 +28 5 2 1 Fe-56 P0 0.0 0.0 P0 +29 5 2 1 Fe-57 P0 0.0 0.0 P0 +30 5 2 1 Fe-58 P0 0.0 0.0 P0 +31 5 2 1 Ni-58 P0 0.0 0.0 P0 +32 5 2 1 Ni-60 P0 0.0 0.0 P0 +33 5 2 1 Ni-61 P0 0.0 0.0 P0 +34 5 2 1 Ni-62 P0 0.0 0.0 P0 +35 5 2 1 Ni-64 P0 0.0 0.0 P0 +36 5 2 1 Mn-55 P0 0.0 0.0 P0 +37 5 2 1 Mo-92 P0 0.0 0.0 P0 +38 5 2 1 Mo-94 P0 0.0 0.0 P0 +39 5 2 1 Mo-95 P0 0.0 0.0 P0 +40 5 2 1 Mo-96 P0 0.0 0.0 P0 +41 5 2 1 Mo-97 P0 0.0 0.0 P0 +42 5 2 1 Mo-98 P0 0.0 0.0 P0 +43 5 2 1 Mo-100 P0 0.0 0.0 P0 +44 5 2 1 Si-28 P0 0.0 0.0 P0 +45 5 2 1 Si-29 P0 0.0 0.0 P0 +46 5 2 1 Si-30 P0 0.0 0.0 P0 +47 5 2 1 Cr-50 P0 0.0 0.0 P0 +48 5 2 1 Cr-52 P0 0.0 0.0 P0 +49 5 2 1 Cr-53 P0 0.0 0.0 P0 +50 5 2 1 Cr-54 P0 0.0 0.0 P0 +51 5 2 1 C-Nat P0 0.0 0.0 P0 +52 5 2 1 Cu-63 P0 0.0 0.0 P0 +53 5 2 1 Cu-65 P0 0.0 0.0 P0 +0 5 2 2 Fe-54 P0 0.0 0.0 P0 +1 5 2 2 Fe-56 P0 0.0 0.0 P0 +2 5 2 2 Fe-57 P0 0.0 0.0 P0 +3 5 2 2 Fe-58 P0 0.0 0.0 P0 +4 5 2 2 Ni-58 P0 0.0 0.0 P0 +5 5 2 2 Ni-60 P0 0.0 0.0 P0 +6 5 2 2 Ni-61 P0 0.0 0.0 P0 +7 5 2 2 Ni-62 P0 0.0 0.0 P0 +8 5 2 2 Ni-64 P0 0.0 0.0 P0 +9 5 2 2 Mn-55 P0 0.0 0.0 P0 +10 5 2 2 Mo-92 P0 0.0 0.0 P0 +11 5 2 2 Mo-94 P0 0.0 0.0 P0 +12 5 2 2 Mo-95 P0 0.0 0.0 P0 +13 5 2 2 Mo-96 P0 0.0 0.0 P0 +14 5 2 2 Mo-97 P0 0.0 0.0 P0 +15 5 2 2 Mo-98 P0 0.0 0.0 P0 +16 5 2 2 Mo-100 P0 0.0 0.0 P0 +17 5 2 2 Si-28 P0 0.0 0.0 P0 +18 5 2 2 Si-29 P0 0.0 0.0 P0 +19 5 2 2 Si-30 P0 0.0 0.0 P0 +20 5 2 2 Cr-50 P0 0.0 0.0 P0 +21 5 2 2 Cr-52 P0 0.0 0.0 P0 +22 5 2 2 Cr-53 P0 0.0 0.0 P0 +23 5 2 2 Cr-54 P0 0.0 0.0 P0 +24 5 2 2 C-Nat P0 0.0 0.0 P0 +25 5 2 2 Cu-63 P0 0.0 0.0 P0 +26 5 2 2 Cu-65 P0 0.0 0.0 P0 material group out nuclide mean std. dev. +27 5 1 Fe-54 0.0 0.0 +28 5 1 Fe-56 0.0 0.0 +29 5 1 Fe-57 0.0 0.0 +30 5 1 Fe-58 0.0 0.0 +31 5 1 Ni-58 0.0 0.0 +32 5 1 Ni-60 0.0 0.0 +33 5 1 Ni-61 0.0 0.0 +34 5 1 Ni-62 0.0 0.0 +35 5 1 Ni-64 0.0 0.0 +36 5 1 Mn-55 0.0 0.0 +37 5 1 Mo-92 0.0 0.0 +38 5 1 Mo-94 0.0 0.0 +39 5 1 Mo-95 0.0 0.0 +40 5 1 Mo-96 0.0 0.0 +41 5 1 Mo-97 0.0 0.0 +42 5 1 Mo-98 0.0 0.0 +43 5 1 Mo-100 0.0 0.0 +44 5 1 Si-28 0.0 0.0 +45 5 1 Si-29 0.0 0.0 +46 5 1 Si-30 0.0 0.0 +47 5 1 Cr-50 0.0 0.0 +48 5 1 Cr-52 0.0 0.0 +49 5 1 Cr-53 0.0 0.0 +50 5 1 Cr-54 0.0 0.0 +51 5 1 C-Nat 0.0 0.0 +52 5 1 Cu-63 0.0 0.0 +53 5 1 Cu-65 0.0 0.0 +0 5 2 Fe-54 0.0 0.0 +1 5 2 Fe-56 0.0 0.0 +2 5 2 Fe-57 0.0 0.0 +3 5 2 Fe-58 0.0 0.0 +4 5 2 Ni-58 0.0 0.0 +5 5 2 Ni-60 0.0 0.0 +6 5 2 Ni-61 0.0 0.0 +7 5 2 Ni-62 0.0 0.0 +8 5 2 Ni-64 0.0 0.0 +9 5 2 Mn-55 0.0 0.0 +10 5 2 Mo-92 0.0 0.0 +11 5 2 Mo-94 0.0 0.0 +12 5 2 Mo-95 0.0 0.0 +13 5 2 Mo-96 0.0 0.0 +14 5 2 Mo-97 0.0 0.0 +15 5 2 Mo-98 0.0 0.0 +16 5 2 Mo-100 0.0 0.0 +17 5 2 Si-28 0.0 0.0 +18 5 2 Si-29 0.0 0.0 +19 5 2 Si-30 0.0 0.0 +20 5 2 Cr-50 0.0 0.0 +21 5 2 Cr-52 0.0 0.0 +22 5 2 Cr-53 0.0 0.0 +23 5 2 Cr-54 0.0 0.0 +24 5 2 C-Nat 0.0 0.0 +25 5 2 Cu-63 0.0 0.0 +26 5 2 Cu-65 0.0 0.0 material group in nuclide mean std. dev. +21 6 1 H-1 0.0 0.0 +22 6 1 O-16 0.0 0.0 +23 6 1 B-10 0.0 0.0 +24 6 1 B-11 0.0 0.0 +25 6 1 Fe-54 0.0 0.0 +26 6 1 Fe-56 0.0 0.0 +27 6 1 Fe-57 0.0 0.0 +28 6 1 Fe-58 0.0 0.0 +29 6 1 Ni-58 0.0 0.0 +30 6 1 Ni-60 0.0 0.0 +31 6 1 Ni-61 0.0 0.0 +32 6 1 Ni-62 0.0 0.0 +33 6 1 Ni-64 0.0 0.0 +34 6 1 Mn-55 0.0 0.0 +35 6 1 Si-28 0.0 0.0 +36 6 1 Si-29 0.0 0.0 +37 6 1 Si-30 0.0 0.0 +38 6 1 Cr-50 0.0 0.0 +39 6 1 Cr-52 0.0 0.0 +40 6 1 Cr-53 0.0 0.0 +41 6 1 Cr-54 0.0 0.0 +0 6 2 H-1 0.0 0.0 +1 6 2 O-16 0.0 0.0 +2 6 2 B-10 0.0 0.0 +3 6 2 B-11 0.0 0.0 +4 6 2 Fe-54 0.0 0.0 +5 6 2 Fe-56 0.0 0.0 +6 6 2 Fe-57 0.0 0.0 +7 6 2 Fe-58 0.0 0.0 +8 6 2 Ni-58 0.0 0.0 +9 6 2 Ni-60 0.0 0.0 +10 6 2 Ni-61 0.0 0.0 +11 6 2 Ni-62 0.0 0.0 +12 6 2 Ni-64 0.0 0.0 +13 6 2 Mn-55 0.0 0.0 +14 6 2 Si-28 0.0 0.0 +15 6 2 Si-29 0.0 0.0 +16 6 2 Si-30 0.0 0.0 +17 6 2 Cr-50 0.0 0.0 +18 6 2 Cr-52 0.0 0.0 +19 6 2 Cr-53 0.0 0.0 +20 6 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 6 1 H-1 0.0 0.0 +22 6 1 O-16 0.0 0.0 +23 6 1 B-10 0.0 0.0 +24 6 1 B-11 0.0 0.0 +25 6 1 Fe-54 0.0 0.0 +26 6 1 Fe-56 0.0 0.0 +27 6 1 Fe-57 0.0 0.0 +28 6 1 Fe-58 0.0 0.0 +29 6 1 Ni-58 0.0 0.0 +30 6 1 Ni-60 0.0 0.0 +31 6 1 Ni-61 0.0 0.0 +32 6 1 Ni-62 0.0 0.0 +33 6 1 Ni-64 0.0 0.0 +34 6 1 Mn-55 0.0 0.0 +35 6 1 Si-28 0.0 0.0 +36 6 1 Si-29 0.0 0.0 +37 6 1 Si-30 0.0 0.0 +38 6 1 Cr-50 0.0 0.0 +39 6 1 Cr-52 0.0 0.0 +40 6 1 Cr-53 0.0 0.0 +41 6 1 Cr-54 0.0 0.0 +0 6 2 H-1 0.0 0.0 +1 6 2 O-16 0.0 0.0 +2 6 2 B-10 0.0 0.0 +3 6 2 B-11 0.0 0.0 +4 6 2 Fe-54 0.0 0.0 +5 6 2 Fe-56 0.0 0.0 +6 6 2 Fe-57 0.0 0.0 +7 6 2 Fe-58 0.0 0.0 +8 6 2 Ni-58 0.0 0.0 +9 6 2 Ni-60 0.0 0.0 +10 6 2 Ni-61 0.0 0.0 +11 6 2 Ni-62 0.0 0.0 +12 6 2 Ni-64 0.0 0.0 +13 6 2 Mn-55 0.0 0.0 +14 6 2 Si-28 0.0 0.0 +15 6 2 Si-29 0.0 0.0 +16 6 2 Si-30 0.0 0.0 +17 6 2 Cr-50 0.0 0.0 +18 6 2 Cr-52 0.0 0.0 +19 6 2 Cr-53 0.0 0.0 +20 6 2 Cr-54 0.0 0.0 material group in group out nuclide moment mean std. dev. moment +63 6 1 1 H-1 P0 0.0 0.0 P0 +64 6 1 1 O-16 P0 0.0 0.0 P0 +65 6 1 1 B-10 P0 0.0 0.0 P0 +66 6 1 1 B-11 P0 0.0 0.0 P0 +67 6 1 1 Fe-54 P0 0.0 0.0 P0 +68 6 1 1 Fe-56 P0 0.0 0.0 P0 +69 6 1 1 Fe-57 P0 0.0 0.0 P0 +70 6 1 1 Fe-58 P0 0.0 0.0 P0 +71 6 1 1 Ni-58 P0 0.0 0.0 P0 +72 6 1 1 Ni-60 P0 0.0 0.0 P0 +73 6 1 1 Ni-61 P0 0.0 0.0 P0 +74 6 1 1 Ni-62 P0 0.0 0.0 P0 +75 6 1 1 Ni-64 P0 0.0 0.0 P0 +76 6 1 1 Mn-55 P0 0.0 0.0 P0 +77 6 1 1 Si-28 P0 0.0 0.0 P0 +78 6 1 1 Si-29 P0 0.0 0.0 P0 +79 6 1 1 Si-30 P0 0.0 0.0 P0 +80 6 1 1 Cr-50 P0 0.0 0.0 P0 +81 6 1 1 Cr-52 P0 0.0 0.0 P0 +82 6 1 1 Cr-53 P0 0.0 0.0 P0 +83 6 1 1 Cr-54 P0 0.0 0.0 P0 +42 6 1 2 H-1 P0 0.0 0.0 P0 +43 6 1 2 O-16 P0 0.0 0.0 P0 +44 6 1 2 B-10 P0 0.0 0.0 P0 +45 6 1 2 B-11 P0 0.0 0.0 P0 +46 6 1 2 Fe-54 P0 0.0 0.0 P0 +47 6 1 2 Fe-56 P0 0.0 0.0 P0 +48 6 1 2 Fe-57 P0 0.0 0.0 P0 +49 6 1 2 Fe-58 P0 0.0 0.0 P0 +50 6 1 2 Ni-58 P0 0.0 0.0 P0 +51 6 1 2 Ni-60 P0 0.0 0.0 P0 +52 6 1 2 Ni-61 P0 0.0 0.0 P0 +53 6 1 2 Ni-62 P0 0.0 0.0 P0 +54 6 1 2 Ni-64 P0 0.0 0.0 P0 +55 6 1 2 Mn-55 P0 0.0 0.0 P0 +56 6 1 2 Si-28 P0 0.0 0.0 P0 +57 6 1 2 Si-29 P0 0.0 0.0 P0 +58 6 1 2 Si-30 P0 0.0 0.0 P0 +59 6 1 2 Cr-50 P0 0.0 0.0 P0 +60 6 1 2 Cr-52 P0 0.0 0.0 P0 +61 6 1 2 Cr-53 P0 0.0 0.0 P0 +62 6 1 2 Cr-54 P0 0.0 0.0 P0 +21 6 2 1 H-1 P0 0.0 0.0 P0 +22 6 2 1 O-16 P0 0.0 0.0 P0 +23 6 2 1 B-10 P0 0.0 0.0 P0 +24 6 2 1 B-11 P0 0.0 0.0 P0 +25 6 2 1 Fe-54 P0 0.0 0.0 P0 +26 6 2 1 Fe-56 P0 0.0 0.0 P0 +27 6 2 1 Fe-57 P0 0.0 0.0 P0 +28 6 2 1 Fe-58 P0 0.0 0.0 P0 +29 6 2 1 Ni-58 P0 0.0 0.0 P0 +30 6 2 1 Ni-60 P0 0.0 0.0 P0 +31 6 2 1 Ni-61 P0 0.0 0.0 P0 +32 6 2 1 Ni-62 P0 0.0 0.0 P0 +33 6 2 1 Ni-64 P0 0.0 0.0 P0 +34 6 2 1 Mn-55 P0 0.0 0.0 P0 +35 6 2 1 Si-28 P0 0.0 0.0 P0 +36 6 2 1 Si-29 P0 0.0 0.0 P0 +37 6 2 1 Si-30 P0 0.0 0.0 P0 +38 6 2 1 Cr-50 P0 0.0 0.0 P0 +39 6 2 1 Cr-52 P0 0.0 0.0 P0 +40 6 2 1 Cr-53 P0 0.0 0.0 P0 +41 6 2 1 Cr-54 P0 0.0 0.0 P0 +0 6 2 2 H-1 P0 0.0 0.0 P0 +1 6 2 2 O-16 P0 0.0 0.0 P0 +2 6 2 2 B-10 P0 0.0 0.0 P0 +3 6 2 2 B-11 P0 0.0 0.0 P0 +4 6 2 2 Fe-54 P0 0.0 0.0 P0 +5 6 2 2 Fe-56 P0 0.0 0.0 P0 +6 6 2 2 Fe-57 P0 0.0 0.0 P0 +7 6 2 2 Fe-58 P0 0.0 0.0 P0 +8 6 2 2 Ni-58 P0 0.0 0.0 P0 +9 6 2 2 Ni-60 P0 0.0 0.0 P0 +10 6 2 2 Ni-61 P0 0.0 0.0 P0 +11 6 2 2 Ni-62 P0 0.0 0.0 P0 +12 6 2 2 Ni-64 P0 0.0 0.0 P0 +13 6 2 2 Mn-55 P0 0.0 0.0 P0 +14 6 2 2 Si-28 P0 0.0 0.0 P0 +15 6 2 2 Si-29 P0 0.0 0.0 P0 +16 6 2 2 Si-30 P0 0.0 0.0 P0 +17 6 2 2 Cr-50 P0 0.0 0.0 P0 +18 6 2 2 Cr-52 P0 0.0 0.0 P0 +19 6 2 2 Cr-53 P0 0.0 0.0 P0 +20 6 2 2 Cr-54 P0 0.0 0.0 P0 material group out nuclide mean std. dev. +21 6 1 H-1 0.0 0.0 +22 6 1 O-16 0.0 0.0 +23 6 1 B-10 0.0 0.0 +24 6 1 B-11 0.0 0.0 +25 6 1 Fe-54 0.0 0.0 +26 6 1 Fe-56 0.0 0.0 +27 6 1 Fe-57 0.0 0.0 +28 6 1 Fe-58 0.0 0.0 +29 6 1 Ni-58 0.0 0.0 +30 6 1 Ni-60 0.0 0.0 +31 6 1 Ni-61 0.0 0.0 +32 6 1 Ni-62 0.0 0.0 +33 6 1 Ni-64 0.0 0.0 +34 6 1 Mn-55 0.0 0.0 +35 6 1 Si-28 0.0 0.0 +36 6 1 Si-29 0.0 0.0 +37 6 1 Si-30 0.0 0.0 +38 6 1 Cr-50 0.0 0.0 +39 6 1 Cr-52 0.0 0.0 +40 6 1 Cr-53 0.0 0.0 +41 6 1 Cr-54 0.0 0.0 +0 6 2 H-1 0.0 0.0 +1 6 2 O-16 0.0 0.0 +2 6 2 B-10 0.0 0.0 +3 6 2 B-11 0.0 0.0 +4 6 2 Fe-54 0.0 0.0 +5 6 2 Fe-56 0.0 0.0 +6 6 2 Fe-57 0.0 0.0 +7 6 2 Fe-58 0.0 0.0 +8 6 2 Ni-58 0.0 0.0 +9 6 2 Ni-60 0.0 0.0 +10 6 2 Ni-61 0.0 0.0 +11 6 2 Ni-62 0.0 0.0 +12 6 2 Ni-64 0.0 0.0 +13 6 2 Mn-55 0.0 0.0 +14 6 2 Si-28 0.0 0.0 +15 6 2 Si-29 0.0 0.0 +16 6 2 Si-30 0.0 0.0 +17 6 2 Cr-50 0.0 0.0 +18 6 2 Cr-52 0.0 0.0 +19 6 2 Cr-53 0.0 0.0 +20 6 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 7 1 H-1 0.0 0.0 +22 7 1 O-16 0.0 0.0 +23 7 1 B-10 0.0 0.0 +24 7 1 B-11 0.0 0.0 +25 7 1 Fe-54 0.0 0.0 +26 7 1 Fe-56 0.0 0.0 +27 7 1 Fe-57 0.0 0.0 +28 7 1 Fe-58 0.0 0.0 +29 7 1 Ni-58 0.0 0.0 +30 7 1 Ni-60 0.0 0.0 +31 7 1 Ni-61 0.0 0.0 +32 7 1 Ni-62 0.0 0.0 +33 7 1 Ni-64 0.0 0.0 +34 7 1 Mn-55 0.0 0.0 +35 7 1 Si-28 0.0 0.0 +36 7 1 Si-29 0.0 0.0 +37 7 1 Si-30 0.0 0.0 +38 7 1 Cr-50 0.0 0.0 +39 7 1 Cr-52 0.0 0.0 +40 7 1 Cr-53 0.0 0.0 +41 7 1 Cr-54 0.0 0.0 +0 7 2 H-1 0.0 0.0 +1 7 2 O-16 0.0 0.0 +2 7 2 B-10 0.0 0.0 +3 7 2 B-11 0.0 0.0 +4 7 2 Fe-54 0.0 0.0 +5 7 2 Fe-56 0.0 0.0 +6 7 2 Fe-57 0.0 0.0 +7 7 2 Fe-58 0.0 0.0 +8 7 2 Ni-58 0.0 0.0 +9 7 2 Ni-60 0.0 0.0 +10 7 2 Ni-61 0.0 0.0 +11 7 2 Ni-62 0.0 0.0 +12 7 2 Ni-64 0.0 0.0 +13 7 2 Mn-55 0.0 0.0 +14 7 2 Si-28 0.0 0.0 +15 7 2 Si-29 0.0 0.0 +16 7 2 Si-30 0.0 0.0 +17 7 2 Cr-50 0.0 0.0 +18 7 2 Cr-52 0.0 0.0 +19 7 2 Cr-53 0.0 0.0 +20 7 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 7 1 H-1 0.0 0.0 +22 7 1 O-16 0.0 0.0 +23 7 1 B-10 0.0 0.0 +24 7 1 B-11 0.0 0.0 +25 7 1 Fe-54 0.0 0.0 +26 7 1 Fe-56 0.0 0.0 +27 7 1 Fe-57 0.0 0.0 +28 7 1 Fe-58 0.0 0.0 +29 7 1 Ni-58 0.0 0.0 +30 7 1 Ni-60 0.0 0.0 +31 7 1 Ni-61 0.0 0.0 +32 7 1 Ni-62 0.0 0.0 +33 7 1 Ni-64 0.0 0.0 +34 7 1 Mn-55 0.0 0.0 +35 7 1 Si-28 0.0 0.0 +36 7 1 Si-29 0.0 0.0 +37 7 1 Si-30 0.0 0.0 +38 7 1 Cr-50 0.0 0.0 +39 7 1 Cr-52 0.0 0.0 +40 7 1 Cr-53 0.0 0.0 +41 7 1 Cr-54 0.0 0.0 +0 7 2 H-1 0.0 0.0 +1 7 2 O-16 0.0 0.0 +2 7 2 B-10 0.0 0.0 +3 7 2 B-11 0.0 0.0 +4 7 2 Fe-54 0.0 0.0 +5 7 2 Fe-56 0.0 0.0 +6 7 2 Fe-57 0.0 0.0 +7 7 2 Fe-58 0.0 0.0 +8 7 2 Ni-58 0.0 0.0 +9 7 2 Ni-60 0.0 0.0 +10 7 2 Ni-61 0.0 0.0 +11 7 2 Ni-62 0.0 0.0 +12 7 2 Ni-64 0.0 0.0 +13 7 2 Mn-55 0.0 0.0 +14 7 2 Si-28 0.0 0.0 +15 7 2 Si-29 0.0 0.0 +16 7 2 Si-30 0.0 0.0 +17 7 2 Cr-50 0.0 0.0 +18 7 2 Cr-52 0.0 0.0 +19 7 2 Cr-53 0.0 0.0 +20 7 2 Cr-54 0.0 0.0 material group in group out nuclide moment mean std. dev. moment +63 7 1 1 H-1 P0 0.0 0.0 P0 +64 7 1 1 O-16 P0 0.0 0.0 P0 +65 7 1 1 B-10 P0 0.0 0.0 P0 +66 7 1 1 B-11 P0 0.0 0.0 P0 +67 7 1 1 Fe-54 P0 0.0 0.0 P0 +68 7 1 1 Fe-56 P0 0.0 0.0 P0 +69 7 1 1 Fe-57 P0 0.0 0.0 P0 +70 7 1 1 Fe-58 P0 0.0 0.0 P0 +71 7 1 1 Ni-58 P0 0.0 0.0 P0 +72 7 1 1 Ni-60 P0 0.0 0.0 P0 +73 7 1 1 Ni-61 P0 0.0 0.0 P0 +74 7 1 1 Ni-62 P0 0.0 0.0 P0 +75 7 1 1 Ni-64 P0 0.0 0.0 P0 +76 7 1 1 Mn-55 P0 0.0 0.0 P0 +77 7 1 1 Si-28 P0 0.0 0.0 P0 +78 7 1 1 Si-29 P0 0.0 0.0 P0 +79 7 1 1 Si-30 P0 0.0 0.0 P0 +80 7 1 1 Cr-50 P0 0.0 0.0 P0 +81 7 1 1 Cr-52 P0 0.0 0.0 P0 +82 7 1 1 Cr-53 P0 0.0 0.0 P0 +83 7 1 1 Cr-54 P0 0.0 0.0 P0 +42 7 1 2 H-1 P0 0.0 0.0 P0 +43 7 1 2 O-16 P0 0.0 0.0 P0 +44 7 1 2 B-10 P0 0.0 0.0 P0 +45 7 1 2 B-11 P0 0.0 0.0 P0 +46 7 1 2 Fe-54 P0 0.0 0.0 P0 +47 7 1 2 Fe-56 P0 0.0 0.0 P0 +48 7 1 2 Fe-57 P0 0.0 0.0 P0 +49 7 1 2 Fe-58 P0 0.0 0.0 P0 +50 7 1 2 Ni-58 P0 0.0 0.0 P0 +51 7 1 2 Ni-60 P0 0.0 0.0 P0 +52 7 1 2 Ni-61 P0 0.0 0.0 P0 +53 7 1 2 Ni-62 P0 0.0 0.0 P0 +54 7 1 2 Ni-64 P0 0.0 0.0 P0 +55 7 1 2 Mn-55 P0 0.0 0.0 P0 +56 7 1 2 Si-28 P0 0.0 0.0 P0 +57 7 1 2 Si-29 P0 0.0 0.0 P0 +58 7 1 2 Si-30 P0 0.0 0.0 P0 +59 7 1 2 Cr-50 P0 0.0 0.0 P0 +60 7 1 2 Cr-52 P0 0.0 0.0 P0 +61 7 1 2 Cr-53 P0 0.0 0.0 P0 +62 7 1 2 Cr-54 P0 0.0 0.0 P0 +21 7 2 1 H-1 P0 0.0 0.0 P0 +22 7 2 1 O-16 P0 0.0 0.0 P0 +23 7 2 1 B-10 P0 0.0 0.0 P0 +24 7 2 1 B-11 P0 0.0 0.0 P0 +25 7 2 1 Fe-54 P0 0.0 0.0 P0 +26 7 2 1 Fe-56 P0 0.0 0.0 P0 +27 7 2 1 Fe-57 P0 0.0 0.0 P0 +28 7 2 1 Fe-58 P0 0.0 0.0 P0 +29 7 2 1 Ni-58 P0 0.0 0.0 P0 +30 7 2 1 Ni-60 P0 0.0 0.0 P0 +31 7 2 1 Ni-61 P0 0.0 0.0 P0 +32 7 2 1 Ni-62 P0 0.0 0.0 P0 +33 7 2 1 Ni-64 P0 0.0 0.0 P0 +34 7 2 1 Mn-55 P0 0.0 0.0 P0 +35 7 2 1 Si-28 P0 0.0 0.0 P0 +36 7 2 1 Si-29 P0 0.0 0.0 P0 +37 7 2 1 Si-30 P0 0.0 0.0 P0 +38 7 2 1 Cr-50 P0 0.0 0.0 P0 +39 7 2 1 Cr-52 P0 0.0 0.0 P0 +40 7 2 1 Cr-53 P0 0.0 0.0 P0 +41 7 2 1 Cr-54 P0 0.0 0.0 P0 +0 7 2 2 H-1 P0 0.0 0.0 P0 +1 7 2 2 O-16 P0 0.0 0.0 P0 +2 7 2 2 B-10 P0 0.0 0.0 P0 +3 7 2 2 B-11 P0 0.0 0.0 P0 +4 7 2 2 Fe-54 P0 0.0 0.0 P0 +5 7 2 2 Fe-56 P0 0.0 0.0 P0 +6 7 2 2 Fe-57 P0 0.0 0.0 P0 +7 7 2 2 Fe-58 P0 0.0 0.0 P0 +8 7 2 2 Ni-58 P0 0.0 0.0 P0 +9 7 2 2 Ni-60 P0 0.0 0.0 P0 +10 7 2 2 Ni-61 P0 0.0 0.0 P0 +11 7 2 2 Ni-62 P0 0.0 0.0 P0 +12 7 2 2 Ni-64 P0 0.0 0.0 P0 +13 7 2 2 Mn-55 P0 0.0 0.0 P0 +14 7 2 2 Si-28 P0 0.0 0.0 P0 +15 7 2 2 Si-29 P0 0.0 0.0 P0 +16 7 2 2 Si-30 P0 0.0 0.0 P0 +17 7 2 2 Cr-50 P0 0.0 0.0 P0 +18 7 2 2 Cr-52 P0 0.0 0.0 P0 +19 7 2 2 Cr-53 P0 0.0 0.0 P0 +20 7 2 2 Cr-54 P0 0.0 0.0 P0 material group out nuclide mean std. dev. +21 7 1 H-1 0.0 0.0 +22 7 1 O-16 0.0 0.0 +23 7 1 B-10 0.0 0.0 +24 7 1 B-11 0.0 0.0 +25 7 1 Fe-54 0.0 0.0 +26 7 1 Fe-56 0.0 0.0 +27 7 1 Fe-57 0.0 0.0 +28 7 1 Fe-58 0.0 0.0 +29 7 1 Ni-58 0.0 0.0 +30 7 1 Ni-60 0.0 0.0 +31 7 1 Ni-61 0.0 0.0 +32 7 1 Ni-62 0.0 0.0 +33 7 1 Ni-64 0.0 0.0 +34 7 1 Mn-55 0.0 0.0 +35 7 1 Si-28 0.0 0.0 +36 7 1 Si-29 0.0 0.0 +37 7 1 Si-30 0.0 0.0 +38 7 1 Cr-50 0.0 0.0 +39 7 1 Cr-52 0.0 0.0 +40 7 1 Cr-53 0.0 0.0 +41 7 1 Cr-54 0.0 0.0 +0 7 2 H-1 0.0 0.0 +1 7 2 O-16 0.0 0.0 +2 7 2 B-10 0.0 0.0 +3 7 2 B-11 0.0 0.0 +4 7 2 Fe-54 0.0 0.0 +5 7 2 Fe-56 0.0 0.0 +6 7 2 Fe-57 0.0 0.0 +7 7 2 Fe-58 0.0 0.0 +8 7 2 Ni-58 0.0 0.0 +9 7 2 Ni-60 0.0 0.0 +10 7 2 Ni-61 0.0 0.0 +11 7 2 Ni-62 0.0 0.0 +12 7 2 Ni-64 0.0 0.0 +13 7 2 Mn-55 0.0 0.0 +14 7 2 Si-28 0.0 0.0 +15 7 2 Si-29 0.0 0.0 +16 7 2 Si-30 0.0 0.0 +17 7 2 Cr-50 0.0 0.0 +18 7 2 Cr-52 0.0 0.0 +19 7 2 Cr-53 0.0 0.0 +20 7 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 8 1 H-1 0.0 0.0 +22 8 1 O-16 0.0 0.0 +23 8 1 B-10 0.0 0.0 +24 8 1 B-11 0.0 0.0 +25 8 1 Fe-54 0.0 0.0 +26 8 1 Fe-56 0.0 0.0 +27 8 1 Fe-57 0.0 0.0 +28 8 1 Fe-58 0.0 0.0 +29 8 1 Ni-58 0.0 0.0 +30 8 1 Ni-60 0.0 0.0 +31 8 1 Ni-61 0.0 0.0 +32 8 1 Ni-62 0.0 0.0 +33 8 1 Ni-64 0.0 0.0 +34 8 1 Mn-55 0.0 0.0 +35 8 1 Si-28 0.0 0.0 +36 8 1 Si-29 0.0 0.0 +37 8 1 Si-30 0.0 0.0 +38 8 1 Cr-50 0.0 0.0 +39 8 1 Cr-52 0.0 0.0 +40 8 1 Cr-53 0.0 0.0 +41 8 1 Cr-54 0.0 0.0 +0 8 2 H-1 0.0 0.0 +1 8 2 O-16 0.0 0.0 +2 8 2 B-10 0.0 0.0 +3 8 2 B-11 0.0 0.0 +4 8 2 Fe-54 0.0 0.0 +5 8 2 Fe-56 0.0 0.0 +6 8 2 Fe-57 0.0 0.0 +7 8 2 Fe-58 0.0 0.0 +8 8 2 Ni-58 0.0 0.0 +9 8 2 Ni-60 0.0 0.0 +10 8 2 Ni-61 0.0 0.0 +11 8 2 Ni-62 0.0 0.0 +12 8 2 Ni-64 0.0 0.0 +13 8 2 Mn-55 0.0 0.0 +14 8 2 Si-28 0.0 0.0 +15 8 2 Si-29 0.0 0.0 +16 8 2 Si-30 0.0 0.0 +17 8 2 Cr-50 0.0 0.0 +18 8 2 Cr-52 0.0 0.0 +19 8 2 Cr-53 0.0 0.0 +20 8 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 8 1 H-1 0.0 0.0 +22 8 1 O-16 0.0 0.0 +23 8 1 B-10 0.0 0.0 +24 8 1 B-11 0.0 0.0 +25 8 1 Fe-54 0.0 0.0 +26 8 1 Fe-56 0.0 0.0 +27 8 1 Fe-57 0.0 0.0 +28 8 1 Fe-58 0.0 0.0 +29 8 1 Ni-58 0.0 0.0 +30 8 1 Ni-60 0.0 0.0 +31 8 1 Ni-61 0.0 0.0 +32 8 1 Ni-62 0.0 0.0 +33 8 1 Ni-64 0.0 0.0 +34 8 1 Mn-55 0.0 0.0 +35 8 1 Si-28 0.0 0.0 +36 8 1 Si-29 0.0 0.0 +37 8 1 Si-30 0.0 0.0 +38 8 1 Cr-50 0.0 0.0 +39 8 1 Cr-52 0.0 0.0 +40 8 1 Cr-53 0.0 0.0 +41 8 1 Cr-54 0.0 0.0 +0 8 2 H-1 0.0 0.0 +1 8 2 O-16 0.0 0.0 +2 8 2 B-10 0.0 0.0 +3 8 2 B-11 0.0 0.0 +4 8 2 Fe-54 0.0 0.0 +5 8 2 Fe-56 0.0 0.0 +6 8 2 Fe-57 0.0 0.0 +7 8 2 Fe-58 0.0 0.0 +8 8 2 Ni-58 0.0 0.0 +9 8 2 Ni-60 0.0 0.0 +10 8 2 Ni-61 0.0 0.0 +11 8 2 Ni-62 0.0 0.0 +12 8 2 Ni-64 0.0 0.0 +13 8 2 Mn-55 0.0 0.0 +14 8 2 Si-28 0.0 0.0 +15 8 2 Si-29 0.0 0.0 +16 8 2 Si-30 0.0 0.0 +17 8 2 Cr-50 0.0 0.0 +18 8 2 Cr-52 0.0 0.0 +19 8 2 Cr-53 0.0 0.0 +20 8 2 Cr-54 0.0 0.0 material group in group out nuclide moment mean std. dev. moment +63 8 1 1 H-1 P0 0.0 0.0 P0 +64 8 1 1 O-16 P0 0.0 0.0 P0 +65 8 1 1 B-10 P0 0.0 0.0 P0 +66 8 1 1 B-11 P0 0.0 0.0 P0 +67 8 1 1 Fe-54 P0 0.0 0.0 P0 +68 8 1 1 Fe-56 P0 0.0 0.0 P0 +69 8 1 1 Fe-57 P0 0.0 0.0 P0 +70 8 1 1 Fe-58 P0 0.0 0.0 P0 +71 8 1 1 Ni-58 P0 0.0 0.0 P0 +72 8 1 1 Ni-60 P0 0.0 0.0 P0 +73 8 1 1 Ni-61 P0 0.0 0.0 P0 +74 8 1 1 Ni-62 P0 0.0 0.0 P0 +75 8 1 1 Ni-64 P0 0.0 0.0 P0 +76 8 1 1 Mn-55 P0 0.0 0.0 P0 +77 8 1 1 Si-28 P0 0.0 0.0 P0 +78 8 1 1 Si-29 P0 0.0 0.0 P0 +79 8 1 1 Si-30 P0 0.0 0.0 P0 +80 8 1 1 Cr-50 P0 0.0 0.0 P0 +81 8 1 1 Cr-52 P0 0.0 0.0 P0 +82 8 1 1 Cr-53 P0 0.0 0.0 P0 +83 8 1 1 Cr-54 P0 0.0 0.0 P0 +42 8 1 2 H-1 P0 0.0 0.0 P0 +43 8 1 2 O-16 P0 0.0 0.0 P0 +44 8 1 2 B-10 P0 0.0 0.0 P0 +45 8 1 2 B-11 P0 0.0 0.0 P0 +46 8 1 2 Fe-54 P0 0.0 0.0 P0 +47 8 1 2 Fe-56 P0 0.0 0.0 P0 +48 8 1 2 Fe-57 P0 0.0 0.0 P0 +49 8 1 2 Fe-58 P0 0.0 0.0 P0 +50 8 1 2 Ni-58 P0 0.0 0.0 P0 +51 8 1 2 Ni-60 P0 0.0 0.0 P0 +52 8 1 2 Ni-61 P0 0.0 0.0 P0 +53 8 1 2 Ni-62 P0 0.0 0.0 P0 +54 8 1 2 Ni-64 P0 0.0 0.0 P0 +55 8 1 2 Mn-55 P0 0.0 0.0 P0 +56 8 1 2 Si-28 P0 0.0 0.0 P0 +57 8 1 2 Si-29 P0 0.0 0.0 P0 +58 8 1 2 Si-30 P0 0.0 0.0 P0 +59 8 1 2 Cr-50 P0 0.0 0.0 P0 +60 8 1 2 Cr-52 P0 0.0 0.0 P0 +61 8 1 2 Cr-53 P0 0.0 0.0 P0 +62 8 1 2 Cr-54 P0 0.0 0.0 P0 +21 8 2 1 H-1 P0 0.0 0.0 P0 +22 8 2 1 O-16 P0 0.0 0.0 P0 +23 8 2 1 B-10 P0 0.0 0.0 P0 +24 8 2 1 B-11 P0 0.0 0.0 P0 +25 8 2 1 Fe-54 P0 0.0 0.0 P0 +26 8 2 1 Fe-56 P0 0.0 0.0 P0 +27 8 2 1 Fe-57 P0 0.0 0.0 P0 +28 8 2 1 Fe-58 P0 0.0 0.0 P0 +29 8 2 1 Ni-58 P0 0.0 0.0 P0 +30 8 2 1 Ni-60 P0 0.0 0.0 P0 +31 8 2 1 Ni-61 P0 0.0 0.0 P0 +32 8 2 1 Ni-62 P0 0.0 0.0 P0 +33 8 2 1 Ni-64 P0 0.0 0.0 P0 +34 8 2 1 Mn-55 P0 0.0 0.0 P0 +35 8 2 1 Si-28 P0 0.0 0.0 P0 +36 8 2 1 Si-29 P0 0.0 0.0 P0 +37 8 2 1 Si-30 P0 0.0 0.0 P0 +38 8 2 1 Cr-50 P0 0.0 0.0 P0 +39 8 2 1 Cr-52 P0 0.0 0.0 P0 +40 8 2 1 Cr-53 P0 0.0 0.0 P0 +41 8 2 1 Cr-54 P0 0.0 0.0 P0 +0 8 2 2 H-1 P0 0.0 0.0 P0 +1 8 2 2 O-16 P0 0.0 0.0 P0 +2 8 2 2 B-10 P0 0.0 0.0 P0 +3 8 2 2 B-11 P0 0.0 0.0 P0 +4 8 2 2 Fe-54 P0 0.0 0.0 P0 +5 8 2 2 Fe-56 P0 0.0 0.0 P0 +6 8 2 2 Fe-57 P0 0.0 0.0 P0 +7 8 2 2 Fe-58 P0 0.0 0.0 P0 +8 8 2 2 Ni-58 P0 0.0 0.0 P0 +9 8 2 2 Ni-60 P0 0.0 0.0 P0 +10 8 2 2 Ni-61 P0 0.0 0.0 P0 +11 8 2 2 Ni-62 P0 0.0 0.0 P0 +12 8 2 2 Ni-64 P0 0.0 0.0 P0 +13 8 2 2 Mn-55 P0 0.0 0.0 P0 +14 8 2 2 Si-28 P0 0.0 0.0 P0 +15 8 2 2 Si-29 P0 0.0 0.0 P0 +16 8 2 2 Si-30 P0 0.0 0.0 P0 +17 8 2 2 Cr-50 P0 0.0 0.0 P0 +18 8 2 2 Cr-52 P0 0.0 0.0 P0 +19 8 2 2 Cr-53 P0 0.0 0.0 P0 +20 8 2 2 Cr-54 P0 0.0 0.0 P0 material group out nuclide mean std. dev. +21 8 1 H-1 0.0 0.0 +22 8 1 O-16 0.0 0.0 +23 8 1 B-10 0.0 0.0 +24 8 1 B-11 0.0 0.0 +25 8 1 Fe-54 0.0 0.0 +26 8 1 Fe-56 0.0 0.0 +27 8 1 Fe-57 0.0 0.0 +28 8 1 Fe-58 0.0 0.0 +29 8 1 Ni-58 0.0 0.0 +30 8 1 Ni-60 0.0 0.0 +31 8 1 Ni-61 0.0 0.0 +32 8 1 Ni-62 0.0 0.0 +33 8 1 Ni-64 0.0 0.0 +34 8 1 Mn-55 0.0 0.0 +35 8 1 Si-28 0.0 0.0 +36 8 1 Si-29 0.0 0.0 +37 8 1 Si-30 0.0 0.0 +38 8 1 Cr-50 0.0 0.0 +39 8 1 Cr-52 0.0 0.0 +40 8 1 Cr-53 0.0 0.0 +41 8 1 Cr-54 0.0 0.0 +0 8 2 H-1 0.0 0.0 +1 8 2 O-16 0.0 0.0 +2 8 2 B-10 0.0 0.0 +3 8 2 B-11 0.0 0.0 +4 8 2 Fe-54 0.0 0.0 +5 8 2 Fe-56 0.0 0.0 +6 8 2 Fe-57 0.0 0.0 +7 8 2 Fe-58 0.0 0.0 +8 8 2 Ni-58 0.0 0.0 +9 8 2 Ni-60 0.0 0.0 +10 8 2 Ni-61 0.0 0.0 +11 8 2 Ni-62 0.0 0.0 +12 8 2 Ni-64 0.0 0.0 +13 8 2 Mn-55 0.0 0.0 +14 8 2 Si-28 0.0 0.0 +15 8 2 Si-29 0.0 0.0 +16 8 2 Si-30 0.0 0.0 +17 8 2 Cr-50 0.0 0.0 +18 8 2 Cr-52 0.0 0.0 +19 8 2 Cr-53 0.0 0.0 +20 8 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. 21 9 1 H-1 0.150655 0.480993 22 9 1 O-16 0.116221 0.114089 23 9 1 B-10 0.000000 0.000000 @@ -1411,48 +1411,48 @@ 18 9 2 Cr-52 0.000000 0.000000 19 9 2 Cr-53 0.000000 0.000000 20 9 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. -21 9 1 H-1 0 0 -22 9 1 O-16 0 0 -23 9 1 B-10 0 0 -24 9 1 B-11 0 0 -25 9 1 Fe-54 0 0 -26 9 1 Fe-56 0 0 -27 9 1 Fe-57 0 0 -28 9 1 Fe-58 0 0 -29 9 1 Ni-58 0 0 -30 9 1 Ni-60 0 0 -31 9 1 Ni-61 0 0 -32 9 1 Ni-62 0 0 -33 9 1 Ni-64 0 0 -34 9 1 Mn-55 0 0 -35 9 1 Si-28 0 0 -36 9 1 Si-29 0 0 -37 9 1 Si-30 0 0 -38 9 1 Cr-50 0 0 -39 9 1 Cr-52 0 0 -40 9 1 Cr-53 0 0 -41 9 1 Cr-54 0 0 -0 9 2 H-1 0 0 -1 9 2 O-16 0 0 -2 9 2 B-10 0 0 -3 9 2 B-11 0 0 -4 9 2 Fe-54 0 0 -5 9 2 Fe-56 0 0 -6 9 2 Fe-57 0 0 -7 9 2 Fe-58 0 0 -8 9 2 Ni-58 0 0 -9 9 2 Ni-60 0 0 -10 9 2 Ni-61 0 0 -11 9 2 Ni-62 0 0 -12 9 2 Ni-64 0 0 -13 9 2 Mn-55 0 0 -14 9 2 Si-28 0 0 -15 9 2 Si-29 0 0 -16 9 2 Si-30 0 0 -17 9 2 Cr-50 0 0 -18 9 2 Cr-52 0 0 -19 9 2 Cr-53 0 0 -20 9 2 Cr-54 0 0 material group in group out nuclide moment mean std. dev. moment +21 9 1 H-1 0.0 0.0 +22 9 1 O-16 0.0 0.0 +23 9 1 B-10 0.0 0.0 +24 9 1 B-11 0.0 0.0 +25 9 1 Fe-54 0.0 0.0 +26 9 1 Fe-56 0.0 0.0 +27 9 1 Fe-57 0.0 0.0 +28 9 1 Fe-58 0.0 0.0 +29 9 1 Ni-58 0.0 0.0 +30 9 1 Ni-60 0.0 0.0 +31 9 1 Ni-61 0.0 0.0 +32 9 1 Ni-62 0.0 0.0 +33 9 1 Ni-64 0.0 0.0 +34 9 1 Mn-55 0.0 0.0 +35 9 1 Si-28 0.0 0.0 +36 9 1 Si-29 0.0 0.0 +37 9 1 Si-30 0.0 0.0 +38 9 1 Cr-50 0.0 0.0 +39 9 1 Cr-52 0.0 0.0 +40 9 1 Cr-53 0.0 0.0 +41 9 1 Cr-54 0.0 0.0 +0 9 2 H-1 0.0 0.0 +1 9 2 O-16 0.0 0.0 +2 9 2 B-10 0.0 0.0 +3 9 2 B-11 0.0 0.0 +4 9 2 Fe-54 0.0 0.0 +5 9 2 Fe-56 0.0 0.0 +6 9 2 Fe-57 0.0 0.0 +7 9 2 Fe-58 0.0 0.0 +8 9 2 Ni-58 0.0 0.0 +9 9 2 Ni-60 0.0 0.0 +10 9 2 Ni-61 0.0 0.0 +11 9 2 Ni-62 0.0 0.0 +12 9 2 Ni-64 0.0 0.0 +13 9 2 Mn-55 0.0 0.0 +14 9 2 Si-28 0.0 0.0 +15 9 2 Si-29 0.0 0.0 +16 9 2 Si-30 0.0 0.0 +17 9 2 Cr-50 0.0 0.0 +18 9 2 Cr-52 0.0 0.0 +19 9 2 Cr-53 0.0 0.0 +20 9 2 Cr-54 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 63 9 1 1 H-1 P0 0.150655 0.480993 P0 64 9 1 1 O-16 P0 0.116221 0.114089 P0 65 9 1 1 B-10 P0 0.000000 0.000000 P0 @@ -1537,48 +1537,48 @@ 18 9 2 2 Cr-52 P0 0.000000 0.000000 P0 19 9 2 2 Cr-53 P0 0.000000 0.000000 P0 20 9 2 2 Cr-54 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. -21 9 1 H-1 0 0 -22 9 1 O-16 0 0 -23 9 1 B-10 0 0 -24 9 1 B-11 0 0 -25 9 1 Fe-54 0 0 -26 9 1 Fe-56 0 0 -27 9 1 Fe-57 0 0 -28 9 1 Fe-58 0 0 -29 9 1 Ni-58 0 0 -30 9 1 Ni-60 0 0 -31 9 1 Ni-61 0 0 -32 9 1 Ni-62 0 0 -33 9 1 Ni-64 0 0 -34 9 1 Mn-55 0 0 -35 9 1 Si-28 0 0 -36 9 1 Si-29 0 0 -37 9 1 Si-30 0 0 -38 9 1 Cr-50 0 0 -39 9 1 Cr-52 0 0 -40 9 1 Cr-53 0 0 -41 9 1 Cr-54 0 0 -0 9 2 H-1 0 0 -1 9 2 O-16 0 0 -2 9 2 B-10 0 0 -3 9 2 B-11 0 0 -4 9 2 Fe-54 0 0 -5 9 2 Fe-56 0 0 -6 9 2 Fe-57 0 0 -7 9 2 Fe-58 0 0 -8 9 2 Ni-58 0 0 -9 9 2 Ni-60 0 0 -10 9 2 Ni-61 0 0 -11 9 2 Ni-62 0 0 -12 9 2 Ni-64 0 0 -13 9 2 Mn-55 0 0 -14 9 2 Si-28 0 0 -15 9 2 Si-29 0 0 -16 9 2 Si-30 0 0 -17 9 2 Cr-50 0 0 -18 9 2 Cr-52 0 0 -19 9 2 Cr-53 0 0 -20 9 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 9 1 H-1 0.0 0.0 +22 9 1 O-16 0.0 0.0 +23 9 1 B-10 0.0 0.0 +24 9 1 B-11 0.0 0.0 +25 9 1 Fe-54 0.0 0.0 +26 9 1 Fe-56 0.0 0.0 +27 9 1 Fe-57 0.0 0.0 +28 9 1 Fe-58 0.0 0.0 +29 9 1 Ni-58 0.0 0.0 +30 9 1 Ni-60 0.0 0.0 +31 9 1 Ni-61 0.0 0.0 +32 9 1 Ni-62 0.0 0.0 +33 9 1 Ni-64 0.0 0.0 +34 9 1 Mn-55 0.0 0.0 +35 9 1 Si-28 0.0 0.0 +36 9 1 Si-29 0.0 0.0 +37 9 1 Si-30 0.0 0.0 +38 9 1 Cr-50 0.0 0.0 +39 9 1 Cr-52 0.0 0.0 +40 9 1 Cr-53 0.0 0.0 +41 9 1 Cr-54 0.0 0.0 +0 9 2 H-1 0.0 0.0 +1 9 2 O-16 0.0 0.0 +2 9 2 B-10 0.0 0.0 +3 9 2 B-11 0.0 0.0 +4 9 2 Fe-54 0.0 0.0 +5 9 2 Fe-56 0.0 0.0 +6 9 2 Fe-57 0.0 0.0 +7 9 2 Fe-58 0.0 0.0 +8 9 2 Ni-58 0.0 0.0 +9 9 2 Ni-60 0.0 0.0 +10 9 2 Ni-61 0.0 0.0 +11 9 2 Ni-62 0.0 0.0 +12 9 2 Ni-64 0.0 0.0 +13 9 2 Mn-55 0.0 0.0 +14 9 2 Si-28 0.0 0.0 +15 9 2 Si-29 0.0 0.0 +16 9 2 Si-30 0.0 0.0 +17 9 2 Cr-50 0.0 0.0 +18 9 2 Cr-52 0.0 0.0 +19 9 2 Cr-53 0.0 0.0 +20 9 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. 21 10 1 H-1 0.123944 0.541390 22 10 1 O-16 0.000000 0.000000 23 10 1 B-10 0.000000 0.000000 @@ -1621,48 +1621,48 @@ 18 10 2 Cr-52 0.000000 0.000000 19 10 2 Cr-53 0.000000 0.000000 20 10 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. -21 10 1 H-1 0 0 -22 10 1 O-16 0 0 -23 10 1 B-10 0 0 -24 10 1 B-11 0 0 -25 10 1 Fe-54 0 0 -26 10 1 Fe-56 0 0 -27 10 1 Fe-57 0 0 -28 10 1 Fe-58 0 0 -29 10 1 Ni-58 0 0 -30 10 1 Ni-60 0 0 -31 10 1 Ni-61 0 0 -32 10 1 Ni-62 0 0 -33 10 1 Ni-64 0 0 -34 10 1 Mn-55 0 0 -35 10 1 Si-28 0 0 -36 10 1 Si-29 0 0 -37 10 1 Si-30 0 0 -38 10 1 Cr-50 0 0 -39 10 1 Cr-52 0 0 -40 10 1 Cr-53 0 0 -41 10 1 Cr-54 0 0 -0 10 2 H-1 0 0 -1 10 2 O-16 0 0 -2 10 2 B-10 0 0 -3 10 2 B-11 0 0 -4 10 2 Fe-54 0 0 -5 10 2 Fe-56 0 0 -6 10 2 Fe-57 0 0 -7 10 2 Fe-58 0 0 -8 10 2 Ni-58 0 0 -9 10 2 Ni-60 0 0 -10 10 2 Ni-61 0 0 -11 10 2 Ni-62 0 0 -12 10 2 Ni-64 0 0 -13 10 2 Mn-55 0 0 -14 10 2 Si-28 0 0 -15 10 2 Si-29 0 0 -16 10 2 Si-30 0 0 -17 10 2 Cr-50 0 0 -18 10 2 Cr-52 0 0 -19 10 2 Cr-53 0 0 -20 10 2 Cr-54 0 0 material group in group out nuclide moment mean std. dev. moment +21 10 1 H-1 0.0 0.0 +22 10 1 O-16 0.0 0.0 +23 10 1 B-10 0.0 0.0 +24 10 1 B-11 0.0 0.0 +25 10 1 Fe-54 0.0 0.0 +26 10 1 Fe-56 0.0 0.0 +27 10 1 Fe-57 0.0 0.0 +28 10 1 Fe-58 0.0 0.0 +29 10 1 Ni-58 0.0 0.0 +30 10 1 Ni-60 0.0 0.0 +31 10 1 Ni-61 0.0 0.0 +32 10 1 Ni-62 0.0 0.0 +33 10 1 Ni-64 0.0 0.0 +34 10 1 Mn-55 0.0 0.0 +35 10 1 Si-28 0.0 0.0 +36 10 1 Si-29 0.0 0.0 +37 10 1 Si-30 0.0 0.0 +38 10 1 Cr-50 0.0 0.0 +39 10 1 Cr-52 0.0 0.0 +40 10 1 Cr-53 0.0 0.0 +41 10 1 Cr-54 0.0 0.0 +0 10 2 H-1 0.0 0.0 +1 10 2 O-16 0.0 0.0 +2 10 2 B-10 0.0 0.0 +3 10 2 B-11 0.0 0.0 +4 10 2 Fe-54 0.0 0.0 +5 10 2 Fe-56 0.0 0.0 +6 10 2 Fe-57 0.0 0.0 +7 10 2 Fe-58 0.0 0.0 +8 10 2 Ni-58 0.0 0.0 +9 10 2 Ni-60 0.0 0.0 +10 10 2 Ni-61 0.0 0.0 +11 10 2 Ni-62 0.0 0.0 +12 10 2 Ni-64 0.0 0.0 +13 10 2 Mn-55 0.0 0.0 +14 10 2 Si-28 0.0 0.0 +15 10 2 Si-29 0.0 0.0 +16 10 2 Si-30 0.0 0.0 +17 10 2 Cr-50 0.0 0.0 +18 10 2 Cr-52 0.0 0.0 +19 10 2 Cr-53 0.0 0.0 +20 10 2 Cr-54 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 63 10 1 1 H-1 P0 0.123944 0.541390 P0 64 10 1 1 O-16 P0 0.000000 0.000000 P0 65 10 1 1 B-10 P0 0.000000 0.000000 P0 @@ -1747,48 +1747,48 @@ 18 10 2 2 Cr-52 P0 0.000000 0.000000 P0 19 10 2 2 Cr-53 P0 0.000000 0.000000 P0 20 10 2 2 Cr-54 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. -21 10 1 H-1 0 0 -22 10 1 O-16 0 0 -23 10 1 B-10 0 0 -24 10 1 B-11 0 0 -25 10 1 Fe-54 0 0 -26 10 1 Fe-56 0 0 -27 10 1 Fe-57 0 0 -28 10 1 Fe-58 0 0 -29 10 1 Ni-58 0 0 -30 10 1 Ni-60 0 0 -31 10 1 Ni-61 0 0 -32 10 1 Ni-62 0 0 -33 10 1 Ni-64 0 0 -34 10 1 Mn-55 0 0 -35 10 1 Si-28 0 0 -36 10 1 Si-29 0 0 -37 10 1 Si-30 0 0 -38 10 1 Cr-50 0 0 -39 10 1 Cr-52 0 0 -40 10 1 Cr-53 0 0 -41 10 1 Cr-54 0 0 -0 10 2 H-1 0 0 -1 10 2 O-16 0 0 -2 10 2 B-10 0 0 -3 10 2 B-11 0 0 -4 10 2 Fe-54 0 0 -5 10 2 Fe-56 0 0 -6 10 2 Fe-57 0 0 -7 10 2 Fe-58 0 0 -8 10 2 Ni-58 0 0 -9 10 2 Ni-60 0 0 -10 10 2 Ni-61 0 0 -11 10 2 Ni-62 0 0 -12 10 2 Ni-64 0 0 -13 10 2 Mn-55 0 0 -14 10 2 Si-28 0 0 -15 10 2 Si-29 0 0 -16 10 2 Si-30 0 0 -17 10 2 Cr-50 0 0 -18 10 2 Cr-52 0 0 -19 10 2 Cr-53 0 0 -20 10 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 10 1 H-1 0.0 0.0 +22 10 1 O-16 0.0 0.0 +23 10 1 B-10 0.0 0.0 +24 10 1 B-11 0.0 0.0 +25 10 1 Fe-54 0.0 0.0 +26 10 1 Fe-56 0.0 0.0 +27 10 1 Fe-57 0.0 0.0 +28 10 1 Fe-58 0.0 0.0 +29 10 1 Ni-58 0.0 0.0 +30 10 1 Ni-60 0.0 0.0 +31 10 1 Ni-61 0.0 0.0 +32 10 1 Ni-62 0.0 0.0 +33 10 1 Ni-64 0.0 0.0 +34 10 1 Mn-55 0.0 0.0 +35 10 1 Si-28 0.0 0.0 +36 10 1 Si-29 0.0 0.0 +37 10 1 Si-30 0.0 0.0 +38 10 1 Cr-50 0.0 0.0 +39 10 1 Cr-52 0.0 0.0 +40 10 1 Cr-53 0.0 0.0 +41 10 1 Cr-54 0.0 0.0 +0 10 2 H-1 0.0 0.0 +1 10 2 O-16 0.0 0.0 +2 10 2 B-10 0.0 0.0 +3 10 2 B-11 0.0 0.0 +4 10 2 Fe-54 0.0 0.0 +5 10 2 Fe-56 0.0 0.0 +6 10 2 Fe-57 0.0 0.0 +7 10 2 Fe-58 0.0 0.0 +8 10 2 Ni-58 0.0 0.0 +9 10 2 Ni-60 0.0 0.0 +10 10 2 Ni-61 0.0 0.0 +11 10 2 Ni-62 0.0 0.0 +12 10 2 Ni-64 0.0 0.0 +13 10 2 Mn-55 0.0 0.0 +14 10 2 Si-28 0.0 0.0 +15 10 2 Si-29 0.0 0.0 +16 10 2 Si-30 0.0 0.0 +17 10 2 Cr-50 0.0 0.0 +18 10 2 Cr-52 0.0 0.0 +19 10 2 Cr-53 0.0 0.0 +20 10 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. 9 11 1 H-1 0.131470 0.476035 10 11 1 O-16 0.028684 0.043000 11 11 1 B-10 0.000000 0.000000 @@ -1807,24 +1807,24 @@ 6 11 2 Zr-92 0.084226 0.103161 7 11 2 Zr-94 0.092039 0.125985 8 11 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -9 11 1 H-1 0 0 -10 11 1 O-16 0 0 -11 11 1 B-10 0 0 -12 11 1 B-11 0 0 -13 11 1 Zr-90 0 0 -14 11 1 Zr-91 0 0 -15 11 1 Zr-92 0 0 -16 11 1 Zr-94 0 0 -17 11 1 Zr-96 0 0 -0 11 2 H-1 0 0 -1 11 2 O-16 0 0 -2 11 2 B-10 0 0 -3 11 2 B-11 0 0 -4 11 2 Zr-90 0 0 -5 11 2 Zr-91 0 0 -6 11 2 Zr-92 0 0 -7 11 2 Zr-94 0 0 -8 11 2 Zr-96 0 0 material group in group out nuclide moment mean std. dev. moment +9 11 1 H-1 0.0 0.0 +10 11 1 O-16 0.0 0.0 +11 11 1 B-10 0.0 0.0 +12 11 1 B-11 0.0 0.0 +13 11 1 Zr-90 0.0 0.0 +14 11 1 Zr-91 0.0 0.0 +15 11 1 Zr-92 0.0 0.0 +16 11 1 Zr-94 0.0 0.0 +17 11 1 Zr-96 0.0 0.0 +0 11 2 H-1 0.0 0.0 +1 11 2 O-16 0.0 0.0 +2 11 2 B-10 0.0 0.0 +3 11 2 B-11 0.0 0.0 +4 11 2 Zr-90 0.0 0.0 +5 11 2 Zr-91 0.0 0.0 +6 11 2 Zr-92 0.0 0.0 +7 11 2 Zr-94 0.0 0.0 +8 11 2 Zr-96 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 27 11 1 1 H-1 P0 0.099594 0.442578 P0 28 11 1 1 O-16 P0 0.028684 0.043000 P0 29 11 1 1 B-10 P0 0.000000 0.000000 P0 @@ -1861,24 +1861,24 @@ 6 11 2 2 Zr-92 P0 0.084226 0.103161 P0 7 11 2 2 Zr-94 P0 0.092039 0.125985 P0 8 11 2 2 Zr-96 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. -9 11 1 H-1 0 0 -10 11 1 O-16 0 0 -11 11 1 B-10 0 0 -12 11 1 B-11 0 0 -13 11 1 Zr-90 0 0 -14 11 1 Zr-91 0 0 -15 11 1 Zr-92 0 0 -16 11 1 Zr-94 0 0 -17 11 1 Zr-96 0 0 -0 11 2 H-1 0 0 -1 11 2 O-16 0 0 -2 11 2 B-10 0 0 -3 11 2 B-11 0 0 -4 11 2 Zr-90 0 0 -5 11 2 Zr-91 0 0 -6 11 2 Zr-92 0 0 -7 11 2 Zr-94 0 0 -8 11 2 Zr-96 0 0 material group in nuclide mean std. dev. +9 11 1 H-1 0.0 0.0 +10 11 1 O-16 0.0 0.0 +11 11 1 B-10 0.0 0.0 +12 11 1 B-11 0.0 0.0 +13 11 1 Zr-90 0.0 0.0 +14 11 1 Zr-91 0.0 0.0 +15 11 1 Zr-92 0.0 0.0 +16 11 1 Zr-94 0.0 0.0 +17 11 1 Zr-96 0.0 0.0 +0 11 2 H-1 0.0 0.0 +1 11 2 O-16 0.0 0.0 +2 11 2 B-10 0.0 0.0 +3 11 2 B-11 0.0 0.0 +4 11 2 Zr-90 0.0 0.0 +5 11 2 Zr-91 0.0 0.0 +6 11 2 Zr-92 0.0 0.0 +7 11 2 Zr-94 0.0 0.0 +8 11 2 Zr-96 0.0 0.0 material group in nuclide mean std. dev. 9 12 1 H-1 0.098944 0.178543 10 12 1 O-16 0.013270 0.020403 11 12 1 B-10 0.000000 0.000000 @@ -1897,24 +1897,24 @@ 6 12 2 Zr-92 0.000000 0.000000 7 12 2 Zr-94 0.000000 0.000000 8 12 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -9 12 1 H-1 0 0 -10 12 1 O-16 0 0 -11 12 1 B-10 0 0 -12 12 1 B-11 0 0 -13 12 1 Zr-90 0 0 -14 12 1 Zr-91 0 0 -15 12 1 Zr-92 0 0 -16 12 1 Zr-94 0 0 -17 12 1 Zr-96 0 0 -0 12 2 H-1 0 0 -1 12 2 O-16 0 0 -2 12 2 B-10 0 0 -3 12 2 B-11 0 0 -4 12 2 Zr-90 0 0 -5 12 2 Zr-91 0 0 -6 12 2 Zr-92 0 0 -7 12 2 Zr-94 0 0 -8 12 2 Zr-96 0 0 material group in group out nuclide moment mean std. dev. moment +9 12 1 H-1 0.0 0.0 +10 12 1 O-16 0.0 0.0 +11 12 1 B-10 0.0 0.0 +12 12 1 B-11 0.0 0.0 +13 12 1 Zr-90 0.0 0.0 +14 12 1 Zr-91 0.0 0.0 +15 12 1 Zr-92 0.0 0.0 +16 12 1 Zr-94 0.0 0.0 +17 12 1 Zr-96 0.0 0.0 +0 12 2 H-1 0.0 0.0 +1 12 2 O-16 0.0 0.0 +2 12 2 B-10 0.0 0.0 +3 12 2 B-11 0.0 0.0 +4 12 2 Zr-90 0.0 0.0 +5 12 2 Zr-91 0.0 0.0 +6 12 2 Zr-92 0.0 0.0 +7 12 2 Zr-94 0.0 0.0 +8 12 2 Zr-96 0.0 0.0 material group in group out nuclide moment mean std. dev. moment 27 12 1 1 H-1 P0 0.071704 0.167588 P0 28 12 1 1 O-16 P0 0.013270 0.020403 P0 29 12 1 1 B-10 P0 0.000000 0.000000 P0 @@ -1951,21 +1951,21 @@ 6 12 2 2 Zr-92 P0 0.000000 0.000000 P0 7 12 2 2 Zr-94 P0 0.000000 0.000000 P0 8 12 2 2 Zr-96 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. -9 12 1 H-1 0 0 -10 12 1 O-16 0 0 -11 12 1 B-10 0 0 -12 12 1 B-11 0 0 -13 12 1 Zr-90 0 0 -14 12 1 Zr-91 0 0 -15 12 1 Zr-92 0 0 -16 12 1 Zr-94 0 0 -17 12 1 Zr-96 0 0 -0 12 2 H-1 0 0 -1 12 2 O-16 0 0 -2 12 2 B-10 0 0 -3 12 2 B-11 0 0 -4 12 2 Zr-90 0 0 -5 12 2 Zr-91 0 0 -6 12 2 Zr-92 0 0 -7 12 2 Zr-94 0 0 -8 12 2 Zr-96 0 0 \ No newline at end of file +9 12 1 H-1 0.0 0.0 +10 12 1 O-16 0.0 0.0 +11 12 1 B-10 0.0 0.0 +12 12 1 B-11 0.0 0.0 +13 12 1 Zr-90 0.0 0.0 +14 12 1 Zr-91 0.0 0.0 +15 12 1 Zr-92 0.0 0.0 +16 12 1 Zr-94 0.0 0.0 +17 12 1 Zr-96 0.0 0.0 +0 12 2 H-1 0.0 0.0 +1 12 2 O-16 0.0 0.0 +2 12 2 B-10 0.0 0.0 +3 12 2 B-11 0.0 0.0 +4 12 2 Zr-90 0.0 0.0 +5 12 2 Zr-91 0.0 0.0 +6 12 2 Zr-92 0.0 0.0 +7 12 2 Zr-94 0.0 0.0 +8 12 2 Zr-96 0.0 0.0 \ No newline at end of file From 32eb58774df061c2198814ab99be6db7058288f6 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 10 May 2016 22:08:10 -0500 Subject: [PATCH 520/650] Add make_hexagon_region() function --- docs/source/pythonapi/index.rst | 10 ++++++++ openmc/surface.py | 45 ++++++++++++++++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/docs/source/pythonapi/index.rst b/docs/source/pythonapi/index.rst index 1631976e67..89d1b0508b 100644 --- a/docs/source/pythonapi/index.rst +++ b/docs/source/pythonapi/index.rst @@ -122,6 +122,16 @@ Many of the above classes are derived from several abstract classes: openmc.Region openmc.Lattice +One function is also available to create a hexagonal region defined by the +intersection of six surface half-spaces. + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myfunction.rst + + openmc.make_hexagon_region + Constructing Tallies -------------------- diff --git a/openmc/surface.py b/openmc/surface.py index 37e7c2ffdb..84028c1afa 100644 --- a/openmc/surface.py +++ b/openmc/surface.py @@ -2,11 +2,12 @@ from abc import ABCMeta from numbers import Real, Integral from xml.etree import ElementTree as ET import sys +from math import sqrt import numpy as np from openmc.checkvalue import check_type, check_value, check_greater_than -from openmc.region import Region +from openmc.region import Region, Intersection if sys.version_info[0] >= 3: basestring = str @@ -1503,3 +1504,45 @@ class Halfspace(Region): def __str__(self): return '-' + str(self.surface.id) if self.side == '-' \ else str(self.surface.id) + + +def make_hexagon_region(edge_length=1., orientation='y'): + """Create a hexagon region from six surface planes. + + Parameters + ---------- + edge_length : float + Length of a side of the hexagon in cm + orientation : {'x', 'y'} + An 'x' orientation means that two sides of the hexagon are parallel to + the x-axis and a 'y' orientation means that two sides of the hexagon are + parallel to the y-axis. + + Returns + ------- + openmc.Region + The inside of a hexagonal prism + + """ + + l = edge_length + + if orientation == 'x': + right = XPlane(x0=sqrt(3.)/2.*l) + left = XPlane(x0=-sqrt(3.)/2.*l) + c = sqrt(3.)/3. + ur = Plane(A=c, B=1., D=l) # y = -x/sqrt(3) + a + ul = Plane(A=-c, B=1., D=l) # y = x/sqrt(3) + a + lr = Plane(A=-c, B=1., D=-l) # y = x/sqrt(3) - a + ll = Plane(A=c, B=1., D=-l) # y = -x/sqrt(3) - a + return Intersection(-right, +left, -ur, -ul, +lr, +ll) + + elif orientation == 'y': + top = YPlane(y0=sqrt(3.)/2.*l) + bottom = YPlane(y0=-sqrt(3.)/2.*l) + c = sqrt(3.) + ur = Plane(A=c, B=1., D=c*l) # y = -sqrt(3)*(x - a) + lr = Plane(A=-c, B=1., D=-c*l) # y = sqrt(3)*(x + a) + ll = Plane(A=c, B=1., D=-c*l) # y = -sqrt(3)*(x + a) + ul = Plane(A=-c, B=1., D=c*l) # y = sqrt(3)*(x + a) + return Intersection(-top, +bottom, -ur, +lr, +ll, -ul) From 0cabfec5e7279d6a449b1a71da063d710ce200ef Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 11 May 2016 09:46:58 -0500 Subject: [PATCH 521/650] A little error checking on Element.name --- openmc/element.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openmc/element.py b/openmc/element.py index 39564add4a..66371aba9a 100644 --- a/openmc/element.py +++ b/openmc/element.py @@ -1,7 +1,7 @@ import sys import openmc -from openmc.checkvalue import check_type +from openmc.checkvalue import check_type, check_length from openmc.data import natural_abundance if sys.version_info[0] >= 3: @@ -99,7 +99,8 @@ class Element(object): @name.setter def name(self, name): - check_type('name', name, basestring) + check_type('element name', name, basestring) + check_length('element name', name, 1, 2) self._name = name @scattering.setter From 42ef7ccfac5febf1d62e44bd8074dc15222c0974 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 23 Mar 2016 15:47:51 -0500 Subject: [PATCH 522/650] Add periodic boundary conditions --- docs/source/usersguide/input.rst | 2 +- src/geometry.F90 | 62 ++++++++++++++++++++++++ src/initialize.F90 | 14 ++++++ src/input_xml.F90 | 72 +++++++++++++++++++++++++++- src/relaxng/geometry.rnc | 5 +- src/relaxng/geometry.rng | 12 +++++ src/surface_header.F90 | 1 + tests/test_periodic/geometry.xml | 12 +++++ tests/test_periodic/materials.xml | 13 +++++ tests/test_periodic/results_true.dat | 2 + tests/test_periodic/settings.xml | 13 +++++ tests/test_periodic/tallies.xml | 14 ++++++ tests/test_periodic/test_periodic.py | 11 +++++ tests/testing_harness.py | 3 +- 14 files changed, 231 insertions(+), 5 deletions(-) create mode 100644 tests/test_periodic/geometry.xml create mode 100644 tests/test_periodic/materials.xml create mode 100644 tests/test_periodic/results_true.dat create mode 100644 tests/test_periodic/settings.xml create mode 100644 tests/test_periodic/tallies.xml create mode 100644 tests/test_periodic/test_periodic.py diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 775407d70b..ea51723b7b 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -898,7 +898,7 @@ Each ```` element can have the following attributes or sub-elements: :boundary: The boundary condition for the surface. This can be "transmission", - "vacuum", or "reflective". + "vacuum", "reflective", or "periodic". *Default*: "transmission" diff --git a/src/geometry.F90 b/src/geometry.F90 index 8a38f982b5..9f77817387 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -475,6 +475,68 @@ contains &// trim(to_str(surf%id))) end if return + elseif (surf % bc == BC_PERIODIC .and. run_mode /= MODE_PLOTTING) then + ! ======================================================================= + ! PERIODIC BOUNDARY + + ! Do not handle periodic boundary conditions on lower universes + if (p % n_coord /= 1) then + call handle_lost_particle(p, "Cannot period particle " & + // trim(to_str(p % id)) // " off surface in a lower universe.") + return + end if + + ! Score surface currents since reflection causes the direction of the + ! particle to change -- artificially move the particle slightly back in + ! case the surface crossing in coincident with a mesh boundary + + if (active_current_tallies % size() > 0) then + p % coord(1) % xyz = p % coord(1) % xyz - TINY_BIT * p % coord(1) % uvw + call score_surface_current(p) + p % coord(1) % xyz = p % coord(1) % xyz + TINY_BIT * p % coord(1) % uvw + end if + + select type (surf) + type is (SurfaceXPlane) + select type (opposite => surfaces(surf % opposite) % obj) + type is (SurfaceXPlane) + p % coord(1) % xyz(1) = opposite % x0 + end select + + type is (SurfaceYPlane) + select type (opposite => surfaces(surf % opposite) % obj) + type is (SurfaceYPlane) + p % coord(1) % xyz(2) = opposite % y0 + end select + + type is (SurfaceZPlane) + select type (opposite => surfaces(surf % opposite) % obj) + type is (SurfaceZPlane) + p % coord(1) % xyz(3) = opposite % z0 + end select + end select + + ! Reassign particle's surface + p % surface = sign(surfaces(surf % opposite) % obj % id, p % surface) + + ! Figure out what cell particle is in now + p % n_coord = 1 + call find_cell(p, found) + if (.not. found) then + call handle_lost_particle(p, "Couldn't find particle after hitting & + &periodic boundary on surface " // trim(to_str(surf%id)) // ".") + return + end if + + ! Set previous coordinate going slightly past surface crossing + p % last_xyz = p % coord(1) % xyz + TINY_BIT * p % coord(1) % uvw + + ! Diagnostic message + if (verbosity >= 10 .or. trace) then + call write_message(" Hit periodic boundary on surface " & + // trim(to_str(surf%id))) + end if + return end if ! ========================================================================== diff --git a/src/initialize.F90 b/src/initialize.F90 index 09bedb1388..74cab87c4b 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -580,6 +580,20 @@ contains class(Lattice), pointer :: lat => null() type(TallyObject), pointer :: t => null() + ! Adjust opposite surfaces for periodic boundaries + do i = 1, size(surfaces) + associate (surf => surfaces(i) % obj) + if (surf % bc == BC_PERIODIC) then + if (surface_dict % has_key(surf % opposite)) then + surf % opposite = surface_dict % get_key(surf % opposite) + else + call fatal_error("Could not find opposite surface " // & + trim(to_str(surf % opposite)) // ".") + end if + end if + end associate + end do + do i = 1, n_cells ! ======================================================================= ! ADJUST REGION SPECIFICATION FOR EACH CELL diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 90c703d27d..9e49e3c349 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -1109,6 +1109,8 @@ contains integer :: universe_num integer :: n_cells_in_univ integer :: coeffs_reqd + integer :: i_xmin, i_xmax, i_ymin, i_ymax, i_zmin, i_zmax + real(8) :: xmin, xmax, ymin, ymax, zmin, zmax integer, allocatable :: temp_int_array(:) real(8) :: phi, theta, psi real(8), allocatable :: coeffs(:) @@ -1387,6 +1389,13 @@ contains call fatal_error("No surfaces found in geometry.xml!") end if + xmin = INFINITY + xmax = -INFINITY + ymin = INFINITY + ymax = -INFINITY + zmin = INFINITY + zmax = -INFINITY + ! Allocate cells array allocate(surfaces(n_surfaces)) @@ -1478,10 +1487,28 @@ contains select type(s) type is (SurfaceXPlane) s%x0 = coeffs(1) + + ! Determine outer surfaces + xmin = min(xmin, s % x0) + xmax = max(xmax, s % x0) + if (xmin == s % x0) i_xmin = i + if (xmax == s % x0) i_xmax = i type is (SurfaceYPlane) s%y0 = coeffs(1) + + ! Determine outer surfaces + ymin = min(ymin, s % y0) + ymax = max(ymax, s % y0) + if (ymin == s % y0) i_ymin = i + if (ymax == s % y0) i_ymax = i type is (SurfaceZPlane) s%z0 = coeffs(1) + + ! Determine outer surfaces + zmin = min(zmin, s % z0) + zmax = max(zmax, s % z0) + if (zmin == s % z0) i_zmin = i + if (zmax == s % z0) i_zmax = i type is (SurfacePlane) s%A = coeffs(1) s%B = coeffs(2) @@ -1548,11 +1575,13 @@ contains case ('reflective', 'reflect', 'reflecting') s%bc = BC_REFLECT boundary_exists = .true. + case ('periodic') + s%bc = BC_PERIODIC + boundary_exists = .true. case default call fatal_error("Unknown boundary condition '" // trim(word) // & &"' specified on surface " // trim(to_str(s%id))) end select - ! Add surface to dictionary call surface_dict % add_key(s%id, i) end do @@ -1563,6 +1592,47 @@ contains call fatal_error("No boundary conditions were applied to any surfaces!") end if + ! Determine opposite side for periodic boundaries + do i = 1, size(surfaces) + if (surfaces(i) % obj % bc == BC_PERIODIC) then + select type (surf => surfaces(i) % obj) + type is (SurfaceXPlane) + if (i == i_xmin) then + surf % opposite = i_xmax + elseif (i == i_xmax) then + surf % opposite = i_xmin + else + call fatal_error("Periodic boundary condition applied to & + &interior surface.") + end if + + type is (SurfaceYPlane) + if (i == i_ymin) then + surf % opposite = i_ymax + elseif (i == i_ymax) then + surf % opposite = i_ymin + else + call fatal_error("Periodic boundary condition applied to & + &interior surface.") + end if + + type is (SurfaceZPlane) + if (i == i_zmin) then + surf % opposite = i_zmax + elseif (i == i_zmax) then + surf % opposite = i_zmin + else + call fatal_error("Periodic boundary condition applied to & + &interior surface.") + end if + + class default + call fatal_error("Periodic boundary condition applied to & + &non-planar surface.") + end select + end if + end do + ! ========================================================================== ! READ LATTICES FROM GEOMETRY.XML diff --git a/src/relaxng/geometry.rnc b/src/relaxng/geometry.rnc index 8d25789f5a..6cb6f7c158 100644 --- a/src/relaxng/geometry.rnc +++ b/src/relaxng/geometry.rnc @@ -21,8 +21,9 @@ element geometry { (element type { xsd:string { maxLength = "15" } } | attribute type { xsd:string { maxLength = "15" } }) & (element coeffs { list { xsd:double+ } } | attribute coeffs { list { xsd:double+ } }) & - (element boundary { ( "transmit" | "reflective" | "vacuum" ) } | - attribute boundary { ( "transmit" | "reflective" | "vacuum" ) })? + (element boundary { ( "transmit" | "reflective" | "vacuum" | "periodic" ) } | + attribute boundary { ( "transmit" | "reflective" | "vacuum" | "periodic" ) })? & + (element opposite { xsd:int } | attribute opposite { xsd:int })? }* & element lattice { diff --git a/src/relaxng/geometry.rng b/src/relaxng/geometry.rng index d40401b281..3ff0f67c69 100644 --- a/src/relaxng/geometry.rng +++ b/src/relaxng/geometry.rng @@ -173,6 +173,7 @@ transmit reflective vacuum + periodic @@ -180,10 +181,21 @@ transmit reflective vacuum + periodic + + + + + + + + + + diff --git a/src/surface_header.F90 b/src/surface_header.F90 index 4686552176..0b5d3c86be 100644 --- a/src/surface_header.F90 +++ b/src/surface_header.F90 @@ -15,6 +15,7 @@ module surface_header neighbor_pos(:), & ! List of cells on positive side neighbor_neg(:) ! List of cells on negative side integer :: bc ! Boundary condition + integer :: opposite ! Opposite surface for periodic boundary character(len=104) :: name = "" ! User-defined name contains procedure :: sense diff --git a/tests/test_periodic/geometry.xml b/tests/test_periodic/geometry.xml new file mode 100644 index 0000000000..6ecfec1972 --- /dev/null +++ b/tests/test_periodic/geometry.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/tests/test_periodic/materials.xml b/tests/test_periodic/materials.xml new file mode 100644 index 0000000000..a7bf4faf4e --- /dev/null +++ b/tests/test_periodic/materials.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/tests/test_periodic/results_true.dat b/tests/test_periodic/results_true.dat new file mode 100644 index 0000000000..f65dbafd1b --- /dev/null +++ b/tests/test_periodic/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +1.542742E+00 4.410461E-02 diff --git a/tests/test_periodic/settings.xml b/tests/test_periodic/settings.xml new file mode 100644 index 0000000000..af09407ae5 --- /dev/null +++ b/tests/test_periodic/settings.xml @@ -0,0 +1,13 @@ + + + + 1000 + 4 + 0 + + + + -5. -5. -5. 5. 5. 5. + + + diff --git a/tests/test_periodic/tallies.xml b/tests/test_periodic/tallies.xml new file mode 100644 index 0000000000..595d7c0ddd --- /dev/null +++ b/tests/test_periodic/tallies.xml @@ -0,0 +1,14 @@ + + + + regular + -200. -1e50 + 200. 1e50 + 50 1 + + + collision + + fission + + diff --git a/tests/test_periodic/test_periodic.py b/tests/test_periodic/test_periodic.py new file mode 100644 index 0000000000..b584632f08 --- /dev/null +++ b/tests/test_periodic/test_periodic.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +import os +import sys +sys.path.insert(0, os.pardir) +from testing_harness import TestHarness + + +if __name__ == '__main__': + harness = TestHarness('statepoint.4.h5') + harness.main() diff --git a/tests/testing_harness.py b/tests/testing_harness.py index 78e5553e8c..e659768856 100644 --- a/tests/testing_harness.py +++ b/tests/testing_harness.py @@ -133,9 +133,10 @@ class TestHarness(object): def _cleanup(self): """Delete statepoints, tally, and test files.""" - output = glob.glob(os.path.join(os.getcwd(), 'statepoint.*.*')) + output = glob.glob(os.path.join(os.getcwd(), 'statepoint.*.h5')) output.append(os.path.join(os.getcwd(), 'tallies.out')) output.append(os.path.join(os.getcwd(), 'results_test.dat')) + output.append(os.path.join(os.getcwd(), 'summary.h5')) for f in output: if os.path.exists(f): os.remove(f) From f184f2a9e9b34d043d05de26748e82f6f57b9255 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Wed, 11 May 2016 14:27:33 -0400 Subject: [PATCH 523/650] Added warning messages to Library for the correction and legendre_order properties --- openmc/mgxs/library.py | 14 ++++++++++++++ openmc/mgxs/mgxs.py | 6 +++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index f2a5c7569b..ea856d735c 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -297,12 +297,26 @@ class Library(object): @correction.setter def correction(self, correction): cv.check_value('correction', correction, ('P0', None)) + + if correction == 'P0' and self.legendre_order > 0: + msg = 'The P0 correction will be ignored since the scattering ' \ + 'order {} is greater than zero'.format(self.legendre_order) + warnings.warn(msg) + self._correction = correction @legendre_order.setter def legendre_order(self, legendre_order): cv.check_type('legendre_order', legendre_order, Integral) cv.check_greater_than('legendre_order', legendre_order, 0, equality=True) + cv.check_less_than('legendre_order', legendre_order, 10, equality=True) + + if self.correction == 'P0' and legendre_order > 0: + msg = 'The P0 correction will be ignored since the scattering ' \ + 'order {} is greater than zero'.format(self.legendre_order) + warnings.warn(msg, RuntimeWarning) + self.correction = None + self._legendre_order = legendre_order @tally_trigger.setter diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index dc3d0d127b..830b6d7666 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -2034,11 +2034,15 @@ class ScatterMatrixXS(MGXS): subdomains='all', nuclides='all', moment='all', xs_type='macro', order_groups='increasing', row_column='inout', value='mean', **kwargs): - """Returns an array of multi-group cross sections. + r"""Returns an array of multi-group cross sections. This method constructs a 2D NumPy array for the requested scattering matrix data data for one or more energy groups and subdomains. + NOTE: The scattering moments are not multiplied by the :math:`(2l+1)/2` + prefactor in the expansion of the scattering source into Legendre + moments in the neutron transport equation. + Parameters ---------- in_groups : Iterable of Integral or 'all' From 44ba08f70a2478dc3c933a6a1d0a93cef9c88f06 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Wed, 11 May 2016 14:29:11 -0400 Subject: [PATCH 524/650] Removed reference to OpenCG in Pandas DF getter for ScatterMatrixXS --- openmc/mgxs/mgxs.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index eed0627bf0..cc192855ba 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -2190,7 +2190,7 @@ class ScatterMatrixXS(MGXS): return xs def get_pandas_dataframe(self, groups='all', nuclides='all', moment='all', - xs_type='macro', summary=None): + xs_type='macro', distribcell_paths=True): """Build a Pandas DataFrame for the MGXS data. This method leverages :meth:`openmc.Tally.get_pandas_dataframe`, but @@ -2214,12 +2214,11 @@ class ScatterMatrixXS(MGXS): xs_type: {'macro', 'micro'} Return macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. - summary : None or openmc.Summary - An optional Summary object to be used to construct columns for - distribcell tally filters (default is None). The geometric - information in the Summary object is embedded into a multi-index - column with a geometric "path" to each distribcell intance. - NOTE: This option requires the OpenCG Python package. + distribcell_paths : bool, optional + Construct columns for distribcell tally filters (default is True). + The geometric information in the Summary object is embedded into a + Multi-index column with a geometric "path" to each distribcell + instance. Returns ------- @@ -2235,7 +2234,7 @@ class ScatterMatrixXS(MGXS): """ df = super(ScatterMatrixXS, self).get_pandas_dataframe( - groups, nuclides, xs_type, summary) + groups, nuclides, xs_type, distribcell_paths) # Add a moment column to dataframe moments = np.array(['P{}'.format(i) for i in range(self.legendre_order+1)]) From 98a02d5d5048308eb608c1513d2f4bd6ee40ede8 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 11 May 2016 21:19:30 -0400 Subject: [PATCH 525/650] Simplifications as per comments from @wbinventor and @paulromano. Next is updating notebook --- openmc/mgxs/library.py | 372 ++++++++++------------- openmc/mgxs_library.py | 671 ++++++++++++++++++++++++++++------------- 2 files changed, 620 insertions(+), 423 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index dfa55b3a59..991a98f62c 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -15,14 +15,9 @@ import openmc.checkvalue as cv if sys.version_info[0] >= 3: basestring = str -# The following represent the most accurate MGXS generation strategy -# for use in the MG mode of OpenMC. -OPENMC_MG_MGXS_TYPES = ['transport', 'absorption', 'nu-fission', 'chi', - 'scatter matrix', 'nu-scatter matrix'] - class Library(object): - """A multi-group cross section library for some energy group structure. + '''A multi-group cross section library for some energy group structure. This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated @@ -84,7 +79,7 @@ class Library(object): Whether or not the Library's tallies use SciPy's LIL sparse matrix format for compressed data storage - """ + ''' def __init__(self, openmc_geometry, by_nuclide=False, mgxs_types=None, name=''): @@ -252,7 +247,8 @@ class Library(object): @domain_type.setter def domain_type(self, domain_type): - cv.check_value('domain type', domain_type, tuple(openmc.mgxs.DOMAIN_TYPES)) + cv.check_value('domain type', domain_type, + tuple(openmc.mgxs.DOMAIN_TYPES)) self._domain_type = domain_type @domains.setter @@ -304,7 +300,7 @@ class Library(object): @sparse.setter def sparse(self, sparse): - """Convert tally data from NumPy arrays to SciPy list of lists (LIL) + '''Convert tally data from NumPy arrays to SciPy list of lists (LIL) sparse matrices, and vice versa. This property may be used to reduce the amount of data in memory during @@ -312,7 +308,7 @@ class Library(object): matrices internally within the Tally object. All tally data access properties and methods will return data as a dense NumPy array. - """ + ''' cv.check_type('sparse', sparse, bool) @@ -325,14 +321,14 @@ class Library(object): self._sparse = sparse def build_library(self): - """Initialize MGXS objects in each domain and for each reaction type + '''Initialize MGXS objects in each domain and for each reaction type in the library. This routine will populate the all_mgxs instance attribute dictionary with MGXS subclass objects keyed by each domain ID (e.g., Material IDs) and cross section type (e.g., 'nu-fission', 'total', etc.). - """ + ''' # Initialize MGXS for each domain and mgxs type and store in dictionary for domain in self.domains: @@ -355,7 +351,7 @@ class Library(object): self.all_mgxs[domain.id][mgxs_type] = mgxs def add_to_tallies_file(self, tallies_file, merge=True): - """Add all tallies from all MGXS objects to a tallies file. + '''Add all tallies from all MGXS objects to a tallies file. NOTE: This assumes that :meth:`Library.build_library` has been called @@ -363,12 +359,12 @@ class Library(object): ---------- tallies_file : openmc.Tallies A Tallies collection to add each MGXS' tallies to generate a - "tallies.xml" input file for OpenMC + 'tallies.xml' input file for OpenMC merge : bool Indicate whether tallies should be merged when possible. Defaults to True. - """ + ''' cv.check_type('tallies_file', tallies_file, openmc.Tallies) @@ -380,7 +376,7 @@ class Library(object): tallies_file.append(tally, merge=merge) def load_from_statepoint(self, statepoint): - """Extracts tallies in an OpenMC StatePoint with the data needed to + '''Extracts tallies in an OpenMC StatePoint with the data needed to compute multi-group cross sections. This method is needed to compute cross section data from tallies @@ -399,7 +395,7 @@ class Library(object): When this method is called with a statepoint that has not been linked with a summary object. - """ + ''' cv.check_type('statepoint', statepoint, openmc.StatePoint) @@ -423,7 +419,7 @@ class Library(object): mgxs.sparse = self.sparse def get_mgxs(self, domain, mgxs_type): - """Return the MGXS object for some domain and reaction rate type. + '''Return the MGXS object for some domain and reaction rate type. This routine searches the library for an MGXS object for the spatial domain and reaction rate type requested by the user. @@ -448,7 +444,7 @@ class Library(object): If no MGXS object can be found for the requested domain or multi-group cross section type - """ + ''' if self.domain_type == 'material': cv.check_type('domain', domain, (openmc.Material, Integral)) @@ -464,7 +460,7 @@ class Library(object): if domain_id == domain.id: break else: - msg = 'Unable to find MGXS for {0} "{1}" in ' \ + msg = 'Unable to find MGXS for "{0}" "{1}" in ' \ 'library'.format(self.domain_type, domain_id) raise ValueError(msg) else: @@ -478,7 +474,7 @@ class Library(object): return self.all_mgxs[domain_id][mgxs_type] def get_condensed_library(self, coarse_groups): - """Construct an energy-condensed version of this library. + '''Construct an energy-condensed version of this library. This routine condenses each of the multi-group cross sections in the library to a coarse energy group structure. NOTE: This routine must @@ -505,7 +501,7 @@ class Library(object): -------- MGXS.get_condensed_xs(coarse_groups) - """ + ''' if self.sp_filename is None: msg = 'Unable to get a condensed coarse group cross section ' \ @@ -534,7 +530,7 @@ class Library(object): return condensed_library def get_subdomain_avg_library(self): - """Construct a subdomain-averaged version of this library. + '''Construct a subdomain-averaged version of this library. This routine averages each multi-group cross section across distribcell instances. The method performs spatial homogenization to compute the @@ -557,7 +553,7 @@ class Library(object): -------- MGXS.get_subdomain_avg_xs(subdomains) - """ + ''' if self.sp_filename is None: msg = 'Unable to get a subdomain-averaged cross section ' \ @@ -585,7 +581,7 @@ class Library(object): def build_hdf5_store(self, filename='mgxs.h5', directory='mgxs', subdomains='all', nuclides='all', xs_type='macro', row_column='inout'): - """Export the multi-group cross section library to an HDF5 binary file. + '''Export the multi-group cross section library to an HDF5 binary file. This method constructs an HDF5 file which stores the library's multi-group cross section data. The data is stored in a hierarchy of @@ -628,7 +624,7 @@ class Library(object): -------- MGXS.build_hdf5_store(filename, directory, xs_type) - """ + ''' if self.sp_filename is None: msg = 'Unable to export multi-group cross section library ' \ @@ -648,7 +644,7 @@ class Library(object): full_filename = os.path.join(directory, filename) full_filename = full_filename.replace(' ', '-') f = h5py.File(full_filename, 'w') - f.attrs["# groups"] = self.num_groups + f.attrs['# groups'] = self.num_groups f.close() # Export MGXS for each domain and mgxs type to an HDF5 file @@ -663,7 +659,7 @@ class Library(object): nuclides=nuclides, row_column=row_column) def dump_to_file(self, filename='mgxs', directory='mgxs'): - """Store this Library object in a pickle binary file. + '''Store this Library object in a pickle binary file. Parameters ---------- @@ -676,7 +672,7 @@ class Library(object): -------- Library.load_from_file(filename, directory) - """ + ''' cv.check_type('filename', filename, basestring) cv.check_type('directory', directory, basestring) @@ -693,7 +689,7 @@ class Library(object): @staticmethod def load_from_file(filename='mgxs', directory='mgxs'): - """Load a Library object from a pickle binary file. + '''Load a Library object from a pickle binary file. Parameters ---------- @@ -711,7 +707,7 @@ class Library(object): -------- Library.dump_to_file(mgxs_lib, filename, directory) - """ + ''' cv.check_type('filename', filename, basestring) cv.check_type('directory', directory, basestring) @@ -729,7 +725,7 @@ class Library(object): def write_mg_library(self, xs_type='macro', domain_names=None, xs_ids=None, filename='mg_cross_sections', directory='./', return_names=True): - """Creates a cross-section data library file for the Multi-Group + '''Creates a cross-section data library file for the Multi-Group mode of OpenMC. Parameters @@ -740,11 +736,11 @@ class Library(object): nuclide this will be set to 'macro' regardless. domain_names : Iterable of str List of names to apply to the xsdata entries in the - resultant mgxs data file. Defaults to "set1", "set2", ... + resultant mgxs data file. Defaults to 'set1', 'set2', ... xs_ids : str or Iterable of str - Cross section set identifier (i.e., "71c") for all + Cross section set identifier (i.e., '71c') for all data sets (if only str) or for each individual one - (if iterable of str). Defaults to '1g' + (if iterable of str). Defaults to '1m'. filename : str Filename for the pickle file. Defaults to 'mg_cross_sections'. directory : str @@ -772,7 +768,11 @@ class Library(object): -------- Library.dump_to_file(mgxs_lib, filename, directory) - """ + ''' + + # Check to ensure the Library contains the correct + # multi-group cross section types + self.check_library_for_openmc_mgxs() # Check the provided parameters cv.check_value('xs_type', xs_type, ['macro', 'micro']) @@ -786,14 +786,18 @@ class Library(object): else: cv.check_iterable_type('xs_ids', xs_ids, basestring) else: - xs_ids = ['1g' for i in range(len(self.domains))] + xs_ids = ['1m' for i in range(len(self.domains))] cv.check_type('filename', filename, basestring) cv.check_type('directory', directory, basestring) + # Make sure statepoint has been loaded + if self._sp_filename is None: + msg = 'A StatePoint must be loaded before calling ' \ + 'the write_mg_library() function' + raise ValueError(msg) + # Construct the collection of the nuclides to report - if self.by_nuclide: - nuclides = self.all_mgxs[1][self.mgxs_types[-1]].get_all_nuclides() - else: + if not self.by_nuclide: xs_type = 'macro' # Make directory if it does not exist and build our filename @@ -813,213 +817,98 @@ class Library(object): xsdatas = [] mat_names = {} - for i in range(len(self.domains)): + for i, domain in enumerate(self.domains): - id = self.domains[i].id - if not self.by_nuclide: + mat_names[domain.id] = {} + if self.by_nuclide: + nuclides = list(domain.get_all_nuclides().keys()) + else: + nuclides = ['total'] + for nuclide in nuclides: # Build & add metadata to XSdata object - # (Use i here because k in nuclides will add chars to this) if domain_names is None: name = 'set' + str(i + 1) else: name = domain_names[i] + if nuclide is not 'total': + name += '_' + nuclide name += '.' + xs_ids[i] + + # Store the name + mat_names[domain.id][nuclide] = name + xsdata = openmc.XSdata(name, self.energy_groups) xsdata.order = order + if nuclide is not 'total': + xsdata.zaid = self._nuclides[nuclide][0] + xsdata.awr = self._nuclides[nuclide][1] - mat_names[id] = name - + nuclide = [nuclide] # Now get xs data itself if 'transport' in self.mgxs_types: - if self.correction == 'P0': - xsdata.set_total(self.all_mgxs[id]['transport'], - xs_type=xs_type, subdomains=(id,)) - else: - msg = "The use of a transport cross section " + \ - "requires the correction attribute to be" + \ - "set to 'P0' to produce valid cross " + \ - "section libraries" - raise ValueError(msg) + mymgxs = self.get_mgxs(domain, 'transport') + xsdata.set_total_mgxs(mymgxs, xs_type=xs_type, + nuclide=nuclide) elif 'total' in self.mgxs_types: - xsdata.set_total(self.all_mgxs[id]['total'], - xs_type=xs_type, subdomains=(id,)) + mymgxs = self.get_mgxs(domain, 'total') + xsdata.set_total_mgxs(mymgxs, xs_type=xs_type, + nuclide=nuclide) if 'absorption' in self.mgxs_types: - xsdata.set_absorption(self.all_mgxs[id]['absorption'], - xs_type=xs_type, - subdomains=(id,)) + mymgxs = self.get_mgxs(domain, 'absorption') + xsdata.set_absorption_mgxs(mymgxs, xs_type=xs_type, + nuclide=nuclide) if 'fission' in self.mgxs_types: - xsdata.set_fission(self.all_mgxs[id]['fission'], - xs_type=xs_type, subdomains=(id,)) + mymgxs = self.get_mgxs(domain, 'fission') + xsdata.set_fission_mgxs(mymgxs, xs_type=xs_type, + nuclide=nuclide) if 'kappa-fission' in self.mgxs_types: - xsdata.set_k_fission(self.all_mgxs[id]['kappa-fission'], - xs_type=xs_type, subdomains=(id,)) + mymgxs = self.get_mgxs(domain, 'kappa-fission') + xsdata.set_kappa_fission_mgxs(mymgxs, xs_type=xs_type, + nuclide=nuclide) if 'chi' in self.mgxs_types: - xsdata.set_chi(self.all_mgxs[id]['chi'], - xs_type=xs_type, subdomains=(id,)) + mymgxs = self.get_mgxs(domain, 'chi') + xsdata.set_chi_mgxs(mymgxs, xs_type=xs_type, + nuclide=nuclide) if 'nu-fission' in self.mgxs_types: - xsdata.set_nu_fission(self.all_mgxs[id]['nu-fission'], - xs_type=xs_type, - subdomains=(id,)) + mymgxs = self.get_mgxs(domain, 'nu-fission') + xsdata.set_nu_fission_mgxs(mymgxs, xs_type=xs_type, + nuclide=nuclide) # multiplicity requires scatter and nu-scatter if ((('scatter matrix' in self.mgxs_types) and ('nu-scatter matrix' in self.mgxs_types))): - xsdata.set_multiplicity( - self.all_mgxs[id]['nu-scatter matrix'], - self.all_mgxs[id]['scatter matrix'], - xs_type=xs_type, subdomains=(id,)) - xsdata.multiplicity = np.nan_to_num(xsdata.multiplicity) + scatt_mgxs = self.get_mgxs(domain, + 'scatter matrix') + nuscatt_mgxs = self.get_mgxs(domain, + 'nu-scatter matrix') + xsdata.set_multiplicity_mgxs(nuscatt_mgxs, scatt_mgxs, + xs_type=xs_type, + nuclide=nuclide) using_multiplicity = True else: using_multiplicity = False if using_multiplicity: - xsdata.set_scatter(self.all_mgxs[id]['nu-scatter matrix'], - xs_type=xs_type, - subdomains=(id,)) + nuscatt_mgxs = self.get_mgxs(domain, + 'nu-scatter matrix') + xsdata.set_scatter_mgxs(nuscatt_mgxs, xs_type=xs_type, + nuclide=nuclide) else: if 'nu-scatter matrix' in self.mgxs_types: - xsdata.set_scatter( - self.all_mgxs[id]['nu-scatter matrix'], - xs_type=xs_type, subdomains=(id,)) + nuscatt_mgxs = self.get_mgxs(domain, + 'nu-scatter matrix') + xsdata.set_scatter_mgxs(nuscatt_mgxs, xs_type=xs_type, + nuclide=nuclide) + # Since we are not using multiplicity, then # scattering multiplication (nu-scatter) must be # accounted for approximately by using an adjusted # absorption cross section. - # We can not do this with a transport x/s so check - # for that. if 'total' in self.mgxs_types: xsdata.absorption = \ np.subtract(xsdata.total, np.sum(xsdata.scatter[0, :, :], axis=1)) - else: - msg = "Absorption cross section must be " + \ - "provided if using a transport cross" + \ - " section and while not providing a " + \ - "scattering matrix" - raise ValueError(msg) - else: - msg = "No nu-scatter matrix data was provided. " + \ - "This means neutron balance cannot be " + \ - "achieved since (n,xn) multiplication is " + \ - "ignored." - warn(msg) - xsdata.set_scatter(self.all_mgxs[id]['scatter matrix'], - xs_type=xs_type, - subdomains=(id,)) - xsdatas.append(xsdata) - else: - mat_names[id] = {} - for nuclide in nuclides: - # Build & add metadata to XSdata object - if domain_names is None: - name = 'set' + str(i + 1) - else: - name = domain_names[i] - name += '_' + nuclide - name += '.' + xs_ids[i] - - mat_names[id][nuclide] = name - - xsdata = openmc.XSdata(name, self.energy_groups) - xsdata.order = order - xsdata.zaid = self._nuclides[nuclide][0] - xsdata.awr = self._nuclides[nuclide][1] - - # Now get xs data itself - if 'transport' in self.mgxs_types: - if self.correction == 'P0': - xsdata.set_total(self.all_mgxs[id]['transport'], - xs_type=xs_type, subdomains=(id,), - nuclides=[nuclide]) - else: - msg = "The use of a transport cross section " + \ - "requires the correction attribute to be" + \ - "set to 'P0' to produce valid cross " + \ - "section libraries" - raise ValueError(msg) - elif 'total' in self.mgxs_types: - xsdata.set_total(self.all_mgxs[id]['total'], - xs_type=xs_type, subdomains=(id,), - nuclides=[nuclide]) - if 'absorption' in self.mgxs_types: - xsdata.set_absorption(self.all_mgxs[id]['absorption'], - xs_type=xs_type, - subdomains=(id,), - nuclides=[nuclide]) - if 'fission' in self.mgxs_types: - xsdata.set_fission(self.all_mgxs[id]['fission'], - xs_type=xs_type, - subdomains=(id,), - nuclides=[nuclide]) - if 'kappa-fission' in self.mgxs_types: - xsdata.set_k_fission( - self.all_mgxs[id]['kappa-fission'], - xs_type=xs_type, subdomains=(id,), - nuclides=[nuclide]) - if 'chi' in self.mgxs_types: - xsdata.set_chi(self.all_mgxs[id]['chi'], - xs_type=xs_type, subdomains=(id,), - nuclides=[nuclide]) - if 'nu-fission' in self.mgxs_types: - xsdata.set_nu_fission(self.all_mgxs[id]['nu-fission'], - xs_type=xs_type, - subdomains=(id,), - nuclides=[nuclide]) - # multiplicity requires scatter and nu-scatter - if ((('scatter matrix' in self.mgxs_types) and - ('nu-scatter matrix' in self.mgxs_types))): - xsdata.set_multiplicity( - self.all_mgxs[id]['nu-scatter matrix'], - self.all_mgxs[id]['scatter matrix'], - xs_type=xs_type, subdomains=(id,), - nuclides=[nuclide]) - xsdata.multiplicity = \ - np.nan_to_num(xsdata.multiplicity) - using_multiplicity = True - else: - using_multiplicity = False - - if using_multiplicity: - xsdata.set_scatter( - self.all_mgxs[id]['nu-scatter matrix'], - xs_type=xs_type, subdomains=(id,), - nuclides=[nuclide]) - else: - if 'nu-scatter matrix' in self.mgxs_types: - xsdata.set_scatter( - self.all_mgxs[id]['nu-scatter matrix'], - xs_type=xs_type, subdomains=(id,), - nuclides=[nuclide]) - # Since we are not using multiplicity, then - # scattering multiplication (nu-scatter) must be - # accounted for approximately by using an adjusted - # absorption cross section. - if 'total' in self.mgxs_types: - xsdata.absorption = \ - np.subtract(xsdata.total, - np.sum(xsdata.scatter[0, :, :], - axis=1)) - else: - msg = "Absorption cross section must be " + \ - "provided if using a transport cross" + \ - " section and while not providing a " + \ - "scattering matrix" - raise ValueError(msg) - else: - msg = "No nu-scatter matrix data was provided. " +\ - "This means neutron balance cannot be " + \ - "achieved since (n,xn) multiplication is " +\ - "ignored." - warn(msg) - xsdata.set_scatter( - self.all_mgxs[id]['scatter matrix'], - xs_type=xs_type, - subdomains=(id,), - nuclides=[nuclide]) - - xsdatas.append(xsdata) # Add XSdatas to file mgxs_file.add_xsdatas(xsdatas) @@ -1029,3 +918,68 @@ class Library(object): if return_names: return mat_names + + def check_library_for_openmc_mgxs(self): + """This routine will check the MGXS Types within the provided + Library to ensure the data types provided can be used to create + a MGXS Library for OpenMC's Multi-Group mode via the + `Library.write_mg_library` method. + The rules to check include: + - Fission is not required as a fixed source problem could be + the target. + - Absorption is required. + - A nu-scatter matrix is required. + - Having both nu-scatter (of any order) and scatter + (at least isotropic) matrices is preferred + - If only nu-scatter, need total (not transport), to + be used in adjusting absorption + (i.e., reduced_abs = tot - nuscatt) + - Either total or transport should be present. + - Both can be available if one wants, but we should + use whatever corresponds to Library.correction (if P0: transport) + + Raises + ------ + ValueError + When the Library object is initialized with insufficient types of + cross sections for the Library. + + See also + -------- + Library.write_mg_library(...) + + """ + + error_flag = False + # Ensure absorption is present + if 'absorption' not in self.mgxs_types: + error_flag = True + msg = 'Absorption MGXS type is required but not provided.' + warn(msg) + # Ensure nu-scattering matrix is required + if 'nu-scatter matrix' not in self.mgxs_types: + error_flag = True + msg = 'Nu-Scatter Matrix MGXS type is required but not provided.' + warn(msg) + else: + # Ok, now see the status of scatter + if 'scatter matrix' not in self.mgxs_types: + # We dont have both nu-scatter and scatter, therefore + # we need total, and not transport. + if 'total' not in self.mgxs_types: + error_flag = True + msg = 'Total MGXS type is required if a ' \ + 'scattering matrix is not provided.' + warn(msg) + # Total or transport can be present, but if using + # self.correction=="P0", then we should use transport. + if (((self.correction is "P0") and + ('transport' not in self.mgxs_types))): + error_flag = True + msg = 'Transport MGXS type is required since a "P0" correction ' \ + 'is applied, but a Transport MGXS is not provided.' + warn(msg) + + if error_flag: + msg = "Invalid MGXS configuration encountered." + raise ValueError(msg) diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index ba9ba75b05..f9353f9cc7 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -122,12 +122,23 @@ class XSdata(object): Legendre polynomial form). Dict contains two keys: 'enable' and 'num_points'. 'enable' is a boolean and 'num_points' is the number of points to use, if 'enable' is True. + representation : {'isotropic', 'angle'} + Method used in generating the MGXS (isotropic or angle-dependent flux + weighting). num_azimuthal : int Number of equal width angular bins that the azimuthal angular domain is subdivided into. This only applies when ``representation`` is "angle". num_polar : int Number of equal width angular bins that the polar angular domain is subdivided into. This only applies when ``representation`` is "angle". + vector_shape : iterable of int + Dimensionality of vector multi-group cross sections (e.g., the total + cross section). The return result depends on the value of + ``representation``. + matrix_shape : iterable of int + Dimensionality of matrix multi-group cross sections (e.g., the + scattering matrix cross section). The return result depends on the + value of ``representation``. total : numpy.ndarray Group-wise total cross section ordered by increasing group index (i.e., fast to thermal). If ``representation`` is "isotropic", then the length @@ -173,7 +184,7 @@ class XSdata(object): azimuthal angles times the number of polar angles, with the inner-dimension being groups, intermediate-dimension being azimuthal angles and outer-dimension being the polar angles. - k_fission : numpy.ndarray + kappa_fission : numpy.ndarray Group-wise kappa-fission cross section ordered by increasing group index (i.e., fast to thermal). If ``representation`` is "isotropic", then the length of this list should equal the number of groups in the @@ -225,7 +236,7 @@ class XSdata(object): self._multiplicity = None self._fission = None self._nu_fission = None - self._k_fission = None + self._kappa_fission = None self._chi = None self._use_chi = None @@ -302,8 +313,8 @@ class XSdata(object): return self._nu_fission @property - def k_fission(self): - return self._k_fission + def kappa_fission(self): + return self._kappa_fission @property def chi(self): @@ -317,6 +328,24 @@ class XSdata(object): else: return self._order + @property + def vector_shape(self): + if self.representation is 'isotropic': + return (self.energy_groups.num_groups,) + elif self.representation is 'angle': + return (self.num_polar, self.num_azimuthal, + self.energy_groups.num_groups) + + @property + def matrix_shape(self): + if self.representation is 'isotropic': + return (self.energy_groups.num_groups, + self.energy_groups.num_groups) + elif self.representation is 'angle': + return (self.num_polar, self.num_azimuthal, + self.energy_groups.num_groups, + self.energy_groups.num_groups) + @name.setter def name(self, name): check_type('name for XSdata', name, basestring) @@ -326,6 +355,11 @@ class XSdata(object): def energy_groups(self, energy_groups): # Check validity of energy_groups check_type('energy_groups', energy_groups, openmc.mgxs.EnergyGroups) + + if energy_group.group_edges is None: + msg = 'Unable to assign an EnergyGroups object ' + \ + 'with uninitialized group edges' + raise ValueError(msg) self._energy_groups = energy_groups @representation.setter @@ -414,141 +448,196 @@ class XSdata(object): @total.setter def total(self, total): - if self._representation is 'isotropic': - shape = (self._energy_groups.num_groups,) - elif self._representation is 'angle': - shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups) + """This method sets the total cross section by performing a + deep-copy of the provided ndarray. + + Parameters + ---------- + total: ndarray + Array of group-wise cross sections to apply + + Raises + ------ + ValueError + When invalid parameters are passed. + """ + # check we have a numpy list check_type('total', total, np.ndarray, expected_iter_type=Real) - if total.shape == shape: - self._total = np.copy(total) - else: - msg = 'Shape of provided total "{0}" does not match shape ' \ - 'required, "{1}"'.format(total.shape, shape) - raise ValueError(msg) + # Check the dimensions of the data + check_value('total shape', total.shape, self.vector_shape) + + self._total = np.copy(total) @absorption.setter def absorption(self, absorption): - if self._representation is 'isotropic': - shape = (self._energy_groups.num_groups,) - elif self._representation is 'angle': - shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups) + """This method sets the absorption cross section by performing a + deep-copy of the provided ndarray. + + Parameters + ---------- + absorption: ndarray + Array of group-wise cross sections to apply + + Raises + ------ + ValueError + When invalid parameters are passed. + """ # check we have a numpy list check_type('absorption', absorption, np.ndarray, expected_iter_type=Real) - if absorption.shape == shape: - self._absorption = np.copy(absorption) - else: - msg = 'Shape of provided absorption "{0}" does not match shape ' \ - 'required, "{1}"'.format(absorption.shape, shape) - raise ValueError(msg) + # Check the dimensions of the data + check_value('absorption shape', absorption.shape, self.vector_shape) + + self._absorption = np.copy(absorption) @fission.setter def fission(self, fission): - if self._representation is 'isotropic': - shape = (self._energy_groups.num_groups,) - elif self._representation is 'angle': - shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups) - # check we have a numpy list - check_type('fission', fission, np.ndarray, expected_iter_type=Real) - if fission.shape == shape: - self._fission = np.copy(fission) - if np.sum(self._fission) > 0.0: - self._fissionable = True - else: - msg = 'Shape of provided fission "{0}" does not match shape ' \ - 'required, "{1}"'.format(fission.shape, shape) - raise ValueError(msg) + """This method sets the fission cross section by performing a + deep-copy of the provided ndarray. - @k_fission.setter - def k_fission(self, k_fission): - if self._representation is 'isotropic': - shape = (self._energy_groups.num_groups,) - elif self._representation is 'angle': - shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups) + Parameters + ---------- + fission: ndarray + Array of group-wise cross sections to apply + + Raises + ------ + ValueError + When invalid parameters are passed. + """ # check we have a numpy list - check_type('k_fission', k_fission, np.ndarray, + check_type('fission', fission, np.ndarray, expected_iter_type=Real) - if k_fission.shape == shape: - self._k_fission = np.copy(k_fission) - if np.sum(self._k_fission) > 0.0: - self._fissionable = True - else: - msg = 'Shape of provided k_fission "{0}" does not match ' \ - 'shape required, "{1}"'.format(k_fission.shape, shape) - raise ValueError(msg) + # Check the dimensions of the data + check_value('fission shape', fission.shape, self.vector_shape) + + self._fission = np.copy(fission) + + if np.sum(self._fission) > 0.0: + self._fissionable = True + + @kappa_fission.setter + def kappa_fission(self, kappa_fission): + """This method sets the kappa_fission cross section by performing a + deep-copy of the provided ndarray. + + Parameters + ---------- + kappa_fission: ndarray + Array of group-wise cross sections to apply + + Raises + ------ + ValueError + When invalid parameters are passed. + """ + # check we have a numpy list + check_type('kappa_fission', fission, np.ndarray, + expected_iter_type=Real) + # Check the dimensions of the data + check_value('kappa fission shape', kappa_fission.shape, + self.vector_shape) + + self._kappa_fission = np.copy(fission) + + if np.sum(self._kappa_fission) > 0.0: + self._fissionable = True @chi.setter def chi(self, chi): + """This method sets the chi cross section by performing a + deep-copy of the provided ndarray. + + Parameters + ---------- + chi: ndarray + Array of group-wise cross sections to apply + + Raises + ------ + ValueError + When invalid parameters are passed. + """ if self._use_chi is not None: if not self._use_chi: - msg = 'Providing chi when nu_fission already provided as matrix!' + msg = 'Providing chi when nu_fission already provided as a' \ + 'matrix' raise ValueError(msg) - if self._representation is 'isotropic': - shape = (self._energy_groups.num_groups,) - elif self._representation is 'angle': - shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups) # check we have a numpy list check_type('chi', chi, np.ndarray, expected_iter_type=Real) - if chi.shape == shape: - self._chi = np.copy(chi) - else: - msg = 'Shape of provided chi "{0}" does not match shape ' \ - 'required, "{1}"'.format(chi.shape, shape) - raise ValueError(msg) + # Check the dimensions of the data + check_value('chi shape', chi.shape, self.vector_shape) + + self._chi = np.copy(chi) + if self._use_chi is not None: self._use_chi = True @scatter.setter def scatter(self, scatter): - if self._representation is 'isotropic': - shape = (self.num_orders, self._energy_groups.num_groups, - self._energy_groups.num_groups) - max_depth = 3 - elif self._representation is 'angle': - shape = (self._num_polar, self._num_azimuthal, self.num_orders, - self._energy_groups.num_groups, - self._energy_groups.num_groups) - max_depth = 5 + """This method sets the scattering matrix cross sections + by performing a deep-copy of the provided ndarray. + + Parameters + ---------- + scatter : ndarrays + Array of group-wise cross sections to apply + + Raises + ------ + ValueError + When invalid parameters are passed. + """ # check we have a numpy list - check_iterable_type('scatter', scatter, expected_type=Real, - max_depth=max_depth) - if scatter.shape == shape: - self._scatter = np.copy(scatter) - else: - msg = 'Shape of provided scatter "{0}" does not match shape ' \ - 'required, "{1}"'.format(scatter.shape, shape) - raise ValueError(msg) + check_type('scatter', scatter, np.ndarray, expected_iter_type=Real, + max_depth=len(scatter.shape)) + # Check the dimensions of the data + check_value('scatter shape', scatter.shape, self.matrix_shape) + + self._scatter = np.copy(scatter) @multiplicity.setter def multiplicity(self, multiplicity): - if self._representation is 'isotropic': - shape = (self._energy_groups.num_groups, - self._energy_groups.num_groups) - max_depth = 2 - elif self._representation is 'angle': - shape = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups, - self._energy_groups.num_groups) - max_depth = 4 + """This method sets the scattering multiplicity matrix cross sections + by performing a deep-copy of the provided ndarray. + + Parameters + ---------- + multiplicity : ndarrays + Array of group-wise cross sections to apply + + Raises + ------ + ValueError + When invalid parameters are passed. + """ # check we have a numpy list - check_iterable_type('multiplicity', multiplicity, expected_type=Real, - max_depth=max_depth) - if multiplicity.shape == shape: - self._multiplicity = np.copy(multiplicity) - else: - msg = 'Shape of provided multiplicity "{0}" does not match shape' \ - ' required, "{1}"'.format(multiplicity.shape, shape) - raise ValueError(msg) + check_type('multiplicity', multiplicity, np.ndarray, + expected_iter_type=Real, max_depth=len(multiplicity.shape)) + # Check the dimensions of the data + check_value('multiplicity shape', multiplicity.shape, + self.matrix_shape) + + self._multiplicity = np.copy(multiplicity) @nu_fission.setter def nu_fission(self, nu_fission): + """This method sets the nu_fission cross section by performing a + deep-copy of the provided ndarray. + + Parameters + ---------- + nu_fission: ndarray + Array of group-wise cross sections to apply + + Raises + ------ + ValueError + When invalid parameters are passed. + """ # The NuFissionXS class does not have the capability to produce # a fission matrix and therefore if this path is pursued, we know # chi must be used. @@ -559,47 +648,54 @@ class XSdata(object): # chi already has been set. If not, we just check that this is OK # and set the use_chi flag accordingly - # First lets set our dimensions here since they get used repeatedly - # throughout this code. - if self._representation is 'isotropic': - shape_vec = (self._energy_groups.num_groups,) - shape_mat = (self._energy_groups.num_groups, - self._energy_groups.num_groups) - elif self._representation is 'angle': - shape_vec = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups) - shape_mat = (self._num_polar, self._num_azimuthal, - self._energy_groups.num_groups, - self._energy_groups.num_groups) - - # Begin by checking the case when chi has already been given and - # thus the rules for filling in nu_fission are set. - if self._use_chi is not None: - if self._use_chi: - shape = shape_vec - else: - shape = shape_mat - if nu_fission.shape != shape: - msg = 'Invalid Shape of Nu_fission!' - raise ValueError(msg) - else: - # Get shape of nu_fission to determine if we need chi or not - if nu_fission.shape == shape_vec: - self._use_chi = True - elif nu_fission.shape == shape_mat: - self._use_chi = False - else: - msg = 'Invalid Shape of Nu_fission!' - raise ValueError(msg) - - # check we have a numpy list + # First, check we have a numpy list check_type('nu_fission', nu_fission, np.ndarray, - expected_iter_type=Real) + expected_iter_type=Real, max_depth=len(nu_fission.shape)) + + if self._use_chi is not None: + # Check the dimensions of the data + if self._use_chi: + check_value('nu_fission shape', nu_fission.shape, + self.vector_shape) + else: + check_value('nu_fission shape', nu_fission.shape, + self.matrix_shape) + else: + # Make sure the dimensions are at least right + check_value('nu_fission shape', nu_fission.shape, + (self.vector_shape, self.matrix_shape)) + # Then find out which one we have so we can set use_chi + if nu_fission.shape == self.vector_shape: + self._use_chi = True + else: + self._use_chi = False + self._nu_fission = np.copy(nu_fission) if np.sum(self._nu_fission) > 0.0: self._fissionable = True - def set_total(self, total, subdomain, nuclide='sum', xs_type='macro'): + def set_total_mgxs(self, total, nuclide='total', xs_type='macro'): + """This method allows for an openmc.mgxs.TotalXS or + openmc.mgxs.TransportXS to be used to set the total cross section + for this XSdata object. + + Parameters + ---------- + total: {openmc.mgxs.TotalXS, openmc.mgxs.TransportXS} + MGXS Object containing the total or transport cross section + for the domain of interest. + nuclide : str + Individual nuclide (or 'total' if obtaining material-wise data) + to gather data for. Defaults to 'total'. + xs_type: {'macro', 'micro'} + Provide the macro or micro cross section in units of cm^-1 or + barns. Defaults to 'macro'. + + Raises + ------ + ValueError + When invalid parameters are passed. + """ if not isinstance(total, (openmc.mgxs.TotalXS, openmc.mgxs.TransportXS)): msg = 'Method must be passed an openmc.mgxs.TotalXS or ' \ @@ -607,59 +703,119 @@ class XSdata(object): raise TypeError(msg) # Make sure passed MGXS object contains correct group structure - if self.energy_groups != total.energy_groups: - msg = 'Group structure of provided data does not match' \ - ' group structure of XSdata object' - raise ValueError(msg) + check_value('energy_groups', total.energy_groups, [self.energy_groups]) + + # Make sure passed MGXS object has correct domain type + check_value('domain_type', total.domain_type, + ['universe', 'cell', 'material']) if self._representation is 'isotropic': - self._total = total.get_xs(subdomain=subdomains, nuclides=nuclide, - xs_type=xs_type) + self._total = total.get_xs(nuclides=nuclide, xs_type=xs_type) elif self._representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) - def set_absorption(self, absorption, subdomain, nuclide='sum', - xs_type='macro'): + def set_absorption_mgxs(self, absorption, nuclide='total', xs_type='macro'): + """This method allows for an openmc.mgxs.AbsorptionXS + to be used to set the absorption cross section for this XSdata object. + + Parameters + ---------- + absorption: openmc.mgxs.AbsorptionXS + MGXS Object containing the absorption cross section + for the domain of interest. + nuclide : str + Individual nuclide (or 'total' if obtaining material-wise data) + to gather data for. Defaults to 'total'. + xs_type: {'macro', 'micro'} + Provide the macro or micro cross section in units of cm^-1 or + barns. Defaults to 'macro'. + + Raises + ------ + ValueError + When invalid parameters are passed. + """ if not isinstance(absorption, openmc.mgxs.AbsorptionXS): msg = 'Method must be passed an openmc.mgxs.AbsorptionXS' raise TypeError(msg) # Make sure passed MGXS object contains correct group structure - if self.energy_groups != absorption.energy_groups: - msg = 'Group structure of provided data does not match' \ - ' group structure of XSdata object' - raise ValueError(msg) + check_value('energy_groups', absorption.energy_groups, + [self.energy_groups]) + + # Make sure passed MGXS object has correct domain type + check_value('domain_type', absorption.domain_type, + ['universe', 'cell', 'material']) if self._representation is 'isotropic': - self._absorption = absorption.get_xs(subdomains=subdomain, - nuclides=nuclide, + self._absorption = absorption.get_xs(nuclides=nuclide, xs_type=xs_type) elif self._representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) - def set_fission(self, fission, subdomain, nuclide='sum', xs_type='macro'): + def set_fission_mgxs(self, fission, nuclide='total', xs_type='macro'): + """This method allows for an openmc.mgxs.FissionXS + to be used to set the fission cross section for this XSdata object. + + Parameters + ---------- + fission: openmc.mgxs.FissionXS + MGXS Object containing the fission cross section + for the domain of interest. + nuclide : str + Individual nuclide (or 'total' if obtaining material-wise data) + to gather data for. Defaults to 'total'. + xs_type: {'macro', 'micro'} + Provide the macro or micro cross section in units of cm^-1 or + barns. Defaults to 'macro'. + + Raises + ------ + ValueError + When invalid parameters are passed. + """ if not isinstance(fission, openmc.mgxs.FissionXS): msg = 'Method must be passed an openmc.mgxs.FissionXS' raise TypeError(msg) # Make sure passed MGXS object contains correct group structure - if self.energy_groups != fission.energy_groups: - msg = 'Group structure of provided data does not match' \ - ' group structure of XSdata object' - raise ValueError(msg) + check_value('energy_groups', fission.energy_groups, + [self.energy_groups]) + + # Make sure passed MGXS object has correct domain type + check_value('domain_type', fission.domain_type, + ['universe', 'cell', 'material']) if self._representation is 'isotropic': - self._fission = fission.get_xs(subdomains=subdomain, - nuclides=nuclide, + self._fission = fission.get_xs(nuclides=nuclide, xs_type=xs_type) elif self._representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) - def set_nu_fission(self, nu_fission, subdomain, nuclide='sum', - xs_type='macro'): + def set_nu_fission_mgxs(self, nu_fission, nuclide='total', xs_type='macro'): + """This method allows for an openmc.mgxs.NuFissionXS + to be used to set the nu-fission cross section for this XSdata object. + + Parameters + ---------- + nu_fission: openmc.mgxs.NuFissionXS + MGXS Object containing the nu-fission cross section + for the domain of interest. + nuclide : str + Individual nuclide (or 'total' if obtaining material-wise data) + to gather data for. Defaults to 'total'. + xs_type: {'macro', 'micro'} + Provide the macro or micro cross section in units of cm^-1 or + barns. Defaults to 'macro'. + + Raises + ------ + ValueError + When invalid parameters are passed. + """ # The NuFissionXS class does not have the capability to produce # a fission matrix and therefore if this path is pursued, we know # chi must be used. @@ -668,14 +824,15 @@ class XSdata(object): raise TypeError(msg) # Make sure passed MGXS object contains correct group structure - if self.energy_groups != nu_fission.energy_groups: - msg = 'Group structure of provided data does not match' \ - ' group structure of XSdata object' - raise ValueError(msg) + check_value('energy_groups', nu_fission.energy_groups, + [self.energy_groups]) + + # Make sure passed MGXS object has correct domain type + check_value('domain_type', nu_fission.domain_type, + ['universe', 'cell', 'material']) if self._representation is 'isotropic': - self._nu_fission = nu_fission.get_xs(subdomains=subdomain, - nuclides=nuclide, + self._nu_fission = nu_fission.get_xs(nuclides=nuclide, xs_type=xs_type) elif self._representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' @@ -686,27 +843,68 @@ class XSdata(object): if np.sum(self._nu_fission) > 0.0: self._fissionable = True - def set_k_fission(self, k_fission, subdomain, nuclide='sum', - xs_type='macro'): + def set_kappa_fission_mgxs(self, k_fission, nuclide='total', + xs_type='macro'): + """This method allows for an openmc.mgxs.KappaFissionXS + to be used to set the kappa-fission cross section for this XSdata + object. + + Parameters + ---------- + kappa_fission: openmc.mgxs.KappaFissionXS + MGXS Object containing the kappa-fission cross section + for the domain of interest. + nuclide : str + Individual nuclide (or 'total' if obtaining material-wise data) + to gather data for. Defaults to 'total'. + xs_type: {'macro', 'micro'} + Provide the macro or micro cross section in units of cm^-1 or + barns. Defaults to 'macro'. + + Raises + ------ + ValueError + When invalid parameters are passed. + """ if not isinstance(k_fission, openmc.mgxs.KappaFissionXS): msg = 'Method must be passed an openmc.mgxs.KappaFissionXS' raise TypeError(msg) # Make sure passed MGXS object contains correct group structure - if self.energy_groups != k_fission.energy_groups: - msg = 'Group structure of provided data does not match' \ - ' group structure of XSdata object' - raise ValueError(msg) + check_value('energy_groups', k_fission.energy_groups, + [self.energy_groups]) + + # Make sure passed MGXS object has correct domain type + check_value('domain_type', k_fission.domain_type, + ['universe', 'cell', 'material']) if self._representation is 'isotropic': - self._k_fission = k_fission.get_xs(subdomains=subdomain, - nuclides=nuclide, - xs_type=xs_type) + self._kappa_fission = k_fission.get_xs(nuclides=nuclide, + xs_type=xs_type) elif self._representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) - def set_chi(self, chi, subdomain, nuclide='sum', xs_type='macro'): + def set_chi_mgxs(self, chi, nuclide='total', xs_type='macro'): + """This method allows for an openmc.mgxs.Chi + to be used to set chi for this XSdata object. + + Parameters + ---------- + chi: openmc.mgxs.Chi + MGXS Object containing chi for the domain of interest. + nuclide : str + Individual nuclide (or 'total' if obtaining material-wise data) + to gather data for. Defaults to 'total'. + xs_type: {'macro', 'micro'} + Provide the macro or micro cross section in units of cm^-1 or + barns. Defaults to 'macro'. + + Raises + ------ + ValueError + When invalid parameters are passed. + """ if self._use_chi is not None: if not self._use_chi: msg = 'Providing chi when nu_fission already provided as a ' \ @@ -718,14 +916,14 @@ class XSdata(object): raise TypeError(msg) # Make sure passed MGXS object contains correct group structure - if self.energy_groups != chi.energy_groups: - msg = 'Group structure of provided data does not match' \ - ' group structure of XSdata object' - raise ValueError(msg) + check_value('energy_groups', chi.energy_groups, [self.energy_groups]) + + # Make sure passed MGXS object has correct domain type + check_value('domain_type', chi.domain_type, + ['universe', 'cell', 'material']) if self._representation is 'isotropic': - self._chi = chi.get_xs(subdomains=subdomain, - nuclides=nuclide, + self._chi = chi.get_xs(nuclides=nuclide, xs_type=xs_type) elif self._representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' @@ -734,55 +932,102 @@ class XSdata(object): if self._use_chi is not None: self._use_chi = True - def set_scatter(self, scatter, subdomain, nuclide='sum', xs_type='macro'): + def set_scatter_mgxs(self, scatter, nuclide='total', xs_type='macro'): + """This method allows for an openmc.mgxs.ScatterMatrixXS + to be used to set the scatter matrix cross section for this XSdata + object. + + Parameters + ---------- + scatter: openmc.mgxs.ScatterMatrixXS + MGXS Object containing the scatter matrix cross section + for the domain of interest. + nuclide : str + Individual nuclide (or 'total' if obtaining material-wise data) + to gather data for. Defaults to 'total'. + xs_type: {'macro', 'micro'} + Provide the macro or micro cross section in units of cm^-1 or + barns. Defaults to 'macro'. + + Raises + ------ + ValueError + When invalid parameters are passed. + """ if not isinstance(scatter, openmc.mgxs.ScatterMatrixXS): msg = 'Method must be passed an openmc.mgxs.ScatterMatrixXS' raise TypeError(msg) # Make sure passed MGXS object contains correct group structure - if self.energy_groups != scatter.energy_groups: - msg = 'Group structure of provided data does not match' \ - ' group structure of XSdata object' - raise ValueError(msg) + check_value('energy_groups', scatter.energy_groups, + [self.energy_groups]) + + # Make sure passed MGXS object has correct domain type + check_value('domain_type', scatter.domain_type, + ['universe', 'cell', 'material']) if self._representation is 'isotropic': - self._scatter = scatter.get_xs(subdomains=subdomain, - nuclides=nuclide, + self._scatter = scatter.get_xs(nuclides=nuclide, xs_type=xs_type) elif self._representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) - def set_multiplicity(self, multiplicity, scatter, subdomain, - nuclide='sum', xs_type='macro'): - if not isinstance(multiplicity, openmc.mgxs.ScatterMatrixXS): + def set_multiplicity_mgxs(self, nuscatter, scatter, nuclide='total', + xs_type='macro'): + """This method allows for an openmc.mgxs.NuScatterMatrixXS and + openmc.mgxs.ScatterMatrixXS to be used to set the scattering + multiplicity for this XSdata object. + + Parameters + ---------- + nuscatter: openmc.mgxs.NuScatterMatrixXS + MGXS Object containing the nu-scattering matrix cross section + for the domain of interest. + scatter: openmc.mgxs.ScatterMatrixXS + MGXS Object containing the scattering matrix cross section + for the domain of interest. + nuclide : str + Individual nuclide (or 'total' if obtaining material-wise data) + to gather data for. Defaults to 'total'. + xs_type: {'macro', 'micro'} + Provide the macro or micro cross section in units of cm^-1 or + barns. Defaults to 'macro'. + + Raises + ------ + ValueError + When invalid parameters are passed. + """ + if not isinstance(nuscatter, openmc.mgxs.NuScatterMatrixXS): msg = 'Method must be passed an openmc.mgxs.ScatterMatrixXS' raise TypeError(msg) if not isinstance(scatter, openmc.mgxs.ScatterMatrixXS): msg = 'Method must be passed an openmc.mgxs.ScatterMatrixXS' raise TypeError(msg) - # Make sure passed MGXS objects contain correct group structure - if self.energy_groups != multiplicity.energy_groups: - msg = 'Group structure of "multiplicity" does not match' \ - ' group structure of XSdata object' - raise ValueError(msg) - if self.energy_groups != scatter.energy_groups: - msg = 'Group structure of "scatter" does not match' \ - ' group structure of XSdata object' - raise ValueError(msg) + # Make sure passed MGXS object contains correct group structure + check_value('energy_groups', nuscatter.energy_groups, + [self.energy_groups]) + check_value('energy_groups', scatter.energy_groups, + [self.energy_groups]) + + # Make sure passed MGXS object has correct domain type + check_value('domain_type', nuscatter.domain_type, + ['universe', 'cell', 'material']) + check_value('domain_type', scatter.domain_type, + ['universe', 'cell', 'material']) if self._representation is 'isotropic': - nuscatt = multiplicity.get_xs(subdomains=subdomain, - nuclides=nuclide, - xs_type=xs_type) - scatt = scatter.get_xs(subdomains=subdomain, - nuclides=nuclide, + nuscatt = nuscatter.get_xs(nuclides=nuclide, + xs_type=xs_type) + scatt = scatter.get_xs(nuclides=nuclide, xs_type=xs_type) self._multiplicity = np.divide(nuscatt, scatt) elif self._representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) + self._multiplicity = np.nan_to_num(self._multiplicity) def _get_xsdata_xml(self): element = ET.Element('xsdata') @@ -858,9 +1103,9 @@ class XSdata(object): subelement = ET.SubElement(element, 'fission') subelement.text = ndarray_to_string(self._fission) - if self._k_fission is not None: + if self._kappa_fission is not None: subelement = ET.SubElement(element, 'k_fission') - subelement.text = ndarray_to_string(self._k_fission) + subelement.text = ndarray_to_string(self._kappa_fission) if self._nu_fission is not None: subelement = ET.SubElement(element, 'nu_fission') @@ -947,10 +1192,8 @@ class MGXSLibrary(object): """ - if not isinstance(xsdatas, Iterable): - msg = 'Unable to create OpenMC xsdatas.xml file from "{0}" which' \ - ' is not iterable'.format(xsdatas) - raise ValueError(msg) + # Check we have an iterable of XSdatas + check_iterable_type('xsdatas', xsdatas, XSdata) for xsdata in xsdatas: self.add_xsdata(xsdata) From 5e910498b39b12ab9fe7ae5ef4a14a80a28940d7 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 11 May 2016 21:39:56 -0500 Subject: [PATCH 526/650] Check for non-matching periodic boundary conditions --- src/geometry.F90 | 4 ++-- src/input_xml.F90 | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/geometry.F90 b/src/geometry.F90 index 9f77817387..62c5036a9c 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -432,7 +432,7 @@ contains ! Score surface currents since reflection causes the direction of the ! particle to change -- artificially move the particle slightly back in - ! case the surface crossing in coincident with a mesh boundary + ! case the surface crossing is coincident with a mesh boundary if (active_current_tallies % size() > 0) then p % coord(1) % xyz = p % coord(1) % xyz - TINY_BIT * p % coord(1) % uvw @@ -488,7 +488,7 @@ contains ! Score surface currents since reflection causes the direction of the ! particle to change -- artificially move the particle slightly back in - ! case the surface crossing in coincident with a mesh boundary + ! case the surface crossing is coincident with a mesh boundary if (active_current_tallies % size() > 0) then p % coord(1) % xyz = p % coord(1) % xyz - TINY_BIT * p % coord(1) % uvw diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 9e49e3c349..242d3459a6 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -1630,6 +1630,14 @@ contains call fatal_error("Periodic boundary condition applied to & &non-planar surface.") end select + + ! Make sure opposite surface is also periodic + associate (surf => surfaces(i) % obj) + if (surfaces(surf % opposite) % obj % bc /= BC_PERIODIC) then + call fatal_error("Could not find matching surface for periodic & + &boundary on surface " // trim(to_str(surf % id)) // ".") + end if + end associate end if end do From 6bbf83a9b6010bcabc8467d16d1c9013164b431e Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Thu, 12 May 2016 05:16:21 -0400 Subject: [PATCH 527/650] Revised docstrings and added some check_type commands instead of isinstance --- openmc/mgxs/library.py | 78 ++++++++-------- openmc/mgxs_library.py | 203 +++++++++++++++++++---------------------- 2 files changed, 134 insertions(+), 147 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 991a98f62c..82b7616735 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -17,7 +17,7 @@ if sys.version_info[0] >= 3: class Library(object): - '''A multi-group cross section library for some energy group structure. + """A multi-group cross section library for some energy group structure. This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated @@ -79,7 +79,7 @@ class Library(object): Whether or not the Library's tallies use SciPy's LIL sparse matrix format for compressed data storage - ''' + """ def __init__(self, openmc_geometry, by_nuclide=False, mgxs_types=None, name=''): @@ -300,7 +300,7 @@ class Library(object): @sparse.setter def sparse(self, sparse): - '''Convert tally data from NumPy arrays to SciPy list of lists (LIL) + """Convert tally data from NumPy arrays to SciPy list of lists (LIL) sparse matrices, and vice versa. This property may be used to reduce the amount of data in memory during @@ -308,7 +308,7 @@ class Library(object): matrices internally within the Tally object. All tally data access properties and methods will return data as a dense NumPy array. - ''' + """ cv.check_type('sparse', sparse, bool) @@ -321,14 +321,14 @@ class Library(object): self._sparse = sparse def build_library(self): - '''Initialize MGXS objects in each domain and for each reaction type + """Initialize MGXS objects in each domain and for each reaction type in the library. This routine will populate the all_mgxs instance attribute dictionary with MGXS subclass objects keyed by each domain ID (e.g., Material IDs) and cross section type (e.g., 'nu-fission', 'total', etc.). - ''' + """ # Initialize MGXS for each domain and mgxs type and store in dictionary for domain in self.domains: @@ -351,7 +351,7 @@ class Library(object): self.all_mgxs[domain.id][mgxs_type] = mgxs def add_to_tallies_file(self, tallies_file, merge=True): - '''Add all tallies from all MGXS objects to a tallies file. + """Add all tallies from all MGXS objects to a tallies file. NOTE: This assumes that :meth:`Library.build_library` has been called @@ -364,7 +364,7 @@ class Library(object): Indicate whether tallies should be merged when possible. Defaults to True. - ''' + """ cv.check_type('tallies_file', tallies_file, openmc.Tallies) @@ -376,7 +376,7 @@ class Library(object): tallies_file.append(tally, merge=merge) def load_from_statepoint(self, statepoint): - '''Extracts tallies in an OpenMC StatePoint with the data needed to + """Extracts tallies in an OpenMC StatePoint with the data needed to compute multi-group cross sections. This method is needed to compute cross section data from tallies @@ -395,7 +395,7 @@ class Library(object): When this method is called with a statepoint that has not been linked with a summary object. - ''' + """ cv.check_type('statepoint', statepoint, openmc.StatePoint) @@ -419,7 +419,7 @@ class Library(object): mgxs.sparse = self.sparse def get_mgxs(self, domain, mgxs_type): - '''Return the MGXS object for some domain and reaction rate type. + """Return the MGXS object for some domain and reaction rate type. This routine searches the library for an MGXS object for the spatial domain and reaction rate type requested by the user. @@ -444,7 +444,7 @@ class Library(object): If no MGXS object can be found for the requested domain or multi-group cross section type - ''' + """ if self.domain_type == 'material': cv.check_type('domain', domain, (openmc.Material, Integral)) @@ -474,7 +474,7 @@ class Library(object): return self.all_mgxs[domain_id][mgxs_type] def get_condensed_library(self, coarse_groups): - '''Construct an energy-condensed version of this library. + """Construct an energy-condensed version of this library. This routine condenses each of the multi-group cross sections in the library to a coarse energy group structure. NOTE: This routine must @@ -501,7 +501,7 @@ class Library(object): -------- MGXS.get_condensed_xs(coarse_groups) - ''' + """ if self.sp_filename is None: msg = 'Unable to get a condensed coarse group cross section ' \ @@ -530,7 +530,7 @@ class Library(object): return condensed_library def get_subdomain_avg_library(self): - '''Construct a subdomain-averaged version of this library. + """Construct a subdomain-averaged version of this library. This routine averages each multi-group cross section across distribcell instances. The method performs spatial homogenization to compute the @@ -553,7 +553,7 @@ class Library(object): -------- MGXS.get_subdomain_avg_xs(subdomains) - ''' + """ if self.sp_filename is None: msg = 'Unable to get a subdomain-averaged cross section ' \ @@ -581,7 +581,7 @@ class Library(object): def build_hdf5_store(self, filename='mgxs.h5', directory='mgxs', subdomains='all', nuclides='all', xs_type='macro', row_column='inout'): - '''Export the multi-group cross section library to an HDF5 binary file. + """Export the multi-group cross section library to an HDF5 binary file. This method constructs an HDF5 file which stores the library's multi-group cross section data. The data is stored in a hierarchy of @@ -624,7 +624,7 @@ class Library(object): -------- MGXS.build_hdf5_store(filename, directory, xs_type) - ''' + """ if self.sp_filename is None: msg = 'Unable to export multi-group cross section library ' \ @@ -659,7 +659,7 @@ class Library(object): nuclides=nuclides, row_column=row_column) def dump_to_file(self, filename='mgxs', directory='mgxs'): - '''Store this Library object in a pickle binary file. + """Store this Library object in a pickle binary file. Parameters ---------- @@ -672,7 +672,7 @@ class Library(object): -------- Library.load_from_file(filename, directory) - ''' + """ cv.check_type('filename', filename, basestring) cv.check_type('directory', directory, basestring) @@ -689,7 +689,7 @@ class Library(object): @staticmethod def load_from_file(filename='mgxs', directory='mgxs'): - '''Load a Library object from a pickle binary file. + """Load a Library object from a pickle binary file. Parameters ---------- @@ -707,7 +707,7 @@ class Library(object): -------- Library.dump_to_file(mgxs_lib, filename, directory) - ''' + """ cv.check_type('filename', filename, basestring) cv.check_type('directory', directory, basestring) @@ -725,7 +725,7 @@ class Library(object): def write_mg_library(self, xs_type='macro', domain_names=None, xs_ids=None, filename='mg_cross_sections', directory='./', return_names=True): - '''Creates a cross-section data library file for the Multi-Group + """Creates a cross-section data library file for the Multi-Group mode of OpenMC. Parameters @@ -768,7 +768,7 @@ class Library(object): -------- Library.dump_to_file(mgxs_lib, filename, directory) - ''' + """ # Check to ensure the Library contains the correct # multi-group cross section types @@ -904,10 +904,11 @@ class Library(object): # accounted for approximately by using an adjusted # absorption cross section. if 'total' in self.mgxs_types: - xsdata.absorption = \ + xsdata._absorption = \ np.subtract(xsdata.total, np.sum(xsdata.scatter[0, :, :], axis=1)) + xsdatas.append(xsdata) # Add XSdatas to file @@ -925,24 +926,20 @@ class Library(object): a MGXS Library for OpenMC's Multi-Group mode via the `Library.write_mg_library` method. The rules to check include: - - Fission is not required as a fixed source problem could be - the target. - - Absorption is required. + - Either total or transport should be present. + - Both can be available if one wants, but we should + use whatever corresponds to Library.correction (if P0: transport) + - Absorption and total (or transport) are required. + - A nu-fission cross section and chi values are not required as a + fixed source problem could be the target. + - Fission and kappa-fission are not required as they are only + needed to support tallies the user may wish to request. - A nu-scatter matrix is required. - Having both nu-scatter (of any order) and scatter (at least isotropic) matrices is preferred - If only nu-scatter, need total (not transport), to be used in adjusting absorption (i.e., reduced_abs = tot - nuscatt) - - Either total or transport should be present. - - Both can be available if one wants, but we should - use whatever corresponds to Library.correction (if P0: transport) - - Raises - ------ - ValueError - When the Library object is initialized with insufficient types of - cross sections for the Library. See also -------- @@ -979,7 +976,12 @@ class Library(object): msg = 'Transport MGXS type is required since a "P0" correction ' \ 'is applied, but a Transport MGXS is not provided.' warn(msg) + elif (((self.correction is None) and + ('total' not in self.mgxs_types))): + error_flag = True + msg = 'Total MGXS type is required, but not provided.' + warn(msg) if error_flag: - msg = "Invalid MGXS configuration encountered." + msg = 'Invalid MGXS configuration encountered.' raise ValueError(msg) diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index f9353f9cc7..29d0bfdd7d 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -449,17 +449,18 @@ class XSdata(object): @total.setter def total(self, total): """This method sets the total cross section by performing a - deep-copy of the provided ndarray. + deep-copy of the provided ndarray. If the angular + representation is "isotropic" the shape of the input array + must be the number of energy groups. If the angular + representation is "angle" then the shape of the input + array must be the number of polar angles, number azimuthal + angles and energy groups. Parameters ---------- total: ndarray Array of group-wise cross sections to apply - Raises - ------ - ValueError - When invalid parameters are passed. """ # check we have a numpy list @@ -472,18 +473,20 @@ class XSdata(object): @absorption.setter def absorption(self, absorption): """This method sets the absorption cross section by performing a - deep-copy of the provided ndarray. + deep-copy of the provided ndarray. If the angular + representation is "isotropic" the shape of the input array + must be the number of energy groups. If the angular + representation is "angle" then the shape of the input + array must be the number of polar angles, number azimuthal + angles and energy groups. Parameters ---------- absorption: ndarray Array of group-wise cross sections to apply - Raises - ------ - ValueError - When invalid parameters are passed. """ + # check we have a numpy list check_type('absorption', absorption, np.ndarray, expected_iter_type=Real) @@ -495,18 +498,20 @@ class XSdata(object): @fission.setter def fission(self, fission): """This method sets the fission cross section by performing a - deep-copy of the provided ndarray. + deep-copy of the provided ndarray. If the angular + representation is "isotropic" the shape of the input array + must be the number of energy groups. If the angular + representation is "angle" then the shape of the input + array must be the number of polar angles, number azimuthal + angles and energy groups. Parameters ---------- fission: ndarray Array of group-wise cross sections to apply - Raises - ------ - ValueError - When invalid parameters are passed. """ + # check we have a numpy list check_type('fission', fission, np.ndarray, expected_iter_type=Real) @@ -521,18 +526,20 @@ class XSdata(object): @kappa_fission.setter def kappa_fission(self, kappa_fission): """This method sets the kappa_fission cross section by performing a - deep-copy of the provided ndarray. + deep-copy of the provided ndarray. If the angular + representation is "isotropic" the shape of the input array + must be the number of energy groups. If the angular + representation is "angle" then the shape of the input + array must be the number of polar angles, number azimuthal + angles and energy groups. Parameters ---------- kappa_fission: ndarray Array of group-wise cross sections to apply - Raises - ------ - ValueError - When invalid parameters are passed. """ + # check we have a numpy list check_type('kappa_fission', fission, np.ndarray, expected_iter_type=Real) @@ -548,18 +555,20 @@ class XSdata(object): @chi.setter def chi(self, chi): """This method sets the chi cross section by performing a - deep-copy of the provided ndarray. + deep-copy of the provided ndarray. If the angular + representation is "isotropic" the shape of the input array + must be the number of energy groups. If the angular + representation is "angle" then the shape of the input + array must be the number of polar angles, number azimuthal + angles and energy groups. Parameters ---------- chi: ndarray - Array of group-wise cross sections to apply + Array of group-wise chi values to apply - Raises - ------ - ValueError - When invalid parameters are passed. """ + if self._use_chi is not None: if not self._use_chi: msg = 'Providing chi when nu_fission already provided as a' \ @@ -580,40 +589,50 @@ class XSdata(object): def scatter(self, scatter): """This method sets the scattering matrix cross sections by performing a deep-copy of the provided ndarray. + If the angular representation is "isotropic" the shape of + the input array must be the number of scattering orders, the + number of energy groups, and the number of energy groups. If + the angular representation is "angle" then the shape of the input + array must be the number of polar angles, number azimuthal + angles, number of scattering orders, energy groups, and energy groups. Parameters ---------- scatter : ndarrays - Array of group-wise cross sections to apply + Array of cross sections to apply - Raises - ------ - ValueError - When invalid parameters are passed. """ + # check we have a numpy list check_type('scatter', scatter, np.ndarray, expected_iter_type=Real, max_depth=len(scatter.shape)) # Check the dimensions of the data - check_value('scatter shape', scatter.shape, self.matrix_shape) + check_value('scatter shape', scatter.shape, self.pn_matrix_shape) self._scatter = np.copy(scatter) @multiplicity.setter def multiplicity(self, multiplicity): """This method sets the scattering multiplicity matrix cross sections - by performing a deep-copy of the provided ndarray. + by performing a deep-copy of the provided ndarray. Multiplicity, + in OpenMC parlance, is a factor used to account for the production + of neutrons introduced by scattering multiplication reactions, i.e., + (n,xn) events. In this sense, the multiplication matrix is simply + defined as the ratio of the nu-scatter and scatter matrices. + If the angular representation is "isotropic" the shape of + the input array must be the number of energy groups and the number + of energy groups. If the angular representation is "angle" then the + shape of the input array must be the number of polar angles, + number azimuthal angles, number of scattering orders, energy groups, + and energy groups. Parameters ---------- multiplicity : ndarrays - Array of group-wise cross sections to apply + Array of scattering multiplications to apply - Raises - ------ - ValueError - When invalid parameters are passed. """ + # check we have a numpy list check_type('multiplicity', multiplicity, np.ndarray, expected_iter_type=Real, max_depth=len(multiplicity.shape)) @@ -626,18 +645,20 @@ class XSdata(object): @nu_fission.setter def nu_fission(self, nu_fission): """This method sets the nu_fission cross section by performing a - deep-copy of the provided ndarray. + deep-copy of the provided ndarray. If the angular + representation is "isotropic" the shape of the input array + must be the number of energy groups. If the angular + representation is "angle" then the shape of the input + array must be the number of polar angles, number azimuthal + angles and energy groups. Parameters ---------- nu_fission: ndarray Array of group-wise cross sections to apply - Raises - ------ - ValueError - When invalid parameters are passed. """ + # The NuFissionXS class does not have the capability to produce # a fission matrix and therefore if this path is pursued, we know # chi must be used. @@ -691,16 +712,10 @@ class XSdata(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. - Raises - ------ - ValueError - When invalid parameters are passed. """ - if not isinstance(total, (openmc.mgxs.TotalXS, - openmc.mgxs.TransportXS)): - msg = 'Method must be passed an openmc.mgxs.TotalXS or ' \ - 'openmc.mgxs.TransportXS object' - raise TypeError(msg) + + check_type('total', total, (openmc.mgxs.TotalXS, + openmc.mgxs.TransportXS)) # Make sure passed MGXS object contains correct group structure check_value('energy_groups', total.energy_groups, [self.energy_groups]) @@ -715,7 +730,8 @@ class XSdata(object): msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) - def set_absorption_mgxs(self, absorption, nuclide='total', xs_type='macro'): + def set_absorption_mgxs(self, absorption, nuclide='total', + xs_type='macro'): """This method allows for an openmc.mgxs.AbsorptionXS to be used to set the absorption cross section for this XSdata object. @@ -731,14 +747,9 @@ class XSdata(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. - Raises - ------ - ValueError - When invalid parameters are passed. """ - if not isinstance(absorption, openmc.mgxs.AbsorptionXS): - msg = 'Method must be passed an openmc.mgxs.AbsorptionXS' - raise TypeError(msg) + + check_type('absorption', absorption, openmc.mgxs.AbsorptionXS) # Make sure passed MGXS object contains correct group structure check_value('energy_groups', absorption.energy_groups, @@ -771,14 +782,9 @@ class XSdata(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. - Raises - ------ - ValueError - When invalid parameters are passed. """ - if not isinstance(fission, openmc.mgxs.FissionXS): - msg = 'Method must be passed an openmc.mgxs.FissionXS' - raise TypeError(msg) + + check_type('fission', fission, openmc.mgxs.FissionXS) # Make sure passed MGXS object contains correct group structure check_value('energy_groups', fission.energy_groups, @@ -795,7 +801,8 @@ class XSdata(object): msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) - def set_nu_fission_mgxs(self, nu_fission, nuclide='total', xs_type='macro'): + def set_nu_fission_mgxs(self, nu_fission, nuclide='total', + xs_type='macro'): """This method allows for an openmc.mgxs.NuFissionXS to be used to set the nu-fission cross section for this XSdata object. @@ -811,17 +818,12 @@ class XSdata(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. - Raises - ------ - ValueError - When invalid parameters are passed. """ + # The NuFissionXS class does not have the capability to produce # a fission matrix and therefore if this path is pursued, we know # chi must be used. - if not isinstance(nu_fission, openmc.mgxs.NuFissionXS): - msg = 'Method must be passed an openmc.mgxs.NuFissionXS' - raise TypeError(msg) + check_type('nu_fission', nu_fission, openmc.mgxs.NuFissionXS) # Make sure passed MGXS object contains correct group structure check_value('energy_groups', nu_fission.energy_groups, @@ -861,14 +863,9 @@ class XSdata(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. - Raises - ------ - ValueError - When invalid parameters are passed. """ - if not isinstance(k_fission, openmc.mgxs.KappaFissionXS): - msg = 'Method must be passed an openmc.mgxs.KappaFissionXS' - raise TypeError(msg) + + check_type('k_fission', k_fission, openmc.mgxs.KappaFissionXS) # Make sure passed MGXS object contains correct group structure check_value('energy_groups', k_fission.energy_groups, @@ -900,20 +897,15 @@ class XSdata(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. - Raises - ------ - ValueError - When invalid parameters are passed. """ + if self._use_chi is not None: if not self._use_chi: msg = 'Providing chi when nu_fission already provided as a ' \ 'matrix!' raise ValueError(msg) - if not isinstance(chi, openmc.mgxs.Chi): - msg = 'Method must be passed an openmc.mgxs.Chi' - raise TypeError(msg) + check_type('chi', chi, openmc.mgxs.Chi) # Make sure passed MGXS object contains correct group structure check_value('energy_groups', chi.energy_groups, [self.energy_groups]) @@ -949,14 +941,9 @@ class XSdata(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. - Raises - ------ - ValueError - When invalid parameters are passed. """ - if not isinstance(scatter, openmc.mgxs.ScatterMatrixXS): - msg = 'Method must be passed an openmc.mgxs.ScatterMatrixXS' - raise TypeError(msg) + + check_type('scatter', scatter, openmc.mgxs.ScatterMatrixXS) # Make sure passed MGXS object contains correct group structure check_value('energy_groups', scatter.energy_groups, @@ -967,8 +954,9 @@ class XSdata(object): ['universe', 'cell', 'material']) if self._representation is 'isotropic': - self._scatter = scatter.get_xs(nuclides=nuclide, - xs_type=xs_type) + self._scatter = np.array([scatter.get_xs(nuclides=nuclide, + xs_type=xs_type)]) + elif self._representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) @@ -977,7 +965,11 @@ class XSdata(object): xs_type='macro'): """This method allows for an openmc.mgxs.NuScatterMatrixXS and openmc.mgxs.ScatterMatrixXS to be used to set the scattering - multiplicity for this XSdata object. + multiplicity for this XSdata object. Multiplicity, + in OpenMC parlance, is a factor used to account for the production + of neutrons introduced by scattering multiplication reactions, i.e., + (n,xn) events. In this sense, the multiplication matrix is simply + defined as the ratio of the nu-scatter and scatter matrices. Parameters ---------- @@ -994,17 +986,10 @@ class XSdata(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. - Raises - ------ - ValueError - When invalid parameters are passed. """ - if not isinstance(nuscatter, openmc.mgxs.NuScatterMatrixXS): - msg = 'Method must be passed an openmc.mgxs.ScatterMatrixXS' - raise TypeError(msg) - if not isinstance(scatter, openmc.mgxs.ScatterMatrixXS): - msg = 'Method must be passed an openmc.mgxs.ScatterMatrixXS' - raise TypeError(msg) + + check_type('nuscatter', nuscatter, openmc.mgxs.NuScatterMatrixXS) + check_type('scatter', scatter, openmc.mgxs.ScatterMatrixXS) # Make sure passed MGXS object contains correct group structure check_value('energy_groups', nuscatter.energy_groups, From 17f4927e8b010a8b59606d0050767de0306ad640 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Thu, 12 May 2016 16:32:40 -0400 Subject: [PATCH 528/650] Added new NuTransportXS class --- openmc/mgxs/mgxs.py | 72 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 68 insertions(+), 4 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index cc192855ba..3194df2bc7 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -22,6 +22,7 @@ if sys.version_info[0] >= 3: # Supported cross section types MGXS_TYPES = ['total', 'transport', + 'nu-transport', 'absorption', 'capture', 'fission', @@ -333,7 +334,7 @@ class MGXS(object): Parameters ---------- - mgxs_type : {'total', 'transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'chi'} + mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'chi'} The type of multi-group cross section object to return domain : openmc.Material or openmc.Cell or openmc.Universe The domain for spatial homogenization @@ -362,6 +363,8 @@ class MGXS(object): mgxs = TotalXS(domain, domain_type, energy_groups) elif mgxs_type == 'transport': mgxs = TransportXS(domain, domain_type, energy_groups) + elif mgxs_type == 'nu-transport': + mgxs = NuTransportXS(domain, domain_type, energy_groups) elif mgxs_type == 'absorption': mgxs = AbsorptionXS(domain, domain_type, energy_groups) elif mgxs_type == 'capture': @@ -1526,13 +1529,29 @@ class TotalXS(MGXS): class TransportXS(MGXS): - """A transport-corrected total multi-group cross section.""" + """A transport-corrected total multi-group cross section. + + Attributes + ---------- + use_nu : bool + Whether or not to account for scattering multiplicity in the + correction. If False, a "scatter-1" score is used (default); + if True, a "nu-scatter-1" score is used. This should be + set to False if using a ScatterMatrixXS and True if using + a NuScatterMatrixXS to preserve neutron balance. + + """ def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): super(TransportXS, self).__init__(domain, domain_type, groups, by_nuclide, name) self._rxn_type = 'transport' + self._use_nu = False + + @property + def use_nu(self): + return self._use_nu @property def tallies(self): @@ -1548,9 +1567,14 @@ class TransportXS(MGXS): if self._tallies is None: # Create a list of scores for each Tally to be created - scores = ['flux', 'total', 'scatter-1'] + scores = ['flux', 'total'] + if self.use_nu: + scores.append('nu-scatter-1') + else: + scores.append('scatter-1') + estimator = 'analog' - keys = scores + keys = ['flux', 'total', 'scatter-1'] # Create the non-domain specific Filters for the Tallies group_edges = self.energy_groups.group_edges @@ -1574,6 +1598,46 @@ class TransportXS(MGXS): return self._rxn_rate_tally +class NuTransportXS(TransportXS): + """A transport-corrected total multi-group cross section which + accounts for neutron multiplicity in scattering reactions.""" + + def __init__(self, domain=None, domain_type=None, + groups=None, by_nuclide=False, name=''): + super(NuTransportXS, self).__init__(domain, domain_type, + groups, by_nuclide, name) + self._rxn_type = 'nu-transport' + + @property + def tallies(self): + """Construct the OpenMC tallies needed to compute this cross section. + + This method constructs three analog tallies to compute the 'flux', + 'total' and 'nu-scatter-1' reaction rates in the spatial domain and + energy groups of interest. + + """ + + # Instantiate tallies if they do not exist + if self._tallies is None: + + # Create a list of scores for each Tally to be created + scores = ['flux', 'total', 'nu-scatter-1'] + keys = ['flux', 'total', 'scatter-1'] + estimator = 'analog' + + # Create the non-domain specific Filters for the Tallies + group_edges = self.energy_groups.group_edges + energy_filter = openmc.Filter('energy', group_edges) + energyout_filter = openmc.Filter('energyout', group_edges) + filters = [[energy_filter], [energy_filter], [energyout_filter]] + + # Initialize the Tallies + self._create_tallies(scores, filters, keys, estimator) + + return self._tallies + + class AbsorptionXS(MGXS): """An absorption multi-group cross section.""" From 9e843de1bd7bc00ce3c5edd11bc5523761c8e385 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Thu, 12 May 2016 20:13:27 -0400 Subject: [PATCH 529/650] Partial refactor of MGXS subclasses --- openmc/mgxs/mgxs.py | 445 ++++++++++---------------------------------- 1 file changed, 95 insertions(+), 350 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 3194df2bc7..89f12d5edf 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -215,10 +215,50 @@ class MGXS(object): @property def tallies(self): + """Construct the OpenMC tallies needed to compute the cross section.""" + + # Instantiate tallies if they do not exist + if self._tallies is None: + + # Initialize a collection of Tallies + self._tallies = OrderedDict() + + # Create a domain Filter object + domain_filter = openmc.Filter(self.domain_type, self.domain.id) + + # Create each Tally needed to compute the multi group cross section + for score, key, filters in zip(self.scores, self.keys, self.filters): + self.tallies[key] = openmc.Tally(name=self.name) + self.tallies[key].scores = [score] + self.tallies[key].estimator = self.estimator + self.tallies[key].filters = [domain_filter] + + # If a tally trigger was specified, add it to each tally + if self.tally_trigger: + trigger_clone = copy.deepcopy(self.tally_trigger) + trigger_clone.scores = [score] + self.tallies[key].triggers.append(trigger_clone) + + # Add non-domain specific Filters (e.g., 'energy') to the Tally + for add_filter in filters: + self.tallies[key].filters.append(add_filter) + + # If this is a by-nuclide cross-section, add nuclides to Tally + if self.by_nuclide and score != 'flux': + all_nuclides = self.get_all_nuclides() + for nuclide in all_nuclides: + self.tallies[key].nuclides.append(nuclide) + else: + self.tallies[key].nuclides.append('total') + return self._tallies @property def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + self._rxn_rate_tally = self.tallies[self.rxn_type] + self._rxn_rate_tally.sparse = self.sparse + return self._rxn_rate_tally @property @@ -263,6 +303,24 @@ class MGXS(object): def derived(self): return self._derived + @property + def scores(self): + return ['flux', self.rxn_type] + + @property + def filters(self): + group_edges = self.energy_groups.group_edges + energy_filter = openmc.Filter('energy', group_edges) + return [[energy_filter] * len(self.scores)] + + @property + def tally_keys(self): + return self.scores + + @property + def estimator(self): + return 'tracklength' + @name.setter def name(self, name): cv.check_type('name', name, basestring) @@ -504,63 +562,6 @@ class MGXS(object): return densities - def _create_tallies(self, scores, all_filters, keys, estimator): - """Instantiates tallies needed to compute the multi-group cross section. - - This is a helper method for MGXS subclasses to create tallies - for input file generation. The tallies are stored in the tallies dict. - This method is called by each subclass' tallies property getter - which define the parameters given to this parent class method. - - Parameters - ---------- - scores : Iterable of str - Scores for each tally - all_filters : Iterable of tuple of openmc.Filter - Tuples of non-spatial domain filters for each tally - keys : Iterable of str - Key string used to store each tally in the tallies dictionary - estimator : {'analog', 'tracklength'} - Type of estimator to use for each tally - - """ - - cv.check_iterable_type('scores', scores, basestring) - cv.check_length('scores', scores, len(keys)) - cv.check_iterable_type('filters', all_filters, openmc.Filter, 1, 2) - cv.check_type('keys', keys, Iterable, basestring) - cv.check_value('estimator', estimator, ['analog', 'tracklength']) - - self._tallies = OrderedDict() - - # Create a domain Filter object - domain_filter = openmc.Filter(self.domain_type, self.domain.id) - - # Create each Tally needed to compute the multi group cross section - for score, key, filters in zip(scores, keys, all_filters): - self.tallies[key] = openmc.Tally(name=self.name) - self.tallies[key].scores = [score] - self.tallies[key].estimator = estimator - self.tallies[key].filters = [domain_filter] - - # If a tally trigger was specified, add it to each tally - if self.tally_trigger: - trigger_clone = copy.deepcopy(self.tally_trigger) - trigger_clone.scores = [score] - self.tallies[key].triggers.append(trigger_clone) - - # Add all non-domain specific Filters (e.g., 'energy') to the Tally - for add_filter in filters: - self.tallies[key].filters.append(add_filter) - - # If this is a by-nuclide cross-section, add all nuclides to Tally - if self.by_nuclide and score != 'flux': - all_nuclides = self.get_all_nuclides() - for nuclide in all_nuclides: - self.tallies[key].nuclides.append(nuclide) - else: - self.tallies[key].nuclides.append('total') - def _compute_xs(self): """Performs generic cleanup after a subclass' uses tally arithmetic to compute a multi-group cross section as a derived tally. @@ -1492,100 +1493,30 @@ class TotalXS(MGXS): groups, by_nuclide, name) self._rxn_type = 'total' - @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. - - This method constructs two tracklength tallies to compute the 'flux' - and 'total' reaction rates in the spatial domain and energy groups - of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', 'total'] - estimator = 'tracklength' - keys = scores - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - filters = [[energy_filter], [energy_filter]] - - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies - - @property - def rxn_rate_tally(self): - if self._rxn_rate_tally is None : - self._rxn_rate_tally = self.tallies['total'] - self._rxn_rate_tally.sparse = self.sparse - return self._rxn_rate_tally - class TransportXS(MGXS): - """A transport-corrected total multi-group cross section. - - Attributes - ---------- - use_nu : bool - Whether or not to account for scattering multiplicity in the - correction. If False, a "scatter-1" score is used (default); - if True, a "nu-scatter-1" score is used. This should be - set to False if using a ScatterMatrixXS and True if using - a NuScatterMatrixXS to preserve neutron balance. - - """ + """A transport-corrected total multi-group cross section.""" def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): super(TransportXS, self).__init__(domain, domain_type, groups, by_nuclide, name) self._rxn_type = 'transport' - self._use_nu = False @property - def use_nu(self): - return self._use_nu + def scores(self): + return ['flux', 'total', 'scatter-1'] @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. + def filters(self): + group_edges = self.energy_groups.group_edges + energy_filter = openmc.Filter('energy', group_edges) + energyout_filter = openmc.Filter('energyout', group_edges) + return [[energy_filter], [energy_filter], [energyout_filter]] - This method constructs three analog tallies to compute the 'flux', - 'total' and 'scatter-1' reaction rates in the spatial domain and - energy groups of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', 'total'] - if self.use_nu: - scores.append('nu-scatter-1') - else: - scores.append('scatter-1') - - estimator = 'analog' - keys = ['flux', 'total', 'scatter-1'] - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - energyout_filter = openmc.Filter('energyout', group_edges) - filters = [[energy_filter], [energy_filter], [energyout_filter]] - - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies + @property + def estimator(self): + return 'analog' @property def rxn_rate_tally(self): @@ -1609,33 +1540,12 @@ class NuTransportXS(TransportXS): self._rxn_type = 'nu-transport' @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. + def scores(self): + return ['flux', 'total', 'nu-scatter-1'] - This method constructs three analog tallies to compute the 'flux', - 'total' and 'nu-scatter-1' reaction rates in the spatial domain and - energy groups of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', 'total', 'nu-scatter-1'] - keys = ['flux', 'total', 'scatter-1'] - estimator = 'analog' - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - energyout_filter = openmc.Filter('energyout', group_edges) - filters = [[energy_filter], [energy_filter], [energyout_filter]] - - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies + @property + def keys(self): + return ['flux', 'total', 'scatter-1'] class AbsorptionXS(MGXS): @@ -1647,41 +1557,6 @@ class AbsorptionXS(MGXS): groups, by_nuclide, name) self._rxn_type = 'absorption' - @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. - - This method constructs two tracklength tallies to compute the 'flux' - and 'absorption' reaction rates in the spatial domain and energy - groups of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', 'absorption'] - estimator = 'tracklength' - keys = scores - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - filters = [[energy_filter], [energy_filter]] - - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies - - @property - def rxn_rate_tally(self): - if self._rxn_rate_tally is None: - self._rxn_rate_tally = self.tallies['absorption'] - self._rxn_rate_tally.sparse = self.sparse - return self._rxn_rate_tally - class CaptureXS(MGXS): """A capture multi-group cross section. @@ -1700,32 +1575,8 @@ class CaptureXS(MGXS): self._rxn_type = 'capture' @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. - - This method constructs two tracklength tallies to compute the 'flux' - and 'capture' reaction rates in the spatial domain and energy - groups of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', 'absorption', 'fission'] - estimator = 'tracklength' - keys = scores - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - filters = [[energy_filter], [energy_filter], [energy_filter]] - - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies + def scores(self): + return ['flux', 'absorption', 'fission'] @property def rxn_rate_tally(self): @@ -1735,80 +1586,36 @@ class CaptureXS(MGXS): self._rxn_rate_tally.sparse = self.sparse return self._rxn_rate_tally -class FissionXSBase(MGXS): - """A fission production multi-group cross section base class - for NuFission and KappaFission - """ - # This is an abstract class which cannot be instantiated - __metaclass__ = abc.ABCMeta - - def __init__(self, rxn_type, domain=None, domain_type=None, - groups=None, by_nuclide=False, name=''): - super(FissionXSBase, self).__init__(domain, domain_type, - groups, by_nuclide, name) - self._rxn_type = rxn_type - - @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. - - This method constructs two tracklength tallies to compute the 'flux' - and 'rxn_type' reaction rates in the spatial domain and energy - groups of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', self._rxn_type] - estimator = 'tracklength' - keys = scores - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - filters = [[energy_filter], [energy_filter]] - - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies - - @property - def rxn_rate_tally(self): - if self._rxn_rate_tally is None: - self._rxn_rate_tally = self.tallies[self._rxn_type] - self._rxn_rate_tally.sparse = self.sparse - return self._rxn_rate_tally - - -class FissionXS(FissionXSBase): +class FissionXS(MGXS): """A fission multi-group cross section.""" def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): - super(FissionXS, self).__init__('fission', domain, domain_type, + super(FissionXS, self).__init__(domain, domain_type, groups, by_nuclide, name) + self._rxn_type = 'fission' -class NuFissionXS(FissionXSBase): +class NuFissionXS(MGXS): """A fission production multi-group cross section.""" def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): - super(NuFissionXS, self).__init__('nu-fission', domain, domain_type, + super(NuFissionXS, self).__init__(domain, domain_type, groups, by_nuclide, name) + self._rxn_type = 'nu-fission' -class KappaFissionXS(FissionXSBase): + +class KappaFissionXS(MGXS): """A recoverable fission energy production rate multi-group cross section.""" def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): - super(KappaFissionXS, self).__init__('kappa-fission', domain, domain_type, + super(KappaFissionXS, self).__init__(domain, domain_type, groups, by_nuclide, name) + self._rxn_type = 'kappa-fission' + class ScatterXS(MGXS): """A scatter multi-group cross section.""" @@ -1819,41 +1626,6 @@ class ScatterXS(MGXS): groups, by_nuclide, name) self._rxn_type = 'scatter' - @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. - - This method constructs two tracklength tallies to compute the 'flux' - and 'scatter' reaction rates in the spatial domain and energy - groups of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', 'scatter'] - estimator = 'tracklength' - keys = scores - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - filters = [[energy_filter], [energy_filter]] - - # Intialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies - - @property - def rxn_rate_tally(self): - if self._rxn_rate_tally is None: - self._rxn_rate_tally = self.tallies['scatter'] - self._rxn_rate_tally.sparse = self.sparse - return self._rxn_rate_tally - class NuScatterXS(MGXS): """A nu-scatter multi-group cross section.""" @@ -1864,41 +1636,6 @@ class NuScatterXS(MGXS): groups, by_nuclide, name) self._rxn_type = 'nu-scatter' - @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. - - This method constructs two analog tallies to compute the 'flux' - and 'nu-scatter' reaction rates in the spatial domain and energy - groups of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', 'nu-scatter'] - estimator = 'analog' - keys = scores - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - filters = [[energy_filter], [energy_filter]] - - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies - - @property - def rxn_rate_tally(self): - if self._rxn_rate_tally is None: - self._rxn_rate_tally = self.tallies['nu-scatter'] - self._rxn_rate_tally.sparse = self.sparse - return self._rxn_rate_tally - class ScatterMatrixXS(MGXS): """A scattering matrix multi-group cross section for one or more Legendre @@ -1935,6 +1672,14 @@ class ScatterMatrixXS(MGXS): def legendre_order(self): return self._legendre_order + @property + def scores(self): + return ['flux', 'total', 'nu-scatter-1'] + + @property + def keys(self): + return ['flux', 'total', 'scatter-1'] + @property def tallies(self): """Construct the OpenMC tallies needed to compute this cross section. From 19feb55e6d5e8350398627f39fb55ee8e2e63011 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Thu, 12 May 2016 21:08:55 -0400 Subject: [PATCH 530/650] Major refactoring of MGXS subclasses to eliminate tallies properties --- .../pythonapi/examples/mgxs-part-i.ipynb | 75 +- .../pythonapi/examples/mgxs-part-ii.ipynb | 903 +++++++++--------- .../pythonapi/examples/mgxs-part-iii.ipynb | 280 +++--- openmc/mgxs/mgxs.py | 176 ++-- .../inputs_true.dat | 2 +- .../results_true.dat | 2 +- .../inputs_true.dat | 2 +- tests/test_mgxs_library_hdf5/inputs_true.dat | 2 +- tests/test_mgxs_library_hdf5/results_true.dat | 4 +- .../inputs_true.dat | 2 +- .../results_true.dat | 2 +- .../inputs_true.dat | 2 +- .../results_true.dat | 2 +- 13 files changed, 704 insertions(+), 750 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index e4c976718f..2f2a801779 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -372,6 +372,7 @@ "\n", "* `TotalXS`\n", "* `TransportXS`\n", + "* `NuTransportXS`\n", "* `AbsorptionXS`\n", "* `CaptureXS`\n", "* `FissionXS`\n", @@ -409,7 +410,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 26, "metadata": { "collapsed": false }, @@ -418,25 +419,27 @@ "data": { "text/plain": [ "OrderedDict([('flux', Tally\n", - " \tID =\t10000\n", - " \tName =\t\n", - " \tFilters =\t\n", - " \t\tcell\t[1]\n", - " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", - " \tNuclides =\ttotal \n", - " \tScores =\t['flux']\n", - " \tEstimator =\ttracklength), ('absorption', Tally\n", - " \tID =\t10001\n", - " \tName =\t\n", - " \tFilters =\t\n", - " \t\tcell\t[1]\n", - " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", - " \tNuclides =\ttotal \n", - " \tScores =\t['absorption']\n", - " \tEstimator =\ttracklength)])" + "\tID =\t10012\n", + "\tName =\t\n", + "\tFilters =\t\n", + " \t\tcell\t[1]\n", + " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", + "\tNuclides =\ttotal \n", + "\tScores =\t[u'flux']\n", + "\tEstimator =\ttracklength\n", + "), ('absorption', Tally\n", + "\tID =\t10013\n", + "\tName =\t\n", + "\tFilters =\t\n", + " \t\tcell\t[1]\n", + " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", + "\tNuclides =\ttotal \n", + "\tScores =\t[u'absorption']\n", + "\tEstimator =\ttracklength\n", + ")])" ] }, - "execution_count": 13, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -510,8 +513,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 502482dcf630ee6e290c15b8535e6e850a351c88\n", - " Date/Time: 2016-05-10 20:52:19\n", + " Git SHA1: ae588276014a905ecc6e0967bf08288ecec5b550\n", + " Date/Time: 2016-05-12 20:41:27\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -597,20 +600,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.3200E-01 seconds\n", - " Reading cross sections = 1.3300E-01 seconds\n", - " Total time in simulation = 2.3438E+01 seconds\n", - " Time in transport only = 2.3419E+01 seconds\n", - " Time in inactive batches = 2.9490E+00 seconds\n", - " Time in active batches = 2.0489E+01 seconds\n", - " Time synchronizing fission bank = 6.0000E-03 seconds\n", - " Sampling source sites = 3.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", + " Total time for initialization = 4.7500E-01 seconds\n", + " Reading cross sections = 9.7000E-02 seconds\n", + " Total time in simulation = 1.8074E+01 seconds\n", + " Time in transport only = 1.8055E+01 seconds\n", + " Time in inactive batches = 2.1180E+00 seconds\n", + " Time in active batches = 1.5956E+01 seconds\n", + " Time synchronizing fission bank = 4.0000E-03 seconds\n", + " Sampling source sites = 4.0000E-03 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Time accumulating tallies = 2.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 2.3985E+01 seconds\n", - " Calculation Rate (inactive) = 8477.45 neutrons/second\n", - " Calculation Rate (active) = 4880.67 neutrons/second\n", + " Total time elapsed = 1.8559E+01 seconds\n", + " Calculation Rate (inactive) = 11803.6 neutrons/second\n", + " Calculation Rate (active) = 6267.23 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1121,7 +1124,7 @@ " 6.250000e-07\n", " total\n", " (((absorption / flux) / (total / flux)) + ((sc...\n", - " 1\n", + " 1.0\n", " 0.007763\n", " \n", " \n", @@ -1131,7 +1134,7 @@ " 2.000000e+01\n", " total\n", " (((absorption / flux) / (total / flux)) + ((sc...\n", - " 1\n", + " 1.0\n", " 0.003739\n", " \n", " \n", @@ -1178,7 +1181,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.11" + "version": "2.7.6" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index 7b313da749..ca07519e53 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -445,8 +445,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 7b20f8ad4aa9e6f02f8b1d51e002f9f56ba7aa15\n", - " Date/Time: 2016-05-09 13:34:05\n", + " Git SHA1: ae588276014a905ecc6e0967bf08288ecec5b550\n", + " Date/Time: 2016-05-12 21:00:03\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -523,7 +523,7 @@ " 48/1 1.21610 1.22612 +/- 0.00251\n", " 49/1 1.22199 1.22602 +/- 0.00245\n", " 50/1 1.20860 1.22558 +/- 0.00243\n", - " Triggers unsatisfied, max unc./thresh. is 1.25496 for flux in tally 10050\n", + " Triggers unsatisfied, max unc./thresh. is 1.25496 for flux in tally 10051\n", " The estimated number of batches is 73\n", " Creating state point statepoint.050.h5...\n", " 51/1 1.21850 1.22541 +/- 0.00237\n", @@ -549,7 +549,7 @@ " 71/1 1.19720 1.22444 +/- 0.00195\n", " 72/1 1.23770 1.22465 +/- 0.00193\n", " 73/1 1.23894 1.22488 +/- 0.00191\n", - " Triggers unsatisfied, max unc./thresh. is 1.00243 for flux in tally 10050\n", + " Triggers unsatisfied, max unc./thresh. is 1.00243 for flux in tally 10051\n", " The estimated number of batches is 74\n", " 74/1 1.22437 1.22487 +/- 0.00188\n", " Triggers satisfied for batch 74\n", @@ -562,20 +562,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.8900E-01 seconds\n", - " Reading cross sections = 8.3000E-02 seconds\n", - " Total time in simulation = 2.2066E+02 seconds\n", - " Time in transport only = 2.2061E+02 seconds\n", - " Time in inactive batches = 1.5872E+01 seconds\n", - " Time in active batches = 2.0478E+02 seconds\n", - " Time synchronizing fission bank = 1.9000E-02 seconds\n", - " Sampling source sites = 1.2000E-02 seconds\n", - " SEND/RECV source sites = 6.0000E-03 seconds\n", - " Time accumulating tallies = 3.0000E-03 seconds\n", - " Total time for finalization = 1.1000E-02 seconds\n", - " Total time elapsed = 2.2111E+02 seconds\n", - " Calculation Rate (inactive) = 6300.40 neutrons/second\n", - " Calculation Rate (active) = 1953.28 neutrons/second\n", + " Total time for initialization = 4.1000E-01 seconds\n", + " Reading cross sections = 8.6000E-02 seconds\n", + " Total time in simulation = 2.2903E+02 seconds\n", + " Time in transport only = 2.2897E+02 seconds\n", + " Time in inactive batches = 1.4619E+01 seconds\n", + " Time in active batches = 2.1441E+02 seconds\n", + " Time synchronizing fission bank = 2.5000E-02 seconds\n", + " Sampling source sites = 1.6000E-02 seconds\n", + " SEND/RECV source sites = 8.0000E-03 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for finalization = 1.2000E-02 seconds\n", + " Total time elapsed = 2.2951E+02 seconds\n", + " Calculation Rate (inactive) = 6840.41 neutrons/second\n", + " Calculation Rate (active) = 1865.57 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -786,9 +786,10 @@ " group in\n", " group out\n", " nuclide\n", - " score\n", + " moment\n", " mean\n", " std. dev.\n", + " moment\n", " \n", " \n", " \n", @@ -798,9 +799,10 @@ " 1\n", " 1\n", " H-1\n", - " ((nu-scatter-0 - scatter-1) / flux)\n", + " P0\n", " 0.234115\n", " 0.003568\n", + " P0\n", " \n", " \n", " 127\n", @@ -808,9 +810,10 @@ " 1\n", " 1\n", " O-16\n", - " ((nu-scatter-0 - scatter-1) / flux)\n", + " P0\n", " 1.563707\n", " 0.005953\n", + " P0\n", " \n", " \n", " 124\n", @@ -818,9 +821,10 @@ " 1\n", " 2\n", " H-1\n", - " ((nu-scatter-0 - scatter-1) / flux)\n", + " P0\n", " 1.594129\n", " 0.002369\n", + " P0\n", " \n", " \n", " 125\n", @@ -828,9 +832,10 @@ " 1\n", " 2\n", " O-16\n", - " ((nu-scatter-0 - scatter-1) / flux)\n", + " P0\n", " 0.285761\n", " 0.001676\n", + " P0\n", " \n", " \n", " 122\n", @@ -838,9 +843,10 @@ " 1\n", " 3\n", " H-1\n", - " ((nu-scatter-0 - scatter-1) / flux)\n", + " P0\n", " 0.011089\n", " 0.000248\n", + " P0\n", " \n", " \n", " 123\n", @@ -848,9 +854,10 @@ " 1\n", " 3\n", " O-16\n", - " ((nu-scatter-0 - scatter-1) / flux)\n", + " P0\n", " 0.000000\n", " 0.000000\n", + " P0\n", " \n", " \n", " 120\n", @@ -858,9 +865,10 @@ " 1\n", " 4\n", " H-1\n", - " ((nu-scatter-0 - scatter-1) / flux)\n", + " P0\n", " 0.000000\n", " 0.000000\n", + " P0\n", " \n", " \n", " 121\n", @@ -868,9 +876,10 @@ " 1\n", " 4\n", " O-16\n", - " ((nu-scatter-0 - scatter-1) / flux)\n", + " P0\n", " 0.000000\n", " 0.000000\n", + " P0\n", " \n", " \n", " 118\n", @@ -878,9 +887,10 @@ " 1\n", " 5\n", " H-1\n", - " ((nu-scatter-0 - scatter-1) / flux)\n", + " P0\n", " 0.000000\n", " 0.000000\n", + " P0\n", " \n", " \n", " 119\n", @@ -888,38 +898,27 @@ " 1\n", " 5\n", " O-16\n", - " ((nu-scatter-0 - scatter-1) / flux)\n", + " P0\n", " 0.000000\n", " 0.000000\n", + " P0\n", " \n", " \n", "\n", "
" ], "text/plain": [ - " cell group in group out nuclide score \\\n", - "126 10002 1 1 H-1 ((nu-scatter-0 - scatter-1) / flux) \n", - "127 10002 1 1 O-16 ((nu-scatter-0 - scatter-1) / flux) \n", - "124 10002 1 2 H-1 ((nu-scatter-0 - scatter-1) / flux) \n", - "125 10002 1 2 O-16 ((nu-scatter-0 - scatter-1) / flux) \n", - "122 10002 1 3 H-1 ((nu-scatter-0 - scatter-1) / flux) \n", - "123 10002 1 3 O-16 ((nu-scatter-0 - scatter-1) / flux) \n", - "120 10002 1 4 H-1 ((nu-scatter-0 - scatter-1) / flux) \n", - "121 10002 1 4 O-16 ((nu-scatter-0 - scatter-1) / flux) \n", - "118 10002 1 5 H-1 ((nu-scatter-0 - scatter-1) / flux) \n", - "119 10002 1 5 O-16 ((nu-scatter-0 - scatter-1) / flux) \n", - "\n", - " mean std. dev. \n", - "126 0.234115 0.003568 \n", - "127 1.563707 0.005953 \n", - "124 1.594129 0.002369 \n", - "125 0.285761 0.001676 \n", - "122 0.011089 0.000248 \n", - "123 0.000000 0.000000 \n", - "120 0.000000 0.000000 \n", - "121 0.000000 0.000000 \n", - "118 0.000000 0.000000 \n", - "119 0.000000 0.000000 " + " cell group in group out nuclide moment mean std. dev. moment\n", + "126 10002 1 1 H-1 P0 0.234115 0.003568 P0\n", + "127 10002 1 1 O-16 P0 1.563707 0.005953 P0\n", + "124 10002 1 2 H-1 P0 1.594129 0.002369 P0\n", + "125 10002 1 2 O-16 P0 0.285761 0.001676 P0\n", + "122 10002 1 3 H-1 P0 0.011089 0.000248 P0\n", + "123 10002 1 3 O-16 P0 0.000000 0.000000 P0\n", + "120 10002 1 4 H-1 P0 0.000000 0.000000 P0\n", + "121 10002 1 4 O-16 P0 0.000000 0.000000 P0\n", + "118 10002 1 5 H-1 P0 0.000000 0.000000 P0\n", + "119 10002 1 5 O-16 P0 0.000000 0.000000 P0" ] }, "execution_count": 19, @@ -1019,7 +1018,6 @@ " cell\n", " group in\n", " nuclide\n", - " score\n", " mean\n", " std. dev.\n", " \n", @@ -1030,7 +1028,6 @@ " 10000\n", " 1\n", " U-235\n", - " ((total - scatter-1) / flux)\n", " 20.611692\n", " 0.104237\n", " \n", @@ -1039,7 +1036,6 @@ " 10000\n", " 1\n", " U-238\n", - " ((total - scatter-1) / flux)\n", " 9.585358\n", " 0.013808\n", " \n", @@ -1048,7 +1044,6 @@ " 10000\n", " 1\n", " O-16\n", - " ((total - scatter-1) / flux)\n", " 3.164190\n", " 0.005049\n", " \n", @@ -1057,7 +1052,6 @@ " 10000\n", " 2\n", " U-235\n", - " ((total - scatter-1) / flux)\n", " 485.413426\n", " 0.996410\n", " \n", @@ -1066,7 +1060,6 @@ " 10000\n", " 2\n", " U-238\n", - " ((total - scatter-1) / flux)\n", " 11.190386\n", " 0.028731\n", " \n", @@ -1075,7 +1068,6 @@ " 10000\n", " 2\n", " O-16\n", - " ((total - scatter-1) / flux)\n", " 3.794859\n", " 0.011139\n", " \n", @@ -1084,13 +1076,13 @@ "
" ], "text/plain": [ - " cell group in nuclide score mean std. dev.\n", - "3 10000 1 U-235 ((total - scatter-1) / flux) 2.06e+01 1.04e-01\n", - "4 10000 1 U-238 ((total - scatter-1) / flux) 9.59e+00 1.38e-02\n", - "5 10000 1 O-16 ((total - scatter-1) / flux) 3.16e+00 5.05e-03\n", - "0 10000 2 U-235 ((total - scatter-1) / flux) 4.85e+02 9.96e-01\n", - "1 10000 2 U-238 ((total - scatter-1) / flux) 1.12e+01 2.87e-02\n", - "2 10000 2 O-16 ((total - scatter-1) / flux) 3.79e+00 1.11e-02" + " cell group in nuclide mean std. dev.\n", + "3 10000 1 U-235 20.611692 0.104237\n", + "4 10000 1 U-238 9.585358 0.013808\n", + "5 10000 1 O-16 3.164190 0.005049\n", + "0 10000 2 U-235 485.413426 0.996410\n", + "1 10000 2 U-238 11.190386 0.028731\n", + "2 10000 2 O-16 3.794859 0.011139" ] }, "execution_count": 22, @@ -1202,161 +1194,161 @@ "[ NORMAL ] Iteration 5:\tk_eff = 0.625810\tres = 2.417E-02\n", "[ NORMAL ] Iteration 6:\tk_eff = 0.606678\tres = 2.675E-02\n", "[ NORMAL ] Iteration 7:\tk_eff = 0.587485\tres = 3.057E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.569029\tres = 3.164E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.569028\tres = 3.164E-02\n", "[ NORMAL ] Iteration 9:\tk_eff = 0.551707\tres = 3.142E-02\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.536035\tres = 3.044E-02\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.522275\tres = 2.841E-02\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.510610\tres = 2.567E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.501106\tres = 2.234E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.493832\tres = 1.861E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.488781\tres = 1.452E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.485924\tres = 1.023E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.485211\tres = 5.846E-03\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.486571\tres = 1.467E-03\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.489905\tres = 2.802E-03\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.495105\tres = 6.853E-03\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.502056\tres = 1.061E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.510630\tres = 1.404E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.520696\tres = 1.708E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.532120\tres = 1.971E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.544768\tres = 2.194E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.558505\tres = 2.377E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.573200\tres = 2.522E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.588723\tres = 2.631E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.604951\tres = 2.708E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.621765\tres = 2.756E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.639053\tres = 2.779E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.656709\tres = 2.780E-02\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.674632\tres = 2.763E-02\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.692730\tres = 2.729E-02\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.710919\tres = 2.683E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.729118\tres = 2.626E-02\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.747258\tres = 2.560E-02\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.765273\tres = 2.488E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.783104\tres = 2.411E-02\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.800701\tres = 2.330E-02\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.818017\tres = 2.247E-02\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.835012\tres = 2.163E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.851651\tres = 2.078E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.867906\tres = 1.993E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.883750\tres = 1.909E-02\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.899164\tres = 1.826E-02\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.914131\tres = 1.744E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.928638\tres = 1.665E-02\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.942676\tres = 1.587E-02\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.956239\tres = 1.512E-02\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.969323\tres = 1.439E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.981927\tres = 1.368E-02\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.994054\tres = 1.300E-02\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.005705\tres = 1.235E-02\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.016886\tres = 1.172E-02\n", - "[ NORMAL ] Iteration 56:\tk_eff = 1.027604\tres = 1.112E-02\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.037866\tres = 1.054E-02\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.047682\tres = 9.987E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.057062\tres = 9.458E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.066016\tres = 8.953E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.074556\tres = 8.471E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.082693\tres = 8.011E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.090442\tres = 7.573E-03\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.097813\tres = 7.156E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.104820\tres = 6.760E-03\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.111477\tres = 6.383E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.117795\tres = 6.025E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.123789\tres = 5.685E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.129470\tres = 5.362E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.134853\tres = 5.056E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.139950\tres = 4.766E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.144772\tres = 4.491E-03\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.149333\tres = 4.230E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.153643\tres = 3.984E-03\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.157716\tres = 3.751E-03\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.161561\tres = 3.530E-03\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.165190\tres = 3.321E-03\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.168613\tres = 3.124E-03\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.171841\tres = 2.938E-03\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.174883\tres = 2.762E-03\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.177749\tres = 2.596E-03\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.180447\tres = 2.439E-03\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.182988\tres = 2.291E-03\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.185378\tres = 2.152E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.187627\tres = 2.021E-03\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.189741\tres = 1.897E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.191728\tres = 1.780E-03\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.193595\tres = 1.670E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.195349\tres = 1.567E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.196996\tres = 1.469E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.198543\tres = 1.378E-03\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.199994\tres = 1.292E-03\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.201355\tres = 1.211E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.202632\tres = 1.134E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.203829\tres = 1.063E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.204952\tres = 9.956E-04\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.206004\tres = 9.324E-04\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.206989\tres = 8.730E-04\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.207913\tres = 8.173E-04\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.208777\tres = 7.650E-04\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.209587\tres = 7.159E-04\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.210345\tres = 6.698E-04\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.211054\tres = 6.266E-04\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.211718\tres = 5.861E-04\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.212339\tres = 5.481E-04\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.212920\tres = 5.125E-04\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.213463\tres = 4.792E-04\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.213971\tres = 4.479E-04\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.214446\tres = 4.186E-04\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.214890\tres = 3.912E-04\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.215305\tres = 3.655E-04\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.215692\tres = 3.414E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.216055\tres = 3.189E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.216393\tres = 2.979E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.216709\tres = 2.782E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.217004\tres = 2.597E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.217279\tres = 2.425E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.217536\tres = 2.263E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.217776\tres = 2.113E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.218000\tres = 1.971E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.218209\tres = 1.840E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.218404\tres = 1.716E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.218587\tres = 1.601E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.218756\tres = 1.494E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.218915\tres = 1.393E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.219062\tres = 1.299E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.219200\tres = 1.212E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.219329\tres = 1.130E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.219448\tres = 1.054E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.219560\tres = 9.822E-05\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.219664\tres = 9.156E-05\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.219761\tres = 8.534E-05\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.219851\tres = 7.954E-05\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.219936\tres = 7.413E-05\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.220014\tres = 6.908E-05\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.220087\tres = 6.437E-05\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.220156\tres = 5.997E-05\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.220219\tres = 5.587E-05\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.220278\tres = 5.205E-05\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.220333\tres = 4.848E-05\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.220385\tres = 4.516E-05\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.220433\tres = 4.206E-05\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.220477\tres = 3.917E-05\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.220518\tres = 3.648E-05\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.220557\tres = 3.397E-05\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.220593\tres = 3.163E-05\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.220627\tres = 2.945E-05\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.220658\tres = 2.742E-05\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.220687\tres = 2.552E-05\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.220714\tres = 2.376E-05\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.220739\tres = 2.212E-05\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.220762\tres = 2.059E-05\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.220784\tres = 1.916E-05\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.220804\tres = 1.783E-05\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.220823\tres = 1.660E-05\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.220841\tres = 1.545E-05\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.220857\tres = 1.437E-05\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.220872\tres = 1.338E-05\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.220886\tres = 1.245E-05\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.220899\tres = 1.158E-05\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.220912\tres = 1.077E-05\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.220923\tres = 1.002E-05\n" + "[ NORMAL ] Iteration 10:\tk_eff = 0.536034\tres = 3.044E-02\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.522274\tres = 2.841E-02\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.510609\tres = 2.567E-02\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.501105\tres = 2.234E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.493831\tres = 1.861E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.488780\tres = 1.452E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.485922\tres = 1.023E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.485209\tres = 5.846E-03\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.486569\tres = 1.467E-03\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.489903\tres = 2.801E-03\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.495102\tres = 6.853E-03\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.502053\tres = 1.061E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.510627\tres = 1.404E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.520692\tres = 1.708E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.532116\tres = 1.971E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.544763\tres = 2.194E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.558500\tres = 2.377E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.573195\tres = 2.522E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.588717\tres = 2.631E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.604945\tres = 2.708E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.621759\tres = 2.756E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.639046\tres = 2.779E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.656701\tres = 2.780E-02\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.674624\tres = 2.763E-02\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.692722\tres = 2.729E-02\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.710909\tres = 2.683E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.729109\tres = 2.626E-02\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.747248\tres = 2.560E-02\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.765262\tres = 2.488E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.783093\tres = 2.411E-02\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.800689\tres = 2.330E-02\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.818004\tres = 2.247E-02\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.834999\tres = 2.163E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.851638\tres = 2.078E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.867891\tres = 1.993E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.883735\tres = 1.909E-02\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.899148\tres = 1.826E-02\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.914114\tres = 1.744E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.928621\tres = 1.664E-02\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.942659\tres = 1.587E-02\n", + "[ NORMAL ] Iteration 50:\tk_eff = 0.956221\tres = 1.512E-02\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.969305\tres = 1.439E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.981909\tres = 1.368E-02\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.994034\tres = 1.300E-02\n", + "[ NORMAL ] Iteration 54:\tk_eff = 1.005685\tres = 1.235E-02\n", + "[ NORMAL ] Iteration 55:\tk_eff = 1.016866\tres = 1.172E-02\n", + "[ NORMAL ] Iteration 56:\tk_eff = 1.027583\tres = 1.112E-02\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.037845\tres = 1.054E-02\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.047661\tres = 9.986E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.057040\tres = 9.458E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.065993\tres = 8.952E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.074533\tres = 8.470E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.082670\tres = 8.011E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.090418\tres = 7.573E-03\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.097789\tres = 7.156E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.104796\tres = 6.760E-03\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.111452\tres = 6.383E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.117770\tres = 6.025E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.123764\tres = 5.685E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.129445\tres = 5.362E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.134828\tres = 5.056E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.139924\tres = 4.766E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.144746\tres = 4.491E-03\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.149306\tres = 4.230E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.153617\tres = 3.984E-03\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.157689\tres = 3.750E-03\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.161534\tres = 3.530E-03\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.165163\tres = 3.321E-03\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.168586\tres = 3.124E-03\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.171813\tres = 2.938E-03\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.174855\tres = 2.762E-03\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.177721\tres = 2.596E-03\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.180419\tres = 2.439E-03\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.182960\tres = 2.291E-03\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.185350\tres = 2.152E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.187598\tres = 2.021E-03\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.189712\tres = 1.897E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.191699\tres = 1.780E-03\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.193567\tres = 1.670E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.195320\tres = 1.567E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.196967\tres = 1.469E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.198513\tres = 1.378E-03\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.199964\tres = 1.292E-03\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.201326\tres = 1.211E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.202602\tres = 1.134E-03\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.203800\tres = 1.063E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.204922\tres = 9.955E-04\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.205974\tres = 9.323E-04\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.206959\tres = 8.730E-04\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.207883\tres = 8.173E-04\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.208747\tres = 7.649E-04\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.209557\tres = 7.159E-04\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.210315\tres = 6.698E-04\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.211024\tres = 6.266E-04\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.211688\tres = 5.861E-04\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.212309\tres = 5.481E-04\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.212890\tres = 5.125E-04\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.213433\tres = 4.791E-04\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.213941\tres = 4.479E-04\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.214416\tres = 4.186E-04\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.214860\tres = 3.912E-04\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.215275\tres = 3.655E-04\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.215662\tres = 3.414E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.216024\tres = 3.189E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.216362\tres = 2.979E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.216678\tres = 2.781E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.216973\tres = 2.597E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.217249\tres = 2.425E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.217506\tres = 2.263E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.217746\tres = 2.112E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.217970\tres = 1.971E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.218179\tres = 1.840E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.218374\tres = 1.716E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.218556\tres = 1.601E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.218726\tres = 1.494E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.218884\tres = 1.393E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.219032\tres = 1.299E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.219170\tres = 1.212E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.219298\tres = 1.130E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.219418\tres = 1.053E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.219529\tres = 9.821E-05\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.219633\tres = 9.155E-05\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.219730\tres = 8.534E-05\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.219821\tres = 7.954E-05\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.219905\tres = 7.412E-05\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.219984\tres = 6.907E-05\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.220057\tres = 6.436E-05\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.220125\tres = 5.997E-05\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.220188\tres = 5.587E-05\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.220248\tres = 5.205E-05\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.220303\tres = 4.848E-05\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.220354\tres = 4.516E-05\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.220402\tres = 4.206E-05\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.220446\tres = 3.917E-05\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.220488\tres = 3.648E-05\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.220526\tres = 3.397E-05\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.220562\tres = 3.163E-05\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.220596\tres = 2.945E-05\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.220627\tres = 2.742E-05\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.220656\tres = 2.552E-05\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.220683\tres = 2.376E-05\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.220708\tres = 2.212E-05\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.220732\tres = 2.059E-05\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.220753\tres = 1.916E-05\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.220774\tres = 1.783E-05\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.220792\tres = 1.660E-05\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.220810\tres = 1.545E-05\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.220826\tres = 1.437E-05\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.220841\tres = 1.337E-05\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.220856\tres = 1.244E-05\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.220869\tres = 1.158E-05\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.220881\tres = 1.077E-05\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.220892\tres = 1.002E-05\n" ] } ], @@ -1389,8 +1381,8 @@ "output_type": "stream", "text": [ "openmc keff = 1.223474\n", - "openmoc keff = 1.220923\n", - "bias [pcm]: -255.0\n" + "openmoc keff = 1.220892\n", + "bias [pcm]: -258.1\n" ] } ], @@ -1467,235 +1459,235 @@ "[ NORMAL ] Computing the eigenvalue...\n", "[ NORMAL ] Iteration 0:\tk_eff = 0.495816\tres = 0.000E+00\n", "[ NORMAL ] Iteration 1:\tk_eff = 0.557477\tres = 5.042E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.518301\tres = 1.244E-01\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.509212\tres = 7.027E-02\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.518300\tres = 1.244E-01\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.509211\tres = 7.027E-02\n", "[ NORMAL ] Iteration 4:\tk_eff = 0.496489\tres = 1.754E-02\n", "[ NORMAL ] Iteration 5:\tk_eff = 0.488581\tres = 2.498E-02\n", "[ NORMAL ] Iteration 6:\tk_eff = 0.482897\tres = 1.593E-02\n", "[ NORMAL ] Iteration 7:\tk_eff = 0.479775\tres = 1.163E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.478835\tres = 6.464E-03\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.479872\tres = 1.960E-03\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.482685\tres = 2.166E-03\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.487085\tres = 5.861E-03\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.492901\tres = 9.116E-03\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.499973\tres = 1.194E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.508155\tres = 1.435E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.517314\tres = 1.637E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.527327\tres = 1.802E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.538081\tres = 1.936E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.549475\tres = 2.039E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.561413\tres = 2.117E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.573810\tres = 2.173E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.586589\tres = 2.208E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.599678\tres = 2.227E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.613012\tres = 2.231E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.626532\tres = 2.224E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.640186\tres = 2.206E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.653925\tres = 2.179E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.667706\tres = 2.146E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.681489\tres = 2.107E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.695240\tres = 2.064E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.708927\tres = 2.018E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.722522\tres = 1.969E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.736000\tres = 1.918E-02\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.749339\tres = 1.865E-02\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.762519\tres = 1.812E-02\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.775522\tres = 1.759E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.788335\tres = 1.705E-02\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.800944\tres = 1.652E-02\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.813338\tres = 1.599E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.825507\tres = 1.547E-02\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.837444\tres = 1.496E-02\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.849142\tres = 1.446E-02\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.860595\tres = 1.397E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.871801\tres = 1.349E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.882755\tres = 1.302E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.893455\tres = 1.256E-02\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.903901\tres = 1.212E-02\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.914091\tres = 1.169E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.924027\tres = 1.127E-02\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.933708\tres = 1.087E-02\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.943137\tres = 1.048E-02\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.952314\tres = 1.010E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.961243\tres = 9.731E-03\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.969927\tres = 9.376E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 0.978367\tres = 9.033E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 0.986568\tres = 8.702E-03\n", - "[ NORMAL ] Iteration 56:\tk_eff = 0.994534\tres = 8.382E-03\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.002267\tres = 8.074E-03\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.009773\tres = 7.776E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.017055\tres = 7.489E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.024118\tres = 7.212E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.030966\tres = 6.944E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.037603\tres = 6.687E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.044036\tres = 6.438E-03\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.050267\tres = 6.199E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.056302\tres = 5.968E-03\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.062145\tres = 5.746E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.067802\tres = 5.532E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.073276\tres = 5.326E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.078573\tres = 5.127E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.083698\tres = 4.935E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.088654\tres = 4.751E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.093447\tres = 4.573E-03\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.098080\tres = 4.402E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.102560\tres = 4.238E-03\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.106889\tres = 4.079E-03\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.111072\tres = 3.926E-03\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.115114\tres = 3.779E-03\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.119018\tres = 3.638E-03\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.122790\tres = 3.501E-03\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.126432\tres = 3.370E-03\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.129949\tres = 3.244E-03\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.133344\tres = 3.122E-03\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.136622\tres = 3.005E-03\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.139786\tres = 2.892E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.142840\tres = 2.784E-03\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.145786\tres = 2.679E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.148630\tres = 2.579E-03\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.151373\tres = 2.482E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.154020\tres = 2.388E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.156573\tres = 2.299E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.159035\tres = 2.212E-03\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.161410\tres = 2.129E-03\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.163700\tres = 2.049E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.165909\tres = 1.972E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.168038\tres = 1.898E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.170091\tres = 1.826E-03\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.172070\tres = 1.758E-03\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.173977\tres = 1.691E-03\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.175816\tres = 1.628E-03\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.177589\tres = 1.566E-03\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.179297\tres = 1.507E-03\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.180943\tres = 1.451E-03\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.182529\tres = 1.396E-03\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.184058\tres = 1.343E-03\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.185530\tres = 1.293E-03\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.186949\tres = 1.244E-03\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.188316\tres = 1.197E-03\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.189633\tres = 1.152E-03\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.190902\tres = 1.108E-03\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.192124\tres = 1.066E-03\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.193301\tres = 1.026E-03\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.194435\tres = 9.874E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.195527\tres = 9.501E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.196578\tres = 9.142E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.197591\tres = 8.797E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.198566\tres = 8.464E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.199506\tres = 8.144E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.200410\tres = 7.836E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.201281\tres = 7.540E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.202119\tres = 7.255E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.202927\tres = 6.980E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.203704\tres = 6.716E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.204452\tres = 6.462E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.205173\tres = 6.217E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.205867\tres = 5.982E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.206534\tres = 5.755E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.207177\tres = 5.537E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.207796\tres = 5.327E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.208391\tres = 5.126E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.208965\tres = 4.931E-04\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.209517\tres = 4.744E-04\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.210048\tres = 4.565E-04\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.210559\tres = 4.391E-04\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.211051\tres = 4.225E-04\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.211525\tres = 4.065E-04\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.211980\tres = 3.910E-04\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.212419\tres = 3.762E-04\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.212841\tres = 3.619E-04\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.213247\tres = 3.482E-04\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.213638\tres = 3.350E-04\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.214015\tres = 3.222E-04\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.214377\tres = 3.100E-04\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.214725\tres = 2.982E-04\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.215060\tres = 2.869E-04\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.215383\tres = 2.760E-04\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.215693\tres = 2.655E-04\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.215992\tres = 2.554E-04\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.216280\tres = 2.457E-04\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.216556\tres = 2.364E-04\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.216822\tres = 2.274E-04\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.217078\tres = 2.187E-04\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.217325\tres = 2.104E-04\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.217562\tres = 2.024E-04\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.217790\tres = 1.947E-04\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.218009\tres = 1.873E-04\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.218220\tres = 1.802E-04\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.218423\tres = 1.733E-04\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.218619\tres = 1.667E-04\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.218807\tres = 1.604E-04\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.218988\tres = 1.543E-04\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.219162\tres = 1.484E-04\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.219329\tres = 1.428E-04\n", - "[ NORMAL ] Iteration 163:\tk_eff = 1.219490\tres = 1.373E-04\n", - "[ NORMAL ] Iteration 164:\tk_eff = 1.219645\tres = 1.321E-04\n", - "[ NORMAL ] Iteration 165:\tk_eff = 1.219794\tres = 1.271E-04\n", - "[ NORMAL ] Iteration 166:\tk_eff = 1.219938\tres = 1.222E-04\n", - "[ NORMAL ] Iteration 167:\tk_eff = 1.220076\tres = 1.176E-04\n", - "[ NORMAL ] Iteration 168:\tk_eff = 1.220208\tres = 1.131E-04\n", - "[ NORMAL ] Iteration 169:\tk_eff = 1.220336\tres = 1.088E-04\n", - "[ NORMAL ] Iteration 170:\tk_eff = 1.220459\tres = 1.046E-04\n", - "[ NORMAL ] Iteration 171:\tk_eff = 1.220577\tres = 1.006E-04\n", - "[ NORMAL ] Iteration 172:\tk_eff = 1.220691\tres = 9.681E-05\n", - "[ NORMAL ] Iteration 173:\tk_eff = 1.220800\tres = 9.312E-05\n", - "[ NORMAL ] Iteration 174:\tk_eff = 1.220905\tres = 8.957E-05\n", - "[ NORMAL ] Iteration 175:\tk_eff = 1.221006\tres = 8.615E-05\n", - "[ NORMAL ] Iteration 176:\tk_eff = 1.221104\tres = 8.287E-05\n", - "[ NORMAL ] Iteration 177:\tk_eff = 1.221197\tres = 7.971E-05\n", - "[ NORMAL ] Iteration 178:\tk_eff = 1.221287\tres = 7.667E-05\n", - "[ NORMAL ] Iteration 179:\tk_eff = 1.221374\tres = 7.374E-05\n", - "[ NORMAL ] Iteration 180:\tk_eff = 1.221457\tres = 7.093E-05\n", - "[ NORMAL ] Iteration 181:\tk_eff = 1.221537\tres = 6.823E-05\n", - "[ NORMAL ] Iteration 182:\tk_eff = 1.221615\tres = 6.562E-05\n", - "[ NORMAL ] Iteration 183:\tk_eff = 1.221689\tres = 6.312E-05\n", - "[ NORMAL ] Iteration 184:\tk_eff = 1.221760\tres = 6.071E-05\n", - "[ NORMAL ] Iteration 185:\tk_eff = 1.221829\tres = 5.840E-05\n", - "[ NORMAL ] Iteration 186:\tk_eff = 1.221895\tres = 5.617E-05\n", - "[ NORMAL ] Iteration 187:\tk_eff = 1.221958\tres = 5.402E-05\n", - "[ NORMAL ] Iteration 188:\tk_eff = 1.222019\tres = 5.196E-05\n", - "[ NORMAL ] Iteration 189:\tk_eff = 1.222078\tres = 4.998E-05\n", - "[ NORMAL ] Iteration 190:\tk_eff = 1.222134\tres = 4.807E-05\n", - "[ NORMAL ] Iteration 191:\tk_eff = 1.222189\tres = 4.624E-05\n", - "[ NORMAL ] Iteration 192:\tk_eff = 1.222241\tres = 4.447E-05\n", - "[ NORMAL ] Iteration 193:\tk_eff = 1.222291\tres = 4.277E-05\n", - "[ NORMAL ] Iteration 194:\tk_eff = 1.222340\tres = 4.114E-05\n", - "[ NORMAL ] Iteration 195:\tk_eff = 1.222386\tres = 3.957E-05\n", - "[ NORMAL ] Iteration 196:\tk_eff = 1.222431\tres = 3.806E-05\n", - "[ NORMAL ] Iteration 197:\tk_eff = 1.222474\tres = 3.661E-05\n", - "[ NORMAL ] Iteration 198:\tk_eff = 1.222515\tres = 3.521E-05\n", - "[ NORMAL ] Iteration 199:\tk_eff = 1.222555\tres = 3.386E-05\n", - "[ NORMAL ] Iteration 200:\tk_eff = 1.222594\tres = 3.257E-05\n", - "[ NORMAL ] Iteration 201:\tk_eff = 1.222630\tres = 3.133E-05\n", - "[ NORMAL ] Iteration 202:\tk_eff = 1.222666\tres = 3.013E-05\n", - "[ NORMAL ] Iteration 203:\tk_eff = 1.222700\tres = 2.898E-05\n", - "[ NORMAL ] Iteration 204:\tk_eff = 1.222733\tres = 2.787E-05\n", - "[ NORMAL ] Iteration 205:\tk_eff = 1.222764\tres = 2.681E-05\n", - "[ NORMAL ] Iteration 206:\tk_eff = 1.222795\tres = 2.578E-05\n", - "[ NORMAL ] Iteration 207:\tk_eff = 1.222824\tres = 2.480E-05\n", - "[ NORMAL ] Iteration 208:\tk_eff = 1.222852\tres = 2.385E-05\n", - "[ NORMAL ] Iteration 209:\tk_eff = 1.222879\tres = 2.294E-05\n", - "[ NORMAL ] Iteration 210:\tk_eff = 1.222905\tres = 2.206E-05\n", - "[ NORMAL ] Iteration 211:\tk_eff = 1.222930\tres = 2.122E-05\n", - "[ NORMAL ] Iteration 212:\tk_eff = 1.222954\tres = 2.041E-05\n", - "[ NORMAL ] Iteration 213:\tk_eff = 1.222977\tres = 1.963E-05\n", - "[ NORMAL ] Iteration 214:\tk_eff = 1.222999\tres = 1.888E-05\n", - "[ NORMAL ] Iteration 215:\tk_eff = 1.223020\tres = 1.816E-05\n", - "[ NORMAL ] Iteration 216:\tk_eff = 1.223041\tres = 1.747E-05\n", - "[ NORMAL ] Iteration 217:\tk_eff = 1.223061\tres = 1.680E-05\n", - "[ NORMAL ] Iteration 218:\tk_eff = 1.223080\tres = 1.616E-05\n", - "[ NORMAL ] Iteration 219:\tk_eff = 1.223098\tres = 1.554E-05\n", - "[ NORMAL ] Iteration 220:\tk_eff = 1.223116\tres = 1.495E-05\n", - "[ NORMAL ] Iteration 221:\tk_eff = 1.223132\tres = 1.437E-05\n", - "[ NORMAL ] Iteration 222:\tk_eff = 1.223149\tres = 1.382E-05\n", - "[ NORMAL ] Iteration 223:\tk_eff = 1.223164\tres = 1.330E-05\n", - "[ NORMAL ] Iteration 224:\tk_eff = 1.223179\tres = 1.279E-05\n", - "[ NORMAL ] Iteration 225:\tk_eff = 1.223194\tres = 1.230E-05\n", - "[ NORMAL ] Iteration 226:\tk_eff = 1.223208\tres = 1.183E-05\n", - "[ NORMAL ] Iteration 227:\tk_eff = 1.223221\tres = 1.138E-05\n", - "[ NORMAL ] Iteration 228:\tk_eff = 1.223234\tres = 1.094E-05\n", - "[ NORMAL ] Iteration 229:\tk_eff = 1.223246\tres = 1.052E-05\n", - "[ NORMAL ] Iteration 230:\tk_eff = 1.223258\tres = 1.012E-05\n" + "[ NORMAL ] Iteration 8:\tk_eff = 0.478834\tres = 6.465E-03\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.479871\tres = 1.960E-03\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.482684\tres = 2.166E-03\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.487084\tres = 5.861E-03\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.492900\tres = 9.116E-03\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.499971\tres = 1.194E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.508153\tres = 1.435E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.517312\tres = 1.637E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.527324\tres = 1.802E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.538079\tres = 1.935E-02\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.549472\tres = 2.039E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.561410\tres = 2.117E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.573807\tres = 2.173E-02\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.586585\tres = 2.208E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.599674\tres = 2.227E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.613007\tres = 2.231E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.626528\tres = 2.223E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.640181\tres = 2.206E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.653920\tres = 2.179E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.667700\tres = 2.146E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.681483\tres = 2.107E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.695234\tres = 2.064E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.708921\tres = 2.018E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.722515\tres = 1.969E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.735993\tres = 1.918E-02\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.749331\tres = 1.865E-02\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.762510\tres = 1.812E-02\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.775514\tres = 1.759E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.788326\tres = 1.705E-02\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.800934\tres = 1.652E-02\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.813328\tres = 1.599E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.825497\tres = 1.547E-02\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.837433\tres = 1.496E-02\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.849131\tres = 1.446E-02\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.860584\tres = 1.397E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.871789\tres = 1.349E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.882742\tres = 1.302E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.893442\tres = 1.256E-02\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.903888\tres = 1.212E-02\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.914078\tres = 1.169E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.924013\tres = 1.127E-02\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.933694\tres = 1.087E-02\n", + "[ NORMAL ] Iteration 50:\tk_eff = 0.943122\tres = 1.048E-02\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.952299\tres = 1.010E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.961228\tres = 9.731E-03\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.969911\tres = 9.376E-03\n", + "[ NORMAL ] Iteration 54:\tk_eff = 0.978351\tres = 9.033E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 0.986552\tres = 8.702E-03\n", + "[ NORMAL ] Iteration 56:\tk_eff = 0.994517\tres = 8.382E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.002250\tres = 8.074E-03\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.009756\tres = 7.776E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.017037\tres = 7.488E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.024100\tres = 7.211E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.030948\tres = 6.944E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.037585\tres = 6.687E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.044017\tres = 6.438E-03\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.050248\tres = 6.199E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.056282\tres = 5.968E-03\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.062125\tres = 5.746E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.067782\tres = 5.532E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.073256\tres = 5.325E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.078553\tres = 5.127E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.083677\tres = 4.935E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.088633\tres = 4.751E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.093425\tres = 4.573E-03\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.098059\tres = 4.402E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.102538\tres = 4.238E-03\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.106867\tres = 4.079E-03\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.111050\tres = 3.926E-03\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.115091\tres = 3.779E-03\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.118996\tres = 3.638E-03\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.122767\tres = 3.501E-03\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.126408\tres = 3.370E-03\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.129925\tres = 3.244E-03\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.133320\tres = 3.122E-03\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.136598\tres = 3.005E-03\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.139762\tres = 2.892E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.142815\tres = 2.784E-03\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.145762\tres = 2.679E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.148605\tres = 2.578E-03\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.151348\tres = 2.482E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.153995\tres = 2.388E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.156548\tres = 2.299E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.159010\tres = 2.212E-03\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.161384\tres = 2.129E-03\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.163674\tres = 2.049E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.165883\tres = 1.972E-03\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.168012\tres = 1.898E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.170064\tres = 1.826E-03\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.172043\tres = 1.757E-03\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.173951\tres = 1.691E-03\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.175790\tres = 1.628E-03\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.177562\tres = 1.566E-03\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.179270\tres = 1.507E-03\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.180916\tres = 1.450E-03\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.182502\tres = 1.396E-03\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.184030\tres = 1.343E-03\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.185503\tres = 1.292E-03\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.186922\tres = 1.244E-03\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.188289\tres = 1.197E-03\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.189605\tres = 1.152E-03\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.190874\tres = 1.108E-03\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.192096\tres = 1.066E-03\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.193273\tres = 1.026E-03\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.194407\tres = 9.873E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.195498\tres = 9.500E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.196550\tres = 9.141E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.197563\tres = 8.796E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.198538\tres = 8.464E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.199477\tres = 8.144E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.200381\tres = 7.836E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.201252\tres = 7.539E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.202091\tres = 7.254E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.202898\tres = 6.980E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.203675\tres = 6.715E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.204423\tres = 6.461E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.205144\tres = 6.217E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.205837\tres = 5.981E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.206505\tres = 5.755E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.207148\tres = 5.537E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.207766\tres = 5.327E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.208362\tres = 5.125E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.208935\tres = 4.931E-04\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.209487\tres = 4.744E-04\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.210018\tres = 4.564E-04\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.210529\tres = 4.391E-04\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.211021\tres = 4.225E-04\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.211495\tres = 4.064E-04\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.211950\tres = 3.910E-04\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.212389\tres = 3.762E-04\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.212811\tres = 3.619E-04\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.213217\tres = 3.482E-04\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.213608\tres = 3.349E-04\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.213984\tres = 3.222E-04\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.214346\tres = 3.100E-04\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.214695\tres = 2.982E-04\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.215030\tres = 2.869E-04\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.215353\tres = 2.760E-04\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.215663\tres = 2.655E-04\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.215962\tres = 2.554E-04\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.216249\tres = 2.457E-04\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.216526\tres = 2.364E-04\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.216792\tres = 2.274E-04\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.217048\tres = 2.187E-04\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.217294\tres = 2.104E-04\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.217531\tres = 2.024E-04\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.217759\tres = 1.947E-04\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.217979\tres = 1.873E-04\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.218190\tres = 1.802E-04\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.218393\tres = 1.733E-04\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.218588\tres = 1.667E-04\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.218776\tres = 1.604E-04\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.218957\tres = 1.543E-04\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.219131\tres = 1.484E-04\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.219298\tres = 1.427E-04\n", + "[ NORMAL ] Iteration 163:\tk_eff = 1.219459\tres = 1.373E-04\n", + "[ NORMAL ] Iteration 164:\tk_eff = 1.219614\tres = 1.321E-04\n", + "[ NORMAL ] Iteration 165:\tk_eff = 1.219763\tres = 1.270E-04\n", + "[ NORMAL ] Iteration 166:\tk_eff = 1.219907\tres = 1.222E-04\n", + "[ NORMAL ] Iteration 167:\tk_eff = 1.220045\tres = 1.176E-04\n", + "[ NORMAL ] Iteration 168:\tk_eff = 1.220177\tres = 1.131E-04\n", + "[ NORMAL ] Iteration 169:\tk_eff = 1.220305\tres = 1.088E-04\n", + "[ NORMAL ] Iteration 170:\tk_eff = 1.220428\tres = 1.046E-04\n", + "[ NORMAL ] Iteration 171:\tk_eff = 1.220546\tres = 1.006E-04\n", + "[ NORMAL ] Iteration 172:\tk_eff = 1.220660\tres = 9.680E-05\n", + "[ NORMAL ] Iteration 173:\tk_eff = 1.220769\tres = 9.311E-05\n", + "[ NORMAL ] Iteration 174:\tk_eff = 1.220874\tres = 8.956E-05\n", + "[ NORMAL ] Iteration 175:\tk_eff = 1.220975\tres = 8.614E-05\n", + "[ NORMAL ] Iteration 176:\tk_eff = 1.221073\tres = 8.286E-05\n", + "[ NORMAL ] Iteration 177:\tk_eff = 1.221166\tres = 7.970E-05\n", + "[ NORMAL ] Iteration 178:\tk_eff = 1.221256\tres = 7.666E-05\n", + "[ NORMAL ] Iteration 179:\tk_eff = 1.221343\tres = 7.373E-05\n", + "[ NORMAL ] Iteration 180:\tk_eff = 1.221426\tres = 7.092E-05\n", + "[ NORMAL ] Iteration 181:\tk_eff = 1.221506\tres = 6.822E-05\n", + "[ NORMAL ] Iteration 182:\tk_eff = 1.221583\tres = 6.562E-05\n", + "[ NORMAL ] Iteration 183:\tk_eff = 1.221658\tres = 6.311E-05\n", + "[ NORMAL ] Iteration 184:\tk_eff = 1.221729\tres = 6.070E-05\n", + "[ NORMAL ] Iteration 185:\tk_eff = 1.221797\tres = 5.839E-05\n", + "[ NORMAL ] Iteration 186:\tk_eff = 1.221863\tres = 5.616E-05\n", + "[ NORMAL ] Iteration 187:\tk_eff = 1.221927\tres = 5.402E-05\n", + "[ NORMAL ] Iteration 188:\tk_eff = 1.221988\tres = 5.196E-05\n", + "[ NORMAL ] Iteration 189:\tk_eff = 1.222047\tres = 4.997E-05\n", + "[ NORMAL ] Iteration 190:\tk_eff = 1.222103\tres = 4.807E-05\n", + "[ NORMAL ] Iteration 191:\tk_eff = 1.222158\tres = 4.623E-05\n", + "[ NORMAL ] Iteration 192:\tk_eff = 1.222210\tres = 4.447E-05\n", + "[ NORMAL ] Iteration 193:\tk_eff = 1.222260\tres = 4.277E-05\n", + "[ NORMAL ] Iteration 194:\tk_eff = 1.222308\tres = 4.114E-05\n", + "[ NORMAL ] Iteration 195:\tk_eff = 1.222355\tres = 3.957E-05\n", + "[ NORMAL ] Iteration 196:\tk_eff = 1.222400\tres = 3.805E-05\n", + "[ NORMAL ] Iteration 197:\tk_eff = 1.222443\tres = 3.660E-05\n", + "[ NORMAL ] Iteration 198:\tk_eff = 1.222484\tres = 3.520E-05\n", + "[ NORMAL ] Iteration 199:\tk_eff = 1.222524\tres = 3.386E-05\n", + "[ NORMAL ] Iteration 200:\tk_eff = 1.222562\tres = 3.257E-05\n", + "[ NORMAL ] Iteration 201:\tk_eff = 1.222599\tres = 3.132E-05\n", + "[ NORMAL ] Iteration 202:\tk_eff = 1.222635\tres = 3.013E-05\n", + "[ NORMAL ] Iteration 203:\tk_eff = 1.222669\tres = 2.898E-05\n", + "[ NORMAL ] Iteration 204:\tk_eff = 1.222701\tres = 2.787E-05\n", + "[ NORMAL ] Iteration 205:\tk_eff = 1.222733\tres = 2.680E-05\n", + "[ NORMAL ] Iteration 206:\tk_eff = 1.222763\tres = 2.578E-05\n", + "[ NORMAL ] Iteration 207:\tk_eff = 1.222792\tres = 2.480E-05\n", + "[ NORMAL ] Iteration 208:\tk_eff = 1.222820\tres = 2.385E-05\n", + "[ NORMAL ] Iteration 209:\tk_eff = 1.222847\tres = 2.294E-05\n", + "[ NORMAL ] Iteration 210:\tk_eff = 1.222873\tres = 2.206E-05\n", + "[ NORMAL ] Iteration 211:\tk_eff = 1.222898\tres = 2.122E-05\n", + "[ NORMAL ] Iteration 212:\tk_eff = 1.222922\tres = 2.041E-05\n", + "[ NORMAL ] Iteration 213:\tk_eff = 1.222945\tres = 1.963E-05\n", + "[ NORMAL ] Iteration 214:\tk_eff = 1.222968\tres = 1.888E-05\n", + "[ NORMAL ] Iteration 215:\tk_eff = 1.222989\tres = 1.816E-05\n", + "[ NORMAL ] Iteration 216:\tk_eff = 1.223009\tres = 1.746E-05\n", + "[ NORMAL ] Iteration 217:\tk_eff = 1.223029\tres = 1.680E-05\n", + "[ NORMAL ] Iteration 218:\tk_eff = 1.223048\tres = 1.615E-05\n", + "[ NORMAL ] Iteration 219:\tk_eff = 1.223067\tres = 1.554E-05\n", + "[ NORMAL ] Iteration 220:\tk_eff = 1.223084\tres = 1.494E-05\n", + "[ NORMAL ] Iteration 221:\tk_eff = 1.223101\tres = 1.437E-05\n", + "[ NORMAL ] Iteration 222:\tk_eff = 1.223117\tres = 1.382E-05\n", + "[ NORMAL ] Iteration 223:\tk_eff = 1.223133\tres = 1.329E-05\n", + "[ NORMAL ] Iteration 224:\tk_eff = 1.223148\tres = 1.279E-05\n", + "[ NORMAL ] Iteration 225:\tk_eff = 1.223162\tres = 1.230E-05\n", + "[ NORMAL ] Iteration 226:\tk_eff = 1.223176\tres = 1.183E-05\n", + "[ NORMAL ] Iteration 227:\tk_eff = 1.223190\tres = 1.137E-05\n", + "[ NORMAL ] Iteration 228:\tk_eff = 1.223203\tres = 1.094E-05\n", + "[ NORMAL ] Iteration 229:\tk_eff = 1.223215\tres = 1.052E-05\n", + "[ NORMAL ] Iteration 230:\tk_eff = 1.223227\tres = 1.012E-05\n" ] } ], @@ -1721,8 +1713,8 @@ "output_type": "stream", "text": [ "openmc keff = 1.223474\n", - "openmoc keff = 1.223258\n", - "bias [pcm]: -21.5\n" + "openmoc keff = 1.223227\n", + "bias [pcm]: -24.7\n" ] } ], @@ -1813,7 +1805,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1896,7 +1888,7 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAADUCAYAAACWNDiHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGXJJREFUeJzt3Xm0HFW59/HvAUEmgTDPQgAfkNcLIoogMYREBkUQ1Jfx\nhsj0iiBXERmuKOEiAgoBFZTBdUH0vQyiUbyARqKEIKAMIiL4Y7ohhkQkRAhh0iTn/rF3Q6c9Q59Q\n1UOd32etrNVdXbXr6ZOnntq1q7qqp7e3FzMzq55l2h2AmZmVwwXezKyiXODNzCrKBd7MrKJc4M3M\nKsoF3sysot7U7gDKFBG9wMaSZtVNmwAcKmlcP8tsCVwLzOtvnjzf8cBRwHLA8sB04DhJLyxlrHsA\nD0uaGRHrAjtKumGIbRwHrCvpi0sTQx/tzQDmStqhYfppwJnAZpJmDNLGUZIu7+ezqcDnJd1XRLxV\nFhE9wPHAkaScWwb4FXCapGcGWObzwFnAGEm31322C3AJsCLwJGmbmN1HGwcBJwIr5/X+AfhUX/M2\n+T12BF6W9EBEvBk4QNJVQ2xjP+DDkg5fmhj6aO9WYCtgQ0mL6qYfCnyP9Le7dZA2Bsrzq4AfSPpp\nEfEOhXvwdSJiK2AycOcg8+0JHAPsKmkr4O2kDeBrb2D1nwU2ya/HAPsMZeGIWEbSRUUV9zrr5J1e\nvY8AfRaVhpjWA07q57MeSWNd3Jt2FnAIsFddzj0H3BoRK/azzKWknHq6fmJErApcBxwpaXPg58BB\njQtHxNuBC4GP5nW+DZgB/Ocb+B6fAP4lv34nMH4oC+c8n1xUca/zd2C3hmkHAn9uIqZl6Wfbz/GO\nb0dxh4r34JfCAmBXYG8gBpjvHcBjkp4FkPRKRBwOLAaIiLWAK4BtcpsnSpqSe+bfBTYF3gx8U9Kk\niDgTGAtsHRHfIvW63hQRq0g6MCL2Bb5M2ok8BhwsaW5ETAQ2ALYDrskb7kaSjsy9khuA/YHNSEcY\nB0nqzUcx55A2/AuAKyT19PNdbyZt/P+Rv9v/IRWWtWozRMQ+wFdIRzIvAEdIuh+4A9goIv5E2qgf\nAb5D2qh3zzEeCuwIjJa0T25vCvATSRcP8H8wbETEGsBngO1qR6OSFgInR8RY4F+By/pY9NuSfhcR\nezdM3xe4T9Jdua1z+1n1NsDTtaM0SYsi4lRghRzXiqSdyCjgFeAsSd+PiJVI+b8dKSd+KOnEiPgk\n6f9+n4jYMH+nVSNiuqRREfE+0g5lBDCXlOdP5Hz9MLAacH9EPEg+Co+IK0lHIDuTdkCPAPtKeikf\nFX+HtA1eQCrC2/Zz1FnL81/k7zYCGAk8UZshInYCLiJth4uB4yXdkpdZLef5Xvm7Twc+BhwZEWfl\nOF4GTgPeJWlxRFwGPC/p8/38/d8w9+DrSJolaW4Ts95CKlDfjYi9IuItkuZLWpA/Pwd4SNJI4DDg\n6nw4+kVgVu4NjQXOjoiNc6/7KeCQvLFdBFyfi/tI0mHiQbm9X5EOrWs+BHxQ0qQ+4vww8AFS4o8B\nds7F4lvAOFIPao9BvusPSD2ZmgPzNAAi4k2kndYnJb0N+AlwXv74cGCmpK0k/T1P21jS2xo2sguB\nDSNi97wzewvw7UHiGk7eS/o7PtLHZz8FRve1kKTf9dPetsDciJgcEY9ExDW5U9Lo18AmEXFDROwX\nEWtIelnS3/LnnwOWl7QZKc8uiogNgE+RivTWwPbAhIjYRdIlwG+Bk3KenwrcmYv7W/J3+XdJWwBf\nJx1l1OwOHCPpxD7i/DhwALA5sDawX+5Vfxc4WtLWwJbAKv38PQD+G9gzb6cAHyXlcr3LgQvy9nsO\nr2+HhwOLcp7/T562A7CNpF/XFpb0Q2Amqei/k3TEcPoAMb1hw6HA3xoRf6r9A85+ow3mDed9pL/f\nd4Fn88ZSG2L5IHB13bybSnqVNIZ6bJ7+BPAXUu96IHsCt0p6ML+/hNQDWja//80AO6Xr8wb5Iqln\nswmpt/yIpAclLWbwQvoY8GJEbJfffxT4Yd3fYiGwQd347nRSz6c/NzZOyOOeRwHnkzaco3JslqxB\n/0NiT+fPh2J1UsH8PKmX/ippJ7uEPM7+HmAO8A3gmYi4JSJqQywfBK7J884iHT3OJv0/7itpcd4Z\n/JGBcwLSUcAsSb/I7V0NbFG3TT0q6dF+lr1R0ryci38g5fnbgDdLujnP800GrncvkHZoe+X3B5LO\nxdXbnrxdM3ie39xPDh8LnEza7o6V9NIAbbxhw2GIZte+TrLm11eREhhgrKSnmm1U0j3Av+YTWduT\nTjpeC+xEGr54rm7e2onXHUi99k2ARcD6DL6TXR14f9451TwPrJlfzxtg2efrXi8CliX1rOqXaeY7\nXw0cnHvrM/PwUP3nn4qIw0jDTisAA93gqM94Jd0XEfNJPaEH+5pnGJtLGorry7rAXyPiPUDtZOVk\nSacO0N7zwFRJjwFExNeBn/U1Yz5q+H95vq2BU4CbI2Jj/jnPa0ewWwCT8jmtRcDGpGGLgawObN6Q\n56+SeuSwdHn+t7rpzZwUruX5ncD6ku5vyPMDgePz0cayQH/Dmv3GK2lWRNxF6iD+oomY3pDhUOD7\nJWlIJ3hq8ljhk3lIpxe4NyJO5vWTs3NJyT8jz78pqZB+nzQWeEkeC2+muM4GbpH0sT7iWJrw57Pk\noer6TSxzLXAradzxmoYYdib1SN4jaUZEfIB0KDskEfEhYCGwQkR8UNJNQ22jwu4E1oiIbSX9vuGz\nvUnncn5LuhKkGU+ShixqFuV/S8hHbS9LEoCkhyNdqTWfdNRQy/Pa/BuRCtvFwL3AR/K4/a8b2+7D\nbNJVZDs0fhAR72jye9VrzPP1mljmJlLsBwHXN8SwISmvd8yFf0vSUfGQRMS2pA7h/aQLNUo9zzQc\nhmjKcChwSUSsBq+NQx8ETMuf3wBMyJ+9HbiPtDNdB7g3F/fDSCdrakn4D1IvpvH1z4FReSyeiHhP\n7nEtrXuBf4mILSJiGdJldwPKRzazgf9Lusqo3jrAX4GZ+eTaYcDK+cjmH8Aq+e/Tr4hYmTTmehzw\naeDiPM0ASc+TrqL5XkRsBinnIuJsUk/ymoGW78OPgdF1hfNo0nmlRnsA3490NVTtsstDSeeX5pLy\nfHxE9OR5fkcq+OsAv8vF/QMsOf7dmOer5nZ/A6wf6TJKImJkRHwvf7Y0HgWWi4hd8/tPMvCRJZJe\nAaaQhq4ah2fWBl4E/pTz+egc5yr5eyyTe/b9ytvbZcAJpOHa0/KOozQu8HUi4pSIeIW0px4TEa9E\nuqKj0WeAPwF3R4RIe/J1SZeAQerRbhTpOvJrSVcDvEw6yTo5Ih4gJfylwOW5eF9PuhLmBFKS7RYR\nd0uaQxqfnhwRD5NOwDYmX9Nye/9OOln7G9JYYjOuBv4o6bmG6T8jFf/Hc9wXkg6ZfwA8QOrR/aVu\nLLUvZwD/LekPuSc6lXTVkGWSziMVh5/mYYyHSL3ocXUnsJcQEQtyPr8VmJrz+f2SZpJydXJEPEoa\n/jmhjya+Stqh/zLn+eOkiwM+nD+/gLRzf5J0hHdibvvLwPmRrnYZTfr/PSMf7U0Gzo2IScDted2z\nSZcpfgz4Zs7zyaRrx5fqfub5nNcxwJURcT9pG13MIEWelOfzJD3UMP33pB7+I6Qjqp8Cd+XvPSd/\nl5n5O/bnU8AcSTfnv9PFpO25ND2+H/zwE+ka9N78ehvgdkkj2hyWWWnyEeECYPV8RDQsuAc/zOTD\ny6dqh8Kky8sG/GGXWTeKiLsj4oD89gDSGP+wKe7gHvywFOmn3meTdvBzSD9Meqy9UZkVK9LtGC4m\n3Y5hPuk6+rvbG1VrucCbmVWUh2jMzCqqo66D77l30DPcTRv5rj8W1RRPTNumsLasvXpHD/jjlFLs\nys8Ky+tpPQNdjDRU1w0+i3WN3t6J/5Tb7sGbmVWUC7yZWUW5wJuZVZQLvJlZRZV+kjUiLiDdz7oX\n+Lfhdh2qVZPz2rpBqT34iBgNbClpJ+AI0j2lzbqa89q6RdlDNGNJd65D0sPAiEiPlTPrZs5r6wpl\nF/j1WPJJNM/Q3H2ZzTqZ89q6QqtPsrb8RyZmLeC8to5UdoGfzZI9mw1IN7cy62bOa+sKZRf4KaSb\n+BMR2wOz655PatatnNfWFUot8JLuID2v9A7SlQbHlrk+s1ZwXlu3KP06eEmnlL0Os1ZzXls38C9Z\nzcwqygXezKyiXODNzCrKBd7MrKI66olOLCiuqZV4qbC2dhr9y8LaunPaboW1Zd1hWs9dhbV1OnsV\n1tYZnF9YW8n8gtuzN8o9eDOzinKBNzOrKBd4M7OKcoE3M6soF3gzs4pygTczqygXeDOzinKBNzOr\nKBd4M7OKcoE3M6soF3gzs4pygTczqygXeDOzinKBNzOrKBd4M7OKcoE3M6soF3gzs4pygTczq6jO\nemRfgR6c9u7C2jpz9ImFtfXq6OULa+u+3+xSWFsALOzQtuw1Z3B6YW2dw+cKawvglEIfAejH/xXB\nPXgzs4pygTczqygXeDOzinKBNzOrKBd4M7OKKv0qmoj4KjAqr+tsST8qe51mZXNeWzcotQcfEWOA\nd0jaCdgTuLDM9Zm1gvPaukXZQzTTgY/n188BK0fEsiWv06xszmvrCqUO0UhaCCzIb48AbpK0qMx1\nmpXNeW3doiW/ZI2IfUkbwu6tWJ9ZKzivrdO14iTrHsAXgD0lPV/2+sxawXlt3aDUAh8RqwFfA8ZJ\nmlfmusxaxXlt3aLsHvwBwFrAdRFRmzZe0syS12tWJue1dYWyT7JeBlxW5jrMWs15bd3Cv2Q1M6so\nF3gzs4pygTczqygXeDOziurp7e0ddKZ8WdgaQE9tmqQnCg9mGoMH0+0KvGvJjyfvUVxjwH/wxcLa\nmrFos8LamjdrncLa6n3rcj3171uR2z09E6uf18B0ziisrVHcVVhbcHOBbXWu3t6JPY3TBr2KJiK+\nAXwCeIbXN4JeYGSh0Zm1mHPbqq6ZyyTHAGtLeqXsYMxazLltldbMGPyj3gCsopzbVmnN9OBnRcRt\nwO3AwtpESV8qLSqz1nBuW6U1U+CfBaaWHYhZGzi3rdIGLfCSijs1btZBnNtWdf0W+IiYDv1ftijp\n/aVEZFYy57YNFwP14E9rWRRmreXctmGh3wIvaVorAzFrFee2DRe+VYGZWUW5wJuZVVRTD/yIiBHA\nlqQTU5I0v9SozFrEuW1VNmgPPiI+CzxGuk3WN4HHI+KYsgMzK5tz26qumR78YcDI2pPjc4/nV8C3\nywzMrAWc21ZpzYzB/6W2AQBI+htQ+K2CzdrAuW2V1kwP/vGI+DEwhbRDGAM8GxGHA0j6zxLjMyuT\nc9sqrZkCvxLwN+Dd+f38vNwo0okpbwTWrZzbVmnN3IvmE60IxKzVnNtWdc080enP9HHfDkmblBKR\nWYs4t63qmhmi2aXu9fLAWNKhrS2NzxTX1Ed6diquMWDxs6MKa+usNT5XWFs/f2uRz579QP0b53aB\nRnFOYW317v7ewtrqeaTAR+LOmFhcWy3QzBDNkw2THo2InwOTygnJrDWc21Z1zQzR7NYwaWNg83LC\nMWsd57ZVXTNDNF+se91LutLgk+WEY9ZSzm2rtGaGaMa0IhCzVnNuW9U1M0SzFfAtYAdSL+cu4FhJ\njzWzgohYEXgQOFPSlUsfqlmxnNtWdc3cquAi4HxgfWBD4BKGdq+O04B5Qw/NrHTObau0ZsbgeyTd\nWPd+ckR8upnGcw9pa+DGweY1awPntlVaMz345SNi+9qbiHg3Td5HHjgPOGFpAjNrAee2VVozyXwi\n8F8RsU5+PwcYP9hCETEeuE3SjIh4AyGalca5bZXWTIH/s6StImI1oHcIT7z5EDAyIvYHNgJejYhZ\nkm5Z2mDNCubctkprpsD/f2BM/X2zmyHpgNrriJgIzPAGYB3GuW2V1kyBV0RcBdwB/P21ib5XtnU/\n57ZVWjMF/s3AImDHumlDule2pIlDC8usJZzbVmm+H7wNW85tq7oBC3xE7Cdpcn59LekHIS8DB0t6\ntgXxmZXCuW3DQb/XwUfE8cAZEVHbCWxCujnTPcAXWhCbWSmc2zZcDPRDpwnAOEkL8/tXJE0DJpKe\nWWnWrSbg3LZhYKACv0DSX+ve/xeApH8AL5YalVm5nNs2LAw0Br9K/RtJl9e9Xa2ccGxI7plYaHPL\nrLlqYW31Xl7cI/vefuRDhbWVH9nn3C7Fy4W11DPlssLa6j23p7C2ev6nwMf/AVwysdj2GgzUg38g\nIo5qnBgRJwO/Ki8ks9I5t21YGKgHfzLwk3zfjXvyvDsDc4F9WhCbWVmc2zYs9FvgJT0NvDcixgLb\nkH4Qcp2k6a0KzqwMzm0bLpr5odNUYGoLYjFrKee2VV0z94M3M7Mu5AJvZlZRLvBmZhXlAm9mVlEu\n8GZmFeUCb2ZWUS7wZmYV5QJvZlZRLvBmZhXlAm9mVlEu8GZmFeUCb2ZWUS7wZmYV5QJvZlZRg94u\n2DrYgmKbW+G5CYW11XPhCYW11bt1cY9c4+HimrIyPVVYSz0nX19YW70nFZiLQM+4gh8B2MA9eDOz\ninKBNzOrKBd4M7OKcoE3M6uo0k+yRsQhwEnAQuBLkm4se51mZXNeWzcotQcfEWsCpwO7AHsD+5a5\nPrNWcF5btyi7Bz8OuEXSC8ALwNElr8+sFZzX1hXKLvCbAitFxA3ACGCipKklr9OsbJvivLYuUPZJ\n1h5gTWB/YAJwRUQU+0sBs9ZzXltXKLvAPw3cIWmhpMdJh7Nrl7xOs7I5r60rlF3gpwC7RcQy+cTU\nKsDcktdpVjbntXWFUgu8pKeA64G7gJuBT0taXOY6zcrmvLZuUfp18JIuBS4tez1mreS8tm7gX7Ka\nmVWUC7yZWUW5wJuZVZQLvJlZRbnAm5lVVE9vb7mPjBqKnml0TjDD0QrFNTV1x50La+u2njsLa2ti\nb2/Lf3Ha0zPReV0ZXyi0tZtYvrC29uojt92DNzOrKBd4M7OKcoE3M6soF3gzs4pygTczqygXeDOz\ninKBNzOrKBd4M7OKcoE3M6soF3gzs4pygTczqygXeDOzinKBNzOrKBd4M7OKcoE3M6soF3gzs4py\ngTczqygXeDOziuqoR/aZmVlx3IM3M6soF3gzs4pygTczqygXeDOzinKBNzOrKBd4M7OKelO7AxiK\niLgAeC/QC/ybpLvbHBIAEfFVYBTp73m2pB+1OaTXRMSKwIPAmZKubHM4AETEIcBJwELgS5JubHNI\nbefcHppOzGvovNzumh58RIwGtpS0E3AE8I02hwRARIwB3pHj2hO4sM0hNToNmNfuIGoiYk3gdGAX\nYG9g3/ZG1H7O7aXSUXkNnZnbXVPggbHAjwEkPQyMiIhV2xsSANOBj+fXzwErR8SybYznNRGxFbA1\n0Ek95HHALZJekDRH0tHtDqgDOLeHoEPzGjowt7tpiGY94N6698/kafPbE04iaSGwIL89ArhJ0qI2\nhlTvPOA4YEKb46i3KbBSRNwAjAAmSpra3pDazrk9NJ2Y19CBud1NPfhGPe0OoF5E7EvaCI5rdywA\nETEeuE3SjHbH0qAHWBPYn7SBXhERHfV/2QE66u/RSbndwXkNHZjb3dSDn03q1dRsAMxpUyxLiIg9\ngC8Ae0p6vt3xZB8CRkbE/sBGwKsRMUvSLW2O62ngjtw7fDwiXgDWBv7a3rDayrndvE7Na+jA3O6m\nAj8FOAO4NCK2B2ZLeqHNMRERqwFfA8ZJ6piTPpIOqL2OiInAjA7ZCKYAV0bEuaTD2FWAue0Nqe2c\n203q4LyGDsztrinwku6IiHsj4g5gMXBsu2PKDgDWAq6LiNq08ZJmti+kziXpqYi4HrgrT/q0pMXt\njKndnNvV0Im57dsFm5lVVDefZDUzswG4wJuZVZQLvJlZRbnAm5lVlAu8mVlFucCbmVVU11wH320i\nYj3gXGBb4AXgLcAVkr7e4jjeBXyF9Is6SPc5OVXSfYMstzPwF0lPlByidRnndvdwD74E+f4TPwHu\nlLSdpFHAHsBREfHRfuYvI451chxflrS9pO1JG8QNEbHWIIt/AhhZRlzWvZzb3cU/dCpBRIwDzpD0\nvobpy0v6e359JfAqsBVwCLAhcD7wD9JDH46T9FBE3EpK4lsiYlPgdkkb5eVfAjYH1geulDSpYX1f\nAZaVdHLD9EnAS5JOi4heYDlJCyNiAumWpz8ErgCeBD4r6ZfF/GWs2zm3u4t78OXYBrincWJtA6iz\nsqTRkmYBV5ESbgwwCbi4ifVsJGkP4P3AafmBA/XeCfy2j+XuBLbvr1FJk4H7gc9VfQOwIXNudxGP\nwZdjEXV/24g4GjgYWAH4s6TaQxTuyJ+vDqxb95i2W4FrmljPFABJz0XEI8CWwLN1n79I/zvxYX3/\nF1tqzu0u4h58OR4Adqq9kXSZpF2BU0iHnDW1Xk/jOFlP3bT6z5ZvmK/+/6+Hf25niTjqvJu+ez+N\n7Zs1cm53ERf4Eki6DXg2Ik6tTYuI5YDdgZf7mP95YE5E7JgnjeP1O9LNBzbOr3drWHRMbnsEsAWg\nhs8vBj6en61Zi2Nn0gMJalc81Lc/pm7ZxcByA35RG3ac293FQzTl2Qf4SkTcT0q0lUnPuDy4n/nH\nA5MiYhHpMPiYPP0i4JKIOBj4WcMy8yJiMulk1OmSnqv/UNKzEbEr8I2IOI/UC3oa2K/u4Q3nAFMi\n4lHg97y+QfyCdH/yz0j60dC/vlWYc7tL+CqaLpWvNLhd0nfaHYtZkZzbxfEQjZlZRbkHb2ZWUe7B\nm5lVlAu8mVlFucCbmVWUC7yZWUW5wJuZVZQLvJlZRf0vhqRibo7514YAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1923,6 +1915,15 @@ "# Show the plot on screen\n", "plt.show()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index b807ab4a9c..842c334a2e 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -32,7 +32,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/wboyd/anaconda2/lib/python2.7/site-packages/matplotlib/__init__.py:1350: UserWarning: This call to matplotlib.use() has no effect\n", + "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.1+1178.ga40c9ec-py2.7-linux-x86_64.egg/matplotlib/__init__.py:1362: UserWarning: This call to matplotlib.use() has no effect\n", "because the backend has already been chosen;\n", "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", "or matplotlib.backends is imported for the first time.\n", @@ -459,7 +459,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAWFSURB\nVGje7Zs7cttADIZ9CSvXcrP0iCxUqbBc8Ag6xR6BhV2EvYvwFD4CCx1ABT1jMdgndpegRQnOrCbj\npPlGESISC4A/gd27e8H583CX3b4+iKJrRHkS4vkghMPBonRYWGwtfgD2YN+dRDUOoh6lACw0Noi9\nw2fESuEoAR/uVuMolX039oXGT7F3eFL2iEfhUX1f4cPdL/ishs+68ai+udE4xPhexbjX2FfjGNoP\nj/DPNX4Tsd+EODr8FvsVdf1Hd9P2VvCi4+s/aXvrf+upAD+1/9GV1mkOH5X9vV6THtfvACslcaUC\nbESL61drBPtdI8SrFMWrELsXCkuFDYW75gbiP7d9Cf7bAYI/aCwUShrBvh30+lWQkzVgZ/HD4Oix\nNCgcQpJ3BxU/Ln91elKoM5VEE38QtJ+Yv6cQ9xjKNYayyl8TypP8DfJnQ2H/b/N3ye9P83cT33SQ\nv/sQh9gV7zZ/0dNj5HQaC5vVzv9+/WFN2w8KVaZ2BwL1+pv4g0x1QRfjq0dB4Q3kT277oP6VNL6g\nKxNU9a8zK+WLbi/WwpdihbboKqyxFOulHMj6v4W/AXbmUeAxrv9J/CqEBXaRKsXaodD4nsYvkT/G\n6H1D4SR/iPy1Roj9JsQ5e18/7EUHv1+Fvx/Xj5V9Ugb5K8TW4TZEEdcvoz/up0VTe9qsVIppKVX6\na7D6y9ZvwEKjrtQxPtv6fXII9vCxKOGaIeAIfEF8IvAG8ie3vRK9rRQl+PPpSctbhfpTUCpviH+k\nxsZgpT91+snoX1l49KK3iUQvICRy5aUw6l8leoVwoo3Uv1rKreF/UFLY6d9QP4L9Wf2r7EP9GOSf\ncsjZ56f60kz+XmVPXv+RuP49ff0T/53Rv6n/7m2lvXT9Wqd/VUz8hvh5M/ED6ILmt4mfHYZSaePn\nTWpsf/SvqV9O6dLYYClLEetnoH/LBLFoBvrX189uTv8++kot5vTvQD4/9jP690g9P/4z/bvo/XVG\n/xYoZZx+8fr3MxAtsf7tUOkG2JqsTtCIpgCt/qX1226KqZS7gfzJbe+c9jLrtIZ8lXD+s4umlW6A\nKIVrlML2/cXjgPFjlJqIRC+Fj0bVJe+vSh56pSdR6YkQ1ygF10Wqf0FeLta/iKn9Mv1L24ti2e+7\nW4n1b3T/W+L+t9H9T/SvVboUmqJJon1/hZq8LnzRDlDrX1u0xRT1+6vEpomMmyYkqi95vIH8yW1P\nN+122KkLcNLKi/WTF01z/cNASrWE/l3ev6T17zX909z9X27/euK/Rf3zWP+Waf9eEv37KkWJ+rfD\nl6ZglNDa+cEBhwYDvkoNP/rX69814NaI3imq0l7OYDy/qSdDGwr7r+Y3VbzoKZr6XX2lfxfOb87q\nXzr+b1j/Xlp/nP6dn98McdH7cn7zjPObKsYWS3Eb9w8n85smHtqQuPuZ30T2dlIT6F9xFl+n8xsl\negL9a4c2KRr9W4rp/GYqumiM9Nec/j2v/yj9u1h//hv9e93vc++f63/u+rPjL3f+5Lbn1j9m/eXW\nf+7zh/v8+2b9e/Hzn6s/uPqHrb8g71n6L3f+5Lbnvn8w33+4718/+5d47//c/gO7/5E7/nPbc/tv\n3P4fs//I7X9y+6/fqH+v6j9z+9/c/ju3/8+eP+TOn9z23PkXc/7Gnf9x5483q38Xzn+582fu/Js9\nfy8kb/6fO39y23P3n3S8/S/c/Tfc/T83uX/pgv1XE/9duP+Lu/+Mvf8td/znti8kb/8ld/9nx9t/\nSjw/Ltr/yt1/+337f6/bf0zoB3nJ/ucVc/81d/83e/957vzJbc89/8A8f8E9/5HE78XnT/4H/cs5\nf8Q9/8Q9f8U+/5U7f3Lbc88fdrzzjyvm+cuf/Uu887/c88fs88954/8vO4SjPC+2QRIAAAAldEVY\ndGRhdGU6Y3JlYXRlADIwMTYtMDUtMTJUMjE6MDQ6MzMtMDQ6MDDlS7KzAAAAJXRFWHRkYXRlOm1v\nZGlmeQAyMDE2LTA1LTEyVDIxOjA0OjMzLTA0OjAwlBYKDwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -539,6 +539,7 @@ "\n", "* `TotalXS` (`\"total\"`)\n", "* `TransportXS` (`\"transport\"`)\n", + "* `NuTransportXS` (`\"nu-transport\"`)\n", "* `AbsorptionXS` (`\"absorption\"`)\n", "* `CaptureXS` (`\"capture\"`)\n", "* `FissionXS` (`\"fission\"`)\n", @@ -725,8 +726,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 502482dcf630ee6e290c15b8535e6e850a351c88\n", - " Date/Time: 2016-05-10 20:53:35\n", + " Git SHA1: ae588276014a905ecc6e0967bf08288ecec5b550\n", + " Date/Time: 2016-05-12 21:04:33\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -813,20 +814,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.8400E-01 seconds\n", - " Reading cross sections = 1.4100E-01 seconds\n", - " Total time in simulation = 7.7003E+01 seconds\n", - " Time in transport only = 7.6958E+01 seconds\n", - " Time in inactive batches = 6.4820E+00 seconds\n", - " Time in active batches = 7.0521E+01 seconds\n", - " Time synchronizing fission bank = 8.0000E-03 seconds\n", - " Sampling source sites = 6.0000E-03 seconds\n", + " Total time for initialization = 4.5500E-01 seconds\n", + " Reading cross sections = 1.1200E-01 seconds\n", + " Total time in simulation = 5.6386E+01 seconds\n", + " Time in transport only = 5.6351E+01 seconds\n", + " Time in inactive batches = 4.3700E+00 seconds\n", + " Time in active batches = 5.2016E+01 seconds\n", + " Time synchronizing fission bank = 5.0000E-03 seconds\n", + " Sampling source sites = 2.0000E-03 seconds\n", " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 6.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 7.7616E+01 seconds\n", - " Calculation Rate (inactive) = 3856.83 neutrons/second\n", - " Calculation Rate (active) = 1418.02 neutrons/second\n", + " Total time elapsed = 5.6857E+01 seconds\n", + " Calculation Rate (inactive) = 5720.82 neutrons/second\n", + " Calculation Rate (active) = 1922.49 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -952,8 +953,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/wboyd/Documents/NSE-CRPG-Codes/openmc/openmc/tallies.py:1996: RuntimeWarning: invalid value encountered in true_divide\n", - " self_rel_err = data['self']['std. dev.'] / data['self']['mean']\n" + "/usr/local/lib/python2.7/dist-packages/openmc-0.7.1-py2.7.egg/openmc/tallies.py:1988: RuntimeWarning: invalid value encountered in true_divide\n" ] }, { @@ -1301,122 +1301,122 @@ "[ NORMAL ] Computing the eigenvalue...\n", "[ NORMAL ] Iteration 0:\tk_eff = 0.854370\tres = 0.000E+00\n", "[ NORMAL ] Iteration 1:\tk_eff = 0.801922\tres = 1.521E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.761746\tres = 6.349E-02\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.732367\tres = 5.029E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.711075\tres = 3.869E-02\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.696557\tres = 2.912E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.687673\tres = 2.044E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.683470\tres = 1.277E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.683129\tres = 6.141E-03\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.685949\tres = 7.889E-04\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.691329\tres = 4.181E-03\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.698755\tres = 7.875E-03\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.707786\tres = 1.077E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.718050\tres = 1.295E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.729230\tres = 1.452E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.741058\tres = 1.559E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.753310\tres = 1.624E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.765800\tres = 1.655E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.778371\tres = 1.660E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.790897\tres = 1.643E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.803273\tres = 1.611E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.815415\tres = 1.566E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.827256\tres = 1.513E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.838747\tres = 1.453E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.849847\tres = 1.390E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.860527\tres = 1.324E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.870770\tres = 1.258E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.880562\tres = 1.191E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.889897\tres = 1.125E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.898776\tres = 1.061E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.907202\tres = 9.986E-03\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.915181\tres = 9.382E-03\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.922724\tres = 8.803E-03\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.929843\tres = 8.249E-03\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.936550\tres = 7.721E-03\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.942861\tres = 7.220E-03\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.948791\tres = 6.744E-03\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.954357\tres = 6.295E-03\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.959575\tres = 5.871E-03\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.964461\tres = 5.472E-03\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.969033\tres = 5.097E-03\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.973306\tres = 4.744E-03\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.977297\tres = 4.414E-03\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.981021\tres = 4.104E-03\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.984493\tres = 3.814E-03\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.987729\tres = 3.543E-03\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.990742\tres = 3.290E-03\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.993546\tres = 3.053E-03\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.996153\tres = 2.833E-03\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.998577\tres = 2.627E-03\n", - "[ NORMAL ] Iteration 50:\tk_eff = 1.000829\tres = 2.436E-03\n", - "[ NORMAL ] Iteration 51:\tk_eff = 1.002920\tres = 2.257E-03\n", - "[ NORMAL ] Iteration 52:\tk_eff = 1.004860\tres = 2.091E-03\n", - "[ NORMAL ] Iteration 53:\tk_eff = 1.006661\tres = 1.937E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.008330\tres = 1.793E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.009877\tres = 1.660E-03\n", - "[ NORMAL ] Iteration 56:\tk_eff = 1.011311\tres = 1.536E-03\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.012639\tres = 1.421E-03\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.013868\tres = 1.314E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.015006\tres = 1.215E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.016059\tres = 1.124E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.017033\tres = 1.039E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.017933\tres = 9.596E-04\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.018766\tres = 8.865E-04\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.019535\tres = 8.188E-04\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.020246\tres = 7.562E-04\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.020903\tres = 6.981E-04\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.021509\tres = 6.445E-04\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.022069\tres = 5.948E-04\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.022586\tres = 5.489E-04\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.023063\tres = 5.064E-04\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.023503\tres = 4.671E-04\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.023909\tres = 4.308E-04\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.024284\tres = 3.973E-04\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.024629\tres = 3.663E-04\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.024948\tres = 3.377E-04\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.025241\tres = 3.113E-04\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.025512\tres = 2.869E-04\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.025761\tres = 2.644E-04\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.025991\tres = 2.436E-04\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.026203\tres = 2.244E-04\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.026398\tres = 2.067E-04\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.026578\tres = 1.904E-04\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.026743\tres = 1.754E-04\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.026895\tres = 1.615E-04\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.027036\tres = 1.487E-04\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.027165\tres = 1.369E-04\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.027284\tres = 1.260E-04\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.027393\tres = 1.160E-04\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.027494\tres = 1.068E-04\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.027587\tres = 9.825E-05\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.027672\tres = 9.041E-05\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.027751\tres = 8.319E-05\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.027823\tres = 7.654E-05\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.027889\tres = 7.042E-05\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.027950\tres = 6.478E-05\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.028007\tres = 5.959E-05\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.028058\tres = 5.481E-05\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.028106\tres = 5.041E-05\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.028150\tres = 4.636E-05\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.028190\tres = 4.263E-05\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.028227\tres = 3.920E-05\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.028261\tres = 3.604E-05\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.028292\tres = 3.314E-05\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.028321\tres = 3.047E-05\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.028347\tres = 2.801E-05\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.028371\tres = 2.575E-05\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.028394\tres = 2.367E-05\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.028414\tres = 2.175E-05\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.028433\tres = 1.999E-05\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.028450\tres = 1.838E-05\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.028466\tres = 1.689E-05\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.028481\tres = 1.552E-05\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.028494\tres = 1.426E-05\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.028507\tres = 1.310E-05\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.028518\tres = 1.204E-05\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.028528\tres = 1.106E-05\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.028538\tres = 1.017E-05\n" + "[ NORMAL ] Iteration 2:\tk_eff = 0.761745\tres = 6.349E-02\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.732366\tres = 5.029E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.711073\tres = 3.869E-02\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.696554\tres = 2.912E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.687670\tres = 2.044E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.683465\tres = 1.277E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.683124\tres = 6.142E-03\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.685943\tres = 7.897E-04\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.691322\tres = 4.180E-03\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.698747\tres = 7.873E-03\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.707777\tres = 1.076E-02\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.718040\tres = 1.295E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.729218\tres = 1.452E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.741045\tres = 1.559E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.753296\tres = 1.624E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.765785\tres = 1.655E-02\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.778355\tres = 1.659E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.790879\tres = 1.643E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.803254\tres = 1.610E-02\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.815394\tres = 1.566E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.827235\tres = 1.513E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.838724\tres = 1.453E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.849823\tres = 1.390E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.860503\tres = 1.324E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.870744\tres = 1.258E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.880535\tres = 1.191E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.889870\tres = 1.125E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.898748\tres = 1.061E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.907172\tres = 9.985E-03\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.915151\tres = 9.382E-03\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.922693\tres = 8.802E-03\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.929811\tres = 8.248E-03\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.936517\tres = 7.720E-03\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.942827\tres = 7.219E-03\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.948757\tres = 6.744E-03\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.954322\tres = 6.295E-03\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.959539\tres = 5.871E-03\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.964425\tres = 5.472E-03\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.968996\tres = 5.096E-03\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.973268\tres = 4.744E-03\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.977259\tres = 4.413E-03\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.980982\tres = 4.104E-03\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.984454\tres = 3.814E-03\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.987689\tres = 3.543E-03\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.990702\tres = 3.289E-03\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.993505\tres = 3.053E-03\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.996112\tres = 2.832E-03\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.998536\tres = 2.627E-03\n", + "[ NORMAL ] Iteration 50:\tk_eff = 1.000787\tres = 2.435E-03\n", + "[ NORMAL ] Iteration 51:\tk_eff = 1.002878\tres = 2.257E-03\n", + "[ NORMAL ] Iteration 52:\tk_eff = 1.004818\tres = 2.091E-03\n", + "[ NORMAL ] Iteration 53:\tk_eff = 1.006618\tres = 1.937E-03\n", + "[ NORMAL ] Iteration 54:\tk_eff = 1.008287\tres = 1.793E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 1.009834\tres = 1.660E-03\n", + "[ NORMAL ] Iteration 56:\tk_eff = 1.011268\tres = 1.536E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.012595\tres = 1.421E-03\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.013824\tres = 1.314E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.014962\tres = 1.215E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.016015\tres = 1.123E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.016988\tres = 1.038E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.017889\tres = 9.595E-04\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.018721\tres = 8.864E-04\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.019490\tres = 8.187E-04\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.020201\tres = 7.560E-04\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.020858\tres = 6.980E-04\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.021464\tres = 6.444E-04\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.022024\tres = 5.947E-04\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.022541\tres = 5.488E-04\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.023017\tres = 5.063E-04\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.023458\tres = 4.670E-04\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.023863\tres = 4.308E-04\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.024238\tres = 3.972E-04\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.024583\tres = 3.663E-04\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.024902\tres = 3.376E-04\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.025195\tres = 3.112E-04\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.025466\tres = 2.868E-04\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.025715\tres = 2.643E-04\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.025945\tres = 2.435E-04\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.026157\tres = 2.244E-04\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.026352\tres = 2.067E-04\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.026531\tres = 1.904E-04\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.026697\tres = 1.753E-04\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.026849\tres = 1.614E-04\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.026989\tres = 1.487E-04\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.027118\tres = 1.369E-04\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.027237\tres = 1.260E-04\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.027347\tres = 1.160E-04\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.027447\tres = 1.067E-04\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.027540\tres = 9.823E-05\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.027625\tres = 9.039E-05\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.027704\tres = 8.317E-05\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.027776\tres = 7.652E-05\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.027843\tres = 7.040E-05\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.027904\tres = 6.476E-05\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.027960\tres = 5.957E-05\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.028012\tres = 5.479E-05\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.028059\tres = 5.039E-05\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.028103\tres = 4.635E-05\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.028143\tres = 4.262E-05\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.028180\tres = 3.919E-05\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.028214\tres = 3.603E-05\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.028245\tres = 3.313E-05\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.028274\tres = 3.046E-05\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.028300\tres = 2.800E-05\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.028324\tres = 2.574E-05\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.028347\tres = 2.366E-05\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.028367\tres = 2.175E-05\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.028386\tres = 1.999E-05\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.028403\tres = 1.837E-05\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.028419\tres = 1.688E-05\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.028434\tres = 1.551E-05\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.028447\tres = 1.426E-05\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.028460\tres = 1.310E-05\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.028471\tres = 1.204E-05\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.028481\tres = 1.106E-05\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.028491\tres = 1.016E-05\n" ] } ], @@ -1449,8 +1449,8 @@ "output_type": "stream", "text": [ "openmc keff = 1.028263\n", - "openmoc keff = 1.028538\n", - "bias [pcm]: 27.5\n" + "openmoc keff = 1.028491\n", + "bias [pcm]: 22.8\n" ] } ], @@ -1558,7 +1558,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 43, @@ -1567,9 +1567,9 @@ }, { "data": { - "image/png": "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\n2ajR7Q6wgAAAAABJRU5ErkJggg==\n", + "image/png": "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\nfHTc1tr58WfQa96JP1u/NcN5cd/L4s/xL5/Rv3hAT+D6cDWAztRFRHJFRV1EJEdU1EVEckRFXUQk\nR1TURURyREVdRCRHVNRFRHJERV1EJEdKMvhojM0uunzkcw+F63hiUTwIh1fiQQh7984waOgrcciB\n5z4Rxjz3oxFhzMruOxddfsw18cAiOy4MYeQv4+22NfF6/MF4H1uGQ3WrnR7GVJNhQoISGzzu8UaX\n7c2r4f1taXxc1uwQ7/MNGSbk6Lowbmv/LfFkNDW3bQ5j7Ka4P7ufsTqM2fHUd+IVZdiuDRvi1bBj\nvJ9rbo7bOqhqXhjz2rg3iy7vRzdmhmtJ6ExdRCRHVNRFRHJERV1EJEdU1EVEckRFXUQkR1TURURy\nREVdRCRHVNRFRHKkRYOPzGwRsBbYCmxx91FZ7jdw+pKiy79/wsXxSvrFA1Gqp8QDAy6b9O0wZuKB\nk8OY517M8Pw4Mp5tpS/FByHYyLgd3xi3wznxrC7+vbitDaPjprp0jY/VMn4axmTYqlbT3NxeuKbx\nmaAeqDk6XsFJ8b6qGZJhVqOX471lb8Q5UPONDHk9N27LH4zbsqPitro9sSVez8p4H+7aK8N2BZMR\nAXBi3NZUj2d06rfm5aLL+1ZnL9WtMaL0KHdf2QrrESk3ym2pOLr8IiKSIy0t6g7cb2Zzzezc1uiQ\nSJlQbktFaunll8PdfYmZ7QbcZ2bPufus1uiYSIkpt6UitehM3d2XpL9XANOA971tZma1ZuZ1Py1p\nTySLwnwzs9rmrEO5LeUoS243u6ib2U5m1q3ub+BjwPz6ce5e6+5W99Pc9kSyKsw3d69t6v2V21Ku\nsuR2Sy6/9AammVndem529z+3YH0i5UK5LRWr2UXd3RcCw1qxLyJlQbktlczc2/dSoJk5zxb/wP7W\nHvGMI8ftelcYs4aaMGYDXcKYudcdHsace/7VYcyUp84PY7rss6ro8vVbdw3XYVPDELY9HF8teOyO\nD4YxY558Koz58rB4YNE+vBLGXPLqD8MY+nWmVJdCzMyZ13hu/3zYWeE6DvVHwpjNdApjDtjyfBjT\n9TvxgKCHrxgexnTweD2jhz8dxjz2ZJxvWzyuDR/6VjzT0NrL4/PZf1bvH8Z0IJ716REODWPOf+q3\nRZeP3QlmDqzKlNv6nLqISI6oqIuI5IiKuohIjqioi4jkiIq6iEiOqKiLiOSIirqISI6oqIuI5Ehr\n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\njRmGBmRpq3P0mAf6Z1hPpwz96VwVb9eeWfqc5WGU5XhtznDcKZY3sP/+HZg5M8NqKNXgI5E2VNrB\nRyJtJ0tut3tRf18HzLxUD8LmUp/bRyX2uVAl9l99bntt3V9dUxcRyREVdRGRHCmHop7l227Kjfrc\nPiqxz4Uqsf/qc9tr0/6W/Jq6iIi0nnI4UxcRkVaioi4ikiMlLepmdqyZPW9mL5rZhFL2JSszW2Rm\nT5vZPDOLv9W/BMxsipmtMLP5Bbf1MLP7zOyF9PcupexjoUb6W2tmS9L9PM/MPlHKPjaF8rptVFpe\nQ2lyu2RF3cyqgeuA44BBwHgzG1Sq/jTRUe4+3N0zTI1SElOBY+vdNgF4wN0HAg+k/5eLqby/vwA/\nTffzcHe/p5371CzK6zY1lcrKayhBbpfyTH008KK7L3T3TcCtwLgS9ic33H0WsKrezeOAG9K/bwDi\nefzaSSP9rVTK6zZSaXkNpcntUhb1PYDXCv5fnN5W7hy438zmmtm5pe5ME/R296Xp38uA3qXsTEZf\nM7On0pewZfWyugjldfuqxLyGNsxtvVHadIe7+3CSl9fnm9mHS92hpvLkc6zl/lnWXwD9Sb7ebSnw\n49J2J/eU1+2nTXO7lEV9CWz39Yd7preVNXdfkv5eAUwjebldCZabWR+A9PeKEvenKHdf7u5b3X0b\n8CsqZz8rr9tXReU1tH1ul7KozwEGmtm+ZtYJOB2YUcL+hMxsJzPrVvc38DFgfvF7lY0ZwJnp32cC\n00vYl1DdAzV1EpWzn5XX7aui8hraPrdL8n3qAO6+xcy+CtwLVANT3H1BqfqTUW9gmplBsu9udvc/\nl7ZL72dmtwBHAr3MbDEwEZgM3GZmZwOvAKeVrofba6S/R5rZcJKX04uA80rWwSZQXredSstrKE1u\n62sCRERyRG+UiojkiIq6iEiOqKiLiOSIirqISI6oqIuI5IiKuohIjqioi4jkiIq6iEiO/C/zDkyC\nZclMUgAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1609,7 +1609,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.11" + "version": "2.7.6" } }, "nbformat": 4, diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 89f12d5edf..5b49005ec3 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -227,29 +227,30 @@ class MGXS(object): domain_filter = openmc.Filter(self.domain_type, self.domain.id) # Create each Tally needed to compute the multi group cross section - for score, key, filters in zip(self.scores, self.keys, self.filters): - self.tallies[key] = openmc.Tally(name=self.name) - self.tallies[key].scores = [score] - self.tallies[key].estimator = self.estimator - self.tallies[key].filters = [domain_filter] + tally_metadata = zip(self.scores, self.tally_keys, self.filters) + for score, key, filters in tally_metadata: + self._tallies[key] = openmc.Tally(name=self.name) + self._tallies[key].scores = [score] + self._tallies[key].estimator = self.estimator + self._tallies[key].filters = [domain_filter] # If a tally trigger was specified, add it to each tally if self.tally_trigger: trigger_clone = copy.deepcopy(self.tally_trigger) trigger_clone.scores = [score] - self.tallies[key].triggers.append(trigger_clone) + self._tallies[key].triggers.append(trigger_clone) # Add non-domain specific Filters (e.g., 'energy') to the Tally for add_filter in filters: - self.tallies[key].filters.append(add_filter) + self._tallies[key].filters.append(add_filter) # If this is a by-nuclide cross-section, add nuclides to Tally if self.by_nuclide and score != 'flux': all_nuclides = self.get_all_nuclides() for nuclide in all_nuclides: - self.tallies[key].nuclides.append(nuclide) + self._tallies[key].nuclides.append(nuclide) else: - self.tallies[key].nuclides.append('total') + self._tallies[key].nuclides.append('total') return self._tallies @@ -311,7 +312,7 @@ class MGXS(object): def filters(self): group_edges = self.energy_groups.group_edges energy_filter = openmc.Filter('energy', group_edges) - return [[energy_filter] * len(self.scores)] + return [[energy_filter]] * len(self.scores) @property def tally_keys(self): @@ -1544,7 +1545,7 @@ class NuTransportXS(TransportXS): return ['flux', 'total', 'nu-scatter-1'] @property - def keys(self): + def tally_keys(self): return ['flux', 'total', 'scatter-1'] @@ -1674,50 +1675,38 @@ class ScatterMatrixXS(MGXS): @property def scores(self): - return ['flux', 'total', 'nu-scatter-1'] + scores = ['flux'] + + for moment in range(self.legendre_order+1): + scores.append('scatter-{}'.format(moment)) + + if self.correction == 'P0' and self.legendre_order == 0: + scores.append('scatter-1') + + return scores @property - def keys(self): - return ['flux', 'total', 'scatter-1'] + def filters(self): + group_edges = self.energy_groups.group_edges + energy = openmc.Filter('energy', group_edges) + energyout = openmc.Filter('energyout', group_edges) + filters = [[energy]] + + for moment in range(self.legendre_order+1): + filters.append([energy, energyout]) + + if self.correction == 'P0' and self.legendre_order == 0: + filters.append([energyout]) + + return filters @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. + def tally_keys(self): + return ['flux', 'scatter-0', 'scatter-1'] - This method constructs three analog tallies to compute the 'flux' - and Legendre scattering moment reaction rates in the spatial domain and - energy groups of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - group_edges = self.energy_groups.group_edges - energy = openmc.Filter('energy', group_edges) - energyout = openmc.Filter('energyout', group_edges) - - # Create lists of scores, filters for each Tally to be created - scores = ['flux'] - filters = [[energy]] - - # Create separate tallies for each moment - for moment in range(self.legendre_order+1): - scores.append('scatter-{}'.format(moment)) - filters.append([energy, energyout]) - - # Append to the lists for the P0 approximation if needed - if self.correction == 'P0' and self.legendre_order == 0: - scores.append('scatter-1') - filters.append([energyout]) - - estimator = 'analog' - keys = scores - - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies + @property + def estimator(self): + return 'analog' @property def rxn_rate_tally(self): @@ -1727,7 +1716,7 @@ class ScatterMatrixXS(MGXS): # If using P0 correction subtract scatter-1 from the diagonal if self.correction == 'P0' and self.legendre_order == 0: scatter_p1 = self.tallies['scatter-1'] - scatter_p1 = scatter_p1.get_slice(scores=['scatter-1']) + scatter_p1 = scatter_p1.get_slice(scores=[self.scores[-1]]) energy_filter = self.tallies['scatter-0'].find_filter('energy') energy_filter = copy.deepcopy(energy_filter) scatter_p1 = scatter_p1.diagonalize_filter(energy_filter) @@ -1737,8 +1726,7 @@ class ScatterMatrixXS(MGXS): else: rxn_rate_tally = self.tallies['scatter-0'] for moment in range(1, self.legendre_order+1): - scatter_key = 'scatter-{}'.format(moment) - scatter_pn = self.tallies[scatter_key] + scatter_pn = self.tallies['scatter-{}'.format(moment)] rxn_rate_tally = rxn_rate_tally.merge(scatter_pn) self._rxn_rate_tally = rxn_rate_tally @@ -2188,45 +2176,16 @@ class NuScatterMatrixXS(ScatterMatrixXS): self._rxn_type = 'nu-scatter matrix' @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. + def scores(self): + scores = ['flux'] - This method constructs three analog tallies to compute the 'flux', - 'nu-scatter' and 'scatter-P1' reaction rates in the spatial domain and - energy groups of interest. + for moment in range(self.legendre_order+1): + scores.append('nu-scatter-{}'.format(moment)) - """ + if self.correction == 'P0' and self.legendre_order == 0: + scores.append('nu-scatter-1') - # Instantiate tallies if they do not exist - if self._tallies is None: - - group_edges = self.energy_groups.group_edges - energy = openmc.Filter('energy', group_edges) - energyout = openmc.Filter('energyout', group_edges) - - # Create lists of scores, filters for each Tally to be created - scores = ['flux'] - filters = [[energy]] - keys = ['flux'] - - # Create separate tallies for each moment - for moment in range(self.legendre_order+1): - scores.append('nu-scatter-{}'.format(moment)) - filters.append([energy, energyout]) - keys.append('scatter-{}'.format(moment)) - - # Append to the lists for the P0 approximation if needed - if self.correction == 'P0' and self.legendre_order == 0: - scores.append('scatter-1') - filters.append([energyout]) - keys.append('scatter-1') - - estimator = 'analog' - - # Intialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies + return scores class Chi(MGXS): @@ -2238,33 +2197,24 @@ class Chi(MGXS): self._rxn_type = 'chi' @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. + def scores(self): + return ['nu-fission', 'nu-fission'] - This method constructs two analog tallies to compute 'nu-fission' - reaction rates with 'energy' and 'energyout' filters in the spatial - domain and energy groups of interest. + @property + def filters(self): + # Create the non-domain specific Filters for the Tallies + group_edges = self.energy_groups.group_edges + energyout = openmc.Filter('energyout', group_edges) + energyin = openmc.Filter('energy', [group_edges[0], group_edges[-1]]) + return [[energyin], [energyout]] - """ + @property + def tally_keys(self): + return ['nu-fission-in', 'nu-fission-out'] - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['nu-fission', 'nu-fission'] - estimator = 'analog' - keys = ['nu-fission-in', 'nu-fission-out'] - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energyout = openmc.Filter('energyout', group_edges) - energyin = openmc.Filter('energy', [group_edges[0], group_edges[-1]]) - filters = [[energyin], [energyout]] - - # Intialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies + @property + def estimator(self): + return 'analog' @property def rxn_rate_tally(self): diff --git a/tests/test_mgxs_library_condense/inputs_true.dat b/tests/test_mgxs_library_condense/inputs_true.dat index 708ec114ed..064981fa9b 100644 --- a/tests/test_mgxs_library_condense/inputs_true.dat +++ b/tests/test_mgxs_library_condense/inputs_true.dat @@ -1 +1 @@ -e3834da92fc6ae57ce109621e3f692a186a03820b61332fa9ed898bc07fb8a63484ace095713d5b88196b1d2f1430d2e7b27a505944c7c3027f6365801f58146 \ No newline at end of file +ee40a2b826dea8323249c7261502f8339c78a5dc236e019842cc5244c048d5978fe66e036b86d46b262260556fbd62b19cbb2f0d70325b92b8c40275e75afe4f \ No newline at end of file diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index 5f1d886b09..89e4dbb3e5 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -1,7 +1,7 @@ material group in nuclide mean std. dev. 0 1 1 total 0.412084 0.02359 material group in nuclide mean std. dev. 0 1 1 total 0.076425 0.003691 material group in group out nuclide moment mean std. dev. moment -0 1 1 1 total P0 0.345643 0.021487 P0 material group out nuclide mean std. dev. +0 1 1 1 total P0 0.345503 0.021465 P0 material group out nuclide mean std. dev. 0 1 1 total 1.0 0.055333 material group in nuclide mean std. dev. 0 2 1 total 0.241262 0.00841 material group in nuclide mean std. dev. 0 2 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment diff --git a/tests/test_mgxs_library_distribcell/inputs_true.dat b/tests/test_mgxs_library_distribcell/inputs_true.dat index 4ab730274d..5ffea7f8fa 100644 --- a/tests/test_mgxs_library_distribcell/inputs_true.dat +++ b/tests/test_mgxs_library_distribcell/inputs_true.dat @@ -1 +1 @@ -aadb1e94492741c091bff4b5e17634ee327c718fc9fd1f27aa22fe8406fb70f732750dfdceb30eb40b5e4f406061bea6bd5235ba613c3c81009f5857a9051728 \ No newline at end of file +c46381a2d86bd849ca20dc64022ffcf836ba0f236f392bba6335c42559df61d14d09a616bc3a9590d954a5bf099610eb071982296b75b10d1c168cc3e343d383 \ No newline at end of file diff --git a/tests/test_mgxs_library_hdf5/inputs_true.dat b/tests/test_mgxs_library_hdf5/inputs_true.dat index 708ec114ed..064981fa9b 100644 --- a/tests/test_mgxs_library_hdf5/inputs_true.dat +++ b/tests/test_mgxs_library_hdf5/inputs_true.dat @@ -1 +1 @@ -e3834da92fc6ae57ce109621e3f692a186a03820b61332fa9ed898bc07fb8a63484ace095713d5b88196b1d2f1430d2e7b27a505944c7c3027f6365801f58146 \ No newline at end of file +ee40a2b826dea8323249c7261502f8339c78a5dc236e019842cc5244c048d5978fe66e036b86d46b262260556fbd62b19cbb2f0d70325b92b8c40275e75afe4f \ No newline at end of file diff --git a/tests/test_mgxs_library_hdf5/results_true.dat b/tests/test_mgxs_library_hdf5/results_true.dat index e19b9ffa52..93aceba7d3 100644 --- a/tests/test_mgxs_library_hdf5/results_true.dat +++ b/tests/test_mgxs_library_hdf5/results_true.dat @@ -5,9 +5,9 @@ domain=1 type=nu-fission [ 0.02178897 0.71407658] [ 0.00118187 0.04055185] domain=1 type=nu-scatter matrix -[[ 0.3373971 0.00155945] +[[ 0.33724504 0.00155945] [ 0. 0.42205129]] -[[ 0.02303884 0.00051015] +[[ 0.02301463 0.00051015] [ 0. 0.02161702]] domain=1 type=chi [ 1. 0.] diff --git a/tests/test_mgxs_library_no_nuclides/inputs_true.dat b/tests/test_mgxs_library_no_nuclides/inputs_true.dat index 708ec114ed..064981fa9b 100644 --- a/tests/test_mgxs_library_no_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_no_nuclides/inputs_true.dat @@ -1 +1 @@ -e3834da92fc6ae57ce109621e3f692a186a03820b61332fa9ed898bc07fb8a63484ace095713d5b88196b1d2f1430d2e7b27a505944c7c3027f6365801f58146 \ No newline at end of file +ee40a2b826dea8323249c7261502f8339c78a5dc236e019842cc5244c048d5978fe66e036b86d46b262260556fbd62b19cbb2f0d70325b92b8c40275e75afe4f \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index 4e6d882085..0ad8e04aa9 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -3,7 +3,7 @@ 0 1 2 total 0.861607 0.032349 material group in nuclide mean std. dev. 1 1 1 total 0.021789 0.001182 0 1 2 total 0.714077 0.040552 material group in group out nuclide moment mean std. dev. moment -3 1 1 1 total P0 0.337397 0.023039 P0 +3 1 1 1 total P0 0.337245 0.023015 P0 2 1 1 2 total P0 0.001559 0.000510 P0 1 1 2 1 total P0 0.000000 0.000000 P0 0 1 2 2 total P0 0.422051 0.021617 P0 material group out nuclide mean std. dev. diff --git a/tests/test_mgxs_library_nuclides/inputs_true.dat b/tests/test_mgxs_library_nuclides/inputs_true.dat index 5b7a83037e..d2c11978a8 100644 --- a/tests/test_mgxs_library_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_nuclides/inputs_true.dat @@ -1 +1 @@ -f1c203fb7f0b141ee608d7bb9223aa5f7ab84966b6a80525879df730d19179f6c6a1a4bc7038d84e6b366b360f43a1ca17a0af8d02f96eb23e53b93a2445380e \ No newline at end of file +f4abbd7867b0f0d2d9d93ed089c95904541f970522e1ef3a843373b60094ef4571a64a7b5f68efe9e51fd49754bc9e20a3bcc85c0bde3a8224608f8b97c01b85 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index ff34c9fff7..9cef6fdd84 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -138,7 +138,7 @@ 102 1 1 1 U-234 P0 0.000000 0.000000 P0 103 1 1 1 U-235 P0 0.003226 0.001139 P0 104 1 1 1 U-236 P0 0.001697 0.000923 P0 -105 1 1 1 U-238 P0 0.194620 0.013297 P0 +105 1 1 1 U-238 P0 0.194468 0.013279 P0 106 1 1 1 Np-237 P0 0.000000 0.000000 P0 107 1 1 1 Pu-238 P0 0.000000 0.000000 P0 108 1 1 1 Pu-239 P0 0.001005 0.000477 P0 From e9fc744ba597a28d72dcbe204f60167e85eaa3c8 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Thu, 12 May 2016 21:34:03 -0400 Subject: [PATCH 531/650] Updated example notebook and changed default value of return_names in write_mg_library to False and updated the docstring accordingly. --- .../pythonapi/examples/mgxs-part-iv.ipynb | 1423 ++++++++++++----- openmc/mgxs/library.py | 4 +- 2 files changed, 997 insertions(+), 430 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb index bc85af5c24..823d67ae16 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb @@ -6,10 +6,10 @@ "source": [ "This Notebook illustrates the use of the openmc.mgxs.Library class specifically for application in OpenMC's multi-group mode. This example notebook follows the same process as was done in MGXS Part III, but instead uses OpenMC as the multi-group solver. This Notebook illustrates the following features:\n", "\n", - " Calculation of multi-group cross sections for a fuel assembly\n", - " Automated creation, manipulation and storage of MGXS with openmc.mgxs.Library\n", - " Validation of multi-group cross sections with OpenMC\n", - " Steady-state pin-by-pin fission rates comparison between Continuous-Energy mode and Multi-Group OpenMC.\n", + " - Calculation of multi-group cross sections for a fuel assembly\n", + " - Automated creation, manipulation and storage of MGXS with openmc.mgxs.Library\n", + " - Validation of multi-group cross sections with OpenMC\n", + " - Steady-state pin-by-pin fission rates comparison between Continuous-Energy mode and Multi-Group OpenMC.\n", "\n", "Note: This Notebook illustrates the use of Pandas DataFrames to containerize multi-group cross section data. We recommend using Pandas >v0.15.0 or later since OpenMC's Python API leverages the multi-indexing feature included in the most recent releases of Pandas.\n" ] @@ -170,22 +170,22 @@ "outputs": [], "source": [ "# Create a Universe to encapsulate a fuel pin\n", - "fuel_pin_universe = openmc.Universe(name='1.6% Fuel Pin')\n", + "fuel_pin_universe = openmc.Universe(name='1.6% Fuel Pin', universe_id=10)\n", "\n", "# Create fuel Cell\n", - "fuel_cell = openmc.Cell(name='1.6% Fuel')\n", + "fuel_cell = openmc.Cell(name='1.6% Fuel', cell_id=1)\n", "fuel_cell.fill = fuel\n", "fuel_cell.region = -fuel_outer_radius\n", "fuel_pin_universe.add_cell(fuel_cell)\n", "\n", "# Create a clad Cell\n", - "clad_cell = openmc.Cell(name='1.6% Clad')\n", + "clad_cell = openmc.Cell(name='1.6% Clad', cell_id=2)\n", "clad_cell.fill = zircaloy\n", "clad_cell.region = +fuel_outer_radius & -clad_outer_radius\n", "fuel_pin_universe.add_cell(clad_cell)\n", "\n", "# Create a moderator Cell\n", - "moderator_cell = openmc.Cell(name='1.6% Moderator')\n", + "moderator_cell = openmc.Cell(name='1.6% Moderator', cell_id=3)\n", "moderator_cell.fill = water\n", "moderator_cell.region = +clad_outer_radius\n", "fuel_pin_universe.add_cell(moderator_cell)" @@ -207,22 +207,22 @@ "outputs": [], "source": [ "# Create a Universe to encapsulate a control rod guide tube\n", - "guide_tube_universe = openmc.Universe(name='Guide Tube')\n", + "guide_tube_universe = openmc.Universe(name='Guide Tube', universe_id=20)\n", "\n", "# Create guide tube Cell\n", - "guide_tube_cell = openmc.Cell(name='Guide Tube Water')\n", + "guide_tube_cell = openmc.Cell(name='Guide Tube Water', cell_id=4)\n", "guide_tube_cell.fill = water\n", "guide_tube_cell.region = -fuel_outer_radius\n", "guide_tube_universe.add_cell(guide_tube_cell)\n", "\n", "# Create a clad Cell\n", - "clad_cell = openmc.Cell(name='Guide Clad')\n", + "clad_cell = openmc.Cell(name='Guide Clad', cell_id=5)\n", "clad_cell.fill = zircaloy\n", "clad_cell.region = +fuel_outer_radius & -clad_outer_radius\n", "guide_tube_universe.add_cell(clad_cell)\n", "\n", "# Create a moderator Cell\n", - "moderator_cell = openmc.Cell(name='Guide Tube Moderator')\n", + "moderator_cell = openmc.Cell(name='Guide Tube Moderator', cell_id=6)\n", "moderator_cell.fill = water\n", "moderator_cell.region = +clad_outer_radius\n", "guide_tube_universe.add_cell(moderator_cell)" @@ -239,12 +239,12 @@ "cell_type": "code", "execution_count": 8, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ "# Create fuel assembly Lattice\n", - "assembly = openmc.RectLattice(name='1.6% Fuel Assembly')\n", + "assembly = openmc.RectLattice(name='1.6% Fuel Assembly', lattice_id=100)\n", "assembly.dimension = (17, 17)\n", "assembly.pitch = (1.26, 1.26)\n", "assembly.lower_left = [-1.26 * 17. / 2.0] * 2" @@ -298,7 +298,7 @@ "outputs": [], "source": [ "# Create root Cell\n", - "root_cell = openmc.Cell(name='root cell')\n", + "root_cell = openmc.Cell(name='root cell', cell_id=0)\n", "root_cell.fill = assembly\n", "\n", "# Add boundary planes\n", @@ -347,7 +347,7 @@ "outputs": [], "source": [ "# OpenMC simulation parameters\n", - "batches = 200\n", + "batches = 500\n", "inactive = 10\n", "particles = 5000\n", "\n", @@ -434,7 +434,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -554,7 +554,7 @@ "cell_type": "code", "execution_count": 20, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ @@ -566,12 +566,31 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Lastly, we use the `Library` to construct the tallies needed to compute all of the requested multi-group cross sections in each domain and nuclide." + "Now that the `Library` has been setup, lets make sure it contains the types of cross sections which meet the needs of OpenMC's multi-group solver. Note that this step is done automatically when writing the Multi-Group Library file later in the process (as part of the `mgxs_lib.write_mg_library()`), but it is a good practice to also run this before spending all the time running OpenMC to generate the cross sections." ] }, { "cell_type": "code", "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Check the library - if no errors are raised, then the library is satisfactory.\n", + "mgxs_lib.check_library_for_openmc_mgxs()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lastly, we use the `Library` to construct the tallies needed to compute all of the requested multi-group cross sections in each domain and nuclide." + ] + }, + { + "cell_type": "code", + "execution_count": 22, "metadata": { "collapsed": true }, @@ -592,7 +611,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "metadata": { "collapsed": true }, @@ -612,7 +631,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "metadata": { "collapsed": true }, @@ -640,7 +659,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "metadata": { "collapsed": true }, @@ -652,7 +671,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "metadata": { "collapsed": false }, @@ -677,8 +696,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 179e9ab147e505563d118ed58096b3d225160ffa\n", - " Date/Time: 2016-05-07 14:22:04\n", + " Git SHA1: c779ca42c41a062a6a813e03f2add2d182ca9190\n", + " Date/Time: 2016-05-12 21:15:02\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -906,7 +925,307 @@ " 198/1 1.01366 1.02596 +/- 0.00130\n", " 199/1 1.04471 1.02605 +/- 0.00130\n", " 200/1 1.02416 1.02604 +/- 0.00129\n", - " Creating state point statepoint.200.h5...\n", + " 201/1 1.01172 1.02597 +/- 0.00129\n", + " 202/1 1.01683 1.02592 +/- 0.00128\n", + " 203/1 1.01341 1.02586 +/- 0.00128\n", + " 204/1 1.01507 1.02580 +/- 0.00127\n", + " 205/1 1.02540 1.02580 +/- 0.00127\n", + " 206/1 1.00310 1.02568 +/- 0.00127\n", + " 207/1 1.02822 1.02570 +/- 0.00126\n", + " 208/1 1.01023 1.02562 +/- 0.00126\n", + " 209/1 1.04603 1.02572 +/- 0.00125\n", + " 210/1 1.00775 1.02563 +/- 0.00125\n", + " 211/1 1.01706 1.02559 +/- 0.00125\n", + " 212/1 0.99434 1.02543 +/- 0.00125\n", + " 213/1 1.03346 1.02547 +/- 0.00124\n", + " 214/1 1.05322 1.02561 +/- 0.00124\n", + " 215/1 1.03057 1.02563 +/- 0.00124\n", + " 216/1 1.00976 1.02556 +/- 0.00123\n", + " 217/1 1.02760 1.02557 +/- 0.00123\n", + " 218/1 1.01259 1.02550 +/- 0.00122\n", + " 219/1 1.02829 1.02552 +/- 0.00122\n", + " 220/1 1.02228 1.02550 +/- 0.00121\n", + " 221/1 1.06679 1.02570 +/- 0.00122\n", + " 222/1 1.03417 1.02574 +/- 0.00122\n", + " 223/1 1.04239 1.02582 +/- 0.00121\n", + " 224/1 1.02062 1.02579 +/- 0.00121\n", + " 225/1 1.00331 1.02569 +/- 0.00121\n", + " 226/1 1.00131 1.02557 +/- 0.00121\n", + " 227/1 1.01768 1.02554 +/- 0.00120\n", + " 228/1 1.00813 1.02546 +/- 0.00120\n", + " 229/1 1.05320 1.02558 +/- 0.00120\n", + " 230/1 1.03472 1.02563 +/- 0.00120\n", + " 231/1 1.01426 1.02557 +/- 0.00119\n", + " 232/1 1.00782 1.02549 +/- 0.00119\n", + " 233/1 1.02813 1.02551 +/- 0.00118\n", + " 234/1 1.01184 1.02545 +/- 0.00118\n", + " 235/1 1.02156 1.02543 +/- 0.00118\n", + " 236/1 0.99029 1.02527 +/- 0.00118\n", + " 237/1 1.04196 1.02535 +/- 0.00118\n", + " 238/1 1.01594 1.02531 +/- 0.00117\n", + " 239/1 1.02732 1.02531 +/- 0.00117\n", + " 240/1 0.98987 1.02516 +/- 0.00117\n", + " 241/1 1.03388 1.02520 +/- 0.00117\n", + " 242/1 1.01319 1.02515 +/- 0.00116\n", + " 243/1 1.02870 1.02516 +/- 0.00116\n", + " 244/1 1.01943 1.02514 +/- 0.00115\n", + " 245/1 1.04463 1.02522 +/- 0.00115\n", + " 246/1 1.03551 1.02526 +/- 0.00115\n", + " 247/1 1.00436 1.02517 +/- 0.00115\n", + " 248/1 1.03326 1.02521 +/- 0.00114\n", + " 249/1 1.05769 1.02534 +/- 0.00115\n", + " 250/1 1.01372 1.02530 +/- 0.00114\n", + " 251/1 1.02971 1.02531 +/- 0.00114\n", + " 252/1 1.01166 1.02526 +/- 0.00113\n", + " 253/1 1.03992 1.02532 +/- 0.00113\n", + " 254/1 1.01507 1.02528 +/- 0.00113\n", + " 255/1 1.03222 1.02530 +/- 0.00112\n", + " 256/1 1.03096 1.02533 +/- 0.00112\n", + " 257/1 1.01153 1.02527 +/- 0.00112\n", + " 258/1 1.03668 1.02532 +/- 0.00111\n", + " 259/1 1.03070 1.02534 +/- 0.00111\n", + " 260/1 1.01189 1.02529 +/- 0.00111\n", + " 261/1 1.00082 1.02519 +/- 0.00111\n", + " 262/1 1.03653 1.02523 +/- 0.00110\n", + " 263/1 1.02908 1.02525 +/- 0.00110\n", + " 264/1 1.00072 1.02515 +/- 0.00110\n", + " 265/1 1.00832 1.02509 +/- 0.00109\n", + " 266/1 1.04385 1.02516 +/- 0.00109\n", + " 267/1 1.00117 1.02507 +/- 0.00109\n", + " 268/1 1.02682 1.02507 +/- 0.00109\n", + " 269/1 1.03202 1.02510 +/- 0.00108\n", + " 270/1 1.01275 1.02505 +/- 0.00108\n", + " 271/1 1.02633 1.02506 +/- 0.00108\n", + " 272/1 1.04811 1.02514 +/- 0.00108\n", + " 273/1 1.02851 1.02516 +/- 0.00107\n", + " 274/1 1.01270 1.02511 +/- 0.00107\n", + " 275/1 1.06222 1.02525 +/- 0.00107\n", + " 276/1 1.02778 1.02526 +/- 0.00107\n", + " 277/1 1.02601 1.02526 +/- 0.00107\n", + " 278/1 1.02356 1.02526 +/- 0.00106\n", + " 279/1 1.00792 1.02519 +/- 0.00106\n", + " 280/1 1.02331 1.02518 +/- 0.00106\n", + " 281/1 1.00985 1.02513 +/- 0.00105\n", + " 282/1 1.02035 1.02511 +/- 0.00105\n", + " 283/1 0.98181 1.02495 +/- 0.00106\n", + " 284/1 1.01829 1.02493 +/- 0.00106\n", + " 285/1 1.02929 1.02494 +/- 0.00105\n", + " 286/1 1.03524 1.02498 +/- 0.00105\n", + " 287/1 1.01212 1.02493 +/- 0.00105\n", + " 288/1 1.03584 1.02497 +/- 0.00104\n", + " 289/1 1.02961 1.02499 +/- 0.00104\n", + " 290/1 0.99692 1.02489 +/- 0.00104\n", + " 291/1 1.03966 1.02494 +/- 0.00104\n", + " 292/1 1.00965 1.02489 +/- 0.00104\n", + " 293/1 1.02601 1.02489 +/- 0.00103\n", + " 294/1 1.03224 1.02492 +/- 0.00103\n", + " 295/1 1.01596 1.02489 +/- 0.00103\n", + " 296/1 1.06964 1.02504 +/- 0.00103\n", + " 297/1 1.03982 1.02509 +/- 0.00103\n", + " 298/1 0.99758 1.02500 +/- 0.00103\n", + " 299/1 1.01479 1.02496 +/- 0.00103\n", + " 300/1 1.04517 1.02503 +/- 0.00103\n", + " 301/1 0.99128 1.02492 +/- 0.00103\n", + " 302/1 1.01493 1.02488 +/- 0.00103\n", + " 303/1 1.00623 1.02482 +/- 0.00103\n", + " 304/1 1.02560 1.02482 +/- 0.00102\n", + " 305/1 1.00806 1.02477 +/- 0.00102\n", + " 306/1 1.03524 1.02480 +/- 0.00102\n", + " 307/1 0.99244 1.02469 +/- 0.00102\n", + " 308/1 0.98013 1.02454 +/- 0.00103\n", + " 309/1 1.00853 1.02449 +/- 0.00103\n", + " 310/1 1.00116 1.02441 +/- 0.00103\n", + " 311/1 1.01730 1.02439 +/- 0.00102\n", + " 312/1 1.01198 1.02435 +/- 0.00102\n", + " 313/1 1.02405 1.02435 +/- 0.00102\n", + " 314/1 1.01734 1.02432 +/- 0.00101\n", + " 315/1 1.02320 1.02432 +/- 0.00101\n", + " 316/1 1.03438 1.02435 +/- 0.00101\n", + " 317/1 1.00106 1.02428 +/- 0.00101\n", + " 318/1 1.03114 1.02430 +/- 0.00100\n", + " 319/1 1.04955 1.02438 +/- 0.00100\n", + " 320/1 1.03259 1.02441 +/- 0.00100\n", + " 321/1 1.00687 1.02435 +/- 0.00100\n", + " 322/1 1.05753 1.02446 +/- 0.00100\n", + " 323/1 1.03676 1.02450 +/- 0.00100\n", + " 324/1 0.99796 1.02441 +/- 0.00100\n", + " 325/1 1.03783 1.02445 +/- 0.00100\n", + " 326/1 1.02315 1.02445 +/- 0.00099\n", + " 327/1 1.04205 1.02451 +/- 0.00099\n", + " 328/1 1.01971 1.02449 +/- 0.00099\n", + " 329/1 1.02394 1.02449 +/- 0.00099\n", + " 330/1 1.03318 1.02452 +/- 0.00098\n", + " 331/1 1.01503 1.02449 +/- 0.00098\n", + " 332/1 1.07143 1.02463 +/- 0.00099\n", + " 333/1 1.00991 1.02459 +/- 0.00099\n", + " 334/1 1.03115 1.02461 +/- 0.00098\n", + " 335/1 1.04400 1.02467 +/- 0.00098\n", + " 336/1 1.03516 1.02470 +/- 0.00098\n", + " 337/1 1.02025 1.02468 +/- 0.00098\n", + " 338/1 1.03269 1.02471 +/- 0.00098\n", + " 339/1 1.03745 1.02475 +/- 0.00097\n", + " 340/1 1.03685 1.02478 +/- 0.00097\n", + " 341/1 1.01831 1.02476 +/- 0.00097\n", + " 342/1 1.01425 1.02473 +/- 0.00097\n", + " 343/1 1.02990 1.02475 +/- 0.00096\n", + " 344/1 1.02958 1.02476 +/- 0.00096\n", + " 345/1 1.03133 1.02478 +/- 0.00096\n", + " 346/1 1.02441 1.02478 +/- 0.00095\n", + " 347/1 1.07010 1.02492 +/- 0.00096\n", + " 348/1 1.02327 1.02491 +/- 0.00096\n", + " 349/1 1.03123 1.02493 +/- 0.00096\n", + " 350/1 1.03158 1.02495 +/- 0.00095\n", + " 351/1 1.03473 1.02498 +/- 0.00095\n", + " 352/1 1.04000 1.02502 +/- 0.00095\n", + " 353/1 1.01651 1.02500 +/- 0.00095\n", + " 354/1 1.03647 1.02503 +/- 0.00094\n", + " 355/1 1.04650 1.02509 +/- 0.00094\n", + " 356/1 1.04703 1.02516 +/- 0.00094\n", + " 357/1 1.00260 1.02509 +/- 0.00094\n", + " 358/1 1.00075 1.02502 +/- 0.00094\n", + " 359/1 1.04874 1.02509 +/- 0.00094\n", + " 360/1 1.03211 1.02511 +/- 0.00094\n", + " 361/1 1.02136 1.02510 +/- 0.00094\n", + " 362/1 1.00803 1.02505 +/- 0.00094\n", + " 363/1 1.00319 1.02499 +/- 0.00094\n", + " 364/1 1.01443 1.02496 +/- 0.00093\n", + " 365/1 1.02685 1.02496 +/- 0.00093\n", + " 366/1 1.02373 1.02496 +/- 0.00093\n", + " 367/1 1.02026 1.02495 +/- 0.00093\n", + " 368/1 1.01579 1.02492 +/- 0.00092\n", + " 369/1 1.08004 1.02508 +/- 0.00093\n", + " 370/1 1.01715 1.02505 +/- 0.00093\n", + " 371/1 0.98578 1.02494 +/- 0.00093\n", + " 372/1 1.03033 1.02496 +/- 0.00093\n", + " 373/1 1.03269 1.02498 +/- 0.00093\n", + " 374/1 1.04050 1.02502 +/- 0.00093\n", + " 375/1 1.00760 1.02498 +/- 0.00093\n", + " 376/1 1.04492 1.02503 +/- 0.00093\n", + " 377/1 1.04983 1.02510 +/- 0.00093\n", + " 378/1 1.06022 1.02519 +/- 0.00093\n", + " 379/1 1.02516 1.02519 +/- 0.00093\n", + " 380/1 1.01740 1.02517 +/- 0.00092\n", + " 381/1 1.02520 1.02517 +/- 0.00092\n", + " 382/1 1.02820 1.02518 +/- 0.00092\n", + " 383/1 1.00697 1.02513 +/- 0.00092\n", + " 384/1 1.03497 1.02516 +/- 0.00092\n", + " 385/1 0.98404 1.02505 +/- 0.00092\n", + " 386/1 1.05206 1.02512 +/- 0.00092\n", + " 387/1 1.01502 1.02509 +/- 0.00092\n", + " 388/1 1.02196 1.02508 +/- 0.00092\n", + " 389/1 1.02856 1.02509 +/- 0.00091\n", + " 390/1 1.01376 1.02506 +/- 0.00091\n", + " 391/1 1.01696 1.02504 +/- 0.00091\n", + " 392/1 1.03283 1.02506 +/- 0.00091\n", + " 393/1 1.00787 1.02502 +/- 0.00091\n", + " 394/1 1.02184 1.02501 +/- 0.00090\n", + " 395/1 1.03170 1.02503 +/- 0.00090\n", + " 396/1 1.04406 1.02508 +/- 0.00090\n", + " 397/1 1.03939 1.02511 +/- 0.00090\n", + " 398/1 1.00329 1.02506 +/- 0.00090\n", + " 399/1 1.04518 1.02511 +/- 0.00090\n", + " 400/1 1.03435 1.02513 +/- 0.00090\n", + " 401/1 1.00525 1.02508 +/- 0.00089\n", + " 402/1 1.03112 1.02510 +/- 0.00089\n", + " 403/1 1.00188 1.02504 +/- 0.00089\n", + " 404/1 1.01241 1.02501 +/- 0.00089\n", + " 405/1 1.01796 1.02499 +/- 0.00089\n", + " 406/1 1.02686 1.02499 +/- 0.00089\n", + " 407/1 1.01003 1.02496 +/- 0.00088\n", + " 408/1 1.02359 1.02495 +/- 0.00088\n", + " 409/1 1.01258 1.02492 +/- 0.00088\n", + " 410/1 1.04361 1.02497 +/- 0.00088\n", + " 411/1 1.00885 1.02493 +/- 0.00088\n", + " 412/1 1.00999 1.02489 +/- 0.00088\n", + " 413/1 0.97832 1.02477 +/- 0.00088\n", + " 414/1 1.04183 1.02482 +/- 0.00088\n", + " 415/1 1.02279 1.02481 +/- 0.00088\n", + " 416/1 1.04197 1.02485 +/- 0.00088\n", + " 417/1 1.04617 1.02491 +/- 0.00088\n", + " 418/1 1.01311 1.02488 +/- 0.00088\n", + " 419/1 1.03904 1.02491 +/- 0.00087\n", + " 420/1 1.00458 1.02486 +/- 0.00087\n", + " 421/1 0.98580 1.02477 +/- 0.00088\n", + " 422/1 1.01850 1.02475 +/- 0.00087\n", + " 423/1 1.03739 1.02478 +/- 0.00087\n", + " 424/1 1.02716 1.02479 +/- 0.00087\n", + " 425/1 1.00711 1.02475 +/- 0.00087\n", + " 426/1 1.01008 1.02471 +/- 0.00087\n", + " 427/1 1.03332 1.02473 +/- 0.00087\n", + " 428/1 1.00501 1.02468 +/- 0.00087\n", + " 429/1 1.04549 1.02473 +/- 0.00086\n", + " 430/1 1.00582 1.02469 +/- 0.00086\n", + " 431/1 1.00586 1.02464 +/- 0.00086\n", + " 432/1 1.00082 1.02459 +/- 0.00086\n", + " 433/1 1.00835 1.02455 +/- 0.00086\n", + " 434/1 1.03965 1.02458 +/- 0.00086\n", + " 435/1 1.02385 1.02458 +/- 0.00086\n", + " 436/1 1.01440 1.02456 +/- 0.00086\n", + " 437/1 1.03127 1.02458 +/- 0.00085\n", + " 438/1 1.02961 1.02459 +/- 0.00085\n", + " 439/1 0.99584 1.02452 +/- 0.00085\n", + " 440/1 1.04964 1.02458 +/- 0.00085\n", + " 441/1 0.99792 1.02452 +/- 0.00085\n", + " 442/1 1.04971 1.02457 +/- 0.00085\n", + " 443/1 1.01504 1.02455 +/- 0.00085\n", + " 444/1 1.04359 1.02460 +/- 0.00085\n", + " 445/1 1.01148 1.02457 +/- 0.00085\n", + " 446/1 1.01203 1.02454 +/- 0.00085\n", + " 447/1 1.02353 1.02454 +/- 0.00085\n", + " 448/1 1.06299 1.02462 +/- 0.00085\n", + " 449/1 1.00017 1.02457 +/- 0.00085\n", + " 450/1 1.01193 1.02454 +/- 0.00085\n", + " 451/1 1.00179 1.02449 +/- 0.00085\n", + " 452/1 1.02425 1.02449 +/- 0.00085\n", + " 453/1 1.03629 1.02451 +/- 0.00084\n", + " 454/1 1.01955 1.02450 +/- 0.00084\n", + " 455/1 1.00870 1.02447 +/- 0.00084\n", + " 456/1 1.04230 1.02451 +/- 0.00084\n", + " 457/1 1.05081 1.02457 +/- 0.00084\n", + " 458/1 1.00271 1.02452 +/- 0.00084\n", + " 459/1 1.01010 1.02448 +/- 0.00084\n", + " 460/1 1.04656 1.02453 +/- 0.00084\n", + " 461/1 1.00790 1.02450 +/- 0.00084\n", + " 462/1 1.02214 1.02449 +/- 0.00084\n", + " 463/1 1.04401 1.02453 +/- 0.00083\n", + " 464/1 1.02863 1.02454 +/- 0.00083\n", + " 465/1 0.99971 1.02449 +/- 0.00083\n", + " 466/1 1.00344 1.02444 +/- 0.00083\n", + " 467/1 1.02810 1.02445 +/- 0.00083\n", + " 468/1 1.02091 1.02444 +/- 0.00083\n", + " 469/1 1.00545 1.02440 +/- 0.00083\n", + " 470/1 1.01590 1.02438 +/- 0.00083\n", + " 471/1 1.04465 1.02443 +/- 0.00083\n", + " 472/1 1.02028 1.02442 +/- 0.00082\n", + " 473/1 1.01951 1.02441 +/- 0.00082\n", + " 474/1 1.03280 1.02443 +/- 0.00082\n", + " 475/1 1.04722 1.02447 +/- 0.00082\n", + " 476/1 1.03587 1.02450 +/- 0.00082\n", + " 477/1 1.02234 1.02449 +/- 0.00082\n", + " 478/1 1.07848 1.02461 +/- 0.00082\n", + " 479/1 1.04759 1.02466 +/- 0.00082\n", + " 480/1 1.07189 1.02476 +/- 0.00083\n", + " 481/1 1.05811 1.02483 +/- 0.00083\n", + " 482/1 1.04554 1.02487 +/- 0.00083\n", + " 483/1 1.01956 1.02486 +/- 0.00083\n", + " 484/1 1.01055 1.02483 +/- 0.00083\n", + " 485/1 1.00845 1.02480 +/- 0.00082\n", + " 486/1 1.04607 1.02484 +/- 0.00082\n", + " 487/1 1.05955 1.02492 +/- 0.00083\n", + " 488/1 1.02245 1.02491 +/- 0.00082\n", + " 489/1 0.98206 1.02482 +/- 0.00083\n", + " 490/1 1.03786 1.02485 +/- 0.00083\n", + " 491/1 1.02973 1.02486 +/- 0.00082\n", + " 492/1 1.02890 1.02487 +/- 0.00082\n", + " 493/1 1.02086 1.02486 +/- 0.00082\n", + " 494/1 1.01194 1.02483 +/- 0.00082\n", + " 495/1 1.01902 1.02482 +/- 0.00082\n", + " 496/1 1.01783 1.02481 +/- 0.00082\n", + " 497/1 1.02129 1.02480 +/- 0.00081\n", + " 498/1 1.02407 1.02480 +/- 0.00081\n", + " 499/1 1.02873 1.02480 +/- 0.00081\n", + " 500/1 1.00998 1.02477 +/- 0.00081\n", + " Creating state point statepoint.500.h5...\n", "\n", " ===========================================================================\n", " ======================> SIMULATION FINISHED <======================\n", @@ -915,27 +1234,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 1.4810E+00 seconds\n", - " Reading cross sections = 1.1600E+00 seconds\n", - " Total time in simulation = 9.8823E+01 seconds\n", - " Time in transport only = 9.8622E+01 seconds\n", - " Time in inactive batches = 2.1290E+00 seconds\n", - " Time in active batches = 9.6694E+01 seconds\n", - " Time synchronizing fission bank = 1.4000E-02 seconds\n", - " Sampling source sites = 1.1000E-02 seconds\n", - " SEND/RECV source sites = 3.0000E-03 seconds\n", + " Total time for initialization = 1.5880E+00 seconds\n", + " Reading cross sections = 1.2650E+00 seconds\n", + " Total time in simulation = 2.6051E+02 seconds\n", + " Time in transport only = 2.6013E+02 seconds\n", + " Time in inactive batches = 2.0990E+00 seconds\n", + " Time in active batches = 2.5841E+02 seconds\n", + " Time synchronizing fission bank = 6.5000E-02 seconds\n", + " Sampling source sites = 4.4000E-02 seconds\n", + " SEND/RECV source sites = 2.1000E-02 seconds\n", " Time accumulating tallies = 2.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.0031E+02 seconds\n", - " Calculation Rate (inactive) = 23485.2 neutrons/second\n", - " Calculation Rate (active) = 9824.81 neutrons/second\n", + " Total time elapsed = 2.6211E+02 seconds\n", + " Calculation Rate (inactive) = 23820.9 neutrons/second\n", + " Calculation Rate (active) = 9480.98 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.02505 +/- 0.00122\n", - " k-effective (Track-length) = 1.02604 +/- 0.00129\n", - " k-effective (Absorption) = 1.02501 +/- 0.00111\n", - " Combined k-effective = 1.02544 +/- 0.00091\n", + " k-effective (Collision) = 1.02480 +/- 0.00073\n", + " k-effective (Track-length) = 1.02477 +/- 0.00081\n", + " k-effective (Absorption) = 1.02552 +/- 0.00068\n", + " Combined k-effective = 1.02519 +/- 0.00055\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -946,7 +1265,7 @@ "0" ] }, - "execution_count": 25, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -965,14 +1284,14 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ "# Move the StatePoint File\n", - "ce_spfile = './ce.h5'\n", + "ce_spfile = './ce_statepoint.h5'\n", "os.rename('statepoint.' + str(batches) + '.h5', ce_spfile)\n", "# Move the Summary file\n", "ce_sumfile = './ce_summary.h5'\n", @@ -985,44 +1304,26 @@ "source": [ "# Tally Data Processing\n", "\n", - "Our simulation ran successfully and created statepoint and summary output files. We begin our analysis by instantiating a `StatePoint` object." - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "# Load the statepoint file\n", - "sp = openmc.StatePoint(ce_spfile)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next we will save the value of keff from the continuous-energy calculation for later comparison" + "Our simulation ran successfully and created statepoint and summary output files. Let's begin by loading the StatePoint file, but not automatically linking the summary file." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ - "ce_keff = sp.k_combined" + "# Load the statepoint file, but not the summary file, as it is a different filename than expected.\n", + "sp = openmc.StatePoint(ce_spfile, autolink=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "In addition to the statepoint file, our simulation also created a summary file which encapsulates information about the materials and geometry. This is necessary for the `openmc.mgxs` module to properly process the tally data. We first create a `Summary` object and link it with the statepoint." + "In addition to the statepoint file, our simulation also created a summary file which encapsulates information about the materials and geometry. This is necessary for the `openmc.mgxs` module to properly process the tally data. We first create a `Summary` object and link it with the statepoint. Normally this would not need to be performed, but since we have renamed our summary file to avoid conflicts with the Multi-Group calculation's summary file, we will load this in explicitly." ] }, { @@ -1037,32 +1338,6 @@ "sp.link_with_summary(su)" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next we will extract our fission distribution results from the statepoint for later comparison." - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Get the OpenMC fission rate mesh tally data\n", - "mesh_tally = sp.get_tally(name='mesh tally')\n", - "openmc_fission_rates = mesh_tally.get_values(scores=['fission'])\n", - "\n", - "# Reshape array to 2D for plotting\n", - "openmc_fission_rates.shape = (17,17)\n", - "\n", - "# Normalize to the average pin power\n", - "openmc_fission_rates /= np.mean(openmc_fission_rates)" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -1072,7 +1347,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 30, "metadata": { "collapsed": false }, @@ -1105,7 +1380,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 31, "metadata": { "collapsed": false }, @@ -1114,53 +1389,38 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/nelsonag/git/openmc/openmc/tallies.py:1996: RuntimeWarning: invalid value encountered in true_divide\n", + "/home/nelsonag/git/openmc/openmc/tallies.py:1988: RuntimeWarning: invalid value encountered in true_divide\n", " self_rel_err = data['self']['std. dev.'] / data['self']['mean']\n", - "/home/nelsonag/git/openmc/openmc/tallies.py:1997: RuntimeWarning: invalid value encountered in true_divide\n", + "/home/nelsonag/git/openmc/openmc/tallies.py:1989: RuntimeWarning: invalid value encountered in true_divide\n", " other_rel_err = data['other']['std. dev.'] / data['other']['mean']\n", - "/home/nelsonag/git/openmc/openmc/tallies.py:1998: RuntimeWarning: invalid value encountered in true_divide\n", + "/home/nelsonag/git/openmc/openmc/tallies.py:1990: RuntimeWarning: invalid value encountered in true_divide\n", " new_tally._mean = data['self']['mean'] / data['other']['mean']\n" ] - }, - { - "data": { - "text/plain": [ - "{10000: 'fuel.2g',\n", - " 10001: 'fuel_clad.2g',\n", - " 10002: 'fuel_mod.2g',\n", - " 10003: 'gt_inmod.2g',\n", - " 10004: 'gt_clad.2g',\n", - " 10005: 'gt_outmod.2g'}" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ "mgxs_lib.write_mg_library(filename='mgxs', xs_type='macro',\n", " domain_names=['fuel', 'fuel_clad', 'fuel_mod',\n", " 'gt_inmod', 'gt_clad', 'gt_outmod'],\n", - " xs_ids='2g')" + " xs_ids='2m')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now we will need to recreate similar xml files from above, beginning with materials.xml" + "Now we will need to recreate similar xml files from above, beginning with materials.xml. Similar to how continuous-energy cross section libraries are named, the `openmc.Macroscopic` quantities below can either have their `xs_id` included (i.e., `'.2m'`), or this can be left off but the `default_xs` parameter of the materials file be used instead to be set to the `'xs_id'` of interest (which is `'.2m'` in this case as defined in the previous cell)." ] }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "# Instantiate our Macroscopic Data\n", + "# Instantiate our Macroscopic Data using mat_names for the name\n", "fuel_macro = openmc.Macroscopic('fuel')\n", "fuel_clad_macro = openmc.Macroscopic('fuel_clad')\n", "fuel_mod_macro = openmc.Macroscopic('fuel_mod')\n", @@ -1171,39 +1431,39 @@ "# Now define the materials\n", "\n", "# 1.6 enriched fuel UO2\n", - "fuel = openmc.Material(name='1.6% Fuel UO2')\n", + "fuel = openmc.Material(name='1.6% Fuel UO2', material_id=1)\n", "fuel.set_density('macro', 1.0)\n", "fuel.add_macroscopic(fuel_macro)\n", "\n", "# 1.6 enriched fuel cladding\n", - "fuel_clad = openmc.Material(name='1.6% Fuel Clad')\n", + "fuel_clad = openmc.Material(name='1.6% Fuel Clad', material_id=2)\n", "fuel_clad.set_density('macro', 1.0)\n", "fuel_clad.add_macroscopic(fuel_clad_macro)\n", "\n", "# 1.6 enriched fuel moderator\n", - "fuel_mod = openmc.Material(name='1.6% Fuel Water')\n", + "fuel_mod = openmc.Material(name='1.6% Fuel Water', material_id=3)\n", "fuel_mod.set_density('macro', 1.0)\n", "fuel_mod.add_macroscopic(fuel_mod_macro)\n", "\n", "# Guide Tube Inner Moderator\n", - "gt_inmod = openmc.Material(name='GT Inner Water')\n", + "gt_inmod = openmc.Material(name='GT Inner Water', material_id=4)\n", "gt_inmod.set_density('macro', 1.0)\n", "gt_inmod.add_macroscopic(gt_inmod_macro)\n", "\n", "# Guide Tube Cladding\n", - "gt_clad = openmc.Material(name='GT Clad')\n", + "gt_clad = openmc.Material(name='GT Clad', material_id=5)\n", "gt_clad.set_density('macro', 1.0)\n", "gt_clad.add_macroscopic(gt_clad_macro)\n", "\n", "# Guide Tube Outer Moderator\n", - "gt_outmod = openmc.Material(name='GT Outer Water')\n", + "gt_outmod = openmc.Material(name='GT Outer Water', material_id=6)\n", "gt_outmod.set_density('macro', 1.0)\n", "gt_outmod.add_macroscopic(gt_outmod_macro)\n", "\n", "# Finally, instantiate our Materials object\n", "materials_file = openmc.Materials((fuel, fuel_clad, fuel_mod,\n", " gt_inmod, gt_clad, gt_outmod))\n", - "materials_file.default_xs = '2g'\n", + "materials_file.default_xs = '2m'\n", "\n", "# Export to \"materials.xml\"\n", "materials_file.export_to_xml()\n" @@ -1213,61 +1473,62 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For our geometry files we will simply repeat what as done for continuous-energy mode, except change the cell fill (i.e., the material) to use our newly defined materials." + "\n", + "For our geometry files we will do the same as before but now we will be pointing at our newly created materials instead." ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create a Universe to encapsulate a fuel pin\n", - "fuel_pin_universe = openmc.Universe(name='1.6% Fuel Pin')\n", + "fuel_pin_universe = openmc.Universe(name='1.6% Fuel Pin', universe_id=10)\n", "\n", "# Create fuel Cell\n", - "fuel_cell = openmc.Cell(name='1.6% Fuel')\n", + "fuel_cell = openmc.Cell(name='1.6% Fuel', cell_id=1)\n", "fuel_cell.fill = fuel\n", "fuel_cell.region = -fuel_outer_radius\n", "fuel_pin_universe.add_cell(fuel_cell)\n", "\n", "# Create a clad Cell\n", - "clad_cell = openmc.Cell(name='1.6% Clad')\n", + "clad_cell = openmc.Cell(name='1.6% Clad', cell_id=2)\n", "clad_cell.fill = fuel_clad\n", "clad_cell.region = +fuel_outer_radius & -clad_outer_radius\n", "fuel_pin_universe.add_cell(clad_cell)\n", "\n", "# Create a moderator Cell\n", - "moderator_cell = openmc.Cell(name='1.6% Moderator')\n", + "moderator_cell = openmc.Cell(name='1.6% Moderator', cell_id=3)\n", "moderator_cell.fill = fuel_mod\n", "moderator_cell.region = +clad_outer_radius\n", "fuel_pin_universe.add_cell(moderator_cell)\n", "\n", "# Create a Universe to encapsulate a control rod guide tube\n", - "guide_tube_universe = openmc.Universe(name='Guide Tube')\n", + "guide_tube_universe = openmc.Universe(name='Guide Tube', universe_id=20)\n", "\n", "# Create guide tube Cell\n", - "guide_tube_cell = openmc.Cell(name='Guide Tube Water')\n", + "guide_tube_cell = openmc.Cell(name='Guide Tube Water', cell_id=4)\n", "guide_tube_cell.fill = gt_inmod\n", "guide_tube_cell.region = -fuel_outer_radius\n", "guide_tube_universe.add_cell(guide_tube_cell)\n", "\n", "# Create a clad Cell\n", - "clad_cell = openmc.Cell(name='Guide Clad')\n", + "clad_cell = openmc.Cell(name='Guide Clad', cell_id=5)\n", "clad_cell.fill = gt_clad\n", "clad_cell.region = +fuel_outer_radius & -clad_outer_radius\n", "guide_tube_universe.add_cell(clad_cell)\n", "\n", "# Create a moderator Cell\n", - "moderator_cell = openmc.Cell(name='Guide Tube Moderator')\n", + "moderator_cell = openmc.Cell(name='Guide Tube Moderator', cell_id=6)\n", "moderator_cell.fill = gt_outmod\n", "moderator_cell.region = +clad_outer_radius\n", "guide_tube_universe.add_cell(moderator_cell)\n", "\n", "# Create fuel assembly Lattice\n", - "assembly = openmc.RectLattice(name='1.6% Fuel Assembly')\n", + "assembly = openmc.RectLattice(name='1.6% Fuel Assembly', lattice_id=100)\n", "assembly.dimension = (17, 17)\n", "assembly.pitch = (1.26, 1.26)\n", "assembly.lower_left = [-1.26 * 17. / 2.0] * 2\n", @@ -1289,7 +1550,7 @@ "assembly.universes = universes\n", "\n", "# Create root Cell\n", - "root_cell = openmc.Cell(name='root cell')\n", + "root_cell = openmc.Cell(name='root cell', cell_id=0)\n", "root_cell.fill = assembly\n", "\n", "# Add boundary planes\n", @@ -1316,7 +1577,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "metadata": { "collapsed": true }, @@ -1334,50 +1595,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Finally, lets tell OpenMC we want to tally fissions over a mesh for comparison. " + "Finally, since we want similar tally data in the end, we will leave our pre-existing `tallies.xml` file for this calculation.\n", + "\n", + "At this point, the problem is set up and we can run the multi-group calculation." ] }, { "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "# Instantiate a tally Mesh\n", - "mesh = openmc.Mesh(mesh_id=1)\n", - "mesh.type = 'regular'\n", - "mesh.dimension = [17, 17]\n", - "mesh.lower_left = [-10.71, -10.71]\n", - "mesh.upper_right = [+10.71, +10.71]\n", - "\n", - "# Instantiate tally Filter\n", - "mesh_filter = openmc.Filter()\n", - "mesh_filter.mesh = mesh\n", - "\n", - "# Instantiate the Tally\n", - "tally = openmc.Tally(name='mesh tally')\n", - "tally.filters = [mesh_filter]\n", - "tally.scores = ['fission']\n", - "\n", - "# Add tally to collection\n", - "tallies_file.append(tally)\n", - "\n", - "# Export all tallies to a \"tallies.xml\" file\n", - "tallies_file.export_to_xml()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Before we run the calculation we will close the StatePoint file (as we are about to over-write it), and then we can run the multi-group calculation." - ] - }, - { - "cell_type": "code", - "execution_count": 37, + "execution_count": 35, "metadata": { "collapsed": false }, @@ -1402,8 +1627,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 179e9ab147e505563d118ed58096b3d225160ffa\n", - " Date/Time: 2016-05-07 14:23:45\n", + " Git SHA1: c779ca42c41a062a6a813e03f2add2d182ca9190\n", + " Date/Time: 2016-05-12 21:19:25\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -1417,12 +1642,12 @@ " Reading tallies XML file...\n", " Building neighboring cells lists for each surface...\n", " Loading Cross Section Data...\n", - " Loading fuel.2g Data...\n", - " Loading fuel_clad.2g Data...\n", - " Loading fuel_mod.2g Data...\n", - " Loading gt_inmod.2g Data...\n", - " Loading gt_clad.2g Data...\n", - " Loading gt_outmod.2g Data...\n", + " Loading fuel.2m Data...\n", + " Loading fuel_clad.2m Data...\n", + " Loading fuel_mod.2m Data...\n", + " Loading gt_inmod.2m Data...\n", + " Loading gt_clad.2m Data...\n", + " Loading gt_outmod.2m Data...\n", " Initializing source particles...\n", "\n", " ===========================================================================\n", @@ -1431,207 +1656,507 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 1.01863 \n", - " 2/1 1.02630 \n", - " 3/1 1.03077 \n", - " 4/1 0.99715 \n", - " 5/1 1.02328 \n", - " 6/1 1.02283 \n", - " 7/1 1.00540 \n", - " 8/1 1.02232 \n", - " 9/1 0.99782 \n", - " 10/1 1.00838 \n", - " 11/1 1.01803 \n", - " 12/1 1.02530 1.02167 +/- 0.00363\n", - " 13/1 1.00514 1.01616 +/- 0.00589\n", - " 14/1 0.98994 1.00960 +/- 0.00777\n", - " 15/1 1.01028 1.00974 +/- 0.00602\n", - " 16/1 1.04607 1.01580 +/- 0.00780\n", - " 17/1 1.03300 1.01825 +/- 0.00703\n", - " 18/1 1.03149 1.01991 +/- 0.00631\n", - " 19/1 0.98692 1.01624 +/- 0.00667\n", - " 20/1 1.05205 1.01982 +/- 0.00695\n", - " 21/1 1.01572 1.01945 +/- 0.00630\n", - " 22/1 1.02517 1.01993 +/- 0.00577\n", - " 23/1 1.00274 1.01861 +/- 0.00547\n", - " 24/1 1.04739 1.02066 +/- 0.00547\n", - " 25/1 1.01883 1.02054 +/- 0.00509\n", - " 26/1 1.02021 1.02052 +/- 0.00476\n", - " 27/1 1.04696 1.02207 +/- 0.00474\n", - " 28/1 1.02751 1.02238 +/- 0.00448\n", - " 29/1 1.09537 1.02622 +/- 0.00572\n", - " 30/1 1.03685 1.02675 +/- 0.00545\n", - " 31/1 0.99812 1.02539 +/- 0.00536\n", - " 32/1 1.02526 1.02538 +/- 0.00511\n", - " 33/1 1.05466 1.02665 +/- 0.00505\n", - " 34/1 1.04816 1.02755 +/- 0.00491\n", - " 35/1 1.00148 1.02651 +/- 0.00483\n", - " 36/1 1.02315 1.02638 +/- 0.00464\n", - " 37/1 1.05771 1.02754 +/- 0.00461\n", - " 38/1 1.01675 1.02715 +/- 0.00446\n", - " 39/1 1.03707 1.02749 +/- 0.00432\n", - " 40/1 1.01903 1.02721 +/- 0.00418\n", - " 41/1 1.00332 1.02644 +/- 0.00412\n", - " 42/1 1.02533 1.02641 +/- 0.00399\n", - " 43/1 0.98531 1.02516 +/- 0.00406\n", - " 44/1 1.00406 1.02454 +/- 0.00399\n", - " 45/1 1.01057 1.02414 +/- 0.00389\n", - " 46/1 1.02755 1.02424 +/- 0.00378\n", - " 47/1 1.02783 1.02433 +/- 0.00368\n", - " 48/1 1.00003 1.02369 +/- 0.00364\n", - " 49/1 1.00442 1.02320 +/- 0.00358\n", - " 50/1 1.03215 1.02342 +/- 0.00350\n", - " 51/1 1.01672 1.02326 +/- 0.00341\n", - " 52/1 1.03702 1.02359 +/- 0.00335\n", - " 53/1 1.02063 1.02352 +/- 0.00327\n", - " 54/1 1.04596 1.02403 +/- 0.00323\n", - " 55/1 1.01926 1.02392 +/- 0.00316\n", - " 56/1 1.03058 1.02407 +/- 0.00310\n", - " 57/1 1.06126 1.02486 +/- 0.00313\n", - " 58/1 1.06411 1.02568 +/- 0.00317\n", - " 59/1 1.03278 1.02582 +/- 0.00311\n", - " 60/1 1.04472 1.02620 +/- 0.00307\n", - " 61/1 1.00186 1.02572 +/- 0.00305\n", - " 62/1 1.01133 1.02545 +/- 0.00300\n", - " 63/1 1.03713 1.02567 +/- 0.00295\n", - " 64/1 1.01363 1.02544 +/- 0.00291\n", - " 65/1 0.98126 1.02464 +/- 0.00296\n", - " 66/1 1.01500 1.02447 +/- 0.00292\n", - " 67/1 1.02437 1.02447 +/- 0.00286\n", - " 68/1 1.05057 1.02492 +/- 0.00285\n", - " 69/1 1.04903 1.02533 +/- 0.00283\n", - " 70/1 1.02199 1.02527 +/- 0.00278\n", - " 71/1 1.00536 1.02494 +/- 0.00276\n", - " 72/1 1.01658 1.02481 +/- 0.00272\n", - " 73/1 1.00866 1.02455 +/- 0.00268\n", - " 74/1 1.01800 1.02445 +/- 0.00264\n", - " 75/1 0.99176 1.02395 +/- 0.00265\n", - " 76/1 1.03336 1.02409 +/- 0.00262\n", - " 77/1 1.02699 1.02413 +/- 0.00258\n", - " 78/1 1.01596 1.02401 +/- 0.00254\n", - " 79/1 1.02292 1.02400 +/- 0.00250\n", - " 80/1 1.04804 1.02434 +/- 0.00249\n", - " 81/1 0.99494 1.02393 +/- 0.00249\n", - " 82/1 1.02646 1.02396 +/- 0.00246\n", - " 83/1 1.01223 1.02380 +/- 0.00243\n", - " 84/1 1.02572 1.02383 +/- 0.00239\n", - " 85/1 1.02709 1.02387 +/- 0.00236\n", - " 86/1 1.00315 1.02360 +/- 0.00235\n", - " 87/1 1.01809 1.02353 +/- 0.00232\n", - " 88/1 1.01566 1.02342 +/- 0.00229\n", - " 89/1 1.01093 1.02327 +/- 0.00227\n", - " 90/1 1.02812 1.02333 +/- 0.00224\n", - " 91/1 1.02288 1.02332 +/- 0.00221\n", - " 92/1 1.04070 1.02353 +/- 0.00219\n", - " 93/1 1.03697 1.02370 +/- 0.00217\n", - " 94/1 1.03486 1.02383 +/- 0.00215\n", - " 95/1 1.06359 1.02430 +/- 0.00218\n", - " 96/1 1.04811 1.02457 +/- 0.00217\n", - " 97/1 1.01303 1.02444 +/- 0.00215\n", - " 98/1 1.01243 1.02430 +/- 0.00213\n", - " 99/1 1.03238 1.02439 +/- 0.00211\n", - " 100/1 1.02054 1.02435 +/- 0.00208\n", - " 101/1 1.00402 1.02413 +/- 0.00207\n", - " 102/1 1.03800 1.02428 +/- 0.00206\n", - " 103/1 1.02541 1.02429 +/- 0.00203\n", - " 104/1 1.06867 1.02476 +/- 0.00207\n", - " 105/1 1.03192 1.02484 +/- 0.00205\n", - " 106/1 1.00100 1.02459 +/- 0.00204\n", - " 107/1 1.01098 1.02445 +/- 0.00202\n", - " 108/1 1.02930 1.02450 +/- 0.00200\n", - " 109/1 1.02173 1.02447 +/- 0.00198\n", - " 110/1 1.01411 1.02437 +/- 0.00197\n", - " 111/1 1.03920 1.02452 +/- 0.00195\n", - " 112/1 1.01984 1.02447 +/- 0.00193\n", - " 113/1 1.03912 1.02461 +/- 0.00192\n", - " 114/1 1.04124 1.02477 +/- 0.00191\n", - " 115/1 1.04802 1.02499 +/- 0.00190\n", - " 116/1 1.04129 1.02515 +/- 0.00189\n", - " 117/1 1.03072 1.02520 +/- 0.00187\n", - " 118/1 1.05167 1.02544 +/- 0.00187\n", - " 119/1 0.99954 1.02521 +/- 0.00187\n", - " 120/1 1.00093 1.02499 +/- 0.00187\n", - " 121/1 1.04929 1.02520 +/- 0.00186\n", - " 122/1 1.04556 1.02539 +/- 0.00185\n", - " 123/1 1.03298 1.02545 +/- 0.00184\n", - " 124/1 1.01603 1.02537 +/- 0.00182\n", - " 125/1 1.03522 1.02546 +/- 0.00181\n", - " 126/1 1.05644 1.02572 +/- 0.00181\n", - " 127/1 1.03754 1.02582 +/- 0.00180\n", - " 128/1 1.01524 1.02573 +/- 0.00179\n", - " 129/1 1.01263 1.02562 +/- 0.00178\n", - " 130/1 0.99835 1.02540 +/- 0.00178\n", - " 131/1 1.01268 1.02529 +/- 0.00177\n", - " 132/1 1.03975 1.02541 +/- 0.00175\n", - " 133/1 1.00702 1.02526 +/- 0.00175\n", - " 134/1 1.02335 1.02525 +/- 0.00173\n", - " 135/1 1.04378 1.02539 +/- 0.00173\n", - " 136/1 1.04610 1.02556 +/- 0.00172\n", - " 137/1 1.02284 1.02554 +/- 0.00171\n", - " 138/1 1.05720 1.02578 +/- 0.00171\n", - " 139/1 1.00965 1.02566 +/- 0.00170\n", - " 140/1 1.03719 1.02575 +/- 0.00169\n", - " 141/1 1.02413 1.02574 +/- 0.00168\n", - " 142/1 1.03125 1.02578 +/- 0.00167\n", - " 143/1 1.03641 1.02586 +/- 0.00166\n", - " 144/1 1.02137 1.02582 +/- 0.00164\n", - " 145/1 1.01522 1.02575 +/- 0.00163\n", - " 146/1 1.05163 1.02594 +/- 0.00163\n", - " 147/1 1.03612 1.02601 +/- 0.00162\n", - " 148/1 1.03346 1.02606 +/- 0.00161\n", - " 149/1 1.02306 1.02604 +/- 0.00160\n", - " 150/1 1.01764 1.02598 +/- 0.00159\n", - " 151/1 1.01787 1.02592 +/- 0.00158\n", - " 152/1 1.03263 1.02597 +/- 0.00157\n", - " 153/1 1.01877 1.02592 +/- 0.00156\n", - " 154/1 1.02870 1.02594 +/- 0.00155\n", - " 155/1 1.03071 1.02597 +/- 0.00154\n", - " 156/1 1.04229 1.02609 +/- 0.00153\n", - " 157/1 1.03973 1.02618 +/- 0.00152\n", - " 158/1 1.02180 1.02615 +/- 0.00151\n", - " 159/1 1.01067 1.02604 +/- 0.00151\n", - " 160/1 1.02888 1.02606 +/- 0.00150\n", - " 161/1 1.01711 1.02600 +/- 0.00149\n", - " 162/1 1.01087 1.02590 +/- 0.00148\n", - " 163/1 1.01886 1.02586 +/- 0.00147\n", - " 164/1 1.02210 1.02583 +/- 0.00146\n", - " 165/1 1.04020 1.02593 +/- 0.00146\n", - " 166/1 1.03658 1.02600 +/- 0.00145\n", - " 167/1 1.03222 1.02603 +/- 0.00144\n", - " 168/1 1.03247 1.02608 +/- 0.00143\n", - " 169/1 0.99739 1.02590 +/- 0.00143\n", - " 170/1 1.02464 1.02589 +/- 0.00142\n", - " 171/1 1.04623 1.02601 +/- 0.00142\n", - " 172/1 1.04328 1.02612 +/- 0.00142\n", - " 173/1 1.00812 1.02601 +/- 0.00141\n", - " 174/1 1.01224 1.02593 +/- 0.00141\n", - " 175/1 1.00882 1.02582 +/- 0.00140\n", - " 176/1 1.01286 1.02574 +/- 0.00140\n", - " 177/1 1.02048 1.02571 +/- 0.00139\n", - " 178/1 1.04269 1.02581 +/- 0.00138\n", - " 179/1 1.05862 1.02601 +/- 0.00139\n", - " 180/1 1.02924 1.02603 +/- 0.00138\n", - " 181/1 1.01491 1.02596 +/- 0.00137\n", - " 182/1 1.04255 1.02606 +/- 0.00137\n", - " 183/1 0.99191 1.02586 +/- 0.00137\n", - " 184/1 1.00392 1.02573 +/- 0.00137\n", - " 185/1 1.02982 1.02576 +/- 0.00137\n", - " 186/1 1.02682 1.02576 +/- 0.00136\n", - " 187/1 1.01484 1.02570 +/- 0.00135\n", - " 188/1 1.02825 1.02572 +/- 0.00134\n", - " 189/1 0.98954 1.02551 +/- 0.00135\n", - " 190/1 1.00522 1.02540 +/- 0.00135\n", - " 191/1 1.03762 1.02547 +/- 0.00134\n", - " 192/1 1.02091 1.02544 +/- 0.00134\n", - " 193/1 1.04549 1.02555 +/- 0.00133\n", - " 194/1 1.05531 1.02572 +/- 0.00134\n", - " 195/1 1.01479 1.02566 +/- 0.00133\n", - " 196/1 1.01337 1.02559 +/- 0.00132\n", - " 197/1 0.99187 1.02541 +/- 0.00133\n", - " 198/1 1.01280 1.02534 +/- 0.00132\n", - " 199/1 1.00049 1.02521 +/- 0.00132\n", - " 200/1 1.01879 1.02518 +/- 0.00132\n", - " Creating state point statepoint.200.h5...\n", + " 1/1 1.01702 \n", + " 2/1 0.99463 \n", + " 3/1 1.02321 \n", + " 4/1 0.98628 \n", + " 5/1 1.03122 \n", + " 6/1 1.00774 \n", + " 7/1 1.05616 \n", + " 8/1 1.03051 \n", + " 9/1 1.02321 \n", + " 10/1 1.04380 \n", + " 11/1 1.05837 \n", + " 12/1 1.01514 1.03676 +/- 0.02161\n", + " 13/1 1.06720 1.04690 +/- 0.01608\n", + " 14/1 1.01696 1.03942 +/- 0.01361\n", + " 15/1 1.03549 1.03863 +/- 0.01057\n", + " 16/1 1.01599 1.03486 +/- 0.00942\n", + " 17/1 1.03070 1.03427 +/- 0.00799\n", + " 18/1 1.03778 1.03470 +/- 0.00693\n", + " 19/1 1.03042 1.03423 +/- 0.00613\n", + " 20/1 1.01047 1.03185 +/- 0.00598\n", + " 21/1 1.03251 1.03191 +/- 0.00541\n", + " 22/1 1.02047 1.03096 +/- 0.00503\n", + " 23/1 1.01729 1.02991 +/- 0.00474\n", + " 24/1 1.02948 1.02988 +/- 0.00439\n", + " 25/1 1.01963 1.02919 +/- 0.00414\n", + " 26/1 1.00626 1.02776 +/- 0.00413\n", + " 27/1 1.04531 1.02879 +/- 0.00402\n", + " 28/1 0.99936 1.02716 +/- 0.00412\n", + " 29/1 1.04497 1.02809 +/- 0.00401\n", + " 30/1 1.02429 1.02790 +/- 0.00381\n", + " 31/1 1.05112 1.02901 +/- 0.00379\n", + " 32/1 1.01843 1.02853 +/- 0.00365\n", + " 33/1 1.04478 1.02924 +/- 0.00355\n", + " 34/1 1.01719 1.02873 +/- 0.00344\n", + " 35/1 0.99873 1.02753 +/- 0.00351\n", + " 36/1 1.00054 1.02649 +/- 0.00353\n", + " 37/1 1.03986 1.02699 +/- 0.00343\n", + " 38/1 1.02243 1.02683 +/- 0.00331\n", + " 39/1 1.02744 1.02685 +/- 0.00319\n", + " 40/1 1.01174 1.02634 +/- 0.00313\n", + " 41/1 1.04973 1.02710 +/- 0.00312\n", + " 42/1 0.99564 1.02612 +/- 0.00317\n", + " 43/1 1.03022 1.02624 +/- 0.00308\n", + " 44/1 1.03526 1.02650 +/- 0.00300\n", + " 45/1 1.02143 1.02636 +/- 0.00292\n", + " 46/1 1.03264 1.02653 +/- 0.00284\n", + " 47/1 1.03868 1.02686 +/- 0.00278\n", + " 48/1 1.02385 1.02678 +/- 0.00271\n", + " 49/1 1.03897 1.02710 +/- 0.00266\n", + " 50/1 1.01267 1.02674 +/- 0.00261\n", + " 51/1 0.99683 1.02601 +/- 0.00265\n", + " 52/1 1.04189 1.02638 +/- 0.00261\n", + " 53/1 1.02871 1.02644 +/- 0.00255\n", + " 54/1 1.02564 1.02642 +/- 0.00250\n", + " 55/1 1.02955 1.02649 +/- 0.00244\n", + " 56/1 1.02390 1.02643 +/- 0.00239\n", + " 57/1 1.03342 1.02658 +/- 0.00234\n", + " 58/1 1.01430 1.02633 +/- 0.00231\n", + " 59/1 0.99242 1.02563 +/- 0.00236\n", + " 60/1 1.00442 1.02521 +/- 0.00235\n", + " 61/1 1.03870 1.02547 +/- 0.00232\n", + " 62/1 1.02146 1.02540 +/- 0.00228\n", + " 63/1 1.04782 1.02582 +/- 0.00227\n", + " 64/1 1.02872 1.02587 +/- 0.00223\n", + " 65/1 1.02420 1.02584 +/- 0.00219\n", + " 66/1 1.01974 1.02573 +/- 0.00215\n", + " 67/1 1.00774 1.02542 +/- 0.00214\n", + " 68/1 1.01323 1.02521 +/- 0.00211\n", + " 69/1 1.01468 1.02503 +/- 0.00208\n", + " 70/1 1.02869 1.02509 +/- 0.00205\n", + " 71/1 1.02284 1.02505 +/- 0.00202\n", + " 72/1 1.04815 1.02543 +/- 0.00202\n", + " 73/1 1.01119 1.02520 +/- 0.00200\n", + " 74/1 1.03314 1.02533 +/- 0.00197\n", + " 75/1 1.02333 1.02529 +/- 0.00194\n", + " 76/1 1.04030 1.02552 +/- 0.00193\n", + " 77/1 1.02537 1.02552 +/- 0.00190\n", + " 78/1 1.02875 1.02557 +/- 0.00187\n", + " 79/1 1.03588 1.02572 +/- 0.00185\n", + " 80/1 1.05250 1.02610 +/- 0.00186\n", + " 81/1 1.00477 1.02580 +/- 0.00186\n", + " 82/1 1.03903 1.02598 +/- 0.00184\n", + " 83/1 1.02378 1.02595 +/- 0.00182\n", + " 84/1 1.01107 1.02575 +/- 0.00180\n", + " 85/1 1.01550 1.02561 +/- 0.00178\n", + " 86/1 1.00540 1.02535 +/- 0.00178\n", + " 87/1 1.03056 1.02542 +/- 0.00176\n", + " 88/1 1.01742 1.02531 +/- 0.00174\n", + " 89/1 0.99730 1.02496 +/- 0.00175\n", + " 90/1 1.03569 1.02509 +/- 0.00174\n", + " 91/1 1.04514 1.02534 +/- 0.00173\n", + " 92/1 1.02757 1.02537 +/- 0.00171\n", + " 93/1 1.00610 1.02514 +/- 0.00171\n", + " 94/1 1.03576 1.02526 +/- 0.00169\n", + " 95/1 1.03732 1.02540 +/- 0.00168\n", + " 96/1 1.04784 1.02567 +/- 0.00168\n", + " 97/1 1.06507 1.02612 +/- 0.00172\n", + " 98/1 1.03673 1.02624 +/- 0.00170\n", + " 99/1 1.01270 1.02609 +/- 0.00169\n", + " 100/1 1.01980 1.02602 +/- 0.00167\n", + " 101/1 1.01357 1.02588 +/- 0.00166\n", + " 102/1 1.03125 1.02594 +/- 0.00164\n", + " 103/1 1.01527 1.02582 +/- 0.00163\n", + " 104/1 1.02403 1.02580 +/- 0.00161\n", + " 105/1 1.03435 1.02589 +/- 0.00160\n", + " 106/1 1.04113 1.02605 +/- 0.00159\n", + " 107/1 1.03291 1.02612 +/- 0.00157\n", + " 108/1 1.02478 1.02611 +/- 0.00156\n", + " 109/1 1.05814 1.02643 +/- 0.00158\n", + " 110/1 1.02647 1.02643 +/- 0.00156\n", + " 111/1 0.98951 1.02607 +/- 0.00159\n", + " 112/1 1.00739 1.02589 +/- 0.00158\n", + " 113/1 1.04165 1.02604 +/- 0.00157\n", + " 114/1 1.00047 1.02579 +/- 0.00158\n", + " 115/1 1.02550 1.02579 +/- 0.00156\n", + " 116/1 1.02408 1.02577 +/- 0.00155\n", + " 117/1 1.03110 1.02582 +/- 0.00153\n", + " 118/1 1.02874 1.02585 +/- 0.00152\n", + " 119/1 1.02348 1.02583 +/- 0.00151\n", + " 120/1 1.01969 1.02577 +/- 0.00149\n", + " 121/1 1.02312 1.02575 +/- 0.00148\n", + " 122/1 1.03261 1.02581 +/- 0.00147\n", + " 123/1 0.98394 1.02544 +/- 0.00150\n", + " 124/1 1.03771 1.02555 +/- 0.00149\n", + " 125/1 1.01857 1.02549 +/- 0.00148\n", + " 126/1 1.00066 1.02527 +/- 0.00148\n", + " 127/1 1.02372 1.02526 +/- 0.00147\n", + " 128/1 1.03307 1.02533 +/- 0.00146\n", + " 129/1 1.00889 1.02519 +/- 0.00145\n", + " 130/1 1.02053 1.02515 +/- 0.00144\n", + " 131/1 1.00943 1.02502 +/- 0.00144\n", + " 132/1 1.07225 1.02541 +/- 0.00148\n", + " 133/1 1.04068 1.02553 +/- 0.00147\n", + " 134/1 1.03509 1.02561 +/- 0.00146\n", + " 135/1 1.01250 1.02550 +/- 0.00145\n", + " 136/1 1.02179 1.02547 +/- 0.00144\n", + " 137/1 1.05685 1.02572 +/- 0.00145\n", + " 138/1 1.04217 1.02585 +/- 0.00144\n", + " 139/1 1.02793 1.02586 +/- 0.00143\n", + " 140/1 1.01207 1.02576 +/- 0.00143\n", + " 141/1 1.03445 1.02582 +/- 0.00142\n", + " 142/1 1.03579 1.02590 +/- 0.00141\n", + " 143/1 1.00786 1.02576 +/- 0.00140\n", + " 144/1 0.99089 1.02550 +/- 0.00142\n", + " 145/1 1.02617 1.02551 +/- 0.00141\n", + " 146/1 1.01691 1.02545 +/- 0.00140\n", + " 147/1 1.00692 1.02531 +/- 0.00139\n", + " 148/1 0.97702 1.02496 +/- 0.00143\n", + " 149/1 1.04002 1.02507 +/- 0.00142\n", + " 150/1 1.01262 1.02498 +/- 0.00141\n", + " 151/1 1.03613 1.02506 +/- 0.00141\n", + " 152/1 1.02920 1.02509 +/- 0.00140\n", + " 153/1 1.02199 1.02507 +/- 0.00139\n", + " 154/1 1.03421 1.02513 +/- 0.00138\n", + " 155/1 1.05882 1.02536 +/- 0.00139\n", + " 156/1 1.02649 1.02537 +/- 0.00138\n", + " 157/1 1.01933 1.02533 +/- 0.00137\n", + " 158/1 1.04269 1.02545 +/- 0.00137\n", + " 159/1 0.99604 1.02525 +/- 0.00137\n", + " 160/1 1.04748 1.02540 +/- 0.00137\n", + " 161/1 1.00501 1.02526 +/- 0.00137\n", + " 162/1 1.00550 1.02513 +/- 0.00137\n", + " 163/1 1.00115 1.02498 +/- 0.00137\n", + " 164/1 1.02283 1.02496 +/- 0.00136\n", + " 165/1 1.01964 1.02493 +/- 0.00135\n", + " 166/1 1.02287 1.02491 +/- 0.00134\n", + " 167/1 1.05498 1.02511 +/- 0.00134\n", + " 168/1 1.05267 1.02528 +/- 0.00135\n", + " 169/1 1.00474 1.02515 +/- 0.00135\n", + " 170/1 1.03469 1.02521 +/- 0.00134\n", + " 171/1 1.02499 1.02521 +/- 0.00133\n", + " 172/1 1.03961 1.02530 +/- 0.00132\n", + " 173/1 1.01240 1.02522 +/- 0.00132\n", + " 174/1 1.00762 1.02511 +/- 0.00132\n", + " 175/1 1.00200 1.02497 +/- 0.00131\n", + " 176/1 1.01449 1.02491 +/- 0.00131\n", + " 177/1 1.01111 1.02483 +/- 0.00130\n", + " 178/1 1.01208 1.02475 +/- 0.00130\n", + " 179/1 1.03304 1.02480 +/- 0.00129\n", + " 180/1 1.04504 1.02492 +/- 0.00129\n", + " 181/1 1.03476 1.02498 +/- 0.00128\n", + " 182/1 1.02124 1.02495 +/- 0.00128\n", + " 183/1 0.98855 1.02474 +/- 0.00128\n", + " 184/1 1.04689 1.02487 +/- 0.00128\n", + " 185/1 1.00618 1.02476 +/- 0.00128\n", + " 186/1 1.02012 1.02474 +/- 0.00127\n", + " 187/1 1.00162 1.02461 +/- 0.00127\n", + " 188/1 1.03269 1.02465 +/- 0.00127\n", + " 189/1 1.04772 1.02478 +/- 0.00127\n", + " 190/1 1.01132 1.02471 +/- 0.00126\n", + " 191/1 1.02669 1.02472 +/- 0.00125\n", + " 192/1 1.01154 1.02464 +/- 0.00125\n", + " 193/1 1.05795 1.02483 +/- 0.00126\n", + " 194/1 1.01615 1.02478 +/- 0.00125\n", + " 195/1 1.03828 1.02485 +/- 0.00125\n", + " 196/1 1.00695 1.02476 +/- 0.00124\n", + " 197/1 1.04126 1.02484 +/- 0.00124\n", + " 198/1 1.02834 1.02486 +/- 0.00123\n", + " 199/1 1.01000 1.02478 +/- 0.00123\n", + " 200/1 0.99294 1.02462 +/- 0.00123\n", + " 201/1 1.00248 1.02450 +/- 0.00123\n", + " 202/1 1.03461 1.02455 +/- 0.00123\n", + " 203/1 1.06289 1.02475 +/- 0.00124\n", + " 204/1 1.03010 1.02478 +/- 0.00123\n", + " 205/1 1.04636 1.02489 +/- 0.00123\n", + " 206/1 1.05434 1.02504 +/- 0.00123\n", + " 207/1 1.03993 1.02512 +/- 0.00123\n", + " 208/1 1.02672 1.02512 +/- 0.00122\n", + " 209/1 1.04958 1.02525 +/- 0.00122\n", + " 210/1 0.99194 1.02508 +/- 0.00123\n", + " 211/1 1.01570 1.02503 +/- 0.00122\n", + " 212/1 1.04079 1.02511 +/- 0.00122\n", + " 213/1 1.02961 1.02513 +/- 0.00121\n", + " 214/1 1.03797 1.02520 +/- 0.00121\n", + " 215/1 1.03714 1.02526 +/- 0.00120\n", + " 216/1 1.03299 1.02529 +/- 0.00120\n", + " 217/1 1.00461 1.02519 +/- 0.00120\n", + " 218/1 1.02386 1.02519 +/- 0.00119\n", + " 219/1 1.01955 1.02516 +/- 0.00119\n", + " 220/1 1.04372 1.02525 +/- 0.00118\n", + " 221/1 1.01694 1.02521 +/- 0.00118\n", + " 222/1 0.99642 1.02507 +/- 0.00118\n", + " 223/1 1.00999 1.02500 +/- 0.00118\n", + " 224/1 1.02703 1.02501 +/- 0.00117\n", + " 225/1 1.00236 1.02491 +/- 0.00117\n", + " 226/1 1.02825 1.02492 +/- 0.00117\n", + " 227/1 1.04535 1.02502 +/- 0.00116\n", + " 228/1 1.01779 1.02498 +/- 0.00116\n", + " 229/1 1.01058 1.02492 +/- 0.00116\n", + " 230/1 1.00391 1.02482 +/- 0.00115\n", + " 231/1 1.05990 1.02498 +/- 0.00116\n", + " 232/1 1.01885 1.02495 +/- 0.00116\n", + " 233/1 1.03204 1.02498 +/- 0.00115\n", + " 234/1 0.99396 1.02485 +/- 0.00115\n", + " 235/1 1.01828 1.02482 +/- 0.00115\n", + " 236/1 1.08225 1.02507 +/- 0.00117\n", + " 237/1 1.00335 1.02498 +/- 0.00117\n", + " 238/1 1.03097 1.02500 +/- 0.00117\n", + " 239/1 1.01738 1.02497 +/- 0.00116\n", + " 240/1 1.02261 1.02496 +/- 0.00116\n", + " 241/1 1.02814 1.02497 +/- 0.00115\n", + " 242/1 1.01158 1.02491 +/- 0.00115\n", + " 243/1 1.03507 1.02496 +/- 0.00114\n", + " 244/1 1.01914 1.02493 +/- 0.00114\n", + " 245/1 1.04555 1.02502 +/- 0.00114\n", + " 246/1 1.02459 1.02502 +/- 0.00113\n", + " 247/1 1.05827 1.02516 +/- 0.00114\n", + " 248/1 1.02549 1.02516 +/- 0.00113\n", + " 249/1 1.03354 1.02520 +/- 0.00113\n", + " 250/1 1.04186 1.02526 +/- 0.00113\n", + " 251/1 1.00466 1.02518 +/- 0.00112\n", + " 252/1 0.99065 1.02504 +/- 0.00113\n", + " 253/1 1.03065 1.02506 +/- 0.00112\n", + " 254/1 1.02167 1.02505 +/- 0.00112\n", + " 255/1 1.01700 1.02501 +/- 0.00112\n", + " 256/1 1.03619 1.02506 +/- 0.00111\n", + " 257/1 1.01833 1.02503 +/- 0.00111\n", + " 258/1 1.02211 1.02502 +/- 0.00110\n", + " 259/1 1.04348 1.02509 +/- 0.00110\n", + " 260/1 1.03444 1.02513 +/- 0.00110\n", + " 261/1 1.05597 1.02525 +/- 0.00110\n", + " 262/1 1.02085 1.02524 +/- 0.00110\n", + " 263/1 1.00552 1.02516 +/- 0.00109\n", + " 264/1 1.03976 1.02522 +/- 0.00109\n", + " 265/1 1.02810 1.02523 +/- 0.00109\n", + " 266/1 1.00911 1.02516 +/- 0.00108\n", + " 267/1 1.01963 1.02514 +/- 0.00108\n", + " 268/1 1.03732 1.02519 +/- 0.00108\n", + " 269/1 1.02422 1.02519 +/- 0.00107\n", + " 270/1 1.01546 1.02515 +/- 0.00107\n", + " 271/1 1.05488 1.02526 +/- 0.00107\n", + " 272/1 1.01709 1.02523 +/- 0.00107\n", + " 273/1 1.05629 1.02535 +/- 0.00107\n", + " 274/1 1.03864 1.02540 +/- 0.00107\n", + " 275/1 1.01472 1.02536 +/- 0.00106\n", + " 276/1 1.03425 1.02539 +/- 0.00106\n", + " 277/1 1.00663 1.02532 +/- 0.00106\n", + " 278/1 1.03326 1.02535 +/- 0.00106\n", + " 279/1 1.02571 1.02535 +/- 0.00105\n", + " 280/1 1.00525 1.02528 +/- 0.00105\n", + " 281/1 1.00451 1.02520 +/- 0.00105\n", + " 282/1 1.04016 1.02526 +/- 0.00105\n", + " 283/1 0.98343 1.02510 +/- 0.00105\n", + " 284/1 1.04843 1.02519 +/- 0.00105\n", + " 285/1 1.01807 1.02516 +/- 0.00105\n", + " 286/1 1.02393 1.02516 +/- 0.00105\n", + " 287/1 1.01851 1.02514 +/- 0.00104\n", + " 288/1 1.03976 1.02519 +/- 0.00104\n", + " 289/1 1.03153 1.02521 +/- 0.00104\n", + " 290/1 1.00416 1.02514 +/- 0.00104\n", + " 291/1 1.01426 1.02510 +/- 0.00103\n", + " 292/1 1.02583 1.02510 +/- 0.00103\n", + " 293/1 1.01680 1.02507 +/- 0.00103\n", + " 294/1 1.04578 1.02514 +/- 0.00103\n", + " 295/1 1.03162 1.02517 +/- 0.00102\n", + " 296/1 1.01682 1.02514 +/- 0.00102\n", + " 297/1 1.00488 1.02507 +/- 0.00102\n", + " 298/1 1.03057 1.02508 +/- 0.00101\n", + " 299/1 1.01126 1.02504 +/- 0.00101\n", + " 300/1 1.03528 1.02507 +/- 0.00101\n", + " 301/1 1.05548 1.02518 +/- 0.00101\n", + " 302/1 1.02994 1.02519 +/- 0.00101\n", + " 303/1 1.03010 1.02521 +/- 0.00100\n", + " 304/1 1.04031 1.02526 +/- 0.00100\n", + " 305/1 1.05866 1.02537 +/- 0.00101\n", + " 306/1 1.03602 1.02541 +/- 0.00100\n", + " 307/1 1.01362 1.02537 +/- 0.00100\n", + " 308/1 1.01318 1.02533 +/- 0.00100\n", + " 309/1 1.04262 1.02539 +/- 0.00100\n", + " 310/1 1.01626 1.02536 +/- 0.00099\n", + " 311/1 1.00285 1.02528 +/- 0.00099\n", + " 312/1 0.98155 1.02514 +/- 0.00100\n", + " 313/1 1.05649 1.02524 +/- 0.00100\n", + " 314/1 1.00960 1.02519 +/- 0.00100\n", + " 315/1 1.05350 1.02528 +/- 0.00100\n", + " 316/1 1.03842 1.02533 +/- 0.00100\n", + " 317/1 1.01394 1.02529 +/- 0.00100\n", + " 318/1 1.01830 1.02527 +/- 0.00099\n", + " 319/1 1.02050 1.02525 +/- 0.00099\n", + " 320/1 1.03402 1.02528 +/- 0.00099\n", + " 321/1 1.04547 1.02534 +/- 0.00099\n", + " 322/1 1.02579 1.02534 +/- 0.00098\n", + " 323/1 1.01922 1.02533 +/- 0.00098\n", + " 324/1 1.01050 1.02528 +/- 0.00098\n", + " 325/1 1.01426 1.02524 +/- 0.00098\n", + " 326/1 1.03283 1.02527 +/- 0.00097\n", + " 327/1 1.03859 1.02531 +/- 0.00097\n", + " 328/1 1.01536 1.02528 +/- 0.00097\n", + " 329/1 1.03149 1.02530 +/- 0.00097\n", + " 330/1 1.04328 1.02535 +/- 0.00096\n", + " 331/1 1.01949 1.02534 +/- 0.00096\n", + " 332/1 1.02319 1.02533 +/- 0.00096\n", + " 333/1 1.01704 1.02530 +/- 0.00096\n", + " 334/1 1.02691 1.02531 +/- 0.00095\n", + " 335/1 1.03188 1.02533 +/- 0.00095\n", + " 336/1 1.03107 1.02535 +/- 0.00095\n", + " 337/1 1.02410 1.02534 +/- 0.00094\n", + " 338/1 0.99917 1.02526 +/- 0.00094\n", + " 339/1 1.03593 1.02529 +/- 0.00094\n", + " 340/1 1.02286 1.02529 +/- 0.00094\n", + " 341/1 1.04154 1.02534 +/- 0.00094\n", + " 342/1 1.01664 1.02531 +/- 0.00094\n", + " 343/1 1.01041 1.02527 +/- 0.00093\n", + " 344/1 1.02033 1.02525 +/- 0.00093\n", + " 345/1 1.03137 1.02527 +/- 0.00093\n", + " 346/1 1.02162 1.02526 +/- 0.00093\n", + " 347/1 1.00835 1.02521 +/- 0.00092\n", + " 348/1 1.01168 1.02517 +/- 0.00092\n", + " 349/1 1.01168 1.02513 +/- 0.00092\n", + " 350/1 1.03509 1.02516 +/- 0.00092\n", + " 351/1 1.01883 1.02514 +/- 0.00092\n", + " 352/1 1.04314 1.02519 +/- 0.00091\n", + " 353/1 0.99067 1.02509 +/- 0.00092\n", + " 354/1 1.03100 1.02511 +/- 0.00091\n", + " 355/1 1.01664 1.02508 +/- 0.00091\n", + " 356/1 1.02193 1.02507 +/- 0.00091\n", + " 357/1 1.03213 1.02509 +/- 0.00091\n", + " 358/1 1.00555 1.02504 +/- 0.00091\n", + " 359/1 1.04849 1.02511 +/- 0.00091\n", + " 360/1 1.02174 1.02510 +/- 0.00090\n", + " 361/1 1.05064 1.02517 +/- 0.00090\n", + " 362/1 1.05274 1.02525 +/- 0.00091\n", + " 363/1 1.00932 1.02520 +/- 0.00090\n", + " 364/1 1.03400 1.02523 +/- 0.00090\n", + " 365/1 1.00149 1.02516 +/- 0.00090\n", + " 366/1 1.01631 1.02514 +/- 0.00090\n", + " 367/1 1.03928 1.02517 +/- 0.00090\n", + " 368/1 1.01318 1.02514 +/- 0.00090\n", + " 369/1 1.04610 1.02520 +/- 0.00090\n", + " 370/1 1.04338 1.02525 +/- 0.00089\n", + " 371/1 1.01638 1.02523 +/- 0.00089\n", + " 372/1 1.04056 1.02527 +/- 0.00089\n", + " 373/1 1.00090 1.02520 +/- 0.00089\n", + " 374/1 1.01261 1.02517 +/- 0.00089\n", + " 375/1 1.03919 1.02520 +/- 0.00089\n", + " 376/1 0.99900 1.02513 +/- 0.00089\n", + " 377/1 1.00168 1.02507 +/- 0.00089\n", + " 378/1 0.99476 1.02499 +/- 0.00089\n", + " 379/1 1.04960 1.02505 +/- 0.00089\n", + " 380/1 0.99797 1.02498 +/- 0.00089\n", + " 381/1 1.04956 1.02505 +/- 0.00089\n", + " 382/1 1.02803 1.02505 +/- 0.00089\n", + " 383/1 0.99388 1.02497 +/- 0.00089\n", + " 384/1 1.00767 1.02492 +/- 0.00089\n", + " 385/1 1.00856 1.02488 +/- 0.00089\n", + " 386/1 1.02997 1.02489 +/- 0.00088\n", + " 387/1 0.97841 1.02477 +/- 0.00089\n", + " 388/1 0.99712 1.02470 +/- 0.00089\n", + " 389/1 0.99072 1.02461 +/- 0.00089\n", + " 390/1 1.02439 1.02461 +/- 0.00089\n", + " 391/1 1.02769 1.02462 +/- 0.00089\n", + " 392/1 1.02205 1.02461 +/- 0.00089\n", + " 393/1 1.03702 1.02464 +/- 0.00088\n", + " 394/1 1.00274 1.02458 +/- 0.00088\n", + " 395/1 1.00131 1.02452 +/- 0.00088\n", + " 396/1 1.00130 1.02446 +/- 0.00088\n", + " 397/1 1.00472 1.02441 +/- 0.00088\n", + " 398/1 1.00724 1.02437 +/- 0.00088\n", + " 399/1 1.03061 1.02438 +/- 0.00088\n", + " 400/1 0.99651 1.02431 +/- 0.00088\n", + " 401/1 0.99290 1.02423 +/- 0.00088\n", + " 402/1 1.02166 1.02423 +/- 0.00088\n", + " 403/1 1.01691 1.02421 +/- 0.00088\n", + " 404/1 1.00492 1.02416 +/- 0.00088\n", + " 405/1 1.00663 1.02411 +/- 0.00088\n", + " 406/1 1.01865 1.02410 +/- 0.00087\n", + " 407/1 1.02717 1.02411 +/- 0.00087\n", + " 408/1 1.01793 1.02409 +/- 0.00087\n", + " 409/1 1.02606 1.02410 +/- 0.00087\n", + " 410/1 1.03809 1.02413 +/- 0.00087\n", + " 411/1 1.03780 1.02417 +/- 0.00086\n", + " 412/1 1.02782 1.02418 +/- 0.00086\n", + " 413/1 1.03077 1.02419 +/- 0.00086\n", + " 414/1 1.00651 1.02415 +/- 0.00086\n", + " 415/1 1.05594 1.02423 +/- 0.00086\n", + " 416/1 0.99558 1.02416 +/- 0.00086\n", + " 417/1 1.00689 1.02411 +/- 0.00086\n", + " 418/1 1.02932 1.02413 +/- 0.00086\n", + " 419/1 1.03552 1.02415 +/- 0.00086\n", + " 420/1 1.03735 1.02419 +/- 0.00085\n", + " 421/1 1.02402 1.02419 +/- 0.00085\n", + " 422/1 1.04227 1.02423 +/- 0.00085\n", + " 423/1 1.03087 1.02425 +/- 0.00085\n", + " 424/1 1.04363 1.02429 +/- 0.00085\n", + " 425/1 1.02676 1.02430 +/- 0.00085\n", + " 426/1 1.03739 1.02433 +/- 0.00085\n", + " 427/1 1.02977 1.02434 +/- 0.00084\n", + " 428/1 1.02547 1.02435 +/- 0.00084\n", + " 429/1 1.03552 1.02437 +/- 0.00084\n", + " 430/1 1.04282 1.02442 +/- 0.00084\n", + " 431/1 1.03171 1.02443 +/- 0.00084\n", + " 432/1 1.01030 1.02440 +/- 0.00084\n", + " 433/1 1.04168 1.02444 +/- 0.00084\n", + " 434/1 0.98994 1.02436 +/- 0.00084\n", + " 435/1 0.98166 1.02426 +/- 0.00084\n", + " 436/1 1.00178 1.02421 +/- 0.00084\n", + " 437/1 1.03801 1.02424 +/- 0.00084\n", + " 438/1 1.02099 1.02423 +/- 0.00084\n", + " 439/1 1.01305 1.02421 +/- 0.00084\n", + " 440/1 1.02286 1.02420 +/- 0.00083\n", + " 441/1 1.03697 1.02423 +/- 0.00083\n", + " 442/1 0.99050 1.02415 +/- 0.00083\n", + " 443/1 1.02238 1.02415 +/- 0.00083\n", + " 444/1 1.05188 1.02421 +/- 0.00083\n", + " 445/1 1.03150 1.02423 +/- 0.00083\n", + " 446/1 1.01071 1.02420 +/- 0.00083\n", + " 447/1 1.03713 1.02423 +/- 0.00083\n", + " 448/1 1.03631 1.02426 +/- 0.00083\n", + " 449/1 1.02968 1.02427 +/- 0.00083\n", + " 450/1 1.03031 1.02428 +/- 0.00082\n", + " 451/1 1.02161 1.02428 +/- 0.00082\n", + " 452/1 0.99036 1.02420 +/- 0.00082\n", + " 453/1 1.02581 1.02420 +/- 0.00082\n", + " 454/1 1.03140 1.02422 +/- 0.00082\n", + " 455/1 1.01962 1.02421 +/- 0.00082\n", + " 456/1 1.00680 1.02417 +/- 0.00082\n", + " 457/1 1.00178 1.02412 +/- 0.00082\n", + " 458/1 1.02306 1.02412 +/- 0.00082\n", + " 459/1 1.02653 1.02412 +/- 0.00081\n", + " 460/1 1.02934 1.02413 +/- 0.00081\n", + " 461/1 1.00872 1.02410 +/- 0.00081\n", + " 462/1 1.00012 1.02405 +/- 0.00081\n", + " 463/1 0.99057 1.02397 +/- 0.00081\n", + " 464/1 1.02353 1.02397 +/- 0.00081\n", + " 465/1 1.01402 1.02395 +/- 0.00081\n", + " 466/1 1.01651 1.02393 +/- 0.00081\n", + " 467/1 1.01024 1.02390 +/- 0.00081\n", + " 468/1 1.02504 1.02391 +/- 0.00080\n", + " 469/1 1.00891 1.02387 +/- 0.00080\n", + " 470/1 1.04038 1.02391 +/- 0.00080\n", + " 471/1 1.04346 1.02395 +/- 0.00080\n", + " 472/1 1.02634 1.02396 +/- 0.00080\n", + " 473/1 1.01207 1.02393 +/- 0.00080\n", + " 474/1 1.00787 1.02390 +/- 0.00080\n", + " 475/1 1.03591 1.02392 +/- 0.00080\n", + " 476/1 1.04257 1.02396 +/- 0.00080\n", + " 477/1 1.00536 1.02392 +/- 0.00079\n", + " 478/1 1.07545 1.02403 +/- 0.00080\n", + " 479/1 1.02306 1.02403 +/- 0.00080\n", + " 480/1 1.02733 1.02404 +/- 0.00080\n", + " 481/1 1.00990 1.02401 +/- 0.00080\n", + " 482/1 0.99031 1.02394 +/- 0.00080\n", + " 483/1 0.98006 1.02384 +/- 0.00080\n", + " 484/1 1.05635 1.02391 +/- 0.00080\n", + " 485/1 1.02410 1.02391 +/- 0.00080\n", + " 486/1 1.01227 1.02389 +/- 0.00080\n", + " 487/1 1.00614 1.02385 +/- 0.00080\n", + " 488/1 1.01837 1.02384 +/- 0.00080\n", + " 489/1 1.02565 1.02384 +/- 0.00080\n", + " 490/1 1.00530 1.02381 +/- 0.00079\n", + " 491/1 1.01958 1.02380 +/- 0.00079\n", + " 492/1 1.04490 1.02384 +/- 0.00079\n", + " 493/1 1.02567 1.02384 +/- 0.00079\n", + " 494/1 1.03865 1.02387 +/- 0.00079\n", + " 495/1 1.03990 1.02391 +/- 0.00079\n", + " 496/1 0.98352 1.02382 +/- 0.00079\n", + " 497/1 1.00909 1.02379 +/- 0.00079\n", + " 498/1 1.03661 1.02382 +/- 0.00079\n", + " 499/1 1.04423 1.02386 +/- 0.00079\n", + " 500/1 1.06406 1.02394 +/- 0.00079\n", + " Creating state point statepoint.500.h5...\n", "\n", " ===========================================================================\n", " ======================> SIMULATION FINISHED <======================\n", @@ -1640,27 +2165,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 6.3000E-02 seconds\n", + " Total time for initialization = 5.3000E-02 seconds\n", " Reading cross sections = 5.0000E-03 seconds\n", - " Total time in simulation = 7.3280E+01 seconds\n", - " Time in transport only = 7.3104E+01 seconds\n", - " Time in inactive batches = 1.1200E+00 seconds\n", - " Time in active batches = 7.2160E+01 seconds\n", - " Time synchronizing fission bank = 2.5000E-02 seconds\n", - " Sampling source sites = 1.8000E-02 seconds\n", - " SEND/RECV source sites = 7.0000E-03 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", + " Total time in simulation = 1.8631E+02 seconds\n", + " Time in transport only = 1.8590E+02 seconds\n", + " Time in inactive batches = 1.1710E+00 seconds\n", + " Time in active batches = 1.8514E+02 seconds\n", + " Time synchronizing fission bank = 7.3000E-02 seconds\n", + " Sampling source sites = 5.1000E-02 seconds\n", + " SEND/RECV source sites = 2.2000E-02 seconds\n", + " Time accumulating tallies = 4.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 7.3353E+01 seconds\n", - " Calculation Rate (inactive) = 44642.9 neutrons/second\n", - " Calculation Rate (active) = 13165.2 neutrons/second\n", + " Total time elapsed = 1.8637E+02 seconds\n", + " Calculation Rate (inactive) = 42698.5 neutrons/second\n", + " Calculation Rate (active) = 13233.2 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.02597 +/- 0.00117\n", - " k-effective (Track-length) = 1.02518 +/- 0.00132\n", - " k-effective (Absorption) = 1.02581 +/- 0.00070\n", - " Combined k-effective = 1.02562 +/- 0.00068\n", + " k-effective (Collision) = 1.02403 +/- 0.00071\n", + " k-effective (Track-length) = 1.02394 +/- 0.00079\n", + " k-effective (Absorption) = 1.02539 +/- 0.00044\n", + " Combined k-effective = 1.02518 +/- 0.00042\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -1671,15 +2196,12 @@ "0" ] }, - "execution_count": 37, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# Close the StatePoint File\n", - "sp._f.close()\n", - "\n", "# Run the Multi-Group OpenMC Simulation\n", "openmc.run()" ] @@ -1691,12 +2213,13 @@ "# Results Comparison\n", "Now we can compare the multi-group and continuous-energy results.\n", "\n", - "We will begin by loading the multi-group statepoint file we just finished writing and extracting the calculated keff." + "We will begin by loading the multi-group statepoint file we just finished writing and extracting the calculated keff.\n", + "Since we did not rename the summary file, we do not need to load it separately this time." ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 36, "metadata": { "collapsed": false }, @@ -1704,11 +2227,27 @@ "source": [ "# Load the last statepoint file and keff value\n", "mgsp = openmc.StatePoint('statepoint.' + str(batches) + '.h5')\n", - "mgsu = openmc.Summary('summary.h5')\n", - "mgsp.link_with_summary(mgsu)\n", "mg_keff = mgsp.k_combined" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we can load the continuous-energy eigenvalue for comparison." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "ce_keff = sp.k_combined" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1718,7 +2257,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 38, "metadata": { "collapsed": false }, @@ -1727,9 +2266,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Continuous-Energy keff = 1.025440\n", - "Multi-Group keff = 1.025621\n", - "bias [pcm]: -18.1\n" + "Continuous-Energy keff = 1.025194\n", + "Multi-Group keff = 1.025183\n", + "bias [pcm]: 1.1\n" ] } ], @@ -1745,7 +2284,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We see quite good agreement with only an 18pcm difference between the two." + "We see quite good agreement with only an 1 pcm difference between the two. While these results are quite favorable, due to the high degree of approximations inherent in practical application of multi-group theory, one should not expect results of such fidelity always for multi-group Monte Carlo calculations." ] }, { @@ -1764,16 +2303,9 @@ "First, we extract volume-integrated fission rates from the Multi-Group calculation's mesh fission rate tally for each pin cell in the fuel assembly." ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we can do the same for the Multi-Group results." - ] - }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 39, "metadata": { "collapsed": false }, @@ -1790,6 +2322,32 @@ "mgopenmc_fission_rates /= np.mean(mgopenmc_fission_rates)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can do the same for the Multi-Group results." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Get the OpenMC fission rate mesh tally data\n", + "mesh_tally = sp.get_tally(name='mesh tally')\n", + "openmc_fission_rates = mesh_tally.get_values(scores=['fission'])\n", + "\n", + "# Reshape array to 2D for plotting\n", + "openmc_fission_rates.shape = (17,17)\n", + "\n", + "# Normalize to the average pin power\n", + "openmc_fission_rates /= np.mean(openmc_fission_rates)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1807,7 +2365,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 41, @@ -1816,9 +2374,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1845,6 +2403,15 @@ "source": [ "We also see very good agreement between the fission rate distributions." ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 82b7616735..334a0fa9cf 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -724,7 +724,7 @@ class Library(object): def write_mg_library(self, xs_type='macro', domain_names=None, xs_ids=None, filename='mg_cross_sections', directory='./', - return_names=True): + return_names=False): """Creates a cross-section data library file for the Multi-Group mode of OpenMC. @@ -749,7 +749,7 @@ class Library(object): return_names : bool Flag to indicate if the user would like the names of the materials generated by this function returned with completion. - Defaults to True. + Defaults to False, indicating that no names will be returned. Returns ------- From 7ed772d6c3b59e633fbb9201f100a27d8008c15d Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Fri, 13 May 2016 10:08:54 -0400 Subject: [PATCH 532/650] Now using scatter-PN scores in ScatterMatrixXS for tallying efficiency --- .../pythonapi/examples/mgxs-part-i.ipynb | 40 +- .../pythonapi/examples/mgxs-part-ii.ipynb | 78 +- .../pythonapi/examples/mgxs-part-iii.ipynb | 36 +- openmc/mgxs/mgxs.py | 192 +- .../results_true.dat | 48 +- .../results_true.dat | 4 +- .../results_true.dat | 120 +- .../results_true.dat | 1600 ++++++++--------- 8 files changed, 1075 insertions(+), 1043 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index 2f2a801779..2d44d95cdb 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -410,7 +410,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 13, "metadata": { "collapsed": false }, @@ -419,27 +419,27 @@ "data": { "text/plain": [ "OrderedDict([('flux', Tally\n", - "\tID =\t10012\n", + "\tID =\t10000\n", "\tName =\t\n", "\tFilters =\t\n", " \t\tcell\t[1]\n", " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", "\tNuclides =\ttotal \n", - "\tScores =\t[u'flux']\n", + "\tScores =\t['flux']\n", "\tEstimator =\ttracklength\n", "), ('absorption', Tally\n", - "\tID =\t10013\n", + "\tID =\t10001\n", "\tName =\t\n", "\tFilters =\t\n", " \t\tcell\t[1]\n", " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", "\tNuclides =\ttotal \n", - "\tScores =\t[u'absorption']\n", + "\tScores =\t['absorption']\n", "\tEstimator =\ttracklength\n", ")])" ] }, - "execution_count": 26, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -513,8 +513,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: ae588276014a905ecc6e0967bf08288ecec5b550\n", - " Date/Time: 2016-05-12 20:41:27\n", + " Git SHA1: 19feb55e6d5e8350398627f39fb55ee8e2e63011\n", + " Date/Time: 2016-05-13 09:02:04\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -600,20 +600,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.7500E-01 seconds\n", - " Reading cross sections = 9.7000E-02 seconds\n", - " Total time in simulation = 1.8074E+01 seconds\n", - " Time in transport only = 1.8055E+01 seconds\n", - " Time in inactive batches = 2.1180E+00 seconds\n", - " Time in active batches = 1.5956E+01 seconds\n", + " Total time for initialization = 4.2500E-01 seconds\n", + " Reading cross sections = 8.5000E-02 seconds\n", + " Total time in simulation = 1.6642E+01 seconds\n", + " Time in transport only = 1.6628E+01 seconds\n", + " Time in inactive batches = 1.9160E+00 seconds\n", + " Time in active batches = 1.4726E+01 seconds\n", " Time synchronizing fission bank = 4.0000E-03 seconds\n", - " Sampling source sites = 4.0000E-03 seconds\n", - " SEND/RECV source sites = 0.0000E+00 seconds\n", - " Time accumulating tallies = 2.0000E-03 seconds\n", + " Sampling source sites = 2.0000E-03 seconds\n", + " SEND/RECV source sites = 2.0000E-03 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.8559E+01 seconds\n", - " Calculation Rate (inactive) = 11803.6 neutrons/second\n", - " Calculation Rate (active) = 6267.23 neutrons/second\n", + " Total time elapsed = 1.7076E+01 seconds\n", + " Calculation Rate (inactive) = 13048.0 neutrons/second\n", + " Calculation Rate (active) = 6790.71 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index ca07519e53..d57f2a1f32 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -445,8 +445,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: ae588276014a905ecc6e0967bf08288ecec5b550\n", - " Date/Time: 2016-05-12 21:00:03\n", + " Git SHA1: 19feb55e6d5e8350398627f39fb55ee8e2e63011\n", + " Date/Time: 2016-05-13 10:04:37\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -562,20 +562,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.1000E-01 seconds\n", - " Reading cross sections = 8.6000E-02 seconds\n", - " Total time in simulation = 2.2903E+02 seconds\n", - " Time in transport only = 2.2897E+02 seconds\n", - " Time in inactive batches = 1.4619E+01 seconds\n", - " Time in active batches = 2.1441E+02 seconds\n", - " Time synchronizing fission bank = 2.5000E-02 seconds\n", - " Sampling source sites = 1.6000E-02 seconds\n", - " SEND/RECV source sites = 8.0000E-03 seconds\n", + " Total time for initialization = 4.9300E-01 seconds\n", + " Reading cross sections = 1.0800E-01 seconds\n", + " Total time in simulation = 2.2830E+02 seconds\n", + " Time in transport only = 2.2826E+02 seconds\n", + " Time in inactive batches = 1.5534E+01 seconds\n", + " Time in active batches = 2.1277E+02 seconds\n", + " Time synchronizing fission bank = 1.8000E-02 seconds\n", + " Sampling source sites = 1.3000E-02 seconds\n", + " SEND/RECV source sites = 4.0000E-03 seconds\n", " Time accumulating tallies = 1.0000E-03 seconds\n", - " Total time for finalization = 1.2000E-02 seconds\n", - " Total time elapsed = 2.2951E+02 seconds\n", - " Calculation Rate (inactive) = 6840.41 neutrons/second\n", - " Calculation Rate (active) = 1865.57 neutrons/second\n", + " Total time for finalization = 1.1000E-02 seconds\n", + " Total time elapsed = 2.2887E+02 seconds\n", + " Calculation Rate (inactive) = 6437.49 neutrons/second\n", + " Calculation Rate (active) = 1879.96 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -786,10 +786,8 @@ " group in\n", " group out\n", " nuclide\n", - " moment\n", " mean\n", " std. dev.\n", - " moment\n", " \n", " \n", " \n", @@ -799,10 +797,8 @@ " 1\n", " 1\n", " H-1\n", - " P0\n", " 0.234115\n", " 0.003568\n", - " P0\n", " \n", " \n", " 127\n", @@ -810,10 +806,8 @@ " 1\n", " 1\n", " O-16\n", - " P0\n", " 1.563707\n", " 0.005953\n", - " P0\n", " \n", " \n", " 124\n", @@ -821,10 +815,8 @@ " 1\n", " 2\n", " H-1\n", - " P0\n", " 1.594129\n", " 0.002369\n", - " P0\n", " \n", " \n", " 125\n", @@ -832,10 +824,8 @@ " 1\n", " 2\n", " O-16\n", - " P0\n", " 0.285761\n", " 0.001676\n", - " P0\n", " \n", " \n", " 122\n", @@ -843,10 +833,8 @@ " 1\n", " 3\n", " H-1\n", - " P0\n", " 0.011089\n", " 0.000248\n", - " P0\n", " \n", " \n", " 123\n", @@ -854,10 +842,8 @@ " 1\n", " 3\n", " O-16\n", - " P0\n", " 0.000000\n", " 0.000000\n", - " P0\n", " \n", " \n", " 120\n", @@ -865,10 +851,8 @@ " 1\n", " 4\n", " H-1\n", - " P0\n", " 0.000000\n", " 0.000000\n", - " P0\n", " \n", " \n", " 121\n", @@ -876,10 +860,8 @@ " 1\n", " 4\n", " O-16\n", - " P0\n", " 0.000000\n", " 0.000000\n", - " P0\n", " \n", " \n", " 118\n", @@ -887,10 +869,8 @@ " 1\n", " 5\n", " H-1\n", - " P0\n", " 0.000000\n", " 0.000000\n", - " P0\n", " \n", " \n", " 119\n", @@ -898,27 +878,25 @@ " 1\n", " 5\n", " O-16\n", - " P0\n", " 0.000000\n", " 0.000000\n", - " P0\n", " \n", " \n", "\n", "
" ], "text/plain": [ - " cell group in group out nuclide moment mean std. dev. moment\n", - "126 10002 1 1 H-1 P0 0.234115 0.003568 P0\n", - "127 10002 1 1 O-16 P0 1.563707 0.005953 P0\n", - "124 10002 1 2 H-1 P0 1.594129 0.002369 P0\n", - "125 10002 1 2 O-16 P0 0.285761 0.001676 P0\n", - "122 10002 1 3 H-1 P0 0.011089 0.000248 P0\n", - "123 10002 1 3 O-16 P0 0.000000 0.000000 P0\n", - "120 10002 1 4 H-1 P0 0.000000 0.000000 P0\n", - "121 10002 1 4 O-16 P0 0.000000 0.000000 P0\n", - "118 10002 1 5 H-1 P0 0.000000 0.000000 P0\n", - "119 10002 1 5 O-16 P0 0.000000 0.000000 P0" + " cell group in group out nuclide mean std. dev.\n", + "126 10002 1 1 H-1 0.234115 0.003568\n", + "127 10002 1 1 O-16 1.563707 0.005953\n", + "124 10002 1 2 H-1 1.594129 0.002369\n", + "125 10002 1 2 O-16 0.285761 0.001676\n", + "122 10002 1 3 H-1 0.011089 0.000248\n", + "123 10002 1 3 O-16 0.000000 0.000000\n", + "120 10002 1 4 H-1 0.000000 0.000000\n", + "121 10002 1 4 O-16 0.000000 0.000000\n", + "118 10002 1 5 H-1 0.000000 0.000000\n", + "119 10002 1 5 O-16 0.000000 0.000000" ] }, "execution_count": 19, @@ -1805,7 +1783,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1888,7 +1866,7 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAADUCAYAAACWNDiHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGXJJREFUeJzt3Xm0HFW59/HvAUEmgTDPQgAfkNcLIoogMYREBkUQ1Jfx\nhsj0iiBXERmuKOEiAgoBFZTBdUH0vQyiUbyARqKEIKAMIiL4Y7ohhkQkRAhh0iTn/rF3Q6c9Q59Q\n1UOd32etrNVdXbXr6ZOnntq1q7qqp7e3FzMzq55l2h2AmZmVwwXezKyiXODNzCrKBd7MrKJc4M3M\nKsoF3sysot7U7gDKFBG9wMaSZtVNmwAcKmlcP8tsCVwLzOtvnjzf8cBRwHLA8sB04DhJLyxlrHsA\nD0uaGRHrAjtKumGIbRwHrCvpi0sTQx/tzQDmStqhYfppwJnAZpJmDNLGUZIu7+ezqcDnJd1XRLxV\nFhE9wPHAkaScWwb4FXCapGcGWObzwFnAGEm31322C3AJsCLwJGmbmN1HGwcBJwIr5/X+AfhUX/M2\n+T12BF6W9EBEvBk4QNJVQ2xjP+DDkg5fmhj6aO9WYCtgQ0mL6qYfCnyP9Le7dZA2Bsrzq4AfSPpp\nEfEOhXvwdSJiK2AycOcg8+0JHAPsKmkr4O2kDeBrb2D1nwU2ya/HAPsMZeGIWEbSRUUV9zrr5J1e\nvY8AfRaVhpjWA07q57MeSWNd3Jt2FnAIsFddzj0H3BoRK/azzKWknHq6fmJErApcBxwpaXPg58BB\njQtHxNuBC4GP5nW+DZgB/Ocb+B6fAP4lv34nMH4oC+c8n1xUca/zd2C3hmkHAn9uIqZl6Wfbz/GO\nb0dxh4r34JfCAmBXYG8gBpjvHcBjkp4FkPRKRBwOLAaIiLWAK4BtcpsnSpqSe+bfBTYF3gx8U9Kk\niDgTGAtsHRHfIvW63hQRq0g6MCL2Bb5M2ok8BhwsaW5ETAQ2ALYDrskb7kaSjsy9khuA/YHNSEcY\nB0nqzUcx55A2/AuAKyT19PNdbyZt/P+Rv9v/IRWWtWozRMQ+wFdIRzIvAEdIuh+4A9goIv5E2qgf\nAb5D2qh3zzEeCuwIjJa0T25vCvATSRcP8H8wbETEGsBngO1qR6OSFgInR8RY4F+By/pY9NuSfhcR\nezdM3xe4T9Jdua1z+1n1NsDTtaM0SYsi4lRghRzXiqSdyCjgFeAsSd+PiJVI+b8dKSd+KOnEiPgk\n6f9+n4jYMH+nVSNiuqRREfE+0g5lBDCXlOdP5Hz9MLAacH9EPEg+Co+IK0lHIDuTdkCPAPtKeikf\nFX+HtA1eQCrC2/Zz1FnL81/k7zYCGAk8UZshInYCLiJth4uB4yXdkpdZLef5Xvm7Twc+BhwZEWfl\nOF4GTgPeJWlxRFwGPC/p8/38/d8w9+DrSJolaW4Ts95CKlDfjYi9IuItkuZLWpA/Pwd4SNJI4DDg\n6nw4+kVgVu4NjQXOjoiNc6/7KeCQvLFdBFyfi/tI0mHiQbm9X5EOrWs+BHxQ0qQ+4vww8AFS4o8B\nds7F4lvAOFIPao9BvusPSD2ZmgPzNAAi4k2kndYnJb0N+AlwXv74cGCmpK0k/T1P21jS2xo2sguB\nDSNi97wzewvw7UHiGk7eS/o7PtLHZz8FRve1kKTf9dPetsDciJgcEY9ExDW5U9Lo18AmEXFDROwX\nEWtIelnS3/LnnwOWl7QZKc8uiogNgE+RivTWwPbAhIjYRdIlwG+Bk3KenwrcmYv7W/J3+XdJWwBf\nJx1l1OwOHCPpxD7i/DhwALA5sDawX+5Vfxc4WtLWwJbAKv38PQD+G9gzb6cAHyXlcr3LgQvy9nsO\nr2+HhwOLcp7/T562A7CNpF/XFpb0Q2Amqei/k3TEcPoAMb1hw6HA3xoRf6r9A85+ow3mDed9pL/f\nd4Fn88ZSG2L5IHB13bybSnqVNIZ6bJ7+BPAXUu96IHsCt0p6ML+/hNQDWja//80AO6Xr8wb5Iqln\nswmpt/yIpAclLWbwQvoY8GJEbJfffxT4Yd3fYiGwQd347nRSz6c/NzZOyOOeRwHnkzaco3JslqxB\n/0NiT+fPh2J1UsH8PKmX/ippJ7uEPM7+HmAO8A3gmYi4JSJqQywfBK7J884iHT3OJv0/7itpcd4Z\n/JGBcwLSUcAsSb/I7V0NbFG3TT0q6dF+lr1R0ryci38g5fnbgDdLujnP800GrncvkHZoe+X3B5LO\nxdXbnrxdM3ie39xPDh8LnEza7o6V9NIAbbxhw2GIZte+TrLm11eREhhgrKSnmm1U0j3Av+YTWduT\nTjpeC+xEGr54rm7e2onXHUi99k2ARcD6DL6TXR14f9451TwPrJlfzxtg2efrXi8CliX1rOqXaeY7\nXw0cnHvrM/PwUP3nn4qIw0jDTisAA93gqM94Jd0XEfNJPaEH+5pnGJtLGorry7rAXyPiPUDtZOVk\nSacO0N7zwFRJjwFExNeBn/U1Yz5q+H95vq2BU4CbI2Jj/jnPa0ewWwCT8jmtRcDGpGGLgawObN6Q\n56+SeuSwdHn+t7rpzZwUruX5ncD6ku5vyPMDgePz0cayQH/Dmv3GK2lWRNxF6iD+oomY3pDhUOD7\nJWlIJ3hq8ljhk3lIpxe4NyJO5vWTs3NJyT8jz78pqZB+nzQWeEkeC2+muM4GbpH0sT7iWJrw57Pk\noer6TSxzLXAradzxmoYYdib1SN4jaUZEfIB0KDskEfEhYCGwQkR8UNJNQ22jwu4E1oiIbSX9vuGz\nvUnncn5LuhKkGU+ShixqFuV/S8hHbS9LEoCkhyNdqTWfdNRQy/Pa/BuRCtvFwL3AR/K4/a8b2+7D\nbNJVZDs0fhAR72jye9VrzPP1mljmJlLsBwHXN8SwISmvd8yFf0vSUfGQRMS2pA7h/aQLNUo9zzQc\nhmjKcChwSUSsBq+NQx8ETMuf3wBMyJ+9HbiPtDNdB7g3F/fDSCdrakn4D1IvpvH1z4FReSyeiHhP\n7nEtrXuBf4mILSJiGdJldwPKRzazgf9Lusqo3jrAX4GZ+eTaYcDK+cjmH8Aq+e/Tr4hYmTTmehzw\naeDiPM0ASc+TrqL5XkRsBinnIuJsUk/ymoGW78OPgdF1hfNo0nmlRnsA3490NVTtsstDSeeX5pLy\nfHxE9OR5fkcq+OsAv8vF/QMsOf7dmOer5nZ/A6wf6TJKImJkRHwvf7Y0HgWWi4hd8/tPMvCRJZJe\nAaaQhq4ah2fWBl4E/pTz+egc5yr5eyyTe/b9ytvbZcAJpOHa0/KOozQu8HUi4pSIeIW0px4TEa9E\nuqKj0WeAPwF3R4RIe/J1SZeAQerRbhTpOvJrSVcDvEw6yTo5Ih4gJfylwOW5eF9PuhLmBFKS7RYR\nd0uaQxqfnhwRD5NOwDYmX9Nye/9OOln7G9JYYjOuBv4o6bmG6T8jFf/Hc9wXkg6ZfwA8QOrR/aVu\nLLUvZwD/LekPuSc6lXTVkGWSziMVh5/mYYyHSL3ocXUnsJcQEQtyPr8VmJrz+f2SZpJydXJEPEoa\n/jmhjya+Stqh/zLn+eOkiwM+nD+/gLRzf5J0hHdibvvLwPmRrnYZTfr/PSMf7U0Gzo2IScDted2z\nSZcpfgz4Zs7zyaRrx5fqfub5nNcxwJURcT9pG13MIEWelOfzJD3UMP33pB7+I6Qjqp8Cd+XvPSd/\nl5n5O/bnU8AcSTfnv9PFpO25ND2+H/zwE+ka9N78ehvgdkkj2hyWWWnyEeECYPV8RDQsuAc/zOTD\ny6dqh8Kky8sG/GGXWTeKiLsj4oD89gDSGP+wKe7gHvywFOmn3meTdvBzSD9Meqy9UZkVK9LtGC4m\n3Y5hPuk6+rvbG1VrucCbmVWUh2jMzCqqo66D77l30DPcTRv5rj8W1RRPTNumsLasvXpHD/jjlFLs\nys8Ky+tpPQNdjDRU1w0+i3WN3t6J/5Tb7sGbmVWUC7yZWUW5wJuZVZQLvJlZRZV+kjUiLiDdz7oX\n+Lfhdh2qVZPz2rpBqT34iBgNbClpJ+AI0j2lzbqa89q6RdlDNGNJd65D0sPAiEiPlTPrZs5r6wpl\nF/j1WPJJNM/Q3H2ZzTqZ89q6QqtPsrb8RyZmLeC8to5UdoGfzZI9mw1IN7cy62bOa+sKZRf4KaSb\n+BMR2wOz655PatatnNfWFUot8JLuID2v9A7SlQbHlrk+s1ZwXlu3KP06eEmnlL0Os1ZzXls38C9Z\nzcwqygXezKyiXODNzCrKBd7MrKI66olOLCiuqZV4qbC2dhr9y8LaunPaboW1Zd1hWs9dhbV1OnsV\n1tYZnF9YW8n8gtuzN8o9eDOzinKBNzOrKBd4M7OKcoE3M6soF3gzs4pygTczqygXeDOzinKBNzOr\nKBd4M7OKcoE3M6soF3gzs4pygTczqygXeDOzinKBNzOrKBd4M7OKcoE3M6soF3gzs4pygTczq6jO\nemRfgR6c9u7C2jpz9ImFtfXq6OULa+u+3+xSWFsALOzQtuw1Z3B6YW2dw+cKawvglEIfAejH/xXB\nPXgzs4pygTczqygXeDOzinKBNzOrKBd4M7OKKv0qmoj4KjAqr+tsST8qe51mZXNeWzcotQcfEWOA\nd0jaCdgTuLDM9Zm1gvPaukXZQzTTgY/n188BK0fEsiWv06xszmvrCqUO0UhaCCzIb48AbpK0qMx1\nmpXNeW3doiW/ZI2IfUkbwu6tWJ9ZKzivrdO14iTrHsAXgD0lPV/2+sxawXlt3aDUAh8RqwFfA8ZJ\nmlfmusxaxXlt3aLsHvwBwFrAdRFRmzZe0syS12tWJue1dYWyT7JeBlxW5jrMWs15bd3Cv2Q1M6so\nF3gzs4pygTczqygXeDOziurp7e0ddKZ8WdgaQE9tmqQnCg9mGoMH0+0KvGvJjyfvUVxjwH/wxcLa\nmrFos8LamjdrncLa6n3rcj3171uR2z09E6uf18B0ziisrVHcVVhbcHOBbXWu3t6JPY3TBr2KJiK+\nAXwCeIbXN4JeYGSh0Zm1mHPbqq6ZyyTHAGtLeqXsYMxazLltldbMGPyj3gCsopzbVmnN9OBnRcRt\nwO3AwtpESV8qLSqz1nBuW6U1U+CfBaaWHYhZGzi3rdIGLfCSijs1btZBnNtWdf0W+IiYDv1ftijp\n/aVEZFYy57YNFwP14E9rWRRmreXctmGh3wIvaVorAzFrFee2DRe+VYGZWUW5wJuZVVRTD/yIiBHA\nlqQTU5I0v9SozFrEuW1VNmgPPiI+CzxGuk3WN4HHI+KYsgMzK5tz26qumR78YcDI2pPjc4/nV8C3\nywzMrAWc21ZpzYzB/6W2AQBI+htQ+K2CzdrAuW2V1kwP/vGI+DEwhbRDGAM8GxGHA0j6zxLjMyuT\nc9sqrZkCvxLwN+Dd+f38vNwo0okpbwTWrZzbVmnN3IvmE60IxKzVnNtWdc080enP9HHfDkmblBKR\nWYs4t63qmhmi2aXu9fLAWNKhrS2NzxTX1Ed6diquMWDxs6MKa+usNT5XWFs/f2uRz579QP0b53aB\nRnFOYW317v7ewtrqeaTAR+LOmFhcWy3QzBDNkw2THo2InwOTygnJrDWc21Z1zQzR7NYwaWNg83LC\nMWsd57ZVXTNDNF+se91LutLgk+WEY9ZSzm2rtGaGaMa0IhCzVnNuW9U1M0SzFfAtYAdSL+cu4FhJ\njzWzgohYEXgQOFPSlUsfqlmxnNtWdc3cquAi4HxgfWBD4BKGdq+O04B5Qw/NrHTObau0ZsbgeyTd\nWPd+ckR8upnGcw9pa+DGweY1awPntlVaMz345SNi+9qbiHg3Td5HHjgPOGFpAjNrAee2VVozyXwi\n8F8RsU5+PwcYP9hCETEeuE3SjIh4AyGalca5bZXWTIH/s6StImI1oHcIT7z5EDAyIvYHNgJejYhZ\nkm5Z2mDNCubctkprpsD/f2BM/X2zmyHpgNrriJgIzPAGYB3GuW2V1kyBV0RcBdwB/P21ib5XtnU/\n57ZVWjMF/s3AImDHumlDule2pIlDC8usJZzbVmm+H7wNW85tq7oBC3xE7Cdpcn59LekHIS8DB0t6\ntgXxmZXCuW3DQb/XwUfE8cAZEVHbCWxCujnTPcAXWhCbWSmc2zZcDPRDpwnAOEkL8/tXJE0DJpKe\nWWnWrSbg3LZhYKACv0DSX+ve/xeApH8AL5YalVm5nNs2LAw0Br9K/RtJl9e9Xa2ccGxI7plYaHPL\nrLlqYW31Xl7cI/vefuRDhbWVH9nn3C7Fy4W11DPlssLa6j23p7C2ev6nwMf/AVwysdj2GgzUg38g\nIo5qnBgRJwO/Ki8ks9I5t21YGKgHfzLwk3zfjXvyvDsDc4F9WhCbWVmc2zYs9FvgJT0NvDcixgLb\nkH4Qcp2k6a0KzqwMzm0bLpr5odNUYGoLYjFrKee2VV0z94M3M7Mu5AJvZlZRLvBmZhXlAm9mVlEu\n8GZmFeUCb2ZWUS7wZmYV5QJvZlZRLvBmZhXlAm9mVlEu8GZmFeUCb2ZWUS7wZmYV5QJvZlZRg94u\n2DrYgmKbW+G5CYW11XPhCYW11bt1cY9c4+HimrIyPVVYSz0nX19YW70nFZiLQM+4gh8B2MA9eDOz\ninKBNzOrKBd4M7OKcoE3M6uo0k+yRsQhwEnAQuBLkm4se51mZXNeWzcotQcfEWsCpwO7AHsD+5a5\nPrNWcF5btyi7Bz8OuEXSC8ALwNElr8+sFZzX1hXKLvCbAitFxA3ACGCipKklr9OsbJvivLYuUPZJ\n1h5gTWB/YAJwRUQU+0sBs9ZzXltXKLvAPw3cIWmhpMdJh7Nrl7xOs7I5r60rlF3gpwC7RcQy+cTU\nKsDcktdpVjbntXWFUgu8pKeA64G7gJuBT0taXOY6zcrmvLZuUfp18JIuBS4tez1mreS8tm7gX7Ka\nmVWUC7yZWUW5wJuZVZQLvJlZRbnAm5lVVE9vb7mPjBqKnml0TjDD0QrFNTV1x50La+u2njsLa2ti\nb2/Lf3Ha0zPReV0ZXyi0tZtYvrC29uojt92DNzOrKBd4M7OKcoE3M6soF3gzs4pygTczqygXeDOz\ninKBNzOrKBd4M7OKcoE3M6soF3gzs4pygTczqygXeDOzinKBNzOrKBd4M7OKcoE3M6soF3gzs4py\ngTczqygXeDOziuqoR/aZmVlx3IM3M6soF3gzs4pygTczqygXeDOzinKBNzOrKBd4M7OKelO7AxiK\niLgAeC/QC/ybpLvbHBIAEfFVYBTp73m2pB+1OaTXRMSKwIPAmZKubHM4AETEIcBJwELgS5JubHNI\nbefcHppOzGvovNzumh58RIwGtpS0E3AE8I02hwRARIwB3pHj2hO4sM0hNToNmNfuIGoiYk3gdGAX\nYG9g3/ZG1H7O7aXSUXkNnZnbXVPggbHAjwEkPQyMiIhV2xsSANOBj+fXzwErR8SybYznNRGxFbA1\n0Ek95HHALZJekDRH0tHtDqgDOLeHoEPzGjowt7tpiGY94N6698/kafPbE04iaSGwIL89ArhJ0qI2\nhlTvPOA4YEKb46i3KbBSRNwAjAAmSpra3pDazrk9NJ2Y19CBud1NPfhGPe0OoF5E7EvaCI5rdywA\nETEeuE3SjHbH0qAHWBPYn7SBXhERHfV/2QE66u/RSbndwXkNHZjb3dSDn03q1dRsAMxpUyxLiIg9\ngC8Ae0p6vt3xZB8CRkbE/sBGwKsRMUvSLW2O62ngjtw7fDwiXgDWBv7a3rDayrndvE7Na+jA3O6m\nAj8FOAO4NCK2B2ZLeqHNMRERqwFfA8ZJ6piTPpIOqL2OiInAjA7ZCKYAV0bEuaTD2FWAue0Nqe2c\n203q4LyGDsztrinwku6IiHsj4g5gMXBsu2PKDgDWAq6LiNq08ZJmti+kziXpqYi4HrgrT/q0pMXt\njKndnNvV0Im57dsFm5lVVDefZDUzswG4wJuZVZQLvJlZRbnAm5lVlAu8mVlFucCbmVVU11wH320i\nYj3gXGBb4AXgLcAVkr7e4jjeBXyF9Is6SPc5OVXSfYMstzPwF0lPlByidRnndvdwD74E+f4TPwHu\nlLSdpFHAHsBREfHRfuYvI451chxflrS9pO1JG8QNEbHWIIt/AhhZRlzWvZzb3cU/dCpBRIwDzpD0\nvobpy0v6e359JfAqsBVwCLAhcD7wD9JDH46T9FBE3EpK4lsiYlPgdkkb5eVfAjYH1geulDSpYX1f\nAZaVdHLD9EnAS5JOi4heYDlJCyNiAumWpz8ErgCeBD4r6ZfF/GWs2zm3u4t78OXYBrincWJtA6iz\nsqTRkmYBV5ESbgwwCbi4ifVsJGkP4P3AafmBA/XeCfy2j+XuBLbvr1FJk4H7gc9VfQOwIXNudxGP\nwZdjEXV/24g4GjgYWAH4s6TaQxTuyJ+vDqxb95i2W4FrmljPFABJz0XEI8CWwLN1n79I/zvxYX3/\nF1tqzu0u4h58OR4Adqq9kXSZpF2BU0iHnDW1Xk/jOFlP3bT6z5ZvmK/+/6+Hf25niTjqvJu+ez+N\n7Zs1cm53ERf4Eki6DXg2Ik6tTYuI5YDdgZf7mP95YE5E7JgnjeP1O9LNBzbOr3drWHRMbnsEsAWg\nhs8vBj6en61Zi2Nn0gMJalc81Lc/pm7ZxcByA35RG3ac293FQzTl2Qf4SkTcT0q0lUnPuDy4n/nH\nA5MiYhHpMPiYPP0i4JKIOBj4WcMy8yJiMulk1OmSnqv/UNKzEbEr8I2IOI/UC3oa2K/u4Q3nAFMi\n4lHg97y+QfyCdH/yz0j60dC/vlWYc7tL+CqaLpWvNLhd0nfaHYtZkZzbxfEQjZlZRbkHb2ZWUe7B\nm5lVlAu8mVlFucCbmVWUC7yZWUW5wJuZVZQLvJlZRf0vhqRibo7514YAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index 842c334a2e..15bf06b248 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -459,7 +459,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAWFSURB\nVGje7Zs7cttADIZ9CSvXcrP0iCxUqbBc8Ag6xR6BhV2EvYvwFD4CCx1ABT1jMdgndpegRQnOrCbj\npPlGESISC4A/gd27e8H583CX3b4+iKJrRHkS4vkghMPBonRYWGwtfgD2YN+dRDUOoh6lACw0Noi9\nw2fESuEoAR/uVuMolX039oXGT7F3eFL2iEfhUX1f4cPdL/ishs+68ai+udE4xPhexbjX2FfjGNoP\nj/DPNX4Tsd+EODr8FvsVdf1Hd9P2VvCi4+s/aXvrf+upAD+1/9GV1mkOH5X9vV6THtfvACslcaUC\nbESL61drBPtdI8SrFMWrELsXCkuFDYW75gbiP7d9Cf7bAYI/aCwUShrBvh30+lWQkzVgZ/HD4Oix\nNCgcQpJ3BxU/Ln91elKoM5VEE38QtJ+Yv6cQ9xjKNYayyl8TypP8DfJnQ2H/b/N3ye9P83cT33SQ\nv/sQh9gV7zZ/0dNj5HQaC5vVzv9+/WFN2w8KVaZ2BwL1+pv4g0x1QRfjq0dB4Q3kT277oP6VNL6g\nKxNU9a8zK+WLbi/WwpdihbboKqyxFOulHMj6v4W/AXbmUeAxrv9J/CqEBXaRKsXaodD4nsYvkT/G\n6H1D4SR/iPy1Roj9JsQ5e18/7EUHv1+Fvx/Xj5V9Ugb5K8TW4TZEEdcvoz/up0VTe9qsVIppKVX6\na7D6y9ZvwEKjrtQxPtv6fXII9vCxKOGaIeAIfEF8IvAG8ie3vRK9rRQl+PPpSctbhfpTUCpviH+k\nxsZgpT91+snoX1l49KK3iUQvICRy5aUw6l8leoVwoo3Uv1rKreF/UFLY6d9QP4L9Wf2r7EP9GOSf\ncsjZ56f60kz+XmVPXv+RuP49ff0T/53Rv6n/7m2lvXT9Wqd/VUz8hvh5M/ED6ILmt4mfHYZSaePn\nTWpsf/SvqV9O6dLYYClLEetnoH/LBLFoBvrX189uTv8++kot5vTvQD4/9jP690g9P/4z/bvo/XVG\n/xYoZZx+8fr3MxAtsf7tUOkG2JqsTtCIpgCt/qX1226KqZS7gfzJbe+c9jLrtIZ8lXD+s4umlW6A\nKIVrlML2/cXjgPFjlJqIRC+Fj0bVJe+vSh56pSdR6YkQ1ygF10Wqf0FeLta/iKn9Mv1L24ti2e+7\nW4n1b3T/W+L+t9H9T/SvVboUmqJJon1/hZq8LnzRDlDrX1u0xRT1+6vEpomMmyYkqi95vIH8yW1P\nN+122KkLcNLKi/WTF01z/cNASrWE/l3ev6T17zX909z9X27/euK/Rf3zWP+Waf9eEv37KkWJ+rfD\nl6ZglNDa+cEBhwYDvkoNP/rX69814NaI3imq0l7OYDy/qSdDGwr7r+Y3VbzoKZr6XX2lfxfOb87q\nXzr+b1j/Xlp/nP6dn98McdH7cn7zjPObKsYWS3Eb9w8n85smHtqQuPuZ30T2dlIT6F9xFl+n8xsl\negL9a4c2KRr9W4rp/GYqumiM9Nec/j2v/yj9u1h//hv9e93vc++f63/u+rPjL3f+5Lbn1j9m/eXW\nf+7zh/v8+2b9e/Hzn6s/uPqHrb8g71n6L3f+5Lbnvn8w33+4718/+5d47//c/gO7/5E7/nPbc/tv\n3P4fs//I7X9y+6/fqH+v6j9z+9/c/ju3/8+eP+TOn9z23PkXc/7Gnf9x5483q38Xzn+582fu/Js9\nfy8kb/6fO39y23P3n3S8/S/c/Tfc/T83uX/pgv1XE/9duP+Lu/+Mvf8td/znti8kb/8ld/9nx9t/\nSjw/Ltr/yt1/+337f6/bf0zoB3nJ/ucVc/81d/83e/957vzJbc89/8A8f8E9/5HE78XnT/4H/cs5\nf8Q9/8Q9f8U+/5U7f3Lbc88fdrzzjyvm+cuf/Uu887/c88fs88954/8vO4SjPC+2QRIAAAAldEVY\ndGRhdGU6Y3JlYXRlADIwMTYtMDUtMTJUMjE6MDQ6MzMtMDQ6MDDlS7KzAAAAJXRFWHRkYXRlOm1v\nZGlmeQAyMDE2LTA1LTEyVDIxOjA0OjMzLTA0OjAwlBYKDwAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAWFSURB\nVGje7Zs7cttADIZ9CSvXcrP0iCxUqbBc8Ag6xR6BhV2EvYvwFD4CCx1ABT1jMdgndpegRQnOrCbj\npPlGESISC4A/gd27e8H583CX3b4+iKJrRHkS4vkghMPBonRYWGwtfgD2YN+dRDUOoh6lACw0Noi9\nw2fESuEoAR/uVuMolX039oXGT7F3eFL2iEfhUX1f4cPdL/ishs+68ai+udE4xPhexbjX2FfjGNoP\nj/DPNX4Tsd+EODr8FvsVdf1Hd9P2VvCi4+s/aXvrf+upAD+1/9GV1mkOH5X9vV6THtfvACslcaUC\nbESL61drBPtdI8SrFMWrELsXCkuFDYW75gbiP7d9Cf7bAYI/aCwUShrBvh30+lWQkzVgZ/HD4Oix\nNCgcQpJ3BxU/Ln91elKoM5VEE38QtJ+Yv6cQ9xjKNYayyl8TypP8DfJnQ2H/b/N3ye9P83cT33SQ\nv/sQh9gV7zZ/0dNj5HQaC5vVzv9+/WFN2w8KVaZ2BwL1+pv4g0x1QRfjq0dB4Q3kT277oP6VNL6g\nKxNU9a8zK+WLbi/WwpdihbboKqyxFOulHMj6v4W/AXbmUeAxrv9J/CqEBXaRKsXaodD4nsYvkT/G\n6H1D4SR/iPy1Roj9JsQ5e18/7EUHv1+Fvx/Xj5V9Ugb5K8TW4TZEEdcvoz/up0VTe9qsVIppKVX6\na7D6y9ZvwEKjrtQxPtv6fXII9vCxKOGaIeAIfEF8IvAG8ie3vRK9rRQl+PPpSctbhfpTUCpviH+k\nxsZgpT91+snoX1l49KK3iUQvICRy5aUw6l8leoVwoo3Uv1rKreF/UFLY6d9QP4L9Wf2r7EP9GOSf\ncsjZ56f60kz+XmVPXv+RuP49ff0T/53Rv6n/7m2lvXT9Wqd/VUz8hvh5M/ED6ILmt4mfHYZSaePn\nTWpsf/SvqV9O6dLYYClLEetnoH/LBLFoBvrX189uTv8++kot5vTvQD4/9jP690g9P/4z/bvo/XVG\n/xYoZZx+8fr3MxAtsf7tUOkG2JqsTtCIpgCt/qX1226KqZS7gfzJbe+c9jLrtIZ8lXD+s4umlW6A\nKIVrlML2/cXjgPFjlJqIRC+Fj0bVJe+vSh56pSdR6YkQ1ygF10Wqf0FeLta/iKn9Mv1L24ti2e+7\nW4n1b3T/W+L+t9H9T/SvVboUmqJJon1/hZq8LnzRDlDrX1u0xRT1+6vEpomMmyYkqi95vIH8yW1P\nN+122KkLcNLKi/WTF01z/cNASrWE/l3ev6T17zX909z9X27/euK/Rf3zWP+Waf9eEv37KkWJ+rfD\nl6ZglNDa+cEBhwYDvkoNP/rX69814NaI3imq0l7OYDy/qSdDGwr7r+Y3VbzoKZr6XX2lfxfOb87q\nXzr+b1j/Xlp/nP6dn98McdH7cn7zjPObKsYWS3Eb9w8n85smHtqQuPuZ30T2dlIT6F9xFl+n8xsl\negL9a4c2KRr9W4rp/GYqumiM9Nec/j2v/yj9u1h//hv9e93vc++f63/u+rPjL3f+5Lbn1j9m/eXW\nf+7zh/v8+2b9e/Hzn6s/uPqHrb8g71n6L3f+5Lbnvn8w33+4718/+5d47//c/gO7/5E7/nPbc/tv\n3P4fs//I7X9y+6/fqH+v6j9z+9/c/ju3/8+eP+TOn9z23PkXc/7Gnf9x5483q38Xzn+582fu/Js9\nfy8kb/6fO39y23P3n3S8/S/c/Tfc/T83uX/pgv1XE/9duP+Lu/+Mvf8td/znti8kb/8ld/9nx9t/\nSjw/Ltr/yt1/+337f6/bf0zoB3nJ/ucVc/81d/83e/957vzJbc89/8A8f8E9/5HE78XnT/4H/cs5\nf8Q9/8Q9f8U+/5U7f3Lbc88fdrzzjyvm+cuf/Uu887/c88fs88954/8vO4SjPC+2QRIAAAAldEVY\ndGRhdGU6Y3JlYXRlADIwMTYtMDUtMTNUMDk6MDQ6MjEtMDQ6MDCreyVVAAAAJXRFWHRkYXRlOm1v\nZGlmeQAyMDE2LTA1LTEzVDA5OjA0OjIxLTA0OjAw2iad6QAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -726,8 +726,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: ae588276014a905ecc6e0967bf08288ecec5b550\n", - " Date/Time: 2016-05-12 21:04:33\n", + " Git SHA1: 19feb55e6d5e8350398627f39fb55ee8e2e63011\n", + " Date/Time: 2016-05-13 09:04:22\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -814,20 +814,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.5500E-01 seconds\n", - " Reading cross sections = 1.1200E-01 seconds\n", - " Total time in simulation = 5.6386E+01 seconds\n", - " Time in transport only = 5.6351E+01 seconds\n", - " Time in inactive batches = 4.3700E+00 seconds\n", - " Time in active batches = 5.2016E+01 seconds\n", + " Total time for initialization = 5.4100E-01 seconds\n", + " Reading cross sections = 1.0500E-01 seconds\n", + " Total time in simulation = 5.1887E+01 seconds\n", + " Time in transport only = 5.1864E+01 seconds\n", + " Time in inactive batches = 3.9000E+00 seconds\n", + " Time in active batches = 4.7987E+01 seconds\n", " Time synchronizing fission bank = 5.0000E-03 seconds\n", - " Sampling source sites = 2.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", + " Sampling source sites = 1.0000E-03 seconds\n", + " SEND/RECV source sites = 4.0000E-03 seconds\n", + " Time accumulating tallies = 2.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 5.6857E+01 seconds\n", - " Calculation Rate (inactive) = 5720.82 neutrons/second\n", - " Calculation Rate (active) = 1922.49 neutrons/second\n", + " Total time elapsed = 5.2448E+01 seconds\n", + " Calculation Rate (inactive) = 6410.26 neutrons/second\n", + " Calculation Rate (active) = 2083.90 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1101,7 +1101,7 @@ "cell_type": "code", "execution_count": 32, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ @@ -1558,7 +1558,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 43, @@ -1569,7 +1569,7 @@ "data": { "image/png": "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\nfHTc1tr58WfQa96JP1u/NcN5cd/L4s/xL5/Rv3hAT+D6cDWAztRFRHJFRV1EJEdU1EVEckRFXUQk\nR1TURURyREVdRCRHVNRFRHJERV1EJEdKMvhojM0uunzkcw+F63hiUTwIh1fiQQh7984waOgrcciB\n5z4Rxjz3oxFhzMruOxddfsw18cAiOy4MYeQv4+22NfF6/MF4H1uGQ3WrnR7GVJNhQoISGzzu8UaX\n7c2r4f1taXxc1uwQ7/MNGSbk6Lowbmv/LfFkNDW3bQ5j7Ka4P7ufsTqM2fHUd+IVZdiuDRvi1bBj\nvJ9rbo7bOqhqXhjz2rg3iy7vRzdmhmtJ6ExdRCRHVNRFRHJERV1EJEdU1EVEckRFXUQkR1TURURy\nREVdRCRHVNRFRHKkRYOPzGwRsBbYCmxx91FZ7jdw+pKiy79/wsXxSvrFA1Gqp8QDAy6b9O0wZuKB\nk8OY517M8Pw4Mp5tpS/FByHYyLgd3xi3wznxrC7+vbitDaPjprp0jY/VMn4axmTYqlbT3NxeuKbx\nmaAeqDk6XsFJ8b6qGZJhVqOX471lb8Q5UPONDHk9N27LH4zbsqPitro9sSVez8p4H+7aK8N2BZMR\nAXBi3NZUj2d06rfm5aLL+1ZnL9WtMaL0KHdf2QrrESk3ym2pOLr8IiKSIy0t6g7cb2Zzzezc1uiQ\nSJlQbktFaunll8PdfYmZ7QbcZ2bPufus1uiYSIkpt6UitehM3d2XpL9XANOA971tZma1ZuZ1Py1p\nTySLwnwzs9rmrEO5LeUoS243u6ib2U5m1q3ub+BjwPz6ce5e6+5W99Pc9kSyKsw3d69t6v2V21Ku\nsuR2Sy6/9AammVndem529z+3YH0i5UK5LRWr2UXd3RcCw1qxLyJlQbktlczc2/dSoJk5zxb/wP7W\nHvGMI8ftelcYs4aaMGYDXcKYudcdHsace/7VYcyUp84PY7rss6ro8vVbdw3XYVPDELY9HF8teOyO\nD4YxY558Koz58rB4YNE+vBLGXPLqD8MY+nWmVJdCzMyZ13hu/3zYWeE6DvVHwpjNdApjDtjyfBjT\n9TvxgKCHrxgexnTweD2jhz8dxjz2ZJxvWzyuDR/6VjzT0NrL4/PZf1bvH8Z0IJ716REODWPOf+q3\nRZeP3QlmDqzKlNv6nLqISI6oqIuI5IiKuohIjqioi4jkiIq6iEiOqKiLiOSIirqISI6oqIuI5Ehr\n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\njRmGBmRpq3P0mAf6Z1hPpwz96VwVb9eeWfqc5WGU5XhtznDcKZY3sP/+HZg5M8NqKNXgI5E2VNrB\nRyJtJ0tut3tRf18HzLxUD8LmUp/bRyX2uVAl9l99bntt3V9dUxcRyREVdRGRHCmHop7l227Kjfrc\nPiqxz4Uqsf/qc9tr0/6W/Jq6iIi0nnI4UxcRkVaioi4ikiMlLepmdqyZPW9mL5rZhFL2JSszW2Rm\nT5vZPDOLv9W/BMxsipmtMLP5Bbf1MLP7zOyF9PcupexjoUb6W2tmS9L9PM/MPlHKPjaF8rptVFpe\nQ2lyu2RF3cyqgeuA44BBwHgzG1Sq/jTRUe4+3N0zTI1SElOBY+vdNgF4wN0HAg+k/5eLqby/vwA/\nTffzcHe/p5371CzK6zY1lcrKayhBbpfyTH008KK7L3T3TcCtwLgS9ic33H0WsKrezeOAG9K/bwDi\nefzaSSP9rVTK6zZSaXkNpcntUhb1PYDXCv5fnN5W7hy438zmmtm5pe5ME/R296Xp38uA3qXsTEZf\nM7On0pewZfWyugjldfuqxLyGNsxtvVHadIe7+3CSl9fnm9mHS92hpvLkc6zl/lnWXwD9Sb7ebSnw\n49J2J/eU1+2nTXO7lEV9CWz39Yd7preVNXdfkv5eAUwjebldCZabWR+A9PeKEvenKHdf7u5b3X0b\n8CsqZz8rr9tXReU1tH1ul7KozwEGmtm+ZtYJOB2YUcL+hMxsJzPrVvc38DFgfvF7lY0ZwJnp32cC\n00vYl1DdAzV1EpWzn5XX7aui8hraPrdL8n3qAO6+xcy+CtwLVANT3H1BqfqTUW9gmplBsu9udvc/\nl7ZL72dmtwBHAr3MbDEwEZgM3GZmZwOvAKeVrofba6S/R5rZcJKX04uA80rWwSZQXredSstrKE1u\n62sCRERyRG+UiojkiIq6iEiOqKiLiOSIirqISI6oqIuI5IiKuohIjqioi4jkiIq6iEiO/C/zDkyC\nZclMUgAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 5b49005ec3..eff0bde0a3 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -90,6 +90,15 @@ class MGXS(object): tally_trigger : openmc.Trigger An (optional) tally precision trigger given to each tally used to compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section rxn_rate_tally : openmc.Tally @@ -115,8 +124,12 @@ class MGXS(object): sparse : bool Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data derived : bool Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store """ @@ -138,7 +151,9 @@ class MGXS(object): self._rxn_rate_tally = None self._xs_tally = None self._sparse = False + self._loaded_sp = False self._derived = False + self._hdf5_key = None self.name = name self.by_nuclide = by_nuclide @@ -213,6 +228,24 @@ class MGXS(object): def num_groups(self): return self.energy_groups.num_groups + @property + def scores(self): + return ['flux', self.rxn_type] + + @property + def filters(self): + group_edges = self.energy_groups.group_edges + energy_filter = openmc.Filter('energy', group_edges) + return [[energy_filter]] * len(self.scores) + + @property + def tally_keys(self): + return self.scores + + @property + def estimator(self): + return 'tracklength' + @property def tallies(self): """Construct the OpenMC tallies needed to compute the cross section.""" @@ -300,27 +333,20 @@ class MGXS(object): else: return 'sum' + @property + def loaded_sp(self): + return self._loaded_sp + @property def derived(self): return self._derived @property - def scores(self): - return ['flux', self.rxn_type] - - @property - def filters(self): - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - return [[energy_filter]] * len(self.scores) - - @property - def tally_keys(self): - return self.scores - - @property - def estimator(self): - return 'tracklength' + def hdf5_key(self): + if self._hdf5_key is not None: + return self._hdf5_key + else: + return self._rxn_type @name.setter def name(self, name): @@ -644,9 +670,11 @@ class MGXS(object): filter_bins = [] # Clear any tallies previously loaded from a statepoint - self._tallies = None - self._xs_tally = None - self._rxn_rate_tally = None + if self.loaded_sp: + self._tallies = None + self._xs_tally = None + self._rxn_rate_tally = None + self._loaded_sp = False # Find, slice and store Tallies from StatePoint # The tally slicing is needed if tally merging was used @@ -659,6 +687,8 @@ class MGXS(object): sp_tally.sparse = self.sparse self.tallies[tally_type] = sp_tally + self._loaded_sp = True + def get_xs(self, groups='all', subdomains='all', nuclides='all', xs_type='macro', order_groups='increasing', value='mean', **kwargs): @@ -1253,8 +1283,8 @@ class MGXS(object): else: subdomain_group = domain_group - # Create a separate HDF5 group for the rxn type - rxn_group = subdomain_group.require_group(self.rxn_type) + # Create a separate HDF5 group for this cross section + rxn_group = subdomain_group.require_group(self.hdf5_key) # Create a separate HDF5 group for each nuclide for j, nuclide in enumerate(nuclides): @@ -1655,9 +1685,10 @@ class ScatterMatrixXS(MGXS): groups=None, by_nuclide=False, name=''): super(ScatterMatrixXS, self).__init__(domain, domain_type, groups, by_nuclide, name) - self._rxn_type = 'scatter matrix' + self._rxn_type = 'scatter' self._correction = 'P0' self._legendre_order = 0 + self._hdf5_key = 'scatter matrix' def __deepcopy__(self, memo): clone = super(ScatterMatrixXS, self).__deepcopy__(memo) @@ -1677,11 +1708,11 @@ class ScatterMatrixXS(MGXS): def scores(self): scores = ['flux'] - for moment in range(self.legendre_order+1): - scores.append('scatter-{}'.format(moment)) - if self.correction == 'P0' and self.legendre_order == 0: - scores.append('scatter-1') + scores += ['{}-0'.format(self.rxn_type), + '{}-1'.format(self.rxn_type)] + else: + scores += ['{}-P{}'.format(self.rxn_type, self.legendre_order)] return scores @@ -1690,20 +1721,14 @@ class ScatterMatrixXS(MGXS): group_edges = self.energy_groups.group_edges energy = openmc.Filter('energy', group_edges) energyout = openmc.Filter('energyout', group_edges) - filters = [[energy]] - - for moment in range(self.legendre_order+1): - filters.append([energy, energyout]) if self.correction == 'P0' and self.legendre_order == 0: - filters.append([energyout]) + filters = [[energy], [energy, energyout], [energyout]] + else: + filters = [[energy], [energy, energyout]] return filters - @property - def tally_keys(self): - return ['flux', 'scatter-0', 'scatter-1'] - @property def estimator(self): return 'analog' @@ -1715,21 +1740,17 @@ class ScatterMatrixXS(MGXS): # If using P0 correction subtract scatter-1 from the diagonal if self.correction == 'P0' and self.legendre_order == 0: - scatter_p1 = self.tallies['scatter-1'] - scatter_p1 = scatter_p1.get_slice(scores=[self.scores[-1]]) - energy_filter = self.tallies['scatter-0'].find_filter('energy') + scatter_p0 = self.tallies['{}-0'.format(self.rxn_type)] + scatter_p1 = self.tallies['{}-1'.format(self.rxn_type)] + energy_filter = scatter_p0.find_filter('energy') energy_filter = copy.deepcopy(energy_filter) scatter_p1 = scatter_p1.diagonalize_filter(energy_filter) - self._rxn_rate_tally = self.tallies['scatter-0'] - scatter_p1 + self._rxn_rate_tally = scatter_p0 - scatter_p1 - # Merge all scattering moments into a single reaction rate Tally + # Extract scattering moment reaction rate Tally else: - rxn_rate_tally = self.tallies['scatter-0'] - for moment in range(1, self.legendre_order+1): - scatter_pn = self.tallies['scatter-{}'.format(moment)] - rxn_rate_tally = rxn_rate_tally.merge(scatter_pn) - - self._rxn_rate_tally = rxn_rate_tally + tally_key = '{}-P{}'.format(self.rxn_type, self.legendre_order) + self._rxn_rate_tally = self.tallies[tally_key] self._rxn_rate_tally.sparse = self.sparse @@ -1760,6 +1781,44 @@ class ScatterMatrixXS(MGXS): self._legendre_order = legendre_order + def load_from_statepoint(self, statepoint): + """Extracts tallies in an OpenMC StatePoint with the data needed to + compute multi-group cross sections. + + This method is needed to compute cross section data from tallies + in an OpenMC StatePoint object. + + NOTE: The statepoint must first be linked with an OpenMC Summary object. + + Parameters + ---------- + statepoint : openmc.StatePoint + An OpenMC StatePoint object with tally data + + Raises + ------ + ValueError + When this method is called with a statepoint that has not been + linked with a summary object. + + """ + + # Clear any tallies previously loaded from a statepoint + if self.loaded_sp: + self._tallies = None + self._xs_tally = None + self._rxn_rate_tally = None + self._loaded_sp = False + + # Expand scores to match the format in the statepoint + # e.g., "scatter-P2" -> "scatter-0", "scatter-1", "scatter-2" + if self.legendre_order != 0: + tally_key = '{}-P{}'.format(self.rxn_type, self.legendre_order) + self.tallies[tally_key].scores = \ + [self.rxn_type + '-{}'.format(i) for i in range(self.legendre_order+1)] + + super(ScatterMatrixXS, self).load_from_statepoint(statepoint) + def get_slice(self, nuclides=[], in_groups=[], out_groups=[], legendre_order='same'): """Build a sliced ScatterMatrix for the specified nuclides and @@ -1808,8 +1867,12 @@ class ScatterMatrixXS(MGXS): self.legendre_order, equality=True) slice_xs.legendre_order = legendre_order - for moment in range(legendre_order+1, self.legendre_order+1): - del slice_xs.tallies['scatter-{}'.format(moment)] + # Slice the scattering tally + tally_key = '{}-P{}'.format(self.rxn_type, self.legendre_order) + expand_scores = \ + [self.rxn_type + '-{}'.format(i) for i in range(self.legendre_order+1)] + slice_xs.tallies[tally_key] = \ + slice_xs.tallies[tally_key].get_slice(scores=expand_scores) # Slice outgoing energy groups if needed if len(out_groups) != 0: @@ -2034,14 +2097,16 @@ class ScatterMatrixXS(MGXS): groups, nuclides, xs_type, distribcell_paths) # Add a moment column to dataframe - moments = np.array(['P{}'.format(i) for i in range(self.legendre_order+1)]) - moments = np.tile(moments, df.shape[0] / moments.size) - df['moment'] = moments + if self.legendre_order > 0: + # Insert a column corresponding to the Legendre moments + moments = ['P{}'.format(i) for i in range(self.legendre_order+1)] + moments = np.tile(moments, df.shape[0] / len(moments)) + df['moment'] = moments - # Place the moment column before the mean column - mean_index = df.columns.get_loc('mean') - columns = df.columns.tolist() - df = df[columns[:mean_index] + ['moment'] + columns[mean_index:]] + # Place the moment column before the mean column + mean_index = df.columns.get_loc('mean') + columns = df.columns.tolist() + df = df[columns[:mean_index] + ['moment'] + columns[mean_index:-2]] # Select rows corresponding to requested scattering moment if moment != 'all': @@ -2049,7 +2114,7 @@ class ScatterMatrixXS(MGXS): cv.check_greater_than('moment', moment, 0, equality=True) cv.check_less_than( 'moment', moment, self.legendre_order, equality=True) - df = df.iloc[moment:self.legendre_order:] + df = df[df['moment'] == 'P{}'.format(moment)] return df @@ -2173,19 +2238,8 @@ class NuScatterMatrixXS(ScatterMatrixXS): groups=None, by_nuclide=False, name=''): super(NuScatterMatrixXS, self).__init__(domain, domain_type, groups, by_nuclide, name) - self._rxn_type = 'nu-scatter matrix' - - @property - def scores(self): - scores = ['flux'] - - for moment in range(self.legendre_order+1): - scores.append('nu-scatter-{}'.format(moment)) - - if self.correction == 'P0' and self.legendre_order == 0: - scores.append('nu-scatter-1') - - return scores + self._rxn_type = 'nu-scatter' + self._hdf5_key = 'nu-scatter matrix' class Chi(MGXS): diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index 89e4dbb3e5..8296aca11d 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -1,49 +1,49 @@ material group in nuclide mean std. dev. 0 1 1 total 0.412084 0.02359 material group in nuclide mean std. dev. -0 1 1 total 0.076425 0.003691 material group in group out nuclide moment mean std. dev. moment -0 1 1 1 total P0 0.345503 0.021465 P0 material group out nuclide mean std. dev. +0 1 1 total 0.076425 0.003691 material group in group out nuclide mean std. dev. +0 1 1 1 total 0.345503 0.021465 material group out nuclide mean std. dev. 0 1 1 total 1.0 0.055333 material group in nuclide mean std. dev. 0 2 1 total 0.241262 0.00841 material group in nuclide mean std. dev. -0 2 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -0 2 1 1 total P0 0.241262 0.00841 P0 material group out nuclide mean std. dev. +0 2 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 2 1 1 total 0.241262 0.00841 material group out nuclide mean std. dev. 0 2 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 3 1 total 0.400028 0.034667 material group in nuclide mean std. dev. -0 3 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -0 3 1 1 total P0 0.393462 0.033646 P0 material group out nuclide mean std. dev. +0 3 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 3 1 1 total 0.393462 0.033646 material group out nuclide mean std. dev. 0 3 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 4 1 total 0.377402 0.072937 material group in nuclide mean std. dev. -0 4 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -0 4 1 1 total P0 0.371473 0.071226 P0 material group out nuclide mean std. dev. +0 4 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 4 1 1 total 0.371473 0.071226 material group out nuclide mean std. dev. 0 4 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 5 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -0 5 1 1 total P0 0.0 0.0 P0 material group out nuclide mean std. dev. +0 5 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 5 1 1 total 0.0 0.0 material group out nuclide mean std. dev. 0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 6 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -0 6 1 1 total P0 0.0 0.0 P0 material group out nuclide mean std. dev. +0 6 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 6 1 1 total 0.0 0.0 material group out nuclide mean std. dev. 0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 7 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -0 7 1 1 total P0 0.0 0.0 P0 material group out nuclide mean std. dev. +0 7 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 7 1 1 total 0.0 0.0 material group out nuclide mean std. dev. 0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 8 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -0 8 1 1 total P0 0.0 0.0 P0 material group out nuclide mean std. dev. +0 8 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 8 1 1 total 0.0 0.0 material group out nuclide mean std. dev. 0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 9 1 total 0.600536 0.748875 material group in nuclide mean std. dev. -0 9 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -0 9 1 1 total P0 0.600536 0.748875 P0 material group out nuclide mean std. dev. +0 9 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 9 1 1 total 0.600536 0.748875 material group out nuclide mean std. dev. 0 9 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 10 1 total 0.235515 0.613974 material group in nuclide mean std. dev. -0 10 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -0 10 1 1 total P0 0.235515 0.613974 P0 material group out nuclide mean std. dev. +0 10 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 10 1 1 total 0.235515 0.613974 material group out nuclide mean std. dev. 0 10 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 11 1 total 0.510145 0.741941 material group in nuclide mean std. dev. -0 11 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -0 11 1 1 total P0 0.491857 0.715554 P0 material group out nuclide mean std. dev. +0 11 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 11 1 1 total 0.491857 0.715554 material group out nuclide mean std. dev. 0 11 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 12 1 total 0.73836 0.825631 material group in nuclide mean std. dev. -0 12 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -0 12 1 1 total P0 0.723265 0.808231 P0 material group out nuclide mean std. dev. +0 12 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 12 1 1 total 0.723265 0.808231 material group out nuclide mean std. dev. 0 12 1 total 0.0 0.0 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index 014eabfa52..0d5c7c7b44 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,5 +1,5 @@ avg(distribcell) group in nuclide mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.718919 0.520644 avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 avg(distribcell) group in group out nuclide moment mean std. dev. moment -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P0 0.695166 0.510606 P0 avg(distribcell) group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 avg(distribcell) group in group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.695166 0.510606 avg(distribcell) group out nuclide mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index 0ad8e04aa9..7361c60bea 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -2,120 +2,120 @@ 1 1 1 total 0.372745 0.024269 0 1 2 total 0.861607 0.032349 material group in nuclide mean std. dev. 1 1 1 total 0.021789 0.001182 -0 1 2 total 0.714077 0.040552 material group in group out nuclide moment mean std. dev. moment -3 1 1 1 total P0 0.337245 0.023015 P0 -2 1 1 2 total P0 0.001559 0.000510 P0 -1 1 2 1 total P0 0.000000 0.000000 P0 -0 1 2 2 total P0 0.422051 0.021617 P0 material group out nuclide mean std. dev. +0 1 2 total 0.714077 0.040552 material group in group out nuclide mean std. dev. +3 1 1 1 total 0.337245 0.023015 +2 1 1 2 total 0.001559 0.000510 +1 1 2 1 total 0.000000 0.000000 +0 1 2 2 total 0.422051 0.021617 material group out nuclide mean std. dev. 1 1 1 total 1.0 0.055333 0 1 2 total 0.0 0.000000 material group in nuclide mean std. dev. 1 2 1 total 0.237254 0.008184 0 2 2 total 0.285930 0.048796 material group in nuclide mean std. dev. 1 2 1 total 0.0 0.0 -0 2 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -3 2 1 1 total P0 0.237254 0.008184 P0 -2 2 1 2 total P0 0.000000 0.000000 P0 -1 2 2 1 total P0 0.000000 0.000000 P0 -0 2 2 2 total P0 0.285930 0.048796 P0 material group out nuclide mean std. dev. +0 2 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 2 1 1 total 0.237254 0.008184 +2 2 1 2 total 0.000000 0.000000 +1 2 2 1 total 0.000000 0.000000 +0 2 2 2 total 0.285930 0.048796 material group out nuclide mean std. dev. 1 2 1 total 0.0 0.0 0 2 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 3 1 total 0.286906 0.027401 0 3 2 total 1.418151 0.265308 material group in nuclide mean std. dev. 1 3 1 total 0.0 0.0 -0 3 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -3 3 1 1 total P0 0.259937 0.026115 P0 -2 3 1 2 total P0 0.026187 0.001665 P0 -1 3 2 1 total P0 0.000000 0.000000 P0 -0 3 2 2 total P0 1.359521 0.258505 P0 material group out nuclide mean std. dev. +0 3 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 3 1 1 total 0.259937 0.026115 +2 3 1 2 total 0.026187 0.001665 +1 3 2 1 total 0.000000 0.000000 +0 3 2 2 total 1.359521 0.258505 material group out nuclide mean std. dev. 1 3 1 total 0.0 0.0 0 3 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 4 1 total 0.242447 0.061031 0 4 2 total 1.253959 0.388363 material group in nuclide mean std. dev. 1 4 1 total 0.0 0.0 -0 4 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -3 4 1 1 total P0 0.217930 0.058565 P0 -2 4 1 2 total P0 0.023662 0.003083 P0 -1 4 2 1 total P0 0.000000 0.000000 P0 -0 4 2 2 total P0 1.215074 0.381025 P0 material group out nuclide mean std. dev. +0 4 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 4 1 1 total 0.217930 0.058565 +2 4 1 2 total 0.023662 0.003083 +1 4 2 1 total 0.000000 0.000000 +0 4 2 2 total 1.215074 0.381025 material group out nuclide mean std. dev. 1 4 1 total 0.0 0.0 0 4 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 5 1 total 0.0 0.0 0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -3 5 1 1 total P0 0.0 0.0 P0 -2 5 1 2 total P0 0.0 0.0 P0 -1 5 2 1 total P0 0.0 0.0 P0 -0 5 2 2 total P0 0.0 0.0 P0 material group out nuclide mean std. dev. +0 5 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 5 1 1 total 0.0 0.0 +2 5 1 2 total 0.0 0.0 +1 5 2 1 total 0.0 0.0 +0 5 2 2 total 0.0 0.0 material group out nuclide mean std. dev. 1 5 1 total 0.0 0.0 0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 6 1 total 0.0 0.0 0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -3 6 1 1 total P0 0.0 0.0 P0 -2 6 1 2 total P0 0.0 0.0 P0 -1 6 2 1 total P0 0.0 0.0 P0 -0 6 2 2 total P0 0.0 0.0 P0 material group out nuclide mean std. dev. +0 6 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 6 1 1 total 0.0 0.0 +2 6 1 2 total 0.0 0.0 +1 6 2 1 total 0.0 0.0 +0 6 2 2 total 0.0 0.0 material group out nuclide mean std. dev. 1 6 1 total 0.0 0.0 0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 7 1 total 0.0 0.0 0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -3 7 1 1 total P0 0.0 0.0 P0 -2 7 1 2 total P0 0.0 0.0 P0 -1 7 2 1 total P0 0.0 0.0 P0 -0 7 2 2 total P0 0.0 0.0 P0 material group out nuclide mean std. dev. +0 7 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 7 1 1 total 0.0 0.0 +2 7 1 2 total 0.0 0.0 +1 7 2 1 total 0.0 0.0 +0 7 2 2 total 0.0 0.0 material group out nuclide mean std. dev. 1 7 1 total 0.0 0.0 0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 8 1 total 0.0 0.0 0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -3 8 1 1 total P0 0.0 0.0 P0 -2 8 1 2 total P0 0.0 0.0 P0 -1 8 2 1 total P0 0.0 0.0 P0 -0 8 2 2 total P0 0.0 0.0 P0 material group out nuclide mean std. dev. +0 8 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 8 1 1 total 0.0 0.0 +2 8 1 2 total 0.0 0.0 +1 8 2 1 total 0.0 0.0 +0 8 2 2 total 0.0 0.0 material group out nuclide mean std. dev. 1 8 1 total 0.0 0.0 0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 9 1 total 0.600536 0.748875 0 9 2 total 0.000000 0.000000 material group in nuclide mean std. dev. 1 9 1 total 0.0 0.0 -0 9 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -3 9 1 1 total P0 0.600536 0.748875 P0 -2 9 1 2 total P0 0.000000 0.000000 P0 -1 9 2 1 total P0 0.000000 0.000000 P0 -0 9 2 2 total P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. +0 9 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 9 1 1 total 0.600536 0.748875 +2 9 1 2 total 0.000000 0.000000 +1 9 2 1 total 0.000000 0.000000 +0 9 2 2 total 0.000000 0.000000 material group out nuclide mean std. dev. 1 9 1 total 0.0 0.0 0 9 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 10 1 total 0.235515 0.613974 0 10 2 total 0.000000 0.000000 material group in nuclide mean std. dev. 1 10 1 total 0.0 0.0 -0 10 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -3 10 1 1 total P0 0.235515 0.613974 P0 -2 10 1 2 total P0 0.000000 0.000000 P0 -1 10 2 1 total P0 0.000000 0.000000 P0 -0 10 2 2 total P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. +0 10 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 10 1 1 total 0.235515 0.613974 +2 10 1 2 total 0.000000 0.000000 +1 10 2 1 total 0.000000 0.000000 +0 10 2 2 total 0.000000 0.000000 material group out nuclide mean std. dev. 1 10 1 total 0.0 0.0 0 10 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 11 1 total 0.186324 0.632129 0 11 2 total 0.945986 1.591133 material group in nuclide mean std. dev. 1 11 1 total 0.0 0.0 -0 11 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -3 11 1 1 total P0 0.154449 0.597686 P0 -2 11 1 2 total P0 0.031875 0.045078 P0 -1 11 2 1 total P0 0.000000 0.000000 P0 -0 11 2 2 total P0 0.903085 1.532144 P0 material group out nuclide mean std. dev. +0 11 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 11 1 1 total 0.154449 0.597686 +2 11 1 2 total 0.031875 0.045078 +1 11 2 1 total 0.000000 0.000000 +0 11 2 2 total 0.903085 1.532144 material group out nuclide mean std. dev. 1 11 1 total 0.0 0.0 0 11 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 12 1 total 0.213292 0.271444 0 12 2 total 1.390975 2.137346 material group in nuclide mean std. dev. 1 12 1 total 0.0 0.0 -0 12 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -3 12 1 1 total P0 0.186052 0.257633 P0 -2 12 1 2 total P0 0.027240 0.029555 P0 -1 12 2 1 total P0 0.000000 0.000000 P0 -0 12 2 2 total P0 1.357118 2.089846 P0 material group out nuclide mean std. dev. +0 12 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 12 1 1 total 0.186052 0.257633 +2 12 1 2 total 0.027240 0.029555 +1 12 2 1 total 0.000000 0.000000 +0 12 2 2 total 1.357118 2.089846 material group out nuclide mean std. dev. 1 12 1 total 0.0 0.0 0 12 2 total 0.0 0.0 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index 9cef6fdd84..b0d62ebd08 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -134,143 +134,143 @@ 30 1 2 Sm-152 0.000000e+00 0.000000e+00 31 1 2 Eu-153 0.000000e+00 0.000000e+00 32 1 2 Gd-155 0.000000e+00 0.000000e+00 -33 1 2 O-16 0.000000e+00 0.000000e+00 material group in group out nuclide moment mean std. dev. moment -102 1 1 1 U-234 P0 0.000000 0.000000 P0 -103 1 1 1 U-235 P0 0.003226 0.001139 P0 -104 1 1 1 U-236 P0 0.001697 0.000923 P0 -105 1 1 1 U-238 P0 0.194468 0.013279 P0 -106 1 1 1 Np-237 P0 0.000000 0.000000 P0 -107 1 1 1 Pu-238 P0 0.000000 0.000000 P0 -108 1 1 1 Pu-239 P0 0.001005 0.000477 P0 -109 1 1 1 Pu-240 P0 0.001307 0.000295 P0 -110 1 1 1 Pu-241 P0 0.000344 0.000244 P0 -111 1 1 1 Pu-242 P0 0.000000 0.000000 P0 -112 1 1 1 Am-241 P0 0.000000 0.000000 P0 -113 1 1 1 Am-242m P0 0.000000 0.000000 P0 -114 1 1 1 Am-243 P0 0.000000 0.000000 P0 -115 1 1 1 Cm-242 P0 0.000000 0.000000 P0 -116 1 1 1 Cm-243 P0 0.000000 0.000000 P0 -117 1 1 1 Cm-244 P0 0.000000 0.000000 P0 -118 1 1 1 Cm-245 P0 0.000000 0.000000 P0 -119 1 1 1 Mo-95 P0 0.000000 0.000000 P0 -120 1 1 1 Tc-99 P0 0.000000 0.000000 P0 -121 1 1 1 Ru-101 P0 0.000238 0.000254 P0 -122 1 1 1 Ru-103 P0 0.000002 0.000243 P0 -123 1 1 1 Ag-109 P0 0.000000 0.000000 P0 -124 1 1 1 Xe-135 P0 0.000000 0.000000 P0 -125 1 1 1 Cs-133 P0 0.000000 0.000000 P0 -126 1 1 1 Nd-143 P0 0.000447 0.000292 P0 -127 1 1 1 Nd-145 P0 0.000564 0.000294 P0 -128 1 1 1 Sm-147 P0 0.000000 0.000000 P0 -129 1 1 1 Sm-149 P0 0.000000 0.000000 P0 -130 1 1 1 Sm-150 P0 0.000299 0.000238 P0 -131 1 1 1 Sm-151 P0 0.000000 0.000000 P0 -132 1 1 1 Sm-152 P0 0.000492 0.000352 P0 -133 1 1 1 Eu-153 P0 0.000000 0.000000 P0 -134 1 1 1 Gd-155 P0 0.000000 0.000000 P0 -135 1 1 1 O-16 P0 0.133156 0.009821 P0 -68 1 1 2 U-234 P0 0.000000 0.000000 P0 -69 1 1 2 U-235 P0 0.000000 0.000000 P0 -70 1 1 2 U-236 P0 0.000000 0.000000 P0 -71 1 1 2 U-238 P0 0.000173 0.000173 P0 -72 1 1 2 Np-237 P0 0.000000 0.000000 P0 -73 1 1 2 Pu-238 P0 0.000000 0.000000 P0 -74 1 1 2 Pu-239 P0 0.000000 0.000000 P0 -75 1 1 2 Pu-240 P0 0.000000 0.000000 P0 -76 1 1 2 Pu-241 P0 0.000000 0.000000 P0 -77 1 1 2 Pu-242 P0 0.000000 0.000000 P0 -78 1 1 2 Am-241 P0 0.000000 0.000000 P0 -79 1 1 2 Am-242m P0 0.000000 0.000000 P0 -80 1 1 2 Am-243 P0 0.000000 0.000000 P0 -81 1 1 2 Cm-242 P0 0.000000 0.000000 P0 -82 1 1 2 Cm-243 P0 0.000000 0.000000 P0 -83 1 1 2 Cm-244 P0 0.000000 0.000000 P0 -84 1 1 2 Cm-245 P0 0.000000 0.000000 P0 -85 1 1 2 Mo-95 P0 0.000000 0.000000 P0 -86 1 1 2 Tc-99 P0 0.000000 0.000000 P0 -87 1 1 2 Ru-101 P0 0.000000 0.000000 P0 -88 1 1 2 Ru-103 P0 0.000000 0.000000 P0 -89 1 1 2 Ag-109 P0 0.000000 0.000000 P0 -90 1 1 2 Xe-135 P0 0.000000 0.000000 P0 -91 1 1 2 Cs-133 P0 0.000000 0.000000 P0 -92 1 1 2 Nd-143 P0 0.000000 0.000000 P0 -93 1 1 2 Nd-145 P0 0.000000 0.000000 P0 -94 1 1 2 Sm-147 P0 0.000000 0.000000 P0 -95 1 1 2 Sm-149 P0 0.000000 0.000000 P0 -96 1 1 2 Sm-150 P0 0.000000 0.000000 P0 -97 1 1 2 Sm-151 P0 0.000000 0.000000 P0 -98 1 1 2 Sm-152 P0 0.000000 0.000000 P0 -99 1 1 2 Eu-153 P0 0.000000 0.000000 P0 -100 1 1 2 Gd-155 P0 0.000000 0.000000 P0 -101 1 1 2 O-16 P0 0.001386 0.000446 P0 -34 1 2 1 U-234 P0 0.000000 0.000000 P0 -35 1 2 1 U-235 P0 0.000000 0.000000 P0 -36 1 2 1 U-236 P0 0.000000 0.000000 P0 -37 1 2 1 U-238 P0 0.000000 0.000000 P0 -38 1 2 1 Np-237 P0 0.000000 0.000000 P0 -39 1 2 1 Pu-238 P0 0.000000 0.000000 P0 -40 1 2 1 Pu-239 P0 0.000000 0.000000 P0 -41 1 2 1 Pu-240 P0 0.000000 0.000000 P0 -42 1 2 1 Pu-241 P0 0.000000 0.000000 P0 -43 1 2 1 Pu-242 P0 0.000000 0.000000 P0 -44 1 2 1 Am-241 P0 0.000000 0.000000 P0 -45 1 2 1 Am-242m P0 0.000000 0.000000 P0 -46 1 2 1 Am-243 P0 0.000000 0.000000 P0 -47 1 2 1 Cm-242 P0 0.000000 0.000000 P0 -48 1 2 1 Cm-243 P0 0.000000 0.000000 P0 -49 1 2 1 Cm-244 P0 0.000000 0.000000 P0 -50 1 2 1 Cm-245 P0 0.000000 0.000000 P0 -51 1 2 1 Mo-95 P0 0.000000 0.000000 P0 -52 1 2 1 Tc-99 P0 0.000000 0.000000 P0 -53 1 2 1 Ru-101 P0 0.000000 0.000000 P0 -54 1 2 1 Ru-103 P0 0.000000 0.000000 P0 -55 1 2 1 Ag-109 P0 0.000000 0.000000 P0 -56 1 2 1 Xe-135 P0 0.000000 0.000000 P0 -57 1 2 1 Cs-133 P0 0.000000 0.000000 P0 -58 1 2 1 Nd-143 P0 0.000000 0.000000 P0 -59 1 2 1 Nd-145 P0 0.000000 0.000000 P0 -60 1 2 1 Sm-147 P0 0.000000 0.000000 P0 -61 1 2 1 Sm-149 P0 0.000000 0.000000 P0 -62 1 2 1 Sm-150 P0 0.000000 0.000000 P0 -63 1 2 1 Sm-151 P0 0.000000 0.000000 P0 -64 1 2 1 Sm-152 P0 0.000000 0.000000 P0 -65 1 2 1 Eu-153 P0 0.000000 0.000000 P0 -66 1 2 1 Gd-155 P0 0.000000 0.000000 P0 -67 1 2 1 O-16 P0 0.000000 0.000000 P0 -0 1 2 2 U-234 P0 0.000000 0.000000 P0 -1 1 2 2 U-235 P0 0.003889 0.003962 P0 -2 1 2 2 U-236 P0 0.001501 0.002037 P0 -3 1 2 2 U-238 P0 0.219715 0.025984 P0 -4 1 2 2 Np-237 P0 0.000000 0.000000 P0 -5 1 2 2 Pu-238 P0 0.000000 0.000000 P0 -6 1 2 2 Pu-239 P0 0.000000 0.000000 P0 -7 1 2 2 Pu-240 P0 0.000000 0.000000 P0 -8 1 2 2 Pu-241 P0 0.000000 0.000000 P0 -9 1 2 2 Pu-242 P0 0.000000 0.000000 P0 -10 1 2 2 Am-241 P0 0.000000 0.000000 P0 -11 1 2 2 Am-242m P0 0.000000 0.000000 P0 -12 1 2 2 Am-243 P0 0.000000 0.000000 P0 -13 1 2 2 Cm-242 P0 0.000000 0.000000 P0 -14 1 2 2 Cm-243 P0 0.000000 0.000000 P0 -15 1 2 2 Cm-244 P0 0.000000 0.000000 P0 -16 1 2 2 Cm-245 P0 0.000000 0.000000 P0 -17 1 2 2 Mo-95 P0 0.000000 0.000000 P0 -18 1 2 2 Tc-99 P0 0.000000 0.000000 P0 -19 1 2 2 Ru-101 P0 0.000000 0.000000 P0 -20 1 2 2 Ru-103 P0 0.000000 0.000000 P0 -21 1 2 2 Ag-109 P0 0.000000 0.000000 P0 -22 1 2 2 Xe-135 P0 0.000000 0.000000 P0 -23 1 2 2 Cs-133 P0 0.000000 0.000000 P0 -24 1 2 2 Nd-143 P0 0.000000 0.000000 P0 -25 1 2 2 Nd-145 P0 0.000000 0.000000 P0 -26 1 2 2 Sm-147 P0 0.000000 0.000000 P0 -27 1 2 2 Sm-149 P0 0.000000 0.000000 P0 -28 1 2 2 Sm-150 P0 0.000000 0.000000 P0 -29 1 2 2 Sm-151 P0 0.000000 0.000000 P0 -30 1 2 2 Sm-152 P0 0.000000 0.000000 P0 -31 1 2 2 Eu-153 P0 0.000000 0.000000 P0 -32 1 2 2 Gd-155 P0 0.000000 0.000000 P0 -33 1 2 2 O-16 P0 0.196946 0.014729 P0 material group out nuclide mean std. dev. +33 1 2 O-16 0.000000e+00 0.000000e+00 material group in group out nuclide mean std. dev. +102 1 1 1 U-234 0.000000 0.000000 +103 1 1 1 U-235 0.003226 0.001139 +104 1 1 1 U-236 0.001697 0.000923 +105 1 1 1 U-238 0.194468 0.013279 +106 1 1 1 Np-237 0.000000 0.000000 +107 1 1 1 Pu-238 0.000000 0.000000 +108 1 1 1 Pu-239 0.001005 0.000477 +109 1 1 1 Pu-240 0.001307 0.000295 +110 1 1 1 Pu-241 0.000344 0.000244 +111 1 1 1 Pu-242 0.000000 0.000000 +112 1 1 1 Am-241 0.000000 0.000000 +113 1 1 1 Am-242m 0.000000 0.000000 +114 1 1 1 Am-243 0.000000 0.000000 +115 1 1 1 Cm-242 0.000000 0.000000 +116 1 1 1 Cm-243 0.000000 0.000000 +117 1 1 1 Cm-244 0.000000 0.000000 +118 1 1 1 Cm-245 0.000000 0.000000 +119 1 1 1 Mo-95 0.000000 0.000000 +120 1 1 1 Tc-99 0.000000 0.000000 +121 1 1 1 Ru-101 0.000238 0.000254 +122 1 1 1 Ru-103 0.000002 0.000243 +123 1 1 1 Ag-109 0.000000 0.000000 +124 1 1 1 Xe-135 0.000000 0.000000 +125 1 1 1 Cs-133 0.000000 0.000000 +126 1 1 1 Nd-143 0.000447 0.000292 +127 1 1 1 Nd-145 0.000564 0.000294 +128 1 1 1 Sm-147 0.000000 0.000000 +129 1 1 1 Sm-149 0.000000 0.000000 +130 1 1 1 Sm-150 0.000299 0.000238 +131 1 1 1 Sm-151 0.000000 0.000000 +132 1 1 1 Sm-152 0.000492 0.000352 +133 1 1 1 Eu-153 0.000000 0.000000 +134 1 1 1 Gd-155 0.000000 0.000000 +135 1 1 1 O-16 0.133156 0.009821 +68 1 1 2 U-234 0.000000 0.000000 +69 1 1 2 U-235 0.000000 0.000000 +70 1 1 2 U-236 0.000000 0.000000 +71 1 1 2 U-238 0.000173 0.000173 +72 1 1 2 Np-237 0.000000 0.000000 +73 1 1 2 Pu-238 0.000000 0.000000 +74 1 1 2 Pu-239 0.000000 0.000000 +75 1 1 2 Pu-240 0.000000 0.000000 +76 1 1 2 Pu-241 0.000000 0.000000 +77 1 1 2 Pu-242 0.000000 0.000000 +78 1 1 2 Am-241 0.000000 0.000000 +79 1 1 2 Am-242m 0.000000 0.000000 +80 1 1 2 Am-243 0.000000 0.000000 +81 1 1 2 Cm-242 0.000000 0.000000 +82 1 1 2 Cm-243 0.000000 0.000000 +83 1 1 2 Cm-244 0.000000 0.000000 +84 1 1 2 Cm-245 0.000000 0.000000 +85 1 1 2 Mo-95 0.000000 0.000000 +86 1 1 2 Tc-99 0.000000 0.000000 +87 1 1 2 Ru-101 0.000000 0.000000 +88 1 1 2 Ru-103 0.000000 0.000000 +89 1 1 2 Ag-109 0.000000 0.000000 +90 1 1 2 Xe-135 0.000000 0.000000 +91 1 1 2 Cs-133 0.000000 0.000000 +92 1 1 2 Nd-143 0.000000 0.000000 +93 1 1 2 Nd-145 0.000000 0.000000 +94 1 1 2 Sm-147 0.000000 0.000000 +95 1 1 2 Sm-149 0.000000 0.000000 +96 1 1 2 Sm-150 0.000000 0.000000 +97 1 1 2 Sm-151 0.000000 0.000000 +98 1 1 2 Sm-152 0.000000 0.000000 +99 1 1 2 Eu-153 0.000000 0.000000 +100 1 1 2 Gd-155 0.000000 0.000000 +101 1 1 2 O-16 0.001386 0.000446 +34 1 2 1 U-234 0.000000 0.000000 +35 1 2 1 U-235 0.000000 0.000000 +36 1 2 1 U-236 0.000000 0.000000 +37 1 2 1 U-238 0.000000 0.000000 +38 1 2 1 Np-237 0.000000 0.000000 +39 1 2 1 Pu-238 0.000000 0.000000 +40 1 2 1 Pu-239 0.000000 0.000000 +41 1 2 1 Pu-240 0.000000 0.000000 +42 1 2 1 Pu-241 0.000000 0.000000 +43 1 2 1 Pu-242 0.000000 0.000000 +44 1 2 1 Am-241 0.000000 0.000000 +45 1 2 1 Am-242m 0.000000 0.000000 +46 1 2 1 Am-243 0.000000 0.000000 +47 1 2 1 Cm-242 0.000000 0.000000 +48 1 2 1 Cm-243 0.000000 0.000000 +49 1 2 1 Cm-244 0.000000 0.000000 +50 1 2 1 Cm-245 0.000000 0.000000 +51 1 2 1 Mo-95 0.000000 0.000000 +52 1 2 1 Tc-99 0.000000 0.000000 +53 1 2 1 Ru-101 0.000000 0.000000 +54 1 2 1 Ru-103 0.000000 0.000000 +55 1 2 1 Ag-109 0.000000 0.000000 +56 1 2 1 Xe-135 0.000000 0.000000 +57 1 2 1 Cs-133 0.000000 0.000000 +58 1 2 1 Nd-143 0.000000 0.000000 +59 1 2 1 Nd-145 0.000000 0.000000 +60 1 2 1 Sm-147 0.000000 0.000000 +61 1 2 1 Sm-149 0.000000 0.000000 +62 1 2 1 Sm-150 0.000000 0.000000 +63 1 2 1 Sm-151 0.000000 0.000000 +64 1 2 1 Sm-152 0.000000 0.000000 +65 1 2 1 Eu-153 0.000000 0.000000 +66 1 2 1 Gd-155 0.000000 0.000000 +67 1 2 1 O-16 0.000000 0.000000 +0 1 2 2 U-234 0.000000 0.000000 +1 1 2 2 U-235 0.003889 0.003962 +2 1 2 2 U-236 0.001501 0.002037 +3 1 2 2 U-238 0.219715 0.025984 +4 1 2 2 Np-237 0.000000 0.000000 +5 1 2 2 Pu-238 0.000000 0.000000 +6 1 2 2 Pu-239 0.000000 0.000000 +7 1 2 2 Pu-240 0.000000 0.000000 +8 1 2 2 Pu-241 0.000000 0.000000 +9 1 2 2 Pu-242 0.000000 0.000000 +10 1 2 2 Am-241 0.000000 0.000000 +11 1 2 2 Am-242m 0.000000 0.000000 +12 1 2 2 Am-243 0.000000 0.000000 +13 1 2 2 Cm-242 0.000000 0.000000 +14 1 2 2 Cm-243 0.000000 0.000000 +15 1 2 2 Cm-244 0.000000 0.000000 +16 1 2 2 Cm-245 0.000000 0.000000 +17 1 2 2 Mo-95 0.000000 0.000000 +18 1 2 2 Tc-99 0.000000 0.000000 +19 1 2 2 Ru-101 0.000000 0.000000 +20 1 2 2 Ru-103 0.000000 0.000000 +21 1 2 2 Ag-109 0.000000 0.000000 +22 1 2 2 Xe-135 0.000000 0.000000 +23 1 2 2 Cs-133 0.000000 0.000000 +24 1 2 2 Nd-143 0.000000 0.000000 +25 1 2 2 Nd-145 0.000000 0.000000 +26 1 2 2 Sm-147 0.000000 0.000000 +27 1 2 2 Sm-149 0.000000 0.000000 +28 1 2 2 Sm-150 0.000000 0.000000 +29 1 2 2 Sm-151 0.000000 0.000000 +30 1 2 2 Sm-152 0.000000 0.000000 +31 1 2 2 Eu-153 0.000000 0.000000 +32 1 2 2 Gd-155 0.000000 0.000000 +33 1 2 2 O-16 0.196946 0.014729 material group out nuclide mean std. dev. 34 1 1 U-234 0.0 0.000000 35 1 1 U-235 1.0 0.066362 36 1 1 U-236 0.0 0.000000 @@ -358,27 +358,27 @@ 1 2 2 Zr-91 0.0 0.0 2 2 2 Zr-92 0.0 0.0 3 2 2 Zr-94 0.0 0.0 -4 2 2 Zr-96 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -15 2 1 1 Zr-90 P0 0.104734 0.008915 P0 -16 2 1 1 Zr-91 P0 0.036155 0.003735 P0 -17 2 1 1 Zr-92 P0 0.042422 0.003029 P0 -18 2 1 1 Zr-94 P0 0.046148 0.006251 P0 -19 2 1 1 Zr-96 P0 0.007794 0.001536 P0 -10 2 1 2 Zr-90 P0 0.000000 0.000000 P0 -11 2 1 2 Zr-91 P0 0.000000 0.000000 P0 -12 2 1 2 Zr-92 P0 0.000000 0.000000 P0 -13 2 1 2 Zr-94 P0 0.000000 0.000000 P0 -14 2 1 2 Zr-96 P0 0.000000 0.000000 P0 -5 2 2 1 Zr-90 P0 0.000000 0.000000 P0 -6 2 2 1 Zr-91 P0 0.000000 0.000000 P0 -7 2 2 1 Zr-92 P0 0.000000 0.000000 P0 -8 2 2 1 Zr-94 P0 0.000000 0.000000 P0 -9 2 2 1 Zr-96 P0 0.000000 0.000000 P0 -0 2 2 2 Zr-90 P0 0.121688 0.034934 P0 -1 2 2 2 Zr-91 P0 0.061792 0.024317 P0 -2 2 2 2 Zr-92 P0 0.041633 0.016323 P0 -3 2 2 2 Zr-94 P0 0.060818 0.021483 P0 -4 2 2 2 Zr-96 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. +4 2 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. +15 2 1 1 Zr-90 0.104734 0.008915 +16 2 1 1 Zr-91 0.036155 0.003735 +17 2 1 1 Zr-92 0.042422 0.003029 +18 2 1 1 Zr-94 0.046148 0.006251 +19 2 1 1 Zr-96 0.007794 0.001536 +10 2 1 2 Zr-90 0.000000 0.000000 +11 2 1 2 Zr-91 0.000000 0.000000 +12 2 1 2 Zr-92 0.000000 0.000000 +13 2 1 2 Zr-94 0.000000 0.000000 +14 2 1 2 Zr-96 0.000000 0.000000 +5 2 2 1 Zr-90 0.000000 0.000000 +6 2 2 1 Zr-91 0.000000 0.000000 +7 2 2 1 Zr-92 0.000000 0.000000 +8 2 2 1 Zr-94 0.000000 0.000000 +9 2 2 1 Zr-96 0.000000 0.000000 +0 2 2 2 Zr-90 0.121688 0.034934 +1 2 2 2 Zr-91 0.061792 0.024317 +2 2 2 2 Zr-92 0.041633 0.016323 +3 2 2 2 Zr-94 0.060818 0.021483 +4 2 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. 5 2 1 Zr-90 0.0 0.0 6 2 1 Zr-91 0.0 0.0 7 2 1 Zr-92 0.0 0.0 @@ -404,23 +404,23 @@ 0 3 2 H-1 0.0 0.0 1 3 2 O-16 0.0 0.0 2 3 2 B-10 0.0 0.0 -3 3 2 B-11 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -12 3 1 1 H-1 P0 0.181306 0.022102 P0 -13 3 1 1 O-16 P0 0.078631 0.005044 P0 -14 3 1 1 B-10 P0 0.000000 0.000000 P0 -15 3 1 1 B-11 P0 0.000000 0.000000 P0 -8 3 1 2 H-1 P0 0.025666 0.001582 P0 -9 3 1 2 O-16 P0 0.000521 0.000131 P0 -10 3 1 2 B-10 P0 0.000000 0.000000 P0 -11 3 1 2 B-11 P0 0.000000 0.000000 P0 -4 3 2 1 H-1 P0 0.000000 0.000000 P0 -5 3 2 1 O-16 P0 0.000000 0.000000 P0 -6 3 2 1 B-10 P0 0.000000 0.000000 P0 -7 3 2 1 B-11 P0 0.000000 0.000000 P0 -0 3 2 2 H-1 P0 1.273963 0.250623 P0 -1 3 2 2 O-16 P0 0.085363 0.014001 P0 -2 3 2 2 B-10 P0 0.000000 0.000000 P0 -3 3 2 2 B-11 P0 0.000195 0.001527 P0 material group out nuclide mean std. dev. +3 3 2 B-11 0.0 0.0 material group in group out nuclide mean std. dev. +12 3 1 1 H-1 0.181306 0.022102 +13 3 1 1 O-16 0.078631 0.005044 +14 3 1 1 B-10 0.000000 0.000000 +15 3 1 1 B-11 0.000000 0.000000 +8 3 1 2 H-1 0.025666 0.001582 +9 3 1 2 O-16 0.000521 0.000131 +10 3 1 2 B-10 0.000000 0.000000 +11 3 1 2 B-11 0.000000 0.000000 +4 3 2 1 H-1 0.000000 0.000000 +5 3 2 1 O-16 0.000000 0.000000 +6 3 2 1 B-10 0.000000 0.000000 +7 3 2 1 B-11 0.000000 0.000000 +0 3 2 2 H-1 1.273963 0.250623 +1 3 2 2 O-16 0.085363 0.014001 +2 3 2 2 B-10 0.000000 0.000000 +3 3 2 2 B-11 0.000195 0.001527 material group out nuclide mean std. dev. 4 3 1 H-1 0.0 0.0 5 3 1 O-16 0.0 0.0 6 3 1 B-10 0.0 0.0 @@ -444,23 +444,23 @@ 0 4 2 H-1 0.0 0.0 1 4 2 O-16 0.0 0.0 2 4 2 B-10 0.0 0.0 -3 4 2 B-11 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -12 4 1 1 H-1 P0 0.151295 0.051491 P0 -13 4 1 1 O-16 P0 0.066545 0.010083 P0 -14 4 1 1 B-10 P0 0.000000 0.000000 P0 -15 4 1 1 B-11 P0 0.000089 0.000346 P0 -8 4 1 2 H-1 P0 0.023662 0.003083 P0 -9 4 1 2 O-16 P0 0.000000 0.000000 P0 -10 4 1 2 B-10 P0 0.000000 0.000000 P0 -11 4 1 2 B-11 P0 0.000000 0.000000 P0 -4 4 2 1 H-1 P0 0.000000 0.000000 P0 -5 4 2 1 O-16 P0 0.000000 0.000000 P0 -6 4 2 1 B-10 P0 0.000000 0.000000 P0 -7 4 2 1 B-11 P0 0.000000 0.000000 P0 -0 4 2 2 H-1 P0 1.129933 0.361681 P0 -1 4 2 2 O-16 P0 0.085141 0.028073 P0 -2 4 2 2 B-10 P0 0.000000 0.000000 P0 -3 4 2 2 B-11 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. +3 4 2 B-11 0.0 0.0 material group in group out nuclide mean std. dev. +12 4 1 1 H-1 0.151295 0.051491 +13 4 1 1 O-16 0.066545 0.010083 +14 4 1 1 B-10 0.000000 0.000000 +15 4 1 1 B-11 0.000089 0.000346 +8 4 1 2 H-1 0.023662 0.003083 +9 4 1 2 O-16 0.000000 0.000000 +10 4 1 2 B-10 0.000000 0.000000 +11 4 1 2 B-11 0.000000 0.000000 +4 4 2 1 H-1 0.000000 0.000000 +5 4 2 1 O-16 0.000000 0.000000 +6 4 2 1 B-10 0.000000 0.000000 +7 4 2 1 B-11 0.000000 0.000000 +0 4 2 2 H-1 1.129933 0.361681 +1 4 2 2 O-16 0.085141 0.028073 +2 4 2 2 B-10 0.000000 0.000000 +3 4 2 2 B-11 0.000000 0.000000 material group out nuclide mean std. dev. 4 4 1 H-1 0.0 0.0 5 4 1 O-16 0.0 0.0 6 4 1 B-10 0.0 0.0 @@ -576,115 +576,115 @@ 23 5 2 Cr-54 0.0 0.0 24 5 2 C-Nat 0.0 0.0 25 5 2 Cu-63 0.0 0.0 -26 5 2 Cu-65 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -81 5 1 1 Fe-54 P0 0.0 0.0 P0 -82 5 1 1 Fe-56 P0 0.0 0.0 P0 -83 5 1 1 Fe-57 P0 0.0 0.0 P0 -84 5 1 1 Fe-58 P0 0.0 0.0 P0 -85 5 1 1 Ni-58 P0 0.0 0.0 P0 -86 5 1 1 Ni-60 P0 0.0 0.0 P0 -87 5 1 1 Ni-61 P0 0.0 0.0 P0 -88 5 1 1 Ni-62 P0 0.0 0.0 P0 -89 5 1 1 Ni-64 P0 0.0 0.0 P0 -90 5 1 1 Mn-55 P0 0.0 0.0 P0 -91 5 1 1 Mo-92 P0 0.0 0.0 P0 -92 5 1 1 Mo-94 P0 0.0 0.0 P0 -93 5 1 1 Mo-95 P0 0.0 0.0 P0 -94 5 1 1 Mo-96 P0 0.0 0.0 P0 -95 5 1 1 Mo-97 P0 0.0 0.0 P0 -96 5 1 1 Mo-98 P0 0.0 0.0 P0 -97 5 1 1 Mo-100 P0 0.0 0.0 P0 -98 5 1 1 Si-28 P0 0.0 0.0 P0 -99 5 1 1 Si-29 P0 0.0 0.0 P0 -100 5 1 1 Si-30 P0 0.0 0.0 P0 -101 5 1 1 Cr-50 P0 0.0 0.0 P0 -102 5 1 1 Cr-52 P0 0.0 0.0 P0 -103 5 1 1 Cr-53 P0 0.0 0.0 P0 -104 5 1 1 Cr-54 P0 0.0 0.0 P0 -105 5 1 1 C-Nat P0 0.0 0.0 P0 -106 5 1 1 Cu-63 P0 0.0 0.0 P0 -107 5 1 1 Cu-65 P0 0.0 0.0 P0 -54 5 1 2 Fe-54 P0 0.0 0.0 P0 -55 5 1 2 Fe-56 P0 0.0 0.0 P0 -56 5 1 2 Fe-57 P0 0.0 0.0 P0 -57 5 1 2 Fe-58 P0 0.0 0.0 P0 -58 5 1 2 Ni-58 P0 0.0 0.0 P0 -59 5 1 2 Ni-60 P0 0.0 0.0 P0 -60 5 1 2 Ni-61 P0 0.0 0.0 P0 -61 5 1 2 Ni-62 P0 0.0 0.0 P0 -62 5 1 2 Ni-64 P0 0.0 0.0 P0 -63 5 1 2 Mn-55 P0 0.0 0.0 P0 -64 5 1 2 Mo-92 P0 0.0 0.0 P0 -65 5 1 2 Mo-94 P0 0.0 0.0 P0 -66 5 1 2 Mo-95 P0 0.0 0.0 P0 -67 5 1 2 Mo-96 P0 0.0 0.0 P0 -68 5 1 2 Mo-97 P0 0.0 0.0 P0 -69 5 1 2 Mo-98 P0 0.0 0.0 P0 -70 5 1 2 Mo-100 P0 0.0 0.0 P0 -71 5 1 2 Si-28 P0 0.0 0.0 P0 -72 5 1 2 Si-29 P0 0.0 0.0 P0 -73 5 1 2 Si-30 P0 0.0 0.0 P0 -74 5 1 2 Cr-50 P0 0.0 0.0 P0 -75 5 1 2 Cr-52 P0 0.0 0.0 P0 -76 5 1 2 Cr-53 P0 0.0 0.0 P0 -77 5 1 2 Cr-54 P0 0.0 0.0 P0 -78 5 1 2 C-Nat P0 0.0 0.0 P0 -79 5 1 2 Cu-63 P0 0.0 0.0 P0 -80 5 1 2 Cu-65 P0 0.0 0.0 P0 -27 5 2 1 Fe-54 P0 0.0 0.0 P0 -28 5 2 1 Fe-56 P0 0.0 0.0 P0 -29 5 2 1 Fe-57 P0 0.0 0.0 P0 -30 5 2 1 Fe-58 P0 0.0 0.0 P0 -31 5 2 1 Ni-58 P0 0.0 0.0 P0 -32 5 2 1 Ni-60 P0 0.0 0.0 P0 -33 5 2 1 Ni-61 P0 0.0 0.0 P0 -34 5 2 1 Ni-62 P0 0.0 0.0 P0 -35 5 2 1 Ni-64 P0 0.0 0.0 P0 -36 5 2 1 Mn-55 P0 0.0 0.0 P0 -37 5 2 1 Mo-92 P0 0.0 0.0 P0 -38 5 2 1 Mo-94 P0 0.0 0.0 P0 -39 5 2 1 Mo-95 P0 0.0 0.0 P0 -40 5 2 1 Mo-96 P0 0.0 0.0 P0 -41 5 2 1 Mo-97 P0 0.0 0.0 P0 -42 5 2 1 Mo-98 P0 0.0 0.0 P0 -43 5 2 1 Mo-100 P0 0.0 0.0 P0 -44 5 2 1 Si-28 P0 0.0 0.0 P0 -45 5 2 1 Si-29 P0 0.0 0.0 P0 -46 5 2 1 Si-30 P0 0.0 0.0 P0 -47 5 2 1 Cr-50 P0 0.0 0.0 P0 -48 5 2 1 Cr-52 P0 0.0 0.0 P0 -49 5 2 1 Cr-53 P0 0.0 0.0 P0 -50 5 2 1 Cr-54 P0 0.0 0.0 P0 -51 5 2 1 C-Nat P0 0.0 0.0 P0 -52 5 2 1 Cu-63 P0 0.0 0.0 P0 -53 5 2 1 Cu-65 P0 0.0 0.0 P0 -0 5 2 2 Fe-54 P0 0.0 0.0 P0 -1 5 2 2 Fe-56 P0 0.0 0.0 P0 -2 5 2 2 Fe-57 P0 0.0 0.0 P0 -3 5 2 2 Fe-58 P0 0.0 0.0 P0 -4 5 2 2 Ni-58 P0 0.0 0.0 P0 -5 5 2 2 Ni-60 P0 0.0 0.0 P0 -6 5 2 2 Ni-61 P0 0.0 0.0 P0 -7 5 2 2 Ni-62 P0 0.0 0.0 P0 -8 5 2 2 Ni-64 P0 0.0 0.0 P0 -9 5 2 2 Mn-55 P0 0.0 0.0 P0 -10 5 2 2 Mo-92 P0 0.0 0.0 P0 -11 5 2 2 Mo-94 P0 0.0 0.0 P0 -12 5 2 2 Mo-95 P0 0.0 0.0 P0 -13 5 2 2 Mo-96 P0 0.0 0.0 P0 -14 5 2 2 Mo-97 P0 0.0 0.0 P0 -15 5 2 2 Mo-98 P0 0.0 0.0 P0 -16 5 2 2 Mo-100 P0 0.0 0.0 P0 -17 5 2 2 Si-28 P0 0.0 0.0 P0 -18 5 2 2 Si-29 P0 0.0 0.0 P0 -19 5 2 2 Si-30 P0 0.0 0.0 P0 -20 5 2 2 Cr-50 P0 0.0 0.0 P0 -21 5 2 2 Cr-52 P0 0.0 0.0 P0 -22 5 2 2 Cr-53 P0 0.0 0.0 P0 -23 5 2 2 Cr-54 P0 0.0 0.0 P0 -24 5 2 2 C-Nat P0 0.0 0.0 P0 -25 5 2 2 Cu-63 P0 0.0 0.0 P0 -26 5 2 2 Cu-65 P0 0.0 0.0 P0 material group out nuclide mean std. dev. +26 5 2 Cu-65 0.0 0.0 material group in group out nuclide mean std. dev. +81 5 1 1 Fe-54 0.0 0.0 +82 5 1 1 Fe-56 0.0 0.0 +83 5 1 1 Fe-57 0.0 0.0 +84 5 1 1 Fe-58 0.0 0.0 +85 5 1 1 Ni-58 0.0 0.0 +86 5 1 1 Ni-60 0.0 0.0 +87 5 1 1 Ni-61 0.0 0.0 +88 5 1 1 Ni-62 0.0 0.0 +89 5 1 1 Ni-64 0.0 0.0 +90 5 1 1 Mn-55 0.0 0.0 +91 5 1 1 Mo-92 0.0 0.0 +92 5 1 1 Mo-94 0.0 0.0 +93 5 1 1 Mo-95 0.0 0.0 +94 5 1 1 Mo-96 0.0 0.0 +95 5 1 1 Mo-97 0.0 0.0 +96 5 1 1 Mo-98 0.0 0.0 +97 5 1 1 Mo-100 0.0 0.0 +98 5 1 1 Si-28 0.0 0.0 +99 5 1 1 Si-29 0.0 0.0 +100 5 1 1 Si-30 0.0 0.0 +101 5 1 1 Cr-50 0.0 0.0 +102 5 1 1 Cr-52 0.0 0.0 +103 5 1 1 Cr-53 0.0 0.0 +104 5 1 1 Cr-54 0.0 0.0 +105 5 1 1 C-Nat 0.0 0.0 +106 5 1 1 Cu-63 0.0 0.0 +107 5 1 1 Cu-65 0.0 0.0 +54 5 1 2 Fe-54 0.0 0.0 +55 5 1 2 Fe-56 0.0 0.0 +56 5 1 2 Fe-57 0.0 0.0 +57 5 1 2 Fe-58 0.0 0.0 +58 5 1 2 Ni-58 0.0 0.0 +59 5 1 2 Ni-60 0.0 0.0 +60 5 1 2 Ni-61 0.0 0.0 +61 5 1 2 Ni-62 0.0 0.0 +62 5 1 2 Ni-64 0.0 0.0 +63 5 1 2 Mn-55 0.0 0.0 +64 5 1 2 Mo-92 0.0 0.0 +65 5 1 2 Mo-94 0.0 0.0 +66 5 1 2 Mo-95 0.0 0.0 +67 5 1 2 Mo-96 0.0 0.0 +68 5 1 2 Mo-97 0.0 0.0 +69 5 1 2 Mo-98 0.0 0.0 +70 5 1 2 Mo-100 0.0 0.0 +71 5 1 2 Si-28 0.0 0.0 +72 5 1 2 Si-29 0.0 0.0 +73 5 1 2 Si-30 0.0 0.0 +74 5 1 2 Cr-50 0.0 0.0 +75 5 1 2 Cr-52 0.0 0.0 +76 5 1 2 Cr-53 0.0 0.0 +77 5 1 2 Cr-54 0.0 0.0 +78 5 1 2 C-Nat 0.0 0.0 +79 5 1 2 Cu-63 0.0 0.0 +80 5 1 2 Cu-65 0.0 0.0 +27 5 2 1 Fe-54 0.0 0.0 +28 5 2 1 Fe-56 0.0 0.0 +29 5 2 1 Fe-57 0.0 0.0 +30 5 2 1 Fe-58 0.0 0.0 +31 5 2 1 Ni-58 0.0 0.0 +32 5 2 1 Ni-60 0.0 0.0 +33 5 2 1 Ni-61 0.0 0.0 +34 5 2 1 Ni-62 0.0 0.0 +35 5 2 1 Ni-64 0.0 0.0 +36 5 2 1 Mn-55 0.0 0.0 +37 5 2 1 Mo-92 0.0 0.0 +38 5 2 1 Mo-94 0.0 0.0 +39 5 2 1 Mo-95 0.0 0.0 +40 5 2 1 Mo-96 0.0 0.0 +41 5 2 1 Mo-97 0.0 0.0 +42 5 2 1 Mo-98 0.0 0.0 +43 5 2 1 Mo-100 0.0 0.0 +44 5 2 1 Si-28 0.0 0.0 +45 5 2 1 Si-29 0.0 0.0 +46 5 2 1 Si-30 0.0 0.0 +47 5 2 1 Cr-50 0.0 0.0 +48 5 2 1 Cr-52 0.0 0.0 +49 5 2 1 Cr-53 0.0 0.0 +50 5 2 1 Cr-54 0.0 0.0 +51 5 2 1 C-Nat 0.0 0.0 +52 5 2 1 Cu-63 0.0 0.0 +53 5 2 1 Cu-65 0.0 0.0 +0 5 2 2 Fe-54 0.0 0.0 +1 5 2 2 Fe-56 0.0 0.0 +2 5 2 2 Fe-57 0.0 0.0 +3 5 2 2 Fe-58 0.0 0.0 +4 5 2 2 Ni-58 0.0 0.0 +5 5 2 2 Ni-60 0.0 0.0 +6 5 2 2 Ni-61 0.0 0.0 +7 5 2 2 Ni-62 0.0 0.0 +8 5 2 2 Ni-64 0.0 0.0 +9 5 2 2 Mn-55 0.0 0.0 +10 5 2 2 Mo-92 0.0 0.0 +11 5 2 2 Mo-94 0.0 0.0 +12 5 2 2 Mo-95 0.0 0.0 +13 5 2 2 Mo-96 0.0 0.0 +14 5 2 2 Mo-97 0.0 0.0 +15 5 2 2 Mo-98 0.0 0.0 +16 5 2 2 Mo-100 0.0 0.0 +17 5 2 2 Si-28 0.0 0.0 +18 5 2 2 Si-29 0.0 0.0 +19 5 2 2 Si-30 0.0 0.0 +20 5 2 2 Cr-50 0.0 0.0 +21 5 2 2 Cr-52 0.0 0.0 +22 5 2 2 Cr-53 0.0 0.0 +23 5 2 2 Cr-54 0.0 0.0 +24 5 2 2 C-Nat 0.0 0.0 +25 5 2 2 Cu-63 0.0 0.0 +26 5 2 2 Cu-65 0.0 0.0 material group out nuclide mean std. dev. 27 5 1 Fe-54 0.0 0.0 28 5 1 Fe-56 0.0 0.0 29 5 1 Fe-57 0.0 0.0 @@ -822,91 +822,91 @@ 17 6 2 Cr-50 0.0 0.0 18 6 2 Cr-52 0.0 0.0 19 6 2 Cr-53 0.0 0.0 -20 6 2 Cr-54 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -63 6 1 1 H-1 P0 0.0 0.0 P0 -64 6 1 1 O-16 P0 0.0 0.0 P0 -65 6 1 1 B-10 P0 0.0 0.0 P0 -66 6 1 1 B-11 P0 0.0 0.0 P0 -67 6 1 1 Fe-54 P0 0.0 0.0 P0 -68 6 1 1 Fe-56 P0 0.0 0.0 P0 -69 6 1 1 Fe-57 P0 0.0 0.0 P0 -70 6 1 1 Fe-58 P0 0.0 0.0 P0 -71 6 1 1 Ni-58 P0 0.0 0.0 P0 -72 6 1 1 Ni-60 P0 0.0 0.0 P0 -73 6 1 1 Ni-61 P0 0.0 0.0 P0 -74 6 1 1 Ni-62 P0 0.0 0.0 P0 -75 6 1 1 Ni-64 P0 0.0 0.0 P0 -76 6 1 1 Mn-55 P0 0.0 0.0 P0 -77 6 1 1 Si-28 P0 0.0 0.0 P0 -78 6 1 1 Si-29 P0 0.0 0.0 P0 -79 6 1 1 Si-30 P0 0.0 0.0 P0 -80 6 1 1 Cr-50 P0 0.0 0.0 P0 -81 6 1 1 Cr-52 P0 0.0 0.0 P0 -82 6 1 1 Cr-53 P0 0.0 0.0 P0 -83 6 1 1 Cr-54 P0 0.0 0.0 P0 -42 6 1 2 H-1 P0 0.0 0.0 P0 -43 6 1 2 O-16 P0 0.0 0.0 P0 -44 6 1 2 B-10 P0 0.0 0.0 P0 -45 6 1 2 B-11 P0 0.0 0.0 P0 -46 6 1 2 Fe-54 P0 0.0 0.0 P0 -47 6 1 2 Fe-56 P0 0.0 0.0 P0 -48 6 1 2 Fe-57 P0 0.0 0.0 P0 -49 6 1 2 Fe-58 P0 0.0 0.0 P0 -50 6 1 2 Ni-58 P0 0.0 0.0 P0 -51 6 1 2 Ni-60 P0 0.0 0.0 P0 -52 6 1 2 Ni-61 P0 0.0 0.0 P0 -53 6 1 2 Ni-62 P0 0.0 0.0 P0 -54 6 1 2 Ni-64 P0 0.0 0.0 P0 -55 6 1 2 Mn-55 P0 0.0 0.0 P0 -56 6 1 2 Si-28 P0 0.0 0.0 P0 -57 6 1 2 Si-29 P0 0.0 0.0 P0 -58 6 1 2 Si-30 P0 0.0 0.0 P0 -59 6 1 2 Cr-50 P0 0.0 0.0 P0 -60 6 1 2 Cr-52 P0 0.0 0.0 P0 -61 6 1 2 Cr-53 P0 0.0 0.0 P0 -62 6 1 2 Cr-54 P0 0.0 0.0 P0 -21 6 2 1 H-1 P0 0.0 0.0 P0 -22 6 2 1 O-16 P0 0.0 0.0 P0 -23 6 2 1 B-10 P0 0.0 0.0 P0 -24 6 2 1 B-11 P0 0.0 0.0 P0 -25 6 2 1 Fe-54 P0 0.0 0.0 P0 -26 6 2 1 Fe-56 P0 0.0 0.0 P0 -27 6 2 1 Fe-57 P0 0.0 0.0 P0 -28 6 2 1 Fe-58 P0 0.0 0.0 P0 -29 6 2 1 Ni-58 P0 0.0 0.0 P0 -30 6 2 1 Ni-60 P0 0.0 0.0 P0 -31 6 2 1 Ni-61 P0 0.0 0.0 P0 -32 6 2 1 Ni-62 P0 0.0 0.0 P0 -33 6 2 1 Ni-64 P0 0.0 0.0 P0 -34 6 2 1 Mn-55 P0 0.0 0.0 P0 -35 6 2 1 Si-28 P0 0.0 0.0 P0 -36 6 2 1 Si-29 P0 0.0 0.0 P0 -37 6 2 1 Si-30 P0 0.0 0.0 P0 -38 6 2 1 Cr-50 P0 0.0 0.0 P0 -39 6 2 1 Cr-52 P0 0.0 0.0 P0 -40 6 2 1 Cr-53 P0 0.0 0.0 P0 -41 6 2 1 Cr-54 P0 0.0 0.0 P0 -0 6 2 2 H-1 P0 0.0 0.0 P0 -1 6 2 2 O-16 P0 0.0 0.0 P0 -2 6 2 2 B-10 P0 0.0 0.0 P0 -3 6 2 2 B-11 P0 0.0 0.0 P0 -4 6 2 2 Fe-54 P0 0.0 0.0 P0 -5 6 2 2 Fe-56 P0 0.0 0.0 P0 -6 6 2 2 Fe-57 P0 0.0 0.0 P0 -7 6 2 2 Fe-58 P0 0.0 0.0 P0 -8 6 2 2 Ni-58 P0 0.0 0.0 P0 -9 6 2 2 Ni-60 P0 0.0 0.0 P0 -10 6 2 2 Ni-61 P0 0.0 0.0 P0 -11 6 2 2 Ni-62 P0 0.0 0.0 P0 -12 6 2 2 Ni-64 P0 0.0 0.0 P0 -13 6 2 2 Mn-55 P0 0.0 0.0 P0 -14 6 2 2 Si-28 P0 0.0 0.0 P0 -15 6 2 2 Si-29 P0 0.0 0.0 P0 -16 6 2 2 Si-30 P0 0.0 0.0 P0 -17 6 2 2 Cr-50 P0 0.0 0.0 P0 -18 6 2 2 Cr-52 P0 0.0 0.0 P0 -19 6 2 2 Cr-53 P0 0.0 0.0 P0 -20 6 2 2 Cr-54 P0 0.0 0.0 P0 material group out nuclide mean std. dev. +20 6 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. +63 6 1 1 H-1 0.0 0.0 +64 6 1 1 O-16 0.0 0.0 +65 6 1 1 B-10 0.0 0.0 +66 6 1 1 B-11 0.0 0.0 +67 6 1 1 Fe-54 0.0 0.0 +68 6 1 1 Fe-56 0.0 0.0 +69 6 1 1 Fe-57 0.0 0.0 +70 6 1 1 Fe-58 0.0 0.0 +71 6 1 1 Ni-58 0.0 0.0 +72 6 1 1 Ni-60 0.0 0.0 +73 6 1 1 Ni-61 0.0 0.0 +74 6 1 1 Ni-62 0.0 0.0 +75 6 1 1 Ni-64 0.0 0.0 +76 6 1 1 Mn-55 0.0 0.0 +77 6 1 1 Si-28 0.0 0.0 +78 6 1 1 Si-29 0.0 0.0 +79 6 1 1 Si-30 0.0 0.0 +80 6 1 1 Cr-50 0.0 0.0 +81 6 1 1 Cr-52 0.0 0.0 +82 6 1 1 Cr-53 0.0 0.0 +83 6 1 1 Cr-54 0.0 0.0 +42 6 1 2 H-1 0.0 0.0 +43 6 1 2 O-16 0.0 0.0 +44 6 1 2 B-10 0.0 0.0 +45 6 1 2 B-11 0.0 0.0 +46 6 1 2 Fe-54 0.0 0.0 +47 6 1 2 Fe-56 0.0 0.0 +48 6 1 2 Fe-57 0.0 0.0 +49 6 1 2 Fe-58 0.0 0.0 +50 6 1 2 Ni-58 0.0 0.0 +51 6 1 2 Ni-60 0.0 0.0 +52 6 1 2 Ni-61 0.0 0.0 +53 6 1 2 Ni-62 0.0 0.0 +54 6 1 2 Ni-64 0.0 0.0 +55 6 1 2 Mn-55 0.0 0.0 +56 6 1 2 Si-28 0.0 0.0 +57 6 1 2 Si-29 0.0 0.0 +58 6 1 2 Si-30 0.0 0.0 +59 6 1 2 Cr-50 0.0 0.0 +60 6 1 2 Cr-52 0.0 0.0 +61 6 1 2 Cr-53 0.0 0.0 +62 6 1 2 Cr-54 0.0 0.0 +21 6 2 1 H-1 0.0 0.0 +22 6 2 1 O-16 0.0 0.0 +23 6 2 1 B-10 0.0 0.0 +24 6 2 1 B-11 0.0 0.0 +25 6 2 1 Fe-54 0.0 0.0 +26 6 2 1 Fe-56 0.0 0.0 +27 6 2 1 Fe-57 0.0 0.0 +28 6 2 1 Fe-58 0.0 0.0 +29 6 2 1 Ni-58 0.0 0.0 +30 6 2 1 Ni-60 0.0 0.0 +31 6 2 1 Ni-61 0.0 0.0 +32 6 2 1 Ni-62 0.0 0.0 +33 6 2 1 Ni-64 0.0 0.0 +34 6 2 1 Mn-55 0.0 0.0 +35 6 2 1 Si-28 0.0 0.0 +36 6 2 1 Si-29 0.0 0.0 +37 6 2 1 Si-30 0.0 0.0 +38 6 2 1 Cr-50 0.0 0.0 +39 6 2 1 Cr-52 0.0 0.0 +40 6 2 1 Cr-53 0.0 0.0 +41 6 2 1 Cr-54 0.0 0.0 +0 6 2 2 H-1 0.0 0.0 +1 6 2 2 O-16 0.0 0.0 +2 6 2 2 B-10 0.0 0.0 +3 6 2 2 B-11 0.0 0.0 +4 6 2 2 Fe-54 0.0 0.0 +5 6 2 2 Fe-56 0.0 0.0 +6 6 2 2 Fe-57 0.0 0.0 +7 6 2 2 Fe-58 0.0 0.0 +8 6 2 2 Ni-58 0.0 0.0 +9 6 2 2 Ni-60 0.0 0.0 +10 6 2 2 Ni-61 0.0 0.0 +11 6 2 2 Ni-62 0.0 0.0 +12 6 2 2 Ni-64 0.0 0.0 +13 6 2 2 Mn-55 0.0 0.0 +14 6 2 2 Si-28 0.0 0.0 +15 6 2 2 Si-29 0.0 0.0 +16 6 2 2 Si-30 0.0 0.0 +17 6 2 2 Cr-50 0.0 0.0 +18 6 2 2 Cr-52 0.0 0.0 +19 6 2 2 Cr-53 0.0 0.0 +20 6 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. 21 6 1 H-1 0.0 0.0 22 6 1 O-16 0.0 0.0 23 6 1 B-10 0.0 0.0 @@ -1032,91 +1032,91 @@ 17 7 2 Cr-50 0.0 0.0 18 7 2 Cr-52 0.0 0.0 19 7 2 Cr-53 0.0 0.0 -20 7 2 Cr-54 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -63 7 1 1 H-1 P0 0.0 0.0 P0 -64 7 1 1 O-16 P0 0.0 0.0 P0 -65 7 1 1 B-10 P0 0.0 0.0 P0 -66 7 1 1 B-11 P0 0.0 0.0 P0 -67 7 1 1 Fe-54 P0 0.0 0.0 P0 -68 7 1 1 Fe-56 P0 0.0 0.0 P0 -69 7 1 1 Fe-57 P0 0.0 0.0 P0 -70 7 1 1 Fe-58 P0 0.0 0.0 P0 -71 7 1 1 Ni-58 P0 0.0 0.0 P0 -72 7 1 1 Ni-60 P0 0.0 0.0 P0 -73 7 1 1 Ni-61 P0 0.0 0.0 P0 -74 7 1 1 Ni-62 P0 0.0 0.0 P0 -75 7 1 1 Ni-64 P0 0.0 0.0 P0 -76 7 1 1 Mn-55 P0 0.0 0.0 P0 -77 7 1 1 Si-28 P0 0.0 0.0 P0 -78 7 1 1 Si-29 P0 0.0 0.0 P0 -79 7 1 1 Si-30 P0 0.0 0.0 P0 -80 7 1 1 Cr-50 P0 0.0 0.0 P0 -81 7 1 1 Cr-52 P0 0.0 0.0 P0 -82 7 1 1 Cr-53 P0 0.0 0.0 P0 -83 7 1 1 Cr-54 P0 0.0 0.0 P0 -42 7 1 2 H-1 P0 0.0 0.0 P0 -43 7 1 2 O-16 P0 0.0 0.0 P0 -44 7 1 2 B-10 P0 0.0 0.0 P0 -45 7 1 2 B-11 P0 0.0 0.0 P0 -46 7 1 2 Fe-54 P0 0.0 0.0 P0 -47 7 1 2 Fe-56 P0 0.0 0.0 P0 -48 7 1 2 Fe-57 P0 0.0 0.0 P0 -49 7 1 2 Fe-58 P0 0.0 0.0 P0 -50 7 1 2 Ni-58 P0 0.0 0.0 P0 -51 7 1 2 Ni-60 P0 0.0 0.0 P0 -52 7 1 2 Ni-61 P0 0.0 0.0 P0 -53 7 1 2 Ni-62 P0 0.0 0.0 P0 -54 7 1 2 Ni-64 P0 0.0 0.0 P0 -55 7 1 2 Mn-55 P0 0.0 0.0 P0 -56 7 1 2 Si-28 P0 0.0 0.0 P0 -57 7 1 2 Si-29 P0 0.0 0.0 P0 -58 7 1 2 Si-30 P0 0.0 0.0 P0 -59 7 1 2 Cr-50 P0 0.0 0.0 P0 -60 7 1 2 Cr-52 P0 0.0 0.0 P0 -61 7 1 2 Cr-53 P0 0.0 0.0 P0 -62 7 1 2 Cr-54 P0 0.0 0.0 P0 -21 7 2 1 H-1 P0 0.0 0.0 P0 -22 7 2 1 O-16 P0 0.0 0.0 P0 -23 7 2 1 B-10 P0 0.0 0.0 P0 -24 7 2 1 B-11 P0 0.0 0.0 P0 -25 7 2 1 Fe-54 P0 0.0 0.0 P0 -26 7 2 1 Fe-56 P0 0.0 0.0 P0 -27 7 2 1 Fe-57 P0 0.0 0.0 P0 -28 7 2 1 Fe-58 P0 0.0 0.0 P0 -29 7 2 1 Ni-58 P0 0.0 0.0 P0 -30 7 2 1 Ni-60 P0 0.0 0.0 P0 -31 7 2 1 Ni-61 P0 0.0 0.0 P0 -32 7 2 1 Ni-62 P0 0.0 0.0 P0 -33 7 2 1 Ni-64 P0 0.0 0.0 P0 -34 7 2 1 Mn-55 P0 0.0 0.0 P0 -35 7 2 1 Si-28 P0 0.0 0.0 P0 -36 7 2 1 Si-29 P0 0.0 0.0 P0 -37 7 2 1 Si-30 P0 0.0 0.0 P0 -38 7 2 1 Cr-50 P0 0.0 0.0 P0 -39 7 2 1 Cr-52 P0 0.0 0.0 P0 -40 7 2 1 Cr-53 P0 0.0 0.0 P0 -41 7 2 1 Cr-54 P0 0.0 0.0 P0 -0 7 2 2 H-1 P0 0.0 0.0 P0 -1 7 2 2 O-16 P0 0.0 0.0 P0 -2 7 2 2 B-10 P0 0.0 0.0 P0 -3 7 2 2 B-11 P0 0.0 0.0 P0 -4 7 2 2 Fe-54 P0 0.0 0.0 P0 -5 7 2 2 Fe-56 P0 0.0 0.0 P0 -6 7 2 2 Fe-57 P0 0.0 0.0 P0 -7 7 2 2 Fe-58 P0 0.0 0.0 P0 -8 7 2 2 Ni-58 P0 0.0 0.0 P0 -9 7 2 2 Ni-60 P0 0.0 0.0 P0 -10 7 2 2 Ni-61 P0 0.0 0.0 P0 -11 7 2 2 Ni-62 P0 0.0 0.0 P0 -12 7 2 2 Ni-64 P0 0.0 0.0 P0 -13 7 2 2 Mn-55 P0 0.0 0.0 P0 -14 7 2 2 Si-28 P0 0.0 0.0 P0 -15 7 2 2 Si-29 P0 0.0 0.0 P0 -16 7 2 2 Si-30 P0 0.0 0.0 P0 -17 7 2 2 Cr-50 P0 0.0 0.0 P0 -18 7 2 2 Cr-52 P0 0.0 0.0 P0 -19 7 2 2 Cr-53 P0 0.0 0.0 P0 -20 7 2 2 Cr-54 P0 0.0 0.0 P0 material group out nuclide mean std. dev. +20 7 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. +63 7 1 1 H-1 0.0 0.0 +64 7 1 1 O-16 0.0 0.0 +65 7 1 1 B-10 0.0 0.0 +66 7 1 1 B-11 0.0 0.0 +67 7 1 1 Fe-54 0.0 0.0 +68 7 1 1 Fe-56 0.0 0.0 +69 7 1 1 Fe-57 0.0 0.0 +70 7 1 1 Fe-58 0.0 0.0 +71 7 1 1 Ni-58 0.0 0.0 +72 7 1 1 Ni-60 0.0 0.0 +73 7 1 1 Ni-61 0.0 0.0 +74 7 1 1 Ni-62 0.0 0.0 +75 7 1 1 Ni-64 0.0 0.0 +76 7 1 1 Mn-55 0.0 0.0 +77 7 1 1 Si-28 0.0 0.0 +78 7 1 1 Si-29 0.0 0.0 +79 7 1 1 Si-30 0.0 0.0 +80 7 1 1 Cr-50 0.0 0.0 +81 7 1 1 Cr-52 0.0 0.0 +82 7 1 1 Cr-53 0.0 0.0 +83 7 1 1 Cr-54 0.0 0.0 +42 7 1 2 H-1 0.0 0.0 +43 7 1 2 O-16 0.0 0.0 +44 7 1 2 B-10 0.0 0.0 +45 7 1 2 B-11 0.0 0.0 +46 7 1 2 Fe-54 0.0 0.0 +47 7 1 2 Fe-56 0.0 0.0 +48 7 1 2 Fe-57 0.0 0.0 +49 7 1 2 Fe-58 0.0 0.0 +50 7 1 2 Ni-58 0.0 0.0 +51 7 1 2 Ni-60 0.0 0.0 +52 7 1 2 Ni-61 0.0 0.0 +53 7 1 2 Ni-62 0.0 0.0 +54 7 1 2 Ni-64 0.0 0.0 +55 7 1 2 Mn-55 0.0 0.0 +56 7 1 2 Si-28 0.0 0.0 +57 7 1 2 Si-29 0.0 0.0 +58 7 1 2 Si-30 0.0 0.0 +59 7 1 2 Cr-50 0.0 0.0 +60 7 1 2 Cr-52 0.0 0.0 +61 7 1 2 Cr-53 0.0 0.0 +62 7 1 2 Cr-54 0.0 0.0 +21 7 2 1 H-1 0.0 0.0 +22 7 2 1 O-16 0.0 0.0 +23 7 2 1 B-10 0.0 0.0 +24 7 2 1 B-11 0.0 0.0 +25 7 2 1 Fe-54 0.0 0.0 +26 7 2 1 Fe-56 0.0 0.0 +27 7 2 1 Fe-57 0.0 0.0 +28 7 2 1 Fe-58 0.0 0.0 +29 7 2 1 Ni-58 0.0 0.0 +30 7 2 1 Ni-60 0.0 0.0 +31 7 2 1 Ni-61 0.0 0.0 +32 7 2 1 Ni-62 0.0 0.0 +33 7 2 1 Ni-64 0.0 0.0 +34 7 2 1 Mn-55 0.0 0.0 +35 7 2 1 Si-28 0.0 0.0 +36 7 2 1 Si-29 0.0 0.0 +37 7 2 1 Si-30 0.0 0.0 +38 7 2 1 Cr-50 0.0 0.0 +39 7 2 1 Cr-52 0.0 0.0 +40 7 2 1 Cr-53 0.0 0.0 +41 7 2 1 Cr-54 0.0 0.0 +0 7 2 2 H-1 0.0 0.0 +1 7 2 2 O-16 0.0 0.0 +2 7 2 2 B-10 0.0 0.0 +3 7 2 2 B-11 0.0 0.0 +4 7 2 2 Fe-54 0.0 0.0 +5 7 2 2 Fe-56 0.0 0.0 +6 7 2 2 Fe-57 0.0 0.0 +7 7 2 2 Fe-58 0.0 0.0 +8 7 2 2 Ni-58 0.0 0.0 +9 7 2 2 Ni-60 0.0 0.0 +10 7 2 2 Ni-61 0.0 0.0 +11 7 2 2 Ni-62 0.0 0.0 +12 7 2 2 Ni-64 0.0 0.0 +13 7 2 2 Mn-55 0.0 0.0 +14 7 2 2 Si-28 0.0 0.0 +15 7 2 2 Si-29 0.0 0.0 +16 7 2 2 Si-30 0.0 0.0 +17 7 2 2 Cr-50 0.0 0.0 +18 7 2 2 Cr-52 0.0 0.0 +19 7 2 2 Cr-53 0.0 0.0 +20 7 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. 21 7 1 H-1 0.0 0.0 22 7 1 O-16 0.0 0.0 23 7 1 B-10 0.0 0.0 @@ -1242,91 +1242,91 @@ 17 8 2 Cr-50 0.0 0.0 18 8 2 Cr-52 0.0 0.0 19 8 2 Cr-53 0.0 0.0 -20 8 2 Cr-54 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -63 8 1 1 H-1 P0 0.0 0.0 P0 -64 8 1 1 O-16 P0 0.0 0.0 P0 -65 8 1 1 B-10 P0 0.0 0.0 P0 -66 8 1 1 B-11 P0 0.0 0.0 P0 -67 8 1 1 Fe-54 P0 0.0 0.0 P0 -68 8 1 1 Fe-56 P0 0.0 0.0 P0 -69 8 1 1 Fe-57 P0 0.0 0.0 P0 -70 8 1 1 Fe-58 P0 0.0 0.0 P0 -71 8 1 1 Ni-58 P0 0.0 0.0 P0 -72 8 1 1 Ni-60 P0 0.0 0.0 P0 -73 8 1 1 Ni-61 P0 0.0 0.0 P0 -74 8 1 1 Ni-62 P0 0.0 0.0 P0 -75 8 1 1 Ni-64 P0 0.0 0.0 P0 -76 8 1 1 Mn-55 P0 0.0 0.0 P0 -77 8 1 1 Si-28 P0 0.0 0.0 P0 -78 8 1 1 Si-29 P0 0.0 0.0 P0 -79 8 1 1 Si-30 P0 0.0 0.0 P0 -80 8 1 1 Cr-50 P0 0.0 0.0 P0 -81 8 1 1 Cr-52 P0 0.0 0.0 P0 -82 8 1 1 Cr-53 P0 0.0 0.0 P0 -83 8 1 1 Cr-54 P0 0.0 0.0 P0 -42 8 1 2 H-1 P0 0.0 0.0 P0 -43 8 1 2 O-16 P0 0.0 0.0 P0 -44 8 1 2 B-10 P0 0.0 0.0 P0 -45 8 1 2 B-11 P0 0.0 0.0 P0 -46 8 1 2 Fe-54 P0 0.0 0.0 P0 -47 8 1 2 Fe-56 P0 0.0 0.0 P0 -48 8 1 2 Fe-57 P0 0.0 0.0 P0 -49 8 1 2 Fe-58 P0 0.0 0.0 P0 -50 8 1 2 Ni-58 P0 0.0 0.0 P0 -51 8 1 2 Ni-60 P0 0.0 0.0 P0 -52 8 1 2 Ni-61 P0 0.0 0.0 P0 -53 8 1 2 Ni-62 P0 0.0 0.0 P0 -54 8 1 2 Ni-64 P0 0.0 0.0 P0 -55 8 1 2 Mn-55 P0 0.0 0.0 P0 -56 8 1 2 Si-28 P0 0.0 0.0 P0 -57 8 1 2 Si-29 P0 0.0 0.0 P0 -58 8 1 2 Si-30 P0 0.0 0.0 P0 -59 8 1 2 Cr-50 P0 0.0 0.0 P0 -60 8 1 2 Cr-52 P0 0.0 0.0 P0 -61 8 1 2 Cr-53 P0 0.0 0.0 P0 -62 8 1 2 Cr-54 P0 0.0 0.0 P0 -21 8 2 1 H-1 P0 0.0 0.0 P0 -22 8 2 1 O-16 P0 0.0 0.0 P0 -23 8 2 1 B-10 P0 0.0 0.0 P0 -24 8 2 1 B-11 P0 0.0 0.0 P0 -25 8 2 1 Fe-54 P0 0.0 0.0 P0 -26 8 2 1 Fe-56 P0 0.0 0.0 P0 -27 8 2 1 Fe-57 P0 0.0 0.0 P0 -28 8 2 1 Fe-58 P0 0.0 0.0 P0 -29 8 2 1 Ni-58 P0 0.0 0.0 P0 -30 8 2 1 Ni-60 P0 0.0 0.0 P0 -31 8 2 1 Ni-61 P0 0.0 0.0 P0 -32 8 2 1 Ni-62 P0 0.0 0.0 P0 -33 8 2 1 Ni-64 P0 0.0 0.0 P0 -34 8 2 1 Mn-55 P0 0.0 0.0 P0 -35 8 2 1 Si-28 P0 0.0 0.0 P0 -36 8 2 1 Si-29 P0 0.0 0.0 P0 -37 8 2 1 Si-30 P0 0.0 0.0 P0 -38 8 2 1 Cr-50 P0 0.0 0.0 P0 -39 8 2 1 Cr-52 P0 0.0 0.0 P0 -40 8 2 1 Cr-53 P0 0.0 0.0 P0 -41 8 2 1 Cr-54 P0 0.0 0.0 P0 -0 8 2 2 H-1 P0 0.0 0.0 P0 -1 8 2 2 O-16 P0 0.0 0.0 P0 -2 8 2 2 B-10 P0 0.0 0.0 P0 -3 8 2 2 B-11 P0 0.0 0.0 P0 -4 8 2 2 Fe-54 P0 0.0 0.0 P0 -5 8 2 2 Fe-56 P0 0.0 0.0 P0 -6 8 2 2 Fe-57 P0 0.0 0.0 P0 -7 8 2 2 Fe-58 P0 0.0 0.0 P0 -8 8 2 2 Ni-58 P0 0.0 0.0 P0 -9 8 2 2 Ni-60 P0 0.0 0.0 P0 -10 8 2 2 Ni-61 P0 0.0 0.0 P0 -11 8 2 2 Ni-62 P0 0.0 0.0 P0 -12 8 2 2 Ni-64 P0 0.0 0.0 P0 -13 8 2 2 Mn-55 P0 0.0 0.0 P0 -14 8 2 2 Si-28 P0 0.0 0.0 P0 -15 8 2 2 Si-29 P0 0.0 0.0 P0 -16 8 2 2 Si-30 P0 0.0 0.0 P0 -17 8 2 2 Cr-50 P0 0.0 0.0 P0 -18 8 2 2 Cr-52 P0 0.0 0.0 P0 -19 8 2 2 Cr-53 P0 0.0 0.0 P0 -20 8 2 2 Cr-54 P0 0.0 0.0 P0 material group out nuclide mean std. dev. +20 8 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. +63 8 1 1 H-1 0.0 0.0 +64 8 1 1 O-16 0.0 0.0 +65 8 1 1 B-10 0.0 0.0 +66 8 1 1 B-11 0.0 0.0 +67 8 1 1 Fe-54 0.0 0.0 +68 8 1 1 Fe-56 0.0 0.0 +69 8 1 1 Fe-57 0.0 0.0 +70 8 1 1 Fe-58 0.0 0.0 +71 8 1 1 Ni-58 0.0 0.0 +72 8 1 1 Ni-60 0.0 0.0 +73 8 1 1 Ni-61 0.0 0.0 +74 8 1 1 Ni-62 0.0 0.0 +75 8 1 1 Ni-64 0.0 0.0 +76 8 1 1 Mn-55 0.0 0.0 +77 8 1 1 Si-28 0.0 0.0 +78 8 1 1 Si-29 0.0 0.0 +79 8 1 1 Si-30 0.0 0.0 +80 8 1 1 Cr-50 0.0 0.0 +81 8 1 1 Cr-52 0.0 0.0 +82 8 1 1 Cr-53 0.0 0.0 +83 8 1 1 Cr-54 0.0 0.0 +42 8 1 2 H-1 0.0 0.0 +43 8 1 2 O-16 0.0 0.0 +44 8 1 2 B-10 0.0 0.0 +45 8 1 2 B-11 0.0 0.0 +46 8 1 2 Fe-54 0.0 0.0 +47 8 1 2 Fe-56 0.0 0.0 +48 8 1 2 Fe-57 0.0 0.0 +49 8 1 2 Fe-58 0.0 0.0 +50 8 1 2 Ni-58 0.0 0.0 +51 8 1 2 Ni-60 0.0 0.0 +52 8 1 2 Ni-61 0.0 0.0 +53 8 1 2 Ni-62 0.0 0.0 +54 8 1 2 Ni-64 0.0 0.0 +55 8 1 2 Mn-55 0.0 0.0 +56 8 1 2 Si-28 0.0 0.0 +57 8 1 2 Si-29 0.0 0.0 +58 8 1 2 Si-30 0.0 0.0 +59 8 1 2 Cr-50 0.0 0.0 +60 8 1 2 Cr-52 0.0 0.0 +61 8 1 2 Cr-53 0.0 0.0 +62 8 1 2 Cr-54 0.0 0.0 +21 8 2 1 H-1 0.0 0.0 +22 8 2 1 O-16 0.0 0.0 +23 8 2 1 B-10 0.0 0.0 +24 8 2 1 B-11 0.0 0.0 +25 8 2 1 Fe-54 0.0 0.0 +26 8 2 1 Fe-56 0.0 0.0 +27 8 2 1 Fe-57 0.0 0.0 +28 8 2 1 Fe-58 0.0 0.0 +29 8 2 1 Ni-58 0.0 0.0 +30 8 2 1 Ni-60 0.0 0.0 +31 8 2 1 Ni-61 0.0 0.0 +32 8 2 1 Ni-62 0.0 0.0 +33 8 2 1 Ni-64 0.0 0.0 +34 8 2 1 Mn-55 0.0 0.0 +35 8 2 1 Si-28 0.0 0.0 +36 8 2 1 Si-29 0.0 0.0 +37 8 2 1 Si-30 0.0 0.0 +38 8 2 1 Cr-50 0.0 0.0 +39 8 2 1 Cr-52 0.0 0.0 +40 8 2 1 Cr-53 0.0 0.0 +41 8 2 1 Cr-54 0.0 0.0 +0 8 2 2 H-1 0.0 0.0 +1 8 2 2 O-16 0.0 0.0 +2 8 2 2 B-10 0.0 0.0 +3 8 2 2 B-11 0.0 0.0 +4 8 2 2 Fe-54 0.0 0.0 +5 8 2 2 Fe-56 0.0 0.0 +6 8 2 2 Fe-57 0.0 0.0 +7 8 2 2 Fe-58 0.0 0.0 +8 8 2 2 Ni-58 0.0 0.0 +9 8 2 2 Ni-60 0.0 0.0 +10 8 2 2 Ni-61 0.0 0.0 +11 8 2 2 Ni-62 0.0 0.0 +12 8 2 2 Ni-64 0.0 0.0 +13 8 2 2 Mn-55 0.0 0.0 +14 8 2 2 Si-28 0.0 0.0 +15 8 2 2 Si-29 0.0 0.0 +16 8 2 2 Si-30 0.0 0.0 +17 8 2 2 Cr-50 0.0 0.0 +18 8 2 2 Cr-52 0.0 0.0 +19 8 2 2 Cr-53 0.0 0.0 +20 8 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. 21 8 1 H-1 0.0 0.0 22 8 1 O-16 0.0 0.0 23 8 1 B-10 0.0 0.0 @@ -1452,91 +1452,91 @@ 17 9 2 Cr-50 0.0 0.0 18 9 2 Cr-52 0.0 0.0 19 9 2 Cr-53 0.0 0.0 -20 9 2 Cr-54 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -63 9 1 1 H-1 P0 0.150655 0.480993 P0 -64 9 1 1 O-16 P0 0.116221 0.114089 P0 -65 9 1 1 B-10 P0 0.000000 0.000000 P0 -66 9 1 1 B-11 P0 0.000000 0.000000 P0 -67 9 1 1 Fe-54 P0 0.000000 0.000000 P0 -68 9 1 1 Fe-56 P0 0.186217 0.199795 P0 -69 9 1 1 Fe-57 P0 0.000000 0.000000 P0 -70 9 1 1 Fe-58 P0 0.000000 0.000000 P0 -71 9 1 1 Ni-58 P0 0.000000 0.000000 P0 -72 9 1 1 Ni-60 P0 0.000000 0.000000 P0 -73 9 1 1 Ni-61 P0 0.000000 0.000000 P0 -74 9 1 1 Ni-62 P0 0.000000 0.000000 P0 -75 9 1 1 Ni-64 P0 0.000000 0.000000 P0 -76 9 1 1 Mn-55 P0 0.000000 0.000000 P0 -77 9 1 1 Si-28 P0 0.000000 0.000000 P0 -78 9 1 1 Si-29 P0 0.000000 0.000000 P0 -79 9 1 1 Si-30 P0 0.000000 0.000000 P0 -80 9 1 1 Cr-50 P0 0.000000 0.000000 P0 -81 9 1 1 Cr-52 P0 0.000000 0.000000 P0 -82 9 1 1 Cr-53 P0 0.147443 0.139574 P0 -83 9 1 1 Cr-54 P0 0.000000 0.000000 P0 -42 9 1 2 H-1 P0 0.000000 0.000000 P0 -43 9 1 2 O-16 P0 0.000000 0.000000 P0 -44 9 1 2 B-10 P0 0.000000 0.000000 P0 -45 9 1 2 B-11 P0 0.000000 0.000000 P0 -46 9 1 2 Fe-54 P0 0.000000 0.000000 P0 -47 9 1 2 Fe-56 P0 0.000000 0.000000 P0 -48 9 1 2 Fe-57 P0 0.000000 0.000000 P0 -49 9 1 2 Fe-58 P0 0.000000 0.000000 P0 -50 9 1 2 Ni-58 P0 0.000000 0.000000 P0 -51 9 1 2 Ni-60 P0 0.000000 0.000000 P0 -52 9 1 2 Ni-61 P0 0.000000 0.000000 P0 -53 9 1 2 Ni-62 P0 0.000000 0.000000 P0 -54 9 1 2 Ni-64 P0 0.000000 0.000000 P0 -55 9 1 2 Mn-55 P0 0.000000 0.000000 P0 -56 9 1 2 Si-28 P0 0.000000 0.000000 P0 -57 9 1 2 Si-29 P0 0.000000 0.000000 P0 -58 9 1 2 Si-30 P0 0.000000 0.000000 P0 -59 9 1 2 Cr-50 P0 0.000000 0.000000 P0 -60 9 1 2 Cr-52 P0 0.000000 0.000000 P0 -61 9 1 2 Cr-53 P0 0.000000 0.000000 P0 -62 9 1 2 Cr-54 P0 0.000000 0.000000 P0 -21 9 2 1 H-1 P0 0.000000 0.000000 P0 -22 9 2 1 O-16 P0 0.000000 0.000000 P0 -23 9 2 1 B-10 P0 0.000000 0.000000 P0 -24 9 2 1 B-11 P0 0.000000 0.000000 P0 -25 9 2 1 Fe-54 P0 0.000000 0.000000 P0 -26 9 2 1 Fe-56 P0 0.000000 0.000000 P0 -27 9 2 1 Fe-57 P0 0.000000 0.000000 P0 -28 9 2 1 Fe-58 P0 0.000000 0.000000 P0 -29 9 2 1 Ni-58 P0 0.000000 0.000000 P0 -30 9 2 1 Ni-60 P0 0.000000 0.000000 P0 -31 9 2 1 Ni-61 P0 0.000000 0.000000 P0 -32 9 2 1 Ni-62 P0 0.000000 0.000000 P0 -33 9 2 1 Ni-64 P0 0.000000 0.000000 P0 -34 9 2 1 Mn-55 P0 0.000000 0.000000 P0 -35 9 2 1 Si-28 P0 0.000000 0.000000 P0 -36 9 2 1 Si-29 P0 0.000000 0.000000 P0 -37 9 2 1 Si-30 P0 0.000000 0.000000 P0 -38 9 2 1 Cr-50 P0 0.000000 0.000000 P0 -39 9 2 1 Cr-52 P0 0.000000 0.000000 P0 -40 9 2 1 Cr-53 P0 0.000000 0.000000 P0 -41 9 2 1 Cr-54 P0 0.000000 0.000000 P0 -0 9 2 2 H-1 P0 0.000000 0.000000 P0 -1 9 2 2 O-16 P0 0.000000 0.000000 P0 -2 9 2 2 B-10 P0 0.000000 0.000000 P0 -3 9 2 2 B-11 P0 0.000000 0.000000 P0 -4 9 2 2 Fe-54 P0 0.000000 0.000000 P0 -5 9 2 2 Fe-56 P0 0.000000 0.000000 P0 -6 9 2 2 Fe-57 P0 0.000000 0.000000 P0 -7 9 2 2 Fe-58 P0 0.000000 0.000000 P0 -8 9 2 2 Ni-58 P0 0.000000 0.000000 P0 -9 9 2 2 Ni-60 P0 0.000000 0.000000 P0 -10 9 2 2 Ni-61 P0 0.000000 0.000000 P0 -11 9 2 2 Ni-62 P0 0.000000 0.000000 P0 -12 9 2 2 Ni-64 P0 0.000000 0.000000 P0 -13 9 2 2 Mn-55 P0 0.000000 0.000000 P0 -14 9 2 2 Si-28 P0 0.000000 0.000000 P0 -15 9 2 2 Si-29 P0 0.000000 0.000000 P0 -16 9 2 2 Si-30 P0 0.000000 0.000000 P0 -17 9 2 2 Cr-50 P0 0.000000 0.000000 P0 -18 9 2 2 Cr-52 P0 0.000000 0.000000 P0 -19 9 2 2 Cr-53 P0 0.000000 0.000000 P0 -20 9 2 2 Cr-54 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. +20 9 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. +63 9 1 1 H-1 0.150655 0.480993 +64 9 1 1 O-16 0.116221 0.114089 +65 9 1 1 B-10 0.000000 0.000000 +66 9 1 1 B-11 0.000000 0.000000 +67 9 1 1 Fe-54 0.000000 0.000000 +68 9 1 1 Fe-56 0.186217 0.199795 +69 9 1 1 Fe-57 0.000000 0.000000 +70 9 1 1 Fe-58 0.000000 0.000000 +71 9 1 1 Ni-58 0.000000 0.000000 +72 9 1 1 Ni-60 0.000000 0.000000 +73 9 1 1 Ni-61 0.000000 0.000000 +74 9 1 1 Ni-62 0.000000 0.000000 +75 9 1 1 Ni-64 0.000000 0.000000 +76 9 1 1 Mn-55 0.000000 0.000000 +77 9 1 1 Si-28 0.000000 0.000000 +78 9 1 1 Si-29 0.000000 0.000000 +79 9 1 1 Si-30 0.000000 0.000000 +80 9 1 1 Cr-50 0.000000 0.000000 +81 9 1 1 Cr-52 0.000000 0.000000 +82 9 1 1 Cr-53 0.147443 0.139574 +83 9 1 1 Cr-54 0.000000 0.000000 +42 9 1 2 H-1 0.000000 0.000000 +43 9 1 2 O-16 0.000000 0.000000 +44 9 1 2 B-10 0.000000 0.000000 +45 9 1 2 B-11 0.000000 0.000000 +46 9 1 2 Fe-54 0.000000 0.000000 +47 9 1 2 Fe-56 0.000000 0.000000 +48 9 1 2 Fe-57 0.000000 0.000000 +49 9 1 2 Fe-58 0.000000 0.000000 +50 9 1 2 Ni-58 0.000000 0.000000 +51 9 1 2 Ni-60 0.000000 0.000000 +52 9 1 2 Ni-61 0.000000 0.000000 +53 9 1 2 Ni-62 0.000000 0.000000 +54 9 1 2 Ni-64 0.000000 0.000000 +55 9 1 2 Mn-55 0.000000 0.000000 +56 9 1 2 Si-28 0.000000 0.000000 +57 9 1 2 Si-29 0.000000 0.000000 +58 9 1 2 Si-30 0.000000 0.000000 +59 9 1 2 Cr-50 0.000000 0.000000 +60 9 1 2 Cr-52 0.000000 0.000000 +61 9 1 2 Cr-53 0.000000 0.000000 +62 9 1 2 Cr-54 0.000000 0.000000 +21 9 2 1 H-1 0.000000 0.000000 +22 9 2 1 O-16 0.000000 0.000000 +23 9 2 1 B-10 0.000000 0.000000 +24 9 2 1 B-11 0.000000 0.000000 +25 9 2 1 Fe-54 0.000000 0.000000 +26 9 2 1 Fe-56 0.000000 0.000000 +27 9 2 1 Fe-57 0.000000 0.000000 +28 9 2 1 Fe-58 0.000000 0.000000 +29 9 2 1 Ni-58 0.000000 0.000000 +30 9 2 1 Ni-60 0.000000 0.000000 +31 9 2 1 Ni-61 0.000000 0.000000 +32 9 2 1 Ni-62 0.000000 0.000000 +33 9 2 1 Ni-64 0.000000 0.000000 +34 9 2 1 Mn-55 0.000000 0.000000 +35 9 2 1 Si-28 0.000000 0.000000 +36 9 2 1 Si-29 0.000000 0.000000 +37 9 2 1 Si-30 0.000000 0.000000 +38 9 2 1 Cr-50 0.000000 0.000000 +39 9 2 1 Cr-52 0.000000 0.000000 +40 9 2 1 Cr-53 0.000000 0.000000 +41 9 2 1 Cr-54 0.000000 0.000000 +0 9 2 2 H-1 0.000000 0.000000 +1 9 2 2 O-16 0.000000 0.000000 +2 9 2 2 B-10 0.000000 0.000000 +3 9 2 2 B-11 0.000000 0.000000 +4 9 2 2 Fe-54 0.000000 0.000000 +5 9 2 2 Fe-56 0.000000 0.000000 +6 9 2 2 Fe-57 0.000000 0.000000 +7 9 2 2 Fe-58 0.000000 0.000000 +8 9 2 2 Ni-58 0.000000 0.000000 +9 9 2 2 Ni-60 0.000000 0.000000 +10 9 2 2 Ni-61 0.000000 0.000000 +11 9 2 2 Ni-62 0.000000 0.000000 +12 9 2 2 Ni-64 0.000000 0.000000 +13 9 2 2 Mn-55 0.000000 0.000000 +14 9 2 2 Si-28 0.000000 0.000000 +15 9 2 2 Si-29 0.000000 0.000000 +16 9 2 2 Si-30 0.000000 0.000000 +17 9 2 2 Cr-50 0.000000 0.000000 +18 9 2 2 Cr-52 0.000000 0.000000 +19 9 2 2 Cr-53 0.000000 0.000000 +20 9 2 2 Cr-54 0.000000 0.000000 material group out nuclide mean std. dev. 21 9 1 H-1 0.0 0.0 22 9 1 O-16 0.0 0.0 23 9 1 B-10 0.0 0.0 @@ -1662,91 +1662,91 @@ 17 10 2 Cr-50 0.0 0.0 18 10 2 Cr-52 0.0 0.0 19 10 2 Cr-53 0.0 0.0 -20 10 2 Cr-54 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -63 10 1 1 H-1 P0 0.123944 0.541390 P0 -64 10 1 1 O-16 P0 0.000000 0.000000 P0 -65 10 1 1 B-10 P0 0.000000 0.000000 P0 -66 10 1 1 B-11 P0 0.000000 0.000000 P0 -67 10 1 1 Fe-54 P0 0.000000 0.000000 P0 -68 10 1 1 Fe-56 P0 0.000000 0.000000 P0 -69 10 1 1 Fe-57 P0 0.000000 0.000000 P0 -70 10 1 1 Fe-58 P0 0.000000 0.000000 P0 -71 10 1 1 Ni-58 P0 0.000000 0.000000 P0 -72 10 1 1 Ni-60 P0 0.000000 0.000000 P0 -73 10 1 1 Ni-61 P0 0.000000 0.000000 P0 -74 10 1 1 Ni-62 P0 0.000000 0.000000 P0 -75 10 1 1 Ni-64 P0 0.000000 0.000000 P0 -76 10 1 1 Mn-55 P0 0.000000 0.000000 P0 -77 10 1 1 Si-28 P0 0.000000 0.000000 P0 -78 10 1 1 Si-29 P0 0.000000 0.000000 P0 -79 10 1 1 Si-30 P0 0.000000 0.000000 P0 -80 10 1 1 Cr-50 P0 0.111571 0.138458 P0 -81 10 1 1 Cr-52 P0 0.000000 0.000000 P0 -82 10 1 1 Cr-53 P0 0.000000 0.000000 P0 -83 10 1 1 Cr-54 P0 0.000000 0.000000 P0 -42 10 1 2 H-1 P0 0.000000 0.000000 P0 -43 10 1 2 O-16 P0 0.000000 0.000000 P0 -44 10 1 2 B-10 P0 0.000000 0.000000 P0 -45 10 1 2 B-11 P0 0.000000 0.000000 P0 -46 10 1 2 Fe-54 P0 0.000000 0.000000 P0 -47 10 1 2 Fe-56 P0 0.000000 0.000000 P0 -48 10 1 2 Fe-57 P0 0.000000 0.000000 P0 -49 10 1 2 Fe-58 P0 0.000000 0.000000 P0 -50 10 1 2 Ni-58 P0 0.000000 0.000000 P0 -51 10 1 2 Ni-60 P0 0.000000 0.000000 P0 -52 10 1 2 Ni-61 P0 0.000000 0.000000 P0 -53 10 1 2 Ni-62 P0 0.000000 0.000000 P0 -54 10 1 2 Ni-64 P0 0.000000 0.000000 P0 -55 10 1 2 Mn-55 P0 0.000000 0.000000 P0 -56 10 1 2 Si-28 P0 0.000000 0.000000 P0 -57 10 1 2 Si-29 P0 0.000000 0.000000 P0 -58 10 1 2 Si-30 P0 0.000000 0.000000 P0 -59 10 1 2 Cr-50 P0 0.000000 0.000000 P0 -60 10 1 2 Cr-52 P0 0.000000 0.000000 P0 -61 10 1 2 Cr-53 P0 0.000000 0.000000 P0 -62 10 1 2 Cr-54 P0 0.000000 0.000000 P0 -21 10 2 1 H-1 P0 0.000000 0.000000 P0 -22 10 2 1 O-16 P0 0.000000 0.000000 P0 -23 10 2 1 B-10 P0 0.000000 0.000000 P0 -24 10 2 1 B-11 P0 0.000000 0.000000 P0 -25 10 2 1 Fe-54 P0 0.000000 0.000000 P0 -26 10 2 1 Fe-56 P0 0.000000 0.000000 P0 -27 10 2 1 Fe-57 P0 0.000000 0.000000 P0 -28 10 2 1 Fe-58 P0 0.000000 0.000000 P0 -29 10 2 1 Ni-58 P0 0.000000 0.000000 P0 -30 10 2 1 Ni-60 P0 0.000000 0.000000 P0 -31 10 2 1 Ni-61 P0 0.000000 0.000000 P0 -32 10 2 1 Ni-62 P0 0.000000 0.000000 P0 -33 10 2 1 Ni-64 P0 0.000000 0.000000 P0 -34 10 2 1 Mn-55 P0 0.000000 0.000000 P0 -35 10 2 1 Si-28 P0 0.000000 0.000000 P0 -36 10 2 1 Si-29 P0 0.000000 0.000000 P0 -37 10 2 1 Si-30 P0 0.000000 0.000000 P0 -38 10 2 1 Cr-50 P0 0.000000 0.000000 P0 -39 10 2 1 Cr-52 P0 0.000000 0.000000 P0 -40 10 2 1 Cr-53 P0 0.000000 0.000000 P0 -41 10 2 1 Cr-54 P0 0.000000 0.000000 P0 -0 10 2 2 H-1 P0 0.000000 0.000000 P0 -1 10 2 2 O-16 P0 0.000000 0.000000 P0 -2 10 2 2 B-10 P0 0.000000 0.000000 P0 -3 10 2 2 B-11 P0 0.000000 0.000000 P0 -4 10 2 2 Fe-54 P0 0.000000 0.000000 P0 -5 10 2 2 Fe-56 P0 0.000000 0.000000 P0 -6 10 2 2 Fe-57 P0 0.000000 0.000000 P0 -7 10 2 2 Fe-58 P0 0.000000 0.000000 P0 -8 10 2 2 Ni-58 P0 0.000000 0.000000 P0 -9 10 2 2 Ni-60 P0 0.000000 0.000000 P0 -10 10 2 2 Ni-61 P0 0.000000 0.000000 P0 -11 10 2 2 Ni-62 P0 0.000000 0.000000 P0 -12 10 2 2 Ni-64 P0 0.000000 0.000000 P0 -13 10 2 2 Mn-55 P0 0.000000 0.000000 P0 -14 10 2 2 Si-28 P0 0.000000 0.000000 P0 -15 10 2 2 Si-29 P0 0.000000 0.000000 P0 -16 10 2 2 Si-30 P0 0.000000 0.000000 P0 -17 10 2 2 Cr-50 P0 0.000000 0.000000 P0 -18 10 2 2 Cr-52 P0 0.000000 0.000000 P0 -19 10 2 2 Cr-53 P0 0.000000 0.000000 P0 -20 10 2 2 Cr-54 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. +20 10 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. +63 10 1 1 H-1 0.123944 0.541390 +64 10 1 1 O-16 0.000000 0.000000 +65 10 1 1 B-10 0.000000 0.000000 +66 10 1 1 B-11 0.000000 0.000000 +67 10 1 1 Fe-54 0.000000 0.000000 +68 10 1 1 Fe-56 0.000000 0.000000 +69 10 1 1 Fe-57 0.000000 0.000000 +70 10 1 1 Fe-58 0.000000 0.000000 +71 10 1 1 Ni-58 0.000000 0.000000 +72 10 1 1 Ni-60 0.000000 0.000000 +73 10 1 1 Ni-61 0.000000 0.000000 +74 10 1 1 Ni-62 0.000000 0.000000 +75 10 1 1 Ni-64 0.000000 0.000000 +76 10 1 1 Mn-55 0.000000 0.000000 +77 10 1 1 Si-28 0.000000 0.000000 +78 10 1 1 Si-29 0.000000 0.000000 +79 10 1 1 Si-30 0.000000 0.000000 +80 10 1 1 Cr-50 0.111571 0.138458 +81 10 1 1 Cr-52 0.000000 0.000000 +82 10 1 1 Cr-53 0.000000 0.000000 +83 10 1 1 Cr-54 0.000000 0.000000 +42 10 1 2 H-1 0.000000 0.000000 +43 10 1 2 O-16 0.000000 0.000000 +44 10 1 2 B-10 0.000000 0.000000 +45 10 1 2 B-11 0.000000 0.000000 +46 10 1 2 Fe-54 0.000000 0.000000 +47 10 1 2 Fe-56 0.000000 0.000000 +48 10 1 2 Fe-57 0.000000 0.000000 +49 10 1 2 Fe-58 0.000000 0.000000 +50 10 1 2 Ni-58 0.000000 0.000000 +51 10 1 2 Ni-60 0.000000 0.000000 +52 10 1 2 Ni-61 0.000000 0.000000 +53 10 1 2 Ni-62 0.000000 0.000000 +54 10 1 2 Ni-64 0.000000 0.000000 +55 10 1 2 Mn-55 0.000000 0.000000 +56 10 1 2 Si-28 0.000000 0.000000 +57 10 1 2 Si-29 0.000000 0.000000 +58 10 1 2 Si-30 0.000000 0.000000 +59 10 1 2 Cr-50 0.000000 0.000000 +60 10 1 2 Cr-52 0.000000 0.000000 +61 10 1 2 Cr-53 0.000000 0.000000 +62 10 1 2 Cr-54 0.000000 0.000000 +21 10 2 1 H-1 0.000000 0.000000 +22 10 2 1 O-16 0.000000 0.000000 +23 10 2 1 B-10 0.000000 0.000000 +24 10 2 1 B-11 0.000000 0.000000 +25 10 2 1 Fe-54 0.000000 0.000000 +26 10 2 1 Fe-56 0.000000 0.000000 +27 10 2 1 Fe-57 0.000000 0.000000 +28 10 2 1 Fe-58 0.000000 0.000000 +29 10 2 1 Ni-58 0.000000 0.000000 +30 10 2 1 Ni-60 0.000000 0.000000 +31 10 2 1 Ni-61 0.000000 0.000000 +32 10 2 1 Ni-62 0.000000 0.000000 +33 10 2 1 Ni-64 0.000000 0.000000 +34 10 2 1 Mn-55 0.000000 0.000000 +35 10 2 1 Si-28 0.000000 0.000000 +36 10 2 1 Si-29 0.000000 0.000000 +37 10 2 1 Si-30 0.000000 0.000000 +38 10 2 1 Cr-50 0.000000 0.000000 +39 10 2 1 Cr-52 0.000000 0.000000 +40 10 2 1 Cr-53 0.000000 0.000000 +41 10 2 1 Cr-54 0.000000 0.000000 +0 10 2 2 H-1 0.000000 0.000000 +1 10 2 2 O-16 0.000000 0.000000 +2 10 2 2 B-10 0.000000 0.000000 +3 10 2 2 B-11 0.000000 0.000000 +4 10 2 2 Fe-54 0.000000 0.000000 +5 10 2 2 Fe-56 0.000000 0.000000 +6 10 2 2 Fe-57 0.000000 0.000000 +7 10 2 2 Fe-58 0.000000 0.000000 +8 10 2 2 Ni-58 0.000000 0.000000 +9 10 2 2 Ni-60 0.000000 0.000000 +10 10 2 2 Ni-61 0.000000 0.000000 +11 10 2 2 Ni-62 0.000000 0.000000 +12 10 2 2 Ni-64 0.000000 0.000000 +13 10 2 2 Mn-55 0.000000 0.000000 +14 10 2 2 Si-28 0.000000 0.000000 +15 10 2 2 Si-29 0.000000 0.000000 +16 10 2 2 Si-30 0.000000 0.000000 +17 10 2 2 Cr-50 0.000000 0.000000 +18 10 2 2 Cr-52 0.000000 0.000000 +19 10 2 2 Cr-53 0.000000 0.000000 +20 10 2 2 Cr-54 0.000000 0.000000 material group out nuclide mean std. dev. 21 10 1 H-1 0.0 0.0 22 10 1 O-16 0.0 0.0 23 10 1 B-10 0.0 0.0 @@ -1824,43 +1824,43 @@ 5 11 2 Zr-91 0.0 0.0 6 11 2 Zr-92 0.0 0.0 7 11 2 Zr-94 0.0 0.0 -8 11 2 Zr-96 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -27 11 1 1 H-1 P0 0.099594 0.442578 P0 -28 11 1 1 O-16 P0 0.028684 0.043000 P0 -29 11 1 1 B-10 P0 0.000000 0.000000 P0 -30 11 1 1 B-11 P0 0.000000 0.000000 P0 -31 11 1 1 Zr-90 P0 0.021980 0.039963 P0 -32 11 1 1 Zr-91 P0 0.000000 0.000000 P0 -33 11 1 1 Zr-92 P0 0.000000 0.000000 P0 -34 11 1 1 Zr-94 P0 0.004191 0.087344 P0 -35 11 1 1 Zr-96 P0 0.000000 0.000000 P0 -18 11 1 2 H-1 P0 0.031875 0.045078 P0 -19 11 1 2 O-16 P0 0.000000 0.000000 P0 -20 11 1 2 B-10 P0 0.000000 0.000000 P0 -21 11 1 2 B-11 P0 0.000000 0.000000 P0 -22 11 1 2 Zr-90 P0 0.000000 0.000000 P0 -23 11 1 2 Zr-91 P0 0.000000 0.000000 P0 -24 11 1 2 Zr-92 P0 0.000000 0.000000 P0 -25 11 1 2 Zr-94 P0 0.000000 0.000000 P0 -26 11 1 2 Zr-96 P0 0.000000 0.000000 P0 -9 11 2 1 H-1 P0 0.000000 0.000000 P0 -10 11 2 1 O-16 P0 0.000000 0.000000 P0 -11 11 2 1 B-10 P0 0.000000 0.000000 P0 -12 11 2 1 B-11 P0 0.000000 0.000000 P0 -13 11 2 1 Zr-90 P0 0.000000 0.000000 P0 -14 11 2 1 Zr-91 P0 0.000000 0.000000 P0 -15 11 2 1 Zr-92 P0 0.000000 0.000000 P0 -16 11 2 1 Zr-94 P0 0.000000 0.000000 P0 -17 11 2 1 Zr-96 P0 0.000000 0.000000 P0 -0 11 2 2 H-1 P0 0.687243 1.239217 P0 -1 11 2 2 O-16 P0 0.000000 0.000000 P0 -2 11 2 2 B-10 P0 0.000000 0.000000 P0 -3 11 2 2 B-11 P0 0.000000 0.000000 P0 -4 11 2 2 Zr-90 P0 0.039576 0.105193 P0 -5 11 2 2 Zr-91 P0 0.000000 0.000000 P0 -6 11 2 2 Zr-92 P0 0.084226 0.103161 P0 -7 11 2 2 Zr-94 P0 0.092039 0.125985 P0 -8 11 2 2 Zr-96 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. +8 11 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. +27 11 1 1 H-1 0.099594 0.442578 +28 11 1 1 O-16 0.028684 0.043000 +29 11 1 1 B-10 0.000000 0.000000 +30 11 1 1 B-11 0.000000 0.000000 +31 11 1 1 Zr-90 0.021980 0.039963 +32 11 1 1 Zr-91 0.000000 0.000000 +33 11 1 1 Zr-92 0.000000 0.000000 +34 11 1 1 Zr-94 0.004191 0.087344 +35 11 1 1 Zr-96 0.000000 0.000000 +18 11 1 2 H-1 0.031875 0.045078 +19 11 1 2 O-16 0.000000 0.000000 +20 11 1 2 B-10 0.000000 0.000000 +21 11 1 2 B-11 0.000000 0.000000 +22 11 1 2 Zr-90 0.000000 0.000000 +23 11 1 2 Zr-91 0.000000 0.000000 +24 11 1 2 Zr-92 0.000000 0.000000 +25 11 1 2 Zr-94 0.000000 0.000000 +26 11 1 2 Zr-96 0.000000 0.000000 +9 11 2 1 H-1 0.000000 0.000000 +10 11 2 1 O-16 0.000000 0.000000 +11 11 2 1 B-10 0.000000 0.000000 +12 11 2 1 B-11 0.000000 0.000000 +13 11 2 1 Zr-90 0.000000 0.000000 +14 11 2 1 Zr-91 0.000000 0.000000 +15 11 2 1 Zr-92 0.000000 0.000000 +16 11 2 1 Zr-94 0.000000 0.000000 +17 11 2 1 Zr-96 0.000000 0.000000 +0 11 2 2 H-1 0.687243 1.239217 +1 11 2 2 O-16 0.000000 0.000000 +2 11 2 2 B-10 0.000000 0.000000 +3 11 2 2 B-11 0.000000 0.000000 +4 11 2 2 Zr-90 0.039576 0.105193 +5 11 2 2 Zr-91 0.000000 0.000000 +6 11 2 2 Zr-92 0.084226 0.103161 +7 11 2 2 Zr-94 0.092039 0.125985 +8 11 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. 9 11 1 H-1 0.0 0.0 10 11 1 O-16 0.0 0.0 11 11 1 B-10 0.0 0.0 @@ -1914,43 +1914,43 @@ 5 12 2 Zr-91 0.0 0.0 6 12 2 Zr-92 0.0 0.0 7 12 2 Zr-94 0.0 0.0 -8 12 2 Zr-96 0.0 0.0 material group in group out nuclide moment mean std. dev. moment -27 12 1 1 H-1 P0 0.071704 0.167588 P0 -28 12 1 1 O-16 P0 0.013270 0.020403 P0 -29 12 1 1 B-10 P0 0.000000 0.000000 P0 -30 12 1 1 B-11 P0 0.000000 0.000000 P0 -31 12 1 1 Zr-90 P0 0.089997 0.075538 P0 -32 12 1 1 Zr-91 P0 0.000000 0.000000 P0 -33 12 1 1 Zr-92 P0 0.003501 0.017031 P0 -34 12 1 1 Zr-94 P0 0.004850 0.016327 P0 -35 12 1 1 Zr-96 P0 0.002730 0.017476 P0 -18 12 1 2 H-1 P0 0.027240 0.029555 P0 -19 12 1 2 O-16 P0 0.000000 0.000000 P0 -20 12 1 2 B-10 P0 0.000000 0.000000 P0 -21 12 1 2 B-11 P0 0.000000 0.000000 P0 -22 12 1 2 Zr-90 P0 0.000000 0.000000 P0 -23 12 1 2 Zr-91 P0 0.000000 0.000000 P0 -24 12 1 2 Zr-92 P0 0.000000 0.000000 P0 -25 12 1 2 Zr-94 P0 0.000000 0.000000 P0 -26 12 1 2 Zr-96 P0 0.000000 0.000000 P0 -9 12 2 1 H-1 P0 0.000000 0.000000 P0 -10 12 2 1 O-16 P0 0.000000 0.000000 P0 -11 12 2 1 B-10 P0 0.000000 0.000000 P0 -12 12 2 1 B-11 P0 0.000000 0.000000 P0 -13 12 2 1 Zr-90 P0 0.000000 0.000000 P0 -14 12 2 1 Zr-91 P0 0.000000 0.000000 P0 -15 12 2 1 Zr-92 P0 0.000000 0.000000 P0 -16 12 2 1 Zr-94 P0 0.000000 0.000000 P0 -17 12 2 1 Zr-96 P0 0.000000 0.000000 P0 -0 12 2 2 H-1 P0 1.244758 1.956675 P0 -1 12 2 2 O-16 P0 0.079159 0.104796 P0 -2 12 2 2 B-10 P0 0.000000 0.000000 P0 -3 12 2 2 B-11 P0 0.000000 0.000000 P0 -4 12 2 2 Zr-90 P0 0.000000 0.000000 P0 -5 12 2 2 Zr-91 P0 0.033201 0.040665 P0 -6 12 2 2 Zr-92 P0 0.000000 0.000000 P0 -7 12 2 2 Zr-94 P0 0.000000 0.000000 P0 -8 12 2 2 Zr-96 P0 0.000000 0.000000 P0 material group out nuclide mean std. dev. +8 12 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. +27 12 1 1 H-1 0.071704 0.167588 +28 12 1 1 O-16 0.013270 0.020403 +29 12 1 1 B-10 0.000000 0.000000 +30 12 1 1 B-11 0.000000 0.000000 +31 12 1 1 Zr-90 0.089997 0.075538 +32 12 1 1 Zr-91 0.000000 0.000000 +33 12 1 1 Zr-92 0.003501 0.017031 +34 12 1 1 Zr-94 0.004850 0.016327 +35 12 1 1 Zr-96 0.002730 0.017476 +18 12 1 2 H-1 0.027240 0.029555 +19 12 1 2 O-16 0.000000 0.000000 +20 12 1 2 B-10 0.000000 0.000000 +21 12 1 2 B-11 0.000000 0.000000 +22 12 1 2 Zr-90 0.000000 0.000000 +23 12 1 2 Zr-91 0.000000 0.000000 +24 12 1 2 Zr-92 0.000000 0.000000 +25 12 1 2 Zr-94 0.000000 0.000000 +26 12 1 2 Zr-96 0.000000 0.000000 +9 12 2 1 H-1 0.000000 0.000000 +10 12 2 1 O-16 0.000000 0.000000 +11 12 2 1 B-10 0.000000 0.000000 +12 12 2 1 B-11 0.000000 0.000000 +13 12 2 1 Zr-90 0.000000 0.000000 +14 12 2 1 Zr-91 0.000000 0.000000 +15 12 2 1 Zr-92 0.000000 0.000000 +16 12 2 1 Zr-94 0.000000 0.000000 +17 12 2 1 Zr-96 0.000000 0.000000 +0 12 2 2 H-1 1.244758 1.956675 +1 12 2 2 O-16 0.079159 0.104796 +2 12 2 2 B-10 0.000000 0.000000 +3 12 2 2 B-11 0.000000 0.000000 +4 12 2 2 Zr-90 0.000000 0.000000 +5 12 2 2 Zr-91 0.033201 0.040665 +6 12 2 2 Zr-92 0.000000 0.000000 +7 12 2 2 Zr-94 0.000000 0.000000 +8 12 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. 9 12 1 H-1 0.0 0.0 10 12 1 O-16 0.0 0.0 11 12 1 B-10 0.0 0.0 From 47ef320ad517612376e181ec6a6bc42ca0db98ce Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Fri, 13 May 2016 10:20:16 -0400 Subject: [PATCH 533/650] Made MGXS.domain set MGXS.domain_type to reduce burden on user --- .../pythonapi/examples/mgxs-part-i.ipynb | 34 +- .../pythonapi/examples/mgxs-part-ii.ipynb | 37 +- .../pythonapi/examples/mgxs-part-iii.ipynb | 506 ++++-------------- openmc/mgxs/mgxs.py | 9 + 4 files changed, 135 insertions(+), 451 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index 2d44d95cdb..ea75bec722 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -396,9 +396,9 @@ "outputs": [], "source": [ "# Instantiate a few different sections\n", - "total = mgxs.TotalXS(domain=cell, domain_type='cell', groups=groups)\n", - "absorption = mgxs.AbsorptionXS(domain=cell, domain_type='cell', groups=groups)\n", - "scattering = mgxs.ScatterXS(domain=cell, domain_type='cell', groups=groups)" + "total = mgxs.TotalXS(domain=cell, groups=groups)\n", + "absorption = mgxs.AbsorptionXS(domain=cell, groups=groups)\n", + "scattering = mgxs.ScatterXS(domain=cell, groups=groups)" ] }, { @@ -514,7 +514,7 @@ " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", " Git SHA1: 19feb55e6d5e8350398627f39fb55ee8e2e63011\n", - " Date/Time: 2016-05-13 09:02:04\n", + " Date/Time: 2016-05-13 10:19:16\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -600,20 +600,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.2500E-01 seconds\n", - " Reading cross sections = 8.5000E-02 seconds\n", - " Total time in simulation = 1.6642E+01 seconds\n", - " Time in transport only = 1.6628E+01 seconds\n", - " Time in inactive batches = 1.9160E+00 seconds\n", - " Time in active batches = 1.4726E+01 seconds\n", - " Time synchronizing fission bank = 4.0000E-03 seconds\n", - " Sampling source sites = 2.0000E-03 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for initialization = 4.2300E-01 seconds\n", + " Reading cross sections = 9.3000E-02 seconds\n", + " Total time in simulation = 1.6549E+01 seconds\n", + " Time in transport only = 1.6535E+01 seconds\n", + " Time in inactive batches = 2.3650E+00 seconds\n", + " Time in active batches = 1.4184E+01 seconds\n", + " Time synchronizing fission bank = 5.0000E-03 seconds\n", + " Sampling source sites = 3.0000E-03 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.7076E+01 seconds\n", - " Calculation Rate (inactive) = 13048.0 neutrons/second\n", - " Calculation Rate (active) = 6790.71 neutrons/second\n", + " Total time elapsed = 1.6981E+01 seconds\n", + " Calculation Rate (inactive) = 10570.8 neutrons/second\n", + " Calculation Rate (active) = 7050.20 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index d57f2a1f32..b882e949c5 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -396,9 +396,8 @@ "for cell in openmc_cells:\n", " for rxn_type in xs_library[cell.id]:\n", "\n", - " # Set the cross sections domain type to the cell\n", + " # Set the cross sections domain to the cell\n", " xs_library[cell.id][rxn_type].domain = cell\n", - " xs_library[cell.id][rxn_type].domain_type = 'cell'\n", " \n", " # Tally cross sections by nuclide\n", " xs_library[cell.id][rxn_type].by_nuclide = True\n", @@ -446,7 +445,7 @@ " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", " Git SHA1: 19feb55e6d5e8350398627f39fb55ee8e2e63011\n", - " Date/Time: 2016-05-13 10:04:37\n", + " Date/Time: 2016-05-13 10:13:48\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -562,20 +561,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.9300E-01 seconds\n", - " Reading cross sections = 1.0800E-01 seconds\n", - " Total time in simulation = 2.2830E+02 seconds\n", - " Time in transport only = 2.2826E+02 seconds\n", - " Time in inactive batches = 1.5534E+01 seconds\n", - " Time in active batches = 2.1277E+02 seconds\n", - " Time synchronizing fission bank = 1.8000E-02 seconds\n", - " Sampling source sites = 1.3000E-02 seconds\n", - " SEND/RECV source sites = 4.0000E-03 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", - " Total time for finalization = 1.1000E-02 seconds\n", - " Total time elapsed = 2.2887E+02 seconds\n", - " Calculation Rate (inactive) = 6437.49 neutrons/second\n", - " Calculation Rate (active) = 1879.96 neutrons/second\n", + " Total time for initialization = 5.7400E-01 seconds\n", + " Reading cross sections = 1.2600E-01 seconds\n", + " Total time in simulation = 2.6256E+02 seconds\n", + " Time in transport only = 2.6250E+02 seconds\n", + " Time in inactive batches = 2.2890E+01 seconds\n", + " Time in active batches = 2.3967E+02 seconds\n", + " Time synchronizing fission bank = 3.4000E-02 seconds\n", + " Sampling source sites = 2.1000E-02 seconds\n", + " SEND/RECV source sites = 1.3000E-02 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", + " Total time for finalization = 1.3000E-02 seconds\n", + " Total time elapsed = 2.6320E+02 seconds\n", + " Calculation Rate (inactive) = 4368.72 neutrons/second\n", + " Calculation Rate (active) = 1668.93 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1783,7 +1782,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1866,7 +1865,7 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAADUCAYAAACWNDiHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGXJJREFUeJzt3Xm0HFW59/HvAUEmgTDPQgAfkNcLIoogMYREBkUQ1Jfx\nhsj0iiBXERmuKOEiAgoBFZTBdUH0vQyiUbyARqKEIKAMIiL4Y7ohhkQkRAhh0iTn/rF3Q6c9Q59Q\n1UOd32etrNVdXbXr6ZOnntq1q7qqp7e3FzMzq55l2h2AmZmVwwXezKyiXODNzCrKBd7MrKJc4M3M\nKsoF3sysot7U7gDKFBG9wMaSZtVNmwAcKmlcP8tsCVwLzOtvnjzf8cBRwHLA8sB04DhJLyxlrHsA\nD0uaGRHrAjtKumGIbRwHrCvpi0sTQx/tzQDmStqhYfppwJnAZpJmDNLGUZIu7+ezqcDnJd1XRLxV\nFhE9wPHAkaScWwb4FXCapGcGWObzwFnAGEm31322C3AJsCLwJGmbmN1HGwcBJwIr5/X+AfhUX/M2\n+T12BF6W9EBEvBk4QNJVQ2xjP+DDkg5fmhj6aO9WYCtgQ0mL6qYfCnyP9Le7dZA2Bsrzq4AfSPpp\nEfEOhXvwdSJiK2AycOcg8+0JHAPsKmkr4O2kDeBrb2D1nwU2ya/HAPsMZeGIWEbSRUUV9zrr5J1e\nvY8AfRaVhpjWA07q57MeSWNd3Jt2FnAIsFddzj0H3BoRK/azzKWknHq6fmJErApcBxwpaXPg58BB\njQtHxNuBC4GP5nW+DZgB/Ocb+B6fAP4lv34nMH4oC+c8n1xUca/zd2C3hmkHAn9uIqZl6Wfbz/GO\nb0dxh4r34JfCAmBXYG8gBpjvHcBjkp4FkPRKRBwOLAaIiLWAK4BtcpsnSpqSe+bfBTYF3gx8U9Kk\niDgTGAtsHRHfIvW63hQRq0g6MCL2Bb5M2ok8BhwsaW5ETAQ2ALYDrskb7kaSjsy9khuA/YHNSEcY\nB0nqzUcx55A2/AuAKyT19PNdbyZt/P+Rv9v/IRWWtWozRMQ+wFdIRzIvAEdIuh+4A9goIv5E2qgf\nAb5D2qh3zzEeCuwIjJa0T25vCvATSRcP8H8wbETEGsBngO1qR6OSFgInR8RY4F+By/pY9NuSfhcR\nezdM3xe4T9Jdua1z+1n1NsDTtaM0SYsi4lRghRzXiqSdyCjgFeAsSd+PiJVI+b8dKSd+KOnEiPgk\n6f9+n4jYMH+nVSNiuqRREfE+0g5lBDCXlOdP5Hz9MLAacH9EPEg+Co+IK0lHIDuTdkCPAPtKeikf\nFX+HtA1eQCrC2/Zz1FnL81/k7zYCGAk8UZshInYCLiJth4uB4yXdkpdZLef5Xvm7Twc+BhwZEWfl\nOF4GTgPeJWlxRFwGPC/p8/38/d8w9+DrSJolaW4Ts95CKlDfjYi9IuItkuZLWpA/Pwd4SNJI4DDg\n6nw4+kVgVu4NjQXOjoiNc6/7KeCQvLFdBFyfi/tI0mHiQbm9X5EOrWs+BHxQ0qQ+4vww8AFS4o8B\nds7F4lvAOFIPao9BvusPSD2ZmgPzNAAi4k2kndYnJb0N+AlwXv74cGCmpK0k/T1P21jS2xo2sguB\nDSNi97wzewvw7UHiGk7eS/o7PtLHZz8FRve1kKTf9dPetsDciJgcEY9ExDW5U9Lo18AmEXFDROwX\nEWtIelnS3/LnnwOWl7QZKc8uiogNgE+RivTWwPbAhIjYRdIlwG+Bk3KenwrcmYv7W/J3+XdJWwBf\nJx1l1OwOHCPpxD7i/DhwALA5sDawX+5Vfxc4WtLWwJbAKv38PQD+G9gzb6cAHyXlcr3LgQvy9nsO\nr2+HhwOLcp7/T562A7CNpF/XFpb0Q2Amqei/k3TEcPoAMb1hw6HA3xoRf6r9A85+ow3mDed9pL/f\nd4Fn88ZSG2L5IHB13bybSnqVNIZ6bJ7+BPAXUu96IHsCt0p6ML+/hNQDWja//80AO6Xr8wb5Iqln\nswmpt/yIpAclLWbwQvoY8GJEbJfffxT4Yd3fYiGwQd347nRSz6c/NzZOyOOeRwHnkzaco3JslqxB\n/0NiT+fPh2J1UsH8PKmX/ippJ7uEPM7+HmAO8A3gmYi4JSJqQywfBK7J884iHT3OJv0/7itpcd4Z\n/JGBcwLSUcAsSb/I7V0NbFG3TT0q6dF+lr1R0ryci38g5fnbgDdLujnP800GrncvkHZoe+X3B5LO\nxdXbnrxdM3ie39xPDh8LnEza7o6V9NIAbbxhw2GIZte+TrLm11eREhhgrKSnmm1U0j3Av+YTWduT\nTjpeC+xEGr54rm7e2onXHUi99k2ARcD6DL6TXR14f9451TwPrJlfzxtg2efrXi8CliX1rOqXaeY7\nXw0cnHvrM/PwUP3nn4qIw0jDTisAA93gqM94Jd0XEfNJPaEH+5pnGJtLGorry7rAXyPiPUDtZOVk\nSacO0N7zwFRJjwFExNeBn/U1Yz5q+H95vq2BU4CbI2Jj/jnPa0ewWwCT8jmtRcDGpGGLgawObN6Q\n56+SeuSwdHn+t7rpzZwUruX5ncD6ku5vyPMDgePz0cayQH/Dmv3GK2lWRNxF6iD+oomY3pDhUOD7\nJWlIJ3hq8ljhk3lIpxe4NyJO5vWTs3NJyT8jz78pqZB+nzQWeEkeC2+muM4GbpH0sT7iWJrw57Pk\noer6TSxzLXAradzxmoYYdib1SN4jaUZEfIB0KDskEfEhYCGwQkR8UNJNQ22jwu4E1oiIbSX9vuGz\nvUnncn5LuhKkGU+ShixqFuV/S8hHbS9LEoCkhyNdqTWfdNRQy/Pa/BuRCtvFwL3AR/K4/a8b2+7D\nbNJVZDs0fhAR72jye9VrzPP1mljmJlLsBwHXN8SwISmvd8yFf0vSUfGQRMS2pA7h/aQLNUo9zzQc\nhmjKcChwSUSsBq+NQx8ETMuf3wBMyJ+9HbiPtDNdB7g3F/fDSCdrakn4D1IvpvH1z4FReSyeiHhP\n7nEtrXuBf4mILSJiGdJldwPKRzazgf9Lusqo3jrAX4GZ+eTaYcDK+cjmH8Aq+e/Tr4hYmTTmehzw\naeDiPM0ASc+TrqL5XkRsBinnIuJsUk/ymoGW78OPgdF1hfNo0nmlRnsA3490NVTtsstDSeeX5pLy\nfHxE9OR5fkcq+OsAv8vF/QMsOf7dmOer5nZ/A6wf6TJKImJkRHwvf7Y0HgWWi4hd8/tPMvCRJZJe\nAaaQhq4ah2fWBl4E/pTz+egc5yr5eyyTe/b9ytvbZcAJpOHa0/KOozQu8HUi4pSIeIW0px4TEa9E\nuqKj0WeAPwF3R4RIe/J1SZeAQerRbhTpOvJrSVcDvEw6yTo5Ih4gJfylwOW5eF9PuhLmBFKS7RYR\nd0uaQxqfnhwRD5NOwDYmX9Nye/9OOln7G9JYYjOuBv4o6bmG6T8jFf/Hc9wXkg6ZfwA8QOrR/aVu\nLLUvZwD/LekPuSc6lXTVkGWSziMVh5/mYYyHSL3ocXUnsJcQEQtyPr8VmJrz+f2SZpJydXJEPEoa\n/jmhjya+Stqh/zLn+eOkiwM+nD+/gLRzf5J0hHdibvvLwPmRrnYZTfr/PSMf7U0Gzo2IScDted2z\nSZcpfgz4Zs7zyaRrx5fqfub5nNcxwJURcT9pG13MIEWelOfzJD3UMP33pB7+I6Qjqp8Cd+XvPSd/\nl5n5O/bnU8AcSTfnv9PFpO25ND2+H/zwE+ka9N78ehvgdkkj2hyWWWnyEeECYPV8RDQsuAc/zOTD\ny6dqh8Kky8sG/GGXWTeKiLsj4oD89gDSGP+wKe7gHvywFOmn3meTdvBzSD9Meqy9UZkVK9LtGC4m\n3Y5hPuk6+rvbG1VrucCbmVWUh2jMzCqqo66D77l30DPcTRv5rj8W1RRPTNumsLasvXpHD/jjlFLs\nys8Ky+tpPQNdjDRU1w0+i3WN3t6J/5Tb7sGbmVWUC7yZWUW5wJuZVZQLvJlZRZV+kjUiLiDdz7oX\n+Lfhdh2qVZPz2rpBqT34iBgNbClpJ+AI0j2lzbqa89q6RdlDNGNJd65D0sPAiEiPlTPrZs5r6wpl\nF/j1WPJJNM/Q3H2ZzTqZ89q6QqtPsrb8RyZmLeC8to5UdoGfzZI9mw1IN7cy62bOa+sKZRf4KaSb\n+BMR2wOz655PatatnNfWFUot8JLuID2v9A7SlQbHlrk+s1ZwXlu3KP06eEmnlL0Os1ZzXls38C9Z\nzcwqygXezKyiXODNzCrKBd7MrKI66olOLCiuqZV4qbC2dhr9y8LaunPaboW1Zd1hWs9dhbV1OnsV\n1tYZnF9YW8n8gtuzN8o9eDOzinKBNzOrKBd4M7OKcoE3M6soF3gzs4pygTczqygXeDOzinKBNzOr\nKBd4M7OKcoE3M6soF3gzs4pygTczqygXeDOzinKBNzOrKBd4M7OKcoE3M6soF3gzs4pygTczq6jO\nemRfgR6c9u7C2jpz9ImFtfXq6OULa+u+3+xSWFsALOzQtuw1Z3B6YW2dw+cKawvglEIfAejH/xXB\nPXgzs4pygTczqygXeDOzinKBNzOrKBd4M7OKKv0qmoj4KjAqr+tsST8qe51mZXNeWzcotQcfEWOA\nd0jaCdgTuLDM9Zm1gvPaukXZQzTTgY/n188BK0fEsiWv06xszmvrCqUO0UhaCCzIb48AbpK0qMx1\nmpXNeW3doiW/ZI2IfUkbwu6tWJ9ZKzivrdO14iTrHsAXgD0lPV/2+sxawXlt3aDUAh8RqwFfA8ZJ\nmlfmusxaxXlt3aLsHvwBwFrAdRFRmzZe0syS12tWJue1dYWyT7JeBlxW5jrMWs15bd3Cv2Q1M6so\nF3gzs4pygTczqygXeDOziurp7e0ddKZ8WdgaQE9tmqQnCg9mGoMH0+0KvGvJjyfvUVxjwH/wxcLa\nmrFos8LamjdrncLa6n3rcj3171uR2z09E6uf18B0ziisrVHcVVhbcHOBbXWu3t6JPY3TBr2KJiK+\nAXwCeIbXN4JeYGSh0Zm1mHPbqq6ZyyTHAGtLeqXsYMxazLltldbMGPyj3gCsopzbVmnN9OBnRcRt\nwO3AwtpESV8qLSqz1nBuW6U1U+CfBaaWHYhZGzi3rdIGLfCSijs1btZBnNtWdf0W+IiYDv1ftijp\n/aVEZFYy57YNFwP14E9rWRRmreXctmGh3wIvaVorAzFrFee2DRe+VYGZWUW5wJuZVVRTD/yIiBHA\nlqQTU5I0v9SozFrEuW1VNmgPPiI+CzxGuk3WN4HHI+KYsgMzK5tz26qumR78YcDI2pPjc4/nV8C3\nywzMrAWc21ZpzYzB/6W2AQBI+htQ+K2CzdrAuW2V1kwP/vGI+DEwhbRDGAM8GxGHA0j6zxLjMyuT\nc9sqrZkCvxLwN+Dd+f38vNwo0okpbwTWrZzbVmnN3IvmE60IxKzVnNtWdc080enP9HHfDkmblBKR\nWYs4t63qmhmi2aXu9fLAWNKhrS2NzxTX1Ed6diquMWDxs6MKa+usNT5XWFs/f2uRz579QP0b53aB\nRnFOYW317v7ewtrqeaTAR+LOmFhcWy3QzBDNkw2THo2InwOTygnJrDWc21Z1zQzR7NYwaWNg83LC\nMWsd57ZVXTNDNF+se91LutLgk+WEY9ZSzm2rtGaGaMa0IhCzVnNuW9U1M0SzFfAtYAdSL+cu4FhJ\njzWzgohYEXgQOFPSlUsfqlmxnNtWdc3cquAi4HxgfWBD4BKGdq+O04B5Qw/NrHTObau0ZsbgeyTd\nWPd+ckR8upnGcw9pa+DGweY1awPntlVaMz345SNi+9qbiHg3Td5HHjgPOGFpAjNrAee2VVozyXwi\n8F8RsU5+PwcYP9hCETEeuE3SjIh4AyGalca5bZXWTIH/s6StImI1oHcIT7z5EDAyIvYHNgJejYhZ\nkm5Z2mDNCubctkprpsD/f2BM/X2zmyHpgNrriJgIzPAGYB3GuW2V1kyBV0RcBdwB/P21ib5XtnU/\n57ZVWjMF/s3AImDHumlDule2pIlDC8usJZzbVmm+H7wNW85tq7oBC3xE7Cdpcn59LekHIS8DB0t6\ntgXxmZXCuW3DQb/XwUfE8cAZEVHbCWxCujnTPcAXWhCbWSmc2zZcDPRDpwnAOEkL8/tXJE0DJpKe\nWWnWrSbg3LZhYKACv0DSX+ve/xeApH8AL5YalVm5nNs2LAw0Br9K/RtJl9e9Xa2ccGxI7plYaHPL\nrLlqYW31Xl7cI/vefuRDhbWVH9nn3C7Fy4W11DPlssLa6j23p7C2ev6nwMf/AVwysdj2GgzUg38g\nIo5qnBgRJwO/Ki8ks9I5t21YGKgHfzLwk3zfjXvyvDsDc4F9WhCbWVmc2zYs9FvgJT0NvDcixgLb\nkH4Qcp2k6a0KzqwMzm0bLpr5odNUYGoLYjFrKee2VV0z94M3M7Mu5AJvZlZRLvBmZhXlAm9mVlEu\n8GZmFeUCb2ZWUS7wZmYV5QJvZlZRLvBmZhXlAm9mVlEu8GZmFeUCb2ZWUS7wZmYV5QJvZlZRg94u\n2DrYgmKbW+G5CYW11XPhCYW11bt1cY9c4+HimrIyPVVYSz0nX19YW70nFZiLQM+4gh8B2MA9eDOz\ninKBNzOrKBd4M7OKcoE3M6uo0k+yRsQhwEnAQuBLkm4se51mZXNeWzcotQcfEWsCpwO7AHsD+5a5\nPrNWcF5btyi7Bz8OuEXSC8ALwNElr8+sFZzX1hXKLvCbAitFxA3ACGCipKklr9OsbJvivLYuUPZJ\n1h5gTWB/YAJwRUQU+0sBs9ZzXltXKLvAPw3cIWmhpMdJh7Nrl7xOs7I5r60rlF3gpwC7RcQy+cTU\nKsDcktdpVjbntXWFUgu8pKeA64G7gJuBT0taXOY6zcrmvLZuUfp18JIuBS4tez1mreS8tm7gX7Ka\nmVWUC7yZWUW5wJuZVZQLvJlZRbnAm5lVVE9vb7mPjBqKnml0TjDD0QrFNTV1x50La+u2njsLa2ti\nb2/Lf3Ha0zPReV0ZXyi0tZtYvrC29uojt92DNzOrKBd4M7OKcoE3M6soF3gzs4pygTczqygXeDOz\ninKBNzOrKBd4M7OKcoE3M6soF3gzs4pygTczqygXeDOzinKBNzOrKBd4M7OKcoE3M6soF3gzs4py\ngTczqygXeDOziuqoR/aZmVlx3IM3M6soF3gzs4pygTczqygXeDOzinKBNzOrKBd4M7OKelO7AxiK\niLgAeC/QC/ybpLvbHBIAEfFVYBTp73m2pB+1OaTXRMSKwIPAmZKubHM4AETEIcBJwELgS5JubHNI\nbefcHppOzGvovNzumh58RIwGtpS0E3AE8I02hwRARIwB3pHj2hO4sM0hNToNmNfuIGoiYk3gdGAX\nYG9g3/ZG1H7O7aXSUXkNnZnbXVPggbHAjwEkPQyMiIhV2xsSANOBj+fXzwErR8SybYznNRGxFbA1\n0Ek95HHALZJekDRH0tHtDqgDOLeHoEPzGjowt7tpiGY94N6698/kafPbE04iaSGwIL89ArhJ0qI2\nhlTvPOA4YEKb46i3KbBSRNwAjAAmSpra3pDazrk9NJ2Y19CBud1NPfhGPe0OoF5E7EvaCI5rdywA\nETEeuE3SjHbH0qAHWBPYn7SBXhERHfV/2QE66u/RSbndwXkNHZjb3dSDn03q1dRsAMxpUyxLiIg9\ngC8Ae0p6vt3xZB8CRkbE/sBGwKsRMUvSLW2O62ngjtw7fDwiXgDWBv7a3rDayrndvE7Na+jA3O6m\nAj8FOAO4NCK2B2ZLeqHNMRERqwFfA8ZJ6piTPpIOqL2OiInAjA7ZCKYAV0bEuaTD2FWAue0Nqe2c\n203q4LyGDsztrinwku6IiHsj4g5gMXBsu2PKDgDWAq6LiNq08ZJmti+kziXpqYi4HrgrT/q0pMXt\njKndnNvV0Im57dsFm5lVVDefZDUzswG4wJuZVZQLvJlZRbnAm5lVlAu8mVlFucCbmVVU11wH320i\nYj3gXGBb4AXgLcAVkr7e4jjeBXyF9Is6SPc5OVXSfYMstzPwF0lPlByidRnndvdwD74E+f4TPwHu\nlLSdpFHAHsBREfHRfuYvI451chxflrS9pO1JG8QNEbHWIIt/AhhZRlzWvZzb3cU/dCpBRIwDzpD0\nvobpy0v6e359JfAqsBVwCLAhcD7wD9JDH46T9FBE3EpK4lsiYlPgdkkb5eVfAjYH1geulDSpYX1f\nAZaVdHLD9EnAS5JOi4heYDlJCyNiAumWpz8ErgCeBD4r6ZfF/GWs2zm3u4t78OXYBrincWJtA6iz\nsqTRkmYBV5ESbgwwCbi4ifVsJGkP4P3AafmBA/XeCfy2j+XuBLbvr1FJk4H7gc9VfQOwIXNudxGP\nwZdjEXV/24g4GjgYWAH4s6TaQxTuyJ+vDqxb95i2W4FrmljPFABJz0XEI8CWwLN1n79I/zvxYX3/\nF1tqzu0u4h58OR4Adqq9kXSZpF2BU0iHnDW1Xk/jOFlP3bT6z5ZvmK/+/6+Hf25niTjqvJu+ez+N\n7Zs1cm53ERf4Eki6DXg2Ik6tTYuI5YDdgZf7mP95YE5E7JgnjeP1O9LNBzbOr3drWHRMbnsEsAWg\nhs8vBj6en61Zi2Nn0gMJalc81Lc/pm7ZxcByA35RG3ac293FQzTl2Qf4SkTcT0q0lUnPuDy4n/nH\nA5MiYhHpMPiYPP0i4JKIOBj4WcMy8yJiMulk1OmSnqv/UNKzEbEr8I2IOI/UC3oa2K/u4Q3nAFMi\n4lHg97y+QfyCdH/yz0j60dC/vlWYc7tL+CqaLpWvNLhd0nfaHYtZkZzbxfEQjZlZRbkHb2ZWUe7B\nm5lVlAu8mVlFucCbmVWUC7yZWUW5wJuZVZQLvJlZRf0vhqRibo7514YAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index 15bf06b248..152a68aff6 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -23,24 +23,11 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 71, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.1+1178.ga40c9ec-py2.7-linux-x86_64.egg/matplotlib/__init__.py:1362: UserWarning: This call to matplotlib.use() has no effect\n", - "because the backend has already been chosen;\n", - "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", - "or matplotlib.backends is imported for the first time.\n", - "\n", - " warnings.warn(_use_error_msg)\n" - ] - } - ], + "outputs": [], "source": [ "import math\n", "import pickle\n", @@ -68,7 +55,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 72, "metadata": { "collapsed": false }, @@ -92,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 73, "metadata": { "collapsed": true }, @@ -127,7 +114,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 74, "metadata": { "collapsed": true }, @@ -150,7 +137,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 75, "metadata": { "collapsed": true }, @@ -178,7 +165,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 76, "metadata": { "collapsed": true }, @@ -215,7 +202,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 77, "metadata": { "collapsed": true }, @@ -252,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 78, "metadata": { "collapsed": true }, @@ -274,7 +261,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 79, "metadata": { "collapsed": true }, @@ -306,7 +293,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 80, "metadata": { "collapsed": true }, @@ -333,7 +320,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 81, "metadata": { "collapsed": true }, @@ -346,7 +333,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 82, "metadata": { "collapsed": true }, @@ -365,7 +352,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 83, "metadata": { "collapsed": false }, @@ -401,7 +388,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 57, "metadata": { "collapsed": true }, @@ -429,7 +416,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 58, "metadata": { "collapsed": false }, @@ -440,7 +427,7 @@ "0" ] }, - "execution_count": 15, + "execution_count": 58, "metadata": {}, "output_type": "execute_result" } @@ -452,19 +439,19 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAWFSURB\nVGje7Zs7cttADIZ9CSvXcrP0iCxUqbBc8Ag6xR6BhV2EvYvwFD4CCx1ABT1jMdgndpegRQnOrCbj\npPlGESISC4A/gd27e8H583CX3b4+iKJrRHkS4vkghMPBonRYWGwtfgD2YN+dRDUOoh6lACw0Noi9\nw2fESuEoAR/uVuMolX039oXGT7F3eFL2iEfhUX1f4cPdL/ishs+68ai+udE4xPhexbjX2FfjGNoP\nj/DPNX4Tsd+EODr8FvsVdf1Hd9P2VvCi4+s/aXvrf+upAD+1/9GV1mkOH5X9vV6THtfvACslcaUC\nbESL61drBPtdI8SrFMWrELsXCkuFDYW75gbiP7d9Cf7bAYI/aCwUShrBvh30+lWQkzVgZ/HD4Oix\nNCgcQpJ3BxU/Ln91elKoM5VEE38QtJ+Yv6cQ9xjKNYayyl8TypP8DfJnQ2H/b/N3ye9P83cT33SQ\nv/sQh9gV7zZ/0dNj5HQaC5vVzv9+/WFN2w8KVaZ2BwL1+pv4g0x1QRfjq0dB4Q3kT277oP6VNL6g\nKxNU9a8zK+WLbi/WwpdihbboKqyxFOulHMj6v4W/AXbmUeAxrv9J/CqEBXaRKsXaodD4nsYvkT/G\n6H1D4SR/iPy1Roj9JsQ5e18/7EUHv1+Fvx/Xj5V9Ugb5K8TW4TZEEdcvoz/up0VTe9qsVIppKVX6\na7D6y9ZvwEKjrtQxPtv6fXII9vCxKOGaIeAIfEF8IvAG8ie3vRK9rRQl+PPpSctbhfpTUCpviH+k\nxsZgpT91+snoX1l49KK3iUQvICRy5aUw6l8leoVwoo3Uv1rKreF/UFLY6d9QP4L9Wf2r7EP9GOSf\ncsjZ56f60kz+XmVPXv+RuP49ff0T/53Rv6n/7m2lvXT9Wqd/VUz8hvh5M/ED6ILmt4mfHYZSaePn\nTWpsf/SvqV9O6dLYYClLEetnoH/LBLFoBvrX189uTv8++kot5vTvQD4/9jP690g9P/4z/bvo/XVG\n/xYoZZx+8fr3MxAtsf7tUOkG2JqsTtCIpgCt/qX1226KqZS7gfzJbe+c9jLrtIZ8lXD+s4umlW6A\nKIVrlML2/cXjgPFjlJqIRC+Fj0bVJe+vSh56pSdR6YkQ1ygF10Wqf0FeLta/iKn9Mv1L24ti2e+7\nW4n1b3T/W+L+t9H9T/SvVboUmqJJon1/hZq8LnzRDlDrX1u0xRT1+6vEpomMmyYkqi95vIH8yW1P\nN+122KkLcNLKi/WTF01z/cNASrWE/l3ev6T17zX909z9X27/euK/Rf3zWP+Waf9eEv37KkWJ+rfD\nl6ZglNDa+cEBhwYDvkoNP/rX69814NaI3imq0l7OYDy/qSdDGwr7r+Y3VbzoKZr6XX2lfxfOb87q\nXzr+b1j/Xlp/nP6dn98McdH7cn7zjPObKsYWS3Eb9w8n85smHtqQuPuZ30T2dlIT6F9xFl+n8xsl\negL9a4c2KRr9W4rp/GYqumiM9Nec/j2v/yj9u1h//hv9e93vc++f63/u+rPjL3f+5Lbn1j9m/eXW\nf+7zh/v8+2b9e/Hzn6s/uPqHrb8g71n6L3f+5Lbnvn8w33+4718/+5d47//c/gO7/5E7/nPbc/tv\n3P4fs//I7X9y+6/fqH+v6j9z+9/c/ju3/8+eP+TOn9z23PkXc/7Gnf9x5483q38Xzn+582fu/Js9\nfy8kb/6fO39y23P3n3S8/S/c/Tfc/T83uX/pgv1XE/9duP+Lu/+Mvf8td/znti8kb/8ld/9nx9t/\nSjw/Ltr/yt1/+337f6/bf0zoB3nJ/ucVc/81d/83e/957vzJbc89/8A8f8E9/5HE78XnT/4H/cs5\nf8Q9/8Q9f8U+/5U7f3Lbc88fdrzzjyvm+cuf/Uu887/c88fs88954/8vO4SjPC+2QRIAAAAldEVY\ndGRhdGU6Y3JlYXRlADIwMTYtMDUtMTNUMDk6MDQ6MjEtMDQ6MDCreyVVAAAAJXRFWHRkYXRlOm1v\nZGlmeQAyMDE2LTA1LTEzVDA5OjA0OjIxLTA0OjAw2iad6QAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAWFSURB\nVGje7Zs7cttADIZ9CSvXcrP0iCxUqbBc8Ag6xR6BhV2EvYvwFD4CCx1ABT1jMdgndpegRQnOrCbj\npPlGESISC4A/gd27e8H583CX3b4+iKJrRHkS4vkghMPBonRYWGwtfgD2YN+dRDUOoh6lACw0Noi9\nw2fESuEoAR/uVuMolX039oXGT7F3eFL2iEfhUX1f4cPdL/ishs+68ai+udE4xPhexbjX2FfjGNoP\nj/DPNX4Tsd+EODr8FvsVdf1Hd9P2VvCi4+s/aXvrf+upAD+1/9GV1mkOH5X9vV6THtfvACslcaUC\nbESL61drBPtdI8SrFMWrELsXCkuFDYW75gbiP7d9Cf7bAYI/aCwUShrBvh30+lWQkzVgZ/HD4Oix\nNCgcQpJ3BxU/Ln91elKoM5VEE38QtJ+Yv6cQ9xjKNYayyl8TypP8DfJnQ2H/b/N3ye9P83cT33SQ\nv/sQh9gV7zZ/0dNj5HQaC5vVzv9+/WFN2w8KVaZ2BwL1+pv4g0x1QRfjq0dB4Q3kT277oP6VNL6g\nKxNU9a8zK+WLbi/WwpdihbboKqyxFOulHMj6v4W/AXbmUeAxrv9J/CqEBXaRKsXaodD4nsYvkT/G\n6H1D4SR/iPy1Roj9JsQ5e18/7EUHv1+Fvx/Xj5V9Ugb5K8TW4TZEEdcvoz/up0VTe9qsVIppKVX6\na7D6y9ZvwEKjrtQxPtv6fXII9vCxKOGaIeAIfEF8IvAG8ie3vRK9rRQl+PPpSctbhfpTUCpviH+k\nxsZgpT91+snoX1l49KK3iUQvICRy5aUw6l8leoVwoo3Uv1rKreF/UFLY6d9QP4L9Wf2r7EP9GOSf\ncsjZ56f60kz+XmVPXv+RuP49ff0T/53Rv6n/7m2lvXT9Wqd/VUz8hvh5M/ED6ILmt4mfHYZSaePn\nTWpsf/SvqV9O6dLYYClLEetnoH/LBLFoBvrX189uTv8++kot5vTvQD4/9jP690g9P/4z/bvo/XVG\n/xYoZZx+8fr3MxAtsf7tUOkG2JqsTtCIpgCt/qX1226KqZS7gfzJbe+c9jLrtIZ8lXD+s4umlW6A\nKIVrlML2/cXjgPFjlJqIRC+Fj0bVJe+vSh56pSdR6YkQ1ygF10Wqf0FeLta/iKn9Mv1L24ti2e+7\nW4n1b3T/W+L+t9H9T/SvVboUmqJJon1/hZq8LnzRDlDrX1u0xRT1+6vEpomMmyYkqi95vIH8yW1P\nN+122KkLcNLKi/WTF01z/cNASrWE/l3ev6T17zX909z9X27/euK/Rf3zWP+Waf9eEv37KkWJ+rfD\nl6ZglNDa+cEBhwYDvkoNP/rX69814NaI3imq0l7OYDy/qSdDGwr7r+Y3VbzoKZr6XX2lfxfOb87q\nXzr+b1j/Xlp/nP6dn98McdH7cn7zjPObKsYWS3Eb9w8n85smHtqQuPuZ30T2dlIT6F9xFl+n8xsl\negL9a4c2KRr9W4rp/GYqumiM9Nec/j2v/yj9u1h//hv9e93vc++f63/u+rPjL3f+5Lbn1j9m/eXW\nf+7zh/v8+2b9e/Hzn6s/uPqHrb8g71n6L3f+5Lbnvn8w33+4718/+5d47//c/gO7/5E7/nPbc/tv\n3P4fs//I7X9y+6/fqH+v6j9z+9/c/ju3/8+eP+TOn9z23PkXc/7Gnf9x5483q38Xzn+582fu/Js9\nfy8kb/6fO39y23P3n3S8/S/c/Tfc/T83uX/pgv1XE/9duP+Lu/+Mvf8td/znti8kb/8ld/9nx9t/\nSjw/Ltr/yt1/+337f6/bf0zoB3nJ/ucVc/81d/83e/957vzJbc89/8A8f8E9/5HE78XnT/4H/cs5\nf8Q9/8Q9f8U+/5U7f3Lbc88fdrzzjyvm+cuf/Uu887/c88fs88954/8vO4SjPC+2QRIAAAAldEVY\ndGRhdGU6Y3JlYXRlADIwMTYtMDUtMTNUMTA6MTI6MjAtMDQ6MDDbBmr4AAAAJXRFWHRkYXRlOm1v\nZGlmeQAyMDE2LTA1LTEzVDEwOjEyOjIwLTA0OjAwqlvSRAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, - "execution_count": 16, + "execution_count": 59, "metadata": {}, "output_type": "execute_result" } @@ -500,7 +487,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 60, "metadata": { "collapsed": false }, @@ -520,7 +507,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 61, "metadata": { "collapsed": false }, @@ -558,7 +545,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 62, "metadata": { "collapsed": false }, @@ -579,14 +566,14 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 63, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Specify a \"cell\" domain type for the cross section tally filters\n", - "mgxs_lib.domain_type = \"cell\"\n", + "mgxs_lib.domain_type = 'cell'\n", "\n", "# Specify the cell domains over which to compute multi-group cross sections\n", "mgxs_lib.domains = geometry.get_all_material_cells()" @@ -601,7 +588,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 64, "metadata": { "collapsed": true }, @@ -620,7 +607,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 65, "metadata": { "collapsed": true }, @@ -641,7 +628,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 66, "metadata": { "collapsed": true }, @@ -661,7 +648,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 67, "metadata": { "collapsed": false }, @@ -689,7 +676,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 68, "metadata": { "collapsed": true }, @@ -701,7 +688,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 69, "metadata": { "collapsed": false }, @@ -727,7 +714,7 @@ " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", " Git SHA1: 19feb55e6d5e8350398627f39fb55ee8e2e63011\n", - " Date/Time: 2016-05-13 09:04:22\n", + " Date/Time: 2016-05-13 10:12:20\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -814,20 +801,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.4100E-01 seconds\n", - " Reading cross sections = 1.0500E-01 seconds\n", - " Total time in simulation = 5.1887E+01 seconds\n", - " Time in transport only = 5.1864E+01 seconds\n", - " Time in inactive batches = 3.9000E+00 seconds\n", - " Time in active batches = 4.7987E+01 seconds\n", - " Time synchronizing fission bank = 5.0000E-03 seconds\n", - " Sampling source sites = 1.0000E-03 seconds\n", - " SEND/RECV source sites = 4.0000E-03 seconds\n", - " Time accumulating tallies = 2.0000E-03 seconds\n", + " Total time for initialization = 5.0700E-01 seconds\n", + " Reading cross sections = 1.0600E-01 seconds\n", + " Total time in simulation = 6.4501E+01 seconds\n", + " Time in transport only = 6.4461E+01 seconds\n", + " Time in inactive batches = 5.2590E+00 seconds\n", + " Time in active batches = 5.9242E+01 seconds\n", + " Time synchronizing fission bank = 4.0000E-03 seconds\n", + " Sampling source sites = 2.0000E-03 seconds\n", + " SEND/RECV source sites = 2.0000E-03 seconds\n", + " Time accumulating tallies = 3.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 5.2448E+01 seconds\n", - " Calculation Rate (inactive) = 6410.26 neutrons/second\n", - " Calculation Rate (active) = 2083.90 neutrons/second\n", + " Total time elapsed = 6.5026E+01 seconds\n", + " Calculation Rate (inactive) = 4753.76 neutrons/second\n", + " Calculation Rate (active) = 1687.99 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -845,7 +832,7 @@ "0" ] }, - "execution_count": 26, + "execution_count": 69, "metadata": {}, "output_type": "execute_result" } @@ -871,11 +858,32 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 70, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "ename": "KeyError", + "evalue": "'Unable to open object (Component not found)'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# Load the last statepoint file\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0msp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mopenmc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mStatePoint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'statepoint.50.h5'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32m/usr/local/lib/python2.7/dist-packages/openmc-0.7.1-py2.7.egg/openmc/statepoint.pyc\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, filename, autolink)\u001b[0m\n\u001b[0;32m 135\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mos\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mexists\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpath_summary\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 136\u001b[0m \u001b[0msu\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mopenmc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mSummary\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpath_summary\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 137\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlink_with_summary\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msu\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 138\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 139\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m/usr/local/lib/python2.7/dist-packages/openmc-0.7.1-py2.7.egg/openmc/statepoint.pyc\u001b[0m in \u001b[0;36mlink_with_summary\u001b[1;34m(self, summary)\u001b[0m\n\u001b[0;32m 639\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 640\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 641\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0mtally_id\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtally\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtallies\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 642\u001b[0m \u001b[0msummary_tally\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msummary\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtallies\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mtally_id\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 643\u001b[0m \u001b[0mtally\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mname\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msummary_tally\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m/usr/local/lib/python2.7/dist-packages/openmc-0.7.1-py2.7.egg/openmc/statepoint.pyc\u001b[0m in \u001b[0;36mtallies\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 376\u001b[0m \u001b[1;31m# Read the Tally size specifications\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 377\u001b[0m \u001b[0mn_realizations\u001b[0m \u001b[1;33m=\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m\\\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 378\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_f\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'{0}{1}/n_realizations'\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbase\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtally_key\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mvalue\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 379\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 380\u001b[0m \u001b[1;31m# Create Tally object and assign basic properties\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m/usr/lib/python2.7/dist-packages/h5py/_objects.pyx\u001b[0m in \u001b[0;36mh5py._objects.with_phil.wrapper (/home/wboyd/Downloads/h5py-2.5.0/h5py/_objects.c:2453)\u001b[1;34m()\u001b[0m\n\u001b[0;32m 52\u001b[0m \u001b[0mlock\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mneeded\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mit\u001b[0m \u001b[0macquires\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mlock\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mnotifies\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mfirst\u001b[0m \u001b[0mthread\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 53\u001b[0m \u001b[0mto\u001b[0m \u001b[0mrelease\u001b[0m \u001b[0mit\u001b[0m \u001b[0mwhen\u001b[0m \u001b[0mit\u001b[0m\u001b[0;31m'\u001b[0m\u001b[0ms\u001b[0m \u001b[0mdone\u001b[0m\u001b[1;33m.\u001b[0m \u001b[0mThis\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mall\u001b[0m \u001b[0mmade\u001b[0m \u001b[0mpossible\u001b[0m \u001b[0mby\u001b[0m \u001b[0mthe\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 54\u001b[1;33m \u001b[0mwonderful\u001b[0m \u001b[0mGIL\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 55\u001b[0m \"\"\"\n\u001b[0;32m 56\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mpythread\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPyThread_type_lock\u001b[0m \u001b[0m_real_lock\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m/usr/lib/python2.7/dist-packages/h5py/_objects.pyx\u001b[0m in \u001b[0;36mh5py._objects.with_phil.wrapper (/home/wboyd/Downloads/h5py-2.5.0/h5py/_objects.c:2410)\u001b[1;34m()\u001b[0m\n\u001b[0;32m 53\u001b[0m \u001b[0mto\u001b[0m \u001b[0mrelease\u001b[0m \u001b[0mit\u001b[0m \u001b[0mwhen\u001b[0m \u001b[0mit\u001b[0m\u001b[0;31m'\u001b[0m\u001b[0ms\u001b[0m \u001b[0mdone\u001b[0m\u001b[1;33m.\u001b[0m \u001b[0mThis\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mall\u001b[0m \u001b[0mmade\u001b[0m \u001b[0mpossible\u001b[0m \u001b[0mby\u001b[0m \u001b[0mthe\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 54\u001b[0m \u001b[0mwonderful\u001b[0m \u001b[0mGIL\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 55\u001b[1;33m \"\"\"\n\u001b[0m\u001b[0;32m 56\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mpythread\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPyThread_type_lock\u001b[0m \u001b[0m_real_lock\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 57\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mlong\u001b[0m \u001b[0m_owner\u001b[0m \u001b[1;31m# ID of thread owning the lock\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m/usr/local/lib/python2.7/dist-packages/h5py-2.5.0-py2.7-linux-x86_64.egg/h5py/_hl/group.pyc\u001b[0m in \u001b[0;36m__getitem__\u001b[1;34m(self, name)\u001b[0m\n\u001b[0;32m 162\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Invalid HDF5 object reference\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 163\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 164\u001b[1;33m \u001b[0moid\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mh5o\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mid\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_e\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlapl\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_lapl\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 165\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 166\u001b[0m \u001b[0motype\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mh5i\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_type\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0moid\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m/usr/lib/python2.7/dist-packages/h5py/_objects.pyx\u001b[0m in \u001b[0;36mh5py._objects.with_phil.wrapper (/home/wboyd/Downloads/h5py-2.5.0/h5py/_objects.c:2453)\u001b[1;34m()\u001b[0m\n\u001b[0;32m 52\u001b[0m \u001b[0mlock\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mneeded\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mit\u001b[0m \u001b[0macquires\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mlock\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mnotifies\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mfirst\u001b[0m \u001b[0mthread\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 53\u001b[0m \u001b[0mto\u001b[0m \u001b[0mrelease\u001b[0m \u001b[0mit\u001b[0m \u001b[0mwhen\u001b[0m \u001b[0mit\u001b[0m\u001b[0;31m'\u001b[0m\u001b[0ms\u001b[0m \u001b[0mdone\u001b[0m\u001b[1;33m.\u001b[0m \u001b[0mThis\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mall\u001b[0m \u001b[0mmade\u001b[0m \u001b[0mpossible\u001b[0m \u001b[0mby\u001b[0m \u001b[0mthe\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 54\u001b[1;33m \u001b[0mwonderful\u001b[0m \u001b[0mGIL\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 55\u001b[0m \"\"\"\n\u001b[0;32m 56\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mpythread\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPyThread_type_lock\u001b[0m \u001b[0m_real_lock\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m/usr/lib/python2.7/dist-packages/h5py/_objects.pyx\u001b[0m in \u001b[0;36mh5py._objects.with_phil.wrapper (/home/wboyd/Downloads/h5py-2.5.0/h5py/_objects.c:2410)\u001b[1;34m()\u001b[0m\n\u001b[0;32m 53\u001b[0m \u001b[0mto\u001b[0m \u001b[0mrelease\u001b[0m \u001b[0mit\u001b[0m \u001b[0mwhen\u001b[0m \u001b[0mit\u001b[0m\u001b[0;31m'\u001b[0m\u001b[0ms\u001b[0m \u001b[0mdone\u001b[0m\u001b[1;33m.\u001b[0m \u001b[0mThis\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mall\u001b[0m \u001b[0mmade\u001b[0m \u001b[0mpossible\u001b[0m \u001b[0mby\u001b[0m \u001b[0mthe\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 54\u001b[0m \u001b[0mwonderful\u001b[0m \u001b[0mGIL\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 55\u001b[1;33m \"\"\"\n\u001b[0m\u001b[0;32m 56\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mpythread\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPyThread_type_lock\u001b[0m \u001b[0m_real_lock\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 57\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mlong\u001b[0m \u001b[0m_owner\u001b[0m \u001b[1;31m# ID of thread owning the lock\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m/usr/lib/python2.7/dist-packages/h5py/h5o.pyx\u001b[0m in \u001b[0;36mh5py.h5o.open (/home/wboyd/Downloads/h5py-2.5.0/h5py/h5o.c:3363)\u001b[1;34m()\u001b[0m\n\u001b[0;32m 188\u001b[0m char* dst_name, PropID copypl=None, PropID lcpl=None):\n\u001b[0;32m 189\u001b[0m \"\"\"(ObjectID src_loc, STRING src_name, GroupID dst_loc, STRING dst_name,\n\u001b[1;32m--> 190\u001b[1;33m PropID copypl=None, PropID lcpl=None)\n\u001b[0m\u001b[0;32m 191\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 192\u001b[0m \u001b[0mCopy\u001b[0m \u001b[0ma\u001b[0m \u001b[0mgroup\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdataset\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mnamed\u001b[0m \u001b[0mdatatype\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mone\u001b[0m \u001b[0mlocation\u001b[0m \u001b[0mto\u001b[0m \u001b[0manother\u001b[0m\u001b[1;33m.\u001b[0m \u001b[0mThe\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mKeyError\u001b[0m: 'Unable to open object (Component not found)'" + ] + } + ], "source": [ "# Load the last statepoint file\n", "sp = openmc.StatePoint('statepoint.50.h5')" @@ -890,7 +898,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": { "collapsed": false }, @@ -925,7 +933,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": { "collapsed": false }, @@ -944,101 +952,11 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python2.7/dist-packages/openmc-0.7.1-py2.7.egg/openmc/tallies.py:1988: RuntimeWarning: invalid value encountered in true_divide\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cellgroup innuclidemeanstd. dev.
3100001U-2358.055246e-032.857567e-05
4100001U-2387.339215e-034.349466e-05
5100001O-160.000000e+000.000000e+00
0100002U-2353.615565e-012.050486e-03
1100002U-2386.742638e-073.795256e-09
2100002O-160.000000e+000.000000e+00
\n", - "
" - ], - "text/plain": [ - " cell group in nuclide mean std. dev.\n", - "3 10000 1 U-235 8.055246e-03 2.857567e-05\n", - "4 10000 1 U-238 7.339215e-03 4.349466e-05\n", - "5 10000 1 O-16 0.000000e+00 0.000000e+00\n", - "0 10000 2 U-235 3.615565e-01 2.050486e-03\n", - "1 10000 2 U-238 6.742638e-07 3.795256e-09\n", - "2 10000 2 O-16 0.000000e+00 0.000000e+00" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df = fuel_mgxs.get_pandas_dataframe()\n", "df" @@ -1053,39 +971,11 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Multi-Group XS\n", - "\tReaction Type =\tnu-fission\n", - "\tDomain Type =\tcell\n", - "\tDomain ID =\t10000\n", - "\tNuclide =\tU-235\n", - "\tCross Sections [cm^-1]:\n", - " Group 1 [6.25e-07 - 20.0 MeV]:\t8.06e-03 +/- 3.55e-01%\n", - " Group 2 [0.0 - 6.25e-07 MeV]:\t3.62e-01 +/- 5.67e-01%\n", - "\n", - "\tNuclide =\tU-238\n", - "\tCross Sections [cm^-1]:\n", - " Group 1 [6.25e-07 - 20.0 MeV]:\t7.34e-03 +/- 5.93e-01%\n", - " Group 2 [0.0 - 6.25e-07 MeV]:\t6.74e-07 +/- 5.63e-01%\n", - "\n", - "\tNuclide =\tO-16\n", - "\tCross Sections [cm^-1]:\n", - " Group 1 [6.25e-07 - 20.0 MeV]:\t0.00e+00 +/- nan%\n", - " Group 2 [0.0 - 6.25e-07 MeV]:\t0.00e+00 +/- nan%\n", - "\n", - "\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "fuel_mgxs.print_xs()" ] @@ -1099,7 +989,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1118,7 +1008,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "metadata": { "collapsed": true }, @@ -1130,7 +1020,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "metadata": { "collapsed": true }, @@ -1149,7 +1039,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "metadata": { "collapsed": true }, @@ -1164,67 +1054,11 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cellgroup innuclidemeanstd. dev.
0100001U-2350.0748600.000303
1100001U-2380.0059520.000035
2100001O-160.0000000.000000
\n", - "
" - ], - "text/plain": [ - " cell group in nuclide mean std. dev.\n", - "0 10000 1 U-235 0.074860 0.000303\n", - "1 10000 1 U-238 0.005952 0.000035\n", - "2 10000 1 O-16 0.000000 0.000000" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Retrieve the NuFissionXS object for the fuel cell from the 1-group library\n", "coarse_fuel_mgxs = coarse_mgxs_lib.get_mgxs(fuel_cell, 'nu-fission')\n", @@ -1249,7 +1083,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1268,7 +1102,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1287,139 +1121,12 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": null, "metadata": { "collapsed": false, "scrolled": true }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ NORMAL ] Importing ray tracing data from file...\n", - "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.854370\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.801922\tres = 1.521E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.761745\tres = 6.349E-02\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.732366\tres = 5.029E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.711073\tres = 3.869E-02\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.696554\tres = 2.912E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.687670\tres = 2.044E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.683465\tres = 1.277E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.683124\tres = 6.142E-03\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.685943\tres = 7.897E-04\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.691322\tres = 4.180E-03\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.698747\tres = 7.873E-03\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.707777\tres = 1.076E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.718040\tres = 1.295E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.729218\tres = 1.452E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.741045\tres = 1.559E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.753296\tres = 1.624E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.765785\tres = 1.655E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.778355\tres = 1.659E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.790879\tres = 1.643E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.803254\tres = 1.610E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.815394\tres = 1.566E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.827235\tres = 1.513E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.838724\tres = 1.453E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.849823\tres = 1.390E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.860503\tres = 1.324E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.870744\tres = 1.258E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.880535\tres = 1.191E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.889870\tres = 1.125E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.898748\tres = 1.061E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.907172\tres = 9.985E-03\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.915151\tres = 9.382E-03\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.922693\tres = 8.802E-03\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.929811\tres = 8.248E-03\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.936517\tres = 7.720E-03\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.942827\tres = 7.219E-03\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.948757\tres = 6.744E-03\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.954322\tres = 6.295E-03\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.959539\tres = 5.871E-03\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.964425\tres = 5.472E-03\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.968996\tres = 5.096E-03\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.973268\tres = 4.744E-03\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.977259\tres = 4.413E-03\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.980982\tres = 4.104E-03\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.984454\tres = 3.814E-03\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.987689\tres = 3.543E-03\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.990702\tres = 3.289E-03\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.993505\tres = 3.053E-03\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.996112\tres = 2.832E-03\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.998536\tres = 2.627E-03\n", - "[ NORMAL ] Iteration 50:\tk_eff = 1.000787\tres = 2.435E-03\n", - "[ NORMAL ] Iteration 51:\tk_eff = 1.002878\tres = 2.257E-03\n", - "[ NORMAL ] Iteration 52:\tk_eff = 1.004818\tres = 2.091E-03\n", - "[ NORMAL ] Iteration 53:\tk_eff = 1.006618\tres = 1.937E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.008287\tres = 1.793E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.009834\tres = 1.660E-03\n", - "[ NORMAL ] Iteration 56:\tk_eff = 1.011268\tres = 1.536E-03\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.012595\tres = 1.421E-03\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.013824\tres = 1.314E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.014962\tres = 1.215E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.016015\tres = 1.123E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.016988\tres = 1.038E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.017889\tres = 9.595E-04\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.018721\tres = 8.864E-04\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.019490\tres = 8.187E-04\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.020201\tres = 7.560E-04\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.020858\tres = 6.980E-04\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.021464\tres = 6.444E-04\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.022024\tres = 5.947E-04\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.022541\tres = 5.488E-04\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.023017\tres = 5.063E-04\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.023458\tres = 4.670E-04\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.023863\tres = 4.308E-04\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.024238\tres = 3.972E-04\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.024583\tres = 3.663E-04\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.024902\tres = 3.376E-04\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.025195\tres = 3.112E-04\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.025466\tres = 2.868E-04\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.025715\tres = 2.643E-04\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.025945\tres = 2.435E-04\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.026157\tres = 2.244E-04\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.026352\tres = 2.067E-04\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.026531\tres = 1.904E-04\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.026697\tres = 1.753E-04\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.026849\tres = 1.614E-04\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.026989\tres = 1.487E-04\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.027118\tres = 1.369E-04\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.027237\tres = 1.260E-04\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.027347\tres = 1.160E-04\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.027447\tres = 1.067E-04\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.027540\tres = 9.823E-05\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.027625\tres = 9.039E-05\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.027704\tres = 8.317E-05\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.027776\tres = 7.652E-05\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.027843\tres = 7.040E-05\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.027904\tres = 6.476E-05\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.027960\tres = 5.957E-05\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.028012\tres = 5.479E-05\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.028059\tres = 5.039E-05\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.028103\tres = 4.635E-05\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.028143\tres = 4.262E-05\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.028180\tres = 3.919E-05\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.028214\tres = 3.603E-05\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.028245\tres = 3.313E-05\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.028274\tres = 3.046E-05\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.028300\tres = 2.800E-05\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.028324\tres = 2.574E-05\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.028347\tres = 2.366E-05\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.028367\tres = 2.175E-05\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.028386\tres = 1.999E-05\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.028403\tres = 1.837E-05\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.028419\tres = 1.688E-05\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.028434\tres = 1.551E-05\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.028447\tres = 1.426E-05\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.028460\tres = 1.310E-05\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.028471\tres = 1.204E-05\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.028481\tres = 1.106E-05\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.028491\tres = 1.016E-05\n" - ] - } - ], + "outputs": [], "source": [ "# Generate tracks for OpenMOC\n", "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=32, azim_spacing=0.1)\n", @@ -1439,21 +1146,11 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "openmc keff = 1.028263\n", - "openmoc keff = 1.028491\n", - "bias [pcm]: 22.8\n" - ] - } - ], + "outputs": [], "source": [ "# Print report of keff and bias with OpenMC\n", "openmoc_keff = solver.getKeff()\n", @@ -1492,7 +1189,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1518,7 +1215,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1550,32 +1247,11 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nfHTc1tr58WfQa96JP1u/NcN5cd/L4s/xL5/Rv3hAT+D6cDWAztRFRHJFRV1EJEdU1EVEckRFXUQk\nR1TURURyREVdRCRHVNRFRHJERV1EJEdKMvhojM0uunzkcw+F63hiUTwIh1fiQQh7984waOgrcciB\n5z4Rxjz3oxFhzMruOxddfsw18cAiOy4MYeQv4+22NfF6/MF4H1uGQ3WrnR7GVJNhQoISGzzu8UaX\n7c2r4f1taXxc1uwQ7/MNGSbk6Lowbmv/LfFkNDW3bQ5j7Ka4P7ufsTqM2fHUd+IVZdiuDRvi1bBj\nvJ9rbo7bOqhqXhjz2rg3iy7vRzdmhmtJ6ExdRCRHVNRFRHJERV1EJEdU1EVEckRFXUQkR1TURURy\nREVdRCRHVNRFRHKkRYOPzGwRsBbYCmxx91FZ7jdw+pKiy79/wsXxSvrFA1Gqp8QDAy6b9O0wZuKB\nk8OY517M8Pw4Mp5tpS/FByHYyLgd3xi3wznxrC7+vbitDaPjprp0jY/VMn4axmTYqlbT3NxeuKbx\nmaAeqDk6XsFJ8b6qGZJhVqOX471lb8Q5UPONDHk9N27LH4zbsqPitro9sSVez8p4H+7aK8N2BZMR\nAXBi3NZUj2d06rfm5aLL+1ZnL9WtMaL0KHdf2QrrESk3ym2pOLr8IiKSIy0t6g7cb2Zzzezc1uiQ\nSJlQbktFaunll8PdfYmZ7QbcZ2bPufus1uiYSIkpt6UitehM3d2XpL9XANOA971tZma1ZuZ1Py1p\nTySLwnwzs9rmrEO5LeUoS243u6ib2U5m1q3ub+BjwPz6ce5e6+5W99Pc9kSyKsw3d69t6v2V21Ku\nsuR2Sy6/9AammVndem529z+3YH0i5UK5LRWr2UXd3RcCw1qxLyJlQbktlczc2/dSoJk5zxb/wP7W\nHvGMI8ftelcYs4aaMGYDXcKYudcdHsace/7VYcyUp84PY7rss6ro8vVbdw3XYVPDELY9HF8teOyO\nD4YxY558Koz58rB4YNE+vBLGXPLqD8MY+nWmVJdCzMyZ13hu/3zYWeE6DvVHwpjNdApjDtjyfBjT\n9TvxgKCHrxgexnTweD2jhz8dxjz2ZJxvWzyuDR/6VjzT0NrL4/PZf1bvH8Z0IJ716REODWPOf+q3\nRZeP3QlmDqzKlNv6nLqISI6oqIuI5IiKuohIjqioi4jkiIq6iEiOqKiLiOSIirqISI6oqIuI5Ehr\n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\njRmGBmRpq3P0mAf6Z1hPpwz96VwVb9eeWfqc5WGU5XhtznDcKZY3sP/+HZg5M8NqKNXgI5E2VNrB\nRyJtJ0tut3tRf18HzLxUD8LmUp/bRyX2uVAl9l99bntt3V9dUxcRyREVdRGRHCmHop7l227Kjfrc\nPiqxz4Uqsf/qc9tr0/6W/Jq6iIi0nnI4UxcRkVaioi4ikiMlLepmdqyZPW9mL5rZhFL2JSszW2Rm\nT5vZPDOLv9W/BMxsipmtMLP5Bbf1MLP7zOyF9PcupexjoUb6W2tmS9L9PM/MPlHKPjaF8rptVFpe\nQ2lyu2RF3cyqgeuA44BBwHgzG1Sq/jTRUe4+3N0zTI1SElOBY+vdNgF4wN0HAg+k/5eLqby/vwA/\nTffzcHe/p5371CzK6zY1lcrKayhBbpfyTH008KK7L3T3TcCtwLgS9ic33H0WsKrezeOAG9K/bwDi\nefzaSSP9rVTK6zZSaXkNpcntUhb1PYDXCv5fnN5W7hy438zmmtm5pe5ME/R296Xp38uA3qXsTEZf\nM7On0pewZfWyugjldfuqxLyGNsxtvVHadIe7+3CSl9fnm9mHS92hpvLkc6zl/lnWXwD9Sb7ebSnw\n49J2J/eU1+2nTXO7lEV9CWz39Yd7preVNXdfkv5eAUwjebldCZabWR+A9PeKEvenKHdf7u5b3X0b\n8CsqZz8rr9tXReU1tH1ul7KozwEGmtm+ZtYJOB2YUcL+hMxsJzPrVvc38DFgfvF7lY0ZwJnp32cC\n00vYl1DdAzV1EpWzn5XX7aui8hraPrdL8n3qAO6+xcy+CtwLVANT3H1BqfqTUW9gmplBsu9udvc/\nl7ZL72dmtwBHAr3MbDEwEZgM3GZmZwOvAKeVrofba6S/R5rZcJKX04uA80rWwSZQXredSstrKE1u\n62sCRERyRG+UiojkiIq6iEiOqKiLiOSIirqISI6oqIuI5IiKuohIjqioi4jkiIq6iEiO/C/zDkyC\nZclMUgAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Ignore zero fission rates in guide tubes with Matplotlib color scheme\n", "openmc_fission_rates[openmc_fission_rates == 0] = np.nan\n", diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index eff0bde0a3..1826912830 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -368,6 +368,15 @@ class MGXS(object): cv.check_type('domain', domain, tuple(_DOMAINS)) self._domain = domain + # Assign a domain type + if self.domain_type is None: + if isinstance(domain, openmc.Material): + self._domain_type = 'material' + elif isinstance(domain, openmc.Cell): + self._domain_type = 'cell' + elif isinstance(domain, openmc.Universe): + self._domain_type = 'universe' + @domain_type.setter def domain_type(self, domain_type): cv.check_value('domain type', domain_type, tuple(DOMAIN_TYPES)) From c31d6232267dd5811c88e2feb05e3806b83bdd11 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 13 May 2016 08:44:21 -0500 Subject: [PATCH 534/650] Ability to read from attributes on HDF5 groups/datasets --- src/hdf5_interface.F90 | 918 ++++++++++++++++++++++++++++----------- src/initialize.F90 | 4 +- src/particle_restart.F90 | 30 +- src/source.F90 | 2 +- src/state_point.F90 | 72 +-- 5 files changed, 712 insertions(+), 314 deletions(-) diff --git a/src/hdf5_interface.F90 b/src/hdf5_interface.F90 index 01e50d983a..ce934baa40 100644 --- a/src/hdf5_interface.F90 +++ b/src/hdf5_interface.F90 @@ -64,14 +64,28 @@ module hdf5_interface module procedure read_tally_result_2D end interface read_dataset + interface read_attribute + module procedure read_attribute_double + module procedure read_attribute_double_1D + module procedure read_attribute_double_2D + module procedure read_attribute_integer + module procedure read_attribute_integer_1D + module procedure read_attribute_integer_2D + module procedure read_attribute_string + end interface read_attribute + public :: write_dataset public :: read_dataset + public :: read_attribute public :: file_create public :: file_open public :: file_close public :: create_group public :: open_group public :: close_group + public :: open_dataset + public :: close_dataset + public :: get_shape public :: write_attribute_string contains @@ -243,6 +257,44 @@ contains end if end subroutine close_group +!=============================================================================== +! OPEN_DATASET opens an existing HDF5 dataset +!=============================================================================== + + function open_dataset(group_id, name) result(dataset_id) + integer(HID_T), intent(in) :: group_id + character(*), intent(in) :: name ! name of dataset + integer(HID_T) :: dataset_id + + logical :: exists ! does the dataset exist + integer :: hdf5_err ! HDF5 error code + + ! Check if group exists + call h5ltpath_valid_f(group_id, trim(name), .true., exists, hdf5_err) + + ! open group if it exists + if (exists) then + call h5dopen_f(group_id, trim(name), dataset_id, hdf5_err) + else + call fatal_error("The dataset '" // trim(name) // "' does not exist.") + end if + end function open_dataset + +!=============================================================================== +! CLOSE_GROUP closes HDF5 temp_group +!=============================================================================== + + subroutine close_dataset(dataset_id) + integer(HID_T), intent(inout) :: dataset_id + + integer :: hdf5_err ! HDF5 error code + + call h5dclose_f(dataset_id, hdf5_err) + if (hdf5_err < 0) then + call fatal_error("Unable to close HDF5 dataset.") + end if + end subroutine close_dataset + !=============================================================================== ! WRITE_DOUBLE writes double precision scalar data !=============================================================================== @@ -293,19 +345,27 @@ contains ! READ_DOUBLE reads double precision scalar data !=============================================================================== - subroutine read_double(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name for data - real(8), intent(inout), target :: buffer ! read data to here - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double(buffer, obj_id, name, indep) + real(8), target, intent(inout) :: buffer + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O - integer :: hdf5_err - integer :: data_xfer_mode + integer :: hdf5_err + integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle - type(c_ptr) :: f_ptr + integer(HID_T) :: dset_id + type(c_ptr) :: f_ptr + + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) + else + dset_id = obj_id + end if ! Set up collective vs. independent I/O data_xfer_mode = H5FD_MPIO_COLLECTIVE_F @@ -313,21 +373,20 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) end if - call h5dclose_f(dset, hdf5_err) + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_double !=============================================================================== @@ -396,35 +455,46 @@ contains ! READ_DOUBLE_1D reads double precision 1-D array data !=============================================================================== - subroutine read_double_1D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name of data - real(8), intent(inout), target :: buffer(:) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double_1D(buffer, obj_id, name, indep) + real(8), target, intent(inout) :: buffer(:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(1) - dims(:) = shape(buffer) - if (present(indep)) then - call read_double_1D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_double_1D_explicit(group_id, dims, name, buffer) + dset_id = obj_id end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_double_1D_explicit(dset_id, dims, buffer, indep) + else + call read_double_1D_explicit(dset_id, dims, buffer) + end if + + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_double_1D - subroutine read_double_1D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(1) - character(*), intent(in) :: name ! name of data - real(8), intent(inout), target :: buffer(dims(1)) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double_1D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(1) + real(8), target, intent(inout) :: buffer(dims(1)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle type(c_ptr) :: f_ptr ! Set up collective vs. independent I/O @@ -433,21 +503,18 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) end if - - call h5dclose_f(dset, hdf5_err) end subroutine read_double_1D_explicit !=============================================================================== @@ -516,35 +583,46 @@ contains ! READ_DOUBLE_2D reads double precision 2-D array data !=============================================================================== - subroutine read_double_2D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name of data - real(8), intent(inout), target :: buffer(:,:) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double_2D(buffer, obj_id, name, indep) + real(8), target, intent(inout) :: buffer(:,:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(2) - dims(:) = shape(buffer) - if (present(indep)) then - call read_double_2D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_double_2D_explicit(group_id, dims, name, buffer) + dset_id = obj_id end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_double_2D_explicit(dset_id, dims, buffer, indep) + else + call read_double_2D_explicit(dset_id, dims, buffer) + end if + + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_double_2D - subroutine read_double_2D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(2) - character(*), intent(in) :: name ! name of data - real(8), intent(inout), target :: buffer(dims(1),dims(2)) - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double_2D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(2) + real(8), target, intent(inout) :: buffer(dims(1),dims(2)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle type(c_ptr) :: f_ptr ! Set up collective vs. independent I/O @@ -553,21 +631,18 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) end if - - call h5dclose_f(dset, hdf5_err) end subroutine read_double_2D_explicit !=============================================================================== @@ -636,35 +711,46 @@ contains ! READ_DOUBLE_3D reads double precision 3-D array data !=============================================================================== - subroutine read_double_3D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name of data - real(8), intent(inout), target :: buffer(:,:,:) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double_3D(buffer, obj_id, name, indep) + real(8), target, intent(inout) :: buffer(:,:,:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(3) - dims(:) = shape(buffer) - if (present(indep)) then - call read_double_3D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_double_3D_explicit(group_id, dims, name, buffer) + dset_id = obj_id end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_double_3D_explicit(dset_id, dims, buffer, indep) + else + call read_double_3D_explicit(dset_id, dims, buffer) + end if + + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_double_3D - subroutine read_double_3D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(3) - character(*), intent(in) :: name ! name of data - real(8), intent(inout), target :: buffer(dims(1),dims(2),dims(3)) - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double_3D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(3) + real(8), target, intent(inout) :: buffer(dims(1),dims(2),dims(3)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle type(c_ptr) :: f_ptr ! Set up collective vs. independent I/O @@ -673,21 +759,18 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) end if - - call h5dclose_f(dset, hdf5_err) end subroutine read_double_3D_explicit !=============================================================================== @@ -756,35 +839,46 @@ contains ! READ_DOUBLE_4D reads double precision 4-D array data !=============================================================================== - subroutine read_double_4D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name of data - real(8), intent(inout), target :: buffer(:,:,:,:) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double_4D(buffer, obj_id, name, indep) + real(8), target, intent(inout) :: buffer(:,:,:,:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(4) - dims(:) = shape(buffer) - if (present(indep)) then - call read_double_4D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_double_4D_explicit(group_id, dims, name, buffer) + dset_id = obj_id end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_double_4D_explicit(dset_id, dims, buffer, indep) + else + call read_double_4D_explicit(dset_id, dims, buffer) + end if + + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_double_4D - subroutine read_double_4D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(4) - character(*), intent(in) :: name ! name of data - real(8), intent(inout), target :: buffer(dims(1),dims(2),dims(3),dims(4)) - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double_4D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(4) + real(8), target, intent(inout) :: buffer(dims(1),dims(2),dims(3),dims(4)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle type(c_ptr) :: f_ptr ! Set up collective vs. independent I/O @@ -793,21 +887,18 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) end if - - call h5dclose_f(dset, hdf5_err) end subroutine read_double_4D_explicit !=============================================================================== @@ -860,19 +951,27 @@ contains ! READ_INTEGER reads integer precision scalar data !=============================================================================== - subroutine read_integer(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name for data - integer, intent(inout), target :: buffer ! read data to here - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer(buffer, obj_id, name, indep) + integer, target, intent(inout) :: buffer + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O - integer :: hdf5_err - integer :: data_xfer_mode + integer :: hdf5_err + integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle - type(c_ptr) :: f_ptr + integer(HID_T) :: dset_id + type(c_ptr) :: f_ptr + + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) + else + dset_id = obj_id + end if ! Set up collective vs. independent I/O data_xfer_mode = H5FD_MPIO_COLLECTIVE_F @@ -880,21 +979,20 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) end if - call h5dclose_f(dset, hdf5_err) + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_integer !=============================================================================== @@ -963,35 +1061,46 @@ contains ! READ_INTEGER_1D reads integer precision 1-D array data !=============================================================================== - subroutine read_integer_1D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name of data - integer, intent(inout), target :: buffer(:) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer_1D(buffer, obj_id, name, indep) + integer, target, intent(inout) :: buffer(:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(1) - dims(:) = shape(buffer) - if (present(indep)) then - call read_integer_1D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_integer_1D_explicit(group_id, dims, name, buffer) + dset_id = obj_id end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_integer_1D_explicit(dset_id, dims, buffer, indep) + else + call read_integer_1D_explicit(dset_id, dims, buffer) + end if + + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_integer_1D - subroutine read_integer_1D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(1) - character(*), intent(in) :: name ! name of data - integer, intent(inout), target :: buffer(dims(1)) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer_1D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(1) + integer, target, intent(inout) :: buffer(dims(1)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle type(c_ptr) :: f_ptr ! Set up collective vs. independent I/O @@ -1000,21 +1109,18 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) end if - - call h5dclose_f(dset, hdf5_err) end subroutine read_integer_1D_explicit !=============================================================================== @@ -1083,35 +1189,46 @@ contains ! READ_INTEGER_2D reads integer precision 2-D array data !=============================================================================== - subroutine read_integer_2D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name of data - integer, intent(inout), target :: buffer(:,:) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer_2D(buffer, obj_id, name, indep) + integer, target, intent(inout) :: buffer(:,:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(2) - dims(:) = shape(buffer) - if (present(indep)) then - call read_integer_2D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_integer_2D_explicit(group_id, dims, name, buffer) + dset_id = obj_id end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_integer_2D_explicit(dset_id, dims, buffer, indep) + else + call read_integer_2D_explicit(dset_id, dims, buffer) + end if + + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_integer_2D - subroutine read_integer_2D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(2) - character(*), intent(in) :: name ! name of data - integer, intent(inout), target :: buffer(dims(1),dims(2)) - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer_2D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(2) + integer, target, intent(inout) :: buffer(dims(1),dims(2)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle type(c_ptr) :: f_ptr ! Set up collective vs. independent I/O @@ -1120,21 +1237,18 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) end if - - call h5dclose_f(dset, hdf5_err) end subroutine read_integer_2D_explicit !=============================================================================== @@ -1203,35 +1317,46 @@ contains ! READ_INTEGER_3D reads integer precision 3-D array data !=============================================================================== - subroutine read_integer_3D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name of data - integer, intent(inout), target :: buffer(:,:,:) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer_3D(buffer, obj_id, name, indep) + integer, target, intent(inout) :: buffer(:,:,:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(3) - dims(:) = shape(buffer) - if (present(indep)) then - call read_integer_3D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_integer_3D_explicit(group_id, dims, name, buffer) + dset_id = obj_id end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_integer_3D_explicit(dset_id, dims, buffer, indep) + else + call read_integer_3D_explicit(dset_id, dims, buffer) + end if + + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_integer_3D - subroutine read_integer_3D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(3) - character(*), intent(in) :: name ! name of data - integer, intent(inout), target :: buffer(dims(1),dims(2),dims(3)) - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer_3D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(3) + integer, target, intent(inout) :: buffer(dims(1),dims(2),dims(3)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle type(c_ptr) :: f_ptr ! Set up collective vs. independent I/O @@ -1240,21 +1365,18 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) end if - - call h5dclose_f(dset, hdf5_err) end subroutine read_integer_3D_explicit !=============================================================================== @@ -1323,35 +1445,46 @@ contains ! READ_INTEGER_4D reads integer precision 4-D array data !=============================================================================== - subroutine read_integer_4D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name of data - integer, intent(inout), target :: buffer(:,:,:,:) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer_4D(buffer, obj_id, name, indep) + integer, target, intent(inout) :: buffer(:,:,:,:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(4) - dims(:) = shape(buffer) - if (present(indep)) then - call read_integer_4D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_integer_4D_explicit(group_id, dims, name, buffer) + dset_id = obj_id end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_integer_4D_explicit(dset_id, dims, buffer, indep) + else + call read_integer_4D_explicit(dset_id, dims, buffer) + end if + + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_integer_4D - subroutine read_integer_4D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(4) - character(*), intent(in) :: name ! name of data - integer, intent(inout), target :: buffer(dims(1),dims(2),dims(3),dims(4)) - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer_4D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(4) + integer, target, intent(inout) :: buffer(dims(1),dims(2),dims(3),dims(4)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle type(c_ptr) :: f_ptr ! Set up collective vs. independent I/O @@ -1360,21 +1493,18 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) end if - - call h5dclose_f(dset, hdf5_err) end subroutine read_integer_4D_explicit !=============================================================================== @@ -1427,19 +1557,27 @@ contains ! READ_LONG reads long integer scalar data !=============================================================================== - subroutine read_long(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name for data - integer(8), intent(inout), target :: buffer ! read data to here - logical, intent(in), optional :: indep ! independent I/O + subroutine read_long(buffer, obj_id, name, indep) + integer(8), target, intent(inout) :: buffer + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O - integer :: hdf5_err - integer :: data_xfer_mode + integer :: hdf5_err + integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle - type(c_ptr) :: f_ptr + integer(HID_T) :: dset_id + type(c_ptr) :: f_ptr + + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) + else + dset_id = obj_id + end if ! Set up collective vs. independent I/O data_xfer_mode = H5FD_MPIO_COLLECTIVE_F @@ -1447,21 +1585,20 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, hdf5_integer8_t, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, hdf5_integer8_t, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, hdf5_integer8_t, f_ptr, hdf5_err) + call h5dread_f(dset_id, hdf5_integer8_t, f_ptr, hdf5_err) end if - call h5dclose_f(dset, hdf5_err) + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_long !=============================================================================== @@ -1529,37 +1666,42 @@ contains ! READ_STRING reads string data !=============================================================================== - subroutine read_string(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name for data - character(*), intent(inout), target :: buffer ! read data to here - logical, intent(in), optional :: indep ! independent I/O + subroutine read_string(buffer, obj_id, name, indep) + character(*), target, intent(inout) :: buffer + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle - integer(HID_T) :: dspace ! data or file space handle + integer(HID_T) :: dset_id + integer(HID_T) :: space_id integer(HID_T) :: filetype integer(HID_T) :: memtype integer(SIZE_T) :: size integer(SIZE_T) :: n type(c_ptr) :: f_ptr + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) + else + dset_id = obj_id + end if + ! Set up collective vs. independent I/O data_xfer_mode = H5FD_MPIO_COLLECTIVE_F if (present(indep)) then if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - ! Get dataset and dataspace - call h5dopen_f(group_id, trim(name), dset, hdf5_err) - call h5dget_space_f(dset, dspace, hdf5_err) + ! Get dataspace + call h5dget_space_f(dset_id, space_id, hdf5_err) ! Make sure buffer is large enough - call h5dget_type_f(dset, filetype, hdf5_err) + call h5dget_type_f(dset_id, filetype, hdf5_err) call h5tget_size_f(filetype, size, hdf5_err) if (size > len(buffer) + 1) then call fatal_error("Character buffer is not long enough to & @@ -1574,20 +1716,21 @@ contains ! Get pointer to start of string f_ptr = c_loc(buffer(1:1)) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, memtype, f_ptr, hdf5_err, mem_space_id=dspace, & - xfer_prp=plist) + call h5dread_f(dset_id, memtype, f_ptr, hdf5_err, & + mem_space_id=space_id, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, memtype, f_ptr, hdf5_err, mem_space_id=dspace) + call h5dread_f(dset_id, memtype, f_ptr, hdf5_err, mem_space_id=space_id) end if - call h5dclose_f(dset, hdf5_err) - call h5sclose_f(dspace, hdf5_err) + if (present(name)) call h5dclose_f(dset_id, hdf5_err) + + call h5sclose_f(space_id, hdf5_err) call h5tclose_f(filetype, hdf5_err) call h5tclose_f(memtype, hdf5_err) end subroutine read_string @@ -1674,36 +1817,45 @@ contains ! READ_STRING_1D reads string 1-D array data !=============================================================================== - subroutine read_string_1D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name - character(*), intent(inout), target :: buffer(:) - logical, intent(in), optional :: indep ! independent I/O + subroutine read_string_1D(buffer, obj_id, name, indep) + character(*), target, intent(inout) :: buffer(:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(1) - dims(:) = shape(buffer) - if (present(indep)) then - call read_string_1D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_string_1D_explicit(group_id, dims, name, buffer) + dset_id = obj_id + end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_string_1D_explicit(dset_id, dims, buffer, indep) + else + call read_string_1D_explicit(dset_id, dims, buffer) end if end subroutine read_string_1D - subroutine read_string_1D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(1) - character(*), intent(in) :: name - character(*), intent(inout), target :: buffer(dims(1)) - logical, intent(in), optional :: indep ! independent I/O + subroutine read_string_1D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(1) + character(*), target, intent(inout) :: buffer(dims(1)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle - integer(HID_T) :: dspace ! data or file space handle + integer(HID_T) :: space_id integer(HID_T) :: filetype integer(HID_T) :: memtype integer(SIZE_T) :: size @@ -1717,11 +1869,10 @@ contains end if ! Get dataset and dataspace - call h5dopen_f(group_id, trim(name), dset, hdf5_err) - call h5dget_space_f(dset, dspace, hdf5_err) + call h5dget_space_f(dset_id, space_id, hdf5_err) ! Make sure buffer is large enough - call h5dget_type_f(dset, filetype, hdf5_err) + call h5dget_type_f(dset_id, filetype, hdf5_err) call h5tget_size_f(filetype, size, hdf5_err) if (size > len(buffer(1)) + 1) then call fatal_error("Character buffer is not long enough to & @@ -1736,20 +1887,19 @@ contains ! Get pointer to start of string f_ptr = c_loc(buffer(1)(1:1)) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, memtype, f_ptr, hdf5_err, mem_space_id=dspace, & + call h5dread_f(dset_id, memtype, f_ptr, hdf5_err, mem_space_id=space_id, & xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, memtype, f_ptr, hdf5_err, mem_space_id=dspace) + call h5dread_f(dset_id, memtype, f_ptr, hdf5_err, mem_space_id=space_id) end if - call h5dclose_f(dset, hdf5_err) - call h5sclose_f(dspace, hdf5_err) + call h5sclose_f(space_id, hdf5_err) call h5tclose_f(filetype, hdf5_err) call h5tclose_f(memtype, hdf5_err) end subroutine read_string_1D_explicit @@ -1893,6 +2043,254 @@ contains call h5dclose_f(dset, hdf5_err) end subroutine read_tally_result_2D_explicit + subroutine read_attribute_double(buffer, obj_id, name) + real(8), intent(inout), target :: buffer + integer(HID_T), intent(in) :: obj_id + character(*), intent(in) :: name + + integer :: hdf5_err + integer(HID_T) :: attr_id + type(c_ptr) :: f_ptr + + call h5aopen_f(obj_id, trim(name), attr_id, hdf5_err) + f_ptr = c_loc(buffer) + call h5aread_f(attr_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + call h5aclose_f(attr_id, hdf5_err) + end subroutine read_attribute_double + + subroutine read_attribute_double_1D(buffer, obj_id, name) + real(8), target, allocatable, intent(inout) :: buffer(:) + integer(HID_T), intent(in) :: obj_id + character(*), intent(in) :: name + + integer :: hdf5_err + integer(HID_T) :: space_id + integer(HID_T) :: attr_id + integer(HSIZE_T) :: dims(1) + integer(HSIZE_T) :: maxdims(1) + + call h5aopen_f(obj_id, trim(name), attr_id, hdf5_err) + + if (allocated(buffer)) then + dims(:) = shape(buffer) + else + call h5aget_space_f(attr_id, space_id, hdf5_err) + call h5sget_simple_extent_dims_f(space_id, dims, maxdims, hdf5_err) + allocate(buffer(dims(1))) + call h5sclose_f(space_id, hdf5_err) + end if + + call read_attribute_double_1D_explicit(attr_id, dims, buffer) + call h5aclose_f(attr_id, hdf5_err) + end subroutine read_attribute_double_1D + + subroutine read_attribute_double_1D_explicit(attr_id, dims, buffer) + integer(HID_T), intent(in) :: attr_id + integer(HSIZE_T), intent(in) :: dims(1) + real(8), target, intent(inout) :: buffer(dims(1)) + + integer :: hdf5_err + type(c_ptr) :: f_ptr + + f_ptr = c_loc(buffer) + call h5aread_f(attr_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + end subroutine read_attribute_double_1D_explicit + + subroutine read_attribute_double_2D(buffer, obj_id, name) + real(8), target, allocatable, intent(inout) :: buffer(:,:) + integer(HID_T), intent(in) :: obj_id + character(*), intent(in) :: name + + integer :: hdf5_err + integer(HID_T) :: space_id + integer(HID_T) :: attr_id + integer(HSIZE_T) :: dims(2) + integer(HSIZE_T) :: maxdims(2) + + call h5aopen_f(obj_id, trim(name), attr_id, hdf5_err) + + if (allocated(buffer)) then + dims(:) = shape(buffer) + else + call h5aget_space_f(attr_id, space_id, hdf5_err) + call h5sget_simple_extent_dims_f(space_id, dims, maxdims, hdf5_err) + allocate(buffer(dims(1), dims(2))) + call h5sclose_f(space_id, hdf5_err) + end if + + call read_attribute_double_2D_explicit(attr_id, dims, buffer) + call h5aclose_f(attr_id, hdf5_err) + end subroutine read_attribute_double_2D + + subroutine read_attribute_double_2D_explicit(attr_id, dims, buffer) + integer(HID_T), intent(in) :: attr_id + integer(HSIZE_T), intent(in) :: dims(2) + real(8), target, intent(inout) :: buffer(dims(1),dims(2)) + + integer :: hdf5_err + type(c_ptr) :: f_ptr + + f_ptr = c_loc(buffer) + call h5aread_f(attr_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + end subroutine read_attribute_double_2D_explicit + + subroutine read_attribute_integer(buffer, obj_id, name) + integer, intent(inout), target :: buffer + integer(HID_T), intent(in) :: obj_id + character(*), intent(in) :: name + + integer :: hdf5_err + integer(HID_T) :: attr_id + type(c_ptr) :: f_ptr + + call h5aopen_f(obj_id, trim(name), attr_id, hdf5_err) + f_ptr = c_loc(buffer) + call h5aread_f(attr_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + call h5aclose_f(attr_id, hdf5_err) + end subroutine read_attribute_integer + + subroutine read_attribute_integer_1D(buffer, obj_id, name) + integer, target, allocatable, intent(inout) :: buffer(:) + integer(HID_T), intent(in) :: obj_id + character(*), intent(in) :: name + + integer :: hdf5_err + integer(HID_T) :: space_id + integer(HID_T) :: attr_id + integer(HSIZE_T) :: dims(1) + integer(HSIZE_T) :: maxdims(1) + + call h5aopen_f(obj_id, trim(name), attr_id, hdf5_err) + + if (allocated(buffer)) then + dims(:) = shape(buffer) + else + call h5aget_space_f(attr_id, space_id, hdf5_err) + call h5sget_simple_extent_dims_f(space_id, dims, maxdims, hdf5_err) + allocate(buffer(dims(1))) + call h5sclose_f(space_id, hdf5_err) + end if + + call read_attribute_integer_1D_explicit(attr_id, dims, buffer) + call h5aclose_f(attr_id, hdf5_err) + end subroutine read_attribute_integer_1D + + subroutine read_attribute_integer_1D_explicit(attr_id, dims, buffer) + integer(HID_T), intent(in) :: attr_id + integer(HSIZE_T), intent(in) :: dims(1) + integer, target, intent(inout) :: buffer(dims(1)) + + integer :: hdf5_err + type(c_ptr) :: f_ptr + + f_ptr = c_loc(buffer) + call h5aread_f(attr_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + end subroutine read_attribute_integer_1D_explicit + + subroutine read_attribute_integer_2D(buffer, obj_id, name) + integer, target, allocatable, intent(inout) :: buffer(:,:) + integer(HID_T), intent(in) :: obj_id + character(*), intent(in) :: name + + integer :: hdf5_err + integer(HID_T) :: space_id + integer(HID_T) :: attr_id + integer(HSIZE_T) :: dims(2) + integer(HSIZE_T) :: maxdims(2) + + call h5aopen_f(obj_id, trim(name), attr_id, hdf5_err) + + if (allocated(buffer)) then + dims(:) = shape(buffer) + else + call h5aget_space_f(attr_id, space_id, hdf5_err) + call h5sget_simple_extent_dims_f(space_id, dims, maxdims, hdf5_err) + allocate(buffer(dims(1), dims(2))) + call h5sclose_f(space_id, hdf5_err) + end if + + call read_attribute_integer_2D_explicit(attr_id, dims, buffer) + call h5aclose_f(attr_id, hdf5_err) + end subroutine read_attribute_integer_2D + + subroutine read_attribute_integer_2D_explicit(attr_id, dims, buffer) + integer(HID_T), intent(in) :: attr_id + integer(HSIZE_T), intent(in) :: dims(2) + integer, target, intent(inout) :: buffer(dims(1),dims(2)) + + integer :: hdf5_err + type(c_ptr) :: f_ptr + + f_ptr = c_loc(buffer) + call h5aread_f(attr_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + end subroutine read_attribute_integer_2D_explicit + + subroutine read_attribute_string(buffer, obj_id, name) + character(*), intent(inout), target :: buffer ! read data to here + integer(HID_T), intent(in) :: obj_id + character(*), intent(in) :: name ! name for data + + integer :: hdf5_err + integer(HID_T) :: attr_id ! data set handle + integer(HID_T) :: filetype + integer(HID_T) :: memtype + integer(SIZE_T) :: i + integer(SIZE_T) :: size + character(kind=C_CHAR), allocatable, target :: temp_buffer(:) + type(c_ptr) :: f_ptr + + ! Get dataset and dataspace + call h5aopen_f(obj_id, trim(name), attr_id, hdf5_err) + + ! Make sure buffer is large enough + call h5aget_type_f(attr_id, filetype, hdf5_err) + call h5tget_size_f(filetype, size, hdf5_err) + allocate(temp_buffer(size)) + if (size > len(buffer)) then + call fatal_error("Character buffer is not long enough to & + &read HDF5 string.") + end if + + ! Get datatype in memory based on Fortran character + call h5tcopy_f(H5T_C_S1, memtype, hdf5_err) + call h5tset_size_f(memtype, size + 1, hdf5_err) + + ! Get pointer to start of string + f_ptr = c_loc(temp_buffer(1)) + + call h5aread_f(attr_id, memtype, f_ptr, hdf5_err) + buffer = '' + do i = 1, size + buffer(i:i) = temp_buffer(i) + end do + deallocate(temp_buffer) + + call h5aclose_f(attr_id, hdf5_err) + call h5tclose_f(filetype, hdf5_err) + call h5tclose_f(memtype, hdf5_err) + end subroutine read_attribute_string + + subroutine get_shape(obj_id, dims) + integer(HID_T), intent(in) :: obj_id + integer(HSIZE_T), intent(out) :: dims(:) + + integer :: hdf5_err + integer :: type + integer(HID_T) :: space_id + integer(HSIZE_T) :: maxdims(size(dims)) + + call h5iget_type_f(obj_id, type, hdf5_err) + if (type == H5I_DATASET_F) then + call h5dget_space_f(obj_id, space_id, hdf5_err) + call h5sget_simple_extent_dims_f(space_id, dims, maxdims, hdf5_err) + call h5sclose_f(space_id, hdf5_err) + elseif (type == H5I_ATTR_F) then + call h5aget_space_f(obj_id, space_id, hdf5_err) + call h5sget_simple_extent_dims_f(space_id, dims, maxdims, hdf5_err) + call h5sclose_f(space_id, hdf5_err) + end if + end subroutine get_shape + function using_mpio_device(obj_id) result(mpio) integer(HID_T), intent(in) :: obj_id logical :: mpio diff --git a/src/initialize.F90 b/src/initialize.F90 index 09bedb1388..8c4eabbc13 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -375,7 +375,7 @@ contains ! Check what type of file this is file_id = file_open(argv(i), 'r', parallel=.true.) - call read_dataset(file_id, 'filetype', filetype) + call read_dataset(filetype, file_id, 'filetype') call file_close(file_id) ! Set path and flag for type of run @@ -401,7 +401,7 @@ contains ! Check file type is a source file file_id = file_open(argv(i), 'r', parallel=.true.) - call read_dataset(file_id, 'filetype', filetype) + call read_dataset(filetype, file_id, 'filetype') call file_close(file_id) if (filetype /= 'source') then call fatal_error("Second file after restart flag must be a & diff --git a/src/particle_restart.F90 b/src/particle_restart.F90 index 9d49a4f977..4040a471ab 100644 --- a/src/particle_restart.F90 +++ b/src/particle_restart.F90 @@ -71,7 +71,7 @@ contains integer :: int_scalar integer(HID_T) :: file_id - character(MAX_WORD_LEN) :: mode + character(MAX_WORD_LEN) :: tempstr ! Write meessage call write_message("Loading particle restart file " & @@ -81,25 +81,25 @@ contains file_id = file_open(path_particle_restart, 'r') ! Read data from file - call read_dataset(file_id, 'filetype', int_scalar) - call read_dataset(file_id, 'revision', int_scalar) - call read_dataset(file_id, 'current_batch', current_batch) - call read_dataset(file_id, 'gen_per_batch', gen_per_batch) - call read_dataset(file_id, 'current_gen', current_gen) - call read_dataset(file_id, 'n_particles', n_particles) - call read_dataset(file_id, 'run_mode', mode) - select case (mode) + call read_dataset(tempstr, file_id, 'filetype') + call read_dataset(int_scalar, file_id, 'revision') + call read_dataset(current_batch, file_id, 'current_batch') + call read_dataset(gen_per_batch, file_id, 'gen_per_batch') + call read_dataset(current_gen, file_id, 'current_gen') + call read_dataset(n_particles, file_id, 'n_particles') + call read_dataset(tempstr, file_id, 'run_mode') + select case (tempstr) case ('k-eigenvalue') previous_run_mode = MODE_EIGENVALUE case ('fixed source') previous_run_mode = MODE_FIXEDSOURCE end select - call read_dataset(file_id, 'id', p%id) - call read_dataset(file_id, 'weight', p%wgt) - call read_dataset(file_id, 'energy', p%E) - call read_dataset(file_id, 'energy_group', p%g) - call read_dataset(file_id, 'xyz', p%coord(1)%xyz) - call read_dataset(file_id, 'uvw', p%coord(1)%uvw) + call read_dataset(p%id, file_id, 'id') + call read_dataset(p%wgt, file_id, 'weight') + call read_dataset(p%E, file_id, 'energy') + call read_dataset(p%g, file_id, 'energy_group') + call read_dataset(p%coord(1)%xyz, file_id, 'xyz') + call read_dataset(p%coord(1)%uvw, file_id, 'uvw') ! Set particle last attributes p%last_wgt = p%wgt diff --git a/src/source.F90 b/src/source.F90 index ad565c95c0..194c8c6add 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -53,7 +53,7 @@ contains file_id = file_open(path_source, 'r', parallel=.true.) ! Read the file type - call read_dataset(file_id, "filetype", filetype) + call read_dataset(filetype, file_id, "filetype") ! Check to make sure this is a source file if (filetype /= 'source') then diff --git a/src/state_point.F90 b/src/state_point.F90 index cbd6c017a6..81abf0c1b9 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -703,25 +703,25 @@ contains file_id = file_open(path_state_point, 'r', parallel=.true.) ! Read filetype - call read_dataset(file_id, "filetype", word) + call read_dataset(word, file_id, "filetype") if (word /= 'statepoint') then call fatal_error("OpenMC tried to restart from a non-statepoint file.") end if ! Read revision number for state point file and make sure it matches with ! current version - call read_dataset(file_id, "revision", int_array(1)) + call read_dataset(int_array(1), file_id, "revision") if (int_array(1) /= REVISION_STATEPOINT) then call fatal_error("State point version does not match current version & &in OpenMC.") end if ! Read and overwrite random number seed - call read_dataset(file_id, "seed", seed) + call read_dataset(seed, file_id, "seed") ! It is not impossible for a state point to be generated from a CE run but ! to be loaded in to an MG run (or vice versa), check to prevent that. - call read_dataset(file_id, "run_CE", sp_run_CE) + call read_dataset(sp_run_CE, file_id, "run_CE") if (sp_run_CE == 0 .and. run_CE) then call fatal_error("State point file is from multi-group run but & & current run is continous-energy!") @@ -731,24 +731,24 @@ contains end if ! Read and overwrite run information except number of batches - call read_dataset(file_id, "run_mode", word) + call read_dataset(word, file_id, "run_mode") select case(word) case ('fixed source') run_mode = MODE_FIXEDSOURCE case ('k-eigenvalue') run_mode = MODE_EIGENVALUE end select - call read_dataset(file_id, "n_particles", n_particles) - call read_dataset(file_id, "n_batches", int_array(1)) + call read_dataset(n_particles, file_id, "n_particles") + call read_dataset(int_array(1), file_id, "n_batches") ! Take maximum of statepoint n_batches and input n_batches n_batches = max(n_batches, int_array(1)) ! Read batch number to restart at - call read_dataset(file_id, "current_batch", restart_batch) + call read_dataset(restart_batch, file_id, "current_batch") ! Check for source in statepoint if needed - call read_dataset(file_id, "source_present", int_array(1)) + call read_dataset(int_array(1), file_id, "source_present") if (int_array(1) == 1) then source_present = .true. else @@ -762,37 +762,37 @@ contains ! Read information specific to eigenvalue run if (run_mode == MODE_EIGENVALUE) then - call read_dataset(file_id, "n_inactive", int_array(1)) - call read_dataset(file_id, "gen_per_batch", gen_per_batch) - call read_dataset(file_id, "k_generation", & - k_generation(1:restart_batch*gen_per_batch)) - call read_dataset(file_id, "entropy", & - entropy(1:restart_batch*gen_per_batch)) - call read_dataset(file_id, "k_col_abs", k_col_abs) - call read_dataset(file_id, "k_col_tra", k_col_tra) - call read_dataset(file_id, "k_abs_tra", k_abs_tra) - call read_dataset(file_id, "k_combined", real_array(1:2)) + call read_dataset(int_array(1), file_id, "n_inactive") + call read_dataset(gen_per_batch, file_id, "gen_per_batch") + call read_dataset(k_generation(1:restart_batch*gen_per_batch), & + file_id, "k_generation") + call read_dataset(entropy(1:restart_batch*gen_per_batch), & + file_id, "entropy") + call read_dataset(k_col_abs, file_id, "k_col_abs") + call read_dataset(k_col_tra, file_id, "k_col_tra") + call read_dataset(k_abs_tra, file_id, "k_abs_tra") + call read_dataset(real_array(1:2), file_id, "k_combined") ! Take maximum of statepoint n_inactive and input n_inactive n_inactive = max(n_inactive, int_array(1)) ! Read in to see if CMFD was on - call read_dataset(file_id, "cmfd_on", int_array(1)) + call read_dataset(int_array(1), file_id, "cmfd_on") ! Read in CMFD info if (int_array(1) == 1) then cmfd_group = open_group(file_id, "cmfd") - call read_dataset(cmfd_group, "indices", cmfd%indices) - call read_dataset(cmfd_group, "k_cmfd", cmfd%k_cmfd(1:restart_batch)) - call read_dataset(cmfd_group, "cmfd_src", cmfd%cmfd_src) - call read_dataset(cmfd_group, "cmfd_entropy", & - cmfd%entropy(1:restart_batch)) - call read_dataset(cmfd_group, "cmfd_balance", & - cmfd%balance(1:restart_batch)) - call read_dataset(cmfd_group, "cmfd_dominance", & - cmfd%dom(1:restart_batch)) - call read_dataset(cmfd_group, "cmfd_srccmp", & - cmfd%src_cmp(1:restart_batch)) + call read_dataset(cmfd%indices, cmfd_group, "indices") + call read_dataset(cmfd%k_cmfd(1:restart_batch), cmfd_group, "k_cmfd") + call read_dataset(cmfd%cmfd_src, cmfd_group, "cmfd_src") + call read_dataset(cmfd%entropy(1:restart_batch), cmfd_group, & + "cmfd_entropy") + call read_dataset(cmfd%balance(1:restart_batch), cmfd_group, & + "cmfd_balance") + call read_dataset(cmfd%dom(1:restart_batch), cmfd_group, & + "cmfd_dominance") + call read_dataset(cmfd%src_cmp(1:restart_batch), cmfd_group, & + "cmfd_srccmp") call close_group(cmfd_group) end if end if @@ -812,14 +812,14 @@ contains #endif ! Read number of realizations for global tallies - call read_dataset(file_id, "n_realizations", n_realizations, indep=.true.) + call read_dataset(n_realizations, file_id, "n_realizations", indep=.true.) ! Read global tally data call read_dataset(file_id, "global_tallies", global_tallies) ! Check if tally results are present tallies_group = open_group(file_id, "tallies") - call read_dataset(tallies_group, "tallies_present", int_array(1), & + call read_dataset(int_array(1), tallies_group, "tallies_present", & indep=.true.) ! Read in sum and sum squared @@ -832,8 +832,8 @@ contains tally_group = open_group(tallies_group, "tally " // & trim(to_str(tally % id))) call read_dataset(tally_group, "results", tally % results) - call read_dataset(tally_group, "n_realizations", & - tally % n_realizations) + call read_dataset(tally % n_realizations, tally_group, & + "n_realizations") call close_group(tally_group) end do TALLY_RESULTS end if @@ -859,7 +859,7 @@ contains file_id = file_open(path_source_point, 'r', parallel=.true.) ! Read file type - call read_dataset(file_id, "filetype", int_array(1)) + call read_dataset(int_array(1), file_id, "filetype") end if From 68d2e5b047d20964b866ce4fa555008f0ab3edb2 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Fri, 13 May 2016 13:18:18 -0400 Subject: [PATCH 535/650] Fixed hosed mgxs-part-iii notebook --- .../pythonapi/examples/mgxs-part-iii.ipynb | 509 ++++++++++++++---- 1 file changed, 417 insertions(+), 92 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index 152a68aff6..ece33e3f54 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -23,11 +23,24 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 1, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/wboyd/anaconda2/lib/python2.7/site-packages/matplotlib/__init__.py:1350: UserWarning: This call to matplotlib.use() has no effect\n", + "because the backend has already been chosen;\n", + "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", + "or matplotlib.backends is imported for the first time.\n", + "\n", + " warnings.warn(_use_error_msg)\n" + ] + } + ], "source": [ "import math\n", "import pickle\n", @@ -55,7 +68,7 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 2, "metadata": { "collapsed": false }, @@ -79,7 +92,7 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 3, "metadata": { "collapsed": true }, @@ -114,7 +127,7 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 4, "metadata": { "collapsed": true }, @@ -137,7 +150,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 5, "metadata": { "collapsed": true }, @@ -165,7 +178,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 6, "metadata": { "collapsed": true }, @@ -202,7 +215,7 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 7, "metadata": { "collapsed": true }, @@ -239,7 +252,7 @@ }, { "cell_type": "code", - "execution_count": 78, + "execution_count": 8, "metadata": { "collapsed": true }, @@ -261,7 +274,7 @@ }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 9, "metadata": { "collapsed": true }, @@ -293,7 +306,7 @@ }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 10, "metadata": { "collapsed": true }, @@ -320,7 +333,7 @@ }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 11, "metadata": { "collapsed": true }, @@ -333,7 +346,7 @@ }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 12, "metadata": { "collapsed": true }, @@ -352,7 +365,7 @@ }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 13, "metadata": { "collapsed": false }, @@ -388,7 +401,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 14, "metadata": { "collapsed": true }, @@ -416,7 +429,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 15, "metadata": { "collapsed": false }, @@ -427,7 +440,7 @@ "0" ] }, - "execution_count": 58, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -439,19 +452,19 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAWFSURB\nVGje7Zs7cttADIZ9CSvXcrP0iCxUqbBc8Ag6xR6BhV2EvYvwFD4CCx1ABT1jMdgndpegRQnOrCbj\npPlGESISC4A/gd27e8H583CX3b4+iKJrRHkS4vkghMPBonRYWGwtfgD2YN+dRDUOoh6lACw0Noi9\nw2fESuEoAR/uVuMolX039oXGT7F3eFL2iEfhUX1f4cPdL/ishs+68ai+udE4xPhexbjX2FfjGNoP\nj/DPNX4Tsd+EODr8FvsVdf1Hd9P2VvCi4+s/aXvrf+upAD+1/9GV1mkOH5X9vV6THtfvACslcaUC\nbESL61drBPtdI8SrFMWrELsXCkuFDYW75gbiP7d9Cf7bAYI/aCwUShrBvh30+lWQkzVgZ/HD4Oix\nNCgcQpJ3BxU/Ln91elKoM5VEE38QtJ+Yv6cQ9xjKNYayyl8TypP8DfJnQ2H/b/N3ye9P83cT33SQ\nv/sQh9gV7zZ/0dNj5HQaC5vVzv9+/WFN2w8KVaZ2BwL1+pv4g0x1QRfjq0dB4Q3kT277oP6VNL6g\nKxNU9a8zK+WLbi/WwpdihbboKqyxFOulHMj6v4W/AXbmUeAxrv9J/CqEBXaRKsXaodD4nsYvkT/G\n6H1D4SR/iPy1Roj9JsQ5e18/7EUHv1+Fvx/Xj5V9Ugb5K8TW4TZEEdcvoz/up0VTe9qsVIppKVX6\na7D6y9ZvwEKjrtQxPtv6fXII9vCxKOGaIeAIfEF8IvAG8ie3vRK9rRQl+PPpSctbhfpTUCpviH+k\nxsZgpT91+snoX1l49KK3iUQvICRy5aUw6l8leoVwoo3Uv1rKreF/UFLY6d9QP4L9Wf2r7EP9GOSf\ncsjZ56f60kz+XmVPXv+RuP49ff0T/53Rv6n/7m2lvXT9Wqd/VUz8hvh5M/ED6ILmt4mfHYZSaePn\nTWpsf/SvqV9O6dLYYClLEetnoH/LBLFoBvrX189uTv8++kot5vTvQD4/9jP690g9P/4z/bvo/XVG\n/xYoZZx+8fr3MxAtsf7tUOkG2JqsTtCIpgCt/qX1226KqZS7gfzJbe+c9jLrtIZ8lXD+s4umlW6A\nKIVrlML2/cXjgPFjlJqIRC+Fj0bVJe+vSh56pSdR6YkQ1ygF10Wqf0FeLta/iKn9Mv1L24ti2e+7\nW4n1b3T/W+L+t9H9T/SvVboUmqJJon1/hZq8LnzRDlDrX1u0xRT1+6vEpomMmyYkqi95vIH8yW1P\nN+122KkLcNLKi/WTF01z/cNASrWE/l3ev6T17zX909z9X27/euK/Rf3zWP+Waf9eEv37KkWJ+rfD\nl6ZglNDa+cEBhwYDvkoNP/rX69814NaI3imq0l7OYDy/qSdDGwr7r+Y3VbzoKZr6XX2lfxfOb87q\nXzr+b1j/Xlp/nP6dn98McdH7cn7zjPObKsYWS3Eb9w8n85smHtqQuPuZ30T2dlIT6F9xFl+n8xsl\negL9a4c2KRr9W4rp/GYqumiM9Nec/j2v/yj9u1h//hv9e93vc++f63/u+rPjL3f+5Lbn1j9m/eXW\nf+7zh/v8+2b9e/Hzn6s/uPqHrb8g71n6L3f+5Lbnvn8w33+4718/+5d47//c/gO7/5E7/nPbc/tv\n3P4fs//I7X9y+6/fqH+v6j9z+9/c/ju3/8+eP+TOn9z23PkXc/7Gnf9x5483q38Xzn+582fu/Js9\nfy8kb/6fO39y23P3n3S8/S/c/Tfc/T83uX/pgv1XE/9duP+Lu/+Mvf8td/znti8kb/8ld/9nx9t/\nSjw/Ltr/yt1/+337f6/bf0zoB3nJ/ucVc/81d/83e/957vzJbc89/8A8f8E9/5HE78XnT/4H/cs5\nf8Q9/8Q9f8U+/5U7f3Lbc88fdrzzjyvm+cuf/Uu887/c88fs88954/8vO4SjPC+2QRIAAAAldEVY\ndGRhdGU6Y3JlYXRlADIwMTYtMDUtMTNUMTA6MTI6MjAtMDQ6MDDbBmr4AAAAJXRFWHRkYXRlOm1v\nZGlmeQAyMDE2LTA1LTEzVDEwOjEyOjIwLTA0OjAwqlvSRAAAAABJRU5ErkJggg==\n", + "image/png": "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\n", "text/plain": [ "" ] }, - "execution_count": 59, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -487,7 +500,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -507,7 +520,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 18, "metadata": { "collapsed": false }, @@ -545,7 +558,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 19, "metadata": { "collapsed": false }, @@ -566,7 +579,7 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 20, "metadata": { "collapsed": true }, @@ -588,7 +601,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 21, "metadata": { "collapsed": true }, @@ -607,7 +620,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 22, "metadata": { "collapsed": true }, @@ -628,7 +641,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 23, "metadata": { "collapsed": true }, @@ -648,7 +661,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -676,7 +689,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 25, "metadata": { "collapsed": true }, @@ -688,7 +701,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 26, "metadata": { "collapsed": false }, @@ -713,8 +726,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 19feb55e6d5e8350398627f39fb55ee8e2e63011\n", - " Date/Time: 2016-05-13 10:12:20\n", + " Git SHA1: 47ef320ad517612376e181ec6a6bc42ca0db98ce\n", + " Date/Time: 2016-05-13 13:14:08\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -801,20 +814,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.0700E-01 seconds\n", - " Reading cross sections = 1.0600E-01 seconds\n", - " Total time in simulation = 6.4501E+01 seconds\n", - " Time in transport only = 6.4461E+01 seconds\n", - " Time in inactive batches = 5.2590E+00 seconds\n", - " Time in active batches = 5.9242E+01 seconds\n", - " Time synchronizing fission bank = 4.0000E-03 seconds\n", - " Sampling source sites = 2.0000E-03 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", - " Time accumulating tallies = 3.0000E-03 seconds\n", + " Total time for initialization = 7.4900E-01 seconds\n", + " Reading cross sections = 2.6400E-01 seconds\n", + " Total time in simulation = 8.0114E+01 seconds\n", + " Time in transport only = 8.0033E+01 seconds\n", + " Time in inactive batches = 6.5120E+00 seconds\n", + " Time in active batches = 7.3602E+01 seconds\n", + " Time synchronizing fission bank = 3.2000E-02 seconds\n", + " Sampling source sites = 3.0000E-03 seconds\n", + " SEND/RECV source sites = 2.8000E-02 seconds\n", + " Time accumulating tallies = 2.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 6.5026E+01 seconds\n", - " Calculation Rate (inactive) = 4753.76 neutrons/second\n", - " Calculation Rate (active) = 1687.99 neutrons/second\n", + " Total time elapsed = 8.0892E+01 seconds\n", + " Calculation Rate (inactive) = 3839.07 neutrons/second\n", + " Calculation Rate (active) = 1358.66 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -832,7 +845,7 @@ "0" ] }, - "execution_count": 69, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -858,32 +871,11 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 27, "metadata": { "collapsed": false }, - "outputs": [ - { - "ename": "KeyError", - "evalue": "'Unable to open object (Component not found)'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# Load the last statepoint file\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0msp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mopenmc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mStatePoint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'statepoint.50.h5'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[1;32m/usr/local/lib/python2.7/dist-packages/openmc-0.7.1-py2.7.egg/openmc/statepoint.pyc\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, filename, autolink)\u001b[0m\n\u001b[0;32m 135\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mos\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mexists\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpath_summary\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 136\u001b[0m \u001b[0msu\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mopenmc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mSummary\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpath_summary\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 137\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlink_with_summary\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msu\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 138\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 139\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m/usr/local/lib/python2.7/dist-packages/openmc-0.7.1-py2.7.egg/openmc/statepoint.pyc\u001b[0m in \u001b[0;36mlink_with_summary\u001b[1;34m(self, summary)\u001b[0m\n\u001b[0;32m 639\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 640\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 641\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0mtally_id\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtally\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtallies\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 642\u001b[0m \u001b[0msummary_tally\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msummary\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtallies\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mtally_id\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 643\u001b[0m \u001b[0mtally\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mname\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msummary_tally\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m/usr/local/lib/python2.7/dist-packages/openmc-0.7.1-py2.7.egg/openmc/statepoint.pyc\u001b[0m in \u001b[0;36mtallies\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 376\u001b[0m \u001b[1;31m# Read the Tally size specifications\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 377\u001b[0m \u001b[0mn_realizations\u001b[0m \u001b[1;33m=\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m\\\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 378\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_f\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'{0}{1}/n_realizations'\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbase\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtally_key\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mvalue\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 379\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 380\u001b[0m \u001b[1;31m# Create Tally object and assign basic properties\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m/usr/lib/python2.7/dist-packages/h5py/_objects.pyx\u001b[0m in \u001b[0;36mh5py._objects.with_phil.wrapper (/home/wboyd/Downloads/h5py-2.5.0/h5py/_objects.c:2453)\u001b[1;34m()\u001b[0m\n\u001b[0;32m 52\u001b[0m \u001b[0mlock\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mneeded\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mit\u001b[0m \u001b[0macquires\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mlock\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mnotifies\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mfirst\u001b[0m \u001b[0mthread\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 53\u001b[0m \u001b[0mto\u001b[0m \u001b[0mrelease\u001b[0m \u001b[0mit\u001b[0m \u001b[0mwhen\u001b[0m \u001b[0mit\u001b[0m\u001b[0;31m'\u001b[0m\u001b[0ms\u001b[0m \u001b[0mdone\u001b[0m\u001b[1;33m.\u001b[0m \u001b[0mThis\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mall\u001b[0m \u001b[0mmade\u001b[0m \u001b[0mpossible\u001b[0m \u001b[0mby\u001b[0m \u001b[0mthe\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 54\u001b[1;33m \u001b[0mwonderful\u001b[0m \u001b[0mGIL\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 55\u001b[0m \"\"\"\n\u001b[0;32m 56\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mpythread\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPyThread_type_lock\u001b[0m \u001b[0m_real_lock\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m/usr/lib/python2.7/dist-packages/h5py/_objects.pyx\u001b[0m in \u001b[0;36mh5py._objects.with_phil.wrapper (/home/wboyd/Downloads/h5py-2.5.0/h5py/_objects.c:2410)\u001b[1;34m()\u001b[0m\n\u001b[0;32m 53\u001b[0m \u001b[0mto\u001b[0m \u001b[0mrelease\u001b[0m \u001b[0mit\u001b[0m \u001b[0mwhen\u001b[0m \u001b[0mit\u001b[0m\u001b[0;31m'\u001b[0m\u001b[0ms\u001b[0m \u001b[0mdone\u001b[0m\u001b[1;33m.\u001b[0m \u001b[0mThis\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mall\u001b[0m \u001b[0mmade\u001b[0m \u001b[0mpossible\u001b[0m \u001b[0mby\u001b[0m \u001b[0mthe\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 54\u001b[0m \u001b[0mwonderful\u001b[0m \u001b[0mGIL\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 55\u001b[1;33m \"\"\"\n\u001b[0m\u001b[0;32m 56\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mpythread\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPyThread_type_lock\u001b[0m \u001b[0m_real_lock\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 57\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mlong\u001b[0m \u001b[0m_owner\u001b[0m \u001b[1;31m# ID of thread owning the lock\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m/usr/local/lib/python2.7/dist-packages/h5py-2.5.0-py2.7-linux-x86_64.egg/h5py/_hl/group.pyc\u001b[0m in \u001b[0;36m__getitem__\u001b[1;34m(self, name)\u001b[0m\n\u001b[0;32m 162\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Invalid HDF5 object reference\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 163\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 164\u001b[1;33m \u001b[0moid\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mh5o\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mid\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_e\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlapl\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_lapl\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 165\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 166\u001b[0m \u001b[0motype\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mh5i\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_type\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0moid\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m/usr/lib/python2.7/dist-packages/h5py/_objects.pyx\u001b[0m in \u001b[0;36mh5py._objects.with_phil.wrapper (/home/wboyd/Downloads/h5py-2.5.0/h5py/_objects.c:2453)\u001b[1;34m()\u001b[0m\n\u001b[0;32m 52\u001b[0m \u001b[0mlock\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mneeded\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mit\u001b[0m \u001b[0macquires\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mlock\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mnotifies\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mfirst\u001b[0m \u001b[0mthread\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 53\u001b[0m \u001b[0mto\u001b[0m \u001b[0mrelease\u001b[0m \u001b[0mit\u001b[0m \u001b[0mwhen\u001b[0m \u001b[0mit\u001b[0m\u001b[0;31m'\u001b[0m\u001b[0ms\u001b[0m \u001b[0mdone\u001b[0m\u001b[1;33m.\u001b[0m \u001b[0mThis\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mall\u001b[0m \u001b[0mmade\u001b[0m \u001b[0mpossible\u001b[0m \u001b[0mby\u001b[0m \u001b[0mthe\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 54\u001b[1;33m \u001b[0mwonderful\u001b[0m \u001b[0mGIL\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 55\u001b[0m \"\"\"\n\u001b[0;32m 56\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mpythread\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPyThread_type_lock\u001b[0m \u001b[0m_real_lock\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m/usr/lib/python2.7/dist-packages/h5py/_objects.pyx\u001b[0m in \u001b[0;36mh5py._objects.with_phil.wrapper (/home/wboyd/Downloads/h5py-2.5.0/h5py/_objects.c:2410)\u001b[1;34m()\u001b[0m\n\u001b[0;32m 53\u001b[0m \u001b[0mto\u001b[0m \u001b[0mrelease\u001b[0m \u001b[0mit\u001b[0m \u001b[0mwhen\u001b[0m \u001b[0mit\u001b[0m\u001b[0;31m'\u001b[0m\u001b[0ms\u001b[0m \u001b[0mdone\u001b[0m\u001b[1;33m.\u001b[0m \u001b[0mThis\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mall\u001b[0m \u001b[0mmade\u001b[0m \u001b[0mpossible\u001b[0m \u001b[0mby\u001b[0m \u001b[0mthe\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 54\u001b[0m \u001b[0mwonderful\u001b[0m \u001b[0mGIL\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 55\u001b[1;33m \"\"\"\n\u001b[0m\u001b[0;32m 56\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mpythread\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPyThread_type_lock\u001b[0m \u001b[0m_real_lock\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 57\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mlong\u001b[0m \u001b[0m_owner\u001b[0m \u001b[1;31m# ID of thread owning the lock\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m/usr/lib/python2.7/dist-packages/h5py/h5o.pyx\u001b[0m in \u001b[0;36mh5py.h5o.open (/home/wboyd/Downloads/h5py-2.5.0/h5py/h5o.c:3363)\u001b[1;34m()\u001b[0m\n\u001b[0;32m 188\u001b[0m char* dst_name, PropID copypl=None, PropID lcpl=None):\n\u001b[0;32m 189\u001b[0m \"\"\"(ObjectID src_loc, STRING src_name, GroupID dst_loc, STRING dst_name,\n\u001b[1;32m--> 190\u001b[1;33m PropID copypl=None, PropID lcpl=None)\n\u001b[0m\u001b[0;32m 191\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 192\u001b[0m \u001b[0mCopy\u001b[0m \u001b[0ma\u001b[0m \u001b[0mgroup\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdataset\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mnamed\u001b[0m \u001b[0mdatatype\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mone\u001b[0m \u001b[0mlocation\u001b[0m \u001b[0mto\u001b[0m \u001b[0manother\u001b[0m\u001b[1;33m.\u001b[0m \u001b[0mThe\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mKeyError\u001b[0m: 'Unable to open object (Component not found)'" - ] - } - ], + "outputs": [], "source": [ "# Load the last statepoint file\n", "sp = openmc.StatePoint('statepoint.50.h5')" @@ -898,7 +890,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -933,7 +925,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": { "collapsed": false }, @@ -952,11 +944,102 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/wboyd/Documents/NSE-CRPG-Codes/openmc/openmc/tallies.py:1988: RuntimeWarning: invalid value encountered in true_divide\n", + " self_rel_err = data['self']['std. dev.'] / data['self']['mean']\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
cellgroup innuclidemeanstd. dev.
3100001U-2358.055246e-032.857567e-05
4100001U-2387.339215e-034.349466e-05
5100001O-160.000000e+000.000000e+00
0100002U-2353.615565e-012.050486e-03
1100002U-2386.742638e-073.795256e-09
2100002O-160.000000e+000.000000e+00
\n", + "
" + ], + "text/plain": [ + " cell group in nuclide mean std. dev.\n", + "3 10000 1 U-235 8.055246e-03 2.857567e-05\n", + "4 10000 1 U-238 7.339215e-03 4.349466e-05\n", + "5 10000 1 O-16 0.000000e+00 0.000000e+00\n", + "0 10000 2 U-235 3.615565e-01 2.050486e-03\n", + "1 10000 2 U-238 6.742638e-07 3.795256e-09\n", + "2 10000 2 O-16 0.000000e+00 0.000000e+00" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df = fuel_mgxs.get_pandas_dataframe()\n", "df" @@ -971,11 +1054,39 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Multi-Group XS\n", + "\tReaction Type =\tnu-fission\n", + "\tDomain Type =\tcell\n", + "\tDomain ID =\t10000\n", + "\tNuclide =\tU-235\n", + "\tCross Sections [cm^-1]:\n", + " Group 1 [6.25e-07 - 20.0 MeV]:\t8.06e-03 +/- 3.55e-01%\n", + " Group 2 [0.0 - 6.25e-07 MeV]:\t3.62e-01 +/- 5.67e-01%\n", + "\n", + "\tNuclide =\tU-238\n", + "\tCross Sections [cm^-1]:\n", + " Group 1 [6.25e-07 - 20.0 MeV]:\t7.34e-03 +/- 5.93e-01%\n", + " Group 2 [0.0 - 6.25e-07 MeV]:\t6.74e-07 +/- 5.63e-01%\n", + "\n", + "\tNuclide =\tO-16\n", + "\tCross Sections [cm^-1]:\n", + " Group 1 [6.25e-07 - 20.0 MeV]:\t0.00e+00 +/- nan%\n", + " Group 2 [0.0 - 6.25e-07 MeV]:\t0.00e+00 +/- nan%\n", + "\n", + "\n", + "\n" + ] + } + ], "source": [ "fuel_mgxs.print_xs()" ] @@ -989,7 +1100,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": { "collapsed": false }, @@ -1008,7 +1119,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": { "collapsed": true }, @@ -1020,7 +1131,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": { "collapsed": true }, @@ -1039,7 +1150,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": { "collapsed": true }, @@ -1054,11 +1165,67 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
cellgroup innuclidemeanstd. dev.
0100001U-2350.0748600.000303
1100001U-2380.0059520.000035
2100001O-160.0000000.000000
\n", + "
" + ], + "text/plain": [ + " cell group in nuclide mean std. dev.\n", + "0 10000 1 U-235 0.074860 0.000303\n", + "1 10000 1 U-238 0.005952 0.000035\n", + "2 10000 1 O-16 0.000000 0.000000" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Retrieve the NuFissionXS object for the fuel cell from the 1-group library\n", "coarse_fuel_mgxs = coarse_mgxs_lib.get_mgxs(fuel_cell, 'nu-fission')\n", @@ -1083,7 +1250,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": { "collapsed": false }, @@ -1102,7 +1269,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": { "collapsed": false }, @@ -1121,12 +1288,139 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": { "collapsed": false, "scrolled": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ NORMAL ] Importing ray tracing data from file...\n", + "[ NORMAL ] Computing the eigenvalue...\n", + "[ NORMAL ] Iteration 0:\tk_eff = 0.854370\tres = 0.000E+00\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.801922\tres = 1.521E-01\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.761745\tres = 6.349E-02\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.732366\tres = 5.029E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.711073\tres = 3.869E-02\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.696554\tres = 2.912E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.687670\tres = 2.044E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.683465\tres = 1.277E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.683124\tres = 6.142E-03\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.685943\tres = 7.897E-04\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.691322\tres = 4.180E-03\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.698747\tres = 7.873E-03\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.707777\tres = 1.076E-02\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.718040\tres = 1.295E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.729218\tres = 1.452E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.741045\tres = 1.559E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.753296\tres = 1.624E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.765785\tres = 1.655E-02\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.778355\tres = 1.659E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.790879\tres = 1.643E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.803254\tres = 1.610E-02\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.815394\tres = 1.566E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.827235\tres = 1.513E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.838724\tres = 1.453E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.849823\tres = 1.390E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.860503\tres = 1.324E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.870744\tres = 1.258E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.880535\tres = 1.191E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.889870\tres = 1.125E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.898748\tres = 1.061E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.907172\tres = 9.985E-03\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.915151\tres = 9.382E-03\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.922693\tres = 8.802E-03\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.929811\tres = 8.248E-03\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.936517\tres = 7.720E-03\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.942827\tres = 7.219E-03\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.948757\tres = 6.744E-03\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.954322\tres = 6.295E-03\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.959539\tres = 5.871E-03\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.964425\tres = 5.472E-03\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.968996\tres = 5.096E-03\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.973268\tres = 4.744E-03\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.977259\tres = 4.413E-03\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.980982\tres = 4.104E-03\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.984454\tres = 3.814E-03\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.987689\tres = 3.543E-03\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.990702\tres = 3.289E-03\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.993505\tres = 3.053E-03\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.996112\tres = 2.832E-03\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.998536\tres = 2.627E-03\n", + "[ NORMAL ] Iteration 50:\tk_eff = 1.000787\tres = 2.435E-03\n", + "[ NORMAL ] Iteration 51:\tk_eff = 1.002878\tres = 2.257E-03\n", + "[ NORMAL ] Iteration 52:\tk_eff = 1.004818\tres = 2.091E-03\n", + "[ NORMAL ] Iteration 53:\tk_eff = 1.006618\tres = 1.937E-03\n", + "[ NORMAL ] Iteration 54:\tk_eff = 1.008287\tres = 1.793E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 1.009834\tres = 1.660E-03\n", + "[ NORMAL ] Iteration 56:\tk_eff = 1.011268\tres = 1.536E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.012595\tres = 1.421E-03\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.013824\tres = 1.314E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.014962\tres = 1.215E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.016015\tres = 1.123E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.016988\tres = 1.038E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.017889\tres = 9.595E-04\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.018721\tres = 8.864E-04\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.019490\tres = 8.187E-04\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.020201\tres = 7.560E-04\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.020858\tres = 6.980E-04\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.021464\tres = 6.444E-04\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.022024\tres = 5.947E-04\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.022541\tres = 5.488E-04\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.023017\tres = 5.063E-04\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.023458\tres = 4.670E-04\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.023863\tres = 4.308E-04\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.024238\tres = 3.972E-04\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.024583\tres = 3.663E-04\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.024902\tres = 3.376E-04\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.025195\tres = 3.112E-04\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.025466\tres = 2.868E-04\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.025715\tres = 2.643E-04\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.025945\tres = 2.435E-04\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.026157\tres = 2.244E-04\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.026352\tres = 2.067E-04\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.026531\tres = 1.904E-04\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.026697\tres = 1.753E-04\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.026849\tres = 1.614E-04\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.026989\tres = 1.487E-04\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.027118\tres = 1.369E-04\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.027237\tres = 1.260E-04\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.027347\tres = 1.160E-04\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.027447\tres = 1.067E-04\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.027540\tres = 9.823E-05\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.027625\tres = 9.039E-05\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.027704\tres = 8.317E-05\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.027776\tres = 7.652E-05\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.027843\tres = 7.040E-05\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.027904\tres = 6.476E-05\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.027960\tres = 5.957E-05\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.028012\tres = 5.479E-05\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.028059\tres = 5.039E-05\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.028103\tres = 4.635E-05\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.028143\tres = 4.262E-05\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.028180\tres = 3.919E-05\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.028214\tres = 3.603E-05\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.028245\tres = 3.313E-05\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.028274\tres = 3.046E-05\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.028300\tres = 2.800E-05\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.028324\tres = 2.574E-05\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.028347\tres = 2.366E-05\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.028367\tres = 2.175E-05\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.028386\tres = 1.999E-05\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.028403\tres = 1.837E-05\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.028419\tres = 1.688E-05\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.028434\tres = 1.551E-05\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.028447\tres = 1.426E-05\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.028460\tres = 1.310E-05\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.028471\tres = 1.204E-05\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.028481\tres = 1.106E-05\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.028491\tres = 1.016E-05\n" + ] + } + ], "source": [ "# Generate tracks for OpenMOC\n", "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=32, azim_spacing=0.1)\n", @@ -1146,11 +1440,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "openmc keff = 1.028263\n", + "openmoc keff = 1.028491\n", + "bias [pcm]: 22.8\n" + ] + } + ], "source": [ "# Print report of keff and bias with OpenMC\n", "openmoc_keff = solver.getKeff()\n", @@ -1189,7 +1493,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, "metadata": { "collapsed": false }, @@ -1215,7 +1519,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, "metadata": { "collapsed": false }, @@ -1247,11 +1551,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n2ajR7Q6wgAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Ignore zero fission rates in guide tubes with Matplotlib color scheme\n", "openmc_fission_rates[openmc_fission_rates == 0] = np.nan\n", @@ -1285,7 +1610,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.6" + "version": "2.7.11" } }, "nbformat": 4, From 830277baf90278565c3168c89a1f596edd832339 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Fri, 13 May 2016 13:25:45 -0400 Subject: [PATCH 536/650] Replicated MGXS docstring to all subclasses for clarity in Jupyter Notebook --- openmc/mgxs/mgxs.py | 1034 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1023 insertions(+), 11 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 1826912830..4c00f9fef1 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1525,7 +1525,85 @@ class MGXS(object): class TotalXS(MGXS): - """A total multi-group cross section.""" + """A total multi-group cross section. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): @@ -1535,7 +1613,85 @@ class TotalXS(MGXS): class TransportXS(MGXS): - """A transport-corrected total multi-group cross section.""" + """A transport-corrected total multi-group cross section. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): @@ -1571,7 +1727,85 @@ class TransportXS(MGXS): class NuTransportXS(TransportXS): """A transport-corrected total multi-group cross section which - accounts for neutron multiplicity in scattering reactions.""" + accounts for neutron multiplicity in scattering reactions. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): @@ -1589,7 +1823,85 @@ class NuTransportXS(TransportXS): class AbsorptionXS(MGXS): - """An absorption multi-group cross section.""" + """An absorption multi-group cross section. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): @@ -1606,6 +1918,82 @@ class CaptureXS(MGXS): not only radiative capture, but all forms of neutron disappearance aside from fission (e.g., MT > 100). + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + """ def __init__(self, domain=None, domain_type=None, @@ -1628,7 +2016,85 @@ class CaptureXS(MGXS): class FissionXS(MGXS): - """A fission multi-group cross section.""" + """A fission multi-group cross section. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): @@ -1638,7 +2104,85 @@ class FissionXS(MGXS): class NuFissionXS(MGXS): - """A fission production multi-group cross section.""" + """A fission production multi-group cross section. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): @@ -1648,7 +2192,85 @@ class NuFissionXS(MGXS): class KappaFissionXS(MGXS): - """A recoverable fission energy production rate multi-group cross section.""" + """A recoverable fission energy production rate multi-group cross section. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): @@ -1658,7 +2280,85 @@ class KappaFissionXS(MGXS): class ScatterXS(MGXS): - """A scatter multi-group cross section.""" + """A scatter multi-group cross section. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): @@ -1668,7 +2368,85 @@ class ScatterXS(MGXS): class NuScatterXS(MGXS): - """A nu-scatter multi-group cross section.""" + """A nu-scatter multi-group cross section. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): @@ -1681,12 +2459,85 @@ class ScatterMatrixXS(MGXS): """A scattering matrix multi-group cross section for one or more Legendre moments. + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + Attributes ---------- correction : 'P0' or None Apply the P0 correction to scattering matrices if set to 'P0' legendre_order : int The highest legendre moment in the scattering matrix (default is 0) + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store """ @@ -2241,7 +3092,90 @@ class ScatterMatrixXS(MGXS): class NuScatterMatrixXS(ScatterMatrixXS): - """A scattering production matrix multi-group cross section.""" + """A scattering production matrix multi-group cross section for one or + more Legendre moments. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + + Attributes + ---------- + correction : 'P0' or None + Apply the P0 correction to scattering matrices if set to 'P0' + legendre_order : int + The highest legendre moment in the scattering matrix (default is 0) + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): @@ -2252,7 +3186,85 @@ class NuScatterMatrixXS(ScatterMatrixXS): class Chi(MGXS): - """The fission spectrum.""" + """The fission spectrum. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): From 9449ca6b891f4dede18790748ce5a0a1a4d5018c Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Fri, 13 May 2016 15:50:40 -0400 Subject: [PATCH 537/650] MGXS tests now use a 3rd order legendre scattering moments --- .../inputs_true.dat | 2 +- .../results_true.dat | 116 +- .../test_mgxs_library_condense.py | 1 + .../inputs_true.dat | 2 +- .../results_true.dat | 9 +- .../test_mgxs_library_distribcell.py | 1 + tests/test_mgxs_library_hdf5/inputs_true.dat | 2 +- tests/test_mgxs_library_hdf5/results_true.dat | 168 +- .../test_mgxs_library_hdf5.py | 1 + .../inputs_true.dat | 2 +- .../results_true.dat | 350 +- .../test_mgxs_library_no_nuclides.py | 1 + .../inputs_true.dat | 2 +- .../results_true.dat | 5742 ++++++++++++----- .../test_mgxs_library_nuclides.py | 1 + 15 files changed, 4512 insertions(+), 1888 deletions(-) diff --git a/tests/test_mgxs_library_condense/inputs_true.dat b/tests/test_mgxs_library_condense/inputs_true.dat index 064981fa9b..3643c9a2ef 100644 --- a/tests/test_mgxs_library_condense/inputs_true.dat +++ b/tests/test_mgxs_library_condense/inputs_true.dat @@ -1 +1 @@ -ee40a2b826dea8323249c7261502f8339c78a5dc236e019842cc5244c048d5978fe66e036b86d46b262260556fbd62b19cbb2f0d70325b92b8c40275e75afe4f \ No newline at end of file +104e7fb527770ac5d3fc636da7716e8fb05d55761253d30516c899f466e6b38ffd881611a3d0cdf65c6af058c32f6f6758c68782be7a170d21024bdae751862f \ No newline at end of file diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index 8296aca11d..f176c30075 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -1,49 +1,85 @@ material group in nuclide mean std. dev. 0 1 1 total 0.412084 0.02359 material group in nuclide mean std. dev. -0 1 1 total 0.076425 0.003691 material group in group out nuclide mean std. dev. -0 1 1 1 total 0.345503 0.021465 material group out nuclide mean std. dev. -0 1 1 total 1.0 0.055333 material group in nuclide mean std. dev. +0 1 1 total 0.076425 0.003691 material group in group out nuclide moment mean +0 1 1 1 total P0 0.384780 +1 1 1 1 total P1 0.039277 +2 1 1 1 total P2 0.017574 +3 1 1 1 total P3 0.012203 material group out nuclide mean std. dev. +0 1 1 total 1 0.055333 material group in nuclide mean std. dev. 0 2 1 total 0.241262 0.00841 material group in nuclide mean std. dev. -0 2 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 2 1 1 total 0.241262 0.00841 material group out nuclide mean std. dev. -0 2 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 2 1 total 0 0 material group in group out nuclide moment mean +0 2 1 1 total P0 0.272369 +1 2 1 1 total P1 0.031107 +2 2 1 1 total P2 0.025999 +3 2 1 1 total P3 0.003219 material group out nuclide mean std. dev. +0 2 1 total 0 0 material group in nuclide mean std. dev. 0 3 1 total 0.400028 0.034667 material group in nuclide mean std. dev. -0 3 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 3 1 1 total 0.393462 0.033646 material group out nuclide mean std. dev. -0 3 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 3 1 total 0 0 material group in group out nuclide moment mean +0 3 1 1 total P0 0.794999 +1 3 1 1 total P1 0.401537 +2 3 1 1 total P2 0.143623 +3 3 1 1 total P3 0.001991 material group out nuclide mean std. dev. +0 3 1 total 0 0 material group in nuclide mean std. dev. 0 4 1 total 0.377402 0.072937 material group in nuclide mean std. dev. -0 4 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 4 1 1 total 0.371473 0.071226 material group out nuclide mean std. dev. -0 4 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 5 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 5 1 1 total 0.0 0.0 material group out nuclide mean std. dev. -0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 6 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 6 1 1 total 0.0 0.0 material group out nuclide mean std. dev. -0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 7 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 7 1 1 total 0.0 0.0 material group out nuclide mean std. dev. -0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 8 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 8 1 1 total 0.0 0.0 material group out nuclide mean std. dev. -0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 4 1 total 0 0 material group in group out nuclide moment mean +0 4 1 1 total P0 0.727311 +1 4 1 1 total P1 0.355839 +2 4 1 1 total P2 0.124483 +3 4 1 1 total P3 0.012168 material group out nuclide mean std. dev. +0 4 1 total 0 0 material group in nuclide mean std. dev. +0 5 1 total 0 0 material group in nuclide mean std. dev. +0 5 1 total 0 0 material group in group out nuclide moment mean +0 5 1 1 total P0 0 +1 5 1 1 total P1 0 +2 5 1 1 total P2 0 +3 5 1 1 total P3 0 material group out nuclide mean std. dev. +0 5 1 total 0 0 material group in nuclide mean std. dev. +0 6 1 total 0 0 material group in nuclide mean std. dev. +0 6 1 total 0 0 material group in group out nuclide moment mean +0 6 1 1 total P0 0 +1 6 1 1 total P1 0 +2 6 1 1 total P2 0 +3 6 1 1 total P3 0 material group out nuclide mean std. dev. +0 6 1 total 0 0 material group in nuclide mean std. dev. +0 7 1 total 0 0 material group in nuclide mean std. dev. +0 7 1 total 0 0 material group in group out nuclide moment mean +0 7 1 1 total P0 0 +1 7 1 1 total P1 0 +2 7 1 1 total P2 0 +3 7 1 1 total P3 0 material group out nuclide mean std. dev. +0 7 1 total 0 0 material group in nuclide mean std. dev. +0 8 1 total 0 0 material group in nuclide mean std. dev. +0 8 1 total 0 0 material group in group out nuclide moment mean +0 8 1 1 total P0 0 +1 8 1 1 total P1 0 +2 8 1 1 total P2 0 +3 8 1 1 total P3 0 material group out nuclide mean std. dev. +0 8 1 total 0 0 material group in nuclide mean std. dev. 0 9 1 total 0.600536 0.748875 material group in nuclide mean std. dev. -0 9 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 9 1 1 total 0.600536 0.748875 material group out nuclide mean std. dev. -0 9 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 9 1 total 0 0 material group in group out nuclide moment mean +0 9 1 1 total P0 0.720380 +1 9 1 1 total P1 0.119844 +2 9 1 1 total P2 0.038522 +3 9 1 1 total P3 0.056023 material group out nuclide mean std. dev. +0 9 1 total 0 0 material group in nuclide mean std. dev. 0 10 1 total 0.235515 0.613974 material group in nuclide mean std. dev. -0 10 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 10 1 1 total 0.235515 0.613974 material group out nuclide mean std. dev. -0 10 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 10 1 total 0 0 material group in group out nuclide moment mean +0 10 1 1 total P0 0.501009 +1 10 1 1 total P1 0.265494 +2 10 1 1 total P2 0.141979 +3 10 1 1 total P3 0.074258 material group out nuclide mean std. dev. +0 10 1 total 0 0 material group in nuclide mean std. dev. 0 11 1 total 0.510145 0.741941 material group in nuclide mean std. dev. -0 11 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 11 1 1 total 0.491857 0.715554 material group out nuclide mean std. dev. -0 11 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 11 1 total 0 0 material group in group out nuclide moment mean +0 11 1 1 total P0 0.804661 +1 11 1 1 total P1 0.312803 +2 11 1 1 total P2 0.168113 +3 11 1 1 total P3 0.003808 material group out nuclide mean std. dev. +0 11 1 total 0 0 material group in nuclide mean std. dev. 0 12 1 total 0.73836 0.825631 material group in nuclide mean std. dev. -0 12 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 12 1 1 total 0.723265 0.808231 material group out nuclide mean std. dev. -0 12 1 total 0.0 0.0 \ No newline at end of file +0 12 1 total 0 0 material group in group out nuclide moment mean +0 12 1 1 total P0 0.943429 +1 12 1 1 total P1 0.220164 +2 12 1 1 total P2 0.052884 +3 12 1 1 total P3 0.039939 material group out nuclide mean std. dev. +0 12 1 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_condense/test_mgxs_library_condense.py b/tests/test_mgxs_library_condense/test_mgxs_library_condense.py index 3ca98904fb..561232b224 100644 --- a/tests/test_mgxs_library_condense/test_mgxs_library_condense.py +++ b/tests/test_mgxs_library_condense/test_mgxs_library_condense.py @@ -28,6 +28,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi'] self.mgxs_lib.energy_groups = energy_groups + self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'material' self.mgxs_lib.build_library() diff --git a/tests/test_mgxs_library_distribcell/inputs_true.dat b/tests/test_mgxs_library_distribcell/inputs_true.dat index 5ffea7f8fa..21927c8008 100644 --- a/tests/test_mgxs_library_distribcell/inputs_true.dat +++ b/tests/test_mgxs_library_distribcell/inputs_true.dat @@ -1 +1 @@ -c46381a2d86bd849ca20dc64022ffcf836ba0f236f392bba6335c42559df61d14d09a616bc3a9590d954a5bf099610eb071982296b75b10d1c168cc3e343d383 \ No newline at end of file +018bbbc2099f7b94180b391e46e42fc9a82498c60b3f8f7f4c91480ea373427932d287fe571d53b2397f329e71485e7155d7644f0f995bbcb458ba3e872ab043 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index 0d5c7c7b44..318ec408a7 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,5 +1,8 @@ avg(distribcell) group in nuclide mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.718919 0.520644 avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 avg(distribcell) group in group out nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.695166 0.510606 avg(distribcell) group out nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 \ No newline at end of file +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 avg(distribcell) group in group out nuclide moment mean +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P0 1.142547 +1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P1 0.447381 +2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P2 0.141202 +3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P3 0.039228 avg(distribcell) group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py index d488e8ec97..32f5ea1bd8 100644 --- a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py +++ b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py @@ -29,6 +29,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi'] self.mgxs_lib.energy_groups = energy_groups + self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'distribcell' material_cells = self.mgxs_lib.openmc_geometry.get_all_material_cells() self.mgxs_lib.domains = [material_cells[-1]] diff --git a/tests/test_mgxs_library_hdf5/inputs_true.dat b/tests/test_mgxs_library_hdf5/inputs_true.dat index 064981fa9b..3643c9a2ef 100644 --- a/tests/test_mgxs_library_hdf5/inputs_true.dat +++ b/tests/test_mgxs_library_hdf5/inputs_true.dat @@ -1 +1 @@ -ee40a2b826dea8323249c7261502f8339c78a5dc236e019842cc5244c048d5978fe66e036b86d46b262260556fbd62b19cbb2f0d70325b92b8c40275e75afe4f \ No newline at end of file +104e7fb527770ac5d3fc636da7716e8fb05d55761253d30516c899f466e6b38ffd881611a3d0cdf65c6af058c32f6f6758c68782be7a170d21024bdae751862f \ No newline at end of file diff --git a/tests/test_mgxs_library_hdf5/results_true.dat b/tests/test_mgxs_library_hdf5/results_true.dat index 93aceba7d3..3cae577471 100644 --- a/tests/test_mgxs_library_hdf5/results_true.dat +++ b/tests/test_mgxs_library_hdf5/results_true.dat @@ -5,10 +5,16 @@ domain=1 type=nu-fission [ 0.02178897 0.71407658] [ 0.00118187 0.04055185] domain=1 type=nu-scatter matrix -[[ 0.33724504 0.00155945] - [ 0. 0.42205129]] -[[ 0.02301463 0.00051015] - [ 0. 0.02161702]] +[[[ 3.81546297e-01 4.43012537e-02 2.06462886e-02 1.36952959e-02] + [ 1.55945353e-03 -5.97269486e-04 -2.38789528e-04 1.75508083e-04]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 4.03915981e-01 -1.13103276e-02 -1.48065932e-02 -6.85505346e-03]]] +[[[ 0.02403322 0.00472203 0.00253903 0.00222437] + [ 0.00051015 0.00022485 0.00022157 0.00020939]] + + [[ 0. 0. 0. 0. ] + [ 0.01896646 0.00783919 0.00862908 0.00904704]]] domain=1 type=chi [ 1. 0.] [ 0.05533329 0. ] @@ -19,10 +25,16 @@ domain=2 type=nu-fission [ 0. 0.] [ 0. 0.] domain=2 type=nu-scatter matrix -[[ 0.23725441 0. ] - [ 0. 0.28593027]] -[[ 0.00818357 0. ] - [ 0. 0.04879593]] +[[[ 0.27311543 0.03586102 0.02970389 0.00224892] + [ 0. 0. 0. 0. ]] + + [[ 0. 0. 0. 0. ] + [ 0.26405068 -0.02187959 -0.01529469 0.01403395]]] +[[[ 0.00625287 0.00587756 0.00664018 0.00337568] + [ 0. 0. 0. 0. ]] + + [[ 0. 0. 0. 0. ] + [ 0.04539742 0.01221814 0.01027609 0.01431818]]] domain=2 type=chi [ 0. 0.] [ 0. 0.] @@ -33,10 +45,16 @@ domain=3 type=nu-fission [ 0. 0.] [ 0. 0.] domain=3 type=nu-scatter matrix -[[ 0.25993686 0.02618721] - [ 0. 1.35952132]] -[[ 0.02611466 0.00166461] - [ 0. 0.2585046 ]] +[[[ 0.64334557 0.38340871 0.15218526 0.00303724] + [ 0.02618721 0.00736219 -0.00273849 -0.00271989]] + + [[ 0. 0. 0. 0. ] + [ 1.92421362 0.4984312 0.09120485 0.01705441]]] +[[[ 0.02837604 0.01644677 0.00957372 0.00464802] + [ 0.00166461 0.00093414 0.00075617 0.00055807]] + + [[ 0. 0. 0. 0. ] + [ 0.28406198 0.06342067 0.01372628 0.01391602]]] domain=3 type=chi [ 0. 0.] [ 0. 0.] @@ -47,10 +65,16 @@ domain=4 type=nu-fission [ 0. 0.] [ 0. 0.] domain=4 type=nu-scatter matrix -[[ 0.2179296 0.023662 ] - [ 0. 1.21507398]] -[[ 0.0585649 0.00308328] - [ 0. 0.3810251 ]] +[[[ 0.54394096 0.32601136 0.13113269 0.01210477] + [ 0.023662 0.00752551 -0.00272975 -0.0031405 ]] + + [[ 0. 0. 0. 0. ] + [ 1.76464845 0.50069481 0.09902596 0.03297543]]] +[[[ 0.06542705 0.03860196 0.0174751 0.00607268] + [ 0.00308328 0.00130111 0.00084112 0.00057761]] + + [[ 0. 0. 0. 0. ] + [ 0.41620952 0.12217802 0.03871874 0.02510259]]] domain=4 type=chi [ 0. 0.] [ 0. 0.] @@ -61,10 +85,16 @@ domain=5 type=nu-fission [ 0. 0.] [ 0. 0.] domain=5 type=nu-scatter matrix -[[ 0. 0.] - [ 0. 0.]] -[[ 0. 0.] - [ 0. 0.]] +[[[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] + + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]]] +[[[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] + + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]]] domain=5 type=chi [ 0. 0.] [ 0. 0.] @@ -75,10 +105,16 @@ domain=6 type=nu-fission [ 0. 0.] [ 0. 0.] domain=6 type=nu-scatter matrix -[[ 0. 0.] - [ 0. 0.]] -[[ 0. 0.] - [ 0. 0.]] +[[[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] + + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]]] +[[[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] + + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]]] domain=6 type=chi [ 0. 0.] [ 0. 0.] @@ -89,10 +125,16 @@ domain=7 type=nu-fission [ 0. 0.] [ 0. 0.] domain=7 type=nu-scatter matrix -[[ 0. 0.] - [ 0. 0.]] -[[ 0. 0.] - [ 0. 0.]] +[[[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] + + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]]] +[[[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] + + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]]] domain=7 type=chi [ 0. 0.] [ 0. 0.] @@ -103,10 +145,16 @@ domain=8 type=nu-fission [ 0. 0.] [ 0. 0.] domain=8 type=nu-scatter matrix -[[ 0. 0.] - [ 0. 0.]] -[[ 0. 0.] - [ 0. 0.]] +[[[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] + + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]]] +[[[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] + + [[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]]] domain=8 type=chi [ 0. 0.] [ 0. 0.] @@ -117,10 +165,16 @@ domain=9 type=nu-fission [ 0. 0.] [ 0. 0.] domain=9 type=nu-scatter matrix -[[ 0.60053598 0. ] - [ 0. 0. ]] -[[ 0.74887543 0. ] - [ 0. 0. ]] +[[[ 0.72037987 0.11984389 0.03852204 0.05602285] + [ 0. 0. 0. 0. ]] + + [[ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ]]] +[[[ 0.77101455 0.18469083 0.06448453 0.05059534] + [ 0. 0. 0. 0. ]] + + [[ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ]]] domain=9 type=chi [ 0. 0.] [ 0. 0.] @@ -131,10 +185,16 @@ domain=10 type=nu-fission [ 0. 0.] [ 0. 0.] domain=10 type=nu-scatter matrix -[[ 0.23551495 0. ] - [ 0. 0. ]] -[[ 0.61397415 0. ] - [ 0. 0. ]] +[[[ 0.50100891 0.26549396 0.14197875 0.07425836] + [ 0. 0. 0. 0. ]] + + [[ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ]]] +[[[ 0.70853359 0.37546516 0.20078827 0.10501718] + [ 0. 0. 0. 0. ]] + + [[ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ]]] domain=10 type=chi [ 0. 0.] [ 0. 0.] @@ -145,10 +205,16 @@ domain=11 type=nu-fission [ 0. 0.] [ 0. 0.] domain=11 type=nu-scatter matrix -[[ 0.15444875 0.03187517] - [ 0. 0.90308451]] -[[ 0.59768579 0.0450783 ] - [ 0. 1.53214394]] +[[[ 0.47812753 0.32367878 0.14337507 0.05400336] + [ 0.03187517 0.00858456 -0.01246962 -0.01132019]] + + [[ 0. 0. 0. 0. ] + [ 1.20124973 0.28661101 0.21819147 -0.04851424]]] +[[[ 0.67617444 0.45775092 0.20276296 0.07637229] + [ 0.0450783 0.0121404 0.01763471 0.01600917]] + + [[ 0. 0. 0. 0. ] + [ 1.69882367 0.40532917 0.30856933 0.0686095 ]]] domain=11 type=chi [ 0. 0.] [ 0. 0.] @@ -159,10 +225,16 @@ domain=12 type=nu-fission [ 0. 0.] [ 0. 0.] domain=12 type=nu-scatter matrix -[[ 0.18605249 0.02723959] - [ 0. 1.35711799]] -[[ 0.25763254 0.02955488] - [ 0. 2.08984614]] +[[[ 0.40859392 0.22254143 0.0909719 0.03100368] + [ 0.02723959 -0.01008785 -0.00694631 0.00969231]] + + [[ 0. 0. 0. 0. ] + [ 1.57432766 0.22974802 0.01417839 0.03899727]]] +[[[ 0.27812309 0.14577636 0.06962553 0.03598053] + [ 0.02955488 0.01094529 0.00753673 0.01051613]] + + [[ 0. 0. 0. 0. ] + [ 2.22643553 0.32491277 0.02005128 0.05515046]]] domain=12 type=chi [ 0. 0.] [ 0. 0.] diff --git a/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py b/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py index 91bb036e34..2d7ed2ef3d 100644 --- a/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py +++ b/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py @@ -29,6 +29,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi'] self.mgxs_lib.energy_groups = energy_groups + self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'material' self.mgxs_lib.build_library() diff --git a/tests/test_mgxs_library_no_nuclides/inputs_true.dat b/tests/test_mgxs_library_no_nuclides/inputs_true.dat index 064981fa9b..3643c9a2ef 100644 --- a/tests/test_mgxs_library_no_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_no_nuclides/inputs_true.dat @@ -1 +1 @@ -ee40a2b826dea8323249c7261502f8339c78a5dc236e019842cc5244c048d5978fe66e036b86d46b262260556fbd62b19cbb2f0d70325b92b8c40275e75afe4f \ No newline at end of file +104e7fb527770ac5d3fc636da7716e8fb05d55761253d30516c899f466e6b38ffd881611a3d0cdf65c6af058c32f6f6758c68782be7a170d21024bdae751862f \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index 7361c60bea..9d6e358716 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -2,120 +2,264 @@ 1 1 1 total 0.372745 0.024269 0 1 2 total 0.861607 0.032349 material group in nuclide mean std. dev. 1 1 1 total 0.021789 0.001182 -0 1 2 total 0.714077 0.040552 material group in group out nuclide mean std. dev. -3 1 1 1 total 0.337245 0.023015 -2 1 1 2 total 0.001559 0.000510 -1 1 2 1 total 0.000000 0.000000 -0 1 2 2 total 0.422051 0.021617 material group out nuclide mean std. dev. -1 1 1 total 1.0 0.055333 -0 1 2 total 0.0 0.000000 material group in nuclide mean std. dev. +0 1 2 total 0.714077 0.040552 material group in group out nuclide moment mean +12 1 1 1 total P0 0.381546 +13 1 1 1 total P1 0.044301 +14 1 1 1 total P2 0.020646 +15 1 1 1 total P3 0.013695 +8 1 1 2 total P0 0.001559 +9 1 1 2 total P1 -0.000597 +10 1 1 2 total P2 -0.000239 +11 1 1 2 total P3 0.000176 +4 1 2 1 total P0 0.000000 +5 1 2 1 total P1 0.000000 +6 1 2 1 total P2 0.000000 +7 1 2 1 total P3 0.000000 +0 1 2 2 total P0 0.403916 +1 1 2 2 total P1 -0.011310 +2 1 2 2 total P2 -0.014807 +3 1 2 2 total P3 -0.006855 material group out nuclide mean std. dev. +1 1 1 total 1 0.055333 +0 1 2 total 0 0.000000 material group in nuclide mean std. dev. 1 2 1 total 0.237254 0.008184 0 2 2 total 0.285930 0.048796 material group in nuclide mean std. dev. -1 2 1 total 0.0 0.0 -0 2 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 2 1 1 total 0.237254 0.008184 -2 2 1 2 total 0.000000 0.000000 -1 2 2 1 total 0.000000 0.000000 -0 2 2 2 total 0.285930 0.048796 material group out nuclide mean std. dev. -1 2 1 total 0.0 0.0 -0 2 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 2 1 total 0 0 +0 2 2 total 0 0 material group in group out nuclide moment mean +12 2 1 1 total P0 0.273115 +13 2 1 1 total P1 0.035861 +14 2 1 1 total P2 0.029704 +15 2 1 1 total P3 0.002249 +8 2 1 2 total P0 0.000000 +9 2 1 2 total P1 0.000000 +10 2 1 2 total P2 0.000000 +11 2 1 2 total P3 0.000000 +4 2 2 1 total P0 0.000000 +5 2 2 1 total P1 0.000000 +6 2 2 1 total P2 0.000000 +7 2 2 1 total P3 0.000000 +0 2 2 2 total P0 0.264051 +1 2 2 2 total P1 -0.021880 +2 2 2 2 total P2 -0.015295 +3 2 2 2 total P3 0.014034 material group out nuclide mean std. dev. +1 2 1 total 0 0 +0 2 2 total 0 0 material group in nuclide mean std. dev. 1 3 1 total 0.286906 0.027401 0 3 2 total 1.418151 0.265308 material group in nuclide mean std. dev. -1 3 1 total 0.0 0.0 -0 3 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 3 1 1 total 0.259937 0.026115 -2 3 1 2 total 0.026187 0.001665 -1 3 2 1 total 0.000000 0.000000 -0 3 2 2 total 1.359521 0.258505 material group out nuclide mean std. dev. -1 3 1 total 0.0 0.0 -0 3 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 3 1 total 0 0 +0 3 2 total 0 0 material group in group out nuclide moment mean +12 3 1 1 total P0 0.643346 +13 3 1 1 total P1 0.383409 +14 3 1 1 total P2 0.152185 +15 3 1 1 total P3 0.003037 +8 3 1 2 total P0 0.026187 +9 3 1 2 total P1 0.007362 +10 3 1 2 total P2 -0.002738 +11 3 1 2 total P3 -0.002720 +4 3 2 1 total P0 0.000000 +5 3 2 1 total P1 0.000000 +6 3 2 1 total P2 0.000000 +7 3 2 1 total P3 0.000000 +0 3 2 2 total P0 1.924214 +1 3 2 2 total P1 0.498431 +2 3 2 2 total P2 0.091205 +3 3 2 2 total P3 0.017054 material group out nuclide mean std. dev. +1 3 1 total 0 0 +0 3 2 total 0 0 material group in nuclide mean std. dev. 1 4 1 total 0.242447 0.061031 0 4 2 total 1.253959 0.388363 material group in nuclide mean std. dev. -1 4 1 total 0.0 0.0 -0 4 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 4 1 1 total 0.217930 0.058565 -2 4 1 2 total 0.023662 0.003083 -1 4 2 1 total 0.000000 0.000000 -0 4 2 2 total 1.215074 0.381025 material group out nuclide mean std. dev. -1 4 1 total 0.0 0.0 -0 4 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 5 1 1 total 0.0 0.0 -2 5 1 2 total 0.0 0.0 -1 5 2 1 total 0.0 0.0 -0 5 2 2 total 0.0 0.0 material group out nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 6 1 1 total 0.0 0.0 -2 6 1 2 total 0.0 0.0 -1 6 2 1 total 0.0 0.0 -0 6 2 2 total 0.0 0.0 material group out nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 7 1 1 total 0.0 0.0 -2 7 1 2 total 0.0 0.0 -1 7 2 1 total 0.0 0.0 -0 7 2 2 total 0.0 0.0 material group out nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 8 1 1 total 0.0 0.0 -2 8 1 2 total 0.0 0.0 -1 8 2 1 total 0.0 0.0 -0 8 2 2 total 0.0 0.0 material group out nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 4 1 total 0 0 +0 4 2 total 0 0 material group in group out nuclide moment mean +12 4 1 1 total P0 0.543941 +13 4 1 1 total P1 0.326011 +14 4 1 1 total P2 0.131133 +15 4 1 1 total P3 0.012105 +8 4 1 2 total P0 0.023662 +9 4 1 2 total P1 0.007526 +10 4 1 2 total P2 -0.002730 +11 4 1 2 total P3 -0.003140 +4 4 2 1 total P0 0.000000 +5 4 2 1 total P1 0.000000 +6 4 2 1 total P2 0.000000 +7 4 2 1 total P3 0.000000 +0 4 2 2 total P0 1.764648 +1 4 2 2 total P1 0.500695 +2 4 2 2 total P2 0.099026 +3 4 2 2 total P3 0.032975 material group out nuclide mean std. dev. +1 4 1 total 0 0 +0 4 2 total 0 0 material group in nuclide mean std. dev. +1 5 1 total 0 0 +0 5 2 total 0 0 material group in nuclide mean std. dev. +1 5 1 total 0 0 +0 5 2 total 0 0 material group in group out nuclide moment mean +12 5 1 1 total P0 0 +13 5 1 1 total P1 0 +14 5 1 1 total P2 0 +15 5 1 1 total P3 0 +8 5 1 2 total P0 0 +9 5 1 2 total P1 0 +10 5 1 2 total P2 0 +11 5 1 2 total P3 0 +4 5 2 1 total P0 0 +5 5 2 1 total P1 0 +6 5 2 1 total P2 0 +7 5 2 1 total P3 0 +0 5 2 2 total P0 0 +1 5 2 2 total P1 0 +2 5 2 2 total P2 0 +3 5 2 2 total P3 0 material group out nuclide mean std. dev. +1 5 1 total 0 0 +0 5 2 total 0 0 material group in nuclide mean std. dev. +1 6 1 total 0 0 +0 6 2 total 0 0 material group in nuclide mean std. dev. +1 6 1 total 0 0 +0 6 2 total 0 0 material group in group out nuclide moment mean +12 6 1 1 total P0 0 +13 6 1 1 total P1 0 +14 6 1 1 total P2 0 +15 6 1 1 total P3 0 +8 6 1 2 total P0 0 +9 6 1 2 total P1 0 +10 6 1 2 total P2 0 +11 6 1 2 total P3 0 +4 6 2 1 total P0 0 +5 6 2 1 total P1 0 +6 6 2 1 total P2 0 +7 6 2 1 total P3 0 +0 6 2 2 total P0 0 +1 6 2 2 total P1 0 +2 6 2 2 total P2 0 +3 6 2 2 total P3 0 material group out nuclide mean std. dev. +1 6 1 total 0 0 +0 6 2 total 0 0 material group in nuclide mean std. dev. +1 7 1 total 0 0 +0 7 2 total 0 0 material group in nuclide mean std. dev. +1 7 1 total 0 0 +0 7 2 total 0 0 material group in group out nuclide moment mean +12 7 1 1 total P0 0 +13 7 1 1 total P1 0 +14 7 1 1 total P2 0 +15 7 1 1 total P3 0 +8 7 1 2 total P0 0 +9 7 1 2 total P1 0 +10 7 1 2 total P2 0 +11 7 1 2 total P3 0 +4 7 2 1 total P0 0 +5 7 2 1 total P1 0 +6 7 2 1 total P2 0 +7 7 2 1 total P3 0 +0 7 2 2 total P0 0 +1 7 2 2 total P1 0 +2 7 2 2 total P2 0 +3 7 2 2 total P3 0 material group out nuclide mean std. dev. +1 7 1 total 0 0 +0 7 2 total 0 0 material group in nuclide mean std. dev. +1 8 1 total 0 0 +0 8 2 total 0 0 material group in nuclide mean std. dev. +1 8 1 total 0 0 +0 8 2 total 0 0 material group in group out nuclide moment mean +12 8 1 1 total P0 0 +13 8 1 1 total P1 0 +14 8 1 1 total P2 0 +15 8 1 1 total P3 0 +8 8 1 2 total P0 0 +9 8 1 2 total P1 0 +10 8 1 2 total P2 0 +11 8 1 2 total P3 0 +4 8 2 1 total P0 0 +5 8 2 1 total P1 0 +6 8 2 1 total P2 0 +7 8 2 1 total P3 0 +0 8 2 2 total P0 0 +1 8 2 2 total P1 0 +2 8 2 2 total P2 0 +3 8 2 2 total P3 0 material group out nuclide mean std. dev. +1 8 1 total 0 0 +0 8 2 total 0 0 material group in nuclide mean std. dev. 1 9 1 total 0.600536 0.748875 0 9 2 total 0.000000 0.000000 material group in nuclide mean std. dev. -1 9 1 total 0.0 0.0 -0 9 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 9 1 1 total 0.600536 0.748875 -2 9 1 2 total 0.000000 0.000000 -1 9 2 1 total 0.000000 0.000000 -0 9 2 2 total 0.000000 0.000000 material group out nuclide mean std. dev. -1 9 1 total 0.0 0.0 -0 9 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 9 1 total 0 0 +0 9 2 total 0 0 material group in group out nuclide moment mean +12 9 1 1 total P0 0.720380 +13 9 1 1 total P1 0.119844 +14 9 1 1 total P2 0.038522 +15 9 1 1 total P3 0.056023 +8 9 1 2 total P0 0.000000 +9 9 1 2 total P1 0.000000 +10 9 1 2 total P2 0.000000 +11 9 1 2 total P3 0.000000 +4 9 2 1 total P0 0.000000 +5 9 2 1 total P1 0.000000 +6 9 2 1 total P2 0.000000 +7 9 2 1 total P3 0.000000 +0 9 2 2 total P0 0.000000 +1 9 2 2 total P1 0.000000 +2 9 2 2 total P2 0.000000 +3 9 2 2 total P3 0.000000 material group out nuclide mean std. dev. +1 9 1 total 0 0 +0 9 2 total 0 0 material group in nuclide mean std. dev. 1 10 1 total 0.235515 0.613974 0 10 2 total 0.000000 0.000000 material group in nuclide mean std. dev. -1 10 1 total 0.0 0.0 -0 10 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 10 1 1 total 0.235515 0.613974 -2 10 1 2 total 0.000000 0.000000 -1 10 2 1 total 0.000000 0.000000 -0 10 2 2 total 0.000000 0.000000 material group out nuclide mean std. dev. -1 10 1 total 0.0 0.0 -0 10 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 10 1 total 0 0 +0 10 2 total 0 0 material group in group out nuclide moment mean +12 10 1 1 total P0 0.501009 +13 10 1 1 total P1 0.265494 +14 10 1 1 total P2 0.141979 +15 10 1 1 total P3 0.074258 +8 10 1 2 total P0 0.000000 +9 10 1 2 total P1 0.000000 +10 10 1 2 total P2 0.000000 +11 10 1 2 total P3 0.000000 +4 10 2 1 total P0 0.000000 +5 10 2 1 total P1 0.000000 +6 10 2 1 total P2 0.000000 +7 10 2 1 total P3 0.000000 +0 10 2 2 total P0 0.000000 +1 10 2 2 total P1 0.000000 +2 10 2 2 total P2 0.000000 +3 10 2 2 total P3 0.000000 material group out nuclide mean std. dev. +1 10 1 total 0 0 +0 10 2 total 0 0 material group in nuclide mean std. dev. 1 11 1 total 0.186324 0.632129 0 11 2 total 0.945986 1.591133 material group in nuclide mean std. dev. -1 11 1 total 0.0 0.0 -0 11 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 11 1 1 total 0.154449 0.597686 -2 11 1 2 total 0.031875 0.045078 -1 11 2 1 total 0.000000 0.000000 -0 11 2 2 total 0.903085 1.532144 material group out nuclide mean std. dev. -1 11 1 total 0.0 0.0 -0 11 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 11 1 total 0 0 +0 11 2 total 0 0 material group in group out nuclide moment mean +12 11 1 1 total P0 0.478128 +13 11 1 1 total P1 0.323679 +14 11 1 1 total P2 0.143375 +15 11 1 1 total P3 0.054003 +8 11 1 2 total P0 0.031875 +9 11 1 2 total P1 0.008585 +10 11 1 2 total P2 -0.012470 +11 11 1 2 total P3 -0.011320 +4 11 2 1 total P0 0.000000 +5 11 2 1 total P1 0.000000 +6 11 2 1 total P2 0.000000 +7 11 2 1 total P3 0.000000 +0 11 2 2 total P0 1.201250 +1 11 2 2 total P1 0.286611 +2 11 2 2 total P2 0.218191 +3 11 2 2 total P3 -0.048514 material group out nuclide mean std. dev. +1 11 1 total 0 0 +0 11 2 total 0 0 material group in nuclide mean std. dev. 1 12 1 total 0.213292 0.271444 0 12 2 total 1.390975 2.137346 material group in nuclide mean std. dev. -1 12 1 total 0.0 0.0 -0 12 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 12 1 1 total 0.186052 0.257633 -2 12 1 2 total 0.027240 0.029555 -1 12 2 1 total 0.000000 0.000000 -0 12 2 2 total 1.357118 2.089846 material group out nuclide mean std. dev. -1 12 1 total 0.0 0.0 -0 12 2 total 0.0 0.0 \ No newline at end of file +1 12 1 total 0 0 +0 12 2 total 0 0 material group in group out nuclide moment mean +12 12 1 1 total P0 0.408594 +13 12 1 1 total P1 0.222541 +14 12 1 1 total P2 0.090972 +15 12 1 1 total P3 0.031004 +8 12 1 2 total P0 0.027240 +9 12 1 2 total P1 -0.010088 +10 12 1 2 total P2 -0.006946 +11 12 1 2 total P3 0.009692 +4 12 2 1 total P0 0.000000 +5 12 2 1 total P1 0.000000 +6 12 2 1 total P2 0.000000 +7 12 2 1 total P3 0.000000 +0 12 2 2 total P0 1.574328 +1 12 2 2 total P1 0.229748 +2 12 2 2 total P2 0.014178 +3 12 2 2 total P3 0.038997 material group out nuclide mean std. dev. +1 12 1 total 0 0 +0 12 2 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py b/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py index 15f90cb872..6ee8813d03 100644 --- a/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py +++ b/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py @@ -28,6 +28,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi'] self.mgxs_lib.energy_groups = energy_groups + self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'material' self.mgxs_lib.build_library() diff --git a/tests/test_mgxs_library_nuclides/inputs_true.dat b/tests/test_mgxs_library_nuclides/inputs_true.dat index d2c11978a8..9e25fe96a6 100644 --- a/tests/test_mgxs_library_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_nuclides/inputs_true.dat @@ -1 +1 @@ -f4abbd7867b0f0d2d9d93ed089c95904541f970522e1ef3a843373b60094ef4571a64a7b5f68efe9e51fd49754bc9e20a3bcc85c0bde3a8224608f8b97c01b85 \ No newline at end of file +791a2bd647b8bae03aafc39e29ff1ce1ffc44063b0d757ccba4e1eda6eb73b8a275020f4f5774b17dede49fbf15549787279c8b2fc45caba0097155b32e56fa8 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index b0d62ebd08..20d2d8d5a4 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -134,211 +134,619 @@ 30 1 2 Sm-152 0.000000e+00 0.000000e+00 31 1 2 Eu-153 0.000000e+00 0.000000e+00 32 1 2 Gd-155 0.000000e+00 0.000000e+00 -33 1 2 O-16 0.000000e+00 0.000000e+00 material group in group out nuclide mean std. dev. -102 1 1 1 U-234 0.000000 0.000000 -103 1 1 1 U-235 0.003226 0.001139 -104 1 1 1 U-236 0.001697 0.000923 -105 1 1 1 U-238 0.194468 0.013279 -106 1 1 1 Np-237 0.000000 0.000000 -107 1 1 1 Pu-238 0.000000 0.000000 -108 1 1 1 Pu-239 0.001005 0.000477 -109 1 1 1 Pu-240 0.001307 0.000295 -110 1 1 1 Pu-241 0.000344 0.000244 -111 1 1 1 Pu-242 0.000000 0.000000 -112 1 1 1 Am-241 0.000000 0.000000 -113 1 1 1 Am-242m 0.000000 0.000000 -114 1 1 1 Am-243 0.000000 0.000000 -115 1 1 1 Cm-242 0.000000 0.000000 -116 1 1 1 Cm-243 0.000000 0.000000 -117 1 1 1 Cm-244 0.000000 0.000000 -118 1 1 1 Cm-245 0.000000 0.000000 -119 1 1 1 Mo-95 0.000000 0.000000 -120 1 1 1 Tc-99 0.000000 0.000000 -121 1 1 1 Ru-101 0.000238 0.000254 -122 1 1 1 Ru-103 0.000002 0.000243 -123 1 1 1 Ag-109 0.000000 0.000000 -124 1 1 1 Xe-135 0.000000 0.000000 -125 1 1 1 Cs-133 0.000000 0.000000 -126 1 1 1 Nd-143 0.000447 0.000292 -127 1 1 1 Nd-145 0.000564 0.000294 -128 1 1 1 Sm-147 0.000000 0.000000 -129 1 1 1 Sm-149 0.000000 0.000000 -130 1 1 1 Sm-150 0.000299 0.000238 -131 1 1 1 Sm-151 0.000000 0.000000 -132 1 1 1 Sm-152 0.000492 0.000352 -133 1 1 1 Eu-153 0.000000 0.000000 -134 1 1 1 Gd-155 0.000000 0.000000 -135 1 1 1 O-16 0.133156 0.009821 -68 1 1 2 U-234 0.000000 0.000000 -69 1 1 2 U-235 0.000000 0.000000 -70 1 1 2 U-236 0.000000 0.000000 -71 1 1 2 U-238 0.000173 0.000173 -72 1 1 2 Np-237 0.000000 0.000000 -73 1 1 2 Pu-238 0.000000 0.000000 -74 1 1 2 Pu-239 0.000000 0.000000 -75 1 1 2 Pu-240 0.000000 0.000000 -76 1 1 2 Pu-241 0.000000 0.000000 -77 1 1 2 Pu-242 0.000000 0.000000 -78 1 1 2 Am-241 0.000000 0.000000 -79 1 1 2 Am-242m 0.000000 0.000000 -80 1 1 2 Am-243 0.000000 0.000000 -81 1 1 2 Cm-242 0.000000 0.000000 -82 1 1 2 Cm-243 0.000000 0.000000 -83 1 1 2 Cm-244 0.000000 0.000000 -84 1 1 2 Cm-245 0.000000 0.000000 -85 1 1 2 Mo-95 0.000000 0.000000 -86 1 1 2 Tc-99 0.000000 0.000000 -87 1 1 2 Ru-101 0.000000 0.000000 -88 1 1 2 Ru-103 0.000000 0.000000 -89 1 1 2 Ag-109 0.000000 0.000000 -90 1 1 2 Xe-135 0.000000 0.000000 -91 1 1 2 Cs-133 0.000000 0.000000 -92 1 1 2 Nd-143 0.000000 0.000000 -93 1 1 2 Nd-145 0.000000 0.000000 -94 1 1 2 Sm-147 0.000000 0.000000 -95 1 1 2 Sm-149 0.000000 0.000000 -96 1 1 2 Sm-150 0.000000 0.000000 -97 1 1 2 Sm-151 0.000000 0.000000 -98 1 1 2 Sm-152 0.000000 0.000000 -99 1 1 2 Eu-153 0.000000 0.000000 -100 1 1 2 Gd-155 0.000000 0.000000 -101 1 1 2 O-16 0.001386 0.000446 -34 1 2 1 U-234 0.000000 0.000000 -35 1 2 1 U-235 0.000000 0.000000 -36 1 2 1 U-236 0.000000 0.000000 -37 1 2 1 U-238 0.000000 0.000000 -38 1 2 1 Np-237 0.000000 0.000000 -39 1 2 1 Pu-238 0.000000 0.000000 -40 1 2 1 Pu-239 0.000000 0.000000 -41 1 2 1 Pu-240 0.000000 0.000000 -42 1 2 1 Pu-241 0.000000 0.000000 -43 1 2 1 Pu-242 0.000000 0.000000 -44 1 2 1 Am-241 0.000000 0.000000 -45 1 2 1 Am-242m 0.000000 0.000000 -46 1 2 1 Am-243 0.000000 0.000000 -47 1 2 1 Cm-242 0.000000 0.000000 -48 1 2 1 Cm-243 0.000000 0.000000 -49 1 2 1 Cm-244 0.000000 0.000000 -50 1 2 1 Cm-245 0.000000 0.000000 -51 1 2 1 Mo-95 0.000000 0.000000 -52 1 2 1 Tc-99 0.000000 0.000000 -53 1 2 1 Ru-101 0.000000 0.000000 -54 1 2 1 Ru-103 0.000000 0.000000 -55 1 2 1 Ag-109 0.000000 0.000000 -56 1 2 1 Xe-135 0.000000 0.000000 -57 1 2 1 Cs-133 0.000000 0.000000 -58 1 2 1 Nd-143 0.000000 0.000000 -59 1 2 1 Nd-145 0.000000 0.000000 -60 1 2 1 Sm-147 0.000000 0.000000 -61 1 2 1 Sm-149 0.000000 0.000000 -62 1 2 1 Sm-150 0.000000 0.000000 -63 1 2 1 Sm-151 0.000000 0.000000 -64 1 2 1 Sm-152 0.000000 0.000000 -65 1 2 1 Eu-153 0.000000 0.000000 -66 1 2 1 Gd-155 0.000000 0.000000 -67 1 2 1 O-16 0.000000 0.000000 -0 1 2 2 U-234 0.000000 0.000000 -1 1 2 2 U-235 0.003889 0.003962 -2 1 2 2 U-236 0.001501 0.002037 -3 1 2 2 U-238 0.219715 0.025984 -4 1 2 2 Np-237 0.000000 0.000000 -5 1 2 2 Pu-238 0.000000 0.000000 -6 1 2 2 Pu-239 0.000000 0.000000 -7 1 2 2 Pu-240 0.000000 0.000000 -8 1 2 2 Pu-241 0.000000 0.000000 -9 1 2 2 Pu-242 0.000000 0.000000 -10 1 2 2 Am-241 0.000000 0.000000 -11 1 2 2 Am-242m 0.000000 0.000000 -12 1 2 2 Am-243 0.000000 0.000000 -13 1 2 2 Cm-242 0.000000 0.000000 -14 1 2 2 Cm-243 0.000000 0.000000 -15 1 2 2 Cm-244 0.000000 0.000000 -16 1 2 2 Cm-245 0.000000 0.000000 -17 1 2 2 Mo-95 0.000000 0.000000 -18 1 2 2 Tc-99 0.000000 0.000000 -19 1 2 2 Ru-101 0.000000 0.000000 -20 1 2 2 Ru-103 0.000000 0.000000 -21 1 2 2 Ag-109 0.000000 0.000000 -22 1 2 2 Xe-135 0.000000 0.000000 -23 1 2 2 Cs-133 0.000000 0.000000 -24 1 2 2 Nd-143 0.000000 0.000000 -25 1 2 2 Nd-145 0.000000 0.000000 -26 1 2 2 Sm-147 0.000000 0.000000 -27 1 2 2 Sm-149 0.000000 0.000000 -28 1 2 2 Sm-150 0.000000 0.000000 -29 1 2 2 Sm-151 0.000000 0.000000 -30 1 2 2 Sm-152 0.000000 0.000000 -31 1 2 2 Eu-153 0.000000 0.000000 -32 1 2 2 Gd-155 0.000000 0.000000 -33 1 2 2 O-16 0.196946 0.014729 material group out nuclide mean std. dev. -34 1 1 U-234 0.0 0.000000 -35 1 1 U-235 1.0 0.066362 -36 1 1 U-236 0.0 0.000000 -37 1 1 U-238 1.0 0.093082 -38 1 1 Np-237 0.0 0.000000 -39 1 1 Pu-238 0.0 0.000000 -40 1 1 Pu-239 1.0 0.104567 -41 1 1 Pu-240 0.0 0.000000 -42 1 1 Pu-241 1.0 0.263696 -43 1 1 Pu-242 0.0 0.000000 -44 1 1 Am-241 0.0 0.000000 -45 1 1 Am-242m 0.0 0.000000 -46 1 1 Am-243 0.0 0.000000 -47 1 1 Cm-242 0.0 0.000000 -48 1 1 Cm-243 0.0 0.000000 -49 1 1 Cm-244 0.0 0.000000 -50 1 1 Cm-245 0.0 0.000000 -51 1 1 Mo-95 0.0 0.000000 -52 1 1 Tc-99 0.0 0.000000 -53 1 1 Ru-101 0.0 0.000000 -54 1 1 Ru-103 0.0 0.000000 -55 1 1 Ag-109 0.0 0.000000 -56 1 1 Xe-135 0.0 0.000000 -57 1 1 Cs-133 0.0 0.000000 -58 1 1 Nd-143 0.0 0.000000 -59 1 1 Nd-145 0.0 0.000000 -60 1 1 Sm-147 0.0 0.000000 -61 1 1 Sm-149 0.0 0.000000 -62 1 1 Sm-150 0.0 0.000000 -63 1 1 Sm-151 0.0 0.000000 -64 1 1 Sm-152 0.0 0.000000 -65 1 1 Eu-153 0.0 0.000000 -66 1 1 Gd-155 0.0 0.000000 -67 1 1 O-16 0.0 0.000000 -0 1 2 U-234 0.0 0.000000 -1 1 2 U-235 0.0 0.000000 -2 1 2 U-236 0.0 0.000000 -3 1 2 U-238 0.0 0.000000 -4 1 2 Np-237 0.0 0.000000 -5 1 2 Pu-238 0.0 0.000000 -6 1 2 Pu-239 0.0 0.000000 -7 1 2 Pu-240 0.0 0.000000 -8 1 2 Pu-241 0.0 0.000000 -9 1 2 Pu-242 0.0 0.000000 -10 1 2 Am-241 0.0 0.000000 -11 1 2 Am-242m 0.0 0.000000 -12 1 2 Am-243 0.0 0.000000 -13 1 2 Cm-242 0.0 0.000000 -14 1 2 Cm-243 0.0 0.000000 -15 1 2 Cm-244 0.0 0.000000 -16 1 2 Cm-245 0.0 0.000000 -17 1 2 Mo-95 0.0 0.000000 -18 1 2 Tc-99 0.0 0.000000 -19 1 2 Ru-101 0.0 0.000000 -20 1 2 Ru-103 0.0 0.000000 -21 1 2 Ag-109 0.0 0.000000 -22 1 2 Xe-135 0.0 0.000000 -23 1 2 Cs-133 0.0 0.000000 -24 1 2 Nd-143 0.0 0.000000 -25 1 2 Nd-145 0.0 0.000000 -26 1 2 Sm-147 0.0 0.000000 -27 1 2 Sm-149 0.0 0.000000 -28 1 2 Sm-150 0.0 0.000000 -29 1 2 Sm-151 0.0 0.000000 -30 1 2 Sm-152 0.0 0.000000 -31 1 2 Eu-153 0.0 0.000000 -32 1 2 Gd-155 0.0 0.000000 -33 1 2 O-16 0.0 0.000000 material group in nuclide mean std. dev. +33 1 2 O-16 0.000000e+00 0.000000e+00 material group in group out nuclide moment mean +408 1 1 1 U-234 P0 0.000000 +409 1 1 1 U-234 P1 0.000000 +410 1 1 1 U-234 P2 0.000000 +411 1 1 1 U-234 P3 0.000000 +412 1 1 1 U-235 P0 0.003812 +413 1 1 1 U-235 P1 0.000586 +414 1 1 1 U-235 P2 0.000071 +415 1 1 1 U-235 P3 0.000277 +416 1 1 1 U-236 P0 0.001733 +417 1 1 1 U-236 P1 0.000035 +418 1 1 1 U-236 P2 -0.000183 +419 1 1 1 U-236 P3 -0.000087 +420 1 1 1 U-238 P0 0.224908 +421 1 1 1 U-238 P1 0.030440 +422 1 1 1 U-238 P2 0.014265 +423 1 1 1 U-238 P3 0.007698 +424 1 1 1 Np-237 P0 0.000000 +425 1 1 1 Np-237 P1 0.000000 +426 1 1 1 Np-237 P2 0.000000 +427 1 1 1 Np-237 P3 0.000000 +428 1 1 1 Pu-238 P0 0.000000 +429 1 1 1 Pu-238 P1 0.000000 +430 1 1 1 Pu-238 P2 0.000000 +431 1 1 1 Pu-238 P3 0.000000 +432 1 1 1 Pu-239 P0 0.001040 +433 1 1 1 Pu-239 P1 0.000034 +434 1 1 1 Pu-239 P2 0.000090 +435 1 1 1 Pu-239 P3 0.000110 +436 1 1 1 Pu-240 P0 0.001040 +437 1 1 1 Pu-240 P1 -0.000268 +438 1 1 1 Pu-240 P2 -0.000137 +439 1 1 1 Pu-240 P3 0.000132 +440 1 1 1 Pu-241 P0 0.000173 +441 1 1 1 Pu-241 P1 -0.000170 +442 1 1 1 Pu-241 P2 0.000165 +443 1 1 1 Pu-241 P3 -0.000156 +444 1 1 1 Pu-242 P0 0.000000 +445 1 1 1 Pu-242 P1 0.000000 +446 1 1 1 Pu-242 P2 0.000000 +447 1 1 1 Pu-242 P3 0.000000 +448 1 1 1 Am-241 P0 0.000000 +449 1 1 1 Am-241 P1 0.000000 +450 1 1 1 Am-241 P2 0.000000 +451 1 1 1 Am-241 P3 0.000000 +452 1 1 1 Am-242m P0 0.000000 +453 1 1 1 Am-242m P1 0.000000 +454 1 1 1 Am-242m P2 0.000000 +455 1 1 1 Am-242m P3 0.000000 +456 1 1 1 Am-243 P0 0.000000 +457 1 1 1 Am-243 P1 0.000000 +458 1 1 1 Am-243 P2 0.000000 +459 1 1 1 Am-243 P3 0.000000 +460 1 1 1 Cm-242 P0 0.000000 +461 1 1 1 Cm-242 P1 0.000000 +462 1 1 1 Cm-242 P2 0.000000 +463 1 1 1 Cm-242 P3 0.000000 +464 1 1 1 Cm-243 P0 0.000000 +465 1 1 1 Cm-243 P1 0.000000 +466 1 1 1 Cm-243 P2 0.000000 +467 1 1 1 Cm-243 P3 0.000000 +468 1 1 1 Cm-244 P0 0.000000 +469 1 1 1 Cm-244 P1 0.000000 +470 1 1 1 Cm-244 P2 0.000000 +471 1 1 1 Cm-244 P3 0.000000 +472 1 1 1 Cm-245 P0 0.000000 +473 1 1 1 Cm-245 P1 0.000000 +474 1 1 1 Cm-245 P2 0.000000 +475 1 1 1 Cm-245 P3 0.000000 +476 1 1 1 Mo-95 P0 0.000000 +477 1 1 1 Mo-95 P1 0.000000 +478 1 1 1 Mo-95 P2 0.000000 +479 1 1 1 Mo-95 P3 0.000000 +480 1 1 1 Tc-99 P0 0.000000 +481 1 1 1 Tc-99 P1 0.000000 +482 1 1 1 Tc-99 P2 0.000000 +483 1 1 1 Tc-99 P3 0.000000 +484 1 1 1 Ru-101 P0 0.000347 +485 1 1 1 Ru-101 P1 0.000109 +486 1 1 1 Ru-101 P2 -0.000020 +487 1 1 1 Ru-101 P3 0.000023 +488 1 1 1 Ru-103 P0 0.000173 +489 1 1 1 Ru-103 P1 0.000171 +490 1 1 1 Ru-103 P2 0.000167 +491 1 1 1 Ru-103 P3 0.000160 +492 1 1 1 Ag-109 P0 0.000000 +493 1 1 1 Ag-109 P1 0.000000 +494 1 1 1 Ag-109 P2 0.000000 +495 1 1 1 Ag-109 P3 0.000000 +496 1 1 1 Xe-135 P0 0.000000 +497 1 1 1 Xe-135 P1 0.000000 +498 1 1 1 Xe-135 P2 0.000000 +499 1 1 1 Xe-135 P3 0.000000 +500 1 1 1 Cs-133 P0 0.000000 +501 1 1 1 Cs-133 P1 0.000000 +502 1 1 1 Cs-133 P2 0.000000 +503 1 1 1 Cs-133 P3 0.000000 +504 1 1 1 Nd-143 P0 0.000520 +505 1 1 1 Nd-143 P1 0.000073 +506 1 1 1 Nd-143 P2 0.000023 +507 1 1 1 Nd-143 P3 -0.000103 +508 1 1 1 Nd-145 P0 0.000520 +509 1 1 1 Nd-145 P1 -0.000044 +510 1 1 1 Nd-145 P2 0.000026 +511 1 1 1 Nd-145 P3 0.000126 +512 1 1 1 Sm-147 P0 0.000000 +513 1 1 1 Sm-147 P1 0.000000 +514 1 1 1 Sm-147 P2 0.000000 +515 1 1 1 Sm-147 P3 0.000000 +516 1 1 1 Sm-149 P0 0.000000 +517 1 1 1 Sm-149 P1 0.000000 +518 1 1 1 Sm-149 P2 0.000000 +519 1 1 1 Sm-149 P3 0.000000 +520 1 1 1 Sm-150 P0 0.000347 +521 1 1 1 Sm-150 P1 0.000048 +522 1 1 1 Sm-150 P2 -0.000090 +523 1 1 1 Sm-150 P3 -0.000019 +524 1 1 1 Sm-151 P0 0.000000 +525 1 1 1 Sm-151 P1 0.000000 +526 1 1 1 Sm-151 P2 0.000000 +527 1 1 1 Sm-151 P3 0.000000 +528 1 1 1 Sm-152 P0 0.000693 +529 1 1 1 Sm-152 P1 0.000201 +530 1 1 1 Sm-152 P2 -0.000044 +531 1 1 1 Sm-152 P3 0.000138 +532 1 1 1 Eu-153 P0 0.000000 +533 1 1 1 Eu-153 P1 0.000000 +534 1 1 1 Eu-153 P2 0.000000 +535 1 1 1 Eu-153 P3 0.000000 +536 1 1 1 Gd-155 P0 0.000000 +537 1 1 1 Gd-155 P1 0.000000 +538 1 1 1 Gd-155 P2 0.000000 +539 1 1 1 Gd-155 P3 0.000000 +540 1 1 1 O-16 P0 0.146242 +541 1 1 1 O-16 P1 0.013087 +542 1 1 1 O-16 P2 0.006314 +543 1 1 1 O-16 P3 0.005397 +272 1 1 2 U-234 P0 0.000000 +273 1 1 2 U-234 P1 0.000000 +274 1 1 2 U-234 P2 0.000000 +275 1 1 2 U-234 P3 0.000000 +276 1 1 2 U-235 P0 0.000000 +277 1 1 2 U-235 P1 0.000000 +278 1 1 2 U-235 P2 0.000000 +279 1 1 2 U-235 P3 0.000000 +280 1 1 2 U-236 P0 0.000000 +281 1 1 2 U-236 P1 0.000000 +282 1 1 2 U-236 P2 0.000000 +283 1 1 2 U-236 P3 0.000000 +284 1 1 2 U-238 P0 0.000173 +285 1 1 2 U-238 P1 -0.000038 +286 1 1 2 U-238 P2 -0.000074 +287 1 1 2 U-238 P3 0.000052 +288 1 1 2 Np-237 P0 0.000000 +289 1 1 2 Np-237 P1 0.000000 +290 1 1 2 Np-237 P2 0.000000 +291 1 1 2 Np-237 P3 0.000000 +292 1 1 2 Pu-238 P0 0.000000 +293 1 1 2 Pu-238 P1 0.000000 +294 1 1 2 Pu-238 P2 0.000000 +295 1 1 2 Pu-238 P3 0.000000 +296 1 1 2 Pu-239 P0 0.000000 +297 1 1 2 Pu-239 P1 0.000000 +298 1 1 2 Pu-239 P2 0.000000 +299 1 1 2 Pu-239 P3 0.000000 +300 1 1 2 Pu-240 P0 0.000000 +301 1 1 2 Pu-240 P1 0.000000 +302 1 1 2 Pu-240 P2 0.000000 +303 1 1 2 Pu-240 P3 0.000000 +304 1 1 2 Pu-241 P0 0.000000 +305 1 1 2 Pu-241 P1 0.000000 +306 1 1 2 Pu-241 P2 0.000000 +307 1 1 2 Pu-241 P3 0.000000 +308 1 1 2 Pu-242 P0 0.000000 +309 1 1 2 Pu-242 P1 0.000000 +310 1 1 2 Pu-242 P2 0.000000 +311 1 1 2 Pu-242 P3 0.000000 +312 1 1 2 Am-241 P0 0.000000 +313 1 1 2 Am-241 P1 0.000000 +314 1 1 2 Am-241 P2 0.000000 +315 1 1 2 Am-241 P3 0.000000 +316 1 1 2 Am-242m P0 0.000000 +317 1 1 2 Am-242m P1 0.000000 +318 1 1 2 Am-242m P2 0.000000 +319 1 1 2 Am-242m P3 0.000000 +320 1 1 2 Am-243 P0 0.000000 +321 1 1 2 Am-243 P1 0.000000 +322 1 1 2 Am-243 P2 0.000000 +323 1 1 2 Am-243 P3 0.000000 +324 1 1 2 Cm-242 P0 0.000000 +325 1 1 2 Cm-242 P1 0.000000 +326 1 1 2 Cm-242 P2 0.000000 +327 1 1 2 Cm-242 P3 0.000000 +328 1 1 2 Cm-243 P0 0.000000 +329 1 1 2 Cm-243 P1 0.000000 +330 1 1 2 Cm-243 P2 0.000000 +331 1 1 2 Cm-243 P3 0.000000 +332 1 1 2 Cm-244 P0 0.000000 +333 1 1 2 Cm-244 P1 0.000000 +334 1 1 2 Cm-244 P2 0.000000 +335 1 1 2 Cm-244 P3 0.000000 +336 1 1 2 Cm-245 P0 0.000000 +337 1 1 2 Cm-245 P1 0.000000 +338 1 1 2 Cm-245 P2 0.000000 +339 1 1 2 Cm-245 P3 0.000000 +340 1 1 2 Mo-95 P0 0.000000 +341 1 1 2 Mo-95 P1 0.000000 +342 1 1 2 Mo-95 P2 0.000000 +343 1 1 2 Mo-95 P3 0.000000 +344 1 1 2 Tc-99 P0 0.000000 +345 1 1 2 Tc-99 P1 0.000000 +346 1 1 2 Tc-99 P2 0.000000 +347 1 1 2 Tc-99 P3 0.000000 +348 1 1 2 Ru-101 P0 0.000000 +349 1 1 2 Ru-101 P1 0.000000 +350 1 1 2 Ru-101 P2 0.000000 +351 1 1 2 Ru-101 P3 0.000000 +352 1 1 2 Ru-103 P0 0.000000 +353 1 1 2 Ru-103 P1 0.000000 +354 1 1 2 Ru-103 P2 0.000000 +355 1 1 2 Ru-103 P3 0.000000 +356 1 1 2 Ag-109 P0 0.000000 +357 1 1 2 Ag-109 P1 0.000000 +358 1 1 2 Ag-109 P2 0.000000 +359 1 1 2 Ag-109 P3 0.000000 +360 1 1 2 Xe-135 P0 0.000000 +361 1 1 2 Xe-135 P1 0.000000 +362 1 1 2 Xe-135 P2 0.000000 +363 1 1 2 Xe-135 P3 0.000000 +364 1 1 2 Cs-133 P0 0.000000 +365 1 1 2 Cs-133 P1 0.000000 +366 1 1 2 Cs-133 P2 0.000000 +367 1 1 2 Cs-133 P3 0.000000 +368 1 1 2 Nd-143 P0 0.000000 +369 1 1 2 Nd-143 P1 0.000000 +370 1 1 2 Nd-143 P2 0.000000 +371 1 1 2 Nd-143 P3 0.000000 +372 1 1 2 Nd-145 P0 0.000000 +373 1 1 2 Nd-145 P1 0.000000 +374 1 1 2 Nd-145 P2 0.000000 +375 1 1 2 Nd-145 P3 0.000000 +376 1 1 2 Sm-147 P0 0.000000 +377 1 1 2 Sm-147 P1 0.000000 +378 1 1 2 Sm-147 P2 0.000000 +379 1 1 2 Sm-147 P3 0.000000 +380 1 1 2 Sm-149 P0 0.000000 +381 1 1 2 Sm-149 P1 0.000000 +382 1 1 2 Sm-149 P2 0.000000 +383 1 1 2 Sm-149 P3 0.000000 +384 1 1 2 Sm-150 P0 0.000000 +385 1 1 2 Sm-150 P1 0.000000 +386 1 1 2 Sm-150 P2 0.000000 +387 1 1 2 Sm-150 P3 0.000000 +388 1 1 2 Sm-151 P0 0.000000 +389 1 1 2 Sm-151 P1 0.000000 +390 1 1 2 Sm-151 P2 0.000000 +391 1 1 2 Sm-151 P3 0.000000 +392 1 1 2 Sm-152 P0 0.000000 +393 1 1 2 Sm-152 P1 0.000000 +394 1 1 2 Sm-152 P2 0.000000 +395 1 1 2 Sm-152 P3 0.000000 +396 1 1 2 Eu-153 P0 0.000000 +397 1 1 2 Eu-153 P1 0.000000 +398 1 1 2 Eu-153 P2 0.000000 +399 1 1 2 Eu-153 P3 0.000000 +400 1 1 2 Gd-155 P0 0.000000 +401 1 1 2 Gd-155 P1 0.000000 +402 1 1 2 Gd-155 P2 0.000000 +403 1 1 2 Gd-155 P3 0.000000 +404 1 1 2 O-16 P0 0.001386 +405 1 1 2 O-16 P1 -0.000559 +406 1 1 2 O-16 P2 -0.000165 +407 1 1 2 O-16 P3 0.000123 +136 1 2 1 U-234 P0 0.000000 +137 1 2 1 U-234 P1 0.000000 +138 1 2 1 U-234 P2 0.000000 +139 1 2 1 U-234 P3 0.000000 +140 1 2 1 U-235 P0 0.000000 +141 1 2 1 U-235 P1 0.000000 +142 1 2 1 U-235 P2 0.000000 +143 1 2 1 U-235 P3 0.000000 +144 1 2 1 U-236 P0 0.000000 +145 1 2 1 U-236 P1 0.000000 +146 1 2 1 U-236 P2 0.000000 +147 1 2 1 U-236 P3 0.000000 +148 1 2 1 U-238 P0 0.000000 +149 1 2 1 U-238 P1 0.000000 +150 1 2 1 U-238 P2 0.000000 +151 1 2 1 U-238 P3 0.000000 +152 1 2 1 Np-237 P0 0.000000 +153 1 2 1 Np-237 P1 0.000000 +154 1 2 1 Np-237 P2 0.000000 +155 1 2 1 Np-237 P3 0.000000 +156 1 2 1 Pu-238 P0 0.000000 +157 1 2 1 Pu-238 P1 0.000000 +158 1 2 1 Pu-238 P2 0.000000 +159 1 2 1 Pu-238 P3 0.000000 +160 1 2 1 Pu-239 P0 0.000000 +161 1 2 1 Pu-239 P1 0.000000 +162 1 2 1 Pu-239 P2 0.000000 +163 1 2 1 Pu-239 P3 0.000000 +164 1 2 1 Pu-240 P0 0.000000 +165 1 2 1 Pu-240 P1 0.000000 +166 1 2 1 Pu-240 P2 0.000000 +167 1 2 1 Pu-240 P3 0.000000 +168 1 2 1 Pu-241 P0 0.000000 +169 1 2 1 Pu-241 P1 0.000000 +170 1 2 1 Pu-241 P2 0.000000 +171 1 2 1 Pu-241 P3 0.000000 +172 1 2 1 Pu-242 P0 0.000000 +173 1 2 1 Pu-242 P1 0.000000 +174 1 2 1 Pu-242 P2 0.000000 +175 1 2 1 Pu-242 P3 0.000000 +176 1 2 1 Am-241 P0 0.000000 +177 1 2 1 Am-241 P1 0.000000 +178 1 2 1 Am-241 P2 0.000000 +179 1 2 1 Am-241 P3 0.000000 +180 1 2 1 Am-242m P0 0.000000 +181 1 2 1 Am-242m P1 0.000000 +182 1 2 1 Am-242m P2 0.000000 +183 1 2 1 Am-242m P3 0.000000 +184 1 2 1 Am-243 P0 0.000000 +185 1 2 1 Am-243 P1 0.000000 +186 1 2 1 Am-243 P2 0.000000 +187 1 2 1 Am-243 P3 0.000000 +188 1 2 1 Cm-242 P0 0.000000 +189 1 2 1 Cm-242 P1 0.000000 +190 1 2 1 Cm-242 P2 0.000000 +191 1 2 1 Cm-242 P3 0.000000 +192 1 2 1 Cm-243 P0 0.000000 +193 1 2 1 Cm-243 P1 0.000000 +194 1 2 1 Cm-243 P2 0.000000 +195 1 2 1 Cm-243 P3 0.000000 +196 1 2 1 Cm-244 P0 0.000000 +197 1 2 1 Cm-244 P1 0.000000 +198 1 2 1 Cm-244 P2 0.000000 +199 1 2 1 Cm-244 P3 0.000000 +200 1 2 1 Cm-245 P0 0.000000 +201 1 2 1 Cm-245 P1 0.000000 +202 1 2 1 Cm-245 P2 0.000000 +203 1 2 1 Cm-245 P3 0.000000 +204 1 2 1 Mo-95 P0 0.000000 +205 1 2 1 Mo-95 P1 0.000000 +206 1 2 1 Mo-95 P2 0.000000 +207 1 2 1 Mo-95 P3 0.000000 +208 1 2 1 Tc-99 P0 0.000000 +209 1 2 1 Tc-99 P1 0.000000 +210 1 2 1 Tc-99 P2 0.000000 +211 1 2 1 Tc-99 P3 0.000000 +212 1 2 1 Ru-101 P0 0.000000 +213 1 2 1 Ru-101 P1 0.000000 +214 1 2 1 Ru-101 P2 0.000000 +215 1 2 1 Ru-101 P3 0.000000 +216 1 2 1 Ru-103 P0 0.000000 +217 1 2 1 Ru-103 P1 0.000000 +218 1 2 1 Ru-103 P2 0.000000 +219 1 2 1 Ru-103 P3 0.000000 +220 1 2 1 Ag-109 P0 0.000000 +221 1 2 1 Ag-109 P1 0.000000 +222 1 2 1 Ag-109 P2 0.000000 +223 1 2 1 Ag-109 P3 0.000000 +224 1 2 1 Xe-135 P0 0.000000 +225 1 2 1 Xe-135 P1 0.000000 +226 1 2 1 Xe-135 P2 0.000000 +227 1 2 1 Xe-135 P3 0.000000 +228 1 2 1 Cs-133 P0 0.000000 +229 1 2 1 Cs-133 P1 0.000000 +230 1 2 1 Cs-133 P2 0.000000 +231 1 2 1 Cs-133 P3 0.000000 +232 1 2 1 Nd-143 P0 0.000000 +233 1 2 1 Nd-143 P1 0.000000 +234 1 2 1 Nd-143 P2 0.000000 +235 1 2 1 Nd-143 P3 0.000000 +236 1 2 1 Nd-145 P0 0.000000 +237 1 2 1 Nd-145 P1 0.000000 +238 1 2 1 Nd-145 P2 0.000000 +239 1 2 1 Nd-145 P3 0.000000 +240 1 2 1 Sm-147 P0 0.000000 +241 1 2 1 Sm-147 P1 0.000000 +242 1 2 1 Sm-147 P2 0.000000 +243 1 2 1 Sm-147 P3 0.000000 +244 1 2 1 Sm-149 P0 0.000000 +245 1 2 1 Sm-149 P1 0.000000 +246 1 2 1 Sm-149 P2 0.000000 +247 1 2 1 Sm-149 P3 0.000000 +248 1 2 1 Sm-150 P0 0.000000 +249 1 2 1 Sm-150 P1 0.000000 +250 1 2 1 Sm-150 P2 0.000000 +251 1 2 1 Sm-150 P3 0.000000 +252 1 2 1 Sm-151 P0 0.000000 +253 1 2 1 Sm-151 P1 0.000000 +254 1 2 1 Sm-151 P2 0.000000 +255 1 2 1 Sm-151 P3 0.000000 +256 1 2 1 Sm-152 P0 0.000000 +257 1 2 1 Sm-152 P1 0.000000 +258 1 2 1 Sm-152 P2 0.000000 +259 1 2 1 Sm-152 P3 0.000000 +260 1 2 1 Eu-153 P0 0.000000 +261 1 2 1 Eu-153 P1 0.000000 +262 1 2 1 Eu-153 P2 0.000000 +263 1 2 1 Eu-153 P3 0.000000 +264 1 2 1 Gd-155 P0 0.000000 +265 1 2 1 Gd-155 P1 0.000000 +266 1 2 1 Gd-155 P2 0.000000 +267 1 2 1 Gd-155 P3 0.000000 +268 1 2 1 O-16 P0 0.000000 +269 1 2 1 O-16 P1 0.000000 +270 1 2 1 O-16 P2 0.000000 +271 1 2 1 O-16 P3 0.000000 +0 1 2 2 U-234 P0 0.000000 +1 1 2 2 U-234 P1 0.000000 +2 1 2 2 U-234 P2 0.000000 +3 1 2 2 U-234 P3 0.000000 +4 1 2 2 U-235 P0 0.003960 +5 1 2 2 U-235 P1 0.000071 +6 1 2 2 U-235 P2 0.001232 +7 1 2 2 U-235 P3 0.000182 +8 1 2 2 U-236 P0 0.001980 +9 1 2 2 U-236 P1 0.000479 +10 1 2 2 U-236 P2 -0.000816 +11 1 2 2 U-236 P3 -0.000648 +12 1 2 2 U-238 P0 0.205918 +13 1 2 2 U-238 P1 -0.013364 +14 1 2 2 U-238 P2 -0.010941 +15 1 2 2 U-238 P3 0.000772 +16 1 2 2 Np-237 P0 0.000000 +17 1 2 2 Np-237 P1 0.000000 +18 1 2 2 Np-237 P2 0.000000 +19 1 2 2 Np-237 P3 0.000000 +20 1 2 2 Pu-238 P0 0.000000 +21 1 2 2 Pu-238 P1 0.000000 +22 1 2 2 Pu-238 P2 0.000000 +23 1 2 2 Pu-238 P3 0.000000 +24 1 2 2 Pu-239 P0 0.000000 +25 1 2 2 Pu-239 P1 0.000000 +26 1 2 2 Pu-239 P2 0.000000 +27 1 2 2 Pu-239 P3 0.000000 +28 1 2 2 Pu-240 P0 0.000000 +29 1 2 2 Pu-240 P1 0.000000 +30 1 2 2 Pu-240 P2 0.000000 +31 1 2 2 Pu-240 P3 0.000000 +32 1 2 2 Pu-241 P0 0.000000 +33 1 2 2 Pu-241 P1 0.000000 +34 1 2 2 Pu-241 P2 0.000000 +35 1 2 2 Pu-241 P3 0.000000 +36 1 2 2 Pu-242 P0 0.000000 +37 1 2 2 Pu-242 P1 0.000000 +38 1 2 2 Pu-242 P2 0.000000 +39 1 2 2 Pu-242 P3 0.000000 +40 1 2 2 Am-241 P0 0.000000 +41 1 2 2 Am-241 P1 0.000000 +42 1 2 2 Am-241 P2 0.000000 +43 1 2 2 Am-241 P3 0.000000 +44 1 2 2 Am-242m P0 0.000000 +45 1 2 2 Am-242m P1 0.000000 +46 1 2 2 Am-242m P2 0.000000 +47 1 2 2 Am-242m P3 0.000000 +48 1 2 2 Am-243 P0 0.000000 +49 1 2 2 Am-243 P1 0.000000 +50 1 2 2 Am-243 P2 0.000000 +51 1 2 2 Am-243 P3 0.000000 +52 1 2 2 Cm-242 P0 0.000000 +53 1 2 2 Cm-242 P1 0.000000 +54 1 2 2 Cm-242 P2 0.000000 +55 1 2 2 Cm-242 P3 0.000000 +56 1 2 2 Cm-243 P0 0.000000 +57 1 2 2 Cm-243 P1 0.000000 +58 1 2 2 Cm-243 P2 0.000000 +59 1 2 2 Cm-243 P3 0.000000 +60 1 2 2 Cm-244 P0 0.000000 +61 1 2 2 Cm-244 P1 0.000000 +62 1 2 2 Cm-244 P2 0.000000 +63 1 2 2 Cm-244 P3 0.000000 +64 1 2 2 Cm-245 P0 0.000000 +65 1 2 2 Cm-245 P1 0.000000 +66 1 2 2 Cm-245 P2 0.000000 +67 1 2 2 Cm-245 P3 0.000000 +68 1 2 2 Mo-95 P0 0.000000 +69 1 2 2 Mo-95 P1 0.000000 +70 1 2 2 Mo-95 P2 0.000000 +71 1 2 2 Mo-95 P3 0.000000 +72 1 2 2 Tc-99 P0 0.000000 +73 1 2 2 Tc-99 P1 0.000000 +74 1 2 2 Tc-99 P2 0.000000 +75 1 2 2 Tc-99 P3 0.000000 +76 1 2 2 Ru-101 P0 0.000000 +77 1 2 2 Ru-101 P1 0.000000 +78 1 2 2 Ru-101 P2 0.000000 +79 1 2 2 Ru-101 P3 0.000000 +80 1 2 2 Ru-103 P0 0.000000 +81 1 2 2 Ru-103 P1 0.000000 +82 1 2 2 Ru-103 P2 0.000000 +83 1 2 2 Ru-103 P3 0.000000 +84 1 2 2 Ag-109 P0 0.000000 +85 1 2 2 Ag-109 P1 0.000000 +86 1 2 2 Ag-109 P2 0.000000 +87 1 2 2 Ag-109 P3 0.000000 +88 1 2 2 Xe-135 P0 0.000000 +89 1 2 2 Xe-135 P1 0.000000 +90 1 2 2 Xe-135 P2 0.000000 +91 1 2 2 Xe-135 P3 0.000000 +92 1 2 2 Cs-133 P0 0.000000 +93 1 2 2 Cs-133 P1 0.000000 +94 1 2 2 Cs-133 P2 0.000000 +95 1 2 2 Cs-133 P3 0.000000 +96 1 2 2 Nd-143 P0 0.000000 +97 1 2 2 Nd-143 P1 0.000000 +98 1 2 2 Nd-143 P2 0.000000 +99 1 2 2 Nd-143 P3 0.000000 +100 1 2 2 Nd-145 P0 0.000000 +101 1 2 2 Nd-145 P1 0.000000 +102 1 2 2 Nd-145 P2 0.000000 +103 1 2 2 Nd-145 P3 0.000000 +104 1 2 2 Sm-147 P0 0.000000 +105 1 2 2 Sm-147 P1 0.000000 +106 1 2 2 Sm-147 P2 0.000000 +107 1 2 2 Sm-147 P3 0.000000 +108 1 2 2 Sm-149 P0 0.000000 +109 1 2 2 Sm-149 P1 0.000000 +110 1 2 2 Sm-149 P2 0.000000 +111 1 2 2 Sm-149 P3 0.000000 +112 1 2 2 Sm-150 P0 0.000000 +113 1 2 2 Sm-150 P1 0.000000 +114 1 2 2 Sm-150 P2 0.000000 +115 1 2 2 Sm-150 P3 0.000000 +116 1 2 2 Sm-151 P0 0.000000 +117 1 2 2 Sm-151 P1 0.000000 +118 1 2 2 Sm-151 P2 0.000000 +119 1 2 2 Sm-151 P3 0.000000 +120 1 2 2 Sm-152 P0 0.000000 +121 1 2 2 Sm-152 P1 0.000000 +122 1 2 2 Sm-152 P2 0.000000 +123 1 2 2 Sm-152 P3 0.000000 +124 1 2 2 Eu-153 P0 0.000000 +125 1 2 2 Eu-153 P1 0.000000 +126 1 2 2 Eu-153 P2 0.000000 +127 1 2 2 Eu-153 P3 0.000000 +128 1 2 2 Gd-155 P0 0.000000 +129 1 2 2 Gd-155 P1 0.000000 +130 1 2 2 Gd-155 P2 0.000000 +131 1 2 2 Gd-155 P3 0.000000 +132 1 2 2 O-16 P0 0.192058 +133 1 2 2 O-16 P1 0.001504 +134 1 2 2 O-16 P2 -0.004281 +135 1 2 2 O-16 P3 -0.007160 material group out nuclide mean std. dev. +34 1 1 U-234 0 0.000000 +35 1 1 U-235 1 0.066362 +36 1 1 U-236 0 0.000000 +37 1 1 U-238 1 0.093082 +38 1 1 Np-237 0 0.000000 +39 1 1 Pu-238 0 0.000000 +40 1 1 Pu-239 1 0.104567 +41 1 1 Pu-240 0 0.000000 +42 1 1 Pu-241 1 0.263696 +43 1 1 Pu-242 0 0.000000 +44 1 1 Am-241 0 0.000000 +45 1 1 Am-242m 0 0.000000 +46 1 1 Am-243 0 0.000000 +47 1 1 Cm-242 0 0.000000 +48 1 1 Cm-243 0 0.000000 +49 1 1 Cm-244 0 0.000000 +50 1 1 Cm-245 0 0.000000 +51 1 1 Mo-95 0 0.000000 +52 1 1 Tc-99 0 0.000000 +53 1 1 Ru-101 0 0.000000 +54 1 1 Ru-103 0 0.000000 +55 1 1 Ag-109 0 0.000000 +56 1 1 Xe-135 0 0.000000 +57 1 1 Cs-133 0 0.000000 +58 1 1 Nd-143 0 0.000000 +59 1 1 Nd-145 0 0.000000 +60 1 1 Sm-147 0 0.000000 +61 1 1 Sm-149 0 0.000000 +62 1 1 Sm-150 0 0.000000 +63 1 1 Sm-151 0 0.000000 +64 1 1 Sm-152 0 0.000000 +65 1 1 Eu-153 0 0.000000 +66 1 1 Gd-155 0 0.000000 +67 1 1 O-16 0 0.000000 +0 1 2 U-234 0 0.000000 +1 1 2 U-235 0 0.000000 +2 1 2 U-236 0 0.000000 +3 1 2 U-238 0 0.000000 +4 1 2 Np-237 0 0.000000 +5 1 2 Pu-238 0 0.000000 +6 1 2 Pu-239 0 0.000000 +7 1 2 Pu-240 0 0.000000 +8 1 2 Pu-241 0 0.000000 +9 1 2 Pu-242 0 0.000000 +10 1 2 Am-241 0 0.000000 +11 1 2 Am-242m 0 0.000000 +12 1 2 Am-243 0 0.000000 +13 1 2 Cm-242 0 0.000000 +14 1 2 Cm-243 0 0.000000 +15 1 2 Cm-244 0 0.000000 +16 1 2 Cm-245 0 0.000000 +17 1 2 Mo-95 0 0.000000 +18 1 2 Tc-99 0 0.000000 +19 1 2 Ru-101 0 0.000000 +20 1 2 Ru-103 0 0.000000 +21 1 2 Ag-109 0 0.000000 +22 1 2 Xe-135 0 0.000000 +23 1 2 Cs-133 0 0.000000 +24 1 2 Nd-143 0 0.000000 +25 1 2 Nd-145 0 0.000000 +26 1 2 Sm-147 0 0.000000 +27 1 2 Sm-149 0 0.000000 +28 1 2 Sm-150 0 0.000000 +29 1 2 Sm-151 0 0.000000 +30 1 2 Sm-152 0 0.000000 +31 1 2 Eu-153 0 0.000000 +32 1 2 Gd-155 0 0.000000 +33 1 2 O-16 0 0.000000 material group in nuclide mean std. dev. 5 2 1 Zr-90 0.104734 0.008915 6 2 1 Zr-91 0.036155 0.003735 7 2 1 Zr-92 0.042422 0.003029 @@ -349,46 +757,106 @@ 2 2 2 Zr-92 0.041633 0.016323 3 2 2 Zr-94 0.060818 0.021483 4 2 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -5 2 1 Zr-90 0.0 0.0 -6 2 1 Zr-91 0.0 0.0 -7 2 1 Zr-92 0.0 0.0 -8 2 1 Zr-94 0.0 0.0 -9 2 1 Zr-96 0.0 0.0 -0 2 2 Zr-90 0.0 0.0 -1 2 2 Zr-91 0.0 0.0 -2 2 2 Zr-92 0.0 0.0 -3 2 2 Zr-94 0.0 0.0 -4 2 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. -15 2 1 1 Zr-90 0.104734 0.008915 -16 2 1 1 Zr-91 0.036155 0.003735 -17 2 1 1 Zr-92 0.042422 0.003029 -18 2 1 1 Zr-94 0.046148 0.006251 -19 2 1 1 Zr-96 0.007794 0.001536 -10 2 1 2 Zr-90 0.000000 0.000000 -11 2 1 2 Zr-91 0.000000 0.000000 -12 2 1 2 Zr-92 0.000000 0.000000 -13 2 1 2 Zr-94 0.000000 0.000000 -14 2 1 2 Zr-96 0.000000 0.000000 -5 2 2 1 Zr-90 0.000000 0.000000 -6 2 2 1 Zr-91 0.000000 0.000000 -7 2 2 1 Zr-92 0.000000 0.000000 -8 2 2 1 Zr-94 0.000000 0.000000 -9 2 2 1 Zr-96 0.000000 0.000000 -0 2 2 2 Zr-90 0.121688 0.034934 -1 2 2 2 Zr-91 0.061792 0.024317 -2 2 2 2 Zr-92 0.041633 0.016323 -3 2 2 2 Zr-94 0.060818 0.021483 -4 2 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. -5 2 1 Zr-90 0.0 0.0 -6 2 1 Zr-91 0.0 0.0 -7 2 1 Zr-92 0.0 0.0 -8 2 1 Zr-94 0.0 0.0 -9 2 1 Zr-96 0.0 0.0 -0 2 2 Zr-90 0.0 0.0 -1 2 2 Zr-91 0.0 0.0 -2 2 2 Zr-92 0.0 0.0 -3 2 2 Zr-94 0.0 0.0 -4 2 2 Zr-96 0.0 0.0 material group in nuclide mean std. dev. +5 2 1 Zr-90 0 0 +6 2 1 Zr-91 0 0 +7 2 1 Zr-92 0 0 +8 2 1 Zr-94 0 0 +9 2 1 Zr-96 0 0 +0 2 2 Zr-90 0 0 +1 2 2 Zr-91 0 0 +2 2 2 Zr-92 0 0 +3 2 2 Zr-94 0 0 +4 2 2 Zr-96 0 0 material group in group out nuclide moment mean +60 2 1 1 Zr-90 P0 0.122030 +61 2 1 1 Zr-90 P1 0.017296 +62 2 1 1 Zr-90 P2 0.020437 +63 2 1 1 Zr-90 P3 -0.000350 +64 2 1 1 Zr-91 P0 0.037548 +65 2 1 1 Zr-91 P1 0.001393 +66 2 1 1 Zr-91 P2 -0.000553 +67 2 1 1 Zr-91 P3 0.001719 +68 2 1 1 Zr-92 P0 0.047829 +69 2 1 1 Zr-92 P1 0.005406 +70 2 1 1 Zr-92 P2 0.004793 +71 2 1 1 Zr-92 P3 0.001907 +72 2 1 1 Zr-94 P0 0.058110 +73 2 1 1 Zr-94 P1 0.011962 +74 2 1 1 Zr-94 P2 0.006220 +75 2 1 1 Zr-94 P3 -0.000627 +76 2 1 1 Zr-96 P0 0.007599 +77 2 1 1 Zr-96 P1 -0.000196 +78 2 1 1 Zr-96 P2 -0.001193 +79 2 1 1 Zr-96 P3 -0.000401 +40 2 1 2 Zr-90 P0 0.000000 +41 2 1 2 Zr-90 P1 0.000000 +42 2 1 2 Zr-90 P2 0.000000 +43 2 1 2 Zr-90 P3 0.000000 +44 2 1 2 Zr-91 P0 0.000000 +45 2 1 2 Zr-91 P1 0.000000 +46 2 1 2 Zr-91 P2 0.000000 +47 2 1 2 Zr-91 P3 0.000000 +48 2 1 2 Zr-92 P0 0.000000 +49 2 1 2 Zr-92 P1 0.000000 +50 2 1 2 Zr-92 P2 0.000000 +51 2 1 2 Zr-92 P3 0.000000 +52 2 1 2 Zr-94 P0 0.000000 +53 2 1 2 Zr-94 P1 0.000000 +54 2 1 2 Zr-94 P2 0.000000 +55 2 1 2 Zr-94 P3 0.000000 +56 2 1 2 Zr-96 P0 0.000000 +57 2 1 2 Zr-96 P1 0.000000 +58 2 1 2 Zr-96 P2 0.000000 +59 2 1 2 Zr-96 P3 0.000000 +20 2 2 1 Zr-90 P0 0.000000 +21 2 2 1 Zr-90 P1 0.000000 +22 2 2 1 Zr-90 P2 0.000000 +23 2 2 1 Zr-90 P3 0.000000 +24 2 2 1 Zr-91 P0 0.000000 +25 2 2 1 Zr-91 P1 0.000000 +26 2 2 1 Zr-91 P2 0.000000 +27 2 2 1 Zr-91 P3 0.000000 +28 2 2 1 Zr-92 P0 0.000000 +29 2 2 1 Zr-92 P1 0.000000 +30 2 2 1 Zr-92 P2 0.000000 +31 2 2 1 Zr-92 P3 0.000000 +32 2 2 1 Zr-94 P0 0.000000 +33 2 2 1 Zr-94 P1 0.000000 +34 2 2 1 Zr-94 P2 0.000000 +35 2 2 1 Zr-94 P3 0.000000 +36 2 2 1 Zr-96 P0 0.000000 +37 2 2 1 Zr-96 P1 0.000000 +38 2 2 1 Zr-96 P2 0.000000 +39 2 2 1 Zr-96 P3 0.000000 +0 2 2 2 Zr-90 P0 0.119570 +1 2 2 2 Zr-90 P1 -0.002117 +2 2 2 2 Zr-90 P2 -0.015144 +3 2 2 2 Zr-90 P3 0.000965 +4 2 2 2 Zr-91 P0 0.054803 +5 2 2 2 Zr-91 P1 -0.006989 +6 2 2 2 Zr-91 P2 -0.010542 +7 2 2 2 Zr-91 P3 -0.001260 +8 2 2 2 Zr-92 P0 0.034875 +9 2 2 2 Zr-92 P1 -0.006759 +10 2 2 2 Zr-92 P2 0.008972 +11 2 2 2 Zr-92 P3 0.009834 +12 2 2 2 Zr-94 P0 0.054803 +13 2 2 2 Zr-94 P1 -0.006015 +14 2 2 2 Zr-94 P2 0.001420 +15 2 2 2 Zr-94 P3 0.004494 +16 2 2 2 Zr-96 P0 0.000000 +17 2 2 2 Zr-96 P1 0.000000 +18 2 2 2 Zr-96 P2 0.000000 +19 2 2 2 Zr-96 P3 0.000000 material group out nuclide mean std. dev. +5 2 1 Zr-90 0 0 +6 2 1 Zr-91 0 0 +7 2 1 Zr-92 0 0 +8 2 1 Zr-94 0 0 +9 2 1 Zr-96 0 0 +0 2 2 Zr-90 0 0 +1 2 2 Zr-91 0 0 +2 2 2 Zr-92 0 0 +3 2 2 Zr-94 0 0 +4 2 2 Zr-96 0 0 material group in nuclide mean std. dev. 4 3 1 H-1 0.207103 0.023028 5 3 1 O-16 0.079282 0.005197 6 3 1 B-10 0.000521 0.000244 @@ -397,38 +865,86 @@ 1 3 2 O-16 0.085363 0.014001 2 3 2 B-10 0.049249 0.008232 3 3 2 B-11 0.000195 0.001527 material group in nuclide mean std. dev. -4 3 1 H-1 0.0 0.0 -5 3 1 O-16 0.0 0.0 -6 3 1 B-10 0.0 0.0 -7 3 1 B-11 0.0 0.0 -0 3 2 H-1 0.0 0.0 -1 3 2 O-16 0.0 0.0 -2 3 2 B-10 0.0 0.0 -3 3 2 B-11 0.0 0.0 material group in group out nuclide mean std. dev. -12 3 1 1 H-1 0.181306 0.022102 -13 3 1 1 O-16 0.078631 0.005044 -14 3 1 1 B-10 0.000000 0.000000 -15 3 1 1 B-11 0.000000 0.000000 -8 3 1 2 H-1 0.025666 0.001582 -9 3 1 2 O-16 0.000521 0.000131 -10 3 1 2 B-10 0.000000 0.000000 -11 3 1 2 B-11 0.000000 0.000000 -4 3 2 1 H-1 0.000000 0.000000 -5 3 2 1 O-16 0.000000 0.000000 -6 3 2 1 B-10 0.000000 0.000000 -7 3 2 1 B-11 0.000000 0.000000 -0 3 2 2 H-1 1.273963 0.250623 -1 3 2 2 O-16 0.085363 0.014001 -2 3 2 2 B-10 0.000000 0.000000 -3 3 2 2 B-11 0.000195 0.001527 material group out nuclide mean std. dev. -4 3 1 H-1 0.0 0.0 -5 3 1 O-16 0.0 0.0 -6 3 1 B-10 0.0 0.0 -7 3 1 B-11 0.0 0.0 -0 3 2 H-1 0.0 0.0 -1 3 2 O-16 0.0 0.0 -2 3 2 B-10 0.0 0.0 -3 3 2 B-11 0.0 0.0 material group in nuclide mean std. dev. +4 3 1 H-1 0 0 +5 3 1 O-16 0 0 +6 3 1 B-10 0 0 +7 3 1 B-11 0 0 +0 3 2 H-1 0 0 +1 3 2 O-16 0 0 +2 3 2 B-10 0 0 +3 3 2 B-11 0 0 material group in group out nuclide moment mean +48 3 1 1 H-1 P0 0.560615 +49 3 1 1 H-1 P1 0.379309 +50 3 1 1 H-1 P2 0.149073 +51 3 1 1 H-1 P3 0.005293 +52 3 1 1 O-16 P0 0.082731 +53 3 1 1 O-16 P1 0.004100 +54 3 1 1 O-16 P2 0.003113 +55 3 1 1 O-16 P3 -0.002256 +56 3 1 1 B-10 P0 0.000000 +57 3 1 1 B-10 P1 0.000000 +58 3 1 1 B-10 P2 0.000000 +59 3 1 1 B-10 P3 0.000000 +60 3 1 1 B-11 P0 0.000000 +61 3 1 1 B-11 P1 0.000000 +62 3 1 1 B-11 P2 0.000000 +63 3 1 1 B-11 P3 0.000000 +32 3 1 2 H-1 P0 0.025666 +33 3 1 2 H-1 P1 0.007631 +34 3 1 2 H-1 P2 -0.002692 +35 3 1 2 H-1 P3 -0.002928 +36 3 1 2 O-16 P0 0.000521 +37 3 1 2 O-16 P1 -0.000268 +38 3 1 2 O-16 P2 -0.000046 +39 3 1 2 O-16 P3 0.000208 +40 3 1 2 B-10 P0 0.000000 +41 3 1 2 B-10 P1 0.000000 +42 3 1 2 B-10 P2 0.000000 +43 3 1 2 B-10 P3 0.000000 +44 3 1 2 B-11 P0 0.000000 +45 3 1 2 B-11 P1 0.000000 +46 3 1 2 B-11 P2 0.000000 +47 3 1 2 B-11 P3 0.000000 +16 3 2 1 H-1 P0 0.000000 +17 3 2 1 H-1 P1 0.000000 +18 3 2 1 H-1 P2 0.000000 +19 3 2 1 H-1 P3 0.000000 +20 3 2 1 O-16 P0 0.000000 +21 3 2 1 O-16 P1 0.000000 +22 3 2 1 O-16 P2 0.000000 +23 3 2 1 O-16 P3 0.000000 +24 3 2 1 B-10 P0 0.000000 +25 3 2 1 B-10 P1 0.000000 +26 3 2 1 B-10 P2 0.000000 +27 3 2 1 B-10 P3 0.000000 +28 3 2 1 B-11 P0 0.000000 +29 3 2 1 B-11 P1 0.000000 +30 3 2 1 B-11 P2 0.000000 +31 3 2 1 B-11 P3 0.000000 +0 3 2 2 H-1 P0 1.840960 +1 3 2 2 H-1 P1 0.498320 +2 3 2 2 H-1 P2 0.083870 +3 3 2 2 H-1 P3 0.013597 +4 3 2 2 O-16 P0 0.082081 +5 3 2 2 O-16 P1 -0.000867 +6 3 2 2 O-16 P2 0.006697 +7 3 2 2 O-16 P3 0.003223 +8 3 2 2 B-10 P0 0.000000 +9 3 2 2 B-10 P1 0.000000 +10 3 2 2 B-10 P2 0.000000 +11 3 2 2 B-10 P3 0.000000 +12 3 2 2 B-11 P0 0.001173 +13 3 2 2 B-11 P1 0.000978 +14 3 2 2 B-11 P2 0.000637 +15 3 2 2 B-11 P3 0.000234 material group out nuclide mean std. dev. +4 3 1 H-1 0 0 +5 3 1 O-16 0 0 +6 3 1 B-10 0 0 +7 3 1 B-11 0 0 +0 3 2 H-1 0 0 +1 3 2 O-16 0 0 +2 3 2 B-10 0 0 +3 3 2 B-11 0 0 material group in nuclide mean std. dev. 4 4 1 H-1 0.175242 0.053715 5 4 1 O-16 0.066545 0.010083 6 4 1 B-10 0.000570 0.000352 @@ -437,938 +953,2066 @@ 1 4 2 O-16 0.085141 0.028073 2 4 2 B-10 0.025923 0.007276 3 4 2 B-11 0.000000 0.000000 material group in nuclide mean std. dev. -4 4 1 H-1 0.0 0.0 -5 4 1 O-16 0.0 0.0 -6 4 1 B-10 0.0 0.0 -7 4 1 B-11 0.0 0.0 -0 4 2 H-1 0.0 0.0 -1 4 2 O-16 0.0 0.0 -2 4 2 B-10 0.0 0.0 -3 4 2 B-11 0.0 0.0 material group in group out nuclide mean std. dev. -12 4 1 1 H-1 0.151295 0.051491 -13 4 1 1 O-16 0.066545 0.010083 -14 4 1 1 B-10 0.000000 0.000000 -15 4 1 1 B-11 0.000089 0.000346 -8 4 1 2 H-1 0.023662 0.003083 -9 4 1 2 O-16 0.000000 0.000000 -10 4 1 2 B-10 0.000000 0.000000 -11 4 1 2 B-11 0.000000 0.000000 -4 4 2 1 H-1 0.000000 0.000000 -5 4 2 1 O-16 0.000000 0.000000 -6 4 2 1 B-10 0.000000 0.000000 -7 4 2 1 B-11 0.000000 0.000000 -0 4 2 2 H-1 1.129933 0.361681 -1 4 2 2 O-16 0.085141 0.028073 -2 4 2 2 B-10 0.000000 0.000000 -3 4 2 2 B-11 0.000000 0.000000 material group out nuclide mean std. dev. -4 4 1 H-1 0.0 0.0 -5 4 1 O-16 0.0 0.0 -6 4 1 B-10 0.0 0.0 -7 4 1 B-11 0.0 0.0 -0 4 2 H-1 0.0 0.0 -1 4 2 O-16 0.0 0.0 -2 4 2 B-10 0.0 0.0 -3 4 2 B-11 0.0 0.0 material group in nuclide mean std. dev. -27 5 1 Fe-54 0.0 0.0 -28 5 1 Fe-56 0.0 0.0 -29 5 1 Fe-57 0.0 0.0 -30 5 1 Fe-58 0.0 0.0 -31 5 1 Ni-58 0.0 0.0 -32 5 1 Ni-60 0.0 0.0 -33 5 1 Ni-61 0.0 0.0 -34 5 1 Ni-62 0.0 0.0 -35 5 1 Ni-64 0.0 0.0 -36 5 1 Mn-55 0.0 0.0 -37 5 1 Mo-92 0.0 0.0 -38 5 1 Mo-94 0.0 0.0 -39 5 1 Mo-95 0.0 0.0 -40 5 1 Mo-96 0.0 0.0 -41 5 1 Mo-97 0.0 0.0 -42 5 1 Mo-98 0.0 0.0 -43 5 1 Mo-100 0.0 0.0 -44 5 1 Si-28 0.0 0.0 -45 5 1 Si-29 0.0 0.0 -46 5 1 Si-30 0.0 0.0 -47 5 1 Cr-50 0.0 0.0 -48 5 1 Cr-52 0.0 0.0 -49 5 1 Cr-53 0.0 0.0 -50 5 1 Cr-54 0.0 0.0 -51 5 1 C-Nat 0.0 0.0 -52 5 1 Cu-63 0.0 0.0 -53 5 1 Cu-65 0.0 0.0 -0 5 2 Fe-54 0.0 0.0 -1 5 2 Fe-56 0.0 0.0 -2 5 2 Fe-57 0.0 0.0 -3 5 2 Fe-58 0.0 0.0 -4 5 2 Ni-58 0.0 0.0 -5 5 2 Ni-60 0.0 0.0 -6 5 2 Ni-61 0.0 0.0 -7 5 2 Ni-62 0.0 0.0 -8 5 2 Ni-64 0.0 0.0 -9 5 2 Mn-55 0.0 0.0 -10 5 2 Mo-92 0.0 0.0 -11 5 2 Mo-94 0.0 0.0 -12 5 2 Mo-95 0.0 0.0 -13 5 2 Mo-96 0.0 0.0 -14 5 2 Mo-97 0.0 0.0 -15 5 2 Mo-98 0.0 0.0 -16 5 2 Mo-100 0.0 0.0 -17 5 2 Si-28 0.0 0.0 -18 5 2 Si-29 0.0 0.0 -19 5 2 Si-30 0.0 0.0 -20 5 2 Cr-50 0.0 0.0 -21 5 2 Cr-52 0.0 0.0 -22 5 2 Cr-53 0.0 0.0 -23 5 2 Cr-54 0.0 0.0 -24 5 2 C-Nat 0.0 0.0 -25 5 2 Cu-63 0.0 0.0 -26 5 2 Cu-65 0.0 0.0 material group in nuclide mean std. dev. -27 5 1 Fe-54 0.0 0.0 -28 5 1 Fe-56 0.0 0.0 -29 5 1 Fe-57 0.0 0.0 -30 5 1 Fe-58 0.0 0.0 -31 5 1 Ni-58 0.0 0.0 -32 5 1 Ni-60 0.0 0.0 -33 5 1 Ni-61 0.0 0.0 -34 5 1 Ni-62 0.0 0.0 -35 5 1 Ni-64 0.0 0.0 -36 5 1 Mn-55 0.0 0.0 -37 5 1 Mo-92 0.0 0.0 -38 5 1 Mo-94 0.0 0.0 -39 5 1 Mo-95 0.0 0.0 -40 5 1 Mo-96 0.0 0.0 -41 5 1 Mo-97 0.0 0.0 -42 5 1 Mo-98 0.0 0.0 -43 5 1 Mo-100 0.0 0.0 -44 5 1 Si-28 0.0 0.0 -45 5 1 Si-29 0.0 0.0 -46 5 1 Si-30 0.0 0.0 -47 5 1 Cr-50 0.0 0.0 -48 5 1 Cr-52 0.0 0.0 -49 5 1 Cr-53 0.0 0.0 -50 5 1 Cr-54 0.0 0.0 -51 5 1 C-Nat 0.0 0.0 -52 5 1 Cu-63 0.0 0.0 -53 5 1 Cu-65 0.0 0.0 -0 5 2 Fe-54 0.0 0.0 -1 5 2 Fe-56 0.0 0.0 -2 5 2 Fe-57 0.0 0.0 -3 5 2 Fe-58 0.0 0.0 -4 5 2 Ni-58 0.0 0.0 -5 5 2 Ni-60 0.0 0.0 -6 5 2 Ni-61 0.0 0.0 -7 5 2 Ni-62 0.0 0.0 -8 5 2 Ni-64 0.0 0.0 -9 5 2 Mn-55 0.0 0.0 -10 5 2 Mo-92 0.0 0.0 -11 5 2 Mo-94 0.0 0.0 -12 5 2 Mo-95 0.0 0.0 -13 5 2 Mo-96 0.0 0.0 -14 5 2 Mo-97 0.0 0.0 -15 5 2 Mo-98 0.0 0.0 -16 5 2 Mo-100 0.0 0.0 -17 5 2 Si-28 0.0 0.0 -18 5 2 Si-29 0.0 0.0 -19 5 2 Si-30 0.0 0.0 -20 5 2 Cr-50 0.0 0.0 -21 5 2 Cr-52 0.0 0.0 -22 5 2 Cr-53 0.0 0.0 -23 5 2 Cr-54 0.0 0.0 -24 5 2 C-Nat 0.0 0.0 -25 5 2 Cu-63 0.0 0.0 -26 5 2 Cu-65 0.0 0.0 material group in group out nuclide mean std. dev. -81 5 1 1 Fe-54 0.0 0.0 -82 5 1 1 Fe-56 0.0 0.0 -83 5 1 1 Fe-57 0.0 0.0 -84 5 1 1 Fe-58 0.0 0.0 -85 5 1 1 Ni-58 0.0 0.0 -86 5 1 1 Ni-60 0.0 0.0 -87 5 1 1 Ni-61 0.0 0.0 -88 5 1 1 Ni-62 0.0 0.0 -89 5 1 1 Ni-64 0.0 0.0 -90 5 1 1 Mn-55 0.0 0.0 -91 5 1 1 Mo-92 0.0 0.0 -92 5 1 1 Mo-94 0.0 0.0 -93 5 1 1 Mo-95 0.0 0.0 -94 5 1 1 Mo-96 0.0 0.0 -95 5 1 1 Mo-97 0.0 0.0 -96 5 1 1 Mo-98 0.0 0.0 -97 5 1 1 Mo-100 0.0 0.0 -98 5 1 1 Si-28 0.0 0.0 -99 5 1 1 Si-29 0.0 0.0 -100 5 1 1 Si-30 0.0 0.0 -101 5 1 1 Cr-50 0.0 0.0 -102 5 1 1 Cr-52 0.0 0.0 -103 5 1 1 Cr-53 0.0 0.0 -104 5 1 1 Cr-54 0.0 0.0 -105 5 1 1 C-Nat 0.0 0.0 -106 5 1 1 Cu-63 0.0 0.0 -107 5 1 1 Cu-65 0.0 0.0 -54 5 1 2 Fe-54 0.0 0.0 -55 5 1 2 Fe-56 0.0 0.0 -56 5 1 2 Fe-57 0.0 0.0 -57 5 1 2 Fe-58 0.0 0.0 -58 5 1 2 Ni-58 0.0 0.0 -59 5 1 2 Ni-60 0.0 0.0 -60 5 1 2 Ni-61 0.0 0.0 -61 5 1 2 Ni-62 0.0 0.0 -62 5 1 2 Ni-64 0.0 0.0 -63 5 1 2 Mn-55 0.0 0.0 -64 5 1 2 Mo-92 0.0 0.0 -65 5 1 2 Mo-94 0.0 0.0 -66 5 1 2 Mo-95 0.0 0.0 -67 5 1 2 Mo-96 0.0 0.0 -68 5 1 2 Mo-97 0.0 0.0 -69 5 1 2 Mo-98 0.0 0.0 -70 5 1 2 Mo-100 0.0 0.0 -71 5 1 2 Si-28 0.0 0.0 -72 5 1 2 Si-29 0.0 0.0 -73 5 1 2 Si-30 0.0 0.0 -74 5 1 2 Cr-50 0.0 0.0 -75 5 1 2 Cr-52 0.0 0.0 -76 5 1 2 Cr-53 0.0 0.0 -77 5 1 2 Cr-54 0.0 0.0 -78 5 1 2 C-Nat 0.0 0.0 -79 5 1 2 Cu-63 0.0 0.0 -80 5 1 2 Cu-65 0.0 0.0 -27 5 2 1 Fe-54 0.0 0.0 -28 5 2 1 Fe-56 0.0 0.0 -29 5 2 1 Fe-57 0.0 0.0 -30 5 2 1 Fe-58 0.0 0.0 -31 5 2 1 Ni-58 0.0 0.0 -32 5 2 1 Ni-60 0.0 0.0 -33 5 2 1 Ni-61 0.0 0.0 -34 5 2 1 Ni-62 0.0 0.0 -35 5 2 1 Ni-64 0.0 0.0 -36 5 2 1 Mn-55 0.0 0.0 -37 5 2 1 Mo-92 0.0 0.0 -38 5 2 1 Mo-94 0.0 0.0 -39 5 2 1 Mo-95 0.0 0.0 -40 5 2 1 Mo-96 0.0 0.0 -41 5 2 1 Mo-97 0.0 0.0 -42 5 2 1 Mo-98 0.0 0.0 -43 5 2 1 Mo-100 0.0 0.0 -44 5 2 1 Si-28 0.0 0.0 -45 5 2 1 Si-29 0.0 0.0 -46 5 2 1 Si-30 0.0 0.0 -47 5 2 1 Cr-50 0.0 0.0 -48 5 2 1 Cr-52 0.0 0.0 -49 5 2 1 Cr-53 0.0 0.0 -50 5 2 1 Cr-54 0.0 0.0 -51 5 2 1 C-Nat 0.0 0.0 -52 5 2 1 Cu-63 0.0 0.0 -53 5 2 1 Cu-65 0.0 0.0 -0 5 2 2 Fe-54 0.0 0.0 -1 5 2 2 Fe-56 0.0 0.0 -2 5 2 2 Fe-57 0.0 0.0 -3 5 2 2 Fe-58 0.0 0.0 -4 5 2 2 Ni-58 0.0 0.0 -5 5 2 2 Ni-60 0.0 0.0 -6 5 2 2 Ni-61 0.0 0.0 -7 5 2 2 Ni-62 0.0 0.0 -8 5 2 2 Ni-64 0.0 0.0 -9 5 2 2 Mn-55 0.0 0.0 -10 5 2 2 Mo-92 0.0 0.0 -11 5 2 2 Mo-94 0.0 0.0 -12 5 2 2 Mo-95 0.0 0.0 -13 5 2 2 Mo-96 0.0 0.0 -14 5 2 2 Mo-97 0.0 0.0 -15 5 2 2 Mo-98 0.0 0.0 -16 5 2 2 Mo-100 0.0 0.0 -17 5 2 2 Si-28 0.0 0.0 -18 5 2 2 Si-29 0.0 0.0 -19 5 2 2 Si-30 0.0 0.0 -20 5 2 2 Cr-50 0.0 0.0 -21 5 2 2 Cr-52 0.0 0.0 -22 5 2 2 Cr-53 0.0 0.0 -23 5 2 2 Cr-54 0.0 0.0 -24 5 2 2 C-Nat 0.0 0.0 -25 5 2 2 Cu-63 0.0 0.0 -26 5 2 2 Cu-65 0.0 0.0 material group out nuclide mean std. dev. -27 5 1 Fe-54 0.0 0.0 -28 5 1 Fe-56 0.0 0.0 -29 5 1 Fe-57 0.0 0.0 -30 5 1 Fe-58 0.0 0.0 -31 5 1 Ni-58 0.0 0.0 -32 5 1 Ni-60 0.0 0.0 -33 5 1 Ni-61 0.0 0.0 -34 5 1 Ni-62 0.0 0.0 -35 5 1 Ni-64 0.0 0.0 -36 5 1 Mn-55 0.0 0.0 -37 5 1 Mo-92 0.0 0.0 -38 5 1 Mo-94 0.0 0.0 -39 5 1 Mo-95 0.0 0.0 -40 5 1 Mo-96 0.0 0.0 -41 5 1 Mo-97 0.0 0.0 -42 5 1 Mo-98 0.0 0.0 -43 5 1 Mo-100 0.0 0.0 -44 5 1 Si-28 0.0 0.0 -45 5 1 Si-29 0.0 0.0 -46 5 1 Si-30 0.0 0.0 -47 5 1 Cr-50 0.0 0.0 -48 5 1 Cr-52 0.0 0.0 -49 5 1 Cr-53 0.0 0.0 -50 5 1 Cr-54 0.0 0.0 -51 5 1 C-Nat 0.0 0.0 -52 5 1 Cu-63 0.0 0.0 -53 5 1 Cu-65 0.0 0.0 -0 5 2 Fe-54 0.0 0.0 -1 5 2 Fe-56 0.0 0.0 -2 5 2 Fe-57 0.0 0.0 -3 5 2 Fe-58 0.0 0.0 -4 5 2 Ni-58 0.0 0.0 -5 5 2 Ni-60 0.0 0.0 -6 5 2 Ni-61 0.0 0.0 -7 5 2 Ni-62 0.0 0.0 -8 5 2 Ni-64 0.0 0.0 -9 5 2 Mn-55 0.0 0.0 -10 5 2 Mo-92 0.0 0.0 -11 5 2 Mo-94 0.0 0.0 -12 5 2 Mo-95 0.0 0.0 -13 5 2 Mo-96 0.0 0.0 -14 5 2 Mo-97 0.0 0.0 -15 5 2 Mo-98 0.0 0.0 -16 5 2 Mo-100 0.0 0.0 -17 5 2 Si-28 0.0 0.0 -18 5 2 Si-29 0.0 0.0 -19 5 2 Si-30 0.0 0.0 -20 5 2 Cr-50 0.0 0.0 -21 5 2 Cr-52 0.0 0.0 -22 5 2 Cr-53 0.0 0.0 -23 5 2 Cr-54 0.0 0.0 -24 5 2 C-Nat 0.0 0.0 -25 5 2 Cu-63 0.0 0.0 -26 5 2 Cu-65 0.0 0.0 material group in nuclide mean std. dev. -21 6 1 H-1 0.0 0.0 -22 6 1 O-16 0.0 0.0 -23 6 1 B-10 0.0 0.0 -24 6 1 B-11 0.0 0.0 -25 6 1 Fe-54 0.0 0.0 -26 6 1 Fe-56 0.0 0.0 -27 6 1 Fe-57 0.0 0.0 -28 6 1 Fe-58 0.0 0.0 -29 6 1 Ni-58 0.0 0.0 -30 6 1 Ni-60 0.0 0.0 -31 6 1 Ni-61 0.0 0.0 -32 6 1 Ni-62 0.0 0.0 -33 6 1 Ni-64 0.0 0.0 -34 6 1 Mn-55 0.0 0.0 -35 6 1 Si-28 0.0 0.0 -36 6 1 Si-29 0.0 0.0 -37 6 1 Si-30 0.0 0.0 -38 6 1 Cr-50 0.0 0.0 -39 6 1 Cr-52 0.0 0.0 -40 6 1 Cr-53 0.0 0.0 -41 6 1 Cr-54 0.0 0.0 -0 6 2 H-1 0.0 0.0 -1 6 2 O-16 0.0 0.0 -2 6 2 B-10 0.0 0.0 -3 6 2 B-11 0.0 0.0 -4 6 2 Fe-54 0.0 0.0 -5 6 2 Fe-56 0.0 0.0 -6 6 2 Fe-57 0.0 0.0 -7 6 2 Fe-58 0.0 0.0 -8 6 2 Ni-58 0.0 0.0 -9 6 2 Ni-60 0.0 0.0 -10 6 2 Ni-61 0.0 0.0 -11 6 2 Ni-62 0.0 0.0 -12 6 2 Ni-64 0.0 0.0 -13 6 2 Mn-55 0.0 0.0 -14 6 2 Si-28 0.0 0.0 -15 6 2 Si-29 0.0 0.0 -16 6 2 Si-30 0.0 0.0 -17 6 2 Cr-50 0.0 0.0 -18 6 2 Cr-52 0.0 0.0 -19 6 2 Cr-53 0.0 0.0 -20 6 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 6 1 H-1 0.0 0.0 -22 6 1 O-16 0.0 0.0 -23 6 1 B-10 0.0 0.0 -24 6 1 B-11 0.0 0.0 -25 6 1 Fe-54 0.0 0.0 -26 6 1 Fe-56 0.0 0.0 -27 6 1 Fe-57 0.0 0.0 -28 6 1 Fe-58 0.0 0.0 -29 6 1 Ni-58 0.0 0.0 -30 6 1 Ni-60 0.0 0.0 -31 6 1 Ni-61 0.0 0.0 -32 6 1 Ni-62 0.0 0.0 -33 6 1 Ni-64 0.0 0.0 -34 6 1 Mn-55 0.0 0.0 -35 6 1 Si-28 0.0 0.0 -36 6 1 Si-29 0.0 0.0 -37 6 1 Si-30 0.0 0.0 -38 6 1 Cr-50 0.0 0.0 -39 6 1 Cr-52 0.0 0.0 -40 6 1 Cr-53 0.0 0.0 -41 6 1 Cr-54 0.0 0.0 -0 6 2 H-1 0.0 0.0 -1 6 2 O-16 0.0 0.0 -2 6 2 B-10 0.0 0.0 -3 6 2 B-11 0.0 0.0 -4 6 2 Fe-54 0.0 0.0 -5 6 2 Fe-56 0.0 0.0 -6 6 2 Fe-57 0.0 0.0 -7 6 2 Fe-58 0.0 0.0 -8 6 2 Ni-58 0.0 0.0 -9 6 2 Ni-60 0.0 0.0 -10 6 2 Ni-61 0.0 0.0 -11 6 2 Ni-62 0.0 0.0 -12 6 2 Ni-64 0.0 0.0 -13 6 2 Mn-55 0.0 0.0 -14 6 2 Si-28 0.0 0.0 -15 6 2 Si-29 0.0 0.0 -16 6 2 Si-30 0.0 0.0 -17 6 2 Cr-50 0.0 0.0 -18 6 2 Cr-52 0.0 0.0 -19 6 2 Cr-53 0.0 0.0 -20 6 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. -63 6 1 1 H-1 0.0 0.0 -64 6 1 1 O-16 0.0 0.0 -65 6 1 1 B-10 0.0 0.0 -66 6 1 1 B-11 0.0 0.0 -67 6 1 1 Fe-54 0.0 0.0 -68 6 1 1 Fe-56 0.0 0.0 -69 6 1 1 Fe-57 0.0 0.0 -70 6 1 1 Fe-58 0.0 0.0 -71 6 1 1 Ni-58 0.0 0.0 -72 6 1 1 Ni-60 0.0 0.0 -73 6 1 1 Ni-61 0.0 0.0 -74 6 1 1 Ni-62 0.0 0.0 -75 6 1 1 Ni-64 0.0 0.0 -76 6 1 1 Mn-55 0.0 0.0 -77 6 1 1 Si-28 0.0 0.0 -78 6 1 1 Si-29 0.0 0.0 -79 6 1 1 Si-30 0.0 0.0 -80 6 1 1 Cr-50 0.0 0.0 -81 6 1 1 Cr-52 0.0 0.0 -82 6 1 1 Cr-53 0.0 0.0 -83 6 1 1 Cr-54 0.0 0.0 -42 6 1 2 H-1 0.0 0.0 -43 6 1 2 O-16 0.0 0.0 -44 6 1 2 B-10 0.0 0.0 -45 6 1 2 B-11 0.0 0.0 -46 6 1 2 Fe-54 0.0 0.0 -47 6 1 2 Fe-56 0.0 0.0 -48 6 1 2 Fe-57 0.0 0.0 -49 6 1 2 Fe-58 0.0 0.0 -50 6 1 2 Ni-58 0.0 0.0 -51 6 1 2 Ni-60 0.0 0.0 -52 6 1 2 Ni-61 0.0 0.0 -53 6 1 2 Ni-62 0.0 0.0 -54 6 1 2 Ni-64 0.0 0.0 -55 6 1 2 Mn-55 0.0 0.0 -56 6 1 2 Si-28 0.0 0.0 -57 6 1 2 Si-29 0.0 0.0 -58 6 1 2 Si-30 0.0 0.0 -59 6 1 2 Cr-50 0.0 0.0 -60 6 1 2 Cr-52 0.0 0.0 -61 6 1 2 Cr-53 0.0 0.0 -62 6 1 2 Cr-54 0.0 0.0 -21 6 2 1 H-1 0.0 0.0 -22 6 2 1 O-16 0.0 0.0 -23 6 2 1 B-10 0.0 0.0 -24 6 2 1 B-11 0.0 0.0 -25 6 2 1 Fe-54 0.0 0.0 -26 6 2 1 Fe-56 0.0 0.0 -27 6 2 1 Fe-57 0.0 0.0 -28 6 2 1 Fe-58 0.0 0.0 -29 6 2 1 Ni-58 0.0 0.0 -30 6 2 1 Ni-60 0.0 0.0 -31 6 2 1 Ni-61 0.0 0.0 -32 6 2 1 Ni-62 0.0 0.0 -33 6 2 1 Ni-64 0.0 0.0 -34 6 2 1 Mn-55 0.0 0.0 -35 6 2 1 Si-28 0.0 0.0 -36 6 2 1 Si-29 0.0 0.0 -37 6 2 1 Si-30 0.0 0.0 -38 6 2 1 Cr-50 0.0 0.0 -39 6 2 1 Cr-52 0.0 0.0 -40 6 2 1 Cr-53 0.0 0.0 -41 6 2 1 Cr-54 0.0 0.0 -0 6 2 2 H-1 0.0 0.0 -1 6 2 2 O-16 0.0 0.0 -2 6 2 2 B-10 0.0 0.0 -3 6 2 2 B-11 0.0 0.0 -4 6 2 2 Fe-54 0.0 0.0 -5 6 2 2 Fe-56 0.0 0.0 -6 6 2 2 Fe-57 0.0 0.0 -7 6 2 2 Fe-58 0.0 0.0 -8 6 2 2 Ni-58 0.0 0.0 -9 6 2 2 Ni-60 0.0 0.0 -10 6 2 2 Ni-61 0.0 0.0 -11 6 2 2 Ni-62 0.0 0.0 -12 6 2 2 Ni-64 0.0 0.0 -13 6 2 2 Mn-55 0.0 0.0 -14 6 2 2 Si-28 0.0 0.0 -15 6 2 2 Si-29 0.0 0.0 -16 6 2 2 Si-30 0.0 0.0 -17 6 2 2 Cr-50 0.0 0.0 -18 6 2 2 Cr-52 0.0 0.0 -19 6 2 2 Cr-53 0.0 0.0 -20 6 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. -21 6 1 H-1 0.0 0.0 -22 6 1 O-16 0.0 0.0 -23 6 1 B-10 0.0 0.0 -24 6 1 B-11 0.0 0.0 -25 6 1 Fe-54 0.0 0.0 -26 6 1 Fe-56 0.0 0.0 -27 6 1 Fe-57 0.0 0.0 -28 6 1 Fe-58 0.0 0.0 -29 6 1 Ni-58 0.0 0.0 -30 6 1 Ni-60 0.0 0.0 -31 6 1 Ni-61 0.0 0.0 -32 6 1 Ni-62 0.0 0.0 -33 6 1 Ni-64 0.0 0.0 -34 6 1 Mn-55 0.0 0.0 -35 6 1 Si-28 0.0 0.0 -36 6 1 Si-29 0.0 0.0 -37 6 1 Si-30 0.0 0.0 -38 6 1 Cr-50 0.0 0.0 -39 6 1 Cr-52 0.0 0.0 -40 6 1 Cr-53 0.0 0.0 -41 6 1 Cr-54 0.0 0.0 -0 6 2 H-1 0.0 0.0 -1 6 2 O-16 0.0 0.0 -2 6 2 B-10 0.0 0.0 -3 6 2 B-11 0.0 0.0 -4 6 2 Fe-54 0.0 0.0 -5 6 2 Fe-56 0.0 0.0 -6 6 2 Fe-57 0.0 0.0 -7 6 2 Fe-58 0.0 0.0 -8 6 2 Ni-58 0.0 0.0 -9 6 2 Ni-60 0.0 0.0 -10 6 2 Ni-61 0.0 0.0 -11 6 2 Ni-62 0.0 0.0 -12 6 2 Ni-64 0.0 0.0 -13 6 2 Mn-55 0.0 0.0 -14 6 2 Si-28 0.0 0.0 -15 6 2 Si-29 0.0 0.0 -16 6 2 Si-30 0.0 0.0 -17 6 2 Cr-50 0.0 0.0 -18 6 2 Cr-52 0.0 0.0 -19 6 2 Cr-53 0.0 0.0 -20 6 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 7 1 H-1 0.0 0.0 -22 7 1 O-16 0.0 0.0 -23 7 1 B-10 0.0 0.0 -24 7 1 B-11 0.0 0.0 -25 7 1 Fe-54 0.0 0.0 -26 7 1 Fe-56 0.0 0.0 -27 7 1 Fe-57 0.0 0.0 -28 7 1 Fe-58 0.0 0.0 -29 7 1 Ni-58 0.0 0.0 -30 7 1 Ni-60 0.0 0.0 -31 7 1 Ni-61 0.0 0.0 -32 7 1 Ni-62 0.0 0.0 -33 7 1 Ni-64 0.0 0.0 -34 7 1 Mn-55 0.0 0.0 -35 7 1 Si-28 0.0 0.0 -36 7 1 Si-29 0.0 0.0 -37 7 1 Si-30 0.0 0.0 -38 7 1 Cr-50 0.0 0.0 -39 7 1 Cr-52 0.0 0.0 -40 7 1 Cr-53 0.0 0.0 -41 7 1 Cr-54 0.0 0.0 -0 7 2 H-1 0.0 0.0 -1 7 2 O-16 0.0 0.0 -2 7 2 B-10 0.0 0.0 -3 7 2 B-11 0.0 0.0 -4 7 2 Fe-54 0.0 0.0 -5 7 2 Fe-56 0.0 0.0 -6 7 2 Fe-57 0.0 0.0 -7 7 2 Fe-58 0.0 0.0 -8 7 2 Ni-58 0.0 0.0 -9 7 2 Ni-60 0.0 0.0 -10 7 2 Ni-61 0.0 0.0 -11 7 2 Ni-62 0.0 0.0 -12 7 2 Ni-64 0.0 0.0 -13 7 2 Mn-55 0.0 0.0 -14 7 2 Si-28 0.0 0.0 -15 7 2 Si-29 0.0 0.0 -16 7 2 Si-30 0.0 0.0 -17 7 2 Cr-50 0.0 0.0 -18 7 2 Cr-52 0.0 0.0 -19 7 2 Cr-53 0.0 0.0 -20 7 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 7 1 H-1 0.0 0.0 -22 7 1 O-16 0.0 0.0 -23 7 1 B-10 0.0 0.0 -24 7 1 B-11 0.0 0.0 -25 7 1 Fe-54 0.0 0.0 -26 7 1 Fe-56 0.0 0.0 -27 7 1 Fe-57 0.0 0.0 -28 7 1 Fe-58 0.0 0.0 -29 7 1 Ni-58 0.0 0.0 -30 7 1 Ni-60 0.0 0.0 -31 7 1 Ni-61 0.0 0.0 -32 7 1 Ni-62 0.0 0.0 -33 7 1 Ni-64 0.0 0.0 -34 7 1 Mn-55 0.0 0.0 -35 7 1 Si-28 0.0 0.0 -36 7 1 Si-29 0.0 0.0 -37 7 1 Si-30 0.0 0.0 -38 7 1 Cr-50 0.0 0.0 -39 7 1 Cr-52 0.0 0.0 -40 7 1 Cr-53 0.0 0.0 -41 7 1 Cr-54 0.0 0.0 -0 7 2 H-1 0.0 0.0 -1 7 2 O-16 0.0 0.0 -2 7 2 B-10 0.0 0.0 -3 7 2 B-11 0.0 0.0 -4 7 2 Fe-54 0.0 0.0 -5 7 2 Fe-56 0.0 0.0 -6 7 2 Fe-57 0.0 0.0 -7 7 2 Fe-58 0.0 0.0 -8 7 2 Ni-58 0.0 0.0 -9 7 2 Ni-60 0.0 0.0 -10 7 2 Ni-61 0.0 0.0 -11 7 2 Ni-62 0.0 0.0 -12 7 2 Ni-64 0.0 0.0 -13 7 2 Mn-55 0.0 0.0 -14 7 2 Si-28 0.0 0.0 -15 7 2 Si-29 0.0 0.0 -16 7 2 Si-30 0.0 0.0 -17 7 2 Cr-50 0.0 0.0 -18 7 2 Cr-52 0.0 0.0 -19 7 2 Cr-53 0.0 0.0 -20 7 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. -63 7 1 1 H-1 0.0 0.0 -64 7 1 1 O-16 0.0 0.0 -65 7 1 1 B-10 0.0 0.0 -66 7 1 1 B-11 0.0 0.0 -67 7 1 1 Fe-54 0.0 0.0 -68 7 1 1 Fe-56 0.0 0.0 -69 7 1 1 Fe-57 0.0 0.0 -70 7 1 1 Fe-58 0.0 0.0 -71 7 1 1 Ni-58 0.0 0.0 -72 7 1 1 Ni-60 0.0 0.0 -73 7 1 1 Ni-61 0.0 0.0 -74 7 1 1 Ni-62 0.0 0.0 -75 7 1 1 Ni-64 0.0 0.0 -76 7 1 1 Mn-55 0.0 0.0 -77 7 1 1 Si-28 0.0 0.0 -78 7 1 1 Si-29 0.0 0.0 -79 7 1 1 Si-30 0.0 0.0 -80 7 1 1 Cr-50 0.0 0.0 -81 7 1 1 Cr-52 0.0 0.0 -82 7 1 1 Cr-53 0.0 0.0 -83 7 1 1 Cr-54 0.0 0.0 -42 7 1 2 H-1 0.0 0.0 -43 7 1 2 O-16 0.0 0.0 -44 7 1 2 B-10 0.0 0.0 -45 7 1 2 B-11 0.0 0.0 -46 7 1 2 Fe-54 0.0 0.0 -47 7 1 2 Fe-56 0.0 0.0 -48 7 1 2 Fe-57 0.0 0.0 -49 7 1 2 Fe-58 0.0 0.0 -50 7 1 2 Ni-58 0.0 0.0 -51 7 1 2 Ni-60 0.0 0.0 -52 7 1 2 Ni-61 0.0 0.0 -53 7 1 2 Ni-62 0.0 0.0 -54 7 1 2 Ni-64 0.0 0.0 -55 7 1 2 Mn-55 0.0 0.0 -56 7 1 2 Si-28 0.0 0.0 -57 7 1 2 Si-29 0.0 0.0 -58 7 1 2 Si-30 0.0 0.0 -59 7 1 2 Cr-50 0.0 0.0 -60 7 1 2 Cr-52 0.0 0.0 -61 7 1 2 Cr-53 0.0 0.0 -62 7 1 2 Cr-54 0.0 0.0 -21 7 2 1 H-1 0.0 0.0 -22 7 2 1 O-16 0.0 0.0 -23 7 2 1 B-10 0.0 0.0 -24 7 2 1 B-11 0.0 0.0 -25 7 2 1 Fe-54 0.0 0.0 -26 7 2 1 Fe-56 0.0 0.0 -27 7 2 1 Fe-57 0.0 0.0 -28 7 2 1 Fe-58 0.0 0.0 -29 7 2 1 Ni-58 0.0 0.0 -30 7 2 1 Ni-60 0.0 0.0 -31 7 2 1 Ni-61 0.0 0.0 -32 7 2 1 Ni-62 0.0 0.0 -33 7 2 1 Ni-64 0.0 0.0 -34 7 2 1 Mn-55 0.0 0.0 -35 7 2 1 Si-28 0.0 0.0 -36 7 2 1 Si-29 0.0 0.0 -37 7 2 1 Si-30 0.0 0.0 -38 7 2 1 Cr-50 0.0 0.0 -39 7 2 1 Cr-52 0.0 0.0 -40 7 2 1 Cr-53 0.0 0.0 -41 7 2 1 Cr-54 0.0 0.0 -0 7 2 2 H-1 0.0 0.0 -1 7 2 2 O-16 0.0 0.0 -2 7 2 2 B-10 0.0 0.0 -3 7 2 2 B-11 0.0 0.0 -4 7 2 2 Fe-54 0.0 0.0 -5 7 2 2 Fe-56 0.0 0.0 -6 7 2 2 Fe-57 0.0 0.0 -7 7 2 2 Fe-58 0.0 0.0 -8 7 2 2 Ni-58 0.0 0.0 -9 7 2 2 Ni-60 0.0 0.0 -10 7 2 2 Ni-61 0.0 0.0 -11 7 2 2 Ni-62 0.0 0.0 -12 7 2 2 Ni-64 0.0 0.0 -13 7 2 2 Mn-55 0.0 0.0 -14 7 2 2 Si-28 0.0 0.0 -15 7 2 2 Si-29 0.0 0.0 -16 7 2 2 Si-30 0.0 0.0 -17 7 2 2 Cr-50 0.0 0.0 -18 7 2 2 Cr-52 0.0 0.0 -19 7 2 2 Cr-53 0.0 0.0 -20 7 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. -21 7 1 H-1 0.0 0.0 -22 7 1 O-16 0.0 0.0 -23 7 1 B-10 0.0 0.0 -24 7 1 B-11 0.0 0.0 -25 7 1 Fe-54 0.0 0.0 -26 7 1 Fe-56 0.0 0.0 -27 7 1 Fe-57 0.0 0.0 -28 7 1 Fe-58 0.0 0.0 -29 7 1 Ni-58 0.0 0.0 -30 7 1 Ni-60 0.0 0.0 -31 7 1 Ni-61 0.0 0.0 -32 7 1 Ni-62 0.0 0.0 -33 7 1 Ni-64 0.0 0.0 -34 7 1 Mn-55 0.0 0.0 -35 7 1 Si-28 0.0 0.0 -36 7 1 Si-29 0.0 0.0 -37 7 1 Si-30 0.0 0.0 -38 7 1 Cr-50 0.0 0.0 -39 7 1 Cr-52 0.0 0.0 -40 7 1 Cr-53 0.0 0.0 -41 7 1 Cr-54 0.0 0.0 -0 7 2 H-1 0.0 0.0 -1 7 2 O-16 0.0 0.0 -2 7 2 B-10 0.0 0.0 -3 7 2 B-11 0.0 0.0 -4 7 2 Fe-54 0.0 0.0 -5 7 2 Fe-56 0.0 0.0 -6 7 2 Fe-57 0.0 0.0 -7 7 2 Fe-58 0.0 0.0 -8 7 2 Ni-58 0.0 0.0 -9 7 2 Ni-60 0.0 0.0 -10 7 2 Ni-61 0.0 0.0 -11 7 2 Ni-62 0.0 0.0 -12 7 2 Ni-64 0.0 0.0 -13 7 2 Mn-55 0.0 0.0 -14 7 2 Si-28 0.0 0.0 -15 7 2 Si-29 0.0 0.0 -16 7 2 Si-30 0.0 0.0 -17 7 2 Cr-50 0.0 0.0 -18 7 2 Cr-52 0.0 0.0 -19 7 2 Cr-53 0.0 0.0 -20 7 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 8 1 H-1 0.0 0.0 -22 8 1 O-16 0.0 0.0 -23 8 1 B-10 0.0 0.0 -24 8 1 B-11 0.0 0.0 -25 8 1 Fe-54 0.0 0.0 -26 8 1 Fe-56 0.0 0.0 -27 8 1 Fe-57 0.0 0.0 -28 8 1 Fe-58 0.0 0.0 -29 8 1 Ni-58 0.0 0.0 -30 8 1 Ni-60 0.0 0.0 -31 8 1 Ni-61 0.0 0.0 -32 8 1 Ni-62 0.0 0.0 -33 8 1 Ni-64 0.0 0.0 -34 8 1 Mn-55 0.0 0.0 -35 8 1 Si-28 0.0 0.0 -36 8 1 Si-29 0.0 0.0 -37 8 1 Si-30 0.0 0.0 -38 8 1 Cr-50 0.0 0.0 -39 8 1 Cr-52 0.0 0.0 -40 8 1 Cr-53 0.0 0.0 -41 8 1 Cr-54 0.0 0.0 -0 8 2 H-1 0.0 0.0 -1 8 2 O-16 0.0 0.0 -2 8 2 B-10 0.0 0.0 -3 8 2 B-11 0.0 0.0 -4 8 2 Fe-54 0.0 0.0 -5 8 2 Fe-56 0.0 0.0 -6 8 2 Fe-57 0.0 0.0 -7 8 2 Fe-58 0.0 0.0 -8 8 2 Ni-58 0.0 0.0 -9 8 2 Ni-60 0.0 0.0 -10 8 2 Ni-61 0.0 0.0 -11 8 2 Ni-62 0.0 0.0 -12 8 2 Ni-64 0.0 0.0 -13 8 2 Mn-55 0.0 0.0 -14 8 2 Si-28 0.0 0.0 -15 8 2 Si-29 0.0 0.0 -16 8 2 Si-30 0.0 0.0 -17 8 2 Cr-50 0.0 0.0 -18 8 2 Cr-52 0.0 0.0 -19 8 2 Cr-53 0.0 0.0 -20 8 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 8 1 H-1 0.0 0.0 -22 8 1 O-16 0.0 0.0 -23 8 1 B-10 0.0 0.0 -24 8 1 B-11 0.0 0.0 -25 8 1 Fe-54 0.0 0.0 -26 8 1 Fe-56 0.0 0.0 -27 8 1 Fe-57 0.0 0.0 -28 8 1 Fe-58 0.0 0.0 -29 8 1 Ni-58 0.0 0.0 -30 8 1 Ni-60 0.0 0.0 -31 8 1 Ni-61 0.0 0.0 -32 8 1 Ni-62 0.0 0.0 -33 8 1 Ni-64 0.0 0.0 -34 8 1 Mn-55 0.0 0.0 -35 8 1 Si-28 0.0 0.0 -36 8 1 Si-29 0.0 0.0 -37 8 1 Si-30 0.0 0.0 -38 8 1 Cr-50 0.0 0.0 -39 8 1 Cr-52 0.0 0.0 -40 8 1 Cr-53 0.0 0.0 -41 8 1 Cr-54 0.0 0.0 -0 8 2 H-1 0.0 0.0 -1 8 2 O-16 0.0 0.0 -2 8 2 B-10 0.0 0.0 -3 8 2 B-11 0.0 0.0 -4 8 2 Fe-54 0.0 0.0 -5 8 2 Fe-56 0.0 0.0 -6 8 2 Fe-57 0.0 0.0 -7 8 2 Fe-58 0.0 0.0 -8 8 2 Ni-58 0.0 0.0 -9 8 2 Ni-60 0.0 0.0 -10 8 2 Ni-61 0.0 0.0 -11 8 2 Ni-62 0.0 0.0 -12 8 2 Ni-64 0.0 0.0 -13 8 2 Mn-55 0.0 0.0 -14 8 2 Si-28 0.0 0.0 -15 8 2 Si-29 0.0 0.0 -16 8 2 Si-30 0.0 0.0 -17 8 2 Cr-50 0.0 0.0 -18 8 2 Cr-52 0.0 0.0 -19 8 2 Cr-53 0.0 0.0 -20 8 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. -63 8 1 1 H-1 0.0 0.0 -64 8 1 1 O-16 0.0 0.0 -65 8 1 1 B-10 0.0 0.0 -66 8 1 1 B-11 0.0 0.0 -67 8 1 1 Fe-54 0.0 0.0 -68 8 1 1 Fe-56 0.0 0.0 -69 8 1 1 Fe-57 0.0 0.0 -70 8 1 1 Fe-58 0.0 0.0 -71 8 1 1 Ni-58 0.0 0.0 -72 8 1 1 Ni-60 0.0 0.0 -73 8 1 1 Ni-61 0.0 0.0 -74 8 1 1 Ni-62 0.0 0.0 -75 8 1 1 Ni-64 0.0 0.0 -76 8 1 1 Mn-55 0.0 0.0 -77 8 1 1 Si-28 0.0 0.0 -78 8 1 1 Si-29 0.0 0.0 -79 8 1 1 Si-30 0.0 0.0 -80 8 1 1 Cr-50 0.0 0.0 -81 8 1 1 Cr-52 0.0 0.0 -82 8 1 1 Cr-53 0.0 0.0 -83 8 1 1 Cr-54 0.0 0.0 -42 8 1 2 H-1 0.0 0.0 -43 8 1 2 O-16 0.0 0.0 -44 8 1 2 B-10 0.0 0.0 -45 8 1 2 B-11 0.0 0.0 -46 8 1 2 Fe-54 0.0 0.0 -47 8 1 2 Fe-56 0.0 0.0 -48 8 1 2 Fe-57 0.0 0.0 -49 8 1 2 Fe-58 0.0 0.0 -50 8 1 2 Ni-58 0.0 0.0 -51 8 1 2 Ni-60 0.0 0.0 -52 8 1 2 Ni-61 0.0 0.0 -53 8 1 2 Ni-62 0.0 0.0 -54 8 1 2 Ni-64 0.0 0.0 -55 8 1 2 Mn-55 0.0 0.0 -56 8 1 2 Si-28 0.0 0.0 -57 8 1 2 Si-29 0.0 0.0 -58 8 1 2 Si-30 0.0 0.0 -59 8 1 2 Cr-50 0.0 0.0 -60 8 1 2 Cr-52 0.0 0.0 -61 8 1 2 Cr-53 0.0 0.0 -62 8 1 2 Cr-54 0.0 0.0 -21 8 2 1 H-1 0.0 0.0 -22 8 2 1 O-16 0.0 0.0 -23 8 2 1 B-10 0.0 0.0 -24 8 2 1 B-11 0.0 0.0 -25 8 2 1 Fe-54 0.0 0.0 -26 8 2 1 Fe-56 0.0 0.0 -27 8 2 1 Fe-57 0.0 0.0 -28 8 2 1 Fe-58 0.0 0.0 -29 8 2 1 Ni-58 0.0 0.0 -30 8 2 1 Ni-60 0.0 0.0 -31 8 2 1 Ni-61 0.0 0.0 -32 8 2 1 Ni-62 0.0 0.0 -33 8 2 1 Ni-64 0.0 0.0 -34 8 2 1 Mn-55 0.0 0.0 -35 8 2 1 Si-28 0.0 0.0 -36 8 2 1 Si-29 0.0 0.0 -37 8 2 1 Si-30 0.0 0.0 -38 8 2 1 Cr-50 0.0 0.0 -39 8 2 1 Cr-52 0.0 0.0 -40 8 2 1 Cr-53 0.0 0.0 -41 8 2 1 Cr-54 0.0 0.0 -0 8 2 2 H-1 0.0 0.0 -1 8 2 2 O-16 0.0 0.0 -2 8 2 2 B-10 0.0 0.0 -3 8 2 2 B-11 0.0 0.0 -4 8 2 2 Fe-54 0.0 0.0 -5 8 2 2 Fe-56 0.0 0.0 -6 8 2 2 Fe-57 0.0 0.0 -7 8 2 2 Fe-58 0.0 0.0 -8 8 2 2 Ni-58 0.0 0.0 -9 8 2 2 Ni-60 0.0 0.0 -10 8 2 2 Ni-61 0.0 0.0 -11 8 2 2 Ni-62 0.0 0.0 -12 8 2 2 Ni-64 0.0 0.0 -13 8 2 2 Mn-55 0.0 0.0 -14 8 2 2 Si-28 0.0 0.0 -15 8 2 2 Si-29 0.0 0.0 -16 8 2 2 Si-30 0.0 0.0 -17 8 2 2 Cr-50 0.0 0.0 -18 8 2 2 Cr-52 0.0 0.0 -19 8 2 2 Cr-53 0.0 0.0 -20 8 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. -21 8 1 H-1 0.0 0.0 -22 8 1 O-16 0.0 0.0 -23 8 1 B-10 0.0 0.0 -24 8 1 B-11 0.0 0.0 -25 8 1 Fe-54 0.0 0.0 -26 8 1 Fe-56 0.0 0.0 -27 8 1 Fe-57 0.0 0.0 -28 8 1 Fe-58 0.0 0.0 -29 8 1 Ni-58 0.0 0.0 -30 8 1 Ni-60 0.0 0.0 -31 8 1 Ni-61 0.0 0.0 -32 8 1 Ni-62 0.0 0.0 -33 8 1 Ni-64 0.0 0.0 -34 8 1 Mn-55 0.0 0.0 -35 8 1 Si-28 0.0 0.0 -36 8 1 Si-29 0.0 0.0 -37 8 1 Si-30 0.0 0.0 -38 8 1 Cr-50 0.0 0.0 -39 8 1 Cr-52 0.0 0.0 -40 8 1 Cr-53 0.0 0.0 -41 8 1 Cr-54 0.0 0.0 -0 8 2 H-1 0.0 0.0 -1 8 2 O-16 0.0 0.0 -2 8 2 B-10 0.0 0.0 -3 8 2 B-11 0.0 0.0 -4 8 2 Fe-54 0.0 0.0 -5 8 2 Fe-56 0.0 0.0 -6 8 2 Fe-57 0.0 0.0 -7 8 2 Fe-58 0.0 0.0 -8 8 2 Ni-58 0.0 0.0 -9 8 2 Ni-60 0.0 0.0 -10 8 2 Ni-61 0.0 0.0 -11 8 2 Ni-62 0.0 0.0 -12 8 2 Ni-64 0.0 0.0 -13 8 2 Mn-55 0.0 0.0 -14 8 2 Si-28 0.0 0.0 -15 8 2 Si-29 0.0 0.0 -16 8 2 Si-30 0.0 0.0 -17 8 2 Cr-50 0.0 0.0 -18 8 2 Cr-52 0.0 0.0 -19 8 2 Cr-53 0.0 0.0 -20 8 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +4 4 1 H-1 0 0 +5 4 1 O-16 0 0 +6 4 1 B-10 0 0 +7 4 1 B-11 0 0 +0 4 2 H-1 0 0 +1 4 2 O-16 0 0 +2 4 2 B-10 0 0 +3 4 2 B-11 0 0 material group in group out nuclide moment mean +48 4 1 1 H-1 P0 0.468964 +49 4 1 1 H-1 P1 0.317668 +50 4 1 1 H-1 P2 0.127157 +51 4 1 1 H-1 P3 0.009844 +52 4 1 1 O-16 P0 0.074692 +53 4 1 1 O-16 P1 0.008147 +54 4 1 1 O-16 P2 0.003915 +55 4 1 1 O-16 P3 0.002322 +56 4 1 1 B-10 P0 0.000000 +57 4 1 1 B-10 P1 0.000000 +58 4 1 1 B-10 P2 0.000000 +59 4 1 1 B-10 P3 0.000000 +60 4 1 1 B-11 P0 0.000285 +61 4 1 1 B-11 P1 0.000196 +62 4 1 1 B-11 P2 0.000060 +63 4 1 1 B-11 P3 -0.000062 +32 4 1 2 H-1 P0 0.023662 +33 4 1 2 H-1 P1 0.007526 +34 4 1 2 H-1 P2 -0.002730 +35 4 1 2 H-1 P3 -0.003140 +36 4 1 2 O-16 P0 0.000000 +37 4 1 2 O-16 P1 0.000000 +38 4 1 2 O-16 P2 0.000000 +39 4 1 2 O-16 P3 0.000000 +40 4 1 2 B-10 P0 0.000000 +41 4 1 2 B-10 P1 0.000000 +42 4 1 2 B-10 P2 0.000000 +43 4 1 2 B-10 P3 0.000000 +44 4 1 2 B-11 P0 0.000000 +45 4 1 2 B-11 P1 0.000000 +46 4 1 2 B-11 P2 0.000000 +47 4 1 2 B-11 P3 0.000000 +16 4 2 1 H-1 P0 0.000000 +17 4 2 1 H-1 P1 0.000000 +18 4 2 1 H-1 P2 0.000000 +19 4 2 1 H-1 P3 0.000000 +20 4 2 1 O-16 P0 0.000000 +21 4 2 1 O-16 P1 0.000000 +22 4 2 1 O-16 P2 0.000000 +23 4 2 1 O-16 P3 0.000000 +24 4 2 1 B-10 P0 0.000000 +25 4 2 1 B-10 P1 0.000000 +26 4 2 1 B-10 P2 0.000000 +27 4 2 1 B-10 P3 0.000000 +28 4 2 1 B-11 P0 0.000000 +29 4 2 1 B-11 P1 0.000000 +30 4 2 1 B-11 P2 0.000000 +31 4 2 1 B-11 P3 0.000000 +0 4 2 2 H-1 P0 1.672065 +1 4 2 2 H-1 P1 0.493252 +2 4 2 2 H-1 P2 0.104511 +3 4 2 2 H-1 P3 0.039078 +4 4 2 2 O-16 P0 0.092584 +5 4 2 2 O-16 P1 0.007443 +6 4 2 2 O-16 P2 -0.005485 +7 4 2 2 O-16 P3 -0.006103 +8 4 2 2 B-10 P0 0.000000 +9 4 2 2 B-10 P1 0.000000 +10 4 2 2 B-10 P2 0.000000 +11 4 2 2 B-10 P3 0.000000 +12 4 2 2 B-11 P0 0.000000 +13 4 2 2 B-11 P1 0.000000 +14 4 2 2 B-11 P2 0.000000 +15 4 2 2 B-11 P3 0.000000 material group out nuclide mean std. dev. +4 4 1 H-1 0 0 +5 4 1 O-16 0 0 +6 4 1 B-10 0 0 +7 4 1 B-11 0 0 +0 4 2 H-1 0 0 +1 4 2 O-16 0 0 +2 4 2 B-10 0 0 +3 4 2 B-11 0 0 material group in nuclide mean std. dev. +27 5 1 Fe-54 0 0 +28 5 1 Fe-56 0 0 +29 5 1 Fe-57 0 0 +30 5 1 Fe-58 0 0 +31 5 1 Ni-58 0 0 +32 5 1 Ni-60 0 0 +33 5 1 Ni-61 0 0 +34 5 1 Ni-62 0 0 +35 5 1 Ni-64 0 0 +36 5 1 Mn-55 0 0 +37 5 1 Mo-92 0 0 +38 5 1 Mo-94 0 0 +39 5 1 Mo-95 0 0 +40 5 1 Mo-96 0 0 +41 5 1 Mo-97 0 0 +42 5 1 Mo-98 0 0 +43 5 1 Mo-100 0 0 +44 5 1 Si-28 0 0 +45 5 1 Si-29 0 0 +46 5 1 Si-30 0 0 +47 5 1 Cr-50 0 0 +48 5 1 Cr-52 0 0 +49 5 1 Cr-53 0 0 +50 5 1 Cr-54 0 0 +51 5 1 C-Nat 0 0 +52 5 1 Cu-63 0 0 +53 5 1 Cu-65 0 0 +0 5 2 Fe-54 0 0 +1 5 2 Fe-56 0 0 +2 5 2 Fe-57 0 0 +3 5 2 Fe-58 0 0 +4 5 2 Ni-58 0 0 +5 5 2 Ni-60 0 0 +6 5 2 Ni-61 0 0 +7 5 2 Ni-62 0 0 +8 5 2 Ni-64 0 0 +9 5 2 Mn-55 0 0 +10 5 2 Mo-92 0 0 +11 5 2 Mo-94 0 0 +12 5 2 Mo-95 0 0 +13 5 2 Mo-96 0 0 +14 5 2 Mo-97 0 0 +15 5 2 Mo-98 0 0 +16 5 2 Mo-100 0 0 +17 5 2 Si-28 0 0 +18 5 2 Si-29 0 0 +19 5 2 Si-30 0 0 +20 5 2 Cr-50 0 0 +21 5 2 Cr-52 0 0 +22 5 2 Cr-53 0 0 +23 5 2 Cr-54 0 0 +24 5 2 C-Nat 0 0 +25 5 2 Cu-63 0 0 +26 5 2 Cu-65 0 0 material group in nuclide mean std. dev. +27 5 1 Fe-54 0 0 +28 5 1 Fe-56 0 0 +29 5 1 Fe-57 0 0 +30 5 1 Fe-58 0 0 +31 5 1 Ni-58 0 0 +32 5 1 Ni-60 0 0 +33 5 1 Ni-61 0 0 +34 5 1 Ni-62 0 0 +35 5 1 Ni-64 0 0 +36 5 1 Mn-55 0 0 +37 5 1 Mo-92 0 0 +38 5 1 Mo-94 0 0 +39 5 1 Mo-95 0 0 +40 5 1 Mo-96 0 0 +41 5 1 Mo-97 0 0 +42 5 1 Mo-98 0 0 +43 5 1 Mo-100 0 0 +44 5 1 Si-28 0 0 +45 5 1 Si-29 0 0 +46 5 1 Si-30 0 0 +47 5 1 Cr-50 0 0 +48 5 1 Cr-52 0 0 +49 5 1 Cr-53 0 0 +50 5 1 Cr-54 0 0 +51 5 1 C-Nat 0 0 +52 5 1 Cu-63 0 0 +53 5 1 Cu-65 0 0 +0 5 2 Fe-54 0 0 +1 5 2 Fe-56 0 0 +2 5 2 Fe-57 0 0 +3 5 2 Fe-58 0 0 +4 5 2 Ni-58 0 0 +5 5 2 Ni-60 0 0 +6 5 2 Ni-61 0 0 +7 5 2 Ni-62 0 0 +8 5 2 Ni-64 0 0 +9 5 2 Mn-55 0 0 +10 5 2 Mo-92 0 0 +11 5 2 Mo-94 0 0 +12 5 2 Mo-95 0 0 +13 5 2 Mo-96 0 0 +14 5 2 Mo-97 0 0 +15 5 2 Mo-98 0 0 +16 5 2 Mo-100 0 0 +17 5 2 Si-28 0 0 +18 5 2 Si-29 0 0 +19 5 2 Si-30 0 0 +20 5 2 Cr-50 0 0 +21 5 2 Cr-52 0 0 +22 5 2 Cr-53 0 0 +23 5 2 Cr-54 0 0 +24 5 2 C-Nat 0 0 +25 5 2 Cu-63 0 0 +26 5 2 Cu-65 0 0 material group in group out nuclide moment mean +324 5 1 1 Fe-54 P0 0 +325 5 1 1 Fe-54 P1 0 +326 5 1 1 Fe-54 P2 0 +327 5 1 1 Fe-54 P3 0 +328 5 1 1 Fe-56 P0 0 +329 5 1 1 Fe-56 P1 0 +330 5 1 1 Fe-56 P2 0 +331 5 1 1 Fe-56 P3 0 +332 5 1 1 Fe-57 P0 0 +333 5 1 1 Fe-57 P1 0 +334 5 1 1 Fe-57 P2 0 +335 5 1 1 Fe-57 P3 0 +336 5 1 1 Fe-58 P0 0 +337 5 1 1 Fe-58 P1 0 +338 5 1 1 Fe-58 P2 0 +339 5 1 1 Fe-58 P3 0 +340 5 1 1 Ni-58 P0 0 +341 5 1 1 Ni-58 P1 0 +342 5 1 1 Ni-58 P2 0 +343 5 1 1 Ni-58 P3 0 +344 5 1 1 Ni-60 P0 0 +345 5 1 1 Ni-60 P1 0 +346 5 1 1 Ni-60 P2 0 +347 5 1 1 Ni-60 P3 0 +348 5 1 1 Ni-61 P0 0 +349 5 1 1 Ni-61 P1 0 +350 5 1 1 Ni-61 P2 0 +351 5 1 1 Ni-61 P3 0 +352 5 1 1 Ni-62 P0 0 +353 5 1 1 Ni-62 P1 0 +354 5 1 1 Ni-62 P2 0 +355 5 1 1 Ni-62 P3 0 +356 5 1 1 Ni-64 P0 0 +357 5 1 1 Ni-64 P1 0 +358 5 1 1 Ni-64 P2 0 +359 5 1 1 Ni-64 P3 0 +360 5 1 1 Mn-55 P0 0 +361 5 1 1 Mn-55 P1 0 +362 5 1 1 Mn-55 P2 0 +363 5 1 1 Mn-55 P3 0 +364 5 1 1 Mo-92 P0 0 +365 5 1 1 Mo-92 P1 0 +366 5 1 1 Mo-92 P2 0 +367 5 1 1 Mo-92 P3 0 +368 5 1 1 Mo-94 P0 0 +369 5 1 1 Mo-94 P1 0 +370 5 1 1 Mo-94 P2 0 +371 5 1 1 Mo-94 P3 0 +372 5 1 1 Mo-95 P0 0 +373 5 1 1 Mo-95 P1 0 +374 5 1 1 Mo-95 P2 0 +375 5 1 1 Mo-95 P3 0 +376 5 1 1 Mo-96 P0 0 +377 5 1 1 Mo-96 P1 0 +378 5 1 1 Mo-96 P2 0 +379 5 1 1 Mo-96 P3 0 +380 5 1 1 Mo-97 P0 0 +381 5 1 1 Mo-97 P1 0 +382 5 1 1 Mo-97 P2 0 +383 5 1 1 Mo-97 P3 0 +384 5 1 1 Mo-98 P0 0 +385 5 1 1 Mo-98 P1 0 +386 5 1 1 Mo-98 P2 0 +387 5 1 1 Mo-98 P3 0 +388 5 1 1 Mo-100 P0 0 +389 5 1 1 Mo-100 P1 0 +390 5 1 1 Mo-100 P2 0 +391 5 1 1 Mo-100 P3 0 +392 5 1 1 Si-28 P0 0 +393 5 1 1 Si-28 P1 0 +394 5 1 1 Si-28 P2 0 +395 5 1 1 Si-28 P3 0 +396 5 1 1 Si-29 P0 0 +397 5 1 1 Si-29 P1 0 +398 5 1 1 Si-29 P2 0 +399 5 1 1 Si-29 P3 0 +400 5 1 1 Si-30 P0 0 +401 5 1 1 Si-30 P1 0 +402 5 1 1 Si-30 P2 0 +403 5 1 1 Si-30 P3 0 +404 5 1 1 Cr-50 P0 0 +405 5 1 1 Cr-50 P1 0 +406 5 1 1 Cr-50 P2 0 +407 5 1 1 Cr-50 P3 0 +408 5 1 1 Cr-52 P0 0 +409 5 1 1 Cr-52 P1 0 +410 5 1 1 Cr-52 P2 0 +411 5 1 1 Cr-52 P3 0 +412 5 1 1 Cr-53 P0 0 +413 5 1 1 Cr-53 P1 0 +414 5 1 1 Cr-53 P2 0 +415 5 1 1 Cr-53 P3 0 +416 5 1 1 Cr-54 P0 0 +417 5 1 1 Cr-54 P1 0 +418 5 1 1 Cr-54 P2 0 +419 5 1 1 Cr-54 P3 0 +420 5 1 1 C-Nat P0 0 +421 5 1 1 C-Nat P1 0 +422 5 1 1 C-Nat P2 0 +423 5 1 1 C-Nat P3 0 +424 5 1 1 Cu-63 P0 0 +425 5 1 1 Cu-63 P1 0 +426 5 1 1 Cu-63 P2 0 +427 5 1 1 Cu-63 P3 0 +428 5 1 1 Cu-65 P0 0 +429 5 1 1 Cu-65 P1 0 +430 5 1 1 Cu-65 P2 0 +431 5 1 1 Cu-65 P3 0 +216 5 1 2 Fe-54 P0 0 +217 5 1 2 Fe-54 P1 0 +218 5 1 2 Fe-54 P2 0 +219 5 1 2 Fe-54 P3 0 +220 5 1 2 Fe-56 P0 0 +221 5 1 2 Fe-56 P1 0 +222 5 1 2 Fe-56 P2 0 +223 5 1 2 Fe-56 P3 0 +224 5 1 2 Fe-57 P0 0 +225 5 1 2 Fe-57 P1 0 +226 5 1 2 Fe-57 P2 0 +227 5 1 2 Fe-57 P3 0 +228 5 1 2 Fe-58 P0 0 +229 5 1 2 Fe-58 P1 0 +230 5 1 2 Fe-58 P2 0 +231 5 1 2 Fe-58 P3 0 +232 5 1 2 Ni-58 P0 0 +233 5 1 2 Ni-58 P1 0 +234 5 1 2 Ni-58 P2 0 +235 5 1 2 Ni-58 P3 0 +236 5 1 2 Ni-60 P0 0 +237 5 1 2 Ni-60 P1 0 +238 5 1 2 Ni-60 P2 0 +239 5 1 2 Ni-60 P3 0 +240 5 1 2 Ni-61 P0 0 +241 5 1 2 Ni-61 P1 0 +242 5 1 2 Ni-61 P2 0 +243 5 1 2 Ni-61 P3 0 +244 5 1 2 Ni-62 P0 0 +245 5 1 2 Ni-62 P1 0 +246 5 1 2 Ni-62 P2 0 +247 5 1 2 Ni-62 P3 0 +248 5 1 2 Ni-64 P0 0 +249 5 1 2 Ni-64 P1 0 +250 5 1 2 Ni-64 P2 0 +251 5 1 2 Ni-64 P3 0 +252 5 1 2 Mn-55 P0 0 +253 5 1 2 Mn-55 P1 0 +254 5 1 2 Mn-55 P2 0 +255 5 1 2 Mn-55 P3 0 +256 5 1 2 Mo-92 P0 0 +257 5 1 2 Mo-92 P1 0 +258 5 1 2 Mo-92 P2 0 +259 5 1 2 Mo-92 P3 0 +260 5 1 2 Mo-94 P0 0 +261 5 1 2 Mo-94 P1 0 +262 5 1 2 Mo-94 P2 0 +263 5 1 2 Mo-94 P3 0 +264 5 1 2 Mo-95 P0 0 +265 5 1 2 Mo-95 P1 0 +266 5 1 2 Mo-95 P2 0 +267 5 1 2 Mo-95 P3 0 +268 5 1 2 Mo-96 P0 0 +269 5 1 2 Mo-96 P1 0 +270 5 1 2 Mo-96 P2 0 +271 5 1 2 Mo-96 P3 0 +272 5 1 2 Mo-97 P0 0 +273 5 1 2 Mo-97 P1 0 +274 5 1 2 Mo-97 P2 0 +275 5 1 2 Mo-97 P3 0 +276 5 1 2 Mo-98 P0 0 +277 5 1 2 Mo-98 P1 0 +278 5 1 2 Mo-98 P2 0 +279 5 1 2 Mo-98 P3 0 +280 5 1 2 Mo-100 P0 0 +281 5 1 2 Mo-100 P1 0 +282 5 1 2 Mo-100 P2 0 +283 5 1 2 Mo-100 P3 0 +284 5 1 2 Si-28 P0 0 +285 5 1 2 Si-28 P1 0 +286 5 1 2 Si-28 P2 0 +287 5 1 2 Si-28 P3 0 +288 5 1 2 Si-29 P0 0 +289 5 1 2 Si-29 P1 0 +290 5 1 2 Si-29 P2 0 +291 5 1 2 Si-29 P3 0 +292 5 1 2 Si-30 P0 0 +293 5 1 2 Si-30 P1 0 +294 5 1 2 Si-30 P2 0 +295 5 1 2 Si-30 P3 0 +296 5 1 2 Cr-50 P0 0 +297 5 1 2 Cr-50 P1 0 +298 5 1 2 Cr-50 P2 0 +299 5 1 2 Cr-50 P3 0 +300 5 1 2 Cr-52 P0 0 +301 5 1 2 Cr-52 P1 0 +302 5 1 2 Cr-52 P2 0 +303 5 1 2 Cr-52 P3 0 +304 5 1 2 Cr-53 P0 0 +305 5 1 2 Cr-53 P1 0 +306 5 1 2 Cr-53 P2 0 +307 5 1 2 Cr-53 P3 0 +308 5 1 2 Cr-54 P0 0 +309 5 1 2 Cr-54 P1 0 +310 5 1 2 Cr-54 P2 0 +311 5 1 2 Cr-54 P3 0 +312 5 1 2 C-Nat P0 0 +313 5 1 2 C-Nat P1 0 +314 5 1 2 C-Nat P2 0 +315 5 1 2 C-Nat P3 0 +316 5 1 2 Cu-63 P0 0 +317 5 1 2 Cu-63 P1 0 +318 5 1 2 Cu-63 P2 0 +319 5 1 2 Cu-63 P3 0 +320 5 1 2 Cu-65 P0 0 +321 5 1 2 Cu-65 P1 0 +322 5 1 2 Cu-65 P2 0 +323 5 1 2 Cu-65 P3 0 +108 5 2 1 Fe-54 P0 0 +109 5 2 1 Fe-54 P1 0 +110 5 2 1 Fe-54 P2 0 +111 5 2 1 Fe-54 P3 0 +112 5 2 1 Fe-56 P0 0 +113 5 2 1 Fe-56 P1 0 +114 5 2 1 Fe-56 P2 0 +115 5 2 1 Fe-56 P3 0 +116 5 2 1 Fe-57 P0 0 +117 5 2 1 Fe-57 P1 0 +118 5 2 1 Fe-57 P2 0 +119 5 2 1 Fe-57 P3 0 +120 5 2 1 Fe-58 P0 0 +121 5 2 1 Fe-58 P1 0 +122 5 2 1 Fe-58 P2 0 +123 5 2 1 Fe-58 P3 0 +124 5 2 1 Ni-58 P0 0 +125 5 2 1 Ni-58 P1 0 +126 5 2 1 Ni-58 P2 0 +127 5 2 1 Ni-58 P3 0 +128 5 2 1 Ni-60 P0 0 +129 5 2 1 Ni-60 P1 0 +130 5 2 1 Ni-60 P2 0 +131 5 2 1 Ni-60 P3 0 +132 5 2 1 Ni-61 P0 0 +133 5 2 1 Ni-61 P1 0 +134 5 2 1 Ni-61 P2 0 +135 5 2 1 Ni-61 P3 0 +136 5 2 1 Ni-62 P0 0 +137 5 2 1 Ni-62 P1 0 +138 5 2 1 Ni-62 P2 0 +139 5 2 1 Ni-62 P3 0 +140 5 2 1 Ni-64 P0 0 +141 5 2 1 Ni-64 P1 0 +142 5 2 1 Ni-64 P2 0 +143 5 2 1 Ni-64 P3 0 +144 5 2 1 Mn-55 P0 0 +145 5 2 1 Mn-55 P1 0 +146 5 2 1 Mn-55 P2 0 +147 5 2 1 Mn-55 P3 0 +148 5 2 1 Mo-92 P0 0 +149 5 2 1 Mo-92 P1 0 +150 5 2 1 Mo-92 P2 0 +151 5 2 1 Mo-92 P3 0 +152 5 2 1 Mo-94 P0 0 +153 5 2 1 Mo-94 P1 0 +154 5 2 1 Mo-94 P2 0 +155 5 2 1 Mo-94 P3 0 +156 5 2 1 Mo-95 P0 0 +157 5 2 1 Mo-95 P1 0 +158 5 2 1 Mo-95 P2 0 +159 5 2 1 Mo-95 P3 0 +160 5 2 1 Mo-96 P0 0 +161 5 2 1 Mo-96 P1 0 +162 5 2 1 Mo-96 P2 0 +163 5 2 1 Mo-96 P3 0 +164 5 2 1 Mo-97 P0 0 +165 5 2 1 Mo-97 P1 0 +166 5 2 1 Mo-97 P2 0 +167 5 2 1 Mo-97 P3 0 +168 5 2 1 Mo-98 P0 0 +169 5 2 1 Mo-98 P1 0 +170 5 2 1 Mo-98 P2 0 +171 5 2 1 Mo-98 P3 0 +172 5 2 1 Mo-100 P0 0 +173 5 2 1 Mo-100 P1 0 +174 5 2 1 Mo-100 P2 0 +175 5 2 1 Mo-100 P3 0 +176 5 2 1 Si-28 P0 0 +177 5 2 1 Si-28 P1 0 +178 5 2 1 Si-28 P2 0 +179 5 2 1 Si-28 P3 0 +180 5 2 1 Si-29 P0 0 +181 5 2 1 Si-29 P1 0 +182 5 2 1 Si-29 P2 0 +183 5 2 1 Si-29 P3 0 +184 5 2 1 Si-30 P0 0 +185 5 2 1 Si-30 P1 0 +186 5 2 1 Si-30 P2 0 +187 5 2 1 Si-30 P3 0 +188 5 2 1 Cr-50 P0 0 +189 5 2 1 Cr-50 P1 0 +190 5 2 1 Cr-50 P2 0 +191 5 2 1 Cr-50 P3 0 +192 5 2 1 Cr-52 P0 0 +193 5 2 1 Cr-52 P1 0 +194 5 2 1 Cr-52 P2 0 +195 5 2 1 Cr-52 P3 0 +196 5 2 1 Cr-53 P0 0 +197 5 2 1 Cr-53 P1 0 +198 5 2 1 Cr-53 P2 0 +199 5 2 1 Cr-53 P3 0 +200 5 2 1 Cr-54 P0 0 +201 5 2 1 Cr-54 P1 0 +202 5 2 1 Cr-54 P2 0 +203 5 2 1 Cr-54 P3 0 +204 5 2 1 C-Nat P0 0 +205 5 2 1 C-Nat P1 0 +206 5 2 1 C-Nat P2 0 +207 5 2 1 C-Nat P3 0 +208 5 2 1 Cu-63 P0 0 +209 5 2 1 Cu-63 P1 0 +210 5 2 1 Cu-63 P2 0 +211 5 2 1 Cu-63 P3 0 +212 5 2 1 Cu-65 P0 0 +213 5 2 1 Cu-65 P1 0 +214 5 2 1 Cu-65 P2 0 +215 5 2 1 Cu-65 P3 0 +0 5 2 2 Fe-54 P0 0 +1 5 2 2 Fe-54 P1 0 +2 5 2 2 Fe-54 P2 0 +3 5 2 2 Fe-54 P3 0 +4 5 2 2 Fe-56 P0 0 +5 5 2 2 Fe-56 P1 0 +6 5 2 2 Fe-56 P2 0 +7 5 2 2 Fe-56 P3 0 +8 5 2 2 Fe-57 P0 0 +9 5 2 2 Fe-57 P1 0 +10 5 2 2 Fe-57 P2 0 +11 5 2 2 Fe-57 P3 0 +12 5 2 2 Fe-58 P0 0 +13 5 2 2 Fe-58 P1 0 +14 5 2 2 Fe-58 P2 0 +15 5 2 2 Fe-58 P3 0 +16 5 2 2 Ni-58 P0 0 +17 5 2 2 Ni-58 P1 0 +18 5 2 2 Ni-58 P2 0 +19 5 2 2 Ni-58 P3 0 +20 5 2 2 Ni-60 P0 0 +21 5 2 2 Ni-60 P1 0 +22 5 2 2 Ni-60 P2 0 +23 5 2 2 Ni-60 P3 0 +24 5 2 2 Ni-61 P0 0 +25 5 2 2 Ni-61 P1 0 +26 5 2 2 Ni-61 P2 0 +27 5 2 2 Ni-61 P3 0 +28 5 2 2 Ni-62 P0 0 +29 5 2 2 Ni-62 P1 0 +30 5 2 2 Ni-62 P2 0 +31 5 2 2 Ni-62 P3 0 +32 5 2 2 Ni-64 P0 0 +33 5 2 2 Ni-64 P1 0 +34 5 2 2 Ni-64 P2 0 +35 5 2 2 Ni-64 P3 0 +36 5 2 2 Mn-55 P0 0 +37 5 2 2 Mn-55 P1 0 +38 5 2 2 Mn-55 P2 0 +39 5 2 2 Mn-55 P3 0 +40 5 2 2 Mo-92 P0 0 +41 5 2 2 Mo-92 P1 0 +42 5 2 2 Mo-92 P2 0 +43 5 2 2 Mo-92 P3 0 +44 5 2 2 Mo-94 P0 0 +45 5 2 2 Mo-94 P1 0 +46 5 2 2 Mo-94 P2 0 +47 5 2 2 Mo-94 P3 0 +48 5 2 2 Mo-95 P0 0 +49 5 2 2 Mo-95 P1 0 +50 5 2 2 Mo-95 P2 0 +51 5 2 2 Mo-95 P3 0 +52 5 2 2 Mo-96 P0 0 +53 5 2 2 Mo-96 P1 0 +54 5 2 2 Mo-96 P2 0 +55 5 2 2 Mo-96 P3 0 +56 5 2 2 Mo-97 P0 0 +57 5 2 2 Mo-97 P1 0 +58 5 2 2 Mo-97 P2 0 +59 5 2 2 Mo-97 P3 0 +60 5 2 2 Mo-98 P0 0 +61 5 2 2 Mo-98 P1 0 +62 5 2 2 Mo-98 P2 0 +63 5 2 2 Mo-98 P3 0 +64 5 2 2 Mo-100 P0 0 +65 5 2 2 Mo-100 P1 0 +66 5 2 2 Mo-100 P2 0 +67 5 2 2 Mo-100 P3 0 +68 5 2 2 Si-28 P0 0 +69 5 2 2 Si-28 P1 0 +70 5 2 2 Si-28 P2 0 +71 5 2 2 Si-28 P3 0 +72 5 2 2 Si-29 P0 0 +73 5 2 2 Si-29 P1 0 +74 5 2 2 Si-29 P2 0 +75 5 2 2 Si-29 P3 0 +76 5 2 2 Si-30 P0 0 +77 5 2 2 Si-30 P1 0 +78 5 2 2 Si-30 P2 0 +79 5 2 2 Si-30 P3 0 +80 5 2 2 Cr-50 P0 0 +81 5 2 2 Cr-50 P1 0 +82 5 2 2 Cr-50 P2 0 +83 5 2 2 Cr-50 P3 0 +84 5 2 2 Cr-52 P0 0 +85 5 2 2 Cr-52 P1 0 +86 5 2 2 Cr-52 P2 0 +87 5 2 2 Cr-52 P3 0 +88 5 2 2 Cr-53 P0 0 +89 5 2 2 Cr-53 P1 0 +90 5 2 2 Cr-53 P2 0 +91 5 2 2 Cr-53 P3 0 +92 5 2 2 Cr-54 P0 0 +93 5 2 2 Cr-54 P1 0 +94 5 2 2 Cr-54 P2 0 +95 5 2 2 Cr-54 P3 0 +96 5 2 2 C-Nat P0 0 +97 5 2 2 C-Nat P1 0 +98 5 2 2 C-Nat P2 0 +99 5 2 2 C-Nat P3 0 +100 5 2 2 Cu-63 P0 0 +101 5 2 2 Cu-63 P1 0 +102 5 2 2 Cu-63 P2 0 +103 5 2 2 Cu-63 P3 0 +104 5 2 2 Cu-65 P0 0 +105 5 2 2 Cu-65 P1 0 +106 5 2 2 Cu-65 P2 0 +107 5 2 2 Cu-65 P3 0 material group out nuclide mean std. dev. +27 5 1 Fe-54 0 0 +28 5 1 Fe-56 0 0 +29 5 1 Fe-57 0 0 +30 5 1 Fe-58 0 0 +31 5 1 Ni-58 0 0 +32 5 1 Ni-60 0 0 +33 5 1 Ni-61 0 0 +34 5 1 Ni-62 0 0 +35 5 1 Ni-64 0 0 +36 5 1 Mn-55 0 0 +37 5 1 Mo-92 0 0 +38 5 1 Mo-94 0 0 +39 5 1 Mo-95 0 0 +40 5 1 Mo-96 0 0 +41 5 1 Mo-97 0 0 +42 5 1 Mo-98 0 0 +43 5 1 Mo-100 0 0 +44 5 1 Si-28 0 0 +45 5 1 Si-29 0 0 +46 5 1 Si-30 0 0 +47 5 1 Cr-50 0 0 +48 5 1 Cr-52 0 0 +49 5 1 Cr-53 0 0 +50 5 1 Cr-54 0 0 +51 5 1 C-Nat 0 0 +52 5 1 Cu-63 0 0 +53 5 1 Cu-65 0 0 +0 5 2 Fe-54 0 0 +1 5 2 Fe-56 0 0 +2 5 2 Fe-57 0 0 +3 5 2 Fe-58 0 0 +4 5 2 Ni-58 0 0 +5 5 2 Ni-60 0 0 +6 5 2 Ni-61 0 0 +7 5 2 Ni-62 0 0 +8 5 2 Ni-64 0 0 +9 5 2 Mn-55 0 0 +10 5 2 Mo-92 0 0 +11 5 2 Mo-94 0 0 +12 5 2 Mo-95 0 0 +13 5 2 Mo-96 0 0 +14 5 2 Mo-97 0 0 +15 5 2 Mo-98 0 0 +16 5 2 Mo-100 0 0 +17 5 2 Si-28 0 0 +18 5 2 Si-29 0 0 +19 5 2 Si-30 0 0 +20 5 2 Cr-50 0 0 +21 5 2 Cr-52 0 0 +22 5 2 Cr-53 0 0 +23 5 2 Cr-54 0 0 +24 5 2 C-Nat 0 0 +25 5 2 Cu-63 0 0 +26 5 2 Cu-65 0 0 material group in nuclide mean std. dev. +21 6 1 H-1 0 0 +22 6 1 O-16 0 0 +23 6 1 B-10 0 0 +24 6 1 B-11 0 0 +25 6 1 Fe-54 0 0 +26 6 1 Fe-56 0 0 +27 6 1 Fe-57 0 0 +28 6 1 Fe-58 0 0 +29 6 1 Ni-58 0 0 +30 6 1 Ni-60 0 0 +31 6 1 Ni-61 0 0 +32 6 1 Ni-62 0 0 +33 6 1 Ni-64 0 0 +34 6 1 Mn-55 0 0 +35 6 1 Si-28 0 0 +36 6 1 Si-29 0 0 +37 6 1 Si-30 0 0 +38 6 1 Cr-50 0 0 +39 6 1 Cr-52 0 0 +40 6 1 Cr-53 0 0 +41 6 1 Cr-54 0 0 +0 6 2 H-1 0 0 +1 6 2 O-16 0 0 +2 6 2 B-10 0 0 +3 6 2 B-11 0 0 +4 6 2 Fe-54 0 0 +5 6 2 Fe-56 0 0 +6 6 2 Fe-57 0 0 +7 6 2 Fe-58 0 0 +8 6 2 Ni-58 0 0 +9 6 2 Ni-60 0 0 +10 6 2 Ni-61 0 0 +11 6 2 Ni-62 0 0 +12 6 2 Ni-64 0 0 +13 6 2 Mn-55 0 0 +14 6 2 Si-28 0 0 +15 6 2 Si-29 0 0 +16 6 2 Si-30 0 0 +17 6 2 Cr-50 0 0 +18 6 2 Cr-52 0 0 +19 6 2 Cr-53 0 0 +20 6 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 6 1 H-1 0 0 +22 6 1 O-16 0 0 +23 6 1 B-10 0 0 +24 6 1 B-11 0 0 +25 6 1 Fe-54 0 0 +26 6 1 Fe-56 0 0 +27 6 1 Fe-57 0 0 +28 6 1 Fe-58 0 0 +29 6 1 Ni-58 0 0 +30 6 1 Ni-60 0 0 +31 6 1 Ni-61 0 0 +32 6 1 Ni-62 0 0 +33 6 1 Ni-64 0 0 +34 6 1 Mn-55 0 0 +35 6 1 Si-28 0 0 +36 6 1 Si-29 0 0 +37 6 1 Si-30 0 0 +38 6 1 Cr-50 0 0 +39 6 1 Cr-52 0 0 +40 6 1 Cr-53 0 0 +41 6 1 Cr-54 0 0 +0 6 2 H-1 0 0 +1 6 2 O-16 0 0 +2 6 2 B-10 0 0 +3 6 2 B-11 0 0 +4 6 2 Fe-54 0 0 +5 6 2 Fe-56 0 0 +6 6 2 Fe-57 0 0 +7 6 2 Fe-58 0 0 +8 6 2 Ni-58 0 0 +9 6 2 Ni-60 0 0 +10 6 2 Ni-61 0 0 +11 6 2 Ni-62 0 0 +12 6 2 Ni-64 0 0 +13 6 2 Mn-55 0 0 +14 6 2 Si-28 0 0 +15 6 2 Si-29 0 0 +16 6 2 Si-30 0 0 +17 6 2 Cr-50 0 0 +18 6 2 Cr-52 0 0 +19 6 2 Cr-53 0 0 +20 6 2 Cr-54 0 0 material group in group out nuclide moment mean +252 6 1 1 H-1 P0 0 +253 6 1 1 H-1 P1 0 +254 6 1 1 H-1 P2 0 +255 6 1 1 H-1 P3 0 +256 6 1 1 O-16 P0 0 +257 6 1 1 O-16 P1 0 +258 6 1 1 O-16 P2 0 +259 6 1 1 O-16 P3 0 +260 6 1 1 B-10 P0 0 +261 6 1 1 B-10 P1 0 +262 6 1 1 B-10 P2 0 +263 6 1 1 B-10 P3 0 +264 6 1 1 B-11 P0 0 +265 6 1 1 B-11 P1 0 +266 6 1 1 B-11 P2 0 +267 6 1 1 B-11 P3 0 +268 6 1 1 Fe-54 P0 0 +269 6 1 1 Fe-54 P1 0 +270 6 1 1 Fe-54 P2 0 +271 6 1 1 Fe-54 P3 0 +272 6 1 1 Fe-56 P0 0 +273 6 1 1 Fe-56 P1 0 +274 6 1 1 Fe-56 P2 0 +275 6 1 1 Fe-56 P3 0 +276 6 1 1 Fe-57 P0 0 +277 6 1 1 Fe-57 P1 0 +278 6 1 1 Fe-57 P2 0 +279 6 1 1 Fe-57 P3 0 +280 6 1 1 Fe-58 P0 0 +281 6 1 1 Fe-58 P1 0 +282 6 1 1 Fe-58 P2 0 +283 6 1 1 Fe-58 P3 0 +284 6 1 1 Ni-58 P0 0 +285 6 1 1 Ni-58 P1 0 +286 6 1 1 Ni-58 P2 0 +287 6 1 1 Ni-58 P3 0 +288 6 1 1 Ni-60 P0 0 +289 6 1 1 Ni-60 P1 0 +290 6 1 1 Ni-60 P2 0 +291 6 1 1 Ni-60 P3 0 +292 6 1 1 Ni-61 P0 0 +293 6 1 1 Ni-61 P1 0 +294 6 1 1 Ni-61 P2 0 +295 6 1 1 Ni-61 P3 0 +296 6 1 1 Ni-62 P0 0 +297 6 1 1 Ni-62 P1 0 +298 6 1 1 Ni-62 P2 0 +299 6 1 1 Ni-62 P3 0 +300 6 1 1 Ni-64 P0 0 +301 6 1 1 Ni-64 P1 0 +302 6 1 1 Ni-64 P2 0 +303 6 1 1 Ni-64 P3 0 +304 6 1 1 Mn-55 P0 0 +305 6 1 1 Mn-55 P1 0 +306 6 1 1 Mn-55 P2 0 +307 6 1 1 Mn-55 P3 0 +308 6 1 1 Si-28 P0 0 +309 6 1 1 Si-28 P1 0 +310 6 1 1 Si-28 P2 0 +311 6 1 1 Si-28 P3 0 +312 6 1 1 Si-29 P0 0 +313 6 1 1 Si-29 P1 0 +314 6 1 1 Si-29 P2 0 +315 6 1 1 Si-29 P3 0 +316 6 1 1 Si-30 P0 0 +317 6 1 1 Si-30 P1 0 +318 6 1 1 Si-30 P2 0 +319 6 1 1 Si-30 P3 0 +320 6 1 1 Cr-50 P0 0 +321 6 1 1 Cr-50 P1 0 +322 6 1 1 Cr-50 P2 0 +323 6 1 1 Cr-50 P3 0 +324 6 1 1 Cr-52 P0 0 +325 6 1 1 Cr-52 P1 0 +326 6 1 1 Cr-52 P2 0 +327 6 1 1 Cr-52 P3 0 +328 6 1 1 Cr-53 P0 0 +329 6 1 1 Cr-53 P1 0 +330 6 1 1 Cr-53 P2 0 +331 6 1 1 Cr-53 P3 0 +332 6 1 1 Cr-54 P0 0 +333 6 1 1 Cr-54 P1 0 +334 6 1 1 Cr-54 P2 0 +335 6 1 1 Cr-54 P3 0 +168 6 1 2 H-1 P0 0 +169 6 1 2 H-1 P1 0 +170 6 1 2 H-1 P2 0 +171 6 1 2 H-1 P3 0 +172 6 1 2 O-16 P0 0 +173 6 1 2 O-16 P1 0 +174 6 1 2 O-16 P2 0 +175 6 1 2 O-16 P3 0 +176 6 1 2 B-10 P0 0 +177 6 1 2 B-10 P1 0 +178 6 1 2 B-10 P2 0 +179 6 1 2 B-10 P3 0 +180 6 1 2 B-11 P0 0 +181 6 1 2 B-11 P1 0 +182 6 1 2 B-11 P2 0 +183 6 1 2 B-11 P3 0 +184 6 1 2 Fe-54 P0 0 +185 6 1 2 Fe-54 P1 0 +186 6 1 2 Fe-54 P2 0 +187 6 1 2 Fe-54 P3 0 +188 6 1 2 Fe-56 P0 0 +189 6 1 2 Fe-56 P1 0 +190 6 1 2 Fe-56 P2 0 +191 6 1 2 Fe-56 P3 0 +192 6 1 2 Fe-57 P0 0 +193 6 1 2 Fe-57 P1 0 +194 6 1 2 Fe-57 P2 0 +195 6 1 2 Fe-57 P3 0 +196 6 1 2 Fe-58 P0 0 +197 6 1 2 Fe-58 P1 0 +198 6 1 2 Fe-58 P2 0 +199 6 1 2 Fe-58 P3 0 +200 6 1 2 Ni-58 P0 0 +201 6 1 2 Ni-58 P1 0 +202 6 1 2 Ni-58 P2 0 +203 6 1 2 Ni-58 P3 0 +204 6 1 2 Ni-60 P0 0 +205 6 1 2 Ni-60 P1 0 +206 6 1 2 Ni-60 P2 0 +207 6 1 2 Ni-60 P3 0 +208 6 1 2 Ni-61 P0 0 +209 6 1 2 Ni-61 P1 0 +210 6 1 2 Ni-61 P2 0 +211 6 1 2 Ni-61 P3 0 +212 6 1 2 Ni-62 P0 0 +213 6 1 2 Ni-62 P1 0 +214 6 1 2 Ni-62 P2 0 +215 6 1 2 Ni-62 P3 0 +216 6 1 2 Ni-64 P0 0 +217 6 1 2 Ni-64 P1 0 +218 6 1 2 Ni-64 P2 0 +219 6 1 2 Ni-64 P3 0 +220 6 1 2 Mn-55 P0 0 +221 6 1 2 Mn-55 P1 0 +222 6 1 2 Mn-55 P2 0 +223 6 1 2 Mn-55 P3 0 +224 6 1 2 Si-28 P0 0 +225 6 1 2 Si-28 P1 0 +226 6 1 2 Si-28 P2 0 +227 6 1 2 Si-28 P3 0 +228 6 1 2 Si-29 P0 0 +229 6 1 2 Si-29 P1 0 +230 6 1 2 Si-29 P2 0 +231 6 1 2 Si-29 P3 0 +232 6 1 2 Si-30 P0 0 +233 6 1 2 Si-30 P1 0 +234 6 1 2 Si-30 P2 0 +235 6 1 2 Si-30 P3 0 +236 6 1 2 Cr-50 P0 0 +237 6 1 2 Cr-50 P1 0 +238 6 1 2 Cr-50 P2 0 +239 6 1 2 Cr-50 P3 0 +240 6 1 2 Cr-52 P0 0 +241 6 1 2 Cr-52 P1 0 +242 6 1 2 Cr-52 P2 0 +243 6 1 2 Cr-52 P3 0 +244 6 1 2 Cr-53 P0 0 +245 6 1 2 Cr-53 P1 0 +246 6 1 2 Cr-53 P2 0 +247 6 1 2 Cr-53 P3 0 +248 6 1 2 Cr-54 P0 0 +249 6 1 2 Cr-54 P1 0 +250 6 1 2 Cr-54 P2 0 +251 6 1 2 Cr-54 P3 0 +84 6 2 1 H-1 P0 0 +85 6 2 1 H-1 P1 0 +86 6 2 1 H-1 P2 0 +87 6 2 1 H-1 P3 0 +88 6 2 1 O-16 P0 0 +89 6 2 1 O-16 P1 0 +90 6 2 1 O-16 P2 0 +91 6 2 1 O-16 P3 0 +92 6 2 1 B-10 P0 0 +93 6 2 1 B-10 P1 0 +94 6 2 1 B-10 P2 0 +95 6 2 1 B-10 P3 0 +96 6 2 1 B-11 P0 0 +97 6 2 1 B-11 P1 0 +98 6 2 1 B-11 P2 0 +99 6 2 1 B-11 P3 0 +100 6 2 1 Fe-54 P0 0 +101 6 2 1 Fe-54 P1 0 +102 6 2 1 Fe-54 P2 0 +103 6 2 1 Fe-54 P3 0 +104 6 2 1 Fe-56 P0 0 +105 6 2 1 Fe-56 P1 0 +106 6 2 1 Fe-56 P2 0 +107 6 2 1 Fe-56 P3 0 +108 6 2 1 Fe-57 P0 0 +109 6 2 1 Fe-57 P1 0 +110 6 2 1 Fe-57 P2 0 +111 6 2 1 Fe-57 P3 0 +112 6 2 1 Fe-58 P0 0 +113 6 2 1 Fe-58 P1 0 +114 6 2 1 Fe-58 P2 0 +115 6 2 1 Fe-58 P3 0 +116 6 2 1 Ni-58 P0 0 +117 6 2 1 Ni-58 P1 0 +118 6 2 1 Ni-58 P2 0 +119 6 2 1 Ni-58 P3 0 +120 6 2 1 Ni-60 P0 0 +121 6 2 1 Ni-60 P1 0 +122 6 2 1 Ni-60 P2 0 +123 6 2 1 Ni-60 P3 0 +124 6 2 1 Ni-61 P0 0 +125 6 2 1 Ni-61 P1 0 +126 6 2 1 Ni-61 P2 0 +127 6 2 1 Ni-61 P3 0 +128 6 2 1 Ni-62 P0 0 +129 6 2 1 Ni-62 P1 0 +130 6 2 1 Ni-62 P2 0 +131 6 2 1 Ni-62 P3 0 +132 6 2 1 Ni-64 P0 0 +133 6 2 1 Ni-64 P1 0 +134 6 2 1 Ni-64 P2 0 +135 6 2 1 Ni-64 P3 0 +136 6 2 1 Mn-55 P0 0 +137 6 2 1 Mn-55 P1 0 +138 6 2 1 Mn-55 P2 0 +139 6 2 1 Mn-55 P3 0 +140 6 2 1 Si-28 P0 0 +141 6 2 1 Si-28 P1 0 +142 6 2 1 Si-28 P2 0 +143 6 2 1 Si-28 P3 0 +144 6 2 1 Si-29 P0 0 +145 6 2 1 Si-29 P1 0 +146 6 2 1 Si-29 P2 0 +147 6 2 1 Si-29 P3 0 +148 6 2 1 Si-30 P0 0 +149 6 2 1 Si-30 P1 0 +150 6 2 1 Si-30 P2 0 +151 6 2 1 Si-30 P3 0 +152 6 2 1 Cr-50 P0 0 +153 6 2 1 Cr-50 P1 0 +154 6 2 1 Cr-50 P2 0 +155 6 2 1 Cr-50 P3 0 +156 6 2 1 Cr-52 P0 0 +157 6 2 1 Cr-52 P1 0 +158 6 2 1 Cr-52 P2 0 +159 6 2 1 Cr-52 P3 0 +160 6 2 1 Cr-53 P0 0 +161 6 2 1 Cr-53 P1 0 +162 6 2 1 Cr-53 P2 0 +163 6 2 1 Cr-53 P3 0 +164 6 2 1 Cr-54 P0 0 +165 6 2 1 Cr-54 P1 0 +166 6 2 1 Cr-54 P2 0 +167 6 2 1 Cr-54 P3 0 +0 6 2 2 H-1 P0 0 +1 6 2 2 H-1 P1 0 +2 6 2 2 H-1 P2 0 +3 6 2 2 H-1 P3 0 +4 6 2 2 O-16 P0 0 +5 6 2 2 O-16 P1 0 +6 6 2 2 O-16 P2 0 +7 6 2 2 O-16 P3 0 +8 6 2 2 B-10 P0 0 +9 6 2 2 B-10 P1 0 +10 6 2 2 B-10 P2 0 +11 6 2 2 B-10 P3 0 +12 6 2 2 B-11 P0 0 +13 6 2 2 B-11 P1 0 +14 6 2 2 B-11 P2 0 +15 6 2 2 B-11 P3 0 +16 6 2 2 Fe-54 P0 0 +17 6 2 2 Fe-54 P1 0 +18 6 2 2 Fe-54 P2 0 +19 6 2 2 Fe-54 P3 0 +20 6 2 2 Fe-56 P0 0 +21 6 2 2 Fe-56 P1 0 +22 6 2 2 Fe-56 P2 0 +23 6 2 2 Fe-56 P3 0 +24 6 2 2 Fe-57 P0 0 +25 6 2 2 Fe-57 P1 0 +26 6 2 2 Fe-57 P2 0 +27 6 2 2 Fe-57 P3 0 +28 6 2 2 Fe-58 P0 0 +29 6 2 2 Fe-58 P1 0 +30 6 2 2 Fe-58 P2 0 +31 6 2 2 Fe-58 P3 0 +32 6 2 2 Ni-58 P0 0 +33 6 2 2 Ni-58 P1 0 +34 6 2 2 Ni-58 P2 0 +35 6 2 2 Ni-58 P3 0 +36 6 2 2 Ni-60 P0 0 +37 6 2 2 Ni-60 P1 0 +38 6 2 2 Ni-60 P2 0 +39 6 2 2 Ni-60 P3 0 +40 6 2 2 Ni-61 P0 0 +41 6 2 2 Ni-61 P1 0 +42 6 2 2 Ni-61 P2 0 +43 6 2 2 Ni-61 P3 0 +44 6 2 2 Ni-62 P0 0 +45 6 2 2 Ni-62 P1 0 +46 6 2 2 Ni-62 P2 0 +47 6 2 2 Ni-62 P3 0 +48 6 2 2 Ni-64 P0 0 +49 6 2 2 Ni-64 P1 0 +50 6 2 2 Ni-64 P2 0 +51 6 2 2 Ni-64 P3 0 +52 6 2 2 Mn-55 P0 0 +53 6 2 2 Mn-55 P1 0 +54 6 2 2 Mn-55 P2 0 +55 6 2 2 Mn-55 P3 0 +56 6 2 2 Si-28 P0 0 +57 6 2 2 Si-28 P1 0 +58 6 2 2 Si-28 P2 0 +59 6 2 2 Si-28 P3 0 +60 6 2 2 Si-29 P0 0 +61 6 2 2 Si-29 P1 0 +62 6 2 2 Si-29 P2 0 +63 6 2 2 Si-29 P3 0 +64 6 2 2 Si-30 P0 0 +65 6 2 2 Si-30 P1 0 +66 6 2 2 Si-30 P2 0 +67 6 2 2 Si-30 P3 0 +68 6 2 2 Cr-50 P0 0 +69 6 2 2 Cr-50 P1 0 +70 6 2 2 Cr-50 P2 0 +71 6 2 2 Cr-50 P3 0 +72 6 2 2 Cr-52 P0 0 +73 6 2 2 Cr-52 P1 0 +74 6 2 2 Cr-52 P2 0 +75 6 2 2 Cr-52 P3 0 +76 6 2 2 Cr-53 P0 0 +77 6 2 2 Cr-53 P1 0 +78 6 2 2 Cr-53 P2 0 +79 6 2 2 Cr-53 P3 0 +80 6 2 2 Cr-54 P0 0 +81 6 2 2 Cr-54 P1 0 +82 6 2 2 Cr-54 P2 0 +83 6 2 2 Cr-54 P3 0 material group out nuclide mean std. dev. +21 6 1 H-1 0 0 +22 6 1 O-16 0 0 +23 6 1 B-10 0 0 +24 6 1 B-11 0 0 +25 6 1 Fe-54 0 0 +26 6 1 Fe-56 0 0 +27 6 1 Fe-57 0 0 +28 6 1 Fe-58 0 0 +29 6 1 Ni-58 0 0 +30 6 1 Ni-60 0 0 +31 6 1 Ni-61 0 0 +32 6 1 Ni-62 0 0 +33 6 1 Ni-64 0 0 +34 6 1 Mn-55 0 0 +35 6 1 Si-28 0 0 +36 6 1 Si-29 0 0 +37 6 1 Si-30 0 0 +38 6 1 Cr-50 0 0 +39 6 1 Cr-52 0 0 +40 6 1 Cr-53 0 0 +41 6 1 Cr-54 0 0 +0 6 2 H-1 0 0 +1 6 2 O-16 0 0 +2 6 2 B-10 0 0 +3 6 2 B-11 0 0 +4 6 2 Fe-54 0 0 +5 6 2 Fe-56 0 0 +6 6 2 Fe-57 0 0 +7 6 2 Fe-58 0 0 +8 6 2 Ni-58 0 0 +9 6 2 Ni-60 0 0 +10 6 2 Ni-61 0 0 +11 6 2 Ni-62 0 0 +12 6 2 Ni-64 0 0 +13 6 2 Mn-55 0 0 +14 6 2 Si-28 0 0 +15 6 2 Si-29 0 0 +16 6 2 Si-30 0 0 +17 6 2 Cr-50 0 0 +18 6 2 Cr-52 0 0 +19 6 2 Cr-53 0 0 +20 6 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 7 1 H-1 0 0 +22 7 1 O-16 0 0 +23 7 1 B-10 0 0 +24 7 1 B-11 0 0 +25 7 1 Fe-54 0 0 +26 7 1 Fe-56 0 0 +27 7 1 Fe-57 0 0 +28 7 1 Fe-58 0 0 +29 7 1 Ni-58 0 0 +30 7 1 Ni-60 0 0 +31 7 1 Ni-61 0 0 +32 7 1 Ni-62 0 0 +33 7 1 Ni-64 0 0 +34 7 1 Mn-55 0 0 +35 7 1 Si-28 0 0 +36 7 1 Si-29 0 0 +37 7 1 Si-30 0 0 +38 7 1 Cr-50 0 0 +39 7 1 Cr-52 0 0 +40 7 1 Cr-53 0 0 +41 7 1 Cr-54 0 0 +0 7 2 H-1 0 0 +1 7 2 O-16 0 0 +2 7 2 B-10 0 0 +3 7 2 B-11 0 0 +4 7 2 Fe-54 0 0 +5 7 2 Fe-56 0 0 +6 7 2 Fe-57 0 0 +7 7 2 Fe-58 0 0 +8 7 2 Ni-58 0 0 +9 7 2 Ni-60 0 0 +10 7 2 Ni-61 0 0 +11 7 2 Ni-62 0 0 +12 7 2 Ni-64 0 0 +13 7 2 Mn-55 0 0 +14 7 2 Si-28 0 0 +15 7 2 Si-29 0 0 +16 7 2 Si-30 0 0 +17 7 2 Cr-50 0 0 +18 7 2 Cr-52 0 0 +19 7 2 Cr-53 0 0 +20 7 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 7 1 H-1 0 0 +22 7 1 O-16 0 0 +23 7 1 B-10 0 0 +24 7 1 B-11 0 0 +25 7 1 Fe-54 0 0 +26 7 1 Fe-56 0 0 +27 7 1 Fe-57 0 0 +28 7 1 Fe-58 0 0 +29 7 1 Ni-58 0 0 +30 7 1 Ni-60 0 0 +31 7 1 Ni-61 0 0 +32 7 1 Ni-62 0 0 +33 7 1 Ni-64 0 0 +34 7 1 Mn-55 0 0 +35 7 1 Si-28 0 0 +36 7 1 Si-29 0 0 +37 7 1 Si-30 0 0 +38 7 1 Cr-50 0 0 +39 7 1 Cr-52 0 0 +40 7 1 Cr-53 0 0 +41 7 1 Cr-54 0 0 +0 7 2 H-1 0 0 +1 7 2 O-16 0 0 +2 7 2 B-10 0 0 +3 7 2 B-11 0 0 +4 7 2 Fe-54 0 0 +5 7 2 Fe-56 0 0 +6 7 2 Fe-57 0 0 +7 7 2 Fe-58 0 0 +8 7 2 Ni-58 0 0 +9 7 2 Ni-60 0 0 +10 7 2 Ni-61 0 0 +11 7 2 Ni-62 0 0 +12 7 2 Ni-64 0 0 +13 7 2 Mn-55 0 0 +14 7 2 Si-28 0 0 +15 7 2 Si-29 0 0 +16 7 2 Si-30 0 0 +17 7 2 Cr-50 0 0 +18 7 2 Cr-52 0 0 +19 7 2 Cr-53 0 0 +20 7 2 Cr-54 0 0 material group in group out nuclide moment mean +252 7 1 1 H-1 P0 0 +253 7 1 1 H-1 P1 0 +254 7 1 1 H-1 P2 0 +255 7 1 1 H-1 P3 0 +256 7 1 1 O-16 P0 0 +257 7 1 1 O-16 P1 0 +258 7 1 1 O-16 P2 0 +259 7 1 1 O-16 P3 0 +260 7 1 1 B-10 P0 0 +261 7 1 1 B-10 P1 0 +262 7 1 1 B-10 P2 0 +263 7 1 1 B-10 P3 0 +264 7 1 1 B-11 P0 0 +265 7 1 1 B-11 P1 0 +266 7 1 1 B-11 P2 0 +267 7 1 1 B-11 P3 0 +268 7 1 1 Fe-54 P0 0 +269 7 1 1 Fe-54 P1 0 +270 7 1 1 Fe-54 P2 0 +271 7 1 1 Fe-54 P3 0 +272 7 1 1 Fe-56 P0 0 +273 7 1 1 Fe-56 P1 0 +274 7 1 1 Fe-56 P2 0 +275 7 1 1 Fe-56 P3 0 +276 7 1 1 Fe-57 P0 0 +277 7 1 1 Fe-57 P1 0 +278 7 1 1 Fe-57 P2 0 +279 7 1 1 Fe-57 P3 0 +280 7 1 1 Fe-58 P0 0 +281 7 1 1 Fe-58 P1 0 +282 7 1 1 Fe-58 P2 0 +283 7 1 1 Fe-58 P3 0 +284 7 1 1 Ni-58 P0 0 +285 7 1 1 Ni-58 P1 0 +286 7 1 1 Ni-58 P2 0 +287 7 1 1 Ni-58 P3 0 +288 7 1 1 Ni-60 P0 0 +289 7 1 1 Ni-60 P1 0 +290 7 1 1 Ni-60 P2 0 +291 7 1 1 Ni-60 P3 0 +292 7 1 1 Ni-61 P0 0 +293 7 1 1 Ni-61 P1 0 +294 7 1 1 Ni-61 P2 0 +295 7 1 1 Ni-61 P3 0 +296 7 1 1 Ni-62 P0 0 +297 7 1 1 Ni-62 P1 0 +298 7 1 1 Ni-62 P2 0 +299 7 1 1 Ni-62 P3 0 +300 7 1 1 Ni-64 P0 0 +301 7 1 1 Ni-64 P1 0 +302 7 1 1 Ni-64 P2 0 +303 7 1 1 Ni-64 P3 0 +304 7 1 1 Mn-55 P0 0 +305 7 1 1 Mn-55 P1 0 +306 7 1 1 Mn-55 P2 0 +307 7 1 1 Mn-55 P3 0 +308 7 1 1 Si-28 P0 0 +309 7 1 1 Si-28 P1 0 +310 7 1 1 Si-28 P2 0 +311 7 1 1 Si-28 P3 0 +312 7 1 1 Si-29 P0 0 +313 7 1 1 Si-29 P1 0 +314 7 1 1 Si-29 P2 0 +315 7 1 1 Si-29 P3 0 +316 7 1 1 Si-30 P0 0 +317 7 1 1 Si-30 P1 0 +318 7 1 1 Si-30 P2 0 +319 7 1 1 Si-30 P3 0 +320 7 1 1 Cr-50 P0 0 +321 7 1 1 Cr-50 P1 0 +322 7 1 1 Cr-50 P2 0 +323 7 1 1 Cr-50 P3 0 +324 7 1 1 Cr-52 P0 0 +325 7 1 1 Cr-52 P1 0 +326 7 1 1 Cr-52 P2 0 +327 7 1 1 Cr-52 P3 0 +328 7 1 1 Cr-53 P0 0 +329 7 1 1 Cr-53 P1 0 +330 7 1 1 Cr-53 P2 0 +331 7 1 1 Cr-53 P3 0 +332 7 1 1 Cr-54 P0 0 +333 7 1 1 Cr-54 P1 0 +334 7 1 1 Cr-54 P2 0 +335 7 1 1 Cr-54 P3 0 +168 7 1 2 H-1 P0 0 +169 7 1 2 H-1 P1 0 +170 7 1 2 H-1 P2 0 +171 7 1 2 H-1 P3 0 +172 7 1 2 O-16 P0 0 +173 7 1 2 O-16 P1 0 +174 7 1 2 O-16 P2 0 +175 7 1 2 O-16 P3 0 +176 7 1 2 B-10 P0 0 +177 7 1 2 B-10 P1 0 +178 7 1 2 B-10 P2 0 +179 7 1 2 B-10 P3 0 +180 7 1 2 B-11 P0 0 +181 7 1 2 B-11 P1 0 +182 7 1 2 B-11 P2 0 +183 7 1 2 B-11 P3 0 +184 7 1 2 Fe-54 P0 0 +185 7 1 2 Fe-54 P1 0 +186 7 1 2 Fe-54 P2 0 +187 7 1 2 Fe-54 P3 0 +188 7 1 2 Fe-56 P0 0 +189 7 1 2 Fe-56 P1 0 +190 7 1 2 Fe-56 P2 0 +191 7 1 2 Fe-56 P3 0 +192 7 1 2 Fe-57 P0 0 +193 7 1 2 Fe-57 P1 0 +194 7 1 2 Fe-57 P2 0 +195 7 1 2 Fe-57 P3 0 +196 7 1 2 Fe-58 P0 0 +197 7 1 2 Fe-58 P1 0 +198 7 1 2 Fe-58 P2 0 +199 7 1 2 Fe-58 P3 0 +200 7 1 2 Ni-58 P0 0 +201 7 1 2 Ni-58 P1 0 +202 7 1 2 Ni-58 P2 0 +203 7 1 2 Ni-58 P3 0 +204 7 1 2 Ni-60 P0 0 +205 7 1 2 Ni-60 P1 0 +206 7 1 2 Ni-60 P2 0 +207 7 1 2 Ni-60 P3 0 +208 7 1 2 Ni-61 P0 0 +209 7 1 2 Ni-61 P1 0 +210 7 1 2 Ni-61 P2 0 +211 7 1 2 Ni-61 P3 0 +212 7 1 2 Ni-62 P0 0 +213 7 1 2 Ni-62 P1 0 +214 7 1 2 Ni-62 P2 0 +215 7 1 2 Ni-62 P3 0 +216 7 1 2 Ni-64 P0 0 +217 7 1 2 Ni-64 P1 0 +218 7 1 2 Ni-64 P2 0 +219 7 1 2 Ni-64 P3 0 +220 7 1 2 Mn-55 P0 0 +221 7 1 2 Mn-55 P1 0 +222 7 1 2 Mn-55 P2 0 +223 7 1 2 Mn-55 P3 0 +224 7 1 2 Si-28 P0 0 +225 7 1 2 Si-28 P1 0 +226 7 1 2 Si-28 P2 0 +227 7 1 2 Si-28 P3 0 +228 7 1 2 Si-29 P0 0 +229 7 1 2 Si-29 P1 0 +230 7 1 2 Si-29 P2 0 +231 7 1 2 Si-29 P3 0 +232 7 1 2 Si-30 P0 0 +233 7 1 2 Si-30 P1 0 +234 7 1 2 Si-30 P2 0 +235 7 1 2 Si-30 P3 0 +236 7 1 2 Cr-50 P0 0 +237 7 1 2 Cr-50 P1 0 +238 7 1 2 Cr-50 P2 0 +239 7 1 2 Cr-50 P3 0 +240 7 1 2 Cr-52 P0 0 +241 7 1 2 Cr-52 P1 0 +242 7 1 2 Cr-52 P2 0 +243 7 1 2 Cr-52 P3 0 +244 7 1 2 Cr-53 P0 0 +245 7 1 2 Cr-53 P1 0 +246 7 1 2 Cr-53 P2 0 +247 7 1 2 Cr-53 P3 0 +248 7 1 2 Cr-54 P0 0 +249 7 1 2 Cr-54 P1 0 +250 7 1 2 Cr-54 P2 0 +251 7 1 2 Cr-54 P3 0 +84 7 2 1 H-1 P0 0 +85 7 2 1 H-1 P1 0 +86 7 2 1 H-1 P2 0 +87 7 2 1 H-1 P3 0 +88 7 2 1 O-16 P0 0 +89 7 2 1 O-16 P1 0 +90 7 2 1 O-16 P2 0 +91 7 2 1 O-16 P3 0 +92 7 2 1 B-10 P0 0 +93 7 2 1 B-10 P1 0 +94 7 2 1 B-10 P2 0 +95 7 2 1 B-10 P3 0 +96 7 2 1 B-11 P0 0 +97 7 2 1 B-11 P1 0 +98 7 2 1 B-11 P2 0 +99 7 2 1 B-11 P3 0 +100 7 2 1 Fe-54 P0 0 +101 7 2 1 Fe-54 P1 0 +102 7 2 1 Fe-54 P2 0 +103 7 2 1 Fe-54 P3 0 +104 7 2 1 Fe-56 P0 0 +105 7 2 1 Fe-56 P1 0 +106 7 2 1 Fe-56 P2 0 +107 7 2 1 Fe-56 P3 0 +108 7 2 1 Fe-57 P0 0 +109 7 2 1 Fe-57 P1 0 +110 7 2 1 Fe-57 P2 0 +111 7 2 1 Fe-57 P3 0 +112 7 2 1 Fe-58 P0 0 +113 7 2 1 Fe-58 P1 0 +114 7 2 1 Fe-58 P2 0 +115 7 2 1 Fe-58 P3 0 +116 7 2 1 Ni-58 P0 0 +117 7 2 1 Ni-58 P1 0 +118 7 2 1 Ni-58 P2 0 +119 7 2 1 Ni-58 P3 0 +120 7 2 1 Ni-60 P0 0 +121 7 2 1 Ni-60 P1 0 +122 7 2 1 Ni-60 P2 0 +123 7 2 1 Ni-60 P3 0 +124 7 2 1 Ni-61 P0 0 +125 7 2 1 Ni-61 P1 0 +126 7 2 1 Ni-61 P2 0 +127 7 2 1 Ni-61 P3 0 +128 7 2 1 Ni-62 P0 0 +129 7 2 1 Ni-62 P1 0 +130 7 2 1 Ni-62 P2 0 +131 7 2 1 Ni-62 P3 0 +132 7 2 1 Ni-64 P0 0 +133 7 2 1 Ni-64 P1 0 +134 7 2 1 Ni-64 P2 0 +135 7 2 1 Ni-64 P3 0 +136 7 2 1 Mn-55 P0 0 +137 7 2 1 Mn-55 P1 0 +138 7 2 1 Mn-55 P2 0 +139 7 2 1 Mn-55 P3 0 +140 7 2 1 Si-28 P0 0 +141 7 2 1 Si-28 P1 0 +142 7 2 1 Si-28 P2 0 +143 7 2 1 Si-28 P3 0 +144 7 2 1 Si-29 P0 0 +145 7 2 1 Si-29 P1 0 +146 7 2 1 Si-29 P2 0 +147 7 2 1 Si-29 P3 0 +148 7 2 1 Si-30 P0 0 +149 7 2 1 Si-30 P1 0 +150 7 2 1 Si-30 P2 0 +151 7 2 1 Si-30 P3 0 +152 7 2 1 Cr-50 P0 0 +153 7 2 1 Cr-50 P1 0 +154 7 2 1 Cr-50 P2 0 +155 7 2 1 Cr-50 P3 0 +156 7 2 1 Cr-52 P0 0 +157 7 2 1 Cr-52 P1 0 +158 7 2 1 Cr-52 P2 0 +159 7 2 1 Cr-52 P3 0 +160 7 2 1 Cr-53 P0 0 +161 7 2 1 Cr-53 P1 0 +162 7 2 1 Cr-53 P2 0 +163 7 2 1 Cr-53 P3 0 +164 7 2 1 Cr-54 P0 0 +165 7 2 1 Cr-54 P1 0 +166 7 2 1 Cr-54 P2 0 +167 7 2 1 Cr-54 P3 0 +0 7 2 2 H-1 P0 0 +1 7 2 2 H-1 P1 0 +2 7 2 2 H-1 P2 0 +3 7 2 2 H-1 P3 0 +4 7 2 2 O-16 P0 0 +5 7 2 2 O-16 P1 0 +6 7 2 2 O-16 P2 0 +7 7 2 2 O-16 P3 0 +8 7 2 2 B-10 P0 0 +9 7 2 2 B-10 P1 0 +10 7 2 2 B-10 P2 0 +11 7 2 2 B-10 P3 0 +12 7 2 2 B-11 P0 0 +13 7 2 2 B-11 P1 0 +14 7 2 2 B-11 P2 0 +15 7 2 2 B-11 P3 0 +16 7 2 2 Fe-54 P0 0 +17 7 2 2 Fe-54 P1 0 +18 7 2 2 Fe-54 P2 0 +19 7 2 2 Fe-54 P3 0 +20 7 2 2 Fe-56 P0 0 +21 7 2 2 Fe-56 P1 0 +22 7 2 2 Fe-56 P2 0 +23 7 2 2 Fe-56 P3 0 +24 7 2 2 Fe-57 P0 0 +25 7 2 2 Fe-57 P1 0 +26 7 2 2 Fe-57 P2 0 +27 7 2 2 Fe-57 P3 0 +28 7 2 2 Fe-58 P0 0 +29 7 2 2 Fe-58 P1 0 +30 7 2 2 Fe-58 P2 0 +31 7 2 2 Fe-58 P3 0 +32 7 2 2 Ni-58 P0 0 +33 7 2 2 Ni-58 P1 0 +34 7 2 2 Ni-58 P2 0 +35 7 2 2 Ni-58 P3 0 +36 7 2 2 Ni-60 P0 0 +37 7 2 2 Ni-60 P1 0 +38 7 2 2 Ni-60 P2 0 +39 7 2 2 Ni-60 P3 0 +40 7 2 2 Ni-61 P0 0 +41 7 2 2 Ni-61 P1 0 +42 7 2 2 Ni-61 P2 0 +43 7 2 2 Ni-61 P3 0 +44 7 2 2 Ni-62 P0 0 +45 7 2 2 Ni-62 P1 0 +46 7 2 2 Ni-62 P2 0 +47 7 2 2 Ni-62 P3 0 +48 7 2 2 Ni-64 P0 0 +49 7 2 2 Ni-64 P1 0 +50 7 2 2 Ni-64 P2 0 +51 7 2 2 Ni-64 P3 0 +52 7 2 2 Mn-55 P0 0 +53 7 2 2 Mn-55 P1 0 +54 7 2 2 Mn-55 P2 0 +55 7 2 2 Mn-55 P3 0 +56 7 2 2 Si-28 P0 0 +57 7 2 2 Si-28 P1 0 +58 7 2 2 Si-28 P2 0 +59 7 2 2 Si-28 P3 0 +60 7 2 2 Si-29 P0 0 +61 7 2 2 Si-29 P1 0 +62 7 2 2 Si-29 P2 0 +63 7 2 2 Si-29 P3 0 +64 7 2 2 Si-30 P0 0 +65 7 2 2 Si-30 P1 0 +66 7 2 2 Si-30 P2 0 +67 7 2 2 Si-30 P3 0 +68 7 2 2 Cr-50 P0 0 +69 7 2 2 Cr-50 P1 0 +70 7 2 2 Cr-50 P2 0 +71 7 2 2 Cr-50 P3 0 +72 7 2 2 Cr-52 P0 0 +73 7 2 2 Cr-52 P1 0 +74 7 2 2 Cr-52 P2 0 +75 7 2 2 Cr-52 P3 0 +76 7 2 2 Cr-53 P0 0 +77 7 2 2 Cr-53 P1 0 +78 7 2 2 Cr-53 P2 0 +79 7 2 2 Cr-53 P3 0 +80 7 2 2 Cr-54 P0 0 +81 7 2 2 Cr-54 P1 0 +82 7 2 2 Cr-54 P2 0 +83 7 2 2 Cr-54 P3 0 material group out nuclide mean std. dev. +21 7 1 H-1 0 0 +22 7 1 O-16 0 0 +23 7 1 B-10 0 0 +24 7 1 B-11 0 0 +25 7 1 Fe-54 0 0 +26 7 1 Fe-56 0 0 +27 7 1 Fe-57 0 0 +28 7 1 Fe-58 0 0 +29 7 1 Ni-58 0 0 +30 7 1 Ni-60 0 0 +31 7 1 Ni-61 0 0 +32 7 1 Ni-62 0 0 +33 7 1 Ni-64 0 0 +34 7 1 Mn-55 0 0 +35 7 1 Si-28 0 0 +36 7 1 Si-29 0 0 +37 7 1 Si-30 0 0 +38 7 1 Cr-50 0 0 +39 7 1 Cr-52 0 0 +40 7 1 Cr-53 0 0 +41 7 1 Cr-54 0 0 +0 7 2 H-1 0 0 +1 7 2 O-16 0 0 +2 7 2 B-10 0 0 +3 7 2 B-11 0 0 +4 7 2 Fe-54 0 0 +5 7 2 Fe-56 0 0 +6 7 2 Fe-57 0 0 +7 7 2 Fe-58 0 0 +8 7 2 Ni-58 0 0 +9 7 2 Ni-60 0 0 +10 7 2 Ni-61 0 0 +11 7 2 Ni-62 0 0 +12 7 2 Ni-64 0 0 +13 7 2 Mn-55 0 0 +14 7 2 Si-28 0 0 +15 7 2 Si-29 0 0 +16 7 2 Si-30 0 0 +17 7 2 Cr-50 0 0 +18 7 2 Cr-52 0 0 +19 7 2 Cr-53 0 0 +20 7 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 8 1 H-1 0 0 +22 8 1 O-16 0 0 +23 8 1 B-10 0 0 +24 8 1 B-11 0 0 +25 8 1 Fe-54 0 0 +26 8 1 Fe-56 0 0 +27 8 1 Fe-57 0 0 +28 8 1 Fe-58 0 0 +29 8 1 Ni-58 0 0 +30 8 1 Ni-60 0 0 +31 8 1 Ni-61 0 0 +32 8 1 Ni-62 0 0 +33 8 1 Ni-64 0 0 +34 8 1 Mn-55 0 0 +35 8 1 Si-28 0 0 +36 8 1 Si-29 0 0 +37 8 1 Si-30 0 0 +38 8 1 Cr-50 0 0 +39 8 1 Cr-52 0 0 +40 8 1 Cr-53 0 0 +41 8 1 Cr-54 0 0 +0 8 2 H-1 0 0 +1 8 2 O-16 0 0 +2 8 2 B-10 0 0 +3 8 2 B-11 0 0 +4 8 2 Fe-54 0 0 +5 8 2 Fe-56 0 0 +6 8 2 Fe-57 0 0 +7 8 2 Fe-58 0 0 +8 8 2 Ni-58 0 0 +9 8 2 Ni-60 0 0 +10 8 2 Ni-61 0 0 +11 8 2 Ni-62 0 0 +12 8 2 Ni-64 0 0 +13 8 2 Mn-55 0 0 +14 8 2 Si-28 0 0 +15 8 2 Si-29 0 0 +16 8 2 Si-30 0 0 +17 8 2 Cr-50 0 0 +18 8 2 Cr-52 0 0 +19 8 2 Cr-53 0 0 +20 8 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 8 1 H-1 0 0 +22 8 1 O-16 0 0 +23 8 1 B-10 0 0 +24 8 1 B-11 0 0 +25 8 1 Fe-54 0 0 +26 8 1 Fe-56 0 0 +27 8 1 Fe-57 0 0 +28 8 1 Fe-58 0 0 +29 8 1 Ni-58 0 0 +30 8 1 Ni-60 0 0 +31 8 1 Ni-61 0 0 +32 8 1 Ni-62 0 0 +33 8 1 Ni-64 0 0 +34 8 1 Mn-55 0 0 +35 8 1 Si-28 0 0 +36 8 1 Si-29 0 0 +37 8 1 Si-30 0 0 +38 8 1 Cr-50 0 0 +39 8 1 Cr-52 0 0 +40 8 1 Cr-53 0 0 +41 8 1 Cr-54 0 0 +0 8 2 H-1 0 0 +1 8 2 O-16 0 0 +2 8 2 B-10 0 0 +3 8 2 B-11 0 0 +4 8 2 Fe-54 0 0 +5 8 2 Fe-56 0 0 +6 8 2 Fe-57 0 0 +7 8 2 Fe-58 0 0 +8 8 2 Ni-58 0 0 +9 8 2 Ni-60 0 0 +10 8 2 Ni-61 0 0 +11 8 2 Ni-62 0 0 +12 8 2 Ni-64 0 0 +13 8 2 Mn-55 0 0 +14 8 2 Si-28 0 0 +15 8 2 Si-29 0 0 +16 8 2 Si-30 0 0 +17 8 2 Cr-50 0 0 +18 8 2 Cr-52 0 0 +19 8 2 Cr-53 0 0 +20 8 2 Cr-54 0 0 material group in group out nuclide moment mean +252 8 1 1 H-1 P0 0 +253 8 1 1 H-1 P1 0 +254 8 1 1 H-1 P2 0 +255 8 1 1 H-1 P3 0 +256 8 1 1 O-16 P0 0 +257 8 1 1 O-16 P1 0 +258 8 1 1 O-16 P2 0 +259 8 1 1 O-16 P3 0 +260 8 1 1 B-10 P0 0 +261 8 1 1 B-10 P1 0 +262 8 1 1 B-10 P2 0 +263 8 1 1 B-10 P3 0 +264 8 1 1 B-11 P0 0 +265 8 1 1 B-11 P1 0 +266 8 1 1 B-11 P2 0 +267 8 1 1 B-11 P3 0 +268 8 1 1 Fe-54 P0 0 +269 8 1 1 Fe-54 P1 0 +270 8 1 1 Fe-54 P2 0 +271 8 1 1 Fe-54 P3 0 +272 8 1 1 Fe-56 P0 0 +273 8 1 1 Fe-56 P1 0 +274 8 1 1 Fe-56 P2 0 +275 8 1 1 Fe-56 P3 0 +276 8 1 1 Fe-57 P0 0 +277 8 1 1 Fe-57 P1 0 +278 8 1 1 Fe-57 P2 0 +279 8 1 1 Fe-57 P3 0 +280 8 1 1 Fe-58 P0 0 +281 8 1 1 Fe-58 P1 0 +282 8 1 1 Fe-58 P2 0 +283 8 1 1 Fe-58 P3 0 +284 8 1 1 Ni-58 P0 0 +285 8 1 1 Ni-58 P1 0 +286 8 1 1 Ni-58 P2 0 +287 8 1 1 Ni-58 P3 0 +288 8 1 1 Ni-60 P0 0 +289 8 1 1 Ni-60 P1 0 +290 8 1 1 Ni-60 P2 0 +291 8 1 1 Ni-60 P3 0 +292 8 1 1 Ni-61 P0 0 +293 8 1 1 Ni-61 P1 0 +294 8 1 1 Ni-61 P2 0 +295 8 1 1 Ni-61 P3 0 +296 8 1 1 Ni-62 P0 0 +297 8 1 1 Ni-62 P1 0 +298 8 1 1 Ni-62 P2 0 +299 8 1 1 Ni-62 P3 0 +300 8 1 1 Ni-64 P0 0 +301 8 1 1 Ni-64 P1 0 +302 8 1 1 Ni-64 P2 0 +303 8 1 1 Ni-64 P3 0 +304 8 1 1 Mn-55 P0 0 +305 8 1 1 Mn-55 P1 0 +306 8 1 1 Mn-55 P2 0 +307 8 1 1 Mn-55 P3 0 +308 8 1 1 Si-28 P0 0 +309 8 1 1 Si-28 P1 0 +310 8 1 1 Si-28 P2 0 +311 8 1 1 Si-28 P3 0 +312 8 1 1 Si-29 P0 0 +313 8 1 1 Si-29 P1 0 +314 8 1 1 Si-29 P2 0 +315 8 1 1 Si-29 P3 0 +316 8 1 1 Si-30 P0 0 +317 8 1 1 Si-30 P1 0 +318 8 1 1 Si-30 P2 0 +319 8 1 1 Si-30 P3 0 +320 8 1 1 Cr-50 P0 0 +321 8 1 1 Cr-50 P1 0 +322 8 1 1 Cr-50 P2 0 +323 8 1 1 Cr-50 P3 0 +324 8 1 1 Cr-52 P0 0 +325 8 1 1 Cr-52 P1 0 +326 8 1 1 Cr-52 P2 0 +327 8 1 1 Cr-52 P3 0 +328 8 1 1 Cr-53 P0 0 +329 8 1 1 Cr-53 P1 0 +330 8 1 1 Cr-53 P2 0 +331 8 1 1 Cr-53 P3 0 +332 8 1 1 Cr-54 P0 0 +333 8 1 1 Cr-54 P1 0 +334 8 1 1 Cr-54 P2 0 +335 8 1 1 Cr-54 P3 0 +168 8 1 2 H-1 P0 0 +169 8 1 2 H-1 P1 0 +170 8 1 2 H-1 P2 0 +171 8 1 2 H-1 P3 0 +172 8 1 2 O-16 P0 0 +173 8 1 2 O-16 P1 0 +174 8 1 2 O-16 P2 0 +175 8 1 2 O-16 P3 0 +176 8 1 2 B-10 P0 0 +177 8 1 2 B-10 P1 0 +178 8 1 2 B-10 P2 0 +179 8 1 2 B-10 P3 0 +180 8 1 2 B-11 P0 0 +181 8 1 2 B-11 P1 0 +182 8 1 2 B-11 P2 0 +183 8 1 2 B-11 P3 0 +184 8 1 2 Fe-54 P0 0 +185 8 1 2 Fe-54 P1 0 +186 8 1 2 Fe-54 P2 0 +187 8 1 2 Fe-54 P3 0 +188 8 1 2 Fe-56 P0 0 +189 8 1 2 Fe-56 P1 0 +190 8 1 2 Fe-56 P2 0 +191 8 1 2 Fe-56 P3 0 +192 8 1 2 Fe-57 P0 0 +193 8 1 2 Fe-57 P1 0 +194 8 1 2 Fe-57 P2 0 +195 8 1 2 Fe-57 P3 0 +196 8 1 2 Fe-58 P0 0 +197 8 1 2 Fe-58 P1 0 +198 8 1 2 Fe-58 P2 0 +199 8 1 2 Fe-58 P3 0 +200 8 1 2 Ni-58 P0 0 +201 8 1 2 Ni-58 P1 0 +202 8 1 2 Ni-58 P2 0 +203 8 1 2 Ni-58 P3 0 +204 8 1 2 Ni-60 P0 0 +205 8 1 2 Ni-60 P1 0 +206 8 1 2 Ni-60 P2 0 +207 8 1 2 Ni-60 P3 0 +208 8 1 2 Ni-61 P0 0 +209 8 1 2 Ni-61 P1 0 +210 8 1 2 Ni-61 P2 0 +211 8 1 2 Ni-61 P3 0 +212 8 1 2 Ni-62 P0 0 +213 8 1 2 Ni-62 P1 0 +214 8 1 2 Ni-62 P2 0 +215 8 1 2 Ni-62 P3 0 +216 8 1 2 Ni-64 P0 0 +217 8 1 2 Ni-64 P1 0 +218 8 1 2 Ni-64 P2 0 +219 8 1 2 Ni-64 P3 0 +220 8 1 2 Mn-55 P0 0 +221 8 1 2 Mn-55 P1 0 +222 8 1 2 Mn-55 P2 0 +223 8 1 2 Mn-55 P3 0 +224 8 1 2 Si-28 P0 0 +225 8 1 2 Si-28 P1 0 +226 8 1 2 Si-28 P2 0 +227 8 1 2 Si-28 P3 0 +228 8 1 2 Si-29 P0 0 +229 8 1 2 Si-29 P1 0 +230 8 1 2 Si-29 P2 0 +231 8 1 2 Si-29 P3 0 +232 8 1 2 Si-30 P0 0 +233 8 1 2 Si-30 P1 0 +234 8 1 2 Si-30 P2 0 +235 8 1 2 Si-30 P3 0 +236 8 1 2 Cr-50 P0 0 +237 8 1 2 Cr-50 P1 0 +238 8 1 2 Cr-50 P2 0 +239 8 1 2 Cr-50 P3 0 +240 8 1 2 Cr-52 P0 0 +241 8 1 2 Cr-52 P1 0 +242 8 1 2 Cr-52 P2 0 +243 8 1 2 Cr-52 P3 0 +244 8 1 2 Cr-53 P0 0 +245 8 1 2 Cr-53 P1 0 +246 8 1 2 Cr-53 P2 0 +247 8 1 2 Cr-53 P3 0 +248 8 1 2 Cr-54 P0 0 +249 8 1 2 Cr-54 P1 0 +250 8 1 2 Cr-54 P2 0 +251 8 1 2 Cr-54 P3 0 +84 8 2 1 H-1 P0 0 +85 8 2 1 H-1 P1 0 +86 8 2 1 H-1 P2 0 +87 8 2 1 H-1 P3 0 +88 8 2 1 O-16 P0 0 +89 8 2 1 O-16 P1 0 +90 8 2 1 O-16 P2 0 +91 8 2 1 O-16 P3 0 +92 8 2 1 B-10 P0 0 +93 8 2 1 B-10 P1 0 +94 8 2 1 B-10 P2 0 +95 8 2 1 B-10 P3 0 +96 8 2 1 B-11 P0 0 +97 8 2 1 B-11 P1 0 +98 8 2 1 B-11 P2 0 +99 8 2 1 B-11 P3 0 +100 8 2 1 Fe-54 P0 0 +101 8 2 1 Fe-54 P1 0 +102 8 2 1 Fe-54 P2 0 +103 8 2 1 Fe-54 P3 0 +104 8 2 1 Fe-56 P0 0 +105 8 2 1 Fe-56 P1 0 +106 8 2 1 Fe-56 P2 0 +107 8 2 1 Fe-56 P3 0 +108 8 2 1 Fe-57 P0 0 +109 8 2 1 Fe-57 P1 0 +110 8 2 1 Fe-57 P2 0 +111 8 2 1 Fe-57 P3 0 +112 8 2 1 Fe-58 P0 0 +113 8 2 1 Fe-58 P1 0 +114 8 2 1 Fe-58 P2 0 +115 8 2 1 Fe-58 P3 0 +116 8 2 1 Ni-58 P0 0 +117 8 2 1 Ni-58 P1 0 +118 8 2 1 Ni-58 P2 0 +119 8 2 1 Ni-58 P3 0 +120 8 2 1 Ni-60 P0 0 +121 8 2 1 Ni-60 P1 0 +122 8 2 1 Ni-60 P2 0 +123 8 2 1 Ni-60 P3 0 +124 8 2 1 Ni-61 P0 0 +125 8 2 1 Ni-61 P1 0 +126 8 2 1 Ni-61 P2 0 +127 8 2 1 Ni-61 P3 0 +128 8 2 1 Ni-62 P0 0 +129 8 2 1 Ni-62 P1 0 +130 8 2 1 Ni-62 P2 0 +131 8 2 1 Ni-62 P3 0 +132 8 2 1 Ni-64 P0 0 +133 8 2 1 Ni-64 P1 0 +134 8 2 1 Ni-64 P2 0 +135 8 2 1 Ni-64 P3 0 +136 8 2 1 Mn-55 P0 0 +137 8 2 1 Mn-55 P1 0 +138 8 2 1 Mn-55 P2 0 +139 8 2 1 Mn-55 P3 0 +140 8 2 1 Si-28 P0 0 +141 8 2 1 Si-28 P1 0 +142 8 2 1 Si-28 P2 0 +143 8 2 1 Si-28 P3 0 +144 8 2 1 Si-29 P0 0 +145 8 2 1 Si-29 P1 0 +146 8 2 1 Si-29 P2 0 +147 8 2 1 Si-29 P3 0 +148 8 2 1 Si-30 P0 0 +149 8 2 1 Si-30 P1 0 +150 8 2 1 Si-30 P2 0 +151 8 2 1 Si-30 P3 0 +152 8 2 1 Cr-50 P0 0 +153 8 2 1 Cr-50 P1 0 +154 8 2 1 Cr-50 P2 0 +155 8 2 1 Cr-50 P3 0 +156 8 2 1 Cr-52 P0 0 +157 8 2 1 Cr-52 P1 0 +158 8 2 1 Cr-52 P2 0 +159 8 2 1 Cr-52 P3 0 +160 8 2 1 Cr-53 P0 0 +161 8 2 1 Cr-53 P1 0 +162 8 2 1 Cr-53 P2 0 +163 8 2 1 Cr-53 P3 0 +164 8 2 1 Cr-54 P0 0 +165 8 2 1 Cr-54 P1 0 +166 8 2 1 Cr-54 P2 0 +167 8 2 1 Cr-54 P3 0 +0 8 2 2 H-1 P0 0 +1 8 2 2 H-1 P1 0 +2 8 2 2 H-1 P2 0 +3 8 2 2 H-1 P3 0 +4 8 2 2 O-16 P0 0 +5 8 2 2 O-16 P1 0 +6 8 2 2 O-16 P2 0 +7 8 2 2 O-16 P3 0 +8 8 2 2 B-10 P0 0 +9 8 2 2 B-10 P1 0 +10 8 2 2 B-10 P2 0 +11 8 2 2 B-10 P3 0 +12 8 2 2 B-11 P0 0 +13 8 2 2 B-11 P1 0 +14 8 2 2 B-11 P2 0 +15 8 2 2 B-11 P3 0 +16 8 2 2 Fe-54 P0 0 +17 8 2 2 Fe-54 P1 0 +18 8 2 2 Fe-54 P2 0 +19 8 2 2 Fe-54 P3 0 +20 8 2 2 Fe-56 P0 0 +21 8 2 2 Fe-56 P1 0 +22 8 2 2 Fe-56 P2 0 +23 8 2 2 Fe-56 P3 0 +24 8 2 2 Fe-57 P0 0 +25 8 2 2 Fe-57 P1 0 +26 8 2 2 Fe-57 P2 0 +27 8 2 2 Fe-57 P3 0 +28 8 2 2 Fe-58 P0 0 +29 8 2 2 Fe-58 P1 0 +30 8 2 2 Fe-58 P2 0 +31 8 2 2 Fe-58 P3 0 +32 8 2 2 Ni-58 P0 0 +33 8 2 2 Ni-58 P1 0 +34 8 2 2 Ni-58 P2 0 +35 8 2 2 Ni-58 P3 0 +36 8 2 2 Ni-60 P0 0 +37 8 2 2 Ni-60 P1 0 +38 8 2 2 Ni-60 P2 0 +39 8 2 2 Ni-60 P3 0 +40 8 2 2 Ni-61 P0 0 +41 8 2 2 Ni-61 P1 0 +42 8 2 2 Ni-61 P2 0 +43 8 2 2 Ni-61 P3 0 +44 8 2 2 Ni-62 P0 0 +45 8 2 2 Ni-62 P1 0 +46 8 2 2 Ni-62 P2 0 +47 8 2 2 Ni-62 P3 0 +48 8 2 2 Ni-64 P0 0 +49 8 2 2 Ni-64 P1 0 +50 8 2 2 Ni-64 P2 0 +51 8 2 2 Ni-64 P3 0 +52 8 2 2 Mn-55 P0 0 +53 8 2 2 Mn-55 P1 0 +54 8 2 2 Mn-55 P2 0 +55 8 2 2 Mn-55 P3 0 +56 8 2 2 Si-28 P0 0 +57 8 2 2 Si-28 P1 0 +58 8 2 2 Si-28 P2 0 +59 8 2 2 Si-28 P3 0 +60 8 2 2 Si-29 P0 0 +61 8 2 2 Si-29 P1 0 +62 8 2 2 Si-29 P2 0 +63 8 2 2 Si-29 P3 0 +64 8 2 2 Si-30 P0 0 +65 8 2 2 Si-30 P1 0 +66 8 2 2 Si-30 P2 0 +67 8 2 2 Si-30 P3 0 +68 8 2 2 Cr-50 P0 0 +69 8 2 2 Cr-50 P1 0 +70 8 2 2 Cr-50 P2 0 +71 8 2 2 Cr-50 P3 0 +72 8 2 2 Cr-52 P0 0 +73 8 2 2 Cr-52 P1 0 +74 8 2 2 Cr-52 P2 0 +75 8 2 2 Cr-52 P3 0 +76 8 2 2 Cr-53 P0 0 +77 8 2 2 Cr-53 P1 0 +78 8 2 2 Cr-53 P2 0 +79 8 2 2 Cr-53 P3 0 +80 8 2 2 Cr-54 P0 0 +81 8 2 2 Cr-54 P1 0 +82 8 2 2 Cr-54 P2 0 +83 8 2 2 Cr-54 P3 0 material group out nuclide mean std. dev. +21 8 1 H-1 0 0 +22 8 1 O-16 0 0 +23 8 1 B-10 0 0 +24 8 1 B-11 0 0 +25 8 1 Fe-54 0 0 +26 8 1 Fe-56 0 0 +27 8 1 Fe-57 0 0 +28 8 1 Fe-58 0 0 +29 8 1 Ni-58 0 0 +30 8 1 Ni-60 0 0 +31 8 1 Ni-61 0 0 +32 8 1 Ni-62 0 0 +33 8 1 Ni-64 0 0 +34 8 1 Mn-55 0 0 +35 8 1 Si-28 0 0 +36 8 1 Si-29 0 0 +37 8 1 Si-30 0 0 +38 8 1 Cr-50 0 0 +39 8 1 Cr-52 0 0 +40 8 1 Cr-53 0 0 +41 8 1 Cr-54 0 0 +0 8 2 H-1 0 0 +1 8 2 O-16 0 0 +2 8 2 B-10 0 0 +3 8 2 B-11 0 0 +4 8 2 Fe-54 0 0 +5 8 2 Fe-56 0 0 +6 8 2 Fe-57 0 0 +7 8 2 Fe-58 0 0 +8 8 2 Ni-58 0 0 +9 8 2 Ni-60 0 0 +10 8 2 Ni-61 0 0 +11 8 2 Ni-62 0 0 +12 8 2 Ni-64 0 0 +13 8 2 Mn-55 0 0 +14 8 2 Si-28 0 0 +15 8 2 Si-29 0 0 +16 8 2 Si-30 0 0 +17 8 2 Cr-50 0 0 +18 8 2 Cr-52 0 0 +19 8 2 Cr-53 0 0 +20 8 2 Cr-54 0 0 material group in nuclide mean std. dev. 21 9 1 H-1 0.150655 0.480993 22 9 1 O-16 0.116221 0.114089 23 9 1 B-10 0.000000 0.000000 @@ -1411,174 +3055,426 @@ 18 9 2 Cr-52 0.000000 0.000000 19 9 2 Cr-53 0.000000 0.000000 20 9 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. -21 9 1 H-1 0.0 0.0 -22 9 1 O-16 0.0 0.0 -23 9 1 B-10 0.0 0.0 -24 9 1 B-11 0.0 0.0 -25 9 1 Fe-54 0.0 0.0 -26 9 1 Fe-56 0.0 0.0 -27 9 1 Fe-57 0.0 0.0 -28 9 1 Fe-58 0.0 0.0 -29 9 1 Ni-58 0.0 0.0 -30 9 1 Ni-60 0.0 0.0 -31 9 1 Ni-61 0.0 0.0 -32 9 1 Ni-62 0.0 0.0 -33 9 1 Ni-64 0.0 0.0 -34 9 1 Mn-55 0.0 0.0 -35 9 1 Si-28 0.0 0.0 -36 9 1 Si-29 0.0 0.0 -37 9 1 Si-30 0.0 0.0 -38 9 1 Cr-50 0.0 0.0 -39 9 1 Cr-52 0.0 0.0 -40 9 1 Cr-53 0.0 0.0 -41 9 1 Cr-54 0.0 0.0 -0 9 2 H-1 0.0 0.0 -1 9 2 O-16 0.0 0.0 -2 9 2 B-10 0.0 0.0 -3 9 2 B-11 0.0 0.0 -4 9 2 Fe-54 0.0 0.0 -5 9 2 Fe-56 0.0 0.0 -6 9 2 Fe-57 0.0 0.0 -7 9 2 Fe-58 0.0 0.0 -8 9 2 Ni-58 0.0 0.0 -9 9 2 Ni-60 0.0 0.0 -10 9 2 Ni-61 0.0 0.0 -11 9 2 Ni-62 0.0 0.0 -12 9 2 Ni-64 0.0 0.0 -13 9 2 Mn-55 0.0 0.0 -14 9 2 Si-28 0.0 0.0 -15 9 2 Si-29 0.0 0.0 -16 9 2 Si-30 0.0 0.0 -17 9 2 Cr-50 0.0 0.0 -18 9 2 Cr-52 0.0 0.0 -19 9 2 Cr-53 0.0 0.0 -20 9 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. -63 9 1 1 H-1 0.150655 0.480993 -64 9 1 1 O-16 0.116221 0.114089 -65 9 1 1 B-10 0.000000 0.000000 -66 9 1 1 B-11 0.000000 0.000000 -67 9 1 1 Fe-54 0.000000 0.000000 -68 9 1 1 Fe-56 0.186217 0.199795 -69 9 1 1 Fe-57 0.000000 0.000000 -70 9 1 1 Fe-58 0.000000 0.000000 -71 9 1 1 Ni-58 0.000000 0.000000 -72 9 1 1 Ni-60 0.000000 0.000000 -73 9 1 1 Ni-61 0.000000 0.000000 -74 9 1 1 Ni-62 0.000000 0.000000 -75 9 1 1 Ni-64 0.000000 0.000000 -76 9 1 1 Mn-55 0.000000 0.000000 -77 9 1 1 Si-28 0.000000 0.000000 -78 9 1 1 Si-29 0.000000 0.000000 -79 9 1 1 Si-30 0.000000 0.000000 -80 9 1 1 Cr-50 0.000000 0.000000 -81 9 1 1 Cr-52 0.000000 0.000000 -82 9 1 1 Cr-53 0.147443 0.139574 -83 9 1 1 Cr-54 0.000000 0.000000 -42 9 1 2 H-1 0.000000 0.000000 -43 9 1 2 O-16 0.000000 0.000000 -44 9 1 2 B-10 0.000000 0.000000 -45 9 1 2 B-11 0.000000 0.000000 -46 9 1 2 Fe-54 0.000000 0.000000 -47 9 1 2 Fe-56 0.000000 0.000000 -48 9 1 2 Fe-57 0.000000 0.000000 -49 9 1 2 Fe-58 0.000000 0.000000 -50 9 1 2 Ni-58 0.000000 0.000000 -51 9 1 2 Ni-60 0.000000 0.000000 -52 9 1 2 Ni-61 0.000000 0.000000 -53 9 1 2 Ni-62 0.000000 0.000000 -54 9 1 2 Ni-64 0.000000 0.000000 -55 9 1 2 Mn-55 0.000000 0.000000 -56 9 1 2 Si-28 0.000000 0.000000 -57 9 1 2 Si-29 0.000000 0.000000 -58 9 1 2 Si-30 0.000000 0.000000 -59 9 1 2 Cr-50 0.000000 0.000000 -60 9 1 2 Cr-52 0.000000 0.000000 -61 9 1 2 Cr-53 0.000000 0.000000 -62 9 1 2 Cr-54 0.000000 0.000000 -21 9 2 1 H-1 0.000000 0.000000 -22 9 2 1 O-16 0.000000 0.000000 -23 9 2 1 B-10 0.000000 0.000000 -24 9 2 1 B-11 0.000000 0.000000 -25 9 2 1 Fe-54 0.000000 0.000000 -26 9 2 1 Fe-56 0.000000 0.000000 -27 9 2 1 Fe-57 0.000000 0.000000 -28 9 2 1 Fe-58 0.000000 0.000000 -29 9 2 1 Ni-58 0.000000 0.000000 -30 9 2 1 Ni-60 0.000000 0.000000 -31 9 2 1 Ni-61 0.000000 0.000000 -32 9 2 1 Ni-62 0.000000 0.000000 -33 9 2 1 Ni-64 0.000000 0.000000 -34 9 2 1 Mn-55 0.000000 0.000000 -35 9 2 1 Si-28 0.000000 0.000000 -36 9 2 1 Si-29 0.000000 0.000000 -37 9 2 1 Si-30 0.000000 0.000000 -38 9 2 1 Cr-50 0.000000 0.000000 -39 9 2 1 Cr-52 0.000000 0.000000 -40 9 2 1 Cr-53 0.000000 0.000000 -41 9 2 1 Cr-54 0.000000 0.000000 -0 9 2 2 H-1 0.000000 0.000000 -1 9 2 2 O-16 0.000000 0.000000 -2 9 2 2 B-10 0.000000 0.000000 -3 9 2 2 B-11 0.000000 0.000000 -4 9 2 2 Fe-54 0.000000 0.000000 -5 9 2 2 Fe-56 0.000000 0.000000 -6 9 2 2 Fe-57 0.000000 0.000000 -7 9 2 2 Fe-58 0.000000 0.000000 -8 9 2 2 Ni-58 0.000000 0.000000 -9 9 2 2 Ni-60 0.000000 0.000000 -10 9 2 2 Ni-61 0.000000 0.000000 -11 9 2 2 Ni-62 0.000000 0.000000 -12 9 2 2 Ni-64 0.000000 0.000000 -13 9 2 2 Mn-55 0.000000 0.000000 -14 9 2 2 Si-28 0.000000 0.000000 -15 9 2 2 Si-29 0.000000 0.000000 -16 9 2 2 Si-30 0.000000 0.000000 -17 9 2 2 Cr-50 0.000000 0.000000 -18 9 2 2 Cr-52 0.000000 0.000000 -19 9 2 2 Cr-53 0.000000 0.000000 -20 9 2 2 Cr-54 0.000000 0.000000 material group out nuclide mean std. dev. -21 9 1 H-1 0.0 0.0 -22 9 1 O-16 0.0 0.0 -23 9 1 B-10 0.0 0.0 -24 9 1 B-11 0.0 0.0 -25 9 1 Fe-54 0.0 0.0 -26 9 1 Fe-56 0.0 0.0 -27 9 1 Fe-57 0.0 0.0 -28 9 1 Fe-58 0.0 0.0 -29 9 1 Ni-58 0.0 0.0 -30 9 1 Ni-60 0.0 0.0 -31 9 1 Ni-61 0.0 0.0 -32 9 1 Ni-62 0.0 0.0 -33 9 1 Ni-64 0.0 0.0 -34 9 1 Mn-55 0.0 0.0 -35 9 1 Si-28 0.0 0.0 -36 9 1 Si-29 0.0 0.0 -37 9 1 Si-30 0.0 0.0 -38 9 1 Cr-50 0.0 0.0 -39 9 1 Cr-52 0.0 0.0 -40 9 1 Cr-53 0.0 0.0 -41 9 1 Cr-54 0.0 0.0 -0 9 2 H-1 0.0 0.0 -1 9 2 O-16 0.0 0.0 -2 9 2 B-10 0.0 0.0 -3 9 2 B-11 0.0 0.0 -4 9 2 Fe-54 0.0 0.0 -5 9 2 Fe-56 0.0 0.0 -6 9 2 Fe-57 0.0 0.0 -7 9 2 Fe-58 0.0 0.0 -8 9 2 Ni-58 0.0 0.0 -9 9 2 Ni-60 0.0 0.0 -10 9 2 Ni-61 0.0 0.0 -11 9 2 Ni-62 0.0 0.0 -12 9 2 Ni-64 0.0 0.0 -13 9 2 Mn-55 0.0 0.0 -14 9 2 Si-28 0.0 0.0 -15 9 2 Si-29 0.0 0.0 -16 9 2 Si-30 0.0 0.0 -17 9 2 Cr-50 0.0 0.0 -18 9 2 Cr-52 0.0 0.0 -19 9 2 Cr-53 0.0 0.0 -20 9 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 9 1 H-1 0 0 +22 9 1 O-16 0 0 +23 9 1 B-10 0 0 +24 9 1 B-11 0 0 +25 9 1 Fe-54 0 0 +26 9 1 Fe-56 0 0 +27 9 1 Fe-57 0 0 +28 9 1 Fe-58 0 0 +29 9 1 Ni-58 0 0 +30 9 1 Ni-60 0 0 +31 9 1 Ni-61 0 0 +32 9 1 Ni-62 0 0 +33 9 1 Ni-64 0 0 +34 9 1 Mn-55 0 0 +35 9 1 Si-28 0 0 +36 9 1 Si-29 0 0 +37 9 1 Si-30 0 0 +38 9 1 Cr-50 0 0 +39 9 1 Cr-52 0 0 +40 9 1 Cr-53 0 0 +41 9 1 Cr-54 0 0 +0 9 2 H-1 0 0 +1 9 2 O-16 0 0 +2 9 2 B-10 0 0 +3 9 2 B-11 0 0 +4 9 2 Fe-54 0 0 +5 9 2 Fe-56 0 0 +6 9 2 Fe-57 0 0 +7 9 2 Fe-58 0 0 +8 9 2 Ni-58 0 0 +9 9 2 Ni-60 0 0 +10 9 2 Ni-61 0 0 +11 9 2 Ni-62 0 0 +12 9 2 Ni-64 0 0 +13 9 2 Mn-55 0 0 +14 9 2 Si-28 0 0 +15 9 2 Si-29 0 0 +16 9 2 Si-30 0 0 +17 9 2 Cr-50 0 0 +18 9 2 Cr-52 0 0 +19 9 2 Cr-53 0 0 +20 9 2 Cr-54 0 0 material group in group out nuclide moment mean +252 9 1 1 H-1 P0 0.400211 +253 9 1 1 H-1 P1 0.249556 +254 9 1 1 H-1 P2 0.082049 +255 9 1 1 H-1 P3 0.001559 +256 9 1 1 O-16 P0 0.080042 +257 9 1 1 O-16 P1 -0.036179 +258 9 1 1 O-16 P2 -0.015492 +259 9 1 1 O-16 P3 0.035790 +260 9 1 1 B-10 P0 0.000000 +261 9 1 1 B-10 P1 0.000000 +262 9 1 1 B-10 P2 0.000000 +263 9 1 1 B-10 P3 0.000000 +264 9 1 1 B-11 P0 0.000000 +265 9 1 1 B-11 P1 0.000000 +266 9 1 1 B-11 P2 0.000000 +267 9 1 1 B-11 P3 0.000000 +268 9 1 1 Fe-54 P0 0.000000 +269 9 1 1 Fe-54 P1 0.000000 +270 9 1 1 Fe-54 P2 0.000000 +271 9 1 1 Fe-54 P3 0.000000 +272 9 1 1 Fe-56 P0 0.160084 +273 9 1 1 Fe-56 P1 -0.026133 +274 9 1 1 Fe-56 P2 -0.073149 +275 9 1 1 Fe-56 P3 0.037054 +276 9 1 1 Fe-57 P0 0.000000 +277 9 1 1 Fe-57 P1 0.000000 +278 9 1 1 Fe-57 P2 0.000000 +279 9 1 1 Fe-57 P3 0.000000 +280 9 1 1 Fe-58 P0 0.000000 +281 9 1 1 Fe-58 P1 0.000000 +282 9 1 1 Fe-58 P2 0.000000 +283 9 1 1 Fe-58 P3 0.000000 +284 9 1 1 Ni-58 P0 0.000000 +285 9 1 1 Ni-58 P1 0.000000 +286 9 1 1 Ni-58 P2 0.000000 +287 9 1 1 Ni-58 P3 0.000000 +288 9 1 1 Ni-60 P0 0.000000 +289 9 1 1 Ni-60 P1 0.000000 +290 9 1 1 Ni-60 P2 0.000000 +291 9 1 1 Ni-60 P3 0.000000 +292 9 1 1 Ni-61 P0 0.000000 +293 9 1 1 Ni-61 P1 0.000000 +294 9 1 1 Ni-61 P2 0.000000 +295 9 1 1 Ni-61 P3 0.000000 +296 9 1 1 Ni-62 P0 0.000000 +297 9 1 1 Ni-62 P1 0.000000 +298 9 1 1 Ni-62 P2 0.000000 +299 9 1 1 Ni-62 P3 0.000000 +300 9 1 1 Ni-64 P0 0.000000 +301 9 1 1 Ni-64 P1 0.000000 +302 9 1 1 Ni-64 P2 0.000000 +303 9 1 1 Ni-64 P3 0.000000 +304 9 1 1 Mn-55 P0 0.000000 +305 9 1 1 Mn-55 P1 0.000000 +306 9 1 1 Mn-55 P2 0.000000 +307 9 1 1 Mn-55 P3 0.000000 +308 9 1 1 Si-28 P0 0.000000 +309 9 1 1 Si-28 P1 0.000000 +310 9 1 1 Si-28 P2 0.000000 +311 9 1 1 Si-28 P3 0.000000 +312 9 1 1 Si-29 P0 0.000000 +313 9 1 1 Si-29 P1 0.000000 +314 9 1 1 Si-29 P2 0.000000 +315 9 1 1 Si-29 P3 0.000000 +316 9 1 1 Si-30 P0 0.000000 +317 9 1 1 Si-30 P1 0.000000 +318 9 1 1 Si-30 P2 0.000000 +319 9 1 1 Si-30 P3 0.000000 +320 9 1 1 Cr-50 P0 0.000000 +321 9 1 1 Cr-50 P1 0.000000 +322 9 1 1 Cr-50 P2 0.000000 +323 9 1 1 Cr-50 P3 0.000000 +324 9 1 1 Cr-52 P0 0.000000 +325 9 1 1 Cr-52 P1 0.000000 +326 9 1 1 Cr-52 P2 0.000000 +327 9 1 1 Cr-52 P3 0.000000 +328 9 1 1 Cr-53 P0 0.080042 +329 9 1 1 Cr-53 P1 -0.067401 +330 9 1 1 Cr-53 P2 0.045113 +331 9 1 1 Cr-53 P3 -0.018380 +332 9 1 1 Cr-54 P0 0.000000 +333 9 1 1 Cr-54 P1 0.000000 +334 9 1 1 Cr-54 P2 0.000000 +335 9 1 1 Cr-54 P3 0.000000 +168 9 1 2 H-1 P0 0.000000 +169 9 1 2 H-1 P1 0.000000 +170 9 1 2 H-1 P2 0.000000 +171 9 1 2 H-1 P3 0.000000 +172 9 1 2 O-16 P0 0.000000 +173 9 1 2 O-16 P1 0.000000 +174 9 1 2 O-16 P2 0.000000 +175 9 1 2 O-16 P3 0.000000 +176 9 1 2 B-10 P0 0.000000 +177 9 1 2 B-10 P1 0.000000 +178 9 1 2 B-10 P2 0.000000 +179 9 1 2 B-10 P3 0.000000 +180 9 1 2 B-11 P0 0.000000 +181 9 1 2 B-11 P1 0.000000 +182 9 1 2 B-11 P2 0.000000 +183 9 1 2 B-11 P3 0.000000 +184 9 1 2 Fe-54 P0 0.000000 +185 9 1 2 Fe-54 P1 0.000000 +186 9 1 2 Fe-54 P2 0.000000 +187 9 1 2 Fe-54 P3 0.000000 +188 9 1 2 Fe-56 P0 0.000000 +189 9 1 2 Fe-56 P1 0.000000 +190 9 1 2 Fe-56 P2 0.000000 +191 9 1 2 Fe-56 P3 0.000000 +192 9 1 2 Fe-57 P0 0.000000 +193 9 1 2 Fe-57 P1 0.000000 +194 9 1 2 Fe-57 P2 0.000000 +195 9 1 2 Fe-57 P3 0.000000 +196 9 1 2 Fe-58 P0 0.000000 +197 9 1 2 Fe-58 P1 0.000000 +198 9 1 2 Fe-58 P2 0.000000 +199 9 1 2 Fe-58 P3 0.000000 +200 9 1 2 Ni-58 P0 0.000000 +201 9 1 2 Ni-58 P1 0.000000 +202 9 1 2 Ni-58 P2 0.000000 +203 9 1 2 Ni-58 P3 0.000000 +204 9 1 2 Ni-60 P0 0.000000 +205 9 1 2 Ni-60 P1 0.000000 +206 9 1 2 Ni-60 P2 0.000000 +207 9 1 2 Ni-60 P3 0.000000 +208 9 1 2 Ni-61 P0 0.000000 +209 9 1 2 Ni-61 P1 0.000000 +210 9 1 2 Ni-61 P2 0.000000 +211 9 1 2 Ni-61 P3 0.000000 +212 9 1 2 Ni-62 P0 0.000000 +213 9 1 2 Ni-62 P1 0.000000 +214 9 1 2 Ni-62 P2 0.000000 +215 9 1 2 Ni-62 P3 0.000000 +216 9 1 2 Ni-64 P0 0.000000 +217 9 1 2 Ni-64 P1 0.000000 +218 9 1 2 Ni-64 P2 0.000000 +219 9 1 2 Ni-64 P3 0.000000 +220 9 1 2 Mn-55 P0 0.000000 +221 9 1 2 Mn-55 P1 0.000000 +222 9 1 2 Mn-55 P2 0.000000 +223 9 1 2 Mn-55 P3 0.000000 +224 9 1 2 Si-28 P0 0.000000 +225 9 1 2 Si-28 P1 0.000000 +226 9 1 2 Si-28 P2 0.000000 +227 9 1 2 Si-28 P3 0.000000 +228 9 1 2 Si-29 P0 0.000000 +229 9 1 2 Si-29 P1 0.000000 +230 9 1 2 Si-29 P2 0.000000 +231 9 1 2 Si-29 P3 0.000000 +232 9 1 2 Si-30 P0 0.000000 +233 9 1 2 Si-30 P1 0.000000 +234 9 1 2 Si-30 P2 0.000000 +235 9 1 2 Si-30 P3 0.000000 +236 9 1 2 Cr-50 P0 0.000000 +237 9 1 2 Cr-50 P1 0.000000 +238 9 1 2 Cr-50 P2 0.000000 +239 9 1 2 Cr-50 P3 0.000000 +240 9 1 2 Cr-52 P0 0.000000 +241 9 1 2 Cr-52 P1 0.000000 +242 9 1 2 Cr-52 P2 0.000000 +243 9 1 2 Cr-52 P3 0.000000 +244 9 1 2 Cr-53 P0 0.000000 +245 9 1 2 Cr-53 P1 0.000000 +246 9 1 2 Cr-53 P2 0.000000 +247 9 1 2 Cr-53 P3 0.000000 +248 9 1 2 Cr-54 P0 0.000000 +249 9 1 2 Cr-54 P1 0.000000 +250 9 1 2 Cr-54 P2 0.000000 +251 9 1 2 Cr-54 P3 0.000000 +84 9 2 1 H-1 P0 0.000000 +85 9 2 1 H-1 P1 0.000000 +86 9 2 1 H-1 P2 0.000000 +87 9 2 1 H-1 P3 0.000000 +88 9 2 1 O-16 P0 0.000000 +89 9 2 1 O-16 P1 0.000000 +90 9 2 1 O-16 P2 0.000000 +91 9 2 1 O-16 P3 0.000000 +92 9 2 1 B-10 P0 0.000000 +93 9 2 1 B-10 P1 0.000000 +94 9 2 1 B-10 P2 0.000000 +95 9 2 1 B-10 P3 0.000000 +96 9 2 1 B-11 P0 0.000000 +97 9 2 1 B-11 P1 0.000000 +98 9 2 1 B-11 P2 0.000000 +99 9 2 1 B-11 P3 0.000000 +100 9 2 1 Fe-54 P0 0.000000 +101 9 2 1 Fe-54 P1 0.000000 +102 9 2 1 Fe-54 P2 0.000000 +103 9 2 1 Fe-54 P3 0.000000 +104 9 2 1 Fe-56 P0 0.000000 +105 9 2 1 Fe-56 P1 0.000000 +106 9 2 1 Fe-56 P2 0.000000 +107 9 2 1 Fe-56 P3 0.000000 +108 9 2 1 Fe-57 P0 0.000000 +109 9 2 1 Fe-57 P1 0.000000 +110 9 2 1 Fe-57 P2 0.000000 +111 9 2 1 Fe-57 P3 0.000000 +112 9 2 1 Fe-58 P0 0.000000 +113 9 2 1 Fe-58 P1 0.000000 +114 9 2 1 Fe-58 P2 0.000000 +115 9 2 1 Fe-58 P3 0.000000 +116 9 2 1 Ni-58 P0 0.000000 +117 9 2 1 Ni-58 P1 0.000000 +118 9 2 1 Ni-58 P2 0.000000 +119 9 2 1 Ni-58 P3 0.000000 +120 9 2 1 Ni-60 P0 0.000000 +121 9 2 1 Ni-60 P1 0.000000 +122 9 2 1 Ni-60 P2 0.000000 +123 9 2 1 Ni-60 P3 0.000000 +124 9 2 1 Ni-61 P0 0.000000 +125 9 2 1 Ni-61 P1 0.000000 +126 9 2 1 Ni-61 P2 0.000000 +127 9 2 1 Ni-61 P3 0.000000 +128 9 2 1 Ni-62 P0 0.000000 +129 9 2 1 Ni-62 P1 0.000000 +130 9 2 1 Ni-62 P2 0.000000 +131 9 2 1 Ni-62 P3 0.000000 +132 9 2 1 Ni-64 P0 0.000000 +133 9 2 1 Ni-64 P1 0.000000 +134 9 2 1 Ni-64 P2 0.000000 +135 9 2 1 Ni-64 P3 0.000000 +136 9 2 1 Mn-55 P0 0.000000 +137 9 2 1 Mn-55 P1 0.000000 +138 9 2 1 Mn-55 P2 0.000000 +139 9 2 1 Mn-55 P3 0.000000 +140 9 2 1 Si-28 P0 0.000000 +141 9 2 1 Si-28 P1 0.000000 +142 9 2 1 Si-28 P2 0.000000 +143 9 2 1 Si-28 P3 0.000000 +144 9 2 1 Si-29 P0 0.000000 +145 9 2 1 Si-29 P1 0.000000 +146 9 2 1 Si-29 P2 0.000000 +147 9 2 1 Si-29 P3 0.000000 +148 9 2 1 Si-30 P0 0.000000 +149 9 2 1 Si-30 P1 0.000000 +150 9 2 1 Si-30 P2 0.000000 +151 9 2 1 Si-30 P3 0.000000 +152 9 2 1 Cr-50 P0 0.000000 +153 9 2 1 Cr-50 P1 0.000000 +154 9 2 1 Cr-50 P2 0.000000 +155 9 2 1 Cr-50 P3 0.000000 +156 9 2 1 Cr-52 P0 0.000000 +157 9 2 1 Cr-52 P1 0.000000 +158 9 2 1 Cr-52 P2 0.000000 +159 9 2 1 Cr-52 P3 0.000000 +160 9 2 1 Cr-53 P0 0.000000 +161 9 2 1 Cr-53 P1 0.000000 +162 9 2 1 Cr-53 P2 0.000000 +163 9 2 1 Cr-53 P3 0.000000 +164 9 2 1 Cr-54 P0 0.000000 +165 9 2 1 Cr-54 P1 0.000000 +166 9 2 1 Cr-54 P2 0.000000 +167 9 2 1 Cr-54 P3 0.000000 +0 9 2 2 H-1 P0 0.000000 +1 9 2 2 H-1 P1 0.000000 +2 9 2 2 H-1 P2 0.000000 +3 9 2 2 H-1 P3 0.000000 +4 9 2 2 O-16 P0 0.000000 +5 9 2 2 O-16 P1 0.000000 +6 9 2 2 O-16 P2 0.000000 +7 9 2 2 O-16 P3 0.000000 +8 9 2 2 B-10 P0 0.000000 +9 9 2 2 B-10 P1 0.000000 +10 9 2 2 B-10 P2 0.000000 +11 9 2 2 B-10 P3 0.000000 +12 9 2 2 B-11 P0 0.000000 +13 9 2 2 B-11 P1 0.000000 +14 9 2 2 B-11 P2 0.000000 +15 9 2 2 B-11 P3 0.000000 +16 9 2 2 Fe-54 P0 0.000000 +17 9 2 2 Fe-54 P1 0.000000 +18 9 2 2 Fe-54 P2 0.000000 +19 9 2 2 Fe-54 P3 0.000000 +20 9 2 2 Fe-56 P0 0.000000 +21 9 2 2 Fe-56 P1 0.000000 +22 9 2 2 Fe-56 P2 0.000000 +23 9 2 2 Fe-56 P3 0.000000 +24 9 2 2 Fe-57 P0 0.000000 +25 9 2 2 Fe-57 P1 0.000000 +26 9 2 2 Fe-57 P2 0.000000 +27 9 2 2 Fe-57 P3 0.000000 +28 9 2 2 Fe-58 P0 0.000000 +29 9 2 2 Fe-58 P1 0.000000 +30 9 2 2 Fe-58 P2 0.000000 +31 9 2 2 Fe-58 P3 0.000000 +32 9 2 2 Ni-58 P0 0.000000 +33 9 2 2 Ni-58 P1 0.000000 +34 9 2 2 Ni-58 P2 0.000000 +35 9 2 2 Ni-58 P3 0.000000 +36 9 2 2 Ni-60 P0 0.000000 +37 9 2 2 Ni-60 P1 0.000000 +38 9 2 2 Ni-60 P2 0.000000 +39 9 2 2 Ni-60 P3 0.000000 +40 9 2 2 Ni-61 P0 0.000000 +41 9 2 2 Ni-61 P1 0.000000 +42 9 2 2 Ni-61 P2 0.000000 +43 9 2 2 Ni-61 P3 0.000000 +44 9 2 2 Ni-62 P0 0.000000 +45 9 2 2 Ni-62 P1 0.000000 +46 9 2 2 Ni-62 P2 0.000000 +47 9 2 2 Ni-62 P3 0.000000 +48 9 2 2 Ni-64 P0 0.000000 +49 9 2 2 Ni-64 P1 0.000000 +50 9 2 2 Ni-64 P2 0.000000 +51 9 2 2 Ni-64 P3 0.000000 +52 9 2 2 Mn-55 P0 0.000000 +53 9 2 2 Mn-55 P1 0.000000 +54 9 2 2 Mn-55 P2 0.000000 +55 9 2 2 Mn-55 P3 0.000000 +56 9 2 2 Si-28 P0 0.000000 +57 9 2 2 Si-28 P1 0.000000 +58 9 2 2 Si-28 P2 0.000000 +59 9 2 2 Si-28 P3 0.000000 +60 9 2 2 Si-29 P0 0.000000 +61 9 2 2 Si-29 P1 0.000000 +62 9 2 2 Si-29 P2 0.000000 +63 9 2 2 Si-29 P3 0.000000 +64 9 2 2 Si-30 P0 0.000000 +65 9 2 2 Si-30 P1 0.000000 +66 9 2 2 Si-30 P2 0.000000 +67 9 2 2 Si-30 P3 0.000000 +68 9 2 2 Cr-50 P0 0.000000 +69 9 2 2 Cr-50 P1 0.000000 +70 9 2 2 Cr-50 P2 0.000000 +71 9 2 2 Cr-50 P3 0.000000 +72 9 2 2 Cr-52 P0 0.000000 +73 9 2 2 Cr-52 P1 0.000000 +74 9 2 2 Cr-52 P2 0.000000 +75 9 2 2 Cr-52 P3 0.000000 +76 9 2 2 Cr-53 P0 0.000000 +77 9 2 2 Cr-53 P1 0.000000 +78 9 2 2 Cr-53 P2 0.000000 +79 9 2 2 Cr-53 P3 0.000000 +80 9 2 2 Cr-54 P0 0.000000 +81 9 2 2 Cr-54 P1 0.000000 +82 9 2 2 Cr-54 P2 0.000000 +83 9 2 2 Cr-54 P3 0.000000 material group out nuclide mean std. dev. +21 9 1 H-1 0 0 +22 9 1 O-16 0 0 +23 9 1 B-10 0 0 +24 9 1 B-11 0 0 +25 9 1 Fe-54 0 0 +26 9 1 Fe-56 0 0 +27 9 1 Fe-57 0 0 +28 9 1 Fe-58 0 0 +29 9 1 Ni-58 0 0 +30 9 1 Ni-60 0 0 +31 9 1 Ni-61 0 0 +32 9 1 Ni-62 0 0 +33 9 1 Ni-64 0 0 +34 9 1 Mn-55 0 0 +35 9 1 Si-28 0 0 +36 9 1 Si-29 0 0 +37 9 1 Si-30 0 0 +38 9 1 Cr-50 0 0 +39 9 1 Cr-52 0 0 +40 9 1 Cr-53 0 0 +41 9 1 Cr-54 0 0 +0 9 2 H-1 0 0 +1 9 2 O-16 0 0 +2 9 2 B-10 0 0 +3 9 2 B-11 0 0 +4 9 2 Fe-54 0 0 +5 9 2 Fe-56 0 0 +6 9 2 Fe-57 0 0 +7 9 2 Fe-58 0 0 +8 9 2 Ni-58 0 0 +9 9 2 Ni-60 0 0 +10 9 2 Ni-61 0 0 +11 9 2 Ni-62 0 0 +12 9 2 Ni-64 0 0 +13 9 2 Mn-55 0 0 +14 9 2 Si-28 0 0 +15 9 2 Si-29 0 0 +16 9 2 Si-30 0 0 +17 9 2 Cr-50 0 0 +18 9 2 Cr-52 0 0 +19 9 2 Cr-53 0 0 +20 9 2 Cr-54 0 0 material group in nuclide mean std. dev. 21 10 1 H-1 0.123944 0.541390 22 10 1 O-16 0.000000 0.000000 23 10 1 B-10 0.000000 0.000000 @@ -1621,174 +3517,426 @@ 18 10 2 Cr-52 0.000000 0.000000 19 10 2 Cr-53 0.000000 0.000000 20 10 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. -21 10 1 H-1 0.0 0.0 -22 10 1 O-16 0.0 0.0 -23 10 1 B-10 0.0 0.0 -24 10 1 B-11 0.0 0.0 -25 10 1 Fe-54 0.0 0.0 -26 10 1 Fe-56 0.0 0.0 -27 10 1 Fe-57 0.0 0.0 -28 10 1 Fe-58 0.0 0.0 -29 10 1 Ni-58 0.0 0.0 -30 10 1 Ni-60 0.0 0.0 -31 10 1 Ni-61 0.0 0.0 -32 10 1 Ni-62 0.0 0.0 -33 10 1 Ni-64 0.0 0.0 -34 10 1 Mn-55 0.0 0.0 -35 10 1 Si-28 0.0 0.0 -36 10 1 Si-29 0.0 0.0 -37 10 1 Si-30 0.0 0.0 -38 10 1 Cr-50 0.0 0.0 -39 10 1 Cr-52 0.0 0.0 -40 10 1 Cr-53 0.0 0.0 -41 10 1 Cr-54 0.0 0.0 -0 10 2 H-1 0.0 0.0 -1 10 2 O-16 0.0 0.0 -2 10 2 B-10 0.0 0.0 -3 10 2 B-11 0.0 0.0 -4 10 2 Fe-54 0.0 0.0 -5 10 2 Fe-56 0.0 0.0 -6 10 2 Fe-57 0.0 0.0 -7 10 2 Fe-58 0.0 0.0 -8 10 2 Ni-58 0.0 0.0 -9 10 2 Ni-60 0.0 0.0 -10 10 2 Ni-61 0.0 0.0 -11 10 2 Ni-62 0.0 0.0 -12 10 2 Ni-64 0.0 0.0 -13 10 2 Mn-55 0.0 0.0 -14 10 2 Si-28 0.0 0.0 -15 10 2 Si-29 0.0 0.0 -16 10 2 Si-30 0.0 0.0 -17 10 2 Cr-50 0.0 0.0 -18 10 2 Cr-52 0.0 0.0 -19 10 2 Cr-53 0.0 0.0 -20 10 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. -63 10 1 1 H-1 0.123944 0.541390 -64 10 1 1 O-16 0.000000 0.000000 -65 10 1 1 B-10 0.000000 0.000000 -66 10 1 1 B-11 0.000000 0.000000 -67 10 1 1 Fe-54 0.000000 0.000000 -68 10 1 1 Fe-56 0.000000 0.000000 -69 10 1 1 Fe-57 0.000000 0.000000 -70 10 1 1 Fe-58 0.000000 0.000000 -71 10 1 1 Ni-58 0.000000 0.000000 -72 10 1 1 Ni-60 0.000000 0.000000 -73 10 1 1 Ni-61 0.000000 0.000000 -74 10 1 1 Ni-62 0.000000 0.000000 -75 10 1 1 Ni-64 0.000000 0.000000 -76 10 1 1 Mn-55 0.000000 0.000000 -77 10 1 1 Si-28 0.000000 0.000000 -78 10 1 1 Si-29 0.000000 0.000000 -79 10 1 1 Si-30 0.000000 0.000000 -80 10 1 1 Cr-50 0.111571 0.138458 -81 10 1 1 Cr-52 0.000000 0.000000 -82 10 1 1 Cr-53 0.000000 0.000000 -83 10 1 1 Cr-54 0.000000 0.000000 -42 10 1 2 H-1 0.000000 0.000000 -43 10 1 2 O-16 0.000000 0.000000 -44 10 1 2 B-10 0.000000 0.000000 -45 10 1 2 B-11 0.000000 0.000000 -46 10 1 2 Fe-54 0.000000 0.000000 -47 10 1 2 Fe-56 0.000000 0.000000 -48 10 1 2 Fe-57 0.000000 0.000000 -49 10 1 2 Fe-58 0.000000 0.000000 -50 10 1 2 Ni-58 0.000000 0.000000 -51 10 1 2 Ni-60 0.000000 0.000000 -52 10 1 2 Ni-61 0.000000 0.000000 -53 10 1 2 Ni-62 0.000000 0.000000 -54 10 1 2 Ni-64 0.000000 0.000000 -55 10 1 2 Mn-55 0.000000 0.000000 -56 10 1 2 Si-28 0.000000 0.000000 -57 10 1 2 Si-29 0.000000 0.000000 -58 10 1 2 Si-30 0.000000 0.000000 -59 10 1 2 Cr-50 0.000000 0.000000 -60 10 1 2 Cr-52 0.000000 0.000000 -61 10 1 2 Cr-53 0.000000 0.000000 -62 10 1 2 Cr-54 0.000000 0.000000 -21 10 2 1 H-1 0.000000 0.000000 -22 10 2 1 O-16 0.000000 0.000000 -23 10 2 1 B-10 0.000000 0.000000 -24 10 2 1 B-11 0.000000 0.000000 -25 10 2 1 Fe-54 0.000000 0.000000 -26 10 2 1 Fe-56 0.000000 0.000000 -27 10 2 1 Fe-57 0.000000 0.000000 -28 10 2 1 Fe-58 0.000000 0.000000 -29 10 2 1 Ni-58 0.000000 0.000000 -30 10 2 1 Ni-60 0.000000 0.000000 -31 10 2 1 Ni-61 0.000000 0.000000 -32 10 2 1 Ni-62 0.000000 0.000000 -33 10 2 1 Ni-64 0.000000 0.000000 -34 10 2 1 Mn-55 0.000000 0.000000 -35 10 2 1 Si-28 0.000000 0.000000 -36 10 2 1 Si-29 0.000000 0.000000 -37 10 2 1 Si-30 0.000000 0.000000 -38 10 2 1 Cr-50 0.000000 0.000000 -39 10 2 1 Cr-52 0.000000 0.000000 -40 10 2 1 Cr-53 0.000000 0.000000 -41 10 2 1 Cr-54 0.000000 0.000000 -0 10 2 2 H-1 0.000000 0.000000 -1 10 2 2 O-16 0.000000 0.000000 -2 10 2 2 B-10 0.000000 0.000000 -3 10 2 2 B-11 0.000000 0.000000 -4 10 2 2 Fe-54 0.000000 0.000000 -5 10 2 2 Fe-56 0.000000 0.000000 -6 10 2 2 Fe-57 0.000000 0.000000 -7 10 2 2 Fe-58 0.000000 0.000000 -8 10 2 2 Ni-58 0.000000 0.000000 -9 10 2 2 Ni-60 0.000000 0.000000 -10 10 2 2 Ni-61 0.000000 0.000000 -11 10 2 2 Ni-62 0.000000 0.000000 -12 10 2 2 Ni-64 0.000000 0.000000 -13 10 2 2 Mn-55 0.000000 0.000000 -14 10 2 2 Si-28 0.000000 0.000000 -15 10 2 2 Si-29 0.000000 0.000000 -16 10 2 2 Si-30 0.000000 0.000000 -17 10 2 2 Cr-50 0.000000 0.000000 -18 10 2 2 Cr-52 0.000000 0.000000 -19 10 2 2 Cr-53 0.000000 0.000000 -20 10 2 2 Cr-54 0.000000 0.000000 material group out nuclide mean std. dev. -21 10 1 H-1 0.0 0.0 -22 10 1 O-16 0.0 0.0 -23 10 1 B-10 0.0 0.0 -24 10 1 B-11 0.0 0.0 -25 10 1 Fe-54 0.0 0.0 -26 10 1 Fe-56 0.0 0.0 -27 10 1 Fe-57 0.0 0.0 -28 10 1 Fe-58 0.0 0.0 -29 10 1 Ni-58 0.0 0.0 -30 10 1 Ni-60 0.0 0.0 -31 10 1 Ni-61 0.0 0.0 -32 10 1 Ni-62 0.0 0.0 -33 10 1 Ni-64 0.0 0.0 -34 10 1 Mn-55 0.0 0.0 -35 10 1 Si-28 0.0 0.0 -36 10 1 Si-29 0.0 0.0 -37 10 1 Si-30 0.0 0.0 -38 10 1 Cr-50 0.0 0.0 -39 10 1 Cr-52 0.0 0.0 -40 10 1 Cr-53 0.0 0.0 -41 10 1 Cr-54 0.0 0.0 -0 10 2 H-1 0.0 0.0 -1 10 2 O-16 0.0 0.0 -2 10 2 B-10 0.0 0.0 -3 10 2 B-11 0.0 0.0 -4 10 2 Fe-54 0.0 0.0 -5 10 2 Fe-56 0.0 0.0 -6 10 2 Fe-57 0.0 0.0 -7 10 2 Fe-58 0.0 0.0 -8 10 2 Ni-58 0.0 0.0 -9 10 2 Ni-60 0.0 0.0 -10 10 2 Ni-61 0.0 0.0 -11 10 2 Ni-62 0.0 0.0 -12 10 2 Ni-64 0.0 0.0 -13 10 2 Mn-55 0.0 0.0 -14 10 2 Si-28 0.0 0.0 -15 10 2 Si-29 0.0 0.0 -16 10 2 Si-30 0.0 0.0 -17 10 2 Cr-50 0.0 0.0 -18 10 2 Cr-52 0.0 0.0 -19 10 2 Cr-53 0.0 0.0 -20 10 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 10 1 H-1 0 0 +22 10 1 O-16 0 0 +23 10 1 B-10 0 0 +24 10 1 B-11 0 0 +25 10 1 Fe-54 0 0 +26 10 1 Fe-56 0 0 +27 10 1 Fe-57 0 0 +28 10 1 Fe-58 0 0 +29 10 1 Ni-58 0 0 +30 10 1 Ni-60 0 0 +31 10 1 Ni-61 0 0 +32 10 1 Ni-62 0 0 +33 10 1 Ni-64 0 0 +34 10 1 Mn-55 0 0 +35 10 1 Si-28 0 0 +36 10 1 Si-29 0 0 +37 10 1 Si-30 0 0 +38 10 1 Cr-50 0 0 +39 10 1 Cr-52 0 0 +40 10 1 Cr-53 0 0 +41 10 1 Cr-54 0 0 +0 10 2 H-1 0 0 +1 10 2 O-16 0 0 +2 10 2 B-10 0 0 +3 10 2 B-11 0 0 +4 10 2 Fe-54 0 0 +5 10 2 Fe-56 0 0 +6 10 2 Fe-57 0 0 +7 10 2 Fe-58 0 0 +8 10 2 Ni-58 0 0 +9 10 2 Ni-60 0 0 +10 10 2 Ni-61 0 0 +11 10 2 Ni-62 0 0 +12 10 2 Ni-64 0 0 +13 10 2 Mn-55 0 0 +14 10 2 Si-28 0 0 +15 10 2 Si-29 0 0 +16 10 2 Si-30 0 0 +17 10 2 Cr-50 0 0 +18 10 2 Cr-52 0 0 +19 10 2 Cr-53 0 0 +20 10 2 Cr-54 0 0 material group in group out nuclide moment mean +252 10 1 1 H-1 P0 0.429436 +253 10 1 1 H-1 P1 0.305492 +254 10 1 1 H-1 P2 0.144235 +255 10 1 1 H-1 P3 0.045491 +256 10 1 1 O-16 P0 0.000000 +257 10 1 1 O-16 P1 0.000000 +258 10 1 1 O-16 P2 0.000000 +259 10 1 1 O-16 P3 0.000000 +260 10 1 1 B-10 P0 0.000000 +261 10 1 1 B-10 P1 0.000000 +262 10 1 1 B-10 P2 0.000000 +263 10 1 1 B-10 P3 0.000000 +264 10 1 1 B-11 P0 0.000000 +265 10 1 1 B-11 P1 0.000000 +266 10 1 1 B-11 P2 0.000000 +267 10 1 1 B-11 P3 0.000000 +268 10 1 1 Fe-54 P0 0.000000 +269 10 1 1 Fe-54 P1 0.000000 +270 10 1 1 Fe-54 P2 0.000000 +271 10 1 1 Fe-54 P3 0.000000 +272 10 1 1 Fe-56 P0 0.000000 +273 10 1 1 Fe-56 P1 0.000000 +274 10 1 1 Fe-56 P2 0.000000 +275 10 1 1 Fe-56 P3 0.000000 +276 10 1 1 Fe-57 P0 0.000000 +277 10 1 1 Fe-57 P1 0.000000 +278 10 1 1 Fe-57 P2 0.000000 +279 10 1 1 Fe-57 P3 0.000000 +280 10 1 1 Fe-58 P0 0.000000 +281 10 1 1 Fe-58 P1 0.000000 +282 10 1 1 Fe-58 P2 0.000000 +283 10 1 1 Fe-58 P3 0.000000 +284 10 1 1 Ni-58 P0 0.000000 +285 10 1 1 Ni-58 P1 0.000000 +286 10 1 1 Ni-58 P2 0.000000 +287 10 1 1 Ni-58 P3 0.000000 +288 10 1 1 Ni-60 P0 0.000000 +289 10 1 1 Ni-60 P1 0.000000 +290 10 1 1 Ni-60 P2 0.000000 +291 10 1 1 Ni-60 P3 0.000000 +292 10 1 1 Ni-61 P0 0.000000 +293 10 1 1 Ni-61 P1 0.000000 +294 10 1 1 Ni-61 P2 0.000000 +295 10 1 1 Ni-61 P3 0.000000 +296 10 1 1 Ni-62 P0 0.000000 +297 10 1 1 Ni-62 P1 0.000000 +298 10 1 1 Ni-62 P2 0.000000 +299 10 1 1 Ni-62 P3 0.000000 +300 10 1 1 Ni-64 P0 0.000000 +301 10 1 1 Ni-64 P1 0.000000 +302 10 1 1 Ni-64 P2 0.000000 +303 10 1 1 Ni-64 P3 0.000000 +304 10 1 1 Mn-55 P0 0.000000 +305 10 1 1 Mn-55 P1 0.000000 +306 10 1 1 Mn-55 P2 0.000000 +307 10 1 1 Mn-55 P3 0.000000 +308 10 1 1 Si-28 P0 0.000000 +309 10 1 1 Si-28 P1 0.000000 +310 10 1 1 Si-28 P2 0.000000 +311 10 1 1 Si-28 P3 0.000000 +312 10 1 1 Si-29 P0 0.000000 +313 10 1 1 Si-29 P1 0.000000 +314 10 1 1 Si-29 P2 0.000000 +315 10 1 1 Si-29 P3 0.000000 +316 10 1 1 Si-30 P0 0.000000 +317 10 1 1 Si-30 P1 0.000000 +318 10 1 1 Si-30 P2 0.000000 +319 10 1 1 Si-30 P3 0.000000 +320 10 1 1 Cr-50 P0 0.071573 +321 10 1 1 Cr-50 P1 -0.039998 +322 10 1 1 Cr-50 P2 -0.002257 +323 10 1 1 Cr-50 P3 0.028768 +324 10 1 1 Cr-52 P0 0.000000 +325 10 1 1 Cr-52 P1 0.000000 +326 10 1 1 Cr-52 P2 0.000000 +327 10 1 1 Cr-52 P3 0.000000 +328 10 1 1 Cr-53 P0 0.000000 +329 10 1 1 Cr-53 P1 0.000000 +330 10 1 1 Cr-53 P2 0.000000 +331 10 1 1 Cr-53 P3 0.000000 +332 10 1 1 Cr-54 P0 0.000000 +333 10 1 1 Cr-54 P1 0.000000 +334 10 1 1 Cr-54 P2 0.000000 +335 10 1 1 Cr-54 P3 0.000000 +168 10 1 2 H-1 P0 0.000000 +169 10 1 2 H-1 P1 0.000000 +170 10 1 2 H-1 P2 0.000000 +171 10 1 2 H-1 P3 0.000000 +172 10 1 2 O-16 P0 0.000000 +173 10 1 2 O-16 P1 0.000000 +174 10 1 2 O-16 P2 0.000000 +175 10 1 2 O-16 P3 0.000000 +176 10 1 2 B-10 P0 0.000000 +177 10 1 2 B-10 P1 0.000000 +178 10 1 2 B-10 P2 0.000000 +179 10 1 2 B-10 P3 0.000000 +180 10 1 2 B-11 P0 0.000000 +181 10 1 2 B-11 P1 0.000000 +182 10 1 2 B-11 P2 0.000000 +183 10 1 2 B-11 P3 0.000000 +184 10 1 2 Fe-54 P0 0.000000 +185 10 1 2 Fe-54 P1 0.000000 +186 10 1 2 Fe-54 P2 0.000000 +187 10 1 2 Fe-54 P3 0.000000 +188 10 1 2 Fe-56 P0 0.000000 +189 10 1 2 Fe-56 P1 0.000000 +190 10 1 2 Fe-56 P2 0.000000 +191 10 1 2 Fe-56 P3 0.000000 +192 10 1 2 Fe-57 P0 0.000000 +193 10 1 2 Fe-57 P1 0.000000 +194 10 1 2 Fe-57 P2 0.000000 +195 10 1 2 Fe-57 P3 0.000000 +196 10 1 2 Fe-58 P0 0.000000 +197 10 1 2 Fe-58 P1 0.000000 +198 10 1 2 Fe-58 P2 0.000000 +199 10 1 2 Fe-58 P3 0.000000 +200 10 1 2 Ni-58 P0 0.000000 +201 10 1 2 Ni-58 P1 0.000000 +202 10 1 2 Ni-58 P2 0.000000 +203 10 1 2 Ni-58 P3 0.000000 +204 10 1 2 Ni-60 P0 0.000000 +205 10 1 2 Ni-60 P1 0.000000 +206 10 1 2 Ni-60 P2 0.000000 +207 10 1 2 Ni-60 P3 0.000000 +208 10 1 2 Ni-61 P0 0.000000 +209 10 1 2 Ni-61 P1 0.000000 +210 10 1 2 Ni-61 P2 0.000000 +211 10 1 2 Ni-61 P3 0.000000 +212 10 1 2 Ni-62 P0 0.000000 +213 10 1 2 Ni-62 P1 0.000000 +214 10 1 2 Ni-62 P2 0.000000 +215 10 1 2 Ni-62 P3 0.000000 +216 10 1 2 Ni-64 P0 0.000000 +217 10 1 2 Ni-64 P1 0.000000 +218 10 1 2 Ni-64 P2 0.000000 +219 10 1 2 Ni-64 P3 0.000000 +220 10 1 2 Mn-55 P0 0.000000 +221 10 1 2 Mn-55 P1 0.000000 +222 10 1 2 Mn-55 P2 0.000000 +223 10 1 2 Mn-55 P3 0.000000 +224 10 1 2 Si-28 P0 0.000000 +225 10 1 2 Si-28 P1 0.000000 +226 10 1 2 Si-28 P2 0.000000 +227 10 1 2 Si-28 P3 0.000000 +228 10 1 2 Si-29 P0 0.000000 +229 10 1 2 Si-29 P1 0.000000 +230 10 1 2 Si-29 P2 0.000000 +231 10 1 2 Si-29 P3 0.000000 +232 10 1 2 Si-30 P0 0.000000 +233 10 1 2 Si-30 P1 0.000000 +234 10 1 2 Si-30 P2 0.000000 +235 10 1 2 Si-30 P3 0.000000 +236 10 1 2 Cr-50 P0 0.000000 +237 10 1 2 Cr-50 P1 0.000000 +238 10 1 2 Cr-50 P2 0.000000 +239 10 1 2 Cr-50 P3 0.000000 +240 10 1 2 Cr-52 P0 0.000000 +241 10 1 2 Cr-52 P1 0.000000 +242 10 1 2 Cr-52 P2 0.000000 +243 10 1 2 Cr-52 P3 0.000000 +244 10 1 2 Cr-53 P0 0.000000 +245 10 1 2 Cr-53 P1 0.000000 +246 10 1 2 Cr-53 P2 0.000000 +247 10 1 2 Cr-53 P3 0.000000 +248 10 1 2 Cr-54 P0 0.000000 +249 10 1 2 Cr-54 P1 0.000000 +250 10 1 2 Cr-54 P2 0.000000 +251 10 1 2 Cr-54 P3 0.000000 +84 10 2 1 H-1 P0 0.000000 +85 10 2 1 H-1 P1 0.000000 +86 10 2 1 H-1 P2 0.000000 +87 10 2 1 H-1 P3 0.000000 +88 10 2 1 O-16 P0 0.000000 +89 10 2 1 O-16 P1 0.000000 +90 10 2 1 O-16 P2 0.000000 +91 10 2 1 O-16 P3 0.000000 +92 10 2 1 B-10 P0 0.000000 +93 10 2 1 B-10 P1 0.000000 +94 10 2 1 B-10 P2 0.000000 +95 10 2 1 B-10 P3 0.000000 +96 10 2 1 B-11 P0 0.000000 +97 10 2 1 B-11 P1 0.000000 +98 10 2 1 B-11 P2 0.000000 +99 10 2 1 B-11 P3 0.000000 +100 10 2 1 Fe-54 P0 0.000000 +101 10 2 1 Fe-54 P1 0.000000 +102 10 2 1 Fe-54 P2 0.000000 +103 10 2 1 Fe-54 P3 0.000000 +104 10 2 1 Fe-56 P0 0.000000 +105 10 2 1 Fe-56 P1 0.000000 +106 10 2 1 Fe-56 P2 0.000000 +107 10 2 1 Fe-56 P3 0.000000 +108 10 2 1 Fe-57 P0 0.000000 +109 10 2 1 Fe-57 P1 0.000000 +110 10 2 1 Fe-57 P2 0.000000 +111 10 2 1 Fe-57 P3 0.000000 +112 10 2 1 Fe-58 P0 0.000000 +113 10 2 1 Fe-58 P1 0.000000 +114 10 2 1 Fe-58 P2 0.000000 +115 10 2 1 Fe-58 P3 0.000000 +116 10 2 1 Ni-58 P0 0.000000 +117 10 2 1 Ni-58 P1 0.000000 +118 10 2 1 Ni-58 P2 0.000000 +119 10 2 1 Ni-58 P3 0.000000 +120 10 2 1 Ni-60 P0 0.000000 +121 10 2 1 Ni-60 P1 0.000000 +122 10 2 1 Ni-60 P2 0.000000 +123 10 2 1 Ni-60 P3 0.000000 +124 10 2 1 Ni-61 P0 0.000000 +125 10 2 1 Ni-61 P1 0.000000 +126 10 2 1 Ni-61 P2 0.000000 +127 10 2 1 Ni-61 P3 0.000000 +128 10 2 1 Ni-62 P0 0.000000 +129 10 2 1 Ni-62 P1 0.000000 +130 10 2 1 Ni-62 P2 0.000000 +131 10 2 1 Ni-62 P3 0.000000 +132 10 2 1 Ni-64 P0 0.000000 +133 10 2 1 Ni-64 P1 0.000000 +134 10 2 1 Ni-64 P2 0.000000 +135 10 2 1 Ni-64 P3 0.000000 +136 10 2 1 Mn-55 P0 0.000000 +137 10 2 1 Mn-55 P1 0.000000 +138 10 2 1 Mn-55 P2 0.000000 +139 10 2 1 Mn-55 P3 0.000000 +140 10 2 1 Si-28 P0 0.000000 +141 10 2 1 Si-28 P1 0.000000 +142 10 2 1 Si-28 P2 0.000000 +143 10 2 1 Si-28 P3 0.000000 +144 10 2 1 Si-29 P0 0.000000 +145 10 2 1 Si-29 P1 0.000000 +146 10 2 1 Si-29 P2 0.000000 +147 10 2 1 Si-29 P3 0.000000 +148 10 2 1 Si-30 P0 0.000000 +149 10 2 1 Si-30 P1 0.000000 +150 10 2 1 Si-30 P2 0.000000 +151 10 2 1 Si-30 P3 0.000000 +152 10 2 1 Cr-50 P0 0.000000 +153 10 2 1 Cr-50 P1 0.000000 +154 10 2 1 Cr-50 P2 0.000000 +155 10 2 1 Cr-50 P3 0.000000 +156 10 2 1 Cr-52 P0 0.000000 +157 10 2 1 Cr-52 P1 0.000000 +158 10 2 1 Cr-52 P2 0.000000 +159 10 2 1 Cr-52 P3 0.000000 +160 10 2 1 Cr-53 P0 0.000000 +161 10 2 1 Cr-53 P1 0.000000 +162 10 2 1 Cr-53 P2 0.000000 +163 10 2 1 Cr-53 P3 0.000000 +164 10 2 1 Cr-54 P0 0.000000 +165 10 2 1 Cr-54 P1 0.000000 +166 10 2 1 Cr-54 P2 0.000000 +167 10 2 1 Cr-54 P3 0.000000 +0 10 2 2 H-1 P0 0.000000 +1 10 2 2 H-1 P1 0.000000 +2 10 2 2 H-1 P2 0.000000 +3 10 2 2 H-1 P3 0.000000 +4 10 2 2 O-16 P0 0.000000 +5 10 2 2 O-16 P1 0.000000 +6 10 2 2 O-16 P2 0.000000 +7 10 2 2 O-16 P3 0.000000 +8 10 2 2 B-10 P0 0.000000 +9 10 2 2 B-10 P1 0.000000 +10 10 2 2 B-10 P2 0.000000 +11 10 2 2 B-10 P3 0.000000 +12 10 2 2 B-11 P0 0.000000 +13 10 2 2 B-11 P1 0.000000 +14 10 2 2 B-11 P2 0.000000 +15 10 2 2 B-11 P3 0.000000 +16 10 2 2 Fe-54 P0 0.000000 +17 10 2 2 Fe-54 P1 0.000000 +18 10 2 2 Fe-54 P2 0.000000 +19 10 2 2 Fe-54 P3 0.000000 +20 10 2 2 Fe-56 P0 0.000000 +21 10 2 2 Fe-56 P1 0.000000 +22 10 2 2 Fe-56 P2 0.000000 +23 10 2 2 Fe-56 P3 0.000000 +24 10 2 2 Fe-57 P0 0.000000 +25 10 2 2 Fe-57 P1 0.000000 +26 10 2 2 Fe-57 P2 0.000000 +27 10 2 2 Fe-57 P3 0.000000 +28 10 2 2 Fe-58 P0 0.000000 +29 10 2 2 Fe-58 P1 0.000000 +30 10 2 2 Fe-58 P2 0.000000 +31 10 2 2 Fe-58 P3 0.000000 +32 10 2 2 Ni-58 P0 0.000000 +33 10 2 2 Ni-58 P1 0.000000 +34 10 2 2 Ni-58 P2 0.000000 +35 10 2 2 Ni-58 P3 0.000000 +36 10 2 2 Ni-60 P0 0.000000 +37 10 2 2 Ni-60 P1 0.000000 +38 10 2 2 Ni-60 P2 0.000000 +39 10 2 2 Ni-60 P3 0.000000 +40 10 2 2 Ni-61 P0 0.000000 +41 10 2 2 Ni-61 P1 0.000000 +42 10 2 2 Ni-61 P2 0.000000 +43 10 2 2 Ni-61 P3 0.000000 +44 10 2 2 Ni-62 P0 0.000000 +45 10 2 2 Ni-62 P1 0.000000 +46 10 2 2 Ni-62 P2 0.000000 +47 10 2 2 Ni-62 P3 0.000000 +48 10 2 2 Ni-64 P0 0.000000 +49 10 2 2 Ni-64 P1 0.000000 +50 10 2 2 Ni-64 P2 0.000000 +51 10 2 2 Ni-64 P3 0.000000 +52 10 2 2 Mn-55 P0 0.000000 +53 10 2 2 Mn-55 P1 0.000000 +54 10 2 2 Mn-55 P2 0.000000 +55 10 2 2 Mn-55 P3 0.000000 +56 10 2 2 Si-28 P0 0.000000 +57 10 2 2 Si-28 P1 0.000000 +58 10 2 2 Si-28 P2 0.000000 +59 10 2 2 Si-28 P3 0.000000 +60 10 2 2 Si-29 P0 0.000000 +61 10 2 2 Si-29 P1 0.000000 +62 10 2 2 Si-29 P2 0.000000 +63 10 2 2 Si-29 P3 0.000000 +64 10 2 2 Si-30 P0 0.000000 +65 10 2 2 Si-30 P1 0.000000 +66 10 2 2 Si-30 P2 0.000000 +67 10 2 2 Si-30 P3 0.000000 +68 10 2 2 Cr-50 P0 0.000000 +69 10 2 2 Cr-50 P1 0.000000 +70 10 2 2 Cr-50 P2 0.000000 +71 10 2 2 Cr-50 P3 0.000000 +72 10 2 2 Cr-52 P0 0.000000 +73 10 2 2 Cr-52 P1 0.000000 +74 10 2 2 Cr-52 P2 0.000000 +75 10 2 2 Cr-52 P3 0.000000 +76 10 2 2 Cr-53 P0 0.000000 +77 10 2 2 Cr-53 P1 0.000000 +78 10 2 2 Cr-53 P2 0.000000 +79 10 2 2 Cr-53 P3 0.000000 +80 10 2 2 Cr-54 P0 0.000000 +81 10 2 2 Cr-54 P1 0.000000 +82 10 2 2 Cr-54 P2 0.000000 +83 10 2 2 Cr-54 P3 0.000000 material group out nuclide mean std. dev. +21 10 1 H-1 0 0 +22 10 1 O-16 0 0 +23 10 1 B-10 0 0 +24 10 1 B-11 0 0 +25 10 1 Fe-54 0 0 +26 10 1 Fe-56 0 0 +27 10 1 Fe-57 0 0 +28 10 1 Fe-58 0 0 +29 10 1 Ni-58 0 0 +30 10 1 Ni-60 0 0 +31 10 1 Ni-61 0 0 +32 10 1 Ni-62 0 0 +33 10 1 Ni-64 0 0 +34 10 1 Mn-55 0 0 +35 10 1 Si-28 0 0 +36 10 1 Si-29 0 0 +37 10 1 Si-30 0 0 +38 10 1 Cr-50 0 0 +39 10 1 Cr-52 0 0 +40 10 1 Cr-53 0 0 +41 10 1 Cr-54 0 0 +0 10 2 H-1 0 0 +1 10 2 O-16 0 0 +2 10 2 B-10 0 0 +3 10 2 B-11 0 0 +4 10 2 Fe-54 0 0 +5 10 2 Fe-56 0 0 +6 10 2 Fe-57 0 0 +7 10 2 Fe-58 0 0 +8 10 2 Ni-58 0 0 +9 10 2 Ni-60 0 0 +10 10 2 Ni-61 0 0 +11 10 2 Ni-62 0 0 +12 10 2 Ni-64 0 0 +13 10 2 Mn-55 0 0 +14 10 2 Si-28 0 0 +15 10 2 Si-29 0 0 +16 10 2 Si-30 0 0 +17 10 2 Cr-50 0 0 +18 10 2 Cr-52 0 0 +19 10 2 Cr-53 0 0 +20 10 2 Cr-54 0 0 material group in nuclide mean std. dev. 9 11 1 H-1 0.131470 0.476035 10 11 1 O-16 0.028684 0.043000 11 11 1 B-10 0.000000 0.000000 @@ -1807,78 +3955,186 @@ 6 11 2 Zr-92 0.084226 0.103161 7 11 2 Zr-94 0.092039 0.125985 8 11 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -9 11 1 H-1 0.0 0.0 -10 11 1 O-16 0.0 0.0 -11 11 1 B-10 0.0 0.0 -12 11 1 B-11 0.0 0.0 -13 11 1 Zr-90 0.0 0.0 -14 11 1 Zr-91 0.0 0.0 -15 11 1 Zr-92 0.0 0.0 -16 11 1 Zr-94 0.0 0.0 -17 11 1 Zr-96 0.0 0.0 -0 11 2 H-1 0.0 0.0 -1 11 2 O-16 0.0 0.0 -2 11 2 B-10 0.0 0.0 -3 11 2 B-11 0.0 0.0 -4 11 2 Zr-90 0.0 0.0 -5 11 2 Zr-91 0.0 0.0 -6 11 2 Zr-92 0.0 0.0 -7 11 2 Zr-94 0.0 0.0 -8 11 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. -27 11 1 1 H-1 0.099594 0.442578 -28 11 1 1 O-16 0.028684 0.043000 -29 11 1 1 B-10 0.000000 0.000000 -30 11 1 1 B-11 0.000000 0.000000 -31 11 1 1 Zr-90 0.021980 0.039963 -32 11 1 1 Zr-91 0.000000 0.000000 -33 11 1 1 Zr-92 0.000000 0.000000 -34 11 1 1 Zr-94 0.004191 0.087344 -35 11 1 1 Zr-96 0.000000 0.000000 -18 11 1 2 H-1 0.031875 0.045078 -19 11 1 2 O-16 0.000000 0.000000 -20 11 1 2 B-10 0.000000 0.000000 -21 11 1 2 B-11 0.000000 0.000000 -22 11 1 2 Zr-90 0.000000 0.000000 -23 11 1 2 Zr-91 0.000000 0.000000 -24 11 1 2 Zr-92 0.000000 0.000000 -25 11 1 2 Zr-94 0.000000 0.000000 -26 11 1 2 Zr-96 0.000000 0.000000 -9 11 2 1 H-1 0.000000 0.000000 -10 11 2 1 O-16 0.000000 0.000000 -11 11 2 1 B-10 0.000000 0.000000 -12 11 2 1 B-11 0.000000 0.000000 -13 11 2 1 Zr-90 0.000000 0.000000 -14 11 2 1 Zr-91 0.000000 0.000000 -15 11 2 1 Zr-92 0.000000 0.000000 -16 11 2 1 Zr-94 0.000000 0.000000 -17 11 2 1 Zr-96 0.000000 0.000000 -0 11 2 2 H-1 0.687243 1.239217 -1 11 2 2 O-16 0.000000 0.000000 -2 11 2 2 B-10 0.000000 0.000000 -3 11 2 2 B-11 0.000000 0.000000 -4 11 2 2 Zr-90 0.039576 0.105193 -5 11 2 2 Zr-91 0.000000 0.000000 -6 11 2 2 Zr-92 0.084226 0.103161 -7 11 2 2 Zr-94 0.092039 0.125985 -8 11 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. -9 11 1 H-1 0.0 0.0 -10 11 1 O-16 0.0 0.0 -11 11 1 B-10 0.0 0.0 -12 11 1 B-11 0.0 0.0 -13 11 1 Zr-90 0.0 0.0 -14 11 1 Zr-91 0.0 0.0 -15 11 1 Zr-92 0.0 0.0 -16 11 1 Zr-94 0.0 0.0 -17 11 1 Zr-96 0.0 0.0 -0 11 2 H-1 0.0 0.0 -1 11 2 O-16 0.0 0.0 -2 11 2 B-10 0.0 0.0 -3 11 2 B-11 0.0 0.0 -4 11 2 Zr-90 0.0 0.0 -5 11 2 Zr-91 0.0 0.0 -6 11 2 Zr-92 0.0 0.0 -7 11 2 Zr-94 0.0 0.0 -8 11 2 Zr-96 0.0 0.0 material group in nuclide mean std. dev. +9 11 1 H-1 0 0 +10 11 1 O-16 0 0 +11 11 1 B-10 0 0 +12 11 1 B-11 0 0 +13 11 1 Zr-90 0 0 +14 11 1 Zr-91 0 0 +15 11 1 Zr-92 0 0 +16 11 1 Zr-94 0 0 +17 11 1 Zr-96 0 0 +0 11 2 H-1 0 0 +1 11 2 O-16 0 0 +2 11 2 B-10 0 0 +3 11 2 B-11 0 0 +4 11 2 Zr-90 0 0 +5 11 2 Zr-91 0 0 +6 11 2 Zr-92 0 0 +7 11 2 Zr-94 0 0 +8 11 2 Zr-96 0 0 material group in group out nuclide moment mean +108 11 1 1 H-1 P0 0.350627 +109 11 1 1 H-1 P1 0.251032 +110 11 1 1 H-1 P2 0.118434 +111 11 1 1 H-1 P3 0.029897 +112 11 1 1 O-16 P0 0.031875 +113 11 1 1 O-16 P1 0.003191 +114 11 1 1 O-16 P2 -0.015458 +115 11 1 1 O-16 P3 -0.004707 +116 11 1 1 B-10 P0 0.000000 +117 11 1 1 B-10 P1 0.000000 +118 11 1 1 B-10 P2 0.000000 +119 11 1 1 B-10 P3 0.000000 +120 11 1 1 B-11 P0 0.000000 +121 11 1 1 B-11 P1 0.000000 +122 11 1 1 B-11 P2 0.000000 +123 11 1 1 B-11 P3 0.000000 +124 11 1 1 Zr-90 P0 0.031875 +125 11 1 1 Zr-90 P1 0.009895 +126 11 1 1 Zr-90 P2 -0.011330 +127 11 1 1 Zr-90 P3 -0.012459 +128 11 1 1 Zr-91 P0 0.000000 +129 11 1 1 Zr-91 P1 0.000000 +130 11 1 1 Zr-91 P2 0.000000 +131 11 1 1 Zr-91 P3 0.000000 +132 11 1 1 Zr-92 P0 0.000000 +133 11 1 1 Zr-92 P1 0.000000 +134 11 1 1 Zr-92 P2 0.000000 +135 11 1 1 Zr-92 P3 0.000000 +136 11 1 1 Zr-94 P0 0.063750 +137 11 1 1 Zr-94 P1 0.059559 +138 11 1 1 Zr-94 P2 0.051729 +139 11 1 1 Zr-94 P3 0.041273 +140 11 1 1 Zr-96 P0 0.000000 +141 11 1 1 Zr-96 P1 0.000000 +142 11 1 1 Zr-96 P2 0.000000 +143 11 1 1 Zr-96 P3 0.000000 +72 11 1 2 H-1 P0 0.031875 +73 11 1 2 H-1 P1 0.008585 +74 11 1 2 H-1 P2 -0.012470 +75 11 1 2 H-1 P3 -0.011320 +76 11 1 2 O-16 P0 0.000000 +77 11 1 2 O-16 P1 0.000000 +78 11 1 2 O-16 P2 0.000000 +79 11 1 2 O-16 P3 0.000000 +80 11 1 2 B-10 P0 0.000000 +81 11 1 2 B-10 P1 0.000000 +82 11 1 2 B-10 P2 0.000000 +83 11 1 2 B-10 P3 0.000000 +84 11 1 2 B-11 P0 0.000000 +85 11 1 2 B-11 P1 0.000000 +86 11 1 2 B-11 P2 0.000000 +87 11 1 2 B-11 P3 0.000000 +88 11 1 2 Zr-90 P0 0.000000 +89 11 1 2 Zr-90 P1 0.000000 +90 11 1 2 Zr-90 P2 0.000000 +91 11 1 2 Zr-90 P3 0.000000 +92 11 1 2 Zr-91 P0 0.000000 +93 11 1 2 Zr-91 P1 0.000000 +94 11 1 2 Zr-91 P2 0.000000 +95 11 1 2 Zr-91 P3 0.000000 +96 11 1 2 Zr-92 P0 0.000000 +97 11 1 2 Zr-92 P1 0.000000 +98 11 1 2 Zr-92 P2 0.000000 +99 11 1 2 Zr-92 P3 0.000000 +100 11 1 2 Zr-94 P0 0.000000 +101 11 1 2 Zr-94 P1 0.000000 +102 11 1 2 Zr-94 P2 0.000000 +103 11 1 2 Zr-94 P3 0.000000 +104 11 1 2 Zr-96 P0 0.000000 +105 11 1 2 Zr-96 P1 0.000000 +106 11 1 2 Zr-96 P2 0.000000 +107 11 1 2 Zr-96 P3 0.000000 +36 11 2 1 H-1 P0 0.000000 +37 11 2 1 H-1 P1 0.000000 +38 11 2 1 H-1 P2 0.000000 +39 11 2 1 H-1 P3 0.000000 +40 11 2 1 O-16 P0 0.000000 +41 11 2 1 O-16 P1 0.000000 +42 11 2 1 O-16 P2 0.000000 +43 11 2 1 O-16 P3 0.000000 +44 11 2 1 B-10 P0 0.000000 +45 11 2 1 B-10 P1 0.000000 +46 11 2 1 B-10 P2 0.000000 +47 11 2 1 B-10 P3 0.000000 +48 11 2 1 B-11 P0 0.000000 +49 11 2 1 B-11 P1 0.000000 +50 11 2 1 B-11 P2 0.000000 +51 11 2 1 B-11 P3 0.000000 +52 11 2 1 Zr-90 P0 0.000000 +53 11 2 1 Zr-90 P1 0.000000 +54 11 2 1 Zr-90 P2 0.000000 +55 11 2 1 Zr-90 P3 0.000000 +56 11 2 1 Zr-91 P0 0.000000 +57 11 2 1 Zr-91 P1 0.000000 +58 11 2 1 Zr-91 P2 0.000000 +59 11 2 1 Zr-91 P3 0.000000 +60 11 2 1 Zr-92 P0 0.000000 +61 11 2 1 Zr-92 P1 0.000000 +62 11 2 1 Zr-92 P2 0.000000 +63 11 2 1 Zr-92 P3 0.000000 +64 11 2 1 Zr-94 P0 0.000000 +65 11 2 1 Zr-94 P1 0.000000 +66 11 2 1 Zr-94 P2 0.000000 +67 11 2 1 Zr-94 P3 0.000000 +68 11 2 1 Zr-96 P0 0.000000 +69 11 2 1 Zr-96 P1 0.000000 +70 11 2 1 Zr-96 P2 0.000000 +71 11 2 1 Zr-96 P3 0.000000 +0 11 2 2 H-1 P0 0.986741 +1 11 2 2 H-1 P1 0.287943 +2 11 2 2 H-1 P2 0.156802 +3 11 2 2 H-1 P3 0.037565 +4 11 2 2 O-16 P0 0.000000 +5 11 2 2 O-16 P1 0.000000 +6 11 2 2 O-16 P2 0.000000 +7 11 2 2 O-16 P3 0.000000 +8 11 2 2 B-10 P0 0.000000 +9 11 2 2 B-10 P1 0.000000 +10 11 2 2 B-10 P2 0.000000 +11 11 2 2 B-10 P3 0.000000 +12 11 2 2 B-11 P0 0.000000 +13 11 2 2 B-11 P1 0.000000 +14 11 2 2 B-11 P2 0.000000 +15 11 2 2 B-11 P3 0.000000 +16 11 2 2 Zr-90 P0 0.085804 +17 11 2 2 Zr-90 P1 0.046227 +18 11 2 2 Zr-90 P2 -0.005520 +19 11 2 2 Zr-90 P3 -0.035731 +20 11 2 2 Zr-91 P0 0.000000 +21 11 2 2 Zr-91 P1 0.000000 +22 11 2 2 Zr-91 P2 0.000000 +23 11 2 2 Zr-91 P3 0.000000 +24 11 2 2 Zr-92 P0 0.042902 +25 11 2 2 Zr-92 P1 -0.041324 +26 11 2 2 Zr-92 P2 0.038256 +27 11 2 2 Zr-92 P3 -0.033866 +28 11 2 2 Zr-94 P0 0.085804 +29 11 2 2 Zr-94 P1 -0.006235 +30 11 2 2 Zr-94 P2 0.028653 +31 11 2 2 Zr-94 P3 -0.016482 +32 11 2 2 Zr-96 P0 0.000000 +33 11 2 2 Zr-96 P1 0.000000 +34 11 2 2 Zr-96 P2 0.000000 +35 11 2 2 Zr-96 P3 0.000000 material group out nuclide mean std. dev. +9 11 1 H-1 0 0 +10 11 1 O-16 0 0 +11 11 1 B-10 0 0 +12 11 1 B-11 0 0 +13 11 1 Zr-90 0 0 +14 11 1 Zr-91 0 0 +15 11 1 Zr-92 0 0 +16 11 1 Zr-94 0 0 +17 11 1 Zr-96 0 0 +0 11 2 H-1 0 0 +1 11 2 O-16 0 0 +2 11 2 B-10 0 0 +3 11 2 B-11 0 0 +4 11 2 Zr-90 0 0 +5 11 2 Zr-91 0 0 +6 11 2 Zr-92 0 0 +7 11 2 Zr-94 0 0 +8 11 2 Zr-96 0 0 material group in nuclide mean std. dev. 9 12 1 H-1 0.098944 0.178543 10 12 1 O-16 0.013270 0.020403 11 12 1 B-10 0.000000 0.000000 @@ -1897,75 +4153,183 @@ 6 12 2 Zr-92 0.000000 0.000000 7 12 2 Zr-94 0.000000 0.000000 8 12 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -9 12 1 H-1 0.0 0.0 -10 12 1 O-16 0.0 0.0 -11 12 1 B-10 0.0 0.0 -12 12 1 B-11 0.0 0.0 -13 12 1 Zr-90 0.0 0.0 -14 12 1 Zr-91 0.0 0.0 -15 12 1 Zr-92 0.0 0.0 -16 12 1 Zr-94 0.0 0.0 -17 12 1 Zr-96 0.0 0.0 -0 12 2 H-1 0.0 0.0 -1 12 2 O-16 0.0 0.0 -2 12 2 B-10 0.0 0.0 -3 12 2 B-11 0.0 0.0 -4 12 2 Zr-90 0.0 0.0 -5 12 2 Zr-91 0.0 0.0 -6 12 2 Zr-92 0.0 0.0 -7 12 2 Zr-94 0.0 0.0 -8 12 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. -27 12 1 1 H-1 0.071704 0.167588 -28 12 1 1 O-16 0.013270 0.020403 -29 12 1 1 B-10 0.000000 0.000000 -30 12 1 1 B-11 0.000000 0.000000 -31 12 1 1 Zr-90 0.089997 0.075538 -32 12 1 1 Zr-91 0.000000 0.000000 -33 12 1 1 Zr-92 0.003501 0.017031 -34 12 1 1 Zr-94 0.004850 0.016327 -35 12 1 1 Zr-96 0.002730 0.017476 -18 12 1 2 H-1 0.027240 0.029555 -19 12 1 2 O-16 0.000000 0.000000 -20 12 1 2 B-10 0.000000 0.000000 -21 12 1 2 B-11 0.000000 0.000000 -22 12 1 2 Zr-90 0.000000 0.000000 -23 12 1 2 Zr-91 0.000000 0.000000 -24 12 1 2 Zr-92 0.000000 0.000000 -25 12 1 2 Zr-94 0.000000 0.000000 -26 12 1 2 Zr-96 0.000000 0.000000 -9 12 2 1 H-1 0.000000 0.000000 -10 12 2 1 O-16 0.000000 0.000000 -11 12 2 1 B-10 0.000000 0.000000 -12 12 2 1 B-11 0.000000 0.000000 -13 12 2 1 Zr-90 0.000000 0.000000 -14 12 2 1 Zr-91 0.000000 0.000000 -15 12 2 1 Zr-92 0.000000 0.000000 -16 12 2 1 Zr-94 0.000000 0.000000 -17 12 2 1 Zr-96 0.000000 0.000000 -0 12 2 2 H-1 1.244758 1.956675 -1 12 2 2 O-16 0.079159 0.104796 -2 12 2 2 B-10 0.000000 0.000000 -3 12 2 2 B-11 0.000000 0.000000 -4 12 2 2 Zr-90 0.000000 0.000000 -5 12 2 2 Zr-91 0.033201 0.040665 -6 12 2 2 Zr-92 0.000000 0.000000 -7 12 2 2 Zr-94 0.000000 0.000000 -8 12 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. -9 12 1 H-1 0.0 0.0 -10 12 1 O-16 0.0 0.0 -11 12 1 B-10 0.0 0.0 -12 12 1 B-11 0.0 0.0 -13 12 1 Zr-90 0.0 0.0 -14 12 1 Zr-91 0.0 0.0 -15 12 1 Zr-92 0.0 0.0 -16 12 1 Zr-94 0.0 0.0 -17 12 1 Zr-96 0.0 0.0 -0 12 2 H-1 0.0 0.0 -1 12 2 O-16 0.0 0.0 -2 12 2 B-10 0.0 0.0 -3 12 2 B-11 0.0 0.0 -4 12 2 Zr-90 0.0 0.0 -5 12 2 Zr-91 0.0 0.0 -6 12 2 Zr-92 0.0 0.0 -7 12 2 Zr-94 0.0 0.0 -8 12 2 Zr-96 0.0 0.0 \ No newline at end of file +9 12 1 H-1 0 0 +10 12 1 O-16 0 0 +11 12 1 B-10 0 0 +12 12 1 B-11 0 0 +13 12 1 Zr-90 0 0 +14 12 1 Zr-91 0 0 +15 12 1 Zr-92 0 0 +16 12 1 Zr-94 0 0 +17 12 1 Zr-96 0 0 +0 12 2 H-1 0 0 +1 12 2 O-16 0 0 +2 12 2 B-10 0 0 +3 12 2 B-11 0 0 +4 12 2 Zr-90 0 0 +5 12 2 Zr-91 0 0 +6 12 2 Zr-92 0 0 +7 12 2 Zr-94 0 0 +8 12 2 Zr-96 0 0 material group in group out nuclide moment mean +108 12 1 1 H-1 P0 0.245156 +109 12 1 1 H-1 P1 0.173452 +110 12 1 1 H-1 P2 0.092660 +111 12 1 1 H-1 P3 0.047419 +112 12 1 1 O-16 P0 0.027240 +113 12 1 1 O-16 P1 0.013970 +114 12 1 1 O-16 P2 0.000090 +115 12 1 1 O-16 P3 -0.004169 +116 12 1 1 B-10 P0 0.000000 +117 12 1 1 B-10 P1 0.000000 +118 12 1 1 B-10 P2 0.000000 +119 12 1 1 B-10 P3 0.000000 +120 12 1 1 B-11 P0 0.000000 +121 12 1 1 B-11 P1 0.000000 +122 12 1 1 B-11 P2 0.000000 +123 12 1 1 B-11 P3 0.000000 +124 12 1 1 Zr-90 P0 0.095339 +125 12 1 1 Zr-90 P1 0.005341 +126 12 1 1 Zr-90 P2 -0.014156 +127 12 1 1 Zr-90 P3 -0.008036 +128 12 1 1 Zr-91 P0 0.000000 +129 12 1 1 Zr-91 P1 0.000000 +130 12 1 1 Zr-91 P2 0.000000 +131 12 1 1 Zr-91 P3 0.000000 +132 12 1 1 Zr-92 P0 0.013620 +133 12 1 1 Zr-92 P1 0.010119 +134 12 1 1 Zr-92 P2 0.004467 +135 12 1 1 Zr-92 P3 -0.001214 +136 12 1 1 Zr-94 P0 0.013620 +137 12 1 1 Zr-94 P1 0.008770 +138 12 1 1 Zr-94 P2 0.001661 +139 12 1 1 Zr-94 P3 -0.004065 +140 12 1 1 Zr-96 P0 0.013620 +141 12 1 1 Zr-96 P1 0.010890 +142 12 1 1 Zr-96 P2 0.006250 +143 12 1 1 Zr-96 P3 0.001069 +72 12 1 2 H-1 P0 0.027240 +73 12 1 2 H-1 P1 -0.010088 +74 12 1 2 H-1 P2 -0.006946 +75 12 1 2 H-1 P3 0.009692 +76 12 1 2 O-16 P0 0.000000 +77 12 1 2 O-16 P1 0.000000 +78 12 1 2 O-16 P2 0.000000 +79 12 1 2 O-16 P3 0.000000 +80 12 1 2 B-10 P0 0.000000 +81 12 1 2 B-10 P1 0.000000 +82 12 1 2 B-10 P2 0.000000 +83 12 1 2 B-10 P3 0.000000 +84 12 1 2 B-11 P0 0.000000 +85 12 1 2 B-11 P1 0.000000 +86 12 1 2 B-11 P2 0.000000 +87 12 1 2 B-11 P3 0.000000 +88 12 1 2 Zr-90 P0 0.000000 +89 12 1 2 Zr-90 P1 0.000000 +90 12 1 2 Zr-90 P2 0.000000 +91 12 1 2 Zr-90 P3 0.000000 +92 12 1 2 Zr-91 P0 0.000000 +93 12 1 2 Zr-91 P1 0.000000 +94 12 1 2 Zr-91 P2 0.000000 +95 12 1 2 Zr-91 P3 0.000000 +96 12 1 2 Zr-92 P0 0.000000 +97 12 1 2 Zr-92 P1 0.000000 +98 12 1 2 Zr-92 P2 0.000000 +99 12 1 2 Zr-92 P3 0.000000 +100 12 1 2 Zr-94 P0 0.000000 +101 12 1 2 Zr-94 P1 0.000000 +102 12 1 2 Zr-94 P2 0.000000 +103 12 1 2 Zr-94 P3 0.000000 +104 12 1 2 Zr-96 P0 0.000000 +105 12 1 2 Zr-96 P1 0.000000 +106 12 1 2 Zr-96 P2 0.000000 +107 12 1 2 Zr-96 P3 0.000000 +36 12 2 1 H-1 P0 0.000000 +37 12 2 1 H-1 P1 0.000000 +38 12 2 1 H-1 P2 0.000000 +39 12 2 1 H-1 P3 0.000000 +40 12 2 1 O-16 P0 0.000000 +41 12 2 1 O-16 P1 0.000000 +42 12 2 1 O-16 P2 0.000000 +43 12 2 1 O-16 P3 0.000000 +44 12 2 1 B-10 P0 0.000000 +45 12 2 1 B-10 P1 0.000000 +46 12 2 1 B-10 P2 0.000000 +47 12 2 1 B-10 P3 0.000000 +48 12 2 1 B-11 P0 0.000000 +49 12 2 1 B-11 P1 0.000000 +50 12 2 1 B-11 P2 0.000000 +51 12 2 1 B-11 P3 0.000000 +52 12 2 1 Zr-90 P0 0.000000 +53 12 2 1 Zr-90 P1 0.000000 +54 12 2 1 Zr-90 P2 0.000000 +55 12 2 1 Zr-90 P3 0.000000 +56 12 2 1 Zr-91 P0 0.000000 +57 12 2 1 Zr-91 P1 0.000000 +58 12 2 1 Zr-91 P2 0.000000 +59 12 2 1 Zr-91 P3 0.000000 +60 12 2 1 Zr-92 P0 0.000000 +61 12 2 1 Zr-92 P1 0.000000 +62 12 2 1 Zr-92 P2 0.000000 +63 12 2 1 Zr-92 P3 0.000000 +64 12 2 1 Zr-94 P0 0.000000 +65 12 2 1 Zr-94 P1 0.000000 +66 12 2 1 Zr-94 P2 0.000000 +67 12 2 1 Zr-94 P3 0.000000 +68 12 2 1 Zr-96 P0 0.000000 +69 12 2 1 Zr-96 P1 0.000000 +70 12 2 1 Zr-96 P2 0.000000 +71 12 2 1 Zr-96 P3 0.000000 +0 12 2 2 H-1 P0 1.489686 +1 12 2 2 H-1 P1 0.257467 +2 12 2 2 H-1 P2 0.001678 +3 12 2 2 H-1 P3 0.044735 +4 12 2 2 O-16 P0 0.067713 +5 12 2 2 O-16 P1 -0.011446 +6 12 2 2 O-16 P2 -0.002500 +7 12 2 2 O-16 P3 0.007446 +8 12 2 2 B-10 P0 0.000000 +9 12 2 2 B-10 P1 0.000000 +10 12 2 2 B-10 P2 0.000000 +11 12 2 2 B-10 P3 0.000000 +12 12 2 2 B-11 P0 0.000000 +13 12 2 2 B-11 P1 0.000000 +14 12 2 2 B-11 P2 0.000000 +15 12 2 2 B-11 P3 0.000000 +16 12 2 2 Zr-90 P0 0.000000 +17 12 2 2 Zr-90 P1 0.000000 +18 12 2 2 Zr-90 P2 0.000000 +19 12 2 2 Zr-90 P3 0.000000 +20 12 2 2 Zr-91 P0 0.016928 +21 12 2 2 Zr-91 P1 -0.016273 +22 12 2 2 Zr-91 P2 0.015000 +23 12 2 2 Zr-91 P3 -0.013183 +24 12 2 2 Zr-92 P0 0.000000 +25 12 2 2 Zr-92 P1 0.000000 +26 12 2 2 Zr-92 P2 0.000000 +27 12 2 2 Zr-92 P3 0.000000 +28 12 2 2 Zr-94 P0 0.000000 +29 12 2 2 Zr-94 P1 0.000000 +30 12 2 2 Zr-94 P2 0.000000 +31 12 2 2 Zr-94 P3 0.000000 +32 12 2 2 Zr-96 P0 0.000000 +33 12 2 2 Zr-96 P1 0.000000 +34 12 2 2 Zr-96 P2 0.000000 +35 12 2 2 Zr-96 P3 0.000000 material group out nuclide mean std. dev. +9 12 1 H-1 0 0 +10 12 1 O-16 0 0 +11 12 1 B-10 0 0 +12 12 1 B-11 0 0 +13 12 1 Zr-90 0 0 +14 12 1 Zr-91 0 0 +15 12 1 Zr-92 0 0 +16 12 1 Zr-94 0 0 +17 12 1 Zr-96 0 0 +0 12 2 H-1 0 0 +1 12 2 O-16 0 0 +2 12 2 B-10 0 0 +3 12 2 B-11 0 0 +4 12 2 Zr-90 0 0 +5 12 2 Zr-91 0 0 +6 12 2 Zr-92 0 0 +7 12 2 Zr-94 0 0 +8 12 2 Zr-96 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py b/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py index 113f2aa413..e0a7c199a0 100644 --- a/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py +++ b/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py @@ -28,6 +28,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi'] self.mgxs_lib.energy_groups = energy_groups + self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'material' self.mgxs_lib.build_library() From 66b7979dfcad06293878ebf3398a553bb5ed5276 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Fri, 13 May 2016 17:27:03 -0400 Subject: [PATCH 538/650] Updated test results for MGXS --- openmc/mgxs/mgxs.py | 2 +- .../results_true.dat | 120 +- .../results_true.dat | 10 +- .../results_true.dat | 408 +- .../results_true.dat | 4336 +---------------- .../test_mgxs_library_nuclides.py | 2 +- 6 files changed, 272 insertions(+), 4606 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 1826912830..c1255f6094 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -2115,7 +2115,7 @@ class ScatterMatrixXS(MGXS): # Place the moment column before the mean column mean_index = df.columns.get_loc('mean') columns = df.columns.tolist() - df = df[columns[:mean_index] + ['moment'] + columns[mean_index:-2]] + df = df[columns[:mean_index] + ['moment'] + columns[mean_index:-1]] # Select rows corresponding to requested scattering moment if moment != 'all': diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index f176c30075..ffe6f29087 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -1,85 +1,85 @@ material group in nuclide mean std. dev. 0 1 1 total 0.412084 0.02359 material group in nuclide mean std. dev. -0 1 1 total 0.076425 0.003691 material group in group out nuclide moment mean -0 1 1 1 total P0 0.384780 -1 1 1 1 total P1 0.039277 -2 1 1 1 total P2 0.017574 -3 1 1 1 total P3 0.012203 material group out nuclide mean std. dev. +0 1 1 total 0.076425 0.003691 material group in group out nuclide moment mean std. dev. +0 1 1 1 total P0 0.384780 0.022253 +1 1 1 1 total P1 0.039277 0.004308 +2 1 1 1 total P2 0.017574 0.002402 +3 1 1 1 total P3 0.012203 0.002164 material group out nuclide mean std. dev. 0 1 1 total 1 0.055333 material group in nuclide mean std. dev. 0 2 1 total 0.241262 0.00841 material group in nuclide mean std. dev. -0 2 1 total 0 0 material group in group out nuclide moment mean -0 2 1 1 total P0 0.272369 -1 2 1 1 total P1 0.031107 -2 2 1 1 total P2 0.025999 -3 2 1 1 total P3 0.003219 material group out nuclide mean std. dev. +0 2 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 2 1 1 total P0 0.272369 0.006872 +1 2 1 1 total P1 0.031107 0.005483 +2 2 1 1 total P2 0.025999 0.006151 +3 2 1 1 total P3 0.003219 0.003312 material group out nuclide mean std. dev. 0 2 1 total 0 0 material group in nuclide mean std. dev. 0 3 1 total 0.400028 0.034667 material group in nuclide mean std. dev. -0 3 1 total 0 0 material group in group out nuclide moment mean -0 3 1 1 total P0 0.794999 -1 3 1 1 total P1 0.401537 -2 3 1 1 total P2 0.143623 -3 3 1 1 total P3 0.001991 material group out nuclide mean std. dev. +0 3 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 3 1 1 total P0 0.794999 0.036548 +1 3 1 1 total P1 0.401537 0.016175 +2 3 1 1 total P2 0.143623 0.008719 +3 3 1 1 total P3 0.001991 0.004433 material group out nuclide mean std. dev. 0 3 1 total 0 0 material group in nuclide mean std. dev. 0 4 1 total 0.377402 0.072937 material group in nuclide mean std. dev. -0 4 1 total 0 0 material group in group out nuclide moment mean -0 4 1 1 total P0 0.727311 -1 4 1 1 total P1 0.355839 -2 4 1 1 total P2 0.124483 -3 4 1 1 total P3 0.012168 material group out nuclide mean std. dev. +0 4 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 4 1 1 total P0 0.727311 0.080096 +1 4 1 1 total P1 0.355839 0.037901 +2 4 1 1 total P2 0.124483 0.015823 +3 4 1 1 total P3 0.012168 0.006224 material group out nuclide mean std. dev. 0 4 1 total 0 0 material group in nuclide mean std. dev. 0 5 1 total 0 0 material group in nuclide mean std. dev. -0 5 1 total 0 0 material group in group out nuclide moment mean -0 5 1 1 total P0 0 -1 5 1 1 total P1 0 -2 5 1 1 total P2 0 -3 5 1 1 total P3 0 material group out nuclide mean std. dev. +0 5 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 5 1 1 total P0 0 0 +1 5 1 1 total P1 0 0 +2 5 1 1 total P2 0 0 +3 5 1 1 total P3 0 0 material group out nuclide mean std. dev. 0 5 1 total 0 0 material group in nuclide mean std. dev. 0 6 1 total 0 0 material group in nuclide mean std. dev. -0 6 1 total 0 0 material group in group out nuclide moment mean -0 6 1 1 total P0 0 -1 6 1 1 total P1 0 -2 6 1 1 total P2 0 -3 6 1 1 total P3 0 material group out nuclide mean std. dev. +0 6 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 6 1 1 total P0 0 0 +1 6 1 1 total P1 0 0 +2 6 1 1 total P2 0 0 +3 6 1 1 total P3 0 0 material group out nuclide mean std. dev. 0 6 1 total 0 0 material group in nuclide mean std. dev. 0 7 1 total 0 0 material group in nuclide mean std. dev. -0 7 1 total 0 0 material group in group out nuclide moment mean -0 7 1 1 total P0 0 -1 7 1 1 total P1 0 -2 7 1 1 total P2 0 -3 7 1 1 total P3 0 material group out nuclide mean std. dev. +0 7 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 7 1 1 total P0 0 0 +1 7 1 1 total P1 0 0 +2 7 1 1 total P2 0 0 +3 7 1 1 total P3 0 0 material group out nuclide mean std. dev. 0 7 1 total 0 0 material group in nuclide mean std. dev. 0 8 1 total 0 0 material group in nuclide mean std. dev. -0 8 1 total 0 0 material group in group out nuclide moment mean -0 8 1 1 total P0 0 -1 8 1 1 total P1 0 -2 8 1 1 total P2 0 -3 8 1 1 total P3 0 material group out nuclide mean std. dev. +0 8 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 8 1 1 total P0 0 0 +1 8 1 1 total P1 0 0 +2 8 1 1 total P2 0 0 +3 8 1 1 total P3 0 0 material group out nuclide mean std. dev. 0 8 1 total 0 0 material group in nuclide mean std. dev. 0 9 1 total 0.600536 0.748875 material group in nuclide mean std. dev. -0 9 1 total 0 0 material group in group out nuclide moment mean -0 9 1 1 total P0 0.720380 -1 9 1 1 total P1 0.119844 -2 9 1 1 total P2 0.038522 -3 9 1 1 total P3 0.056023 material group out nuclide mean std. dev. +0 9 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 9 1 1 total P0 0.720380 0.771015 +1 9 1 1 total P1 0.119844 0.184691 +2 9 1 1 total P2 0.038522 0.064485 +3 9 1 1 total P3 0.056023 0.050595 material group out nuclide mean std. dev. 0 9 1 total 0 0 material group in nuclide mean std. dev. 0 10 1 total 0.235515 0.613974 material group in nuclide mean std. dev. -0 10 1 total 0 0 material group in group out nuclide moment mean -0 10 1 1 total P0 0.501009 -1 10 1 1 total P1 0.265494 -2 10 1 1 total P2 0.141979 -3 10 1 1 total P3 0.074258 material group out nuclide mean std. dev. +0 10 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 10 1 1 total P0 0.501009 0.708534 +1 10 1 1 total P1 0.265494 0.375465 +2 10 1 1 total P2 0.141979 0.200788 +3 10 1 1 total P3 0.074258 0.105017 material group out nuclide mean std. dev. 0 10 1 total 0 0 material group in nuclide mean std. dev. 0 11 1 total 0.510145 0.741941 material group in nuclide mean std. dev. -0 11 1 total 0 0 material group in group out nuclide moment mean -0 11 1 1 total P0 0.804661 -1 11 1 1 total P1 0.312803 -2 11 1 1 total P2 0.168113 -3 11 1 1 total P3 0.003808 material group out nuclide mean std. dev. +0 11 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 11 1 1 total P0 0.804661 0.817658 +1 11 1 1 total P1 0.312803 0.315315 +2 11 1 1 total P2 0.168113 0.172935 +3 11 1 1 total P3 0.003808 0.037911 material group out nuclide mean std. dev. 0 11 1 total 0 0 material group in nuclide mean std. dev. 0 12 1 total 0.73836 0.825631 material group in nuclide mean std. dev. -0 12 1 total 0 0 material group in group out nuclide moment mean -0 12 1 1 total P0 0.943429 -1 12 1 1 total P1 0.220164 -2 12 1 1 total P2 0.052884 -3 12 1 1 total P3 0.039939 material group out nuclide mean std. dev. +0 12 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 12 1 1 total P0 0.943429 0.856119 +1 12 1 1 total P1 0.220164 0.163180 +2 12 1 1 total P2 0.052884 0.042440 +3 12 1 1 total P3 0.039939 0.032867 material group out nuclide mean std. dev. 0 12 1 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index 318ec408a7..ba9eaa71e2 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,8 +1,8 @@ avg(distribcell) group in nuclide mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.718919 0.520644 avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 avg(distribcell) group in group out nuclide moment mean -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P0 1.142547 -1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P1 0.447381 -2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P2 0.141202 -3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P3 0.039228 avg(distribcell) group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 avg(distribcell) group in group out nuclide moment mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P0 1.142547 0.570131 +1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P1 0.447381 0.216322 +2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P2 0.141202 0.066504 +3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P3 0.039228 0.024621 avg(distribcell) group out nuclide mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index 9d6e358716..5e55a4c749 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -2,264 +2,264 @@ 1 1 1 total 0.372745 0.024269 0 1 2 total 0.861607 0.032349 material group in nuclide mean std. dev. 1 1 1 total 0.021789 0.001182 -0 1 2 total 0.714077 0.040552 material group in group out nuclide moment mean -12 1 1 1 total P0 0.381546 -13 1 1 1 total P1 0.044301 -14 1 1 1 total P2 0.020646 -15 1 1 1 total P3 0.013695 -8 1 1 2 total P0 0.001559 -9 1 1 2 total P1 -0.000597 -10 1 1 2 total P2 -0.000239 -11 1 1 2 total P3 0.000176 -4 1 2 1 total P0 0.000000 -5 1 2 1 total P1 0.000000 -6 1 2 1 total P2 0.000000 -7 1 2 1 total P3 0.000000 -0 1 2 2 total P0 0.403916 -1 1 2 2 total P1 -0.011310 -2 1 2 2 total P2 -0.014807 -3 1 2 2 total P3 -0.006855 material group out nuclide mean std. dev. +0 1 2 total 0.714077 0.040552 material group in group out nuclide moment mean std. dev. +12 1 1 1 total P0 0.381546 0.024033 +13 1 1 1 total P1 0.044301 0.004722 +14 1 1 1 total P2 0.020646 0.002539 +15 1 1 1 total P3 0.013695 0.002224 +8 1 1 2 total P0 0.001559 0.000510 +9 1 1 2 total P1 -0.000597 0.000225 +10 1 1 2 total P2 -0.000239 0.000222 +11 1 1 2 total P3 0.000176 0.000209 +4 1 2 1 total P0 0.000000 0.000000 +5 1 2 1 total P1 0.000000 0.000000 +6 1 2 1 total P2 0.000000 0.000000 +7 1 2 1 total P3 0.000000 0.000000 +0 1 2 2 total P0 0.403916 0.018966 +1 1 2 2 total P1 -0.011310 0.007839 +2 1 2 2 total P2 -0.014807 0.008629 +3 1 2 2 total P3 -0.006855 0.009047 material group out nuclide mean std. dev. 1 1 1 total 1 0.055333 0 1 2 total 0 0.000000 material group in nuclide mean std. dev. 1 2 1 total 0.237254 0.008184 0 2 2 total 0.285930 0.048796 material group in nuclide mean std. dev. 1 2 1 total 0 0 -0 2 2 total 0 0 material group in group out nuclide moment mean -12 2 1 1 total P0 0.273115 -13 2 1 1 total P1 0.035861 -14 2 1 1 total P2 0.029704 -15 2 1 1 total P3 0.002249 -8 2 1 2 total P0 0.000000 -9 2 1 2 total P1 0.000000 -10 2 1 2 total P2 0.000000 -11 2 1 2 total P3 0.000000 -4 2 2 1 total P0 0.000000 -5 2 2 1 total P1 0.000000 -6 2 2 1 total P2 0.000000 -7 2 2 1 total P3 0.000000 -0 2 2 2 total P0 0.264051 -1 2 2 2 total P1 -0.021880 -2 2 2 2 total P2 -0.015295 -3 2 2 2 total P3 0.014034 material group out nuclide mean std. dev. +0 2 2 total 0 0 material group in group out nuclide moment mean std. dev. +12 2 1 1 total P0 0.273115 0.006253 +13 2 1 1 total P1 0.035861 0.005878 +14 2 1 1 total P2 0.029704 0.006640 +15 2 1 1 total P3 0.002249 0.003376 +8 2 1 2 total P0 0.000000 0.000000 +9 2 1 2 total P1 0.000000 0.000000 +10 2 1 2 total P2 0.000000 0.000000 +11 2 1 2 total P3 0.000000 0.000000 +4 2 2 1 total P0 0.000000 0.000000 +5 2 2 1 total P1 0.000000 0.000000 +6 2 2 1 total P2 0.000000 0.000000 +7 2 2 1 total P3 0.000000 0.000000 +0 2 2 2 total P0 0.264051 0.045397 +1 2 2 2 total P1 -0.021880 0.012218 +2 2 2 2 total P2 -0.015295 0.010276 +3 2 2 2 total P3 0.014034 0.014318 material group out nuclide mean std. dev. 1 2 1 total 0 0 0 2 2 total 0 0 material group in nuclide mean std. dev. 1 3 1 total 0.286906 0.027401 0 3 2 total 1.418151 0.265308 material group in nuclide mean std. dev. 1 3 1 total 0 0 -0 3 2 total 0 0 material group in group out nuclide moment mean -12 3 1 1 total P0 0.643346 -13 3 1 1 total P1 0.383409 -14 3 1 1 total P2 0.152185 -15 3 1 1 total P3 0.003037 -8 3 1 2 total P0 0.026187 -9 3 1 2 total P1 0.007362 -10 3 1 2 total P2 -0.002738 -11 3 1 2 total P3 -0.002720 -4 3 2 1 total P0 0.000000 -5 3 2 1 total P1 0.000000 -6 3 2 1 total P2 0.000000 -7 3 2 1 total P3 0.000000 -0 3 2 2 total P0 1.924214 -1 3 2 2 total P1 0.498431 -2 3 2 2 total P2 0.091205 -3 3 2 2 total P3 0.017054 material group out nuclide mean std. dev. +0 3 2 total 0 0 material group in group out nuclide moment mean std. dev. +12 3 1 1 total P0 0.643346 0.028376 +13 3 1 1 total P1 0.383409 0.016447 +14 3 1 1 total P2 0.152185 0.009574 +15 3 1 1 total P3 0.003037 0.004648 +8 3 1 2 total P0 0.026187 0.001665 +9 3 1 2 total P1 0.007362 0.000934 +10 3 1 2 total P2 -0.002738 0.000756 +11 3 1 2 total P3 -0.002720 0.000558 +4 3 2 1 total P0 0.000000 0.000000 +5 3 2 1 total P1 0.000000 0.000000 +6 3 2 1 total P2 0.000000 0.000000 +7 3 2 1 total P3 0.000000 0.000000 +0 3 2 2 total P0 1.924214 0.284062 +1 3 2 2 total P1 0.498431 0.063421 +2 3 2 2 total P2 0.091205 0.013726 +3 3 2 2 total P3 0.017054 0.013916 material group out nuclide mean std. dev. 1 3 1 total 0 0 0 3 2 total 0 0 material group in nuclide mean std. dev. 1 4 1 total 0.242447 0.061031 0 4 2 total 1.253959 0.388363 material group in nuclide mean std. dev. 1 4 1 total 0 0 -0 4 2 total 0 0 material group in group out nuclide moment mean -12 4 1 1 total P0 0.543941 -13 4 1 1 total P1 0.326011 -14 4 1 1 total P2 0.131133 -15 4 1 1 total P3 0.012105 -8 4 1 2 total P0 0.023662 -9 4 1 2 total P1 0.007526 -10 4 1 2 total P2 -0.002730 -11 4 1 2 total P3 -0.003140 -4 4 2 1 total P0 0.000000 -5 4 2 1 total P1 0.000000 -6 4 2 1 total P2 0.000000 -7 4 2 1 total P3 0.000000 -0 4 2 2 total P0 1.764648 -1 4 2 2 total P1 0.500695 -2 4 2 2 total P2 0.099026 -3 4 2 2 total P3 0.032975 material group out nuclide mean std. dev. +0 4 2 total 0 0 material group in group out nuclide moment mean std. dev. +12 4 1 1 total P0 0.543941 0.065427 +13 4 1 1 total P1 0.326011 0.038602 +14 4 1 1 total P2 0.131133 0.017475 +15 4 1 1 total P3 0.012105 0.006073 +8 4 1 2 total P0 0.023662 0.003083 +9 4 1 2 total P1 0.007526 0.001301 +10 4 1 2 total P2 -0.002730 0.000841 +11 4 1 2 total P3 -0.003140 0.000578 +4 4 2 1 total P0 0.000000 0.000000 +5 4 2 1 total P1 0.000000 0.000000 +6 4 2 1 total P2 0.000000 0.000000 +7 4 2 1 total P3 0.000000 0.000000 +0 4 2 2 total P0 1.764648 0.416210 +1 4 2 2 total P1 0.500695 0.122178 +2 4 2 2 total P2 0.099026 0.038719 +3 4 2 2 total P3 0.032975 0.025103 material group out nuclide mean std. dev. 1 4 1 total 0 0 0 4 2 total 0 0 material group in nuclide mean std. dev. 1 5 1 total 0 0 0 5 2 total 0 0 material group in nuclide mean std. dev. 1 5 1 total 0 0 -0 5 2 total 0 0 material group in group out nuclide moment mean -12 5 1 1 total P0 0 -13 5 1 1 total P1 0 -14 5 1 1 total P2 0 -15 5 1 1 total P3 0 -8 5 1 2 total P0 0 -9 5 1 2 total P1 0 -10 5 1 2 total P2 0 -11 5 1 2 total P3 0 -4 5 2 1 total P0 0 -5 5 2 1 total P1 0 -6 5 2 1 total P2 0 -7 5 2 1 total P3 0 -0 5 2 2 total P0 0 -1 5 2 2 total P1 0 -2 5 2 2 total P2 0 -3 5 2 2 total P3 0 material group out nuclide mean std. dev. +0 5 2 total 0 0 material group in group out nuclide moment mean std. dev. +12 5 1 1 total P0 0 0 +13 5 1 1 total P1 0 0 +14 5 1 1 total P2 0 0 +15 5 1 1 total P3 0 0 +8 5 1 2 total P0 0 0 +9 5 1 2 total P1 0 0 +10 5 1 2 total P2 0 0 +11 5 1 2 total P3 0 0 +4 5 2 1 total P0 0 0 +5 5 2 1 total P1 0 0 +6 5 2 1 total P2 0 0 +7 5 2 1 total P3 0 0 +0 5 2 2 total P0 0 0 +1 5 2 2 total P1 0 0 +2 5 2 2 total P2 0 0 +3 5 2 2 total P3 0 0 material group out nuclide mean std. dev. 1 5 1 total 0 0 0 5 2 total 0 0 material group in nuclide mean std. dev. 1 6 1 total 0 0 0 6 2 total 0 0 material group in nuclide mean std. dev. 1 6 1 total 0 0 -0 6 2 total 0 0 material group in group out nuclide moment mean -12 6 1 1 total P0 0 -13 6 1 1 total P1 0 -14 6 1 1 total P2 0 -15 6 1 1 total P3 0 -8 6 1 2 total P0 0 -9 6 1 2 total P1 0 -10 6 1 2 total P2 0 -11 6 1 2 total P3 0 -4 6 2 1 total P0 0 -5 6 2 1 total P1 0 -6 6 2 1 total P2 0 -7 6 2 1 total P3 0 -0 6 2 2 total P0 0 -1 6 2 2 total P1 0 -2 6 2 2 total P2 0 -3 6 2 2 total P3 0 material group out nuclide mean std. dev. +0 6 2 total 0 0 material group in group out nuclide moment mean std. dev. +12 6 1 1 total P0 0 0 +13 6 1 1 total P1 0 0 +14 6 1 1 total P2 0 0 +15 6 1 1 total P3 0 0 +8 6 1 2 total P0 0 0 +9 6 1 2 total P1 0 0 +10 6 1 2 total P2 0 0 +11 6 1 2 total P3 0 0 +4 6 2 1 total P0 0 0 +5 6 2 1 total P1 0 0 +6 6 2 1 total P2 0 0 +7 6 2 1 total P3 0 0 +0 6 2 2 total P0 0 0 +1 6 2 2 total P1 0 0 +2 6 2 2 total P2 0 0 +3 6 2 2 total P3 0 0 material group out nuclide mean std. dev. 1 6 1 total 0 0 0 6 2 total 0 0 material group in nuclide mean std. dev. 1 7 1 total 0 0 0 7 2 total 0 0 material group in nuclide mean std. dev. 1 7 1 total 0 0 -0 7 2 total 0 0 material group in group out nuclide moment mean -12 7 1 1 total P0 0 -13 7 1 1 total P1 0 -14 7 1 1 total P2 0 -15 7 1 1 total P3 0 -8 7 1 2 total P0 0 -9 7 1 2 total P1 0 -10 7 1 2 total P2 0 -11 7 1 2 total P3 0 -4 7 2 1 total P0 0 -5 7 2 1 total P1 0 -6 7 2 1 total P2 0 -7 7 2 1 total P3 0 -0 7 2 2 total P0 0 -1 7 2 2 total P1 0 -2 7 2 2 total P2 0 -3 7 2 2 total P3 0 material group out nuclide mean std. dev. +0 7 2 total 0 0 material group in group out nuclide moment mean std. dev. +12 7 1 1 total P0 0 0 +13 7 1 1 total P1 0 0 +14 7 1 1 total P2 0 0 +15 7 1 1 total P3 0 0 +8 7 1 2 total P0 0 0 +9 7 1 2 total P1 0 0 +10 7 1 2 total P2 0 0 +11 7 1 2 total P3 0 0 +4 7 2 1 total P0 0 0 +5 7 2 1 total P1 0 0 +6 7 2 1 total P2 0 0 +7 7 2 1 total P3 0 0 +0 7 2 2 total P0 0 0 +1 7 2 2 total P1 0 0 +2 7 2 2 total P2 0 0 +3 7 2 2 total P3 0 0 material group out nuclide mean std. dev. 1 7 1 total 0 0 0 7 2 total 0 0 material group in nuclide mean std. dev. 1 8 1 total 0 0 0 8 2 total 0 0 material group in nuclide mean std. dev. 1 8 1 total 0 0 -0 8 2 total 0 0 material group in group out nuclide moment mean -12 8 1 1 total P0 0 -13 8 1 1 total P1 0 -14 8 1 1 total P2 0 -15 8 1 1 total P3 0 -8 8 1 2 total P0 0 -9 8 1 2 total P1 0 -10 8 1 2 total P2 0 -11 8 1 2 total P3 0 -4 8 2 1 total P0 0 -5 8 2 1 total P1 0 -6 8 2 1 total P2 0 -7 8 2 1 total P3 0 -0 8 2 2 total P0 0 -1 8 2 2 total P1 0 -2 8 2 2 total P2 0 -3 8 2 2 total P3 0 material group out nuclide mean std. dev. +0 8 2 total 0 0 material group in group out nuclide moment mean std. dev. +12 8 1 1 total P0 0 0 +13 8 1 1 total P1 0 0 +14 8 1 1 total P2 0 0 +15 8 1 1 total P3 0 0 +8 8 1 2 total P0 0 0 +9 8 1 2 total P1 0 0 +10 8 1 2 total P2 0 0 +11 8 1 2 total P3 0 0 +4 8 2 1 total P0 0 0 +5 8 2 1 total P1 0 0 +6 8 2 1 total P2 0 0 +7 8 2 1 total P3 0 0 +0 8 2 2 total P0 0 0 +1 8 2 2 total P1 0 0 +2 8 2 2 total P2 0 0 +3 8 2 2 total P3 0 0 material group out nuclide mean std. dev. 1 8 1 total 0 0 0 8 2 total 0 0 material group in nuclide mean std. dev. 1 9 1 total 0.600536 0.748875 0 9 2 total 0.000000 0.000000 material group in nuclide mean std. dev. 1 9 1 total 0 0 -0 9 2 total 0 0 material group in group out nuclide moment mean -12 9 1 1 total P0 0.720380 -13 9 1 1 total P1 0.119844 -14 9 1 1 total P2 0.038522 -15 9 1 1 total P3 0.056023 -8 9 1 2 total P0 0.000000 -9 9 1 2 total P1 0.000000 -10 9 1 2 total P2 0.000000 -11 9 1 2 total P3 0.000000 -4 9 2 1 total P0 0.000000 -5 9 2 1 total P1 0.000000 -6 9 2 1 total P2 0.000000 -7 9 2 1 total P3 0.000000 -0 9 2 2 total P0 0.000000 -1 9 2 2 total P1 0.000000 -2 9 2 2 total P2 0.000000 -3 9 2 2 total P3 0.000000 material group out nuclide mean std. dev. +0 9 2 total 0 0 material group in group out nuclide moment mean std. dev. +12 9 1 1 total P0 0.720380 0.771015 +13 9 1 1 total P1 0.119844 0.184691 +14 9 1 1 total P2 0.038522 0.064485 +15 9 1 1 total P3 0.056023 0.050595 +8 9 1 2 total P0 0.000000 0.000000 +9 9 1 2 total P1 0.000000 0.000000 +10 9 1 2 total P2 0.000000 0.000000 +11 9 1 2 total P3 0.000000 0.000000 +4 9 2 1 total P0 0.000000 0.000000 +5 9 2 1 total P1 0.000000 0.000000 +6 9 2 1 total P2 0.000000 0.000000 +7 9 2 1 total P3 0.000000 0.000000 +0 9 2 2 total P0 0.000000 0.000000 +1 9 2 2 total P1 0.000000 0.000000 +2 9 2 2 total P2 0.000000 0.000000 +3 9 2 2 total P3 0.000000 0.000000 material group out nuclide mean std. dev. 1 9 1 total 0 0 0 9 2 total 0 0 material group in nuclide mean std. dev. 1 10 1 total 0.235515 0.613974 0 10 2 total 0.000000 0.000000 material group in nuclide mean std. dev. 1 10 1 total 0 0 -0 10 2 total 0 0 material group in group out nuclide moment mean -12 10 1 1 total P0 0.501009 -13 10 1 1 total P1 0.265494 -14 10 1 1 total P2 0.141979 -15 10 1 1 total P3 0.074258 -8 10 1 2 total P0 0.000000 -9 10 1 2 total P1 0.000000 -10 10 1 2 total P2 0.000000 -11 10 1 2 total P3 0.000000 -4 10 2 1 total P0 0.000000 -5 10 2 1 total P1 0.000000 -6 10 2 1 total P2 0.000000 -7 10 2 1 total P3 0.000000 -0 10 2 2 total P0 0.000000 -1 10 2 2 total P1 0.000000 -2 10 2 2 total P2 0.000000 -3 10 2 2 total P3 0.000000 material group out nuclide mean std. dev. +0 10 2 total 0 0 material group in group out nuclide moment mean std. dev. +12 10 1 1 total P0 0.501009 0.708534 +13 10 1 1 total P1 0.265494 0.375465 +14 10 1 1 total P2 0.141979 0.200788 +15 10 1 1 total P3 0.074258 0.105017 +8 10 1 2 total P0 0.000000 0.000000 +9 10 1 2 total P1 0.000000 0.000000 +10 10 1 2 total P2 0.000000 0.000000 +11 10 1 2 total P3 0.000000 0.000000 +4 10 2 1 total P0 0.000000 0.000000 +5 10 2 1 total P1 0.000000 0.000000 +6 10 2 1 total P2 0.000000 0.000000 +7 10 2 1 total P3 0.000000 0.000000 +0 10 2 2 total P0 0.000000 0.000000 +1 10 2 2 total P1 0.000000 0.000000 +2 10 2 2 total P2 0.000000 0.000000 +3 10 2 2 total P3 0.000000 0.000000 material group out nuclide mean std. dev. 1 10 1 total 0 0 0 10 2 total 0 0 material group in nuclide mean std. dev. 1 11 1 total 0.186324 0.632129 0 11 2 total 0.945986 1.591133 material group in nuclide mean std. dev. 1 11 1 total 0 0 -0 11 2 total 0 0 material group in group out nuclide moment mean -12 11 1 1 total P0 0.478128 -13 11 1 1 total P1 0.323679 -14 11 1 1 total P2 0.143375 -15 11 1 1 total P3 0.054003 -8 11 1 2 total P0 0.031875 -9 11 1 2 total P1 0.008585 -10 11 1 2 total P2 -0.012470 -11 11 1 2 total P3 -0.011320 -4 11 2 1 total P0 0.000000 -5 11 2 1 total P1 0.000000 -6 11 2 1 total P2 0.000000 -7 11 2 1 total P3 0.000000 -0 11 2 2 total P0 1.201250 -1 11 2 2 total P1 0.286611 -2 11 2 2 total P2 0.218191 -3 11 2 2 total P3 -0.048514 material group out nuclide mean std. dev. +0 11 2 total 0 0 material group in group out nuclide moment mean std. dev. +12 11 1 1 total P0 0.478128 0.676174 +13 11 1 1 total P1 0.323679 0.457751 +14 11 1 1 total P2 0.143375 0.202763 +15 11 1 1 total P3 0.054003 0.076372 +8 11 1 2 total P0 0.031875 0.045078 +9 11 1 2 total P1 0.008585 0.012140 +10 11 1 2 total P2 -0.012470 0.017635 +11 11 1 2 total P3 -0.011320 0.016009 +4 11 2 1 total P0 0.000000 0.000000 +5 11 2 1 total P1 0.000000 0.000000 +6 11 2 1 total P2 0.000000 0.000000 +7 11 2 1 total P3 0.000000 0.000000 +0 11 2 2 total P0 1.201250 1.698824 +1 11 2 2 total P1 0.286611 0.405329 +2 11 2 2 total P2 0.218191 0.308569 +3 11 2 2 total P3 -0.048514 0.068609 material group out nuclide mean std. dev. 1 11 1 total 0 0 0 11 2 total 0 0 material group in nuclide mean std. dev. 1 12 1 total 0.213292 0.271444 0 12 2 total 1.390975 2.137346 material group in nuclide mean std. dev. 1 12 1 total 0 0 -0 12 2 total 0 0 material group in group out nuclide moment mean -12 12 1 1 total P0 0.408594 -13 12 1 1 total P1 0.222541 -14 12 1 1 total P2 0.090972 -15 12 1 1 total P3 0.031004 -8 12 1 2 total P0 0.027240 -9 12 1 2 total P1 -0.010088 -10 12 1 2 total P2 -0.006946 -11 12 1 2 total P3 0.009692 -4 12 2 1 total P0 0.000000 -5 12 2 1 total P1 0.000000 -6 12 2 1 total P2 0.000000 -7 12 2 1 total P3 0.000000 -0 12 2 2 total P0 1.574328 -1 12 2 2 total P1 0.229748 -2 12 2 2 total P2 0.014178 -3 12 2 2 total P3 0.038997 material group out nuclide mean std. dev. +0 12 2 total 0 0 material group in group out nuclide moment mean std. dev. +12 12 1 1 total P0 0.408594 0.278123 +13 12 1 1 total P1 0.222541 0.145776 +14 12 1 1 total P2 0.090972 0.069626 +15 12 1 1 total P3 0.031004 0.035981 +8 12 1 2 total P0 0.027240 0.029555 +9 12 1 2 total P1 -0.010088 0.010945 +10 12 1 2 total P2 -0.006946 0.007537 +11 12 1 2 total P3 0.009692 0.010516 +4 12 2 1 total P0 0.000000 0.000000 +5 12 2 1 total P1 0.000000 0.000000 +6 12 2 1 total P2 0.000000 0.000000 +7 12 2 1 total P3 0.000000 0.000000 +0 12 2 2 total P0 1.574328 2.226436 +1 12 2 2 total P1 0.229748 0.324913 +2 12 2 2 total P2 0.014178 0.020051 +3 12 2 2 total P3 0.038997 0.055150 material group out nuclide mean std. dev. 1 12 1 total 0 0 0 12 2 total 0 0 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index 20d2d8d5a4..1fcfe4aef2 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -1,4335 +1 @@ - material group in nuclide mean std. dev. -34 1 1 U-234 0.000173 0.000173 -35 1 1 U-235 0.010677 0.001889 -36 1 1 U-236 0.002390 0.001055 -37 1 1 U-238 0.213680 0.013272 -38 1 1 Np-237 0.000000 0.000000 -39 1 1 Pu-238 0.000000 0.000000 -40 1 1 Pu-239 0.002911 0.000639 -41 1 1 Pu-240 0.004426 0.000806 -42 1 1 Pu-241 0.000690 0.000387 -43 1 1 Pu-242 0.000000 0.000000 -44 1 1 Am-241 0.000173 0.000173 -45 1 1 Am-242m 0.000000 0.000000 -46 1 1 Am-243 0.000000 0.000000 -47 1 1 Cm-242 0.000000 0.000000 -48 1 1 Cm-243 0.000000 0.000000 -49 1 1 Cm-244 0.000000 0.000000 -50 1 1 Cm-245 0.000000 0.000000 -51 1 1 Mo-95 0.000000 0.000000 -52 1 1 Tc-99 0.000173 0.000173 -53 1 1 Ru-101 0.000238 0.000254 -54 1 1 Ru-103 0.000002 0.000243 -55 1 1 Ag-109 0.000000 0.000000 -56 1 1 Xe-135 0.000000 0.000000 -57 1 1 Cs-133 0.000347 0.000213 -58 1 1 Nd-143 0.000447 0.000292 -59 1 1 Nd-145 0.000564 0.000294 -60 1 1 Sm-147 0.000000 0.000000 -61 1 1 Sm-149 0.000000 0.000000 -62 1 1 Sm-150 0.000472 0.000239 -63 1 1 Sm-151 0.000000 0.000000 -64 1 1 Sm-152 0.000492 0.000352 -65 1 1 Eu-153 0.000173 0.000173 -66 1 1 Gd-155 0.000000 0.000000 -67 1 1 O-16 0.134715 0.009801 -0 1 2 U-234 0.000000 0.000000 -1 1 2 U-235 0.199907 0.007776 -2 1 2 U-236 0.001501 0.002037 -3 1 2 U-238 0.255355 0.029743 -4 1 2 Np-237 0.000000 0.000000 -5 1 2 Pu-238 0.000000 0.000000 -6 1 2 Pu-239 0.160378 0.011366 -7 1 2 Pu-240 0.007920 0.003710 -8 1 2 Pu-241 0.017820 0.003733 -9 1 2 Pu-242 0.000000 0.000000 -10 1 2 Am-241 0.000000 0.000000 -11 1 2 Am-242m 0.000000 0.000000 -12 1 2 Am-243 0.000000 0.000000 -13 1 2 Cm-242 0.000000 0.000000 -14 1 2 Cm-243 0.000000 0.000000 -15 1 2 Cm-244 0.000000 0.000000 -16 1 2 Cm-245 0.000000 0.000000 -17 1 2 Mo-95 0.000000 0.000000 -18 1 2 Tc-99 0.000000 0.000000 -19 1 2 Ru-101 0.000000 0.000000 -20 1 2 Ru-103 0.000000 0.000000 -21 1 2 Ag-109 0.000000 0.000000 -22 1 2 Xe-135 0.013860 0.003976 -23 1 2 Cs-133 0.000000 0.000000 -24 1 2 Nd-143 0.003960 0.002427 -25 1 2 Nd-145 0.000000 0.000000 -26 1 2 Sm-147 0.000000 0.000000 -27 1 2 Sm-149 0.001980 0.001981 -28 1 2 Sm-150 0.000000 0.000000 -29 1 2 Sm-151 0.001980 0.001981 -30 1 2 Sm-152 0.000000 0.000000 -31 1 2 Eu-153 0.000000 0.000000 -32 1 2 Gd-155 0.000000 0.000000 -33 1 2 O-16 0.196946 0.014729 material group in nuclide mean std. dev. -34 1 1 U-234 7.274440e-06 4.419477e-07 -35 1 1 U-235 9.587803e-03 5.936922e-04 -36 1 1 U-236 7.566099e-05 7.523935e-06 -37 1 1 U-238 7.178367e-03 6.505680e-04 -38 1 1 Np-237 1.315682e-05 8.036501e-07 -39 1 1 Pu-238 7.746151e-06 3.992835e-07 -40 1 1 Pu-239 3.805294e-03 3.637600e-04 -41 1 1 Pu-240 6.941319e-05 4.729737e-06 -42 1 1 Pu-241 1.033844e-03 9.083913e-05 -43 1 1 Pu-242 5.995332e-06 3.821721e-07 -44 1 1 Am-241 1.148585e-06 8.271648e-08 -45 1 1 Am-242m 1.100215e-06 6.159956e-08 -46 1 1 Am-243 8.323826e-07 5.841792e-08 -47 1 1 Cm-242 5.088970e-07 5.258007e-08 -48 1 1 Cm-243 2.245435e-07 1.459025e-08 -49 1 1 Cm-244 2.993206e-07 2.746129e-08 -50 1 1 Cm-245 3.063611e-07 3.057751e-08 -51 1 1 Mo-95 0.000000e+00 0.000000e+00 -52 1 1 Tc-99 0.000000e+00 0.000000e+00 -53 1 1 Ru-101 0.000000e+00 0.000000e+00 -54 1 1 Ru-103 0.000000e+00 0.000000e+00 -55 1 1 Ag-109 0.000000e+00 0.000000e+00 -56 1 1 Xe-135 0.000000e+00 0.000000e+00 -57 1 1 Cs-133 0.000000e+00 0.000000e+00 -58 1 1 Nd-143 0.000000e+00 0.000000e+00 -59 1 1 Nd-145 0.000000e+00 0.000000e+00 -60 1 1 Sm-147 0.000000e+00 0.000000e+00 -61 1 1 Sm-149 0.000000e+00 0.000000e+00 -62 1 1 Sm-150 0.000000e+00 0.000000e+00 -63 1 1 Sm-151 0.000000e+00 0.000000e+00 -64 1 1 Sm-152 0.000000e+00 0.000000e+00 -65 1 1 Eu-153 0.000000e+00 0.000000e+00 -66 1 1 Gd-155 0.000000e+00 0.000000e+00 -67 1 1 O-16 0.000000e+00 0.000000e+00 -0 1 2 U-234 4.408576e-07 2.828309e-08 -1 1 2 U-235 3.768094e-01 2.445671e-02 -2 1 2 U-236 6.097538e-06 3.733038e-07 -3 1 2 U-238 5.353074e-07 3.310544e-08 -4 1 2 Np-237 2.702971e-07 2.098939e-08 -5 1 2 Pu-238 3.463109e-05 2.638394e-06 -6 1 2 Pu-239 2.889643e-01 1.376004e-02 -7 1 2 Pu-240 4.533642e-06 2.544289e-07 -8 1 2 Pu-241 4.809366e-02 2.778345e-03 -9 1 2 Pu-242 8.715325e-08 5.460893e-09 -10 1 2 Am-241 4.611736e-06 2.155039e-07 -11 1 2 Am-242m 1.428047e-04 8.436437e-06 -12 1 2 Am-243 7.883895e-08 4.734503e-09 -13 1 2 Cm-242 9.731025e-07 6.143750e-08 -14 1 2 Cm-243 1.825830e-06 1.074849e-07 -15 1 2 Cm-244 1.581823e-07 9.938064e-09 -16 1 2 Cm-245 1.213386e-05 8.812019e-07 -17 1 2 Mo-95 0.000000e+00 0.000000e+00 -18 1 2 Tc-99 0.000000e+00 0.000000e+00 -19 1 2 Ru-101 0.000000e+00 0.000000e+00 -20 1 2 Ru-103 0.000000e+00 0.000000e+00 -21 1 2 Ag-109 0.000000e+00 0.000000e+00 -22 1 2 Xe-135 0.000000e+00 0.000000e+00 -23 1 2 Cs-133 0.000000e+00 0.000000e+00 -24 1 2 Nd-143 0.000000e+00 0.000000e+00 -25 1 2 Nd-145 0.000000e+00 0.000000e+00 -26 1 2 Sm-147 0.000000e+00 0.000000e+00 -27 1 2 Sm-149 0.000000e+00 0.000000e+00 -28 1 2 Sm-150 0.000000e+00 0.000000e+00 -29 1 2 Sm-151 0.000000e+00 0.000000e+00 -30 1 2 Sm-152 0.000000e+00 0.000000e+00 -31 1 2 Eu-153 0.000000e+00 0.000000e+00 -32 1 2 Gd-155 0.000000e+00 0.000000e+00 -33 1 2 O-16 0.000000e+00 0.000000e+00 material group in group out nuclide moment mean -408 1 1 1 U-234 P0 0.000000 -409 1 1 1 U-234 P1 0.000000 -410 1 1 1 U-234 P2 0.000000 -411 1 1 1 U-234 P3 0.000000 -412 1 1 1 U-235 P0 0.003812 -413 1 1 1 U-235 P1 0.000586 -414 1 1 1 U-235 P2 0.000071 -415 1 1 1 U-235 P3 0.000277 -416 1 1 1 U-236 P0 0.001733 -417 1 1 1 U-236 P1 0.000035 -418 1 1 1 U-236 P2 -0.000183 -419 1 1 1 U-236 P3 -0.000087 -420 1 1 1 U-238 P0 0.224908 -421 1 1 1 U-238 P1 0.030440 -422 1 1 1 U-238 P2 0.014265 -423 1 1 1 U-238 P3 0.007698 -424 1 1 1 Np-237 P0 0.000000 -425 1 1 1 Np-237 P1 0.000000 -426 1 1 1 Np-237 P2 0.000000 -427 1 1 1 Np-237 P3 0.000000 -428 1 1 1 Pu-238 P0 0.000000 -429 1 1 1 Pu-238 P1 0.000000 -430 1 1 1 Pu-238 P2 0.000000 -431 1 1 1 Pu-238 P3 0.000000 -432 1 1 1 Pu-239 P0 0.001040 -433 1 1 1 Pu-239 P1 0.000034 -434 1 1 1 Pu-239 P2 0.000090 -435 1 1 1 Pu-239 P3 0.000110 -436 1 1 1 Pu-240 P0 0.001040 -437 1 1 1 Pu-240 P1 -0.000268 -438 1 1 1 Pu-240 P2 -0.000137 -439 1 1 1 Pu-240 P3 0.000132 -440 1 1 1 Pu-241 P0 0.000173 -441 1 1 1 Pu-241 P1 -0.000170 -442 1 1 1 Pu-241 P2 0.000165 -443 1 1 1 Pu-241 P3 -0.000156 -444 1 1 1 Pu-242 P0 0.000000 -445 1 1 1 Pu-242 P1 0.000000 -446 1 1 1 Pu-242 P2 0.000000 -447 1 1 1 Pu-242 P3 0.000000 -448 1 1 1 Am-241 P0 0.000000 -449 1 1 1 Am-241 P1 0.000000 -450 1 1 1 Am-241 P2 0.000000 -451 1 1 1 Am-241 P3 0.000000 -452 1 1 1 Am-242m P0 0.000000 -453 1 1 1 Am-242m P1 0.000000 -454 1 1 1 Am-242m P2 0.000000 -455 1 1 1 Am-242m P3 0.000000 -456 1 1 1 Am-243 P0 0.000000 -457 1 1 1 Am-243 P1 0.000000 -458 1 1 1 Am-243 P2 0.000000 -459 1 1 1 Am-243 P3 0.000000 -460 1 1 1 Cm-242 P0 0.000000 -461 1 1 1 Cm-242 P1 0.000000 -462 1 1 1 Cm-242 P2 0.000000 -463 1 1 1 Cm-242 P3 0.000000 -464 1 1 1 Cm-243 P0 0.000000 -465 1 1 1 Cm-243 P1 0.000000 -466 1 1 1 Cm-243 P2 0.000000 -467 1 1 1 Cm-243 P3 0.000000 -468 1 1 1 Cm-244 P0 0.000000 -469 1 1 1 Cm-244 P1 0.000000 -470 1 1 1 Cm-244 P2 0.000000 -471 1 1 1 Cm-244 P3 0.000000 -472 1 1 1 Cm-245 P0 0.000000 -473 1 1 1 Cm-245 P1 0.000000 -474 1 1 1 Cm-245 P2 0.000000 -475 1 1 1 Cm-245 P3 0.000000 -476 1 1 1 Mo-95 P0 0.000000 -477 1 1 1 Mo-95 P1 0.000000 -478 1 1 1 Mo-95 P2 0.000000 -479 1 1 1 Mo-95 P3 0.000000 -480 1 1 1 Tc-99 P0 0.000000 -481 1 1 1 Tc-99 P1 0.000000 -482 1 1 1 Tc-99 P2 0.000000 -483 1 1 1 Tc-99 P3 0.000000 -484 1 1 1 Ru-101 P0 0.000347 -485 1 1 1 Ru-101 P1 0.000109 -486 1 1 1 Ru-101 P2 -0.000020 -487 1 1 1 Ru-101 P3 0.000023 -488 1 1 1 Ru-103 P0 0.000173 -489 1 1 1 Ru-103 P1 0.000171 -490 1 1 1 Ru-103 P2 0.000167 -491 1 1 1 Ru-103 P3 0.000160 -492 1 1 1 Ag-109 P0 0.000000 -493 1 1 1 Ag-109 P1 0.000000 -494 1 1 1 Ag-109 P2 0.000000 -495 1 1 1 Ag-109 P3 0.000000 -496 1 1 1 Xe-135 P0 0.000000 -497 1 1 1 Xe-135 P1 0.000000 -498 1 1 1 Xe-135 P2 0.000000 -499 1 1 1 Xe-135 P3 0.000000 -500 1 1 1 Cs-133 P0 0.000000 -501 1 1 1 Cs-133 P1 0.000000 -502 1 1 1 Cs-133 P2 0.000000 -503 1 1 1 Cs-133 P3 0.000000 -504 1 1 1 Nd-143 P0 0.000520 -505 1 1 1 Nd-143 P1 0.000073 -506 1 1 1 Nd-143 P2 0.000023 -507 1 1 1 Nd-143 P3 -0.000103 -508 1 1 1 Nd-145 P0 0.000520 -509 1 1 1 Nd-145 P1 -0.000044 -510 1 1 1 Nd-145 P2 0.000026 -511 1 1 1 Nd-145 P3 0.000126 -512 1 1 1 Sm-147 P0 0.000000 -513 1 1 1 Sm-147 P1 0.000000 -514 1 1 1 Sm-147 P2 0.000000 -515 1 1 1 Sm-147 P3 0.000000 -516 1 1 1 Sm-149 P0 0.000000 -517 1 1 1 Sm-149 P1 0.000000 -518 1 1 1 Sm-149 P2 0.000000 -519 1 1 1 Sm-149 P3 0.000000 -520 1 1 1 Sm-150 P0 0.000347 -521 1 1 1 Sm-150 P1 0.000048 -522 1 1 1 Sm-150 P2 -0.000090 -523 1 1 1 Sm-150 P3 -0.000019 -524 1 1 1 Sm-151 P0 0.000000 -525 1 1 1 Sm-151 P1 0.000000 -526 1 1 1 Sm-151 P2 0.000000 -527 1 1 1 Sm-151 P3 0.000000 -528 1 1 1 Sm-152 P0 0.000693 -529 1 1 1 Sm-152 P1 0.000201 -530 1 1 1 Sm-152 P2 -0.000044 -531 1 1 1 Sm-152 P3 0.000138 -532 1 1 1 Eu-153 P0 0.000000 -533 1 1 1 Eu-153 P1 0.000000 -534 1 1 1 Eu-153 P2 0.000000 -535 1 1 1 Eu-153 P3 0.000000 -536 1 1 1 Gd-155 P0 0.000000 -537 1 1 1 Gd-155 P1 0.000000 -538 1 1 1 Gd-155 P2 0.000000 -539 1 1 1 Gd-155 P3 0.000000 -540 1 1 1 O-16 P0 0.146242 -541 1 1 1 O-16 P1 0.013087 -542 1 1 1 O-16 P2 0.006314 -543 1 1 1 O-16 P3 0.005397 -272 1 1 2 U-234 P0 0.000000 -273 1 1 2 U-234 P1 0.000000 -274 1 1 2 U-234 P2 0.000000 -275 1 1 2 U-234 P3 0.000000 -276 1 1 2 U-235 P0 0.000000 -277 1 1 2 U-235 P1 0.000000 -278 1 1 2 U-235 P2 0.000000 -279 1 1 2 U-235 P3 0.000000 -280 1 1 2 U-236 P0 0.000000 -281 1 1 2 U-236 P1 0.000000 -282 1 1 2 U-236 P2 0.000000 -283 1 1 2 U-236 P3 0.000000 -284 1 1 2 U-238 P0 0.000173 -285 1 1 2 U-238 P1 -0.000038 -286 1 1 2 U-238 P2 -0.000074 -287 1 1 2 U-238 P3 0.000052 -288 1 1 2 Np-237 P0 0.000000 -289 1 1 2 Np-237 P1 0.000000 -290 1 1 2 Np-237 P2 0.000000 -291 1 1 2 Np-237 P3 0.000000 -292 1 1 2 Pu-238 P0 0.000000 -293 1 1 2 Pu-238 P1 0.000000 -294 1 1 2 Pu-238 P2 0.000000 -295 1 1 2 Pu-238 P3 0.000000 -296 1 1 2 Pu-239 P0 0.000000 -297 1 1 2 Pu-239 P1 0.000000 -298 1 1 2 Pu-239 P2 0.000000 -299 1 1 2 Pu-239 P3 0.000000 -300 1 1 2 Pu-240 P0 0.000000 -301 1 1 2 Pu-240 P1 0.000000 -302 1 1 2 Pu-240 P2 0.000000 -303 1 1 2 Pu-240 P3 0.000000 -304 1 1 2 Pu-241 P0 0.000000 -305 1 1 2 Pu-241 P1 0.000000 -306 1 1 2 Pu-241 P2 0.000000 -307 1 1 2 Pu-241 P3 0.000000 -308 1 1 2 Pu-242 P0 0.000000 -309 1 1 2 Pu-242 P1 0.000000 -310 1 1 2 Pu-242 P2 0.000000 -311 1 1 2 Pu-242 P3 0.000000 -312 1 1 2 Am-241 P0 0.000000 -313 1 1 2 Am-241 P1 0.000000 -314 1 1 2 Am-241 P2 0.000000 -315 1 1 2 Am-241 P3 0.000000 -316 1 1 2 Am-242m P0 0.000000 -317 1 1 2 Am-242m P1 0.000000 -318 1 1 2 Am-242m P2 0.000000 -319 1 1 2 Am-242m P3 0.000000 -320 1 1 2 Am-243 P0 0.000000 -321 1 1 2 Am-243 P1 0.000000 -322 1 1 2 Am-243 P2 0.000000 -323 1 1 2 Am-243 P3 0.000000 -324 1 1 2 Cm-242 P0 0.000000 -325 1 1 2 Cm-242 P1 0.000000 -326 1 1 2 Cm-242 P2 0.000000 -327 1 1 2 Cm-242 P3 0.000000 -328 1 1 2 Cm-243 P0 0.000000 -329 1 1 2 Cm-243 P1 0.000000 -330 1 1 2 Cm-243 P2 0.000000 -331 1 1 2 Cm-243 P3 0.000000 -332 1 1 2 Cm-244 P0 0.000000 -333 1 1 2 Cm-244 P1 0.000000 -334 1 1 2 Cm-244 P2 0.000000 -335 1 1 2 Cm-244 P3 0.000000 -336 1 1 2 Cm-245 P0 0.000000 -337 1 1 2 Cm-245 P1 0.000000 -338 1 1 2 Cm-245 P2 0.000000 -339 1 1 2 Cm-245 P3 0.000000 -340 1 1 2 Mo-95 P0 0.000000 -341 1 1 2 Mo-95 P1 0.000000 -342 1 1 2 Mo-95 P2 0.000000 -343 1 1 2 Mo-95 P3 0.000000 -344 1 1 2 Tc-99 P0 0.000000 -345 1 1 2 Tc-99 P1 0.000000 -346 1 1 2 Tc-99 P2 0.000000 -347 1 1 2 Tc-99 P3 0.000000 -348 1 1 2 Ru-101 P0 0.000000 -349 1 1 2 Ru-101 P1 0.000000 -350 1 1 2 Ru-101 P2 0.000000 -351 1 1 2 Ru-101 P3 0.000000 -352 1 1 2 Ru-103 P0 0.000000 -353 1 1 2 Ru-103 P1 0.000000 -354 1 1 2 Ru-103 P2 0.000000 -355 1 1 2 Ru-103 P3 0.000000 -356 1 1 2 Ag-109 P0 0.000000 -357 1 1 2 Ag-109 P1 0.000000 -358 1 1 2 Ag-109 P2 0.000000 -359 1 1 2 Ag-109 P3 0.000000 -360 1 1 2 Xe-135 P0 0.000000 -361 1 1 2 Xe-135 P1 0.000000 -362 1 1 2 Xe-135 P2 0.000000 -363 1 1 2 Xe-135 P3 0.000000 -364 1 1 2 Cs-133 P0 0.000000 -365 1 1 2 Cs-133 P1 0.000000 -366 1 1 2 Cs-133 P2 0.000000 -367 1 1 2 Cs-133 P3 0.000000 -368 1 1 2 Nd-143 P0 0.000000 -369 1 1 2 Nd-143 P1 0.000000 -370 1 1 2 Nd-143 P2 0.000000 -371 1 1 2 Nd-143 P3 0.000000 -372 1 1 2 Nd-145 P0 0.000000 -373 1 1 2 Nd-145 P1 0.000000 -374 1 1 2 Nd-145 P2 0.000000 -375 1 1 2 Nd-145 P3 0.000000 -376 1 1 2 Sm-147 P0 0.000000 -377 1 1 2 Sm-147 P1 0.000000 -378 1 1 2 Sm-147 P2 0.000000 -379 1 1 2 Sm-147 P3 0.000000 -380 1 1 2 Sm-149 P0 0.000000 -381 1 1 2 Sm-149 P1 0.000000 -382 1 1 2 Sm-149 P2 0.000000 -383 1 1 2 Sm-149 P3 0.000000 -384 1 1 2 Sm-150 P0 0.000000 -385 1 1 2 Sm-150 P1 0.000000 -386 1 1 2 Sm-150 P2 0.000000 -387 1 1 2 Sm-150 P3 0.000000 -388 1 1 2 Sm-151 P0 0.000000 -389 1 1 2 Sm-151 P1 0.000000 -390 1 1 2 Sm-151 P2 0.000000 -391 1 1 2 Sm-151 P3 0.000000 -392 1 1 2 Sm-152 P0 0.000000 -393 1 1 2 Sm-152 P1 0.000000 -394 1 1 2 Sm-152 P2 0.000000 -395 1 1 2 Sm-152 P3 0.000000 -396 1 1 2 Eu-153 P0 0.000000 -397 1 1 2 Eu-153 P1 0.000000 -398 1 1 2 Eu-153 P2 0.000000 -399 1 1 2 Eu-153 P3 0.000000 -400 1 1 2 Gd-155 P0 0.000000 -401 1 1 2 Gd-155 P1 0.000000 -402 1 1 2 Gd-155 P2 0.000000 -403 1 1 2 Gd-155 P3 0.000000 -404 1 1 2 O-16 P0 0.001386 -405 1 1 2 O-16 P1 -0.000559 -406 1 1 2 O-16 P2 -0.000165 -407 1 1 2 O-16 P3 0.000123 -136 1 2 1 U-234 P0 0.000000 -137 1 2 1 U-234 P1 0.000000 -138 1 2 1 U-234 P2 0.000000 -139 1 2 1 U-234 P3 0.000000 -140 1 2 1 U-235 P0 0.000000 -141 1 2 1 U-235 P1 0.000000 -142 1 2 1 U-235 P2 0.000000 -143 1 2 1 U-235 P3 0.000000 -144 1 2 1 U-236 P0 0.000000 -145 1 2 1 U-236 P1 0.000000 -146 1 2 1 U-236 P2 0.000000 -147 1 2 1 U-236 P3 0.000000 -148 1 2 1 U-238 P0 0.000000 -149 1 2 1 U-238 P1 0.000000 -150 1 2 1 U-238 P2 0.000000 -151 1 2 1 U-238 P3 0.000000 -152 1 2 1 Np-237 P0 0.000000 -153 1 2 1 Np-237 P1 0.000000 -154 1 2 1 Np-237 P2 0.000000 -155 1 2 1 Np-237 P3 0.000000 -156 1 2 1 Pu-238 P0 0.000000 -157 1 2 1 Pu-238 P1 0.000000 -158 1 2 1 Pu-238 P2 0.000000 -159 1 2 1 Pu-238 P3 0.000000 -160 1 2 1 Pu-239 P0 0.000000 -161 1 2 1 Pu-239 P1 0.000000 -162 1 2 1 Pu-239 P2 0.000000 -163 1 2 1 Pu-239 P3 0.000000 -164 1 2 1 Pu-240 P0 0.000000 -165 1 2 1 Pu-240 P1 0.000000 -166 1 2 1 Pu-240 P2 0.000000 -167 1 2 1 Pu-240 P3 0.000000 -168 1 2 1 Pu-241 P0 0.000000 -169 1 2 1 Pu-241 P1 0.000000 -170 1 2 1 Pu-241 P2 0.000000 -171 1 2 1 Pu-241 P3 0.000000 -172 1 2 1 Pu-242 P0 0.000000 -173 1 2 1 Pu-242 P1 0.000000 -174 1 2 1 Pu-242 P2 0.000000 -175 1 2 1 Pu-242 P3 0.000000 -176 1 2 1 Am-241 P0 0.000000 -177 1 2 1 Am-241 P1 0.000000 -178 1 2 1 Am-241 P2 0.000000 -179 1 2 1 Am-241 P3 0.000000 -180 1 2 1 Am-242m P0 0.000000 -181 1 2 1 Am-242m P1 0.000000 -182 1 2 1 Am-242m P2 0.000000 -183 1 2 1 Am-242m P3 0.000000 -184 1 2 1 Am-243 P0 0.000000 -185 1 2 1 Am-243 P1 0.000000 -186 1 2 1 Am-243 P2 0.000000 -187 1 2 1 Am-243 P3 0.000000 -188 1 2 1 Cm-242 P0 0.000000 -189 1 2 1 Cm-242 P1 0.000000 -190 1 2 1 Cm-242 P2 0.000000 -191 1 2 1 Cm-242 P3 0.000000 -192 1 2 1 Cm-243 P0 0.000000 -193 1 2 1 Cm-243 P1 0.000000 -194 1 2 1 Cm-243 P2 0.000000 -195 1 2 1 Cm-243 P3 0.000000 -196 1 2 1 Cm-244 P0 0.000000 -197 1 2 1 Cm-244 P1 0.000000 -198 1 2 1 Cm-244 P2 0.000000 -199 1 2 1 Cm-244 P3 0.000000 -200 1 2 1 Cm-245 P0 0.000000 -201 1 2 1 Cm-245 P1 0.000000 -202 1 2 1 Cm-245 P2 0.000000 -203 1 2 1 Cm-245 P3 0.000000 -204 1 2 1 Mo-95 P0 0.000000 -205 1 2 1 Mo-95 P1 0.000000 -206 1 2 1 Mo-95 P2 0.000000 -207 1 2 1 Mo-95 P3 0.000000 -208 1 2 1 Tc-99 P0 0.000000 -209 1 2 1 Tc-99 P1 0.000000 -210 1 2 1 Tc-99 P2 0.000000 -211 1 2 1 Tc-99 P3 0.000000 -212 1 2 1 Ru-101 P0 0.000000 -213 1 2 1 Ru-101 P1 0.000000 -214 1 2 1 Ru-101 P2 0.000000 -215 1 2 1 Ru-101 P3 0.000000 -216 1 2 1 Ru-103 P0 0.000000 -217 1 2 1 Ru-103 P1 0.000000 -218 1 2 1 Ru-103 P2 0.000000 -219 1 2 1 Ru-103 P3 0.000000 -220 1 2 1 Ag-109 P0 0.000000 -221 1 2 1 Ag-109 P1 0.000000 -222 1 2 1 Ag-109 P2 0.000000 -223 1 2 1 Ag-109 P3 0.000000 -224 1 2 1 Xe-135 P0 0.000000 -225 1 2 1 Xe-135 P1 0.000000 -226 1 2 1 Xe-135 P2 0.000000 -227 1 2 1 Xe-135 P3 0.000000 -228 1 2 1 Cs-133 P0 0.000000 -229 1 2 1 Cs-133 P1 0.000000 -230 1 2 1 Cs-133 P2 0.000000 -231 1 2 1 Cs-133 P3 0.000000 -232 1 2 1 Nd-143 P0 0.000000 -233 1 2 1 Nd-143 P1 0.000000 -234 1 2 1 Nd-143 P2 0.000000 -235 1 2 1 Nd-143 P3 0.000000 -236 1 2 1 Nd-145 P0 0.000000 -237 1 2 1 Nd-145 P1 0.000000 -238 1 2 1 Nd-145 P2 0.000000 -239 1 2 1 Nd-145 P3 0.000000 -240 1 2 1 Sm-147 P0 0.000000 -241 1 2 1 Sm-147 P1 0.000000 -242 1 2 1 Sm-147 P2 0.000000 -243 1 2 1 Sm-147 P3 0.000000 -244 1 2 1 Sm-149 P0 0.000000 -245 1 2 1 Sm-149 P1 0.000000 -246 1 2 1 Sm-149 P2 0.000000 -247 1 2 1 Sm-149 P3 0.000000 -248 1 2 1 Sm-150 P0 0.000000 -249 1 2 1 Sm-150 P1 0.000000 -250 1 2 1 Sm-150 P2 0.000000 -251 1 2 1 Sm-150 P3 0.000000 -252 1 2 1 Sm-151 P0 0.000000 -253 1 2 1 Sm-151 P1 0.000000 -254 1 2 1 Sm-151 P2 0.000000 -255 1 2 1 Sm-151 P3 0.000000 -256 1 2 1 Sm-152 P0 0.000000 -257 1 2 1 Sm-152 P1 0.000000 -258 1 2 1 Sm-152 P2 0.000000 -259 1 2 1 Sm-152 P3 0.000000 -260 1 2 1 Eu-153 P0 0.000000 -261 1 2 1 Eu-153 P1 0.000000 -262 1 2 1 Eu-153 P2 0.000000 -263 1 2 1 Eu-153 P3 0.000000 -264 1 2 1 Gd-155 P0 0.000000 -265 1 2 1 Gd-155 P1 0.000000 -266 1 2 1 Gd-155 P2 0.000000 -267 1 2 1 Gd-155 P3 0.000000 -268 1 2 1 O-16 P0 0.000000 -269 1 2 1 O-16 P1 0.000000 -270 1 2 1 O-16 P2 0.000000 -271 1 2 1 O-16 P3 0.000000 -0 1 2 2 U-234 P0 0.000000 -1 1 2 2 U-234 P1 0.000000 -2 1 2 2 U-234 P2 0.000000 -3 1 2 2 U-234 P3 0.000000 -4 1 2 2 U-235 P0 0.003960 -5 1 2 2 U-235 P1 0.000071 -6 1 2 2 U-235 P2 0.001232 -7 1 2 2 U-235 P3 0.000182 -8 1 2 2 U-236 P0 0.001980 -9 1 2 2 U-236 P1 0.000479 -10 1 2 2 U-236 P2 -0.000816 -11 1 2 2 U-236 P3 -0.000648 -12 1 2 2 U-238 P0 0.205918 -13 1 2 2 U-238 P1 -0.013364 -14 1 2 2 U-238 P2 -0.010941 -15 1 2 2 U-238 P3 0.000772 -16 1 2 2 Np-237 P0 0.000000 -17 1 2 2 Np-237 P1 0.000000 -18 1 2 2 Np-237 P2 0.000000 -19 1 2 2 Np-237 P3 0.000000 -20 1 2 2 Pu-238 P0 0.000000 -21 1 2 2 Pu-238 P1 0.000000 -22 1 2 2 Pu-238 P2 0.000000 -23 1 2 2 Pu-238 P3 0.000000 -24 1 2 2 Pu-239 P0 0.000000 -25 1 2 2 Pu-239 P1 0.000000 -26 1 2 2 Pu-239 P2 0.000000 -27 1 2 2 Pu-239 P3 0.000000 -28 1 2 2 Pu-240 P0 0.000000 -29 1 2 2 Pu-240 P1 0.000000 -30 1 2 2 Pu-240 P2 0.000000 -31 1 2 2 Pu-240 P3 0.000000 -32 1 2 2 Pu-241 P0 0.000000 -33 1 2 2 Pu-241 P1 0.000000 -34 1 2 2 Pu-241 P2 0.000000 -35 1 2 2 Pu-241 P3 0.000000 -36 1 2 2 Pu-242 P0 0.000000 -37 1 2 2 Pu-242 P1 0.000000 -38 1 2 2 Pu-242 P2 0.000000 -39 1 2 2 Pu-242 P3 0.000000 -40 1 2 2 Am-241 P0 0.000000 -41 1 2 2 Am-241 P1 0.000000 -42 1 2 2 Am-241 P2 0.000000 -43 1 2 2 Am-241 P3 0.000000 -44 1 2 2 Am-242m P0 0.000000 -45 1 2 2 Am-242m P1 0.000000 -46 1 2 2 Am-242m P2 0.000000 -47 1 2 2 Am-242m P3 0.000000 -48 1 2 2 Am-243 P0 0.000000 -49 1 2 2 Am-243 P1 0.000000 -50 1 2 2 Am-243 P2 0.000000 -51 1 2 2 Am-243 P3 0.000000 -52 1 2 2 Cm-242 P0 0.000000 -53 1 2 2 Cm-242 P1 0.000000 -54 1 2 2 Cm-242 P2 0.000000 -55 1 2 2 Cm-242 P3 0.000000 -56 1 2 2 Cm-243 P0 0.000000 -57 1 2 2 Cm-243 P1 0.000000 -58 1 2 2 Cm-243 P2 0.000000 -59 1 2 2 Cm-243 P3 0.000000 -60 1 2 2 Cm-244 P0 0.000000 -61 1 2 2 Cm-244 P1 0.000000 -62 1 2 2 Cm-244 P2 0.000000 -63 1 2 2 Cm-244 P3 0.000000 -64 1 2 2 Cm-245 P0 0.000000 -65 1 2 2 Cm-245 P1 0.000000 -66 1 2 2 Cm-245 P2 0.000000 -67 1 2 2 Cm-245 P3 0.000000 -68 1 2 2 Mo-95 P0 0.000000 -69 1 2 2 Mo-95 P1 0.000000 -70 1 2 2 Mo-95 P2 0.000000 -71 1 2 2 Mo-95 P3 0.000000 -72 1 2 2 Tc-99 P0 0.000000 -73 1 2 2 Tc-99 P1 0.000000 -74 1 2 2 Tc-99 P2 0.000000 -75 1 2 2 Tc-99 P3 0.000000 -76 1 2 2 Ru-101 P0 0.000000 -77 1 2 2 Ru-101 P1 0.000000 -78 1 2 2 Ru-101 P2 0.000000 -79 1 2 2 Ru-101 P3 0.000000 -80 1 2 2 Ru-103 P0 0.000000 -81 1 2 2 Ru-103 P1 0.000000 -82 1 2 2 Ru-103 P2 0.000000 -83 1 2 2 Ru-103 P3 0.000000 -84 1 2 2 Ag-109 P0 0.000000 -85 1 2 2 Ag-109 P1 0.000000 -86 1 2 2 Ag-109 P2 0.000000 -87 1 2 2 Ag-109 P3 0.000000 -88 1 2 2 Xe-135 P0 0.000000 -89 1 2 2 Xe-135 P1 0.000000 -90 1 2 2 Xe-135 P2 0.000000 -91 1 2 2 Xe-135 P3 0.000000 -92 1 2 2 Cs-133 P0 0.000000 -93 1 2 2 Cs-133 P1 0.000000 -94 1 2 2 Cs-133 P2 0.000000 -95 1 2 2 Cs-133 P3 0.000000 -96 1 2 2 Nd-143 P0 0.000000 -97 1 2 2 Nd-143 P1 0.000000 -98 1 2 2 Nd-143 P2 0.000000 -99 1 2 2 Nd-143 P3 0.000000 -100 1 2 2 Nd-145 P0 0.000000 -101 1 2 2 Nd-145 P1 0.000000 -102 1 2 2 Nd-145 P2 0.000000 -103 1 2 2 Nd-145 P3 0.000000 -104 1 2 2 Sm-147 P0 0.000000 -105 1 2 2 Sm-147 P1 0.000000 -106 1 2 2 Sm-147 P2 0.000000 -107 1 2 2 Sm-147 P3 0.000000 -108 1 2 2 Sm-149 P0 0.000000 -109 1 2 2 Sm-149 P1 0.000000 -110 1 2 2 Sm-149 P2 0.000000 -111 1 2 2 Sm-149 P3 0.000000 -112 1 2 2 Sm-150 P0 0.000000 -113 1 2 2 Sm-150 P1 0.000000 -114 1 2 2 Sm-150 P2 0.000000 -115 1 2 2 Sm-150 P3 0.000000 -116 1 2 2 Sm-151 P0 0.000000 -117 1 2 2 Sm-151 P1 0.000000 -118 1 2 2 Sm-151 P2 0.000000 -119 1 2 2 Sm-151 P3 0.000000 -120 1 2 2 Sm-152 P0 0.000000 -121 1 2 2 Sm-152 P1 0.000000 -122 1 2 2 Sm-152 P2 0.000000 -123 1 2 2 Sm-152 P3 0.000000 -124 1 2 2 Eu-153 P0 0.000000 -125 1 2 2 Eu-153 P1 0.000000 -126 1 2 2 Eu-153 P2 0.000000 -127 1 2 2 Eu-153 P3 0.000000 -128 1 2 2 Gd-155 P0 0.000000 -129 1 2 2 Gd-155 P1 0.000000 -130 1 2 2 Gd-155 P2 0.000000 -131 1 2 2 Gd-155 P3 0.000000 -132 1 2 2 O-16 P0 0.192058 -133 1 2 2 O-16 P1 0.001504 -134 1 2 2 O-16 P2 -0.004281 -135 1 2 2 O-16 P3 -0.007160 material group out nuclide mean std. dev. -34 1 1 U-234 0 0.000000 -35 1 1 U-235 1 0.066362 -36 1 1 U-236 0 0.000000 -37 1 1 U-238 1 0.093082 -38 1 1 Np-237 0 0.000000 -39 1 1 Pu-238 0 0.000000 -40 1 1 Pu-239 1 0.104567 -41 1 1 Pu-240 0 0.000000 -42 1 1 Pu-241 1 0.263696 -43 1 1 Pu-242 0 0.000000 -44 1 1 Am-241 0 0.000000 -45 1 1 Am-242m 0 0.000000 -46 1 1 Am-243 0 0.000000 -47 1 1 Cm-242 0 0.000000 -48 1 1 Cm-243 0 0.000000 -49 1 1 Cm-244 0 0.000000 -50 1 1 Cm-245 0 0.000000 -51 1 1 Mo-95 0 0.000000 -52 1 1 Tc-99 0 0.000000 -53 1 1 Ru-101 0 0.000000 -54 1 1 Ru-103 0 0.000000 -55 1 1 Ag-109 0 0.000000 -56 1 1 Xe-135 0 0.000000 -57 1 1 Cs-133 0 0.000000 -58 1 1 Nd-143 0 0.000000 -59 1 1 Nd-145 0 0.000000 -60 1 1 Sm-147 0 0.000000 -61 1 1 Sm-149 0 0.000000 -62 1 1 Sm-150 0 0.000000 -63 1 1 Sm-151 0 0.000000 -64 1 1 Sm-152 0 0.000000 -65 1 1 Eu-153 0 0.000000 -66 1 1 Gd-155 0 0.000000 -67 1 1 O-16 0 0.000000 -0 1 2 U-234 0 0.000000 -1 1 2 U-235 0 0.000000 -2 1 2 U-236 0 0.000000 -3 1 2 U-238 0 0.000000 -4 1 2 Np-237 0 0.000000 -5 1 2 Pu-238 0 0.000000 -6 1 2 Pu-239 0 0.000000 -7 1 2 Pu-240 0 0.000000 -8 1 2 Pu-241 0 0.000000 -9 1 2 Pu-242 0 0.000000 -10 1 2 Am-241 0 0.000000 -11 1 2 Am-242m 0 0.000000 -12 1 2 Am-243 0 0.000000 -13 1 2 Cm-242 0 0.000000 -14 1 2 Cm-243 0 0.000000 -15 1 2 Cm-244 0 0.000000 -16 1 2 Cm-245 0 0.000000 -17 1 2 Mo-95 0 0.000000 -18 1 2 Tc-99 0 0.000000 -19 1 2 Ru-101 0 0.000000 -20 1 2 Ru-103 0 0.000000 -21 1 2 Ag-109 0 0.000000 -22 1 2 Xe-135 0 0.000000 -23 1 2 Cs-133 0 0.000000 -24 1 2 Nd-143 0 0.000000 -25 1 2 Nd-145 0 0.000000 -26 1 2 Sm-147 0 0.000000 -27 1 2 Sm-149 0 0.000000 -28 1 2 Sm-150 0 0.000000 -29 1 2 Sm-151 0 0.000000 -30 1 2 Sm-152 0 0.000000 -31 1 2 Eu-153 0 0.000000 -32 1 2 Gd-155 0 0.000000 -33 1 2 O-16 0 0.000000 material group in nuclide mean std. dev. -5 2 1 Zr-90 0.104734 0.008915 -6 2 1 Zr-91 0.036155 0.003735 -7 2 1 Zr-92 0.042422 0.003029 -8 2 1 Zr-94 0.046148 0.006251 -9 2 1 Zr-96 0.007794 0.001536 -0 2 2 Zr-90 0.121688 0.034934 -1 2 2 Zr-91 0.061792 0.024317 -2 2 2 Zr-92 0.041633 0.016323 -3 2 2 Zr-94 0.060818 0.021483 -4 2 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -5 2 1 Zr-90 0 0 -6 2 1 Zr-91 0 0 -7 2 1 Zr-92 0 0 -8 2 1 Zr-94 0 0 -9 2 1 Zr-96 0 0 -0 2 2 Zr-90 0 0 -1 2 2 Zr-91 0 0 -2 2 2 Zr-92 0 0 -3 2 2 Zr-94 0 0 -4 2 2 Zr-96 0 0 material group in group out nuclide moment mean -60 2 1 1 Zr-90 P0 0.122030 -61 2 1 1 Zr-90 P1 0.017296 -62 2 1 1 Zr-90 P2 0.020437 -63 2 1 1 Zr-90 P3 -0.000350 -64 2 1 1 Zr-91 P0 0.037548 -65 2 1 1 Zr-91 P1 0.001393 -66 2 1 1 Zr-91 P2 -0.000553 -67 2 1 1 Zr-91 P3 0.001719 -68 2 1 1 Zr-92 P0 0.047829 -69 2 1 1 Zr-92 P1 0.005406 -70 2 1 1 Zr-92 P2 0.004793 -71 2 1 1 Zr-92 P3 0.001907 -72 2 1 1 Zr-94 P0 0.058110 -73 2 1 1 Zr-94 P1 0.011962 -74 2 1 1 Zr-94 P2 0.006220 -75 2 1 1 Zr-94 P3 -0.000627 -76 2 1 1 Zr-96 P0 0.007599 -77 2 1 1 Zr-96 P1 -0.000196 -78 2 1 1 Zr-96 P2 -0.001193 -79 2 1 1 Zr-96 P3 -0.000401 -40 2 1 2 Zr-90 P0 0.000000 -41 2 1 2 Zr-90 P1 0.000000 -42 2 1 2 Zr-90 P2 0.000000 -43 2 1 2 Zr-90 P3 0.000000 -44 2 1 2 Zr-91 P0 0.000000 -45 2 1 2 Zr-91 P1 0.000000 -46 2 1 2 Zr-91 P2 0.000000 -47 2 1 2 Zr-91 P3 0.000000 -48 2 1 2 Zr-92 P0 0.000000 -49 2 1 2 Zr-92 P1 0.000000 -50 2 1 2 Zr-92 P2 0.000000 -51 2 1 2 Zr-92 P3 0.000000 -52 2 1 2 Zr-94 P0 0.000000 -53 2 1 2 Zr-94 P1 0.000000 -54 2 1 2 Zr-94 P2 0.000000 -55 2 1 2 Zr-94 P3 0.000000 -56 2 1 2 Zr-96 P0 0.000000 -57 2 1 2 Zr-96 P1 0.000000 -58 2 1 2 Zr-96 P2 0.000000 -59 2 1 2 Zr-96 P3 0.000000 -20 2 2 1 Zr-90 P0 0.000000 -21 2 2 1 Zr-90 P1 0.000000 -22 2 2 1 Zr-90 P2 0.000000 -23 2 2 1 Zr-90 P3 0.000000 -24 2 2 1 Zr-91 P0 0.000000 -25 2 2 1 Zr-91 P1 0.000000 -26 2 2 1 Zr-91 P2 0.000000 -27 2 2 1 Zr-91 P3 0.000000 -28 2 2 1 Zr-92 P0 0.000000 -29 2 2 1 Zr-92 P1 0.000000 -30 2 2 1 Zr-92 P2 0.000000 -31 2 2 1 Zr-92 P3 0.000000 -32 2 2 1 Zr-94 P0 0.000000 -33 2 2 1 Zr-94 P1 0.000000 -34 2 2 1 Zr-94 P2 0.000000 -35 2 2 1 Zr-94 P3 0.000000 -36 2 2 1 Zr-96 P0 0.000000 -37 2 2 1 Zr-96 P1 0.000000 -38 2 2 1 Zr-96 P2 0.000000 -39 2 2 1 Zr-96 P3 0.000000 -0 2 2 2 Zr-90 P0 0.119570 -1 2 2 2 Zr-90 P1 -0.002117 -2 2 2 2 Zr-90 P2 -0.015144 -3 2 2 2 Zr-90 P3 0.000965 -4 2 2 2 Zr-91 P0 0.054803 -5 2 2 2 Zr-91 P1 -0.006989 -6 2 2 2 Zr-91 P2 -0.010542 -7 2 2 2 Zr-91 P3 -0.001260 -8 2 2 2 Zr-92 P0 0.034875 -9 2 2 2 Zr-92 P1 -0.006759 -10 2 2 2 Zr-92 P2 0.008972 -11 2 2 2 Zr-92 P3 0.009834 -12 2 2 2 Zr-94 P0 0.054803 -13 2 2 2 Zr-94 P1 -0.006015 -14 2 2 2 Zr-94 P2 0.001420 -15 2 2 2 Zr-94 P3 0.004494 -16 2 2 2 Zr-96 P0 0.000000 -17 2 2 2 Zr-96 P1 0.000000 -18 2 2 2 Zr-96 P2 0.000000 -19 2 2 2 Zr-96 P3 0.000000 material group out nuclide mean std. dev. -5 2 1 Zr-90 0 0 -6 2 1 Zr-91 0 0 -7 2 1 Zr-92 0 0 -8 2 1 Zr-94 0 0 -9 2 1 Zr-96 0 0 -0 2 2 Zr-90 0 0 -1 2 2 Zr-91 0 0 -2 2 2 Zr-92 0 0 -3 2 2 Zr-94 0 0 -4 2 2 Zr-96 0 0 material group in nuclide mean std. dev. -4 3 1 H-1 0.207103 0.023028 -5 3 1 O-16 0.079282 0.005197 -6 3 1 B-10 0.000521 0.000244 -7 3 1 B-11 0.000000 0.000000 -0 3 2 H-1 1.283344 0.250946 -1 3 2 O-16 0.085363 0.014001 -2 3 2 B-10 0.049249 0.008232 -3 3 2 B-11 0.000195 0.001527 material group in nuclide mean std. dev. -4 3 1 H-1 0 0 -5 3 1 O-16 0 0 -6 3 1 B-10 0 0 -7 3 1 B-11 0 0 -0 3 2 H-1 0 0 -1 3 2 O-16 0 0 -2 3 2 B-10 0 0 -3 3 2 B-11 0 0 material group in group out nuclide moment mean -48 3 1 1 H-1 P0 0.560615 -49 3 1 1 H-1 P1 0.379309 -50 3 1 1 H-1 P2 0.149073 -51 3 1 1 H-1 P3 0.005293 -52 3 1 1 O-16 P0 0.082731 -53 3 1 1 O-16 P1 0.004100 -54 3 1 1 O-16 P2 0.003113 -55 3 1 1 O-16 P3 -0.002256 -56 3 1 1 B-10 P0 0.000000 -57 3 1 1 B-10 P1 0.000000 -58 3 1 1 B-10 P2 0.000000 -59 3 1 1 B-10 P3 0.000000 -60 3 1 1 B-11 P0 0.000000 -61 3 1 1 B-11 P1 0.000000 -62 3 1 1 B-11 P2 0.000000 -63 3 1 1 B-11 P3 0.000000 -32 3 1 2 H-1 P0 0.025666 -33 3 1 2 H-1 P1 0.007631 -34 3 1 2 H-1 P2 -0.002692 -35 3 1 2 H-1 P3 -0.002928 -36 3 1 2 O-16 P0 0.000521 -37 3 1 2 O-16 P1 -0.000268 -38 3 1 2 O-16 P2 -0.000046 -39 3 1 2 O-16 P3 0.000208 -40 3 1 2 B-10 P0 0.000000 -41 3 1 2 B-10 P1 0.000000 -42 3 1 2 B-10 P2 0.000000 -43 3 1 2 B-10 P3 0.000000 -44 3 1 2 B-11 P0 0.000000 -45 3 1 2 B-11 P1 0.000000 -46 3 1 2 B-11 P2 0.000000 -47 3 1 2 B-11 P3 0.000000 -16 3 2 1 H-1 P0 0.000000 -17 3 2 1 H-1 P1 0.000000 -18 3 2 1 H-1 P2 0.000000 -19 3 2 1 H-1 P3 0.000000 -20 3 2 1 O-16 P0 0.000000 -21 3 2 1 O-16 P1 0.000000 -22 3 2 1 O-16 P2 0.000000 -23 3 2 1 O-16 P3 0.000000 -24 3 2 1 B-10 P0 0.000000 -25 3 2 1 B-10 P1 0.000000 -26 3 2 1 B-10 P2 0.000000 -27 3 2 1 B-10 P3 0.000000 -28 3 2 1 B-11 P0 0.000000 -29 3 2 1 B-11 P1 0.000000 -30 3 2 1 B-11 P2 0.000000 -31 3 2 1 B-11 P3 0.000000 -0 3 2 2 H-1 P0 1.840960 -1 3 2 2 H-1 P1 0.498320 -2 3 2 2 H-1 P2 0.083870 -3 3 2 2 H-1 P3 0.013597 -4 3 2 2 O-16 P0 0.082081 -5 3 2 2 O-16 P1 -0.000867 -6 3 2 2 O-16 P2 0.006697 -7 3 2 2 O-16 P3 0.003223 -8 3 2 2 B-10 P0 0.000000 -9 3 2 2 B-10 P1 0.000000 -10 3 2 2 B-10 P2 0.000000 -11 3 2 2 B-10 P3 0.000000 -12 3 2 2 B-11 P0 0.001173 -13 3 2 2 B-11 P1 0.000978 -14 3 2 2 B-11 P2 0.000637 -15 3 2 2 B-11 P3 0.000234 material group out nuclide mean std. dev. -4 3 1 H-1 0 0 -5 3 1 O-16 0 0 -6 3 1 B-10 0 0 -7 3 1 B-11 0 0 -0 3 2 H-1 0 0 -1 3 2 O-16 0 0 -2 3 2 B-10 0 0 -3 3 2 B-11 0 0 material group in nuclide mean std. dev. -4 4 1 H-1 0.175242 0.053715 -5 4 1 O-16 0.066545 0.010083 -6 4 1 B-10 0.000570 0.000352 -7 4 1 B-11 0.000089 0.000346 -0 4 2 H-1 1.142895 0.365140 -1 4 2 O-16 0.085141 0.028073 -2 4 2 B-10 0.025923 0.007276 -3 4 2 B-11 0.000000 0.000000 material group in nuclide mean std. dev. -4 4 1 H-1 0 0 -5 4 1 O-16 0 0 -6 4 1 B-10 0 0 -7 4 1 B-11 0 0 -0 4 2 H-1 0 0 -1 4 2 O-16 0 0 -2 4 2 B-10 0 0 -3 4 2 B-11 0 0 material group in group out nuclide moment mean -48 4 1 1 H-1 P0 0.468964 -49 4 1 1 H-1 P1 0.317668 -50 4 1 1 H-1 P2 0.127157 -51 4 1 1 H-1 P3 0.009844 -52 4 1 1 O-16 P0 0.074692 -53 4 1 1 O-16 P1 0.008147 -54 4 1 1 O-16 P2 0.003915 -55 4 1 1 O-16 P3 0.002322 -56 4 1 1 B-10 P0 0.000000 -57 4 1 1 B-10 P1 0.000000 -58 4 1 1 B-10 P2 0.000000 -59 4 1 1 B-10 P3 0.000000 -60 4 1 1 B-11 P0 0.000285 -61 4 1 1 B-11 P1 0.000196 -62 4 1 1 B-11 P2 0.000060 -63 4 1 1 B-11 P3 -0.000062 -32 4 1 2 H-1 P0 0.023662 -33 4 1 2 H-1 P1 0.007526 -34 4 1 2 H-1 P2 -0.002730 -35 4 1 2 H-1 P3 -0.003140 -36 4 1 2 O-16 P0 0.000000 -37 4 1 2 O-16 P1 0.000000 -38 4 1 2 O-16 P2 0.000000 -39 4 1 2 O-16 P3 0.000000 -40 4 1 2 B-10 P0 0.000000 -41 4 1 2 B-10 P1 0.000000 -42 4 1 2 B-10 P2 0.000000 -43 4 1 2 B-10 P3 0.000000 -44 4 1 2 B-11 P0 0.000000 -45 4 1 2 B-11 P1 0.000000 -46 4 1 2 B-11 P2 0.000000 -47 4 1 2 B-11 P3 0.000000 -16 4 2 1 H-1 P0 0.000000 -17 4 2 1 H-1 P1 0.000000 -18 4 2 1 H-1 P2 0.000000 -19 4 2 1 H-1 P3 0.000000 -20 4 2 1 O-16 P0 0.000000 -21 4 2 1 O-16 P1 0.000000 -22 4 2 1 O-16 P2 0.000000 -23 4 2 1 O-16 P3 0.000000 -24 4 2 1 B-10 P0 0.000000 -25 4 2 1 B-10 P1 0.000000 -26 4 2 1 B-10 P2 0.000000 -27 4 2 1 B-10 P3 0.000000 -28 4 2 1 B-11 P0 0.000000 -29 4 2 1 B-11 P1 0.000000 -30 4 2 1 B-11 P2 0.000000 -31 4 2 1 B-11 P3 0.000000 -0 4 2 2 H-1 P0 1.672065 -1 4 2 2 H-1 P1 0.493252 -2 4 2 2 H-1 P2 0.104511 -3 4 2 2 H-1 P3 0.039078 -4 4 2 2 O-16 P0 0.092584 -5 4 2 2 O-16 P1 0.007443 -6 4 2 2 O-16 P2 -0.005485 -7 4 2 2 O-16 P3 -0.006103 -8 4 2 2 B-10 P0 0.000000 -9 4 2 2 B-10 P1 0.000000 -10 4 2 2 B-10 P2 0.000000 -11 4 2 2 B-10 P3 0.000000 -12 4 2 2 B-11 P0 0.000000 -13 4 2 2 B-11 P1 0.000000 -14 4 2 2 B-11 P2 0.000000 -15 4 2 2 B-11 P3 0.000000 material group out nuclide mean std. dev. -4 4 1 H-1 0 0 -5 4 1 O-16 0 0 -6 4 1 B-10 0 0 -7 4 1 B-11 0 0 -0 4 2 H-1 0 0 -1 4 2 O-16 0 0 -2 4 2 B-10 0 0 -3 4 2 B-11 0 0 material group in nuclide mean std. dev. -27 5 1 Fe-54 0 0 -28 5 1 Fe-56 0 0 -29 5 1 Fe-57 0 0 -30 5 1 Fe-58 0 0 -31 5 1 Ni-58 0 0 -32 5 1 Ni-60 0 0 -33 5 1 Ni-61 0 0 -34 5 1 Ni-62 0 0 -35 5 1 Ni-64 0 0 -36 5 1 Mn-55 0 0 -37 5 1 Mo-92 0 0 -38 5 1 Mo-94 0 0 -39 5 1 Mo-95 0 0 -40 5 1 Mo-96 0 0 -41 5 1 Mo-97 0 0 -42 5 1 Mo-98 0 0 -43 5 1 Mo-100 0 0 -44 5 1 Si-28 0 0 -45 5 1 Si-29 0 0 -46 5 1 Si-30 0 0 -47 5 1 Cr-50 0 0 -48 5 1 Cr-52 0 0 -49 5 1 Cr-53 0 0 -50 5 1 Cr-54 0 0 -51 5 1 C-Nat 0 0 -52 5 1 Cu-63 0 0 -53 5 1 Cu-65 0 0 -0 5 2 Fe-54 0 0 -1 5 2 Fe-56 0 0 -2 5 2 Fe-57 0 0 -3 5 2 Fe-58 0 0 -4 5 2 Ni-58 0 0 -5 5 2 Ni-60 0 0 -6 5 2 Ni-61 0 0 -7 5 2 Ni-62 0 0 -8 5 2 Ni-64 0 0 -9 5 2 Mn-55 0 0 -10 5 2 Mo-92 0 0 -11 5 2 Mo-94 0 0 -12 5 2 Mo-95 0 0 -13 5 2 Mo-96 0 0 -14 5 2 Mo-97 0 0 -15 5 2 Mo-98 0 0 -16 5 2 Mo-100 0 0 -17 5 2 Si-28 0 0 -18 5 2 Si-29 0 0 -19 5 2 Si-30 0 0 -20 5 2 Cr-50 0 0 -21 5 2 Cr-52 0 0 -22 5 2 Cr-53 0 0 -23 5 2 Cr-54 0 0 -24 5 2 C-Nat 0 0 -25 5 2 Cu-63 0 0 -26 5 2 Cu-65 0 0 material group in nuclide mean std. dev. -27 5 1 Fe-54 0 0 -28 5 1 Fe-56 0 0 -29 5 1 Fe-57 0 0 -30 5 1 Fe-58 0 0 -31 5 1 Ni-58 0 0 -32 5 1 Ni-60 0 0 -33 5 1 Ni-61 0 0 -34 5 1 Ni-62 0 0 -35 5 1 Ni-64 0 0 -36 5 1 Mn-55 0 0 -37 5 1 Mo-92 0 0 -38 5 1 Mo-94 0 0 -39 5 1 Mo-95 0 0 -40 5 1 Mo-96 0 0 -41 5 1 Mo-97 0 0 -42 5 1 Mo-98 0 0 -43 5 1 Mo-100 0 0 -44 5 1 Si-28 0 0 -45 5 1 Si-29 0 0 -46 5 1 Si-30 0 0 -47 5 1 Cr-50 0 0 -48 5 1 Cr-52 0 0 -49 5 1 Cr-53 0 0 -50 5 1 Cr-54 0 0 -51 5 1 C-Nat 0 0 -52 5 1 Cu-63 0 0 -53 5 1 Cu-65 0 0 -0 5 2 Fe-54 0 0 -1 5 2 Fe-56 0 0 -2 5 2 Fe-57 0 0 -3 5 2 Fe-58 0 0 -4 5 2 Ni-58 0 0 -5 5 2 Ni-60 0 0 -6 5 2 Ni-61 0 0 -7 5 2 Ni-62 0 0 -8 5 2 Ni-64 0 0 -9 5 2 Mn-55 0 0 -10 5 2 Mo-92 0 0 -11 5 2 Mo-94 0 0 -12 5 2 Mo-95 0 0 -13 5 2 Mo-96 0 0 -14 5 2 Mo-97 0 0 -15 5 2 Mo-98 0 0 -16 5 2 Mo-100 0 0 -17 5 2 Si-28 0 0 -18 5 2 Si-29 0 0 -19 5 2 Si-30 0 0 -20 5 2 Cr-50 0 0 -21 5 2 Cr-52 0 0 -22 5 2 Cr-53 0 0 -23 5 2 Cr-54 0 0 -24 5 2 C-Nat 0 0 -25 5 2 Cu-63 0 0 -26 5 2 Cu-65 0 0 material group in group out nuclide moment mean -324 5 1 1 Fe-54 P0 0 -325 5 1 1 Fe-54 P1 0 -326 5 1 1 Fe-54 P2 0 -327 5 1 1 Fe-54 P3 0 -328 5 1 1 Fe-56 P0 0 -329 5 1 1 Fe-56 P1 0 -330 5 1 1 Fe-56 P2 0 -331 5 1 1 Fe-56 P3 0 -332 5 1 1 Fe-57 P0 0 -333 5 1 1 Fe-57 P1 0 -334 5 1 1 Fe-57 P2 0 -335 5 1 1 Fe-57 P3 0 -336 5 1 1 Fe-58 P0 0 -337 5 1 1 Fe-58 P1 0 -338 5 1 1 Fe-58 P2 0 -339 5 1 1 Fe-58 P3 0 -340 5 1 1 Ni-58 P0 0 -341 5 1 1 Ni-58 P1 0 -342 5 1 1 Ni-58 P2 0 -343 5 1 1 Ni-58 P3 0 -344 5 1 1 Ni-60 P0 0 -345 5 1 1 Ni-60 P1 0 -346 5 1 1 Ni-60 P2 0 -347 5 1 1 Ni-60 P3 0 -348 5 1 1 Ni-61 P0 0 -349 5 1 1 Ni-61 P1 0 -350 5 1 1 Ni-61 P2 0 -351 5 1 1 Ni-61 P3 0 -352 5 1 1 Ni-62 P0 0 -353 5 1 1 Ni-62 P1 0 -354 5 1 1 Ni-62 P2 0 -355 5 1 1 Ni-62 P3 0 -356 5 1 1 Ni-64 P0 0 -357 5 1 1 Ni-64 P1 0 -358 5 1 1 Ni-64 P2 0 -359 5 1 1 Ni-64 P3 0 -360 5 1 1 Mn-55 P0 0 -361 5 1 1 Mn-55 P1 0 -362 5 1 1 Mn-55 P2 0 -363 5 1 1 Mn-55 P3 0 -364 5 1 1 Mo-92 P0 0 -365 5 1 1 Mo-92 P1 0 -366 5 1 1 Mo-92 P2 0 -367 5 1 1 Mo-92 P3 0 -368 5 1 1 Mo-94 P0 0 -369 5 1 1 Mo-94 P1 0 -370 5 1 1 Mo-94 P2 0 -371 5 1 1 Mo-94 P3 0 -372 5 1 1 Mo-95 P0 0 -373 5 1 1 Mo-95 P1 0 -374 5 1 1 Mo-95 P2 0 -375 5 1 1 Mo-95 P3 0 -376 5 1 1 Mo-96 P0 0 -377 5 1 1 Mo-96 P1 0 -378 5 1 1 Mo-96 P2 0 -379 5 1 1 Mo-96 P3 0 -380 5 1 1 Mo-97 P0 0 -381 5 1 1 Mo-97 P1 0 -382 5 1 1 Mo-97 P2 0 -383 5 1 1 Mo-97 P3 0 -384 5 1 1 Mo-98 P0 0 -385 5 1 1 Mo-98 P1 0 -386 5 1 1 Mo-98 P2 0 -387 5 1 1 Mo-98 P3 0 -388 5 1 1 Mo-100 P0 0 -389 5 1 1 Mo-100 P1 0 -390 5 1 1 Mo-100 P2 0 -391 5 1 1 Mo-100 P3 0 -392 5 1 1 Si-28 P0 0 -393 5 1 1 Si-28 P1 0 -394 5 1 1 Si-28 P2 0 -395 5 1 1 Si-28 P3 0 -396 5 1 1 Si-29 P0 0 -397 5 1 1 Si-29 P1 0 -398 5 1 1 Si-29 P2 0 -399 5 1 1 Si-29 P3 0 -400 5 1 1 Si-30 P0 0 -401 5 1 1 Si-30 P1 0 -402 5 1 1 Si-30 P2 0 -403 5 1 1 Si-30 P3 0 -404 5 1 1 Cr-50 P0 0 -405 5 1 1 Cr-50 P1 0 -406 5 1 1 Cr-50 P2 0 -407 5 1 1 Cr-50 P3 0 -408 5 1 1 Cr-52 P0 0 -409 5 1 1 Cr-52 P1 0 -410 5 1 1 Cr-52 P2 0 -411 5 1 1 Cr-52 P3 0 -412 5 1 1 Cr-53 P0 0 -413 5 1 1 Cr-53 P1 0 -414 5 1 1 Cr-53 P2 0 -415 5 1 1 Cr-53 P3 0 -416 5 1 1 Cr-54 P0 0 -417 5 1 1 Cr-54 P1 0 -418 5 1 1 Cr-54 P2 0 -419 5 1 1 Cr-54 P3 0 -420 5 1 1 C-Nat P0 0 -421 5 1 1 C-Nat P1 0 -422 5 1 1 C-Nat P2 0 -423 5 1 1 C-Nat P3 0 -424 5 1 1 Cu-63 P0 0 -425 5 1 1 Cu-63 P1 0 -426 5 1 1 Cu-63 P2 0 -427 5 1 1 Cu-63 P3 0 -428 5 1 1 Cu-65 P0 0 -429 5 1 1 Cu-65 P1 0 -430 5 1 1 Cu-65 P2 0 -431 5 1 1 Cu-65 P3 0 -216 5 1 2 Fe-54 P0 0 -217 5 1 2 Fe-54 P1 0 -218 5 1 2 Fe-54 P2 0 -219 5 1 2 Fe-54 P3 0 -220 5 1 2 Fe-56 P0 0 -221 5 1 2 Fe-56 P1 0 -222 5 1 2 Fe-56 P2 0 -223 5 1 2 Fe-56 P3 0 -224 5 1 2 Fe-57 P0 0 -225 5 1 2 Fe-57 P1 0 -226 5 1 2 Fe-57 P2 0 -227 5 1 2 Fe-57 P3 0 -228 5 1 2 Fe-58 P0 0 -229 5 1 2 Fe-58 P1 0 -230 5 1 2 Fe-58 P2 0 -231 5 1 2 Fe-58 P3 0 -232 5 1 2 Ni-58 P0 0 -233 5 1 2 Ni-58 P1 0 -234 5 1 2 Ni-58 P2 0 -235 5 1 2 Ni-58 P3 0 -236 5 1 2 Ni-60 P0 0 -237 5 1 2 Ni-60 P1 0 -238 5 1 2 Ni-60 P2 0 -239 5 1 2 Ni-60 P3 0 -240 5 1 2 Ni-61 P0 0 -241 5 1 2 Ni-61 P1 0 -242 5 1 2 Ni-61 P2 0 -243 5 1 2 Ni-61 P3 0 -244 5 1 2 Ni-62 P0 0 -245 5 1 2 Ni-62 P1 0 -246 5 1 2 Ni-62 P2 0 -247 5 1 2 Ni-62 P3 0 -248 5 1 2 Ni-64 P0 0 -249 5 1 2 Ni-64 P1 0 -250 5 1 2 Ni-64 P2 0 -251 5 1 2 Ni-64 P3 0 -252 5 1 2 Mn-55 P0 0 -253 5 1 2 Mn-55 P1 0 -254 5 1 2 Mn-55 P2 0 -255 5 1 2 Mn-55 P3 0 -256 5 1 2 Mo-92 P0 0 -257 5 1 2 Mo-92 P1 0 -258 5 1 2 Mo-92 P2 0 -259 5 1 2 Mo-92 P3 0 -260 5 1 2 Mo-94 P0 0 -261 5 1 2 Mo-94 P1 0 -262 5 1 2 Mo-94 P2 0 -263 5 1 2 Mo-94 P3 0 -264 5 1 2 Mo-95 P0 0 -265 5 1 2 Mo-95 P1 0 -266 5 1 2 Mo-95 P2 0 -267 5 1 2 Mo-95 P3 0 -268 5 1 2 Mo-96 P0 0 -269 5 1 2 Mo-96 P1 0 -270 5 1 2 Mo-96 P2 0 -271 5 1 2 Mo-96 P3 0 -272 5 1 2 Mo-97 P0 0 -273 5 1 2 Mo-97 P1 0 -274 5 1 2 Mo-97 P2 0 -275 5 1 2 Mo-97 P3 0 -276 5 1 2 Mo-98 P0 0 -277 5 1 2 Mo-98 P1 0 -278 5 1 2 Mo-98 P2 0 -279 5 1 2 Mo-98 P3 0 -280 5 1 2 Mo-100 P0 0 -281 5 1 2 Mo-100 P1 0 -282 5 1 2 Mo-100 P2 0 -283 5 1 2 Mo-100 P3 0 -284 5 1 2 Si-28 P0 0 -285 5 1 2 Si-28 P1 0 -286 5 1 2 Si-28 P2 0 -287 5 1 2 Si-28 P3 0 -288 5 1 2 Si-29 P0 0 -289 5 1 2 Si-29 P1 0 -290 5 1 2 Si-29 P2 0 -291 5 1 2 Si-29 P3 0 -292 5 1 2 Si-30 P0 0 -293 5 1 2 Si-30 P1 0 -294 5 1 2 Si-30 P2 0 -295 5 1 2 Si-30 P3 0 -296 5 1 2 Cr-50 P0 0 -297 5 1 2 Cr-50 P1 0 -298 5 1 2 Cr-50 P2 0 -299 5 1 2 Cr-50 P3 0 -300 5 1 2 Cr-52 P0 0 -301 5 1 2 Cr-52 P1 0 -302 5 1 2 Cr-52 P2 0 -303 5 1 2 Cr-52 P3 0 -304 5 1 2 Cr-53 P0 0 -305 5 1 2 Cr-53 P1 0 -306 5 1 2 Cr-53 P2 0 -307 5 1 2 Cr-53 P3 0 -308 5 1 2 Cr-54 P0 0 -309 5 1 2 Cr-54 P1 0 -310 5 1 2 Cr-54 P2 0 -311 5 1 2 Cr-54 P3 0 -312 5 1 2 C-Nat P0 0 -313 5 1 2 C-Nat P1 0 -314 5 1 2 C-Nat P2 0 -315 5 1 2 C-Nat P3 0 -316 5 1 2 Cu-63 P0 0 -317 5 1 2 Cu-63 P1 0 -318 5 1 2 Cu-63 P2 0 -319 5 1 2 Cu-63 P3 0 -320 5 1 2 Cu-65 P0 0 -321 5 1 2 Cu-65 P1 0 -322 5 1 2 Cu-65 P2 0 -323 5 1 2 Cu-65 P3 0 -108 5 2 1 Fe-54 P0 0 -109 5 2 1 Fe-54 P1 0 -110 5 2 1 Fe-54 P2 0 -111 5 2 1 Fe-54 P3 0 -112 5 2 1 Fe-56 P0 0 -113 5 2 1 Fe-56 P1 0 -114 5 2 1 Fe-56 P2 0 -115 5 2 1 Fe-56 P3 0 -116 5 2 1 Fe-57 P0 0 -117 5 2 1 Fe-57 P1 0 -118 5 2 1 Fe-57 P2 0 -119 5 2 1 Fe-57 P3 0 -120 5 2 1 Fe-58 P0 0 -121 5 2 1 Fe-58 P1 0 -122 5 2 1 Fe-58 P2 0 -123 5 2 1 Fe-58 P3 0 -124 5 2 1 Ni-58 P0 0 -125 5 2 1 Ni-58 P1 0 -126 5 2 1 Ni-58 P2 0 -127 5 2 1 Ni-58 P3 0 -128 5 2 1 Ni-60 P0 0 -129 5 2 1 Ni-60 P1 0 -130 5 2 1 Ni-60 P2 0 -131 5 2 1 Ni-60 P3 0 -132 5 2 1 Ni-61 P0 0 -133 5 2 1 Ni-61 P1 0 -134 5 2 1 Ni-61 P2 0 -135 5 2 1 Ni-61 P3 0 -136 5 2 1 Ni-62 P0 0 -137 5 2 1 Ni-62 P1 0 -138 5 2 1 Ni-62 P2 0 -139 5 2 1 Ni-62 P3 0 -140 5 2 1 Ni-64 P0 0 -141 5 2 1 Ni-64 P1 0 -142 5 2 1 Ni-64 P2 0 -143 5 2 1 Ni-64 P3 0 -144 5 2 1 Mn-55 P0 0 -145 5 2 1 Mn-55 P1 0 -146 5 2 1 Mn-55 P2 0 -147 5 2 1 Mn-55 P3 0 -148 5 2 1 Mo-92 P0 0 -149 5 2 1 Mo-92 P1 0 -150 5 2 1 Mo-92 P2 0 -151 5 2 1 Mo-92 P3 0 -152 5 2 1 Mo-94 P0 0 -153 5 2 1 Mo-94 P1 0 -154 5 2 1 Mo-94 P2 0 -155 5 2 1 Mo-94 P3 0 -156 5 2 1 Mo-95 P0 0 -157 5 2 1 Mo-95 P1 0 -158 5 2 1 Mo-95 P2 0 -159 5 2 1 Mo-95 P3 0 -160 5 2 1 Mo-96 P0 0 -161 5 2 1 Mo-96 P1 0 -162 5 2 1 Mo-96 P2 0 -163 5 2 1 Mo-96 P3 0 -164 5 2 1 Mo-97 P0 0 -165 5 2 1 Mo-97 P1 0 -166 5 2 1 Mo-97 P2 0 -167 5 2 1 Mo-97 P3 0 -168 5 2 1 Mo-98 P0 0 -169 5 2 1 Mo-98 P1 0 -170 5 2 1 Mo-98 P2 0 -171 5 2 1 Mo-98 P3 0 -172 5 2 1 Mo-100 P0 0 -173 5 2 1 Mo-100 P1 0 -174 5 2 1 Mo-100 P2 0 -175 5 2 1 Mo-100 P3 0 -176 5 2 1 Si-28 P0 0 -177 5 2 1 Si-28 P1 0 -178 5 2 1 Si-28 P2 0 -179 5 2 1 Si-28 P3 0 -180 5 2 1 Si-29 P0 0 -181 5 2 1 Si-29 P1 0 -182 5 2 1 Si-29 P2 0 -183 5 2 1 Si-29 P3 0 -184 5 2 1 Si-30 P0 0 -185 5 2 1 Si-30 P1 0 -186 5 2 1 Si-30 P2 0 -187 5 2 1 Si-30 P3 0 -188 5 2 1 Cr-50 P0 0 -189 5 2 1 Cr-50 P1 0 -190 5 2 1 Cr-50 P2 0 -191 5 2 1 Cr-50 P3 0 -192 5 2 1 Cr-52 P0 0 -193 5 2 1 Cr-52 P1 0 -194 5 2 1 Cr-52 P2 0 -195 5 2 1 Cr-52 P3 0 -196 5 2 1 Cr-53 P0 0 -197 5 2 1 Cr-53 P1 0 -198 5 2 1 Cr-53 P2 0 -199 5 2 1 Cr-53 P3 0 -200 5 2 1 Cr-54 P0 0 -201 5 2 1 Cr-54 P1 0 -202 5 2 1 Cr-54 P2 0 -203 5 2 1 Cr-54 P3 0 -204 5 2 1 C-Nat P0 0 -205 5 2 1 C-Nat P1 0 -206 5 2 1 C-Nat P2 0 -207 5 2 1 C-Nat P3 0 -208 5 2 1 Cu-63 P0 0 -209 5 2 1 Cu-63 P1 0 -210 5 2 1 Cu-63 P2 0 -211 5 2 1 Cu-63 P3 0 -212 5 2 1 Cu-65 P0 0 -213 5 2 1 Cu-65 P1 0 -214 5 2 1 Cu-65 P2 0 -215 5 2 1 Cu-65 P3 0 -0 5 2 2 Fe-54 P0 0 -1 5 2 2 Fe-54 P1 0 -2 5 2 2 Fe-54 P2 0 -3 5 2 2 Fe-54 P3 0 -4 5 2 2 Fe-56 P0 0 -5 5 2 2 Fe-56 P1 0 -6 5 2 2 Fe-56 P2 0 -7 5 2 2 Fe-56 P3 0 -8 5 2 2 Fe-57 P0 0 -9 5 2 2 Fe-57 P1 0 -10 5 2 2 Fe-57 P2 0 -11 5 2 2 Fe-57 P3 0 -12 5 2 2 Fe-58 P0 0 -13 5 2 2 Fe-58 P1 0 -14 5 2 2 Fe-58 P2 0 -15 5 2 2 Fe-58 P3 0 -16 5 2 2 Ni-58 P0 0 -17 5 2 2 Ni-58 P1 0 -18 5 2 2 Ni-58 P2 0 -19 5 2 2 Ni-58 P3 0 -20 5 2 2 Ni-60 P0 0 -21 5 2 2 Ni-60 P1 0 -22 5 2 2 Ni-60 P2 0 -23 5 2 2 Ni-60 P3 0 -24 5 2 2 Ni-61 P0 0 -25 5 2 2 Ni-61 P1 0 -26 5 2 2 Ni-61 P2 0 -27 5 2 2 Ni-61 P3 0 -28 5 2 2 Ni-62 P0 0 -29 5 2 2 Ni-62 P1 0 -30 5 2 2 Ni-62 P2 0 -31 5 2 2 Ni-62 P3 0 -32 5 2 2 Ni-64 P0 0 -33 5 2 2 Ni-64 P1 0 -34 5 2 2 Ni-64 P2 0 -35 5 2 2 Ni-64 P3 0 -36 5 2 2 Mn-55 P0 0 -37 5 2 2 Mn-55 P1 0 -38 5 2 2 Mn-55 P2 0 -39 5 2 2 Mn-55 P3 0 -40 5 2 2 Mo-92 P0 0 -41 5 2 2 Mo-92 P1 0 -42 5 2 2 Mo-92 P2 0 -43 5 2 2 Mo-92 P3 0 -44 5 2 2 Mo-94 P0 0 -45 5 2 2 Mo-94 P1 0 -46 5 2 2 Mo-94 P2 0 -47 5 2 2 Mo-94 P3 0 -48 5 2 2 Mo-95 P0 0 -49 5 2 2 Mo-95 P1 0 -50 5 2 2 Mo-95 P2 0 -51 5 2 2 Mo-95 P3 0 -52 5 2 2 Mo-96 P0 0 -53 5 2 2 Mo-96 P1 0 -54 5 2 2 Mo-96 P2 0 -55 5 2 2 Mo-96 P3 0 -56 5 2 2 Mo-97 P0 0 -57 5 2 2 Mo-97 P1 0 -58 5 2 2 Mo-97 P2 0 -59 5 2 2 Mo-97 P3 0 -60 5 2 2 Mo-98 P0 0 -61 5 2 2 Mo-98 P1 0 -62 5 2 2 Mo-98 P2 0 -63 5 2 2 Mo-98 P3 0 -64 5 2 2 Mo-100 P0 0 -65 5 2 2 Mo-100 P1 0 -66 5 2 2 Mo-100 P2 0 -67 5 2 2 Mo-100 P3 0 -68 5 2 2 Si-28 P0 0 -69 5 2 2 Si-28 P1 0 -70 5 2 2 Si-28 P2 0 -71 5 2 2 Si-28 P3 0 -72 5 2 2 Si-29 P0 0 -73 5 2 2 Si-29 P1 0 -74 5 2 2 Si-29 P2 0 -75 5 2 2 Si-29 P3 0 -76 5 2 2 Si-30 P0 0 -77 5 2 2 Si-30 P1 0 -78 5 2 2 Si-30 P2 0 -79 5 2 2 Si-30 P3 0 -80 5 2 2 Cr-50 P0 0 -81 5 2 2 Cr-50 P1 0 -82 5 2 2 Cr-50 P2 0 -83 5 2 2 Cr-50 P3 0 -84 5 2 2 Cr-52 P0 0 -85 5 2 2 Cr-52 P1 0 -86 5 2 2 Cr-52 P2 0 -87 5 2 2 Cr-52 P3 0 -88 5 2 2 Cr-53 P0 0 -89 5 2 2 Cr-53 P1 0 -90 5 2 2 Cr-53 P2 0 -91 5 2 2 Cr-53 P3 0 -92 5 2 2 Cr-54 P0 0 -93 5 2 2 Cr-54 P1 0 -94 5 2 2 Cr-54 P2 0 -95 5 2 2 Cr-54 P3 0 -96 5 2 2 C-Nat P0 0 -97 5 2 2 C-Nat P1 0 -98 5 2 2 C-Nat P2 0 -99 5 2 2 C-Nat P3 0 -100 5 2 2 Cu-63 P0 0 -101 5 2 2 Cu-63 P1 0 -102 5 2 2 Cu-63 P2 0 -103 5 2 2 Cu-63 P3 0 -104 5 2 2 Cu-65 P0 0 -105 5 2 2 Cu-65 P1 0 -106 5 2 2 Cu-65 P2 0 -107 5 2 2 Cu-65 P3 0 material group out nuclide mean std. dev. -27 5 1 Fe-54 0 0 -28 5 1 Fe-56 0 0 -29 5 1 Fe-57 0 0 -30 5 1 Fe-58 0 0 -31 5 1 Ni-58 0 0 -32 5 1 Ni-60 0 0 -33 5 1 Ni-61 0 0 -34 5 1 Ni-62 0 0 -35 5 1 Ni-64 0 0 -36 5 1 Mn-55 0 0 -37 5 1 Mo-92 0 0 -38 5 1 Mo-94 0 0 -39 5 1 Mo-95 0 0 -40 5 1 Mo-96 0 0 -41 5 1 Mo-97 0 0 -42 5 1 Mo-98 0 0 -43 5 1 Mo-100 0 0 -44 5 1 Si-28 0 0 -45 5 1 Si-29 0 0 -46 5 1 Si-30 0 0 -47 5 1 Cr-50 0 0 -48 5 1 Cr-52 0 0 -49 5 1 Cr-53 0 0 -50 5 1 Cr-54 0 0 -51 5 1 C-Nat 0 0 -52 5 1 Cu-63 0 0 -53 5 1 Cu-65 0 0 -0 5 2 Fe-54 0 0 -1 5 2 Fe-56 0 0 -2 5 2 Fe-57 0 0 -3 5 2 Fe-58 0 0 -4 5 2 Ni-58 0 0 -5 5 2 Ni-60 0 0 -6 5 2 Ni-61 0 0 -7 5 2 Ni-62 0 0 -8 5 2 Ni-64 0 0 -9 5 2 Mn-55 0 0 -10 5 2 Mo-92 0 0 -11 5 2 Mo-94 0 0 -12 5 2 Mo-95 0 0 -13 5 2 Mo-96 0 0 -14 5 2 Mo-97 0 0 -15 5 2 Mo-98 0 0 -16 5 2 Mo-100 0 0 -17 5 2 Si-28 0 0 -18 5 2 Si-29 0 0 -19 5 2 Si-30 0 0 -20 5 2 Cr-50 0 0 -21 5 2 Cr-52 0 0 -22 5 2 Cr-53 0 0 -23 5 2 Cr-54 0 0 -24 5 2 C-Nat 0 0 -25 5 2 Cu-63 0 0 -26 5 2 Cu-65 0 0 material group in nuclide mean std. dev. -21 6 1 H-1 0 0 -22 6 1 O-16 0 0 -23 6 1 B-10 0 0 -24 6 1 B-11 0 0 -25 6 1 Fe-54 0 0 -26 6 1 Fe-56 0 0 -27 6 1 Fe-57 0 0 -28 6 1 Fe-58 0 0 -29 6 1 Ni-58 0 0 -30 6 1 Ni-60 0 0 -31 6 1 Ni-61 0 0 -32 6 1 Ni-62 0 0 -33 6 1 Ni-64 0 0 -34 6 1 Mn-55 0 0 -35 6 1 Si-28 0 0 -36 6 1 Si-29 0 0 -37 6 1 Si-30 0 0 -38 6 1 Cr-50 0 0 -39 6 1 Cr-52 0 0 -40 6 1 Cr-53 0 0 -41 6 1 Cr-54 0 0 -0 6 2 H-1 0 0 -1 6 2 O-16 0 0 -2 6 2 B-10 0 0 -3 6 2 B-11 0 0 -4 6 2 Fe-54 0 0 -5 6 2 Fe-56 0 0 -6 6 2 Fe-57 0 0 -7 6 2 Fe-58 0 0 -8 6 2 Ni-58 0 0 -9 6 2 Ni-60 0 0 -10 6 2 Ni-61 0 0 -11 6 2 Ni-62 0 0 -12 6 2 Ni-64 0 0 -13 6 2 Mn-55 0 0 -14 6 2 Si-28 0 0 -15 6 2 Si-29 0 0 -16 6 2 Si-30 0 0 -17 6 2 Cr-50 0 0 -18 6 2 Cr-52 0 0 -19 6 2 Cr-53 0 0 -20 6 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 6 1 H-1 0 0 -22 6 1 O-16 0 0 -23 6 1 B-10 0 0 -24 6 1 B-11 0 0 -25 6 1 Fe-54 0 0 -26 6 1 Fe-56 0 0 -27 6 1 Fe-57 0 0 -28 6 1 Fe-58 0 0 -29 6 1 Ni-58 0 0 -30 6 1 Ni-60 0 0 -31 6 1 Ni-61 0 0 -32 6 1 Ni-62 0 0 -33 6 1 Ni-64 0 0 -34 6 1 Mn-55 0 0 -35 6 1 Si-28 0 0 -36 6 1 Si-29 0 0 -37 6 1 Si-30 0 0 -38 6 1 Cr-50 0 0 -39 6 1 Cr-52 0 0 -40 6 1 Cr-53 0 0 -41 6 1 Cr-54 0 0 -0 6 2 H-1 0 0 -1 6 2 O-16 0 0 -2 6 2 B-10 0 0 -3 6 2 B-11 0 0 -4 6 2 Fe-54 0 0 -5 6 2 Fe-56 0 0 -6 6 2 Fe-57 0 0 -7 6 2 Fe-58 0 0 -8 6 2 Ni-58 0 0 -9 6 2 Ni-60 0 0 -10 6 2 Ni-61 0 0 -11 6 2 Ni-62 0 0 -12 6 2 Ni-64 0 0 -13 6 2 Mn-55 0 0 -14 6 2 Si-28 0 0 -15 6 2 Si-29 0 0 -16 6 2 Si-30 0 0 -17 6 2 Cr-50 0 0 -18 6 2 Cr-52 0 0 -19 6 2 Cr-53 0 0 -20 6 2 Cr-54 0 0 material group in group out nuclide moment mean -252 6 1 1 H-1 P0 0 -253 6 1 1 H-1 P1 0 -254 6 1 1 H-1 P2 0 -255 6 1 1 H-1 P3 0 -256 6 1 1 O-16 P0 0 -257 6 1 1 O-16 P1 0 -258 6 1 1 O-16 P2 0 -259 6 1 1 O-16 P3 0 -260 6 1 1 B-10 P0 0 -261 6 1 1 B-10 P1 0 -262 6 1 1 B-10 P2 0 -263 6 1 1 B-10 P3 0 -264 6 1 1 B-11 P0 0 -265 6 1 1 B-11 P1 0 -266 6 1 1 B-11 P2 0 -267 6 1 1 B-11 P3 0 -268 6 1 1 Fe-54 P0 0 -269 6 1 1 Fe-54 P1 0 -270 6 1 1 Fe-54 P2 0 -271 6 1 1 Fe-54 P3 0 -272 6 1 1 Fe-56 P0 0 -273 6 1 1 Fe-56 P1 0 -274 6 1 1 Fe-56 P2 0 -275 6 1 1 Fe-56 P3 0 -276 6 1 1 Fe-57 P0 0 -277 6 1 1 Fe-57 P1 0 -278 6 1 1 Fe-57 P2 0 -279 6 1 1 Fe-57 P3 0 -280 6 1 1 Fe-58 P0 0 -281 6 1 1 Fe-58 P1 0 -282 6 1 1 Fe-58 P2 0 -283 6 1 1 Fe-58 P3 0 -284 6 1 1 Ni-58 P0 0 -285 6 1 1 Ni-58 P1 0 -286 6 1 1 Ni-58 P2 0 -287 6 1 1 Ni-58 P3 0 -288 6 1 1 Ni-60 P0 0 -289 6 1 1 Ni-60 P1 0 -290 6 1 1 Ni-60 P2 0 -291 6 1 1 Ni-60 P3 0 -292 6 1 1 Ni-61 P0 0 -293 6 1 1 Ni-61 P1 0 -294 6 1 1 Ni-61 P2 0 -295 6 1 1 Ni-61 P3 0 -296 6 1 1 Ni-62 P0 0 -297 6 1 1 Ni-62 P1 0 -298 6 1 1 Ni-62 P2 0 -299 6 1 1 Ni-62 P3 0 -300 6 1 1 Ni-64 P0 0 -301 6 1 1 Ni-64 P1 0 -302 6 1 1 Ni-64 P2 0 -303 6 1 1 Ni-64 P3 0 -304 6 1 1 Mn-55 P0 0 -305 6 1 1 Mn-55 P1 0 -306 6 1 1 Mn-55 P2 0 -307 6 1 1 Mn-55 P3 0 -308 6 1 1 Si-28 P0 0 -309 6 1 1 Si-28 P1 0 -310 6 1 1 Si-28 P2 0 -311 6 1 1 Si-28 P3 0 -312 6 1 1 Si-29 P0 0 -313 6 1 1 Si-29 P1 0 -314 6 1 1 Si-29 P2 0 -315 6 1 1 Si-29 P3 0 -316 6 1 1 Si-30 P0 0 -317 6 1 1 Si-30 P1 0 -318 6 1 1 Si-30 P2 0 -319 6 1 1 Si-30 P3 0 -320 6 1 1 Cr-50 P0 0 -321 6 1 1 Cr-50 P1 0 -322 6 1 1 Cr-50 P2 0 -323 6 1 1 Cr-50 P3 0 -324 6 1 1 Cr-52 P0 0 -325 6 1 1 Cr-52 P1 0 -326 6 1 1 Cr-52 P2 0 -327 6 1 1 Cr-52 P3 0 -328 6 1 1 Cr-53 P0 0 -329 6 1 1 Cr-53 P1 0 -330 6 1 1 Cr-53 P2 0 -331 6 1 1 Cr-53 P3 0 -332 6 1 1 Cr-54 P0 0 -333 6 1 1 Cr-54 P1 0 -334 6 1 1 Cr-54 P2 0 -335 6 1 1 Cr-54 P3 0 -168 6 1 2 H-1 P0 0 -169 6 1 2 H-1 P1 0 -170 6 1 2 H-1 P2 0 -171 6 1 2 H-1 P3 0 -172 6 1 2 O-16 P0 0 -173 6 1 2 O-16 P1 0 -174 6 1 2 O-16 P2 0 -175 6 1 2 O-16 P3 0 -176 6 1 2 B-10 P0 0 -177 6 1 2 B-10 P1 0 -178 6 1 2 B-10 P2 0 -179 6 1 2 B-10 P3 0 -180 6 1 2 B-11 P0 0 -181 6 1 2 B-11 P1 0 -182 6 1 2 B-11 P2 0 -183 6 1 2 B-11 P3 0 -184 6 1 2 Fe-54 P0 0 -185 6 1 2 Fe-54 P1 0 -186 6 1 2 Fe-54 P2 0 -187 6 1 2 Fe-54 P3 0 -188 6 1 2 Fe-56 P0 0 -189 6 1 2 Fe-56 P1 0 -190 6 1 2 Fe-56 P2 0 -191 6 1 2 Fe-56 P3 0 -192 6 1 2 Fe-57 P0 0 -193 6 1 2 Fe-57 P1 0 -194 6 1 2 Fe-57 P2 0 -195 6 1 2 Fe-57 P3 0 -196 6 1 2 Fe-58 P0 0 -197 6 1 2 Fe-58 P1 0 -198 6 1 2 Fe-58 P2 0 -199 6 1 2 Fe-58 P3 0 -200 6 1 2 Ni-58 P0 0 -201 6 1 2 Ni-58 P1 0 -202 6 1 2 Ni-58 P2 0 -203 6 1 2 Ni-58 P3 0 -204 6 1 2 Ni-60 P0 0 -205 6 1 2 Ni-60 P1 0 -206 6 1 2 Ni-60 P2 0 -207 6 1 2 Ni-60 P3 0 -208 6 1 2 Ni-61 P0 0 -209 6 1 2 Ni-61 P1 0 -210 6 1 2 Ni-61 P2 0 -211 6 1 2 Ni-61 P3 0 -212 6 1 2 Ni-62 P0 0 -213 6 1 2 Ni-62 P1 0 -214 6 1 2 Ni-62 P2 0 -215 6 1 2 Ni-62 P3 0 -216 6 1 2 Ni-64 P0 0 -217 6 1 2 Ni-64 P1 0 -218 6 1 2 Ni-64 P2 0 -219 6 1 2 Ni-64 P3 0 -220 6 1 2 Mn-55 P0 0 -221 6 1 2 Mn-55 P1 0 -222 6 1 2 Mn-55 P2 0 -223 6 1 2 Mn-55 P3 0 -224 6 1 2 Si-28 P0 0 -225 6 1 2 Si-28 P1 0 -226 6 1 2 Si-28 P2 0 -227 6 1 2 Si-28 P3 0 -228 6 1 2 Si-29 P0 0 -229 6 1 2 Si-29 P1 0 -230 6 1 2 Si-29 P2 0 -231 6 1 2 Si-29 P3 0 -232 6 1 2 Si-30 P0 0 -233 6 1 2 Si-30 P1 0 -234 6 1 2 Si-30 P2 0 -235 6 1 2 Si-30 P3 0 -236 6 1 2 Cr-50 P0 0 -237 6 1 2 Cr-50 P1 0 -238 6 1 2 Cr-50 P2 0 -239 6 1 2 Cr-50 P3 0 -240 6 1 2 Cr-52 P0 0 -241 6 1 2 Cr-52 P1 0 -242 6 1 2 Cr-52 P2 0 -243 6 1 2 Cr-52 P3 0 -244 6 1 2 Cr-53 P0 0 -245 6 1 2 Cr-53 P1 0 -246 6 1 2 Cr-53 P2 0 -247 6 1 2 Cr-53 P3 0 -248 6 1 2 Cr-54 P0 0 -249 6 1 2 Cr-54 P1 0 -250 6 1 2 Cr-54 P2 0 -251 6 1 2 Cr-54 P3 0 -84 6 2 1 H-1 P0 0 -85 6 2 1 H-1 P1 0 -86 6 2 1 H-1 P2 0 -87 6 2 1 H-1 P3 0 -88 6 2 1 O-16 P0 0 -89 6 2 1 O-16 P1 0 -90 6 2 1 O-16 P2 0 -91 6 2 1 O-16 P3 0 -92 6 2 1 B-10 P0 0 -93 6 2 1 B-10 P1 0 -94 6 2 1 B-10 P2 0 -95 6 2 1 B-10 P3 0 -96 6 2 1 B-11 P0 0 -97 6 2 1 B-11 P1 0 -98 6 2 1 B-11 P2 0 -99 6 2 1 B-11 P3 0 -100 6 2 1 Fe-54 P0 0 -101 6 2 1 Fe-54 P1 0 -102 6 2 1 Fe-54 P2 0 -103 6 2 1 Fe-54 P3 0 -104 6 2 1 Fe-56 P0 0 -105 6 2 1 Fe-56 P1 0 -106 6 2 1 Fe-56 P2 0 -107 6 2 1 Fe-56 P3 0 -108 6 2 1 Fe-57 P0 0 -109 6 2 1 Fe-57 P1 0 -110 6 2 1 Fe-57 P2 0 -111 6 2 1 Fe-57 P3 0 -112 6 2 1 Fe-58 P0 0 -113 6 2 1 Fe-58 P1 0 -114 6 2 1 Fe-58 P2 0 -115 6 2 1 Fe-58 P3 0 -116 6 2 1 Ni-58 P0 0 -117 6 2 1 Ni-58 P1 0 -118 6 2 1 Ni-58 P2 0 -119 6 2 1 Ni-58 P3 0 -120 6 2 1 Ni-60 P0 0 -121 6 2 1 Ni-60 P1 0 -122 6 2 1 Ni-60 P2 0 -123 6 2 1 Ni-60 P3 0 -124 6 2 1 Ni-61 P0 0 -125 6 2 1 Ni-61 P1 0 -126 6 2 1 Ni-61 P2 0 -127 6 2 1 Ni-61 P3 0 -128 6 2 1 Ni-62 P0 0 -129 6 2 1 Ni-62 P1 0 -130 6 2 1 Ni-62 P2 0 -131 6 2 1 Ni-62 P3 0 -132 6 2 1 Ni-64 P0 0 -133 6 2 1 Ni-64 P1 0 -134 6 2 1 Ni-64 P2 0 -135 6 2 1 Ni-64 P3 0 -136 6 2 1 Mn-55 P0 0 -137 6 2 1 Mn-55 P1 0 -138 6 2 1 Mn-55 P2 0 -139 6 2 1 Mn-55 P3 0 -140 6 2 1 Si-28 P0 0 -141 6 2 1 Si-28 P1 0 -142 6 2 1 Si-28 P2 0 -143 6 2 1 Si-28 P3 0 -144 6 2 1 Si-29 P0 0 -145 6 2 1 Si-29 P1 0 -146 6 2 1 Si-29 P2 0 -147 6 2 1 Si-29 P3 0 -148 6 2 1 Si-30 P0 0 -149 6 2 1 Si-30 P1 0 -150 6 2 1 Si-30 P2 0 -151 6 2 1 Si-30 P3 0 -152 6 2 1 Cr-50 P0 0 -153 6 2 1 Cr-50 P1 0 -154 6 2 1 Cr-50 P2 0 -155 6 2 1 Cr-50 P3 0 -156 6 2 1 Cr-52 P0 0 -157 6 2 1 Cr-52 P1 0 -158 6 2 1 Cr-52 P2 0 -159 6 2 1 Cr-52 P3 0 -160 6 2 1 Cr-53 P0 0 -161 6 2 1 Cr-53 P1 0 -162 6 2 1 Cr-53 P2 0 -163 6 2 1 Cr-53 P3 0 -164 6 2 1 Cr-54 P0 0 -165 6 2 1 Cr-54 P1 0 -166 6 2 1 Cr-54 P2 0 -167 6 2 1 Cr-54 P3 0 -0 6 2 2 H-1 P0 0 -1 6 2 2 H-1 P1 0 -2 6 2 2 H-1 P2 0 -3 6 2 2 H-1 P3 0 -4 6 2 2 O-16 P0 0 -5 6 2 2 O-16 P1 0 -6 6 2 2 O-16 P2 0 -7 6 2 2 O-16 P3 0 -8 6 2 2 B-10 P0 0 -9 6 2 2 B-10 P1 0 -10 6 2 2 B-10 P2 0 -11 6 2 2 B-10 P3 0 -12 6 2 2 B-11 P0 0 -13 6 2 2 B-11 P1 0 -14 6 2 2 B-11 P2 0 -15 6 2 2 B-11 P3 0 -16 6 2 2 Fe-54 P0 0 -17 6 2 2 Fe-54 P1 0 -18 6 2 2 Fe-54 P2 0 -19 6 2 2 Fe-54 P3 0 -20 6 2 2 Fe-56 P0 0 -21 6 2 2 Fe-56 P1 0 -22 6 2 2 Fe-56 P2 0 -23 6 2 2 Fe-56 P3 0 -24 6 2 2 Fe-57 P0 0 -25 6 2 2 Fe-57 P1 0 -26 6 2 2 Fe-57 P2 0 -27 6 2 2 Fe-57 P3 0 -28 6 2 2 Fe-58 P0 0 -29 6 2 2 Fe-58 P1 0 -30 6 2 2 Fe-58 P2 0 -31 6 2 2 Fe-58 P3 0 -32 6 2 2 Ni-58 P0 0 -33 6 2 2 Ni-58 P1 0 -34 6 2 2 Ni-58 P2 0 -35 6 2 2 Ni-58 P3 0 -36 6 2 2 Ni-60 P0 0 -37 6 2 2 Ni-60 P1 0 -38 6 2 2 Ni-60 P2 0 -39 6 2 2 Ni-60 P3 0 -40 6 2 2 Ni-61 P0 0 -41 6 2 2 Ni-61 P1 0 -42 6 2 2 Ni-61 P2 0 -43 6 2 2 Ni-61 P3 0 -44 6 2 2 Ni-62 P0 0 -45 6 2 2 Ni-62 P1 0 -46 6 2 2 Ni-62 P2 0 -47 6 2 2 Ni-62 P3 0 -48 6 2 2 Ni-64 P0 0 -49 6 2 2 Ni-64 P1 0 -50 6 2 2 Ni-64 P2 0 -51 6 2 2 Ni-64 P3 0 -52 6 2 2 Mn-55 P0 0 -53 6 2 2 Mn-55 P1 0 -54 6 2 2 Mn-55 P2 0 -55 6 2 2 Mn-55 P3 0 -56 6 2 2 Si-28 P0 0 -57 6 2 2 Si-28 P1 0 -58 6 2 2 Si-28 P2 0 -59 6 2 2 Si-28 P3 0 -60 6 2 2 Si-29 P0 0 -61 6 2 2 Si-29 P1 0 -62 6 2 2 Si-29 P2 0 -63 6 2 2 Si-29 P3 0 -64 6 2 2 Si-30 P0 0 -65 6 2 2 Si-30 P1 0 -66 6 2 2 Si-30 P2 0 -67 6 2 2 Si-30 P3 0 -68 6 2 2 Cr-50 P0 0 -69 6 2 2 Cr-50 P1 0 -70 6 2 2 Cr-50 P2 0 -71 6 2 2 Cr-50 P3 0 -72 6 2 2 Cr-52 P0 0 -73 6 2 2 Cr-52 P1 0 -74 6 2 2 Cr-52 P2 0 -75 6 2 2 Cr-52 P3 0 -76 6 2 2 Cr-53 P0 0 -77 6 2 2 Cr-53 P1 0 -78 6 2 2 Cr-53 P2 0 -79 6 2 2 Cr-53 P3 0 -80 6 2 2 Cr-54 P0 0 -81 6 2 2 Cr-54 P1 0 -82 6 2 2 Cr-54 P2 0 -83 6 2 2 Cr-54 P3 0 material group out nuclide mean std. dev. -21 6 1 H-1 0 0 -22 6 1 O-16 0 0 -23 6 1 B-10 0 0 -24 6 1 B-11 0 0 -25 6 1 Fe-54 0 0 -26 6 1 Fe-56 0 0 -27 6 1 Fe-57 0 0 -28 6 1 Fe-58 0 0 -29 6 1 Ni-58 0 0 -30 6 1 Ni-60 0 0 -31 6 1 Ni-61 0 0 -32 6 1 Ni-62 0 0 -33 6 1 Ni-64 0 0 -34 6 1 Mn-55 0 0 -35 6 1 Si-28 0 0 -36 6 1 Si-29 0 0 -37 6 1 Si-30 0 0 -38 6 1 Cr-50 0 0 -39 6 1 Cr-52 0 0 -40 6 1 Cr-53 0 0 -41 6 1 Cr-54 0 0 -0 6 2 H-1 0 0 -1 6 2 O-16 0 0 -2 6 2 B-10 0 0 -3 6 2 B-11 0 0 -4 6 2 Fe-54 0 0 -5 6 2 Fe-56 0 0 -6 6 2 Fe-57 0 0 -7 6 2 Fe-58 0 0 -8 6 2 Ni-58 0 0 -9 6 2 Ni-60 0 0 -10 6 2 Ni-61 0 0 -11 6 2 Ni-62 0 0 -12 6 2 Ni-64 0 0 -13 6 2 Mn-55 0 0 -14 6 2 Si-28 0 0 -15 6 2 Si-29 0 0 -16 6 2 Si-30 0 0 -17 6 2 Cr-50 0 0 -18 6 2 Cr-52 0 0 -19 6 2 Cr-53 0 0 -20 6 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 7 1 H-1 0 0 -22 7 1 O-16 0 0 -23 7 1 B-10 0 0 -24 7 1 B-11 0 0 -25 7 1 Fe-54 0 0 -26 7 1 Fe-56 0 0 -27 7 1 Fe-57 0 0 -28 7 1 Fe-58 0 0 -29 7 1 Ni-58 0 0 -30 7 1 Ni-60 0 0 -31 7 1 Ni-61 0 0 -32 7 1 Ni-62 0 0 -33 7 1 Ni-64 0 0 -34 7 1 Mn-55 0 0 -35 7 1 Si-28 0 0 -36 7 1 Si-29 0 0 -37 7 1 Si-30 0 0 -38 7 1 Cr-50 0 0 -39 7 1 Cr-52 0 0 -40 7 1 Cr-53 0 0 -41 7 1 Cr-54 0 0 -0 7 2 H-1 0 0 -1 7 2 O-16 0 0 -2 7 2 B-10 0 0 -3 7 2 B-11 0 0 -4 7 2 Fe-54 0 0 -5 7 2 Fe-56 0 0 -6 7 2 Fe-57 0 0 -7 7 2 Fe-58 0 0 -8 7 2 Ni-58 0 0 -9 7 2 Ni-60 0 0 -10 7 2 Ni-61 0 0 -11 7 2 Ni-62 0 0 -12 7 2 Ni-64 0 0 -13 7 2 Mn-55 0 0 -14 7 2 Si-28 0 0 -15 7 2 Si-29 0 0 -16 7 2 Si-30 0 0 -17 7 2 Cr-50 0 0 -18 7 2 Cr-52 0 0 -19 7 2 Cr-53 0 0 -20 7 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 7 1 H-1 0 0 -22 7 1 O-16 0 0 -23 7 1 B-10 0 0 -24 7 1 B-11 0 0 -25 7 1 Fe-54 0 0 -26 7 1 Fe-56 0 0 -27 7 1 Fe-57 0 0 -28 7 1 Fe-58 0 0 -29 7 1 Ni-58 0 0 -30 7 1 Ni-60 0 0 -31 7 1 Ni-61 0 0 -32 7 1 Ni-62 0 0 -33 7 1 Ni-64 0 0 -34 7 1 Mn-55 0 0 -35 7 1 Si-28 0 0 -36 7 1 Si-29 0 0 -37 7 1 Si-30 0 0 -38 7 1 Cr-50 0 0 -39 7 1 Cr-52 0 0 -40 7 1 Cr-53 0 0 -41 7 1 Cr-54 0 0 -0 7 2 H-1 0 0 -1 7 2 O-16 0 0 -2 7 2 B-10 0 0 -3 7 2 B-11 0 0 -4 7 2 Fe-54 0 0 -5 7 2 Fe-56 0 0 -6 7 2 Fe-57 0 0 -7 7 2 Fe-58 0 0 -8 7 2 Ni-58 0 0 -9 7 2 Ni-60 0 0 -10 7 2 Ni-61 0 0 -11 7 2 Ni-62 0 0 -12 7 2 Ni-64 0 0 -13 7 2 Mn-55 0 0 -14 7 2 Si-28 0 0 -15 7 2 Si-29 0 0 -16 7 2 Si-30 0 0 -17 7 2 Cr-50 0 0 -18 7 2 Cr-52 0 0 -19 7 2 Cr-53 0 0 -20 7 2 Cr-54 0 0 material group in group out nuclide moment mean -252 7 1 1 H-1 P0 0 -253 7 1 1 H-1 P1 0 -254 7 1 1 H-1 P2 0 -255 7 1 1 H-1 P3 0 -256 7 1 1 O-16 P0 0 -257 7 1 1 O-16 P1 0 -258 7 1 1 O-16 P2 0 -259 7 1 1 O-16 P3 0 -260 7 1 1 B-10 P0 0 -261 7 1 1 B-10 P1 0 -262 7 1 1 B-10 P2 0 -263 7 1 1 B-10 P3 0 -264 7 1 1 B-11 P0 0 -265 7 1 1 B-11 P1 0 -266 7 1 1 B-11 P2 0 -267 7 1 1 B-11 P3 0 -268 7 1 1 Fe-54 P0 0 -269 7 1 1 Fe-54 P1 0 -270 7 1 1 Fe-54 P2 0 -271 7 1 1 Fe-54 P3 0 -272 7 1 1 Fe-56 P0 0 -273 7 1 1 Fe-56 P1 0 -274 7 1 1 Fe-56 P2 0 -275 7 1 1 Fe-56 P3 0 -276 7 1 1 Fe-57 P0 0 -277 7 1 1 Fe-57 P1 0 -278 7 1 1 Fe-57 P2 0 -279 7 1 1 Fe-57 P3 0 -280 7 1 1 Fe-58 P0 0 -281 7 1 1 Fe-58 P1 0 -282 7 1 1 Fe-58 P2 0 -283 7 1 1 Fe-58 P3 0 -284 7 1 1 Ni-58 P0 0 -285 7 1 1 Ni-58 P1 0 -286 7 1 1 Ni-58 P2 0 -287 7 1 1 Ni-58 P3 0 -288 7 1 1 Ni-60 P0 0 -289 7 1 1 Ni-60 P1 0 -290 7 1 1 Ni-60 P2 0 -291 7 1 1 Ni-60 P3 0 -292 7 1 1 Ni-61 P0 0 -293 7 1 1 Ni-61 P1 0 -294 7 1 1 Ni-61 P2 0 -295 7 1 1 Ni-61 P3 0 -296 7 1 1 Ni-62 P0 0 -297 7 1 1 Ni-62 P1 0 -298 7 1 1 Ni-62 P2 0 -299 7 1 1 Ni-62 P3 0 -300 7 1 1 Ni-64 P0 0 -301 7 1 1 Ni-64 P1 0 -302 7 1 1 Ni-64 P2 0 -303 7 1 1 Ni-64 P3 0 -304 7 1 1 Mn-55 P0 0 -305 7 1 1 Mn-55 P1 0 -306 7 1 1 Mn-55 P2 0 -307 7 1 1 Mn-55 P3 0 -308 7 1 1 Si-28 P0 0 -309 7 1 1 Si-28 P1 0 -310 7 1 1 Si-28 P2 0 -311 7 1 1 Si-28 P3 0 -312 7 1 1 Si-29 P0 0 -313 7 1 1 Si-29 P1 0 -314 7 1 1 Si-29 P2 0 -315 7 1 1 Si-29 P3 0 -316 7 1 1 Si-30 P0 0 -317 7 1 1 Si-30 P1 0 -318 7 1 1 Si-30 P2 0 -319 7 1 1 Si-30 P3 0 -320 7 1 1 Cr-50 P0 0 -321 7 1 1 Cr-50 P1 0 -322 7 1 1 Cr-50 P2 0 -323 7 1 1 Cr-50 P3 0 -324 7 1 1 Cr-52 P0 0 -325 7 1 1 Cr-52 P1 0 -326 7 1 1 Cr-52 P2 0 -327 7 1 1 Cr-52 P3 0 -328 7 1 1 Cr-53 P0 0 -329 7 1 1 Cr-53 P1 0 -330 7 1 1 Cr-53 P2 0 -331 7 1 1 Cr-53 P3 0 -332 7 1 1 Cr-54 P0 0 -333 7 1 1 Cr-54 P1 0 -334 7 1 1 Cr-54 P2 0 -335 7 1 1 Cr-54 P3 0 -168 7 1 2 H-1 P0 0 -169 7 1 2 H-1 P1 0 -170 7 1 2 H-1 P2 0 -171 7 1 2 H-1 P3 0 -172 7 1 2 O-16 P0 0 -173 7 1 2 O-16 P1 0 -174 7 1 2 O-16 P2 0 -175 7 1 2 O-16 P3 0 -176 7 1 2 B-10 P0 0 -177 7 1 2 B-10 P1 0 -178 7 1 2 B-10 P2 0 -179 7 1 2 B-10 P3 0 -180 7 1 2 B-11 P0 0 -181 7 1 2 B-11 P1 0 -182 7 1 2 B-11 P2 0 -183 7 1 2 B-11 P3 0 -184 7 1 2 Fe-54 P0 0 -185 7 1 2 Fe-54 P1 0 -186 7 1 2 Fe-54 P2 0 -187 7 1 2 Fe-54 P3 0 -188 7 1 2 Fe-56 P0 0 -189 7 1 2 Fe-56 P1 0 -190 7 1 2 Fe-56 P2 0 -191 7 1 2 Fe-56 P3 0 -192 7 1 2 Fe-57 P0 0 -193 7 1 2 Fe-57 P1 0 -194 7 1 2 Fe-57 P2 0 -195 7 1 2 Fe-57 P3 0 -196 7 1 2 Fe-58 P0 0 -197 7 1 2 Fe-58 P1 0 -198 7 1 2 Fe-58 P2 0 -199 7 1 2 Fe-58 P3 0 -200 7 1 2 Ni-58 P0 0 -201 7 1 2 Ni-58 P1 0 -202 7 1 2 Ni-58 P2 0 -203 7 1 2 Ni-58 P3 0 -204 7 1 2 Ni-60 P0 0 -205 7 1 2 Ni-60 P1 0 -206 7 1 2 Ni-60 P2 0 -207 7 1 2 Ni-60 P3 0 -208 7 1 2 Ni-61 P0 0 -209 7 1 2 Ni-61 P1 0 -210 7 1 2 Ni-61 P2 0 -211 7 1 2 Ni-61 P3 0 -212 7 1 2 Ni-62 P0 0 -213 7 1 2 Ni-62 P1 0 -214 7 1 2 Ni-62 P2 0 -215 7 1 2 Ni-62 P3 0 -216 7 1 2 Ni-64 P0 0 -217 7 1 2 Ni-64 P1 0 -218 7 1 2 Ni-64 P2 0 -219 7 1 2 Ni-64 P3 0 -220 7 1 2 Mn-55 P0 0 -221 7 1 2 Mn-55 P1 0 -222 7 1 2 Mn-55 P2 0 -223 7 1 2 Mn-55 P3 0 -224 7 1 2 Si-28 P0 0 -225 7 1 2 Si-28 P1 0 -226 7 1 2 Si-28 P2 0 -227 7 1 2 Si-28 P3 0 -228 7 1 2 Si-29 P0 0 -229 7 1 2 Si-29 P1 0 -230 7 1 2 Si-29 P2 0 -231 7 1 2 Si-29 P3 0 -232 7 1 2 Si-30 P0 0 -233 7 1 2 Si-30 P1 0 -234 7 1 2 Si-30 P2 0 -235 7 1 2 Si-30 P3 0 -236 7 1 2 Cr-50 P0 0 -237 7 1 2 Cr-50 P1 0 -238 7 1 2 Cr-50 P2 0 -239 7 1 2 Cr-50 P3 0 -240 7 1 2 Cr-52 P0 0 -241 7 1 2 Cr-52 P1 0 -242 7 1 2 Cr-52 P2 0 -243 7 1 2 Cr-52 P3 0 -244 7 1 2 Cr-53 P0 0 -245 7 1 2 Cr-53 P1 0 -246 7 1 2 Cr-53 P2 0 -247 7 1 2 Cr-53 P3 0 -248 7 1 2 Cr-54 P0 0 -249 7 1 2 Cr-54 P1 0 -250 7 1 2 Cr-54 P2 0 -251 7 1 2 Cr-54 P3 0 -84 7 2 1 H-1 P0 0 -85 7 2 1 H-1 P1 0 -86 7 2 1 H-1 P2 0 -87 7 2 1 H-1 P3 0 -88 7 2 1 O-16 P0 0 -89 7 2 1 O-16 P1 0 -90 7 2 1 O-16 P2 0 -91 7 2 1 O-16 P3 0 -92 7 2 1 B-10 P0 0 -93 7 2 1 B-10 P1 0 -94 7 2 1 B-10 P2 0 -95 7 2 1 B-10 P3 0 -96 7 2 1 B-11 P0 0 -97 7 2 1 B-11 P1 0 -98 7 2 1 B-11 P2 0 -99 7 2 1 B-11 P3 0 -100 7 2 1 Fe-54 P0 0 -101 7 2 1 Fe-54 P1 0 -102 7 2 1 Fe-54 P2 0 -103 7 2 1 Fe-54 P3 0 -104 7 2 1 Fe-56 P0 0 -105 7 2 1 Fe-56 P1 0 -106 7 2 1 Fe-56 P2 0 -107 7 2 1 Fe-56 P3 0 -108 7 2 1 Fe-57 P0 0 -109 7 2 1 Fe-57 P1 0 -110 7 2 1 Fe-57 P2 0 -111 7 2 1 Fe-57 P3 0 -112 7 2 1 Fe-58 P0 0 -113 7 2 1 Fe-58 P1 0 -114 7 2 1 Fe-58 P2 0 -115 7 2 1 Fe-58 P3 0 -116 7 2 1 Ni-58 P0 0 -117 7 2 1 Ni-58 P1 0 -118 7 2 1 Ni-58 P2 0 -119 7 2 1 Ni-58 P3 0 -120 7 2 1 Ni-60 P0 0 -121 7 2 1 Ni-60 P1 0 -122 7 2 1 Ni-60 P2 0 -123 7 2 1 Ni-60 P3 0 -124 7 2 1 Ni-61 P0 0 -125 7 2 1 Ni-61 P1 0 -126 7 2 1 Ni-61 P2 0 -127 7 2 1 Ni-61 P3 0 -128 7 2 1 Ni-62 P0 0 -129 7 2 1 Ni-62 P1 0 -130 7 2 1 Ni-62 P2 0 -131 7 2 1 Ni-62 P3 0 -132 7 2 1 Ni-64 P0 0 -133 7 2 1 Ni-64 P1 0 -134 7 2 1 Ni-64 P2 0 -135 7 2 1 Ni-64 P3 0 -136 7 2 1 Mn-55 P0 0 -137 7 2 1 Mn-55 P1 0 -138 7 2 1 Mn-55 P2 0 -139 7 2 1 Mn-55 P3 0 -140 7 2 1 Si-28 P0 0 -141 7 2 1 Si-28 P1 0 -142 7 2 1 Si-28 P2 0 -143 7 2 1 Si-28 P3 0 -144 7 2 1 Si-29 P0 0 -145 7 2 1 Si-29 P1 0 -146 7 2 1 Si-29 P2 0 -147 7 2 1 Si-29 P3 0 -148 7 2 1 Si-30 P0 0 -149 7 2 1 Si-30 P1 0 -150 7 2 1 Si-30 P2 0 -151 7 2 1 Si-30 P3 0 -152 7 2 1 Cr-50 P0 0 -153 7 2 1 Cr-50 P1 0 -154 7 2 1 Cr-50 P2 0 -155 7 2 1 Cr-50 P3 0 -156 7 2 1 Cr-52 P0 0 -157 7 2 1 Cr-52 P1 0 -158 7 2 1 Cr-52 P2 0 -159 7 2 1 Cr-52 P3 0 -160 7 2 1 Cr-53 P0 0 -161 7 2 1 Cr-53 P1 0 -162 7 2 1 Cr-53 P2 0 -163 7 2 1 Cr-53 P3 0 -164 7 2 1 Cr-54 P0 0 -165 7 2 1 Cr-54 P1 0 -166 7 2 1 Cr-54 P2 0 -167 7 2 1 Cr-54 P3 0 -0 7 2 2 H-1 P0 0 -1 7 2 2 H-1 P1 0 -2 7 2 2 H-1 P2 0 -3 7 2 2 H-1 P3 0 -4 7 2 2 O-16 P0 0 -5 7 2 2 O-16 P1 0 -6 7 2 2 O-16 P2 0 -7 7 2 2 O-16 P3 0 -8 7 2 2 B-10 P0 0 -9 7 2 2 B-10 P1 0 -10 7 2 2 B-10 P2 0 -11 7 2 2 B-10 P3 0 -12 7 2 2 B-11 P0 0 -13 7 2 2 B-11 P1 0 -14 7 2 2 B-11 P2 0 -15 7 2 2 B-11 P3 0 -16 7 2 2 Fe-54 P0 0 -17 7 2 2 Fe-54 P1 0 -18 7 2 2 Fe-54 P2 0 -19 7 2 2 Fe-54 P3 0 -20 7 2 2 Fe-56 P0 0 -21 7 2 2 Fe-56 P1 0 -22 7 2 2 Fe-56 P2 0 -23 7 2 2 Fe-56 P3 0 -24 7 2 2 Fe-57 P0 0 -25 7 2 2 Fe-57 P1 0 -26 7 2 2 Fe-57 P2 0 -27 7 2 2 Fe-57 P3 0 -28 7 2 2 Fe-58 P0 0 -29 7 2 2 Fe-58 P1 0 -30 7 2 2 Fe-58 P2 0 -31 7 2 2 Fe-58 P3 0 -32 7 2 2 Ni-58 P0 0 -33 7 2 2 Ni-58 P1 0 -34 7 2 2 Ni-58 P2 0 -35 7 2 2 Ni-58 P3 0 -36 7 2 2 Ni-60 P0 0 -37 7 2 2 Ni-60 P1 0 -38 7 2 2 Ni-60 P2 0 -39 7 2 2 Ni-60 P3 0 -40 7 2 2 Ni-61 P0 0 -41 7 2 2 Ni-61 P1 0 -42 7 2 2 Ni-61 P2 0 -43 7 2 2 Ni-61 P3 0 -44 7 2 2 Ni-62 P0 0 -45 7 2 2 Ni-62 P1 0 -46 7 2 2 Ni-62 P2 0 -47 7 2 2 Ni-62 P3 0 -48 7 2 2 Ni-64 P0 0 -49 7 2 2 Ni-64 P1 0 -50 7 2 2 Ni-64 P2 0 -51 7 2 2 Ni-64 P3 0 -52 7 2 2 Mn-55 P0 0 -53 7 2 2 Mn-55 P1 0 -54 7 2 2 Mn-55 P2 0 -55 7 2 2 Mn-55 P3 0 -56 7 2 2 Si-28 P0 0 -57 7 2 2 Si-28 P1 0 -58 7 2 2 Si-28 P2 0 -59 7 2 2 Si-28 P3 0 -60 7 2 2 Si-29 P0 0 -61 7 2 2 Si-29 P1 0 -62 7 2 2 Si-29 P2 0 -63 7 2 2 Si-29 P3 0 -64 7 2 2 Si-30 P0 0 -65 7 2 2 Si-30 P1 0 -66 7 2 2 Si-30 P2 0 -67 7 2 2 Si-30 P3 0 -68 7 2 2 Cr-50 P0 0 -69 7 2 2 Cr-50 P1 0 -70 7 2 2 Cr-50 P2 0 -71 7 2 2 Cr-50 P3 0 -72 7 2 2 Cr-52 P0 0 -73 7 2 2 Cr-52 P1 0 -74 7 2 2 Cr-52 P2 0 -75 7 2 2 Cr-52 P3 0 -76 7 2 2 Cr-53 P0 0 -77 7 2 2 Cr-53 P1 0 -78 7 2 2 Cr-53 P2 0 -79 7 2 2 Cr-53 P3 0 -80 7 2 2 Cr-54 P0 0 -81 7 2 2 Cr-54 P1 0 -82 7 2 2 Cr-54 P2 0 -83 7 2 2 Cr-54 P3 0 material group out nuclide mean std. dev. -21 7 1 H-1 0 0 -22 7 1 O-16 0 0 -23 7 1 B-10 0 0 -24 7 1 B-11 0 0 -25 7 1 Fe-54 0 0 -26 7 1 Fe-56 0 0 -27 7 1 Fe-57 0 0 -28 7 1 Fe-58 0 0 -29 7 1 Ni-58 0 0 -30 7 1 Ni-60 0 0 -31 7 1 Ni-61 0 0 -32 7 1 Ni-62 0 0 -33 7 1 Ni-64 0 0 -34 7 1 Mn-55 0 0 -35 7 1 Si-28 0 0 -36 7 1 Si-29 0 0 -37 7 1 Si-30 0 0 -38 7 1 Cr-50 0 0 -39 7 1 Cr-52 0 0 -40 7 1 Cr-53 0 0 -41 7 1 Cr-54 0 0 -0 7 2 H-1 0 0 -1 7 2 O-16 0 0 -2 7 2 B-10 0 0 -3 7 2 B-11 0 0 -4 7 2 Fe-54 0 0 -5 7 2 Fe-56 0 0 -6 7 2 Fe-57 0 0 -7 7 2 Fe-58 0 0 -8 7 2 Ni-58 0 0 -9 7 2 Ni-60 0 0 -10 7 2 Ni-61 0 0 -11 7 2 Ni-62 0 0 -12 7 2 Ni-64 0 0 -13 7 2 Mn-55 0 0 -14 7 2 Si-28 0 0 -15 7 2 Si-29 0 0 -16 7 2 Si-30 0 0 -17 7 2 Cr-50 0 0 -18 7 2 Cr-52 0 0 -19 7 2 Cr-53 0 0 -20 7 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 8 1 H-1 0 0 -22 8 1 O-16 0 0 -23 8 1 B-10 0 0 -24 8 1 B-11 0 0 -25 8 1 Fe-54 0 0 -26 8 1 Fe-56 0 0 -27 8 1 Fe-57 0 0 -28 8 1 Fe-58 0 0 -29 8 1 Ni-58 0 0 -30 8 1 Ni-60 0 0 -31 8 1 Ni-61 0 0 -32 8 1 Ni-62 0 0 -33 8 1 Ni-64 0 0 -34 8 1 Mn-55 0 0 -35 8 1 Si-28 0 0 -36 8 1 Si-29 0 0 -37 8 1 Si-30 0 0 -38 8 1 Cr-50 0 0 -39 8 1 Cr-52 0 0 -40 8 1 Cr-53 0 0 -41 8 1 Cr-54 0 0 -0 8 2 H-1 0 0 -1 8 2 O-16 0 0 -2 8 2 B-10 0 0 -3 8 2 B-11 0 0 -4 8 2 Fe-54 0 0 -5 8 2 Fe-56 0 0 -6 8 2 Fe-57 0 0 -7 8 2 Fe-58 0 0 -8 8 2 Ni-58 0 0 -9 8 2 Ni-60 0 0 -10 8 2 Ni-61 0 0 -11 8 2 Ni-62 0 0 -12 8 2 Ni-64 0 0 -13 8 2 Mn-55 0 0 -14 8 2 Si-28 0 0 -15 8 2 Si-29 0 0 -16 8 2 Si-30 0 0 -17 8 2 Cr-50 0 0 -18 8 2 Cr-52 0 0 -19 8 2 Cr-53 0 0 -20 8 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 8 1 H-1 0 0 -22 8 1 O-16 0 0 -23 8 1 B-10 0 0 -24 8 1 B-11 0 0 -25 8 1 Fe-54 0 0 -26 8 1 Fe-56 0 0 -27 8 1 Fe-57 0 0 -28 8 1 Fe-58 0 0 -29 8 1 Ni-58 0 0 -30 8 1 Ni-60 0 0 -31 8 1 Ni-61 0 0 -32 8 1 Ni-62 0 0 -33 8 1 Ni-64 0 0 -34 8 1 Mn-55 0 0 -35 8 1 Si-28 0 0 -36 8 1 Si-29 0 0 -37 8 1 Si-30 0 0 -38 8 1 Cr-50 0 0 -39 8 1 Cr-52 0 0 -40 8 1 Cr-53 0 0 -41 8 1 Cr-54 0 0 -0 8 2 H-1 0 0 -1 8 2 O-16 0 0 -2 8 2 B-10 0 0 -3 8 2 B-11 0 0 -4 8 2 Fe-54 0 0 -5 8 2 Fe-56 0 0 -6 8 2 Fe-57 0 0 -7 8 2 Fe-58 0 0 -8 8 2 Ni-58 0 0 -9 8 2 Ni-60 0 0 -10 8 2 Ni-61 0 0 -11 8 2 Ni-62 0 0 -12 8 2 Ni-64 0 0 -13 8 2 Mn-55 0 0 -14 8 2 Si-28 0 0 -15 8 2 Si-29 0 0 -16 8 2 Si-30 0 0 -17 8 2 Cr-50 0 0 -18 8 2 Cr-52 0 0 -19 8 2 Cr-53 0 0 -20 8 2 Cr-54 0 0 material group in group out nuclide moment mean -252 8 1 1 H-1 P0 0 -253 8 1 1 H-1 P1 0 -254 8 1 1 H-1 P2 0 -255 8 1 1 H-1 P3 0 -256 8 1 1 O-16 P0 0 -257 8 1 1 O-16 P1 0 -258 8 1 1 O-16 P2 0 -259 8 1 1 O-16 P3 0 -260 8 1 1 B-10 P0 0 -261 8 1 1 B-10 P1 0 -262 8 1 1 B-10 P2 0 -263 8 1 1 B-10 P3 0 -264 8 1 1 B-11 P0 0 -265 8 1 1 B-11 P1 0 -266 8 1 1 B-11 P2 0 -267 8 1 1 B-11 P3 0 -268 8 1 1 Fe-54 P0 0 -269 8 1 1 Fe-54 P1 0 -270 8 1 1 Fe-54 P2 0 -271 8 1 1 Fe-54 P3 0 -272 8 1 1 Fe-56 P0 0 -273 8 1 1 Fe-56 P1 0 -274 8 1 1 Fe-56 P2 0 -275 8 1 1 Fe-56 P3 0 -276 8 1 1 Fe-57 P0 0 -277 8 1 1 Fe-57 P1 0 -278 8 1 1 Fe-57 P2 0 -279 8 1 1 Fe-57 P3 0 -280 8 1 1 Fe-58 P0 0 -281 8 1 1 Fe-58 P1 0 -282 8 1 1 Fe-58 P2 0 -283 8 1 1 Fe-58 P3 0 -284 8 1 1 Ni-58 P0 0 -285 8 1 1 Ni-58 P1 0 -286 8 1 1 Ni-58 P2 0 -287 8 1 1 Ni-58 P3 0 -288 8 1 1 Ni-60 P0 0 -289 8 1 1 Ni-60 P1 0 -290 8 1 1 Ni-60 P2 0 -291 8 1 1 Ni-60 P3 0 -292 8 1 1 Ni-61 P0 0 -293 8 1 1 Ni-61 P1 0 -294 8 1 1 Ni-61 P2 0 -295 8 1 1 Ni-61 P3 0 -296 8 1 1 Ni-62 P0 0 -297 8 1 1 Ni-62 P1 0 -298 8 1 1 Ni-62 P2 0 -299 8 1 1 Ni-62 P3 0 -300 8 1 1 Ni-64 P0 0 -301 8 1 1 Ni-64 P1 0 -302 8 1 1 Ni-64 P2 0 -303 8 1 1 Ni-64 P3 0 -304 8 1 1 Mn-55 P0 0 -305 8 1 1 Mn-55 P1 0 -306 8 1 1 Mn-55 P2 0 -307 8 1 1 Mn-55 P3 0 -308 8 1 1 Si-28 P0 0 -309 8 1 1 Si-28 P1 0 -310 8 1 1 Si-28 P2 0 -311 8 1 1 Si-28 P3 0 -312 8 1 1 Si-29 P0 0 -313 8 1 1 Si-29 P1 0 -314 8 1 1 Si-29 P2 0 -315 8 1 1 Si-29 P3 0 -316 8 1 1 Si-30 P0 0 -317 8 1 1 Si-30 P1 0 -318 8 1 1 Si-30 P2 0 -319 8 1 1 Si-30 P3 0 -320 8 1 1 Cr-50 P0 0 -321 8 1 1 Cr-50 P1 0 -322 8 1 1 Cr-50 P2 0 -323 8 1 1 Cr-50 P3 0 -324 8 1 1 Cr-52 P0 0 -325 8 1 1 Cr-52 P1 0 -326 8 1 1 Cr-52 P2 0 -327 8 1 1 Cr-52 P3 0 -328 8 1 1 Cr-53 P0 0 -329 8 1 1 Cr-53 P1 0 -330 8 1 1 Cr-53 P2 0 -331 8 1 1 Cr-53 P3 0 -332 8 1 1 Cr-54 P0 0 -333 8 1 1 Cr-54 P1 0 -334 8 1 1 Cr-54 P2 0 -335 8 1 1 Cr-54 P3 0 -168 8 1 2 H-1 P0 0 -169 8 1 2 H-1 P1 0 -170 8 1 2 H-1 P2 0 -171 8 1 2 H-1 P3 0 -172 8 1 2 O-16 P0 0 -173 8 1 2 O-16 P1 0 -174 8 1 2 O-16 P2 0 -175 8 1 2 O-16 P3 0 -176 8 1 2 B-10 P0 0 -177 8 1 2 B-10 P1 0 -178 8 1 2 B-10 P2 0 -179 8 1 2 B-10 P3 0 -180 8 1 2 B-11 P0 0 -181 8 1 2 B-11 P1 0 -182 8 1 2 B-11 P2 0 -183 8 1 2 B-11 P3 0 -184 8 1 2 Fe-54 P0 0 -185 8 1 2 Fe-54 P1 0 -186 8 1 2 Fe-54 P2 0 -187 8 1 2 Fe-54 P3 0 -188 8 1 2 Fe-56 P0 0 -189 8 1 2 Fe-56 P1 0 -190 8 1 2 Fe-56 P2 0 -191 8 1 2 Fe-56 P3 0 -192 8 1 2 Fe-57 P0 0 -193 8 1 2 Fe-57 P1 0 -194 8 1 2 Fe-57 P2 0 -195 8 1 2 Fe-57 P3 0 -196 8 1 2 Fe-58 P0 0 -197 8 1 2 Fe-58 P1 0 -198 8 1 2 Fe-58 P2 0 -199 8 1 2 Fe-58 P3 0 -200 8 1 2 Ni-58 P0 0 -201 8 1 2 Ni-58 P1 0 -202 8 1 2 Ni-58 P2 0 -203 8 1 2 Ni-58 P3 0 -204 8 1 2 Ni-60 P0 0 -205 8 1 2 Ni-60 P1 0 -206 8 1 2 Ni-60 P2 0 -207 8 1 2 Ni-60 P3 0 -208 8 1 2 Ni-61 P0 0 -209 8 1 2 Ni-61 P1 0 -210 8 1 2 Ni-61 P2 0 -211 8 1 2 Ni-61 P3 0 -212 8 1 2 Ni-62 P0 0 -213 8 1 2 Ni-62 P1 0 -214 8 1 2 Ni-62 P2 0 -215 8 1 2 Ni-62 P3 0 -216 8 1 2 Ni-64 P0 0 -217 8 1 2 Ni-64 P1 0 -218 8 1 2 Ni-64 P2 0 -219 8 1 2 Ni-64 P3 0 -220 8 1 2 Mn-55 P0 0 -221 8 1 2 Mn-55 P1 0 -222 8 1 2 Mn-55 P2 0 -223 8 1 2 Mn-55 P3 0 -224 8 1 2 Si-28 P0 0 -225 8 1 2 Si-28 P1 0 -226 8 1 2 Si-28 P2 0 -227 8 1 2 Si-28 P3 0 -228 8 1 2 Si-29 P0 0 -229 8 1 2 Si-29 P1 0 -230 8 1 2 Si-29 P2 0 -231 8 1 2 Si-29 P3 0 -232 8 1 2 Si-30 P0 0 -233 8 1 2 Si-30 P1 0 -234 8 1 2 Si-30 P2 0 -235 8 1 2 Si-30 P3 0 -236 8 1 2 Cr-50 P0 0 -237 8 1 2 Cr-50 P1 0 -238 8 1 2 Cr-50 P2 0 -239 8 1 2 Cr-50 P3 0 -240 8 1 2 Cr-52 P0 0 -241 8 1 2 Cr-52 P1 0 -242 8 1 2 Cr-52 P2 0 -243 8 1 2 Cr-52 P3 0 -244 8 1 2 Cr-53 P0 0 -245 8 1 2 Cr-53 P1 0 -246 8 1 2 Cr-53 P2 0 -247 8 1 2 Cr-53 P3 0 -248 8 1 2 Cr-54 P0 0 -249 8 1 2 Cr-54 P1 0 -250 8 1 2 Cr-54 P2 0 -251 8 1 2 Cr-54 P3 0 -84 8 2 1 H-1 P0 0 -85 8 2 1 H-1 P1 0 -86 8 2 1 H-1 P2 0 -87 8 2 1 H-1 P3 0 -88 8 2 1 O-16 P0 0 -89 8 2 1 O-16 P1 0 -90 8 2 1 O-16 P2 0 -91 8 2 1 O-16 P3 0 -92 8 2 1 B-10 P0 0 -93 8 2 1 B-10 P1 0 -94 8 2 1 B-10 P2 0 -95 8 2 1 B-10 P3 0 -96 8 2 1 B-11 P0 0 -97 8 2 1 B-11 P1 0 -98 8 2 1 B-11 P2 0 -99 8 2 1 B-11 P3 0 -100 8 2 1 Fe-54 P0 0 -101 8 2 1 Fe-54 P1 0 -102 8 2 1 Fe-54 P2 0 -103 8 2 1 Fe-54 P3 0 -104 8 2 1 Fe-56 P0 0 -105 8 2 1 Fe-56 P1 0 -106 8 2 1 Fe-56 P2 0 -107 8 2 1 Fe-56 P3 0 -108 8 2 1 Fe-57 P0 0 -109 8 2 1 Fe-57 P1 0 -110 8 2 1 Fe-57 P2 0 -111 8 2 1 Fe-57 P3 0 -112 8 2 1 Fe-58 P0 0 -113 8 2 1 Fe-58 P1 0 -114 8 2 1 Fe-58 P2 0 -115 8 2 1 Fe-58 P3 0 -116 8 2 1 Ni-58 P0 0 -117 8 2 1 Ni-58 P1 0 -118 8 2 1 Ni-58 P2 0 -119 8 2 1 Ni-58 P3 0 -120 8 2 1 Ni-60 P0 0 -121 8 2 1 Ni-60 P1 0 -122 8 2 1 Ni-60 P2 0 -123 8 2 1 Ni-60 P3 0 -124 8 2 1 Ni-61 P0 0 -125 8 2 1 Ni-61 P1 0 -126 8 2 1 Ni-61 P2 0 -127 8 2 1 Ni-61 P3 0 -128 8 2 1 Ni-62 P0 0 -129 8 2 1 Ni-62 P1 0 -130 8 2 1 Ni-62 P2 0 -131 8 2 1 Ni-62 P3 0 -132 8 2 1 Ni-64 P0 0 -133 8 2 1 Ni-64 P1 0 -134 8 2 1 Ni-64 P2 0 -135 8 2 1 Ni-64 P3 0 -136 8 2 1 Mn-55 P0 0 -137 8 2 1 Mn-55 P1 0 -138 8 2 1 Mn-55 P2 0 -139 8 2 1 Mn-55 P3 0 -140 8 2 1 Si-28 P0 0 -141 8 2 1 Si-28 P1 0 -142 8 2 1 Si-28 P2 0 -143 8 2 1 Si-28 P3 0 -144 8 2 1 Si-29 P0 0 -145 8 2 1 Si-29 P1 0 -146 8 2 1 Si-29 P2 0 -147 8 2 1 Si-29 P3 0 -148 8 2 1 Si-30 P0 0 -149 8 2 1 Si-30 P1 0 -150 8 2 1 Si-30 P2 0 -151 8 2 1 Si-30 P3 0 -152 8 2 1 Cr-50 P0 0 -153 8 2 1 Cr-50 P1 0 -154 8 2 1 Cr-50 P2 0 -155 8 2 1 Cr-50 P3 0 -156 8 2 1 Cr-52 P0 0 -157 8 2 1 Cr-52 P1 0 -158 8 2 1 Cr-52 P2 0 -159 8 2 1 Cr-52 P3 0 -160 8 2 1 Cr-53 P0 0 -161 8 2 1 Cr-53 P1 0 -162 8 2 1 Cr-53 P2 0 -163 8 2 1 Cr-53 P3 0 -164 8 2 1 Cr-54 P0 0 -165 8 2 1 Cr-54 P1 0 -166 8 2 1 Cr-54 P2 0 -167 8 2 1 Cr-54 P3 0 -0 8 2 2 H-1 P0 0 -1 8 2 2 H-1 P1 0 -2 8 2 2 H-1 P2 0 -3 8 2 2 H-1 P3 0 -4 8 2 2 O-16 P0 0 -5 8 2 2 O-16 P1 0 -6 8 2 2 O-16 P2 0 -7 8 2 2 O-16 P3 0 -8 8 2 2 B-10 P0 0 -9 8 2 2 B-10 P1 0 -10 8 2 2 B-10 P2 0 -11 8 2 2 B-10 P3 0 -12 8 2 2 B-11 P0 0 -13 8 2 2 B-11 P1 0 -14 8 2 2 B-11 P2 0 -15 8 2 2 B-11 P3 0 -16 8 2 2 Fe-54 P0 0 -17 8 2 2 Fe-54 P1 0 -18 8 2 2 Fe-54 P2 0 -19 8 2 2 Fe-54 P3 0 -20 8 2 2 Fe-56 P0 0 -21 8 2 2 Fe-56 P1 0 -22 8 2 2 Fe-56 P2 0 -23 8 2 2 Fe-56 P3 0 -24 8 2 2 Fe-57 P0 0 -25 8 2 2 Fe-57 P1 0 -26 8 2 2 Fe-57 P2 0 -27 8 2 2 Fe-57 P3 0 -28 8 2 2 Fe-58 P0 0 -29 8 2 2 Fe-58 P1 0 -30 8 2 2 Fe-58 P2 0 -31 8 2 2 Fe-58 P3 0 -32 8 2 2 Ni-58 P0 0 -33 8 2 2 Ni-58 P1 0 -34 8 2 2 Ni-58 P2 0 -35 8 2 2 Ni-58 P3 0 -36 8 2 2 Ni-60 P0 0 -37 8 2 2 Ni-60 P1 0 -38 8 2 2 Ni-60 P2 0 -39 8 2 2 Ni-60 P3 0 -40 8 2 2 Ni-61 P0 0 -41 8 2 2 Ni-61 P1 0 -42 8 2 2 Ni-61 P2 0 -43 8 2 2 Ni-61 P3 0 -44 8 2 2 Ni-62 P0 0 -45 8 2 2 Ni-62 P1 0 -46 8 2 2 Ni-62 P2 0 -47 8 2 2 Ni-62 P3 0 -48 8 2 2 Ni-64 P0 0 -49 8 2 2 Ni-64 P1 0 -50 8 2 2 Ni-64 P2 0 -51 8 2 2 Ni-64 P3 0 -52 8 2 2 Mn-55 P0 0 -53 8 2 2 Mn-55 P1 0 -54 8 2 2 Mn-55 P2 0 -55 8 2 2 Mn-55 P3 0 -56 8 2 2 Si-28 P0 0 -57 8 2 2 Si-28 P1 0 -58 8 2 2 Si-28 P2 0 -59 8 2 2 Si-28 P3 0 -60 8 2 2 Si-29 P0 0 -61 8 2 2 Si-29 P1 0 -62 8 2 2 Si-29 P2 0 -63 8 2 2 Si-29 P3 0 -64 8 2 2 Si-30 P0 0 -65 8 2 2 Si-30 P1 0 -66 8 2 2 Si-30 P2 0 -67 8 2 2 Si-30 P3 0 -68 8 2 2 Cr-50 P0 0 -69 8 2 2 Cr-50 P1 0 -70 8 2 2 Cr-50 P2 0 -71 8 2 2 Cr-50 P3 0 -72 8 2 2 Cr-52 P0 0 -73 8 2 2 Cr-52 P1 0 -74 8 2 2 Cr-52 P2 0 -75 8 2 2 Cr-52 P3 0 -76 8 2 2 Cr-53 P0 0 -77 8 2 2 Cr-53 P1 0 -78 8 2 2 Cr-53 P2 0 -79 8 2 2 Cr-53 P3 0 -80 8 2 2 Cr-54 P0 0 -81 8 2 2 Cr-54 P1 0 -82 8 2 2 Cr-54 P2 0 -83 8 2 2 Cr-54 P3 0 material group out nuclide mean std. dev. -21 8 1 H-1 0 0 -22 8 1 O-16 0 0 -23 8 1 B-10 0 0 -24 8 1 B-11 0 0 -25 8 1 Fe-54 0 0 -26 8 1 Fe-56 0 0 -27 8 1 Fe-57 0 0 -28 8 1 Fe-58 0 0 -29 8 1 Ni-58 0 0 -30 8 1 Ni-60 0 0 -31 8 1 Ni-61 0 0 -32 8 1 Ni-62 0 0 -33 8 1 Ni-64 0 0 -34 8 1 Mn-55 0 0 -35 8 1 Si-28 0 0 -36 8 1 Si-29 0 0 -37 8 1 Si-30 0 0 -38 8 1 Cr-50 0 0 -39 8 1 Cr-52 0 0 -40 8 1 Cr-53 0 0 -41 8 1 Cr-54 0 0 -0 8 2 H-1 0 0 -1 8 2 O-16 0 0 -2 8 2 B-10 0 0 -3 8 2 B-11 0 0 -4 8 2 Fe-54 0 0 -5 8 2 Fe-56 0 0 -6 8 2 Fe-57 0 0 -7 8 2 Fe-58 0 0 -8 8 2 Ni-58 0 0 -9 8 2 Ni-60 0 0 -10 8 2 Ni-61 0 0 -11 8 2 Ni-62 0 0 -12 8 2 Ni-64 0 0 -13 8 2 Mn-55 0 0 -14 8 2 Si-28 0 0 -15 8 2 Si-29 0 0 -16 8 2 Si-30 0 0 -17 8 2 Cr-50 0 0 -18 8 2 Cr-52 0 0 -19 8 2 Cr-53 0 0 -20 8 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 9 1 H-1 0.150655 0.480993 -22 9 1 O-16 0.116221 0.114089 -23 9 1 B-10 0.000000 0.000000 -24 9 1 B-11 0.000000 0.000000 -25 9 1 Fe-54 0.000000 0.000000 -26 9 1 Fe-56 0.186217 0.199795 -27 9 1 Fe-57 0.000000 0.000000 -28 9 1 Fe-58 0.000000 0.000000 -29 9 1 Ni-58 0.000000 0.000000 -30 9 1 Ni-60 0.000000 0.000000 -31 9 1 Ni-61 0.000000 0.000000 -32 9 1 Ni-62 0.000000 0.000000 -33 9 1 Ni-64 0.000000 0.000000 -34 9 1 Mn-55 0.000000 0.000000 -35 9 1 Si-28 0.000000 0.000000 -36 9 1 Si-29 0.000000 0.000000 -37 9 1 Si-30 0.000000 0.000000 -38 9 1 Cr-50 0.000000 0.000000 -39 9 1 Cr-52 0.000000 0.000000 -40 9 1 Cr-53 0.147443 0.139574 -41 9 1 Cr-54 0.000000 0.000000 -0 9 2 H-1 0.000000 0.000000 -1 9 2 O-16 0.000000 0.000000 -2 9 2 B-10 0.000000 0.000000 -3 9 2 B-11 0.000000 0.000000 -4 9 2 Fe-54 0.000000 0.000000 -5 9 2 Fe-56 0.000000 0.000000 -6 9 2 Fe-57 0.000000 0.000000 -7 9 2 Fe-58 0.000000 0.000000 -8 9 2 Ni-58 0.000000 0.000000 -9 9 2 Ni-60 0.000000 0.000000 -10 9 2 Ni-61 0.000000 0.000000 -11 9 2 Ni-62 0.000000 0.000000 -12 9 2 Ni-64 0.000000 0.000000 -13 9 2 Mn-55 0.000000 0.000000 -14 9 2 Si-28 0.000000 0.000000 -15 9 2 Si-29 0.000000 0.000000 -16 9 2 Si-30 0.000000 0.000000 -17 9 2 Cr-50 0.000000 0.000000 -18 9 2 Cr-52 0.000000 0.000000 -19 9 2 Cr-53 0.000000 0.000000 -20 9 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. -21 9 1 H-1 0 0 -22 9 1 O-16 0 0 -23 9 1 B-10 0 0 -24 9 1 B-11 0 0 -25 9 1 Fe-54 0 0 -26 9 1 Fe-56 0 0 -27 9 1 Fe-57 0 0 -28 9 1 Fe-58 0 0 -29 9 1 Ni-58 0 0 -30 9 1 Ni-60 0 0 -31 9 1 Ni-61 0 0 -32 9 1 Ni-62 0 0 -33 9 1 Ni-64 0 0 -34 9 1 Mn-55 0 0 -35 9 1 Si-28 0 0 -36 9 1 Si-29 0 0 -37 9 1 Si-30 0 0 -38 9 1 Cr-50 0 0 -39 9 1 Cr-52 0 0 -40 9 1 Cr-53 0 0 -41 9 1 Cr-54 0 0 -0 9 2 H-1 0 0 -1 9 2 O-16 0 0 -2 9 2 B-10 0 0 -3 9 2 B-11 0 0 -4 9 2 Fe-54 0 0 -5 9 2 Fe-56 0 0 -6 9 2 Fe-57 0 0 -7 9 2 Fe-58 0 0 -8 9 2 Ni-58 0 0 -9 9 2 Ni-60 0 0 -10 9 2 Ni-61 0 0 -11 9 2 Ni-62 0 0 -12 9 2 Ni-64 0 0 -13 9 2 Mn-55 0 0 -14 9 2 Si-28 0 0 -15 9 2 Si-29 0 0 -16 9 2 Si-30 0 0 -17 9 2 Cr-50 0 0 -18 9 2 Cr-52 0 0 -19 9 2 Cr-53 0 0 -20 9 2 Cr-54 0 0 material group in group out nuclide moment mean -252 9 1 1 H-1 P0 0.400211 -253 9 1 1 H-1 P1 0.249556 -254 9 1 1 H-1 P2 0.082049 -255 9 1 1 H-1 P3 0.001559 -256 9 1 1 O-16 P0 0.080042 -257 9 1 1 O-16 P1 -0.036179 -258 9 1 1 O-16 P2 -0.015492 -259 9 1 1 O-16 P3 0.035790 -260 9 1 1 B-10 P0 0.000000 -261 9 1 1 B-10 P1 0.000000 -262 9 1 1 B-10 P2 0.000000 -263 9 1 1 B-10 P3 0.000000 -264 9 1 1 B-11 P0 0.000000 -265 9 1 1 B-11 P1 0.000000 -266 9 1 1 B-11 P2 0.000000 -267 9 1 1 B-11 P3 0.000000 -268 9 1 1 Fe-54 P0 0.000000 -269 9 1 1 Fe-54 P1 0.000000 -270 9 1 1 Fe-54 P2 0.000000 -271 9 1 1 Fe-54 P3 0.000000 -272 9 1 1 Fe-56 P0 0.160084 -273 9 1 1 Fe-56 P1 -0.026133 -274 9 1 1 Fe-56 P2 -0.073149 -275 9 1 1 Fe-56 P3 0.037054 -276 9 1 1 Fe-57 P0 0.000000 -277 9 1 1 Fe-57 P1 0.000000 -278 9 1 1 Fe-57 P2 0.000000 -279 9 1 1 Fe-57 P3 0.000000 -280 9 1 1 Fe-58 P0 0.000000 -281 9 1 1 Fe-58 P1 0.000000 -282 9 1 1 Fe-58 P2 0.000000 -283 9 1 1 Fe-58 P3 0.000000 -284 9 1 1 Ni-58 P0 0.000000 -285 9 1 1 Ni-58 P1 0.000000 -286 9 1 1 Ni-58 P2 0.000000 -287 9 1 1 Ni-58 P3 0.000000 -288 9 1 1 Ni-60 P0 0.000000 -289 9 1 1 Ni-60 P1 0.000000 -290 9 1 1 Ni-60 P2 0.000000 -291 9 1 1 Ni-60 P3 0.000000 -292 9 1 1 Ni-61 P0 0.000000 -293 9 1 1 Ni-61 P1 0.000000 -294 9 1 1 Ni-61 P2 0.000000 -295 9 1 1 Ni-61 P3 0.000000 -296 9 1 1 Ni-62 P0 0.000000 -297 9 1 1 Ni-62 P1 0.000000 -298 9 1 1 Ni-62 P2 0.000000 -299 9 1 1 Ni-62 P3 0.000000 -300 9 1 1 Ni-64 P0 0.000000 -301 9 1 1 Ni-64 P1 0.000000 -302 9 1 1 Ni-64 P2 0.000000 -303 9 1 1 Ni-64 P3 0.000000 -304 9 1 1 Mn-55 P0 0.000000 -305 9 1 1 Mn-55 P1 0.000000 -306 9 1 1 Mn-55 P2 0.000000 -307 9 1 1 Mn-55 P3 0.000000 -308 9 1 1 Si-28 P0 0.000000 -309 9 1 1 Si-28 P1 0.000000 -310 9 1 1 Si-28 P2 0.000000 -311 9 1 1 Si-28 P3 0.000000 -312 9 1 1 Si-29 P0 0.000000 -313 9 1 1 Si-29 P1 0.000000 -314 9 1 1 Si-29 P2 0.000000 -315 9 1 1 Si-29 P3 0.000000 -316 9 1 1 Si-30 P0 0.000000 -317 9 1 1 Si-30 P1 0.000000 -318 9 1 1 Si-30 P2 0.000000 -319 9 1 1 Si-30 P3 0.000000 -320 9 1 1 Cr-50 P0 0.000000 -321 9 1 1 Cr-50 P1 0.000000 -322 9 1 1 Cr-50 P2 0.000000 -323 9 1 1 Cr-50 P3 0.000000 -324 9 1 1 Cr-52 P0 0.000000 -325 9 1 1 Cr-52 P1 0.000000 -326 9 1 1 Cr-52 P2 0.000000 -327 9 1 1 Cr-52 P3 0.000000 -328 9 1 1 Cr-53 P0 0.080042 -329 9 1 1 Cr-53 P1 -0.067401 -330 9 1 1 Cr-53 P2 0.045113 -331 9 1 1 Cr-53 P3 -0.018380 -332 9 1 1 Cr-54 P0 0.000000 -333 9 1 1 Cr-54 P1 0.000000 -334 9 1 1 Cr-54 P2 0.000000 -335 9 1 1 Cr-54 P3 0.000000 -168 9 1 2 H-1 P0 0.000000 -169 9 1 2 H-1 P1 0.000000 -170 9 1 2 H-1 P2 0.000000 -171 9 1 2 H-1 P3 0.000000 -172 9 1 2 O-16 P0 0.000000 -173 9 1 2 O-16 P1 0.000000 -174 9 1 2 O-16 P2 0.000000 -175 9 1 2 O-16 P3 0.000000 -176 9 1 2 B-10 P0 0.000000 -177 9 1 2 B-10 P1 0.000000 -178 9 1 2 B-10 P2 0.000000 -179 9 1 2 B-10 P3 0.000000 -180 9 1 2 B-11 P0 0.000000 -181 9 1 2 B-11 P1 0.000000 -182 9 1 2 B-11 P2 0.000000 -183 9 1 2 B-11 P3 0.000000 -184 9 1 2 Fe-54 P0 0.000000 -185 9 1 2 Fe-54 P1 0.000000 -186 9 1 2 Fe-54 P2 0.000000 -187 9 1 2 Fe-54 P3 0.000000 -188 9 1 2 Fe-56 P0 0.000000 -189 9 1 2 Fe-56 P1 0.000000 -190 9 1 2 Fe-56 P2 0.000000 -191 9 1 2 Fe-56 P3 0.000000 -192 9 1 2 Fe-57 P0 0.000000 -193 9 1 2 Fe-57 P1 0.000000 -194 9 1 2 Fe-57 P2 0.000000 -195 9 1 2 Fe-57 P3 0.000000 -196 9 1 2 Fe-58 P0 0.000000 -197 9 1 2 Fe-58 P1 0.000000 -198 9 1 2 Fe-58 P2 0.000000 -199 9 1 2 Fe-58 P3 0.000000 -200 9 1 2 Ni-58 P0 0.000000 -201 9 1 2 Ni-58 P1 0.000000 -202 9 1 2 Ni-58 P2 0.000000 -203 9 1 2 Ni-58 P3 0.000000 -204 9 1 2 Ni-60 P0 0.000000 -205 9 1 2 Ni-60 P1 0.000000 -206 9 1 2 Ni-60 P2 0.000000 -207 9 1 2 Ni-60 P3 0.000000 -208 9 1 2 Ni-61 P0 0.000000 -209 9 1 2 Ni-61 P1 0.000000 -210 9 1 2 Ni-61 P2 0.000000 -211 9 1 2 Ni-61 P3 0.000000 -212 9 1 2 Ni-62 P0 0.000000 -213 9 1 2 Ni-62 P1 0.000000 -214 9 1 2 Ni-62 P2 0.000000 -215 9 1 2 Ni-62 P3 0.000000 -216 9 1 2 Ni-64 P0 0.000000 -217 9 1 2 Ni-64 P1 0.000000 -218 9 1 2 Ni-64 P2 0.000000 -219 9 1 2 Ni-64 P3 0.000000 -220 9 1 2 Mn-55 P0 0.000000 -221 9 1 2 Mn-55 P1 0.000000 -222 9 1 2 Mn-55 P2 0.000000 -223 9 1 2 Mn-55 P3 0.000000 -224 9 1 2 Si-28 P0 0.000000 -225 9 1 2 Si-28 P1 0.000000 -226 9 1 2 Si-28 P2 0.000000 -227 9 1 2 Si-28 P3 0.000000 -228 9 1 2 Si-29 P0 0.000000 -229 9 1 2 Si-29 P1 0.000000 -230 9 1 2 Si-29 P2 0.000000 -231 9 1 2 Si-29 P3 0.000000 -232 9 1 2 Si-30 P0 0.000000 -233 9 1 2 Si-30 P1 0.000000 -234 9 1 2 Si-30 P2 0.000000 -235 9 1 2 Si-30 P3 0.000000 -236 9 1 2 Cr-50 P0 0.000000 -237 9 1 2 Cr-50 P1 0.000000 -238 9 1 2 Cr-50 P2 0.000000 -239 9 1 2 Cr-50 P3 0.000000 -240 9 1 2 Cr-52 P0 0.000000 -241 9 1 2 Cr-52 P1 0.000000 -242 9 1 2 Cr-52 P2 0.000000 -243 9 1 2 Cr-52 P3 0.000000 -244 9 1 2 Cr-53 P0 0.000000 -245 9 1 2 Cr-53 P1 0.000000 -246 9 1 2 Cr-53 P2 0.000000 -247 9 1 2 Cr-53 P3 0.000000 -248 9 1 2 Cr-54 P0 0.000000 -249 9 1 2 Cr-54 P1 0.000000 -250 9 1 2 Cr-54 P2 0.000000 -251 9 1 2 Cr-54 P3 0.000000 -84 9 2 1 H-1 P0 0.000000 -85 9 2 1 H-1 P1 0.000000 -86 9 2 1 H-1 P2 0.000000 -87 9 2 1 H-1 P3 0.000000 -88 9 2 1 O-16 P0 0.000000 -89 9 2 1 O-16 P1 0.000000 -90 9 2 1 O-16 P2 0.000000 -91 9 2 1 O-16 P3 0.000000 -92 9 2 1 B-10 P0 0.000000 -93 9 2 1 B-10 P1 0.000000 -94 9 2 1 B-10 P2 0.000000 -95 9 2 1 B-10 P3 0.000000 -96 9 2 1 B-11 P0 0.000000 -97 9 2 1 B-11 P1 0.000000 -98 9 2 1 B-11 P2 0.000000 -99 9 2 1 B-11 P3 0.000000 -100 9 2 1 Fe-54 P0 0.000000 -101 9 2 1 Fe-54 P1 0.000000 -102 9 2 1 Fe-54 P2 0.000000 -103 9 2 1 Fe-54 P3 0.000000 -104 9 2 1 Fe-56 P0 0.000000 -105 9 2 1 Fe-56 P1 0.000000 -106 9 2 1 Fe-56 P2 0.000000 -107 9 2 1 Fe-56 P3 0.000000 -108 9 2 1 Fe-57 P0 0.000000 -109 9 2 1 Fe-57 P1 0.000000 -110 9 2 1 Fe-57 P2 0.000000 -111 9 2 1 Fe-57 P3 0.000000 -112 9 2 1 Fe-58 P0 0.000000 -113 9 2 1 Fe-58 P1 0.000000 -114 9 2 1 Fe-58 P2 0.000000 -115 9 2 1 Fe-58 P3 0.000000 -116 9 2 1 Ni-58 P0 0.000000 -117 9 2 1 Ni-58 P1 0.000000 -118 9 2 1 Ni-58 P2 0.000000 -119 9 2 1 Ni-58 P3 0.000000 -120 9 2 1 Ni-60 P0 0.000000 -121 9 2 1 Ni-60 P1 0.000000 -122 9 2 1 Ni-60 P2 0.000000 -123 9 2 1 Ni-60 P3 0.000000 -124 9 2 1 Ni-61 P0 0.000000 -125 9 2 1 Ni-61 P1 0.000000 -126 9 2 1 Ni-61 P2 0.000000 -127 9 2 1 Ni-61 P3 0.000000 -128 9 2 1 Ni-62 P0 0.000000 -129 9 2 1 Ni-62 P1 0.000000 -130 9 2 1 Ni-62 P2 0.000000 -131 9 2 1 Ni-62 P3 0.000000 -132 9 2 1 Ni-64 P0 0.000000 -133 9 2 1 Ni-64 P1 0.000000 -134 9 2 1 Ni-64 P2 0.000000 -135 9 2 1 Ni-64 P3 0.000000 -136 9 2 1 Mn-55 P0 0.000000 -137 9 2 1 Mn-55 P1 0.000000 -138 9 2 1 Mn-55 P2 0.000000 -139 9 2 1 Mn-55 P3 0.000000 -140 9 2 1 Si-28 P0 0.000000 -141 9 2 1 Si-28 P1 0.000000 -142 9 2 1 Si-28 P2 0.000000 -143 9 2 1 Si-28 P3 0.000000 -144 9 2 1 Si-29 P0 0.000000 -145 9 2 1 Si-29 P1 0.000000 -146 9 2 1 Si-29 P2 0.000000 -147 9 2 1 Si-29 P3 0.000000 -148 9 2 1 Si-30 P0 0.000000 -149 9 2 1 Si-30 P1 0.000000 -150 9 2 1 Si-30 P2 0.000000 -151 9 2 1 Si-30 P3 0.000000 -152 9 2 1 Cr-50 P0 0.000000 -153 9 2 1 Cr-50 P1 0.000000 -154 9 2 1 Cr-50 P2 0.000000 -155 9 2 1 Cr-50 P3 0.000000 -156 9 2 1 Cr-52 P0 0.000000 -157 9 2 1 Cr-52 P1 0.000000 -158 9 2 1 Cr-52 P2 0.000000 -159 9 2 1 Cr-52 P3 0.000000 -160 9 2 1 Cr-53 P0 0.000000 -161 9 2 1 Cr-53 P1 0.000000 -162 9 2 1 Cr-53 P2 0.000000 -163 9 2 1 Cr-53 P3 0.000000 -164 9 2 1 Cr-54 P0 0.000000 -165 9 2 1 Cr-54 P1 0.000000 -166 9 2 1 Cr-54 P2 0.000000 -167 9 2 1 Cr-54 P3 0.000000 -0 9 2 2 H-1 P0 0.000000 -1 9 2 2 H-1 P1 0.000000 -2 9 2 2 H-1 P2 0.000000 -3 9 2 2 H-1 P3 0.000000 -4 9 2 2 O-16 P0 0.000000 -5 9 2 2 O-16 P1 0.000000 -6 9 2 2 O-16 P2 0.000000 -7 9 2 2 O-16 P3 0.000000 -8 9 2 2 B-10 P0 0.000000 -9 9 2 2 B-10 P1 0.000000 -10 9 2 2 B-10 P2 0.000000 -11 9 2 2 B-10 P3 0.000000 -12 9 2 2 B-11 P0 0.000000 -13 9 2 2 B-11 P1 0.000000 -14 9 2 2 B-11 P2 0.000000 -15 9 2 2 B-11 P3 0.000000 -16 9 2 2 Fe-54 P0 0.000000 -17 9 2 2 Fe-54 P1 0.000000 -18 9 2 2 Fe-54 P2 0.000000 -19 9 2 2 Fe-54 P3 0.000000 -20 9 2 2 Fe-56 P0 0.000000 -21 9 2 2 Fe-56 P1 0.000000 -22 9 2 2 Fe-56 P2 0.000000 -23 9 2 2 Fe-56 P3 0.000000 -24 9 2 2 Fe-57 P0 0.000000 -25 9 2 2 Fe-57 P1 0.000000 -26 9 2 2 Fe-57 P2 0.000000 -27 9 2 2 Fe-57 P3 0.000000 -28 9 2 2 Fe-58 P0 0.000000 -29 9 2 2 Fe-58 P1 0.000000 -30 9 2 2 Fe-58 P2 0.000000 -31 9 2 2 Fe-58 P3 0.000000 -32 9 2 2 Ni-58 P0 0.000000 -33 9 2 2 Ni-58 P1 0.000000 -34 9 2 2 Ni-58 P2 0.000000 -35 9 2 2 Ni-58 P3 0.000000 -36 9 2 2 Ni-60 P0 0.000000 -37 9 2 2 Ni-60 P1 0.000000 -38 9 2 2 Ni-60 P2 0.000000 -39 9 2 2 Ni-60 P3 0.000000 -40 9 2 2 Ni-61 P0 0.000000 -41 9 2 2 Ni-61 P1 0.000000 -42 9 2 2 Ni-61 P2 0.000000 -43 9 2 2 Ni-61 P3 0.000000 -44 9 2 2 Ni-62 P0 0.000000 -45 9 2 2 Ni-62 P1 0.000000 -46 9 2 2 Ni-62 P2 0.000000 -47 9 2 2 Ni-62 P3 0.000000 -48 9 2 2 Ni-64 P0 0.000000 -49 9 2 2 Ni-64 P1 0.000000 -50 9 2 2 Ni-64 P2 0.000000 -51 9 2 2 Ni-64 P3 0.000000 -52 9 2 2 Mn-55 P0 0.000000 -53 9 2 2 Mn-55 P1 0.000000 -54 9 2 2 Mn-55 P2 0.000000 -55 9 2 2 Mn-55 P3 0.000000 -56 9 2 2 Si-28 P0 0.000000 -57 9 2 2 Si-28 P1 0.000000 -58 9 2 2 Si-28 P2 0.000000 -59 9 2 2 Si-28 P3 0.000000 -60 9 2 2 Si-29 P0 0.000000 -61 9 2 2 Si-29 P1 0.000000 -62 9 2 2 Si-29 P2 0.000000 -63 9 2 2 Si-29 P3 0.000000 -64 9 2 2 Si-30 P0 0.000000 -65 9 2 2 Si-30 P1 0.000000 -66 9 2 2 Si-30 P2 0.000000 -67 9 2 2 Si-30 P3 0.000000 -68 9 2 2 Cr-50 P0 0.000000 -69 9 2 2 Cr-50 P1 0.000000 -70 9 2 2 Cr-50 P2 0.000000 -71 9 2 2 Cr-50 P3 0.000000 -72 9 2 2 Cr-52 P0 0.000000 -73 9 2 2 Cr-52 P1 0.000000 -74 9 2 2 Cr-52 P2 0.000000 -75 9 2 2 Cr-52 P3 0.000000 -76 9 2 2 Cr-53 P0 0.000000 -77 9 2 2 Cr-53 P1 0.000000 -78 9 2 2 Cr-53 P2 0.000000 -79 9 2 2 Cr-53 P3 0.000000 -80 9 2 2 Cr-54 P0 0.000000 -81 9 2 2 Cr-54 P1 0.000000 -82 9 2 2 Cr-54 P2 0.000000 -83 9 2 2 Cr-54 P3 0.000000 material group out nuclide mean std. dev. -21 9 1 H-1 0 0 -22 9 1 O-16 0 0 -23 9 1 B-10 0 0 -24 9 1 B-11 0 0 -25 9 1 Fe-54 0 0 -26 9 1 Fe-56 0 0 -27 9 1 Fe-57 0 0 -28 9 1 Fe-58 0 0 -29 9 1 Ni-58 0 0 -30 9 1 Ni-60 0 0 -31 9 1 Ni-61 0 0 -32 9 1 Ni-62 0 0 -33 9 1 Ni-64 0 0 -34 9 1 Mn-55 0 0 -35 9 1 Si-28 0 0 -36 9 1 Si-29 0 0 -37 9 1 Si-30 0 0 -38 9 1 Cr-50 0 0 -39 9 1 Cr-52 0 0 -40 9 1 Cr-53 0 0 -41 9 1 Cr-54 0 0 -0 9 2 H-1 0 0 -1 9 2 O-16 0 0 -2 9 2 B-10 0 0 -3 9 2 B-11 0 0 -4 9 2 Fe-54 0 0 -5 9 2 Fe-56 0 0 -6 9 2 Fe-57 0 0 -7 9 2 Fe-58 0 0 -8 9 2 Ni-58 0 0 -9 9 2 Ni-60 0 0 -10 9 2 Ni-61 0 0 -11 9 2 Ni-62 0 0 -12 9 2 Ni-64 0 0 -13 9 2 Mn-55 0 0 -14 9 2 Si-28 0 0 -15 9 2 Si-29 0 0 -16 9 2 Si-30 0 0 -17 9 2 Cr-50 0 0 -18 9 2 Cr-52 0 0 -19 9 2 Cr-53 0 0 -20 9 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 10 1 H-1 0.123944 0.541390 -22 10 1 O-16 0.000000 0.000000 -23 10 1 B-10 0.000000 0.000000 -24 10 1 B-11 0.000000 0.000000 -25 10 1 Fe-54 0.000000 0.000000 -26 10 1 Fe-56 0.000000 0.000000 -27 10 1 Fe-57 0.000000 0.000000 -28 10 1 Fe-58 0.000000 0.000000 -29 10 1 Ni-58 0.000000 0.000000 -30 10 1 Ni-60 0.000000 0.000000 -31 10 1 Ni-61 0.000000 0.000000 -32 10 1 Ni-62 0.000000 0.000000 -33 10 1 Ni-64 0.000000 0.000000 -34 10 1 Mn-55 0.000000 0.000000 -35 10 1 Si-28 0.000000 0.000000 -36 10 1 Si-29 0.000000 0.000000 -37 10 1 Si-30 0.000000 0.000000 -38 10 1 Cr-50 0.111571 0.138458 -39 10 1 Cr-52 0.000000 0.000000 -40 10 1 Cr-53 0.000000 0.000000 -41 10 1 Cr-54 0.000000 0.000000 -0 10 2 H-1 0.000000 0.000000 -1 10 2 O-16 0.000000 0.000000 -2 10 2 B-10 0.000000 0.000000 -3 10 2 B-11 0.000000 0.000000 -4 10 2 Fe-54 0.000000 0.000000 -5 10 2 Fe-56 0.000000 0.000000 -6 10 2 Fe-57 0.000000 0.000000 -7 10 2 Fe-58 0.000000 0.000000 -8 10 2 Ni-58 0.000000 0.000000 -9 10 2 Ni-60 0.000000 0.000000 -10 10 2 Ni-61 0.000000 0.000000 -11 10 2 Ni-62 0.000000 0.000000 -12 10 2 Ni-64 0.000000 0.000000 -13 10 2 Mn-55 0.000000 0.000000 -14 10 2 Si-28 0.000000 0.000000 -15 10 2 Si-29 0.000000 0.000000 -16 10 2 Si-30 0.000000 0.000000 -17 10 2 Cr-50 0.000000 0.000000 -18 10 2 Cr-52 0.000000 0.000000 -19 10 2 Cr-53 0.000000 0.000000 -20 10 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. -21 10 1 H-1 0 0 -22 10 1 O-16 0 0 -23 10 1 B-10 0 0 -24 10 1 B-11 0 0 -25 10 1 Fe-54 0 0 -26 10 1 Fe-56 0 0 -27 10 1 Fe-57 0 0 -28 10 1 Fe-58 0 0 -29 10 1 Ni-58 0 0 -30 10 1 Ni-60 0 0 -31 10 1 Ni-61 0 0 -32 10 1 Ni-62 0 0 -33 10 1 Ni-64 0 0 -34 10 1 Mn-55 0 0 -35 10 1 Si-28 0 0 -36 10 1 Si-29 0 0 -37 10 1 Si-30 0 0 -38 10 1 Cr-50 0 0 -39 10 1 Cr-52 0 0 -40 10 1 Cr-53 0 0 -41 10 1 Cr-54 0 0 -0 10 2 H-1 0 0 -1 10 2 O-16 0 0 -2 10 2 B-10 0 0 -3 10 2 B-11 0 0 -4 10 2 Fe-54 0 0 -5 10 2 Fe-56 0 0 -6 10 2 Fe-57 0 0 -7 10 2 Fe-58 0 0 -8 10 2 Ni-58 0 0 -9 10 2 Ni-60 0 0 -10 10 2 Ni-61 0 0 -11 10 2 Ni-62 0 0 -12 10 2 Ni-64 0 0 -13 10 2 Mn-55 0 0 -14 10 2 Si-28 0 0 -15 10 2 Si-29 0 0 -16 10 2 Si-30 0 0 -17 10 2 Cr-50 0 0 -18 10 2 Cr-52 0 0 -19 10 2 Cr-53 0 0 -20 10 2 Cr-54 0 0 material group in group out nuclide moment mean -252 10 1 1 H-1 P0 0.429436 -253 10 1 1 H-1 P1 0.305492 -254 10 1 1 H-1 P2 0.144235 -255 10 1 1 H-1 P3 0.045491 -256 10 1 1 O-16 P0 0.000000 -257 10 1 1 O-16 P1 0.000000 -258 10 1 1 O-16 P2 0.000000 -259 10 1 1 O-16 P3 0.000000 -260 10 1 1 B-10 P0 0.000000 -261 10 1 1 B-10 P1 0.000000 -262 10 1 1 B-10 P2 0.000000 -263 10 1 1 B-10 P3 0.000000 -264 10 1 1 B-11 P0 0.000000 -265 10 1 1 B-11 P1 0.000000 -266 10 1 1 B-11 P2 0.000000 -267 10 1 1 B-11 P3 0.000000 -268 10 1 1 Fe-54 P0 0.000000 -269 10 1 1 Fe-54 P1 0.000000 -270 10 1 1 Fe-54 P2 0.000000 -271 10 1 1 Fe-54 P3 0.000000 -272 10 1 1 Fe-56 P0 0.000000 -273 10 1 1 Fe-56 P1 0.000000 -274 10 1 1 Fe-56 P2 0.000000 -275 10 1 1 Fe-56 P3 0.000000 -276 10 1 1 Fe-57 P0 0.000000 -277 10 1 1 Fe-57 P1 0.000000 -278 10 1 1 Fe-57 P2 0.000000 -279 10 1 1 Fe-57 P3 0.000000 -280 10 1 1 Fe-58 P0 0.000000 -281 10 1 1 Fe-58 P1 0.000000 -282 10 1 1 Fe-58 P2 0.000000 -283 10 1 1 Fe-58 P3 0.000000 -284 10 1 1 Ni-58 P0 0.000000 -285 10 1 1 Ni-58 P1 0.000000 -286 10 1 1 Ni-58 P2 0.000000 -287 10 1 1 Ni-58 P3 0.000000 -288 10 1 1 Ni-60 P0 0.000000 -289 10 1 1 Ni-60 P1 0.000000 -290 10 1 1 Ni-60 P2 0.000000 -291 10 1 1 Ni-60 P3 0.000000 -292 10 1 1 Ni-61 P0 0.000000 -293 10 1 1 Ni-61 P1 0.000000 -294 10 1 1 Ni-61 P2 0.000000 -295 10 1 1 Ni-61 P3 0.000000 -296 10 1 1 Ni-62 P0 0.000000 -297 10 1 1 Ni-62 P1 0.000000 -298 10 1 1 Ni-62 P2 0.000000 -299 10 1 1 Ni-62 P3 0.000000 -300 10 1 1 Ni-64 P0 0.000000 -301 10 1 1 Ni-64 P1 0.000000 -302 10 1 1 Ni-64 P2 0.000000 -303 10 1 1 Ni-64 P3 0.000000 -304 10 1 1 Mn-55 P0 0.000000 -305 10 1 1 Mn-55 P1 0.000000 -306 10 1 1 Mn-55 P2 0.000000 -307 10 1 1 Mn-55 P3 0.000000 -308 10 1 1 Si-28 P0 0.000000 -309 10 1 1 Si-28 P1 0.000000 -310 10 1 1 Si-28 P2 0.000000 -311 10 1 1 Si-28 P3 0.000000 -312 10 1 1 Si-29 P0 0.000000 -313 10 1 1 Si-29 P1 0.000000 -314 10 1 1 Si-29 P2 0.000000 -315 10 1 1 Si-29 P3 0.000000 -316 10 1 1 Si-30 P0 0.000000 -317 10 1 1 Si-30 P1 0.000000 -318 10 1 1 Si-30 P2 0.000000 -319 10 1 1 Si-30 P3 0.000000 -320 10 1 1 Cr-50 P0 0.071573 -321 10 1 1 Cr-50 P1 -0.039998 -322 10 1 1 Cr-50 P2 -0.002257 -323 10 1 1 Cr-50 P3 0.028768 -324 10 1 1 Cr-52 P0 0.000000 -325 10 1 1 Cr-52 P1 0.000000 -326 10 1 1 Cr-52 P2 0.000000 -327 10 1 1 Cr-52 P3 0.000000 -328 10 1 1 Cr-53 P0 0.000000 -329 10 1 1 Cr-53 P1 0.000000 -330 10 1 1 Cr-53 P2 0.000000 -331 10 1 1 Cr-53 P3 0.000000 -332 10 1 1 Cr-54 P0 0.000000 -333 10 1 1 Cr-54 P1 0.000000 -334 10 1 1 Cr-54 P2 0.000000 -335 10 1 1 Cr-54 P3 0.000000 -168 10 1 2 H-1 P0 0.000000 -169 10 1 2 H-1 P1 0.000000 -170 10 1 2 H-1 P2 0.000000 -171 10 1 2 H-1 P3 0.000000 -172 10 1 2 O-16 P0 0.000000 -173 10 1 2 O-16 P1 0.000000 -174 10 1 2 O-16 P2 0.000000 -175 10 1 2 O-16 P3 0.000000 -176 10 1 2 B-10 P0 0.000000 -177 10 1 2 B-10 P1 0.000000 -178 10 1 2 B-10 P2 0.000000 -179 10 1 2 B-10 P3 0.000000 -180 10 1 2 B-11 P0 0.000000 -181 10 1 2 B-11 P1 0.000000 -182 10 1 2 B-11 P2 0.000000 -183 10 1 2 B-11 P3 0.000000 -184 10 1 2 Fe-54 P0 0.000000 -185 10 1 2 Fe-54 P1 0.000000 -186 10 1 2 Fe-54 P2 0.000000 -187 10 1 2 Fe-54 P3 0.000000 -188 10 1 2 Fe-56 P0 0.000000 -189 10 1 2 Fe-56 P1 0.000000 -190 10 1 2 Fe-56 P2 0.000000 -191 10 1 2 Fe-56 P3 0.000000 -192 10 1 2 Fe-57 P0 0.000000 -193 10 1 2 Fe-57 P1 0.000000 -194 10 1 2 Fe-57 P2 0.000000 -195 10 1 2 Fe-57 P3 0.000000 -196 10 1 2 Fe-58 P0 0.000000 -197 10 1 2 Fe-58 P1 0.000000 -198 10 1 2 Fe-58 P2 0.000000 -199 10 1 2 Fe-58 P3 0.000000 -200 10 1 2 Ni-58 P0 0.000000 -201 10 1 2 Ni-58 P1 0.000000 -202 10 1 2 Ni-58 P2 0.000000 -203 10 1 2 Ni-58 P3 0.000000 -204 10 1 2 Ni-60 P0 0.000000 -205 10 1 2 Ni-60 P1 0.000000 -206 10 1 2 Ni-60 P2 0.000000 -207 10 1 2 Ni-60 P3 0.000000 -208 10 1 2 Ni-61 P0 0.000000 -209 10 1 2 Ni-61 P1 0.000000 -210 10 1 2 Ni-61 P2 0.000000 -211 10 1 2 Ni-61 P3 0.000000 -212 10 1 2 Ni-62 P0 0.000000 -213 10 1 2 Ni-62 P1 0.000000 -214 10 1 2 Ni-62 P2 0.000000 -215 10 1 2 Ni-62 P3 0.000000 -216 10 1 2 Ni-64 P0 0.000000 -217 10 1 2 Ni-64 P1 0.000000 -218 10 1 2 Ni-64 P2 0.000000 -219 10 1 2 Ni-64 P3 0.000000 -220 10 1 2 Mn-55 P0 0.000000 -221 10 1 2 Mn-55 P1 0.000000 -222 10 1 2 Mn-55 P2 0.000000 -223 10 1 2 Mn-55 P3 0.000000 -224 10 1 2 Si-28 P0 0.000000 -225 10 1 2 Si-28 P1 0.000000 -226 10 1 2 Si-28 P2 0.000000 -227 10 1 2 Si-28 P3 0.000000 -228 10 1 2 Si-29 P0 0.000000 -229 10 1 2 Si-29 P1 0.000000 -230 10 1 2 Si-29 P2 0.000000 -231 10 1 2 Si-29 P3 0.000000 -232 10 1 2 Si-30 P0 0.000000 -233 10 1 2 Si-30 P1 0.000000 -234 10 1 2 Si-30 P2 0.000000 -235 10 1 2 Si-30 P3 0.000000 -236 10 1 2 Cr-50 P0 0.000000 -237 10 1 2 Cr-50 P1 0.000000 -238 10 1 2 Cr-50 P2 0.000000 -239 10 1 2 Cr-50 P3 0.000000 -240 10 1 2 Cr-52 P0 0.000000 -241 10 1 2 Cr-52 P1 0.000000 -242 10 1 2 Cr-52 P2 0.000000 -243 10 1 2 Cr-52 P3 0.000000 -244 10 1 2 Cr-53 P0 0.000000 -245 10 1 2 Cr-53 P1 0.000000 -246 10 1 2 Cr-53 P2 0.000000 -247 10 1 2 Cr-53 P3 0.000000 -248 10 1 2 Cr-54 P0 0.000000 -249 10 1 2 Cr-54 P1 0.000000 -250 10 1 2 Cr-54 P2 0.000000 -251 10 1 2 Cr-54 P3 0.000000 -84 10 2 1 H-1 P0 0.000000 -85 10 2 1 H-1 P1 0.000000 -86 10 2 1 H-1 P2 0.000000 -87 10 2 1 H-1 P3 0.000000 -88 10 2 1 O-16 P0 0.000000 -89 10 2 1 O-16 P1 0.000000 -90 10 2 1 O-16 P2 0.000000 -91 10 2 1 O-16 P3 0.000000 -92 10 2 1 B-10 P0 0.000000 -93 10 2 1 B-10 P1 0.000000 -94 10 2 1 B-10 P2 0.000000 -95 10 2 1 B-10 P3 0.000000 -96 10 2 1 B-11 P0 0.000000 -97 10 2 1 B-11 P1 0.000000 -98 10 2 1 B-11 P2 0.000000 -99 10 2 1 B-11 P3 0.000000 -100 10 2 1 Fe-54 P0 0.000000 -101 10 2 1 Fe-54 P1 0.000000 -102 10 2 1 Fe-54 P2 0.000000 -103 10 2 1 Fe-54 P3 0.000000 -104 10 2 1 Fe-56 P0 0.000000 -105 10 2 1 Fe-56 P1 0.000000 -106 10 2 1 Fe-56 P2 0.000000 -107 10 2 1 Fe-56 P3 0.000000 -108 10 2 1 Fe-57 P0 0.000000 -109 10 2 1 Fe-57 P1 0.000000 -110 10 2 1 Fe-57 P2 0.000000 -111 10 2 1 Fe-57 P3 0.000000 -112 10 2 1 Fe-58 P0 0.000000 -113 10 2 1 Fe-58 P1 0.000000 -114 10 2 1 Fe-58 P2 0.000000 -115 10 2 1 Fe-58 P3 0.000000 -116 10 2 1 Ni-58 P0 0.000000 -117 10 2 1 Ni-58 P1 0.000000 -118 10 2 1 Ni-58 P2 0.000000 -119 10 2 1 Ni-58 P3 0.000000 -120 10 2 1 Ni-60 P0 0.000000 -121 10 2 1 Ni-60 P1 0.000000 -122 10 2 1 Ni-60 P2 0.000000 -123 10 2 1 Ni-60 P3 0.000000 -124 10 2 1 Ni-61 P0 0.000000 -125 10 2 1 Ni-61 P1 0.000000 -126 10 2 1 Ni-61 P2 0.000000 -127 10 2 1 Ni-61 P3 0.000000 -128 10 2 1 Ni-62 P0 0.000000 -129 10 2 1 Ni-62 P1 0.000000 -130 10 2 1 Ni-62 P2 0.000000 -131 10 2 1 Ni-62 P3 0.000000 -132 10 2 1 Ni-64 P0 0.000000 -133 10 2 1 Ni-64 P1 0.000000 -134 10 2 1 Ni-64 P2 0.000000 -135 10 2 1 Ni-64 P3 0.000000 -136 10 2 1 Mn-55 P0 0.000000 -137 10 2 1 Mn-55 P1 0.000000 -138 10 2 1 Mn-55 P2 0.000000 -139 10 2 1 Mn-55 P3 0.000000 -140 10 2 1 Si-28 P0 0.000000 -141 10 2 1 Si-28 P1 0.000000 -142 10 2 1 Si-28 P2 0.000000 -143 10 2 1 Si-28 P3 0.000000 -144 10 2 1 Si-29 P0 0.000000 -145 10 2 1 Si-29 P1 0.000000 -146 10 2 1 Si-29 P2 0.000000 -147 10 2 1 Si-29 P3 0.000000 -148 10 2 1 Si-30 P0 0.000000 -149 10 2 1 Si-30 P1 0.000000 -150 10 2 1 Si-30 P2 0.000000 -151 10 2 1 Si-30 P3 0.000000 -152 10 2 1 Cr-50 P0 0.000000 -153 10 2 1 Cr-50 P1 0.000000 -154 10 2 1 Cr-50 P2 0.000000 -155 10 2 1 Cr-50 P3 0.000000 -156 10 2 1 Cr-52 P0 0.000000 -157 10 2 1 Cr-52 P1 0.000000 -158 10 2 1 Cr-52 P2 0.000000 -159 10 2 1 Cr-52 P3 0.000000 -160 10 2 1 Cr-53 P0 0.000000 -161 10 2 1 Cr-53 P1 0.000000 -162 10 2 1 Cr-53 P2 0.000000 -163 10 2 1 Cr-53 P3 0.000000 -164 10 2 1 Cr-54 P0 0.000000 -165 10 2 1 Cr-54 P1 0.000000 -166 10 2 1 Cr-54 P2 0.000000 -167 10 2 1 Cr-54 P3 0.000000 -0 10 2 2 H-1 P0 0.000000 -1 10 2 2 H-1 P1 0.000000 -2 10 2 2 H-1 P2 0.000000 -3 10 2 2 H-1 P3 0.000000 -4 10 2 2 O-16 P0 0.000000 -5 10 2 2 O-16 P1 0.000000 -6 10 2 2 O-16 P2 0.000000 -7 10 2 2 O-16 P3 0.000000 -8 10 2 2 B-10 P0 0.000000 -9 10 2 2 B-10 P1 0.000000 -10 10 2 2 B-10 P2 0.000000 -11 10 2 2 B-10 P3 0.000000 -12 10 2 2 B-11 P0 0.000000 -13 10 2 2 B-11 P1 0.000000 -14 10 2 2 B-11 P2 0.000000 -15 10 2 2 B-11 P3 0.000000 -16 10 2 2 Fe-54 P0 0.000000 -17 10 2 2 Fe-54 P1 0.000000 -18 10 2 2 Fe-54 P2 0.000000 -19 10 2 2 Fe-54 P3 0.000000 -20 10 2 2 Fe-56 P0 0.000000 -21 10 2 2 Fe-56 P1 0.000000 -22 10 2 2 Fe-56 P2 0.000000 -23 10 2 2 Fe-56 P3 0.000000 -24 10 2 2 Fe-57 P0 0.000000 -25 10 2 2 Fe-57 P1 0.000000 -26 10 2 2 Fe-57 P2 0.000000 -27 10 2 2 Fe-57 P3 0.000000 -28 10 2 2 Fe-58 P0 0.000000 -29 10 2 2 Fe-58 P1 0.000000 -30 10 2 2 Fe-58 P2 0.000000 -31 10 2 2 Fe-58 P3 0.000000 -32 10 2 2 Ni-58 P0 0.000000 -33 10 2 2 Ni-58 P1 0.000000 -34 10 2 2 Ni-58 P2 0.000000 -35 10 2 2 Ni-58 P3 0.000000 -36 10 2 2 Ni-60 P0 0.000000 -37 10 2 2 Ni-60 P1 0.000000 -38 10 2 2 Ni-60 P2 0.000000 -39 10 2 2 Ni-60 P3 0.000000 -40 10 2 2 Ni-61 P0 0.000000 -41 10 2 2 Ni-61 P1 0.000000 -42 10 2 2 Ni-61 P2 0.000000 -43 10 2 2 Ni-61 P3 0.000000 -44 10 2 2 Ni-62 P0 0.000000 -45 10 2 2 Ni-62 P1 0.000000 -46 10 2 2 Ni-62 P2 0.000000 -47 10 2 2 Ni-62 P3 0.000000 -48 10 2 2 Ni-64 P0 0.000000 -49 10 2 2 Ni-64 P1 0.000000 -50 10 2 2 Ni-64 P2 0.000000 -51 10 2 2 Ni-64 P3 0.000000 -52 10 2 2 Mn-55 P0 0.000000 -53 10 2 2 Mn-55 P1 0.000000 -54 10 2 2 Mn-55 P2 0.000000 -55 10 2 2 Mn-55 P3 0.000000 -56 10 2 2 Si-28 P0 0.000000 -57 10 2 2 Si-28 P1 0.000000 -58 10 2 2 Si-28 P2 0.000000 -59 10 2 2 Si-28 P3 0.000000 -60 10 2 2 Si-29 P0 0.000000 -61 10 2 2 Si-29 P1 0.000000 -62 10 2 2 Si-29 P2 0.000000 -63 10 2 2 Si-29 P3 0.000000 -64 10 2 2 Si-30 P0 0.000000 -65 10 2 2 Si-30 P1 0.000000 -66 10 2 2 Si-30 P2 0.000000 -67 10 2 2 Si-30 P3 0.000000 -68 10 2 2 Cr-50 P0 0.000000 -69 10 2 2 Cr-50 P1 0.000000 -70 10 2 2 Cr-50 P2 0.000000 -71 10 2 2 Cr-50 P3 0.000000 -72 10 2 2 Cr-52 P0 0.000000 -73 10 2 2 Cr-52 P1 0.000000 -74 10 2 2 Cr-52 P2 0.000000 -75 10 2 2 Cr-52 P3 0.000000 -76 10 2 2 Cr-53 P0 0.000000 -77 10 2 2 Cr-53 P1 0.000000 -78 10 2 2 Cr-53 P2 0.000000 -79 10 2 2 Cr-53 P3 0.000000 -80 10 2 2 Cr-54 P0 0.000000 -81 10 2 2 Cr-54 P1 0.000000 -82 10 2 2 Cr-54 P2 0.000000 -83 10 2 2 Cr-54 P3 0.000000 material group out nuclide mean std. dev. -21 10 1 H-1 0 0 -22 10 1 O-16 0 0 -23 10 1 B-10 0 0 -24 10 1 B-11 0 0 -25 10 1 Fe-54 0 0 -26 10 1 Fe-56 0 0 -27 10 1 Fe-57 0 0 -28 10 1 Fe-58 0 0 -29 10 1 Ni-58 0 0 -30 10 1 Ni-60 0 0 -31 10 1 Ni-61 0 0 -32 10 1 Ni-62 0 0 -33 10 1 Ni-64 0 0 -34 10 1 Mn-55 0 0 -35 10 1 Si-28 0 0 -36 10 1 Si-29 0 0 -37 10 1 Si-30 0 0 -38 10 1 Cr-50 0 0 -39 10 1 Cr-52 0 0 -40 10 1 Cr-53 0 0 -41 10 1 Cr-54 0 0 -0 10 2 H-1 0 0 -1 10 2 O-16 0 0 -2 10 2 B-10 0 0 -3 10 2 B-11 0 0 -4 10 2 Fe-54 0 0 -5 10 2 Fe-56 0 0 -6 10 2 Fe-57 0 0 -7 10 2 Fe-58 0 0 -8 10 2 Ni-58 0 0 -9 10 2 Ni-60 0 0 -10 10 2 Ni-61 0 0 -11 10 2 Ni-62 0 0 -12 10 2 Ni-64 0 0 -13 10 2 Mn-55 0 0 -14 10 2 Si-28 0 0 -15 10 2 Si-29 0 0 -16 10 2 Si-30 0 0 -17 10 2 Cr-50 0 0 -18 10 2 Cr-52 0 0 -19 10 2 Cr-53 0 0 -20 10 2 Cr-54 0 0 material group in nuclide mean std. dev. -9 11 1 H-1 0.131470 0.476035 -10 11 1 O-16 0.028684 0.043000 -11 11 1 B-10 0.000000 0.000000 -12 11 1 B-11 0.000000 0.000000 -13 11 1 Zr-90 0.021980 0.039963 -14 11 1 Zr-91 0.000000 0.000000 -15 11 1 Zr-92 0.000000 0.000000 -16 11 1 Zr-94 0.004191 0.087344 -17 11 1 Zr-96 0.000000 0.000000 -0 11 2 H-1 0.687243 1.239217 -1 11 2 O-16 0.000000 0.000000 -2 11 2 B-10 0.042902 0.060672 -3 11 2 B-11 0.000000 0.000000 -4 11 2 Zr-90 0.039576 0.105193 -5 11 2 Zr-91 0.000000 0.000000 -6 11 2 Zr-92 0.084226 0.103161 -7 11 2 Zr-94 0.092039 0.125985 -8 11 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -9 11 1 H-1 0 0 -10 11 1 O-16 0 0 -11 11 1 B-10 0 0 -12 11 1 B-11 0 0 -13 11 1 Zr-90 0 0 -14 11 1 Zr-91 0 0 -15 11 1 Zr-92 0 0 -16 11 1 Zr-94 0 0 -17 11 1 Zr-96 0 0 -0 11 2 H-1 0 0 -1 11 2 O-16 0 0 -2 11 2 B-10 0 0 -3 11 2 B-11 0 0 -4 11 2 Zr-90 0 0 -5 11 2 Zr-91 0 0 -6 11 2 Zr-92 0 0 -7 11 2 Zr-94 0 0 -8 11 2 Zr-96 0 0 material group in group out nuclide moment mean -108 11 1 1 H-1 P0 0.350627 -109 11 1 1 H-1 P1 0.251032 -110 11 1 1 H-1 P2 0.118434 -111 11 1 1 H-1 P3 0.029897 -112 11 1 1 O-16 P0 0.031875 -113 11 1 1 O-16 P1 0.003191 -114 11 1 1 O-16 P2 -0.015458 -115 11 1 1 O-16 P3 -0.004707 -116 11 1 1 B-10 P0 0.000000 -117 11 1 1 B-10 P1 0.000000 -118 11 1 1 B-10 P2 0.000000 -119 11 1 1 B-10 P3 0.000000 -120 11 1 1 B-11 P0 0.000000 -121 11 1 1 B-11 P1 0.000000 -122 11 1 1 B-11 P2 0.000000 -123 11 1 1 B-11 P3 0.000000 -124 11 1 1 Zr-90 P0 0.031875 -125 11 1 1 Zr-90 P1 0.009895 -126 11 1 1 Zr-90 P2 -0.011330 -127 11 1 1 Zr-90 P3 -0.012459 -128 11 1 1 Zr-91 P0 0.000000 -129 11 1 1 Zr-91 P1 0.000000 -130 11 1 1 Zr-91 P2 0.000000 -131 11 1 1 Zr-91 P3 0.000000 -132 11 1 1 Zr-92 P0 0.000000 -133 11 1 1 Zr-92 P1 0.000000 -134 11 1 1 Zr-92 P2 0.000000 -135 11 1 1 Zr-92 P3 0.000000 -136 11 1 1 Zr-94 P0 0.063750 -137 11 1 1 Zr-94 P1 0.059559 -138 11 1 1 Zr-94 P2 0.051729 -139 11 1 1 Zr-94 P3 0.041273 -140 11 1 1 Zr-96 P0 0.000000 -141 11 1 1 Zr-96 P1 0.000000 -142 11 1 1 Zr-96 P2 0.000000 -143 11 1 1 Zr-96 P3 0.000000 -72 11 1 2 H-1 P0 0.031875 -73 11 1 2 H-1 P1 0.008585 -74 11 1 2 H-1 P2 -0.012470 -75 11 1 2 H-1 P3 -0.011320 -76 11 1 2 O-16 P0 0.000000 -77 11 1 2 O-16 P1 0.000000 -78 11 1 2 O-16 P2 0.000000 -79 11 1 2 O-16 P3 0.000000 -80 11 1 2 B-10 P0 0.000000 -81 11 1 2 B-10 P1 0.000000 -82 11 1 2 B-10 P2 0.000000 -83 11 1 2 B-10 P3 0.000000 -84 11 1 2 B-11 P0 0.000000 -85 11 1 2 B-11 P1 0.000000 -86 11 1 2 B-11 P2 0.000000 -87 11 1 2 B-11 P3 0.000000 -88 11 1 2 Zr-90 P0 0.000000 -89 11 1 2 Zr-90 P1 0.000000 -90 11 1 2 Zr-90 P2 0.000000 -91 11 1 2 Zr-90 P3 0.000000 -92 11 1 2 Zr-91 P0 0.000000 -93 11 1 2 Zr-91 P1 0.000000 -94 11 1 2 Zr-91 P2 0.000000 -95 11 1 2 Zr-91 P3 0.000000 -96 11 1 2 Zr-92 P0 0.000000 -97 11 1 2 Zr-92 P1 0.000000 -98 11 1 2 Zr-92 P2 0.000000 -99 11 1 2 Zr-92 P3 0.000000 -100 11 1 2 Zr-94 P0 0.000000 -101 11 1 2 Zr-94 P1 0.000000 -102 11 1 2 Zr-94 P2 0.000000 -103 11 1 2 Zr-94 P3 0.000000 -104 11 1 2 Zr-96 P0 0.000000 -105 11 1 2 Zr-96 P1 0.000000 -106 11 1 2 Zr-96 P2 0.000000 -107 11 1 2 Zr-96 P3 0.000000 -36 11 2 1 H-1 P0 0.000000 -37 11 2 1 H-1 P1 0.000000 -38 11 2 1 H-1 P2 0.000000 -39 11 2 1 H-1 P3 0.000000 -40 11 2 1 O-16 P0 0.000000 -41 11 2 1 O-16 P1 0.000000 -42 11 2 1 O-16 P2 0.000000 -43 11 2 1 O-16 P3 0.000000 -44 11 2 1 B-10 P0 0.000000 -45 11 2 1 B-10 P1 0.000000 -46 11 2 1 B-10 P2 0.000000 -47 11 2 1 B-10 P3 0.000000 -48 11 2 1 B-11 P0 0.000000 -49 11 2 1 B-11 P1 0.000000 -50 11 2 1 B-11 P2 0.000000 -51 11 2 1 B-11 P3 0.000000 -52 11 2 1 Zr-90 P0 0.000000 -53 11 2 1 Zr-90 P1 0.000000 -54 11 2 1 Zr-90 P2 0.000000 -55 11 2 1 Zr-90 P3 0.000000 -56 11 2 1 Zr-91 P0 0.000000 -57 11 2 1 Zr-91 P1 0.000000 -58 11 2 1 Zr-91 P2 0.000000 -59 11 2 1 Zr-91 P3 0.000000 -60 11 2 1 Zr-92 P0 0.000000 -61 11 2 1 Zr-92 P1 0.000000 -62 11 2 1 Zr-92 P2 0.000000 -63 11 2 1 Zr-92 P3 0.000000 -64 11 2 1 Zr-94 P0 0.000000 -65 11 2 1 Zr-94 P1 0.000000 -66 11 2 1 Zr-94 P2 0.000000 -67 11 2 1 Zr-94 P3 0.000000 -68 11 2 1 Zr-96 P0 0.000000 -69 11 2 1 Zr-96 P1 0.000000 -70 11 2 1 Zr-96 P2 0.000000 -71 11 2 1 Zr-96 P3 0.000000 -0 11 2 2 H-1 P0 0.986741 -1 11 2 2 H-1 P1 0.287943 -2 11 2 2 H-1 P2 0.156802 -3 11 2 2 H-1 P3 0.037565 -4 11 2 2 O-16 P0 0.000000 -5 11 2 2 O-16 P1 0.000000 -6 11 2 2 O-16 P2 0.000000 -7 11 2 2 O-16 P3 0.000000 -8 11 2 2 B-10 P0 0.000000 -9 11 2 2 B-10 P1 0.000000 -10 11 2 2 B-10 P2 0.000000 -11 11 2 2 B-10 P3 0.000000 -12 11 2 2 B-11 P0 0.000000 -13 11 2 2 B-11 P1 0.000000 -14 11 2 2 B-11 P2 0.000000 -15 11 2 2 B-11 P3 0.000000 -16 11 2 2 Zr-90 P0 0.085804 -17 11 2 2 Zr-90 P1 0.046227 -18 11 2 2 Zr-90 P2 -0.005520 -19 11 2 2 Zr-90 P3 -0.035731 -20 11 2 2 Zr-91 P0 0.000000 -21 11 2 2 Zr-91 P1 0.000000 -22 11 2 2 Zr-91 P2 0.000000 -23 11 2 2 Zr-91 P3 0.000000 -24 11 2 2 Zr-92 P0 0.042902 -25 11 2 2 Zr-92 P1 -0.041324 -26 11 2 2 Zr-92 P2 0.038256 -27 11 2 2 Zr-92 P3 -0.033866 -28 11 2 2 Zr-94 P0 0.085804 -29 11 2 2 Zr-94 P1 -0.006235 -30 11 2 2 Zr-94 P2 0.028653 -31 11 2 2 Zr-94 P3 -0.016482 -32 11 2 2 Zr-96 P0 0.000000 -33 11 2 2 Zr-96 P1 0.000000 -34 11 2 2 Zr-96 P2 0.000000 -35 11 2 2 Zr-96 P3 0.000000 material group out nuclide mean std. dev. -9 11 1 H-1 0 0 -10 11 1 O-16 0 0 -11 11 1 B-10 0 0 -12 11 1 B-11 0 0 -13 11 1 Zr-90 0 0 -14 11 1 Zr-91 0 0 -15 11 1 Zr-92 0 0 -16 11 1 Zr-94 0 0 -17 11 1 Zr-96 0 0 -0 11 2 H-1 0 0 -1 11 2 O-16 0 0 -2 11 2 B-10 0 0 -3 11 2 B-11 0 0 -4 11 2 Zr-90 0 0 -5 11 2 Zr-91 0 0 -6 11 2 Zr-92 0 0 -7 11 2 Zr-94 0 0 -8 11 2 Zr-96 0 0 material group in nuclide mean std. dev. -9 12 1 H-1 0.098944 0.178543 -10 12 1 O-16 0.013270 0.020403 -11 12 1 B-10 0.000000 0.000000 -12 12 1 B-11 0.000000 0.000000 -13 12 1 Zr-90 0.089997 0.075538 -14 12 1 Zr-91 0.000000 0.000000 -15 12 1 Zr-92 0.003501 0.017031 -16 12 1 Zr-94 0.004850 0.016327 -17 12 1 Zr-96 0.002730 0.017476 -0 12 2 H-1 1.261686 1.980336 -1 12 2 O-16 0.079159 0.104796 -2 12 2 B-10 0.016928 0.023940 -3 12 2 B-11 0.000000 0.000000 -4 12 2 Zr-90 0.000000 0.000000 -5 12 2 Zr-91 0.033201 0.040665 -6 12 2 Zr-92 0.000000 0.000000 -7 12 2 Zr-94 0.000000 0.000000 -8 12 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -9 12 1 H-1 0 0 -10 12 1 O-16 0 0 -11 12 1 B-10 0 0 -12 12 1 B-11 0 0 -13 12 1 Zr-90 0 0 -14 12 1 Zr-91 0 0 -15 12 1 Zr-92 0 0 -16 12 1 Zr-94 0 0 -17 12 1 Zr-96 0 0 -0 12 2 H-1 0 0 -1 12 2 O-16 0 0 -2 12 2 B-10 0 0 -3 12 2 B-11 0 0 -4 12 2 Zr-90 0 0 -5 12 2 Zr-91 0 0 -6 12 2 Zr-92 0 0 -7 12 2 Zr-94 0 0 -8 12 2 Zr-96 0 0 material group in group out nuclide moment mean -108 12 1 1 H-1 P0 0.245156 -109 12 1 1 H-1 P1 0.173452 -110 12 1 1 H-1 P2 0.092660 -111 12 1 1 H-1 P3 0.047419 -112 12 1 1 O-16 P0 0.027240 -113 12 1 1 O-16 P1 0.013970 -114 12 1 1 O-16 P2 0.000090 -115 12 1 1 O-16 P3 -0.004169 -116 12 1 1 B-10 P0 0.000000 -117 12 1 1 B-10 P1 0.000000 -118 12 1 1 B-10 P2 0.000000 -119 12 1 1 B-10 P3 0.000000 -120 12 1 1 B-11 P0 0.000000 -121 12 1 1 B-11 P1 0.000000 -122 12 1 1 B-11 P2 0.000000 -123 12 1 1 B-11 P3 0.000000 -124 12 1 1 Zr-90 P0 0.095339 -125 12 1 1 Zr-90 P1 0.005341 -126 12 1 1 Zr-90 P2 -0.014156 -127 12 1 1 Zr-90 P3 -0.008036 -128 12 1 1 Zr-91 P0 0.000000 -129 12 1 1 Zr-91 P1 0.000000 -130 12 1 1 Zr-91 P2 0.000000 -131 12 1 1 Zr-91 P3 0.000000 -132 12 1 1 Zr-92 P0 0.013620 -133 12 1 1 Zr-92 P1 0.010119 -134 12 1 1 Zr-92 P2 0.004467 -135 12 1 1 Zr-92 P3 -0.001214 -136 12 1 1 Zr-94 P0 0.013620 -137 12 1 1 Zr-94 P1 0.008770 -138 12 1 1 Zr-94 P2 0.001661 -139 12 1 1 Zr-94 P3 -0.004065 -140 12 1 1 Zr-96 P0 0.013620 -141 12 1 1 Zr-96 P1 0.010890 -142 12 1 1 Zr-96 P2 0.006250 -143 12 1 1 Zr-96 P3 0.001069 -72 12 1 2 H-1 P0 0.027240 -73 12 1 2 H-1 P1 -0.010088 -74 12 1 2 H-1 P2 -0.006946 -75 12 1 2 H-1 P3 0.009692 -76 12 1 2 O-16 P0 0.000000 -77 12 1 2 O-16 P1 0.000000 -78 12 1 2 O-16 P2 0.000000 -79 12 1 2 O-16 P3 0.000000 -80 12 1 2 B-10 P0 0.000000 -81 12 1 2 B-10 P1 0.000000 -82 12 1 2 B-10 P2 0.000000 -83 12 1 2 B-10 P3 0.000000 -84 12 1 2 B-11 P0 0.000000 -85 12 1 2 B-11 P1 0.000000 -86 12 1 2 B-11 P2 0.000000 -87 12 1 2 B-11 P3 0.000000 -88 12 1 2 Zr-90 P0 0.000000 -89 12 1 2 Zr-90 P1 0.000000 -90 12 1 2 Zr-90 P2 0.000000 -91 12 1 2 Zr-90 P3 0.000000 -92 12 1 2 Zr-91 P0 0.000000 -93 12 1 2 Zr-91 P1 0.000000 -94 12 1 2 Zr-91 P2 0.000000 -95 12 1 2 Zr-91 P3 0.000000 -96 12 1 2 Zr-92 P0 0.000000 -97 12 1 2 Zr-92 P1 0.000000 -98 12 1 2 Zr-92 P2 0.000000 -99 12 1 2 Zr-92 P3 0.000000 -100 12 1 2 Zr-94 P0 0.000000 -101 12 1 2 Zr-94 P1 0.000000 -102 12 1 2 Zr-94 P2 0.000000 -103 12 1 2 Zr-94 P3 0.000000 -104 12 1 2 Zr-96 P0 0.000000 -105 12 1 2 Zr-96 P1 0.000000 -106 12 1 2 Zr-96 P2 0.000000 -107 12 1 2 Zr-96 P3 0.000000 -36 12 2 1 H-1 P0 0.000000 -37 12 2 1 H-1 P1 0.000000 -38 12 2 1 H-1 P2 0.000000 -39 12 2 1 H-1 P3 0.000000 -40 12 2 1 O-16 P0 0.000000 -41 12 2 1 O-16 P1 0.000000 -42 12 2 1 O-16 P2 0.000000 -43 12 2 1 O-16 P3 0.000000 -44 12 2 1 B-10 P0 0.000000 -45 12 2 1 B-10 P1 0.000000 -46 12 2 1 B-10 P2 0.000000 -47 12 2 1 B-10 P3 0.000000 -48 12 2 1 B-11 P0 0.000000 -49 12 2 1 B-11 P1 0.000000 -50 12 2 1 B-11 P2 0.000000 -51 12 2 1 B-11 P3 0.000000 -52 12 2 1 Zr-90 P0 0.000000 -53 12 2 1 Zr-90 P1 0.000000 -54 12 2 1 Zr-90 P2 0.000000 -55 12 2 1 Zr-90 P3 0.000000 -56 12 2 1 Zr-91 P0 0.000000 -57 12 2 1 Zr-91 P1 0.000000 -58 12 2 1 Zr-91 P2 0.000000 -59 12 2 1 Zr-91 P3 0.000000 -60 12 2 1 Zr-92 P0 0.000000 -61 12 2 1 Zr-92 P1 0.000000 -62 12 2 1 Zr-92 P2 0.000000 -63 12 2 1 Zr-92 P3 0.000000 -64 12 2 1 Zr-94 P0 0.000000 -65 12 2 1 Zr-94 P1 0.000000 -66 12 2 1 Zr-94 P2 0.000000 -67 12 2 1 Zr-94 P3 0.000000 -68 12 2 1 Zr-96 P0 0.000000 -69 12 2 1 Zr-96 P1 0.000000 -70 12 2 1 Zr-96 P2 0.000000 -71 12 2 1 Zr-96 P3 0.000000 -0 12 2 2 H-1 P0 1.489686 -1 12 2 2 H-1 P1 0.257467 -2 12 2 2 H-1 P2 0.001678 -3 12 2 2 H-1 P3 0.044735 -4 12 2 2 O-16 P0 0.067713 -5 12 2 2 O-16 P1 -0.011446 -6 12 2 2 O-16 P2 -0.002500 -7 12 2 2 O-16 P3 0.007446 -8 12 2 2 B-10 P0 0.000000 -9 12 2 2 B-10 P1 0.000000 -10 12 2 2 B-10 P2 0.000000 -11 12 2 2 B-10 P3 0.000000 -12 12 2 2 B-11 P0 0.000000 -13 12 2 2 B-11 P1 0.000000 -14 12 2 2 B-11 P2 0.000000 -15 12 2 2 B-11 P3 0.000000 -16 12 2 2 Zr-90 P0 0.000000 -17 12 2 2 Zr-90 P1 0.000000 -18 12 2 2 Zr-90 P2 0.000000 -19 12 2 2 Zr-90 P3 0.000000 -20 12 2 2 Zr-91 P0 0.016928 -21 12 2 2 Zr-91 P1 -0.016273 -22 12 2 2 Zr-91 P2 0.015000 -23 12 2 2 Zr-91 P3 -0.013183 -24 12 2 2 Zr-92 P0 0.000000 -25 12 2 2 Zr-92 P1 0.000000 -26 12 2 2 Zr-92 P2 0.000000 -27 12 2 2 Zr-92 P3 0.000000 -28 12 2 2 Zr-94 P0 0.000000 -29 12 2 2 Zr-94 P1 0.000000 -30 12 2 2 Zr-94 P2 0.000000 -31 12 2 2 Zr-94 P3 0.000000 -32 12 2 2 Zr-96 P0 0.000000 -33 12 2 2 Zr-96 P1 0.000000 -34 12 2 2 Zr-96 P2 0.000000 -35 12 2 2 Zr-96 P3 0.000000 material group out nuclide mean std. dev. -9 12 1 H-1 0 0 -10 12 1 O-16 0 0 -11 12 1 B-10 0 0 -12 12 1 B-11 0 0 -13 12 1 Zr-90 0 0 -14 12 1 Zr-91 0 0 -15 12 1 Zr-92 0 0 -16 12 1 Zr-94 0 0 -17 12 1 Zr-96 0 0 -0 12 2 H-1 0 0 -1 12 2 O-16 0 0 -2 12 2 B-10 0 0 -3 12 2 B-11 0 0 -4 12 2 Zr-90 0 0 -5 12 2 Zr-91 0 0 -6 12 2 Zr-92 0 0 -7 12 2 Zr-94 0 0 -8 12 2 Zr-96 0 0 \ No newline at end of file +002a4c91c4b4288dbac2cba267175c4560cca43685bfd5d415775e9fc1635866c1f9c3396a44d01dd29f734a0432e132408d36c9f7c4e34783cc295f2d9dc393 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py b/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py index e0a7c199a0..47c1ec60ae 100644 --- a/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py +++ b/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py @@ -37,7 +37,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.add_to_tallies_file(self._input_set.tallies, merge=False) self._input_set.tallies.export_to_xml() - def _get_results(self, hash_output=False): + def _get_results(self, hash_output=True): """Digest info in the statepoint and return as a string.""" # Read the statepoint file. From eb20de6a51b35d221c8ee8e1f0cc0d86478bba14 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 13 May 2016 22:32:48 -0400 Subject: [PATCH 539/650] Updating per the latest round of comments. This includes simplifying the notebook significantly, and adding a get_xsdata method to Library. --- .../pythonapi/examples/mgxs-part-iv.ipynb | 1428 +++-------------- docs/source/usersguide/mgxs_library.rst | 6 +- openmc/material.py | 12 +- openmc/mgxs/library.py | 275 ++-- openmc/mgxs_library.py | 211 +-- src/input_xml.F90 | 12 +- 6 files changed, 393 insertions(+), 1551 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb index 823d67ae16..d03db2cce6 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb @@ -7,9 +7,8 @@ "This Notebook illustrates the use of the openmc.mgxs.Library class specifically for application in OpenMC's multi-group mode. This example notebook follows the same process as was done in MGXS Part III, but instead uses OpenMC as the multi-group solver. This Notebook illustrates the following features:\n", "\n", " - Calculation of multi-group cross sections for a fuel assembly\n", - " - Automated creation, manipulation and storage of MGXS with openmc.mgxs.Library\n", - " - Validation of multi-group cross sections with OpenMC\n", - " - Steady-state pin-by-pin fission rates comparison between Continuous-Energy mode and Multi-Group OpenMC.\n", + " - Automated creation and storage of MGXS with openmc.mgxs.Library\n", + " - Steady-state pin-by-pin fission rates comparison between continuous-energy and multi-group OpenMC.\n", "\n", "Note: This Notebook illustrates the use of Pandas DataFrames to containerize multi-group cross section data. We recommend using Pandas >v0.15.0 or later since OpenMC's Python API leverages the multi-indexing feature included in the most recent releases of Pandas.\n" ] @@ -84,23 +83,23 @@ "outputs": [], "source": [ "# 1.6 enriched fuel\n", - "fuel = openmc.Material(name='1.6% Fuel')\n", + "fuel = openmc.Material(name='1.6% Fuel', material_id=1)\n", "fuel.set_density('g/cm3', 10.31341)\n", "fuel.add_nuclide(u235, 3.7503e-4)\n", "fuel.add_nuclide(u238, 2.2625e-2)\n", "fuel.add_nuclide(o16, 4.6007e-2)\n", "\n", + "# zircaloy\n", + "zircaloy = openmc.Material(name='Zircaloy', material_id=2)\n", + "zircaloy.set_density('g/cm3', 6.55)\n", + "zircaloy.add_nuclide(zr90, 7.2758e-3)\n", + "\n", "# borated water\n", - "water = openmc.Material(name='Borated Water')\n", + "water = openmc.Material(name='Borated Water', material_id=3)\n", "water.set_density('g/cm3', 0.740582)\n", "water.add_nuclide(h1, 4.9457e-2)\n", "water.add_nuclide(o16, 2.4732e-2)\n", - "water.add_nuclide(b10, 8.0042e-6)\n", - "\n", - "# zircaloy\n", - "zircaloy = openmc.Material(name='Zircaloy')\n", - "zircaloy.set_density('g/cm3', 6.55)\n", - "zircaloy.add_nuclide(zr90, 7.2758e-3)" + "water.add_nuclide(b10, 8.0042e-6)\n" ] }, { @@ -119,7 +118,7 @@ "outputs": [], "source": [ "# Instantiate a Materials object\n", - "materials_file = openmc.Materials((fuel, water, zircaloy))\n", + "materials_file = openmc.Materials((fuel, zircaloy, water))\n", "materials_file.default_xs = '71c'\n", "\n", "# Export to \"materials.xml\"\n", @@ -347,7 +346,7 @@ "outputs": [], "source": [ "# OpenMC simulation parameters\n", - "batches = 500\n", + "batches = 50\n", "inactive = 10\n", "particles = 5000\n", "\n", @@ -434,7 +433,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -523,7 +522,7 @@ "source": [ "Now we must specify the type of domain over which we would like the `Library` to compute multi-group cross sections. The domain type corresponds to the type of tally filter to be used in the tallies created to compute multi-group cross sections. At the present time, the `Library` supports \"material,\" \"cell,\" and \"universe\" domain types. We will use a \"cell\" domain type here to compute cross sections in each of the cells in the fuel assembly geometry.\n", "\n", - "**Note:** By default, the `Library` class will instantiate `MGXS` objects for each and every domain (material, cell or universe) in the geometry of interest. However, one may specify a subset of these domains to the `Library.domains` property. In our case, we wish to compute multi-group cross sections in each and every cell since they will be needed in our downstream multi-group OpenMC calculation on the identical combinatorial geometry mesh." + "**Note:** By default, the `Library` class will instantiate `MGXS` objects for each and every domain (material, cell or universe) in the geometry of interest. However, one may specify a subset of these domains to the `Library.domains` property. In our this simple example, we wish to compute multi-group cross sections only for each material." ] }, { @@ -535,10 +534,10 @@ "outputs": [], "source": [ "# Specify a \"cell\" domain type for the cross section tally filters\n", - "mgxs_lib.domain_type = \"cell\"\n", + "mgxs_lib.domain_type = \"material\"\n", "\n", "# Specify the cell domains over which to compute multi-group cross sections\n", - "mgxs_lib.domains = geometry.get_all_material_cells()" + "mgxs_lib.domains = geometry.get_all_materials()" ] }, { @@ -697,7 +696,7 @@ " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", " Git SHA1: c779ca42c41a062a6a813e03f2add2d182ca9190\n", - " Date/Time: 2016-05-12 21:15:02\n", + " Date/Time: 2016-05-13 22:29:41\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -713,9 +712,9 @@ " Loading ACE cross section table: 92235.71c\n", " Loading ACE cross section table: 92238.71c\n", " Loading ACE cross section table: 8016.71c\n", + " Loading ACE cross section table: 40090.71c\n", " Loading ACE cross section table: 1001.71c\n", " Loading ACE cross section table: 5010.71c\n", - " Loading ACE cross section table: 40090.71c\n", " Maximum neutron transport energy: 20.0000 MeV for 92235.71c\n", " Initializing source particles...\n", "\n", @@ -725,507 +724,57 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 1.05162 \n", - " 2/1 1.05369 \n", - " 3/1 1.02989 \n", - " 4/1 1.00126 \n", - " 5/1 1.03151 \n", - " 6/1 1.00183 \n", - " 7/1 0.99379 \n", - " 8/1 1.04193 \n", - " 9/1 1.01578 \n", - " 10/1 1.03349 \n", - " 11/1 1.03354 \n", - " 12/1 1.03646 1.03500 +/- 0.00146\n", - " 13/1 1.00873 1.02624 +/- 0.00880\n", - " 14/1 1.04263 1.03034 +/- 0.00745\n", - " 15/1 1.01556 1.02738 +/- 0.00648\n", - " 16/1 1.04897 1.03098 +/- 0.00640\n", - " 17/1 1.01796 1.02912 +/- 0.00572\n", - " 18/1 1.02276 1.02833 +/- 0.00502\n", - " 19/1 1.04003 1.02963 +/- 0.00461\n", - " 20/1 1.00695 1.02736 +/- 0.00471\n", - " 21/1 1.00012 1.02488 +/- 0.00493\n", - " 22/1 1.03580 1.02579 +/- 0.00459\n", - " 23/1 1.03427 1.02644 +/- 0.00427\n", - " 24/1 1.06024 1.02886 +/- 0.00463\n", - " 25/1 1.00742 1.02743 +/- 0.00454\n", - " 26/1 1.02556 1.02731 +/- 0.00425\n", - " 27/1 1.02207 1.02700 +/- 0.00401\n", - " 28/1 1.05847 1.02875 +/- 0.00416\n", - " 29/1 1.01125 1.02783 +/- 0.00404\n", - " 30/1 1.03213 1.02804 +/- 0.00384\n", - " 31/1 1.02241 1.02778 +/- 0.00366\n", - " 32/1 1.02675 1.02773 +/- 0.00349\n", - " 33/1 1.05484 1.02891 +/- 0.00354\n", - " 34/1 1.01893 1.02849 +/- 0.00341\n", - " 35/1 0.99044 1.02697 +/- 0.00361\n", - " 36/1 1.02602 1.02693 +/- 0.00347\n", - " 37/1 1.04107 1.02746 +/- 0.00338\n", - " 38/1 1.03237 1.02763 +/- 0.00326\n", - " 39/1 1.01489 1.02719 +/- 0.00318\n", - " 40/1 1.01065 1.02664 +/- 0.00312\n", - " 41/1 1.03722 1.02698 +/- 0.00304\n", - " 42/1 1.04339 1.02750 +/- 0.00298\n", - " 43/1 1.00921 1.02694 +/- 0.00294\n", - " 44/1 1.04576 1.02750 +/- 0.00291\n", - " 45/1 1.02580 1.02745 +/- 0.00283\n", - " 46/1 1.03464 1.02765 +/- 0.00275\n", - " 47/1 1.01552 1.02732 +/- 0.00270\n", - " 48/1 1.03357 1.02748 +/- 0.00263\n", - " 49/1 1.03439 1.02766 +/- 0.00257\n", - " 50/1 1.04281 1.02804 +/- 0.00253\n", - " 51/1 1.02902 1.02806 +/- 0.00247\n", - " 52/1 1.02245 1.02793 +/- 0.00241\n", - " 53/1 1.05271 1.02851 +/- 0.00243\n", - " 54/1 0.98630 1.02755 +/- 0.00256\n", - " 55/1 1.02690 1.02753 +/- 0.00250\n", - " 56/1 1.04107 1.02783 +/- 0.00246\n", - " 57/1 1.03029 1.02788 +/- 0.00241\n", - " 58/1 1.01874 1.02769 +/- 0.00237\n", - " 59/1 1.04211 1.02798 +/- 0.00234\n", - " 60/1 0.99584 1.02734 +/- 0.00238\n", - " 61/1 1.05166 1.02782 +/- 0.00238\n", - " 62/1 1.05572 1.02835 +/- 0.00239\n", - " 63/1 1.02694 1.02833 +/- 0.00235\n", - " 64/1 1.03314 1.02842 +/- 0.00231\n", - " 65/1 1.05850 1.02896 +/- 0.00233\n", - " 66/1 1.01100 1.02864 +/- 0.00231\n", - " 67/1 1.03784 1.02880 +/- 0.00227\n", - " 68/1 1.04084 1.02901 +/- 0.00224\n", - " 69/1 1.03932 1.02919 +/- 0.00221\n", - " 70/1 1.02564 1.02913 +/- 0.00218\n", - " 71/1 1.00027 1.02865 +/- 0.00219\n", - " 72/1 1.02385 1.02858 +/- 0.00216\n", - " 73/1 1.04885 1.02890 +/- 0.00215\n", - " 74/1 1.00298 1.02849 +/- 0.00215\n", - " 75/1 1.02009 1.02836 +/- 0.00212\n", - " 76/1 1.04505 1.02862 +/- 0.00211\n", - " 77/1 1.02889 1.02862 +/- 0.00207\n", - " 78/1 1.01306 1.02839 +/- 0.00206\n", - " 79/1 1.01817 1.02824 +/- 0.00203\n", - " 80/1 1.00533 1.02792 +/- 0.00203\n", - " 81/1 1.04439 1.02815 +/- 0.00201\n", - " 82/1 1.02212 1.02806 +/- 0.00199\n", - " 83/1 0.99419 1.02760 +/- 0.00201\n", - " 84/1 1.07132 1.02819 +/- 0.00207\n", - " 85/1 1.02710 1.02818 +/- 0.00204\n", - " 86/1 1.01702 1.02803 +/- 0.00202\n", - " 87/1 1.02134 1.02794 +/- 0.00200\n", - " 88/1 1.05231 1.02826 +/- 0.00200\n", - " 89/1 1.05290 1.02857 +/- 0.00200\n", - " 90/1 1.05751 1.02893 +/- 0.00200\n", - " 91/1 1.03970 1.02906 +/- 0.00198\n", - " 92/1 0.99678 1.02867 +/- 0.00200\n", - " 93/1 1.04471 1.02886 +/- 0.00198\n", - " 94/1 1.00820 1.02862 +/- 0.00198\n", - " 95/1 1.05823 1.02896 +/- 0.00198\n", - " 96/1 1.05118 1.02922 +/- 0.00198\n", - " 97/1 1.03617 1.02930 +/- 0.00196\n", - " 98/1 1.00585 1.02904 +/- 0.00195\n", - " 99/1 1.06663 1.02946 +/- 0.00198\n", - " 100/1 1.01802 1.02933 +/- 0.00196\n", - " 101/1 1.02695 1.02931 +/- 0.00194\n", - " 102/1 1.01642 1.02917 +/- 0.00192\n", - " 103/1 1.02567 1.02913 +/- 0.00190\n", - " 104/1 1.03519 1.02919 +/- 0.00188\n", - " 105/1 1.02439 1.02914 +/- 0.00186\n", - " 106/1 1.03779 1.02923 +/- 0.00184\n", - " 107/1 1.01304 1.02906 +/- 0.00183\n", - " 108/1 1.02541 1.02903 +/- 0.00181\n", - " 109/1 1.04297 1.02917 +/- 0.00180\n", - " 110/1 1.00442 1.02892 +/- 0.00180\n", - " 111/1 1.03102 1.02894 +/- 0.00178\n", - " 112/1 1.00380 1.02870 +/- 0.00178\n", - " 113/1 1.04010 1.02881 +/- 0.00177\n", - " 114/1 1.01297 1.02865 +/- 0.00176\n", - " 115/1 1.00130 1.02839 +/- 0.00176\n", - " 116/1 1.02001 1.02831 +/- 0.00174\n", - " 117/1 1.03847 1.02841 +/- 0.00173\n", - " 118/1 1.00371 1.02818 +/- 0.00173\n", - " 119/1 1.02650 1.02817 +/- 0.00171\n", - " 120/1 1.00767 1.02798 +/- 0.00171\n", - " 121/1 1.00408 1.02776 +/- 0.00171\n", - " 122/1 1.00235 1.02754 +/- 0.00171\n", - " 123/1 1.01212 1.02740 +/- 0.00170\n", - " 124/1 1.03278 1.02745 +/- 0.00168\n", - " 125/1 1.00818 1.02728 +/- 0.00168\n", - " 126/1 1.02132 1.02723 +/- 0.00166\n", - " 127/1 1.03677 1.02731 +/- 0.00165\n", - " 128/1 1.04148 1.02743 +/- 0.00164\n", - " 129/1 1.01245 1.02730 +/- 0.00163\n", - " 130/1 1.04172 1.02742 +/- 0.00162\n", - " 131/1 1.04519 1.02757 +/- 0.00162\n", - " 132/1 1.02495 1.02755 +/- 0.00160\n", - " 133/1 0.99747 1.02731 +/- 0.00161\n", - " 134/1 1.02411 1.02728 +/- 0.00160\n", - " 135/1 1.05750 1.02752 +/- 0.00160\n", - " 136/1 1.02341 1.02749 +/- 0.00159\n", - " 137/1 1.02212 1.02745 +/- 0.00158\n", - " 138/1 1.03464 1.02750 +/- 0.00157\n", - " 139/1 1.05920 1.02775 +/- 0.00157\n", - " 140/1 1.01911 1.02768 +/- 0.00156\n", - " 141/1 1.03076 1.02771 +/- 0.00155\n", - " 142/1 1.03648 1.02777 +/- 0.00154\n", - " 143/1 1.00382 1.02759 +/- 0.00154\n", - " 144/1 1.00366 1.02741 +/- 0.00154\n", - " 145/1 1.01638 1.02733 +/- 0.00153\n", - " 146/1 1.02418 1.02731 +/- 0.00152\n", - " 147/1 0.99267 1.02706 +/- 0.00153\n", - " 148/1 1.02575 1.02705 +/- 0.00152\n", - " 149/1 0.98560 1.02675 +/- 0.00153\n", - " 150/1 1.02725 1.02675 +/- 0.00152\n", - " 151/1 1.03723 1.02683 +/- 0.00151\n", - " 152/1 1.00857 1.02670 +/- 0.00151\n", - " 153/1 1.00642 1.02656 +/- 0.00151\n", - " 154/1 1.03461 1.02661 +/- 0.00150\n", - " 155/1 1.00088 1.02643 +/- 0.00150\n", - " 156/1 1.02589 1.02643 +/- 0.00149\n", - " 157/1 1.02494 1.02642 +/- 0.00148\n", - " 158/1 1.03303 1.02646 +/- 0.00147\n", - " 159/1 1.02276 1.02644 +/- 0.00146\n", - " 160/1 1.03293 1.02648 +/- 0.00145\n", - " 161/1 1.04758 1.02662 +/- 0.00144\n", - " 162/1 1.01033 1.02652 +/- 0.00144\n", - " 163/1 1.03883 1.02660 +/- 0.00143\n", - " 164/1 1.00519 1.02646 +/- 0.00143\n", - " 165/1 1.05958 1.02667 +/- 0.00144\n", - " 166/1 1.03849 1.02675 +/- 0.00143\n", - " 167/1 1.02306 1.02672 +/- 0.00142\n", - " 168/1 1.02693 1.02672 +/- 0.00141\n", - " 169/1 1.02584 1.02672 +/- 0.00140\n", - " 170/1 0.99388 1.02651 +/- 0.00141\n", - " 171/1 0.99376 1.02631 +/- 0.00141\n", - " 172/1 1.00453 1.02618 +/- 0.00141\n", - " 173/1 1.04516 1.02629 +/- 0.00141\n", - " 174/1 1.02402 1.02628 +/- 0.00140\n", - " 175/1 0.99012 1.02606 +/- 0.00141\n", - " 176/1 1.02084 1.02603 +/- 0.00140\n", - " 177/1 1.03959 1.02611 +/- 0.00139\n", - " 178/1 1.01719 1.02606 +/- 0.00139\n", - " 179/1 1.01671 1.02600 +/- 0.00138\n", - " 180/1 1.03691 1.02606 +/- 0.00137\n", - " 181/1 1.04276 1.02616 +/- 0.00137\n", - " 182/1 1.02002 1.02613 +/- 0.00136\n", - " 183/1 1.03081 1.02615 +/- 0.00135\n", - " 184/1 1.02432 1.02614 +/- 0.00135\n", - " 185/1 1.02225 1.02612 +/- 0.00134\n", - " 186/1 1.04722 1.02624 +/- 0.00134\n", - " 187/1 0.98045 1.02598 +/- 0.00135\n", - " 188/1 1.02555 1.02598 +/- 0.00135\n", - " 189/1 1.03645 1.02604 +/- 0.00134\n", - " 190/1 1.00407 1.02592 +/- 0.00134\n", - " 191/1 1.03033 1.02594 +/- 0.00133\n", - " 192/1 1.04175 1.02603 +/- 0.00133\n", - " 193/1 1.00555 1.02592 +/- 0.00132\n", - " 194/1 1.00183 1.02578 +/- 0.00132\n", - " 195/1 1.04328 1.02588 +/- 0.00132\n", - " 196/1 1.03041 1.02590 +/- 0.00131\n", - " 197/1 1.04791 1.02602 +/- 0.00131\n", - " 198/1 1.01366 1.02596 +/- 0.00130\n", - " 199/1 1.04471 1.02605 +/- 0.00130\n", - " 200/1 1.02416 1.02604 +/- 0.00129\n", - " 201/1 1.01172 1.02597 +/- 0.00129\n", - " 202/1 1.01683 1.02592 +/- 0.00128\n", - " 203/1 1.01341 1.02586 +/- 0.00128\n", - " 204/1 1.01507 1.02580 +/- 0.00127\n", - " 205/1 1.02540 1.02580 +/- 0.00127\n", - " 206/1 1.00310 1.02568 +/- 0.00127\n", - " 207/1 1.02822 1.02570 +/- 0.00126\n", - " 208/1 1.01023 1.02562 +/- 0.00126\n", - " 209/1 1.04603 1.02572 +/- 0.00125\n", - " 210/1 1.00775 1.02563 +/- 0.00125\n", - " 211/1 1.01706 1.02559 +/- 0.00125\n", - " 212/1 0.99434 1.02543 +/- 0.00125\n", - " 213/1 1.03346 1.02547 +/- 0.00124\n", - " 214/1 1.05322 1.02561 +/- 0.00124\n", - " 215/1 1.03057 1.02563 +/- 0.00124\n", - " 216/1 1.00976 1.02556 +/- 0.00123\n", - " 217/1 1.02760 1.02557 +/- 0.00123\n", - " 218/1 1.01259 1.02550 +/- 0.00122\n", - " 219/1 1.02829 1.02552 +/- 0.00122\n", - " 220/1 1.02228 1.02550 +/- 0.00121\n", - " 221/1 1.06679 1.02570 +/- 0.00122\n", - " 222/1 1.03417 1.02574 +/- 0.00122\n", - " 223/1 1.04239 1.02582 +/- 0.00121\n", - " 224/1 1.02062 1.02579 +/- 0.00121\n", - " 225/1 1.00331 1.02569 +/- 0.00121\n", - " 226/1 1.00131 1.02557 +/- 0.00121\n", - " 227/1 1.01768 1.02554 +/- 0.00120\n", - " 228/1 1.00813 1.02546 +/- 0.00120\n", - " 229/1 1.05320 1.02558 +/- 0.00120\n", - " 230/1 1.03472 1.02563 +/- 0.00120\n", - " 231/1 1.01426 1.02557 +/- 0.00119\n", - " 232/1 1.00782 1.02549 +/- 0.00119\n", - " 233/1 1.02813 1.02551 +/- 0.00118\n", - " 234/1 1.01184 1.02545 +/- 0.00118\n", - " 235/1 1.02156 1.02543 +/- 0.00118\n", - " 236/1 0.99029 1.02527 +/- 0.00118\n", - " 237/1 1.04196 1.02535 +/- 0.00118\n", - " 238/1 1.01594 1.02531 +/- 0.00117\n", - " 239/1 1.02732 1.02531 +/- 0.00117\n", - " 240/1 0.98987 1.02516 +/- 0.00117\n", - " 241/1 1.03388 1.02520 +/- 0.00117\n", - " 242/1 1.01319 1.02515 +/- 0.00116\n", - " 243/1 1.02870 1.02516 +/- 0.00116\n", - " 244/1 1.01943 1.02514 +/- 0.00115\n", - " 245/1 1.04463 1.02522 +/- 0.00115\n", - " 246/1 1.03551 1.02526 +/- 0.00115\n", - " 247/1 1.00436 1.02517 +/- 0.00115\n", - " 248/1 1.03326 1.02521 +/- 0.00114\n", - " 249/1 1.05769 1.02534 +/- 0.00115\n", - " 250/1 1.01372 1.02530 +/- 0.00114\n", - " 251/1 1.02971 1.02531 +/- 0.00114\n", - " 252/1 1.01166 1.02526 +/- 0.00113\n", - " 253/1 1.03992 1.02532 +/- 0.00113\n", - " 254/1 1.01507 1.02528 +/- 0.00113\n", - " 255/1 1.03222 1.02530 +/- 0.00112\n", - " 256/1 1.03096 1.02533 +/- 0.00112\n", - " 257/1 1.01153 1.02527 +/- 0.00112\n", - " 258/1 1.03668 1.02532 +/- 0.00111\n", - " 259/1 1.03070 1.02534 +/- 0.00111\n", - " 260/1 1.01189 1.02529 +/- 0.00111\n", - " 261/1 1.00082 1.02519 +/- 0.00111\n", - " 262/1 1.03653 1.02523 +/- 0.00110\n", - " 263/1 1.02908 1.02525 +/- 0.00110\n", - " 264/1 1.00072 1.02515 +/- 0.00110\n", - " 265/1 1.00832 1.02509 +/- 0.00109\n", - " 266/1 1.04385 1.02516 +/- 0.00109\n", - " 267/1 1.00117 1.02507 +/- 0.00109\n", - " 268/1 1.02682 1.02507 +/- 0.00109\n", - " 269/1 1.03202 1.02510 +/- 0.00108\n", - " 270/1 1.01275 1.02505 +/- 0.00108\n", - " 271/1 1.02633 1.02506 +/- 0.00108\n", - " 272/1 1.04811 1.02514 +/- 0.00108\n", - " 273/1 1.02851 1.02516 +/- 0.00107\n", - " 274/1 1.01270 1.02511 +/- 0.00107\n", - " 275/1 1.06222 1.02525 +/- 0.00107\n", - " 276/1 1.02778 1.02526 +/- 0.00107\n", - " 277/1 1.02601 1.02526 +/- 0.00107\n", - " 278/1 1.02356 1.02526 +/- 0.00106\n", - " 279/1 1.00792 1.02519 +/- 0.00106\n", - " 280/1 1.02331 1.02518 +/- 0.00106\n", - " 281/1 1.00985 1.02513 +/- 0.00105\n", - " 282/1 1.02035 1.02511 +/- 0.00105\n", - " 283/1 0.98181 1.02495 +/- 0.00106\n", - " 284/1 1.01829 1.02493 +/- 0.00106\n", - " 285/1 1.02929 1.02494 +/- 0.00105\n", - " 286/1 1.03524 1.02498 +/- 0.00105\n", - " 287/1 1.01212 1.02493 +/- 0.00105\n", - " 288/1 1.03584 1.02497 +/- 0.00104\n", - " 289/1 1.02961 1.02499 +/- 0.00104\n", - " 290/1 0.99692 1.02489 +/- 0.00104\n", - " 291/1 1.03966 1.02494 +/- 0.00104\n", - " 292/1 1.00965 1.02489 +/- 0.00104\n", - " 293/1 1.02601 1.02489 +/- 0.00103\n", - " 294/1 1.03224 1.02492 +/- 0.00103\n", - " 295/1 1.01596 1.02489 +/- 0.00103\n", - " 296/1 1.06964 1.02504 +/- 0.00103\n", - " 297/1 1.03982 1.02509 +/- 0.00103\n", - " 298/1 0.99758 1.02500 +/- 0.00103\n", - " 299/1 1.01479 1.02496 +/- 0.00103\n", - " 300/1 1.04517 1.02503 +/- 0.00103\n", - " 301/1 0.99128 1.02492 +/- 0.00103\n", - " 302/1 1.01493 1.02488 +/- 0.00103\n", - " 303/1 1.00623 1.02482 +/- 0.00103\n", - " 304/1 1.02560 1.02482 +/- 0.00102\n", - " 305/1 1.00806 1.02477 +/- 0.00102\n", - " 306/1 1.03524 1.02480 +/- 0.00102\n", - " 307/1 0.99244 1.02469 +/- 0.00102\n", - " 308/1 0.98013 1.02454 +/- 0.00103\n", - " 309/1 1.00853 1.02449 +/- 0.00103\n", - " 310/1 1.00116 1.02441 +/- 0.00103\n", - " 311/1 1.01730 1.02439 +/- 0.00102\n", - " 312/1 1.01198 1.02435 +/- 0.00102\n", - " 313/1 1.02405 1.02435 +/- 0.00102\n", - " 314/1 1.01734 1.02432 +/- 0.00101\n", - " 315/1 1.02320 1.02432 +/- 0.00101\n", - " 316/1 1.03438 1.02435 +/- 0.00101\n", - " 317/1 1.00106 1.02428 +/- 0.00101\n", - " 318/1 1.03114 1.02430 +/- 0.00100\n", - " 319/1 1.04955 1.02438 +/- 0.00100\n", - " 320/1 1.03259 1.02441 +/- 0.00100\n", - " 321/1 1.00687 1.02435 +/- 0.00100\n", - " 322/1 1.05753 1.02446 +/- 0.00100\n", - " 323/1 1.03676 1.02450 +/- 0.00100\n", - " 324/1 0.99796 1.02441 +/- 0.00100\n", - " 325/1 1.03783 1.02445 +/- 0.00100\n", - " 326/1 1.02315 1.02445 +/- 0.00099\n", - " 327/1 1.04205 1.02451 +/- 0.00099\n", - " 328/1 1.01971 1.02449 +/- 0.00099\n", - " 329/1 1.02394 1.02449 +/- 0.00099\n", - " 330/1 1.03318 1.02452 +/- 0.00098\n", - " 331/1 1.01503 1.02449 +/- 0.00098\n", - " 332/1 1.07143 1.02463 +/- 0.00099\n", - " 333/1 1.00991 1.02459 +/- 0.00099\n", - " 334/1 1.03115 1.02461 +/- 0.00098\n", - " 335/1 1.04400 1.02467 +/- 0.00098\n", - " 336/1 1.03516 1.02470 +/- 0.00098\n", - " 337/1 1.02025 1.02468 +/- 0.00098\n", - " 338/1 1.03269 1.02471 +/- 0.00098\n", - " 339/1 1.03745 1.02475 +/- 0.00097\n", - " 340/1 1.03685 1.02478 +/- 0.00097\n", - " 341/1 1.01831 1.02476 +/- 0.00097\n", - " 342/1 1.01425 1.02473 +/- 0.00097\n", - " 343/1 1.02990 1.02475 +/- 0.00096\n", - " 344/1 1.02958 1.02476 +/- 0.00096\n", - " 345/1 1.03133 1.02478 +/- 0.00096\n", - " 346/1 1.02441 1.02478 +/- 0.00095\n", - " 347/1 1.07010 1.02492 +/- 0.00096\n", - " 348/1 1.02327 1.02491 +/- 0.00096\n", - " 349/1 1.03123 1.02493 +/- 0.00096\n", - " 350/1 1.03158 1.02495 +/- 0.00095\n", - " 351/1 1.03473 1.02498 +/- 0.00095\n", - " 352/1 1.04000 1.02502 +/- 0.00095\n", - " 353/1 1.01651 1.02500 +/- 0.00095\n", - " 354/1 1.03647 1.02503 +/- 0.00094\n", - " 355/1 1.04650 1.02509 +/- 0.00094\n", - " 356/1 1.04703 1.02516 +/- 0.00094\n", - " 357/1 1.00260 1.02509 +/- 0.00094\n", - " 358/1 1.00075 1.02502 +/- 0.00094\n", - " 359/1 1.04874 1.02509 +/- 0.00094\n", - " 360/1 1.03211 1.02511 +/- 0.00094\n", - " 361/1 1.02136 1.02510 +/- 0.00094\n", - " 362/1 1.00803 1.02505 +/- 0.00094\n", - " 363/1 1.00319 1.02499 +/- 0.00094\n", - " 364/1 1.01443 1.02496 +/- 0.00093\n", - " 365/1 1.02685 1.02496 +/- 0.00093\n", - " 366/1 1.02373 1.02496 +/- 0.00093\n", - " 367/1 1.02026 1.02495 +/- 0.00093\n", - " 368/1 1.01579 1.02492 +/- 0.00092\n", - " 369/1 1.08004 1.02508 +/- 0.00093\n", - " 370/1 1.01715 1.02505 +/- 0.00093\n", - " 371/1 0.98578 1.02494 +/- 0.00093\n", - " 372/1 1.03033 1.02496 +/- 0.00093\n", - " 373/1 1.03269 1.02498 +/- 0.00093\n", - " 374/1 1.04050 1.02502 +/- 0.00093\n", - " 375/1 1.00760 1.02498 +/- 0.00093\n", - " 376/1 1.04492 1.02503 +/- 0.00093\n", - " 377/1 1.04983 1.02510 +/- 0.00093\n", - " 378/1 1.06022 1.02519 +/- 0.00093\n", - " 379/1 1.02516 1.02519 +/- 0.00093\n", - " 380/1 1.01740 1.02517 +/- 0.00092\n", - " 381/1 1.02520 1.02517 +/- 0.00092\n", - " 382/1 1.02820 1.02518 +/- 0.00092\n", - " 383/1 1.00697 1.02513 +/- 0.00092\n", - " 384/1 1.03497 1.02516 +/- 0.00092\n", - " 385/1 0.98404 1.02505 +/- 0.00092\n", - " 386/1 1.05206 1.02512 +/- 0.00092\n", - " 387/1 1.01502 1.02509 +/- 0.00092\n", - " 388/1 1.02196 1.02508 +/- 0.00092\n", - " 389/1 1.02856 1.02509 +/- 0.00091\n", - " 390/1 1.01376 1.02506 +/- 0.00091\n", - " 391/1 1.01696 1.02504 +/- 0.00091\n", - " 392/1 1.03283 1.02506 +/- 0.00091\n", - " 393/1 1.00787 1.02502 +/- 0.00091\n", - " 394/1 1.02184 1.02501 +/- 0.00090\n", - " 395/1 1.03170 1.02503 +/- 0.00090\n", - " 396/1 1.04406 1.02508 +/- 0.00090\n", - " 397/1 1.03939 1.02511 +/- 0.00090\n", - " 398/1 1.00329 1.02506 +/- 0.00090\n", - " 399/1 1.04518 1.02511 +/- 0.00090\n", - " 400/1 1.03435 1.02513 +/- 0.00090\n", - " 401/1 1.00525 1.02508 +/- 0.00089\n", - " 402/1 1.03112 1.02510 +/- 0.00089\n", - " 403/1 1.00188 1.02504 +/- 0.00089\n", - " 404/1 1.01241 1.02501 +/- 0.00089\n", - " 405/1 1.01796 1.02499 +/- 0.00089\n", - " 406/1 1.02686 1.02499 +/- 0.00089\n", - " 407/1 1.01003 1.02496 +/- 0.00088\n", - " 408/1 1.02359 1.02495 +/- 0.00088\n", - " 409/1 1.01258 1.02492 +/- 0.00088\n", - " 410/1 1.04361 1.02497 +/- 0.00088\n", - " 411/1 1.00885 1.02493 +/- 0.00088\n", - " 412/1 1.00999 1.02489 +/- 0.00088\n", - " 413/1 0.97832 1.02477 +/- 0.00088\n", - " 414/1 1.04183 1.02482 +/- 0.00088\n", - " 415/1 1.02279 1.02481 +/- 0.00088\n", - " 416/1 1.04197 1.02485 +/- 0.00088\n", - " 417/1 1.04617 1.02491 +/- 0.00088\n", - " 418/1 1.01311 1.02488 +/- 0.00088\n", - " 419/1 1.03904 1.02491 +/- 0.00087\n", - " 420/1 1.00458 1.02486 +/- 0.00087\n", - " 421/1 0.98580 1.02477 +/- 0.00088\n", - " 422/1 1.01850 1.02475 +/- 0.00087\n", - " 423/1 1.03739 1.02478 +/- 0.00087\n", - " 424/1 1.02716 1.02479 +/- 0.00087\n", - " 425/1 1.00711 1.02475 +/- 0.00087\n", - " 426/1 1.01008 1.02471 +/- 0.00087\n", - " 427/1 1.03332 1.02473 +/- 0.00087\n", - " 428/1 1.00501 1.02468 +/- 0.00087\n", - " 429/1 1.04549 1.02473 +/- 0.00086\n", - " 430/1 1.00582 1.02469 +/- 0.00086\n", - " 431/1 1.00586 1.02464 +/- 0.00086\n", - " 432/1 1.00082 1.02459 +/- 0.00086\n", - " 433/1 1.00835 1.02455 +/- 0.00086\n", - " 434/1 1.03965 1.02458 +/- 0.00086\n", - " 435/1 1.02385 1.02458 +/- 0.00086\n", - " 436/1 1.01440 1.02456 +/- 0.00086\n", - " 437/1 1.03127 1.02458 +/- 0.00085\n", - " 438/1 1.02961 1.02459 +/- 0.00085\n", - " 439/1 0.99584 1.02452 +/- 0.00085\n", - " 440/1 1.04964 1.02458 +/- 0.00085\n", - " 441/1 0.99792 1.02452 +/- 0.00085\n", - " 442/1 1.04971 1.02457 +/- 0.00085\n", - " 443/1 1.01504 1.02455 +/- 0.00085\n", - " 444/1 1.04359 1.02460 +/- 0.00085\n", - " 445/1 1.01148 1.02457 +/- 0.00085\n", - " 446/1 1.01203 1.02454 +/- 0.00085\n", - " 447/1 1.02353 1.02454 +/- 0.00085\n", - " 448/1 1.06299 1.02462 +/- 0.00085\n", - " 449/1 1.00017 1.02457 +/- 0.00085\n", - " 450/1 1.01193 1.02454 +/- 0.00085\n", - " 451/1 1.00179 1.02449 +/- 0.00085\n", - " 452/1 1.02425 1.02449 +/- 0.00085\n", - " 453/1 1.03629 1.02451 +/- 0.00084\n", - " 454/1 1.01955 1.02450 +/- 0.00084\n", - " 455/1 1.00870 1.02447 +/- 0.00084\n", - " 456/1 1.04230 1.02451 +/- 0.00084\n", - " 457/1 1.05081 1.02457 +/- 0.00084\n", - " 458/1 1.00271 1.02452 +/- 0.00084\n", - " 459/1 1.01010 1.02448 +/- 0.00084\n", - " 460/1 1.04656 1.02453 +/- 0.00084\n", - " 461/1 1.00790 1.02450 +/- 0.00084\n", - " 462/1 1.02214 1.02449 +/- 0.00084\n", - " 463/1 1.04401 1.02453 +/- 0.00083\n", - " 464/1 1.02863 1.02454 +/- 0.00083\n", - " 465/1 0.99971 1.02449 +/- 0.00083\n", - " 466/1 1.00344 1.02444 +/- 0.00083\n", - " 467/1 1.02810 1.02445 +/- 0.00083\n", - " 468/1 1.02091 1.02444 +/- 0.00083\n", - " 469/1 1.00545 1.02440 +/- 0.00083\n", - " 470/1 1.01590 1.02438 +/- 0.00083\n", - " 471/1 1.04465 1.02443 +/- 0.00083\n", - " 472/1 1.02028 1.02442 +/- 0.00082\n", - " 473/1 1.01951 1.02441 +/- 0.00082\n", - " 474/1 1.03280 1.02443 +/- 0.00082\n", - " 475/1 1.04722 1.02447 +/- 0.00082\n", - " 476/1 1.03587 1.02450 +/- 0.00082\n", - " 477/1 1.02234 1.02449 +/- 0.00082\n", - " 478/1 1.07848 1.02461 +/- 0.00082\n", - " 479/1 1.04759 1.02466 +/- 0.00082\n", - " 480/1 1.07189 1.02476 +/- 0.00083\n", - " 481/1 1.05811 1.02483 +/- 0.00083\n", - " 482/1 1.04554 1.02487 +/- 0.00083\n", - " 483/1 1.01956 1.02486 +/- 0.00083\n", - " 484/1 1.01055 1.02483 +/- 0.00083\n", - " 485/1 1.00845 1.02480 +/- 0.00082\n", - " 486/1 1.04607 1.02484 +/- 0.00082\n", - " 487/1 1.05955 1.02492 +/- 0.00083\n", - " 488/1 1.02245 1.02491 +/- 0.00082\n", - " 489/1 0.98206 1.02482 +/- 0.00083\n", - " 490/1 1.03786 1.02485 +/- 0.00083\n", - " 491/1 1.02973 1.02486 +/- 0.00082\n", - " 492/1 1.02890 1.02487 +/- 0.00082\n", - " 493/1 1.02086 1.02486 +/- 0.00082\n", - " 494/1 1.01194 1.02483 +/- 0.00082\n", - " 495/1 1.01902 1.02482 +/- 0.00082\n", - " 496/1 1.01783 1.02481 +/- 0.00082\n", - " 497/1 1.02129 1.02480 +/- 0.00081\n", - " 498/1 1.02407 1.02480 +/- 0.00081\n", - " 499/1 1.02873 1.02480 +/- 0.00081\n", - " 500/1 1.00998 1.02477 +/- 0.00081\n", - " Creating state point statepoint.500.h5...\n", + " 1/1 1.05201 \n", + " 2/1 1.02017 \n", + " 3/1 1.02398 \n", + " 4/1 1.02677 \n", + " 5/1 1.01070 \n", + " 6/1 1.02964 \n", + " 7/1 1.02163 \n", + " 8/1 1.04524 \n", + " 9/1 1.00773 \n", + " 10/1 1.01536 \n", + " 11/1 1.02992 \n", + " 12/1 1.03248 1.03120 +/- 0.00128\n", + " 13/1 0.99044 1.01761 +/- 0.01361\n", + " 14/1 1.01484 1.01692 +/- 0.00965\n", + " 15/1 1.01491 1.01652 +/- 0.00748\n", + " 16/1 1.03809 1.02011 +/- 0.00709\n", + " 17/1 1.02536 1.02086 +/- 0.00604\n", + " 18/1 1.03663 1.02283 +/- 0.00559\n", + " 19/1 1.03902 1.02463 +/- 0.00525\n", + " 20/1 1.01557 1.02373 +/- 0.00478\n", + " 21/1 1.01286 1.02274 +/- 0.00443\n", + " 22/1 1.01392 1.02200 +/- 0.00411\n", + " 23/1 1.04439 1.02372 +/- 0.00416\n", + " 24/1 1.04034 1.02491 +/- 0.00403\n", + " 25/1 0.99433 1.02287 +/- 0.00427\n", + " 26/1 1.02720 1.02314 +/- 0.00400\n", + " 27/1 1.03545 1.02387 +/- 0.00383\n", + " 28/1 1.03853 1.02468 +/- 0.00370\n", + " 29/1 1.02735 1.02482 +/- 0.00350\n", + " 30/1 1.02429 1.02480 +/- 0.00332\n", + " 31/1 1.02901 1.02500 +/- 0.00317\n", + " 32/1 1.03296 1.02536 +/- 0.00304\n", + " 33/1 1.03605 1.02582 +/- 0.00294\n", + " 34/1 1.04247 1.02652 +/- 0.00290\n", + " 35/1 1.02088 1.02629 +/- 0.00279\n", + " 36/1 1.03017 1.02644 +/- 0.00269\n", + " 37/1 1.03216 1.02665 +/- 0.00259\n", + " 38/1 1.01459 1.02622 +/- 0.00254\n", + " 39/1 1.03706 1.02659 +/- 0.00248\n", + " 40/1 1.01383 1.02617 +/- 0.00243\n", + " 41/1 0.99043 1.02502 +/- 0.00262\n", + " 42/1 1.02891 1.02514 +/- 0.00254\n", + " 43/1 1.02100 1.02501 +/- 0.00246\n", + " 44/1 0.99546 1.02414 +/- 0.00254\n", + " 45/1 1.01562 1.02390 +/- 0.00248\n", + " 46/1 1.03025 1.02408 +/- 0.00242\n", + " 47/1 0.99409 1.02327 +/- 0.00249\n", + " 48/1 1.04355 1.02380 +/- 0.00248\n", + " 49/1 1.02763 1.02390 +/- 0.00242\n", + " 50/1 0.99426 1.02316 +/- 0.00247\n", + " Creating state point statepoint.50.h5...\n", "\n", " ===========================================================================\n", " ======================> SIMULATION FINISHED <======================\n", @@ -1234,27 +783,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 1.5880E+00 seconds\n", - " Reading cross sections = 1.2650E+00 seconds\n", - " Total time in simulation = 2.6051E+02 seconds\n", - " Time in transport only = 2.6013E+02 seconds\n", - " Time in inactive batches = 2.0990E+00 seconds\n", - " Time in active batches = 2.5841E+02 seconds\n", - " Time synchronizing fission bank = 6.5000E-02 seconds\n", - " Sampling source sites = 4.4000E-02 seconds\n", - " SEND/RECV source sites = 2.1000E-02 seconds\n", - " Time accumulating tallies = 2.0000E-03 seconds\n", + " Total time for initialization = 1.4550E+00 seconds\n", + " Reading cross sections = 1.1400E+00 seconds\n", + " Total time in simulation = 1.9150E+01 seconds\n", + " Time in transport only = 1.9021E+01 seconds\n", + " Time in inactive batches = 2.1570E+00 seconds\n", + " Time in active batches = 1.6993E+01 seconds\n", + " Time synchronizing fission bank = 7.0000E-03 seconds\n", + " Sampling source sites = 5.0000E-03 seconds\n", + " SEND/RECV source sites = 2.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 2.6211E+02 seconds\n", - " Calculation Rate (inactive) = 23820.9 neutrons/second\n", - " Calculation Rate (active) = 9480.98 neutrons/second\n", + " Total time elapsed = 2.0614E+01 seconds\n", + " Calculation Rate (inactive) = 23180.3 neutrons/second\n", + " Calculation Rate (active) = 11769.6 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.02480 +/- 0.00073\n", - " k-effective (Track-length) = 1.02477 +/- 0.00081\n", - " k-effective (Absorption) = 1.02552 +/- 0.00068\n", - " Combined k-effective = 1.02519 +/- 0.00055\n", + " k-effective (Collision) = 1.02389 +/- 0.00235\n", + " k-effective (Track-length) = 1.02316 +/- 0.00247\n", + " k-effective (Absorption) = 1.02494 +/- 0.00180\n", + " Combined k-effective = 1.02429 +/- 0.00140\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -1399,10 +948,12 @@ } ], "source": [ - "mgxs_lib.write_mg_library(filename='mgxs', xs_type='macro',\n", - " domain_names=['fuel', 'fuel_clad', 'fuel_mod',\n", - " 'gt_inmod', 'gt_clad', 'gt_outmod'],\n", - " xs_ids='2m')" + "# Create a MGXS File which can then be written to disk\n", + "mgxs_file = mgxs_lib.create_mg_library(xs_type='macro', domain_names=['fuel', 'zircaloy', 'water'],\n", + " xs_ids='2m')\n", + "\n", + "# Write the file to disk using the default filename of `mgxs.xml`\n", + "mgxs_file.export_to_xml()" ] }, { @@ -1420,49 +971,27 @@ }, "outputs": [], "source": [ - "# Instantiate our Macroscopic Data using mat_names for the name\n", + "# Instantiate our Macroscopic Data\n", "fuel_macro = openmc.Macroscopic('fuel')\n", - "fuel_clad_macro = openmc.Macroscopic('fuel_clad')\n", - "fuel_mod_macro = openmc.Macroscopic('fuel_mod')\n", - "gt_inmod_macro = openmc.Macroscopic('gt_inmod')\n", - "gt_clad_macro = openmc.Macroscopic('gt_clad')\n", - "gt_outmod_macro = openmc.Macroscopic('gt_outmod')\n", - "\n", - "# Now define the materials\n", + "zircaloy_macro = openmc.Macroscopic('zircaloy')\n", + "water_macro = openmc.Macroscopic('water')\n", "\n", + "# Now re-define our materials to use the Multi-Group macroscopic data\n", + "# instead of the continuous-energy data.\n", "# 1.6 enriched fuel UO2\n", - "fuel = openmc.Material(name='1.6% Fuel UO2', material_id=1)\n", - "fuel.set_density('macro', 1.0)\n", + "fuel = openmc.Material(name='UO2', material_id=1)\n", "fuel.add_macroscopic(fuel_macro)\n", "\n", - "# 1.6 enriched fuel cladding\n", - "fuel_clad = openmc.Material(name='1.6% Fuel Clad', material_id=2)\n", - "fuel_clad.set_density('macro', 1.0)\n", - "fuel_clad.add_macroscopic(fuel_clad_macro)\n", + "# cladding\n", + "zircaloy = openmc.Material(name='Clad', material_id=2)\n", + "zircaloy.add_macroscopic(zircaloy_macro)\n", "\n", - "# 1.6 enriched fuel moderator\n", - "fuel_mod = openmc.Material(name='1.6% Fuel Water', material_id=3)\n", - "fuel_mod.set_density('macro', 1.0)\n", - "fuel_mod.add_macroscopic(fuel_mod_macro)\n", - "\n", - "# Guide Tube Inner Moderator\n", - "gt_inmod = openmc.Material(name='GT Inner Water', material_id=4)\n", - "gt_inmod.set_density('macro', 1.0)\n", - "gt_inmod.add_macroscopic(gt_inmod_macro)\n", - "\n", - "# Guide Tube Cladding\n", - "gt_clad = openmc.Material(name='GT Clad', material_id=5)\n", - "gt_clad.set_density('macro', 1.0)\n", - "gt_clad.add_macroscopic(gt_clad_macro)\n", - "\n", - "# Guide Tube Outer Moderator\n", - "gt_outmod = openmc.Material(name='GT Outer Water', material_id=6)\n", - "gt_outmod.set_density('macro', 1.0)\n", - "gt_outmod.add_macroscopic(gt_outmod_macro)\n", + "# moderator\n", + "water = openmc.Material(name='Water', material_id=3)\n", + "water.add_macroscopic(water_macro)\n", "\n", "# Finally, instantiate our Materials object\n", - "materials_file = openmc.Materials((fuel, fuel_clad, fuel_mod,\n", - " gt_inmod, gt_clad, gt_outmod))\n", + "materials_file = openmc.Materials((fuel, zircaloy, water))\n", "materials_file.default_xs = '2m'\n", "\n", "# Export to \"materials.xml\"\n", @@ -1473,98 +1002,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "For our geometry files we will do the same as before but now we will be pointing at our newly created materials instead." - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Create a Universe to encapsulate a fuel pin\n", - "fuel_pin_universe = openmc.Universe(name='1.6% Fuel Pin', universe_id=10)\n", - "\n", - "# Create fuel Cell\n", - "fuel_cell = openmc.Cell(name='1.6% Fuel', cell_id=1)\n", - "fuel_cell.fill = fuel\n", - "fuel_cell.region = -fuel_outer_radius\n", - "fuel_pin_universe.add_cell(fuel_cell)\n", - "\n", - "# Create a clad Cell\n", - "clad_cell = openmc.Cell(name='1.6% Clad', cell_id=2)\n", - "clad_cell.fill = fuel_clad\n", - "clad_cell.region = +fuel_outer_radius & -clad_outer_radius\n", - "fuel_pin_universe.add_cell(clad_cell)\n", - "\n", - "# Create a moderator Cell\n", - "moderator_cell = openmc.Cell(name='1.6% Moderator', cell_id=3)\n", - "moderator_cell.fill = fuel_mod\n", - "moderator_cell.region = +clad_outer_radius\n", - "fuel_pin_universe.add_cell(moderator_cell)\n", - "\n", - "# Create a Universe to encapsulate a control rod guide tube\n", - "guide_tube_universe = openmc.Universe(name='Guide Tube', universe_id=20)\n", - "\n", - "# Create guide tube Cell\n", - "guide_tube_cell = openmc.Cell(name='Guide Tube Water', cell_id=4)\n", - "guide_tube_cell.fill = gt_inmod\n", - "guide_tube_cell.region = -fuel_outer_radius\n", - "guide_tube_universe.add_cell(guide_tube_cell)\n", - "\n", - "# Create a clad Cell\n", - "clad_cell = openmc.Cell(name='Guide Clad', cell_id=5)\n", - "clad_cell.fill = gt_clad\n", - "clad_cell.region = +fuel_outer_radius & -clad_outer_radius\n", - "guide_tube_universe.add_cell(clad_cell)\n", - "\n", - "# Create a moderator Cell\n", - "moderator_cell = openmc.Cell(name='Guide Tube Moderator', cell_id=6)\n", - "moderator_cell.fill = gt_outmod\n", - "moderator_cell.region = +clad_outer_radius\n", - "guide_tube_universe.add_cell(moderator_cell)\n", - "\n", - "# Create fuel assembly Lattice\n", - "assembly = openmc.RectLattice(name='1.6% Fuel Assembly', lattice_id=100)\n", - "assembly.dimension = (17, 17)\n", - "assembly.pitch = (1.26, 1.26)\n", - "assembly.lower_left = [-1.26 * 17. / 2.0] * 2\n", - "\n", - "# Create array indices for guide tube locations in lattice\n", - "template_x = np.array([5, 8, 11, 3, 13, 2, 5, 8, 11, 14, 2, 5, 8,\n", - " 11, 14, 2, 5, 8, 11, 14, 3, 13, 5, 8, 11])\n", - "template_y = np.array([2, 2, 2, 3, 3, 5, 5, 5, 5, 5, 8, 8, 8, 8,\n", - " 8, 11, 11, 11, 11, 11, 13, 13, 14, 14, 14])\n", - "\n", - "# Initialize an empty 17x17 array of the lattice universes\n", - "universes = np.empty((17, 17), dtype=openmc.Universe)\n", - "\n", - "# Fill the array with the fuel pin and guide tube universes\n", - "universes[:,:] = fuel_pin_universe\n", - "universes[template_x, template_y] = guide_tube_universe\n", - "\n", - "# Store the array of universes in the lattice\n", - "assembly.universes = universes\n", - "\n", - "# Create root Cell\n", - "root_cell = openmc.Cell(name='root cell', cell_id=0)\n", - "root_cell.fill = assembly\n", - "\n", - "# Add boundary planes\n", - "root_cell.region = +min_x & -max_x & +min_y & -max_y & +min_z & -max_z\n", - "\n", - "# Create root Universe\n", - "root_universe = openmc.Universe(universe_id=0, name='root universe')\n", - "root_universe.add_cell(root_cell)\n", - "\n", - "# Create Geometry and set root Universe\n", - "geometry = openmc.Geometry()\n", - "geometry.root_universe = root_universe\n", - "# Export to \"geometry.xml\"\n", - "geometry.export_to_xml()" + "No geometry file neeeds to be written as the continuous-energy file is correctly defined for the multi-group case as well." ] }, { @@ -1577,7 +1015,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 33, "metadata": { "collapsed": true }, @@ -1602,9 +1040,10 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true }, "outputs": [ { @@ -1628,7 +1067,7 @@ " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", " Git SHA1: c779ca42c41a062a6a813e03f2add2d182ca9190\n", - " Date/Time: 2016-05-12 21:19:25\n", + " Date/Time: 2016-05-13 22:30:02\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -1643,11 +1082,8 @@ " Building neighboring cells lists for each surface...\n", " Loading Cross Section Data...\n", " Loading fuel.2m Data...\n", - " Loading fuel_clad.2m Data...\n", - " Loading fuel_mod.2m Data...\n", - " Loading gt_inmod.2m Data...\n", - " Loading gt_clad.2m Data...\n", - " Loading gt_outmod.2m Data...\n", + " Loading zircaloy.2m Data...\n", + " Loading water.2m Data...\n", " Initializing source particles...\n", "\n", " ===========================================================================\n", @@ -1656,507 +1092,57 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 1.01702 \n", - " 2/1 0.99463 \n", - " 3/1 1.02321 \n", - " 4/1 0.98628 \n", - " 5/1 1.03122 \n", - " 6/1 1.00774 \n", - " 7/1 1.05616 \n", - " 8/1 1.03051 \n", - " 9/1 1.02321 \n", - " 10/1 1.04380 \n", - " 11/1 1.05837 \n", - " 12/1 1.01514 1.03676 +/- 0.02161\n", - " 13/1 1.06720 1.04690 +/- 0.01608\n", - " 14/1 1.01696 1.03942 +/- 0.01361\n", - " 15/1 1.03549 1.03863 +/- 0.01057\n", - " 16/1 1.01599 1.03486 +/- 0.00942\n", - " 17/1 1.03070 1.03427 +/- 0.00799\n", - " 18/1 1.03778 1.03470 +/- 0.00693\n", - " 19/1 1.03042 1.03423 +/- 0.00613\n", - " 20/1 1.01047 1.03185 +/- 0.00598\n", - " 21/1 1.03251 1.03191 +/- 0.00541\n", - " 22/1 1.02047 1.03096 +/- 0.00503\n", - " 23/1 1.01729 1.02991 +/- 0.00474\n", - " 24/1 1.02948 1.02988 +/- 0.00439\n", - " 25/1 1.01963 1.02919 +/- 0.00414\n", - " 26/1 1.00626 1.02776 +/- 0.00413\n", - " 27/1 1.04531 1.02879 +/- 0.00402\n", - " 28/1 0.99936 1.02716 +/- 0.00412\n", - " 29/1 1.04497 1.02809 +/- 0.00401\n", - " 30/1 1.02429 1.02790 +/- 0.00381\n", - " 31/1 1.05112 1.02901 +/- 0.00379\n", - " 32/1 1.01843 1.02853 +/- 0.00365\n", - " 33/1 1.04478 1.02924 +/- 0.00355\n", - " 34/1 1.01719 1.02873 +/- 0.00344\n", - " 35/1 0.99873 1.02753 +/- 0.00351\n", - " 36/1 1.00054 1.02649 +/- 0.00353\n", - " 37/1 1.03986 1.02699 +/- 0.00343\n", - " 38/1 1.02243 1.02683 +/- 0.00331\n", - " 39/1 1.02744 1.02685 +/- 0.00319\n", - " 40/1 1.01174 1.02634 +/- 0.00313\n", - " 41/1 1.04973 1.02710 +/- 0.00312\n", - " 42/1 0.99564 1.02612 +/- 0.00317\n", - " 43/1 1.03022 1.02624 +/- 0.00308\n", - " 44/1 1.03526 1.02650 +/- 0.00300\n", - " 45/1 1.02143 1.02636 +/- 0.00292\n", - " 46/1 1.03264 1.02653 +/- 0.00284\n", - " 47/1 1.03868 1.02686 +/- 0.00278\n", - " 48/1 1.02385 1.02678 +/- 0.00271\n", - " 49/1 1.03897 1.02710 +/- 0.00266\n", - " 50/1 1.01267 1.02674 +/- 0.00261\n", - " 51/1 0.99683 1.02601 +/- 0.00265\n", - " 52/1 1.04189 1.02638 +/- 0.00261\n", - " 53/1 1.02871 1.02644 +/- 0.00255\n", - " 54/1 1.02564 1.02642 +/- 0.00250\n", - " 55/1 1.02955 1.02649 +/- 0.00244\n", - " 56/1 1.02390 1.02643 +/- 0.00239\n", - " 57/1 1.03342 1.02658 +/- 0.00234\n", - " 58/1 1.01430 1.02633 +/- 0.00231\n", - " 59/1 0.99242 1.02563 +/- 0.00236\n", - " 60/1 1.00442 1.02521 +/- 0.00235\n", - " 61/1 1.03870 1.02547 +/- 0.00232\n", - " 62/1 1.02146 1.02540 +/- 0.00228\n", - " 63/1 1.04782 1.02582 +/- 0.00227\n", - " 64/1 1.02872 1.02587 +/- 0.00223\n", - " 65/1 1.02420 1.02584 +/- 0.00219\n", - " 66/1 1.01974 1.02573 +/- 0.00215\n", - " 67/1 1.00774 1.02542 +/- 0.00214\n", - " 68/1 1.01323 1.02521 +/- 0.00211\n", - " 69/1 1.01468 1.02503 +/- 0.00208\n", - " 70/1 1.02869 1.02509 +/- 0.00205\n", - " 71/1 1.02284 1.02505 +/- 0.00202\n", - " 72/1 1.04815 1.02543 +/- 0.00202\n", - " 73/1 1.01119 1.02520 +/- 0.00200\n", - " 74/1 1.03314 1.02533 +/- 0.00197\n", - " 75/1 1.02333 1.02529 +/- 0.00194\n", - " 76/1 1.04030 1.02552 +/- 0.00193\n", - " 77/1 1.02537 1.02552 +/- 0.00190\n", - " 78/1 1.02875 1.02557 +/- 0.00187\n", - " 79/1 1.03588 1.02572 +/- 0.00185\n", - " 80/1 1.05250 1.02610 +/- 0.00186\n", - " 81/1 1.00477 1.02580 +/- 0.00186\n", - " 82/1 1.03903 1.02598 +/- 0.00184\n", - " 83/1 1.02378 1.02595 +/- 0.00182\n", - " 84/1 1.01107 1.02575 +/- 0.00180\n", - " 85/1 1.01550 1.02561 +/- 0.00178\n", - " 86/1 1.00540 1.02535 +/- 0.00178\n", - " 87/1 1.03056 1.02542 +/- 0.00176\n", - " 88/1 1.01742 1.02531 +/- 0.00174\n", - " 89/1 0.99730 1.02496 +/- 0.00175\n", - " 90/1 1.03569 1.02509 +/- 0.00174\n", - " 91/1 1.04514 1.02534 +/- 0.00173\n", - " 92/1 1.02757 1.02537 +/- 0.00171\n", - " 93/1 1.00610 1.02514 +/- 0.00171\n", - " 94/1 1.03576 1.02526 +/- 0.00169\n", - " 95/1 1.03732 1.02540 +/- 0.00168\n", - " 96/1 1.04784 1.02567 +/- 0.00168\n", - " 97/1 1.06507 1.02612 +/- 0.00172\n", - " 98/1 1.03673 1.02624 +/- 0.00170\n", - " 99/1 1.01270 1.02609 +/- 0.00169\n", - " 100/1 1.01980 1.02602 +/- 0.00167\n", - " 101/1 1.01357 1.02588 +/- 0.00166\n", - " 102/1 1.03125 1.02594 +/- 0.00164\n", - " 103/1 1.01527 1.02582 +/- 0.00163\n", - " 104/1 1.02403 1.02580 +/- 0.00161\n", - " 105/1 1.03435 1.02589 +/- 0.00160\n", - " 106/1 1.04113 1.02605 +/- 0.00159\n", - " 107/1 1.03291 1.02612 +/- 0.00157\n", - " 108/1 1.02478 1.02611 +/- 0.00156\n", - " 109/1 1.05814 1.02643 +/- 0.00158\n", - " 110/1 1.02647 1.02643 +/- 0.00156\n", - " 111/1 0.98951 1.02607 +/- 0.00159\n", - " 112/1 1.00739 1.02589 +/- 0.00158\n", - " 113/1 1.04165 1.02604 +/- 0.00157\n", - " 114/1 1.00047 1.02579 +/- 0.00158\n", - " 115/1 1.02550 1.02579 +/- 0.00156\n", - " 116/1 1.02408 1.02577 +/- 0.00155\n", - " 117/1 1.03110 1.02582 +/- 0.00153\n", - " 118/1 1.02874 1.02585 +/- 0.00152\n", - " 119/1 1.02348 1.02583 +/- 0.00151\n", - " 120/1 1.01969 1.02577 +/- 0.00149\n", - " 121/1 1.02312 1.02575 +/- 0.00148\n", - " 122/1 1.03261 1.02581 +/- 0.00147\n", - " 123/1 0.98394 1.02544 +/- 0.00150\n", - " 124/1 1.03771 1.02555 +/- 0.00149\n", - " 125/1 1.01857 1.02549 +/- 0.00148\n", - " 126/1 1.00066 1.02527 +/- 0.00148\n", - " 127/1 1.02372 1.02526 +/- 0.00147\n", - " 128/1 1.03307 1.02533 +/- 0.00146\n", - " 129/1 1.00889 1.02519 +/- 0.00145\n", - " 130/1 1.02053 1.02515 +/- 0.00144\n", - " 131/1 1.00943 1.02502 +/- 0.00144\n", - " 132/1 1.07225 1.02541 +/- 0.00148\n", - " 133/1 1.04068 1.02553 +/- 0.00147\n", - " 134/1 1.03509 1.02561 +/- 0.00146\n", - " 135/1 1.01250 1.02550 +/- 0.00145\n", - " 136/1 1.02179 1.02547 +/- 0.00144\n", - " 137/1 1.05685 1.02572 +/- 0.00145\n", - " 138/1 1.04217 1.02585 +/- 0.00144\n", - " 139/1 1.02793 1.02586 +/- 0.00143\n", - " 140/1 1.01207 1.02576 +/- 0.00143\n", - " 141/1 1.03445 1.02582 +/- 0.00142\n", - " 142/1 1.03579 1.02590 +/- 0.00141\n", - " 143/1 1.00786 1.02576 +/- 0.00140\n", - " 144/1 0.99089 1.02550 +/- 0.00142\n", - " 145/1 1.02617 1.02551 +/- 0.00141\n", - " 146/1 1.01691 1.02545 +/- 0.00140\n", - " 147/1 1.00692 1.02531 +/- 0.00139\n", - " 148/1 0.97702 1.02496 +/- 0.00143\n", - " 149/1 1.04002 1.02507 +/- 0.00142\n", - " 150/1 1.01262 1.02498 +/- 0.00141\n", - " 151/1 1.03613 1.02506 +/- 0.00141\n", - " 152/1 1.02920 1.02509 +/- 0.00140\n", - " 153/1 1.02199 1.02507 +/- 0.00139\n", - " 154/1 1.03421 1.02513 +/- 0.00138\n", - " 155/1 1.05882 1.02536 +/- 0.00139\n", - " 156/1 1.02649 1.02537 +/- 0.00138\n", - " 157/1 1.01933 1.02533 +/- 0.00137\n", - " 158/1 1.04269 1.02545 +/- 0.00137\n", - " 159/1 0.99604 1.02525 +/- 0.00137\n", - " 160/1 1.04748 1.02540 +/- 0.00137\n", - " 161/1 1.00501 1.02526 +/- 0.00137\n", - " 162/1 1.00550 1.02513 +/- 0.00137\n", - " 163/1 1.00115 1.02498 +/- 0.00137\n", - " 164/1 1.02283 1.02496 +/- 0.00136\n", - " 165/1 1.01964 1.02493 +/- 0.00135\n", - " 166/1 1.02287 1.02491 +/- 0.00134\n", - " 167/1 1.05498 1.02511 +/- 0.00134\n", - " 168/1 1.05267 1.02528 +/- 0.00135\n", - " 169/1 1.00474 1.02515 +/- 0.00135\n", - " 170/1 1.03469 1.02521 +/- 0.00134\n", - " 171/1 1.02499 1.02521 +/- 0.00133\n", - " 172/1 1.03961 1.02530 +/- 0.00132\n", - " 173/1 1.01240 1.02522 +/- 0.00132\n", - " 174/1 1.00762 1.02511 +/- 0.00132\n", - " 175/1 1.00200 1.02497 +/- 0.00131\n", - " 176/1 1.01449 1.02491 +/- 0.00131\n", - " 177/1 1.01111 1.02483 +/- 0.00130\n", - " 178/1 1.01208 1.02475 +/- 0.00130\n", - " 179/1 1.03304 1.02480 +/- 0.00129\n", - " 180/1 1.04504 1.02492 +/- 0.00129\n", - " 181/1 1.03476 1.02498 +/- 0.00128\n", - " 182/1 1.02124 1.02495 +/- 0.00128\n", - " 183/1 0.98855 1.02474 +/- 0.00128\n", - " 184/1 1.04689 1.02487 +/- 0.00128\n", - " 185/1 1.00618 1.02476 +/- 0.00128\n", - " 186/1 1.02012 1.02474 +/- 0.00127\n", - " 187/1 1.00162 1.02461 +/- 0.00127\n", - " 188/1 1.03269 1.02465 +/- 0.00127\n", - " 189/1 1.04772 1.02478 +/- 0.00127\n", - " 190/1 1.01132 1.02471 +/- 0.00126\n", - " 191/1 1.02669 1.02472 +/- 0.00125\n", - " 192/1 1.01154 1.02464 +/- 0.00125\n", - " 193/1 1.05795 1.02483 +/- 0.00126\n", - " 194/1 1.01615 1.02478 +/- 0.00125\n", - " 195/1 1.03828 1.02485 +/- 0.00125\n", - " 196/1 1.00695 1.02476 +/- 0.00124\n", - " 197/1 1.04126 1.02484 +/- 0.00124\n", - " 198/1 1.02834 1.02486 +/- 0.00123\n", - " 199/1 1.01000 1.02478 +/- 0.00123\n", - " 200/1 0.99294 1.02462 +/- 0.00123\n", - " 201/1 1.00248 1.02450 +/- 0.00123\n", - " 202/1 1.03461 1.02455 +/- 0.00123\n", - " 203/1 1.06289 1.02475 +/- 0.00124\n", - " 204/1 1.03010 1.02478 +/- 0.00123\n", - " 205/1 1.04636 1.02489 +/- 0.00123\n", - " 206/1 1.05434 1.02504 +/- 0.00123\n", - " 207/1 1.03993 1.02512 +/- 0.00123\n", - " 208/1 1.02672 1.02512 +/- 0.00122\n", - " 209/1 1.04958 1.02525 +/- 0.00122\n", - " 210/1 0.99194 1.02508 +/- 0.00123\n", - " 211/1 1.01570 1.02503 +/- 0.00122\n", - " 212/1 1.04079 1.02511 +/- 0.00122\n", - " 213/1 1.02961 1.02513 +/- 0.00121\n", - " 214/1 1.03797 1.02520 +/- 0.00121\n", - " 215/1 1.03714 1.02526 +/- 0.00120\n", - " 216/1 1.03299 1.02529 +/- 0.00120\n", - " 217/1 1.00461 1.02519 +/- 0.00120\n", - " 218/1 1.02386 1.02519 +/- 0.00119\n", - " 219/1 1.01955 1.02516 +/- 0.00119\n", - " 220/1 1.04372 1.02525 +/- 0.00118\n", - " 221/1 1.01694 1.02521 +/- 0.00118\n", - " 222/1 0.99642 1.02507 +/- 0.00118\n", - " 223/1 1.00999 1.02500 +/- 0.00118\n", - " 224/1 1.02703 1.02501 +/- 0.00117\n", - " 225/1 1.00236 1.02491 +/- 0.00117\n", - " 226/1 1.02825 1.02492 +/- 0.00117\n", - " 227/1 1.04535 1.02502 +/- 0.00116\n", - " 228/1 1.01779 1.02498 +/- 0.00116\n", - " 229/1 1.01058 1.02492 +/- 0.00116\n", - " 230/1 1.00391 1.02482 +/- 0.00115\n", - " 231/1 1.05990 1.02498 +/- 0.00116\n", - " 232/1 1.01885 1.02495 +/- 0.00116\n", - " 233/1 1.03204 1.02498 +/- 0.00115\n", - " 234/1 0.99396 1.02485 +/- 0.00115\n", - " 235/1 1.01828 1.02482 +/- 0.00115\n", - " 236/1 1.08225 1.02507 +/- 0.00117\n", - " 237/1 1.00335 1.02498 +/- 0.00117\n", - " 238/1 1.03097 1.02500 +/- 0.00117\n", - " 239/1 1.01738 1.02497 +/- 0.00116\n", - " 240/1 1.02261 1.02496 +/- 0.00116\n", - " 241/1 1.02814 1.02497 +/- 0.00115\n", - " 242/1 1.01158 1.02491 +/- 0.00115\n", - " 243/1 1.03507 1.02496 +/- 0.00114\n", - " 244/1 1.01914 1.02493 +/- 0.00114\n", - " 245/1 1.04555 1.02502 +/- 0.00114\n", - " 246/1 1.02459 1.02502 +/- 0.00113\n", - " 247/1 1.05827 1.02516 +/- 0.00114\n", - " 248/1 1.02549 1.02516 +/- 0.00113\n", - " 249/1 1.03354 1.02520 +/- 0.00113\n", - " 250/1 1.04186 1.02526 +/- 0.00113\n", - " 251/1 1.00466 1.02518 +/- 0.00112\n", - " 252/1 0.99065 1.02504 +/- 0.00113\n", - " 253/1 1.03065 1.02506 +/- 0.00112\n", - " 254/1 1.02167 1.02505 +/- 0.00112\n", - " 255/1 1.01700 1.02501 +/- 0.00112\n", - " 256/1 1.03619 1.02506 +/- 0.00111\n", - " 257/1 1.01833 1.02503 +/- 0.00111\n", - " 258/1 1.02211 1.02502 +/- 0.00110\n", - " 259/1 1.04348 1.02509 +/- 0.00110\n", - " 260/1 1.03444 1.02513 +/- 0.00110\n", - " 261/1 1.05597 1.02525 +/- 0.00110\n", - " 262/1 1.02085 1.02524 +/- 0.00110\n", - " 263/1 1.00552 1.02516 +/- 0.00109\n", - " 264/1 1.03976 1.02522 +/- 0.00109\n", - " 265/1 1.02810 1.02523 +/- 0.00109\n", - " 266/1 1.00911 1.02516 +/- 0.00108\n", - " 267/1 1.01963 1.02514 +/- 0.00108\n", - " 268/1 1.03732 1.02519 +/- 0.00108\n", - " 269/1 1.02422 1.02519 +/- 0.00107\n", - " 270/1 1.01546 1.02515 +/- 0.00107\n", - " 271/1 1.05488 1.02526 +/- 0.00107\n", - " 272/1 1.01709 1.02523 +/- 0.00107\n", - " 273/1 1.05629 1.02535 +/- 0.00107\n", - " 274/1 1.03864 1.02540 +/- 0.00107\n", - " 275/1 1.01472 1.02536 +/- 0.00106\n", - " 276/1 1.03425 1.02539 +/- 0.00106\n", - " 277/1 1.00663 1.02532 +/- 0.00106\n", - " 278/1 1.03326 1.02535 +/- 0.00106\n", - " 279/1 1.02571 1.02535 +/- 0.00105\n", - " 280/1 1.00525 1.02528 +/- 0.00105\n", - " 281/1 1.00451 1.02520 +/- 0.00105\n", - " 282/1 1.04016 1.02526 +/- 0.00105\n", - " 283/1 0.98343 1.02510 +/- 0.00105\n", - " 284/1 1.04843 1.02519 +/- 0.00105\n", - " 285/1 1.01807 1.02516 +/- 0.00105\n", - " 286/1 1.02393 1.02516 +/- 0.00105\n", - " 287/1 1.01851 1.02514 +/- 0.00104\n", - " 288/1 1.03976 1.02519 +/- 0.00104\n", - " 289/1 1.03153 1.02521 +/- 0.00104\n", - " 290/1 1.00416 1.02514 +/- 0.00104\n", - " 291/1 1.01426 1.02510 +/- 0.00103\n", - " 292/1 1.02583 1.02510 +/- 0.00103\n", - " 293/1 1.01680 1.02507 +/- 0.00103\n", - " 294/1 1.04578 1.02514 +/- 0.00103\n", - " 295/1 1.03162 1.02517 +/- 0.00102\n", - " 296/1 1.01682 1.02514 +/- 0.00102\n", - " 297/1 1.00488 1.02507 +/- 0.00102\n", - " 298/1 1.03057 1.02508 +/- 0.00101\n", - " 299/1 1.01126 1.02504 +/- 0.00101\n", - " 300/1 1.03528 1.02507 +/- 0.00101\n", - " 301/1 1.05548 1.02518 +/- 0.00101\n", - " 302/1 1.02994 1.02519 +/- 0.00101\n", - " 303/1 1.03010 1.02521 +/- 0.00100\n", - " 304/1 1.04031 1.02526 +/- 0.00100\n", - " 305/1 1.05866 1.02537 +/- 0.00101\n", - " 306/1 1.03602 1.02541 +/- 0.00100\n", - " 307/1 1.01362 1.02537 +/- 0.00100\n", - " 308/1 1.01318 1.02533 +/- 0.00100\n", - " 309/1 1.04262 1.02539 +/- 0.00100\n", - " 310/1 1.01626 1.02536 +/- 0.00099\n", - " 311/1 1.00285 1.02528 +/- 0.00099\n", - " 312/1 0.98155 1.02514 +/- 0.00100\n", - " 313/1 1.05649 1.02524 +/- 0.00100\n", - " 314/1 1.00960 1.02519 +/- 0.00100\n", - " 315/1 1.05350 1.02528 +/- 0.00100\n", - " 316/1 1.03842 1.02533 +/- 0.00100\n", - " 317/1 1.01394 1.02529 +/- 0.00100\n", - " 318/1 1.01830 1.02527 +/- 0.00099\n", - " 319/1 1.02050 1.02525 +/- 0.00099\n", - " 320/1 1.03402 1.02528 +/- 0.00099\n", - " 321/1 1.04547 1.02534 +/- 0.00099\n", - " 322/1 1.02579 1.02534 +/- 0.00098\n", - " 323/1 1.01922 1.02533 +/- 0.00098\n", - " 324/1 1.01050 1.02528 +/- 0.00098\n", - " 325/1 1.01426 1.02524 +/- 0.00098\n", - " 326/1 1.03283 1.02527 +/- 0.00097\n", - " 327/1 1.03859 1.02531 +/- 0.00097\n", - " 328/1 1.01536 1.02528 +/- 0.00097\n", - " 329/1 1.03149 1.02530 +/- 0.00097\n", - " 330/1 1.04328 1.02535 +/- 0.00096\n", - " 331/1 1.01949 1.02534 +/- 0.00096\n", - " 332/1 1.02319 1.02533 +/- 0.00096\n", - " 333/1 1.01704 1.02530 +/- 0.00096\n", - " 334/1 1.02691 1.02531 +/- 0.00095\n", - " 335/1 1.03188 1.02533 +/- 0.00095\n", - " 336/1 1.03107 1.02535 +/- 0.00095\n", - " 337/1 1.02410 1.02534 +/- 0.00094\n", - " 338/1 0.99917 1.02526 +/- 0.00094\n", - " 339/1 1.03593 1.02529 +/- 0.00094\n", - " 340/1 1.02286 1.02529 +/- 0.00094\n", - " 341/1 1.04154 1.02534 +/- 0.00094\n", - " 342/1 1.01664 1.02531 +/- 0.00094\n", - " 343/1 1.01041 1.02527 +/- 0.00093\n", - " 344/1 1.02033 1.02525 +/- 0.00093\n", - " 345/1 1.03137 1.02527 +/- 0.00093\n", - " 346/1 1.02162 1.02526 +/- 0.00093\n", - " 347/1 1.00835 1.02521 +/- 0.00092\n", - " 348/1 1.01168 1.02517 +/- 0.00092\n", - " 349/1 1.01168 1.02513 +/- 0.00092\n", - " 350/1 1.03509 1.02516 +/- 0.00092\n", - " 351/1 1.01883 1.02514 +/- 0.00092\n", - " 352/1 1.04314 1.02519 +/- 0.00091\n", - " 353/1 0.99067 1.02509 +/- 0.00092\n", - " 354/1 1.03100 1.02511 +/- 0.00091\n", - " 355/1 1.01664 1.02508 +/- 0.00091\n", - " 356/1 1.02193 1.02507 +/- 0.00091\n", - " 357/1 1.03213 1.02509 +/- 0.00091\n", - " 358/1 1.00555 1.02504 +/- 0.00091\n", - " 359/1 1.04849 1.02511 +/- 0.00091\n", - " 360/1 1.02174 1.02510 +/- 0.00090\n", - " 361/1 1.05064 1.02517 +/- 0.00090\n", - " 362/1 1.05274 1.02525 +/- 0.00091\n", - " 363/1 1.00932 1.02520 +/- 0.00090\n", - " 364/1 1.03400 1.02523 +/- 0.00090\n", - " 365/1 1.00149 1.02516 +/- 0.00090\n", - " 366/1 1.01631 1.02514 +/- 0.00090\n", - " 367/1 1.03928 1.02517 +/- 0.00090\n", - " 368/1 1.01318 1.02514 +/- 0.00090\n", - " 369/1 1.04610 1.02520 +/- 0.00090\n", - " 370/1 1.04338 1.02525 +/- 0.00089\n", - " 371/1 1.01638 1.02523 +/- 0.00089\n", - " 372/1 1.04056 1.02527 +/- 0.00089\n", - " 373/1 1.00090 1.02520 +/- 0.00089\n", - " 374/1 1.01261 1.02517 +/- 0.00089\n", - " 375/1 1.03919 1.02520 +/- 0.00089\n", - " 376/1 0.99900 1.02513 +/- 0.00089\n", - " 377/1 1.00168 1.02507 +/- 0.00089\n", - " 378/1 0.99476 1.02499 +/- 0.00089\n", - " 379/1 1.04960 1.02505 +/- 0.00089\n", - " 380/1 0.99797 1.02498 +/- 0.00089\n", - " 381/1 1.04956 1.02505 +/- 0.00089\n", - " 382/1 1.02803 1.02505 +/- 0.00089\n", - " 383/1 0.99388 1.02497 +/- 0.00089\n", - " 384/1 1.00767 1.02492 +/- 0.00089\n", - " 385/1 1.00856 1.02488 +/- 0.00089\n", - " 386/1 1.02997 1.02489 +/- 0.00088\n", - " 387/1 0.97841 1.02477 +/- 0.00089\n", - " 388/1 0.99712 1.02470 +/- 0.00089\n", - " 389/1 0.99072 1.02461 +/- 0.00089\n", - " 390/1 1.02439 1.02461 +/- 0.00089\n", - " 391/1 1.02769 1.02462 +/- 0.00089\n", - " 392/1 1.02205 1.02461 +/- 0.00089\n", - " 393/1 1.03702 1.02464 +/- 0.00088\n", - " 394/1 1.00274 1.02458 +/- 0.00088\n", - " 395/1 1.00131 1.02452 +/- 0.00088\n", - " 396/1 1.00130 1.02446 +/- 0.00088\n", - " 397/1 1.00472 1.02441 +/- 0.00088\n", - " 398/1 1.00724 1.02437 +/- 0.00088\n", - " 399/1 1.03061 1.02438 +/- 0.00088\n", - " 400/1 0.99651 1.02431 +/- 0.00088\n", - " 401/1 0.99290 1.02423 +/- 0.00088\n", - " 402/1 1.02166 1.02423 +/- 0.00088\n", - " 403/1 1.01691 1.02421 +/- 0.00088\n", - " 404/1 1.00492 1.02416 +/- 0.00088\n", - " 405/1 1.00663 1.02411 +/- 0.00088\n", - " 406/1 1.01865 1.02410 +/- 0.00087\n", - " 407/1 1.02717 1.02411 +/- 0.00087\n", - " 408/1 1.01793 1.02409 +/- 0.00087\n", - " 409/1 1.02606 1.02410 +/- 0.00087\n", - " 410/1 1.03809 1.02413 +/- 0.00087\n", - " 411/1 1.03780 1.02417 +/- 0.00086\n", - " 412/1 1.02782 1.02418 +/- 0.00086\n", - " 413/1 1.03077 1.02419 +/- 0.00086\n", - " 414/1 1.00651 1.02415 +/- 0.00086\n", - " 415/1 1.05594 1.02423 +/- 0.00086\n", - " 416/1 0.99558 1.02416 +/- 0.00086\n", - " 417/1 1.00689 1.02411 +/- 0.00086\n", - " 418/1 1.02932 1.02413 +/- 0.00086\n", - " 419/1 1.03552 1.02415 +/- 0.00086\n", - " 420/1 1.03735 1.02419 +/- 0.00085\n", - " 421/1 1.02402 1.02419 +/- 0.00085\n", - " 422/1 1.04227 1.02423 +/- 0.00085\n", - " 423/1 1.03087 1.02425 +/- 0.00085\n", - " 424/1 1.04363 1.02429 +/- 0.00085\n", - " 425/1 1.02676 1.02430 +/- 0.00085\n", - " 426/1 1.03739 1.02433 +/- 0.00085\n", - " 427/1 1.02977 1.02434 +/- 0.00084\n", - " 428/1 1.02547 1.02435 +/- 0.00084\n", - " 429/1 1.03552 1.02437 +/- 0.00084\n", - " 430/1 1.04282 1.02442 +/- 0.00084\n", - " 431/1 1.03171 1.02443 +/- 0.00084\n", - " 432/1 1.01030 1.02440 +/- 0.00084\n", - " 433/1 1.04168 1.02444 +/- 0.00084\n", - " 434/1 0.98994 1.02436 +/- 0.00084\n", - " 435/1 0.98166 1.02426 +/- 0.00084\n", - " 436/1 1.00178 1.02421 +/- 0.00084\n", - " 437/1 1.03801 1.02424 +/- 0.00084\n", - " 438/1 1.02099 1.02423 +/- 0.00084\n", - " 439/1 1.01305 1.02421 +/- 0.00084\n", - " 440/1 1.02286 1.02420 +/- 0.00083\n", - " 441/1 1.03697 1.02423 +/- 0.00083\n", - " 442/1 0.99050 1.02415 +/- 0.00083\n", - " 443/1 1.02238 1.02415 +/- 0.00083\n", - " 444/1 1.05188 1.02421 +/- 0.00083\n", - " 445/1 1.03150 1.02423 +/- 0.00083\n", - " 446/1 1.01071 1.02420 +/- 0.00083\n", - " 447/1 1.03713 1.02423 +/- 0.00083\n", - " 448/1 1.03631 1.02426 +/- 0.00083\n", - " 449/1 1.02968 1.02427 +/- 0.00083\n", - " 450/1 1.03031 1.02428 +/- 0.00082\n", - " 451/1 1.02161 1.02428 +/- 0.00082\n", - " 452/1 0.99036 1.02420 +/- 0.00082\n", - " 453/1 1.02581 1.02420 +/- 0.00082\n", - " 454/1 1.03140 1.02422 +/- 0.00082\n", - " 455/1 1.01962 1.02421 +/- 0.00082\n", - " 456/1 1.00680 1.02417 +/- 0.00082\n", - " 457/1 1.00178 1.02412 +/- 0.00082\n", - " 458/1 1.02306 1.02412 +/- 0.00082\n", - " 459/1 1.02653 1.02412 +/- 0.00081\n", - " 460/1 1.02934 1.02413 +/- 0.00081\n", - " 461/1 1.00872 1.02410 +/- 0.00081\n", - " 462/1 1.00012 1.02405 +/- 0.00081\n", - " 463/1 0.99057 1.02397 +/- 0.00081\n", - " 464/1 1.02353 1.02397 +/- 0.00081\n", - " 465/1 1.01402 1.02395 +/- 0.00081\n", - " 466/1 1.01651 1.02393 +/- 0.00081\n", - " 467/1 1.01024 1.02390 +/- 0.00081\n", - " 468/1 1.02504 1.02391 +/- 0.00080\n", - " 469/1 1.00891 1.02387 +/- 0.00080\n", - " 470/1 1.04038 1.02391 +/- 0.00080\n", - " 471/1 1.04346 1.02395 +/- 0.00080\n", - " 472/1 1.02634 1.02396 +/- 0.00080\n", - " 473/1 1.01207 1.02393 +/- 0.00080\n", - " 474/1 1.00787 1.02390 +/- 0.00080\n", - " 475/1 1.03591 1.02392 +/- 0.00080\n", - " 476/1 1.04257 1.02396 +/- 0.00080\n", - " 477/1 1.00536 1.02392 +/- 0.00079\n", - " 478/1 1.07545 1.02403 +/- 0.00080\n", - " 479/1 1.02306 1.02403 +/- 0.00080\n", - " 480/1 1.02733 1.02404 +/- 0.00080\n", - " 481/1 1.00990 1.02401 +/- 0.00080\n", - " 482/1 0.99031 1.02394 +/- 0.00080\n", - " 483/1 0.98006 1.02384 +/- 0.00080\n", - " 484/1 1.05635 1.02391 +/- 0.00080\n", - " 485/1 1.02410 1.02391 +/- 0.00080\n", - " 486/1 1.01227 1.02389 +/- 0.00080\n", - " 487/1 1.00614 1.02385 +/- 0.00080\n", - " 488/1 1.01837 1.02384 +/- 0.00080\n", - " 489/1 1.02565 1.02384 +/- 0.00080\n", - " 490/1 1.00530 1.02381 +/- 0.00079\n", - " 491/1 1.01958 1.02380 +/- 0.00079\n", - " 492/1 1.04490 1.02384 +/- 0.00079\n", - " 493/1 1.02567 1.02384 +/- 0.00079\n", - " 494/1 1.03865 1.02387 +/- 0.00079\n", - " 495/1 1.03990 1.02391 +/- 0.00079\n", - " 496/1 0.98352 1.02382 +/- 0.00079\n", - " 497/1 1.00909 1.02379 +/- 0.00079\n", - " 498/1 1.03661 1.02382 +/- 0.00079\n", - " 499/1 1.04423 1.02386 +/- 0.00079\n", - " 500/1 1.06406 1.02394 +/- 0.00079\n", - " Creating state point statepoint.500.h5...\n", + " 1/1 1.02073 \n", + " 2/1 1.04004 \n", + " 3/1 1.02324 \n", + " 4/1 1.01690 \n", + " 5/1 1.03702 \n", + " 6/1 1.01796 \n", + " 7/1 1.01779 \n", + " 8/1 1.02764 \n", + " 9/1 1.03324 \n", + " 10/1 1.01465 \n", + " 11/1 1.02268 \n", + " 12/1 1.01598 1.01933 +/- 0.00335\n", + " 13/1 1.01993 1.01953 +/- 0.00194\n", + " 14/1 1.01779 1.01910 +/- 0.00144\n", + " 15/1 1.01014 1.01731 +/- 0.00211\n", + " 16/1 1.04059 1.02119 +/- 0.00425\n", + " 17/1 1.04877 1.02513 +/- 0.00533\n", + " 18/1 1.05504 1.02887 +/- 0.00594\n", + " 19/1 1.02601 1.02855 +/- 0.00525\n", + " 20/1 1.04347 1.03004 +/- 0.00493\n", + " 21/1 1.01703 1.02886 +/- 0.00461\n", + " 22/1 1.02628 1.02864 +/- 0.00421\n", + " 23/1 1.02598 1.02844 +/- 0.00388\n", + " 24/1 1.05341 1.03022 +/- 0.00401\n", + " 25/1 1.02201 1.02967 +/- 0.00377\n", + " 26/1 1.00758 1.02829 +/- 0.00379\n", + " 27/1 1.00720 1.02705 +/- 0.00377\n", + " 28/1 1.03098 1.02727 +/- 0.00356\n", + " 29/1 1.03022 1.02743 +/- 0.00337\n", + " 30/1 1.01694 1.02690 +/- 0.00324\n", + " 31/1 0.99064 1.02518 +/- 0.00353\n", + " 32/1 0.99495 1.02380 +/- 0.00364\n", + " 33/1 1.03220 1.02417 +/- 0.00350\n", + " 34/1 1.02399 1.02416 +/- 0.00335\n", + " 35/1 1.03048 1.02441 +/- 0.00322\n", + " 36/1 1.05360 1.02553 +/- 0.00329\n", + " 37/1 1.05030 1.02645 +/- 0.00330\n", + " 38/1 1.04167 1.02699 +/- 0.00322\n", + " 39/1 1.04406 1.02758 +/- 0.00317\n", + " 40/1 1.01169 1.02705 +/- 0.00310\n", + " 41/1 1.00191 1.02624 +/- 0.00311\n", + " 42/1 1.02729 1.02628 +/- 0.00301\n", + " 43/1 1.02263 1.02616 +/- 0.00292\n", + " 44/1 1.05344 1.02697 +/- 0.00295\n", + " 45/1 1.03607 1.02723 +/- 0.00287\n", + " 46/1 1.00357 1.02657 +/- 0.00287\n", + " 47/1 1.03353 1.02676 +/- 0.00279\n", + " 48/1 1.03817 1.02706 +/- 0.00274\n", + " 49/1 1.01454 1.02674 +/- 0.00269\n", + " 50/1 0.99860 1.02603 +/- 0.00271\n", + " Creating state point statepoint.50.h5...\n", "\n", " ===========================================================================\n", " ======================> SIMULATION FINISHED <======================\n", @@ -2165,27 +1151,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.3000E-02 seconds\n", - " Reading cross sections = 5.0000E-03 seconds\n", - " Total time in simulation = 1.8631E+02 seconds\n", - " Time in transport only = 1.8590E+02 seconds\n", - " Time in inactive batches = 1.1710E+00 seconds\n", - " Time in active batches = 1.8514E+02 seconds\n", - " Time synchronizing fission bank = 7.3000E-02 seconds\n", - " Sampling source sites = 5.1000E-02 seconds\n", - " SEND/RECV source sites = 2.2000E-02 seconds\n", - " Time accumulating tallies = 4.0000E-03 seconds\n", + " Total time for initialization = 3.7000E-02 seconds\n", + " Reading cross sections = 4.0000E-03 seconds\n", + " Total time in simulation = 1.2661E+01 seconds\n", + " Time in transport only = 1.2600E+01 seconds\n", + " Time in inactive batches = 1.1370E+00 seconds\n", + " Time in active batches = 1.1524E+01 seconds\n", + " Time synchronizing fission bank = 7.0000E-03 seconds\n", + " Sampling source sites = 5.0000E-03 seconds\n", + " SEND/RECV source sites = 2.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.8637E+02 seconds\n", - " Calculation Rate (inactive) = 42698.5 neutrons/second\n", - " Calculation Rate (active) = 13233.2 neutrons/second\n", + " Total time elapsed = 1.2707E+01 seconds\n", + " Calculation Rate (inactive) = 43975.4 neutrons/second\n", + " Calculation Rate (active) = 17355.1 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.02403 +/- 0.00071\n", - " k-effective (Track-length) = 1.02394 +/- 0.00079\n", - " k-effective (Absorption) = 1.02539 +/- 0.00044\n", - " Combined k-effective = 1.02518 +/- 0.00042\n", + " k-effective (Collision) = 1.02471 +/- 0.00243\n", + " k-effective (Track-length) = 1.02603 +/- 0.00271\n", + " k-effective (Absorption) = 1.02312 +/- 0.00182\n", + " Combined k-effective = 1.02387 +/- 0.00172\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -2196,7 +1182,7 @@ "0" ] }, - "execution_count": 35, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -2219,7 +1205,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 35, "metadata": { "collapsed": false }, @@ -2239,7 +1225,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 36, "metadata": { "collapsed": true }, @@ -2257,7 +1243,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 37, "metadata": { "collapsed": false }, @@ -2266,9 +1252,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Continuous-Energy keff = 1.025194\n", - "Multi-Group keff = 1.025183\n", - "bias [pcm]: 1.1\n" + "Continuous-Energy keff = 1.024295\n", + "Multi-Group keff = 1.023875\n", + "bias [pcm]: 42.0\n" ] } ], @@ -2284,7 +1270,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We see quite good agreement with only an 1 pcm difference between the two. While these results are quite favorable, due to the high degree of approximations inherent in practical application of multi-group theory, one should not expect results of such fidelity always for multi-group Monte Carlo calculations." + "We see quite good agreement with only a 42 pcm difference between the two methods. Due to the high degree of approximations inherent in practical application of multi-group theory, one should not expect results of such high fidelity always for multi-group Monte Carlo calculations." ] }, { @@ -2305,7 +1291,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 38, "metadata": { "collapsed": false }, @@ -2313,39 +1299,39 @@ "source": [ "# Get the OpenMC fission rate mesh tally data\n", "mg_mesh_tally = mgsp.get_tally(name='mesh tally')\n", - "mgopenmc_fission_rates = mg_mesh_tally.get_values(scores=['fission'])\n", + "mg_fission_rates = mg_mesh_tally.get_values(scores=['fission'])\n", "\n", "# Reshape array to 2D for plotting\n", - "mgopenmc_fission_rates.shape = (17,17)\n", + "mg_fission_rates.shape = (17,17)\n", "\n", "# Normalize to the average pin power\n", - "mgopenmc_fission_rates /= np.mean(mgopenmc_fission_rates)" + "mg_fission_rates /= np.mean(mg_fission_rates)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now we can do the same for the Multi-Group results." + "Now we can do the same for the Continuous-Energy results." ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 39, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ "# Get the OpenMC fission rate mesh tally data\n", - "mesh_tally = sp.get_tally(name='mesh tally')\n", - "openmc_fission_rates = mesh_tally.get_values(scores=['fission'])\n", + "ce_mesh_tally = sp.get_tally(name='mesh tally')\n", + "ce_fission_rates = ce_mesh_tally.get_values(scores=['fission'])\n", "\n", "# Reshape array to 2D for plotting\n", - "openmc_fission_rates.shape = (17,17)\n", + "ce_fission_rates.shape = (17,17)\n", "\n", "# Normalize to the average pin power\n", - "openmc_fission_rates /= np.mean(openmc_fission_rates)" + "ce_fission_rates /= np.mean(ce_fission_rates)" ] }, { @@ -2357,7 +1343,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 40, "metadata": { "collapsed": false }, @@ -2365,18 +1351,18 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 41, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\nMIunubFhPwAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2386,12 +1372,12 @@ "source": [ "# Plot the CE fission rates in the left subplot\n", "fig = plt.subplot(121)\n", - "plt.imshow(openmc_fission_rates, interpolation='none', cmap='jet')\n", + "plt.imshow(ce_fission_rates, interpolation='none', cmap='jet')\n", "plt.title('Continuous-Energy Fission Rates')\n", "\n", "# Plot the MG fission rates in the right subplot\n", "fig2 = plt.subplot(122)\n", - "plt.imshow(mgopenmc_fission_rates, interpolation='none', cmap='jet')\n", + "plt.imshow(mg_fission_rates, interpolation='none', cmap='jet')\n", "plt.title('Multi-Group Fission Rates')\n" ] }, diff --git a/docs/source/usersguide/mgxs_library.rst b/docs/source/usersguide/mgxs_library.rst index a5d2ec0d06..8628bef4e0 100644 --- a/docs/source/usersguide/mgxs_library.rst +++ b/docs/source/usersguide/mgxs_library.rst @@ -8,10 +8,10 @@ OpenMC can be run in continuous-energy mode or multi-group mode, provided the nuclear data is available. In continuous-energy mode, the ``cross_sections.xml`` file contains necessary meta-data for each data set, including the name and a file system location where the complete library -can be found. In multi-group mode, this ``cross_sections.xml`` file contains +can be found. In multi-group mode, this ``mgxs.xml`` file contains this same meta-data describing the nuclide or material, but also contains the group-wise nuclear data. This portion of the manual describes the format of -the multi-group data library required to be used in the ``cross_sections.xml`` +the multi-group data library required to be used in the ``mgxs.xml`` file. Similar to the other input file types, the multi-group library is provided in @@ -23,7 +23,7 @@ materials. .. _XML: http://www.w3.org/XML/ ------------------------------------------------ -MGXS Library Specification -- cross_sections.xml +MGXS Library Specification -- mgxs.xml ------------------------------------------------ The multi-group library meta-data is contained within the groups_, diff --git a/openmc/material.py b/openmc/material.py index e9a74f1e75..02cbc117d0 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -348,7 +348,9 @@ class Material(object): del self._nuclides[nuclide._name] def add_macroscopic(self, macroscopic): - """Add a macroscopic to the material + """Add a macroscopic to the material. This will also set the + density of the material to 1.0, unless it has been otherwise set, + as a default for Macroscopic cross sections. Parameters ---------- @@ -386,6 +388,14 @@ class Material(object): 'Material!'.format(self._id, macroscopic) raise ValueError(msg) + # Generally speaking, the density for a macroscopic object will + # be 1.0. Therefore, lets set density to 1.0 so that the user + # doesnt need to set it unless its needed. + # Of course, if the user has already set a value of density, + # then we will not override it. + if self._density is None: + self.set_density('macro', 1.0) + def remove_macroscopic(self, macroscopic): """Remove a macroscopic from the material diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 334a0fa9cf..44746e209d 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -722,11 +722,140 @@ class Library(object): # Load and return pickled Library object return pickle.load(open(full_filename, 'rb')) - def write_mg_library(self, xs_type='macro', domain_names=None, xs_ids=None, - filename='mg_cross_sections', directory='./', - return_names=False): - """Creates a cross-section data library file for the Multi-Group - mode of OpenMC. + def get_xsdata(self, domain, domain_name, nuclide='total', xs_type='macro', + xs_id='1m', order=-1): + """Generates an openmc.XSdata object describing a multi-group cross section + data set for eventual combination in to an openmc.MGXSLibrary object + (i.e., the library). + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_name : str + Name to apply to the "xsdata" entry produced by this method + nuclide : str + A nuclide name string (e.g., 'U-235'). Defaults to 'total' to + obtain a material-wise macroscopic cross section. + xs_type: {'macro', 'micro'} + Provide the macro or micro cross section in units of cm^-1 or + barns. Defaults to 'macro'. If the Library object is not tallied by + nuclide this will be set to 'macro' regardless. + xs_ids : str + Cross section set identifier. Defaults to '1m'. + order : Scattering order for this dataset entry. Default is -1, + which will force the XSdata object to use whatever the maximum + order available. + + Returns + ------- + xsdata : openmc.XSdata + Multi-Group Cross Section data set object. + + Raises + ------ + ValueError + When the Library object is initialized with insufficient types of + cross sections for the Library. + + See also + -------- + Library.create_mg_library(...) + + """ + + cv.check_type('domain', domain, (openmc.Material, openmc.Cell, + openmc.Cell)) + cv.check_type('domain_name', domain_name, basestring) + cv.check_type('nuclide', nuclide, basestring) + cv.check_value('xs_type', xs_type, ['macro', 'micro']) + cv.check_type('xs_id', xs_id, basestring) + cv.check_type('order', order, Integral) + cv.check_greater_than('order', order, -1, equality=True) + + # Make sure statepoint has been loaded + if self._sp_filename is None: + msg = 'A StatePoint must be loaded before calling ' \ + 'the create_mg_library() function' + raise ValueError(msg) + + # If gathering material-specific data, set the xs_type to macro + if not self.by_nuclide: + xs_type = 'macro' + + # Build & add metadata to XSdata object + name = domain_name + if nuclide is not 'total': + name += '_' + nuclide + name += '.' + xs_id + xsdata = openmc.XSdata(name, self.energy_groups) + xsdata.order = order + if nuclide is not 'total': + xsdata.zaid = self._nuclides[nuclide][0] + xsdata.awr = self._nuclides[nuclide][1] + + # Now get xs data itself + if 'transport' in self.mgxs_types: + mymgxs = self.get_mgxs(domain, 'transport') + xsdata.set_total_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide]) + elif 'total' in self.mgxs_types: + mymgxs = self.get_mgxs(domain, 'total') + xsdata.set_total_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide]) + if 'absorption' in self.mgxs_types: + mymgxs = self.get_mgxs(domain, 'absorption') + xsdata.set_absorption_mgxs(mymgxs, xs_type=xs_type, + nuclide=[nuclide]) + if 'fission' in self.mgxs_types: + mymgxs = self.get_mgxs(domain, 'fission') + xsdata.set_fission_mgxs(mymgxs, xs_type=xs_type, + nuclide=[nuclide]) + if 'kappa-fission' in self.mgxs_types: + mymgxs = self.get_mgxs(domain, 'kappa-fission') + xsdata.set_kappa_fission_mgxs(mymgxs, xs_type=xs_type, + nuclide=[nuclide]) + if 'chi' in self.mgxs_types: + mymgxs = self.get_mgxs(domain, 'chi') + xsdata.set_chi_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide]) + if 'nu-fission' in self.mgxs_types: + mymgxs = self.get_mgxs(domain, 'nu-fission') + xsdata.set_nu_fission_mgxs(mymgxs, xs_type=xs_type, + nuclide=[nuclide]) + # multiplicity requires scatter and nu-scatter + if ((('scatter matrix' in self.mgxs_types) and + ('nu-scatter matrix' in self.mgxs_types))): + scatt_mgxs = self.get_mgxs(domain, 'scatter matrix') + nuscatt_mgxs = self.get_mgxs(domain, 'nu-scatter matrix') + xsdata.set_multiplicity_mgxs(nuscatt_mgxs, scatt_mgxs, + xs_type=xs_type, nuclide=[nuclide]) + using_multiplicity = True + else: + using_multiplicity = False + + if using_multiplicity: + nuscatt_mgxs = self.get_mgxs(domain, 'nu-scatter matrix') + xsdata.set_scatter_mgxs(nuscatt_mgxs, xs_type=xs_type, + nuclide=[nuclide]) + else: + if 'nu-scatter matrix' in self.mgxs_types: + nuscatt_mgxs = self.get_mgxs(domain, 'nu-scatter matrix') + xsdata.set_scatter_mgxs(nuscatt_mgxs, xs_type=xs_type, + nuclide=[nuclide]) + + # Since we are not using multiplicity, then + # scattering multiplication (nu-scatter) must be + # accounted for approximately by using an adjusted + # absorption cross section. + if 'total' in self.mgxs_types: + xsdata._absorption = \ + np.subtract(xsdata.total, + np.sum(xsdata.scatter[0, :, :], axis=1)) + + return xsdata + + def create_mg_library(self, xs_type='macro', domain_names=None, + xs_ids=None): + """Creates an openmc.MGXSLibrary object to contain the MGXS data for the + Multi-Group mode of OpenMC. Parameters ---------- @@ -735,28 +864,18 @@ class Library(object): barns. Defaults to 'macro'. If the Library object is not tallied by nuclide this will be set to 'macro' regardless. domain_names : Iterable of str - List of names to apply to the xsdata entries in the + List of names to apply to the "xsdata" entries in the resultant mgxs data file. Defaults to 'set1', 'set2', ... xs_ids : str or Iterable of str Cross section set identifier (i.e., '71c') for all data sets (if only str) or for each individual one (if iterable of str). Defaults to '1m'. - filename : str - Filename for the pickle file. Defaults to 'mg_cross_sections'. - directory : str - Directory for the pickle file. Defaults to './' (the - current working directory). - return_names : bool - Flag to indicate if the user would like the names of the - materials generated by this function returned with completion. - Defaults to False, indicating that no names will be returned. Returns ------- - mat_names : Iterable of str - Iterable of material names generated during this routine and - applies to the cross section library. Note this is returned if - the return_names parameter is provided. + mgxs_file : openmc.MGXSLibrary + Multi-Group Cross Section File that is ready to be printed to the + file of choice by the user. Raises ------ @@ -774,10 +893,9 @@ class Library(object): # multi-group cross section types self.check_library_for_openmc_mgxs() - # Check the provided parameters cv.check_value('xs_type', xs_type, ['macro', 'micro']) if domain_names is not None: - cv.check_iterable_type('domain_names', filename, basestring) + cv.check_iterable_type('domain_names', domain_names, basestring) if xs_ids is not None: if isinstance(xs_ids, basestring): # If we only have a string lets convert it now to a list @@ -787,25 +905,11 @@ class Library(object): cv.check_iterable_type('xs_ids', xs_ids, basestring) else: xs_ids = ['1m' for i in range(len(self.domains))] - cv.check_type('filename', filename, basestring) - cv.check_type('directory', directory, basestring) - # Make sure statepoint has been loaded - if self._sp_filename is None: - msg = 'A StatePoint must be loaded before calling ' \ - 'the write_mg_library() function' - raise ValueError(msg) - - # Construct the collection of the nuclides to report + # If gathering material-specific data, set the xs_type to macro if not self.by_nuclide: xs_type = 'macro' - # Make directory if it does not exist and build our filename - if not os.path.exists(directory): - os.makedirs(directory) - full_filename = os.path.join(directory, filename + '.xml') - full_filename = full_filename.replace(' ', '-') - # Initialize file mgxs_file = openmc.MGXSLibrary(self.energy_groups) @@ -813,13 +917,10 @@ class Library(object): # support for higher orders are included in openmc.mgxs order = 0 - # Build XSdata objects + # Build storage for our XSdata objects xsdatas = [] - mat_names = {} for i, domain in enumerate(self.domains): - - mat_names[domain.id] = {} if self.by_nuclide: nuclides = list(domain.get_all_nuclides().keys()) else: @@ -832,99 +933,23 @@ class Library(object): name = domain_names[i] if nuclide is not 'total': name += '_' + nuclide - name += '.' + xs_ids[i] - # Store the name - mat_names[domain.id][nuclide] = name - - xsdata = openmc.XSdata(name, self.energy_groups) - xsdata.order = order - if nuclide is not 'total': - xsdata.zaid = self._nuclides[nuclide][0] - xsdata.awr = self._nuclides[nuclide][1] - - nuclide = [nuclide] - # Now get xs data itself - if 'transport' in self.mgxs_types: - mymgxs = self.get_mgxs(domain, 'transport') - xsdata.set_total_mgxs(mymgxs, xs_type=xs_type, - nuclide=nuclide) - elif 'total' in self.mgxs_types: - mymgxs = self.get_mgxs(domain, 'total') - xsdata.set_total_mgxs(mymgxs, xs_type=xs_type, - nuclide=nuclide) - if 'absorption' in self.mgxs_types: - mymgxs = self.get_mgxs(domain, 'absorption') - xsdata.set_absorption_mgxs(mymgxs, xs_type=xs_type, - nuclide=nuclide) - if 'fission' in self.mgxs_types: - mymgxs = self.get_mgxs(domain, 'fission') - xsdata.set_fission_mgxs(mymgxs, xs_type=xs_type, - nuclide=nuclide) - if 'kappa-fission' in self.mgxs_types: - mymgxs = self.get_mgxs(domain, 'kappa-fission') - xsdata.set_kappa_fission_mgxs(mymgxs, xs_type=xs_type, - nuclide=nuclide) - if 'chi' in self.mgxs_types: - mymgxs = self.get_mgxs(domain, 'chi') - xsdata.set_chi_mgxs(mymgxs, xs_type=xs_type, - nuclide=nuclide) - if 'nu-fission' in self.mgxs_types: - mymgxs = self.get_mgxs(domain, 'nu-fission') - xsdata.set_nu_fission_mgxs(mymgxs, xs_type=xs_type, - nuclide=nuclide) - # multiplicity requires scatter and nu-scatter - if ((('scatter matrix' in self.mgxs_types) and - ('nu-scatter matrix' in self.mgxs_types))): - scatt_mgxs = self.get_mgxs(domain, - 'scatter matrix') - nuscatt_mgxs = self.get_mgxs(domain, - 'nu-scatter matrix') - xsdata.set_multiplicity_mgxs(nuscatt_mgxs, scatt_mgxs, - xs_type=xs_type, - nuclide=nuclide) - using_multiplicity = True - else: - using_multiplicity = False - - if using_multiplicity: - nuscatt_mgxs = self.get_mgxs(domain, - 'nu-scatter matrix') - xsdata.set_scatter_mgxs(nuscatt_mgxs, xs_type=xs_type, - nuclide=nuclide) - else: - if 'nu-scatter matrix' in self.mgxs_types: - nuscatt_mgxs = self.get_mgxs(domain, - 'nu-scatter matrix') - xsdata.set_scatter_mgxs(nuscatt_mgxs, xs_type=xs_type, - nuclide=nuclide) - - # Since we are not using multiplicity, then - # scattering multiplication (nu-scatter) must be - # accounted for approximately by using an adjusted - # absorption cross section. - if 'total' in self.mgxs_types: - xsdata._absorption = \ - np.subtract(xsdata.total, - np.sum(xsdata.scatter[0, :, :], - axis=1)) + xsdata = self.get_xsdata(domain, name, nuclide=nuclide, + xs_type=xs_type, xs_id=xs_ids[i], + order=order) xsdatas.append(xsdata) # Add XSdatas to file mgxs_file.add_xsdatas(xsdatas) - # Finally, write the file - mgxs_file.export_to_xml(full_filename) - - if return_names: - return mat_names + return mgxs_file def check_library_for_openmc_mgxs(self): - """This routine will check the MGXS Types within the provided - Library to ensure the data types provided can be used to create - a MGXS Library for OpenMC's Multi-Group mode via the - `Library.write_mg_library` method. + """This routine will check the MGXS Types within a Library + to ensure the MGXS types provided can be used to create + a MGXS Library for OpenMC's Multi-Group mode. + The rules to check include: - Either total or transport should be present. - Both can be available if one wants, but we should @@ -943,7 +968,7 @@ class Library(object): See also -------- - Library.write_mg_library(...) + Library.create_mg_library(...) """ diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 29d0bfdd7d..e59ef2d61d 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -420,7 +420,8 @@ class XSdata(object): enable = tabular_legendre['enable'] check_type('enable', enable, bool) else: - msg = 'enable must be provided in tabular_legendre' + msg = 'The tabular_legendre dict must include a value keyed by ' \ + '"enable"' raise ValueError(msg) if 'num_points' in tabular_legendre: num_points = tabular_legendre['num_points'] @@ -448,217 +449,77 @@ class XSdata(object): @total.setter def total(self, total): - """This method sets the total cross section by performing a - deep-copy of the provided ndarray. If the angular - representation is "isotropic" the shape of the input array - must be the number of energy groups. If the angular - representation is "angle" then the shape of the input - array must be the number of polar angles, number azimuthal - angles and energy groups. - - Parameters - ---------- - total: ndarray - Array of group-wise cross sections to apply - - """ - - # check we have a numpy list check_type('total', total, np.ndarray, expected_iter_type=Real) - # Check the dimensions of the data check_value('total shape', total.shape, self.vector_shape) - self._total = np.copy(total) + self._total = total @absorption.setter def absorption(self, absorption): - """This method sets the absorption cross section by performing a - deep-copy of the provided ndarray. If the angular - representation is "isotropic" the shape of the input array - must be the number of energy groups. If the angular - representation is "angle" then the shape of the input - array must be the number of polar angles, number azimuthal - angles and energy groups. - - Parameters - ---------- - absorption: ndarray - Array of group-wise cross sections to apply - - """ - - # check we have a numpy list check_type('absorption', absorption, np.ndarray, expected_iter_type=Real) - # Check the dimensions of the data check_value('absorption shape', absorption.shape, self.vector_shape) - self._absorption = np.copy(absorption) + self._absorption = absorption @fission.setter def fission(self, fission): - """This method sets the fission cross section by performing a - deep-copy of the provided ndarray. If the angular - representation is "isotropic" the shape of the input array - must be the number of energy groups. If the angular - representation is "angle" then the shape of the input - array must be the number of polar angles, number azimuthal - angles and energy groups. - - Parameters - ---------- - fission: ndarray - Array of group-wise cross sections to apply - - """ - - # check we have a numpy list check_type('fission', fission, np.ndarray, expected_iter_type=Real) - # Check the dimensions of the data check_value('fission shape', fission.shape, self.vector_shape) - self._fission = np.copy(fission) + self._fission = fission if np.sum(self._fission) > 0.0: self._fissionable = True @kappa_fission.setter def kappa_fission(self, kappa_fission): - """This method sets the kappa_fission cross section by performing a - deep-copy of the provided ndarray. If the angular - representation is "isotropic" the shape of the input array - must be the number of energy groups. If the angular - representation is "angle" then the shape of the input - array must be the number of polar angles, number azimuthal - angles and energy groups. - - Parameters - ---------- - kappa_fission: ndarray - Array of group-wise cross sections to apply - - """ - - # check we have a numpy list - check_type('kappa_fission', fission, np.ndarray, + check_type('kappa_fission', kappa_fission, np.ndarray, expected_iter_type=Real) - # Check the dimensions of the data check_value('kappa fission shape', kappa_fission.shape, self.vector_shape) - self._kappa_fission = np.copy(fission) + self._kappa_fission = kappa_fission if np.sum(self._kappa_fission) > 0.0: self._fissionable = True @chi.setter def chi(self, chi): - """This method sets the chi cross section by performing a - deep-copy of the provided ndarray. If the angular - representation is "isotropic" the shape of the input array - must be the number of energy groups. If the angular - representation is "angle" then the shape of the input - array must be the number of polar angles, number azimuthal - angles and energy groups. - - Parameters - ---------- - chi: ndarray - Array of group-wise chi values to apply - - """ - if self._use_chi is not None: if not self._use_chi: msg = 'Providing chi when nu_fission already provided as a' \ 'matrix' raise ValueError(msg) - # check we have a numpy list check_type('chi', chi, np.ndarray, expected_iter_type=Real) - # Check the dimensions of the data check_value('chi shape', chi.shape, self.vector_shape) - self._chi = np.copy(chi) + self._chi = chi if self._use_chi is not None: self._use_chi = True @scatter.setter def scatter(self, scatter): - """This method sets the scattering matrix cross sections - by performing a deep-copy of the provided ndarray. - If the angular representation is "isotropic" the shape of - the input array must be the number of scattering orders, the - number of energy groups, and the number of energy groups. If - the angular representation is "angle" then the shape of the input - array must be the number of polar angles, number azimuthal - angles, number of scattering orders, energy groups, and energy groups. - - Parameters - ---------- - scatter : ndarrays - Array of cross sections to apply - - """ - - # check we have a numpy list check_type('scatter', scatter, np.ndarray, expected_iter_type=Real, max_depth=len(scatter.shape)) - # Check the dimensions of the data check_value('scatter shape', scatter.shape, self.pn_matrix_shape) - self._scatter = np.copy(scatter) + self._scatter = scatter @multiplicity.setter def multiplicity(self, multiplicity): - """This method sets the scattering multiplicity matrix cross sections - by performing a deep-copy of the provided ndarray. Multiplicity, - in OpenMC parlance, is a factor used to account for the production - of neutrons introduced by scattering multiplication reactions, i.e., - (n,xn) events. In this sense, the multiplication matrix is simply - defined as the ratio of the nu-scatter and scatter matrices. - If the angular representation is "isotropic" the shape of - the input array must be the number of energy groups and the number - of energy groups. If the angular representation is "angle" then the - shape of the input array must be the number of polar angles, - number azimuthal angles, number of scattering orders, energy groups, - and energy groups. - - Parameters - ---------- - multiplicity : ndarrays - Array of scattering multiplications to apply - - """ - - # check we have a numpy list check_type('multiplicity', multiplicity, np.ndarray, expected_iter_type=Real, max_depth=len(multiplicity.shape)) - # Check the dimensions of the data check_value('multiplicity shape', multiplicity.shape, self.matrix_shape) - self._multiplicity = np.copy(multiplicity) + self._multiplicity = multiplicity @nu_fission.setter def nu_fission(self, nu_fission): - """This method sets the nu_fission cross section by performing a - deep-copy of the provided ndarray. If the angular - representation is "isotropic" the shape of the input array - must be the number of energy groups. If the angular - representation is "angle" then the shape of the input - array must be the number of polar angles, number azimuthal - angles and energy groups. - - Parameters - ---------- - nu_fission: ndarray - Array of group-wise cross sections to apply - - """ - # The NuFissionXS class does not have the capability to produce # a fission matrix and therefore if this path is pursued, we know # chi must be used. @@ -669,12 +530,10 @@ class XSdata(object): # chi already has been set. If not, we just check that this is OK # and set the use_chi flag accordingly - # First, check we have a numpy list check_type('nu_fission', nu_fission, np.ndarray, expected_iter_type=Real, max_depth=len(nu_fission.shape)) if self._use_chi is not None: - # Check the dimensions of the data if self._use_chi: check_value('nu_fission shape', nu_fission.shape, self.vector_shape) @@ -682,16 +541,16 @@ class XSdata(object): check_value('nu_fission shape', nu_fission.shape, self.matrix_shape) else: - # Make sure the dimensions are at least right check_value('nu_fission shape', nu_fission.shape, (self.vector_shape, self.matrix_shape)) - # Then find out which one we have so we can set use_chi + # Find out if we have a nu-fission matrix or vector + # and set a flag to allow other methods to check this later. if nu_fission.shape == self.vector_shape: self._use_chi = True else: self._use_chi = False - self._nu_fission = np.copy(nu_fission) + self._nu_fission = nu_fission if np.sum(self._nu_fission) > 0.0: self._fissionable = True @@ -716,11 +575,7 @@ class XSdata(object): check_type('total', total, (openmc.mgxs.TotalXS, openmc.mgxs.TransportXS)) - - # Make sure passed MGXS object contains correct group structure check_value('energy_groups', total.energy_groups, [self.energy_groups]) - - # Make sure passed MGXS object has correct domain type check_value('domain_type', total.domain_type, ['universe', 'cell', 'material']) @@ -750,12 +605,8 @@ class XSdata(object): """ check_type('absorption', absorption, openmc.mgxs.AbsorptionXS) - - # Make sure passed MGXS object contains correct group structure check_value('energy_groups', absorption.energy_groups, [self.energy_groups]) - - # Make sure passed MGXS object has correct domain type check_value('domain_type', absorption.domain_type, ['universe', 'cell', 'material']) @@ -785,12 +636,8 @@ class XSdata(object): """ check_type('fission', fission, openmc.mgxs.FissionXS) - - # Make sure passed MGXS object contains correct group structure check_value('energy_groups', fission.energy_groups, [self.energy_groups]) - - # Make sure passed MGXS object has correct domain type check_value('domain_type', fission.domain_type, ['universe', 'cell', 'material']) @@ -824,12 +671,8 @@ class XSdata(object): # a fission matrix and therefore if this path is pursued, we know # chi must be used. check_type('nu_fission', nu_fission, openmc.mgxs.NuFissionXS) - - # Make sure passed MGXS object contains correct group structure check_value('energy_groups', nu_fission.energy_groups, [self.energy_groups]) - - # Make sure passed MGXS object has correct domain type check_value('domain_type', nu_fission.domain_type, ['universe', 'cell', 'material']) @@ -866,12 +709,8 @@ class XSdata(object): """ check_type('k_fission', k_fission, openmc.mgxs.KappaFissionXS) - - # Make sure passed MGXS object contains correct group structure check_value('energy_groups', k_fission.energy_groups, [self.energy_groups]) - - # Make sure passed MGXS object has correct domain type check_value('domain_type', k_fission.domain_type, ['universe', 'cell', 'material']) @@ -906,11 +745,7 @@ class XSdata(object): raise ValueError(msg) check_type('chi', chi, openmc.mgxs.Chi) - - # Make sure passed MGXS object contains correct group structure check_value('energy_groups', chi.energy_groups, [self.energy_groups]) - - # Make sure passed MGXS object has correct domain type check_value('domain_type', chi.domain_type, ['universe', 'cell', 'material']) @@ -944,12 +779,8 @@ class XSdata(object): """ check_type('scatter', scatter, openmc.mgxs.ScatterMatrixXS) - - # Make sure passed MGXS object contains correct group structure check_value('energy_groups', scatter.energy_groups, [self.energy_groups]) - - # Make sure passed MGXS object has correct domain type check_value('domain_type', scatter.domain_type, ['universe', 'cell', 'material']) @@ -990,14 +821,10 @@ class XSdata(object): check_type('nuscatter', nuscatter, openmc.mgxs.NuScatterMatrixXS) check_type('scatter', scatter, openmc.mgxs.ScatterMatrixXS) - - # Make sure passed MGXS object contains correct group structure check_value('energy_groups', nuscatter.energy_groups, [self.energy_groups]) check_value('energy_groups', scatter.energy_groups, [self.energy_groups]) - - # Make sure passed MGXS object has correct domain type check_value('domain_type', nuscatter.domain_type, ['universe', 'cell', 'material']) check_value('domain_type', scatter.domain_type, @@ -1153,14 +980,10 @@ class MGXSLibrary(object): MGXS information to add """ - - # Check the type if not isinstance(xsdata, XSdata): msg = 'Unable to add a non-XSdata "{0}" to the ' \ 'MGXSLibrary instance'.format(xsdata) raise ValueError(msg) - - # Make sure energy groups match. if xsdata.energy_groups != self._energy_groups: msg = 'Energy groups of XSdata do not match that of MGXSLibrary.' raise ValueError(msg) @@ -1176,8 +999,6 @@ class MGXSLibrary(object): XSdatas to add """ - - # Check we have an iterable of XSdatas check_iterable_type('xsdatas', xsdatas, XSdata) for xsdata in xsdatas: @@ -1222,14 +1043,14 @@ class MGXSLibrary(object): xml_element = xsdata._get_xsdata_xml() self._cross_sections_file.append(xml_element) - def export_to_xml(self, filename='mg_cross_sections.xml'): - """Create an mg_cross_sections.xml file that can be used for a + def export_to_xml(self, filename='mgxs.xml'): + """Create an mgxs.xml file that can be used for a simulation. Parameters ---------- filename : str, optional - filename of file, default is mg_cross_sections.xml + filename of file, default is mgxs.xml """ diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 22eff595cd..24986be876 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -153,7 +153,7 @@ contains else call get_environment_variable("OPENMC_MG_CROSS_SECTIONS", env_variable) if (len_trim(env_variable) == 0) then - call fatal_error("No cross_sections.xml file was specified in & + call fatal_error("No mgxs.xml file was specified in & &settings.xml or in the OPENMC_MG_CROSS_SECTIONS environment & &variable. OpenMC needs such a file to identify where to & &find the cross section libraries. Please consult the user's & @@ -4537,24 +4537,24 @@ contains subroutine read_mg_cross_sections_xml() integer :: i ! loop index - logical :: file_exists ! does cross_sections.xml exist? + logical :: file_exists ! does mgxs.xml exist? type(XsListing), pointer :: listing => null() type(Node), pointer :: doc => null() type(Node), pointer :: node_xsdata => null() type(NodeList), pointer :: node_xsdata_list => null() real(8), allocatable :: rev_energy_bins(:) - ! Check if cross_sections.xml exists + ! Check if mgxs.xml exists inquire(FILE=path_cross_sections, EXIST=file_exists) if (.not. file_exists) then - ! Could not find cross_sections.xml file + ! Could not find mgxs.xml file call fatal_error("Cross sections XML file '" & // trim(path_cross_sections) // "' does not exist!") end if call write_message("Reading cross sections XML file...", 5) - ! Parse cross_sections.xml file + ! Parse mgxs.xml file call open_xmldoc(doc, path_cross_sections) if (check_for_node(doc, "groups")) then @@ -4602,7 +4602,7 @@ contains ! Allocate xs_listings array if (n_listings == 0) then call fatal_error("At least one element must be present in & - &cross_sections.xml file!") + &mgxs.xml file!") else allocate(xs_listings(n_listings)) end if From 86cf42d7a63ab65db19986787510fe670a88e955 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 14 May 2016 07:58:10 -0400 Subject: [PATCH 540/650] Clarifications in example notebook --- .../pythonapi/examples/mgxs-part-iv.ipynb | 69 +++++++++++-------- 1 file changed, 39 insertions(+), 30 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb index d03db2cce6..b81e8f06b2 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb @@ -433,7 +433,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -520,9 +520,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now we must specify the type of domain over which we would like the `Library` to compute multi-group cross sections. The domain type corresponds to the type of tally filter to be used in the tallies created to compute multi-group cross sections. At the present time, the `Library` supports \"material,\" \"cell,\" and \"universe\" domain types. We will use a \"cell\" domain type here to compute cross sections in each of the cells in the fuel assembly geometry.\n", + "Now we must specify the type of domain over which we would like the `Library` to compute multi-group cross sections. The domain type corresponds to the type of tally filter to be used in the tallies created to compute multi-group cross sections. At the present time, the `Library` supports \"material,\" \"cell,\" and \"universe\" domain types. In this simple example, we wish to compute multi-group cross sections only for each material andtherefore will use a \"material\" domain type.\n", "\n", - "**Note:** By default, the `Library` class will instantiate `MGXS` objects for each and every domain (material, cell or universe) in the geometry of interest. However, one may specify a subset of these domains to the `Library.domains` property. In our this simple example, we wish to compute multi-group cross sections only for each material." + "**Note:** By default, the `Library` class will instantiate `MGXS` objects for each and every domain (material, cell or universe) in the geometry of interest. However, one may specify a subset of these domains to the `Library.domains` property." ] }, { @@ -696,7 +696,7 @@ " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", " Git SHA1: c779ca42c41a062a6a813e03f2add2d182ca9190\n", - " Date/Time: 2016-05-13 22:29:41\n", + " Date/Time: 2016-05-14 07:56:31\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -783,20 +783,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 1.4550E+00 seconds\n", - " Reading cross sections = 1.1400E+00 seconds\n", - " Total time in simulation = 1.9150E+01 seconds\n", - " Time in transport only = 1.9021E+01 seconds\n", - " Time in inactive batches = 2.1570E+00 seconds\n", - " Time in active batches = 1.6993E+01 seconds\n", - " Time synchronizing fission bank = 7.0000E-03 seconds\n", + " Total time for initialization = 1.4930E+00 seconds\n", + " Reading cross sections = 1.1850E+00 seconds\n", + " Total time in simulation = 1.9053E+01 seconds\n", + " Time in transport only = 1.9002E+01 seconds\n", + " Time in inactive batches = 2.0890E+00 seconds\n", + " Time in active batches = 1.6964E+01 seconds\n", + " Time synchronizing fission bank = 6.0000E-03 seconds\n", " Sampling source sites = 5.0000E-03 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 2.0614E+01 seconds\n", - " Calculation Rate (inactive) = 23180.3 neutrons/second\n", - " Calculation Rate (active) = 11769.6 neutrons/second\n", + " Total time elapsed = 2.0556E+01 seconds\n", + " Calculation Rate (inactive) = 23934.9 neutrons/second\n", + " Calculation Rate (active) = 11789.7 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -960,7 +960,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now we will need to recreate similar xml files from above, beginning with materials.xml. Similar to how continuous-energy cross section libraries are named, the `openmc.Macroscopic` quantities below can either have their `xs_id` included (i.e., `'.2m'`), or this can be left off but the `default_xs` parameter of the materials file be used instead to be set to the `'xs_id'` of interest (which is `'.2m'` in this case as defined in the previous cell)." + "OpenMC's multi-group mode uses the same input files as does the continuous-energy mode (materials, geometry, settings, plots ,and tallies file). Differences would include the use of a flag to tell the code to use multi-group transport, a location of the multi-group library file, and any changes needed in the materials.xml and geometry.xml files to re-define materials as necessary (for example, if using a macroscopic cross section library instead of individual microscopic nuclide cross sections as is done in continuous-energy, or if multiple cross sections exist for the same material due to the material existing in varied spectral regions).\n", + "\n", + "Since this example is using material-wise macroscopic cross sections without considering that the neutron energy spectra and thus cross sections may be changing in space, we only need to modify the materials.xml and settings.xml files. If the material names and ids are not otherwise changed, then the geometry.xml file does not need to be modified from its continuous-energy form. The tallies.xml file will be left untouched as it currently contains the tally types that we will need to perform our comparison. \n", + "\n", + "First we will create the new materials.xml file. Continuous-energy cross section nuclidic data sets are named with the nuclide name followed by a cross section identifier. For example, the data for hydrogen is accessed in OpenMC by the name `H-1.71c`. The cross-section identifier (in this case, `71c`) can be used to distinguish between different variants of `H-1` data, such as for different evaluations or temperatures. OpenMC multi-group libraries use the same convention of a name followed by a xs identifier. We will use a cross section identifier here of `2m`. Similar to how continuous-energy cross section libraries are named, the `openmc.Macroscopic` quantities below can either have their `xs_id` included (i.e., `'fuel.2m'`). An alternative is to leave this extension off and simply change the `default_xs` parameter to `.2m`." ] }, { @@ -1067,7 +1071,7 @@ " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", " Git SHA1: c779ca42c41a062a6a813e03f2add2d182ca9190\n", - " Date/Time: 2016-05-13 22:30:02\n", + " Date/Time: 2016-05-14 07:56:52\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -1151,20 +1155,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.7000E-02 seconds\n", - " Reading cross sections = 4.0000E-03 seconds\n", - " Total time in simulation = 1.2661E+01 seconds\n", - " Time in transport only = 1.2600E+01 seconds\n", - " Time in inactive batches = 1.1370E+00 seconds\n", - " Time in active batches = 1.1524E+01 seconds\n", + " Total time for initialization = 4.0000E-02 seconds\n", + " Reading cross sections = 6.0000E-03 seconds\n", + " Total time in simulation = 1.2540E+01 seconds\n", + " Time in transport only = 1.2496E+01 seconds\n", + " Time in inactive batches = 1.1110E+00 seconds\n", + " Time in active batches = 1.1429E+01 seconds\n", " Time synchronizing fission bank = 7.0000E-03 seconds\n", " Sampling source sites = 5.0000E-03 seconds\n", " SEND/RECV source sites = 2.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.2707E+01 seconds\n", - " Calculation Rate (inactive) = 43975.4 neutrons/second\n", - " Calculation Rate (active) = 17355.1 neutrons/second\n", + " Total time elapsed = 1.2589E+01 seconds\n", + " Calculation Rate (inactive) = 45004.5 neutrons/second\n", + " Calculation Rate (active) = 17499.3 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1351,7 +1355,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 40, @@ -1360,9 +1364,9 @@ }, { "data": { - "image/png": "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\nMIunubFhPwAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAADDCAYAAACS2+oqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXmcXtP9x9/fLJZEQoQgIhFCgrSIJMRSY4tSKm0TO0Ub\nuqi1FFWG+lmqtVVVi2paS1BLKCVaprWTBLXUVhHSSJBIQkK2+f7+uHfiycw8z/dOZp48Mzef9+s1\nr3meez73nO9z7vd+77nnnnOPuTtCCCHaPu0qbYAQQoiWQQFdCCFyggK6EELkBAV0IYTICQroQgiR\nExTQhRAiJ7S6gG5mL5vZVyptx8qMmT1gZkc0Y//fmtlPW9KmlREzqzWzTUqk5/ZckQ8uJ+4e/gGH\nAs8BnwD/A+4Hdsqyb5DvjcD5zc2nkn/pb1gAzE3/PgGer7RdGew+F1hYYPNc4MeVtqsJNs8CHgd2\naML+jwLHrAA73wE+B9aut/0FoBbonTGfJcAmBX7WpHMF6AicA7yWHuP30nN3r0ofy0aOp3ywBf7C\nFrqZnQJcBlwA9AB6A9cAX4/2XYm4xN27pn9d3H3bli7AzNq3dJ7A2AKbu7r7L8tQRksz1t27AusA\nNcAdlTWnURyYDBxSt8HMBgKrpWlZsWbacSewP3A40A3oC1wJ7NtoYeXxsQj5YEsSXE26klw5v1lC\nswpwBUnLfSpwOdAxTduVpFVwCjAj1RyVpo0mudJ9TnK1G5dunwzsXnA1vA0Yk2peAgYVlF1L2oJJ\nvy/TiknLeBP4CLgH2CDd3ifdt11jV05gU5IDNRv4ALi1xO8v2nIqKOdIYEqa11kF6QacAbwFfAiM\nBdaqt+8x6b416fYjSVqAHwJn19UXsB4wD+hWkP92aZnti7Q0/hS1IkrVRXqsZ6RpLwBbNuU4FBzD\n44A3gJnA1UHr6E8F37cgacV2T7+vBdyX2jkz/dwzTbsAWAzMT33pqnT7AGB8qv8PMKog/32BV1L9\ne8ApGVthk4GzgGcLtl0KnJna27ux1hrwbeCx+v5NhnOlERv2TP1hgwy2ng68CHxG0g27RWrbxyTn\n3P6N+UYJm38E/Dc9Dr/Iejzlg833waiFPgxYNa2AYpwNDAW+DGydfj67IH19oAvQE/gu8BszW9Pd\nrwNuJjngXd39gCL57w/cAqyZVs5vCtKKtnbMbHfgQmAksAHwLknADPcFfg485O5rAb2AX5fQZmEn\nYDOSk+wcM+ufbj+R5E5nF5L6+Zjk7qeQr5Ac8L3NbAuS338IyW9aM90Pd59BchIcWLDvYSTOv6QZ\ntjdaF2Y2HNgZ6JemHUTikMuQ4TgAfI3k4rMNcGCad0nMbBWSYDKTpN4gCUZ/ADYiuZOcT+ov7n42\n8BhwfOpvJ5hZJ5IT6SaS1tYhwDVpPQNcD4z2pDU2EHgksquAp4EuZtbfzNqRHJebiFvdDfyyCedK\nIXsAz7j7+xm0BwP7kASjdsC9wIPAusAJwM1mtlkTbB4BDEr/DjCzYzLYUAr5YEYfjAJ6d+Ajd68t\noTkUOM/dZ7r7TOA8oPBhxkLg5+6+xN3/BnwK9G8kn2I87u4PeXK5+jPJhaOOUifHocAN7v6iuy8i\naR0NM7PeGcpcBPQxsw3dfaG7PxnoTzOzWWb2cfr/xoI0B6rTfP5N0hLaOk07Fvipu7+f2ng+MDIN\nAHX7nuvun7n7AhKHvNfdn3L3xST9o4X8ibTu0zwOIamzYhxUz+71m1AXi0gu1Fuambn76+lFpT5Z\njsNF7v6Ju79HclHaJrKZ5ET5DjCyzj/dfZa73+3uC9x9HnARyQWxGPsBk939T57wAkk3xcg0fSGw\nlZl1cfc5aXpT+DPJCb8XST/2tCbu3xzWAabXfTGzbulxnm1mn9XTXunu01If2wHo7O6XuPtid38U\n+CsF3UcZuDitr6kkd++l9pUPtqAPRgF9JrBOQYBpjJ4kV7w6pqTbluZR74IwH1gjKLeQ6QWf5wOr\nBfYU2jWl7ktauTOBDTPsexpJ3TxrZi+Z2dEAZnammX1iZnPNrLAlfam7r+3u3dL/R9fLr9DJCn9/\nH+Du1JFnAa+SOOl6Bfqp9X7TewW/6TOWbZGMA7Yws42B4cBsd59Q4nfeVs/u6Y1oGq2L9ES/mqT1\nMd3MrjWzxo5rluNQrH6K2kzyPOdlYHBdgpmtbma/M7N3zGw28E9gLTMrduHvA+xQV/9m9jHJyV9X\n/98iablNMbNHzWyHEnY1xk1pfkeRXGzLRuqXdb7Zi6SON6hLd/eP3b0bSSt0lXq7F/WxlClkO28a\ny69+PKiPfLAFfTAKjE+R9NuNKKH5X2pUoYFZWyJNeUDUGPOBTgXfC6/u0wrtMrPOJHccU0n6Fim2\nr7t/4O7HuvuGwPdIboE2cfeL/IuHNz9opu2QXAj3SR25zqk717tNLqyj90luOet+0+rpb6qzewFw\nO8lDsMMp3TrPRLG6SNOudvfBwFYkd12nNZJFqePQHLtmpfZUm1md859K0rU1JL0Fr2sZ1Z1M9f3t\nPZJnE4X139Xdj0/LmOjuI0i6HsaR1G1TbHyXpI96H+CuRiTzKO6/DbILyupS4JtTgX8AQ8yssWBa\nP7gU5j2NpLugkN4k53lWmwv3700z70zkg9l9sGRAd/e5JA8BfmNmB6RXnw5mto+ZXZzKxgJnm9k6\nZrYO8DOyB5IZJA99mkKhMz4PHGpm7czsqyQPYeu4BTjazL5sZquS9KE97e7vuftHJA56eLrvMSQP\nXpICzEaaWd3VezbJQ5Pl7Ycu1S30O+DCuls/M1vXzApHD9Xf9y/A/ma2g5l1JOneqs+fSVqE+5O0\nEJtFsbows8FmNtTMOpA8TPucxuuo6HForm3u/jpJX+9P0k1dUlvmmtnaQHW9Xer721+Bzc3s8NSv\nO6a/a0D6+VAz6+rJM4hPSB5oNZVjSB5c1u/mgOQh3jfT86ofye17MZp0rrj7wyRdB/ekx6ljeqyG\nUfri8Awwz8xOT+ukiqRb4NYm2Hyama1lZhuRPCeq31/dJOSD2X0w7Lpw98tJRqmcTfLk9l3gB3zx\noPQCYAJQ1z88Afi/UlkWfL6BpH9olpnd1Uh6tP9JJA8VPybpp7u7wO5HSC4ud5EE774kD3/qGE3y\ndP8jkifVTxSkDQGeMbO56e88wd2nUJzT01vduelt7wdF7K3//UqSq+54M5sDPEnyULnRfd39VZIR\nBLeRtDrmkByTBQWaJ0kcflLaQlweCsstVhddgetIxuJOJqnHBkPOMhyHUvWThV8Co9PGxBUkrceP\nSOrygXraK4FRZjbTzK5w909JuqYOJqnPacDFfNElcQQwOb11PpbkIXMWlv4Gd5/s7pMaSyMZobGI\npFvxRhpegJt7rnyTJGDcRHKOvE1ynuxdpAzSPuavk4yu+IikS+MId38zo82Q+PREYBLJQIY/BHY2\nhnwwoUk+aO7N7fUQlSK9dZxN8pR/SsH2fwA3u/vynEhCLDdmVkvij29X2paVkVY39V+Uxsz2S293\nOwO/Av5dL5gPAbYlacULIVYiFNDbHgeQ3JZNJen3X3rraGZ/JBnTemL6JF+IFY1u+SuIulyEECIn\nqIUuhBA5oUM5Mk2HEF5BcsG4wd0vaUSjWwNRVty9uS+3aoB8W7QGivl2i3e5WDKL8w2Sd0lMI3nt\n7sHu/lo9nfOTgrIfr4adq5fNbEyGAi/PoMkyafmlDJoJ9erqnmoYUb3stqPjuQqX114Qak5+49qS\n6VdtPjrM44RHrmu4cUw1fLt66ddee7zZUFOPF5a+qaA41/PdULOQVUPN7/y4BtvmVl9F1+oTln7/\n37OlXiuSsoO1eEBvkm/zesGWX5OMNq3jlgyl1X+rQ0N29YdCzVB/NtRcNedHDbYtvvgSOpzxk6Xf\nFy2oP7m0IWt1nx1qPnq5/pylhuy2Tf2Rfg25fZlXFiVcWr2A06q/8LEXvNTs/YS9n3gs1PBQHCNv\nOz9++exB7e6rt6WaBsPUVyudx/A9Yfxfi/t2ObpchgJvuvuUdEzrWJIHeUK0deTbolVTjoC+Icu+\nC2IqTXsPhBCtFfm2aNWUow+9sVuBxu9ZHq/+4vOqa5XBlDIzoKrSFjSdrasqbUGTWbVq+1g0sQYm\n1ZTblOy+vcwbl7uUw5ay0m7nnSptQpPZsaoS63M0h6pssiU1UFsDwFuvl1SWJaBPJXkhTx29KPZy\nnvp95m2NthjQt6mqtAVNJlNA364q+avjhsZec9Nssvs2Dful2xLtdt650iY0mZ2qyjLGo4xUZZO1\nr0r+gH794e03i/t2ObpcngP6mVkfS14AfzDJC/OFaOvIt0WrpsUvae6+xMyOJ5mxWDe06z8tXY4Q\nKxr5tmjtlOUexd0fpGmrEgnRJpBvi9ZMxab+m5mzcVD2nrFt9vP5ocav7hRqlhwcP1BZbf14nG2X\nteaGmu07PBNqtggafld+cGKYx4k9rgw1VfZoqHmTzUPNi8usDNg4TzEs1MymW6jZIMMymf9uN6ws\nE4uykMyxKLFq44AMmcRDzOlz62uhZhueDzXD/KlQk2UOwZa8GmpmEw9+OJOLQs1Hp8bj2cdeFo8o\nfdR3CzXXfv3kUHPAvbeGmnGdDg01HFQ6efhAGH/aih2HLoQQogIooAshRE5QQBdCiJyggC6EEDlB\nAV0IIXKCAroQQuQEBXQhhMgJCuhCCJETKvs2m0uD9AVxFsf1KL0QBMB6F/441FiXeA7KgtPjt+ZV\n8WSo6elF3udUwC/5acn0/j2ODPMYyMuhZphPCjVPs22oOfmy+Djcdeo+oeYXnB5q9rO/hpp/h4oy\n06+EP03IsP+d8aS6x9gl1Fztx4ea07kq1Pjv47bficdeHGquynB837MzQk3NL6tCzSiPX7Mz6sP4\ndx147+2hZvdJ8eSsvvNeCTWTv7NVqCmFWuhCCJETFNCFECInKKALIUROUEAXQoicoIAuhBA5QQFd\nCCFyggK6EELkhMoucPFcUPYasW2L140Xpmi39pLYoAzjbN8/Nn45/8l2eag5yv8YavZ+5F8l04/d\nI1684hKPx/yuPTQe7O9rhhLs4biO/Ya4jvf87n2hZhbdQ82LtmNlF7gYWXyBiz63xwtTDPZ4sPod\ndnioeS7DwiODX47HR+8+8P5Q08nixWZ29sdDzTiLF6a4hUNCzUse//b+/nqoGWCTQ80RXB9qbr7l\nu6Gm76GlFwnZhc78qV1fLXAhhBB5RwFdCCFyggK6EELkBAV0IYTICQroQgiRExTQhRAiJyigCyFE\nTlBAF0KInFDRBS6e2670y9yH/C+eXNFuVjz5aEi3x0LNhP6hhA3+NjvUjN366DijR2IJZ5ZO7jh1\nUZjFgdwWanafEE/i+OmjoYTaC+MJXhPPil/e/3uOzaA5LtS8GCrKy2rXzSqatqvVhPtvZm+Fmr/5\nH0LNTXZSqHly4I6hZsqkAaFm2KDYsc+YekWomdZrg1AzeOHEULPHKv8INdfXxpN92r8Vx5iTB8wI\nNdse+kSo+dB6lExfHIRstdCFECInKKALIUROUEAXQoicoIAuhBA5QQFdCCFyggK6EELkBAV0IYTI\nCQroQgiRE8oyscjM3gHmALXAIncf2pjuYBtbMp9JPbfJUFjxlWHqGMploeaz7eLFbVZbI8PKRxPj\na+Sth8WTeQ45/O6S6Z/6dWEeD38wItRYbVx/fk/8m544c9tQszPxRDH+GZe1/a7PxPmUiay+3XPN\n94vmsb3H9n+fG0PNh9Y11HT3maHmZo4JNV8bdFeoOSXDeWa9Yn872uIJaG923DzU3EG8ohNjjwwl\ni8fHYdLGxLHhs/nx5LsLO59RMr0fm3FLifRyzRStBarc/eMy5S9EpZBvi1ZLubpcrIx5C1FJ5Nui\n1VIux3TgITN7zsxGl6kMISqBfFu0WsrV5bKju083s3WBh83sP+4ZlvsWovUj3xatlrIEdHefnv7/\n0MzuBoYCDZx+VvU1Sz+vXjWE1auGlMMcsRLwcs1MXqkp/obDlkK+LVY0U2qmMKXmXQBe5pWS2hYP\n6GbWCWjn7p+aWWdgOHBeY9q1q3/Q0sWLlZSBVd0ZWNV96fc7zotfP9tU5NuiEvSp6kOfqj5AMspl\n3Hn3FtWWo4W+HnC3mXma/83uPr4M5QixopFvi1ZNiwd0d58MZBhALkTbQr4tWjsVXbHoTC4qmT6l\n3cZhHtf6laGmh30Uat5Zo3eomeCjQs0RnUMJh7wzLtS82K/0JITtauMBFr/rcUSo+d5p8WQHhseS\nkXZnqJn+TIay4rkyjLzt/lhU4ZGFj9kuRdP25qE4A49XvhrMxqHmemI/GfJefFy69I5XR+rL26Hm\ndo8n1V3Jr0PN6jY/1Pgj8e869rCrQs0uh8UrnnXkG6Hm804HhZpZdC+Z/gldSqZrPK0QQuQEBXQh\nhMgJCuhCCJETFNCFECInKKALIUROUEAXQoicoIAuhBA5QQFdCCFygrl7ZQo2cxtbepWPxVvF856G\nDXwk1NxDvHLPjzJMZvgWfwk1XfyTULPnvEdDzaonl06/+7p9wjx68V6oWctnh5qJDAo1uzR8P1VD\nezaKX57lh4US9r/49lBzf7sDcfd4GaoyYGZ+up9bNL0jC8M8duDpULMxU0LNBAaHmvYer7Zz1Iw/\nhhqf0inUjN4+nsgzM5hcA/BzfhZq3vGNQ82NFk/g+i+bhJrBTAw1Q3k21PyDPUqmf4kNOcv2Kerb\naqELIUROUEAXQoicoIAuhBA5QQFdCCFyggK6EELkBAV0IYTICQroQgiRExTQhRAiJ1R0YtHBtTeU\n1OzrD4T5HG53xIVdFV+3nj3hS6FmKC/GZY2Jy7rjyP1CzSgrvhAsAA/H5SwcGs+rWWXNeFIJ28dl\n+X1xWdYjQ1mT47Je26RPqNnSplR0YtEm/lLR9B95PIntRK4NNRMs9tnPfdVQszMTQs3DfCXUvOJb\nhZqT7LehhqmxD7zSK57ssxUZFgr/W1xWzT7bh5oqngo1gzNMvnt17pYl0/fs0JG/rrGmJhYJIUTe\nUUAXQoicoIAuhBA5QQFdCCFyggK6EELkBAV0IYTICQroQgiRExTQhRAiJ8RLApWRN2yzkulfso3C\nPA6p/WOoufUbsS1z6Rpq/Lz2oeatc3vF9nBIqBnZr3RZv3zrh2Ee/Xkj1OxE51Bz/zOjQs18Vg81\n7Tky1PTtu1OomUbPUEOG1XzKyQjuKZo2ldhH/IXY157YdnSoucJOCjVreYbVkez7oeZXdmqoeTpD\nWRv0WjfUDJkTr/6zIJ4vBZPjyW7r2ruh5hr/WqjZP8NEsFW6LiqZvilrl0xXC10IIXKCAroQQuQE\nBXQhhMgJCuhCCJETFNCFECInKKALIUROUEAXQoicoIAuhBA5YbknFpnZDcB+wAx3/3K6rRtwG9AH\neAc40N3nFMujl08tWcbZ//pVaMfi3vFPOGfjM0LNQXZ7qLnv3D1DzQfWI9Qc71eHmnanlV5J6scv\n/ibM4/Stzw81w+c9HGqOfC1eFWrsdl8PNQfvE6zCBLz94Pqh5jQuDTWQYSWrIrSEb3+J4isWzWHN\n2Iae8Upipcqo406+FWo2svdCzWTvG2o2m/bfULNkQTyRjYmxZN7gePLRTXvEv/3bGc77A7kt1PRk\nWqg5dsnvQ83Q9qUnTHVmlZLpzWmh3wjsXW/bGcDf3b0/8AhwZjPyF6JSyLdFm2S5A7q7Pw58XG/z\nAcCY9PMYYMTy5i9EpZBvi7ZKS/eh93D3GQDuPh2I74uEaBvIt0WrRw9FhRAiJ7T02xZnmNl67j7D\nzNYHPiglfq36L0s/r1O1JetUbdnC5oiVhU9rJvFpzaRyFtEk376n+uWlnwdU9WBAVfywXIjGmFnz\nMrNqXgHg0+DtqM0N6Jb+1XEvcBRwCfBtYFypnQdUj2xm8UIkrFE1iDWqBi39PuO8PzQ3y2b59ojq\ngc0tXwgAulcNpHtV4k+D6MHj591YVLvcXS5mdgvwJLC5mb1rZkcDFwN7mdnrwJ7pdyHaFPJt0VZZ\n7ha6ux9aJCkerC1EK0a+Ldoq5h5PYChLwWb+99phJTW73RGvbmKj4hVH/Ob4RuTUw/4v1FyWYejx\ndOsWaj73VUPNxkwvmW67xL+p9jgLNXZ4XH/2lwxlfd4yZfFhXNYjPUr7DcCe9hTuHhtVBszM/1b7\nlaLpw197LM5jQFxX91r9ofINWdtnhpqdybC0z0XxcZl5RrxqVXebF2qeZttQM87jUaMX2bmh5k72\nCzXfW3JtqPmwfYZVqO6LV6Fq/37p4z68F4zfr11R39YoFyGEyAkK6EIIkRMU0IUQIicooAshRE5Q\nQBdCiJyggC6EEDlBAV0IIXKCAroQQuSEln45V5PY64HHS6afPipecefCK+PB+n8+cVSo2dTi1Vam\n+HqhpgOxPW/ZZqHmn35wyfS9HosnMK07p/4rvRvyBv1CTc+R8USoboctCDW1+8Z1szDDgjbVVMei\nButTrFgm2aCiaVcMOCnc/4Hr47oaNjqurB8Sr2y10/lxWe//LPa3nmfF/vZpdcdQM23V4aHmN5/9\nINSs1ileqayTxSsxHdH+z6Fm4ZyzQ82k/b8canrzesn0HsHLudRCF0KInKCALoQQOUEBXQghcoIC\nuhBC5AQFdCGEyAkK6EIIkRMU0IUQIicooAshRE6o6MQif7z0gjJPfG3HMI8RJ9waasZxYKgZzdWh\nZobFK7d/z38Xavac/ESoYWLp5FkjVwuzeGntuJhBfd8ONT42w8I/N9eGkps4KNRszQstoik9Za38\n/GjBr4umXeqnhfvbtLiMdX1uqLn9ybjNZuvEZfV8K540xP9iSYcl8UpMXeyTUHNqp1+Fmq4W188m\nHvv/aRQ/lktZ+NNQ8kc7KtR0ofRvX53S56Ja6EIIkRMU0IUQIicooAshRE5QQBdCiJyggC6EEDlB\nAV0IIXKCAroQQuQEBXQhhMgJ5u6VKdjMuTso+8XYNjsg1iweF8+fevGceBWhbXgt1HyfK0LNbx84\nNdSwbzAB46vxtdhfiCcE2fR4ogcPx2W17xHnc8LWl4Saq179Saj53laXh5rf2o9x9wwzoloeM/PH\narctmj6NDcM8ViVeAWpGhhW0Ru96c6jhX/GxO69d7ANdLK7uUzJMLHrU4gmFm/mboaYXH4aa3ezB\nUPPf2k1DzdQH4vjBVbGEIDQM7w7jh7Qr6ttqoQshRE5QQBdCiJyggC6EEDlBAV0IIXKCAroQQuQE\nBXQhhMgJCuhCCJETFNCFECInLPeKRWZ2A7AfMMPdv5xuOxcYDXyQys5y9+Ij939felLQkfdfG9px\n17xvhZpzz4knq7xkXwo1u9ceG2p+/3y8YtG39r0z1GxF6eWGxjx4YpjHN7g71PSe1z7UXLHXSaHG\nx8eTSmqsKtRUbflAqLltSbzyEfw4g6ZxWsK337LiE01u5ZDQhiH+bKi5tvb7oebQh28JNVdxSqj5\nbm23ULOAVULNLO8Uaqp+9nmoGXbBo6FmscfrVrl3CTUzZsUTuFgnwxy2ybGE2UF6sFBZc1roNwJ7\nN7L9MncflP7F07CEaH3It0WbZLkDurs/DjS20GBFplsL0VLIt0VbpRx96D80sxfM7HozW7MM+QtR\nKeTbolWz3H3oRbgGON/d3cwuAC4DvlNU/Wb1F5/XroLuVS1sjlhZWFTzFIv++VQ5i2iSb99T/fLS\nzwOqejCgqkc5bRN55pUaeLUGgLfWKC1t0YDu7oWvN7sOuK/kDptVt2TxYiWmY9UwOlYNW/r985/H\nb2RsCk317RHVA1u0fLESs1VV8gf0Wx/eHnNeUWlzu1yMgn5FM1u/IO2bwMsN9hCibSDfFm2O5gxb\nvAWoArqb2bvAucBuZrYNUAu8AxzXAjYKsUKRb4u2ynIHdHc/tJHNNzbDFiFaBfJt0Vap6IpFJ9Ze\nWFKztz0U5nOjHx1q/ssmoWbSL3YONRkWLILFGUa2ZVhliTsDzW3nh1lsV7t7qPm1nxBqdjzn+VDD\noljCLzL87k0z1N9bf89Q2PCKrli0hU8omj7fO4d5TDmrf1xQBpcdvu+4UDP+aweEmi63fxBq5ry2\nfqjxjeJD0uGpxaFmcb+4LXrwVvE1+I5JR4aaPoPiE387Joaauw48PNRwbunk4WvA+L6mFYuEECLv\nKKALIUROUEAXQoicoIAuhBA5odUE9Kk1b1fahKbzfk2lLWgyn9RkeMDZ2phfU2kLmsW8muIPSFst\nM2sqbUGTqXmuMgM8lpsPalo8SwX05jC9ptIWNJlPal6otAlN57OaSlvQLObXxCMgWh2zaiptQZP5\n53OVtqCJfFjT4lm2moAuhBCiebT0y7maRC++GLfalTWW+Z5s2zzMo2+wEARAR4I32gBkeIc9ny37\nddpk6NmnnmZJhnzWyqDpG6QP2iDMYkAjv3shqyyzvTNbhPkM6hlKIB46DIMyaHo13DTtNeg5oGBD\n13hRgkmTMpRVRrbki4UcXqXjMt8/Z9Vw/+5Z6rxrLOlH/FLIj/o13DZtJvQs2N65XYZQ0SnDAe4Q\nj0MflOU9lqs1UlaHabDaFxWXJTYMitfbYINoVQlgkyxl1Tunp02DnvXP86CofqvA+BLpFZ1YVJGC\nxUpDJScWVaJcsfJQzLcrFtCFEEK0LOpDF0KInKCALoQQOaFVBHQz+6qZvWZmb5jZTyptTxbM7B0z\ne9HMnjezeIn2CmBmN5jZDDP7d8G2bmY23sxeN7OHWtNSakXsPdfMpprZpPTvq5W0sam0Nd+WX5eH\nFeXbFQ/oZtYOuJpklfWtgEPMbEDpvVoFtUCVu2/r7kMrbUwRGlu9/gzg7+7eH3gEOHOFW1WcxuwF\nuMzdB6V/D65oo5aXNurb8uvysEJ8u+IBHRgKvOnuU9x9ETAWiN/nWXmM1lF/RSmyev0BwJj08xhg\nxAo1qgRF7IWClYPaGG3Rt+XXZWBF+XZrOHAbAu8VfJ+abmvtOPCQmT1nZqMrbUwT6OHuMwDcfTqw\nboXtycIPzewFM7u+td1KB7RF35Zfr1ha1LdbQ0Bv7ArVFsZS7ujug4F9SQ5KhuUGxHJwDbCpu28D\nTAcuq7BFsBgjAAABJ0lEQVQ9TaEt+rb8esXR4r7dGgL6VKB3wfdewLQK2ZKZtBVQtxr83SS3122B\nGWa2Hixd+DheiqaCuPuH/sVkieuAIZW0p4m0Od+WX684yuHbrSGgPwf0M7M+ZrYKcDBwb4VtKomZ\ndTKzNdLPnYHhtN5V4JdZvZ6kbo9KP38biNcoW7EsY296ctbxTVpvPTdGm/Jt+XXZKbtvV/RdLgDu\nvsTMjid5RUE74AZ3/0+FzYpYD7g7neLdAbjZ3Uu9YqEiFFm9/mLgDjM7BngXGFU5C5eliL27mdk2\nJKMv3gGOq5iBTaQN+rb8ukysKN/W1H8hhMgJraHLRQghRAuggC6EEDlBAV0IIXKCAroQQuQEBXQh\nhMgJCuhCCJETFNCFECInKKALIURO+H/MOIwTGD7mCAAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1370,6 +1374,11 @@ } ], "source": [ + "# Force zeros to be NaNs so their values are not included when matplotlib calculates\n", + "# the color scale\n", + "ce_fission_rates[ce_fission_rates == 0.] = np.nan\n", + "mg_fission_rates[mg_fission_rates == 0.] = np.nan\n", + "\n", "# Plot the CE fission rates in the left subplot\n", "fig = plt.subplot(121)\n", "plt.imshow(ce_fission_rates, interpolation='none', cmap='jet')\n", @@ -1387,7 +1396,7 @@ "collapsed": true }, "source": [ - "We also see very good agreement between the fission rate distributions." + "We also see very good agreement between the fission rate distributions, though these should converge closer together with an increasing number of particle histories in both the continuous-energy run to generate the multi-group cross sections, and in the multi-group calculation itself." ] }, { From 2654505089422a551f57f2653cd60c7b70e45fc3 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sat, 14 May 2016 10:36:13 -0400 Subject: [PATCH 541/650] Updated MGXS test results using Pandas 0.18 --- .../results_true.dat | 86 +++---- .../results_true.dat | 4 +- .../results_true.dat | 236 +++++++++--------- .../results_true.dat | 2 +- 4 files changed, 164 insertions(+), 164 deletions(-) diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index ffe6f29087..184be68bfa 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -5,81 +5,81 @@ 1 1 1 1 total P1 0.039277 0.004308 2 1 1 1 total P2 0.017574 0.002402 3 1 1 1 total P3 0.012203 0.002164 material group out nuclide mean std. dev. -0 1 1 total 1 0.055333 material group in nuclide mean std. dev. +0 1 1 total 1.0 0.055333 material group in nuclide mean std. dev. 0 2 1 total 0.241262 0.00841 material group in nuclide mean std. dev. -0 2 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 2 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. 0 2 1 1 total P0 0.272369 0.006872 1 2 1 1 total P1 0.031107 0.005483 2 2 1 1 total P2 0.025999 0.006151 3 2 1 1 total P3 0.003219 0.003312 material group out nuclide mean std. dev. -0 2 1 total 0 0 material group in nuclide mean std. dev. +0 2 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 3 1 total 0.400028 0.034667 material group in nuclide mean std. dev. -0 3 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 3 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. 0 3 1 1 total P0 0.794999 0.036548 1 3 1 1 total P1 0.401537 0.016175 2 3 1 1 total P2 0.143623 0.008719 3 3 1 1 total P3 0.001991 0.004433 material group out nuclide mean std. dev. -0 3 1 total 0 0 material group in nuclide mean std. dev. +0 3 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 4 1 total 0.377402 0.072937 material group in nuclide mean std. dev. -0 4 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 4 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. 0 4 1 1 total P0 0.727311 0.080096 1 4 1 1 total P1 0.355839 0.037901 2 4 1 1 total P2 0.124483 0.015823 3 4 1 1 total P3 0.012168 0.006224 material group out nuclide mean std. dev. -0 4 1 total 0 0 material group in nuclide mean std. dev. -0 5 1 total 0 0 material group in nuclide mean std. dev. -0 5 1 total 0 0 material group in group out nuclide moment mean std. dev. -0 5 1 1 total P0 0 0 -1 5 1 1 total P1 0 0 -2 5 1 1 total P2 0 0 -3 5 1 1 total P3 0 0 material group out nuclide mean std. dev. -0 5 1 total 0 0 material group in nuclide mean std. dev. -0 6 1 total 0 0 material group in nuclide mean std. dev. -0 6 1 total 0 0 material group in group out nuclide moment mean std. dev. -0 6 1 1 total P0 0 0 -1 6 1 1 total P1 0 0 -2 6 1 1 total P2 0 0 -3 6 1 1 total P3 0 0 material group out nuclide mean std. dev. -0 6 1 total 0 0 material group in nuclide mean std. dev. -0 7 1 total 0 0 material group in nuclide mean std. dev. -0 7 1 total 0 0 material group in group out nuclide moment mean std. dev. -0 7 1 1 total P0 0 0 -1 7 1 1 total P1 0 0 -2 7 1 1 total P2 0 0 -3 7 1 1 total P3 0 0 material group out nuclide mean std. dev. -0 7 1 total 0 0 material group in nuclide mean std. dev. -0 8 1 total 0 0 material group in nuclide mean std. dev. -0 8 1 total 0 0 material group in group out nuclide moment mean std. dev. -0 8 1 1 total P0 0 0 -1 8 1 1 total P1 0 0 -2 8 1 1 total P2 0 0 -3 8 1 1 total P3 0 0 material group out nuclide mean std. dev. -0 8 1 total 0 0 material group in nuclide mean std. dev. +0 4 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 5 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 5 1 1 total P0 0.0 0.0 +1 5 1 1 total P1 0.0 0.0 +2 5 1 1 total P2 0.0 0.0 +3 5 1 1 total P3 0.0 0.0 material group out nuclide mean std. dev. +0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 6 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 6 1 1 total P0 0.0 0.0 +1 6 1 1 total P1 0.0 0.0 +2 6 1 1 total P2 0.0 0.0 +3 6 1 1 total P3 0.0 0.0 material group out nuclide mean std. dev. +0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 7 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 7 1 1 total P0 0.0 0.0 +1 7 1 1 total P1 0.0 0.0 +2 7 1 1 total P2 0.0 0.0 +3 7 1 1 total P3 0.0 0.0 material group out nuclide mean std. dev. +0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 8 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 8 1 1 total P0 0.0 0.0 +1 8 1 1 total P1 0.0 0.0 +2 8 1 1 total P2 0.0 0.0 +3 8 1 1 total P3 0.0 0.0 material group out nuclide mean std. dev. +0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 9 1 total 0.600536 0.748875 material group in nuclide mean std. dev. -0 9 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 9 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. 0 9 1 1 total P0 0.720380 0.771015 1 9 1 1 total P1 0.119844 0.184691 2 9 1 1 total P2 0.038522 0.064485 3 9 1 1 total P3 0.056023 0.050595 material group out nuclide mean std. dev. -0 9 1 total 0 0 material group in nuclide mean std. dev. +0 9 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 10 1 total 0.235515 0.613974 material group in nuclide mean std. dev. -0 10 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 10 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. 0 10 1 1 total P0 0.501009 0.708534 1 10 1 1 total P1 0.265494 0.375465 2 10 1 1 total P2 0.141979 0.200788 3 10 1 1 total P3 0.074258 0.105017 material group out nuclide mean std. dev. -0 10 1 total 0 0 material group in nuclide mean std. dev. +0 10 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 11 1 total 0.510145 0.741941 material group in nuclide mean std. dev. -0 11 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 11 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. 0 11 1 1 total P0 0.804661 0.817658 1 11 1 1 total P1 0.312803 0.315315 2 11 1 1 total P2 0.168113 0.172935 3 11 1 1 total P3 0.003808 0.037911 material group out nuclide mean std. dev. -0 11 1 total 0 0 material group in nuclide mean std. dev. +0 11 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 12 1 total 0.73836 0.825631 material group in nuclide mean std. dev. -0 12 1 total 0 0 material group in group out nuclide moment mean std. dev. +0 12 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. 0 12 1 1 total P0 0.943429 0.856119 1 12 1 1 total P1 0.220164 0.163180 2 12 1 1 total P2 0.052884 0.042440 3 12 1 1 total P3 0.039939 0.032867 material group out nuclide mean std. dev. -0 12 1 total 0 0 \ No newline at end of file +0 12 1 total 0.0 0.0 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index ba9eaa71e2..fa55249d13 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,8 +1,8 @@ avg(distribcell) group in nuclide mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.718919 0.520644 avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 avg(distribcell) group in group out nuclide moment mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 avg(distribcell) group in group out nuclide moment mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P0 1.142547 0.570131 1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P1 0.447381 0.216322 2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P2 0.141202 0.066504 3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P3 0.039228 0.024621 avg(distribcell) group out nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 \ No newline at end of file +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index 5e55a4c749..94150a202a 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -19,12 +19,12 @@ 1 1 2 2 total P1 -0.011310 0.007839 2 1 2 2 total P2 -0.014807 0.008629 3 1 2 2 total P3 -0.006855 0.009047 material group out nuclide mean std. dev. -1 1 1 total 1 0.055333 -0 1 2 total 0 0.000000 material group in nuclide mean std. dev. +1 1 1 total 1.0 0.055333 +0 1 2 total 0.0 0.000000 material group in nuclide mean std. dev. 1 2 1 total 0.237254 0.008184 0 2 2 total 0.285930 0.048796 material group in nuclide mean std. dev. -1 2 1 total 0 0 -0 2 2 total 0 0 material group in group out nuclide moment mean std. dev. +1 2 1 total 0.0 0.0 +0 2 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. 12 2 1 1 total P0 0.273115 0.006253 13 2 1 1 total P1 0.035861 0.005878 14 2 1 1 total P2 0.029704 0.006640 @@ -41,12 +41,12 @@ 1 2 2 2 total P1 -0.021880 0.012218 2 2 2 2 total P2 -0.015295 0.010276 3 2 2 2 total P3 0.014034 0.014318 material group out nuclide mean std. dev. -1 2 1 total 0 0 -0 2 2 total 0 0 material group in nuclide mean std. dev. +1 2 1 total 0.0 0.0 +0 2 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 3 1 total 0.286906 0.027401 0 3 2 total 1.418151 0.265308 material group in nuclide mean std. dev. -1 3 1 total 0 0 -0 3 2 total 0 0 material group in group out nuclide moment mean std. dev. +1 3 1 total 0.0 0.0 +0 3 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. 12 3 1 1 total P0 0.643346 0.028376 13 3 1 1 total P1 0.383409 0.016447 14 3 1 1 total P2 0.152185 0.009574 @@ -63,12 +63,12 @@ 1 3 2 2 total P1 0.498431 0.063421 2 3 2 2 total P2 0.091205 0.013726 3 3 2 2 total P3 0.017054 0.013916 material group out nuclide mean std. dev. -1 3 1 total 0 0 -0 3 2 total 0 0 material group in nuclide mean std. dev. +1 3 1 total 0.0 0.0 +0 3 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 4 1 total 0.242447 0.061031 0 4 2 total 1.253959 0.388363 material group in nuclide mean std. dev. -1 4 1 total 0 0 -0 4 2 total 0 0 material group in group out nuclide moment mean std. dev. +1 4 1 total 0.0 0.0 +0 4 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. 12 4 1 1 total P0 0.543941 0.065427 13 4 1 1 total P1 0.326011 0.038602 14 4 1 1 total P2 0.131133 0.017475 @@ -85,100 +85,100 @@ 1 4 2 2 total P1 0.500695 0.122178 2 4 2 2 total P2 0.099026 0.038719 3 4 2 2 total P3 0.032975 0.025103 material group out nuclide mean std. dev. -1 4 1 total 0 0 -0 4 2 total 0 0 material group in nuclide mean std. dev. -1 5 1 total 0 0 -0 5 2 total 0 0 material group in nuclide mean std. dev. -1 5 1 total 0 0 -0 5 2 total 0 0 material group in group out nuclide moment mean std. dev. -12 5 1 1 total P0 0 0 -13 5 1 1 total P1 0 0 -14 5 1 1 total P2 0 0 -15 5 1 1 total P3 0 0 -8 5 1 2 total P0 0 0 -9 5 1 2 total P1 0 0 -10 5 1 2 total P2 0 0 -11 5 1 2 total P3 0 0 -4 5 2 1 total P0 0 0 -5 5 2 1 total P1 0 0 -6 5 2 1 total P2 0 0 -7 5 2 1 total P3 0 0 -0 5 2 2 total P0 0 0 -1 5 2 2 total P1 0 0 -2 5 2 2 total P2 0 0 -3 5 2 2 total P3 0 0 material group out nuclide mean std. dev. -1 5 1 total 0 0 -0 5 2 total 0 0 material group in nuclide mean std. dev. -1 6 1 total 0 0 -0 6 2 total 0 0 material group in nuclide mean std. dev. -1 6 1 total 0 0 -0 6 2 total 0 0 material group in group out nuclide moment mean std. dev. -12 6 1 1 total P0 0 0 -13 6 1 1 total P1 0 0 -14 6 1 1 total P2 0 0 -15 6 1 1 total P3 0 0 -8 6 1 2 total P0 0 0 -9 6 1 2 total P1 0 0 -10 6 1 2 total P2 0 0 -11 6 1 2 total P3 0 0 -4 6 2 1 total P0 0 0 -5 6 2 1 total P1 0 0 -6 6 2 1 total P2 0 0 -7 6 2 1 total P3 0 0 -0 6 2 2 total P0 0 0 -1 6 2 2 total P1 0 0 -2 6 2 2 total P2 0 0 -3 6 2 2 total P3 0 0 material group out nuclide mean std. dev. -1 6 1 total 0 0 -0 6 2 total 0 0 material group in nuclide mean std. dev. -1 7 1 total 0 0 -0 7 2 total 0 0 material group in nuclide mean std. dev. -1 7 1 total 0 0 -0 7 2 total 0 0 material group in group out nuclide moment mean std. dev. -12 7 1 1 total P0 0 0 -13 7 1 1 total P1 0 0 -14 7 1 1 total P2 0 0 -15 7 1 1 total P3 0 0 -8 7 1 2 total P0 0 0 -9 7 1 2 total P1 0 0 -10 7 1 2 total P2 0 0 -11 7 1 2 total P3 0 0 -4 7 2 1 total P0 0 0 -5 7 2 1 total P1 0 0 -6 7 2 1 total P2 0 0 -7 7 2 1 total P3 0 0 -0 7 2 2 total P0 0 0 -1 7 2 2 total P1 0 0 -2 7 2 2 total P2 0 0 -3 7 2 2 total P3 0 0 material group out nuclide mean std. dev. -1 7 1 total 0 0 -0 7 2 total 0 0 material group in nuclide mean std. dev. -1 8 1 total 0 0 -0 8 2 total 0 0 material group in nuclide mean std. dev. -1 8 1 total 0 0 -0 8 2 total 0 0 material group in group out nuclide moment mean std. dev. -12 8 1 1 total P0 0 0 -13 8 1 1 total P1 0 0 -14 8 1 1 total P2 0 0 -15 8 1 1 total P3 0 0 -8 8 1 2 total P0 0 0 -9 8 1 2 total P1 0 0 -10 8 1 2 total P2 0 0 -11 8 1 2 total P3 0 0 -4 8 2 1 total P0 0 0 -5 8 2 1 total P1 0 0 -6 8 2 1 total P2 0 0 -7 8 2 1 total P3 0 0 -0 8 2 2 total P0 0 0 -1 8 2 2 total P1 0 0 -2 8 2 2 total P2 0 0 -3 8 2 2 total P3 0 0 material group out nuclide mean std. dev. -1 8 1 total 0 0 -0 8 2 total 0 0 material group in nuclide mean std. dev. +1 4 1 total 0.0 0.0 +0 4 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +12 5 1 1 total P0 0.0 0.0 +13 5 1 1 total P1 0.0 0.0 +14 5 1 1 total P2 0.0 0.0 +15 5 1 1 total P3 0.0 0.0 +8 5 1 2 total P0 0.0 0.0 +9 5 1 2 total P1 0.0 0.0 +10 5 1 2 total P2 0.0 0.0 +11 5 1 2 total P3 0.0 0.0 +4 5 2 1 total P0 0.0 0.0 +5 5 2 1 total P1 0.0 0.0 +6 5 2 1 total P2 0.0 0.0 +7 5 2 1 total P3 0.0 0.0 +0 5 2 2 total P0 0.0 0.0 +1 5 2 2 total P1 0.0 0.0 +2 5 2 2 total P2 0.0 0.0 +3 5 2 2 total P3 0.0 0.0 material group out nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +12 6 1 1 total P0 0.0 0.0 +13 6 1 1 total P1 0.0 0.0 +14 6 1 1 total P2 0.0 0.0 +15 6 1 1 total P3 0.0 0.0 +8 6 1 2 total P0 0.0 0.0 +9 6 1 2 total P1 0.0 0.0 +10 6 1 2 total P2 0.0 0.0 +11 6 1 2 total P3 0.0 0.0 +4 6 2 1 total P0 0.0 0.0 +5 6 2 1 total P1 0.0 0.0 +6 6 2 1 total P2 0.0 0.0 +7 6 2 1 total P3 0.0 0.0 +0 6 2 2 total P0 0.0 0.0 +1 6 2 2 total P1 0.0 0.0 +2 6 2 2 total P2 0.0 0.0 +3 6 2 2 total P3 0.0 0.0 material group out nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +12 7 1 1 total P0 0.0 0.0 +13 7 1 1 total P1 0.0 0.0 +14 7 1 1 total P2 0.0 0.0 +15 7 1 1 total P3 0.0 0.0 +8 7 1 2 total P0 0.0 0.0 +9 7 1 2 total P1 0.0 0.0 +10 7 1 2 total P2 0.0 0.0 +11 7 1 2 total P3 0.0 0.0 +4 7 2 1 total P0 0.0 0.0 +5 7 2 1 total P1 0.0 0.0 +6 7 2 1 total P2 0.0 0.0 +7 7 2 1 total P3 0.0 0.0 +0 7 2 2 total P0 0.0 0.0 +1 7 2 2 total P1 0.0 0.0 +2 7 2 2 total P2 0.0 0.0 +3 7 2 2 total P3 0.0 0.0 material group out nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +12 8 1 1 total P0 0.0 0.0 +13 8 1 1 total P1 0.0 0.0 +14 8 1 1 total P2 0.0 0.0 +15 8 1 1 total P3 0.0 0.0 +8 8 1 2 total P0 0.0 0.0 +9 8 1 2 total P1 0.0 0.0 +10 8 1 2 total P2 0.0 0.0 +11 8 1 2 total P3 0.0 0.0 +4 8 2 1 total P0 0.0 0.0 +5 8 2 1 total P1 0.0 0.0 +6 8 2 1 total P2 0.0 0.0 +7 8 2 1 total P3 0.0 0.0 +0 8 2 2 total P0 0.0 0.0 +1 8 2 2 total P1 0.0 0.0 +2 8 2 2 total P2 0.0 0.0 +3 8 2 2 total P3 0.0 0.0 material group out nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 9 1 total 0.600536 0.748875 0 9 2 total 0.000000 0.000000 material group in nuclide mean std. dev. -1 9 1 total 0 0 -0 9 2 total 0 0 material group in group out nuclide moment mean std. dev. +1 9 1 total 0.0 0.0 +0 9 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. 12 9 1 1 total P0 0.720380 0.771015 13 9 1 1 total P1 0.119844 0.184691 14 9 1 1 total P2 0.038522 0.064485 @@ -195,12 +195,12 @@ 1 9 2 2 total P1 0.000000 0.000000 2 9 2 2 total P2 0.000000 0.000000 3 9 2 2 total P3 0.000000 0.000000 material group out nuclide mean std. dev. -1 9 1 total 0 0 -0 9 2 total 0 0 material group in nuclide mean std. dev. +1 9 1 total 0.0 0.0 +0 9 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 10 1 total 0.235515 0.613974 0 10 2 total 0.000000 0.000000 material group in nuclide mean std. dev. -1 10 1 total 0 0 -0 10 2 total 0 0 material group in group out nuclide moment mean std. dev. +1 10 1 total 0.0 0.0 +0 10 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. 12 10 1 1 total P0 0.501009 0.708534 13 10 1 1 total P1 0.265494 0.375465 14 10 1 1 total P2 0.141979 0.200788 @@ -217,12 +217,12 @@ 1 10 2 2 total P1 0.000000 0.000000 2 10 2 2 total P2 0.000000 0.000000 3 10 2 2 total P3 0.000000 0.000000 material group out nuclide mean std. dev. -1 10 1 total 0 0 -0 10 2 total 0 0 material group in nuclide mean std. dev. +1 10 1 total 0.0 0.0 +0 10 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 11 1 total 0.186324 0.632129 0 11 2 total 0.945986 1.591133 material group in nuclide mean std. dev. -1 11 1 total 0 0 -0 11 2 total 0 0 material group in group out nuclide moment mean std. dev. +1 11 1 total 0.0 0.0 +0 11 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. 12 11 1 1 total P0 0.478128 0.676174 13 11 1 1 total P1 0.323679 0.457751 14 11 1 1 total P2 0.143375 0.202763 @@ -239,12 +239,12 @@ 1 11 2 2 total P1 0.286611 0.405329 2 11 2 2 total P2 0.218191 0.308569 3 11 2 2 total P3 -0.048514 0.068609 material group out nuclide mean std. dev. -1 11 1 total 0 0 -0 11 2 total 0 0 material group in nuclide mean std. dev. +1 11 1 total 0.0 0.0 +0 11 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 12 1 total 0.213292 0.271444 0 12 2 total 1.390975 2.137346 material group in nuclide mean std. dev. -1 12 1 total 0 0 -0 12 2 total 0 0 material group in group out nuclide moment mean std. dev. +1 12 1 total 0.0 0.0 +0 12 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. 12 12 1 1 total P0 0.408594 0.278123 13 12 1 1 total P1 0.222541 0.145776 14 12 1 1 total P2 0.090972 0.069626 @@ -261,5 +261,5 @@ 1 12 2 2 total P1 0.229748 0.324913 2 12 2 2 total P2 0.014178 0.020051 3 12 2 2 total P3 0.038997 0.055150 material group out nuclide mean std. dev. -1 12 1 total 0 0 -0 12 2 total 0 0 \ No newline at end of file +1 12 1 total 0.0 0.0 +0 12 2 total 0.0 0.0 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index 1fcfe4aef2..06f838206f 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -1 +1 @@ -002a4c91c4b4288dbac2cba267175c4560cca43685bfd5d415775e9fc1635866c1f9c3396a44d01dd29f734a0432e132408d36c9f7c4e34783cc295f2d9dc393 \ No newline at end of file +1ee58383dc8ac46c5e0d72321cbc34b0dba531435d5e0e632cbbf9572eb7d669c8c8ad9f370345325afa0bdeb2f818b0f5204b7c4a7c4aaf58ded7acbd715ef8 \ No newline at end of file From fc1734e75a545b2017f9423ba5010da4c4a3852c Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sat, 14 May 2016 10:52:35 -0400 Subject: [PATCH 542/650] Now import warnings module in openmc.statepoint --- openmc/statepoint.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 19aa3dbaf9..d5dd7bc1e7 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -1,6 +1,8 @@ import sys import re import os +import warnings + import numpy as np import openmc From 132fd870d8f8803bc54a851079ec8f92dfea9980 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sat, 14 May 2016 10:57:47 -0400 Subject: [PATCH 543/650] Now expand Legendre scores for ScatterMatrix for all orders --- openmc/mgxs/mgxs.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index c1255f6094..2f9247d187 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1821,10 +1821,9 @@ class ScatterMatrixXS(MGXS): # Expand scores to match the format in the statepoint # e.g., "scatter-P2" -> "scatter-0", "scatter-1", "scatter-2" - if self.legendre_order != 0: - tally_key = '{}-P{}'.format(self.rxn_type, self.legendre_order) - self.tallies[tally_key].scores = \ - [self.rxn_type + '-{}'.format(i) for i in range(self.legendre_order+1)] + tally_key = '{}-P{}'.format(self.rxn_type, self.legendre_order) + self.tallies[tally_key].scores = \ + [self.rxn_type + '-{}'.format(i) for i in range(self.legendre_order+1)] super(ScatterMatrixXS, self).load_from_statepoint(statepoint) From 87dfd97e5c5beb162678b4a0858f4373ae3063f6 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sat, 14 May 2016 12:33:02 -0400 Subject: [PATCH 544/650] Fixed issue with order=0 ScatterMatrixXS statepoint loading when not using P0 correction --- .../pythonapi/examples/mgxs-part-iii.ipynb | 34 +++++++++---------- openmc/mgxs/mgxs.py | 7 ++-- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index ece33e3f54..bc2f96414a 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -459,7 +459,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -727,7 +727,7 @@ " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", " Git SHA1: 47ef320ad517612376e181ec6a6bc42ca0db98ce\n", - " Date/Time: 2016-05-13 13:14:08\n", + " Date/Time: 2016-05-14 12:29:07\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -814,20 +814,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 7.4900E-01 seconds\n", - " Reading cross sections = 2.6400E-01 seconds\n", - " Total time in simulation = 8.0114E+01 seconds\n", - " Time in transport only = 8.0033E+01 seconds\n", - " Time in inactive batches = 6.5120E+00 seconds\n", - " Time in active batches = 7.3602E+01 seconds\n", - " Time synchronizing fission bank = 3.2000E-02 seconds\n", - " Sampling source sites = 3.0000E-03 seconds\n", - " SEND/RECV source sites = 2.8000E-02 seconds\n", - " Time accumulating tallies = 2.0000E-03 seconds\n", + " Total time for initialization = 5.7700E-01 seconds\n", + " Reading cross sections = 1.3400E-01 seconds\n", + " Total time in simulation = 8.0461E+01 seconds\n", + " Time in transport only = 8.0422E+01 seconds\n", + " Time in inactive batches = 6.4060E+00 seconds\n", + " Time in active batches = 7.4055E+01 seconds\n", + " Time synchronizing fission bank = 6.0000E-03 seconds\n", + " Sampling source sites = 2.0000E-03 seconds\n", + " SEND/RECV source sites = 3.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 8.0892E+01 seconds\n", - " Calculation Rate (inactive) = 3839.07 neutrons/second\n", - " Calculation Rate (active) = 1358.66 neutrons/second\n", + " Total time elapsed = 8.1067E+01 seconds\n", + " Calculation Rate (inactive) = 3902.59 neutrons/second\n", + " Calculation Rate (active) = 1350.35 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1559,7 +1559,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 43, @@ -1570,7 +1570,7 @@ "data": { "image/png": "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\n2ajR7Q6wgAAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 2f9247d187..34a5b88b59 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1821,9 +1821,10 @@ class ScatterMatrixXS(MGXS): # Expand scores to match the format in the statepoint # e.g., "scatter-P2" -> "scatter-0", "scatter-1", "scatter-2" - tally_key = '{}-P{}'.format(self.rxn_type, self.legendre_order) - self.tallies[tally_key].scores = \ - [self.rxn_type + '-{}'.format(i) for i in range(self.legendre_order+1)] + if self.correction != 'P0' or self.legendre_order != 0: + tally_key = '{}-P{}'.format(self.rxn_type, self.legendre_order) + self.tallies[tally_key].scores = \ + [self.rxn_type + '-{}'.format(i) for i in range(self.legendre_order+1)] super(ScatterMatrixXS, self).load_from_statepoint(statepoint) From 4bec584ddb7d07be7d92ad9d037e8363b2f25614 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 14 May 2016 13:04:27 -0400 Subject: [PATCH 545/650] Removed *_id setting in example notebook IV, since they are not needed, just as @wbinventor said. I owe this man a beer. --- .../pythonapi/examples/mgxs-part-iv.ipynb | 94 +++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb index b81e8f06b2..d15f265d4c 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb @@ -83,19 +83,19 @@ "outputs": [], "source": [ "# 1.6 enriched fuel\n", - "fuel = openmc.Material(name='1.6% Fuel', material_id=1)\n", + "fuel = openmc.Material(name='1.6% Fuel')\n", "fuel.set_density('g/cm3', 10.31341)\n", "fuel.add_nuclide(u235, 3.7503e-4)\n", "fuel.add_nuclide(u238, 2.2625e-2)\n", "fuel.add_nuclide(o16, 4.6007e-2)\n", "\n", "# zircaloy\n", - "zircaloy = openmc.Material(name='Zircaloy', material_id=2)\n", + "zircaloy = openmc.Material(name='Zircaloy')\n", "zircaloy.set_density('g/cm3', 6.55)\n", "zircaloy.add_nuclide(zr90, 7.2758e-3)\n", "\n", "# borated water\n", - "water = openmc.Material(name='Borated Water', material_id=3)\n", + "water = openmc.Material(name='Borated Water')\n", "water.set_density('g/cm3', 0.740582)\n", "water.add_nuclide(h1, 4.9457e-2)\n", "water.add_nuclide(o16, 2.4732e-2)\n", @@ -169,22 +169,22 @@ "outputs": [], "source": [ "# Create a Universe to encapsulate a fuel pin\n", - "fuel_pin_universe = openmc.Universe(name='1.6% Fuel Pin', universe_id=10)\n", + "fuel_pin_universe = openmc.Universe(name='1.6% Fuel Pin')\n", "\n", "# Create fuel Cell\n", - "fuel_cell = openmc.Cell(name='1.6% Fuel', cell_id=1)\n", + "fuel_cell = openmc.Cell(name='1.6% Fuel')\n", "fuel_cell.fill = fuel\n", "fuel_cell.region = -fuel_outer_radius\n", "fuel_pin_universe.add_cell(fuel_cell)\n", "\n", "# Create a clad Cell\n", - "clad_cell = openmc.Cell(name='1.6% Clad', cell_id=2)\n", + "clad_cell = openmc.Cell(name='1.6% Clad')\n", "clad_cell.fill = zircaloy\n", "clad_cell.region = +fuel_outer_radius & -clad_outer_radius\n", "fuel_pin_universe.add_cell(clad_cell)\n", "\n", "# Create a moderator Cell\n", - "moderator_cell = openmc.Cell(name='1.6% Moderator', cell_id=3)\n", + "moderator_cell = openmc.Cell(name='1.6% Moderator')\n", "moderator_cell.fill = water\n", "moderator_cell.region = +clad_outer_radius\n", "fuel_pin_universe.add_cell(moderator_cell)" @@ -206,22 +206,22 @@ "outputs": [], "source": [ "# Create a Universe to encapsulate a control rod guide tube\n", - "guide_tube_universe = openmc.Universe(name='Guide Tube', universe_id=20)\n", + "guide_tube_universe = openmc.Universe(name='Guide Tube')\n", "\n", "# Create guide tube Cell\n", - "guide_tube_cell = openmc.Cell(name='Guide Tube Water', cell_id=4)\n", + "guide_tube_cell = openmc.Cell(name='Guide Tube Water')\n", "guide_tube_cell.fill = water\n", "guide_tube_cell.region = -fuel_outer_radius\n", "guide_tube_universe.add_cell(guide_tube_cell)\n", "\n", "# Create a clad Cell\n", - "clad_cell = openmc.Cell(name='Guide Clad', cell_id=5)\n", + "clad_cell = openmc.Cell(name='Guide Clad')\n", "clad_cell.fill = zircaloy\n", "clad_cell.region = +fuel_outer_radius & -clad_outer_radius\n", "guide_tube_universe.add_cell(clad_cell)\n", "\n", "# Create a moderator Cell\n", - "moderator_cell = openmc.Cell(name='Guide Tube Moderator', cell_id=6)\n", + "moderator_cell = openmc.Cell(name='Guide Tube Moderator')\n", "moderator_cell.fill = water\n", "moderator_cell.region = +clad_outer_radius\n", "guide_tube_universe.add_cell(moderator_cell)" @@ -243,7 +243,7 @@ "outputs": [], "source": [ "# Create fuel assembly Lattice\n", - "assembly = openmc.RectLattice(name='1.6% Fuel Assembly', lattice_id=100)\n", + "assembly = openmc.RectLattice(name='1.6% Fuel Assembly')\n", "assembly.dimension = (17, 17)\n", "assembly.pitch = (1.26, 1.26)\n", "assembly.lower_left = [-1.26 * 17. / 2.0] * 2" @@ -297,14 +297,14 @@ "outputs": [], "source": [ "# Create root Cell\n", - "root_cell = openmc.Cell(name='root cell', cell_id=0)\n", + "root_cell = openmc.Cell(name='root cell')\n", "root_cell.fill = assembly\n", "\n", "# Add boundary planes\n", "root_cell.region = +min_x & -max_x & +min_y & -max_y & +min_z & -max_z\n", "\n", "# Create root Universe\n", - "root_universe = openmc.Universe(universe_id=0, name='root universe')\n", + "root_universe = openmc.Universe(name='root universe')\n", "root_universe.add_cell(root_cell)" ] }, @@ -382,7 +382,7 @@ "outputs": [], "source": [ "# Instantiate a Plot\n", - "plot = openmc.Plot(plot_id=1)\n", + "plot = openmc.Plot()\n", "plot.filename = 'materials-xy'\n", "plot.origin = [0, 0, 0]\n", "plot.pixels = [250, 250]\n", @@ -433,7 +433,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -637,7 +637,7 @@ "outputs": [], "source": [ "# Instantiate a tally Mesh\n", - "mesh = openmc.Mesh(mesh_id=1)\n", + "mesh = openmc.Mesh()\n", "mesh.type = 'regular'\n", "mesh.dimension = [17, 17]\n", "mesh.lower_left = [-10.71, -10.71]\n", @@ -696,7 +696,7 @@ " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", " Git SHA1: c779ca42c41a062a6a813e03f2add2d182ca9190\n", - " Date/Time: 2016-05-14 07:56:31\n", + " Date/Time: 2016-05-14 12:59:34\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -783,20 +783,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 1.4930E+00 seconds\n", - " Reading cross sections = 1.1850E+00 seconds\n", - " Total time in simulation = 1.9053E+01 seconds\n", - " Time in transport only = 1.9002E+01 seconds\n", - " Time in inactive batches = 2.0890E+00 seconds\n", - " Time in active batches = 1.6964E+01 seconds\n", - " Time synchronizing fission bank = 6.0000E-03 seconds\n", - " Sampling source sites = 5.0000E-03 seconds\n", + " Total time for initialization = 1.4720E+00 seconds\n", + " Reading cross sections = 1.1730E+00 seconds\n", + " Total time in simulation = 1.9211E+01 seconds\n", + " Time in transport only = 1.9108E+01 seconds\n", + " Time in inactive batches = 2.1390E+00 seconds\n", + " Time in active batches = 1.7072E+01 seconds\n", + " Time synchronizing fission bank = 1.0000E-02 seconds\n", + " Sampling source sites = 9.0000E-03 seconds\n", " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 2.0556E+01 seconds\n", - " Calculation Rate (inactive) = 23934.9 neutrons/second\n", - " Calculation Rate (active) = 11789.7 neutrons/second\n", + " Total time elapsed = 2.0692E+01 seconds\n", + " Calculation Rate (inactive) = 23375.4 neutrons/second\n", + " Calculation Rate (active) = 11715.1 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -950,7 +950,7 @@ "source": [ "# Create a MGXS File which can then be written to disk\n", "mgxs_file = mgxs_lib.create_mg_library(xs_type='macro', domain_names=['fuel', 'zircaloy', 'water'],\n", - " xs_ids='2m')\n", + " xs_ids='2m')\n", "\n", "# Write the file to disk using the default filename of `mgxs.xml`\n", "mgxs_file.export_to_xml()" @@ -983,15 +983,15 @@ "# Now re-define our materials to use the Multi-Group macroscopic data\n", "# instead of the continuous-energy data.\n", "# 1.6 enriched fuel UO2\n", - "fuel = openmc.Material(name='UO2', material_id=1)\n", + "fuel = openmc.Material(name='UO2')\n", "fuel.add_macroscopic(fuel_macro)\n", "\n", "# cladding\n", - "zircaloy = openmc.Material(name='Clad', material_id=2)\n", + "zircaloy = openmc.Material(name='Clad')\n", "zircaloy.add_macroscopic(zircaloy_macro)\n", "\n", "# moderator\n", - "water = openmc.Material(name='Water', material_id=3)\n", + "water = openmc.Material(name='Water')\n", "water.add_macroscopic(water_macro)\n", "\n", "# Finally, instantiate our Materials object\n", @@ -1071,7 +1071,7 @@ " License: http://openmc.readthedocs.org/en/latest/license.html\n", " Version: 0.7.1\n", " Git SHA1: c779ca42c41a062a6a813e03f2add2d182ca9190\n", - " Date/Time: 2016-05-14 07:56:52\n", + " Date/Time: 2016-05-14 12:59:55\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -1156,19 +1156,19 @@ " =======================> TIMING STATISTICS <=======================\n", "\n", " Total time for initialization = 4.0000E-02 seconds\n", - " Reading cross sections = 6.0000E-03 seconds\n", - " Total time in simulation = 1.2540E+01 seconds\n", - " Time in transport only = 1.2496E+01 seconds\n", - " Time in inactive batches = 1.1110E+00 seconds\n", - " Time in active batches = 1.1429E+01 seconds\n", - " Time synchronizing fission bank = 7.0000E-03 seconds\n", - " Sampling source sites = 5.0000E-03 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", + " Reading cross sections = 3.0000E-03 seconds\n", + " Total time in simulation = 1.3223E+01 seconds\n", + " Time in transport only = 1.3175E+01 seconds\n", + " Time in inactive batches = 1.1160E+00 seconds\n", + " Time in active batches = 1.2107E+01 seconds\n", + " Time synchronizing fission bank = 9.0000E-03 seconds\n", + " Sampling source sites = 8.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.2589E+01 seconds\n", - " Calculation Rate (inactive) = 45004.5 neutrons/second\n", - " Calculation Rate (active) = 17499.3 neutrons/second\n", + " Total time elapsed = 1.3272E+01 seconds\n", + " Calculation Rate (inactive) = 44802.9 neutrons/second\n", + " Calculation Rate (active) = 16519.4 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1355,7 +1355,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 40, @@ -1366,7 +1366,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, From 2ea3466206f48b2e19c77bf216925542c522ec58 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sat, 14 May 2016 22:29:38 -0400 Subject: [PATCH 546/650] Hotfix for making elements isotropic in lab through Material.make_isotropic_in_lab() method --- openmc/material.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/material.py b/openmc/material.py index e9a74f1e75..bf66cf11d4 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -506,7 +506,7 @@ class Material(object): for nuclide_name in self._nuclides: self._nuclides[nuclide_name][0].scattering = 'iso-in-lab' for element_name in self._elements: - self._element[element_name][0].scattering = 'iso-in-lab' + self._elements[element_name][0].scattering = 'iso-in-lab' def get_all_nuclides(self): """Returns all nuclides in the material From 394d8385c3b814fe27ad1cc5872921719a1bd724 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Sun, 15 May 2016 11:24:25 -0500 Subject: [PATCH 547/650] Fix spaces around % as suggested by @smharper --- src/particle_restart.F90 | 28 ++++++++++++++-------------- src/state_point.F90 | 14 +++++++------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/particle_restart.F90 b/src/particle_restart.F90 index 4040a471ab..e5cca17bf8 100644 --- a/src/particle_restart.F90 +++ b/src/particle_restart.F90 @@ -34,7 +34,7 @@ contains verbosity = 10 ! Initialize the particle to be tracked - call p%initialize() + call p % initialize() ! Read in the restart information call read_particle_restart(p, previous_run_mode) @@ -46,9 +46,9 @@ contains select case (previous_run_mode) case (MODE_EIGENVALUE) particle_seed = ((current_batch - 1)*gen_per_batch + & - current_gen - 1)*n_particles + p%id + current_gen - 1)*n_particles + p % id case (MODE_FIXEDSOURCE) - particle_seed = p%id + particle_seed = p % id end select call set_particle_seed(particle_seed) @@ -94,19 +94,19 @@ contains case ('fixed source') previous_run_mode = MODE_FIXEDSOURCE end select - call read_dataset(p%id, file_id, 'id') - call read_dataset(p%wgt, file_id, 'weight') - call read_dataset(p%E, file_id, 'energy') - call read_dataset(p%g, file_id, 'energy_group') - call read_dataset(p%coord(1)%xyz, file_id, 'xyz') - call read_dataset(p%coord(1)%uvw, file_id, 'uvw') + call read_dataset(p % id, file_id, 'id') + call read_dataset(p % wgt, file_id, 'weight') + call read_dataset(p % E, file_id, 'energy') + call read_dataset(p % g, file_id, 'energy_group') + call read_dataset(p % coord(1) % xyz, file_id, 'xyz') + call read_dataset(p % coord(1) % uvw, file_id, 'uvw') ! Set particle last attributes - p%last_wgt = p%wgt - p%last_xyz = p%coord(1)%xyz - p%last_uvw = p%coord(1)%uvw - p%last_E = p%E - p%last_g = p%g + p % last_wgt = p % wgt + p % last_xyz = p % coord(1)%xyz + p % last_uvw = p % coord(1)%uvw + p % last_E = p % E + p % last_g = p % g ! Close hdf5 file call file_close(file_id) diff --git a/src/state_point.F90 b/src/state_point.F90 index 81abf0c1b9..0006d30426 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -782,16 +782,16 @@ contains ! Read in CMFD info if (int_array(1) == 1) then cmfd_group = open_group(file_id, "cmfd") - call read_dataset(cmfd%indices, cmfd_group, "indices") - call read_dataset(cmfd%k_cmfd(1:restart_batch), cmfd_group, "k_cmfd") - call read_dataset(cmfd%cmfd_src, cmfd_group, "cmfd_src") - call read_dataset(cmfd%entropy(1:restart_batch), cmfd_group, & + call read_dataset(cmfd % indices, cmfd_group, "indices") + call read_dataset(cmfd % k_cmfd(1:restart_batch), cmfd_group, "k_cmfd") + call read_dataset(cmfd % cmfd_src, cmfd_group, "cmfd_src") + call read_dataset(cmfd % entropy(1:restart_batch), cmfd_group, & "cmfd_entropy") - call read_dataset(cmfd%balance(1:restart_batch), cmfd_group, & + call read_dataset(cmfd % balance(1:restart_batch), cmfd_group, & "cmfd_balance") - call read_dataset(cmfd%dom(1:restart_batch), cmfd_group, & + call read_dataset(cmfd % dom(1:restart_batch), cmfd_group, & "cmfd_dominance") - call read_dataset(cmfd%src_cmp(1:restart_batch), cmfd_group, & + call read_dataset(cmfd % src_cmp(1:restart_batch), cmfd_group, & "cmfd_srccmp") call close_group(cmfd_group) end if From 071e8d3e305532b9e53f747af6ac533ed01fc17d Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 15 May 2016 14:26:54 -0400 Subject: [PATCH 548/650] Forgot universe_id=0 for root in example nb (fixed), resolved comments from @paulromano, and made sure the example problem worked still (it did, but I simplified it a bit since data doesnt need to be numpy arrays anymore. --- .../pythonapi/examples/mgxs-part-iv.ipynb | 72 ++++++------ docs/source/usersguide/mgxs_library.rst | 6 +- .../python/pincell_multigroup/build-xml.py | 71 ++++++------ openmc/mgxs/library.py | 46 +++++--- openmc/mgxs/mgxs.py | 2 +- openmc/mgxs_library.py | 108 ++++++++++++------ 6 files changed, 172 insertions(+), 133 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb index d15f265d4c..4509f0fc83 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb @@ -304,7 +304,7 @@ "root_cell.region = +min_x & -max_x & +min_y & -max_y & +min_z & -max_z\n", "\n", "# Create root Universe\n", - "root_universe = openmc.Universe(name='root universe')\n", + "root_universe = openmc.Universe(name='root universe', universe_id=0)\n", "root_universe.add_cell(root_cell)" ] }, @@ -319,7 +319,7 @@ "cell_type": "code", "execution_count": 11, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ @@ -433,7 +433,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX////pgJFyEhJNv8RV\nUZDeAAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AFDw4WIol19z0AAAWFSURBVGje7Zs7cttADIZ9CSvX\ncrP0iCxUqbBc8Ag6xR6BhV2EvYvwFD4CCx1ABT1jMdgndpegRQnOrCbjpPlGESISC4A/gd27e8H5\n83CX3b4+iKJrRHkS4vkghMPBonRYWGwtfgD2YN+dRDUOoh6lACw0Noi9w2fESuEoAR/uVuMolX03\n9oXGT7F3eFL2iEfhUX1f4cPdL/ishs+68ai+udE4xPhexbjX2FfjGNoPj/DPNX4Tsd+EODr8FvsV\ndf1Hd9P2VvCi4+s/aXvrf+upAD+1/9GV1mkOH5X9vV6THtfvACslcaUCbESL61drBPtdI8SrFMWr\nELsXCkuFDYW75gbiP7d9Cf7bAYI/aCwUShrBvh30+lWQkzVgZ/HD4OixNCgcQpJ3BxU/Ln91elKo\nM5VEE38QtJ+Yv6cQ9xjKNYayyl8TypP8DfJnQ2H/b/N3ye9P83cT33SQv/sQh9gV7zZ/0dNj5HQa\nC5vVzv9+/WFN2w8KVaZ2BwL1+pv4g0x1QRfjq0dB4Q3kT277oP6VNL6gKxNU9a8zK+WLbi/Wwpdi\nhbboKqyxFOulHMj6v4W/AXbmUeAxrv9J/CqEBXaRKsXaodD4nsYvkT/G6H1D4SR/iPy1Roj9JsQ5\ne18/7EUHv1+Fvx/Xj5V9Ugb5K8TW4TZEEdcvoz/up0VTe9qsVIppKVX6a7D6y9ZvwEKjrtQxPtv6\nfXII9vCxKOGaIeAIfEF8IvAG8ie3vRK9rRQl+PPpSctbhfpTUCpviH+kxsZgpT91+snoX1l49KK3\niUQvICRy5aUw6l8leoVwoo3Uv1rKreF/UFLY6d9QP4L9Wf2r7EP9GOSfcsjZ56f60kz+XmVPXv+R\nuP49ff0T/53Rv6n/7m2lvXT9Wqd/VUz8hvh5M/ED6ILmt4mfHYZSaePnTWpsf/SvqV9O6dLYYClL\nEetnoH/LBLFoBvrX189uTv8++kot5vTvQD4/9jP690g9P/4z/bvo/XVG/xYoZZx+8fr3MxAtsf7t\nUOkG2JqsTtCIpgCt/qX1226KqZS7gfzJbe+c9jLrtIZ8lXD+s4umlW6AKIVrlML2/cXjgPFjlJqI\nRC+Fj0bVJe+vSh56pSdR6YkQ1ygF10Wqf0FeLta/iKn9Mv1L24ti2e+7W4n1b3T/W+L+t9H9T/Sv\nVboUmqJJon1/hZq8LnzRDlDrX1u0xRT1+6vEpomMmyYkqi95vIH8yW1PN+122KkLcNLKi/WTF01z\n/cNASrWE/l3ev6T17zX909z9X27/euK/Rf3zWP+Waf9eEv37KkWJ+rfDl6ZglNDa+cEBhwYDvkoN\nP/rX69814NaI3imq0l7OYDy/qSdDGwr7r+Y3VbzoKZr6XX2lfxfOb87qXzr+b1j/Xlp/nP6dn98M\ncdH7cn7zjPObKsYWS3Eb9w8n85smHtqQuPuZ30T2dlIT6F9xFl+n8xslegL9a4c2KRr9W4rp/GYq\numiM9Nec/j2v/yj9u1h//hv9e93vc++f63/u+rPjL3f+5Lbn1j9m/eXWf+7zh/v8+2b9e/Hzn6s/\nuPqHrb8g71n6L3f+5Lbnvn8w33+4718/+5d47//c/gO7/5E7/nPbc/tv3P4fs//I7X9y+6/fqH+v\n6j9z+9/c/ju3/8+eP+TOn9z23PkXc/7Gnf9x5483q38Xzn+582fu/Js9fy8kb/6fO39y23P3n3S8\n/S/c/Tfc/T83uX/pgv1XE/9duP+Lu/+Mvf8td/znti8kb/8ld/9nx9t/Sjw/Ltr/yt1/+337f6/b\nf0zoB3nJ/ucVc/81d/83e/957vzJbc89/8A8f8E9/5HE78XnT/4H/cs5f8Q9/8Q9f8U+/5U7f3Lb\nc88fdrzzjyvm+cuf/Uu887/c88fs88954/8vO4SjPC+2QRIAAAAldEVYdGRhdGU6Y3JlYXRlADIw\nMTYtMDUtMTVUMTQ6MjI6MzQtMDQ6MDDpKSsGAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA1LTE1\nVDE0OjIyOjM0LTA0OjAwmHSTugAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -693,10 +693,10 @@ " 888\n", "\n", " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.org/en/latest/license.html\n", + " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: c779ca42c41a062a6a813e03f2add2d182ca9190\n", - " Date/Time: 2016-05-14 12:59:34\n", + " Git SHA1: 4bec584ddb7d07be7d92ad9d037e8363b2f25614\n", + " Date/Time: 2016-05-15 14:22:34\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -783,20 +783,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 1.4720E+00 seconds\n", - " Reading cross sections = 1.1730E+00 seconds\n", - " Total time in simulation = 1.9211E+01 seconds\n", - " Time in transport only = 1.9108E+01 seconds\n", - " Time in inactive batches = 2.1390E+00 seconds\n", - " Time in active batches = 1.7072E+01 seconds\n", - " Time synchronizing fission bank = 1.0000E-02 seconds\n", - " Sampling source sites = 9.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Total time for initialization = 1.4620E+00 seconds\n", + " Reading cross sections = 1.1520E+00 seconds\n", + " Total time in simulation = 2.1015E+01 seconds\n", + " Time in transport only = 2.0844E+01 seconds\n", + " Time in inactive batches = 2.2260E+00 seconds\n", + " Time in active batches = 1.8789E+01 seconds\n", + " Time synchronizing fission bank = 9.0000E-03 seconds\n", + " Sampling source sites = 5.0000E-03 seconds\n", + " SEND/RECV source sites = 4.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 2.0692E+01 seconds\n", - " Calculation Rate (inactive) = 23375.4 neutrons/second\n", - " Calculation Rate (active) = 11715.1 neutrons/second\n", + " Total time elapsed = 2.2491E+01 seconds\n", + " Calculation Rate (inactive) = 22461.8 neutrons/second\n", + " Calculation Rate (active) = 10644.5 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -949,7 +949,7 @@ ], "source": [ "# Create a MGXS File which can then be written to disk\n", - "mgxs_file = mgxs_lib.create_mg_library(xs_type='macro', domain_names=['fuel', 'zircaloy', 'water'],\n", + "mgxs_file = mgxs_lib.create_mg_library(xs_type='macro', xsdata_names=['fuel', 'zircaloy', 'water'],\n", " xs_ids='2m')\n", "\n", "# Write the file to disk using the default filename of `mgxs.xml`\n", @@ -1068,10 +1068,10 @@ " 888\n", "\n", " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.org/en/latest/license.html\n", + " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: c779ca42c41a062a6a813e03f2add2d182ca9190\n", - " Date/Time: 2016-05-14 12:59:55\n", + " Git SHA1: 4bec584ddb7d07be7d92ad9d037e8363b2f25614\n", + " Date/Time: 2016-05-15 14:22:57\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -1155,20 +1155,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.0000E-02 seconds\n", + " Total time for initialization = 3.5000E-02 seconds\n", " Reading cross sections = 3.0000E-03 seconds\n", - " Total time in simulation = 1.3223E+01 seconds\n", - " Time in transport only = 1.3175E+01 seconds\n", - " Time in inactive batches = 1.1160E+00 seconds\n", - " Time in active batches = 1.2107E+01 seconds\n", - " Time synchronizing fission bank = 9.0000E-03 seconds\n", - " Sampling source sites = 8.0000E-03 seconds\n", + " Total time in simulation = 1.2599E+01 seconds\n", + " Time in transport only = 1.2565E+01 seconds\n", + " Time in inactive batches = 1.1220E+00 seconds\n", + " Time in active batches = 1.1477E+01 seconds\n", + " Time synchronizing fission bank = 6.0000E-03 seconds\n", + " Sampling source sites = 5.0000E-03 seconds\n", " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.3272E+01 seconds\n", - " Calculation Rate (inactive) = 44802.9 neutrons/second\n", - " Calculation Rate (active) = 16519.4 neutrons/second\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for finalization = 1.0000E-03 seconds\n", + " Total time elapsed = 1.2644E+01 seconds\n", + " Calculation Rate (inactive) = 44563.3 neutrons/second\n", + " Calculation Rate (active) = 17426.2 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1355,7 +1355,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 40, @@ -1366,7 +1366,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/usersguide/mgxs_library.rst b/docs/source/usersguide/mgxs_library.rst index 8628bef4e0..98a9e84859 100644 --- a/docs/source/usersguide/mgxs_library.rst +++ b/docs/source/usersguide/mgxs_library.rst @@ -22,9 +22,9 @@ materials. .. _XML: http://www.w3.org/XML/ ------------------------------------------------- +-------------------------------------- MGXS Library Specification -- mgxs.xml ------------------------------------------------- +-------------------------------------- The multi-group library meta-data is contained within the groups_, group_structure_, and inverse_velocities_ elements. @@ -33,7 +33,7 @@ The actual multi-group data itself is contained within the xsdata_ element. .. _groups: ```` Element ----------------------------------- +-------------------- The ```` element has no attributes and simply provides the number of energy groups contained within the library. diff --git a/examples/python/pincell_multigroup/build-xml.py b/examples/python/pincell_multigroup/build-xml.py index c7d6dfc8be..5ac5b376a3 100644 --- a/examples/python/pincell_multigroup/build-xml.py +++ b/examples/python/pincell_multigroup/build-xml.py @@ -1,4 +1,3 @@ -import numpy as np import openmc import openmc.mgxs @@ -12,7 +11,7 @@ inactive = 10 particles = 1000 ############################################################################### -# Exporting to OpenMC mg_cross_sections.xml file +# Exporting to OpenMC mgxs.xml file ############################################################################### # Instantiate the energy group data @@ -22,45 +21,43 @@ groups = openmc.mgxs.EnergyGroups(group_edges=[1E-11, 0.0635E-6, 10.0E-6, # Instantiate the 7-group (C5G7) cross section data uo2_xsdata = openmc.XSdata('UO2.300K', groups) uo2_xsdata.order = 0 -uo2_xsdata.total = np.array([0.1779492, 0.3298048, 0.4803882, 0.5543674, - 0.3118013, 0.3951678, 0.5644058]) -uo2_xsdata.absorption = np.array([8.0248E-03, 3.7174E-03, 2.6769E-02, 9.6236E-02, - 3.0020E-02, 1.1126E-01, 2.8278E-01]) -scatter = [[[0.1275370, 0.0423780, 0.0000094, 0.0000000, 0.0000000, 0.0000000, 0.0000000], - [0.0000000, 0.3244560, 0.0016314, 0.0000000, 0.0000000, 0.0000000, 0.0000000], - [0.0000000, 0.0000000, 0.4509400, 0.0026792, 0.0000000, 0.0000000, 0.0000000], - [0.0000000, 0.0000000, 0.0000000, 0.4525650, 0.0055664, 0.0000000, 0.0000000], - [0.0000000, 0.0000000, 0.0000000, 0.0001253, 0.2714010, 0.0102550, 0.0000000], - [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0012968, 0.2658020, 0.0168090], - [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0085458, 0.2730800]]] -uo2_xsdata.scatter = np.array(scatter[:][:]) -uo2_xsdata.fission = np.array([7.21206E-03, 8.19301E-04, 6.45320E-03, - 1.85648E-02, 1.78084E-02, 8.30348E-02, - 2.16004E-01]) -uo2_xsdata.nu_fission = np.array([2.005998E-02, 2.027303E-03, 1.570599E-02, - 4.518301E-02, 4.334208E-02, 2.020901E-01, - 5.257105E-01]) -uo2_xsdata.chi = np.array([5.8791E-01, 4.1176E-01, 3.3906E-04, 1.1761E-07, - 0.0000E+00, 0.0000E+00, 0.0000E+00]) +uo2_xsdata.total = [0.1779492, 0.3298048, 0.4803882, 0.5543674, + 0.3118013, 0.3951678, 0.5644058] +uo2_xsdata.absorption = [8.0248E-03, 3.7174E-03, 2.6769E-02, 9.6236E-02, + 3.0020E-02, 1.1126E-01, 2.8278E-01] +uo2_xsdata.scatter = [[[0.1275370, 0.0423780, 0.0000094, 0.0000000, 0.0000000, 0.0000000, 0.0000000], + [0.0000000, 0.3244560, 0.0016314, 0.0000000, 0.0000000, 0.0000000, 0.0000000], + [0.0000000, 0.0000000, 0.4509400, 0.0026792, 0.0000000, 0.0000000, 0.0000000], + [0.0000000, 0.0000000, 0.0000000, 0.4525650, 0.0055664, 0.0000000, 0.0000000], + [0.0000000, 0.0000000, 0.0000000, 0.0001253, 0.2714010, 0.0102550, 0.0000000], + [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0012968, 0.2658020, 0.0168090], + [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0085458, 0.2730800]]] +uo2_xsdata.fission = [7.21206E-03, 8.19301E-04, 6.45320E-03, + 1.85648E-02, 1.78084E-02, 8.30348E-02, + 2.16004E-01] +uo2_xsdata.nu_fission = [2.005998E-02, 2.027303E-03, 1.570599E-02, + 4.518301E-02, 4.334208E-02, 2.020901E-01, + 5.257105E-01] +uo2_xsdata.chi = [5.8791E-01, 4.1176E-01, 3.3906E-04, 1.1761E-07, + 0.0000E+00, 0.0000E+00, 0.0000E+00] h2o_xsdata = openmc.XSdata('LWTR.300K', groups) h2o_xsdata.order = 0 -h2o_xsdata.total = np.array([0.15920605, 0.412969593, 0.59030986, 0.58435, - 0.718, 1.2544497, 2.650379]) -h2o_xsdata.absorption = np.array([6.0105E-04, 1.5793E-05, 3.3716E-04, - 1.9406E-03, 5.7416E-03, 1.5001E-02, - 3.7239E-02]) -scatter = [[[0.0444777, 0.1134000, 0.0007235, 0.0000037, 0.0000001, 0.0000000, 0.0000000], - [0.0000000, 0.2823340, 0.1299400, 0.0006234, 0.0000480, 0.0000074, 0.0000010], - [0.0000000, 0.0000000, 0.3452560, 0.2245700, 0.0169990, 0.0026443, 0.0005034], - [0.0000000, 0.0000000, 0.0000000, 0.0910284, 0.4155100, 0.0637320, 0.0121390], - [0.0000000, 0.0000000, 0.0000000, 0.0000714, 0.1391380, 0.5118200, 0.0612290], - [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0022157, 0.6999130, 0.5373200], - [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.1324400, 2.4807000]]] -h2o_xsdata.scatter = np.array(scatter) +h2o_xsdata.total = [0.15920605, 0.412969593, 0.59030986, 0.58435, + 0.718, 1.2544497, 2.650379] +h2o_xsdata.absorption = [6.0105E-04, 1.5793E-05, 3.3716E-04, + 1.9406E-03, 5.7416E-03, 1.5001E-02, + 3.7239E-02] +h2o_xsdata.scatter = [[[0.0444777, 0.1134000, 0.0007235, 0.0000037, 0.0000001, 0.0000000, 0.0000000], + [0.0000000, 0.2823340, 0.1299400, 0.0006234, 0.0000480, 0.0000074, 0.0000010], + [0.0000000, 0.0000000, 0.3452560, 0.2245700, 0.0169990, 0.0026443, 0.0005034], + [0.0000000, 0.0000000, 0.0000000, 0.0910284, 0.4155100, 0.0637320, 0.0121390], + [0.0000000, 0.0000000, 0.0000000, 0.0000714, 0.1391380, 0.5118200, 0.0612290], + [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0022157, 0.6999130, 0.5373200], + [0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.1324400, 2.4807000]]] mg_cross_sections_file = openmc.MGXSLibrary(groups) -mg_cross_sections_file.add_xsdatas([uo2_xsdata,h2o_xsdata]) +mg_cross_sections_file.add_xsdatas([uo2_xsdata, h2o_xsdata]) mg_cross_sections_file.export_to_xml() @@ -134,7 +131,7 @@ geometry.export_to_xml() # Instantiate a Settings object, set all runtime parameters, and export to XML settings_file = openmc.Settings() settings_file.energy_mode = "multi-group" -settings_file.cross_sections = "./mg_cross_sections.xml" +settings_file.cross_sections = "./mgxs.xml" settings_file.batches = batches settings_file.inactive = inactive settings_file.particles = particles diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 44746e209d..586302a4b5 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -247,8 +247,7 @@ class Library(object): @domain_type.setter def domain_type(self, domain_type): - cv.check_value('domain type', domain_type, - tuple(openmc.mgxs.DOMAIN_TYPES)) + cv.check_value('domain type', domain_type, openmc.mgxs.DOMAIN_TYPES) self._domain_type = domain_type @domains.setter @@ -722,8 +721,8 @@ class Library(object): # Load and return pickled Library object return pickle.load(open(full_filename, 'rb')) - def get_xsdata(self, domain, domain_name, nuclide='total', xs_type='macro', - xs_id='1m', order=-1): + def get_xsdata(self, domain, xsdata_name, nuclide='total', xs_type='macro', + xs_id='1m', order=None): """Generates an openmc.XSdata object describing a multi-group cross section data set for eventual combination in to an openmc.MGXSLibrary object (i.e., the library). @@ -732,7 +731,7 @@ class Library(object): ---------- domain : openmc.Material or openmc.Cell or openmc.Universe The domain for spatial homogenization - domain_name : str + xsdata_name : str Name to apply to the "xsdata" entry produced by this method nuclide : str A nuclide name string (e.g., 'U-235'). Defaults to 'total' to @@ -743,7 +742,7 @@ class Library(object): nuclide this will be set to 'macro' regardless. xs_ids : str Cross section set identifier. Defaults to '1m'. - order : Scattering order for this dataset entry. Default is -1, + order : Scattering order for this dataset entry. Default is None, which will force the XSdata object to use whatever the maximum order available. @@ -766,11 +765,11 @@ class Library(object): cv.check_type('domain', domain, (openmc.Material, openmc.Cell, openmc.Cell)) - cv.check_type('domain_name', domain_name, basestring) + cv.check_type('xsdata_name', xsdata_name, basestring) cv.check_type('nuclide', nuclide, basestring) cv.check_value('xs_type', xs_type, ['macro', 'micro']) cv.check_type('xs_id', xs_id, basestring) - cv.check_type('order', order, Integral) + cv.check_type('order', order, (type(None), Integral)) cv.check_greater_than('order', order, -1, equality=True) # Make sure statepoint has been loaded @@ -784,12 +783,18 @@ class Library(object): xs_type = 'macro' # Build & add metadata to XSdata object - name = domain_name + name = xsdata_name if nuclide is not 'total': name += '_' + nuclide name += '.' + xs_id xsdata = openmc.XSdata(name, self.energy_groups) - xsdata.order = order + if order is 0: + xsdata.order = order + else: + msg = 'Generating anisotropic scattering from openmc.Library' \ + 'objects has not yet been implemented.' + raise NotImplementedError(msg) + if nuclide is not 'total': xsdata.zaid = self._nuclides[nuclide][0] xsdata.awr = self._nuclides[nuclide][1] @@ -852,7 +857,7 @@ class Library(object): return xsdata - def create_mg_library(self, xs_type='macro', domain_names=None, + def create_mg_library(self, xs_type='macro', xsdata_names=None, xs_ids=None): """Creates an openmc.MGXSLibrary object to contain the MGXS data for the Multi-Group mode of OpenMC. @@ -863,7 +868,7 @@ class Library(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. If the Library object is not tallied by nuclide this will be set to 'macro' regardless. - domain_names : Iterable of str + xsdata_names : Iterable of str List of names to apply to the "xsdata" entries in the resultant mgxs data file. Defaults to 'set1', 'set2', ... xs_ids : str or Iterable of str @@ -894,8 +899,8 @@ class Library(object): self.check_library_for_openmc_mgxs() cv.check_value('xs_type', xs_type, ['macro', 'micro']) - if domain_names is not None: - cv.check_iterable_type('domain_names', domain_names, basestring) + if xsdata_names is not None: + cv.check_iterable_type('xsdata_names', xsdata_names, basestring) if xs_ids is not None: if isinstance(xs_ids, basestring): # If we only have a string lets convert it now to a list @@ -927,14 +932,14 @@ class Library(object): nuclides = ['total'] for nuclide in nuclides: # Build & add metadata to XSdata object - if domain_names is None: - name = 'set' + str(i + 1) + if xsdata_names is None: + xsdata_name = 'set' + str(i + 1) else: - name = domain_names[i] + xsdata_name = xsdata_names[i] if nuclide is not 'total': - name += '_' + nuclide + xsdata_name += '_' + nuclide - xsdata = self.get_xsdata(domain, name, nuclide=nuclide, + xsdata = self.get_xsdata(domain, xsdata_name, nuclide=nuclide, xs_type=xs_type, xs_id=xs_ids[i], order=order) @@ -952,14 +957,17 @@ class Library(object): The rules to check include: - Either total or transport should be present. + - Both can be available if one wants, but we should use whatever corresponds to Library.correction (if P0: transport) + - Absorption and total (or transport) are required. - A nu-fission cross section and chi values are not required as a fixed source problem could be the target. - Fission and kappa-fission are not required as they are only needed to support tallies the user may wish to request. - A nu-scatter matrix is required. + - Having both nu-scatter (of any order) and scatter (at least isotropic) matrices is preferred - If only nu-scatter, need total (not transport), to diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index f8a712f683..7cfec2f54c 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -283,7 +283,7 @@ class MGXS(object): @domain_type.setter def domain_type(self, domain_type): - cv.check_value('domain type', domain_type, tuple(DOMAIN_TYPES)) + cv.check_value('domain type', domain_type, DOMAIN_TYPES) self._domain_type = domain_type @energy_groups.setter diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index e59ef2d61d..b7c61595ff 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -346,6 +346,16 @@ class XSdata(object): self.energy_groups.num_groups, self.energy_groups.num_groups) + @property + def pn_matrix_shape(self): + if self.representation is 'isotropic': + return (self.num_orders, self.energy_groups.num_groups, + self.energy_groups.num_groups) + elif self.representation is 'angle': + return (self.num_polar, self.num_azimuthal, self.num_orders, + self.energy_groups.num_groups, + self.energy_groups.num_groups) + @name.setter def name(self, name): check_type('name for XSdata', name, basestring) @@ -449,38 +459,49 @@ class XSdata(object): @total.setter def total(self, total): - check_type('total', total, np.ndarray, expected_iter_type=Real) - check_value('total shape', total.shape, self.vector_shape) + check_type('total', total, Iterable, expected_iter_type=Real) + # Convert to a numpy array so we can easily get the shape for + # checking + nptotal = np.array(total) + check_value('total shape', nptotal.shape, [self.vector_shape]) - self._total = total + self._total = nptotal @absorption.setter def absorption(self, absorption): - check_type('absorption', absorption, np.ndarray, - expected_iter_type=Real) - check_value('absorption shape', absorption.shape, self.vector_shape) + check_type('absorption', absorption, Iterable, expected_iter_type=Real) + # Convert to a numpy array so we can easily get the shape for + # checking + npabsorption = np.array(absorption) + check_value('absorption shape', npabsorption.shape, + [self.vector_shape]) - self._absorption = absorption + self._absorption = npabsorption @fission.setter def fission(self, fission): - check_type('fission', fission, np.ndarray, - expected_iter_type=Real) - check_value('fission shape', fission.shape, self.vector_shape) + check_type('fission', fission, Iterable, expected_iter_type=Real) + # Convert to a numpy array so we can easily get the shape for + # checking + npfission = np.array(fission) + check_value('fission shape', npfission.shape, [self.vector_shape]) - self._fission = fission + self._fission = npfission if np.sum(self._fission) > 0.0: self._fissionable = True @kappa_fission.setter def kappa_fission(self, kappa_fission): - check_type('kappa_fission', kappa_fission, np.ndarray, + check_type('kappa_fission', kappa_fission, Iterable, expected_iter_type=Real) - check_value('kappa fission shape', kappa_fission.shape, - self.vector_shape) + # Convert to a numpy array so we can easily get the shape for + # checking + npkappa_fission = np.array(kappa_fission) + check_value('kappa fission shape', npkappa_fission.shape, + [self.vector_shape]) - self._kappa_fission = kappa_fission + self._kappa_fission = npkappa_fission if np.sum(self._kappa_fission) > 0.0: self._fissionable = True @@ -493,30 +514,39 @@ class XSdata(object): 'matrix' raise ValueError(msg) - check_type('chi', chi, np.ndarray, expected_iter_type=Real) - check_value('chi shape', chi.shape, self.vector_shape) + check_type('chi', chi, Iterable, expected_iter_type=Real) + # Convert to a numpy array so we can easily get the shape for + # checking + npchi = np.array(chi) + check_value('chi shape', npchi.shape, [self.vector_shape]) - self._chi = chi + self._chi = npchi if self._use_chi is not None: self._use_chi = True @scatter.setter def scatter(self, scatter): - check_type('scatter', scatter, np.ndarray, expected_iter_type=Real, - max_depth=len(scatter.shape)) - check_value('scatter shape', scatter.shape, self.pn_matrix_shape) + # Convert to a numpy array so we can easily get the shape for + # checking + npscatter = np.array(scatter) + check_iterable_type('scatter', npscatter, Real, + max_depth=len(npscatter.shape)) + check_value('scatter shape', npscatter.shape, [self.pn_matrix_shape]) - self._scatter = scatter + self._scatter = npscatter @multiplicity.setter def multiplicity(self, multiplicity): - check_type('multiplicity', multiplicity, np.ndarray, - expected_iter_type=Real, max_depth=len(multiplicity.shape)) - check_value('multiplicity shape', multiplicity.shape, - self.matrix_shape) + # Convert to a numpy array so we can easily get the shape for + # checking + npmultiplicity = np.array(multiplicity) + check_iterable_type('multiplicity', npmultiplicity, Real, + max_depth=len(npmultiplicity.shape)) + check_value('multiplicity shape', npmultiplicity.shape, + [self.matrix_shape]) - self._multiplicity = multiplicity + self._multiplicity = npmultiplicity @nu_fission.setter def nu_fission(self, nu_fission): @@ -530,27 +560,31 @@ class XSdata(object): # chi already has been set. If not, we just check that this is OK # and set the use_chi flag accordingly - check_type('nu_fission', nu_fission, np.ndarray, - expected_iter_type=Real, max_depth=len(nu_fission.shape)) + # Convert to a numpy array so we can easily get the shape for + # checking + npnu_fission = np.array(nu_fission) + + check_iterable_type('nu_fission', npnu_fission, Real, + max_depth=len(npnu_fission.shape)) if self._use_chi is not None: if self._use_chi: - check_value('nu_fission shape', nu_fission.shape, - self.vector_shape) + check_value('nu_fission shape', npnu_fission.shape, + [self.vector_shape]) else: - check_value('nu_fission shape', nu_fission.shape, - self.matrix_shape) + check_value('nu_fission shape', npnu_fission.shape, + [self.matrix_shape]) else: - check_value('nu_fission shape', nu_fission.shape, - (self.vector_shape, self.matrix_shape)) + check_value('nu_fission shape', npnu_fission.shape, + [self.vector_shape, self.matrix_shape]) # Find out if we have a nu-fission matrix or vector # and set a flag to allow other methods to check this later. - if nu_fission.shape == self.vector_shape: + if npnu_fission.shape == self.vector_shape: self._use_chi = True else: self._use_chi = False - self._nu_fission = nu_fission + self._nu_fission = npnu_fission if np.sum(self._nu_fission) > 0.0: self._fissionable = True From 142033c2607f400fbd365bd79a8b2f1a07177b22 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 15 May 2016 14:56:00 -0400 Subject: [PATCH 549/650] minor edits per @paulromano comments --- openmc/mgxs/library.py | 1 + openmc/mgxs_library.py | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 586302a4b5..45b502be48 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -956,6 +956,7 @@ class Library(object): a MGXS Library for OpenMC's Multi-Group mode. The rules to check include: + - Either total or transport should be present. - Both can be available if one wants, but we should diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index b7c61595ff..7a2c0e7b74 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -103,7 +103,7 @@ class XSdata(object): 1000*(atomic number) + mass number. As an example, the zaid of U-235 would be 92235. awr : float - Atomic-weight-ratio of an isotope. That is, the ratio of the mass + Atomic weight ratio of an isotope. That is, the ratio of the mass of the isotope to the mass of a single neutron. kT : float Temperature (in units of MeV). @@ -390,14 +390,14 @@ class XSdata(object): def zaid(self, zaid): # Check type and value check_type('zaid', zaid, Integral) - check_greater_than('zaid', zaid, 0, equality=False) + check_greater_than('zaid', zaid, 0) self._zaid = zaid @awr.setter def awr(self, awr): # Check validity of type and that the awr value is > 0 check_type('awr', awr, Real) - check_greater_than('awr', awr, 0.0, equality=False) + check_greater_than('awr', awr, 0.0) self._awr = awr @kT.setter @@ -462,7 +462,7 @@ class XSdata(object): check_type('total', total, Iterable, expected_iter_type=Real) # Convert to a numpy array so we can easily get the shape for # checking - nptotal = np.array(total) + nptotal = np.asarray(total) check_value('total shape', nptotal.shape, [self.vector_shape]) self._total = nptotal @@ -472,7 +472,7 @@ class XSdata(object): check_type('absorption', absorption, Iterable, expected_iter_type=Real) # Convert to a numpy array so we can easily get the shape for # checking - npabsorption = np.array(absorption) + npabsorption = np.asarray(absorption) check_value('absorption shape', npabsorption.shape, [self.vector_shape]) @@ -483,7 +483,7 @@ class XSdata(object): check_type('fission', fission, Iterable, expected_iter_type=Real) # Convert to a numpy array so we can easily get the shape for # checking - npfission = np.array(fission) + npfission = np.asarray(fission) check_value('fission shape', npfission.shape, [self.vector_shape]) self._fission = npfission @@ -497,7 +497,7 @@ class XSdata(object): expected_iter_type=Real) # Convert to a numpy array so we can easily get the shape for # checking - npkappa_fission = np.array(kappa_fission) + npkappa_fission = np.asarray(kappa_fission) check_value('kappa fission shape', npkappa_fission.shape, [self.vector_shape]) @@ -517,7 +517,7 @@ class XSdata(object): check_type('chi', chi, Iterable, expected_iter_type=Real) # Convert to a numpy array so we can easily get the shape for # checking - npchi = np.array(chi) + npchi = np.asarray(chi) check_value('chi shape', npchi.shape, [self.vector_shape]) self._chi = npchi @@ -529,7 +529,7 @@ class XSdata(object): def scatter(self, scatter): # Convert to a numpy array so we can easily get the shape for # checking - npscatter = np.array(scatter) + npscatter = np.asarray(scatter) check_iterable_type('scatter', npscatter, Real, max_depth=len(npscatter.shape)) check_value('scatter shape', npscatter.shape, [self.pn_matrix_shape]) @@ -540,7 +540,7 @@ class XSdata(object): def multiplicity(self, multiplicity): # Convert to a numpy array so we can easily get the shape for # checking - npmultiplicity = np.array(multiplicity) + npmultiplicity = np.asarray(multiplicity) check_iterable_type('multiplicity', npmultiplicity, Real, max_depth=len(npmultiplicity.shape)) check_value('multiplicity shape', npmultiplicity.shape, @@ -562,7 +562,7 @@ class XSdata(object): # Convert to a numpy array so we can easily get the shape for # checking - npnu_fission = np.array(nu_fission) + npnu_fission = np.asarray(nu_fission) check_iterable_type('nu_fission', npnu_fission, Real, max_depth=len(npnu_fission.shape)) @@ -595,7 +595,7 @@ class XSdata(object): Parameters ---------- - total: {openmc.mgxs.TotalXS, openmc.mgxs.TransportXS} + total: openmc.mgxs.TotalXS or openmc.mgxs.TransportXS MGXS Object containing the total or transport cross section for the domain of interest. nuclide : str From e13bd5c853b4251ef5ef8f46f0c1221fdde0442f Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 15 May 2016 19:13:22 -0400 Subject: [PATCH 550/650] Fixed per @paulromano comments --- openmc/mgxs/library.py | 18 +++++++--------- openmc/mgxs_library.py | 47 ++++++++++++++++++++++++++++++++++++++++-- src/summary.F90 | 2 +- 3 files changed, 53 insertions(+), 14 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 45b502be48..baa4d63047 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -4,9 +4,10 @@ import copy import pickle from numbers import Integral from collections import OrderedDict -import numpy as np from warnings import warn +import numpy as np + import openmc import openmc.mgxs import openmc.checkvalue as cv @@ -759,7 +760,7 @@ class Library(object): See also -------- - Library.create_mg_library(...) + Library.create_mg_library() """ @@ -890,7 +891,7 @@ class Library(object): See also -------- - Library.dump_to_file(mgxs_lib, filename, directory) + Library.dump_to_file() """ @@ -922,9 +923,7 @@ class Library(object): # support for higher orders are included in openmc.mgxs order = 0 - # Build storage for our XSdata objects - xsdatas = [] - + # Create the xsdata object and add it to the mgxs_file for i, domain in enumerate(self.domains): if self.by_nuclide: nuclides = list(domain.get_all_nuclides().keys()) @@ -943,10 +942,7 @@ class Library(object): xs_type=xs_type, xs_id=xs_ids[i], order=order) - xsdatas.append(xsdata) - - # Add XSdatas to file - mgxs_file.add_xsdatas(xsdatas) + mgxs_file.add_xsdata(xsdata) return mgxs_file @@ -977,7 +973,7 @@ class Library(object): See also -------- - Library.create_mg_library(...) + Library.create_mg_library() """ diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 7a2c0e7b74..408175f43b 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -367,7 +367,7 @@ class XSdata(object): check_type('energy_groups', energy_groups, openmc.mgxs.EnergyGroups) if energy_group.group_edges is None: - msg = 'Unable to assign an EnergyGroups object ' + \ + msg = 'Unable to assign an EnergyGroups object ' \ 'with uninitialized group edges' raise ValueError(msg) self._energy_groups = energy_groups @@ -518,7 +518,10 @@ class XSdata(object): # Convert to a numpy array so we can easily get the shape for # checking npchi = np.asarray(chi) - check_value('chi shape', npchi.shape, [self.vector_shape]) + # Check the shape + if npchi.shape != self.vector_shape: + msg = 'Provided chi iterable does not have the expected shape.' + raise ValueError(msg) self._chi = npchi @@ -605,6 +608,11 @@ class XSdata(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + See also + -------- + openmc.mgxs.Library.create_mg_library() + openmc.mgxs.Library.get_xsdata + """ check_type('total', total, (openmc.mgxs.TotalXS, @@ -636,6 +644,11 @@ class XSdata(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + See also + -------- + openmc.mgxs.Library.create_mg_library() + openmc.mgxs.Library.get_xsdata + """ check_type('absorption', absorption, openmc.mgxs.AbsorptionXS) @@ -667,6 +680,11 @@ class XSdata(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + See also + -------- + openmc.mgxs.Library.create_mg_library() + openmc.mgxs.Library.get_xsdata + """ check_type('fission', fission, openmc.mgxs.FissionXS) @@ -699,6 +717,11 @@ class XSdata(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + See also + -------- + openmc.mgxs.Library.create_mg_library() + openmc.mgxs.Library.get_xsdata + """ # The NuFissionXS class does not have the capability to produce @@ -740,6 +763,11 @@ class XSdata(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + See also + -------- + openmc.mgxs.Library.create_mg_library() + openmc.mgxs.Library.get_xsdata + """ check_type('k_fission', k_fission, openmc.mgxs.KappaFissionXS) @@ -770,6 +798,11 @@ class XSdata(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + See also + -------- + openmc.mgxs.Library.create_mg_library() + openmc.mgxs.Library.get_xsdata + """ if self._use_chi is not None: @@ -810,6 +843,11 @@ class XSdata(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + See also + -------- + openmc.mgxs.Library.create_mg_library() + openmc.mgxs.Library.get_xsdata + """ check_type('scatter', scatter, openmc.mgxs.ScatterMatrixXS) @@ -851,6 +889,11 @@ class XSdata(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + See also + -------- + openmc.mgxs.Library.create_mg_library() + openmc.mgxs.Library.get_xsdata + """ check_type('nuscatter', nuscatter, openmc.mgxs.NuScatterMatrixXS) diff --git a/src/summary.F90 b/src/summary.F90 index 9defcc92fd..aabf6c22b2 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -118,7 +118,7 @@ contains real(8), allocatable :: awrs(:) integer, allocatable :: zaids(:) - ! Use H5LT interface to write useful data from nuclide objects + ! Write useful data from nuclide objects nuclide_group = create_group(file_id, "nuclides") call write_dataset(nuclide_group, "n_nuclides_total", n_nuclides_total) From 704022dccc43f19744db123c5d4e0fdb7cea7ff9 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Mon, 16 May 2016 11:32:55 -0400 Subject: [PATCH 551/650] Removed docstring on MGXS.xs_tally to eliminate sphinx cross-reference issues --- openmc/mgxs/mgxs.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 3e24f16bc6..09f1de3aa8 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -297,8 +297,6 @@ class MGXS(object): @property def xs_tally(self): - """Computes multi-group cross section using OpenMC tally arithmetic.""" - if self._xs_tally is None: if self.tallies is None: msg = 'Unable to get xs_tally since tallies have ' \ From 1e86848ac62a7aa44fdccecbba9d4a12269fa81b Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Mon, 16 May 2016 11:59:12 -0400 Subject: [PATCH 552/650] Removed docstrings on MGXS.tallies and Chi.xs_tally to eliminate sphinx issues --- openmc/mgxs/mgxs.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 09f1de3aa8..56bb9ea89b 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -248,7 +248,6 @@ class MGXS(object): @property def tallies(self): - """Construct the OpenMC tallies needed to compute the cross section.""" # Instantiate tallies if they do not exist if self._tallies is None: @@ -3298,7 +3297,6 @@ class Chi(MGXS): @property def xs_tally(self): - """Computes chi fission spectrum using OpenMC tally arithmetic.""" if self._xs_tally is None: nu_fission_in = self.tallies['nu-fission-in'] From 970cc4130a6ff85ecfd3757b2d0e818144bdd39e Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 16 May 2016 16:28:57 -0500 Subject: [PATCH 553/650] Fix hexagon region orientation --- openmc/surface.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmc/surface.py b/openmc/surface.py index 84028c1afa..52f0955f00 100644 --- a/openmc/surface.py +++ b/openmc/surface.py @@ -1527,7 +1527,7 @@ def make_hexagon_region(edge_length=1., orientation='y'): l = edge_length - if orientation == 'x': + if orientation == 'y': right = XPlane(x0=sqrt(3.)/2.*l) left = XPlane(x0=-sqrt(3.)/2.*l) c = sqrt(3.)/3. @@ -1537,7 +1537,7 @@ def make_hexagon_region(edge_length=1., orientation='y'): ll = Plane(A=c, B=1., D=-l) # y = -x/sqrt(3) - a return Intersection(-right, +left, -ur, -ul, +lr, +ll) - elif orientation == 'y': + elif orientation == 'x': top = YPlane(y0=sqrt(3.)/2.*l) bottom = YPlane(y0=-sqrt(3.)/2.*l) c = sqrt(3.) From 16886a41d95de450cbc0474833058601f17abc61 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Tue, 17 May 2016 05:35:55 -0400 Subject: [PATCH 554/650] Incorporating Legendre scattering to Library and Mgxs_library modules (and example nbook). --- .../pythonapi/examples/mgxs-part-iv.ipynb | 258 ++++++++++-------- openmc/mgxs/library.py | 40 ++- openmc/mgxs_library.py | 42 ++- 3 files changed, 198 insertions(+), 142 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb index 4509f0fc83..e1d61cedcc 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb @@ -433,7 +433,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -512,7 +512,7 @@ "outputs": [], "source": [ "# Specify multi-group cross section types to compute\n", - "mgxs_lib.mgxs_types = ['transport', 'absorption', 'nu-fission', 'fission',\n", + "mgxs_lib.mgxs_types = ['total', 'absorption', 'nu-fission', 'fission',\n", " 'nu-scatter matrix', 'scatter matrix', 'chi']" ] }, @@ -565,7 +565,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now that the `Library` has been setup, lets make sure it contains the types of cross sections which meet the needs of OpenMC's multi-group solver. Note that this step is done automatically when writing the Multi-Group Library file later in the process (as part of the `mgxs_lib.write_mg_library()`), but it is a good practice to also run this before spending all the time running OpenMC to generate the cross sections." + "Now we will set the scattering order that we wish to use. For this problem we will use P3 scattering." ] }, { @@ -574,6 +574,34 @@ "metadata": { "collapsed": false }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/nelsonag/git/openmc/openmc/mgxs/library.py:320: RuntimeWarning: The P0 correction will be ignored since the scattering order 0 is greater than zero\n", + " warnings.warn(msg, RuntimeWarning)\n" + ] + } + ], + "source": [ + "# Set the Legendre order to 3 for P3 scattering\n", + "mgxs_lib.legendre_order = 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that the `Library` has been setup, lets make sure it contains the types of cross sections which meet the needs of OpenMC's multi-group solver. Note that this step is done automatically when writing the Multi-Group Library file later in the process (as part of the `mgxs_lib.write_mg_library()`), but it is a good practice to also run this before spending all the time running OpenMC to generate the cross sections." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "# Check the library - if no errors are raised, then the library is satisfactory.\n", @@ -589,9 +617,9 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ @@ -610,7 +638,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "metadata": { "collapsed": true }, @@ -630,7 +658,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "metadata": { "collapsed": true }, @@ -658,7 +686,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "metadata": { "collapsed": true }, @@ -670,7 +698,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "metadata": { "collapsed": false }, @@ -695,8 +723,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 4bec584ddb7d07be7d92ad9d037e8363b2f25614\n", - " Date/Time: 2016-05-15 14:22:34\n", + " Git SHA1: 058ba68895a2f880402fda3d58cfb14b162931d9\n", + " Date/Time: 2016-05-17 05:32:34\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -783,20 +811,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 1.4620E+00 seconds\n", - " Reading cross sections = 1.1520E+00 seconds\n", - " Total time in simulation = 2.1015E+01 seconds\n", - " Time in transport only = 2.0844E+01 seconds\n", - " Time in inactive batches = 2.2260E+00 seconds\n", - " Time in active batches = 1.8789E+01 seconds\n", - " Time synchronizing fission bank = 9.0000E-03 seconds\n", - " Sampling source sites = 5.0000E-03 seconds\n", - " SEND/RECV source sites = 4.0000E-03 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", + " Total time for initialization = 1.4400E+00 seconds\n", + " Reading cross sections = 1.1340E+00 seconds\n", + " Total time in simulation = 1.8207E+01 seconds\n", + " Time in transport only = 1.8125E+01 seconds\n", + " Time in inactive batches = 2.1170E+00 seconds\n", + " Time in active batches = 1.6090E+01 seconds\n", + " Time synchronizing fission bank = 3.0000E-03 seconds\n", + " Sampling source sites = 2.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 2.2491E+01 seconds\n", - " Calculation Rate (inactive) = 22461.8 neutrons/second\n", - " Calculation Rate (active) = 10644.5 neutrons/second\n", + " Total time elapsed = 1.9657E+01 seconds\n", + " Calculation Rate (inactive) = 23618.3 neutrons/second\n", + " Calculation Rate (active) = 12430.1 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -814,7 +842,7 @@ "0" ] }, - "execution_count": 26, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -833,7 +861,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -858,7 +886,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 29, "metadata": { "collapsed": false }, @@ -877,7 +905,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 30, "metadata": { "collapsed": false }, @@ -896,7 +924,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 31, "metadata": { "collapsed": false }, @@ -929,7 +957,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 32, "metadata": { "collapsed": false }, @@ -969,7 +997,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 33, "metadata": { "collapsed": false }, @@ -1019,7 +1047,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 34, "metadata": { "collapsed": true }, @@ -1044,7 +1072,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 35, "metadata": { "collapsed": false, "scrolled": true @@ -1070,8 +1098,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 4bec584ddb7d07be7d92ad9d037e8363b2f25614\n", - " Date/Time: 2016-05-15 14:22:57\n", + " Git SHA1: 058ba68895a2f880402fda3d58cfb14b162931d9\n", + " Date/Time: 2016-05-17 05:32:54\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -1096,56 +1124,56 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 1.02073 \n", - " 2/1 1.04004 \n", - " 3/1 1.02324 \n", - " 4/1 1.01690 \n", - " 5/1 1.03702 \n", - " 6/1 1.01796 \n", - " 7/1 1.01779 \n", - " 8/1 1.02764 \n", - " 9/1 1.03324 \n", - " 10/1 1.01465 \n", - " 11/1 1.02268 \n", - " 12/1 1.01598 1.01933 +/- 0.00335\n", - " 13/1 1.01993 1.01953 +/- 0.00194\n", - " 14/1 1.01779 1.01910 +/- 0.00144\n", - " 15/1 1.01014 1.01731 +/- 0.00211\n", - " 16/1 1.04059 1.02119 +/- 0.00425\n", - " 17/1 1.04877 1.02513 +/- 0.00533\n", - " 18/1 1.05504 1.02887 +/- 0.00594\n", - " 19/1 1.02601 1.02855 +/- 0.00525\n", - " 20/1 1.04347 1.03004 +/- 0.00493\n", - " 21/1 1.01703 1.02886 +/- 0.00461\n", - " 22/1 1.02628 1.02864 +/- 0.00421\n", - " 23/1 1.02598 1.02844 +/- 0.00388\n", - " 24/1 1.05341 1.03022 +/- 0.00401\n", - " 25/1 1.02201 1.02967 +/- 0.00377\n", - " 26/1 1.00758 1.02829 +/- 0.00379\n", - " 27/1 1.00720 1.02705 +/- 0.00377\n", - " 28/1 1.03098 1.02727 +/- 0.00356\n", - " 29/1 1.03022 1.02743 +/- 0.00337\n", - " 30/1 1.01694 1.02690 +/- 0.00324\n", - " 31/1 0.99064 1.02518 +/- 0.00353\n", - " 32/1 0.99495 1.02380 +/- 0.00364\n", - " 33/1 1.03220 1.02417 +/- 0.00350\n", - " 34/1 1.02399 1.02416 +/- 0.00335\n", - " 35/1 1.03048 1.02441 +/- 0.00322\n", - " 36/1 1.05360 1.02553 +/- 0.00329\n", - " 37/1 1.05030 1.02645 +/- 0.00330\n", - " 38/1 1.04167 1.02699 +/- 0.00322\n", - " 39/1 1.04406 1.02758 +/- 0.00317\n", - " 40/1 1.01169 1.02705 +/- 0.00310\n", - " 41/1 1.00191 1.02624 +/- 0.00311\n", - " 42/1 1.02729 1.02628 +/- 0.00301\n", - " 43/1 1.02263 1.02616 +/- 0.00292\n", - " 44/1 1.05344 1.02697 +/- 0.00295\n", - " 45/1 1.03607 1.02723 +/- 0.00287\n", - " 46/1 1.00357 1.02657 +/- 0.00287\n", - " 47/1 1.03353 1.02676 +/- 0.00279\n", - " 48/1 1.03817 1.02706 +/- 0.00274\n", - " 49/1 1.01454 1.02674 +/- 0.00269\n", - " 50/1 0.99860 1.02603 +/- 0.00271\n", + " 1/1 1.02235 \n", + " 2/1 1.01108 \n", + " 3/1 1.02801 \n", + " 4/1 1.01404 \n", + " 5/1 1.03423 \n", + " 6/1 1.03282 \n", + " 7/1 1.04060 \n", + " 8/1 1.01152 \n", + " 9/1 1.02063 \n", + " 10/1 1.02604 \n", + " 11/1 1.02137 \n", + " 12/1 1.01416 1.01776 +/- 0.00360\n", + " 13/1 1.00239 1.01264 +/- 0.00553\n", + " 14/1 1.04293 1.02021 +/- 0.00852\n", + " 15/1 1.02029 1.02023 +/- 0.00660\n", + " 16/1 1.01512 1.01938 +/- 0.00546\n", + " 17/1 1.02098 1.01960 +/- 0.00462\n", + " 18/1 1.05954 1.02460 +/- 0.00640\n", + " 19/1 1.02347 1.02447 +/- 0.00564\n", + " 20/1 1.03063 1.02509 +/- 0.00508\n", + " 21/1 1.04679 1.02706 +/- 0.00500\n", + " 22/1 1.01301 1.02589 +/- 0.00472\n", + " 23/1 1.00936 1.02462 +/- 0.00452\n", + " 24/1 1.01030 1.02360 +/- 0.00431\n", + " 25/1 1.03799 1.02456 +/- 0.00412\n", + " 26/1 1.00404 1.02327 +/- 0.00406\n", + " 27/1 1.02987 1.02366 +/- 0.00384\n", + " 28/1 1.00107 1.02241 +/- 0.00383\n", + " 29/1 1.01460 1.02200 +/- 0.00365\n", + " 30/1 1.01433 1.02161 +/- 0.00348\n", + " 31/1 1.01566 1.02133 +/- 0.00332\n", + " 32/1 1.03339 1.02188 +/- 0.00321\n", + " 33/1 1.03974 1.02265 +/- 0.00317\n", + " 34/1 1.03136 1.02302 +/- 0.00306\n", + " 35/1 1.05175 1.02417 +/- 0.00315\n", + " 36/1 1.05444 1.02533 +/- 0.00324\n", + " 37/1 1.02432 1.02529 +/- 0.00312\n", + " 38/1 1.01464 1.02491 +/- 0.00303\n", + " 39/1 1.01086 1.02443 +/- 0.00296\n", + " 40/1 1.02492 1.02444 +/- 0.00286\n", + " 41/1 1.02882 1.02459 +/- 0.00277\n", + " 42/1 1.00377 1.02394 +/- 0.00276\n", + " 43/1 0.97480 1.02245 +/- 0.00306\n", + " 44/1 1.03623 1.02285 +/- 0.00300\n", + " 45/1 1.02606 1.02294 +/- 0.00291\n", + " 46/1 1.01771 1.02280 +/- 0.00284\n", + " 47/1 1.05400 1.02364 +/- 0.00288\n", + " 48/1 1.01844 1.02350 +/- 0.00281\n", + " 49/1 1.00754 1.02309 +/- 0.00277\n", + " 50/1 1.02902 1.02324 +/- 0.00270\n", " Creating state point statepoint.50.h5...\n", "\n", " ===========================================================================\n", @@ -1155,27 +1183,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.5000E-02 seconds\n", - " Reading cross sections = 3.0000E-03 seconds\n", - " Total time in simulation = 1.2599E+01 seconds\n", - " Time in transport only = 1.2565E+01 seconds\n", - " Time in inactive batches = 1.1220E+00 seconds\n", - " Time in active batches = 1.1477E+01 seconds\n", - " Time synchronizing fission bank = 6.0000E-03 seconds\n", - " Sampling source sites = 5.0000E-03 seconds\n", + " Total time for initialization = 4.7000E-02 seconds\n", + " Reading cross sections = 6.0000E-03 seconds\n", + " Total time in simulation = 1.4145E+01 seconds\n", + " Time in transport only = 1.4098E+01 seconds\n", + " Time in inactive batches = 1.2400E+00 seconds\n", + " Time in active batches = 1.2905E+01 seconds\n", + " Time synchronizing fission bank = 4.0000E-03 seconds\n", + " Sampling source sites = 3.0000E-03 seconds\n", " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 1.0000E-03 seconds\n", - " Total time for finalization = 1.0000E-03 seconds\n", - " Total time elapsed = 1.2644E+01 seconds\n", - " Calculation Rate (inactive) = 44563.3 neutrons/second\n", - " Calculation Rate (active) = 17426.2 neutrons/second\n", + " Total time for finalization = 0.0000E+00 seconds\n", + " Total time elapsed = 1.4201E+01 seconds\n", + " Calculation Rate (inactive) = 40322.6 neutrons/second\n", + " Calculation Rate (active) = 15497.9 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.02471 +/- 0.00243\n", - " k-effective (Track-length) = 1.02603 +/- 0.00271\n", - " k-effective (Absorption) = 1.02312 +/- 0.00182\n", - " Combined k-effective = 1.02387 +/- 0.00172\n", + " k-effective (Collision) = 1.02379 +/- 0.00230\n", + " k-effective (Track-length) = 1.02324 +/- 0.00270\n", + " k-effective (Absorption) = 1.02813 +/- 0.00172\n", + " Combined k-effective = 1.02680 +/- 0.00165\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -1186,7 +1214,7 @@ "0" ] }, - "execution_count": 34, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -1209,7 +1237,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 36, "metadata": { "collapsed": false }, @@ -1229,7 +1257,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 37, "metadata": { "collapsed": true }, @@ -1247,7 +1275,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 38, "metadata": { "collapsed": false }, @@ -1257,8 +1285,8 @@ "output_type": "stream", "text": [ "Continuous-Energy keff = 1.024295\n", - "Multi-Group keff = 1.023875\n", - "bias [pcm]: 42.0\n" + "Multi-Group keff = 1.026805\n", + "bias [pcm]: -251.0\n" ] } ], @@ -1274,7 +1302,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We see quite good agreement with only a 42 pcm difference between the two methods. Due to the high degree of approximations inherent in practical application of multi-group theory, one should not expect results of such high fidelity always for multi-group Monte Carlo calculations." + "This shows a 251 pcm bias between the two methods. Some degree of mismatch is expected simply to the very few histories being used in these example problems. An additional mismatch is always inherent in the practical application of multi-group theory due to the high degree of approximations inherent in that method." ] }, { @@ -1295,7 +1323,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 39, "metadata": { "collapsed": false }, @@ -1321,7 +1349,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 40, "metadata": { "collapsed": false }, @@ -1347,7 +1375,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 41, "metadata": { "collapsed": false }, @@ -1355,18 +1383,18 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 40, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index bc643ed3e7..e5728a812e 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -460,7 +460,7 @@ class Library(object): ---------- domain : Material or Cell or Universe or Integral The material, cell, or universe object of interest (or its ID) - mgxs_type : {'total', 'transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'chi'} + mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'chi'} The type of multi-group cross section object to return Returns @@ -773,9 +773,9 @@ class Library(object): nuclide this will be set to 'macro' regardless. xs_ids : str Cross section set identifier. Defaults to '1m'. - order : Scattering order for this dataset entry. Default is None, - which will force the XSdata object to use whatever the maximum - order available. + order : Scattering order for this data entry. Default is None, + which will force the XSdata object to use whatever the order of the + Library object is. Returns ------- @@ -801,7 +801,8 @@ class Library(object): cv.check_value('xs_type', xs_type, ['macro', 'micro']) cv.check_type('xs_id', xs_id, basestring) cv.check_type('order', order, (type(None), Integral)) - cv.check_greater_than('order', order, -1, equality=True) + if order is not None: + cv.check_greater_than('order', order, 0, equality=True) # Make sure statepoint has been loaded if self._sp_filename is None: @@ -819,20 +820,22 @@ class Library(object): name += '_' + nuclide name += '.' + xs_id xsdata = openmc.XSdata(name, self.energy_groups) - if order is 0: - xsdata.order = order + + if order is None: + # Set the order to the Library's order (the defualt behavior) + xsdata.order = self.legendre_order else: - msg = 'Generating anisotropic scattering from openmc.Library' \ - 'objects has not yet been implemented.' - raise NotImplementedError(msg) + # Set the order of the xsdata object to the minimum of + # the provided order or the Library's order. + xsdata.order = min(order, self.legendre_order) if nuclide is not 'total': xsdata.zaid = self._nuclides[nuclide][0] xsdata.awr = self._nuclides[nuclide][1] # Now get xs data itself - if 'transport' in self.mgxs_types: - mymgxs = self.get_mgxs(domain, 'transport') + if ('nu-transport' in self.mgxs_types) and (self.correction == 'P0'): + mymgxs = self.get_mgxs(domain, 'nu-transport') xsdata.set_total_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide]) elif 'total' in self.mgxs_types: mymgxs = self.get_mgxs(domain, 'total') @@ -949,10 +952,6 @@ class Library(object): # Initialize file mgxs_file = openmc.MGXSLibrary(self.energy_groups) - # Set the scattering order as isotropic until - # support for higher orders are included in openmc.mgxs - order = 0 - # Create the xsdata object and add it to the mgxs_file for i, domain in enumerate(self.domains): if self.by_nuclide: @@ -969,8 +968,7 @@ class Library(object): xsdata_name += '_' + nuclide xsdata = self.get_xsdata(domain, xsdata_name, nuclide=nuclide, - xs_type=xs_type, xs_id=xs_ids[i], - order=order) + xs_type=xs_type, xs_id=xs_ids[i]) mgxs_file.add_xsdata(xsdata) @@ -1031,10 +1029,10 @@ class Library(object): # Total or transport can be present, but if using # self.correction=="P0", then we should use transport. if (((self.correction is "P0") and - ('transport' not in self.mgxs_types))): + ('nu-transport' not in self.mgxs_types))): error_flag = True - msg = 'Transport MGXS type is required since a "P0" correction ' \ - 'is applied, but a Transport MGXS is not provided.' + msg = 'NuTransport MGXS type is required since a "P0" correction' \ + ' is applied, but a Transport MGXS is not provided.' warn(msg) elif (((self.correction is None) and ('total' not in self.mgxs_types))): diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 408175f43b..99942361b9 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -829,7 +829,8 @@ class XSdata(object): def set_scatter_mgxs(self, scatter, nuclide='total', xs_type='macro'): """This method allows for an openmc.mgxs.ScatterMatrixXS to be used to set the scatter matrix cross section for this XSdata - object. + object. If the XsData.order attribute has not yet been set, then + it will be set based on the properties of scatter. Parameters ---------- @@ -856,9 +857,35 @@ class XSdata(object): check_value('domain_type', scatter.domain_type, ['universe', 'cell', 'material']) + # Methods of representing anisotropic scattering besides + # Legendre expansions have not been implemented yet in openmc.mgxs. + # Therefore check to make sure the XsData has been set to + # legendre scattering. + if (self.scatt_type != 'legendre'): + msg = 'Anisotrpic scattering representations other than ' \ + 'Legendre expansions have not yet been implemented in ' \ + 'openmc.mgxs.' + raise ValueError(msg) + + # If the user has not defined XsData.order, then we will set + # the order based on the data within scatter. + # Otherwise, we will check to see that XsData.order to match + # the order of scatter + if self.order is None: + self.order = scatter.legendre_order + else: + check_value('legendre_order', scatter.legendre_order, + [self.order]) + if self._representation is 'isotropic': - self._scatter = np.array([scatter.get_xs(nuclides=nuclide, - xs_type=xs_type)]) + # Get the scattering orders in the outermost dimension + self._scatter = np.zeros((self.num_orders, + self.energy_groups.num_groups, + self.energy_groups.num_groups)) + for moment in range(self.num_orders): + self._scatter[moment, :, :] = scatter.get_xs(nuclides=nuclide, + xs_type=xs_type, + moment=moment) elif self._representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' @@ -908,10 +935,12 @@ class XSdata(object): ['universe', 'cell', 'material']) if self._representation is 'isotropic': + # import pdb; pdb.set_trace() + nuscatt = nuscatter.get_xs(nuclides=nuclide, - xs_type=xs_type) + xs_type=xs_type, moment=0) scatt = scatter.get_xs(nuclides=nuclide, - xs_type=xs_type) + xs_type=xs_type, moment=0) self._multiplicity = np.divide(nuscatt, scatt) elif self._representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' @@ -969,7 +998,8 @@ class XSdata(object): if self._tabular_legendre is not None: subelement = ET.SubElement(element, 'tabular_legendre') subelement.set('enable', str(self._tabular_legendre['enable'])) - subelement.set('num_points', str(self._tabular_legendre['num_points'])) + subelement.set('num_points', + str(self._tabular_legendre['num_points'])) if self._total is not None: subelement = ET.SubElement(element, 'total') From b1516c91849989f40ac011e77af659409d34de94 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Tue, 17 May 2016 21:24:03 -0400 Subject: [PATCH 555/650] Updated per minor edits from @wbinventor and added a routine to calculate the mgxs_library and Materials objects --- .../pythonapi/examples/mgxs-part-iv.ipynb | 178 +++++++++--------- openmc/mgxs/library.py | 118 +++++++++++- openmc/mgxs_library.py | 50 +++-- 3 files changed, 222 insertions(+), 124 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb index e1d61cedcc..4b73cf3caa 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb @@ -433,7 +433,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX////pgJFyEhJNv8RV\nUZDeAAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AFERUOBQ7RtjIAAAWFSURBVGje7Zs7cttADIZ9CSvX\ncrP0iCxUqbBc8Ag6xR6BhV2EvYvwFD4CCx1ABT1jMdgndpegRQnOrCbjpPlGESISC4A/gd27e8H5\n83CX3b4+iKJrRHkS4vkghMPBonRYWGwtfgD2YN+dRDUOoh6lACw0Noi9w2fESuEoAR/uVuMolX03\n9oXGT7F3eFL2iEfhUX1f4cPdL/ishs+68ai+udE4xPhexbjX2FfjGNoPj/DPNX4Tsd+EODr8FvsV\ndf1Hd9P2VvCi4+s/aXvrf+upAD+1/9GV1mkOH5X9vV6THtfvACslcaUCbESL61drBPtdI8SrFMWr\nELsXCkuFDYW75gbiP7d9Cf7bAYI/aCwUShrBvh30+lWQkzVgZ/HD4OixNCgcQpJ3BxU/Ln91elKo\nM5VEE38QtJ+Yv6cQ9xjKNYayyl8TypP8DfJnQ2H/b/N3ye9P83cT33SQv/sQh9gV7zZ/0dNj5HQa\nC5vVzv9+/WFN2w8KVaZ2BwL1+pv4g0x1QRfjq0dB4Q3kT277oP6VNL6gKxNU9a8zK+WLbi/Wwpdi\nhbboKqyxFOulHMj6v4W/AXbmUeAxrv9J/CqEBXaRKsXaodD4nsYvkT/G6H1D4SR/iPy1Roj9JsQ5\ne18/7EUHv1+Fvx/Xj5V9Ugb5K8TW4TZEEdcvoz/up0VTe9qsVIppKVX6a7D6y9ZvwEKjrtQxPtv6\nfXII9vCxKOGaIeAIfEF8IvAG8ie3vRK9rRQl+PPpSctbhfpTUCpviH+kxsZgpT91+snoX1l49KK3\niUQvICRy5aUw6l8leoVwoo3Uv1rKreF/UFLY6d9QP4L9Wf2r7EP9GOSfcsjZ56f60kz+XmVPXv+R\nuP49ff0T/53Rv6n/7m2lvXT9Wqd/VUz8hvh5M/ED6ILmt4mfHYZSaePnTWpsf/SvqV9O6dLYYClL\nEetnoH/LBLFoBvrX189uTv8++kot5vTvQD4/9jP690g9P/4z/bvo/XVG/xYoZZx+8fr3MxAtsf7t\nUOkG2JqsTtCIpgCt/qX1226KqZS7gfzJbe+c9jLrtIZ8lXD+s4umlW6AKIVrlML2/cXjgPFjlJqI\nRC+Fj0bVJe+vSh56pSdR6YkQ1ygF10Wqf0FeLta/iKn9Mv1L24ti2e+7W4n1b3T/W+L+t9H9T/Sv\nVboUmqJJon1/hZq8LnzRDlDrX1u0xRT1+6vEpomMmyYkqi95vIH8yW1PN+122KkLcNLKi/WTF01z\n/cNASrWE/l3ev6T17zX909z9X27/euK/Rf3zWP+Waf9eEv37KkWJ+rfDl6ZglNDa+cEBhwYDvkoN\nP/rX69814NaI3imq0l7OYDy/qSdDGwr7r+Y3VbzoKZr6XX2lfxfOb87qXzr+b1j/Xlp/nP6dn98M\ncdH7cn7zjPObKsYWS3Eb9w8n85smHtqQuPuZ30T2dlIT6F9xFl+n8xslegL9a4c2KRr9W4rp/GYq\numiM9Nec/j2v/yj9u1h//hv9e93vc++f63/u+rPjL3f+5Lbn1j9m/eXWf+7zh/v8+2b9e/Hzn6s/\nuPqHrb8g71n6L3f+5Lbnvn8w33+4718/+5d47//c/gO7/5E7/nPbc/tv3P4fs//I7X9y+6/fqH+v\n6j9z+9/c/ju3/8+eP+TOn9z23PkXc/7Gnf9x5483q38Xzn+582fu/Js9fy8kb/6fO39y23P3n3S8\n/S/c/Tfc/T83uX/pgv1XE/9duP+Lu/+Mvf8td/znti8kb/8ld/9nx9t/Sjw/Ltr/yt1/+337f6/b\nf0zoB3nJ/ucVc/81d/83e/957vzJbc89/8A8f8E9/5HE78XnT/4H/cs5f8Q9/8Q9f8U+/5U7f3Lb\nc88fdrzzjyvm+cuf/Uu887/c88fs88954/8vO4SjPC+2QRIAAAAldEVYdGRhdGU6Y3JlYXRlADIw\nMTYtMDUtMTdUMjE6MTQ6MDUtMDQ6MDCzw4K8AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA1LTE3\nVDIxOjE0OjA1LTA0OjAwwp46AAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -724,7 +724,7 @@ " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", " Git SHA1: 058ba68895a2f880402fda3d58cfb14b162931d9\n", - " Date/Time: 2016-05-17 05:32:34\n", + " Date/Time: 2016-05-17 21:14:05\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -811,20 +811,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 1.4400E+00 seconds\n", - " Reading cross sections = 1.1340E+00 seconds\n", - " Total time in simulation = 1.8207E+01 seconds\n", - " Time in transport only = 1.8125E+01 seconds\n", - " Time in inactive batches = 2.1170E+00 seconds\n", - " Time in active batches = 1.6090E+01 seconds\n", - " Time synchronizing fission bank = 3.0000E-03 seconds\n", - " Sampling source sites = 2.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for initialization = 1.4530E+00 seconds\n", + " Reading cross sections = 1.1470E+00 seconds\n", + " Total time in simulation = 1.8747E+01 seconds\n", + " Time in transport only = 1.8639E+01 seconds\n", + " Time in inactive batches = 2.1690E+00 seconds\n", + " Time in active batches = 1.6578E+01 seconds\n", + " Time synchronizing fission bank = 6.0000E-03 seconds\n", + " Sampling source sites = 4.0000E-03 seconds\n", + " SEND/RECV source sites = 2.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.9657E+01 seconds\n", - " Calculation Rate (inactive) = 23618.3 neutrons/second\n", - " Calculation Rate (active) = 12430.1 neutrons/second\n", + " Total time elapsed = 2.0209E+01 seconds\n", + " Calculation Rate (inactive) = 23052.1 neutrons/second\n", + " Calculation Rate (active) = 12064.2 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1099,7 +1099,7 @@ " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", " Git SHA1: 058ba68895a2f880402fda3d58cfb14b162931d9\n", - " Date/Time: 2016-05-17 05:32:54\n", + " Date/Time: 2016-05-17 21:14:26\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -1124,56 +1124,56 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 1.02235 \n", - " 2/1 1.01108 \n", - " 3/1 1.02801 \n", - " 4/1 1.01404 \n", - " 5/1 1.03423 \n", - " 6/1 1.03282 \n", - " 7/1 1.04060 \n", - " 8/1 1.01152 \n", - " 9/1 1.02063 \n", - " 10/1 1.02604 \n", - " 11/1 1.02137 \n", - " 12/1 1.01416 1.01776 +/- 0.00360\n", - " 13/1 1.00239 1.01264 +/- 0.00553\n", - " 14/1 1.04293 1.02021 +/- 0.00852\n", - " 15/1 1.02029 1.02023 +/- 0.00660\n", - " 16/1 1.01512 1.01938 +/- 0.00546\n", - " 17/1 1.02098 1.01960 +/- 0.00462\n", - " 18/1 1.05954 1.02460 +/- 0.00640\n", - " 19/1 1.02347 1.02447 +/- 0.00564\n", - " 20/1 1.03063 1.02509 +/- 0.00508\n", - " 21/1 1.04679 1.02706 +/- 0.00500\n", - " 22/1 1.01301 1.02589 +/- 0.00472\n", - " 23/1 1.00936 1.02462 +/- 0.00452\n", - " 24/1 1.01030 1.02360 +/- 0.00431\n", - " 25/1 1.03799 1.02456 +/- 0.00412\n", - " 26/1 1.00404 1.02327 +/- 0.00406\n", - " 27/1 1.02987 1.02366 +/- 0.00384\n", - " 28/1 1.00107 1.02241 +/- 0.00383\n", - " 29/1 1.01460 1.02200 +/- 0.00365\n", - " 30/1 1.01433 1.02161 +/- 0.00348\n", - " 31/1 1.01566 1.02133 +/- 0.00332\n", - " 32/1 1.03339 1.02188 +/- 0.00321\n", - " 33/1 1.03974 1.02265 +/- 0.00317\n", - " 34/1 1.03136 1.02302 +/- 0.00306\n", - " 35/1 1.05175 1.02417 +/- 0.00315\n", - " 36/1 1.05444 1.02533 +/- 0.00324\n", - " 37/1 1.02432 1.02529 +/- 0.00312\n", - " 38/1 1.01464 1.02491 +/- 0.00303\n", - " 39/1 1.01086 1.02443 +/- 0.00296\n", - " 40/1 1.02492 1.02444 +/- 0.00286\n", - " 41/1 1.02882 1.02459 +/- 0.00277\n", - " 42/1 1.00377 1.02394 +/- 0.00276\n", - " 43/1 0.97480 1.02245 +/- 0.00306\n", - " 44/1 1.03623 1.02285 +/- 0.00300\n", - " 45/1 1.02606 1.02294 +/- 0.00291\n", - " 46/1 1.01771 1.02280 +/- 0.00284\n", - " 47/1 1.05400 1.02364 +/- 0.00288\n", - " 48/1 1.01844 1.02350 +/- 0.00281\n", - " 49/1 1.00754 1.02309 +/- 0.00277\n", - " 50/1 1.02902 1.02324 +/- 0.00270\n", + " 1/1 1.06913 \n", + " 2/1 1.04067 \n", + " 3/1 1.01854 \n", + " 4/1 1.00203 \n", + " 5/1 1.03243 \n", + " 6/1 1.02688 \n", + " 7/1 1.06855 \n", + " 8/1 1.03420 \n", + " 9/1 1.01657 \n", + " 10/1 1.02795 \n", + " 11/1 1.01796 \n", + " 12/1 1.03372 1.02584 +/- 0.00788\n", + " 13/1 1.02433 1.02534 +/- 0.00458\n", + " 14/1 1.01147 1.02187 +/- 0.00474\n", + " 15/1 1.01215 1.01993 +/- 0.00416\n", + " 16/1 1.04088 1.02342 +/- 0.00487\n", + " 17/1 1.04033 1.02583 +/- 0.00477\n", + " 18/1 1.04483 1.02821 +/- 0.00477\n", + " 19/1 1.02870 1.02826 +/- 0.00420\n", + " 20/1 1.01339 1.02678 +/- 0.00404\n", + " 21/1 1.03389 1.02742 +/- 0.00371\n", + " 22/1 1.02535 1.02725 +/- 0.00340\n", + " 23/1 1.00225 1.02533 +/- 0.00367\n", + " 24/1 0.99938 1.02347 +/- 0.00387\n", + " 25/1 1.01620 1.02299 +/- 0.00363\n", + " 26/1 1.03393 1.02367 +/- 0.00347\n", + " 27/1 1.01875 1.02338 +/- 0.00327\n", + " 28/1 1.00305 1.02225 +/- 0.00328\n", + " 29/1 1.01453 1.02185 +/- 0.00313\n", + " 30/1 1.02891 1.02220 +/- 0.00299\n", + " 31/1 0.99612 1.02096 +/- 0.00311\n", + " 32/1 1.04911 1.02224 +/- 0.00323\n", + " 33/1 1.01410 1.02188 +/- 0.00310\n", + " 34/1 0.98979 1.02055 +/- 0.00326\n", + " 35/1 1.00938 1.02010 +/- 0.00316\n", + " 36/1 1.02857 1.02043 +/- 0.00305\n", + " 37/1 1.04095 1.02119 +/- 0.00303\n", + " 38/1 1.02033 1.02115 +/- 0.00292\n", + " 39/1 1.02104 1.02115 +/- 0.00282\n", + " 40/1 1.00854 1.02073 +/- 0.00276\n", + " 41/1 1.00932 1.02036 +/- 0.00269\n", + " 42/1 1.00284 1.01982 +/- 0.00266\n", + " 43/1 1.02489 1.01997 +/- 0.00258\n", + " 44/1 1.03981 1.02055 +/- 0.00257\n", + " 45/1 1.02630 1.02072 +/- 0.00251\n", + " 46/1 1.00133 1.02018 +/- 0.00249\n", + " 47/1 1.02409 1.02028 +/- 0.00243\n", + " 48/1 1.03928 1.02078 +/- 0.00241\n", + " 49/1 1.01226 1.02057 +/- 0.00236\n", + " 50/1 1.03536 1.02094 +/- 0.00233\n", " Creating state point statepoint.50.h5...\n", "\n", " ===========================================================================\n", @@ -1183,27 +1183,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.7000E-02 seconds\n", - " Reading cross sections = 6.0000E-03 seconds\n", - " Total time in simulation = 1.4145E+01 seconds\n", - " Time in transport only = 1.4098E+01 seconds\n", - " Time in inactive batches = 1.2400E+00 seconds\n", - " Time in active batches = 1.2905E+01 seconds\n", - " Time synchronizing fission bank = 4.0000E-03 seconds\n", - " Sampling source sites = 3.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for initialization = 4.6000E-02 seconds\n", + " Reading cross sections = 8.0000E-03 seconds\n", + " Total time in simulation = 1.4524E+01 seconds\n", + " Time in transport only = 1.4457E+01 seconds\n", + " Time in inactive batches = 1.3350E+00 seconds\n", + " Time in active batches = 1.3189E+01 seconds\n", + " Time synchronizing fission bank = 7.0000E-03 seconds\n", + " Sampling source sites = 5.0000E-03 seconds\n", + " SEND/RECV source sites = 2.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.4201E+01 seconds\n", - " Calculation Rate (inactive) = 40322.6 neutrons/second\n", - " Calculation Rate (active) = 15497.9 neutrons/second\n", + " Total time elapsed = 1.4579E+01 seconds\n", + " Calculation Rate (inactive) = 37453.2 neutrons/second\n", + " Calculation Rate (active) = 15164.2 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.02379 +/- 0.00230\n", - " k-effective (Track-length) = 1.02324 +/- 0.00270\n", - " k-effective (Absorption) = 1.02813 +/- 0.00172\n", - " Combined k-effective = 1.02680 +/- 0.00165\n", + " k-effective (Collision) = 1.02358 +/- 0.00231\n", + " k-effective (Track-length) = 1.02094 +/- 0.00233\n", + " k-effective (Absorption) = 1.02682 +/- 0.00152\n", + " Combined k-effective = 1.02527 +/- 0.00153\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -1285,8 +1285,8 @@ "output_type": "stream", "text": [ "Continuous-Energy keff = 1.024295\n", - "Multi-Group keff = 1.026805\n", - "bias [pcm]: -251.0\n" + "Multi-Group keff = 1.025274\n", + "bias [pcm]: -97.9\n" ] } ], @@ -1302,7 +1302,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This shows a 251 pcm bias between the two methods. Some degree of mismatch is expected simply to the very few histories being used in these example problems. An additional mismatch is always inherent in the practical application of multi-group theory due to the high degree of approximations inherent in that method." + "This shows a nontrivial pcm bias between the two methods. Some degree of mismatch is expected simply to the very few histories being used in these example problems. An additional mismatch is always inherent in the practical application of multi-group theory due to the high degree of approximations inherent in that method." ] }, { @@ -1383,7 +1383,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 41, @@ -1392,9 +1392,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index e5728a812e..20302b6246 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -774,8 +774,8 @@ class Library(object): xs_ids : str Cross section set identifier. Defaults to '1m'. order : Scattering order for this data entry. Default is None, - which will force the XSdata object to use whatever the order of the - Library object is. + which will set the XSdata object to use the order of the + Library. Returns ------- @@ -803,6 +803,7 @@ class Library(object): cv.check_type('order', order, (type(None), Integral)) if order is not None: cv.check_greater_than('order', order, 0, equality=True) + cv.check_less_than('order', order, 10, equality=True) # Make sure statepoint has been loaded if self._sp_filename is None: @@ -834,7 +835,7 @@ class Library(object): xsdata.awr = self._nuclides[nuclide][1] # Now get xs data itself - if ('nu-transport' in self.mgxs_types) and (self.correction == 'P0'): + if 'nu-transport' in self.mgxs_types and self.correction == 'P0': mymgxs = self.get_mgxs(domain, 'nu-transport') xsdata.set_total_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide]) elif 'total' in self.mgxs_types: @@ -974,6 +975,104 @@ class Library(object): return mgxs_file + def create_mg_library_and_materials(self, xsdata_names=None, xs_ids=None, + material_ids=None): + """Creates an openmc.MGXSLibrary object to contain the MGXS data for the + Multi-Group mode of OpenMC as well as the associated openmc.Materials + objects. This method cannot be used for Library objects with + `Library.by_nuclide == True` since the materials to output would be + problem dependent and thus any Materials object produced by this method + would not be useful. + + Parameters + ---------- + xsdata_names : Iterable of str + List of names to apply to the "xsdata" entries in the + resultant mgxs data file. Defaults to 'set1', 'set2', ... + xs_ids : str or Iterable of str + Cross section set identifier (i.e., '71c') for all + data sets (if only str) or for each individual one + (if iterable of str). Defaults to '1m'. + material_ids : None or Iterable of Integral + An optional list of material IDs to pass to the materials in + materials_file. Defaults to `None` implying the materials will be + given an ID number which matches the index of the domain in + `self.domains` + + Returns + ------- + mgxs_file : openmc.MGXSLibrary + Multi-Group Cross Section File that is ready to be printed to the + file of choice by the user. + materials_file : openmc.Materials + Materials file ready to be printed with all the macroscopic data + present within this Library. + + Raises + ------ + ValueError + When the Library object is initialized with insufficient types of + cross sections for the Library. + + See also + -------- + Library.create_mg_library() + Library.dump_to_file() + + """ + + # Check to ensure the Library contains the correct + # multi-group cross section types + self.check_library_for_openmc_mgxs() + + if xsdata_names is not None: + cv.check_iterable_type('xsdata_names', xsdata_names, basestring) + if xs_ids is not None: + if isinstance(xs_ids, basestring): + # If we only have a string lets convert it now to a list + # of strings. + xs_ids = [xs_ids for i in range(len(self.domains))] + else: + cv.check_iterable_type('xs_ids', xs_ids, basestring) + else: + xs_ids = ['1m' for i in range(len(self.domains))] + if material_ids is not None: + cv.check_iterable_type('material_ids', material_ids, Integral) + xs_type = 'macro' + + # Initialize files + mgxs_file = openmc.MGXSLibrary(self.energy_groups) + + materials = [] + macroscopics = [] + nuclide = 'total' + # Create the xsdata object and add it to the mgxs_file + for i, domain in enumerate(self.domains): + # Build & add metadata to XSdata object + if xsdata_names is None: + xsdata_name = 'set' + str(i + 1) + else: + xsdata_name = xsdata_names[i] + + xsdata = self.get_xsdata(domain, xsdata_name, nuclide=nuclide, + xs_type=xs_type, xs_id=xs_ids[i]) + + mgxs_file.add_xsdata(xsdata) + + macroscopics.append(openmc.Macroscopic(name=xsdata_name, + xs=xs_ids[i])) + if material_ids is not None: + mat_id = material_ids[i] + else: + mat_id = i + materials.append(openmc.Material(name=xsdata_name + '.' + + xs_ids[i], material_id=mat_id)) + materials[-1].add_macroscopic(macroscopics[-1]) + + materials_file = openmc.Materials(materials) + + return (mgxs_file, materials_file) + def check_library_for_openmc_mgxs(self): """This routine will check the MGXS Types within a Library to ensure the MGXS types provided can be used to create @@ -1009,12 +1108,12 @@ class Library(object): # Ensure absorption is present if 'absorption' not in self.mgxs_types: error_flag = True - msg = 'Absorption MGXS type is required but not provided.' + msg = '"absorption" MGXS type is required but not provided.' warn(msg) # Ensure nu-scattering matrix is required if 'nu-scatter matrix' not in self.mgxs_types: error_flag = True - msg = 'Nu-Scatter Matrix MGXS type is required but not provided.' + msg = '"nu-scatter matrix" MGXS type is required but not provided.' warn(msg) else: # Ok, now see the status of scatter @@ -1023,7 +1122,7 @@ class Library(object): # we need total, and not transport. if 'total' not in self.mgxs_types: error_flag = True - msg = 'Total MGXS type is required if a ' \ + msg = '"total" MGXS type is required if a ' \ 'scattering matrix is not provided.' warn(msg) # Total or transport can be present, but if using @@ -1031,13 +1130,14 @@ class Library(object): if (((self.correction is "P0") and ('nu-transport' not in self.mgxs_types))): error_flag = True - msg = 'NuTransport MGXS type is required since a "P0" correction' \ - ' is applied, but a Transport MGXS is not provided.' + msg = 'A "nu-transport" MGXS type is required since a "P0" ' \ + 'correction is applied, but a "nu-transport" MGXS is ' \ + 'not provided.' warn(msg) elif (((self.correction is None) and ('total' not in self.mgxs_types))): error_flag = True - msg = 'Total MGXS type is required, but not provided.' + msg = '"total" MGXS type is required, but not provided.' warn(msg) if error_flag: diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 99942361b9..88ae05808a 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -137,6 +137,10 @@ class XSdata(object): ``representation``. matrix_shape : iterable of int Dimensionality of matrix multi-group cross sections (e.g., the + fission matrix cross section). The return result depends on the + value of ``representation``. + pn_matrix_shape : iterable of int + Dimensionality of scattering matrix data (e.g., the scattering matrix cross section). The return result depends on the value of ``representation``. total : numpy.ndarray @@ -621,9 +625,9 @@ class XSdata(object): check_value('domain_type', total.domain_type, ['universe', 'cell', 'material']) - if self._representation is 'isotropic': + if self.representation is 'isotropic': self._total = total.get_xs(nuclides=nuclide, xs_type=xs_type) - elif self._representation is 'angle': + elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) @@ -657,10 +661,10 @@ class XSdata(object): check_value('domain_type', absorption.domain_type, ['universe', 'cell', 'material']) - if self._representation is 'isotropic': + if self.representation is 'isotropic': self._absorption = absorption.get_xs(nuclides=nuclide, xs_type=xs_type) - elif self._representation is 'angle': + elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) @@ -693,10 +697,10 @@ class XSdata(object): check_value('domain_type', fission.domain_type, ['universe', 'cell', 'material']) - if self._representation is 'isotropic': + if self.representation is 'isotropic': self._fission = fission.get_xs(nuclides=nuclide, xs_type=xs_type) - elif self._representation is 'angle': + elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) @@ -733,10 +737,10 @@ class XSdata(object): check_value('domain_type', nu_fission.domain_type, ['universe', 'cell', 'material']) - if self._representation is 'isotropic': + if self.representation is 'isotropic': self._nu_fission = nu_fission.get_xs(nuclides=nuclide, xs_type=xs_type) - elif self._representation is 'angle': + elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) @@ -776,10 +780,10 @@ class XSdata(object): check_value('domain_type', k_fission.domain_type, ['universe', 'cell', 'material']) - if self._representation is 'isotropic': + if self.representation is 'isotropic': self._kappa_fission = k_fission.get_xs(nuclides=nuclide, xs_type=xs_type) - elif self._representation is 'angle': + elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) @@ -816,10 +820,10 @@ class XSdata(object): check_value('domain_type', chi.domain_type, ['universe', 'cell', 'material']) - if self._representation is 'isotropic': + if self.representation is 'isotropic': self._chi = chi.get_xs(nuclides=nuclide, xs_type=xs_type) - elif self._representation is 'angle': + elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) @@ -829,7 +833,7 @@ class XSdata(object): def set_scatter_mgxs(self, scatter, nuclide='total', xs_type='macro'): """This method allows for an openmc.mgxs.ScatterMatrixXS to be used to set the scatter matrix cross section for this XSdata - object. If the XsData.order attribute has not yet been set, then + object. If the XSdata.order attribute has not yet been set, then it will be set based on the properties of scatter. Parameters @@ -857,19 +861,15 @@ class XSdata(object): check_value('domain_type', scatter.domain_type, ['universe', 'cell', 'material']) - # Methods of representing anisotropic scattering besides - # Legendre expansions have not been implemented yet in openmc.mgxs. - # Therefore check to make sure the XsData has been set to - # legendre scattering. if (self.scatt_type != 'legendre'): - msg = 'Anisotrpic scattering representations other than ' \ + msg = 'Anisotropic scattering representations other than ' \ 'Legendre expansions have not yet been implemented in ' \ 'openmc.mgxs.' raise ValueError(msg) - # If the user has not defined XsData.order, then we will set + # If the user has not defined XSdata.order, then we will set # the order based on the data within scatter. - # Otherwise, we will check to see that XsData.order to match + # Otherwise, we will check to see that XSdata.order to match # the order of scatter if self.order is None: self.order = scatter.legendre_order @@ -877,7 +877,7 @@ class XSdata(object): check_value('legendre_order', scatter.legendre_order, [self.order]) - if self._representation is 'isotropic': + if self.representation is 'isotropic': # Get the scattering orders in the outermost dimension self._scatter = np.zeros((self.num_orders, self.energy_groups.num_groups, @@ -887,7 +887,7 @@ class XSdata(object): xs_type=xs_type, moment=moment) - elif self._representation is 'angle': + elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) @@ -934,15 +934,13 @@ class XSdata(object): check_value('domain_type', scatter.domain_type, ['universe', 'cell', 'material']) - if self._representation is 'isotropic': - # import pdb; pdb.set_trace() - + if self.representation is 'isotropic': nuscatt = nuscatter.get_xs(nuclides=nuclide, xs_type=xs_type, moment=0) scatt = scatter.get_xs(nuclides=nuclide, xs_type=xs_type, moment=0) self._multiplicity = np.divide(nuscatt, scatt) - elif self._representation is 'angle': + elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) self._multiplicity = np.nan_to_num(self._multiplicity) From 5a9dc631357d5bdd7360b1bd22a1fe8f1576bd82 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Thu, 19 May 2016 21:26:46 -0400 Subject: [PATCH 556/650] Use ACE data over WMP data where possible With this commit energy grid points and cross sections (including inelastic) will be unaffected by included WMP --- src/multipole.F90 | 239 +++++++++++++++----------- tests/test_multipole/results_true.dat | 2 +- 2 files changed, 135 insertions(+), 106 deletions(-) diff --git a/src/multipole.F90 b/src/multipole.F90 index caadab90f1..59c7fed695 100644 --- a/src/multipole.F90 +++ b/src/multipole.F90 @@ -6,6 +6,7 @@ module multipole use hdf5_interface use multipole_header, only: MultipoleArray, FIT_T, FIT_A, FIT_F, & MP_FISS, FORM_MLBW, FORM_RM + use search, only: binary_search implicit none @@ -23,25 +24,28 @@ contains type(MultipoleArray), intent(out), target :: multipole ! The object to fill integer, intent(in) :: i_table ! index in nuclides/ ! sab_tables - integer(HID_T) :: file_id integer(HID_T) :: group_id - - ! Intermediate loading components - integer :: NMT - integer :: i, j - integer, allocatable :: MT(:) - logical :: accumulated_fission - character(len=24) :: MT_n ! Takes the form '/nuclide/reactions/MT???' integer :: is_fissionable + real(8) :: insert_pts(4) ! New points in the energy grid + integer :: cut1, cut2 ! Old indices just outside MP region + integer :: new_n_grid ! Number of points in new E grid + real(8), allocatable :: new_energy(:) ! New energy grid + real(8) :: f1, f2 ! Interpolation near cut1 & cut2 + real(8), allocatable :: new_xs(:) ! New cross sections + integer :: i + integer :: IE ! Reaction threshold associate (nuc => nuclides(i_table)) - ! Open file for reading and move into the /isotope group + !========================================================================= + ! Copy in data from the file. + + ! Open file for reading and move into the /isotope group. file_id = file_open(filename, 'r', parallel=.true.) group_id = open_group(file_id, "/nuclide") - ! Load in all the array size scalars + ! Load in all the array size scalars. call read_dataset(multipole % length, group_id, "length") call read_dataset(multipole % windows, group_id, "windows") call read_dataset(multipole % num_l, group_id, "num_l") @@ -60,10 +64,10 @@ contains call read_dataset(multipole % start_E, group_id, "start_E") call read_dataset(multipole % end_E, group_id, "end_E") - ! Allocate the multipole array components + ! Allocate the multipole array components. call multipole % allocate() - ! Read in arrays + ! Read in arrays. call read_dataset(multipole % data, group_id, "data") call read_dataset(multipole % pseudo_k0RS, group_id, "pseudo_K0RS") call read_dataset(multipole % l_value, group_id, "l_value") @@ -73,113 +77,138 @@ contains call read_dataset(multipole % curvefit, group_id, "curvefit") - ! Delete ACE pointwise data - call read_dataset(nuc % n_grid, group_id, "n_grid") - - deallocate(nuc % energy) - deallocate(nuc % total) - deallocate(nuc % elastic) - deallocate(nuc % fission) - deallocate(nuc % nu_fission) - deallocate(nuc % absorption) - - allocate(nuc % energy(nuc % n_grid)) - allocate(nuc % total(nuc % n_grid)) - allocate(nuc % elastic(nuc % n_grid)) - allocate(nuc % fission(nuc % n_grid)) - allocate(nuc % nu_fission(nuc % n_grid)) - allocate(nuc % absorption(nuc % n_grid)) - - nuc % total(:) = ZERO - nuc % absorption(:) = ZERO - nuc % fission(:) = ZERO - - ! Read in new energy axis (converting eV to MeV) - call read_dataset(nuc % energy, group_id, "energy_points") - nuc % energy = nuc % energy / 1.0e6_8 - - ! Get count and list of MT tables - call read_dataset(NMT, group_id, "MT_count") - allocate(MT(NMT)) - - call read_dataset(MT, group_id, "MT_list") - + ! Close the file. call close_group(group_id) + call file_close(file_id) - accumulated_fission = .false. + !========================================================================= + ! Remove the uneeded/inconsitent pointwise data. This step enforces the + ! assumption that no inelastic scattering reactions can occur in the + ! multipole region. The energy grid is replaced with one that removes all + ! energies covered by multiple and adds four new points. Two new points + ! mark the edges of the multipole region and cross sections will be + ! interpolated to these points. The other two points are used to zero the + ! cross sections inside the multipole region. - ! Loop over each MT entry and load it into a reaction. - do i = 1, NMT - write(MT_n, '(A, I3.3)') '/nuclide/reactions/MT', MT(i) + ! Define the four new inserted points. + insert_pts(:) = [multipole % start_E / 1e6_8, & + multipole % start_E / 1e6_8 + 1e-12_8, & + multipole % end_E / 1e6_8 - 1e-12_8, & + multipole % end_E / 1e6_8] - group_id = open_group(file_id, MT_n) + ! Find the points just outside the multipole region. + cut1 = binary_search(nuc % energy, nuc % n_grid, insert_pts(1)) + cut2 = binary_search(nuc % energy, nuc % n_grid, insert_pts(4)) + 1 + if (nuc % energy(cut1) == insert_pts(1)) cut1 = cut1 - 1 + if (nuc % energy(cut2) == insert_pts(4)) cut2 = cut2 + 1 - ! Each MT needs to be treated slightly differently. - select case (MT(i)) - case(ELASTIC) - call read_dataset(nuc % elastic, group_id, "MT_sigma") - nuc % total(:) = nuc % total + nuc % elastic - case(N_FISSION) - call read_dataset(nuc % fission, group_id, "MT_sigma") - nuc % total(:) = nuc % total + nuc % fission - nuc % absorption(:) = nuc % absorption + nuc % fission - accumulated_fission = .true. - case default - ! Search through all of our secondary reactions - do j = 1, nuc % n_reaction - if (nuc % reactions(j) % MT == MT(i)) then - ! Match found + ! Generate the new energy grid. + new_n_grid = nuc % n_grid - (cut2 - cut1 - 1) + 4 + allocate(new_energy(new_n_grid)) + new_energy(1:cut1) = nuc % energy(1:cut1) + new_energy(cut1+1:cut1+4) = insert_pts(:) + new_energy(cut1+5:new_n_grid) = nuc % energy(cut2:nuc % n_grid) - ! Individual Fission components exist, so remove the combined - ! fission cross section. - if ( (MT(i) == N_F .or. MT(i) == N_NF .or. MT(i) == N_2NF & - .or. MT(i) == N_3NF) .and. accumulated_fission) then - nuc % total(:) = nuc % total - nuc % fission - nuc % absorption(:) = nuc % absorption - nuc % fission - nuc % fission(:) = ZERO - accumulated_fission = .false. - end if + ! Compute interpolation factors for the new energy points. + f1 = (insert_pts(1) - nuc % energy(cut1)) & + / (nuc % energy(cut1+1) - nuc % energy(cut1)) + f2 = (insert_pts(4) - nuc % energy(cut2-1)) & + / (nuc % energy(cut2) - nuc % energy(cut2-1)) - deallocate(nuc % reactions(j) % sigma) - allocate(nuc % reactions(j) % sigma(nuc % n_grid)) + ! Adjust the total cross section. + allocate(new_xs(new_n_grid)) + new_xs(1:cut1) = nuc % total(1:cut1) + new_xs(cut1+1) = (ONE - f1) * nuc % total(cut1) & + + f1 * nuc % total(cut1+1) + new_xs(cut1+2:cut1+3) = ZERO + new_xs(cut1+4) = (ONE - f2) * nuc % total(cut2-1) & + + f2 * nuc % total(cut2) + new_xs(cut1+5:new_n_grid) = nuc % total(cut2:nuc % n_grid) + call move_alloc(new_xs, nuc % total) - call read_dataset(nuc % reactions(j) % sigma, & - group_id, "MT_sigma") - call read_dataset(nuc % reactions(j) % Q_value, & - group_id, "Q_value") - call read_dataset(nuc % reactions(j) % threshold, & - group_id, "threshold") - nuc % reactions(j) % threshold = 1 ! TODO: reconsider implications. - nuc % reactions(j) % Q_value = nuc % reactions(j) % Q_value & - / 1.0e6_8 + ! Adjust the elastic cross section. + allocate(new_xs(new_n_grid)) + new_xs(1:cut1) = nuc % elastic(1:cut1) + new_xs(cut1+1) = (ONE - f1) * nuc % elastic(cut1) & + + f1 * nuc % elastic(cut1+1) + new_xs(cut1+2:cut1+3) = ZERO + new_xs(cut1+4) = (ONE - f2) * nuc % elastic(cut2-1) & + + f2 * nuc % elastic(cut2) + new_xs(cut1+5:new_n_grid) = nuc % elastic(cut2:nuc % n_grid) + call move_alloc(new_xs, nuc % elastic) - ! Accumulate total - if (MT(i) /= N_LEVEL .and. MT(i) <= N_DA) then - nuc % total(:) = nuc % total + nuc % reactions(j) % sigma - end if + ! Adjust the fission cross section. + allocate(new_xs(new_n_grid)) + new_xs(1:cut1) = nuc % fission(1:cut1) + new_xs(cut1+1) = (ONE - f1) * nuc % fission(cut1) & + + f1 * nuc % fission(cut1+1) + new_xs(cut1+2:cut1+3) = ZERO + new_xs(cut1+4) = (ONE - f2) * nuc % fission(cut2-1) & + + f2 * nuc % fission(cut2) + new_xs(cut1+5:new_n_grid) = nuc % fission(cut2:nuc % n_grid) + call move_alloc(new_xs, nuc % fission) - ! Accumulate absorption - if (MT(i) >= N_GAMMA .and. MT(i) <= N_DA) then - nuc % absorption(:) = nuc % absorption & - + nuc % reactions(j) % sigma - end if + ! Adjust the nu-fission cross section. + allocate(new_xs(new_n_grid)) + new_xs(1:cut1) = nuc % nu_fission(1:cut1) + new_xs(cut1+1) = (ONE - f1) * nuc % nu_fission(cut1) & + + f1 * nuc % nu_fission(cut1+1) + new_xs(cut1+2:cut1+3) = ZERO + new_xs(cut1+4) = (ONE - f2) * nuc % nu_fission(cut2-1) & + + f2 * nuc % nu_fission(cut2) + new_xs(cut1+5:new_n_grid) = nuc % nu_fission(cut2:nuc % n_grid) + call move_alloc(new_xs, nuc % nu_fission) - ! Accumulate fission (if needed) - if ( (MT(i) == N_F .or. MT(i) == N_NF .or. MT(i) == N_2NF & - .or. MT(i) == N_3NF) ) then - nuc % fission(:) = nuc % fission + nuc % reactions(j) % sigma - nuc % absorption(:) = nuc % absorption & - + nuc % reactions(j) % sigma - end if - end if - end do - end select + ! Adjust the absorption cross section. + allocate(new_xs(new_n_grid)) + new_xs(1:cut1) = nuc % absorption(1:cut1) + new_xs(cut1+1) = (ONE - f1) * nuc % absorption(cut1) & + + f1 * nuc % absorption(cut1+1) + new_xs(cut1+2:cut1+3) = ZERO + new_xs(cut1+4) = (ONE - f2) * nuc % absorption(cut2-1) & + + f2 * nuc % absorption(cut2) + new_xs(cut1+5:new_n_grid) = nuc % absorption(cut2:nuc % n_grid) + call move_alloc(new_xs, nuc % absorption) - call close_group(group_id) + ! Adjust other cross sections. + do i = 1, nuc % n_reaction + associate (rxn => nuc % reactions(i)) + if (.not. allocated(rxn % sigma)) cycle ! Skip unallocated reactions + IE = rxn % threshold + if (rxn % threshold >= cut2) then + ! The threshold is above the multipole range. All we need to do + ! is adjust the threshold index to match the new grid. + rxn % threshold = rxn % threshold - (cut2 - cut1 - 1) + 4 + else if (rxn % threshold <= cut1) then + ! The threhold is below the multipole range. Remove the multipole + ! region just like we did with the other reactions. + ! The new grid removed (cut2 - cut1 - 1) points and added 4. + allocate(new_xs(size(rxn % sigma) - (cut2 - cut1 - 1) + 4)) + new_xs(1:cut1-IE+1) = rxn % sigma(1:cut1-IE+1) + new_xs(cut1-IE+2) = (ONE - f1) * rxn % sigma(cut1-IE+1) & + + f1 * rxn % sigma(cut1-IE+2) + new_xs(cut1-IE+3:cut1-IE+4) = ZERO + new_xs(cut1-IE+5) = (ONE - f2) * rxn % sigma(cut2-IE) & + + f2 * rxn % sigma(cut2-IE+1) + new_xs(cut1-IE+6:size(new_xs)) = & + rxn % sigma(cut2-IE+1:size(rxn % sigma)) + call move_alloc(new_xs, rxn % sigma) + else + ! The threshold lies within the multipole range. Remove the first + ! cut2-IE points and add an interpolated point + allocate(new_xs(size(rxn % sigma) - (cut2-IE) + 1)) + new_xs(1) = (ONE - f2) * rxn % sigma(cut2-IE) & + + f2 * rxn % sigma(cut2-IE+1) + new_xs(2:size(new_xs)) = rxn % sigma(cut2-IE+1:size(rxn % sigma)) + call move_alloc(new_xs, rxn % sigma) + rxn % threshold = cut1 + 4 + end if + end associate end do - ! Close file - call file_close(file_id) + ! Apply the new energy grid. + nuc % n_grid = new_n_grid + call move_alloc(new_energy, nuc % energy) end associate diff --git a/tests/test_multipole/results_true.dat b/tests/test_multipole/results_true.dat index 83d7e762e8..2c2b879fea 100644 --- a/tests/test_multipole/results_true.dat +++ b/tests/test_multipole/results_true.dat @@ -1,5 +1,5 @@ k-combined: -1.457760E+00 1.119659E-02 +1.457760E+00 1.119656E-02 Cell ID = 11 Name = From 03957aac6ba080a9b98b2bc023f856c44dcd4f96 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 21 May 2016 14:12:06 -0400 Subject: [PATCH 557/650] Implementing create_mg_mode, a method of Library which creates the MGXS Library, Geometry and Materials objects based on the Library class. --- openmc/mgxs/library.py | 67 +++++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 20302b6246..4eae2cb067 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -975,14 +975,11 @@ class Library(object): return mgxs_file - def create_mg_library_and_materials(self, xsdata_names=None, xs_ids=None, - material_ids=None): + def create_mg_mode(self, xsdata_names=None, xs_ids=None): """Creates an openmc.MGXSLibrary object to contain the MGXS data for the Multi-Group mode of OpenMC as well as the associated openmc.Materials - objects. This method cannot be used for Library objects with - `Library.by_nuclide == True` since the materials to output would be - problem dependent and thus any Materials object produced by this method - would not be useful. + and openmc.Geometry objects. This method only creates a macroscopic + MGXS Library even if nuclidic tallies are specified in the Library. Parameters ---------- @@ -993,18 +990,16 @@ class Library(object): Cross section set identifier (i.e., '71c') for all data sets (if only str) or for each individual one (if iterable of str). Defaults to '1m'. - material_ids : None or Iterable of Integral - An optional list of material IDs to pass to the materials in - materials_file. Defaults to `None` implying the materials will be - given an ID number which matches the index of the domain in - `self.domains` Returns ------- mgxs_file : openmc.MGXSLibrary Multi-Group Cross Section File that is ready to be printed to the file of choice by the user. - materials_file : openmc.Materials + materials : openmc.Materials + Materials file ready to be printed with all the macroscopic data + present within this Library. + geometry : openmc.Geometry Materials file ready to be printed with all the macroscopic data present within this Library. @@ -1036,42 +1031,51 @@ class Library(object): cv.check_iterable_type('xs_ids', xs_ids, basestring) else: xs_ids = ['1m' for i in range(len(self.domains))] - if material_ids is not None: - cv.check_iterable_type('material_ids', material_ids, Integral) xs_type = 'macro' - # Initialize files + # Initialize MGXS File mgxs_file = openmc.MGXSLibrary(self.energy_groups) - materials = [] - macroscopics = [] - nuclide = 'total' + # Create a copy of the Geometry to differentiate for these Macroscopics + geometry = copy.deepcopy(self.openmc_geometry) + materials = openmc.Materials() + + # Get all Cells from the Geometry for differentiation + all_cells = geometry.get_all_material_cells() + # Create the xsdata object and add it to the mgxs_file for i, domain in enumerate(self.domains): + # Build & add metadata to XSdata object if xsdata_names is None: xsdata_name = 'set' + str(i + 1) else: xsdata_name = xsdata_names[i] - xsdata = self.get_xsdata(domain, xsdata_name, nuclide=nuclide, + # Create XSdata and Macroscopic for this domain + xsdata = self.get_xsdata(domain, xsdata_name, nuclide='total', xs_type=xs_type, xs_id=xs_ids[i]) - mgxs_file.add_xsdata(xsdata) + macroscopic = openmc.Macroscopic(name=xsdata_name, xs=xs_ids[i]) - macroscopics.append(openmc.Macroscopic(name=xsdata_name, - xs=xs_ids[i])) - if material_ids is not None: - mat_id = material_ids[i] - else: - mat_id = i - materials.append(openmc.Material(name=xsdata_name + '.' + - xs_ids[i], material_id=mat_id)) - materials[-1].add_macroscopic(macroscopics[-1]) + # Create Material and add to collection + material = openmc.Material(name=xsdata_name + '.' + xs_ids[i]) + material.add_macroscopic(macroscopic) + materials.append(material) - materials_file = openmc.Materials(materials) + # Differentiate Geometry with new Material + if self.domain_type == 'material': + # Fill all appropriate Cells with new Material + for cell in all_cells: + if cell.fill.id == domain.id: + cell.fill = material - return (mgxs_file, materials_file) + elif self.domain_type == 'cell': + for cell in all_cells: + if cell.id == domain.id: + cell.fill = material + + return mgxs_file, materials, geometry def check_library_for_openmc_mgxs(self): """This routine will check the MGXS Types within a Library @@ -1101,6 +1105,7 @@ class Library(object): See also -------- Library.create_mg_library() + Library.create_mg_mode() """ From 9b8dbe6e942f32095b9594f63dfcd82500025306 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 22 May 2016 05:56:29 -0400 Subject: [PATCH 558/650] added NuFissionMatrixXS class to MGXS types and incorporated in to Library and XsData --- openmc/mgxs/library.py | 22 ++- openmc/mgxs/mgxs.py | 430 ++++++++++++++++++++++++++++++++++++++++- openmc/mgxs_library.py | 46 +++-- 3 files changed, 474 insertions(+), 24 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 4eae2cb067..816b78e3d3 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -460,7 +460,10 @@ class Library(object): ---------- domain : Material or Cell or Universe or Integral The material, cell, or universe object of interest (or its ID) - mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'chi'} + mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', + 'capture', 'fission', 'nu-fission', 'kappa-fission', + 'scatter', 'nu-scatter', 'scatter matrix', + 'nu-scatter matrix', 'nu-fission matrix', chi'} The type of multi-group cross section object to return Returns @@ -853,13 +856,20 @@ class Library(object): mymgxs = self.get_mgxs(domain, 'kappa-fission') xsdata.set_kappa_fission_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide]) - if 'chi' in self.mgxs_types: - mymgxs = self.get_mgxs(domain, 'chi') - xsdata.set_chi_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide]) - if 'nu-fission' in self.mgxs_types: - mymgxs = self.get_mgxs(domain, 'nu-fission') + # For chi and nu-fission we can either have only a nu-fission matrix + # provided, or vectors of chi and nu-fission provided + if 'nu-fission matrix' in self.mgxs_types: + mymgxs = self.get_mgxs(domain, 'nu-fission matrix') xsdata.set_nu_fission_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide]) + else: + if 'chi' in self.mgxs_types: + mymgxs = self.get_mgxs(domain, 'chi') + xsdata.set_chi_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide]) + if 'nu-fission' in self.mgxs_types: + mymgxs = self.get_mgxs(domain, 'nu-fission') + xsdata.set_nu_fission_mgxs(mymgxs, xs_type=xs_type, + nuclide=[nuclide]) # multiplicity requires scatter and nu-scatter if ((('scatter matrix' in self.mgxs_types) and ('nu-scatter matrix' in self.mgxs_types))): diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 5be84bb2ce..7173349376 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -32,6 +32,7 @@ MGXS_TYPES = ['total', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', + 'nu-fission matrix', 'chi'] @@ -425,7 +426,10 @@ class MGXS(object): Parameters ---------- - mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'chi'} + mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', + 'capture', 'fission', 'nu-fission', 'kappa-fission', + 'scatter', 'nu-scatter', 'scatter matrix', + 'nu-scatter matrix', 'nu-fission matrix', 'chi'} The type of multi-group cross section object to return domain : openmc.Material or openmc.Cell or openmc.Universe The domain for spatial homogenization @@ -474,6 +478,8 @@ class MGXS(object): mgxs = ScatterMatrixXS(domain, domain_type, energy_groups) elif mgxs_type == 'nu-scatter matrix': mgxs = NuScatterMatrixXS(domain, domain_type, energy_groups) + elif mgxs_type == 'nu-fission matrix': + mgxs = NuFissionMatrixXS(domain, domain_type, energy_groups) elif mgxs_type == 'chi': mgxs = Chi(domain, domain_type, energy_groups) @@ -3182,6 +3188,428 @@ class NuScatterMatrixXS(ScatterMatrixXS): self._hdf5_key = 'nu-scatter matrix' +class NuFissionMatrixXS(MGXS): + """A fission production matrix multi-group cross section. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ + + def __init__(self, domain=None, domain_type=None, + groups=None, by_nuclide=False, name=''): + super(NuFissionMatrixXS, self).__init__(domain, domain_type, + groups, by_nuclide, name) + self._rxn_type = 'nu-fission matrix' + self._hdf5_key = 'nu-fission matrix' + + def __deepcopy__(self, memo): + clone = super(NuFissionMatrixXS, self).__deepcopy__(memo) + return clone + + @property + def scores(self): + scores = ['flux', 'nu-fission'] + + return scores + + @property + def filters(self): + group_edges = self.energy_groups.group_edges + energy = openmc.Filter('energy', group_edges) + energyout = openmc.Filter('energyout', group_edges) + + filters = [[energy], [energy, energyout]] + + return filters + + @property + def estimator(self): + return 'analog' + + @property + def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + self._rxn_rate_tally = self.tallies['nu-fission'] + self._rxn_rate_tally.sparse = self.sparse + return self._rxn_rate_tally + + def get_slice(self, nuclides=[], in_groups=[], out_groups=[]): + """Build a sliced NuFissionMatrix for the specified nuclides and + energy groups. + + This method constructs a new MGXS to encapsulate a subset of the data + represented by this MGXS. The subset of data to include in the tally + slice is determined by the nuclides and energy groups specified in + the input parameters. + + Parameters + ---------- + nuclides : list of str + A list of nuclide name strings + (e.g., ['U-235', 'U-238']; default is []) + in_groups : list of int + A list of incoming energy group indices starting at 1 for the high + energies (e.g., [1, 2, 3]; default is []) + out_groups : list of int + A list of outgoing energy group indices starting at 1 for the high + energies (e.g., [1, 2, 3]; default is []) + + Returns + ------- + openmc.mgxs.MGXS + A new tally which encapsulates the subset of data requested for the + nuclide(s) and/or energy group(s) requested in the parameters. + + """ + + # Call super class method and null out derived tallies + slice_xs = super(NuFissionMatrixXS, self).get_slice(nuclides, + in_groups) + slice_xs._rxn_rate_tally = None + slice_xs._xs_tally = None + + # Slice outgoing energy groups if needed + if len(out_groups) != 0: + filter_bins = [] + for group in out_groups: + group_bounds = self.energy_groups.get_group_bounds(group) + filter_bins.append(group_bounds) + filter_bins = [tuple(filter_bins)] + + # Slice each of the tallies across energyout groups + for tally_type, tally in slice_xs.tallies.items(): + if tally.contains_filter('energyout'): + tally_slice = tally.get_slice(filters=['energyout'], + filter_bins=filter_bins) + slice_xs.tallies[tally_type] = tally_slice + + slice_xs.sparse = self.sparse + return slice_xs + + def get_xs(self, in_groups='all', out_groups='all', + subdomains='all', nuclides='all', + xs_type='macro', order_groups='increasing', + row_column='inout', value='mean', **kwargs): + r"""Returns an array of multi-group cross sections. + + This method constructs a 2D NumPy array for the requested scattering + matrix data data for one or more energy groups and subdomains. + + NOTE: The scattering moments are not multiplied by the :math:`(2l+1)/2` + prefactor in the expansion of the scattering source into Legendre + moments in the neutron transport equation. + + Parameters + ---------- + in_groups : Iterable of Integral or 'all' + Incoming energy groups of interest. Defaults to 'all'. + out_groups : Iterable of Integral or 'all' + Outgoing energy groups of interest. Defaults to 'all'. + subdomains : Iterable of Integral or 'all' + Subdomain IDs of interest. Defaults to 'all'. + nuclides : Iterable of str or 'all' or 'sum' + A list of nuclide name strings (e.g., ['U-235', 'U-238']). The + special string 'all' will return the cross sections for all nuclides + in the spatial domain. The special string 'sum' will return the + cross section summed over all nuclides. Defaults to 'all'. + xs_type: {'macro', 'micro'} + Return the macro or micro cross section in units of cm^-1 or barns. + Defaults to 'macro'. + order_groups: {'increasing', 'decreasing'} + Return the cross section indexed according to increasing or + decreasing energy groups (decreasing or increasing energies). + Defaults to 'increasing'. + row_column: {'inout', 'outin'} + Return the cross section indexed first by incoming group and + second by outgoing group ('inout'), or vice versa ('outin'). + Defaults to 'inout'. + value : str + A string for the type of value to return - 'mean', 'std_dev', or + 'rel_err' are accepted. Defaults to the empty string. + + Returns + ------- + ndarray + A NumPy array of the multi-group cross section indexed in the order + each group and subdomain is listed in the parameters. + + Raises + ------ + ValueError + When this method is called before the multi-group cross section is + computed from tally data. + + """ + + cv.check_value('value', value, ['mean', 'std_dev', 'rel_err']) + cv.check_value('xs_type', xs_type, ['macro', 'micro']) + + filters = [] + filter_bins = [] + + # Construct a collection of the domain filter bins + if not isinstance(subdomains, basestring): + cv.check_iterable_type('subdomains', subdomains, Integral, max_depth=2) + for subdomain in subdomains: + filters.append(self.domain_type) + filter_bins.append((subdomain,)) + + # Construct list of energy group bounds tuples for all requested groups + if not isinstance(in_groups, basestring): + cv.check_iterable_type('groups', in_groups, Integral) + for group in in_groups: + filters.append('energy') + filter_bins.append((self.energy_groups.get_group_bounds(group),)) + + # Construct list of energy group bounds tuples for all requested groups + if not isinstance(out_groups, basestring): + cv.check_iterable_type('groups', out_groups, Integral) + for group in out_groups: + filters.append('energyout') + filter_bins.append((self.energy_groups.get_group_bounds(group),)) + + # Construct a collection of the nuclides to retrieve from the xs tally + if self.by_nuclide: + if nuclides == 'all' or nuclides == 'sum' or nuclides == ['sum']: + query_nuclides = self.get_all_nuclides() + else: + query_nuclides = nuclides + else: + query_nuclides = ['total'] + + # Use tally summation if user requested the sum for all nuclides + if nuclides == 'sum' or nuclides == ['sum']: + xs_tally = self.xs_tally.summation(nuclides=query_nuclides) + xs = xs_tally.get_values(filters=filters, filter_bins=filter_bins, + value=value) + else: + xs = self.xs_tally.get_values(filters=filters, + filter_bins=filter_bins, + nuclides=query_nuclides, value=value) + + xs = np.nan_to_num(xs) + + # Divide by atom number densities for microscopic cross sections + if xs_type == 'micro': + if self.by_nuclide: + densities = self.get_nuclide_densities(nuclides) + else: + densities = self.get_nuclide_densities('sum') + if value == 'mean' or value == 'std_dev': + xs /= densities[np.newaxis, :, np.newaxis] + + # Reverse data if user requested increasing energy groups since + # tally data is stored in order of increasing energies + if order_groups == 'increasing': + if in_groups == 'all': + num_in_groups = self.num_groups + else: + num_in_groups = len(in_groups) + if out_groups == 'all': + num_out_groups = self.num_groups + else: + num_out_groups = len(out_groups) + + # Reshape tally data array with separate axes for domain and energy + num_subdomains = int(xs.shape[0] / + (num_in_groups * num_out_groups)) + new_shape = (num_subdomains, num_in_groups, num_out_groups) + new_shape += xs.shape[1:] + xs = np.reshape(xs, new_shape) + + # Transpose the scattering matrix if requested by user + if row_column == 'outin': + xs = np.swapaxes(xs, 1, 2) + + # Reverse energies to align with increasing energy groups + xs = xs[:, ::-1, ::-1, :] + + # Eliminate trivial dimensions + xs = np.squeeze(xs) + xs = np.atleast_2d(xs) + + return xs + + def print_xs(self, subdomains='all', nuclides='all', + xs_type='macro'): + """Prints a string representation for the multi-group cross section. + + Parameters + ---------- + subdomains : Iterable of Integral or 'all' + The subdomain IDs of the cross sections to include in the report. + Defaults to 'all'. + nuclides : Iterable of str or 'all' or 'sum' + The nuclides of the cross-sections to include in the report. This + may be a list of nuclide name strings (e.g., ['U-235', 'U-238']). + The special string 'all' will report the cross sections for all + nuclides in the spatial domain. The special string 'sum' will report + the cross sections summed over all nuclides. Defaults to 'all'. + xs_type: {'macro', 'micro'} + Return the macro or micro cross section in units of cm^-1 or barns. + Defaults to 'macro'. + + """ + + # Construct a collection of the subdomains to report + if not isinstance(subdomains, basestring): + cv.check_iterable_type('subdomains', subdomains, Integral) + elif self.domain_type == 'distribcell': + subdomains = np.arange(self.num_subdomains, dtype=np.int) + else: + subdomains = [self.domain.id] + + # Construct a collection of the nuclides to report + if self.by_nuclide: + if nuclides == 'all': + nuclides = self.get_all_nuclides() + if nuclides == 'sum': + nuclides = ['sum'] + else: + cv.check_iterable_type('nuclides', nuclides, basestring) + else: + nuclides = ['sum'] + + cv.check_value('xs_type', xs_type, ['macro', 'micro']) + + # Build header for string with type and domain info + string = 'Multi-Group XS\n' + string += '{0: <16}=\t{1}\n'.format('\tReaction Type', self.rxn_type) + string += '{0: <16}=\t{1}\n'.format('\tDomain Type', self.domain_type) + string += '{0: <16}=\t{1}\n'.format('\tDomain ID', self.domain.id) + + # If cross section data has not been computed, only print string header + if self.tallies is None: + print(string) + return + + string += '{0: <16}\n'.format('\tEnergy Groups:') + template = '{0: <12}Group {1} [{2: <10} - {3: <10}MeV]\n' + + # Loop over energy groups ranges + for group in range(1, self.num_groups+1): + bounds = self.energy_groups.get_group_bounds(group) + string += template.format('', group, bounds[0], bounds[1]) + + # Loop over all subdomains + for subdomain in subdomains: + + if self.domain_type == 'distribcell': + string += \ + '{0: <16}=\t{1}\n'.format('\tSubdomain', subdomain) + + # Loop over all Nuclides + for nuclide in nuclides: + + # Build header for nuclide type + if xs_type != 'sum': + string += '{0: <16}=\t{1}\n'.format('\tNuclide', nuclide) + + # Build header for cross section type + if xs_type == 'macro': + string += '{0: <16}\n'.format('\tCross Sections [cm^-1]:') + else: + string += '{0: <16}\n'.format('\tCross Sections [barns]:') + + template = '{0: <12}Group {1} -> Group {2}:\t\t' + + # Loop over incoming/outgoing energy groups ranges + for in_group in range(1, self.num_groups+1): + for out_group in range(1, self.num_groups+1): + string += template.format('', in_group, out_group) + average = \ + self.get_xs([in_group], [out_group], + [subdomain], [nuclide], + xs_type=xs_type, value='mean') + rel_err = \ + self.get_xs([in_group], [out_group], + [subdomain], [nuclide], + xs_type=xs_type, value='rel_err') + average = average.flatten()[0] + rel_err = rel_err.flatten()[0] * 100. + string += '{:1.2e} +/- {:1.2e}%'.format(average, rel_err) + string += '\n' + string += '\n' + string += '\n' + string += '\n' + + print(string) + + class Chi(MGXS): """The fission spectrum. diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 88ae05808a..7559b427a1 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -131,6 +131,8 @@ class XSdata(object): num_polar : int Number of equal width angular bins that the polar angular domain is subdivided into. This only applies when ``representation`` is "angle". + use_chi : bool + Whether or not a chi vector or nu-fission matrix was used. vector_shape : iterable of int Dimensionality of vector multi-group cross sections (e.g., the total cross section). The return result depends on the value of @@ -292,6 +294,10 @@ class XSdata(object): def num_azimuthal(self): return self._num_azimuthal + @property + def use_chi(self): + return self._use_chi + @property def total(self): return self._total @@ -461,6 +467,11 @@ class XSdata(object): check_greater_than('num_azimuthal', num_azimuthal, 0) self._num_azimuthal = num_azimuthal + @use_chi.setter + def use_chi(self, use_chi): + check_type('use_chi', use_chi, bool) + self._use_chi = use_chi + @total.setter def total(self, total): check_type('total', total, Iterable, expected_iter_type=Real) @@ -512,8 +523,8 @@ class XSdata(object): @chi.setter def chi(self, chi): - if self._use_chi is not None: - if not self._use_chi: + if self.use_chi is not None: + if not self.use_chi: msg = 'Providing chi when nu_fission already provided as a' \ 'matrix' raise ValueError(msg) @@ -529,8 +540,8 @@ class XSdata(object): self._chi = npchi - if self._use_chi is not None: - self._use_chi = True + if self.use_chi is not None: + self.use_chi = True @scatter.setter def scatter(self, scatter): @@ -574,8 +585,8 @@ class XSdata(object): check_iterable_type('nu_fission', npnu_fission, Real, max_depth=len(npnu_fission.shape)) - if self._use_chi is not None: - if self._use_chi: + if self.use_chi is not None: + if self.use_chi: check_value('nu_fission shape', npnu_fission.shape, [self.vector_shape]) else: @@ -587,9 +598,9 @@ class XSdata(object): # Find out if we have a nu-fission matrix or vector # and set a flag to allow other methods to check this later. if npnu_fission.shape == self.vector_shape: - self._use_chi = True + self.use_chi = True else: - self._use_chi = False + self.use_chi = False self._nu_fission = npnu_fission if np.sum(self._nu_fission) > 0.0: @@ -728,10 +739,8 @@ class XSdata(object): """ - # The NuFissionXS class does not have the capability to produce - # a fission matrix and therefore if this path is pursued, we know - # chi must be used. - check_type('nu_fission', nu_fission, openmc.mgxs.NuFissionXS) + check_type('nu_fission', nu_fission, (openmc.mgxs.NuFissionXS, + openmc.mgxs.NuFissionMatrixXS)) check_value('energy_groups', nu_fission.energy_groups, [self.energy_groups]) check_value('domain_type', nu_fission.domain_type, @@ -744,7 +753,10 @@ class XSdata(object): msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) - self._use_chi = True + if type(nu_fission) is openmc.mgxs.NuFissionMatrixXS: + self.use_chi = False + else: + self.use_chi = True if np.sum(self._nu_fission) > 0.0: self._fissionable = True @@ -809,8 +821,8 @@ class XSdata(object): """ - if self._use_chi is not None: - if not self._use_chi: + if self.use_chi is not None: + if not self.use_chi: msg = 'Providing chi when nu_fission already provided as a ' \ 'matrix!' raise ValueError(msg) @@ -827,8 +839,8 @@ class XSdata(object): msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) - if self._use_chi is not None: - self._use_chi = True + if self.use_chi is not None: + self.use_chi = True def set_scatter_mgxs(self, scatter, nuclide='total', xs_type='macro'): """This method allows for an openmc.mgxs.ScatterMatrixXS From b7cc8a3a1460a9662fd3e8d11a6c0cf5902946c2 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 22 May 2016 15:04:04 -0400 Subject: [PATCH 559/650] added MultiplicityMatrix class to MGXS and incorporated in to Library and XsData --- openmc/mgxs/library.py | 19 +- openmc/mgxs/mgxs.py | 436 ++++++++++++++++++++++++++++++++++++++++- openmc/mgxs_library.py | 40 ++-- 3 files changed, 469 insertions(+), 26 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 816b78e3d3..23d40a9527 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -870,9 +870,15 @@ class Library(object): mymgxs = self.get_mgxs(domain, 'nu-fission') xsdata.set_nu_fission_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide]) - # multiplicity requires scatter and nu-scatter - if ((('scatter matrix' in self.mgxs_types) and - ('nu-scatter matrix' in self.mgxs_types))): + # If multiplicity matrix is available, prefer that + if 'multiplicity matrix' in self.mgxs_types: + mult_mgxs = self.get_mgxs(domain, 'multiplicity matrix') + xsdata.set_multiplicity_mgxs(mult_mgxs, xs_type=xs_type, + nuclide=[nuclide]) + using_multiplicity = True + # multiplicity wil fall back to using scatter and nu-scatter + elif ((('scatter matrix' in self.mgxs_types) and + ('nu-scatter matrix' in self.mgxs_types))): scatt_mgxs = self.get_mgxs(domain, 'scatter matrix') nuscatt_mgxs = self.get_mgxs(domain, 'nu-scatter matrix') xsdata.set_multiplicity_mgxs(nuscatt_mgxs, scatt_mgxs, @@ -1131,9 +1137,10 @@ class Library(object): msg = '"nu-scatter matrix" MGXS type is required but not provided.' warn(msg) else: - # Ok, now see the status of scatter - if 'scatter matrix' not in self.mgxs_types: - # We dont have both nu-scatter and scatter, therefore + # Ok, now see the status of scatter and/or multiplicity + if ((('scatter matrix' not in self.mgxs_types) and + ('multiplicity matrix' not in self.mgxs_types))): + # We dont have data needed for multiplicity matrix, therefore # we need total, and not transport. if 'total' not in self.mgxs_types: error_flag = True diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 7173349376..c3fd3a1b02 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -32,6 +32,7 @@ MGXS_TYPES = ['total', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', + 'multiplicity matrix', 'nu-fission matrix', 'chi'] @@ -478,6 +479,8 @@ class MGXS(object): mgxs = ScatterMatrixXS(domain, domain_type, energy_groups) elif mgxs_type == 'nu-scatter matrix': mgxs = NuScatterMatrixXS(domain, domain_type, energy_groups) + elif mgxs_type == 'multiplicity matrix': + mgxs = MultiplicityMatrix(domain, domain_type, energy_groups) elif mgxs_type == 'nu-fission matrix': mgxs = NuFissionMatrixXS(domain, domain_type, energy_groups) elif mgxs_type == 'chi': @@ -3188,6 +3191,431 @@ class NuScatterMatrixXS(ScatterMatrixXS): self._hdf5_key = 'nu-scatter matrix' +class MultiplicityMatrix(MGXS): + """The scattering multiplicity matrix. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ + + def __init__(self, domain=None, domain_type=None, + groups=None, by_nuclide=False, name=''): + super(MultiplicityMatrix, self).__init__(domain, domain_type, groups, + by_nuclide, name) + self._rxn_type = 'multiplicity' + + @property + def scores(self): + return ['nu-scatter', 'scatter'] + + @property + def filters(self): + # Create the non-domain specific Filters for the Tallies + group_edges = self.energy_groups.group_edges + energyout = openmc.Filter('energyout', group_edges) + energyin = openmc.Filter('energy', group_edges) + return [[energyin, energyout], [energyin, energyout]] + + @property + def tally_keys(self): + return ['nu-scatter', 'scatter'] + + @property + def estimator(self): + return 'analog' + + @property + def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + self._rxn_rate_tally = self.tallies['nu-scatter'] + self._rxn_rate_tally.sparse = self.sparse + return self._rxn_rate_tally + + @property + def xs_tally(self): + + if self._xs_tally is None: + scatter = self.tallies['scatter'] + + # Compute the multiplicity + self._xs_tally = self.rxn_rate_tally / scatter + super(MultiplicityMatrix, self)._compute_xs() + + return self._xs_tally + + def get_slice(self, nuclides=[], in_groups=[], out_groups=[]): + """Build a sliced MultiplicityMatrix for the specified nuclides and + energy groups. + + This method constructs a new MGXS to encapsulate a subset of the data + represented by this MGXS. The subset of data to include in the tally + slice is determined by the nuclides and energy groups specified in + the input parameters. + + Parameters + ---------- + nuclides : list of str + A list of nuclide name strings + (e.g., ['U-235', 'U-238']; default is []) + in_groups : list of int + A list of incoming energy group indices starting at 1 for the high + energies (e.g., [1, 2, 3]; default is []) + out_groups : list of int + A list of outgoing energy group indices starting at 1 for the high + energies (e.g., [1, 2, 3]; default is []) + + Returns + ------- + openmc.mgxs.MGXS + A new tally which encapsulates the subset of data requested for the + nuclide(s) and/or energy group(s) requested in the parameters. + + """ + + # Call super class method and null out derived tallies + slice_xs = super(MultiplicityMatrix, self).get_slice(nuclides, + in_groups) + slice_xs._rxn_rate_tally = None + slice_xs._xs_tally = None + + # Slice outgoing energy groups if needed + if len(out_groups) != 0: + filter_bins = [] + for group in out_groups: + group_bounds = self.energy_groups.get_group_bounds(group) + filter_bins.append(group_bounds) + filter_bins = [tuple(filter_bins)] + + # Slice each of the tallies across energyout groups + for tally_type, tally in slice_xs.tallies.items(): + if tally.contains_filter('energyout'): + tally_slice = tally.get_slice(filters=['energyout'], + filter_bins=filter_bins) + slice_xs.tallies[tally_type] = tally_slice + + slice_xs.sparse = self.sparse + return slice_xs + + def get_xs(self, in_groups='all', out_groups='all', + subdomains='all', nuclides='all', + xs_type='macro', order_groups='increasing', + row_column='inout', value='mean', **kwargs): + r"""Returns an array of multi-group cross sections. + + This method constructs a 2D NumPy array for the requested multiplicity + matrix data data for one or more energy groups and subdomains. + + Parameters + ---------- + in_groups : Iterable of Integral or 'all' + Incoming energy groups of interest. Defaults to 'all'. + out_groups : Iterable of Integral or 'all' + Outgoing energy groups of interest. Defaults to 'all'. + subdomains : Iterable of Integral or 'all' + Subdomain IDs of interest. Defaults to 'all'. + nuclides : Iterable of str or 'all' or 'sum' + A list of nuclide name strings (e.g., ['U-235', 'U-238']). The + special string 'all' will return the cross sections for all nuclides + in the spatial domain. The special string 'sum' will return the + cross section summed over all nuclides. Defaults to 'all'. + xs_type: {'macro', 'micro'} + Return the macro or micro cross section in units of cm^-1 or barns. + Defaults to 'macro'. + order_groups: {'increasing', 'decreasing'} + Return the cross section indexed according to increasing or + decreasing energy groups (decreasing or increasing energies). + Defaults to 'increasing'. + row_column: {'inout', 'outin'} + Return the cross section indexed first by incoming group and + second by outgoing group ('inout'), or vice versa ('outin'). + Defaults to 'inout'. + value : str + A string for the type of value to return - 'mean', 'std_dev', or + 'rel_err' are accepted. Defaults to the empty string. + + Returns + ------- + ndarray + A NumPy array of the multi-group cross section indexed in the order + each group and subdomain is listed in the parameters. + + Raises + ------ + ValueError + When this method is called before the multi-group cross section is + computed from tally data. + + """ + + cv.check_value('value', value, ['mean', 'std_dev', 'rel_err']) + cv.check_value('xs_type', xs_type, ['macro', 'micro']) + + filters = [] + filter_bins = [] + + # Construct a collection of the domain filter bins + if not isinstance(subdomains, basestring): + cv.check_iterable_type('subdomains', subdomains, Integral, max_depth=2) + for subdomain in subdomains: + filters.append(self.domain_type) + filter_bins.append((subdomain,)) + + # Construct list of energy group bounds tuples for all requested groups + if not isinstance(in_groups, basestring): + cv.check_iterable_type('groups', in_groups, Integral) + for group in in_groups: + filters.append('energy') + filter_bins.append((self.energy_groups.get_group_bounds(group),)) + + # Construct list of energy group bounds tuples for all requested groups + if not isinstance(out_groups, basestring): + cv.check_iterable_type('groups', out_groups, Integral) + for group in out_groups: + filters.append('energyout') + filter_bins.append((self.energy_groups.get_group_bounds(group),)) + + # Construct a collection of the nuclides to retrieve from the xs tally + if self.by_nuclide: + if nuclides == 'all' or nuclides == 'sum' or nuclides == ['sum']: + query_nuclides = self.get_all_nuclides() + else: + query_nuclides = nuclides + else: + query_nuclides = ['total'] + + # Use tally summation if user requested the sum for all nuclides + if nuclides == 'sum' or nuclides == ['sum']: + xs_tally = self.xs_tally.summation(nuclides=query_nuclides) + xs = xs_tally.get_values(filters=filters, filter_bins=filter_bins, + value=value) + else: + xs = self.xs_tally.get_values(filters=filters, + filter_bins=filter_bins, + nuclides=query_nuclides, value=value) + + xs = np.nan_to_num(xs) + + # Divide by atom number densities for microscopic cross sections + if xs_type == 'micro': + if self.by_nuclide: + densities = self.get_nuclide_densities(nuclides) + else: + densities = self.get_nuclide_densities('sum') + if value == 'mean' or value == 'std_dev': + xs /= densities[np.newaxis, :, np.newaxis] + + # Reverse data if user requested increasing energy groups since + # tally data is stored in order of increasing energies + if order_groups == 'increasing': + if in_groups == 'all': + num_in_groups = self.num_groups + else: + num_in_groups = len(in_groups) + if out_groups == 'all': + num_out_groups = self.num_groups + else: + num_out_groups = len(out_groups) + + # Reshape tally data array with separate axes for domain and energy + num_subdomains = int(xs.shape[0] / + (num_in_groups * num_out_groups)) + new_shape = (num_subdomains, num_in_groups, num_out_groups) + new_shape += xs.shape[1:] + xs = np.reshape(xs, new_shape) + + # Transpose the matrix if requested by user + if row_column == 'outin': + xs = np.swapaxes(xs, 1, 2) + + # Reverse energies to align with increasing energy groups + xs = xs[:, ::-1, ::-1, :] + + # Eliminate trivial dimensions + xs = np.squeeze(xs) + xs = np.atleast_2d(xs) + + return xs + + def print_xs(self, subdomains='all', nuclides='all', + xs_type='macro'): + """Prints a string representation for the multi-group cross section. + + Parameters + ---------- + subdomains : Iterable of Integral or 'all' + The subdomain IDs of the cross sections to include in the report. + Defaults to 'all'. + nuclides : Iterable of str or 'all' or 'sum' + The nuclides of the cross-sections to include in the report. This + may be a list of nuclide name strings (e.g., ['U-235', 'U-238']). + The special string 'all' will report the cross sections for all + nuclides in the spatial domain. The special string 'sum' will report + the cross sections summed over all nuclides. Defaults to 'all'. + xs_type: {'macro', 'micro'} + Return the macro or micro cross section in units of cm^-1 or barns. + Defaults to 'macro'. + + """ + + # Construct a collection of the subdomains to report + if not isinstance(subdomains, basestring): + cv.check_iterable_type('subdomains', subdomains, Integral) + elif self.domain_type == 'distribcell': + subdomains = np.arange(self.num_subdomains, dtype=np.int) + else: + subdomains = [self.domain.id] + + # Construct a collection of the nuclides to report + if self.by_nuclide: + if nuclides == 'all': + nuclides = self.get_all_nuclides() + if nuclides == 'sum': + nuclides = ['sum'] + else: + cv.check_iterable_type('nuclides', nuclides, basestring) + else: + nuclides = ['sum'] + + cv.check_value('xs_type', xs_type, ['macro', 'micro']) + + # Build header for string with type and domain info + string = 'Multi-Group XS\n' + string += '{0: <16}=\t{1}\n'.format('\tReaction Type', self.rxn_type) + string += '{0: <16}=\t{1}\n'.format('\tDomain Type', self.domain_type) + string += '{0: <16}=\t{1}\n'.format('\tDomain ID', self.domain.id) + + # If cross section data has not been computed, only print string header + if self.tallies is None: + print(string) + return + + string += '{0: <16}\n'.format('\tEnergy Groups:') + template = '{0: <12}Group {1} [{2: <10} - {3: <10}MeV]\n' + + # Loop over energy groups ranges + for group in range(1, self.num_groups+1): + bounds = self.energy_groups.get_group_bounds(group) + string += template.format('', group, bounds[0], bounds[1]) + + # Loop over all subdomains + for subdomain in subdomains: + + if self.domain_type == 'distribcell': + string += \ + '{0: <16}=\t{1}\n'.format('\tSubdomain', subdomain) + + # Loop over all Nuclides + for nuclide in nuclides: + + # Build header for nuclide type + if xs_type != 'sum': + string += '{0: <16}=\t{1}\n'.format('\tNuclide', nuclide) + + # Build header for cross section type + if xs_type == 'macro': + string += '{0: <16}\n'.format('\tCross Sections [cm^-1]:') + else: + string += '{0: <16}\n'.format('\tCross Sections [barns]:') + + template = '{0: <12}Group {1} -> Group {2}:\t\t' + + # Loop over incoming/outgoing energy groups ranges + for in_group in range(1, self.num_groups+1): + for out_group in range(1, self.num_groups+1): + string += template.format('', in_group, out_group) + average = \ + self.get_xs([in_group], [out_group], + [subdomain], [nuclide], + xs_type=xs_type, value='mean') + rel_err = \ + self.get_xs([in_group], [out_group], + [subdomain], [nuclide], + xs_type=xs_type, value='rel_err') + average = average.flatten()[0] + rel_err = rel_err.flatten()[0] * 100. + string += '{:1.2e} +/- {:1.2e}%'.format(average, rel_err) + string += '\n' + string += '\n' + string += '\n' + string += '\n' + + print(string) + + class NuFissionMatrixXS(MGXS): """A fission production matrix multi-group cross section. @@ -3366,13 +3794,9 @@ class NuFissionMatrixXS(MGXS): row_column='inout', value='mean', **kwargs): r"""Returns an array of multi-group cross sections. - This method constructs a 2D NumPy array for the requested scattering + This method constructs a 2D NumPy array for the requested nu-fission matrix data data for one or more energy groups and subdomains. - NOTE: The scattering moments are not multiplied by the :math:`(2l+1)/2` - prefactor in the expansion of the scattering source into Legendre - moments in the neutron transport equation. - Parameters ---------- in_groups : Iterable of Integral or 'all' @@ -3491,7 +3915,7 @@ class NuFissionMatrixXS(MGXS): new_shape += xs.shape[1:] xs = np.reshape(xs, new_shape) - # Transpose the scattering matrix if requested by user + # Transpose the matrix if requested by user if row_column == 'outin': xs = np.swapaxes(xs, 1, 2) diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 7559b427a1..f3d8b28fcd 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -903,9 +903,10 @@ class XSdata(object): msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) - def set_multiplicity_mgxs(self, nuscatter, scatter, nuclide='total', + def set_multiplicity_mgxs(self, nuscatter, scatter=None, nuclide='total', xs_type='macro'): - """This method allows for an openmc.mgxs.NuScatterMatrixXS and + """This method allows for either the direct use of only an + openmc.mgxs.MultiplicityMatrix OR an openmc.mgxs.NuScatterMatrixXS and openmc.mgxs.ScatterMatrixXS to be used to set the scattering multiplicity for this XSdata object. Multiplicity, in OpenMC parlance, is a factor used to account for the production @@ -915,9 +916,10 @@ class XSdata(object): Parameters ---------- - nuscatter: openmc.mgxs.NuScatterMatrixXS - MGXS Object containing the nu-scattering matrix cross section - for the domain of interest. + nuscatter: {openmc.mgxs.NuScatterMatrixXS, + openmc.mgxs.MultiplicityMatrix} + MGXS Object containing the matrix cross section for the domain + of interest. scatter: openmc.mgxs.ScatterMatrixXS MGXS Object containing the scattering matrix cross section for the domain of interest. @@ -935,23 +937,33 @@ class XSdata(object): """ - check_type('nuscatter', nuscatter, openmc.mgxs.NuScatterMatrixXS) - check_type('scatter', scatter, openmc.mgxs.ScatterMatrixXS) + check_type('nuscatter', nuscatter, (openmc.mgxs.NuScatterMatrixXS, + openmc.mgxs.MultiplicityMatrix)) check_value('energy_groups', nuscatter.energy_groups, [self.energy_groups]) - check_value('energy_groups', scatter.energy_groups, - [self.energy_groups]) check_value('domain_type', nuscatter.domain_type, ['universe', 'cell', 'material']) - check_value('domain_type', scatter.domain_type, - ['universe', 'cell', 'material']) + if scatter is not None: + check_type('scatter', scatter, openmc.mgxs.ScatterMatrixXS) + if isinstance(nuscatter, openmc.mgxs.MultiplicityMatrix): + msg = 'Either an MultiplicityMatrix object must be passed ' \ + 'for "nuscatter" or the "scatter" argument must be ' \ + 'provided.' + raise ValueError(msg) + check_value('energy_groups', scatter.energy_groups, + [self.energy_groups]) + check_value('domain_type', scatter.domain_type, + ['universe', 'cell', 'material']) if self.representation is 'isotropic': nuscatt = nuscatter.get_xs(nuclides=nuclide, xs_type=xs_type, moment=0) - scatt = scatter.get_xs(nuclides=nuclide, - xs_type=xs_type, moment=0) - self._multiplicity = np.divide(nuscatt, scatt) + if isinstance(nuscatter, openmc.mgxs.MultiplicityMatrix): + self._multiplicity = nuscatt + else: + scatt = scatter.get_xs(nuclides=nuclide, + xs_type=xs_type, moment=0) + self._multiplicity = np.divide(nuscatt, scatt) elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) From 002b1e360a45e2fa2b194365f813df61dd540b32 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 22 May 2016 20:22:04 -0400 Subject: [PATCH 560/650] Replaced most code within MultiplicityMatrix and NuFissionMatrix with a base abstract type, MatrixMGXS --- openmc/mgxs/mgxs.py | 1041 +++++++++++++++++-------------------------- 1 file changed, 412 insertions(+), 629 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index c3fd3a1b02..b88e583aec 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -47,8 +47,8 @@ DOMAIN_TYPES = ['cell', # Supported domain classes # TODO: Implement Mesh domains _DOMAINS = [openmc.Cell, - openmc.Universe, - openmc.Material] + openmc.Universe, + openmc.Material] class MGXS(object): @@ -1530,6 +1530,409 @@ class MGXS(object): return df +class MatrixMGXS(MGXS): + """An abstract multi-group cross section for some energy group structure + within some spatial domain. This class is specifically intended for + cross sections which depend on both the incoming and outgoing energy groups + and are therefore represented by matrices. Examples of this include the + scattering and nu-fission matrices. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group cross sections for deterministic neutronics calculations. + + NOTE: Users should instantiate the subclasses of this abstract class. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ + + # This is an abstract class which cannot be instantiated + __metaclass__ = abc.ABCMeta + + @property + def filters(self): + # Create the non-domain specific Filters for the Tallies + group_edges = self.energy_groups.group_edges + energy = openmc.Filter('energy', group_edges) + energyout = openmc.Filter('energyout', group_edges) + + filters = [[energy], [energy, energyout]] + + return filters + + @property + def estimator(self): + return 'analog' + + def get_xs(self, in_groups='all', out_groups='all', + subdomains='all', nuclides='all', + xs_type='macro', order_groups='increasing', + row_column='inout', value='mean', **kwargs): + r"""Returns an array of multi-group cross sections. + + This method constructs a 2D NumPy array for the requested multiplicity + matrix data data for one or more energy groups and subdomains. + + Parameters + ---------- + in_groups : Iterable of Integral or 'all' + Incoming energy groups of interest. Defaults to 'all'. + out_groups : Iterable of Integral or 'all' + Outgoing energy groups of interest. Defaults to 'all'. + subdomains : Iterable of Integral or 'all' + Subdomain IDs of interest. Defaults to 'all'. + nuclides : Iterable of str or 'all' or 'sum' + A list of nuclide name strings (e.g., ['U-235', 'U-238']). The + special string 'all' will return the cross sections for all nuclides + in the spatial domain. The special string 'sum' will return the + cross section summed over all nuclides. Defaults to 'all'. + xs_type: {'macro', 'micro'} + Return the macro or micro cross section in units of cm^-1 or barns. + Defaults to 'macro'. + order_groups: {'increasing', 'decreasing'} + Return the cross section indexed according to increasing or + decreasing energy groups (decreasing or increasing energies). + Defaults to 'increasing'. + row_column: {'inout', 'outin'} + Return the cross section indexed first by incoming group and + second by outgoing group ('inout'), or vice versa ('outin'). + Defaults to 'inout'. + value : str + A string for the type of value to return - 'mean', 'std_dev', or + 'rel_err' are accepted. Defaults to the empty string. + + Returns + ------- + ndarray + A NumPy array of the multi-group cross section indexed in the order + each group and subdomain is listed in the parameters. + + Raises + ------ + ValueError + When this method is called before the multi-group cross section is + computed from tally data. + + """ + + cv.check_value('value', value, ['mean', 'std_dev', 'rel_err']) + cv.check_value('xs_type', xs_type, ['macro', 'micro']) + + filters = [] + filter_bins = [] + + # Construct a collection of the domain filter bins + if not isinstance(subdomains, basestring): + cv.check_iterable_type('subdomains', subdomains, Integral, max_depth=2) + for subdomain in subdomains: + filters.append(self.domain_type) + filter_bins.append((subdomain,)) + + # Construct list of energy group bounds tuples for all requested groups + if not isinstance(in_groups, basestring): + cv.check_iterable_type('groups', in_groups, Integral) + for group in in_groups: + filters.append('energy') + filter_bins.append((self.energy_groups.get_group_bounds(group),)) + + # Construct list of energy group bounds tuples for all requested groups + if not isinstance(out_groups, basestring): + cv.check_iterable_type('groups', out_groups, Integral) + for group in out_groups: + filters.append('energyout') + filter_bins.append((self.energy_groups.get_group_bounds(group),)) + + # Construct a collection of the nuclides to retrieve from the xs tally + if self.by_nuclide: + if nuclides == 'all' or nuclides == 'sum' or nuclides == ['sum']: + query_nuclides = self.get_all_nuclides() + else: + query_nuclides = nuclides + else: + query_nuclides = ['total'] + + # Use tally summation if user requested the sum for all nuclides + if nuclides == 'sum' or nuclides == ['sum']: + xs_tally = self.xs_tally.summation(nuclides=query_nuclides) + xs = xs_tally.get_values(filters=filters, filter_bins=filter_bins, + value=value) + else: + xs = self.xs_tally.get_values(filters=filters, + filter_bins=filter_bins, + nuclides=query_nuclides, value=value) + + xs = np.nan_to_num(xs) + + # Divide by atom number densities for microscopic cross sections + if xs_type == 'micro': + if self.by_nuclide: + densities = self.get_nuclide_densities(nuclides) + else: + densities = self.get_nuclide_densities('sum') + if value == 'mean' or value == 'std_dev': + xs /= densities[np.newaxis, :, np.newaxis] + + # Reverse data if user requested increasing energy groups since + # tally data is stored in order of increasing energies + if order_groups == 'increasing': + if in_groups == 'all': + num_in_groups = self.num_groups + else: + num_in_groups = len(in_groups) + if out_groups == 'all': + num_out_groups = self.num_groups + else: + num_out_groups = len(out_groups) + + # Reshape tally data array with separate axes for domain and energy + num_subdomains = int(xs.shape[0] / + (num_in_groups * num_out_groups)) + new_shape = (num_subdomains, num_in_groups, num_out_groups) + new_shape += xs.shape[1:] + xs = np.reshape(xs, new_shape) + + # Transpose the matrix if requested by user + if row_column == 'outin': + xs = np.swapaxes(xs, 1, 2) + + # Reverse energies to align with increasing energy groups + xs = xs[:, ::-1, ::-1, :] + + # Eliminate trivial dimensions + xs = np.squeeze(xs) + xs = np.atleast_2d(xs) + + return xs + + def get_slice(self, nuclides=[], in_groups=[], out_groups=[]): + """Build a sliced NuFissionMatrix for the specified nuclides and + energy groups. + + This method constructs a new MGXS to encapsulate a subset of the data + represented by this MGXS. The subset of data to include in the tally + slice is determined by the nuclides and energy groups specified in + the input parameters. + + Parameters + ---------- + nuclides : list of str + A list of nuclide name strings + (e.g., ['U-235', 'U-238']; default is []) + in_groups : list of int + A list of incoming energy group indices starting at 1 for the high + energies (e.g., [1, 2, 3]; default is []) + out_groups : list of int + A list of outgoing energy group indices starting at 1 for the high + energies (e.g., [1, 2, 3]; default is []) + + Returns + ------- + openmc.mgxs.MGXS + A new tally which encapsulates the subset of data requested for the + nuclide(s) and/or energy group(s) requested in the parameters. + + """ + + # Call super class method and null out derived tallies + slice_xs = super(NuFissionMatrixXS, self).get_slice(nuclides, + in_groups) + slice_xs._rxn_rate_tally = None + slice_xs._xs_tally = None + + # Slice outgoing energy groups if needed + if len(out_groups) != 0: + filter_bins = [] + for group in out_groups: + group_bounds = self.energy_groups.get_group_bounds(group) + filter_bins.append(group_bounds) + filter_bins = [tuple(filter_bins)] + + # Slice each of the tallies across energyout groups + for tally_type, tally in slice_xs.tallies.items(): + if tally.contains_filter('energyout'): + tally_slice = tally.get_slice(filters=['energyout'], + filter_bins=filter_bins) + slice_xs.tallies[tally_type] = tally_slice + + slice_xs.sparse = self.sparse + return slice_xs + + def print_xs(self, subdomains='all', nuclides='all', xs_type='macro'): + """Prints a string representation for the multi-group cross section. + + Parameters + ---------- + subdomains : Iterable of Integral or 'all' + The subdomain IDs of the cross sections to include in the report. + Defaults to 'all'. + nuclides : Iterable of str or 'all' or 'sum' + The nuclides of the cross-sections to include in the report. This + may be a list of nuclide name strings (e.g., ['U-235', 'U-238']). + The special string 'all' will report the cross sections for all + nuclides in the spatial domain. The special string 'sum' will report + the cross sections summed over all nuclides. Defaults to 'all'. + xs_type: {'macro', 'micro'} + Return the macro or micro cross section in units of cm^-1 or barns. + Defaults to 'macro'. + + """ + + # Construct a collection of the subdomains to report + if not isinstance(subdomains, basestring): + cv.check_iterable_type('subdomains', subdomains, Integral) + elif self.domain_type == 'distribcell': + subdomains = np.arange(self.num_subdomains, dtype=np.int) + else: + subdomains = [self.domain.id] + + # Construct a collection of the nuclides to report + if self.by_nuclide: + if nuclides == 'all': + nuclides = self.get_all_nuclides() + if nuclides == 'sum': + nuclides = ['sum'] + else: + cv.check_iterable_type('nuclides', nuclides, basestring) + else: + nuclides = ['sum'] + + cv.check_value('xs_type', xs_type, ['macro', 'micro']) + + # Build header for string with type and domain info + string = 'Multi-Group XS\n' + string += '{0: <16}=\t{1}\n'.format('\tReaction Type', self.rxn_type) + string += '{0: <16}=\t{1}\n'.format('\tDomain Type', self.domain_type) + string += '{0: <16}=\t{1}\n'.format('\tDomain ID', self.domain.id) + + # If cross section data has not been computed, only print string header + if self.tallies is None: + print(string) + return + + string += '{0: <16}\n'.format('\tEnergy Groups:') + template = '{0: <12}Group {1} [{2: <10} - {3: <10}MeV]\n' + + # Loop over energy groups ranges + for group in range(1, self.num_groups+1): + bounds = self.energy_groups.get_group_bounds(group) + string += template.format('', group, bounds[0], bounds[1]) + + # Loop over all subdomains + for subdomain in subdomains: + + if self.domain_type == 'distribcell': + string += \ + '{0: <16}=\t{1}\n'.format('\tSubdomain', subdomain) + + # Loop over all Nuclides + for nuclide in nuclides: + + # Build header for nuclide type + if xs_type != 'sum': + string += '{0: <16}=\t{1}\n'.format('\tNuclide', nuclide) + + # Build header for cross section type + if xs_type == 'macro': + string += '{0: <16}\n'.format('\tCross Sections [cm^-1]:') + else: + string += '{0: <16}\n'.format('\tCross Sections [barns]:') + + template = '{0: <12}Group {1} -> Group {2}:\t\t' + + # Loop over incoming/outgoing energy groups ranges + for in_group in range(1, self.num_groups+1): + for out_group in range(1, self.num_groups+1): + string += template.format('', in_group, out_group) + average = \ + self.get_xs([in_group], [out_group], + [subdomain], [nuclide], + xs_type=xs_type, value='mean') + rel_err = \ + self.get_xs([in_group], [out_group], + [subdomain], [nuclide], + xs_type=xs_type, value='rel_err') + average = average.flatten()[0] + rel_err = rel_err.flatten()[0] * 100. + string += '{:1.2e} +/- {:1.2e}%'.format(average, rel_err) + string += '\n' + string += '\n' + string += '\n' + string += '\n' + + print(string) + + class TotalXS(MGXS): """A total multi-group cross section. @@ -3191,7 +3594,7 @@ class NuScatterMatrixXS(ScatterMatrixXS): self._hdf5_key = 'nu-scatter matrix' -class MultiplicityMatrix(MGXS): +class MultiplicityMatrix(MatrixMGXS): """The scattering multiplicity matrix. This class can be used for both OpenMC input generation and tally data @@ -3280,23 +3683,19 @@ class MultiplicityMatrix(MGXS): @property def scores(self): - return ['nu-scatter', 'scatter'] + scores = ['nu-scatter', 'scatter'] + return scores @property def filters(self): # Create the non-domain specific Filters for the Tallies group_edges = self.energy_groups.group_edges + energy = openmc.Filter('energy', group_edges) energyout = openmc.Filter('energyout', group_edges) - energyin = openmc.Filter('energy', group_edges) - return [[energyin, energyout], [energyin, energyout]] - @property - def tally_keys(self): - return ['nu-scatter', 'scatter'] + filters = [[energy, energyout], [energy, energyout]] - @property - def estimator(self): - return 'analog' + return filters @property def rxn_rate_tally(self): @@ -3317,306 +3716,8 @@ class MultiplicityMatrix(MGXS): return self._xs_tally - def get_slice(self, nuclides=[], in_groups=[], out_groups=[]): - """Build a sliced MultiplicityMatrix for the specified nuclides and - energy groups. - This method constructs a new MGXS to encapsulate a subset of the data - represented by this MGXS. The subset of data to include in the tally - slice is determined by the nuclides and energy groups specified in - the input parameters. - - Parameters - ---------- - nuclides : list of str - A list of nuclide name strings - (e.g., ['U-235', 'U-238']; default is []) - in_groups : list of int - A list of incoming energy group indices starting at 1 for the high - energies (e.g., [1, 2, 3]; default is []) - out_groups : list of int - A list of outgoing energy group indices starting at 1 for the high - energies (e.g., [1, 2, 3]; default is []) - - Returns - ------- - openmc.mgxs.MGXS - A new tally which encapsulates the subset of data requested for the - nuclide(s) and/or energy group(s) requested in the parameters. - - """ - - # Call super class method and null out derived tallies - slice_xs = super(MultiplicityMatrix, self).get_slice(nuclides, - in_groups) - slice_xs._rxn_rate_tally = None - slice_xs._xs_tally = None - - # Slice outgoing energy groups if needed - if len(out_groups) != 0: - filter_bins = [] - for group in out_groups: - group_bounds = self.energy_groups.get_group_bounds(group) - filter_bins.append(group_bounds) - filter_bins = [tuple(filter_bins)] - - # Slice each of the tallies across energyout groups - for tally_type, tally in slice_xs.tallies.items(): - if tally.contains_filter('energyout'): - tally_slice = tally.get_slice(filters=['energyout'], - filter_bins=filter_bins) - slice_xs.tallies[tally_type] = tally_slice - - slice_xs.sparse = self.sparse - return slice_xs - - def get_xs(self, in_groups='all', out_groups='all', - subdomains='all', nuclides='all', - xs_type='macro', order_groups='increasing', - row_column='inout', value='mean', **kwargs): - r"""Returns an array of multi-group cross sections. - - This method constructs a 2D NumPy array for the requested multiplicity - matrix data data for one or more energy groups and subdomains. - - Parameters - ---------- - in_groups : Iterable of Integral or 'all' - Incoming energy groups of interest. Defaults to 'all'. - out_groups : Iterable of Integral or 'all' - Outgoing energy groups of interest. Defaults to 'all'. - subdomains : Iterable of Integral or 'all' - Subdomain IDs of interest. Defaults to 'all'. - nuclides : Iterable of str or 'all' or 'sum' - A list of nuclide name strings (e.g., ['U-235', 'U-238']). The - special string 'all' will return the cross sections for all nuclides - in the spatial domain. The special string 'sum' will return the - cross section summed over all nuclides. Defaults to 'all'. - xs_type: {'macro', 'micro'} - Return the macro or micro cross section in units of cm^-1 or barns. - Defaults to 'macro'. - order_groups: {'increasing', 'decreasing'} - Return the cross section indexed according to increasing or - decreasing energy groups (decreasing or increasing energies). - Defaults to 'increasing'. - row_column: {'inout', 'outin'} - Return the cross section indexed first by incoming group and - second by outgoing group ('inout'), or vice versa ('outin'). - Defaults to 'inout'. - value : str - A string for the type of value to return - 'mean', 'std_dev', or - 'rel_err' are accepted. Defaults to the empty string. - - Returns - ------- - ndarray - A NumPy array of the multi-group cross section indexed in the order - each group and subdomain is listed in the parameters. - - Raises - ------ - ValueError - When this method is called before the multi-group cross section is - computed from tally data. - - """ - - cv.check_value('value', value, ['mean', 'std_dev', 'rel_err']) - cv.check_value('xs_type', xs_type, ['macro', 'micro']) - - filters = [] - filter_bins = [] - - # Construct a collection of the domain filter bins - if not isinstance(subdomains, basestring): - cv.check_iterable_type('subdomains', subdomains, Integral, max_depth=2) - for subdomain in subdomains: - filters.append(self.domain_type) - filter_bins.append((subdomain,)) - - # Construct list of energy group bounds tuples for all requested groups - if not isinstance(in_groups, basestring): - cv.check_iterable_type('groups', in_groups, Integral) - for group in in_groups: - filters.append('energy') - filter_bins.append((self.energy_groups.get_group_bounds(group),)) - - # Construct list of energy group bounds tuples for all requested groups - if not isinstance(out_groups, basestring): - cv.check_iterable_type('groups', out_groups, Integral) - for group in out_groups: - filters.append('energyout') - filter_bins.append((self.energy_groups.get_group_bounds(group),)) - - # Construct a collection of the nuclides to retrieve from the xs tally - if self.by_nuclide: - if nuclides == 'all' or nuclides == 'sum' or nuclides == ['sum']: - query_nuclides = self.get_all_nuclides() - else: - query_nuclides = nuclides - else: - query_nuclides = ['total'] - - # Use tally summation if user requested the sum for all nuclides - if nuclides == 'sum' or nuclides == ['sum']: - xs_tally = self.xs_tally.summation(nuclides=query_nuclides) - xs = xs_tally.get_values(filters=filters, filter_bins=filter_bins, - value=value) - else: - xs = self.xs_tally.get_values(filters=filters, - filter_bins=filter_bins, - nuclides=query_nuclides, value=value) - - xs = np.nan_to_num(xs) - - # Divide by atom number densities for microscopic cross sections - if xs_type == 'micro': - if self.by_nuclide: - densities = self.get_nuclide_densities(nuclides) - else: - densities = self.get_nuclide_densities('sum') - if value == 'mean' or value == 'std_dev': - xs /= densities[np.newaxis, :, np.newaxis] - - # Reverse data if user requested increasing energy groups since - # tally data is stored in order of increasing energies - if order_groups == 'increasing': - if in_groups == 'all': - num_in_groups = self.num_groups - else: - num_in_groups = len(in_groups) - if out_groups == 'all': - num_out_groups = self.num_groups - else: - num_out_groups = len(out_groups) - - # Reshape tally data array with separate axes for domain and energy - num_subdomains = int(xs.shape[0] / - (num_in_groups * num_out_groups)) - new_shape = (num_subdomains, num_in_groups, num_out_groups) - new_shape += xs.shape[1:] - xs = np.reshape(xs, new_shape) - - # Transpose the matrix if requested by user - if row_column == 'outin': - xs = np.swapaxes(xs, 1, 2) - - # Reverse energies to align with increasing energy groups - xs = xs[:, ::-1, ::-1, :] - - # Eliminate trivial dimensions - xs = np.squeeze(xs) - xs = np.atleast_2d(xs) - - return xs - - def print_xs(self, subdomains='all', nuclides='all', - xs_type='macro'): - """Prints a string representation for the multi-group cross section. - - Parameters - ---------- - subdomains : Iterable of Integral or 'all' - The subdomain IDs of the cross sections to include in the report. - Defaults to 'all'. - nuclides : Iterable of str or 'all' or 'sum' - The nuclides of the cross-sections to include in the report. This - may be a list of nuclide name strings (e.g., ['U-235', 'U-238']). - The special string 'all' will report the cross sections for all - nuclides in the spatial domain. The special string 'sum' will report - the cross sections summed over all nuclides. Defaults to 'all'. - xs_type: {'macro', 'micro'} - Return the macro or micro cross section in units of cm^-1 or barns. - Defaults to 'macro'. - - """ - - # Construct a collection of the subdomains to report - if not isinstance(subdomains, basestring): - cv.check_iterable_type('subdomains', subdomains, Integral) - elif self.domain_type == 'distribcell': - subdomains = np.arange(self.num_subdomains, dtype=np.int) - else: - subdomains = [self.domain.id] - - # Construct a collection of the nuclides to report - if self.by_nuclide: - if nuclides == 'all': - nuclides = self.get_all_nuclides() - if nuclides == 'sum': - nuclides = ['sum'] - else: - cv.check_iterable_type('nuclides', nuclides, basestring) - else: - nuclides = ['sum'] - - cv.check_value('xs_type', xs_type, ['macro', 'micro']) - - # Build header for string with type and domain info - string = 'Multi-Group XS\n' - string += '{0: <16}=\t{1}\n'.format('\tReaction Type', self.rxn_type) - string += '{0: <16}=\t{1}\n'.format('\tDomain Type', self.domain_type) - string += '{0: <16}=\t{1}\n'.format('\tDomain ID', self.domain.id) - - # If cross section data has not been computed, only print string header - if self.tallies is None: - print(string) - return - - string += '{0: <16}\n'.format('\tEnergy Groups:') - template = '{0: <12}Group {1} [{2: <10} - {3: <10}MeV]\n' - - # Loop over energy groups ranges - for group in range(1, self.num_groups+1): - bounds = self.energy_groups.get_group_bounds(group) - string += template.format('', group, bounds[0], bounds[1]) - - # Loop over all subdomains - for subdomain in subdomains: - - if self.domain_type == 'distribcell': - string += \ - '{0: <16}=\t{1}\n'.format('\tSubdomain', subdomain) - - # Loop over all Nuclides - for nuclide in nuclides: - - # Build header for nuclide type - if xs_type != 'sum': - string += '{0: <16}=\t{1}\n'.format('\tNuclide', nuclide) - - # Build header for cross section type - if xs_type == 'macro': - string += '{0: <16}\n'.format('\tCross Sections [cm^-1]:') - else: - string += '{0: <16}\n'.format('\tCross Sections [barns]:') - - template = '{0: <12}Group {1} -> Group {2}:\t\t' - - # Loop over incoming/outgoing energy groups ranges - for in_group in range(1, self.num_groups+1): - for out_group in range(1, self.num_groups+1): - string += template.format('', in_group, out_group) - average = \ - self.get_xs([in_group], [out_group], - [subdomain], [nuclide], - xs_type=xs_type, value='mean') - rel_err = \ - self.get_xs([in_group], [out_group], - [subdomain], [nuclide], - xs_type=xs_type, value='rel_err') - average = average.flatten()[0] - rel_err = rel_err.flatten()[0] * 100. - string += '{:1.2e} +/- {:1.2e}%'.format(average, rel_err) - string += '\n' - string += '\n' - string += '\n' - string += '\n' - - print(string) - - -class NuFissionMatrixXS(MGXS): +class NuFissionMatrixXS(MatrixMGXS): """A fission production matrix multi-group cross section. This class can be used for both OpenMC input generation and tally data @@ -3702,32 +3803,12 @@ class NuFissionMatrixXS(MGXS): super(NuFissionMatrixXS, self).__init__(domain, domain_type, groups, by_nuclide, name) self._rxn_type = 'nu-fission matrix' - self._hdf5_key = 'nu-fission matrix' - - def __deepcopy__(self, memo): - clone = super(NuFissionMatrixXS, self).__deepcopy__(memo) - return clone @property def scores(self): scores = ['flux', 'nu-fission'] - return scores - @property - def filters(self): - group_edges = self.energy_groups.group_edges - energy = openmc.Filter('energy', group_edges) - energyout = openmc.Filter('energyout', group_edges) - - filters = [[energy], [energy, energyout]] - - return filters - - @property - def estimator(self): - return 'analog' - @property def rxn_rate_tally(self): if self._rxn_rate_tally is None: @@ -3735,304 +3816,6 @@ class NuFissionMatrixXS(MGXS): self._rxn_rate_tally.sparse = self.sparse return self._rxn_rate_tally - def get_slice(self, nuclides=[], in_groups=[], out_groups=[]): - """Build a sliced NuFissionMatrix for the specified nuclides and - energy groups. - - This method constructs a new MGXS to encapsulate a subset of the data - represented by this MGXS. The subset of data to include in the tally - slice is determined by the nuclides and energy groups specified in - the input parameters. - - Parameters - ---------- - nuclides : list of str - A list of nuclide name strings - (e.g., ['U-235', 'U-238']; default is []) - in_groups : list of int - A list of incoming energy group indices starting at 1 for the high - energies (e.g., [1, 2, 3]; default is []) - out_groups : list of int - A list of outgoing energy group indices starting at 1 for the high - energies (e.g., [1, 2, 3]; default is []) - - Returns - ------- - openmc.mgxs.MGXS - A new tally which encapsulates the subset of data requested for the - nuclide(s) and/or energy group(s) requested in the parameters. - - """ - - # Call super class method and null out derived tallies - slice_xs = super(NuFissionMatrixXS, self).get_slice(nuclides, - in_groups) - slice_xs._rxn_rate_tally = None - slice_xs._xs_tally = None - - # Slice outgoing energy groups if needed - if len(out_groups) != 0: - filter_bins = [] - for group in out_groups: - group_bounds = self.energy_groups.get_group_bounds(group) - filter_bins.append(group_bounds) - filter_bins = [tuple(filter_bins)] - - # Slice each of the tallies across energyout groups - for tally_type, tally in slice_xs.tallies.items(): - if tally.contains_filter('energyout'): - tally_slice = tally.get_slice(filters=['energyout'], - filter_bins=filter_bins) - slice_xs.tallies[tally_type] = tally_slice - - slice_xs.sparse = self.sparse - return slice_xs - - def get_xs(self, in_groups='all', out_groups='all', - subdomains='all', nuclides='all', - xs_type='macro', order_groups='increasing', - row_column='inout', value='mean', **kwargs): - r"""Returns an array of multi-group cross sections. - - This method constructs a 2D NumPy array for the requested nu-fission - matrix data data for one or more energy groups and subdomains. - - Parameters - ---------- - in_groups : Iterable of Integral or 'all' - Incoming energy groups of interest. Defaults to 'all'. - out_groups : Iterable of Integral or 'all' - Outgoing energy groups of interest. Defaults to 'all'. - subdomains : Iterable of Integral or 'all' - Subdomain IDs of interest. Defaults to 'all'. - nuclides : Iterable of str or 'all' or 'sum' - A list of nuclide name strings (e.g., ['U-235', 'U-238']). The - special string 'all' will return the cross sections for all nuclides - in the spatial domain. The special string 'sum' will return the - cross section summed over all nuclides. Defaults to 'all'. - xs_type: {'macro', 'micro'} - Return the macro or micro cross section in units of cm^-1 or barns. - Defaults to 'macro'. - order_groups: {'increasing', 'decreasing'} - Return the cross section indexed according to increasing or - decreasing energy groups (decreasing or increasing energies). - Defaults to 'increasing'. - row_column: {'inout', 'outin'} - Return the cross section indexed first by incoming group and - second by outgoing group ('inout'), or vice versa ('outin'). - Defaults to 'inout'. - value : str - A string for the type of value to return - 'mean', 'std_dev', or - 'rel_err' are accepted. Defaults to the empty string. - - Returns - ------- - ndarray - A NumPy array of the multi-group cross section indexed in the order - each group and subdomain is listed in the parameters. - - Raises - ------ - ValueError - When this method is called before the multi-group cross section is - computed from tally data. - - """ - - cv.check_value('value', value, ['mean', 'std_dev', 'rel_err']) - cv.check_value('xs_type', xs_type, ['macro', 'micro']) - - filters = [] - filter_bins = [] - - # Construct a collection of the domain filter bins - if not isinstance(subdomains, basestring): - cv.check_iterable_type('subdomains', subdomains, Integral, max_depth=2) - for subdomain in subdomains: - filters.append(self.domain_type) - filter_bins.append((subdomain,)) - - # Construct list of energy group bounds tuples for all requested groups - if not isinstance(in_groups, basestring): - cv.check_iterable_type('groups', in_groups, Integral) - for group in in_groups: - filters.append('energy') - filter_bins.append((self.energy_groups.get_group_bounds(group),)) - - # Construct list of energy group bounds tuples for all requested groups - if not isinstance(out_groups, basestring): - cv.check_iterable_type('groups', out_groups, Integral) - for group in out_groups: - filters.append('energyout') - filter_bins.append((self.energy_groups.get_group_bounds(group),)) - - # Construct a collection of the nuclides to retrieve from the xs tally - if self.by_nuclide: - if nuclides == 'all' or nuclides == 'sum' or nuclides == ['sum']: - query_nuclides = self.get_all_nuclides() - else: - query_nuclides = nuclides - else: - query_nuclides = ['total'] - - # Use tally summation if user requested the sum for all nuclides - if nuclides == 'sum' or nuclides == ['sum']: - xs_tally = self.xs_tally.summation(nuclides=query_nuclides) - xs = xs_tally.get_values(filters=filters, filter_bins=filter_bins, - value=value) - else: - xs = self.xs_tally.get_values(filters=filters, - filter_bins=filter_bins, - nuclides=query_nuclides, value=value) - - xs = np.nan_to_num(xs) - - # Divide by atom number densities for microscopic cross sections - if xs_type == 'micro': - if self.by_nuclide: - densities = self.get_nuclide_densities(nuclides) - else: - densities = self.get_nuclide_densities('sum') - if value == 'mean' or value == 'std_dev': - xs /= densities[np.newaxis, :, np.newaxis] - - # Reverse data if user requested increasing energy groups since - # tally data is stored in order of increasing energies - if order_groups == 'increasing': - if in_groups == 'all': - num_in_groups = self.num_groups - else: - num_in_groups = len(in_groups) - if out_groups == 'all': - num_out_groups = self.num_groups - else: - num_out_groups = len(out_groups) - - # Reshape tally data array with separate axes for domain and energy - num_subdomains = int(xs.shape[0] / - (num_in_groups * num_out_groups)) - new_shape = (num_subdomains, num_in_groups, num_out_groups) - new_shape += xs.shape[1:] - xs = np.reshape(xs, new_shape) - - # Transpose the matrix if requested by user - if row_column == 'outin': - xs = np.swapaxes(xs, 1, 2) - - # Reverse energies to align with increasing energy groups - xs = xs[:, ::-1, ::-1, :] - - # Eliminate trivial dimensions - xs = np.squeeze(xs) - xs = np.atleast_2d(xs) - - return xs - - def print_xs(self, subdomains='all', nuclides='all', - xs_type='macro'): - """Prints a string representation for the multi-group cross section. - - Parameters - ---------- - subdomains : Iterable of Integral or 'all' - The subdomain IDs of the cross sections to include in the report. - Defaults to 'all'. - nuclides : Iterable of str or 'all' or 'sum' - The nuclides of the cross-sections to include in the report. This - may be a list of nuclide name strings (e.g., ['U-235', 'U-238']). - The special string 'all' will report the cross sections for all - nuclides in the spatial domain. The special string 'sum' will report - the cross sections summed over all nuclides. Defaults to 'all'. - xs_type: {'macro', 'micro'} - Return the macro or micro cross section in units of cm^-1 or barns. - Defaults to 'macro'. - - """ - - # Construct a collection of the subdomains to report - if not isinstance(subdomains, basestring): - cv.check_iterable_type('subdomains', subdomains, Integral) - elif self.domain_type == 'distribcell': - subdomains = np.arange(self.num_subdomains, dtype=np.int) - else: - subdomains = [self.domain.id] - - # Construct a collection of the nuclides to report - if self.by_nuclide: - if nuclides == 'all': - nuclides = self.get_all_nuclides() - if nuclides == 'sum': - nuclides = ['sum'] - else: - cv.check_iterable_type('nuclides', nuclides, basestring) - else: - nuclides = ['sum'] - - cv.check_value('xs_type', xs_type, ['macro', 'micro']) - - # Build header for string with type and domain info - string = 'Multi-Group XS\n' - string += '{0: <16}=\t{1}\n'.format('\tReaction Type', self.rxn_type) - string += '{0: <16}=\t{1}\n'.format('\tDomain Type', self.domain_type) - string += '{0: <16}=\t{1}\n'.format('\tDomain ID', self.domain.id) - - # If cross section data has not been computed, only print string header - if self.tallies is None: - print(string) - return - - string += '{0: <16}\n'.format('\tEnergy Groups:') - template = '{0: <12}Group {1} [{2: <10} - {3: <10}MeV]\n' - - # Loop over energy groups ranges - for group in range(1, self.num_groups+1): - bounds = self.energy_groups.get_group_bounds(group) - string += template.format('', group, bounds[0], bounds[1]) - - # Loop over all subdomains - for subdomain in subdomains: - - if self.domain_type == 'distribcell': - string += \ - '{0: <16}=\t{1}\n'.format('\tSubdomain', subdomain) - - # Loop over all Nuclides - for nuclide in nuclides: - - # Build header for nuclide type - if xs_type != 'sum': - string += '{0: <16}=\t{1}\n'.format('\tNuclide', nuclide) - - # Build header for cross section type - if xs_type == 'macro': - string += '{0: <16}\n'.format('\tCross Sections [cm^-1]:') - else: - string += '{0: <16}\n'.format('\tCross Sections [barns]:') - - template = '{0: <12}Group {1} -> Group {2}:\t\t' - - # Loop over incoming/outgoing energy groups ranges - for in_group in range(1, self.num_groups+1): - for out_group in range(1, self.num_groups+1): - string += template.format('', in_group, out_group) - average = \ - self.get_xs([in_group], [out_group], - [subdomain], [nuclide], - xs_type=xs_type, value='mean') - rel_err = \ - self.get_xs([in_group], [out_group], - [subdomain], [nuclide], - xs_type=xs_type, value='rel_err') - average = average.flatten()[0] - rel_err = rel_err.flatten()[0] * 100. - string += '{:1.2e} +/- {:1.2e}%'.format(average, rel_err) - string += '\n' - string += '\n' - string += '\n' - string += '\n' - - print(string) - class Chi(MGXS): """The fission spectrum. From 29f62126117cc29c50477bde1e23e169e7795051 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 22 May 2016 20:36:50 -0400 Subject: [PATCH 561/650] Made ScatterMatrixXS (and by extension, NuScatterMatrixXS) point to MatrixMGXS now --- openmc/mgxs/mgxs.py | 46 ++++++++++++++++++++++-------------------- openmc/mgxs_library.py | 12 +++++------ 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index b88e583aec..6ab726f890 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -480,7 +480,7 @@ class MGXS(object): elif mgxs_type == 'nu-scatter matrix': mgxs = NuScatterMatrixXS(domain, domain_type, energy_groups) elif mgxs_type == 'multiplicity matrix': - mgxs = MultiplicityMatrix(domain, domain_type, energy_groups) + mgxs = MultiplicityMatrixXS(domain, domain_type, energy_groups) elif mgxs_type == 'nu-fission matrix': mgxs = NuFissionMatrixXS(domain, domain_type, energy_groups) elif mgxs_type == 'chi': @@ -1654,9 +1654,10 @@ class MatrixMGXS(MGXS): Subdomain IDs of interest. Defaults to 'all'. nuclides : Iterable of str or 'all' or 'sum' A list of nuclide name strings (e.g., ['U-235', 'U-238']). The - special string 'all' will return the cross sections for all nuclides - in the spatial domain. The special string 'sum' will return the - cross section summed over all nuclides. Defaults to 'all'. + special string 'all' will return the cross sections for all + nuclides in the spatial domain. The special string 'sum' will + return the cross section summed over all nuclides. Defaults to + 'all'. xs_type: {'macro', 'micro'} Return the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. @@ -1694,7 +1695,8 @@ class MatrixMGXS(MGXS): # Construct a collection of the domain filter bins if not isinstance(subdomains, basestring): - cv.check_iterable_type('subdomains', subdomains, Integral, max_depth=2) + cv.check_iterable_type('subdomains', subdomains, Integral, + max_depth=2) for subdomain in subdomains: filters.append(self.domain_type) filter_bins.append((subdomain,)) @@ -1704,14 +1706,16 @@ class MatrixMGXS(MGXS): cv.check_iterable_type('groups', in_groups, Integral) for group in in_groups: filters.append('energy') - filter_bins.append((self.energy_groups.get_group_bounds(group),)) + filter_bins.append(( + self.energy_groups.get_group_bounds(group),)) # Construct list of energy group bounds tuples for all requested groups if not isinstance(out_groups, basestring): cv.check_iterable_type('groups', out_groups, Integral) for group in out_groups: filters.append('energyout') - filter_bins.append((self.energy_groups.get_group_bounds(group),)) + filter_bins.append(( + self.energy_groups.get_group_bounds(group),)) # Construct a collection of the nuclides to retrieve from the xs tally if self.by_nuclide: @@ -1840,8 +1844,9 @@ class MatrixMGXS(MGXS): The nuclides of the cross-sections to include in the report. This may be a list of nuclide name strings (e.g., ['U-235', 'U-238']). The special string 'all' will report the cross sections for all - nuclides in the spatial domain. The special string 'sum' will report - the cross sections summed over all nuclides. Defaults to 'all'. + nuclides in the spatial domain. The special string 'sum' will + report the cross sections summed over all nuclides. Defaults to + 'all'. xs_type: {'macro', 'micro'} Return the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. @@ -1884,7 +1889,7 @@ class MatrixMGXS(MGXS): template = '{0: <12}Group {1} [{2: <10} - {3: <10}MeV]\n' # Loop over energy groups ranges - for group in range(1, self.num_groups+1): + for group in range(1, self.num_groups + 1): bounds = self.energy_groups.get_group_bounds(group) string += template.format('', group, bounds[0], bounds[1]) @@ -1911,8 +1916,8 @@ class MatrixMGXS(MGXS): template = '{0: <12}Group {1} -> Group {2}:\t\t' # Loop over incoming/outgoing energy groups ranges - for in_group in range(1, self.num_groups+1): - for out_group in range(1, self.num_groups+1): + for in_group in range(1, self.num_groups + 1): + for out_group in range(1, self.num_groups + 1): string += template.format('', in_group, out_group) average = \ self.get_xs([in_group], [out_group], @@ -1924,7 +1929,8 @@ class MatrixMGXS(MGXS): xs_type=xs_type, value='rel_err') average = average.flatten()[0] rel_err = rel_err.flatten()[0] * 100. - string += '{:1.2e} +/- {:1.2e}%'.format(average, rel_err) + string += '{:1.2e} +/- {:1.2e}%'.format(average, + rel_err) string += '\n' string += '\n' string += '\n' @@ -2864,7 +2870,7 @@ class NuScatterXS(MGXS): self._rxn_type = 'nu-scatter' -class ScatterMatrixXS(MGXS): +class ScatterMatrixXS(MatrixMGXS): """A scattering matrix multi-group cross section for one or more Legendre moments. @@ -2998,10 +3004,6 @@ class ScatterMatrixXS(MGXS): return filters - @property - def estimator(self): - return 'analog' - @property def rxn_rate_tally(self): @@ -3594,7 +3596,7 @@ class NuScatterMatrixXS(ScatterMatrixXS): self._hdf5_key = 'nu-scatter matrix' -class MultiplicityMatrix(MatrixMGXS): +class MultiplicityMatrixXS(MatrixMGXS): """The scattering multiplicity matrix. This class can be used for both OpenMC input generation and tally data @@ -3677,8 +3679,8 @@ class MultiplicityMatrix(MatrixMGXS): def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): - super(MultiplicityMatrix, self).__init__(domain, domain_type, groups, - by_nuclide, name) + super(MultiplicityMatrixXS, self).__init__(domain, domain_type, groups, + by_nuclide, name) self._rxn_type = 'multiplicity' @property @@ -3712,7 +3714,7 @@ class MultiplicityMatrix(MatrixMGXS): # Compute the multiplicity self._xs_tally = self.rxn_rate_tally / scatter - super(MultiplicityMatrix, self)._compute_xs() + super(MultiplicityMatrixXS, self)._compute_xs() return self._xs_tally diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index f3d8b28fcd..f75d7e2e44 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -906,7 +906,7 @@ class XSdata(object): def set_multiplicity_mgxs(self, nuscatter, scatter=None, nuclide='total', xs_type='macro'): """This method allows for either the direct use of only an - openmc.mgxs.MultiplicityMatrix OR an openmc.mgxs.NuScatterMatrixXS and + openmc.mgxs.MultiplicityMatrixXS OR an openmc.mgxs.NuScatterMatrixXS and openmc.mgxs.ScatterMatrixXS to be used to set the scattering multiplicity for this XSdata object. Multiplicity, in OpenMC parlance, is a factor used to account for the production @@ -917,7 +917,7 @@ class XSdata(object): Parameters ---------- nuscatter: {openmc.mgxs.NuScatterMatrixXS, - openmc.mgxs.MultiplicityMatrix} + openmc.mgxs.MultiplicityMatrixXS} MGXS Object containing the matrix cross section for the domain of interest. scatter: openmc.mgxs.ScatterMatrixXS @@ -938,15 +938,15 @@ class XSdata(object): """ check_type('nuscatter', nuscatter, (openmc.mgxs.NuScatterMatrixXS, - openmc.mgxs.MultiplicityMatrix)) + openmc.mgxs.MultiplicityMatrixXS)) check_value('energy_groups', nuscatter.energy_groups, [self.energy_groups]) check_value('domain_type', nuscatter.domain_type, ['universe', 'cell', 'material']) if scatter is not None: check_type('scatter', scatter, openmc.mgxs.ScatterMatrixXS) - if isinstance(nuscatter, openmc.mgxs.MultiplicityMatrix): - msg = 'Either an MultiplicityMatrix object must be passed ' \ + if isinstance(nuscatter, openmc.mgxs.MultiplicityMatrixXS): + msg = 'Either an MultiplicityMatrixXS object must be passed ' \ 'for "nuscatter" or the "scatter" argument must be ' \ 'provided.' raise ValueError(msg) @@ -958,7 +958,7 @@ class XSdata(object): if self.representation is 'isotropic': nuscatt = nuscatter.get_xs(nuclides=nuclide, xs_type=xs_type, moment=0) - if isinstance(nuscatter, openmc.mgxs.MultiplicityMatrix): + if isinstance(nuscatter, openmc.mgxs.MultiplicityMatrixXS): self._multiplicity = nuscatt else: scatt = scatter.get_xs(nuclides=nuclide, From 18fc97fc9abd5d6b7383f431ab93c8e01a647981 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 22 May 2016 21:31:33 -0400 Subject: [PATCH 562/650] Updating notebook to reflect changes thus far --- .../pythonapi/examples/mgxs-part-iv.ipynb | 139 +++++++++--------- openmc/mgxs/library.py | 4 +- 2 files changed, 72 insertions(+), 71 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb index 4b73cf3caa..9c13d28ecd 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This Notebook illustrates the use of the openmc.mgxs.Library class specifically for application in OpenMC's multi-group mode. This example notebook follows the same process as was done in MGXS Part III, but instead uses OpenMC as the multi-group solver. This Notebook illustrates the following features:\n", + "This Notebook illustrates the use of the openmc.mgxs.Library class specifically for application in OpenMC's multi-group mode. This example notebook follows the same process as was done in MGXS Part III, but instead uses OpenMC as the multi-group solver. During this process, this notebook will illustrate the following features:\n", "\n", " - Calculation of multi-group cross sections for a fuel assembly\n", " - Automated creation and storage of MGXS with openmc.mgxs.Library\n", @@ -334,7 +334,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "With the geometry and materials finished, we now just need to define simulation parameters. In this case, we will use 10 inactive batches and 40 active batches each with 2500 particles." + "With the geometry and materials finished, we now just need to define simulation parameters. In this case, we will use 10 inactive batches and 40 active batches each with 5000 particles." ] }, { @@ -433,7 +433,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -499,8 +499,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now, we must specify to the Library which types of cross sections to compute. OpenMC's multi-group mode can accept isotropic flux-weighted cross sections or angle-dependent cross sections, as well as supporting anisotropic scattering represented by either Legendre polynomials, histogram, or tabular angular distributions. At this time the MGXS Library class only supports the generation of isotropic flux-weighted cross sections and P0 scattering, so that is what will be used for this example. Therefore, we will create the following multi-group cross sections needed to run an OpenMC simulation to verify the accuracy of our cross sections: \"transport\", \"absorption\", \"nu-fission\", '\"fission\", \"nu-scatter matrix\", \"scatter matrix\", and \"chi\".\n", - "\"scatter matrix\" is needed in addition to \"nu-scatter matrix\" because OpenMC's multi-group mode can treat scattering multiplication (i.e., (n,xn) reactions)) explicitly instead of adjusting the absorption cross section to maintain neutron balance, and using this explicit treatment would require tallying of both types of scattering matrices." + "Now, we must specify to the Library which types of cross sections to compute. OpenMC's multi-group mode can accept isotropic flux-weighted cross sections or angle-dependent cross sections, as well as supporting anisotropic scattering represented by either Legendre polynomials, histogram, or tabular angular distributions. At this time the MGXS Library class only supports the generation of isotropic flux-weighted cross sections and P0 scattering, so that is what will be used for this example. Therefore, we will create the following multi-group cross sections needed to run an OpenMC simulation to verify the accuracy of our cross sections: \"total\", \"absorption\", \"nu-fission\", '\"fission\", \"nu-scatter matrix\", \"multiplicity matrix\", and \"chi\".\n", + "\"multiplicity matrix\" is needed to provide OpenMC's multi-group mode with additional information needed to accurately treat scattering multiplication (i.e., (n,xn) reactions)) explicitly." ] }, { @@ -513,7 +513,7 @@ "source": [ "# Specify multi-group cross section types to compute\n", "mgxs_lib.mgxs_types = ['total', 'absorption', 'nu-fission', 'fission',\n", - " 'nu-scatter matrix', 'scatter matrix', 'chi']" + " 'nu-scatter matrix', 'multiplicity matrix', 'chi']" ] }, { @@ -565,7 +565,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now we will set the scattering order that we wish to use. For this problem we will use P3 scattering." + "Now we will set the scattering order that we wish to use. For this problem we will use P3 scattering. A warning is expected telling us that the default behavior (a P0 correction on the scattering data) is over-ridden by our choice of using a Legendre expansion to treat anisotropic scattering." ] }, { @@ -681,24 +681,24 @@ "tally.scores = ['fission']\n", "\n", "# Add tally to collection\n", - "tallies_file.append(tally)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ + "tallies_file.append(tally, merge=True)\n", + "\n", "# Export all tallies to a \"tallies.xml\" file\n", "tallies_file.export_to_xml()" ] }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Time to run the calculation and get our results!" + ] + }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 26, "metadata": { "collapsed": false }, @@ -723,8 +723,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 058ba68895a2f880402fda3d58cfb14b162931d9\n", - " Date/Time: 2016-05-17 21:14:05\n", + " Git SHA1: b7cc8a3a1460a9662fd3e8d11a6c0cf5902946c2\n", + " Date/Time: 2016-05-22 21:29:21\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -811,20 +811,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 1.4530E+00 seconds\n", - " Reading cross sections = 1.1470E+00 seconds\n", - " Total time in simulation = 1.8747E+01 seconds\n", - " Time in transport only = 1.8639E+01 seconds\n", - " Time in inactive batches = 2.1690E+00 seconds\n", - " Time in active batches = 1.6578E+01 seconds\n", - " Time synchronizing fission bank = 6.0000E-03 seconds\n", - " Sampling source sites = 4.0000E-03 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", + " Total time for initialization = 1.4810E+00 seconds\n", + " Reading cross sections = 1.1840E+00 seconds\n", + " Total time in simulation = 1.9619E+01 seconds\n", + " Time in transport only = 1.9512E+01 seconds\n", + " Time in inactive batches = 2.1770E+00 seconds\n", + " Time in active batches = 1.7442E+01 seconds\n", + " Time synchronizing fission bank = 1.0000E-02 seconds\n", + " Sampling source sites = 6.0000E-03 seconds\n", + " SEND/RECV source sites = 4.0000E-03 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 2.0209E+01 seconds\n", - " Calculation Rate (inactive) = 23052.1 neutrons/second\n", - " Calculation Rate (active) = 12064.2 neutrons/second\n", + " Total time elapsed = 2.1110E+01 seconds\n", + " Calculation Rate (inactive) = 22967.4 neutrons/second\n", + " Calculation Rate (active) = 11466.6 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -842,7 +842,7 @@ "0" ] }, - "execution_count": 27, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -861,7 +861,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 27, "metadata": { "collapsed": false }, @@ -886,7 +886,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -905,7 +905,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 29, "metadata": { "collapsed": false }, @@ -924,7 +924,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 30, "metadata": { "collapsed": false }, @@ -952,12 +952,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We will now use the `Library` to produce a multi-group cross section data set for use by the OpenMC multi-group solver. " + "We will now use the `Library` to produce a multi-group cross section data set for use by the OpenMC multi-group solver. \n", + "Note that since we have ran so few histories, is not unreasonable to expect some divisions by zero errors. This will show up as a runtime warning in the following step." ] }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 31, "metadata": { "collapsed": false }, @@ -997,7 +998,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 32, "metadata": { "collapsed": false }, @@ -1047,7 +1048,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 33, "metadata": { "collapsed": true }, @@ -1072,7 +1073,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "metadata": { "collapsed": false, "scrolled": true @@ -1098,8 +1099,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: 058ba68895a2f880402fda3d58cfb14b162931d9\n", - " Date/Time: 2016-05-17 21:14:26\n", + " Git SHA1: b7cc8a3a1460a9662fd3e8d11a6c0cf5902946c2\n", + " Date/Time: 2016-05-22 21:29:43\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -1183,20 +1184,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.6000E-02 seconds\n", - " Reading cross sections = 8.0000E-03 seconds\n", - " Total time in simulation = 1.4524E+01 seconds\n", - " Time in transport only = 1.4457E+01 seconds\n", - " Time in inactive batches = 1.3350E+00 seconds\n", - " Time in active batches = 1.3189E+01 seconds\n", - " Time synchronizing fission bank = 7.0000E-03 seconds\n", - " Sampling source sites = 5.0000E-03 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", + " Total time for initialization = 3.4000E-02 seconds\n", + " Reading cross sections = 3.0000E-03 seconds\n", + " Total time in simulation = 1.4720E+01 seconds\n", + " Time in transport only = 1.4678E+01 seconds\n", + " Time in inactive batches = 1.3020E+00 seconds\n", + " Time in active batches = 1.3418E+01 seconds\n", + " Time synchronizing fission bank = 6.0000E-03 seconds\n", + " Sampling source sites = 3.0000E-03 seconds\n", + " SEND/RECV source sites = 3.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.4579E+01 seconds\n", - " Calculation Rate (inactive) = 37453.2 neutrons/second\n", - " Calculation Rate (active) = 15164.2 neutrons/second\n", + " Total time elapsed = 1.4763E+01 seconds\n", + " Calculation Rate (inactive) = 38402.5 neutrons/second\n", + " Calculation Rate (active) = 14905.4 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1214,7 +1215,7 @@ "0" ] }, - "execution_count": 35, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -1237,7 +1238,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 35, "metadata": { "collapsed": false }, @@ -1257,7 +1258,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 36, "metadata": { "collapsed": true }, @@ -1275,7 +1276,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 37, "metadata": { "collapsed": false }, @@ -1302,7 +1303,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This shows a nontrivial pcm bias between the two methods. Some degree of mismatch is expected simply to the very few histories being used in these example problems. An additional mismatch is always inherent in the practical application of multi-group theory due to the high degree of approximations inherent in that method." + "This shows a small but nontrivial pcm bias between the two methods. Some degree of mismatch is expected simply to the very few histories being used in these example problems. An additional mismatch is always inherent in the practical application of multi-group theory due to the high degree of approximations inherent in that method." ] }, { @@ -1323,7 +1324,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 38, "metadata": { "collapsed": false }, @@ -1349,7 +1350,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 39, "metadata": { "collapsed": false }, @@ -1375,7 +1376,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 40, "metadata": { "collapsed": false }, @@ -1383,10 +1384,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 41, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" }, @@ -1394,7 +1395,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 23d40a9527..4fffe0080c 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -872,8 +872,8 @@ class Library(object): nuclide=[nuclide]) # If multiplicity matrix is available, prefer that if 'multiplicity matrix' in self.mgxs_types: - mult_mgxs = self.get_mgxs(domain, 'multiplicity matrix') - xsdata.set_multiplicity_mgxs(mult_mgxs, xs_type=xs_type, + mymgxs = self.get_mgxs(domain, 'multiplicity matrix') + xsdata.set_multiplicity_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide]) using_multiplicity = True # multiplicity wil fall back to using scatter and nu-scatter From 9586ed3c0718ce5fbfdacc551966a4de9e64fb42 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 23 May 2016 11:51:23 -0500 Subject: [PATCH 563/650] Fix two hexagonal lattice bugs. 1) The center of the lattice was placed incorrectly when the number of axial positions was an even number. 2) The center of the lattice had no effect in the radial direction. --- src/geometry_header.F90 | 47 +++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/src/geometry_header.F90 b/src/geometry_header.F90 index 1adda3ea34..30f82f7064 100644 --- a/src/geometry_header.F90 +++ b/src/geometry_header.F90 @@ -1,6 +1,6 @@ module geometry_header - use constants, only: HALF, TWO, THREE + use constants, only: HALF, TWO, THREE, INFINITY implicit none @@ -201,20 +201,22 @@ contains real(8), intent(in) :: global_xyz(3) integer :: i_xyz(3) - real(8) :: xyz(3) ! global_xyz alias + real(8) :: xyz(3) ! global xyz relative to the center real(8) :: alpha ! Skewed coord axis real(8) :: xyz_t(3) ! Local xyz - real(8) :: dists(4) ! Squared distances from cell centers + real(8) :: d, d_min ! Squared distance from cell centers integer :: i, j, k ! Iterators - integer :: loc(1) ! Minimum distance index + integer :: k_min ! Minimum distance index - xyz = global_xyz + xyz(1) = global_xyz(1) - this % center(1) + xyz(2) = global_xyz(2) - this % center(2) ! Index z direction. if (this % is_3d) then - i_xyz(3) = ceiling((xyz(3) - this % center(3))/this % pitch(2) + HALF)& - + this % n_axial/2 + xyz(3) = global_xyz(3) - this % center(3) + i_xyz(3) = ceiling(xyz(3)/this % pitch(2) + HALF*this % n_axial) else + xyz(3) = global_xyz(3) i_xyz(3) = 1 end if @@ -233,28 +235,33 @@ contains ! the four possible cells. Regular hexagonal tiles form a centroidal ! Voronoi tessellation so the global xyz should be in the hexagonal cell ! that it is closest to the center of. This method is used over a - ! method that uses the remainders of the floor divisions above becasue it + ! method that uses the remainders of the floor divisions above because it ! provides better finite precision performance. Squared distances are ! used becasue they are more computationally efficient than normal ! distances. k = 1 - do i=0,1 - do j=0,1 - xyz_t = this % get_local_xyz(xyz, i_xyz + (/j, i, 0/)) - dists(k) = xyz_t(1)**2 + xyz_t(2)**2 + d_min = INFINITY + do i = 0, 1 + do j = 0, 1 + xyz_t = this % get_local_xyz(global_xyz, i_xyz + [j, i, 0]) + d = xyz_t(1)**2 + xyz_t(2)**2 + if (d < d_min) then + d_min = d + k_min = k + end if k = k + 1 end do end do ! Select the minimum squared distance which corresponds to the cell the ! coordinates are in. - loc = minloc(dists) - if (loc(1) == 2) then - i_xyz = i_xyz + (/1, 0, 0/) - else if (loc(1) == 3) then - i_xyz = i_xyz + (/0, 1, 0/) - else if (loc(1) == 4) then - i_xyz = i_xyz + (/1, 1, 0/) + if (k_min == 2) then + i_xyz(1) = i_xyz(1) + 1 + else if (k_min == 3) then + i_xyz(2) = i_xyz(2) + 1 + else if (k_min == 4) then + i_xyz(1) = i_xyz(1) + 1 + i_xyz(2) = i_xyz(2) + 1 end if end function get_inds_hex @@ -303,7 +310,7 @@ contains (i_xyz(1) - this % n_rings) * this % pitch(1) / TWO) if (this % is_3d) then local_xyz(3) = xyz(3) - this % center(3) & - + (this % n_axial/2 - i_xyz(3) + 1) * this % pitch(2) + + (HALF*this % n_axial - i_xyz(3) + HALF) * this % pitch(2) else local_xyz(3) = xyz(3) end if From abd069a9c28fdf9ddeebfde9f795b21e44f2a86f Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 23 May 2016 20:39:16 -0400 Subject: [PATCH 564/650] Minor comment changes to pyapi --- openmc/mgxs/library.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 4fffe0080c..25427b2aaf 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -942,6 +942,7 @@ class Library(object): See also -------- Library.dump_to_file() + Library.create_mg_mode() """ @@ -994,7 +995,10 @@ class Library(object): def create_mg_mode(self, xsdata_names=None, xs_ids=None): """Creates an openmc.MGXSLibrary object to contain the MGXS data for the Multi-Group mode of OpenMC as well as the associated openmc.Materials - and openmc.Geometry objects. This method only creates a macroscopic + and openmc.Geometry objects. The created Geometry is the same as that + used to generate the MGXS data, with the only differences being + modifications to point to newly-created Materials which point to the + multi-group data. This method only creates a macroscopic MGXS Library even if nuclidic tallies are specified in the Library. Parameters @@ -1112,8 +1116,9 @@ class Library(object): needed to support tallies the user may wish to request. - A nu-scatter matrix is required. + - Having a multiplicity matrix is preferred. - Having both nu-scatter (of any order) and scatter - (at least isotropic) matrices is preferred + (at least isotropic) matrices is the second choice. - If only nu-scatter, need total (not transport), to be used in adjusting absorption (i.e., reduced_abs = tot - nuscatt) From 7aac42686093b887defb9fac0570fe20c99717af Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 23 May 2016 20:42:34 -0400 Subject: [PATCH 565/650] And one more comment change to include multiplicity matrix in mgxs_type docstring def --- openmc/mgxs/library.py | 3 ++- openmc/mgxs/mgxs.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 25427b2aaf..1ceaf455dd 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -463,7 +463,8 @@ class Library(object): mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', - 'nu-scatter matrix', 'nu-fission matrix', chi'} + 'nu-scatter matrix', 'multiplicity matrix', + 'nu-fission matrix', chi'} The type of multi-group cross section object to return Returns diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 6ab726f890..bd26156a46 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -430,7 +430,8 @@ class MGXS(object): mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', - 'nu-scatter matrix', 'nu-fission matrix', 'chi'} + 'nu-scatter matrix', 'multiplicity matrix', + 'nu-fission matrix', chi'} The type of multi-group cross section object to return domain : openmc.Material or openmc.Cell or openmc.Universe The domain for spatial homogenization From 18447b7f00d12719f81907aa830cb75b9e38f9b4 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 23 May 2016 21:31:23 -0400 Subject: [PATCH 566/650] updating for 2 comments per @wbinventory --- openmc/mgxs/library.py | 6 +----- openmc/mgxs/mgxs.py | 9 ++------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 1ceaf455dd..4c2497173e 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -460,11 +460,7 @@ class Library(object): ---------- domain : Material or Cell or Universe or Integral The material, cell, or universe object of interest (or its ID) - mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', - 'capture', 'fission', 'nu-fission', 'kappa-fission', - 'scatter', 'nu-scatter', 'scatter matrix', - 'nu-scatter matrix', 'multiplicity matrix', - 'nu-fission matrix', chi'} + mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'multiplicity matrix', 'nu-fission matrix', chi'} The type of multi-group cross section object to return Returns diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index bd26156a46..76da3a587f 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -427,11 +427,7 @@ class MGXS(object): Parameters ---------- - mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', - 'capture', 'fission', 'nu-fission', 'kappa-fission', - 'scatter', 'nu-scatter', 'scatter matrix', - 'nu-scatter matrix', 'multiplicity matrix', - 'nu-fission matrix', chi'} + mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'multiplicity matrix', 'nu-fission matrix', chi'} The type of multi-group cross section object to return domain : openmc.Material or openmc.Cell or openmc.Universe The domain for spatial homogenization @@ -1810,8 +1806,7 @@ class MatrixMGXS(MGXS): """ # Call super class method and null out derived tallies - slice_xs = super(NuFissionMatrixXS, self).get_slice(nuclides, - in_groups) + slice_xs = super(MatrixMGXS, self).get_slice(nuclides, in_groups) slice_xs._rxn_rate_tally = None slice_xs._xs_tally = None From 48ac499d8a96ccc2ceadc72675e0b8a0b7df3d61 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 24 May 2016 16:24:26 -0500 Subject: [PATCH 567/650] Respond to @smharper suggestions on #647 --- docs/source/usersguide/input.rst | 8 +++-- openmc/surface.py | 53 +++++++++++++++++--------------- src/geometry.F90 | 12 +++++--- 3 files changed, 43 insertions(+), 30 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index ea51723b7b..e9ce42fd9c 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -897,8 +897,12 @@ Each ```` element can have the following attributes or sub-elements: *Default*: None :boundary: - The boundary condition for the surface. This can be "transmission", - "vacuum", "reflective", or "periodic". + The boundary condition for the surface. This can be "transmission", + "vacuum", "reflective", or "periodic". Periodic boundary conditions can + only be applied to x-, y-, and z-planes. Only axis-aligned periodicity is + supported, i.e., x-planes an only be paired with x-planes. Specify which + planes are periodic and the code will automatically identify which planes + are paired together. *Default*: "transmission" diff --git a/openmc/surface.py b/openmc/surface.py index 37e7c2ffdb..239b868aa2 100644 --- a/openmc/surface.py +++ b/openmc/surface.py @@ -37,7 +37,9 @@ class Surface(object): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles - freely pass through the surface. + freely pass through the surface. Note that periodic boundary conditions + can only be applied to x-, y-, and z-planes, and only axis-aligned + periodicity is supported. name : str, optional Name of the surface. If not specified, the name will be the empty string. @@ -192,7 +194,7 @@ class Plane(Surface): surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional + boundary_type : {'transmission, 'vacuum', 'reflective'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. @@ -217,7 +219,7 @@ class Plane(Surface): The 'C' parameter for the plane d : float The 'D' parameter for the plane - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective'} Boundary condition that defines the behavior for particles hitting the surface. coefficients : dict @@ -290,7 +292,8 @@ class XPlane(Plane): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles - freely pass through the surface. + freely pass through the surface. Only axis-aligned periodicity is + supported, i.e., x-planes can only be paired with x-planes. x0 : float, optional Location of the plane. Defaults to 0. name : str, optional @@ -374,7 +377,8 @@ class YPlane(Plane): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles - freely pass through the surface. + freely pass through the surface. Only axis-aligned periodicity is + supported, i.e., x-planes can only be paired with x-planes. y0 : float, optional Location of the plane name : str, optional @@ -459,7 +463,8 @@ class ZPlane(Plane): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles - freely pass through the surface. + freely pass through the surface. Only axis-aligned periodicity is + supported, i.e., x-planes can only be paired with x-planes. z0 : float, optional Location of the plane. Defaults to 0. name : str, optional @@ -541,7 +546,7 @@ class Cylinder(Surface): surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional + boundary_type : {'transmission, 'vacuum', 'reflective'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. @@ -555,7 +560,7 @@ class Cylinder(Surface): ---------- r : float Radius of the cylinder - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective'} Boundary condition that defines the behavior for particles hitting the surface. coefficients : dict @@ -597,7 +602,7 @@ class XCylinder(Cylinder): surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional + boundary_type : {'transmission, 'vacuum', 'reflective'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. @@ -617,7 +622,7 @@ class XCylinder(Cylinder): y-coordinate of the center of the cylinder z0 : float z-coordinate of the center of the cylinder - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective'} Boundary condition that defines the behavior for particles hitting the surface. coefficients : dict @@ -700,7 +705,7 @@ class YCylinder(Cylinder): surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional + boundary_type : {'transmission, 'vacuum', 'reflective'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. @@ -720,7 +725,7 @@ class YCylinder(Cylinder): x-coordinate of the center of the cylinder z0 : float z-coordinate of the center of the cylinder - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective'} Boundary condition that defines the behavior for particles hitting the surface. coefficients : dict @@ -803,7 +808,7 @@ class ZCylinder(Cylinder): surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional + boundary_type : {'transmission, 'vacuum', 'reflective'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. @@ -823,7 +828,7 @@ class ZCylinder(Cylinder): x-coordinate of the center of the cylinder y0 : float y-coordinate of the center of the cylinder - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective'} Boundary condition that defines the behavior for particles hitting the surface. coefficients : dict @@ -905,7 +910,7 @@ class Sphere(Surface): surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional + boundary_type : {'transmission, 'vacuum', 'reflective'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. @@ -930,7 +935,7 @@ class Sphere(Surface): z-coordinate of the center of the sphere R : float Radius of the sphere - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective'} Boundary condition that defines the behavior for particles hitting the surface. coefficients : dict @@ -1033,7 +1038,7 @@ class Cone(Surface): surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional + boundary_type : {'transmission, 'vacuum', 'reflective'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. @@ -1058,7 +1063,7 @@ class Cone(Surface): z-coordinate of the apex R2 : float Parameter related to the aperature - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective'} Boundary condition that defines the behavior for particles hitting the surface. coefficients : dict @@ -1130,7 +1135,7 @@ class XCone(Cone): surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional + boundary_type : {'transmission, 'vacuum', 'reflective'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. @@ -1155,7 +1160,7 @@ class XCone(Cone): z-coordinate of the apex R2 : float Parameter related to the aperature - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective'} Boundary condition that defines the behavior for particles hitting the surface. coefficients : dict @@ -1186,7 +1191,7 @@ class YCone(Cone): surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional + boundary_type : {'transmission, 'vacuum', 'reflective'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. @@ -1211,7 +1216,7 @@ class YCone(Cone): z-coordinate of the apex R2 : float Parameter related to the aperature - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective'} Boundary condition that defines the behavior for particles hitting the surface. coefficients : dict @@ -1242,7 +1247,7 @@ class ZCone(Cone): surface_id : int, optional Unique identifier for the surface. If not specified, an identifier will automatically be assigned. - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'}, optional + boundary_type : {'transmission, 'vacuum', 'reflective'}, optional Boundary condition that defines the behavior for particles hitting the surface. Defaults to transmissive boundary condition where particles freely pass through the surface. @@ -1267,7 +1272,7 @@ class ZCone(Cone): z-coordinate of the apex R2 : float Parameter related to the aperature - boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} + boundary_type : {'transmission, 'vacuum', 'reflective'} Boundary condition that defines the behavior for particles hitting the surface. coefficients : dict diff --git a/src/geometry.F90 b/src/geometry.F90 index 62c5036a9c..2059ea42fc 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -378,6 +378,7 @@ contains real(8) :: v ! y-component of direction real(8) :: w ! z-component of direction real(8) :: norm ! "norm" of surface normal + real(8) :: xyz(3) ! Saved global coordinate integer :: i_surface ! index in surfaces logical :: found ! particle found in universe? class(Surface), pointer :: surf @@ -435,9 +436,10 @@ contains ! case the surface crossing is coincident with a mesh boundary if (active_current_tallies % size() > 0) then + xyz = p % coord(1) % xyz p % coord(1) % xyz = p % coord(1) % xyz - TINY_BIT * p % coord(1) % uvw call score_surface_current(p) - p % coord(1) % xyz = p % coord(1) % xyz + TINY_BIT * p % coord(1) % uvw + p % coord(1) % xyz = xyz end if ! Reflect particle off surface @@ -481,8 +483,9 @@ contains ! Do not handle periodic boundary conditions on lower universes if (p % n_coord /= 1) then - call handle_lost_particle(p, "Cannot period particle " & - // trim(to_str(p % id)) // " off surface in a lower universe.") + call handle_lost_particle(p, "Cannot transfer particle " & + // trim(to_str(p % id)) // " across surface in a lower universe.& + & Boundary conditions must be applied to universe 0.") return end if @@ -491,9 +494,10 @@ contains ! case the surface crossing is coincident with a mesh boundary if (active_current_tallies % size() > 0) then + xyz = p % coord(1) % xyz p % coord(1) % xyz = p % coord(1) % xyz - TINY_BIT * p % coord(1) % uvw call score_surface_current(p) - p % coord(1) % xyz = p % coord(1) % xyz + TINY_BIT * p % coord(1) % uvw + p % coord(1) % xyz = xyz end if select type (surf) From 7794fae54dc9fd56eb23d673b3d02c30944fbaae Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Tue, 24 May 2016 20:19:14 -0400 Subject: [PATCH 568/650] updates per @wbinventor comments --- .../pythonapi/examples/mgxs-part-iv.ipynb | 60 ++++----- openmc/mgxs/mgxs.py | 122 ++++++++---------- openmc/mgxs_library.py | 4 +- 3 files changed, 86 insertions(+), 100 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb index 9c13d28ecd..b330e7ace8 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb @@ -433,7 +433,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -724,7 +724,7 @@ " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", " Git SHA1: b7cc8a3a1460a9662fd3e8d11a6c0cf5902946c2\n", - " Date/Time: 2016-05-22 21:29:21\n", + " Date/Time: 2016-05-24 19:52:06\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -811,20 +811,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 1.4810E+00 seconds\n", - " Reading cross sections = 1.1840E+00 seconds\n", - " Total time in simulation = 1.9619E+01 seconds\n", - " Time in transport only = 1.9512E+01 seconds\n", - " Time in inactive batches = 2.1770E+00 seconds\n", - " Time in active batches = 1.7442E+01 seconds\n", - " Time synchronizing fission bank = 1.0000E-02 seconds\n", - " Sampling source sites = 6.0000E-03 seconds\n", - " SEND/RECV source sites = 4.0000E-03 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for initialization = 1.4330E+00 seconds\n", + " Reading cross sections = 1.1310E+00 seconds\n", + " Total time in simulation = 1.8040E+01 seconds\n", + " Time in transport only = 1.7983E+01 seconds\n", + " Time in inactive batches = 2.0740E+00 seconds\n", + " Time in active batches = 1.5966E+01 seconds\n", + " Time synchronizing fission bank = 8.0000E-03 seconds\n", + " Sampling source sites = 5.0000E-03 seconds\n", + " SEND/RECV source sites = 3.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 2.1110E+01 seconds\n", - " Calculation Rate (inactive) = 22967.4 neutrons/second\n", - " Calculation Rate (active) = 11466.6 neutrons/second\n", + " Total time elapsed = 1.9482E+01 seconds\n", + " Calculation Rate (inactive) = 24108.0 neutrons/second\n", + " Calculation Rate (active) = 12526.6 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -953,7 +953,7 @@ "metadata": {}, "source": [ "We will now use the `Library` to produce a multi-group cross section data set for use by the OpenMC multi-group solver. \n", - "Note that since we have ran so few histories, is not unreasonable to expect some divisions by zero errors. This will show up as a runtime warning in the following step." + "Note that since this simulation included so few histories, it is reasonable to expect some divisions by zero errors. This will show up as a runtime warning in the following step." ] }, { @@ -1100,7 +1100,7 @@ " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", " Git SHA1: b7cc8a3a1460a9662fd3e8d11a6c0cf5902946c2\n", - " Date/Time: 2016-05-22 21:29:43\n", + " Date/Time: 2016-05-24 19:52:26\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -1184,20 +1184,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.4000E-02 seconds\n", - " Reading cross sections = 3.0000E-03 seconds\n", - " Total time in simulation = 1.4720E+01 seconds\n", - " Time in transport only = 1.4678E+01 seconds\n", - " Time in inactive batches = 1.3020E+00 seconds\n", - " Time in active batches = 1.3418E+01 seconds\n", - " Time synchronizing fission bank = 6.0000E-03 seconds\n", - " Sampling source sites = 3.0000E-03 seconds\n", + " Total time for initialization = 3.6000E-02 seconds\n", + " Reading cross sections = 7.0000E-03 seconds\n", + " Total time in simulation = 1.4412E+01 seconds\n", + " Time in transport only = 1.4376E+01 seconds\n", + " Time in inactive batches = 1.2750E+00 seconds\n", + " Time in active batches = 1.3137E+01 seconds\n", + " Time synchronizing fission bank = 1.0000E-02 seconds\n", + " Sampling source sites = 7.0000E-03 seconds\n", " SEND/RECV source sites = 3.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.4763E+01 seconds\n", - " Calculation Rate (inactive) = 38402.5 neutrons/second\n", - " Calculation Rate (active) = 14905.4 neutrons/second\n", + " Total time elapsed = 1.4458E+01 seconds\n", + " Calculation Rate (inactive) = 39215.7 neutrons/second\n", + " Calculation Rate (active) = 15224.2 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1384,7 +1384,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 40, @@ -1395,7 +1395,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 76da3a587f..8a7d9d0b16 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -57,7 +57,7 @@ class MGXS(object): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. NOTE: Users should instantiate the subclasses of this abstract class. @@ -727,9 +727,8 @@ class MGXS(object): Return the cross section indexed according to increasing or decreasing energy groups (decreasing or increasing energies). Defaults to 'increasing'. - value : str - A string for the type of value to return - 'mean', 'std_dev' or - 'rel_err' are accepted. Defaults to 'mean'. + value : {'mean', 'std_dev', 'rel_err'} + A string for the type of value to return. Defaults to 'mean'. Returns ------- @@ -963,8 +962,9 @@ class MGXS(object): Returns ------- openmc.mgxs.MGXS - A new tally which encapsulates the subset of data requested for the - nuclide(s) and/or energy group(s) requested in the parameters. + A new MGXS object which encapsulates the subset of data requested + for the nuclide(s) and/or energy group(s) requested in the + parameters. """ @@ -1536,7 +1536,7 @@ class MatrixMGXS(MGXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. NOTE: Users should instantiate the subclasses of this abstract class. @@ -1624,9 +1624,7 @@ class MatrixMGXS(MGXS): energy = openmc.Filter('energy', group_edges) energyout = openmc.Filter('energyout', group_edges) - filters = [[energy], [energy, energyout]] - - return filters + return [[energy], [energy, energyout]] @property def estimator(self): @@ -1636,10 +1634,10 @@ class MatrixMGXS(MGXS): subdomains='all', nuclides='all', xs_type='macro', order_groups='increasing', row_column='inout', value='mean', **kwargs): - r"""Returns an array of multi-group cross sections. + """Returns an array of multi-group cross sections. - This method constructs a 2D NumPy array for the requested multiplicity - matrix data data for one or more energy groups and subdomains. + This method constructs a 2D NumPy array for the requested multi-group + matrix data for one or more energy groups and subdomains. Parameters ---------- @@ -1666,9 +1664,8 @@ class MatrixMGXS(MGXS): Return the cross section indexed first by incoming group and second by outgoing group ('inout'), or vice versa ('outin'). Defaults to 'inout'. - value : str - A string for the type of value to return - 'mean', 'std_dev', or - 'rel_err' are accepted. Defaults to the empty string. + value : {'mean', 'std_dev', 'rel_err'} + A string for the type of value to return. Defaults to 'mean'. Returns ------- @@ -1777,7 +1774,7 @@ class MatrixMGXS(MGXS): return xs def get_slice(self, nuclides=[], in_groups=[], out_groups=[]): - """Build a sliced NuFissionMatrix for the specified nuclides and + """Build a sliced matrixMGXS object for the specified nuclides and energy groups. This method constructs a new MGXS to encapsulate a subset of the data @@ -1799,9 +1796,10 @@ class MatrixMGXS(MGXS): Returns ------- - openmc.mgxs.MGXS - A new tally which encapsulates the subset of data requested for the - nuclide(s) and/or energy group(s) requested in the parameters. + openmc.mgxs.MatrixMGXS + A new MatrixMGXS object which encapsulates the subset of data + requested for the nuclide(s) and/or energy group(s) requested in + the parameters. """ @@ -1940,7 +1938,7 @@ class TotalXS(MGXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. Parameters ---------- @@ -2028,7 +2026,7 @@ class TransportXS(MGXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. Parameters ---------- @@ -2142,7 +2140,7 @@ class NuTransportXS(TransportXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. Parameters ---------- @@ -2238,7 +2236,7 @@ class AbsorptionXS(MGXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. Parameters ---------- @@ -2331,7 +2329,7 @@ class CaptureXS(MGXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. Parameters ---------- @@ -2431,7 +2429,7 @@ class FissionXS(MGXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. Parameters ---------- @@ -2519,7 +2517,7 @@ class NuFissionXS(MGXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. Parameters ---------- @@ -2607,7 +2605,7 @@ class KappaFissionXS(MGXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. Parameters ---------- @@ -2695,7 +2693,7 @@ class ScatterXS(MGXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. Parameters ---------- @@ -2783,7 +2781,7 @@ class NuScatterXS(MGXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. Parameters ---------- @@ -2872,7 +2870,7 @@ class ScatterMatrixXS(MatrixMGXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. Parameters ---------- @@ -3116,9 +3114,10 @@ class ScatterMatrixXS(MatrixMGXS): Returns ------- - openmc.mgxs.MGXS - A new tally which encapsulates the subset of data requested for the - nuclide(s) and/or energy group(s) requested in the parameters. + openmc.mgxs.MatrixMGXS + A new MatrixMGXS which encapsulates the subset of data requested + for the nuclide(s) and/or energy group(s) requested in the + parameters. """ @@ -3200,9 +3199,8 @@ class ScatterMatrixXS(MatrixMGXS): Return the cross section indexed first by incoming group and second by outgoing group ('inout'), or vice versa ('outin'). Defaults to 'inout'. - value : str - A string for the type of value to return - 'mean', 'std_dev', or - 'rel_err' are accepted. Defaults to the empty string. + value : {'mean', 'std_dev', 'rel_err'} + A string for the type of value to return. Defaults to 'mean'. Returns ------- @@ -3430,7 +3428,7 @@ class ScatterMatrixXS(MatrixMGXS): cv.check_value('xs_type', xs_type, ['macro', 'micro']) if self.correction != 'P0': - rxn_type= '{0} (P{1})'.format(self.rxn_type, moment) + rxn_type = '{0} (P{1})'.format(self.rxn_type, moment) else: rxn_type = self.rxn_type @@ -3449,7 +3447,7 @@ class ScatterMatrixXS(MatrixMGXS): template = '{0: <12}Group {1} [{2: <10} - {3: <10}MeV]\n' # Loop over energy groups ranges - for group in range(1, self.num_groups+1): + for group in range(1, self.num_groups + 1): bounds = self.energy_groups.get_group_bounds(group) string += template.format('', group, bounds[0], bounds[1]) @@ -3476,8 +3474,8 @@ class ScatterMatrixXS(MatrixMGXS): template = '{0: <12}Group {1} -> Group {2}:\t\t' # Loop over incoming/outgoing energy groups ranges - for in_group in range(1, self.num_groups+1): - for out_group in range(1, self.num_groups+1): + for in_group in range(1, self.num_groups + 1): + for out_group in range(1, self.num_groups + 1): string += template.format('', in_group, out_group) average = \ self.get_xs([in_group], [out_group], @@ -3489,7 +3487,8 @@ class ScatterMatrixXS(MatrixMGXS): xs_type=xs_type, value='rel_err') average = average.flatten()[0] rel_err = rel_err.flatten()[0] * 100. - string += '{:1.2e} +/- {:1.2e}%'.format(average, rel_err) + string += '{:1.2e} +/- {:1.2e}%'.format(average, + rel_err) string += '\n' string += '\n' string += '\n' @@ -3504,7 +3503,7 @@ class NuScatterMatrixXS(ScatterMatrixXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. Parameters ---------- @@ -3597,7 +3596,7 @@ class MultiplicityMatrixXS(MatrixMGXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. Parameters ---------- @@ -3691,9 +3690,7 @@ class MultiplicityMatrixXS(MatrixMGXS): energy = openmc.Filter('energy', group_edges) energyout = openmc.Filter('energyout', group_edges) - filters = [[energy, energyout], [energy, energyout]] - - return filters + return [[energy, energyout], [energy, energyout]] @property def rxn_rate_tally(self): @@ -3720,7 +3717,7 @@ class NuFissionMatrixXS(MatrixMGXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. Parameters ---------- @@ -3800,19 +3797,8 @@ class NuFissionMatrixXS(MatrixMGXS): groups=None, by_nuclide=False, name=''): super(NuFissionMatrixXS, self).__init__(domain, domain_type, groups, by_nuclide, name) - self._rxn_type = 'nu-fission matrix' - - @property - def scores(self): - scores = ['flux', 'nu-fission'] - return scores - - @property - def rxn_rate_tally(self): - if self._rxn_rate_tally is None: - self._rxn_rate_tally = self.tallies['nu-fission'] - self._rxn_rate_tally.sparse = self.sparse - return self._rxn_rate_tally + self._rxn_type = 'nu-fission' + self._hdf5_key = 'nu-fission matrix' class Chi(MGXS): @@ -3820,7 +3806,7 @@ class Chi(MGXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for deterministic neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. Parameters ---------- @@ -3966,9 +3952,10 @@ class Chi(MGXS): Returns ------- - MGXS - A new tally which encapsulates the subset of data requested for the - nuclide(s) and/or energy group(s) requested in the parameters. + openmc.mgxs.MGXS + A new MGXS which encapsulates the subset of data requested + for the nuclide(s) and/or energy group(s) requested in the + parameters. """ @@ -4080,9 +4067,8 @@ class Chi(MGXS): Return the cross section indexed according to increasing or decreasing energy groups (decreasing or increasing energies). Defaults to 'increasing'. - value : str - A string for the type of value to return - 'mean', 'std_dev', or - 'rel_err' are accepted. Defaults to 'mean'. + value : {'mean', 'std_dev', 'rel_err'} + A string for the type of value to return. Defaults to 'mean'. Returns ------- diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index f75d7e2e44..35b48d8730 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -525,7 +525,7 @@ class XSdata(object): def chi(self, chi): if self.use_chi is not None: if not self.use_chi: - msg = 'Providing chi when nu_fission already provided as a' \ + msg = 'Providing "chi" when "nu-fission" already provided as a' \ 'matrix' raise ValueError(msg) @@ -753,7 +753,7 @@ class XSdata(object): msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) - if type(nu_fission) is openmc.mgxs.NuFissionMatrixXS: + if isinstance(nu_fission, openmc.mgxs.NuFissionMatrixXS): self.use_chi = False else: self.use_chi = True From dca86df219b846fd913041c8ea02cfee1feae941 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Tue, 24 May 2016 20:27:06 -0400 Subject: [PATCH 569/650] adding notice to users that div by zero is expected in mgxs-part-iii nbook. --- docs/source/pythonapi/examples/mgxs-part-iii.ipynb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index bc2f96414a..a386779450 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -939,7 +939,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The `NuFissionXS` object supports all of the methods described previously the `openmc.mgxs` tutorials, such as [Pandas](http://pandas.pydata.org/) `DataFrames`:" + "The `NuFissionXS` object supports all of the methods described previously in the `openmc.mgxs` tutorials, such as [Pandas](http://pandas.pydata.org/) `DataFrames`:\n", + "Note that since so few histories were simulated, we should expect a few division-by-error errors as some tallies have not yet scored any results." ] }, { @@ -1597,7 +1598,7 @@ "metadata": { "kernelspec": { "display_name": "Python 2", - "language": "python", + "language": "python2", "name": "python2" }, "language_info": { From 7f2bf91be6054f5ab67388bc6e643ec0d62fd4da Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Tue, 24 May 2016 21:09:19 -0400 Subject: [PATCH 570/650] Fixed typo in MatrixMGXS.get_slice and fixed an error found when attempting to implement the test where the NuScatterXS type thought it deserved tracklength estimator status when it hasnt yet earned it. Its been demoted back to analog. --- openmc/mgxs/mgxs.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 8a7d9d0b16..ca95be58ad 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1774,7 +1774,7 @@ class MatrixMGXS(MGXS): return xs def get_slice(self, nuclides=[], in_groups=[], out_groups=[]): - """Build a sliced matrixMGXS object for the specified nuclides and + """Build a sliced MatrixMGXS object for the specified nuclides and energy groups. This method constructs a new MGXS to encapsulate a subset of the data @@ -2863,6 +2863,10 @@ class NuScatterXS(MGXS): groups, by_nuclide, name) self._rxn_type = 'nu-scatter' + @property + def estimator(self): + return 'analog' + class ScatterMatrixXS(MatrixMGXS): """A scattering matrix multi-group cross section for one or more Legendre From 1af96416eaa502d714076dfd85f68a59b01b52de Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 25 May 2016 07:22:43 -0500 Subject: [PATCH 571/650] Extend input so that user can specify periodic surface pairs. Also fix a bug. --- openmc/surface.py | 32 ++++++++++++++++ src/geometry.F90 | 8 ++-- src/initialize.F90 | 14 ------- src/input_xml.F90 | 56 ++++++++++++++++++---------- src/surface_header.F90 | 6 +-- tests/test_periodic/geometry.xml | 12 ------ tests/test_periodic/inputs_true.dat | 1 + tests/test_periodic/materials.xml | 13 ------- tests/test_periodic/results_true.dat | 2 +- tests/test_periodic/settings.xml | 13 ------- tests/test_periodic/test_periodic.py | 53 +++++++++++++++++++++++++- 11 files changed, 129 insertions(+), 81 deletions(-) delete mode 100644 tests/test_periodic/geometry.xml create mode 100644 tests/test_periodic/inputs_true.dat delete mode 100644 tests/test_periodic/materials.xml delete mode 100644 tests/test_periodic/settings.xml diff --git a/openmc/surface.py b/openmc/surface.py index 239b868aa2..ca2d5d6b45 100644 --- a/openmc/surface.py +++ b/openmc/surface.py @@ -222,6 +222,9 @@ class Plane(Surface): boundary_type : {'transmission, 'vacuum', 'reflective'} Boundary condition that defines the behavior for particles hitting the surface. + periodic_surface : openmc.Surface + If a periodic boundary condition is used, the surface with which this + one is periodic with coefficients : dict Dictionary of surface coefficients id : int @@ -239,6 +242,7 @@ class Plane(Surface): self._type = 'plane' self._coeff_keys = ['A', 'B', 'C', 'D'] + self._periodic_surface = None self.a = A self.b = B self.c = C @@ -260,6 +264,10 @@ class Plane(Surface): def d(self): return self.coefficients['D'] + @property + def periodic_surface(self): + return self._periodic_surface + @a.setter def a(self, A): check_type('A coefficient', A, Real) @@ -280,6 +288,21 @@ class Plane(Surface): check_type('D coefficient', D, Real) self._coefficients['D'] = D + @periodic_surface.setter + def periodic_surface(self, periodic_surface): + check_type('periodic surface', periodic_surface, Plane) + self._periodic_surface = periodic_surface + periodic_surface._periodic_surface = self + + def create_xml_subelement(self): + element = super(Plane, self).create_xml_subelement() + + # Add periodic surface pair information + if self.boundary_type == 'periodic': + if self.periodic_surface is not None: + element.set("periodic_surface_id", str(self.periodic_surface.id)) + return element + class XPlane(Plane): """A plane perpendicular to the x axis of the form :math:`x - x_0 = 0` @@ -306,6 +329,9 @@ class XPlane(Plane): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. + periodic_surface : openmc.Surface + If a periodic boundary condition is used, the surface with which this + one is periodic with coefficients : dict Dictionary of surface coefficients id : int @@ -391,6 +417,9 @@ class YPlane(Plane): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. + periodic_surface : openmc.Surface + If a periodic boundary condition is used, the surface with which this + one is periodic with coefficients : dict Dictionary of surface coefficients id : int @@ -477,6 +506,9 @@ class ZPlane(Plane): boundary_type : {'transmission, 'vacuum', 'reflective', 'periodic'} Boundary condition that defines the behavior for particles hitting the surface. + periodic_surface : openmc.Surface + If a periodic boundary condition is used, the surface with which this + one is periodic with coefficients : dict Dictionary of surface coefficients id : int diff --git a/src/geometry.F90 b/src/geometry.F90 index 2059ea42fc..21c8baa6b8 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -502,26 +502,26 @@ contains select type (surf) type is (SurfaceXPlane) - select type (opposite => surfaces(surf % opposite) % obj) + select type (opposite => surfaces(surf % i_periodic) % obj) type is (SurfaceXPlane) p % coord(1) % xyz(1) = opposite % x0 end select type is (SurfaceYPlane) - select type (opposite => surfaces(surf % opposite) % obj) + select type (opposite => surfaces(surf % i_periodic) % obj) type is (SurfaceYPlane) p % coord(1) % xyz(2) = opposite % y0 end select type is (SurfaceZPlane) - select type (opposite => surfaces(surf % opposite) % obj) + select type (opposite => surfaces(surf % i_periodic) % obj) type is (SurfaceZPlane) p % coord(1) % xyz(3) = opposite % z0 end select end select ! Reassign particle's surface - p % surface = sign(surfaces(surf % opposite) % obj % id, p % surface) + p % surface = sign(surf % i_periodic, p % surface) ! Figure out what cell particle is in now p % n_coord = 1 diff --git a/src/initialize.F90 b/src/initialize.F90 index 74cab87c4b..09bedb1388 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -580,20 +580,6 @@ contains class(Lattice), pointer :: lat => null() type(TallyObject), pointer :: t => null() - ! Adjust opposite surfaces for periodic boundaries - do i = 1, size(surfaces) - associate (surf => surfaces(i) % obj) - if (surf % bc == BC_PERIODIC) then - if (surface_dict % has_key(surf % opposite)) then - surf % opposite = surface_dict % get_key(surf % opposite) - else - call fatal_error("Could not find opposite surface " // & - trim(to_str(surf % opposite)) // ".") - end if - end if - end associate - end do - do i = 1, n_cells ! ======================================================================= ! ADJUST REGION SPECIFICATION FOR EACH CELL diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 242d3459a6..8a9b2299fb 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -1578,6 +1578,12 @@ contains case ('periodic') s%bc = BC_PERIODIC boundary_exists = .true. + + ! Check for specification of periodic surface + if (check_for_node(node_surf, "periodic_surface_id")) then + call get_node_value(node_surf, "periodic_surface_id", & + s % i_periodic) + end if case default call fatal_error("Unknown boundary condition '" // trim(word) // & &"' specified on surface " // trim(to_str(s%id))) @@ -1597,33 +1603,45 @@ contains if (surfaces(i) % obj % bc == BC_PERIODIC) then select type (surf => surfaces(i) % obj) type is (SurfaceXPlane) - if (i == i_xmin) then - surf % opposite = i_xmax - elseif (i == i_xmax) then - surf % opposite = i_xmin + if (surf % i_periodic == NONE) then + if (i == i_xmin) then + surf % i_periodic = i_xmax + elseif (i == i_xmax) then + surf % i_periodic = i_xmin + else + call fatal_error("Periodic boundary condition applied to & + &interior surface.") + end if else - call fatal_error("Periodic boundary condition applied to & - &interior surface.") + surf % i_periodic = surface_dict % get_key(surf % i_periodic) end if type is (SurfaceYPlane) - if (i == i_ymin) then - surf % opposite = i_ymax - elseif (i == i_ymax) then - surf % opposite = i_ymin + if (surf % i_periodic == NONE) then + if (i == i_ymin) then + surf % i_periodic = i_ymax + elseif (i == i_ymax) then + surf % i_periodic = i_ymin + else + call fatal_error("Periodic boundary condition applied to & + &interior surface.") + end if else - call fatal_error("Periodic boundary condition applied to & - &interior surface.") + surf % i_periodic = surface_dict % get_key(surf % i_periodic) end if type is (SurfaceZPlane) - if (i == i_zmin) then - surf % opposite = i_zmax - elseif (i == i_zmax) then - surf % opposite = i_zmin + if (surf % i_periodic == NONE) then + if (i == i_zmin) then + surf % i_periodic = i_zmax + elseif (i == i_zmax) then + surf % i_periodic = i_zmin + else + call fatal_error("Periodic boundary condition applied to & + &interior surface.") + end if else - call fatal_error("Periodic boundary condition applied to & - &interior surface.") + surf % i_periodic = surface_dict % get_key(surf % i_periodic) end if class default @@ -1633,7 +1651,7 @@ contains ! Make sure opposite surface is also periodic associate (surf => surfaces(i) % obj) - if (surfaces(surf % opposite) % obj % bc /= BC_PERIODIC) then + if (surfaces(surf % i_periodic) % obj % bc /= BC_PERIODIC) then call fatal_error("Could not find matching surface for periodic & &boundary on surface " // trim(to_str(surf % id)) // ".") end if diff --git a/src/surface_header.F90 b/src/surface_header.F90 index 0b5d3c86be..68e5144b7c 100644 --- a/src/surface_header.F90 +++ b/src/surface_header.F90 @@ -1,6 +1,6 @@ module surface_header - use constants, only: ONE, TWO, ZERO, HALF, INFINITY, FP_COINCIDENT + use constants, only: NONE, ONE, TWO, ZERO, HALF, INFINITY, FP_COINCIDENT implicit none @@ -15,8 +15,8 @@ module surface_header neighbor_pos(:), & ! List of cells on positive side neighbor_neg(:) ! List of cells on negative side integer :: bc ! Boundary condition - integer :: opposite ! Opposite surface for periodic boundary - character(len=104) :: name = "" ! User-defined name + integer :: i_periodic = NONE ! Index of corresponding periodic surface + character(len=104) :: name = "" ! User-defined name contains procedure :: sense procedure :: reflect diff --git a/tests/test_periodic/geometry.xml b/tests/test_periodic/geometry.xml deleted file mode 100644 index 6ecfec1972..0000000000 --- a/tests/test_periodic/geometry.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/tests/test_periodic/inputs_true.dat b/tests/test_periodic/inputs_true.dat new file mode 100644 index 0000000000..d50d0b8592 --- /dev/null +++ b/tests/test_periodic/inputs_true.dat @@ -0,0 +1 @@ +af589996f2930337afe34ba9894098ff5efe3b29b6e927117220b718bf29b630ffdbc931754d465a8e8100125a8aa997dbe10aab322b43f69d59710573996a6d \ No newline at end of file diff --git a/tests/test_periodic/materials.xml b/tests/test_periodic/materials.xml deleted file mode 100644 index a7bf4faf4e..0000000000 --- a/tests/test_periodic/materials.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/tests/test_periodic/results_true.dat b/tests/test_periodic/results_true.dat index f65dbafd1b..b0bdb22c7d 100644 --- a/tests/test_periodic/results_true.dat +++ b/tests/test_periodic/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.542742E+00 4.410461E-02 +1.040109E+00 6.527490E-02 diff --git a/tests/test_periodic/settings.xml b/tests/test_periodic/settings.xml deleted file mode 100644 index af09407ae5..0000000000 --- a/tests/test_periodic/settings.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - 1000 - 4 - 0 - - - - -5. -5. -5. 5. 5. 5. - - - diff --git a/tests/test_periodic/test_periodic.py b/tests/test_periodic/test_periodic.py index b584632f08..558514575a 100644 --- a/tests/test_periodic/test_periodic.py +++ b/tests/test_periodic/test_periodic.py @@ -3,9 +3,58 @@ import os import sys sys.path.insert(0, os.pardir) -from testing_harness import TestHarness +from testing_harness import PyAPITestHarness +import openmc + + +class PeriodicTest(PyAPITestHarness): + def _build_inputs(self): + # Define materials + water = openmc.Material(1) + water.add_nuclide('H-1', 2.0) + water.add_nuclide('O-16', 1.0) + water.add_s_alpha_beta('HH2O', '71t') + water.set_density('g/cc', 1.0) + + fuel = openmc.Material(2) + fuel.add_nuclide('U-235', 1.0) + fuel.set_density('g/cc', 4.5) + + materials = openmc.Materials((water, fuel)) + materials.default_xs = '71c' + materials.export_to_xml() + + # Define geometry + x_min = openmc.XPlane(1, x0=-5., boundary_type='periodic') + x_max = openmc.XPlane(2, x0=5., boundary_type='periodic') + x_max.periodic_surface = x_min + + y_min = openmc.YPlane(3, y0=-5., boundary_type='periodic') + y_max = openmc.YPlane(4, y0=5., boundary_type='periodic') + + z_min = openmc.ZPlane(5, z0=-5., boundary_type='reflective') + z_max = openmc.ZPlane(6, z0=5., boundary_type='reflective') + z_cyl = openmc.ZCylinder(7, x0=-2.5, y0=2.5, R=2.0) + + outside_cyl = openmc.Cell(1, fill=water, region=( + +x_min & -x_max & +y_min & -y_max & +z_min & -z_max & +z_cyl)) + inside_cyl = openmc.Cell(2, fill=fuel, region=+z_min & -z_max & -z_cyl) + root_universe = openmc.Universe(0, cells=(outside_cyl, inside_cyl)) + + geometry = openmc.Geometry() + geometry.root_universe = root_universe + geometry.export_to_xml() + + # Define settings + settings = openmc.Settings() + settings.particles = 1000 + settings.batches = 4 + settings.inactive = 0 + settings.source = openmc.Source(space=openmc.stats.Box( + *outside_cyl.region.bounding_box)) + settings.export_to_xml() if __name__ == '__main__': - harness = TestHarness('statepoint.4.h5') + harness = PeriodicTest('statepoint.4.h5') harness.main() From 63e355f5a02730d6f2d1c4dbf5373d4e9dea7395 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 25 May 2016 10:09:02 -0500 Subject: [PATCH 572/650] Fix typo in documentation pointed out by @smharper --- docs/source/usersguide/input.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index e9ce42fd9c..da9896fbb0 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -900,7 +900,7 @@ Each ```` element can have the following attributes or sub-elements: The boundary condition for the surface. This can be "transmission", "vacuum", "reflective", or "periodic". Periodic boundary conditions can only be applied to x-, y-, and z-planes. Only axis-aligned periodicity is - supported, i.e., x-planes an only be paired with x-planes. Specify which + supported, i.e., x-planes can only be paired with x-planes. Specify which planes are periodic and the code will automatically identify which planes are paired together. From 55740283934463d2e58255b1a5956c5afc757ffd Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 25 May 2016 10:33:47 -0500 Subject: [PATCH 573/650] Update documentation and fix Relax NG schema --- docs/source/usersguide/input.rst | 4 ++++ src/relaxng/geometry.rnc | 2 +- src/relaxng/geometry.rng | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index da9896fbb0..d1a01b65be 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -906,6 +906,10 @@ Each ```` element can have the following attributes or sub-elements: *Default*: "transmission" + :periodic_surface_id: + If a periodic boundary condition is applied, this attribute identifies the + ``id`` of the corresponding periodic sufrace. + The following quadratic surfaces can be modeled: :x-plane: diff --git a/src/relaxng/geometry.rnc b/src/relaxng/geometry.rnc index 6cb6f7c158..35d5ef8b2a 100644 --- a/src/relaxng/geometry.rnc +++ b/src/relaxng/geometry.rnc @@ -23,7 +23,7 @@ element geometry { (element coeffs { list { xsd:double+ } } | attribute coeffs { list { xsd:double+ } }) & (element boundary { ( "transmit" | "reflective" | "vacuum" | "periodic" ) } | attribute boundary { ( "transmit" | "reflective" | "vacuum" | "periodic" ) })? & - (element opposite { xsd:int } | attribute opposite { xsd:int })? + (element periodic_surface_id { xsd:int } | attribute periodic_surface_id { xsd:int })? }* & element lattice { diff --git a/src/relaxng/geometry.rng b/src/relaxng/geometry.rng index 3ff0f67c69..b53d0e8db8 100644 --- a/src/relaxng/geometry.rng +++ b/src/relaxng/geometry.rng @@ -188,10 +188,10 @@ - + - + From ccc7da103283b1d45bc362e42cb16e1349671b9f Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 25 May 2016 21:26:06 -0400 Subject: [PATCH 574/650] Removing transport score capability and replacing with error message to let users know of deprecation. Also removed that same error message for diffusion --- src/constants.F90 | 29 +++++++++++----------- src/endf.F90 | 2 -- src/input_xml.F90 | 8 ++---- src/output.F90 | 1 - src/tally.F90 | 38 ----------------------------- tests/test_tallies/inputs_true.dat | 2 +- tests/test_tallies/results_true.dat | 2 +- tests/test_tallies/test_tallies.py | 2 +- 8 files changed, 19 insertions(+), 65 deletions(-) diff --git a/src/constants.F90 b/src/constants.F90 index 5b58f409dd..be13f47f2f 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -279,7 +279,7 @@ module constants EVENT_ABSORB = 2 ! Tally score type - integer, parameter :: N_SCORE_TYPES = 22 + integer, parameter :: N_SCORE_TYPES = 21 integer, parameter :: & SCORE_FLUX = -1, & ! flux SCORE_TOTAL = -2, & ! total reaction rate @@ -289,20 +289,19 @@ module constants SCORE_SCATTER_PN = -6, & ! system for scoring 0th through nth moment SCORE_NU_SCATTER_N = -7, & ! arbitrary nu-scattering moment SCORE_NU_SCATTER_PN = -8, & ! system for scoring 0th through nth nu-scatter moment - SCORE_TRANSPORT = -9, & ! transport reaction rate - SCORE_N_1N = -10, & ! (n,1n) rate - SCORE_ABSORPTION = -11, & ! absorption rate - SCORE_FISSION = -12, & ! fission rate - SCORE_NU_FISSION = -13, & ! neutron production rate - SCORE_KAPPA_FISSION = -14, & ! fission energy production rate - SCORE_CURRENT = -15, & ! partial current - SCORE_FLUX_YN = -16, & ! angular moment of flux - SCORE_TOTAL_YN = -17, & ! angular moment of total reaction rate - SCORE_SCATTER_YN = -18, & ! angular flux-weighted scattering moment (0:N) - SCORE_NU_SCATTER_YN = -19, & ! angular flux-weighted nu-scattering moment (0:N) - SCORE_EVENTS = -20, & ! number of events - SCORE_DELAYED_NU_FISSION = -21, & ! delayed neutron production rate - SCORE_INVERSE_VELOCITY = -22 ! flux-weighted inverse velocity + SCORE_N_1N = -9, & ! (n,1n) rate + SCORE_ABSORPTION = -10, & ! absorption rate + SCORE_FISSION = -11, & ! fission rate + SCORE_NU_FISSION = -12, & ! neutron production rate + SCORE_KAPPA_FISSION = -13, & ! fission energy production rate + SCORE_CURRENT = -14, & ! partial current + SCORE_FLUX_YN = -15, & ! angular moment of flux + SCORE_TOTAL_YN = -16, & ! angular moment of total reaction rate + SCORE_SCATTER_YN = -17, & ! angular flux-weighted scattering moment (0:N) + SCORE_NU_SCATTER_YN = -18, & ! angular flux-weighted nu-scattering moment (0:N) + SCORE_EVENTS = -19, & ! number of events + SCORE_DELAYED_NU_FISSION = -20, & ! delayed neutron production rate + SCORE_INVERSE_VELOCITY = -21 ! flux-weighted inverse velocity ! Maximum scattering order supported integer, parameter :: MAX_ANG_ORDER = 10 diff --git a/src/endf.F90 b/src/endf.F90 index 64f26539a9..9f14ea6b72 100644 --- a/src/endf.F90 +++ b/src/endf.F90 @@ -34,8 +34,6 @@ contains string = "nu-scatter-n" case (SCORE_NU_SCATTER_PN) string = "nu-scatter-pn" - case (SCORE_TRANSPORT) - string = "transport" case (SCORE_N_1N) string = "n1n" case (SCORE_ABSORPTION) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index d06fe1f9d2..eb8859bec5 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -3493,13 +3493,9 @@ contains j = j + n_bins - 1 case('transport') - t % score_bins(j) = SCORE_TRANSPORT - - ! Set tally estimator to analog - t % estimator = ESTIMATOR_ANALOG - case ('diffusion') - call fatal_error("Diffusion score no longer supported for tallies, & + call fatal_error("Transport score no longer supported for tallies, & &please remove") + case ('n1n') if (run_CE) then t % score_bins(j) = SCORE_N_1N diff --git a/src/output.F90 b/src/output.F90 index d56de1f3d2..76e3cfc024 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -777,7 +777,6 @@ contains score_names(abs(SCORE_TOTAL)) = "Total Reaction Rate" score_names(abs(SCORE_SCATTER)) = "Scattering Rate" score_names(abs(SCORE_NU_SCATTER)) = "Scattering Production Rate" - score_names(abs(SCORE_TRANSPORT)) = "Transport Rate" score_names(abs(SCORE_N_1N)) = "(n,1n) Rate" score_names(abs(SCORE_ABSORPTION)) = "Absorption Rate" score_names(abs(SCORE_FISSION)) = "Fission Rate" diff --git a/src/tally.F90 b/src/tally.F90 index c4eaf30c8c..0c41b6f987 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -346,30 +346,6 @@ contains end if - case (SCORE_TRANSPORT) - ! Only analog estimators are available. - ! Skip any event where the particle didn't scatter - if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP - ! get material macros - macro_total = material_xs % total - macro_scatt = material_xs % total - material_xs % absorption - ! Score total rate - p1 scatter rate Note estimator needs to be - ! adjusted since tallying is only occuring when a scatter has - ! happened. Effectively this means multiplying the estimator by - ! total/scatter macro - score = (macro_total - p % mu * macro_scatt) * (ONE / macro_scatt) - - - case (SCORE_N_1N) - ! Only analog estimators are available. - ! Skip any event where the particle didn't scatter - if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP - ! Skip any events where weight of particle changed - if (p % wgt /= p % last_wgt) cycle SCORE_LOOP - ! All events that reach this point are (n,1n) reactions - score = p % last_wgt - - case (SCORE_ABSORPTION) if (t % estimator == ESTIMATOR_ANALOG) then if (survival_biasing) then @@ -1021,20 +997,6 @@ contains end if - case (SCORE_TRANSPORT) - ! Only analog estimators are available. - ! Skip any event where the particle didn't scatter - if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP - ! Score total rate - p1 scatter rate Note estimator needs to be - ! adjusted since tallying is only occuring when a scatter has - ! happened. Effectively this means multiplying the estimator by - ! total/scatter macro - score = (material_xs % total - p % mu * material_xs % elastic) - if (material_xs % elastic /= ZERO) then - score = score / material_xs % elastic - end if - - case (SCORE_ABSORPTION) if (t % estimator == ESTIMATOR_ANALOG) then if (survival_biasing) then diff --git a/tests/test_tallies/inputs_true.dat b/tests/test_tallies/inputs_true.dat index be789fc838..61d09f8ea6 100644 --- a/tests/test_tallies/inputs_true.dat +++ b/tests/test_tallies/inputs_true.dat @@ -1 +1 @@ -0597eff3fddbc45a09b5b324c9704e540b694b07c136f2040426fdcfe5ec544f036073e4afa34a5fb0fbd721a4c0a609b9b68bf17ce4ec78302023b46b71930c \ No newline at end of file +35e3e1a2c2ef7c707ea585e6cd697ea5e4ae8ec0ec070985dcfd1917a6a569cb7354bee7bbdd259ecdad7198823b4dad98b17452f9cba1122f22635e0aa0a046 \ No newline at end of file diff --git a/tests/test_tallies/results_true.dat b/tests/test_tallies/results_true.dat index fd5eb91a1a..904f62a770 100644 --- a/tests/test_tallies/results_true.dat +++ b/tests/test_tallies/results_true.dat @@ -1 +1 @@ -9f14aaa1694489032b3ce193ad29ecf6ac8976c88c2dd6b26d4c30ae88348e249a9b702b1d39c22204350b8f3bd689800c1b6a6003f19c7bdaf64084a209a2cc \ No newline at end of file +264bc2cb19f7d81dfb1c326ee044f89cd09549b3b6836f334bb06f63bf586058e9825788a90ca7b84c77fd53ee23871727fd0d2b0139cb008192c533be4b84e3 \ No newline at end of file diff --git a/tests/test_tallies/test_tallies.py b/tests/test_tallies/test_tallies.py index 52d4084fde..0b7fabef28 100644 --- a/tests/test_tallies/test_tallies.py +++ b/tests/test_tallies/test_tallies.py @@ -161,7 +161,7 @@ class TalliesTestHarness(PyAPITestHarness): total_tallies[3].estimator = 'collision' questionable_tally = Tally() - questionable_tally.scores = ['transport', 'n1n'] + questionable_tally.scores = ['n1n'] all_nuclide_tallies = [Tally(), Tally()] for t in all_nuclide_tallies: From 4f56453a168e0f2709ff929cea711130dd55ebe3 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Thu, 26 May 2016 18:43:49 -0400 Subject: [PATCH 575/650] Removed (n,1n) score from code, replaced with deprecation message --- src/constants.F90 | 27 +++++++++++++-------------- src/endf.F90 | 2 -- src/input_xml.F90 | 10 ++-------- src/output.F90 | 1 - tests/test_tallies/inputs_true.dat | 2 +- tests/test_tallies/results_true.dat | 2 +- tests/test_tallies/test_tallies.py | 4 ---- 7 files changed, 17 insertions(+), 31 deletions(-) diff --git a/src/constants.F90 b/src/constants.F90 index be13f47f2f..4354cc4234 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -279,7 +279,7 @@ module constants EVENT_ABSORB = 2 ! Tally score type - integer, parameter :: N_SCORE_TYPES = 21 + integer, parameter :: N_SCORE_TYPES = 20 integer, parameter :: & SCORE_FLUX = -1, & ! flux SCORE_TOTAL = -2, & ! total reaction rate @@ -289,19 +289,18 @@ module constants SCORE_SCATTER_PN = -6, & ! system for scoring 0th through nth moment SCORE_NU_SCATTER_N = -7, & ! arbitrary nu-scattering moment SCORE_NU_SCATTER_PN = -8, & ! system for scoring 0th through nth nu-scatter moment - SCORE_N_1N = -9, & ! (n,1n) rate - SCORE_ABSORPTION = -10, & ! absorption rate - SCORE_FISSION = -11, & ! fission rate - SCORE_NU_FISSION = -12, & ! neutron production rate - SCORE_KAPPA_FISSION = -13, & ! fission energy production rate - SCORE_CURRENT = -14, & ! partial current - SCORE_FLUX_YN = -15, & ! angular moment of flux - SCORE_TOTAL_YN = -16, & ! angular moment of total reaction rate - SCORE_SCATTER_YN = -17, & ! angular flux-weighted scattering moment (0:N) - SCORE_NU_SCATTER_YN = -18, & ! angular flux-weighted nu-scattering moment (0:N) - SCORE_EVENTS = -19, & ! number of events - SCORE_DELAYED_NU_FISSION = -20, & ! delayed neutron production rate - SCORE_INVERSE_VELOCITY = -21 ! flux-weighted inverse velocity + SCORE_ABSORPTION = -9, & ! absorption rate + SCORE_FISSION = -10, & ! fission rate + SCORE_NU_FISSION = -11, & ! neutron production rate + SCORE_KAPPA_FISSION = -12, & ! fission energy production rate + SCORE_CURRENT = -13, & ! partial current + SCORE_FLUX_YN = -14, & ! angular moment of flux + SCORE_TOTAL_YN = -15, & ! angular moment of total reaction rate + SCORE_SCATTER_YN = -16, & ! angular flux-weighted scattering moment (0:N) + SCORE_NU_SCATTER_YN = -17, & ! angular flux-weighted nu-scattering moment (0:N) + SCORE_EVENTS = -18, & ! number of events + SCORE_DELAYED_NU_FISSION = -19, & ! delayed neutron production rate + SCORE_INVERSE_VELOCITY = -20 ! flux-weighted inverse velocity ! Maximum scattering order supported integer, parameter :: MAX_ANG_ORDER = 10 diff --git a/src/endf.F90 b/src/endf.F90 index 9f14ea6b72..ad5e97a033 100644 --- a/src/endf.F90 +++ b/src/endf.F90 @@ -34,8 +34,6 @@ contains string = "nu-scatter-n" case (SCORE_NU_SCATTER_PN) string = "nu-scatter-pn" - case (SCORE_N_1N) - string = "n1n" case (SCORE_ABSORPTION) string = "absorption" case (SCORE_FISSION) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index eb8859bec5..e2add2027b 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -3497,14 +3497,8 @@ contains &please remove") case ('n1n') - if (run_CE) then - t % score_bins(j) = SCORE_N_1N - - ! Set tally estimator to analog - t % estimator = ESTIMATOR_ANALOG - else - call fatal_error("Cannot tally n1n rate in multi-group mode!") - end if + call fatal_error("n1n score no longer supported for tallies, & + &please remove") case ('n2n', '(n,2n)') t % score_bins(j) = N_2N diff --git a/src/output.F90 b/src/output.F90 index 76e3cfc024..768019f8da 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -777,7 +777,6 @@ contains score_names(abs(SCORE_TOTAL)) = "Total Reaction Rate" score_names(abs(SCORE_SCATTER)) = "Scattering Rate" score_names(abs(SCORE_NU_SCATTER)) = "Scattering Production Rate" - score_names(abs(SCORE_N_1N)) = "(n,1n) Rate" score_names(abs(SCORE_ABSORPTION)) = "Absorption Rate" score_names(abs(SCORE_FISSION)) = "Fission Rate" score_names(abs(SCORE_NU_FISSION)) = "Nu-Fission Rate" diff --git a/tests/test_tallies/inputs_true.dat b/tests/test_tallies/inputs_true.dat index 61d09f8ea6..e3d37be300 100644 --- a/tests/test_tallies/inputs_true.dat +++ b/tests/test_tallies/inputs_true.dat @@ -1 +1 @@ -35e3e1a2c2ef7c707ea585e6cd697ea5e4ae8ec0ec070985dcfd1917a6a569cb7354bee7bbdd259ecdad7198823b4dad98b17452f9cba1122f22635e0aa0a046 \ No newline at end of file +ea09926d8f5c6c96529bf5529f4deb3be78eda2da80adbbf3440147c337587358c2b1823bc72df9463676135573eb481dcd361b735f18365216645ee81092f1e \ No newline at end of file diff --git a/tests/test_tallies/results_true.dat b/tests/test_tallies/results_true.dat index 904f62a770..ff3a828454 100644 --- a/tests/test_tallies/results_true.dat +++ b/tests/test_tallies/results_true.dat @@ -1 +1 @@ -264bc2cb19f7d81dfb1c326ee044f89cd09549b3b6836f334bb06f63bf586058e9825788a90ca7b84c77fd53ee23871727fd0d2b0139cb008192c533be4b84e3 \ No newline at end of file +a0c7d6ca246ecd7dd5fed06373af142390971401c4e97744f29e55810ab9c231c97c4d8947cdf0b3d2df0ae829a9ddf768e5b2d889bbea34f2b6db0e567db884 \ No newline at end of file diff --git a/tests/test_tallies/test_tallies.py b/tests/test_tallies/test_tallies.py index 0b7fabef28..9e40d4185d 100644 --- a/tests/test_tallies/test_tallies.py +++ b/tests/test_tallies/test_tallies.py @@ -160,9 +160,6 @@ class TalliesTestHarness(PyAPITestHarness): total_tallies[2].estimator = 'analog' total_tallies[3].estimator = 'collision' - questionable_tally = Tally() - questionable_tally.scores = ['n1n'] - all_nuclide_tallies = [Tally(), Tally()] for t in all_nuclide_tallies: t.filters = [cell_filter] @@ -182,7 +179,6 @@ class TalliesTestHarness(PyAPITestHarness): self._input_set.tallies += flux_tallies self._input_set.tallies += (scatter_tally1, scatter_tally2) self._input_set.tallies += total_tallies - self._input_set.tallies.append(questionable_tally) self._input_set.tallies += all_nuclide_tallies self._input_set.export() From 07be6306ce92bef7de529e592d0440ad226bddd1 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 18 May 2016 16:37:11 -0500 Subject: [PATCH 576/650] Add Surface.evaluate() methods and Region.__contains__ methods --- openmc/region.py | 52 ++++++++++ openmc/surface.py | 246 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 298 insertions(+) diff --git a/openmc/region.py b/openmc/region.py index a2edbeedd6..95f59546c0 100644 --- a/openmc/region.py +++ b/openmc/region.py @@ -28,6 +28,10 @@ class Region(object): def __invert__(self): return Complement(self) + @abstractmethod + def __contains__(self, point): + return False + @abstractmethod def __str__(self): return '' @@ -229,6 +233,22 @@ class Intersection(Region): def __init__(self, *nodes): self.nodes = list(nodes) + def __contains__(self, point): + """Check whether a point is contained in the region. + + Parameters + ---------- + point : 3-tuple of float + Cartesian coordinates, :math:`(x',y',z')`, of the point + + Returns + ------- + bool + Whether the point is in the region + + """ + return all(point in n for n in self.nodes) + def __str__(self): return '(' + ' '.join(map(str, self.nodes)) + ')' @@ -281,6 +301,22 @@ class Union(Region): def __init__(self, *nodes): self.nodes = list(nodes) + def __contains__(self, point): + """Check whether a point is contained in the region. + + Parameters + ---------- + point : 3-tuple of float + Cartesian coordinates, :math:`(x',y',z')`, of the point + + Returns + ------- + bool + Whether the point is in the region + + """ + return any(point in n for n in self.nodes) + def __str__(self): return '(' + ' | '.join(map(str, self.nodes)) + ')' @@ -336,6 +372,22 @@ class Complement(Region): def __init__(self, node): self.node = node + def __contains__(self, point): + """Check whether a point is contained in the region. + + Parameters + ---------- + point : 3-tuple of float + Cartesian coordinates, :math:`(x',y',z')`, of the point + + Returns + ------- + bool + Whether the point is in the region + + """ + return point not in self.node + def __str__(self): return '~' + str(self.node) diff --git a/openmc/surface.py b/openmc/surface.py index 193780192c..76f0d82e7d 100644 --- a/openmc/surface.py +++ b/openmc/surface.py @@ -295,6 +295,25 @@ class Plane(Surface): self._periodic_surface = periodic_surface periodic_surface._periodic_surface = self + def evaluate(self, point): + """Evaluate the surface equation at a given point. + + Parameters + ---------- + point : 3-tuple of float + The Cartesian coordinates, :math:`(x',y',z')`, at which the surface + equation should be evaluated. + + Returns + ------- + float + :math:`Ax' + By' + Cz' - d` + + """ + + x, y, z = point + return self.a*x + self.b*y + self.c*z - self.d + def create_xml_subelement(self): element = super(Plane, self).create_xml_subelement() @@ -392,6 +411,23 @@ class XPlane(Plane): return (np.array([self.x0, -np.inf, -np.inf]), np.array([np.inf, np.inf, np.inf])) + def evaluate(self, point): + """Evaluate the surface equation at a given point. + + Parameters + ---------- + point : 3-tuple of float + The Cartesian coordinates, :math:`(x',y',z')`, at which the surface + equation should be evaluated. + + Returns + ------- + float + :math:`x' - x_0` + + """ + return point[0] - self.x0 + class YPlane(Plane): """A plane perpendicular to the y axis of the form :math:`y - y_0 = 0` @@ -481,6 +517,23 @@ class YPlane(Plane): return (np.array([-np.inf, self.y0, -np.inf]), np.array([np.inf, np.inf, np.inf])) + def evaluate(self, point): + """Evaluate the surface equation at a given point. + + Parameters + ---------- + point : 3-tuple of float + The Cartesian coordinates, :math:`(x',y',z')`, at which the surface + equation should be evaluated. + + Returns + ------- + float + :math:`y' - y_0` + + """ + return point[1] - self.y0 + class ZPlane(Plane): """A plane perpendicular to the z axis of the form :math:`z - z_0 = 0` @@ -570,6 +623,23 @@ class ZPlane(Plane): return (np.array([-np.inf, -np.inf, self.z0]), np.array([np.inf, np.inf, np.inf])) + def evaluate(self, point): + """Evaluate the surface equation at a given point. + + Parameters + ---------- + point : 3-tuple of float + The Cartesian coordinates, :math:`(x',y',z')`, at which the surface + equation should be evaluated. + + Returns + ------- + float + :math:`z' - z_0` + + """ + return point[2] - self.z0 + class Cylinder(Surface): """A cylinder whose length is parallel to the x-, y-, or z-axis. @@ -728,6 +798,25 @@ class XCylinder(Cylinder): return (np.array([-np.inf, -np.inf, -np.inf]), np.array([np.inf, np.inf, np.inf])) + def evaluate(self, point): + """Evaluate the surface equation at a given point. + + Parameters + ---------- + point : 3-tuple of float + The Cartesian coordinates, :math:`(x',y',z')`, at which the surface + equation should be evaluated. + + Returns + ------- + float + :math:`(y' - y_0)^2 + (z' - z_0)^2 - R^2` + + """ + y = point[1] - self.y0 + z = point[2] - self.z0 + return y**2 + z**2 - self.r**2 + class YCylinder(Cylinder): """An infinite cylinder whose length is parallel to the y-axis of the form @@ -831,6 +920,25 @@ class YCylinder(Cylinder): return (np.array([-np.inf, -np.inf, -np.inf]), np.array([np.inf, np.inf, np.inf])) + def evaluate(self, point): + """Evaluate the surface equation at a given point. + + Parameters + ---------- + point : 3-tuple of float + The Cartesian coordinates, :math:`(x',y',z')`, at which the surface + equation should be evaluated. + + Returns + ------- + float + :math:`(x' - x_0)^2 + (z' - z_0)^2 - R^2` + + """ + x = point[0] - self.x0 + z = point[2] - self.z0 + return x**2 + z**2 - self.r**2 + class ZCylinder(Cylinder): """An infinite cylinder whose length is parallel to the z-axis of the form @@ -934,6 +1042,25 @@ class ZCylinder(Cylinder): return (np.array([-np.inf, -np.inf, -np.inf]), np.array([np.inf, np.inf, np.inf])) + def evaluate(self, point): + """Evaluate the surface equation at a given point. + + Parameters + ---------- + point : 3-tuple of float + The Cartesian coordinates, :math:`(x',y',z')`, at which the surface + equation should be evaluated. + + Returns + ------- + float + :math:`(x' - x_0)^2 + (y' - y_0)^2 - R^2` + + """ + x = point[0] - self.x0 + y = point[1] - self.y0 + return x**2 + y**2 - self.r**2 + class Sphere(Surface): """A sphere of the form :math:`(x - x_0)^2 + (y - y_0)^2 + (z - z_0)^2 = R^2`. @@ -1062,6 +1189,26 @@ class Sphere(Surface): return (np.array([-np.inf, -np.inf, -np.inf]), np.array([np.inf, np.inf, np.inf])) + def evaluate(self, point): + """Evaluate the surface equation at a given point. + + Parameters + ---------- + point : 3-tuple of float + The Cartesian coordinates, :math:`(x',y',z')`, at which the surface + equation should be evaluated. + + Returns + ------- + float + :math:`(x' - x_0)^2 + (y' - y_0)^2 + (z' - z_0)^2 - R^2` + + """ + x = point[0] - self.x0 + y = point[1] - self.y0 + z = point[2] - self.z0 + return x**2 + y**2 + z**2 - self.r**2 + class Cone(Surface): """A conical surface parallel to the x-, y-, or z-axis. @@ -1214,6 +1361,26 @@ class XCone(Cone): self._type = 'x-cone' + def evaluate(self, point): + """Evaluate the surface equation at a given point. + + Parameters + ---------- + point : 3-tuple of float + The Cartesian coordinates, :math:`(x',y',z')`, at which the surface + equation should be evaluated. + + Returns + ------- + float + :math:`(y' - y_0)^2 + (z' - z_0)^2 - R^2(x' - x_0)^2` + + """ + x = point[0] - self.x0 + y = point[1] - self.y0 + z = point[2] - self.z0 + return y**2 + z**2 - self.r2*x**2 + class YCone(Cone): """A cone parallel to the y-axis of the form :math:`(x - x_0)^2 + (z - z_0)^2 = @@ -1270,6 +1437,26 @@ class YCone(Cone): self._type = 'y-cone' + def evaluate(self, point): + """Evaluate the surface equation at a given point. + + Parameters + ---------- + point : 3-tuple of float + The Cartesian coordinates, :math:`(x',y',z')`, at which the surface + equation should be evaluated. + + Returns + ------- + float + :math:`(x' - x_0)^2 + (z' - z_0)^2 - R^2(y' - y_0)^2` + + """ + x = point[0] - self.x0 + y = point[1] - self.y0 + z = point[2] - self.z0 + return x**2 + z**2 - self.r2*y**2 + class ZCone(Cone): """A cone parallel to the x-axis of the form :math:`(x - x_0)^2 + (y - y_0)^2 = @@ -1326,6 +1513,26 @@ class ZCone(Cone): self._type = 'z-cone' + def evaluate(self, point): + """Evaluate the surface equation at a given point. + + Parameters + ---------- + point : 3-tuple of float + The Cartesian coordinates, :math:`(x',y',z')`, at which the surface + equation should be evaluated. + + Returns + ------- + float + :math:`(x' - x_0)^2 + (y' - y_0)^2 - R^2(z' - z_0)^2` + + """ + x = point[0] - self.x0 + y = point[1] - self.y0 + z = point[2] - self.z0 + return x**2 + y**2 - self.r2*z**2 + class Quadric(Surface): """A surface of the form :math:`Ax^2 + By^2 + Cz^2 + Dxy + Eyz + Fxz + Gx + Hy + @@ -1471,6 +1678,27 @@ class Quadric(Surface): check_type('k coefficient', k, Real) self._coefficients['k'] = k + def evaluate(self, point): + """Evaluate the surface equation at a given point. + + Parameters + ---------- + point : 3-tuple of float + The Cartesian coordinates, :math:`(x',y',z')`, at which the surface + equation should be evaluated. + + Returns + ------- + float + :math:`Ax'^2 + By'^2 + Cz'^2 + Dx'y' + Ey'z' + Fx'z' + Gx' + Hy' + + Jz' + K = 0` + + """ + x, y, z = point + return x*(self.a*x + self.d*y + self.g) + \ + y*(self.b*y + self.e*z + self.h) + \ + z*(self.c*z + self.f*x + self.j) + self.k + class Halfspace(Region): """A positive or negative half-space region. @@ -1516,6 +1744,24 @@ class Halfspace(Region): def __invert__(self): return -self.surface if self.side == '+' else +self.surface + def __contains__(self, point): + """Check whether a point is contained in the half-space. + + Parameters + ---------- + point : 3-tuple of float + Cartesian coordinates, :math:`(x',y',z')`, of the point + + Returns + ------- + bool + Whether the point is in the half-space + + """ + + val = self.surface.evaluate(point) + return val >= 0. if self.side == '+' else val < 0. + @property def surface(self): return self._surface From e8d4dbd5f419ce52ff14355b9dbf59ef0a0e26b8 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 18 May 2016 16:39:35 -0500 Subject: [PATCH 577/650] Add Intersection.__iter__ and Union.__iter__ methods --- openmc/region.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/openmc/region.py b/openmc/region.py index 95f59546c0..9e10112710 100644 --- a/openmc/region.py +++ b/openmc/region.py @@ -223,7 +223,7 @@ class Intersection(Region): Attributes ---------- - nodes : tuple of openmc.Region + nodes : list of openmc.Region Regions to take the intersection of bounding_box : tuple of numpy.array Lower-left and upper-right coordinates of an axis-aligned bounding box @@ -233,6 +233,10 @@ class Intersection(Region): def __init__(self, *nodes): self.nodes = list(nodes) + def __iter__(self): + for n in self.nodes: + yield n + def __contains__(self, point): """Check whether a point is contained in the region. @@ -301,6 +305,10 @@ class Union(Region): def __init__(self, *nodes): self.nodes = list(nodes) + def __iter__(self): + for n in self.nodes: + yield n + def __contains__(self, point): """Check whether a point is contained in the region. From 168f1269fdcd1ee73cc88090431c6686ab085b09 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 19 May 2016 10:25:27 -0500 Subject: [PATCH 578/650] Add Cell.__contains__ and Cell.rotation_matrix --- openmc/cell.py | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/openmc/cell.py b/openmc/cell.py index 8ddae63716..8f8ebd9367 100644 --- a/openmc/cell.py +++ b/openmc/cell.py @@ -1,9 +1,12 @@ from collections import OrderedDict, Iterable +from math import cos, sin, pi from numbers import Real, Integral from xml.etree import ElementTree as ET import sys import warnings +import numpy as np + import openmc import openmc.checkvalue as cv from openmc.surface import Halfspace @@ -83,6 +86,7 @@ class Cell(object): self._type = None self._region = None self._rotation = None + self._rotation_matrix = None self._translation = None self._offsets = None self._distribcell_index = None @@ -92,6 +96,9 @@ class Cell(object): if region is not None: self.region = region + def __contains__(self, point): + return point in self.region + def __eq__(self, other): if not isinstance(other, Cell): return False @@ -124,6 +131,8 @@ class Cell(object): if isinstance(self._fill, openmc.Material): string += '{0: <16}{1}{2}\n'.format('\tMaterial', '=\t', self._fill._id) + elif isinstance(self._fill, basestring): + string += '{0: <16}=\tvoid\n'.format('\tMaterial') elif isinstance(self._fill, Iterable): string += '{0: <16}{1}'.format('\tMaterial', '=\t') string += '[' @@ -179,6 +188,10 @@ class Cell(object): def rotation(self): return self._rotation + @property + def rotation_matrix(self): + return self._rotation_matrix + @property def translation(self): return self._translation @@ -249,13 +262,23 @@ class Cell(object): cv.check_type('cell rotation', rotation, Iterable, Real) cv.check_length('cell rotation', rotation, 3) - self._rotation = rotation + self._rotation = np.asarray(rotation) + + # Save rotation matrix + phi, theta, psi = self.rotation*(-pi/180.) + c3, s3 = cos(phi), sin(phi) + c2, s2 = cos(theta), sin(theta) + c1, s1 = cos(psi), sin(psi) + self._rotation_matrix = np.array([ + [c1*c2, c1*s2*s3 - c3*s1, s1*s3 + c1*c3*s2], + [c2*s1, c1*c3 + s1*s2*s3, c3*s1*s2 - c1*s3], + [-s2, c2*s3, c2*c3]]) @translation.setter def translation(self, translation): cv.check_type('cell translation', translation, Iterable, Real) cv.check_length('cell translation', translation, 3) - self._translation = translation + self._translation = np.asarray(translation) @offsets.setter def offsets(self, offsets): From e40a369693e48d5f7b5a2e0d3edae5203f938e5a Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 19 May 2016 20:14:44 -0500 Subject: [PATCH 579/650] Add geometry plotting capability and restructure lattice attributes --- .../pythonapi/examples/mgxs-part-iii.ipynb | 13 +- .../pythonapi/examples/mgxs-part-iv.ipynb | 1 - .../examples/pandas-dataframes.ipynb | 11 +- examples/python/lattice/nested/build-xml.py | 2 - examples/python/lattice/simple/build-xml.py | 1 - openmc/cell.py | 5 +- openmc/geometry.py | 17 + openmc/lattice.py | 444 +++++++++++++++--- openmc/opencg_compatible.py | 9 +- openmc/summary.py | 13 +- openmc/universe.py | 105 +++++ tests/input_set.py | 4 - .../test_asymmetric_lattice.py | 1 - tests/test_distribmat/test_distribmat.py | 1 - 14 files changed, 527 insertions(+), 100 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index a386779450..5f0acde3f1 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -260,7 +260,6 @@ "source": [ "# Create fuel assembly Lattice\n", "assembly = openmc.RectLattice(name='1.6% Fuel Assembly')\n", - "assembly.dimension = (17, 17)\n", "assembly.pitch = (1.26, 1.26)\n", "assembly.lower_left = [-1.26 * 17. / 2.0] * 2" ] @@ -1597,21 +1596,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", - "language": "python2", - "name": "python2" + "display_name": "Python 3", + "language": "python", + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.5.1" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb index b330e7ace8..65b3f44dc3 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb @@ -244,7 +244,6 @@ "source": [ "# Create fuel assembly Lattice\n", "assembly = openmc.RectLattice(name='1.6% Fuel Assembly')\n", - "assembly.dimension = (17, 17)\n", "assembly.pitch = (1.26, 1.26)\n", "assembly.lower_left = [-1.26 * 17. / 2.0] * 2" ] diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index b88cf99498..2c222ad6e0 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -199,7 +199,6 @@ "source": [ "# Create fuel assembly Lattice\n", "assembly = openmc.RectLattice(name='1.6% Fuel - 0BA')\n", - "assembly.dimension = (17, 17)\n", "assembly.pitch = (1.26, 1.26)\n", "assembly.lower_left = [-1.26 * 17. / 2.0] * 2\n", "assembly.universes = [[pin_cell_universe] * 17] * 17" @@ -2194,21 +2193,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" + "pygments_lexer": "ipython3", + "version": "3.5.1" } }, "nbformat": 4, diff --git a/examples/python/lattice/nested/build-xml.py b/examples/python/lattice/nested/build-xml.py index b2d611d345..a964d882ca 100644 --- a/examples/python/lattice/nested/build-xml.py +++ b/examples/python/lattice/nested/build-xml.py @@ -98,14 +98,12 @@ univ4.add_cell(cell2) # Instantiate nested Lattices lattice1 = openmc.RectLattice(lattice_id=4, name='4x4 assembly') -lattice1.dimension = [2, 2] lattice1.lower_left = [-1., -1.] lattice1.pitch = [1., 1.] lattice1.universes = [[univ1, univ2], [univ2, univ3]] lattice2 = openmc.RectLattice(lattice_id=6, name='4x4 core') -lattice2.dimension = [2, 2] lattice2.lower_left = [-2., -2.] lattice2.pitch = [2., 2.] lattice2.universes = [[univ4, univ4], diff --git a/examples/python/lattice/simple/build-xml.py b/examples/python/lattice/simple/build-xml.py index 65c3554798..4961b96b8b 100644 --- a/examples/python/lattice/simple/build-xml.py +++ b/examples/python/lattice/simple/build-xml.py @@ -94,7 +94,6 @@ root.add_cell(cell1) # Instantiate a Lattice lattice = openmc.RectLattice(lattice_id=5) -lattice.dimension = [4, 4] lattice.lower_left = [-2., -2.] lattice.pitch = [1., 1.] lattice.universes = [[univ1, univ2, univ1, univ2], diff --git a/openmc/cell.py b/openmc/cell.py index 8f8ebd9367..29f85754af 100644 --- a/openmc/cell.py +++ b/openmc/cell.py @@ -97,7 +97,10 @@ class Cell(object): self.region = region def __contains__(self, point): - return point in self.region + if self.region is None: + return True + else: + return point in self.region def __eq__(self, other): if not isinstance(other, Cell): diff --git a/openmc/geometry.py b/openmc/geometry.py index ed437f6e19..7eddadfc76 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -62,6 +62,23 @@ class Geometry(object): tree.write("geometry.xml", xml_declaration=True, encoding='utf-8', method="xml") + def find(self, point): + """Find cells/universes/lattices which contain a given point + + Parameters + ---------- + point : 3-tuple of float + Cartesian coordinatesof the point + + Returns + ------- + list + Sequence of universes, cells, and lattices which are traversed to + find the given point + + """ + return self.root_universe.find(point) + def get_cell_instance(self, path): """Return the instance number for the final cell in a geometry path. diff --git a/openmc/lattice.py b/openmc/lattice.py index af6c14a6a9..d8deddc421 100644 --- a/openmc/lattice.py +++ b/openmc/lattice.py @@ -1,8 +1,12 @@ +from __future__ import division + import abc from collections import OrderedDict, Iterable +from math import sqrt, floor from numbers import Real, Integral from xml.etree import ElementTree as ET import sys +import warnings import numpy as np @@ -113,12 +117,6 @@ class Lattice(object): cv.check_type('outer universe', outer, openmc.Universe) self._outer = outer - @universes.setter - def universes(self, universes): - cv.check_iterable_type('lattice universes', universes, openmc.Universe, - min_depth=2, max_depth=3) - self._universes = np.asarray(universes) - def get_unique_universes(self): """Determine all unique universes in the lattice @@ -239,6 +237,11 @@ class Lattice(object): class RectLattice(Lattice): """A lattice consisting of rectangular prisms. + To completely define a rectangular lattice, the + :attr:`RectLattice.lower_left` :attr:`RectLattice.pitch`, + :attr:`RectLattice.outer`, and :attr:`RectLattice.universes` properties need + to be set. + Parameters ---------- lattice_id : int, optional @@ -253,12 +256,6 @@ class RectLattice(Lattice): Unique identifier for the lattice name : str Name of the lattice - dimension : Iterable of int - An array of two or three integers representing the number of lattice - cells in the x- and y- (and z-) directions, respectively. - lower_left : Iterable of float - The coordinates of the lower-left corner of the lattice. If the lattice - is two-dimensional, only the x- and y-coordinates are specified. pitch : Iterable of float Pitch of the lattice in the x, y, and (if applicable) z directions in cm. @@ -266,7 +263,25 @@ class RectLattice(Lattice): A universe to fill all space outside the lattice universes : Iterable of Iterable of openmc.Universe A two- or three-dimensional list/array of universes filling each element - of the lattice + of the lattice. The first dimension corresponds to the z-direction (if + applicable), the second dimension corresponds to the y-direction, and + the third dimension corresponds to the x-direction. Note that for the + y-direction, a higher index corresponds to a lower physical + y-value. Each z-slice in the array can be thought of as a top-down view + of the lattice. + lower_left : Iterable of float + The Cartesian coordinates of the lower-left corner of the lattice. If + the lattice is two-dimensional, only the x- and y-coordinates are + specified. + indices : list of tuple + A list of all possible (z,y,x) or (y,x) lattice element indices. These + indices correspond to indices in the :attr:`RectLattice.universes` + property. + ndim : int + The number of dimensions of the lattice + shape : Iterable of int + An array of two or three integers representing the number of lattice + cells in the x- and y- (and z-) directions, respectively. """ @@ -274,7 +289,6 @@ class RectLattice(Lattice): super(RectLattice, self).__init__(lattice_id, name) # Initialize Lattice class attributes - self._dimension = None self._lower_left = None self._offsets = None @@ -283,7 +297,7 @@ class RectLattice(Lattice): return False elif not super(RectLattice, self).__eq__(other): return False - elif self.dimension != other.dimension: + elif self.shape != other.shape: return False elif self.lower_left != other.lower_left: return False @@ -300,8 +314,8 @@ class RectLattice(Lattice): string = 'RectLattice\n' string += '{0: <16}{1}{2}\n'.format('\tID', '=\t', self._id) string += '{0: <16}{1}{2}\n'.format('\tName', '=\t', self._name) - string += '{0: <16}{1}{2}\n'.format('\tDimension', '=\t', - self._dimension) + string += '{0: <16}{1}{2}\n'.format('\tShape', '=\t', + self.shape) string += '{0: <16}{1}{2}\n'.format('\tLower Left', '=\t', self._lower_left) string += '{0: <16}{1}{2}\n'.format('\tPitch', '=\t', self._pitch) @@ -320,7 +334,7 @@ class RectLattice(Lattice): string += '{0} '.format(universe._id) # Add a newline character every time we reach end of row of cells - if (i+1) % self._dimension[-1] == 0: + if (i+1) % self.shape[0] == 0: string += '\n' string = string.rstrip('\n') @@ -333,7 +347,7 @@ class RectLattice(Lattice): string += '{0} '.format(offset) # Add a newline character when we reach end of row of cells - if (i+1) % self._dimension[-1] == 0: + if (i+1) % self.shape[0] == 0: string += '\n' string = string.rstrip('\n') @@ -341,24 +355,29 @@ class RectLattice(Lattice): return string @property - def dimension(self): - return self._dimension + def indices(self): + if self.ndim == 2: + return list(np.broadcast(*np.ogrid[ + :self.shape[1], :self.shape[0]])) + else: + return list(np.broadcast(*np.ogrid[ + :self.shape[2], :self.shape[1], :self.shape[0]])) @property def lower_left(self): return self._lower_left + @property + def ndim(self): + return len(self.pitch) + @property def offsets(self): return self._offsets - @dimension.setter - def dimension(self, dimension): - cv.check_type('lattice dimension', dimension, Iterable, Integral) - cv.check_length('lattice dimension', dimension, 2, 3) - for dim in dimension: - cv.check_greater_than('lattice dimension', dim, 0) - self._dimension = dimension + @property + def shape(self): + return self._universes.shape[::-1] @lower_left.setter def lower_left(self, lower_left): @@ -379,8 +398,13 @@ class RectLattice(Lattice): cv.check_greater_than('lattice pitch', dim, 0.0) self._pitch = pitch - def get_cell_instance(self, path, distribcell_index): + @Lattice.universes.setter + def universes(self, universes): + cv.check_iterable_type('lattice universes', universes, openmc.Universe, + min_depth=2, max_depth=3) + self._universes = np.asarray(universes) + def get_cell_instance(self, path, distribcell_index): # Extract the lattice element from the path next_index = path.index('-') lat_id_indices = path[:next_index] @@ -395,7 +419,7 @@ class RectLattice(Lattice): lat_z = int(i.split(',')[2]) - 1 # For 2D Lattices - if len(self._dimension) == 2: + if self.ndim == 2: offset = self._offsets[lat_z, lat_y, lat_x, distribcell_index-1] offset += self._universes[lat_x][lat_y].get_cell_instance(path, distribcell_index) @@ -408,6 +432,128 @@ class RectLattice(Lattice): return offset + def find_element(self, point): + """Determine index of lattice element and local coordinates for a point + + Parameters + ---------- + point : Iterable of float + Cartesian coordinates of point + + Returns + ------- + 2- or 3-tuple of int + A tuple of the corresponding (x,y,z) lattice element indices + 3-tuple of float + Carestian coordinates of the point in the corresponding lattice + element coordinate system + + """ + ix = floor((point[0] - self._lower_left[0])/self._pitch[0]) + iy = floor((point[1] - self._lower_left[1])/self._pitch[1]) + if self.ndim == 2: + idx = (ix, iy) + else: + iz = floor((point[2] - self._lower_left[2])/self._pitch[2]) + idx = (ix, iy, iz) + return idx, self.get_local_coordinates(point, idx) + + def get_local_coordinates(self, point, idx): + """Determine local coordinates of a point within a lattice element + + Parameters + ---------- + point : Iterable of float + Cartesian coordinates of point + idx : Iterable of int + (x,y,z) indices of lattice element. If the lattice is 2D, the z + index can be omitted. + + Returns + ------- + 3-tuple of float + Cartesian coordinates of point in the lattice element coordinate + system + + """ + x = point[0] - (self._lower_left[0] + (idx[0] + 0.5)*self._pitch[0]) + y = point[1] - (self._lower_left[1] + (idx[1] + 0.5)*self._pitch[1]) + if self.ndim == 2: + z = point[2] + else: + z = point[2] - (self._lower_left[2] + (idx[2] + 0.5)*self._pitch[2]) + return (x, y, z) + + def get_universe_index(self, idx): + """Return index in the universes array corresponding to a lattice element index + + Parameters + ---------- + idx : Iterable of int + Lattice element indices in the :math:`(x,y,z)` coordinate system + + Returns + ------- + 2- or 3-tuple of int + Indices used when setting the :attr:`RectLattice.universes` property + + """ + max_y = self.shape[1] - 1 + if self.ndim == 2: + x, y = idx + return (max_y - y, x) + else: + x, y, z = idx + return (z, max_y - y, x) + + def is_valid_index(self, idx): + """Determine whether lattice element index is within defined range + + Parameters + ---------- + idx : Iterable of int + Lattice element indices in the :math:`(x,y,z)` coordinate system + + Returns + ------- + bool + Whether index is valid + + """ + if self.ndim == 2: + return (0 <= idx[0] < self.shape[0] and + 0 <= idx[1] < self.shape[1]) + else: + return (0 <= idx[0] < self.shape[0] and + 0 <= idx[1] < self.shape[1] and + 0 <= idx[2] < self.shape[2]) + + def find(self, point): + """Find cells/universes/lattices which contain a given point + + Parameters + ---------- + point : 3-tuple of float + Cartesian coordinatesof the point + + Returns + ------- + list + Sequence of universes, cells, and lattices which are traversed to + find the given point + + """ + idx, p = self.find_element(point) + if self.is_valid_index(idx): + idx_u = self.get_universe_index(idx) + u = self.universes[idx_u] + else: + if self.outer is not None: + u = self.outer + else: + return [] + return [(self, idx)] + u.find(p) + def create_xml_subelement(self, xml_element): # Determine if XML element already contains subelement for this Lattice @@ -436,7 +582,7 @@ class RectLattice(Lattice): # Export Lattice cell dimensions dimension = ET.SubElement(lattice_subelement, "dimension") - dimension.text = ' '.join(map(str, self._dimension)) + dimension.text = ' '.join(map(str, self.shape)) # Export Lattice lower left lower_left = ET.SubElement(lattice_subelement, "lower_left") @@ -446,10 +592,10 @@ class RectLattice(Lattice): universe_ids = '\n' # 3D Lattices - if len(self._dimension) == 3: - for z in range(self._dimension[2]): - for y in range(self._dimension[1]): - for x in range(self._dimension[0]): + if self.ndim == 3: + for z in range(self.shape[2]): + for y in range(self.shape[1]): + for x in range(self.shape[0]): universe = self._universes[z][y][x] # Append Universe ID to the Lattice XML subelement @@ -466,8 +612,8 @@ class RectLattice(Lattice): # 2D Lattices else: - for y in range(self._dimension[1]): - for x in range(self._dimension[0]): + for y in range(self.shape[1]): + for x in range(self.shape[0]): universe = self._universes[y][x] # Append Universe ID to Lattice XML subelement @@ -492,6 +638,10 @@ class RectLattice(Lattice): class HexLattice(Lattice): """A lattice consisting of hexagonal prisms. + To completely define a hexagonal lattice, the :attr:`HexLattice.center`, + :attr:`HexLattice.pitch`, :attr:`HexLattice.universes`, and + :attr:`HexLattice.outer` properties need to be set. + Parameters ---------- lattice_id : int, optional @@ -506,26 +656,31 @@ class HexLattice(Lattice): Unique identifier for the lattice name : str Name of the lattice - num_rings : int - Number of radial ring positions in the xy-plane - num_axial : int - Number of positions along the z-axis. - center : Iterable of float - Coordinates of the center of the lattice. If the lattice does not have - axial sections then only the x- and y-coordinates are specified pitch : Iterable of float Pitch of the lattice in cm. The first item in the iterable specifies the pitch in the radial direction and, if the lattice is 3D, the second item in the iterable specifies the pitch in the axial direction. outer : openmc.Universe A universe to fill all space outside the lattice - universes : Iterable of Iterable of openmc.Universe + universes : Nested Iterable of openmc.Universe A two- or three-dimensional list/array of universes filling each element of the lattice. Each sub-list corresponds to one ring of universes and should be ordered from outermost ring to innermost ring. The universes within each sub-list are ordered from the "top" and proceed in a clockwise fashion. The :meth:`HexLattice.show_indices` method can be used to help figure out indices for this property. + center : Iterable of float + Coordinates of the center of the lattice. If the lattice does not have + axial sections then only the x- and y-coordinates are specified + indices : list of tuple + A list of all possible (z,r,i) or (r,i) lattice element indices that are + possible, where z is the axial index, r is in the ring index (starting + from the outermost ring), and i is the index with a ring starting from + the top and proceeding clockwise. + num_rings : int + Number of radial ring positions in the xy-plane + num_axial : int + Number of positions along the z-axis. """ @@ -597,17 +752,15 @@ class HexLattice(Lattice): def center(self): return self._center - @num_rings.setter - def num_rings(self, num_rings): - cv.check_type('number of rings', num_rings, Integral) - cv.check_greater_than('number of rings', num_rings, 0) - self._num_rings = num_rings - - @num_axial.setter - def num_axial(self, num_axial): - cv.check_type('number of axial', num_axial, Integral) - cv.check_greater_than('number of axial', num_axial, 0) - self._num_axial = num_axial + @property + def indices(self): + if self.num_axial is None: + return [(r, i) for r in range(self._num_rings) + for i in range(max(6*(self._num_rings - 1 - r), 1))] + else: + return [(z, r, i) for z in range(self._num_axial) + for r in range(self._num_rings) + for i in range(max(6*(self._num_rings - 1 - r), 1))] @center.setter def center(self, center): @@ -625,8 +778,9 @@ class HexLattice(Lattice): @Lattice.universes.setter def universes(self, universes): - # Call Lattice.universes parent class setter property - Lattice.universes.fset(self, universes) + cv.check_iterable_type('lattice universes', universes, openmc.Universe, + min_depth=2, max_depth=3) + self._universes = universes # NOTE: This routine assumes that the user creates a "ragged" list of # lists, where each sub-list corresponds to one ring of Universes. @@ -649,14 +803,14 @@ class HexLattice(Lattice): # Set the number of axial positions. if n_dims == 3: - self.num_axial = len(self._universes) + self._num_axial = len(self._universes) else: self._num_axial = None # Set the number of rings and make sure this number is consistent for # all axial positions. if n_dims == 3: - self.num_rings = len(self._universes[0]) + self._num_rings = len(self._universes[0]) for rings in self._universes: if len(rings) != self._num_rings: msg = 'HexLattice ID={0:d} has an inconsistent number of ' \ @@ -664,7 +818,7 @@ class HexLattice(Lattice): raise ValueError(msg) else: - self.num_rings = len(self._universes) + self._num_rings = len(self._universes) # Make sure there are the correct number of elements in each ring. if n_dims == 3: @@ -705,6 +859,170 @@ class HexLattice(Lattice): 6*(self._num_rings - 1 - r)) raise ValueError(msg) + def find_element(self, point): + """Determine index of lattice element and local coordinates for a point + + Parameters + ---------- + point : Iterable of float + Cartesian coordinates of point + + Returns + ------- + 3-tuple of int + Indices of corresponding lattice element in (x,:math:`alpha`,z) + bases + numpy.ndarray + Carestian coordinates of the point in the corresponding lattice + element coordinate system + + """ + # Convert coordinates to skewed bases + x = point[0] - self._center[0] + y = point[1] - self._center[1] + if self._num_axial is None: + iz = 1 + else: + z = point[2] - self._center[2] + iz = floor(z/self._pitch[1] + 0.5*self._num_axial) + alpha = y - x/sqrt(3.) + ix = floor(x/(sqrt(0.75) * self._pitch[0])) + ia = floor(alpha/self._pitch[0]) + + # Check four lattice elements to see which one is closest based on local + # coordinates + d_min = np.inf + for idx in [(ix, ia, iz), (ix + 1, ia, iz), (ix, ia + 1, iz), + (ix + 1, ia + 1, iz)]: + p = self.get_local_coordinates(point, idx) + d = p[0]**2 + p[1]**2 + if d < d_min: + d_min = d + idx_min = idx + p_min = p + + return idx_min, p_min + + def get_local_coordinates(self, point, idx): + """Determine local coordinates of a point within a lattice element + + Parameters + ---------- + point : Iterable of float + Cartesian coordinates of point + idx : Iterable of int + Indices of lattice element in (x,:math:`alpha`,z) bases + + Returns + ------- + 3-tuple of float + Cartesian coordinates of point in the lattice element coordinate + system + + """ + x = point[0] - (self._center[0] + sqrt(0.75)*self._pitch[0]*idx[0]) + y = point[1] - (self._center[1] + (0.5*idx[0] + idx[1])*self._pitch[0]) + if self._num_axial is None: + z = point[2] + else: + z = point[2] - (self._center[2] + (idx[2] + 0.5 - 0.5*self._num_axial)* + self._pitch[1]) + return (x, y, z) + + def get_universe_index(self, idx): + """Return index in the universes array corresponding to a lattice element index + + Parameters + ---------- + idx : Iterable of int + Lattice element indices in the :math:`(x,\alpha,z)` coordinate + system + + Returns + ------- + 2- or 3-tuple of int + Indices used when setting the :attr:`HexLattice.universes` property + + """ + + # First we determine which ring the index corresponds to. + x = idx[0] + a = idx[1] + z = -a - x + g = max(abs(x), abs(a), abs(z)) + + # Next we use a clever method to figure out where along the ring we are. + i_ring = self._num_rings - 1 - g + if x >= 0: + if a >= 0: + i_within = x + else: + i_within = 2*g + z + else: + if a <= 0: + i_within = 3*g - x + else: + i_within = 5*g - z + + if self.num_axial is None: + return (i_ring, i_within) + else: + return (idx[2], i_ring, i_within) + + def is_valid_index(self, idx): + """Determine whether lattice element index is within defined range + + Parameters + ---------- + idx : Iterable of int + Lattice element indices in the :math:`(x,\alpha,z)` coordinate + system + + Returns + ------- + bool + Whether index is valid + + """ + x = idx[0] + y = idx[1] + z = 0 - y - x + g = max(abs(x), abs(y), abs(z)) + if self.num_axial is None: + return g < self.num_rings + else: + return g < self.num_rings and 0 <= idx[2] < self.num_axial + + def find(self, point): + """Find cells/universes/lattices which contain a given point + + Parameters + ---------- + point : 3-tuple of float + Cartesian coordinatesof the point + + Returns + ------- + list + Sequence of universes, cells, and lattices which are traversed to + find the given point + + """ + idx, p = self.find_element(point) + if self.is_valid_index(idx): + idx_u = self.get_universe_index(idx) + if self.num_axial is None: + u = self.universes[idx_u[0]][idx_u[1]] + else: + u = self.universes[idx_u[0]][idx_u[1]][idx_u[2]] + else: + if self.outer is not None: + u = self.outer + else: + return [] + + return [(self, idx)] + u.find(p) + def create_xml_subelement(self, xml_element): # Determine if XML element already contains subelement for this Lattice path = './hex_lattice[@id=\'{0}\']'.format(self._id) @@ -736,8 +1054,8 @@ class HexLattice(Lattice): lattice_subelement.set("n_axial", str(self._num_axial)) # Export Lattice cell center - dimension = ET.SubElement(lattice_subelement, "center") - dimension.text = ' '.join(map(str, self._center)) + center = ET.SubElement(lattice_subelement, "center") + center.text = ' '.join(map(str, self._center)) # Export the Lattice nested Universe IDs. diff --git a/openmc/opencg_compatible.py b/openmc/opencg_compatible.py index 562fe9cadf..c6b364d7cb 100644 --- a/openmc/opencg_compatible.py +++ b/openmc/opencg_compatible.py @@ -861,8 +861,8 @@ def get_opencg_lattice(openmc_lattice): universes = new_universes # Initialize an empty array for the OpenCG nested Universes in this Lattice - universe_array = np.ndarray(tuple(np.array(dimension)[::-1]), - dtype=opencg.Universe) + universe_array = np.empty(tuple(np.array(dimension)[::-1]), + dtype=opencg.Universe) # Create OpenCG Universes for each unique nested Universe in this Lattice unique_universes = openmc_lattice.get_unique_universes() @@ -929,8 +929,8 @@ def get_openmc_lattice(opencg_lattice): outer = opencg_lattice.outside # Initialize an empty array for the OpenMC nested Universes in this Lattice - universe_array = np.ndarray(tuple(np.array(dimension)[::-1]), - dtype=openmc.Universe) + universe_array = np.empty(tuple(np.array(dimension)[::-1]), + dtype=openmc.Universe) # Create OpenMC Universes for each unique nested Universe in this Lattice unique_universes = opencg_lattice.get_unique_universes() @@ -953,7 +953,6 @@ def get_openmc_lattice(opencg_lattice): np.array(dimension, dtype=np.float64))) / -2.0 openmc_lattice = openmc.RectLattice(lattice_id=lattice_id) - openmc_lattice.dimension = dimension openmc_lattice.pitch = width openmc_lattice.universes = universe_array openmc_lattice.lower_left = lower_left diff --git a/openmc/summary.py b/openmc/summary.py index 6fb6b70009..c3277809a0 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -358,7 +358,6 @@ class Summary(object): # Create the Lattice lattice = openmc.RectLattice(lattice_id=lattice_id, name=name) - lattice.dimension = tuple(dimension) lattice.lower_left = lower_left lattice.pitch = pitch @@ -368,7 +367,7 @@ class Summary(object): # Build array of Universe pointers for the Lattice universes = \ - np.ndarray(tuple(universe_ids.shape), dtype=openmc.Universe) + np.empty(tuple(universe_ids.shape), dtype=openmc.Universe) for z in range(universe_ids.shape[0]): for y in range(universe_ids.shape[1]): @@ -403,8 +402,6 @@ class Summary(object): # Create the Lattice lattice = openmc.HexLattice(lattice_id=lattice_id, name=name) - lattice.num_rings = n_rings - lattice.num_axial = n_axial lattice.center = center lattice.pitch = pitch @@ -417,12 +414,12 @@ class Summary(object): # (x, alpha, z) to the Python API's format of a ragged nested # list of (z, ring, theta). universes = [] - for z in range(lattice.num_axial): + for z in range(n_axial): # Add a list for this axial level. universes.append([]) - x = lattice.num_rings - 1 - a = 2*lattice.num_rings - 2 - for r in range(lattice.num_rings - 1, 0, -1): + x = n_rings - 1 + a = 2*n_rings - 2 + for r in range(n_rings - 1, 0, -1): # Add a list for this ring. universes[-1].append([]) diff --git a/openmc/universe.py b/openmc/universe.py index 770e789da7..d8e1c4daca 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -1,6 +1,7 @@ from collections import OrderedDict, Iterable from numbers import Integral from xml.etree import ElementTree as ET +import random import sys import warnings @@ -124,6 +125,110 @@ class Universe(object): else: self._name = '' + def find(self, point): + """Find cells/universes/lattices which contain a given point + + Parameters + ---------- + point : 3-tuple of float + Cartesian coordinatesof the point + + Returns + ------- + list + Sequence of universes, cells, and lattices which are traversed to + find the given point + + """ + p = np.asarray(point) + for cell in self._cells.values(): + if p in cell: + if cell._type in ('normal', 'void'): + return [self, cell] + elif cell._type == 'fill': + if cell.translation is not None: + p -= cell.translation + if cell.rotation is not None: + p[:] = cell.rotation_matrix.dot(p) + return [self, cell] + cell.fill.find(p) + else: + return [self, cell] + cell.fill.find(p) + return [] + + def plot(self, center=(0., 0., 0.), width=(1., 1.), pixels=(200, 200), + basis='xy', color_by='cell'): + """Display a slice plot of the universe. + + Parameters + ---------- + center : Iterable of float + Coordinates at the center of the plot + width : Iterable of float + Width of the plot in each basis direction + pixels : Iterable of int + Number of pixels to use in each basis direction + basis : {'xy', 'xz', 'yz'} + The basis directions for the plot + color_by : {'cell', 'material'} + Indicate whether the plot should be colored by cell or by material + + """ + import matplotlib.pyplot as plt + + if basis == 'xy': + x_min = center[0] - 0.5*width[0] + x_max = center[0] + 0.5*width[0] + y_min = center[1] - 0.5*width[1] + y_max = center[1] + 0.5*width[1] + elif basis == 'yz': + # The x-axis will correspond to physical y and the y-axis will correspond to physical z + x_min = center[1] - 0.5*width[0] + x_max = center[1] + 0.5*width[0] + y_min = center[2] - 0.5*width[1] + y_max = center[2] + 0.5*width[1] + elif basis == 'xz': + # The y-axis will correspond to physical z + x_min = center[0] - 0.5*width[0] + x_max = center[0] + 0.5*width[0] + y_min = center[2] - 0.5*width[1] + y_max = center[2] + 0.5*width[1] + + # Determine locations to determine cells at + x_coords = np.linspace(x_min, x_max, pixels[0], endpoint=False) + \ + 0.5*(x_max - x_min)/pixels[0] + y_coords = np.linspace(y_max, y_min, pixels[1], endpoint=False) - \ + 0.5*(y_max - y_min)/pixels[1] + + colors = {} + img = np.zeros(pixels + (4,)) # Use RGBA form + for i, x in enumerate(x_coords): + for j, y in enumerate(y_coords): + if basis == 'xy': + path = self.find((x, y, center[2])) + elif basis == 'yz': + path = self.find((center[0], x, y)) + elif basis == 'xz': + path = self.find((x, center[1], y)) + + if len(path) > 0: + try: + if color_by == 'cell': + uid = path[-1].id + elif color_by == 'material': + if path[-1].fill_type == 'material': + uid = path[-1].fill.id + else: + continue + except AttributeError: + continue + if uid not in colors: + colors[uid] = (random.random(), random.random(), + random.random(), 1.0) + img[j,i,:] = colors[uid] + + plt.imshow(img, extent=(x_min, x_max, y_min, y_max)) + plt.show() + def add_cell(self, cell): """Add a cell to the universe. diff --git a/tests/input_set.py b/tests/input_set.py index 2c6841e254..fefd2ca5fa 100644 --- a/tests/input_set.py +++ b/tests/input_set.py @@ -350,7 +350,6 @@ class InputSet(object): # Define fuel lattices. l100 = openmc.RectLattice(name='Fuel assembly (lower half)', lattice_id=100) - l100.dimension = (17, 17) l100.lower_left = (-10.71, -10.71) l100.pitch = (1.26, 1.26) l100.universes = [ @@ -384,7 +383,6 @@ class InputSet(object): l101 = openmc.RectLattice(name='Fuel assembly (upper half)', lattice_id=101) - l101.dimension = (17, 17) l101.lower_left = (-10.71, -10.71) l101.pitch = (1.26, 1.26) l101.universes = [ @@ -444,7 +442,6 @@ class InputSet(object): # Define core lattices l200 = openmc.RectLattice(name='Core lattice (lower half)', lattice_id=200) - l200.dimension = (21, 21) l200.lower_left = (-224.91, -224.91) l200.pitch = (21.42, 21.42) l200.universes = [ @@ -472,7 +469,6 @@ class InputSet(object): l201 = openmc.RectLattice(name='Core lattice (lower half)', lattice_id=201) - l201.dimension = (21, 21) l201.lower_left = (-224.91, -224.91) l201.pitch = (21.42, 21.42) l201.universes = [ diff --git a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py index 504cc4746b..40def1f623 100644 --- a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py +++ b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py @@ -24,7 +24,6 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): # Construct a 3x3 lattice of fuel assemblies core_lat = openmc.RectLattice(name='3x3 Core Lattice', lattice_id=202) - core_lat.dimension = (3, 3) core_lat.lower_left = (-32.13, -32.13) core_lat.pitch = (21.42, 21.42) core_lat.universes = [[fuel, water, water], diff --git a/tests/test_distribmat/test_distribmat.py b/tests/test_distribmat/test_distribmat.py index d8f78c5cf1..6700a96b60 100644 --- a/tests/test_distribmat/test_distribmat.py +++ b/tests/test_distribmat/test_distribmat.py @@ -53,7 +53,6 @@ class DistribmatTestHarness(PyAPITestHarness): fuel_univ.add_cells((c11, c12)) lat = openmc.RectLattice(lattice_id=101) - lat.dimension = [2, 2] lat.lower_left = [-2.0, -2.0] lat.pitch = [2.0, 2.0] lat.universes = [[fuel_univ]*2]*2 From 1f294c614e874ca92177aae8e8cd5f3de96834db Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 25 May 2016 09:57:42 -0500 Subject: [PATCH 580/650] Remove use of Cell.add_surface in OpenCG compatibility module --- openmc/opencg_compatible.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/openmc/opencg_compatible.py b/openmc/opencg_compatible.py index c6b364d7cb..b112ed327f 100644 --- a/openmc/opencg_compatible.py +++ b/openmc/opencg_compatible.py @@ -1,4 +1,5 @@ import copy +import operator import numpy as np @@ -9,8 +10,6 @@ except ImportError: raise ImportError(msg) import openmc -from openmc.region import Intersection -from openmc.surface import Halfspace import openmc.checkvalue as cv @@ -467,13 +466,13 @@ def get_opencg_cell(openmc_cell): # half-spaces, i.e., no complex cells. region = openmc_cell.region if region is not None: - if isinstance(region, Halfspace): + if isinstance(region, openmc.Halfspace): surface = region.surface halfspace = -1 if region.side == '-' else 1 opencg_cell.add_surface(get_opencg_surface(surface), halfspace) - elif isinstance(region, Intersection): + elif isinstance(region, openmc.Intersection): for node in region.nodes: - if not isinstance(node, Halfspace): + if not isinstance(node, openmc.Halfspace): raise NotImplementedError("Complex cells not yet " "supported in OpenCG.") surface = node.surface @@ -697,12 +696,13 @@ def get_openmc_cell(opencg_cell): translation = np.asarray(opencg_cell.translation, dtype=np.float64) openmc_cell.translation = translation - surfaces = opencg_cell.surfaces - - for surface_id in surfaces: - surface = surfaces[surface_id][0] - halfspace = surfaces[surface_id][1] - openmc_cell.add_surface(get_openmc_surface(surface), halfspace) + surfaces = [] + operators = [] + for surface, halfspace in opencg_cell.surfaces.values(): + surfaces.append(get_openmc_surface(surface)) + operators.append(operator.neg if halfspace == -1 else operator.pos) + openmc_cell.region = openmc.Intersection( + *[op(s) for op, s in zip(operators, surfaces)]) # Add the OpenMC Cell to the global collection of all OpenMC Cells OPENMC_CELLS[cell_id] = openmc_cell From eb3f888c899b905429963edfc6fdbd5a75e1e071 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 25 May 2016 10:02:27 -0500 Subject: [PATCH 581/650] Allow root_universe to be passed to Geometry constructor --- examples/python/basic/build-xml.py | 3 +-- examples/python/boxes/build-xml.py | 3 +-- examples/python/lattice/hexagonal/build-xml.py | 3 +-- examples/python/lattice/nested/build-xml.py | 3 +-- examples/python/lattice/simple/build-xml.py | 3 +-- examples/python/pincell/build-xml.py | 3 +-- examples/python/pincell_multigroup/build-xml.py | 3 +-- examples/python/reflective/build-xml.py | 3 +-- openmc/geometry.py | 9 ++++++++- 9 files changed, 16 insertions(+), 17 deletions(-) diff --git a/examples/python/basic/build-xml.py b/examples/python/basic/build-xml.py index ffff037205..81aecc9f99 100644 --- a/examples/python/basic/build-xml.py +++ b/examples/python/basic/build-xml.py @@ -74,8 +74,7 @@ universe1.add_cells([cell2, cell3]) root.add_cells([cell1, cell4]) # Instantiate a Geometry, register the root Universe, and export to XML -geometry = openmc.Geometry() -geometry.root_universe = root +geometry = openmc.Geometry(root) geometry.export_to_xml() diff --git a/examples/python/boxes/build-xml.py b/examples/python/boxes/build-xml.py index 814f60bebd..4be33dcf1f 100644 --- a/examples/python/boxes/build-xml.py +++ b/examples/python/boxes/build-xml.py @@ -97,8 +97,7 @@ root = openmc.Universe(universe_id=0, name='root universe') root.add_cells([inner_box, middle_box, outer_box]) # Instantiate a Geometry, register the root Universe, and export to XML -geometry = openmc.Geometry() -geometry.root_universe = root +geometry = openmc.Geometry(root) geometry.export_to_xml() diff --git a/examples/python/lattice/hexagonal/build-xml.py b/examples/python/lattice/hexagonal/build-xml.py index ef3a128474..05cb2cb010 100644 --- a/examples/python/lattice/hexagonal/build-xml.py +++ b/examples/python/lattice/hexagonal/build-xml.py @@ -105,8 +105,7 @@ lattice.outer = univ2 cell1.fill = lattice # Instantiate a Geometry, register the root Universe, and export to XML -geometry = openmc.Geometry() -geometry.root_universe = root +geometry = openmc.Geometry(root) geometry.export_to_xml() diff --git a/examples/python/lattice/nested/build-xml.py b/examples/python/lattice/nested/build-xml.py index a964d882ca..03cede9dc5 100644 --- a/examples/python/lattice/nested/build-xml.py +++ b/examples/python/lattice/nested/build-xml.py @@ -114,8 +114,7 @@ cell1.fill = lattice2 cell2.fill = lattice1 # Instantiate a Geometry, register the root Universe, and export to XML -geometry = openmc.Geometry() -geometry.root_universe = root +geometry = openmc.Geometry(root) geometry.export_to_xml() diff --git a/examples/python/lattice/simple/build-xml.py b/examples/python/lattice/simple/build-xml.py index 4961b96b8b..5a642d3086 100644 --- a/examples/python/lattice/simple/build-xml.py +++ b/examples/python/lattice/simple/build-xml.py @@ -105,8 +105,7 @@ lattice.universes = [[univ1, univ2, univ1, univ2], cell1.fill = lattice # Instantiate a Geometry, register the root Universe, and export to XML -geometry = openmc.Geometry() -geometry.root_universe = root +geometry = openmc.Geometry(root) geometry.export_to_xml() diff --git a/examples/python/pincell/build-xml.py b/examples/python/pincell/build-xml.py index a3be3e97ec..0afb2527f6 100644 --- a/examples/python/pincell/build-xml.py +++ b/examples/python/pincell/build-xml.py @@ -149,8 +149,7 @@ root = openmc.Universe(universe_id=0, name='root universe') root.add_cells([fuel, gap, clad, water]) # Instantiate a Geometry, register the root Universe, and export to XML -geometry = openmc.Geometry() -geometry.root_universe = root +geometry = openmc.Geometry(root) geometry.export_to_xml() diff --git a/examples/python/pincell_multigroup/build-xml.py b/examples/python/pincell_multigroup/build-xml.py index 5ac5b376a3..6dbfa336bb 100644 --- a/examples/python/pincell_multigroup/build-xml.py +++ b/examples/python/pincell_multigroup/build-xml.py @@ -119,8 +119,7 @@ root = openmc.Universe(universe_id=0, name='root universe') root.add_cells([fuel, moderator]) # Instantiate a Geometry, register the root Universe, and export to XML -geometry = openmc.Geometry() -geometry.root_universe = root +geometry = openmc.Geometry(root) geometry.export_to_xml() diff --git a/examples/python/reflective/build-xml.py b/examples/python/reflective/build-xml.py index 4ecd0351fc..949e57c8c7 100644 --- a/examples/python/reflective/build-xml.py +++ b/examples/python/reflective/build-xml.py @@ -64,8 +64,7 @@ root = openmc.Universe(universe_id=0, name='root universe') root.add_cell(cell) # Instantiate a Geometry, register the root Universe, and export to XML -geometry = openmc.Geometry() -geometry.root_universe = root +geometry = openmc.Geometry(root) geometry.export_to_xml() diff --git a/openmc/geometry.py b/openmc/geometry.py index 7eddadfc76..4e85929fc4 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -15,6 +15,11 @@ def reset_auto_ids(): class Geometry(object): """Geometry representing a collection of surfaces, cells, and universes. + Parameters + ---------- + root_universe : openmc.Universe, optional + Root universe which contains all others + Attributes ---------- root_universe : openmc.Universe @@ -22,9 +27,11 @@ class Geometry(object): """ - def __init__(self): + def __init__(self, root_universe=None): self._root_universe = None self._offsets = {} + if root_universe is not None: + self.root_universe = root_universe @property def root_universe(self): From 68809265872d1b068d52be995b9e9471d8779a50 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sat, 28 May 2016 21:19:34 -0400 Subject: [PATCH 582/650] Added optional boolean exact parameter to StatePoint.get_tally(...) --- openmc/mgxs/mgxs.py | 10 +++++----- openmc/statepoint.py | 24 ++++++++++++++++++++---- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 5be84bb2ce..7c07ae722e 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -685,11 +685,11 @@ class MGXS(object): # Find, slice and store Tallies from StatePoint # The tally slicing is needed if tally merging was used for tally_type, tally in self.tallies.items(): - sp_tally = statepoint.get_tally(tally.scores, tally.filters, - tally.nuclides, - estimator=tally.estimator) - sp_tally = sp_tally.get_slice(tally.scores, filters, - filter_bins, tally.nuclides) + sp_tally = statepoint.get_tally( + tally.scores, tally.filters, tally.nuclides, + estimator=tally.estimator, exact=True) + sp_tally = sp_tally.get_slice( + tally.scores, filters, filter_bins, tally.nuclides) sp_tally.sparse = self.sparse self.tallies[tally_type] = sp_tally diff --git a/openmc/statepoint.py b/openmc/statepoint.py index d5dd7bc1e7..83dd148fe7 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -497,13 +497,17 @@ class StatePoint(object): self.tallies[tally_id].sparse = self.sparse def get_tally(self, scores=[], filters=[], nuclides=[], - name=None, id=None, estimator=None): + name=None, id=None, estimator=None, exact=False): """Finds and returns a Tally object with certain properties. This routine searches the list of Tallies and returns the first Tally found which satisfies all of the input parameters. - NOTE: The input parameters do not need to match the complete Tally - specification and may only represent a subset of the Tally's properties. + + NOTE: If the "exact" parameter is False (default), the input parameters + do not need to match the complete Tally specification and may only + represent a subset of the Tally's properties. If the "exact" parameter + is True then the scores, filters, nuclides and estimator parameters + must precisely match those of any matching Tally. Parameters ---------- @@ -519,6 +523,9 @@ class StatePoint(object): The id specified for the Tally (default is None). estimator: str, optional The type of estimator ('tracklength', 'analog'; default is None). + exact : bool + Whether to strictly enforce the match between the parameters and + the returned tally Returns ------- @@ -547,9 +554,18 @@ class StatePoint(object): continue # Determine if Tally has queried estimator - if estimator and not estimator == test_tally.estimator: + if (estimator or exact) and estimator != test_tally.estimator: continue + # The number of filters, nuclides and scores must exactly match + if exact: + if len(scores) != test_tally.num_scores: + continue + if len(nuclides) != test_tally.num_nuclides: + continue + if len(filters) != test_tally.num_filters: + continue + # Determine if Tally has the queried score(s) if scores: contains_scores = True From 160d35a548287d50abc7c02a6fe203de19d7d4fe Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 29 May 2016 09:59:42 -0400 Subject: [PATCH 583/650] Adding all MGXS classes to test_mgxs_libary_*nuclides. The current other test_mgxs_library_* tests dont require it since the scores in place now exercise their respective routines on the base classes, so no reason to add to the total data generation and test time. Also clarified the results_true files for all test_mgxs_library tests which needed it by adding an endline after the dataframe string. --- .../results_true.dat | 143 ++-- .../test_mgxs_library_condense.py | 2 +- .../results_true.dat | 11 +- .../test_mgxs_library_distribcell.py | 2 +- .../inputs_true.dat | 2 +- .../results_true.dat | 755 ++++++++++++++++-- .../test_mgxs_library_no_nuclides.py | 10 +- .../inputs_true.dat | 2 +- .../results_true.dat | 2 +- .../test_mgxs_library_nuclides.py | 10 +- 10 files changed, 828 insertions(+), 111 deletions(-) diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index 184be68bfa..190d652d85 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -1,85 +1,132 @@ material group in nuclide mean std. dev. -0 1 1 total 0.412084 0.02359 material group in nuclide mean std. dev. -0 1 1 total 0.076425 0.003691 material group in group out nuclide moment mean std. dev. +0 1 1 total 0.412084 0.02359 + material group in nuclide mean std. dev. +0 1 1 total 0.076425 0.003691 + material group in group out nuclide moment mean std. dev. 0 1 1 1 total P0 0.384780 0.022253 1 1 1 1 total P1 0.039277 0.004308 2 1 1 1 total P2 0.017574 0.002402 -3 1 1 1 total P3 0.012203 0.002164 material group out nuclide mean std. dev. -0 1 1 total 1.0 0.055333 material group in nuclide mean std. dev. -0 2 1 total 0.241262 0.00841 material group in nuclide mean std. dev. -0 2 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +3 1 1 1 total P3 0.012203 0.002164 + material group out nuclide mean std. dev. +0 1 1 total 1.0 0.055333 + material group in nuclide mean std. dev. +0 2 1 total 0.241262 0.00841 + material group in nuclide mean std. dev. +0 2 1 total 0.0 0.0 + material group in group out nuclide moment mean std. dev. 0 2 1 1 total P0 0.272369 0.006872 1 2 1 1 total P1 0.031107 0.005483 2 2 1 1 total P2 0.025999 0.006151 -3 2 1 1 total P3 0.003219 0.003312 material group out nuclide mean std. dev. -0 2 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 3 1 total 0.400028 0.034667 material group in nuclide mean std. dev. -0 3 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +3 2 1 1 total P3 0.003219 0.003312 + material group out nuclide mean std. dev. +0 2 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 3 1 total 0.400028 0.034667 + material group in nuclide mean std. dev. +0 3 1 total 0.0 0.0 + material group in group out nuclide moment mean std. dev. 0 3 1 1 total P0 0.794999 0.036548 1 3 1 1 total P1 0.401537 0.016175 2 3 1 1 total P2 0.143623 0.008719 -3 3 1 1 total P3 0.001991 0.004433 material group out nuclide mean std. dev. -0 3 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 4 1 total 0.377402 0.072937 material group in nuclide mean std. dev. -0 4 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +3 3 1 1 total P3 0.001991 0.004433 + material group out nuclide mean std. dev. +0 3 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 4 1 total 0.377402 0.072937 + material group in nuclide mean std. dev. +0 4 1 total 0.0 0.0 + material group in group out nuclide moment mean std. dev. 0 4 1 1 total P0 0.727311 0.080096 1 4 1 1 total P1 0.355839 0.037901 2 4 1 1 total P2 0.124483 0.015823 -3 4 1 1 total P3 0.012168 0.006224 material group out nuclide mean std. dev. -0 4 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 5 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +3 4 1 1 total P3 0.012168 0.006224 + material group out nuclide mean std. dev. +0 4 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 5 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 5 1 total 0.0 0.0 + material group in group out nuclide moment mean std. dev. 0 5 1 1 total P0 0.0 0.0 1 5 1 1 total P1 0.0 0.0 2 5 1 1 total P2 0.0 0.0 -3 5 1 1 total P3 0.0 0.0 material group out nuclide mean std. dev. -0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 6 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +3 5 1 1 total P3 0.0 0.0 + material group out nuclide mean std. dev. +0 5 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 6 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 6 1 total 0.0 0.0 + material group in group out nuclide moment mean std. dev. 0 6 1 1 total P0 0.0 0.0 1 6 1 1 total P1 0.0 0.0 2 6 1 1 total P2 0.0 0.0 -3 6 1 1 total P3 0.0 0.0 material group out nuclide mean std. dev. -0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 7 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +3 6 1 1 total P3 0.0 0.0 + material group out nuclide mean std. dev. +0 6 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 7 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 7 1 total 0.0 0.0 + material group in group out nuclide moment mean std. dev. 0 7 1 1 total P0 0.0 0.0 1 7 1 1 total P1 0.0 0.0 2 7 1 1 total P2 0.0 0.0 -3 7 1 1 total P3 0.0 0.0 material group out nuclide mean std. dev. -0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 8 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +3 7 1 1 total P3 0.0 0.0 + material group out nuclide mean std. dev. +0 7 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 8 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 8 1 total 0.0 0.0 + material group in group out nuclide moment mean std. dev. 0 8 1 1 total P0 0.0 0.0 1 8 1 1 total P1 0.0 0.0 2 8 1 1 total P2 0.0 0.0 -3 8 1 1 total P3 0.0 0.0 material group out nuclide mean std. dev. -0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 9 1 total 0.600536 0.748875 material group in nuclide mean std. dev. -0 9 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +3 8 1 1 total P3 0.0 0.0 + material group out nuclide mean std. dev. +0 8 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 9 1 total 0.600536 0.748875 + material group in nuclide mean std. dev. +0 9 1 total 0.0 0.0 + material group in group out nuclide moment mean std. dev. 0 9 1 1 total P0 0.720380 0.771015 1 9 1 1 total P1 0.119844 0.184691 2 9 1 1 total P2 0.038522 0.064485 -3 9 1 1 total P3 0.056023 0.050595 material group out nuclide mean std. dev. -0 9 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 10 1 total 0.235515 0.613974 material group in nuclide mean std. dev. -0 10 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +3 9 1 1 total P3 0.056023 0.050595 + material group out nuclide mean std. dev. +0 9 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 10 1 total 0.235515 0.613974 + material group in nuclide mean std. dev. +0 10 1 total 0.0 0.0 + material group in group out nuclide moment mean std. dev. 0 10 1 1 total P0 0.501009 0.708534 1 10 1 1 total P1 0.265494 0.375465 2 10 1 1 total P2 0.141979 0.200788 -3 10 1 1 total P3 0.074258 0.105017 material group out nuclide mean std. dev. -0 10 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 11 1 total 0.510145 0.741941 material group in nuclide mean std. dev. -0 11 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +3 10 1 1 total P3 0.074258 0.105017 + material group out nuclide mean std. dev. +0 10 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 11 1 total 0.510145 0.741941 + material group in nuclide mean std. dev. +0 11 1 total 0.0 0.0 + material group in group out nuclide moment mean std. dev. 0 11 1 1 total P0 0.804661 0.817658 1 11 1 1 total P1 0.312803 0.315315 2 11 1 1 total P2 0.168113 0.172935 -3 11 1 1 total P3 0.003808 0.037911 material group out nuclide mean std. dev. -0 11 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 12 1 total 0.73836 0.825631 material group in nuclide mean std. dev. -0 12 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +3 11 1 1 total P3 0.003808 0.037911 + material group out nuclide mean std. dev. +0 11 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 12 1 total 0.73836 0.825631 + material group in nuclide mean std. dev. +0 12 1 total 0.0 0.0 + material group in group out nuclide moment mean std. dev. 0 12 1 1 total P0 0.943429 0.856119 1 12 1 1 total P1 0.220164 0.163180 2 12 1 1 total P2 0.052884 0.042440 -3 12 1 1 total P3 0.039939 0.032867 material group out nuclide mean std. dev. -0 12 1 total 0.0 0.0 \ No newline at end of file +3 12 1 1 total P3 0.039939 0.032867 + material group out nuclide mean std. dev. +0 12 1 total 0.0 0.0 diff --git a/tests/test_mgxs_library_condense/test_mgxs_library_condense.py b/tests/test_mgxs_library_condense/test_mgxs_library_condense.py index 561232b224..2b834fa988 100644 --- a/tests/test_mgxs_library_condense/test_mgxs_library_condense.py +++ b/tests/test_mgxs_library_condense/test_mgxs_library_condense.py @@ -57,7 +57,7 @@ class MGXSTestHarness(PyAPITestHarness): for mgxs_type in condense_lib.mgxs_types: mgxs = condense_lib.get_mgxs(domain, mgxs_type) df = mgxs.get_pandas_dataframe() - outstr += df.to_string() + outstr += df.to_string() + '\n' # Hash the results if necessary if hash_output: diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index fa55249d13..84e76965d5 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,8 +1,11 @@ avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.718919 0.520644 avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 avg(distribcell) group in group out nuclide moment mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.718919 0.520644 + avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 + avg(distribcell) group in group out nuclide moment mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P0 1.142547 0.570131 1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P1 0.447381 0.216322 2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P2 0.141202 0.066504 -3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P3 0.039228 0.024621 avg(distribcell) group out nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 \ No newline at end of file +3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P3 0.039228 0.024621 + avg(distribcell) group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 diff --git a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py index 32f5ea1bd8..a6fef2e77f 100644 --- a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py +++ b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py @@ -59,7 +59,7 @@ class MGXSTestHarness(PyAPITestHarness): for mgxs_type in avg_lib.mgxs_types: mgxs = avg_lib.get_mgxs(domain, mgxs_type) df = mgxs.get_pandas_dataframe() - outstr += df.to_string() + outstr += df.to_string() + '\n' # Hash the results if necessary if hash_output: diff --git a/tests/test_mgxs_library_no_nuclides/inputs_true.dat b/tests/test_mgxs_library_no_nuclides/inputs_true.dat index 3643c9a2ef..e5d0a175c4 100644 --- a/tests/test_mgxs_library_no_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_no_nuclides/inputs_true.dat @@ -1 +1 @@ -104e7fb527770ac5d3fc636da7716e8fb05d55761253d30516c899f466e6b38ffd881611a3d0cdf65c6af058c32f6f6758c68782be7a170d21024bdae751862f \ No newline at end of file +8675afa50c9e291cea100a30603833c9f73fdf75f0831809dee523292ddcdd27d452540bb06ea2ad40aaa3304228fb6a46281cb04878a492e27a62976c78c96b \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index 94150a202a..c05e053897 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -1,8 +1,51 @@ material group in nuclide mean std. dev. +1 1 1 total 0.413737 0.020666 +0 1 2 total 0.831077 0.043043 + material group in nuclide mean std. dev. 1 1 1 total 0.372745 0.024269 -0 1 2 total 0.861607 0.032349 material group in nuclide mean std. dev. +0 1 2 total 0.861607 0.032349 + material group in nuclide mean std. dev. +1 1 1 total 0.372593 0.024246 +0 1 2 total 0.861607 0.032349 + material group in nuclide mean std. dev. +1 1 1 total 0.033747 0.001497 +0 1 2 total 0.436807 0.024531 + material group in nuclide mean std. dev. +1 1 1 total 0.025522 0.001301 +0 1 2 total 0.165054 0.023520 + material group in nuclide mean std. dev. +1 1 1 total 0.008225 0.000436 +0 1 2 total 0.271753 0.015604 + material group in nuclide mean std. dev. 1 1 1 total 0.021789 0.001182 -0 1 2 total 0.714077 0.040552 material group in group out nuclide moment mean std. dev. +0 1 2 total 0.714077 0.040552 + material group in nuclide mean std. dev. +1 1 1 total 1.612520 0.085471 +0 1 2 total 53.252833 3.051695 + material group in nuclide mean std. dev. +1 1 1 total 0.379990 0.019207 +0 1 2 total 0.394271 0.019629 + material group in nuclide mean std. dev. +1 1 1 total 0.383106 0.024061 +0 1 2 total 0.403916 0.018966 + material group in group out nuclide moment mean std. dev. +12 1 1 1 total P0 0.381200 0.023972 +13 1 1 1 total P1 0.044149 0.004814 +14 1 1 1 total P2 0.020601 0.002497 +15 1 1 1 total P3 0.013589 0.002222 +8 1 1 2 total P0 0.001559 0.000510 +9 1 1 2 total P1 -0.000597 0.000225 +10 1 1 2 total P2 -0.000239 0.000222 +11 1 1 2 total P3 0.000176 0.000209 +4 1 2 1 total P0 0.000000 0.000000 +5 1 2 1 total P1 0.000000 0.000000 +6 1 2 1 total P2 0.000000 0.000000 +7 1 2 1 total P3 0.000000 0.000000 +0 1 2 2 total P0 0.403916 0.018966 +1 1 2 2 total P1 -0.011310 0.007839 +2 1 2 2 total P2 -0.014807 0.008629 +3 1 2 2 total P3 -0.006855 0.009047 + material group in group out nuclide moment mean std. dev. 12 1 1 1 total P0 0.381546 0.024033 13 1 1 1 total P1 0.044301 0.004722 14 1 1 1 total P2 0.020646 0.002539 @@ -18,13 +61,51 @@ 0 1 2 2 total P0 0.403916 0.018966 1 1 2 2 total P1 -0.011310 0.007839 2 1 2 2 total P2 -0.014807 0.008629 -3 1 2 2 total P3 -0.006855 0.009047 material group out nuclide mean std. dev. +3 1 2 2 total P3 -0.006855 0.009047 + material group in group out nuclide mean std. dev. +3 1 1 1 total 1.000909 0.061440 +2 1 1 2 total 1.000000 0.458123 +1 1 2 1 total 0.000000 0.000000 +0 1 2 2 total 1.000000 0.055242 + material group in group out nuclide mean std. dev. +3 1 1 1 total 0.022739 0.002910 +2 1 1 2 total 0.000000 0.000000 +1 1 2 1 total 0.737265 0.030217 +0 1 2 2 total 0.000000 0.000000 + material group out nuclide mean std. dev. 1 1 1 total 1.0 0.055333 -0 1 2 total 0.0 0.000000 material group in nuclide mean std. dev. +0 1 2 total 0.0 0.000000 + material group in nuclide mean std. dev. +1 2 1 total 0.274809 0.009544 +0 2 2 total 0.264483 0.013309 + material group in nuclide mean std. dev. 1 2 1 total 0.237254 0.008184 -0 2 2 total 0.285930 0.048796 material group in nuclide mean std. dev. +0 2 2 total 0.285930 0.048796 + material group in nuclide mean std. dev. +1 2 1 total 0.237254 0.008184 +0 2 2 total 0.285930 0.048796 + material group in nuclide mean std. dev. +1 2 1 total 0.001327 0.000144 +0 2 2 total 0.004358 0.000224 + material group in nuclide mean std. dev. +1 2 1 total 0.001327 0.000144 +0 2 2 total 0.004358 0.000224 + material group in nuclide mean std. dev. 1 2 1 total 0.0 0.0 -0 2 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 2 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 2 1 total 0.0 0.0 +0 2 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 2 1 total 0.0 0.0 +0 2 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 2 1 total 0.273482 0.009533 +0 2 2 total 0.260125 0.013092 + material group in nuclide mean std. dev. +1 2 1 total 0.273115 0.006253 +0 2 2 total 0.264051 0.045397 + material group in group out nuclide moment mean std. dev. 12 2 1 1 total P0 0.273115 0.006253 13 2 1 1 total P1 0.035861 0.005878 14 2 1 1 total P2 0.029704 0.006640 @@ -40,13 +121,68 @@ 0 2 2 2 total P0 0.264051 0.045397 1 2 2 2 total P1 -0.021880 0.012218 2 2 2 2 total P2 -0.015295 0.010276 -3 2 2 2 total P3 0.014034 0.014318 material group out nuclide mean std. dev. +3 2 2 2 total P3 0.014034 0.014318 + material group in group out nuclide moment mean std. dev. +12 2 1 1 total P0 0.273115 0.006253 +13 2 1 1 total P1 0.035861 0.005878 +14 2 1 1 total P2 0.029704 0.006640 +15 2 1 1 total P3 0.002249 0.003376 +8 2 1 2 total P0 0.000000 0.000000 +9 2 1 2 total P1 0.000000 0.000000 +10 2 1 2 total P2 0.000000 0.000000 +11 2 1 2 total P3 0.000000 0.000000 +4 2 2 1 total P0 0.000000 0.000000 +5 2 2 1 total P1 0.000000 0.000000 +6 2 2 1 total P2 0.000000 0.000000 +7 2 2 1 total P3 0.000000 0.000000 +0 2 2 2 total P0 0.264051 0.045397 +1 2 2 2 total P1 -0.021880 0.012218 +2 2 2 2 total P2 -0.015295 0.010276 +3 2 2 2 total P3 0.014034 0.014318 + material group in group out nuclide mean std. dev. +3 2 1 1 total 1.0 0.019157 +2 2 1 2 total 0.0 0.000000 +1 2 2 1 total 0.0 0.000000 +0 2 2 2 total 1.0 0.171895 + material group in group out nuclide mean std. dev. +3 2 1 1 total 0.0 0.0 +2 2 1 2 total 0.0 0.0 +1 2 2 1 total 0.0 0.0 +0 2 2 2 total 0.0 0.0 + material group out nuclide mean std. dev. 1 2 1 total 0.0 0.0 -0 2 2 total 0.0 0.0 material group in nuclide mean std. dev. +0 2 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 3 1 total 0.670714 0.041725 +0 3 2 total 1.989013 0.270454 + material group in nuclide mean std. dev. 1 3 1 total 0.286906 0.027401 -0 3 2 total 1.418151 0.265308 material group in nuclide mean std. dev. +0 3 2 total 1.418151 0.265308 + material group in nuclide mean std. dev. +1 3 1 total 0.286906 0.027401 +0 3 2 total 1.418151 0.265308 + material group in nuclide mean std. dev. +1 3 1 total 0.000998 0.000050 +0 3 2 total 0.048908 0.007333 + material group in nuclide mean std. dev. +1 3 1 total 0.000998 0.000050 +0 3 2 total 0.048908 0.007333 + material group in nuclide mean std. dev. 1 3 1 total 0.0 0.0 -0 3 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 3 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 3 1 total 0.0 0.0 +0 3 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 3 1 total 0.0 0.0 +0 3 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 3 1 total 0.669716 0.041680 +0 3 2 total 1.940105 0.263149 + material group in nuclide mean std. dev. +1 3 1 total 0.669533 0.029665 +0 3 2 total 1.924214 0.284062 + material group in group out nuclide moment mean std. dev. 12 3 1 1 total P0 0.643346 0.028376 13 3 1 1 total P1 0.383409 0.016447 14 3 1 1 total P2 0.152185 0.009574 @@ -62,13 +198,68 @@ 0 3 2 2 total P0 1.924214 0.284062 1 3 2 2 total P1 0.498431 0.063421 2 3 2 2 total P2 0.091205 0.013726 -3 3 2 2 total P3 0.017054 0.013916 material group out nuclide mean std. dev. +3 3 2 2 total P3 0.017054 0.013916 + material group in group out nuclide moment mean std. dev. +12 3 1 1 total P0 0.643346 0.028376 +13 3 1 1 total P1 0.383409 0.016447 +14 3 1 1 total P2 0.152185 0.009574 +15 3 1 1 total P3 0.003037 0.004648 +8 3 1 2 total P0 0.026187 0.001665 +9 3 1 2 total P1 0.007362 0.000934 +10 3 1 2 total P2 -0.002738 0.000756 +11 3 1 2 total P3 -0.002720 0.000558 +4 3 2 1 total P0 0.000000 0.000000 +5 3 2 1 total P1 0.000000 0.000000 +6 3 2 1 total P2 0.000000 0.000000 +7 3 2 1 total P3 0.000000 0.000000 +0 3 2 2 total P0 1.924214 0.284062 +1 3 2 2 total P1 0.498431 0.063421 +2 3 2 2 total P2 0.091205 0.013726 +3 3 2 2 total P3 0.017054 0.013916 + material group in group out nuclide mean std. dev. +3 3 1 1 total 1.0 0.047903 +2 3 1 2 total 1.0 0.080529 +1 3 2 1 total 0.0 0.000000 +0 3 2 2 total 1.0 0.162017 + material group in group out nuclide mean std. dev. +3 3 1 1 total 0.0 0.0 +2 3 1 2 total 0.0 0.0 +1 3 2 1 total 0.0 0.0 +0 3 2 2 total 0.0 0.0 + material group out nuclide mean std. dev. 1 3 1 total 0.0 0.0 -0 3 2 total 0.0 0.0 material group in nuclide mean std. dev. +0 3 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 4 1 total 0.569719 0.069542 +0 4 2 total 1.818808 0.468684 + material group in nuclide mean std. dev. 1 4 1 total 0.242447 0.061031 -0 4 2 total 1.253959 0.388363 material group in nuclide mean std. dev. +0 4 2 total 1.253959 0.388363 + material group in nuclide mean std. dev. +1 4 1 total 0.242447 0.061031 +0 4 2 total 1.253959 0.388363 + material group in nuclide mean std. dev. +1 4 1 total 0.000981 0.000145 +0 4 2 total 0.045603 0.012339 + material group in nuclide mean std. dev. +1 4 1 total 0.000981 0.000145 +0 4 2 total 0.045603 0.012339 + material group in nuclide mean std. dev. 1 4 1 total 0.0 0.0 -0 4 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 4 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 4 1 total 0.0 0.0 +0 4 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 4 1 total 0.0 0.0 +0 4 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 4 1 total 0.568737 0.069416 +0 4 2 total 1.773206 0.456376 + material group in nuclide mean std. dev. +1 4 1 total 0.567603 0.068093 +0 4 2 total 1.764648 0.416210 + material group in group out nuclide moment mean std. dev. 12 4 1 1 total P0 0.543941 0.065427 13 4 1 1 total P1 0.326011 0.038602 14 4 1 1 total P2 0.131133 0.017475 @@ -84,13 +275,68 @@ 0 4 2 2 total P0 1.764648 0.416210 1 4 2 2 total P1 0.500695 0.122178 2 4 2 2 total P2 0.099026 0.038719 -3 4 2 2 total P3 0.032975 0.025103 material group out nuclide mean std. dev. +3 4 2 2 total P3 0.032975 0.025103 + material group in group out nuclide moment mean std. dev. +12 4 1 1 total P0 0.543941 0.065427 +13 4 1 1 total P1 0.326011 0.038602 +14 4 1 1 total P2 0.131133 0.017475 +15 4 1 1 total P3 0.012105 0.006073 +8 4 1 2 total P0 0.023662 0.003083 +9 4 1 2 total P1 0.007526 0.001301 +10 4 1 2 total P2 -0.002730 0.000841 +11 4 1 2 total P3 -0.003140 0.000578 +4 4 2 1 total P0 0.000000 0.000000 +5 4 2 1 total P1 0.000000 0.000000 +6 4 2 1 total P2 0.000000 0.000000 +7 4 2 1 total P3 0.000000 0.000000 +0 4 2 2 total P0 1.764648 0.416210 +1 4 2 2 total P1 0.500695 0.122178 +2 4 2 2 total P2 0.099026 0.038719 +3 4 2 2 total P3 0.032975 0.025103 + material group in group out nuclide mean std. dev. +3 4 1 1 total 1.0 0.125440 +2 4 1 2 total 1.0 0.144075 +1 4 2 1 total 0.0 0.000000 +0 4 2 2 total 1.0 0.256789 + material group in group out nuclide mean std. dev. +3 4 1 1 total 0.0 0.0 +2 4 1 2 total 0.0 0.0 +1 4 2 1 total 0.0 0.0 +0 4 2 2 total 0.0 0.0 + material group out nuclide mean std. dev. 1 4 1 total 0.0 0.0 -0 4 2 total 0.0 0.0 material group in nuclide mean std. dev. +0 4 2 total 0.0 0.0 + material group in nuclide mean std. dev. 1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. +0 5 2 total 0.0 0.0 + material group in nuclide mean std. dev. 1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 5 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 + material group in group out nuclide moment mean std. dev. 12 5 1 1 total P0 0.0 0.0 13 5 1 1 total P1 0.0 0.0 14 5 1 1 total P2 0.0 0.0 @@ -106,13 +352,68 @@ 0 5 2 2 total P0 0.0 0.0 1 5 2 2 total P1 0.0 0.0 2 5 2 2 total P2 0.0 0.0 -3 5 2 2 total P3 0.0 0.0 material group out nuclide mean std. dev. +3 5 2 2 total P3 0.0 0.0 + material group in group out nuclide moment mean std. dev. +12 5 1 1 total P0 0.0 0.0 +13 5 1 1 total P1 0.0 0.0 +14 5 1 1 total P2 0.0 0.0 +15 5 1 1 total P3 0.0 0.0 +8 5 1 2 total P0 0.0 0.0 +9 5 1 2 total P1 0.0 0.0 +10 5 1 2 total P2 0.0 0.0 +11 5 1 2 total P3 0.0 0.0 +4 5 2 1 total P0 0.0 0.0 +5 5 2 1 total P1 0.0 0.0 +6 5 2 1 total P2 0.0 0.0 +7 5 2 1 total P3 0.0 0.0 +0 5 2 2 total P0 0.0 0.0 +1 5 2 2 total P1 0.0 0.0 +2 5 2 2 total P2 0.0 0.0 +3 5 2 2 total P3 0.0 0.0 + material group in group out nuclide mean std. dev. +3 5 1 1 total 0.0 0.0 +2 5 1 2 total 0.0 0.0 +1 5 2 1 total 0.0 0.0 +0 5 2 2 total 0.0 0.0 + material group in group out nuclide mean std. dev. +3 5 1 1 total 0.0 0.0 +2 5 1 2 total 0.0 0.0 +1 5 2 1 total 0.0 0.0 +0 5 2 2 total 0.0 0.0 + material group out nuclide mean std. dev. 1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. +0 5 2 total 0.0 0.0 + material group in nuclide mean std. dev. 1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. +0 6 2 total 0.0 0.0 + material group in nuclide mean std. dev. 1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 6 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 + material group in group out nuclide moment mean std. dev. 12 6 1 1 total P0 0.0 0.0 13 6 1 1 total P1 0.0 0.0 14 6 1 1 total P2 0.0 0.0 @@ -128,13 +429,68 @@ 0 6 2 2 total P0 0.0 0.0 1 6 2 2 total P1 0.0 0.0 2 6 2 2 total P2 0.0 0.0 -3 6 2 2 total P3 0.0 0.0 material group out nuclide mean std. dev. +3 6 2 2 total P3 0.0 0.0 + material group in group out nuclide moment mean std. dev. +12 6 1 1 total P0 0.0 0.0 +13 6 1 1 total P1 0.0 0.0 +14 6 1 1 total P2 0.0 0.0 +15 6 1 1 total P3 0.0 0.0 +8 6 1 2 total P0 0.0 0.0 +9 6 1 2 total P1 0.0 0.0 +10 6 1 2 total P2 0.0 0.0 +11 6 1 2 total P3 0.0 0.0 +4 6 2 1 total P0 0.0 0.0 +5 6 2 1 total P1 0.0 0.0 +6 6 2 1 total P2 0.0 0.0 +7 6 2 1 total P3 0.0 0.0 +0 6 2 2 total P0 0.0 0.0 +1 6 2 2 total P1 0.0 0.0 +2 6 2 2 total P2 0.0 0.0 +3 6 2 2 total P3 0.0 0.0 + material group in group out nuclide mean std. dev. +3 6 1 1 total 0.0 0.0 +2 6 1 2 total 0.0 0.0 +1 6 2 1 total 0.0 0.0 +0 6 2 2 total 0.0 0.0 + material group in group out nuclide mean std. dev. +3 6 1 1 total 0.0 0.0 +2 6 1 2 total 0.0 0.0 +1 6 2 1 total 0.0 0.0 +0 6 2 2 total 0.0 0.0 + material group out nuclide mean std. dev. 1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. +0 6 2 total 0.0 0.0 + material group in nuclide mean std. dev. 1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. +0 7 2 total 0.0 0.0 + material group in nuclide mean std. dev. 1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 7 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 + material group in group out nuclide moment mean std. dev. 12 7 1 1 total P0 0.0 0.0 13 7 1 1 total P1 0.0 0.0 14 7 1 1 total P2 0.0 0.0 @@ -150,13 +506,68 @@ 0 7 2 2 total P0 0.0 0.0 1 7 2 2 total P1 0.0 0.0 2 7 2 2 total P2 0.0 0.0 -3 7 2 2 total P3 0.0 0.0 material group out nuclide mean std. dev. +3 7 2 2 total P3 0.0 0.0 + material group in group out nuclide moment mean std. dev. +12 7 1 1 total P0 0.0 0.0 +13 7 1 1 total P1 0.0 0.0 +14 7 1 1 total P2 0.0 0.0 +15 7 1 1 total P3 0.0 0.0 +8 7 1 2 total P0 0.0 0.0 +9 7 1 2 total P1 0.0 0.0 +10 7 1 2 total P2 0.0 0.0 +11 7 1 2 total P3 0.0 0.0 +4 7 2 1 total P0 0.0 0.0 +5 7 2 1 total P1 0.0 0.0 +6 7 2 1 total P2 0.0 0.0 +7 7 2 1 total P3 0.0 0.0 +0 7 2 2 total P0 0.0 0.0 +1 7 2 2 total P1 0.0 0.0 +2 7 2 2 total P2 0.0 0.0 +3 7 2 2 total P3 0.0 0.0 + material group in group out nuclide mean std. dev. +3 7 1 1 total 0.0 0.0 +2 7 1 2 total 0.0 0.0 +1 7 2 1 total 0.0 0.0 +0 7 2 2 total 0.0 0.0 + material group in group out nuclide mean std. dev. +3 7 1 1 total 0.0 0.0 +2 7 1 2 total 0.0 0.0 +1 7 2 1 total 0.0 0.0 +0 7 2 2 total 0.0 0.0 + material group out nuclide mean std. dev. 1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. +0 7 2 total 0.0 0.0 + material group in nuclide mean std. dev. 1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. +0 8 2 total 0.0 0.0 + material group in nuclide mean std. dev. 1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 8 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 + material group in group out nuclide moment mean std. dev. 12 8 1 1 total P0 0.0 0.0 13 8 1 1 total P1 0.0 0.0 14 8 1 1 total P2 0.0 0.0 @@ -172,13 +583,68 @@ 0 8 2 2 total P0 0.0 0.0 1 8 2 2 total P1 0.0 0.0 2 8 2 2 total P2 0.0 0.0 -3 8 2 2 total P3 0.0 0.0 material group out nuclide mean std. dev. +3 8 2 2 total P3 0.0 0.0 + material group in group out nuclide moment mean std. dev. +12 8 1 1 total P0 0.0 0.0 +13 8 1 1 total P1 0.0 0.0 +14 8 1 1 total P2 0.0 0.0 +15 8 1 1 total P3 0.0 0.0 +8 8 1 2 total P0 0.0 0.0 +9 8 1 2 total P1 0.0 0.0 +10 8 1 2 total P2 0.0 0.0 +11 8 1 2 total P3 0.0 0.0 +4 8 2 1 total P0 0.0 0.0 +5 8 2 1 total P1 0.0 0.0 +6 8 2 1 total P2 0.0 0.0 +7 8 2 1 total P3 0.0 0.0 +0 8 2 2 total P0 0.0 0.0 +1 8 2 2 total P1 0.0 0.0 +2 8 2 2 total P2 0.0 0.0 +3 8 2 2 total P3 0.0 0.0 + material group in group out nuclide mean std. dev. +3 8 1 1 total 0.0 0.0 +2 8 1 2 total 0.0 0.0 +1 8 2 1 total 0.0 0.0 +0 8 2 2 total 0.0 0.0 + material group in group out nuclide mean std. dev. +3 8 1 1 total 0.0 0.0 +2 8 1 2 total 0.0 0.0 +1 8 2 1 total 0.0 0.0 +0 8 2 2 total 0.0 0.0 + material group out nuclide mean std. dev. 1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. +0 8 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 9 1 total 1.123604 1.580875 +0 9 2 total 0.000000 0.000000 + material group in nuclide mean std. dev. 1 9 1 total 0.600536 0.748875 -0 9 2 total 0.000000 0.000000 material group in nuclide mean std. dev. +0 9 2 total 0.000000 0.000000 + material group in nuclide mean std. dev. +1 9 1 total 0.600536 0.748875 +0 9 2 total 0.000000 0.000000 + material group in nuclide mean std. dev. +1 9 1 total 0.006197 0.008724 +0 9 2 total 0.000000 0.000000 + material group in nuclide mean std. dev. +1 9 1 total 0.006197 0.008724 +0 9 2 total 0.000000 0.000000 + material group in nuclide mean std. dev. 1 9 1 total 0.0 0.0 -0 9 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 9 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 9 1 total 0.0 0.0 +0 9 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 9 1 total 0.0 0.0 +0 9 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 9 1 total 1.117408 1.572151 +0 9 2 total 0.000000 0.000000 + material group in nuclide mean std. dev. +1 9 1 total 0.72038 0.771015 +0 9 2 total 0.00000 0.000000 + material group in group out nuclide moment mean std. dev. 12 9 1 1 total P0 0.720380 0.771015 13 9 1 1 total P1 0.119844 0.184691 14 9 1 1 total P2 0.038522 0.064485 @@ -194,13 +660,68 @@ 0 9 2 2 total P0 0.000000 0.000000 1 9 2 2 total P1 0.000000 0.000000 2 9 2 2 total P2 0.000000 0.000000 -3 9 2 2 total P3 0.000000 0.000000 material group out nuclide mean std. dev. +3 9 2 2 total P3 0.000000 0.000000 + material group in group out nuclide moment mean std. dev. +12 9 1 1 total P0 0.720380 0.771015 +13 9 1 1 total P1 0.119844 0.184691 +14 9 1 1 total P2 0.038522 0.064485 +15 9 1 1 total P3 0.056023 0.050595 +8 9 1 2 total P0 0.000000 0.000000 +9 9 1 2 total P1 0.000000 0.000000 +10 9 1 2 total P2 0.000000 0.000000 +11 9 1 2 total P3 0.000000 0.000000 +4 9 2 1 total P0 0.000000 0.000000 +5 9 2 1 total P1 0.000000 0.000000 +6 9 2 1 total P2 0.000000 0.000000 +7 9 2 1 total P3 0.000000 0.000000 +0 9 2 2 total P0 0.000000 0.000000 +1 9 2 2 total P1 0.000000 0.000000 +2 9 2 2 total P2 0.000000 0.000000 +3 9 2 2 total P3 0.000000 0.000000 + material group in group out nuclide mean std. dev. +3 9 1 1 total 1.0 1.227262 +2 9 1 2 total 0.0 0.000000 +1 9 2 1 total 0.0 0.000000 +0 9 2 2 total 0.0 0.000000 + material group in group out nuclide mean std. dev. +3 9 1 1 total 0.0 0.0 +2 9 1 2 total 0.0 0.0 +1 9 2 1 total 0.0 0.0 +0 9 2 2 total 0.0 0.0 + material group out nuclide mean std. dev. 1 9 1 total 0.0 0.0 -0 9 2 total 0.0 0.0 material group in nuclide mean std. dev. +0 9 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 10 1 total 0.812963 1.149704 +0 10 2 total 0.000000 0.000000 + material group in nuclide mean std. dev. 1 10 1 total 0.235515 0.613974 -0 10 2 total 0.000000 0.000000 material group in nuclide mean std. dev. +0 10 2 total 0.000000 0.000000 + material group in nuclide mean std. dev. +1 10 1 total 0.235515 0.613974 +0 10 2 total 0.000000 0.000000 + material group in nuclide mean std. dev. +1 10 1 total 0.00018 0.000254 +0 10 2 total 0.00000 0.000000 + material group in nuclide mean std. dev. +1 10 1 total 0.00018 0.000254 +0 10 2 total 0.00000 0.000000 + material group in nuclide mean std. dev. 1 10 1 total 0.0 0.0 -0 10 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 10 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 10 1 total 0.0 0.0 +0 10 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 10 1 total 0.0 0.0 +0 10 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 10 1 total 0.812784 1.14945 +0 10 2 total 0.000000 0.00000 + material group in nuclide mean std. dev. +1 10 1 total 0.501009 0.708534 +0 10 2 total 0.000000 0.000000 + material group in group out nuclide moment mean std. dev. 12 10 1 1 total P0 0.501009 0.708534 13 10 1 1 total P1 0.265494 0.375465 14 10 1 1 total P2 0.141979 0.200788 @@ -216,13 +737,68 @@ 0 10 2 2 total P0 0.000000 0.000000 1 10 2 2 total P1 0.000000 0.000000 2 10 2 2 total P2 0.000000 0.000000 -3 10 2 2 total P3 0.000000 0.000000 material group out nuclide mean std. dev. +3 10 2 2 total P3 0.000000 0.000000 + material group in group out nuclide moment mean std. dev. +12 10 1 1 total P0 0.501009 0.708534 +13 10 1 1 total P1 0.265494 0.375465 +14 10 1 1 total P2 0.141979 0.200788 +15 10 1 1 total P3 0.074258 0.105017 +8 10 1 2 total P0 0.000000 0.000000 +9 10 1 2 total P1 0.000000 0.000000 +10 10 1 2 total P2 0.000000 0.000000 +11 10 1 2 total P3 0.000000 0.000000 +4 10 2 1 total P0 0.000000 0.000000 +5 10 2 1 total P1 0.000000 0.000000 +6 10 2 1 total P2 0.000000 0.000000 +7 10 2 1 total P3 0.000000 0.000000 +0 10 2 2 total P0 0.000000 0.000000 +1 10 2 2 total P1 0.000000 0.000000 +2 10 2 2 total P2 0.000000 0.000000 +3 10 2 2 total P3 0.000000 0.000000 + material group in group out nuclide mean std. dev. +3 10 1 1 total 1.0 1.414214 +2 10 1 2 total 0.0 0.000000 +1 10 2 1 total 0.0 0.000000 +0 10 2 2 total 0.0 0.000000 + material group in group out nuclide mean std. dev. +3 10 1 1 total 0.0 0.0 +2 10 1 2 total 0.0 0.0 +1 10 2 1 total 0.0 0.0 +0 10 2 2 total 0.0 0.0 + material group out nuclide mean std. dev. 1 10 1 total 0.0 0.0 -0 10 2 total 0.0 0.0 material group in nuclide mean std. dev. +0 10 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 11 1 total 0.408939 0.578327 +0 11 2 total 1.258110 1.779236 + material group in nuclide mean std. dev. 1 11 1 total 0.186324 0.632129 -0 11 2 total 0.945986 1.591133 material group in nuclide mean std. dev. +0 11 2 total 0.945986 1.591133 + material group in nuclide mean std. dev. +1 11 1 total 0.186324 0.632129 +0 11 2 total 0.945986 1.591133 + material group in nuclide mean std. dev. +1 11 1 total 0.000687 0.000971 +0 11 2 total 0.028614 0.040466 + material group in nuclide mean std. dev. +1 11 1 total 0.000687 0.000971 +0 11 2 total 0.028614 0.040466 + material group in nuclide mean std. dev. 1 11 1 total 0.0 0.0 -0 11 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 11 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 11 1 total 0.0 0.0 +0 11 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 11 1 total 0.0 0.0 +0 11 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 11 1 total 0.408253 0.577356 +0 11 2 total 1.229496 1.738770 + material group in nuclide mean std. dev. +1 11 1 total 0.510003 0.721253 +0 11 2 total 1.201250 1.698824 + material group in group out nuclide moment mean std. dev. 12 11 1 1 total P0 0.478128 0.676174 13 11 1 1 total P1 0.323679 0.457751 14 11 1 1 total P2 0.143375 0.202763 @@ -238,13 +814,68 @@ 0 11 2 2 total P0 1.201250 1.698824 1 11 2 2 total P1 0.286611 0.405329 2 11 2 2 total P2 0.218191 0.308569 -3 11 2 2 total P3 -0.048514 0.068609 material group out nuclide mean std. dev. +3 11 2 2 total P3 -0.048514 0.068609 + material group in group out nuclide moment mean std. dev. +12 11 1 1 total P0 0.478128 0.676174 +13 11 1 1 total P1 0.323679 0.457751 +14 11 1 1 total P2 0.143375 0.202763 +15 11 1 1 total P3 0.054003 0.076372 +8 11 1 2 total P0 0.031875 0.045078 +9 11 1 2 total P1 0.008585 0.012140 +10 11 1 2 total P2 -0.012470 0.017635 +11 11 1 2 total P3 -0.011320 0.016009 +4 11 2 1 total P0 0.000000 0.000000 +5 11 2 1 total P1 0.000000 0.000000 +6 11 2 1 total P2 0.000000 0.000000 +7 11 2 1 total P3 0.000000 0.000000 +0 11 2 2 total P0 1.201250 1.698824 +1 11 2 2 total P1 0.286611 0.405329 +2 11 2 2 total P2 0.218191 0.308569 +3 11 2 2 total P3 -0.048514 0.068609 + material group in group out nuclide mean std. dev. +3 11 1 1 total 1.0 1.414214 +2 11 1 2 total 1.0 1.414214 +1 11 2 1 total 0.0 0.000000 +0 11 2 2 total 1.0 1.414214 + material group in group out nuclide mean std. dev. +3 11 1 1 total 0.0 0.0 +2 11 1 2 total 0.0 0.0 +1 11 2 1 total 0.0 0.0 +0 11 2 2 total 0.0 0.0 + material group out nuclide mean std. dev. 1 11 1 total 0.0 0.0 -0 11 2 total 0.0 0.0 material group in nuclide mean std. dev. +0 11 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 12 1 total 0.390295 0.247786 +0 12 2 total 1.619510 2.290334 + material group in nuclide mean std. dev. 1 12 1 total 0.213292 0.271444 -0 12 2 total 1.390975 2.137346 material group in nuclide mean std. dev. +0 12 2 total 1.390975 2.137346 + material group in nuclide mean std. dev. +1 12 1 total 0.213292 0.271444 +0 12 2 total 1.390975 2.137346 + material group in nuclide mean std. dev. +1 12 1 total 0.000217 0.000142 +0 12 2 total 0.045440 0.064261 + material group in nuclide mean std. dev. +1 12 1 total 0.000217 0.000142 +0 12 2 total 0.045440 0.064261 + material group in nuclide mean std. dev. 1 12 1 total 0.0 0.0 -0 12 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 12 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 12 1 total 0.0 0.0 +0 12 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 12 1 total 0.0 0.0 +0 12 2 total 0.0 0.0 + material group in nuclide mean std. dev. +1 12 1 total 0.390078 0.247656 +0 12 2 total 1.574071 2.226072 + material group in nuclide mean std. dev. +1 12 1 total 0.435834 0.294632 +0 12 2 total 1.574328 2.226436 + material group in group out nuclide moment mean std. dev. 12 12 1 1 total P0 0.408594 0.278123 13 12 1 1 total P1 0.222541 0.145776 14 12 1 1 total P2 0.090972 0.069626 @@ -260,6 +891,34 @@ 0 12 2 2 total P0 1.574328 2.226436 1 12 2 2 total P1 0.229748 0.324913 2 12 2 2 total P2 0.014178 0.020051 -3 12 2 2 total P3 0.038997 0.055150 material group out nuclide mean std. dev. +3 12 2 2 total P3 0.038997 0.055150 + material group in group out nuclide moment mean std. dev. +12 12 1 1 total P0 0.408594 0.278123 +13 12 1 1 total P1 0.222541 0.145776 +14 12 1 1 total P2 0.090972 0.069626 +15 12 1 1 total P3 0.031004 0.035981 +8 12 1 2 total P0 0.027240 0.029555 +9 12 1 2 total P1 -0.010088 0.010945 +10 12 1 2 total P2 -0.006946 0.007537 +11 12 1 2 total P3 0.009692 0.010516 +4 12 2 1 total P0 0.000000 0.000000 +5 12 2 1 total P1 0.000000 0.000000 +6 12 2 1 total P2 0.000000 0.000000 +7 12 2 1 total P3 0.000000 0.000000 +0 12 2 2 total P0 1.574328 2.226436 +1 12 2 2 total P1 0.229748 0.324913 +2 12 2 2 total P2 0.014178 0.020051 +3 12 2 2 total P3 0.038997 0.055150 + material group in group out nuclide mean std. dev. +3 12 1 1 total 1.0 0.756454 +2 12 1 2 total 1.0 1.414214 +1 12 2 1 total 0.0 0.000000 +0 12 2 2 total 1.0 1.414214 + material group in group out nuclide mean std. dev. +3 12 1 1 total 0.0 0.0 +2 12 1 2 total 0.0 0.0 +1 12 2 1 total 0.0 0.0 +0 12 2 2 total 0.0 0.0 + material group out nuclide mean std. dev. 1 12 1 total 0.0 0.0 -0 12 2 total 0.0 0.0 \ No newline at end of file +0 12 2 total 0.0 0.0 diff --git a/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py b/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py index 6ee8813d03..1413f869c8 100644 --- a/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py +++ b/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py @@ -25,8 +25,12 @@ class MGXSTestHarness(PyAPITestHarness): # Initialize MGXS Library for a few cross section types self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = False - self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', - 'nu-scatter matrix', 'chi'] + self.mgxs_lib.mgxs_types = ['total', 'transport', 'nu-transport', + 'absorption', 'capture', 'fission', + 'nu-fission', 'kappa-fission', 'scatter', + 'nu-scatter', 'scatter matrix', + 'nu-scatter matrix', 'multiplicity matrix', + 'nu-fission matrix', 'chi'] self.mgxs_lib.energy_groups = energy_groups self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'material' @@ -53,7 +57,7 @@ class MGXSTestHarness(PyAPITestHarness): for mgxs_type in self.mgxs_lib.mgxs_types: mgxs = self.mgxs_lib.get_mgxs(domain, mgxs_type) df = mgxs.get_pandas_dataframe() - outstr += df.to_string() + outstr += df.to_string() + '\n' # Hash the results if necessary if hash_output: diff --git a/tests/test_mgxs_library_nuclides/inputs_true.dat b/tests/test_mgxs_library_nuclides/inputs_true.dat index 9e25fe96a6..9adacb3a59 100644 --- a/tests/test_mgxs_library_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_nuclides/inputs_true.dat @@ -1 +1 @@ -791a2bd647b8bae03aafc39e29ff1ce1ffc44063b0d757ccba4e1eda6eb73b8a275020f4f5774b17dede49fbf15549787279c8b2fc45caba0097155b32e56fa8 \ No newline at end of file +6612ed1baa139ba085456963f0f04a0450bd13c46e6e04ec8fb1c7392168584fce4ca28b75c7606163b4af02a9ead433993f14fa3be8a5ad0083b01c5ff5f33e \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index 06f838206f..26b7f26a3c 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -1 +1 @@ -1ee58383dc8ac46c5e0d72321cbc34b0dba531435d5e0e632cbbf9572eb7d669c8c8ad9f370345325afa0bdeb2f818b0f5204b7c4a7c4aaf58ded7acbd715ef8 \ No newline at end of file +629afcb6af616b3b51fc219ef1a829675322fd0b890d538ac172feb76a3937efd1142d8082072f3ab304d2b5f4bf8a930330dc5b2d322c2c96c7187d7c026b7b \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py b/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py index 47c1ec60ae..b9ffdbcaa6 100644 --- a/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py +++ b/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py @@ -25,8 +25,12 @@ class MGXSTestHarness(PyAPITestHarness): # Initialize MGXS Library for a few cross section types self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = True - self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', - 'nu-scatter matrix', 'chi'] + self.mgxs_lib.mgxs_types = ['total', 'transport', 'nu-transport', + 'absorption', 'capture', 'fission', + 'nu-fission', 'kappa-fission', 'scatter', + 'nu-scatter', 'scatter matrix', + 'nu-scatter matrix', 'multiplicity matrix', + 'nu-fission matrix', 'chi'] self.mgxs_lib.energy_groups = energy_groups self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'material' @@ -53,7 +57,7 @@ class MGXSTestHarness(PyAPITestHarness): for mgxs_type in self.mgxs_lib.mgxs_types: mgxs = self.mgxs_lib.get_mgxs(domain, mgxs_type) df = mgxs.get_pandas_dataframe() - outstr += df.to_string() + outstr += df.to_string() + '\n' # Hash the results if necessary if hash_output: From 61fb8194a530ae3ebc1345607899d18371cf257c Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 29 May 2016 10:42:20 -0400 Subject: [PATCH 584/650] Added a test which tests creating MGXS in CE mode and piping in to MG mode. --- openmc/mgxs/library.py | 2 +- .../inputs_true.dat | 1 + .../results_true.dat | 2 + .../test_mgxs_library_ce_to_mg.py | 93 +++++++++++++++++++ 4 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 tests/test_mgxs_library_ce_to_mg/inputs_true.dat create mode 100644 tests/test_mgxs_library_ce_to_mg/results_true.dat create mode 100644 tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 4c2497173e..62dde28ab2 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -34,7 +34,7 @@ class Library(object): Parameters ---------- openmc_geometry : openmc.Geometry - An geometry which has been initialized with a root universe + A geometry which has been initialized with a root universe by_nuclide : bool If true, computes cross sections for each nuclide in each domain mgxs_types : Iterable of str diff --git a/tests/test_mgxs_library_ce_to_mg/inputs_true.dat b/tests/test_mgxs_library_ce_to_mg/inputs_true.dat new file mode 100644 index 0000000000..ad4b639655 --- /dev/null +++ b/tests/test_mgxs_library_ce_to_mg/inputs_true.dat @@ -0,0 +1 @@ +15355a90181bc3a8ba70bcc9a89beff2c240dc75abbf26c3e3b6a940c4ec2028b238422ac26af08863c24ce6fc16d48d249f17cd0bce53df0141138deccfc81a \ No newline at end of file diff --git a/tests/test_mgxs_library_ce_to_mg/results_true.dat b/tests/test_mgxs_library_ce_to_mg/results_true.dat new file mode 100644 index 0000000000..1152dd2cca --- /dev/null +++ b/tests/test_mgxs_library_ce_to_mg/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +1.017325E+00 3.827758E-02 diff --git a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py new file mode 100644 index 0000000000..9bf70bbbbe --- /dev/null +++ b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python + +import os +import sys +import glob +import hashlib +sys.path.insert(0, os.pardir) +from testing_harness import PyAPITestHarness +import openmc +import openmc.mgxs + + +class MGXSTestHarness(PyAPITestHarness): + def _build_inputs(self): + + # The openmc.mgxs module needs a summary.h5 file + self._input_set.settings.output = {'summary': True} + + # Generate inputs using parent class routine + super(MGXSTestHarness, self)._build_inputs() + + # Initialize a two-group structure + energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, 20.]) + + # Initialize MGXS Library for a few cross section types + self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) + self.mgxs_lib.by_nuclide = False + self.mgxs_lib.mgxs_types = ['total', 'absorption', 'nu-fission matrix', + 'nu-scatter matrix', 'multiplicity matrix'] + self.mgxs_lib.energy_groups = energy_groups + self.mgxs_lib.correction = None + self.mgxs_lib.legendre_order = 3 + self.mgxs_lib.domain_type = 'material' + self.mgxs_lib.build_library() + + # Initialize a tallies file + self._input_set.tallies = openmc.Tallies() + self.mgxs_lib.add_to_tallies_file(self._input_set.tallies, merge=False) + self._input_set.tallies.export_to_xml() + + def _run_openmc(self): + # Initial run + if self._opts.mpi_exec is not None: + returncode = openmc.run(mpi_procs=self._opts.mpi_np, + openmc_exec=self._opts.exe, + mpi_exec=self._opts.mpi_exec) + + else: + returncode = openmc.run(openmc_exec=self._opts.exe) + + assert returncode == 0, 'CE OpenMC calculation did not exit' \ + 'successfully.' + + # Build MG Inputs + # Get data needed to execute Library calculations. + statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0] + sp = openmc.StatePoint(statepoint) + self.mgxs_lib.load_from_statepoint(sp) + self._input_set.mgxs_file, self._input_set.materials, \ + self._input_set.geometry = self.mgxs_lib.create_mg_mode() + + # Modify settings so we can run in MG mode + self._input_set.settings.cross_sections = './mgxs.xml' + self._input_set.settings.energy_mode = 'multi-group' + + # Write modified input files + self._input_set.settings.export_to_xml() + self._input_set.geometry.export_to_xml() + self._input_set.materials.export_to_xml() + self._input_set.mgxs_file.export_to_xml() + # Dont need tallies.xml, so remove the file + if os.path.exists('./tallies.xml'): + os.remove('./tallies.xml') + + # Re-run MG mode. + if self._opts.mpi_exec is not None: + returncode = openmc.run(mpi_procs=self._opts.mpi_np, + openmc_exec=self._opts.exe, + mpi_exec=self._opts.mpi_exec) + + else: + returncode = openmc.run(openmc_exec=self._opts.exe) + + def _cleanup(self): + super(MGXSTestHarness, self)._cleanup() + f = os.path.join(os.getcwd(), 'tallies.xml') + f = os.path.join(os.getcwd(), 'mgxs.xml') + if os.path.exists(f): os.remove(f) + + +if __name__ == '__main__': + harness = MGXSTestHarness('statepoint.10.*', True) + harness.main() From 08b8082b7bc78aeb968c0ac49bf9636745471bdc Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Sun, 29 May 2016 10:20:11 -0500 Subject: [PATCH 585/650] First round of fixes for @wbinventor comments on #656 --- docs/source/methods/geometry.rst | 2 + openmc/geometry.py | 2 +- openmc/lattice.py | 71 +++++++++++++++++++------------- openmc/universe.py | 11 ++++- 4 files changed, 55 insertions(+), 31 deletions(-) diff --git a/docs/source/methods/geometry.rst b/docs/source/methods/geometry.rst index f642cca108..bcd568ca3a 100644 --- a/docs/source/methods/geometry.rst +++ b/docs/source/methods/geometry.rst @@ -437,6 +437,8 @@ where :math:`(x_0, y_0, z_0)` are the coordinates to the lower-left-bottom corner of the lattice, and :math:`p_0, p_1, p_2` are the pitches along the :math:`x`, :math:`y`, and :math:`z` axes, respectively. +.. _hexagonal_indexing: + Hexagonal Lattice Indexing -------------------------- diff --git a/openmc/geometry.py b/openmc/geometry.py index 4e85929fc4..006151900d 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -75,7 +75,7 @@ class Geometry(object): Parameters ---------- point : 3-tuple of float - Cartesian coordinatesof the point + Cartesian coordinates of the point Returns ------- diff --git a/openmc/lattice.py b/openmc/lattice.py index d8deddc421..0277d50cb2 100644 --- a/openmc/lattice.py +++ b/openmc/lattice.py @@ -242,6 +242,14 @@ class RectLattice(Lattice): :attr:`RectLattice.outer`, and :attr:`RectLattice.universes` properties need to be set. + Most methods for this class use a natural indexing scheme wherein elements + are assigned an index corresponding to their position relative to the + (x,y,z) axes in a Cartesian coordinate system, i.e., an index of (0,0,0) in + the lattice gives the element whose x, y, and z coordinates are the + smallest. However, note that when universes are assigned to lattice elements + using the :attr:`RectLattice.universes` property, the array indices do not + correspond to natural indices. + Parameters ---------- lattice_id : int, optional @@ -449,12 +457,12 @@ class RectLattice(Lattice): element coordinate system """ - ix = floor((point[0] - self._lower_left[0])/self._pitch[0]) - iy = floor((point[1] - self._lower_left[1])/self._pitch[1]) + ix = floor((point[0] - self.lower_left[0])/self.pitch[0]) + iy = floor((point[1] - self.lower_left[1])/self.pitch[1]) if self.ndim == 2: idx = (ix, iy) else: - iz = floor((point[2] - self._lower_left[2])/self._pitch[2]) + iz = floor((point[2] - self.lower_left[2])/self.pitch[2]) idx = (ix, iy, iz) return idx, self.get_local_coordinates(point, idx) @@ -476,12 +484,12 @@ class RectLattice(Lattice): system """ - x = point[0] - (self._lower_left[0] + (idx[0] + 0.5)*self._pitch[0]) - y = point[1] - (self._lower_left[1] + (idx[1] + 0.5)*self._pitch[1]) + x = point[0] - (self.lower_left[0] + (idx[0] + 0.5)*self.pitch[0]) + y = point[1] - (self.lower_left[1] + (idx[1] + 0.5)*self.pitch[1]) if self.ndim == 2: z = point[2] else: - z = point[2] - (self._lower_left[2] + (idx[2] + 0.5)*self._pitch[2]) + z = point[2] - (self.lower_left[2] + (idx[2] + 0.5)*self.pitch[2]) return (x, y, z) def get_universe_index(self, idx): @@ -636,12 +644,19 @@ class RectLattice(Lattice): class HexLattice(Lattice): - """A lattice consisting of hexagonal prisms. + r"""A lattice consisting of hexagonal prisms. To completely define a hexagonal lattice, the :attr:`HexLattice.center`, :attr:`HexLattice.pitch`, :attr:`HexLattice.universes`, and :attr:`HexLattice.outer` properties need to be set. + Most methods for this class use a natural indexing scheme wherein elements + are assigned an index corresponding to their position relative to skewed + :math:`(x,\alpha,z)` axes as described fully in + :ref:`hexagonal_indexing`. However, note that when universes are assigned to + lattice elements using the :attr:`RectLattice.universes` property, the array + indices do not correspond to natural indices. + Parameters ---------- lattice_id : int, optional @@ -755,12 +770,12 @@ class HexLattice(Lattice): @property def indices(self): if self.num_axial is None: - return [(r, i) for r in range(self._num_rings) - for i in range(max(6*(self._num_rings - 1 - r), 1))] + return [(r, i) for r in range(self.num_rings) + for i in range(max(6*(self.num_rings - 1 - r), 1))] else: - return [(z, r, i) for z in range(self._num_axial) - for r in range(self._num_rings) - for i in range(max(6*(self._num_rings - 1 - r), 1))] + return [(z, r, i) for z in range(self.num_axial) + for r in range(self.num_rings) + for i in range(max(6*(self.num_rings - 1 - r), 1))] @center.setter def center(self, center): @@ -860,7 +875,7 @@ class HexLattice(Lattice): raise ValueError(msg) def find_element(self, point): - """Determine index of lattice element and local coordinates for a point + r"""Determine index of lattice element and local coordinates for a point Parameters ---------- @@ -870,7 +885,7 @@ class HexLattice(Lattice): Returns ------- 3-tuple of int - Indices of corresponding lattice element in (x,:math:`alpha`,z) + Indices of corresponding lattice element in :math:`(x,\alpha,z)` bases numpy.ndarray Carestian coordinates of the point in the corresponding lattice @@ -878,16 +893,16 @@ class HexLattice(Lattice): """ # Convert coordinates to skewed bases - x = point[0] - self._center[0] - y = point[1] - self._center[1] + x = point[0] - self.center[0] + y = point[1] - self.center[1] if self._num_axial is None: iz = 1 else: - z = point[2] - self._center[2] - iz = floor(z/self._pitch[1] + 0.5*self._num_axial) + z = point[2] - self.center[2] + iz = floor(z/self.pitch[1] + 0.5*self.num_axial) alpha = y - x/sqrt(3.) - ix = floor(x/(sqrt(0.75) * self._pitch[0])) - ia = floor(alpha/self._pitch[0]) + ix = floor(x/(sqrt(0.75) * self.pitch[0])) + ia = floor(alpha/self.pitch[0]) # Check four lattice elements to see which one is closest based on local # coordinates @@ -904,14 +919,14 @@ class HexLattice(Lattice): return idx_min, p_min def get_local_coordinates(self, point, idx): - """Determine local coordinates of a point within a lattice element + r"""Determine local coordinates of a point within a lattice element Parameters ---------- point : Iterable of float Cartesian coordinates of point idx : Iterable of int - Indices of lattice element in (x,:math:`alpha`,z) bases + Indices of lattice element in :math:`(x,\alpha,z)` bases Returns ------- @@ -920,17 +935,17 @@ class HexLattice(Lattice): system """ - x = point[0] - (self._center[0] + sqrt(0.75)*self._pitch[0]*idx[0]) - y = point[1] - (self._center[1] + (0.5*idx[0] + idx[1])*self._pitch[0]) + x = point[0] - (self.center[0] + sqrt(0.75)*self.pitch[0]*idx[0]) + y = point[1] - (self.center[1] + (0.5*idx[0] + idx[1])*self.pitch[0]) if self._num_axial is None: z = point[2] else: - z = point[2] - (self._center[2] + (idx[2] + 0.5 - 0.5*self._num_axial)* - self._pitch[1]) + z = point[2] - (self.center[2] + (idx[2] + 0.5 - 0.5*self.num_axial)* + self.pitch[1]) return (x, y, z) def get_universe_index(self, idx): - """Return index in the universes array corresponding to a lattice element index + r"""Return index in the universes array corresponding to a lattice element index Parameters ---------- @@ -970,7 +985,7 @@ class HexLattice(Lattice): return (idx[2], i_ring, i_within) def is_valid_index(self, idx): - """Determine whether lattice element index is within defined range + r"""Determine whether lattice element index is within defined range Parameters ---------- diff --git a/openmc/universe.py b/openmc/universe.py index d8e1c4daca..a28729d8e2 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -13,7 +13,6 @@ import openmc.checkvalue as cv if sys.version_info[0] >= 3: basestring = str - # A dictionary for storing IDs of cell elements that have already been written, # used to optimize the writing process WRITTEN_IDS = {} @@ -156,7 +155,7 @@ class Universe(object): return [] def plot(self, center=(0., 0., 0.), width=(1., 1.), pixels=(200, 200), - basis='xy', color_by='cell'): + basis='xy', color_by='cell', seed=None): """Display a slice plot of the universe. Parameters @@ -171,10 +170,18 @@ class Universe(object): The basis directions for the plot color_by : {'cell', 'material'} Indicate whether the plot should be colored by cell or by material + seed : hashable object or None + Hashable object which is used to seed the random number generator + used to select colors. If None, the generator is seeded from the + current time. """ import matplotlib.pyplot as plt + # Seed the random number generator + if seed is not None: + random.seed(seed) + if basis == 'xy': x_min = center[0] - 0.5*width[0] x_max = center[0] + 0.5*width[0] From 9ead31396e8821dda4079fb248720b3de2e530cc Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 29 May 2016 11:23:48 -0400 Subject: [PATCH 586/650] removed deletion of tallies.xml in new tests cleanup routine since its already deleted, and added printing of logfile so I can debug this test isue --- tests/run_tests.py | 1 + tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/run_tests.py b/tests/run_tests.py index 5a04f340a8..c8eeeebddc 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -474,6 +474,7 @@ for key in iter(tests): logfilename = os.path.splitext(logfilename)[0] logfilename = logfilename + '_{0}.log'.format(test.name) shutil.copy(logfile[0], logfilename) + with open(logfilename) as fh: print(fh.read()) # For coverage builds, use lcov to generate HTML output if test.coverage: diff --git a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py index 9bf70bbbbe..987d10ae05 100644 --- a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py +++ b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py @@ -83,7 +83,6 @@ class MGXSTestHarness(PyAPITestHarness): def _cleanup(self): super(MGXSTestHarness, self)._cleanup() - f = os.path.join(os.getcwd(), 'tallies.xml') f = os.path.join(os.getcwd(), 'mgxs.xml') if os.path.exists(f): os.remove(f) From 9898eea1f23ab5ed7cddb9528f44448abcc6b788 Mon Sep 17 00:00:00 2001 From: samuel shaner Date: Sun, 29 May 2016 17:05:24 +0000 Subject: [PATCH 587/650] fixed issue with expanded elements into their naturally-occurring isotopes --- openmc/element.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/element.py b/openmc/element.py index 66371aba9a..c391d08235 100644 --- a/openmc/element.py +++ b/openmc/element.py @@ -127,7 +127,7 @@ class Element(object): isotopes = [] for isotope, abundance in natural_abundance.items(): - if isotope.startswith(self.name): + if isotope.startswith(self.name + '-'): nuc = openmc.Nuclide(isotope, self.xs) isotopes.append((nuc, abundance)) return isotopes From 2a786f090dbc9576f5a7bdeb23cfd368655b8cc1 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 29 May 2016 13:18:32 -0400 Subject: [PATCH 588/650] Fixed failing test: not enough neutrons simulated so many cross sections were zero. Made OpenMC properly deal with that case and then added more neutrons to the test to make it a bit more useful --- src/mgxs_header.F90 | 23 ++++++++++++++----- tests/run_tests.py | 1 - .../inputs_true.dat | 2 +- .../results_true.dat | 2 +- .../test_mgxs_library_ce_to_mg.py | 13 ++++++++--- 5 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index 88c1b23e25..750a8df983 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -1485,8 +1485,13 @@ module mgxs_header nuc % scatter % energy(gin) % data(gout) mult_num(gout, gin) = mult_num(gout, gin) + atom_density * & nuscatt - mult_denom(gout, gin) = mult_denom(gout,gin) + atom_density * & - nuscatt / nuc % scatter % mult(gin) % data(gout) + if (nuc % scatter % mult(gin) % data(gout) > ZERO) then + mult_denom(gout, gin) = mult_denom(gout,gin) + atom_density * & + nuscatt / nuc % scatter % mult(gin) % data(gout) + else + ! Avoid division by zero + mult_denom(gout, gin) = mult_denom(gout,gin) + atom_density + end if end do end do @@ -1722,10 +1727,16 @@ module mgxs_header nuc % scatter(iazi, ipol) % obj % energy(gin) % data(gout) mult_num(gout, gin, iazi, ipol) = mult_num(gout, gin, iazi, ipol) + & atom_density * nuscatt - mult_denom(gout, gin, iazi, ipol) = & - mult_denom(gout, gin, iazi, ipol) + & - atom_density * nuscatt / & - nuc % scatter(iazi, ipol) % obj % mult(gin) % data(gout) + if (nuc % scatter(iazi, ipol) % obj % mult(gin) % data(gout) > ZERO) then + mult_denom(gout, gin, iazi, ipol) = & + mult_denom(gout, gin, iazi, ipol) + & + atom_density * nuscatt / & + nuc % scatter(iazi, ipol) % obj % mult(gin) % data(gout) + else + ! Avoid division by zero + mult_denom(gout, gin, iazi, ipol) = & + mult_denom(gout,gin, iazi, ipol) + atom_density + end if end do end do end do diff --git a/tests/run_tests.py b/tests/run_tests.py index c8eeeebddc..5a04f340a8 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -474,7 +474,6 @@ for key in iter(tests): logfilename = os.path.splitext(logfilename)[0] logfilename = logfilename + '_{0}.log'.format(test.name) shutil.copy(logfile[0], logfilename) - with open(logfilename) as fh: print(fh.read()) # For coverage builds, use lcov to generate HTML output if test.coverage: diff --git a/tests/test_mgxs_library_ce_to_mg/inputs_true.dat b/tests/test_mgxs_library_ce_to_mg/inputs_true.dat index ad4b639655..55943bad44 100644 --- a/tests/test_mgxs_library_ce_to_mg/inputs_true.dat +++ b/tests/test_mgxs_library_ce_to_mg/inputs_true.dat @@ -1 +1 @@ -15355a90181bc3a8ba70bcc9a89beff2c240dc75abbf26c3e3b6a940c4ec2028b238422ac26af08863c24ce6fc16d48d249f17cd0bce53df0141138deccfc81a \ No newline at end of file +f6442195628d3e6acd714d1ac123310a8c463ce6e76de2149783e4d9f2485752b53155f78bd9ae5e886b5f4717ef7c66b71959344051ea7f53b79148d59fe609 \ No newline at end of file diff --git a/tests/test_mgxs_library_ce_to_mg/results_true.dat b/tests/test_mgxs_library_ce_to_mg/results_true.dat index 1152dd2cca..b1f8559427 100644 --- a/tests/test_mgxs_library_ce_to_mg/results_true.dat +++ b/tests/test_mgxs_library_ce_to_mg/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.017325E+00 3.827758E-02 +1.006931E+00 3.262911E-03 diff --git a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py index 987d10ae05..17be8979e9 100644 --- a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py +++ b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py @@ -13,12 +13,19 @@ import openmc.mgxs class MGXSTestHarness(PyAPITestHarness): def _build_inputs(self): - # The openmc.mgxs module needs a summary.h5 file - self._input_set.settings.output = {'summary': True} - # Generate inputs using parent class routine super(MGXSTestHarness, self)._build_inputs() + # The openmc.mgxs module needs a summary.h5 file + self._input_set.settings.output = {'summary': True} + # Use a larger history count to get some scores in every material + self._input_set.settings.batches = 50 + self._input_set.settings.inactive = 10 + self._input_set.settings.particles = 1000 + self._sp_name = './statepoint.50.h5' + # Rewrite file + self._input_set.settings.export_to_xml() + # Initialize a two-group structure energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, 20.]) From 326cf4f84c66036cc2d2edf57d9b7f85abf52a92 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 29 May 2016 13:47:17 -0400 Subject: [PATCH 589/650] added pin cell input set and converted test_mgxs_library_ce_to_mg to use it. --- tests/input_set.py | 99 +++++++++++++++++++ .../inputs_true.dat | 2 +- .../results_true.dat | 2 +- .../test_mgxs_library_ce_to_mg.py | 11 ++- 4 files changed, 108 insertions(+), 6 deletions(-) diff --git a/tests/input_set.py b/tests/input_set.py index 2c6841e254..fe8ca7176f 100644 --- a/tests/input_set.py +++ b/tests/input_set.py @@ -570,6 +570,105 @@ class InputSet(object): self.plots.add_plot(plot) +class PinCellInputSet(object): + def __init__(self): + self.settings = openmc.Settings() + self.materials = openmc.Materials() + self.geometry = openmc.Geometry() + self.tallies = None + self.plots = None + + def export(self): + self.settings.export_to_xml() + self.materials.export_to_xml() + self.geometry.export_to_xml() + if self.tallies is not None: self.tallies.export_to_xml() + if self.plots is not None: self.plots.export_to_xml() + + def build_default_materials_and_geometry(self): + # Define materials. + fuel = openmc.Material(name='Fuel') + fuel.set_density('g/cm3', 10.29769) + fuel.add_nuclide("U-234", 4.4843e-6) + fuel.add_nuclide("U-235", 5.5815e-4) + fuel.add_nuclide("U-238", 2.2408e-2) + fuel.add_nuclide("O-16", 4.5829e-2) + + clad = openmc.Material(name='Cladding') + clad.set_density('g/cm3', 6.55) + clad.add_nuclide("Zr-90", 2.1827e-2) + clad.add_nuclide("Zr-91", 4.7600e-3) + clad.add_nuclide("Zr-92", 7.2758e-3) + clad.add_nuclide("Zr-94", 7.3734e-3) + clad.add_nuclide("Zr-96", 1.1879e-3) + + hot_water = openmc.Material(name='Hot borated water') + hot_water.set_density('g/cm3', 0.740582) + hot_water.add_nuclide("H-1", 4.9457e-2) + hot_water.add_nuclide("O-16", 2.4672e-2) + hot_water.add_nuclide("B-10", 8.0042e-6) + hot_water.add_nuclide("B-11", 3.2218e-5) + hot_water.add_s_alpha_beta('HH2O', '71t') + + # Define the materials file. + self.materials.default_xs = '71c' + self.materials += (fuel, clad, hot_water) + + # Instantiate ZCylinder surfaces + fuel_or = openmc.ZCylinder(x0=0, y0=0, R=0.39218, name='Fuel OR') + clad_or = openmc.ZCylinder(x0=0, y0=0, R=0.45720, name='Clad OR') + left = openmc.XPlane(x0=-0.63, name='left') + right = openmc.XPlane(x0=0.63, name='right') + bottom = openmc.YPlane(y0=-0.63, name='bottom') + top = openmc.YPlane(y0=0.63, name='top') + + left.boundary_type = 'reflective' + right.boundary_type = 'reflective' + top.boundary_type = 'reflective' + bottom.boundary_type = 'reflective' + + # Instantiate Cells + fuel_pin = openmc.Cell(name='cell 1') + cladding = openmc.Cell(name='cell 3') + water = openmc.Cell(name='cell 2') + + # Use surface half-spaces to define regions + fuel_pin.region = -fuel_or + cladding.region = +fuel_or & -clad_or + water.region = +clad_or & +left & -right & +bottom & -top + + # Register Materials with Cells + fuel_pin.fill = fuel + cladding.fill = clad + water.fill = hot_water + + # Instantiate Universe + root = openmc.Universe(universe_id=0, name='root universe') + + # Register Cells with Universe + root.add_cells([fuel_pin, cladding, water]) + + # Instantiate a Geometry, register the root Universe, and export to XML + self.geometry.root_universe = root + + def build_default_settings(self): + self.settings.batches = 10 + self.settings.inactive = 5 + self.settings.particles = 100 + self.settings.source = Source(space=Box([-0.63, -0.63, -1], + [0.63, 0.63, 1], + only_fissionable=True)) + + def build_defualt_plots(self): + plot = openmc.Plot() + plot.filename = 'mat' + plot.origin = (0.0, 0.0, 0) + plot.width = (1.26, 1.26) + plot.pixels = (300, 300) + plot.color = 'mat' + + self.plots.add_plot(plot) + class MGInputSet(InputSet): def build_default_materials_and_geometry(self): # Define materials needed for 1D/1G slab problem diff --git a/tests/test_mgxs_library_ce_to_mg/inputs_true.dat b/tests/test_mgxs_library_ce_to_mg/inputs_true.dat index 55943bad44..46defbd0da 100644 --- a/tests/test_mgxs_library_ce_to_mg/inputs_true.dat +++ b/tests/test_mgxs_library_ce_to_mg/inputs_true.dat @@ -1 +1 @@ -f6442195628d3e6acd714d1ac123310a8c463ce6e76de2149783e4d9f2485752b53155f78bd9ae5e886b5f4717ef7c66b71959344051ea7f53b79148d59fe609 \ No newline at end of file +2db36402006f1aec10d484836303d5d804516ea9945f0508e610994b255185cb7f42dc3ed27dfd93355018d187100332011e921391059f83d3a5fda85e80d789 \ No newline at end of file diff --git a/tests/test_mgxs_library_ce_to_mg/results_true.dat b/tests/test_mgxs_library_ce_to_mg/results_true.dat index b1f8559427..16441af8c7 100644 --- a/tests/test_mgxs_library_ce_to_mg/results_true.dat +++ b/tests/test_mgxs_library_ce_to_mg/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.006931E+00 3.262911E-03 +1.094839E+00 1.203524E-02 diff --git a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py index 17be8979e9..c9db2c45ff 100644 --- a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py +++ b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py @@ -6,12 +6,15 @@ import glob import hashlib sys.path.insert(0, os.pardir) from testing_harness import PyAPITestHarness +from input_set import PinCellInputSet import openmc import openmc.mgxs class MGXSTestHarness(PyAPITestHarness): def _build_inputs(self): + # Set the input set to use the pincell model + self._input_set = PinCellInputSet() # Generate inputs using parent class routine super(MGXSTestHarness, self)._build_inputs() @@ -19,10 +22,10 @@ class MGXSTestHarness(PyAPITestHarness): # The openmc.mgxs module needs a summary.h5 file self._input_set.settings.output = {'summary': True} # Use a larger history count to get some scores in every material - self._input_set.settings.batches = 50 - self._input_set.settings.inactive = 10 - self._input_set.settings.particles = 1000 - self._sp_name = './statepoint.50.h5' + # self._input_set.settings.batches = 50 + # self._input_set.settings.inactive = 10 + # self._input_set.settings.particles = 1000 + # self._sp_name = './statepoint.50.h5' # Rewrite file self._input_set.settings.export_to_xml() From 117ca2e1b24342835fb85b56d6b4afe5bf03ef4f Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 29 May 2016 13:50:23 -0400 Subject: [PATCH 590/650] Left some superfluous code in there. removed now --- .../test_mgxs_library_ce_to_mg.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py index c9db2c45ff..fb782e8281 100644 --- a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py +++ b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py @@ -16,18 +16,14 @@ class MGXSTestHarness(PyAPITestHarness): # Set the input set to use the pincell model self._input_set = PinCellInputSet() + # The openmc.mgxs module needs a summary.h5 file + self._input_set.settings.output = {'summary': True} + # Generate inputs using parent class routine super(MGXSTestHarness, self)._build_inputs() - # The openmc.mgxs module needs a summary.h5 file - self._input_set.settings.output = {'summary': True} - # Use a larger history count to get some scores in every material - # self._input_set.settings.batches = 50 - # self._input_set.settings.inactive = 10 - # self._input_set.settings.particles = 1000 - # self._sp_name = './statepoint.50.h5' # Rewrite file - self._input_set.settings.export_to_xml() + # self._input_set.settings.export_to_xml() # Initialize a two-group structure energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, 20.]) From e201b898ed17c0aa195c6db4d5e40557f5add8c0 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 29 May 2016 14:09:27 -0400 Subject: [PATCH 591/650] PEP8 compliance changes to the new test, testing_harness and input_set --- tests/input_set.py | 46 +++++++++++-------- .../test_mgxs_library_ce_to_mg.py | 6 ++- tests/testing_harness.py | 30 +++++++----- 3 files changed, 49 insertions(+), 33 deletions(-) diff --git a/tests/input_set.py b/tests/input_set.py index fe8ca7176f..ae3ee23010 100644 --- a/tests/input_set.py +++ b/tests/input_set.py @@ -15,8 +15,10 @@ class InputSet(object): self.settings.export_to_xml() self.materials.export_to_xml() self.geometry.export_to_xml() - if self.tallies is not None: self.tallies.export_to_xml() - if self.plots is not None: self.plots.export_to_xml() + if self.tallies is not None: + self.tallies.export_to_xml() + if self.plots is not None: + self.plots.export_to_xml() def build_default_materials_and_geometry(self): # Define materials. @@ -82,7 +84,7 @@ class InputSet(object): hot_water.add_s_alpha_beta('HH2O', '71t') rpv_steel = openmc.Material(name='Reactor pressure vessel steel', - material_id=5) + material_id=5) rpv_steel.set_density('g/cm3', 7.9) rpv_steel.add_nuclide("Fe-54", 0.05437098, 'wo') rpv_steel.add_nuclide("Fe-56", 0.88500663, 'wo') @@ -113,7 +115,7 @@ class InputSet(object): rpv_steel.add_nuclide("Cu-65", 0.0006304, 'wo') lower_rad_ref = openmc.Material(name='Lower radial reflector', - material_id=6) + material_id=6) lower_rad_ref.set_density('g/cm3', 4.32) lower_rad_ref.add_nuclide("H-1", 0.0095661, 'wo') lower_rad_ref.add_nuclide("O-16", 0.0759107, 'wo') @@ -189,7 +191,8 @@ class InputSet(object): bot_plate.add_nuclide("Cr-54", 0.004612692337, 'wo') bot_plate.add_s_alpha_beta('HH2O', '71t') - bot_nozzle = openmc.Material(name='Bottom nozzle region', material_id=9) + bot_nozzle = openmc.Material(name='Bottom nozzle region', + material_id=9) bot_nozzle.set_density('g/cm3', 2.53) bot_nozzle.add_nuclide("H-1", 0.0245014, 'wo') bot_nozzle.add_nuclide("O-16", 0.1944274, 'wo') @@ -252,7 +255,8 @@ class InputSet(object): top_fa.add_nuclide("Zr-96", 0.02511169542, 'wo') top_fa.add_s_alpha_beta('HH2O', '71t') - bot_fa = openmc.Material(name='Bottom of fuel assemblies', material_id=12) + bot_fa = openmc.Material(name='Bottom of fuel assemblies', + material_id=12) bot_fa.set_density('g/cm3', 1.762) bot_fa.add_nuclide("H-1", 0.0292856, 'wo') bot_fa.add_nuclide("O-16", 0.2323919, 'wo') @@ -570,6 +574,7 @@ class InputSet(object): self.plots.add_plot(plot) + class PinCellInputSet(object): def __init__(self): self.settings = openmc.Settings() @@ -582,8 +587,10 @@ class PinCellInputSet(object): self.settings.export_to_xml() self.materials.export_to_xml() self.geometry.export_to_xml() - if self.tallies is not None: self.tallies.export_to_xml() - if self.plots is not None: self.plots.export_to_xml() + if self.tallies is not None: + self.tallies.export_to_xml() + if self.plots is not None: + self.plots.export_to_xml() def build_default_materials_and_geometry(self): # Define materials. @@ -669,6 +676,7 @@ class PinCellInputSet(object): self.plots.add_plot(plot) + class MGInputSet(InputSet): def build_default_materials_and_geometry(self): # Define materials needed for 1D/1G slab problem @@ -694,21 +702,21 @@ class MGInputSet(InputSet): # Define surfaces. # Assembly/Problem Boundary - left = openmc.XPlane(x0=0.0, surface_id=200, - boundary_type='reflective') - right = openmc.XPlane(x0=10.0, surface_id=201, - boundary_type='reflective') + left = openmc.XPlane(x0=0.0, surface_id=200, + boundary_type='reflective') + right = openmc.XPlane(x0=10.0, surface_id=201, + boundary_type='reflective') bottom = openmc.YPlane(y0=0.0, surface_id=300, boundary_type='reflective') - top = openmc.YPlane(y0=10.0, surface_id=301, - boundary_type='reflective') + top = openmc.YPlane(y0=10.0, surface_id=301, + boundary_type='reflective') - down = openmc.ZPlane(z0=0.0, surface_id=0, - boundary_type='reflective') + down = openmc.ZPlane(z0=0.0, surface_id=0, + boundary_type='reflective') fuel_clad_intfc = openmc.ZPlane(z0=2.0, surface_id=1) clad_lwtr_intfc = openmc.ZPlane(z0=2.4, surface_id=2) - up = openmc.ZPlane(z0=5.0, surface_id=3, - boundary_type='reflective') + up = openmc.ZPlane(z0=5.0, surface_id=3, + boundary_type='reflective') # Define cells c1 = openmc.Cell(cell_id=1) @@ -724,7 +732,7 @@ class MGInputSet(InputSet): # Define root universe. root = openmc.Universe(universe_id=0, name='root universe') - root.add_cells((c1,c2,c3)) + root.add_cells((c1, c2, c3)) # Assign root universe to geometry self.geometry.root_universe = root diff --git a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py index fb782e8281..e091f28f7f 100644 --- a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py +++ b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py @@ -26,7 +26,8 @@ class MGXSTestHarness(PyAPITestHarness): # self._input_set.settings.export_to_xml() # Initialize a two-group structure - energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, 20.]) + energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, + 20.]) # Initialize MGXS Library for a few cross section types self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) @@ -90,7 +91,8 @@ class MGXSTestHarness(PyAPITestHarness): def _cleanup(self): super(MGXSTestHarness, self)._cleanup() f = os.path.join(os.getcwd(), 'mgxs.xml') - if os.path.exists(f): os.remove(f) + if os.path.exists(f): + os.remove(f) if __name__ == '__main__': diff --git a/tests/testing_harness.py b/tests/testing_harness.py index e659768856..d360184045 100644 --- a/tests/testing_harness.py +++ b/tests/testing_harness.py @@ -6,7 +6,6 @@ import hashlib from optparse import OptionParser import os import shutil -from subprocess import Popen, STDOUT, PIPE, call import sys import numpy as np @@ -18,6 +17,7 @@ import openmc class TestHarness(object): """General class for running OpenMC regression tests.""" + def __init__(self, statepoint_name, tallies_present=False): self._sp_name = statepoint_name self._tallies = tallies_present @@ -74,13 +74,13 @@ class TestHarness(object): def _test_output_created(self): """Make sure statepoint.* and tallies.out have been created.""" statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name)) - assert len(statepoint) == 1, 'Either multiple or no statepoint files ' \ - 'exist.' + assert len(statepoint) == 1, 'Either multiple or no statepoint files' \ + ' exist.' assert statepoint[0].endswith('h5'), \ - 'Statepoint file is not a HDF5 file.' + 'Statepoint file is not a HDF5 file.' if self._tallies: assert os.path.exists(os.path.join(os.getcwd(), 'tallies.out')), \ - 'Tally output file does not exist.' + 'Tally output file does not exist.' def _get_results(self, hash_output=False): """Digest info in the statepoint and return as a string.""" @@ -98,7 +98,7 @@ class TestHarness(object): tally_num = 1 for tally_ind in sp.tallies: tally = sp.tallies[tally_ind] - results = np.zeros((tally.sum.size*2, )) + results = np.zeros((tally.sum.size * 2, )) results[0::2] = tally.sum.ravel() results[1::2] = tally.sum_sq.ravel() results = ['{0:12.6E}'.format(x) for x in results] @@ -144,6 +144,7 @@ class TestHarness(object): class HashedTestHarness(TestHarness): """Specialized TestHarness that hashes the results.""" + def _get_results(self): """Digest info in the statepoint and return as a string.""" return super(HashedTestHarness, self)._get_results(True) @@ -151,6 +152,7 @@ class HashedTestHarness(TestHarness): class CMFDTestHarness(TestHarness): """Specialized TestHarness for running OpenMC CMFD tests.""" + def _get_results(self): """Digest info in the statepoint and return as a string.""" # Read the statepoint file. @@ -184,6 +186,7 @@ class CMFDTestHarness(TestHarness): class ParticleRestartTestHarness(TestHarness): """Specialized TestHarness for running OpenMC particle restart tests.""" + def _run_openmc(self): # Set arguments args = {'openmc_exec': self._opts.exe} @@ -204,9 +207,9 @@ class ParticleRestartTestHarness(TestHarness): """Make sure the restart file has been created.""" particle = glob.glob(os.path.join(os.getcwd(), self._sp_name)) assert len(particle) == 1, 'Either multiple or no particle restart ' \ - 'files exist.' + 'files exist.' assert particle[0].endswith('h5'), \ - 'Particle restart file is not a HDF5 file.' + 'Particle restart file is not a HDF5 file.' def _get_results(self): """Digest info in the statepoint and return as a string.""" @@ -229,10 +232,10 @@ class ParticleRestartTestHarness(TestHarness): outstr += 'particle energy:\n' outstr += "{0:12.6E}\n".format(p.energy) outstr += 'particle xyz:\n' - outstr += "{0:12.6E} {1:12.6E} {2:12.6E}\n".format(p.xyz[0],p.xyz[1], + outstr += "{0:12.6E} {1:12.6E} {2:12.6E}\n".format(p.xyz[0], p.xyz[1], p.xyz[2]) outstr += 'particle uvw:\n' - outstr += "{0:12.6E} {1:12.6E} {2:12.6E}\n".format(p.uvw[0],p.uvw[1], + outstr += "{0:12.6E} {1:12.6E} {2:12.6E}\n".format(p.uvw[0], p.uvw[1], p.uvw[2]) return outstr @@ -240,13 +243,15 @@ class ParticleRestartTestHarness(TestHarness): class PyAPITestHarness(TestHarness): def __init__(self, statepoint_name, tallies_present=False, mg=False): - super(PyAPITestHarness, self).__init__(statepoint_name, tallies_present) + super(PyAPITestHarness, self).__init__(statepoint_name, + tallies_present) self.parser.add_option('--build-inputs', dest='build_only', action='store_true', default=False) if mg: self._input_set = MGInputSet() else: self._input_set = InputSet() + def main(self): """Accept commandline arguments and either run or update tests.""" (self._opts, self._args) = self.parser.parse_args() @@ -321,7 +326,8 @@ class PyAPITestHarness(TestHarness): compare = filecmp.cmp('inputs_test.dat', 'inputs_true.dat') if not compare: f = open('inputs_test.dat') - for line in f.readlines(): print(line) + for line in f.readlines(): + print(line) f.close() os.rename('inputs_test.dat', 'inputs_error.dat') assert compare, 'Input files are broken.' From 56f2a0b2e61e9d37b783e1b5a79abc4b9bad1d80 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 29 May 2016 14:12:47 -0400 Subject: [PATCH 592/650] Removed final few lines of superfluous code/comments --- .../test_mgxs_library_ce_to_mg.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py index e091f28f7f..17358e21ea 100644 --- a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py +++ b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py @@ -16,15 +16,9 @@ class MGXSTestHarness(PyAPITestHarness): # Set the input set to use the pincell model self._input_set = PinCellInputSet() - # The openmc.mgxs module needs a summary.h5 file - self._input_set.settings.output = {'summary': True} - # Generate inputs using parent class routine super(MGXSTestHarness, self)._build_inputs() - # Rewrite file - # self._input_set.settings.export_to_xml() - # Initialize a two-group structure energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, 20.]) From 3368d7aebeedd4f741c4aa2975bcdcd1aac0e927 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 29 May 2016 14:18:31 -0400 Subject: [PATCH 593/650] Converting test_mgxs_library_*_nuclides tests to use openmc.mgxs.MGXS_TYPES so the test always tests the latest list of Mgxs classes --- .../test_mgxs_library_no_nuclides.py | 11 ++++------- .../test_mgxs_library_nuclides.py | 11 ++++------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py b/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py index 1413f869c8..8f074f4f6b 100644 --- a/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py +++ b/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py @@ -20,17 +20,14 @@ class MGXSTestHarness(PyAPITestHarness): super(MGXSTestHarness, self)._build_inputs() # Initialize a two-group structure - energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, 20.]) + energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, + 20.]) # Initialize MGXS Library for a few cross section types self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = False - self.mgxs_lib.mgxs_types = ['total', 'transport', 'nu-transport', - 'absorption', 'capture', 'fission', - 'nu-fission', 'kappa-fission', 'scatter', - 'nu-scatter', 'scatter matrix', - 'nu-scatter matrix', 'multiplicity matrix', - 'nu-fission matrix', 'chi'] + # Test all MGXS types + self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES self.mgxs_lib.energy_groups = energy_groups self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'material' diff --git a/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py b/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py index b9ffdbcaa6..0bd7732484 100644 --- a/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py +++ b/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py @@ -20,17 +20,14 @@ class MGXSTestHarness(PyAPITestHarness): super(MGXSTestHarness, self)._build_inputs() # Initialize a two-group structure - energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, 20.]) + energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, + 20.]) # Initialize MGXS Library for a few cross section types self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = True - self.mgxs_lib.mgxs_types = ['total', 'transport', 'nu-transport', - 'absorption', 'capture', 'fission', - 'nu-fission', 'kappa-fission', 'scatter', - 'nu-scatter', 'scatter matrix', - 'nu-scatter matrix', 'multiplicity matrix', - 'nu-fission matrix', 'chi'] + # Test all MGXS types + self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES self.mgxs_lib.energy_groups = energy_groups self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'material' From a3ccb5c7cd75dab8590ce66357fb8876fe71e025 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 29 May 2016 14:57:00 -0400 Subject: [PATCH 594/650] Added all mgxs types to tally types for all mgxs library tests and also converted them (save for the distribcell tests) to use the pincell model. Also, this showed there was an error in my multiplicitymatrix class, but thats fixed now --- openmc/mgxs/mgxs.py | 2 +- .../inputs_true.dat | 2 +- .../test_mgxs_library_ce_to_mg.py | 2 +- .../inputs_true.dat | 2 +- .../results_true.dat | 216 ++-- .../test_mgxs_library_condense.py | 13 +- .../inputs_true.dat | 2 +- .../results_true.dat | 25 + .../test_mgxs_library_distribcell.py | 8 +- tests/test_mgxs_library_hdf5/inputs_true.dat | 2 +- tests/test_mgxs_library_hdf5/results_true.dat | 381 +++--- .../test_mgxs_library_hdf5.py | 14 +- .../inputs_true.dat | 2 +- .../results_true.dat | 1067 +++-------------- .../test_mgxs_library_no_nuclides.py | 6 +- .../inputs_true.dat | 2 +- .../results_true.dat | 2 +- .../test_mgxs_library_nuclides.py | 6 +- 18 files changed, 507 insertions(+), 1247 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index b79780ffc2..829f881113 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -3680,7 +3680,7 @@ class MultiplicityMatrixXS(MatrixMGXS): groups=None, by_nuclide=False, name=''): super(MultiplicityMatrixXS, self).__init__(domain, domain_type, groups, by_nuclide, name) - self._rxn_type = 'multiplicity' + self._rxn_type = 'multiplicity matrix' @property def scores(self): diff --git a/tests/test_mgxs_library_ce_to_mg/inputs_true.dat b/tests/test_mgxs_library_ce_to_mg/inputs_true.dat index 46defbd0da..9633a46a80 100644 --- a/tests/test_mgxs_library_ce_to_mg/inputs_true.dat +++ b/tests/test_mgxs_library_ce_to_mg/inputs_true.dat @@ -1 +1 @@ -2db36402006f1aec10d484836303d5d804516ea9945f0508e610994b255185cb7f42dc3ed27dfd93355018d187100332011e921391059f83d3a5fda85e80d789 \ No newline at end of file +34d5891f6f17c2d4b686b814ba61ba0045bc4289e278b1c3c47dbba59b83837fcfe15f2b8d58e7a2b07627b73d51e40348d70e9ed36dbb7cc94468d61c068c4c \ No newline at end of file diff --git a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py index 17358e21ea..0f7cba4a87 100644 --- a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py +++ b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py @@ -90,5 +90,5 @@ class MGXSTestHarness(PyAPITestHarness): if __name__ == '__main__': - harness = MGXSTestHarness('statepoint.10.*', True) + harness = MGXSTestHarness('statepoint.10.*', False) harness.main() diff --git a/tests/test_mgxs_library_condense/inputs_true.dat b/tests/test_mgxs_library_condense/inputs_true.dat index 3643c9a2ef..79ca0ec660 100644 --- a/tests/test_mgxs_library_condense/inputs_true.dat +++ b/tests/test_mgxs_library_condense/inputs_true.dat @@ -1 +1 @@ -104e7fb527770ac5d3fc636da7716e8fb05d55761253d30516c899f466e6b38ffd881611a3d0cdf65c6af058c32f6f6758c68782be7a170d21024bdae751862f \ No newline at end of file +317a63a9dd3bfd84e969667b00f46018e56c04c356461a75103f63569e6b70c84d0da7f5e611faaf1b2631330b05ab4346223d3d843018ce0ce8876671a450c0 \ No newline at end of file diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index 190d652d85..13c277b15f 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -1,132 +1,108 @@ material group in nuclide mean std. dev. -0 1 1 total 0.412084 0.02359 +0 10000 1 total 0.453624 0.021053 material group in nuclide mean std. dev. -0 1 1 total 0.076425 0.003691 +0 10000 1 total 0.400852 0.022858 + material group in nuclide mean std. dev. +0 10000 1 total 0.400852 0.022858 + material group in nuclide mean std. dev. +0 10000 1 total 0.064903 0.004313 + material group in nuclide mean std. dev. +0 10000 1 total 0.028048 0.00458 + material group in nuclide mean std. dev. +0 10000 1 total 0.036855 0.002622 + material group in nuclide mean std. dev. +0 10000 1 total 0.090649 0.00641 + material group in nuclide mean std. dev. +0 10000 1 total 7.137955 0.507364 + material group in nuclide mean std. dev. +0 10000 1 total 0.388721 0.01783 + material group in nuclide mean std. dev. +0 10000 1 total 0.389304 0.023076 material group in group out nuclide moment mean std. dev. -0 1 1 1 total P0 0.384780 0.022253 -1 1 1 1 total P1 0.039277 0.004308 -2 1 1 1 total P2 0.017574 0.002402 -3 1 1 1 total P3 0.012203 0.002164 - material group out nuclide mean std. dev. -0 1 1 total 1.0 0.055333 - material group in nuclide mean std. dev. -0 2 1 total 0.241262 0.00841 - material group in nuclide mean std. dev. -0 2 1 total 0.0 0.0 +0 10000 1 1 total P0 0.389304 0.023146 +1 10000 1 1 total P1 0.046224 0.005907 +2 10000 1 1 total P2 0.017984 0.002883 +3 10000 1 1 total P3 0.006628 0.002457 material group in group out nuclide moment mean std. dev. -0 2 1 1 total P0 0.272369 0.006872 -1 2 1 1 total P1 0.031107 0.005483 -2 2 1 1 total P2 0.025999 0.006151 -3 2 1 1 total P3 0.003219 0.003312 +0 10000 1 1 total P0 0.389304 0.023146 +1 10000 1 1 total P1 0.046224 0.005907 +2 10000 1 1 total P2 0.017984 0.002883 +3 10000 1 1 total P3 0.006628 0.002457 + material group in group out nuclide mean std. dev. +0 10000 1 1 total 1.0 0.066111 + material group in group out nuclide mean std. dev. +0 10000 1 1 total 0.085835 0.005592 material group out nuclide mean std. dev. -0 2 1 total 0.0 0.0 +0 10000 1 total 1.0 0.046071 material group in nuclide mean std. dev. -0 3 1 total 0.400028 0.034667 - material group in nuclide mean std. dev. -0 3 1 total 0.0 0.0 - material group in group out nuclide moment mean std. dev. -0 3 1 1 total P0 0.794999 0.036548 -1 3 1 1 total P1 0.401537 0.016175 -2 3 1 1 total P2 0.143623 0.008719 -3 3 1 1 total P3 0.001991 0.004433 - material group out nuclide mean std. dev. -0 3 1 total 0.0 0.0 +0 10001 1 total 0.311594 0.013793 material group in nuclide mean std. dev. -0 4 1 total 0.377402 0.072937 - material group in nuclide mean std. dev. -0 4 1 total 0.0 0.0 - material group in group out nuclide moment mean std. dev. -0 4 1 1 total P0 0.727311 0.080096 -1 4 1 1 total P1 0.355839 0.037901 -2 4 1 1 total P2 0.124483 0.015823 -3 4 1 1 total P3 0.012168 0.006224 - material group out nuclide mean std. dev. -0 4 1 total 0.0 0.0 - material group in nuclide mean std. dev. -0 5 1 total 0.0 0.0 - material group in nuclide mean std. dev. -0 5 1 total 0.0 0.0 - material group in group out nuclide moment mean std. dev. -0 5 1 1 total P0 0.0 0.0 -1 5 1 1 total P1 0.0 0.0 -2 5 1 1 total P2 0.0 0.0 -3 5 1 1 total P3 0.0 0.0 - material group out nuclide mean std. dev. -0 5 1 total 0.0 0.0 - material group in nuclide mean std. dev. -0 6 1 total 0.0 0.0 - material group in nuclide mean std. dev. -0 6 1 total 0.0 0.0 - material group in group out nuclide moment mean std. dev. -0 6 1 1 total P0 0.0 0.0 -1 6 1 1 total P1 0.0 0.0 -2 6 1 1 total P2 0.0 0.0 -3 6 1 1 total P3 0.0 0.0 - material group out nuclide mean std. dev. -0 6 1 total 0.0 0.0 - material group in nuclide mean std. dev. -0 7 1 total 0.0 0.0 - material group in nuclide mean std. dev. -0 7 1 total 0.0 0.0 - material group in group out nuclide moment mean std. dev. -0 7 1 1 total P0 0.0 0.0 -1 7 1 1 total P1 0.0 0.0 -2 7 1 1 total P2 0.0 0.0 -3 7 1 1 total P3 0.0 0.0 - material group out nuclide mean std. dev. -0 7 1 total 0.0 0.0 - material group in nuclide mean std. dev. -0 8 1 total 0.0 0.0 - material group in nuclide mean std. dev. -0 8 1 total 0.0 0.0 - material group in group out nuclide moment mean std. dev. -0 8 1 1 total P0 0.0 0.0 -1 8 1 1 total P1 0.0 0.0 -2 8 1 1 total P2 0.0 0.0 -3 8 1 1 total P3 0.0 0.0 - material group out nuclide mean std. dev. -0 8 1 total 0.0 0.0 +0 10001 1 total 0.279255 0.02919 material group in nuclide mean std. dev. -0 9 1 total 0.600536 0.748875 - material group in nuclide mean std. dev. -0 9 1 total 0.0 0.0 - material group in group out nuclide moment mean std. dev. -0 9 1 1 total P0 0.720380 0.771015 -1 9 1 1 total P1 0.119844 0.184691 -2 9 1 1 total P2 0.038522 0.064485 -3 9 1 1 total P3 0.056023 0.050595 - material group out nuclide mean std. dev. -0 9 1 total 0.0 0.0 - material group in nuclide mean std. dev. -0 10 1 total 0.235515 0.613974 - material group in nuclide mean std. dev. -0 10 1 total 0.0 0.0 - material group in group out nuclide moment mean std. dev. -0 10 1 1 total P0 0.501009 0.708534 -1 10 1 1 total P1 0.265494 0.375465 -2 10 1 1 total P2 0.141979 0.200788 -3 10 1 1 total P3 0.074258 0.105017 - material group out nuclide mean std. dev. -0 10 1 total 0.0 0.0 - material group in nuclide mean std. dev. -0 11 1 total 0.510145 0.741941 - material group in nuclide mean std. dev. -0 11 1 total 0.0 0.0 - material group in group out nuclide moment mean std. dev. -0 11 1 1 total P0 0.804661 0.817658 -1 11 1 1 total P1 0.312803 0.315315 -2 11 1 1 total P2 0.168113 0.172935 -3 11 1 1 total P3 0.003808 0.037911 - material group out nuclide mean std. dev. -0 11 1 total 0.0 0.0 +0 10001 1 total 0.279255 0.02919 material group in nuclide mean std. dev. -0 12 1 total 0.73836 0.825631 +0 10001 1 total 0.00221 0.000286 + material group in nuclide mean std. dev. +0 10001 1 total 0.00221 0.000286 material group in nuclide mean std. dev. -0 12 1 total 0.0 0.0 +0 10001 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 10001 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 10001 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 10001 1 total 0.309384 0.013551 + material group in nuclide mean std. dev. +0 10001 1 total 0.307987 0.029308 material group in group out nuclide moment mean std. dev. -0 12 1 1 total P0 0.943429 0.856119 -1 12 1 1 total P1 0.220164 0.163180 -2 12 1 1 total P2 0.052884 0.042440 -3 12 1 1 total P3 0.039939 0.032867 +0 10001 1 1 total P0 0.307987 0.029308 +1 10001 1 1 total P1 0.030617 0.007464 +2 10001 1 1 total P2 0.018911 0.004323 +3 10001 1 1 total P3 0.006235 0.003338 + material group in group out nuclide moment mean std. dev. +0 10001 1 1 total P0 0.307987 0.029308 +1 10001 1 1 total P1 0.030617 0.007464 +2 10001 1 1 total P2 0.018911 0.004323 +3 10001 1 1 total P3 0.006235 0.003338 + material group in group out nuclide mean std. dev. +0 10001 1 1 total 1.0 0.095039 + material group in group out nuclide mean std. dev. +0 10001 1 1 total 0.0 0.0 material group out nuclide mean std. dev. -0 12 1 total 0.0 0.0 +0 10001 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 10002 1 total 0.904999 0.043964 + material group in nuclide mean std. dev. +0 10002 1 total 0.499184 0.040914 + material group in nuclide mean std. dev. +0 10002 1 total 0.499184 0.040914 + material group in nuclide mean std. dev. +0 10002 1 total 0.00606 0.000555 + material group in nuclide mean std. dev. +0 10002 1 total 0.00606 0.000555 + material group in nuclide mean std. dev. +0 10002 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 10002 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 10002 1 total 0.0 0.0 + material group in nuclide mean std. dev. +0 10002 1 total 0.898938 0.043493 + material group in nuclide mean std. dev. +0 10002 1 total 0.903415 0.043959 + material group in group out nuclide moment mean std. dev. +0 10002 1 1 total P0 0.903415 0.043586 +1 10002 1 1 total P1 0.410417 0.015877 +2 10002 1 1 total P2 0.143301 0.007187 +3 10002 1 1 total P3 0.008739 0.003571 + material group in group out nuclide moment mean std. dev. +0 10002 1 1 total P0 0.903415 0.043586 +1 10002 1 1 total P1 0.410417 0.015877 +2 10002 1 1 total P2 0.143301 0.007187 +3 10002 1 1 total P3 0.008739 0.003571 + material group in group out nuclide mean std. dev. +0 10002 1 1 total 1.0 0.056867 + material group in group out nuclide mean std. dev. +0 10002 1 1 total 0.0 0.0 + material group out nuclide mean std. dev. +0 10002 1 total 0.0 0.0 diff --git a/tests/test_mgxs_library_condense/test_mgxs_library_condense.py b/tests/test_mgxs_library_condense/test_mgxs_library_condense.py index 2b834fa988..5571b59f2e 100644 --- a/tests/test_mgxs_library_condense/test_mgxs_library_condense.py +++ b/tests/test_mgxs_library_condense/test_mgxs_library_condense.py @@ -6,27 +6,28 @@ import glob import hashlib sys.path.insert(0, os.pardir) from testing_harness import PyAPITestHarness +from input_set import PinCellInputSet import openmc import openmc.mgxs class MGXSTestHarness(PyAPITestHarness): def _build_inputs(self): - - # The openmc.mgxs module needs a summary.h5 file - self._input_set.settings.output = {'summary': True} + # Set the input set to use the pincell model + self._input_set = PinCellInputSet() # Generate inputs using parent class routine super(MGXSTestHarness, self)._build_inputs() # Initialize a two-group structure - energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, 20.]) + energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, + 20.]) # Initialize MGXS Library for a few cross section types self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = False - self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', - 'nu-scatter matrix', 'chi'] + # Test all MGXS types + self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES self.mgxs_lib.energy_groups = energy_groups self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'material' diff --git a/tests/test_mgxs_library_distribcell/inputs_true.dat b/tests/test_mgxs_library_distribcell/inputs_true.dat index 21927c8008..dc67b7c562 100644 --- a/tests/test_mgxs_library_distribcell/inputs_true.dat +++ b/tests/test_mgxs_library_distribcell/inputs_true.dat @@ -1 +1 @@ -018bbbc2099f7b94180b391e46e42fc9a82498c60b3f8f7f4c91480ea373427932d287fe571d53b2397f329e71485e7155d7644f0f995bbcb458ba3e872ab043 \ No newline at end of file +88849ac150f9c389e67de96356dfceb0bde08643f68ca25699e67d263995b95893d7340a2b08b2f0f5075fc5020f73553c5287ec6c56ace2f35ce0214961e123 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index 84e76965d5..5000d60c3b 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,11 +1,36 @@ avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 1.145934 0.553822 + avg(distribcell) group in nuclide mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.718919 0.520644 + avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.718919 0.520644 + avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.019762 0.010629 + avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.019762 0.010629 avg(distribcell) group in nuclide mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 + avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 + avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 + avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 1.126172 0.54344 + avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 1.142547 0.570131 avg(distribcell) group in group out nuclide moment mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P0 1.142547 0.570131 1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P1 0.447381 0.216322 2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P2 0.141202 0.066504 3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P3 0.039228 0.024621 + avg(distribcell) group in group out nuclide moment mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P0 1.142547 0.570131 +1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P1 0.447381 0.216322 +2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P2 0.141202 0.066504 +3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P3 0.039228 0.024621 + avg(distribcell) group in group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 1.0 0.529717 + avg(distribcell) group in group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.0 0.0 avg(distribcell) group out nuclide mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 diff --git a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py index a6fef2e77f..30593e54b5 100644 --- a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py +++ b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py @@ -12,10 +12,6 @@ import openmc.mgxs class MGXSTestHarness(PyAPITestHarness): def _build_inputs(self): - - # The openmc.mgxs module needs a summary.h5 file - self._input_set.settings.output = {'summary': True} - # Generate inputs using parent class routine super(MGXSTestHarness, self)._build_inputs() @@ -26,8 +22,8 @@ class MGXSTestHarness(PyAPITestHarness): # for one material-filled cell in the geometry self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = False - self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', - 'nu-scatter matrix', 'chi'] + # Test all MGXS types + self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES self.mgxs_lib.energy_groups = energy_groups self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'distribcell' diff --git a/tests/test_mgxs_library_hdf5/inputs_true.dat b/tests/test_mgxs_library_hdf5/inputs_true.dat index 3643c9a2ef..79ca0ec660 100644 --- a/tests/test_mgxs_library_hdf5/inputs_true.dat +++ b/tests/test_mgxs_library_hdf5/inputs_true.dat @@ -1 +1 @@ -104e7fb527770ac5d3fc636da7716e8fb05d55761253d30516c899f466e6b38ffd881611a3d0cdf65c6af058c32f6f6758c68782be7a170d21024bdae751862f \ No newline at end of file +317a63a9dd3bfd84e969667b00f46018e56c04c356461a75103f63569e6b70c84d0da7f5e611faaf1b2631330b05ab4346223d3d843018ce0ce8876671a450c0 \ No newline at end of file diff --git a/tests/test_mgxs_library_hdf5/results_true.dat b/tests/test_mgxs_library_hdf5/results_true.dat index 3cae577471..7391b2e427 100644 --- a/tests/test_mgxs_library_hdf5/results_true.dat +++ b/tests/test_mgxs_library_hdf5/results_true.dat @@ -1,240 +1,195 @@ -domain=1 type=transport -[ 0.37274472 0.86160691] -[ 0.02426918 0.03234902] -domain=1 type=nu-fission -[ 0.02178897 0.71407658] -[ 0.00118187 0.04055185] -domain=1 type=nu-scatter matrix -[[[ 3.81546297e-01 4.43012537e-02 2.06462886e-02 1.36952959e-02] - [ 1.55945353e-03 -5.97269486e-04 -2.38789528e-04 1.75508083e-04]] +domain=10000 type=total +[ 0.41482549 0.66016992] +[ 0.02279291 0.04751893] +domain=10000 type=transport +[ 0.35685964 0.64764766] +[ 0.0254936 0.02370374] +domain=10000 type=nu-transport +[ 0.35685964 0.64764766] +[ 0.0254936 0.02370374] +domain=10000 type=absorption +[ 0.02740784 0.26451074] +[ 0.0026925 0.02336708] +domain=10000 type=capture +[ 0.01984455 0.07171935] +[ 0.0026433 0.02520786] +domain=10000 type=fission +[ 0.00756329 0.19279139] +[ 0.00050848 0.01710592] +domain=10000 type=nu-fission +[ 0.01943174 0.46977478] +[ 0.00132298 0.041682 ] +domain=10000 type=kappa-fission +[ 1.47456982 37.28689641] +[ 0.09923532 3.30837772] +domain=10000 type=scatter +[ 0.38741765 0.39565918] +[ 0.02062573 0.02512506] +domain=10000 type=nu-scatter +[ 0.38518839 0.4123894 ] +[ 0.02694562 0.01542528] +domain=10000 type=scatter matrix +[[[ 3.84199458e-01 5.18702843e-02 2.00688453e-02 9.47771571e-03] + [ 9.88930393e-04 -2.07234596e-04 -1.03366181e-04 2.34290623e-04]] - [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [ 4.03915981e-01 -1.13103276e-02 -1.48065932e-02 -6.85505346e-03]]] -[[[ 0.02403322 0.00472203 0.00253903 0.00222437] - [ 0.00051015 0.00022485 0.00022157 0.00020939]] + [[ 9.24639909e-04 -7.67704968e-04 4.93788872e-04 -1.71497229e-04] + [ 4.11464759e-01 1.64817280e-02 6.37149049e-03 -1.04991221e-02]]] +[[[ 0.02700101 0.00698255 0.0028465 0.00223352] + [ 0.00048242 0.00014901 0.00018432 0.00012817]] - [[ 0. 0. 0. 0. ] - [ 0.01896646 0.00783919 0.00862908 0.00904704]]] -domain=1 type=chi + [[ 0.00092488 0.00076791 0.00049392 0.00017154] + [ 0.01524494 0.00450173 0.01055075 0.01043819]]] +domain=10000 type=nu-scatter matrix +[[[ 3.84199458e-01 5.18702843e-02 2.00688453e-02 9.47771571e-03] + [ 9.88930393e-04 -2.07234596e-04 -1.03366181e-04 2.34290623e-04]] + + [[ 9.24639909e-04 -7.67704968e-04 4.93788872e-04 -1.71497229e-04] + [ 4.11464759e-01 1.64817280e-02 6.37149049e-03 -1.04991221e-02]]] +[[[ 0.02700101 0.00698255 0.0028465 0.00223352] + [ 0.00048242 0.00014901 0.00018432 0.00012817]] + + [[ 0.00092488 0.00076791 0.00049392 0.00017154] + [ 0.01524494 0.00450173 0.01055075 0.01043819]]] +domain=10000 type=multiplicity matrix +[[ 1. 1.] + [ 1. 1.]] +[[ 0.07851646 0.68718427] + [ 1.41421356 0.04113035]] +domain=10000 type=nu-fission matrix +[[ 0.02014243 0. ] + [ 0.45436647 0. ]] +[[ 0.00314909 0. ] + [ 0.02742551 0. ]] +domain=10000 type=chi [ 1. 0.] -[ 0.05533329 0. ] -domain=2 type=transport -[ 0.23725441 0.28593027] -[ 0.00818357 0.04879593] -domain=2 type=nu-fission +[ 0.04607052 0. ] +domain=10001 type=total +[ 0.31373767 0.3008214 ] +[ 0.0155819 0.02805245] +domain=10001 type=transport +[ 0.27322787 0.31237484] +[ 0.03311537 0.04960583] +domain=10001 type=nu-transport +[ 0.27322787 0.31237484] +[ 0.03311537 0.04960583] +domain=10001 type=absorption +[ 0.00157499 0.00540038] +[ 0.00032255 0.00061814] +domain=10001 type=capture +[ 0.00157499 0.00540038] +[ 0.00032255 0.00061814] +domain=10001 type=fission [ 0. 0.] [ 0. 0.] -domain=2 type=nu-scatter matrix -[[[ 0.27311543 0.03586102 0.02970389 0.00224892] +domain=10001 type=nu-fission +[ 0. 0.] +[ 0. 0.] +domain=10001 type=kappa-fission +[ 0. 0.] +[ 0. 0.] +domain=10001 type=scatter +[ 0.31216268 0.29542102] +[ 0.01532192 0.02744549] +domain=10001 type=nu-scatter +[ 0.31012074 0.29626427] +[ 0.03378811 0.04379223] +domain=10001 type=scatter matrix +[[[ 0.31012074 0.03822959 0.02074494 0.0079643 ] [ 0. 0. 0. 0. ]] [[ 0. 0. 0. 0. ] - [ 0.26405068 -0.02187959 -0.01529469 0.01403395]]] -[[[ 0.00625287 0.00587756 0.00664018 0.00337568] + [ 0.29626427 -0.01121364 0.00883657 -0.00327007]]] +[[[ 0.03378811 0.008484 0.00469561 0.00373162] [ 0. 0. 0. 0. ]] [[ 0. 0. 0. 0. ] - [ 0.04539742 0.01221814 0.01027609 0.01431818]]] -domain=2 type=chi -[ 0. 0.] -[ 0. 0.] -domain=3 type=transport -[ 0.28690578 1.41815062] -[ 0.02740142 0.26530756] -domain=3 type=nu-fission -[ 0. 0.] -[ 0. 0.] -domain=3 type=nu-scatter matrix -[[[ 0.64334557 0.38340871 0.15218526 0.00303724] - [ 0.02618721 0.00736219 -0.00273849 -0.00271989]] - - [[ 0. 0. 0. 0. ] - [ 1.92421362 0.4984312 0.09120485 0.01705441]]] -[[[ 0.02837604 0.01644677 0.00957372 0.00464802] - [ 0.00166461 0.00093414 0.00075617 0.00055807]] - - [[ 0. 0. 0. 0. ] - [ 0.28406198 0.06342067 0.01372628 0.01391602]]] -domain=3 type=chi -[ 0. 0.] -[ 0. 0.] -domain=4 type=transport -[ 0.24244686 1.25395921] -[ 0.06103082 0.38836257] -domain=4 type=nu-fission -[ 0. 0.] -[ 0. 0.] -domain=4 type=nu-scatter matrix -[[[ 0.54394096 0.32601136 0.13113269 0.01210477] - [ 0.023662 0.00752551 -0.00272975 -0.0031405 ]] - - [[ 0. 0. 0. 0. ] - [ 1.76464845 0.50069481 0.09902596 0.03297543]]] -[[[ 0.06542705 0.03860196 0.0174751 0.00607268] - [ 0.00308328 0.00130111 0.00084112 0.00057761]] - - [[ 0. 0. 0. 0. ] - [ 0.41620952 0.12217802 0.03871874 0.02510259]]] -domain=4 type=chi -[ 0. 0.] -[ 0. 0.] -domain=5 type=transport -[ 0. 0.] -[ 0. 0.] -domain=5 type=nu-fission -[ 0. 0.] -[ 0. 0.] -domain=5 type=nu-scatter matrix -[[[ 0. 0. 0. 0.] - [ 0. 0. 0. 0.]] - - [[ 0. 0. 0. 0.] - [ 0. 0. 0. 0.]]] -[[[ 0. 0. 0. 0.] - [ 0. 0. 0. 0.]] - - [[ 0. 0. 0. 0.] - [ 0. 0. 0. 0.]]] -domain=5 type=chi -[ 0. 0.] -[ 0. 0.] -domain=6 type=transport -[ 0. 0.] -[ 0. 0.] -domain=6 type=nu-fission -[ 0. 0.] -[ 0. 0.] -domain=6 type=nu-scatter matrix -[[[ 0. 0. 0. 0.] - [ 0. 0. 0. 0.]] - - [[ 0. 0. 0. 0.] - [ 0. 0. 0. 0.]]] -[[[ 0. 0. 0. 0.] - [ 0. 0. 0. 0.]] - - [[ 0. 0. 0. 0.] - [ 0. 0. 0. 0.]]] -domain=6 type=chi -[ 0. 0.] -[ 0. 0.] -domain=7 type=transport -[ 0. 0.] -[ 0. 0.] -domain=7 type=nu-fission -[ 0. 0.] -[ 0. 0.] -domain=7 type=nu-scatter matrix -[[[ 0. 0. 0. 0.] - [ 0. 0. 0. 0.]] - - [[ 0. 0. 0. 0.] - [ 0. 0. 0. 0.]]] -[[[ 0. 0. 0. 0.] - [ 0. 0. 0. 0.]] - - [[ 0. 0. 0. 0.] - [ 0. 0. 0. 0.]]] -domain=7 type=chi -[ 0. 0.] -[ 0. 0.] -domain=8 type=transport -[ 0. 0.] -[ 0. 0.] -domain=8 type=nu-fission -[ 0. 0.] -[ 0. 0.] -domain=8 type=nu-scatter matrix -[[[ 0. 0. 0. 0.] - [ 0. 0. 0. 0.]] - - [[ 0. 0. 0. 0.] - [ 0. 0. 0. 0.]]] -[[[ 0. 0. 0. 0.] - [ 0. 0. 0. 0.]] - - [[ 0. 0. 0. 0.] - [ 0. 0. 0. 0.]]] -domain=8 type=chi -[ 0. 0.] -[ 0. 0.] -domain=9 type=transport -[ 0.60053598 0. ] -[ 0.74887543 0. ] -domain=9 type=nu-fission -[ 0. 0.] -[ 0. 0.] -domain=9 type=nu-scatter matrix -[[[ 0.72037987 0.11984389 0.03852204 0.05602285] + [ 0.04379223 0.01618037 0.01150396 0.00732885]]] +domain=10001 type=nu-scatter matrix +[[[ 0.31012074 0.03822959 0.02074494 0.0079643 ] [ 0. 0. 0. 0. ]] [[ 0. 0. 0. 0. ] - [ 0. 0. 0. 0. ]]] -[[[ 0.77101455 0.18469083 0.06448453 0.05059534] + [ 0.29626427 -0.01121364 0.00883657 -0.00327007]]] +[[[ 0.03378811 0.008484 0.00469561 0.00373162] [ 0. 0. 0. 0. ]] [[ 0. 0. 0. 0. ] - [ 0. 0. 0. 0. ]]] -domain=9 type=chi + [ 0.04379223 0.01618037 0.01150396 0.00732885]]] +domain=10001 type=multiplicity matrix +[[ 1. 0.] + [ 0. 1.]] +[[ 0.1087787 0. ] + [ 0. 0.14242717]] +domain=10001 type=nu-fission matrix +[[ 0. 0.] + [ 0. 0.]] +[[ 0. 0.] + [ 0. 0.]] +domain=10001 type=chi [ 0. 0.] [ 0. 0.] -domain=10 type=transport -[ 0.23551495 0. ] -[ 0.61397415 0. ] -domain=10 type=nu-fission +domain=10002 type=total +[ 0.66457226 2.05238401] +[ 0.03121475 0.22434291] +domain=10002 type=transport +[ 0.29056526 1.51643801] +[ 0.02385185 0.23519727] +domain=10002 type=nu-transport +[ 0.29056526 1.51643801] +[ 0.02385185 0.23519727] +domain=10002 type=absorption +[ 0.0006904 0.03168726] +[ 4.41475687e-05 3.74655858e-03] +domain=10002 type=capture +[ 0.0006904 0.03168726] +[ 4.41475687e-05 3.74655858e-03] +domain=10002 type=fission [ 0. 0.] [ 0. 0.] -domain=10 type=nu-scatter matrix -[[[ 0.50100891 0.26549396 0.14197875 0.07425836] - [ 0. 0. 0. 0. ]] +domain=10002 type=nu-fission +[ 0. 0.] +[ 0. 0.] +domain=10002 type=kappa-fission +[ 0. 0.] +[ 0. 0.] +domain=10002 type=scatter +[ 0.66388186 2.02069676] +[ 0.03117268 0.22060445] +domain=10002 type=nu-scatter +[ 0.6712692 2.03538833] +[ 0.02618637 0.25806033] +domain=10002 type=scatter matrix +[[[ 6.39901485e-01 3.81167449e-01 1.52391898e-01 9.14802229e-03] + [ 3.13677198e-02 8.75772321e-03 -2.56790106e-03 -3.78480288e-03]] - [[ 0. 0. 0. 0. ] - [ 0. 0. 0. 0. ]]] -[[[ 0.70853359 0.37546516 0.20078827 0.10501718] - [ 0. 0. 0. 0. ]] + [[ 4.43343134e-04 3.99960414e-04 3.19562707e-04 2.13846969e-04] + [ 2.03494499e+00 5.09940513e-01 1.11174609e-01 2.49884357e-02]]] +[[[ 2.47091228e-02 1.62432649e-02 8.15627770e-03 3.88856214e-03] + [ 1.72811290e-03 9.25670501e-04 1.01398475e-03 8.17075571e-04]] - [[ 0. 0. 0. 0. ] - [ 0. 0. 0. 0. ]]] -domain=10 type=chi -[ 0. 0.] -[ 0. 0.] -domain=11 type=transport -[ 0.18632392 0.94598628] -[ 0.63212919 1.59113341] -domain=11 type=nu-fission -[ 0. 0.] -[ 0. 0.] -domain=11 type=nu-scatter matrix -[[[ 0.47812753 0.32367878 0.14337507 0.05400336] - [ 0.03187517 0.00858456 -0.01246962 -0.01132019]] + [[ 4.44850393e-04 4.01320183e-04 3.20649143e-04 2.14573997e-04] + [ 2.57799889e-01 5.12359063e-02 1.30198170e-02 8.31235256e-03]]] +domain=10002 type=nu-scatter matrix +[[[ 6.39901485e-01 3.81167449e-01 1.52391898e-01 9.14802229e-03] + [ 3.13677198e-02 8.75772321e-03 -2.56790106e-03 -3.78480288e-03]] - [[ 0. 0. 0. 0. ] - [ 1.20124973 0.28661101 0.21819147 -0.04851424]]] -[[[ 0.67617444 0.45775092 0.20276296 0.07637229] - [ 0.0450783 0.0121404 0.01763471 0.01600917]] + [[ 4.43343134e-04 3.99960414e-04 3.19562707e-04 2.13846969e-04] + [ 2.03494499e+00 5.09940513e-01 1.11174609e-01 2.49884357e-02]]] +[[[ 2.47091228e-02 1.62432649e-02 8.15627770e-03 3.88856214e-03] + [ 1.72811290e-03 9.25670501e-04 1.01398475e-03 8.17075571e-04]] - [[ 0. 0. 0. 0. ] - [ 1.69882367 0.40532917 0.30856933 0.0686095 ]]] -domain=11 type=chi -[ 0. 0.] -[ 0. 0.] -domain=12 type=transport -[ 0.21329208 1.3909745 ] -[ 0.27144387 2.13734565] -domain=12 type=nu-fission -[ 0. 0.] -[ 0. 0.] -domain=12 type=nu-scatter matrix -[[[ 0.40859392 0.22254143 0.0909719 0.03100368] - [ 0.02723959 -0.01008785 -0.00694631 0.00969231]] - - [[ 0. 0. 0. 0. ] - [ 1.57432766 0.22974802 0.01417839 0.03899727]]] -[[[ 0.27812309 0.14577636 0.06962553 0.03598053] - [ 0.02955488 0.01094529 0.00753673 0.01051613]] - - [[ 0. 0. 0. 0. ] - [ 2.22643553 0.32491277 0.02005128 0.05515046]]] -domain=12 type=chi + [[ 4.44850393e-04 4.01320183e-04 3.20649143e-04 2.14573997e-04] + [ 2.57799889e-01 5.12359063e-02 1.30198170e-02 8.31235256e-03]]] +domain=10002 type=multiplicity matrix +[[ 1. 1.] + [ 1. 1.]] +[[ 0.03860919 0.06766735] + [ 1.41421356 0.13592921]] +domain=10002 type=nu-fission matrix +[[ 0. 0.] + [ 0. 0.]] +[[ 0. 0.] + [ 0. 0.]] +domain=10002 type=chi [ 0. 0.] [ 0. 0.] diff --git a/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py b/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py index 2d7ed2ef3d..000a1f8cb9 100644 --- a/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py +++ b/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py @@ -7,27 +7,28 @@ import hashlib import h5py sys.path.insert(0, os.pardir) from testing_harness import PyAPITestHarness +from input_set import PinCellInputSet import openmc import openmc.mgxs class MGXSTestHarness(PyAPITestHarness): def _build_inputs(self): - - # The openmc.mgxs module needs a summary.h5 file - self._input_set.settings.output = {'summary': True} + # Set the input set to use the pincell model + self._input_set = PinCellInputSet() # Generate inputs using parent class routine super(MGXSTestHarness, self)._build_inputs() # Initialize a two-group structure - energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, 20.]) + energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, + 20.]) # Initialize MGXS Library for a few cross section types self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = False - self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', - 'nu-scatter matrix', 'chi'] + # Test all MGXS types + self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES self.mgxs_lib.energy_groups = energy_groups self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'material' @@ -75,7 +76,6 @@ class MGXSTestHarness(PyAPITestHarness): return outstr - def _cleanup(self): super(MGXSTestHarness, self)._cleanup() f = os.path.join(os.getcwd(), 'tallies.xml') diff --git a/tests/test_mgxs_library_no_nuclides/inputs_true.dat b/tests/test_mgxs_library_no_nuclides/inputs_true.dat index e5d0a175c4..79ca0ec660 100644 --- a/tests/test_mgxs_library_no_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_no_nuclides/inputs_true.dat @@ -1 +1 @@ -8675afa50c9e291cea100a30603833c9f73fdf75f0831809dee523292ddcdd27d452540bb06ea2ad40aaa3304228fb6a46281cb04878a492e27a62976c78c96b \ No newline at end of file +317a63a9dd3bfd84e969667b00f46018e56c04c356461a75103f63569e6b70c84d0da7f5e611faaf1b2631330b05ab4346223d3d843018ce0ce8876671a450c0 \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index c05e053897..599cee6c49 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -1,924 +1,231 @@ material group in nuclide mean std. dev. -1 1 1 total 0.413737 0.020666 -0 1 2 total 0.831077 0.043043 +1 10000 1 total 0.414825 0.022793 +0 10000 2 total 0.660170 0.047519 material group in nuclide mean std. dev. -1 1 1 total 0.372745 0.024269 -0 1 2 total 0.861607 0.032349 +1 10000 1 total 0.356860 0.025494 +0 10000 2 total 0.647648 0.023704 material group in nuclide mean std. dev. -1 1 1 total 0.372593 0.024246 -0 1 2 total 0.861607 0.032349 +1 10000 1 total 0.356860 0.025494 +0 10000 2 total 0.647648 0.023704 material group in nuclide mean std. dev. -1 1 1 total 0.033747 0.001497 -0 1 2 total 0.436807 0.024531 +1 10000 1 total 0.027408 0.002692 +0 10000 2 total 0.264511 0.023367 material group in nuclide mean std. dev. -1 1 1 total 0.025522 0.001301 -0 1 2 total 0.165054 0.023520 +1 10000 1 total 0.019845 0.002643 +0 10000 2 total 0.071719 0.025208 material group in nuclide mean std. dev. -1 1 1 total 0.008225 0.000436 -0 1 2 total 0.271753 0.015604 +1 10000 1 total 0.007563 0.000508 +0 10000 2 total 0.192791 0.017106 material group in nuclide mean std. dev. -1 1 1 total 0.021789 0.001182 -0 1 2 total 0.714077 0.040552 +1 10000 1 total 0.019432 0.001323 +0 10000 2 total 0.469775 0.041682 material group in nuclide mean std. dev. -1 1 1 total 1.612520 0.085471 -0 1 2 total 53.252833 3.051695 +1 10000 1 total 1.474570 0.099235 +0 10000 2 total 37.286896 3.308378 material group in nuclide mean std. dev. -1 1 1 total 0.379990 0.019207 -0 1 2 total 0.394271 0.019629 +1 10000 1 total 0.387418 0.020626 +0 10000 2 total 0.395659 0.025125 material group in nuclide mean std. dev. -1 1 1 total 0.383106 0.024061 -0 1 2 total 0.403916 0.018966 +1 10000 1 total 0.385188 0.026946 +0 10000 2 total 0.412389 0.015425 material group in group out nuclide moment mean std. dev. -12 1 1 1 total P0 0.381200 0.023972 -13 1 1 1 total P1 0.044149 0.004814 -14 1 1 1 total P2 0.020601 0.002497 -15 1 1 1 total P3 0.013589 0.002222 -8 1 1 2 total P0 0.001559 0.000510 -9 1 1 2 total P1 -0.000597 0.000225 -10 1 1 2 total P2 -0.000239 0.000222 -11 1 1 2 total P3 0.000176 0.000209 -4 1 2 1 total P0 0.000000 0.000000 -5 1 2 1 total P1 0.000000 0.000000 -6 1 2 1 total P2 0.000000 0.000000 -7 1 2 1 total P3 0.000000 0.000000 -0 1 2 2 total P0 0.403916 0.018966 -1 1 2 2 total P1 -0.011310 0.007839 -2 1 2 2 total P2 -0.014807 0.008629 -3 1 2 2 total P3 -0.006855 0.009047 +12 10000 1 1 total P0 0.384199 0.027001 +13 10000 1 1 total P1 0.051870 0.006983 +14 10000 1 1 total P2 0.020069 0.002846 +15 10000 1 1 total P3 0.009478 0.002234 +8 10000 1 2 total P0 0.000989 0.000482 +9 10000 1 2 total P1 -0.000207 0.000149 +10 10000 1 2 total P2 -0.000103 0.000184 +11 10000 1 2 total P3 0.000234 0.000128 +4 10000 2 1 total P0 0.000925 0.000925 +5 10000 2 1 total P1 -0.000768 0.000768 +6 10000 2 1 total P2 0.000494 0.000494 +7 10000 2 1 total P3 -0.000171 0.000172 +0 10000 2 2 total P0 0.411465 0.015245 +1 10000 2 2 total P1 0.016482 0.004502 +2 10000 2 2 total P2 0.006371 0.010551 +3 10000 2 2 total P3 -0.010499 0.010438 material group in group out nuclide moment mean std. dev. -12 1 1 1 total P0 0.381546 0.024033 -13 1 1 1 total P1 0.044301 0.004722 -14 1 1 1 total P2 0.020646 0.002539 -15 1 1 1 total P3 0.013695 0.002224 -8 1 1 2 total P0 0.001559 0.000510 -9 1 1 2 total P1 -0.000597 0.000225 -10 1 1 2 total P2 -0.000239 0.000222 -11 1 1 2 total P3 0.000176 0.000209 -4 1 2 1 total P0 0.000000 0.000000 -5 1 2 1 total P1 0.000000 0.000000 -6 1 2 1 total P2 0.000000 0.000000 -7 1 2 1 total P3 0.000000 0.000000 -0 1 2 2 total P0 0.403916 0.018966 -1 1 2 2 total P1 -0.011310 0.007839 -2 1 2 2 total P2 -0.014807 0.008629 -3 1 2 2 total P3 -0.006855 0.009047 +12 10000 1 1 total P0 0.384199 0.027001 +13 10000 1 1 total P1 0.051870 0.006983 +14 10000 1 1 total P2 0.020069 0.002846 +15 10000 1 1 total P3 0.009478 0.002234 +8 10000 1 2 total P0 0.000989 0.000482 +9 10000 1 2 total P1 -0.000207 0.000149 +10 10000 1 2 total P2 -0.000103 0.000184 +11 10000 1 2 total P3 0.000234 0.000128 +4 10000 2 1 total P0 0.000925 0.000925 +5 10000 2 1 total P1 -0.000768 0.000768 +6 10000 2 1 total P2 0.000494 0.000494 +7 10000 2 1 total P3 -0.000171 0.000172 +0 10000 2 2 total P0 0.411465 0.015245 +1 10000 2 2 total P1 0.016482 0.004502 +2 10000 2 2 total P2 0.006371 0.010551 +3 10000 2 2 total P3 -0.010499 0.010438 + material group in group out nuclide mean std. dev. +3 10000 1 1 total 1.0 0.078516 +2 10000 1 2 total 1.0 0.687184 +1 10000 2 1 total 1.0 1.414214 +0 10000 2 2 total 1.0 0.041130 material group in group out nuclide mean std. dev. -3 1 1 1 total 1.000909 0.061440 -2 1 1 2 total 1.000000 0.458123 -1 1 2 1 total 0.000000 0.000000 -0 1 2 2 total 1.000000 0.055242 - material group in group out nuclide mean std. dev. -3 1 1 1 total 0.022739 0.002910 -2 1 1 2 total 0.000000 0.000000 -1 1 2 1 total 0.737265 0.030217 -0 1 2 2 total 0.000000 0.000000 +3 10000 1 1 total 0.020142 0.003149 +2 10000 1 2 total 0.000000 0.000000 +1 10000 2 1 total 0.454366 0.027426 +0 10000 2 2 total 0.000000 0.000000 material group out nuclide mean std. dev. -1 1 1 total 1.0 0.055333 -0 1 2 total 0.0 0.000000 +1 10000 1 total 1.0 0.046071 +0 10000 2 total 0.0 0.000000 material group in nuclide mean std. dev. -1 2 1 total 0.274809 0.009544 -0 2 2 total 0.264483 0.013309 +1 10001 1 total 0.313738 0.015582 +0 10001 2 total 0.300821 0.028052 material group in nuclide mean std. dev. -1 2 1 total 0.237254 0.008184 -0 2 2 total 0.285930 0.048796 +1 10001 1 total 0.273228 0.033115 +0 10001 2 total 0.312375 0.049606 material group in nuclide mean std. dev. -1 2 1 total 0.237254 0.008184 -0 2 2 total 0.285930 0.048796 +1 10001 1 total 0.273228 0.033115 +0 10001 2 total 0.312375 0.049606 material group in nuclide mean std. dev. -1 2 1 total 0.001327 0.000144 -0 2 2 total 0.004358 0.000224 +1 10001 1 total 0.001575 0.000323 +0 10001 2 total 0.005400 0.000618 material group in nuclide mean std. dev. -1 2 1 total 0.001327 0.000144 -0 2 2 total 0.004358 0.000224 +1 10001 1 total 0.001575 0.000323 +0 10001 2 total 0.005400 0.000618 material group in nuclide mean std. dev. -1 2 1 total 0.0 0.0 -0 2 2 total 0.0 0.0 +1 10001 1 total 0.0 0.0 +0 10001 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 2 1 total 0.0 0.0 -0 2 2 total 0.0 0.0 +1 10001 1 total 0.0 0.0 +0 10001 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 2 1 total 0.0 0.0 -0 2 2 total 0.0 0.0 +1 10001 1 total 0.0 0.0 +0 10001 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 2 1 total 0.273482 0.009533 -0 2 2 total 0.260125 0.013092 +1 10001 1 total 0.312163 0.015322 +0 10001 2 total 0.295421 0.027445 material group in nuclide mean std. dev. -1 2 1 total 0.273115 0.006253 -0 2 2 total 0.264051 0.045397 +1 10001 1 total 0.310121 0.033788 +0 10001 2 total 0.296264 0.043792 material group in group out nuclide moment mean std. dev. -12 2 1 1 total P0 0.273115 0.006253 -13 2 1 1 total P1 0.035861 0.005878 -14 2 1 1 total P2 0.029704 0.006640 -15 2 1 1 total P3 0.002249 0.003376 -8 2 1 2 total P0 0.000000 0.000000 -9 2 1 2 total P1 0.000000 0.000000 -10 2 1 2 total P2 0.000000 0.000000 -11 2 1 2 total P3 0.000000 0.000000 -4 2 2 1 total P0 0.000000 0.000000 -5 2 2 1 total P1 0.000000 0.000000 -6 2 2 1 total P2 0.000000 0.000000 -7 2 2 1 total P3 0.000000 0.000000 -0 2 2 2 total P0 0.264051 0.045397 -1 2 2 2 total P1 -0.021880 0.012218 -2 2 2 2 total P2 -0.015295 0.010276 -3 2 2 2 total P3 0.014034 0.014318 +12 10001 1 1 total P0 0.310121 0.033788 +13 10001 1 1 total P1 0.038230 0.008484 +14 10001 1 1 total P2 0.020745 0.004696 +15 10001 1 1 total P3 0.007964 0.003732 +8 10001 1 2 total P0 0.000000 0.000000 +9 10001 1 2 total P1 0.000000 0.000000 +10 10001 1 2 total P2 0.000000 0.000000 +11 10001 1 2 total P3 0.000000 0.000000 +4 10001 2 1 total P0 0.000000 0.000000 +5 10001 2 1 total P1 0.000000 0.000000 +6 10001 2 1 total P2 0.000000 0.000000 +7 10001 2 1 total P3 0.000000 0.000000 +0 10001 2 2 total P0 0.296264 0.043792 +1 10001 2 2 total P1 -0.011214 0.016180 +2 10001 2 2 total P2 0.008837 0.011504 +3 10001 2 2 total P3 -0.003270 0.007329 material group in group out nuclide moment mean std. dev. -12 2 1 1 total P0 0.273115 0.006253 -13 2 1 1 total P1 0.035861 0.005878 -14 2 1 1 total P2 0.029704 0.006640 -15 2 1 1 total P3 0.002249 0.003376 -8 2 1 2 total P0 0.000000 0.000000 -9 2 1 2 total P1 0.000000 0.000000 -10 2 1 2 total P2 0.000000 0.000000 -11 2 1 2 total P3 0.000000 0.000000 -4 2 2 1 total P0 0.000000 0.000000 -5 2 2 1 total P1 0.000000 0.000000 -6 2 2 1 total P2 0.000000 0.000000 -7 2 2 1 total P3 0.000000 0.000000 -0 2 2 2 total P0 0.264051 0.045397 -1 2 2 2 total P1 -0.021880 0.012218 -2 2 2 2 total P2 -0.015295 0.010276 -3 2 2 2 total P3 0.014034 0.014318 +12 10001 1 1 total P0 0.310121 0.033788 +13 10001 1 1 total P1 0.038230 0.008484 +14 10001 1 1 total P2 0.020745 0.004696 +15 10001 1 1 total P3 0.007964 0.003732 +8 10001 1 2 total P0 0.000000 0.000000 +9 10001 1 2 total P1 0.000000 0.000000 +10 10001 1 2 total P2 0.000000 0.000000 +11 10001 1 2 total P3 0.000000 0.000000 +4 10001 2 1 total P0 0.000000 0.000000 +5 10001 2 1 total P1 0.000000 0.000000 +6 10001 2 1 total P2 0.000000 0.000000 +7 10001 2 1 total P3 0.000000 0.000000 +0 10001 2 2 total P0 0.296264 0.043792 +1 10001 2 2 total P1 -0.011214 0.016180 +2 10001 2 2 total P2 0.008837 0.011504 +3 10001 2 2 total P3 -0.003270 0.007329 material group in group out nuclide mean std. dev. -3 2 1 1 total 1.0 0.019157 -2 2 1 2 total 0.0 0.000000 -1 2 2 1 total 0.0 0.000000 -0 2 2 2 total 1.0 0.171895 +3 10001 1 1 total 1.0 0.108779 +2 10001 1 2 total 0.0 0.000000 +1 10001 2 1 total 0.0 0.000000 +0 10001 2 2 total 1.0 0.142427 material group in group out nuclide mean std. dev. -3 2 1 1 total 0.0 0.0 -2 2 1 2 total 0.0 0.0 -1 2 2 1 total 0.0 0.0 -0 2 2 2 total 0.0 0.0 +3 10001 1 1 total 0.0 0.0 +2 10001 1 2 total 0.0 0.0 +1 10001 2 1 total 0.0 0.0 +0 10001 2 2 total 0.0 0.0 material group out nuclide mean std. dev. -1 2 1 total 0.0 0.0 -0 2 2 total 0.0 0.0 +1 10001 1 total 0.0 0.0 +0 10001 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 3 1 total 0.670714 0.041725 -0 3 2 total 1.989013 0.270454 +1 10002 1 total 0.664572 0.031215 +0 10002 2 total 2.052384 0.224343 material group in nuclide mean std. dev. -1 3 1 total 0.286906 0.027401 -0 3 2 total 1.418151 0.265308 +1 10002 1 total 0.290565 0.023852 +0 10002 2 total 1.516438 0.235197 material group in nuclide mean std. dev. -1 3 1 total 0.286906 0.027401 -0 3 2 total 1.418151 0.265308 +1 10002 1 total 0.290565 0.023852 +0 10002 2 total 1.516438 0.235197 material group in nuclide mean std. dev. -1 3 1 total 0.000998 0.000050 -0 3 2 total 0.048908 0.007333 +1 10002 1 total 0.000690 0.000044 +0 10002 2 total 0.031687 0.003747 material group in nuclide mean std. dev. -1 3 1 total 0.000998 0.000050 -0 3 2 total 0.048908 0.007333 +1 10002 1 total 0.000690 0.000044 +0 10002 2 total 0.031687 0.003747 material group in nuclide mean std. dev. -1 3 1 total 0.0 0.0 -0 3 2 total 0.0 0.0 +1 10002 1 total 0.0 0.0 +0 10002 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 3 1 total 0.0 0.0 -0 3 2 total 0.0 0.0 +1 10002 1 total 0.0 0.0 +0 10002 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 3 1 total 0.0 0.0 -0 3 2 total 0.0 0.0 +1 10002 1 total 0.0 0.0 +0 10002 2 total 0.0 0.0 material group in nuclide mean std. dev. -1 3 1 total 0.669716 0.041680 -0 3 2 total 1.940105 0.263149 +1 10002 1 total 0.663882 0.031173 +0 10002 2 total 2.020697 0.220604 material group in nuclide mean std. dev. -1 3 1 total 0.669533 0.029665 -0 3 2 total 1.924214 0.284062 +1 10002 1 total 0.671269 0.026186 +0 10002 2 total 2.035388 0.258060 material group in group out nuclide moment mean std. dev. -12 3 1 1 total P0 0.643346 0.028376 -13 3 1 1 total P1 0.383409 0.016447 -14 3 1 1 total P2 0.152185 0.009574 -15 3 1 1 total P3 0.003037 0.004648 -8 3 1 2 total P0 0.026187 0.001665 -9 3 1 2 total P1 0.007362 0.000934 -10 3 1 2 total P2 -0.002738 0.000756 -11 3 1 2 total P3 -0.002720 0.000558 -4 3 2 1 total P0 0.000000 0.000000 -5 3 2 1 total P1 0.000000 0.000000 -6 3 2 1 total P2 0.000000 0.000000 -7 3 2 1 total P3 0.000000 0.000000 -0 3 2 2 total P0 1.924214 0.284062 -1 3 2 2 total P1 0.498431 0.063421 -2 3 2 2 total P2 0.091205 0.013726 -3 3 2 2 total P3 0.017054 0.013916 +12 10002 1 1 total P0 0.639901 0.024709 +13 10002 1 1 total P1 0.381167 0.016243 +14 10002 1 1 total P2 0.152392 0.008156 +15 10002 1 1 total P3 0.009148 0.003889 +8 10002 1 2 total P0 0.031368 0.001728 +9 10002 1 2 total P1 0.008758 0.000926 +10 10002 1 2 total P2 -0.002568 0.001014 +11 10002 1 2 total P3 -0.003785 0.000817 +4 10002 2 1 total P0 0.000443 0.000445 +5 10002 2 1 total P1 0.000400 0.000401 +6 10002 2 1 total P2 0.000320 0.000321 +7 10002 2 1 total P3 0.000214 0.000215 +0 10002 2 2 total P0 2.034945 0.257800 +1 10002 2 2 total P1 0.509941 0.051236 +2 10002 2 2 total P2 0.111175 0.013020 +3 10002 2 2 total P3 0.024988 0.008312 material group in group out nuclide moment mean std. dev. -12 3 1 1 total P0 0.643346 0.028376 -13 3 1 1 total P1 0.383409 0.016447 -14 3 1 1 total P2 0.152185 0.009574 -15 3 1 1 total P3 0.003037 0.004648 -8 3 1 2 total P0 0.026187 0.001665 -9 3 1 2 total P1 0.007362 0.000934 -10 3 1 2 total P2 -0.002738 0.000756 -11 3 1 2 total P3 -0.002720 0.000558 -4 3 2 1 total P0 0.000000 0.000000 -5 3 2 1 total P1 0.000000 0.000000 -6 3 2 1 total P2 0.000000 0.000000 -7 3 2 1 total P3 0.000000 0.000000 -0 3 2 2 total P0 1.924214 0.284062 -1 3 2 2 total P1 0.498431 0.063421 -2 3 2 2 total P2 0.091205 0.013726 -3 3 2 2 total P3 0.017054 0.013916 +12 10002 1 1 total P0 0.639901 0.024709 +13 10002 1 1 total P1 0.381167 0.016243 +14 10002 1 1 total P2 0.152392 0.008156 +15 10002 1 1 total P3 0.009148 0.003889 +8 10002 1 2 total P0 0.031368 0.001728 +9 10002 1 2 total P1 0.008758 0.000926 +10 10002 1 2 total P2 -0.002568 0.001014 +11 10002 1 2 total P3 -0.003785 0.000817 +4 10002 2 1 total P0 0.000443 0.000445 +5 10002 2 1 total P1 0.000400 0.000401 +6 10002 2 1 total P2 0.000320 0.000321 +7 10002 2 1 total P3 0.000214 0.000215 +0 10002 2 2 total P0 2.034945 0.257800 +1 10002 2 2 total P1 0.509941 0.051236 +2 10002 2 2 total P2 0.111175 0.013020 +3 10002 2 2 total P3 0.024988 0.008312 material group in group out nuclide mean std. dev. -3 3 1 1 total 1.0 0.047903 -2 3 1 2 total 1.0 0.080529 -1 3 2 1 total 0.0 0.000000 -0 3 2 2 total 1.0 0.162017 +3 10002 1 1 total 1.0 0.038609 +2 10002 1 2 total 1.0 0.067667 +1 10002 2 1 total 1.0 1.414214 +0 10002 2 2 total 1.0 0.135929 material group in group out nuclide mean std. dev. -3 3 1 1 total 0.0 0.0 -2 3 1 2 total 0.0 0.0 -1 3 2 1 total 0.0 0.0 -0 3 2 2 total 0.0 0.0 +3 10002 1 1 total 0.0 0.0 +2 10002 1 2 total 0.0 0.0 +1 10002 2 1 total 0.0 0.0 +0 10002 2 2 total 0.0 0.0 material group out nuclide mean std. dev. -1 3 1 total 0.0 0.0 -0 3 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 4 1 total 0.569719 0.069542 -0 4 2 total 1.818808 0.468684 - material group in nuclide mean std. dev. -1 4 1 total 0.242447 0.061031 -0 4 2 total 1.253959 0.388363 - material group in nuclide mean std. dev. -1 4 1 total 0.242447 0.061031 -0 4 2 total 1.253959 0.388363 - material group in nuclide mean std. dev. -1 4 1 total 0.000981 0.000145 -0 4 2 total 0.045603 0.012339 - material group in nuclide mean std. dev. -1 4 1 total 0.000981 0.000145 -0 4 2 total 0.045603 0.012339 - material group in nuclide mean std. dev. -1 4 1 total 0.0 0.0 -0 4 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 4 1 total 0.0 0.0 -0 4 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 4 1 total 0.0 0.0 -0 4 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 4 1 total 0.568737 0.069416 -0 4 2 total 1.773206 0.456376 - material group in nuclide mean std. dev. -1 4 1 total 0.567603 0.068093 -0 4 2 total 1.764648 0.416210 - material group in group out nuclide moment mean std. dev. -12 4 1 1 total P0 0.543941 0.065427 -13 4 1 1 total P1 0.326011 0.038602 -14 4 1 1 total P2 0.131133 0.017475 -15 4 1 1 total P3 0.012105 0.006073 -8 4 1 2 total P0 0.023662 0.003083 -9 4 1 2 total P1 0.007526 0.001301 -10 4 1 2 total P2 -0.002730 0.000841 -11 4 1 2 total P3 -0.003140 0.000578 -4 4 2 1 total P0 0.000000 0.000000 -5 4 2 1 total P1 0.000000 0.000000 -6 4 2 1 total P2 0.000000 0.000000 -7 4 2 1 total P3 0.000000 0.000000 -0 4 2 2 total P0 1.764648 0.416210 -1 4 2 2 total P1 0.500695 0.122178 -2 4 2 2 total P2 0.099026 0.038719 -3 4 2 2 total P3 0.032975 0.025103 - material group in group out nuclide moment mean std. dev. -12 4 1 1 total P0 0.543941 0.065427 -13 4 1 1 total P1 0.326011 0.038602 -14 4 1 1 total P2 0.131133 0.017475 -15 4 1 1 total P3 0.012105 0.006073 -8 4 1 2 total P0 0.023662 0.003083 -9 4 1 2 total P1 0.007526 0.001301 -10 4 1 2 total P2 -0.002730 0.000841 -11 4 1 2 total P3 -0.003140 0.000578 -4 4 2 1 total P0 0.000000 0.000000 -5 4 2 1 total P1 0.000000 0.000000 -6 4 2 1 total P2 0.000000 0.000000 -7 4 2 1 total P3 0.000000 0.000000 -0 4 2 2 total P0 1.764648 0.416210 -1 4 2 2 total P1 0.500695 0.122178 -2 4 2 2 total P2 0.099026 0.038719 -3 4 2 2 total P3 0.032975 0.025103 - material group in group out nuclide mean std. dev. -3 4 1 1 total 1.0 0.125440 -2 4 1 2 total 1.0 0.144075 -1 4 2 1 total 0.0 0.000000 -0 4 2 2 total 1.0 0.256789 - material group in group out nuclide mean std. dev. -3 4 1 1 total 0.0 0.0 -2 4 1 2 total 0.0 0.0 -1 4 2 1 total 0.0 0.0 -0 4 2 2 total 0.0 0.0 - material group out nuclide mean std. dev. -1 4 1 total 0.0 0.0 -0 4 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 - material group in group out nuclide moment mean std. dev. -12 5 1 1 total P0 0.0 0.0 -13 5 1 1 total P1 0.0 0.0 -14 5 1 1 total P2 0.0 0.0 -15 5 1 1 total P3 0.0 0.0 -8 5 1 2 total P0 0.0 0.0 -9 5 1 2 total P1 0.0 0.0 -10 5 1 2 total P2 0.0 0.0 -11 5 1 2 total P3 0.0 0.0 -4 5 2 1 total P0 0.0 0.0 -5 5 2 1 total P1 0.0 0.0 -6 5 2 1 total P2 0.0 0.0 -7 5 2 1 total P3 0.0 0.0 -0 5 2 2 total P0 0.0 0.0 -1 5 2 2 total P1 0.0 0.0 -2 5 2 2 total P2 0.0 0.0 -3 5 2 2 total P3 0.0 0.0 - material group in group out nuclide moment mean std. dev. -12 5 1 1 total P0 0.0 0.0 -13 5 1 1 total P1 0.0 0.0 -14 5 1 1 total P2 0.0 0.0 -15 5 1 1 total P3 0.0 0.0 -8 5 1 2 total P0 0.0 0.0 -9 5 1 2 total P1 0.0 0.0 -10 5 1 2 total P2 0.0 0.0 -11 5 1 2 total P3 0.0 0.0 -4 5 2 1 total P0 0.0 0.0 -5 5 2 1 total P1 0.0 0.0 -6 5 2 1 total P2 0.0 0.0 -7 5 2 1 total P3 0.0 0.0 -0 5 2 2 total P0 0.0 0.0 -1 5 2 2 total P1 0.0 0.0 -2 5 2 2 total P2 0.0 0.0 -3 5 2 2 total P3 0.0 0.0 - material group in group out nuclide mean std. dev. -3 5 1 1 total 0.0 0.0 -2 5 1 2 total 0.0 0.0 -1 5 2 1 total 0.0 0.0 -0 5 2 2 total 0.0 0.0 - material group in group out nuclide mean std. dev. -3 5 1 1 total 0.0 0.0 -2 5 1 2 total 0.0 0.0 -1 5 2 1 total 0.0 0.0 -0 5 2 2 total 0.0 0.0 - material group out nuclide mean std. dev. -1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 - material group in group out nuclide moment mean std. dev. -12 6 1 1 total P0 0.0 0.0 -13 6 1 1 total P1 0.0 0.0 -14 6 1 1 total P2 0.0 0.0 -15 6 1 1 total P3 0.0 0.0 -8 6 1 2 total P0 0.0 0.0 -9 6 1 2 total P1 0.0 0.0 -10 6 1 2 total P2 0.0 0.0 -11 6 1 2 total P3 0.0 0.0 -4 6 2 1 total P0 0.0 0.0 -5 6 2 1 total P1 0.0 0.0 -6 6 2 1 total P2 0.0 0.0 -7 6 2 1 total P3 0.0 0.0 -0 6 2 2 total P0 0.0 0.0 -1 6 2 2 total P1 0.0 0.0 -2 6 2 2 total P2 0.0 0.0 -3 6 2 2 total P3 0.0 0.0 - material group in group out nuclide moment mean std. dev. -12 6 1 1 total P0 0.0 0.0 -13 6 1 1 total P1 0.0 0.0 -14 6 1 1 total P2 0.0 0.0 -15 6 1 1 total P3 0.0 0.0 -8 6 1 2 total P0 0.0 0.0 -9 6 1 2 total P1 0.0 0.0 -10 6 1 2 total P2 0.0 0.0 -11 6 1 2 total P3 0.0 0.0 -4 6 2 1 total P0 0.0 0.0 -5 6 2 1 total P1 0.0 0.0 -6 6 2 1 total P2 0.0 0.0 -7 6 2 1 total P3 0.0 0.0 -0 6 2 2 total P0 0.0 0.0 -1 6 2 2 total P1 0.0 0.0 -2 6 2 2 total P2 0.0 0.0 -3 6 2 2 total P3 0.0 0.0 - material group in group out nuclide mean std. dev. -3 6 1 1 total 0.0 0.0 -2 6 1 2 total 0.0 0.0 -1 6 2 1 total 0.0 0.0 -0 6 2 2 total 0.0 0.0 - material group in group out nuclide mean std. dev. -3 6 1 1 total 0.0 0.0 -2 6 1 2 total 0.0 0.0 -1 6 2 1 total 0.0 0.0 -0 6 2 2 total 0.0 0.0 - material group out nuclide mean std. dev. -1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 - material group in group out nuclide moment mean std. dev. -12 7 1 1 total P0 0.0 0.0 -13 7 1 1 total P1 0.0 0.0 -14 7 1 1 total P2 0.0 0.0 -15 7 1 1 total P3 0.0 0.0 -8 7 1 2 total P0 0.0 0.0 -9 7 1 2 total P1 0.0 0.0 -10 7 1 2 total P2 0.0 0.0 -11 7 1 2 total P3 0.0 0.0 -4 7 2 1 total P0 0.0 0.0 -5 7 2 1 total P1 0.0 0.0 -6 7 2 1 total P2 0.0 0.0 -7 7 2 1 total P3 0.0 0.0 -0 7 2 2 total P0 0.0 0.0 -1 7 2 2 total P1 0.0 0.0 -2 7 2 2 total P2 0.0 0.0 -3 7 2 2 total P3 0.0 0.0 - material group in group out nuclide moment mean std. dev. -12 7 1 1 total P0 0.0 0.0 -13 7 1 1 total P1 0.0 0.0 -14 7 1 1 total P2 0.0 0.0 -15 7 1 1 total P3 0.0 0.0 -8 7 1 2 total P0 0.0 0.0 -9 7 1 2 total P1 0.0 0.0 -10 7 1 2 total P2 0.0 0.0 -11 7 1 2 total P3 0.0 0.0 -4 7 2 1 total P0 0.0 0.0 -5 7 2 1 total P1 0.0 0.0 -6 7 2 1 total P2 0.0 0.0 -7 7 2 1 total P3 0.0 0.0 -0 7 2 2 total P0 0.0 0.0 -1 7 2 2 total P1 0.0 0.0 -2 7 2 2 total P2 0.0 0.0 -3 7 2 2 total P3 0.0 0.0 - material group in group out nuclide mean std. dev. -3 7 1 1 total 0.0 0.0 -2 7 1 2 total 0.0 0.0 -1 7 2 1 total 0.0 0.0 -0 7 2 2 total 0.0 0.0 - material group in group out nuclide mean std. dev. -3 7 1 1 total 0.0 0.0 -2 7 1 2 total 0.0 0.0 -1 7 2 1 total 0.0 0.0 -0 7 2 2 total 0.0 0.0 - material group out nuclide mean std. dev. -1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 - material group in group out nuclide moment mean std. dev. -12 8 1 1 total P0 0.0 0.0 -13 8 1 1 total P1 0.0 0.0 -14 8 1 1 total P2 0.0 0.0 -15 8 1 1 total P3 0.0 0.0 -8 8 1 2 total P0 0.0 0.0 -9 8 1 2 total P1 0.0 0.0 -10 8 1 2 total P2 0.0 0.0 -11 8 1 2 total P3 0.0 0.0 -4 8 2 1 total P0 0.0 0.0 -5 8 2 1 total P1 0.0 0.0 -6 8 2 1 total P2 0.0 0.0 -7 8 2 1 total P3 0.0 0.0 -0 8 2 2 total P0 0.0 0.0 -1 8 2 2 total P1 0.0 0.0 -2 8 2 2 total P2 0.0 0.0 -3 8 2 2 total P3 0.0 0.0 - material group in group out nuclide moment mean std. dev. -12 8 1 1 total P0 0.0 0.0 -13 8 1 1 total P1 0.0 0.0 -14 8 1 1 total P2 0.0 0.0 -15 8 1 1 total P3 0.0 0.0 -8 8 1 2 total P0 0.0 0.0 -9 8 1 2 total P1 0.0 0.0 -10 8 1 2 total P2 0.0 0.0 -11 8 1 2 total P3 0.0 0.0 -4 8 2 1 total P0 0.0 0.0 -5 8 2 1 total P1 0.0 0.0 -6 8 2 1 total P2 0.0 0.0 -7 8 2 1 total P3 0.0 0.0 -0 8 2 2 total P0 0.0 0.0 -1 8 2 2 total P1 0.0 0.0 -2 8 2 2 total P2 0.0 0.0 -3 8 2 2 total P3 0.0 0.0 - material group in group out nuclide mean std. dev. -3 8 1 1 total 0.0 0.0 -2 8 1 2 total 0.0 0.0 -1 8 2 1 total 0.0 0.0 -0 8 2 2 total 0.0 0.0 - material group in group out nuclide mean std. dev. -3 8 1 1 total 0.0 0.0 -2 8 1 2 total 0.0 0.0 -1 8 2 1 total 0.0 0.0 -0 8 2 2 total 0.0 0.0 - material group out nuclide mean std. dev. -1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 9 1 total 1.123604 1.580875 -0 9 2 total 0.000000 0.000000 - material group in nuclide mean std. dev. -1 9 1 total 0.600536 0.748875 -0 9 2 total 0.000000 0.000000 - material group in nuclide mean std. dev. -1 9 1 total 0.600536 0.748875 -0 9 2 total 0.000000 0.000000 - material group in nuclide mean std. dev. -1 9 1 total 0.006197 0.008724 -0 9 2 total 0.000000 0.000000 - material group in nuclide mean std. dev. -1 9 1 total 0.006197 0.008724 -0 9 2 total 0.000000 0.000000 - material group in nuclide mean std. dev. -1 9 1 total 0.0 0.0 -0 9 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 9 1 total 0.0 0.0 -0 9 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 9 1 total 0.0 0.0 -0 9 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 9 1 total 1.117408 1.572151 -0 9 2 total 0.000000 0.000000 - material group in nuclide mean std. dev. -1 9 1 total 0.72038 0.771015 -0 9 2 total 0.00000 0.000000 - material group in group out nuclide moment mean std. dev. -12 9 1 1 total P0 0.720380 0.771015 -13 9 1 1 total P1 0.119844 0.184691 -14 9 1 1 total P2 0.038522 0.064485 -15 9 1 1 total P3 0.056023 0.050595 -8 9 1 2 total P0 0.000000 0.000000 -9 9 1 2 total P1 0.000000 0.000000 -10 9 1 2 total P2 0.000000 0.000000 -11 9 1 2 total P3 0.000000 0.000000 -4 9 2 1 total P0 0.000000 0.000000 -5 9 2 1 total P1 0.000000 0.000000 -6 9 2 1 total P2 0.000000 0.000000 -7 9 2 1 total P3 0.000000 0.000000 -0 9 2 2 total P0 0.000000 0.000000 -1 9 2 2 total P1 0.000000 0.000000 -2 9 2 2 total P2 0.000000 0.000000 -3 9 2 2 total P3 0.000000 0.000000 - material group in group out nuclide moment mean std. dev. -12 9 1 1 total P0 0.720380 0.771015 -13 9 1 1 total P1 0.119844 0.184691 -14 9 1 1 total P2 0.038522 0.064485 -15 9 1 1 total P3 0.056023 0.050595 -8 9 1 2 total P0 0.000000 0.000000 -9 9 1 2 total P1 0.000000 0.000000 -10 9 1 2 total P2 0.000000 0.000000 -11 9 1 2 total P3 0.000000 0.000000 -4 9 2 1 total P0 0.000000 0.000000 -5 9 2 1 total P1 0.000000 0.000000 -6 9 2 1 total P2 0.000000 0.000000 -7 9 2 1 total P3 0.000000 0.000000 -0 9 2 2 total P0 0.000000 0.000000 -1 9 2 2 total P1 0.000000 0.000000 -2 9 2 2 total P2 0.000000 0.000000 -3 9 2 2 total P3 0.000000 0.000000 - material group in group out nuclide mean std. dev. -3 9 1 1 total 1.0 1.227262 -2 9 1 2 total 0.0 0.000000 -1 9 2 1 total 0.0 0.000000 -0 9 2 2 total 0.0 0.000000 - material group in group out nuclide mean std. dev. -3 9 1 1 total 0.0 0.0 -2 9 1 2 total 0.0 0.0 -1 9 2 1 total 0.0 0.0 -0 9 2 2 total 0.0 0.0 - material group out nuclide mean std. dev. -1 9 1 total 0.0 0.0 -0 9 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 10 1 total 0.812963 1.149704 -0 10 2 total 0.000000 0.000000 - material group in nuclide mean std. dev. -1 10 1 total 0.235515 0.613974 -0 10 2 total 0.000000 0.000000 - material group in nuclide mean std. dev. -1 10 1 total 0.235515 0.613974 -0 10 2 total 0.000000 0.000000 - material group in nuclide mean std. dev. -1 10 1 total 0.00018 0.000254 -0 10 2 total 0.00000 0.000000 - material group in nuclide mean std. dev. -1 10 1 total 0.00018 0.000254 -0 10 2 total 0.00000 0.000000 - material group in nuclide mean std. dev. -1 10 1 total 0.0 0.0 -0 10 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 10 1 total 0.0 0.0 -0 10 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 10 1 total 0.0 0.0 -0 10 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 10 1 total 0.812784 1.14945 -0 10 2 total 0.000000 0.00000 - material group in nuclide mean std. dev. -1 10 1 total 0.501009 0.708534 -0 10 2 total 0.000000 0.000000 - material group in group out nuclide moment mean std. dev. -12 10 1 1 total P0 0.501009 0.708534 -13 10 1 1 total P1 0.265494 0.375465 -14 10 1 1 total P2 0.141979 0.200788 -15 10 1 1 total P3 0.074258 0.105017 -8 10 1 2 total P0 0.000000 0.000000 -9 10 1 2 total P1 0.000000 0.000000 -10 10 1 2 total P2 0.000000 0.000000 -11 10 1 2 total P3 0.000000 0.000000 -4 10 2 1 total P0 0.000000 0.000000 -5 10 2 1 total P1 0.000000 0.000000 -6 10 2 1 total P2 0.000000 0.000000 -7 10 2 1 total P3 0.000000 0.000000 -0 10 2 2 total P0 0.000000 0.000000 -1 10 2 2 total P1 0.000000 0.000000 -2 10 2 2 total P2 0.000000 0.000000 -3 10 2 2 total P3 0.000000 0.000000 - material group in group out nuclide moment mean std. dev. -12 10 1 1 total P0 0.501009 0.708534 -13 10 1 1 total P1 0.265494 0.375465 -14 10 1 1 total P2 0.141979 0.200788 -15 10 1 1 total P3 0.074258 0.105017 -8 10 1 2 total P0 0.000000 0.000000 -9 10 1 2 total P1 0.000000 0.000000 -10 10 1 2 total P2 0.000000 0.000000 -11 10 1 2 total P3 0.000000 0.000000 -4 10 2 1 total P0 0.000000 0.000000 -5 10 2 1 total P1 0.000000 0.000000 -6 10 2 1 total P2 0.000000 0.000000 -7 10 2 1 total P3 0.000000 0.000000 -0 10 2 2 total P0 0.000000 0.000000 -1 10 2 2 total P1 0.000000 0.000000 -2 10 2 2 total P2 0.000000 0.000000 -3 10 2 2 total P3 0.000000 0.000000 - material group in group out nuclide mean std. dev. -3 10 1 1 total 1.0 1.414214 -2 10 1 2 total 0.0 0.000000 -1 10 2 1 total 0.0 0.000000 -0 10 2 2 total 0.0 0.000000 - material group in group out nuclide mean std. dev. -3 10 1 1 total 0.0 0.0 -2 10 1 2 total 0.0 0.0 -1 10 2 1 total 0.0 0.0 -0 10 2 2 total 0.0 0.0 - material group out nuclide mean std. dev. -1 10 1 total 0.0 0.0 -0 10 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 11 1 total 0.408939 0.578327 -0 11 2 total 1.258110 1.779236 - material group in nuclide mean std. dev. -1 11 1 total 0.186324 0.632129 -0 11 2 total 0.945986 1.591133 - material group in nuclide mean std. dev. -1 11 1 total 0.186324 0.632129 -0 11 2 total 0.945986 1.591133 - material group in nuclide mean std. dev. -1 11 1 total 0.000687 0.000971 -0 11 2 total 0.028614 0.040466 - material group in nuclide mean std. dev. -1 11 1 total 0.000687 0.000971 -0 11 2 total 0.028614 0.040466 - material group in nuclide mean std. dev. -1 11 1 total 0.0 0.0 -0 11 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 11 1 total 0.0 0.0 -0 11 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 11 1 total 0.0 0.0 -0 11 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 11 1 total 0.408253 0.577356 -0 11 2 total 1.229496 1.738770 - material group in nuclide mean std. dev. -1 11 1 total 0.510003 0.721253 -0 11 2 total 1.201250 1.698824 - material group in group out nuclide moment mean std. dev. -12 11 1 1 total P0 0.478128 0.676174 -13 11 1 1 total P1 0.323679 0.457751 -14 11 1 1 total P2 0.143375 0.202763 -15 11 1 1 total P3 0.054003 0.076372 -8 11 1 2 total P0 0.031875 0.045078 -9 11 1 2 total P1 0.008585 0.012140 -10 11 1 2 total P2 -0.012470 0.017635 -11 11 1 2 total P3 -0.011320 0.016009 -4 11 2 1 total P0 0.000000 0.000000 -5 11 2 1 total P1 0.000000 0.000000 -6 11 2 1 total P2 0.000000 0.000000 -7 11 2 1 total P3 0.000000 0.000000 -0 11 2 2 total P0 1.201250 1.698824 -1 11 2 2 total P1 0.286611 0.405329 -2 11 2 2 total P2 0.218191 0.308569 -3 11 2 2 total P3 -0.048514 0.068609 - material group in group out nuclide moment mean std. dev. -12 11 1 1 total P0 0.478128 0.676174 -13 11 1 1 total P1 0.323679 0.457751 -14 11 1 1 total P2 0.143375 0.202763 -15 11 1 1 total P3 0.054003 0.076372 -8 11 1 2 total P0 0.031875 0.045078 -9 11 1 2 total P1 0.008585 0.012140 -10 11 1 2 total P2 -0.012470 0.017635 -11 11 1 2 total P3 -0.011320 0.016009 -4 11 2 1 total P0 0.000000 0.000000 -5 11 2 1 total P1 0.000000 0.000000 -6 11 2 1 total P2 0.000000 0.000000 -7 11 2 1 total P3 0.000000 0.000000 -0 11 2 2 total P0 1.201250 1.698824 -1 11 2 2 total P1 0.286611 0.405329 -2 11 2 2 total P2 0.218191 0.308569 -3 11 2 2 total P3 -0.048514 0.068609 - material group in group out nuclide mean std. dev. -3 11 1 1 total 1.0 1.414214 -2 11 1 2 total 1.0 1.414214 -1 11 2 1 total 0.0 0.000000 -0 11 2 2 total 1.0 1.414214 - material group in group out nuclide mean std. dev. -3 11 1 1 total 0.0 0.0 -2 11 1 2 total 0.0 0.0 -1 11 2 1 total 0.0 0.0 -0 11 2 2 total 0.0 0.0 - material group out nuclide mean std. dev. -1 11 1 total 0.0 0.0 -0 11 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 12 1 total 0.390295 0.247786 -0 12 2 total 1.619510 2.290334 - material group in nuclide mean std. dev. -1 12 1 total 0.213292 0.271444 -0 12 2 total 1.390975 2.137346 - material group in nuclide mean std. dev. -1 12 1 total 0.213292 0.271444 -0 12 2 total 1.390975 2.137346 - material group in nuclide mean std. dev. -1 12 1 total 0.000217 0.000142 -0 12 2 total 0.045440 0.064261 - material group in nuclide mean std. dev. -1 12 1 total 0.000217 0.000142 -0 12 2 total 0.045440 0.064261 - material group in nuclide mean std. dev. -1 12 1 total 0.0 0.0 -0 12 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 12 1 total 0.0 0.0 -0 12 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 12 1 total 0.0 0.0 -0 12 2 total 0.0 0.0 - material group in nuclide mean std. dev. -1 12 1 total 0.390078 0.247656 -0 12 2 total 1.574071 2.226072 - material group in nuclide mean std. dev. -1 12 1 total 0.435834 0.294632 -0 12 2 total 1.574328 2.226436 - material group in group out nuclide moment mean std. dev. -12 12 1 1 total P0 0.408594 0.278123 -13 12 1 1 total P1 0.222541 0.145776 -14 12 1 1 total P2 0.090972 0.069626 -15 12 1 1 total P3 0.031004 0.035981 -8 12 1 2 total P0 0.027240 0.029555 -9 12 1 2 total P1 -0.010088 0.010945 -10 12 1 2 total P2 -0.006946 0.007537 -11 12 1 2 total P3 0.009692 0.010516 -4 12 2 1 total P0 0.000000 0.000000 -5 12 2 1 total P1 0.000000 0.000000 -6 12 2 1 total P2 0.000000 0.000000 -7 12 2 1 total P3 0.000000 0.000000 -0 12 2 2 total P0 1.574328 2.226436 -1 12 2 2 total P1 0.229748 0.324913 -2 12 2 2 total P2 0.014178 0.020051 -3 12 2 2 total P3 0.038997 0.055150 - material group in group out nuclide moment mean std. dev. -12 12 1 1 total P0 0.408594 0.278123 -13 12 1 1 total P1 0.222541 0.145776 -14 12 1 1 total P2 0.090972 0.069626 -15 12 1 1 total P3 0.031004 0.035981 -8 12 1 2 total P0 0.027240 0.029555 -9 12 1 2 total P1 -0.010088 0.010945 -10 12 1 2 total P2 -0.006946 0.007537 -11 12 1 2 total P3 0.009692 0.010516 -4 12 2 1 total P0 0.000000 0.000000 -5 12 2 1 total P1 0.000000 0.000000 -6 12 2 1 total P2 0.000000 0.000000 -7 12 2 1 total P3 0.000000 0.000000 -0 12 2 2 total P0 1.574328 2.226436 -1 12 2 2 total P1 0.229748 0.324913 -2 12 2 2 total P2 0.014178 0.020051 -3 12 2 2 total P3 0.038997 0.055150 - material group in group out nuclide mean std. dev. -3 12 1 1 total 1.0 0.756454 -2 12 1 2 total 1.0 1.414214 -1 12 2 1 total 0.0 0.000000 -0 12 2 2 total 1.0 1.414214 - material group in group out nuclide mean std. dev. -3 12 1 1 total 0.0 0.0 -2 12 1 2 total 0.0 0.0 -1 12 2 1 total 0.0 0.0 -0 12 2 2 total 0.0 0.0 - material group out nuclide mean std. dev. -1 12 1 total 0.0 0.0 -0 12 2 total 0.0 0.0 +1 10002 1 total 0.0 0.0 +0 10002 2 total 0.0 0.0 diff --git a/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py b/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py index 8f074f4f6b..2c0a2e278c 100644 --- a/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py +++ b/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py @@ -6,15 +6,15 @@ import glob import hashlib sys.path.insert(0, os.pardir) from testing_harness import PyAPITestHarness +from input_set import PinCellInputSet import openmc import openmc.mgxs class MGXSTestHarness(PyAPITestHarness): def _build_inputs(self): - - # The openmc.mgxs module needs a summary.h5 file - self._input_set.settings.output = {'summary': True} + # Set the input set to use the pincell model + self._input_set = PinCellInputSet() # Generate inputs using parent class routine super(MGXSTestHarness, self)._build_inputs() diff --git a/tests/test_mgxs_library_nuclides/inputs_true.dat b/tests/test_mgxs_library_nuclides/inputs_true.dat index 9adacb3a59..8dbb564c65 100644 --- a/tests/test_mgxs_library_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_nuclides/inputs_true.dat @@ -1 +1 @@ -6612ed1baa139ba085456963f0f04a0450bd13c46e6e04ec8fb1c7392168584fce4ca28b75c7606163b4af02a9ead433993f14fa3be8a5ad0083b01c5ff5f33e \ No newline at end of file +eebb1469278f470b5859ed83e9b6526e7c4e3fed503bd22e414c6dc13b19b8e4cb6a44e3c14269e6e173f43056eda78268f455662ae119280bc18ea6a071dac7 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index 26b7f26a3c..4f47bd417f 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -1 +1 @@ -629afcb6af616b3b51fc219ef1a829675322fd0b890d538ac172feb76a3937efd1142d8082072f3ab304d2b5f4bf8a930330dc5b2d322c2c96c7187d7c026b7b \ No newline at end of file +a631b8a347f344d822e6300ed2576caa7c05a74daedeb4aaaabfb89570942cff1bbd47ad7f81306e668e12266404f7abdcf680fdfeb5a4835579892e32bf57e8 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py b/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py index 0bd7732484..da613d78a1 100644 --- a/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py +++ b/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py @@ -6,15 +6,15 @@ import glob import hashlib sys.path.insert(0, os.pardir) from testing_harness import PyAPITestHarness +from input_set import PinCellInputSet import openmc import openmc.mgxs class MGXSTestHarness(PyAPITestHarness): def _build_inputs(self): - - # The openmc.mgxs module needs a summary.h5 file - self._input_set.settings.output = {'summary': True} + # Set the input set to use the pincell model + self._input_set = PinCellInputSet() # Generate inputs using parent class routine super(MGXSTestHarness, self)._build_inputs() From a3126e832074819da0022424c794bee4ae4ec38b Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sun, 29 May 2016 22:30:28 -0400 Subject: [PATCH 595/650] Introduced finer granularity for exact parameter in StatePoint.get_tally(...) to fix MGXS notebook bug --- openmc/mgxs/mgxs.py | 2 +- openmc/statepoint.py | 51 ++++++++++++++++++++++++++++++-------------- openmc/tallies.py | 2 ++ 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 829f881113..e0974d4738 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -693,7 +693,7 @@ class MGXS(object): for tally_type, tally in self.tallies.items(): sp_tally = statepoint.get_tally( tally.scores, tally.filters, tally.nuclides, - estimator=tally.estimator, exact=True) + estimator=tally.estimator, exact_filters=True) sp_tally = sp_tally.get_slice( tally.scores, filters, filter_bins, tally.nuclides) sp_tally.sparse = self.sparse diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 83dd148fe7..329d3e41de 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -497,17 +497,28 @@ class StatePoint(object): self.tallies[tally_id].sparse = self.sparse def get_tally(self, scores=[], filters=[], nuclides=[], - name=None, id=None, estimator=None, exact=False): + name=None, id=None, estimator=None, exact_nuclides=False, + exact_filters=False, exact_scores=False): """Finds and returns a Tally object with certain properties. This routine searches the list of Tallies and returns the first Tally found which satisfies all of the input parameters. - NOTE: If the "exact" parameter is False (default), the input parameters + If the "exactness" parameter is 0 (default), the input parameters do not need to match the complete Tally specification and may only - represent a subset of the Tally's properties. If the "exact" parameter - is True then the scores, filters, nuclides and estimator parameters - must precisely match those of any matching Tally. + represent a subset of the Tally's properties. If the "exactness" + parameter is 1 then the length of the scores, filters, nuclides + parameters must precisely match those of any matching Tally, but the + filter bins may represent a subset of those in any matching Tally + (useful if tallies are merged in the input). If the "exactness" + parameter is 2 then the values of the scores, nuclides and filters + parameters must precisely match those of any matching Tally. + + NOTE: If any of the "exact" parameters are False (default), the input + parameters do not need to match the complete Tally specification and + may only represent a subset of the Tally's properties. If an "exact" + parameter is True then number of scores, filters, or nuclides in the + parameters must precisely match those of any matching Tally. Parameters ---------- @@ -523,9 +534,18 @@ class StatePoint(object): The id specified for the Tally (default is None). estimator: str, optional The type of estimator ('tracklength', 'analog'; default is None). - exact : bool - Whether to strictly enforce the match between the parameters and - the returned tally + exact_filters : bool + If True, the number of filters in the parameters must be identical + to those in the matching Tally. If False (default), the filters in + the parameters may be a subset of those in the matching Tally. + exact_nuclides : bool + If True, the number of nuclides in the parameters must be identical + to those in the matching Tally. If False (default), the nuclides in + the parameters may be a subset of those in the matching Tally. + exact_scores : bool + If True, the number of scores in the parameters must be identical + to those in the matching Tally. If False (default), the scores + in the parameters may be a subset of those in the matching Tally. Returns ------- @@ -554,17 +574,16 @@ class StatePoint(object): continue # Determine if Tally has queried estimator - if (estimator or exact) and estimator != test_tally.estimator: + if estimator and estimator != test_tally.estimator: continue # The number of filters, nuclides and scores must exactly match - if exact: - if len(scores) != test_tally.num_scores: - continue - if len(nuclides) != test_tally.num_nuclides: - continue - if len(filters) != test_tally.num_filters: - continue + if exact_scores and len(scores) != test_tally.num_scores: + continue + if exact_nuclides and len(nuclides) != test_tally.num_nuclides: + continue + if exact_filters and len(filters) != test_tally.num_filters: + continue # Determine if Tally has the queried score(s) if scores: diff --git a/openmc/tallies.py b/openmc/tallies.py index 9559adcade..641b6c26c0 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -762,6 +762,8 @@ class Tally(object): # If filters are the second mergeable filters encountered elif filter1.can_merge(filter2) and merge_filters: + merge_filters = True + mergeable_filter = True return False # If no mergeable filter was found, the tallies are not mergeable From 4fe252ba8a1955c15c73d71ddecd5a961b2b1885 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sun, 29 May 2016 23:14:09 -0400 Subject: [PATCH 596/650] Changes to address comments by @samuelshaner --- openmc/statepoint.py | 10 ---------- openmc/tallies.py | 2 -- 2 files changed, 12 deletions(-) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 329d3e41de..9f485619dd 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -504,16 +504,6 @@ class StatePoint(object): This routine searches the list of Tallies and returns the first Tally found which satisfies all of the input parameters. - If the "exactness" parameter is 0 (default), the input parameters - do not need to match the complete Tally specification and may only - represent a subset of the Tally's properties. If the "exactness" - parameter is 1 then the length of the scores, filters, nuclides - parameters must precisely match those of any matching Tally, but the - filter bins may represent a subset of those in any matching Tally - (useful if tallies are merged in the input). If the "exactness" - parameter is 2 then the values of the scores, nuclides and filters - parameters must precisely match those of any matching Tally. - NOTE: If any of the "exact" parameters are False (default), the input parameters do not need to match the complete Tally specification and may only represent a subset of the Tally's properties. If an "exact" diff --git a/openmc/tallies.py b/openmc/tallies.py index 641b6c26c0..9559adcade 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -762,8 +762,6 @@ class Tally(object): # If filters are the second mergeable filters encountered elif filter1.can_merge(filter2) and merge_filters: - merge_filters = True - mergeable_filter = True return False # If no mergeable filter was found, the tallies are not mergeable From e2fb00c6a56c88be39bf1bb5911ab9b0440b5e1e Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Mon, 30 May 2016 08:34:08 -0400 Subject: [PATCH 597/650] Reordered parameters in StatePoint.get_tally(...) --- openmc/statepoint.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 9f485619dd..14a48e7f6d 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -497,8 +497,8 @@ class StatePoint(object): self.tallies[tally_id].sparse = self.sparse def get_tally(self, scores=[], filters=[], nuclides=[], - name=None, id=None, estimator=None, exact_nuclides=False, - exact_filters=False, exact_scores=False): + name=None, id=None, estimator=None, exact_filters=False, + exact_nuclides=False, exact_scores=False): """Finds and returns a Tally object with certain properties. This routine searches the list of Tallies and returns the first Tally From a9462ff7f79ceea0bde4c6933e8806ad84e8a182 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 30 May 2016 14:23:06 -0400 Subject: [PATCH 598/650] Fixed tallies._can_merge_scores to properly think it can merge a score if the master score list contains the score to be added. --- .../pythonapi/examples/mgxs-part-iv.ipynb | 68 +++++++++---------- openmc/tallies.py | 11 ++- 2 files changed, 39 insertions(+), 40 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb index b330e7ace8..12a4e642a1 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb @@ -433,7 +433,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -723,8 +723,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: b7cc8a3a1460a9662fd3e8d11a6c0cf5902946c2\n", - " Date/Time: 2016-05-24 19:52:06\n", + " Git SHA1: d20322f22d4850bd640b4accf34e2551550d17fb\n", + " Date/Time: 2016-05-30 14:20:53\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -811,20 +811,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 1.4330E+00 seconds\n", - " Reading cross sections = 1.1310E+00 seconds\n", - " Total time in simulation = 1.8040E+01 seconds\n", - " Time in transport only = 1.7983E+01 seconds\n", - " Time in inactive batches = 2.0740E+00 seconds\n", - " Time in active batches = 1.5966E+01 seconds\n", - " Time synchronizing fission bank = 8.0000E-03 seconds\n", - " Sampling source sites = 5.0000E-03 seconds\n", - " SEND/RECV source sites = 3.0000E-03 seconds\n", + " Total time for initialization = 1.4260E+00 seconds\n", + " Reading cross sections = 1.1340E+00 seconds\n", + " Total time in simulation = 1.6739E+01 seconds\n", + " Time in transport only = 1.6650E+01 seconds\n", + " Time in inactive batches = 2.1540E+00 seconds\n", + " Time in active batches = 1.4585E+01 seconds\n", + " Time synchronizing fission bank = 1.0000E-02 seconds\n", + " Sampling source sites = 9.0000E-03 seconds\n", + " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.9482E+01 seconds\n", - " Calculation Rate (inactive) = 24108.0 neutrons/second\n", - " Calculation Rate (active) = 12526.6 neutrons/second\n", + " Total time elapsed = 1.8174E+01 seconds\n", + " Calculation Rate (inactive) = 23212.6 neutrons/second\n", + " Calculation Rate (active) = 13712.7 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -967,11 +967,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/nelsonag/git/openmc/openmc/tallies.py:1988: RuntimeWarning: invalid value encountered in true_divide\n", + "/home/nelsonag/git/openmc/openmc/tallies.py:1986: RuntimeWarning: invalid value encountered in true_divide\n", " self_rel_err = data['self']['std. dev.'] / data['self']['mean']\n", - "/home/nelsonag/git/openmc/openmc/tallies.py:1989: RuntimeWarning: invalid value encountered in true_divide\n", + "/home/nelsonag/git/openmc/openmc/tallies.py:1987: RuntimeWarning: invalid value encountered in true_divide\n", " other_rel_err = data['other']['std. dev.'] / data['other']['mean']\n", - "/home/nelsonag/git/openmc/openmc/tallies.py:1990: RuntimeWarning: invalid value encountered in true_divide\n", + "/home/nelsonag/git/openmc/openmc/tallies.py:1988: RuntimeWarning: invalid value encountered in true_divide\n", " new_tally._mean = data['self']['mean'] / data['other']['mean']\n" ] } @@ -1099,8 +1099,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: b7cc8a3a1460a9662fd3e8d11a6c0cf5902946c2\n", - " Date/Time: 2016-05-24 19:52:26\n", + " Git SHA1: d20322f22d4850bd640b4accf34e2551550d17fb\n", + " Date/Time: 2016-05-30 14:21:12\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -1184,20 +1184,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.6000E-02 seconds\n", - " Reading cross sections = 7.0000E-03 seconds\n", - " Total time in simulation = 1.4412E+01 seconds\n", - " Time in transport only = 1.4376E+01 seconds\n", - " Time in inactive batches = 1.2750E+00 seconds\n", - " Time in active batches = 1.3137E+01 seconds\n", - " Time synchronizing fission bank = 1.0000E-02 seconds\n", - " Sampling source sites = 7.0000E-03 seconds\n", - " SEND/RECV source sites = 3.0000E-03 seconds\n", + " Total time for initialization = 2.8000E-02 seconds\n", + " Reading cross sections = 4.0000E-03 seconds\n", + " Total time in simulation = 1.2816E+01 seconds\n", + " Time in transport only = 1.2770E+01 seconds\n", + " Time in inactive batches = 1.3130E+00 seconds\n", + " Time in active batches = 1.1503E+01 seconds\n", + " Time synchronizing fission bank = 9.0000E-03 seconds\n", + " Sampling source sites = 3.0000E-03 seconds\n", + " SEND/RECV source sites = 6.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.4458E+01 seconds\n", - " Calculation Rate (inactive) = 39215.7 neutrons/second\n", - " Calculation Rate (active) = 15224.2 neutrons/second\n", + " Total time elapsed = 1.2854E+01 seconds\n", + " Calculation Rate (inactive) = 38080.7 neutrons/second\n", + " Calculation Rate (active) = 17386.8 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1384,7 +1384,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 40, @@ -1395,7 +1395,7 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAADDCAYAAACS2+oqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXeYFeX1xz8HUJSmoIJiA8WOokSwm43RtUSjiQ1LbAnq\nzySYaGzR6IrGHns0tih2YzcxidjWXlAUS2woIoiggoqKorDn98fMwmXZe88su5e7O3w/z7PP3jvv\nd9733HfOnHmnnHnN3RFCCNH2aVdpA4QQQrQMCuhCCJETFNCFECInKKALIUROUEAXQoicoIAuhBA5\nodUFdDN7zcy2rrQdizJm9m8z+0Uz1r/czE5sSZsWRcyszsxWK1Ge231FPriAuHv4B+wLjAK+BD4E\n7ge2yLJuUO+1wPDm1lPJv/Q3zASmp39fAi9V2q4Mdp8CfFdg83TgD5W2qwk2TwOeBDZtwvqPAocs\nBDvfB74FejRY/jJQB6ySsZ7ZwGoFftakfQVYDDgZeDPdxhPSfXe7Sm/LRranfLAF/sIRupkdBZwP\nnA70BFYBLgN+Gq27CHG2u3dL/7q6+0Yt3YCZtW/pOoFbC2zu5u7nlaGNluZWd+8GLAvUArdX1pxG\ncWAcsE/9AjPrDyyRlmXFmmnHncAuwP5Ad6AvcBGwU6ONlcfHIuSDLUlwNOlGcuT8eQnN4sCFJCP3\nicAFwGJp2Q9JRgVHAVNSzUFp2VCSI923JEe7e9Pl44BtCo6GtwEjUs2rwMCCtutIRzDp93lGMWkb\n7wCfAvcAK6TLV03XbdfYkRNYnWRDfQ58DNxS4vcXHTkVtHMAMD6t648F5QYcD4wFPgFuBZZusO4h\n6bq16fIDSEaAnwAn1fcX0Av4GuheUP8P0jbbFxlpXB+NIkr1Rbqtp6RlLwPrNmU7FGzDw4C3ganA\npcHo6PqC7+uQjGKXSb8vDfwztXNq+rl3WnY6MAuYkfrSxenytYGRqf4NYM+C+ncCXk/1E4CjMo7C\nxgF/BJ4vWHYucEJq7yqNjdaAA4EnGvo3GfaVRmzYNvWHFTLYeiwwBviG5DLsOqltn5Hsc7s05hsl\nbP4t8G66Hc7Juj3lg833wWiEvhnQMe2AYpwEDAY2AAakn08qKF8e6Ar0Bn4F/NXMlnL3q4CbSDZ4\nN3fftUj9uwA3A0ulnfPXgrKiox0z2wY4A9gDWAH4gCRghusCpwEPuPvSwErAJSW0WdgCWINkJzvZ\nzNZKlx9JcqazFUn/fEZy9lPI1iQbfHszW4fk9+9D8puWStfD3aeQ7AR7Fay7H4nzz26G7Y32hZlV\nA1sC/dKyvUkcch4ybAeAn5AcfDYE9krrLomZLU4STKaS9BskwejvwMokZ5IzSP3F3U8CngB+k/rb\nMDPrRLIj3Ugy2toHuCztZ4CrgaGejMb6A49EdhXwLNDVzNYys3Yk2+VG4lH3fH7ZhH2lkB8Dz7n7\nRxm0Q4AdSYJRO+A+4L/AcsAw4CYzW6MJNu8GDEz/djWzQzLYUAr5YEYfjAL6MsCn7l5XQrMvcKq7\nT3X3qcCpQOHNjO+A09x9trv/B/gKWKuReorxpLs/4Mnh6gaSA0c9pXaOfYFr3H2Mu39PMjrazMxW\nydDm98CqZraiu3/n7k8H+mPMbJqZfZb+v7agzIGatJ5XSEZCA9KyQ4ET3f2j1MbhwB5pAKhf9xR3\n/8bdZ5I45H3u/oy7zyK5PlrI9aR9n9axD0mfFWPvBnYv34S++J7kQL2umZm7v5UeVBqSZTuc6e5f\nuvsEkoPShpHNJDvKL4E96v3T3ae5+93uPtPdvwbOJDkgFmNnYJy7X+8JL5NcptgjLf8OWM/Murr7\nF2l5U7iBZIffjuQ69qQmrt8clgUm138xs+7pdv7czL5poL3I3SelPrYp0Nndz3b3We7+KPAvCi4f\nZeCstL8mkpy9l1pXPtiCPhgF9KnAsgUBpjF6kxzx6hmfLptTR4MDwgygS9BuIZMLPs8AlgjsKbRr\nfP2XtHOnAitmWPcYkr553sxeNbODAczsBDP70symm1nhSPpcd+/h7t3T/wc3qK/QyQp//6rA3akj\nTwP+R+KkvQr0Exv8pgkFv+kb5h2R3AusY2Z9gGrgc3d/ocTvvK2B3ZMb0TTaF+mOfinJ6GOymf3N\nzBrbrlm2Q7H+KWozyf2c14CN6wvMbEkzu8LM3jezz4HHgKXNrNiBf1Vg0/r+N7PPSHb++v7fnWTk\nNt7MHjWzTUvY1Rg3pvUdRHKwLRupX9b75kokfbxCfbm7f+bu3UlGoYs3WL2oj6WMJ9t+01h9DeNB\nQ+SDLeiDUWB8huS63W4lNB+mRhUamHUk0pQbRI0xA+hU8L3w6D6p0C4z60xyxjGR5NoixdZ194/d\n/VB3XxE4nOQUaDV3P9Pn3rw5opm2Q3Ig3DF15Hqn7tzgNLmwjz4iOeWs/01Lpr+p3u6ZwD9IboLt\nT+nReSaK9UVadqm7bwysR3LWdUwjVZTaDs2xa1pqT42Z1Tv/0SSXtgalp+D1I6P6namhv00guTdR\n2P/d3P03aRsvuvtuJJce7iXp26bY+AHJNeodgbsakXxNcf+dr7qgra4FvjkReBgYZGaNBdOGwaWw\n7kkklwsKWYVkP89qc+H6q9DMMxP5YHYfLBnQ3X06yU2Av5rZrunRp4OZ7WhmZ6WyW4GTzGxZM1sW\n+BPZA8kUkps+TaHQGV8C9jWzdma2A8lN2HpuBg42sw3MrCPJNbRn3X2Cu39K4qD7p+seQnLjJWnA\nbA8zqz96f05y02RBr0OXuix0BXBG/amfmS1nZoVPDzVc9w5gFzPb1MwWI7m81ZAbSEaEu5CMEJtF\nsb4ws43NbLCZdSC5mfYtjfdR0e3QXNvc/S2Sa73HpYu6prZMN7MeQE2DVRr627+ANc1s/9SvF0t/\n19rp533NrJsn9yC+JLmh1VQOIblx2fAyByQ38X6e7lf9SE7fi9GkfcXdHyS5dHBPup0WS7fVZpQ+\nODwHfG1mx6Z9UkVyWeCWJth8jJktbWYrk9wnani9uknIB7P7YHjpwt0vIHlK5SSSO7cfAEcw90bp\n6cALQP314ReAP5eqsuDzNSTXh6aZ2V2NlEfr/47kpuJnJNfp7i6w+xGSg8tdJMG7L8nNn3qGktzd\n/5TkTvVTBWWDgOfMbHr6O4e5+3iKc2x6qjs9Pe39uIi9Db9fRHLUHWlmXwBPk9xUbnRdd/8fyRME\nt5GMOr4g2SYzCzRPkzj86HSEuCAUtlusL7oBV5E8izuOpB/ne+Qsw3Yo1T9ZOA8Ymg4mLiQZPX5K\n0pf/bqC9CNjTzKaa2YXu/hXJpakhJP05CTiLuZckfgGMS0+dDyW5yZyFOb/B3ce5++jGykie0Pie\n5LLitcx/AG7uvvJzkoBxI8k+8h7JfrJ9kTZIrzH/lOTpik9JLmn8wt3fyWgzJD79IjCa5EGGvwd2\nNoZ8MKFJPmjuzb3qISpFeur4Ocld/vEFyx8GbnL3BdmRhFhgzKyOxB/fq7QtiyKtLvVflMbMdk5P\ndzsDfwFeaRDMBwEbkYzihRCLEArobY9dSU7LJpJc959z6mhm15E803pkeidfiIWNTvkriC65CCFE\nTtAIXQghckKHclSaPkJ4IckB4xp3P7sRjU4NRFlx9+a+3Go+5NuiNVDMt1v8koslWZxvk7xLYhLJ\na3eHuPubDXTOcQVtP1kDW9bMW9mIDA1ekEGTJWn51QyaFxr01T01sFvNvMsOjnMVLqg7PdT8/u2/\nlSy/eM2hYR3DHrlq/oUjauDAmjlfV/rxO/NrGvDynDcVFOdqfhVqvqNjqLnCD5tv2fSai+lWM2zO\n9w+fL/VakZRNrcUDepN8+/iC5OgnamCrmjlf+57xv7Ctce+uGxs0OcPPezjev7v84ZP5ls3887l0\nPHFujs7/dbo8rOfcYQ3fRDE/Ay55NtT099dCzU1HNOJvo2pgUM2cr49ftvH8mgZs/ZdSidQpx8R9\nuHXdyFDz+AM7zLvgxhrYv2beZTuWrqO6GkaOLO7b5bjkMhh4x93Hp8+03kpyI0+Ito58W7RqyhHQ\nV2Ted0FMpGnvgRCitSLfFq2aclxDb+xUoPFzlidr5n7uuHQZTCkza1dV2oKmM6Cq0hY0mY5Vm8Si\nF2thdG25Tcnu20/UzP3cBn27/VabV9qEptO7qtIWNI0NqjIKa9M/GDu2tLIcAX0iyQt56lmJYi/n\naXjNvK3RFgP6hlWVtqDJZAroP6hK/uq5prHX3DSb7L5dcM28LdJh6y0qbULTWbGq0hY0jcwBvSr9\ng3794L33ivt2OS65jAL6mdmqlrwAfgjJC/OFaOvIt0WrpsVH6O4+28x+Q5KxWP9o1xst3Y4QCxv5\ntmjtlOU5dHf/L02blUiINoF8W7RmKpb6b2ZOn6DtbWPb7LQZocYv7RRqZg+JJzxfYvnPQ03XpaeH\nmk06PBdq1gkGfhd9fGRYx5E9Lwo1VfZoqHmHNUPNmHlmBmycZ9gs1HxO91CzQoZpMl9pt1lZEouy\nkCQWlZq1MfZZ7LNYs1v8gM1md8bToJ5EnBfxk5PjerocN//z7A2p7hw/r33X9fFbik854PhQ04f3\nQ83hX8TP18/8TeyT/CiWXHRwnDtyZPuVSpZXV6/OyJEHLNTn0IUQQlQABXQhhMgJCuhCCJETFNCF\nECInKKALIUROUEAXQoicoIAuhBA5QQFdCCFyQlkyRTNzblA+M67isJ6lJ4IA6HXGH0KNdY1zUGYe\n2zXUVPF0qOntjb/PqZDzOLFk+Vo9Dwjr6E88UcBmPjrUPMtGoeb358fb4a6jg7f3A+dwbKjZ2f4V\nal4JFWXmlyXKrolXf3x2/Jr1frwbano9Fye62SazQ83sp+PEu5073R5q7iBOGhp1QJyk9iXdQs02\nPBlqNlmqb6j58IY4geuWDLPoXMWhoYZNBpUuXxsYWXzf1whdCCFyggK6EELkBAV0IYTICQroQgiR\nExTQhRAiJyigCyFETlBAF0KInFDZ59D7BOVd4iou/eyYUNNudqnJBlKujI9tH9Ej1CxvF4Sa3f3O\nUOOPlJ7A4vkfx5NX7O53hBoGx88Xb7JUXA0Pxn38s6vjPv7rr44INXeyewaD/pJBUz6GXnlx0bKr\nZg4L1+/EN6FmeTJMgtEr7vNhnBNq9n5ow1Bzhp0Qai71/4SaXtYn1Nzue4aabT6MfXutiaGEtTcZ\nF7f1VtxW+8/j5/3ZMMiHWb10sUboQgiRExTQhRAiJyigCyFETlBAF0KInKCALoQQOUEBXQghcoIC\nuhBC5AQFdCGEyAnm7pVp2MxH1a1bUjPowxfCeuq+6RRqBq3+WKh54fEfhhqfEUpgQAbNIxk0QY7G\nERPjxJm3vV+o2aZdPJHCiY+GEuqeiicIefGPpbc3QHebFmqu5LBQc67V4O6xUWXAzHyduuK+O3Zq\nvF1GLBtPYJLl540Ps/fg+OfjJDU6x5Kj1vtzqDn/8dITtwAM3zpOFjx5XDQ7DvBsLBmxf6w5sDqD\nG10Sx9Hr+u0dak7jTyXLt6Iz17frW9S3NUIXQoicoIAuhBA5QQFdCCFyggK6EELkBAV0IYTICQro\nQgiRExTQhRAiJyigCyFETijLjEVm9j7wBVAHfO/ugxvTDbFbS9Yzunc8SwoWz5QzmPNDzTc/iJMH\nluiSYcaRF+Nj5C37xck8++x/d8nyr/yqsI4HP94t1Fhd3H9+T/ybnjpho1CzJXGiGI/FbW3yw+fi\nespEVt9+o33x2a3s7XgqriHL3BMb80ncV/5VhqSYwbEP2MtxW3957qS4ra3jtk7O8Ltu7BPPWrV/\n39tDzYHfZhjTxpOQQb/4d43n+FAzbs3SyXdrbFl6/XJNQVcHVLl7hjmyhGhTyLdFq6Vcl1ysjHUL\nUUnk26LVUi7HdOABMxtlZkPL1IYQlUC+LVot5brksrm7Tzaz5YAHzewNd3+yTG0JsTCRb4tWS1kC\nurtPTv9/YmZ3A4OB+Zx+Ws1lcz4vWTWIJasGlcMcsQjwWu1UXq+N39TYXLL6Nn5hwZdNwTYtu20i\np8yohW9qARj7Umlpiwd0M+sEtHP3r8ysM1ANnNqYtkfNES3dvFhE6V+1DP2rlpnz/fZTx7Z4G03x\nbex3Ld6+WETpVJX8Af02gvfGDC8qLccIvRdwt5l5Wv9N7j6yDO0IsbCRb4tWTYsHdHcfB2R4gFyI\ntoV8W7R2Kjpj0dW+T0nNMkwN6/mP7xhqetqUULOv3xJqXvCNQ80v3roz1HjHUMKYfqUTQmrr4gcs\nOvq3oebwY26IjamOfWT57caFmsnPrRa31TFuq93bcRIHQ9pVdMaiPWdfV7T89svj2YhmT2gfao48\n88xQM5kVQs1t4w4KNU/3jY9jHYgT7wa/+WqomdU79oG1ur0eat67qH+osfXjtrx3KOHttVYONWs/\nMT6u6JnSLlvdF0YOMc1YJIQQeUcBXQghcoICuhBC5AQFdCGEyAkK6EIIkRMU0IUQIicooAshRE5Q\nQBdCiJxQ0cQiu7V0IsKs9eJE1s36PxJq7iGeuee3XBJqdueOUNPVvww12379aKjp+PvS5XdfFSdU\nrcSEULO0fx5qXmRgqNmqkfdTzWfPyvHLs3y/UMIuZ/0j1Nzfbq+KJhbt7LcVLf/aO4V1rMikUPOl\nxTMfLZshOe9sPzbUjLJGJ2aah/7+WqihfewDK2bIvxmz8hqhprd/FNfDgFCzJDNCzRbvB2/NAtbs\n83KoGft6aXuqu8DIvkosEkKI3KOALoQQOUEBXQghcoICuhBC5AQFdCGEyAkK6EIIkRMU0IUQIico\noAshRE6oaGLRkLprSmp28n+H9exvt8eNXRwft54ftn6oGcyYuK0RcVu3H7BzqNnT7isteDBu57vB\ncV7N4kvFs8ywSdyW/zNuy3pmaGtc3Nabq60aata18RVNLLLziv/WWRvGCXO2TdxX5/PrUHPMXy4N\nNbOPztBNf4q3y6GnXRRqruS3oeb59nFbHWfHiUUDeCvU3MEuoWb3P8VxyE6Lt1e7v4cS9jzk+pLl\nA+jNSe2qlVgkhBB5RwFdCCFyggK6EELkBAV0IYTICQroQgiRExTQhRAiJyigCyFETlBAF0KInBBn\nOJSRt610csD6tnJYxz5114WaW34W2zKdbqHGT20fasaeslJsD/uEmj36lW7rvLFxUslavB1qtqBz\nqLn/uT1DzQyWDDXtOSDU9O27RaiZRO9QAxmmvSkj+x5VPGmuw82zwvXHECfOjLTzQs09R1eHmo38\ntFDz/knxDEp8F0s+XezmUHPXZXE9kzLMxMR68f66x5FxYuX9w38U29M+buuO2TuEmods25LlXSk9\nS5VG6EIIkRMU0IUQIicooAshRE5QQBdCiJyggC6EEDlBAV0IIXKCAroQQuQEBXQhhMgJCzxjkZld\nA+wMTHH3DdJl3YHbgFWB94G93P2LIuv7T+tKJxn88/G9QztmrRLnRp3S57hQs7f9I9S866uHmo+t\nZ6hZzd8LNT++4pmS5XWbhlVw7IDhoea0r08ONUu8Gbd16w9+GmqG7BjMwgS899/lQ83u3BVqxtjm\nCzxjUUv4Nl3rijdwS2xD9U73hpqRN+8aapbYeVrcVreRoea+9+J9ccvVHgo1D3+xfahZ7PRQwvXn\nxsluXdrFs5ntfmzclm8da16JJyHj6bo4se7wA0rPWMT61bQ7bmRZZiy6Fmi4dY4HHnL3tYBHgBOa\nUb8QlUK+LdokCxzQ3f1J4LMGi3cFRqSfRwC7LWj9QlQK+bZoq7T0NfSe7j4FwN0nA8u1cP1CVAr5\ntmj16KaoEELkhJZ+2+IUM+vl7lPMbHng41LiN2vumPN52ap1WbZq3RY2RywqfFU7mq9qR5eziSb5\nNjNr5n5uXwUdqspomsgztZOhdkr6ZfLYktrmBnRL/+q5DzgIOBs4ECh5q37tmj2a2bwQCV2qBtKl\nauCc71NO/Xtzq2yWb9OxprntCwFA1fLJHwDr92P4Q8WfklvgSy5mdjPwNLCmmX1gZgcDZwHbmdlb\nwLbpdyHaFPJt0VZZ4BG6u+9bpKj0G9qFaOXIt0VbZYETi5rdsJk/VLdZSc2Pbn82rmfP2aHGb4pP\nRI7e78+h5vwMjx5Ptu6h5lvvGGr6MLlkuW0V/6a6w+K8Gts/7j+7I0Nb37ZMW3wSt/VIz9J+A7Ct\nPbPAiUXNxcwcu7Jo+bmzXg7rONouDTU3EifX7HdjnISVZbt8/0W8XTo8l8EHquO2pi0et/Xpd/Fs\nZmtmmLXKHovb8qcyuNEfM/j2xXFb9nAg2KgaG16exCIhhBCtCAV0IYTICQroQgiRExTQhRAiJyig\nCyFETlBAF0KInKCALoQQOUEBXQghckJLv5yrSWz37ydLlh+7ZzzjzhkXtQ81NxwZJ2Csbu+GmvHe\nK9R0ILZnrK0Rah7zISXLt3siTmBa7ouGr/Sen7fpF2p67xEnQnXfb2aoqdsp7pvvOocSaqiJRfPN\nT7GQ8V8VLbrSxoSrH3tFnPB39WGLhZoZGV6XNKl9vF3WeDquZ/iOsc0nPxy31WOruK0eB04INR9e\nt2yoWWl63Bb949/1SoY+3ODBuCk7vsRMV0C1Q6lxuEboQgiRExTQhRAiJyigCyFETlBAF0KInKCA\nLoQQOUEBXQghcoICuhBC5AQFdCGEyAkVTSzyJ0vPBPLUTzYP69ht2C2h5l72CjVDiWeImWI9Q83h\nfkWo2XbcU6GGF0sXT9tjibCKV3vEzQzsW3zC2Xr81gwzttxUOiEC4Eb2DjUDiGfzyaIpnbK2EOhf\nvOgIuzxcfeSh1aHmYG4ONSM63xpqDown4uLATf4WaobOin3fJr4Uavy42J6x260Yavpd/mHc1toZ\nfHubeDaimbM3CDU/5U9xW0cH9vQD/lW8WCN0IYTICQroQgiRExTQhRAiJyigCyFETlBAF0KInKCA\nLoQQOUEBXQghcoICuhBC5ISKJhaxSemH6J88dbuwCts1nk3E741nE/n1yfEsQhvyZqj5P+Lko8vf\nODrUsEfpZIYeO8TH4u7LZUiaGBsnTdiDcVvtx8TbYdiAjULNwf+LE2EOX++CUFNxbi/e979/OU7S\nsfvj/nzkhC1CzQFXZ/CBg2MfuO7ieB+6YNjhoWbLlYOMOcAejv1t9VUmhRomxMluNi5uq26b+Lcf\n9OioUFPtI0MN0cRpwYxeGqELIUROUEAXQoicoIAuhBA5QQFdCCFyggK6EELkBAV0IYTICQroQgiR\nExTQhRAiJ5h7nMDQ6Ipm1wA7A1PcfYN02SnAUODjVPZHd/9vkfWdHUs/+H/A/XECxl1f7x5qftc5\nTkR51dYPNdvUPRq39VI8a8sDA7cONevxesnyERwY1vEz7g41q3w9IdRc2PnIUHPiyPNDzYDtnw01\nPXxqqBlTt2GomdZhZdw9Q1bN/LSIb29aYr/aMt7n/nzOUaGmm00PNdv7A6Fm9Ulxks4HvZcNNaMY\nHGp2P/DfoebsEcNCzfr+SqjZ6fXaUPNG/z6hZkmfEWr63PlxqBm052OhZrp3K1m+JV24rl2/or7d\nnBH6tcD2jSw/390Hpn+NOrwQrRz5tmiTLHBAd/cngc8aKVqgUZEQrQX5tmirlOMa+q/N7GUzu9rM\nlipD/UJUCvm2aNW09Mu5LgOGu7ub2enA+cAvi6rfqZn7uUcVLFPVwuaIRYXva5/h+8eeKWcTTfPt\nCTVzP3ergqWqymmbyDEzakfxTe0LALzE4iW1LRrQ3f2Tgq9XAf8sucIaNS3ZvFiEWaxqMxar2mzO\n929Pa9k3MjbZt1euadH2xaJLp6pBdKoaBMBGdGHM8EuKapt7ycUouK5oZssXlP0ceK2Z9QtRKeTb\nos2xwCN0M7sZqAKWMbMPgFOAH5nZhkAd8D5wWAvYKMRCRb4t2ioLHNDdfd9GFl/bDFuEaBXIt0Vb\nZYETi5rdsJkfWXdGSc32FidFXOsHh5p3WS3UjD5ny1CTYcIimJXhybYMsyxxZ6C5bXhYxQ/qtgk1\nl3icxLH5yS+FGr6PJZyT4XevnmWWpYcyNFa9wIlFzcXMnA4lfmu/DJXckaGvMgzH9lprRKh5wmPf\nP8yuDDVZunv4/WeGmu12vi/U/IIbQs0M7xRqDn887p+Tf3hCqPm7HxLXQ7zPDr3rxpLl1T1h5Nbt\nypJYJIQQohWhgC6EEDlBAV0IIXKCAroQQuSEVhPQJ9a+V2kTms5HtZW2oMl8WZvhBmdrY0ZtpS1o\nHnW1lbagycysfa7SJjSZN2o/iUWtiLdqp7R4nQrozWFybaUtaDJf1r5caROazje1lbageXhtpS1o\nMt8poJedXAd0IYQQzaOlX87VJFZibjZ1N7rM8z1ZtmZYR196hJrF6BIb0yuW8M28XyeNg96rNtDM\nzlDP0hk0fYPygSuEVazdyO/+jsXnWd6ZdcJ6BvYOJTArg2ZgBs1K8y+a9Cb0XrtgQbeuYTWjR2do\nq4wM3Gju50kfQu8VCwpXzlDBEhk07WNJX5YJNZ/Tcb5lY2lPv4LlK7DifJqGeIa3Cw/M8I7KfsSi\nHo3klizJR/Ms75ShEwdmCA1Zfnv/RvqwIcvQZ57vS/LBfMsGBrGhXxcYWaK8oolFFWlYLDJUNLFI\niDJSzLcrFtCFEEK0LLqGLoQQOUEBXQghckKrCOhmtoOZvWlmb5vZcZW2Jwtm9r6ZjTGzl8zs+Urb\n0xhmdo2ZTTGzVwqWdTezkWb2lpk90JqmUiti7ylmNtHMRqd/O1TSxqbS1nxbfl0eFpZvVzygm1k7\n4FKSWdbXA/Yxs7VLr9UqqAOq3H0jdx9caWOK0Njs9ccDD7n7WsAjQPwquYVHY/YCnO/uA9O//y5s\noxaUNurb8uvysFB8u+IBHRgMvOPu4939e+BWYNcK25QFo3X0X1GKzF6/K1D/ztARwG4L1agSFLEX\nyPA8XOukLfq2/LoMLCzfbg0bbkVgQsH3iemy1o4DD5jZKDMbWmljmkBPd58C4O6TgeUqbE8Wfm1m\nL5vZ1a3tVDqgLfq2/Hrh0qK+3RoCemNHqLbwLOXm7r4xsBPJRskwQ4ZYAC4DVnf3DYHJwPkVtqcp\ntEXfll/3XIupAAABIElEQVQvPFrct1tDQJ8IrFLwfSVgUoVsyUw6CqifDf5uktPrtsAUM+sFcyY+\n/rjC9pTE3T/xuckSVwGDKmlPE2lzvi2/XniUw7dbQ0AfBfQzs1XNbHFgCBDPQVVBzKyTmXVJP3cG\nqmm9s8DPM3s9Sd8elH4+ELh3YRsUMI+96c5Zz89pvf3cGG3Kt+XXZafsvl3Rd7kAuPtsM/sNySsK\n2gHXuPsbFTYrohdwd5ri3QG4yd1LvWKhIhSZvf4s4HYzOwT4ANizchbOSxF7f2RmG5I8ffE+cFjF\nDGwibdC35ddlYmH5tlL/hRAiJ7SGSy5CCCFaAAV0IYTICQroQgiRExTQhRAiJyigCyFETlBAF0KI\nnKCALoQQOUEBXQghcsL/A1cunn39vbPfAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/openmc/tallies.py b/openmc/tallies.py index 9559adcade..2313a61734 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -827,9 +827,7 @@ class Tally(object): # Search for each of this tally's scores in the other tally for score in self.scores: - if score not in other.scores: - all_scores_match = False - else: + if score in other.scores: no_scores_match = False # Search for each of the other tally's scores in this tally @@ -3471,7 +3469,8 @@ class Tallies(cv.CheckedList): """ if not isinstance(tally, Tally): - msg = 'Unable to add a non-Tally "{0}" to the Tallies instance'.format(tally) + msg = 'Unable to add a non-Tally "{0}" to the ' \ + 'Tallies instance'.format(tally) raise TypeError(msg) if merge: @@ -3482,13 +3481,13 @@ class Tallies(cv.CheckedList): # If a mergeable tally is found if tally2.can_merge(tally): - # Replace tally 2 with the merged tally + # Replace tally2 with the merged tally merged_tally = tally2.merge(tally) self[i] = merged_tally merged = True break - # If not mergeable tally was found, simply add this tally + # If no mergeable tally was found, simply add this tally if not merged: super(Tallies, self).append(tally) From 0ee6a6169cb05ab3d79f57766533a9c0a69e57b1 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 31 May 2016 06:47:27 -0500 Subject: [PATCH 599/650] Fix typo --- openmc/lattice.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/lattice.py b/openmc/lattice.py index 0277d50cb2..7690104c71 100644 --- a/openmc/lattice.py +++ b/openmc/lattice.py @@ -654,7 +654,7 @@ class HexLattice(Lattice): are assigned an index corresponding to their position relative to skewed :math:`(x,\alpha,z)` axes as described fully in :ref:`hexagonal_indexing`. However, note that when universes are assigned to - lattice elements using the :attr:`RectLattice.universes` property, the array + lattice elements using the :attr:`HexLattice.universes` property, the array indices do not correspond to natural indices. Parameters From 2b219ae15f8f1a581e808f7d664f522353ba89cc Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 31 May 2016 08:41:05 -0500 Subject: [PATCH 600/650] Refactor handling of cell fill types. Fix Geometry.get_* methods --- openmc/cell.py | 149 ++++++++++------------- openmc/geometry.py | 55 ++++----- openmc/summary.py | 4 +- tests/test_distribmat/results_true.dat | 2 +- tests/test_distribmat/test_distribmat.py | 2 +- 5 files changed, 92 insertions(+), 120 deletions(-) diff --git a/openmc/cell.py b/openmc/cell.py index 29f85754af..900c952e51 100644 --- a/openmc/cell.py +++ b/openmc/cell.py @@ -36,7 +36,7 @@ class Cell(object): automatically be assigned. name : str, optional Name of the cell. If not specified, the name is the empty string. - fill : openmc.Material or openmc.Universe or openmc.Lattice or 'void' or iterable of openmc.Material, optional + fill : openmc.Material or openmc.Universe or openmc.Lattice or None or iterable of openmc.Material, optional Indicates what the region of space is filled with region : openmc.Region, optional Region of space that is assigned to the cell. @@ -47,9 +47,13 @@ class Cell(object): Unique identifier for the cell name : str Name of the cell - fill : openmc.Material or openmc.Universe or openmc.Lattice or 'void' or iterable of openmc.Material - Indicates what the region of space is filled with - region : openmc.Region + fill : openmc.Material or openmc.Universe or openmc.Lattice or None or iterable of openmc.Material + Indicates what the region of space is filled with. If None, the cell is + treated as a void. An iterable of materials is used to fill repeated + instances of a cell with different materials. + fill_type : {'material', 'universe', 'lattice', 'distribmat', 'void'} + Indicates what the cell is filled with. + region : openmc.Region or None Region of space that is assigned to the cell. rotation : Iterable of float If the cell is filled with a universe, this array specifies the angles @@ -68,6 +72,9 @@ class Cell(object): \sin\theta \sin\psi \\ -\sin\theta & \sin\phi \cos\theta & \cos\phi \cos\theta \end{array} \right ] + rotation_matrix : numpy.ndarray + The rotation matrix defined by the angles specified in the + :attr:`Cell.rotation` property. translation : Iterable of float If the cell is filled with a universe, this array specifies a vector that is used to translate (shift) the universe. @@ -82,20 +89,14 @@ class Cell(object): # Initialize Cell class attributes self.id = cell_id self.name = name - self._fill = None - self._type = None - self._region = None + self.fill = fill + self.region = region self._rotation = None self._rotation_matrix = None self._translation = None self._offsets = None self._distribcell_index = None - if fill is not None: - self.fill = fill - if region is not None: - self.region = region - def __contains__(self, point): if self.region is None: return True @@ -128,35 +129,24 @@ class Cell(object): def __repr__(self): string = 'Cell\n' - string += '{0: <16}{1}{2}\n'.format('\tID', '=\t', self._id) - string += '{0: <16}{1}{2}\n'.format('\tName', '=\t', self._name) + string += '{: <16}=\t{}\n'.format('\tID', self.id) + string += '{: <16}=\t{}\n'.format('\tName', self.name) - if isinstance(self._fill, openmc.Material): - string += '{0: <16}{1}{2}\n'.format('\tMaterial', '=\t', - self._fill._id) - elif isinstance(self._fill, basestring): - string += '{0: <16}=\tvoid\n'.format('\tMaterial') - elif isinstance(self._fill, Iterable): - string += '{0: <16}{1}'.format('\tMaterial', '=\t') - string += '[' - string += ', '.join(['void' if m == 'void' else str(m.id) - for m in self.fill]) - string += ']\n' - elif isinstance(self._fill, (openmc.Universe, openmc.Lattice)): - string += '{0: <16}{1}{2}\n'.format('\tFill', '=\t', - self._fill._id) + if self.fill_type == 'material': + string += '{: <16}=\tMaterial {}\n'.format('\tFill', self.fill.id) + elif self.fill_type == 'void': + string += '{: <16}=\tNone\n'.format('\tFill') + elif self.fill_type == 'distribmat': + string += '{: <16}=\t{}\n'.format('\tFill', list(map( + lambda m: m if m is None else m.id, self.fill))) else: - string += '{0: <16}{1}{2}\n'.format('\tFill', '=\t', self._fill) + string += '{: <16}=\t{}\n'.format('\tFill', self.fill.id) - string += '{0: <16}{1}{2}\n'.format('\tRegion', '=\t', self._region) - - string += '{0: <16}{1}{2}\n'.format('\tRotation', '=\t', - self._rotation) - string += '{0: <16}{1}{2}\n'.format('\tTranslation', '=\t', - self._translation) - string += '{0: <16}{1}{2}\n'.format('\tOffset', '=\t', self._offsets) - string += '{0: <16}{1}{2}\n'.format('\tDistribcell index', '=\t', - self._distribcell_index) + string += '{: <16}=\t{}\n'.format('\tRegion', self.region) + string += '{: <16}=\t{}\n'.format('\tRotation', self.rotation) + string += '{: <16}=\t{}\n'.format('\tTranslation', self.translation) + string += '{: <16}=\t{}\n'.format('\tOffset', self.offsets) + string += '{: <16}=\t{}\n'.format('\tDistribcell index', self.distribcell_index) return string @@ -180,8 +170,10 @@ class Cell(object): return 'universe' elif isinstance(self.fill, openmc.Lattice): return 'lattice' + elif isinstance(self.fill, Iterable): + return 'distribmat' else: - return None + return 'void' @property def region(self): @@ -228,33 +220,25 @@ class Cell(object): @fill.setter def fill(self, fill): - if isinstance(fill, basestring): - if fill.strip().lower() == 'void': - self._type = 'void' - else: + if fill is not None: + if isinstance(fill, basestring): + if fill.strip().lower() != 'void': + msg = 'Unable to set Cell ID="{0}" to use a non-Material ' \ + 'or Universe fill "{1}"'.format(self._id, fill) + raise ValueError(msg) + fill = None + + elif isinstance(fill, Iterable): + for i, f in enumerate(fill): + if f is not None: + cv.check_type('cell.fill[i]', f, openmc.Material) + + elif not isinstance(fill, (openmc.Material, openmc.Lattice, + openmc.Universe)): msg = 'Unable to set Cell ID="{0}" to use a non-Material or ' \ - 'Universe fill "{1}"'.format(self._id, fill) + 'Universe fill "{1}"'.format(self._id, fill) raise ValueError(msg) - elif isinstance(fill, openmc.Material): - self._type = 'normal' - - elif isinstance(fill, Iterable): - cv.check_type('cell.fill', fill, Iterable, - (openmc.Material, basestring)) - self._type = 'normal' - - elif isinstance(fill, openmc.Universe): - self._type = 'fill' - - elif isinstance(fill, openmc.Lattice): - self._type = 'lattice' - - else: - msg = 'Unable to set Cell ID="{0}" to use a non-Material or ' \ - 'Universe fill "{1}"'.format(self._id, fill) - raise ValueError(msg) - self._fill = fill @rotation.setter @@ -290,7 +274,8 @@ class Cell(object): @region.setter def region(self, region): - cv.check_type('cell region', region, Region) + if region is not None: + cv.check_type('cell region', region, Region) self._region = region @distribcell_index.setter @@ -345,11 +330,11 @@ class Cell(object): def get_cell_instance(self, path, distribcell_index): # If the Cell is filled by a Material - if self._type == 'normal' or self._type == 'void': + if self.fill_type in ('material', 'distribmat', 'void'): offset = 0 # If the Cell is filled by a Universe - elif self._type == 'fill': + elif self.fill_type == 'universe': offset = self.offsets[distribcell_index-1] offset += self.fill.get_cell_instance(path, distribcell_index) @@ -372,8 +357,8 @@ class Cell(object): nuclides = OrderedDict() - if self._type != 'void': - nuclides.update(self._fill.get_all_nuclides()) + if self.fill_type != 'void': + nuclides.update(self.fill.get_all_nuclides()) return nuclides @@ -391,8 +376,8 @@ class Cell(object): cells = OrderedDict() - if self._type == 'fill' or self._type == 'lattice': - cells.update(self._fill.get_all_cells()) + if self.fill_type in ('universe', 'lattice'): + cells.update(self.fill.get_all_cells()) return cells @@ -432,11 +417,11 @@ class Cell(object): universes = OrderedDict() - if self._type == 'fill': - universes[self._fill._id] = self._fill - universes.update(self._fill.get_all_universes()) - elif self._type == 'lattice': - universes.update(self._fill.get_all_universes()) + if self.fill_type == 'universe': + universes[self.fill.id] = self.fill + universes.update(self.fill.get_all_universes()) + elif self.fill_type == 'lattice': + universes.update(self.fill.get_all_universes()) return universes @@ -447,24 +432,20 @@ class Cell(object): if len(self._name) > 0: element.set("name", str(self.name)) - if isinstance(self.fill, basestring): + if self.fill_type == 'void': element.set("material", "void") - elif isinstance(self.fill, openmc.Material): + elif self.fill_type == 'material': element.set("material", str(self.fill.id)) - elif isinstance(self.fill, Iterable): - element.set("material", ' '.join([m if m == 'void' else str(m.id) + elif self.fill_type == 'distribmat': + element.set("material", ' '.join(['void' if m is None else str(m.id) for m in self.fill])) - elif isinstance(self.fill, (openmc.Universe, openmc.Lattice)): + elif self.fill_type in ('universe', 'lattice'): element.set("fill", str(self.fill.id)) self.fill.create_xml_subelement(xml_element) - else: - element.set("fill", str(self.fill)) - self.fill.create_xml_subelement(xml_element) - if self.region is not None: # Set the region attribute with the region specification element.set("region", str(self.region)) diff --git a/openmc/geometry.py b/openmc/geometry.py index 006151900d..2625ed3fa5 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -144,14 +144,8 @@ class Geometry(object): """ - all_cells = self._root_universe.get_all_cells() - cells = set() - - for cell in all_cells.values(): - if cell._type == 'normal': - cells.add(cell) - - cells = list(cells) + all_cells = self.root_universe.get_all_cells() + cells = list(set(all_cells.values())) cells.sort(key=lambda x: x.id) return cells @@ -166,12 +160,7 @@ class Geometry(object): """ all_universes = self._root_universe.get_all_universes() - universes = set() - - for universe in all_universes.values(): - universes.add(universe) - - universes = list(universes) + universes = list(set(all_universes.values())) universes.sort(key=lambda x: x.id) return universes @@ -204,15 +193,17 @@ class Geometry(object): """ material_cells = self.get_all_material_cells() - materials = set() + materials = [] for cell in material_cells: - if isinstance(cell.fill, Iterable): - for m in cell.fill: materials.add(m) - else: - materials.add(cell.fill) + if cell.fill_type == 'distribmat': + for m in cell.fill: + if m is not None and m not in materials: + materials.append(m) + elif cell.fill_type == 'material': + if cell.fill not in materials: + materials.append(cell.fill) - materials = list(materials) materials.sort(key=lambda x: x.id) return materials @@ -227,13 +218,13 @@ class Geometry(object): """ all_cells = self.get_all_cells() - material_cells = set() + material_cells = [] for cell in all_cells: - if cell._type == 'normal': - material_cells.add(cell) + if cell.fill_type in ('material', 'distribmat'): + if cell not in material_cells: + material_cells.append(cell) - material_cells = list(material_cells) material_cells.sort(key=lambda x: x.id) return material_cells @@ -248,15 +239,15 @@ class Geometry(object): """ all_universes = self.get_all_universes() - material_universes = set() + material_universes = [] for universe in all_universes: cells = universe.cells for cell in cells: - if cell._type == 'normal': - material_universes.add(universe) + if cell.fill_type in ('material', 'distribmat', 'void'): + if universe not in material_universes: + material_universes.append(universe) - material_universes = list(material_universes) material_universes.sort(key=lambda x: x.id) return material_universes @@ -271,13 +262,13 @@ class Geometry(object): """ cells = self.get_all_cells() - lattices = set() + lattices = [] for cell in cells: - if isinstance(cell.fill, openmc.Lattice): - lattices.add(cell.fill) + if cell.fill_type == 'lattice': + if cell.fill not in lattices: + lattices.append(cell.fill) - lattices = list(lattices) lattices.sort(key=lambda x: x.id) return lattices diff --git a/openmc/summary.py b/openmc/summary.py index c3277809a0..2af9b6be6f 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -493,13 +493,13 @@ class Summary(object): # Retrieve the object corresponding to the fill type and ID if fill_type == 'normal': if isinstance(fill_id, Iterable): - fill = [self.get_material_by_id(mat) if mat > 0 else 'void' + fill = [self.get_material_by_id(mat) if mat > 0 else None for mat in fill_id] else: if fill_id > 0: fill = self.get_material_by_id(fill_id) else: - fill = 'void' + fill = None elif fill_type == 'universe': fill = self.get_universe_by_id(fill_id) else: diff --git a/tests/test_distribmat/results_true.dat b/tests/test_distribmat/results_true.dat index 15a00ee7d0..bf96784d71 100644 --- a/tests/test_distribmat/results_true.dat +++ b/tests/test_distribmat/results_true.dat @@ -3,7 +3,7 @@ k-combined: Cell ID = 11 Name = - Material = [2, 3, void, 2] + Fill = [2, 3, None, 2] Region = -10000 Rotation = None Translation = None diff --git a/tests/test_distribmat/test_distribmat.py b/tests/test_distribmat/test_distribmat.py index 6700a96b60..96d41c3fbe 100644 --- a/tests/test_distribmat/test_distribmat.py +++ b/tests/test_distribmat/test_distribmat.py @@ -45,7 +45,7 @@ class DistribmatTestHarness(PyAPITestHarness): r0 = openmc.ZCylinder(R=0.3) c11 = openmc.Cell(cell_id=11) c11.region = -r0 - c11.fill = [dense_fuel, light_fuel, 'void', dense_fuel] + c11.fill = [dense_fuel, light_fuel, None, dense_fuel] c12 = openmc.Cell(cell_id=12) c12.region = +r0 c12.fill = moderator From e3c927b0210abf7b2ca2d9d52c3d22d0b91e0712 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 31 May 2016 09:41:15 -0500 Subject: [PATCH 601/650] Fix use of fill_type in universe module --- openmc/universe.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openmc/universe.py b/openmc/universe.py index a28729d8e2..7f32d68a9d 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -130,7 +130,7 @@ class Universe(object): Parameters ---------- point : 3-tuple of float - Cartesian coordinatesof the point + Cartesian coordinates of the point Returns ------- @@ -142,9 +142,9 @@ class Universe(object): p = np.asarray(point) for cell in self._cells.values(): if p in cell: - if cell._type in ('normal', 'void'): + if cell.fill_type in ('material', 'distribmat', 'void'): return [self, cell] - elif cell._type == 'fill': + elif cell.fill_type == 'universe': if cell.translation is not None: p -= cell.translation if cell.rotation is not None: From 108d8c835b58df505f02b124a1f0e9d13f4eb0d0 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 31 May 2016 12:53:12 -0500 Subject: [PATCH 602/650] Add colors and filename argument to Universe.plot --- openmc/universe.py | 47 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/openmc/universe.py b/openmc/universe.py index 7f32d68a9d..84a5acdcac 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -155,7 +155,7 @@ class Universe(object): return [] def plot(self, center=(0., 0., 0.), width=(1., 1.), pixels=(200, 200), - basis='xy', color_by='cell', seed=None): + basis='xy', color_by='cell', colors=None, filename=None, seed=None): """Display a slice plot of the universe. Parameters @@ -170,6 +170,22 @@ class Universe(object): The basis directions for the plot color_by : {'cell', 'material'} Indicate whether the plot should be colored by cell or by material + colors : dict + + Assigns colors to specific materials or cells. Keys are instances of + :class:`Cell` or :class:`Material` and values are RGB 3-tuples or RGBA + 4-tuples. Red, green, blue, and alpha should all be floats in the + range [0.0, 1.0], for example: + + .. code-block:: python + + # Make water blue + water = openmc.Cell(fill=h2o) + universe.plot(..., colors={water: (0., 0., 1.)) + + filename : str or None + Filename to save plot to. If no filename is given, the plot will be + displayed using the currently enabled matplotlib backend. seed : hashable object or None Hashable object which is used to seed the random number generator used to select colors. If None, the generator is seeded from the @@ -182,6 +198,15 @@ class Universe(object): if seed is not None: random.seed(seed) + if colors is None: + # Create default dictionary if none supplied + colors = {} + else: + # Convert to RGBA if necessary + for obj, rgb in colors.items(): + if len(rgb) == 3: + colors[obj] = rgb + (1.0,) + if basis == 'xy': x_min = center[0] - 0.5*width[0] x_max = center[0] + 0.5*width[0] @@ -206,7 +231,7 @@ class Universe(object): y_coords = np.linspace(y_max, y_min, pixels[1], endpoint=False) - \ 0.5*(y_max - y_min)/pixels[1] - colors = {} + # Search for locations and assign colors img = np.zeros(pixels + (4,)) # Use RGBA form for i, x in enumerate(x_coords): for j, y in enumerate(y_coords): @@ -220,21 +245,27 @@ class Universe(object): if len(path) > 0: try: if color_by == 'cell': - uid = path[-1].id + obj = path[-1] elif color_by == 'material': if path[-1].fill_type == 'material': - uid = path[-1].fill.id + obj = path[-1].fill else: continue except AttributeError: continue - if uid not in colors: - colors[uid] = (random.random(), random.random(), + if obj not in colors: + colors[obj] = (random.random(), random.random(), random.random(), 1.0) - img[j,i,:] = colors[uid] + img[j,i,:] = colors[obj] + # Display image plt.imshow(img, extent=(x_min, x_max, y_min, y_max)) - plt.show() + + # Show or save the plot + if filename is None: + plt.show() + else: + plt.savefig(filename) def add_cell(self, cell): """Add a cell to the universe. From d16e3fca8976ccdc11d1eaf5583992e38bf96a2c Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 1 Jun 2016 01:40:17 -0500 Subject: [PATCH 603/650] Remove many __deepcopy__ implementations --- openmc/arithmetic.py | 112 ------------------------------------------- openmc/filter.py | 21 -------- openmc/material.py | 25 ---------- openmc/mesh.py | 23 --------- openmc/tallies.py | 47 +----------------- openmc/trigger.py | 19 -------- 6 files changed, 1 insertion(+), 246 deletions(-) diff --git a/openmc/arithmetic.py b/openmc/arithmetic.py index 5869cad802..f9ef58db89 100644 --- a/openmc/arithmetic.py +++ b/openmc/arithmetic.py @@ -67,24 +67,6 @@ class CrossScore(object): def __ne__(self, other): return not self == other - def __deepcopy__(self, memo): - existing = memo.get(id(self)) - - # If this is the first time we have tried to copy this object, create a copy - if existing is None: - clone = type(self).__new__(type(self)) - clone._left_score = self.left_score - clone._right_score = self.right_score - clone._binary_op = self.binary_op - - memo[id(self)] = clone - - return clone - - # If this object has been copied before, return the first copy made - else: - return existing - def __repr__(self): string = '({0} {1} {2})'.format(self.left_score, self.binary_op, self.right_score) @@ -169,28 +151,9 @@ class CrossNuclide(object): def __ne__(self, other): return not self == other - def __deepcopy__(self, memo): - existing = memo.get(id(self)) - - # If this is the first time we have tried to copy this object, create a copy - if existing is None: - clone = type(self).__new__(type(self)) - clone._left_nuclide = self.left_nuclide - clone._right_nuclide = self.right_nuclide - clone._binary_op = self.binary_op - - memo[id(self)] = clone - - return clone - - # If this object has been copied before, return the first copy made - else: - return existing - def __repr__(self): return self.name - @property def left_nuclide(self): return self._left_nuclide @@ -325,27 +288,6 @@ class CrossFilter(object): string += '{0: <16}{1}{2}\n'.format('\tBins', '=\t', filter_bins) return string - def __deepcopy__(self, memo): - existing = memo.get(id(self)) - - # If this is the first time we have tried to copy this object, create a copy - if existing is None: - clone = type(self).__new__(type(self)) - clone._left_filter = self.left_filter - clone._right_filter = self.right_filter - clone._binary_op = self.binary_op - clone._type = self.type - clone._bins = self._bins - clone._stride = self.stride - - memo[id(self)] = clone - - return clone - - # If this object has been copied before, return the first copy made - else: - return existing - @property def left_filter(self): return self._left_filter @@ -532,23 +474,6 @@ class AggregateScore(object): def __ne__(self, other): return not self == other - def __deepcopy__(self, memo): - existing = memo.get(id(self)) - - # If this is the first time we have tried to copy this object, create a copy - if existing is None: - clone = type(self).__new__(type(self)) - clone._scores = self.scores - clone._aggregate_op = self.aggregate_op - - memo[id(self)] = clone - - return clone - - # If this object has been copied before, return the first copy made - else: - return existing - def __repr__(self): string = ', '.join(map(str, self.scores)) string = '{0}({1})'.format(self.aggregate_op, string) @@ -622,23 +547,6 @@ class AggregateNuclide(object): def __ne__(self, other): return not self == other - def __deepcopy__(self, memo): - existing = memo.get(id(self)) - - # If this is the first time we have tried to copy this object, create a copy - if existing is None: - clone = type(self).__new__(type(self)) - clone._nuclides = self.nuclides - clone._aggregate_op = self._aggregate_op - - memo[id(self)] = clone - - return clone - - # If this object has been copied before, return the first copy made - else: - return existing - def __repr__(self): # Append each nuclide in the aggregate to the string @@ -757,26 +665,6 @@ class AggregateFilter(object): string += '{0: <16}{1}{2}\n'.format('\tBins', '=\t', self.bins) return string - def __deepcopy__(self, memo): - existing = memo.get(id(self)) - - # If this is the first time we have tried to copy this object, create a copy - if existing is None: - clone = type(self).__new__(type(self)) - clone._type = self.type - clone._aggregate_filter = self.aggregate_filter - clone._aggregate_op = self.aggregate_op - clone._bins = self._bins - clone._stride = self.stride - - memo[id(self)] = clone - - return clone - - # If this object has been copied before, return the first copy made - else: - return existing - @property def aggregate_filter(self): return self._aggregate_filter diff --git a/openmc/filter.py b/openmc/filter.py index 52560a193a..e06958490b 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -104,27 +104,6 @@ class Filter(object): def __hash__(self): return hash(repr(self)) - def __deepcopy__(self, memo): - existing = memo.get(id(self)) - - # If this is the first time we have tried to copy this object, create a copy - if existing is None: - clone = type(self).__new__(type(self)) - clone._type = self.type - clone._bins = copy.deepcopy(self.bins, memo) - clone._num_bins = self.num_bins - clone._mesh = copy.deepcopy(self.mesh, memo) - clone._stride = self.stride - clone._distribcell_paths = copy.deepcopy(self.distribcell_paths) - - memo[id(self)] = clone - - return clone - - # If this object has been copied before, return the first copy made - else: - return existing - def __repr__(self): string = 'Filter\n' string += '{0: <16}{1}{2}\n'.format('\tType', '=\t', self.type) diff --git a/openmc/material.py b/openmc/material.py index 6b2b07f2d4..f29a42117f 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -154,31 +154,6 @@ class Material(object): return string - def __deepcopy__(self, memo): - existing = memo.get(id(self)) - - if existing is None: - # If this is the first time we have tried to copy this object, create a copy - clone = type(self).__new__(type(self)) - clone._id = self._id - clone._name = self._name - clone._density = self._density - clone._density_units = self._density_units - clone._nuclides = deepcopy(self._nuclides, memo) - clone._macroscopic = self._macroscopic - clone._elements = deepcopy(self._elements, memo) - clone._sab = deepcopy(self._sab, memo) - clone._convert_to_distrib_comps = self._convert_to_distrib_comps - clone._distrib_otf_file = self._distrib_otf_file - - memo[id(self)] = clone - - return clone - - else: - # If this object has been copied before, return the first copy made - return existing - @property def id(self): return self._id diff --git a/openmc/mesh.py b/openmc/mesh.py index 8bad6c5374..0c88d4a680 100644 --- a/openmc/mesh.py +++ b/openmc/mesh.py @@ -1,5 +1,4 @@ from collections import Iterable -import copy from numbers import Real, Integral from xml.etree import ElementTree as ET import sys @@ -83,28 +82,6 @@ class Mesh(object): else: return True - def __deepcopy__(self, memo): - existing = memo.get(id(self)) - - # If this is the first time we have tried to copy this object, create a copy - if existing is None: - clone = type(self).__new__(type(self)) - clone._id = self._id - clone._name = self._name - clone._type = self._type - clone._dimension = copy.deepcopy(self._dimension, memo) - clone._lower_left = copy.deepcopy(self._lower_left, memo) - clone._upper_right = copy.deepcopy(self._upper_right, memo) - clone._width = copy.deepcopy(self._width, memo) - - memo[id(self)] = clone - - return clone - - # If this object has been copied before, return the first copy made - else: - return existing - @property def id(self): return self._id diff --git a/openmc/tallies.py b/openmc/tallies.py index 2313a61734..1d895022cc 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -129,51 +129,6 @@ class Tally(object): self._sp_filename = None self._results_read = False - def __deepcopy__(self, memo): - existing = memo.get(id(self)) - - # If this is the first time we have tried to copy this object, create a copy - if existing is None: - clone = type(self).__new__(type(self)) - clone.id = self.id - clone.name = self.name - clone.estimator = self.estimator - clone.num_realizations = self.num_realizations - clone._sum = copy.deepcopy(self._sum, memo) - clone._sum_sq = copy.deepcopy(self._sum_sq, memo) - clone._mean = copy.deepcopy(self._mean, memo) - clone._std_dev = copy.deepcopy(self._std_dev, memo) - clone._with_summary = self.with_summary - clone._with_batch_statistics = self.with_batch_statistics - clone._derived = self.derived - clone._sparse = self.sparse - clone._sp_filename = self._sp_filename - clone._results_read = self._results_read - - clone._filters = [] - for self_filter in self.filters: - clone.filters.append(copy.deepcopy(self_filter, memo)) - - clone._nuclides = [] - for nuclide in self.nuclides: - clone.nuclides.append(copy.deepcopy(nuclide, memo)) - - clone._scores = [] - for score in self.scores: - clone.scores.append(score) - - clone._triggers = [] - for trigger in self.triggers: - clone.triggers.append(trigger) - - memo[id(self)] = clone - - return clone - - # If this object has been copied before, return the first copy made - else: - return existing - def __eq__(self, other): if not isinstance(other, Tally): return False @@ -2875,7 +2830,7 @@ class Tally(object): return other * self**-1 - def __pos__(self): + def __abs__(self): """The absolute value of this tally. Returns diff --git a/openmc/trigger.py b/openmc/trigger.py index b8383bd271..537af1c8d8 100644 --- a/openmc/trigger.py +++ b/openmc/trigger.py @@ -39,25 +39,6 @@ class Trigger(object): self.threshold = threshold self._scores = [] - def __deepcopy__(self, memo): - existing = memo.get(id(self)) - - # If this is first time we have tried to copy this object, create a copy - if existing is None: - clone = type(self).__new__(type(self)) - clone._trigger_type = self._trigger_type - clone._threshold = self._threshold - - clone.scores = self.scores - - memo[id(self)] = clone - - return clone - - # If this object has been copied before, return the first copy made - else: - return existing - def __eq__(self, other): if str(self) == str(other): return True From 07ef67fee019b3c2eb580fc651e6bbbf0bf2e0cb Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 26 May 2016 07:46:07 -0500 Subject: [PATCH 604/650] Initial TRISO modeling capabilities --- docs/source/pythonapi/index.rst | 27 +++++ openmc/model/__init__.py | 1 + openmc/model/triso.py | 172 ++++++++++++++++++++++++++++++ setup.py | 3 +- tests/test_triso/inputs_true.dat | 1 + tests/test_triso/results_true.dat | 2 + tests/test_triso/test_triso.py | 107 +++++++++++++++++++ 7 files changed, 312 insertions(+), 1 deletion(-) create mode 100644 openmc/model/__init__.py create mode 100644 openmc/model/triso.py create mode 100644 tests/test_triso/inputs_true.dat create mode 100644 tests/test_triso/results_true.dat create mode 100644 tests/test_triso/test_triso.py diff --git a/docs/source/pythonapi/index.rst b/docs/source/pythonapi/index.rst index bf35e75874..54cb935941 100644 --- a/docs/source/pythonapi/index.rst +++ b/docs/source/pythonapi/index.rst @@ -296,6 +296,33 @@ Multi-group Cross Section Libraries openmc.mgxs.Library +------------------------------------- +:mod:`openmc.model` -- Model Building +------------------------------------- + +TRISO Fuel Modeling +------------------- + +Classes ++++++++ + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst + + openmc.model.TRISO + +Functions ++++++++++ + +.. autosummary:: + :toctree: generated + :nosignatures: + + openmc.model.create_triso_lattice + + .. _Jupyter: https://jupyter.org/ .. _NumPy: http://www.numpy.org/ .. _Codecademy: https://www.codecademy.com/tracks/python diff --git a/openmc/model/__init__.py b/openmc/model/__init__.py new file mode 100644 index 0000000000..ffb1f42820 --- /dev/null +++ b/openmc/model/__init__.py @@ -0,0 +1 @@ +from .triso import * diff --git a/openmc/model/triso.py b/openmc/model/triso.py new file mode 100644 index 0000000000..dc53e6ec01 --- /dev/null +++ b/openmc/model/triso.py @@ -0,0 +1,172 @@ +import copy +from collections import Iterable +from numbers import Real + +import numpy as np + +import openmc +import openmc.checkvalue as cv + +class TRISO(object): + """Tristructural-isotopic (TRISO) micro fuel particle + + Parameters + ---------- + materials : Iterable of openmc.Material + Material to be assigned to each layer of the TRISO particle starting + with the innermost and proceeding outwards + radii : Iterable of float + Outer radii in cm of each layer of the TRISO particle in ascending order + center : Iterable of float + Cartesian coordinates of the center of the TRISO particle in cm + + Attributes + ---------- + cells : list of opemc.Cell + Each layer of the TRISO particle + center : numpy.ndarray + Cartesian coordinates of the center of the TRISO particle in cm + outside : openmc.Region + Region of space outside of the TRISO particle + bounding_box : tuple of numpy.ndarray + Lower-left and upper-right coordinates of an axis-aligned bounding box + for the TRISO particle + + """ + + def __init__(self, materials, radii, center=(0., 0., 0.)): + surfaces = [openmc.Sphere(R=r) for r in radii] + cells = [] + for i, m in enumerate(materials): + c = openmc.Cell(fill=m) + if i == 0: + c.region = -surfaces[i] + else: + c.region = +surfaces[i-1] & -surfaces[i] + cells.append(c) + self._cells = cells + self._surfaces = surfaces + self.center = np.asarray(center) + + @property + def bounding_box(self): + return self.cells[-1].region.bounding_box + + @property + def cells(self): + return self._cells + + @property + def center(self): + return self._center + + @property + def outside(self): + return ~self.cells[-1].region.nodes[-1] + + @center.setter + def center(self, center): + cv.check_type('TRISO center', center, Iterable, Real) + for s in self._surfaces: + s.x0, s.y0, s.z0 = center + self._center = center + + def classify(self, lattice): + """Determine lattice element indices which might contain the TRISO particle. + + Parameters + ---------- + lattice : openmc.RectLattice + Lattice to check + + Returns + ------- + list of tuple + (z,y,x) lattice element indices which might contain the TRISO + particle. + + """ + + ll, ur = self.bounding_box + if lattice.ndim == 2: + (i_min, j_min), p = lattice.find_element(ll) + (i_max, j_max), p = lattice.find_element(ur) + return list(np.broadcast(*np.ogrid[ + j_min:j_max+1, i_min:i_max+1])) + else: + (i_min, j_min, k_min), p = lattice.find_element(ll) + (i_max, j_max, k_max), p = lattice.find_element(ur) + return list(np.broadcast(*np.ogrid[ + k_min:k_max+1, j_min:j_max+1, i_min:i_max+1])) + + +def create_triso_lattice(trisos, lower_left, pitch, shape, background): + """Create a lattice containing TRISO particles for optimized tracking. + + Parameters + ---------- + trisos : list of openmc.model.TRISO + List of TRISO particles to put in lattice + lower_left : Iterable of float + Lower-left Cartesian coordinates of the lattice + pitch : Iterable of float + Pitch of the lattice elements in the x-, y-, and z-directions + shape : Iterable of float + Number of lattice elements in the x-, y-, and z-directions + background : openmc.Material + A background material that is used anywhere within the lattice but + outside a TRISO particle + + Returns + ------- + lattice : openmc.RectLattice + A lattice containing the TRISO particles + + """ + + lattice = openmc.RectLattice() + lattice.lower_left = lower_left + lattice.pitch = pitch + + indices = list(np.broadcast(*np.ogrid[:shape[2], :shape[1], :shape[0]])) + triso_locations = {idx: [] for idx in indices} + for t in trisos: + for idx in t.classify(lattice): + if idx in sorted(triso_locations): + # Create copy of TRISO particle with materials preserved and + # different cell/surface IDs + t_copy = copy.deepcopy(t) + for c, c_copy in zip(t.cells, t_copy.cells): + c_copy.id = None + c_copy.fill = c.fill + for s in t_copy._surfaces: + s.id = None + triso_locations[idx].append(t_copy) + + # Create universes + universes = np.empty(shape[::-1], dtype=openmc.Universe) + for idx, triso_list in sorted(triso_locations.items()): + if len(triso_list) > 0: + outside_trisos = openmc.Intersection(*[t.outside for t in triso_list]) + background_cell = openmc.Cell(fill=background, region=outside_trisos) + else: + background_cell = openmc.Cell(fill=background) + + u = openmc.Universe() + u.add_cell(background_cell) + for t in triso_list: + u.add_cells(t.cells) + iz, iy, ix = idx + t.center = lattice.get_local_coordinates(t.center, (ix, iy, iz)) + + if len(shape) == 2: + universes[-1 - idx[0], idx[1]] = u + else: + universes[idx[0], -1 - idx[1], idx[2]] = u + lattice.universes = universes + + # Set outer universe + background_cell = openmc.Cell(fill=background) + lattice.outer = openmc.Universe(cells=[background_cell]) + + return lattice diff --git a/setup.py b/setup.py index 770f280ad1..99e465c9d4 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,8 @@ except ImportError: kwargs = {'name': 'openmc', 'version': '0.7.1', - 'packages': ['openmc', 'openmc.data', 'openmc.mgxs', 'openmc.stats'], + 'packages': ['openmc', 'openmc.data', 'openmc.mgxs', 'openmc.model', + 'openmc.stats'], 'scripts': glob.glob('scripts/openmc-*'), # Metadata diff --git a/tests/test_triso/inputs_true.dat b/tests/test_triso/inputs_true.dat new file mode 100644 index 0000000000..40f312850d --- /dev/null +++ b/tests/test_triso/inputs_true.dat @@ -0,0 +1 @@ +6c6fecedf3db0b91b69b7b7b57b3a52c42947253bea4ee3889d6bbd6e74935cc4e599c1c743eb589a1045868412f3f88c5fef7cf10e180bdc4bd182970c9ee15 \ No newline at end of file diff --git a/tests/test_triso/results_true.dat b/tests/test_triso/results_true.dat new file mode 100644 index 0000000000..8f968f65a0 --- /dev/null +++ b/tests/test_triso/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +1.685303E+00 1.121936E-01 diff --git a/tests/test_triso/test_triso.py b/tests/test_triso/test_triso.py new file mode 100644 index 0000000000..f7f4daa7ba --- /dev/null +++ b/tests/test_triso/test_triso.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python + +import os +import sys +import glob +import random +from math import sqrt + +import numpy as np + +sys.path.insert(0, os.pardir) +from testing_harness import PyAPITestHarness +import openmc +import openmc.model + + +class TRISOTestHarness(PyAPITestHarness): + def _build_inputs(self): + # Define TRISO matrials + fuel = openmc.Material() + fuel.set_density('g/cm3', 10.5) + fuel.add_nuclide('U-235', 0.14154) + fuel.add_nuclide('U-238', 0.85846) + fuel.add_nuclide('C-Nat', 0.5) + fuel.add_nuclide('O-16', 1.5) + + porous_carbon = openmc.Material() + porous_carbon.set_density('g/cm3', 1.0) + porous_carbon.add_nuclide('C-Nat', 1.0) + porous_carbon.add_s_alpha_beta('Graph', '71t') + + ipyc = openmc.Material() + ipyc.set_density('g/cm3', 1.90) + ipyc.add_nuclide('C-Nat', 1.0) + ipyc.add_s_alpha_beta('Graph', '71t') + + sic = openmc.Material() + sic.set_density('g/cm3', 3.20) + sic.add_element('Si', 1.0) + sic.add_nuclide('C-Nat', 1.0) + + opyc = openmc.Material() + opyc.set_density('g/cm3', 1.87) + opyc.add_nuclide('C-Nat', 1.0) + opyc.add_s_alpha_beta('Graph', '71t') + + graphite = openmc.Material() + graphite.set_density('g/cm3', 1.1995) + graphite.add_nuclide('C-Nat', 1.0) + graphite.add_s_alpha_beta('Graph', '71t') + + # Create TRISO particles + materials = [fuel, porous_carbon, ipyc, sic, opyc] + radii = np.array([212.5, 312.5, 347.5, 382.5, 422.5])*1e-4 + trisos = [] + random.seed(1) + for i in range(100): + # Randomly sample location + x = random.uniform(-0.5, 0.5) + y = random.uniform(-0.5, 0.5) + z = random.uniform(-0.5, 0.5) + t = openmc.model.TRISO(materials, radii, (x, y, z)) + + # Make sure TRISO doesn't overlap with another + for tp in trisos: + xp, yp, zp = tp.center + distance = sqrt((x - xp)**2 + (y - yp)**2 + (z - zp)**2) + if distance <= 2*radii[-1]: + break + else: + trisos.append(t) + + # Define box to contain lattice + min_x = openmc.XPlane(x0=-0.5, boundary_type='reflective') + max_x = openmc.XPlane(x0=0.5, boundary_type='reflective') + min_y = openmc.YPlane(y0=-0.5, boundary_type='reflective') + max_y = openmc.YPlane(y0=0.5, boundary_type='reflective') + min_z = openmc.ZPlane(z0=-0.5, boundary_type='reflective') + max_z = openmc.ZPlane(z0=0.5, boundary_type='reflective') + box = openmc.Cell(region=+min_x & -max_x & +min_y & -max_y & +min_z & -max_z) + + # Create lattice + ll, ur = box.region.bounding_box + shape = (3, 3, 3) + lattice = openmc.model.create_triso_lattice( + trisos, ll, (ur - ll)/shape, shape, graphite) + box.fill = lattice + + root = openmc.Universe(0, cells=[box]) + geom = openmc.Geometry(root) + geom.export_to_xml() + + settings = openmc.Settings() + settings.batches = 5 + settings.inactive = 0 + settings.particles = 50 + settings.source = openmc.Source(space=openmc.stats.Point()) + settings.export_to_xml() + + mats = openmc.Materials([fuel, porous_carbon, ipyc, sic, opyc, graphite]) + mats.default_xs = '71c' + mats.export_to_xml() + + +if __name__ == '__main__': + harness = TRISOTestHarness('statepoint.5.h5') + harness.main() From b4910473b2eb26db7a09a44b8299fa298db85a44 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 2 Jun 2016 16:36:10 -0500 Subject: [PATCH 605/650] Throw ImportError if user has h5py 2.6.0. --- openmc/particle_restart.py | 5 +++++ openmc/statepoint.py | 5 +++++ openmc/summary.py | 4 ++++ openmc/tallies.py | 4 ++++ 4 files changed, 18 insertions(+) diff --git a/openmc/particle_restart.py b/openmc/particle_restart.py index 72bf3ac3de..7a27db2f60 100644 --- a/openmc/particle_restart.py +++ b/openmc/particle_restart.py @@ -37,6 +37,11 @@ class Particle(object): def __init__(self, filename): import h5py + if h5py.__version__ == '2.6.0': + raise ImportError("h5py 2.6.0 has a known bug which makes it " + "incompatible with OpenMC's HDF5 files. " + "Please switch to a different version.") + self._f = h5py.File(filename, 'r') # Ensure filetype and revision are correct diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 14a48e7f6d..0baa631581 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -106,6 +106,11 @@ class StatePoint(object): def __init__(self, filename, autolink=True): import h5py + if h5py.__version__ == '2.6.0': + raise ImportError("h5py 2.6.0 has a known bug which makes it " + "incompatible with OpenMC's HDF5 files. " + "Please switch to a different version.") + self._f = h5py.File(filename, 'r') # Ensure filetype and revision are correct diff --git a/openmc/summary.py b/openmc/summary.py index 2af9b6be6f..d5259247fe 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -26,6 +26,10 @@ class Summary(object): # Python API so we'll only try to import h5py if the user actually inits # a Summary object. import h5py + if h5py.__version__ == '2.6.0': + raise ImportError("h5py 2.6.0 has a known bug which makes it " + "incompatible with OpenMC's HDF5 files. " + "Please switch to a different version.") openmc.reset_auto_ids() diff --git a/openmc/tallies.py b/openmc/tallies.py index 2313a61734..38aa0bf12c 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -314,6 +314,10 @@ class Tally(object): if not self._results_read: import h5py + if h5py.__version__ == '2.6.0': + raise ImportError("h5py 2.6.0 has a known bug which makes it " + "incompatible with OpenMC's HDF5 files. " + "Please switch to a different version.") # Open the HDF5 statepoint file f = h5py.File(self._sp_filename, 'r') From 96351c9b1cbc5b14cf6f671f240f367df48159fc Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 1 Jun 2016 15:40:35 -0500 Subject: [PATCH 606/650] Improve documentation of MGXS classes --- docs/source/_templates/myclassinherit.rst | 8 + docs/source/pythonapi/index.rst | 5 +- docs/source/usersguide/input.rst | 3 +- openmc/mgxs/mgxs.py | 505 +++++++++++++++++++--- 4 files changed, 455 insertions(+), 66 deletions(-) create mode 100644 docs/source/_templates/myclassinherit.rst diff --git a/docs/source/_templates/myclassinherit.rst b/docs/source/_templates/myclassinherit.rst new file mode 100644 index 0000000000..ed93a29669 --- /dev/null +++ b/docs/source/_templates/myclassinherit.rst @@ -0,0 +1,8 @@ +{{ fullname }} +{{ underline }} + +.. currentmodule:: {{ module }} + +.. autoclass:: {{ objname }} + :members: + :inherited-members: diff --git a/docs/source/pythonapi/index.rst b/docs/source/pythonapi/index.rst index bf35e75874..4b1d8cca70 100644 --- a/docs/source/pythonapi/index.rst +++ b/docs/source/pythonapi/index.rst @@ -271,14 +271,17 @@ Multi-group Cross Sections .. autosummary:: :toctree: generated :nosignatures: - :template: myclass.rst + :template: myclassinherit.rst openmc.mgxs.MGXS openmc.mgxs.AbsorptionXS openmc.mgxs.CaptureXS openmc.mgxs.Chi openmc.mgxs.FissionXS + openmc.mgxs.KappaFissionXS + openmc.mgxs.MultiplicityMatrixXS openmc.mgxs.NuFissionXS + openmc.mgxs.NuFissionMatrixXS openmc.mgxs.NuScatterXS openmc.mgxs.NuScatterMatrixXS openmc.mgxs.ScatterXS diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 5a902479ef..d7c8a239a2 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -1598,7 +1598,8 @@ The ```` element accepts the following sub-elements: |Score | Description | +======================+===================================================+ |absorption |Total absorption rate. This accounts for all | - | |reactions which do not produce secondary neutrons. | + | |reactions which do not produce secondary neutrons | + | |as well as fission. | +----------------------+---------------------------------------------------+ |elastic |Elastic scattering reaction rate. | +----------------------+---------------------------------------------------+ diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index e0974d4738..5104dc192a 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -46,9 +46,9 @@ DOMAIN_TYPES = ['cell', # Supported domain classes # TODO: Implement Mesh domains -_DOMAINS = [openmc.Cell, +_DOMAINS = (openmc.Cell, openmc.Universe, - openmc.Material] + openmc.Material) class MGXS(object): @@ -364,7 +364,7 @@ class MGXS(object): @domain.setter def domain(self, domain): - cv.check_type('domain', domain, tuple(_DOMAINS)) + cv.check_type('domain', domain, _DOMAINS) self._domain = domain # Assign a domain type @@ -1934,11 +1934,30 @@ class MatrixMGXS(MGXS): class TotalXS(MGXS): - """A total multi-group cross section. + r"""A total multi-group cross section. This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. + multi-group total cross sections for multi-group neutronics calculations. At + a minimum, one needs to set the :attr:`TotalXS.energy_groups` and + :attr:`TotalXS.domain` properties. Tallies for the flux and appropriate + reaction rates over the specified domain are generated automatically via the + :attr:`TotalXS.tallies` property, which can then be appended to a + :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`TotalXS.xs_tally` property. + + For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + total cross section is calculated as: + + .. math:: + + \frac{\int_{r \in D} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \sigma_t (r, E) \psi (r, E, \Omega)}{\int_{r \in D} dr \int_{4\pi} + d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. Parameters ---------- @@ -1946,7 +1965,7 @@ class TotalXS(MGXS): The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups + groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain @@ -1981,7 +2000,9 @@ class TotalXS(MGXS): estimator : {'tracklength', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`TotalXS.tally_keys` property and values + are instances of :class:`openmc.Tally`. rxn_rate_tally : openmc.Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None @@ -2022,11 +2043,39 @@ class TotalXS(MGXS): class TransportXS(MGXS): - """A transport-corrected total multi-group cross section. + r"""A transport-corrected total multi-group cross section. This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. At a + minimum, one needs to set the :attr:`TransportXS.energy_groups` and + :attr:`TransportXS.domain` properties. Tallies for the flux and appropriate + reaction rates over the specified domain are generated automatically via the + :attr:`TransportXS.tallies` property, which can then be appended to a + :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`TransportXS.xs_tally` property. + + For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + transport-corrected total cross section is calculated as: + + .. math:: + + \langle \sigma_t \phi \rangle &= \int_{r \in D} dr \int_{4\pi} + d\Omega \int_{E_g}^{E_{g-1}} dE \sigma_t (r, E) \psi + (r, E, \Omega) \\ + \langle \sigma_{s1} \phi \rangle &= \int_{r \in D} dr + \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \int_{4\pi} + d\Omega' \int_0^\infty dE' \int_{-1}^1 d\mu \; \mu \sigma_s + (r, E' \rightarrow E, \Omega' \cdot \Omega) + \phi (r, E', \Omega) \\ + \langle \phi \rangle &= \int_{r \in D} dr \int_{4\pi} d\Omega + \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega) \\ + \sigma_{tr} &= \frac{\langle \sigma_t \phi \rangle - \langle \sigma_{s1} + \phi \rangle}{\langle \phi \rangle} Parameters ---------- @@ -2034,7 +2083,7 @@ class TransportXS(MGXS): The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups + groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain @@ -2069,7 +2118,9 @@ class TransportXS(MGXS): estimator : {'tracklength', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`TransportXS.tally_keys` property and + values are instances of :class:`openmc.Tally`. rxn_rate_tally : openmc.Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None @@ -2135,12 +2186,26 @@ class TransportXS(MGXS): class NuTransportXS(TransportXS): - """A transport-corrected total multi-group cross section which + r"""A transport-corrected total multi-group cross section which accounts for neutron multiplicity in scattering reactions. This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. At a + minimum, one needs to set the :attr:`NuTransportXS.energy_groups` and + :attr:`NuTransportXS.domain` properties. Tallies for the flux and + appropriate reaction rates over the specified domain are generated + automatically via the :attr:`NuTransportXS.tallies` property, which can then + be appended to a :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`NuTransportXS.xs_tally` property. + + The calculation of the transport-corrected cross section is the same as that + for :class:`TransportXS` except that the scattering multiplicity is + accounted for. Parameters ---------- @@ -2148,7 +2213,7 @@ class NuTransportXS(TransportXS): The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups + groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain @@ -2183,7 +2248,9 @@ class NuTransportXS(TransportXS): estimator : {'tracklength', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`NuTransportXS.tally_keys` property and + values are instances of :class:`openmc.Tally`. rxn_rate_tally : openmc.Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None @@ -2232,11 +2299,34 @@ class NuTransportXS(TransportXS): class AbsorptionXS(MGXS): - """An absorption multi-group cross section. + r"""An absorption multi-group cross section. + + Absorption is defined as all reactions that do not produce secondary + neutrons (disappearance) plus fission reactions. This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. + multi-group absorption cross sections for multi-group neutronics + calculations. At a minimum, one needs to set the + :attr:`AbsorptionXS.energy_groups` and :attr:`AbsorptionXS.domain` + properties. Tallies for the flux and appropriate reaction rates over the + specified domain are generated automatically via the + :attr:`AbsorptionXS.tallies` property, which can then be appended to a + :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`AbsorptionXS.xs_tally` property. + + For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + absorption cross section is calculated as: + + .. math:: + + \frac{\int_{r \in D} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \sigma_a (r, E) \psi (r, E, \Omega)}{\int_{r \in D} dr \int_{4\pi} + d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. Parameters ---------- @@ -2244,7 +2334,7 @@ class AbsorptionXS(MGXS): The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups + groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain @@ -2279,7 +2369,9 @@ class AbsorptionXS(MGXS): estimator : {'tracklength', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`AbsorptionXS.tally_keys` property and + values are instances of :class:`openmc.Tally`. rxn_rate_tally : openmc.Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None @@ -2320,16 +2412,37 @@ class AbsorptionXS(MGXS): class CaptureXS(MGXS): - """A capture multi-group cross section. + r"""A capture multi-group cross section. The neutron capture reaction rate is defined as the difference between OpenMC's 'absorption' and 'fission' reaction rate score types. This includes not only radiative capture, but all forms of neutron disappearance aside - from fission (e.g., MT > 100). + from fission (i.e., MT > 100). This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. + multi-group capture cross sections for multi-group neutronics + calculations. At a minimum, one needs to set the + :attr:`CaptureXS.energy_groups` and :attr:`CaptureXS.domain` + properties. Tallies for the flux and appropriate reaction rates over the + specified domain are generated automatically via the + :attr:`CaptureXS.tallies` property, which can then be appended to a + :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`CaptureXS.xs_tally` property. + + For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + capture cross section is calculated as: + + .. math:: + + \frac{\int_{r \in D} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \left [ \sigma_a (r, E) \psi (r, E, \Omega) - \sigma_f (r, E) \psi (r, E, + \Omega) \right ]}{\int_{r \in D} dr \int_{4\pi} d\Omega + \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. Parameters ---------- @@ -2337,7 +2450,7 @@ class CaptureXS(MGXS): The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups + groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain @@ -2372,7 +2485,9 @@ class CaptureXS(MGXS): estimator : {'tracklength', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`CaptureXS.tally_keys` property and + values are instances of :class:`openmc.Tally`. rxn_rate_tally : openmc.Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None @@ -2425,11 +2540,31 @@ class CaptureXS(MGXS): class FissionXS(MGXS): - """A fission multi-group cross section. + r"""A fission multi-group cross section. This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. + multi-group fission cross sections for multi-group neutronics + calculations. At a minimum, one needs to set the + :attr:`FissionXS.energy_groups` and :attr:`FissionXS.domain` + properties. Tallies for the flux and appropriate reaction rates over the + specified domain are generated automatically via the + :attr:`FissionXS.tallies` property, which can then be appended to a + :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`FissionXS.xs_tally` property. + + For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + fission cross section is calculated as: + + .. math:: + + \frac{\int_{r \in D} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \sigma_f (r, E) \psi (r, E, \Omega)}{\int_{r \in D} dr \int_{4\pi} + d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. Parameters ---------- @@ -2437,7 +2572,7 @@ class FissionXS(MGXS): The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups + groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain @@ -2472,7 +2607,9 @@ class FissionXS(MGXS): estimator : {'tracklength', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`FissionXS.tally_keys` property and + values are instances of :class:`openmc.Tally`. rxn_rate_tally : openmc.Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None @@ -2513,11 +2650,32 @@ class FissionXS(MGXS): class NuFissionXS(MGXS): - """A fission production multi-group cross section. + r"""A fission neutron production multi-group cross section. This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. + multi-group fission neutron production cross sections for multi-group + neutronics calculations. At a minimum, one needs to set the + :attr:`NuFissionXS.energy_groups` and :attr:`NuFissionXS.domain` + properties. Tallies for the flux and appropriate reaction rates over the + specified domain are generated automatically via the + :attr:`NuFissionXS.tallies` property, which can then be appended to a + :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`NuFissionXS.xs_tally` property. + + For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + fission neutron production cross section is calculated as: + + .. math:: + + \frac{\int_{r \in D} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \nu\sigma_f (r, E) \psi (r, E, \Omega)}{\int_{r \in D} dr \int_{4\pi} + d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. + Parameters ---------- @@ -2525,7 +2683,7 @@ class NuFissionXS(MGXS): The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups + groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain @@ -2560,7 +2718,9 @@ class NuFissionXS(MGXS): estimator : {'tracklength', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`NuFissionXS.tally_keys` property and + values are instances of :class:`openmc.Tally`. rxn_rate_tally : openmc.Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None @@ -2601,11 +2761,37 @@ class NuFissionXS(MGXS): class KappaFissionXS(MGXS): - """A recoverable fission energy production rate multi-group cross section. + r"""A recoverable fission energy production rate multi-group cross section. + + The recoverable energy per fission, :math:`\kappa`, is defined as the + fission product kinetic energy, prompt and delayed neutron kinetic energies, + prompt and delayed :math:`\gamma`-ray total energies, and the total energy + released by the delayed :math:`\beta` particles. The neutrino energy does + not contribute to this response. The prompt and delayed :math:`\gamma`-rays + are assumed to deposit their energy locally. This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. At a + minimum, one needs to set the :attr:`KappaFissionXS.energy_groups` and + :attr:`KappaFissionXS.domain` properties. Tallies for the flux and appropriate + reaction rates over the specified domain are generated automatically via the + :attr:`KappaFissionXS.tallies` property, which can then be appended to a + :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`KappaFissionXS.xs_tally` property. + + For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + recoverable fission energy production rate cross section is calculated as: + + .. math:: + + \frac{\int_{r \in D} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \kappa\sigma_f (r, E) \psi (r, E, \Omega)}{\int_{r \in D} dr \int_{4\pi} + d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. Parameters ---------- @@ -2613,7 +2799,7 @@ class KappaFissionXS(MGXS): The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups + groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain @@ -2648,7 +2834,9 @@ class KappaFissionXS(MGXS): estimator : {'tracklength', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`KappaFissionXS.tally_keys` property and + values are instances of :class:`openmc.Tally`. rxn_rate_tally : openmc.Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None @@ -2689,11 +2877,34 @@ class KappaFissionXS(MGXS): class ScatterXS(MGXS): - """A scatter multi-group cross section. + r"""A scattering multi-group cross section. + + The scattering cross section is defined as the difference between the total + and absorption cross sections. This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. At a + minimum, one needs to set the :attr:`ScatterXS.energy_groups` and + :attr:`ScatterXS.domain` properties. Tallies for the flux and + appropriate reaction rates over the specified domain are generated + automatically via the :attr:`ScatterXS.tallies` property, which can + then be appended to a :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`ScatterXS.xs_tally` property. + + For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + scattering cross section is calculated as: + + .. math:: + + \frac{\int_{r \in D} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \left [ \sigma_t (r, E) \psi (r, E, \Omega) - \sigma_a (r, E) \psi (r, E, + \Omega) \right ]}{\int_{r \in D} dr \int_{4\pi} d\Omega + \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. Parameters ---------- @@ -2701,7 +2912,7 @@ class ScatterXS(MGXS): The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups + groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain @@ -2736,7 +2947,9 @@ class ScatterXS(MGXS): estimator : {'tracklength', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`ScatterXS.tally_keys` property and + values are instances of :class:`openmc.Tally`. rxn_rate_tally : openmc.Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None @@ -2777,11 +2990,35 @@ class ScatterXS(MGXS): class NuScatterXS(MGXS): - """A nu-scatter multi-group cross section. + r"""A scattering neutron production multi-group cross section. + + The neutron production from scattering is defined as the average number of + neutrons produced from all neutron-producing reactions except for fission. This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. At a + minimum, one needs to set the :attr:`NuScatterXS.energy_groups` and + :attr:`NuScatterXS.domain` properties. Tallies for the flux and appropriate + reaction rates over the specified domain are generated automatically via the + :attr:`NuScatterXS.tallies` property, which can then be appended to a + :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`NuScatterXS.xs_tally` property. + + For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + scattering neutron production cross section is calculated as: + + .. math:: + + \frac{\int_{r \in D} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \sum_i \upsilon_i \sigma_i (r, E) \psi (r, E, \Omega)}{\int_{r \in D} dr + \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. + + where :math:`\upsilon_i` is the multiplicity of the :math:`i`-th reaction. Parameters ---------- @@ -2789,7 +3026,7 @@ class NuScatterXS(MGXS): The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups + groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain @@ -2824,7 +3061,9 @@ class NuScatterXS(MGXS): estimator : {'tracklength', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`NuScatterXS.tally_keys` property and + values are instances of :class:`openmc.Tally`. rxn_rate_tally : openmc.Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None @@ -2869,12 +3108,47 @@ class NuScatterXS(MGXS): class ScatterMatrixXS(MatrixMGXS): - """A scattering matrix multi-group cross section for one or more Legendre + r"""A scattering matrix multi-group cross section for one or more Legendre moments. This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. At a + minimum, one needs to set the :attr:`ScatterMatrixXS.energy_groups` and + :attr:`ScatterMatrixXS.domain` properties. Tallies for the flux and + appropriate reaction rates over the specified domain are generated + automatically via the :attr:`ScatterMatrixXS.tallies` property, which can + then be appended to a :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`ScatterMatrixXS.xs_tally` property. + + For a spatial domain :math:`D`, incoming energy group + :math:`[E_{g'},E_{g'-1}]`, and outgoing energy group :math:`[E_g,E_{g-1}]`, + the scattering moments are calculated as: + + .. math:: + + \langle \sigma_{s,\ell,g'\rightarrow g} \phi \rangle &= \int_{r \in D} dr + \int_{4\pi} d\Omega' \int_{E_{g'}}^{E_{g'-1}} dE' \int_{4\pi} d\Omega + \int_{E_g}^{E_{g-1}} dE \; P_\ell (\Omega \cdot \Omega') \sigma_s (r, E' + \rightarrow E, \Omega' \cdot \Omega) \psi(r, E', \Omega')\\ + \langle \phi \rangle &= \int_{r \in D} dr \int_{4\pi} d\Omega + \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega) \\ + \sigma_{s,\ell,g'\rightarrow g} &= \frac{\langle + \sigma_{s,\ell,g'\rightarrow g} \phi \rangle}{\langle \phi \rangle} + + If the order is zero and a :math:`P_0` transport-correction is applied + (default), the scattering matrix elements are: + + .. math:: + + \sigma_{s,g'\rightarrow g} = \frac{\langle \sigma_{s,0,g'\rightarrow g} + \phi \rangle - \delta_{gg'} \sum_{g''} \langle \sigma_{s,1,g''\rightarrow + g} \phi \rangle}{\langle \phi \rangle} + Parameters ---------- @@ -2882,7 +3156,7 @@ class ScatterMatrixXS(MatrixMGXS): The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups + groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain @@ -2895,7 +3169,7 @@ class ScatterMatrixXS(MatrixMGXS): correction : 'P0' or None Apply the P0 correction to scattering matrices if set to 'P0' legendre_order : int - The highest legendre moment in the scattering matrix (default is 0) + The highest Legendre moment in the scattering matrix (default is 0) name : str, optional Name of the multi-group cross section rxn_type : str @@ -2921,7 +3195,9 @@ class ScatterMatrixXS(MatrixMGXS): estimator : {'tracklength', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`ScatterMatrixXS.tally_keys` property + and values are instances of :class:`openmc.Tally`. rxn_rate_tally : openmc.Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None @@ -3507,7 +3783,21 @@ class NuScatterMatrixXS(ScatterMatrixXS): This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. At a + minimum, one needs to set the :attr:`NuScatterMatrixXS.energy_groups` and + :attr:`NuScatterMatrixXS.domain` properties. Tallies for the flux and + appropriate reaction rates over the specified domain are generated + automatically via the :attr:`NuScatterMatrixXS.tallies` property, which can + then be appended to a :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`NuScatterMatrixXS.xs_tally` property. + + The calculation of the scattering-production matrix is the same as that for + :class:`ScatterMatrixXS` except that the scattering multiplicity is + accounted for. Parameters ---------- @@ -3515,7 +3805,7 @@ class NuScatterMatrixXS(ScatterMatrixXS): The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups + groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain @@ -3554,7 +3844,9 @@ class NuScatterMatrixXS(ScatterMatrixXS): estimator : {'tracklength', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`NuScatterMatrixXS.tally_keys` property + and values are instances of :class:`openmc.Tally`. rxn_rate_tally : openmc.Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None @@ -3596,11 +3888,42 @@ class NuScatterMatrixXS(ScatterMatrixXS): class MultiplicityMatrixXS(MatrixMGXS): - """The scattering multiplicity matrix. + r"""The scattering multiplicity matrix. This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. At a + minimum, one needs to set the :attr:`MultiplicityMatrixXS.energy_groups` and + :attr:`MultiplicityMatrixXS.domain` properties. Tallies for the flux and + appropriate reaction rates over the specified domain are generated + automatically via the :attr:`MultiplicityMatrixXS.tallies` property, which + can then be appended to a :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`MultiplicityMatrixXS.xs_tally` + property. + + For a spatial domain :math:`D`, incoming energy group + :math:`[E_{g'},E_{g'-1}]`, and outgoing energy group :math:`[E_g,E_{g-1}]`, + the multiplicity is calculated as: + + .. math:: + + \langle \upsilon \sigma_{s,g'\rightarrow g} \phi \rangle &= \int_{r \in + D} dr \int_{4\pi} d\Omega' \int_{E_{g'}}^{E_{g'-1}} dE' \int_{4\pi} + d\Omega \int_{E_g}^{E_{g-1}} dE \; \sum_i \upsilon_i \sigma_i (r, E' \rightarrow + E, \Omega' \cdot \Omega) \psi(r, E', \Omega') \\ + \langle \sigma_{s,g'\rightarrow g} \phi \rangle &= \int_{r \in + D} dr \int_{4\pi} d\Omega' \int_{E_{g'}}^{E_{g'-1}} dE' \int_{4\pi} + d\Omega \int_{E_g}^{E_{g-1}} dE \; \sum_i \upsilon_i \sigma_i (r, E' \rightarrow + E, \Omega' \cdot \Omega) \psi(r, E', \Omega') \\ + \upsilon_{g'\rightarrow g} &= \frac{\langle \upsilon + \sigma_{s,g'\rightarrow g} \rangle}{\langle \sigma_{s,g'\rightarrow g} + \rangle} + + where :math:`\upsilon_i` is the multiplicity for the :math:`i`-th reaction. Parameters ---------- @@ -3608,7 +3931,7 @@ class MultiplicityMatrixXS(MatrixMGXS): The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups + groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain @@ -3643,7 +3966,9 @@ class MultiplicityMatrixXS(MatrixMGXS): estimator : {'tracklength', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`MultiplicityMatrixXS.tally_keys` + property and values are instances of :class:`openmc.Tally`. rxn_rate_tally : openmc.Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None @@ -3717,11 +4042,35 @@ class MultiplicityMatrixXS(MatrixMGXS): class NuFissionMatrixXS(MatrixMGXS): - """A fission production matrix multi-group cross section. + r"""A fission production matrix multi-group cross section. This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. At a + minimum, one needs to set the :attr:`NuFissionMatrixXS.energy_groups` and + :attr:`NuFissionMatrixXS.domain` properties. Tallies for the flux and + appropriate reaction rates over the specified domain are generated + automatically via the :attr:`NuFissionMatrixXS.tallies` property, which can + then be appended to a :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`NuFissionMatrixXS.xs_tally` property. + + For a spatial domain :math:`D`, incoming energy group + :math:`[E_{g'},E_{g'-1}]`, and outgoing energy group :math:`[E_g,E_{g-1}]`, + the fission production is calculated as: + + .. math:: + + \langle \nu\sigma_{f,g'\rightarrow g} \phi \rangle &= \int_{r \in D} dr + \int_{4\pi} d\Omega' \int_{E_{g'}}^{E_{g'-1}} dE' \int_{E_g}^{E_{g-1}} dE + \; \chi(E) \nu\sigma_f (r, E') \psi(r, E', \Omega')\\ + \langle \phi \rangle &= \int_{r \in D} dr \int_{4\pi} d\Omega + \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega) \\ + \nu\sigma_{f,g'\rightarrow g} &= \frac{\langle \nu\sigma_{f,g'\rightarrow + g} \phi \rangle}{\langle \phi \rangle} Parameters ---------- @@ -3729,7 +4078,7 @@ class NuFissionMatrixXS(MatrixMGXS): The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups + groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain @@ -3764,7 +4113,9 @@ class NuFissionMatrixXS(MatrixMGXS): estimator : {'tracklength', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`NuFissionMatrixXS.tally_keys` + property and values are instances of :class:`openmc.Tally`. rxn_rate_tally : openmc.Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None @@ -3806,11 +4157,35 @@ class NuFissionMatrixXS(MatrixMGXS): class Chi(MGXS): - """The fission spectrum. + r"""The fission spectrum. This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. + multi-group cross sections for multi-group neutronics calculations. At a + minimum, one needs to set the :attr:`Chi.energy_groups` and + :attr:`Chi.domain` properties. Tallies for the flux and appropriate reaction + rates over the specified domain are generated automatically via the + :attr:`Chi.tallies` property, which can then be appended to a + :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`Chi.xs_tally` property. + + For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + fission spectrum is calculated as: + + .. math:: + + \langle \nu\sigma_{f,\rightarrow g} \phi \rangle &= \int_{r \in D} dr + \int_{4\pi} d\Omega' \int_0^\infty dE' \int_{E_g}^{E_{g-1}} dE \; \chi(E) + \nu\sigma_f (r, E') \psi(r, E', \Omega')\\ + \langle \nu\sigma_f \phi \rangle &= \int_{r \in D} dr \int_{4\pi} + d\Omega' \int_0^\infty dE' \int_0^\infty dE \; \chi(E) \nu\sigma_f (r, + E') \psi(r, E', \Omega') \\ + \chi_g &= \frac{\langle \nu\sigma_{f,\rightarrow g} \phi \rangle}{\langle + \nu\sigma_f \phi \rangle} Parameters ---------- @@ -3818,7 +4193,7 @@ class Chi(MGXS): The domain for spatial homogenization domain_type : {'material', 'cell', 'distribcell', 'universe'} The domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups + groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation by_nuclide : bool If true, computes cross sections for each nuclide in domain @@ -3853,7 +4228,9 @@ class Chi(MGXS): estimator : {'tracklength', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`Chi.tally_keys` property and values are + instances of :class:`openmc.Tally`. rxn_rate_tally : openmc.Tally Derived tally for the reaction rate tally used in the numerator to compute the multi-group cross section. This attribute is None From 87c61fd81d6290d7e1573d7d3abd356640e1d6fd Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 3 Jun 2016 19:26:47 -0500 Subject: [PATCH 607/650] Change D to V as symbol for domain --- openmc/mgxs/mgxs.py | 79 +++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 5104dc192a..088db649fa 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1950,13 +1950,13 @@ class TotalXS(MGXS): :class:`openmc.StatePoint` instance. The derived multi-group cross section can then be obtained from the :attr:`TotalXS.xs_tally` property. - For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + For a spatial domain :math:`V` and energy group :math:`[E_g,E_{g-1}]`, the total cross section is calculated as: .. math:: - \frac{\int_{r \in D} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; - \sigma_t (r, E) \psi (r, E, \Omega)}{\int_{r \in D} dr \int_{4\pi} + \frac{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \sigma_t (r, E) \psi (r, E, \Omega)}{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. Parameters @@ -2059,20 +2059,20 @@ class TransportXS(MGXS): :class:`openmc.StatePoint` instance. The derived multi-group cross section can then be obtained from the :attr:`TransportXS.xs_tally` property. - For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + For a spatial domain :math:`V` and energy group :math:`[E_g,E_{g-1}]`, the transport-corrected total cross section is calculated as: .. math:: - \langle \sigma_t \phi \rangle &= \int_{r \in D} dr \int_{4\pi} + \langle \sigma_t \phi \rangle &= \int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \sigma_t (r, E) \psi (r, E, \Omega) \\ - \langle \sigma_{s1} \phi \rangle &= \int_{r \in D} dr + \langle \sigma_{s1} \phi \rangle &= \int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \int_{4\pi} d\Omega' \int_0^\infty dE' \int_{-1}^1 d\mu \; \mu \sigma_s (r, E' \rightarrow E, \Omega' \cdot \Omega) \phi (r, E', \Omega) \\ - \langle \phi \rangle &= \int_{r \in D} dr \int_{4\pi} d\Omega + \langle \phi \rangle &= \int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega) \\ \sigma_{tr} &= \frac{\langle \sigma_t \phi \rangle - \langle \sigma_{s1} \phi \rangle}{\langle \phi \rangle} @@ -2319,13 +2319,13 @@ class AbsorptionXS(MGXS): :class:`openmc.StatePoint` instance. The derived multi-group cross section can then be obtained from the :attr:`AbsorptionXS.xs_tally` property. - For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + For a spatial domain :math:`V` and energy group :math:`[E_g,E_{g-1}]`, the absorption cross section is calculated as: .. math:: - \frac{\int_{r \in D} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; - \sigma_a (r, E) \psi (r, E, \Omega)}{\int_{r \in D} dr \int_{4\pi} + \frac{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \sigma_a (r, E) \psi (r, E, \Omega)}{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. Parameters @@ -2434,14 +2434,14 @@ class CaptureXS(MGXS): :class:`openmc.StatePoint` instance. The derived multi-group cross section can then be obtained from the :attr:`CaptureXS.xs_tally` property. - For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + For a spatial domain :math:`V` and energy group :math:`[E_g,E_{g-1}]`, the capture cross section is calculated as: .. math:: - \frac{\int_{r \in D} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \frac{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \left [ \sigma_a (r, E) \psi (r, E, \Omega) - \sigma_f (r, E) \psi (r, E, - \Omega) \right ]}{\int_{r \in D} dr \int_{4\pi} d\Omega + \Omega) \right ]}{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. Parameters @@ -2557,13 +2557,13 @@ class FissionXS(MGXS): :class:`openmc.StatePoint` instance. The derived multi-group cross section can then be obtained from the :attr:`FissionXS.xs_tally` property. - For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + For a spatial domain :math:`V` and energy group :math:`[E_g,E_{g-1}]`, the fission cross section is calculated as: .. math:: - \frac{\int_{r \in D} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; - \sigma_f (r, E) \psi (r, E, \Omega)}{\int_{r \in D} dr \int_{4\pi} + \frac{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \sigma_f (r, E) \psi (r, E, \Omega)}{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. Parameters @@ -2667,13 +2667,13 @@ class NuFissionXS(MGXS): :class:`openmc.StatePoint` instance. The derived multi-group cross section can then be obtained from the :attr:`NuFissionXS.xs_tally` property. - For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + For a spatial domain :math:`V` and energy group :math:`[E_g,E_{g-1}]`, the fission neutron production cross section is calculated as: .. math:: - \frac{\int_{r \in D} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; - \nu\sigma_f (r, E) \psi (r, E, \Omega)}{\int_{r \in D} dr \int_{4\pi} + \frac{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \nu\sigma_f (r, E) \psi (r, E, \Omega)}{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. @@ -2784,13 +2784,13 @@ class KappaFissionXS(MGXS): :class:`openmc.StatePoint` instance. The derived multi-group cross section can then be obtained from the :attr:`KappaFissionXS.xs_tally` property. - For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + For a spatial domain :math:`V` and energy group :math:`[E_g,E_{g-1}]`, the recoverable fission energy production rate cross section is calculated as: .. math:: - \frac{\int_{r \in D} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; - \kappa\sigma_f (r, E) \psi (r, E, \Omega)}{\int_{r \in D} dr \int_{4\pi} + \frac{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \kappa\sigma_f (r, E) \psi (r, E, \Omega)}{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. Parameters @@ -2896,14 +2896,14 @@ class ScatterXS(MGXS): :class:`openmc.StatePoint` instance. The derived multi-group cross section can then be obtained from the :attr:`ScatterXS.xs_tally` property. - For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + For a spatial domain :math:`V` and energy group :math:`[E_g,E_{g-1}]`, the scattering cross section is calculated as: .. math:: - \frac{\int_{r \in D} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \frac{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \left [ \sigma_t (r, E) \psi (r, E, \Omega) - \sigma_a (r, E) \psi (r, E, - \Omega) \right ]}{\int_{r \in D} dr \int_{4\pi} d\Omega + \Omega) \right ]}{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. Parameters @@ -3009,16 +3009,17 @@ class NuScatterXS(MGXS): :class:`openmc.StatePoint` instance. The derived multi-group cross section can then be obtained from the :attr:`NuScatterXS.xs_tally` property. - For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + For a spatial domain :math:`V` and energy group :math:`[E_g,E_{g-1}]`, the scattering neutron production cross section is calculated as: .. math:: - \frac{\int_{r \in D} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; - \sum_i \upsilon_i \sigma_i (r, E) \psi (r, E, \Omega)}{\int_{r \in D} dr + \frac{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \sum_i \upsilon_i \sigma_i (r, E) \psi (r, E, \Omega)}{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. - where :math:`\upsilon_i` is the multiplicity of the :math:`i`-th reaction. + where :math:`\upsilon_i` is the multiplicity of the :math:`i`-th scattering + reaction. Parameters ---------- @@ -3125,17 +3126,17 @@ class ScatterMatrixXS(MatrixMGXS): :class:`openmc.StatePoint` instance. The derived multi-group cross section can then be obtained from the :attr:`ScatterMatrixXS.xs_tally` property. - For a spatial domain :math:`D`, incoming energy group + For a spatial domain :math:`V`, incoming energy group :math:`[E_{g'},E_{g'-1}]`, and outgoing energy group :math:`[E_g,E_{g-1}]`, the scattering moments are calculated as: .. math:: - \langle \sigma_{s,\ell,g'\rightarrow g} \phi \rangle &= \int_{r \in D} dr + \langle \sigma_{s,\ell,g'\rightarrow g} \phi \rangle &= \int_{r \in V} dr \int_{4\pi} d\Omega' \int_{E_{g'}}^{E_{g'-1}} dE' \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; P_\ell (\Omega \cdot \Omega') \sigma_s (r, E' \rightarrow E, \Omega' \cdot \Omega) \psi(r, E', \Omega')\\ - \langle \phi \rangle &= \int_{r \in D} dr \int_{4\pi} d\Omega + \langle \phi \rangle &= \int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega) \\ \sigma_{s,\ell,g'\rightarrow g} &= \frac{\langle \sigma_{s,\ell,g'\rightarrow g} \phi \rangle}{\langle \phi \rangle} @@ -3905,7 +3906,7 @@ class MultiplicityMatrixXS(MatrixMGXS): can then be obtained from the :attr:`MultiplicityMatrixXS.xs_tally` property. - For a spatial domain :math:`D`, incoming energy group + For a spatial domain :math:`V`, incoming energy group :math:`[E_{g'},E_{g'-1}]`, and outgoing energy group :math:`[E_g,E_{g-1}]`, the multiplicity is calculated as: @@ -4058,16 +4059,16 @@ class NuFissionMatrixXS(MatrixMGXS): :class:`openmc.StatePoint` instance. The derived multi-group cross section can then be obtained from the :attr:`NuFissionMatrixXS.xs_tally` property. - For a spatial domain :math:`D`, incoming energy group + For a spatial domain :math:`V`, incoming energy group :math:`[E_{g'},E_{g'-1}]`, and outgoing energy group :math:`[E_g,E_{g-1}]`, the fission production is calculated as: .. math:: - \langle \nu\sigma_{f,g'\rightarrow g} \phi \rangle &= \int_{r \in D} dr + \langle \nu\sigma_{f,g'\rightarrow g} \phi \rangle &= \int_{r \in V} dr \int_{4\pi} d\Omega' \int_{E_{g'}}^{E_{g'-1}} dE' \int_{E_g}^{E_{g-1}} dE \; \chi(E) \nu\sigma_f (r, E') \psi(r, E', \Omega')\\ - \langle \phi \rangle &= \int_{r \in D} dr \int_{4\pi} d\Omega + \langle \phi \rangle &= \int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega) \\ \nu\sigma_{f,g'\rightarrow g} &= \frac{\langle \nu\sigma_{f,g'\rightarrow g} \phi \rangle}{\langle \phi \rangle} @@ -4173,15 +4174,15 @@ class Chi(MGXS): :class:`openmc.StatePoint` instance. The derived multi-group cross section can then be obtained from the :attr:`Chi.xs_tally` property. - For a spatial domain :math:`D` and energy group :math:`[E_g,E_{g-1}]`, the + For a spatial domain :math:`V` and energy group :math:`[E_g,E_{g-1}]`, the fission spectrum is calculated as: .. math:: - \langle \nu\sigma_{f,\rightarrow g} \phi \rangle &= \int_{r \in D} dr + \langle \nu\sigma_{f,\rightarrow g} \phi \rangle &= \int_{r \in V} dr \int_{4\pi} d\Omega' \int_0^\infty dE' \int_{E_g}^{E_{g-1}} dE \; \chi(E) \nu\sigma_f (r, E') \psi(r, E', \Omega')\\ - \langle \nu\sigma_f \phi \rangle &= \int_{r \in D} dr \int_{4\pi} + \langle \nu\sigma_f \phi \rangle &= \int_{r \in V} dr \int_{4\pi} d\Omega' \int_0^\infty dE' \int_0^\infty dE \; \chi(E) \nu\sigma_f (r, E') \psi(r, E', \Omega') \\ \chi_g &= \frac{\langle \nu\sigma_{f,\rightarrow g} \phi \rangle}{\langle From 97c2e3732d50b8af1a00333108bac473982236fe Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 4 Jun 2016 12:36:23 -0400 Subject: [PATCH 608/650] Whoops - tabular_legendres default value is False (leave as Legendre) as opposed to True (convert to Table) --- docs/source/usersguide/mgxs_library.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/usersguide/mgxs_library.rst b/docs/source/usersguide/mgxs_library.rst index 98a9e84859..11ccae43df 100644 --- a/docs/source/usersguide/mgxs_library.rst +++ b/docs/source/usersguide/mgxs_library.rst @@ -172,7 +172,7 @@ attributes/sub-elements required to describe the meta-data: during the scattering process. Specifically, the options are to either convert the Legendre expansion to a tabular representation or leave it as a set of Legendre coefficients. Converting to a tabular representation will - cost memory but is likely to decrease runtime compared to leaving as a + cost memory but can allow for a decrease in runtime compared to leaving as a set of Legendre coefficients. This element has the following attributes/sub-elements: @@ -181,7 +181,7 @@ attributes/sub-elements required to describe the meta-data: tabular format should be performed or not. A value of "true" means the conversion should be performed, "false" means it should not. - *Default*: "true" + *Default*: "false" :num_points: If the conversion is to take place the number of tabular points is From f747bb4fbd253ba06c3d8527ee8aaff56d9ceade Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sun, 5 Jun 2016 15:09:32 -0400 Subject: [PATCH 609/650] Exposed tabular_legendre to the openmc.Library interface to the MGXS Data library. Also ever-so slightly sped up the tabular scattering runtime --- openmc/mgxs/library.py | 68 ++++++++++++++++++++++++++++++++++++---- openmc/mgxs_library.py | 2 +- src/scattdata_header.F90 | 21 +++++++------ 3 files changed, 75 insertions(+), 16 deletions(-) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 62dde28ab2..76bdd885a3 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -753,7 +753,8 @@ class Library(object): return pickle.load(open(full_filename, 'rb')) def get_xsdata(self, domain, xsdata_name, nuclide='total', xs_type='macro', - xs_id='1m', order=None): + xs_id='1m', order=None, tabular_legendre=None, + tabular_points=33): """Generates an openmc.XSdata object describing a multi-group cross section data set for eventual combination in to an openmc.MGXSLibrary object (i.e., the library). @@ -773,9 +774,23 @@ class Library(object): nuclide this will be set to 'macro' regardless. xs_ids : str Cross section set identifier. Defaults to '1m'. - order : Scattering order for this data entry. Default is None, + order : int + Scattering order for this data entry. Default is None, which will set the XSdata object to use the order of the Library. + tabular_legendre : {None, bool} + Flag to denote whether or not the Legendre expansion of the + scattering angular distribution is to be converted to a tabular + representation by OpenMC. A value of `True` means that it is to be + converted while a value of 'False' means that it will not be. + Defaults to `None` which leaves the default behavior of OpenMC in + place (the distribution is not converted to a tabular + representation). + tabular_points : {int} + This parameter is not used unless the `tabular_legendre` is set to + `True`. In this case, this parameter sets the number of + equally-spaced points in the domain of [-1,1] to be used in + building the tabular distribution. Default is `33`. Returns ------- @@ -804,6 +819,10 @@ class Library(object): if order is not None: cv.check_greater_than('order', order, 0, equality=True) cv.check_less_than('order', order, 10, equality=True) + cv.check_type('tabular_legendre', tabular_legendre, + (type(None), bool)) + if tabular_points is not None: + cv.check_greater_than('tabular_points', tabular_points, 1) # Make sure statepoint has been loaded if self._sp_filename is None: @@ -830,6 +849,11 @@ class Library(object): # the provided order or the Library's order. xsdata.order = min(order, self.legendre_order) + # Set the tabular_legendre option if needed + if tabular_legendre is not None: + xsdata.tabular_legendre = {'enable': tabular_legendre, + 'num_points': tabular_points} + if nuclide is not 'total': xsdata.zaid = self._nuclides[nuclide][0] xsdata.awr = self._nuclides[nuclide][1] @@ -906,7 +930,8 @@ class Library(object): return xsdata def create_mg_library(self, xs_type='macro', xsdata_names=None, - xs_ids=None): + xs_ids=None, tabular_legendre=None, + tabular_points=33): """Creates an openmc.MGXSLibrary object to contain the MGXS data for the Multi-Group mode of OpenMC. @@ -923,6 +948,19 @@ class Library(object): Cross section set identifier (i.e., '71c') for all data sets (if only str) or for each individual one (if iterable of str). Defaults to '1m'. + tabular_legendre : {None, bool} + Flag to denote whether or not the Legendre expansion of the + scattering angular distribution is to be converted to a tabular + representation by OpenMC. A value of `True` means that it is to be + converted while a value of 'False' means that it will not be. + Defaults to `None` which leaves the default behavior of OpenMC in + place (the distribution is not converted to a tabular + representation). + tabular_points : {int} + This parameter is not used unless the `tabular_legendre` is set to + `True`. In this case, this parameter sets the number of + equally-spaced points in the domain of [-1,1] to be used in + building the tabular distribution. Default is `33`. Returns ------- @@ -983,13 +1021,16 @@ class Library(object): xsdata_name += '_' + nuclide xsdata = self.get_xsdata(domain, xsdata_name, nuclide=nuclide, - xs_type=xs_type, xs_id=xs_ids[i]) + xs_type=xs_type, xs_id=xs_ids[i], + tabular_legendre=tabular_legendre, + tabular_points=tabular_points) mgxs_file.add_xsdata(xsdata) return mgxs_file - def create_mg_mode(self, xsdata_names=None, xs_ids=None): + def create_mg_mode(self, xsdata_names=None, xs_ids=None, + tabular_legendre=None, tabular_points=33): """Creates an openmc.MGXSLibrary object to contain the MGXS data for the Multi-Group mode of OpenMC as well as the associated openmc.Materials and openmc.Geometry objects. The created Geometry is the same as that @@ -1007,6 +1048,19 @@ class Library(object): Cross section set identifier (i.e., '71c') for all data sets (if only str) or for each individual one (if iterable of str). Defaults to '1m'. + tabular_legendre : {None, bool} + Flag to denote whether or not the Legendre expansion of the + scattering angular distribution is to be converted to a tabular + representation by OpenMC. A value of `True` means that it is to be + converted while a value of 'False' means that it will not be. + Defaults to `None` which leaves the default behavior of OpenMC in + place (the distribution is not converted to a tabular + representation). + tabular_points : {int} + This parameter is not used unless the `tabular_legendre` is set to + `True`. In this case, this parameter sets the number of + equally-spaced points in the domain of [-1,1] to be used in + building the tabular distribution. Default is `33`. Returns ------- @@ -1071,7 +1125,9 @@ class Library(object): # Create XSdata and Macroscopic for this domain xsdata = self.get_xsdata(domain, xsdata_name, nuclide='total', - xs_type=xs_type, xs_id=xs_ids[i]) + xs_type=xs_type, xs_id=xs_ids[i], + tabular_legendre=tabular_legendre, + tabular_points=tabular_points) mgxs_file.add_xsdata(xsdata) macroscopic = openmc.Macroscopic(name=xsdata_name, xs=xs_ids[i]) diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 35b48d8730..f34f3b71ce 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -445,7 +445,7 @@ class XSdata(object): raise ValueError(msg) if 'num_points' in tabular_legendre: num_points = tabular_legendre['num_points'] - check_value('num_points', num_points, Integral) + check_type('num_points', num_points, Integral) check_greater_than('num_points', num_points, 0) else: if not enable: diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index 12c11e2e4e..06e052eec0 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -329,7 +329,7 @@ contains real(8), intent(in) :: coeffs(:, :, :) ! Coefficients to use integer :: imu, gin, gout, groups, order - real(8) :: norm + real(8) :: norm, m, mu0, mu1, p0 real(8), allocatable :: energy(:, :) real(8), allocatable :: matrix(:, :, :) @@ -410,13 +410,17 @@ contains this % fmu(gin) % data(:, gout) / norm end if - ! Now create CDF from fmu with trapezoidal rule + ! Now create CDF from fmu with the analytical integral this % dist(gin) % data(1, gout) = ZERO do imu = 2, order - this % dist(gin) % data(imu, gout) = & - this % dist(gin) % data(imu - 1, gout) + & - HALF * this % dmu * (this % fmu(gin) % data(imu - 1, gout) + & - this % fmu(gin) % data(imu, gout)) + p0 = this % fmu(gin) % data(imu - 1, gout) + mu0 = this % mu(imu - 1) + mu1 = this % mu(imu) + m = (this % fmu(gin) % data(imu, gout) - p0) / (mu1 - mu0) + this % dist(gin) % data(imu, gout) = HALF * m * mu1 * mu1 + & + (p0 - m * mu0) * mu1 + & + (HALF * m * mu0 * mu0 - p0 * mu0) + end do ! Ensure we normalize to 1 still norm = this % dist(gin) % data(order, gout) @@ -628,11 +632,10 @@ contains p1 = this % fmu(gin) % data(k + 1, gout) mu1 = this % mu(k + 1) - frac = (p1 - p0) / (mu1 - mu0) - - if (frac == ZERO) then + if (p0 == p1) then mu = mu0 + (xi - c_k) / p0 else + frac = (p1 - p0) / (mu1 - mu0) mu = mu0 + & (sqrt(max(ZERO, p0 * p0 + TWO * frac * (xi - c_k))) - p0) / frac end if From 395cfb092da21d8624e2a83431ff1ec6b7c3ee71 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Sun, 5 Jun 2016 16:33:12 -0500 Subject: [PATCH 610/650] Remove _isinstance and optimize check_type for ndarrays --- openmc/checkvalue.py | 41 ++++++++++---------------------------- openmc/filter.py | 4 ++-- openmc/mgxs/library.py | 2 +- openmc/stats/univariate.py | 4 ++-- 4 files changed, 16 insertions(+), 35 deletions(-) diff --git a/openmc/checkvalue.py b/openmc/checkvalue.py index 62b843a3a0..cc0e1190df 100644 --- a/openmc/checkvalue.py +++ b/openmc/checkvalue.py @@ -4,33 +4,6 @@ from numbers import Integral, Real import numpy as np -def _isinstance(value, expected_type): - """A Numpy-aware replacement for isinstance - - This function will be obsolete when Numpy v. >= 1.9 is established. - """ - - # Declare numpy numeric types. - np_ints = (np.int_, np.intc, np.intp, np.int8, np.int16, np.int32, np.int64, - np.uint8, np.uint16, np.uint32, np.uint64) - np_floats = (np.float_, np.float16, np.float32, np.float64) - - # Include numpy integers, if necessary. - if type(expected_type) is tuple: - if Integral in expected_type: - expected_type = expected_type + np_ints - elif expected_type is Integral: - expected_type = (Integral, ) + np_ints - - # Include numpy floats, if necessary. - if type(expected_type) is tuple: - if Real in expected_type: - expected_type = expected_type + np_floats - elif expected_type is Real: - expected_type = (Real, ) + np_floats - - # Now, make the instance check. - return isinstance(value, expected_type) def check_type(name, value, expected_type, expected_iter_type=None): """Ensure that an object is of an expected type. Optionally, if the object is @@ -50,7 +23,7 @@ def check_type(name, value, expected_type, expected_iter_type=None): """ - if not _isinstance(value, expected_type): + if not isinstance(value, expected_type): if isinstance(expected_type, Iterable): msg = 'Unable to set "{0}" to "{1}" which is not one of the ' \ 'following types: "{2}"'.format(name, value, ', '.join( @@ -61,8 +34,16 @@ def check_type(name, value, expected_type, expected_iter_type=None): raise TypeError(msg) if expected_iter_type: + if isinstance(value, np.ndarray): + if not issubclass(value.dtype.type, expected_iter_type): + msg = 'Unable to set "{0}" to "{1}" since each item must be ' \ + 'of type "{2}"'.format(name, value, + expected_iter_type.__name__) + else: + return + for item in value: - if not _isinstance(item, expected_iter_type): + if not isinstance(item, expected_iter_type): if isinstance(expected_iter_type, Iterable): msg = 'Unable to set "{0}" to "{1}" since each item must be ' \ 'one of the following types: "{2}"'.format( @@ -118,7 +99,7 @@ def check_iterable_type(name, value, expected_type, min_depth=1, max_depth=1): # If this item is of the expected type, then we've reached the bottom # level of this branch. - if _isinstance(current_item, expected_type): + if isinstance(current_item, expected_type): # Is this deep enough? if len(tree) < min_depth: msg = 'Error setting "{0}": The item at {1} does not meet the '\ diff --git a/openmc/filter.py b/openmc/filter.py index 52560a193a..b34400cbb4 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -196,7 +196,7 @@ class Filter(object): elif self.type in ['energy', 'energyout']: for edge in bins: - if not cv._isinstance(edge, Real): + if not isinstance(edge, Real): msg = 'Unable to add bin edge "{0}" to a "{1}" Filter ' \ 'since it is a non-integer or floating point ' \ 'value'.format(edge, self.type) @@ -220,7 +220,7 @@ class Filter(object): msg = 'Unable to add bins "{0}" to a mesh Filter since ' \ 'only a single mesh can be used per tally'.format(bins) raise ValueError(msg) - elif not cv._isinstance(bins[0], Integral): + elif not isinstance(bins[0], Integral): msg = 'Unable to add bin "{0}" to mesh Filter since it ' \ 'is a non-integer'.format(bins[0]) raise ValueError(msg) diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 62dde28ab2..e0e14b862e 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -484,7 +484,7 @@ class Library(object): cv.check_type('domain', domain, (openmc.Universe, Integral)) # Check that requested domain is included in library - if cv._isinstance(domain, Integral): + if isinstance(domain, Integral): domain_id = domain for domain in self.domains: if domain_id == domain.id: diff --git a/openmc/stats/univariate.py b/openmc/stats/univariate.py index 0deeb600c4..af9b9b3013 100644 --- a/openmc/stats/univariate.py +++ b/openmc/stats/univariate.py @@ -66,14 +66,14 @@ class Discrete(Univariate): @x.setter def x(self, x): - if cv._isinstance(x, Real): + if isinstance(x, Real): x = [x] cv.check_type('discrete values', x, Iterable, Real) self._x = x @p.setter def p(self, p): - if cv._isinstance(p, Real): + if isinstance(p, Real): p = [p] cv.check_type('discrete probabilities', p, Iterable, Real) for pk in p: From 80ecd2406ba6a2c6cef901e9a1c8a5db69b7456f Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 6 Jun 2016 05:19:56 -0400 Subject: [PATCH 611/650] Repeated the more analytic integration in the conversion of Legendre to Tabular data --- src/mgxs_header.F90 | 14 +++++++++++++- src/scattdata_header.F90 | 1 - src/tally.F90 | 2 -- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index 750a8df983..fd909ca002 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -277,7 +277,7 @@ module mgxs_header real(8), allocatable :: scatt_coeffs(:, :, :) real(8), allocatable :: input_scatt(:, :, :) real(8), allocatable :: temp_scatt(:, :, :) - real(8) :: dmu, mu, norm + real(8) :: dmu, mu, norm, p0, m, mu0 integer :: order, order_dim, gin, gout, l, arr_len integer :: legendre_mu_points, imu @@ -496,6 +496,18 @@ module mgxs_header (scatt_coeffs(imu - 1, gout, gin) + & scatt_coeffs(imu, gout, gin)) end if + ! Now create CDF from fmu with the analytical integral of a + ! piecewise linear function + if (imu > 1) then + p0 = scatt_coeffs(imu - 1, gout, gin) + mu0 = mu - dmu + m = (scatt_coeffs(imu, gout, gin) - & + scatt_coeffs(imu - 1, gout, gin)) / dmu + norm = norm + & + HALF * m * mu * mu + & + (p0 - m * mu0) * mu + & + (HALF * m * mu0 * mu0 - p0 * mu0) + end if end do ! Now that we have the integral, lets ensure that the distribution ! is normalized such that it preserves the original scattering xs diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index 06e052eec0..6fca891906 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -420,7 +420,6 @@ contains this % dist(gin) % data(imu, gout) = HALF * m * mu1 * mu1 + & (p0 - m * mu0) * mu1 + & (HALF * m * mu0 * mu0 - p0 * mu0) - end do ! Ensure we normalize to 1 still norm = this % dist(gin) % data(order, gout) diff --git a/src/tally.F90 b/src/tally.F90 index 0c41b6f987..b40a39ce0c 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -107,8 +107,6 @@ contains real(8) :: atom_density_ ! atom/b-cm real(8) :: f ! interpolation factor real(8) :: score ! analog tally score - real(8) :: macro_total ! material macro total xs - real(8) :: macro_scatt ! material macro scatt xs real(8) :: E ! particle energy i = 0 From e7a9a1e23617d593c504feba7ea8cf6c7b5a323e Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 7 Jun 2016 09:17:21 -0500 Subject: [PATCH 612/650] When expanding natural elements, make sure order is consistent --- openmc/element.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/element.py b/openmc/element.py index c391d08235..14c98d4952 100644 --- a/openmc/element.py +++ b/openmc/element.py @@ -126,7 +126,7 @@ class Element(object): """ isotopes = [] - for isotope, abundance in natural_abundance.items(): + for isotope, abundance in sorted(natural_abundance.items()): if isotope.startswith(self.name + '-'): nuc = openmc.Nuclide(isotope, self.xs) isotopes.append((nuc, abundance)) From 826d5a43d85eaec1b6c7b4ce22e1a8f5e9336a4f Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Tue, 7 Jun 2016 20:04:13 -0400 Subject: [PATCH 613/650] Switched tabular_legendre to have a default of true --- .../pythonapi/examples/mgxs-part-iv.ipynb | 180 +-- docs/source/usersguide/mgxs_library.rst | 6 +- openmc/mgxs/library.py | 9 +- src/mgxs_header.F90 | 10 +- tests/test_mg_basic/results_true.dat | 2 +- tests/test_mg_max_order/results_true.dat | 2 +- tests/test_mg_nuclide/results_true.dat | 2 +- tests/test_mg_tallies/results_true.dat | 1306 ++++++++--------- .../results_true.dat | 2 +- 9 files changed, 758 insertions(+), 761 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb index b845636e21..5459c3dfe4 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb @@ -432,7 +432,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -722,8 +722,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: d20322f22d4850bd640b4accf34e2551550d17fb\n", - " Date/Time: 2016-05-30 14:20:53\n", + " Git SHA1: b41ec2178cc78c6c5968b47ebf09d926cdc44d00\n", + " Date/Time: 2016-06-07 19:46:24\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -810,20 +810,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 1.4260E+00 seconds\n", - " Reading cross sections = 1.1340E+00 seconds\n", - " Total time in simulation = 1.6739E+01 seconds\n", - " Time in transport only = 1.6650E+01 seconds\n", - " Time in inactive batches = 2.1540E+00 seconds\n", - " Time in active batches = 1.4585E+01 seconds\n", - " Time synchronizing fission bank = 1.0000E-02 seconds\n", - " Sampling source sites = 9.0000E-03 seconds\n", + " Total time for initialization = 1.4790E+00 seconds\n", + " Reading cross sections = 1.1810E+00 seconds\n", + " Total time in simulation = 1.7439E+01 seconds\n", + " Time in transport only = 1.7334E+01 seconds\n", + " Time in inactive batches = 2.1960E+00 seconds\n", + " Time in active batches = 1.5243E+01 seconds\n", + " Time synchronizing fission bank = 6.0000E-03 seconds\n", + " Sampling source sites = 5.0000E-03 seconds\n", " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.8174E+01 seconds\n", - " Calculation Rate (inactive) = 23212.6 neutrons/second\n", - " Calculation Rate (active) = 13712.7 neutrons/second\n", + " Total time elapsed = 1.8926E+01 seconds\n", + " Calculation Rate (inactive) = 22768.7 neutrons/second\n", + " Calculation Rate (active) = 13120.8 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -966,11 +966,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/nelsonag/git/openmc/openmc/tallies.py:1986: RuntimeWarning: invalid value encountered in true_divide\n", + "/home/nelsonag/git/openmc/openmc/tallies.py:1990: RuntimeWarning: invalid value encountered in true_divide\n", " self_rel_err = data['self']['std. dev.'] / data['self']['mean']\n", - "/home/nelsonag/git/openmc/openmc/tallies.py:1987: RuntimeWarning: invalid value encountered in true_divide\n", + "/home/nelsonag/git/openmc/openmc/tallies.py:1991: RuntimeWarning: invalid value encountered in true_divide\n", " other_rel_err = data['other']['std. dev.'] / data['other']['mean']\n", - "/home/nelsonag/git/openmc/openmc/tallies.py:1988: RuntimeWarning: invalid value encountered in true_divide\n", + "/home/nelsonag/git/openmc/openmc/tallies.py:1992: RuntimeWarning: invalid value encountered in true_divide\n", " new_tally._mean = data['self']['mean'] / data['other']['mean']\n" ] } @@ -1098,8 +1098,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: d20322f22d4850bd640b4accf34e2551550d17fb\n", - " Date/Time: 2016-05-30 14:21:12\n", + " Git SHA1: b41ec2178cc78c6c5968b47ebf09d926cdc44d00\n", + " Date/Time: 2016-06-07 19:46:43\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -1124,56 +1124,56 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 1.06913 \n", - " 2/1 1.04067 \n", - " 3/1 1.01854 \n", - " 4/1 1.00203 \n", - " 5/1 1.03243 \n", - " 6/1 1.02688 \n", - " 7/1 1.06855 \n", - " 8/1 1.03420 \n", - " 9/1 1.01657 \n", - " 10/1 1.02795 \n", - " 11/1 1.01796 \n", - " 12/1 1.03372 1.02584 +/- 0.00788\n", - " 13/1 1.02433 1.02534 +/- 0.00458\n", - " 14/1 1.01147 1.02187 +/- 0.00474\n", - " 15/1 1.01215 1.01993 +/- 0.00416\n", - " 16/1 1.04088 1.02342 +/- 0.00487\n", - " 17/1 1.04033 1.02583 +/- 0.00477\n", - " 18/1 1.04483 1.02821 +/- 0.00477\n", - " 19/1 1.02870 1.02826 +/- 0.00420\n", - " 20/1 1.01339 1.02678 +/- 0.00404\n", - " 21/1 1.03389 1.02742 +/- 0.00371\n", - " 22/1 1.02535 1.02725 +/- 0.00340\n", - " 23/1 1.00225 1.02533 +/- 0.00367\n", - " 24/1 0.99938 1.02347 +/- 0.00387\n", - " 25/1 1.01620 1.02299 +/- 0.00363\n", - " 26/1 1.03393 1.02367 +/- 0.00347\n", - " 27/1 1.01875 1.02338 +/- 0.00327\n", - " 28/1 1.00305 1.02225 +/- 0.00328\n", - " 29/1 1.01453 1.02185 +/- 0.00313\n", - " 30/1 1.02891 1.02220 +/- 0.00299\n", - " 31/1 0.99612 1.02096 +/- 0.00311\n", - " 32/1 1.04911 1.02224 +/- 0.00323\n", - " 33/1 1.01410 1.02188 +/- 0.00310\n", - " 34/1 0.98979 1.02055 +/- 0.00326\n", - " 35/1 1.00938 1.02010 +/- 0.00316\n", - " 36/1 1.02857 1.02043 +/- 0.00305\n", - " 37/1 1.04095 1.02119 +/- 0.00303\n", - " 38/1 1.02033 1.02115 +/- 0.00292\n", - " 39/1 1.02104 1.02115 +/- 0.00282\n", - " 40/1 1.00854 1.02073 +/- 0.00276\n", - " 41/1 1.00932 1.02036 +/- 0.00269\n", - " 42/1 1.00284 1.01982 +/- 0.00266\n", - " 43/1 1.02489 1.01997 +/- 0.00258\n", - " 44/1 1.03981 1.02055 +/- 0.00257\n", - " 45/1 1.02630 1.02072 +/- 0.00251\n", - " 46/1 1.00133 1.02018 +/- 0.00249\n", - " 47/1 1.02409 1.02028 +/- 0.00243\n", - " 48/1 1.03928 1.02078 +/- 0.00241\n", - " 49/1 1.01226 1.02057 +/- 0.00236\n", - " 50/1 1.03536 1.02094 +/- 0.00233\n", + " 1/1 1.02438 \n", + " 2/1 1.04495 \n", + " 3/1 1.03438 \n", + " 4/1 0.99945 \n", + " 5/1 1.00818 \n", + " 6/1 1.00174 \n", + " 7/1 1.03430 \n", + " 8/1 1.02233 \n", + " 9/1 1.01200 \n", + " 10/1 1.02727 \n", + " 11/1 1.04051 \n", + " 12/1 1.02665 1.03358 +/- 0.00693\n", + " 13/1 1.01925 1.02880 +/- 0.00623\n", + " 14/1 1.03520 1.03040 +/- 0.00469\n", + " 15/1 1.03185 1.03069 +/- 0.00364\n", + " 16/1 1.03729 1.03179 +/- 0.00317\n", + " 17/1 1.00718 1.02827 +/- 0.00442\n", + " 18/1 1.00733 1.02566 +/- 0.00464\n", + " 19/1 1.02123 1.02516 +/- 0.00412\n", + " 20/1 1.01673 1.02432 +/- 0.00378\n", + " 21/1 1.03445 1.02524 +/- 0.00354\n", + " 22/1 1.03063 1.02569 +/- 0.00326\n", + " 23/1 1.00806 1.02433 +/- 0.00329\n", + " 24/1 1.03707 1.02524 +/- 0.00318\n", + " 25/1 1.01907 1.02483 +/- 0.00299\n", + " 26/1 1.01970 1.02451 +/- 0.00282\n", + " 27/1 1.00208 1.02319 +/- 0.00296\n", + " 28/1 1.02836 1.02348 +/- 0.00280\n", + " 29/1 1.02679 1.02365 +/- 0.00266\n", + " 30/1 1.03997 1.02447 +/- 0.00265\n", + " 31/1 0.99825 1.02322 +/- 0.00281\n", + " 32/1 1.01865 1.02301 +/- 0.00269\n", + " 33/1 1.00846 1.02238 +/- 0.00265\n", + " 34/1 1.01864 1.02222 +/- 0.00254\n", + " 35/1 1.02137 1.02219 +/- 0.00243\n", + " 36/1 1.02781 1.02241 +/- 0.00235\n", + " 37/1 1.02395 1.02246 +/- 0.00226\n", + " 38/1 1.00883 1.02198 +/- 0.00223\n", + " 39/1 0.99776 1.02114 +/- 0.00231\n", + " 40/1 1.01546 1.02095 +/- 0.00224\n", + " 41/1 1.04425 1.02170 +/- 0.00229\n", + " 42/1 1.02481 1.02180 +/- 0.00222\n", + " 43/1 1.00925 1.02142 +/- 0.00219\n", + " 44/1 1.04389 1.02208 +/- 0.00222\n", + " 45/1 1.04451 1.02272 +/- 0.00225\n", + " 46/1 1.02519 1.02279 +/- 0.00219\n", + " 47/1 1.03656 1.02316 +/- 0.00216\n", + " 48/1 1.04310 1.02369 +/- 0.00217\n", + " 49/1 1.03258 1.02392 +/- 0.00212\n", + " 50/1 1.01093 1.02359 +/- 0.00210\n", " Creating state point statepoint.50.h5...\n", "\n", " ===========================================================================\n", @@ -1183,27 +1183,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 2.8000E-02 seconds\n", - " Reading cross sections = 4.0000E-03 seconds\n", - " Total time in simulation = 1.2816E+01 seconds\n", - " Time in transport only = 1.2770E+01 seconds\n", - " Time in inactive batches = 1.3130E+00 seconds\n", - " Time in active batches = 1.1503E+01 seconds\n", - " Time synchronizing fission bank = 9.0000E-03 seconds\n", - " Sampling source sites = 3.0000E-03 seconds\n", - " SEND/RECV source sites = 6.0000E-03 seconds\n", + " Total time for initialization = 3.7000E-02 seconds\n", + " Reading cross sections = 5.0000E-03 seconds\n", + " Total time in simulation = 1.1738E+01 seconds\n", + " Time in transport only = 1.1701E+01 seconds\n", + " Time in inactive batches = 1.3240E+00 seconds\n", + " Time in active batches = 1.0414E+01 seconds\n", + " Time synchronizing fission bank = 8.0000E-03 seconds\n", + " Sampling source sites = 5.0000E-03 seconds\n", + " SEND/RECV source sites = 3.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.2854E+01 seconds\n", - " Calculation Rate (inactive) = 38080.7 neutrons/second\n", - " Calculation Rate (active) = 17386.8 neutrons/second\n", + " Total time elapsed = 1.1785E+01 seconds\n", + " Calculation Rate (inactive) = 37764.4 neutrons/second\n", + " Calculation Rate (active) = 19204.9 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.02358 +/- 0.00231\n", - " k-effective (Track-length) = 1.02094 +/- 0.00233\n", - " k-effective (Absorption) = 1.02682 +/- 0.00152\n", - " Combined k-effective = 1.02527 +/- 0.00153\n", + " k-effective (Collision) = 1.02444 +/- 0.00180\n", + " k-effective (Track-length) = 1.02359 +/- 0.00210\n", + " k-effective (Absorption) = 1.02530 +/- 0.00175\n", + " Combined k-effective = 1.02471 +/- 0.00130\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -1285,8 +1285,8 @@ "output_type": "stream", "text": [ "Continuous-Energy keff = 1.024295\n", - "Multi-Group keff = 1.025274\n", - "bias [pcm]: -97.9\n" + "Multi-Group keff = 1.024707\n", + "bias [pcm]: -41.2\n" ] } ], @@ -1383,7 +1383,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 40, @@ -1392,9 +1392,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\nD7ZNrAVaR8hwAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/usersguide/mgxs_library.rst b/docs/source/usersguide/mgxs_library.rst index 11ccae43df..daf99d481b 100644 --- a/docs/source/usersguide/mgxs_library.rst +++ b/docs/source/usersguide/mgxs_library.rst @@ -171,9 +171,7 @@ attributes/sub-elements required to describe the meta-data: provided via the ``scatt_type`` element above, is represented and thus used during the scattering process. Specifically, the options are to either convert the Legendre expansion to a tabular representation or leave it as - a set of Legendre coefficients. Converting to a tabular representation will - cost memory but can allow for a decrease in runtime compared to leaving as a - set of Legendre coefficients. This element has the following + a set of Legendre coefficients. Converting to a tabular representation will cost memory but can allow for a decrease in runtime compared to leaving as a set of Legendre coefficients. This element has the following attributes/sub-elements: :enable: @@ -181,7 +179,7 @@ attributes/sub-elements required to describe the meta-data: tabular format should be performed or not. A value of "true" means the conversion should be performed, "false" means it should not. - *Default*: "false" + *Default*: "true" :num_points: If the conversion is to take place the number of tabular points is diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index e335288edc..886eebf45f 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -784,8 +784,7 @@ class Library(object): representation by OpenMC. A value of `True` means that it is to be converted while a value of 'False' means that it will not be. Defaults to `None` which leaves the default behavior of OpenMC in - place (the distribution is not converted to a tabular - representation). + place (the distribution is converted to a tabular representation). tabular_points : {int} This parameter is not used unless the `tabular_legendre` is set to `True`. In this case, this parameter sets the number of @@ -954,8 +953,7 @@ class Library(object): representation by OpenMC. A value of `True` means that it is to be converted while a value of 'False' means that it will not be. Defaults to `None` which leaves the default behavior of OpenMC in - place (the distribution is not converted to a tabular - representation). + place (the distribution is converted to a tabular representation). tabular_points : {int} This parameter is not used unless the `tabular_legendre` is set to `True`. In this case, this parameter sets the number of @@ -1054,8 +1052,7 @@ class Library(object): representation by OpenMC. A value of `True` means that it is to be converted while a value of 'False' means that it will not be. Defaults to `None` which leaves the default behavior of OpenMC in - place (the distribution is not converted to a tabular - representation). + place (the distribution is converted to a tabular representation). tabular_points : {int} This parameter is not used unless the `tabular_legendre` is set to `True`. In this case, this parameter sets the number of diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index fd909ca002..519da708c9 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -387,11 +387,13 @@ module mgxs_header ! Get scattering treatment information ! Tabular_legendre tells us if we are to treat the provided - ! Legendre polynomials as tabular data (if enable is true) or leaving - ! them as Legendres (if enable is false, or the default) + ! Legendre polynomials as tabular data (if enable is true, default) + ! or leaving them as Legendres (if enable is false) - ! Set the default (leave as Legendre polynomials) - enable_leg_mu = .false. + ! Set the default (Convert to tabular format w/ 33 points) + enable_leg_mu = .true. + legendre_mu_points = 33 + ! Get the user-provided values if (check_for_node(node_xsdata, "tabular_legendre")) then call get_node_ptr(node_xsdata, "tabular_legendre", node_legendre_mu) if (check_for_node(node_legendre_mu, "enable")) then diff --git a/tests/test_mg_basic/results_true.dat b/tests/test_mg_basic/results_true.dat index 55c2af8136..1c58db0d77 100644 --- a/tests/test_mg_basic/results_true.dat +++ b/tests/test_mg_basic/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.033731E+00 4.974463E-02 +1.003952E+00 4.160185E-02 diff --git a/tests/test_mg_max_order/results_true.dat b/tests/test_mg_max_order/results_true.dat index f75c1300ab..3b9625201b 100644 --- a/tests/test_mg_max_order/results_true.dat +++ b/tests/test_mg_max_order/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.055274E+00 1.715904E-02 +1.026398E+00 7.824554E-02 diff --git a/tests/test_mg_nuclide/results_true.dat b/tests/test_mg_nuclide/results_true.dat index 55c2af8136..1c58db0d77 100644 --- a/tests/test_mg_nuclide/results_true.dat +++ b/tests/test_mg_nuclide/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.033731E+00 4.974463E-02 +1.003952E+00 4.160185E-02 diff --git a/tests/test_mg_tallies/results_true.dat b/tests/test_mg_tallies/results_true.dat index debbfa537c..94ec79286d 100644 --- a/tests/test_mg_tallies/results_true.dat +++ b/tests/test_mg_tallies/results_true.dat @@ -1,86 +1,86 @@ k-combined: -1.033731E+00 4.974463E-02 +1.003952E+00 4.160185E-02 tally 1: -3.163666E+00 -2.165097E+00 -9.964133E-02 -2.052446E-03 -4.861844E+00 -4.978206E+00 -4.417216E-02 -4.040216E-04 -1.095122E-01 -2.483317E-03 -3.324437E+00 -2.299850E+00 -9.574329E-02 -1.968438E-03 -4.881821E+00 -4.943976E+00 -4.041706E-02 -3.650255E-04 -1.002025E-01 -2.243628E-03 -3.199995E+00 -2.091126E+00 -8.859707E-02 -1.592091E-03 -4.671522E+00 -4.439001E+00 -3.660515E-02 -2.728602E-04 -9.075197E-02 -1.677135E-03 -2.910284E+00 -1.723356E+00 -9.207508E-02 -1.744614E-03 -4.421737E+00 -3.979362E+00 -4.080063E-02 -3.481887E-04 -1.011535E-01 -2.140141E-03 -2.506574E+00 -1.326705E+00 -8.637880E-02 -1.598941E-03 -3.920683E+00 -3.263607E+00 -3.978214E-02 -3.424111E-04 -9.862841E-02 -2.104629E-03 -2.951103E+00 -1.826551E+00 -8.748324E-02 -1.648479E-03 -4.309848E+00 -3.903067E+00 -3.741466E-02 -3.141687E-04 -9.275891E-02 -1.931037E-03 -3.048521E+00 -2.007251E+00 -9.483162E-02 -1.935789E-03 -4.599534E+00 -4.527383E+00 -4.168244E-02 -3.813062E-04 -1.033396E-01 -2.343697E-03 -2.982958E+00 -1.966657E+00 -9.896454E-02 -2.016812E-03 -4.645921E+00 -4.599347E+00 -4.489740E-02 -4.108900E-04 -1.113102E-01 -2.525534E-03 +3.027550E+00 +2.152400E+00 +8.573015E-02 +1.716238E-03 +4.377236E+00 +4.480918E+00 +3.577293E-02 +2.996921E-04 +8.868872E-02 +1.842057E-03 +3.189586E+00 +2.165036E+00 +9.625303E-02 +1.898094E-03 +4.691910E+00 +4.579570E+00 +4.156421E-02 +3.532611E-04 +1.030465E-01 +2.171318E-03 +2.987648E+00 +1.869303E+00 +9.105156E-02 +1.775628E-03 +4.522682E+00 +4.342733E+00 +3.968997E-02 +3.424105E-04 +9.839988E-02 +2.104625E-03 +3.225648E+00 +2.102269E+00 +8.764034E-02 +1.567260E-03 +4.629948E+00 +4.315388E+00 +3.574267E-02 +2.684687E-04 +8.861368E-02 +1.650142E-03 +3.394894E+00 +2.332105E+00 +8.432398E-02 +1.485500E-03 +4.659277E+00 +4.398368E+00 +3.230884E-02 +2.317511E-04 +8.010050E-02 +1.424457E-03 +3.013158E+00 +2.009646E+00 +7.490989E-02 +1.178333E-03 +4.123109E+00 +3.682531E+00 +2.869447E-02 +1.710786E-04 +7.113970E-02 +1.051534E-03 +3.157181E+00 +2.100927E+00 +8.531655E-02 +1.520341E-03 +4.523209E+00 +4.302173E+00 +3.468239E-02 +2.516726E-04 +8.598504E-02 +1.546905E-03 +2.922890E+00 +1.788820E+00 +8.708247E-02 +1.621130E-03 +4.305352E+00 +3.866481E+00 +3.740038E-02 +3.097101E-04 +9.272351E-02 +1.903632E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -171,86 +171,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.806322E+00 -1.650116E+00 -8.677689E-02 -1.577748E-03 -4.271173E+00 -3.787053E+00 -3.812147E-02 -3.107861E-04 -9.451124E-02 -1.910246E-03 -2.767101E+00 -1.574082E+00 -8.523508E-02 -1.523190E-03 -4.143067E+00 -3.546386E+00 -3.725690E-02 -2.974028E-04 -9.236779E-02 -1.827986E-03 -2.767691E+00 -1.557585E+00 -7.816996E-02 -1.254835E-03 -4.015666E+00 -3.289915E+00 -3.260527E-02 -2.211412E-04 -8.083542E-02 -1.359243E-03 -2.734236E+00 -1.510579E+00 -8.505695E-02 -1.474976E-03 -4.114798E+00 -3.424404E+00 -3.737976E-02 -2.870194E-04 -9.267239E-02 -1.764164E-03 -2.421441E+00 -1.195490E+00 -8.292263E-02 -1.384777E-03 -3.817448E+00 -2.942804E+00 -3.814207E-02 -2.931372E-04 -9.456230E-02 -1.801767E-03 -2.724650E+00 -1.519118E+00 -9.238437E-02 -1.725646E-03 -4.305602E+00 -3.753830E+00 -4.235399E-02 -3.657508E-04 -1.050046E-01 -2.248086E-03 -2.703678E+00 -1.593893E+00 -8.744732E-02 -1.597761E-03 -4.110489E+00 -3.592877E+00 -3.913038E-02 -3.184391E-04 -9.701255E-02 -1.957285E-03 -2.707705E+00 -1.792230E+00 -8.754036E-02 -1.760104E-03 -4.203619E+00 -4.162497E+00 -3.927598E-02 -3.456207E-04 -9.737351E-02 -2.124357E-03 +3.136746E+00 +2.097844E+00 +9.001259E-02 +1.679379E-03 +4.662194E+00 +4.592725E+00 +3.801404E-02 +2.981421E-04 +9.424490E-02 +1.832530E-03 +3.106448E+00 +2.078391E+00 +9.012356E-02 +1.762294E-03 +4.513037E+00 +4.378913E+00 +3.813004E-02 +3.167893E-04 +9.453248E-02 +1.947145E-03 +2.830121E+00 +1.799064E+00 +8.110239E-02 +1.428875E-03 +4.186480E+00 +3.869678E+00 +3.421633E-02 +2.502127E-04 +8.482957E-02 +1.537931E-03 +3.117676E+00 +1.961910E+00 +8.682325E-02 +1.551480E-03 +4.541798E+00 +4.177594E+00 +3.598671E-02 +2.719848E-04 +8.921872E-02 +1.671754E-03 +2.860792E+00 +1.699774E+00 +7.734553E-02 +1.212035E-03 +4.045685E+00 +3.352230E+00 +3.136656E-02 +2.020318E-04 +7.776439E-02 +1.241788E-03 +2.807124E+00 +1.635117E+00 +8.312523E-02 +1.403341E-03 +4.138428E+00 +3.503069E+00 +3.560217E-02 +2.611276E-04 +8.826537E-02 +1.605020E-03 +2.924592E+00 +1.733173E+00 +8.343992E-02 +1.403493E-03 +4.345943E+00 +3.817213E+00 +3.513702E-02 +2.517119E-04 +8.711216E-02 +1.547146E-03 +2.646486E+00 +1.418290E+00 +7.950085E-02 +1.309718E-03 +3.966626E+00 +3.215631E+00 +3.437595E-02 +2.503895E-04 +8.522531E-02 +1.539019E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -341,86 +341,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.333969E+00 -1.124588E+00 -6.982134E-02 -1.014762E-03 -3.448351E+00 -2.435965E+00 -3.004987E-02 -1.926319E-04 -7.450003E-02 -1.184011E-03 -3.086286E+00 -1.981929E+00 -1.016918E-01 -2.146313E-03 -4.741530E+00 -4.626144E+00 -4.593581E-02 -4.489950E-04 -1.138847E-01 -2.759746E-03 -2.871515E+00 -1.672027E+00 -8.533571E-02 -1.469319E-03 -4.221958E+00 -3.599412E+00 -3.658547E-02 -2.721530E-04 -9.070318E-02 -1.672788E-03 -2.715053E+00 -1.498990E+00 -8.595576E-02 -1.530999E-03 -4.139891E+00 -3.493193E+00 -3.815373E-02 -3.059779E-04 -9.459122E-02 -1.880692E-03 -2.265823E+00 -1.080584E+00 -6.709890E-02 -9.696052E-04 -3.397886E+00 -2.446009E+00 -2.882467E-02 -1.820798E-04 -7.146249E-02 -1.119153E-03 -2.443336E+00 -1.255468E+00 -8.222450E-02 -1.373726E-03 -3.836077E+00 -3.019588E+00 -3.754438E-02 -2.866712E-04 -9.308051E-02 -1.762024E-03 -2.450506E+00 -1.305510E+00 -7.897423E-02 -1.293368E-03 -3.725732E+00 -2.954033E+00 -3.530661E-02 -2.549027E-04 -8.753260E-02 -1.566759E-03 -2.463151E+00 -1.385265E+00 -8.072623E-02 -1.376083E-03 -3.828575E+00 -3.178469E+00 -3.645911E-02 -2.733269E-04 -9.038989E-02 -1.680003E-03 +3.421827E+00 +2.488458E+00 +9.626948E-02 +2.065197E-03 +5.040929E+00 +5.451459E+00 +4.018656E-02 +3.779606E-04 +9.963105E-02 +2.323134E-03 +2.869547E+00 +1.698223E+00 +8.662967E-02 +1.551328E-03 +4.227759E+00 +3.702584E+00 +3.740987E-02 +2.903037E-04 +9.274703E-02 +1.784351E-03 +2.588566E+00 +1.357415E+00 +7.706802E-02 +1.216264E-03 +3.821156E+00 +2.967091E+00 +3.309228E-02 +2.275536E-04 +8.204281E-02 +1.398658E-03 +2.777772E+00 +1.584289E+00 +8.469785E-02 +1.456208E-03 +4.195353E+00 +3.574265E+00 +3.693140E-02 +2.790926E-04 +9.156081E-02 +1.715441E-03 +3.118197E+00 +1.989138E+00 +9.265883E-02 +1.753400E-03 +4.574869E+00 +4.260081E+00 +3.969940E-02 +3.241960E-04 +9.842328E-02 +1.992670E-03 +2.591904E+00 +1.370188E+00 +8.148726E-02 +1.342503E-03 +3.988752E+00 +3.228928E+00 +3.608041E-02 +2.655091E-04 +8.945102E-02 +1.631951E-03 +3.123916E+00 +1.985559E+00 +9.297564E-02 +1.754830E-03 +4.650584E+00 +4.387677E+00 +3.995654E-02 +3.270558E-04 +9.906077E-02 +2.010247E-03 +2.507814E+00 +1.313596E+00 +7.534295E-02 +1.160881E-03 +3.761249E+00 +2.915759E+00 +3.258970E-02 +2.199767E-04 +8.079681E-02 +1.352086E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -511,86 +511,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.433621E+00 -1.298731E+00 -7.126855E-02 -1.084489E-03 -3.556720E+00 -2.723689E+00 -3.032075E-02 -1.974495E-04 -7.517159E-02 -1.213623E-03 -2.717435E+00 -1.549804E+00 -7.064960E-02 -1.006179E-03 -3.808148E+00 -2.988456E+00 -2.796674E-02 -1.570090E-04 -6.933552E-02 -9.650556E-04 -2.679858E+00 -1.486542E+00 -8.030738E-02 -1.319629E-03 -4.018748E+00 -3.302325E+00 -3.467552E-02 -2.467113E-04 -8.596801E-02 -1.516410E-03 -2.404649E+00 -1.193262E+00 -6.941086E-02 -9.897421E-04 -3.496702E+00 -2.518136E+00 -2.928903E-02 -1.763988E-04 -7.261375E-02 -1.084234E-03 -2.147183E+00 -9.523277E-01 -6.709152E-02 -9.314107E-04 -3.232389E+00 -2.147105E+00 -2.954891E-02 -1.829794E-04 -7.325805E-02 -1.124682E-03 -2.636339E+00 -1.437307E+00 -7.792975E-02 -1.238873E-03 -3.915670E+00 -3.133618E+00 -3.338754E-02 -2.290709E-04 -8.277483E-02 -1.407984E-03 -2.771906E+00 -1.608332E+00 -8.667994E-02 -1.535886E-03 -4.183761E+00 -3.623671E+00 -3.819000E-02 -2.976177E-04 -9.468114E-02 -1.829306E-03 -2.269663E+00 -1.042807E+00 -7.391262E-02 -1.128121E-03 -3.476219E+00 -2.457866E+00 -3.321742E-02 -2.316107E-04 -8.235305E-02 -1.423595E-03 +3.072424E+00 +1.910502E+00 +8.487675E-02 +1.467547E-03 +4.502748E+00 +4.073633E+00 +3.505649E-02 +2.616264E-04 +8.691250E-02 +1.608086E-03 +3.358497E+00 +2.340508E+00 +9.563725E-02 +1.882737E-03 +4.919309E+00 +4.997057E+00 +4.012501E-02 +3.331881E-04 +9.947844E-02 +2.047940E-03 +2.841595E+00 +1.676656E+00 +8.961778E-02 +1.706734E-03 +4.382947E+00 +3.971256E+00 +3.977482E-02 +3.476057E-04 +9.861025E-02 +2.136557E-03 +3.031993E+00 +1.887195E+00 +1.005232E-01 +2.088650E-03 +4.706199E+00 +4.537534E+00 +4.558466E-02 +4.340386E-04 +1.130141E-01 +2.667817E-03 +3.116522E+00 +2.011384E+00 +9.595523E-02 +1.977738E-03 +4.627314E+00 +4.456240E+00 +4.188172E-02 +3.906963E-04 +1.038337E-01 +2.401414E-03 +2.906411E+00 +1.724257E+00 +9.583879E-02 +1.902835E-03 +4.514939E+00 +4.188183E+00 +4.337455E-02 +3.935555E-04 +1.075347E-01 +2.418988E-03 +2.723724E+00 +1.514959E+00 +8.518353E-02 +1.512432E-03 +4.173364E+00 +3.561677E+00 +3.761270E-02 +3.039338E-04 +9.324988E-02 +1.868128E-03 +2.336622E+00 +1.158899E+00 +8.017647E-02 +1.335514E-03 +3.700707E+00 +2.838852E+00 +3.695886E-02 +2.855605E-04 +9.162889E-02 +1.755197E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -681,86 +681,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.364354E+00 -1.160200E+00 -6.641096E-02 -8.852085E-04 -3.392824E+00 -2.329004E+00 -2.757158E-02 -1.580033E-04 -6.835582E-02 -9.711667E-04 -2.524962E+00 -1.341947E+00 -7.077935E-02 -1.024802E-03 -3.665788E+00 -2.770692E+00 -2.942129E-02 -1.757498E-04 -7.294165E-02 -1.080245E-03 -2.400937E+00 -1.186871E+00 -6.912946E-02 -9.715758E-04 -3.511555E+00 -2.501540E+00 -2.915335E-02 -1.747298E-04 -7.227736E-02 -1.073976E-03 -2.114087E+00 -8.990260E-01 -7.043720E-02 -1.000660E-03 -3.333143E+00 -2.235823E+00 -3.206435E-02 -2.087641E-04 -7.949434E-02 -1.283168E-03 -2.130919E+00 -9.474100E-01 -7.007826E-02 -9.974302E-04 -3.308019E+00 -2.242723E+00 -3.167506E-02 -2.044420E-04 -7.852922E-02 -1.256602E-03 -2.315558E+00 -1.159276E+00 -6.983615E-02 -1.023301E-03 -3.433129E+00 -2.511229E+00 -3.018652E-02 -1.890787E-04 -7.483880E-02 -1.162171E-03 -2.729503E+00 -1.530826E+00 -8.250917E-02 -1.373688E-03 -4.093393E+00 -3.424963E+00 -3.577102E-02 -2.569031E-04 -8.868397E-02 -1.579054E-03 -2.303613E+00 -1.077186E+00 -6.880069E-02 -9.471902E-04 -3.366481E+00 -2.277404E+00 -2.953353E-02 -1.751404E-04 -7.321992E-02 -1.076500E-03 +3.107110E+00 +2.031843E+00 +8.851130E-02 +1.622664E-03 +4.517810E+00 +4.254353E+00 +3.710637E-02 +2.854685E-04 +9.199458E-02 +1.754631E-03 +3.274545E+00 +2.233343E+00 +1.058426E-01 +2.344479E-03 +4.973131E+00 +5.160486E+00 +4.734962E-02 +4.741951E-04 +1.173898E-01 +2.914639E-03 +2.636225E+00 +1.433972E+00 +7.975913E-02 +1.339963E-03 +3.942728E+00 +3.209671E+00 +3.458062E-02 +2.576972E-04 +8.573273E-02 +1.583935E-03 +2.850580E+00 +1.753714E+00 +8.409223E-02 +1.504889E-03 +4.292353E+00 +3.910272E+00 +3.606743E-02 +2.785145E-04 +8.941884E-02 +1.711888E-03 +3.177076E+00 +2.046322E+00 +9.290111E-02 +1.805479E-03 +4.671510E+00 +4.473692E+00 +3.953032E-02 +3.362191E-04 +9.800407E-02 +2.066570E-03 +2.792020E+00 +1.590839E+00 +8.956724E-02 +1.645807E-03 +4.270468E+00 +3.718893E+00 +3.995877E-02 +3.306439E-04 +9.906631E-02 +2.032302E-03 +2.319545E+00 +1.130506E+00 +7.787530E-02 +1.284059E-03 +3.631235E+00 +2.757748E+00 +3.552455E-02 +2.689956E-04 +8.807293E-02 +1.653381E-03 +2.338383E+00 +1.206709E+00 +7.569363E-02 +1.234797E-03 +3.576288E+00 +2.757162E+00 +3.391726E-02 +2.462226E-04 +8.408811E-02 +1.513407E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -851,86 +851,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.603449E+00 -1.382310E+00 -7.044110E-02 -1.048854E-03 -3.683939E+00 -2.770822E+00 -2.858207E-02 -1.846566E-04 -7.086104E-02 -1.134991E-03 -2.458052E+00 -1.211571E+00 -7.271340E-02 -1.061659E-03 -3.628656E+00 -2.636961E+00 -3.113049E-02 -1.956492E-04 -7.717911E-02 -1.202557E-03 -2.200265E+00 -9.745445E-01 -7.058665E-02 -1.016272E-03 -3.372745E+00 -2.298238E+00 -3.151097E-02 -2.069373E-04 -7.812240E-02 -1.271940E-03 -2.154223E+00 -9.469347E-01 -6.893166E-02 -1.008453E-03 -3.298063E+00 -2.220933E+00 -3.075978E-02 -2.125545E-04 -7.626005E-02 -1.306466E-03 -2.057172E+00 -8.672290E-01 -6.372568E-02 -8.190278E-04 -3.108552E+00 -1.951197E+00 -2.795535E-02 -1.595890E-04 -6.930727E-02 -9.809131E-04 -2.295642E+00 -1.124640E+00 -6.209725E-02 -8.275041E-04 -3.320499E+00 -2.339919E+00 -2.530846E-02 -1.388437E-04 -6.274506E-02 -8.534023E-04 -2.411516E+00 -1.208668E+00 -7.127755E-02 -1.051206E-03 -3.599456E+00 -2.675604E+00 -3.057946E-02 -1.929511E-04 -7.581300E-02 -1.185973E-03 -2.170599E+00 -9.911770E-01 -6.225331E-02 -8.096954E-04 -3.174400E+00 -2.102442E+00 -2.621745E-02 -1.490631E-04 -6.499865E-02 -9.162161E-04 +2.615843E+00 +1.511122E+00 +8.062716E-02 +1.419946E-03 +3.984393E+00 +3.462948E+00 +3.538715E-02 +2.775562E-04 +8.773227E-02 +1.705998E-03 +2.882570E+00 +1.761817E+00 +8.002023E-02 +1.361536E-03 +4.138232E+00 +3.590378E+00 +3.301403E-02 +2.428126E-04 +8.184882E-02 +1.492447E-03 +3.223528E+00 +2.083805E+00 +8.733159E-02 +1.544129E-03 +4.604746E+00 +4.254674E+00 +3.551662E-02 +2.594309E-04 +8.805326E-02 +1.594591E-03 +2.927536E+00 +1.741281E+00 +8.346281E-02 +1.434485E-03 +4.324501E+00 +3.806148E+00 +3.508574E-02 +2.599007E-04 +8.698503E-02 +1.597479E-03 +3.057707E+00 +1.944892E+00 +8.714384E-02 +1.580757E-03 +4.450690E+00 +4.103723E+00 +3.652244E-02 +2.807333E-04 +9.054690E-02 +1.725526E-03 +2.719115E+00 +1.510843E+00 +7.867244E-02 +1.258358E-03 +3.983708E+00 +3.239056E+00 +3.327673E-02 +2.253729E-04 +8.250009E-02 +1.385254E-03 +2.396119E+00 +1.153282E+00 +7.566785E-02 +1.182019E-03 +3.610641E+00 +2.634248E+00 +3.348337E-02 +2.377537E-04 +8.301240E-02 +1.461353E-03 +2.154802E+00 +1.067493E+00 +6.324323E-02 +8.945795E-04 +3.142780E+00 +2.238062E+00 +2.691333E-02 +1.628077E-04 +6.672387E-02 +1.000697E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1021,86 +1021,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.374348E+00 -1.146696E+00 -6.443426E-02 -8.746572E-04 -3.428224E+00 -2.405912E+00 -2.629872E-02 -1.523681E-04 -6.520012E-02 -9.365302E-04 -2.464893E+00 -1.229701E+00 -7.050588E-02 -1.022217E-03 -3.660115E+00 -2.719644E+00 -2.971255E-02 -1.859463E-04 -7.366374E-02 -1.142918E-03 -2.086598E+00 -8.776819E-01 -6.304625E-02 -8.239181E-04 -3.124875E+00 -1.968039E+00 -2.731211E-02 -1.609716E-04 -6.771252E-02 -9.894116E-04 -2.314873E+00 -1.083111E+00 -5.761556E-02 -6.762901E-04 -3.205662E+00 -2.074555E+00 -2.215216E-02 -1.044406E-04 -5.491992E-02 -6.419437E-04 -2.313273E+00 -1.119912E+00 -6.126598E-02 -7.845228E-04 -3.266340E+00 -2.226545E+00 -2.455456E-02 -1.271226E-04 -6.087598E-02 -7.813588E-04 -2.283282E+00 -1.100474E+00 -6.665553E-02 -9.193170E-04 -3.364565E+00 -2.364829E+00 -2.834631E-02 -1.672037E-04 -7.027653E-02 -1.027717E-03 -2.186072E+00 -9.712029E-01 -7.000241E-02 -1.019717E-03 -3.374290E+00 -2.313941E+00 -3.125803E-02 -2.124583E-04 -7.749531E-02 -1.305874E-03 -2.250156E+00 -1.052173E+00 -6.400255E-02 -8.818690E-04 -3.268015E+00 -2.245559E+00 -2.679559E-02 -1.634377E-04 -6.643197E-02 -1.004569E-03 +3.073244E+00 +2.018709E+00 +9.073696E-02 +1.753157E-03 +4.516776E+00 +4.329334E+00 +3.876727E-02 +3.208452E-04 +9.611233E-02 +1.972074E-03 +2.671039E+00 +1.446563E+00 +7.823234E-02 +1.250837E-03 +3.946269E+00 +3.138681E+00 +3.334746E-02 +2.319341E-04 +8.267545E-02 +1.425582E-03 +3.349978E+00 +2.319515E+00 +9.950325E-02 +2.061329E-03 +5.001138E+00 +5.168172E+00 +4.276928E-02 +3.828620E-04 +1.060342E-01 +2.353260E-03 +2.978936E+00 +1.799523E+00 +9.017252E-02 +1.638102E-03 +4.406186E+00 +3.924003E+00 +3.904232E-02 +3.071501E-04 +9.679424E-02 +1.887897E-03 +2.702401E+00 +1.471209E+00 +7.923417E-02 +1.296139E-03 +4.023502E+00 +3.272988E+00 +3.383397E-02 +2.416414E-04 +8.388161E-02 +1.485248E-03 +2.759858E+00 +1.531505E+00 +8.419492E-02 +1.488052E-03 +4.150314E+00 +3.494954E+00 +3.667250E-02 +2.957414E-04 +9.091893E-02 +1.817773E-03 +2.601272E+00 +1.380301E+00 +8.755772E-02 +1.625699E-03 +4.019486E+00 +3.299452E+00 +3.989786E-02 +3.528389E-04 +9.891530E-02 +2.168723E-03 +2.510230E+00 +1.275856E+00 +8.725714E-02 +1.601325E-03 +3.973851E+00 +3.204497E+00 +4.039490E-02 +3.543820E-04 +1.001476E-01 +2.178208E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1191,86 +1191,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.149693E+00 -9.566763E-01 -6.325375E-02 -8.781459E-04 -3.163781E+00 -2.089993E+00 -2.699802E-02 -1.754950E-04 -6.693384E-02 -1.078679E-03 -2.368262E+00 -1.206255E+00 -6.517665E-02 -9.363557E-04 -3.403305E+00 -2.501730E+00 -2.677251E-02 -1.620249E-04 -6.637476E-02 -9.958857E-04 -2.280249E+00 -1.070455E+00 -7.456831E-02 -1.147671E-03 -3.475673E+00 -2.476848E+00 -3.352210E-02 -2.345869E-04 -8.310842E-02 -1.441888E-03 -2.226928E+00 -1.011037E+00 -7.770236E-02 -1.243393E-03 -3.524398E+00 -2.538453E+00 -3.601410E-02 -2.702997E-04 -8.928663E-02 -1.661396E-03 -2.407411E+00 -1.170093E+00 -7.171133E-02 -1.029235E-03 -3.502484E+00 -2.461827E+00 -3.070568E-02 -1.889715E-04 -7.612591E-02 -1.161513E-03 -2.331359E+00 -1.134448E+00 -6.734317E-02 -9.407363E-04 -3.333577E+00 -2.267345E+00 -2.832929E-02 -1.772720E-04 -7.023433E-02 -1.089602E-03 -2.008838E+00 -8.722179E-01 -5.586199E-02 -7.051708E-04 -2.903675E+00 -1.807255E+00 -2.309145E-02 -1.322637E-04 -5.724863E-02 -8.129585E-04 -2.226061E+00 -1.048269E+00 -6.536859E-02 -9.623671E-04 -3.297988E+00 -2.324450E+00 -2.791406E-02 -1.866630E-04 -6.920490E-02 -1.147324E-03 +2.355419E+00 +1.227267E+00 +7.298104E-02 +1.204355E-03 +3.584952E+00 +2.839605E+00 +3.206831E-02 +2.384737E-04 +7.950416E-02 +1.465778E-03 +2.885415E+00 +1.707496E+00 +8.937354E-02 +1.638109E-03 +4.328343E+00 +3.842717E+00 +3.915662E-02 +3.169623E-04 +9.707761E-02 +1.948208E-03 +2.817788E+00 +1.659313E+00 +8.795245E-02 +1.652827E-03 +4.286382E+00 +3.831800E+00 +3.878123E-02 +3.288848E-04 +9.614692E-02 +2.021489E-03 +2.987432E+00 +1.822564E+00 +8.500598E-02 +1.500428E-03 +4.380470E+00 +3.921075E+00 +3.565649E-02 +2.685990E-04 +8.840004E-02 +1.650943E-03 +2.685515E+00 +1.443739E+00 +8.434998E-02 +1.460545E-03 +4.166156E+00 +3.492673E+00 +3.738938E-02 +2.956120E-04 +9.269624E-02 +1.816978E-03 +2.686749E+00 +1.496524E+00 +8.914589E-02 +1.663073E-03 +4.156201E+00 +3.578378E+00 +4.042946E-02 +3.475741E-04 +1.002332E-01 +2.136363E-03 +2.760305E+00 +1.579416E+00 +8.914803E-02 +1.630935E-03 +4.214440E+00 +3.628492E+00 +3.989038E-02 +3.331009E-04 +9.889676E-02 +2.047404E-03 +2.681752E+00 +1.472982E+00 +8.701435E-02 +1.526110E-03 +4.175631E+00 +3.518871E+00 +3.914441E-02 +3.118235E-04 +9.704732E-02 +1.916622E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2892,15 +2892,15 @@ tally 1: 0.000000E+00 0.000000E+00 tally 2: -4.076711E+01 -3.341374E+02 -4.077838E+01 -3.343221E+02 -6.274781E+00 -7.937573E+00 -6.275007E+00 -7.938146E+00 -1.122968E+02 -2.557771E+03 -1.122968E+02 -2.557771E+03 +4.417493E+01 +3.967273E+02 +4.418714E+01 +3.969466E+02 +7.878379E+00 +1.248770E+01 +7.878666E+00 +1.248861E+01 +1.271565E+02 +3.251279E+03 +1.271565E+02 +3.251279E+03 diff --git a/tests/test_mgxs_library_ce_to_mg/results_true.dat b/tests/test_mgxs_library_ce_to_mg/results_true.dat index 16441af8c7..c82da3bce2 100644 --- a/tests/test_mgxs_library_ce_to_mg/results_true.dat +++ b/tests/test_mgxs_library_ce_to_mg/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.094839E+00 1.203524E-02 +1.151644E+00 3.044607E-02 From 55e1ebff2d06c4c70599ab6c3dbe07cb57a5b3ae Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Tue, 7 Jun 2016 17:11:59 -0500 Subject: [PATCH 614/650] Use multiple universes for TRISOs --- openmc/model/triso.py | 52 +++++++++++++------------------ tests/test_triso/inputs_true.dat | 2 +- tests/test_triso/plots.xml | 6 ++++ tests/test_triso/results_true.dat | 2 +- tests/test_triso/test_triso.py | 28 +++++++++++------ 5 files changed, 48 insertions(+), 42 deletions(-) create mode 100644 tests/test_triso/plots.xml diff --git a/openmc/model/triso.py b/openmc/model/triso.py index dc53e6ec01..ca519ed6fe 100644 --- a/openmc/model/triso.py +++ b/openmc/model/triso.py @@ -12,18 +12,17 @@ class TRISO(object): Parameters ---------- - materials : Iterable of openmc.Material - Material to be assigned to each layer of the TRISO particle starting - with the innermost and proceeding outwards - radii : Iterable of float - Outer radii in cm of each layer of the TRISO particle in ascending order + outer_radius : int + Outer radius of TRISO particle + inner_univ : openmc.Universe + Universe which contains all layers of the TRISO particle center : Iterable of float Cartesian coordinates of the center of the TRISO particle in cm Attributes ---------- - cells : list of opemc.Cell - Each layer of the TRISO particle + cell : opemc.Cell + Cell which contains the TRISO universe center : numpy.ndarray Cartesian coordinates of the center of the TRISO particle in cm outside : openmc.Region @@ -34,27 +33,18 @@ class TRISO(object): """ - def __init__(self, materials, radii, center=(0., 0., 0.)): - surfaces = [openmc.Sphere(R=r) for r in radii] - cells = [] - for i, m in enumerate(materials): - c = openmc.Cell(fill=m) - if i == 0: - c.region = -surfaces[i] - else: - c.region = +surfaces[i-1] & -surfaces[i] - cells.append(c) - self._cells = cells - self._surfaces = surfaces + def __init__(self, outer_radius, inner_univ, center=(0., 0., 0.)): + self._surface = openmc.Sphere(R=outer_radius) + self._cell = openmc.Cell(fill=inner_univ, region=-self._surface) self.center = np.asarray(center) @property def bounding_box(self): - return self.cells[-1].region.bounding_box + return self.cell.region.bounding_box @property - def cells(self): - return self._cells + def cell(self): + return self._cell @property def center(self): @@ -62,13 +52,15 @@ class TRISO(object): @property def outside(self): - return ~self.cells[-1].region.nodes[-1] + return +self._surface @center.setter def center(self, center): cv.check_type('TRISO center', center, Iterable, Real) - for s in self._surfaces: - s.x0, s.y0, s.z0 = center + self._surface.x0 = center[0] + self._surface.y0 = center[1] + self._surface.z0 = center[2] + self.cell.translation = center self._center = center def classify(self, lattice): @@ -136,11 +128,9 @@ def create_triso_lattice(trisos, lower_left, pitch, shape, background): # Create copy of TRISO particle with materials preserved and # different cell/surface IDs t_copy = copy.deepcopy(t) - for c, c_copy in zip(t.cells, t_copy.cells): - c_copy.id = None - c_copy.fill = c.fill - for s in t_copy._surfaces: - s.id = None + t_copy.cell.id = None + t_copy.cell.fill = t.cell.fill + t_copy._surface.id = None triso_locations[idx].append(t_copy) # Create universes @@ -155,7 +145,7 @@ def create_triso_lattice(trisos, lower_left, pitch, shape, background): u = openmc.Universe() u.add_cell(background_cell) for t in triso_list: - u.add_cells(t.cells) + u.add_cell(t.cell) iz, iy, ix = idx t.center = lattice.get_local_coordinates(t.center, (ix, iy, iz)) diff --git a/tests/test_triso/inputs_true.dat b/tests/test_triso/inputs_true.dat index 40f312850d..3e54e5e6fe 100644 --- a/tests/test_triso/inputs_true.dat +++ b/tests/test_triso/inputs_true.dat @@ -1 +1 @@ -6c6fecedf3db0b91b69b7b7b57b3a52c42947253bea4ee3889d6bbd6e74935cc4e599c1c743eb589a1045868412f3f88c5fef7cf10e180bdc4bd182970c9ee15 \ No newline at end of file +2dcfd1a17cba671874e60192a7355deb57e2e51467a474fd168c8b51e454a977edb34df07ae11625c0a43906112152c75113e442a9a8f240a4c9d1a11ee4771d \ No newline at end of file diff --git a/tests/test_triso/plots.xml b/tests/test_triso/plots.xml new file mode 100644 index 0000000000..60ae7d9d8f --- /dev/null +++ b/tests/test_triso/plots.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/tests/test_triso/results_true.dat b/tests/test_triso/results_true.dat index 8f968f65a0..ea7da21edf 100644 --- a/tests/test_triso/results_true.dat +++ b/tests/test_triso/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.685303E+00 1.121936E-01 +1.662675E+00 1.475968E-02 diff --git a/tests/test_triso/test_triso.py b/tests/test_triso/test_triso.py index f7f4daa7ba..d1ac4e5cdc 100644 --- a/tests/test_triso/test_triso.py +++ b/tests/test_triso/test_triso.py @@ -50,22 +50,31 @@ class TRISOTestHarness(PyAPITestHarness): graphite.add_s_alpha_beta('Graph', '71t') # Create TRISO particles - materials = [fuel, porous_carbon, ipyc, sic, opyc] - radii = np.array([212.5, 312.5, 347.5, 382.5, 422.5])*1e-4 + spheres = [openmc.Sphere(R=r*1e-4) + for r in [212.5, 312.5, 347.5, 382.5]] + c1 = openmc.Cell(fill=fuel, region=-spheres[0]) + c2 = openmc.Cell(fill=porous_carbon, region=+spheres[0] & -spheres[1]) + c3 = openmc.Cell(fill=ipyc, region=+spheres[1] & -spheres[2]) + c4 = openmc.Cell(fill=sic, region=+spheres[2] & -spheres[3]) + c5 = openmc.Cell(fill=opyc, region=+spheres[3]) + inner_univ = openmc.Universe(cells=[c1, c2, c3, c4, c5]) + + outer_radius = 422.5*1e-4 trisos = [] random.seed(1) for i in range(100): # Randomly sample location - x = random.uniform(-0.5, 0.5) - y = random.uniform(-0.5, 0.5) - z = random.uniform(-0.5, 0.5) - t = openmc.model.TRISO(materials, radii, (x, y, z)) + lim = 0.5 - outer_radius*1.001 + x = random.uniform(-lim, lim) + y = random.uniform(-lim, lim) + z = random.uniform(-lim, lim) + t = openmc.model.TRISO(outer_radius, inner_univ, (x, y, z)) # Make sure TRISO doesn't overlap with another for tp in trisos: xp, yp, zp = tp.center distance = sqrt((x - xp)**2 + (y - yp)**2 + (z - zp)**2) - if distance <= 2*radii[-1]: + if distance <= 2*outer_radius: break else: trisos.append(t) @@ -82,8 +91,9 @@ class TRISOTestHarness(PyAPITestHarness): # Create lattice ll, ur = box.region.bounding_box shape = (3, 3, 3) + pitch = (ur - ll) / shape lattice = openmc.model.create_triso_lattice( - trisos, ll, (ur - ll)/shape, shape, graphite) + trisos, ll, pitch, shape, graphite) box.fill = lattice root = openmc.Universe(0, cells=[box]) @@ -93,7 +103,7 @@ class TRISOTestHarness(PyAPITestHarness): settings = openmc.Settings() settings.batches = 5 settings.inactive = 0 - settings.particles = 50 + settings.particles = 100 settings.source = openmc.Source(space=openmc.stats.Point()) settings.export_to_xml() From 69f2bc10a8a628f5feb545b393150e2b5eff01a3 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 7 Jun 2016 20:08:54 -0500 Subject: [PATCH 615/650] Warn user if TRISO particle is placed outside of lattice --- openmc/model/triso.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openmc/model/triso.py b/openmc/model/triso.py index ca519ed6fe..6f0d145b2f 100644 --- a/openmc/model/triso.py +++ b/openmc/model/triso.py @@ -1,6 +1,7 @@ import copy from collections import Iterable from numbers import Real +import warnings import numpy as np @@ -132,6 +133,9 @@ def create_triso_lattice(trisos, lower_left, pitch, shape, background): t_copy.cell.fill = t.cell.fill t_copy._surface.id = None triso_locations[idx].append(t_copy) + else: + warnings.warn('TRISO particle is partially or completely ' + 'outside of the lattice.') # Create universes universes = np.empty(shape[::-1], dtype=openmc.Universe) From 933fdd3c818dfaefc7745af4a435308850ba3811 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 7 Jun 2016 22:17:46 -0500 Subject: [PATCH 616/650] Allow multiple temperatures to be used in a material --- openmc/material.py | 95 +++++++++++++++++++++------------------------- 1 file changed, 44 insertions(+), 51 deletions(-) diff --git a/openmc/material.py b/openmc/material.py index f29a42117f..66c2320ea4 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -50,14 +50,14 @@ class Material(object): Units used for `density`. Can be one of 'g/cm3', 'g/cc', 'kg/cm3', 'atom/b-cm', 'atom/cm3', 'sum', or 'macro'. The 'macro' unit only applies in the case of a multi-group calculation. - elements : collections.OrderedDict - Dictionary whose keys are element names and values are 3-tuples - consisting of an :class:`openmc.Element` instance, the percent density, - and the percent type (atom or weight fraction). - nuclides : collections.OrderedDict - Dictionary whose keys are nuclide names and values are 3-tuples - consisting of an :class:`openmc.Nuclide` instance, the percent density, - and the percent type (atom or weight fraction). + elements : list of tuple + List in which each item is a 3-tuple consisting of an + :class:`openmc.Element` instance, the percent density, and the percent + type ('ao' or 'wo'). + nuclides : list of tuple + List in which each item is a 3-tuple consisting of an + :class:`openmc.Nuclide` instance, the percent density, and the percent + type ('ao' or 'wo'). """ @@ -68,19 +68,15 @@ class Material(object): self._density = None self._density_units = '' - # An ordered dictionary of Nuclides (order affects OpenMC results) - # Keys - Nuclide names - # Values - tuple (nuclide, percent, percent type) - self._nuclides = OrderedDict() + # A list of tuples (nuclide, percent, percent type) + self._nuclides = [] # The single instance of Macroscopic data present in this material # (only one is allowed, hence this is different than _nuclides, etc) self._macroscopic = None - # An ordered dictionary of Elements (order affects OpenMC results) - # Keys - Element names - # Values - tuple (element, percent, percent type) - self._elements = OrderedDict() + # A list of tuples (element, percent, percent type) + self._elements = [] # If specified, a list of tuples of (table name, xs identifier) self._sab = [] @@ -134,10 +130,8 @@ class Material(object): string += '{0: <16}\n'.format('\tNuclides') - for nuclide in self._nuclides: - percent = self._nuclides[nuclide][1] - percent_type = self._nuclides[nuclide][2] - string += '{0: <16}'.format('\t{0}'.format(nuclide)) + for nuclide, percent, percent_type in self._nuclides: + string += '{0: <16}'.format('\t{0.name}.{0.xs}'.format(nuclide)) string += '=\t{0: <12} [{1}]\n'.format(percent, percent_type) if self._macroscopic is not None: @@ -146,10 +140,8 @@ class Material(object): string += '{0: <16}\n'.format('\tElements') - for element in self._elements: - percent = self._elements[element][1] - percent_type = self._elements[element][2] - string += '{0: <16}'.format('\t{0}'.format(element)) + for element, percent, percent_type in self._elements: + string += '{0: <16}'.format('\t{0.name}.{0.xs}'.format(element)) string += '=\t{0: <12} [{1}]\n'.format(percent, percent_type) return string @@ -301,7 +293,7 @@ class Material(object): else: nuclide = openmc.Nuclide(nuclide) - self._nuclides[nuclide._name] = (nuclide, percent, percent_type) + self._nuclides.append((nuclide, percent, percent_type)) def remove_nuclide(self, nuclide): """Remove a nuclide from the material @@ -319,8 +311,9 @@ class Material(object): raise ValueError(msg) # If the Material contains the Nuclide, delete it - if nuclide._name in self._nuclides: - del self._nuclides[nuclide._name] + for nuc in self._nuclides: + if nuclide == nuc: + self._nuclides.remove(nuc) def add_macroscopic(self, macroscopic): """Add a macroscopic to the material. This will also set the @@ -439,10 +432,9 @@ class Material(object): raise NotImplementedError('Expanding natural element based on ' 'weight percent is not yet supported.') for isotope, abundance in element.expand(): - self._nuclides[isotope.name] = ( - isotope, percent*abundance, percent_type) + self._nuclides.append((isotope, percent*abundance, percent_type)) else: - self._elements[element.name] = (element, percent, percent_type) + self._elements.append((element, percent, percent_type)) def remove_element(self, element): """Remove a natural element from the material @@ -454,9 +446,15 @@ class Material(object): """ - # If the Material contains the Element, delete it - if element._name in self._elements: - del self._elements[element._name] + if not isinstance(nuclide, openmc.Element): + msg = 'Unable to remove "{0}" in Material ID="{1}" ' \ + 'since it is not an Element'.format(self.id, element) + raise ValueError(msg) + + # If the Material contains the Nuclide, delete it + for elm in self._elements: + if element == elm: + self._nuclides.remove(elm) def add_s_alpha_beta(self, name, xs): r"""Add an :math:`S(\alpha,\beta)` table to the material @@ -488,10 +486,10 @@ class Material(object): self._sab.append((name, xs)) def make_isotropic_in_lab(self): - for nuclide_name in self._nuclides: - self._nuclides[nuclide_name][0].scattering = 'iso-in-lab' - for element_name in self._elements: - self._elements[element_name][0].scattering = 'iso-in-lab' + for nuclide, percent, percent_type in self._nuclides: + nuclide.scattering = 'iso-in-lab' + for element, percent, percent_type in self._elements: + element.scattering = 'iso-in-lab' def get_all_nuclides(self): """Returns all nuclides in the material @@ -506,15 +504,10 @@ class Material(object): nuclides = OrderedDict() - for nuclide_name, nuclide_tuple in self._nuclides.items(): - nuclide = nuclide_tuple[0] - density = nuclide_tuple[1] - nuclides[nuclide._name] = (nuclide, density) - - for element_name, element_tuple in self._elements.items(): - element = element_tuple[0] - density = element_tuple[1] + for nuclide, density, density_type in self._nuclides: + nuclides[nuclide.name] = (nuclide, density) + for element, density, density_type in self._elements: # Expand natural element into isotopes for isotope, abundance in element.expand(): nuclides[isotope.name] = (isotope, density*abundance) @@ -523,7 +516,7 @@ class Material(object): def _get_nuclide_xml(self, nuclide, distrib=False): xml_element = ET.Element("nuclide") - xml_element.set("name", nuclide[0]._name) + xml_element.set("name", nuclide[0].name) if not distrib: if nuclide[2] == 'ao': @@ -550,7 +543,7 @@ class Material(object): def _get_element_xml(self, element, distrib=False): xml_element = ET.Element("element") - xml_element.set("name", str(element[0]._name)) + xml_element.set("name", str(element[0].name)) if not distrib: if element[2] == 'ao': @@ -569,7 +562,7 @@ class Material(object): def _get_nuclides_xml(self, nuclides, distrib=False): xml_elements = [] - for nuclide in nuclides.values(): + for nuclide in nuclides: xml_elements.append(self._get_nuclide_xml(nuclide, distrib)) return xml_elements @@ -577,7 +570,7 @@ class Material(object): def _get_elements_xml(self, elements, distrib=False): xml_elements = [] - for element in elements.values(): + for element in elements: xml_elements.append(self._get_element_xml(element, distrib)) return xml_elements @@ -625,7 +618,7 @@ class Material(object): subelement = ET.SubElement(element, "compositions") comps = [] - allnucs = self._nuclides.values() + self._elements.values() + allnucs = self._nuclides + self._elements dist_per_type = allnucs[0][2] for nuc, per, typ in allnucs: if not typ == dist_per_type: @@ -820,4 +813,4 @@ class Materials(cv.CheckedList): # Write the XML Tree to the materials.xml file tree = ET.ElementTree(self._materials_file) tree.write("materials.xml", xml_declaration=True, - encoding='utf-8', method="xml") + encoding='utf-8', method="xml") From dffb9858e80f052bc4152b5d1602df9c9c5e06ea Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 8 Jun 2016 19:38:44 -0400 Subject: [PATCH 617/650] Fixed per @paulromano comments --- .../pythonapi/examples/mgxs-part-iv.ipynb | 172 +-- docs/source/usersguide/mgxs_library.rst | 4 +- openmc/mgxs/library.py | 42 +- src/mgxs_header.F90 | 14 +- src/scattdata_header.F90 | 20 +- tests/test_mg_basic/results_true.dat | 2 +- tests/test_mg_max_order/results_true.dat | 2 +- tests/test_mg_nuclide/results_true.dat | 2 +- tests/test_mg_tallies/results_true.dat | 1306 ++++++++--------- .../results_true.dat | 2 +- 10 files changed, 771 insertions(+), 795 deletions(-) diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb index 5459c3dfe4..e5c80c1926 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb @@ -432,7 +432,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -722,8 +722,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: b41ec2178cc78c6c5968b47ebf09d926cdc44d00\n", - " Date/Time: 2016-06-07 19:46:24\n", + " Git SHA1: 826d5a43d85eaec1b6c7b4ce22e1a8f5e9336a4f\n", + " Date/Time: 2016-06-08 19:33:38\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -810,20 +810,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 1.4790E+00 seconds\n", - " Reading cross sections = 1.1810E+00 seconds\n", - " Total time in simulation = 1.7439E+01 seconds\n", - " Time in transport only = 1.7334E+01 seconds\n", - " Time in inactive batches = 2.1960E+00 seconds\n", - " Time in active batches = 1.5243E+01 seconds\n", - " Time synchronizing fission bank = 6.0000E-03 seconds\n", - " Sampling source sites = 5.0000E-03 seconds\n", + " Total time for initialization = 1.4220E+00 seconds\n", + " Reading cross sections = 1.1320E+00 seconds\n", + " Total time in simulation = 1.6571E+01 seconds\n", + " Time in transport only = 1.6501E+01 seconds\n", + " Time in inactive batches = 2.1010E+00 seconds\n", + " Time in active batches = 1.4470E+01 seconds\n", + " Time synchronizing fission bank = 5.0000E-03 seconds\n", + " Sampling source sites = 4.0000E-03 seconds\n", " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.8926E+01 seconds\n", - " Calculation Rate (inactive) = 22768.7 neutrons/second\n", - " Calculation Rate (active) = 13120.8 neutrons/second\n", + " Total time elapsed = 1.8002E+01 seconds\n", + " Calculation Rate (inactive) = 23798.2 neutrons/second\n", + " Calculation Rate (active) = 13821.7 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1098,8 +1098,8 @@ " Copyright: 2011-2016 Massachusetts Institute of Technology\n", " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: b41ec2178cc78c6c5968b47ebf09d926cdc44d00\n", - " Date/Time: 2016-06-07 19:46:43\n", + " Git SHA1: 826d5a43d85eaec1b6c7b4ce22e1a8f5e9336a4f\n", + " Date/Time: 2016-06-08 19:33:56\n", " OpenMP Threads: 4\n", "\n", " ===========================================================================\n", @@ -1124,56 +1124,56 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 1.02438 \n", - " 2/1 1.04495 \n", - " 3/1 1.03438 \n", - " 4/1 0.99945 \n", - " 5/1 1.00818 \n", - " 6/1 1.00174 \n", - " 7/1 1.03430 \n", - " 8/1 1.02233 \n", - " 9/1 1.01200 \n", - " 10/1 1.02727 \n", - " 11/1 1.04051 \n", - " 12/1 1.02665 1.03358 +/- 0.00693\n", - " 13/1 1.01925 1.02880 +/- 0.00623\n", - " 14/1 1.03520 1.03040 +/- 0.00469\n", - " 15/1 1.03185 1.03069 +/- 0.00364\n", - " 16/1 1.03729 1.03179 +/- 0.00317\n", - " 17/1 1.00718 1.02827 +/- 0.00442\n", - " 18/1 1.00733 1.02566 +/- 0.00464\n", - " 19/1 1.02123 1.02516 +/- 0.00412\n", - " 20/1 1.01673 1.02432 +/- 0.00378\n", - " 21/1 1.03445 1.02524 +/- 0.00354\n", - " 22/1 1.03063 1.02569 +/- 0.00326\n", - " 23/1 1.00806 1.02433 +/- 0.00329\n", - " 24/1 1.03707 1.02524 +/- 0.00318\n", - " 25/1 1.01907 1.02483 +/- 0.00299\n", - " 26/1 1.01970 1.02451 +/- 0.00282\n", - " 27/1 1.00208 1.02319 +/- 0.00296\n", - " 28/1 1.02836 1.02348 +/- 0.00280\n", - " 29/1 1.02679 1.02365 +/- 0.00266\n", - " 30/1 1.03997 1.02447 +/- 0.00265\n", - " 31/1 0.99825 1.02322 +/- 0.00281\n", - " 32/1 1.01865 1.02301 +/- 0.00269\n", - " 33/1 1.00846 1.02238 +/- 0.00265\n", - " 34/1 1.01864 1.02222 +/- 0.00254\n", - " 35/1 1.02137 1.02219 +/- 0.00243\n", - " 36/1 1.02781 1.02241 +/- 0.00235\n", - " 37/1 1.02395 1.02246 +/- 0.00226\n", - " 38/1 1.00883 1.02198 +/- 0.00223\n", - " 39/1 0.99776 1.02114 +/- 0.00231\n", - " 40/1 1.01546 1.02095 +/- 0.00224\n", - " 41/1 1.04425 1.02170 +/- 0.00229\n", - " 42/1 1.02481 1.02180 +/- 0.00222\n", - " 43/1 1.00925 1.02142 +/- 0.00219\n", - " 44/1 1.04389 1.02208 +/- 0.00222\n", - " 45/1 1.04451 1.02272 +/- 0.00225\n", - " 46/1 1.02519 1.02279 +/- 0.00219\n", - " 47/1 1.03656 1.02316 +/- 0.00216\n", - " 48/1 1.04310 1.02369 +/- 0.00217\n", - " 49/1 1.03258 1.02392 +/- 0.00212\n", - " 50/1 1.01093 1.02359 +/- 0.00210\n", + " 1/1 0.99367 \n", + " 2/1 1.03173 \n", + " 3/1 1.01999 \n", + " 4/1 1.01421 \n", + " 5/1 1.03980 \n", + " 6/1 1.04540 \n", + " 7/1 1.04199 \n", + " 8/1 1.02680 \n", + " 9/1 1.01267 \n", + " 10/1 1.03420 \n", + " 11/1 1.05773 \n", + " 12/1 1.03475 1.04624 +/- 0.01149\n", + " 13/1 1.03632 1.04293 +/- 0.00741\n", + " 14/1 0.99297 1.03044 +/- 0.01355\n", + " 15/1 1.02413 1.02918 +/- 0.01057\n", + " 16/1 1.02359 1.02825 +/- 0.00868\n", + " 17/1 0.99913 1.02409 +/- 0.00843\n", + " 18/1 1.01493 1.02294 +/- 0.00739\n", + " 19/1 1.03010 1.02374 +/- 0.00657\n", + " 20/1 1.04890 1.02626 +/- 0.00639\n", + " 21/1 1.01267 1.02502 +/- 0.00591\n", + " 22/1 1.02637 1.02513 +/- 0.00540\n", + " 23/1 1.01374 1.02426 +/- 0.00504\n", + " 24/1 1.06661 1.02728 +/- 0.00556\n", + " 25/1 1.03212 1.02760 +/- 0.00519\n", + " 26/1 1.05433 1.02927 +/- 0.00513\n", + " 27/1 0.99891 1.02749 +/- 0.00514\n", + " 28/1 1.00616 1.02630 +/- 0.00499\n", + " 29/1 1.04583 1.02733 +/- 0.00483\n", + " 30/1 1.01512 1.02672 +/- 0.00462\n", + " 31/1 0.98104 1.02455 +/- 0.00491\n", + " 32/1 1.04202 1.02534 +/- 0.00474\n", + " 33/1 1.00779 1.02458 +/- 0.00460\n", + " 34/1 1.02450 1.02457 +/- 0.00440\n", + " 35/1 0.98882 1.02314 +/- 0.00446\n", + " 36/1 1.01541 1.02285 +/- 0.00429\n", + " 37/1 1.02050 1.02276 +/- 0.00413\n", + " 38/1 1.03573 1.02322 +/- 0.00401\n", + " 39/1 1.03649 1.02368 +/- 0.00389\n", + " 40/1 1.01434 1.02337 +/- 0.00378\n", + " 41/1 1.02345 1.02337 +/- 0.00365\n", + " 42/1 1.01900 1.02323 +/- 0.00354\n", + " 43/1 1.01450 1.02297 +/- 0.00344\n", + " 44/1 1.03127 1.02321 +/- 0.00335\n", + " 45/1 1.01598 1.02301 +/- 0.00326\n", + " 46/1 1.00851 1.02260 +/- 0.00319\n", + " 47/1 1.03406 1.02291 +/- 0.00312\n", + " 48/1 1.02373 1.02294 +/- 0.00303\n", + " 49/1 1.04066 1.02339 +/- 0.00299\n", + " 50/1 1.02011 1.02331 +/- 0.00292\n", " Creating state point statepoint.50.h5...\n", "\n", " ===========================================================================\n", @@ -1183,27 +1183,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.7000E-02 seconds\n", + " Total time for initialization = 3.1000E-02 seconds\n", " Reading cross sections = 5.0000E-03 seconds\n", - " Total time in simulation = 1.1738E+01 seconds\n", - " Time in transport only = 1.1701E+01 seconds\n", - " Time in inactive batches = 1.3240E+00 seconds\n", - " Time in active batches = 1.0414E+01 seconds\n", - " Time synchronizing fission bank = 8.0000E-03 seconds\n", - " Sampling source sites = 5.0000E-03 seconds\n", - " SEND/RECV source sites = 3.0000E-03 seconds\n", + " Total time in simulation = 1.1867E+01 seconds\n", + " Time in transport only = 1.1830E+01 seconds\n", + " Time in inactive batches = 1.2670E+00 seconds\n", + " Time in active batches = 1.0600E+01 seconds\n", + " Time synchronizing fission bank = 7.0000E-03 seconds\n", + " Sampling source sites = 7.0000E-03 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.1785E+01 seconds\n", - " Calculation Rate (inactive) = 37764.4 neutrons/second\n", - " Calculation Rate (active) = 19204.9 neutrons/second\n", + " Total time elapsed = 1.1907E+01 seconds\n", + " Calculation Rate (inactive) = 39463.3 neutrons/second\n", + " Calculation Rate (active) = 18867.9 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.02444 +/- 0.00180\n", - " k-effective (Track-length) = 1.02359 +/- 0.00210\n", - " k-effective (Absorption) = 1.02530 +/- 0.00175\n", - " Combined k-effective = 1.02471 +/- 0.00130\n", + " k-effective (Collision) = 1.02638 +/- 0.00260\n", + " k-effective (Track-length) = 1.02331 +/- 0.00292\n", + " k-effective (Absorption) = 1.02579 +/- 0.00132\n", + " Combined k-effective = 1.02558 +/- 0.00136\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -1285,8 +1285,8 @@ "output_type": "stream", "text": [ "Continuous-Energy keff = 1.024295\n", - "Multi-Group keff = 1.024707\n", - "bias [pcm]: -41.2\n" + "Multi-Group keff = 1.025577\n", + "bias [pcm]: -128.2\n" ] } ], @@ -1383,7 +1383,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 40, @@ -1392,9 +1392,9 @@ }, { "data": { - "image/png": "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\nD7ZNrAVaR8hwAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/usersguide/mgxs_library.rst b/docs/source/usersguide/mgxs_library.rst index daf99d481b..32e4c550cc 100644 --- a/docs/source/usersguide/mgxs_library.rst +++ b/docs/source/usersguide/mgxs_library.rst @@ -171,7 +171,9 @@ attributes/sub-elements required to describe the meta-data: provided via the ``scatt_type`` element above, is represented and thus used during the scattering process. Specifically, the options are to either convert the Legendre expansion to a tabular representation or leave it as - a set of Legendre coefficients. Converting to a tabular representation will cost memory but can allow for a decrease in runtime compared to leaving as a set of Legendre coefficients. This element has the following + a set of Legendre coefficients. Converting to a tabular representation + will cost memory but can allow for a decrease in runtime compared to + leaving as a set of Legendre coefficients. This element has the following attributes/sub-elements: :enable: diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 886eebf45f..9241892646 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -778,18 +778,18 @@ class Library(object): Scattering order for this data entry. Default is None, which will set the XSdata object to use the order of the Library. - tabular_legendre : {None, bool} + tabular_legendre : None or bool Flag to denote whether or not the Legendre expansion of the scattering angular distribution is to be converted to a tabular representation by OpenMC. A value of `True` means that it is to be - converted while a value of 'False' means that it will not be. + converted while a value of `False` means that it will not be. Defaults to `None` which leaves the default behavior of OpenMC in place (the distribution is converted to a tabular representation). - tabular_points : {int} - This parameter is not used unless the `tabular_legendre` is set to - `True`. In this case, this parameter sets the number of - equally-spaced points in the domain of [-1,1] to be used in - building the tabular distribution. Default is `33`. + tabular_points : int + This parameter is not used unless the ``tabular_legendre`` + parameter is set to `True`. In this case, this parameter sets the + number of equally-spaced points in the domain of [-1,1] to be used + in building the tabular distribution. Default is `33`. Returns ------- @@ -947,18 +947,18 @@ class Library(object): Cross section set identifier (i.e., '71c') for all data sets (if only str) or for each individual one (if iterable of str). Defaults to '1m'. - tabular_legendre : {None, bool} + tabular_legendre : None or bool Flag to denote whether or not the Legendre expansion of the scattering angular distribution is to be converted to a tabular representation by OpenMC. A value of `True` means that it is to be - converted while a value of 'False' means that it will not be. + converted while a value of `False` means that it will not be. Defaults to `None` which leaves the default behavior of OpenMC in place (the distribution is converted to a tabular representation). - tabular_points : {int} - This parameter is not used unless the `tabular_legendre` is set to - `True`. In this case, this parameter sets the number of - equally-spaced points in the domain of [-1,1] to be used in - building the tabular distribution. Default is `33`. + tabular_points : int + This parameter is not used unless the ``tabular_legendre`` + parameter is set to `True`. In this case, this parameter sets the + number of equally-spaced points in the domain of [-1,1] to be used + in building the tabular distribution. Default is `33`. Returns ------- @@ -1046,18 +1046,18 @@ class Library(object): Cross section set identifier (i.e., '71c') for all data sets (if only str) or for each individual one (if iterable of str). Defaults to '1m'. - tabular_legendre : {None, bool} + tabular_legendre : None or bool Flag to denote whether or not the Legendre expansion of the scattering angular distribution is to be converted to a tabular representation by OpenMC. A value of `True` means that it is to be - converted while a value of 'False' means that it will not be. + converted while a value of `False` means that it will not be. Defaults to `None` which leaves the default behavior of OpenMC in place (the distribution is converted to a tabular representation). - tabular_points : {int} - This parameter is not used unless the `tabular_legendre` is set to - `True`. In this case, this parameter sets the number of - equally-spaced points in the domain of [-1,1] to be used in - building the tabular distribution. Default is `33`. + tabular_points : int + This parameter is not used unless the ``tabular_legendre`` + parameter is set to `True`. In this case, this parameter sets the + number of equally-spaced points in the domain of [-1,1] to be used + in building the tabular distribution. Default is `33`. Returns ------- diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index 519da708c9..753f4e1498 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -277,7 +277,7 @@ module mgxs_header real(8), allocatable :: scatt_coeffs(:, :, :) real(8), allocatable :: input_scatt(:, :, :) real(8), allocatable :: temp_scatt(:, :, :) - real(8) :: dmu, mu, norm, p0, m, mu0 + real(8) :: dmu, mu, norm integer :: order, order_dim, gin, gout, l, arr_len integer :: legendre_mu_points, imu @@ -498,18 +498,6 @@ module mgxs_header (scatt_coeffs(imu - 1, gout, gin) + & scatt_coeffs(imu, gout, gin)) end if - ! Now create CDF from fmu with the analytical integral of a - ! piecewise linear function - if (imu > 1) then - p0 = scatt_coeffs(imu - 1, gout, gin) - mu0 = mu - dmu - m = (scatt_coeffs(imu, gout, gin) - & - scatt_coeffs(imu - 1, gout, gin)) / dmu - norm = norm + & - HALF * m * mu * mu + & - (p0 - m * mu0) * mu + & - (HALF * m * mu0 * mu0 - p0 * mu0) - end if end do ! Now that we have the integral, lets ensure that the distribution ! is normalized such that it preserves the original scattering xs diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index 6fca891906..ee101d63ba 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -398,32 +398,18 @@ contains end do ! Re-normalize fmu for numerical integration issues and in case - ! the negative fix-up introduced un-normalized data + ! the negative fix-up introduced un-normalized data while + ! accruing the CDF norm = ZERO do imu = 2, order norm = norm + HALF * this % dmu * & (this % fmu(gin) % data(imu - 1, gout) + & this % fmu(gin) % data(imu, gout)) + this % dist(gin) % data(imu, gout) = norm end do if (norm > ZERO) then this % fmu(gin) % data(:, gout) = & this % fmu(gin) % data(:, gout) / norm - end if - - ! Now create CDF from fmu with the analytical integral - this % dist(gin) % data(1, gout) = ZERO - do imu = 2, order - p0 = this % fmu(gin) % data(imu - 1, gout) - mu0 = this % mu(imu - 1) - mu1 = this % mu(imu) - m = (this % fmu(gin) % data(imu, gout) - p0) / (mu1 - mu0) - this % dist(gin) % data(imu, gout) = HALF * m * mu1 * mu1 + & - (p0 - m * mu0) * mu1 + & - (HALF * m * mu0 * mu0 - p0 * mu0) - end do - ! Ensure we normalize to 1 still - norm = this % dist(gin) % data(order, gout) - if (norm > ZERO) then this % dist(gin) % data(:, gout) = & this % dist(gin) % data(:, gout) / norm end if diff --git a/tests/test_mg_basic/results_true.dat b/tests/test_mg_basic/results_true.dat index 1c58db0d77..7cdda73b5d 100644 --- a/tests/test_mg_basic/results_true.dat +++ b/tests/test_mg_basic/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.003952E+00 4.160185E-02 +1.047136E+00 2.765964E-02 diff --git a/tests/test_mg_max_order/results_true.dat b/tests/test_mg_max_order/results_true.dat index 3b9625201b..4db04e0897 100644 --- a/tests/test_mg_max_order/results_true.dat +++ b/tests/test_mg_max_order/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.026398E+00 7.824554E-02 +1.102093E+00 4.962190E-02 diff --git a/tests/test_mg_nuclide/results_true.dat b/tests/test_mg_nuclide/results_true.dat index 1c58db0d77..7cdda73b5d 100644 --- a/tests/test_mg_nuclide/results_true.dat +++ b/tests/test_mg_nuclide/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.003952E+00 4.160185E-02 +1.047136E+00 2.765964E-02 diff --git a/tests/test_mg_tallies/results_true.dat b/tests/test_mg_tallies/results_true.dat index 94ec79286d..4a654639af 100644 --- a/tests/test_mg_tallies/results_true.dat +++ b/tests/test_mg_tallies/results_true.dat @@ -1,86 +1,86 @@ k-combined: -1.003952E+00 4.160185E-02 +1.047136E+00 2.765964E-02 tally 1: -3.027550E+00 -2.152400E+00 -8.573015E-02 -1.716238E-03 -4.377236E+00 -4.480918E+00 -3.577293E-02 -2.996921E-04 -8.868872E-02 -1.842057E-03 -3.189586E+00 -2.165036E+00 -9.625303E-02 -1.898094E-03 -4.691910E+00 -4.579570E+00 -4.156421E-02 -3.532611E-04 -1.030465E-01 -2.171318E-03 -2.987648E+00 -1.869303E+00 -9.105156E-02 -1.775628E-03 -4.522682E+00 -4.342733E+00 -3.968997E-02 -3.424105E-04 -9.839988E-02 -2.104625E-03 -3.225648E+00 -2.102269E+00 -8.764034E-02 -1.567260E-03 -4.629948E+00 -4.315388E+00 -3.574267E-02 -2.684687E-04 -8.861368E-02 -1.650142E-03 -3.394894E+00 -2.332105E+00 -8.432398E-02 -1.485500E-03 -4.659277E+00 -4.398368E+00 -3.230884E-02 -2.317511E-04 -8.010050E-02 -1.424457E-03 -3.013158E+00 -2.009646E+00 -7.490989E-02 -1.178333E-03 -4.123109E+00 -3.682531E+00 -2.869447E-02 -1.710786E-04 -7.113970E-02 -1.051534E-03 -3.157181E+00 -2.100927E+00 -8.531655E-02 -1.520341E-03 -4.523209E+00 -4.302173E+00 -3.468239E-02 -2.516726E-04 -8.598504E-02 -1.546905E-03 -2.922890E+00 -1.788820E+00 -8.708247E-02 -1.621130E-03 -4.305352E+00 -3.866481E+00 -3.740038E-02 -3.097101E-04 -9.272351E-02 -1.903632E-03 +2.490837E+00 +1.335515E+00 +8.299408E-02 +1.628477E-03 +3.917892E+00 +3.395475E+00 +3.777816E-02 +3.574150E-04 +9.366009E-02 +2.196850E-03 +2.410307E+00 +1.211320E+00 +7.104710E-02 +1.056830E-03 +3.619111E+00 +2.712466E+00 +3.046789E-02 +2.019483E-04 +7.553639E-02 +1.241275E-03 +2.616860E+00 +1.407243E+00 +7.221083E-02 +1.059301E-03 +3.719840E+00 +2.827103E+00 +2.963219E-02 +1.775955E-04 +7.346451E-02 +1.091590E-03 +2.383417E+00 +1.171863E+00 +6.968054E-02 +9.924374E-04 +3.486989E+00 +2.493855E+00 +2.962148E-02 +1.817051E-04 +7.343795E-02 +1.116850E-03 +2.177844E+00 +9.998272E-01 +6.808817E-02 +9.543925E-04 +3.302614E+00 +2.268097E+00 +3.001326E-02 +1.847730E-04 +7.440926E-02 +1.135706E-03 +2.585363E+00 +1.416531E+00 +7.208386E-02 +1.068367E-03 +3.721777E+00 +2.868016E+00 +2.981132E-02 +1.871051E-04 +7.390860E-02 +1.150041E-03 +2.740199E+00 +1.663131E+00 +8.719535E-02 +1.596752E-03 +4.146740E+00 +3.682203E+00 +3.870935E-02 +3.136109E-04 +9.596871E-02 +1.927608E-03 +2.212799E+00 +1.000035E+00 +7.449165E-02 +1.135538E-03 +3.466616E+00 +2.419923E+00 +3.399202E-02 +2.463541E-04 +8.427346E-02 +1.514215E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -171,86 +171,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.136746E+00 -2.097844E+00 -9.001259E-02 -1.679379E-03 -4.662194E+00 -4.592725E+00 -3.801404E-02 -2.981421E-04 -9.424490E-02 -1.832530E-03 -3.106448E+00 -2.078391E+00 -9.012356E-02 -1.762294E-03 -4.513037E+00 -4.378913E+00 -3.813004E-02 -3.167893E-04 -9.453248E-02 -1.947145E-03 -2.830121E+00 -1.799064E+00 -8.110239E-02 -1.428875E-03 -4.186480E+00 -3.869678E+00 -3.421633E-02 -2.502127E-04 -8.482957E-02 -1.537931E-03 -3.117676E+00 -1.961910E+00 -8.682325E-02 -1.551480E-03 -4.541798E+00 -4.177594E+00 -3.598671E-02 -2.719848E-04 -8.921872E-02 -1.671754E-03 -2.860792E+00 -1.699774E+00 -7.734553E-02 -1.212035E-03 -4.045685E+00 -3.352230E+00 -3.136656E-02 -2.020318E-04 -7.776439E-02 -1.241788E-03 -2.807124E+00 -1.635117E+00 -8.312523E-02 -1.403341E-03 -4.138428E+00 -3.503069E+00 -3.560217E-02 -2.611276E-04 -8.826537E-02 -1.605020E-03 -2.924592E+00 -1.733173E+00 -8.343992E-02 -1.403493E-03 -4.345943E+00 -3.817213E+00 -3.513702E-02 -2.517119E-04 -8.711216E-02 -1.547146E-03 -2.646486E+00 -1.418290E+00 -7.950085E-02 -1.309718E-03 -3.966626E+00 -3.215631E+00 -3.437595E-02 -2.503895E-04 -8.522531E-02 -1.539019E-03 +2.099094E+00 +8.919271E-01 +7.540489E-02 +1.194829E-03 +3.366752E+00 +2.321133E+00 +3.536709E-02 +2.711517E-04 +8.768256E-02 +1.666633E-03 +2.413065E+00 +1.186499E+00 +7.505466E-02 +1.154624E-03 +3.609948E+00 +2.664048E+00 +3.294274E-02 +2.242161E-04 +8.167207E-02 +1.378144E-03 +2.536174E+00 +1.301621E+00 +7.790327E-02 +1.242427E-03 +3.836384E+00 +2.980367E+00 +3.409705E-02 +2.443384E-04 +8.453386E-02 +1.501825E-03 +2.666159E+00 +1.492268E+00 +7.417343E-02 +1.141120E-03 +3.912196E+00 +3.186439E+00 +3.075257E-02 +1.953163E-04 +7.624217E-02 +1.200511E-03 +2.459342E+00 +1.286534E+00 +6.409323E-02 +8.519553E-04 +3.511461E+00 +2.568245E+00 +2.550853E-02 +1.387171E-04 +6.324108E-02 +8.526242E-04 +3.227353E+00 +2.189454E+00 +8.161989E-02 +1.366996E-03 +4.465292E+00 +4.143037E+00 +3.169508E-02 +2.069605E-04 +7.857885E-02 +1.272082E-03 +3.006650E+00 +1.972749E+00 +8.846181E-02 +1.643195E-03 +4.449165E+00 +4.222523E+00 +3.779771E-02 +2.999515E-04 +9.370858E-02 +1.843651E-03 +2.591189E+00 +1.530310E+00 +7.305643E-02 +1.114250E-03 +3.732882E+00 +3.031120E+00 +3.039294E-02 +1.919600E-04 +7.535057E-02 +1.179882E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -341,86 +341,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.421827E+00 -2.488458E+00 -9.626948E-02 -2.065197E-03 -5.040929E+00 -5.451459E+00 -4.018656E-02 -3.779606E-04 -9.963105E-02 -2.323134E-03 -2.869547E+00 -1.698223E+00 -8.662967E-02 -1.551328E-03 -4.227759E+00 -3.702584E+00 -3.740987E-02 -2.903037E-04 -9.274703E-02 -1.784351E-03 -2.588566E+00 -1.357415E+00 -7.706802E-02 -1.216264E-03 -3.821156E+00 -2.967091E+00 -3.309228E-02 -2.275536E-04 -8.204281E-02 -1.398658E-03 -2.777772E+00 -1.584289E+00 -8.469785E-02 -1.456208E-03 -4.195353E+00 -3.574265E+00 -3.693140E-02 -2.790926E-04 -9.156081E-02 -1.715441E-03 -3.118197E+00 -1.989138E+00 -9.265883E-02 -1.753400E-03 -4.574869E+00 -4.260081E+00 -3.969940E-02 -3.241960E-04 -9.842328E-02 -1.992670E-03 -2.591904E+00 -1.370188E+00 -8.148726E-02 -1.342503E-03 -3.988752E+00 -3.228928E+00 -3.608041E-02 -2.655091E-04 -8.945102E-02 -1.631951E-03 -3.123916E+00 -1.985559E+00 -9.297564E-02 -1.754830E-03 -4.650584E+00 -4.387677E+00 -3.995654E-02 -3.270558E-04 -9.906077E-02 -2.010247E-03 -2.507814E+00 -1.313596E+00 -7.534295E-02 -1.160881E-03 -3.761249E+00 -2.915759E+00 -3.258970E-02 -2.199767E-04 -8.079681E-02 -1.352086E-03 +2.667561E+00 +1.528159E+00 +6.981409E-02 +1.036744E-03 +3.696781E+00 +2.912439E+00 +2.768232E-02 +1.628195E-04 +6.863038E-02 +1.000769E-03 +2.579691E+00 +1.399684E+00 +7.252523E-02 +1.085979E-03 +3.762646E+00 +2.966415E+00 +3.021298E-02 +1.872587E-04 +7.490441E-02 +1.150985E-03 +2.326398E+00 +1.111745E+00 +6.380790E-02 +8.422824E-04 +3.373074E+00 +2.338678E+00 +2.619114E-02 +1.463613E-04 +6.493342E-02 +8.996094E-04 +2.689651E+00 +1.483190E+00 +8.007622E-02 +1.328579E-03 +4.015410E+00 +3.294872E+00 +3.443210E-02 +2.525628E-04 +8.536450E-02 +1.552377E-03 +2.712538E+00 +1.496273E+00 +7.040893E-02 +1.033599E-03 +3.801423E+00 +2.967673E+00 +2.785218E-02 +1.687241E-04 +6.905150E-02 +1.037062E-03 +3.101358E+00 +2.022582E+00 +8.316566E-02 +1.469875E-03 +4.433641E+00 +4.167950E+00 +3.363316E-02 +2.428472E-04 +8.338377E-02 +1.492660E-03 +2.669269E+00 +1.482479E+00 +7.250461E-02 +1.097959E-03 +3.815372E+00 +3.039000E+00 +2.952621E-02 +1.837209E-04 +7.320176E-02 +1.129240E-03 +2.719836E+00 +1.670890E+00 +8.176774E-02 +1.472662E-03 +4.030045E+00 +3.607044E+00 +3.530219E-02 +2.721266E-04 +8.752165E-02 +1.672625E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -511,86 +511,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.072424E+00 -1.910502E+00 -8.487675E-02 -1.467547E-03 -4.502748E+00 -4.073633E+00 -3.505649E-02 -2.616264E-04 -8.691250E-02 -1.608086E-03 -3.358497E+00 -2.340508E+00 -9.563725E-02 -1.882737E-03 -4.919309E+00 -4.997057E+00 -4.012501E-02 -3.331881E-04 -9.947844E-02 -2.047940E-03 -2.841595E+00 -1.676656E+00 -8.961778E-02 -1.706734E-03 -4.382947E+00 -3.971256E+00 -3.977482E-02 -3.476057E-04 -9.861025E-02 -2.136557E-03 -3.031993E+00 -1.887195E+00 -1.005232E-01 -2.088650E-03 -4.706199E+00 -4.537534E+00 -4.558466E-02 -4.340386E-04 -1.130141E-01 -2.667817E-03 -3.116522E+00 -2.011384E+00 -9.595523E-02 -1.977738E-03 -4.627314E+00 -4.456240E+00 -4.188172E-02 -3.906963E-04 -1.038337E-01 -2.401414E-03 -2.906411E+00 -1.724257E+00 -9.583879E-02 -1.902835E-03 -4.514939E+00 -4.188183E+00 -4.337455E-02 -3.935555E-04 -1.075347E-01 -2.418988E-03 -2.723724E+00 -1.514959E+00 -8.518353E-02 -1.512432E-03 -4.173364E+00 -3.561677E+00 -3.761270E-02 -3.039338E-04 -9.324988E-02 -1.868128E-03 -2.336622E+00 -1.158899E+00 -8.017647E-02 -1.335514E-03 -3.700707E+00 -2.838852E+00 -3.695886E-02 -2.855605E-04 -9.162889E-02 -1.755197E-03 +2.643152E+00 +1.461242E+00 +7.777503E-02 +1.277892E-03 +3.881716E+00 +3.158579E+00 +3.318888E-02 +2.353505E-04 +8.228231E-02 +1.446581E-03 +2.707136E+00 +1.528526E+00 +7.153411E-02 +1.046460E-03 +3.793295E+00 +2.976791E+00 +2.857458E-02 +1.671752E-04 +7.084247E-02 +1.027542E-03 +2.745209E+00 +1.561299E+00 +7.557988E-02 +1.164281E-03 +3.914803E+00 +3.154166E+00 +3.099509E-02 +1.948889E-04 +7.684344E-02 +1.197884E-03 +3.141608E+00 +2.000672E+00 +8.238823E-02 +1.366316E-03 +4.442048E+00 +3.976219E+00 +3.282615E-02 +2.177028E-04 +8.138301E-02 +1.338110E-03 +3.078971E+00 +1.928690E+00 +8.927133E-02 +1.655293E-03 +4.508330E+00 +4.154031E+00 +3.778191E-02 +3.038622E-04 +9.366939E-02 +1.867688E-03 +3.342682E+00 +2.353374E+00 +9.542381E-02 +1.892530E-03 +4.916807E+00 +5.068483E+00 +4.010858E-02 +3.330650E-04 +9.943770E-02 +2.047183E-03 +2.906350E+00 +1.760817E+00 +8.559496E-02 +1.527401E-03 +4.338708E+00 +3.888336E+00 +3.663301E-02 +2.834528E-04 +9.082102E-02 +1.742242E-03 +2.201534E+00 +1.026489E+00 +7.361463E-02 +1.156634E-03 +3.444005E+00 +2.510736E+00 +3.352726E-02 +2.491193E-04 +8.312121E-02 +1.531211E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -681,86 +681,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.107110E+00 -2.031843E+00 -8.851130E-02 -1.622664E-03 -4.517810E+00 -4.254353E+00 -3.710637E-02 -2.854685E-04 -9.199458E-02 -1.754631E-03 -3.274545E+00 -2.233343E+00 -1.058426E-01 -2.344479E-03 -4.973131E+00 -5.160486E+00 -4.734962E-02 -4.741951E-04 -1.173898E-01 -2.914639E-03 -2.636225E+00 -1.433972E+00 -7.975913E-02 -1.339963E-03 -3.942728E+00 -3.209671E+00 -3.458062E-02 -2.576972E-04 -8.573273E-02 -1.583935E-03 -2.850580E+00 -1.753714E+00 -8.409223E-02 -1.504889E-03 -4.292353E+00 -3.910272E+00 -3.606743E-02 -2.785145E-04 -8.941884E-02 -1.711888E-03 -3.177076E+00 -2.046322E+00 -9.290111E-02 -1.805479E-03 -4.671510E+00 -4.473692E+00 -3.953032E-02 -3.362191E-04 -9.800407E-02 -2.066570E-03 -2.792020E+00 -1.590839E+00 -8.956724E-02 -1.645807E-03 -4.270468E+00 -3.718893E+00 -3.995877E-02 -3.306439E-04 -9.906631E-02 -2.032302E-03 -2.319545E+00 -1.130506E+00 -7.787530E-02 -1.284059E-03 -3.631235E+00 -2.757748E+00 -3.552455E-02 -2.689956E-04 -8.807293E-02 -1.653381E-03 -2.338383E+00 -1.206709E+00 -7.569363E-02 -1.234797E-03 -3.576288E+00 -2.757162E+00 -3.391726E-02 -2.462226E-04 -8.408811E-02 -1.513407E-03 +2.379478E+00 +1.220072E+00 +7.149541E-02 +1.036720E-03 +3.597267E+00 +2.694760E+00 +3.098378E-02 +1.953397E-04 +7.681538E-02 +1.200655E-03 +3.155079E+00 +2.066218E+00 +9.171950E-02 +1.711836E-03 +4.700403E+00 +4.503318E+00 +3.904100E-02 +3.167906E-04 +9.679096E-02 +1.947152E-03 +2.737388E+00 +1.515779E+00 +7.304714E-02 +1.077128E-03 +3.854064E+00 +2.996781E+00 +2.937470E-02 +1.746013E-04 +7.282614E-02 +1.073187E-03 +3.294568E+00 +2.201280E+00 +8.370459E-02 +1.449531E-03 +4.567777E+00 +4.247816E+00 +3.258414E-02 +2.266289E-04 +8.078302E-02 +1.392974E-03 +3.040055E+00 +1.908677E+00 +8.543146E-02 +1.469528E-03 +4.395363E+00 +3.943052E+00 +3.551022E-02 +2.539139E-04 +8.803740E-02 +1.560681E-03 +2.733720E+00 +1.608810E+00 +7.575232E-02 +1.234497E-03 +3.955386E+00 +3.353987E+00 +3.126476E-02 +2.114507E-04 +7.751200E-02 +1.299681E-03 +2.633801E+00 +1.566751E+00 +7.851898E-02 +1.276803E-03 +3.867974E+00 +3.237952E+00 +3.370851E-02 +2.331450E-04 +8.357057E-02 +1.433025E-03 +2.649820E+00 +1.500516E+00 +6.849773E-02 +9.733415E-04 +3.744876E+00 +2.926356E+00 +2.706771E-02 +1.530408E-04 +6.710661E-02 +9.406650E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -851,86 +851,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.615843E+00 -1.511122E+00 -8.062716E-02 -1.419946E-03 -3.984393E+00 -3.462948E+00 -3.538715E-02 -2.775562E-04 -8.773227E-02 -1.705998E-03 -2.882570E+00 -1.761817E+00 -8.002023E-02 -1.361536E-03 -4.138232E+00 -3.590378E+00 -3.301403E-02 -2.428126E-04 -8.184882E-02 -1.492447E-03 -3.223528E+00 -2.083805E+00 -8.733159E-02 -1.544129E-03 -4.604746E+00 -4.254674E+00 -3.551662E-02 -2.594309E-04 -8.805326E-02 -1.594591E-03 -2.927536E+00 -1.741281E+00 -8.346281E-02 -1.434485E-03 -4.324501E+00 -3.806148E+00 -3.508574E-02 -2.599007E-04 -8.698503E-02 -1.597479E-03 -3.057707E+00 -1.944892E+00 -8.714384E-02 -1.580757E-03 -4.450690E+00 -4.103723E+00 -3.652244E-02 -2.807333E-04 -9.054690E-02 -1.725526E-03 -2.719115E+00 -1.510843E+00 -7.867244E-02 -1.258358E-03 -3.983708E+00 -3.239056E+00 -3.327673E-02 -2.253729E-04 -8.250009E-02 -1.385254E-03 -2.396119E+00 -1.153282E+00 -7.566785E-02 -1.182019E-03 -3.610641E+00 -2.634248E+00 -3.348337E-02 -2.377537E-04 -8.301240E-02 -1.461353E-03 -2.154802E+00 -1.067493E+00 -6.324323E-02 -8.945795E-04 -3.142780E+00 -2.238062E+00 -2.691333E-02 -1.628077E-04 -6.672387E-02 -1.000697E-03 +3.128432E+00 +2.123023E+00 +8.683081E-02 +1.593217E-03 +4.568791E+00 +4.439900E+00 +3.595477E-02 +2.733665E-04 +8.913952E-02 +1.680246E-03 +2.955891E+00 +1.796192E+00 +8.526700E-02 +1.464085E-03 +4.355866E+00 +3.839684E+00 +3.605221E-02 +2.663621E-04 +8.938111E-02 +1.637194E-03 +2.731962E+00 +1.617682E+00 +7.685258E-02 +1.239175E-03 +4.057901E+00 +3.505399E+00 +3.210546E-02 +2.150275E-04 +7.959627E-02 +1.321666E-03 +3.058734E+00 +1.911285E+00 +8.780153E-02 +1.572171E-03 +4.531361E+00 +4.177302E+00 +3.703146E-02 +2.828466E-04 +9.180888E-02 +1.738516E-03 +2.854688E+00 +1.652859E+00 +8.501906E-02 +1.459424E-03 +4.215336E+00 +3.600073E+00 +3.650039E-02 +2.691434E-04 +9.049224E-02 +1.654289E-03 +2.532385E+00 +1.341692E+00 +7.908024E-02 +1.289149E-03 +3.816608E+00 +3.020090E+00 +3.480705E-02 +2.494950E-04 +8.629409E-02 +1.533520E-03 +2.946914E+00 +1.857842E+00 +7.586572E-02 +1.217999E-03 +4.089763E+00 +3.522165E+00 +2.980738E-02 +1.901498E-04 +7.389883E-02 +1.168755E-03 +2.788908E+00 +1.667764E+00 +7.477958E-02 +1.148212E-03 +4.029335E+00 +3.403340E+00 +3.033277E-02 +1.914118E-04 +7.520139E-02 +1.176512E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1021,86 +1021,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.073244E+00 -2.018709E+00 -9.073696E-02 -1.753157E-03 -4.516776E+00 -4.329334E+00 -3.876727E-02 -3.208452E-04 -9.611233E-02 -1.972074E-03 -2.671039E+00 -1.446563E+00 -7.823234E-02 -1.250837E-03 -3.946269E+00 -3.138681E+00 -3.334746E-02 -2.319341E-04 -8.267545E-02 -1.425582E-03 -3.349978E+00 -2.319515E+00 -9.950325E-02 -2.061329E-03 -5.001138E+00 -5.168172E+00 -4.276928E-02 -3.828620E-04 -1.060342E-01 -2.353260E-03 -2.978936E+00 -1.799523E+00 -9.017252E-02 -1.638102E-03 -4.406186E+00 -3.924003E+00 -3.904232E-02 -3.071501E-04 -9.679424E-02 -1.887897E-03 -2.702401E+00 -1.471209E+00 -7.923417E-02 -1.296139E-03 -4.023502E+00 -3.272988E+00 -3.383397E-02 -2.416414E-04 -8.388161E-02 -1.485248E-03 -2.759858E+00 -1.531505E+00 -8.419492E-02 -1.488052E-03 -4.150314E+00 -3.494954E+00 -3.667250E-02 -2.957414E-04 -9.091893E-02 -1.817773E-03 -2.601272E+00 -1.380301E+00 -8.755772E-02 -1.625699E-03 -4.019486E+00 -3.299452E+00 -3.989786E-02 -3.528389E-04 -9.891530E-02 -2.168723E-03 -2.510230E+00 -1.275856E+00 -8.725714E-02 -1.601325E-03 -3.973851E+00 -3.204497E+00 -4.039490E-02 -3.543820E-04 -1.001476E-01 -2.178208E-03 +3.320603E+00 +2.324411E+00 +9.169756E-02 +1.769612E-03 +4.811447E+00 +4.885591E+00 +3.780490E-02 +3.050758E-04 +9.372640E-02 +1.875147E-03 +3.157638E+00 +2.088634E+00 +8.917486E-02 +1.627414E-03 +4.530493E+00 +4.262890E+00 +3.711278E-02 +2.791427E-04 +9.201048E-02 +1.715750E-03 +2.826797E+00 +1.654653E+00 +8.798649E-02 +1.562942E-03 +4.238099E+00 +3.671654E+00 +3.864939E-02 +3.007708E-04 +9.582007E-02 +1.848687E-03 +2.639291E+00 +1.470166E+00 +8.380168E-02 +1.469150E-03 +3.995402E+00 +3.337545E+00 +3.720130E-02 +2.907469E-04 +9.222996E-02 +1.787075E-03 +2.563883E+00 +1.375196E+00 +8.901196E-02 +1.610331E-03 +4.042903E+00 +3.361278E+00 +4.116155E-02 +3.428545E-04 +1.020482E-01 +2.107354E-03 +2.651467E+00 +1.472579E+00 +7.547436E-02 +1.201468E-03 +3.877983E+00 +3.154531E+00 +3.166886E-02 +2.150564E-04 +7.851384E-02 +1.321843E-03 +2.884789E+00 +1.801722E+00 +7.517555E-02 +1.168857E-03 +4.085136E+00 +3.522983E+00 +2.985774E-02 +1.859368E-04 +7.402368E-02 +1.142860E-03 +2.810664E+00 +1.609682E+00 +6.917229E-02 +9.875658E-04 +3.854296E+00 +3.029615E+00 +2.634304E-02 +1.483398E-04 +6.531000E-02 +9.117703E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1191,86 +1191,86 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.355419E+00 -1.227267E+00 -7.298104E-02 -1.204355E-03 -3.584952E+00 -2.839605E+00 -3.206831E-02 -2.384737E-04 -7.950416E-02 -1.465778E-03 -2.885415E+00 -1.707496E+00 -8.937354E-02 -1.638109E-03 -4.328343E+00 -3.842717E+00 -3.915662E-02 -3.169623E-04 -9.707761E-02 -1.948208E-03 -2.817788E+00 -1.659313E+00 -8.795245E-02 -1.652827E-03 -4.286382E+00 -3.831800E+00 -3.878123E-02 -3.288848E-04 -9.614692E-02 -2.021489E-03 -2.987432E+00 -1.822564E+00 -8.500598E-02 -1.500428E-03 -4.380470E+00 -3.921075E+00 -3.565649E-02 -2.685990E-04 -8.840004E-02 -1.650943E-03 -2.685515E+00 -1.443739E+00 -8.434998E-02 -1.460545E-03 -4.166156E+00 -3.492673E+00 -3.738938E-02 -2.956120E-04 -9.269624E-02 -1.816978E-03 -2.686749E+00 -1.496524E+00 -8.914589E-02 -1.663073E-03 -4.156201E+00 -3.578378E+00 -4.042946E-02 -3.475741E-04 -1.002332E-01 -2.136363E-03 -2.760305E+00 -1.579416E+00 -8.914803E-02 -1.630935E-03 -4.214440E+00 -3.628492E+00 -3.989038E-02 -3.331009E-04 -9.889676E-02 -2.047404E-03 -2.681752E+00 -1.472982E+00 -8.701435E-02 -1.526110E-03 -4.175631E+00 -3.518871E+00 -3.914441E-02 -3.118235E-04 -9.704732E-02 -1.916622E-03 +3.709821E+00 +2.847102E+00 +1.037249E-01 +2.264974E-03 +5.329369E+00 +5.878403E+00 +4.295875E-02 +3.964777E-04 +1.065039E-01 +2.436949E-03 +3.237824E+00 +2.159909E+00 +9.708289E-02 +1.898400E-03 +4.765807E+00 +4.617662E+00 +4.179332E-02 +3.503645E-04 +1.036145E-01 +2.153514E-03 +2.503072E+00 +1.321745E+00 +6.623202E-02 +9.120239E-04 +3.541728E+00 +2.623055E+00 +2.654018E-02 +1.469478E-04 +6.579875E-02 +9.032144E-04 +2.360183E+00 +1.196310E+00 +7.336179E-02 +1.123869E-03 +3.552179E+00 +2.637131E+00 +3.222538E-02 +2.218615E-04 +7.989359E-02 +1.363671E-03 +2.353136E+00 +1.260383E+00 +7.514099E-02 +1.159881E-03 +3.611322E+00 +2.808437E+00 +3.349306E-02 +2.280172E-04 +8.303643E-02 +1.401507E-03 +2.404559E+00 +1.241962E+00 +6.952417E-02 +1.036673E-03 +3.551485E+00 +2.687553E+00 +2.947110E-02 +1.929942E-04 +7.306514E-02 +1.186238E-03 +2.740499E+00 +1.588007E+00 +7.592011E-02 +1.232446E-03 +3.959573E+00 +3.327411E+00 +3.134446E-02 +2.121705E-04 +7.770960E-02 +1.304106E-03 +2.647586E+00 +1.416013E+00 +7.421099E-02 +1.112815E-03 +3.826931E+00 +2.947306E+00 +3.083732E-02 +1.923794E-04 +7.645229E-02 +1.182459E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2892,15 +2892,15 @@ tally 1: 0.000000E+00 0.000000E+00 tally 2: -4.417493E+01 -3.967273E+02 -4.418714E+01 -3.969466E+02 -7.878379E+00 -1.248770E+01 -7.878666E+00 -1.248861E+01 -1.271565E+02 -3.251279E+03 -1.271565E+02 -3.251279E+03 +3.995283E+01 +3.210141E+02 +3.996387E+01 +3.211916E+02 +6.783537E+00 +9.416330E+00 +6.783789E+00 +9.417032E+00 +1.239468E+02 +3.134204E+03 +1.239468E+02 +3.134204E+03 diff --git a/tests/test_mgxs_library_ce_to_mg/results_true.dat b/tests/test_mgxs_library_ce_to_mg/results_true.dat index c82da3bce2..6710c82be1 100644 --- a/tests/test_mgxs_library_ce_to_mg/results_true.dat +++ b/tests/test_mgxs_library_ce_to_mg/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.151644E+00 3.044607E-02 +1.140804E+00 2.937150E-02 From 14aaaa6bb8f556b9f6775ba92f2797bcbf5f2a72 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 8 Jun 2016 19:47:05 -0500 Subject: [PATCH 618/650] Make TRISO a special kind of openmc.Cell --- openmc/model/triso.py | 49 +++++++++++++++++-------------------------- 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/openmc/model/triso.py b/openmc/model/triso.py index 6f0d145b2f..89e0d8aa76 100644 --- a/openmc/model/triso.py +++ b/openmc/model/triso.py @@ -8,60 +8,49 @@ import numpy as np import openmc import openmc.checkvalue as cv -class TRISO(object): +class TRISO(openmc.Cell): """Tristructural-isotopic (TRISO) micro fuel particle Parameters ---------- - outer_radius : int + outer_radius : float Outer radius of TRISO particle - inner_univ : openmc.Universe + fill : openmc.Universe Universe which contains all layers of the TRISO particle center : Iterable of float Cartesian coordinates of the center of the TRISO particle in cm Attributes ---------- - cell : opemc.Cell - Cell which contains the TRISO universe + id : int + Unique identifier for the TRISO cell + name : str + Name of the TRISO cell center : numpy.ndarray Cartesian coordinates of the center of the TRISO particle in cm - outside : openmc.Region - Region of space outside of the TRISO particle - bounding_box : tuple of numpy.ndarray - Lower-left and upper-right coordinates of an axis-aligned bounding box - for the TRISO particle + fill : openmc.Universe + Universe that contains the TRISO layers + region : openmc.Region + Region of space within the TRISO particle """ - def __init__(self, outer_radius, inner_univ, center=(0., 0., 0.)): + def __init__(self, outer_radius, fill, center=(0., 0., 0.)): self._surface = openmc.Sphere(R=outer_radius) - self._cell = openmc.Cell(fill=inner_univ, region=-self._surface) + super(TRISO, self).__init__(fill=fill, region=-self._surface) self.center = np.asarray(center) - @property - def bounding_box(self): - return self.cell.region.bounding_box - - @property - def cell(self): - return self._cell - @property def center(self): return self._center - @property - def outside(self): - return +self._surface - @center.setter def center(self, center): cv.check_type('TRISO center', center, Iterable, Real) self._surface.x0 = center[0] self._surface.y0 = center[1] self._surface.z0 = center[2] - self.cell.translation = center + self.translation = center self._center = center def classify(self, lattice): @@ -80,7 +69,7 @@ class TRISO(object): """ - ll, ur = self.bounding_box + ll, ur = self.region.bounding_box if lattice.ndim == 2: (i_min, j_min), p = lattice.find_element(ll) (i_max, j_max), p = lattice.find_element(ur) @@ -129,8 +118,8 @@ def create_triso_lattice(trisos, lower_left, pitch, shape, background): # Create copy of TRISO particle with materials preserved and # different cell/surface IDs t_copy = copy.deepcopy(t) - t_copy.cell.id = None - t_copy.cell.fill = t.cell.fill + t_copy.id = None + t_copy.fill = t.fill t_copy._surface.id = None triso_locations[idx].append(t_copy) else: @@ -141,7 +130,7 @@ def create_triso_lattice(trisos, lower_left, pitch, shape, background): universes = np.empty(shape[::-1], dtype=openmc.Universe) for idx, triso_list in sorted(triso_locations.items()): if len(triso_list) > 0: - outside_trisos = openmc.Intersection(*[t.outside for t in triso_list]) + outside_trisos = openmc.Intersection(*[~t.region for t in triso_list]) background_cell = openmc.Cell(fill=background, region=outside_trisos) else: background_cell = openmc.Cell(fill=background) @@ -149,7 +138,7 @@ def create_triso_lattice(trisos, lower_left, pitch, shape, background): u = openmc.Universe() u.add_cell(background_cell) for t in triso_list: - u.add_cell(t.cell) + u.add_cell(t) iz, iy, ix = idx t.center = lattice.get_local_coordinates(t.center, (ix, iy, iz)) From 4706236837bc9040f2d451cabce35ab7bab229be Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Thu, 9 Jun 2016 09:29:31 -0500 Subject: [PATCH 619/650] Revert "Use ACE data over WMP data where possible" This reverts commit 5a9dc631357d5bdd7360b1bd22a1fe8f1576bd82. This commit created too many issues with incorrectly sampling reactions. --- src/multipole.F90 | 239 +++++++++++--------------- tests/test_multipole/results_true.dat | 2 +- 2 files changed, 106 insertions(+), 135 deletions(-) diff --git a/src/multipole.F90 b/src/multipole.F90 index 59c7fed695..caadab90f1 100644 --- a/src/multipole.F90 +++ b/src/multipole.F90 @@ -6,7 +6,6 @@ module multipole use hdf5_interface use multipole_header, only: MultipoleArray, FIT_T, FIT_A, FIT_F, & MP_FISS, FORM_MLBW, FORM_RM - use search, only: binary_search implicit none @@ -24,28 +23,25 @@ contains type(MultipoleArray), intent(out), target :: multipole ! The object to fill integer, intent(in) :: i_table ! index in nuclides/ ! sab_tables + integer(HID_T) :: file_id integer(HID_T) :: group_id + + ! Intermediate loading components + integer :: NMT + integer :: i, j + integer, allocatable :: MT(:) + logical :: accumulated_fission + character(len=24) :: MT_n ! Takes the form '/nuclide/reactions/MT???' integer :: is_fissionable - real(8) :: insert_pts(4) ! New points in the energy grid - integer :: cut1, cut2 ! Old indices just outside MP region - integer :: new_n_grid ! Number of points in new E grid - real(8), allocatable :: new_energy(:) ! New energy grid - real(8) :: f1, f2 ! Interpolation near cut1 & cut2 - real(8), allocatable :: new_xs(:) ! New cross sections - integer :: i - integer :: IE ! Reaction threshold associate (nuc => nuclides(i_table)) - !========================================================================= - ! Copy in data from the file. - - ! Open file for reading and move into the /isotope group. + ! Open file for reading and move into the /isotope group file_id = file_open(filename, 'r', parallel=.true.) group_id = open_group(file_id, "/nuclide") - ! Load in all the array size scalars. + ! Load in all the array size scalars call read_dataset(multipole % length, group_id, "length") call read_dataset(multipole % windows, group_id, "windows") call read_dataset(multipole % num_l, group_id, "num_l") @@ -64,10 +60,10 @@ contains call read_dataset(multipole % start_E, group_id, "start_E") call read_dataset(multipole % end_E, group_id, "end_E") - ! Allocate the multipole array components. + ! Allocate the multipole array components call multipole % allocate() - ! Read in arrays. + ! Read in arrays call read_dataset(multipole % data, group_id, "data") call read_dataset(multipole % pseudo_k0RS, group_id, "pseudo_K0RS") call read_dataset(multipole % l_value, group_id, "l_value") @@ -77,138 +73,113 @@ contains call read_dataset(multipole % curvefit, group_id, "curvefit") - ! Close the file. + ! Delete ACE pointwise data + call read_dataset(nuc % n_grid, group_id, "n_grid") + + deallocate(nuc % energy) + deallocate(nuc % total) + deallocate(nuc % elastic) + deallocate(nuc % fission) + deallocate(nuc % nu_fission) + deallocate(nuc % absorption) + + allocate(nuc % energy(nuc % n_grid)) + allocate(nuc % total(nuc % n_grid)) + allocate(nuc % elastic(nuc % n_grid)) + allocate(nuc % fission(nuc % n_grid)) + allocate(nuc % nu_fission(nuc % n_grid)) + allocate(nuc % absorption(nuc % n_grid)) + + nuc % total(:) = ZERO + nuc % absorption(:) = ZERO + nuc % fission(:) = ZERO + + ! Read in new energy axis (converting eV to MeV) + call read_dataset(nuc % energy, group_id, "energy_points") + nuc % energy = nuc % energy / 1.0e6_8 + + ! Get count and list of MT tables + call read_dataset(NMT, group_id, "MT_count") + allocate(MT(NMT)) + + call read_dataset(MT, group_id, "MT_list") + call close_group(group_id) - call file_close(file_id) - !========================================================================= - ! Remove the uneeded/inconsitent pointwise data. This step enforces the - ! assumption that no inelastic scattering reactions can occur in the - ! multipole region. The energy grid is replaced with one that removes all - ! energies covered by multiple and adds four new points. Two new points - ! mark the edges of the multipole region and cross sections will be - ! interpolated to these points. The other two points are used to zero the - ! cross sections inside the multipole region. + accumulated_fission = .false. - ! Define the four new inserted points. - insert_pts(:) = [multipole % start_E / 1e6_8, & - multipole % start_E / 1e6_8 + 1e-12_8, & - multipole % end_E / 1e6_8 - 1e-12_8, & - multipole % end_E / 1e6_8] + ! Loop over each MT entry and load it into a reaction. + do i = 1, NMT + write(MT_n, '(A, I3.3)') '/nuclide/reactions/MT', MT(i) - ! Find the points just outside the multipole region. - cut1 = binary_search(nuc % energy, nuc % n_grid, insert_pts(1)) - cut2 = binary_search(nuc % energy, nuc % n_grid, insert_pts(4)) + 1 - if (nuc % energy(cut1) == insert_pts(1)) cut1 = cut1 - 1 - if (nuc % energy(cut2) == insert_pts(4)) cut2 = cut2 + 1 + group_id = open_group(file_id, MT_n) - ! Generate the new energy grid. - new_n_grid = nuc % n_grid - (cut2 - cut1 - 1) + 4 - allocate(new_energy(new_n_grid)) - new_energy(1:cut1) = nuc % energy(1:cut1) - new_energy(cut1+1:cut1+4) = insert_pts(:) - new_energy(cut1+5:new_n_grid) = nuc % energy(cut2:nuc % n_grid) + ! Each MT needs to be treated slightly differently. + select case (MT(i)) + case(ELASTIC) + call read_dataset(nuc % elastic, group_id, "MT_sigma") + nuc % total(:) = nuc % total + nuc % elastic + case(N_FISSION) + call read_dataset(nuc % fission, group_id, "MT_sigma") + nuc % total(:) = nuc % total + nuc % fission + nuc % absorption(:) = nuc % absorption + nuc % fission + accumulated_fission = .true. + case default + ! Search through all of our secondary reactions + do j = 1, nuc % n_reaction + if (nuc % reactions(j) % MT == MT(i)) then + ! Match found - ! Compute interpolation factors for the new energy points. - f1 = (insert_pts(1) - nuc % energy(cut1)) & - / (nuc % energy(cut1+1) - nuc % energy(cut1)) - f2 = (insert_pts(4) - nuc % energy(cut2-1)) & - / (nuc % energy(cut2) - nuc % energy(cut2-1)) + ! Individual Fission components exist, so remove the combined + ! fission cross section. + if ( (MT(i) == N_F .or. MT(i) == N_NF .or. MT(i) == N_2NF & + .or. MT(i) == N_3NF) .and. accumulated_fission) then + nuc % total(:) = nuc % total - nuc % fission + nuc % absorption(:) = nuc % absorption - nuc % fission + nuc % fission(:) = ZERO + accumulated_fission = .false. + end if - ! Adjust the total cross section. - allocate(new_xs(new_n_grid)) - new_xs(1:cut1) = nuc % total(1:cut1) - new_xs(cut1+1) = (ONE - f1) * nuc % total(cut1) & - + f1 * nuc % total(cut1+1) - new_xs(cut1+2:cut1+3) = ZERO - new_xs(cut1+4) = (ONE - f2) * nuc % total(cut2-1) & - + f2 * nuc % total(cut2) - new_xs(cut1+5:new_n_grid) = nuc % total(cut2:nuc % n_grid) - call move_alloc(new_xs, nuc % total) + deallocate(nuc % reactions(j) % sigma) + allocate(nuc % reactions(j) % sigma(nuc % n_grid)) - ! Adjust the elastic cross section. - allocate(new_xs(new_n_grid)) - new_xs(1:cut1) = nuc % elastic(1:cut1) - new_xs(cut1+1) = (ONE - f1) * nuc % elastic(cut1) & - + f1 * nuc % elastic(cut1+1) - new_xs(cut1+2:cut1+3) = ZERO - new_xs(cut1+4) = (ONE - f2) * nuc % elastic(cut2-1) & - + f2 * nuc % elastic(cut2) - new_xs(cut1+5:new_n_grid) = nuc % elastic(cut2:nuc % n_grid) - call move_alloc(new_xs, nuc % elastic) + call read_dataset(nuc % reactions(j) % sigma, & + group_id, "MT_sigma") + call read_dataset(nuc % reactions(j) % Q_value, & + group_id, "Q_value") + call read_dataset(nuc % reactions(j) % threshold, & + group_id, "threshold") + nuc % reactions(j) % threshold = 1 ! TODO: reconsider implications. + nuc % reactions(j) % Q_value = nuc % reactions(j) % Q_value & + / 1.0e6_8 - ! Adjust the fission cross section. - allocate(new_xs(new_n_grid)) - new_xs(1:cut1) = nuc % fission(1:cut1) - new_xs(cut1+1) = (ONE - f1) * nuc % fission(cut1) & - + f1 * nuc % fission(cut1+1) - new_xs(cut1+2:cut1+3) = ZERO - new_xs(cut1+4) = (ONE - f2) * nuc % fission(cut2-1) & - + f2 * nuc % fission(cut2) - new_xs(cut1+5:new_n_grid) = nuc % fission(cut2:nuc % n_grid) - call move_alloc(new_xs, nuc % fission) + ! Accumulate total + if (MT(i) /= N_LEVEL .and. MT(i) <= N_DA) then + nuc % total(:) = nuc % total + nuc % reactions(j) % sigma + end if - ! Adjust the nu-fission cross section. - allocate(new_xs(new_n_grid)) - new_xs(1:cut1) = nuc % nu_fission(1:cut1) - new_xs(cut1+1) = (ONE - f1) * nuc % nu_fission(cut1) & - + f1 * nuc % nu_fission(cut1+1) - new_xs(cut1+2:cut1+3) = ZERO - new_xs(cut1+4) = (ONE - f2) * nuc % nu_fission(cut2-1) & - + f2 * nuc % nu_fission(cut2) - new_xs(cut1+5:new_n_grid) = nuc % nu_fission(cut2:nuc % n_grid) - call move_alloc(new_xs, nuc % nu_fission) + ! Accumulate absorption + if (MT(i) >= N_GAMMA .and. MT(i) <= N_DA) then + nuc % absorption(:) = nuc % absorption & + + nuc % reactions(j) % sigma + end if - ! Adjust the absorption cross section. - allocate(new_xs(new_n_grid)) - new_xs(1:cut1) = nuc % absorption(1:cut1) - new_xs(cut1+1) = (ONE - f1) * nuc % absorption(cut1) & - + f1 * nuc % absorption(cut1+1) - new_xs(cut1+2:cut1+3) = ZERO - new_xs(cut1+4) = (ONE - f2) * nuc % absorption(cut2-1) & - + f2 * nuc % absorption(cut2) - new_xs(cut1+5:new_n_grid) = nuc % absorption(cut2:nuc % n_grid) - call move_alloc(new_xs, nuc % absorption) + ! Accumulate fission (if needed) + if ( (MT(i) == N_F .or. MT(i) == N_NF .or. MT(i) == N_2NF & + .or. MT(i) == N_3NF) ) then + nuc % fission(:) = nuc % fission + nuc % reactions(j) % sigma + nuc % absorption(:) = nuc % absorption & + + nuc % reactions(j) % sigma + end if + end if + end do + end select - ! Adjust other cross sections. - do i = 1, nuc % n_reaction - associate (rxn => nuc % reactions(i)) - if (.not. allocated(rxn % sigma)) cycle ! Skip unallocated reactions - IE = rxn % threshold - if (rxn % threshold >= cut2) then - ! The threshold is above the multipole range. All we need to do - ! is adjust the threshold index to match the new grid. - rxn % threshold = rxn % threshold - (cut2 - cut1 - 1) + 4 - else if (rxn % threshold <= cut1) then - ! The threhold is below the multipole range. Remove the multipole - ! region just like we did with the other reactions. - ! The new grid removed (cut2 - cut1 - 1) points and added 4. - allocate(new_xs(size(rxn % sigma) - (cut2 - cut1 - 1) + 4)) - new_xs(1:cut1-IE+1) = rxn % sigma(1:cut1-IE+1) - new_xs(cut1-IE+2) = (ONE - f1) * rxn % sigma(cut1-IE+1) & - + f1 * rxn % sigma(cut1-IE+2) - new_xs(cut1-IE+3:cut1-IE+4) = ZERO - new_xs(cut1-IE+5) = (ONE - f2) * rxn % sigma(cut2-IE) & - + f2 * rxn % sigma(cut2-IE+1) - new_xs(cut1-IE+6:size(new_xs)) = & - rxn % sigma(cut2-IE+1:size(rxn % sigma)) - call move_alloc(new_xs, rxn % sigma) - else - ! The threshold lies within the multipole range. Remove the first - ! cut2-IE points and add an interpolated point - allocate(new_xs(size(rxn % sigma) - (cut2-IE) + 1)) - new_xs(1) = (ONE - f2) * rxn % sigma(cut2-IE) & - + f2 * rxn % sigma(cut2-IE+1) - new_xs(2:size(new_xs)) = rxn % sigma(cut2-IE+1:size(rxn % sigma)) - call move_alloc(new_xs, rxn % sigma) - rxn % threshold = cut1 + 4 - end if - end associate + call close_group(group_id) end do - ! Apply the new energy grid. - nuc % n_grid = new_n_grid - call move_alloc(new_energy, nuc % energy) + ! Close file + call file_close(file_id) end associate diff --git a/tests/test_multipole/results_true.dat b/tests/test_multipole/results_true.dat index 2c2b879fea..83d7e762e8 100644 --- a/tests/test_multipole/results_true.dat +++ b/tests/test_multipole/results_true.dat @@ -1,5 +1,5 @@ k-combined: -1.457760E+00 1.119656E-02 +1.457760E+00 1.119659E-02 Cell ID = 11 Name = From 7163011403d541dd84735372deab3d9157792cb6 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Thu, 9 Jun 2016 14:11:57 -0500 Subject: [PATCH 620/650] Address #618 comments --- data/get_multipole_data.py | 6 ++--- data/get_nndc_data.py | 6 ++--- docs/source/io_formats/data_wmp.rst | 41 ++++++++++++++++++----------- docs/source/io_formats/index.rst | 6 ++--- openmc/settings.py | 2 +- 5 files changed, 35 insertions(+), 26 deletions(-) diff --git a/data/get_multipole_data.py b/data/get_multipole_data.py index b5126bc0a4..9bccd5b9f2 100755 --- a/data/get_multipole_data.py +++ b/data/get_multipole_data.py @@ -11,8 +11,8 @@ import hashlib import argparse parser = argparse.ArgumentParser() -parser.add_argument('-b', '--batch', action = 'store_true', - help = 'supresses standard in') +parser.add_argument('-b', '--batch', action='store_true', + help='supresses standard in') args = parser.parse_args() try: @@ -92,7 +92,7 @@ for f, checksum in zip(files, checksums): for f in files: fname = f[:-9] if f.endswith('?raw=true') else f - if not fname in filesComplete: + if fname not in filesComplete: continue # Extract files diff --git a/data/get_nndc_data.py b/data/get_nndc_data.py index cd3c6c4dcf..b9b855a812 100755 --- a/data/get_nndc_data.py +++ b/data/get_nndc_data.py @@ -11,8 +11,8 @@ import hashlib import argparse parser = argparse.ArgumentParser() -parser.add_argument('-b', '--batch', action = 'store_true', - help = 'supresses standard in') +parser.add_argument('-b', '--batch', action='store_true', + help='supresses standard in') args = parser.parse_args() try: @@ -90,7 +90,7 @@ for f, checksum in zip(files, checksums): # EXTRACT FILES FROM TGZ for f in files: - if not f in filesComplete: + if f not in filesComplete: continue # Extract files diff --git a/docs/source/io_formats/data_wmp.rst b/docs/source/io_formats/data_wmp.rst index 1e791d6c59..9e4be499f4 100644 --- a/docs/source/io_formats/data_wmp.rst +++ b/docs/source/io_formats/data_wmp.rst @@ -1,8 +1,10 @@ .. _io_data_wmp: -========================================== -The Windowed Multipole Library Format v0.2 -========================================== +================================= +Windowed Multipole Library Format +================================= + +Version 0.2 **/nuclide/** - **broaden_poly** (*int[]*) @@ -12,14 +14,17 @@ The Windowed Multipole Library Format v0.2 Curve fit coefficients. Indexed by (reaction type, coefficient index, window index). - **data** (*complex[][]*) - Complex poles and residues. Each pole has a corresponding set of - residues. For example, the `i`th pole and corresponding residues are - stored as `data[:,i] = [pole, residue_1, residue_2, ...]`. The - residues are in the order: total, competitive if present, absorption, - fission. Complex numbers are stored by forming a type with `"r"` and - `"i"` identifiers, similar to how `h5py` does it. - - **start_E** (*double*) - Lowest energy the windowed multipole part of the library is valid for. + Complex poles and residues. Each pole has a corresponding set of + residues. For example, the :math:`i`-th pole and corresponding residues + are stored as + + .. math:: + \text{data}[:,i] = [\text{pole},~\text{residue}_1,~\text{residue}_2, + ~\ldots]` + + The residues are in the order: total, competitive if present, + absorption, fission. Complex numbers are stored by forming a type with + ":math:`r`" and ":math:`i`" identifiers, similar to how `h5py`_ does it. - **end_E** (*double*) Highest energy the windowed multipole part of the library is valid for. - **energy_points** (*double[]*) @@ -59,24 +64,27 @@ The Windowed Multipole Library Format v0.2 Number of possible :math:`l` quantum states for this nuclide. - **pseudo_K0RS** (*double[]*) :math:`l` dependent value of - + .. math:: \sqrt{\frac{2 m_n}{\hbar}}\frac{AWR}{AWR + 1} r_{s,l} - + Where :math:`m_n` is mass of neutron, :math:`AWR` is the atomic weight ratio of the target to the neutron, and :math:`r_{s,l}` is the scattering radius for a given :math:`l`. - **spacing** (*double*) .. math:: \frac{\sqrt{E_{max}}- \sqrt{E_{min}}}{n_w} - + Where :math:`E_{max}` is the maximum energy the windows go up to. This is not equivalent to the maximum energy for which the windowed multipole data is valid for. It is slightly higher to ensure an integer number of windows. :math:`E_{min}` is the minimum energy and equivalent to - `start_E`, and :math:`n_w` is the number of windows, given by `windows`. + ``start_E``, and :math:`n_w` is the number of windows, given by + ``windows``. - **sqrtAWR** (*double*) Square root of the atomic weight ratio. + - **start_E** (*double*) + Lowest energy the windowed multipole part of the library is valid for. - **w_start** (*int[]*) The pole to start from for each window. - **w_end** (*int[]*) @@ -87,6 +95,7 @@ The Windowed Multipole Library Format v0.2 **/nuclide/reactions/MT** - **MT_sigma** (*double[]*) -- Cross section value for this reaction. - **Q_value** (*double*) -- Energy released in this reaction, in eV. - - **threshold** (*int*) -- The first non-zero entry in `MT_sigma`. + - **threshold** (*int*) -- The first non-zero entry in ``MT_sigma``. +.. _h5py: http://docs.h5py.org/en/latest/ .. _ENDF-6: https://www.oecd-nea.org/dbdata/data/manual-endf/endf102.pdf diff --git a/docs/source/io_formats/index.rst b/docs/source/io_formats/index.rst index 33c43df081..905cd26cc0 100644 --- a/docs/source/io_formats/index.rst +++ b/docs/source/io_formats/index.rst @@ -1,8 +1,8 @@ .. _io_file_formats: -=============== -IO File Formats -=============== +========================== +File Format Specifications +========================== .. toctree:: :numbered: diff --git a/openmc/settings.py b/openmc/settings.py index bb38ca797f..3c22b39ba9 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -78,7 +78,7 @@ class Settings(object): multipole_library : str Indicates the path to a directory containing a windowed multipole cross section library. If it is not set, the - :envvar:`OPENMC_MULTIPOLE_LIBRARY' environment variable will be used. A + :envvar:`OPENMC_MULTIPOLE_LIBRARY` environment variable will be used. A multipole library is optional. energy_grid : {'nuclide', 'logarithm', 'material-union'} Set the method used to search energy grids. From 72b9b0b811ad726d24590a42fe1a6e0997549c23 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Fri, 10 Jun 2016 14:05:17 -0500 Subject: [PATCH 621/650] Use versioning information in WMP format --- docs/source/io_formats/data_wmp.rst | 3 ++- src/constants.F90 | 9 +++++---- src/multipole.F90 | 7 +++++++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/docs/source/io_formats/data_wmp.rst b/docs/source/io_formats/data_wmp.rst index 9e4be499f4..268afa2dbf 100644 --- a/docs/source/io_formats/data_wmp.rst +++ b/docs/source/io_formats/data_wmp.rst @@ -4,7 +4,8 @@ Windowed Multipole Library Format ================================= -Version 0.2 +**/version** (*char[]*) + The format version of the file. The current version is "v0.2" **/nuclide/** - **broaden_poly** (*int[]*) diff --git a/src/constants.F90 b/src/constants.F90 index f1106f228a..f6e82d9bdc 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -11,10 +11,11 @@ module constants integer, parameter :: VERSION_RELEASE = 1 ! Revision numbers for binary files - integer, parameter :: REVISION_STATEPOINT = 15 - integer, parameter :: REVISION_PARTICLE_RESTART = 1 - integer, parameter :: REVISION_TRACK = 1 - integer, parameter :: REVISION_SUMMARY = 3 + integer, parameter :: REVISION_STATEPOINT = 15 + integer, parameter :: REVISION_PARTICLE_RESTART = 1 + integer, parameter :: REVISION_TRACK = 1 + integer, parameter :: REVISION_SUMMARY = 3 + character(10), parameter :: MULTIPOLE_VERSION = "v0.2" ! ============================================================================ ! ADJUSTABLE PARAMETERS diff --git a/src/multipole.F90 b/src/multipole.F90 index caadab90f1..3820025369 100644 --- a/src/multipole.F90 +++ b/src/multipole.F90 @@ -28,6 +28,7 @@ contains integer(HID_T) :: group_id ! Intermediate loading components + character(len=10) :: version integer :: NMT integer :: i, j integer, allocatable :: MT(:) @@ -41,6 +42,12 @@ contains file_id = file_open(filename, 'r', parallel=.true.) group_id = open_group(file_id, "/nuclide") + ! Check the file version number. + call read_dataset(version, file_id, "version") + if (version /= MULTIPOLE_VERSION) call fatal_error("The current multipole& + & format version is " // trim(MULTIPOLE_VERSION) // " but the file "& + // trim(filename) // " uses version " // trim(version)) + ! Load in all the array size scalars call read_dataset(multipole % length, group_id, "length") call read_dataset(multipole % windows, group_id, "windows") From 15e077dd9035411f2c78d964487e063742537754 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Sat, 11 Jun 2016 09:22:57 -0400 Subject: [PATCH 622/650] removed unused variables --- src/scattdata_header.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index ee101d63ba..2066b36b92 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -329,7 +329,7 @@ contains real(8), intent(in) :: coeffs(:, :, :) ! Coefficients to use integer :: imu, gin, gout, groups, order - real(8) :: norm, m, mu0, mu1, p0 + real(8) :: norm real(8), allocatable :: energy(:, :) real(8), allocatable :: matrix(:, :, :) From 661b899316d25eba8b8ce2f395817a47729d1414 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Wed, 15 Jun 2016 10:29:40 -0500 Subject: [PATCH 623/650] Update WMP library checksum --- data/get_multipole_data.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/get_multipole_data.py b/data/get_multipole_data.py index 9bccd5b9f2..4af4ebbf55 100755 --- a/data/get_multipole_data.py +++ b/data/get_multipole_data.py @@ -25,7 +25,7 @@ sys.path.insert(0, os.path.join(cwd, '..')) baseUrl = 'https://github.com/smharper/windowed_multipole_library/blob/master/' files = ['multipole_lib.tar.gz?raw=true'] -checksums = ['9f0307132fe5beca78b8fc7a01fb401c'] +checksums = ['3985aea96f7162a9419c7ed8352e6abb'] block_size = 16384 # ============================================================================== @@ -81,6 +81,7 @@ print('Verifying MD5 checksums...') for f, checksum in zip(files, checksums): fname = f[:-9] if f.endswith('?raw=true') else f downloadsum = hashlib.md5(open(fname, 'rb').read()).hexdigest() + print(downloadsum) if downloadsum != checksum: raise IOError("MD5 checksum for {} does not match. If this is your first " "time receiving this message, please re-run the script. " From 2fd10d1d53d11304de24bb162e39f931e325b527 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 15 Jun 2016 11:36:37 -0400 Subject: [PATCH 624/650] Updated cross_sections.rst to include a description of the MG mode options --- docs/source/methods/cross_sections.rst | 122 ++++++++++++++++++++++--- docs/source/methods/introduction.rst | 6 +- 2 files changed, 112 insertions(+), 16 deletions(-) diff --git a/docs/source/methods/cross_sections.rst b/docs/source/methods/cross_sections.rst index 5126252cd7..71caa07b80 100644 --- a/docs/source/methods/cross_sections.rst +++ b/docs/source/methods/cross_sections.rst @@ -1,16 +1,20 @@ .. _methods_cross_sections: -============================ -Cross Section Representation -============================ +============================= +Cross Section Representations +============================= -The data governing the interaction of neutrons with various nuclei are -represented using the ACE format which is used by MCNP_ and Serpent_. ACE-format -data can be generated with the NJOY_ nuclear data processing system which -converts raw `ENDF/B data`_ into linearly-interpolable data as required by most -Monte Carlo codes. The use of a standard cross section format allows for a -direct comparison of OpenMC with other codes since the same cross section -libraries can be used. +---------------------- +Continuous-Energy Data +---------------------- + +The data governing the interaction of neutrons with +various nuclei for continous-energy problems are represented using the ACE +format which is used by MCNP_ and Serpent_. ACE-format data can be generated +with the NJOY_ nuclear data processing system which converts raw +`ENDF/B data`_ into linearly-interpolable data as required by most Monte Carlo +codes. The use of a standard cross section format allows for a direct comparison +of OpenMC with other codes since the same cross section libraries can be used. The ACE format contains continuous-energy cross sections for the following types of reactions: elastic scattering, fission (or first-chance fission, @@ -24,7 +28,6 @@ accurate treatment of self-shielding in the unresolved resonance range. For bound scatterers, separate tables with :math:`S(\alpha,\beta,T)` scattering law data can be used. -------------------- Energy Grid Methods ------------------- @@ -48,7 +51,6 @@ implement a method of reducing the number of energy grid searches in order to speed up the calculation. Logarithmic Mapping -------------------- To speed up energy grid searches, OpenMC uses logarithmic mapping technique [Brown]_ to limit the range of energies that must be searched for each @@ -58,11 +60,102 @@ the nuclide energy grids. By default, OpenMC uses 8000 equal-lethargy segments as recommended by Brown. Other Methods -------------- A good survey of other energy grid techniques, including unionized energy grids, can be found in a paper by Leppanen_. +---------------- +Multi-Group Data +---------------- + +The data governing the interaction of neutrons with various nuclei or materials +are represented using a multi-group library format specific to the OpenMC code. +The format is described in the MGXS library specification_ +The data itself can be prepared via multiple paths including: generation via +NJOY_ and TRANSX_, or directly from a continuous-energy OpenMC calculation by +use of the Python API as is shown in the Python API example_ notebooks. This +multi-group library consists of library meta-data (such as the energy group +structure) and multiple `xsdata` objects which contains the required microscopic +or macroscopic multi-group data. + +At a minimum, the library must contain the absorption cross section +(:math:`\sigma_{a,g}`) and a scattering matrix. If the problem is an eigenvalue +problem then all fissionable materials must also contain either fission spectrum +data (:math:`\chi{g'}`) and a fission production cross section +(:math:`\nu\sigma_{f,g}`), or, a fission production matrix cross section +(:math:`\nu\sigma_{f,g\arrow\g'}`). If fission or energy release from fission +tallies are requested by the user, then the library must also contain the +fission cross section (:math:`\sigma_{f,g}`) or the fission energy release +cross section (:math:`\kappa\sigma_{f,g}`). + +After a scattering collision, the outgoing neutron experiences a change in both +energy and angle. The probability of a neutron resulting in a given outgoing +energy group (`g'`) given a certain incoming energy group (`g`) is provided +by the scattering matrix cross sections themselves. The angular information, +however, can be expressed either via Legendre expansion of the neutron's +change-in-angle (:math:`\mu`), a tabular representation of the probability of +a neutron experiencing a given :math:`\mu`, or a histogram representation of the +probability of a neutron experiencing a given :math:`\mu`. The formats used to +represent these are described in the library format specification_. + +Unlike the continuous-energy mode, the multi-group mode does not explicitly +track neutrons produced from scattering multiplication (i.e., :math:`(n,xn)`) +reactions. These are instead accounted for by adjusting the weight of the +neutron after the collision such that the correct total weight is maintained. +The information for how to adjust this weight is optionally provided by the +`multiplicity` data which exists as a group-wise matrix. This data represents +the average number of neutrons emitted from a scattering reaction, given a +scattering reaction has occurred: + +.. math:: + + multiplicity_{g \arrow g'} = \frac{\nu_{scatter}\sigma_{s,g \arrow g'}}{ + \sigma_{s,g \arrow g'}} + +This data is provided as a group-wise matrix since the probability of producing +multiple neutrons in a scattering reaction depends on both the incoming energy, +`g`, and the sampled outgoing energy, `g'`. + +If this scattering multiplication information is not provided in the library +then no weight adjustment will be performed. This is equivalent to neglecting +any additional neutrons produced in scattering multiplication reactions. +However, this assumption will result in a loss of accuracy since the total +neutron population would not be conserved. This reduction in accuracy due to +the loss in neutron conservation can be mitigated by reducing the absorption +cross section as needed to maintain neutron conservation. This adjustment can +be done when generating the library, or by OpenMC. To have OpenMC perform the +adjustment, the total cross section (:math:`\sigma_{t,g}`) must be provided. +With this information, OpenMC will then adjust the absorption cross section as +follows: + +.. math:: + + \sigma_{a,g} = \sigma_{t,g} - \sum_{g'}{\nu_{scatter}\sigma_{s,g \arrow g'}} + +The above method is the same as is typically done with most deterministic methods. +Note that this method is less accurate than using the scattering multiplication +weight adjustment since simply reducing the absorption cross section does not +include any information about the outgoing energy of the neutrons produced in +these reactions. + +All of the data discussed in this section can be provided to the code +independent of the neutron's direction of motion (i.e., isotropic), or the data +can be provided as a tabular distribution of the polar and azimuthal neutron +direction angles. The isotropic representation is the most commonly used, +however inaccuracies are to be expected especially near material interfaces +where a material has a very large cross sections relative to the other material +(as can be expected in the resonance range). The angular representation can be +used to minimize this error. + +Finally, the above options for representing the physics do not have to be +consistent across the problem. The number of groups and the structure, however, +does have to be consistent across the data sets. That is to say that each +microscopic or macroscopic data set does not have to apply the same scattering +expansion, treatment of multiplicity or angular representation of the cross +sections. This allows flexibility for the model to use highly anisotropic +scattering information in the water while the fuel can be simulated with linear +or even isotropic scattering. + .. only:: html .. rubric:: References @@ -75,3 +168,6 @@ can be found in a paper by Leppanen_. .. _NJOY: http://t2.lanl.gov/codes.shtml .. _ENDF/B data: http://www.nndc.bnl.gov/endf .. _Leppanen: http://dx.doi.org/10.1016/j.anucene.2009.03.019 +.. _specification: ENTER LINK +.. _TRANSX: ENTER LINK +.. _example: ENTER LINK diff --git a/docs/source/methods/introduction.rst b/docs/source/methods/introduction.rst index 7e4f94633f..0bd067470c 100644 --- a/docs/source/methods/introduction.rst +++ b/docs/source/methods/introduction.rst @@ -56,9 +56,9 @@ following steps: combined to produce material-specific cross section data. - In a fixed source problem, source sites are sampled from the specified - source. In an eigenvalue problem, source sites are sampled from some initial - source distribution or from a source file. The source sites consist of - coordinates, a direction, and an energy. + source. In an eigenvalue problem, source sites are sampled from some + initial source distribution or from a source file. The source sites + consist of coordinates, a direction, and an energy. Once initialization is complete, the actual transport simulation can proceed. The life of a single particle will proceed as follows: From 933fbb70d449fd8493995f507d74ef5d3b0595d8 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 15 Jun 2016 12:19:42 -0400 Subject: [PATCH 625/650] Updated physics.rst in the methods manual --- docs/source/methods/cross_sections.rst | 36 +++++----- docs/source/methods/physics.rst | 91 +++++++++++++++++++++++++- 2 files changed, 109 insertions(+), 18 deletions(-) diff --git a/docs/source/methods/cross_sections.rst b/docs/source/methods/cross_sections.rst index 71caa07b80..bb72a9c75e 100644 --- a/docs/source/methods/cross_sections.rst +++ b/docs/source/methods/cross_sections.rst @@ -51,6 +51,7 @@ implement a method of reducing the number of energy grid searches in order to speed up the calculation. Logarithmic Mapping ++++++++++++++++++++ To speed up energy grid searches, OpenMC uses logarithmic mapping technique [Brown]_ to limit the range of energies that must be searched for each @@ -60,6 +61,7 @@ the nuclide energy grids. By default, OpenMC uses 8000 equal-lethargy segments as recommended by Brown. Other Methods ++++++++++++++ A good survey of other energy grid techniques, including unionized energy grids, can be found in a paper by Leppanen_. @@ -68,7 +70,7 @@ can be found in a paper by Leppanen_. Multi-Group Data ---------------- -The data governing the interaction of neutrons with various nuclei or materials +The data governing the interaction of particles with various nuclei or materials are represented using a multi-group library format specific to the OpenMC code. The format is described in the MGXS library specification_ The data itself can be prepared via multiple paths including: generation via @@ -88,23 +90,23 @@ tallies are requested by the user, then the library must also contain the fission cross section (:math:`\sigma_{f,g}`) or the fission energy release cross section (:math:`\kappa\sigma_{f,g}`). -After a scattering collision, the outgoing neutron experiences a change in both -energy and angle. The probability of a neutron resulting in a given outgoing +After a scattering collision, the outgoing particle experiences a change in both +energy and angle. The probability of a particle resulting in a given outgoing energy group (`g'`) given a certain incoming energy group (`g`) is provided by the scattering matrix cross sections themselves. The angular information, -however, can be expressed either via Legendre expansion of the neutron's +however, can be expressed either via Legendre expansion of the particle's change-in-angle (:math:`\mu`), a tabular representation of the probability of -a neutron experiencing a given :math:`\mu`, or a histogram representation of the -probability of a neutron experiencing a given :math:`\mu`. The formats used to +a particle experiencing a given :math:`\mu`, or a histogram representation of the +probability of a particle experiencing a given :math:`\mu`. The formats used to represent these are described in the library format specification_. Unlike the continuous-energy mode, the multi-group mode does not explicitly -track neutrons produced from scattering multiplication (i.e., :math:`(n,xn)`) +track particles produced from scattering multiplication (i.e., :math:`(n,xn)`) reactions. These are instead accounted for by adjusting the weight of the -neutron after the collision such that the correct total weight is maintained. +particle after the collision such that the correct total weight is maintained. The information for how to adjust this weight is optionally provided by the `multiplicity` data which exists as a group-wise matrix. This data represents -the average number of neutrons emitted from a scattering reaction, given a +the average number of particles emitted from a scattering reaction, given a scattering reaction has occurred: .. math:: @@ -113,16 +115,16 @@ scattering reaction has occurred: \sigma_{s,g \arrow g'}} This data is provided as a group-wise matrix since the probability of producing -multiple neutrons in a scattering reaction depends on both the incoming energy, +multiple particles in a scattering reaction depends on both the incoming energy, `g`, and the sampled outgoing energy, `g'`. If this scattering multiplication information is not provided in the library then no weight adjustment will be performed. This is equivalent to neglecting -any additional neutrons produced in scattering multiplication reactions. +any additional particles produced in scattering multiplication reactions. However, this assumption will result in a loss of accuracy since the total -neutron population would not be conserved. This reduction in accuracy due to -the loss in neutron conservation can be mitigated by reducing the absorption -cross section as needed to maintain neutron conservation. This adjustment can +particle population would not be conserved. This reduction in accuracy due to +the loss in particle conservation can be mitigated by reducing the absorption +cross section as needed to maintain particle conservation. This adjustment can be done when generating the library, or by OpenMC. To have OpenMC perform the adjustment, the total cross section (:math:`\sigma_{t,g}`) must be provided. With this information, OpenMC will then adjust the absorption cross section as @@ -135,12 +137,12 @@ follows: The above method is the same as is typically done with most deterministic methods. Note that this method is less accurate than using the scattering multiplication weight adjustment since simply reducing the absorption cross section does not -include any information about the outgoing energy of the neutrons produced in +include any information about the outgoing energy of the particles produced in these reactions. All of the data discussed in this section can be provided to the code -independent of the neutron's direction of motion (i.e., isotropic), or the data -can be provided as a tabular distribution of the polar and azimuthal neutron +independent of the particle's direction of motion (i.e., isotropic), or the data +can be provided as a tabular distribution of the polar and azimuthal particle direction angles. The isotropic representation is the most commonly used, however inaccuracies are to be expected especially near material interfaces where a material has a very large cross sections relative to the other material diff --git a/docs/source/methods/physics.rst b/docs/source/methods/physics.rst index cc486ab67b..7edd656d62 100644 --- a/docs/source/methods/physics.rst +++ b/docs/source/methods/physics.rst @@ -4,6 +4,12 @@ Physics ======= +There are limited differences between physics treatments used in the +continuous-energy and multi-group modes. If distinctions are necessary, each +of the following sections will provide an explanation of the differences. +Otherwise, replacing any references of the particle's energy (`E`) with +references to the particle's energy group (`g) will suffice. + ----------------------------------- Sampling Distance to Next Collision ----------------------------------- @@ -79,6 +85,10 @@ originating from :math:`(n,\gamma)` and other reactions. Elastic Scattering ------------------ +Note that the multi-group mode makes no distinction between elastic or +inelastic scattering reactions. The spceific multi-group scattering +implementation is discussed in the multi-group-scatter_ section. + Elastic scattering refers to the process by which a neutron scatters off a nucleus and does not leave it in an excited. It is referred to as "elastic" because in the center-of-mass system, the neutron does not actually lose @@ -170,6 +180,10 @@ final direction in the lab system. Inelastic Scattering -------------------- +Note that the multi-group mode makes no distinction between elastic or +inelastic scattering reactions. The spceific multi-group scattering +implementation is discussed in the multi-group-scatter_ section. + The major algorithms for inelastic scattering were described in previous sections. First, a scattering cosine is sampled using the algorithms in :ref:`sample-angle`. Then an outgoing energy is sampled using the algorithms in @@ -186,12 +200,67 @@ secondary photons from nuclear de-excitation are tracked in OpenMC. :math:`(n,xn)` Reactions ------------------------ +Note that the multi-group mode makes no distinction between elastic or +inelastic scattering reactions. The specific multi-group scattering +implementation is discussed in the multi-group-scatter_ section. + These types of reactions are just treated as inelastic scattering and as such are subject to the same procedure as described in :ref:`inelastic-scatter`. For reactions with integral multiplicity, e.g., :math:`(n,2n)`, an appropriate number of secondary neutrons are created. For reactions that have a multiplicity given as a function of the incoming neutron energy (which occasionally occurs -for MT=5), the weight of the outgoing neutron is multiplied by the multiplcity. +for MT=5), the weight of the outgoing neutron is multiplied by the multiplicity. + +.. _multi-group-scatter: + +---------------------- +Multi-Group Scattering +---------------------- + +In multi-group mode, a scattering collision requires that the outgoing energy +group of the simulated particle be selected from a probability distribution, +then the change-in-angle selected from a probability distribution according to +the outgoing energy group, and finally the particle's weight adjusted again +according to the outgoing energy group. + +The first step in selecting an outgoing energy group for a particle in a given +incoming energy group is to select a random number (:math:`\xi`) between 0 and +1. This number is then compared to the cumulative distribution function +produced from the outgoing group (`g'`) data for the given incoming group (`g`): + +.. math:: + CDF = \sum_{g'=0}^{h}\Sigma_{s,g \arrow g'} + +If the scattering data is represented as a Legendre expansion, then the +value of :math:`\Sigma_{s,g \arrow g'}` above is simply the 0th order. If the +data is provided as tabular or histogram data, then the value of +:math:`\Sigma_{s,g \arrow g'}` is the sum of all bins of data for a given `g` +and `g'` pair. + +Now that the outgoing energy is known the change-in-angle, :math:`\mu` can be +determined. If the data is provided as a Legendre expansion, this is done by +rejection sampling of the probability distribution represented by the Legendre +series. For efficiency, the selected values of the PDF (:math:`f(\mu)`) are +chosen to be between 0 and the maximum value of :math:`f(\mu)` in the domain of +-1 to 1. + +If the angular data is instead provided as a tabular representation, then the +value of :math:`\mu` is selected as described in the later angle-tabular_ +section with a linear-linear interpolation scheme. + +If the angular data is provided as a histogram representation, then +the value of :math:`\mu` is selected in a similar fashion to that described for +the selection of the outgoing energy (since the energy group representation is +simply a histogram representation) except the CDF is composed of the angular +bins and not the energy groups. However, since we are interested in a specific +value of :math:`\mu` instead of a group, then an angle selected from a uniform +distribution within from the chosen histogram bin. + +The final step in the scattering treatment is to adjust the weight of the +neutron to account for any production of neutrons due to :math:`(n,xn)` +reactions. This data is obtained from the multiplicity data provided in the +multi-group cross section library for the material of interest. +The scaled value will default to 1.0 if no value is provided in the library. .. _fission: @@ -271,10 +340,19 @@ position of the collision site are stored in an array called the fission bank. In a subsequent generation, these fission bank sites are used as starting source sites. +The above description is similar for the multi-group mode except the data are +provided as group-wise data instead of in a continuous-energy format. In this +case, the outgoing energy of the fission neutrons are represented as histograms +by way of either the nu-fission matrix or chi vector. + ----------------------------------------- Secondary Angles and Energy Distributions ----------------------------------------- +Note that this section is specific to continuous-energy mode since the +multi-group scattering process has already been described including the +secondary energy and angle sampling. + For any reactions with secondary neutrons, it is necessary to sample secondary angle and energy distributions. This includes elastic and inelastic scattering, fission, and :math:`(n,xn)` reactions. In some cases, the angle and energy @@ -890,6 +968,9 @@ space distribution at all, the :math:`(n,2n)` reaction with H-2. Transforming a Particle's Coordinates ------------------------------------- +Since all the multi-group data exists in the laboratory frame of reference, this +section does not apply to the multi-group mode. + Once the cosine of the scattering angle :math:`\mu` has been sampled either from a angle distribution or a correlated angle-energy distribution, we are still left with the task of transforming the particle's coordinates. If the outgoing @@ -941,6 +1022,9 @@ the post-collision direction is calculated as Effect of Thermal Motion on Cross Sections ------------------------------------------ +Since all the multi-group data should be generated with thermal scattering +treatments already, this section does not apply to the multi-group mode. + When a neutron scatters off of a nucleus, it may often be assumed that the target nucleus is at rest. However, the target nucleus will have motion associated with its thermal vibration, even at absolute zero (This is due to the @@ -1272,6 +1356,8 @@ described fully in `Walsh et al.`_ |sab| Tables ------------ +Note that |sab| tables are only applicable to continuous-energy transport. + For neutrons with thermal energies, generally less than 4 eV, the kinematics of scattering can be affected by chemical binding and crystalline effects of the target molecule. If these effects are not accounted for in a simulation, the @@ -1461,6 +1547,9 @@ actual algorithm utilized to sample the outgoing angle is shown in equation Unresolved Resonance Region Probability Tables ---------------------------------------------- +Note that unresolved resonance treatments are only applicable to +continuous-energy transport. + In the unresolved resonance energy range, resonances may be so closely spaced that it is not possible for experimental measurements to resolve all resonances. To properly account for self-shielding in this energy range, OpenMC From bbded7667d00b605db52d47b99d391104bc49935 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 15 Jun 2016 12:27:24 -0400 Subject: [PATCH 626/650] Some minor comments in tallies and cmfd methods sections. Only need to add a few links and proof-read the compiled html! --- docs/source/methods/cmfd.rst | 4 ++++ docs/source/methods/tallies.rst | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/docs/source/methods/cmfd.rst b/docs/source/methods/cmfd.rst index 4181f1b37e..9403933fd6 100644 --- a/docs/source/methods/cmfd.rst +++ b/docs/source/methods/cmfd.rst @@ -8,6 +8,10 @@ This page section discusses how nonlinear diffusion acceleration (NDA) using coarse mesh finite difference (CMFD) is implemented into OpenMC. Before we get into the theory, general notation for this section is discussed. +Note that the methods discussed in this section are written specifically for +continuous-energy mode but equivalent apply to the multi-group mode if the +particle's energy is replaced with the particle's group + -------- Notation -------- diff --git a/docs/source/methods/tallies.rst b/docs/source/methods/tallies.rst index 60a2b9a632..3b01e03f3d 100644 --- a/docs/source/methods/tallies.rst +++ b/docs/source/methods/tallies.rst @@ -4,6 +4,10 @@ Tallies ======= +Note that the methods discussed in this section are written specifically for +continuous-energy mode but equivalent apply to the multi-group mode if the +particle's energy is replaced with the particle's group + ------------------ Filters and Scores ------------------ From f828141b281489429fe2b024252e43badb7b07ae Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 15 Jun 2016 14:43:45 -0400 Subject: [PATCH 627/650] fixed references and a few typos --- docs/source/methods/cross_sections.rst | 19 ++++++++----------- docs/source/methods/physics.rst | 2 +- docs/source/usersguide/mgxs_library.rst | 8 +++++--- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/docs/source/methods/cross_sections.rst b/docs/source/methods/cross_sections.rst index bb72a9c75e..7fc076f6df 100644 --- a/docs/source/methods/cross_sections.rst +++ b/docs/source/methods/cross_sections.rst @@ -72,13 +72,13 @@ Multi-Group Data The data governing the interaction of particles with various nuclei or materials are represented using a multi-group library format specific to the OpenMC code. -The format is described in the MGXS library specification_ -The data itself can be prepared via multiple paths including: generation via -NJOY_ and TRANSX_, or directly from a continuous-energy OpenMC calculation by -use of the Python API as is shown in the Python API example_ notebooks. This -multi-group library consists of library meta-data (such as the energy group -structure) and multiple `xsdata` objects which contains the required microscopic -or macroscopic multi-group data. +The format is described in the :ref:`mgxs_lib_spec`. +The data itself can be prepared via traditional paths or directly from a +continuous-energy OpenMC calculation by use of the Python API as is shown in the +Python API :ref:`_notebook_mgxs_part_iv` example notebook. This multi-group +library consists of library meta-data (such as the energy group structure) and +multiple `xsdata` objects which contains the required microscopic or macroscopic +multi-group data. At a minimum, the library must contain the absorption cross section (:math:`\sigma_{a,g}`) and a scattering matrix. If the problem is an eigenvalue @@ -98,7 +98,7 @@ however, can be expressed either via Legendre expansion of the particle's change-in-angle (:math:`\mu`), a tabular representation of the probability of a particle experiencing a given :math:`\mu`, or a histogram representation of the probability of a particle experiencing a given :math:`\mu`. The formats used to -represent these are described in the library format specification_. +represent these are described in the :ref:`mgxs_lib_spec`. Unlike the continuous-energy mode, the multi-group mode does not explicitly track particles produced from scattering multiplication (i.e., :math:`(n,xn)`) @@ -170,6 +170,3 @@ or even isotropic scattering. .. _NJOY: http://t2.lanl.gov/codes.shtml .. _ENDF/B data: http://www.nndc.bnl.gov/endf .. _Leppanen: http://dx.doi.org/10.1016/j.anucene.2009.03.019 -.. _specification: ENTER LINK -.. _TRANSX: ENTER LINK -.. _example: ENTER LINK diff --git a/docs/source/methods/physics.rst b/docs/source/methods/physics.rst index 7edd656d62..3a243f7e8c 100644 --- a/docs/source/methods/physics.rst +++ b/docs/source/methods/physics.rst @@ -245,7 +245,7 @@ chosen to be between 0 and the maximum value of :math:`f(\mu)` in the domain of -1 to 1. If the angular data is instead provided as a tabular representation, then the -value of :math:`\mu` is selected as described in the later angle-tabular_ +value of :math:`\mu` is selected as described in the :ref:`angle-tabular` section with a linear-linear interpolation scheme. If the angular data is provided as a histogram representation, then diff --git a/docs/source/usersguide/mgxs_library.rst b/docs/source/usersguide/mgxs_library.rst index 11ccae43df..5284e49462 100644 --- a/docs/source/usersguide/mgxs_library.rst +++ b/docs/source/usersguide/mgxs_library.rst @@ -22,9 +22,11 @@ materials. .. _XML: http://www.w3.org/XML/ --------------------------------------- -MGXS Library Specification -- mgxs.xml --------------------------------------- +.. _mgxs_lib_spec: + +-------------------------- +MGXS Library Specification +-------------------------- The multi-group library meta-data is contained within the groups_, group_structure_, and inverse_velocities_ elements. From 6d5951635585382dd2e4ece33c6c7f8e22730d5f Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 15 Jun 2016 14:55:46 -0400 Subject: [PATCH 628/650] proofreading changes --- docs/source/methods/cross_sections.rst | 44 ++++++++++++-------------- docs/source/methods/physics.rst | 16 ++++++---- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/docs/source/methods/cross_sections.rst b/docs/source/methods/cross_sections.rst index 7fc076f6df..9c11d3626d 100644 --- a/docs/source/methods/cross_sections.rst +++ b/docs/source/methods/cross_sections.rst @@ -76,48 +76,46 @@ The format is described in the :ref:`mgxs_lib_spec`. The data itself can be prepared via traditional paths or directly from a continuous-energy OpenMC calculation by use of the Python API as is shown in the Python API :ref:`_notebook_mgxs_part_iv` example notebook. This multi-group -library consists of library meta-data (such as the energy group structure) and -multiple `xsdata` objects which contains the required microscopic or macroscopic +library consists of meta-data (such as the energy group structure) and multiple +`xsdata` objects which contains the required microscopic or macroscopic multi-group data. At a minimum, the library must contain the absorption cross section (:math:`\sigma_{a,g}`) and a scattering matrix. If the problem is an eigenvalue -problem then all fissionable materials must also contain either fission spectrum -data (:math:`\chi{g'}`) and a fission production cross section -(:math:`\nu\sigma_{f,g}`), or, a fission production matrix cross section -(:math:`\nu\sigma_{f,g\arrow\g'}`). If fission or energy release from fission -tallies are requested by the user, then the library must also contain the -fission cross section (:math:`\sigma_{f,g}`) or the fission energy release -cross section (:math:`\kappa\sigma_{f,g}`). +problem then all fissionable materials must also contain either +a fission production matrix cross section (:math:`\nu\sigma_{f,g\arrow\g'}`), or +both the fission spectrum data (:math:`\chi{g'}`) and a fission production cross +section (:math:`\nu\sigma_{f,g}`), or, . The library must also contain +the fission cross section (:math:`\sigma_{f,g}`) or the fission energy release +cross section (:math:`\kappa\sigma_{f,g}`) if the associated tallies are +required by the model using the library. After a scattering collision, the outgoing particle experiences a change in both energy and angle. The probability of a particle resulting in a given outgoing energy group (`g'`) given a certain incoming energy group (`g`) is provided -by the scattering matrix cross sections themselves. The angular information, -however, can be expressed either via Legendre expansion of the particle's -change-in-angle (:math:`\mu`), a tabular representation of the probability of -a particle experiencing a given :math:`\mu`, or a histogram representation of the -probability of a particle experiencing a given :math:`\mu`. The formats used to +by the scattering matrix data. The angular information can be expressed either +via Legendre expansion of the particle's change-in-angle (:math:`\mu`), a +tabular representation of the probability distribution function of :math:`\mu`, +or a histogram representation of the same PDF. The formats used to represent these are described in the :ref:`mgxs_lib_spec`. Unlike the continuous-energy mode, the multi-group mode does not explicitly track particles produced from scattering multiplication (i.e., :math:`(n,xn)`) reactions. These are instead accounted for by adjusting the weight of the particle after the collision such that the correct total weight is maintained. -The information for how to adjust this weight is optionally provided by the -`multiplicity` data which exists as a group-wise matrix. This data represents -the average number of particles emitted from a scattering reaction, given a -scattering reaction has occurred: +The weight adjustment factor is optionally provided by the `multiplicity` data +which is required to be provided in the form of a group-wise matrix. +This data is provided as a group-wise matrix since the probability of producing +multiple particles in a scattering reaction depends on both the incoming energy, +`g`, and the sampled outgoing energy, `g'`. This data represents the average +number of particles emitted from a scattering reaction, given a scattering +reaction has occurred: .. math:: multiplicity_{g \arrow g'} = \frac{\nu_{scatter}\sigma_{s,g \arrow g'}}{ \sigma_{s,g \arrow g'}} -This data is provided as a group-wise matrix since the probability of producing -multiple particles in a scattering reaction depends on both the incoming energy, -`g`, and the sampled outgoing energy, `g'`. - If this scattering multiplication information is not provided in the library then no weight adjustment will be performed. This is equivalent to neglecting any additional particles produced in scattering multiplication reactions. @@ -134,7 +132,7 @@ follows: \sigma_{a,g} = \sigma_{t,g} - \sum_{g'}{\nu_{scatter}\sigma_{s,g \arrow g'}} -The above method is the same as is typically done with most deterministic methods. +The above method is the same as is usually done with most deterministic solvers. Note that this method is less accurate than using the scattering multiplication weight adjustment since simply reducing the absorption cross section does not include any information about the outgoing energy of the particles produced in diff --git a/docs/source/methods/physics.rst b/docs/source/methods/physics.rst index 3a243f7e8c..e08965371c 100644 --- a/docs/source/methods/physics.rst +++ b/docs/source/methods/physics.rst @@ -219,7 +219,7 @@ Multi-Group Scattering In multi-group mode, a scattering collision requires that the outgoing energy group of the simulated particle be selected from a probability distribution, -then the change-in-angle selected from a probability distribution according to +the change-in-angle selected from a probability distribution according to the outgoing energy group, and finally the particle's weight adjusted again according to the outgoing energy group. @@ -232,17 +232,19 @@ produced from the outgoing group (`g'`) data for the given incoming group (`g`): CDF = \sum_{g'=0}^{h}\Sigma_{s,g \arrow g'} If the scattering data is represented as a Legendre expansion, then the -value of :math:`\Sigma_{s,g \arrow g'}` above is simply the 0th order. If the -data is provided as tabular or histogram data, then the value of -:math:`\Sigma_{s,g \arrow g'}` is the sum of all bins of data for a given `g` -and `g'` pair. +value of :math:`\Sigma_{s,g \arrow g'}` above is simply the 0th order for the +given group transfer. If the data is provided as tabular or histogram data, then +the value of :math:`\Sigma_{s,g \arrow g'}` is the sum of all bins of data for a +given `g` and `g'` pair. Now that the outgoing energy is known the change-in-angle, :math:`\mu` can be determined. If the data is provided as a Legendre expansion, this is done by rejection sampling of the probability distribution represented by the Legendre series. For efficiency, the selected values of the PDF (:math:`f(\mu)`) are chosen to be between 0 and the maximum value of :math:`f(\mu)` in the domain of --1 to 1. +-1 to 1. Note that this sampling scheme automatically forces negative values of +the :math:`f(\mu)` probability distribution function to be treated as zero +probabilities. If the angular data is instead provided as a tabular representation, then the value of :math:`\mu` is selected as described in the :ref:`angle-tabular` @@ -254,7 +256,7 @@ the selection of the outgoing energy (since the energy group representation is simply a histogram representation) except the CDF is composed of the angular bins and not the energy groups. However, since we are interested in a specific value of :math:`\mu` instead of a group, then an angle selected from a uniform -distribution within from the chosen histogram bin. +distribution within from the chosen angular bin. The final step in the scattering treatment is to adjust the weight of the neutron to account for any production of neutrons due to :math:`(n,xn)` From 1f60c365a6b22f817fd26dcaf1d92d60e30a8bb9 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 15 Jun 2016 19:36:39 -0400 Subject: [PATCH 629/650] Fixed typos after building and looking at html --- docs/source/methods/cross_sections.rst | 15 ++++++++------- docs/source/methods/physics.rst | 14 +++++++------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/docs/source/methods/cross_sections.rst b/docs/source/methods/cross_sections.rst index 9c11d3626d..869040f5df 100644 --- a/docs/source/methods/cross_sections.rst +++ b/docs/source/methods/cross_sections.rst @@ -75,7 +75,7 @@ are represented using a multi-group library format specific to the OpenMC code. The format is described in the :ref:`mgxs_lib_spec`. The data itself can be prepared via traditional paths or directly from a continuous-energy OpenMC calculation by use of the Python API as is shown in the -Python API :ref:`_notebook_mgxs_part_iv` example notebook. This multi-group +:ref:`notebook_mgxs_part_iv` example notebook. This multi-group library consists of meta-data (such as the energy group structure) and multiple `xsdata` objects which contains the required microscopic or macroscopic multi-group data. @@ -83,9 +83,10 @@ multi-group data. At a minimum, the library must contain the absorption cross section (:math:`\sigma_{a,g}`) and a scattering matrix. If the problem is an eigenvalue problem then all fissionable materials must also contain either -a fission production matrix cross section (:math:`\nu\sigma_{f,g\arrow\g'}`), or -both the fission spectrum data (:math:`\chi{g'}`) and a fission production cross -section (:math:`\nu\sigma_{f,g}`), or, . The library must also contain +a fission production matrix cross section +(:math:`\nu\sigma_{f,g\rightarrow g'}`), or +both the fission spectrum data (:math:`\chi_{g'}`) and a fission production +cross section (:math:`\nu\sigma_{f,g}`), or, . The library must also contain the fission cross section (:math:`\sigma_{f,g}`) or the fission energy release cross section (:math:`\kappa\sigma_{f,g}`) if the associated tallies are required by the model using the library. @@ -113,8 +114,8 @@ reaction has occurred: .. math:: - multiplicity_{g \arrow g'} = \frac{\nu_{scatter}\sigma_{s,g \arrow g'}}{ - \sigma_{s,g \arrow g'}} + multiplicity_{g \rightarrow g'} = \frac{\nu_{scatter}\sigma_{s,g \rightarrow g'}}{ + \sigma_{s,g \rightarrow g'}} If this scattering multiplication information is not provided in the library then no weight adjustment will be performed. This is equivalent to neglecting @@ -130,7 +131,7 @@ follows: .. math:: - \sigma_{a,g} = \sigma_{t,g} - \sum_{g'}{\nu_{scatter}\sigma_{s,g \arrow g'}} + \sigma_{a,g} = \sigma_{t,g} - \sum_{g'}\nu_{scatter}\sigma_{s,g \rightarrow g'} The above method is the same as is usually done with most deterministic solvers. Note that this method is less accurate than using the scattering multiplication diff --git a/docs/source/methods/physics.rst b/docs/source/methods/physics.rst index e08965371c..bb26ffec53 100644 --- a/docs/source/methods/physics.rst +++ b/docs/source/methods/physics.rst @@ -87,7 +87,7 @@ Elastic Scattering Note that the multi-group mode makes no distinction between elastic or inelastic scattering reactions. The spceific multi-group scattering -implementation is discussed in the multi-group-scatter_ section. +implementation is discussed in the :ref:`multi-group-scatter` section. Elastic scattering refers to the process by which a neutron scatters off a nucleus and does not leave it in an excited. It is referred to as "elastic" @@ -182,7 +182,7 @@ Inelastic Scattering Note that the multi-group mode makes no distinction between elastic or inelastic scattering reactions. The spceific multi-group scattering -implementation is discussed in the multi-group-scatter_ section. +implementation is discussed in the :ref:`multi-group-scatter` section. The major algorithms for inelastic scattering were described in previous sections. First, a scattering cosine is sampled using the algorithms in @@ -202,7 +202,7 @@ secondary photons from nuclear de-excitation are tracked in OpenMC. Note that the multi-group mode makes no distinction between elastic or inelastic scattering reactions. The specific multi-group scattering -implementation is discussed in the multi-group-scatter_ section. +implementation is discussed in the :ref:`multi-group-scatter` section. These types of reactions are just treated as inelastic scattering and as such are subject to the same procedure as described in :ref:`inelastic-scatter`. For @@ -229,13 +229,13 @@ incoming energy group is to select a random number (:math:`\xi`) between 0 and produced from the outgoing group (`g'`) data for the given incoming group (`g`): .. math:: - CDF = \sum_{g'=0}^{h}\Sigma_{s,g \arrow g'} + CDF = \sum_{g'=0}^{h}\Sigma_{s,g \rightarrow g'} If the scattering data is represented as a Legendre expansion, then the -value of :math:`\Sigma_{s,g \arrow g'}` above is simply the 0th order for the +value of :math:`\Sigma_{s,g \rightarrow g'}` above is the 0th order forthe given group transfer. If the data is provided as tabular or histogram data, then -the value of :math:`\Sigma_{s,g \arrow g'}` is the sum of all bins of data for a -given `g` and `g'` pair. +:math:`\Sigma_{s,g \rightarrow g'}` is the sum of all bins of data for a given +`g` and `g'` pair. Now that the outgoing energy is known the change-in-angle, :math:`\mu` can be determined. If the data is provided as a Legendre expansion, this is done by From 1a1320a2be9d13a755761b31329c4cf49e994599 Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Thu, 16 Jun 2016 09:44:29 -0500 Subject: [PATCH 630/650] Address #618 comments --- data/get_multipole_data.py | 1 - docs/source/io_formats/data_wmp.rst | 4 ++-- openmc/cell.py | 1 + src/cross_section.F90 | 15 +++++++++++---- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/data/get_multipole_data.py b/data/get_multipole_data.py index 4af4ebbf55..d51c196dcc 100755 --- a/data/get_multipole_data.py +++ b/data/get_multipole_data.py @@ -81,7 +81,6 @@ print('Verifying MD5 checksums...') for f, checksum in zip(files, checksums): fname = f[:-9] if f.endswith('?raw=true') else f downloadsum = hashlib.md5(open(fname, 'rb').read()).hexdigest() - print(downloadsum) if downloadsum != checksum: raise IOError("MD5 checksum for {} does not match. If this is your first " "time receiving this message, please re-run the script. " diff --git a/docs/source/io_formats/data_wmp.rst b/docs/source/io_formats/data_wmp.rst index 268afa2dbf..d645c6e8f1 100644 --- a/docs/source/io_formats/data_wmp.rst +++ b/docs/source/io_formats/data_wmp.rst @@ -20,8 +20,8 @@ Windowed Multipole Library Format are stored as .. math:: - \text{data}[:,i] = [\text{pole},~\text{residue}_1,~\text{residue}_2, - ~\ldots]` + \text{data}[:,i] = [\text{pole},~\text{residue}_1,~\text{residue}_2, + ~\ldots] The residues are in the order: total, competitive if present, absorption, fission. Complex numbers are stored by forming a type with diff --git a/openmc/cell.py b/openmc/cell.py index 936ffd94fe..9ff5d1fa30 100644 --- a/openmc/cell.py +++ b/openmc/cell.py @@ -58,6 +58,7 @@ class Cell(object): rotation : Iterable of float If the cell is filled with a universe, this array specifies the angles in degrees about the x, y, and z axes that the filled universe should be + rotated. The rotation applied is an intrinsic rotation with specified Tait-Bryan angles. That is to say, if the angles are :math:`(\phi, \theta, \psi)`, then the rotation matrix applied is :math:`R_z(\psi) R_y(\theta) R_x(\phi)` or diff --git a/src/cross_section.F90 b/src/cross_section.F90 index 32f7414312..a8acb25a83 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -151,6 +151,7 @@ contains ! material union energy grid real(8), intent(in) :: sqrtkT ! Square root of kT, material dependent + logical :: use_mp ! true if XS can be calculated with windowed multipole integer :: i_grid ! index on nuclide energy grid integer :: i_low ! lower logarithmic mapping index integer :: i_high ! upper logarithmic mapping index @@ -163,11 +164,17 @@ contains nuc => nuclides(i_nuclide) mat => materials(i_mat) - ! If MP, don't interpolate, it's all already baked in. - if (nuc % mp_present .and. & - (E >= nuc % multipole % start_E/1.0e6_8 .and.& - E <= nuc % multipole % end_E/1.0e6_8)) then + ! Check to see if there is multipole data present at this energy + use_mp = .false. + if (nuc % mp_present) then + if (E >= nuc % multipole % start_E/1.0e6_8 .and. & + E <= nuc % multipole % end_E/1.0e6_8) then + use_mp = .true. + end if + end if + ! Evaluate multipole or interpolate + if (use_mp) then ! Call multipole kernel call multipole_eval(nuc % multipole, E, sqrtkT, sigT, sigA, sigF) From 8ea1c5e023b26126eb519aa8aa7156c5c16751fd Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Thu, 16 Jun 2016 19:39:21 -0400 Subject: [PATCH 631/650] Fixed two typos --- docs/source/methods/introduction.rst | 2 +- docs/source/methods/physics.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/methods/introduction.rst b/docs/source/methods/introduction.rst index 0bd067470c..dab1c544ad 100644 --- a/docs/source/methods/introduction.rst +++ b/docs/source/methods/introduction.rst @@ -124,7 +124,7 @@ proceed. The life of a single particle will proceed as follows: continuous-energy simulation, reactions of type :math:`(n,xn)` are treated as scattering and any additional particles which may be created are added to a secondary particle bank to be tracked later. In a multi-group - simulation, this secondary bank is ont used but the particle weight is + simulation, this secondary bank is not used but the particle weight is increased accordingly. The original particle then continues from step 3. If the reaction is absorption or fission, the particle dies and if necessary, fission sites are created and stored in the fission bank. diff --git a/docs/source/methods/physics.rst b/docs/source/methods/physics.rst index bb26ffec53..b246584c8b 100644 --- a/docs/source/methods/physics.rst +++ b/docs/source/methods/physics.rst @@ -8,7 +8,7 @@ There are limited differences between physics treatments used in the continuous-energy and multi-group modes. If distinctions are necessary, each of the following sections will provide an explanation of the differences. Otherwise, replacing any references of the particle's energy (`E`) with -references to the particle's energy group (`g) will suffice. +references to the particle's energy group (`g`) will suffice. ----------------------------------- Sampling Distance to Next Collision From 2ae943c37c279337cd5667dcea5ee609f6c703e5 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 22 Jun 2016 13:07:34 +0700 Subject: [PATCH 632/650] Make sure densities are repeated when calculating microscopic cross sections for Legendre moments --- openmc/mgxs/mgxs.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 088db649fa..c12c61bdf4 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1517,6 +1517,7 @@ class MGXS(object): densities = self.get_nuclide_densities(nuclides) else: densities = self.get_nuclide_densities('sum') + densities = np.repeat(densities, len(self.rxn_rate_tally.scores)) tile_factor = df.shape[0] / len(densities) df['mean'] /= np.tile(densities, tile_factor) df['std. dev.'] /= np.tile(densities, tile_factor) From 40b05fe94e16731703ca758a55953d62f353fc7a Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 29 Jun 2016 10:17:31 +0700 Subject: [PATCH 633/650] Ensure source bank is resampled at each generation for fixed source --- docs/source/usersguide/input.rst | 2 +- src/particle_restart.F90 | 7 ++++++- src/simulation.F90 | 10 +++++++++- tests/test_fixed_source/results_true.dat | 8 ++++---- tests/test_particle_restart_fixed/results_true.dat | 10 +++++----- .../test_particle_restart_fixed.py | 2 +- 6 files changed, 26 insertions(+), 13 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 4c1f238238..d6802075e5 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -688,7 +688,7 @@ attributes/sub-elements: *Default*: false - :source_write: + :write: If this element is set to "false", source sites are not written to the state point or source point file. This can substantially reduce the size of state points if large numbers of particles per batch are used. diff --git a/src/particle_restart.F90 b/src/particle_restart.F90 index e5cca17bf8..846d37160d 100644 --- a/src/particle_restart.F90 +++ b/src/particle_restart.F90 @@ -97,10 +97,15 @@ contains call read_dataset(p % id, file_id, 'id') call read_dataset(p % wgt, file_id, 'weight') call read_dataset(p % E, file_id, 'energy') - call read_dataset(p % g, file_id, 'energy_group') call read_dataset(p % coord(1) % xyz, file_id, 'xyz') call read_dataset(p % coord(1) % uvw, file_id, 'uvw') + ! Set energy group and average energy in multi-group mode + if (.not. run_CE) then + p % g = int(p % E) + p % E = energy_bin_avg(p % g) + end if + ! Set particle last attributes p % last_wgt = p % wgt p % last_xyz = p % coord(1)%xyz diff --git a/src/simulation.F90 b/src/simulation.F90 index b762979d73..2e15e7c07a 100644 --- a/src/simulation.F90 +++ b/src/simulation.F90 @@ -17,7 +17,7 @@ module simulation print_batch_keff, print_generation use particle_header, only: Particle use random_lcg, only: set_particle_seed - use source, only: initialize_source + use source, only: initialize_source, sample_external_source use state_point, only: write_state_point, write_source_point use string, only: to_str use tally, only: synchronize_tallies, setup_active_usertallies, & @@ -227,6 +227,8 @@ contains subroutine finalize_generation() + integer(8) :: i + ! Update global tallies with the omp private accumulation variables !$omp parallel !$omp critical @@ -271,6 +273,12 @@ contains ! Write generation output if (master .and. current_gen /= gen_per_batch) call print_generation() + elseif (run_mode == MODE_FIXEDSOURCE) then + ! For fixed-source mode, we need to sample the external source + call set_particle_seed(overall_gen*n_particles) + do i = 1, work + call sample_external_source(source_bank(i)) + end do end if end subroutine finalize_generation diff --git a/tests/test_fixed_source/results_true.dat b/tests/test_fixed_source/results_true.dat index c7ddf3c0b5..eece8dc1c2 100644 --- a/tests/test_fixed_source/results_true.dat +++ b/tests/test_fixed_source/results_true.dat @@ -1,6 +1,6 @@ tally 1: -4.518784E+02 -2.056386E+04 +4.460676E+02 +1.993197E+04 leakage: -9.750000E+00 -9.508100E+00 +9.660000E+00 +9.335800E+00 diff --git a/tests/test_particle_restart_fixed/results_true.dat b/tests/test_particle_restart_fixed/results_true.dat index de42a0c68e..9cc800cf67 100644 --- a/tests/test_particle_restart_fixed/results_true.dat +++ b/tests/test_particle_restart_fixed/results_true.dat @@ -1,16 +1,16 @@ current batch: -7.000000E+00 +9.000000E+00 current gen: 1.000000E+00 particle id: -9.280000E+02 +5.900000E+02 run mode: fixed source particle weight: 1.000000E+00 particle energy: -4.412022E+00 +5.284635E+00 particle xyz: -5.572639E+00 -9.139472E+00 -1.974824E+00 +4.995064E+00 7.895146E+00 1.198717E+00 particle uvw: -1.410422E-01 5.330426E-01 -8.342498E-01 +7.594252E-01 3.731736E-01 -5.329305E-01 diff --git a/tests/test_particle_restart_fixed/test_particle_restart_fixed.py b/tests/test_particle_restart_fixed/test_particle_restart_fixed.py index 5af7454894..fcd377f13b 100644 --- a/tests/test_particle_restart_fixed/test_particle_restart_fixed.py +++ b/tests/test_particle_restart_fixed/test_particle_restart_fixed.py @@ -7,5 +7,5 @@ from testing_harness import ParticleRestartTestHarness if __name__ == '__main__': - harness = ParticleRestartTestHarness('particle_7_928.*') + harness = ParticleRestartTestHarness('particle_9_590.h5') harness.main() From 70daa76e0e9d0bd8163e5c9d306788dbd7cf30c6 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 29 Jun 2016 18:33:59 +0700 Subject: [PATCH 634/650] Make sure MT=3 cross section is not used --- src/ace.F90 | 2 +- src/constants.F90 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ace.F90 b/src/ace.F90 index cbe14b6ae8..170c885f02 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -913,7 +913,7 @@ contains ! Skip total inelastic level scattering, gas production cross sections ! (MT=200+), etc. - if (rxn % MT == N_LEVEL) cycle + if (rxn % MT == N_LEVEL .or. rxn % MT == N_NONELASTIC) cycle if (rxn % MT > N_5N2P .and. rxn % MT < N_P0) cycle ! Skip level cross sections if total is available diff --git a/src/constants.F90 b/src/constants.F90 index f6e82d9bdc..75c047e8d6 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -207,7 +207,7 @@ module constants N_4N2P = 194, N_4N2A = 195, N_4NPA = 196, N_3P = 197, N_N3P = 198, & N_3N2PA = 199, N_5N2P = 200, N_P0 = 600, N_PC = 649, N_D0 = 650, & N_DC = 699, N_T0 = 700, N_TC = 749, N_3HE0 = 750, N_3HEC = 799, & - N_A0 = 800, N_AC = 849, N_2N0 = 875, N_2NC = 891 + N_A0 = 800, N_AC = 849, N_2N0 = 875, N_2NC = 891, N_NONELASTIC = 3 ! ACE table types integer, parameter :: & From 348eb44b6fb63fd4f1b1bfa9d859aee041459ec2 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 29 Jun 2016 18:51:26 +0700 Subject: [PATCH 635/650] Make sure fixed source resample is reproducible for MPI runs --- src/simulation.F90 | 2 +- tests/test_fixed_source/results_true.dat | 8 ++++---- tests/test_particle_restart_fixed/results_true.dat | 10 +++++----- .../test_particle_restart_fixed.py | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/simulation.F90 b/src/simulation.F90 index 2e15e7c07a..3321dc70fa 100644 --- a/src/simulation.F90 +++ b/src/simulation.F90 @@ -275,8 +275,8 @@ contains if (master .and. current_gen /= gen_per_batch) call print_generation() elseif (run_mode == MODE_FIXEDSOURCE) then ! For fixed-source mode, we need to sample the external source - call set_particle_seed(overall_gen*n_particles) do i = 1, work + call set_particle_seed(overall_gen*n_particles + work_index(rank) + i) call sample_external_source(source_bank(i)) end do end if diff --git a/tests/test_fixed_source/results_true.dat b/tests/test_fixed_source/results_true.dat index eece8dc1c2..6246dfaf62 100644 --- a/tests/test_fixed_source/results_true.dat +++ b/tests/test_fixed_source/results_true.dat @@ -1,6 +1,6 @@ tally 1: -4.460676E+02 -1.993197E+04 +4.448476E+02 +1.984373E+04 leakage: -9.660000E+00 -9.335800E+00 +9.790000E+00 +9.588300E+00 diff --git a/tests/test_particle_restart_fixed/results_true.dat b/tests/test_particle_restart_fixed/results_true.dat index 9cc800cf67..047760a2d5 100644 --- a/tests/test_particle_restart_fixed/results_true.dat +++ b/tests/test_particle_restart_fixed/results_true.dat @@ -1,16 +1,16 @@ current batch: -9.000000E+00 +7.000000E+00 current gen: 1.000000E+00 particle id: -5.900000E+02 +1.440000E+02 run mode: fixed source particle weight: 1.000000E+00 particle energy: -5.284635E+00 +5.749729E+00 particle xyz: -4.995064E+00 7.895146E+00 1.198717E+00 +8.754675E+00 2.551620E+00 4.394350E-01 particle uvw: -7.594252E-01 3.731736E-01 -5.329305E-01 +-5.971721E-01 -4.845709E-01 6.391999E-01 diff --git a/tests/test_particle_restart_fixed/test_particle_restart_fixed.py b/tests/test_particle_restart_fixed/test_particle_restart_fixed.py index fcd377f13b..df0398c6eb 100644 --- a/tests/test_particle_restart_fixed/test_particle_restart_fixed.py +++ b/tests/test_particle_restart_fixed/test_particle_restart_fixed.py @@ -7,5 +7,5 @@ from testing_harness import ParticleRestartTestHarness if __name__ == '__main__': - harness = ParticleRestartTestHarness('particle_9_590.h5') + harness = ParticleRestartTestHarness('particle_7_144.h5') harness.main() From 49889f7128243e7b6a7f093e633078a046727e4b Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 29 Jun 2016 20:48:53 +0700 Subject: [PATCH 636/650] @smharper calling me out on my laziness --- src/constants.F90 | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/constants.F90 b/src/constants.F90 index 75c047e8d6..b3e5ed89b1 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -186,28 +186,28 @@ module constants ! Reaction types integer, parameter :: & - TOTAL_XS = 1, ELASTIC = 2, N_LEVEL = 4, MISC = 5, N_2ND = 11, & - N_2N = 16, N_3N = 17, N_FISSION = 18, N_F = 19, N_NF = 20, & - N_2NF = 21, N_NA = 22, N_N3A = 23, N_2NA = 24, N_3NA = 25, & - N_NP = 28, N_N2A = 29, N_2N2A = 30, N_ND = 32, N_NT = 33, & - N_N3HE = 34, N_ND2A = 35, N_NT2A = 36, N_4N = 37, N_3NF = 38, & - N_2NP = 41, N_3NP = 42, N_N2P = 44, N_NPA = 45, N_N1 = 51, & - N_N40 = 90, N_NC = 91, N_DISAPPEAR = 101, N_GAMMA = 102, N_P = 103, & - N_D = 104, N_T = 105, N_3HE = 106, N_A = 107, N_2A = 108, & - N_3A = 109, N_2P = 111, N_PA = 112, N_T2A = 113, N_D2A = 114, & - N_PD = 115, N_PT = 116, N_DA = 117, N_5N = 152, N_6N = 153, & - N_2NT = 154, N_TA = 155, N_4NP = 156, N_3ND = 157, N_NDA = 158, & - N_2NPA = 159, N_7N = 160, N_8N = 161, N_5NP = 162, N_6NP = 163, & - N_7NP = 164, N_4NA = 165, N_5NA = 166, N_6NA = 167, N_7NA = 168, & - N_4ND = 169, N_5ND = 170, N_6ND = 171, N_3NT = 172, N_4NT = 173, & - N_5NT = 174, N_6NT = 175, N_2N3HE = 176, N_3N3HE = 177, N_4N3HE = 178, & - N_3N2P = 179, N_3N3A = 180, N_3NPA = 181, N_DT = 182, N_NPD = 183, & - N_NPT = 184, N_NDT = 185, N_NP3HE = 186, N_ND3HE = 187, N_NT3HE = 188, & - N_NTA = 189, N_2N2P = 190, N_P3HE = 191, N_D3HE = 192, N_3HEA = 193, & - N_4N2P = 194, N_4N2A = 195, N_4NPA = 196, N_3P = 197, N_N3P = 198, & - N_3N2PA = 199, N_5N2P = 200, N_P0 = 600, N_PC = 649, N_D0 = 650, & - N_DC = 699, N_T0 = 700, N_TC = 749, N_3HE0 = 750, N_3HEC = 799, & - N_A0 = 800, N_AC = 849, N_2N0 = 875, N_2NC = 891, N_NONELASTIC = 3 + TOTAL_XS = 1, ELASTIC = 2, N_NONELASTIC = 3, N_LEVEL = 4, MISC = 5, & + N_2ND = 11, N_2N = 16, N_3N = 17, N_FISSION = 18, N_F = 19, & + N_NF = 20, N_2NF = 21, N_NA = 22, N_N3A = 23, N_2NA = 24, & + N_3NA = 25, N_NP = 28, N_N2A = 29, N_2N2A = 30, N_ND = 32, & + N_NT = 33, N_N3HE = 34, N_ND2A = 35, N_NT2A = 36, N_4N = 37, & + N_3NF = 38, N_2NP = 41, N_3NP = 42, N_N2P = 44, N_NPA = 45, & + N_N1 = 51, N_N40 = 90, N_NC = 91, N_DISAPPEAR = 101, N_GAMMA = 102, & + N_P = 103, N_D = 104, N_T = 105, N_3HE = 106, N_A = 107, & + N_2A = 108, N_3A = 109, N_2P = 111, N_PA = 112, N_T2A = 113, & + N_D2A = 114, N_PD = 115, N_PT = 116, N_DA = 117, N_5N = 152, & + N_6N = 153, N_2NT = 154, N_TA = 155, N_4NP = 156, N_3ND = 157, & + N_NDA = 158, N_2NPA = 159, N_7N = 160, N_8N = 161, N_5NP = 162, & + N_6NP = 163, N_7NP = 164, N_4NA = 165, N_5NA = 166, N_6NA = 167, & + N_7NA = 168, N_4ND = 169, N_5ND = 170, N_6ND = 171, N_3NT = 172, & + N_4NT = 173, N_5NT = 174, N_6NT = 175, N_2N3HE = 176, N_3N3HE = 177, & + N_4N3HE = 178, N_3N2P = 179, N_3N3A = 180, N_3NPA = 181, N_DT = 182, & + N_NPD = 183, N_NPT = 184, N_NDT = 185, N_NP3HE = 186, N_ND3HE = 187, & + N_NT3HE = 188, N_NTA = 189, N_2N2P = 190, N_P3HE = 191, N_D3HE = 192, & + N_3HEA = 193, N_4N2P = 194, N_4N2A = 195, N_4NPA = 196, N_3P = 197, & + N_N3P = 198, N_3N2PA = 199, N_5N2P = 200, N_P0 = 600, N_PC = 649, & + N_D0 = 650, N_DC = 699, N_T0 = 700, N_TC = 749, N_3HE0 = 750, & + N_3HEC = 799, N_A0 = 800, N_AC = 849, N_2N0 = 875, N_2NC = 891 ! ACE table types integer, parameter :: & From c7a0b716d26779b61c197a5bfcf0b64a884c9c7b Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 1 Jul 2016 22:57:14 +0700 Subject: [PATCH 637/650] General cleanup -- both bugs and style issues -- based on running pylint --- openmc/arithmetic.py | 7 +++-- openmc/cell.py | 5 ++-- openmc/checkvalue.py | 4 +-- openmc/cmfd.py | 6 ++--- openmc/element.py | 7 ++--- openmc/filter.py | 5 ++-- openmc/geometry.py | 30 +++++++++++---------- openmc/lattice.py | 9 +++---- openmc/macroscopic.py | 10 ++----- openmc/material.py | 26 +++++++++--------- openmc/mesh.py | 17 ++++++------ openmc/mgxs/library.py | 54 ++++++++++++++----------------------- openmc/mgxs/mgxs.py | 37 +++++++++++++------------ openmc/mgxs_library.py | 17 +++++------- openmc/nuclide.py | 23 ++++++---------- openmc/opencg_compatible.py | 33 ++++++++--------------- openmc/particle_restart.py | 3 --- openmc/plots.py | 13 ++++----- openmc/region.py | 4 +-- openmc/settings.py | 28 ++++++++++--------- openmc/source.py | 8 ++++++ openmc/statepoint.py | 2 +- openmc/stats/univariate.py | 4 +-- openmc/summary.py | 15 ++++++----- openmc/surface.py | 23 +++++++++------- openmc/tallies.py | 54 +++++++++++++++++-------------------- openmc/trigger.py | 7 ++--- openmc/universe.py | 15 +++++------ setup.py | 1 - 29 files changed, 215 insertions(+), 252 deletions(-) diff --git a/openmc/arithmetic.py b/openmc/arithmetic.py index f9ef58db89..74ed760c7a 100644 --- a/openmc/arithmetic.py +++ b/openmc/arithmetic.py @@ -1,6 +1,5 @@ import sys import copy -from numbers import Integral from collections import Iterable import numpy as np @@ -321,7 +320,7 @@ class CrossFilter(object): @type.setter def type(self, filter_type): - if filter_type not in _FILTER_TYPES.values(): + if filter_type not in _FILTER_TYPES: msg = 'Unable to set CrossFilter type to "{0}" since it ' \ 'is not one of the supported types'.format(filter_type) raise ValueError(msg) @@ -576,7 +575,7 @@ class AggregateNuclide(object): @nuclides.setter def nuclides(self, nuclides): cv.check_iterable_type('nuclides', nuclides, - (basestring, Nuclide, CrossNuclide)) + (basestring, Nuclide, CrossNuclide)) self._nuclides = nuclides @aggregate_op.setter @@ -691,7 +690,7 @@ class AggregateFilter(object): @type.setter def type(self, filter_type): - if filter_type not in _FILTER_TYPES.values(): + if filter_type not in _FILTER_TYPES: msg = 'Unable to set AggregateFilter type to "{0}" since it ' \ 'is not one of the supported types'.format(filter_type) raise ValueError(msg) diff --git a/openmc/cell.py b/openmc/cell.py index 9ff5d1fa30..9055f10e59 100644 --- a/openmc/cell.py +++ b/openmc/cell.py @@ -21,6 +21,7 @@ AUTO_CELL_ID = 10000 def reset_auto_cell_id(): + """Reset counter for auto-generated cell IDs.""" global AUTO_CELL_ID AUTO_CELL_ID = 10000 @@ -421,7 +422,7 @@ class Cell(object): # Append all Cells in each Cell in the Universe to the dictionary cells = self.get_all_cells() - for cell_id, cell in cells.items(): + for cell in cells.values(): materials.update(cell.get_all_materials()) return materials @@ -497,7 +498,7 @@ class Cell(object): if self.temperature is not None: if isinstance(self.temperature, Iterable): element.set("temperature", ' '.join( - str(t) for t in self.temperature)) + str(t) for t in self.temperature)) else: element.set("temperature", str(self.temperature)) diff --git a/openmc/checkvalue.py b/openmc/checkvalue.py index cc0e1190df..7c0dff99dd 100644 --- a/openmc/checkvalue.py +++ b/openmc/checkvalue.py @@ -1,6 +1,5 @@ import copy from collections import Iterable -from numbers import Integral, Real import numpy as np @@ -162,7 +161,7 @@ def check_length(name, value, length_min, length_max=None): else: msg = 'Unable to set "{0}" to "{1}" since it must have length ' \ 'between "{2}" and "{3}"'.format(name, value, length_min, - length_max) + length_max) raise ValueError(msg) @@ -255,6 +254,7 @@ class CheckedList(list): """ def __init__(self, expected_type, name, items=[]): + super(CheckedList, self).__init__() self.expected_type = expected_type self.name = name for item in items: diff --git a/openmc/cmfd.py b/openmc/cmfd.py index d4cce2af5a..76d8685ff1 100644 --- a/openmc/cmfd.py +++ b/openmc/cmfd.py @@ -15,9 +15,7 @@ from numbers import Real, Integral from xml.etree import ElementTree as ET import sys -import numpy as np - -from openmc.clean_xml import * +from openmc.clean_xml import clean_xml_indentation from openmc.checkvalue import (check_type, check_length, check_value, check_greater_than, check_less_than) @@ -188,7 +186,7 @@ class CMFDMesh(object): class CMFD(object): - """Parameters that control the use of coarse-mesh finite difference acceleration + r"""Parameters that control the use of coarse-mesh finite difference acceleration in OpenMC. This corresponds directly to the cmfd.xml input file. Attributes diff --git a/openmc/element.py b/openmc/element.py index 14c98d4952..2e22702d99 100644 --- a/openmc/element.py +++ b/openmc/element.py @@ -45,9 +45,9 @@ class Element(object): def __eq__(self, other): if isinstance(other, Element): - if self._name != other._name: + if self._name != other.name: return False - elif self._xs != other._xs: + elif self._xs != other.xs: return False else: return True @@ -68,9 +68,6 @@ class Element(object): def __hash__(self): return hash(repr(self)) - def __hash__(self): - return hash(repr(self)) - def __repr__(self): string = 'Element - {0}\n'.format(self._name) string += '{0: <16}{1}{2}\n'.format('\tXS', '=\t', self._xs) diff --git a/openmc/filter.py b/openmc/filter.py index 72fb3b14ed..bc8b5bdf77 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -6,7 +6,6 @@ import sys import numpy as np from openmc import Mesh -from openmc.summary import Summary import openmc.checkvalue as cv @@ -391,7 +390,7 @@ class Filter(object): if self.type == 'mesh': # Convert (x,y,z) to a single bin -- this is similar to # subroutine mesh_indices_to_bin in openmc/src/mesh.F90. - if (len(self.mesh.dimension) == 3): + if len(self.mesh.dimension) == 3: nx, ny, nz = self.mesh.dimension val = (filter_bin[0] - 1) * ny * nz + \ (filter_bin[1] - 1) * nz + \ @@ -568,7 +567,7 @@ class Filter(object): mesh_key = 'mesh {0}'.format(self.mesh.id) # Find mesh dimensions - use 3D indices for simplicity - if (len(self.mesh.dimension) == 3): + if len(self.mesh.dimension) == 3: nx, ny, nz = self.mesh.dimension else: nx, ny = self.mesh.dimension diff --git a/openmc/geometry.py b/openmc/geometry.py index 2625ed3fa5..14fd48fb1e 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -1,11 +1,13 @@ -from collections import Iterable, OrderedDict +from collections import OrderedDict from xml.etree import ElementTree as ET import openmc -from openmc.clean_xml import * +from openmc.clean_xml import sort_xml_elements, clean_xml_indentation from openmc.checkvalue import check_type + def reset_auto_ids(): + """Reset counters for all auto-generated IDs""" openmc.reset_auto_material_id() openmc.reset_auto_surface_id() openmc.reset_auto_cell_id() @@ -40,10 +42,10 @@ class Geometry(object): @root_universe.setter def root_universe(self, root_universe): check_type('root universe', root_universe, openmc.Universe) - if root_universe._id != 0: + if root_universe.id != 0: msg = 'Unable to add root Universe "{0}" to Geometry since ' \ 'it has ID="{1}" instead of ' \ - 'ID=0'.format(root_universe, root_universe._id) + 'ID=0'.format(root_universe, root_universe.id) raise ValueError(msg) self._root_universe = root_universe @@ -281,9 +283,9 @@ class Geometry(object): The name to match case_sensitive : bool Whether to distinguish upper and lower case letters in each - material's name (default is True) + material's name (default is False) matching : bool - Whether the names must match completely (default is True) + Whether the names must match completely (default is False) Returns ------- @@ -321,9 +323,9 @@ class Geometry(object): The name to search match case_sensitive : bool Whether to distinguish upper and lower case letters in each - cell's name (default is True) + cell's name (default is False) matching : bool - Whether the names must match completely (default is True) + Whether the names must match completely (default is False) Returns ------- @@ -361,9 +363,9 @@ class Geometry(object): The name to match case_sensitive : bool Whether to distinguish upper and lower case letters in each - cell's name (default is True) + cell's name (default is False) matching : bool - Whether the names must match completely (default is True) + Whether the names must match completely (default is False) Returns ------- @@ -401,9 +403,9 @@ class Geometry(object): The name to match case_sensitive : bool Whether to distinguish upper and lower case letters in each - universe's name (default is True) + universe's name (default is False) matching : bool - Whether the names must match completely (default is True) + Whether the names must match completely (default is False) Returns ------- @@ -441,9 +443,9 @@ class Geometry(object): The name to match case_sensitive : bool Whether to distinguish upper and lower case letters in each - lattice's name (default is True) + lattice's name (default is False) matching : bool - Whether the names must match completely (default is True) + Whether the names must match completely (default is False) Returns ------- diff --git a/openmc/lattice.py b/openmc/lattice.py index 7690104c71..81144e4d81 100644 --- a/openmc/lattice.py +++ b/openmc/lattice.py @@ -6,7 +6,6 @@ from math import sqrt, floor from numbers import Real, Integral from xml.etree import ElementTree as ET import sys -import warnings import numpy as np @@ -429,14 +428,14 @@ class RectLattice(Lattice): # For 2D Lattices if self.ndim == 2: offset = self._offsets[lat_z, lat_y, lat_x, distribcell_index-1] - offset += self._universes[lat_x][lat_y].get_cell_instance(path, - distribcell_index) + offset += self._universes[lat_x][lat_y].get_cell_instance( + path, distribcell_index) # For 3D Lattices else: offset = self._offsets[lat_z, lat_y, lat_x, distribcell_index-1] offset += self._universes[lat_z][lat_y][lat_x].get_cell_instance( - path, distribcell_index) + path, distribcell_index) return offset @@ -908,7 +907,7 @@ class HexLattice(Lattice): # coordinates d_min = np.inf for idx in [(ix, ia, iz), (ix + 1, ia, iz), (ix, ia + 1, iz), - (ix + 1, ia + 1, iz)]: + (ix + 1, ia + 1, iz)]: p = self.get_local_coordinates(point, idx) d = p[0]**2 + p[1]**2 if d < d_min: diff --git a/openmc/macroscopic.py b/openmc/macroscopic.py index 9f67a50ba4..1fdf875e72 100644 --- a/openmc/macroscopic.py +++ b/openmc/macroscopic.py @@ -1,4 +1,3 @@ -from numbers import Integral import sys from openmc.checkvalue import check_type @@ -39,9 +38,9 @@ class Macroscopic(object): def __eq__(self, other): if isinstance(other, Macroscopic): - if self._name != other._name: + if self._name != other.name: return False - elif self._xs != other._xs: + elif self._xs != other.xs: return False else: return True @@ -78,8 +77,3 @@ class Macroscopic(object): def xs(self, xs): check_type('cross-section identifier', xs, basestring) self._xs = xs - - def __repr__(self): - string = 'Macroscopic - {0}\n'.format(self._name) - string += '{0: <16}{1}{2}\n'.format('\tXS', '=\t', self.xs) - return string diff --git a/openmc/material.py b/openmc/material.py index 66c2320ea4..1ba8f533a9 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -1,16 +1,16 @@ -from collections import Iterable, OrderedDict +from collections import OrderedDict from copy import deepcopy from numbers import Real, Integral import warnings from xml.etree import ElementTree as ET import sys -if sys.version_info[0] >= 3: - basestring = str import openmc import openmc.checkvalue as cv -from openmc.clean_xml import * -from openmc.data import natural_abundance +from openmc.clean_xml import sort_xml_elements, clean_xml_indentation + +if sys.version_info[0] >= 3: + basestring = str # A static variable for auto-generated Material IDs @@ -18,6 +18,7 @@ AUTO_MATERIAL_ID = 10000 def reset_auto_material_id(): + """Reset counter for auto-generated material IDs.""" global AUTO_MATERIAL_ID AUTO_MATERIAL_ID = 10000 @@ -352,8 +353,8 @@ class Material(object): self._macroscopic = macroscopic else: msg = 'Unable to add a Macroscopic to Material ID="{0}", ' \ - 'Only One Macroscopic allowed per ' \ - 'Material!'.format(self._id, macroscopic) + 'Only one Macroscopic allowed per ' \ + 'Material!'.format(self._id) raise ValueError(msg) # Generally speaking, the density for a macroscopic object will @@ -380,7 +381,7 @@ class Material(object): raise ValueError(msg) # If the Material contains the Macroscopic, delete it - if macroscopic._name == self._macroscopic.name: + if macroscopic.name == self._macroscopic.name: self._macroscopic = None def add_element(self, element, percent, percent_type='ao', expand=False): @@ -446,7 +447,7 @@ class Material(object): """ - if not isinstance(nuclide, openmc.Element): + if not isinstance(element, openmc.Element): msg = 'Unable to remove "{0}" in Material ID="{1}" ' \ 'since it is not an Element'.format(self.id, element) raise ValueError(msg) @@ -534,7 +535,7 @@ class Material(object): def _get_macroscopic_xml(self, macroscopic): xml_element = ET.Element("macroscopic") - xml_element.set("name", macroscopic._name) + xml_element.set("name", macroscopic.name) if macroscopic.xs is not None: xml_element.set("xs", macroscopic.xs) @@ -640,7 +641,7 @@ class Material(object): if self._macroscopic is None: # Create nuclide XML subelements - subelements = self.get_nuclides_xml(self._nuclides, distrib=True) + subelements = self._get_nuclides_xml(self._nuclides, distrib=True) for subelement_nuc in subelements: subelement.append(subelement_nuc) @@ -650,8 +651,7 @@ class Material(object): subelement.append(subsubelement) else: # Create macroscopic XML subelements - subsubelement = self._get_macroscopic_xml(self._macroscopic, - distrib=True) + subsubelement = self._get_macroscopic_xml(self._macroscopic) subelement.append(subsubelement) if len(self._sab) > 0: diff --git a/openmc/mesh.py b/openmc/mesh.py index 0c88d4a680..169e7705cc 100644 --- a/openmc/mesh.py +++ b/openmc/mesh.py @@ -16,6 +16,7 @@ AUTO_MESH_ID = 10000 def reset_auto_mesh_id(): + """Reset counter for auto-generated mesh IDs.""" global AUTO_MESH_ID AUTO_MESH_ID = 10000 @@ -63,20 +64,20 @@ class Mesh(object): def __eq__(self, mesh2): # Check type - if self._type != mesh2._type: + if self._type != mesh2.type: return False # Check dimension - elif self._dimension != mesh2._dimension: + elif self._dimension != mesh2.dimension: return False # Check width - elif self._width != mesh2._width: + elif self._width != mesh2.width: return False # Check lower left / upper right - elif self._lower_left != mesh2._lower_left and \ - self._upper_right != mesh2._upper_right: + elif self._lower_left != mesh2.lower_left and \ + self._upper_right != mesh2.upper_right: return False else: @@ -129,7 +130,7 @@ class Mesh(object): def name(self, name): if name is not None: cv.check_type('name for mesh ID="{0}"'.format(self._id), - name, basestring) + name, basestring) self._name = name else: self._name = '' @@ -137,9 +138,9 @@ class Mesh(object): @type.setter def type(self, meshtype): cv.check_type('type for mesh ID="{0}"'.format(self._id), - meshtype, basestring) + meshtype, basestring) cv.check_value('type for mesh ID="{0}"'.format(self._id), - meshtype, ['regular']) + meshtype, ['regular']) self._type = meshtype @dimension.setter diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 9241892646..319e4d4139 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -2,7 +2,6 @@ import sys import os import copy import pickle -import warnings from numbers import Integral from collections import OrderedDict from warnings import warn @@ -152,10 +151,6 @@ class Library(object): def openmc_geometry(self): return self._openmc_geometry - @property - def openmc_geometry(self): - return self._openmc_geometry - @property def opencg_geometry(self): if self._opencg_geometry is None: @@ -279,16 +274,14 @@ class Library(object): cv.check_iterable_type('domain', domains, openmc.Universe) all_domains = self.openmc_geometry.get_all_universes() else: - msg = 'Unable to set domains with ' \ - 'domain type "{}"'.format(self.domain_type) - raise ValueError(msg) + raise ValueError('Unable to set domains with domain ' + 'type "{}"'.format(self.domain_type)) # Check that each domain can be found in the geometry for domain in domains: if domain not in all_domains: - msg = 'Domain "{}" could not be found in the ' \ - 'geometry.'.format(domain) - raise ValueError(msg) + raise ValueError('Domain "{}" could not be found in the ' + 'geometry.'.format(domain)) self._domains = domains @@ -302,9 +295,8 @@ class Library(object): cv.check_value('correction', correction, ('P0', None)) if correction == 'P0' and self.legendre_order > 0: - msg = 'The P0 correction will be ignored since the scattering ' \ - 'order {} is greater than zero'.format(self.legendre_order) - warnings.warn(msg) + warn('The P0 correction will be ignored since the scattering ' + 'order {} is greater than zero'.format(self.legendre_order)) self._correction = correction @@ -317,7 +309,7 @@ class Library(object): if self.correction == 'P0' and legendre_order > 0: msg = 'The P0 correction will be ignored since the scattering ' \ 'order {} is greater than zero'.format(self.legendre_order) - warnings.warn(msg, RuntimeWarning) + warn(msg, RuntimeWarning) self.correction = None self._legendre_order = legendre_order @@ -402,7 +394,7 @@ class Library(object): for domain in self.domains: for mgxs_type in self.mgxs_types: mgxs = self.get_mgxs(domain, mgxs_type) - for tally_id, tally in mgxs.tallies.items(): + for tally in mgxs.tallies.values(): tallies_file.append(tally, merge=merge) def load_from_statepoint(self, statepoint): @@ -498,8 +490,8 @@ class Library(object): # Check that requested domain is included in library if mgxs_type not in self.mgxs_types: - msg = 'Unable to find MGXS type "{0}"'.format(mgxs_type) - raise ValueError(msg) + msg = 'Unable to find MGXS type "{0}"'.format(mgxs_type) + raise ValueError(msg) return self.all_mgxs[domain_id][mgxs_type] @@ -922,7 +914,7 @@ class Library(object): # accounted for approximately by using an adjusted # absorption cross section. if 'total' in self.mgxs_types: - xsdata._absorption = \ + xsdata.absorption = \ np.subtract(xsdata.total, np.sum(xsdata.scatter[0, :, :], axis=1)) @@ -1184,13 +1176,11 @@ class Library(object): # Ensure absorption is present if 'absorption' not in self.mgxs_types: error_flag = True - msg = '"absorption" MGXS type is required but not provided.' - warn(msg) + warn('"absorption" MGXS type is required but not provided.') # Ensure nu-scattering matrix is required if 'nu-scatter matrix' not in self.mgxs_types: error_flag = True - msg = '"nu-scatter matrix" MGXS type is required but not provided.' - warn(msg) + warn('"nu-scatter matrix" MGXS type is required but not provided.') else: # Ok, now see the status of scatter and/or multiplicity if ((('scatter matrix' not in self.mgxs_types) and @@ -1199,24 +1189,20 @@ class Library(object): # we need total, and not transport. if 'total' not in self.mgxs_types: error_flag = True - msg = '"total" MGXS type is required if a ' \ - 'scattering matrix is not provided.' - warn(msg) + warn('"total" MGXS type is required if a ' + 'scattering matrix is not provided.') # Total or transport can be present, but if using # self.correction=="P0", then we should use transport. if (((self.correction is "P0") and ('nu-transport' not in self.mgxs_types))): error_flag = True - msg = 'A "nu-transport" MGXS type is required since a "P0" ' \ - 'correction is applied, but a "nu-transport" MGXS is ' \ - 'not provided.' - warn(msg) + warn('A "nu-transport" MGXS type is required since a "P0" ' + 'correction is applied, but a "nu-transport" MGXS is ' + 'not provided.') elif (((self.correction is None) and ('total' not in self.mgxs_types))): error_flag = True - msg = '"total" MGXS type is required, but not provided.' - warn(msg) + warn('"total" MGXS type is required, but not provided.') if error_flag: - msg = 'Invalid MGXS configuration encountered.' - raise ValueError(msg) + raise ValueError('Invalid MGXS configuration encountered.') diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index c12c61bdf4..2c0cb21c60 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -1,6 +1,6 @@ from __future__ import division -from collections import Iterable, OrderedDict +from collections import OrderedDict from numbers import Integral import warnings import os @@ -412,7 +412,7 @@ class MGXS(object): self.rxn_rate_tally.sparse = sparse for tally_name in self.tallies: - self.tallies[tally_name].sparse = sparse + self.tallies[tally_name].sparse = sparse self._sparse = sparse @@ -852,7 +852,7 @@ class MGXS(object): fine_edges = self.energy_groups.group_edges # Condense each of the tallies to the coarse group structure - for tally_type, tally in condensed_xs.tallies.items(): + for tally in condensed_xs.tallies.values(): # Make condensed tally derived and null out sum, sum_sq tally._derived = True @@ -993,7 +993,8 @@ class MGXS(object): slice_nuclides = [nuc for nuc in nuclides if nuc in tally.nuclides] if len(groups) != 0 and tally.contains_filter('energy'): tally_slice = tally.get_slice(filters=filters, - filter_bins=filter_bins, nuclides=slice_nuclides) + filter_bins=filter_bins, + nuclides=slice_nuclides) else: tally_slice = tally.get_slice(nuclides=slice_nuclides) slice_xs.tallies[tally_type] = tally_slice @@ -1286,7 +1287,7 @@ class MGXS(object): num_digits = len(str(self.num_subdomains)) # Create a separate HDF5 group for each subdomain - for i, subdomain in enumerate(subdomains): + for subdomain in subdomains: # Create an HDF5 group for the subdomain if self.domain_type == 'distribcell': @@ -1311,9 +1312,11 @@ class MGXS(object): # Extract the cross section for this subdomain and nuclide average = self.get_xs(subdomains=[subdomain], nuclides=[nuclide], - xs_type=xs_type, value='mean', row_column=row_column) + xs_type=xs_type, value='mean', + row_column=row_column) std_dev = self.get_xs(subdomains=[subdomain], nuclides=[nuclide], - xs_type=xs_type, value='std_dev', row_column=row_column) + xs_type=xs_type, value='std_dev', + row_column=row_column) average = average.squeeze() std_dev = std_dev.squeeze() @@ -1386,9 +1389,9 @@ class MGXS(object): longtable=True, index=False) # Surround LaTeX table with code needed to run pdflatex - with open(filename + '.tex','r') as original: + with open(filename + '.tex', 'r') as original: data = original.read() - with open(filename + '.tex','w') as modified: + with open(filename + '.tex', 'w') as modified: modified.write( '\\documentclass[preview, 12pt, border=1mm]{standalone}\n') modified.write('\\usepackage{caption}\n') @@ -1451,7 +1454,7 @@ class MGXS(object): query_nuclides = self.get_all_nuclides() xs_tally = self.xs_tally.summation(nuclides=query_nuclides) df = xs_tally.get_pandas_dataframe( - distribcell_paths=distribcell_paths) + distribcell_paths=distribcell_paths) # Remove nuclide column since it is homogeneous and redundant df.drop('nuclide', axis=1, inplace=True) @@ -1460,12 +1463,12 @@ class MGXS(object): elif self.by_nuclide and nuclides != 'all': xs_tally = self.xs_tally.get_slice(nuclides=nuclides) df = xs_tally.get_pandas_dataframe( - distribcell_paths=distribcell_paths) + distribcell_paths=distribcell_paths) # If the user requested all nuclides, keep nuclide column in dataframe else: df = self.xs_tally.get_pandas_dataframe( - distribcell_paths=distribcell_paths) + distribcell_paths=distribcell_paths) # Remove the score column since it is homogeneous and redundant df = df.drop('score', axis=1) @@ -3443,7 +3446,7 @@ class ScatterMatrixXS(MatrixMGXS): def get_xs(self, in_groups='all', out_groups='all', subdomains='all', nuclides='all', moment='all', xs_type='macro', order_groups='increasing', - row_column='inout', value='mean', **kwargs): + row_column='inout', value='mean'): r"""Returns an array of multi-group cross sections. This method constructs a 2D NumPy array for the requested scattering @@ -3530,7 +3533,7 @@ class ScatterMatrixXS(MatrixMGXS): cv.check_type('moment', moment, Integral) cv.check_greater_than('moment', moment, 0, equality=True) cv.check_less_than( - 'moment', moment, self.legendre_order, equality=True) + 'moment', moment, self.legendre_order, equality=True) scores = [self.xs_tally.scores[moment]] else: scores = [] @@ -3641,7 +3644,7 @@ class ScatterMatrixXS(MatrixMGXS): """ df = super(ScatterMatrixXS, self).get_pandas_dataframe( - groups, nuclides, xs_type, distribcell_paths) + groups, nuclides, xs_type, distribcell_paths) # Add a moment column to dataframe if self.legendre_order > 0: @@ -3660,7 +3663,7 @@ class ScatterMatrixXS(MatrixMGXS): cv.check_type('moment', moment, Integral) cv.check_greater_than('moment', moment, 0, equality=True) cv.check_less_than( - 'moment', moment, self.legendre_order, equality=True) + 'moment', moment, self.legendre_order, equality=True) df = df[df['moment'] == 'P{}'.format(moment)] return df @@ -4601,7 +4604,7 @@ class Chi(MGXS): # Build the dataframe using the parent class method df = super(Chi, self).get_pandas_dataframe( - groups, nuclides, xs_type, distribcell_paths=distribcell_paths) + groups, nuclides, xs_type, distribcell_paths=distribcell_paths) # If user requested micro cross sections, multiply by the atom # densities to cancel out division made by the parent class method diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index f34f3b71ce..8a572c8748 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -9,7 +9,7 @@ import openmc import openmc.mgxs from openmc.checkvalue import check_type, check_value, check_greater_than, \ check_iterable_type -from openmc.clean_xml import * +from openmc.clean_xml import sort_xml_elements, clean_xml_indentation if sys.version_info[0] >= 3: basestring = str @@ -376,7 +376,7 @@ class XSdata(object): # Check validity of energy_groups check_type('energy_groups', energy_groups, openmc.mgxs.EnergyGroups) - if energy_group.group_edges is None: + if energy_groups.group_edges is None: msg = 'Unable to assign an EnergyGroups object ' \ 'with uninitialized group edges' raise ValueError(msg) @@ -597,10 +597,7 @@ class XSdata(object): [self.vector_shape, self.matrix_shape]) # Find out if we have a nu-fission matrix or vector # and set a flag to allow other methods to check this later. - if npnu_fission.shape == self.vector_shape: - self.use_chi = True - else: - self.use_chi = False + self.use_chi = (npnu_fission.shape == self.vector_shape) self._nu_fission = npnu_fission if np.sum(self._nu_fission) > 0.0: @@ -873,7 +870,7 @@ class XSdata(object): check_value('domain_type', scatter.domain_type, ['universe', 'cell', 'material']) - if (self.scatt_type != 'legendre'): + if self.scatt_type != 'legendre': msg = 'Anisotropic scattering representations other than ' \ 'Legendre expansions have not yet been implemented in ' \ 'openmc.mgxs.' @@ -1090,9 +1087,9 @@ class MGXSLibrary(object): @inverse_velocities.setter def inverse_velocities(self, inverse_velocities): - cv.check_type('inverse_velocities', inverse_velocities, Iterable, Real) - cv.check_greater_than('number of inverse_velocities', - len(inverse_velocities), 0.0) + check_type('inverse_velocities', inverse_velocities, Iterable, Real) + check_greater_than('number of inverse_velocities', + len(inverse_velocities), 0.0) self._inverse_velocities = np.array(inverse_velocities) @energy_groups.setter diff --git a/openmc/nuclide.py b/openmc/nuclide.py index 8e97f1a1c6..a2130680fb 100644 --- a/openmc/nuclide.py +++ b/openmc/nuclide.py @@ -46,9 +46,9 @@ class Nuclide(object): def __eq__(self, other): if isinstance(other, Nuclide): - if self._name != other._name: + if self._name != other.name: return False - elif self._xs != other._xs: + elif self._xs != other.xs: return False else: return True @@ -71,9 +71,12 @@ class Nuclide(object): def __repr__(self): string = 'Nuclide - {0}\n'.format(self._name) - string += '{0: <16}{1}{2}\n'.format('\tXS', '=\t', self._xs) - if self._zaid is not None: - string += '{0: <16}{1}{2}\n'.format('\tZAID', '=\t', self._zaid) + string += '{0: <16}{1}{2}\n'.format('\tXS', '=\t', self.xs) + if self.zaid is not None: + string += '{0: <16}{1}{2}\n'.format('\tZAID', '=\t', self.zaid) + if self.scattering is not None: + string += '{0: <16}{1}{2}\n'.format('\tscattering', '=\t', + self.scattering) return string @property @@ -116,13 +119,3 @@ class Nuclide(object): raise ValueError(msg) self._scattering = scattering - - def __repr__(self): - string = 'Nuclide - {0}\n'.format(self._name) - string += '{0: <16}{1}{2}\n'.format('\tXS', '=\t', self.xs) - if self.zaid is not None: - string += '{0: <16}{1}{2}\n'.format('\tZAID', '=\t', self.zaid) - if self.scattering is not None: - string += '{0: <16}{1}{2}\n'.format('\tscattering', '=\t', - self.scattering) - return string diff --git a/openmc/opencg_compatible.py b/openmc/opencg_compatible.py index b112ed327f..967e11f48c 100644 --- a/openmc/opencg_compatible.py +++ b/openmc/opencg_compatible.py @@ -6,8 +6,8 @@ import numpy as np try: import opencg except ImportError: - msg = 'Unable to import opencg which is needed by openmc.opencg_compatible' - raise ImportError(msg) + raise ImportError('Unable to import opencg which is needed by ' + 'openmc.opencg_compatible') import openmc import openmc.checkvalue as cv @@ -81,7 +81,6 @@ def get_opencg_material(openmc_material): cv.check_type('openmc_material', openmc_material, openmc.Material) - global OPENCG_MATERIALS material_id = openmc_material.id # If this Material was already created, use it @@ -118,7 +117,6 @@ def get_openmc_material(opencg_material): cv.check_type('opencg_material', opencg_material, opencg.Material) - global OPENMC_MATERIALS material_id = opencg_material.id # If this Material was already created, use it @@ -185,7 +183,6 @@ def get_opencg_surface(openmc_surface): cv.check_type('openmc_surface', openmc_surface, openmc.Surface) - global OPENCG_SURFACES surface_id = openmc_surface.id # If this Material was already created, use it @@ -226,21 +223,21 @@ def get_opencg_surface(openmc_surface): z0 = openmc_surface.z0 R = openmc_surface.r opencg_surface = opencg.XCylinder(surface_id, name, - boundary, y0, z0, R) + boundary, y0, z0, R) elif openmc_surface.type == 'y-cylinder': x0 = openmc_surface.x0 z0 = openmc_surface.z0 R = openmc_surface.r opencg_surface = opencg.YCylinder(surface_id, name, - boundary, x0, z0, R) + boundary, x0, z0, R) elif openmc_surface.type == 'z-cylinder': x0 = openmc_surface.x0 y0 = openmc_surface.y0 R = openmc_surface.r opencg_surface = opencg.ZCylinder(surface_id, name, - boundary, x0, y0, R) + boundary, x0, y0, R) # Add the OpenMC Surface to the global collection of all OpenMC Surfaces OPENMC_SURFACES[surface_id] = openmc_surface @@ -268,7 +265,6 @@ def get_openmc_surface(opencg_surface): cv.check_type('opencg_surface', opencg_surface, opencg.Surface) - global openmc_surface surface_id = opencg_surface.id # If this Surface was already created, use it @@ -356,7 +352,6 @@ def get_compatible_opencg_surfaces(opencg_surface): cv.check_type('opencg_surface', opencg_surface, opencg.Surface) - global OPENMC_SURFACES surface_id = opencg_surface.id # If this Surface was already created, use it @@ -435,7 +430,6 @@ def get_opencg_cell(openmc_cell): cv.check_type('openmc_cell', openmc_cell, openmc.Cell) - global OPENCG_CELLS cell_id = openmc_cell.id # If this Cell was already created, use it @@ -480,7 +474,7 @@ def get_opencg_cell(openmc_cell): opencg_cell.add_surface(get_opencg_surface(surface), halfspace) else: raise NotImplementedError("Complex cells not yet supported " - "in OpenCG.") + "in OpenCG.") # Add the OpenMC Cell to the global collection of all OpenMC Cells OPENMC_CELLS[cell_id] = openmc_cell @@ -615,7 +609,7 @@ def make_opencg_cells_compatible(opencg_universe): # Check all OpenCG Cells in this Universe for compatibility with OpenMC opencg_cells = opencg_universe.cells - for cell_id, opencg_cell in opencg_cells.items(): + for opencg_cell in opencg_cells.values(): # Check each of the OpenCG Surfaces for OpenMC compatibility surfaces = opencg_cell.surfaces @@ -635,7 +629,7 @@ def make_opencg_cells_compatible(opencg_universe): # of this block is necessary in the event that there are more # incompatible Surfaces in this Cell that are not accounted for. cells = get_compatible_opencg_cells(opencg_cell, - surface, halfspace) + surface, halfspace) # Remove the non-compatible OpenCG Cell from the Universe opencg_universe.remove_cell(opencg_cell) @@ -668,7 +662,6 @@ def get_openmc_cell(opencg_cell): cv.check_type('opencg_cell', opencg_cell, opencg.Cell) - global OPENMC_CELLS cell_id = opencg_cell.id # If this Cell was already created, use it @@ -730,7 +723,6 @@ def get_opencg_universe(openmc_universe): cv.check_type('openmc_universe', openmc_universe, openmc.Universe) - global OPENCG_UNIVERSES universe_id = openmc_universe.id # If this Universe was already created, use it @@ -744,7 +736,7 @@ def get_opencg_universe(openmc_universe): # Convert all OpenMC Cells in this Universe to OpenCG Cells openmc_cells = openmc_universe.cells - for cell_id, openmc_cell in openmc_cells.items(): + for openmc_cell in openmc_cells.values(): opencg_cell = get_opencg_cell(openmc_cell) opencg_universe.add_cell(opencg_cell) @@ -774,7 +766,6 @@ def get_openmc_universe(opencg_universe): cv.check_type('opencg_universe', opencg_universe, opencg.Universe) - global OPENMC_UNIVERSES universe_id = opencg_universe.id # If this Universe was already created, use it @@ -791,7 +782,7 @@ def get_openmc_universe(opencg_universe): # Convert all OpenCG Cells in this Universe to OpenMC Cells opencg_cells = opencg_universe.cells - for cell_id, opencg_cell in opencg_cells.items(): + for opencg_cell in opencg_cells.values(): openmc_cell = get_openmc_cell(opencg_cell) openmc_universe.add_cell(openmc_cell) @@ -821,7 +812,6 @@ def get_opencg_lattice(openmc_lattice): cv.check_type('openmc_lattice', openmc_lattice, openmc.Lattice) - global OPENCG_LATTICES lattice_id = openmc_lattice.id # If this Lattice was already created, use it @@ -915,7 +905,6 @@ def get_openmc_lattice(opencg_lattice): cv.check_type('opencg_lattice', opencg_lattice, opencg.Lattice) - global OPENMC_LATTICES lattice_id = opencg_lattice.id # If this Lattice was already created, use it @@ -1043,7 +1032,7 @@ def get_openmc_geometry(opencg_geometry): # Make the entire geometry "compatible" before assigning auto IDs universes = opencg_geometry.get_all_universes() - for universe_id, universe in universes.items(): + for universe in universes.values(): if not isinstance(universe, opencg.Lattice): make_opencg_cells_compatible(universe) diff --git a/openmc/particle_restart.py b/openmc/particle_restart.py index 7a27db2f60..fb2fc4736f 100644 --- a/openmc/particle_restart.py +++ b/openmc/particle_restart.py @@ -1,6 +1,3 @@ -import struct - - class Particle(object): """Information used to restart a specific particle that caused a simulation to fail. diff --git a/openmc/plots.py b/openmc/plots.py index 9167e55d50..73b51da5e8 100644 --- a/openmc/plots.py +++ b/openmc/plots.py @@ -8,7 +8,7 @@ import numpy as np import openmc import openmc.checkvalue as cv -from openmc.clean_xml import * +from openmc.clean_xml import clean_xml_indentation if sys.version_info[0] >= 3: basestring = str @@ -18,6 +18,7 @@ AUTO_PLOT_ID = 10000 def reset_auto_plot_id(): + """Reset counter for auto-generated plot IDs.""" global AUTO_PLOT_ID AUTO_PLOT_ID = 10000 @@ -201,7 +202,7 @@ class Plot(object): cv.check_type('plot background', background, Iterable, Integral) cv.check_length('plot background', background, 3) for rgb in background: - cv.check_greater_than('plot background',rgb, 0, True) + cv.check_greater_than('plot background', rgb, 0, True) cv.check_less_than('plot background', rgb, 256) self._background = background @@ -257,7 +258,7 @@ class Plot(object): string += '{0: <16}{1}{2}\n'.format('\tColor', '=\t', self._color) string += '{0: <16}{1}{2}\n'.format('\tMask', '=\t', self._mask_components) - string += '{0: <16}{1}{2}\n'.format('\tMask', '=\t', + string += '{0: <16}{1}{2}\n'.format('\tMask', '=\t', self._mask_background) string += '{0: <16}{1}{2}\n'.format('\tCol Spec', '=\t', self._col_spec) return string @@ -536,8 +537,8 @@ class Plots(cv.CheckedList): for plot in self: xml_element = plot.get_plot_xml() - if len(plot._name) > 0: - self._plots_file.append(ET.Comment(plot._name)) + if len(plot.name) > 0: + self._plots_file.append(ET.Comment(plot.name)) self._plots_file.append(xml_element) @@ -557,4 +558,4 @@ class Plots(cv.CheckedList): # Write the XML Tree to the plots.xml file tree = ET.ElementTree(self._plots_file) tree.write("plots.xml", xml_declaration=True, - encoding='utf-8', method="xml") + encoding='utf-8', method="xml") diff --git a/openmc/region.py b/openmc/region.py index 9e10112710..a1b9e9fd0d 100644 --- a/openmc/region.py +++ b/openmc/region.py @@ -203,7 +203,7 @@ class Region(object): class Intersection(Region): - """Intersection of two or more regions. + r"""Intersection of two or more regions. Instances of Intersection are generally created via the __and__ operator applied to two instances of :class:`openmc.Region`. This is illustrated in @@ -277,7 +277,7 @@ class Intersection(Region): class Union(Region): - """Union of two or more regions. + r"""Union of two or more regions. Instances of Union are generally created via the __or__ operator applied to two instances of :class:`openmc.Region`. This is illustrated in the diff --git a/openmc/settings.py b/openmc/settings.py index 3c22b39ba9..1738beb0d2 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -6,7 +6,7 @@ import sys import numpy as np -from openmc.clean_xml import * +from openmc.clean_xml import clean_xml_indentation from openmc.checkvalue import (check_type, check_length, check_value, check_greater_than, check_less_than) from openmc import Nuclide @@ -311,7 +311,7 @@ class Settings(object): @property def trigger_batch_interval(self): - return self._batch_interval + return self._trigger_batch_interval @property def output(self): @@ -1011,7 +1011,7 @@ class Settings(object): if self._trigger_active is not None: if self._trigger_subelement is None: self._trigger_subelement = ET.SubElement(self._settings_file, - "trigger") + "trigger") element = ET.SubElement(self._trigger_subelement, "active") element.text = str(self._trigger_active).lower() @@ -1020,7 +1020,7 @@ class Settings(object): if self._trigger_max_batches is not None: if self._trigger_subelement is None: self._trigger_subelement = ET.SubElement(self._settings_file, - "trigger") + "trigger") element = ET.SubElement(self._trigger_subelement, "max_batches") element.text = str(self._trigger_max_batches) @@ -1029,7 +1029,7 @@ class Settings(object): if self._trigger_batch_interval is not None: if self._trigger_subelement is None: self._trigger_subelement = ET.SubElement(self._settings_file, - "trigger") + "trigger") element = ET.SubElement(self._trigger_subelement, "batch_interval") element.text = str(self._trigger_batch_interval) @@ -1103,14 +1103,16 @@ class Settings(object): element.text = str(self._multipole_active) def _create_resonance_scattering_element(self): - if self.resonance_scattering is None: return + if self.resonance_scattering is None: + return element = ET.SubElement(self._settings_file, "resonance_scattering") for r in self.resonance_scattering: if r.nuclide.name != r.nuclide_0K.name: raise ValueError("The nuclide and nuclide_0K attributes of " - "a ResonantScattering object must have identical names.") + "a ResonantScattering object must have " + "identical names.") r.create_xml_subelement(element) def export_to_xml(self): @@ -1159,7 +1161,7 @@ class Settings(object): # Write the XML Tree to the settings.xml file tree = ET.ElementTree(self._settings_file) tree.write("settings.xml", xml_declaration=True, - encoding='utf-8', method="xml") + encoding='utf-8', method="xml") class ResonanceScattering(object): @@ -1215,15 +1217,17 @@ class ResonanceScattering(object): @nuclide.setter def nuclide(self, nuc): check_type('nuclide', nuc, Nuclide) - if nuc.zaid == None: raise ValueError("The nuclide must have an " - "explicitly defined zaid attribute.") + if nuc.zaid is None: + raise ValueError("The nuclide must have an explicitly defined " + "zaid attribute.") self._nuclide = nuc @nuclide_0K.setter def nuclide_0K(self, nuc): check_type('nuclide_0K', nuc, Nuclide) - if nuc.zaid == None: raise ValueError("The nuclide_0K must have an " - "explicitly defined zaid attribute.") + if nuc.zaid is None: + raise ValueError("The nuclide_0K must have an explicitly defined " + "zaid attribute.") self._nuclide_0K = nuc @method.setter diff --git a/openmc/source.py b/openmc/source.py index 36a36e5948..7e8a68accf 100644 --- a/openmc/source.py +++ b/openmc/source.py @@ -104,6 +104,14 @@ class Source(object): self._strength = strength def to_xml(self): + """Return XML representation of the source + + Returns + ------- + element : xml.etree.ElementTree.Element + XML element containing source data + + """ element = ET.Element("source") element.set("strength", str(self.strength)) if self.file is not None: diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 0baa631581..6337746650 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -558,7 +558,7 @@ class StatePoint(object): tally = None # Iterate over all tallies to find the appropriate one - for tally_id, test_tally in self.tallies.items(): + for test_tally in self.tallies.values(): # Determine if Tally has queried name if name and name != test_tally.name: diff --git a/openmc/stats/univariate.py b/openmc/stats/univariate.py index af9b9b3013..7c84dba34c 100644 --- a/openmc/stats/univariate.py +++ b/openmc/stats/univariate.py @@ -24,7 +24,7 @@ class Univariate(object): pass @abstractmethod - def to_xml(self): + def to_xml(self, element_name): return '' @@ -180,7 +180,7 @@ class Maxwell(Univariate): class Watt(Univariate): - """Watt fission energy spectrum. + r"""Watt fission energy spectrum. The Watt fission energy spectrum is characterized by two parameters :math:`a` and :math:`b` and has density function :math:`p(E) dE = c e^{-E/a} diff --git a/openmc/summary.py b/openmc/summary.py index c5dbcadda0..8c626940e5 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -1,7 +1,8 @@ from collections import Iterable -import numpy as np import re +import numpy as np + import openmc from openmc.region import Region @@ -301,7 +302,7 @@ class Summary(object): # Get the distribcell index ind = self._f['geometry/cells'][key]['distribcell_index'].value if ind != 0: - cell.distribcell_index = ind + cell.distribcell_index = ind # Add the Cell to the global dictionary of all Cells self.cells[index] = cell @@ -608,7 +609,7 @@ class Summary(object): """ - for index, material in self.materials.items(): + for material in self.materials.values(): if material.id == material_id: return material @@ -629,7 +630,7 @@ class Summary(object): """ - for index, surface in self.surfaces.items(): + for surface in self.surfaces.values(): if surface.id == surface_id: return surface @@ -650,7 +651,7 @@ class Summary(object): """ - for index, cell in self.cells.items(): + for cell in self.cells.values(): if cell.id == cell_id: return cell @@ -671,7 +672,7 @@ class Summary(object): """ - for index, universe in self.universes.items(): + for universe in self.universes.values(): if universe.id == universe_id: return universe @@ -692,7 +693,7 @@ class Summary(object): """ - for index, lattice in self.lattices.items(): + for lattice in self.lattices.values(): if lattice.id == lattice_id: return lattice diff --git a/openmc/surface.py b/openmc/surface.py index 76f0d82e7d..c33c4ee74c 100644 --- a/openmc/surface.py +++ b/openmc/surface.py @@ -19,6 +19,7 @@ _BC_TYPES = ['transmission', 'vacuum', 'reflective', 'periodic'] def reset_auto_surface_id(): + """Reset counters for all auto-generated surface IDs""" global AUTO_SURFACE_ID AUTO_SURFACE_ID = 10000 @@ -1814,18 +1815,20 @@ def make_hexagon_region(edge_length=1., orientation='y'): right = XPlane(x0=sqrt(3.)/2.*l) left = XPlane(x0=-sqrt(3.)/2.*l) c = sqrt(3.)/3. - ur = Plane(A=c, B=1., D=l) # y = -x/sqrt(3) + a - ul = Plane(A=-c, B=1., D=l) # y = x/sqrt(3) + a - lr = Plane(A=-c, B=1., D=-l) # y = x/sqrt(3) - a - ll = Plane(A=c, B=1., D=-l) # y = -x/sqrt(3) - a - return Intersection(-right, +left, -ur, -ul, +lr, +ll) + upper_right = Plane(A=c, B=1., D=l) # y = -x/sqrt(3) + a + upper_left = Plane(A=-c, B=1., D=l) # y = x/sqrt(3) + a + lower_right = Plane(A=-c, B=1., D=-l) # y = x/sqrt(3) - a + lower_left = Plane(A=c, B=1., D=-l) # y = -x/sqrt(3) - a + return Intersection(-right, +left, -upper_right, -upper_left, + +lower_right, +lower_left) elif orientation == 'x': top = YPlane(y0=sqrt(3.)/2.*l) bottom = YPlane(y0=-sqrt(3.)/2.*l) c = sqrt(3.) - ur = Plane(A=c, B=1., D=c*l) # y = -sqrt(3)*(x - a) - lr = Plane(A=-c, B=1., D=-c*l) # y = sqrt(3)*(x + a) - ll = Plane(A=c, B=1., D=-c*l) # y = -sqrt(3)*(x + a) - ul = Plane(A=-c, B=1., D=c*l) # y = sqrt(3)*(x + a) - return Intersection(-top, +bottom, -ur, +lr, +ll, -ul) + upper_right = Plane(A=c, B=1., D=c*l) # y = -sqrt(3)*(x - a) + lower_right = Plane(A=-c, B=1., D=-c*l) # y = sqrt(3)*(x + a) + lower_left = Plane(A=c, B=1., D=-c*l) # y = -sqrt(3)*(x + a) + upper_left = Plane(A=-c, B=1., D=c*l) # y = sqrt(3)*(x + a) + return Intersection(-top, +bottom, -upper_right, +lower_right, + +lower_left, -upper_left) diff --git a/openmc/tallies.py b/openmc/tallies.py index af19549a7c..a58465994d 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1,6 +1,6 @@ from __future__ import division -from collections import Iterable, MutableSequence, defaultdict +from collections import Iterable, MutableSequence import copy from functools import partial import os @@ -13,11 +13,12 @@ from xml.etree import ElementTree as ET import numpy as np -from openmc import Mesh, Filter, Trigger, Nuclide -from openmc.arithmetic import * +from openmc import Filter, Trigger, Nuclide +from openmc.arithmetic import CrossScore, CrossNuclide, CrossFilter, \ + AggregateScore, AggregateNuclide, AggregateFilter from openmc.filter import _FILTER_TYPES import openmc.checkvalue as cv -from openmc.clean_xml import * +from openmc.clean_xml import clean_xml_indentation if sys.version_info[0] >= 3: basestring = str @@ -41,6 +42,7 @@ _FILTER_CLASSES = (Filter, CrossFilter, AggregateFilter) def reset_auto_tally_id(): + """Reset counter for auto-generated tally IDs.""" global AUTO_TALLY_ID AUTO_TALLY_ID = 10000 @@ -177,7 +179,7 @@ class Tally(object): for self_filter in self.filters: string += '{0: <16}\t\t{1}\t{2}\n'.format('', self_filter.type, - self_filter.bins) + self_filter.bins) string += '{0: <16}{1}'.format('\tNuclides', '=\t') @@ -386,7 +388,7 @@ class Tally(object): @estimator.setter def estimator(self, estimator): cv.check_value('estimator', estimator, - ['analog', 'tracklength', 'collision']) + ['analog', 'tracklength', 'collision']) self._estimator = estimator @triggers.setter @@ -762,10 +764,7 @@ class Tally(object): no_nuclides_match = False # Either all nuclides should match, or none should - if no_nuclides_match or all_nuclides_match: - return True - else: - return False + return no_nuclides_match or all_nuclides_match def _can_merge_scores(self, other): """Determine if another tally's scores can be merged with this one's @@ -802,10 +801,7 @@ class Tally(object): return False # Either all scores should match, or none should - if no_scores_match or all_scores_match: - return True - else: - return False + return no_scores_match or all_scores_match def can_merge(self, other): """Determine if another tally can be merged with this one @@ -901,7 +897,7 @@ class Tally(object): # Search for mergeable filters for i, filter1 in enumerate(self.filters): - for j, filter2 in enumerate(other.filters): + for filter2 in other.filters: if filter1 != filter2 and filter1.can_merge(filter2): other_copy._swap_filters(other_copy.filters[i], filter2) merged_tally.filters[i] = filter1.merge(filter2) @@ -1058,7 +1054,7 @@ class Tally(object): for score in self.scores: scores += '{0} '.format(score) - subelement = ET.SubElement(element, "scores") + subelement = ET.SubElement(element, "scores") subelement.text = scores.rstrip(' ') # Tally estimator type @@ -1192,7 +1188,7 @@ class Tally(object): # If the Summary was linked, then values are Nuclide objects if isinstance(test_nuclide, Nuclide): - if test_nuclide._name == nuclide: + if test_nuclide.name == nuclide: nuclide_index = i break @@ -1557,7 +1553,7 @@ class Tally(object): # Append each Filter's DataFrame to the overall DataFrame for self_filter in self.filters: filter_df = self_filter.get_pandas_dataframe( - data_size, distribcell_paths) + data_size, distribcell_paths) df = pd.concat([df, filter_df], axis=1) # Include DataFrame column for nuclides if user requested it @@ -1673,7 +1669,7 @@ class Tally(object): return data def export_results(self, filename='tally-results', directory='.', - format='hdf5', append=True): + format='hdf5', append=True): """Exports tallly results to an HDF5 or Python pickle binary file. Parameters @@ -1719,7 +1715,7 @@ class Tally(object): elif not isinstance(append, bool): msg = 'Unable to export the results for Tally ID="{0}" since the ' \ - 'append parameter is not True/False'.format(self.id, append) + 'append parameter is not True/False'.format(self.id) raise ValueError(msg) # Make directory if it does not exist @@ -1776,7 +1772,7 @@ class Tally(object): filename = directory + '/' + filename + '.pkl' if os.path.exists(filename) and append: - tally_results = pickle.load(file(filename, 'rb')) + tally_results = pickle.load(open(filename, 'rb')) else: tally_results = {} @@ -1815,7 +1811,7 @@ class Tally(object): pickle.dump(tally_results, open(filename, 'wb')) def hybrid_product(self, other, binary_op, filter_product=None, - nuclide_product=None, score_product=None): + nuclide_product=None, score_product=None): """Combines filters, scores and nuclides with another tally. This is a helper method for the tally arithmetic operator overloaded @@ -2451,7 +2447,7 @@ class Tally(object): new_tally._std_dev = self.std_dev new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary - new_tally.num_realization = self.num_realizations + new_tally.num_realizations = self.num_realizations new_tally.filters = copy.deepcopy(self.filters) new_tally.nuclides = copy.deepcopy(self.nuclides) @@ -2522,7 +2518,7 @@ class Tally(object): new_tally._std_dev = self.std_dev new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary - new_tally.num_realization = self.num_realizations + new_tally.num_realizations = self.num_realizations new_tally.filters = copy.deepcopy(self.filters) new_tally.nuclides = copy.deepcopy(self.nuclides) @@ -2594,7 +2590,7 @@ class Tally(object): new_tally._std_dev = self.std_dev * np.abs(other) new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary - new_tally.num_realization = self.num_realizations + new_tally.num_realizations = self.num_realizations new_tally.filters = copy.deepcopy(self.filters) new_tally.nuclides = copy.deepcopy(self.nuclides) @@ -2666,7 +2662,7 @@ class Tally(object): new_tally._std_dev = self.std_dev * np.abs(1. / other) new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary - new_tally.num_realization = self.num_realizations + new_tally.num_realizations = self.num_realizations new_tally.filters = copy.deepcopy(self.filters) new_tally.nuclides = copy.deepcopy(self.nuclides) @@ -2742,7 +2738,7 @@ class Tally(object): new_tally._std_dev = np.abs(new_tally._mean * power * self_rel_err) new_tally.estimator = self.estimator new_tally.with_summary = self.with_summary - new_tally.num_realization = self.num_realizations + new_tally.num_realizations = self.num_realizations new_tally.filters = copy.deepcopy(self.filters) new_tally.nuclides = copy.deepcopy(self.nuclides) @@ -3149,7 +3145,7 @@ class Tally(object): return tally_sum def average(self, scores=[], filter_type=None, - filter_bins=[], nuclides=[], remove_filter=False): + filter_bins=[], nuclides=[], remove_filter=False): """Vectorized average of tally data across scores, filter bins and/or nuclides using tally aggregation. @@ -3577,4 +3573,4 @@ class Tallies(cv.CheckedList): # Write the XML Tree to the tallies.xml file tree = ET.ElementTree(self._tallies_file) tree.write("tallies.xml", xml_declaration=True, - encoding='utf-8', method="xml") + encoding='utf-8', method="xml") diff --git a/openmc/trigger.py b/openmc/trigger.py index 537af1c8d8..f23838dcff 100644 --- a/openmc/trigger.py +++ b/openmc/trigger.py @@ -40,10 +40,7 @@ class Trigger(object): self._scores = [] def __eq__(self, other): - if str(self) == str(other): - return True - else: - return False + return str(self) == str(other) def __ne__(self, other): return not self == other @@ -70,7 +67,7 @@ class Trigger(object): @trigger_type.setter def trigger_type(self, trigger_type): cv.check_value('tally trigger type', trigger_type, - ['variance', 'std_dev', 'rel_err']) + ['variance', 'std_dev', 'rel_err']) self._trigger_type = trigger_type @threshold.setter diff --git a/openmc/universe.py b/openmc/universe.py index 84a5acdcac..c8e7fcab1e 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -1,9 +1,7 @@ from collections import OrderedDict, Iterable from numbers import Integral -from xml.etree import ElementTree as ET import random import sys -import warnings import numpy as np @@ -22,6 +20,7 @@ AUTO_UNIVERSE_ID = 10000 def reset_auto_universe_id(): + """Reset counter for auto-generated universe IDs.""" global AUTO_UNIVERSE_ID AUTO_UNIVERSE_ID = 10000 @@ -256,7 +255,7 @@ class Universe(object): if obj not in colors: colors[obj] = (random.random(), random.random(), random.random(), 1.0) - img[j,i,:] = colors[obj] + img[j, i, :] = colors[obj] # Display image plt.imshow(img, extent=(x_min, x_max, y_min, y_max)) @@ -282,7 +281,7 @@ class Universe(object): 'a Cell'.format(self._id, cell) raise ValueError(msg) - cell_id = cell._id + cell_id = cell.id if cell_id not in self._cells: self._cells[cell_id] = cell @@ -364,7 +363,7 @@ class Universe(object): nuclides = OrderedDict() # Append all Nuclides in each Cell in the Universe to the dictionary - for cell_id, cell in self._cells.items(): + for cell in self._cells.values(): nuclides.update(cell.get_all_nuclides()) return nuclides @@ -386,7 +385,7 @@ class Universe(object): cells.update(self._cells) # Append all Cells in each Cell in the Universe to the dictionary - for cell_id, cell in self._cells.items(): + for cell in self._cells.values(): cells.update(cell.get_all_cells()) return cells @@ -406,7 +405,7 @@ class Universe(object): # Append all Cells in each Cell in the Universe to the dictionary cells = self.get_all_cells() - for cell_id, cell in cells.items(): + for cell in cells.values(): materials.update(cell.get_all_materials()) return materials @@ -428,7 +427,7 @@ class Universe(object): universes = OrderedDict() # Append all Universes containing each Cell to the dictionary - for cell_id, cell in cells.items(): + for cell in cells.values(): universes.update(cell.get_all_universes()) return universes diff --git a/setup.py b/setup.py index 99e465c9d4..a842a1c3ae 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,6 @@ #!/usr/bin/env python import glob -import os try: from setuptools import setup have_setuptools = True From b483cfe0b64bd6a77c2bc06e02b46b9a48630a33 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Sat, 2 Jul 2016 15:21:58 +0700 Subject: [PATCH 638/650] Respond to @wbinventor comments on #679 --- openmc/element.py | 4 ++-- openmc/macroscopic.py | 4 ++-- openmc/material.py | 4 ++-- openmc/mgxs/library.py | 10 +++++----- openmc/nuclide.py | 4 ++-- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/openmc/element.py b/openmc/element.py index 2e22702d99..c877c27a12 100644 --- a/openmc/element.py +++ b/openmc/element.py @@ -45,9 +45,9 @@ class Element(object): def __eq__(self, other): if isinstance(other, Element): - if self._name != other.name: + if self.name != other.name: return False - elif self._xs != other.xs: + elif self.xs != other.xs: return False else: return True diff --git a/openmc/macroscopic.py b/openmc/macroscopic.py index 1fdf875e72..1dd087903f 100644 --- a/openmc/macroscopic.py +++ b/openmc/macroscopic.py @@ -38,9 +38,9 @@ class Macroscopic(object): def __eq__(self, other): if isinstance(other, Macroscopic): - if self._name != other.name: + if self.name != other.name: return False - elif self._xs != other.xs: + elif self.xs != other.xs: return False else: return True diff --git a/openmc/material.py b/openmc/material.py index 1ba8f533a9..d7ffd04e94 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -352,9 +352,9 @@ class Material(object): if self._macroscopic is None: self._macroscopic = macroscopic else: - msg = 'Unable to add a Macroscopic to Material ID="{0}", ' \ + msg = 'Unable to add a Macroscopic to Material ID="{0}". ' \ 'Only one Macroscopic allowed per ' \ - 'Material!'.format(self._id) + 'Material.'.format(self._id) raise ValueError(msg) # Generally speaking, the density for a macroscopic object will diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 319e4d4139..9df9d150dd 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -296,7 +296,7 @@ class Library(object): if correction == 'P0' and self.legendre_order > 0: warn('The P0 correction will be ignored since the scattering ' - 'order {} is greater than zero'.format(self.legendre_order)) + 'order "{}" is greater than zero'.format(self.legendre_order)) self._correction = correction @@ -1176,11 +1176,11 @@ class Library(object): # Ensure absorption is present if 'absorption' not in self.mgxs_types: error_flag = True - warn('"absorption" MGXS type is required but not provided.') + warn('An "absorption" MGXS type is required but not provided.') # Ensure nu-scattering matrix is required if 'nu-scatter matrix' not in self.mgxs_types: error_flag = True - warn('"nu-scatter matrix" MGXS type is required but not provided.') + warn('A "nu-scatter matrix" MGXS type is required but not provided.') else: # Ok, now see the status of scatter and/or multiplicity if ((('scatter matrix' not in self.mgxs_types) and @@ -1189,7 +1189,7 @@ class Library(object): # we need total, and not transport. if 'total' not in self.mgxs_types: error_flag = True - warn('"total" MGXS type is required if a ' + warn('A "total" MGXS type is required if a ' 'scattering matrix is not provided.') # Total or transport can be present, but if using # self.correction=="P0", then we should use transport. @@ -1202,7 +1202,7 @@ class Library(object): elif (((self.correction is None) and ('total' not in self.mgxs_types))): error_flag = True - warn('"total" MGXS type is required, but not provided.') + warn('A "total" MGXS type is required, but not provided.') if error_flag: raise ValueError('Invalid MGXS configuration encountered.') diff --git a/openmc/nuclide.py b/openmc/nuclide.py index a2130680fb..bfeff93113 100644 --- a/openmc/nuclide.py +++ b/openmc/nuclide.py @@ -46,9 +46,9 @@ class Nuclide(object): def __eq__(self, other): if isinstance(other, Nuclide): - if self._name != other.name: + if self.name != other.name: return False - elif self._xs != other.xs: + elif self.xs != other.xs: return False else: return True From c66cb6ab66633b05712cc48b8b43d0cc841ace2c Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Tue, 5 Jul 2016 08:45:19 -0400 Subject: [PATCH 639/650] fixed bug in tally.get_slice() method for mesh filters --- openmc/tallies.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openmc/tallies.py b/openmc/tallies.py index af19549a7c..9ef5148966 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -2986,6 +2986,9 @@ class Tally(object): elif filter_type == 'distribcell': bin_indices = [0] num_bins = find_filter.num_bins + elif filter_type == 'mesh': + bin_indices = [0] + num_bins = find_filter.mesh.num_mesh_cells else: bin_indices.append(bin_index) num_bins += 1 From eb553a75ddde66c6833d2b4b9f5793c13c332864 Mon Sep 17 00:00:00 2001 From: samuel shaner Date: Tue, 5 Jul 2016 12:55:54 +0000 Subject: [PATCH 640/650] changed way num_bins for mesh filter are set in tally.get_slice() method --- openmc/tallies.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/openmc/tallies.py b/openmc/tallies.py index 9ef5148966..4fc19f1e5d 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -2983,12 +2983,9 @@ class Tally(object): bin_indices.extend([bin_index]) bin_indices.extend([bin_index, bin_index+1]) num_bins += 1 - elif filter_type == 'distribcell': + elif filter_type in ['distribcell', 'mesh']: bin_indices = [0] num_bins = find_filter.num_bins - elif filter_type == 'mesh': - bin_indices = [0] - num_bins = find_filter.mesh.num_mesh_cells else: bin_indices.append(bin_index) num_bins += 1 From a73e7529ab1e01e81a6ac07ee418667fd47ee3d4 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Thu, 7 Jul 2016 16:17:50 -0400 Subject: [PATCH 641/650] modified tally slice merge test to get slice of a mesh --- tests/test_tally_slice_merge/inputs_true.dat | 2 +- tests/test_tally_slice_merge/results_true.dat | 86 +++++++++++-------- .../test_tally_slice_merge.py | 45 ++++++++-- 3 files changed, 93 insertions(+), 40 deletions(-) diff --git a/tests/test_tally_slice_merge/inputs_true.dat b/tests/test_tally_slice_merge/inputs_true.dat index be2ec63dc5..771a1de8e8 100644 --- a/tests/test_tally_slice_merge/inputs_true.dat +++ b/tests/test_tally_slice_merge/inputs_true.dat @@ -1 +1 @@ -bb4ae3b75445846bd5db05a06cc20e7589990154ccef8302f276cd8356630d585c513ebb6bfa99f9fc93dd2d30c42bfbb67dd3454134f4c9fcb3bac128d1f1c5 \ No newline at end of file +8e54df241233bf8d5424afa0a22cc23c614a3541e5d7cc64036b5284edd28fe2353905ffdfebb446a4dd0202dda6a7da6d0110af00b4ca79117ec1dbe0584ba7 \ No newline at end of file diff --git a/tests/test_tally_slice_merge/results_true.dat b/tests/test_tally_slice_merge/results_true.dat index ed04152d48..f986a91def 100644 --- a/tests/test_tally_slice_merge/results_true.dat +++ b/tests/test_tally_slice_merge/results_true.dat @@ -1,36 +1,37 @@ - energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 21 U-235 fission 1.08e-01 7.94e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 21 U-235 nu-fission 2.64e-01 1.94e-02 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 21 U-238 fission 1.51e-07 1.00e-08 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 21 U-238 nu-fission 3.76e-07 2.50e-08 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 6.25e-07 2.00e+01 21 U-235 fission 3.12e-02 2.56e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 6.25e-07 2.00e+01 21 U-235 nu-fission 7.65e-02 6.24e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 6.25e-07 2.00e+01 21 U-238 fission 2.00e-02 1.30e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 6.25e-07 2.00e+01 21 U-238 nu-fission 5.56e-02 3.78e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 27 U-235 fission 4.43e-02 7.21e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 27 U-235 nu-fission 1.08e-01 1.76e-02 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 27 U-238 fission 6.14e-08 9.64e-09 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 27 U-238 nu-fission 1.53e-07 2.40e-08 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 6.25e-07 2.00e+01 27 U-235 fission 1.39e-02 1.06e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 6.25e-07 2.00e+01 27 U-235 nu-fission 3.40e-02 2.61e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 6.25e-07 2.00e+01 27 U-238 fission 9.72e-03 1.21e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 6.25e-07 2.00e+01 27 U-238 nu-fission 2.71e-02 3.80e-03 energy low [MeV] energy high [MeV] cell nuclide score mean std. dev. -0 0.00e+00 6.25e-07 21 U-235 fission 1.08e-01 7.94e-03 -1 0.00e+00 6.25e-07 21 U-235 nu-fission 2.64e-01 1.94e-02 -2 0.00e+00 6.25e-07 21 U-238 fission 1.51e-07 1.00e-08 -3 0.00e+00 6.25e-07 21 U-238 nu-fission 3.76e-07 2.50e-08 -4 0.00e+00 6.25e-07 27 U-235 fission 4.43e-02 7.21e-03 -5 0.00e+00 6.25e-07 27 U-235 nu-fission 1.08e-01 1.76e-02 -6 0.00e+00 6.25e-07 27 U-238 fission 6.14e-08 9.64e-09 -7 0.00e+00 6.25e-07 27 U-238 nu-fission 1.53e-07 2.40e-08 -8 6.25e-07 2.00e+01 21 U-235 fission 3.12e-02 2.56e-03 -9 6.25e-07 2.00e+01 21 U-235 nu-fission 7.65e-02 6.24e-03 -10 6.25e-07 2.00e+01 21 U-238 fission 2.00e-02 1.30e-03 -11 6.25e-07 2.00e+01 21 U-238 nu-fission 5.56e-02 3.78e-03 -12 6.25e-07 2.00e+01 27 U-235 fission 1.39e-02 1.06e-03 -13 6.25e-07 2.00e+01 27 U-235 nu-fission 3.40e-02 2.61e-03 -14 6.25e-07 2.00e+01 27 U-238 fission 9.72e-03 1.21e-03 -15 6.25e-07 2.00e+01 27 U-238 nu-fission 2.71e-02 3.80e-03 sum(distribcell) energy low [MeV] energy high [MeV] nuclide score mean std. dev. + cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 21 0.00e+00 6.25e-07 U-235 fission 1.08e-01 7.94e-03 cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 21 0.00e+00 6.25e-07 U-235 nu-fission 2.64e-01 1.94e-02 cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 21 0.00e+00 6.25e-07 U-238 fission 1.51e-07 1.00e-08 cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 21 0.00e+00 6.25e-07 U-238 nu-fission 3.76e-07 2.50e-08 cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 21 6.25e-07 2.00e+01 U-235 fission 3.12e-02 2.56e-03 cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 21 6.25e-07 2.00e+01 U-235 nu-fission 7.65e-02 6.24e-03 cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 21 6.25e-07 2.00e+01 U-238 fission 2.00e-02 1.30e-03 cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 21 6.25e-07 2.00e+01 U-238 nu-fission 5.56e-02 3.78e-03 cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 27 0.00e+00 6.25e-07 U-235 fission 4.43e-02 7.21e-03 cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 27 0.00e+00 6.25e-07 U-235 nu-fission 1.08e-01 1.76e-02 cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 27 0.00e+00 6.25e-07 U-238 fission 6.14e-08 9.64e-09 cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 27 0.00e+00 6.25e-07 U-238 nu-fission 1.53e-07 2.40e-08 cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 27 6.25e-07 2.00e+01 U-235 fission 1.39e-02 1.06e-03 cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 27 6.25e-07 2.00e+01 U-235 nu-fission 3.40e-02 2.61e-03 cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 27 6.25e-07 2.00e+01 U-238 fission 9.72e-03 1.21e-03 cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 27 6.25e-07 2.00e+01 U-238 nu-fission 2.71e-02 3.80e-03 cell energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 21 0.00e+00 6.25e-07 U-235 fission 1.08e-01 7.94e-03 +1 21 0.00e+00 6.25e-07 U-235 nu-fission 2.64e-01 1.94e-02 +2 21 0.00e+00 6.25e-07 U-238 fission 1.51e-07 1.00e-08 +3 21 0.00e+00 6.25e-07 U-238 nu-fission 3.76e-07 2.50e-08 +4 21 6.25e-07 2.00e+01 U-235 fission 3.12e-02 2.56e-03 +5 21 6.25e-07 2.00e+01 U-235 nu-fission 7.65e-02 6.24e-03 +6 21 6.25e-07 2.00e+01 U-238 fission 2.00e-02 1.30e-03 +7 21 6.25e-07 2.00e+01 U-238 nu-fission 5.56e-02 3.78e-03 +8 27 0.00e+00 6.25e-07 U-235 fission 4.43e-02 7.21e-03 +9 27 0.00e+00 6.25e-07 U-235 nu-fission 1.08e-01 1.76e-02 +10 27 0.00e+00 6.25e-07 U-238 fission 6.14e-08 9.64e-09 +11 27 0.00e+00 6.25e-07 U-238 nu-fission 1.53e-07 2.40e-08 +12 27 6.25e-07 2.00e+01 U-235 fission 1.39e-02 1.06e-03 +13 27 6.25e-07 2.00e+01 U-235 nu-fission 3.40e-02 2.61e-03 +14 27 6.25e-07 2.00e+01 U-238 fission 9.72e-03 1.21e-03 +15 27 6.25e-07 2.00e+01 U-238 nu-fission 2.71e-02 3.80e-03 + sum(distribcell) energy low [MeV] energy high [MeV] nuclide score mean std. dev. 0 (0, 100, 2000, 30000) 0.00e+00 6.25e-07 U-235 fission 0.00e+00 0.00e+00 1 (0, 100, 2000, 30000) 0.00e+00 6.25e-07 U-235 nu-fission 0.00e+00 0.00e+00 2 (0, 100, 2000, 30000) 0.00e+00 6.25e-07 U-238 fission 0.00e+00 0.00e+00 @@ -46,4 +47,21 @@ 12 (500, 5000, 50000) 6.25e-07 2.00e+01 U-235 fission 0.00e+00 0.00e+00 13 (500, 5000, 50000) 6.25e-07 2.00e+01 U-235 nu-fission 0.00e+00 0.00e+00 14 (500, 5000, 50000) 6.25e-07 2.00e+01 U-238 fission 0.00e+00 0.00e+00 -15 (500, 5000, 50000) 6.25e-07 2.00e+01 U-238 nu-fission 0.00e+00 0.00e+00 \ No newline at end of file +15 (500, 5000, 50000) 6.25e-07 2.00e+01 U-238 nu-fission 0.00e+00 0.00e+00 + sum(mesh) energy low [MeV] energy high [MeV] nuclide score mean std. dev. +0 ((1, 1, 1), (1, 2, 1)) 0.00e+00 6.25e-07 U-235 fission 9.18e-03 1.62e-03 +1 ((1, 1, 1), (1, 2, 1)) 0.00e+00 6.25e-07 U-235 nu-fission 2.24e-02 3.94e-03 +2 ((1, 1, 1), (1, 2, 1)) 0.00e+00 6.25e-07 U-238 fission 1.31e-08 2.08e-09 +3 ((1, 1, 1), (1, 2, 1)) 0.00e+00 6.25e-07 U-238 nu-fission 3.26e-08 5.19e-09 +4 ((1, 1, 1), (1, 2, 1)) 6.25e-07 2.00e+01 U-235 fission 8.40e-04 2.13e-04 +5 ((1, 1, 1), (1, 2, 1)) 6.25e-07 2.00e+01 U-235 nu-fission 2.06e-03 5.17e-04 +6 ((1, 1, 1), (1, 2, 1)) 6.25e-07 2.00e+01 U-238 fission 7.05e-04 3.42e-04 +7 ((1, 1, 1), (1, 2, 1)) 6.25e-07 2.00e+01 U-238 nu-fission 1.99e-03 1.01e-03 +8 ((2, 1, 1), (2, 2, 1)) 0.00e+00 6.25e-07 U-235 fission 8.77e-03 1.30e-03 +9 ((2, 1, 1), (2, 2, 1)) 0.00e+00 6.25e-07 U-235 nu-fission 2.14e-02 3.18e-03 +10 ((2, 1, 1), (2, 2, 1)) 0.00e+00 6.25e-07 U-238 fission 1.24e-08 1.74e-09 +11 ((2, 1, 1), (2, 2, 1)) 0.00e+00 6.25e-07 U-238 nu-fission 3.08e-08 4.33e-09 +12 ((2, 1, 1), (2, 2, 1)) 6.25e-07 2.00e+01 U-235 fission 2.30e-03 6.20e-04 +13 ((2, 1, 1), (2, 2, 1)) 6.25e-07 2.00e+01 U-235 nu-fission 5.63e-03 1.52e-03 +14 ((2, 1, 1), (2, 2, 1)) 6.25e-07 2.00e+01 U-238 fission 1.45e-03 7.19e-04 +15 ((2, 1, 1), (2, 2, 1)) 6.25e-07 2.00e+01 U-238 nu-fission 3.97e-03 1.98e-03 diff --git a/tests/test_tally_slice_merge/test_tally_slice_merge.py b/tests/test_tally_slice_merge/test_tally_slice_merge.py index 4dbb993d59..0b05c088df 100644 --- a/tests/test_tally_slice_merge/test_tally_slice_merge.py +++ b/tests/test_tally_slice_merge/test_tally_slice_merge.py @@ -33,13 +33,21 @@ class TallySliceMergeTestHarness(PyAPITestHarness): cell_27 = openmc.Filter(type='cell', bins=[27]) distribcell_filter = openmc.Filter(type='distribcell', bins=[21]) + mesh = openmc.Mesh(name='mesh') + mesh.type = 'regular' + mesh.dimension = [2, 2] + mesh.lower_left = [-50., -50.] + mesh.upper_right = [+50., +50.] + mesh_filter = openmc.Filter(type='mesh', bins=[mesh.id]) + mesh_filter.mesh = mesh + self.cell_filters = [cell_21, cell_27] self.energy_filters = [low_energy, high_energy] # Initialize cell tallies with filters, nuclides and scores tallies = [] - for cell_filter in self.energy_filters: - for energy_filter in self.cell_filters: + for energy_filter in self.energy_filters: + for cell_filter in self.cell_filters: for nuclide in self.nuclides: for score in self.scores: tally = openmc.Tally() @@ -69,8 +77,18 @@ class TallySliceMergeTestHarness(PyAPITestHarness): for nuclide in self.nuclides: distribcell_tally.add_nuclide(nuclide) + mesh_tally = openmc.Tally(name='mesh tally') + mesh_tally.estimator = 'tracklength' + mesh_tally.add_filter(mesh_filter) + mesh_tally.add_filter(merged_energies) + for score in self.scores: + mesh_tally.add_score(score) + for nuclide in self.nuclides: + mesh_tally.add_nuclide(nuclide) + # Add tallies to a Tallies object - tallies_file = openmc.Tallies((tallies[0], distribcell_tally)) + tallies_file = openmc.Tallies((tallies[0], distribcell_tally, + mesh_tally)) # Export tallies to file self._input_set.tallies = tallies_file @@ -121,7 +139,7 @@ class TallySliceMergeTestHarness(PyAPITestHarness): # Append merged Tally Pandas DataFrame to output string df = tallies[0].get_pandas_dataframe() - outstr += df.to_string() + outstr += df.to_string() + '\n' # Extract the distribcell tally distribcell_tally = sp.get_tally(name='distribcell tally') @@ -138,7 +156,24 @@ class TallySliceMergeTestHarness(PyAPITestHarness): # Append merged Tally Pandas DataFrame to output string df = merge_tally.get_pandas_dataframe() - outstr += df.to_string() + outstr += df.to_string() + '\n' + + # Extract the mesh tally + mesh_tally = sp.get_tally(name='mesh tally') + + # Sum up a few subdomains from the mesh tally + sum1 = mesh_tally.summation(filter_type='mesh', + filter_bins=[(1,1,1), (1,2,1)]) + # Sum up a few subdomains from the mesh tally + sum2 = mesh_tally.summation(filter_type='mesh', + filter_bins=[(2,1,1), (2,2,1)]) + + # Merge the distribcell tally slices + merge_tally = sum1.merge(sum2) + + # Append merged Tally Pandas DataFrame to output string + df = merge_tally.get_pandas_dataframe() + outstr += df.to_string() + '\n' # Hash the results if necessary if hash_output: From 9d55caf5c0caf3d157ffd8e6070c28a87e877a96 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Thu, 7 Jul 2016 16:19:30 -0400 Subject: [PATCH 642/650] fixed typo in tally slice merge test comment --- tests/test_tally_slice_merge/test_tally_slice_merge.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_tally_slice_merge/test_tally_slice_merge.py b/tests/test_tally_slice_merge/test_tally_slice_merge.py index 0b05c088df..1472cc75a2 100644 --- a/tests/test_tally_slice_merge/test_tally_slice_merge.py +++ b/tests/test_tally_slice_merge/test_tally_slice_merge.py @@ -168,7 +168,7 @@ class TallySliceMergeTestHarness(PyAPITestHarness): sum2 = mesh_tally.summation(filter_type='mesh', filter_bins=[(2,1,1), (2,2,1)]) - # Merge the distribcell tally slices + # Merge the mesh tally slices merge_tally = sum1.merge(sum2) # Append merged Tally Pandas DataFrame to output string From bc5efa71c77caafdd7ac0fb974dc20f6084549a7 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Sun, 10 Jul 2016 15:01:24 -0600 Subject: [PATCH 643/650] updated formatting for tally slice merge test --- tests/test_tally_slice_merge/test_tally_slice_merge.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/tests/test_tally_slice_merge/test_tally_slice_merge.py b/tests/test_tally_slice_merge/test_tally_slice_merge.py index 1472cc75a2..78ea4fe9d5 100644 --- a/tests/test_tally_slice_merge/test_tally_slice_merge.py +++ b/tests/test_tally_slice_merge/test_tally_slice_merge.py @@ -79,12 +79,9 @@ class TallySliceMergeTestHarness(PyAPITestHarness): mesh_tally = openmc.Tally(name='mesh tally') mesh_tally.estimator = 'tracklength' - mesh_tally.add_filter(mesh_filter) - mesh_tally.add_filter(merged_energies) - for score in self.scores: - mesh_tally.add_score(score) - for nuclide in self.nuclides: - mesh_tally.add_nuclide(nuclide) + mesh_tally.filters = [mesh_filter, merged_energies] + mesh_tally.scores = self.scores + mesh_tally.nuclides = self.nuclides # Add tallies to a Tallies object tallies_file = openmc.Tallies((tallies[0], distribcell_tally, From c9d2d6899af1b35d81e25f8f505f8d09df2b8b50 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 1 Jul 2016 09:22:49 +0700 Subject: [PATCH 644/650] Incremented version number and added release notes --- docs/source/conf.py | 4 +- docs/source/methods/geometry.rst | 2 +- docs/source/releasenotes.rst | 113 ++++++++++++++++--------------- man/man1/openmc.1 | 2 +- setup.py | 2 +- src/constants.F90 | 4 +- 6 files changed, 66 insertions(+), 61 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 38661cdb37..cb43079e37 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -69,9 +69,9 @@ copyright = u'2011-2016, Massachusetts Institute of Technology' # built documents. # # The short X.Y version. -version = "0.7" +version = "0.8" # The full version, including alpha/beta/rc tags. -release = "0.7.1" +release = "0.8.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/source/methods/geometry.rst b/docs/source/methods/geometry.rst index bcd568ca3a..c689883d08 100644 --- a/docs/source/methods/geometry.rst +++ b/docs/source/methods/geometry.rst @@ -205,7 +205,7 @@ traveling in its current direction, it will not hit the surface. The complete derivation for different types of surfaces used in OpenMC will be presented in the following sections. -Since :math:f(x,y,z)` in general is quadratic in :math:`x`, :math:`y`, and +Since :math:`f(x,y,z)` in general is quadratic in :math:`x`, :math:`y`, and :math:`z`, this implies that :math:`f(x_0 + du_0, y + dv_0, z + dw_0)` is quadratic in :math:`d`. Thus we expect at most two real solutions to :eq:`dist-to-boundary-1`. If no solutions to :eq:`dist-to-boundary-1` exist or diff --git a/docs/source/releasenotes.rst b/docs/source/releasenotes.rst index 65309fd70a..3b96be7f8f 100644 --- a/docs/source/releasenotes.rst +++ b/docs/source/releasenotes.rst @@ -1,78 +1,83 @@ .. _releasenotes: ============================== -Release Notes for OpenMC 0.7.1 +Release Notes for OpenMC 0.8.0 ============================== -This release of OpenMC provides some substantial improvements over version -0.7.0. Non-simple cell regions can now be defined through the ``|`` (union) and -``~`` (complement) operators. Similar changes in the Python API also allow -complex cell regions to be defined. A true secondary particle bank now exists; -this is crucial for photon transport (to be added in the next minor release). A -rich API for multi-group cross section generation has been added via the -``openmc.mgxs`` Python module. +This release of OpenMC includes a few new major features including the +capability to perform neutron transport with multi-group cross section data as +well as experimental support for the windowed multipole method being developed +at MIT. Source sampling options have also been expanded significantly, with the +option to supply arbitrary tabular and discrete distributions for energy, angle, +and spatial coordinates. -Various improvements to tallies have also been made. It is now possible to -explicitly specify that a collision estimator be used in a tally. A new -``delayedgroup`` filter and ``delayed-nu-fission`` score allow a user to obtain -delayed fission neutron production rates filtered by delayed group. Finally, the -new ``inverse-velocity`` score may be useful for calculating kinetics -parameters. +The Python API has been significantly restructured in this release compared to +version 0.7.1. Any scripts written based on the version 0.7.1 API will likely +need to be rewritten. Some of the most visible changes include the following: -.. caution:: In previous versions, depending on how OpenMC was compiled binary - output was either given in HDF5 or a flat binary format. With this - version, all binary output is now HDF5 which means you **must** - have HDF5 in order to install OpenMC. Please consult the user's - guide for instructions on how to compile with HDF5. +- ``SettingsFile`` is now ``Settings``, ``MaterialsFile`` is now ``Materials``, + and ``TalliesFile`` is now ``Tallies``. +- The ``GeometryFile`` class no longer exists and is replaced by the + ``Geometry`` class which now has an ``export_to_xml()`` method. +- Source distributions are defined using the ``Source`` class and assigned to + the ``Settings.source`` property. +- The ``Executor`` class no longer exists and is replaced by ``openmc.run()`` + and ``openmc.plot_geometry()`` functions. + +The Python API documentation has also been significantly expanded. ------------------- System Requirements ------------------- There are no special requirements for running the OpenMC code. As of this -release, OpenMC has been tested on a variety of Linux distributions, Mac OS X, -and Microsoft Windows 7. Memory requirements will vary depending on the size of -the problem at hand (mostly on the number of nuclides in the problem). +release, OpenMC has been tested on a variety of Linux distributions and Mac +OS X. Numerous users have reported working builds on Microsoft Windows, but your +mileage may vary. Memory requirements will vary depending on the size of the +problem at hand (mostly on the number of nuclides and tallies in the problem). ------------ New Features ------------ -- Support for complex cell regions (union and complement operators) -- Generic quadric surface type -- Improved handling of secondary particles -- Binary output is now solely HDF5 -- ``openmc.mgxs`` Python module enabling multi-group cross section generation -- Collision estimator for tallies -- Delayed fission neutron production tallies with ability to filter by delayed - group -- Inverse velocity tally score -- Performance improvements for binary search -- Performance improvements for reaction rate tallies +- Multi-group mode +- Vast improvements to the Python API +- Experimental windowed multipole capability +- Periodic boundary conditions +- Expanded source sampling options +- Distributed materials +- Subcritical multiplication support +- Improved method for reproducible URR table sampling +- Refactor of continuous-energy reaction data +- Improved documentation and new Jupyter notebooks --------- Bug Fixes --------- -- 299322_: Bug with material filter when void material present -- d74840_: Fix triggers on tallies with multiple filters -- c29a81_: Correctly handle maximum transport energy -- 3edc23_: Fixes in the nu-scatter score -- 629e3b_: Assume unspecified surface coefficients are zero in Python API -- 5dbe8b_: Fix energy filters for openmc-plot-mesh-tally -- ff66f4_: Fixes in the openmc-plot-mesh-tally script -- 441fd4_: Fix bug in kappa-fission score -- 7e5974_: Allow fixed source simulations from Python API +- 70daa7_: Make sure MT=3 cross section is not used +- 40b05f_: Ensure source bank is resampled for fixed source runs +- 9586ed_: Fix two hexagonal lattice bugs +- a855e8_: Make sure graphite models don't error out on max events +- 7294a1_: Fix incorrect check on cmfd.xml +- 12f246_: Ensure number of realizations is written to statepoint +- 0227f4_: Fix bug when sampling multiple energy distributions +- 51deaa_: Prevent segfault when user specifies '18' on tally scores +- fed74b_: Prevent duplicate tally scores +- 8467ae_: Better threshold for allowable lost particles +- 493c6f_: Fix type of return argument for h5pget_driver_f -.. _299322: https://github.com/mit-crpg/openmc/commit/299322 -.. _d74840: https://github.com/mit-crpg/openmc/commit/d74840 -.. _c29a81: https://github.com/mit-crpg/openmc/commit/c29a81 -.. _3edc23: https://github.com/mit-crpg/openmc/commit/3edc23 -.. _629e3b: https://github.com/mit-crpg/openmc/commit/629e3b -.. _5dbe8b: https://github.com/mit-crpg/openmc/commit/5dbe8b -.. _ff66f4: https://github.com/mit-crpg/openmc/commit/ff66f4 -.. _441fd4: https://github.com/mit-crpg/openmc/commit/441fd4 -.. _7e5974: https://github.com/mit-crpg/openmc/commit/7e5974 +.. _70daa7: https://github.com/mit-crpg/openmc/commit/70daa7 +.. _40b05f: https://github.com/mit-crpg/openmc/commit/40b05f +.. _9586ed: https://github.com/mit-crpg/openmc/commit/9586ed +.. _a855e8: https://github.com/mit-crpg/openmc/commit/a855e8 +.. _7294a1: https://github.com/mit-crpg/openmc/commit/7294a1 +.. _12f246: https://github.com/mit-crpg/openmc/commit/12f246 +.. _0227f4: https://github.com/mit-crpg/openmc/commit/0227f4 +.. _51deaa: https://github.com/mit-crpg/openmc/commit/51deaa +.. _fed74b: https://github.com/mit-crpg/openmc/commit/fed74b +.. _8467ae: https://github.com/mit-crpg/openmc/commit/8467ae +.. _493c6f: https://github.com/mit-crpg/openmc/commit/493c6f ------------ Contributors @@ -81,11 +86,11 @@ Contributors This release contains new contributions from the following people: - `Will Boyd `_ -- `Sterling Harper `_ -- `Bryan Herman `_ +- `Derek Gaston `_ +- `Sterling Harper `_ - `Colin Josey `_ +- `Jingang Liang `_ - `Adam Nelson `_ - `Paul Romano `_ - `Kelly Rowland `_ - `Sam Shaner `_ -- `Jon Walsh `_ diff --git a/man/man1/openmc.1 b/man/man1/openmc.1 index 102adfbdc3..e69360a7c1 100644 --- a/man/man1/openmc.1 +++ b/man/man1/openmc.1 @@ -46,7 +46,7 @@ to locate ACE format cross section libraries if the user has not specified the tag in .I settings.xml\fP. .SH LICENSE -Copyright \(co 2011-2015 Massachusetts Institute of Technology. +Copyright \(co 2011-2016 Massachusetts Institute of Technology. .PP Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/setup.py b/setup.py index a842a1c3ae..393f40bd35 100644 --- a/setup.py +++ b/setup.py @@ -9,7 +9,7 @@ except ImportError: have_setuptools = False kwargs = {'name': 'openmc', - 'version': '0.7.1', + 'version': '0.8.0', 'packages': ['openmc', 'openmc.data', 'openmc.mgxs', 'openmc.model', 'openmc.stats'], 'scripts': glob.glob('scripts/openmc-*'), diff --git a/src/constants.F90 b/src/constants.F90 index b3e5ed89b1..127b4507fc 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -7,8 +7,8 @@ module constants ! OpenMC major, minor, and release numbers integer, parameter :: VERSION_MAJOR = 0 - integer, parameter :: VERSION_MINOR = 7 - integer, parameter :: VERSION_RELEASE = 1 + integer, parameter :: VERSION_MINOR = 8 + integer, parameter :: VERSION_RELEASE = 0 ! Revision numbers for binary files integer, parameter :: REVISION_STATEPOINT = 15 From ede81f95e989bcd4f1842e663e7f6526e190e83c Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 1 Jul 2016 13:19:39 +0700 Subject: [PATCH 645/650] Ensure line-length is within 160 characters per F2008 standard --- src/multipole_header.F90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/multipole_header.F90 b/src/multipole_header.F90 index a21677a952..143047b0b5 100644 --- a/src/multipole_header.F90 +++ b/src/multipole_header.F90 @@ -45,7 +45,8 @@ module multipole_header logical :: fissionable = .false. ! Is this isotope fissionable? integer :: length ! Number of poles integer, allocatable :: l_value(:) ! The l index of the pole - real(8), allocatable :: pseudo_k0RS(:) ! The value (sqrt(2*mass neutron)/reduced planck constant) * AWR/(AWR + 1) * scattering radius for each l + real(8), allocatable :: pseudo_k0RS(:) ! The value (sqrt(2*mass neutron)/reduced planck constant) + ! * AWR/(AWR + 1) * scattering radius for each l complex(8), allocatable :: data(:,:) ! Contains all of the pole-residue data real(8) :: sqrtAWR ! Square root of the atomic weight ratio From 195f81cacbf5c9bb8ca7b48ffb641d3c4f384180 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 1 Jul 2016 13:20:47 +0700 Subject: [PATCH 646/650] Update Intel compiler flags. Allow CC to be set in run_tests.py --- CMakeLists.txt | 9 ++++----- tests/run_tests.py | 7 +++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 16cf914e58..73f0afccc2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -147,8 +147,7 @@ elseif(CMAKE_Fortran_COMPILER_ID STREQUAL Intel) if(debug) list(APPEND f90flags -g -warn -ftrapuv -fp-stack-check "-check all" -fpe0) - list(APPEND cflags -g -warn -ftrapuv -fp-stack-check - "-check all" -fpe0) + list(APPEND cflags -g -w3 -ftrapuv -fp-stack-check) list(APPEND ldflags -g) endif() if(profile) @@ -161,9 +160,9 @@ elseif(CMAKE_Fortran_COMPILER_ID STREQUAL Intel) list(APPEND cflags -O3) endif() if(openmp) - list(APPEND f90flags -openmp) - list(APPEND cflags -openmp) - list(APPEND ldflags -openmp) + list(APPEND f90flags -qopenmp) + list(APPEND cflags -qopenmp) + list(APPEND ldflags -qopenmp) endif() elseif(CMAKE_Fortran_COMPILER_ID STREQUAL PGI) diff --git a/tests/run_tests.py b/tests/run_tests.py index 5a04f340a8..87282055c2 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -42,6 +42,7 @@ parser.add_option("-s", "--script", action="store_true", dest="script", # Default compiler paths FC='gfortran' +CC='gcc' MPI_DIR='/opt/mpich/3.2-gnu' HDF5_DIR='/opt/hdf5/1.8.16-gnu' PHDF5_DIR='/opt/phdf5/1.8.16-gnu' @@ -52,6 +53,8 @@ script_mode = False # Override default compiler paths if environmental vars are found if 'FC' in os.environ: FC = os.environ['FC'] +if 'CC' in os.environ: + CC = os.environ['CC'] if 'MPI_DIR' in os.environ: MPI_DIR = os.environ['MPI_DIR'] if 'HDF5_DIR' in os.environ: @@ -158,8 +161,10 @@ class Test(object): self.fc = os.path.join(MPI_DIR, 'bin', 'mpifort') else: self.fc = os.path.join(MPI_DIR, 'bin', 'mpif90') + self.cc = os.path.join(MPI_DIR, 'bin', 'mpicc') else: self.fc = FC + self.cc = CC # Sets the build name that will show up on the CDash def get_build_name(self): @@ -189,6 +194,7 @@ class Test(object): # Runs the ctest script which performs all the cmake/ctest/cdash def run_ctest_script(self): os.environ['FC'] = self.fc + os.environ['CC'] = self.cc if self.mpi: os.environ['MPI_DIR'] = MPI_DIR if self.phdf5: @@ -203,6 +209,7 @@ class Test(object): # Runs cmake when in non-script mode def run_cmake(self): os.environ['FC'] = self.fc + os.environ['CC'] = self.cc if self.mpi: os.environ['MPI_DIR'] = MPI_DIR if self.phdf5: From 65f1c4baaf62971a56d64d4ccf8d145a8819f98b Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 19 Jul 2016 08:45:28 -0500 Subject: [PATCH 647/650] When installing OpenMC locally, set PYTHONPATH to avoid error --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 73f0afccc2..dcaf30a1d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -317,6 +317,7 @@ if(PYTHONINTERP_FOUND) --root=debian/openmc --install-layout=deb WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})") else() + install(CODE "set(ENV{PYTHONPATH} \"${CMAKE_INSTALL_PREFIX}/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages\")") install(CODE "execute_process( COMMAND ${PYTHON_EXECUTABLE} setup.py install --prefix=${CMAKE_INSTALL_PREFIX} From 5d4bd3079cb6fc6e68599775ff5f39adcb517e06 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 20 Jul 2016 22:20:41 -0500 Subject: [PATCH 648/650] Ensure offset argument in h5tinsert_f is integer(SIZE_T) --- src/hdf5_interface.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hdf5_interface.F90 b/src/hdf5_interface.F90 index 0bfe04051f..44541a50e1 100644 --- a/src/hdf5_interface.F90 +++ b/src/hdf5_interface.F90 @@ -2383,8 +2383,8 @@ contains ! Insert the 'r' and 'i' identifiers call h5tcreate_f(H5T_COMPOUND_F, size_double, dtype_real, hdf5_err) call h5tcreate_f(H5T_COMPOUND_F, size_double, dtype_imag, hdf5_err) - call h5tinsert_f(dtype_real, "r", 0_8, H5T_NATIVE_DOUBLE, hdf5_err) - call h5tinsert_f(dtype_imag, "i", 0_8, H5T_NATIVE_DOUBLE, hdf5_err) + call h5tinsert_f(dtype_real, "r", 0_SIZE_T, H5T_NATIVE_DOUBLE, hdf5_err) + call h5tinsert_f(dtype_imag, "i", 0_SIZE_T, H5T_NATIVE_DOUBLE, hdf5_err) ! Set up collective vs. independent I/O data_xfer_mode = H5FD_MPIO_COLLECTIVE_F From 9b1292fc1523fdc45b075a16c9f9b2d8b453157a Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 21 Jul 2016 09:52:47 -0500 Subject: [PATCH 649/650] Remove -flto flag for GCC optimize=on. Apparently causes trouble with gcc 5.4 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dcaf30a1d6..64eee2e9f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -126,7 +126,7 @@ if(CMAKE_Fortran_COMPILER_ID STREQUAL GNU) list(APPEND ldflags -pg) endif() if(optimize) - list(APPEND f90flags -O3 -flto -fuse-linker-plugin) + list(APPEND f90flags -O3) list(APPEND cflags -O3) endif() if(openmp) From b1fa2c176f98df9b4909496efeab59817a663642 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 25 Jul 2016 09:10:14 -0500 Subject: [PATCH 650/650] Fix bug in OpenCG compatibility module --- LICENSE | 2 +- openmc/opencg_compatible.py | 2 +- readme.rst | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/LICENSE b/LICENSE index f009376324..fe18b53f9f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2011-2015 Massachusetts Institute of Technology +Copyright (c) 2011-2016 Massachusetts Institute of Technology Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/openmc/opencg_compatible.py b/openmc/opencg_compatible.py index 967e11f48c..93a257f465 100644 --- a/openmc/opencg_compatible.py +++ b/openmc/opencg_compatible.py @@ -820,7 +820,7 @@ def get_opencg_lattice(openmc_lattice): # Create an OpenCG Lattice to represent this OpenMC Lattice name = openmc_lattice.name - dimension = openmc_lattice.dimension + dimension = openmc_lattice.shape pitch = openmc_lattice.pitch lower_left = openmc_lattice.lower_left universes = openmc_lattice.universes diff --git a/readme.rst b/readme.rst index ab13e36f5c..03964d9436 100644 --- a/readme.rst +++ b/readme.rst @@ -10,9 +10,9 @@ transport code based on modern methods. It is a constructive solid geometry, continuous-energy transport code that uses ACE format cross sections. The project started under the Computational Reactor Physics Group at MIT. -Complete documentation on the usage of OpenMC is hosted on GitHub at -http://mit-crpg.github.io/openmc/. If you are interested in the project or would -like to help and contribute, please send a message to the OpenMC User's Group +Complete documentation on the usage of OpenMC is hosted on Read the Docs at +http://openmc.readthedocs.io. If you are interested in the project or would like +to help and contribute, please send a message to the OpenMC User's Group `mailing list`_. ------------ @@ -49,7 +49,7 @@ License OpenMC is distributed under the MIT/X license_. .. _mailing list: https://groups.google.com/forum/?fromgroups=#!forum/openmc-users -.. _installation instructions: http://mit-crpg.github.io/openmc/usersguide/install.html -.. _Troubleshooting section: http://mit-crpg.github.io/openmc/usersguide/troubleshoot.html +.. _installation instructions: http://openmc.readthedocs.io/en/latest/usersguide/install.html +.. _Troubleshooting section: http://openmc.readthedocs.io/en/latest/usersguide/troubleshoot.html .. _Issues: https://github.com/mit-crpg/openmc/issues -.. _license: http://mit-crpg.github.io/openmc/license.html +.. _license: http://openmc.readthedocs.io/en/latest/license.html